ZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC8xODV0ZXN0LmRiIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0LzE4NXRlc3QuZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjYjVlMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC8xODV0ZXN0LmRiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9TaW5lLTEwMDBIei0zMDBtcy5haWYgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvU2luZS0xMDAwSHotMzAwbXMuYWlmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDhmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvU2luZS0xMDAwSHotMzAwbXMuYWlmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9fX2luaXRfXy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTMwNTRiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKyMgRHVtbXkgZmlsZSB0byBtYWtlIHRoaXMgZGlyZWN0b3J5IGEgcGFja2FnZS4KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9hdWRpb3Rlc3QuYXUgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvYXVkaW90ZXN0LmF1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NmIwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvYXVkaW90ZXN0LmF1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9hdXRvdGVzdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9hdXRvdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWMyMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2F1dG90ZXN0LnB5CkBAIC0wLDAgKzEsNiBAQAorIyBUaGlzIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvIHJ1bm5pbmcgcmVncnRlc3QucHkgZnJvbSB0aGUgY21kbGluZS4KKyMgSXQgY2FuIGJlIGVzcGVjaWFsbHkgaGFuZHkgaWYgeW91J3JlIGluIGFuIGludGVyYWN0aXZlIHNoZWxsLCBlLmcuLAorIyBmcm9tIHRlc3QgaW1wb3J0IGF1dG90ZXN0LgorCitmcm9tIHRlc3QgaW1wb3J0IHJlZ3J0ZXN0CityZWdydGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRfY29kaW5nLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2JhZF9jb2RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcxYjBhOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRfY29kaW5nLnB5CkBAIC0wLDAgKzEgQEAKKyMgLSotIGNvZGluZzogdWZ0LTggLSotCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkX2NvZGluZzIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkX2NvZGluZzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5MDFiNQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRfY29kaW5nMi5weQpAQCAtMCwwICsxLDIgQEAKK++7vyNjb2Rpbmc6IHV0ZjgKK3ByaW50ICfmiJEnCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkY2VydC5wZW0gYi9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxOTE0NgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRjZXJ0LnBlbQpAQCAtMCwwICsxLDM2IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlDWHdJQkFBS0JnUUM4ZGRyaG0rTHV0QnZqWWNRbG5IMjFQUElzZUoxSlZHMkhNbU4yQ21aazJZdWtPKzlMCitvcGRKaFR2YkdmRWowRFFzMUlFOE0ra1RVeU9tdUtmVnJGTUt3dFZlQ0pwaHJBbmhvejdUWU91TEJTcXQ3bFZICitmaGkvVndvdkVTSmxhQk9wK1dNbmZoY2R1UEVZSFl4LzZjblZhcElrWm5MdDMwenUydW0rRHpBOWpRSURBUUFCCitBb0dCQUswRlpwYUtqNlduSlpOMFJxaGhLK2dndEJXd0JuYzBVL296Z0t6MmoxczNmc1NoWWVpR3RXNkNLNW5VCitEMWRaNXd6aGJHVGhJN0xpT1hEdlJ1Y2M5bjd2VWdpMGFscVBRL1BGb2RQeEFOL2VFWWttWFE3VzJrN3p3c0RBCitJVUswS1Voa3RRYkx1OHFGL204cU04NmJhOXk5LzlZa1h1UWJaM0NPbDVhaFRacmhBa0VBMzAxUDA4Ukt2M0tNCitvWG5HVTJVSFR1SjFNQUQyaE9yUHhqRDQvd3hBLzM5RVdHOWJaY3piSnlnZ0I0Ukh1MEkzTk9TRmpBbTNIUW0wCitBTk91NVFLOW93SkJBTmdPZUxmTk5jRjRwcCtVaWtSRnF4azVoVUxxUkFXelZ4VnJXZTg1RmxQbTBWVm1IYmIvCitsb2lmN21xalU4bzFqVGQvTE03UkQ5ZjJ1c1p5RTJwc2F3OENRUUNOTGhrcFgzS081a0tKbVM5TjdKTVpTYzRqCitvb2c1OHllWU84QkJxS0t6cHVnMExYdVF1bHRZdjJLNHZlYUlPMDRpTDlWTGU1ejlTL1ExamFDSEJCdVhBa0VBCit6OGdqR29pMUFPcDZQQkJMWk5zbmNDdmNWLzBhQysxc2U0SHhUTm8yK2R1S1NEbmJxK2xqcU9NK0U3b2RVK05xCitld3ZJV09HLy9lOGZzc2QwbXEzSHl3SkJBSjhsL2M4R1ZtcnBGVHg4ci9uWjJQeXlqdDNkSDF3aWRvb0RYWVNWCitxNkdiZjQxTGxvNXNZQXRteGRuZFRMQVN1SEtlY2FjVGdaVmh5MEZyeVpwTEtyVT0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK0p1c3QgYmFkIGNlcnQgZGF0YQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1h3SUJBQUtCZ1FDOGRkcmhtK0x1dEJ2alljUWxuSDIxUFBJc2VKMUpWRzJITW1OMkNtWmsyWXVrTys5TAorb3BkSmhUdmJHZkVqMERRczFJRThNK2tUVXlPbXVLZlZyRk1Ld3RWZUNKcGhyQW5ob3o3VFlPdUxCU3F0N2xWSAorZmhpL1Z3b3ZFU0psYUJPcCtXTW5maGNkdVBFWUhZeC82Y25WYXBJa1puTHQzMHp1MnVtK0R6QTlqUUlEQVFBQgorQW9HQkFLMEZacGFLajZXbkpaTjBScWhoSytnZ3RCV3dCbmMwVS9vemdLejJqMXMzZnNTaFllaUd0VzZDSzVuVQorRDFkWjV3emhiR1RoSTdMaU9YRHZSdWNjOW43dlVnaTBhbHFQUS9QRm9kUHhBTi9lRVlrbVhRN1cyazd6d3NEQQorSVVLMEtVaGt0UWJMdThxRi9tOHFNODZiYTl5OS85WWtYdVFiWjNDT2w1YWhUWnJoQWtFQTMwMVAwOFJLdjNLTQorb1huR1UyVUhUdUoxTUFEMmhPclB4akQ0L3d4QS8zOUVXRzliWmN6Ykp5Z2dCNFJIdTBJM05PU0ZqQW0zSFFtMAorQU5PdTVRSzlvd0pCQU5nT2VMZk5OY0Y0cHArVWlrUkZxeGs1aFVMcVJBV3pWeFZyV2U4NUZsUG0wVlZtSGJiLworbG9pZjdtcWpVOG8xalRkL0xNN1JEOWYydXNaeUUycHNhdzhDUVFDTkxoa3BYM0tPNWtLSm1TOU43Sk1aU2M0agorb29nNTh5ZVlPOEJCcUtLenB1ZzBMWHVRdWx0WXYySzR2ZWFJTzA0aUw5VkxlNXo5Uy9RMWphQ0hCQnVYQWtFQQorejhnakdvaTFBT3A2UEJCTFpOc25jQ3ZjVi8wYUMrMXNlNEh4VE5vMitkdUtTRG5icStsanFPTStFN29kVStOcQorZXd2SVdPRy8vZThmc3NkMG1xM0h5d0pCQUo4bC9jOEdWbXJwRlR4OHIvbloyUHl5anQzZEgxd2lkb29EWFlTVgorcTZHYmY0MUxsbzVzWUF0bXhkbmRUTEFTdUhLZWNhY1RnWlZoeTBGcnlacExLclU9CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitKdXN0IGJhZCBjZXJ0IGRhdGEKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRrZXkucGVtIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2JhZGtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4YTk1NQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRrZXkucGVtCkBAIC0wLDAgKzEsNDAgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK0JhZCBLZXksIHRob3VnaCB0aGUgY2VydCBzaG91bGQgYmUgT0sKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwekNDQWhDZ0F3SUJBZ0lKQVArcVN0djFjSUdOTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdKTVFzd0NRWUQKK1ZRUUdFd0pWVXpFUk1BOEdBMVVFQ0JNSVJHVnNZWGRoY21VeEV6QVJCZ05WQkFjVENsZHBiRzFwYm1kMGIyNHgKK0l6QWhCZ05WQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1Rd3dDZ1lEVlFRTEV3TlQKK1Uwd3hIekFkQmdOVkJBTVRGbk52YldWdFlXTm9hVzVsTG5CNWRHaHZiaTV2Y21jd0hoY05NRGN3T0RJM01UWTEKK05EVXdXaGNOTVRNd01qRTJNVFkxTkRVd1dqQ0JpVEVMTUFrR0ExVUVCaE1DVlZNeEVUQVBCZ05WQkFnVENFUmwKK2JHRjNZWEpsTVJNd0VRWURWUVFIRXdwWGFXeHRhVzVuZEc5dU1TTXdJUVlEVlFRS0V4cFFlWFJvYjI0Z1UyOW0KK2RIZGhjbVVnUm05MWJtUmhkR2x2YmpFTU1Bb0dBMVVFQ3hNRFUxTk1NUjh3SFFZRFZRUURFeFp6YjIxbGJXRmoKK2FHbHVaUzV3ZVhSb2IyNHViM0puTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDOGRkcmgKK20rTHV0QnZqWWNRbG5IMjFQUElzZUoxSlZHMkhNbU4yQ21aazJZdWtPKzlMb3BkSmhUdmJHZkVqMERRczFJRTgKK00ra1RVeU9tdUtmVnJGTUt3dFZlQ0pwaHJBbmhvejdUWU91TEJTcXQ3bFZIZmhpL1Z3b3ZFU0psYUJPcCtXTW4KK2ZoY2R1UEVZSFl4LzZjblZhcElrWm5MdDMwenUydW0rRHpBOWpRSURBUUFCb3hVd0V6QVJCZ2xnaGtnQmh2aEMKK0FRRUVCQU1DQmtBd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQUY0UTVCVnFtQ09MdjFuOGplL0p3OUs2NjlWWGIKKzA4aHlHelFoa2VtRUJZUWQ2ZnpROUEvMVp6SGtKS2IxUDZ5cmVPTFNFaDRLY3hZUHlyTFJDMWxsOG5yNU9sQ3gKK0NNaEtrVG5SNnFCc2ROVjBYdGRVMitOMjVocVcrTWE0WmVxc04vaWlKVkNHTk9aR252UXV2Q0FHV0Y4K0ovZi8KK2lIa0M2Z0dkQkpob2dzND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK0JhZCBLZXksIHRob3VnaCB0aGUgY2VydCBzaG91bGQgYmUgT0sKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwekNDQWhDZ0F3SUJBZ0lKQVArcVN0djFjSUdOTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdKTVFzd0NRWUQKK1ZRUUdFd0pWVXpFUk1BOEdBMVVFQ0JNSVJHVnNZWGRoY21VeEV6QVJCZ05WQkFjVENsZHBiRzFwYm1kMGIyNHgKK0l6QWhCZ05WQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1Rd3dDZ1lEVlFRTEV3TlQKK1Uwd3hIekFkQmdOVkJBTVRGbk52YldWdFlXTm9hVzVsTG5CNWRHaHZiaTV2Y21jd0hoY05NRGN3T0RJM01UWTEKK05EVXdXaGNOTVRNd01qRTJNVFkxTkRVd1dqQ0JpVEVMTUFrR0ExVUVCaE1DVlZNeEVUQVBCZ05WQkFnVENFUmwKK2JHRjNZWEpsTVJNd0VRWURWUVFIRXdwWGFXeHRhVzVuZEc5dU1TTXdJUVlEVlFRS0V4cFFlWFJvYjI0Z1UyOW0KK2RIZGhjbVVnUm05MWJtUmhkR2x2YmpFTU1Bb0dBMVVFQ3hNRFUxTk1NUjh3SFFZRFZRUURFeFp6YjIxbGJXRmoKK2FHbHVaUzV3ZVhSb2IyNHViM0puTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDOGRkcmgKK20rTHV0QnZqWWNRbG5IMjFQUElzZUoxSlZHMkhNbU4yQ21aazJZdWtPKzlMb3BkSmhUdmJHZkVqMERRczFJRTgKK00ra1RVeU9tdUtmVnJGTUt3dFZlQ0pwaHJBbmhvejdUWU91TEJTcXQ3bFZIZmhpL1Z3b3ZFU0psYUJPcCtXTW4KK2ZoY2R1UEVZSFl4LzZjblZhcElrWm5MdDMwenUydW0rRHpBOWpRSURBUUFCb3hVd0V6QVJCZ2xnaGtnQmh2aEMKK0FRRUVCQU1DQmtBd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQUY0UTVCVnFtQ09MdjFuOGplL0p3OUs2NjlWWGIKKzA4aHlHelFoa2VtRUJZUWQ2ZnpROUEvMVp6SGtKS2IxUDZ5cmVPTFNFaDRLY3hZUHlyTFJDMWxsOG5yNU9sQ3gKK0NNaEtrVG5SNnFCc2ROVjBYdGRVMitOMjVocVcrTWE0WmVxc04vaWlKVkNHTk9aR252UXV2Q0FHV0Y4K0ovZi8KK2lIa0M2Z0dkQkpob2dzND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWM4NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUzLnB5CkBAIC0wLDAgKzEsMTAgQEAKKyIiIlRoaXMgaXMgYSB0ZXN0IiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcmVzdGVkX3Nub3BlcworCitkZWYgZih4KToKKyAgICBkZWYgZyh5KToKKyAgICAgICAgcmV0dXJuIHggKyB5CisgICAgcmV0dXJuIGcKKworcmVzdWx0ID0gZigyKSg0KQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmU0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmU0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjRjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTQucHkKQEAgLTAsMCArMSwxMCBAQAorIiIiVGhpcyBpcyBhIHRlc3QiIiIKK2ltcG9ydCBfX2Z1dHVyZV9fCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMKKworZGVmIGYoeCk6CisgICAgZGVmIGcoeSk6CisgICAgICAgIHJldHVybiB4ICsgeQorICAgIHJldHVybiBnCisKK3Jlc3VsdCA9IGYoMikoNCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlNS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdlNWZjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmU1LnB5CkBAIC0wLDAgKzEsMTIgQEAKKyIiIlRoaXMgaXMgYSB0ZXN0IiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMKK2ltcG9ydCBmb28KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcworCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCityZXN1bHQgPSBmKDIpKDQpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTYucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4YjU1YQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlNi5weQpAQCAtMCwwICsxLDEwIEBACisiIiJUaGlzIGlzIGEgdGVzdCIiIgorInRoaXMgaXNuJ3QgYSBkb2Mgc3RyaW5nIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBuZXN0ZWRfc2NvcGVzCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCityZXN1bHQgPSBmKDIpKDQpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTcucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxZGIyYwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlNy5weQpAQCAtMCwwICsxLDExIEBACisiIiJUaGlzIGlzIGEgdGVzdCIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXM7IGltcG9ydCBzdHJpbmc7IGZyb20gX19mdXR1cmVfXyBpbXBvcnQgXAorICAgICBuZXN0ZWRfc2NvcGVzCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCityZXN1bHQgPSBmKDIpKDQpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTgucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2N2IwOQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlOC5weQpAQCAtMCwwICsxLDEwIEBACisiIiJUaGlzIGlzIGEgdGVzdCIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0ICoKKworZGVmIGYoeCk6CisgICAgZGVmIGcoeSk6CisgICAgICAgIHJldHVybiB4ICsgeQorICAgIHJldHVybiBnCisKK3ByaW50IGYoMikoNCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlOS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlOS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGNlMzJhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmU5LnB5CkBAIC0wLDAgKzEsMTAgQEAKKyIiIlRoaXMgaXMgYSB0ZXN0IiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcywgYnJhY2VzCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCitwcmludCBmKDIpKDQpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkc3ludGF4X25vY2FyZXQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvYmFkc3ludGF4X25vY2FyZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlYzllYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9iYWRzeW50YXhfbm9jYXJldC5weQpAQCAtMCwwICsxLDIgQEAKK2RlZiBmKHgpOgorICAgIFt4IGZvciB4IGluIHhdID0geApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkOGE1NgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKQEAgLTAsMCArMSwyMDYgQEAKKyMgVGVzdHMgdGhhdCB3b3JrIGZvciBib3RoIGJ5dGVzIGFuZCBidWZmZXIgb2JqZWN0cy4KKyMgU2VlIFBFUCAzMTM3LgorCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCisKK2NsYXNzIE1peGluQnl0ZXNCdWZmZXJDb21tb25UZXN0cyhvYmplY3QpOgorICAgICIiIlRlc3RzIHRoYXQgd29yayBmb3IgYm90aCBieXRlcyBhbmQgYnVmZmVyIG9iamVjdHMuCisgICAgU2VlIFBFUCAzMTM3LgorICAgICIiIgorCisgICAgZGVmIG1hcnNoYWwoc2VsZiwgeCk6CisgICAgICAgICIiIkNvbnZlcnQgeCBpbnRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGZvciB0aGVzZSB0ZXN0cy4iIiIKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd0ZXN0IGNsYXNzIG11c3QgcHJvdmlkZSBhIG1hcnNoYWwgbWV0aG9kJykKKworICAgIGRlZiB0ZXN0X2lzbG93ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYScpLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidBJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYWJjJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FCYycpLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzbG93ZXIsIDQyKQorCisgICAgZGVmIHRlc3RfaXN1cHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYScpLmlzdXBwZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EnKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInXG4nKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBQkMnKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInQWJDJykuaXN1cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQUJDXG4nKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXN1cHBlciwgNDIpCisKKyAgICBkZWYgdGVzdF9pc3RpdGxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQScpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidcbicpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EgVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQVxuVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQSBUaXRsZWNhc2VkLCBMaW5lJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ05vdCBhIGNhcGl0YWxpemVkIFN0cmluZycpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOb3RcdGEgVGl0bGVjYXNlIFN0cmluZycpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOb3QtLWEgVGl0bGVjYXNlIFN0cmluZycpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOT1QnKS5pc3RpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXN0aXRsZSwgNDIpCisKKyAgICBkZWYgdGVzdF9pc3NwYWNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhJykuaXNzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInICcpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ1x0JykuaXNzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInXHInKS5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidcbicpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJyBcdFxyXG4nKS5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInIFx0XHJcbmEnKS5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXNzcGFjZSwgNDIpCisKKyAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2EnKS5pc2FscGhhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBJykuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYWJjJykuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FCYzEyMycpLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhYmNcbicpLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5pc2FscGhhLCA0MikKKworICAgIGRlZiB0ZXN0X2lzYWxudW0oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNhbG51bSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYScpLmlzYWxudW0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EnKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInXG4nKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicxMjNhYmM0NTYnKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidhMWIzYycpLmlzYWxudW0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhQmMwMDAgJykuaXNhbG51bSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNhbG51bSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzYWxudW0sIDQyKQorCisgICAgZGVmIHRlc3RfaXNkaWdpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc2RpZ2l0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYScpLmlzZGlnaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJzAnKS5pc2RpZ2l0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicwMTIzNDU2Nzg5JykuaXNkaWdpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJzAxMjM0NTY3ODlhJykuaXNkaWdpdCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXNkaWdpdCwgNDIpCisKKyAgICBkZWYgdGVzdF9sb3dlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2hlbGxvJywgc2VsZi5tYXJzaGFsKGInSGVMTG8nKS5sb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInaGVsbG8nLCBzZWxmLm1hcnNoYWwoYidoZWxsbycpLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5sb3dlciwgNDIpCisKKyAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0hFTExPJywgc2VsZi5tYXJzaGFsKGInSGVMTG8nKS51cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInSEVMTE8nLCBzZWxmLm1hcnNoYWwoYidIRUxMTycpLnVwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS51cHBlciwgNDIpCisKKyAgICBkZWYgdGVzdF9jYXBpdGFsaXplKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInIGhlbGxvICcsIHNlbGYubWFyc2hhbChiJyBoZWxsbyAnKS5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidIZWxsbyAnLCBzZWxmLm1hcnNoYWwoYidIZWxsbyAnKS5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidIZWxsbyAnLCBzZWxmLm1hcnNoYWwoYidoZWxsbyAnKS5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidBYWFhJywgc2VsZi5tYXJzaGFsKGInYWFhYScpLmNhcGl0YWxpemUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0FhYWEnLCBzZWxmLm1hcnNoYWwoYidBYUFhJykuY2FwaXRhbGl6ZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5jYXBpdGFsaXplLCA0MikKKworICAgIGRlZiB0ZXN0X2xqdXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjICAgICAgICcsIHNlbGYubWFyc2hhbChiJ2FiYycpLmxqdXN0KDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiYyAgICcsIHNlbGYubWFyc2hhbChiJ2FiYycpLmxqdXN0KDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykubGp1c3QoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5sanVzdCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiYyoqKioqKionLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5sanVzdCgxMCwgJyonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5sanVzdCkKKworICAgIGRlZiB0ZXN0X3JqdXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInICAgICAgIGFiYycsIHNlbGYubWFyc2hhbChiJ2FiYycpLnJqdXN0KDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgIGFiYycsIHNlbGYubWFyc2hhbChiJ2FiYycpLnJqdXN0KDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykucmp1c3QoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5yanVzdCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyoqKioqKiphYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5yanVzdCgxMCwgJyonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5yanVzdCkKKworICAgIGRlZiB0ZXN0X2NlbnRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgIGFiYyAgICAnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5jZW50ZXIoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInIGFiYyAgJywgc2VsZi5tYXJzaGFsKGInYWJjJykuY2VudGVyKDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykuY2VudGVyKDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykuY2VudGVyKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInKioqYWJjKioqKicsIHNlbGYubWFyc2hhbChiJ2FiYycpLmNlbnRlcigxMCwgJyonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5jZW50ZXIpCisKKyAgICBkZWYgdGVzdF9zd2FwY2FzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2hFbGxPIENvTVB1VEVyUycsCisgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidIZUxMbyBjT21wVXRlUnMnKS5zd2FwY2FzZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5zd2FwY2FzZSwgNDIpCisKKyAgICBkZWYgdGVzdF96ZmlsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEyMycsIHNlbGYubWFyc2hhbChiJzEyMycpLnpmaWxsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMTIzJywgc2VsZi5tYXJzaGFsKGInMTIzJykuemZpbGwoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicwMTIzJywgc2VsZi5tYXJzaGFsKGInMTIzJykuemZpbGwoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrMTIzJywgc2VsZi5tYXJzaGFsKGInKzEyMycpLnpmaWxsKDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInKzEyMycsIHNlbGYubWFyc2hhbChiJysxMjMnKS56ZmlsbCg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyswMTIzJywgc2VsZi5tYXJzaGFsKGInKzEyMycpLnpmaWxsKDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInLTEyMycsIHNlbGYubWFyc2hhbChiJy0xMjMnKS56ZmlsbCgzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJy0xMjMnLCBzZWxmLm1hcnNoYWwoYictMTIzJykuemZpbGwoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYictMDEyMycsIHNlbGYubWFyc2hhbChiJy0xMjMnKS56ZmlsbCg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzAwMCcsIHNlbGYubWFyc2hhbChiJycpLnpmaWxsKDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMzQnLCBzZWxmLm1hcnNoYWwoYiczNCcpLnpmaWxsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMDAzNCcsIHNlbGYubWFyc2hhbChiJzM0JykuemZpbGwoNCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYicxMjMnKS56ZmlsbCkKKworICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICBkZWZcbmcgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsCisgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJykuZXhwYW5kdGFicyg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgYVxuIGInLCBzZWxmLm1hcnNoYWwoYicgXHRhXG5cdGInKS5leHBhbmR0YWJzKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5leHBhbmR0YWJzLCA0MiwgNDIpCisgICAgICAgICMgVGhpcyB0ZXN0IGlzIG9ubHkgdmFsaWQgd2hlbiBzaXplb2YoaW50KSA9PSBzaXplb2Yodm9pZCopID09IDQuCisgICAgICAgIGlmIHN5cy5tYXhpbnQgPCAoMSA8PCAzMikgYW5kIHN0cnVjdC5jYWxjc2l6ZSgnUCcpID09IDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInXHRhXG5cdGInKS5leHBhbmR0YWJzLCBzeXMubWF4aW50KQorCisgICAgZGVmIHRlc3RfdGl0bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicgSGVsbG8gJywgc2VsZi5tYXJzaGFsKGInIGhlbGxvICcpLnRpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidIZWxsbyAnLCBzZWxmLm1hcnNoYWwoYidoZWxsbyAnKS50aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInSGVsbG8gJywgc2VsZi5tYXJzaGFsKGInSGVsbG8gJykudGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0Zvcm1hdCBUaGlzIEFzIFRpdGxlIFN0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInZk9yTWFUIHRoSXMgYVMgdGl0TGUgU3RyaW5nJykudGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0Zvcm1hdCxUaGlzLUFzKlRpdGxlO1N0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInZk9yTWFULHRoSXMtYVMqdGl0TGU7U3RyaW5nJykudGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0dldGludCcsIHNlbGYubWFyc2hhbChiJ2dldEludCcpLnRpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS50aXRsZSwgNDIpCisKKyAgICBkZWYgdGVzdF9zcGxpdGxpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2FiYycsIGInZGVmJywgYicnLCBiJ2doaSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xuZGVmXG5ccmdoaScpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhYmMnLCBiJ2RlZicsIGInJywgYidnaGknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcbmRlZlxuXHJcbmdoaScpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhYmMnLCBiJ2RlZicsIGInZ2hpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXG5kZWZcclxuZ2hpJykuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2FiYycsIGInZGVmJywgYidnaGknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcbmRlZlxyXG5naGlcbicpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhYmMnLCBiJ2RlZicsIGInZ2hpJywgYicnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcbmRlZlxyXG5naGlcblxyJykuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJycsIGInYWJjJywgYidkZWYnLCBiJ2doaScsIGInJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInXG5hYmNcbmRlZlxyXG5naGlcblxyJykuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ1xuJywgYidhYmNcbicsIGInZGVmXHJcbicsIGInZ2hpXG4nLCBiJ1xyJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInXG5hYmNcbmRlZlxyXG5naGlcblxyJykuc3BsaXRsaW5lcygxKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLnNwbGl0bGluZXMsIDQyLCA0MikKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jZmdwYXJzZXIuMSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jZmdwYXJzZXIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzg3ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NmZ3BhcnNlci4xCkBAIC0wLDAgKzEsMiBAQAorW0ZvbyBCYXJdCitmb289bmV3YmFyCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2hlY2tfc291bmRjYXJkLnZicyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jaGVja19zb3VuZGNhcmQudmJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjE4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2hlY2tfc291bmRjYXJkLnZicwpAQCAtMCwwICsxLDEzIEBACityZW0gQ2hlY2sgZm9yIGEgd29ya2luZyBzb3VuZC1jYXJkIC0gZXhpdCB3aXRoIDAgaWYgT0ssIDEgb3RoZXJ3aXNlLgorc2V0IHdtaSA9IEdldE9iamVjdCgid2lubWdtdHM6IikKK3NldCBzY3MgPSB3bWkuSW5zdGFuY2VzT2YoIndpbjMyX3NvdW5kZGV2aWNlIikKK2ZvciBlYWNoIHNjIGluIHNjcworICAgc2V0IHN0YXR1cyA9IHNjLlByb3BlcnRpZXNfKCJTdGF0dXMiKQorICAgd3NjcmlwdC5FY2hvKHNjLlByb3BlcnRpZXNfKCJOYW1lIikgKyAiLyIgKyBzdGF0dXMpCisgICBpZiBzdGF0dXMgPSAiT0siIHRoZW4KKyAgICAgICB3c2NyaXB0LlF1aXQgMCByZW0gbm9ybWFsIGV4aXQKKyAgIGVuZCBpZgorbmV4dAorcmVtIE5vIHNvdW5kIGNhcmQgZm91bmQgLSBleGl0IHdpdGggc3RhdHVzIGNvZGUgb2YgMQord3NjcmlwdC5RdWl0IDEKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1LXV0ZjgudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1LXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTUzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2JpZzUtdXRmOC50eHQKQEAgLTAsMCArMSw5IEBACivlpoLkvZXlnKggUHl0aG9uIOS4reS9v+eUqOaXouacieeahCBDIGxpYnJhcnk/CivjgIDlnKjos4foqIrnp5HmioDlv6vpgJ/nmbzlsZXnmoTku4rlpKksIOmWi+eZvOWPiua4rOippui7n+mrlOeahOmAn+W6puaYr+S4jeWuueW/veimlueahAor6Kqy6aGMLiDngrrliqDlv6vplovnmbzlj4rmuKzoqabnmoTpgJ/luqYsIOaIkeWAkeS+v+W4uOW4jOacm+iDveWIqeeUqOS4gOS6m+W3sumWi+eZvOWlveeahAorbGlicmFyeSwg5Lim5pyJ5LiA5YCLIGZhc3QgcHJvdG90eXBpbmcg55qEIHByb2dyYW1taW5nIGxhbmd1YWdlIOWPrwor5L6b5L2/55SoLiDnm67liY3mnInoqLHoqLHlpJrlpJrnmoQgbGlicmFyeSDmmK/ku6UgQyDlr6vmiJAsIOiAjCBQeXRob24g5piv5LiA5YCLCitmYXN0IHByb3RvdHlwaW5nIOeahCBwcm9ncmFtbWluZyBsYW5ndWFnZS4g5pWF5oiR5YCR5biM5pyb6IO95bCH5pei5pyJ55qECitDIGxpYnJhcnkg5ou/5YiwIFB5dGhvbiDnmoTnkrDlooPkuK3muKzoqablj4rmlbTlkIguIOWFtuS4reacgOS4u+imgeS5n+aYr+aIkeWAkeaJgAor6KaB6KiO6KuW55qE5ZWP6aGM5bCx5pivOgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2JpZzUudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDQyNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1LnR4dApAQCAtMCwwICsxLDkgQEAKK6ZwpvOmYiBQeXRob24gpKSoz6XOrEqms6q6IEMgbGlicmFyeT8KK6FApmK46rBUrOyn3qfWs3S1b65pqrqktaTRLCC2fbVvpM60+rjVs27F6aq6s3Sr16xPpKOuZam/tfiqugorvdLDRC4grLClW6fWtn21b6TOtPq41aq6s3Sr1ywgp9qtzKtLsWCnxrHmr+CnUaXOpECox6R3tn21b6ZuqroKK2xpYnJhcnksIKjDprOkQK3TIGZhc3QgcHJvdG90eXBpbmcgqrogcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgpWkKK6jRqM+lzi4gpdirZaazs1yzXKZopmiquiBsaWJyYXJ5IKxPpUggQyC8Z6aoLCCm0yBQeXRob24grE+kQK3TCitmYXN0IHByb3RvdHlwaW5nIKq6IHByb2dyYW1taW5nIGxhbmd1YWdlLiCsR6farcynxrHmr+CxTqxKprOqugorQyBsaWJyYXJ5IK6zqOwgUHl0aG9uIKq6wPS50qSktPq41aTOvuOmWC4gqOSkpLPMpUStbqRdrE+n2q3MqdIKK61usFG916q6sN3DRLROrE86CisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvYmlnNWhrc2NzLXV0ZjgudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1aGtzY3MtdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0NGNlOQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvYmlnNWhrc2NzLXV0ZjgudHh0CkBAIC0wLDAgKzEsMiBAQAor8KCEjMSa6bWu572T5rSGCivDisOKzITDqiDDqsOqzIQKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvYmlnNWhrc2NzLnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvYmlnNWhrc2NzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM0MmIzCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1aGtzY3MudHh0CkBAIC0wLDAgKzEsMiBAQAoriEWIXIpzi9qN2AoriGaIYoinIIiniKMKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvY3A5NDktdXRmOC50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2NwOTQ5LXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NTVlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2NwOTQ5LXV0ZjgudHh0CkBAIC0wLDAgKzEsOSBAQAor65ig67Cp6rCB7ZWYIO2OsuyLnOy9nOudvAorCivjia/jia/rgqkhISDlm6DkuZ3mnIjtjKjrr6TrppTqtogg4pOh4pOW7ZuAwr/Cv8K/IOq4jeuSmSDik5Trjqgg44mvLiAuCivkup7smIHik5TriqXtmrkgLiAuIC4gLiDshJzsmrjrpIQg646Q7ZWZ5LmZIOWutu2bgCAhICEgIeOFoC7jhaAKK+2dkO2dkO2dkCDjhLHjhLHjhLHimIbjhaBf44WgIOyWtOumqCDtg7jsvbDquJAg646M7J2RIOy5keS5neuTpOS5mSDjia/rk5zquJAKK+yEpOumjCDlrrbtm4AgLiAuIC4gLiDqtbTslaDsiYwg4pOU6raIIOKToeummOOJseq4kCDlm6Dku4Hlt53vpoHkuK3quYzsprwKK+yZgOySgO2bgCAhICEg5Lqe7JiB4pOUIOWutuuKpeq2iCDimIbkuIrqtIAg7JeG64ql6raI64qlIOS6nuuKpeuSiO2bgCDquIDslaDrk7QKK+KToeugpOuTgOS5nSDsi4DtkpTsiLTtm4Ag7Ja066aoIOWboOS7geW3ne+mgeS4reyLgeKRqOuTpOyVnCEhIOOJr+OJr+uCqeKZoSDijJLijJIqCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvY3A5NDkudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9jcDk0OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1NDlhYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvY3A5NDkudHh0CkBAIC0wLDAgKzEsOSBAQAorjGO55rCix88gvIS9w8TdtvMKKworqMCowLOzISEg7NfO+urFxtCS5pBwscUgqN6o08RSoq+ir6KvILHgipYgqNG1syCowC4gLgor5Ky/tajRtMnIwiAuIC4gLiAuILytv++37yC1r8fQ6+AgyqvEUiAhICEgIaTQLqTQCivI5cjlyOUgpKGkoaShodmk0F+k0CC+7pCKIMXLxOKDTyC1rsDAIK9ozvq16evgIKjAteWDTworvLOQaiDKq8RSIC4gLiAuIC4gsby+1ppmIKjRscUgqN6QdKjCg08g7Nfs0vS55fzx6bHuo44KK7/NvqzEUiAhICEg5Ky/tajRIMqrtMmxxSCh2d++sPwgvvi0ybHFtMkg5Ky0ybXYxFIgsdu+1orbCiuo3rfBteDO+iCaw8e0vaTEUiC+7pCKIOzX7NL0ueX88emaxKjvtemd2iEhIKjAqMCzs6K9IKHSodIqCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2ppc3gwMjEzLXV0ZjgudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfamlzeDAyMTMtdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE1NmEyZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2ppc3gwMjEzLXV0ZjgudHh0CkBAIC0wLDAgKzEsOCBAQAorUHl0aG9uIOOBrumWi+eZuuOBr+OAgTE5OTAg5bm044GU44KN44GL44KJ6ZaL5aeL44GV44KM44Gm44GE44G+44GZ44CCCivplovnmbrogIXjga4gR3VpZG8gdmFuIFJvc3N1bSDjga/mlZnogrLnlKjjga7jg5fjg63jgrDjg6njg5/jg7PjgrDoqIDoqp7jgIxBQkPjgI3jga7plovnmbrjgavlj4LliqDjgZfjgabjgYTjgb7jgZfjgZ/jgYzjgIFBQkMg44Gv5a6f55So5LiK44Gu55uu55qE44Gr44Gv44GC44G+44KK6YGp44GX44Gm44GE44G+44Gb44KT44Gn44GX44Gf44CCCivjgZPjga7jgZ/jgoHjgIFHdWlkbyDjga/jgojjgorlrp/nlKjnmoTjgarjg5fjg63jgrDjg6njg5/jg7PjgrDoqIDoqp7jga7plovnmbrjgpLplovlp4vjgZfjgIHoi7Hlm70gQkJTIOaUvumAgeOBruOCs+ODoeODh+OCo+eVque1hOOAjOODouODs+ODhuOCoyDjg5HjgqTjgr3jg7PjgI3jga7jg5XjgqHjg7PjgafjgYLjgosgR3VpZG8g44Gv44GT44Gu6KiA6Kqe44KS44CMUHl0aG9u44CN44Go5ZCN44Gl44GR44G+44GX44Gf44CCCivjgZPjga7jgojjgYbjgarog4zmma/jgYvjgonnlJ/jgb7jgozjgZ8gUHl0aG9uIOOBruiogOiqnuioreioiOOBr+OAgeOAjOOCt+ODs+ODl+ODq+OAjeOBp+OAjOe/kuW+l+OBjOWuueaYk+OAjeOBqOOBhOOBhuebruaomeOBq+mHjeeCueOBjOe9ruOBi+OCjOOBpuOBhOOBvuOBmeOAggor5aSa44GP44Gu44K544Kv44Oq44OX44OI57O76KiA6Kqe44Gn44Gv44Om44O844K244Gu55uu5YWI44Gu5Yip5L6/5oCn44KS5YSq5YWI44GX44Gm6Imy44CF44Gq5qmf6IO944KS6KiA6Kqe6KaB57Sg44Go44GX44Gm5Y+W44KK5YWl44KM44KL5aC05ZCI44GM5aSa44GE44Gu44Gn44GZ44GM44CBUHl0aG9uIOOBp+OBr+OBneOBhuOBhOOBo+OBn+Wwj+e0sOW3peOBjOi/veWKoOOBleOCjOOCi+OBk+OBqOOBr+OBguOBvuOCiuOBguOCiuOBvuOBm+OCk+OAggor6KiA6Kqe6Ieq5L2T44Gu5qmf6IO944Gv5pyA5bCP6ZmQ44Gr5oq844GV44GI44CB5b+F6KaB44Gq5qmf6IO944Gv5ouh5by144Oi44K444Ol44O844Or44Go44GX44Gm6L+95Yqg44GZ44KL44CB44Go44GE44GG44Gu44GMIFB5dGhvbiDjga7jg53jg6rjgrfjg7zjgafjgZnjgIIKKwor44OO44GL44KaIOODiOOCmiDjg4jjgq3vqLbvqLkg8KGatPCqjowg6bqA6b2B8KmbsApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfamlzeDAyMTMudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfamlzeDAyMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTkyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19qaXN4MDIxMy50eHQKQEAgLTAsMCArMSw4IEBACitQeXRob24gpM6zq8ivpM+hojE5OTAgx6+ktKTtpKuk6bOru8+ktaTspMakpKTepLmhowors6vIr7zUpM4gR3VpZG8gdmFuIFJvc3N1bSCkz7a1sOnN0aTOpdel7aWwpeml36XzpbC4wLjsodZBQkOh16TOs6vIr6TLu7Kyw6S3pMakpKTepLekv6SsoaJBQkMgpM+8ws3RvuWkzszcxaqky6TPpKKk3qTqxaykt6TGpKSk3qS7pPOkx6S3pL+howorpLOkzqS/pOGhokd1aWRvIKTPpOik6rzCzdHFqqTKpdel7aWwpeml36XzpbC4wLjspM6zq8ivpPKzq7vPpLehorHRufEgQkJTIMr8wfekzqWzpeGlx6WjyNbByKHWpeKl86XGpaMgpdGlpKW9pfOh16TOpdWloaXzpMekoqTrIEd1aWRvIKTPpLOkzrjAuOyk8qHWUHl0aG9uodekyMy+pMWksaTepLekv6GjCiuks6TOpOikpqTKx9i3yqSrpOnAuKTepOykvyBQeXRob24gpM64wLjswN+316TPoaKh1qW3pfOl16Xrodekx6HWvazGwKSszcaw16HXpMikpKSmzNzJuKTLvcXFwKSsw9akq6TspMakpKTepLmhoworwr+kr6TOpbmlr6XqpdelyLfPuMC47KTHpM+l5qG8pbakzszcwOikzs34ytjAraTyzaXA6KS3pMa/p6G5pMq1oce9pPK4wLjszdfBx6TIpLekxrzopOrG/qTspOu+7LnnpKzCv6SkpM6kx6S5pKyholB5dGhvbiCkx6TPpL2kpqSkpMOkv76uutm5qaSsxMmyw6S1pOyk66SzpMikz6SipN6k6qSipOqk3qS7pPOhoworuMC47Lyrws6kzrWhx72kz7rHvq64wqTLsqGktaSooaLJrM3XpMq1oce9pM+zyMSlpeKluKXlobyl66TIpLekxsTJssOkuaTroaKkyKSkpKakzqSsIFB5dGhvbiCkzqXdpeqlt6G8pMekuaGjCisKK6XOpPcgpf4gpcilra+sr9ogz+OP/tggj/7Uj/7oj/zWCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19qcC11dGY4LnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2pwLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjMyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19qcC11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK1B5dGhvbiDjga7plovnmbrjga/jgIExOTkwIOW5tOOBlOOCjeOBi+OCiemWi+Wni+OBleOCjOOBpuOBhOOBvuOBmeOAggor6ZaL55m66ICF44GuIEd1aWRvIHZhbiBSb3NzdW0g44Gv5pWZ6IKy55So44Gu44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44CMQUJD44CN44Gu6ZaL55m644Gr5Y+C5Yqg44GX44Gm44GE44G+44GX44Gf44GM44CBQUJDIOOBr+Wun+eUqOS4iuOBruebrueahOOBq+OBr+OBguOBvuOCiumBqeOBl+OBpuOBhOOBvuOBm+OCk+OBp+OBl+OBn+OAggor44GT44Gu44Gf44KB44CBR3VpZG8g44Gv44KI44KK5a6f55So55qE44Gq44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44Gu6ZaL55m644KS6ZaL5aeL44GX44CB6Iux5Zu9IEJCUyDmlL7pgIHjga7jgrPjg6Hjg4fjgqPnlarntYTjgIzjg6Ljg7Pjg4bjgqMg44OR44Kk44K944Oz44CN44Gu44OV44Kh44Oz44Gn44GC44KLIEd1aWRvIOOBr+OBk+OBruiogOiqnuOCkuOAjFB5dGhvbuOAjeOBqOWQjeOBpeOBkeOBvuOBl+OBn+OAggor44GT44Gu44KI44GG44Gq6IOM5pmv44GL44KJ55Sf44G+44KM44GfIFB5dGhvbiDjga7oqIDoqp7oqK3oqIjjga/jgIHjgIzjgrfjg7Pjg5fjg6vjgI3jgafjgIznv5LlvpfjgYzlrrnmmJPjgI3jgajjgYTjgYbnm67mqJnjgavph43ngrnjgYznva7jgYvjgozjgabjgYTjgb7jgZnjgIIKK+WkmuOBj+OBruOCueOCr+ODquODl+ODiOezu+iogOiqnuOBp+OBr+ODpuODvOOCtuOBruebruWFiOOBruWIqeS+v+aAp+OCkuWEquWFiOOBl+OBpuiJsuOAheOBquapn+iDveOCkuiogOiqnuimgee0oOOBqOOBl+OBpuWPluOCiuWFpeOCjOOCi+WgtOWQiOOBjOWkmuOBhOOBruOBp+OBmeOBjOOAgVB5dGhvbiDjgafjga/jgZ3jgYbjgYTjgaPjgZ/lsI/ntLDlt6XjgYzov73liqDjgZXjgozjgovjgZPjgajjga/jgYLjgb7jgorjgYLjgorjgb7jgZvjgpPjgIIKK+iogOiqnuiHquS9k+OBruapn+iDveOBr+acgOWwj+mZkOOBq+aKvOOBleOBiOOAgeW/heimgeOBquapn+iDveOBr+aLoeW8teODouOCuOODpeODvOODq+OBqOOBl+OBpui/veWKoOOBmeOCi+OAgeOBqOOBhOOBhuOBruOBjCBQeXRob24g44Gu44Od44Oq44K344O844Gn44GZ44CCCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2pwLnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2pwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGE2YjVkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfanAudHh0CkBAIC0wLDAgKzEsNyBAQAorUHl0aG9uIKTOs6vIr6TPoaIxOTkwIMevpLSk7aSrpOmzq7vPpLWk7KTGpKSk3qS5oaMKK7OryK+81KTOIEd1aWRvIHZhbiBSb3NzdW0gpM+2tbDpzdGkzqXXpe2lsKXppd+l86WwuMC47KHWQUJDodekzrOryK+ky7uyssOkt6TGpKSk3qS3pL+krKGiQUJDIKTPvMLN0b7lpM7M3MWqpMukz6SipN6k6sWspLekxqSkpN6ku6TzpMekt6S/oaMKK6SzpM6kv6ThoaJHdWlkbyCkz6TopOq8ws3RxaqkyqXXpe2lsKXppd+l86WwuMC47KTOs6vIr6Tys6u7z6S3oaKx0bnxIEJCUyDK/MH3pM6ls6Xhpcelo8jWwcih1qXipfOlxqWjIKXRpaSlvaXzodekzqXVpaGl86THpKKk6yBHdWlkbyCkz6SzpM64wLjspPKh1lB5dGhvbqHXpMjMvqTFpLGk3qS3pL+howorpLOkzqTopKakysfYt8qkq6TpwLik3qTspL8gUHl0aG9uIKTOuMC47MDft9ekz6Giodalt6Xzpdel66HXpMeh1r2sxsCkrM3GsNeh16TIpKSkpszcybiky73FxcCkrMPWpKuk7KTGpKSk3qS5oaMKK8K/pK+kzqW5pa+l6qXXpci3z7jAuOykx6TPpeahvKW2pM7M3MDopM7N+MrYwK2k8s2lwOikt6TGv6ehuaTKtaHHvaTyuMC47M3XwcekyKS3pMa86KTqxv6k7KTrvuy556Sswr+kpKTOpMekuaSsoaJQeXRob24gpMekz6S9pKakpKTDpL++rrrZuamkrMTJssOktaTspOuks6TIpM+koqTepOqkoqTqpN6ku6TzoaMKK7jAuOy8q8LOpM61oce9pM+6x76uuMKky7KhpLWkqKGiyazN16TKtaHHvaTPs8jEpaXipbil5aG8peukyKS3pMbEybLDpLmk66GipMikpKSmpM6krCBQeXRob24gpM6l3aXqpbehvKTHpLmhoworCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19rci11dGY4LnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2tyLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzM3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19rci11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK+KXjiDtjIzsnbTsjawoUHl0aG9uKeydgCDrsLDsmrDquLAg7Im96rOgLCDqsJXroKXtlZwg7ZSE66Gc6re4656Y67CNIOyWuOyWtOyeheuLiOuLpC4g7YyM7J207I2s7J2ACivtmqjsnKjsoIHsnbgg6rOg7IiY7KSAIOuNsOydtO2EsCDqtazsobDsmYAg6rCE64uo7ZWY7KeA66eMIO2aqOycqOyggeyduCDqsJ3ssrTsp4DtlqXtlITroZzqt7jrnpjrsI3snYQKK+yngOybkO2VqeuLiOuLpC4g7YyM7J207I2s7J2YIOyasOyVhCjlhKrpm4Up7ZWcIOusuOuyleqzvCDrj5nsoIEg7YOA7J207ZWRLCDqt7jrpqzqs6Ag7J247YSw7ZSE66as7YyFCivtmZjqsr3snYAg7YyM7J207I2s7J2EIOyKpO2BrOumve2MheqzvCDsl6zrn6wg67aE7JW87JeQ7ISc7JmAIOuMgOu2gOu2hOydmCDtlIzrnqvtj7zsl5DshJzsnZgg67mg66W4CivslaDtlIzrpqzsvIDsnbTshZgg6rCc67Cc7J2EIO2VoCDsiJgg7J6I64qUIOydtOyDgeyggeyduCDslrjslrTroZwg66eM65Ok7Ja07KSN64uI64ukLgorCivimIbssqvqsIDrgZ06IOuCoOyVhOudvCDsk5Tsk5Tsk6l+IOuLge2BvCEg65y96riI7JeG7J20IOyghO2ZpeuLiOuLpC4g67eBLiDqt7jrn7DqsbAg7J2O64ukLgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfa3IudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfa3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OGRkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19rci50eHQKQEAgLTAsMCArMSw3IEBACiuh3SDGxMDMveMoUHl0aG9uKcC6ILnov+yx4iC9sbDtLCCwrbfCx9Egx8G3zrHXt6G51iC+8L7uwNS0z7TZLiDGxMDMvePAugoryL/AssD7wM4gsO289sHYILWlwMzFzSCxuMG2v80gsKO03MfPwfa4uCDIv8CywPvAziCwtMO8wfbH4sfBt86x17ehudbAuworwfa/+MfVtM+02S4gxsTAzL3jwMcgv+y+xijp0OS6KcfRILmuuf2w+iC1v8D7IMW4wMzHziwgsde4rrDtIMDOxc3HwbiuxsMKK8ivsObAuiDGxMDMvePAuyC9usWpuLPGw7D6IL+pt68gutC+37+hvK2/zSC067rOutDAxyDHw7enxvu/obytwMcguvy4pQorvtbHw7iuxMnAzLzHILCzud/AuyDH0iC89iDA1rTCIMDMu/PA+8DOIL7wvu63ziC4uLXpvu7B3bTPtNkuCisKK6HZw7mwobOhOiCzr77GtvMgpNSktqTQpNSk1KS2pNCk1L6xfiCk1KSkpNKkt8WtISCk1KSopNGkt7HdvvjAzCDA/KTUpL6kyKSytM+02S4gpNSksqTOpKouILHXt7GwxSCk1KS3pNGktLTZLgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9nYjE4MDMwLXV0ZjgudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9nYjE4MDMwLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNjBkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2diMTgwMzAtdXRmOC50eHQKQEAgLTAsMCArMSwxNSBAQAorUHl0aG9u77yI5rS+5qOu77yJ6K+t6KiA5piv5LiA56eN5Yqf6IO95by65aSn6ICM5a6M5ZaE55qE6YCa55So5Z6L6K6h566X5py656iL5bqP6K6+6K6h6K+t6KiA77yMCivlt7Lnu4/lhbfmnInljYHlpJrlubTnmoTlj5HlsZXljoblj7LvvIzmiJDnhp/kuJTnqLPlrprjgILov5nnp43or63oqIDlhbfmnInpnZ7luLjnroDmjbfogIzmuIXmmbAKK+eahOivreazleeJueeCue+8jOmAguWQiOWujOaIkOWQhOenjemrmOWxguS7u+WKoe+8jOWHoOS5juWPr+S7peWcqOaJgOacieeahOaTjeS9nOezu+e7n+S4rQor6L+Q6KGM44CC6L+Z56eN6K+t6KiA566A5Y2V6ICM5by65aSn77yM6YCC5ZCI5ZCE56eN5Lq65aOr5a2m5Lmg5L2/55So44CC55uu5YmN77yM5Z+65LqO6L+ZCivnp43or63oqIDnmoTnm7jlhbPmioDmnK/mraPlnKjpo57pgJ/nmoTlj5HlsZXvvIznlKjmiLfmlbDph4/mgKXliafmianlpKfvvIznm7jlhbPnmoTotYTmupDpnZ7luLjlpJrjgIIKK+WmguS9leWcqCBQeXRob24g5Lit5L2/55So5pei5pyJ55qEIEMgbGlicmFyeT8KK+OAgOWcqOizh+ioiuenkeaKgOW/q+mAn+eZvOWxleeahOS7iuWkqSwg6ZaL55m85Y+K5ris6Kmm6Luf6auU55qE6YCf5bqm5piv5LiN5a655b+96KaW55qECivoqrLpoYwuIOeCuuWKoOW/q+mWi+eZvOWPiua4rOippueahOmAn+W6piwg5oiR5YCR5L6/5bi45biM5pyb6IO95Yip55So5LiA5Lqb5bey6ZaL55m85aW955qECitsaWJyYXJ5LCDkuKbmnInkuIDlgIsgZmFzdCBwcm90b3R5cGluZyDnmoQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ug5Y+vCivkvpvkvb/nlKguIOebruWJjeacieioseioseWkmuWkmueahCBsaWJyYXJ5IOaYr+S7pSBDIOWvq+aIkCwg6ICMIFB5dGhvbiDmmK/kuIDlgIsKK2Zhc3QgcHJvdG90eXBpbmcg55qEIHByb2dyYW1taW5nIGxhbmd1YWdlLiDmlYXmiJHlgJHluIzmnJvog73lsIfml6LmnInnmoQKK0MgbGlicmFyeSDmi7/liLAgUHl0aG9uIOeahOeSsOWig+S4rea4rOippuWPiuaVtOWQiC4g5YW25Lit5pyA5Li76KaB5Lmf5piv5oiR5YCR5omACivopoHoqI7oq5bnmoTllY/poYzlsLHmmK86CivtjIzsnbTsjazsnYAg6rCV66Cl7ZWcIOq4sOuKpeydhCDsp4Dri4wg67KU7JqpIOy7tO2TqO2EsCDtlITroZzqt7jrnpjrsI0g7Ja47Ja064ukLgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2diMTgwMzAudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9nYjE4MDMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDFmNmRjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9nYjE4MDMwLnR4dApAQCAtMCwwICsxLDE1IEBACitQeXRob26jqMXJya2jqdPv0dTKx9K71ta5psTcx7+087b4zerJxrXEzajTw9DNvMbL47v6s8zQ8snovMbT79HUo6wKK9LRvq2+39PQyq624MTqtcS3otW5wPrKt6Oss8nK7MfSzsi2qKGj1eLW1tPv0dS+39PQt8ezo7zyvd22+MflzvoKK7XE0++3qMzYteOjrMrKus/N6rPJuPfW1rjfsuPIzs7xo6y8uLr1v8nS1NTay/nT0LXEstnX98+1zbPW0Aor1MvQ0KGj1eLW1tPv0dS88rWltvjHv7Tzo6zKyrrPuPfW1sjLyr/Rp8+wyrnTw6GjxL/HsKOsu/nT2tXiCivW1tPv0dS1xM/gudi8vMr11f3U2rfJy9m1xLei1bmjrNPDu6fK/cG/vLG+58CptPOjrM/gudi1xNfK1LS3x7OjtuChoworyOe6ztTaIFB5dGhvbiDW0Mq508O8yNPQtcQgQyBsaWJyYXJ5PworoaHU2tlZ042/xry8v+zL2bBs1bm1xL3xzOwsIOlfsGy8sJx51Ifcm/N3tcTL2bbIyseyu8jduvbSlbXECivVbu59LiCe6bzTv+zpX7BsvLCcedSHtcTL2bbILCDO0oKDseOzo8+jzfvE3MD708PSu9Cp0tHpX7BsusO1xAorbGlicmFyeSwggUvT0NK7goAgZmFzdCBwcm90b3R5cGluZyC1xCBwcm9ncmFtbWluZyBsYW5ndWFnZSC/yQoruanKudPDLiDEv8ew09DUU9RTtuC24LXEIGxpYnJhcnkgysfS1CBDIIyRs8ksILb4IFB5dGhvbiDKx9K7goAKK2Zhc3QgcHJvdG90eXBpbmcgtcQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuILnKztKCg8+jzfvE3IyivMjT0LXECitDIGxpYnJhcnkgxMO1vSBQeXRob24gtcStaL6z1tCcedSHvLDV+7rPLiDG5NbQ1+7W99Kq0rLKx87SgoPL+Qor0qrTkdWTtcSGlu59vs3KxzoKK4M1xzGDM5ozgzKxMYMzlTEggjfRNoMwjDSDNoQzIII4iTWCOPs2gzOVNSCDM9UxgjmBNSCDMP05gzOGMCCDNNwzgzX2N4M1lzUggzX5NYMwkTmCOIM5gjn8M4Mw8DQggzLrOYMy6zWCOYM5LgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2diMjMxMi11dGY4LnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZ2IyMzEyLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjdkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2diMjMxMi11dGY4LnR4dApAQCAtMCwwICsxLDYgQEAKK1B5dGhvbu+8iOa0vuajru+8ieivreiogOaYr+S4gOenjeWKn+iDveW8uuWkp+iAjOWujOWWhOeahOmAmueUqOWei+iuoeeul+acuueoi+W6j+iuvuiuoeivreiogO+8jAor5bey57uP5YW35pyJ5Y2B5aSa5bm055qE5Y+R5bGV5Y6G5Y+y77yM5oiQ54af5LiU56iz5a6a44CC6L+Z56eN6K+t6KiA5YW35pyJ6Z2e5bi4566A5o236ICM5riF5pmwCivnmoTor63ms5XnibnngrnvvIzpgILlkIjlrozmiJDlkITnp43pq5jlsYLku7vliqHvvIzlh6DkuY7lj6/ku6XlnKjmiYDmnInnmoTmk43kvZzns7vnu5/kuK0KK+i/kOihjOOAgui/meenjeivreiogOeugOWNleiAjOW8uuWkp++8jOmAguWQiOWQhOenjeS6uuWjq+WtpuS5oOS9v+eUqOOAguebruWJje+8jOWfuuS6jui/mQor56eN6K+t6KiA55qE55u45YWz5oqA5pyv5q2j5Zyo6aOe6YCf55qE5Y+R5bGV77yM55So5oi35pWw6YeP5oCl5Ymn5omp5aSn77yM55u45YWz55qE6LWE5rqQ6Z2e5bi45aSa44CCCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZ2IyMzEyLnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZ2IyMzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTM2YWMxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9nYjIzMTIudHh0CkBAIC0wLDAgKzEsNiBAQAorUHl0aG9uo6jFycmto6nT79HUysfSu9bWuabE3Me/tPO2+M3qyca1xM2o08PQzbzGy+O7+rPM0PLJ6LzG0+/R1KOsCivS0b6tvt/T0MqutuDE6rXEt6LVucD6yrejrLPJyuzH0s7Itqiho9Xi1tbT79HUvt/T0LfHs6O88r3dtvjH5c76Ciu1xNPvt6jM2LXjo6zKyrrPzeqzybj31ta437LjyM7O8aOsvLi69b/J0tTU2sv509C1xLLZ1/fPtc2z1tAKK9TL0NCho9Xi1tbT79HUvPK1pbb4x7+086Osysq6z7j31tbIy8q/0afPsMq508Oho8S/x7CjrLv509rV4gor1tbT79HUtcTP4LnYvLzK9dX91Nq3ycvZtcS3otW5o6zTw7unyv3Bv7yxvufAqbTzo6zP4LnYtcTXytS0t8ezo7bgoaMKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9nYmstdXRmOC50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2diay11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWJiZDMxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9nYmstdXRmOC50eHQKQEAgLTAsMCArMSwxNCBAQAorUHl0aG9u77yI5rS+5qOu77yJ6K+t6KiA5piv5LiA56eN5Yqf6IO95by65aSn6ICM5a6M5ZaE55qE6YCa55So5Z6L6K6h566X5py656iL5bqP6K6+6K6h6K+t6KiA77yMCivlt7Lnu4/lhbfmnInljYHlpJrlubTnmoTlj5HlsZXljoblj7LvvIzmiJDnhp/kuJTnqLPlrprjgILov5nnp43or63oqIDlhbfmnInpnZ7luLjnroDmjbfogIzmuIXmmbAKK+eahOivreazleeJueeCue+8jOmAguWQiOWujOaIkOWQhOenjemrmOWxguS7u+WKoe+8jOWHoOS5juWPr+S7peWcqOaJgOacieeahOaTjeS9nOezu+e7n+S4rQor6L+Q6KGM44CC6L+Z56eN6K+t6KiA566A5Y2V6ICM5by65aSn77yM6YCC5ZCI5ZCE56eN5Lq65aOr5a2m5Lmg5L2/55So44CC55uu5YmN77yM5Z+65LqO6L+ZCivnp43or63oqIDnmoTnm7jlhbPmioDmnK/mraPlnKjpo57pgJ/nmoTlj5HlsZXvvIznlKjmiLfmlbDph4/mgKXliafmianlpKfvvIznm7jlhbPnmoTotYTmupDpnZ7luLjlpJrjgIIKK+WmguS9leWcqCBQeXRob24g5Lit5L2/55So5pei5pyJ55qEIEMgbGlicmFyeT8KK+OAgOWcqOizh+ioiuenkeaKgOW/q+mAn+eZvOWxleeahOS7iuWkqSwg6ZaL55m85Y+K5ris6Kmm6Luf6auU55qE6YCf5bqm5piv5LiN5a655b+96KaW55qECivoqrLpoYwuIOeCuuWKoOW/q+mWi+eZvOWPiua4rOippueahOmAn+W6piwg5oiR5YCR5L6/5bi45biM5pyb6IO95Yip55So5LiA5Lqb5bey6ZaL55m85aW955qECitsaWJyYXJ5LCDkuKbmnInkuIDlgIsgZmFzdCBwcm90b3R5cGluZyDnmoQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ug5Y+vCivkvpvkvb/nlKguIOebruWJjeacieioseioseWkmuWkmueahCBsaWJyYXJ5IOaYr+S7pSBDIOWvq+aIkCwg6ICMIFB5dGhvbiDmmK/kuIDlgIsKK2Zhc3QgcHJvdG90eXBpbmcg55qEIHByb2dyYW1taW5nIGxhbmd1YWdlLiDmlYXmiJHlgJHluIzmnJvog73lsIfml6LmnInnmoQKK0MgbGlicmFyeSDmi7/liLAgUHl0aG9uIOeahOeSsOWig+S4rea4rOippuWPiuaVtOWQiC4g5YW25Lit5pyA5Li76KaB5Lmf5piv5oiR5YCR5omACivopoHoqI7oq5bnmoTllY/poYzlsLHmmK86CisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZ2JrLnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvZ2JrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzg4ZjhhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9nYmsudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1B5dGhvbqOoxcnJraOp0+/R1MrH0rvW1rmmxNzHv7TztvjN6snGtcTNqNPD0M28xsvju/qzzNDyyei8xtPv0dSjrAor0tG+rb7f09DKrrbgxOq1xLei1bnA+sq3o6yzycrsx9LOyLaooaPV4tbW0+/R1L7f09C3x7OjvPK93bb4x+XO+gortcTT77eozNi146Osysq6z83qs8m499bWuN+y48jOzvGjrLy4uvW/ydLU1NrL+dPQtcSy2df3z7XNs9bQCivUy9DQoaPV4tbW0+/R1LzytaW2+Me/tPOjrMrKus+499bWyMvKv9Gnz7DKudPDoaPEv8ewo6y7+dPa1eIKK9bW0+/R1LXEz+C52Ly8yvXV/dTat8nL2bXEt6LVuaOs08O7p8r9wb+8sb7nwKm086Osz+C52LXE18rUtLfHs6O24KGjCivI57rO1NogUHl0aG9uINbQyrnTw7zI09C1xCBDIGxpYnJhcnk/CiuhodTa2VnTjb/GvLy/7MvZsGzVubXEvfHM7Cwg6V+wbLywnHnUh9yb83e1xMvZtsjKx7K7yN269tKVtcQKK9Vu7n0uIJ7pvNO/7OlfsGy8sJx51Ie1xMvZtsgsIM7SgoOx47Ojz6PN+8TcwPvTw9K70KnS0elfsGy6w7XECitsaWJyYXJ5LCCBS9PQ0ruCgCBmYXN0IHByb3RvdHlwaW5nILXEIHByb2dyYW1taW5nIGxhbmd1YWdlIL/JCiu5qcq508MuIMS/x7DT0NRT1FO24LbgtcQgbGlicmFyeSDKx9LUIEMgjJGzySwgtvggUHl0aG9uIMrH0ruCgAorZmFzdCBwcm90b3R5cGluZyC1xCBwcm9ncmFtbWluZyBsYW5ndWFnZS4gucrO0oKDz6PN+8TcjKK8yNPQtcQKK0MgbGlicmFyeSDEw7W9IFB5dGhvbiC1xK1ovrPW0Jx51Ie8sNX7us8uIMbk1tDX7tb30qrSssrHztKCg8v5CivSqtOR1ZO1xIaW7n2+zcrHOgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2h6LXV0ZjgudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9oei11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzExNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9oei11dGY4LnR4dApAQCAtMCwwICsxLDIgQEAKK1RoaXMgc2VudGVuY2UgaXMgaW4gQVNDSUkuCitUaGUgbmV4dCBzZW50ZW5jZSBpcyBpbiBHQi7lt7HmiYDkuI3mrLLvvIzli7/mlr3mlrzkurrjgIJCeWUuCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2h6LnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvaHoudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODJkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2h6LnR4dApAQCAtMCwwICsxLDIgQEAKK1RoaXMgc2VudGVuY2UgaXMgaW4gQVNDSUkuCitUaGUgbmV4dCBzZW50ZW5jZSBpcyBpbiBHQi5+ezw6S3kyO1N7IyxOcEopbDZISyEjfn1CeWUuCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfanAtdXRmOC50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfanAtdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2MzI1MAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvaXNvMjAyMl9qcC11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK1B5dGhvbiDjga7plovnmbrjga/jgIExOTkwIOW5tOOBlOOCjeOBi+OCiemWi+Wni+OBleOCjOOBpuOBhOOBvuOBmeOAggor6ZaL55m66ICF44GuIEd1aWRvIHZhbiBSb3NzdW0g44Gv5pWZ6IKy55So44Gu44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44CMQUJD44CN44Gu6ZaL55m644Gr5Y+C5Yqg44GX44Gm44GE44G+44GX44Gf44GM44CBQUJDIOOBr+Wun+eUqOS4iuOBruebrueahOOBq+OBr+OBguOBvuOCiumBqeOBl+OBpuOBhOOBvuOBm+OCk+OBp+OBl+OBn+OAggor44GT44Gu44Gf44KB44CBR3VpZG8g44Gv44KI44KK5a6f55So55qE44Gq44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44Gu6ZaL55m644KS6ZaL5aeL44GX44CB6Iux5Zu9IEJCUyDmlL7pgIHjga7jgrPjg6Hjg4fjgqPnlarntYTjgIzjg6Ljg7Pjg4bjgqMg44OR44Kk44K944Oz44CN44Gu44OV44Kh44Oz44Gn44GC44KLIEd1aWRvIOOBr+OBk+OBruiogOiqnuOCkuOAjFB5dGhvbuOAjeOBqOWQjeOBpeOBkeOBvuOBl+OBn+OAggor44GT44Gu44KI44GG44Gq6IOM5pmv44GL44KJ55Sf44G+44KM44GfIFB5dGhvbiDjga7oqIDoqp7oqK3oqIjjga/jgIHjgIzjgrfjg7Pjg5fjg6vjgI3jgafjgIznv5LlvpfjgYzlrrnmmJPjgI3jgajjgYTjgYbnm67mqJnjgavph43ngrnjgYznva7jgYvjgozjgabjgYTjgb7jgZnjgIIKK+WkmuOBj+OBruOCueOCr+ODquODl+ODiOezu+iogOiqnuOBp+OBr+ODpuODvOOCtuOBruebruWFiOOBruWIqeS+v+aAp+OCkuWEquWFiOOBl+OBpuiJsuOAheOBquapn+iDveOCkuiogOiqnuimgee0oOOBqOOBl+OBpuWPluOCiuWFpeOCjOOCi+WgtOWQiOOBjOWkmuOBhOOBruOBp+OBmeOBjOOAgVB5dGhvbiDjgafjga/jgZ3jgYbjgYTjgaPjgZ/lsI/ntLDlt6XjgYzov73liqDjgZXjgozjgovjgZPjgajjga/jgYLjgb7jgorjgYLjgorjgb7jgZvjgpPjgIIKK+iogOiqnuiHquS9k+OBruapn+iDveOBr+acgOWwj+mZkOOBq+aKvOOBleOBiOOAgeW/heimgeOBquapn+iDveOBr+aLoeW8teODouOCuOODpeODvOODq+OBqOOBl+OBpui/veWKoOOBmeOCi+OAgeOBqOOBhOOBhuOBruOBjCBQeXRob24g44Gu44Od44Oq44K344O844Gn44GZ44CCCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvaXNvMjAyMl9qcC50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfanAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzk4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfanAudHh0CkBAIC0wLDAgKzEsNyBAQAorUHl0aG9uIBskQiROMytILyRPISIbKEIxOTkwIBskQkcvJDQkbSQrJGkzKztPJDUkbCRGJCQkXiQ5ISMbKEIKKxskQjMrSC88VCROGyhCIEd1aWRvIHZhbiBSb3NzdW0gGyRCJE82NTBpTVEkTiVXJW0lMCVpJV8lcyUwOEA4bCFWGyhCQUJDGyRCIVckTjMrSC8kSzsyMkMkNyRGJCQkXiQ3JD8kLCEiGyhCQUJDIBskQiRPPEJNUT5lJE5MXEUqJEskTyQiJF4kakUsJDckRiQkJF4kOyRzJEckNyQ/ISMbKEIKKxskQiQzJE4kPyRhISIbKEJHdWlkbyAbJEIkTyRoJGo8Qk1RRSokSiVXJW0lMCVpJV8lcyUwOEA4bCROMytILyRyMys7TyQ3ISIxUTlxGyhCIEJCUyAbJEJKfEF3JE4lMyVhJUclI0hWQUghViViJXMlRiUjGyhCIBskQiVRJSQlPSVzIVckTiVVJSElcyRHJCIkaxsoQiBHdWlkbyAbJEIkTyQzJE44QDhsJHIhVhsoQlB5dGhvbhskQiFXJEhMPiRFJDEkXiQ3JD8hIxsoQgorGyRCJDMkTiRoJCYkSkdYN0okKyRpQDgkXiRsJD8bKEIgUHl0aG9uIBskQiROOEA4bEBfN1ckTyEiIVYlNyVzJVclayFXJEchVj0sRkAkLE1GMFchVyRIJCQkJkxcSTgkSz1FRUAkLENWJCskbCRGJCQkXiQ5ISMbKEIKKxskQkI/JC8kTiU5JS8laiVXJUg3TzhAOGwkRyRPJWYhPCU2JE5MXEBoJE5NeEpYQC0kck0lQGgkNyRGPychOSRKNSFHPSRyOEA4bE1XQUckSCQ3JEY8aCRqRn4kbCRrPmw5ZyQsQj8kJCROJEckOSQsISIbKEJQeXRob24gGyRCJEckTyQ9JCYkJCRDJD8+LjpZOSkkLERJMkMkNSRsJGskMyRIJE8kIiReJGokIiRqJF4kOyRzISMbKEIKKxskQjhAOGw8K0JOJE41IUc9JE86Rz4uOEIkSzIhJDUkKCEiSSxNVyRKNSFHPSRPM0hEJSViJTglZSE8JWskSCQ3JEZESTJDJDkkayEiJEgkJCQmJE4kLBsoQiBQeXRob24gGyRCJE4lXSVqJTchPCRHJDkhIxsoQgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfa3ItdXRmOC50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfa3ItdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjOWQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvaXNvMjAyMl9rci11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK+KXjiDtjIzsnbTsjawoUHl0aG9uKeydgCDrsLDsmrDquLAg7Im96rOgLCDqsJXroKXtlZwg7ZSE66Gc6re4656Y67CNIOyWuOyWtOyeheuLiOuLpC4g7YyM7J207I2s7J2ACivtmqjsnKjsoIHsnbgg6rOg7IiY7KSAIOuNsOydtO2EsCDqtazsobDsmYAg6rCE64uo7ZWY7KeA66eMIO2aqOycqOyggeyduCDqsJ3ssrTsp4DtlqXtlITroZzqt7jrnpjrsI3snYQKK+yngOybkO2VqeuLiOuLpC4g7YyM7J207I2s7J2YIOyasOyVhCjlhKrpm4Up7ZWcIOusuOuyleqzvCDrj5nsoIEg7YOA7J207ZWRLCDqt7jrpqzqs6Ag7J247YSw7ZSE66as7YyFCivtmZjqsr3snYAg7YyM7J207I2s7J2EIOyKpO2BrOumve2MheqzvCDsl6zrn6wg67aE7JW87JeQ7ISc7JmAIOuMgOu2gOu2hOydmCDtlIzrnqvtj7zsl5DshJzsnZgg67mg66W4CivslaDtlIzrpqzsvIDsnbTshZgg6rCc67Cc7J2EIO2VoCDsiJgg7J6I64qUIOydtOyDgeyggeyduCDslrjslrTroZwg66eM65Ok7Ja07KSN64uI64ukLgorCivimIbssqvqsIDrgZ06IOuCoOyVhOudvCDsk6l+IO2BvCEg6riI7JeG7J20IOyghOuLiOuLpC4g6re465+w6rGwIOuLpC4KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3MvaXNvMjAyMl9rci50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfa3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZWNlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfa3IudHh0CkBAIC0wLDAgKzEsNyBAQAorGyQpQw4hXQ8gDkZEQEw9Yw8oUHl0aG9uKQ5AOg8gDjloP2wxYg8gDj0xMG0PLCAOMC03QkdRDyAOR0E3TjFXNyE5Vg8gDj5wPm5AVDRPNFkPLiAORkRATD1jQDoPCisOSD9AMkB7QE4PIA4wbTx2QVgPIA41JUBMRU0PIA4xOEE2P00PIA4wIzRcR09Bdjg4DyAOSD9AMkB7QE4PIA4wNEM8QXZHYkdBN04xVzchOVZAOw8KKw5Bdj94R1U0TzRZDy4gDkZEQEw9Y0BHDyAOP2w+Rg8oDmlQZDoPKQ5HUQ8gDjkuOX0weg8gDjU/QHsPIA5FOEBMR04PLCAOMVc4LjBtDyAOQE5FTUdBOC5GQw8KKw5ILzBmQDoPIA5GREBMPWNAOw8gDj06RSk4M0ZDMHoPIA4/KTcvDyAOOlA+Xz8hPC0/TQ8gDjRrOk46UEBHDyAOR0M3J0Z7PyE8LUBHDyAOOnw4JQ8KKw4+VkdDOC5ESUBMPEcPIA4wMzlfQDsPIA5HUg8gDjx2DyAOQFY0Qg8gDkBMO3NAe0BODyAOPnA+bjdODyAOODg1aT5uQV00TzRZDy4KKworDiFZQzkwITMhDzogDjMvPkY2cw8gDj4xD34gDkUtDyEgDjFdPnhATA8gDkB8NE80WQ8uIA4xVzcxMEUPIA40WQ8uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2pvaGFiLXV0ZjgudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9qb2hhYi11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjU1ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9qb2hhYi11dGY4LnR4dApAQCAtMCwwICsxLDkgQEAKK+uYoOuwqeqwge2VmCDtjrLsi5zsvZzrnbwKKwor44mv44mv64KpISEg5Zug5Lmd5pyI7Yyo66+k66aU6raIIOKToeKTlu2bgMK/wr/CvyDquI3rkpkg4pOU646oIOOJry4gLgor5Lqe7JiB4pOU64ql7Zq5IC4gLiAuIC4g7ISc7Jq466SEIOuOkO2VmeS5mSDlrrbtm4AgISAhICHjhaAu44WgCivtnZDtnZDtnZAg44Sx44Sx44Sx4piG44WgX+OFoCDslrTrpqgg7YO47L2w6riQIOuOjOydkSDsuZHkuZ3rk6TkuZkg44mv65Oc6riQCivshKTrpowg5a627ZuAIC4gLiAuIC4g6rW07JWg7ImMIOKTlOq2iCDik6HrppjjibHquJAg5Zug5LuB5bed76aB5Lit6rmM7Ka8CivsmYDskoDtm4AgISAhIOS6nuyYgeKTlCDlrrbriqXqtogg4piG5LiK6rSAIOyXhuuKpeq2iOuKpSDkup7riqXrkojtm4Ag6riA7JWg65O0Civik6HroKTrk4DkuZ0g7IuA7ZKU7Ii07ZuAIOyWtOumqCDlm6Dku4Hlt53vpoHkuK3si4Hikajrk6TslZwhISDjia/jia/rgqnimaEg4oyS4oySKgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2pvaGFiLnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3Mvam9oYWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Nzc4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL2pvaGFiLnR4dApAQCAtMCwwICsxLDkgQEAKK5mxpHeIYtBhIM1cr6HFqZxhCisKK9zA3MCQcyEhIPFn4pzwVcyBo4mfhYqhINze3NPSetmv2a/ZryCLd5bTINzRlYEg3MAuIC4KK+08tXfc0ZN30nMgLiAuIC4gLiCs4baJnqEglWXQYvDgIOA70nogISAhICGHQS6HQQor02HTYdNhIIhBiEGIQdlph0Ffh0EgtOGfmiDIocXBi3oglWG3dyDDl+Kcl2nw4CDcwJdhi3oKK6zpn3og4DvSeiAuIC4gLiAuIIqJtIGuuiDc0YqhINzen4ncwot6IPFn8WL1Se388+mMYbuaCiu1wbKh0nogISAhIO08tXfc0SDgO5N3iqEg2WnqvonFILT0k3eKoZN3IO08k3eWwdJ6IItptIGXegor3N6dYZdB4pwgr4HOoa6h0nogtOGfmiDxZ/Fi9Unt/PPpr4Lc75dptHohISDcwNzAkHPZvSDZYtliKgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL3NoaWZ0X2ppcy11dGY4LnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjMyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL3NoaWZ0X2ppcy11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK1B5dGhvbiDjga7plovnmbrjga/jgIExOTkwIOW5tOOBlOOCjeOBi+OCiemWi+Wni+OBleOCjOOBpuOBhOOBvuOBmeOAggor6ZaL55m66ICF44GuIEd1aWRvIHZhbiBSb3NzdW0g44Gv5pWZ6IKy55So44Gu44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44CMQUJD44CN44Gu6ZaL55m644Gr5Y+C5Yqg44GX44Gm44GE44G+44GX44Gf44GM44CBQUJDIOOBr+Wun+eUqOS4iuOBruebrueahOOBq+OBr+OBguOBvuOCiumBqeOBl+OBpuOBhOOBvuOBm+OCk+OBp+OBl+OBn+OAggor44GT44Gu44Gf44KB44CBR3VpZG8g44Gv44KI44KK5a6f55So55qE44Gq44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44Gu6ZaL55m644KS6ZaL5aeL44GX44CB6Iux5Zu9IEJCUyDmlL7pgIHjga7jgrPjg6Hjg4fjgqPnlarntYTjgIzjg6Ljg7Pjg4bjgqMg44OR44Kk44K944Oz44CN44Gu44OV44Kh44Oz44Gn44GC44KLIEd1aWRvIOOBr+OBk+OBruiogOiqnuOCkuOAjFB5dGhvbuOAjeOBqOWQjeOBpeOBkeOBvuOBl+OBn+OAggor44GT44Gu44KI44GG44Gq6IOM5pmv44GL44KJ55Sf44G+44KM44GfIFB5dGhvbiDjga7oqIDoqp7oqK3oqIjjga/jgIHjgIzjgrfjg7Pjg5fjg6vjgI3jgafjgIznv5LlvpfjgYzlrrnmmJPjgI3jgajjgYTjgYbnm67mqJnjgavph43ngrnjgYznva7jgYvjgozjgabjgYTjgb7jgZnjgIIKK+WkmuOBj+OBruOCueOCr+ODquODl+ODiOezu+iogOiqnuOBp+OBr+ODpuODvOOCtuOBruebruWFiOOBruWIqeS+v+aAp+OCkuWEquWFiOOBl+OBpuiJsuOAheOBquapn+iDveOCkuiogOiqnuimgee0oOOBqOOBl+OBpuWPluOCiuWFpeOCjOOCi+WgtOWQiOOBjOWkmuOBhOOBruOBp+OBmeOBjOOAgVB5dGhvbiDjgafjga/jgZ3jgYbjgYTjgaPjgZ/lsI/ntLDlt6XjgYzov73liqDjgZXjgozjgovjgZPjgajjga/jgYLjgb7jgorjgYLjgorjgb7jgZvjgpPjgIIKK+iogOiqnuiHquS9k+OBruapn+iDveOBr+acgOWwj+mZkOOBq+aKvOOBleOBiOOAgeW/heimgeOBquapn+iDveOBr+aLoeW8teODouOCuOODpeODvOODq+OBqOOBl+OBpui/veWKoOOBmeOCi+OAgeOBqOOBhOOBhuOBruOBjCBQeXRob24g44Gu44Od44Oq44K344O844Gn44GZ44CCCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzLnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGI3NjBkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9zaGlmdF9qaXMudHh0CkBAIC0wLDAgKzEsNyBAQAorUHl0aG9uIILMikqUrYLNgUExOTkwIJROgrKC64KpgueKSo5ugrOC6oLEgqKC3IK3gUIKK4pKlK2O0oLMIEd1aWRvIHZhbiBSb3NzdW0ggs2Ls4jnl3CCzIN2g42DT4OJg36Dk4NPjL6M6oF1QUJDgXaCzIpKlK2CyY5RicGCtYLEgqKC3IK1gr2CqoFBQUJDIILNjsCXcI/jgsyW2pNJgsmCzYKggtyC6JNLgrWCxIKigtyCuYLxgsWCtYK9gUIKK4KxgsyCvYLfgUFHdWlkbyCCzYLmguiOwJdwk0mCyIN2g42DT4OJg36Dk4NPjL6M6oLMikqUrYLwikqOboK1gUGJcI2RIEJCUyCV+pGXgsyDUoOBg2aDQpTUkWeBdYOCg5ODZYNCIINwg0ODXIOTgXaCzIN0g0CDk4LFgqCC6SBHdWlkbyCCzYKxgsyMvozqgvCBdVB5dGhvboF2gsaWvILDgq+C3IK1gr2BQgorgrGCzILmgqSCyJR3jGmCqYLnkLaC3ILqgr0gUHl0aG9uIILMjL6M6pDdjHaCzYFBgXWDVoOTg3aDi4F2gsWBdY9Lk76CqpdliNWBdoLGgqKCpJbalVeCyY9kk1+CqpJ1gqmC6oLEgqKC3IK3gUIKK5G9gq2CzINYg06DioN2g2eMboy+jOqCxYLNg4aBW4NVgsyW2pDmgsyXmJXWkKuC8JdEkOaCtYLEkEaBWILIi0CUXILwjL6M6pd2kWaCxoK1gsSO5oLok/yC6oLpj+qNh4Kqkb2CooLMgsWCt4KqgUFQeXRob24ggsWCzYK7gqSCooLBgr2PrI3XjUiCqpLHicGCs4LqgumCsYLGgs2CoILcguiCoILogtyCuYLxgUIKK4y+jOqOqZHMgsyLQJRcgs2NxY+sjMCCyYmfgrOCpoFBlUuXdoLIi0CUXILNimeSo4OCg1eDhYFbg4uCxoK1gsSSx4nBgreC6YFBgsaCooKkgsyCqiBQeXRob24ggsyDfIOKg1aBW4LFgreBQgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY2prZW5jb2RpbmdzL3NoaWZ0X2ppc3gwMjEzLXV0ZjgudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9zaGlmdF9qaXN4MDIxMy11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTU2YTJlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9zaGlmdF9qaXN4MDIxMy11dGY4LnR4dApAQCAtMCwwICsxLDggQEAKK1B5dGhvbiDjga7plovnmbrjga/jgIExOTkwIOW5tOOBlOOCjeOBi+OCiemWi+Wni+OBleOCjOOBpuOBhOOBvuOBmeOAggor6ZaL55m66ICF44GuIEd1aWRvIHZhbiBSb3NzdW0g44Gv5pWZ6IKy55So44Gu44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44CMQUJD44CN44Gu6ZaL55m644Gr5Y+C5Yqg44GX44Gm44GE44G+44GX44Gf44GM44CBQUJDIOOBr+Wun+eUqOS4iuOBruebrueahOOBq+OBr+OBguOBvuOCiumBqeOBl+OBpuOBhOOBvuOBm+OCk+OBp+OBl+OBn+OAggor44GT44Gu44Gf44KB44CBR3VpZG8g44Gv44KI44KK5a6f55So55qE44Gq44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44Gu6ZaL55m644KS6ZaL5aeL44GX44CB6Iux5Zu9IEJCUyDmlL7pgIHjga7jgrPjg6Hjg4fjgqPnlarntYTjgIzjg6Ljg7Pjg4bjgqMg44OR44Kk44K944Oz44CN44Gu44OV44Kh44Oz44Gn44GC44KLIEd1aWRvIOOBr+OBk+OBruiogOiqnuOCkuOAjFB5dGhvbuOAjeOBqOWQjeOBpeOBkeOBvuOBl+OBn+OAggor44GT44Gu44KI44GG44Gq6IOM5pmv44GL44KJ55Sf44G+44KM44GfIFB5dGhvbiDjga7oqIDoqp7oqK3oqIjjga/jgIHjgIzjgrfjg7Pjg5fjg6vjgI3jgafjgIznv5LlvpfjgYzlrrnmmJPjgI3jgajjgYTjgYbnm67mqJnjgavph43ngrnjgYznva7jgYvjgozjgabjgYTjgb7jgZnjgIIKK+WkmuOBj+OBruOCueOCr+ODquODl+ODiOezu+iogOiqnuOBp+OBr+ODpuODvOOCtuOBruebruWFiOOBruWIqeS+v+aAp+OCkuWEquWFiOOBl+OBpuiJsuOAheOBquapn+iDveOCkuiogOiqnuimgee0oOOBqOOBl+OBpuWPluOCiuWFpeOCjOOCi+WgtOWQiOOBjOWkmuOBhOOBruOBp+OBmeOBjOOAgVB5dGhvbiDjgafjga/jgZ3jgYbjgYTjgaPjgZ/lsI/ntLDlt6XjgYzov73liqDjgZXjgozjgovjgZPjgajjga/jgYLjgb7jgorjgYLjgorjgb7jgZvjgpPjgIIKK+iogOiqnuiHquS9k+OBruapn+iDveOBr+acgOWwj+mZkOOBq+aKvOOBleOBiOOAgeW/heimgeOBquapn+iDveOBr+aLoeW8teODouOCuOODpeODvOODq+OBqOOBl+OBpui/veWKoOOBmeOCi+OAgeOBqOOBhOOBhuOBruOBjCBQeXRob24g44Gu44Od44Oq44K344O844Gn44GZ44CCCisKK+ODjuOBi+OCmiDjg4jjgpog44OI44Kt76i276i5IPChmrTwqo6MIOm6gOm9gfCpm7AKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzeDAyMTMudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Nqa2VuY29kaW5ncy9zaGlmdF9qaXN4MDIxMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjOWVmNAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzeDAyMTMudHh0CkBAIC0wLDAgKzEsOCBAQAorUHl0aG9uIILMikqUrYLNgUExOTkwIJROgrKC64KpgueKSo5ugrOC6oLEgqKC3IK3gUIKK4pKlK2O0oLMIEd1aWRvIHZhbiBSb3NzdW0ggs2Ls4jnl3CCzIN2g42DT4OJg36Dk4NPjL6M6oF1QUJDgXaCzIpKlK2CyY5RicGCtYLEgqKC3IK1gr2CqoFBQUJDIILNjsCXcI/jgsyW2pNJgsmCzYKggtyC6JNLgrWCxIKigtyCuYLxgsWCtYK9gUIKK4KxgsyCvYLfgUFHdWlkbyCCzYLmguiOwJdwk0mCyIN2g42DT4OJg36Dk4NPjL6M6oLMikqUrYLwikqOboK1gUGJcI2RIEJCUyCV+pGXgsyDUoOBg2aDQpTUkWeBdYOCg5ODZYNCIINwg0ODXIOTgXaCzIN0g0CDk4LFgqCC6SBHdWlkbyCCzYKxgsyMvozqgvCBdVB5dGhvboF2gsaWvILDgq+C3IK1gr2BQgorgrGCzILmgqSCyJR3jGmCqYLnkLaC3ILqgr0gUHl0aG9uIILMjL6M6pDdjHaCzYFBgXWDVoOTg3aDi4F2gsWBdY9Lk76CqpdliNWBdoLGgqKCpJbalVeCyY9kk1+CqpJ1gqmC6oLEgqKC3IK3gUIKK5G9gq2CzINYg06DioN2g2eMboy+jOqCxYLNg4aBW4NVgsyW2pDmgsyXmJXWkKuC8JdEkOaCtYLEkEaBWILIi0CUXILwjL6M6pd2kWaCxoK1gsSO5oLok/yC6oLpj+qNh4Kqkb2CooLMgsWCt4KqgUFQeXRob24ggsWCzYK7gqSCooLBgr2PrI3XjUiCqpLHicGCs4LqgumCsYLGgs2CoILcguiCoILogtyCuYLxgUIKK4y+jOqOqZHMgsyLQJRcgs2NxY+sjMCCyYmfgrOCpoFBlUuXdoLIi0CUXILNimeSo4OCg1eDhYFbg4uCxoK1gsSSx4nBgreC6YFBgsaCooKkgsyCqiBQeXRob24ggsyDfIOKg1aBW4LFgreBQgorCiuDbYL1IIOeIINng0yIS4h5IJiD/NYg/NL85vvUCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY21hdGhfdGVzdGNhc2VzLnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jbWF0aF90ZXN0Y2FzZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTkzODAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY21hdGhfdGVzdGNhc2VzLnR4dApAQCAtMCwwICsxLDIzNjUgQEAKKy0tIFRlc3RjYXNlcyBmb3IgZnVuY3Rpb25zIGluIGNtYXRoLgorLS0KKy0tIEVhY2ggbGluZSB0YWtlcyB0aGUgZm9ybToKKy0tCistLSA8dGVzdGlkPiA8ZnVuY3Rpb24+IDxpbnB1dF92YWx1ZT4gLT4gPG91dHB1dF92YWx1ZT4gPGZsYWdzPgorLS0KKy0tIHdoZXJlOgorLS0KKy0tICAgPHRlc3RpZD4gaXMgYSBzaG9ydCBuYW1lIGlkZW50aWZ5aW5nIHRoZSB0ZXN0LAorLS0KKy0tICAgPGZ1bmN0aW9uPiBpcyB0aGUgZnVuY3Rpb24gdG8gYmUgdGVzdGVkIChleHAsIGNvcywgYXNpbmgsIC4uLiksCistLQorLS0gICA8aW5wdXRfdmFsdWU+IGlzIGEgcGFpciBvZiBmbG9hdHMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UKKy0tICAgICByZXByZXNlbnRpbmcgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGEgY29tcGxleCBudW1iZXIsIGFuZAorLS0KKy0tICAgPG91dHB1dF92YWx1ZT4gaXMgdGhlIGV4cGVjdGVkIChpZGVhbCkgb3V0cHV0IHZhbHVlLCBhZ2FpbgorLS0gICAgIHJlcHJlc2VudGVkIGFzIGEgcGFpciBvZiBmbG9hdHMuCistLQorLS0gICA8ZmxhZ3M+IGlzIGEgbGlzdCBvZiB0aGUgZmxvYXRpbmctcG9pbnQgZmxhZ3MgcmVxdWlyZWQgYnkgQzk5CistLQorLS0gVGhlIHBvc3NpYmxlIGZsYWdzIGFyZToKKy0tCistLSAgIGRpdmlkZS1ieS16ZXJvIDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYQorLS0gICAgIG1hdGhlbWF0aWNhbGx5IGluZmluaXRlIHJlc3VsdC4KKy0tCistLSAgIG92ZXJmbG93IDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYSBmaW5pdGUgcmVzdWx0IHdob3NlCistLSAgICAgcmVhbCBvciBpbWFnaW5hcnkgcGFydCBpcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSB1c3VhbCByYW5nZQorLS0gICAgIG9mIGFuIElFRUUgNzU0IGRvdWJsZS4KKy0tCistLSAgIGludmFsaWQgOiByYWlzZWQgZm9yIGludmFsaWQgaW5wdXRzLgorLS0KKy0tICAgaWdub3JlLXJlYWwtc2lnbiA6IGluZGljYXRlcyB0aGF0IHRoZSBzaWduIG9mIHRoZSByZWFsIHBhcnQgb2YKKy0tICAgICB0aGUgcmVzdWx0IGlzIHVuc3BlY2lmaWVkOyBpZiB0aGUgcmVhbCBwYXJ0IG9mIHRoZSByZXN1bHQgaXMKKy0tICAgICBnaXZlbiBhcyBpbmYsIHRoZW4gYm90aCAtaW5mIGFuZCBpbmYgc2hvdWxkIGJlIGFjY2VwdGVkIGFzCistLSAgICAgY29ycmVjdC4KKy0tCistLSAgIGlnbm9yZS1pbWFnLXNpZ24gOiBpbmRpY2F0ZXMgdGhhdCB0aGUgc2lnbiBvZiB0aGUgaW1hZ2luYXJ5IHBhcnQKKy0tICAgICBvZiB0aGUgcmVzdWx0IGlzIHVuc3BlY2lmaWVkLgorLS0KKy0tIEZsYWdzIG1heSBhcHBlYXIgaW4gYW55IG9yZGVyLgorLS0KKy0tIExpbmVzIGJlZ2lubmluZyB3aXRoICctLScgKGxpa2UgdGhpcyBvbmUpIHN0YXJ0IGEgY29tbWVudCwgYW5kIGFyZQorLS0gaWdub3JlZC4gIEJsYW5rIGxpbmVzLCBvciBsaW5lcyBjb250YWluaW5nIG9ubHkgd2hpdGVzcGFjZSwgYXJlIGFsc28KKy0tIGlnbm9yZWQuCisKKy0tIFRoZSBtYWpvcml0eSBvZiB0aGUgdmFsdWVzIGJlbG93IHdlcmUgY29tcHV0ZWQgd2l0aCB0aGUgaGVscCBvZgorLS0gdmVyc2lvbiAyLjMgb2YgdGhlIE1QRlIgbGlicmFyeSBmb3IgbXVsdGlwbGUtcHJlY2lzaW9uCistLSBmbG9hdGluZy1wb2ludCBjb21wdXRhdGlvbnMgd2l0aCBjb3JyZWN0IHJvdW5kaW5nLiAgQWxsIG91dHB1dAorLS0gdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgKG1vZHVsbyB5ZXQtdG8tYmUtZGlzY292ZXJlZCBidWdzKQorLS0gY29ycmVjdGx5IHJvdW5kZWQsIHByb3ZpZGVkIHRoYXQgZWFjaCBpbnB1dCBhbmQgb3V0cHV0IGRlY2ltYWwKKy0tIGZsb2F0aW5nLXBvaW50IHZhbHVlIGJlbG93IGlzIGludGVycHJldGVkIGFzIGEgcmVwcmVzZW50YXRpb24gb2YKKy0tIHRoZSBjb3JyZXNwb25kaW5nIG5lYXJlc3QgSUVFRSA3NTQgZG91YmxlLXByZWNpc2lvbiB2YWx1ZS4gIFNlZSB0aGUKKy0tIE1QRlIgaG9tZXBhZ2UgYXQgaHR0cDovL3d3dy5tcGZyLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKy0tIE1QRlIgcHJvamVjdC4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gYWNvczogSW52ZXJzZSBjb3NpbmUgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHplcm9zCithY29zMDAwMCBhY29zIDAuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMDAxIGFjb3MgMC4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYWNvczAwMDIgYWNvcyAtMC4wIDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYWNvczAwMDMgYWNvcyAtMC4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorCistLSBicmFuY2ggcG9pbnRzOiArLy0xCithY29zMDAxMCBhY29zIDEuMCAwLjAgLT4gMC4wIC0wLjAKK2Fjb3MwMDExIGFjb3MgMS4wIC0wLjAgLT4gMC4wIDAuMAorYWNvczAwMTIgYWNvcyAtMS4wIDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTAuMAorYWNvczAwMTMgYWNvcyAtMS4wIC0wLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIDAuMAorCistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiByZWFsIGF4aXMKK2Fjb3MwMDIwIGFjb3MgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYWNvczAwMjEgYWNvcyAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDAyMiBhY29zIC0xZS0zMDUgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithY29zMDAyMyBhY29zIC0xZS0zMDUgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDAyNCBhY29zIC0xZS0xNTAgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithY29zMDAyNSBhY29zIC0xZS0xNTAgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDAyNiBhY29zIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjggLTAuMAorYWNvczAwMjcgYWNvcyAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2OCAwLjAKK2Fjb3MwMDI4IGFjb3MgLTAuMDAxIDAuMCAtPiAxLjU3MTc5NjMyNjk2MTU2MzQgLTAuMAorYWNvczAwMjkgYWNvcyAtMC4wMDEgLTAuMCAtPiAxLjU3MTc5NjMyNjk2MTU2MzQgMC4wCithY29zMDAzMCBhY29zIC0wLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAyLjE4ODI5Nzk4MTYxMjA2NjcgLTAuMAorYWNvczAwMzEgYWNvcyAtMC41Nzg5OTk5OTk5OTk5OTk5NiAtMC4wIC0+IDIuMTg4Mjk3OTgxNjEyMDY2NyAwLjAKK2Fjb3MwMDMyIGFjb3MgLTAuOTk5OTk5OTk5OTk5OTk5ODkgMC4wIC0+IDMuMTQxNTkyNjM4Njg4NjMxOSAtMC4wCithY29zMDAzMyBhY29zIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gMy4xNDE1OTI2Mzg2ODg2MzE5IDAuMAorYWNvczAwMzQgYWNvcyAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDgKK2Fjb3MwMDM1IGFjb3MgLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAyLjEwNzM0MjQyNTU0NDcwMTRlLTA4CithY29zMDAzNiBhY29zIC0xLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAtMC4wNDQ3MTc2MzM2MDgzMDY4NDkKK2Fjb3MwMDM3IGFjb3MgLTEuMDAwOTk5OTk5OTk5OTk5OSAtMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAwLjA0NDcxNzYzMzYwODMwNjg0OQorYWNvczAwMzggYWNvcyAtMi4wIDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTEuMzE2OTU3ODk2OTI0ODE2OAorYWNvczAwMzkgYWNvcyAtMi4wIC0wLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIDEuMzE2OTU3ODk2OTI0ODE2OAorYWNvczAwNDAgYWNvcyAtMjMuMCAwLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIC0zLjgyODE2ODQ3MTMzMzEwMTIKK2Fjb3MwMDQxIGFjb3MgLTIzLjAgLTAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgMy44MjgxNjg0NzEzMzMxMDEyCithY29zMDA0MiBhY29zIC0xMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTM3LjUzNDUwODY2ODQ2NDY3NAorYWNvczAwNDMgYWNvcyAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAzNy41MzQ1MDg2Njg0NjQ2NzQKK2Fjb3MwMDQ0IGFjb3MgLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTM0Ni4wODA5MTExMjk2NjY3OQorYWNvczAwNDUgYWNvcyAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLTAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgMzQ2LjA4MDkxMTEyOTY2Njc5CithY29zMDA0NiBhY29zIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIC02ODkuMTY2MDg5OTg1Nzc5NjUKK2Fjb3MwMDQ3IGFjb3MgLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIDY4OS4xNjYwODk5ODU3Nzk2NQorYWNvczAwNDggYWNvcyA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMDQ5IGFjb3MgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDA1MCBhY29zIDFlLTMwNSAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMDUxIGFjb3MgMWUtMzA1IC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYWNvczAwNTIgYWNvcyAxZS0xNTAgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithY29zMDA1MyBhY29zIDFlLTE1MCAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2Fjb3MwMDU0IGFjb3MgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMDU1IGFjb3MgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2Fjb3MwMDU2IGFjb3MgMC4wMDEgMC4wIC0+IDEuNTY5Nzk2MzI2NjI4MjMgLTAuMAorYWNvczAwNTcgYWNvcyAwLjAwMSAtMC4wIC0+IDEuNTY5Nzk2MzI2NjI4MjMgMC4wCithY29zMDA1OCBhY29zIDAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuOTUzMjk0NjcxOTc3NzI2NTUgLTAuMAorYWNvczAwNTkgYWNvcyAwLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gMC45NTMyOTQ2NzE5Nzc3MjY1NSAwLjAKK2Fjb3MwMDYwIGFjb3MgMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gMS40OTAxMTYxMTkzODQ3NjU2ZS0wOCAtMC4wCithY29zMDA2MSBhY29zIDAuOTk5OTk5OTk5OTk5OTk5ODkgLTAuMCAtPiAxLjQ5MDExNjExOTM4NDc2NTZlLTA4IDAuMAorYWNvczAwNjIgYWNvcyAxLjAwMDAwMDAwMDAwMDAwMDIgMC4wIC0+IDAuMCAtMi4xMDczNDI0MjU1NDQ3MDE0ZS0wOAorYWNvczAwNjMgYWNvcyAxLjAwMDAwMDAwMDAwMDAwMDIgLTAuMCAtPiAwLjAgMi4xMDczNDI0MjU1NDQ3MDE0ZS0wOAorYWNvczAwNjQgYWNvcyAxLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDAuMCAtMC4wNDQ3MTc2MzM2MDgzMDY4NDkKK2Fjb3MwMDY1IGFjb3MgMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMC4wIDAuMDQ0NzE3NjMzNjA4MzA2ODQ5CithY29zMDA2NiBhY29zIDIuMCAwLjAgLT4gMC4wIC0xLjMxNjk1Nzg5NjkyNDgxNjgKK2Fjb3MwMDY3IGFjb3MgMi4wIC0wLjAgLT4gMC4wIDEuMzE2OTU3ODk2OTI0ODE2OAorYWNvczAwNjggYWNvcyAyMy4wIDAuMCAtPiAwLjAgLTMuODI4MTY4NDcxMzMzMTAxMgorYWNvczAwNjkgYWNvcyAyMy4wIC0wLjAgLT4gMC4wIDMuODI4MTY4NDcxMzMzMTAxMgorYWNvczAwNzAgYWNvcyAxMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAwLjAgLTM3LjUzNDUwODY2ODQ2NDY3NAorYWNvczAwNzEgYWNvcyAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMC4wIDM3LjUzNDUwODY2ODQ2NDY3NAorYWNvczAwNzIgYWNvcyA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMC4wIC0zNDYuMDgwOTExMTI5NjY2NzkKK2Fjb3MwMDczIGFjb3MgOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLTAuMCAtPiAwLjAgMzQ2LjA4MDkxMTEyOTY2Njc5CithY29zMDA3NCBhY29zIDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiAwLjAgLTY4OS4xNjYwODk5ODU3Nzk2NQorYWNvczAwNzUgYWNvcyAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtMC4wIC0+IDAuMCA2ODkuMTY2MDg5OTg1Nzc5NjUKKworLS0gcmFuZG9tIGlucHV0cworYWNvczAxMDAgYWNvcyAtMy4zMzA3MTEzMzI0NTk2NjgyIC0xMC43MzIwMDc1MzA4NjMyNjYgLT4gMS44NzA2MDg1Njk0NDgyMzM5IDMuMTEzOTg2ODA2NTU0NjEzCithY29zMDEwMSBhY29zIC0yODYzLjk1Mjk5MTc0MzI5MSAtMjY4MTAxMzMxNS4yNTcxMjM5IC0+IDEuNTcwNzk3Mzk1MDMwMTY5OSAyMi40MDI2MDc4NDMyNzQ3NTgKK2Fjb3MwMTAyIGFjb3MgLTAuMzMwNzI2Mzk3OTMyMjAwODggLTAuODUwNTU0NjQ2NTgyNTMwNTUgLT4gMS44MjE5NDI2ODk1OTIyNjAxIDAuNzkyNTAxNjY3MjkzMTE5NjYKK2Fjb3MwMTAzIGFjb3MgLTIuNTcyMjMyNTg0MjA5NzgwMiAtMTIuNzAzOTQwODA5ODIxNTc0IC0+IDEuNzY5OTk0MjQxMzEwNzQwOCAzLjI1NjUxNzAxNTY1MjczMjUKK2Fjb3MwMTA0IGFjb3MgLTQyLjQ5NTIzMzc4NTQ1OTU4MyAtMC41NDAzOTMyMDc1MTMzNzE2MSAtPiAzLjEyODg3MzI1NzMxNTMzMDQgNC40NDI0ODE1NTE5NzM1NjAxCithY29zMDEwNSBhY29zIC0xLjEzNjM4MTg2MjU4NTY0MDEgOTY0MS4xMzI1NDk4NjMwMzc2IC0+IDEuNTcwOTE0MTk0ODgyMDA0OSAtOS44NjY5NDEwNTUzMjU0Mjg0CithY29zMDEwNiBhY29zIC0yLjQzOTg0MjY4MjQxNTc4NjZlLTExIDAuMzMwMDIwNTE4OTAyNjYxNjUgLT4gMS41NzA3OTYzMjY4MTgwNjYgLTAuMzI0MzA1NzgwNDE1Nzg2NjcKK2Fjb3MwMTA3IGFjb3MgLTEuMzUyMTM0MDQyODE4NjU1MiAyLjkzNjk3Mzc5MTIwNzY3NzIgLT4gMS45ODQ5MDU5MTkyMzM5MzM4IC0xLjg4MjI4OTM2NzQxMTc5NDIKK2Fjb3MwMTA4IGFjb3MgLTEuODI3MzY0NzA2NDc3OTE1IDEuMDM1NTQ1OTIzMjE0NzU1NyAtPiAyLjU3MzIyNDYzMDc5NjAwMzIgLTEuNDA5MDY4ODI2Nzg1NDk2OQorYWNvczAxMDkgYWNvcyAtMC4yNTk3ODM3MzcwNjQwMzU0NiAxMC4wOTcxMjY2OTE4NTgzMyAtPiAxLjU5NjM5NDAzODYzNzgzMDYgLTMuMDA4MTY3MzA1MDE5NjA2MworYWNvczAxMTAgYWNvcyAwLjMzNTYxNzc4NDcxMDcyNTUxIC00NTg3MzUwLjY4MjM5OTkxMTggLT4gMS41NzA3OTYyNTM2MzMzMjUxIDE2LjAzMTk2MDQwMjU3OTUzOQorYWNvczAxMTEgYWNvcyAwLjQ5MTMzNDQ0NjEwOTk4NDQ1IC0wLjgwNzE0MjIzNjI5OTAwMTUgLT4gMS4xOTA4NzYxNzEyODAxNzg4IDAuNzg1NzMzNDU4MTMxODc4NjcKK2Fjb3MwMTEyIGFjb3MgMC40MjE5NjczNDUwNzgyMzk3NCAtMi40ODEyOTY1NDMxNzQ1MTE1IC0+IDEuNDE0MDkxMTg2MTAwNjkyIDEuNjUxNzA3MjYwOTg4MTcyCithY29zMDExMyBhY29zIDIuOTYxNDI2MjEwMTAwNjU1IC0yMTkuMDMyOTU2OTUyNDg2NjQgLT4gMS41NTcyNzY4MzE5ODIyNzc4IDYuMDgyNDY1OTg4NTgyNzMwNAorYWNvczAxMTQgYWNvcyAyLjg4NjIwOTA2MzY1MjY0MSAtMjAuMzgwMTEyMDcyMjA2MDYgLT4gMS40MzAyNzY1MjUyMjk3ODg5IDMuNzE4MjAxODUzMTQ3NjQyCithY29zMDExNSBhY29zIDAuNDE4MDU2ODA3NTI3NjUwOSAxLjQ4MzM0MzM5OTA4MjM0ODQgLT4gMS4zMzkzODM0NTU4MzAzMDQyIC0xLjIwNzk4NDc3NTgzMDE1NzYKK2Fjb3MwMTE2IGFjb3MgNTIuMzc2MTExNDA1OTI0NzE4IDAuMDEzOTMwNDI5MDAxOTQxMDAxIC0+IDAuMDAwMjY2MDE3NjE4MDQwMjQxODggLTQuNjUxNTA2NjY5MTIwNDcxNAorYWNvczAxMTcgYWNvcyA0MTYzNzk0ODM4Ny42MjU5NjkgMS41NjM0MTgyOTI4OTQwNDEgLT4gMy43NTQ3OTE4NTA3ODgzNTQ4ZS0xMSAtMjUuMTQ1NDI0OTg5ODA5MzgxCithY29zMDExOCBhY29zIDAuMDYxMjI2NjU5MTIyMjQ5NTI2IDAuODQ0NzIzNDM5NDYxNTE1NCAtPiAxLjUyNDAyODAzMDYzNjczMTUgLTAuNzY3OTE3OTg5NzExNDA4MTIKK2Fjb3MwMTE5IGFjb3MgMi40NDgwNDY2NDIwNDQyOTU5ZSsyNiAwLjE4MDAyMzM5MjAxMzg0NjYyIC0+IDcuMzUzNzU2NjIwNTY0Nzk4ZS0yOCAtNjEuNDU1NjUwMDE1OTk2Mzc2CisKKy0tIHZhbHVlcyBuZWFyIGluZmluaXR5CithY29zMDIwMCBhY29zIDEuNjIwNjg2MDUxODY4MzAyMWUrMzA4IDEuMDMwODQyNjIyNjI4NTI4M2UrMzA4IC0+IDAuNTY2NTA4MjYwOTM4MjYyMjMgLTcxMC41NDIwNjg3NDI0MTU2MQorYWNvczAyMDEgYWNvcyAxLjIwNjc3MzU4NzUwNzAwNjJlKzMwOCAtMS4zNDI5MTczNzI0MzkwMjc2ZSszMDggLT4gMC44Mzg3NDM2OTM5MDg2NDg4OSA3MTAuNDgwMTc3OTQwMjc0OTgKK2Fjb3MwMjAyIGFjb3MgLTcuNDEzMDE0NTEzMjU0OTA0N2UrMzA3IDEuMTc1OTEzMDU0MzkyNzY0NWUrMzA4IC0+IDIuMTMzMjcyOTM0NjQ3ODUzNiAtNzEwLjIxODcxMTE1Njk4NzUyCithY29zMDIwMyBhY29zIC04LjYzMjk0MjY0NDIyNTcyNDllKzMwNyAtMS4yMzE2MjgyOTUyMTg0MTMzZSszMDggLT4gMi4xODIxNTExMDMyNDQ0ODM4IDcxMC4yOTc1MjE0NTY5NzE0OAorYWNvczAyMDQgYWNvcyAwLjAgMS40Mjg5NzEzODU1ODQ5NzQ2ZSszMDggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC03MTAuMjQ2MzEwNjk3Mzg5OTYKK2Fjb3MwMjA1IGFjb3MgLTAuMCAxLjMxNTM1MjQ1NDU5ODc0MzJlKzMwOCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTcxMC4xNjM0NjA0Nzg3NTM5CithY29zMDIwNiBhY29zIDAuMCAtOS42MjI5MDM3NjY5MjY5MzIxZSszMDcgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDcwOS44NTA5MTY3OTU3MzY5MQorYWNvczAyMDcgYWNvcyAtMC4wIC00Ljk3ODM2MTY0MjExMDcwODhlKzMwNyAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgNzA5LjE5MTg3MTU3OTExMjMzCithY29zMDIwOCBhY29zIDEuMzkzNzU0MTkyNTczOTM4OWUrMzA4IDAuMCAtPiAwLjAgLTcxMC4yMjEzNTY3ODcwNzI2NAorYWNvczAyMDkgYWNvcyA5LjEzNjIzODg5NjczNzE1MzZlKzMwNyAtMC4wIC0+IDAuMCA3MDkuNzk5MDE5NTMxMjQ2MTMKK2Fjb3MwMjEwIGFjb3MgLTEuMzQ1NzM2MTIyMDY5NzQzNmUrMzA4IDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTcxMC4xODYyOTY5ODg3MTg0OAorYWNvczAyMTEgYWNvcyAtNS40Njk5MDkwMDU2MTQ0Mjg0ZSszMDcgLTAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgNzA5LjI4NjAzMjcxMDg1NjQ5CithY29zMDIxMiBhY29zIDEuNTg4MDcxNjkzMjM1ODkwMWUrMzA4IDUuNTYzODQwMTI1MjMzOTkyOSAtPiAzLjUwMzUxOTQ4Nzc3Mzg3M2UtMzA4IC03MTAuMzUxODc2MzMxNDA1ODMKK2Fjb3MwMjEzIGFjb3MgMS4yNDk3MjExNjYzNDYzMTY0ZSszMDggLTMuMDQ1NjQ3NzcxNzkxMTAyNCAtPiAyLjQzNzA2MTg0NTMxOTc0ODZlLTMwOCA3MTAuMTEyMjc2MjgyMjM0MTIKK2Fjb3MwMjE0IGFjb3MgLTkuOTAxNjIyNDAwNjAyOTUyOGUrMzA3IDQuOTU3MDQyNzM0MDc4OTA1NiAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTcwOS44Nzk0NjkzNTIyOTQ2OAorYWNvczAyMTUgYWNvcyAtMS41ODU0MDcxMDY2ODc0MTM5ZSszMDggLTQuNDIzMzU3Nzc0MTQ5Nzc4MyAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgNzEwLjM1MDE5NzA0NjcyMDA0CithY29zMDIxNiBhY29zIDkuMzY3NDYyMzA4MzY0NzYyOCAxLjUyMDk1NTkwNTE4Nzc5NzllKzMwOCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTcxMC4zMDg2OTQ4NDQ5MTA4NgorYWNvczAyMTcgYWNvcyA4LjE3NzM4MzIwMjE3ODQzODMgLTYuNjA5MzQ0NTc5NTAwMDA1NmUrMzA3IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA3MDkuNDc1MjU1MjIyNzc5MgorYWNvczAyMTggYWNvcyAtMy4xODQ1OTM1MDAwNjY1MTA0IDEuNTc2ODg1NjM5NjY1MDg5M2UrMzA4IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtNzEwLjM0NDgwNzYxMDQyNjg3CithY29zMDIxOSBhY29zIC0xLjA1NzczMDM4ODA5NTM5MDMgLTYuNDU3NDYyNjgxNTczNTYxM2UrMzA3IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA3MDkuNDUyMDA3MTk2NjIwNDYKKworLS0gdmFsdWVzIG5lYXIgMAorYWNvczAyMjAgYWNvcyAxLjg1NjY5ODY5NzA3MTQwNDVlLTMyMCAzLjE4NjcyMzQxNTY3NjA0MDJlLTMyMSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTMuMTg2NzIzNDE1Njc2MDQwMmUtMzIxCithY29zMDIyMSBhY29zIDcuOTA1MDUwMzMzNDU5OTQ0N2UtMzIzIC04Ljg5MzE4MTYyNTE0MjQzNzhlLTMyMyAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgOC44OTMxODE2MjUxNDI0Mzc4ZS0zMjMKK2Fjb3MwMjIyIGFjb3MgLTQuNDQ2NTkwODEyNTcxMjE4OWUtMzIzIDIuNDY1NDA2NTA5NzIyMjcyN2UtMzExIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMi40NjU0MDY1MDk3MjIyNzI3ZS0zMTEKK2Fjb3MwMjIzIGFjb3MgLTYuMTAxNjkxNjQwODE5MjYxOWUtMzExIC0yLjQ3MDMyODIyOTIwNjIzMjdlLTMyMyAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMi40NzAzMjgyMjkyMDYyMzI3ZS0zMjMKK2Fjb3MwMjI0IGFjb3MgMC4wIDMuNDMwNTc4MzYyMTg0MjcyOWUtMzExIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMy40MzA1NzgzNjIxODQyNzI5ZS0zMTEKK2Fjb3MwMjI1IGFjb3MgLTAuMCAxLjYxMTc0MDk0OTg2MzMxNDVlLTMxOSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTEuNjExNzQwOTQ5ODYzMzE0NWUtMzE5CithY29zMDIyNiBhY29zIDAuMCAtNC45OTAwNjMwMjI5OTY1OTAxZS0zMjIgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDQuOTkwMDYzMDIyOTk2NTkwMWUtMzIyCithY29zMDIyNyBhY29zIC0wLjAgLTQuNDg4OTI3OTIxMDU5MjgxOGUtMzExIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA0LjQ4ODkyNzkyMTA1OTI4MThlLTMxMQorYWNvczAyMjggYWNvcyA1LjMyOTc2Nzg2ODE0NzcyMTRlLTMxMiAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMjI5IGFjb3MgNi4yMDczNDI1ODk3MjExNjE0ZS0zMTMgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDIzMCBhY29zIC00Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMjMxIGFjb3MgLTEuNzEwNzUxNzA1Mjg5OTAwM2UtMzE4IC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorCistLSBzcGVjaWFsIHZhbHVlcworYWNvczEwMDAgYWNvcyAwLjAgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithY29zMTAwMSBhY29zIDAuMCAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2Fjb3MxMDAyIGFjb3MgLTAuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MxMDAzIGFjb3MgLTAuMCAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2Fjb3MxMDA0IGFjb3MgMC4wIG5hbiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgbmFuCithY29zMTAwNSBhY29zIC0wLjAgbmFuIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiBuYW4KK2Fjb3MxMDA2IGFjb3MgLTIuMyBpbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2Fjb3MxMDA3IGFjb3MgLTAuMCBpbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2Fjb3MxMDA4IGFjb3MgMC4wIGluZiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLWluZgorYWNvczEwMDkgYWNvcyAyLjMgaW5mIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtaW5mCithY29zMTAxMCBhY29zIC0yLjMgbmFuIC0+IG5hbiBuYW4KK2Fjb3MxMDExIGFjb3MgMi4zIG5hbiAtPiBuYW4gbmFuCithY29zMTAxMiBhY29zIC1pbmYgMi4zIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAtaW5mCithY29zMTAxMyBhY29zIC1pbmYgMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAtaW5mCithY29zMTAxNCBhY29zIGluZiAyLjMgLT4gMC4wIC1pbmYKK2Fjb3MxMDE1IGFjb3MgaW5mIDAuMCAtPiAwLjAgLWluZgorYWNvczEwMTYgYWNvcyAtaW5mIGluZiAtPiAyLjM1NjE5NDQ5MDE5MjM0NDggLWluZgorYWNvczEwMTcgYWNvcyBpbmYgaW5mIC0+IDAuNzg1Mzk4MTYzMzk3NDQ4MjggLWluZgorYWNvczEwMTggYWNvcyBpbmYgbmFuIC0+IG5hbiBpbmYgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUtaW1hZy1zaWduCithY29zMTAxOSBhY29zIC1pbmYgbmFuIC0+IG5hbiBpbmYgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZS1pbWFnLXNpZ24KK2Fjb3MxMDIwIGFjb3MgbmFuIDAuMCAtPiBuYW4gbmFuCithY29zMTAyMSBhY29zIG5hbiAyLjMgLT4gbmFuIG5hbgorYWNvczEwMjIgYWNvcyBuYW4gaW5mIC0+IG5hbiAtaW5mCithY29zMTAyMyBhY29zIG5hbiBuYW4gLT4gbmFuIG5hbgorYWNvczEwMjQgYWNvcyAtMi4zIC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYWNvczEwMjUgYWNvcyAtMC4wIC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYWNvczEwMjYgYWNvcyAwLjAgLWluZiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgaW5mCithY29zMTAyNyBhY29zIDIuMyAtaW5mIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiBpbmYKK2Fjb3MxMDI4IGFjb3MgLWluZiAtMi4zIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSBpbmYKK2Fjb3MxMDI5IGFjb3MgLWluZiAtMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSBpbmYKK2Fjb3MxMDMwIGFjb3MgaW5mIC0yLjMgLT4gMC4wIGluZgorYWNvczEwMzEgYWNvcyBpbmYgLTAuMCAtPiAwLjAgaW5mCithY29zMTAzMiBhY29zIC1pbmYgLWluZiAtPiAyLjM1NjE5NDQ5MDE5MjM0NDggaW5mCithY29zMTAzMyBhY29zIGluZiAtaW5mIC0+IDAuNzg1Mzk4MTYzMzk3NDQ4MjggaW5mCithY29zMTAzNCBhY29zIG5hbiAtMC4wIC0+IG5hbiBuYW4KK2Fjb3MxMDM1IGFjb3MgbmFuIC0yLjMgLT4gbmFuIG5hbgorYWNvczEwMzYgYWNvcyBuYW4gLWluZiAtPiBuYW4gaW5mCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGFjb3NoOiBJbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworYWNvc2gwMDAwIGFjb3NoIDAuMCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDAxIGFjb3NoIDAuMCAtMC4wIC0+IDAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAwMDIgYWNvc2ggLTAuMCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDAzIGFjb3NoIC0wLjAgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSBicmFuY2ggcG9pbnRzOiArLy0xCithY29zaDAwMTAgYWNvc2ggMS4wIDAuMCAtPiAwLjAgMC4wCithY29zaDAwMTEgYWNvc2ggMS4wIC0wLjAgLT4gMC4wIC0wLjAKK2Fjb3NoMDAxMiBhY29zaCAtMS4wIDAuMCAtPiAwLjAgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwMTMgYWNvc2ggLTEuMCAtMC4wIC0+IDAuMCAtMy4xNDE1OTI2NTM1ODk3OTMxCisKKy0tIHZhbHVlcyBhbG9uZyBib3RoIHNpZGVzIG9mIHJlYWwgYXhpcworYWNvc2gwMDIwIGFjb3NoIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDIxIGFjb3NoIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wIC0+IDAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAwMjIgYWNvc2ggLTFlLTMwNSAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDIzIGFjb3NoIC0xZS0zMDUgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDI0IGFjb3NoIC0xZS0xNTAgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDAyNSBhY29zaCAtMWUtMTUwIC0wLjAgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDAyNiBhY29zaCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2OAorYWNvc2gwMDI3IGFjb3NoIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0wLjAgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjgKK2Fjb3NoMDAyOCBhY29zaCAtMC4wMDEgMC4wIC0+IDAuMCAxLjU3MTc5NjMyNjk2MTU2MzQKK2Fjb3NoMDAyOSBhY29zaCAtMC4wMDEgLTAuMCAtPiAwLjAgLTEuNTcxNzk2MzI2OTYxNTYzNAorYWNvc2gwMDMwIGFjb3NoIC0wLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAwLjAgMi4xODgyOTc5ODE2MTIwNjY3CithY29zaDAwMzEgYWNvc2ggLTAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAwLjAgLTIuMTg4Mjk3OTgxNjEyMDY2NworYWNvc2gwMDMyIGFjb3NoIC0wLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAwLjAgMy4xNDE1OTI2Mzg2ODg2MzE5CithY29zaDAwMzMgYWNvc2ggLTAuOTk5OTk5OTk5OTk5OTk5ODkgLTAuMCAtPiAwLjAgLTMuMTQxNTkyNjM4Njg4NjMxOQorYWNvc2gwMDM0IGFjb3NoIC0xLjAwMDAwMDAwMDAwMDAwMDIgMC4wIC0+IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwMzUgYWNvc2ggLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggLTMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDM2IGFjb3NoIC0xLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDAuMDQ0NzE3NjMzNjA4MzA2ODQ5IDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDM3IGFjb3NoIC0xLjAwMDk5OTk5OTk5OTk5OTkgLTAuMCAtPiAwLjA0NDcxNzYzMzYwODMwNjg0OSAtMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwMzggYWNvc2ggLTIuMCAwLjAgLT4gMS4zMTY5NTc4OTY5MjQ4MTY4IDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDM5IGFjb3NoIC0yLjAgLTAuMCAtPiAxLjMxNjk1Nzg5NjkyNDgxNjggLTMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDQwIGFjb3NoIC0yMy4wIDAuMCAtPiAzLjgyODE2ODQ3MTMzMzEwMTIgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwNDEgYWNvc2ggLTIzLjAgLTAuMCAtPiAzLjgyODE2ODQ3MTMzMzEwMTIgLTMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDQyIGFjb3NoIC0xMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAzNy41MzQ1MDg2Njg0NjQ2NzQgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwNDMgYWNvc2ggLTEwMDAwMDAwMDAwMDAwMDAwLjAgLTAuMCAtPiAzNy41MzQ1MDg2Njg0NjQ2NzQgLTMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDQ0IGFjb3NoIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMzQ2LjA4MDkxMTEyOTY2Njc5IDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDQ1IGFjb3NoIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDM0Ni4wODA5MTExMjk2NjY3OSAtMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwNDYgYWNvc2ggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiA2ODkuMTY2MDg5OTg1Nzc5NjUgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwNDcgYWNvc2ggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gNjg5LjE2NjA4OTk4NTc3OTY1IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMDA0OCBhY29zaCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDQ5IGFjb3NoIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0wLjAgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDA1MCBhY29zaCAxZS0zMDUgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDA1MSBhY29zaCAxZS0zMDUgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDUyIGFjb3NoIDFlLTE1MCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDUzIGFjb3NoIDFlLTE1MCAtMC4wIC0+IDAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAwNTQgYWNvc2ggOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDU1IGFjb3NoIDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDU2IGFjb3NoIDAuMDAxIDAuMCAtPiAwLjAgMS41Njk3OTYzMjY2MjgyMworYWNvc2gwMDU3IGFjb3NoIDAuMDAxIC0wLjAgLT4gMC4wIC0xLjU2OTc5NjMyNjYyODIzCithY29zaDAwNTggYWNvc2ggMC41Nzg5OTk5OTk5OTk5OTk5NiAwLjAgLT4gMC4wIDAuOTUzMjk0NjcxOTc3NzI2NTUKK2Fjb3NoMDA1OSBhY29zaCAwLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gMC4wIC0wLjk1MzI5NDY3MTk3NzcyNjU1CithY29zaDAwNjAgYWNvc2ggMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gMC4wIDEuNDkwMTE2MTE5Mzg0NzY1NmUtMDgKK2Fjb3NoMDA2MSBhY29zaCAwLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gMC4wIC0xLjQ5MDExNjExOTM4NDc2NTZlLTA4CithY29zaDAwNjIgYWNvc2ggMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAyLjEwNzM0MjQyNTU0NDcwMTRlLTA4IDAuMAorYWNvc2gwMDYzIGFjb3NoIDEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggLTAuMAorYWNvc2gwMDY0IGFjb3NoIDEuMDAwOTk5OTk5OTk5OTk5OSAwLjAgLT4gMC4wNDQ3MTc2MzM2MDgzMDY4NDkgMC4wCithY29zaDAwNjUgYWNvc2ggMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMC4wNDQ3MTc2MzM2MDgzMDY4NDkgLTAuMAorYWNvc2gwMDY2IGFjb3NoIDIuMCAwLjAgLT4gMS4zMTY5NTc4OTY5MjQ4MTY4IDAuMAorYWNvc2gwMDY3IGFjb3NoIDIuMCAtMC4wIC0+IDEuMzE2OTU3ODk2OTI0ODE2OCAtMC4wCithY29zaDAwNjggYWNvc2ggMjMuMCAwLjAgLT4gMy44MjgxNjg0NzEzMzMxMDEyIDAuMAorYWNvc2gwMDY5IGFjb3NoIDIzLjAgLTAuMCAtPiAzLjgyODE2ODQ3MTMzMzEwMTIgLTAuMAorYWNvc2gwMDcwIGFjb3NoIDEwMDAwMDAwMDAwMDAwMDAwLjAgMC4wIC0+IDM3LjUzNDUwODY2ODQ2NDY3NCAwLjAKK2Fjb3NoMDA3MSBhY29zaCAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMzcuNTM0NTA4NjY4NDY0Njc0IC0wLjAKK2Fjb3NoMDA3MiBhY29zaCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMzQ2LjA4MDkxMTEyOTY2Njc5IDAuMAorYWNvc2gwMDczIGFjb3NoIDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gMzQ2LjA4MDkxMTEyOTY2Njc5IC0wLjAKK2Fjb3NoMDA3NCBhY29zaCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gNjg5LjE2NjA4OTk4NTc3OTY1IDAuMAorYWNvc2gwMDc1IGFjb3NoIDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gNjg5LjE2NjA4OTk4NTc3OTY1IC0wLjAKKworLS0gcmFuZG9tIGlucHV0cworYWNvc2gwMTAwIGFjb3NoIC0xLjQzMjg1ODk1ODEyNTA4NDMgLTEuODM3MDM0Nzc3NTU1ODMwOSAtPiAxLjU1MjY5NjI2NDY1NDk1ODcgLTIuMTkwMjUwMTY4NDM1Nzg2CithY29zaDAxMDEgYWNvc2ggLTAuMzEwNzU4MTkxNTYyMjA5NTcgLTEuMDc3MjU1NTc4NjgzOTI5NyAtPiAwLjk1MTM5MTY4Mjg2MTkzNzA5IC0xLjc4MTIyMjgwODk2MzY0NzkKK2Fjb3NoMDEwMiBhY29zaCAtMS45MDQ0Nzc2NTc4MDcwNDUzIC0yMC40ODUzNzAxNTg5MzIxMjQgLT4gMy43MTc3NDExMDg4OTMyMzU5IC0xLjY2MzM4ODg3NDU4NjEyMjcKK2Fjb3NoMDEwMyBhY29zaCAtMC4wNzU2NDI1MDYwMDA4NTg3NDIgLTIxOTY1OTc2MzIwLjg3MzA1MSAtPiAyNC41MDU5MDc3NDI4ODE5OTEgLTEuNTcwNzk2MzI2Nzk4MzQwMgorYWNvc2gwMTA0IGFjb3NoIC0xLjYxNjIyNzExODEwNTYzMDcgLTMuMDM2OTM0MzQ1ODY5NjA5OSAtPiAxLjk0MDcwNTcyNjI4NjEyMjcgLTIuMDQyOTU0OTQ2MTc1MDIwOQorYWNvc2gwMTA1IGFjb3NoIC0wLjMxMDM3ODAyODAyOTgwNjMgMC4wMDAxODA1NDg4MDAxODA3ODk4NyAtPiAwLjAwMDE4OTkyODc3MDU4NzYxNDE2IDEuODg2Mzg2OTk1MDk2NzI4CithY29zaDAxMDYgYWNvc2ggLTkxNTk0Njg3NTEuNTg5NzY1NSA1LjgwMTQ3NDc2NjQyNzM2NDkgLT4gMjMuNjMxMjAxMTk3OTU5MTkzIDMuMTQxNTkyNjUyOTU2NDA3OAorYWNvc2gwMTA3IGFjb3NoIC0wLjAzNzczOTE1NzU1MDkzMzg4NCAwLjIxODQxMzU3NDkzNTEwNzA1IC0+IDAuMjE2ODU4NDQ5NjA2MDI0ODggMS42MDc2NzM1MTMzNDQ5NDAyCithY29zaDAxMDggYWNvc2ggLTgyMjU5OTEuMDUwODM5NDI5NyAwLjI4MzE4NTQzMDA4OTEzNjQ0IC0+IDE2LjYxNTk1NjUyMDQyMDI4NyAzLjE0MTU5MjYxOTE2NDEwMTkKK2Fjb3NoMDEwOSBhY29zaCAtMzUuNjIwMDcwNTAyMzAyNjM5IDAuMzEzMDMyMzcwMDUwMTUgLT4gNC4yNjU4OTgwMDA2OTQzOTY1IDMuMTMyODAxMzI1NTU0MTg3MworYWNvc2gwMTEwIGFjb3NoIDk2LjcyOTkzOTkwNjgyMDkxNyAtMC4wMjkzNDUyMjgzNzIzNjUzMzQgLT4gNS4yNjUwNDM0Nzc1ODYzNTQ4IC0wLjAwMDMwMzM4ODk1ODY2OTcyODQzCithY29zaDAxMTEgYWNvc2ggMC41OTY1NjAyNDAwNzk2NjQ5MSAtMi4wNDEyMjk0NjU0MTYzOTc4IC0+IDEuNDkyMzAwMjAyNDI4NzgzNSAtMS4zMTI1Njg0MjE5MDAzMzgKK2Fjb3NoMDExMiBhY29zaCAxMDkuMjkzODQxMTI2Nzc4MjggLTAuMDAwMTU0NTQ4NjMwNjE1MzM4MTIgLT4gNS4zODcxNjYyOTYxNTQ1NDc3IC0xLjQxNDEyNDUxNTQwNjEyMTRlLTA2CithY29zaDAxMTMgYWNvc2ggOC42NzA1NjUxOTY5MzYxNTk3IC0zLjY3MjM2MzE2NDk3ODc0NjUgLT4gMi45MzM2MTgwOTU4MzYzNTQ1IC0wLjQwMjY3MzYyMDMxODcyODYxCithY29zaDAxMTQgYWNvc2ggMS44MTAxNjQ2NDQ1MDUyNjg2IC0wLjAxMjM0NTEzMjcyMTg1NTQ3OCAtPiAxLjE5OTcxNDg1NjYyODU3NjkgLTAuMDA4MTgxMzkxMjc2MDE1MDI2NQorYWNvc2gwMTE1IGFjb3NoIDUyLjU2ODk3MTk1MDI1Mjg4IDAuMDAxMTEzOTE2MDY1OTg1NDQzIC0+IDQuNjU1MTgyNzYyMjI2NDEzNSAyLjExOTM0NDU4NzIwNDAzMDdlLTA1CithY29zaDAxMTYgYWNvc2ggMC4yODMzNjc4NjE2NDIxNDczOSAzNTU2NDM5OTI0NTcuNDA0ODUgLT4gMjcuMjkwMzQzMjI2ODE2NTI4IDEuNTcwNzk2MzI2Nzk0MDk5OQorYWNvc2gwMTE3IGFjb3NoIDAuNzM4NzY2MjEyOTE5MTE0MzcgMi44ODI4NTk0NTQxMTA0MzIyZS0yMCAtPiA0LjI3NzQ4MjA5NzgxNTkwNjdlLTIwIDAuNzM5NTU4NDU4MzY4Mjc5MjcKK2Fjb3NoMDExOCBhY29zaCAwLjAyNTg2NTQ3MTc4MTcxODg3OCAzNzEyNTc0NjA2NDMxOC40OTIgLT4gMzEuOTM4NDc4OTg5NDE4MDEyIDEuNTcwNzk2MzI2Nzk0ODk1OQorYWNvc2gwMTE5IGFjb3NoIDIuMjA0NzM1MzUxMTc4MDEzMiAwLjA3NDcxMjI0ODE0MzQ4OTI3MSAtPiAxLjQyODY0MDMyNDg2OTgwMjEgMC4wMzc5OTc5MDQ5NzE2MjY1OTgKKworLS0gdmFsdWVzIG5lYXIgaW5maW5pdHkKK2Fjb3NoMDIwMCBhY29zaCA4LjE1NDg1OTI4NzY0Njc3ODVlKzMwNyA5LjA5NDM3NzkzMzU5NTExMjhlKzMwNyAtPiA3MTAuMDg5NDQ2MjA4MDA2MDUgMC44Mzk4MTE2NTQyNTQ3ODk1NAorYWNvc2gwMjAxIGFjb3NoIDEuNDIzNzIyOTY4MDk3MjUzMWUrMzA4IC0xLjAzMzY5NjY2MTc4NzQ4NThlKzMwOCAtPiA3MTAuNDU0MzMzMTA5NDc1OSAtMC42Mjc5OTcyODc2MzQ4NzU1CithY29zaDAyMDIgYWNvc2ggLTEuNTAxNDUyNjg5OTczODkzOWUrMzA4IDEuNTY3MDcwMDM3ODQ0ODc5MmUrMzA4IC0+IDcxMC42NjQyMDcwNjc5NTQ2NCAyLjMzNDgxMzcyOTkxMDY2OTcKK2Fjb3NoMDIwMyBhY29zaCAtMS4wOTM5MDQwMzc1MjEzOTI4ZSszMDggLTEuMDQxNjk2MDM1MTEyNzk3OGUrMzA4IC0+IDcxMC4zMDE4Mjg2MzExNTg4NiAtMi4zODA2MzYxNDc3ODcwMjcKK2Fjb3NoMDIwNCBhY29zaCAwLjAgMS40NzYwNjI0MzM1NTk1ODhlKzMwOCAtPiA3MTAuMjc4NzMzODQ3MTY5MjkgMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMDUgYWNvc2ggLTAuMCA2LjIwNzcyMTAzMjYyMjEwOTRlKzMwNyAtPiA3MDkuNDEyNTY0NTc0ODQ3NjkgMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMDYgYWNvc2ggMC4wIC0xLjU2MjE4OTk5MDk5NjgzMDhlKzMwOCAtPiA3MTAuMzM1NDQ0NDk5OTA3MzQgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjA3IGFjb3NoIC0wLjAgLTguMzU1NjYyNDgzMzgzOTEyMmUrMzA3IC0+IDcwOS43MDk3MTAxODA0ODMxNyAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMDggYWNvc2ggMS4zMDY3MDc5NzUyNDk5MzQyZSszMDggMC4wIC0+IDcxMC4xNTY4NjY4MDEwNzIyOCAwLjAKK2Fjb3NoMDIwOSBhY29zaCAxLjU2NTM2NDAzNDAyMTQwMjZlKzMwOCAtMC4wIC0+IDcxMC4zMzc0NzQyMjkyNjcwNiAtMC4wCithY29zaDAyMTAgYWNvc2ggLTYuOTAxMTM3NTk5MjI5MDYzNmUrMzA3IDAuMCAtPiA3MDkuNTE4NDU2OTk3MTk5MjIgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAyMTEgYWNvc2ggLTkuOTUzOTU3NjgwOTkyNjk3M2UrMzA3IC0wLjAgLT4gNzA5Ljg4NDc0MDk1ODcwMTg1IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMDIxMiBhY29zaCA3LjY0NDk1OTg1MTg5MTQ5MjVlKzMwNyA5LjU3MDY1NDA3NjgyNjgzNTggLT4gNzA5LjYyMDgxNzMxNzU0ODAyIDEuMjUxODkwNjkxNjc2OTM0NWUtMzA3CithY29zaDAyMTMgYWNvc2ggNS40MzI1NDEwOTcyNjAyMTk3ZSszMDcgLTcuODA2NDgwNzgxNjUyMjcwNiAtPiA3MDkuMjc5MTc3NzI3OTI1IC0xLjQzNjk4NTEzMTI0NzE5NzRlLTMwNworYWNvc2gwMjE0IGFjb3NoIC0xLjE1MjM2MjYxMTIzNjA0NjVlKzMwOCA3LjA2MTc1MTAwMzg4NjkzMzYgLT4gNzEwLjAzMTE3MDEwMjE2OTA5IDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMjE1IGFjb3NoIC0xLjE2ODUwMjc3ODY4NjI1OTllKzMwOCAtNS4xNTY4NTU4MzU3OTI1NjI1IC0+IDcxMC4wNDUwNzkwNzU3MTQxNyAtMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAyMTYgYWNvc2ggMy4wMjM2MzcwMzM5Nzg4NzIxIDEuNzUwMzI0ODcyMDA5NjQxN2UrMzA4IC0+IDcxMC40NDkxNTcyMzQ1ODA2NCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIxNyBhY29zaCA2LjYxMDgwMDc5MjYwMzExNDkgLTkuMTQ2OTk2ODIyNTgwNjE0OWUrMzA3IC0+IDcwOS44MDAxOTYzMzkwMzMyOCAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMTggYWNvc2ggLTUuMTA5NjI2MjkwNTYyMzk1OSA2LjQ0ODQ5MjY3ODU0MTIzOTVlKzMwNyAtPiA3MDkuNDUwNjE3MTM5OTc5NzMgMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMTkgYWNvc2ggLTIuODA4MDkyMDYwODczNTg0NiAtMS43NzE2MTE4ODM2NTE5MzY4ZSszMDggLT4gNzEwLjQ2MTI0NTYyMzYzNDQ1IC0xLjU3MDc5NjMyNjc5NDg5NjYKKworLS0gdmFsdWVzIG5lYXIgMAorYWNvc2gwMjIwIGFjb3NoIDQuNTU2MDUzMDMyNjY5OTMwNGUtMzE3IDcuMzA0ODk4OTEyMTQzNjY1N2UtMzE4IC0+IDcuMzA0ODk4OTEyMTQzNjY1N2UtMzE4IDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjIxIGFjb3NoIDQuODc1NDI3NDEzMzU4NTMzMWUtMzE0IC05Ljg0Njk3OTQ4OTc2ODQxOTllLTMxNSAtPiA5Ljg0Njk3OTQ4OTc2ODQxOTllLTMxNSAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMjIgYWNvc2ggLTQuNjc0ODg3NjAwOTk2MDA5N2UtMzEyIDkuNzkwMDM0Mjg4NzU1NzYwNmUtMzE4IC0+IDkuNzkwMDM0Mjg4NzU1NzYwNmUtMzE4IDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjIzIGFjb3NoIC00LjMxMzY4NzE1MzgzOTkyMzZlLTMyMCAtNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjMgLT4gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjMgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjI0IGFjb3NoIDAuMCA0LjM0MzEwMTM4NjY0OTY3NzRlLTMxNCAtPiA0LjM0MzEwMTM4NjY0OTY3NzRlLTMxNCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIyNSBhY29zaCAtMC4wIDYuMDE0NzMzNDMzNTgyOTE4NGUtMzE3IC0+IDYuMDE0NzMzNDMzNTgyOTE4NGUtMzE3IDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjI2IGFjb3NoIDAuMCAtMS4yODgwMjkxMzg3MDgxMjk3ZS0zMjAgLT4gMS4yODgwMjkxMzg3MDgxMjk3ZS0zMjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjI3IGFjb3NoIC0wLjAgLTEuNDQwMTU2Mzk3NjUzNDYyMWUtMzE3IC0+IDEuNDQwMTU2Mzk3NjUzNDYyMWUtMzE3IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIyOCBhY29zaCAxLjM2ODk2ODA1NzA4NjMwOTFlLTMxMyAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjI5IGFjb3NoIDEuNTMwNDM0Njg5MzQ5NDM3MWUtMzEyIC0wLjAgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIzMCBhY29zaCAtMy43NDUwMTc1OTU0NzY2NDg4ZS0zMjAgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIzMSBhY29zaCAtOC40MjUwNTYzMDgwODg1ODAxZS0zMTEgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSBzcGVjaWFsIHZhbHVlcworYWNvc2gxMDAwIGFjb3NoIDAuMCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gxMDAxIGFjb3NoIC0wLjAgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAwMiBhY29zaCAwLjAgaW5mIC0+IGluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAwMyBhY29zaCAyLjMgaW5mIC0+IGluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAwNCBhY29zaCAtMC4wIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDEwMDUgYWNvc2ggLTIuMyBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gxMDA2IGFjb3NoIDAuMCBuYW4gLT4gbmFuIG5hbgorYWNvc2gxMDA3IGFjb3NoIDIuMyBuYW4gLT4gbmFuIG5hbgorYWNvc2gxMDA4IGFjb3NoIC0wLjAgbmFuIC0+IG5hbiBuYW4KK2Fjb3NoMTAwOSBhY29zaCAtMi4zIG5hbiAtPiBuYW4gbmFuCithY29zaDEwMTAgYWNvc2ggLWluZiAwLjAgLT4gaW5mIDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gxMDExIGFjb3NoIC1pbmYgMi4zIC0+IGluZiAzLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMTAxMiBhY29zaCBpbmYgMC4wIC0+IGluZiAwLjAKK2Fjb3NoMTAxMyBhY29zaCBpbmYgMi4zIC0+IGluZiAwLjAKK2Fjb3NoMTAxNCBhY29zaCAtaW5mIGluZiAtPiBpbmYgMi4zNTYxOTQ0OTAxOTIzNDQ4CithY29zaDEwMTUgYWNvc2ggaW5mIGluZiAtPiBpbmYgMC43ODUzOTgxNjMzOTc0NDgyOAorYWNvc2gxMDE2IGFjb3NoIGluZiBuYW4gLT4gaW5mIG5hbgorYWNvc2gxMDE3IGFjb3NoIC1pbmYgbmFuIC0+IGluZiBuYW4KK2Fjb3NoMTAxOCBhY29zaCBuYW4gMC4wIC0+IG5hbiBuYW4KK2Fjb3NoMTAxOSBhY29zaCBuYW4gMi4zIC0+IG5hbiBuYW4KK2Fjb3NoMTAyMCBhY29zaCBuYW4gaW5mIC0+IGluZiBuYW4KK2Fjb3NoMTAyMSBhY29zaCBuYW4gbmFuIC0+IG5hbiBuYW4KK2Fjb3NoMTAyMiBhY29zaCAwLjAgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gxMDIzIGFjb3NoIC0wLjAgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gxMDI0IGFjb3NoIDAuMCAtaW5mIC0+IGluZiAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDEwMjUgYWNvc2ggMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAyNiBhY29zaCAtMC4wIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAyNyBhY29zaCAtMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAyOCBhY29zaCAtaW5mIC0wLjAgLT4gaW5mIC0zLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMTAyOSBhY29zaCAtaW5mIC0yLjMgLT4gaW5mIC0zLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMTAzMCBhY29zaCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorYWNvc2gxMDMxIGFjb3NoIGluZiAtMi4zIC0+IGluZiAtMC4wCithY29zaDEwMzIgYWNvc2ggLWluZiAtaW5mIC0+IGluZiAtMi4zNTYxOTQ0OTAxOTIzNDQ4CithY29zaDEwMzMgYWNvc2ggaW5mIC1pbmYgLT4gaW5mIC0wLjc4NTM5ODE2MzM5NzQ0ODI4CithY29zaDEwMzQgYWNvc2ggbmFuIC0wLjAgLT4gbmFuIG5hbgorYWNvc2gxMDM1IGFjb3NoIG5hbiAtMi4zIC0+IG5hbiBuYW4KK2Fjb3NoMTAzNiBhY29zaCBuYW4gLWluZiAtPiBpbmYgbmFuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBhc2luOiBJbnZlcnNlIHNpbmUgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworYXNpbjAwMDAgYXNpbiAwLjAgMC4wIC0+IDAuMCAwLjAKK2FzaW4wMDAxIGFzaW4gMC4wIC0wLjAgLT4gMC4wIC0wLjAKK2FzaW4wMDAyIGFzaW4gLTAuMCAwLjAgLT4gLTAuMCAwLjAKK2FzaW4wMDAzIGFzaW4gLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorCistLSBicmFuY2ggcG9pbnRzOiArLy0xCithc2luMDAxMCBhc2luIDEuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXNpbjAwMTEgYXNpbiAxLjAgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYXNpbjAwMTIgYXNpbiAtMS4wIDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXNpbjAwMTMgYXNpbiAtMS4wIC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCisKKy0tIHZhbHVlcyBhbG9uZyBib3RoIHNpZGVzIG9mIHJlYWwgYXhpcworYXNpbjAwMjAgYXNpbiAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgMC4wIC0+IC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAKK2FzaW4wMDIxIGFzaW4gLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0wLjAgLT4gLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0wLjAKK2FzaW4wMDIyIGFzaW4gLTFlLTMwNSAwLjAgLT4gLTFlLTMwNSAwLjAKK2FzaW4wMDIzIGFzaW4gLTFlLTMwNSAtMC4wIC0+IC0xZS0zMDUgLTAuMAorYXNpbjAwMjQgYXNpbiAtMWUtMTUwIDAuMCAtPiAtMWUtMTUwIDAuMAorYXNpbjAwMjUgYXNpbiAtMWUtMTUwIC0wLjAgLT4gLTFlLTE1MCAtMC4wCithc2luMDAyNiBhc2luIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAKK2FzaW4wMDI3IGFzaW4gLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wCithc2luMDAyOCBhc2luIC0wLjAwMSAwLjAgLT4gLTAuMDAxMDAwMDAwMTY2NjY2NzQxNiAwLjAKK2FzaW4wMDI5IGFzaW4gLTAuMDAxIC0wLjAgLT4gLTAuMDAxMDAwMDAwMTY2NjY2NzQxNiAtMC4wCithc2luMDAzMCBhc2luIC0wLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAtMC42MTc1MDE2NTQ4MTcxNzAwMSAwLjAKK2FzaW4wMDMxIGFzaW4gLTAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAtMC42MTc1MDE2NTQ4MTcxNzAwMSAtMC4wCithc2luMDAzMiBhc2luIC0wLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAtMS41NzA3OTYzMTE4OTM3MzU0IDAuMAorYXNpbjAwMzMgYXNpbiAtMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IC0xLjU3MDc5NjMxMTg5MzczNTQgLTAuMAorYXNpbjAwMzQgYXNpbiAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDgKK2FzaW4wMDM1IGFzaW4gLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDgKK2FzaW4wMDM2IGFzaW4gLTEuMDAwOTk5OTk5OTk5OTk5OSAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAwLjA0NDcxNzYzMzYwODMwNjg0OQorYXNpbjAwMzcgYXNpbiAtMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wNDQ3MTc2MzM2MDgzMDY4NDkKK2FzaW4wMDM4IGFzaW4gLTIuMCAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAxLjMxNjk1Nzg5NjkyNDgxNjgKK2FzaW4wMDM5IGFzaW4gLTIuMCAtMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTEuMzE2OTU3ODk2OTI0ODE2OAorYXNpbjAwNDAgYXNpbiAtMjMuMCAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAzLjgyODE2ODQ3MTMzMzEwMTIKK2FzaW4wMDQxIGFzaW4gLTIzLjAgLTAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0zLjgyODE2ODQ3MTMzMzEwMTIKK2FzaW4wMDQyIGFzaW4gLTEwMDAwMDAwMDAwMDAwMDAwLjAgMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMzcuNTM0NTA4NjY4NDY0Njc0Cithc2luMDA0MyBhc2luIC0xMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMzcuNTM0NTA4NjY4NDY0Njc0Cithc2luMDA0NCBhc2luIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAzNDYuMDgwOTExMTI5NjY2NzkKK2FzaW4wMDQ1IGFzaW4gLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMzQ2LjA4MDkxMTEyOTY2Njc5Cithc2luMDA0NiBhc2luIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiA2ODkuMTY2MDg5OTg1Nzc5NjUKK2FzaW4wMDQ3IGFzaW4gLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtNjg5LjE2NjA4OTk4NTc3OTY1Cithc2luMDA0OCBhc2luIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAKK2FzaW4wMDQ5IGFzaW4gOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wCithc2luMDA1MCBhc2luIDFlLTMwNSAwLjAgLT4gMWUtMzA1IDAuMAorYXNpbjAwNTEgYXNpbiAxZS0zMDUgLTAuMCAtPiAxZS0zMDUgLTAuMAorYXNpbjAwNTIgYXNpbiAxZS0xNTAgMC4wIC0+IDFlLTE1MCAwLjAKK2FzaW4wMDUzIGFzaW4gMWUtMTUwIC0wLjAgLT4gMWUtMTUwIC0wLjAKK2FzaW4wMDU0IGFzaW4gOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAKK2FzaW4wMDU1IGFzaW4gOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMAorYXNpbjAwNTYgYXNpbiAwLjAwMSAwLjAgLT4gMC4wMDEwMDAwMDAxNjY2NjY3NDE2IDAuMAorYXNpbjAwNTcgYXNpbiAwLjAwMSAtMC4wIC0+IDAuMDAxMDAwMDAwMTY2NjY2NzQxNiAtMC4wCithc2luMDA1OCBhc2luIDAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuNjE3NTAxNjU0ODE3MTcwMDEgMC4wCithc2luMDA1OSBhc2luIDAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAwLjYxNzUwMTY1NDgxNzE3MDAxIC0wLjAKK2FzaW4wMDYwIGFzaW4gMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gMS41NzA3OTYzMTE4OTM3MzU0IDAuMAorYXNpbjAwNjEgYXNpbiAwLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gMS41NzA3OTYzMTE4OTM3MzU0IC0wLjAKK2FzaW4wMDYyIGFzaW4gMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMi4xMDczNDI0MjU1NDQ3MDE0ZS0wOAorYXNpbjAwNjMgYXNpbiAxLjAwMDAwMDAwMDAwMDAwMDIgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDgKK2FzaW4wMDY0IGFzaW4gMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wNDQ3MTc2MzM2MDgzMDY4NDkKK2FzaW4wMDY1IGFzaW4gMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjA0NDcxNzYzMzYwODMwNjg0OQorYXNpbjAwNjYgYXNpbiAyLjAgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAxLjMxNjk1Nzg5NjkyNDgxNjgKK2FzaW4wMDY3IGFzaW4gMi4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjgKK2FzaW4wMDY4IGFzaW4gMjMuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDMuODI4MTY4NDcxMzMzMTAxMgorYXNpbjAwNjkgYXNpbiAyMy4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0zLjgyODE2ODQ3MTMzMzEwMTIKK2FzaW4wMDcwIGFzaW4gMTAwMDAwMDAwMDAwMDAwMDAuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDM3LjUzNDUwODY2ODQ2NDY3NAorYXNpbjAwNzEgYXNpbiAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0zNy41MzQ1MDg2Njg0NjQ2NzQKK2FzaW4wMDcyIGFzaW4gOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAzNDYuMDgwOTExMTI5NjY2NzkKK2FzaW4wMDczIGFzaW4gOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTM0Ni4wODA5MTExMjk2NjY3OQorYXNpbjAwNzQgYXNpbiAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDY4OS4xNjYwODk5ODU3Nzk2NQorYXNpbjAwNzUgYXNpbiAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtNjg5LjE2NjA4OTk4NTc3OTY1CisKKy0tIHJhbmRvbSBpbnB1dHMKK2FzaW4wMTAwIGFzaW4gLTEuNTk3OTU1NTgzNTA4NjA4MyAtMC4xNTAwMzAwOTgxNDU5NTI0NyAtPiAtMS40NTE1MzY5NTU3NDA1Nzg4IC0xLjA1NDQ0NzYzOTk3OTA4MjMKK2FzaW4wMTAxIGFzaW4gLTAuNTc0ODgyMjU4OTUzMTc2NzkgLTkuNjA4MDM5NzgzODk1Mjc0M2UtMTMgLT4gLTAuNjEyNDYwMjQ0NjA0MTI4NTEgLTEuMTc0MjM4MDA1NDAwNDAzZS0xMgorYXNpbjAxMDIgYXNpbiAtMy42NTA4MDg3OTMwNTE2MjQ5IC0wLjM2MDI3NTI3MDkzMjIwMTUyIC0+IC0xLjQ2ODU4OTA2MDUzMDU4NzQgLTEuOTc0MjI3MzAwNzE1MjAzOAorYXNpbjAxMDMgYXNpbiAtMS41MjM4NjU5NzkyMzI2ODE5IC0xLjEzNjA4MTM1MTY5OTYzNjQgLT4gLTAuODYwODAwNTE2OTExNDcyNzUgLTEuMzIyMzc0MjIwNTY4OTE5NQorYXNpbjAxMDQgYXNpbiAtMTU5Mi4wNjM5MDQ1NTU1MzA2IC0wLjcyMzYyNDI3OTM1MDE4MjM2IC0+IC0xLjU3MDM0MTgwNzExNzUxNzkgLTguMDY1OTMzNjkxODcyOTIyOAorYXNpbjAxMDUgYXNpbiAtMC4xOTgzNTQ3MTM3MTMxMjAxOSA0LjIxMzE1MDg0MTY2OTc3MDkgLT4gLTAuMDQ1Nzc3ODMxMDE5OTM1MTQ5IDIuMTQ2MTczMjc1MTkzMzE3MQorYXNpbjAxMDYgYXNpbiAtMS45MTg0NzEwNTQ0MzAyMTMgMC40MDYwMzMwNTA3OTc3OTIzNCAtPiAtMS4zMzAxMzk2NTg1NzkxNTU2IDEuMzAyNjM2NDIzMTQ5ODEKK2FzaW4wMTA3IGFzaW4gLTI1NDQ5NS4wMTYyMzM3MzY0MiAwLjcxMDg0NDE0NDM0NDcwODIyIC0+IC0xLjU3MDc5MzUzMzYzOTQzNTkgMTMuMTQwMTgzNzEyNzYyMzIxCithc2luMDEwOCBhc2luIC0wLjMxMzE1ODgyNzE1NjkxMTU3IDMuOTY0Nzk5NDI4ODQyOTg2NiAtPiAtMC4wNzY0NTA0MDM4NDA5MTYwMDQgMi4wODg5NzYyMTM4NzEzNDU3Cithc2luMDEwOSBhc2luIC0wLjkwMDE3MDY0Mjg0NzIwODE2IDEuMjUzMDY1OTQ4NTkwNzEwNSAtPiAtMC41MzQ2NjUwOTc0MTk0MzQ0NyAxLjE3MDI4MTE1NTc1NzcKK2FzaW4wMTEwIGFzaW4gMi4xNjE1MTgxNjk2NTcxMDc1IC0wLjE0MDU4NjQ3NDg4MjI5NTIzIC0+IDEuNDk3NjE2NjMyMzg5Njg3MSAtMS40MDg1ODExMDM5MzM0NjA0Cithc2luMDExMSBhc2luIDEuMjEwNDc0OTIxMDcwNzc5NSAtMC44NTczMjQ4NDQ4NTI5ODk5OSAtPiAwLjgzOTEzMDcxNTg4MzQzOTI0IC0xLjA2ODE3MTkyNTA1MjU5MDEKK2FzaW4wMTEyIGFzaW4gMS43MDU5NzMzMTg1MTI4ODkxIC0wLjg0MDMyOTY2MzczMTU2NTgxIC0+IDEuMDUxMDkwMDgxNTgxNjIyOSAtMS4yOTY3OTc5NzkxMzYxNjUyCithc2luMDExMyBhc2luIDkuOTEzNzA4NTAxNzI5MDY4NyAtMS40NjA4MzgzOTcwMjUwODkzIC0+IDEuNDIzNzcwNDgyMDEyODg5MSAtMi45OTU0MTQ2Nzc1NjA2ODYKK2FzaW4wMTE0IGFzaW4gMTE3LjEyMzQ0NzUxMDQxNDk1IC01NDUzOTA4MDkxLjUzMzQwMTUgLT4gMi4xNDc1MTQxNDExMzkyMDEyZS0wOCAtMjMuMTEyNzQ1NDUwMjE3MDY2Cithc2luMDExNSBhc2luIDAuMDgxMDQxMTg3Nzk4MDI5MjI3IDAuMDY3MDU0MzQ5ODYwMTczMTk2IC0+IDAuMDgwOTQ2Nzg2ODU2NzcxODEzIDAuMDY3MjIzOTkxMDYwNjM5Njk4Cithc2luMDExNiBhc2luIDQ2LjYzNTQ3MjMyMjA0OTk0OSAyLjM4MzUxOTA3MTgwNTY2NzggLT4gMS41MTk3MTk0OTQwMDEwNzc5IDQuNTM2Njk4OTYwMDk3MjA4MworYXNpbjAxMTcgYXNpbiAzOTA3LjA2ODc5NjExMjcxMDUgMTkuMTQ0MDIxODg2MzkwMTgxIC0+IDEuNTY1ODk2NTIzMzA4MzIzNSA4Ljk2MzcwMTg3MTU5MjQyMTcKK2FzaW4wMTE4IGFzaW4gMS4wODg5MzEyMzIyMzA4MjczIDUwOS4wMTU3Nzg4MzU1NDc2OCAtPiAwLjAwMjEzOTI4MDM4MTc4MjkzMTYgNi45MjU2Mjk0NDk0NTI0NzA2Cithc2luMDExOSBhc2luIDAuMTA4NTE1MTgyNzc1MDkyMjQgMS41NjEyNTEwOTA4MjE3NDc2IC0+IDAuMDU4NDkxMDE0MjQzOTAyNjIxIDEuMjI5NzA3NTcyNTYyMTMyNworCistLSB2YWx1ZXMgbmVhciBpbmZpbml0eQorYXNpbjAyMDAgYXNpbiAxLjUyMzAyNDE5OTg4MjE0OTllKzMwOCA1LjU3MDcyMjg5OTQwODQ1MjVlKzMwNyAtPiAxLjIyMDE0NDYzNzA4OTIwNjggNzEwLjM3MjgzNDg2NTM1OTY2Cithc2luMDIwMSBhc2luIDguMTMzNDMxNzY5ODY3MjIwNGUrMzA3IC05LjIyNDk0MjUxOTc4NzI0NTFlKzMwNyAtPiAwLjcyMjU5OTkxMjg0MDIwMDQyIC03MTAuMDk2MjQ1MzA0OTAyNgorYXNpbjAyMDIgYXNpbiAtOS45MTM4NTA2NjU5MjQxNzY4ZSszMDcgNi43MDE1NDQ1MjY0MzQ5OTVlKzMwNyAtPiAtMC45NzYzNzUxMTc0MjE5NDU5NCA3MTAuMDY4ODc0ODY2NzEzNzEKK2FzaW4wMjAzIGFzaW4gLTEuNDE0MTI5ODg2ODE3Mzg0MmUrMzA4IC01LjQwMTUwNTEzNDUxNDE5MWUrMzA3IC0+IC0xLjIwNTkzMTkwNTUxNjA1ODcgLTcxMC4zMDM5NjQ3ODk1NDYyOAorYXNpbjAyMDQgYXNpbiAwLjAgOS4xNjE4MDkyOTc3ODk3NDMxZSszMDcgLT4gMC4wIDcwOS44MDE4MTQ0MTA1MDU5MworYXNpbjAyMDUgYXNpbiAtMC4wIDYuODA2NDM0MjU1MTkzOTc1NWUrMzA3IC0+IC0wLjAgNzA5LjUwNDYzOTEwODUzNDg5Cithc2luMDIwNiBhc2luIDAuMCAtNi40OTk3NTE2NDU0Nzk4MjE1ZSszMDcgLT4gMC4wIC03MDkuNDU4NTM0Njk3NTE1OTIKK2FzaW4wMjA3IGFzaW4gLTAuMCAtMS42NzY3NDQ5MDUzMzQ1MjQyZSszMDggLT4gLTAuMCAtNzEwLjQwNjIxMDE4MDMwMjIKK2FzaW4wMjA4IGFzaW4gNS40MjQyNzQ5OTU3Mzc4OTE2ZSszMDcgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA3MDkuMjc3NjU0OTc4ODg5MDIKK2FzaW4wMjA5IGFzaW4gOS41MzQyMTQ1MTIxMTY0NzQ5ZSszMDcgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTcwOS44NDE2NTc1ODU5NTkwNworYXNpbjAyMTAgYXNpbiAtNy4wNDQ1Njk4MDA2MjAxODQ3ZSszMDcgMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgNzA5LjUzOTAyNzgwODcyMTM2Cithc2luMDIxMSBhc2luIC0xLjAwMTYwMjU1Njk3Njk3MDZlKzMwOCAtMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTcwOS44OTA5NTcwOTY5Nzg4MQorYXNpbjAyMTIgYXNpbiAxLjY1NTIyMDM3Nzg4NzcyMDRlKzMwOCAwLjQ4NzYxNTQzMzM2MjQ5NDkxIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA3MTAuMzkzMjg5OTgxNTM0NzQKK2FzaW4wMjEzIGFzaW4gMS4yNDg1NzEyODMwMzg0ODY5ZSszMDggLTQuMzQ4OTMxMTE2MTI3ODg5OSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTcxMC4xMTEzNTU3NDY3Nzg2Cithc2luMDIxNCBhc2luIC0xLjUxMTc4NDI4MTMzNTMxMjVlKzMwOCA1LjEyMzQ1MjY2NjEwMjQzNCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDcxMC4zMDI2NDY0MTkyMzAzMQorYXNpbjAyMTUgYXNpbiAtMS4zMTY3NjM0MzEzMDA4MDE2ZSszMDggLTAuNTI5Mzk2Nzk3OTM1Mjg5ODIgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtNzEwLjE2NDUzMjYwMjM5NzY4Cithc2luMDIxNiBhc2luIDAuODA4NDM5MjkxNzY5ODU5MDcgMS4wMTUwODUxODI3NzY3ODc2ZSszMDggLT4gNy45NjQyNTA3Mzk2MTEzODc1ZS0zMDkgNzA5LjkwNDMyODM1NTYxNjM3Cithc2luMDIxNyBhc2luIDguMjU0NDgwOTgyOTY4MDkwMSAtMS43NDIzNTQ4MTQwNTM5NDc0ZSszMDggLT4gNC43Mzc1NDMwNzQ2ODY1NzMzZS0zMDggLTcxMC40NDQ1OTMzNjI0MjE2NAorYXNpbjAyMTggYXNpbiAtNS4yNDk5MDAwMTE4ODI0Mjk1IDQuNjY1NTU3ODk3NzUxMjIxNGUrMzA3IC0+IC0xLjEyNTI0NTkyNDkxMTMyOTJlLTMwNyA3MDkuMTI2OTc4MTQ5MTEwMworYXNpbjAyMTkgYXNpbiAtNS45OTA0NzgyNzYwODMzNDMzIC00LjczMTU2ODkzMTQ3ODExNjNlKzMwNyAtPiAtMS4yNjYwNjU5NDE5Mzk0NjM3ZS0zMDcgLTcwOS4xNDEwMjc1NzUyMjMxMgorCistLSBzcGVjaWFsIHZhbHVlcworYXNpbjEwMDAgYXNpbiAtMC4wIDAuMCAtPiAtMC4wIDAuMAorYXNpbjEwMDEgYXNpbiAwLjAgMC4wIC0+IDAuMCAwLjAKK2FzaW4xMDAyIGFzaW4gLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorYXNpbjEwMDMgYXNpbiAwLjAgLTAuMCAtPiAwLjAgLTAuMAorYXNpbjEwMDQgYXNpbiAtaW5mIDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYXNpbjEwMDUgYXNpbiAtaW5mIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYXNpbjEwMDYgYXNpbiBuYW4gMC4wIC0+IG5hbiBuYW4KK2FzaW4xMDA3IGFzaW4gbmFuIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCithc2luMTAwOCBhc2luIC0wLjAgaW5mIC0+IC0wLjAgaW5mCithc2luMTAwOSBhc2luIC0yLjI5OTk5OTk5OTk5OTk5OTggaW5mIC0+IC0wLjAgaW5mCithc2luMTAxMCBhc2luIC1pbmYgaW5mIC0+IC0wLjc4NTM5ODE2MzM5NzQ0ODI4IGluZgorYXNpbjEwMTEgYXNpbiBuYW4gaW5mIC0+IG5hbiBpbmYKK2FzaW4xMDEyIGFzaW4gLTAuMCBuYW4gLT4gLTAuMCBuYW4KK2FzaW4xMDEzIGFzaW4gLTIuMjk5OTk5OTk5OTk5OTk5OCBuYW4gLT4gbmFuIG5hbgorYXNpbjEwMTQgYXNpbiAtaW5mIG5hbiAtPiBuYW4gaW5mIGlnbm9yZS1pbWFnLXNpZ24KK2FzaW4xMDE1IGFzaW4gbmFuIG5hbiAtPiBuYW4gbmFuCithc2luMTAxNiBhc2luIGluZiAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYXNpbjEwMTcgYXNpbiBpbmYgMi4yOTk5OTk5OTk5OTk5OTk4IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiBpbmYKK2FzaW4xMDE4IGFzaW4gMC4wIGluZiAtPiAwLjAgaW5mCithc2luMTAxOSBhc2luIDIuMjk5OTk5OTk5OTk5OTk5OCBpbmYgLT4gMC4wIGluZgorYXNpbjEwMjAgYXNpbiBpbmYgaW5mIC0+IDAuNzg1Mzk4MTYzMzk3NDQ4MjggaW5mCithc2luMTAyMSBhc2luIDAuMCBuYW4gLT4gMC4wIG5hbgorYXNpbjEwMjIgYXNpbiAyLjI5OTk5OTk5OTk5OTk5OTggbmFuIC0+IG5hbiBuYW4KK2FzaW4xMDIzIGFzaW4gaW5mIG5hbiAtPiBuYW4gaW5mIGlnbm9yZS1pbWFnLXNpZ24KK2FzaW4xMDI0IGFzaW4gaW5mIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2FzaW4xMDI1IGFzaW4gaW5mIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2FzaW4xMDI2IGFzaW4gbmFuIC0wLjAgLT4gbmFuIG5hbgorYXNpbjEwMjcgYXNpbiBuYW4gLTIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCithc2luMTAyOCBhc2luIDAuMCAtaW5mIC0+IDAuMCAtaW5mCithc2luMTAyOSBhc2luIDIuMjk5OTk5OTk5OTk5OTk5OCAtaW5mIC0+IDAuMCAtaW5mCithc2luMTAzMCBhc2luIGluZiAtaW5mIC0+IDAuNzg1Mzk4MTYzMzk3NDQ4MjggLWluZgorYXNpbjEwMzEgYXNpbiBuYW4gLWluZiAtPiBuYW4gLWluZgorYXNpbjEwMzIgYXNpbiAtaW5mIC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtaW5mCithc2luMTAzMyBhc2luIC1pbmYgLTIuMjk5OTk5OTk5OTk5OTk5OCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2FzaW4xMDM0IGFzaW4gLTAuMCAtaW5mIC0+IC0wLjAgLWluZgorYXNpbjEwMzUgYXNpbiAtMi4yOTk5OTk5OTk5OTk5OTk4IC1pbmYgLT4gLTAuMCAtaW5mCithc2luMTAzNiBhc2luIC1pbmYgLWluZiAtPiAtMC43ODUzOTgxNjMzOTc0NDgyOCAtaW5mCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBhc2luaDogSW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworYXNpbmgwMDAwIGFzaW5oIDAuMCAwLjAgLT4gMC4wIDAuMAorYXNpbmgwMDAxIGFzaW5oIDAuMCAtMC4wIC0+IDAuMCAtMC4wCithc2luaDAwMDIgYXNpbmggLTAuMCAwLjAgLT4gLTAuMCAwLjAKK2FzaW5oMDAwMyBhc2luaCAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCisKKy0tIGJyYW5jaCBwb2ludHM6ICsvLWkKK2FzaW5oMDAxMCBhc2luaCAwLjAgMS4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDAxMSBhc2luaCAwLjAgLTEuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDEyIGFzaW5oIC0wLjAgMS4wIC0+IC0wLjAgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwMTMgYXNpbmggLTAuMCAtMS4wIC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiBpbWFnaW5hcnkgYXhpcworYXNpbmgwMDIwIGFzaW5oIDAuMCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gMC4wIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNAorYXNpbmgwMDIxIGFzaW5oIC0wLjAgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0+IC0wLjAgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0Cithc2luaDAwMjIgYXNpbmggMC4wIC0xZS0zMDUgLT4gMC4wIC0xZS0zMDUKK2FzaW5oMDAyMyBhc2luaCAtMC4wIC0xZS0zMDUgLT4gLTAuMCAtMWUtMzA1Cithc2luaDAwMjQgYXNpbmggMC4wIC0xZS0xNTAgLT4gMC4wIC0xZS0xNTAKK2FzaW5oMDAyNSBhc2luaCAtMC4wIC0xZS0xNTAgLT4gLTAuMCAtMWUtMTUwCithc2luaDAwMjYgYXNpbmggMC4wIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IDAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXNpbmgwMDI3IGFzaW5oIC0wLjAgLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLT4gLTAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXNpbmgwMDI4IGFzaW5oIDAuMCAtMC4wMDEgLT4gMC4wIC0wLjAwMTAwMDAwMDE2NjY2Njc0MTYKK2FzaW5oMDAyOSBhc2luaCAtMC4wIC0wLjAwMSAtPiAtMC4wIC0wLjAwMTAwMDAwMDE2NjY2Njc0MTYKK2FzaW5oMDAzMCBhc2luaCAwLjAgLTAuNTc4OTk5OTk5OTk5OTk5OTYgLT4gMC4wIC0wLjYxNzUwMTY1NDgxNzE3MDAxCithc2luaDAwMzEgYXNpbmggLTAuMCAtMC41Nzg5OTk5OTk5OTk5OTk5NiAtPiAtMC4wIC0wLjYxNzUwMTY1NDgxNzE3MDAxCithc2luaDAwMzIgYXNpbmggMC4wIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0+IDAuMCAtMS41NzA3OTYzMTE4OTM3MzU0Cithc2luaDAwMzMgYXNpbmggLTAuMCAtMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAtMC4wIC0xLjU3MDc5NjMxMTg5MzczNTQKK2FzaW5oMDAzNCBhc2luaCAwLjAgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiAyLjEwNzM0MjQyNTU0NDcwMTRlLTA4IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDAzNSBhc2luaCAtMC4wIC0xLjAwMDAwMDAwMDAwMDAwMDIgLT4gLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDM2IGFzaW5oIDAuMCAtMS4wMDA5OTk5OTk5OTk5OTk5IC0+IDAuMDQ0NzE3NjMzNjA4MzA2ODQ5IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDAzNyBhc2luaCAtMC4wIC0xLjAwMDk5OTk5OTk5OTk5OTkgLT4gLTAuMDQ0NzE3NjMzNjA4MzA2ODQ5IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDAzOCBhc2luaCAwLjAgLTIuMCAtPiAxLjMxNjk1Nzg5NjkyNDgxNjggLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDM5IGFzaW5oIC0wLjAgLTIuMCAtPiAtMS4zMTY5NTc4OTY5MjQ4MTY4IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA0MCBhc2luaCAwLjAgLTIwLjAgLT4gMy42ODgyNTM4NjczNjEyOTY2IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA0MSBhc2luaCAtMC4wIC0yMC4wIC0+IC0zLjY4ODI1Mzg2NzM2MTI5NjYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDQyIGFzaW5oIDAuMCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtPiAzNy41MzQ1MDg2Njg0NjQ2NzQgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDQzIGFzaW5oIC0wLjAgLTEwMDAwMDAwMDAwMDAwMDAwLjAgLT4gLTM3LjUzNDUwODY2ODQ2NDY3NCAtMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNDQgYXNpbmggMC4wIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtPiAzNDYuMDgwOTExMTI5NjY2NzkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDQ1IGFzaW5oIC0wLjAgLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0+IC0zNDYuMDgwOTExMTI5NjY2NzkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDQ2IGFzaW5oIDAuMCAtMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLT4gNjg5LjE2NjA4OTk4NTc3OTY1IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA0NyBhc2luaCAtMC4wIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAtNjg5LjE2NjA4OTk4NTc3OTY1IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA0OCBhc2luaCAwLjAgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gMC4wIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0Cithc2luaDAwNDkgYXNpbmggLTAuMCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtPiAtMC4wIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0Cithc2luaDAwNTAgYXNpbmggMC4wIDFlLTMwNSAtPiAwLjAgMWUtMzA1Cithc2luaDAwNTEgYXNpbmggLTAuMCAxZS0zMDUgLT4gLTAuMCAxZS0zMDUKK2FzaW5oMDA1MiBhc2luaCAwLjAgMWUtMTUwIC0+IDAuMCAxZS0xNTAKK2FzaW5oMDA1MyBhc2luaCAtMC4wIDFlLTE1MCAtPiAtMC4wIDFlLTE1MAorYXNpbmgwMDU0IGFzaW5oIDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3Cithc2luaDAwNTUgYXNpbmggLTAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IC0wLjAgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXNpbmgwMDU2IGFzaW5oIDAuMCAwLjAwMSAtPiAwLjAgMC4wMDEwMDAwMDAxNjY2NjY3NDE2Cithc2luaDAwNTcgYXNpbmggLTAuMCAwLjAwMSAtPiAtMC4wIDAuMDAxMDAwMDAwMTY2NjY2NzQxNgorYXNpbmgwMDU4IGFzaW5oIDAuMCAwLjU3ODk5OTk5OTk5OTk5OTk2IC0+IDAuMCAwLjYxNzUwMTY1NDgxNzE3MDAxCithc2luaDAwNTkgYXNpbmggLTAuMCAwLjU3ODk5OTk5OTk5OTk5OTk2IC0+IC0wLjAgMC42MTc1MDE2NTQ4MTcxNzAwMQorYXNpbmgwMDYwIGFzaW5oIDAuMCAwLjk5OTk5OTk5OTk5OTk5OTg5IC0+IDAuMCAxLjU3MDc5NjMxMTg5MzczNTQKK2FzaW5oMDA2MSBhc2luaCAtMC4wIDAuOTk5OTk5OTk5OTk5OTk5ODkgLT4gLTAuMCAxLjU3MDc5NjMxMTg5MzczNTQKK2FzaW5oMDA2MiBhc2luaCAwLjAgMS4wMDAwMDAwMDAwMDAwMDAyIC0+IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjMgYXNpbmggLTAuMCAxLjAwMDAwMDAwMDAwMDAwMDIgLT4gLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjQgYXNpbmggMC4wIDEuMDAwOTk5OTk5OTk5OTk5OSAtPiAwLjA0NDcxNzYzMzYwODMwNjg0OSAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA2NSBhc2luaCAtMC4wIDEuMDAwOTk5OTk5OTk5OTk5OSAtPiAtMC4wNDQ3MTc2MzM2MDgzMDY4NDkgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjYgYXNpbmggMC4wIDIuMCAtPiAxLjMxNjk1Nzg5NjkyNDgxNjggMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjcgYXNpbmggLTAuMCAyLjAgLT4gLTEuMzE2OTU3ODk2OTI0ODE2OCAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA2OCBhc2luaCAwLjAgMjAuMCAtPiAzLjY4ODI1Mzg2NzM2MTI5NjYgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjkgYXNpbmggLTAuMCAyMC4wIC0+IC0zLjY4ODI1Mzg2NzM2MTI5NjYgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNzAgYXNpbmggMC4wIDEwMDAwMDAwMDAwMDAwMDAwLjAgLT4gMzcuNTM0NTA4NjY4NDY0Njc0IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDcxIGFzaW5oIC0wLjAgMTAwMDAwMDAwMDAwMDAwMDAuMCAtPiAtMzcuNTM0NTA4NjY4NDY0Njc0IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDcyIGFzaW5oIDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtPiAzNDYuMDgwOTExMTI5NjY2NzkgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNzMgYXNpbmggLTAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtPiAtMzQ2LjA4MDkxMTEyOTY2Njc5IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDc0IGFzaW5oIDAuMCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiA2ODkuMTY2MDg5OTg1Nzc5NjUgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNzUgYXNpbmggLTAuMCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAtNjg5LjE2NjA4OTk4NTc3OTY1IDEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSByYW5kb20gaW5wdXRzCithc2luaDAxMDAgYXNpbmggLTAuNTk0NjQwMjg1MzcxMDQyMyAtMC4wNDQ1MDY1NDg5MTAwMDAxNDUgLT4gLTAuNTY0NTk3NzUzOTI2NTMwMjIgLTAuMDM4MjU2MjIxNDQxNTM2MzU2Cithc2luaDAxMDEgYXNpbmggLTAuMTkzNTM5NTgwNDYxODA5MTYgLTAuMDE3NDg5NjI0NzkzMTkzNDU0IC0+IC0wLjE5MjM3OTI2ODA0MTk2NjUxIC0wLjAxNzE3MTc0MTg5NTMzNjc5MgorYXNpbmgwMTAyIGFzaW5oIC0wLjAzMzExNzU4NTEzODk1NTg5MyAtOC41MjU2NDE0MDE1OTMzNzU3IC0+IC0yLjgzMjc3NTgzNDg2NTA5NjkgLTEuNTY2ODg0ODc5MTA5MjQxMQorYXNpbmgwMTAzIGFzaW5oIC0xLjUxODQwNDMxODQwMzU3MTYgLTAuNzM0OTEyNDUzMzkwNzMyNzUgLT4gLTEuMjcxNTg5MTQxOTc2NDAwNSAtMC4zOTIwNDYyNDQwODU0MjM1NQorYXNpbmgwMTA0IGFzaW5oIC0wLjYwNzE2MTIwMjcxMjA4ODE4IC0wLjI4OTAwNzQzOTU4NDM2NTQyIC0+IC0wLjU5MTE5Mjk5NDIxMTg3MjMyIC0wLjI0NzQ1OTMxNjc4MTE4MTM1Cithc2luaDAxMDUgYXNpbmggLTAuMDIzNzE3Nzg2NTExMjQyOSAyLjg4MzI2MDEwNTIxNjYzMTMgLT4gLTEuNzIwNTgyMDc3MjQxMzIzNiAxLjU2MjAyNjE3MDI5NjMwOTQKK2FzaW5oMDEwNiBhc2luaCAtMi4zOTA2ODEyMzQyNzQzOTc5IDIuNjM0OTIxNjg0ODU3NDAxMyAtPiAtMS45NjA5NjM2MjQ5NDQ1MTI0IDAuODE0MjE0MjY2MDU3NDcwNgorYXNpbmgwMTA3IGFzaW5oIC0wLjAwMjc2MDUwMTk3ODc2MjA1MTcgMTgzLjg1NTg4NDc2NTUwNTU1IC0+IC01LjkwNzI5MjAwMDU0NDUwNjYgMS41NzA3ODEzMTIwODQ3ODcxCithc2luaDAxMDggYXNpbmggLTAuOTkwODM2NjExNjQ0MDQ3MTMgMC4wMjgwMDY3OTcwNTE2MTc2NDggLT4gLTAuODc1MDE4NTI1MTI4Mzk5NSAwLjAxOTg5NDA5OTYxNTk5NDY1MworYXNpbmgwMTA5IGFzaW5oIC0zLjAzNjI5NTE5Mzc5ODYzOTMgMC44NjM3NzI2Njc1ODUwNDg2NyAtPiAtMS44NjM2MDMwNzE0Njg1MjIxIDAuMjY0NzUwNTg4NTk5NTAxNjgKK2FzaW5oMDExMCBhc2luaCAwLjM0NDM4NDY0NTM2MTUyNzY5IC0wLjcxNjAzNzkwMTc0ODg1MDI5IC0+IDAuNDM5ODU0MTU2OTA3MzQxNjQgLTAuNzEwMTUwMzc0MDkyOTQzMjQKK2FzaW5oMDExMSBhc2luaCA0LjQ5MjUxMjQ0MTM4NzYyNTYgLTYwNjA0NTk1MzUyLjg3MTYxMyAtPiAyNS41MjA3ODM3Mzg2MTIwNzggLTEuNTcwNzk2MzI2NzIwNzY4MworYXNpbmgwMTEyIGFzaW5oIDIuMzIxMzk5MTQyODE3MDMzNyAtNy41NDU5NjY3MDA3MzA3MjU4IC0+IDIuNzU2MDQ2NDk5MzQ1MTY0MyAtMS4yNzAwNzMyMTA4NTYxMTcKK2FzaW5oMDExMyBhc2luaCAwLjIxMjkxOTM5NzQxNjgyMDI4IC0xLjI3MjA0Mjg4MTQ3ODQ0MDggLT4gMC43NzI3NTA4ODEzNzMzODI2NiAtMS4zMTgyMDk5MjUwODk2ODk1Cithc2luaDAxMTQgYXNpbmggNi42NDQ3MzU5Mzc5NDU1OTU3IC0wLjk3MTk2MTkxNjY2OTQ2OTk2IC0+IDIuNjAyODMwNjk1MTM5NjcyIC0wLjE0MzY4MjQ3NDEyMzE5OTY1Cithc2luaDAxMTUgYXNpbmggNy4xMzI2MjU2NjU1MDgzNzQ2IDIuMTUxNjM2MDQ1MjcwNjg1NyAtPiAyLjcwNTExNDYzNzQzNjcyMTIgMC4yOTA1MTcwMTY2OTcyNzU4MQorYXNpbmgwMTE2IGFzaW5oIDAuMTg4NDY1NTA5MDUwNjM0NDIgMy40NzA1MzQ4NTg1MzM5ODMyIC0+IDEuOTE3Njk3ODc1Nzk5Mjk2IDEuNTE0MTU1NTkzMzQ3OTI0Cithc2luaDAxMTcgYXNpbmggMC4xOTA2NTA3NTMwMzI4MTU5OCAwLjI2MjE2ODE0NTQ4MjIyMDEyIC0+IDAuMTk2MDMwNTA3ODU5MzI0NzQgMC4yNjAxMzQyMjgwOTYxNDExNworYXNpbmgwMTE4IGFzaW5oIDIuMDI0MjAwNDY2NTczOTcxOSAwLjcwNTEwMjgxNjQ3NDk1Nzg3IC0+IDEuNDk3MDM2NjIxMjg5NjAwMiAwLjMwNTI2MDA3MjAwNDgxNDUzCithc2luaDAxMTkgYXNpbmggMzcuMzM2NTk2NDYxNTc2MDU3IDcxNy4yOTE1NzM5MTY3ODIzNCAtPiA3LjI2OTk4MTk5Nzk0NTI5NCAxLjUxODc5MTAyMTk1NzYwMzMKKworLS0gdmFsdWVzIG5lYXIgaW5maW5pdHkKK2FzaW5oMDIwMCBhc2luaCAxLjA3NjA1MTc1MDA4NzQ1NDFlKzMwOCAxLjE0OTc3ODYyNDEyNDAxNjdlKzMwOCAtPiA3MTAuMzQzNDYwNTU2NTE4MTUgMC44MTg1MDkzNjk2MTc5MzQ3NQorYXNpbmgwMjAxIGFzaW5oIDEuMTc4NDgzOTMyODg0NTUyOWUrMzA4IC0xLjY0Nzg0Mjk1ODY3MTY2MzhlKzMwOCAtPiA3MTAuNTk1MzYyNTU3ODM2NzggLTAuOTQ5OTYzMTE3MzU2MDc2OTcKK2FzaW5oMDIwMiBhc2luaCAtNC44Nzc3NjgyMjQ4OTA5MTkzZSszMDcgMS40MTAzNzM2MjE3NTM4NDc0ZSszMDggLT4gLTcxMC4yODk3MDE0NzM3Njk5MiAxLjIzNzgyMzk1MTkwOTY0NDMKK2FzaW5oMDIwMyBhc2luaCAtMS4yODMyNDc4OTAzMjMzMTA4ZSszMDggLTEuNTczMjM5MjYxMzE1NTY5OGUrMzA4IC0+IC03MTAuNTk3NTAxNjQyOTA3NDUgLTAuODg2NTcxODE0MzkzMjI0NTIKK2FzaW5oMDIwNCBhc2luaCAwLjAgNi44NDMxMzgzODU2MzQ1MzcyZSszMDcgLT4gNzA5LjUxMDAxNzE4NDQ0NjA0IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMjA1IGFzaW5oIC0wLjAgOC42MDE4MjI0MzIyMzgwNTFlKzMwNyAtPiAtNzA5LjczODc0NDgyMTI2Njg5IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMjA2IGFzaW5oIDAuMCAtNS41Njk4Mzk2MDY3MzAzNzgyZSszMDcgLT4gNzA5LjMwNDEzNjk4NzMzNzQyIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDIwNyBhc2luaCAtMC4wIC03LjE1MDc3Nzc3MzQ2MjE4MDRlKzMwNyAtPiAtNzA5LjU1Mzk5MTg2MDAyNzA1IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDIwOCBhc2luaCAxLjYwMjUxMzYxMTAwMTkzNDllKzMwOCAwLjAgLT4gNzEwLjM2MDkyOTIyNjEwNzYgMC4wCithc2luaDAyMDkgYXNpbmggMS4zOTI3ODE5ODU4MjM5MTE0ZSszMDggLTAuMCAtPiA3MTAuMjIwNjU4OTk4MzI4OTkgLTAuMAorYXNpbmgwMjEwIGFzaW5oIC02LjA0NDI5OTQwNTYyMTA5OTVlKzMwNyAwLjAgLT4gLTcwOS4zODU4ODYzMTA1NzYyMSAwLjAKK2FzaW5oMDIxMSBhc2luaCAtMS4yNzc1MjcxOTc5MDQyNjM0ZSszMDggLTAuMCAtPiAtNzEwLjEzNDI4MjE1NTUzOTcyIC0wLjAKK2FzaW5oMDIxMiBhc2luaCAxLjA2ODc0OTYyNjAyNjg0ODllKzMwOCAxLjAyNTU2MTU2OTk0NzY5NjEgLT4gNzA5Ljk1NTg0NTIxNDA3ODQxIDkuNTk1OTAxMDg4MjY3OTA5M2UtMzA5Cithc2luaDAyMTMgYXNpbmggMS4wMDUwOTY3MzMzMzcwOTYyZSszMDggLTAuODc2Njg5NzAxMTczMzM0MzMgLT4gNzA5Ljg5NDQzOTYxMTY4MTgzIC04LjcyMjQ0MTA1NTYyNDI4ODJlLTMwOQorYXNpbmgwMjE0IGFzaW5oIC01LjcxNjE0NTI4MTQ4NjIzOTJlKzMwNyA4LjIzNzc4MDg0MTM0NTAxMjIgLT4gLTcwOS4zMzAwNjU0MDYxMTE2NiAxLjQ0MTE0MjY2NDQ1MDExMTZlLTMwNworYXNpbmgwMjE1IGFzaW5oIC04LjIwMDkwNDA3Mjc2NTMzMTVlKzMwNyAtNi40MDc0MDk1MjY2NTQ5NzYgLT4gLTcwOS42OTEwMTUxMzA3MDEwOSAtNy44MTMwNTI2NDYxNTEwMDg4ZS0zMDgKK2FzaW5oMDIxNiBhc2luaCA2LjQyMzkzNjg0OTY0ODM5ODIgMS42MzY1OTkwODIxNTUxNDI3ZSszMDggLT4gNzEwLjM4MTk3NjE4MTAxMjg3IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMjE3IGFzaW5oIDUuNDcyOTExMTQyMzMxNTg4MiAtMS4xMjI3MjM3NDM4MTQ0MjExZSszMDggLT4gNzEwLjAwNTExMzQ2OTgzNTQ2IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDIxOCBhc2luaCAtOC4zNDU1ODE4Mjk3NDEyNzIzIDEuNDQzMTcyMDIwMTgyMDE5ZSszMDggLT4gLTcxMC4yNTYxOTkzMDU1MTgxOCAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDIxOSBhc2luaCAtMi42MDQ5NzI2MjMwMzcyNDQxIC0xLjc5NTIyOTExNDQwMjI3MDJlKzMwOCAtPiAtNzEwLjQ3NDQ4ODQ3Njg1NjQ0IC0xLjU3MDc5NjMyNjc5NDg5NjYKKworLS0gdmFsdWVzIG5lYXIgMAorYXNpbmgwMjIwIGFzaW5oIDEuMjk0MDExMzMzOTY2NDA4OGUtMzE0IDYuOTE2OTE5MDQxNzc3NDUxNmUtMzIzIC0+IDEuMjk0MDExMzMzOTY2NDA4OGUtMzE0IDYuOTE2OTE5MDQxNzc3NDUxNmUtMzIzCithc2luaDAyMjEgYXNpbmggMi4zODQ4NDc4ODYzODc0NjQ5ZS0zMTUgLTMuMTkwNzY1NTAyNTcxNzcxN2UtMzEwIC0+IDIuMzg0ODQ3ODg2Mzg3NDY0OWUtMzE1IC0zLjE5MDc2NTUwMjU3MTc3MTdlLTMxMAorYXNpbmgwMjIyIGFzaW5oIC0zLjAwOTc2NDM2Nzk2NDE2MjJlLTMxNiA0LjY5MzYyMzYzNTQ5MTg0MjJlLTMyMiAtPiAtMy4wMDk3NjQzNjc5NjQxNjIyZS0zMTYgNC42OTM2MjM2MzU0OTE4NDIyZS0zMjIKK2FzaW5oMDIyMyBhc2luaCAtMS43ODc5OTcwODc3NTU3NTFlLTMwOCAtOC41NjE5NjIyODM0OTAyMzQxZS0zMTAgLT4gLTEuNzg3OTk3MDg3NzU1NzUxZS0zMDggLTguNTYxOTYyMjgzNDkwMjM0MWUtMzEwCithc2luaDAyMjQgYXNpbmggMC4wIDEuMjQ5MTQzMzQ0ODQyNzMyNWUtMzE0IC0+IDAuMCAxLjI0OTE0MzM0NDg0MjczMjVlLTMxNAorYXNpbmgwMjI1IGFzaW5oIC0wLjAgMi41MDI0MDcyMTU0NTM4MDYyZS0zMDggLT4gLTAuMCAyLjUwMjQwNzIxNTQ1MzgwNjJlLTMwOAorYXNpbmgwMjI2IGFzaW5oIDAuMCAtMi45NjQzOTM4NzUwNDc0NzkzZS0zMjMgLT4gMC4wIC0yLjk2NDM5Mzg3NTA0NzQ3OTNlLTMyMworYXNpbmgwMjI3IGFzaW5oIC0wLjAgLTIuOTM5NjkwNTkyNzU1NDE2OWUtMzIwIC0+IC0wLjAgLTIuOTM5NjkwNTkyNzU1NDE2OWUtMzIwCithc2luaDAyMjggYXNpbmggNS42NDA0MjkzMDAyOTM1OWUtMzE3IDAuMCAtPiA1LjY0MDQyOTMwMDI5MzU5ZS0zMTcgMC4wCithc2luaDAyMjkgYXNpbmggMy4zODMzOTExODY2NTk2MDY4ZS0zMTggLTAuMCAtPiAzLjM4MzM5MTE4NjY1OTYwNjhlLTMxOCAtMC4wCithc2luaDAyMzAgYXNpbmggLTQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0IDAuMCAtPiAtNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgMC4wCithc2luaDAyMzEgYXNpbmggLTIuMjIxMTM3OTIyNzk5NDg0NWUtMzA4IC0wLjAgLT4gLTIuMjIxMTM3OTIyNzk5NDg0NWUtMzA4IC0wLjAKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2FzaW5oMTAwMCBhc2luaCAwLjAgMC4wIC0+IDAuMCAwLjAKK2FzaW5oMTAwMSBhc2luaCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorYXNpbmgxMDAyIGFzaW5oIC0wLjAgMC4wIC0+IC0wLjAgMC4wCithc2luaDEwMDMgYXNpbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorYXNpbmgxMDA0IGFzaW5oIDAuMCBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgxMDA1IGFzaW5oIDIuMyBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgxMDA2IGFzaW5oIDAuMCBuYW4gLT4gbmFuIG5hbgorYXNpbmgxMDA3IGFzaW5oIDIuMyBuYW4gLT4gbmFuIG5hbgorYXNpbmgxMDA4IGFzaW5oIGluZiAwLjAgLT4gaW5mIDAuMAorYXNpbmgxMDA5IGFzaW5oIGluZiAyLjMgLT4gaW5mIDAuMAorYXNpbmgxMDEwIGFzaW5oIGluZiBpbmYgLT4gaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjgKK2FzaW5oMTAxMSBhc2luaCBpbmYgbmFuIC0+IGluZiBuYW4KK2FzaW5oMTAxMiBhc2luaCBuYW4gMC4wIC0+IG5hbiAwLjAKK2FzaW5oMTAxMyBhc2luaCBuYW4gMi4zIC0+IG5hbiBuYW4KK2FzaW5oMTAxNCBhc2luaCBuYW4gaW5mIC0+IGluZiBuYW4gICAgICAgICAgICAgICAgICAgICAgaWdub3JlLXJlYWwtc2lnbgorYXNpbmgxMDE1IGFzaW5oIG5hbiBuYW4gLT4gbmFuIG5hbgorYXNpbmgxMDE2IGFzaW5oIDAuMCAtaW5mIC0+IGluZiAtMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDEwMTcgYXNpbmggMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMTAxOCBhc2luaCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorYXNpbmgxMDE5IGFzaW5oIGluZiAtMi4zIC0+IGluZiAtMC4wCithc2luaDEwMjAgYXNpbmggaW5mIC1pbmYgLT4gaW5mIC0wLjc4NTM5ODE2MzM5NzQ0ODI4Cithc2luaDEwMjEgYXNpbmggbmFuIC0wLjAgLT4gbmFuIC0wLjAKK2FzaW5oMTAyMiBhc2luaCBuYW4gLTIuMyAtPiBuYW4gbmFuCithc2luaDEwMjMgYXNpbmggbmFuIC1pbmYgLT4gaW5mIG5hbiAgICAgICAgICAgICAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK2FzaW5oMTAyNCBhc2luaCAtMC4wIC1pbmYgLT4gLWluZiAtMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDEwMjUgYXNpbmggLTIuMyAtaW5mIC0+IC1pbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgxMDI2IGFzaW5oIC0wLjAgbmFuIC0+IG5hbiBuYW4KK2FzaW5oMTAyNyBhc2luaCAtMi4zIG5hbiAtPiBuYW4gbmFuCithc2luaDEwMjggYXNpbmggLWluZiAtMC4wIC0+IC1pbmYgLTAuMAorYXNpbmgxMDI5IGFzaW5oIC1pbmYgLTIuMyAtPiAtaW5mIC0wLjAKK2FzaW5oMTAzMCBhc2luaCAtaW5mIC1pbmYgLT4gLWluZiAtMC43ODUzOTgxNjMzOTc0NDgyOAorYXNpbmgxMDMxIGFzaW5oIC1pbmYgbmFuIC0+IC1pbmYgbmFuCithc2luaDEwMzIgYXNpbmggLTAuMCBpbmYgLT4gLWluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMTAzMyBhc2luaCAtMi4zIGluZiAtPiAtaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgxMDM0IGFzaW5oIC1pbmYgMC4wIC0+IC1pbmYgMC4wCithc2luaDEwMzUgYXNpbmggLWluZiAyLjMgLT4gLWluZiAwLjAKK2FzaW5oMTAzNiBhc2luaCAtaW5mIGluZiAtPiAtaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjgKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGF0YW46IEludmVyc2UgdGFuZ2VudCAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHplcm9zCithdGFuMDAwMCBhdGFuIDAuMCAwLjAgLT4gMC4wIDAuMAorYXRhbjAwMDEgYXRhbiAwLjAgLTAuMCAtPiAwLjAgLTAuMAorYXRhbjAwMDIgYXRhbiAtMC4wIDAuMCAtPiAtMC4wIDAuMAorYXRhbjAwMDMgYXRhbiAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCisKKy0tIHZhbHVlcyBhbG9uZyBib3RoIHNpZGVzIG9mIGltYWdpbmFyeSBheGlzCithdGFuMDAxMCBhdGFuIDAuMCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gMC4wIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNAorYXRhbjAwMTEgYXRhbiAtMC4wIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtPiAtMC4wIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNAorYXRhbjAwMTIgYXRhbiAwLjAgLTFlLTMwNSAtPiAwLjAgLTFlLTMwNQorYXRhbjAwMTMgYXRhbiAtMC4wIC0xZS0zMDUgLT4gLTAuMCAtMWUtMzA1CithdGFuMDAxNCBhdGFuIDAuMCAtMWUtMTUwIC0+IDAuMCAtMWUtMTUwCithdGFuMDAxNSBhdGFuIC0wLjAgLTFlLTE1MCAtPiAtMC4wIC0xZS0xNTAKK2F0YW4wMDE2IGF0YW4gMC4wIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IDAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXRhbjAwMTcgYXRhbiAtMC4wIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IC0wLjAgLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcKK2F0YW4wMDE4IGF0YW4gMC4wIC0wLjAwMSAtPiAwLjAgLTAuMDAxMDAwMDAwMzMzMzMzNTMzMworYXRhbjAwMTkgYXRhbiAtMC4wIC0wLjAwMSAtPiAtMC4wIC0wLjAwMTAwMDAwMDMzMzMzMzUzMzMKK2F0YW4wMDIwIGF0YW4gMC4wIC0wLjU3ODk5OTk5OTk5OTk5OTk2IC0+IDAuMCAtMC42NjA5NTcwOTAyODY2MzAzCithdGFuMDAyMSBhdGFuIC0wLjAgLTAuNTc4OTk5OTk5OTk5OTk5OTYgLT4gLTAuMCAtMC42NjA5NTcwOTAyODY2MzAzCithdGFuMDAyMiBhdGFuIDAuMCAtMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAwLjAgLTE4LjcxNDk3Mzg3NTExODUyNAorYXRhbjAwMjMgYXRhbiAtMC4wIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0+IC0wLjAgLTE4LjcxNDk3Mzg3NTExODUyNAorYXRhbjAwMjQgYXRhbiAwLjAgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTE4LjM2ODQwMDI4NDgzODU1CithdGFuMDAyNSBhdGFuIC0wLjAgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0xOC4zNjg0MDAyODQ4Mzg1NQorYXRhbjAwMjYgYXRhbiAwLjAgLTEuMDAwOTk5OTk5OTk5OTk5OSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTMuODAwNzAxMTY3MjkxOTIxOAorYXRhbjAwMjcgYXRhbiAtMC4wIC0xLjAwMDk5OTk5OTk5OTk5OTkgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMy44MDA3MDExNjcyOTE5MjE4CithdGFuMDAyOCBhdGFuIDAuMCAtMi4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC41NDkzMDYxNDQzMzQwNTQ4OQorYXRhbjAwMjkgYXRhbiAtMC4wIC0yLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMC41NDkzMDYxNDQzMzQwNTQ4OQorYXRhbjAwMzAgYXRhbiAwLjAgLTIwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjA1MDA0MTcyOTI3ODQ5MTI2NQorYXRhbjAwMzEgYXRhbiAtMC4wIC0yMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTAuMDUwMDQxNzI5Mjc4NDkxMjY1CithdGFuMDAzMiBhdGFuIDAuMCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcKK2F0YW4wMDMzIGF0YW4gLTAuMCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3CithdGFuMDAzNCBhdGFuIDAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0xZS0xNTAKK2F0YW4wMDM1IGF0YW4gLTAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMWUtMTUwCithdGFuMDAzNiBhdGFuIDAuMCAtMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC05Ljk5OTk5OTk5OTk5OTk5OTllLTMwMAorYXRhbjAwMzcgYXRhbiAtMC4wIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC05Ljk5OTk5OTk5OTk5OTk5OTllLTMwMAorYXRhbjAwMzggYXRhbiAwLjAgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gMC4wIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0CithdGFuMDAzOSBhdGFuIC0wLjAgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gLTAuMCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNAorYXRhbjAwNDAgYXRhbiAwLjAgMWUtMzA1IC0+IDAuMCAxZS0zMDUKK2F0YW4wMDQxIGF0YW4gLTAuMCAxZS0zMDUgLT4gLTAuMCAxZS0zMDUKK2F0YW4wMDQyIGF0YW4gMC4wIDFlLTE1MCAtPiAwLjAgMWUtMTUwCithdGFuMDA0MyBhdGFuIC0wLjAgMWUtMTUwIC0+IC0wLjAgMWUtMTUwCithdGFuMDA0NCBhdGFuIDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3CithdGFuMDA0NSBhdGFuIC0wLjAgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtPiAtMC4wIDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcKK2F0YW4wMDQ2IGF0YW4gMC4wIDAuMDAxIC0+IDAuMCAwLjAwMTAwMDAwMDMzMzMzMzUzMzMKK2F0YW4wMDQ3IGF0YW4gLTAuMCAwLjAwMSAtPiAtMC4wIDAuMDAxMDAwMDAwMzMzMzMzNTMzMworYXRhbjAwNDggYXRhbiAwLjAgMC41Nzg5OTk5OTk5OTk5OTk5NiAtPiAwLjAgMC42NjA5NTcwOTAyODY2MzAzCithdGFuMDA0OSBhdGFuIC0wLjAgMC41Nzg5OTk5OTk5OTk5OTk5NiAtPiAtMC4wIDAuNjYwOTU3MDkwMjg2NjMwMworYXRhbjAwNTAgYXRhbiAwLjAgMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAwLjAgMTguNzE0OTczODc1MTE4NTI0CithdGFuMDA1MSBhdGFuIC0wLjAgMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAtMC4wIDE4LjcxNDk3Mzg3NTExODUyNAorYXRhbjAwNTIgYXRhbiAwLjAgMS4wMDAwMDAwMDAwMDAwMDAyIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAxOC4zNjg0MDAyODQ4Mzg1NQorYXRhbjAwNTMgYXRhbiAtMC4wIDEuMDAwMDAwMDAwMDAwMDAwMiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDE4LjM2ODQwMDI4NDgzODU1CithdGFuMDA1NCBhdGFuIDAuMCAxLjAwMDk5OTk5OTk5OTk5OTkgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDMuODAwNzAxMTY3MjkxOTIxOAorYXRhbjAwNTUgYXRhbiAtMC4wIDEuMDAwOTk5OTk5OTk5OTk5OSAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDMuODAwNzAxMTY3MjkxOTIxOAorYXRhbjAwNTYgYXRhbiAwLjAgMi4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjU0OTMwNjE0NDMzNDA1NDg5CithdGFuMDA1NyBhdGFuIC0wLjAgMi4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC41NDkzMDYxNDQzMzQwNTQ4OQorYXRhbjAwNTggYXRhbiAwLjAgMjAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wNTAwNDE3MjkyNzg0OTEyNjUKK2F0YW4wMDU5IGF0YW4gLTAuMCAyMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC4wNTAwNDE3MjkyNzg0OTEyNjUKK2F0YW4wMDYwIGF0YW4gMC4wIDEwMDAwMDAwMDAwMDAwMDAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcKK2F0YW4wMDYxIGF0YW4gLTAuMCAxMDAwMDAwMDAwMDAwMDAwMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXRhbjAwNjIgYXRhbiAwLjAgOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDFlLTE1MAorYXRhbjAwNjMgYXRhbiAtMC4wIDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMWUtMTUwCithdGFuMDA2NCBhdGFuIDAuMCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgOS45OTk5OTk5OTk5OTk5OTk5ZS0zMDAKK2F0YW4wMDY1IGF0YW4gLTAuMCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDkuOTk5OTk5OTk5OTk5OTk5OWUtMzAwCisKKy0tIHJhbmRvbSBpbnB1dHMKK2F0YW4wMTAwIGF0YW4gLTAuMzI1Mzg4NzM2NjEwNjAyMTQgLTEuNTUzMDQ2MTU1MDQxMjU3OCAtPiAtMS4zNjgyNzI4NDI3NTU0MjI3IC0wLjY5NDUxNDAxNTk4NzYyMDQxCithdGFuMDEwMSBhdGFuIC0wLjQ1ODYzMzkzNDk1MTk3OTI5IC00Nzk5LjE3NDcwOTQ5MDM1OTQgLT4gLTEuNTcwNzk2MzA2ODgyMDYyMyAtMC4wMDAyMDgzNjkxNjA1MDYzNjE0NQorYXRhbjAxMDIgYXRhbiAtOC4zMDA2OTk5Njg1OTc2MTYyIC0yLjY3ODg4OTAyNTE3OTA5MzggLT4gLTEuNDYxOTg2Mjc3MTgxMDE5OSAtMC4wMzQ4MTE2Njk2NTMzMjc4MjYKK2F0YW4wMTAzIGF0YW4gLTEuODgzNjMwNzY4Mjk4NTMxNCAtMS4xNDQxOTc2NjM4ODYxNzcxIC0+IC0xLjE4Mzk5ODQzNzA4NzE2MTIgLTAuMjA2MzA5NTYxNTczMTI3OTYKK2F0YW4wMTA0IGF0YW4gLTAuMDAwNjMyMzA0ODI0MDc0OTE2NjkgLTQuOTMxMjUyMDk2MTgyOTQ4NSAtPiAtMS41NzA3NjkyMDkzMjIzMTQ3IC0wLjIwNTYzODY3NzQzMDA4MzA0CithdGFuMDEwNSBhdGFuIC0wLjg0Mjc4MTM3MTUwMDY1OTQ2IDE3OTAxMi4zNzQ5MzE0Njk5NyAtPiAtMS41NzA3OTYzMjY3Njg1OTY5IDUuNTg2MjA1OTgzNjQyNTI3MmUtMDYKK2F0YW4wMTA2IGF0YW4gLTAuOTU0ODc4NTM5ODQwNDkyODcgMTQuMzExMzM0NTM5ODg2MTc3IC0+IC0xLjU2NjEzMjI4NTk0MzQ1NjEgMC4wNjk2NzYwMjQ1MjYyMzIwMDUKK2F0YW4wMTA3IGF0YW4gLTEuMzUxMzI1MjUzOTY2MzIzOSA2LjA1MDA3MjcwMjE2MzIxOThlLTA4IC0+IC0wLjkzMzcxNjc2MzE1MjIwOTc1IDIuMTQwODAwMjY5NzQyNjU2ZS0wOAorYXRhbjAxMDggYXRhbiAtMC4yMDU2NjI1NDQ1ODU5NTc5NSAwLjExOTMzNzcxOTQ0MTU5ODIzIC0+IC0wLjIwNTU2NDYzNzExMTc0OTE2IDAuMTE0OTM0MDUzODcxNDE3MzIKK2F0YW4wMTA5IGF0YW4gLTAuNTg1NjM3MTg3OTU0MDg1NTkgMC42NDQzODk2NTQyMzIxMjg2OCAtPiAtMC42ODM2MTA4OTMwMDIzMzEyNCAwLjQ2NzU5NzYyNzUxODAwMjQ5CithdGFuMDExMCBhdGFuIDQ4LjQ3OTI2Nzc1MTk0ODI5MiAtNzguMzg2MzgyNDYwMTEyNTQzIC0+IDEuNTY1MDg4ODc3MDkxMDUyMyAtMC4wMDkyMjc2ODExMzczMjk3NTg0CithdGFuMDExMSBhdGFuIDEuMDU3NTM3MzkxNDA1NjA2MSAtMC43NTk4ODAxMjM3NzI5Njk4NyAtPiAwLjk0NDMwODg2NzIyMDQzNTk0IC0wLjMxOTE1Njk4MTI2NzAzMTE4CithdGFuMDExMiBhdGFuIDQ0NDQ4MTAuNDMxNDY3NzIwMyAtMC41NjU1MzQwNDU5Mzk0MjU1OCAtPiAxLjU3MDc5NjEwMTgxMzQyMzEgLTIuODYyNTQ0NjQzNzcwMTkwOWUtMTQKK2F0YW4wMTEzIGF0YW4gMC4wMTAxMDE0MDUwODI1MjAwMDkgLTAuMDMyOTMyNjY4NTUwMjgyNDc4IC0+IDAuMDEwMTEyMDI2NzY2NDYzMzQgLTAuMDMyOTQxMjE0Nzc2ODM0OTk2CithdGFuMDExNCBhdGFuIDEuNTM1MzU4NTMwMDE1NDkxMSAtMi4xOTQ3MDk5MzQ2Nzk2NTE5IC0+IDEuMzQwMDMxMDczOTIwNjM5NCAtMC4yOTk5NjAwMzYwNzQ0OTA0NQorYXRhbjAxMTUgYXRhbiAwLjIxODY5NDU3MDU1NjcwODgyIDkuOTkxNTY4NDI1NDAwNzA5MyAtPiAxLjU2ODU4NDYwNzg4NzY0NDQgMC4xMDAzNzE2ODgxNzU5NDM5CithdGFuMDExNiBhdGFuIDAuMTc3ODMyOTAxNTAyNDY4MzYgMC4wNjQzMzQ2ODk4NjM2NTA5NTcgLT4gMC4xNzY2ODcyODA2NDI4NjI3NyAwLjA2MjQzNTgwODcyODg3Mzg0NgorYXRhbjAxMTcgYXRhbiAxNS43NTc0NzQwODc2MTU5MTggMzgzLjU3MjYyMTQyNTM0IC0+IDEuNTcwNjg5NDA2MDM2OTYyMSAwLjAwMjYwMjY4MTcyNzg4MjY2MDMKK2F0YW4wMTE4IGF0YW4gMTAuNTg3MDE3NDA4NTMzMzE3IDAuMjE3MjAyMzgwODE4NDM0MzggLT4gMS40NzY2NTk0NjgxMzM2MjM2IDAuMDAxOTE5OTA5NzM4MzAxMDA2MQorYXRhbjAxMTkgYXRhbiAwLjg2MDI2MDc4Njc4NzgxMjA0IDAuMTIzMDE0ODYwOTM1OTUwMiAtPiAwLjcxNDcyNTkzMjI1MzQ5MjkgMC4wNzA1NTEyMjE5NTQyODY2MDUKKworLS0gdmFsdWVzIG5lYXIgaW5maW5pdHkKK2F0YW4wMjAwIGF0YW4gNy44NzY0Mzk3MDExMTk1Nzk4ZSszMDcgOC4xNjQ3OTIxMTM3NzQ2MzA4ZSszMDcgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDYuMzQzOTQ0NjkzOTYwNDQ5M2UtMzA5CithdGFuMDIwMSBhdGFuIDEuNTg3MzY5ODY5NjEzMTQ4N2UrMzA4IC0xLjA3ODAzNjc0MjI5NjA2NDFlKzMwOCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTIuOTI3OTMwOTM2ODUzMDc4MWUtMzA5CithdGFuMDIwMiBhdGFuIC0xLjU4NDQ1NTE4NjQ4MjU4MzRlKzMwOCAxLjAyOTA2NTc4MDkwOTg2NzVlKzMwOCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDIuODgyOTYxNDczNjk2MTQxN2UtMzA5CithdGFuMDIwMyBhdGFuIC0xLjMxNjg3OTI1NjI1MjQwMzJlKzMwOCAtOS4wODg0MzIzNDE2MTQ4MjVlKzMwNyAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0zLjU0OTkzNzMwNTczOTAwNTZlLTMwOQorYXRhbjAyMDQgYXRhbiAwLjAgMS4wMzYwNDY1NzQyMjU4MzM3ZSszMDggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDkuNjUyMDc1NzM1NTY0NjAxOGUtMzA5CithdGFuMDIwNSBhdGFuIC0wLjAgMS4wMDQ1MDYzMjEwMzczMTk2ZSszMDggLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiA5Ljk1NTEzODk0NzkyOTUwM2UtMzA5CithdGFuMDIwNiBhdGFuIDAuMCAtOS41MTU1Mjk2NzE1NzYzNjk2ZSszMDcgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjA1MDkxMzY0ODAyMDExOGUtMzA4CithdGFuMDIwNyBhdGFuIC0wLjAgLTEuNTU2NTcwMDQ5MDQ5NjUwMWUrMzA4IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTYuNDI0MzgxNjExNDE4OTA3MWUtMzA5CithdGFuMDIwOCBhdGFuIDEuMjk1NjMzOTM4OTUyNTI0NGUrMzA4IDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMDIwOSBhdGFuIDEuNDQwODEyNjI0Mzc3MjE1MWUrMzA4IC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4wMjEwIGF0YW4gLTEuMDYzMTc4NjQ2MTkzNjQxN2UrMzA4IDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjAyMTEgYXRhbiAtMS4wNTE2MDU2OTY0MTcxMDY5ZSszMDggLTAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4wMjEyIGF0YW4gMS4yMzYxNjIzMTk2MDM4MzhlKzMwOCA0LjY4Mjc5NTM0OTYyNDI5MzYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjAyMTMgYXRhbiA3LjAwMDUxNjQ3Mjg5NzIxOGUrMzA3IC01Ljg2MzE2MDgwMTc4NDQxNjMgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4wMjE0IGF0YW4gLTEuNTA1MzQ0NDAwMzMzODUwOGUrMzA4IDUuMTE5OTE5NzI2ODQyMDMxMyAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjAyMTUgYXRhbiAtMS4zOTkxNzI1MTgxNDcyNTllKzMwOCAtMy41Njg3NzY2NDcyOTEzNjczIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYXRhbjAyMTYgYXRhbiA4LjEyNTI4MzMwNzA4MDMwMjEgNi4yNzgyOTUzOTE3MzQzODIyZSszMDcgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDEuNTkyNzg5MDI1NjkwODU2NGUtMzA4CithdGFuMDIxNyBhdGFuIDIuODAzNDI4NTk0NzUxNTE2NyAtMS4zMzc4MDQ5Nzc1NzUzODc4ZSszMDggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC03LjQ3NDkzMTA3NTYyMTk1NjJlLTMwOQorYXRhbjAyMTggYXRhbiAtMS40MDczNTA5OTg4OTc0OTUzIDEuNjc3NjM4MTc4NTk2ODM1NWUrMzA4IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgNS45NjA3NjA4NjQ2MzY0NTY5ZS0zMDkKK2F0YW4wMjE5IGF0YW4gLTIuNzEzNTU1MTUyNzU5MjExOSAtMS4yODE1Njc0NDU1MjU3MzhlKzMwOCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC03LjgwMjk0NDc3Mjc1NjUzMjZlLTMwOQorCistLSBpbWFnaW5hcnkgcGFydCA9ICsvLTEsIHJlYWwgcGFydCB0aW55CithdGFuMDMwMCBhdGFuIC0xZS0xNTAgLTEuMCAtPiAtMC43ODUzOTgxNjMzOTc0NDgyOCAtMTczLjA0MDQ1NTU2NDgzMzM5CithdGFuMDMwMSBhdGFuIDFlLTE1NSAxLjAgLT4gMC43ODUzOTgxNjMzOTc0NDgyOCAxNzguNzk2OTE4Mjk3MzE4NTEKK2F0YW4wMzAyIGF0YW4gOS45OTk5OTk5OTk5OTk5OTk5ZS0xNjEgLTEuMCAtPiAwLjc4NTM5ODE2MzM5NzQ0ODI4IC0xODQuNTUzMzgxMDI5ODAzNjMKK2F0YW4wMzAzIGF0YW4gLTFlLTE2NSAxLjAgLT4gLTAuNzg1Mzk4MTYzMzk3NDQ4MjggMTkwLjMwOTg0Mzc2MjI4ODc1CithdGFuMDMwNCBhdGFuIC05Ljk5OTg4ODY3MTgyNjgzMDFlLTMyMSAtMS4wIC0+IC0wLjc4NTM5ODE2MzM5NzQ0ODI4IC0zNjguNzYwMTk0MDM1NzY2OTIKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2F0YW4xMDAwIGF0YW4gLTAuMCAwLjAgLT4gLTAuMCAwLjAKK2F0YW4xMDAxIGF0YW4gbmFuIDAuMCAtPiBuYW4gMC4wCithdGFuMTAwMiBhdGFuIC0wLjAgMS4wIC0+IC0wLjAgaW5mIGRpdmlkZS1ieS16ZXJvCithdGFuMTAwMyBhdGFuIC1pbmYgMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMTAwNCBhdGFuIC1pbmYgMi4yOTk5OTk5OTk5OTk5OTk4IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMTAwNSBhdGFuIG5hbiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbgorYXRhbjEwMDYgYXRhbiAtMC4wIGluZiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMDcgYXRhbiAtMi4yOTk5OTk5OTk5OTk5OTk4IGluZiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMDggYXRhbiAtaW5mIGluZiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMDkgYXRhbiBuYW4gaW5mIC0+IG5hbiAwLjAKK2F0YW4xMDEwIGF0YW4gLTAuMCBuYW4gLT4gbmFuIG5hbgorYXRhbjEwMTEgYXRhbiAtMi4yOTk5OTk5OTk5OTk5OTk4IG5hbiAtPiBuYW4gbmFuCithdGFuMTAxMiBhdGFuIC1pbmYgbmFuIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC4wIGlnbm9yZS1pbWFnLXNpZ24KK2F0YW4xMDEzIGF0YW4gbmFuIG5hbiAtPiBuYW4gbmFuCithdGFuMTAxNCBhdGFuIDAuMCAwLjAgLT4gMC4wIDAuMAorYXRhbjEwMTUgYXRhbiAwLjAgMS4wIC0+IDAuMCBpbmYgZGl2aWRlLWJ5LXplcm8KK2F0YW4xMDE2IGF0YW4gaW5mIDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMTAxNyBhdGFuIGluZiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMTggYXRhbiAwLjAgaW5mIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2F0YW4xMDE5IGF0YW4gMi4yOTk5OTk5OTk5OTk5OTk4IGluZiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMTAyMCBhdGFuIGluZiBpbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMjEgYXRhbiAwLjAgbmFuIC0+IG5hbiBuYW4KK2F0YW4xMDIyIGF0YW4gMi4yOTk5OTk5OTk5OTk5OTk4IG5hbiAtPiBuYW4gbmFuCithdGFuMTAyMyBhdGFuIGluZiBuYW4gLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMCBpZ25vcmUtaW1hZy1zaWduCithdGFuMTAyNCBhdGFuIDAuMCAtMC4wIC0+IDAuMCAtMC4wCithdGFuMTAyNSBhdGFuIG5hbiAtMC4wIC0+IG5hbiAtMC4wCithdGFuMTAyNiBhdGFuIDAuMCAtMS4wIC0+IDAuMCAtaW5mIGRpdmlkZS1ieS16ZXJvCithdGFuMTAyNyBhdGFuIGluZiAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithdGFuMTAyOCBhdGFuIGluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithdGFuMTAyOSBhdGFuIG5hbiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4KK2F0YW4xMDMwIGF0YW4gMC4wIC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDMxIGF0YW4gMi4yOTk5OTk5OTk5OTk5OTk4IC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDMyIGF0YW4gaW5mIC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDMzIGF0YW4gbmFuIC1pbmYgLT4gbmFuIC0wLjAKK2F0YW4xMDM0IGF0YW4gLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorYXRhbjEwMzUgYXRhbiAtMC4wIC0xLjAgLT4gLTAuMCAtaW5mIGRpdmlkZS1ieS16ZXJvCithdGFuMTAzNiBhdGFuIC1pbmYgLTAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDM3IGF0YW4gLWluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYXRhbjEwMzggYXRhbiAtMC4wIC1pbmYgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithdGFuMTAzOSBhdGFuIC0yLjI5OTk5OTk5OTk5OTk5OTggLWluZiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDQwIGF0YW4gLWluZiAtaW5mIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gYXRhbmg6IEludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gemVyb3MKK2F0YW5oMDAwMCBhdGFuaCAwLjAgMC4wIC0+IDAuMCAwLjAKK2F0YW5oMDAwMSBhdGFuaCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorYXRhbmgwMDAyIGF0YW5oIC0wLjAgMC4wIC0+IC0wLjAgMC4wCithdGFuaDAwMDMgYXRhbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorCistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiByZWFsIGF4aXMKK2F0YW5oMDAxMCBhdGFuaCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgMC4wIC0+IC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAKK2F0YW5oMDAxMSBhdGFuaCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMAorYXRhbmgwMDEyIGF0YW5oIC0xZS0zMDUgMC4wIC0+IC0xZS0zMDUgMC4wCithdGFuaDAwMTMgYXRhbmggLTFlLTMwNSAtMC4wIC0+IC0xZS0zMDUgLTAuMAorYXRhbmgwMDE0IGF0YW5oIC0xZS0xNTAgMC4wIC0+IC0xZS0xNTAgMC4wCithdGFuaDAwMTUgYXRhbmggLTFlLTE1MCAtMC4wIC0+IC0xZS0xNTAgLTAuMAorYXRhbmgwMDE2IGF0YW5oIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAKK2F0YW5oMDAxNyBhdGFuaCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0wLjAKK2F0YW5oMDAxOCBhdGFuaCAtMC4wMDEgMC4wIC0+IC0wLjAwMTAwMDAwMDMzMzMzMzUzMzMgMC4wCithdGFuaDAwMTkgYXRhbmggLTAuMDAxIC0wLjAgLT4gLTAuMDAxMDAwMDAwMzMzMzMzNTMzMyAtMC4wCithdGFuaDAwMjAgYXRhbmggLTAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IC0wLjY2MDk1NzA5MDI4NjYzMDMgMC4wCithdGFuaDAwMjEgYXRhbmggLTAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAtMC42NjA5NTcwOTAyODY2MzAzIC0wLjAKK2F0YW5oMDAyMiBhdGFuaCAtMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gLTE4LjcxNDk3Mzg3NTExODUyNCAwLjAKK2F0YW5oMDAyMyBhdGFuaCAtMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IC0xOC43MTQ5NzM4NzUxMTg1MjQgLTAuMAorYXRhbmgwMDI0IGF0YW5oIC0xLjAwMDAwMDAwMDAwMDAwMDIgMC4wIC0+IC0xOC4zNjg0MDAyODQ4Mzg1NSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAyNSBhdGFuaCAtMS4wMDAwMDAwMDAwMDAwMDAyIC0wLjAgLT4gLTE4LjM2ODQwMDI4NDgzODU1IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAyNiBhdGFuaCAtMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAtMy44MDA3MDExNjcyOTE5MjE4IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDI3IGF0YW5oIC0xLjAwMDk5OTk5OTk5OTk5OTkgLTAuMCAtPiAtMy44MDA3MDExNjcyOTE5MjE4IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAyOCBhdGFuaCAtMi4wIDAuMCAtPiAtMC41NDkzMDYxNDQzMzQwNTQ4OSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAyOSBhdGFuaCAtMi4wIC0wLjAgLT4gLTAuNTQ5MzA2MTQ0MzM0MDU0ODkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDMwIGF0YW5oIC0yMy4wIDAuMCAtPiAtMC4wNDM1MDU2ODg0OTQ4MTQ4ODQgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwMzEgYXRhbmggLTIzLjAgLTAuMCAtPiAtMC4wNDM1MDU2ODg0OTQ4MTQ4ODQgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDMyIGF0YW5oIC0xMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAzMyBhdGFuaCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtMC4wIC0+IC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAzNCBhdGFuaCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgMC4wIC0+IC0xZS0xNTAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwMzUgYXRhbmggLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gLTFlLTE1MCAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwMzYgYXRhbmggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk5ZS0zMDAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwMzcgYXRhbmggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OWUtMzAwIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAzOCBhdGFuaCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgMC4wCithdGFuaDAwMzkgYXRhbmggOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wCithdGFuaDAwNDAgYXRhbmggMWUtMzA1IDAuMCAtPiAxZS0zMDUgMC4wCithdGFuaDAwNDEgYXRhbmggMWUtMzA1IC0wLjAgLT4gMWUtMzA1IC0wLjAKK2F0YW5oMDA0MiBhdGFuaCAxZS0xNTAgMC4wIC0+IDFlLTE1MCAwLjAKK2F0YW5oMDA0MyBhdGFuaCAxZS0xNTAgLTAuMCAtPiAxZS0xNTAgLTAuMAorYXRhbmgwMDQ0IGF0YW5oIDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgMC4wIC0+IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgMC4wCithdGFuaDAwNDUgYXRhbmggOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMAorYXRhbmgwMDQ2IGF0YW5oIDAuMDAxIDAuMCAtPiAwLjAwMTAwMDAwMDMzMzMzMzUzMzMgMC4wCithdGFuaDAwNDcgYXRhbmggMC4wMDEgLTAuMCAtPiAwLjAwMTAwMDAwMDMzMzMzMzUzMzMgLTAuMAorYXRhbmgwMDQ4IGF0YW5oIDAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuNjYwOTU3MDkwMjg2NjMwMyAwLjAKK2F0YW5oMDA0OSBhdGFuaCAwLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gMC42NjA5NTcwOTAyODY2MzAzIC0wLjAKK2F0YW5oMDA1MCBhdGFuaCAwLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAxOC43MTQ5NzM4NzUxMTg1MjQgMC4wCithdGFuaDAwNTEgYXRhbmggMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IDE4LjcxNDk3Mzg3NTExODUyNCAtMC4wCithdGFuaDAwNTIgYXRhbmggMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAxOC4zNjg0MDAyODQ4Mzg1NSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA1MyBhdGFuaCAxLjAwMDAwMDAwMDAwMDAwMDIgLTAuMCAtPiAxOC4zNjg0MDAyODQ4Mzg1NSAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTQgYXRhbmggMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAzLjgwMDcwMTE2NzI5MTkyMTggMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTUgYXRhbmggMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMy44MDA3MDExNjcyOTE5MjE4IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA1NiBhdGFuaCAyLjAgMC4wIC0+IDAuNTQ5MzA2MTQ0MzM0MDU0ODkgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTcgYXRhbmggMi4wIC0wLjAgLT4gMC41NDkzMDYxNDQzMzQwNTQ4OSAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTggYXRhbmggMjMuMCAwLjAgLT4gMC4wNDM1MDU2ODg0OTQ4MTQ4ODQgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTkgYXRhbmggMjMuMCAtMC4wIC0+IDAuMDQzNTA1Njg4NDk0ODE0ODg0IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA2MCBhdGFuaCAxMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDYxIGF0YW5oIDEwMDAwMDAwMDAwMDAwMDAwLjAgLTAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA2MiBhdGFuaCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMWUtMTUwIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDYzIGF0YW5oIDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gMWUtMTUwIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA2NCBhdGFuaCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gOS45OTk5OTk5OTk5OTk5OTk5ZS0zMDAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNjUgYXRhbmggMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLTAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OTllLTMwMCAtMS41NzA3OTYzMjY3OTQ4OTY2CisKKy0tIHJhbmRvbSBpbnB1dHMKK2F0YW5oMDEwMCBhdGFuaCAtMC41NDQ2MDkyNTk4MDYzMzUwMSAtMC41NDAzODA1MDEyNjcyMTAyNyAtPiAtMC40MTk4NDI2NTgwODQ0Njk3NCAtMC42MDM1NDE1MzkzODM1MjgyOAorYXRhbmgwMTAxIGF0YW5oIC0xLjY5MzQ2MTQyNjk4MjkwNTEgLTAuNDg4MDczODYxMDgxMTM2MjEgLT4gLTAuNTg1OTI3NjkxMDIyNDMyODEgLTEuMzUzNzgzNzQ3MDk3NTg5OAorYXRhbmgwMTAyIGF0YW5oIC0xLjM0NjcyOTM5ODU1MDEyMDcgLTAuNDc4NjgzNTQ4OTUzOTU4NzYgLT4gLTAuNjk5NjE2MjQzNzA3MDk5ODUgLTEuMTk5NDQ1MDE1NjU3MDA3NgorYXRhbmgwMTAzIGF0YW5oIC01LjYxNDIyMzI0MTg5ODQ4ODggLTU0NDU1MTYxMy4zOTMwNzcwMiAtPiAtMS44OTMyNjU3NTUwOTI1NzQ0ZS0xNyAtMS41NzA3OTYzMjQ5NTg1MjM1CithdGFuaDAxMDQgYXRhbmggLTAuMDExODQxNDYwMzgxMjYzNjUxIC0zLjI1OTk3ODg5OTgyMzM4NSAtPiAtMC4wMDEwMTgzOTM2NTQ3NDA1MTg4IC0xLjI3MzE2MTQwMjA3NDM4MzgKK2F0YW5oMDEwNSBhdGFuaCAtMC4wMDczMzQ1NzM2OTUwMDI5NTMyIDAuMzU4MjE5NDk2NzA5MjIyNDggLT4gLTAuMDA2NTAwNDg2OTAyNDY4MjQ2NiAwLjM0Mzk5MzU5OTcxOTIwODk1CithdGFuaDAxMDYgYXRhbmggLTEzLjg2Njc4MjI0NDMyMDAxNCAwLjk1NDExMjk1NDU4NjAyNzMgLT4gLTAuMDcxODk2ODUyMDU1MDU4ODk5IDEuNTY1ODMyMjcwNDYzMTQwOQorYXRhbmgwMTA3IGF0YW5oIC03MDguNTk5NjQ5ODI3ODA3NzUgMjEuOTg0ODAyMTU5MjY2Njc1IC0+IC0wLjAwMTQwOTg3NzkwNzQxODk3NDEgMS41NzA3NTI1ODQyODM4OTU5CithdGFuaDAxMDggYXRhbmggLTMwLjkxNjgzMjA3NjAzMDYwMiAxLjM2OTE4OTcxMzg4Mjk4NDMgLT4gLTAuMDMyMjkyNjgyMDQ1NzQzNjc2IDEuNTY5MzY1MjA5NDg0NzExNQorYXRhbmgwMTA5IGF0YW5oIC0wLjU3NDYxODA2MzM5ODYxNzU0IDAuMjk1MzQ3OTc0NDM5MTMwNjMgLT4gLTAuNTY0Njc0NjQ0NzI0ODI3NjUgMC4zOTYxNTYxMjgyNDE3MjYyNQorYXRhbmgwMTEwIGF0YW5oIDAuNDAwODkyNDY3Mzc0MTU2ODUgLTEuNjMyMjg1OTg0MzAwNjU5IC0+IDAuMTA2MzgzMjcwNzg5MDYwOCAtMS4wNDAyODIxMzM1MzI2NDgyCithdGFuaDAxMTEgYXRhbmggMjExOS42MTY3Njg4MjYyMTc2IC0xLjUzODM2NTM0MzczNzcyNDJlKzE3IC0+IDguOTU2NTAwODUxODM4MjA0OWUtMzIgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMTEyIGF0YW5oIDc1Ni44NjAxNzg1MDk0MTY0MSAtNi42MDY0MDg3MTMzMjIzODE3IC0+IDAuMDAxMzIxMTQ4MTEzNjgyMDA0NiAtMS41NzA3ODQ3OTQ4NzAyMjM0CithdGFuaDAxMTMgYXRhbmggNC4wNDkwNjE3NzE4MDQxNjAyIC0yLjU3ODQ0NTY3OTEwNDA2NTJlLTEyIC0+IDAuMjUyMTg0MjU1Mzg1NTM2MTggLTEuNTcwNzk2MzI2Nzk0NzI5MQorYXRhbmgwMTE0IGF0YW5oIDEwLjU4OTI1NDk1NzE3MzUyMyAtMC4xMzk1NjM5MTE0OTYyNDUwOSAtPiAwLjA5NDcwMDg5MDI4MjE5NzY2NCAtMS41Njk1NDA3MTQwMjE3NjIzCithdGFuaDAxMTUgYXRhbmggMS4wMTcxMTg3NTUzMTYwNDk5IDAuNzA3NjYxMTM0NjUzNTQwMTkgLT4gMC41NTI2MDI1MTk3NTM2Nzc5MSAwLjk2NjE5NzExMTE2NjQxNjgyCithdGFuaDAxMTYgYXRhbmggMC4wMzE2NDU1MDI1Mjc3NTA4NDkgMC4wNjczMTk5ODM3MjY1NDQzOTQgLT4gMC4wMzE1MTMwMTgzNDQwODY3NDIgMC4wNjcyODU0Mzc2NzA1NDkwMzYKK2F0YW5oMDExNyBhdGFuaCAwLjEzNjcwMTc3NjI0OTk0NTE3IDAuNDMyNDAwODkzNjE4NTc5NDcgLT4gMC4xMTUzODkzMzE1MTAxNzI1MyAwLjQxMzkyMDA4MTQ1MzM2MjEyCithdGFuaDAxMTggYXRhbmggMC42NDE3Mzg5OTI0MzU5NjY4OCAyLjkwMDg1Nzc2ODY2OTUyNTYgLT4gMC4wNjU2ODAxNDI0MjQxMzQ0MDUgMS4yNTE4NTM1NzI0MDUzOTIxCithdGFuaDAxMTkgYXRhbmggMC4xOTMxMzgxMzUyODAyNTk0MiAzOC43OTk2MTkxNTA3NDE4NjkgLT4gMC4wMDAxMjgyMDc2NTkxNzM2NjY0NCAxLjU0NTAyOTIyMDI4MjM2MTIKKworLS0gdmFsdWVzIG5lYXIgaW5maW5pdHkKK2F0YW5oMDIwMCBhdGFuaCA1LjMyNDI2NDY4MzEzNDc5NTRlKzMwNyAxLjM3NDAzOTYwODAwODQxNTNlKzMwOCAtPiAyLjQ1MTkyNTM2MTY2OTU1NzZlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIwMSBhdGFuaCAxLjE1ODcwMTY0MTI0MTM1OGUrMzA4IC02LjU1NzkyNjg4NzMzNzU4NTNlKzMwNyAtPiA2LjUzNjUzNzUyNjc3OTUwOThlLTMwOSAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAyMDIgYXRhbmggLTEuMzQzNTMyNTczNTc2MjI0N2UrMzA4IDkuODk0NzM2OTI1OTYwMTU0N2UrMzA3IC0+IC00LjgyNTY2ODA5MDY1ODk5NTZlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIwMyBhdGFuaCAtMS40MzU5ODU3NTIyNTk4OTQyZSszMDggLTkuNDcwMTIwNDcwMjM5MTAwNGUrMzA3IC0+IC00Ljg1MzEyODIyNjI4NzI2NDVlLTMwOSAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAyMDQgYXRhbmggMC4wIDUuNjYxNDE4MTA2ODA5ODQ5N2UrMzA3IC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIwNSBhdGFuaCAtMC4wIDYuOTgxMzIxMjcyMTQ1MDEzOWUrMzA3IC0+IC0wLjAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAyMDYgYXRhbmggMC4wIC03LjQ5NzA2MTMwNjAzMTE0NTNlKzMwNyAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjA3IGF0YW5oIC0wLjAgLTEuNTI4MDYwMTg4MDMxNDA2OGUrMzA4IC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjA4IGF0YW5oIDguMjIxOTQ3MjMzNjAwMDc0NWUrMzA3IDAuMCAtPiAxLjIxNjI1Njg5MzM5NTQ4MTNlLTMwOCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIwOSBhdGFuaCAxLjQ4MTE1MTk2MTcyODA4OTllKzMwOCAtMC4wIC0+IDYuNzUxNTAxNzA4Mzk1MTMyNWUtMzA5IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxMCBhdGFuaCAtMS4yMjgyMDE2MjYzNTk4Nzg1ZSszMDggMC4wIC0+IC04LjE0MTk4NTYzNjA1Mzc2MTVlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxMSBhdGFuaCAtMS4wNjE2NDI3NzYwMTU0NDI2ZSszMDggLTAuMCAtPiAtOS40MTkzNjQyMzk5NDg5NTYzZS0zMDkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjEyIGF0YW5oIDEuMjk3MTUzNjUxMDE4MDY4MmUrMzA4IDUuMjg0Nzk0ODQ1MjMzMzI5MyAtPiA3LjcwOTE4Njk1MTA5OTgzMjhlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxMyBhdGFuaCAxLjE4NDk4NjA5Nzc0MTE4NTFlKzMwOCAtNy45NzgxOTA2NDQ3NDU5OTQ5IC0+IDguNDM4OTE3NTY5NjMzOTAxNGUtMzA5IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxNCBhdGFuaCAtMS40MDI5OTY5NDIyNTg2NjM1ZSszMDggMC45Mzg5MTk4NjU0MzY2MzM3NSAtPiAtNy4xMjc1OTkyODMyMTgwNzNlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxNSBhdGFuaCAtNC43NTA4MDk4OTEyMjQ4MjExZSszMDcgLTguMjcwMjQyMTI0NzAzOTkwOCAtPiAtMi4xMDQ5MDQyNjQ1Mjc4MDQzZS0zMDggLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjE2IGF0YW5oIDguMjY4MDc0MjExNTc2OTk5OCA4LjExNTM4OTg0MTA5MTgwNjVlKzMwNyAtPiAwLjAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAyMTcgYXRhbmggMS4yNTc1MzI1MTQ2MjE4ODg1IC0xLjQ3NDY2NzkxNDc2NjE2NDllKzMwOCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjE4IGF0YW5oIC0yLjQ2MTg4MDM2ODIzMTA4OTkgMS4zNzgxNTIyNzE3MDA1NTY4ZSszMDggLT4gLTAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxOSBhdGFuaCAtNC4wOTUyMzg2Njk0Nzg4MTEyIC0xLjIzMTA4MzM3NjM1MzcwM2UrMzA4IC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSB2YWx1ZXMgbmVhciAwCithdGFuaDAyMjAgYXRhbmggMy44MDE3NTYzNjU5ODExNjI4ZS0zMTQgMi42NjM1NDg0MjM5MDc0MzE5ZS0zMTIgLT4gMy44MDE3NTYzNjU5ODExNjI4ZS0zMTQgMi42NjM1NDg0MjM5MDc0MzE5ZS0zMTIKK2F0YW5oMDIyMSBhdGFuaCAxLjczOTExMTA3MzM2MTE4NzhlLTMyMSAtNC4zNTQ3ODAwNjcyNTQxNDE5ZS0zMTMgLT4gMS43MzkxMTEwNzMzNjExODc4ZS0zMjEgLTQuMzU0NzgwMDY3MjU0MTQxOWUtMzEzCithdGFuaDAyMjIgYXRhbmggLTUuOTY1NjgxNjA4MTMyNTA3OGUtMzE3IDkuOTY5MjI1MzU1NTQxNjI2M2UtMzEzIC0+IC01Ljk2NTY4MTYwODEzMjUwNzhlLTMxNyA5Ljk2OTIyNTM1NTU0MTYyNjNlLTMxMworYXRhbmgwMjIzIGF0YW5oIC02LjU2MDY2NzExNzg0MDAyMzllLTMxMyAtMi4xNjgwOTM2NDA2MzU3MzM1ZS0zMDkgLT4gLTYuNTYwNjY3MTE3ODQwMDIzOWUtMzEzIC0yLjE2ODA5MzY0MDYzNTczMzVlLTMwOQorYXRhbmgwMjI0IGF0YW5oIDAuMCAyLjUyMzA5NDQ0MDE4MjA3NzllLTMxOSAtPiAwLjAgMi41MjMwOTQ0NDAxODIwNzc5ZS0zMTkKK2F0YW5oMDIyNSBhdGFuaCAtMC4wIDUuNjA2NjU2OTQ5MDA2NDY1OGUtMzIwIC0+IC0wLjAgNS42MDY2NTY5NDkwMDY0NjU4ZS0zMjAKK2F0YW5oMDIyNiBhdGFuaCAwLjAgLTIuNDIyMjQ4NzI0OTQ2ODM3N2UtMzE3IC0+IDAuMCAtMi40MjIyNDg3MjQ5NDY4Mzc3ZS0zMTcKK2F0YW5oMDIyNyBhdGFuaCAtMC4wIC0zLjA4NjExMDEwODkyMDYwMzdlLTMxNiAtPiAtMC4wIC0zLjA4NjExMDEwODkyMDYwMzdlLTMxNgorYXRhbmgwMjI4IGF0YW5oIDMuMTIxOTIyMjg4NDM5Mzk4NmUtMzEwIDAuMCAtPiAzLjEyMTkyMjI4ODQzOTM5ODZlLTMxMCAwLjAKK2F0YW5oMDIyOSBhdGFuaCA5Ljg5MjYzMzc1NjQ5NzYxOTZlLTMwOSAtMC4wIC0+IDkuODkyNjMzNzU2NDk3NjE5NmUtMzA5IC0wLjAKK2F0YW5oMDIzMCBhdGFuaCAtMS41NDYyNTM1MDkyOTE4MTU0ZS0zMTIgMC4wIC0+IC0xLjU0NjI1MzUwOTI5MTgxNTRlLTMxMiAwLjAKK2F0YW5oMDIzMSBhdGFuaCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMAorCistLSByZWFsIHBhcnQgPSArLy0xLCBpbWFnaW5hcnkgcGFydCB0aW55CithdGFuaDAzMDAgYXRhbmggMS4wIDFlLTE1MyAtPiAxNzYuNDk0MzMzMjA0MzI0NDggMC43ODUzOTgxNjMzOTc0NDgyOAorYXRhbmgwMzAxIGF0YW5oIDEuMCA5Ljk5OTk5OTk5OTk5OTk5OTdlLTE1NSAtPiAxNzcuNjQ1NjI1NzUwODIxNDkgMC43ODUzOTgxNjMzOTc0NDgyOAorYXRhbmgwMzAyIGF0YW5oIC0xLjAgMWUtMTYxIC0+IC0xODUuNzA0NjczNTc2MzAwNjUgMC43ODUzOTgxNjMzOTc0NDgyOAorYXRhbmgwMzAzIGF0YW5oIDEuMCAtMWUtMTY1IC0+IDE5MC4zMDk4NDM3NjIyODg3NSAtMC43ODUzOTgxNjMzOTc0NDgyOAorYXRhbmgwMzA0IGF0YW5oIC0xLjAgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0+IC0zNzIuMjIwMDM1OTYwNjkwNjEgLTAuNzg1Mzk4MTYzMzk3NDQ4MjgKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2F0YW5oMTAwMCBhdGFuaCAwLjAgMC4wIC0+IDAuMCAwLjAKK2F0YW5oMTAwMSBhdGFuaCAwLjAgbmFuIC0+IDAuMCBuYW4KK2F0YW5oMTAwMiBhdGFuaCAxLjAgMC4wIC0+IGluZiAwLjAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2F0YW5oMTAwMyBhdGFuaCAwLjAgaW5mIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwNCBhdGFuaCAyLjMgaW5mIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwNSBhdGFuaCAyLjMgbmFuIC0+IG5hbiBuYW4KK2F0YW5oMTAwNiBhdGFuaCBpbmYgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwNyBhdGFuaCBpbmYgMi4zIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwOCBhdGFuaCBpbmYgaW5mIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwOSBhdGFuaCBpbmYgbmFuIC0+IDAuMCBuYW4KK2F0YW5oMTAxMCBhdGFuaCBuYW4gMC4wIC0+IG5hbiBuYW4KK2F0YW5oMTAxMSBhdGFuaCBuYW4gMi4zIC0+IG5hbiBuYW4KK2F0YW5oMTAxMiBhdGFuaCBuYW4gaW5mIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYgICAgICAgaWdub3JlLXJlYWwtc2lnbgorYXRhbmgxMDEzIGF0YW5oIG5hbiBuYW4gLT4gbmFuIG5hbgorYXRhbmgxMDE0IGF0YW5oIDAuMCAtMC4wIC0+IDAuMCAtMC4wCithdGFuaDEwMTUgYXRhbmggMS4wIC0wLjAgLT4gaW5mIC0wLjAgICAgICAgICAgICAgICAgICAgIGRpdmlkZS1ieS16ZXJvCithdGFuaDEwMTYgYXRhbmggMC4wIC1pbmYgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAxNyBhdGFuaCAyLjMgLWluZiAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDE4IGF0YW5oIGluZiAtMC4wIC0+IDAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDEwMTkgYXRhbmggaW5mIC0yLjMgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAyMCBhdGFuaCBpbmYgLWluZiAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDIxIGF0YW5oIG5hbiAtMC4wIC0+IG5hbiBuYW4KK2F0YW5oMTAyMiBhdGFuaCBuYW4gLTIuMyAtPiBuYW4gbmFuCithdGFuaDEwMjMgYXRhbmggbmFuIC1pbmYgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYgICAgIGlnbm9yZS1yZWFsLXNpZ24KK2F0YW5oMTAyNCBhdGFuaCAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCithdGFuaDEwMjUgYXRhbmggLTAuMCBuYW4gLT4gLTAuMCBuYW4KK2F0YW5oMTAyNiBhdGFuaCAtMS4wIC0wLjAgLT4gLWluZiAtMC4wICAgICAgICAgICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2F0YW5oMTAyNyBhdGFuaCAtMC4wIC1pbmYgLT4gLTAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDEwMjggYXRhbmggLTIuMyAtaW5mIC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDI5IGF0YW5oIC0yLjMgbmFuIC0+IG5hbiBuYW4KK2F0YW5oMTAzMCBhdGFuaCAtaW5mIC0wLjAgLT4gLTAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDEwMzEgYXRhbmggLWluZiAtMi4zIC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDMyIGF0YW5oIC1pbmYgLWluZiAtPiAtMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAzMyBhdGFuaCAtaW5mIG5hbiAtPiAtMC4wIG5hbgorYXRhbmgxMDM0IGF0YW5oIC0wLjAgMC4wIC0+IC0wLjAgMC4wCithdGFuaDEwMzUgYXRhbmggLTEuMCAwLjAgLT4gLWluZiAwLjAgICAgICAgICAgICAgICAgICAgIGRpdmlkZS1ieS16ZXJvCithdGFuaDEwMzYgYXRhbmggLTAuMCBpbmYgLT4gLTAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAzNyBhdGFuaCAtMi4zIGluZiAtPiAtMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDM4IGF0YW5oIC1pbmYgMC4wIC0+IC0wLjAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDEwMzkgYXRhbmggLWluZiAyLjMgLT4gLTAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTA0MCBhdGFuaCAtaW5mIGluZiAtPiAtMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGxvZzogTmF0dXJhbCBsb2dhcml0aG0gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9nMDAwMCBsb2cgMS4wIDAuMCAtPiAwLjAgMC4wCitsb2cwMDAxIGxvZyAxLjAgLTAuMCAtPiAwLjAgLTAuMAorbG9nMDAwMiBsb2cgLTEuMCAwLjAgLT4gMC4wIDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAwMyBsb2cgLTEuMCAtMC4wIC0+IDAuMCAtMy4xNDE1OTI2NTM1ODk3OTMxCistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiByZWFsIGF4aXMKK2xvZzAwMTAgbG9nIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gLTc0My43NDY5MjQ3NDA4MjEzMyAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMTEgbG9nIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wIC0+IC03NDMuNzQ2OTI0NzQwODIxMzMgLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAxMiBsb2cgLTFlLTMwNSAwLjAgLT4gLTcwMi4yODg0NTMzNjMxODM5OCAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMTMgbG9nIC0xZS0zMDUgLTAuMCAtPiAtNzAyLjI4ODQ1MzM2MzE4Mzk4IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMTQgbG9nIC0xZS0xNTAgMC4wIC0+IC0zNDUuMzg3NzYzOTQ5MTA2ODQgMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDE1IGxvZyAtMWUtMTUwIC0wLjAgLT4gLTM0NS4zODc3NjM5NDkxMDY4NCAtMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDE2IGxvZyAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gLTM2Ljg0MTM2MTQ4NzkwNDczNCAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMTcgbG9nIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0wLjAgLT4gLTM2Ljg0MTM2MTQ4NzkwNDczNCAtMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDE4IGxvZyAtMC4wMDEgMC4wIC0+IC02LjkwNzc1NTI3ODk4MjEzNjggMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDE5IGxvZyAtMC4wMDEgLTAuMCAtPiAtNi45MDc3NTUyNzg5ODIxMzY4IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMjAgbG9nIC0wLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAtMC41NDY0NTI4MDE0MDkxNDE4OCAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMjEgbG9nIC0wLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gLTAuNTQ2NDUyODAxNDA5MTQxODggLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAyMiBsb2cgLTAuOTk5OTk5OTk5OTk5OTk5ODkgMC4wIC0+IC0xLjExMDIyMzAyNDYyNTE1NjVlLTE2IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAyMyBsb2cgLTAuOTk5OTk5OTk5OTk5OTk5ODkgLTAuMCAtPiAtMS4xMTAyMjMwMjQ2MjUxNTY1ZS0xNiAtMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDI0IGxvZyAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAyLjIyMDQ0NjA0OTI1MDMxMjhlLTE2IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAyNSBsb2cgLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDIuMjIwNDQ2MDQ5MjUwMzEyOGUtMTYgLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAyNiBsb2cgLTEuMDAwOTk5OTk5OTk5OTk5OSAwLjAgLT4gMC4wMDA5OTk1MDAzMzMwODM0MjMyMSAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMjcgbG9nIC0xLjAwMDk5OTk5OTk5OTk5OTkgLTAuMCAtPiAwLjAwMDk5OTUwMDMzMzA4MzQyMzIxIC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMjggbG9nIC0yLjAgMC4wIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MjkgMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDI5IGxvZyAtMi4wIC0wLjAgLT4gMC42OTMxNDcxODA1NTk5NDUyOSAtMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDMwIGxvZyAtMjMuMCAwLjAgLT4gMy4xMzU0OTQyMTU5MjkxNDk3IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAzMSBsb2cgLTIzLjAgLTAuMCAtPiAzLjEzNTQ5NDIxNTkyOTE0OTcgLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAzMiBsb2cgLTEwMDAwMDAwMDAwMDAwMDAwLjAgMC4wIC0+IDM2Ljg0MTM2MTQ4NzkwNDczNCAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMzMgbG9nIC0xMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMzYuODQxMzYxNDg3OTA0NzM0IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMzQgbG9nIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMzQ1LjM4Nzc2Mzk0OTEwNjg0IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAzNSBsb2cgLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gMzQ1LjM4Nzc2Mzk0OTEwNjg0IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMzYgbG9nIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gNjg4LjQ3Mjk0MjgwNTIxOTY1IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAzNyBsb2cgLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gNjg4LjQ3Mjk0MjgwNTIxOTY1IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMzggbG9nIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiAtNzQzLjc0NjkyNDc0MDgyMTMzIDAuMAorbG9nMDAzOSBsb2cgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAtNzQzLjc0NjkyNDc0MDgyMTMzIC0wLjAKK2xvZzAwNDAgbG9nIDFlLTMwNSAwLjAgLT4gLTcwMi4yODg0NTMzNjMxODM5OCAwLjAKK2xvZzAwNDEgbG9nIDFlLTMwNSAtMC4wIC0+IC03MDIuMjg4NDUzMzYzMTgzOTggLTAuMAorbG9nMDA0MiBsb2cgMWUtMTUwIDAuMCAtPiAtMzQ1LjM4Nzc2Mzk0OTEwNjg0IDAuMAorbG9nMDA0MyBsb2cgMWUtMTUwIC0wLjAgLT4gLTM0NS4zODc3NjM5NDkxMDY4NCAtMC4wCitsb2cwMDQ0IGxvZyA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAtMzYuODQxMzYxNDg3OTA0NzM0IDAuMAorbG9nMDA0NSBsb2cgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IC0zNi44NDEzNjE0ODc5MDQ3MzQgLTAuMAorbG9nMDA0NiBsb2cgMC4wMDEgMC4wIC0+IC02LjkwNzc1NTI3ODk4MjEzNjggMC4wCitsb2cwMDQ3IGxvZyAwLjAwMSAtMC4wIC0+IC02LjkwNzc1NTI3ODk4MjEzNjggLTAuMAorbG9nMDA0OCBsb2cgMC41Nzg5OTk5OTk5OTk5OTk5NiAwLjAgLT4gLTAuNTQ2NDUyODAxNDA5MTQxODggMC4wCitsb2cwMDQ5IGxvZyAwLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gLTAuNTQ2NDUyODAxNDA5MTQxODggLTAuMAorbG9nMDA1MCBsb2cgMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gLTEuMTEwMjIzMDI0NjI1MTU2NWUtMTYgMC4wCitsb2cwMDUxIGxvZyAwLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gLTEuMTEwMjIzMDI0NjI1MTU2NWUtMTYgLTAuMAorbG9nMDA1MiBsb2cgMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAyLjIyMDQ0NjA0OTI1MDMxMjhlLTE2IDAuMAorbG9nMDA1MyBsb2cgMS4wMDAwMDAwMDAwMDAwMDAyIC0wLjAgLT4gMi4yMjA0NDYwNDkyNTAzMTI4ZS0xNiAtMC4wCitsb2cwMDU0IGxvZyAxLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDAuMDAwOTk5NTAwMzMzMDgzNDIzMjEgMC4wCitsb2cwMDU1IGxvZyAxLjAwMDk5OTk5OTk5OTk5OTkgLTAuMCAtPiAwLjAwMDk5OTUwMDMzMzA4MzQyMzIxIC0wLjAKK2xvZzAwNTYgbG9nIDIuMCAwLjAgLT4gMC42OTMxNDcxODA1NTk5NDUyOSAwLjAKK2xvZzAwNTcgbG9nIDIuMCAtMC4wIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MjkgLTAuMAorbG9nMDA1OCBsb2cgMjMuMCAwLjAgLT4gMy4xMzU0OTQyMTU5MjkxNDk3IDAuMAorbG9nMDA1OSBsb2cgMjMuMCAtMC4wIC0+IDMuMTM1NDk0MjE1OTI5MTQ5NyAtMC4wCitsb2cwMDYwIGxvZyAxMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAzNi44NDEzNjE0ODc5MDQ3MzQgMC4wCitsb2cwMDYxIGxvZyAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMzYuODQxMzYxNDg3OTA0NzM0IC0wLjAKK2xvZzAwNjIgbG9nIDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IDAuMCAtPiAzNDUuMzg3NzYzOTQ5MTA2ODQgMC4wCitsb2cwMDYzIGxvZyA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDM0NS4zODc3NjM5NDkxMDY4NCAtMC4wCitsb2cwMDY0IGxvZyAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gNjg4LjQ3Mjk0MjgwNTIxOTY1IDAuMAorbG9nMDA2NSBsb2cgMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLTAuMCAtPiA2ODguNDcyOTQyODA1MjE5NjUgLTAuMAorCistLSByYW5kb20gaW5wdXRzCitsb2cwMDY2IGxvZyAtMS45ODMwNDU0OTQ1MTg2MTkxZS0xNiAtMi4wMzM0NDQ4MDI1NjczMzQ2IC0+IDAuNzA5NzMxMzAxOTQzMjk4MDMgLTEuNTcwNzk2MzI2Nzk0ODk2OAorbG9nMDA2NyBsb2cgLTAuOTY3NDU4NTMwMjQ3NDE4NTcgLTAuODQ5OTU4MTYyMjgyOTk2OTIgLT4gMC4yNTI5MjgxMTM5ODcyMjM4NyAtMi40MjA3NTcwNDM4NTM2OTA1Citsb2cwMDY4IGxvZyAtMC4xNjAzNjQ0MzEzOTQ4NDE4IC0wLjI5Mjk5NDIxMTEwNDE4MzUgLT4gLTEuMDk2NTg1Nzg3MjQyNzM3NCAtMi4wNzE1ODcwODU5OTcxNDE5Citsb2cwMDY5IGxvZyAtMC4xNTkxNzkxMzE2ODQzODY5OSAtMC4yNTIzODc5OTI1MTEzMjE3NyAtPiAtMS4yMDkzNDc3MzEzMjQ5OTAxIC0yLjEzMzQ3ODQyMzIwMzM4NjMKK2xvZzAwNzAgbG9nIC0wLjY4OTA3ODE4NTM1MDc4ODAyIC0zLjA2OTMxMDU4NTM0NzYzNDYgLT4gMS4xNDYwMzk4NjI5MTg0NTY1IC0xLjc5MTY0MDM4MTM5MTMyMTEKK2xvZzAwNzEgbG9nIC0xNy4yNjgxMzM0NDc1NjU1ODkgNi44MTY1MTIwMDE0NjA0NzU2IC0+IDIuOTIxMjY5NDQ2NTk3NDgzNiAyLjc2NTYyNDUwODE2MDMxNjQKK2xvZzAwNzIgbG9nIC0xLjcxNTM4OTQ0Nzk2OTAzMjggMjYuNDM0MDU1MzcyODAyNjM2IC0+IDMuMjc2NzU0Mjk1MzcxODAwMyAxLjYzNTU5ODYyNzYzNDE3MzQKK2xvZzAwNzMgbG9nIC04LjA0NTY3OTQ2NDg5MzY1NzhlLTA2IDAuMTk3MjI3NTgwNTc1NzAyMDggLT4gLTEuNjIzMzk2OTg0ODI5NjA3NSAxLjU3MDgzNzEyMDY4MTAxMDEKK2xvZzAwNzQgbG9nIC0yLjQzMDY0NDI2OTEzMjMxNzMgMC42ODQ2OTE5NzUwNzAwOTk2IC0+IDAuOTI2MzM1OTIwMDE5Njk1ODkgMi44NjcwMTYwNTc2NzE4MzMxCitsb2cwMDc1IGxvZyAtMy41NDg4MDQ5MjUwODg4MTk0IDAuNDUzMjQwNDA2NDMxODUyNTQgLT4gMS4yNzQ3MDA4Mzc0MjU2NDI2IDMuMDE0NTY0MDAwNzg4NTExMQorbG9nMDA3NiBsb2cgMC4xODQxODUxNjg1MTUxMDE4OSAtMC4yNjA2MjUxODgzNjIxMjYxNyAtPiAtMS4xNDIxMjg3MTIxOTQwMzQ0IC0wLjk1NTU4NDQwODQxMTgzNDM0Citsb2cwMDc3IGxvZyAyLjcxMjQ4Mzc3OTU2MzgzOTkgLTEzLjE0ODc2OTA2NzEzMzM4NyAtPiAyLjU5NzE2NTk5NzU3MDY4MDIgLTEuMzY3MzU4MzA0NTIwOTQzOQorbG9nMDA3OCBsb2cgMy42NTIxMjc1NDc2MTY5MTQ5ZS0xMyAtMy43ODIwNTQzMDIzMTcwNjczZS0wNSAtPiAtMTAuMTgyNjU4MTM2NzQxNTY5IC0xLjU3MDc5NjMxNzEzODQzMTYKK2xvZzAwNzkgbG9nIDUuMDg3NzU0NTgxMzg2MjIzOSAtMS4yODM0OTc4MzI2Nzg2ODUyIC0+IDEuNjU3Njg1NjIxMzA3NjMyOCAtMC4yNDcxMTU4MzQ5NzczODQ4NQorbG9nMDA4MCBsb2cgMC4yNjQ3Nzk4NjgwODQ2MTUxMiAtMC42NzY1OTAwMTE5NDE4NzQyOSAtPiAtMC4zMTk0NDA4NTIwNzk5OTk3MyAtMS4xOTc3NzM2NzE5ODcxMjEKK2xvZzAwODEgbG9nIDAuMDAxNDc1NDI2MTM5ODA3MTk2MiA1LjM1MTQ2OTE2MDgyMDU0NDIgLT4gMS42NzczNzExNzA3MTUzODI5IDEuNTcwNTIwNjIxOTI2MTgwMgorbG9nMDA4MiBsb2cgMC4yOTY2NzMzNDQ2MjE1Nzg4NSAwLjAwMDIwMDU2MDQ1MDQyNTg0Nzk1IC0+IC0xLjIxNTEyMzM2NjcwNzk1ODggMC4wMDA2NzYwMzExNDE2ODY4OTIwNAorbG9nMDA4MyBsb2cgMC44MjEwNDIzMzY3MTA5OTQyNSAzLjkwMDUzODcxMzAxMzMxMDIgLT4gMS4zODI3OTE4OTY1Mjk5NTkzIDEuMzYzMzMwNDcwMTg0ODM2MworbG9nMDA4NCBsb2cgMC4yNzI2ODEzNTM1ODE4MDY2NyAxMjQuNDIwODgxMTA5NDU4MDQgLT4gNC44MjM2NzI0MjIzNTU5MjI5IDEuNTY4NjA0NzI1ODc4OTAxNQorbG9nMDA4NSBsb2cgMC4wMDI2Mjg2OTU5MTY4MjY3NDg1IDAuNDc3OTU4MDgxODA1NzMwMTMgLT4gLTAuNzM4MjE3MTIxMzc4MDkxMjYgMS41NjUyOTY1MzYwOTYwMDg3CisKKy0tIHZhbHVlcyBuZWFyIGluZmluaXR5Citsb2cwMTAwIGxvZyAxLjA1MTIwMjU3NDQwMDMxNzJlKzMwOCA3LjI2MjE2Njk3NTA2NjQ2MTFlKzMwNyAtPiA3MDkuNDQxMjM5Njc4MTQ0OTQgMC42MDQ1NTQzNDA0ODMzMjk2OAorbG9nMDEwMSBsb2cgNS41MzQ0MjQ5MDM0MzcyMTI2ZSszMDcgLTEuMjE1NTg1OTE1ODQzMTI3NWUrMzA4IC0+IDcwOS40ODU2MjMwMDM0NTY3OSAtMS4xNDM1NTMwNTY3MTc5NzMKK2xvZzAxMDIgbG9nIC0xLjMxNTU1NzU0MDM0Njk0MDhlKzMwOCAxLjE2MTA3OTM1NDE2NjM4NjRlKzMwOCAtPiA3MDkuNzU4NDc4MDk1NDY0MjggMi40MTg0ODc5NjUwNDk3NAorbG9nMDEwMyBsb2cgLTEuNjMyMzY2NzIwOTczMjM1ZSszMDggLTEuNTQyOTk0NDYyMTE0NDhlKzMwOCAtPiA3MTAuMDA1NDUyMzY1MTU1ODYgLTIuMzg0MzMyNjAyODQ1NTA4NworbG9nMDEwNCBsb2cgMC4wIDUuOTQ0OTI3NjY5MjMyNzcxMmUrMzA3IC0+IDcwOC42NzYxNjE5MTI1ODUyNiAxLjU3MDc5NjMyNjc5NDg5NjYKK2xvZzAxMDUgbG9nIC0wLjAgMS4xMjAxODUwNDU5MDI1NjkyZSszMDggLT4gNzA5LjMwOTcwMjUzMzM4MTcxIDEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEwNiBsb2cgMC4wIC0xLjYyMTQyMjU5MzM0NjY1MjhlKzMwOCAtPiA3MDkuNjc5NTEyNTUwMTA4NiAtMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cwMTA3IGxvZyAtMC4wIC0xLjc0NTMyNjk3OTE1OTEwNThlKzMwOCAtPiA3MDkuNzUzMTUwNTYwODczNzkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEwOCBsb2cgMS40NDA4NjA1Nzc2MDE0MjhlKzMwOCAwLjAgLT4gNzA5LjU2MTQ0OTIwMDU4MjYyIDAuMAorbG9nMDEwOSBsb2cgMS4zOTE1MTUxNzYxNDgyODJlKzMwOCAtMC4wIC0+IDcwOS41MjY2MDE4NTA0MTMyNyAtMC4wCitsb2cwMTEwIGxvZyAtMS4yMDEzNTQ0MDEyOTUyOTZlKzMwOCAwLjAgLT4gNzA5LjM3OTY1ODIzMDIzOTU2IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDExMSBsb2cgLTEuNjcwNDMzNzgyNTk3NjgwNGUrMzA4IC0wLjAgLT4gNzA5LjcwOTI5MTk4NDkyMzk5IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAxMTIgbG9nIDcuMjI3Njk3NDY1NTE5MDIyM2UrMzA3IDcuOTQ4Nzk3MTEzNjkxNjQgLT4gNzA4Ljg3MTU0NDA2NTEyMTA0IDEuMDk5NzY4OTMwNzg1MDQ1OGUtMzA3Citsb2cwMTEzIGxvZyAxLjEyMDc4NTk1OTM3MTYwNzZlKzMwOCAtNi4xOTU2MjAwODY4MjIxMTQ3IC0+IDcwOS4zMTAyMzg4MzA4MDEwNCAtNS41Mjc5MjQ0MzEwODAzMjg2ZS0zMDgKK2xvZzAxMTQgbG9nIC00LjY2Nzg5MzM4NzQ0NzEwNDVlKzMwNyA5Ljk0NzEwNzg5MzIyMDM4MiAtPiA3MDguNDM0MzMxNDI0MzEzODggMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMTE1IGxvZyAtMS41MTA4MDEyNDUzOTUwMTQyZSszMDggLTUuMzExNzE5NzE3OTM3NTYxOSAtPiA3MDkuNjA4ODQ4Nzc4MzUwMDggLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDExNiBsb2cgNy40OTAzNzUwODcxNTA0NDM1IDEuNTMyMDcwMzc3NjYyNjM1MmUrMzA4IC0+IDcwOS42MjI4Mjg2NTA4NTEzNyAxLjU3MDc5NjMyNjc5NDg5NjYKK2xvZzAxMTcgbG9nIDUuOTc2MDMyNTUyNTY1NDc3OCAtOC4wMTQ5NDczOTk3MzQ5MTIzZSszMDcgLT4gNzA4Ljk3NDkzMTc3MjQ4Mzk2IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2xvZzAxMTggbG9nIC03Ljg4MDE5NDIwNjM4NjYyOSAxLjc4NjE4NDU4MTQ3Njc0NDFlKzMwOCAtPiA3MDkuNzc2MjkwNDY4MzcxMzcgMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cwMTE5IGxvZyAtOS44ODY0Mzg5OTM4NTI4NjUgLTYuMTkyMzU3ODEwODA3NDdlKzMwNyAtPiA3MDguNzE2OTM5NDY5NzczMDIgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSB2YWx1ZXMgbmVhciAwCitsb2cwMTIwIGxvZyAyLjI5OTY4Njc1NzkyMjc3NzllLTMwOCA2Ljc4NjE4NDA3NzA5MzkxMjVlLTMxMiAtPiAtNzA4LjM2MzQzNTY3NzE3MzkyIDAuMDAwMjk1MDkxNjYyMjMzMzk4MTUKK2xvZzAxMjEgbG9nIDYuOTE2OTE5MDQxNzc3NDUxNmUtMzIzIC05LjA0MTQwMTMxODg5NDgxMThlLTMyMiAtPiAtNzM5LjIyNzY2Nzk2NDY4Mzg2IC0xLjQ5NDQ0MjMyMTAwMDE2NjkKK2xvZzAxMjIgbG9nIC0xLjUzNzgwNjQ5NjI5MTQwMTFlLTMxNiAxLjgyNDM2MjgzODkzNTQ2MzVlLTMxMCAtPiAtNzEzLjIwMDE0ODAzMTQyOTY1IDEuNTcwNzk3MTY5NzIyODg0MgorbG9nMDEyMyBsb2cgLTIuMzMxOTg5ODQ4MzcwNjgzN2UtMzIxIC0yLjIzNTg3NjM5NDE4NjYzNzFlLTMxMyAtPiAtNzE5LjkwNDUwMDgzMzI1MjIgLTEuNTcwNzk2MzM3MjI0NzY2Citsb2cwMTI0IGxvZyAwLjAgMy44NzI3NzAxMDEwODExMjFlLTMxNSAtPiAtNzIzLjk2MDMzNDI1Mzc0NDAxIDEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEyNSBsb2cgLTAuMCA5LjYzNDI4MDA5MzkwNDMwNzZlLTMyMiAtPiAtNzM5LjE2NzA3MjM2MjgxNzUyIDEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEyNiBsb2cgMC4wIC0yLjI2NjA5OTM5MzQyNzgzNGUtMzA4IC0+IC03MDguMzc4MTQ4NjE3NTc5NjUgLTEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEyNyBsb2cgLTAuMCAtMi4xMTg0Njk1NjczNzY2NjI2ZS0zMTUgLT4gLTcyNC41NjM2MTAzNjczMTgxMiAtMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cwMTI4IGxvZyAxLjEzNjM1MDk4NTQzNDg2NzFlLTMyMiAwLjAgLT4gLTc0MS4zMDQ1Nzc3MDU0NTIwNiAwLjAKK2xvZzAxMjkgbG9nIDMuNTU3MjcyNjUwMDU2OTc1MWUtMzIyIC0wLjAgLT4gLTc0MC4xNjM0MDU4MDIzNjUyMiAtMC4wCitsb2cwMTMwIGxvZyAtMi4zNjk2MDcxMDc0MDQwNTkzZS0zMTAgMC4wIC0+IC03MTIuOTM4NjU0NjY0MjE2NDEgMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMTMxIGxvZyAtMi44MTMyODM4OTcyNjY5MzRlLTMxNyAtMC4wIC0+IC03MjguODg1MTIyMDMxMzg4NjIgLTMuMTQxNTkyNjUzNTg5NzkzMQorCistLSB2YWx1ZXMgbmVhciB0aGUgdW5pdCBjaXJjbGUKK2xvZzAyMDAgbG9nIC0wLjU5OTk5OTk5OTk5OTk5OTk4IDAuODAwMDAwMDAwMDAwMDAwMDQgLT4gMi4yMjA0NDYwNDkyNTAzMTMyZS0xNyAyLjIxNDI5NzQzNTU4ODE4MDgKK2xvZzAyMDEgbG9nIDAuNzk5OTk5OTk5OTk5OTk5OTMgMC42MDAwMDAwMDAwMDAwMDAwOSAtPiA2LjE2Mjk3NTgyMjAzOTE1NDdlLTMzIDAuNjQzNTAxMTA4NzkzMjg0NDgKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2xvZzEwMDAgbG9nIC0wLjAgMC4wIC0+IC1pbmYgMy4xNDE1OTI2NTM1ODk3OTMxICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xvZzEwMDEgbG9nIDAuMCAwLjAgLT4gLWluZiAwLjAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xvZzEwMDIgbG9nIDAuMCBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMTAwMyBsb2cgMi4zIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cxMDA0IGxvZyAtMC4wIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cxMDA1IGxvZyAtMi4zIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cxMDA2IGxvZyAwLjAgbmFuIC0+IG5hbiBuYW4KK2xvZzEwMDcgbG9nIDIuMyBuYW4gLT4gbmFuIG5hbgorbG9nMTAwOCBsb2cgLTAuMCBuYW4gLT4gbmFuIG5hbgorbG9nMTAwOSBsb2cgLTIuMyBuYW4gLT4gbmFuIG5hbgorbG9nMTAxMCBsb2cgLWluZiAwLjAgLT4gaW5mIDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMTAxMSBsb2cgLWluZiAyLjMgLT4gaW5mIDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMTAxMiBsb2cgaW5mIDAuMCAtPiBpbmYgMC4wCitsb2cxMDEzIGxvZyBpbmYgMi4zIC0+IGluZiAwLjAKK2xvZzEwMTQgbG9nIC1pbmYgaW5mIC0+IGluZiAyLjM1NjE5NDQ5MDE5MjM0NDgKK2xvZzEwMTUgbG9nIGluZiBpbmYgLT4gaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjgKK2xvZzEwMTYgbG9nIGluZiBuYW4gLT4gaW5mIG5hbgorbG9nMTAxNyBsb2cgLWluZiBuYW4gLT4gaW5mIG5hbgorbG9nMTAxOCBsb2cgbmFuIDAuMCAtPiBuYW4gbmFuCitsb2cxMDE5IGxvZyBuYW4gMi4zIC0+IG5hbiBuYW4KK2xvZzEwMjAgbG9nIG5hbiBpbmYgLT4gaW5mIG5hbgorbG9nMTAyMSBsb2cgbmFuIG5hbiAtPiBuYW4gbmFuCitsb2cxMDIyIGxvZyAtMC4wIC0wLjAgLT4gLWluZiAtMy4xNDE1OTI2NTM1ODk3OTMxICAgICAgIGRpdmlkZS1ieS16ZXJvCitsb2cxMDIzIGxvZyAwLjAgLTAuMCAtPiAtaW5mIC0wLjAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZS1ieS16ZXJvCitsb2cxMDI0IGxvZyAwLjAgLWluZiAtPiBpbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMTAyNSBsb2cgMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2xvZzEwMjYgbG9nIC0wLjAgLWluZiAtPiBpbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMTAyNyBsb2cgLTIuMyAtaW5mIC0+IGluZiAtMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cxMDI4IGxvZyAtaW5mIC0wLjAgLT4gaW5mIC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzEwMjkgbG9nIC1pbmYgLTIuMyAtPiBpbmYgLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMTAzMCBsb2cgaW5mIC0wLjAgLT4gaW5mIC0wLjAKK2xvZzEwMzEgbG9nIGluZiAtMi4zIC0+IGluZiAtMC4wCitsb2cxMDMyIGxvZyAtaW5mIC1pbmYgLT4gaW5mIC0yLjM1NjE5NDQ5MDE5MjM0NDgKK2xvZzEwMzMgbG9nIGluZiAtaW5mIC0+IGluZiAtMC43ODUzOTgxNjMzOTc0NDgyOAorbG9nMTAzNCBsb2cgbmFuIC0wLjAgLT4gbmFuIG5hbgorbG9nMTAzNSBsb2cgbmFuIC0yLjMgLT4gbmFuIG5hbgorbG9nMTAzNiBsb2cgbmFuIC1pbmYgLT4gaW5mIG5hbgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbG9nMTA6IExvZ2FyaXRobSBiYXNlIDEwIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9ndDAwMDAgbG9nMTAgMS4wIDAuMCAtPiAwLjAgMC4wCitsb2d0MDAwMSBsb2cxMCAxLjAgLTAuMCAtPiAwLjAgLTAuMAorbG9ndDAwMDIgbG9nMTAgLTEuMCAwLjAgLT4gMC4wIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMDMgbG9nMTAgLTEuMCAtMC4wIC0+IDAuMCAtMS4zNjQzNzYzNTM4NDE4NDE0CistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiByZWFsIGF4aXMKK2xvZ3QwMDEwIGxvZzEwIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gLTMyMy4wMDUxODUzNDc0NTE4IDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMTEgbG9nMTAgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0wLjAgLT4gLTMyMy4wMDUxODUzNDc0NTE4IC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDEyIGxvZzEwIC0xZS0zMDUgMC4wIC0+IC0zMDUuMCAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDEzIGxvZzEwIC0xZS0zMDUgLTAuMCAtPiAtMzA1LjAgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMTQgbG9nMTAgLTFlLTE1MCAwLjAgLT4gLTE1MC4wIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMTUgbG9nMTAgLTFlLTE1MCAtMC4wIC0+IC0xNTAuMCAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAxNiBsb2cxMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gLTE2LjAgMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAxNyBsb2cxMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IC0xNi4wIC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDE4IGxvZzEwIC0wLjAwMSAwLjAgLT4gLTMuMCAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDE5IGxvZzEwIC0wLjAwMSAtMC4wIC0+IC0zLjAgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjAgbG9nMTAgLTAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IC0wLjIzNzMyMTQzNjI3MjU2MzgzIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjEgbG9nMTAgLTAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAtMC4yMzczMjE0MzYyNzI1NjM4MyAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAyMiBsb2cxMCAtMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gLTQuODIxNjM3MzMyNzY2NDM2ZS0xNyAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDIzIGxvZzEwIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gLTQuODIxNjM3MzMyNzY2NDM2ZS0xNyAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAyNCBsb2cxMCAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiA5LjY0MzI3NDY2NTUzMjg2OTZlLTE3IDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjUgbG9nMTAgLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDkuNjQzMjc0NjY1NTMyODY5NmUtMTcgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjYgbG9nMTAgLTEuMDAwOTk5OTk5OTk5OTk5OSAwLjAgLT4gMC4wMDA0MzQwNzc0NzkzMTg1OTI5IDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjcgbG9nMTAgLTEuMDAwOTk5OTk5OTk5OTk5OSAtMC4wIC0+IDAuMDAwNDM0MDc3NDc5MzE4NTkyOSAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAyOCBsb2cxMCAtMi4wIDAuMCAtPiAwLjMwMTAyOTk5NTY2Mzk4MTIgMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAyOSBsb2cxMCAtMi4wIC0wLjAgLT4gMC4zMDEwMjk5OTU2NjM5ODEyIC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDMwIGxvZzEwIC0yMy4wIDAuMCAtPiAxLjM2MTcyNzgzNjAxNzU5MjggMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAzMSBsb2cxMCAtMjMuMCAtMC4wIC0+IDEuMzYxNzI3ODM2MDE3NTkyOCAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAzMiBsb2cxMCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAwLjAgLT4gMTYuMCAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDMzIGxvZzEwIC0xMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMTYuMCAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAzNCBsb2cxMCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgMC4wIC0+IDE1MC4wIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMzUgbG9nMTAgLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gMTUwLjAgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMzYgbG9nMTAgLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiAyOTkuMCAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDM3IGxvZzEwIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtMC4wIC0+IDI5OS4wIC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDM4IGxvZzEwIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiAtMzIzLjAwNTE4NTM0NzQ1MTggMC4wCitsb2d0MDAzOSBsb2cxMCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wIC0+IC0zMjMuMDA1MTg1MzQ3NDUxOCAtMC4wCitsb2d0MDA0MCBsb2cxMCAxZS0zMDUgMC4wIC0+IC0zMDUuMCAwLjAKK2xvZ3QwMDQxIGxvZzEwIDFlLTMwNSAtMC4wIC0+IC0zMDUuMCAtMC4wCitsb2d0MDA0MiBsb2cxMCAxZS0xNTAgMC4wIC0+IC0xNTAuMCAwLjAKK2xvZ3QwMDQzIGxvZzEwIDFlLTE1MCAtMC4wIC0+IC0xNTAuMCAtMC4wCitsb2d0MDA0NCBsb2cxMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAtMTYuMCAwLjAKK2xvZ3QwMDQ1IGxvZzEwIDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAtMTYuMCAtMC4wCitsb2d0MDA0NiBsb2cxMCAwLjAwMSAwLjAgLT4gLTMuMCAwLjAKK2xvZ3QwMDQ3IGxvZzEwIDAuMDAxIC0wLjAgLT4gLTMuMCAtMC4wCitsb2d0MDA0OCBsb2cxMCAwLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAtMC4yMzczMjE0MzYyNzI1NjM4MyAwLjAKK2xvZ3QwMDQ5IGxvZzEwIDAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAtMC4yMzczMjE0MzYyNzI1NjM4MyAtMC4wCitsb2d0MDA1MCBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAtNC44MjE2MzczMzI3NjY0MzZlLTE3IDAuMAorbG9ndDAwNTEgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IC00LjgyMTYzNzMzMjc2NjQzNmUtMTcgLTAuMAorbG9ndDAwNTIgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiA5LjY0MzI3NDY2NTUzMjg2OTZlLTE3IDAuMAorbG9ndDAwNTMgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAyIC0wLjAgLT4gOS42NDMyNzQ2NjU1MzI4Njk2ZS0xNyAtMC4wCitsb2d0MDA1NCBsb2cxMCAxLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDAuMDAwNDM0MDc3NDc5MzE4NTkyOSAwLjAKK2xvZ3QwMDU1IGxvZzEwIDEuMDAwOTk5OTk5OTk5OTk5OSAtMC4wIC0+IDAuMDAwNDM0MDc3NDc5MzE4NTkyOSAtMC4wCitsb2d0MDA1NiBsb2cxMCAyLjAgMC4wIC0+IDAuMzAxMDI5OTk1NjYzOTgxMiAwLjAKK2xvZ3QwMDU3IGxvZzEwIDIuMCAtMC4wIC0+IDAuMzAxMDI5OTk1NjYzOTgxMiAtMC4wCitsb2d0MDA1OCBsb2cxMCAyMy4wIDAuMCAtPiAxLjM2MTcyNzgzNjAxNzU5MjggMC4wCitsb2d0MDA1OSBsb2cxMCAyMy4wIC0wLjAgLT4gMS4zNjE3Mjc4MzYwMTc1OTI4IC0wLjAKK2xvZ3QwMDYwIGxvZzEwIDEwMDAwMDAwMDAwMDAwMDAwLjAgMC4wIC0+IDE2LjAgMC4wCitsb2d0MDA2MSBsb2cxMCAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMTYuMCAtMC4wCitsb2d0MDA2MiBsb2cxMCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMTUwLjAgMC4wCitsb2d0MDA2MyBsb2cxMCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDE1MC4wIC0wLjAKK2xvZ3QwMDY0IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiAyOTkuMCAwLjAKK2xvZ3QwMDY1IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gMjk5LjAgLTAuMAorCistLSByYW5kb20gaW5wdXRzCitsb2d0MDA2NiBsb2cxMCAtMS45ODMwNDU0OTQ1MTg2MTkxZS0xNiAtMi4wMzM0NDQ4MDI1NjczMzQ2IC0+IDAuMzA4MjMyMzg4MDY3OTg1MDMgLTAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMDY3IGxvZzEwIC0wLjk2NzQ1ODUzMDI0NzQxODU3IC0wLjg0OTk1ODE2MjI4Mjk5NjkyIC0+IDAuMTA5ODQ1Mjg0MjIyODQ4MDIgLTEuMDUxMzIxNDI2MTc0MDg2Citsb2d0MDA2OCBsb2cxMCAtMC4xNjAzNjQ0MzEzOTQ4NDE4IC0wLjI5Mjk5NDIxMTEwNDE4MzUgLT4gLTAuNDc2MjQxMTU2MzMzMDU0MTkgLTAuODk5Njc4ODQwMjMwNTk1OTcKK2xvZ3QwMDY5IGxvZzEwIC0wLjE1OTE3OTEzMTY4NDM4Njk5IC0wLjI1MjM4Nzk5MjUxMTMyMTc3IC0+IC0wLjUyNTIxMzA0NjQxNjY1OTU2IC0wLjkyNjU1NzkwNjQ1Njg4MTE5Citsb2d0MDA3MCBsb2cxMCAtMC42ODkwNzgxODUzNTA3ODgwMiAtMy4wNjkzMTA1ODUzNDc2MzQ2IC0+IDAuNDk3NzE4Nzg4NTA2NjQ0OCAtMC43NzgwOTk1MzExOTMyODgyMworbG9ndDAwNzEgbG9nMTAgLTE3LjI2ODEzMzQ0NzU2NTU4OSA2LjgxNjUxMjAwMTQ2MDQ3NTYgLT4gMS4yNjg2OTEyMDA4MDk4NTM0IDEuMjAxMDk1NDYyOTEwNDIwMgorbG9ndDAwNzIgbG9nMTAgLTEuNzE1Mzg5NDQ3OTY5MDMyOCAyNi40MzQwNTUzNzI4MDI2MzYgLT4gMS40MjMwNzYzMDkwMzI3NTEgMC43MTAzMzE0NTg1OTAwNTMwOQorbG9ndDAwNzMgbG9nMTAgLTguMDQ1Njc5NDY0ODkzNjU3OGUtMDYgMC4xOTcyMjc1ODA1NzU3MDIwOCAtPiAtMC43MDUwMzIzNTI0NDk4NzU2MSAwLjY4MjIwNTg5MzQ4MDU1NTE2Citsb2d0MDA3NCBsb2cxMCAtMi40MzA2NDQyNjkxMzIzMTczIDAuNjg0NjkxOTc1MDcwMDk5NiAtPiAwLjQwMjMwMjU3ODQ1MzMyNTk1IDEuMjQ1MTI5MjUzMzc0ODkyMworbG9ndDAwNzUgbG9nMTAgLTMuNTQ4ODA0OTI1MDg4ODE5NCAwLjQ1MzI0MDQwNjQzMTg1MjU0IC0+IDAuNTUzNTk1NTM5NzcxNDEwNjMgMS4zMDkyMDg1MTA4ODY2NDA1Citsb2d0MDA3NiBsb2cxMCAwLjE4NDE4NTE2ODUxNTEwMTg5IC0wLjI2MDYyNTE4ODM2MjEyNjE3IC0+IC0wLjQ5NjAyMDE5NzMyOTEzNjM4IC0wLjQxNTAwNTAzNTU2NjA0MzAxCitsb2d0MDA3NyBsb2cxMCAyLjcxMjQ4Mzc3OTU2MzgzOTkgLTEzLjE0ODc2OTA2NzEzMzM4NyAtPiAxLjEyNzkzNDg2MTMzMTcwMDggLTAuNTkzODM2MTY2NDM4MDMyMTYKK2xvZ3QwMDc4IGxvZzEwIDMuNjUyMTI3NTQ3NjE2OTE0OWUtMTMgLTMuNzgyMDU0MzAyMzE3MDY3M2UtMDUgLT4gLTQuNDIyMjcyMjM5ODk0MTExMiAtMC42ODIxODgxNzI3MjcxNzExNAorbG9ndDAwNzkgbG9nMTAgNS4wODc3NTQ1ODEzODYyMjM5IC0xLjI4MzQ5NzgzMjY3ODY4NTIgLT4gMC43MTk5MjM3MTgwNjQyNjg0NyAtMC4xMDczMjEwNDM1MjE1OTI4MworbG9ndDAwODAgbG9nMTAgMC4yNjQ3Nzk4NjgwODQ2MTUxMiAtMC42NzY1OTAwMTE5NDE4NzQyOSAtPiAtMC4xMzg3MzEzOTkzNTI4MTY4MSAtMC41MjAxODY0OTYzMTMwMDIyOQorbG9ndDAwODEgbG9nMTAgMC4wMDE0NzU0MjYxMzk4MDcxOTYyIDUuMzUxNDY5MTYwODIwNTQ0MiAtPiAwLjcyODQ3MzA0MzU0NTI4ODE5IDAuNjgyMDY4NDM5ODE3ODAzMworbG9ndDAwODIgbG9nMTAgMC4yOTY2NzMzNDQ2MjE1Nzg4NSAwLjAwMDIwMDU2MDQ1MDQyNTg0Nzk1IC0+IC0wLjUyNzcyMTM3Mjk5Mjk2ODA2IDAuMDAwMjkzNTk2NTk0NDI5MzcyNjEKK2xvZ3QwMDgzIGxvZzEwIDAuODIxMDQyMzM2NzEwOTk0MjUgMy45MDA1Mzg3MTMwMTMzMTAyIC0+IDAuNjAwNTM4ODkwMjgzNDkzNjEgMC41OTIwODY5MDAyMTE4NDAxOAorbG9ndDAwODQgbG9nMTAgMC4yNzI2ODEzNTM1ODE4MDY2NyAxMjQuNDIwODgxMTA5NDU4MDQgLT4gMi4wOTQ4OTQzMTU1MzgwNjkgMC42ODEyMzYzNzY3MzY1Njk4OQorbG9ndDAwODUgbG9nMTAgMC4wMDI2Mjg2OTU5MTY4MjY3NDg1IDAuNDc3OTU4MDgxODA1NzMwMTMgLT4gLTAuMzIwNjAzNjIyMjYxMDA4MTQgMC42Nzk3OTk2NDgxNjg3NzA4MQorCistLSB2YWx1ZXMgbmVhciBpbmZpbml0eQorbG9ndDAxMDAgbG9nMTAgMS4wNTEyMDI1NzQ0MDAzMTcyZSszMDggNy4yNjIxNjY5NzUwNjY0NjExZSszMDcgLT4gMzA4LjEwNjQxNTYyNjgyMDY1IDAuMjYyNTU0NjE0MDgyNTY5NzUKK2xvZ3QwMTAxIGxvZzEwIDUuNTM0NDI0OTAzNDM3MjEyNmUrMzA3IC0xLjIxNTU4NTkxNTg0MzEyNzVlKzMwOCAtPiAzMDguMTI1NjkxMDYwMDkyMDkgLTAuNDk2NjM4NzgyMjk2MjEyCitsb2d0MDEwMiBsb2cxMCAtMS4zMTU1NTc1NDAzNDY5NDA4ZSszMDggMS4xNjEwNzkzNTQxNjYzODY0ZSszMDggLT4gMzA4LjI0NDE5MDUyMDkxMDE5IDEuMDUwMzM1OTc3NzcwNTI2NgorbG9ndDAxMDMgbG9nMTAgLTEuNjMyMzY2NzIwOTczMjM1ZSszMDggLTEuNTQyOTk0NDYyMTE0NDhlKzMwOCAtPiAzMDguMzUxNDUwMDgzNDA5MyAtMS4wMzU1MDI0OTI0Mzc4MjIyCitsb2d0MDEwNCBsb2cxMCAwLjAgNS45NDQ5Mjc2NjkyMzI3NzEyZSszMDcgLT4gMzA3Ljc3NDE0NjU3NTAxMTE3IDAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMTA1IGxvZzEwIC0wLjAgMS4xMjAxODUwNDU5MDI1NjkyZSszMDggLT4gMzA4LjA0OTI4OTc3MDY4NDY1IDAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMTA2IGxvZzEwIDAuMCAtMS42MjE0MjI1OTMzNDY2NTI4ZSszMDggLT4gMzA4LjIwOTg5NjIyMDMwMTc0IC0wLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MDEwNyBsb2cxMCAtMC4wIC0xLjc0NTMyNjk3OTE1OTEwNThlKzMwOCAtPiAzMDguMjQxODc2ODAyMDM1MzkgLTAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMTA4IGxvZzEwIDEuNDQwODYwNTc3NjAxNDI4ZSszMDggMC4wIC0+IDMwOC4xNTg2MjE5NTkwODc1NSAwLjAKK2xvZ3QwMTA5IGxvZzEwIDEuMzkxNTE1MTc2MTQ4MjgyZSszMDggLTAuMCAtPiAzMDguMTQzNDg3OTQ3MjAwMDcgLTAuMAorbG9ndDAxMTAgbG9nMTAgLTEuMjAxMzU0NDAxMjk1Mjk2ZSszMDggMC4wIC0+IDMwOC4wNzk2NzExNDM4MDc3MyAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMTExIGxvZzEwIC0xLjY3MDQzMzc4MjU5NzY4MDRlKzMwOCAtMC4wIC0+IDMwOC4yMjI4MjkyNjQ1MTYyNCAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDExMiBsb2cxMCA3LjIyNzY5NzQ2NTUxOTAyMjNlKzMwNyA3Ljk0ODc5NzExMzY5MTY0IC0+IDMwNy44NTg5OTk5NjU3MTk5MyA0Ljc3NjIzNTc4MDA4NTg0NjNlLTMwOAorbG9ndDAxMTMgbG9nMTAgMS4xMjA3ODU5NTkzNzE2MDc2ZSszMDggLTYuMTk1NjIwMDg2ODIyMTE0NyAtPiAzMDguMDQ5NTIyNjgxNjk0NTUgLTIuNDAwNzQ3MDc2Nzk2MzU5N2UtMzA4Citsb2d0MDExNCBsb2cxMCAtNC42Njc4OTMzODc0NDcxMDQ1ZSszMDcgOS45NDcxMDc4OTMyMjAzODIgLT4gMzA3LjY2OTEyMDkyODM5OTAyIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAxMTUgbG9nMTAgLTEuNTEwODAxMjQ1Mzk1MDE0MmUrMzA4IC01LjMxMTcxOTcxNzkzNzU2MTkgLT4gMzA4LjE3OTIwNzMzNDE1NjUgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAxMTYgbG9nMTAgNy40OTAzNzUwODcxNTA0NDM1IDEuNTMyMDcwMzc3NjYyNjM1MmUrMzA4IC0+IDMwOC4xODUyNzg3MTU2NDE1NyAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MDExNyBsb2cxMCA1Ljk3NjAzMjU1MjU2NTQ3NzggLTguMDE0OTQ3Mzk5NzM0OTEyM2UrMzA3IC0+IDMwNy45MDM5MDA2NzY1MjQyNCAtMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDAxMTggbG9nMTAgLTcuODgwMTk0MjA2Mzg2NjI5IDEuNzg2MTg0NTgxNDc2NzQ0MWUrMzA4IC0+IDMwOC4yNTE5MjYzMzYxNzMzMSAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MDExOSBsb2cxMCAtOS44ODY0Mzg5OTM4NTI4NjUgLTYuMTkyMzU3ODEwODA3NDdlKzMwNyAtPiAzMDcuNzkxODU2MDQzMDgzMzggLTAuNjgyMTg4MTc2OTIwOTIwNzEKKworLS0gdmFsdWVzIG5lYXIgMAorbG9ndDAxMjAgbG9nMTAgMi4yOTk2ODY3NTc5MjI3Nzc5ZS0zMDggNi43ODYxODQwNzcwOTM5MTI1ZS0zMTIgLT4gLTMwNy42MzgzMzEyOTY2MjU3MiAwLjAwMDEyODE1NjY4MDU2MzYyMzA1Citsb2d0MDEyMSBsb2cxMCA2LjkxNjkxOTA0MTc3NzQ1MTZlLTMyMyAtOS4wNDE0MDEzMTg4OTQ4MTE4ZS0zMjIgLT4gLTMyMS4wNDI0OTcwNjcyNzE0OCAtMC42NDkwMjgwNTM1MzMwNjA1OQorbG9ndDAxMjIgbG9nMTAgLTEuNTM3ODA2NDk2MjkxNDAxMWUtMzE2IDEuODI0MzYyODM4OTM1NDYzNWUtMzEwIC0+IC0zMDkuNzM4ODg4NzgyNjMyMjIgMC42ODIxODg1NDI5OTk4OTQyOQorbG9ndDAxMjMgbG9nMTAgLTIuMzMxOTg5ODQ4MzcwNjgzN2UtMzIxIC0yLjIzNTg3NjM5NDE4NjYzNzFlLTMxMyAtPiAtMzEyLjY1MDU1MjIwOTE5NjQxIC0wLjY4MjE4ODE4MTQ1MDU1NTM4Citsb2d0MDEyNCBsb2cxMCAwLjAgMy44NzI3NzAxMDEwODExMjFlLTMxNSAtPiAtMzE0LjQxMTk3ODI4MzIzNDc2IDAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMTI1IGxvZzEwIC0wLjAgOS42MzQyODAwOTM5MDQzMDc2ZS0zMjIgLT4gLTMyMS4wMTYxODA3MzE3NTMzMSAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MDEyNiBsb2cxMCAwLjAgLTIuMjY2MDk5MzkzNDI3ODM0ZS0zMDggLT4gLTMwNy42NDQ3MjEwNDU0NTY0OSAtMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDAxMjcgbG9nMTAgLTAuMCAtMi4xMTg0Njk1NjczNzY2NjI2ZS0zMTUgLT4gLTMxNC42NzM5Nzc3NzA0MjQwNyAtMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDAxMjggbG9nMTAgMS4xMzYzNTA5ODU0MzQ4NjcxZS0zMjIgMC4wIC0+IC0zMjEuOTQ0NDg3NTA3MDk4MTkgMC4wCitsb2d0MDEyOSBsb2cxMCAzLjU1NzI3MjY1MDA1Njk3NTFlLTMyMiAtMC4wIC0+IC0zMjEuNDQ4ODgyODQ2Njg0NTEgLTAuMAorbG9ndDAxMzAgbG9nMTAgLTIuMzY5NjA3MTA3NDA0MDU5M2UtMzEwIDAuMCAtPiAtMzA5LjYyNTMyMzY1NjE5NzIyIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAxMzEgbG9nMTAgLTIuODEzMjgzODk3MjY2OTM0ZS0zMTcgLTAuMCAtPiAtMzE2LjU1MDc4NjQzOTYxMDQyIC0xLjM2NDM3NjM1Mzg0MTg0MTQKKworLS0gdmFsdWVzIG5lYXIgdGhlIHVuaXQgY2lyY2xlCitsb2d0MDIwMCBsb2cxMCAtMC41OTk5OTk5OTk5OTk5OTk5OCAwLjgwMDAwMDAwMDAwMDAwMDA0IC0+IDkuNjQzMjc0NjY1NTMyODcwOWUtMTggMC45NjE2NTcxNTc1Njg0NjgxNQorbG9ndDAyMDEgbG9nMTAgMC43OTk5OTk5OTk5OTk5OTk5MyAwLjYwMDAwMDAwMDAwMDAwMDA5IC0+IDIuNjc2NTQ2MzkxNjE0NzYyMmUtMzMgMC4yNzk0Njg5ODA2NDc1NDc2CisKKy0tIHNwZWNpYWwgdmFsdWVzCitsb2d0MTAwMCBsb2cxMCAtMC4wIDAuMCAtPiAtaW5mIDEuMzY0Mzc2MzUzODQxODQxNCAgICAgICAgIGRpdmlkZS1ieS16ZXJvCitsb2d0MTAwMSBsb2cxMCAwLjAgMC4wIC0+IC1pbmYgMC4wICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZS1ieS16ZXJvCitsb2d0MTAwMiBsb2cxMCAwLjAgaW5mIC0+IGluZiAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAwMyBsb2cxMCAyLjMgaW5mIC0+IGluZiAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAwNCBsb2cxMCAtMC4wIGluZiAtPiBpbmYgMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDEwMDUgbG9nMTAgLTIuMyBpbmYgLT4gaW5mIDAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QxMDA2IGxvZzEwIDAuMCBuYW4gLT4gbmFuIG5hbgorbG9ndDEwMDcgbG9nMTAgMi4zIG5hbiAtPiBuYW4gbmFuCitsb2d0MTAwOCBsb2cxMCAtMC4wIG5hbiAtPiBuYW4gbmFuCitsb2d0MTAwOSBsb2cxMCAtMi4zIG5hbiAtPiBuYW4gbmFuCitsb2d0MTAxMCBsb2cxMCAtaW5mIDAuMCAtPiBpbmYgMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MTAxMSBsb2cxMCAtaW5mIDIuMyAtPiBpbmYgMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MTAxMiBsb2cxMCBpbmYgMC4wIC0+IGluZiAwLjAKK2xvZ3QxMDEzIGxvZzEwIGluZiAyLjMgLT4gaW5mIDAuMAorbG9ndDEwMTQgbG9nMTAgLWluZiBpbmYgLT4gaW5mIDEuMDIzMjgyMjY1MzgxMzgxMQorbG9ndDEwMTUgbG9nMTAgaW5mIGluZiAtPiBpbmYgMC4zNDEwOTQwODg0NjA0NjAzNQorbG9ndDEwMTYgbG9nMTAgaW5mIG5hbiAtPiBpbmYgbmFuCitsb2d0MTAxNyBsb2cxMCAtaW5mIG5hbiAtPiBpbmYgbmFuCitsb2d0MTAxOCBsb2cxMCBuYW4gMC4wIC0+IG5hbiBuYW4KK2xvZ3QxMDE5IGxvZzEwIG5hbiAyLjMgLT4gbmFuIG5hbgorbG9ndDEwMjAgbG9nMTAgbmFuIGluZiAtPiBpbmYgbmFuCitsb2d0MTAyMSBsb2cxMCBuYW4gbmFuIC0+IG5hbiBuYW4KK2xvZ3QxMDIyIGxvZzEwIC0wLjAgLTAuMCAtPiAtaW5mIC0xLjM2NDM3NjM1Mzg0MTg0MTQgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xvZ3QxMDIzIGxvZzEwIDAuMCAtMC4wIC0+IC1pbmYgLTAuMCAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xvZ3QxMDI0IGxvZzEwIDAuMCAtaW5mIC0+IGluZiAtMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDEwMjUgbG9nMTAgMi4zIC1pbmYgLT4gaW5mIC0wLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAyNiBsb2cxMCAtMC4wIC1pbmYgLT4gaW5mIC0wLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAyNyBsb2cxMCAtMi4zIC1pbmYgLT4gaW5mIC0wLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAyOCBsb2cxMCAtaW5mIC0wLjAgLT4gaW5mIC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QxMDI5IGxvZzEwIC1pbmYgLTIuMyAtPiBpbmYgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDEwMzAgbG9nMTAgaW5mIC0wLjAgLT4gaW5mIC0wLjAKK2xvZ3QxMDMxIGxvZzEwIGluZiAtMi4zIC0+IGluZiAtMC4wCitsb2d0MTAzMiBsb2cxMCAtaW5mIC1pbmYgLT4gaW5mIC0xLjAyMzI4MjI2NTM4MTM4MTEKK2xvZ3QxMDMzIGxvZzEwIGluZiAtaW5mIC0+IGluZiAtMC4zNDEwOTQwODg0NjA0NjAzNQorbG9ndDEwMzQgbG9nMTAgbmFuIC0wLjAgLT4gbmFuIG5hbgorbG9ndDEwMzUgbG9nMTAgbmFuIC0yLjMgLT4gbmFuIG5hbgorbG9ndDEwMzYgbG9nMTAgbmFuIC1pbmYgLT4gaW5mIG5hbgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBzcXJ0OiBTcXVhcmUgcm9vdCAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gemVyb3MKK3NxcnQwMDAwIHNxcnQgMC4wIDAuMCAtPiAwLjAgMC4wCitzcXJ0MDAwMSBzcXJ0IDAuMCAtMC4wIC0+IDAuMCAtMC4wCitzcXJ0MDAwMiBzcXJ0IC0wLjAgMC4wIC0+IDAuMCAwLjAKK3NxcnQwMDAzIHNxcnQgLTAuMCAtMC4wIC0+IDAuMCAtMC4wCisKKy0tIHZhbHVlcyBhbG9uZyBib3RoIHNpZGVzIG9mIHJlYWwgYXhpcworc3FydDAwMTAgc3FydCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgMC4wIC0+IDAuMCAzLjE0MzQ1NTU2OTQwNTI1NzZlLTE2Mgorc3FydDAwMTEgc3FydCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAwLjAgLTMuMTQzNDU1NTY5NDA1MjU3NmUtMTYyCitzcXJ0MDAxMiBzcXJ0IC0xZS0zMDUgMC4wIC0+IDAuMCAzLjE2MjI3NzY2MDE2ODM3OTFlLTE1Mworc3FydDAwMTMgc3FydCAtMWUtMzA1IC0wLjAgLT4gMC4wIC0zLjE2MjI3NzY2MDE2ODM3OTFlLTE1Mworc3FydDAwMTQgc3FydCAtMWUtMTUwIDAuMCAtPiAwLjAgOS45OTk5OTk5OTk5OTk5OTk2ZS03Ngorc3FydDAwMTUgc3FydCAtMWUtMTUwIC0wLjAgLT4gMC4wIC05Ljk5OTk5OTk5OTk5OTk5OTZlLTc2CitzcXJ0MDAxNiBzcXJ0IC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAwLjAgMWUtMDgKK3NxcnQwMDE3IHNxcnQgLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAwLjAgLTFlLTA4CitzcXJ0MDAxOCBzcXJ0IC0wLjAwMSAwLjAgLT4gMC4wIDAuMDMxNjIyNzc2NjAxNjgzNzkxCitzcXJ0MDAxOSBzcXJ0IC0wLjAwMSAtMC4wIC0+IDAuMCAtMC4wMzE2MjI3NzY2MDE2ODM3OTEKK3NxcnQwMDIwIHNxcnQgLTAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuMCAwLjc2MDkyMDQ5NTE4OTg3MTkzCitzcXJ0MDAyMSBzcXJ0IC0wLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gMC4wIC0wLjc2MDkyMDQ5NTE4OTg3MTkzCitzcXJ0MDAyMiBzcXJ0IC0wLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAwLjAgMC45OTk5OTk5OTk5OTk5OTk4OQorc3FydDAwMjMgc3FydCAtMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IDAuMCAtMC45OTk5OTk5OTk5OTk5OTk4OQorc3FydDAwMjQgc3FydCAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAwLjAgMS4wCitzcXJ0MDAyNSBzcXJ0IC0xLjAwMDAwMDAwMDAwMDAwMDIgLTAuMCAtPiAwLjAgLTEuMAorc3FydDAwMjYgc3FydCAtMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAwLjAgMS4wMDA0OTk4NzUwNjI0NjEKK3NxcnQwMDI3IHNxcnQgLTEuMDAwOTk5OTk5OTk5OTk5OSAtMC4wIC0+IDAuMCAtMS4wMDA0OTk4NzUwNjI0NjEKK3NxcnQwMDI4IHNxcnQgLTIuMCAwLjAgLT4gMC4wIDEuNDE0MjEzNTYyMzczMDk1MQorc3FydDAwMjkgc3FydCAtMi4wIC0wLjAgLT4gMC4wIC0xLjQxNDIxMzU2MjM3MzA5NTEKK3NxcnQwMDMwIHNxcnQgLTIzLjAgMC4wIC0+IDAuMCA0Ljc5NTgzMTUyMzMxMjcxOTEKK3NxcnQwMDMxIHNxcnQgLTIzLjAgLTAuMCAtPiAwLjAgLTQuNzk1ODMxNTIzMzEyNzE5MQorc3FydDAwMzIgc3FydCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAwLjAgLT4gMC4wIDEwMDAwMDAwMC4wCitzcXJ0MDAzMyBzcXJ0IC0xMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMC4wIC0xMDAwMDAwMDAuMAorc3FydDAwMzQgc3FydCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgMC4wIC0+IDAuMCA5Ljk5OTk5OTk5OTk5OTk5OTNlKzc0CitzcXJ0MDAzNSBzcXJ0IC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDAuMCAtOS45OTk5OTk5OTk5OTk5OTkzZSs3NAorc3FydDAwMzYgc3FydCAtMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgMC4wIC0+IDAuMCAzLjE2MjI3NzY2MDE2ODM3OTZlKzE0OQorc3FydDAwMzcgc3FydCAtMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLTAuMCAtPiAwLjAgLTMuMTYyMjc3NjYwMTY4Mzc5NmUrMTQ5CitzcXJ0MDAzOCBzcXJ0IDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiAzLjE0MzQ1NTU2OTQwNTI1NzZlLTE2MiAwLjAKK3NxcnQwMDM5IHNxcnQgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAzLjE0MzQ1NTU2OTQwNTI1NzZlLTE2MiAtMC4wCitzcXJ0MDA0MCBzcXJ0IDFlLTMwNSAwLjAgLT4gMy4xNjIyNzc2NjAxNjgzNzkxZS0xNTMgMC4wCitzcXJ0MDA0MSBzcXJ0IDFlLTMwNSAtMC4wIC0+IDMuMTYyMjc3NjYwMTY4Mzc5MWUtMTUzIC0wLjAKK3NxcnQwMDQyIHNxcnQgMWUtMTUwIDAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OTZlLTc2IDAuMAorc3FydDAwNDMgc3FydCAxZS0xNTAgLTAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OTZlLTc2IC0wLjAKK3NxcnQwMDQ0IHNxcnQgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gMWUtMDggMC4wCitzcXJ0MDA0NSBzcXJ0IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAxZS0wOCAtMC4wCitzcXJ0MDA0NiBzcXJ0IDAuMDAxIDAuMCAtPiAwLjAzMTYyMjc3NjYwMTY4Mzc5MSAwLjAKK3NxcnQwMDQ3IHNxcnQgMC4wMDEgLTAuMCAtPiAwLjAzMTYyMjc3NjYwMTY4Mzc5MSAtMC4wCitzcXJ0MDA0OCBzcXJ0IDAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuNzYwOTIwNDk1MTg5ODcxOTMgMC4wCitzcXJ0MDA0OSBzcXJ0IDAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAwLjc2MDkyMDQ5NTE4OTg3MTkzIC0wLjAKK3NxcnQwMDUwIHNxcnQgMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAKK3NxcnQwMDUxIHNxcnQgMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IDAuOTk5OTk5OTk5OTk5OTk5ODkgLTAuMAorc3FydDAwNTIgc3FydCAxLjAwMDAwMDAwMDAwMDAwMDIgMC4wIC0+IDEuMCAwLjAKK3NxcnQwMDUzIHNxcnQgMS4wMDAwMDAwMDAwMDAwMDAyIC0wLjAgLT4gMS4wIC0wLjAKK3NxcnQwMDU0IHNxcnQgMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAxLjAwMDQ5OTg3NTA2MjQ2MSAwLjAKK3NxcnQwMDU1IHNxcnQgMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMS4wMDA0OTk4NzUwNjI0NjEgLTAuMAorc3FydDAwNTYgc3FydCAyLjAgMC4wIC0+IDEuNDE0MjEzNTYyMzczMDk1MSAwLjAKK3NxcnQwMDU3IHNxcnQgMi4wIC0wLjAgLT4gMS40MTQyMTM1NjIzNzMwOTUxIC0wLjAKK3NxcnQwMDU4IHNxcnQgMjMuMCAwLjAgLT4gNC43OTU4MzE1MjMzMTI3MTkxIDAuMAorc3FydDAwNTkgc3FydCAyMy4wIC0wLjAgLT4gNC43OTU4MzE1MjMzMTI3MTkxIC0wLjAKK3NxcnQwMDYwIHNxcnQgMTAwMDAwMDAwMDAwMDAwMDAuMCAwLjAgLT4gMTAwMDAwMDAwLjAgMC4wCitzcXJ0MDA2MSBzcXJ0IDEwMDAwMDAwMDAwMDAwMDAwLjAgLTAuMCAtPiAxMDAwMDAwMDAuMCAtMC4wCitzcXJ0MDA2MiBzcXJ0IDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IDAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OTNlKzc0IDAuMAorc3FydDAwNjMgc3FydCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDkuOTk5OTk5OTk5OTk5OTk5M2UrNzQgLTAuMAorc3FydDAwNjQgc3FydCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gMy4xNjIyNzc2NjAxNjgzNzk2ZSsxNDkgMC4wCitzcXJ0MDA2NSBzcXJ0IDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gMy4xNjIyNzc2NjAxNjgzNzk2ZSsxNDkgLTAuMAorCistLSByYW5kb20gaW5wdXRzCitzcXJ0MDEwMCBzcXJ0IC0wLjM0MjUyNTQyNTQxNTQ5OTEzIC0yMjMwMzk4ODAuMTUwNzYyMTEgLT4gMTA1NjAuMzAwMTgwNTg3NTkyIC0xMDU2MC4zMDAxOTY4MDUxOTIKK3NxcnQwMTAxIHNxcnQgLTAuODg3OTA3OTEzOTMwMTg5MDkgLTUuMzMwNzc1MTczMDgyNzQwMiAtPiAxLjUwMjcxNTQ2MTM2ODkwMDQgLTEuNzczNzE0MDg5NjM0MzI5MQorc3FydDAxMDIgc3FydCAtMTEzOTE2Ljg5MjkxMzEwNzY3IC0wLjAxODE0MzM3NDYyNjE1Mzg1OCAtPiAyLjY4Nzc4MTc4NzUzNTExNzhlLTA1IC0zMzcuNTE1NzY2OTEwMzg5NTIKK3NxcnQwMTAzIHNxcnQgLTAuNjMxODcxNzIzODYxOTcxMjEgLTAuMjYyOTM5MTMzNjY2MTc2OTQgLT4gMC4xNjIwNTcwNzQ5NTI2NjE1MyAtMC44MTEyNTQ3MTkxODc2MTk3MQorc3FydDAxMDQgc3FydCAtMC4wNTgxODUxNjkzMDg5MDYyMTUgLTIuMzU0ODMxMjk5MDQzMDk5MSAtPiAxLjA3MTc2NjAzNDI0MjAwNzIgLTEuMDk4NTc1MjU5ODA4Njk2Ngorc3FydDAxMDUgc3FydCAtMS4wNTgwNTg0NzY1OTM1ODk2IDAuMTQ0MDAzMTkyNTkxNTE3MzYgLT4gMC4wNjk4Mzc0ODkyNzAxMTEyNDIgMS4wMzA5ODc3NTUyNjI0NjgKK3NxcnQwMTA2IHNxcnQgLTEuMTY2NzU5NTk0NzUwNDkzMiAwLjExMTU5NzExNDczOTUzNjc4IC0+IDAuMDUxNTk4NTMxMzE5MzE1MjUxIDEuMDgxMzk4MTcwNTExMTIyOQorc3FydDAxMDcgc3FydCAtMC41MTIzNzI4NDExNDQ5OTA2IDAuMDI2MTc1NDMzNjQ4MzM5MDg1IC0+IDAuMDE4Mjc4MDI2MjYyNDE4NzE4IDAuNzE2MDM1NTYyOTM1OTc2MTQKK3NxcnQwMTA4IHNxcnQgLTMuNzQ1MzQwMDA2MDA2NzIyOCAxLjA5NDY1MDAzMTQ4MDk2MzUgLT4gMC4yNzk5MDA4ODU0MTY5MjQ5OCAxLjk1NTQyNDM4MTQ3NDIzNjcKK3NxcnQwMTA5IHNxcnQgLTAuMDAyNzczNjEyMTU3NTA5NzY3MyAxLjAzNjc5NDMwMDA4Mzk4MTcgLT4gMC43MTkwMzU2MDMzODcxOTE3NSAwLjcyMDk2MTcyNjUxMjUwNTQ1CitzcXJ0MDExMCBzcXJ0IDE1MDEuMjU1OTY5OTQ1MzE4OCAtMS4xOTk3MzI1MjA3MjgzNTg5IC0+IDM4Ljc0NjA0NzY2NDczMDk1OSAtMC4wMTU0ODE5OTg3MjAzNTUwMjQKK3NxcnQwMTExIHNxcnQgMS40ODMwMDc1MzI2ODUwNTc4IC0wLjY0MTAwODc4NDM2NzU1MzQ5IC0+IDEuMjQ0NzEyODE1NzQxMDk2IC0wLjI1NzQ5MjY0MjU4NDM0NTg0CitzcXJ0MDExMiBzcXJ0IDAuMDk1Mzk1NjE4NDk5NzM0NjAyIC0wLjQ4MjI2NTY1NzAxNjM5NTk1IC0+IDAuNTQxNzU5MDQwNTM0NzI4NzkgLTAuNDQ1MDkyMzk0MzQyMzE1NTEKK3NxcnQwMTEzIHNxcnQgMC41MDEwOTE4NTY4MTg2MzI3NyAtMC41NDA1NDAzNzM3OTg5MjU2MSAtPiAwLjc4NjgxNzk4NTgzMzIzODcgLTAuMzQzNDk3NzIzNDQ1MjA5NzkKK3NxcnQwMTE0IHNxcnQgMC45ODc3OTgwNzU5NTM2Nzg5NyAtMC4wMDAxOTg0ODc1ODQzNzIyNTE5MSAtPiAwLjk5Mzg4MDMxNzcwNjY1MTUzIC05Ljk4NTQ4NzIyNzk5MjE5NjhlLTA1CitzcXJ0MDExNSBzcXJ0IDExLjg0NTQ3MjM4MDc5MjI1OSAwLjAwMTAwNTExMDQ1ODE1MDY3NjEgLT4gMy40NDE3MjUyMDcyMzQ1Mzk3IDAuMDAwMTQ2MDE4NDA2MTIzNDY0NTEKK3NxcnQwMTE2IHNxcnQgMi4zNTU4MjQ5Njg2NzM1OTc1IDAuMjU2MDUxNTczNzE3NDQ0MDMgLT4gMS41MzcxMjc4NDc3Mzg2NjQ3IDAuMDgzMjg4OTY0NTc1NzYxNDA0CitzcXJ0MDExNyBzcXJ0IDAuNzc1ODQ4OTQxMjMxNTkwOTggMS4wNDk2NDIwNjI3MDE2MDc2IC0+IDEuMDIwMDc0NDM4NjM5MDg4NSAwLjUxNDQ5Mjg3NTY4NzU2NTUyCitzcXJ0MDExOCBzcXJ0IDEuODk2MTcxNTY2OTYwNDg5MyAwLjM0OTQwNzkzNDY3MTU4ODU0IC0+IDEuMzgyNzk5MTc4MTQxMTYxNSAwLjEyNjM0MDgwOTM1MDY2OTAyCitzcXJ0MDExOSBzcXJ0IDAuOTYwMjUzNzgzMTY1NjU4MDEgMC42OTU3MzIyNDg2MDE0MDUxNSAtPiAxLjAzNTg3MTAzNDIyMDk5OTggMC4zMzU4MTk5MTY1ODA5MzQ1NworCistLSB2YWx1ZXMgbmVhciAwCitzcXJ0MDEyMCBzcXJ0IDcuMzU3NzkzODM2NTA4Njg2NmUtMzEzIDguMTE4MTQwODQ2NTExMjc0M2UtMzE5IC0+IDguNTc3NzU4MzUzMTU0MzUxNmUtMTU3IDQuNzMyMDg3NjM0MjUxMTY4ZS0xNjMKK3NxcnQwMTIxIHNxcnQgMS4yNDA2ODgzODc0ODkyMTA4ZS0zMTAgLTUuMTIxMDEzMzMyNDI2OTc3NmUtMzEyIC0+IDEuMTE0MDk5MDA1NzQ2ODA1MmUtMTU1IC0yLjI5ODI3NTY5NDUzNDk5NzNlLTE1Nworc3FydDAxMjIgc3FydCAtNy4xMTQ1NDUzMDAxMTM5NTAyZS0zMjIgMi45NTYxMzc5MjQ0NzAzNzM1ZS0zMTQgLT4gMS4yMTU3NTg1ODA3NDgwMjg2ZS0xNTcgMS4yMTU3NTg2MTAwMDc3MjQyZS0xNTcKK3NxcnQwMTIzIHNxcnQgLTQuOTk2MzI0NDIwNjgwMTIxOGUtMzE0IC04LjQ3MTg0MjQ0MjM2OTAyMjdlLTMxOSAtPiAxLjg5NTA1ODIzMTI1NDA0MzdlLTE2MiAtMi4yMzUyNDU5NDE5NTc4OTcxZS0xNTcKK3NxcnQwMTI0IHNxcnQgMC4wIDcuNjk5NTUzNjA5Mzg1MTk1ZS0zMTggLT4gMS45NjIwODQ4MTA3Nzk3NDc2ZS0xNTkgMS45NjIwODQ4MTA3Nzk3NDc2ZS0xNTkKK3NxcnQwMTI1IHNxcnQgLTAuMCAzLjM5MDA4MjY2MDY0OTk0MTVlLTMwOSAtPiA0LjExNzA4Nzk2Mzk5MjIzMjdlLTE1NSA0LjExNzA4Nzk2Mzk5MjIzMjdlLTE1NQorc3FydDAxMjYgc3FydCAwLjAgLTkuODkwNzk4OTc3MjI1MDgyOGUtMzE5IC0+IDcuMDMyMzUzNDM4NjUyMzQyZS0xNjAgLTcuMDMyMzUzNDM4NjUyMzQyZS0xNjAKK3NxcnQwMTI3IHNxcnQgLTAuMCAtMS4zNzIyOTM5MzY3NTkwOTA4ZS0zMTUgLT4gMi42MTk0NDA3MTk2NTY2NzAyZS0xNTggLTIuNjE5NDQwNzE5NjU2NjcwMmUtMTU4CitzcXJ0MDEyOCBzcXJ0IDcuOTA1MDUwMzMzNDU5OTQ0N2UtMzIzIDAuMCAtPiA4Ljg5MTAzNDk5Nzk0MDMwOTllLTE2MiAwLjAKK3NxcnQwMTI5IHNxcnQgMS44NjIzMjQxNzY4MzQ5NDg2ZS0zMDkgLTAuMCAtPiA0LjMxNTQ2NTQxNzM1MDY1NzllLTE1NSAtMC4wCitzcXJ0MDEzMCBzcXJ0IC0yLjY2NTk3MTEzNDQ5OTg4N2UtMzA4IDAuMCAtPiAwLjAgMS42MzI3ODAxODU2MDM2NDkxZS0xNTQKK3NxcnQwMTMxIHNxcnQgLTEuNTQ3NzA2NjY5NDQ2NzI0NWUtMzEwIC0wLjAgLT4gMC4wIC0xLjI0NDA2ODU5NTE1MzMwNzdlLTE1NQorCistLSBpbnB1dHMgd2hvc2UgYWJzb2x1dGUgdmFsdWUgb3ZlcmZsb3dzCitzcXJ0MDE0MCBzcXJ0IDEuNjk5OTk5OTk5OTk5OTk5OWUrMzA4IC0xLjY5OTk5OTk5OTk5OTk5OTllKzMwOCAtPiAxLjQzMjUwODgyMzAxNTQ1NzNlKzE1NCAtNS45MzM2NDU4MjcxMjEyMjA3ZSsxNTMKK3NxcnQwMTQxIHNxcnQgLTEuNzk3ZSszMDggLTkuOTk5OTk5OTk5OTk5OTk5OWUrMzA2IC0+IDMuNzI4NDQ3NjQzMjA1NzMwN2UrMTUyIC0xLjM0MTA0MDY4OTk4MDI5MDFlKzE1NAorCistLSBzcGVjaWFsIHZhbHVlcworc3FydDEwMDAgc3FydCAwLjAgMC4wIC0+IDAuMCAwLjAKK3NxcnQxMDAxIHNxcnQgLTAuMCAwLjAgLT4gMC4wIDAuMAorc3FydDEwMDIgc3FydCAwLjAgaW5mIC0+IGluZiBpbmYKK3NxcnQxMDAzIHNxcnQgMi4zIGluZiAtPiBpbmYgaW5mCitzcXJ0MTAwNCBzcXJ0IGluZiBpbmYgLT4gaW5mIGluZgorc3FydDEwMDUgc3FydCAtMC4wIGluZiAtPiBpbmYgaW5mCitzcXJ0MTAwNiBzcXJ0IC0yLjMgaW5mIC0+IGluZiBpbmYKK3NxcnQxMDA3IHNxcnQgLWluZiBpbmYgLT4gaW5mIGluZgorc3FydDEwMDggc3FydCBuYW4gaW5mIC0+IGluZiBpbmYKK3NxcnQxMDA5IHNxcnQgMC4wIG5hbiAtPiBuYW4gbmFuCitzcXJ0MTAxMCBzcXJ0IDIuMyBuYW4gLT4gbmFuIG5hbgorc3FydDEwMTEgc3FydCAtMC4wIG5hbiAtPiBuYW4gbmFuCitzcXJ0MTAxMiBzcXJ0IC0yLjMgbmFuIC0+IG5hbiBuYW4KK3NxcnQxMDEzIHNxcnQgLWluZiAwLjAgLT4gMC4wIGluZgorc3FydDEwMTQgc3FydCAtaW5mIDIuMyAtPiAwLjAgaW5mCitzcXJ0MTAxNSBzcXJ0IGluZiAwLjAgLT4gaW5mIDAuMAorc3FydDEwMTYgc3FydCBpbmYgMi4zIC0+IGluZiAwLjAKK3NxcnQxMDE3IHNxcnQgLWluZiBuYW4gLT4gbmFuIGluZiAgICAgICBpZ25vcmUtaW1hZy1zaWduCitzcXJ0MTAxOCBzcXJ0IGluZiBuYW4gLT4gaW5mIG5hbgorc3FydDEwMTkgc3FydCBuYW4gMC4wIC0+IG5hbiBuYW4KK3NxcnQxMDIwIHNxcnQgbmFuIDIuMyAtPiBuYW4gbmFuCitzcXJ0MTAyMSBzcXJ0IG5hbiBuYW4gLT4gbmFuIG5hbgorc3FydDEwMjIgc3FydCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorc3FydDEwMjMgc3FydCAtMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3NxcnQxMDI0IHNxcnQgMC4wIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDI1IHNxcnQgMi4zIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDI2IHNxcnQgaW5mIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDI3IHNxcnQgLTAuMCAtaW5mIC0+IGluZiAtaW5mCitzcXJ0MTAyOCBzcXJ0IC0yLjMgLWluZiAtPiBpbmYgLWluZgorc3FydDEwMjkgc3FydCAtaW5mIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDMwIHNxcnQgbmFuIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDMxIHNxcnQgLWluZiAtMC4wIC0+IDAuMCAtaW5mCitzcXJ0MTAzMiBzcXJ0IC1pbmYgLTIuMyAtPiAwLjAgLWluZgorc3FydDEwMzMgc3FydCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorc3FydDEwMzQgc3FydCBpbmYgLTIuMyAtPiBpbmYgLTAuMAorc3FydDEwMzUgc3FydCBuYW4gLTAuMCAtPiBuYW4gbmFuCitzcXJ0MTAzNiBzcXJ0IG5hbiAtMi4zIC0+IG5hbiBuYW4KKworCistLSBGb3IgZXhwLCBjb3NoLCBzaW5oLCB0YW5oIHdlIGxpbWl0IHRlc3RzIHRvIGFyZ3VtZW50cyB3aG9zZQorLS0gaW1hZ2luYXJ5IHBhcnQgaXMgbGVzcyB0aGFuIDEwIGluIGFic29sdXRlIHZhbHVlOiAgbW9zdCBtYXRoCistLSBsaWJyYXJpZXMgaGF2ZSBwb29yIGFjY3VyYWN5IGZvciAocmVhbCkgc2luZSBhbmQgY29zaW5lIGZvcgorLS0gbGFyZ2UgYXJndW1lbnRzLCBhbmQgdGhlIGFjY3VyYWN5IG9mIHRoZXNlIGNvbXBsZXggZnVuY3Rpb25zCistLSBzdWZmZXIgY29ycmVzcG9uZGluZ2x5LgorLS0KKy0tIFNpbWlsYXJseSwgZm9yIGNvcywgc2luIGFuZCB0YW4gd2UgbGltaXQgdGVzdHMgdG8gYXJndW1lbnRzCistLSB3aXRoIHJlbGF0aXZlbHkgc21hbGwgcmVhbCBwYXJ0LgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGV4cDogRXhwb25lbnRpYWwgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gemVyb3MKK2V4cDAwMDAgZXhwIDAuMCAwLjAgLT4gMS4wIDAuMAorZXhwMDAwMSBleHAgMC4wIC0wLjAgLT4gMS4wIC0wLjAKK2V4cDAwMDIgZXhwIC0wLjAgMC4wIC0+IDEuMCAwLjAKK2V4cDAwMDMgZXhwIC0wLjAgLTAuMCAtPiAxLjAgLTAuMAorCistLSByYW5kb20gaW5wdXRzCitleHAwMDA0IGV4cCAtMTcuOTU3MzU5MDA5NTY0Njg0IC0xLjEwODYxMzg5NTc5NTI3NCAtPiA3LjA4NjkyOTI1NzYyMjY2MTFlLTA5IC0xLjQyMjU5MjkyMDIzNzc4MzNlLTA4CitleHAwMDA1IGV4cCAtMS40NDU2MTQ5NjYzMzY4NjQyZS0xNSAtMC43NTM1OTgxNzMzMTc3MjIzOSAtPiAwLjcyOTIzMTQ4MzIzOTE3OTk3IC0wLjY4NDI2NzA4NTE3NDE5MDMzCitleHAwMDA2IGV4cCAtMC43NjAwODY1NDg4MzUxMjY2MSAtMC40NjY1NzIzNTQ4MDEwNTAxOSAtPiAwLjQxNzY0MzkzMTA5OTI4NjY2IC0wLjIxMDM1MTA4Mzk2NzkyODU0CitleHAwMDA3IGV4cCAtNS43MDcxNjE0Njk3NzM1NzMxIC0yLjM3NDQxNjE4MTgxMTU4MTZlLTExIC0+IDAuMDAzMzIyMDg5MDI0MjA2ODM1NiAtNy44ODgwMjE5MzY0OTUzNTc4ZS0xNAorZXhwMDAwOCBleHAgLTAuNDY1Mzk4MTMyNzkyNzA5NyAtNS4yMjM2NzA2NjY3NDQ1NTg3ZS0yMSAtPiAwLjYyNzg4NTA3Mzc4MjE2NjYzIC0zLjI3OTg2NDg0MjAwMjY0NjhlLTIxCitleHAwMDA5IGV4cCAtMy4yNDQ0NTY1MjQyMjk1NTE4IDEuMTUzNTYyNTMwNDI0Mzk1OSAtPiAwLjAxNTc5OTkzNjkzMTQ1NzY0MSAwLjAzNTY0NDk1MDM4MDAyNDc0OQorZXhwMDAxMCBleHAgLTMuMDY1MTQ1NjMzNzk3NzcyNyAwLjg3NzY1MDg2NTMyMzkxODc4IC0+IDAuMDI5ODA1NTk1NjI5ODU1OTUzIDAuMDM1ODgyNzc1MTgwODU1NjY5CitleHAwMDExIGV4cCAtMC4xMTA4MDgyMzc1MzIzMzkyNiAwLjk2NDg2Mzg2MzAwODczMTA2IC0+IDAuNTA5NzkxMTI1MzQzNzYzMTQgMC43MzU3NTUxMjQxOTU2MTU2MgorZXhwMDAxMiBleHAgLTIuNTYyOTcyMjU5ODkyODY0OCAwLjAxOTYzNjIzNTc1NDcwODA3OSAtPiAwLjA3NzA2MDQ1Mjg1MzkxNzM5NyAwLjAwMTUxMzM3MTczNDExMzc2ODQKK2V4cDAwMTMgZXhwIC0zLjMyMDE3MDk5NTc5ODMzNTdlLTEwIDEuMjY4NDAxNzM0NDQ4NzI2OCAtPiAwLjI5NzgwNjk5ODU1NDM0ODg5IDAuOTU0NjI2MTAwMDc2ODkxODYKK2V4cDAwMTQgZXhwIDAuODg3NjcyNzYwNTc5OTMyNzIgLTAuMTg5NTM0MjI5ODY4OTU1NTcgLT4gMi4zODU5NjI0MDQ5ODU4MDk1IC0wLjQ1NzcxNTU5MTMyMDQ0NDI2CitleHAwMDE1IGV4cCAxLjU3MzgzMzM0ODY3OTQ3NDIgLTIuMjU3NjgwMzA3NTU0NDMyOGUtMTEgLT4gNC44MjUxMDkxMTMyNDU4NjU0IC0xLjA4OTM1NTM4MjY3NzY2MjNlLTEwCitleHAwMDE2IGV4cCAxLjY0MDg3MDIzNDE4MTM3OTUgLTEuNDM4ODc5NDg0MzgwODM3IC0+IDAuNjc4NjczMzU5MDY4OTA0OCAtNS4xMTQ4Mjg0MTczMTY4ODI1CitleHAwMDE3IGV4cCAxLjgyMDI3OTQyNDIwMjAzMyAtMC4wMjA4MTIwNDAzNzA3ODU3MjIgLT4gNi4xNzIyNDYyODk2NDIwOTAyIC0wLjEyODQ3NTU4ODg0MzUwNTEKK2V4cDAwMTggZXhwIDEuNzI3Mzk2NTczNTk0NTg3MyAtMC42MTE0MDYyMTMyODk1NDk0NyAtPiA0LjYwNjc5MzE4OTg3OTk5NzYgLTMuMjI5NDI2NzY5NDQ0MTMwOAorZXhwMDAxOSBleHAgMi41NjA2MDM0MzA2ODYyOTk1IDAuMDk4MTUzMTM2MDA4NDM1NTA0IC0+IDEyLjg4MTMyNTg4OTk2NjYyOSAxLjI2ODQxODQ4MTI4NjQ0OTQKK2V4cDAwMjAgZXhwIDEwLjI4MDM2ODYxOTQ4MzAyOSAzLjQ1NjQ2MjI1NTk3NDg1MzUgLT4gLTI3NzIxLjI4MzMyMTU1MTUwMiAtOTAyOC45NjYzMjE1NTY4ODM1CitleHAwMDIxIGV4cCAxLjEwNDAwNzQwNTEyOTc0MWUtMTU1IDAuMjEyNTg4MDMwNjczMTcyNzggLT4gMC45Nzc0ODgxMzkzMzUzMTc2NCAwLjIxMDk5MDM3MjkwNTQ0NDc4CitleHAwMDIyIGV4cCAwLjAyNzM2NDc3NzgwOTI5NTE3MiAwLjAwMDU5MjI2NjAzNTAwNjIzMzYzIC0+IDEuMDI3NzQyNDUxODQ1MTg3NiAwLjAwMDYwODY5NzAxODEzNDY1NzkKK2V4cDAwMjMgZXhwIDAuOTQzNTYzMTM0MjkyNTUyNDUgMy40MTg1MzA0NjM1MTg1OTIgLT4gLTIuNDcxMjI4NTY5NTM0NjE5NCAtMC43MDI0MjY1NDkwMDIxODM0OQorCistLSBjYXNlcyB3aGVyZSBleHAoeikgcmVwcmVzZW50YWJsZSwgZXhwKHoucmVhbCkgbm90CitleHAwMDMwIGV4cCA3MTAuMCAwLjc4NTAwMDAwMDAwMDAwMDAzIC0+IDEuNTgwMzAxNjkwOTYzNzE1OGUrMzA4IDEuNTc5MDQzNzU1MTgwNjkxMWUrMzA4CitleHAwMDMxIGV4cCA3MTAuMCAtMC43ODUwMDAwMDAwMDAwMDAwMyAtPiAxLjU4MDMwMTY5MDk2MzcxNThlKzMwOCAtMS41NzkwNDM3NTUxODA2OTExZSszMDgKKworLS0gdmFsdWVzIGZvciB3aGljaCBleHAoeCkgaXMgc3Vibm9ybWFsLCBvciB1bmRlcmZsb3dzIHRvIDAKK2V4cDAwNDAgZXhwIC03MzUuMCAwLjc4NTAwMDAwMDAwMDAwMDAzIC0+IDQuMzk3Njc4MzEzNjMyOTM1NWUtMzIwIDQuMzk0MjE5ODU0MTEyMDQ2OGUtMzIwCitleHAwMDQxIGV4cCAtNzM1LjAgLTIuMzU1OTk5OTk5OTk5OTk5OSAtPiAtNC4zOTUyMDc5ODU0MDM3MjkzZS0zMjAgLTQuMzk2NjkwMTgyMzQxMjUzZS0zMjAKK2V4cDAwNDIgZXhwIC03NDUuMCAwLjAgLT4gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgMC4wCitleHAwMDQzIGV4cCAtNzQ1LjAgMC43IC0+IDAuMCAwLjAKK2V4cDAwNDQgZXhwIC03NDUuMCAyLjEgLT4gLTAuMCAwLjAKK2V4cDAwNDUgZXhwIC03NDUuMCAzLjcgLT4gLTAuMCAtMC4wCitleHAwMDQ2IGV4cCAtNzQ1LjAgNS4zIC0+IDAuMCAtMC4wCisKKy0tIHZhbHVlcyBmb3Igd2hpY2ggZXhwKHopIG92ZXJmbG93cworZXhwMDA1MCBleHAgNzEwLjAgMC4wIC0+IGluZiAwLjAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdworZXhwMDA1MSBleHAgNzExLjAgMC43IC0+IGluZiBpbmYgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdworZXhwMDA1MiBleHAgNzEwLjAgMS41IC0+IDEuNTgwMjY1MzgyOTg1NzM3NmUrMzA3IGluZiAgICBvdmVyZmxvdworZXhwMDA1MyBleHAgNzEwLjAgMS42IC0+IC02LjUyMzE1Nzk5OTU1MDEzNzJlKzMwNiBpbmYgICBvdmVyZmxvdworZXhwMDA1NCBleHAgNzEwLjAgMi44IC0+IC1pbmYgNy40ODM2MTc3NDE3NDQ4NTI4ZSszMDcgICBvdmVyZmxvdworCistLSBzcGVjaWFsIHZhbHVlcworZXhwMTAwMCBleHAgMC4wIDAuMCAtPiAxLjAgMC4wCitleHAxMDAxIGV4cCAtMC4wIDAuMCAtPiAxLjAgMC4wCitleHAxMDAyIGV4cCAwLjAgaW5mIC0+IG5hbiBuYW4gICAgICAgICAgaW52YWxpZAorZXhwMTAwMyBleHAgMi4zIGluZiAtPiBuYW4gbmFuICAgICAgICAgIGludmFsaWQKK2V4cDEwMDQgZXhwIC0wLjAgaW5mIC0+IG5hbiBuYW4gICAgICAgICBpbnZhbGlkCitleHAxMDA1IGV4cCAtMi4zIGluZiAtPiBuYW4gbmFuICAgICAgICAgaW52YWxpZAorZXhwMTAwNiBleHAgMC4wIG5hbiAtPiBuYW4gbmFuCitleHAxMDA3IGV4cCAyLjMgbmFuIC0+IG5hbiBuYW4KK2V4cDEwMDggZXhwIC0wLjAgbmFuIC0+IG5hbiBuYW4KK2V4cDEwMDkgZXhwIC0yLjMgbmFuIC0+IG5hbiBuYW4KK2V4cDEwMTAgZXhwIC1pbmYgMC4wIC0+IDAuMCAwLjAKK2V4cDEwMTEgZXhwIC1pbmYgMS40IC0+IDAuMCAwLjAKK2V4cDEwMTIgZXhwIC1pbmYgMi44IC0+IC0wLjAgMC4wCitleHAxMDEzIGV4cCAtaW5mIDQuMiAtPiAtMC4wIC0wLjAKK2V4cDEwMTQgZXhwIC1pbmYgNS42IC0+IDAuMCAtMC4wCitleHAxMDE1IGV4cCAtaW5mIDcuMCAtPiAwLjAgMC4wCitleHAxMDE2IGV4cCBpbmYgMC4wIC0+IGluZiAwLjAKK2V4cDEwMTcgZXhwIGluZiAxLjQgLT4gaW5mIGluZgorZXhwMTAxOCBleHAgaW5mIDIuOCAtPiAtaW5mIGluZgorZXhwMTAxOSBleHAgaW5mIDQuMiAtPiAtaW5mIC1pbmYKK2V4cDEwMjAgZXhwIGluZiA1LjYgLT4gaW5mIC1pbmYKK2V4cDEwMjEgZXhwIGluZiA3LjAgLT4gaW5mIGluZgorZXhwMTAyMiBleHAgLWluZiBpbmYgLT4gMC4wIDAuMCAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24gaWdub3JlLWltYWctc2lnbgorZXhwMTAyMyBleHAgaW5mIGluZiAtPiBpbmYgbmFuICAgICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorZXhwMTAyNCBleHAgLWluZiBuYW4gLT4gMC4wIDAuMCAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24gaWdub3JlLWltYWctc2lnbgorZXhwMTAyNSBleHAgaW5mIG5hbiAtPiBpbmYgbmFuICAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK2V4cDEwMjYgZXhwIG5hbiAwLjAgLT4gbmFuIDAuMAorZXhwMTAyNyBleHAgbmFuIDIuMyAtPiBuYW4gbmFuCitleHAxMDI4IGV4cCBuYW4gaW5mIC0+IG5hbiBuYW4KK2V4cDEwMjkgZXhwIG5hbiBuYW4gLT4gbmFuIG5hbgorZXhwMTAzMCBleHAgMC4wIC0wLjAgLT4gMS4wIC0wLjAKK2V4cDEwMzEgZXhwIC0wLjAgLTAuMCAtPiAxLjAgLTAuMAorZXhwMTAzMiBleHAgMC4wIC1pbmYgLT4gbmFuIG5hbiAgICAgICAgIGludmFsaWQKK2V4cDEwMzMgZXhwIDIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICAgICBpbnZhbGlkCitleHAxMDM0IGV4cCAtMC4wIC1pbmYgLT4gbmFuIG5hbiAgICAgICAgaW52YWxpZAorZXhwMTAzNSBleHAgLTIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICAgIGludmFsaWQKK2V4cDEwMzYgZXhwIC1pbmYgLTAuMCAtPiAwLjAgLTAuMAorZXhwMTAzNyBleHAgLWluZiAtMS40IC0+IDAuMCAtMC4wCitleHAxMDM4IGV4cCAtaW5mIC0yLjggLT4gLTAuMCAtMC4wCitleHAxMDM5IGV4cCAtaW5mIC00LjIgLT4gLTAuMCAwLjAKK2V4cDEwNDAgZXhwIC1pbmYgLTUuNiAtPiAwLjAgMC4wCitleHAxMDQxIGV4cCAtaW5mIC03LjAgLT4gMC4wIC0wLjAKK2V4cDEwNDIgZXhwIGluZiAtMC4wIC0+IGluZiAtMC4wCitleHAxMDQzIGV4cCBpbmYgLTEuNCAtPiBpbmYgLWluZgorZXhwMTA0NCBleHAgaW5mIC0yLjggLT4gLWluZiAtaW5mCitleHAxMDQ1IGV4cCBpbmYgLTQuMiAtPiAtaW5mIGluZgorZXhwMTA0NiBleHAgaW5mIC01LjYgLT4gaW5mIGluZgorZXhwMTA0NyBleHAgaW5mIC03LjAgLT4gaW5mIC1pbmYKK2V4cDEwNDggZXhwIC1pbmYgLWluZiAtPiAwLjAgMC4wICAgICAgICBpZ25vcmUtcmVhbC1zaWduIGlnbm9yZS1pbWFnLXNpZ24KK2V4cDEwNDkgZXhwIGluZiAtaW5mIC0+IGluZiBuYW4gICAgICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK2V4cDEwNTAgZXhwIG5hbiAtMC4wIC0+IG5hbiAtMC4wCitleHAxMDUxIGV4cCBuYW4gLTIuMyAtPiBuYW4gbmFuCitleHAxMDUyIGV4cCBuYW4gLWluZiAtPiBuYW4gbmFuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvc2g6IEh5cGVyYm9saWMgQ29zaW5lIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworY29zaDAwMDAgY29zaCAwLjAgMC4wIC0+IDEuMCAwLjAKK2Nvc2gwMDAxIGNvc2ggMC4wIC0wLjAgLT4gMS4wIC0wLjAKK2Nvc2gwMDAyIGNvc2ggLTAuMCAwLjAgLT4gMS4wIC0wLjAKK2Nvc2gwMDAzIGNvc2ggLTAuMCAtMC4wIC0+IDEuMCAwLjAKKworLS0gcmFuZG9tIGlucHV0cworY29zaDAwMDQgY29zaCAtMC44NTM5NTI2NDI5NzQxNDI1MyAtOC44NTUzNzU2MTQ4NjcxOTU4IC0+IC0xLjE2ODQzNDAzNDgwMjExODUgMC41MTg0MjE5NTM1OTc4NzQzNQorY29zaDAwMDUgY29zaCAtMTkuNTg0OTA0MjM3MjExMjIzIC0wLjA2NjU4MjYyNzk5NDkwNjE3NyAtPiAxNTk4MTY4MTIuMjMzMzY5OTIgMTA2NTY3NzYuMDUwNDA2MjQ2Citjb3NoMDAwNiBjb3NoIC0wLjExMDcyNjE4NDAxMTMwNzcyIC0xLjQ4NDgyMDIxNTA3MzI0NyAtPiAwLjA4NjM5NzE2NDc0NDk0OTUwMyAwLjExMDU0Mjc1NjM3NzE3Mjg0Citjb3NoMDAwNyBjb3NoIC0zLjQ3NjQ4NDAyNTA2ODE3NTIgLTAuNDg0NDAzNDgyODgyNzUyNzYgLT4gMTQuMzI1OTMxOTU1MTkwODQ0IDcuNTI0MjA1MzU0ODczNzk1NQorY29zaDAwMDggY29zaCAtMC41MjA0NzA2MzYwNDUyNDYwMiAtMC4zNjAzODA1MzgyNzc1NTg1IC0+IDEuMDY1Mzk0MDM1NDY4MzgwMiAwLjE5MTkzMjkzNjA2MjUyNDczCitjb3NoMDAwOSBjb3NoIC0xLjM5NTE4OTYyOTc1OTk1IDAuMDA3NDczODYwNDcwMDcwMjkwNiAtPiAyLjE0MTcwMzEwMjcyMzU5NjkgLTAuMDE0MTU1MTg3MTIyOTYzMDgKK2Nvc2gwMDEwIGNvc2ggLTAuMzcxMDcwNjQ3NTc2NTM1NDEgMC4xNDcyODA4NTMwNzg1NjYwOSAtPiAxLjA1ODA2MDE0OTY3NzY5OTEgLTAuMDU1NzEyNTMxOTY0NTY4NTg3Citjb3NoMDAxMSBjb3NoIC01Ljg0NzAyMDA5NTg3Mzk2NTMgNC4wMDIxNzIyMzg4MzM2MjkyIC0+IC0xMTIuODYyMjA2Njc2MTgyODUgMTMxLjI0NzM0MDMzNTQ1MDEzCitjb3NoMDAxMiBjb3NoIC0wLjE3MDAyNjE0NDQ4NTE4ODMgMC45NzE2NzU0MDEzNTM1NDUxMyAtPiAwLjU3MjA4NzQ4MjUzNTc3OTQ2IC0wLjE0MTA5MDQ4MjAyNDAyMDMKK2Nvc2gwMDEzIGNvc2ggLTAuNDQwNDIzOTc5MDI2NDg3ODMgMS4wOTA0NzkxOTY0MTM5NzQyIC0+IDAuNTA3NjAzMjIzOTMwNTgxMzMgLTAuNDAzMzM5NjY2NTIwMTA4MTYKK2Nvc2gwMDE0IGNvc2ggMC4wNTIyNjc1NTI0OTE4NjcyOTkgLTMuODg4OTAxMTQzMDY0NDE3NCAtPiAtMC43MzQ1MjMwMzQxNDYzOTI5NyAwLjAzNTU0MDcwNDgzMzUzNzEzNAorY29zaDAwMTUgY29zaCAwLjk4MDAwNzY0MTc3MTI3NDUzIC0xLjI1NDg4MjkyNDc3ODQwOTcgLT4gMC40NzIyMDc0NzM0MTQxNjE0MiAtMS4wODc5NDIxNDMyMTgwMzE2Citjb3NoMDAxNiBjb3NoIDAuMDgzNTk0NzAxMjIyNjQ0MDA4IC0wLjg4ODQ3ODk5OTMwMTgxMjg0IC0+IDAuNjMyNzk3ODI0MTkzMTI2MTMgLTAuMDY0OTU0NTY2ODE2MDAyMjg1Citjb3NoMDAxNyBjb3NoIDEuMzgxNzM1MzE3ODM3NzYgLTAuNDMxODUwNDA4MTY3MzIyMjkgLT4gMS45MjIxNjYzMzc0NjcxNjQ3IC0wLjc4MDczODMwODU4ODQ5MzQ3Citjb3NoMDAxOCBjb3NoIDAuNTczMTU2ODExMjAxNDg0NjUgLTAuMjIyNTU3NjA5NTEwMjc5NDIgLT4gMS4xMzk5NzMzMTI1MTczMDA0IC0wLjEzMzU1MTIzNDM2MDU5NTYKK2Nvc2gwMDE5IGNvc2ggMS44ODgyNTEyMzMzMDYyMzQ3IDQuNTAyNDkzMjE4MjM4Mzc5NyAtPiAtMC43MDQxNjAyMDY1MzYyNjkxIC0zLjE1NzM4MjIxMzE5NjQ2MTUKK2Nvc2gwMDIwIGNvc2ggMC41NjE4MjE5MjA2ODU4MzE3IDAuOTI2MjA0NTIxMjk1NzUzNDggLT4gMC42OTgyMjM4MDQwNTM3ODM4MSAwLjQ3MzA5MDY3NDcxMDU0NTIyCitjb3NoMDAyMSBjb3NoIDAuNTQzNjE0NDI4NDcwNjI1OTEgMC42NDE3NjQ4MzU4MzAxODQ2MiAtPiAwLjkyMjM0NDYyMDc0MTkzNDkxIDAuMzQxNjc5MDY0OTU4NDU1MDEKK2Nvc2gwMDIyIGNvc2ggMC4wMDE0Nzc3NDAzMTA3OTIwMzMxIDEuMzY4MjAyODEyMjY3NzY2MSAtPiAwLjIwMTIxMDY5NjM4OTk1NDkgMC4wMDE0NDc1MTgxMzc4NjMyMTkKK2Nvc2gwMDIzIGNvc2ggMi4yMTg4ODU5NDQzNjM1MDEgMi4wMDE1NzI3Mzk1ODgzNjg3IC0+IC0xLjk0Mjk0MzIxMDgxOTY4IDQuMTI5MDI2OTE3NjA4MzE5NgorCistLSBsYXJnZSByZWFsIHBhcnQKK2Nvc2gwMDMwIGNvc2ggNzEwLjUgMi4zNTE5OTk5OTk5OTk5OTk5IC0+IC0xLjI5Njc0NjUyMzkzNTU5OThlKzMwOCAxLjMwNzY3MDc5MDg4NTczMzNlKzMwOAorY29zaDAwMzEgY29zaCAtNzEwLjUgMC42OTk5OTk5OTk5OTk5OTk5NiAtPiAxLjQwODU0NjYzODEzOTI0OTllKzMwOCAtMS4xODY0MDI0NjY2NDUwMjM5ZSszMDgKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2Nvc2gxMDAwIGNvc2ggMC4wIDAuMCAtPiAxLjAgMC4wCitjb3NoMTAwMSBjb3NoIDAuMCBpbmYgLT4gbmFuIDAuMCAgICAgICAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitjb3NoMTAwMiBjb3NoIDAuMCBuYW4gLT4gbmFuIDAuMCAgICAgICAgaWdub3JlLWltYWctc2lnbgorY29zaDEwMDMgY29zaCAyLjMgaW5mIC0+IG5hbiBuYW4gICAgICAgIGludmFsaWQKK2Nvc2gxMDA0IGNvc2ggMi4zIG5hbiAtPiBuYW4gbmFuCitjb3NoMTAwNSBjb3NoIGluZiAwLjAgLT4gaW5mIDAuMAorY29zaDEwMDYgY29zaCBpbmYgMS40IC0+IGluZiBpbmYKK2Nvc2gxMDA3IGNvc2ggaW5mIDIuOCAtPiAtaW5mIGluZgorY29zaDEwMDggY29zaCBpbmYgNC4yIC0+IC1pbmYgLWluZgorY29zaDEwMDkgY29zaCBpbmYgNS42IC0+IGluZiAtaW5mCitjb3NoMTAxMCBjb3NoIGluZiA3LjAgLT4gaW5mIGluZgorY29zaDEwMTEgY29zaCBpbmYgaW5mIC0+IGluZiBuYW4gICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorY29zaDEwMTIgY29zaCBpbmYgbmFuIC0+IGluZiBuYW4KK2Nvc2gxMDEzIGNvc2ggbmFuIDAuMCAtPiBuYW4gMC4wICAgICAgICBpZ25vcmUtaW1hZy1zaWduCitjb3NoMTAxNCBjb3NoIG5hbiAyLjMgLT4gbmFuIG5hbgorY29zaDEwMTUgY29zaCBuYW4gaW5mIC0+IG5hbiBuYW4KK2Nvc2gxMDE2IGNvc2ggbmFuIG5hbiAtPiBuYW4gbmFuCitjb3NoMTAxNyBjb3NoIDAuMCAtMC4wIC0+IDEuMCAtMC4wCitjb3NoMTAxOCBjb3NoIDAuMCAtaW5mIC0+IG5hbiAwLjAgICAgICAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitjb3NoMTAxOSBjb3NoIDIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICAgaW52YWxpZAorY29zaDEwMjAgY29zaCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorY29zaDEwMjEgY29zaCBpbmYgLTEuNCAtPiBpbmYgLWluZgorY29zaDEwMjIgY29zaCBpbmYgLTIuOCAtPiAtaW5mIC1pbmYKK2Nvc2gxMDIzIGNvc2ggaW5mIC00LjIgLT4gLWluZiBpbmYKK2Nvc2gxMDI0IGNvc2ggaW5mIC01LjYgLT4gaW5mIGluZgorY29zaDEwMjUgY29zaCBpbmYgLTcuMCAtPiBpbmYgLWluZgorY29zaDEwMjYgY29zaCBpbmYgLWluZiAtPiBpbmYgbmFuICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorY29zaDEwMjcgY29zaCBuYW4gLTAuMCAtPiBuYW4gMC4wICAgICAgIGlnbm9yZS1pbWFnLXNpZ24KK2Nvc2gxMDI4IGNvc2ggbmFuIC0yLjMgLT4gbmFuIG5hbgorY29zaDEwMjkgY29zaCBuYW4gLWluZiAtPiBuYW4gbmFuCitjb3NoMTAzMCBjb3NoIC0wLjAgLTAuMCAtPiAxLjAgMC4wCitjb3NoMTAzMSBjb3NoIC0wLjAgLWluZiAtPiBuYW4gMC4wICAgICAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitjb3NoMTAzMiBjb3NoIC0wLjAgbmFuIC0+IG5hbiAwLjAgICAgICAgaWdub3JlLWltYWctc2lnbgorY29zaDEwMzMgY29zaCAtMi4zIC1pbmYgLT4gbmFuIG5hbiAgICAgIGludmFsaWQKK2Nvc2gxMDM0IGNvc2ggLTIuMyBuYW4gLT4gbmFuIG5hbgorY29zaDEwMzUgY29zaCAtaW5mIC0wLjAgLT4gaW5mIDAuMAorY29zaDEwMzYgY29zaCAtaW5mIC0xLjQgLT4gaW5mIGluZgorY29zaDEwMzcgY29zaCAtaW5mIC0yLjggLT4gLWluZiBpbmYKK2Nvc2gxMDM4IGNvc2ggLWluZiAtNC4yIC0+IC1pbmYgLWluZgorY29zaDEwMzkgY29zaCAtaW5mIC01LjYgLT4gaW5mIC1pbmYKK2Nvc2gxMDQwIGNvc2ggLWluZiAtNy4wIC0+IGluZiBpbmYKK2Nvc2gxMDQxIGNvc2ggLWluZiAtaW5mIC0+IGluZiBuYW4gICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK2Nvc2gxMDQyIGNvc2ggLWluZiBuYW4gLT4gaW5mIG5hbgorY29zaDEwNDMgY29zaCAtMC4wIDAuMCAtPiAxLjAgLTAuMAorY29zaDEwNDQgY29zaCAtMC4wIGluZiAtPiBuYW4gMC4wICAgICAgIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorY29zaDEwNDUgY29zaCAtMi4zIGluZiAtPiBuYW4gbmFuICAgICAgIGludmFsaWQKK2Nvc2gxMDQ2IGNvc2ggLWluZiAwLjAgLT4gaW5mIC0wLjAKK2Nvc2gxMDQ3IGNvc2ggLWluZiAxLjQgLT4gaW5mIC1pbmYKK2Nvc2gxMDQ4IGNvc2ggLWluZiAyLjggLT4gLWluZiAtaW5mCitjb3NoMTA0OSBjb3NoIC1pbmYgNC4yIC0+IC1pbmYgaW5mCitjb3NoMTA1MCBjb3NoIC1pbmYgNS42IC0+IGluZiBpbmYKK2Nvc2gxMDUxIGNvc2ggLWluZiA3LjAgLT4gaW5mIC1pbmYKK2Nvc2gxMDUyIGNvc2ggLWluZiBpbmYgLT4gaW5mIG5hbiAgICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHNpbmg6IEh5cGVyYm9saWMgU2luZSAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHplcm9zCitzaW5oMDAwMCBzaW5oIDAuMCAwLjAgLT4gMC4wIDAuMAorc2luaDAwMDEgc2luaCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorc2luaDAwMDIgc2luaCAtMC4wIDAuMCAtPiAtMC4wIDAuMAorc2luaDAwMDMgc2luaCAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCisKKy0tIHJhbmRvbSBpbnB1dHMKK3NpbmgwMDA0IHNpbmggLTE3LjI4MjU4ODA5MTQ2Mjc0MiAtMC4zODE4Nzk0ODY5NDEwMzU0NiAtPiAtMTQ4NjczODYuODU3MjQ4Mzk2IC01OTcwNjQ4LjY1NTM1MTY2MzkKK3NpbmgwMDA1IHNpbmggLTM0My45MTk3MTIwMzE0MzIwOCAtNS4wMTcyODY4ODc3NzcxNTI1ZS0yMiAtPiAtMS4xNTE4NjkxNzc2NTIxNzM1ZSsxNDkgLTUuNzc5MjU4MTIxNDY4OTAyMWUrMTI3CitzaW5oMDAwNiBzaW5oIC0xNC4xNzgxMjIyNTMzMDA5MjIgLTEuOTM4NzE1NzU3OTM1MTI5MyAtPiAyNTg0NDAuMzc5MDkwMzQ4MjYgLTY3MDQ1Mi41ODUwMDk0NjQ0MQorc2luaDAwMDcgc2luaCAtMS4wMzQzODEwNTgxNjg2MjM5IC0xLjA5NzAyMzUyNjYzNjk5MDUgLT4gLTAuNTYwNzA4NTgyNzgwOTI3MzkgLTEuNDA5ODg4MzI1ODA0NjY5Nworc2luaDAwMDggc2luaCAtMC4wNjYxMjY1NjE0MTYzNjgyMDQgLTAuMDcwNDYxNTg0MTY5OTYxODcyIC0+IC0wLjA2NjAxMDU1ODcwMDkzODEyNCAtMC4wNzA1NTcyNzY3Mzg2Mzc1NDIKK3NpbmgwMDA5IHNpbmggLTAuMzc2MzAxNDkxNTAzMDg0ODQgMy4zNjIxNzM0NjkyMTYyMTczIC0+IDAuMzc1OTExMTgxMTkzMzI2MTcgLTAuMjM0NDcxMTU5MjYzNjkzODMKK3NpbmgwMDEwIHNpbmggLTAuMDQ5OTQxOTYwOTc4NjcwMDU1IDAuNDAzMjM3NjcwMjA0MTQ2MjUgLT4gLTAuMDQ1OTU1NDgyMTM2MzI5MDA5IDAuMzkyODg3ODQ5NDQzMDY0Ngorc2luaDAwMTEgc2luaCAtMTYuNjQ3ODUyNjAzOTAzNzE1IDAuMDAyNjg1MjIxOTEyOTA4MjA5OCAtPiAtODQ5MjU2Ni41NzM5MzgyNTYxIDIyODA0LjQ4MDY3MTEzMzU2Mgorc2luaDAwMTIgc2luaCAtMS40NzY2MjUzMTQzMDM2OTQgMC44OTQ3Mzc3MzExNjY4MzM4NiAtPiAtMS4yOTgyOTQzMzM0MzgyMjI0IDEuNzk2NjU5MzM2Nzc5MTIwNAorc2luaDAwMTMgc2luaCAtNDIyLjM2NDI5NTc3NTU2OTEzIDAuMTAzNjY2MzQ1MDIzMDc5MTIgLT4gLTEuMzQwMDMyMTAwODkyMDA0NGUrMTgzIDEuMzk0MTYwMDk0ODA0NTU5OWUrMTgyCitzaW5oMDAxNCBzaW5oIDAuMDkxMDgzNDA3NDU2NDE5ODEgLTAuNDA0MDgyMjc0MTYwNzAzNTMgLT4gMC4wODM4NjM3MjQ4MDIyMzc5MDIgLTAuMzk0ODA3MTY1NTM5MzU2MDIKK3NpbmgwMDE1IHNpbmggMi4wMzYwNjQxMzIwNjczODYgLTIuNjgzMTcyOTk2MTM4NjIzOSAtPiAtMy4zNzYyMTEyNDM2MzE3NSAtMS43MjM4NjgzMzAwMDI4MTcKK3NpbmgwMDE2IHNpbmggMi41NjE2NzE3MjIzMDYzMzE3IC0wLjAwNzg5Nzg0OTg2MjI3MTc3NjcgLT4gNi40Mzk5NDE1ODUzODE1ODY5IC0wLjA1MTQ3MjI2NDQwMDcyMjEzMworc2luaDAwMTcgc2luaCAwLjMzNjgwNDAxMTk4NTE4OCAtNi41NjU0NjIyOTcxNjQ5MzM3IC0+IDAuMzI5NjI0OTkzMDc1NzQ1NzggLTAuMjk0NDkxNzAxNTk5OTUxOTcKK3NpbmgwMDE4IHNpbmggMC4yMzc3NDYwMzc1NTY0OTY5MyAtMC45MjQ2NzE5NTc5OTIzMjA0OSAtPiAwLjE0NDQ5ODM5NDkwNjAzMzg5IC0wLjgyMTA5NDQ5MDUzNTU2NzkzCitzaW5oMDAxOSBzaW5oIDAuMDAxMTM4ODI3MzU0MTQ2NTQ5NCAxLjk2NzYxOTY4ODI5NDk4NTUgLT4gLTAuMDAwNDQwMTQ2MDUzODk2MzQ5OTkgMC45MjIyOTM5ODQwNzA5ODgwNgorc2luaDAwMjAgc2luaCAzLjI0NDM4NzAxMDU2NjM3NTkgMC44MDU0Mjg3NTU5NjE2ODk1IC0+IDguODcwMjg5MDc3ODUyNzQyNiA5LjI2MTA3NDg1OTcwNDIxOTYKK3NpbmgwMDIxIHNpbmggMC4wNDA2Mjg5MDg4NTcwNTQ3MzggMC4wOTgyMDYzOTExOTA5NDQ5NTggLT4gMC4wNDA0NDQyNjg0MTY3MTIzMyAwLjA5ODEyOTU0NDczOTcwNzM5Mgorc2luaDAwMjIgc2luaCA0LjcyNTIyODM5MTgyMTc2OTZlLTMwIDkuMTE5ODE1NTY0MjY1NjY5NyAtPiAtNC41MDcxOTgwNTYxNjQ0NDA0ZS0zMCAwLjMwMDI1NzMwNzAxNjYxNzEzCitzaW5oMDAyMyBzaW5oIDAuMDQzNzEzNjkzNjc4NDIwMDY4IDAuMjI1MTI1NDk4ODc1MzI2NTcgLT4gMC4wNDI2MjQxOTg2NzM0MTY3MTMgMC4yMjM0NDIwMTIzMTIxNzk2MQorCistLSBsYXJnZSByZWFsIHBhcnQKK3NpbmgwMDMwIHNpbmggNzEwLjUgLTIuMzk5OTk5OTk5OTk5OTk5OSAtPiAtMS4zNTc5OTcwNTY0ODg1OTE5ZSszMDggLTEuMjQzOTQ0NzA5MDc3OThlKzMwOAorc2luaDAwMzEgc2luaCAtNzEwLjUgMC44MDAwMDAwMDAwMDAwMDAwNCAtPiAtMS4yODMwNjcxNjAxNzM1MTY0ZSszMDggMS4zMjEwOTU0MTkzOTk3Njc4ZSszMDgKKworLS0gc3BlY2lhbCB2YWx1ZXMKK3NpbmgxMDAwIHNpbmggMC4wIDAuMCAtPiAwLjAgMC4wCitzaW5oMTAwMSBzaW5oIDAuMCBpbmYgLT4gMC4wIG5hbiAgICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCitzaW5oMTAwMiBzaW5oIDAuMCBuYW4gLT4gMC4wIG5hbiAgICAgICAgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwMDMgc2luaCAyLjMgaW5mIC0+IG5hbiBuYW4gICAgICAgIGludmFsaWQKK3NpbmgxMDA0IHNpbmggMi4zIG5hbiAtPiBuYW4gbmFuCitzaW5oMTAwNSBzaW5oIGluZiAwLjAgLT4gaW5mIDAuMAorc2luaDEwMDYgc2luaCBpbmYgMS40IC0+IGluZiBpbmYKK3NpbmgxMDA3IHNpbmggaW5mIDIuOCAtPiAtaW5mIGluZgorc2luaDEwMDggc2luaCBpbmYgNC4yIC0+IC1pbmYgLWluZgorc2luaDEwMDkgc2luaCBpbmYgNS42IC0+IGluZiAtaW5mCitzaW5oMTAxMCBzaW5oIGluZiA3LjAgLT4gaW5mIGluZgorc2luaDEwMTEgc2luaCBpbmYgaW5mIC0+IGluZiBuYW4gICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwMTIgc2luaCBpbmYgbmFuIC0+IGluZiBuYW4gICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK3NpbmgxMDEzIHNpbmggbmFuIDAuMCAtPiBuYW4gMC4wCitzaW5oMTAxNCBzaW5oIG5hbiAyLjMgLT4gbmFuIG5hbgorc2luaDEwMTUgc2luaCBuYW4gaW5mIC0+IG5hbiBuYW4KK3NpbmgxMDE2IHNpbmggbmFuIG5hbiAtPiBuYW4gbmFuCitzaW5oMTAxNyBzaW5oIDAuMCAtMC4wIC0+IDAuMCAtMC4wCitzaW5oMTAxOCBzaW5oIDAuMCAtaW5mIC0+IDAuMCBuYW4gICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCitzaW5oMTAxOSBzaW5oIDIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICAgaW52YWxpZAorc2luaDEwMjAgc2luaCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorc2luaDEwMjEgc2luaCBpbmYgLTEuNCAtPiBpbmYgLWluZgorc2luaDEwMjIgc2luaCBpbmYgLTIuOCAtPiAtaW5mIC1pbmYKK3NpbmgxMDIzIHNpbmggaW5mIC00LjIgLT4gLWluZiBpbmYKK3NpbmgxMDI0IHNpbmggaW5mIC01LjYgLT4gaW5mIGluZgorc2luaDEwMjUgc2luaCBpbmYgLTcuMCAtPiBpbmYgLWluZgorc2luaDEwMjYgc2luaCBpbmYgLWluZiAtPiBpbmYgbmFuICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwMjcgc2luaCBuYW4gLTAuMCAtPiBuYW4gLTAuMAorc2luaDEwMjggc2luaCBuYW4gLTIuMyAtPiBuYW4gbmFuCitzaW5oMTAyOSBzaW5oIG5hbiAtaW5mIC0+IG5hbiBuYW4KK3NpbmgxMDMwIHNpbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorc2luaDEwMzEgc2luaCAtMC4wIC1pbmYgLT4gMC4wIG5hbiAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwMzIgc2luaCAtMC4wIG5hbiAtPiAwLjAgbmFuICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK3NpbmgxMDMzIHNpbmggLTIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICBpbnZhbGlkCitzaW5oMTAzNCBzaW5oIC0yLjMgbmFuIC0+IG5hbiBuYW4KK3NpbmgxMDM1IHNpbmggLWluZiAtMC4wIC0+IC1pbmYgLTAuMAorc2luaDEwMzYgc2luaCAtaW5mIC0xLjQgLT4gLWluZiAtaW5mCitzaW5oMTAzNyBzaW5oIC1pbmYgLTIuOCAtPiBpbmYgLWluZgorc2luaDEwMzggc2luaCAtaW5mIC00LjIgLT4gaW5mIGluZgorc2luaDEwMzkgc2luaCAtaW5mIC01LjYgLT4gLWluZiBpbmYKK3NpbmgxMDQwIHNpbmggLWluZiAtNy4wIC0+IC1pbmYgLWluZgorc2luaDEwNDEgc2luaCAtaW5mIC1pbmYgLT4gaW5mIG5hbiAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwNDIgc2luaCAtaW5mIG5hbiAtPiBpbmYgbmFuICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK3NpbmgxMDQzIHNpbmggLTAuMCAwLjAgLT4gLTAuMCAwLjAKK3NpbmgxMDQ0IHNpbmggLTAuMCBpbmYgLT4gMC4wIG5hbiAgICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK3NpbmgxMDQ1IHNpbmggLTIuMyBpbmYgLT4gbmFuIG5hbiAgICAgICBpbnZhbGlkCitzaW5oMTA0NiBzaW5oIC1pbmYgMC4wIC0+IC1pbmYgMC4wCitzaW5oMTA0NyBzaW5oIC1pbmYgMS40IC0+IC1pbmYgaW5mCitzaW5oMTA0OCBzaW5oIC1pbmYgMi44IC0+IGluZiBpbmYKK3NpbmgxMDQ5IHNpbmggLWluZiA0LjIgLT4gaW5mIC1pbmYKK3NpbmgxMDUwIHNpbmggLWluZiA1LjYgLT4gLWluZiAtaW5mCitzaW5oMTA1MSBzaW5oIC1pbmYgNy4wIC0+IC1pbmYgaW5mCitzaW5oMTA1MiBzaW5oIC1pbmYgaW5mIC0+IGluZiBuYW4gICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSB0YW5oOiBIeXBlcmJvbGljIFRhbmdlbnQgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcwordGFuaDAwMDAgdGFuaCAwLjAgMC4wIC0+IDAuMCAwLjAKK3RhbmgwMDAxIHRhbmggMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3RhbmgwMDAyIHRhbmggLTAuMCAwLjAgLT4gLTAuMCAwLjAKK3RhbmgwMDAzIHRhbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorCistLSByYW5kb20gaW5wdXRzCit0YW5oMDAwNCB0YW5oIC0yMS4yMDA1MDA0NTA2NjQ5OTMgLTEuNjk3MDcyOTQ4MDM0Mjk5NiAtPiAtMS4wIDEuOTI0MTM1MjM0NDg0OTM5OWUtMTkKK3RhbmgwMDA1IHRhbmggLTAuMzQxNTg3NzE1MDQyNTE5MjggLTguMDg0ODUwNDk1MTc0NzEzMSAtPiAtMi4xMjM3MTEyMjU4NTU2MTMgMS4yODI3NTI2NzgyMDI2MDA2Cit0YW5oMDAwNiB0YW5oIC0xNS40NTQxNDQ3MjUxOTM2ODkgLTAuMjM2MTk1ODIyODgyNjU2MTcgLT4gLTAuOTk5OTk5OTk5OTk5OTMyODMgLTMuNDMzNjY4NDI0ODI2MDAzNmUtMTQKK3RhbmgwMDA3IHRhbmggLTcuNjEwMzE2MzExOTY2MTk1MiAtMC43ODAyNzQ4MzIwMzA3MDA4IC0+IC0wLjk5OTk5OTk5NDk3MjE5NDM4IC00LjkwNjQ4NDUzNDM3NTU0MzdlLTA3Cit0YW5oMDAwOCB0YW5oIC0wLjE1Mzc0NzE3MjM1NzkyMTI5IC0wLjYzNTEwODYzMjczMDYxMzggLT4gLTAuMjMyNDYwODE3MDM1NjE4NjkgLTAuNzEwODM0Njc0MzM5MTAyMTkKK3RhbmgwMDA5IHRhbmggLTAuNDkxMDExMTU0NzQzOTI0NjUgMC4wOTcyMzAwMTI2NDg4NjMwMSAtPiAtMC40NTg0NDQ0NTcxNTQ5MjEzMyAwLjA3NzE5MTE1ODU0MTgwNTg4OAordGFuaDAwMTAgdGFuaCAtMC4xMDY5MDYxMjE1NzY2NDQ5MSAyLjg2MTYxMjgwMDg1NjM5NSAtPiAtMC4xMTUxOTc2MTYyNjI1NzM1OCAtMC4yODQwMDQ4ODM1NTY0NzUwNwordGFuaDAwMTEgdGFuaCAtMC45MTUwNTc3NDE5MjA2NjcwMiAxLjU0MzExNzQ1OTc3MjcwMDcgLT4gLTEuMzgxMTA5ODkzMDY4MTE0IDAuMDI1MTYwODE5NjYzNzA5MzU2Cit0YW5oMDAxMiB0YW5oIC0wLjA1NzQzMzM2NzA5Mzc5MjIyMyAwLjM1NDkxMTU5NTQxMjQ2NDU5IC0+IC0wLjA2NTIyMDQ5OTA0NjY5Njk1MyAwLjM2OTIxNzg4MzMyMzY5NDk4Cit0YW5oMDAxMyB0YW5oIC0xLjM1NDA0MTg2MjEyMzM1MTQgMC4xODk2OTQxNTY0MjI0MjUzNSAtPiAtMC44ODIzNTY0Mjg2MTE1MTM4NyAwLjA0Mzc2NDA2OTk4NDQxMTcyMQordGFuaDAwMTQgdGFuaCAwLjk0ODY0NzgzOTYxMDAzNTI5IC0wLjExMzMzNjg5NTc4ODY3NzE3IC0+IDAuNzQzNDg0MDE4NjE4NjEzNjggLTAuMDUxMjcxMDQyNTQzODU1MjIxCit0YW5oMDAxNSB0YW5oIDEuOTU5MTY5ODEzMzg0NTQ4OCAtMC4wMDI5NjU0NDQ0OTA0NTc4MzM5IC0+IDAuOTYxMDI3MDc3Njk2ODEzNSAtMC4wMDAyMjY2NDI0MDA0OTIxMjkzMwordGFuaDAwMTYgdGFuaCAxLjA5NDk3MTU3OTY2NjkxOTcgLTAuMjQ3MDY2NDI4NTM5ODQ0NTYgLT4gMC44MTYzNjU3NDUwMTM2OTM4NiAtMC4wODc3Njc0MzY5MTQxNDk5NTQKK3RhbmgwMDE3IHRhbmggNTc3MDQyOC4yMTEzNzMxMDQ3IC0zLjcxNjA1ODAzMzk4MzMxNjUgLT4gMS4wIC0wLjAKK3RhbmgwMDE4IHRhbmggMS41NTc2NzgyMzIxMzk5NjI5IC0xLjAzNTc5NDM3ODc5NjY0NjggLT4gMS4wNDAzMDAyMzg0ODk1Mzg4IC0wLjA4MTEyNjM0Nzg5NDY3MTQ2MwordGFuaDAwMTkgdGFuaCAwLjYyMzc4NTM2MjMwNTUyOTYxIDIuMzQ3MTM5MzU3OTU2MDIxNiAtPiAwLjg1NTgyNDk5MjM4OTYwMzYzIC0wLjUzNTY5NDczNjQ2ODQyODY5Cit0YW5oMDAyMCB0YW5oIDE3LjQwMDYyODYwMjUwODAyNSA5LjM5ODcwNTk1MzM4NDE5NzkgLT4gMC45OTk5OTk5OTk5OTk5OTg0NSAtOC4wMTc1ODY3NzIwNTMwODMyZS0xNwordGFuaDAwMjEgdGFuaCAwLjE1MDI2MTc3NTA5ODcxODk2IDAuNTA2MzAzNDkxNTk1MDU0NzIgLT4gMC4xOTM2NzUzNjU3MTgyNzc2OCAwLjUzODQ5ODQ3ODU4ODUzNjYxCit0YW5oMDAyMiB0YW5oIDAuNTc0MzM5Nzc1MzA3MTExNjcgMS4wMDcxNjA0NTQ2MjY1NjI3IC0+IDEuMDg1Nzg0ODE1OTI2Mjg0NCAwLjY5MTM5MjEzOTU1ODcyMjE0Cit0YW5oMDAyMyB0YW5oIDAuMTYyOTExODE1MDA0NDk0NTYgMC4wMDY5NzI4MTAyNDE1Njc1NDQgLT4gMC4xNjE0OTMzNTkwNzU1MTE1NyAwLjAwNjc5MTA3NzI5MDM0Njc4MTcKKworLS0gbGFyZ2UgcmVhbCBwYXJ0Cit0YW5oMDAzMCB0YW5oIDcxMCAwLjEzIC0+IDEuMCAwLjAKK3RhbmgwMDMxIHRhbmggLTcxMSA3LjQwMDAwMDAwMDAwMDAwMDQgLT4gLTEuMCAwLjAKK3RhbmgwMDMyIHRhbmggMTAwMCAtMi4zMTk5OTk5OTk5OTk5OTk4IC0+IDEuMCAwLjAKK3RhbmgwMDMzIHRhbmggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMzAwIC05LjY2OTk5OTk5OTk5OTk5OTkgLT4gLTEuMCAtMC4wCisKKy0tc3BlY2lhbCB2YWx1ZXMKK3RhbmgxMDAwIHRhbmggMC4wIDAuMCAtPiAwLjAgMC4wCit0YW5oMTAwMSB0YW5oIDAuMCBpbmYgLT4gbmFuIG5hbiAgICAgICAgaW52YWxpZAordGFuaDEwMDIgdGFuaCAyLjMgaW5mIC0+IG5hbiBuYW4gICAgICAgIGludmFsaWQKK3RhbmgxMDAzIHRhbmggMC4wIG5hbiAtPiBuYW4gbmFuCit0YW5oMTAwNCB0YW5oIDIuMyBuYW4gLT4gbmFuIG5hbgordGFuaDEwMDUgdGFuaCBpbmYgMC4wIC0+IDEuMCAwLjAKK3RhbmgxMDA2IHRhbmggaW5mIDAuNyAtPiAxLjAgMC4wCit0YW5oMTAwNyB0YW5oIGluZiAxLjQgLT4gMS4wIDAuMAordGFuaDEwMDggdGFuaCBpbmYgMi4xIC0+IDEuMCAtMC4wCit0YW5oMTAwOSB0YW5oIGluZiAyLjggLT4gMS4wIC0wLjAKK3RhbmgxMDEwIHRhbmggaW5mIDMuNSAtPiAxLjAgMC4wCit0YW5oMTAxMSB0YW5oIGluZiBpbmYgLT4gMS4wIDAuMCAgICAgICAgaWdub3JlLWltYWctc2lnbgordGFuaDEwMTIgdGFuaCBpbmYgbmFuIC0+IDEuMCAwLjAgICAgICAgIGlnbm9yZS1pbWFnLXNpZ24KK3RhbmgxMDEzIHRhbmggbmFuIDAuMCAtPiBuYW4gMC4wCit0YW5oMTAxNCB0YW5oIG5hbiAyLjMgLT4gbmFuIG5hbgordGFuaDEwMTUgdGFuaCBuYW4gaW5mIC0+IG5hbiBuYW4KK3RhbmgxMDE2IHRhbmggbmFuIG5hbiAtPiBuYW4gbmFuCit0YW5oMTAxNyB0YW5oIDAuMCAtMC4wIC0+IDAuMCAtMC4wCit0YW5oMTAxOCB0YW5oIDAuMCAtaW5mIC0+IG5hbiBuYW4gICAgICAgaW52YWxpZAordGFuaDEwMTkgdGFuaCAyLjMgLWluZiAtPiBuYW4gbmFuICAgICAgIGludmFsaWQKK3RhbmgxMDIwIHRhbmggaW5mIC0wLjAgLT4gMS4wIC0wLjAKK3RhbmgxMDIxIHRhbmggaW5mIC0wLjcgLT4gMS4wIC0wLjAKK3RhbmgxMDIyIHRhbmggaW5mIC0xLjQgLT4gMS4wIC0wLjAKK3RhbmgxMDIzIHRhbmggaW5mIC0yLjEgLT4gMS4wIDAuMAordGFuaDEwMjQgdGFuaCBpbmYgLTIuOCAtPiAxLjAgMC4wCit0YW5oMTAyNSB0YW5oIGluZiAtMy41IC0+IDEuMCAtMC4wCit0YW5oMTAyNiB0YW5oIGluZiAtaW5mIC0+IDEuMCAwLjAgICAgICAgaWdub3JlLWltYWctc2lnbgordGFuaDEwMjcgdGFuaCBuYW4gLTAuMCAtPiBuYW4gLTAuMAordGFuaDEwMjggdGFuaCBuYW4gLTIuMyAtPiBuYW4gbmFuCit0YW5oMTAyOSB0YW5oIG5hbiAtaW5mIC0+IG5hbiBuYW4KK3RhbmgxMDMwIHRhbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAordGFuaDEwMzEgdGFuaCAtMC4wIC1pbmYgLT4gbmFuIG5hbiAgICAgIGludmFsaWQKK3RhbmgxMDMyIHRhbmggLTIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICBpbnZhbGlkCit0YW5oMTAzMyB0YW5oIC0wLjAgbmFuIC0+IG5hbiBuYW4KK3RhbmgxMDM0IHRhbmggLTIuMyBuYW4gLT4gbmFuIG5hbgordGFuaDEwMzUgdGFuaCAtaW5mIC0wLjAgLT4gLTEuMCAtMC4wCit0YW5oMTAzNiB0YW5oIC1pbmYgLTAuNyAtPiAtMS4wIC0wLjAKK3RhbmgxMDM3IHRhbmggLWluZiAtMS40IC0+IC0xLjAgLTAuMAordGFuaDEwMzggdGFuaCAtaW5mIC0yLjEgLT4gLTEuMCAwLjAKK3RhbmgxMDM5IHRhbmggLWluZiAtMi44IC0+IC0xLjAgMC4wCit0YW5oMTA0MCB0YW5oIC1pbmYgLTMuNSAtPiAtMS4wIC0wLjAKK3RhbmgxMDQxIHRhbmggLWluZiAtaW5mIC0+IC0xLjAgMC4wICAgICBpZ25vcmUtaW1hZy1zaWduCit0YW5oMTA0MiB0YW5oIC1pbmYgbmFuIC0+IC0xLjAgMC4wICAgICAgaWdub3JlLWltYWctc2lnbgordGFuaDEwNDMgdGFuaCAtMC4wIDAuMCAtPiAtMC4wIDAuMAordGFuaDEwNDQgdGFuaCAtMC4wIGluZiAtPiBuYW4gbmFuICAgICAgIGludmFsaWQKK3RhbmgxMDQ1IHRhbmggLTIuMyBpbmYgLT4gbmFuIG5hbiAgICAgICBpbnZhbGlkCit0YW5oMTA0NiB0YW5oIC1pbmYgMC4wIC0+IC0xLjAgMC4wCit0YW5oMTA0NyB0YW5oIC1pbmYgMC43IC0+IC0xLjAgMC4wCit0YW5oMTA0OCB0YW5oIC1pbmYgMS40IC0+IC0xLjAgMC4wCit0YW5oMTA0OSB0YW5oIC1pbmYgMi4xIC0+IC0xLjAgLTAuMAordGFuaDEwNTAgdGFuaCAtaW5mIDIuOCAtPiAtMS4wIC0wLjAKK3RhbmgxMDUxIHRhbmggLWluZiAzLjUgLT4gLTEuMCAwLjAKK3RhbmgxMDUyIHRhbmggLWluZiBpbmYgLT4gLTEuMCAwLjAgICAgICBpZ25vcmUtaW1hZy1zaWduCisKKworLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvczogQ29zaW5lIC0tCistLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworY29zMDAwMCBjb3MgMC4wIDAuMCAtPiAxLjAgLTAuMAorY29zMDAwMSBjb3MgMC4wIC0wLjAgLT4gMS4wIDAuMAorY29zMDAwMiBjb3MgLTAuMCAwLjAgLT4gMS4wIDAuMAorY29zMDAwMyBjb3MgLTAuMCAtMC4wIC0+IDEuMCAtMC4wCisKKy0tIHJhbmRvbSBpbnB1dHMKK2NvczAwMDQgY29zIC0yLjA2ODkxOTQ2OTIwNzMwMzQgLTAuMDAxNjgwMjE4MTc1MTczNDMxMyAtPiAtMC40Nzc3NzgyNzIwODU2MTQ2OSAtMC4wMDE0NzYwNDAxNTAxNjk1OTcxCitjb3MwMDA1IGNvcyAtMC40MjA5NjI3MzE4MTc3OTc3IC0xLjgyMzg1MTY3NzQyNTgwMjcgLT4gMi45MDEwNDAyMjAxNDQ0MTA4IC0xLjIzMjkyMDcwNDIzMjk2MTcKK2NvczAwMDYgY29zIC0xLjk0MDIxODE2MzA2OTQ1NTcgLTIuOTc1MTg1NzM5Mjg5MTIxNyAtPiAtMy41NDY1NDU5Mjk3OTcwOTg1IC05LjExMTkxNjM1ODYyODIyNDgKK2NvczAwMDcgY29zIC0zLjMxMTgzMjAyOTAxOTE2MTYgLTAuODc4NzEzMDI5MDkyODYxNDIgLT4gLTEuMzkxMTUyODYzNjU2NTQ5OCAwLjE2ODc4MTQxNTE3MzkxNzAxCitjb3MwMDA4IGNvcyAtNC45NTQwNDA0NjIzMzc2ODcyIC0wLjU3OTQ5MjMyMjM5MDI2ODI3IC0+IDAuMjgwNjI0NDU1ODY1NTIwNjUgMC41OTQ2Nzg2MTMwODUwODAwOAorY29zMDAwOSBjb3MgLTAuNDUzNzQ1ODQzMTYyNDUwMjYgMS4zOTUwMjgzNDQ4MzczOTM1IC0+IDEuOTI0NzY2NTU3NDI5MDU3OCAwLjgzMDA0NTcyMjA0NzYxMTA3Citjb3MwMDEwIGNvcyAtMC40MjU3ODE3MjA0MDE3Njg0MyAxLjI3MTU4ODE2MTU0MTMwNDkgLT4gMS43NTE3MTYxNDU5NDg5MTQ4IDAuNjc4NjM5MDI2OTczNjMzMzIKK2NvczAwMTEgY29zIC0wLjEzODYyOTg1MzU0MzAwMTM2IDAuNDM1ODc2MzU4Nzc2NzAzMjggLT4gMS4wODU5ODgwMjkwMzYxOTEyIDAuMDYyMTU3NTQ4MTQ2NjcyMjcyCitjb3MwMDEyIGNvcyAtMC4xMTA3MzIyMTMwODk2NjU4NCA5LjkzODQwODIzMDczMjY0NzVlLTE1IC0+IDAuOTkzODc1NDUwNDA3MjI5NDcgMS4wOTgyNTQzMjY0MDY1NDc5ZS0xNQorY29zMDAxMyBjb3MgLTEuNTAyNzYzMzY2MjA1NDYyM2UtMDcgMC4wMDY5NjY4MDYwMjQ5OTU1NDk4IC0+IDEuMDAwMDI0MjY4MjkxMjQxMiAxLjA0Njk1NDU1NjU2NjA5OTVlLTA5Citjb3MwMDE0IGNvcyA0Ljk3Mjg2NDU0OTA1MDMwNTIgLTAuMDAwMjc0Nzk4MDg4NjA5NTI4MjIgLT4gMC4yNTc1NDAxMTczMTk3NTUwMSAtMC4wMDAyNjU1Mjg0OTU0OTA4MzE4NgorY29zMDAxNSBjb3MgNy44MTk2OTMwMzQ4NjcxOSAtMC43OTYyMTUyMzQ0NTg3ODc4MyAtPiAwLjA0NTczNDg4MjUwMTU4NTA2MyAwLjg4MjUzMTM5OTMzMDgyOTkxCitjb3MwMDE2IGNvcyAwLjEzMjcyNDIxODgwNzY2NzE2IC0wLjc0NjY4NDQ1MzA4NzE4MjAxIC0+IDEuMjgwNjAxMjI0NDQzMjg0NyAwLjEwODI1MzczMjY3NDM3MDA1Citjb3MwMDE3IGNvcyA0LjIzOTY1MjE5ODU5NzMyNzQgLTIuMjE3ODg0ODM4MDg4NDg4MSAtPiAtMi4xMTY1MTE3MDU3MDU2ODU1IC00LjA0MTY0OTI0NDQ2NDE0MDEKK2NvczAwMTggY29zIDEuMTYyMjIwNjYyNDkyNzI5NiAtMC41MDQwMDExNTQ2MTE5NzA4MSAtPiAwLjQ0ODg0MDcyNjEzMzcwMzc5IDAuNDgyMzQ2OTkxNTAzNDMxOAorY29zMDAxOSBjb3MgMS42Mjg3NzI4NjQ2MjA4ODRlLTA4IDAuNTgyMDU3MDU0Mjg5NzkyODIgLT4gMS4xNzQyMzE5OTk1NzkxNDM1IC0xLjAwMjQ4Mzk0ODE5NTY2MDRlLTA4Citjb3MwMDIwIGNvcyAyLjYzODUyMTI2MDYxMTEyNDEgMi45ODg2MTA3MTAwOTM3Mjk2IC0+IC04LjcyMDk0NzU5MjcxNjE0MTcgLTQuNzc0ODM1MjEwNzE5OTc5NgorY29zMDAyMSBjb3MgNC44MDQ4Mzc1MjYzNzc1MjU2IDAuMDA2MjI0ODg1Mjg5ODUxNTY1OCAtPiAwLjA5MjMxODcwMjAxNTg0NjI0MyAwLjAwNjE5ODM0MzA0MjIzMDYxNDIKK2NvczAwMjIgY29zIDcuOTkxNDUxNTQzMzg1ODUxNSAwLjcxNjU5OTY2NjE1NTAxNDM2IC0+IC0wLjE3Mzc1NDM5OTA2OTM2NTY2IC0wLjc3MjE3MDQzNTI3Mjk0NTgyCitjb3MwMDIzIGNvcyAwLjQ1MTI0MzUxMTUyNTQwMjI2IDEuNjk5MjY5Mzk5MzgxMjE1OCAtPiAyLjU0MzQ3Nzk0ODk3MjIzNyAtMS4xNTI4MTkzNjk0ODc1NDc3CisKKy0tIHNwZWNpYWwgdmFsdWVzCitjb3MxMDAwIGNvcyAtMC4wIDAuMCAtPiAxLjAgMC4wCitjb3MxMDAxIGNvcyAtaW5mIDAuMCAtPiBuYW4gMC4wIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorY29zMTAwMiBjb3MgbmFuIDAuMCAtPiBuYW4gMC4wIGlnbm9yZS1pbWFnLXNpZ24KK2NvczEwMDMgY29zIC1pbmYgMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4gaW52YWxpZAorY29zMTAwNCBjb3MgbmFuIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCitjb3MxMDA1IGNvcyAtMC4wIGluZiAtPiBpbmYgMC4wCitjb3MxMDA2IGNvcyAtMS4zOTk5OTk5OTk5OTk5OTk5IGluZiAtPiBpbmYgaW5mCitjb3MxMDA3IGNvcyAtMi43OTk5OTk5OTk5OTk5OTk4IGluZiAtPiAtaW5mIGluZgorY29zMTAwOCBjb3MgLTQuMjAwMDAwMDAwMDAwMDAwMiBpbmYgLT4gLWluZiAtaW5mCitjb3MxMDA5IGNvcyAtNS41OTk5OTk5OTk5OTk5OTk2IGluZiAtPiBpbmYgLWluZgorY29zMTAxMCBjb3MgLTcuMCBpbmYgLT4gaW5mIGluZgorY29zMTAxMSBjb3MgLWluZiBpbmYgLT4gaW5mIG5hbiBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK2NvczEwMTIgY29zIG5hbiBpbmYgLT4gaW5mIG5hbgorY29zMTAxMyBjb3MgLTAuMCBuYW4gLT4gbmFuIDAuMCBpZ25vcmUtaW1hZy1zaWduCitjb3MxMDE0IGNvcyAtMi4yOTk5OTk5OTk5OTk5OTk4IG5hbiAtPiBuYW4gbmFuCitjb3MxMDE1IGNvcyAtaW5mIG5hbiAtPiBuYW4gbmFuCitjb3MxMDE2IGNvcyBuYW4gbmFuIC0+IG5hbiBuYW4KK2NvczEwMTcgY29zIDAuMCAwLjAgLT4gMS4wIC0wLjAKK2NvczEwMTggY29zIGluZiAwLjAgLT4gbmFuIDAuMCBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK2NvczEwMTkgY29zIGluZiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbiBpbnZhbGlkCitjb3MxMDIwIGNvcyAwLjAgaW5mIC0+IGluZiAtMC4wCitjb3MxMDIxIGNvcyAxLjM5OTk5OTk5OTk5OTk5OTkgaW5mIC0+IGluZiAtaW5mCitjb3MxMDIyIGNvcyAyLjc5OTk5OTk5OTk5OTk5OTggaW5mIC0+IC1pbmYgLWluZgorY29zMTAyMyBjb3MgNC4yMDAwMDAwMDAwMDAwMDAyIGluZiAtPiAtaW5mIGluZgorY29zMTAyNCBjb3MgNS41OTk5OTk5OTk5OTk5OTk2IGluZiAtPiBpbmYgaW5mCitjb3MxMDI1IGNvcyA3LjAgaW5mIC0+IGluZiAtaW5mCitjb3MxMDI2IGNvcyBpbmYgaW5mIC0+IGluZiBuYW4gaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCitjb3MxMDI3IGNvcyAwLjAgbmFuIC0+IG5hbiAwLjAgaWdub3JlLWltYWctc2lnbgorY29zMTAyOCBjb3MgMi4yOTk5OTk5OTk5OTk5OTk4IG5hbiAtPiBuYW4gbmFuCitjb3MxMDI5IGNvcyBpbmYgbmFuIC0+IG5hbiBuYW4KK2NvczEwMzAgY29zIDAuMCAtMC4wIC0+IDEuMCAwLjAKK2NvczEwMzEgY29zIGluZiAtMC4wIC0+IG5hbiAwLjAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitjb3MxMDMyIGNvcyBuYW4gLTAuMCAtPiBuYW4gMC4wIGlnbm9yZS1pbWFnLXNpZ24KK2NvczEwMzMgY29zIGluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4gaW52YWxpZAorY29zMTAzNCBjb3MgbmFuIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbgorY29zMTAzNSBjb3MgMC4wIC1pbmYgLT4gaW5mIDAuMAorY29zMTAzNiBjb3MgMS4zOTk5OTk5OTk5OTk5OTk5IC1pbmYgLT4gaW5mIGluZgorY29zMTAzNyBjb3MgMi43OTk5OTk5OTk5OTk5OTk4IC1pbmYgLT4gLWluZiBpbmYKK2NvczEwMzggY29zIDQuMjAwMDAwMDAwMDAwMDAwMiAtaW5mIC0+IC1pbmYgLWluZgorY29zMTAzOSBjb3MgNS41OTk5OTk5OTk5OTk5OTk2IC1pbmYgLT4gaW5mIC1pbmYKK2NvczEwNDAgY29zIDcuMCAtaW5mIC0+IGluZiBpbmYKK2NvczEwNDEgY29zIGluZiAtaW5mIC0+IGluZiBuYW4gaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCitjb3MxMDQyIGNvcyBuYW4gLWluZiAtPiBpbmYgbmFuCitjb3MxMDQzIGNvcyAtMC4wIC0wLjAgLT4gMS4wIC0wLjAKK2NvczEwNDQgY29zIC1pbmYgLTAuMCAtPiBuYW4gMC4wIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorY29zMTA0NSBjb3MgLWluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4gaW52YWxpZAorY29zMTA0NiBjb3MgLTAuMCAtaW5mIC0+IGluZiAtMC4wCitjb3MxMDQ3IGNvcyAtMS4zOTk5OTk5OTk5OTk5OTk5IC1pbmYgLT4gaW5mIC1pbmYKK2NvczEwNDggY29zIC0yLjc5OTk5OTk5OTk5OTk5OTggLWluZiAtPiAtaW5mIC1pbmYKK2NvczEwNDkgY29zIC00LjIwMDAwMDAwMDAwMDAwMDIgLWluZiAtPiAtaW5mIGluZgorY29zMTA1MCBjb3MgLTUuNTk5OTk5OTk5OTk5OTk5NiAtaW5mIC0+IGluZiBpbmYKK2NvczEwNTEgY29zIC03LjAgLWluZiAtPiBpbmYgLWluZgorY29zMTA1MiBjb3MgLWluZiAtaW5mIC0+IGluZiBuYW4gaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCisKKworLS0tLS0tLS0tLS0tLS0tCistLSBzaW46IFNpbmUgLS0KKy0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworc2luMDAwMCBzaW4gMC4wIDAuMCAtPiAwLjAgMC4wCitzaW4wMDAxIHNpbiAwLjAgLTAuMCAtPiAwLjAgLTAuMAorc2luMDAwMiBzaW4gLTAuMCAwLjAgLT4gLTAuMCAwLjAKK3NpbjAwMDMgc2luIC0wLjAgLTAuMCAtPiAtMC4wIC0wLjAKKworLS0gcmFuZG9tIGlucHV0cworc2luMDAwNCBzaW4gLTAuMTg2OTE4MjkxNjMxNjM3NTkgLTAuNzQzODg3NDE5ODU1MDcwMzQgLT4gLTAuMjM5NjYzNjczMzc3MzQ0NCAtMC44MDAyMzIzMTEwMTg1Njc1MQorc2luMDAwNSBzaW4gLTAuNDUxMjc0NTM3MDI0NTkxNTggLTQ2MS44MTMzOTkyMDcxNjE2NCAtPiAtNy45NzIyMjk5MzMxMDc3ODc3ZSsxOTkgLTEuNjQ1MDIwNTgxMTAwNDYyOGUrMjAwCitzaW4wMDA2IHNpbiAtMC40NzY2OTIyODM0NTc2ODkyMSAtMi43MzY5OTM2NTY0OTg3NTE0IC0+IC0zLjU1NzIzODAyMjI2NzEyNCAtNi44MzA4MDMwNzcxMjI2NjE1CitzaW4wMDA3IHNpbiAtMC4zMTAyNDI4NTUyNTk1MDg1NyAtMS40ODY5MjE5OTM5MTg4Mjk2IC0+IC0wLjcwOTcyNjc2MDQ3MTc1MjA5IC0xLjk5ODUwMjk2MzU0MjY4MzkKK3NpbjAwMDggc2luIC00LjQxOTQ1NzM0MDcwMjU2MDggLTEuNDA1OTk5MjEwOTg5Mjg4IC0+IDIuMDcwMjQ4MDgwMDgwMjY4NSAwLjU1MzYyMjUwNzkyMTgwNjAxCitzaW4wMDA5IHNpbiAtMS43ODEwODMyMDQ2NDM0ODk4ZS0wNSAwLjAwMTY0Mzk1NTUzODQzNzkwODMgLT4gLTEuNzgxMDg1NjExMzE4NTI2MWUtMDUgMC4wMDE2NDM5NTYyNzg2NjY4Mzc1CitzaW4wMDEwIHNpbiAtMC44MjAwMDE3ODc0ODk3NjY2IDAuNjE3MjQ4NzY4ODc3NzE5MjkgLT4gLTAuODc0OTA3ODE5NTk0ODg2NSAwLjQ0ODM1Mjk1NTUwOTg3NzU4CitzaW4wMDExIHNpbiAtMS40NTM2NTAyODA2MTA3MTE0IDAuNjM5OTg1NzU1MzQxNTA0MTUgLT4gLTEuMjAzNTcwOTkyOTQzNzY3OSAwLjA4MDAxMjE4NzQ4OTE2MzcwOAorc2luMDAxMiBzaW4gLTIuMjY1MzQxMjE1NTUwNjA3OSAwLjEzMTcyNzYwNjg1NTgzNzI5IC0+IC0wLjc3NTAyMDkzODA5MTkwNDMxIC0wLjA4NDU1NDQyNjg2ODIyOTUzMgorc2luMDAxMyBzaW4gLTAuMDI2MTM5ODMwNjk0OTE4NTggMC4xODQwNDc2NjU5Nzc3NjA3MyAtPiAtMC4wMjY1ODA3Nzg4NjMxMjc5NDMgMC4xODUwMjUyNTM5NjczNTY0Mgorc2luMDAxNCBzaW4gMS41NzQzMDY1MDAxMDU0NjE3IC0wLjUzMTI1NTc0MjcyNjQyMDI5IC0+IDEuMTQ0NDU5NjMzMjA5MjcyNSAwLjAwMTk1Mzc1OTgwOTkzNTIwNzcKK3NpbjAwMTUgc2luIDcuMzgzMzEwMTc5MTI4MzI4OWUtMjAgLTAuMTY0NTMyMjEzMjQyMzYyMTcgLT4gNy40ODM0NzIwNjc0Mzc5NDI5ZS0yMCAtMC4xNjUyNzU1NTY0NjQ2NjkxNQorc2luMDAxNiBzaW4gMC4zNDc2MzgzNDY0MTI1NDAzOCAtMi44Mzc3NDE2NDIxMDg5NTY1IC0+IDIuOTE4ODgzNTQxNTA0NjYzIC04LjAwMDI3MTgwNTMyNTAyMjQKK3NpbjAwMTcgc2luIDAuMDc3MTA1Nzg1MTgwNDIxNTYzIC0wLjA5MDA1NjAyNzMxNjIwMDY3NCAtPiAwLjA3NzM0MTk3MzgxNDQ3MTMwNCAtMC4wODk5MDk4NjkzODA1MjQ1ODcKK3NpbjAwMTggc2luIDMuOTA2MzIyNzc5ODE0MjMyOWUtMTcgLTAuMDU5NTQwOTg2NTQyOTU1MjQgLT4gMy45MTMyNDkwMzQ4OTU2NTEyZS0xNyAtMC4wNTk1NzYxNzI4NTk4MzczNTEKK3NpbjAwMTkgc2luIDAuNTczMzM5MTc5MzI1NDQ1OTggOC43Nzg1MjIxNDMwNTk0Njk2ZS0wNiAtPiAwLjU0MjQ0MDI5MzM4MzAyOTM1IDcuMzc0Nzg2OTEyNTMwMTM2OGUtMDYKK3NpbjAwMjAgc2luIDAuMDI0ODYxNzIyODE2NTEzMTY5IDAuMzMwNDQ2MjA3NTYxMTg1MTUgLT4gMC4wMjYyMjg4MDEzNjk2NTEgMC4zMzYzODg5NjcxNTcwNjg5CitzaW4wMDIxIHNpbiAxLjQzNDI3MjczODc0OTI2NzEgMC44MTM2MTg4OTc5MDI4NDM0NyAtPiAxLjMzNzA5NjAwNjA5NDc5MjMgMC4xMjMzNjEzNzk2MTM4NzE2Mworc2luMDAyMiBzaW4gMS4xNTE4MDg3MzU0NDAzNzI1IDQuODU5NzIzNTk2NjE1MDU1OCAtPiA1OC45MTkxNDE5ODk2MDMwNDEgMjYuMjM3MDAzNDAzNzU4ODUyCitzaW4wMDIzIHNpbiAwLjAwMDg3NzczMDc4NDA2NjQ5MTkyIDM0Ljc5MjM3OTIxMTMxMjA5NSAtPiA1NjU1NDgxNDU1NjkuMzgyNDUgNjQ0MzI5Njg1ODIyNzAwLjYyCisKKy0tIHNwZWNpYWwgdmFsdWVzCitzaW4xMDAwIHNpbiAtMC4wIDAuMCAtPiAtMC4wIDAuMAorc2luMTAwMSBzaW4gLWluZiAwLjAgLT4gbmFuIDAuMCBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwMDIgc2luIG5hbiAwLjAgLT4gbmFuIDAuMCBpZ25vcmUtaW1hZy1zaWduCitzaW4xMDAzIHNpbiAtaW5mIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuIGludmFsaWQKK3NpbjEwMDQgc2luIG5hbiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbgorc2luMTAwNSBzaW4gLTAuMCBpbmYgLT4gLTAuMCBpbmYKK3NpbjEwMDYgc2luIC0xLjM5OTk5OTk5OTk5OTk5OTkgaW5mIC0+IC1pbmYgaW5mCitzaW4xMDA3IHNpbiAtMi43OTk5OTk5OTk5OTk5OTk4IGluZiAtPiAtaW5mIC1pbmYKK3NpbjEwMDggc2luIC00LjIwMDAwMDAwMDAwMDAwMDIgaW5mIC0+IGluZiAtaW5mCitzaW4xMDA5IHNpbiAtNS41OTk5OTk5OTk5OTk5OTk2IGluZiAtPiBpbmYgaW5mCitzaW4xMDEwIHNpbiAtNy4wIGluZiAtPiAtaW5mIGluZgorc2luMTAxMSBzaW4gLWluZiBpbmYgLT4gbmFuIGluZiBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwMTIgc2luIG5hbiBpbmYgLT4gbmFuIGluZiBpZ25vcmUtaW1hZy1zaWduCitzaW4xMDEzIHNpbiAtMC4wIG5hbiAtPiAtMC4wIG5hbgorc2luMTAxNCBzaW4gLTIuMjk5OTk5OTk5OTk5OTk5OCBuYW4gLT4gbmFuIG5hbgorc2luMTAxNSBzaW4gLWluZiBuYW4gLT4gbmFuIG5hbgorc2luMTAxNiBzaW4gbmFuIG5hbiAtPiBuYW4gbmFuCitzaW4xMDE3IHNpbiAwLjAgMC4wIC0+IDAuMCAwLjAKK3NpbjEwMTggc2luIGluZiAwLjAgLT4gbmFuIDAuMCBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwMTkgc2luIGluZiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbiBpbnZhbGlkCitzaW4xMDIwIHNpbiAwLjAgaW5mIC0+IDAuMCBpbmYKK3NpbjEwMjEgc2luIDEuMzk5OTk5OTk5OTk5OTk5OSBpbmYgLT4gaW5mIGluZgorc2luMTAyMiBzaW4gMi43OTk5OTk5OTk5OTk5OTk4IGluZiAtPiBpbmYgLWluZgorc2luMTAyMyBzaW4gNC4yMDAwMDAwMDAwMDAwMDAyIGluZiAtPiAtaW5mIC1pbmYKK3NpbjEwMjQgc2luIDUuNTk5OTk5OTk5OTk5OTk5NiBpbmYgLT4gLWluZiBpbmYKK3NpbjEwMjUgc2luIDcuMCBpbmYgLT4gaW5mIGluZgorc2luMTAyNiBzaW4gaW5mIGluZiAtPiBuYW4gaW5mIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorc2luMTAyNyBzaW4gMC4wIG5hbiAtPiAwLjAgbmFuCitzaW4xMDI4IHNpbiAyLjI5OTk5OTk5OTk5OTk5OTggbmFuIC0+IG5hbiBuYW4KK3NpbjEwMjkgc2luIGluZiBuYW4gLT4gbmFuIG5hbgorc2luMTAzMCBzaW4gMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3NpbjEwMzEgc2luIGluZiAtMC4wIC0+IG5hbiAwLjAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitzaW4xMDMyIHNpbiBuYW4gLTAuMCAtPiBuYW4gMC4wIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwMzMgc2luIGluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4gaW52YWxpZAorc2luMTAzNCBzaW4gbmFuIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbgorc2luMTAzNSBzaW4gMC4wIC1pbmYgLT4gMC4wIC1pbmYKK3NpbjEwMzYgc2luIDEuMzk5OTk5OTk5OTk5OTk5OSAtaW5mIC0+IGluZiAtaW5mCitzaW4xMDM3IHNpbiAyLjc5OTk5OTk5OTk5OTk5OTggLWluZiAtPiBpbmYgaW5mCitzaW4xMDM4IHNpbiA0LjIwMDAwMDAwMDAwMDAwMDIgLWluZiAtPiAtaW5mIGluZgorc2luMTAzOSBzaW4gNS41OTk5OTk5OTk5OTk5OTk2IC1pbmYgLT4gLWluZiAtaW5mCitzaW4xMDQwIHNpbiA3LjAgLWluZiAtPiBpbmYgLWluZgorc2luMTA0MSBzaW4gaW5mIC1pbmYgLT4gbmFuIGluZiBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwNDIgc2luIG5hbiAtaW5mIC0+IG5hbiBpbmYgaWdub3JlLWltYWctc2lnbgorc2luMTA0MyBzaW4gLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorc2luMTA0NCBzaW4gLWluZiAtMC4wIC0+IG5hbiAwLjAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitzaW4xMDQ1IHNpbiAtaW5mIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbiBpbnZhbGlkCitzaW4xMDQ2IHNpbiAtMC4wIC1pbmYgLT4gLTAuMCAtaW5mCitzaW4xMDQ3IHNpbiAtMS4zOTk5OTk5OTk5OTk5OTk5IC1pbmYgLT4gLWluZiAtaW5mCitzaW4xMDQ4IHNpbiAtMi43OTk5OTk5OTk5OTk5OTk4IC1pbmYgLT4gLWluZiBpbmYKK3NpbjEwNDkgc2luIC00LjIwMDAwMDAwMDAwMDAwMDIgLWluZiAtPiBpbmYgaW5mCitzaW4xMDUwIHNpbiAtNS41OTk5OTk5OTk5OTk5OTk2IC1pbmYgLT4gaW5mIC1pbmYKK3NpbjEwNTEgc2luIC03LjAgLWluZiAtPiAtaW5mIC1pbmYKK3NpbjEwNTIgc2luIC1pbmYgLWluZiAtPiBuYW4gaW5mIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLQorLS0gdGFuOiBUYW5nZW50IC0tCistLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gemVyb3MKK3RhbjAwMDAgdGFuIDAuMCAwLjAgLT4gMC4wIDAuMAordGFuMDAwMSB0YW4gMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3RhbjAwMDIgdGFuIC0wLjAgMC4wIC0+IC0wLjAgMC4wCit0YW4wMDAzIHRhbiAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCisKKy0tIHJhbmRvbSBpbnB1dHMKK3RhbjAwMDQgdGFuIC0wLjU2Mzc4NTYxODMzODYxMDc0IC0xLjcxMTAyNzYyMzcxODc2NjRlKzczIC0+IC0wLjAgLTEuMAordGFuMDAwNSB0YW4gLTMuNTQ1MTYzMzk5MzQ3MTkxNWUtMTIgLTIuODU1NDcxODYzNTY0MDU5IC0+IC00LjY2MjI0NDEzMDQ4ODk1NzVlLTE0IC0wLjk5MzQwMjczODQzMDkzOTUxCit0YW4wMDA2IHRhbiAtMi41MDI0NDI3MTk2Mzg2OTYgLTAuMjY3NDIyMzQzOTA1MDQyMjEgLT4gMC42NjczNTIxNTI1Mjk5NDk5NSAtMC4zOTA3ODk5NzkzNTQyMDk1NgordGFuMDAwNyB0YW4gLTAuODc2Mzk1OTc3MjAzNzEzNjUgLTU1LjU4NjIyNTUyMzI4MDIwNiAtPiAtMS4wMjg1MjY0NTY1OTQ4MTc2ZS00OCAtMS4wCit0YW4wMDA4IHRhbiAtMC4wMTU3ODM4Njk1OTY0MjcyNDMgLTUyMC4wNTk0NDQzNjAzOTI3MiAtPiAtMC4wIC0xLjAKK3RhbjAwMDkgdGFuIC0wLjg0NjQzNTQ5OTkwNzI1MTY0IDIuMDc0OTA5NzkzNTM5NjM0MyAtPiAtMC4wMzE0MTI2NjE2NzY5NTk1NzMgMS4wMDMzNTQ4NDc5NTI2NzY0Cit0YW4wMDEwIHRhbiAtMC40MzYxMzc5MjI0ODU1OTY0NiA4LjEwODI3NDE2Mjk0NTgwNTkgLT4gLTEuMzg3OTg0ODQ0NDY0NDU5M2UtMDcgMC45OTk5OTk4ODM0NDIyNDAxMQordGFuMDAxMSB0YW4gLTEuMDgyMDkwNjM2NzgzMzExNCAwLjI4NTcxODY4OTkyNDgwMjQ4IC0+IC0xLjM2MjI0ODU3Mzc5MzY1MzYgMC45OTA4OTI2OTM3Nzk3MTI0NQordGFuMDAxMiB0YW4gLTEuMTQ3Nzg1OTU4MDIyMDA4NCAxLjkwMjE2MzcwMDI3MDgwNDEgLT4gLTAuMDM0MzQ4NDUwMDQyMDcxMTk2IDEuMDI5Mzk1NDA5NzkwMTY4NwordGFuMDAxMyB0YW4gLTAuMTI0NjU1NDMxNzY5NTM0MDkgMy4wNjA2ODUxMDE2MzQ0ODE1ZS0wNSAtPiAtMC4xMjUzMDUxNDI5MDM4NzM0MyAzLjEwODc0MjA3Njk5NDU0NzllLTA1Cit0YW4wMDE0IHRhbiAzLjc1ODI4NDg3MTc1MjUzNDMgLTY5Mjc4NzAyMC40NDAzODkzOSAtPiAwLjAgLTEuMAordGFuMDAxNSB0YW4gMi4yMzIxOTY3NjU1MTQyMTc2ZS0wNiAtMTAuMDkwMDY5NDIzMDA4MTY5IC0+IDEuNTM2OTg0NjEyMDYyMjY0M2UtMTQgLTAuOTk5OTk5OTk2NTU3MjM3NTkKK3RhbjAwMTYgdGFuIDAuODgzNzExNzIzOTAyNDUwMTIgLTEuMTYzNTA1MzYzMDEzMjgyMyAtPiAwLjE5NzA1MDE3MTE4NjI1ODg5IC0xLjAxOTY0NTIyODA4NDMxMjkKK3RhbjAwMTcgdGFuIDIuMTM0NzQxNDIzMTg0OTI2NyAtMS45MzExMzM5OTYwNDE2ODMxIC0+IC0wLjAzODY2MzU3NjkxNTk4MjUyNCAtMS4wMTc0Mzk5OTkzOTgwNzc4Cit0YW4wMDE4IHRhbiA1LjkwMjc5NDUyNTU4OTk5NzQgLTIuMTU3NDE5NTY4NDYwNzEzNWUtMTgzIC0+IC0wLjM5OTg2NTkxNTM5MjgxNDk2IC0yLjUwMjM3NTMxNjc5NzY5MTVlLTE4MwordGFuMDAxOSB0YW4gMC40NDgxMTQ4OTQ5MDgwNTM2MiA2ODMyMTYwNzU2NzAuMDc1NTYgLT4gMC4wIDEuMAordGFuMDAyMCB0YW4gNC4xNDU5NzY2Mzk2MDY4MzI1IDEyLjUyMzAxNzIwNTYwNTc1NiAtPiAyLjQwMjI1MTQ3NTg5ODgwNjhlLTExIDEuMDAwMDAwMDAwMDExMjQ5OQordGFuMDAyMSB0YW4gMS43ODA5NjE3OTY4NDQzMjcyIDEuNTA1MjM4MTcwMjg1MzM3OSAtPiAtMC4wNDQwNjYyMjIxMTg5NDY5MDMgMS4wOTMyNjg0NTE3NzAyNzc4Cit0YW4wMDIyIHRhbiAxLjE2MTUzMTM5MDA4ODA1NzcgMS43OTU2Mjk4NzI4NjQ3MTA3IC0+IDAuMDQxNzkzMTg2ODI2MzkwMzYyIDEuMDM3NTMzOTU0NjAzNDc5MgordGFuMDAyMyB0YW4gMC4wNjcwMTQ3Nzk0Nzc5MDg5NDUgNS44NTE3MzYxNTc3NDU3MDk3IC0+IDIuMjA4ODYzOTc1NDgwMDAzNGUtMDYgMC45OTk5ODM2MTgyNDIwMDYxCisKKy0tIHNwZWNpYWwgdmFsdWVzCit0YW4xMDAwIHRhbiAtMC4wIDAuMCAtPiAtMC4wIDAuMAordGFuMTAwMSB0YW4gLWluZiAwLjAgLT4gbmFuIG5hbiBpbnZhbGlkCit0YW4xMDAyIHRhbiAtaW5mIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuIGludmFsaWQKK3RhbjEwMDMgdGFuIG5hbiAwLjAgLT4gbmFuIG5hbgordGFuMTAwNCB0YW4gbmFuIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCit0YW4xMDA1IHRhbiAtMC4wIGluZiAtPiAtMC4wIDEuMAordGFuMTAwNiB0YW4gLTAuNjk5OTk5OTk5OTk5OTk5OTYgaW5mIC0+IC0wLjAgMS4wCit0YW4xMDA3IHRhbiAtMS4zOTk5OTk5OTk5OTk5OTk5IGluZiAtPiAtMC4wIDEuMAordGFuMTAwOCB0YW4gLTIuMTAwMDAwMDAwMDAwMDAwMSBpbmYgLT4gMC4wIDEuMAordGFuMTAwOSB0YW4gLTIuNzk5OTk5OTk5OTk5OTk5OCBpbmYgLT4gMC4wIDEuMAordGFuMTAxMCB0YW4gLTMuNSBpbmYgLT4gLTAuMCAxLjAKK3RhbjEwMTEgdGFuIC1pbmYgaW5mIC0+IC0wLjAgMS4wIGlnbm9yZS1yZWFsLXNpZ24KK3RhbjEwMTIgdGFuIG5hbiBpbmYgLT4gLTAuMCAxLjAgaWdub3JlLXJlYWwtc2lnbgordGFuMTAxMyB0YW4gLTAuMCBuYW4gLT4gLTAuMCBuYW4KK3RhbjEwMTQgdGFuIC0yLjI5OTk5OTk5OTk5OTk5OTggbmFuIC0+IG5hbiBuYW4KK3RhbjEwMTUgdGFuIC1pbmYgbmFuIC0+IG5hbiBuYW4KK3RhbjEwMTYgdGFuIG5hbiBuYW4gLT4gbmFuIG5hbgordGFuMTAxNyB0YW4gMC4wIDAuMCAtPiAwLjAgMC4wCit0YW4xMDE4IHRhbiBpbmYgMC4wIC0+IG5hbiBuYW4gaW52YWxpZAordGFuMTAxOSB0YW4gaW5mIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuIGludmFsaWQKK3RhbjEwMjAgdGFuIDAuMCBpbmYgLT4gMC4wIDEuMAordGFuMTAyMSB0YW4gMC42OTk5OTk5OTk5OTk5OTk5NiBpbmYgLT4gMC4wIDEuMAordGFuMTAyMiB0YW4gMS4zOTk5OTk5OTk5OTk5OTk5IGluZiAtPiAwLjAgMS4wCit0YW4xMDIzIHRhbiAyLjEwMDAwMDAwMDAwMDAwMDEgaW5mIC0+IC0wLjAgMS4wCit0YW4xMDI0IHRhbiAyLjc5OTk5OTk5OTk5OTk5OTggaW5mIC0+IC0wLjAgMS4wCit0YW4xMDI1IHRhbiAzLjUgaW5mIC0+IDAuMCAxLjAKK3RhbjEwMjYgdGFuIGluZiBpbmYgLT4gLTAuMCAxLjAgaWdub3JlLXJlYWwtc2lnbgordGFuMTAyNyB0YW4gMC4wIG5hbiAtPiAwLjAgbmFuCit0YW4xMDI4IHRhbiAyLjI5OTk5OTk5OTk5OTk5OTggbmFuIC0+IG5hbiBuYW4KK3RhbjEwMjkgdGFuIGluZiBuYW4gLT4gbmFuIG5hbgordGFuMTAzMCB0YW4gMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3RhbjEwMzEgdGFuIGluZiAtMC4wIC0+IG5hbiBuYW4gaW52YWxpZAordGFuMTAzMiB0YW4gaW5mIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbiBpbnZhbGlkCit0YW4xMDMzIHRhbiBuYW4gLTAuMCAtPiBuYW4gbmFuCit0YW4xMDM0IHRhbiBuYW4gLTIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCit0YW4xMDM1IHRhbiAwLjAgLWluZiAtPiAwLjAgLTEuMAordGFuMTAzNiB0YW4gMC42OTk5OTk5OTk5OTk5OTk5NiAtaW5mIC0+IDAuMCAtMS4wCit0YW4xMDM3IHRhbiAxLjM5OTk5OTk5OTk5OTk5OTkgLWluZiAtPiAwLjAgLTEuMAordGFuMTAzOCB0YW4gMi4xMDAwMDAwMDAwMDAwMDAxIC1pbmYgLT4gLTAuMCAtMS4wCit0YW4xMDM5IHRhbiAyLjc5OTk5OTk5OTk5OTk5OTggLWluZiAtPiAtMC4wIC0xLjAKK3RhbjEwNDAgdGFuIDMuNSAtaW5mIC0+IDAuMCAtMS4wCit0YW4xMDQxIHRhbiBpbmYgLWluZiAtPiAtMC4wIC0xLjAgaWdub3JlLXJlYWwtc2lnbgordGFuMTA0MiB0YW4gbmFuIC1pbmYgLT4gLTAuMCAtMS4wIGlnbm9yZS1yZWFsLXNpZ24KK3RhbjEwNDMgdGFuIC0wLjAgLTAuMCAtPiAtMC4wIC0wLjAKK3RhbjEwNDQgdGFuIC1pbmYgLTAuMCAtPiBuYW4gbmFuIGludmFsaWQKK3RhbjEwNDUgdGFuIC1pbmYgLTIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuIGludmFsaWQKK3RhbjEwNDYgdGFuIC0wLjAgLWluZiAtPiAtMC4wIC0xLjAKK3RhbjEwNDcgdGFuIC0wLjY5OTk5OTk5OTk5OTk5OTk2IC1pbmYgLT4gLTAuMCAtMS4wCit0YW4xMDQ4IHRhbiAtMS4zOTk5OTk5OTk5OTk5OTk5IC1pbmYgLT4gLTAuMCAtMS4wCit0YW4xMDQ5IHRhbiAtMi4xMDAwMDAwMDAwMDAwMDAxIC1pbmYgLT4gMC4wIC0xLjAKK3RhbjEwNTAgdGFuIC0yLjc5OTk5OTk5OTk5OTk5OTggLWluZiAtPiAwLjAgLTEuMAordGFuMTA1MSB0YW4gLTMuNSAtaW5mIC0+IC0wLjAgLTEuMAordGFuMTA1MiB0YW4gLWluZiAtaW5mIC0+IC0wLjAgLTEuMCBpZ25vcmUtcmVhbC1zaWduCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSByZWN0OiBDb252ZXJzaW9uIGZyb20gcG9sYXIgY29vcmRpbmF0ZXMgdG8gcmVjdGFuZ3VsYXIgY29vcmRpbmF0ZXMgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0KKy0tIEZvciBjbWF0aC5yZWN0LCB3ZSBjYW4gdXNlIHRoZSBzYW1lIHRlc3RjYXNlIHN5bnRheCBhcyBmb3IgdGhlCistLSBjb21wbGV4IC0+IGNvbXBsZXggZnVuY3Rpb25zIGFib3ZlLCBidXQgaGVyZSB0aGUgaW5wdXQgYXJndW1lbnRzCistLSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYSBwYWlyIG9mIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgcmF0aGVyCistLSB0aGFuIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgYSBjb21wbGV4IG51bWJlci4KKy0tCistLSBIZXJlIGFyZSB0aGUgJ3NwaXJpdCBvZiBDOTknIHJ1bGVzIGZvciByZWN0LiAgRmlyc3QsIHRoZSBzaG9ydAorLS0gdmVyc2lvbjoKKy0tCistLSAgICByZWN0KHgsIHQpID0gZXhwKGxvZyh4KStpdCkgZm9yIHBvc2l0aXZlLXNpZ25lZCB4CistLSAgICByZWN0KHgsIHQpID0gLWV4cChsb2coLXgpK2l0KSBmb3IgbmVnYXRpdmUtc2lnbmVkIHgKKy0tICAgIHJlY3QobmFuLCB0KSA9IGV4cChuYW4gKyBpdCksIGV4Y2VwdCB0aGF0IGluIHJlY3QobmFuLCArLTApIHRoZQorLS0gICAgICBzaWduIG9mIHRoZSBpbWFnaW5hcnkgcGFydCBpcyB1bnNwZWNpZmllZC4KKy0tCistLSBhbmQgbm93IHRoZSBsb25nIHZlcnNpb246CistLQorLS0gICByZWN0KHgsIC10KSA9IGNvbmoocmVjdCh4LCB0KSkgZm9yIGFsbCB4IGFuZCB0CistLSAgIHJlY3QoLXgsIHQpID0gLXJlY3QoeCwgdCkgZm9yIGFsbCB4IGFuZCB0CistLSAgIHJlY3QoKzAsICswKSByZXR1cm5zICswICsgaTAKKy0tICAgcmVjdCgrMCwgaW5mKSByZXR1cm5zICstIDAgKy0gaTAsIHdoZXJlIHRoZSBzaWducyBvZiB0aGUgcmVhbCBhbmQKKy0tICAgICBpbWFnaW5hcnkgcGFydHMgYXJlIHVuc3BlY2lmaWVkLgorLS0gICByZWN0KHgsIGluZikgcmV0dXJucyBOYU4gKyBpIE5hTiBhbmQgcmFpc2VzIHRoZSAiaW52YWxpZCIKKy0tICAgICBmbG9hdGluZy1wb2ludCBleGNlcHRpb24sIGZvciBmaW5pdGUgbm9uemVybyB4LgorLS0gICByZWN0KGluZiwgaW5mKSByZXR1cm5zICstaW5mICsgaSBOYU4gYW5kIHJhaXNlcyB0aGUgImludmFsaWQiCistLSAgICAgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uICh3aGVyZSB0aGUgc2lnbiBvZiB0aGUgcmVhbCBwYXJ0IG9mIHRoZQorLS0gICAgIHJlc3VsdCBpcyB1bnNwZWNpZmllZCkuCistLSAgIHJlY3QoaW5mLCArMCkgcmV0dXJucyBpbmYraTAKKy0tICAgcmVjdChpbmYsIHgpIHJldHVybnMgaW5mKmNpcyh4KSwgZm9yIGZpbml0ZSBub256ZXJvIHgKKy0tICAgcmVjdChpbmYsIE5hTikgcmV0dXJucyArLWluZitpIE5hTiwgd2hlcmUgdGhlIHNpZ24gb2YgdGhlIHJlYWwgcGFydAorLS0gICAgIG9mIHRoZSByZXN1bHQgaXMgdW5zcGVjaWZpZWQuCistLSAgIHJlY3QoTmFOLCB4KSByZXR1cm5zIE5hTiArIGkgTmFOIGZvciBhbGwgbm9uemVybyBudW1iZXJzIChpbmNsdWRpbmcKKy0tICAgICBpbmZpbml0aWVzKSB4CistLSAgIHJlY3QoTmFOLCAwKSByZXR1cm5zIE5hTiArLSBpMCwgd2hlcmUgdGhlIHNpZ24gb2YgdGhlIGltYWdpbmFyeQorLS0gICAgIHBhcnQgaXMgdW5zcGVjaWZpZWQKKy0tICAgcmVjdChOYU4sIE5hTikgcmV0dXJucyBOYU4gKyBpIE5hTgorLS0gICByZWN0KHgsIE5hTikgcmV0dXJucyBOYU4gKyBpIE5hTiBmb3IgZmluaXRlIG5vbnplcm8geAorLS0gICByZWN0KCswLCBOYU4pIHJldHVybiArLTAgKy0gaTAsIHdoZXJlIHRoZSBzaWducyBvZiB0aGUgcmVhbCBhbmQKKy0tICAgICBpbWFnaW5hcnkgcGFydHMgYXJlIHVuc3BlY2lmaWVkLgorCistLSBzcGVjaWFsIHZhbHVlcworcmVjdDEwMDAgcmVjdCAwLjAgMC4wIC0+IDAuMCAwLjAKK3JlY3QxMDAxIHJlY3QgMC4wIGluZiAtPiAwLjAgMC4wICAgICAgICBpZ25vcmUtcmVhbC1zaWduIGlnbm9yZS1pbWFnLXNpZ24KK3JlY3QxMDAyIHJlY3QgMi4zIGluZiAtPiBuYW4gbmFuICAgICAgICBpbnZhbGlkCityZWN0MTAwMyByZWN0IGluZiBpbmYgLT4gaW5mIG5hbiAgICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCityZWN0MTAwNCByZWN0IGluZiAwLjAgLT4gaW5mIDAuMAorcmVjdDEwMDUgcmVjdCBpbmYgMS40IC0+IGluZiBpbmYKK3JlY3QxMDA2IHJlY3QgaW5mIDIuOCAtPiAtaW5mIGluZgorcmVjdDEwMDcgcmVjdCBpbmYgNC4yIC0+IC1pbmYgLWluZgorcmVjdDEwMDggcmVjdCBpbmYgNS42IC0+IGluZiAtaW5mCityZWN0MTAwOSByZWN0IGluZiA3LjAgLT4gaW5mIGluZgorcmVjdDEwMTAgcmVjdCBuYW4gMC4wIC0+IG5hbiAwLjAgICAgICAgIGlnbm9yZS1pbWFnLXNpZ24KK3JlY3QxMDExIHJlY3QgbmFuIDIuMyAtPiBuYW4gbmFuCityZWN0MTAxMiByZWN0IG5hbiBpbmYgLT4gbmFuIG5hbgorcmVjdDEwMTMgcmVjdCBuYW4gbmFuIC0+IG5hbiBuYW4KK3JlY3QxMDE0IHJlY3QgaW5mIG5hbiAtPiBpbmYgbmFuICAgICAgICBpZ25vcmUtcmVhbC1zaWduCityZWN0MTAxNSByZWN0IDIuMyBuYW4gLT4gbmFuIG5hbgorcmVjdDEwMTYgcmVjdCAwLjAgbmFuIC0+IDAuMCAwLjAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24gaWdub3JlLWltYWctc2lnbgorcmVjdDEwMTcgcmVjdCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorcmVjdDEwMTggcmVjdCAwLjAgLWluZiAtPiAwLjAgMC4wICAgICAgIGlnbm9yZS1yZWFsLXNpZ24gaWdub3JlLWltYWctc2lnbgorcmVjdDEwMTkgcmVjdCAyLjMgLWluZiAtPiBuYW4gbmFuICAgICAgIGludmFsaWQKK3JlY3QxMDIwIHJlY3QgaW5mIC1pbmYgLT4gaW5mIG5hbiAgICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK3JlY3QxMDIxIHJlY3QgaW5mIC0wLjAgLT4gaW5mIC0wLjAKK3JlY3QxMDIyIHJlY3QgaW5mIC0xLjQgLT4gaW5mIC1pbmYKK3JlY3QxMDIzIHJlY3QgaW5mIC0yLjggLT4gLWluZiAtaW5mCityZWN0MTAyNCByZWN0IGluZiAtNC4yIC0+IC1pbmYgaW5mCityZWN0MTAyNSByZWN0IGluZiAtNS42IC0+IGluZiBpbmYKK3JlY3QxMDI2IHJlY3QgaW5mIC03LjAgLT4gaW5mIC1pbmYKK3JlY3QxMDI3IHJlY3QgbmFuIC0wLjAgLT4gbmFuIDAuMCAgICAgICBpZ25vcmUtaW1hZy1zaWduCityZWN0MTAyOCByZWN0IG5hbiAtMi4zIC0+IG5hbiBuYW4KK3JlY3QxMDI5IHJlY3QgbmFuIC1pbmYgLT4gbmFuIG5hbgorcmVjdDEwMzAgcmVjdCAtMC4wIDAuMCAtPiAtMC4wIC0wLjAKK3JlY3QxMDMxIHJlY3QgLTAuMCBpbmYgLT4gMC4wIDAuMCAgICAgICBpZ25vcmUtcmVhbC1zaWduIGlnbm9yZS1pbWFnLXNpZ24KK3JlY3QxMDMyIHJlY3QgLTIuMyBpbmYgLT4gbmFuIG5hbiAgICAgICBpbnZhbGlkCityZWN0MTAzMyByZWN0IC1pbmYgaW5mIC0+IC1pbmYgbmFuICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCityZWN0MTAzNCByZWN0IC1pbmYgMC4wIC0+IC1pbmYgLTAuMAorcmVjdDEwMzUgcmVjdCAtaW5mIDEuNCAtPiAtaW5mIC1pbmYKK3JlY3QxMDM2IHJlY3QgLWluZiAyLjggLT4gaW5mIC1pbmYKK3JlY3QxMDM3IHJlY3QgLWluZiA0LjIgLT4gaW5mIGluZgorcmVjdDEwMzggcmVjdCAtaW5mIDUuNiAtPiAtaW5mIGluZgorcmVjdDEwMzkgcmVjdCAtaW5mIDcuMCAtPiAtaW5mIC1pbmYKK3JlY3QxMDQwIHJlY3QgLWluZiBuYW4gLT4gaW5mIG5hbiAgICAgICBpZ25vcmUtcmVhbC1zaWduCityZWN0MTA0MSByZWN0IC0yLjMgbmFuIC0+IG5hbiBuYW4KK3JlY3QxMDQyIHJlY3QgLTAuMCBuYW4gLT4gMC4wIDAuMCAgICAgICBpZ25vcmUtcmVhbC1zaWduIGlnbm9yZS1pbWFnLXNpZ24KK3JlY3QxMDQzIHJlY3QgLTAuMCAtMC4wIC0+IC0wLjAgMC4wCityZWN0MTA0NCByZWN0IC0wLjAgLWluZiAtPiAwLjAgMC4wICAgICAgaWdub3JlLXJlYWwtc2lnbiBpZ25vcmUtaW1hZy1zaWduCityZWN0MTA0NSByZWN0IC0yLjMgLWluZiAtPiBuYW4gbmFuICAgICAgaW52YWxpZAorcmVjdDEwNDYgcmVjdCAtaW5mIC1pbmYgLT4gLWluZiBuYW4gICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorcmVjdDEwNDcgcmVjdCAtaW5mIC0wLjAgLT4gLWluZiAwLjAKK3JlY3QxMDQ4IHJlY3QgLWluZiAtMS40IC0+IC1pbmYgaW5mCityZWN0MTA0OSByZWN0IC1pbmYgLTIuOCAtPiBpbmYgaW5mCityZWN0MTA1MCByZWN0IC1pbmYgLTQuMiAtPiBpbmYgLWluZgorcmVjdDEwNTEgcmVjdCAtaW5mIC01LjYgLT4gLWluZiAtaW5mCityZWN0MTA1MiByZWN0IC1pbmYgLTcuMCAtPiAtaW5mIGluZgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBwb2xhcjogQ29udmVyc2lvbiBmcm9tIHJlY3Rhbmd1bGFyIGNvb3JkaW5hdGVzIHRvIHBvbGFyIGNvb3JkaW5hdGVzIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLQorLS0gRm9yIGNtYXRoLnBvbGFyLCB3ZSBjYW4gdXNlIHRoZSBzYW1lIHRlc3RjYXNlIHN5bnRheCBhcyBmb3IgdGhlCistLSBjb21wbGV4IC0+IGNvbXBsZXggZnVuY3Rpb25zIGFib3ZlLCBidXQgaGVyZSB0aGUgb3V0cHV0IGFyZ3VtZW50cworLS0gc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGEgcGFpciBvZiBmbG9hdGluZy1wb2ludCBudW1iZXJzIHJhdGhlcgorLS0gdGhhbiB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGEgY29tcGxleCBudW1iZXIuCistLQorLS0gQW5uZXggRyBvZiB0aGUgQzk5IHN0YW5kYXJkIGRlc2NyaWJlcyBmdWxseSBib3RoIHRoZSByZWFsIGFuZAorLS0gaW1hZ2luYXJ5IHBhcnRzIG9mIHBvbGFyIChhcyBjYWJzIGFuZCBjYXJnLCByZXNwZWN0aXZlbHksIHdoaWNoIGluIHR1cm4KKy0tIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSBmdW5jdGlvbnMgaHlwb3QgYW5kIGF0YW4yKS4KKworLS0gb3ZlcmZsb3cKK3BvbGFyMDEwMCBwb2xhciAxLjRlMzA4IDEuNGUzMDggLT4gaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjggICAgICBvdmVyZmxvdworCistLSBzcGVjaWFsIHZhbHVlcworcG9sYXIxMDAwIHBvbGFyIDAuMCAwLjAgLT4gMC4wIDAuMAorcG9sYXIxMDAxIHBvbGFyIDAuMCAtMC4wIC0+IDAuMCAtMC4wCitwb2xhcjEwMDIgcG9sYXIgLTAuMCAwLjAgLT4gMC4wIDMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDAzIHBvbGFyIC0wLjAgLTAuMCAtPiAwLjAgLTMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDA0IHBvbGFyIGluZiAwLjAgLT4gaW5mIDAuMAorcG9sYXIxMDA1IHBvbGFyIGluZiAyLjMgLT4gaW5mIDAuMAorcG9sYXIxMDA2IHBvbGFyIGluZiBpbmYgLT4gaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjgKK3BvbGFyMTAwNyBwb2xhciAyLjMgaW5mIC0+IGluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK3BvbGFyMTAwOCBwb2xhciAwLjAgaW5mIC0+IGluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK3BvbGFyMTAwOSBwb2xhciAtMC4wIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2Citwb2xhcjEwMTAgcG9sYXIgLTIuMyBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorcG9sYXIxMDExIHBvbGFyIC1pbmYgaW5mIC0+IGluZiAyLjM1NjE5NDQ5MDE5MjM0NDgKK3BvbGFyMTAxMiBwb2xhciAtaW5mIDIuMyAtPiBpbmYgMy4xNDE1OTI2NTM1ODk3OTMxCitwb2xhcjEwMTMgcG9sYXIgLWluZiAwLjAgLT4gaW5mIDMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDE0IHBvbGFyIC1pbmYgLTAuMCAtPiBpbmYgLTMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDE1IHBvbGFyIC1pbmYgLTIuMyAtPiBpbmYgLTMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDE2IHBvbGFyIC1pbmYgLWluZiAtPiBpbmYgLTIuMzU2MTk0NDkwMTkyMzQ0OAorcG9sYXIxMDE3IHBvbGFyIC0yLjMgLWluZiAtPiBpbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorcG9sYXIxMDE4IHBvbGFyIC0wLjAgLWluZiAtPiBpbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorcG9sYXIxMDE5IHBvbGFyIDAuMCAtaW5mIC0+IGluZiAtMS41NzA3OTYzMjY3OTQ4OTY2Citwb2xhcjEwMjAgcG9sYXIgMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK3BvbGFyMTAyMSBwb2xhciBpbmYgLWluZiAtPiBpbmYgLTAuNzg1Mzk4MTYzMzk3NDQ4MjgKK3BvbGFyMTAyMiBwb2xhciBpbmYgLTIuMyAtPiBpbmYgLTAuMAorcG9sYXIxMDIzIHBvbGFyIGluZiAtMC4wIC0+IGluZiAtMC4wCitwb2xhcjEwMjQgcG9sYXIgbmFuIC1pbmYgLT4gaW5mIG5hbgorcG9sYXIxMDI1IHBvbGFyIG5hbiAtMi4zIC0+IG5hbiBuYW4KK3BvbGFyMTAyNiBwb2xhciBuYW4gLTAuMCAtPiBuYW4gbmFuCitwb2xhcjEwMjcgcG9sYXIgbmFuIDAuMCAtPiBuYW4gbmFuCitwb2xhcjEwMjggcG9sYXIgbmFuIDIuMyAtPiBuYW4gbmFuCitwb2xhcjEwMjkgcG9sYXIgbmFuIGluZiAtPiBpbmYgbmFuCitwb2xhcjEwMzAgcG9sYXIgbmFuIG5hbiAtPiBuYW4gbmFuCitwb2xhcjEwMzEgcG9sYXIgaW5mIG5hbiAtPiBpbmYgbmFuCitwb2xhcjEwMzIgcG9sYXIgMi4zIG5hbiAtPiBuYW4gbmFuCitwb2xhcjEwMzMgcG9sYXIgMC4wIG5hbiAtPiBuYW4gbmFuCitwb2xhcjEwMzQgcG9sYXIgLTAuMCBuYW4gLT4gbmFuIG5hbgorcG9sYXIxMDM1IHBvbGFyIC0yLjMgbmFuIC0+IG5hbiBuYW4KK3BvbGFyMTAzNiBwb2xhciAtaW5mIG5hbiAtPiBpbmYgbmFuCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvUkVBRE1FIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTczZTFiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL1JFQURNRQpAQCAtMCwwICsxLDE2IEBACitUaGlzIGRpcmVjdG9yeSBvbmx5IGNvbnRhaW5zIHRlc3RzIGZvciBvdXRzdGFuZGluZyBidWdzIHRoYXQgY2F1c2UgdGhlCitpbnRlcnByZXRlciB0byBzZWdmYXVsdC4gIElkZWFsbHkgdGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGFsd2F5cyBiZSBlbXB0eSwgYnV0Citzb21ldGltZXMgaXQgbWF5IG5vdCBiZSBlYXN5IHRvIGZpeCB0aGUgdW5kZXJseWluZyBjYXVzZSBhbmQgdGhlIGJ1ZyBpcyBkZWVtZWQKK3RvbyBvYnNjdXJlIHRvIGludmVzdCB0aGUgZWZmb3J0LgorCitFYWNoIHRlc3Qgc2hvdWxkIGZhaWwgd2hlbiBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lOgorCisJLi9weXRob24gTGliL3Rlc3QvY3Jhc2hlcnMvd2Vha3JlZl9pbl9kZWwucHkKKworUHV0IGFzIG11Y2ggaW5mbyBpbnRvIGEgZG9jc3RyaW5nIG9yIGNvbW1lbnRzIHRvIGhlbHAgZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiB0aGUKK2ZhaWx1cmUsIGFzIHdlbGwgYXMgYSBidWdzLnB5dGhvbi5vcmcgaXNzdWUgbnVtYmVyIGlmIGl0IGV4aXN0cy4gIFBhcnRpY3VsYXJseQorbm90ZSBpZiB0aGUgY2F1c2UgaXMgc3lzdGVtIG9yIGVudmlyb25tZW50IGRlcGVuZGVudCBhbmQgd2hhdCB0aGUgdmFyaWFibGVzIGFyZS4KKworT25jZSB0aGUgY3Jhc2ggaXMgZml4ZWQsIHRoZSB0ZXN0IGNhc2Ugc2hvdWxkIGJlIG1vdmVkIGludG8gYW4gYXBwcm9wcmlhdGUgdGVzdAorKGV2ZW4gaWYgaXQgd2FzIG9yaWdpbmFsbHkgZnJvbSB0aGUgdGVzdCBzdWl0ZSkuICBUaGlzIGVuc3VyZXMgdGhlIHJlZ3Jlc3Npb24KK2RvZXNuJ3QgaGFwcGVuIGFnYWluLiAgQW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCBiZSBlYXNpZXIgdG8gdHJhY2sgZG93bi4KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9ib2d1c19jb2RlX29iai5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9ib2d1c19jb2RlX29iai5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNhZTUxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2JvZ3VzX2NvZGVfb2JqLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIgorQnJva2VuIGJ5dGVjb2RlIG9iamVjdHMgY2FuIGVhc2lseSBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIuCisKK1RoaXMgaXMgbm90IGdvaW5nIHRvIGJlIGZpeGVkLiAgSXQgaXMgZ2VuZXJhbGx5IGFncmVlZCB0aGF0IHRoZXJlIGlzIG5vCitwb2ludCBpbiB3cml0aW5nIGEgYnl0ZWNvZGUgdmVyaWZpZXIgYW5kIHB1dHRpbmcgaXQgaW4gQ1B5dGhvbiBqdXN0IGZvcgordGhpcy4gIE1vcmVvdmVyLCBhIHZlcmlmaWVyIGlzIGJvdW5kIHRvIGFjY2VwdCBvbmx5IGEgc3Vic2V0IG9mIGFsbCBzYWZlCitieXRlY29kZXMsIHNvIGl0IGNvdWxkIGxlYWQgdG8gdW5uZWNlc3NhcnkgYnJlYWthZ2UuCisKK0ZvciBzZWN1cml0eSBwdXJwb3NlcywgInJlc3RyaWN0ZWQiIGludGVycHJldGVycyBhcmUgbm90IGdvaW5nIHRvIGxldAordGhlIHVzZXIgYnVpbGQgb3IgbG9hZCByYW5kb20gYnl0ZWNvZGVzIGFueXdheS4gIE90aGVyd2lzZSwgdGhpcyBpcyBhCisid29uJ3QgZml4IiBjYXNlLgorCisiIiIKKworaW1wb3J0IHR5cGVzCisKK2NvID0gdHlwZXMuQ29kZVR5cGUoMCwgMCwgMCwgMCwgJ1x4MDRceDcxXHgwMFx4MDAnLCAoKSwKKyAgICAgICAgICAgICAgICAgICAgKCksICgpLCAnJywgJycsIDEsICcnKQorZXhlYyBjbwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2JvcnJvd2VkX3JlZl8xLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2JvcnJvd2VkX3JlZl8xLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmVkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvYm9ycm93ZWRfcmVmXzEucHkKQEAgLTAsMCArMSwyOSBAQAorIiIiCitfUHlUeXBlX0xvb2t1cCgpIHJldHVybnMgYSBib3Jyb3dlZCByZWZlcmVuY2UuCitUaGlzIGF0dGFja3MgdGhlIGNhbGwgaW4gZGljdG9iamVjdC5jLgorIiIiCisKK2NsYXNzIEEob2JqZWN0KToKKyAgICBwYXNzCisKK2NsYXNzIEIob2JqZWN0KToKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgcHJpbnQgJ2hpJworICAgICAgICBkZWwgRC5fX21pc3NpbmdfXworCitjbGFzcyBEKGRpY3QpOgorICAgIGNsYXNzIF9fbWlzc2luZ19fOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgcGFzcworCisKK2QgPSBEKCkKK2EgPSBBKCkKK2EuY3ljbGUgPSBhCithLm90aGVyID0gQigpCitkZWwgYQorCitwcmV2ID0gTm9uZQord2hpbGUgMToKKyAgICBkWzVdCisgICAgcHJldiA9IChwcmV2LCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9ib3Jyb3dlZF9yZWZfMi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9ib3Jyb3dlZF9yZWZfMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTdiM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2JvcnJvd2VkX3JlZl8yLnB5CkBAIC0wLDAgKzEsMzggQEAKKyIiIgorX1B5VHlwZV9Mb29rdXAoKSByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlLgorVGhpcyBhdHRhY2tzIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyKCkuCisKK05CLiBvbiBteSBtYWNoaW5lIHRoaXMgY3Jhc2hlcyBpbiAyLjUgZGVidWcgYnV0IG5vdCByZWxlYXNlLgorIiIiCisKK2NsYXNzIEEob2JqZWN0KToKKyAgICBwYXNzCisKK2NsYXNzIEIob2JqZWN0KToKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgcHJpbnQgImhpIgorICAgICAgICBkZWwgQy5kCisKK2NsYXNzIEQob2JqZWN0KToKKyAgICBkZWYgX19zZXRfXyhzZWxmLCBvYmosIHZhbHVlKToKKyAgICAgICAgc2VsZi5oZWxsbyA9IDQyCisKK2NsYXNzIEMob2JqZWN0KToKKyAgICBkID0gRCgpCisKKyAgICBkZWYgZygpOgorICAgICAgICBwYXNzCisKKworYyA9IEMoKQorYSA9IEEoKQorYS5jeWNsZSA9IGEKK2Eub3RoZXIgPSBCKCkKKworbHN0ID0gW05vbmVdICogMTAwMDAwMAoraSA9IDAKK2RlbCBhCit3aGlsZSAxOgorICAgIGMuZCA9IDQyICAgICAgICAgIyBzZWdmYXVsdHMgaW4gUHlNZXRob2RfTmV3KGltX2Z1bmM9RC5fX3NldF9fLCBpbV9zZWxmPWQpCisgICAgbHN0W2ldID0gYy5nICAgICAjIGNvbnN1bWUgdGhlIGZyZWUgbGlzdCBvZiBpbnN0YW5jZW1ldGhvZCBvYmplY3RzCisgICAgaSArPSAxCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvYnVmZmVyX211dGF0ZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9idWZmZXJfbXV0YXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OGQ3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvYnVmZmVyX211dGF0ZS5weQpAQCAtMCwwICsxLDMwIEBACisjCisjIFRoZSB2YXJpb3VzIG1ldGhvZHMgb2YgYnVmZmVyb2JqZWN0LmMgKGhlcmUgYnVmZmVyX3N1YnNjcmlwdCgpKSBjYWxsCisjIGdldF9idWYoKSBiZWZvcmUgY2FsbGluZyBwb3RlbnRpYWxseSBtb3JlIFB5dGhvbiBjb2RlIChoZXJlIHZpYQorIyBQeVNsaWNlX0dldEluZGljZXNFeCgpKS4gIEJ1dCBnZXRfYnVmKCkgYWxyZWFkeSByZXR1cm5lZCBhIHZvaWQqCisjIHBvaW50ZXIuICBUaGlzIHZvaWQqIHBvaW50ZXIgY2FuIGJlY29tZSBpbnZhbGlkIGlmIHRoZSBvYmplY3QKKyMgdW5kZXJseWluZyB0aGUgYnVmZmVyIGlzIG11dGF0ZWQgKGhlcmUgYSBieXRlYXJyYXkgb2JqZWN0KS4KKyMKKyMgQXMgdXN1YWwsIHBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgdGhyZWUgImhlcmUiIGluIHRoZSBzZW50ZW5jZQorIyBhYm92ZSBhcmUgb25seSBleGFtcGxlcy4gIEVhY2ggY2FuIGJlIGNoYW5nZWQgZWFzaWx5IGFuZCBsZWFkIHRvCisjIGFub3RoZXIgY3Jhc2hlci4KKyMKKyMgVGhpcyBjcmFzaGVzIGZvciBtZSBvbiBMaW51eCAzMi1iaXRzIHdpdGggQ1B5dGhvbiAyLjYgYW5kIDIuNworIyB3aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0LgorIworCisKK2NsYXNzIFBzZXVkb0luZGV4KG9iamVjdCk6CisgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgZm9yIGMgaW4gImZvb2JhciIqbjoKKyAgICAgICAgICAgIGEuYXBwZW5kKGMpCisgICAgICAgIHJldHVybiBuICogNAorCisKK2ZvciBuIGluIHJhbmdlKDEsIDEwMDAwMCwgMTAwKToKKyAgICBhID0gYnl0ZWFycmF5KCJ0ZXN0IipuKQorICAgIGJ1ZiA9IGJ1ZmZlcihhKQorCisgICAgcyA9IGJ1Zls6UHNldWRvSW5kZXgoKToxXQorICAgICNwcmludCByZXByKHMpCisgICAgI2Fzc2VydCBzID09ICJ0ZXN0IipuCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvY29tcGlsZXJfcmVjdXJzaW9uLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2NvbXBpbGVyX3JlY3Vyc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTU0YmRkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2NvbXBpbGVyX3JlY3Vyc2lvbi5weQpAQCAtMCwwICsxLDUgQEAKKyIiIgorVGhlIGNvbXBpbGVyICg+PSAyLjUpIHJlY3Vyc2VzIGhhcHBpbHkuCisiIiIKKworY29tcGlsZSgnKCknKjkqKjUsICc/JywgJ2V4ZWMnKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2RlY3JlZl9iZWZvcmVfYXNzaWdubWVudC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9kZWNyZWZfYmVmb3JlX2Fzc2lnbm1lbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViMTdmYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9kZWNyZWZfYmVmb3JlX2Fzc2lnbm1lbnQucHkKQEAgLTAsMCArMSw0NCBAQAorIiIiCitHZW5lcmFsIGV4YW1wbGUgZm9yIGFuIGF0dGFjayBhZ2FpbnN0IGNvZGUgbGlrZSB0aGlzOgorCisgICAgUHlfREVDUkVGKG9iai0+YXR0cik7IG9iai0+YXR0ciA9IC4uLjsKKworaGVyZSBpbiBNb2R1bGUvX2pzb24uYzpzY2FubmVyX2luaXQoKS4KKworRXhwbGFuYXRpb246IGlmIHRoZSBmaXJzdCBQeV9ERUNSRUYoKSBjYWxscyBlaXRoZXIgYSBfX2RlbF9fIG9yIGEKK3dlYWtyZWYgY2FsbGJhY2ssIGl0IHdpbGwgcnVuIHdoaWxlIHRoZSAnb2JqJyBhcHBlYXJzIHRvIGhhdmUgaW4KKydvYmotPmF0dHInIHN0aWxsIHRoZSBvbGQgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QsIGJ1dCBub3QgaG9sZGluZwordGhlIHJlZmVyZW5jZSBjb3VudCBhbnkgbW9yZS4KKworU3RhdHVzOiBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIHJlcGxhY2luZyB0aGVzZSBjYXNlcywgYnV0IHRoZXJlIGlzIGFuCitpbmZpbml0ZSBudW1iZXIgb2Ygc3VjaCBjYXNlcy4KKyIiIgorCitpbXBvcnQgX2pzb24sIHdlYWtyZWYKKworY2xhc3MgQ3R4MShvYmplY3QpOgorICAgIGVuY29kaW5nID0gInV0ZjgiCisgICAgc3RyaWN0ID0gTm9uZQorICAgIG9iamVjdF9ob29rID0gTm9uZQorICAgIG9iamVjdF9wYWlyc19ob29rID0gTm9uZQorICAgIHBhcnNlX2Zsb2F0ID0gTm9uZQorICAgIHBhcnNlX2ludCA9IE5vbmUKKyAgICBwYXJzZV9jb25zdGFudCA9IE5vbmUKKworY2xhc3MgRm9vKHVuaWNvZGUpOgorICAgIHBhc3MKKworZGVmIGRlbGV0ZV9tZSgqYXJncyk6CisgICAgcHJpbnQgc2Nhbm5lci5lbmNvZGluZy5fX2RpY3RfXworCitjbGFzcyBDdHgyKEN0eDEpOgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBlbmNvZGluZyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIHdyZWYKKyAgICAgICAgZiA9IEZvbygidXRmOCIpCisgICAgICAgIGYuYWJjID0gZ2xvYmFscygpCisgICAgICAgIHdyZWYgPSB3ZWFrcmVmLnJlZihmLCBkZWxldGVfbWUpCisgICAgICAgIHJldHVybiBmCisKK3NjYW5uZXIgPSBfanNvbi5tYWtlX3NjYW5uZXIoQ3R4MSgpKQorc2Nhbm5lci5fX2luaXRfXyhDdHgyKCkpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvZ2NfaGFzX2ZpbmFsaXplci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9nY19oYXNfZmluYWxpemVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzk1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvZ2NfaGFzX2ZpbmFsaXplci5weQpAQCAtMCwwICsxLDM2IEBACisiIiIKK1RoZSBnYyBtb2R1bGUgY2FuIHN0aWxsIGludm9rZSBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgYW5kIGNyYXNoLgorVGhpcyBpcyBhbiBhdHRhY2sgYWdhaW5zdCBfUHlJbnN0YW5jZV9Mb29rdXAoKSwgd2hpY2ggaXMgZG9jdW1lbnRlZAorYXMgZm9sbG93czoKKworICAgIFRoZSBwb2ludCBvZiB0aGlzIHJvdXRpbmUgaXMgdGhhdCBpdCBuZXZlciBjYWxscyBhcmJpdHJhcnkgUHl0aG9uCisgICAgY29kZSwgc28gaXMgYWx3YXlzICJzYWZlIjogIGFsbCBpdCBkb2VzIGlzIGRpY3QgbG9va3Vwcy4KKworQnV0IG9mIGNvdXJzZSBkaWN0IGxvb2t1cHMgY2FuIGNhbGwgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLgorVGhlIGZvbGxvd2luZyBjb2RlIGNhdXNlcyBtdXRhdGlvbiBvZiB0aGUgb2JqZWN0IGdyYXBoIGR1cmluZwordGhlIGNhbGwgdG8gaGFzX2ZpbmFsaXplcigpIGluIGdjbW9kdWxlLmMsIGFuZCB0aGF0IG1pZ2h0CitzZWdmYXVsdC4KKyIiIgorCitpbXBvcnQgZ2MKKworCitjbGFzcyBBOgorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goIl9fZGVsX18iKQorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBkZWwgc2VsZi5vdGhlcgorICAgICAgICByZXR1cm4gRmFsc2UKKworYSA9IEEoKQorYiA9IEEoKQorCithLl9fZGljdF9fW2JdID0gJ0EnCisKK2Eub3RoZXIgPSBiCitiLm90aGVyID0gYQorCitnYy5jb2xsZWN0KCkKK2RlbCBhLCBiCisKK2djLmNvbGxlY3QoKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2djX2luc3BlY3Rpb24ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvZ2NfaW5zcGVjdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGNhYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2djX2luc3BlY3Rpb24ucHkKQEAgLTAsMCArMSwzMiBAQAorIiIiCitnYy5nZXRfcmVmZXJyZXJzKCkgY2FuIGJlIHVzZWQgdG8gc2VlIG9iamVjdHMgYmVmb3JlIHRoZXkgYXJlIGZ1bGx5IGJ1aWx0LgorCitOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUuICBUaGVyZSBhcmUgbWFueSB3YXlzIHRvIGNyYXNoIFB5dGhvbgorYnkgdXNpbmcgZ2MuZ2V0X3JlZmVycmVycygpLCBhcyB3ZWxsIGFzIG1hbnkgZXh0ZW5zaW9uIG1vZHVsZXMgKGV2ZW4KK3doZW4gdGhleSBhcmUgdXNpbmcgcGVyZmVjdGx5IGRvY3VtZW50ZWQgcGF0dGVybnMgdG8gYnVpbGQgb2JqZWN0cykuCisKK0lkZW50aWZ5aW5nIGFuZCByZW1vdmluZyBhbGwgcGxhY2VzIHRoYXQgZXhwb3NlIHRvIHRoZSBHQyBhCitwYXJ0aWFsbHktYnVpbHQgb2JqZWN0IGlzIGEgbG9uZy10ZXJtIHByb2plY3QuICBBIHBhdGNoIHdhcyBwcm9wb3NlZCBvbgorU0Ygc3BlY2lmaWNhbGx5IGZvciB0aGlzIGV4YW1wbGUgYnV0IEkgY29uc2lkZXIgZml4aW5nIGp1c3QgdGhpcyBzaW5nbGUKK2V4YW1wbGUgYSBiaXQgcG9pbnRsZXNzICgjMTUxNzA0MikuCisKK0EgZml4IHdvdWxkIGluY2x1ZGUgYSB3aG9sZS1zY2FsZSBjb2RlIHJldmlldywgcG9zc2libHkgd2l0aCBhbiBBUEkKK2NoYW5nZSB0byBkZWNvdXBsZSBvYmplY3QgY3JlYXRpb24gYW5kIEdDIHJlZ2lzdHJhdGlvbiwgYW5kIGFjY29yZGluZworZml4ZXMgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIGV4dGVuc2lvbiBtb2R1bGUgd3JpdGVycy4gIEl0J3MgdW5saWtlbHkKK3RvIGhhcHBlbiwgdGhvdWdoLiAgU28gdGhpcyBpcyBjdXJyZW50bHkgY2xhc3NpZmllZCBhcworImdjLmdldF9yZWZlcnJlcnMoKSBpcyBkYW5nZXJvdXMsIHVzZSBvbmx5IGZvciBkZWJ1Z2dpbmciLgorIiIiCisKK2ltcG9ydCBnYworCisKK2RlZiBnKCk6CisgICAgbWFya2VyID0gb2JqZWN0KCkKKyAgICB5aWVsZCBtYXJrZXIKKyAgICAjIG5vdyB0aGUgbWFya2VyIGlzIGluIHRoZSB0dXBsZSBiZWluZyBjb25zdHJ1Y3RlZAorICAgIFt0dXBdID0gW3ggZm9yIHggaW4gZ2MuZ2V0X3JlZmVycmVycyhtYXJrZXIpIGlmIHR5cGUoeCkgaXMgdHVwbGVdCisgICAgcHJpbnQgdHVwCisgICAgcHJpbnQgdHVwWzFdCisKKwordHVwbGUoZygpKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2luZmluaXRlX2xvb3BfcmUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvaW5maW5pdGVfbG9vcF9yZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWVjYzU2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL2luZmluaXRlX2xvb3BfcmUucHkKQEAgLTAsMCArMSwxNiBAQAorCisjIFRoaXMgd2FzIHRha2VuIGZyb20gaHR0cDovL3B5dGhvbi5vcmcvc2YvMTU0MTY5NworIyBJdCdzIG5vdCB0ZWNobmljYWxseSBhIGNyYXNoZXIuICBJdCBtYXkgbm90IGV2ZW4gdHJ1bHkgYmUgaW5maW5pdGUsCisjIGhvd2V2ZXIsIEkgaGF2ZW4ndCB3YWl0ZWQgYSBsb25nIHRpbWUgdG8gc2VlIHRoZSByZXN1bHQuICBJdCB0YWtlcworIyAxMDAlIG9mIENQVSB3aGlsZSBydW5uaW5nIHRoaXMgYW5kIHNob3VsZCBiZSBmaXhlZC4KKworaW1wb3J0IHJlCitzdGFydHRhZyA9IHJlLmNvbXBpbGUocic8W2EtekEtWl1bLV8uOmEtekEtWjAtOV0qXHMqKCcKKyAgICAgICAgcidccyooW2EtekEtWl9dWy06LmEtekEtWl8wLTldKikoXHMqPVxzKicKKyAgICAgICAgcicoXCdbXlwnXSpcJ3wiW14iXSoifFstYS16QS1aMC05Li8sOjsrKiU/ISYkXChcKV8jPX5AXScKKyAgICAgICAgcidbXVtcLWEtekEtWjAtOS4vLDo7KyolPyEmJFwoXClfIz1+XCciQF0qKD89W1xzPi88XSkpKT8nCisgICAgcicpKlxzKi8/XHMqKD89Wzw+XSknKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGZvbyA9ICc8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlJworICAgIHN0YXJ0dGFnLm1hdGNoKGZvbykKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9sb29zaW5nX21yb19yZWYucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvbG9vc2luZ19tcm9fcmVmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZmE5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvbG9vc2luZ19tcm9fcmVmLnB5CkBAIC0wLDAgKzEsMzUgQEAKKyIiIgorVGhlcmUgaXMgYSB3YXkgdG8gcHV0IGtleXMgb2YgYW55IHR5cGUgaW4gYSB0eXBlJ3MgZGljdGlvbmFyeS4KK0kgdGhpbmsgdGhpcyBhbGxvd3MgdmFyaW91cyBraW5kcyBvZiBjcmFzaGVzLCBidXQgc28gZmFyIEkgaGF2ZSBvbmx5Citmb3VuZCBhIGNvbnZvbHV0ZWQgYXR0YWNrIG9mIF9QeVR5cGVfTG9va3VwKCksIHdoaWNoIHVzZXMgdGhlIG1ybyBvZiB0aGUKK3R5cGUgd2l0aG91dCBob2xkaW5nIGEgc3Ryb25nIHJlZmVyZW5jZSB0byBpdC4gIFByb2JhYmx5IHdvcmtzIHdpdGgKK3N1cGVyLl9fZ2V0YXR0cmlidXRlX18oKSB0b28sIHdoaWNoIHVzZXMgdGhlIHNhbWUga2luZCBvZiBjb2RlLgorIiIiCisKK2NsYXNzIE15S2V5KG9iamVjdCk6CisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgnbXlrZXknKQorCisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAjIHRoZSBmb2xsb3dpbmcgbGluZSBkZWNyZWZzIHRoZSBwcmV2aW91cyBYLl9fbXJvX18KKyAgICAgICAgWC5fX2Jhc2VzX18gPSAoQmFzZTIsKQorICAgICAgICAjIHRyYXNoIGFsbCB0dXBsZXMgb2YgbGVuZ3RoIDMsIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpdGVtcyBvZgorICAgICAgICAjIHRoZSBwcmV2aW91cyBYLl9fbXJvX18gYXJlIHJlYWxseSBnYXJiYWdlCisgICAgICAgIHogPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIHouYXBwZW5kKChpLCBOb25lLCBOb25lKSkKKyAgICAgICAgcmV0dXJuIC0xCisKKworY2xhc3MgQmFzZShvYmplY3QpOgorICAgIG15a2V5ID0gJ2Zyb20gQmFzZScKKworY2xhc3MgQmFzZTIob2JqZWN0KToKKyAgICBteWtleSA9ICdmcm9tIEJhc2UyJworCisjIHlvdSBjYW4ndCBhZGQgYSBub24tc3RyaW5nIGtleSB0byBYLl9fZGljdF9fLCBidXQgaXQgY2FuIGJlCisjIHRoZXJlIGZyb20gdGhlIGJlZ2lubmluZyA6LSkKK1ggPSB0eXBlKCdYJywgKEJhc2UsKSwge015S2V5KCk6IDV9KQorCitwcmludCBYLm15a2V5CisjIEkgZ2V0IGEgc2VnZmF1bHQsIG9yIGEgc2xpZ2h0bHkgd3JvbmcgYXNzZXJ0aW9uIGVycm9yIGluIGEgZGVidWcgYnVpbGQuCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvbXV0YXRpb25faW5zaWRlX2N5Y2xlZ2MucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvbXV0YXRpb25faW5zaWRlX2N5Y2xlZ2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2NzM5OAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9tdXRhdGlvbl9pbnNpZGVfY3ljbGVnYy5weQpAQCAtMCwwICsxLDMxIEBACisKKyMgVGhlIGN5Y2xlIEdDIGNvbGxlY3RvciBjYW4gYmUgZXhlY3V0ZWQgd2hlbiBhbnkgR0MtdHJhY2tlZCBvYmplY3QgaXMKKyMgYWxsb2NhdGVkLCBlLmcuIGR1cmluZyBhIGNhbGwgdG8gUHlMaXN0X05ldygpLCBQeURpY3RfTmV3KCksIC4uLgorIyBNb3Jlb3ZlciwgaXQgY2FuIGludm9rZSBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgdmlhIGEgd2Vha3JlZiBjYWxsYmFjay4KKyMgVGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBtYW55IHBsYWNlcyBpbiB0aGUgc291cmNlIHdoZXJlIGFuIGFyYml0cmFyeQorIyBtdXRhdGlvbiBjb3VsZCB1bmV4cGVjdGVkbHkgb2NjdXIuCisKKyMgVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgbGlzdF9zbGljZSgpIG5vdCBleHBlY3RpbmcgdGhlIGNhbGwgdG8KKyMgUHlMaXN0X05ldyB0byBtdXRhdGUgdGhlIGlucHV0IGxpc3QuICAoT2YgY291cnNlIHRoZXJlIGFyZSBtYW55CisjIG1vcmUgZXhhbXBsZXMgbGlrZSB0aGlzIG9uZS4pCisKKworaW1wb3J0IHdlYWtyZWYKKworY2xhc3MgQShvYmplY3QpOgorICAgIHBhc3MKKworZGVmIGNhbGxiYWNrKHgpOgorICAgIGRlbCBsc3RbOl0KKworCitrZWVwYWxpdmUgPSBbXQorCitmb3IgaSBpbiByYW5nZSgxMDApOgorICAgIGxzdCA9IFtzdHIoaSldCisgICAgYSA9IEEoKQorICAgIGEuY3ljbGUgPSBhCisgICAga2VlcGFsaXZlLmFwcGVuZCh3ZWFrcmVmLnJlZihhLCBjYWxsYmFjaykpCisgICAgZGVsIGEKKyAgICB3aGlsZSBsc3Q6CisgICAgICAgIGtlZXBhbGl2ZS5hcHBlbmQobHN0WzpdKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL25hc3R5X2VxX3ZzX2RpY3QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvbmFzdHlfZXFfdnNfZGljdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMwODNkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL25hc3R5X2VxX3ZzX2RpY3QucHkKQEAgLTAsMCArMSw0NyBAQAorIyBmcm9tIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwMS1KdW5lLzAxNTIzOS5odG1sCisKKyMgaWYgeW91IGtlZXAgY2hhbmdpbmcgYSBkaWN0aW9uYXJ5IHdoaWxlIGxvb2tpbmcgdXAgYSBrZXksIHlvdSBjYW4KKyMgcHJvdm9rZSBhbiBpbmZpbml0ZSByZWN1cnNpb24gaW4gQworCisjIEF0IHRoZSB0aW1lIG5laXRoZXIgVGltIG5vciBNaWNoYWVsIGNvdWxkIGJlIGJvdGhlcmVkIHRvIHRoaW5rIG9mIGEKKyMgd2F5IHRvIGZpeCBpdC4KKworY2xhc3MgWXVjazoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuaSA9IDAKKworICAgIGRlZiBtYWtlX2Rhbmdlcm91cyhzZWxmKToKKyAgICAgICAgc2VsZi5pID0gMQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAjIGRpcmVjdCB0byBzbG90IDQgaW4gdGFibGUgb2Ygc2l6ZSA4OyBzbG90IDEyIHdoZW4gc2l6ZSAxNgorICAgICAgICByZXR1cm4gNCArIDgKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLmkgPT0gMDoKKyAgICAgICAgICAgICMgbGVhdmUgZGljdCBhbG9uZQorICAgICAgICAgICAgcGFzcworICAgICAgICBlbGlmIHNlbGYuaSA9PSAxOgorICAgICAgICAgICAgIyBmaWRkbGUgdG8gMTYgc2xvdHMKKyAgICAgICAgICAgIHNlbGYuX19maWxsX2RpY3QoNikKKyAgICAgICAgICAgIHNlbGYuaSA9IDIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZmlkZGxlIHRvIDggc2xvdHMKKyAgICAgICAgICAgIHNlbGYuX19maWxsX2RpY3QoNCkKKyAgICAgICAgICAgIHNlbGYuaSA9IDEKKworICAgICAgICByZXR1cm4gMQorCisgICAgZGVmIF9fZmlsbF9kaWN0KHNlbGYsIG4pOgorICAgICAgICBzZWxmLmkgPSAwCisgICAgICAgIGRpY3QuY2xlYXIoKQorICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKKyAgICAgICAgICAgIGRpY3RbaV0gPSBpCisgICAgICAgIGRpY3Rbc2VsZl0gPSAiT0shIgorCit5ID0gWXVjaygpCitkaWN0ID0ge3k6ICJPSyEifQorCit6ID0gWXVjaygpCit5Lm1ha2VfZGFuZ2Vyb3VzKCkKK3ByaW50IGRpY3Rbel0KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9yZWN1cnNpb25fbGltaXRfdG9vX2hpZ2gucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvcmVjdXJzaW9uX2xpbWl0X3Rvb19oaWdoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjQ5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Jhc2hlcnMvcmVjdXJzaW9uX2xpbWl0X3Rvb19oaWdoLnB5CkBAIC0wLDAgKzEsMTYgQEAKKyMgVGhlIGZvbGxvd2luZyBleGFtcGxlIG1heSBjcmFzaCBvciBub3QgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyMgRS5nLiBvbiAzMi1iaXQgSW50ZWwgTGludXggaW4gYSAic3RhbmRhcmQiIGNvbmZpZ3VyYXRpb24gaXQgc2VlbXMgdG8KKyMgY3Jhc2ggb24gUHl0aG9uIDIuNSAoYnV0IG5vdCAyLjQgbm9yIDIuMykuICBPbiBXaW5kb3dzIHRoZSBpbXBvcnQKKyMgZXZlbnR1YWxseSBmYWlscyB0byBmaW5kIHRoZSBtb2R1bGUsIHBvc3NpYmx5IGJlY2F1c2Ugd2UgcnVuIG91dCBvZgorIyBmaWxlIGhhbmRsZXMuCisKKyMgVGhlIHBvaW50IG9mIHRoaXMgZXhhbXBsZSBpcyB0byBzaG93IHRoYXQgc3lzLnNldHJlY3Vyc2lvbmxpbWl0KCkgaXMgYQorIyBoYWNrLCBhbmQgbm90IGEgcm9idXN0IHNvbHV0aW9uLiAgVGhpcyBleGFtcGxlIHNpbXBseSBleGVyY2lzZXMgYSBwYXRoCisjIHdoZXJlIGl0IHRha2VzIG1hbnkgQy1sZXZlbCByZWN1cnNpb25zLCBjb25zdW1pbmcgYSBsb3Qgb2Ygc3RhY2sKKyMgc3BhY2UsIGZvciBlYWNoIFB5dGhvbi1sZXZlbCByZWN1cnNpb24uICBTbyAxMDAwIHRpbWVzIHRoaXMgYW1vdW50IG9mCisjIHN0YWNrIHNwYWNlIG1heSBiZSB0b28gbXVjaCBmb3Igc3RhbmRhcmQgcGxhdGZvcm1zIGFscmVhZHkuCisKK2ltcG9ydCBzeXMKK2lmICdyZWN1cnNpb25fbGltaXRfdG9vX2hpZ2gnIGluIHN5cy5tb2R1bGVzOgorICAgIGRlbCBzeXMubW9kdWxlc1sncmVjdXJzaW9uX2xpbWl0X3Rvb19oaWdoJ10KK2ltcG9ydCByZWN1cnNpb25fbGltaXRfdG9vX2hpZ2gKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9yZWN1cnNpdmVfY2FsbC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jcmFzaGVycy9yZWN1cnNpdmVfY2FsbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWM4OTYzCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2NyYXNoZXJzL3JlY3Vyc2l2ZV9jYWxsLnB5CkBAIC0wLDAgKzEsMTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIE5vIGJ1ZyByZXBvcnQgQUZBSUssIG1haWwgb24gcHl0aG9uLWRldiBvbiAyMDA2LTAxLTEwCisKKyMgVGhpcyBpcyBhICJ3b24ndCBmaXgiIGNhc2UuICBJdCBpcyBrbm93biB0aGF0IHNldHRpbmcgYSBoaWdoIGVub3VnaAorIyByZWN1cnNpb24gbGltaXQgY3Jhc2hlcyBieSBvdmVyZmxvd2luZyB0aGUgc3RhY2suICBVbmxlc3MgdGhpcyBpcworIyByZWRlc2lnbmVkIHNvbWVob3csIGl0IHdvbid0IGdvIGF3YXkuCisKK2ltcG9ydCBzeXMKKworc3lzLnNldHJlY3Vyc2lvbmxpbWl0KDEgPDwgMzApCitmID0gbGFtYmRhIGY6ZihmKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGYoZikKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9jdXJzZXNfdGVzdHMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Vyc2VzX3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZWRiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvY3Vyc2VzX3Rlc3RzLnB5CkBAIC0wLDAgKzEsNDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAkSWQ6IG5jdXJzZXMucHkgMzY1NTkgMjAwNC0wNy0xOCAwNTo1NjowOVogdGltX29uZSAkCisjCisjIEludGVyYWN0aXZlIHRlc3Qgc3VpdGUgZm9yIHRoZSBjdXJzZXMgbW9kdWxlLgorIyBUaGlzIHNjcmlwdCBkaXNwbGF5cyB2YXJpb3VzIHRoaW5ncyBhbmQgdGhlIHVzZXIgc2hvdWxkIHZlcmlmeSB3aGV0aGVyCisjIHRoZXkgZGlzcGxheSBjb3JyZWN0bHkuCisjCisKK2ltcG9ydCBjdXJzZXMKK2Zyb20gY3Vyc2VzIGltcG9ydCB0ZXh0cGFkCisKK2RlZiB0ZXN0X3RleHRwYWQoc3Rkc2NyLCBpbnNlcnRfbW9kZT1GYWxzZSk6CisgICAgbmNvbHMsIG5saW5lcyA9IDgsIDMKKyAgICB1bHksIHVseCA9IDMsIDIKKyAgICBpZiBpbnNlcnRfbW9kZToKKyAgICAgICAgbW9kZSA9ICdpbnNlcnQgbW9kZScKKyAgICBlbHNlOgorICAgICAgICBtb2RlID0gJ292ZXJ3cml0ZSBtb2RlJworCisgICAgc3Rkc2NyLmFkZHN0cih1bHktMywgdWx4LCAiVXNlIEN0cmwtRyB0byBlbmQgZWRpdGluZyAoJXMpLiIgJSBtb2RlKQorICAgIHN0ZHNjci5hZGRzdHIodWx5LTIsIHVseCwgIkJlIHN1cmUgdG8gdHJ5IHR5cGluZyBpbiB0aGUgbG93ZXItcmlnaHQgY29ybmVyLiIpCisgICAgd2luID0gY3Vyc2VzLm5ld3dpbihubGluZXMsIG5jb2xzLCB1bHksIHVseCkKKyAgICB0ZXh0cGFkLnJlY3RhbmdsZShzdGRzY3IsIHVseS0xLCB1bHgtMSwgdWx5ICsgbmxpbmVzLCB1bHggKyBuY29scykKKyAgICBzdGRzY3IucmVmcmVzaCgpCisKKyAgICBib3ggPSB0ZXh0cGFkLlRleHRib3god2luLCBpbnNlcnRfbW9kZSkKKyAgICBjb250ZW50cyA9IGJveC5lZGl0KCkKKyAgICBzdGRzY3IuYWRkc3RyKHVseStuY29scysyLCAwLCAiVGV4dCBlbnRlcmVkIGluIHRoZSBib3hcbiIpCisgICAgc3Rkc2NyLmFkZHN0cihyZXByKGNvbnRlbnRzKSkKKyAgICBzdGRzY3IuYWRkc3RyKCdcbicpCisgICAgc3Rkc2NyLmFkZHN0cignUHJlc3MgYW55IGtleScpCisgICAgc3Rkc2NyLmdldGNoKCkKKworICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICBzdGRzY3IubW92ZSh1bHkrbmNvbHMrMiArIGksIDApCisgICAgICAgIHN0ZHNjci5jbHJ0b2VvbCgpCisKK2RlZiBtYWluKHN0ZHNjcik6CisgICAgc3Rkc2NyLmNsZWFyKCkKKyAgICB0ZXN0X3RleHRwYWQoc3Rkc2NyLCBGYWxzZSkKKyAgICB0ZXN0X3RleHRwYWQoc3Rkc2NyLCBUcnVlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgY3Vyc2VzLndyYXBwZXIobWFpbikKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kYXRhL1JFQURNRSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kYXRhL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmY4YzliCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RhdGEvUkVBRE1FCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBlbXB0eSBkaXJlY3Rvcnkgc2VydmVzIGFzIGRlc3RpbmF0aW9uIGZvciB0ZW1wb3JhcnkgZmlsZXMKK2NyZWF0ZWQgYnkgc29tZSB0ZXN0cy4KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYWJzLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2Ficy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZjczZDcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2Ficy5kZWNUZXN0CkBAIC0wLDAgKzEsMTYxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGFicy5kZWNUZXN0IC0tIGRlY2ltYWwgYWJzb2x1dGUgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgcHJpbWFyaWx5IHRlc3RzIHRoZSBleGlzdGVuY2Ugb2YgdGhlIG9wZXJhdG9yLgorLS0gQWRkaXRvbiwgc3VidHJhY3Rpb24sIHJvdW5kaW5nLCBhbmQgbW9yZSBvdmVyZmxvd3MgYXJlIHRlc3RlZAorLS0gZWxzZXdoZXJlLgorCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogMQorCithYnN4MDAxIGFicyAnMScgICAgICAtPiAnMScKK2Fic3gwMDIgYWJzICctMScgICAgIC0+ICcxJworYWJzeDAwMyBhYnMgJzEuMDAnICAgLT4gJzEuMDAnCithYnN4MDA0IGFicyAnLTEuMDAnICAtPiAnMS4wMCcKK2Fic3gwMDUgYWJzICcwJyAgICAgIC0+ICcwJworYWJzeDAwNiBhYnMgJzAuMDAnICAgLT4gJzAuMDAnCithYnN4MDA3IGFicyAnMDAuMCcgICAtPiAnMC4wJworYWJzeDAwOCBhYnMgJzAwLjAwJyAgLT4gJzAuMDAnCithYnN4MDA5IGFicyAnMDAnICAgICAtPiAnMCcKKworYWJzeDAxMCBhYnMgJy0yJyAgICAgLT4gJzInCithYnN4MDExIGFicyAnMicgICAgICAtPiAnMicKK2Fic3gwMTIgYWJzICctMi4wMCcgIC0+ICcyLjAwJworYWJzeDAxMyBhYnMgJzIuMDAnICAgLT4gJzIuMDAnCithYnN4MDE0IGFicyAnLTAnICAgICAtPiAnMCcKK2Fic3gwMTUgYWJzICctMC4wMCcgIC0+ICcwLjAwJworYWJzeDAxNiBhYnMgJy0wMC4wJyAgLT4gJzAuMCcKK2Fic3gwMTcgYWJzICctMDAuMDAnIC0+ICcwLjAwJworYWJzeDAxOCBhYnMgJy0wMCcgICAgLT4gJzAnCisKK2Fic3gwMjAgYWJzICctMjAwMDAwMCcgLT4gJzIwMDAwMDAnCithYnN4MDIxIGFicyAnMjAwMDAwMCcgIC0+ICcyMDAwMDAwJworcHJlY2lzaW9uOiA3CithYnN4MDIyIGFicyAnLTIwMDAwMDAnIC0+ICcyMDAwMDAwJworYWJzeDAyMyBhYnMgJzIwMDAwMDAnICAtPiAnMjAwMDAwMCcKK3ByZWNpc2lvbjogNgorYWJzeDAyNCBhYnMgJy0yMDAwMDAwJyAtPiAnMi4wMDAwMEUrNicgUm91bmRlZAorYWJzeDAyNSBhYnMgJzIwMDAwMDAnICAtPiAnMi4wMDAwMEUrNicgUm91bmRlZAorcHJlY2lzaW9uOiAzCithYnN4MDI2IGFicyAnLTIwMDAwMDAnIC0+ICcyLjAwRSs2JyBSb3VuZGVkCithYnN4MDI3IGFicyAnMjAwMDAwMCcgIC0+ICcyLjAwRSs2JyBSb3VuZGVkCisKK2Fic3gwMzAgYWJzICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCithYnN4MDMxIGFicyAnLTAuMScgICAgICAgICAgICAtPiAnMC4xJworYWJzeDAzMiBhYnMgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCithYnN4MDMzIGFicyAnLTAuMDEnICAgICAgICAgICAtPiAnMC4wMScKK2Fic3gwMzQgYWJzICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2Fic3gwMzUgYWJzICctMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2Fic3gwMzYgYWJzICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2Fic3gwMzcgYWJzICctMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2Fic3gwMzggYWJzICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKK2Fic3gwMzkgYWJzICctMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorcHJlY2lzaW9uOiA5CithYnN4MDQwIGFicyAnMi4xJyAgICAgLT4gICcyLjEnCithYnN4MDQxIGFicyAnLTEwMCcgICAgLT4gICcxMDAnCithYnN4MDQyIGFicyAnMTAxLjUnICAgLT4gICcxMDEuNScKK2Fic3gwNDMgYWJzICctMTAxLjUnICAtPiAgJzEwMS41JworCistLSBtb3JlIGZpeGVkLCBwb3RlbnRpYWwgTEhTIHN3YXBzL292ZXJsYXlzIGlmIGRvbmUgYnkgc3VidHJhY3QgMAorcHJlY2lzaW9uOiA5CithYnN4MDYwIGFicyAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnCithYnN4MDYxIGFicyAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3JworYWJzeDA2MiBhYnMgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JworYWJzeDA2MyBhYnMgJy01NjI2N0UtMScgICAtPiAnNTYyNi43JworYWJzeDA2NSBhYnMgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCisKKy0tIG92ZXJmbG93IHRlc3RzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCithYnN4MTIwIGFicyA5Ljk5OUUrOTk5OTk5OTk5IC0+IEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK2Fic3gyMTAgYWJzICAxLjAwRS05OTkgICAgICAgIC0+ICAgMS4wMEUtOTk5CithYnN4MjExIGFicyAgMC4xRS05OTkgICAgICAgICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwKK2Fic3gyMTIgYWJzICAwLjEwRS05OTkgICAgICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorYWJzeDIxMyBhYnMgIDAuMTAwRS05OTkgICAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK2Fic3gyMTQgYWJzICAwLjAxRS05OTkgICAgICAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2Fic3gyMTUgYWJzICAwLjk5OUUtOTk5ICAgICAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithYnN4MjE2IGFicyAgMC4wOTlFLTk5OSAgICAgICAtPiAgIDEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWJzeDIxNyBhYnMgIDAuMDA5RS05OTkgICAgICAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2Fic3gyMTggYWJzICAwLjAwMUUtOTk5ICAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2Fic3gyMTkgYWJzICAwLjAwMDlFLTk5OSAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2Fic3gyMjAgYWJzICAwLjAwMDFFLTk5OSAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworYWJzeDIzMCBhYnMgLTEuMDBFLTk5OSAgICAgICAgLT4gICAxLjAwRS05OTkKK2Fic3gyMzEgYWJzIC0wLjFFLTk5OSAgICAgICAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbAorYWJzeDIzMiBhYnMgLTAuMTBFLTk5OSAgICAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsCithYnN4MjMzIGFicyAtMC4xMDBFLTk5OSAgICAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorYWJzeDIzNCBhYnMgLTAuMDFFLTk5OSAgICAgICAgLT4gICAxRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorYWJzeDIzNSBhYnMgLTAuOTk5RS05OTkgICAgICAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2Fic3gyMzYgYWJzIC0wLjA5OUUtOTk5ICAgICAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithYnN4MjM3IGFicyAtMC4wMDlFLTk5OSAgICAgICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWJzeDIzOCBhYnMgLTAuMDAxRS05OTkgICAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorYWJzeDIzOSBhYnMgLTAuMDAwOUUtOTk5ICAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorYWJzeDI0MCBhYnMgLTAuMDAwMUUtOTk5ICAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBsb25nIG9wZXJhbmQgdGVzdHMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK2Fic3gzMDEgYWJzIDEyMzQ1Njc4MDAwICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCithYnN4MzAyIGFicyAxMjM0NTY3ODAwICAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCithYnN4MzAzIGFicyAxMjM0NTY3ODkwICAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCithYnN4MzA0IGFicyAxMjM0NTY3ODkxICAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2Fic3gzMDUgYWJzIDEyMzQ1Njc4OTAxICAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2Fic3gzMDYgYWJzIDEyMzQ1Njc4OTYgICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDE1CithYnN4MzIxIGFicyAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK2Fic3gzMjIgYWJzIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCithYnN4MzIzIGFicyAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorYWJzeDMyNCBhYnMgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK2Fic3gzMjUgYWJzIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorYWJzeDMyNiBhYnMgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKKworCistLSBTcGVjaWFscworcHJlY2lzaW9uOiAgIDkKKworLS0gc3BlY2lhbHMKK2Fic3g1MjAgYWJzICdJbmYnICAgIC0+ICdJbmZpbml0eScKK2Fic3g1MjEgYWJzICctSW5mJyAgIC0+ICdJbmZpbml0eScKK2Fic3g1MjIgYWJzICAgTmFOICAgIC0+ICBOYU4KK2Fic3g1MjMgYWJzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorYWJzeDUyNCBhYnMgICBOYU4yMiAgLT4gIE5hTjIyCithYnN4NTI1IGFicyAgc05hTjMzICAtPiAgTmFOMzMgSW52YWxpZF9vcGVyYXRpb24KK2Fic3g1MjYgYWJzICAtTmFOMjIgIC0+IC1OYU4yMgorYWJzeDUyNyBhYnMgLXNOYU4zMyAgLT4gLU5hTjMzIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK2Fic3g5MDAgYWJzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2FkZC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9hZGQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDYxYzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9hZGQuZGVjVGVzdApAQCAtMCwwICsxLDI3MTYgQEAKKy0tLS0tLS9jYW5jZWxsLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gYWRkLmRlY1Rlc3QgLS0gZGVjaW1hbCBhZGRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2FkZHgwMDEgYWRkIDEgICAgICAgMSAgICAgICAtPiAgMgorYWRkeDAwMiBhZGQgMiAgICAgICAzICAgICAgIC0+ICA1CithZGR4MDAzIGFkZCAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2FkZHgwMDQgYWRkICc1JyAgICAgJy0zJyAgICAtPiAgMgorYWRkeDAwNSBhZGQgJy01JyAgICAnLTMnICAgIC0+ICAtOAorYWRkeDAwNiBhZGQgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CithZGR4MDA3IGFkZCAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorYWRkeDAwOCBhZGQgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCithZGR4MDA5IGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2FkZHgwMTAgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCithZGR4MDExIGFkZCAnMC40NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDAxMiBhZGQgJzAuNDQ0NDQ0NDQ0MCcgICcwLjU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMTMgYWRkICcwLjQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorYWRkeDAxNCBhZGQgJzAuNDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorYWRkeDAxNSBhZGQgJzAuNDQ0NDQ0NDQ0NDk5JyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorYWRkeDAxNiBhZGQgJzAuNDQ0NDQ0NDQ0NDk5OScgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorYWRkeDAxNyBhZGQgJzAuNDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorYWRkeDAxOCBhZGQgJzAuNDQ0NDQ0NDQ0NTAwMScgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorYWRkeDAxOSBhZGQgJzAuNDQ0NDQ0NDQ0NTAxJyAgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorYWRkeDAyMCBhZGQgJzAuNDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorCithZGR4MDIxIGFkZCAwIDEgLT4gMQorYWRkeDAyMiBhZGQgMSAxIC0+IDIKK2FkZHgwMjMgYWRkIDIgMSAtPiAzCithZGR4MDI0IGFkZCAzIDEgLT4gNAorYWRkeDAyNSBhZGQgNCAxIC0+IDUKK2FkZHgwMjYgYWRkIDUgMSAtPiA2CithZGR4MDI3IGFkZCA2IDEgLT4gNworYWRkeDAyOCBhZGQgNyAxIC0+IDgKK2FkZHgwMjkgYWRkIDggMSAtPiA5CithZGR4MDMwIGFkZCA5IDEgLT4gMTAKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCithZGR4MDMxIGFkZCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2FkZHgwMzIgYWRkICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JworYWRkeDAzMyBhZGQgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCithZGR4MDM0IGFkZCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworYWRkeDAzNSBhZGQgJzcwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorYWRkeDAzNiBhZGQgJzcwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMzcgYWRkICc3MDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorYWRkeDAzOCBhZGQgJzcwMDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMUUrMTMnIEluZXhhY3QgUm91bmRlZAorYWRkeDAzOSBhZGQgJzcwMDAwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDdFKzEzJyBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5OgorYWRkeDA0MCBhZGQgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorYWRkeDA0MSBhZGQgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwNDIgYWRkICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorYWRkeDA0NCBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMUUrMTMnIEluZXhhY3QgUm91bmRlZAorYWRkeDA0NSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDdFKzEzJyBSb3VuZGVkCisKKy0tIHNhbWUsIGhpZ2hlciBwcmVjaXNpb24KK3ByZWNpc2lvbjogMTUKK2FkZHgwNDYgYWRkICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCithZGR4MDQ3IGFkZCAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2FkZHgwNDggYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2FkZHgwNDkgYWRkICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCithZGR4MDUwIGFkZCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2FkZHgwNTEgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKK2FkZHgwNTIgYWRkICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2FkZHgwNTMgYWRkICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2FkZHgwNTQgYWRkICcxLjMnICctMS4wNycgLT4gJzAuMjMnCithZGR4MDU1IGFkZCAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworYWRkeDA1NiBhZGQgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCithZGR4MDU3IGFkZCAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSB6ZXJvIHByZXNlcnZhdGlvbgorcHJlY2lzaW9uOiA2CithZGR4MDYwIGFkZCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCithZGR4MDYxIGFkZCAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCithZGR4MDYyIGFkZCAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2FkZHgwNjMgYWRkIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkCithZGR4MDY0IGFkZCAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwNjUgYWRkIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorYWRkeDA3MCBhZGQgMSAgMCAgICAtPiAxCithZGR4MDcxIGFkZCAxIDAuICAgIC0+IDEKK2FkZHgwNzIgYWRkIDEgIC4wICAgLT4gMS4wCithZGR4MDczIGFkZCAxIDAuMCAgIC0+IDEuMAorYWRkeDA3NCBhZGQgMSAwLjAwICAtPiAxLjAwCithZGR4MDc1IGFkZCAgMCAgMSAgIC0+IDEKK2FkZHgwNzYgYWRkIDAuICAxICAgLT4gMQorYWRkeDA3NyBhZGQgIC4wIDEgICAtPiAxLjAKK2FkZHgwNzggYWRkIDAuMCAxICAgLT4gMS4wCithZGR4MDc5IGFkZCAwLjAwIDEgIC0+IDEuMDAKKworcHJlY2lzaW9uOiA5CisKKy0tIHNvbWUgY2FycmllcworYWRkeDA4MCBhZGQgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQorYWRkeDA4MSBhZGQgOTk5OTk5OTk5IDEgIC0+IDEuMDAwMDAwMDBFKzkgUm91bmRlZAorYWRkeDA4MiBhZGQgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAorYWRkeDA4MyBhZGQgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCithZGR4MDg0IGFkZCAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAorYWRkeDA4NSBhZGQgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorYWRkeDA4NiBhZGQgICAgICA5OTk5IDEgIC0+IDEwMDAwCithZGR4MDg3IGFkZCAgICAgICA5OTkgMSAgLT4gMTAwMAorYWRkeDA4OCBhZGQgICAgICAgIDk5IDEgIC0+IDEwMAorYWRkeDA4OSBhZGQgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2FkZHgwOTAgYWRkICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworYWRkeDA5MSBhZGQgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2FkZHgwOTIgYWRkICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2FkZHgwOTMgYWRkICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworYWRkeDA5NCBhZGQgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCithZGR4MDk1IGFkZCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2FkZHgwOTYgYWRkICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworYWRkeDA5NyBhZGQgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2FkZHgwOTggYWRkICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCithZGR4MDk5IGFkZCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCithZGR4MTAwIGFkZCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworYWRkeDEwMSBhZGQgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworYWRkeDEwMiBhZGQgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCithZGR4MTAzIGFkZCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2FkZHgxMDQgYWRkICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2FkZHgxMDUgYWRkICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCithZGR4MTA2IGFkZCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2FkZHgxMDcgYWRkICctNUU4JyAgICAgICAgIDAgLT4gICctNTAwMDAwMDAwJworYWRkeDEwOCBhZGQgJy01RTknICAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSs5JyAgIFJvdW5kZWQKK2FkZHgxMDkgYWRkICctNUUxMCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAnICBSb3VuZGVkCithZGR4MTEwIGFkZCAnLTVFMTEnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzExJyAgUm91bmRlZAorYWRkeDExMSBhZGQgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMKK2FkZHgxMTMgYWRkIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCithZGR4MTE0IGFkZCAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCithZGR4MTE2IGFkZCAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKK2FkZHgxMTcgYWRkIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCithZGR4MTE5IGFkZCAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JworYWRkeDEyMCBhZGQgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKK2FkZHgxMjEgYWRkIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCithZGR4MTIyIGFkZCAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCithZGR4MTIzIGFkZCAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCithZGR4MTI0IGFkZCAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKK2FkZHgxMjUgYWRkIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKK2FkZHgxMjYgYWRkIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JworYWRkeDEyNyBhZGQgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKK2FkZHgxMjggYWRkIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCithZGR4MTI5IGFkZCAwICAnLTVFMCcgICAgICAgLT4gICctNScKK2FkZHgxMzAgYWRkIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKK2FkZHgxMzEgYWRkIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCithZGR4MTMyIGFkZCAwICAnLTVFOCcgICAgICAgLT4gICctNTAwMDAwMDAwJworYWRkeDEzMyBhZGQgMCAgJy01RTknICAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzknICAgIFJvdW5kZWQKK2FkZHgxMzQgYWRkIDAgICctNUUxMCcgICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMCcgICBSb3VuZGVkCithZGR4MTM1IGFkZCAwICAnLTVFMTEnICAgICAgLT4gICctNS4wMDAwMDAwMEUrMTEnICAgUm91bmRlZAorYWRkeDEzNiBhZGQgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworLS0gcmVsYXRlZAorYWRkeDEzNyBhZGQgIDEgICcwRS0xMicgICAgICAtPiAgJzEuMDAwMDAwMDAnICBSb3VuZGVkCithZGR4MTM4IGFkZCAtMSAgJzBFLTEyJyAgICAgIC0+ICAnLTEuMDAwMDAwMDAnIFJvdW5kZWQKK2FkZHgxMzkgYWRkICcwRS0xMicgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwJyAgUm91bmRlZAorYWRkeDE0MCBhZGQgJzBFLTEyJyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwJyBSb3VuZGVkCithZGR4MTQxIGFkZCAxRSs0ICAgIDAuMDAwMCAgIC0+ICAnMTAwMDAuMDAwMCcKK2FkZHgxNDIgYWRkIDFFKzQgICAgMC4wMDAwMCAgLT4gICcxMDAwMC4wMDAwJyAgUm91bmRlZAorYWRkeDE0MyBhZGQgMC4wMDAgICAxRSs1ICAgICAtPiAgJzEwMDAwMC4wMDAnCithZGR4MTQ0IGFkZCAwLjAwMDAgIDFFKzUgICAgIC0+ICAnMTAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2FkZHgxNDYgYWRkICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2FkZHgxNDcgYWRkICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCithZGR4MTQ4IGFkZCAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworYWRkeDE0OSBhZGQgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworYWRkeDE1MCBhZGQgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2FkZHgxNTEgYWRkICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCithZGR4MTUyIGFkZCAnMycgICAgICcuMycgICAgLT4gICczLjMnCithZGR4MTUzIGFkZCAnMy4nICAgICcuMycgICAgLT4gICczLjMnCithZGR4MTU0IGFkZCAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCithZGR4MTU1IGFkZCAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworYWRkeDE1NiBhZGQgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2FkZHgxNTcgYWRkICczJyAgICAgJyszJyAgICAtPiAgJzYnCithZGR4MTU4IGFkZCAnMycgICAgICctMycgICAgLT4gICcwJworYWRkeDE1OSBhZGQgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworYWRkeDE2MCBhZGQgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK3ByZWNpc2lvbjogMTUKK2FkZHgxNjEgYWRkICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JworYWRkeDE2MiBhZGQgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJworYWRkeDE2MyBhZGQgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJworYWRkeDE2NCBhZGQgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCithZGR4MTY1IGFkZCAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCithZGR4MTY2IGFkZCAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCithZGR4MTY3IGFkZCAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCithZGR4MTY4IGFkZCAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCisKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEgMjM0NTY3ODkwMTIzNDUKK2FkZHgxNzAgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorYWRkeDE3MSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCithZGR4MTcyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxNzMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDE3NCBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCithZGR4MTc1IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxNzYgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDE3NyBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorYWRkeDE3OCBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTknCithZGR4MTc5IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OCcKK2FkZHgxODAgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk3JworYWRkeDE4MSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTYnCithZGR4MTgyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NScKK2FkZHgxODMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk0JworCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCitwcmVjaXNpb246IDkKK3JvdW5kaW5nOiBoYWxmX3VwCithZGR4MjAwIGFkZCAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCithZGR4MjAxIGFkZCAnMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIwMiBhZGQgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMDMgYWRkICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjA0IGFkZCAnMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIwNSBhZGQgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMDYgYWRkICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjA3IGFkZCAnMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIwOCBhZGQgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMDkgYWRkICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjEwIGFkZCAnMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIxMSBhZGQgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMTIgYWRkICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjEzIGFkZCAnMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIxNCBhZGQgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMTUgYWRkICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjE2IGFkZCAnMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnCithZGR4MjE3IGFkZCAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIxOCBhZGQgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMTkgYWRkICcxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2FkZHgyMjAgYWRkICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKK2FkZHgyMjEgYWRkICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjIyIGFkZCAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIyMyBhZGQgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMjQgYWRkICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjI1IGFkZCAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIyNiBhZGQgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMjcgYWRkICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjI4IGFkZCAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIyOSBhZGQgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMzAgYWRkICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjMxIGFkZCAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIzMiBhZGQgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMzMgYWRkICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjM0IGFkZCAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIzNSBhZGQgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMzYgYWRkICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcKK2FkZHgyMzcgYWRkICcxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjM4IGFkZCAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIzOSBhZGQgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCithZGR4MjQwIGFkZCAnMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorYWRkeDI0MSBhZGQgJzEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNDIgYWRkICcxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCithZGR4MjUwIGFkZCAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCithZGR4MjUxIGFkZCAnMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI1MiBhZGQgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNTMgYWRkICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjU0IGFkZCAnMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI1NSBhZGQgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNTYgYWRkICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjU3IGFkZCAnMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI1OCBhZGQgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNTkgYWRkICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjYwIGFkZCAnMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI2MSBhZGQgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNjIgYWRkICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjYzIGFkZCAnMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI2NCBhZGQgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNjUgYWRkICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjY2IGFkZCAnMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnCithZGR4MjY3IGFkZCAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDI2OCBhZGQgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNjkgYWRkICcxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIGlucHV0IHByZXBhcmF0aW9uIHRlc3RzIChvcGVyYW5kcyBzaG91bGQgbm90IGJlIHJvdW5kZWQpCitwcmVjaXNpb246IDMKK3JvdW5kaW5nOiBoYWxmX3VwCisKK2FkZHgyNzAgYWRkICcxMjM0NTY3ODkwMDAwMCcgIDk5OTk5OTk5OTk5OTkgLT4gICcyLjIzRSsxMycgSW5leGFjdCBSb3VuZGVkCithZGR4MjcxIGFkZCAgJzk5OTk5OTk5OTk5OTknIDEyMzQ1Njc4OTAwMDAwIC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZAorCithZGR4MjcyIGFkZCAnMTJFKzMnICAnMzQ0NCcgICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI3MyBhZGQgJzEyRSszJyAgJzM0NDYnICAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNzQgYWRkICcxMkUrMycgICczNDQ5LjknIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjc1IGFkZCAnMTJFKzMnICAnMzQ1MC4wJyAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI3NiBhZGQgJzEyRSszJyAgJzM0NTAuMScgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNzcgYWRkICcxMkUrMycgICczNDU0JyAgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjc4IGFkZCAnMTJFKzMnICAnMzQ1NicgICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorCithZGR4MjgxIGFkZCAnMzQ0NCcgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI4MiBhZGQgJzM0NDYnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyODMgYWRkICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjg0IGFkZCAnMzQ1MC4wJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI4NSBhZGQgJzM0NTAuMScgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyODYgYWRkICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjg3IGFkZCAnMzQ1NicgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCithZGR4MjkxIGFkZCAnMzQ0NCcgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI5MiBhZGQgJzM0NDYnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyOTMgYWRkICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjk0IGFkZCAnMzQ1MC4wJyAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI5NSBhZGQgJzM0NTAuMScgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyOTYgYWRkICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjk3IGFkZCAnMzQ1NicgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCithZGR4MzAxIGFkZCAgLTEgICAxICAgICAgLT4gICAwCithZGR4MzAyIGFkZCAgIDAgICAxICAgICAgLT4gICAxCithZGR4MzAzIGFkZCAgIDEgICAxICAgICAgLT4gICAyCithZGR4MzA0IGFkZCAgMTIgICAxICAgICAgLT4gIDEzCithZGR4MzA1IGFkZCAgOTggICAxICAgICAgLT4gIDk5CithZGR4MzA2IGFkZCAgOTkgICAxICAgICAgLT4gMTAwCithZGR4MzA3IGFkZCAxMDAgICAxICAgICAgLT4gMTAxCithZGR4MzA4IGFkZCAxMDEgICAxICAgICAgLT4gMTAyCithZGR4MzA5IGFkZCAgLTEgIC0xICAgICAgLT4gIC0yCithZGR4MzEwIGFkZCAgIDAgIC0xICAgICAgLT4gIC0xCithZGR4MzExIGFkZCAgIDEgIC0xICAgICAgLT4gICAwCithZGR4MzEyIGFkZCAgMTIgIC0xICAgICAgLT4gIDExCithZGR4MzEzIGFkZCAgOTggIC0xICAgICAgLT4gIDk3CithZGR4MzE0IGFkZCAgOTkgIC0xICAgICAgLT4gIDk4CithZGR4MzE1IGFkZCAxMDAgIC0xICAgICAgLT4gIDk5CithZGR4MzE2IGFkZCAxMDEgIC0xICAgICAgLT4gMTAwCisKK2FkZHgzMjEgYWRkIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCithZGR4MzIyIGFkZCAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorYWRkeDMyMyBhZGQgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKK2FkZHgzMjQgYWRkICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCithZGR4MzI1IGFkZCAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorYWRkeDMyNiBhZGQgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKK2FkZHgzMjcgYWRkICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCithZGR4MzI4IGFkZCAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorYWRkeDMyOSBhZGQgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKK2FkZHgzMzAgYWRkICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCithZGR4MzMxIGFkZCAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorYWRkeDMzMiBhZGQgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKK2FkZHgzMzMgYWRkICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CithZGR4MzM0IGFkZCAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorYWRkeDMzNSBhZGQgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKK2FkZHgzMzYgYWRkICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorcHJlY2lzaW9uOiA5CithZGR4MzQwIGFkZCAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCithZGR4MzQxIGFkZCAxRSs4ICAgIDAgICAgLT4gICAgMTAwMDAwMDAwCithZGR4MzQyIGFkZCAxRSs5ICAgIDAgICAgLT4gICAxLjAwMDAwMDAwRSs5ICAgUm91bmRlZAorYWRkeDM0MyBhZGQgMUUrMTAgICAwICAgIC0+ICAgMS4wMDAwMDAwMEUrMTAgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2FkZHgzNDQgYWRkIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2FkZHgzNDUgYWRkIDFFKzggICAgMSAgICAtPiAgICAxMDAwMDAwMDEKK2FkZHgzNDYgYWRkIDFFKzkgICAgMSAgICAtPiAgIDEuMDAwMDAwMDBFKzkgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDcgYWRkIDFFKzEwICAgMSAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDggYWRkIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2FkZHgzNDkgYWRkIDFFKzggICAgNyAgICAtPiAgICAxMDAwMDAwMDcKK2FkZHgzNTAgYWRkIDFFKzkgICAgNyAgICAtPiAgIDEuMDAwMDAwMDFFKzkgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNTEgYWRkIDFFKzEwICAgNyAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3ByZWNpc2lvbjogICA3Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDkyCittaW5leHBvbmVudDogLTkyCithZGR4MzYxICBhZGQgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorYWRkeDM2MiAgYWRkIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMCAgUm91bmRlZAorYWRkeDM2MyAgYWRkIDEwMDAwRSsxIDEwMDAwRS01MCAgLT4gMTAwMDAwLjAgIFJvdW5kZWQgSW5leGFjdAorYWRkeDM2NCAgYWRkIDkuOTk5OTk5RSs5MiAtOS45OTk5OTlFKzkyIC0+IDBFKzg2CisKKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK3ByZWNpc2lvbjogICAxMAorYWRkeDM3MCBhZGQgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExCitwcmVjaXNpb246ICAgICAgNgorYWRkeDM3MSBhZGQgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitwcmVjaXNpb246ICAgMTAKK2FkZHgzNzIgYWRkIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQorcHJlY2lzaW9uOiAgICAgIDYKK2FkZHgzNzMgYWRkIDk5OTk5OTk5IDgxNTEyIC0+IDEuMDAwODJFKzggUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitwcmVjaXNpb246ICAgMTAKK2FkZHgzNzQgYWRkIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQorcHJlY2lzaW9uOiAgICAgIDYKK2FkZHgzNzUgYWRkIDk5OTk5OTk5IDgxNTEyIC0+IDEuMDAwODJFKzggUm91bmRlZCBJbmV4YWN0CisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworcHJlY2lzaW9uOiA5CittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorYWRkeDQwMCBhZGQgICAxICAgNzdlLTcgICAgICAgLT4gIDEuMDAwMDA3NworYWRkeDQwMSBhZGQgICAxICAgNzdlLTggICAgICAgLT4gIDEuMDAwMDAwNzcKK2FkZHg0MDIgYWRkICAgMSAgIDc3ZS05ICAgICAgIC0+ICAxLjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorYWRkeDQwMyBhZGQgICAxICAgNzdlLTEwICAgICAgLT4gIDEuMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NDA0IGFkZCAgIDEgICA3N2UtMTEgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MDUgYWRkICAgMSAgIDc3ZS0xMiAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQwNiBhZGQgICAxICAgNzdlLTk5OSAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDA3IGFkZCAgIDEgICA3N2UtOTk5OTk5OSAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDQxMCBhZGQgIDEwICAgNzdlLTcgICAgICAgLT4gIDEwLjAwMDAwNzcKK2FkZHg0MTEgYWRkICAxMCAgIDc3ZS04ICAgICAgIC0+ICAxMC4wMDAwMDA4IEluZXhhY3QgUm91bmRlZAorYWRkeDQxMiBhZGQgIDEwICAgNzdlLTkgICAgICAgLT4gIDEwLjAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NDEzIGFkZCAgMTAgICA3N2UtMTAgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MTQgYWRkICAxMCAgIDc3ZS0xMSAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQxNSBhZGQgIDEwICAgNzdlLTEyICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDE2IGFkZCAgMTAgICA3N2UtOTk5ICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MTcgYWRkICAxMCAgIDc3ZS05OTk5OTk5IC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NDIwIGFkZCAgNzdlLTcgICAgICAgIDEgICAtPiAgMS4wMDAwMDc3CithZGR4NDIxIGFkZCAgNzdlLTggICAgICAgIDEgICAtPiAgMS4wMDAwMDA3NworYWRkeDQyMiBhZGQgIDc3ZS05ICAgICAgICAxICAgLT4gIDEuMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCithZGR4NDIzIGFkZCAgNzdlLTEwICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MjQgYWRkICA3N2UtMTEgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQyNSBhZGQgIDc3ZS0xMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDI2IGFkZCAgNzdlLTk5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MjcgYWRkICA3N2UtOTk5OTk5OSAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NDMwIGFkZCAgNzdlLTcgICAgICAgMTAgICAtPiAgMTAuMDAwMDA3NworYWRkeDQzMSBhZGQgIDc3ZS04ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDggSW5leGFjdCBSb3VuZGVkCithZGR4NDMyIGFkZCAgNzdlLTkgICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MzMgYWRkICA3N2UtMTAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQzNCBhZGQgIDc3ZS0xMSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDM1IGFkZCAgNzdlLTEyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MzYgYWRkICA3N2UtOTk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQzNyBhZGQgIDc3ZS05OTk5OTk5IDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2FkZHg0NDAgYWRkICAgMSAgIC03N2UtNyAgICAgICAtPiAgMC45OTk5OTIzCithZGR4NDQxIGFkZCAgIDEgICAtNzdlLTggICAgICAgLT4gIDAuOTk5OTk5MjMKK2FkZHg0NDIgYWRkICAgMSAgIC03N2UtOSAgICAgICAtPiAgMC45OTk5OTk5MjMKK2FkZHg0NDMgYWRkICAgMSAgIC03N2UtMTAgICAgICAtPiAgMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCithZGR4NDQ0IGFkZCAgIDEgICAtNzdlLTExICAgICAgLT4gIDAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDQ0NSBhZGQgICAxICAgLTc3ZS0xMiAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQ0NiBhZGQgICAxICAgLTc3ZS05OTkgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQ0NyBhZGQgICAxICAgLTc3ZS05OTk5OTk5IC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NDUwIGFkZCAgMTAgICAtNzdlLTcgICAgICAgLT4gICA5Ljk5OTk5MjMKK2FkZHg0NTEgYWRkICAxMCAgIC03N2UtOCAgICAgICAtPiAgIDkuOTk5OTk5MjMKK2FkZHg0NTIgYWRkICAxMCAgIC03N2UtOSAgICAgICAtPiAgIDkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCithZGR4NDUzIGFkZCAgMTAgICAtNzdlLTEwICAgICAgLT4gICA5Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDQ1NCBhZGQgIDEwICAgLTc3ZS0xMSAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQ1NSBhZGQgIDEwICAgLTc3ZS0xMiAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQ1NiBhZGQgIDEwICAgLTc3ZS05OTkgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQ1NyBhZGQgIDEwICAgLTc3ZS05OTk5OTk5IC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NDYwIGFkZCAgLTc3ZS03ICAgICAgICAxICAgLT4gIDAuOTk5OTkyMworYWRkeDQ2MSBhZGQgIC03N2UtOCAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTIzCithZGR4NDYyIGFkZCAgLTc3ZS05ICAgICAgICAxICAgLT4gIDAuOTk5OTk5OTIzCithZGR4NDYzIGFkZCAgLTc3ZS0xMCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDQ2NCBhZGQgIC03N2UtMTEgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NjUgYWRkICAtNzdlLTEyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NjYgYWRkICAtNzdlLTk5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NjcgYWRkICAtNzdlLTk5OTk5OTkgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDQ3MCBhZGQgIC03N2UtNyAgICAgICAxMCAgIC0+ICAgOS45OTk5OTIzCithZGR4NDcxIGFkZCAgLTc3ZS04ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTIzCithZGR4NDcyIGFkZCAgLTc3ZS05ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDQ3MyBhZGQgIC03N2UtMTAgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NzQgYWRkICAtNzdlLTExICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NzUgYWRkICAtNzdlLTEyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NzYgYWRkICAtNzdlLTk5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NzcgYWRkICAtNzdlLTk5OTk5OTkgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworYWRkeDQ4MCBhZGQgIC0xICAgIDc3ZS03ICAgICAgIC0+ICAtMC45OTk5OTIzCithZGR4NDgxIGFkZCAgLTEgICAgNzdlLTggICAgICAgLT4gIC0wLjk5OTk5OTIzCithZGR4NDgyIGFkZCAgLTEgICAgNzdlLTkgICAgICAgLT4gIC0wLjk5OTk5OTkyMworYWRkeDQ4MyBhZGQgIC0xICAgIDc3ZS0xMCAgICAgIC0+ICAtMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCithZGR4NDg0IGFkZCAgLTEgICAgNzdlLTExICAgICAgLT4gIC0wLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0ODUgYWRkICAtMSAgICA3N2UtMTIgICAgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDg2IGFkZCAgLTEgICAgNzdlLTk5OSAgICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQ4NyBhZGQgIC0xICAgIDc3ZS05OTk5OTk5IC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDQ5MCBhZGQgLTEwICAgIDc3ZS03ICAgICAgIC0+ICAgLTkuOTk5OTkyMworYWRkeDQ5MSBhZGQgLTEwICAgIDc3ZS04ICAgICAgIC0+ICAgLTkuOTk5OTk5MjMKK2FkZHg0OTIgYWRkIC0xMCAgICA3N2UtOSAgICAgICAtPiAgIC05Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDQ5MyBhZGQgLTEwICAgIDc3ZS0xMCAgICAgIC0+ICAgLTkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCithZGR4NDk0IGFkZCAtMTAgICAgNzdlLTExICAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQ5NSBhZGQgLTEwICAgIDc3ZS0xMiAgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0OTYgYWRkIC0xMCAgICA3N2UtOTk5ICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDk3IGFkZCAtMTAgICAgNzdlLTk5OTk5OTkgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NTAwIGFkZCAgIDc3ZS03ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5MjMKK2FkZHg1MDEgYWRkICAgNzdlLTggICAgICAgLTEgICAtPiAgLTAuOTk5OTk5MjMKK2FkZHg1MDIgYWRkICAgNzdlLTkgICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTIzCithZGR4NTAzIGFkZCAgIDc3ZS0xMCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1MDQgYWRkICAgNzdlLTExICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDUwNSBhZGQgICA3N2UtMTIgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1MDYgYWRkICAgNzdlLTk5OSAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NTA3IGFkZCAgIDc3ZS05OTk5OTk5IC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NTEwIGFkZCAgIDc3ZS03ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTIzCithZGR4NTExIGFkZCAgIDc3ZS04ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTkyMworYWRkeDUxMiBhZGQgICA3N2UtOSAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCithZGR4NTEzIGFkZCAgIDc3ZS0xMCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1MTQgYWRkICAgNzdlLTExICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NTE1IGFkZCAgIDc3ZS0xMiAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDUxNiBhZGQgICA3N2UtOTk5ICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1MTcgYWRkICAgNzdlLTk5OTk5OTkgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gbG9uZyBvcGVyYW5kcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorYWRkeDUyMSBhZGQgMTIzNDU2NzgwMDAgMCAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCithZGR4NTIyIGFkZCAwIDEyMzQ1Njc4MDAwIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKK2FkZHg1MjMgYWRkIDEyMzQ1Njc4MDAgIDAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCithZGR4NTI0IGFkZCAwIDEyMzQ1Njc4MDAgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorYWRkeDUyNSBhZGQgMTIzNDU2Nzg5MCAgMCAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2FkZHg1MjYgYWRkIDAgMTIzNDU2Nzg5MCAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCithZGR4NTI3IGFkZCAxMjM0NTY3ODkxICAwIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCithZGR4NTI4IGFkZCAwIDEyMzQ1Njc4OTEgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCithZGR4NTI5IGFkZCAxMjM0NTY3ODkwMSAwIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorYWRkeDUzMCBhZGQgMCAxMjM0NTY3ODkwMSAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1MzEgYWRkIDEyMzQ1Njc4OTYgIDAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1MzIgYWRkIDAgMTIzNDU2Nzg5NiAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxNQorLS0gc3RpbGwgY2hlY2tpbmcKK2FkZHg1NDEgYWRkIDEyMzQ1Njc4MDAwIDAgLT4gMTIzNDU2NzgwMDAKK2FkZHg1NDIgYWRkIDAgMTIzNDU2NzgwMDAgLT4gMTIzNDU2NzgwMDAKK2FkZHg1NDMgYWRkIDEyMzQ1Njc4MDAgIDAgLT4gMTIzNDU2NzgwMAorYWRkeDU0NCBhZGQgMCAxMjM0NTY3ODAwICAtPiAxMjM0NTY3ODAwCithZGR4NTQ1IGFkZCAxMjM0NTY3ODkwICAwIC0+IDEyMzQ1Njc4OTAKK2FkZHg1NDYgYWRkIDAgMTIzNDU2Nzg5MCAgLT4gMTIzNDU2Nzg5MAorYWRkeDU0NyBhZGQgMTIzNDU2Nzg5MSAgMCAtPiAxMjM0NTY3ODkxCithZGR4NTQ4IGFkZCAwIDEyMzQ1Njc4OTEgIC0+IDEyMzQ1Njc4OTEKK2FkZHg1NDkgYWRkIDEyMzQ1Njc4OTAxIDAgLT4gMTIzNDU2Nzg5MDEKK2FkZHg1NTAgYWRkIDAgMTIzNDU2Nzg5MDEgLT4gMTIzNDU2Nzg5MDEKK2FkZHg1NTEgYWRkIDEyMzQ1Njc4OTYgIDAgLT4gMTIzNDU2Nzg5NgorYWRkeDU1MiBhZGQgMCAxMjM0NTY3ODk2ICAtPiAxMjM0NTY3ODk2CisKKy0tIHZlcmlmeSBhIHF1ZXJ5CitwcmVjaXNpb246ICAgIDE2CittYXhFeHBvbmVudDogKzM5NAorbWluRXhwb25lbnQ6IC0zOTMKK3JvdW5kaW5nOiAgICAgZG93bgorYWRkeDU2MSBhZGQgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1NjIgYWRkICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAorLS0gYW5kIHVzaW5nIGRlY2ltYWw2NCBib3VuZHMgKHNlZSBhbHNvIGRkYWRkLmRlY1Rlc3QpCitwcmVjaXNpb246ICAgIDE2CittYXhFeHBvbmVudDogKzM4NAorbWluRXhwb25lbnQ6IC0zODMKK3JvdW5kaW5nOiAgICAgZG93bgorYWRkeDU2MyBhZGQgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1NjQgYWRkICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZAorCisKKy0tIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgd2l0aCBleHRyZW1lIHJvdW5kaW5nCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6IGhhbGZfdXAKK2FkZHg2MDEgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorYWRkeDYwMiBhZGQgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCithZGR4NjAzIGFkZCAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorYWRkeDYwNCBhZGQgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworYWRkeDYwNSBhZGQgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2FkZHg2MDYgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2FkZHg2MDcgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorYWRkeDYxMSBhZGQgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCithZGR4NjEyIGFkZCAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2FkZHg2MTMgYWRkIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCithZGR4NjE0IGFkZCAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCithZGR4NjE1IGFkZCAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorYWRkeDYxNiBhZGQgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorYWRkeDYxNyBhZGQgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCithZGR4NjIxIGFkZCAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2FkZHg2MjIgYWRkIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorYWRkeDYyMyBhZGQgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2FkZHg2MjQgYWRkIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2FkZHg2MjUgYWRkIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCithZGR4NjI2IGFkZCAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCithZGR4NjI3IGFkZCAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2FkZHg2MzEgYWRkIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorYWRkeDYzMiBhZGQgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCithZGR4NjMzIGFkZCAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorYWRkeDYzNCBhZGQgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworYWRkeDYzNSBhZGQgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2FkZHg2MzYgYWRkIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2FkZHg2MzcgYWRkIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorYWRkeDY0MSBhZGQgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCithZGR4NjQyIGFkZCAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2FkZHg2NDMgYWRkIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCithZGR4NjQ0IGFkZCAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCithZGR4NjQ1IGFkZCAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorYWRkeDY0NiBhZGQgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorYWRkeDY0NyBhZGQgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCithZGR4NjUxIGFkZCAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2FkZHg2NTIgYWRkIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorYWRkeDY1MyBhZGQgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2FkZHg2NTQgYWRkIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2FkZHg2NTUgYWRkIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCithZGR4NjU2IGFkZCAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCithZGR4NjU3IGFkZCAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbG9uZyBvcGVyYW5kIHRyaWFuZ2xlCityb3VuZGluZzogaGFsZl91cAorcHJlY2lzaW9uOiAgMzcKK2FkZHg2NjAgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNDUzOAorcHJlY2lzaW9uOiAgMzYKK2FkZHg2NjEgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNDU0ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDM1CithZGR4NjYyIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzNAorYWRkeDY2MyBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM1ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzMKK2FkZHg2NjQgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMyCithZGR4NjY1IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzMQorYWRkeDY2NiBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE1ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzAKK2FkZHg2NjcgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI5CithZGR4NjY4IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyOAorYWRkeDY2OSBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjcKK2FkZHg2NzAgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjM0ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI2CithZGR4NjcxIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyNQorYWRkeDY3MiBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjQKK2FkZHg2NzMgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIzCithZGR4Njc0IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyMgorYWRkeDY3NSBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM5ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjEKK2FkZHg2NzYgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzY0ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIwCithZGR4Njc3IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxOQorYWRkeDY3OCBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDI0ICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTgKK2FkZHg2NzkgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE3CithZGR4NjgwIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxNgorYWRkeDY4MSBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTUKK2FkZHg2ODIgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE0CithZGR4NjgzIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxMworYWRkeDY4NCBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTIKK2FkZHg2ODUgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDExCithZGR4Njg2IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxMAorYWRkeDY4NyBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3NDE3RSsxMCAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDkKK2FkZHg2ODggYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzQyRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA4CithZGR4Njg5IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNworYWRkeDY5MCBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNgorYWRkeDY5MSBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTJFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA1CithZGR4NjkyIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNAorYWRkeDY5MyBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMworYWRkeDY5NCBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODVFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyCithZGR4Njk1IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMQorYWRkeDY5NiBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDFFKzExICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcm91bmRpbmc6IGhhbGZfdXAKK3ByZWNpc2lvbjogICA5CisKK2FkZHg3MDEgYWRkIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCithZGR4NzAyIGFkZCAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2FkZHg3MDMgYWRkIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorYWRkeDcwNCBhZGQgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2FkZHg3MTAgYWRkIDBFKzMgIDAwLjAwICAtPiAwLjAwCithZGR4NzExIGFkZCAwRSszICAwMC4wICAgLT4gMC4wCithZGR4NzEyIGFkZCAwRSszICAwMC4gICAgLT4gMAorYWRkeDcxMyBhZGQgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2FkZHg3MTQgYWRkIDBFKzMgIDAwLkUrMiAtPiAwRSsyCithZGR4NzE1IGFkZCAwRSszICAwMC5FKzMgLT4gMEUrMworYWRkeDcxNiBhZGQgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2FkZHg3MTcgYWRkIDBFKzMgIDAwLkUrNSAtPiAwRSszCithZGR4NzE4IGFkZCAwRSszICAtMDAuMCAgIC0+IDAuMAorYWRkeDcxOSBhZGQgMEUrMyAgLTAwLiAgICAtPiAwCithZGR4NzMxIGFkZCAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworYWRkeDcyMCBhZGQgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2FkZHg3MjEgYWRkIDAwLjAgICAwRSszICAtPiAwLjAKK2FkZHg3MjIgYWRkIDAwLiAgICAwRSszICAtPiAwCithZGR4NzIzIGFkZCAwMC5FKzEgMEUrMyAgLT4gMEUrMQorYWRkeDcyNCBhZGQgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2FkZHg3MjUgYWRkIDAwLkUrMyAwRSszICAtPiAwRSszCithZGR4NzI2IGFkZCAwMC5FKzQgMEUrMyAgLT4gMEUrMworYWRkeDcyNyBhZGQgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2FkZHg3MjggYWRkIC0wMC4wMCAwRSszICAtPiAwLjAwCithZGR4NzI5IGFkZCAtMDAuMCAgMEUrMyAgLT4gMC4wCithZGR4NzMwIGFkZCAtMDAuICAgMEUrMyAgLT4gMAorCithZGR4NzMyIGFkZCAgMCAgICAgMCAgICAgLT4gIDAKK2FkZHg3MzMgYWRkICAwICAgIC0wICAgICAtPiAgMAorYWRkeDczNCBhZGQgLTAgICAgIDAgICAgIC0+ICAwCithZGR4NzM1IGFkZCAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQorCithZGR4NzM2IGFkZCAgMSAgICAtMSAgICAgLT4gIDAKK2FkZHg3MzcgYWRkIC0xICAgIC0xICAgICAtPiAtMgorYWRkeDczOCBhZGQgIDEgICAgIDEgICAgIC0+ICAyCithZGR4NzM5IGFkZCAtMSAgICAgMSAgICAgLT4gIDAKKworYWRkeDc0MSBhZGQgIDAgICAgLTEgICAgIC0+IC0xCithZGR4NzQyIGFkZCAtMCAgICAtMSAgICAgLT4gLTEKK2FkZHg3NDMgYWRkICAwICAgICAxICAgICAtPiAgMQorYWRkeDc0NCBhZGQgLTAgICAgIDEgICAgIC0+ICAxCithZGR4NzQ1IGFkZCAtMSAgICAgMCAgICAgLT4gLTEKK2FkZHg3NDYgYWRkIC0xICAgIC0wICAgICAtPiAtMQorYWRkeDc0NyBhZGQgIDEgICAgIDAgICAgIC0+ICAxCithZGR4NzQ4IGFkZCAgMSAgICAtMCAgICAgLT4gIDEKKworYWRkeDc1MSBhZGQgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2FkZHg3NTIgYWRkIC0wLjAgIC0xICAgICAtPiAtMS4wCithZGR4NzUzIGFkZCAgMC4wICAgMSAgICAgLT4gIDEuMAorYWRkeDc1NCBhZGQgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2FkZHg3NTUgYWRkIC0xLjAgICAwICAgICAtPiAtMS4wCithZGR4NzU2IGFkZCAtMS4wICAtMCAgICAgLT4gLTEuMAorYWRkeDc1NyBhZGQgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2FkZHg3NTggYWRkICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2FkZHg3NjEgYWRkICAwICAgIC0xLjAgICAtPiAtMS4wCithZGR4NzYyIGFkZCAtMCAgICAtMS4wICAgLT4gLTEuMAorYWRkeDc2MyBhZGQgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2FkZHg3NjQgYWRkIC0wICAgICAxLjAgICAtPiAgMS4wCithZGR4NzY1IGFkZCAtMSAgICAgMC4wICAgLT4gLTEuMAorYWRkeDc2NiBhZGQgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2FkZHg3NjcgYWRkICAxICAgICAwLjAgICAtPiAgMS4wCithZGR4NzY4IGFkZCAgMSAgICAtMC4wICAgLT4gIDEuMAorCithZGR4NzcxIGFkZCAgMC4wICAtMS4wICAgLT4gLTEuMAorYWRkeDc3MiBhZGQgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2FkZHg3NzMgYWRkICAwLjAgICAxLjAgICAtPiAgMS4wCithZGR4Nzc0IGFkZCAtMC4wICAgMS4wICAgLT4gIDEuMAorYWRkeDc3NSBhZGQgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2FkZHg3NzYgYWRkIC0xLjAgIC0wLjAgICAtPiAtMS4wCithZGR4Nzc3IGFkZCAgMS4wICAgMC4wICAgLT4gIDEuMAorYWRkeDc3OCBhZGQgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2FkZHg3ODAgYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg3ODEgYWRkIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2FkZHg3ODIgYWRkIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2FkZHg3ODMgYWRkIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2FkZHg3ODQgYWRkIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2FkZHg3ODUgYWRkIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2FkZHg3ODYgYWRkIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2FkZHg3ODcgYWRkIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg3ODggYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg3ODkgYWRkIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg3OTAgYWRkIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg3OTEgYWRkICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg3OTIgYWRkICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg3OTMgYWRkICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg3OTQgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCithZGR4ODAwIGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4MDEgYWRkICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2FkZHg4MDIgYWRkICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2FkZHg4MDMgYWRkICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2FkZHg4MDQgYWRkICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2FkZHg4MDUgYWRkICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2FkZHg4MDYgYWRkICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2FkZHg4MDcgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg4MDggYWRkIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg4MDkgYWRkIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDgxMCBhZGQgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDgxMSBhZGQgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDgxMiBhZGQgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDgxMyBhZGQgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDgxNCBhZGQgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDgxNSBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCithZGR4ODIxIGFkZCAgTmFOIC1JbmYgICAgLT4gIE5hTgorYWRkeDgyMiBhZGQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2FkZHg4MjMgYWRkICBOYU4gLTEgICAgICAtPiAgTmFOCithZGR4ODI0IGFkZCAgTmFOIC0wICAgICAgLT4gIE5hTgorYWRkeDgyNSBhZGQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2FkZHg4MjYgYWRkICBOYU4gIDEgICAgICAtPiAgTmFOCithZGR4ODI3IGFkZCAgTmFOICAxMDAwICAgLT4gIE5hTgorYWRkeDgyOCBhZGQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2FkZHg4MjkgYWRkICBOYU4gIE5hTiAgICAtPiAgTmFOCithZGR4ODMwIGFkZCAtSW5mICBOYU4gICAgLT4gIE5hTgorYWRkeDgzMSBhZGQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2FkZHg4MzIgYWRkIC0xICAgIE5hTiAgICAtPiAgTmFOCithZGR4ODMzIGFkZCAtMCAgICBOYU4gICAgLT4gIE5hTgorYWRkeDgzNCBhZGQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2FkZHg4MzUgYWRkICAxICAgIE5hTiAgICAtPiAgTmFOCithZGR4ODM2IGFkZCAgMTAwMCBOYU4gICAgLT4gIE5hTgorYWRkeDgzNyBhZGQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworYWRkeDg0MSBhZGQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODQyIGFkZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NDMgYWRkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg0NCBhZGQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODQ1IGFkZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NDYgYWRkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg0NyBhZGQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODQ4IGFkZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NDkgYWRkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg1MCBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODUxIGFkZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NTIgYWRkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg1MyBhZGQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODU0IGFkZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NTUgYWRkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg1NiBhZGQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODU3IGFkZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NTggYWRkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg1OSBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2FkZHg4NjEgYWRkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorYWRkeDg2MiBhZGQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCithZGR4ODYzIGFkZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2FkZHg4NjQgYWRkICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorYWRkeDg2NSBhZGQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CithZGR4ODY2IGFkZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2FkZHg4NjcgYWRkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorYWRkeDg2OCBhZGQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CithZGR4ODY5IGFkZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCithZGR4ODcxIGFkZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg3MiBhZGQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NzMgYWRkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODc0IGFkZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg3NSBhZGQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NzYgYWRkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODc3IGFkZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg3OCBhZGQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NzkgYWRkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODgwIGFkZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg4MSBhZGQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4ODIgYWRkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2FkZHg4ODMgYWRkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODg0IGFkZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCithZGR4ODg1IGFkZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdmVyZmxvdywgdW5kZXJmbG93IGFuZCBzdWJub3JtYWwgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDkKK2FkZHg4OTAgYWRkIDFFKzk5OTk5OTk5OSAgICAgOUUrOTk5OTk5OTk5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4ODkxIGFkZCA5RSs5OTk5OTk5OTkgICAgIDFFKzk5OTk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDg5MiBhZGQgLTEuMUUtOTk5OTk5OTk5ICAxRS05OTk5OTk5OTkgICAtPiAtMUUtMTAwMDAwMDAwMCAgICBTdWJub3JtYWwKK2FkZHg4OTMgYWRkIDFFLTk5OTk5OTk5OSAgICAtMS4xZS05OTk5OTk5OTkgLT4gLTFFLTEwMDAwMDAwMDAgICAgU3Vibm9ybWFsCithZGR4ODk0IGFkZCAtMS4wMDAxRS05OTk5OTk5OTkgIDFFLTk5OTk5OTk5OSAgIC0+IC0xRS0xMDAwMDAwMDAzIFN1Ym5vcm1hbAorYWRkeDg5NSBhZGQgMUUtOTk5OTk5OTk5ICAgIC0xLjAwMDFlLTk5OTk5OTk5OSAtPiAtMUUtMTAwMDAwMDAwMyBTdWJub3JtYWwKK2FkZHg4OTYgYWRkIC0xRSs5OTk5OTk5OTkgICAtOUUrOTk5OTk5OTk5ICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDg5NyBhZGQgLTlFKzk5OTk5OTk5OSAgIC0xRSs5OTk5OTk5OTkgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4ODk4IGFkZCArMS4xRS05OTk5OTk5OTkgLTFFLTk5OTk5OTk5OSAgIC0+IDFFLTEwMDAwMDAwMDAgICAgU3Vibm9ybWFsCithZGR4ODk5IGFkZCAtMUUtOTk5OTk5OTk5ICAgKzEuMWUtOTk5OTk5OTk5IC0+IDFFLTEwMDAwMDAwMDAgICAgU3Vibm9ybWFsCithZGR4OTAwIGFkZCArMS4wMDAxRS05OTk5OTk5OTkgLTFFLTk5OTk5OTk5OSAgIC0+IDFFLTEwMDAwMDAwMDMgU3Vibm9ybWFsCithZGR4OTAxIGFkZCAtMUUtOTk5OTk5OTk5ICAgKzEuMDAwMWUtOTk5OTk5OTk5IC0+IDFFLTEwMDAwMDAwMDMgU3Vibm9ybWFsCithZGR4OTAyIGFkZCAtMUUrOTk5OTk5OTk5ICAgKzlFKzk5OTk5OTk5OSAgIC0+ICA4RSs5OTk5OTk5OTkKK2FkZHg5MDMgYWRkIC05RSs5OTk5OTk5OTkgICArMUUrOTk5OTk5OTk5ICAgLT4gLThFKzk5OTk5OTk5OQorCitwcmVjaXNpb246IDMKK2FkZHg5MDQgYWRkICAgICAgMCAtOS45OTlFKzk5OTk5OTk5OSAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2FkZHg5MDUgYWRkICAgICAgICAtOS45OTlFKzk5OTk5OTk5OSAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2FkZHg5MDYgYWRkICAgICAgMCAgOS45OTlFKzk5OTk5OTk5OSAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2FkZHg5MDcgYWRkICAgICAgICAgOS45OTlFKzk5OTk5OTk5OSAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorYWRkeDkxMCBhZGQgIDEuMDBFLTk5OSAgIDAgICAgLT4gICAxLjAwRS05OTkKK2FkZHg5MTEgYWRkICAwLjFFLTk5OSAgICAwICAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbAorYWRkeDkxMiBhZGQgIDAuMTBFLTk5OSAgIDAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsCithZGR4OTEzIGFkZCAgMC4xMDBFLTk5OSAgMCAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorYWRkeDkxNCBhZGQgIDAuMDFFLTk5OSAgIDAgICAgLT4gICAxRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbgorYWRkeDkxNSBhZGQgIDAuOTk5RS05OTkgIDAgICAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHg5MTYgYWRkICAwLjA5OUUtOTk5ICAwICAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4OTE3IGFkZCAgMC4wMDlFLTk5OSAgMCAgICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDkxOCBhZGQgIDAuMDAxRS05OTkgIDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDkxOSBhZGQgIDAuMDAwOUUtOTk5IDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDkyMCBhZGQgIDAuMDAwMUUtOTk5IDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCithZGR4OTMwIGFkZCAtMS4wMEUtOTk5ICAgMCAgICAtPiAgLTEuMDBFLTk5OQorYWRkeDkzMSBhZGQgLTAuMUUtOTk5ICAgIDAgICAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCithZGR4OTMyIGFkZCAtMC4xMEUtOTk5ICAgMCAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwKK2FkZHg5MzMgYWRkIC0wLjEwMEUtOTk5ICAwICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCithZGR4OTM0IGFkZCAtMC4wMUUtOTk5ICAgMCAgICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCithZGR4OTM1IGFkZCAtMC45OTlFLTk5OSAgMCAgICAtPiAgLTEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDkzNiBhZGQgLTAuMDk5RS05OTkgIDAgICAgLT4gIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHg5MzcgYWRkIC0wLjAwOUUtOTk5ICAwICAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4OTM4IGFkZCAtMC4wMDFFLTk5OSAgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4OTM5IGFkZCAtMC4wMDA5RS05OTkgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4OTQwIGFkZCAtMC4wMDAxRS05OTkgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIHNvbWUgbm9uLXplcm8gc3Vibm9ybWFsIGFkZHMKK2FkZHg5NTAgYWRkICAxLjAwRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMS4xMEUtOTk5CithZGR4OTUxIGFkZCAgMC4xRS05OTkgICAgIDAuMUUtOTk5ICAtPiAgIDJFLTEwMDAgICAgU3Vibm9ybWFsCithZGR4OTUyIGFkZCAgMC4xMEUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDIuMEUtMTAwMCAgU3Vibm9ybWFsCithZGR4OTUzIGFkZCAgMC4xMDBFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDIuMEUtMTAwMCAgU3Vibm9ybWFsIFJvdW5kZWQKK2FkZHg5NTQgYWRkICAwLjAxRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMS4xRS0xMDAwICBTdWJub3JtYWwKK2FkZHg5NTUgYWRkICAwLjk5OUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4xMEUtOTk5ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5NTYgYWRkICAwLjA5OUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDk1NyBhZGQgIDAuMDA5RS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjFFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4OTU4IGFkZCAgMC4wMDFFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDEuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHg5NTkgYWRkICAwLjAwMDlFLTk5OSAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDk2MCBhZGQgIDAuMDAwMUUtOTk5ICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CistLSBuZWdhdGl2ZXMuLi4KK2FkZHg5NjEgYWRkICAxLjAwRS05OTkgICAtMC4xRS05OTkgIC0+ICAgOS4wRS0xMDAwICBTdWJub3JtYWwKK2FkZHg5NjIgYWRkICAwLjFFLTk5OSAgICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMAorYWRkeDk2MyBhZGQgIDAuMTBFLTk5OSAgIC0wLjFFLTk5OSAgLT4gICAwRS0xMDAxCithZGR4OTY0IGFkZCAgMC4xMDBFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDEgICAgQ2xhbXBlZAorYWRkeDk2NSBhZGQgIDAuMDFFLTk5OSAgIC0wLjFFLTk5OSAgLT4gICAtOUUtMTAwMSAgIFN1Ym5vcm1hbAorYWRkeDk2NiBhZGQgIDAuOTk5RS05OTkgIC0wLjFFLTk5OSAgLT4gICA5LjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4OTY3IGFkZCAgMC4wOTlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDk2OCBhZGQgIDAuMDA5RS05OTkgIC0wLjFFLTk5OSAgLT4gICAtOUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4OTY5IGFkZCAgMC4wMDFFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHg5NzAgYWRkICAwLjAwMDlFLTk5OSAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDk3MSBhZGQgIDAuMDAwMUUtOTk5IC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIHNvbWUgJ3JlYWwnIG51bWJlcnMKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitwcmVjaXNpb246IDgKK2FkZHg1NjYgYWRkIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTkwNkUtMzg0IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwcmVjaXNpb246IDcKK2FkZHg1NjcgYWRkIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTkxRS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK3ByZWNpc2lvbjogNgorYWRkeDU2OCBhZGQgOTk5OTkwNjE3MzVFLTM5NCAgMEUtMzk0IC0+IDkuOTk5OUUtMzg0IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCisKKy0tIG5vdyB0aGUgY2FzZSB3aGVyZSB3ZSBjYW4gZ2V0IHVuZGVyZmxvdyBidXQgdGhlIHJlc3VsdCBpcyBub3JtYWwKKy0tIFtub3RlIHRoaXMgY2FuJ3QgaGFwcGVuIGlmIHRoZSBvcGVyYW5kcyBhcmUgYWxzbyBib3VuZGVkLCBhcyB3ZQorLS0gY2Fubm90IHJlcHJlc2VudCAxRS0zOTksIGZvciBleGFtcGxlXQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworYWRkeDU3MSBhZGQgICAgICAgMUUtMzgzICAgICAgIDAgIC0+IDFFLTM4MworYWRkeDU3MiBhZGQgICAgICAgMUUtMzg0ICAgICAgIDAgIC0+IDFFLTM4NCAgIFN1Ym5vcm1hbAorYWRkeDU3MyBhZGQgICAgICAgMUUtMzgzICAxRS0zODQgIC0+IDEuMUUtMzgzCithZGR4NTc0IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM4NCAgLT4gICA5RS0zODQgU3Vibm9ybWFsCisKKy0tIEhlcmUgd2UgZXhwbG9yZSB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgorYWRkeDU3NSBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2FkZHg1NzYgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCithZGR4NTc3IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCithZGR4NTc4IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCithZGR4NTc5IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCithZGR4NTgwIHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCisKKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQorcHJlY2lzaW9uOiAgIDcKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTYKK21pbkV4cG9uZW50OiAtOTUKK2FkZHg5NzIgYXBwbHkgICA5Ljk5OTk5OUUrOTYgICAgICAgICAtPiA5Ljk5OTk5OUUrOTYKK2FkZHg5NzMgYWRkICAgICA5Ljk5OTk5OUUrOTYgIDEgICAgICAtPiA5Ljk5OTk5OUUrOTYgSW5leGFjdCBSb3VuZGVkCithZGR4OTc0IGFkZCAgICAgIDk5OTk5OTlFKzkwICAxICAgICAgLT4gOS45OTk5OTlFKzk2IEluZXhhY3QgUm91bmRlZAorYWRkeDk3NSBhZGQgICAgICA5OTk5OTk5RSs5MCAgMUUrOTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk3NiBhZGQgICAgICA5OTk5OTk5RSs5MCAgOUUrODkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk3NyBhZGQgICAgICA5OTk5OTk5RSs5MCAgOEUrODkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk3OCBhZGQgICAgICA5OTk5OTk5RSs5MCAgN0UrODkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk3OSBhZGQgICAgICA5OTk5OTk5RSs5MCAgNkUrODkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk4MCBhZGQgICAgICA5OTk5OTk5RSs5MCAgNUUrODkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk4MSBhZGQgICAgICA5OTk5OTk5RSs5MCAgNEUrODkgIC0+IDkuOTk5OTk5RSs5NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5ODIgYWRkICAgICAgOTk5OTk5OUUrOTAgIDNFKzg5ICAtPiA5Ljk5OTk5OUUrOTYgSW5leGFjdCBSb3VuZGVkCithZGR4OTgzIGFkZCAgICAgIDk5OTk5OTlFKzkwICAyRSs4OSAgLT4gOS45OTk5OTlFKzk2IEluZXhhY3QgUm91bmRlZAorYWRkeDk4NCBhZGQgICAgICA5OTk5OTk5RSs5MCAgMUUrODkgIC0+IDkuOTk5OTk5RSs5NiBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDk4NSBhcHBseSAgLTkuOTk5OTk5RSs5NiAgICAgICAgIC0+IC05Ljk5OTk5OUUrOTYKK2FkZHg5ODYgYWRkICAgIC05Ljk5OTk5OUUrOTYgLTEgICAgICAtPiAtOS45OTk5OTlFKzk2IEluZXhhY3QgUm91bmRlZAorYWRkeDk4NyBhZGQgICAgIC05OTk5OTk5RSs5MCAtMSAgICAgIC0+IC05Ljk5OTk5OUUrOTYgSW5leGFjdCBSb3VuZGVkCithZGR4OTg4IGFkZCAgICAgLTk5OTk5OTlFKzkwIC0xRSs5MCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk4OSBhZGQgICAgIC05OTk5OTk5RSs5MCAtOUUrODkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5OTAgYWRkICAgICAtOTk5OTk5OUUrOTAgLThFKzg5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4OTkxIGFkZCAgICAgLTk5OTk5OTlFKzkwIC03RSs4OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk5MiBhZGQgICAgIC05OTk5OTk5RSs5MCAtNkUrODkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5OTMgYWRkICAgICAtOTk5OTk5OUUrOTAgLTVFKzg5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4OTk0IGFkZCAgICAgLTk5OTk5OTlFKzkwIC00RSs4OSAgLT4gLTkuOTk5OTk5RSs5NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5OTUgYWRkICAgICAtOTk5OTk5OUUrOTAgLTNFKzg5ICAtPiAtOS45OTk5OTlFKzk2IEluZXhhY3QgUm91bmRlZAorYWRkeDk5NiBhZGQgICAgIC05OTk5OTk5RSs5MCAtMkUrODkgIC0+IC05Ljk5OTk5OUUrOTYgSW5leGFjdCBSb3VuZGVkCithZGR4OTk3IGFkZCAgICAgLTk5OTk5OTlFKzkwIC0xRSs4OSAgLT4gLTkuOTk5OTk5RSs5NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK3ByZWNpc2lvbjogICA1CittYXhleHBvbmVudDogNzkKK21pbmV4cG9uZW50OiAtNzkKKy0tIEFkZDogbGhzIGFuZCByaHMgMAorYWRkeDEwMDEgYWRkICAgICAgIDEuNTI0NDRFLTgwIDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAwMiBhZGQgICAgICAgMS41MjQ0NUUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMDAzIGFkZCAgICAgICAxLjUyNDQ2RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMDQgYWRkICAgICAgIDAgMS41MjQ0NEUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAwNSBhZGQgICAgICAgMCAxLjUyNDQ1RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMDA2IGFkZCAgICAgICAwIDEuNTI0NDZFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBBZGQ6IGxocyA+PiByaHMgYW5kIHZpY2UgdmVyc2EKK2FkZHgxMDExIGFkZCAgICAgICAxLjUyNDQ0RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAxMiBhZGQgICAgICAgMS41MjQ0NUUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMTMgYWRkICAgICAgIDEuNTI0NDZFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMDE0IGFkZCAgICAgICAxRS0xMDAgMS41MjQ0NEUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAxNSBhZGQgICAgICAgMUUtMTAwIDEuNTI0NDVFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMTYgYWRkICAgICAgIDFFLTEwMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gQWRkOiBsaHMgKyByaHMgYWRkaXRpb24gY2FycmllZCBvdXQKK2FkZHgxMDIxIGFkZCAgICAgICAxLjUyNDQzRS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAyMiBhZGQgICAgICAgMS41MjQ0NEUtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMjMgYWRkICAgICAgIDEuNTI0NDVFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMDI0IGFkZCAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0M0UtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAyNSBhZGQgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDRFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMjYgYWRkICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQ1RS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCitwcmVjaXNpb246ICAgIDE2CittYXhFeHBvbmVudDogKzM4NAorbWluRXhwb25lbnQ6IC0zODMKK3JvdW5kaW5nOiAgICAgZG93bgorCithZGR4MTEwMCBhZGQgMWUrMiAtMWUtMzgzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorYWRkeDExMDEgYWRkIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTEwMyBhZGQgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTEwNCBhZGQgMWUtMSAtMWUtMzgzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMDUgYWRkIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTEwNiBhZGQgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTEwNyBhZGQgMWUtNCAtMWUtMzgzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMDggYWRkIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTEwOSBhZGQgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCithZGR4MTExMCBhZGQgLTFlKzIgKzFlLTM4MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTExIGFkZCAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTEzIGFkZCAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTExNCBhZGQgLTFlLTEgKzFlLTM4MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTE1IGFkZCAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTE2IGFkZCAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTExNyBhZGQgLTFlLTQgKzFlLTM4MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTE4IGFkZCAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTE5IGFkZCAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTIwIGFkZCArMWUtMzgzIC0xZSsyICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorYWRkeDExMjEgYWRkICsxZS0zODMgLTFlKzEgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMjMgYWRkICsxZS0zODMgICAgLTEgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTI0IGFkZCArMWUtMzgzIC0xZS0xICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMjUgYWRkICsxZS0zODMgLTFlLTIgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMjYgYWRkICsxZS0zODMgLTFlLTMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTI3IGFkZCArMWUtMzgzIC0xZS00ICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMjggYWRkICsxZS0zODMgLTFlLTUgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMjkgYWRkICsxZS0zODMgLTFlLTYgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGRvd24KK3ByZWNpc2lvbjogICAgNworbWF4RXhwb25lbnQ6ICs5NgorbWluRXhwb25lbnQ6IC05NQorYWRkeDExMzAgYWRkICAgMSAgICAgICAgICAgIC0xZS0yMDAgIC0+IDAuOTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CistLSBzdWJub3JtYWwgYm91bmRhcnkKK2FkZHgxMTMxIGFkZCAgIDEuMDAwMDAwRS05NCAgLTFlLTIwMCAgLT4gIDkuOTk5OTk5RS05NSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTEzMiBhZGQgICAxLjAwMDAwMUUtOTUgIC0xZS0yMDAgIC0+ICAxLjAwMDAwMEUtOTUgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMzMgYWRkICAgMS4wMDAwMDBFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OUUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTEzNCBhZGQgICAwLjk5OTk5OUUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5OTk4RS05NiAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMTM1IGFkZCAgIDAuMDAxMDAwRS05NSAgLTFlLTIwMCAgLT4gIDkuOTlFLTk5ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDExMzYgYWRkICAgMC4wMDA5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OEUtOTkgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTEzNyBhZGQgICAxLjAwMDAwMEUtOTUgIC0xZS0xMDEgIC0+ICA5Ljk5OTk5RS05NiAgU3Vibm9ybWFsCithZGR4MTEzOCBhZGQgICAgICAxMDAwMEUtMTAxIC0xZS0yMDAgIC0+ICA5Ljk5OUUtOTggIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTEzOSBhZGQgICAgICAgMTAwMEUtMTAxIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTE0MCBhZGQgICAgICAgIDEwMEUtMTAxIC0xZS0yMDAgIC0+ICA5LjlFLTEwMCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTE0MSBhZGQgICAgICAgICAxMEUtMTAxIC0xZS0yMDAgIC0+ICA5RS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTE0MiBhZGQgICAgICAgICAgMUUtMTAxIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxMTQzIGFkZCAgICAgICAgICAwRS0xMDEgLTFlLTIwMCAgLT4gLTBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDExNDQgYWRkICAgICAgICAgIDFFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK2FkZHgxMTUxIGFkZCAgICAgIDEwMDAwRS0xMDIgLTFlLTIwMCAgLT4gIDkuOTlFLTk5ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDExNTIgYWRkICAgICAgIDEwMDBFLTEwMiAtMWUtMjAwICAtPiAgOS45RS0xMDAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTE1MyBhZGQgICAgICAgIDEwMEUtMTAyIC0xZS0yMDAgIC0+ICA5RS0xMDEgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDExNTQgYWRkICAgICAgICAgMTBFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTE1NSBhZGQgICAgICAgICAgMUUtMTAyIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxMTU2IGFkZCAgICAgICAgICAwRS0xMDIgLTFlLTIwMCAgLT4gLTBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDExNTcgYWRkICAgICAgICAgIDFFLTEwMyAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK2FkZHgxMTYwIGFkZCAgICAgICAgMTAwRS0xMDUgLTFlLTEwMSAgLT4gLTBFLTEwMSBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTE2MSBhZGQgICAgICAgIDEwMEUtMTA1IC0xZS0yMDEgIC0+ICAwRS0xMDEgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQorcHJlY2lzaW9uOiAgIDE1Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworYWRkeDEyMDAgYWRkIDFFMTUgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjAxIGFkZCAxRTE1ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkCithZGR4MTIxMCBhZGQgMUUxNSAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMTEgYWRkIDFFMTUgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjEyIGFkZCAxRTE1ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIxMyBhZGQgMUUxNSAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMTQgYWRkIDFFMTUgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjE1IGFkZCAxRTE1ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIxNiBhZGQgMUUxNSAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMTcgYWRkIDFFMTUgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjE4IGFkZCAxRTE1ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIxOSBhZGQgMUUxNSAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMjAgYWRkIDFFMTUgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjIxIGFkZCAxRTE1ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIyMiBhZGQgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMjMgYWRkIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjI0IGFkZCAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIyNSBhZGQgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZAorYWRkeDEyMzAgYWRkIDFFMTUgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAgIDE2CisKK2FkZHgxMzAwIGFkZCAxRTE2ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMTAgYWRkIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMxMSBhZGQgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzEyIGFkZCAxRTE2ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMTMgYWRkIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMxNCBhZGQgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzE1IGFkZCAxRTE2ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMTYgYWRkIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMxNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzE4IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMTkgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMyMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzIxIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMjIgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMyMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzI0IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMjUgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMyNiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzI3IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMjggYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMyOSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzMwIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMzEgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMzMiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzMzIGFkZCAxRTE2ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMzQgYWRkIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMzNSBhZGQgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzM2IGFkZCAxRTE2ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMzcgYWRkIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMzOCBhZGQgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzM5IGFkZCAxRTE2ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCithZGR4MTM0MCBhZGQgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzQxIGFkZCAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCithZGR4MTM0OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM1OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM2MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM2MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM2MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM2MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM2NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM2NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM2NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM2OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM2OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM3OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM4OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM5MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM5MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM5MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM5MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM5NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM5NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTM5NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCitwcmVjaXNpb246ICAgMTUKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCithZGR4MTQwMCBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4yMzQ1Njc4OTAxMjM0NQorYWRkeDE0MDEgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQwMiBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQwMyBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0MDQgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQwNSBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQwNiBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0MDcgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTcKK2FkZHgxNDA4IGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS04CithZGR4MTQwOSBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtOQorYWRkeDE0MTAgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTEwCithZGR4MTQxMSBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTEKK2FkZHgxNDEyIGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMgorYWRkeDE0MTMgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTEzCithZGR4MTQxNCBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTQKK2FkZHgxNDE1IGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNQorYWRkeDE0MTYgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE2CithZGR4MTQxNyBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTcKK2FkZHgxNDE4IGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xOAorYWRkeDE0MTkgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHByZWNpc2lvbiAxNi4uCitwcmVjaXNpb246ICAgMTYKK2FkZHgxNDIwIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDIxIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQyMiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDIzIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDI0IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQyNSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDI2IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDI3IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2FkZHgxNDI4IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2FkZHgxNDI5IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2FkZHgxNDMwIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCithZGR4MTQzMSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorYWRkeDE0MzIgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2FkZHgxNDMzIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCithZGR4MTQzNCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorYWRkeDE0MzUgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2FkZHgxNDM2IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CithZGR4MTQzNyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworYWRkeDE0MzggYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2FkZHgxNDM5IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2FkZHgxNDQwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NDEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NDIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDQzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NDQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NDUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDQ2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NDcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03CithZGR4MTQ0OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2FkZHgxNDQ5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorYWRkeDE0NTAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAorYWRkeDE0NTEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorYWRkeDE0NTIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorYWRkeDE0NTMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMworYWRkeDE0NTQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorYWRkeDE0NTUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorYWRkeDE0NTYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgorYWRkeDE0NTcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworYWRkeDE0NTggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorYWRkeDE0NTkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCBFcyBvbiB0aGUgMAorYWRkeDE0NjAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDYxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ2MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NjMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDY0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ2NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NjYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDY3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ2OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NjkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDcwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ3MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NzIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDczIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ3NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NzUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2FkZHgxNDc2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2FkZHgxNDc3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2FkZHgxNDc4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2FkZHgxNDc5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHgxNTAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4MTUwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorYWRkeDE1MDQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTUwNSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTA2IGFkZCAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1MDcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4MTUxMSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTEyIGFkZCAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1MTMgYWRkICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTUxNCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2FkZHgxNTE1IGFkZCAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1MTYgYWRkIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTUxNyBhZGQgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTE4IGFkZCAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4MTUyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CithZGR4MTUyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHgxNTI0IGFkZCAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1MjUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTUyNiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTI3IGFkZCAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworYWRkeDE1MzEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTUzMiBhZGQgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTMzIGFkZCAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1MzQgYWRkIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCithZGR4MTUzNSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTM2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1MzcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTUzOCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworYWRkeDE1NDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4MTU0MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTQyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1NDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4MTU0NCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTQ1IGFkZCAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1NDYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTU0NyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHgxNTUxIGFkZCAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1NTIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTU1MyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTU0IGFkZCAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDE1NTUgYWRkICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTU1NiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTU3IGFkZCAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1NTggYWRkIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICB1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworYWRkeDE1NjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4MTU2MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTYyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1NjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4MTU2NCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTY1IGFkZCAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1NjYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTU2NyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHgxNTcxIGFkZCAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHgxNTcyIGFkZCAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHgxNTczIGFkZCAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHgxNTc0IGFkZCAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2FkZHgxNTc1IGFkZCAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHgxNTc2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1NzcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTU3OCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4MTU4MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTgxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1ODIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CithZGR4MTU4MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHgxNTg0IGFkZCAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1ODUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTU4NiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTg3IGFkZCAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworYWRkeDE1OTEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTU5MiBhZGQgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTkzIGFkZCAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1OTQgYWRkIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCithZGR4MTU5NSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTk2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1OTcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTU5OCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHgxNjAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE2MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4MTYwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNjAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorYWRkeDE2MDQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTYwNSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNjA2IGFkZCAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE2MDcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4MTYxMSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTYxMiBhZGQgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTYxMyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNjE0IGFkZCAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDE2MTUgYWRkICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDE2MTYgYWRkIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTYxNyBhZGQgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNjE4IGFkZCAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKK3JvdW5kaW5nOiAgICBmbG9vcgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworYWRkeDE2MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4MTYyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2FkZHgxNjIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorYWRkeDE2MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4MTYyNCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNjI1IGFkZCAtMEUtNDAwICAgMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorYWRkeDE2MjYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCithZGR4MTYyNyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHgxNjMxIGFkZCAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE2MzIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTYzMyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTYzNCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCithZGR4MTYzNSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNjM2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorYWRkeDE2MzcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCithZGR4MTYzOCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKKy0tIEJpZ0RlY2ltYWwgcHJvYmxlbSB0ZXN0Y2FzZXMgMjAwNi4wMS4yMworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCityb3VuZGluZzogIGRvd24KK3ByZWNpc2lvbjogNworYWRkeDE2NTEgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA2CithZGR4MTY1MiBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDUKK2FkZHgxNjUzIGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMEUrNiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0CithZGR4MTY1NCBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMEUrNiAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworYWRkeDE2NTUgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMEUrNiAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIKK2FkZHgxNjU2IGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMEUrNiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCithZGR4MTY1NyBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KK3ByZWNpc2lvbjogNworYWRkeDE2NjEgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA2CithZGR4MTY2MiBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDUKK2FkZHgxNjYzIGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0CithZGR4MTY2NCBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMEUrNiAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworYWRkeDE2NjUgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMEUrNiAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIKK2FkZHgxNjY2IGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMEUrNiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCithZGR4MTY2NyBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICB1cAorcHJlY2lzaW9uOiA3CithZGR4MTY3MSBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDYKK2FkZHgxNjcyIGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNQorYWRkeDE2NzMgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAxRSs2ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQKK2FkZHgxNjc0IGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAxRSs2ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzCithZGR4MTY3NSBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAxRSs2ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMgorYWRkeDE2NzYgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4xRSs2ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEKK2FkZHgxNjc3IGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDJFKzYgICAgICAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2FkZHgxNzAxICBhZGQgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCithZGR4MTcwMiAgYWRkIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorYWRkeDE3MDMgIGFkZCAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2FkZHgxNzA0ICBhZGQgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CithZGR4MTcwNSAgc3VidHJhY3QgMTMwRS0yICAxMjBFLTIgLT4gMC4xMAorYWRkeDE3MDYgIHN1YnRyYWN0IDEzMEUtMiAgMTJFLTEgIC0+IDAuMTAKK2FkZHgxNzA3ICBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwCithZGR4MTcwOCAgc3VidHJhY3QgMUUyICAgICAxRTQgICAgLT4gLTkuOUUrMworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFNhbWUgYXMgYWJvdmUsIHVzaW5nIGRlY2ltYWw2NCBkZWZhdWx0IHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorYWRkeDYwMDEgYWRkIDEgICAgICAgMSAgICAgICAtPiAgMgorYWRkeDYwMDIgYWRkIDIgICAgICAgMyAgICAgICAtPiAgNQorYWRkeDYwMDMgYWRkICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQorYWRkeDYwMDQgYWRkICc1JyAgICAgJy0zJyAgICAtPiAgMgorYWRkeDYwMDUgYWRkICctNScgICAgJy0zJyAgICAtPiAgLTgKK2FkZHg2MDA2IGFkZCAnLTcnICAgICcyLjUnICAgLT4gIC00LjUKK2FkZHg2MDA3IGFkZCAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorYWRkeDYwMDggYWRkICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAorYWRkeDYwMDkgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5JworYWRkeDYwMTAgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCithZGR4NjAxMSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDEyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0MCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMTMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMTQgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0OScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMTUgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0OTknICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMTYgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0OTk5JyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMTcgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MDAwJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMTggYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MDAxJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMTkgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MDEnICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMjAgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorCithZGR4NjAyMSBhZGQgMCAxIC0+IDEKK2FkZHg2MDIyIGFkZCAxIDEgLT4gMgorYWRkeDYwMjMgYWRkIDIgMSAtPiAzCithZGR4NjAyNCBhZGQgMyAxIC0+IDQKK2FkZHg2MDI1IGFkZCA0IDEgLT4gNQorYWRkeDYwMjYgYWRkIDUgMSAtPiA2CithZGR4NjAyNyBhZGQgNiAxIC0+IDcKK2FkZHg2MDI4IGFkZCA3IDEgLT4gOAorYWRkeDYwMjkgYWRkIDggMSAtPiA5CithZGR4NjAzMCBhZGQgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworYWRkeDYwMzEgYWRkICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworYWRkeDYwMzIgYWRkICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JworYWRkeDYwMzMgYWRkICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworYWRkeDYwMzQgYWRkICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJworCithZGR4NjAzNSBhZGQgJzcwJyAgICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMzYgYWRkICc3MDAnICAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDM3IGFkZCAnNzAwMCcgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjAzOCBhZGQgJzcwMDAwJyAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMzkgYWRkICc3MDAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5OgorYWRkeDYwNDAgYWRkICcxMDAwMGUrMTYnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwNDEgYWRkICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDQyIGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwNDQgYWRkICcxMDAwMGUrMTYnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwNDUgYWRkICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKK2FkZHg2MDQ2IGFkZCAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JworYWRkeDYwNDcgYWRkICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJworYWRkeDYwNDggYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2FkZHg2MDQ5IGFkZCAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJworYWRkeDYwNTAgYWRkICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJworYWRkeDYwNTEgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorYWRkeDYwNTMgYWRkICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2FkZHg2MDU0IGFkZCAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJworYWRkeDYwNTUgYWRkICcxLjMnICctMS4zMCcgLT4gJzAuMDAnCithZGR4NjA1NiBhZGQgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCithZGR4NjA1NyBhZGQgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKKworLS0gZnJvbSBhYm92ZQorYWRkeDYwNjAgYWRkIDEgJzAuMScgLT4gJzEuMScKK2FkZHg2MDYxIGFkZCAxICcwLjAxJyAtPiAnMS4wMScKK2FkZHg2MDYyIGFkZCAxICcwLjAwMScgLT4gJzEuMDAxJworYWRkeDYwNjMgYWRkIDEgJzAuMDAwMScgLT4gJzEuMDAwMScKK2FkZHg2MDY0IGFkZCAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2FkZHg2MDY1IGFkZCAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJworYWRkeDYwNjYgYWRkIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScKK2FkZHg2MDY3IGFkZCAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKKworLS0gY2FuY2VsbGF0aW9uIHRvIGludGVnZXIKK2FkZHg2MDY4IGFkZCA5OTk5OTk5OTk5OTk5OTEyMzQ1Njc4OSAtOTk5OTk5OTk5OTk5OTlFKzkgLT4gMTIzNDU2Nzg5CistLSBzaW1pbGFyIGZyb20gRk1BIGZ1bgorYWRkeDYwNjkgYWRkICItMTIzNDU2Nzg5MDEyMzQ1NS4yMzQ1Njc4OTAxMjM0NTQiICIxMjM0NTY3ODkwMTIzNDU2IiAtPiAwLjc2NTQzMjEwOTg3NjU0NgorCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCithZGR4NjA3MCBhZGQgMSAgMCAgICAtPiAxCithZGR4NjA3MSBhZGQgMSAwLiAgICAtPiAxCithZGR4NjA3MiBhZGQgMSAgLjAgICAtPiAxLjAKK2FkZHg2MDczIGFkZCAxIDAuMCAgIC0+IDEuMAorYWRkeDYwNzQgYWRkIDEgMC4wMCAgLT4gMS4wMAorYWRkeDYwNzUgYWRkICAwICAxICAgLT4gMQorYWRkeDYwNzYgYWRkIDAuICAxICAgLT4gMQorYWRkeDYwNzcgYWRkICAuMCAxICAgLT4gMS4wCithZGR4NjA3OCBhZGQgMC4wIDEgICAtPiAxLjAKK2FkZHg2MDc5IGFkZCAwLjAwIDEgIC0+IDEuMDAKKworLS0gc29tZSBjYXJyaWVzCithZGR4NjA4MCBhZGQgOTk5OTk5OTk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTk5OTk5OTk5CithZGR4NjA4MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgUm91bmRlZAorYWRkeDYwODIgYWRkICA5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwMDAwMAorYWRkeDYwODMgYWRkICAgIDk5OTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwMDAKK2FkZHg2MDg0IGFkZCAgICAgIDk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMAorYWRkeDYwODUgYWRkICAgICAgICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAorYWRkeDYwODYgYWRkICAgICAgICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKK2FkZHg2MDg3IGFkZCAgICAgICAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorYWRkeDYwODggYWRkICAgICAgICAgICAgICA5OTkgMSAgLT4gMTAwMAorYWRkeDYwODkgYWRkICAgICAgICAgICAgICAgIDkgMSAgLT4gMTAKKworCistLSBtb3JlIExIUyBzd2FwcworYWRkeDYwOTAgYWRkICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworYWRkeDYwOTEgYWRkICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCithZGR4NjA5MiBhZGQgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworYWRkeDYwOTMgYWRkICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworYWRkeDYwOTQgYWRkICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworYWRkeDYwOTUgYWRkICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworYWRkeDYwOTYgYWRkICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworYWRkeDYwOTcgYWRkICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCithZGR4NjA5OCBhZGQgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2FkZHg2MDk5IGFkZCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCithZGR4NjEwMCBhZGQgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2FkZHg2MTAxIGFkZCAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCithZGR4NjEwMiBhZGQgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCithZGR4NjEwMyBhZGQgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCithZGR4NjEwNCBhZGQgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworYWRkeDYxMDUgYWRkICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCithZGR4NjEwNiBhZGQgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCithZGR4NjEwNyBhZGQgJy01RTE1JyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworYWRkeDYxMDggYWRkICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQKK2FkZHg2MTA5IGFkZCAnLTVFMTcnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgIFJvdW5kZWQKK2FkZHg2MTEwIGFkZCAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQKK2FkZHg2MTExIGFkZCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMKK2FkZHg2MTEzIGFkZCAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JworYWRkeDYxMTQgYWRkIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2FkZHg2MTE2IGFkZCAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKK2FkZHg2MTE3IGFkZCAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JworYWRkeDYxMTkgYWRkIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCithZGR4NjEyMCBhZGQgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKK2FkZHg2MTIxIGFkZCAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JworYWRkeDYxMjIgYWRkIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2FkZHg2MTIzIGFkZCAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCithZGR4NjEyNCBhZGQgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCithZGR4NjEyNSBhZGQgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworYWRkeDYxMjYgYWRkIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JworYWRkeDYxMjcgYWRkIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCithZGR4NjEyOCBhZGQgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2FkZHg2MTI5IGFkZCAwICAnLTVFMCcgICAgICAgLT4gICctNScKK2FkZHg2MTMwIGFkZCAwICAnLTVFMScgICAgICAgLT4gICctNTAnCithZGR4NjEzMSBhZGQgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2FkZHg2MTMyIGFkZCAwICAnLTVFMTUnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2FkZHg2MTMzIGFkZCAwICAnLTVFMTYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQKK2FkZHg2MTM0IGFkZCAwICAnLTVFMTcnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQKK2FkZHg2MTM1IGFkZCAwICAnLTVFMTgnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQKK2FkZHg2MTM2IGFkZCAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworLS0gcmVsYXRlZAorYWRkeDYxMzcgYWRkICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2FkZHg2MTM4IGFkZCAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCithZGR4NjEzOSBhZGQgJzBFLTE5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorYWRkeDYxNDAgYWRkICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2FkZHg2MTQxIGFkZCAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnCithZGR4NjE0MiBhZGQgMUUrMTEgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZAorYWRkeDYxNDMgYWRkIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcKK2FkZHg2MTQ0IGFkZCAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkCisKKy0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCithZGR4NjE0NiBhZGQgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJworYWRkeDYxNDcgYWRkICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCithZGR4NjE0OCBhZGQgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKK2FkZHg2MTQ5IGFkZCAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCithZGR4NjE1MCBhZGQgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2FkZHg2MTUxIGFkZCAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJworYWRkeDYxNTIgYWRkICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKK2FkZHg2MTUzIGFkZCAnMy4nICAgICcuMycgICAgLT4gICczLjMnCithZGR4NjE1NCBhZGQgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJworYWRkeDYxNTUgYWRkICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCithZGR4NjE1NiBhZGQgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2FkZHg2MTU3IGFkZCAnMycgICAgICcrMycgICAgLT4gICc2JworYWRkeDYxNTggYWRkICczJyAgICAgJy0zJyAgICAtPiAgJzAnCithZGR4NjE1OSBhZGQgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworYWRkeDYxNjAgYWRkICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCithZGR4NjE2MSBhZGQgJzFFKzEzJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTk5JworYWRkeDYxNjIgYWRkICcxRSsxMycgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMDEuMTEnCithZGR4NjE2MyBhZGQgJzEuMTEnICAnMUUrMTMnIC0+ICcxMDAwMDAwMDAwMDAwMS4xMScKK2FkZHg2MTY0IGFkZCAnLTEnICAgICcxRSsxMycgLT4gJzk5OTk5OTk5OTk5OTknCithZGR4NjE2NSBhZGQgJzdFKzEzJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5OScKK2FkZHg2MTY2IGFkZCAnN0UrMTMnICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDAxLjExJworYWRkeDYxNjcgYWRkICcxLjExJyAgJzdFKzEzJyAtPiAnNzAwMDAwMDAwMDAwMDEuMTEnCithZGR4NjE2OCBhZGQgJy0xJyAgICAnN0UrMTMnIC0+ICc2OTk5OTk5OTk5OTk5OScKKworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1NgorYWRkeDYxNzAgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYzJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorYWRkeDYxNzEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorYWRkeDYxNzIgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYxNzMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYxNzQgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYxNzUgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYxNzYgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU3JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYxNzcgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2FkZHg2MTc4IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKK2FkZHg2MTc5IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OCcKK2FkZHg2MTgwIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NycKK2FkZHg2MTgxIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NicKK2FkZHg2MTgyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NScKK2FkZHg2MTgzIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NCcKKworLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2FkZHg2MjAwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2FkZHg2MjAxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwOCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjEwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIxMSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMTIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjEzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIxNCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMTUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjE2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2FkZHg2MjE3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIxOCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMTkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorYWRkeDYyMjAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworYWRkeDYyMjEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjIyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIyMyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMjQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjI1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIyNiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMjcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjI4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIyOSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMzAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjMxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIzMiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMzMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjM0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIzNSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMzYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworYWRkeDYyMzcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjM4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIzOSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2FkZHg2MjQwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjI0MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNDIgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2FkZHg2MjUwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2FkZHg2MjUxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI1MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNTMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjU0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI1NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNTYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjU3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI1OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNTkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjYwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI2MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNjIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjYzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI2NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNjUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjY2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2FkZHg2MjY3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjI2OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNjkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzCityb3VuZGluZzogaGFsZl9ldmVuCithZGR4NjMwMSBhZGQgIC0xICAgMSAgICAgIC0+ICAgMAorYWRkeDYzMDIgYWRkICAgMCAgIDEgICAgICAtPiAgIDEKK2FkZHg2MzAzIGFkZCAgIDEgICAxICAgICAgLT4gICAyCithZGR4NjMwNCBhZGQgIDEyICAgMSAgICAgIC0+ICAxMworYWRkeDYzMDUgYWRkICA5OCAgIDEgICAgICAtPiAgOTkKK2FkZHg2MzA2IGFkZCAgOTkgICAxICAgICAgLT4gMTAwCithZGR4NjMwNyBhZGQgMTAwICAgMSAgICAgIC0+IDEwMQorYWRkeDYzMDggYWRkIDEwMSAgIDEgICAgICAtPiAxMDIKK2FkZHg2MzA5IGFkZCAgLTEgIC0xICAgICAgLT4gIC0yCithZGR4NjMxMCBhZGQgICAwICAtMSAgICAgIC0+ICAtMQorYWRkeDYzMTEgYWRkICAgMSAgLTEgICAgICAtPiAgIDAKK2FkZHg2MzEyIGFkZCAgMTIgIC0xICAgICAgLT4gIDExCithZGR4NjMxMyBhZGQgIDk4ICAtMSAgICAgIC0+ICA5NworYWRkeDYzMTQgYWRkICA5OSAgLTEgICAgICAtPiAgOTgKK2FkZHg2MzE1IGFkZCAxMDAgIC0xICAgICAgLT4gIDk5CithZGR4NjMxNiBhZGQgMTAxICAtMSAgICAgIC0+IDEwMAorCithZGR4NjMyMSBhZGQgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2FkZHg2MzIyIGFkZCAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorYWRkeDYzMjMgYWRkICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCithZGR4NjMyNCBhZGQgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2FkZHg2MzI1IGFkZCAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorYWRkeDYzMjYgYWRkICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCithZGR4NjMyNyBhZGQgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2FkZHg2MzI4IGFkZCAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorYWRkeDYzMjkgYWRkIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCithZGR4NjMzMCBhZGQgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2FkZHg2MzMxIGFkZCAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorYWRkeDYzMzIgYWRkICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCithZGR4NjMzMyBhZGQgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2FkZHg2MzM0IGFkZCAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorYWRkeDYzMzUgYWRkICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5CithZGR4NjMzNiBhZGQgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CithZGR4NjM0MCBhZGQgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorYWRkeDYzNDEgYWRkIDFFKzE1ICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwCithZGR4NjM0MiBhZGQgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCithZGR4NjM0MyBhZGQgMUUrMTcgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCithZGR4NjM0NCBhZGQgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQorYWRkeDYzNDUgYWRkIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxCithZGR4NjM0NiBhZGQgMUUrMTYgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MzQ3IGFkZCAxRSsxNyAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgIEluZXhhY3QgUm91bmRlZAorYWRkeDYzNDggYWRkIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2FkZHg2MzQ5IGFkZCAxRSsxNSAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwNworYWRkeDYzNTAgYWRkIDFFKzE2ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjM1MSBhZGQgMUUrMTcgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK2FkZHg2MzYxICBhZGQgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorYWRkeDYzNjIgIGFkZCAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgIFJvdW5kZWQKK2FkZHg2MzYzICBhZGQgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCAgUm91bmRlZCBJbmV4YWN0CithZGR4NjM2NCAgYWRkIDEyLjM0ICAgIDBlLTM5OCAgLT4gMTIuMzQwMDAwMDAwMDAwMDAgIFJvdW5kZWQKKworLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCithZGR4NjQwMCBhZGQgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2FkZHg2NDAxIGFkZCAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2FkZHg2NDAyIGFkZCAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCithZGR4NjQwMyBhZGQgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDY0MDQgYWRkICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDA1IGFkZCAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQwNiBhZGQgICAxICAgNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NjQxMCBhZGQgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CithZGR4NjQxMSBhZGQgIDEwICAgNzdlLTE1ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorYWRkeDY0MTIgYWRkICAxMCAgIDc3ZS0xNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDEzIGFkZCAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQxNCBhZGQgIDEwICAgNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0MTUgYWRkICAxMCAgIDc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDE2IGFkZCAgMTAgICA3N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg2NDIwIGFkZCAgNzdlLTE0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDA3NworYWRkeDY0MjEgYWRkICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworYWRkeDY0MjIgYWRkICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDIzIGFkZCAgNzdlLTE3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjQyNCBhZGQgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0MjUgYWRkICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDI2IGFkZCAgNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg2NDMwIGFkZCAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2FkZHg2NDMxIGFkZCAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCithZGR4NjQzMiBhZGQgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDY0MzMgYWRkICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDM0IGFkZCAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQzNSBhZGQgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0MzYgYWRkICA3N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworYWRkeDY0NDAgYWRkICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMworYWRkeDY0NDEgYWRkICAgMSAgIC03N2UtMTUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2FkZHg2NDQyIGFkZCAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworYWRkeDY0NDMgYWRkICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDY0NDQgYWRkICAgMSAgIC03N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDY0NDUgYWRkICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ0NiBhZGQgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDY0NTAgYWRkICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2FkZHg2NDUxIGFkZCAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworYWRkeDY0NTIgYWRkICAxMCAgIC03N2UtMTYgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDY0NTMgYWRkICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDY0NTQgYWRkICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ1NSBhZGQgIDEwICAgLTc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDU2IGFkZCAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NjQ2MCBhZGQgIC03N2UtMTQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCithZGR4NjQ2MSBhZGQgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMworYWRkeDY0NjIgYWRkICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCithZGR4NjQ2MyBhZGQgIC03N2UtMTcgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ2NCBhZGQgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ2NSBhZGQgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDY2IGFkZCAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NjQ3MCBhZGQgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMworYWRkeDY0NzEgYWRkICAtNzdlLTE1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCithZGR4NjQ3MiBhZGQgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ3MyBhZGQgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ3NCBhZGQgIC03N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDc1IGFkZCAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0NzYgYWRkICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2FkZHg2NDgwIGFkZCAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCithZGR4NjQ4MSBhZGQgIC0xICAgIDc3ZS0xNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKK2FkZHg2NDgyIGFkZCAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKK2FkZHg2NDgzIGFkZCAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ4NCBhZGQgIC0xICAgIDc3ZS0xOCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDY0ODUgYWRkICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0ODYgYWRkICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NjQ5MCBhZGQgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKK2FkZHg2NDkxIGFkZCAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKK2FkZHg2NDkyIGFkZCAtMTAgICAgNzdlLTE2ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ5MyBhZGQgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDY0OTQgYWRkIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0OTUgYWRkIC0xMCAgICA3N2UtMTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0OTYgYWRkIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NjUwMCBhZGQgICA3N2UtMTQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworYWRkeDY1MDEgYWRkICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCithZGR4NjUwMiBhZGQgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCithZGR4NjUwMyBhZGQgICA3N2UtMTcgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDY1MDQgYWRkICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTA1IGFkZCAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTA2IGFkZCAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDY1MTAgYWRkICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCithZGR4NjUxMSBhZGQgICA3N2UtMTUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCithZGR4NjUxMiBhZGQgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDY1MTMgYWRkICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTE0IGFkZCAgIDc3ZS0xOCAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTE1IGFkZCAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTE2IGFkZCAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworCistLSBsb25nIG9wZXJhbmRzCithZGR4NjUyMSBhZGQgMTAxMjM0NTYyMzQ1Njc4MDAwIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE3IFJvdW5kZWQKK2FkZHg2NTIyIGFkZCAwIDEwMTIzNDU2MjM0NTY3ODAwMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTcgUm91bmRlZAorYWRkeDY1MjMgYWRkIDEwMTIzNDU2MjM0NTY3ODAwICAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNiBSb3VuZGVkCithZGR4NjUyNCBhZGQgMCAxMDEyMzQ1NjIzNDU2NzgwMCAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE2IFJvdW5kZWQKK2FkZHg2NTI1IGFkZCAxMDEyMzQ1NjIzNDU2Nzg5MCAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgUm91bmRlZAorYWRkeDY1MjYgYWRkIDAgMTAxMjM0NTYyMzQ1Njc4OTAgIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBSb3VuZGVkCithZGR4NjUyNyBhZGQgMTAxMjM0NTYyMzQ1Njc4OTEgIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDY1MjggYWRkIDAgMTAxMjM0NTYyMzQ1Njc4OTEgIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTI5IGFkZCAxMDEyMzQ1NjIzNDU2Nzg5MDEgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTcgSW5leGFjdCBSb3VuZGVkCithZGR4NjUzMCBhZGQgMCAxMDEyMzQ1NjIzNDU2Nzg5MDEgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE3IEluZXhhY3QgUm91bmRlZAorYWRkeDY1MzEgYWRkIDEwMTIzNDU2MjM0NTY3ODk2ICAwIC0+IDEuMDEyMzQ1NjIzNDU2NzkwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTMyIGFkZCAwIDEwMTIzNDU2MjM0NTY3ODk2ICAtPiAxLjAxMjM0NTYyMzQ1Njc5MEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIHZlcmlmeSBhIHF1ZXJ5Cityb3VuZGluZzogICAgIGRvd24KK2FkZHg2NTYxIGFkZCAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAorYWRkeDY1NjIgYWRkICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAorLS0gYW5kIHVzaW5nIGRlY2ltYWw2NCBib3VuZHMuLi4KK3JvdW5kaW5nOiAgICAgZG93bgorYWRkeDY1NjMgYWRkIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCithZGR4NjU2NCBhZGQgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworYWRkeDY3MDEgYWRkIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCithZGR4NjcwMiBhZGQgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCithZGR4NjcwMyBhZGQgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCithZGR4NjcwNCBhZGQgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2FkZHg2NzEwIGFkZCAwRSszICAwMC4wMCAgLT4gMC4wMAorYWRkeDY3MTEgYWRkIDBFKzMgIDAwLjAgICAtPiAwLjAKK2FkZHg2NzEyIGFkZCAwRSszICAwMC4gICAgLT4gMAorYWRkeDY3MTMgYWRkIDBFKzMgIDAwLkUrMSAtPiAwRSsxCithZGR4NjcxNCBhZGQgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2FkZHg2NzE1IGFkZCAwRSszICAwMC5FKzMgLT4gMEUrMworYWRkeDY3MTYgYWRkIDBFKzMgIDAwLkUrNCAtPiAwRSszCithZGR4NjcxNyBhZGQgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2FkZHg2NzE4IGFkZCAwRSszICAtMDAuMCAgIC0+IDAuMAorYWRkeDY3MTkgYWRkIDBFKzMgIC0wMC4gICAgLT4gMAorYWRkeDY3MzEgYWRkIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCithZGR4NjcyMCBhZGQgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2FkZHg2NzIxIGFkZCAwMC4wICAgMEUrMyAgLT4gMC4wCithZGR4NjcyMiBhZGQgMDAuICAgIDBFKzMgIC0+IDAKK2FkZHg2NzIzIGFkZCAwMC5FKzEgMEUrMyAgLT4gMEUrMQorYWRkeDY3MjQgYWRkIDAwLkUrMiAwRSszICAtPiAwRSsyCithZGR4NjcyNSBhZGQgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2FkZHg2NzI2IGFkZCAwMC5FKzQgMEUrMyAgLT4gMEUrMworYWRkeDY3MjcgYWRkIDAwLkUrNSAwRSszICAtPiAwRSszCithZGR4NjcyOCBhZGQgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2FkZHg2NzI5IGFkZCAtMDAuMCAgMEUrMyAgLT4gMC4wCithZGR4NjczMCBhZGQgLTAwLiAgIDBFKzMgIC0+IDAKKworYWRkeDY3MzIgYWRkICAwICAgICAwICAgICAtPiAgMAorYWRkeDY3MzMgYWRkICAwICAgIC0wICAgICAtPiAgMAorYWRkeDY3MzQgYWRkIC0wICAgICAwICAgICAtPiAgMAorYWRkeDY3MzUgYWRkIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCisKK2FkZHg2NzM2IGFkZCAgMSAgICAtMSAgICAgLT4gIDAKK2FkZHg2NzM3IGFkZCAtMSAgICAtMSAgICAgLT4gLTIKK2FkZHg2NzM4IGFkZCAgMSAgICAgMSAgICAgLT4gIDIKK2FkZHg2NzM5IGFkZCAtMSAgICAgMSAgICAgLT4gIDAKKworYWRkeDY3NDEgYWRkICAwICAgIC0xICAgICAtPiAtMQorYWRkeDY3NDIgYWRkIC0wICAgIC0xICAgICAtPiAtMQorYWRkeDY3NDMgYWRkICAwICAgICAxICAgICAtPiAgMQorYWRkeDY3NDQgYWRkIC0wICAgICAxICAgICAtPiAgMQorYWRkeDY3NDUgYWRkIC0xICAgICAwICAgICAtPiAtMQorYWRkeDY3NDYgYWRkIC0xICAgIC0wICAgICAtPiAtMQorYWRkeDY3NDcgYWRkICAxICAgICAwICAgICAtPiAgMQorYWRkeDY3NDggYWRkICAxICAgIC0wICAgICAtPiAgMQorCithZGR4Njc1MSBhZGQgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2FkZHg2NzUyIGFkZCAtMC4wICAtMSAgICAgLT4gLTEuMAorYWRkeDY3NTMgYWRkICAwLjAgICAxICAgICAtPiAgMS4wCithZGR4Njc1NCBhZGQgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2FkZHg2NzU1IGFkZCAtMS4wICAgMCAgICAgLT4gLTEuMAorYWRkeDY3NTYgYWRkIC0xLjAgIC0wICAgICAtPiAtMS4wCithZGR4Njc1NyBhZGQgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2FkZHg2NzU4IGFkZCAgMS4wICAtMCAgICAgLT4gIDEuMAorCithZGR4Njc2MSBhZGQgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2FkZHg2NzYyIGFkZCAtMCAgICAtMS4wICAgLT4gLTEuMAorYWRkeDY3NjMgYWRkICAwICAgICAxLjAgICAtPiAgMS4wCithZGR4Njc2NCBhZGQgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2FkZHg2NzY1IGFkZCAtMSAgICAgMC4wICAgLT4gLTEuMAorYWRkeDY3NjYgYWRkIC0xICAgIC0wLjAgICAtPiAtMS4wCithZGR4Njc2NyBhZGQgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2FkZHg2NzY4IGFkZCAgMSAgICAtMC4wICAgLT4gIDEuMAorCithZGR4Njc3MSBhZGQgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2FkZHg2NzcyIGFkZCAtMC4wICAtMS4wICAgLT4gLTEuMAorYWRkeDY3NzMgYWRkICAwLjAgICAxLjAgICAtPiAgMS4wCithZGR4Njc3NCBhZGQgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2FkZHg2Nzc1IGFkZCAtMS4wICAgMC4wICAgLT4gLTEuMAorYWRkeDY3NzYgYWRkIC0xLjAgIC0wLjAgICAtPiAtMS4wCithZGR4Njc3NyBhZGQgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2FkZHg2Nzc4IGFkZCAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworYWRkeDY3ODAgYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg2NzgxIGFkZCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CithZGR4Njc4MiBhZGQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorYWRkeDY3ODMgYWRkIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2FkZHg2Nzg0IGFkZCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CithZGR4Njc4NSBhZGQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorYWRkeDY3ODYgYWRkIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2FkZHg2Nzg3IGFkZCAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CithZGR4Njc4OCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorYWRkeDY3ODkgYWRkIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg2NzkwIGFkZCAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4Njc5MSBhZGQgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorYWRkeDY3OTIgYWRkICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg2NzkzIGFkZCAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CithZGR4Njc5NCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2FkZHg2ODAwIGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODAxIGFkZCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CithZGR4NjgwMiBhZGQgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorYWRkeDY4MDMgYWRkICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2FkZHg2ODA0IGFkZCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CithZGR4NjgwNSBhZGQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorYWRkeDY4MDYgYWRkICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2FkZHg2ODA3IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CithZGR4NjgwOCBhZGQgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDY4MDkgYWRkIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4MTAgYWRkIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg2ODExIGFkZCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CithZGR4NjgxMiBhZGQgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDY4MTMgYWRkICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg2ODE0IGFkZCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CithZGR4NjgxNSBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCithZGR4NjgyMSBhZGQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2FkZHg2ODIyIGFkZCAgTmFOIC0xMDAwICAgLT4gIE5hTgorYWRkeDY4MjMgYWRkICBOYU4gLTEgICAgICAtPiAgTmFOCithZGR4NjgyNCBhZGQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2FkZHg2ODI1IGFkZCAgTmFOICAwICAgICAgLT4gIE5hTgorYWRkeDY4MjYgYWRkICBOYU4gIDEgICAgICAtPiAgTmFOCithZGR4NjgyNyBhZGQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2FkZHg2ODI4IGFkZCAgTmFOICBJbmYgICAgLT4gIE5hTgorYWRkeDY4MjkgYWRkICBOYU4gIE5hTiAgICAtPiAgTmFOCithZGR4NjgzMCBhZGQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2FkZHg2ODMxIGFkZCAtMTAwMCBOYU4gICAgLT4gIE5hTgorYWRkeDY4MzIgYWRkIC0xICAgIE5hTiAgICAtPiAgTmFOCithZGR4NjgzMyBhZGQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2FkZHg2ODM0IGFkZCAgMCAgICBOYU4gICAgLT4gIE5hTgorYWRkeDY4MzUgYWRkICAxICAgIE5hTiAgICAtPiAgTmFOCithZGR4NjgzNiBhZGQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2FkZHg2ODM3IGFkZCAgSW5mICBOYU4gICAgLT4gIE5hTgorCithZGR4Njg0MSBhZGQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg0MiBhZGQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg0MyBhZGQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg0NCBhZGQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg0NSBhZGQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg0NiBhZGQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg0NyBhZGQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg0OCBhZGQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg0OSBhZGQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1MCBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1MSBhZGQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1MiBhZGQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1MyBhZGQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1NCBhZGQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1NSBhZGQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1NiBhZGQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1NyBhZGQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1OCBhZGQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg1OSBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2FkZHg2ODYxIGFkZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2FkZHg2ODYyIGFkZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2FkZHg2ODYzIGFkZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2FkZHg2ODY0IGFkZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2FkZHg2ODY1IGFkZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2FkZHg2ODY2IGFkZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2FkZHg2ODY3IGFkZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2FkZHg2ODY4IGFkZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2FkZHg2ODY5IGFkZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCithZGR4Njg3MSBhZGQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODcyIGFkZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NzMgYWRkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg3NCBhZGQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODc1IGFkZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NzYgYWRkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg3NyBhZGQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODc4IGFkZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NzkgYWRkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg4MCBhZGQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODgxIGFkZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4ODIgYWRkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2FkZHg2ODgzIGFkZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4ODQgYWRkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2FkZHg2ODg1IGFkZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBub3cgdGhlIGNhc2Ugd2hlcmUgd2UgY2FuIGdldCB1bmRlcmZsb3cgYnV0IHRoZSByZXN1bHQgaXMgbm9ybWFsCistLSBbbm90ZSB0aGlzIGNhbid0IGhhcHBlbiBpZiB0aGUgb3BlcmFuZHMgYXJlIGFsc28gYm91bmRlZCwgYXMgd2UKKy0tIGNhbm5vdCByZXByZXNlbnQgMUUtMzk5LCBmb3IgZXhhbXBsZV0KKworYWRkeDY1NzEgYWRkICAgICAgIDFFLTM4MyAgICAgICAwICAtPiAxRS0zODMKK2FkZHg2NTcyIGFkZCAgICAgICAxRS0zODQgICAgICAgMCAgLT4gMUUtMzg0ICAgU3Vibm9ybWFsCithZGR4NjU3MyBhZGQgICAgICAgMUUtMzgzICAxRS0zODQgIC0+IDEuMUUtMzgzCithZGR4NjU3NCBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zODQgIC0+ICAgOUUtMzg0IFN1Ym5vcm1hbAorCistLSBIZXJlIHdlIGV4cGxvcmUgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2FkZHg2NTc1IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorYWRkeDY1NzYgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCithZGR4NjU3NyBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorYWRkeDY1Nzggc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2FkZHg2NTc5IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCithZGR4NjU4MCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorYWRkeDY5NzIgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorYWRkeDY5NzMgYWRkICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2OTc0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCithZGR4Njk3NSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk3NiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk3NyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDhFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk3OCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDdFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk3OSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDZFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk4MCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDVFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk4MSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDRFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2OTgyIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgM0UrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorYWRkeDY5ODMgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAyRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCithZGR4Njk4NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDY5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2FkZHg2OTg2IGFkZCAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorYWRkeDY5ODcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCithZGR4Njk4OCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5ODkgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2OTkwIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOEUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk5MSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5OTIgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2OTkzIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk5NCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCithZGR4Njk5NSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCithZGR4Njk5NiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTJFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCithZGR4Njk5NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCithZGR4NjExMDAgYWRkIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2FkZHg2MTEwMSBhZGQgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHg2MTEwMyBhZGQgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMDQgYWRkIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHg2MTEwNSBhZGQgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHg2MTEwNiBhZGQgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMDcgYWRkIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHg2MTEwOCBhZGQgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHg2MTEwOSBhZGQgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCithZGR4NjExMTAgYWRkIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMTEgYWRkIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTEzIGFkZCAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMTQgYWRkIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMTUgYWRkIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTE2IGFkZCAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMTcgYWRkIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMTggYWRkIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTE5IGFkZCAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2FkZHg2MTMwMCBhZGQgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxMCBhZGQgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxMSBhZGQgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxMiBhZGQgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxMyBhZGQgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxNCBhZGQgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxNSBhZGQgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxNiBhZGQgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxOCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMxOSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyMSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyMiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyNCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyNSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyNiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyOCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMyOSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzMSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzMiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzNCBhZGQgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzNSBhZGQgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzNiBhZGQgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzNyBhZGQgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzOCBhZGQgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTMzOSBhZGQgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDYxMzQwIGFkZCAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzQxIGFkZCAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCithZGR4NjEzNDkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzUwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM1MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzUzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM1NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzU2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM1NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNTggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzU5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM2MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNjEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzYyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM2MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNjQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzY1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM2NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNjggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzY5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM3MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzcyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNzQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzc1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM3NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNzcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzc4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM3OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzODAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzgxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM4MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzODMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzg0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM4NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzODYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzg3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM4OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzODkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzkwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM5MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzOTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzkzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM5NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzOTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzk2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK2FkZHg2MTQyMCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0MjEgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQyMiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQyMyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0MjQgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQyNSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQyNiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0MjcgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworYWRkeDYxNDI4IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2FkZHg2MTQyOSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CithZGR4NjE0MzAgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2FkZHg2MTQzMSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorYWRkeDYxNDMyIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCithZGR4NjE0MzMgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2FkZHg2MTQzNCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorYWRkeDYxNDM1IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CithZGR4NjE0MzYgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2FkZHg2MTQzNyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworYWRkeDYxNDM4IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CithZGR4NjE0MzkgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorYWRkeDYxNDQwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDQxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ0MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDQzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDQ0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ0NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDQ2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDQ3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworYWRkeDYxNDQ4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorYWRkeDYxNDQ5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorYWRkeDYxNDUwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2FkZHg2MTQ1MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCithZGR4NjE0NTIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorYWRkeDYxNDUzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2FkZHg2MTQ1NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CithZGR4NjE0NTUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorYWRkeDYxNDU2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2FkZHg2MTQ1NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CithZGR4NjE0NTggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorYWRkeDYxNDU5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2FkZHg2MTQ2MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDYxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NjIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ2MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDY0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NjUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ2NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDY3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NjggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ2OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDcwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NzEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ3MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDczIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NzQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ3NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorYWRkeDYxNDc2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2FkZHg2MTQ3NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCithZGR4NjE0NzggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorYWRkeDYxNDc5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4NjE1MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4NjE1MDQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MDUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MDYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MDcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4NjE1MTEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1MTIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1MTMgYWRkICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1MTQgYWRkIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCithZGR4NjE1MTUgYWRkICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1MTYgYWRkIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MTcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MTggYWRkIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHg2MTUyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTUyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTUyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTUyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHg2MTUyNCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTUyNSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTUyNiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTUyNyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHg2MTUzMSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTUzMiBhZGQgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTUzMyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTUzNCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2FkZHg2MTUzNSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTUzNiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTUzNyBhZGQgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTUzOCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworYWRkeDYxNTQwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDYxNTQxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDYxNTQyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorYWRkeDYxNTQzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorYWRkeDYxNTQ0IGFkZCAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTQ1IGFkZCAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTQ2IGFkZCAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTQ3IGFkZCAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworYWRkeDYxNTUxIGFkZCAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNTUyIGFkZCAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNTUzIGFkZCAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNTU0IGFkZCAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDYxNTU1IGFkZCAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNTU2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTU3IGFkZCAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTU4IGFkZCAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHg2MTU2MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTU2MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTU2MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTU2MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHg2MTU2NCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU2NSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU2NiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU2NyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHg2MTU3MSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4NjE1NzIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDYxNTczIGFkZCAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHg2MTU3NCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCithZGR4NjE1NzUgYWRkICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDYxNTc2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTc3IGFkZCAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTc4IGFkZCAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworcm91bmRpbmc6ICAgIGRvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHg2MTU4MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTU4MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTU4MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTU4MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHg2MTU4NCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU4NSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU4NiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU4NyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHg2MTU5MSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTU5MiBhZGQgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTU5MyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTU5NCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2FkZHg2MTU5NSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTU5NiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU5NyBhZGQgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU5OCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHg2MTYwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTYwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTYwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTYwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHg2MTYwNCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTYwNSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTYwNiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTYwNyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHg2MTYxMSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4NjE2MTIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDYxNjEzIGFkZCAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNjE0IGFkZCAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDYxNjE1IGFkZCAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHg2MTYxNiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTYxNyBhZGQgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTYxOCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHg2MTYyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTYyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2FkZHg2MTYyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2FkZHg2MTYyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHg2MTYyNCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTYyNSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2FkZHg2MTYyNiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2FkZHg2MTYyNyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHg2MTYzMSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTYzMiBhZGQgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTYzMyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4NjE2MzQgYWRkIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDYxNjM1IGFkZCAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNjM2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorYWRkeDYxNjM3IGFkZCAgMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorYWRkeDYxNjM4IGFkZCAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCithZGR4NjE3MDEgYWRkIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAorYWRkeDYxNzAyIGFkZCAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2FkZHg2MTcwMyBhZGQgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCithZGR4NjE3MDQgYWRkIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAorYWRkeDYxNzA1IHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTAKK2FkZHg2MTcwNiBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwCithZGR4NjE3MDcgc3VidHJhY3QgMTMwRS0yICAxRTAgICAgLT4gMC4zMAorYWRkeDYxNzA4IHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMKKworLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcAorcm91bmRpbmc6IGhhbGZfZXZlbgorCithZGR4NjIwMDEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcKK2FkZHg2MjAwMiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMDMgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDA0IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAwNSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMDYgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDA3IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAwOCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMDkgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDEwIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAxMSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMTIgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDEzIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAxNCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMTUgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDE2IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAxNyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMTggYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDE5IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAyMCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMjEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorCistLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwCithZGR4NjIwMzAgYWRkIDEyMzQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc5CithZGR4NjIwMzEgYWRkIDEyMzQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEKK2FkZHg2MjAzMiBhZGQgMTIzNDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIKK2FkZHg2MjAzMyBhZGQgMTIzNDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzCithZGR4NjIwMzQgYWRkIDEyMzQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQKK2FkZHg2MjAzNSBhZGQgMTIzNDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDUKK2FkZHg2MjAzNiBhZGQgMTIzNDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2CithZGR4NjIwMzcgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NjcKK2FkZHg2MjAzOCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzgKK2FkZHg2MjAzOSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNDAgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDQxIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA0MiBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNDMgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDQ0IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA0NSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNDYgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDQ3IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA0OCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNDkgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2FkZHg2MjA1MCBhZGQgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNTEgYWRkIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDUyIGFkZCAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA1MyBhZGQgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNTQgYWRkIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDU1IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA1NiBhZGQgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNTcgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDYwIGFkZCAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA2MSBhZGQgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNjIgYWRkIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDYzIGFkZCAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA2NCBhZGQgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNjUgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDY2IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA2NyBhZGQgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCistLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpCityb3VuZGluZzogdXAKK2FkZHg2MjA3MCBhZGQgMTIzNDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEKK2FkZHg2MjA3MSBhZGQgMTIzNDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNzIgYWRkIDEyMzQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDczIGFkZCAxMjM0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA3NCBhZGQgMTIzNDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNzUgYWRkIDEyMzQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDc2IGFkZCAxMjM0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA3NyBhZGQgMTIzNDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNzggYWRkIDEyMzQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDc5IGFkZCAxMjM0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA4MCBhZGQgMTIzNDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwODEgYWRkIDEyMzQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDgyIGFkZCAxMjM0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA4MyBhZGQgMTIzNDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwODQgYWRkIDEyMzQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDg1IGFkZCAxMjM0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA4NiBhZGQgMTIzNDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwODcgYWRkIDEyMzQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDg4IGFkZCAxMjM0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA4OSBhZGQgMTIzNDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIHBheWxvYWQgZGVjYXBpdGF0ZQorcHJlY2lzaW9uOiA1CithZGR4NjIxMDAgYWRkICAgICAgMTEgIHNOYU4xMjM0NTY3ODkgLT4gIE5hTjU2Nzg5ICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDYyMTAxIGFkZCAgICAgLTExIC1zTmFOMTIzNDU2Nzg5IC0+IC1OYU41Njc4OSAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2MjEwMiBhZGQgICAgICAxMSAgIE5hTjEyMzQ1Njc4OSAtPiAgTmFONTY3ODkKK2FkZHg2MjEwMyBhZGQgICAgIC0xMSAgLU5hTjEyMzQ1Njc4OSAtPiAtTmFONTY3ODkKKworLS0gTnVsbCB0ZXN0cworYWRkeDk5OTAgYWRkIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDk5OTEgYWRkICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9hbmQuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYW5kLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjYzc4NgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYW5kLmRlY1Rlc3QKQEAgLTAsMCArMSwzMzggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gYW5kLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorYW5keDAwMSBhbmQgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2FuZHgwMDIgYW5kICAgICAgICAgICAgIDAgICAgMSAtPiAgICAwCithbmR4MDAzIGFuZCAgICAgICAgICAgICAxICAgIDAgLT4gICAgMAorYW5keDAwNCBhbmQgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK2FuZHgwMDUgYW5kICAgICAgICAgIDExMDAgMTAxMCAtPiAxMDAwCithbmR4MDA2IGFuZCAgICAgICAgICAxMTExICAgMTAgLT4gICAxMAorYW5keDAwNyBhbmQgICAgICAgICAgMTExMSAxMDEwIC0+IDEwMTAKKworLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2FuZHgwMTAgYW5kIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTEgYW5kIDAwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTIgYW5kIDEwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTMgYW5kIDEwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAKK2FuZHgwMTQgYW5kIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTUgYW5kIDAwMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTYgYW5kIDAxMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTcgYW5kIDAxMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQorYW5keDAyMSBhbmQgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2FuZHgwMjIgYW5kIDExMTExMTExMTExMSAgMTExMTExMTExICAtPiAgMTExMTExMTExCithbmR4MDIzIGFuZCAxMTExMTExMTExMTEgICAxMTExMTExMSAgLT4gICAxMTExMTExMQorYW5keDAyNCBhbmQgMTExMTExMTExICAgICAgMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2FuZHgwMjUgYW5kIDExMTExMTExMSAgICAgICAxMTExMTExICAtPiAgICAxMTExMTExCithbmR4MDI2IGFuZCAxMTExMTExMTExMTEgICAgIDExMTExMSAgLT4gICAgIDExMTExMQorYW5keDAyNyBhbmQgMTExMTExMTExMTExICAgICAgMTExMTEgIC0+ICAgICAgMTExMTEKK2FuZHgwMjggYW5kIDExMTExMTExMTExMSAgICAgICAxMTExICAtPiAgICAgICAxMTExCithbmR4MDI5IGFuZCAxMTExMTExMTExMTEgICAgICAgIDExMSAgLT4gICAgICAgIDExMQorYW5keDAzMSBhbmQgMTExMTExMTExMTExICAgICAgICAgMTEgIC0+ICAgICAgICAgMTEKK2FuZHgwMzIgYW5kIDExMTExMTExMTExMSAgICAgICAgICAxICAtPiAgICAgICAgICAxCithbmR4MDMzIGFuZCAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDExMTExMTExMQorYW5keDAzNCBhbmQgMTExMTExMTExMTEgMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2FuZHgwMzUgYW5kIDExMTExMTExMTEgMTExMTExMTExMTExICAtPiAgMTExMTExMTExCithbmR4MDM2IGFuZCAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMQorCithbmR4MDQwIGFuZCAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQorYW5keDA0MSBhbmQgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2FuZHgwNDIgYW5kICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgIDExMTExMTExCithbmR4MDQzIGFuZCAgIDExMTExMTEgICAgIDExMTExMTExMSAgLT4gICAgMTExMTExMQorYW5keDA0NCBhbmQgICAgMTExMTExICAgICAxMTExMTExMTEgIC0+ICAgICAxMTExMTEKK2FuZHgwNDUgYW5kICAgICAxMTExMSAgICAgMTExMTExMTExICAtPiAgICAgIDExMTExCithbmR4MDQ2IGFuZCAgICAgIDExMTEgICAgIDExMTExMTExMSAgLT4gICAgICAgMTExMQorYW5keDA0NyBhbmQgICAgICAgMTExICAgICAxMTExMTExMTEgIC0+ICAgICAgICAxMTEKK2FuZHgwNDggYW5kICAgICAgICAxMSAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExCithbmR4MDQ5IGFuZCAgICAgICAgIDEgICAgIDExMTExMTExMSAgLT4gICAgICAgICAgMQorCithbmR4MDUwIGFuZCAxMTExMTExMTExICAxICAtPiAgMQorYW5keDA1MSBhbmQgIDExMTExMTExMSAgMSAgLT4gIDEKK2FuZHgwNTIgYW5kICAgMTExMTExMTEgIDEgIC0+ICAxCithbmR4MDUzIGFuZCAgICAxMTExMTExICAxICAtPiAgMQorYW5keDA1NCBhbmQgICAgIDExMTExMSAgMSAgLT4gIDEKK2FuZHgwNTUgYW5kICAgICAgMTExMTEgIDEgIC0+ICAxCithbmR4MDU2IGFuZCAgICAgICAxMTExICAxICAtPiAgMQorYW5keDA1NyBhbmQgICAgICAgIDExMSAgMSAgLT4gIDEKK2FuZHgwNTggYW5kICAgICAgICAgMTEgIDEgIC0+ICAxCithbmR4MDU5IGFuZCAgICAgICAgICAxICAxICAtPiAgMQorCithbmR4MDYwIGFuZCAxMTExMTExMTExICAwICAtPiAgMAorYW5keDA2MSBhbmQgIDExMTExMTExMSAgMCAgLT4gIDAKK2FuZHgwNjIgYW5kICAgMTExMTExMTEgIDAgIC0+ICAwCithbmR4MDYzIGFuZCAgICAxMTExMTExICAwICAtPiAgMAorYW5keDA2NCBhbmQgICAgIDExMTExMSAgMCAgLT4gIDAKK2FuZHgwNjUgYW5kICAgICAgMTExMTEgIDAgIC0+ICAwCithbmR4MDY2IGFuZCAgICAgICAxMTExICAwICAtPiAgMAorYW5keDA2NyBhbmQgICAgICAgIDExMSAgMCAgLT4gIDAKK2FuZHgwNjggYW5kICAgICAgICAgMTEgIDAgIC0+ICAwCithbmR4MDY5IGFuZCAgICAgICAgICAxICAwICAtPiAgMAorCithbmR4MDcwIGFuZCAxICAxMTExMTExMTExICAtPiAgMQorYW5keDA3MSBhbmQgMSAgIDExMTExMTExMSAgLT4gIDEKK2FuZHgwNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxCithbmR4MDczIGFuZCAxICAgICAxMTExMTExICAtPiAgMQorYW5keDA3NCBhbmQgMSAgICAgIDExMTExMSAgLT4gIDEKK2FuZHgwNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxCithbmR4MDc2IGFuZCAxICAgICAgICAxMTExICAtPiAgMQorYW5keDA3NyBhbmQgMSAgICAgICAgIDExMSAgLT4gIDEKK2FuZHgwNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxCithbmR4MDc5IGFuZCAxICAgICAgICAgICAxICAtPiAgMQorCithbmR4MDgwIGFuZCAwICAxMTExMTExMTExICAtPiAgMAorYW5keDA4MSBhbmQgMCAgIDExMTExMTExMSAgLT4gIDAKK2FuZHgwODIgYW5kIDAgICAgMTExMTExMTEgIC0+ICAwCithbmR4MDgzIGFuZCAwICAgICAxMTExMTExICAtPiAgMAorYW5keDA4NCBhbmQgMCAgICAgIDExMTExMSAgLT4gIDAKK2FuZHgwODUgYW5kIDAgICAgICAgMTExMTEgIC0+ICAwCithbmR4MDg2IGFuZCAwICAgICAgICAxMTExICAtPiAgMAorYW5keDA4NyBhbmQgMCAgICAgICAgIDExMSAgLT4gIDAKK2FuZHgwODggYW5kIDAgICAgICAgICAgMTEgIC0+ICAwCithbmR4MDg5IGFuZCAwICAgICAgICAgICAxICAtPiAgMAorCithbmR4MDkwIGFuZCAwMTExMTExMTEgIDExMTExMTExMSAgLT4gICAxMTExMTExMQorYW5keDA5MSBhbmQgMTAxMTExMTExICAxMTExMTExMTEgIC0+ICAxMDExMTExMTEKK2FuZHgwOTIgYW5kIDExMDExMTExMSAgMTExMTExMTExICAtPiAgMTEwMTExMTExCithbmR4MDkzIGFuZCAxMTEwMTExMTEgIDExMTExMTExMSAgLT4gIDExMTAxMTExMQorYW5keDA5NCBhbmQgMTExMTAxMTExICAxMTExMTExMTEgIC0+ICAxMTExMDExMTEKK2FuZHgwOTUgYW5kIDExMTExMDExMSAgMTExMTExMTExICAtPiAgMTExMTEwMTExCithbmR4MDk2IGFuZCAxMTExMTEwMTEgIDExMTExMTExMSAgLT4gIDExMTExMTAxMQorYW5keDA5NyBhbmQgMTExMTExMTAxICAxMTExMTExMTEgIC0+ICAxMTExMTExMDEKK2FuZHgwOTggYW5kIDExMTExMTExMCAgMTExMTExMTExICAtPiAgMTExMTExMTEwCisKK2FuZHgxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExCithbmR4MTAxIGFuZCAxMTExMTExMTEgIDEwMTExMTExMSAgLT4gIDEwMTExMTExMQorYW5keDEwMiBhbmQgMTExMTExMTExICAxMTAxMTExMTEgIC0+ICAxMTAxMTExMTEKK2FuZHgxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExCithbmR4MTA0IGFuZCAxMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorYW5keDEwNSBhbmQgMTExMTExMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTAxMTEKK2FuZHgxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExCithbmR4MTA3IGFuZCAxMTExMTExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTEwMQorYW5keDEwOCBhbmQgMTExMTExMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTAKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCithbmR4MjIwIGFuZCAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyMSBhbmQgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjIgYW5kIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjIzIGFuZCA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyNCBhbmQgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjUgYW5kIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjI2IGFuZCA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyNyBhbmQgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjggYW5kIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjI5IGFuZCA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIzMCBhbmQgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMzEgYW5kIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjMyIGFuZCA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworYW5keDI0MCBhbmQgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNDEgYW5kICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI0MyBhbmQgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNDQgYW5kICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorYW5keDI1MCBhbmQgIDIwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1MSBhbmQgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1MiBhbmQgIDgwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1MyBhbmQgIDkwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1NCBhbmQgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1NSBhbmQgIDcwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1NiBhbmQgIDgwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1NyBhbmQgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1OCBhbmQgIDEwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1OSBhbmQgIDEwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2MCBhbmQgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2MSBhbmQgIDEwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2MiBhbmQgIDAwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2MyBhbmQgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2NCBhbmQgIDAwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2NSBhbmQgIDAwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorYW5keDI3MCBhbmQgIDAyMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3MSBhbmQgIDA3MDEwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3MiBhbmQgIDA4MDAxMDAwMCAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3MyBhbmQgIDA5MDAwMTAwMCAxMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3NCBhbmQgIDEwMDAwMDEwMCAwMjAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3NSBhbmQgIDEwMDAwMDAwMCAwNzAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3NiBhbmQgIDEwMDAwMDAxMCAwODAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3NyBhbmQgIDEwMDAwMDAwMCAwOTAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2FuZHgyODAgYW5kICAwMDEwMDAwMDIgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODEgYW5kICAwMDAwMDAwMDcgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODIgYW5kICAwMDAwMDAwMDggMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODMgYW5kICAwMDAwMDAwMDkgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODQgYW5kICAxMDAwMDAwMDAgMDAwMTAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODUgYW5kICAxMDAxMDAwMDAgMDAxMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODYgYW5kICAxMDAwMTAwMDAgMDEwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODcgYW5kICAxMDAwMDEwMDAgMTAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCithbmR4Mjg4IGFuZCAgMDAxMDIwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjg5IGFuZCAgMDAwMDcwMDAxIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjkwIGFuZCAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjkxIGFuZCAgMDAwMDkwMDAwIDEwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjkyIGFuZCAgMTAwMDAwMDEwIDAwMDAyMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjkzIGFuZCAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjk0IGFuZCAgMTAwMDEwMTAwIDAwMDA4MDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjk1IGFuZCAgMTAwMDAxMDAwIDAwMDA5MDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworYW5keDI5NiBhbmQgLTEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTcgYW5kIC0xMDAwMDEwMDAgIDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjk4IGFuZCAgMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5OSBhbmQgIDEwMDAwMTAwMCAgMDAwMDExMDAwIC0+ICAxMDAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CithbmR4MzMxIGFuZCAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzMyIGFuZCAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM0IGFuZCAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM1IGFuZCAgNiAgIC0xRS0xMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM3IGFuZCAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM4IGFuZCAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQxIGFuZCAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQyIGFuZCAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQzIGFuZCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ0IGFuZCAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ1IGFuZCAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ2IGFuZCAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ3IGFuZCAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ4IGFuZCAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworYW5keDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2MiBhbmQgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2MyBhbmQgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2NSBhbmQgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2NiBhbmQgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3MiBhbmQgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3MyBhbmQgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3NSBhbmQgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3NiBhbmQgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCithbmR4NzgwIGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzgxIGFuZCAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzgyIGFuZCAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzgzIGFuZCAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg0IGFuZCAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg1IGFuZCAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg2IGFuZCAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg3IGFuZCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg4IGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg5IGFuZCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzkwIGFuZCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzkxIGFuZCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzkyIGFuZCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzkzIGFuZCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzk0IGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2FuZHg4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDEgYW5kICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDIgYW5kICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDQgYW5kICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDUgYW5kICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDcgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDggYW5kIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTAgYW5kIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTEgYW5kIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTMgYW5kICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTQgYW5kICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworYW5keDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyMiBhbmQgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyMyBhbmQgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyNSBhbmQgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyNiBhbmQgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyOCBhbmQgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyOSBhbmQgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzMSBhbmQgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzMiBhbmQgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzNCBhbmQgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzNSBhbmQgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzNyBhbmQgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCithbmR4ODQxIGFuZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDIgYW5kICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0MyBhbmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQ0IGFuZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDUgYW5kICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0NiBhbmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQ3IGFuZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDggYW5kICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0OSBhbmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODUwIGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTEgYW5kIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1MiBhbmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODUzIGFuZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTQgYW5kIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1NSBhbmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODU2IGFuZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTcgYW5kICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1OCBhbmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODU5IGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworYW5keDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2MiBhbmQgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2MyBhbmQgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2NSBhbmQgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2NiBhbmQgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2OCBhbmQgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2OSBhbmQgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3MiBhbmQgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3MyBhbmQgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3NSBhbmQgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3NiBhbmQgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3OCBhbmQgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3OSBhbmQgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4MSBhbmQgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4MiBhbmQgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4NCBhbmQgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4NSBhbmQgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9iYXNlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2Jhc2UuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRjZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9iYXNlLmRlY1Rlc3QKQEAgLTAsMCArMSwxNDExIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGJhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY2ltYWwgPC0tPiBzdHJpbmcgY29udmVyc2lvbnMgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKK2V4dGVuZGVkOiAgICAxCisKKy0tIFRoaXMgZmlsZSB0ZXN0cyBiYXNlIGNvbnZlcnNpb25zIGZyb20gc3RyaW5nIHRvIGEgZGVjaW1hbCBudW1iZXIKKy0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBlaXRoZXIgU2NpZW50aWZpYyBvciBFbmdpbmVlcmluZyBmb3JtKQorCistLSBOb3RlIHRoYXQgdW5saWtlIG90aGVyIG9wZXJhdGlvbnMgdGhlIG9wZXJhbmQgaXMgc3ViamVjdCB0byByb3VuZGluZworLS0gdG8gY29uZm9ybSB0byBlbWF4IGFuZCBwcmVjaXNpb24gc2V0dGluZ3MgKHRoYXQgaXMsIG51bWJlcnMgd2lsbAorLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLgorCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCitiYXN4MDAxIHRvU2NpICAgICAgIDAgLT4gMAorYmFzeDAwMiB0b1NjaSAgICAgICAxIC0+IDEKK2Jhc3gwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjAKK2Jhc3gwMDQgdG9TY2kgICAgMS4wMCAtPiAxLjAwCitiYXN4MDA1IHRvU2NpICAgICAgMTAgLT4gMTAKK2Jhc3gwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwCitiYXN4MDA3IHRvU2NpICAgIDEwLjAgLT4gMTAuMAorYmFzeDAwOCB0b1NjaSAgICAxMC4xIC0+IDEwLjEKK2Jhc3gwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40CitiYXN4MDEwIHRvU2NpICAgIDEwLjUgLT4gMTAuNQorYmFzeDAxMSB0b1NjaSAgICAxMC42IC0+IDEwLjYKK2Jhc3gwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45CitiYXN4MDEzIHRvU2NpICAgIDExLjAgLT4gMTEuMAorYmFzeDAxNCB0b1NjaSAgMS4yMzQgLT4gMS4yMzQKK2Jhc3gwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzCitiYXN4MDE2IHRvU2NpICAwLjAxMiAtPiAwLjAxMgorYmFzeDAxNyB0b1NjaSAgLTAgICAgLT4gLTAKK2Jhc3gwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjAKK2Jhc3gwMTkgdG9TY2kgLTAwLjAwIC0+IC0wLjAwCisKK2Jhc3gwMjEgdG9TY2kgICAgIC0xIC0+IC0xCitiYXN4MDIyIHRvU2NpICAgLTEuMCAtPiAtMS4wCitiYXN4MDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xCitiYXN4MDI0IHRvU2NpICAgLTkuMSAtPiAtOS4xCitiYXN4MDI1IHRvU2NpICAgLTkuMTEgLT4gLTkuMTEKK2Jhc3gwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5CitiYXN4MDI3IHRvU2NpICAgLTkuOTk5IC0+IC05Ljk5OQorCitiYXN4MDMwIHRvU2NpICAnMTIzNDU2Nzg5LjEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5LjEyMzQ1NicKK2Jhc3gwMzEgdG9TY2kgICcxMjM0NTY3ODkuMDAwMDAwJyAgIC0+ICcxMjM0NTY3ODkuMDAwMDAwJworYmFzeDAzMiB0b1NjaSAgICcxMjM0NTY3ODkxMjM0NTYnICAgLT4gJzEyMzQ1Njc4OTEyMzQ1NicKK2Jhc3gwMzMgdG9TY2kgICAnMC4wMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAxMjM0NTY3ODknCitiYXN4MDM0IHRvU2NpICAnMC4wMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMDEyMzQ1Njc4OScKK2Jhc3gwMzUgdG9TY2kgJzAuMDAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcxLjIzNDU2Nzg5RS03JworYmFzeDAzNiB0b1NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5JyAgLT4gJzEuMjM0NTY3ODlFLTgnCisKK2Jhc3gwMzcgdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ0JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NCcKK2Jhc3gwMzggdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NScKKworLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0KKy0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdAorYmFzeDA0MCB0b1NjaSAiMTIiICAgICAgICAtPiAnMTInCitiYXN4MDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnCitiYXN4MDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicKK2Jhc3gwNDMgdG9TY2kgIisxMi43NiIgICAgLT4gJzEyLjc2JworYmFzeDA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnCitiYXN4MDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycKK2Jhc3gwNDYgdG9TY2kgIjE3LiIgICAgICAgLT4gJzE3JworYmFzeDA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41JworYmFzeDA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnCitiYXN4MDQ5IHRvU2NpICIwMDQ0IiAgICAgIC0+ICc0NCcKK2Jhc3gwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1JworYmFzeDA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1JworYmFzeDA1MiB0b1NjaSAiMC4wMDAwMDUiICAgIC0+ICcwLjAwMDAwNScKK2Jhc3gwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJworYmFzeDA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03JworYmFzeDA1NSB0b1NjaSAiMC4wMDAwMDAwNSIgIC0+ICc1RS04JworYmFzeDA1NiB0b1NjaSAiMTIzNDU2NzguNTQzMjEwIiAtPiAnMTIzNDU2NzguNTQzMjEwJworYmFzeDA1NyB0b1NjaSAiMjM0NTY3OC41NDMyMTAiIC0+ICcyMzQ1Njc4LjU0MzIxMCcKK2Jhc3gwNTggdG9TY2kgIjM0NTY3OC41NDMyMTAiIC0+ICczNDU2NzguNTQzMjEwJworYmFzeDA1OSB0b1NjaSAiMDM0NTY3OC41NDMyMSIgLT4gJzM0NTY3OC41NDMyMScKK2Jhc3gwNjAgdG9TY2kgIjM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitiYXN4MDYxIHRvU2NpICIrMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2Jhc3gwNjIgdG9TY2kgIiswMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2Jhc3gwNjMgdG9TY2kgIiswMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitiYXN4MDY0IHRvU2NpICItMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworYmFzeDA2NSB0b1NjaSAiLTAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCitiYXN4MDY2IHRvU2NpICItMDAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCistLSBleGFtcGxlcworYmFzeDA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScKK2Jhc3gwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJworYmFzeDA2OSB0b1NjaSAiNUUtNyIgICAgICAgIC0+ICc1RS03JworCistLSBbTm8gZXhvdGljcyBhcyBubyBVbmljb2RlXQorCistLSByb3VuZGVkIHdpdGggZG90cyBpbiBhbGwgKGluY2x1ZGluZyBlZGdlKSBwbGFjZXMKK2Jhc3gwNzEgdG9TY2kgIC4xMjM0NTY3ODkwMTIzNDU2MTIzICAtPiAwLjEyMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDcyIHRvU2NpICAxLjIzNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDczIHRvU2NpICAxMi4zNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIuMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDc0IHRvU2NpICAxMjMuNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzLjQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDc1IHRvU2NpICAxMjM0LjU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzNC41Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDc2IHRvU2NpICAxMjM0NS42Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzNDUuNjc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDc3IHRvU2NpICAxMjM0NTYuNzg5MDEyMzQ1NjEyMyAgLT4gMTIzNDU2Ljc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDc4IHRvU2NpICAxMjM0NTY3Ljg5MDEyMzQ1NjEyMyAgLT4gMTIzNDU2Ny44OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDc5IHRvU2NpICAxMjM0NTY3OC45MDEyMzQ1NjEyMyAgLT4gMTIzNDU2NzguOTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDgwIHRvU2NpICAxMjM0NTY3ODkuMDEyMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5LjAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDgxIHRvU2NpICAxMjM0NTY3ODkwLjEyMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MC4xMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDgyIHRvU2NpICAxMjM0NTY3ODkwMS4yMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEuMjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDgzIHRvU2NpICAxMjM0NTY3ODkwMTIuMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEyLjM0NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDg0IHRvU2NpICAxMjM0NTY3ODkwMTIzLjQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEyMy40NTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDg1IHRvU2NpICAxMjM0NTY3ODkwMTIzNC41NjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQuNTYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDg2IHRvU2NpICAxMjM0NTY3ODkwMTIzNDUuNjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1LjYgSW5leGFjdCBSb3VuZGVkCitiYXN4MDg3IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2LjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitiYXN4MDg4IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MS4yMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE2IEluZXhhY3QgUm91bmRlZAorYmFzeDA4OSB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NjEyLjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSsxNyBJbmV4YWN0IFJvdW5kZWQKK2Jhc3gwOTAgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxMjMuICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTggSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bWJlcnMgd2l0aCBFCitiYXN4MTMwIHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCitiYXN4MTMxIHRvU2NpICIwLjAwMEUtMiIgIC0+ICcwLjAwMDAwJworYmFzeDEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnCitiYXN4MTMzIHRvU2NpICIwLjAwMEUtNCIgIC0+ICcwRS03JworYmFzeDEzNCB0b1NjaSAiMC4wMEUtMiIgICAtPiAnMC4wMDAwJworYmFzeDEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcKK2Jhc3gxMzYgdG9TY2kgIjAuMDBFLTQiICAgLT4gJzAuMDAwMDAwJworYmFzeDEzNyB0b1NjaSAiMC4wMEUtNSIgICAtPiAnMEUtNycKK2Jhc3gxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknCitiYXN4MTM5IHRvU2NpICItMEUrOSIgICAgIC0+ICctMEUrOScKK2Jhc3gxNDAgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCitiYXN4MTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5JworYmFzeDE0MiB0b1NjaSAiMUUrOTAiICAgICAtPiAnMUUrOTAnCitiYXN4MTQzIHRvU2NpICIrMUUrMDA5IiAgIC0+ICcxRSs5JworYmFzeDE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScKK2Jhc3gxNDUgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCitiYXN4MTQ2IHRvU2NpICIxRSswOSIgICAgIC0+ICcxRSs5JworYmFzeDE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnCitiYXN4MTQ4IHRvU2NpICIxRSswMDkiICAgIC0+ICcxRSs5JworYmFzeDE0OSB0b1NjaSAiMDAwRSs5IiAgICAtPiAnMEUrOScKK2Jhc3gxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknCitiYXN4MTUxIHRvU2NpICIxZTA5IiAgICAgIC0+ICcxRSs5JworYmFzeDE1MiB0b1NjaSAiMUU5MCIgICAgICAtPiAnMUUrOTAnCitiYXN4MTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5JworYmFzeDE1NCB0b1NjaSAiMEU5IiAgICAgICAtPiAnMEUrOScKK2Jhc3gxNTUgdG9TY2kgIjAuMDAwZSswIiAgLT4gJzAuMDAwJworYmFzeDE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworYmFzeDE1NyB0b1NjaSAiNEUrOSIgICAgICAtPiAnNEUrOScKK2Jhc3gxNTggdG9TY2kgIjQ0RSs5IiAgICAgLT4gJzQuNEUrMTAnCitiYXN4MTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnCitiYXN4MTYwIHRvU2NpICIwMEUrOSIgICAgIC0+ICcwRSs5JworYmFzeDE2MSB0b1NjaSAiMDBFLTkiICAgICAtPiAnMEUtOScKK2Jhc3gxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnCitiYXN4MTYzIHRvU2NpICIxMEUrMDkiICAgIC0+ICcxLjBFKzEwJworYmFzeDE2NCB0b1NjaSAiMTBlKzkwIiAgICAtPiAnMS4wRSs5MScKK2Jhc3gxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnCitiYXN4MTY2IHRvU2NpICIxMDBlKzkiICAgIC0+ICcxLjAwRSsxMScKK2Jhc3gxNjcgdG9TY2kgIjEwMGUrMDkiICAgLT4gJzEuMDBFKzExJworYmFzeDE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInCitiYXN4MTY5IHRvU2NpICIxMDBlKzAwOSIgIC0+ICcxLjAwRSsxMScKKworYmFzeDE3MCB0b1NjaSAiMS4yNjUiICAgICAtPiAnMS4yNjUnCitiYXN4MTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnCitiYXN4MTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcKK2Jhc3gxNzMgdG9TY2kgIjEuMjY1RS00IiAgLT4gJzAuMDAwMTI2NScKK2Jhc3gxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1JworYmFzeDE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScKK2Jhc3gxNzYgdG9TY2kgIjEuMjY1RS0xIiAgLT4gJzAuMTI2NScKK2Jhc3gxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1JworYmFzeDE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnCitiYXN4MTc5IHRvU2NpICIxLjI2NUUrMiIgIC0+ICcxMjYuNScKK2Jhc3gxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnCitiYXN4MTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcKK2Jhc3gxODIgdG9TY2kgIjEuMjY1RSs4IiAgLT4gJzEuMjY1RSs4JworYmFzeDE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJworCitiYXN4MTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScKK2Jhc3gxOTEgdG9TY2kgIjEyLjY1RS0yMCIgLT4gJzEuMjY1RS0xOScKK2Jhc3gxOTIgdG9TY2kgIjEyLjY1RS04IiAgLT4gJzEuMjY1RS03JworYmFzeDE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnCitiYXN4MTk0IHRvU2NpICIxMi42NUUtMyIgIC0+ICcwLjAxMjY1JworYmFzeDE5NSB0b1NjaSAiMTIuNjVFLTIiICAtPiAnMC4xMjY1JworYmFzeDE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnCitiYXN4MTk3IHRvU2NpICIxMi42NUUtMCIgIC0+ICcxMi42NScKK2Jhc3gxOTggdG9TY2kgIjEyLjY1RSsxIiAgLT4gJzEyNi41JworYmFzeDE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScKK2Jhc3gyMDAgdG9TY2kgIjEyLjY1RSszIiAgLT4gJzEuMjY1RSs0JworYmFzeDIwMSB0b1NjaSAiMTIuNjVFKzQiICAtPiAnMS4yNjVFKzUnCitiYXN4MjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScKK2Jhc3gyMDMgdG9TY2kgIjEyLjY1RSsyMCIgLT4gJzEuMjY1RSsyMScKKworYmFzeDIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnCitiYXN4MjExIHRvU2NpICIxMjYuNUUtMjAiIC0+ICcxLjI2NUUtMTgnCitiYXN4MjEyIHRvU2NpICIxMjYuNUUtOCIgIC0+ICcwLjAwMDAwMTI2NScKK2Jhc3gyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnCitiYXN4MjE0IHRvU2NpICIxMjYuNUUtMyIgIC0+ICcwLjEyNjUnCitiYXN4MjE1IHRvU2NpICIxMjYuNUUtMiIgIC0+ICcxLjI2NScKK2Jhc3gyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1JworYmFzeDIxNyB0b1NjaSAiMTI2LjVFLTAiICAtPiAnMTI2LjUnCitiYXN4MjE4IHRvU2NpICIxMjYuNUUrMSIgIC0+ICcxMjY1JworYmFzeDIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnCitiYXN4MjIwIHRvU2NpICIxMjYuNUUrMyIgIC0+ICcxLjI2NUUrNScKK2Jhc3gyMjEgdG9TY2kgIjEyNi41RSs0IiAgLT4gJzEuMjY1RSs2JworYmFzeDIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJworYmFzeDIyMyB0b1NjaSAiMTI2LjVFKzIwIiAtPiAnMS4yNjVFKzIyJworCitiYXN4MjMwIHRvU2NpICIxMjY1IiAgICAgLT4gJzEyNjUnCitiYXN4MjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycKK2Jhc3gyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScKK2Jhc3gyMzMgdG9TY2kgIjEyNjVFLTQiICAtPiAnMC4xMjY1JworYmFzeDIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScKK2Jhc3gyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnCitiYXN4MjM2IHRvU2NpICIxMjY1RS0xIiAgLT4gJzEyNi41JworYmFzeDIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1JworYmFzeDIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcKK2Jhc3gyMzkgdG9TY2kgIjEyNjVFKzIiICAtPiAnMS4yNjVFKzUnCitiYXN4MjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2JworYmFzeDI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycKK2Jhc3gyNDIgdG9TY2kgIjEyNjVFKzgiICAtPiAnMS4yNjVFKzExJworYmFzeDI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnCisKK2Jhc3gyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnCitiYXN4MjUxIHRvU2NpICIwLjEyNjVFLTIwIiAtPiAnMS4yNjVFLTIxJworYmFzeDI1MiB0b1NjaSAiMC4xMjY1RS04IiAgLT4gJzEuMjY1RS05JworYmFzeDI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnCitiYXN4MjU0IHRvU2NpICIwLjEyNjVFLTMiICAtPiAnMC4wMDAxMjY1JworYmFzeDI1NSB0b1NjaSAiMC4xMjY1RS0yIiAgLT4gJzAuMDAxMjY1JworYmFzeDI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnCitiYXN4MjU3IHRvU2NpICIwLjEyNjVFLTAiICAtPiAnMC4xMjY1JworYmFzeDI1OCB0b1NjaSAiMC4xMjY1RSsxIiAgLT4gJzEuMjY1JworYmFzeDI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1JworYmFzeDI2MCB0b1NjaSAiMC4xMjY1RSszIiAgLT4gJzEyNi41JworYmFzeDI2MSB0b1NjaSAiMC4xMjY1RSs0IiAgLT4gJzEyNjUnCitiYXN4MjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnCitiYXN4MjYzIHRvU2NpICIwLjEyNjVFKzIwIiAtPiAnMS4yNjVFKzE5JworCistLSBzb21lIG1vcmUgbmVnYXRpdmUgemVyb3MgW3N5c3RlbWF0aWMgdGVzdHMgYmVsb3ddCitiYXN4MjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcKK2Jhc3gyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcKK2Jhc3gyOTIgdG9TY2kgIi0wLjAwMEUtMyIgIC0+ICctMC4wMDAwMDAnCitiYXN4MjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnCitiYXN4Mjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcKK2Jhc3gyOTUgdG9TY2kgIi0wLjAwRS0zIiAgIC0+ICctMC4wMDAwMCcKK2Jhc3gyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnCitiYXN4Mjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcKK2Jhc3gyOTggdG9TY2kgIi0wRS0yIiAgICAgIC0+ICctMC4wMCcKK2Jhc3gyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnCisKKy0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzCitiYXN4MzAxICB0b1NjaSAxMGUxMiAgLT4gMS4wRSsxMworYmFzeDMwMiAgdG9FbmcgMTBlMTIgIC0+IDEwRSsxMgorYmFzeDMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTIKK2Jhc3gzMDQgIHRvRW5nIDEwZTExICAtPiAxLjBFKzEyCitiYXN4MzA1ICB0b1NjaSAxMGUxMCAgLT4gMS4wRSsxMQorYmFzeDMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQorYmFzeDMwNyAgdG9TY2kgMTBlOSAgIC0+IDEuMEUrMTAKK2Jhc3gzMDggIHRvRW5nIDEwZTkgICAtPiAxMEUrOQorYmFzeDMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQorYmFzeDMxMCAgdG9FbmcgMTBlOCAgIC0+IDEuMEUrOQorYmFzeDMxMSAgdG9TY2kgMTBlNyAgIC0+IDEuMEUrOAorYmFzeDMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNgorYmFzeDMxMyAgdG9TY2kgMTBlNiAgIC0+IDEuMEUrNworYmFzeDMxNCAgdG9FbmcgMTBlNiAgIC0+IDEwRSs2CitiYXN4MzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2CitiYXN4MzE2ICB0b0VuZyAxMGU1ICAgLT4gMS4wRSs2CitiYXN4MzE3ICB0b1NjaSAxMGU0ICAgLT4gMS4wRSs1CitiYXN4MzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszCitiYXN4MzE5ICB0b1NjaSAxMGUzICAgLT4gMS4wRSs0CitiYXN4MzIwICB0b0VuZyAxMGUzICAgLT4gMTBFKzMKK2Jhc3gzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMKK2Jhc3gzMjIgIHRvRW5nIDEwZTIgICAtPiAxLjBFKzMKK2Jhc3gzMjMgIHRvU2NpIDEwZTEgICAtPiAxLjBFKzIKK2Jhc3gzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDAKK2Jhc3gzMjUgIHRvU2NpIDEwZTAgICAtPiAxMAorYmFzeDMyNiAgdG9FbmcgMTBlMCAgIC0+IDEwCitiYXN4MzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wCitiYXN4MzI4ICB0b0VuZyAxMGUtMSAgLT4gMS4wCitiYXN4MzI5ICB0b1NjaSAxMGUtMiAgLT4gMC4xMAorYmFzeDMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTAKK2Jhc3gzMzEgIHRvU2NpIDEwZS0zICAtPiAwLjAxMAorYmFzeDMzMiAgdG9FbmcgMTBlLTMgIC0+IDAuMDEwCitiYXN4MzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwCitiYXN4MzM0ICB0b0VuZyAxMGUtNCAgLT4gMC4wMDEwCitiYXN4MzM1ICB0b1NjaSAxMGUtNSAgLT4gMC4wMDAxMAorYmFzeDMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTAKK2Jhc3gzMzcgIHRvU2NpIDEwZS02ICAtPiAwLjAwMDAxMAorYmFzeDMzOCAgdG9FbmcgMTBlLTYgIC0+IDAuMDAwMDEwCitiYXN4MzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwCitiYXN4MzQwICB0b0VuZyAxMGUtNyAgLT4gMC4wMDAwMDEwCitiYXN4MzQxICB0b1NjaSAxMGUtOCAgLT4gMS4wRS03CitiYXN4MzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05CitiYXN4MzQzICB0b1NjaSAxMGUtOSAgLT4gMS4wRS04CitiYXN4MzQ0ICB0b0VuZyAxMGUtOSAgLT4gMTBFLTkKK2Jhc3gzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkKK2Jhc3gzNDYgIHRvRW5nIDEwZS0xMCAtPiAxLjBFLTkKK2Jhc3gzNDcgIHRvU2NpIDEwZS0xMSAtPiAxLjBFLTEwCitiYXN4MzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMgorYmFzeDM0OSAgdG9TY2kgMTBlLTEyIC0+IDEuMEUtMTEKK2Jhc3gzNTAgIHRvRW5nIDEwZS0xMiAtPiAxMEUtMTIKK2Jhc3gzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyCitiYXN4MzUyICB0b0VuZyAxMGUtMTMgLT4gMS4wRS0xMgorCitiYXN4MzYxICB0b1NjaSA3RTEyICAtPiA3RSsxMgorYmFzeDM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTIKK2Jhc3gzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExCitiYXN4MzY0ICB0b0VuZyA3RTExICAtPiA3MDBFKzkKK2Jhc3gzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwCitiYXN4MzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQorYmFzeDM2NyAgdG9TY2kgN0U5ICAgLT4gN0UrOQorYmFzeDM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQorYmFzeDM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOAorYmFzeDM3MCAgdG9FbmcgN0U4ICAgLT4gNzAwRSs2CitiYXN4MzcxICB0b1NjaSA3RTcgICAtPiA3RSs3CitiYXN4MzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNgorYmFzeDM3MyAgdG9TY2kgN0U2ICAgLT4gN0UrNgorYmFzeDM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNgorYmFzeDM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQorYmFzeDM3NiAgdG9FbmcgN0U1ICAgLT4gNzAwRSszCitiYXN4Mzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0CitiYXN4Mzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMworYmFzeDM3OSAgdG9TY2kgN0UzICAgLT4gN0UrMworYmFzeDM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMworYmFzeDM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMgorYmFzeDM4MiAgdG9FbmcgN0UyICAgLT4gNzAwCitiYXN4MzgzICB0b1NjaSA3RTEgICAtPiA3RSsxCitiYXN4Mzg0ICB0b0VuZyA3RTEgICAtPiA3MAorYmFzeDM4NSAgdG9TY2kgN0UwICAgLT4gNworYmFzeDM4NiAgdG9FbmcgN0UwICAgLT4gNworYmFzeDM4NyAgdG9TY2kgN0UtMSAgLT4gMC43CitiYXN4Mzg4ICB0b0VuZyA3RS0xICAtPiAwLjcKK2Jhc3gzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcKK2Jhc3gzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcKK2Jhc3gzOTEgIHRvU2NpIDdFLTMgIC0+IDAuMDA3CitiYXN4MzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNworYmFzeDM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3CitiYXN4Mzk0ICB0b0VuZyA3RS00ICAtPiAwLjAwMDcKK2Jhc3gzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcKK2Jhc3gzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcKK2Jhc3gzOTcgIHRvU2NpIDdFLTYgIC0+IDAuMDAwMDA3CitiYXN4Mzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNworYmFzeDM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNworYmFzeDQwMCAgdG9FbmcgN0UtNyAgLT4gNzAwRS05CitiYXN4NDAxICB0b1NjaSA3RS04ICAtPiA3RS04CitiYXN4NDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQorYmFzeDQwMyAgdG9TY2kgN0UtOSAgLT4gN0UtOQorYmFzeDQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQorYmFzeDQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTAKK2Jhc3g0MDYgIHRvRW5nIDdFLTEwIC0+IDcwMEUtMTIKK2Jhc3g0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExCitiYXN4NDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTIKK2Jhc3g0MDkgIHRvU2NpIDdFLTEyIC0+IDdFLTEyCitiYXN4NDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMgorYmFzeDQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMKK2Jhc3g0MTIgIHRvRW5nIDdFLTEzIC0+IDcwMEUtMTUKKworLS0gRXhhY3RzIHJlbWFpbiBleGFjdCB1cCB0byBwcmVjaXNpb24gLi4KK3ByZWNpc2lvbjogOQorYmFzeDQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMAorYmFzeDQyMSAgdG9FbmcgICAgMTAwIC0+IDEwMAorYmFzeDQyMiAgdG9TY2kgICAxMDAwIC0+IDEwMDAKK2Jhc3g0MjMgIHRvRW5nICAgMTAwMCAtPiAxMDAwCitiYXN4NDI0ICB0b1NjaSAgOTk5LjkgLT4gIDk5OS45CitiYXN4NDI1ICB0b0VuZyAgOTk5LjkgLT4gIDk5OS45CitiYXN4NDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wCitiYXN4NDI3ICB0b0VuZyAxMDAwLjAgLT4gMTAwMC4wCitiYXN4NDI4ICB0b1NjaSAxMDAwLjEgLT4gMTAwMC4xCitiYXN4NDI5ICB0b0VuZyAxMDAwLjEgLT4gMTAwMC4xCitiYXN4NDMwICB0b1NjaSAxMDAwMCAtPiAxMDAwMAorYmFzeDQzMSAgdG9FbmcgMTAwMDAgLT4gMTAwMDAKK2Jhc3g0MzIgIHRvU2NpIDEwMDAwMCAtPiAxMDAwMDAKK2Jhc3g0MzMgIHRvRW5nIDEwMDAwMCAtPiAxMDAwMDAKK2Jhc3g0MzQgIHRvU2NpIDEwMDAwMDAgLT4gMTAwMDAwMAorYmFzeDQzNSAgdG9FbmcgMTAwMDAwMCAtPiAxMDAwMDAwCitiYXN4NDM2ICB0b1NjaSAxMDAwMDAwMCAtPiAxMDAwMDAwMAorYmFzeDQzNyAgdG9FbmcgMTAwMDAwMDAgLT4gMTAwMDAwMDAKK2Jhc3g0MzggIHRvU2NpIDEwMDAwMDAwMCAtPiAxMDAwMDAwMDAKK2Jhc3g0MzkgIHRvRW5nIDEwMDAwMDAwMCAtPiAxMDAwMDAwMDAKK2Jhc3g0NDAgIHRvU2NpIDEwMDAwMDAwMDAgICAgLT4gMS4wMDAwMDAwMEUrOSAgICBSb3VuZGVkCitiYXN4NDQxICB0b0VuZyAxMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDBFKzkgICAgUm91bmRlZAorYmFzeDQ0MiAgdG9TY2kgMTAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwRSs5ICAgIFJvdW5kZWQKK2Jhc3g0NDMgIHRvRW5nIDEwMDAwMDAwMDAgICAgLT4gMS4wMDAwMDAwMEUrOSAgICBSb3VuZGVkCitiYXN4NDQ0ICB0b1NjaSAxMDAwMDAwMDAzICAgIC0+IDEuMDAwMDAwMDBFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDQ1ICB0b0VuZyAxMDAwMDAwMDAzICAgIC0+IDEuMDAwMDAwMDBFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDQ2ICB0b1NjaSAxMDAwMDAwMDA1ICAgIC0+IDEuMDAwMDAwMDFFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDQ3ICB0b0VuZyAxMDAwMDAwMDA1ICAgIC0+IDEuMDAwMDAwMDFFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDQ4ICB0b1NjaSAxMDAwMDAwMDA1MCAgIC0+IDEuMDAwMDAwMDFFKzEwICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDQ5ICB0b0VuZyAxMDAwMDAwMDA1MCAgIC0+IDEwLjAwMDAwMDFFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDUwICB0b1NjaSAxMDAwMDAwMDA5ICAgIC0+IDEuMDAwMDAwMDFFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDUxICB0b0VuZyAxMDAwMDAwMDA5ICAgIC0+IDEuMDAwMDAwMDFFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDUyICB0b1NjaSAxMDAwMDAwMDAwMCAgIC0+IDEuMDAwMDAwMDBFKzEwICAgUm91bmRlZAorYmFzeDQ1MyAgdG9FbmcgMTAwMDAwMDAwMDAgICAtPiAxMC4wMDAwMDAwRSs5ICAgIFJvdW5kZWQKK2Jhc3g0NTQgIHRvU2NpIDEwMDAwMDAwMDAzICAgLT4gMS4wMDAwMDAwMEUrMTAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NTUgIHRvRW5nIDEwMDAwMDAwMDAzICAgLT4gMTAuMDAwMDAwMEUrOSAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NTYgIHRvU2NpIDEwMDAwMDAwMDA1ICAgLT4gMS4wMDAwMDAwMEUrMTAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NTcgIHRvRW5nIDEwMDAwMDAwMDA1ICAgLT4gMTAuMDAwMDAwMEUrOSAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NTggIHRvU2NpIDEwMDAwMDAwMDA5ICAgLT4gMS4wMDAwMDAwMEUrMTAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NTkgIHRvRW5nIDEwMDAwMDAwMDA5ICAgLT4gMTAuMDAwMDAwMEUrOSAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NjAgIHRvU2NpIDEwMDAwMDAwMDAwMCAgLT4gMS4wMDAwMDAwMEUrMTEgICBSb3VuZGVkCitiYXN4NDYxICB0b0VuZyAxMDAwMDAwMDAwMDAgIC0+IDEwMC4wMDAwMDBFKzkgICAgUm91bmRlZAorYmFzeDQ2MiAgdG9TY2kgMTAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwRSsxMSAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ2MyAgdG9FbmcgMTAwMDAwMDAwMzAwICAtPiAxMDAuMDAwMDAwRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ2NCAgdG9TY2kgMTAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAxRSsxMSAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ2NSAgdG9FbmcgMTAwMDAwMDAwNTAwICAtPiAxMDAuMDAwMDAxRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ2NiAgdG9TY2kgMTAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAxRSsxMSAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ2NyAgdG9FbmcgMTAwMDAwMDAwOTAwICAtPiAxMDAuMDAwMDAxRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ2OCAgdG9TY2kgMTAwMDAwMDAwMDAwMCAtPiAxLjAwMDAwMDAwRSsxMiAgIFJvdW5kZWQKK2Jhc3g0NjkgIHRvRW5nIDEwMDAwMDAwMDAwMDAgLT4gMS4wMDAwMDAwMEUrMTIgICBSb3VuZGVkCitiYXN4NDcwICB0b1NjaSAxMDAwMDAwMDAzMDAwIC0+IDEuMDAwMDAwMDBFKzEyICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDcxICB0b0VuZyAxMDAwMDAwMDAzMDAwIC0+IDEuMDAwMDAwMDBFKzEyICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDcyICB0b1NjaSAxMDAwMDAwMDA1MDAwIC0+IDEuMDAwMDAwMDFFKzEyICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDczICB0b0VuZyAxMDAwMDAwMDA1MDAwIC0+IDEuMDAwMDAwMDFFKzEyICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDc0ICB0b1NjaSAxMDAwMDAwMDA5MDAwIC0+IDEuMDAwMDAwMDFFKzEyICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDc1ICB0b0VuZyAxMDAwMDAwMDA5MDAwIC0+IDEuMDAwMDAwMDFFKzEyICAgUm91bmRlZCBJbmV4YWN0CisKKy0tIGFsbC1uaW5lcyByb3VuZGluZworcHJlY2lzaW9uOiA5Cityb3VuZGluZzogIGhhbGZfdXAKK2Jhc3gyNzAgIHRvU2NpIDk5OTk5OTk5OSAgICAgICAgICAtPiAgIDk5OTk5OTk5OQorYmFzeDI3MSAgdG9TY2kgOTk5OTk5OTk5MCAgICAgICAgIC0+ICAgOS45OTk5OTk5OUUrOSAgICAgIFJvdW5kZWQKK2Jhc3gyNzIgIHRvU2NpIDk5OTk5OTk5OTEgICAgICAgICAtPiAgIDkuOTk5OTk5OTlFKzkgICAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3gyNzMgIHRvU2NpIDk5OTk5OTk5OTIgICAgICAgICAtPiAgIDkuOTk5OTk5OTlFKzkgICAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3gyNzQgIHRvU2NpIDk5OTk5OTk5OTMgICAgICAgICAtPiAgIDkuOTk5OTk5OTlFKzkgICAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3gyNzUgIHRvU2NpIDk5OTk5OTk5OTQgICAgICAgICAtPiAgIDkuOTk5OTk5OTlFKzkgICAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3gyNzYgIHRvU2NpIDk5OTk5OTk5OTUgICAgICAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3gyNzcgIHRvU2NpIDk5OTk5OTk5OTYgICAgICAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3gyNzggIHRvU2NpIDk5OTk5OTk5OTcgICAgICAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3gyNzkgIHRvU2NpIDk5OTk5OTk5OTggICAgICAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3gyODAgIHRvU2NpIDk5OTk5OTk5OTkgICAgICAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3gyODEgIHRvU2NpIDk5OTk5OTk5OTk5OTk5OTkgICAtPiAgIDEuMDAwMDAwMDBFKzE2ICAgICBSb3VuZGVkIEluZXhhY3QKKworLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkCitwcmVjaXNpb246IDUKK3JvdW5kaW5nOiAgY2VpbGluZworYnNyeDQwMSAgdG9TY2kgIDEuMjM0NTAgICAgLT4gIDEuMjM0NSAgUm91bmRlZAorYnNyeDQwMiAgdG9TY2kgIDEuMjM0NTQ5ICAgLT4gIDEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NDAzICB0b1NjaSAgMS4yMzQ1NTAgICAtPiAgMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MDQgIHRvU2NpICAxLjIzNDU1MSAgIC0+ICAxLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICB1cAorYnNyeDQwNSAgdG9TY2kgIDEuMjM0NTAgICAgLT4gIDEuMjM0NSAgUm91bmRlZAorYnNyeDQwNiAgdG9TY2kgIDEuMjM0NTQ5ICAgLT4gIDEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NDA3ICB0b1NjaSAgMS4yMzQ1NTAgICAtPiAgMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MDggIHRvU2NpICAxLjIzNDU1MSAgIC0+ICAxLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorYnNyeDQxMCAgdG9TY2kgIDEuMjM0NTAgICAgLT4gIDEuMjM0NSAgUm91bmRlZAorYnNyeDQxMSAgdG9TY2kgIDEuMjM0NTQ5ICAgLT4gIDEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NDEyICB0b1NjaSAgMS4yMzQ1NTAgICAtPiAgMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MTMgIHRvU2NpICAxLjIzNDU1MSAgIC0+ICAxLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2Jzcng0MTUgIHRvU2NpICAxLjIzNDUwICAgIC0+ICAxLjIzNDUgIFJvdW5kZWQKK2Jzcng0MTYgIHRvU2NpICAxLjIzNDU0OSAgIC0+ICAxLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQxNyAgdG9TY2kgIDEuMjM0NTUwICAgLT4gIDEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NDE4ICB0b1NjaSAgMS4yMzQ2NTAgICAtPiAgMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MTkgIHRvU2NpICAxLjIzNDU1MSAgIC0+ICAxLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2Jzcng0MjEgIHRvU2NpICAxLjIzNDUwICAgIC0+ICAxLjIzNDUgIFJvdW5kZWQKK2Jzcng0MjIgIHRvU2NpICAxLjIzNDU0OSAgIC0+ICAxLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQyMyAgdG9TY2kgIDEuMjM0NTUwICAgLT4gIDEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NDI0ICB0b1NjaSAgMS4yMzQ2NTAgICAtPiAgMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MjUgIHRvU2NpICAxLjIzNDU1MSAgIC0+ICAxLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBkb3duCitic3J4NDI2ICB0b1NjaSAgMS4yMzQ1MCAgICAtPiAgMS4yMzQ1ICBSb3VuZGVkCitic3J4NDI3ICB0b1NjaSAgMS4yMzQ1NDkgICAtPiAgMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MjggIHRvU2NpICAxLjIzNDU1MCAgIC0+ICAxLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQyOSAgdG9TY2kgIDEuMjM0NTUxICAgLT4gIDEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2Jzcng0MzEgIHRvU2NpICAxLjIzNDUwICAgIC0+ICAxLjIzNDUgIFJvdW5kZWQKK2Jzcng0MzIgIHRvU2NpICAxLjIzNDU0OSAgIC0+ICAxLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQzMyAgdG9TY2kgIDEuMjM0NTUwICAgLT4gIDEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NDM0ICB0b1NjaSAgMS4yMzQ2NTAgICAtPiAgMS4yMzQ3ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MzUgIHRvU2NpICAxLjIzNDU1MSAgIC0+ICAxLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorLS0gbmVnYXRpdmVzCityb3VuZGluZzogIGNlaWxpbmcKK2Jzcng1MDEgIHRvU2NpIC0xLjIzNDUwICAgIC0+IC0xLjIzNDUgIFJvdW5kZWQKK2Jzcng1MDIgIHRvU2NpIC0xLjIzNDU0OSAgIC0+IC0xLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUwMyAgdG9TY2kgLTEuMjM0NTUwICAgLT4gLTEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NTA0ICB0b1NjaSAtMS4yMzQ1NTEgICAtPiAtMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2Jzcng1MDUgIHRvU2NpIC0xLjIzNDUwICAgIC0+IC0xLjIzNDUgIFJvdW5kZWQKK2Jzcng1MDYgIHRvU2NpIC0xLjIzNDU0OSAgIC0+IC0xLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUwNyAgdG9TY2kgLTEuMjM0NTUwICAgLT4gLTEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NTA4ICB0b1NjaSAtMS4yMzQ1NTEgICAtPiAtMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZmxvb3IKK2Jzcng1MTAgIHRvU2NpIC0xLjIzNDUwICAgIC0+IC0xLjIzNDUgIFJvdW5kZWQKK2Jzcng1MTEgIHRvU2NpIC0xLjIzNDU0OSAgIC0+IC0xLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUxMiAgdG9TY2kgLTEuMjM0NTUwICAgLT4gLTEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NTEzICB0b1NjaSAtMS4yMzQ1NTEgICAtPiAtMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitic3J4NTE1ICB0b1NjaSAtMS4yMzQ1MCAgICAtPiAtMS4yMzQ1ICBSb3VuZGVkCitic3J4NTE2ICB0b1NjaSAtMS4yMzQ1NDkgICAtPiAtMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MTcgIHRvU2NpIC0xLjIzNDU1MCAgIC0+IC0xLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUxOCAgdG9TY2kgLTEuMjM0NjUwICAgLT4gLTEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NTE5ICB0b1NjaSAtMS4yMzQ1NTEgICAtPiAtMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitic3J4NTIxICB0b1NjaSAtMS4yMzQ1MCAgICAtPiAtMS4yMzQ1ICBSb3VuZGVkCitic3J4NTIyICB0b1NjaSAtMS4yMzQ1NDkgICAtPiAtMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MjMgIHRvU2NpIC0xLjIzNDU1MCAgIC0+IC0xLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUyNCAgdG9TY2kgLTEuMjM0NjUwICAgLT4gLTEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NTI1ICB0b1NjaSAtMS4yMzQ1NTEgICAtPiAtMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorYnNyeDUyNiAgdG9TY2kgLTEuMjM0NTAgICAgLT4gLTEuMjM0NSAgUm91bmRlZAorYnNyeDUyNyAgdG9TY2kgLTEuMjM0NTQ5ICAgLT4gLTEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NTI4ICB0b1NjaSAtMS4yMzQ1NTAgICAtPiAtMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MjkgIHRvU2NpIC0xLjIzNDU1MSAgIC0+IC0xLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX3VwCitic3J4NTMxICB0b1NjaSAtMS4yMzQ1MCAgICAtPiAtMS4yMzQ1ICBSb3VuZGVkCitic3J4NTMyICB0b1NjaSAtMS4yMzQ1NDkgICAtPiAtMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MzMgIHRvU2NpIC0xLjIzNDU1MCAgIC0+IC0xLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUzNCAgdG9TY2kgLTEuMjM0NjUwICAgLT4gLTEuMjM0NyAgUm91bmRlZCBJbmV4YWN0Citic3J4NTM1ICB0b1NjaSAtMS4yMzQ1NTEgICAtPiAtMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKKworLS0gYSBmZXcgbGFyZ2VyIGV4cG9uZW50cworbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluRXhwb25lbnQ6IC05OTk5OTk5OTkKK2Jhc3g0ODAgdG9TY2kgIjAuMDllOTk5IiAgLT4gJzlFKzk5NycKK2Jhc3g0ODEgdG9TY2kgIjAuOWU5OTkiICAgLT4gJzlFKzk5OCcKK2Jhc3g0ODIgdG9TY2kgIjllOTk5IiAgICAgLT4gJzlFKzk5OScKK2Jhc3g0ODMgdG9TY2kgIjkuOWU5OTkiICAgLT4gJzkuOUUrOTk5JworYmFzeDQ4NCB0b1NjaSAiOS45OWU5OTkiICAtPiAnOS45OUUrOTk5JworYmFzeDQ4NSB0b1NjaSAiOS45OWUtOTk5IiAtPiAnOS45OUUtOTk5JworYmFzeDQ4NiB0b1NjaSAiOS45ZS05OTkiICAtPiAnOS45RS05OTknCitiYXN4NDg3IHRvU2NpICI5ZS05OTkiICAgIC0+ICc5RS05OTknCitiYXN4NDg5IHRvU2NpICI5OWUtOTk5IiAgIC0+ICc5LjlFLTk5OCcKK2Jhc3g0OTAgdG9TY2kgIjk5OWUtOTk5IiAgLT4gJzkuOTlFLTk5NycKK2Jhc3g0OTEgdG9TY2kgJzAuOWUtOTk4JyAgLT4gJzlFLTk5OScKK2Jhc3g0OTIgdG9TY2kgJzAuMDllLTk5NycgLT4gJzlFLTk5OScKK2Jhc3g0OTMgdG9TY2kgJzAuMWUxMDAwJyAgLT4gJzFFKzk5OScKK2Jhc3g0OTQgdG9TY2kgJzEwZS0xMDAwJyAgLT4gJzEuMEUtOTk5JworCityb3VuZGluZzogIGhhbGZfdXAKK3ByZWNpc2lvbjogOQorCistLSBUaGUgJ2JhZGRpZXMnIHRlc3RzIGZyb20gRGlhZ0JpZ0RlY2ltYWwsIHBsdXMgc29tZSBuZXcgb25lcworYmFzeDUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MDEgdG9TY2kgJy4nICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTAyIHRvU2NpICcuLicgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MDQgdG9TY2kgJy0tMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTA1IHRvU2NpICctKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MDcgdG9TY2kgJzEyZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTA4IHRvU2NpICcxMmUrKycgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MTAgdG9TY2kgJyArMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTExIHRvU2NpICcrIDEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MTMgdG9TY2kgJyArIDEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTE0IHRvU2NpICcgLSAxICcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MTYgdG9TY2kgJy0xLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTE3IHRvU2NpICcxMi0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MTkgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTIwIHRvU2NpICcxZS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MjIgdG9TY2kgJzdlMTIzNTY3ODkweCcgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTIzIHRvU2NpICc3ZTEyMzU2Nzg5MDEyeCcgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MjUgdG9TY2kgJ2UxMDAnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTI2IHRvU2NpICdcdTBlNWEnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MjggdG9TY2kgJzEyMyw2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTI5IHRvU2NpICcxLjM0LjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MzEgdG9TY2kgJzAxLjM1LicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTMyIHRvU2NpICcwMS4zNS0nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MzQgdG9TY2kgJy4wMDAwLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTM1IHRvU2NpICcwMC4uMDAnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MzcgdG9TY2kgJzExMWUxMjMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTM4IHRvU2NpICcxMTFlKzEyKycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NDAgdG9TY2kgJzExMWUxKjIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTQxIHRvU2NpICcxMTFlMWUrMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NDMgdG9TY2kgJzFlMTIzZScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTQ0IHRvU2NpICd0ZW4nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NDYgdG9TY2kgJzFlLjEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTQ3IHRvU2NpICcxZTEuJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NDkgdG9TY2kgJ2UrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTUwIHRvU2NpICcxLjIzLjQnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NTIgdG9TY2kgJzFFKzEuMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTUzIHRvU2NpICcxRSsxLjIuMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NTUgdG9TY2kgJzFFLS0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTU2IHRvU2NpICcxRSstMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NTggdG9TY2kgJzFFJycxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTU5IHRvU2NpICIxRSIiMSIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKy0tIE5lYXItc3BlY2lhbHMKK2Jhc3g1NjEgdG9TY2kgInFOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU2MyB0b1NjaSAiTmFOcyIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NjQgdG9TY2kgIkluZmkiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU2NiB0b1NjaSAiSW5maW5pIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NjcgdG9TY2kgIkluZmluaXQiICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU2OSB0b1NjaSAiMEluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NzAgdG9TY2kgIjlJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU3MiB0b1NjaSAiLTlJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NzMgdG9TY2kgIi1zTmEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU3NSB0b1NjaSAiMHNOYU4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzCitiYXN4NTc2IHRvU2NpICAnZSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NzcgdG9TY2kgICcuZSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTc5IHRvU2NpICAnLS5lKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1ODAgdG9TY2kgICctLmUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTgyIHRvU2NpICAnLkUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1ODMgdG9TY2kgICcrLkUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTg1IHRvU2NpICAnLS5FJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworYmFzeDU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTg3IHRvU2NpICAnLS5OYU4nICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1ODggdG9TY2kgICcrLnNOYU4nICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTkwIHRvU2NpICAnLkluZmluaXR5JyAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworLS0gWmVyb3MKK2Jhc3g2MDEgdG9TY2kgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQorYmFzeDYwMiB0b1NjaSAwLjAwMDAwMDAwICAgICAgICAtPiAwRS04CitiYXN4NjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcKK2Jhc3g2MDQgdG9TY2kgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2Jhc3g2MDUgdG9TY2kgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorYmFzeDYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKK2Jhc3g2MDcgdG9TY2kgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2Jhc3g2MDggdG9TY2kgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorYmFzeDYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjAKK2Jhc3g2MTAgdG9TY2kgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitiYXN4NjExIHRvU2NpIDAuICAgICAgICAgICAgICAgIC0+IDAKK2Jhc3g2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAorYmFzeDYxMyB0b1NjaSAtMC4gICAgICAgICAgICAgICAtPiAtMAorYmFzeDYxNCB0b1NjaSAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitiYXN4NjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCitiYXN4NjE2IHRvU2NpIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorYmFzeDYxNyB0b1NjaSAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitiYXN4NjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCitiYXN4NjE5IHRvU2NpIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorYmFzeDYyMCB0b1NjaSAtMC4wMDAwMDAwICAgICAgICAtPiAtMEUtNworYmFzeDYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOAorYmFzeDYyMiB0b1NjaSAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQorCitiYXN4NjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2Jhc3g2MzEgdG9TY2kgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitiYXN4NjMyIHRvU2NpICAwLjAwRSsyICAgICAgICAgIC0+IDAKK2Jhc3g2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQorYmFzeDYzNCB0b1NjaSAgMC4wMEUrNCAgICAgICAgICAtPiAwRSsyCitiYXN4NjM1IHRvU2NpICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKK2Jhc3g2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNAorYmFzeDYzNyB0b1NjaSAgMC4wMEUrNyAgICAgICAgICAtPiAwRSs1CitiYXN4NjM4IHRvU2NpICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2Jhc3g2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNworCitiYXN4NjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAorYmFzeDY0MSB0b1NjaSAgMC4wRSsxICAgICAgICAgICAtPiAwCitiYXN4NjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzEKK2Jhc3g2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMgorYmFzeDY0NCB0b1NjaSAgMC4wRSs0ICAgICAgICAgICAtPiAwRSszCitiYXN4NjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQKK2Jhc3g2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQorYmFzeDY0NyB0b1NjaSAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2CitiYXN4NjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcKK2Jhc3g2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOAorCitiYXN4NjUwIHRvU2NpICAwRSswICAgICAgICAgICAgIC0+IDAKK2Jhc3g2NTEgdG9TY2kgIDBFKzEgICAgICAgICAgICAgLT4gMEUrMQorYmFzeDY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyCitiYXN4NjUzIHRvU2NpICAwRSszICAgICAgICAgICAgIC0+IDBFKzMKK2Jhc3g2NTQgdG9TY2kgIDBFKzQgICAgICAgICAgICAgLT4gMEUrNAorYmFzeDY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1CitiYXN4NjU2IHRvU2NpICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKK2Jhc3g2NTcgdG9TY2kgIDBFKzcgICAgICAgICAgICAgLT4gMEUrNworYmFzeDY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4CitiYXN4NjU5IHRvU2NpICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworYmFzeDY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2Jhc3g2NjEgdG9TY2kgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAorYmFzeDY2MiB0b1NjaSAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorYmFzeDY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2Jhc3g2NjQgdG9TY2kgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAorYmFzeDY2NSB0b1NjaSAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorYmFzeDY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03CitiYXN4NjY3IHRvU2NpICAwLjBFLTcgICAgICAgICAgIC0+IDBFLTgKK2Jhc3g2NjggdG9TY2kgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQorYmFzeDY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMAorCitiYXN4NjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKK2Jhc3g2NzEgdG9TY2kgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2Jhc3g2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitiYXN4NjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKK2Jhc3g2NzQgdG9TY2kgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2Jhc3g2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNworYmFzeDY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04CitiYXN4Njc3IHRvU2NpICAwLjAwRS03ICAgICAgICAgIC0+IDBFLTkKK2Jhc3g2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTAKK2Jhc3g2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTEKKworYmFzeDY4MCB0b1NjaSAgMDAwMDAwLiAgICAgICAgICAtPiAgMAorYmFzeDY4MSB0b1NjaSAgIDAwMDAwLiAgICAgICAgICAtPiAgMAorYmFzeDY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMAorYmFzeDY4MyB0b1NjaSAgICAgMDAwLiAgICAgICAgICAtPiAgMAorYmFzeDY4NCB0b1NjaSAgICAgIDAwLiAgICAgICAgICAtPiAgMAorYmFzeDY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMAorYmFzeDY4NiB0b1NjaSAgKzAwMDAwLiAgICAgICAgICAtPiAgMAorYmFzeDY4NyB0b1NjaSAgLTAwMDAwLiAgICAgICAgICAtPiAtMAorYmFzeDY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMAorYmFzeDY4OSB0b1NjaSAgLTAuICAgICAgICAgICAgICAtPiAtMAorCistLSBTcGVjaWFscworcHJlY2lzaW9uOiA0CitiYXN4NzAwIHRvU2NpICJOYU4iICAgICAgICAgICAgIC0+IE5hTgorYmFzeDcwMSB0b1NjaSAibmFuIiAgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFOCitiYXN4NzAzIHRvU2NpICJOQU4iICAgICAgICAgICAgIC0+IE5hTgorYmFzeDcwNCB0b1NjaSAiK05hTiIgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFOCitiYXN4NzA2IHRvU2NpICIrbkFuIiAgICAgICAgICAgIC0+IE5hTgorYmFzeDcwNyB0b1NjaSAiK05BTiIgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTgorYmFzeDcwOSB0b1NjaSAiLW5hbiIgICAgICAgICAgICAtPiAtTmFOCitiYXN4NzEwIHRvU2NpICItbkFuIiAgICAgICAgICAgIC0+IC1OYU4KK2Jhc3g3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTgorYmFzeDcxMiB0b1NjaSAnTmFOMCcgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3MTMgdG9TY2kgJ05hTjEnICAgICAgICAgICAgLT4gTmFOMQorYmFzeDcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMgorYmFzeDcxNSB0b1NjaSAnTmFOMTIzJyAgICAgICAgICAtPiBOYU4xMjMKK2Jhc3g3MTYgdG9TY2kgJ05hTjEyMzQnICAgICAgICAgLT4gTmFOMTIzNAorYmFzeDcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xCitiYXN4NzE4IHRvU2NpICdOYU4wMTInICAgICAgICAgIC0+IE5hTjEyCitiYXN4NzE5IHRvU2NpICdOYU4wMTIzJyAgICAgICAgIC0+IE5hTjEyMworYmFzeDcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0CitiYXN4NzIxIHRvU2NpICdOYU4wMDEnICAgICAgICAgIC0+IE5hTjEKK2Jhc3g3MjIgdG9TY2kgJ05hTjAwMTInICAgICAgICAgLT4gTmFOMTIKK2Jhc3g3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzCitiYXN4NzI0IHRvU2NpICdOYU4wMDEyMzQnICAgICAgIC0+IE5hTjEyMzQKK2Jhc3g3MjUgdG9TY2kgJ05hTjEyMzQ1JyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDcyNyB0b1NjaSAnTmFOMTIuNDUnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g3MjggdG9TY2kgJ05hTi0xMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitiYXN4NzMwIHRvU2NpICJzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTgorYmFzeDczMiB0b1NjaSAiU25BbiIgICAgICAgICAgICAtPiBzTmFOCitiYXN4NzMzIHRvU2NpICJTTkFOIiAgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTgorYmFzeDczNSB0b1NjaSAiK3NuYW4iICAgICAgICAgICAtPiBzTmFOCitiYXN4NzM2IHRvU2NpICIrU25BbiIgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTgorYmFzeDczOCB0b1NjaSAiLXNOYU4iICAgICAgICAgICAtPiAtc05hTgorYmFzeDczOSB0b1NjaSAiLXNuYW4iICAgICAgICAgICAtPiAtc05hTgorYmFzeDc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTgorYmFzeDc0MSB0b1NjaSAiLVNOQU4iICAgICAgICAgICAtPiAtc05hTgorYmFzeDc0MiB0b1NjaSAnc05hTjAwMDAnICAgICAgICAtPiBzTmFOCitiYXN4NzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43CitiYXN4NzQ0IHRvU2NpICdzTmFOMDA3MjM0JyAgICAgIC0+IHNOYU43MjM0CitiYXN4NzQ1IHRvU2NpICdzTmFONzIzNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDc0NiB0b1NjaSAnc05hTjcyLjQ1JyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2Jhc3g3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NDkgdG9TY2kgImluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NTAgdG9TY2kgImlOZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NTIgdG9TY2kgIitJbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NTMgdG9TY2kgIitpbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NTUgdG9TY2kgIitJTkYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NTYgdG9TY2kgIi1JbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitiYXN4NzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorYmFzeDc1OCB0b1NjaSAiLWlOZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2Jhc3g3NTkgdG9TY2kgIi1JTkYiICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2Jhc3g3NjAgdG9TY2kgIkluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NjEgdG9TY2kgImluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NjMgdG9TY2kgIklORklOSVRZIiAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NjQgdG9TY2kgIitJbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NjYgdG9TY2kgIitpTmZJbkl0WSIgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NjcgdG9TY2kgIitJTkZJTklUWSIgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5CitiYXN4NzY5IHRvU2NpICItaW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQorYmFzeDc3MCB0b1NjaSAiLWlOZkluSXRZIiAgICAgICAtPiAtSW5maW5pdHkKK2Jhc3g3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5CisKKy0tIFNwZWNpYWxzIGFuZCB6ZXJvcyBmb3IgdG9FbmcKK2Jhc3g3NzIgdG9FbmcgIk5hTiIgICAgICAgICAgICAgIC0+IE5hTgorYmFzeDc3MyB0b0VuZyAiLUluZmluaXR5IiAgICAgICAgLT4gLUluZmluaXR5CitiYXN4Nzc0IHRvRW5nICItc05hTiIgICAgICAgICAgICAtPiAtc05hTgorYmFzeDc3NSB0b0VuZyAiLU5hTiIgICAgICAgICAgICAgLT4gLU5hTgorYmFzeDc3NiB0b0VuZyAiK0luZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3NzggdG9FbmcgIitzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3NzkgdG9FbmcgIitOYU4iICAgICAgICAgICAgIC0+IE5hTgorYmFzeDc4MCB0b0VuZyAiSU5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3ODEgdG9FbmcgIlNOQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3ODIgdG9FbmcgIk5BTiIgICAgICAgICAgICAgIC0+IE5hTgorYmFzeDc4MyB0b0VuZyAiaW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3ODQgdG9FbmcgInNuYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3ODUgdG9FbmcgIm5hbiIgICAgICAgICAgICAgIC0+IE5hTgorYmFzeDc4NiB0b0VuZyAiSW5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3ODcgdG9FbmcgIlNuQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3ODggdG9FbmcgIm5BTiIgICAgICAgICAgICAgIC0+IE5hTgorYmFzeDc4OSB0b0VuZyAiaU5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3OTAgdG9FbmcgInNOYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3OTEgdG9FbmcgIk5hbiIgICAgICAgICAgICAgIC0+IE5hTgorYmFzeDc5MiB0b0VuZyAiSW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2Jhc3g3OTMgdG9FbmcgInNOYU4iICAgICAgICAgICAgIC0+IHNOYU4KKworLS0gWmVybyB0b0VuZywgZXRjLgorYmFzeDgwMCB0b0VuZyAwZSsxICAgICAgICAgICAgICAtPiAiMC4wMEUrMyIgIC0tIGRvYyBleGFtcGxlCisKK2Jhc3g4MDEgdG9FbmcgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQorYmFzeDgwMiB0b0VuZyAwLjAwMDAwMDAwICAgICAgICAtPiAwLjAwRS02CitiYXN4ODAzIHRvRW5nIDAuMDAwMDAwMCAgICAgICAgIC0+IDAuMEUtNgorYmFzeDgwNCB0b0VuZyAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorYmFzeDgwNSB0b0VuZyAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitiYXN4ODA2IHRvRW5nIDAuMDAwMCAgICAgICAgICAgIC0+IDAuMDAwMAorYmFzeDgwNyB0b0VuZyAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorYmFzeDgwOCB0b0VuZyAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitiYXN4ODA5IHRvRW5nIDAuMCAgICAgICAgICAgICAgIC0+IDAuMAorYmFzeDgxMCB0b0VuZyAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2Jhc3g4MTEgdG9FbmcgMC4gICAgICAgICAgICAgICAgLT4gMAorYmFzeDgxMiB0b0VuZyAtLjAgICAgICAgICAgICAgICAtPiAtMC4wCitiYXN4ODEzIHRvRW5nIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitiYXN4ODE0IHRvRW5nIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2Jhc3g4MTUgdG9FbmcgLTAuMDAgICAgICAgICAgICAgLT4gLTAuMDAKK2Jhc3g4MTYgdG9FbmcgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitiYXN4ODE3IHRvRW5nIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2Jhc3g4MTggdG9FbmcgLTAuMDAwMDAgICAgICAgICAgLT4gLTAuMDAwMDAKK2Jhc3g4MTkgdG9FbmcgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitiYXN4ODIwIHRvRW5nIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wLjBFLTYKK2Jhc3g4MjEgdG9FbmcgLTAuMDAwMDAwMDAgICAgICAgLT4gLTAuMDBFLTYKK2Jhc3g4MjIgdG9FbmcgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKKworYmFzeDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitiYXN4ODMxIHRvRW5nICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorYmFzeDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwCitiYXN4ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMKK2Jhc3g4MzQgdG9FbmcgIDAuMDBFKzQgICAgICAgICAgLT4gMC4wRSszCitiYXN4ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKK2Jhc3g4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNgorYmFzeDgzNyB0b0VuZyAgMC4wMEUrNyAgICAgICAgICAtPiAwLjBFKzYKK2Jhc3g4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorYmFzeDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5CisKK2Jhc3g4NDAgdG9FbmcgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wCitiYXN4ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2Jhc3g4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMworYmFzeDg0MyB0b0VuZyAgMC4wRSszICAgICAgICAgICAtPiAwLjBFKzMKK2Jhc3g4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMworYmFzeDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2CitiYXN4ODQ2IHRvRW5nICAwLjBFKzYgICAgICAgICAgIC0+IDAuMEUrNgorYmFzeDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2CitiYXN4ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkKK2Jhc3g4NDkgdG9FbmcgIDAuMEUrOSAgICAgICAgICAgLT4gMC4wRSs5CisKK2Jhc3g4NTAgdG9FbmcgIDBFKzAgICAgICAgICAgICAgLT4gMAorYmFzeDg1MSB0b0VuZyAgMEUrMSAgICAgICAgICAgICAtPiAwLjAwRSszCitiYXN4ODUyIHRvRW5nICAwRSsyICAgICAgICAgICAgIC0+IDAuMEUrMworYmFzeDg1MyB0b0VuZyAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCitiYXN4ODU0IHRvRW5nICAwRSs0ICAgICAgICAgICAgIC0+IDAuMDBFKzYKK2Jhc3g4NTUgdG9FbmcgIDBFKzUgICAgICAgICAgICAgLT4gMC4wRSs2CitiYXN4ODU2IHRvRW5nICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKK2Jhc3g4NTcgdG9FbmcgIDBFKzcgICAgICAgICAgICAgLT4gMC4wMEUrOQorYmFzeDg1OCB0b0VuZyAgMEUrOCAgICAgICAgICAgICAtPiAwLjBFKzkKK2Jhc3g4NTkgdG9FbmcgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitiYXN4ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorYmFzeDg2MSB0b0VuZyAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwCitiYXN4ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitiYXN4ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorYmFzeDg2NCB0b0VuZyAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwCitiYXN4ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitiYXN4ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNgorYmFzeDg2NyB0b0VuZyAgMC4wRS03ICAgICAgICAgICAtPiAwLjAwRS02CitiYXN4ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKK2Jhc3g4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05CisKK2Jhc3g4NzAgdG9FbmcgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMAorYmFzeDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorYmFzeDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2Jhc3g4NzMgdG9FbmcgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMAorYmFzeDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorYmFzeDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYKK2Jhc3g4NzYgdG9FbmcgIDAuMDBFLTYgICAgICAgICAgLT4gMC4wMEUtNgorYmFzeDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05CitiYXN4ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQorYmFzeDg3OSB0b0VuZyAgMC4wMEUtOSAgICAgICAgICAtPiAwLjAwRS05CisKKworcm91bmRpbmc6ICBoYWxmX3VwCitwcmVjaXNpb246IDkKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cworYmFzeDkwNiB0b1NjaSAnOTllOTk5OTk5OTk5JyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTA3IHRvU2NpICc5OTllOTk5OTk5OTk5JyAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gOUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK2Jhc3g5MDkgdG9TY2kgJzAuMDllLTk5OTk5OTk5OScgICAgLT4gOUUtMTAwMDAwMDAwMSBTdWJub3JtYWwKK2Jhc3g5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gMUUrOTk5OTk5OTk5CitiYXN4OTExIHRvU2NpICcxMGUtMTAwMDAwMDAwMCcgICAgIC0+IDEuMEUtOTk5OTk5OTk5CitiYXN4OTEyIHRvU2NpICcwLjllOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitiYXN4OTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5MTUgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTknICAgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitiYXN4OTE2IHRvU2NpICcxMTExZS05OTk5OTk5OTk5OScgIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorYmFzeDkxNyB0b1NjaSAnN2UxMDAwMDAwMDAwJyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMgdGhlIHNhbWUKK2Jhc3g5MTggdG9TY2kgJy05OWU5OTk5OTk5OTknICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5MjAgdG9TY2kgJy0wLjllLTk5OTk5OTk5OScgICAgLT4gLTlFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCitiYXN4OTIxIHRvU2NpICctMC4wOWUtOTk5OTk5OTk5JyAgIC0+IC05RS0xMDAwMDAwMDAxIFN1Ym5vcm1hbAorYmFzeDkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtMUUrOTk5OTk5OTk5CitiYXN4OTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0xLjBFLTk5OTk5OTk5OQorYmFzeDkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorYmFzeDkyNSB0b1NjaSAnLTk5ZS05OTk5OTk5OTk5JyAgICAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitiYXN4OTI2IHRvU2NpICctMTExZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTI3IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OScgIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Jhc3g5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorYmFzeDkyOSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGNlaWxpbmcKK2Jhc3g5MzAgdG9TY2kgICc3ZTEwMDAwMDAwMDAnICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5MzEgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIHVwCitiYXN4OTMyIHRvU2NpICAnN2UxMDAwMDAwMDAwJyAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTMzIHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIGRvd24KK2Jhc3g5MzQgdG9TY2kgICc3ZTEwMDAwMDAwMDAnICAgICAgLT4gIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTM1IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBmbG9vcgorYmFzeDkzNiB0b1NjaSAgJzdlMTAwMDAwMDAwMCcgICAgICAtPiAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5MzcgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX3VwCitiYXN4OTM4IHRvU2NpICAnN2UxMDAwMDAwMDAwJyAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTM5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIGhhbGZfZXZlbgorYmFzeDk0MCB0b1NjaSAgJzdlMTAwMDAwMDAwMCcgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorYmFzeDk0MSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2Jhc3g5NDIgdG9TY2kgICc3ZTEwMDAwMDAwMDAnICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5NDMgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KKworCistLSBHaWdhIGV4cG9uZW50IGluaXRpYWwgdGVzdHMKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbkV4cG9uZW50OiAtOTk5OTk5OTk5CisKK2Jhc3g5NTEgdG9TY2kgJzk5ZTk5OScgICAgICAgICAgLT4gJzkuOUUrMTAwMCcKK2Jhc3g5NTIgdG9TY2kgJzk5OWU5OTknICAgICAgICAgLT4gJzkuOTlFKzEwMDEnCitiYXN4OTUzIHRvU2NpICcwLjllLTk5OScgICAgICAgIC0+ICc5RS0xMDAwJworYmFzeDk1NCB0b1NjaSAnMC4wOWUtOTk5JyAgICAgICAtPiAnOUUtMTAwMScKK2Jhc3g5NTUgdG9TY2kgJzAuMWUxMDAxJyAgICAgICAgLT4gJzFFKzEwMDAnCitiYXN4OTU2IHRvU2NpICcxMGUtMTAwMScgICAgICAgIC0+ICcxLjBFLTEwMDAnCitiYXN4OTU3IHRvU2NpICcwLjllOTk5OScgICAgICAgIC0+ICc5RSs5OTk4JworYmFzeDk1OCB0b1NjaSAnOTllLTk5OTknICAgICAgICAtPiAnOS45RS05OTk4JworYmFzeDk1OSB0b1NjaSAnMTExZTk5OTcnICAgICAgICAtPiAnMS4xMUUrOTk5OScKK2Jhc3g5NjAgdG9TY2kgJzExMTFlLTk5OTknICAgICAgLT4gJzEuMTExRS05OTk2JworYmFzeDk2MSB0b1NjaSAnOTllOTk5OScgICAgICAgICAtPiAnOS45RSsxMDAwMCcKK2Jhc3g5NjIgdG9TY2kgJzk5OWU5OTk5JyAgICAgICAgLT4gJzkuOTlFKzEwMDAxJworYmFzeDk2MyB0b1NjaSAnMC45ZS05OTk5JyAgICAgICAtPiAnOUUtMTAwMDAnCitiYXN4OTY0IHRvU2NpICcwLjA5ZS05OTk5JyAgICAgIC0+ICc5RS0xMDAwMScKK2Jhc3g5NjUgdG9TY2kgJzAuMWUxMDAwMScgICAgICAgLT4gJzFFKzEwMDAwJworYmFzeDk2NiB0b1NjaSAnMTBlLTEwMDAxJyAgICAgICAtPiAnMS4wRS0xMDAwMCcKK2Jhc3g5NjcgdG9TY2kgJzAuOWU5OTk5OScgICAgICAgLT4gJzlFKzk5OTk4JworYmFzeDk2OCB0b1NjaSAnOTllLTk5OTk5JyAgICAgICAtPiAnOS45RS05OTk5OCcKK2Jhc3g5NjkgdG9TY2kgJzExMWU5OTk5OScgICAgICAgLT4gJzEuMTFFKzEwMDAwMScKK2Jhc3g5NzAgdG9TY2kgJzExMTFlLTk5OTk5JyAgICAgLT4gJzEuMTExRS05OTk5NicKK2Jhc3g5NzEgdG9TY2kgIjAuMDllOTk5OTk5OTk5IiAgLT4gJzlFKzk5OTk5OTk5NycKK2Jhc3g5NzIgdG9TY2kgIjAuOWU5OTk5OTk5OTkiICAgLT4gJzlFKzk5OTk5OTk5OCcKK2Jhc3g5NzMgdG9TY2kgIjllOTk5OTk5OTk5IiAgICAgLT4gJzlFKzk5OTk5OTk5OScKK2Jhc3g5NzQgdG9TY2kgIjkuOWU5OTk5OTk5OTkiICAgLT4gJzkuOUUrOTk5OTk5OTk5JworYmFzeDk3NSB0b1NjaSAiOS45OWU5OTk5OTk5OTkiICAtPiAnOS45OUUrOTk5OTk5OTk5JworYmFzeDk3NiB0b1NjaSAiOS45OWUtOTk5OTk5OTk5IiAtPiAnOS45OUUtOTk5OTk5OTk5JworYmFzeDk3NyB0b1NjaSAiOS45ZS05OTk5OTk5OTkiICAtPiAnOS45RS05OTk5OTk5OTknCitiYXN4OTc4IHRvU2NpICI5ZS05OTk5OTk5OTkiICAgIC0+ICc5RS05OTk5OTk5OTknCitiYXN4OTc5IHRvU2NpICI5OWUtOTk5OTk5OTk5IiAgIC0+ICc5LjlFLTk5OTk5OTk5OCcKK2Jhc3g5ODAgdG9TY2kgIjk5OWUtOTk5OTk5OTk5IiAgLT4gJzkuOTlFLTk5OTk5OTk5NycKKworLS0gVmFyeWluZyBleHBvbmVudCBtYXhpbXVtcworcHJlY2lzaW9uOiA1CittYXhleHBvbmVudDogMAorbWluZXhwb25lbnQ6IDAKK2VtYXgwMDEgdG9TY2kgLTFFKzIgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgwMDIgdG9TY2kgLTEwMCAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgwMDMgdG9TY2kgIC0xMCAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgwMDQgdG9TY2kgICAtOS45IC0+IC05LjkKK2VtYXgwMDUgdG9TY2kgICAtOSAgIC0+IC05CitlbWF4MDA2IHRvU2NpICAgLTEgICAtPiAtMQorZW1heDAwNyB0b1NjaSAgICAwICAgLT4gIDAKK2VtYXgwMDggdG9TY2kgICAgMSAgIC0+ICAxCitlbWF4MDA5IHRvU2NpICAgIDkgICAtPiAgOQorZW1heDAxMCB0b1NjaSAgICA5LjkgLT4gIDkuOQorZW1heDAxMSB0b1NjaSAgIDEwICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDAxMiB0b1NjaSAgMTAwICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDAxMyB0b1NjaSAgMUUrMiAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDAxNCB0b1NjaSAgIDAuOTkgLT4gIDAuOTkgU3Vibm9ybWFsCitlbWF4MDE1IHRvU2NpICAgMC4xICAtPiAgMC4xIFN1Ym5vcm1hbAorZW1heDAxNiB0b1NjaSAgIDAuMDEgLT4gIDAuMDEgU3Vibm9ybWFsCitlbWF4MDE3IHRvU2NpICAxRS0xICAtPiAgMC4xIFN1Ym5vcm1hbAorZW1heDAxOCB0b1NjaSAgMUUtMiAgLT4gIDAuMDEgU3Vibm9ybWFsCisKK21heGV4cG9uZW50OiAxCittaW5leHBvbmVudDogLTEKK2VtYXgxMDAgdG9TY2kgLTFFKzMgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgxMDEgdG9TY2kgLTFFKzIgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgxMDIgdG9TY2kgLTEwMCAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgxMDMgdG9TY2kgIC0xMCAgIC0+IC0xMAorZW1heDEwNCB0b1NjaSAgIC05LjkgLT4gLTkuOQorZW1heDEwNSB0b1NjaSAgIC05ICAgLT4gLTkKK2VtYXgxMDYgdG9TY2kgICAtMSAgIC0+IC0xCitlbWF4MTA3IHRvU2NpICAgIDAgICAtPiAgMAorZW1heDEwOCB0b1NjaSAgICAxICAgLT4gIDEKK2VtYXgxMDkgdG9TY2kgICAgOSAgIC0+ICA5CitlbWF4MTEwIHRvU2NpICAgIDkuOSAtPiAgOS45CitlbWF4MTExIHRvU2NpICAgMTAgICAtPiAxMAorZW1heDExMiB0b1NjaSAgMTAwICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDExMyB0b1NjaSAgMUUrMiAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDExNCB0b1NjaSAgMUUrMyAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDExNSB0b1NjaSAgIDAuOTkgLT4gIDAuOTkKK2VtYXgxMTYgdG9TY2kgICAwLjEgIC0+ICAwLjEKK2VtYXgxMTcgdG9TY2kgICAwLjAxIC0+ICAwLjAxIFN1Ym5vcm1hbAorZW1heDExOCB0b1NjaSAgMUUtMSAgLT4gIDAuMQorZW1heDExOSB0b1NjaSAgMUUtMiAgLT4gIDAuMDEgU3Vibm9ybWFsCitlbWF4MTIwIHRvU2NpICAxRS0zICAtPiAgMC4wMDEgU3Vibm9ybWFsCitlbWF4MTIxIHRvU2NpICAxLjFFLTMgIC0+ICAwLjAwMTEgU3Vibm9ybWFsCitlbWF4MTIyIHRvU2NpICAxLjExRS0zICAtPiAgMC4wMDExMSBTdWJub3JtYWwKK2VtYXgxMjMgdG9TY2kgIDEuMTExRS0zICAtPiAgMC4wMDExMSBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDEyNCB0b1NjaSAgMS4xMTExRS0zICAtPiAgMC4wMDExMSBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDEyNSB0b1NjaSAgMS4xMTExMUUtMyAgLT4gIDAuMDAxMTEgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworbWF4ZXhwb25lbnQ6IDIKK21pbmV4cG9uZW50OiAtMgorcHJlY2lzaW9uOiA5CitlbWF4MjAwIHRvU2NpIC0xRSszICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MjAxIHRvU2NpIC0xRSsyICAtPiAtMUUrMgorZW1heDIwMiB0b1NjaSAtMTAwICAgLT4gLTEwMAorZW1heDIwMyB0b1NjaSAgLTEwICAgLT4gLTEwCitlbWF4MjA0IHRvU2NpICAgLTkuOSAtPiAtOS45CitlbWF4MjA1IHRvU2NpICAgLTkgICAtPiAtOQorZW1heDIwNiB0b1NjaSAgIC0xICAgLT4gLTEKK2VtYXgyMDcgdG9TY2kgICAgMCAgIC0+ICAwCitlbWF4MjA4IHRvU2NpICAgIDEgICAtPiAgMQorZW1heDIwOSB0b1NjaSAgICA5ICAgLT4gIDkKK2VtYXgyMTAgdG9TY2kgICAgOS45IC0+ICA5LjkKK2VtYXgyMTEgdG9TY2kgICAxMCAgIC0+IDEwCitlbWF4MjEyIHRvU2NpICAxMDAgICAtPiAxMDAKK2VtYXgyMTMgdG9TY2kgIDFFKzIgIC0+IDFFKzIKK2VtYXgyMTQgdG9TY2kgIDFFKzMgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgyMTUgdG9TY2kgICAwLjk5IC0+ICAwLjk5CitlbWF4MjE2IHRvU2NpICAgMC4xICAtPiAgMC4xCitlbWF4MjE3IHRvU2NpICAgMC4wMSAtPiAgMC4wMQorZW1heDIxOCB0b1NjaSAgMC4wMDEgLT4gIDAuMDAxIFN1Ym5vcm1hbAorZW1heDIxOSB0b1NjaSAgMUUtMSAgLT4gIDAuMQorZW1heDIyMCB0b1NjaSAgMUUtMiAgLT4gIDAuMDEKK2VtYXgyMjEgdG9TY2kgIDFFLTMgIC0+ICAwLjAwMSBTdWJub3JtYWwKK2VtYXgyMjIgdG9TY2kgIDFFLTQgIC0+ICAwLjAwMDEgU3Vibm9ybWFsCitlbWF4MjIzIHRvU2NpICAxRS01ICAtPiAgMC4wMDAwMSBTdWJub3JtYWwKK2VtYXgyMjQgdG9TY2kgIDFFLTYgIC0+ICAwLjAwMDAwMSBTdWJub3JtYWwKK2VtYXgyMjUgdG9TY2kgIDFFLTcgIC0+ICAxRS03ICBTdWJub3JtYWwKK2VtYXgyMjYgdG9TY2kgIDFFLTggIC0+ICAxRS04ICBTdWJub3JtYWwKK2VtYXgyMjcgdG9TY2kgIDFFLTkgIC0+ICAxRS05ICBTdWJub3JtYWwKK2VtYXgyMjggdG9TY2kgIDFFLTEwIC0+ICAxRS0xMCBTdWJub3JtYWwKK2VtYXgyMjkgdG9TY2kgIDFFLTExIC0+ICAwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4MjMwIHRvU2NpICAxRS0xMiAtPiAgMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCittYXhleHBvbmVudDogNworbWluZXhwb25lbnQ6IC03CitlbWF4MjMxIHRvU2NpICAxRS04ICAtPiAgMUUtOCBTdWJub3JtYWwKK2VtYXgyMzIgdG9TY2kgIDFFLTcgIC0+ICAxRS03CitlbWF4MjMzIHRvU2NpICAxRS02ICAtPiAgMC4wMDAwMDEKK2VtYXgyMzQgdG9TY2kgIDFFLTUgIC0+ICAwLjAwMDAxCitlbWF4MjM1IHRvU2NpICAxRSs1ICAtPiAgMUUrNQorZW1heDIzNiB0b1NjaSAgMUUrNiAgLT4gIDFFKzYKK2VtYXgyMzcgdG9TY2kgIDFFKzcgIC0+ICAxRSs3CitlbWF4MjM4IHRvU2NpICAxRSs4ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK21heGV4cG9uZW50OiA5CittaW5leHBvbmVudDogLTkKK2VtYXgyNDAgdG9TY2kgIDFFLTIxIC0+ICAwRS0xNyBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4MjQxIHRvU2NpICAxRS0xMCAtPiAgMUUtMTAgU3Vibm9ybWFsCitlbWF4MjQyIHRvU2NpICAxRS05ICAtPiAgMUUtOQorZW1heDI0MyB0b1NjaSAgMUUtOCAgLT4gIDFFLTgKK2VtYXgyNDQgdG9TY2kgIDFFLTcgIC0+ICAxRS03CitlbWF4MjQ1IHRvU2NpICAxRSs3ICAtPiAgMUUrNworZW1heDI0NiB0b1NjaSAgMUUrOCAgLT4gIDFFKzgKK2VtYXgyNDcgdG9TY2kgIDFFKzkgIC0+ICAxRSs5CitlbWF4MjQ4IHRvU2NpICAxRSsxMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK21heGV4cG9uZW50OiAxMCAgLS0gYm91bmRhcnkKK21pbmV4cG9uZW50OiAtMTAKK2VtYXgyNTAgdG9TY2kgIDFFLTIxIC0+ICAwRS0xOCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4MjUxIHRvU2NpICAxRS0xMSAtPiAgMUUtMTEgU3Vibm9ybWFsCitlbWF4MjUyIHRvU2NpICAxRS0xMCAtPiAgMUUtMTAKK2VtYXgyNTMgdG9TY2kgIDFFLTkgIC0+ICAxRS05CitlbWF4MjU0IHRvU2NpICAxRS04ICAtPiAgMUUtOAorZW1heDI1NSB0b1NjaSAgMUUrOCAgLT4gIDFFKzgKK2VtYXgyNTYgdG9TY2kgIDFFKzkgIC0+ICAxRSs5CitlbWF4MjU3IHRvU2NpICAxRSsxMCAtPiAgMUUrMTAKK2VtYXgyNTggdG9TY2kgIDFFKzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZW1heDI2MCB0b1NjaSAgMS4wMEUtMjEgLT4gIDBFLTE4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2VtYXgyNjEgdG9TY2kgIDEuMDBFLTExIC0+ICAxLjAwRS0xMSBTdWJub3JtYWwKK2VtYXgyNjIgdG9TY2kgIDEuMDBFLTEwIC0+ICAxLjAwRS0xMAorZW1heDI2MyB0b1NjaSAgMS4wMEUtOSAgLT4gIDEuMDBFLTkKK2VtYXgyNjQgdG9TY2kgIDEuMDBFLTggIC0+ICAxLjAwRS04CitlbWF4MjY1IHRvU2NpICAxLjAwRSs4ICAtPiAgMS4wMEUrOAorZW1heDI2NiB0b1NjaSAgMS4wMEUrOSAgLT4gIDEuMDBFKzkKK2VtYXgyNjcgdG9TY2kgIDEuMDBFKzEwIC0+ICAxLjAwRSsxMAorZW1heDI2OCB0b1NjaSAgMS4wMEUrMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDI3MCB0b1NjaSAgOS45OUUtMjEgLT4gIDBFLTE4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2VtYXgyNzEgdG9TY2kgIDkuOTlFLTExIC0+ICA5Ljk5RS0xMSBTdWJub3JtYWwKK2VtYXgyNzIgdG9TY2kgIDkuOTlFLTEwIC0+ICA5Ljk5RS0xMAorZW1heDI3MyB0b1NjaSAgOS45OUUtOSAgLT4gIDkuOTlFLTkKK2VtYXgyNzQgdG9TY2kgIDkuOTlFLTggIC0+ICA5Ljk5RS04CitlbWF4Mjc1IHRvU2NpICA5Ljk5RSs4ICAtPiAgOS45OUUrOAorZW1heDI3NiB0b1NjaSAgOS45OUUrOSAgLT4gIDkuOTlFKzkKK2VtYXgyNzcgdG9TY2kgIDkuOTlFKzEwIC0+ICA5Ljk5RSsxMAorZW1heDI3OCB0b1NjaSAgOS45OUUrMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCittYXhleHBvbmVudDogOTkKK21pbmV4cG9uZW50OiAtOTkKK2VtYXgyODAgdG9TY2kgIDFFLTEyMCAtPiAgMEUtMTA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2VtYXgyODEgdG9TY2kgIDFFLTEwMCAtPiAgMUUtMTAwIFN1Ym5vcm1hbAorZW1heDI4MiB0b1NjaSAgMUUtOTkgIC0+ICAxRS05OQorZW1heDI4MyB0b1NjaSAgMUUtOTggIC0+ICAxRS05OAorZW1heDI4NCB0b1NjaSAgMUUrOTggIC0+ICAxRSs5OAorZW1heDI4NSB0b1NjaSAgMUUrOTkgIC0+ICAxRSs5OQorZW1heDI4NiB0b1NjaSAgMUUrMTAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK2VtYXgyOTEgdG9TY2kgIDFFLTEwMDAgLT4gIDFFLTEwMDAgU3Vibm9ybWFsCitlbWF4MjkyIHRvU2NpICAxRS05OTkgIC0+ICAxRS05OTkKK2VtYXgyOTMgdG9TY2kgIDFFKzk5OSAgLT4gIDFFKzk5OQorZW1heDI5NCB0b1NjaSAgMUUrMTAwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittYXhleHBvbmVudDogOTk5OQorbWluZXhwb25lbnQ6IC05OTk5CitlbWF4MzAxIHRvU2NpICAxRS0xMDAwMCAtPiAgMUUtMTAwMDAgU3Vibm9ybWFsCitlbWF4MzAyIHRvU2NpICAxRS05OTk5ICAtPiAgMUUtOTk5OQorZW1heDMwMyB0b1NjaSAgMUUrOTk5OSAgLT4gIDFFKzk5OTkKK2VtYXgzMDQgdG9TY2kgIDFFKzEwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK21heGV4cG9uZW50OiA5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OQorZW1heDMxMSB0b1NjaSAgMUUtMTAwMDAwIC0+ICAxRS0xMDAwMDAgU3Vibm9ybWFsCitlbWF4MzEyIHRvU2NpICAxRS05OTk5OSAgLT4gIDFFLTk5OTk5CitlbWF4MzEzIHRvU2NpICAxRSs5OTk5OSAgLT4gIDFFKzk5OTk5CitlbWF4MzE0IHRvU2NpICAxRSsxMDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbWF4ZXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK2VtYXgzMjEgdG9TY2kgIDFFLTEwMDAwMDAgLT4gIDFFLTEwMDAwMDAgU3Vibm9ybWFsCitlbWF4MzIyIHRvU2NpICAxRS05OTk5OTkgIC0+ICAxRS05OTk5OTkKK2VtYXgzMjMgdG9TY2kgIDFFKzk5OTk5OSAgLT4gIDFFKzk5OTk5OQorZW1heDMyNCB0b1NjaSAgMUUrMTAwMDAwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittYXhleHBvbmVudDogOTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5CitlbWF4MzMxIHRvU2NpICAxRS0xMDAwMDAwMCAtPiAgMUUtMTAwMDAwMDAgU3Vibm9ybWFsCitlbWF4MzMyIHRvU2NpICAxRS05OTk5OTk5ICAtPiAgMUUtOTk5OTk5OQorZW1heDMzMyB0b1NjaSAgMUUrOTk5OTk5OSAgLT4gIDFFKzk5OTk5OTkKK2VtYXgzMzQgdG9TY2kgIDFFKzEwMDAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK21heGV4cG9uZW50OiA5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OQorZW1heDM0MSB0b1NjaSAgMUUtMTAwMDAwMDAwIC0+ICAxRS0xMDAwMDAwMDAgU3Vibm9ybWFsCitlbWF4MzQyIHRvU2NpICAxRS05OTk5OTk5OSAgLT4gIDFFLTk5OTk5OTk5CitlbWF4MzQzIHRvU2NpICAxRSs5OTk5OTk5OSAgLT4gIDFFKzk5OTk5OTk5CitlbWF4MzQ0IHRvU2NpICAxRSsxMDAwMDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorZW1heDM0NyB0b1NjaSAgMUUtMTAwMDAwMDAwOCAgICAgLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDM0OCB0b1NjaSAgMUUtMTAwMDAwMDAwNyAgICAgLT4gIDFFLTEwMDAwMDAwMDcgU3Vibm9ybWFsCitlbWF4MzQ5IHRvU2NpICAxRS0xMDAwMDAwMDAwICAgICAtPiAgMUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK2VtYXgzNTAgdG9TY2kgIDFFLTk5OTk5OTk5OSAgICAgIC0+ICAxRS05OTk5OTk5OTkKK2VtYXgzNTEgdG9TY2kgIDFFKzk5OTk5OTk5OSAgICAgIC0+ICAxRSs5OTk5OTk5OTkKK2VtYXgzNTIgdG9TY2kgIDFFKzEwMDAwMDAwMDAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzNTMgdG9TY2kgIDEuMDAwRS0xMDAwMDAwMDAwIC0+ICAxLjAwMEUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK2VtYXgzNTQgdG9TY2kgIDEuMDAwRS05OTk5OTk5OTkgIC0+ICAxLjAwMEUtOTk5OTk5OTk5CitlbWF4MzU1IHRvU2NpICAxLjAwMEUrOTk5OTk5OTk5ICAtPiAgMS4wMDBFKzk5OTk5OTk5OQorZW1heDM1NiB0b1NjaSAgMS4wMDBFKzEwMDAwMDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDM1NyB0b1NjaSAgMS4wMDFFLTEwMDAwMDAwMDggLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDM1OCB0b1NjaSAgMS4wMDFFLTEwMDAwMDAwMDcgLT4gIDFFLTEwMDAwMDAwMDcgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2VtYXgzNTkgdG9TY2kgIDEuMDAxRS0xMDAwMDAwMDAwIC0+ICAxLjAwMUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK2VtYXgzNjAgdG9TY2kgIDEuMDAxRS05OTk5OTk5OTkgIC0+ICAxLjAwMUUtOTk5OTk5OTk5CitlbWF4MzYxIHRvU2NpICAxLjAwMUUrOTk5OTk5OTk5ICAtPiAgMS4wMDFFKzk5OTk5OTk5OQorZW1heDM2MiB0b1NjaSAgMS4wMDFFKzEwMDAwMDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDM2MyB0b1NjaSAgOS4wMDBFLTEwMDAwMDAwMDAgLT4gIDkuMDAwRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorZW1heDM2NCB0b1NjaSAgOS4wMDBFLTk5OTk5OTk5OSAgLT4gIDkuMDAwRS05OTk5OTk5OTkKK2VtYXgzNjUgdG9TY2kgIDkuMDAwRSs5OTk5OTk5OTkgIC0+ICA5LjAwMEUrOTk5OTk5OTk5CitlbWF4MzY2IHRvU2NpICA5LjAwMEUrMTAwMDAwMDAwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MzY3IHRvU2NpICA5Ljk5OUUtMTAwMDAwMDAwOSAtPiAgMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4MzY4IHRvU2NpICA5Ljk5OUUtMTAwMDAwMDAwOCAtPiAgMUUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDM2OSB0b1NjaSAgOS45OTlFLTEwMDAwMDAwMDcgLT4gIDEuMEUtMTAwMDAwMDAwNiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDM3MCB0b1NjaSAgOS45OTlFLTEwMDAwMDAwMDAgLT4gIDkuOTk5RS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorZW1heDM3MSB0b1NjaSAgOS45OTlFLTk5OTk5OTk5OSAgLT4gIDkuOTk5RS05OTk5OTk5OTkKK2VtYXgzNzIgdG9TY2kgIDkuOTk5RSs5OTk5OTk5OTkgIC0+ICA5Ljk5OUUrOTk5OTk5OTk5CisKK2VtYXgzNzMgdG9TY2kgIDkuOTk5RSsxMDAwMDAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzNzQgdG9TY2kgLTFFLTEwMDAwMDAwMDAgICAgIC0+IC0xRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorZW1heDM3NSB0b1NjaSAtMUUtOTk5OTk5OTk5ICAgICAgLT4gLTFFLTk5OTk5OTk5OQorZW1heDM3NiB0b1NjaSAtMUUrOTk5OTk5OTk5ICAgICAgLT4gLTFFKzk5OTk5OTk5OQorZW1heDM3NyB0b1NjaSAtMUUrMTAwMDAwMDAwMCAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDM3OCB0b1NjaSAtMS4wMDBFLTEwMDAwMDAwMDAgLT4gLTEuMDAwRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorZW1heDM3OSB0b1NjaSAtMS4wMDBFLTk5OTk5OTk5OSAgLT4gLTEuMDAwRS05OTk5OTk5OTkKK2VtYXgzODAgdG9TY2kgLTEuMDAwRSs5OTk5OTk5OTkgIC0+IC0xLjAwMEUrOTk5OTk5OTk5CitlbWF4MzgxIHRvU2NpIC0xLjAwMEUrMTAwMDAwMDAwMCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MzgyIHRvU2NpIC0xLjAwMUUtMTAwMDAwMDAwOCAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4MzgzIHRvU2NpIC0xLjAwMUUtOTk5OTk5OTk5ICAtPiAtMS4wMDFFLTk5OTk5OTk5OQorZW1heDM4NCB0b1NjaSAtMS4wMDFFKzk5OTk5OTk5OSAgLT4gLTEuMDAxRSs5OTk5OTk5OTkKK2VtYXgzODUgdG9TY2kgLTEuMDAxRSsxMDAwMDAwMDAwIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzODYgdG9TY2kgLTkuMDAwRS0xMDAwMDAwMTIzIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2VtYXgzODcgdG9TY2kgLTkuMDAwRS05OTk5OTk5OTkgIC0+IC05LjAwMEUtOTk5OTk5OTk5CitlbWF4Mzg4IHRvU2NpIC05LjAwMEUrOTk5OTk5OTk5ICAtPiAtOS4wMDBFKzk5OTk5OTk5OQorZW1heDM4OSB0b1NjaSAtOS4wMDBFKzEwMDAwMDAwMDAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDM5MCB0b1NjaSAtOS45OTlFLTEwMDAwMDAwMDggLT4gLTFFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzOTEgdG9TY2kgLTkuOTk5RS05OTk5OTk5OTkgIC0+IC05Ljk5OUUtOTk5OTk5OTk5CitlbWF4MzkyIHRvU2NpIC05Ljk5OUUrOTk5OTk5OTk5ICAtPiAtOS45OTlFKzk5OTk5OTk5OQorZW1heDM5MyB0b1NjaSAtOS45OTlFKzEwMDAwMDAwMDAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBOb3cgY2hlY2sgODU0IHJvdW5kaW5nIG9mIHN1Ym5vcm1hbHMgYW5kIHByb3BlciB1bmRlcmZsb3cgdG8gMAorcHJlY2lzaW9uOiAgIDUKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5Cityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2VtYXg0MDAgdG9TY2kgIDEuMDAwMEUtOTk5ICAgICAtPiAxLjAwMDBFLTk5OQorZW1heDQwMSB0b1NjaSAgMC4xRS05OTkgICAgICAgIC0+IDFFLTEwMDAgICAgIFN1Ym5vcm1hbAorZW1heDQwMiB0b1NjaSAgMC4xMDAwRS05OTkgICAgIC0+IDEuMDAwRS0xMDAwIFN1Ym5vcm1hbAorZW1heDQwMyB0b1NjaSAgMC4wMTAwRS05OTkgICAgIC0+IDEuMDBFLTEwMDEgIFN1Ym5vcm1hbAorZW1heDQwNCB0b1NjaSAgMC4wMDEwRS05OTkgICAgIC0+IDEuMEUtMTAwMiAgIFN1Ym5vcm1hbAorZW1heDQwNSB0b1NjaSAgMC4wMDAxRS05OTkgICAgIC0+IDFFLTEwMDMgICAgIFN1Ym5vcm1hbAorZW1heDQwNiB0b1NjaSAgMC4wMDAxMEUtOTk5ICAgIC0+IDFFLTEwMDMgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitlbWF4NDA3IHRvU2NpICAwLjAwMDEzRS05OTkgICAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MDggdG9TY2kgIDAuMDAwMTVFLTk5OSAgICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQwOSB0b1NjaSAgMC4wMDAxN0UtOTk5ICAgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDEwIHRvU2NpICAwLjAwMDIzRS05OTkgICAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MTEgdG9TY2kgIDAuMDAwMjVFLTk5OSAgICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQxMiB0b1NjaSAgMC4wMDAyN0UtOTk5ICAgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDEzIHRvU2NpICAwLjAwMDE0OUUtOTk5ICAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MTQgdG9TY2kgIDAuMDAwMTUwRS05OTkgICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQxNSB0b1NjaSAgMC4wMDAxNTFFLTk5OSAgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDE2IHRvU2NpICAwLjAwMDI0OUUtOTk5ICAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MTcgdG9TY2kgIDAuMDAwMjUwRS05OTkgICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQxOCB0b1NjaSAgMC4wMDAyNTFFLTk5OSAgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDE5IHRvU2NpICAwLjAwMDA5RS05OTkgICAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MjAgdG9TY2kgIDAuMDAwMDVFLTk5OSAgICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4NDIxIHRvU2NpICAwLjAwMDAzRS05OTkgICAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDQyMiB0b1NjaSAgMC4wMDAwMDlFLTk5OSAgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2VtYXg0MjMgdG9TY2kgIDAuMDAwMDA1RS05OTkgICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4NDI0IHRvU2NpICAwLjAwMDAwM0UtOTk5ICAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitlbWF4NDI1IHRvU2NpICAwLjAwMTA0OUUtOTk5ICAgLT4gMS4wRS0xMDAyICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MjYgdG9TY2kgIDAuMDAxMDUwRS05OTkgICAtPiAxLjBFLTEwMDIgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQyNyB0b1NjaSAgMC4wMDEwNTFFLTk5OSAgIC0+IDEuMUUtMTAwMiAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDI4IHRvU2NpICAwLjAwMTE0OUUtOTk5ICAgLT4gMS4xRS0xMDAyICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MjkgdG9TY2kgIDAuMDAxMTUwRS05OTkgICAtPiAxLjJFLTEwMDIgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQzMCB0b1NjaSAgMC4wMDExNTFFLTk5OSAgIC0+IDEuMkUtMTAwMiAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2VtYXg0MzIgdG9TY2kgIDAuMDEwMDQ5RS05OTkgICAtPiAxLjAwRS0xMDAxICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQzMyB0b1NjaSAgMC4wMTAwNTBFLTk5OSAgIC0+IDEuMDBFLTEwMDEgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDM0IHRvU2NpICAwLjAxMDA1MUUtOTk5ICAgLT4gMS4wMUUtMTAwMSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MzUgdG9TY2kgIDAuMDEwMTQ5RS05OTkgICAtPiAxLjAxRS0xMDAxICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQzNiB0b1NjaSAgMC4wMTAxNTBFLTk5OSAgIC0+IDEuMDJFLTEwMDEgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDM3IHRvU2NpICAwLjAxMDE1MUUtOTk5ICAgLT4gMS4wMkUtMTAwMSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZW1heDQ0MCB0b1NjaSAgMC4xMDEwM0UtOTk5ICAgIC0+IDEuMDEwRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDQxIHRvU2NpICAwLjEwMTA1RS05OTkgICAgLT4gMS4wMTBFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NDIgdG9TY2kgIDAuMTAxMDdFLTk5OSAgICAtPiAxLjAxMUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ0MyB0b1NjaSAgMC4xMDExM0UtOTk5ICAgIC0+IDEuMDExRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDQ0IHRvU2NpICAwLjEwMTE1RS05OTkgICAgLT4gMS4wMTJFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NDUgdG9TY2kgIDAuMTAxMTdFLTk5OSAgICAtPiAxLjAxMkUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitlbWF4NDUwIHRvU2NpICAxLjEwNzMwRS0xMDAwICAgLT4gMS4xMDdFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NTEgdG9TY2kgIDEuMTA3NTBFLTEwMDAgICAtPiAxLjEwOEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ1MiB0b1NjaSAgMS4xMDc3MEUtMTAwMCAgIC0+IDEuMTA4RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDUzIHRvU2NpICAxLjEwODMwRS0xMDAwICAgLT4gMS4xMDhFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NTQgdG9TY2kgIDEuMTA4NTBFLTEwMDAgICAtPiAxLjEwOEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ1NSB0b1NjaSAgMS4xMDg3MEUtMTAwMCAgIC0+IDEuMTA5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1ha2Ugc3VyZSBzaWduIE9LCitlbWF4NDU2IHRvU2NpICAtMC4xMDEwM0UtOTk5ICAgLT4gLTEuMDEwRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDU3IHRvU2NpICAtMC4xMDEwNUUtOTk5ICAgLT4gLTEuMDEwRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDU4IHRvU2NpICAtMC4xMDEwN0UtOTk5ICAgLT4gLTEuMDExRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDU5IHRvU2NpICAtMC4xMDExM0UtOTk5ICAgLT4gLTEuMDExRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDYwIHRvU2NpICAtMC4xMDExNUUtOTk5ICAgLT4gLTEuMDEyRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDYxIHRvU2NpICAtMC4xMDExN0UtOTk5ICAgLT4gLTEuMDEyRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tICc5OTlzJyBjYXNlcworZW1heDQ2NCB0b1NjaSAgOTk5OTk5RS05OTkgICAgICAgICAtPiAxLjAwMDBFLTk5MyBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NjUgdG9TY2kgIDk5OTk5LjBFLTk5OSAgICAgICAgLT4gOS45OTk5RS05OTUgUm91bmRlZAorZW1heDQ2NiB0b1NjaSAgOTk5OTkuRS05OTkgICAgICAgICAtPiA5Ljk5OTlFLTk5NQorZW1heDQ2NyB0b1NjaSAgOTk5OS45RS05OTkgICAgICAgICAtPiA5Ljk5OTlFLTk5NgorZW1heDQ2OCB0b1NjaSAgOTk5Ljk5RS05OTkgICAgICAgICAtPiA5Ljk5OTlFLTk5NworZW1heDQ2OSB0b1NjaSAgOTkuOTk5RS05OTkgICAgICAgICAtPiA5Ljk5OTlFLTk5OAorZW1heDQ3MCB0b1NjaSAgOS45OTk5RS05OTkgICAgICAgICAtPiA5Ljk5OTlFLTk5OQorZW1heDQ3MSB0b1NjaSAgMC45OTk5OUUtOTk5ICAgICAgICAtPiAxLjAwMDBFLTk5OSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ3MiB0b1NjaSAgMC4wOTk5OTlFLTk5OSAgICAgICAtPiAxLjAwMEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ3MyB0b1NjaSAgMC4wMDk5OTk5RS05OTkgICAgICAtPiAxLjAwRS0xMDAxICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtOTk5ICAgICAtPiAxLjBFLTEwMDIgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTk5OSAgICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ3NiB0b1NjaSAgMC4wMDAwMDk5OTk5RS05OTkgICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4NDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS05OTkgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2VtYXg0NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS05OTkgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2Jhc3gxMDAxIHRvU2NpICAxZTk5OTk5OTk5OSAtPiAxRSs5OTk5OTk5OTkKK2Jhc3gxMDAyIHRvU2NpICAxZTA5OTk5OTk5OTkgLT4gMUUrOTk5OTk5OTk5CitiYXN4MTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiAxRSs5OTk5OTk5OTkKK2Jhc3gxMDA0IHRvU2NpICAxZTAwMDk5OTk5OTk5OSAtPiAxRSs5OTk5OTk5OTkKK2Jhc3gxMDA1IHRvU2NpICAxZTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAxRSs5OTk5OTk5OTkKK2Jhc3gxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Jhc3gxMDA3IHRvU2NpICAxZS05OTk5OTk5OTkgLT4gMUUtOTk5OTk5OTk5CitiYXN4MTAwOCB0b1NjaSAgMWUtMDk5OTk5OTk5OSAtPiAxRS05OTk5OTk5OTkKK2Jhc3gxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAxRS05OTk5OTk5OTkKK2Jhc3gxMDEwIHRvU2NpICAxZS0wMDA5OTk5OTk5OTkgLT4gMUUtOTk5OTk5OTk5CitiYXN4MTAxMSB0b1NjaSAgMWUtMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IDFFLTk5OTk5OTk5OQorYmFzeDEwMTIgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiAxRS0xMDAwMDAwMDA3IFN1Ym5vcm1hbAorCistLSBFZGdlIGNhc2VzIGZvciBpbnQzMiBleHBvbmVudHMuLi4KK2Jhc3gxMDIxIHRvc2NpIDFlKzIxNDc0ODM2NDkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitiYXN4MTAyMiB0b3NjaSAxZSsyMTQ3NDgzNjQ4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYmFzeDEwMjMgdG9zY2kgMWUrMjE0NzQ4MzY0NyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Jhc3gxMDI0IHRvc2NpIDFlLTIxNDc0ODM2NDcgLT4gMEUtMTAwMDAwMDAxNCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitiYXN4MTAyNSB0b3NjaSAxZS0yMTQ3NDgzNjQ4IC0+IDBFLTEwMDAwMDAwMTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorYmFzeDEwMjYgdG9zY2kgMWUtMjE0NzQ4MzY0OSAtPiAwRS0xMDAwMDAwMDE0IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIHNhbWUgdW5iYWxhbmNlZAorcHJlY2lzaW9uOiAgIDcKK21heEV4cG9uZW50OiA5NgorbWluZXhwb25lbnQ6IC05NQorYmFzeDEwMzEgdG9zY2kgMWUrMjE0NzQ4MzY0OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Jhc3gxMDMyIHRvc2NpIDFlKzIxNDc0ODM2NDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitiYXN4MTAzMyB0b3NjaSAxZSsyMTQ3NDgzNjQ3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYmFzeDEwMzQgdG9zY2kgMWUtMjE0NzQ4MzY0NyAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorYmFzeDEwMzUgdG9zY2kgMWUtMjE0NzQ4MzY0OCAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorYmFzeDEwMzYgdG9zY2kgMWUtMjE0NzQ4MzY0OSAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworcHJlY2lzaW9uOiAgIDUKK21heGV4cG9uZW50OiA3OQorbWluZXhwb25lbnQ6IC03OQorYmFzeDEwNDEgdG9TY2kgICAgIDEuNTI0NDRFLTgwICAtPiAgMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitiYXN4MTA0MiB0b1NjaSAgICAgMS41MjQ0NUUtODAgIC0+ICAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2Jhc3gxMDQzIHRvU2NpICAgICAxLjUyNDQ2RS04MCAgLT4gIDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBjbGFtcGVkIHplcm9zIFtzZWUgYWxzbyBjbGFtcC5kZWNUZXN0XQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCisKK2Jhc3gxMDYxIGFwcGx5ICAgMGUrMTAwMDAgIC0+ICAwRSs2MTQ0IENsYW1wZWQKK2Jhc3gxMDYyIGFwcGx5ICAgMGUtMTAwMDAgIC0+ICAwRS02MTc2IENsYW1wZWQKK2Jhc3gxMDYzIGFwcGx5ICAtMGUrMTAwMDAgIC0+IC0wRSs2MTQ0IENsYW1wZWQKK2Jhc3gxMDY0IGFwcGx5ICAtMGUtMTAwMDAgIC0+IC0wRS02MTc2IENsYW1wZWQKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCitiYXN4MTA2NSBhcHBseSAgIDBlKzEwMDAwICAtPiAgMEUrMzg0ICBDbGFtcGVkCitiYXN4MTA2NiBhcHBseSAgIDBlLTEwMDAwICAtPiAgMEUtMzk4ICBDbGFtcGVkCitiYXN4MTA2NyBhcHBseSAgLTBlKzEwMDAwICAtPiAtMEUrMzg0ICBDbGFtcGVkCitiYXN4MTA2OCBhcHBseSAgLTBlLTEwMDAwICAtPiAtMEUtMzk4ICBDbGFtcGVkCisKKy0tIHNhbWUgd2l0aCBJRUVFIGNsYW1waW5nCitjbGFtcDogICAgICAgMQorCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKKworYmFzeDEwNzEgYXBwbHkgICAwZSsxMDAwMCAgLT4gIDBFKzYxMTEgQ2xhbXBlZAorYmFzeDEwNzIgYXBwbHkgICAwZS0xMDAwMCAgLT4gIDBFLTYxNzYgQ2xhbXBlZAorYmFzeDEwNzMgYXBwbHkgIC0wZSsxMDAwMCAgLT4gLTBFKzYxMTEgQ2xhbXBlZAorYmFzeDEwNzQgYXBwbHkgIC0wZS0xMDAwMCAgLT4gLTBFLTYxNzYgQ2xhbXBlZAorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKK2Jhc3gxMDc1IGFwcGx5ICAgMGUrMTAwMDAgIC0+ICAwRSszNjkgIENsYW1wZWQKK2Jhc3gxMDc2IGFwcGx5ICAgMGUtMTAwMDAgIC0+ICAwRS0zOTggIENsYW1wZWQKK2Jhc3gxMDc3IGFwcGx5ICAtMGUrMTAwMDAgIC0+IC0wRSszNjkgIENsYW1wZWQKK2Jhc3gxMDc4IGFwcGx5ICAtMGUtMTAwMDAgIC0+IC0wRS0zOTggIENsYW1wZWQKKworCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NsYW1wLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NsYW1wLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjNjY0MgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY2xhbXAuZGVjVGVzdApAQCAtMCwwICsxLDIxMSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjbGFtcC5kZWNUZXN0IC0tIGNsYW1wZWQgZXhwb25lbnQgdGVzdHMgKGZvcm1hdC1pbmRlcGVuZGVudCkgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAwLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHVzZXMgdGhlIHNhbWUgbGltaXRzIGFzIHRoZSA4LWJ5dGUgY29uY3JldGUKKy0tIHJlcHJlc2VudGF0aW9uLCBidXQgYXBwbGllcyBjbGFtcGluZyB3aXRob3V0IHVzaW5nIGZvcm1hdC1zcGVjaWZpYworLS0gY29udmVyc2lvbnMuCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitjbGFtcDogICAgICAgMQorCistLSBHZW5lcmFsIHRlc3RjYXNlcworCistLSBOb3JtYWxpdHkKK2NsYW0wMTAgYXBwbHkgICAxMjM0NTY3ODkwMTIzNDU2ICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTYKK2NsYW0wMTEgYXBwbHkgICAxMjM0NTY3ODkwMTIzNDU2LjAgLT4gIDEyMzQ1Njc4OTAxMjM0NTYgUm91bmRlZAorY2xhbTAxMiBhcHBseSAgIDEyMzQ1Njc4OTAxMjM0NTYuMSAtPiAgMTIzNDU2Nzg5MDEyMzQ1NiBSb3VuZGVkIEluZXhhY3QKK2NsYW0wMTMgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2ICAgLT4gLTEyMzQ1Njc4OTAxMjM0NTYKK2NsYW0wMTQgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2LjAgLT4gLTEyMzQ1Njc4OTAxMjM0NTYgUm91bmRlZAorY2xhbTAxNSBhcHBseSAgLTEyMzQ1Njc4OTAxMjM0NTYuMSAtPiAtMTIzNDU2Nzg5MDEyMzQ1NiBSb3VuZGVkIEluZXhhY3QKKworCistLSBObWF4IGFuZCBzaW1pbGFyCitjbGFtMDIyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorY2xhbTAyNCBhcHBseSAgIDEuMjM0NTY3ODkwMTIzNDU2RSszODQgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSszODQKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitjbGFtMDMwIGFwcGx5ICAgMS4yM0UrMzg0ICAgICAgICAgICAgICAgLT4gMS4yMzAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCitjbGFtMDMyIGFwcGx5ICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCisKK2NsYW0wNTEgYXBwbHkgICAxMjM0NSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NQorY2xhbTA1MyBhcHBseSAgIDEyMzQgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQKK2NsYW0wNTUgYXBwbHkgICAxMjMgICAgICAgICAgICAgICAgICAgICAtPiAxMjMKK2NsYW0wNTcgYXBwbHkgICAxMiAgICAgICAgICAgICAgICAgICAgICAtPiAxMgorY2xhbTA1OSBhcHBseSAgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEKK2NsYW0wNjEgYXBwbHkgICAxLjIzICAgICAgICAgICAgICAgICAgICAtPiAxLjIzCitjbGFtMDYzIGFwcGx5ICAgMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitjbGFtMDcxIGFwcGx5ICAgMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitjbGFtMDczIGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworY2xhbTA3NSBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKKworY2xhbTA3NyBhcHBseSAgIDAuMTAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgU3Vibm9ybWFsCitjbGFtMDc5IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMTBFLTM4MyAgLT4gMS4wRS0zOTcgICAgICAgICAgICAgICBTdWJub3JtYWwKK2NsYW0wODEgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAxRS0zODMgICAtPiAxRS0zOTcgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorY2xhbTA4MyBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+IDFFLTM5OCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCisKKy0tIHVuZGVyZmxvd3MKK2NsYW0wOTAgYXBwbHkgICAxZS0zOTggICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsCitjbGFtMDkxIGFwcGx5ICAgMS45ZS0zOTggICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDIgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMDkyIGFwcGx5ICAgMS4xZS0zOTggICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMDkzIGFwcGx5ICAgMS4wMDAwMDAwMDAwMWUtMzk4ICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMDk0IGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMWUtMzk4ICAgLT4gIzAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMDk1IGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDFlLTM5OCAgLT4gIzAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMDk2IGFwcGx5ICAgMC4xZS0zOTggICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2NsYW0wOTcgYXBwbHkgICAwLjAwMDAwMDAwMDAxZS0zOTggICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMCAgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorY2xhbTA5OCBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDFlLTM5OCAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitjbGFtMDk5IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDFlLTM5OCAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gU2FtZSBhZ2FpbiwgbmVnYXRpdmVzCistLSBObWF4IGFuZCBzaW1pbGFyCitjbGFtMTIyIGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2NsYW0xMjQgYXBwbHkgIC0xLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0ICAtPiAtMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NAorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2NsYW0xMzAgYXBwbHkgIC0xLjIzRSszODQgICAgICAgICAgICAgICAtPiAtMS4yMzAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCitjbGFtMTMyIGFwcGx5ICAtMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorCitjbGFtMTUxIGFwcGx5ICAtMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gLTEyMzQ1CitjbGFtMTUzIGFwcGx5ICAtMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gLTEyMzQKK2NsYW0xNTUgYXBwbHkgIC0xMjMgICAgICAgICAgICAgICAgICAgICAtPiAtMTIzCitjbGFtMTU3IGFwcGx5ICAtMTIgICAgICAgICAgICAgICAgICAgICAgLT4gLTEyCitjbGFtMTU5IGFwcGx5ICAtMSAgICAgICAgICAgICAgICAgICAgICAgLT4gLTEKK2NsYW0xNjEgYXBwbHkgIC0xLjIzICAgICAgICAgICAgICAgICAgICAtPiAtMS4yMworY2xhbTE2MyBhcHBseSAgLTEyMy40NSAgICAgICAgICAgICAgICAgIC0+IC0xMjMuNDUKKworLS0gTm1pbiBhbmQgYmVsb3cKK2NsYW0xNzEgYXBwbHkgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCitjbGFtMTczIGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2NsYW0xNzUgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworCitjbGFtMTc3IGFwcGx5ICAtMC4xMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgU3Vibm9ybWFsCitjbGFtMTc5IGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMTBFLTM4MyAgLT4gLTEuMEUtMzk3ICAgICAgICAgICAgICAgU3Vibm9ybWFsCitjbGFtMTgxIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMUUtMzgzICAgLT4gLTFFLTM5NyAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCitjbGFtMTgzIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDFFLTM4MyAgLT4gLTFFLTM5OCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCisKKy0tIHVuZGVyZmxvd3MKK2NsYW0xODkgYXBwbHkgICAtMWUtMzk4ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsCitjbGFtMTkwIGFwcGx5ICAgLTEuMGUtMzk4ICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBSb3VuZGVkCitjbGFtMTkxIGFwcGx5ICAgLTEuOWUtMzk4ICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDIgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMTkyIGFwcGx5ICAgLTEuMWUtMzk4ICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMTkzIGFwcGx5ICAgLTEuMDAwMDAwMDAwMDFlLTM5OCAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMTk0IGFwcGx5ICAgLTEuMDAwMDAwMDAwMDAwMDFlLTM5OCAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMTk1IGFwcGx5ICAgLTEuMDAwMDAwMDAwMDAwMDAxZS0zOTggLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtMTk2IGFwcGx5ICAgLTAuMWUtMzk4ICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2NsYW0xOTcgYXBwbHkgICAtMC4wMDAwMDAwMDAwMWUtMzk4ICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMCAgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorY2xhbTE5OCBhcHBseSAgIC0wLjAwMDAwMDAwMDAwMDAxZS0zOTggIC0+ICM4MDAwMDAwMDAwMDAwMDAwICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitjbGFtMTk5IGFwcGx5ICAgLTAuMDAwMDAwMDAwMDAwMDAxZS0zOTggLT4gIzgwMDAwMDAwMDAwMDAwMDAgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gemVyb3MKK2NsYW00MDEgYXBwbHkgICAwRS01MDAgICAgICAgICAgICAgICAgICAtPiAwRS0zOTggIENsYW1wZWQKK2NsYW00MDIgYXBwbHkgICAwRS00MDAgICAgICAgICAgICAgICAgICAtPiAwRS0zOTggIENsYW1wZWQKK2NsYW00MDMgYXBwbHkgICAwRS0zOTggICAgICAgICAgICAgICAgICAtPiAwRS0zOTgKK2NsYW00MDQgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAwRS0zOTgKK2NsYW00MDUgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAgMC4wMAorY2xhbTQwNiBhcHBseSAgIDAgICAgICAgICAgICAgICAgICAgICAgIC0+IDAKK2NsYW00MDcgYXBwbHkgICAwRSszICAgICAgICAgICAgICAgICAgICAtPiAwRSszCitjbGFtNDA4IGFwcGx5ICAgMEUrMzY5ICAgICAgICAgICAgICAgICAgLT4gMEUrMzY5CistLSBjbGFtcGVkIHplcm9zLi4uCitjbGFtNDEwIGFwcGx5ICAgMEUrMzcwICAgICAgICAgICAgICAgICAgLT4gMEUrMzY5IENsYW1wZWQKK2NsYW00MTEgYXBwbHkgICAwRSszODQgICAgICAgICAgICAgICAgICAtPiAwRSszNjkgQ2xhbXBlZAorY2xhbTQxMiBhcHBseSAgIDBFKzQwMCAgICAgICAgICAgICAgICAgIC0+IDBFKzM2OSBDbGFtcGVkCitjbGFtNDEzIGFwcGx5ICAgMEUrNTAwICAgICAgICAgICAgICAgICAgLT4gMEUrMzY5IENsYW1wZWQKKworLS0gbmVnYXRpdmUgemVyb3MKK2NsYW00MjAgYXBwbHkgICAtMEUtNTAwICAgICAgICAgICAgICAgICAtPiAtMEUtMzk4IENsYW1wZWQKK2NsYW00MjEgYXBwbHkgICAtMEUtNDAwICAgICAgICAgICAgICAgICAtPiAtMEUtMzk4IENsYW1wZWQKK2NsYW00MjIgYXBwbHkgICAtMEUtMzk4ICAgICAgICAgICAgICAgICAtPiAtMEUtMzk4CitjbGFtNDIzIGFwcGx5ICAgLTAuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gLTBFLTM5OAorY2xhbTQyNCBhcHBseSAgIC0wRS0yICAgICAgICAgICAgICAgICAgIC0+IC0wLjAwCitjbGFtNDI1IGFwcGx5ICAgLTAgICAgICAgICAgICAgICAgICAgICAgLT4gLTAKK2NsYW00MjYgYXBwbHkgICAtMEUrMyAgICAgICAgICAgICAgICAgICAtPiAtMEUrMworY2xhbTQyNyBhcHBseSAgIC0wRSszNjkgICAgICAgICAgICAgICAgIC0+IC0wRSszNjkKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2NsYW00MzEgYXBwbHkgICAtMEUrMzcwICAgICAgICAgICAgICAgICAtPiAtMEUrMzY5IENsYW1wZWQKK2NsYW00MzIgYXBwbHkgICAtMEUrMzg0ICAgICAgICAgICAgICAgICAtPiAtMEUrMzY5IENsYW1wZWQKK2NsYW00MzMgYXBwbHkgICAtMEUrNDAwICAgICAgICAgICAgICAgICAtPiAtMEUrMzY5IENsYW1wZWQKK2NsYW00MzQgYXBwbHkgICAtMEUrNTAwICAgICAgICAgICAgICAgICAtPiAtMEUrMzY5IENsYW1wZWQKKworLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UKK2NsYW02MDEgYXBwbHkgICAxRSszODQgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKK2NsYW02MDMgYXBwbHkgICAxRSszODMgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorY2xhbTYwNSBhcHBseSAgIDFFKzM4MiAgICAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyIENsYW1wZWQKK2NsYW02MDcgYXBwbHkgICAxRSszODEgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxIENsYW1wZWQKK2NsYW02MDkgYXBwbHkgICAxRSszODAgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwRSszODAgQ2xhbXBlZAorY2xhbTYxMSBhcHBseSAgIDFFKzM3OSAgICAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMEUrMzc5IENsYW1wZWQKK2NsYW02MTMgYXBwbHkgICAxRSszNzggICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMDAwMEUrMzc4IENsYW1wZWQKK2NsYW02MTUgYXBwbHkgICAxRSszNzcgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMDAwRSszNzcgQ2xhbXBlZAorY2xhbTYxNyBhcHBseSAgIDFFKzM3NiAgICAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwMEUrMzc2IENsYW1wZWQKK2NsYW02MTkgYXBwbHkgICAxRSszNzUgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMEUrMzc1IENsYW1wZWQKK2NsYW02MjEgYXBwbHkgICAxRSszNzQgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwRSszNzQgQ2xhbXBlZAorY2xhbTYyMyBhcHBseSAgIDFFKzM3MyAgICAgICAgICAgICAgICAgIC0+IDEuMDAwMEUrMzczIENsYW1wZWQKK2NsYW02MjUgYXBwbHkgICAxRSszNzIgICAgICAgICAgICAgICAgICAtPiAxLjAwMEUrMzcyIENsYW1wZWQKK2NsYW02MjcgYXBwbHkgICAxRSszNzEgICAgICAgICAgICAgICAgICAtPiAxLjAwRSszNzEgQ2xhbXBlZAorY2xhbTYyOSBhcHBseSAgIDFFKzM3MCAgICAgICAgICAgICAgICAgIC0+IDEuMEUrMzcwIENsYW1wZWQKK2NsYW02MzEgYXBwbHkgICAxRSszNjkgICAgICAgICAgICAgICAgICAtPiAxRSszNjkKK2NsYW02MzMgYXBwbHkgICAxRSszNjggICAgICAgICAgICAgICAgICAtPiAxRSszNjgKKy0tIHNhbWUgd2l0aCA5cworY2xhbTY0MSBhcHBseSAgIDlFKzM4NCAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorY2xhbTY0MyBhcHBseSAgIDlFKzM4MyAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitjbGFtNjQ1IGFwcGx5ICAgOUUrMzgyICAgICAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwRSszODIgQ2xhbXBlZAorY2xhbTY0NyBhcHBseSAgIDlFKzM4MSAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwRSszODEgQ2xhbXBlZAorY2xhbTY0OSBhcHBseSAgIDlFKzM4MCAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDBFKzM4MCBDbGFtcGVkCitjbGFtNjUxIGFwcGx5ICAgOUUrMzc5ICAgICAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwMDAwRSszNzkgQ2xhbXBlZAorY2xhbTY1MyBhcHBseSAgIDlFKzM3OCAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwRSszNzggQ2xhbXBlZAorY2xhbTY1NSBhcHBseSAgIDlFKzM3NyAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDBFKzM3NyBDbGFtcGVkCitjbGFtNjU3IGFwcGx5ICAgOUUrMzc2ICAgICAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwRSszNzYgQ2xhbXBlZAorY2xhbTY1OSBhcHBseSAgIDlFKzM3NSAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwRSszNzUgQ2xhbXBlZAorY2xhbTY2MSBhcHBseSAgIDlFKzM3NCAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDBFKzM3NCBDbGFtcGVkCitjbGFtNjYzIGFwcGx5ICAgOUUrMzczICAgICAgICAgICAgICAgICAgLT4gOS4wMDAwRSszNzMgQ2xhbXBlZAorY2xhbTY2NSBhcHBseSAgIDlFKzM3MiAgICAgICAgICAgICAgICAgIC0+IDkuMDAwRSszNzIgQ2xhbXBlZAorY2xhbTY2NyBhcHBseSAgIDlFKzM3MSAgICAgICAgICAgICAgICAgIC0+IDkuMDBFKzM3MSBDbGFtcGVkCitjbGFtNjY5IGFwcGx5ICAgOUUrMzcwICAgICAgICAgICAgICAgICAgLT4gOS4wRSszNzAgQ2xhbXBlZAorY2xhbTY3MSBhcHBseSAgIDlFKzM2OSAgICAgICAgICAgICAgICAgIC0+IDlFKzM2OQorY2xhbTY3MyBhcHBseSAgIDlFKzM2OCAgICAgICAgICAgICAgICAgIC0+IDlFKzM2OAorCistLSBzdWJub3JtYWxzIGNsYW1wZWQgdG8gMC1FdGlueQorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworY2xhbTY4MSBhcHBseSA3RS0zOTggICAgIC0+IDdFLTM5OCBTdWJub3JtYWwKK2NsYW02ODIgYXBwbHkgMEUtMzk4ICAgICAtPiAwRS0zOTgKK2NsYW02ODMgYXBwbHkgN0UtMzk5ICAgICAtPiAxRS0zOTggU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2NsYW02ODQgYXBwbHkgNEUtMzk5ICAgICAtPiAwRS0zOTggQ2xhbXBlZCBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTY4NSBhcHBseSA3RS00MDAgICAgIC0+IDBFLTM5OCBDbGFtcGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtNjg2IGFwcGx5IDdFLTQwMSAgICAgLT4gMEUtMzk4IENsYW1wZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2NsYW02ODcgYXBwbHkgMEUtMzk5ICAgICAtPiAwRS0zOTggQ2xhbXBlZAorY2xhbTY4OCBhcHBseSAwRS00MDAgICAgIC0+IDBFLTM5OCBDbGFtcGVkCitjbGFtNjg5IGFwcGx5IDBFLTQwMSAgICAgLT4gMEUtMzk4IENsYW1wZWQKKworLS0gZXhhbXBsZSBmcm9tIGRvY3VtZW50YXRpb24KK3ByZWNpc2lvbjogICA3Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogKzk2CittaW5FeHBvbmVudDogLTk1CisKK2NsYW1wOiAgICAgICAwCitjbGFtNzAwIGFwcGx5ICAgMS4yM0UrOTYgICAgICAgICAgICAgICAgLT4gMS4yM0UrOTYKKworY2xhbXA6ICAgICAgIDEKK2NsYW03MDEgYXBwbHkgICAxLjIzRSs5NiAgICAgICAgICAgICAgICAtPiAxLjIzMDAwMEUrOTYgQ2xhbXBlZApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFzcy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFzcy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNWJjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NsYXNzLmRlY1Rlc3QKQEAgLTAsMCArMSwxMzEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY2xhc3MuZGVjVGVzdCAtLSBDbGFzcyBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBbTmV3IDIwMDYuMTEuMjddCisKK3ByZWNpc2lvbjogICA5CittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2NsYXN4MDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MDAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MDAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MDA0ICBjbGFzcyAgICAxRS0xMDA3ICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorY2xhc3gwMDUgIGNsYXNzICAwLjFFLTk5OSAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitjbGFzeDAwNiAgY2xhc3MgIDAuOTk5OTk5OTlFLTk5OSAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2NsYXN4MDA3ICBjbGFzcyAgMS4wMDAwMDAwMEUtOTk5ICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMDggIGNsYXNzICAgMUUtOTk5ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDE3ICBjbGFzcyAgIDFFKzk5OSAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTggIGNsYXNzICAgOS45OTk5OTk5OUUrOTk5ICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQorCitjbGFzeDAyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDAyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDAyNCAgY2xhc3MgICAtMUUtMTAwNyAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2NsYXN4MDI1ICBjbGFzcyAgLTAuMUUtOTk5ICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorY2xhc3gwMjYgIGNsYXNzICAtMC45OTk5OTk5OUUtOTk5ICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitjbGFzeDAyNyAgY2xhc3MgIC0xLjAwMDAwMDAwRS05OTkgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDI4ICBjbGFzcyAgLTFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzNyAgY2xhc3MgIC0xRSs5OTkgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDM4ICBjbGFzcyAgLTkuOTk5OTk5OTlFKzk5OSAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKworY2xhc3gwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2NsYXN4MDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitjbGFzeDA0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTgorY2xhc3gwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitjbGFzeDA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2NsYXN4MDQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTgorCisKKy0tIGRlY2ltYWw2NCBib3VuZHMKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworY2xhc3gyMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworY2xhc3gyMDIgIGNsYXNzICAgIDAuMDAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworY2xhc3gyMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworY2xhc3gyMDQgIGNsYXNzICAgIDFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitjbGFzeDIwNSAgY2xhc3MgIDAuMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2NsYXN4MjA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAgLT4gK1N1Ym5vcm1hbAorY2xhc3gyMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtPiArTm9ybWFsCitjbGFzeDIwOCAgY2xhc3MgICAxRS0zODMgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxMiAgY2xhc3MgICAxRS0xICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxNSAgY2xhc3MgICAxMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTcgIGNsYXNzICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxOCAgY2xhc3MgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIC0+ICtOb3JtYWwKK2NsYXN4MjE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5CisKK2NsYXN4MjIxICBjbGFzcyAgIC0wICAgICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2NsYXN4MjIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2NsYXN4MjIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2NsYXN4MjI0ICBjbGFzcyAgIC0xRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorY2xhc3gyMjUgIGNsYXNzICAtMC4xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitjbGFzeDIyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgIC0+IC1TdWJub3JtYWwKK2NsYXN4MjI3ICBjbGFzcyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgLT4gLU5vcm1hbAorY2xhc3gyMjggIGNsYXNzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjMwICBjbGFzcyAgLTFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjM0ICBjbGFzcyAgLTIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjM3ICBjbGFzcyAgLTFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzggIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiAtTm9ybWFsCitjbGFzeDIzOSAgY2xhc3MgIC1JbmYgICAgICAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitjbGFzeDI0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorY2xhc3gyNDIgIGNsYXNzICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2NsYXN4MjQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFOCitjbGFzeDI0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2NsYXN4MjQ1ICBjbGFzcyAgLXNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorY2xhc3gyNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFOCisKKworCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmUuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NzEzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmUuZGVjVGVzdApAQCAtMCwwICsxLDc1OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb21wYXJlLmRlY1Rlc3QgLS0gZGVjaW1hbCBjb21wYXJpc29uIHRoYXQgYWxsb3dzIHF1aWV0IE5hTnMgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorCitleHRlbmRlZDogMQorCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CisKKy0tIHNhbml0eSBjaGVja3MKK2NvbXgwMDEgY29tcGFyZSAgLTIgIC0yICAtPiAwCitjb214MDAyIGNvbXBhcmUgIC0yICAtMSAgLT4gLTEKK2NvbXgwMDMgY29tcGFyZSAgLTIgICAwICAtPiAtMQorY29teDAwNCBjb21wYXJlICAtMiAgIDEgIC0+IC0xCitjb214MDA1IGNvbXBhcmUgIC0yICAgMiAgLT4gLTEKK2NvbXgwMDYgY29tcGFyZSAgLTEgIC0yICAtPiAxCitjb214MDA3IGNvbXBhcmUgIC0xICAtMSAgLT4gMAorY29teDAwOCBjb21wYXJlICAtMSAgIDAgIC0+IC0xCitjb214MDA5IGNvbXBhcmUgIC0xICAgMSAgLT4gLTEKK2NvbXgwMTAgY29tcGFyZSAgLTEgICAyICAtPiAtMQorY29teDAxMSBjb21wYXJlICAgMCAgLTIgIC0+IDEKK2NvbXgwMTIgY29tcGFyZSAgIDAgIC0xICAtPiAxCitjb214MDEzIGNvbXBhcmUgICAwICAgMCAgLT4gMAorY29teDAxNCBjb21wYXJlICAgMCAgIDEgIC0+IC0xCitjb214MDE1IGNvbXBhcmUgICAwICAgMiAgLT4gLTEKK2NvbXgwMTYgY29tcGFyZSAgIDEgIC0yICAtPiAxCitjb214MDE3IGNvbXBhcmUgICAxICAtMSAgLT4gMQorY29teDAxOCBjb21wYXJlICAgMSAgIDAgIC0+IDEKK2NvbXgwMTkgY29tcGFyZSAgIDEgICAxICAtPiAwCitjb214MDIwIGNvbXBhcmUgICAxICAgMiAgLT4gLTEKK2NvbXgwMjEgY29tcGFyZSAgIDIgIC0yICAtPiAxCitjb214MDIyIGNvbXBhcmUgICAyICAtMSAgLT4gMQorY29teDAyMyBjb21wYXJlICAgMiAgIDAgIC0+IDEKK2NvbXgwMjUgY29tcGFyZSAgIDIgICAxICAtPiAxCitjb214MDI2IGNvbXBhcmUgICAyICAgMiAgLT4gMAorCitjb214MDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwCitjb214MDMyIGNvbXBhcmUgIC0yMCAgLTEwICAtPiAtMQorY29teDAzMyBjb21wYXJlICAtMjAgICAwMCAgLT4gLTEKK2NvbXgwMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xCitjb214MDM1IGNvbXBhcmUgIC0yMCAgIDIwICAtPiAtMQorY29teDAzNiBjb21wYXJlICAtMTAgIC0yMCAgLT4gMQorY29teDAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMAorY29teDAzOCBjb21wYXJlICAtMTAgICAwMCAgLT4gLTEKK2NvbXgwMzkgY29tcGFyZSAgLTEwICAgMTAgIC0+IC0xCitjb214MDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQorY29teDA0MSBjb21wYXJlICAgMDAgIC0yMCAgLT4gMQorY29teDA0MiBjb21wYXJlICAgMDAgIC0xMCAgLT4gMQorY29teDA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMAorY29teDA0NCBjb21wYXJlICAgMDAgICAxMCAgLT4gLTEKK2NvbXgwNDUgY29tcGFyZSAgIDAwICAgMjAgIC0+IC0xCitjb214MDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxCitjb214MDQ3IGNvbXBhcmUgICAxMCAgLTEwICAtPiAxCitjb214MDQ4IGNvbXBhcmUgICAxMCAgIDAwICAtPiAxCitjb214MDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwCitjb214MDUwIGNvbXBhcmUgICAxMCAgIDIwICAtPiAtMQorY29teDA1MSBjb21wYXJlICAgMjAgIC0yMCAgLT4gMQorY29teDA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQorY29teDA1MyBjb21wYXJlICAgMjAgICAwMCAgLT4gMQorY29teDA1NSBjb21wYXJlICAgMjAgICAxMCAgLT4gMQorY29teDA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMAorCitjb214MDYxIGNvbXBhcmUgIC0yLjAgIC0yLjAgIC0+IDAKK2NvbXgwNjIgY29tcGFyZSAgLTIuMCAgLTEuMCAgLT4gLTEKK2NvbXgwNjMgY29tcGFyZSAgLTIuMCAgIDAuMCAgLT4gLTEKK2NvbXgwNjQgY29tcGFyZSAgLTIuMCAgIDEuMCAgLT4gLTEKK2NvbXgwNjUgY29tcGFyZSAgLTIuMCAgIDIuMCAgLT4gLTEKK2NvbXgwNjYgY29tcGFyZSAgLTEuMCAgLTIuMCAgLT4gMQorY29teDA2NyBjb21wYXJlICAtMS4wICAtMS4wICAtPiAwCitjb214MDY4IGNvbXBhcmUgIC0xLjAgICAwLjAgIC0+IC0xCitjb214MDY5IGNvbXBhcmUgIC0xLjAgICAxLjAgIC0+IC0xCitjb214MDcwIGNvbXBhcmUgIC0xLjAgICAyLjAgIC0+IC0xCitjb214MDcxIGNvbXBhcmUgICAwLjAgIC0yLjAgIC0+IDEKK2NvbXgwNzIgY29tcGFyZSAgIDAuMCAgLTEuMCAgLT4gMQorY29teDA3MyBjb21wYXJlICAgMC4wICAgMC4wICAtPiAwCitjb214MDc0IGNvbXBhcmUgICAwLjAgICAxLjAgIC0+IC0xCitjb214MDc1IGNvbXBhcmUgICAwLjAgICAyLjAgIC0+IC0xCitjb214MDc2IGNvbXBhcmUgICAxLjAgIC0yLjAgIC0+IDEKK2NvbXgwNzcgY29tcGFyZSAgIDEuMCAgLTEuMCAgLT4gMQorY29teDA3OCBjb21wYXJlICAgMS4wICAgMC4wICAtPiAxCitjb214MDc5IGNvbXBhcmUgICAxLjAgICAxLjAgIC0+IDAKK2NvbXgwODAgY29tcGFyZSAgIDEuMCAgIDIuMCAgLT4gLTEKK2NvbXgwODEgY29tcGFyZSAgIDIuMCAgLTIuMCAgLT4gMQorY29teDA4MiBjb21wYXJlICAgMi4wICAtMS4wICAtPiAxCitjb214MDgzIGNvbXBhcmUgICAyLjAgICAwLjAgIC0+IDEKK2NvbXgwODUgY29tcGFyZSAgIDIuMCAgIDEuMCAgLT4gMQorY29teDA4NiBjb21wYXJlICAgMi4wICAgMi4wICAtPiAwCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2NvbXgwOTUgY29tcGFyZSAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gMAorY29teDA5NiBjb21wYXJlIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAtMQorY29teDA5NyBjb21wYXJlICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtPiAxCitjb214MDk4IGNvbXBhcmUgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC0+IDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCitjb214MTAwIGNvbXBhcmUgICA3LjAgICAgNy4wICAgIC0+IDAKK2NvbXgxMDEgY29tcGFyZSAgIDcuMCAgICA3ICAgICAgLT4gMAorY29teDEwMiBjb21wYXJlICAgNyAgICAgIDcuMCAgICAtPiAwCitjb214MTAzIGNvbXBhcmUgICA3RSswICAgNy4wICAgIC0+IDAKK2NvbXgxMDQgY29tcGFyZSAgIDcwRS0xICA3LjAgICAgLT4gMAorY29teDEwNSBjb21wYXJlICAgMC43RSsxIDcgICAgICAtPiAwCitjb214MTA2IGNvbXBhcmUgICA3MEUtMSAgNyAgICAgIC0+IDAKK2NvbXgxMDcgY29tcGFyZSAgIDcuMCAgICA3RSswICAgLT4gMAorY29teDEwOCBjb21wYXJlICAgNy4wICAgIDcwRS0xICAtPiAwCitjb214MTA5IGNvbXBhcmUgICA3ICAgICAgMC43RSsxIC0+IDAKK2NvbXgxMTAgY29tcGFyZSAgIDcgICAgICA3MEUtMSAgLT4gMAorCitjb214MTIwIGNvbXBhcmUgICA4LjAgICAgNy4wICAgIC0+IDEKK2NvbXgxMjEgY29tcGFyZSAgIDguMCAgICA3ICAgICAgLT4gMQorY29teDEyMiBjb21wYXJlICAgOCAgICAgIDcuMCAgICAtPiAxCitjb214MTIzIGNvbXBhcmUgICA4RSswICAgNy4wICAgIC0+IDEKK2NvbXgxMjQgY29tcGFyZSAgIDgwRS0xICA3LjAgICAgLT4gMQorY29teDEyNSBjb21wYXJlICAgMC44RSsxIDcgICAgICAtPiAxCitjb214MTI2IGNvbXBhcmUgICA4MEUtMSAgNyAgICAgIC0+IDEKK2NvbXgxMjcgY29tcGFyZSAgIDguMCAgICA3RSswICAgLT4gMQorY29teDEyOCBjb21wYXJlICAgOC4wICAgIDcwRS0xICAtPiAxCitjb214MTI5IGNvbXBhcmUgICA4ICAgICAgMC43RSsxICAtPiAxCitjb214MTMwIGNvbXBhcmUgICA4ICAgICAgNzBFLTEgIC0+IDEKKworY29teDE0MCBjb21wYXJlICAgOC4wICAgIDkuMCAgICAtPiAtMQorY29teDE0MSBjb21wYXJlICAgOC4wICAgIDkgICAgICAtPiAtMQorY29teDE0MiBjb21wYXJlICAgOCAgICAgIDkuMCAgICAtPiAtMQorY29teDE0MyBjb21wYXJlICAgOEUrMCAgIDkuMCAgICAtPiAtMQorY29teDE0NCBjb21wYXJlICAgODBFLTEgIDkuMCAgICAtPiAtMQorY29teDE0NSBjb21wYXJlICAgMC44RSsxIDkgICAgICAtPiAtMQorY29teDE0NiBjb21wYXJlICAgODBFLTEgIDkgICAgICAtPiAtMQorY29teDE0NyBjb21wYXJlICAgOC4wICAgIDlFKzAgICAtPiAtMQorY29teDE0OCBjb21wYXJlICAgOC4wICAgIDkwRS0xICAtPiAtMQorY29teDE0OSBjb21wYXJlICAgOCAgICAgIDAuOUUrMSAtPiAtMQorY29teDE1MCBjb21wYXJlICAgOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitjb214MjAwIGNvbXBhcmUgIC03LjAgICAgNy4wICAgIC0+IC0xCitjb214MjAxIGNvbXBhcmUgIC03LjAgICAgNyAgICAgIC0+IC0xCitjb214MjAyIGNvbXBhcmUgIC03ICAgICAgNy4wICAgIC0+IC0xCitjb214MjAzIGNvbXBhcmUgIC03RSswICAgNy4wICAgIC0+IC0xCitjb214MjA0IGNvbXBhcmUgIC03MEUtMSAgNy4wICAgIC0+IC0xCitjb214MjA1IGNvbXBhcmUgIC0wLjdFKzEgNyAgICAgIC0+IC0xCitjb214MjA2IGNvbXBhcmUgIC03MEUtMSAgNyAgICAgIC0+IC0xCitjb214MjA3IGNvbXBhcmUgIC03LjAgICAgN0UrMCAgIC0+IC0xCitjb214MjA4IGNvbXBhcmUgIC03LjAgICAgNzBFLTEgIC0+IC0xCitjb214MjA5IGNvbXBhcmUgIC03ICAgICAgMC43RSsxIC0+IC0xCitjb214MjEwIGNvbXBhcmUgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2NvbXgyMjAgY29tcGFyZSAgLTguMCAgICA3LjAgICAgLT4gLTEKK2NvbXgyMjEgY29tcGFyZSAgLTguMCAgICA3ICAgICAgLT4gLTEKK2NvbXgyMjIgY29tcGFyZSAgLTggICAgICA3LjAgICAgLT4gLTEKK2NvbXgyMjMgY29tcGFyZSAgLThFKzAgICA3LjAgICAgLT4gLTEKK2NvbXgyMjQgY29tcGFyZSAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2NvbXgyMjUgY29tcGFyZSAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2NvbXgyMjYgY29tcGFyZSAgLTgwRS0xICA3ICAgICAgLT4gLTEKK2NvbXgyMjcgY29tcGFyZSAgLTguMCAgICA3RSswICAgLT4gLTEKK2NvbXgyMjggY29tcGFyZSAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2NvbXgyMjkgY29tcGFyZSAgLTggICAgICAwLjdFKzEgLT4gLTEKK2NvbXgyMzAgY29tcGFyZSAgLTggICAgICA3MEUtMSAgLT4gLTEKKworY29teDI0MCBjb21wYXJlICAtOC4wICAgIDkuMCAgICAtPiAtMQorY29teDI0MSBjb21wYXJlICAtOC4wICAgIDkgICAgICAtPiAtMQorY29teDI0MiBjb21wYXJlICAtOCAgICAgIDkuMCAgICAtPiAtMQorY29teDI0MyBjb21wYXJlICAtOEUrMCAgIDkuMCAgICAtPiAtMQorY29teDI0NCBjb21wYXJlICAtODBFLTEgIDkuMCAgICAtPiAtMQorY29teDI0NSBjb21wYXJlICAtMC44RSsxIDkgICAgICAtPiAtMQorY29teDI0NiBjb21wYXJlICAtODBFLTEgIDkgICAgICAtPiAtMQorY29teDI0NyBjb21wYXJlICAtOC4wICAgIDlFKzAgICAtPiAtMQorY29teDI0OCBjb21wYXJlICAtOC4wICAgIDkwRS0xICAtPiAtMQorY29teDI0OSBjb21wYXJlICAtOCAgICAgIDAuOUUrMSAtPiAtMQorY29teDI1MCBjb21wYXJlICAtOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitjb214MzAwIGNvbXBhcmUgICA3LjAgICAgLTcuMCAgICAtPiAxCitjb214MzAxIGNvbXBhcmUgICA3LjAgICAgLTcgICAgICAtPiAxCitjb214MzAyIGNvbXBhcmUgICA3ICAgICAgLTcuMCAgICAtPiAxCitjb214MzAzIGNvbXBhcmUgICA3RSswICAgLTcuMCAgICAtPiAxCitjb214MzA0IGNvbXBhcmUgICA3MEUtMSAgLTcuMCAgICAtPiAxCitjb214MzA1IGNvbXBhcmUgICAuN0UrMSAgLTcgICAgICAtPiAxCitjb214MzA2IGNvbXBhcmUgICA3MEUtMSAgLTcgICAgICAtPiAxCitjb214MzA3IGNvbXBhcmUgICA3LjAgICAgLTdFKzAgICAtPiAxCitjb214MzA4IGNvbXBhcmUgICA3LjAgICAgLTcwRS0xICAtPiAxCitjb214MzA5IGNvbXBhcmUgICA3ICAgICAgLS43RSsxICAtPiAxCitjb214MzEwIGNvbXBhcmUgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2NvbXgzMjAgY29tcGFyZSAgIDguMCAgICAtNy4wICAgIC0+IDEKK2NvbXgzMjEgY29tcGFyZSAgIDguMCAgICAtNyAgICAgIC0+IDEKK2NvbXgzMjIgY29tcGFyZSAgIDggICAgICAtNy4wICAgIC0+IDEKK2NvbXgzMjMgY29tcGFyZSAgIDhFKzAgICAtNy4wICAgIC0+IDEKK2NvbXgzMjQgY29tcGFyZSAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2NvbXgzMjUgY29tcGFyZSAgIC44RSsxICAtNyAgICAgIC0+IDEKK2NvbXgzMjYgY29tcGFyZSAgIDgwRS0xICAtNyAgICAgIC0+IDEKK2NvbXgzMjcgY29tcGFyZSAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2NvbXgzMjggY29tcGFyZSAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2NvbXgzMjkgY29tcGFyZSAgIDggICAgICAtLjdFKzEgIC0+IDEKK2NvbXgzMzAgY29tcGFyZSAgIDggICAgICAtNzBFLTEgIC0+IDEKKworY29teDM0MCBjb21wYXJlICAgOC4wICAgIC05LjAgICAgLT4gMQorY29teDM0MSBjb21wYXJlICAgOC4wICAgIC05ICAgICAgLT4gMQorY29teDM0MiBjb21wYXJlICAgOCAgICAgIC05LjAgICAgLT4gMQorY29teDM0MyBjb21wYXJlICAgOEUrMCAgIC05LjAgICAgLT4gMQorY29teDM0NCBjb21wYXJlICAgODBFLTEgIC05LjAgICAgLT4gMQorY29teDM0NSBjb21wYXJlICAgLjhFKzEgIC05ICAgICAgLT4gMQorY29teDM0NiBjb21wYXJlICAgODBFLTEgIC05ICAgICAgLT4gMQorY29teDM0NyBjb21wYXJlICAgOC4wICAgIC05RSswICAgLT4gMQorY29teDM0OCBjb21wYXJlICAgOC4wICAgIC05MEUtMSAgLT4gMQorY29teDM0OSBjb21wYXJlICAgOCAgICAgIC0uOUUrMSAgLT4gMQorY29teDM1MCBjb21wYXJlICAgOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitjb214NDAwIGNvbXBhcmUgICAtNy4wICAgIC03LjAgICAgLT4gMAorY29teDQwMSBjb21wYXJlICAgLTcuMCAgICAtNyAgICAgIC0+IDAKK2NvbXg0MDIgY29tcGFyZSAgIC03ICAgICAgLTcuMCAgICAtPiAwCitjb214NDAzIGNvbXBhcmUgICAtN0UrMCAgIC03LjAgICAgLT4gMAorY29teDQwNCBjb21wYXJlICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2NvbXg0MDUgY29tcGFyZSAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitjb214NDA2IGNvbXBhcmUgICAtNzBFLTEgIC03ICAgICAgLT4gMAorY29teDQwNyBjb21wYXJlICAgLTcuMCAgICAtN0UrMCAgIC0+IDAKK2NvbXg0MDggY29tcGFyZSAgIC03LjAgICAgLTcwRS0xICAtPiAwCitjb214NDA5IGNvbXBhcmUgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorY29teDQxMCBjb21wYXJlICAgLTcgICAgICAtNzBFLTEgIC0+IDAKKworY29teDQyMCBjb21wYXJlICAgLTguMCAgICAtNy4wICAgIC0+IC0xCitjb214NDIxIGNvbXBhcmUgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2NvbXg0MjIgY29tcGFyZSAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorY29teDQyMyBjb21wYXJlICAgLThFKzAgICAtNy4wICAgIC0+IC0xCitjb214NDI0IGNvbXBhcmUgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2NvbXg0MjUgY29tcGFyZSAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorY29teDQyNiBjb21wYXJlICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCitjb214NDI3IGNvbXBhcmUgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2NvbXg0MjggY29tcGFyZSAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorY29teDQyOSBjb21wYXJlICAgLTggICAgICAtLjdFKzEgIC0+IC0xCitjb214NDMwIGNvbXBhcmUgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworY29teDQ0MCBjb21wYXJlICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2NvbXg0NDEgY29tcGFyZSAgIC04LjAgICAgLTkgICAgICAtPiAxCitjb214NDQyIGNvbXBhcmUgICAtOCAgICAgIC05LjAgICAgLT4gMQorY29teDQ0MyBjb21wYXJlICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2NvbXg0NDQgY29tcGFyZSAgIC04MEUtMSAgLTkuMCAgICAtPiAxCitjb214NDQ1IGNvbXBhcmUgICAtLjhFKzEgIC05ICAgICAgLT4gMQorY29teDQ0NiBjb21wYXJlICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2NvbXg0NDcgY29tcGFyZSAgIC04LjAgICAgLTlFKzAgICAtPiAxCitjb214NDQ4IGNvbXBhcmUgICAtOC4wICAgIC05MEUtMSAgLT4gMQorY29teDQ0OSBjb21wYXJlICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2NvbXg0NTAgY29tcGFyZSAgIC04ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgorY29teDQ1MSBjb21wYXJlICAgICAgMS4wICAgICAgIDAuMSAgLT4gMQorY29teDQ1MiBjb21wYXJlICAgICAgMC4xICAgICAgIDEuMCAgLT4gLTEKK2NvbXg0NTMgY29tcGFyZSAgICAgMTAuMCAgICAgICAwLjEgIC0+IDEKK2NvbXg0NTQgY29tcGFyZSAgICAgIDAuMSAgICAgIDEwLjAgIC0+IC0xCitjb214NDU1IGNvbXBhcmUgICAgICAxMDAgICAgICAgMS4wICAtPiAxCitjb214NDU2IGNvbXBhcmUgICAgICAxLjAgICAgICAgMTAwICAtPiAtMQorY29teDQ1NyBjb21wYXJlICAgICAxMDAwICAgICAgMTAuMCAgLT4gMQorY29teDQ1OCBjb21wYXJlICAgICAxMC4wICAgICAgMTAwMCAgLT4gLTEKK2NvbXg0NTkgY29tcGFyZSAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEKK2NvbXg0NjAgY29tcGFyZSAgICAxMDAuMCAgICAgMTAwMDAgIC0+IC0xCitjb214NDYxIGNvbXBhcmUgICAxMDAwMDAgICAgMTAwMC4wICAtPiAxCitjb214NDYyIGNvbXBhcmUgICAxMDAwLjAgICAgMTAwMDAwICAtPiAtMQorY29teDQ2MyBjb21wYXJlICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMQorY29teDQ2NCBjb21wYXJlICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gLTEKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitwcmVjaXNpb246IDQwCitjb214NDcwIGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IDAKK2NvbXg0NzEgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitjb214NDcyIGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAwCitjb214NDczIGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2NvbXg0NzQgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAwCitjb214NDc1IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitjb214NDc2IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IDAKK2NvbXg0NzcgY29tcGFyZSAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitjb214NDc4IGNvbXBhcmUgMTIzLjQ1NjAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAwCitjb214NDc5IGNvbXBhcmUgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2NvbXg0ODAgY29tcGFyZSAxMjMuNDU2MDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAwCitjb214NDgxIGNvbXBhcmUgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitjb214NDgyIGNvbXBhcmUgMTIzLjQ1NjBFNzg5IDEyMy40NTZFNzg5IC0+IDAKK2NvbXg0ODMgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwCitjb214NDg0IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFLTg5IC0+IDAKK2NvbXg0ODUgY29tcGFyZSAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMDAwRTc4OSAtPiAwCitjb214NDg2IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwRS04OSAtPiAwCitjb214NDg3IGNvbXBhcmUgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwMDBFNzg5IC0+IDAKK2NvbXg0ODggY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAwCitjb214NDg5IGNvbXBhcmUgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwRTc4OSAtPiAwCitjb214NDkwIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDAKK2NvbXg0OTEgY29tcGFyZSAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwRTc4OSAtPiAwCitjb214NDkyIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAwCitjb214NDkzIGNvbXBhcmUgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDBFNzg5IC0+IDAKK2NvbXg0OTQgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAwCitjb214NDk1IGNvbXBhcmUgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwRTc4OSAtPiAwCitjb214NDk2IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDAKK2NvbXg0OTcgY29tcGFyZSAxMjMuNDU2RTc4OSAxMjMuNDU2RTc4OSAtPiAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK3ByZWNpc2lvbjogOQorY29teDUwMCBjb21wYXJlICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2NvbXg1MDEgY29tcGFyZSAgICAxICAgICAxRS0xNCAgICAtPiAxCitjb214NTAyIGNvbXBhcmUgICAgMSAgICAgMUUtMTMgICAgLT4gMQorY29teDUwMyBjb21wYXJlICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2NvbXg1MDQgY29tcGFyZSAgICAxICAgICAxRS0xMSAgICAtPiAxCitjb214NTA1IGNvbXBhcmUgICAgMSAgICAgMUUtMTAgICAgLT4gMQorY29teDUwNiBjb21wYXJlICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2NvbXg1MDcgY29tcGFyZSAgICAxICAgICAxRS04ICAgICAtPiAxCitjb214NTA4IGNvbXBhcmUgICAgMSAgICAgMUUtNyAgICAgLT4gMQorY29teDUwOSBjb21wYXJlICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2NvbXg1MTAgY29tcGFyZSAgICAxICAgICAxRS01ICAgICAtPiAxCitjb214NTExIGNvbXBhcmUgICAgMSAgICAgMUUtNCAgICAgLT4gMQorY29teDUxMiBjb21wYXJlICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2NvbXg1MTMgY29tcGFyZSAgICAxICAgICAxRS0yICAgICAtPiAxCitjb214NTE0IGNvbXBhcmUgICAgMSAgICAgMUUtMSAgICAgLT4gMQorY29teDUxNSBjb21wYXJlICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2NvbXg1MTYgY29tcGFyZSAgICAxICAgICAxRSsxICAgICAtPiAtMQorY29teDUxNyBjb21wYXJlICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitjb214NTE4IGNvbXBhcmUgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2NvbXg1MTkgY29tcGFyZSAgICAxICAgICAxRSs0ICAgICAtPiAtMQorY29teDUyMSBjb21wYXJlICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitjb214NTIyIGNvbXBhcmUgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2NvbXg1MjMgY29tcGFyZSAgICAxICAgICAxRSs3ICAgICAtPiAtMQorY29teDUyNCBjb21wYXJlICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitjb214NTI1IGNvbXBhcmUgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2NvbXg1MjYgY29tcGFyZSAgICAxICAgICAxRSsxMCAgICAtPiAtMQorY29teDUyNyBjb21wYXJlICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitjb214NTI4IGNvbXBhcmUgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2NvbXg1MjkgY29tcGFyZSAgICAxICAgICAxRSsxMyAgICAtPiAtMQorY29teDUzMCBjb21wYXJlICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitjb214NTMxIGNvbXBhcmUgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKKy0tIExSIHN3YXAKK2NvbXg1NDAgY29tcGFyZSAgICAxRS0xNSAgMSAgICAgICAtPiAtMQorY29teDU0MSBjb21wYXJlICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitjb214NTQyIGNvbXBhcmUgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2NvbXg1NDMgY29tcGFyZSAgICAxRS0xMiAgMSAgICAgICAtPiAtMQorY29teDU0NCBjb21wYXJlICAgIDFFLTExICAxICAgICAgIC0+IC0xCitjb214NTQ1IGNvbXBhcmUgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2NvbXg1NDYgY29tcGFyZSAgICAxRS05ICAgMSAgICAgICAtPiAtMQorY29teDU0NyBjb21wYXJlICAgIDFFLTggICAxICAgICAgIC0+IC0xCitjb214NTQ4IGNvbXBhcmUgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2NvbXg1NDkgY29tcGFyZSAgICAxRS02ICAgMSAgICAgICAtPiAtMQorY29teDU1MCBjb21wYXJlICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitjb214NTUxIGNvbXBhcmUgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2NvbXg1NTIgY29tcGFyZSAgICAxRS0zICAgMSAgICAgICAtPiAtMQorY29teDU1MyBjb21wYXJlICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitjb214NTU0IGNvbXBhcmUgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2NvbXg1NTUgY29tcGFyZSAgICAxRS0wICAgMSAgICAgICAtPiAgMAorY29teDU1NiBjb21wYXJlICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitjb214NTU3IGNvbXBhcmUgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2NvbXg1NTggY29tcGFyZSAgICAxRSszICAgMSAgICAgICAtPiAgMQorY29teDU1OSBjb21wYXJlICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitjb214NTYxIGNvbXBhcmUgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2NvbXg1NjIgY29tcGFyZSAgICAxRSs2ICAgMSAgICAgICAtPiAgMQorY29teDU2MyBjb21wYXJlICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitjb214NTY0IGNvbXBhcmUgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2NvbXg1NjUgY29tcGFyZSAgICAxRSs5ICAgMSAgICAgICAtPiAgMQorY29teDU2NiBjb21wYXJlICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitjb214NTY3IGNvbXBhcmUgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2NvbXg1NjggY29tcGFyZSAgICAxRSsxMiAgMSAgICAgICAtPiAgMQorY29teDU2OSBjb21wYXJlICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitjb214NTcwIGNvbXBhcmUgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2NvbXg1NzEgY29tcGFyZSAgICAxRSsxNSAgMSAgICAgICAtPiAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5Citjb214NTgwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitjb214NTgxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitjb214NTgyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxCitjb214NTgzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitjb214NTg0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitjb214NTg1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxCitjb214NTg2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitjb214NTg3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitjb214NTg4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxCitjb214NTg5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorY29teDU5MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2NvbXg1OTEgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xCitjb214NTkyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorY29teDU5MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2NvbXg1OTQgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xCitjb214NTk1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorY29teDU5NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2NvbXg1OTcgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xCitjb214NTk4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorY29teDU5OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK3ByZWNpc2lvbjogMjAKK2NvbXg2MDAgY29tcGFyZSAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorY29teDYwMSBjb21wYXJlICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitjb214NjAyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvbXg2MDMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQorY29teDYwNCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitjb214NjA1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2NvbXg2MDYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQorY29teDYwNyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitjb214NjA4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2NvbXg2MDkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQorY29teDYxMCBjb21wYXJlICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitjb214NjExIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2NvbXg2MTIgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQorY29teDYxMyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitjb214NjE0IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2NvbXg2MTUgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQorY29teDYxNiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitjb214NjE3IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2NvbXg2MTggY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQorY29teDYxOSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitjb214NjIwIGNvbXBhcmUgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvbXg2MjEgY29tcGFyZSAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorY29teDYyMiBjb21wYXJlICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb214NjIzIGNvbXBhcmUgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvbXg2MjQgY29tcGFyZSAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQorY29teDYyNSBjb21wYXJlICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb214NjI2IGNvbXBhcmUgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2NvbXg2MjcgY29tcGFyZSAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQorY29teDYyOCBjb21wYXJlICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitjb214NjI5IGNvbXBhcmUgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2NvbXg2MzAgY29tcGFyZSAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQorY29teDYzMSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitjb214NjMyIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2NvbXg2MzMgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQorY29teDYzNCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitjb214NjM1IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2NvbXg2MzYgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQorY29teDYzNyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitjb214NjM4IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2NvbXg2MzkgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQorcHJlY2lzaW9uOiA5CisKKy0tIGV4dGVuZGVkIHplcm9zCitjb214NjQwIGNvbXBhcmUgICAwICAgICAwICAgLT4gMAorY29teDY0MSBjb21wYXJlICAgMCAgICAtMCAgIC0+IDAKK2NvbXg2NDIgY29tcGFyZSAgIDAgICAgLTAuMCAtPiAwCitjb214NjQzIGNvbXBhcmUgICAwICAgICAwLjAgLT4gMAorY29teDY0NCBjb21wYXJlICAtMCAgICAgMCAgIC0+IDAKK2NvbXg2NDUgY29tcGFyZSAgLTAgICAgLTAgICAtPiAwCitjb214NjQ2IGNvbXBhcmUgIC0wICAgIC0wLjAgLT4gMAorY29teDY0NyBjb21wYXJlICAtMCAgICAgMC4wIC0+IDAKK2NvbXg2NDggY29tcGFyZSAgIDAuMCAgIDAgICAtPiAwCitjb214NjQ5IGNvbXBhcmUgICAwLjAgIC0wICAgLT4gMAorY29teDY1MCBjb21wYXJlICAgMC4wICAtMC4wIC0+IDAKK2NvbXg2NTEgY29tcGFyZSAgIDAuMCAgIDAuMCAtPiAwCitjb214NjUyIGNvbXBhcmUgIC0wLjAgICAwICAgLT4gMAorY29teDY1MyBjb21wYXJlICAtMC4wICAtMCAgIC0+IDAKK2NvbXg2NTQgY29tcGFyZSAgLTAuMCAgLTAuMCAtPiAwCitjb214NjU1IGNvbXBhcmUgIC0wLjAgICAwLjAgLT4gMAorCitjb214NjU2IGNvbXBhcmUgIC0wRTEgICAwLjAgLT4gMAorY29teDY1NyBjb21wYXJlICAtMEUyICAgMC4wIC0+IDAKK2NvbXg2NTggY29tcGFyZSAgIDBFMSAgIDAuMCAtPiAwCitjb214NjU5IGNvbXBhcmUgICAwRTIgICAwLjAgLT4gMAorY29teDY2MCBjb21wYXJlICAtMEUxICAgMCAgIC0+IDAKK2NvbXg2NjEgY29tcGFyZSAgLTBFMiAgIDAgICAtPiAwCitjb214NjYyIGNvbXBhcmUgICAwRTEgICAwICAgLT4gMAorY29teDY2MyBjb21wYXJlICAgMEUyICAgMCAgIC0+IDAKK2NvbXg2NjQgY29tcGFyZSAgLTBFMSAgLTBFMSAtPiAwCitjb214NjY1IGNvbXBhcmUgIC0wRTIgIC0wRTEgLT4gMAorY29teDY2NiBjb21wYXJlICAgMEUxICAtMEUxIC0+IDAKK2NvbXg2NjcgY29tcGFyZSAgIDBFMiAgLTBFMSAtPiAwCitjb214NjY4IGNvbXBhcmUgIC0wRTEgIC0wRTIgLT4gMAorY29teDY2OSBjb21wYXJlICAtMEUyICAtMEUyIC0+IDAKK2NvbXg2NzAgY29tcGFyZSAgIDBFMSAgLTBFMiAtPiAwCitjb214NjcxIGNvbXBhcmUgICAwRTIgIC0wRTIgLT4gMAorY29teDY3MiBjb21wYXJlICAtMEUxICAgMEUxIC0+IDAKK2NvbXg2NzMgY29tcGFyZSAgLTBFMiAgIDBFMSAtPiAwCitjb214Njc0IGNvbXBhcmUgICAwRTEgICAwRTEgLT4gMAorY29teDY3NSBjb21wYXJlICAgMEUyICAgMEUxIC0+IDAKK2NvbXg2NzYgY29tcGFyZSAgLTBFMSAgIDBFMiAtPiAwCitjb214Njc3IGNvbXBhcmUgIC0wRTIgICAwRTIgLT4gMAorY29teDY3OCBjb21wYXJlICAgMEUxICAgMEUyIC0+IDAKK2NvbXg2NzkgY29tcGFyZSAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK3ByZWNpc2lvbjogMjAKK2NvbXg2ODAgY29tcGFyZSAgIDEyICAgIDEyICAgICAgICAgICAtPiAwCitjb214NjgxIGNvbXBhcmUgICAxMiAgICAxMi4wICAgICAgICAgLT4gMAorY29teDY4MiBjb21wYXJlICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKK2NvbXg2ODMgY29tcGFyZSAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAwCitjb214Njg0IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMAorY29teDY4NSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKK2NvbXg2ODYgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAwCitjb214Njg3IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMAorY29teDY4OCBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKK2NvbXg2ODkgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAwCitjb214NjkwIGNvbXBhcmUgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorY29teDY5MSBjb21wYXJlICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKK2NvbXg2OTIgY29tcGFyZSAgIDEyLjAwICAgICAgICAgICAxMiAtPiAwCitjb214NjkzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMAorY29teDY5NCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKK2NvbXg2OTUgY29tcGFyZSAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAwCitjb214Njk2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMAorY29teDY5NyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKK2NvbXg2OTggY29tcGFyZSAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAwCitjb214Njk5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMAorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5Citjb214NzAxIGNvbXBhcmUgMTIzNDU2NzgwMDAgIDEgLT4gIDEKK2NvbXg3MDIgY29tcGFyZSAxIDEyMzQ1Njc4MDAwICAtPiAtMQorY29teDcwMyBjb21wYXJlIDEyMzQ1Njc4MDAgICAxIC0+ICAxCitjb214NzA0IGNvbXBhcmUgMSAxMjM0NTY3ODAwICAgLT4gLTEKK2NvbXg3MDUgY29tcGFyZSAxMjM0NTY3ODkwICAgMSAtPiAgMQorY29teDcwNiBjb21wYXJlIDEgMTIzNDU2Nzg5MCAgIC0+IC0xCitjb214NzA3IGNvbXBhcmUgMTIzNDU2Nzg5MSAgIDEgLT4gIDEKK2NvbXg3MDggY29tcGFyZSAxIDEyMzQ1Njc4OTEgICAtPiAtMQorY29teDcwOSBjb21wYXJlIDEyMzQ1Njc4OTAxICAxIC0+ICAxCitjb214NzEwIGNvbXBhcmUgMSAxMjM0NTY3ODkwMSAgLT4gLTEKK2NvbXg3MTEgY29tcGFyZSAxMjM0NTY3ODk2ICAgMSAtPiAgMQorY29teDcxMiBjb21wYXJlIDEgMTIzNDU2Nzg5NiAgIC0+IC0xCitjb214NzEzIGNvbXBhcmUgLTEyMzQ1Njc4OTEgIDEgLT4gLTEKK2NvbXg3MTQgY29tcGFyZSAxIC0xMjM0NTY3ODkxICAtPiAgMQorY29teDcxNSBjb21wYXJlIC0xMjM0NTY3ODkwMSAxIC0+IC0xCitjb214NzE2IGNvbXBhcmUgMSAtMTIzNDU2Nzg5MDEgLT4gIDEKK2NvbXg3MTcgY29tcGFyZSAtMTIzNDU2Nzg5NiAgMSAtPiAtMQorY29teDcxOCBjb21wYXJlIDEgLTEyMzQ1Njc4OTYgIC0+ICAxCisKK3ByZWNpc2lvbjogMTUKKy0tIHNhbWUgd2l0aCBwbGVudHkgb2YgcHJlY2lzaW9uCitjb214NzIxIGNvbXBhcmUgMTIzNDU2NzgwMDAgMSAtPiAxCitjb214NzIyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAtPiAtMQorY29teDcyMyBjb21wYXJlIDEyMzQ1Njc4MDAgIDEgLT4gMQorY29teDcyNCBjb21wYXJlIDEgMTIzNDU2NzgwMCAgLT4gLTEKK2NvbXg3MjUgY29tcGFyZSAxMjM0NTY3ODkwICAxIC0+IDEKK2NvbXg3MjYgY29tcGFyZSAxIDEyMzQ1Njc4OTAgIC0+IC0xCitjb214NzI3IGNvbXBhcmUgMTIzNDU2Nzg5MSAgMSAtPiAxCitjb214NzI4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAtPiAtMQorY29teDcyOSBjb21wYXJlIDEyMzQ1Njc4OTAxIDEgLT4gMQorY29teDczMCBjb21wYXJlIDEgMTIzNDU2Nzg5MDEgLT4gLTEKK2NvbXg3MzEgY29tcGFyZSAxMjM0NTY3ODk2ICAxIC0+IDEKK2NvbXg3MzIgY29tcGFyZSAxIDEyMzQ1Njc4OTYgIC0+IC0xCisKKy0tIHJlc2lkdWUgY2FzZXMKK3ByZWNpc2lvbjogNQorY29teDc0MCBjb21wYXJlICAxICAwLjk5OTk5OTkgIC0+IDEKK2NvbXg3NDEgY29tcGFyZSAgMSAgMC45OTk5OTkgICAtPiAxCitjb214NzQyIGNvbXBhcmUgIDEgIDAuOTk5OTkgICAgLT4gMQorY29teDc0MyBjb21wYXJlICAxICAxLjAwMDAgICAgIC0+IDAKK2NvbXg3NDQgY29tcGFyZSAgMSAgMS4wMDAwMSAgICAtPiAtMQorY29teDc0NSBjb21wYXJlICAxICAxLjAwMDAwMSAgIC0+IC0xCitjb214NzQ2IGNvbXBhcmUgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2NvbXg3NTAgY29tcGFyZSAgMC45OTk5OTk5ICAxICAtPiAtMQorY29teDc1MSBjb21wYXJlICAwLjk5OTk5OSAgIDEgIC0+IC0xCitjb214NzUyIGNvbXBhcmUgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2NvbXg3NTMgY29tcGFyZSAgMS4wMDAwICAgICAxICAtPiAwCitjb214NzU0IGNvbXBhcmUgIDEuMDAwMDEgICAgMSAgLT4gMQorY29teDc1NSBjb21wYXJlICAxLjAwMDAwMSAgIDEgIC0+IDEKK2NvbXg3NTYgY29tcGFyZSAgMS4wMDAwMDAxICAxICAtPiAxCisKKy0tIGEgc2VsZWN0aW9uIG9mIGxvbmdpZXMKK2NvbXg3NjAgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODc1NjU2MDM1Nzk0MCAtPiAtMQorY29teDc2MSBjb21wYXJlIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDAKK2NvbXg3NjIgY29tcGFyZSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAtMQorY29teDc2MyBjb21wYXJlIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKKy0tIHByZWNpc2lvbnMgYWJvdmUgb3IgYmVsb3cgdGhlIGRpZmZlcmVuY2Ugc2hvdWxkIGhhdmUgbm8gZWZmZWN0CitwcmVjaXNpb246ICAgMTEKK2NvbXg3NjQgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgMTAKK2NvbXg3NjUgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDkKK2NvbXg3NjYgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDgKK2NvbXg3NjcgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDcKK2NvbXg3NjggY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDYKK2NvbXg3NjkgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDUKK2NvbXg3NzAgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDQKK2NvbXg3NzEgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDMKK2NvbXg3NzIgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDIKK2NvbXg3NzMgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDEKK2NvbXg3NzQgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246ICAgOQorY29teDc4MCBjb21wYXJlICBJbmYgIC1JbmYgICAtPiAgMQorY29teDc4MSBjb21wYXJlICBJbmYgIC0xMDAwICAtPiAgMQorY29teDc4MiBjb21wYXJlICBJbmYgIC0xICAgICAtPiAgMQorY29teDc4MyBjb21wYXJlICBJbmYgIC0wICAgICAtPiAgMQorY29teDc4NCBjb21wYXJlICBJbmYgICAwICAgICAtPiAgMQorY29teDc4NSBjb21wYXJlICBJbmYgICAxICAgICAtPiAgMQorY29teDc4NiBjb21wYXJlICBJbmYgICAxMDAwICAtPiAgMQorY29teDc4NyBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMAorY29teDc4OCBjb21wYXJlIC0xMDAwICBJbmYgICAtPiAtMQorY29teDc4OSBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQorY29teDc5MCBjb21wYXJlIC0xICAgICBJbmYgICAtPiAtMQorY29teDc5MSBjb21wYXJlIC0wICAgICBJbmYgICAtPiAtMQorY29teDc5MiBjb21wYXJlICAwICAgICBJbmYgICAtPiAtMQorY29teDc5MyBjb21wYXJlICAxICAgICBJbmYgICAtPiAtMQorY29teDc5NCBjb21wYXJlICAxMDAwICBJbmYgICAtPiAtMQorY29teDc5NSBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMAorCitjb214ODAwIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwCitjb214ODAxIGNvbXBhcmUgLUluZiAgLTEwMDAgIC0+IC0xCitjb214ODAyIGNvbXBhcmUgLUluZiAgLTEgICAgIC0+IC0xCitjb214ODAzIGNvbXBhcmUgLUluZiAgLTAgICAgIC0+IC0xCitjb214ODA0IGNvbXBhcmUgLUluZiAgIDAgICAgIC0+IC0xCitjb214ODA1IGNvbXBhcmUgLUluZiAgIDEgICAgIC0+IC0xCitjb214ODA2IGNvbXBhcmUgLUluZiAgIDEwMDAgIC0+IC0xCitjb214ODA3IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCitjb214ODA4IGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwCitjb214ODA5IGNvbXBhcmUgLTEwMDAgLUluZiAgIC0+ICAxCitjb214ODEwIGNvbXBhcmUgLTEgICAgLUluZiAgIC0+ICAxCitjb214ODExIGNvbXBhcmUgLTAgICAgLUluZiAgIC0+ICAxCitjb214ODEyIGNvbXBhcmUgIDAgICAgLUluZiAgIC0+ICAxCitjb214ODEzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAxCitjb214ODE0IGNvbXBhcmUgIDEwMDAgLUluZiAgIC0+ICAxCitjb214ODE1IGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCisKK2NvbXg4MjEgY29tcGFyZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorY29teDgyMiBjb21wYXJlICBOYU4gLTEwMDAgICAtPiAgTmFOCitjb214ODIzIGNvbXBhcmUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2NvbXg4MjQgY29tcGFyZSAgTmFOIC0wICAgICAgLT4gIE5hTgorY29teDgyNSBjb21wYXJlICBOYU4gIDAgICAgICAtPiAgTmFOCitjb214ODI2IGNvbXBhcmUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2NvbXg4MjcgY29tcGFyZSAgTmFOICAxMDAwICAgLT4gIE5hTgorY29teDgyOCBjb21wYXJlICBOYU4gIEluZiAgICAtPiAgTmFOCitjb214ODI5IGNvbXBhcmUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2NvbXg4MzAgY29tcGFyZSAtSW5mICBOYU4gICAgLT4gIE5hTgorY29teDgzMSBjb21wYXJlIC0xMDAwIE5hTiAgICAtPiAgTmFOCitjb214ODMyIGNvbXBhcmUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2NvbXg4MzMgY29tcGFyZSAtMCAgICBOYU4gICAgLT4gIE5hTgorY29teDgzNCBjb21wYXJlICAwICAgIE5hTiAgICAtPiAgTmFOCitjb214ODM1IGNvbXBhcmUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2NvbXg4MzYgY29tcGFyZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorY29teDgzNyBjb21wYXJlICBJbmYgIE5hTiAgICAtPiAgTmFOCitjb214ODM4IGNvbXBhcmUgLU5hTiAtTmFOICAgIC0+IC1OYU4KK2NvbXg4MzkgY29tcGFyZSArTmFOIC1OYU4gICAgLT4gIE5hTgorY29teDg0MCBjb21wYXJlIC1OYU4gK05hTiAgICAtPiAtTmFOCisKK2NvbXg4NDEgY29tcGFyZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NDIgY29tcGFyZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NDMgY29tcGFyZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NDQgY29tcGFyZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NDUgY29tcGFyZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NDYgY29tcGFyZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NDcgY29tcGFyZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NDggY29tcGFyZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NDkgY29tcGFyZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTAgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTEgY29tcGFyZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTIgY29tcGFyZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTMgY29tcGFyZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTQgY29tcGFyZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTUgY29tcGFyZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTYgY29tcGFyZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTcgY29tcGFyZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTggY29tcGFyZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NTkgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworY29teDg2MCBjb21wYXJlICBOYU45IC1JbmYgICAtPiAgTmFOOQorY29teDg2MSBjb21wYXJlICBOYU44ICA5OTkgICAtPiAgTmFOOAorY29teDg2MiBjb21wYXJlICBOYU43NyBJbmYgICAtPiAgTmFONzcKK2NvbXg4NjMgY29tcGFyZSAtTmFONjcgTmFONSAgLT4gLU5hTjY3Citjb214ODY0IGNvbXBhcmUgLUluZiAgLU5hTjQgIC0+IC1OYU40Citjb214ODY1IGNvbXBhcmUgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMworY29teDg2NiBjb21wYXJlICBJbmYgICBOYU4yICAtPiAgTmFOMgorY29teDg2NyBjb21wYXJlIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxCitjb214ODY4IGNvbXBhcmUgK05hTjQxIC1OYU40MiAtPiAgTmFONDEKK2NvbXg4NjkgY29tcGFyZSAtTmFONDEgK05hTjQyIC0+IC1OYU40MQorY29teDg3MCBjb21wYXJlICtOYU40MSArTmFONDIgLT4gIE5hTjQxCisKK2NvbXg4NzEgY29tcGFyZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitjb214ODcyIGNvbXBhcmUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorY29teDg3MyBjb21wYXJlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NzQgY29tcGFyZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitjb214ODc1IGNvbXBhcmUgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbgorY29teDg3NiBjb21wYXJlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NzcgY29tcGFyZSAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uCitjb214ODc4IGNvbXBhcmUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorY29teDg3OSBjb21wYXJlICBOYU4gICAtc05hTjg5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBub3cgYWxsb3dlZAorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2NvbXg4ODAgY29tcGFyZSArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTEKK2NvbXg4ODEgY29tcGFyZSA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2NvbXg4ODIgY29tcGFyZSArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gIDEKK2NvbXg4ODMgY29tcGFyZSA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTEKK2NvbXg4ODUgY29tcGFyZSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTEKK2NvbXg4ODYgY29tcGFyZSA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2NvbXg4ODcgY29tcGFyZSAtMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTEKK2NvbXg4ODggY29tcGFyZSA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDEKKworY29teDg4OSBjb21wYXJlIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAtPiAtMQorY29teDg5MCBjb21wYXJlIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgICAtPiAtMQorY29teDg5MSBjb21wYXJlIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAtPiAtMQorY29teDg5MiBjb21wYXJlIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAtPiAtMQorY29teDg5MyBjb21wYXJlIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAtMQorY29teDg5NCBjb21wYXJlIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAtPiAgMQorY29teDg5NSBjb21wYXJlIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMQorY29teDg5NiBjb21wYXJlIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwICAgICAtPiAgMQorY29teDg5NyBjb21wYXJlIDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAtPiAgMQorY29teDg5OCBjb21wYXJlIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgMQorY29teDg5OSBjb21wYXJlIDllOTk5OTk5OTk4IDEwICAgICAgICAgICAgICAtPiAgMQorY29teDkwMCBjb21wYXJlIDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAtPiAtMQorLS0gc2lnbnMKK2NvbXg5MDEgY29tcGFyZSAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDEKK2NvbXg5MDIgY29tcGFyZSAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gIDEKK2NvbXg5MDMgY29tcGFyZSAtMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gLTEKK2NvbXg5MDQgY29tcGFyZSAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTEKK2NvbXg5MDUgY29tcGFyZSAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gLTEKK2NvbXg5MDYgY29tcGFyZSAgMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDEKK2NvbXg5MDcgY29tcGFyZSAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gLTEKK2NvbXg5MDggY29tcGFyZSAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitjb214OTEwIGNvbXBhcmUgICAwRS0zODMgIDAgICAgICAgLT4gIDAKK2NvbXg5MTEgY29tcGFyZSAgIDBFLTM4MyAtMCAgICAgICAtPiAgMAorY29teDkxMiBjb21wYXJlICAtMEUtMzgzICAwICAgICAgIC0+ICAwCitjb214OTEzIGNvbXBhcmUgIC0wRS0zODMgLTAgICAgICAgLT4gIDAKK2NvbXg5MTQgY29tcGFyZSAgIDBFLTM4MyAgMEUrMzg0ICAtPiAgMAorY29teDkxNSBjb21wYXJlICAgMEUtMzgzIC0wRSszODQgIC0+ICAwCitjb214OTE2IGNvbXBhcmUgIC0wRS0zODMgIDBFKzM4NCAgLT4gIDAKK2NvbXg5MTcgY29tcGFyZSAgLTBFLTM4MyAtMEUrMzg0ICAtPiAgMAorY29teDkxOCBjb21wYXJlICAgMCAgICAgICAwRSszODQgIC0+ICAwCitjb214OTE5IGNvbXBhcmUgICAwICAgICAgLTBFKzM4NCAgLT4gIDAKK2NvbXg5MjAgY29tcGFyZSAgLTAgICAgICAgMEUrMzg0ICAtPiAgMAorY29teDkyMSBjb21wYXJlICAtMCAgICAgIC0wRSszODQgIC0+ICAwCitjb214OTMwIGNvbXBhcmUgICAwRSszODQgIDAgICAgICAgLT4gIDAKK2NvbXg5MzEgY29tcGFyZSAgIDBFKzM4NCAtMCAgICAgICAtPiAgMAorY29teDkzMiBjb21wYXJlICAtMEUrMzg0ICAwICAgICAgIC0+ICAwCitjb214OTMzIGNvbXBhcmUgIC0wRSszODQgLTAgICAgICAgLT4gIDAKK2NvbXg5MzQgY29tcGFyZSAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMAorY29teDkzNSBjb21wYXJlICAgMEUrMzg0IC0wRS0zODMgIC0+ICAwCitjb214OTM2IGNvbXBhcmUgIC0wRSszODQgIDBFLTM4MyAgLT4gIDAKK2NvbXg5MzcgY29tcGFyZSAgLTBFKzM4NCAtMEUtMzgzICAtPiAgMAorY29teDkzOCBjb21wYXJlICAgMCAgICAgICAwRS0zODMgIC0+ICAwCitjb214OTM5IGNvbXBhcmUgICAwICAgICAgLTBFLTM4MyAgLT4gIDAKK2NvbXg5NDAgY29tcGFyZSAgLTAgICAgICAgMEUtMzgzICAtPiAgMAorY29teDk0MSBjb21wYXJlICAtMCAgICAgIC0wRS0zODMgIC0+ICAwCisKKy0tIE51bGwgdGVzdHMKK2NvbXg5OTAgY29tcGFyZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2NvbXg5OTEgY29tcGFyZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdGFsLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RhbC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MmM0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RhbC5kZWNUZXN0CkBAIC0wLDAgKzEsNzk4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvbXBhcmV0b3RhbC5kZWNUZXN0IC0tIGRlY2ltYWwgY29tcGFyaXNvbiB1c2luZyB0b3RhbCBvcmRlcmluZyAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCistLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCistLSB0aGFuIGNvbXBhcmUuCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCistLSBzYW5pdHkgY2hlY2tzCitjb3R4MDAxIGNvbXBhcmV0b3RhbCAgLTIgIC0yICAtPiAwCitjb3R4MDAyIGNvbXBhcmV0b3RhbCAgLTIgIC0xICAtPiAtMQorY290eDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTEKK2NvdHgwMDQgY29tcGFyZXRvdGFsICAtMiAgIDEgIC0+IC0xCitjb3R4MDA1IGNvbXBhcmV0b3RhbCAgLTIgICAyICAtPiAtMQorY290eDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQorY290eDAwNyBjb21wYXJldG90YWwgIC0xICAtMSAgLT4gMAorY290eDAwOCBjb21wYXJldG90YWwgIC0xICAgMCAgLT4gLTEKK2NvdHgwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xCitjb3R4MDEwIGNvbXBhcmV0b3RhbCAgLTEgICAyICAtPiAtMQorY290eDAxMSBjb21wYXJldG90YWwgICAwICAtMiAgLT4gMQorY290eDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQorY290eDAxMyBjb21wYXJldG90YWwgICAwICAgMCAgLT4gMAorY290eDAxNCBjb21wYXJldG90YWwgICAwICAgMSAgLT4gLTEKK2NvdHgwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xCitjb3R4MDE2IGNvbXBhcmV0b3RhbCAgIDEgIC0yICAtPiAxCitjb3R4MDE3IGNvbXBhcmV0b3RhbCAgIDEgIC0xICAtPiAxCitjb3R4MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxCitjb3R4MDE5IGNvbXBhcmV0b3RhbCAgIDEgICAxICAtPiAwCitjb3R4MDIwIGNvbXBhcmV0b3RhbCAgIDEgICAyICAtPiAtMQorY290eDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQorY290eDAyMiBjb21wYXJldG90YWwgICAyICAtMSAgLT4gMQorY290eDAyMyBjb21wYXJldG90YWwgICAyICAgMCAgLT4gMQorY290eDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQorY290eDAyNiBjb21wYXJldG90YWwgICAyICAgMiAgLT4gMAorCitjb3R4MDMxIGNvbXBhcmV0b3RhbCAgLTIwICAtMjAgIC0+IDAKK2NvdHgwMzIgY29tcGFyZXRvdGFsICAtMjAgIC0xMCAgLT4gLTEKK2NvdHgwMzMgY29tcGFyZXRvdGFsICAtMjAgICAwMCAgLT4gLTEKK2NvdHgwMzQgY29tcGFyZXRvdGFsICAtMjAgICAxMCAgLT4gLTEKK2NvdHgwMzUgY29tcGFyZXRvdGFsICAtMjAgICAyMCAgLT4gLTEKK2NvdHgwMzYgY29tcGFyZXRvdGFsICAtMTAgIC0yMCAgLT4gMQorY290eDAzNyBjb21wYXJldG90YWwgIC0xMCAgLTEwICAtPiAwCitjb3R4MDM4IGNvbXBhcmV0b3RhbCAgLTEwICAgMDAgIC0+IC0xCitjb3R4MDM5IGNvbXBhcmV0b3RhbCAgLTEwICAgMTAgIC0+IC0xCitjb3R4MDQwIGNvbXBhcmV0b3RhbCAgLTEwICAgMjAgIC0+IC0xCitjb3R4MDQxIGNvbXBhcmV0b3RhbCAgIDAwICAtMjAgIC0+IDEKK2NvdHgwNDIgY29tcGFyZXRvdGFsICAgMDAgIC0xMCAgLT4gMQorY290eDA0MyBjb21wYXJldG90YWwgICAwMCAgIDAwICAtPiAwCitjb3R4MDQ0IGNvbXBhcmV0b3RhbCAgIDAwICAgMTAgIC0+IC0xCitjb3R4MDQ1IGNvbXBhcmV0b3RhbCAgIDAwICAgMjAgIC0+IC0xCitjb3R4MDQ2IGNvbXBhcmV0b3RhbCAgIDEwICAtMjAgIC0+IDEKK2NvdHgwNDcgY29tcGFyZXRvdGFsICAgMTAgIC0xMCAgLT4gMQorY290eDA0OCBjb21wYXJldG90YWwgICAxMCAgIDAwICAtPiAxCitjb3R4MDQ5IGNvbXBhcmV0b3RhbCAgIDEwICAgMTAgIC0+IDAKK2NvdHgwNTAgY29tcGFyZXRvdGFsICAgMTAgICAyMCAgLT4gLTEKK2NvdHgwNTEgY29tcGFyZXRvdGFsICAgMjAgIC0yMCAgLT4gMQorY290eDA1MiBjb21wYXJldG90YWwgICAyMCAgLTEwICAtPiAxCitjb3R4MDUzIGNvbXBhcmV0b3RhbCAgIDIwICAgMDAgIC0+IDEKK2NvdHgwNTUgY29tcGFyZXRvdGFsICAgMjAgICAxMCAgLT4gMQorY290eDA1NiBjb21wYXJldG90YWwgICAyMCAgIDIwICAtPiAwCisKK2NvdHgwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwCitjb3R4MDYyIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTEuMCAgLT4gLTEKK2NvdHgwNjMgY29tcGFyZXRvdGFsICAtMi4wICAgMC4wICAtPiAtMQorY290eDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xCitjb3R4MDY1IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDIuMCAgLT4gLTEKK2NvdHgwNjYgY29tcGFyZXRvdGFsICAtMS4wICAtMi4wICAtPiAxCitjb3R4MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMAorY290eDA2OCBjb21wYXJldG90YWwgIC0xLjAgICAwLjAgIC0+IC0xCitjb3R4MDY5IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDEuMCAgLT4gLTEKK2NvdHgwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQorY290eDA3MSBjb21wYXJldG90YWwgICAwLjAgIC0yLjAgIC0+IDEKK2NvdHgwNzIgY29tcGFyZXRvdGFsICAgMC4wICAtMS4wICAtPiAxCitjb3R4MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMAorY290eDA3NCBjb21wYXJldG90YWwgICAwLjAgICAxLjAgIC0+IC0xCitjb3R4MDc1IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDIuMCAgLT4gLTEKK2NvdHgwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxCitjb3R4MDc3IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTEuMCAgLT4gMQorY290eDA3OCBjb21wYXJldG90YWwgICAxLjAgICAwLjAgIC0+IDEKK2NvdHgwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwCitjb3R4MDgwIGNvbXBhcmV0b3RhbCAgIDEuMCAgIDIuMCAgLT4gLTEKK2NvdHgwODEgY29tcGFyZXRvdGFsICAgMi4wICAtMi4wICAtPiAxCitjb3R4MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQorY290eDA4MyBjb21wYXJldG90YWwgICAyLjAgICAwLjAgIC0+IDEKK2NvdHgwODUgY29tcGFyZXRvdGFsICAgMi4wICAgMS4wICAtPiAxCitjb3R4MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Citjb3R4MDkwIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gMAorY290eDA5MSBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+IC0xCitjb3R4MDkyIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLT4gMQorY290eDA5MyBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC0+IDAKKworLS0gRXhhbXBsZXMKK2NvdHgwOTQgY29tcGFyZXRvdGFsICAxMi43MyAgMTI3LjkgIC0+IC0xCitjb3R4MDk1IGNvbXBhcmV0b3RhbCAgLTEyNyAgIDEyICAgICAtPiAtMQorY290eDA5NiBjb21wYXJldG90YWwgIDEyLjMwICAxMi4zICAgLT4gLTEKK2NvdHgwOTcgY29tcGFyZXRvdGFsICAxMi4zMCAgMTIuMzAgIC0+ICAwCitjb3R4MDk4IGNvbXBhcmV0b3RhbCAgMTIuMyAgIDEyLjMwMCAtPiAgMQorY290eDA5OSBjb21wYXJldG90YWwgIDEyLjMgICBOYU4gICAgLT4gLTEKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCitjb3R4MTAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3LjAgICAgLT4gMAorY290eDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xCitjb3R4MTAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3LjAgICAgLT4gMQorY290eDEwMyBjb21wYXJldG90YWwgICA3RSswICAgNy4wICAgIC0+IDEKK2NvdHgxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwCitjb3R4MTA1IGNvbXBhcmV0b3RhbCAgIDAuN0UrMSA3ICAgICAgLT4gMAorY290eDEwNiBjb21wYXJldG90YWwgICA3MEUtMSAgNyAgICAgIC0+IC0xCitjb3R4MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTEKK2NvdHgxMDggY29tcGFyZXRvdGFsICAgNy4wICAgIDcwRS0xICAtPiAwCitjb3R4MTA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAwLjdFKzEgLT4gMAorY290eDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDEKKworY290eDEyMCBjb21wYXJldG90YWwgICA4LjAgICAgNy4wICAgIC0+IDEKK2NvdHgxMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIDcgICAgICAtPiAxCitjb3R4MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQorY290eDEyMyBjb21wYXJldG90YWwgICA4RSswICAgNy4wICAgIC0+IDEKK2NvdHgxMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIDcuMCAgICAtPiAxCitjb3R4MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQorY290eDEyNiBjb21wYXJldG90YWwgICA4MEUtMSAgNyAgICAgIC0+IDEKK2NvdHgxMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIDdFKzAgICAtPiAxCitjb3R4MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQorY290eDEyOSBjb21wYXJldG90YWwgICA4ICAgICAgMC43RSsxICAtPiAxCitjb3R4MTMwIGNvbXBhcmV0b3RhbCAgIDggICAgICA3MEUtMSAgLT4gMQorCitjb3R4MTQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5LjAgICAgLT4gLTEKK2NvdHgxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQorY290eDE0MiBjb21wYXJldG90YWwgICA4ICAgICAgOS4wICAgIC0+IC0xCitjb3R4MTQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2NvdHgxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQorY290eDE0NSBjb21wYXJldG90YWwgICAwLjhFKzEgOSAgICAgIC0+IC0xCitjb3R4MTQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2NvdHgxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQorY290eDE0OCBjb21wYXJldG90YWwgICA4LjAgICAgOTBFLTEgIC0+IC0xCitjb3R4MTQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjlFKzEgLT4gLTEKK2NvdHgxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitjb3R4MjAwIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3LjAgICAgLT4gLTEKK2NvdHgyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQorY290eDIwMiBjb21wYXJldG90YWwgIC03ICAgICAgNy4wICAgIC0+IC0xCitjb3R4MjAzIGNvbXBhcmV0b3RhbCAgLTdFKzAgICA3LjAgICAgLT4gLTEKK2NvdHgyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQorY290eDIwNSBjb21wYXJldG90YWwgIC0wLjdFKzEgNyAgICAgIC0+IC0xCitjb3R4MjA2IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3ICAgICAgLT4gLTEKK2NvdHgyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQorY290eDIwOCBjb21wYXJldG90YWwgIC03LjAgICAgNzBFLTEgIC0+IC0xCitjb3R4MjA5IGNvbXBhcmV0b3RhbCAgLTcgICAgICAwLjdFKzEgLT4gLTEKK2NvdHgyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitjb3R4MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTEKK2NvdHgyMjEgY29tcGFyZXRvdGFsICAtOC4wICAgIDcgICAgICAtPiAtMQorY290eDIyMiBjb21wYXJldG90YWwgIC04ICAgICAgNy4wICAgIC0+IC0xCitjb3R4MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTEKK2NvdHgyMjQgY29tcGFyZXRvdGFsICAtODBFLTEgIDcuMCAgICAtPiAtMQorY290eDIyNSBjb21wYXJldG90YWwgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitjb3R4MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTEKK2NvdHgyMjcgY29tcGFyZXRvdGFsICAtOC4wICAgIDdFKzAgICAtPiAtMQorY290eDIyOCBjb21wYXJldG90YWwgIC04LjAgICAgNzBFLTEgIC0+IC0xCitjb3R4MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTEKK2NvdHgyMzAgY29tcGFyZXRvdGFsICAtOCAgICAgIDcwRS0xICAtPiAtMQorCitjb3R4MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTEKK2NvdHgyNDEgY29tcGFyZXRvdGFsICAtOC4wICAgIDkgICAgICAtPiAtMQorY290eDI0MiBjb21wYXJldG90YWwgIC04ICAgICAgOS4wICAgIC0+IC0xCitjb3R4MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTEKK2NvdHgyNDQgY29tcGFyZXRvdGFsICAtODBFLTEgIDkuMCAgICAtPiAtMQorY290eDI0NSBjb21wYXJldG90YWwgIC0wLjhFKzEgOSAgICAgIC0+IC0xCitjb3R4MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2NvdHgyNDcgY29tcGFyZXRvdGFsICAtOC4wICAgIDlFKzAgICAtPiAtMQorY290eDI0OCBjb21wYXJldG90YWwgIC04LjAgICAgOTBFLTEgIC0+IC0xCitjb3R4MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTEKK2NvdHgyNTAgY29tcGFyZXRvdGFsICAtOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitjb3R4MzAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNy4wICAgIC0+IDEKK2NvdHgzMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIC03ICAgICAgLT4gMQorY290eDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxCitjb3R4MzAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICAtNy4wICAgIC0+IDEKK2NvdHgzMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03LjAgICAgLT4gMQorY290eDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxCitjb3R4MzA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNyAgICAgIC0+IDEKK2NvdHgzMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIC03RSswICAgLT4gMQorY290eDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxCitjb3R4MzA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAtLjdFKzEgIC0+IDEKK2NvdHgzMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitjb3R4MzIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNy4wICAgIC0+IDEKK2NvdHgzMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIC03ICAgICAgLT4gMQorY290eDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxCitjb3R4MzIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtNy4wICAgIC0+IDEKK2NvdHgzMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIC03LjAgICAgLT4gMQorY290eDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxCitjb3R4MzI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNyAgICAgIC0+IDEKK2NvdHgzMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIC03RSswICAgLT4gMQorY290eDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxCitjb3R4MzI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjdFKzEgIC0+IDEKK2NvdHgzMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIC03MEUtMSAgLT4gMQorCitjb3R4MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDEKK2NvdHgzNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIC05ICAgICAgLT4gMQorY290eDM0MiBjb21wYXJldG90YWwgICA4ICAgICAgLTkuMCAgICAtPiAxCitjb3R4MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2NvdHgzNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIC05LjAgICAgLT4gMQorY290eDM0NSBjb21wYXJldG90YWwgICAuOEUrMSAgLTkgICAgICAtPiAxCitjb3R4MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2NvdHgzNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIC05RSswICAgLT4gMQorY290eDM0OCBjb21wYXJldG90YWwgICA4LjAgICAgLTkwRS0xICAtPiAxCitjb3R4MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDEKK2NvdHgzNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitjb3R4NDAwIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcuMCAgICAtPiAwCitjb3R4NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxCitjb3R4NDAyIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcuMCAgICAtPiAtMQorY290eDQwMyBjb21wYXJldG90YWwgICAtN0UrMCAgIC03LjAgICAgLT4gLTEKK2NvdHg0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2NvdHg0MDUgY29tcGFyZXRvdGFsICAgLS43RSsxICAtNyAgICAgIC0+IDAKK2NvdHg0MDYgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNyAgICAgIC0+IDEKK2NvdHg0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDEKK2NvdHg0MDggY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKK2NvdHg0MDkgY29tcGFyZXRvdGFsICAgLTcgICAgICAtLjdFKzEgIC0+IDAKK2NvdHg0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xCisKK2NvdHg0MjAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNy4wICAgIC0+IC0xCitjb3R4NDIxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcgICAgICAtPiAtMQorY290eDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2NvdHg0MjMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtNy4wICAgIC0+IC0xCitjb3R4NDI0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQorY290eDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2NvdHg0MjYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCitjb3R4NDI3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTdFKzAgICAtPiAtMQorY290eDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2NvdHg0MjkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjdFKzEgIC0+IC0xCitjb3R4NDMwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcwRS0xICAtPiAtMQorCitjb3R4NDQwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkuMCAgICAtPiAxCitjb3R4NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxCitjb3R4NDQyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkuMCAgICAtPiAxCitjb3R4NDQzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTkuMCAgICAtPiAxCitjb3R4NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxCitjb3R4NDQ1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTkgICAgICAtPiAxCitjb3R4NDQ2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkgICAgICAtPiAxCitjb3R4NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxCitjb3R4NDQ4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkwRS0xICAtPiAxCitjb3R4NDQ5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS45RSsxICAtPiAxCitjb3R4NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxCisKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitwcmVjaXNpb246IDQwCitjb3R4NDcwIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKK2NvdHg0NzEgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitjb3R4NDcyIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDczIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2NvdHg0NzQgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitjb3R4NDc2IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKK2NvdHg0NzcgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitjb3R4NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDc5IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2NvdHg0ODAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitjb3R4NDgyIGNvbXBhcmV0b3RhbCAxMjMuNDU2MEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKK2NvdHg0ODMgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2NvdHg0ODQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMDAwRS04OSAtPiAxCitjb3R4NDg1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMDAwRTc4OSAtPiAxCitjb3R4NDg2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDBFLTg5IC0+IDEKK2NvdHg0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwRTc4OSAtPiAxCitjb3R4NDg4IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAxCitjb3R4NDg5IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDBFNzg5IC0+IDEKK2NvdHg0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxCitjb3R4NDkxIGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwRTc4OSAtPiAxCitjb3R4NDkyIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDEKK2NvdHg0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwRTc4OSAtPiAxCitjb3R4NDk0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAxCitjb3R4NDk1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDBFNzg5IC0+IDEKK2NvdHg0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxCitjb3R4NDk3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2RTc4OSAtPiAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK3ByZWNpc2lvbjogOQorY290eDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQorY290eDUwMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTQgICAgLT4gMQorY290eDUwMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTMgICAgLT4gMQorY290eDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQorY290eDUwNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTEgICAgLT4gMQorY290eDUwNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTAgICAgLT4gMQorY290eDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQorY290eDUwNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOCAgICAgLT4gMQorY290eDUwOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNyAgICAgLT4gMQorY290eDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQorY290eDUxMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNSAgICAgLT4gMQorY290eDUxMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNCAgICAgLT4gMQorY290eDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQorY290eDUxMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMiAgICAgLT4gMQorY290eDUxNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMSAgICAgLT4gMQorY290eDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMAorY290eDUxNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2NvdHg1MTcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitjb3R4NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQorY290eDUxOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2NvdHg1MjEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitjb3R4NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQorY290eDUyMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2NvdHg1MjQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitjb3R4NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQorY290eDUyNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2NvdHg1MjcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitjb3R4NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQorY290eDUyOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2NvdHg1MzAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitjb3R4NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQorLS0gTFIgc3dhcAorY290eDU0MCBjb21wYXJldG90YWwgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2NvdHg1NDEgY29tcGFyZXRvdGFsICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitjb3R4NTQyIGNvbXBhcmV0b3RhbCAgICAxRS0xMyAgMSAgICAgICAtPiAtMQorY290eDU0MyBjb21wYXJldG90YWwgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2NvdHg1NDQgY29tcGFyZXRvdGFsICAgIDFFLTExICAxICAgICAgIC0+IC0xCitjb3R4NTQ1IGNvbXBhcmV0b3RhbCAgICAxRS0xMCAgMSAgICAgICAtPiAtMQorY290eDU0NiBjb21wYXJldG90YWwgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2NvdHg1NDcgY29tcGFyZXRvdGFsICAgIDFFLTggICAxICAgICAgIC0+IC0xCitjb3R4NTQ4IGNvbXBhcmV0b3RhbCAgICAxRS03ICAgMSAgICAgICAtPiAtMQorY290eDU0OSBjb21wYXJldG90YWwgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2NvdHg1NTAgY29tcGFyZXRvdGFsICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitjb3R4NTUxIGNvbXBhcmV0b3RhbCAgICAxRS00ICAgMSAgICAgICAtPiAtMQorY290eDU1MiBjb21wYXJldG90YWwgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2NvdHg1NTMgY29tcGFyZXRvdGFsICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitjb3R4NTU0IGNvbXBhcmV0b3RhbCAgICAxRS0xICAgMSAgICAgICAtPiAtMQorY290eDU1NSBjb21wYXJldG90YWwgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2NvdHg1NTYgY29tcGFyZXRvdGFsICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitjb3R4NTU3IGNvbXBhcmV0b3RhbCAgICAxRSsyICAgMSAgICAgICAtPiAgMQorY290eDU1OCBjb21wYXJldG90YWwgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2NvdHg1NTkgY29tcGFyZXRvdGFsICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitjb3R4NTYxIGNvbXBhcmV0b3RhbCAgICAxRSs1ICAgMSAgICAgICAtPiAgMQorY290eDU2MiBjb21wYXJldG90YWwgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2NvdHg1NjMgY29tcGFyZXRvdGFsICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitjb3R4NTY0IGNvbXBhcmV0b3RhbCAgICAxRSs4ICAgMSAgICAgICAtPiAgMQorY290eDU2NSBjb21wYXJldG90YWwgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2NvdHg1NjYgY29tcGFyZXRvdGFsICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitjb3R4NTY3IGNvbXBhcmV0b3RhbCAgICAxRSsxMSAgMSAgICAgICAtPiAgMQorY290eDU2OCBjb21wYXJldG90YWwgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2NvdHg1NjkgY29tcGFyZXRvdGFsICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitjb3R4NTcwIGNvbXBhcmV0b3RhbCAgICAxRSsxNCAgMSAgICAgICAtPiAgMQorY290eDU3MSBjb21wYXJldG90YWwgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhbiB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2NvdHg1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQorY290eDU4MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitjb3R4NTgyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2NvdHg1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQorY290eDU4NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitjb3R4NTg1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2NvdHg1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQorY290eDU4NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitjb3R4NTg4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2NvdHg1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKK2NvdHg1OTAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2NvdHg1OTEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2NvdHg1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKK2NvdHg1OTMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2NvdHg1OTQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2NvdHg1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKK2NvdHg1OTYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2NvdHg1OTcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2NvdHg1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKK2NvdHg1OTkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK3ByZWNpc2lvbjogMjAKK2NvdHg2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjAxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwMiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjA0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwNSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjA3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwOCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitjb3R4NjEwIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQorY290eDYxMSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2NvdHg2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitjb3R4NjEzIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQorY290eDYxNCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2NvdHg2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitjb3R4NjE2IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQorY290eDYxNyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2NvdHg2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitjb3R4NjE5IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQorY290eDYyMCBjb21wYXJldG90YWwgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjIyIGNvbXBhcmV0b3RhbCAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyMyBjb21wYXJldG90YWwgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjI1IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyNiBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjI4IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQorY290eDYyOSBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitjb3R4NjMxIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQorY290eDYzMiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2NvdHg2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitjb3R4NjM0IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQorY290eDYzNSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2NvdHg2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitjb3R4NjM3IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQorY290eDYzOCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2NvdHg2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCitwcmVjaXNpb246IDkKKworLS0gZXh0ZW5kZWQgemVyb3MKK2NvdHg2NDAgY29tcGFyZXRvdGFsICAgMCAgICAgMCAgIC0+IDAKK2NvdHg2NDEgY29tcGFyZXRvdGFsICAgMCAgICAtMCAgIC0+IDEKK2NvdHg2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDEKK2NvdHg2NDMgY29tcGFyZXRvdGFsICAgMCAgICAgMC4wIC0+IDEKK2NvdHg2NDQgY29tcGFyZXRvdGFsICAtMCAgICAgMCAgIC0+IC0xCitjb3R4NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwCitjb3R4NjQ2IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAuMCAtPiAtMQorY290eDY0NyBjb21wYXJldG90YWwgIC0wICAgICAwLjAgLT4gLTEKK2NvdHg2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xCitjb3R4NjQ5IGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAgICAtPiAxCitjb3R4NjUwIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAuMCAtPiAxCitjb3R4NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwCitjb3R4NjUyIGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAgICAtPiAtMQorY290eDY1MyBjb21wYXJldG90YWwgIC0wLjAgIC0wICAgLT4gMQorY290eDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMAorY290eDY1NSBjb21wYXJldG90YWwgIC0wLjAgICAwLjAgLT4gLTEKKworY290eDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTEKK2NvdHg2NTcgY29tcGFyZXRvdGFsICAtMEUyICAgMC4wIC0+IC0xCitjb3R4NjU4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAuMCAtPiAxCitjb3R4NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxCitjb3R4NjYwIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAgICAtPiAtMQorY290eDY2MSBjb21wYXJldG90YWwgIC0wRTIgICAwICAgLT4gLTEKK2NvdHg2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDEKK2NvdHg2NjMgY29tcGFyZXRvdGFsICAgMEUyICAgMCAgIC0+IDEKK2NvdHg2NjQgY29tcGFyZXRvdGFsICAtMEUxICAtMEUxIC0+IDAKK2NvdHg2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xCitjb3R4NjY2IGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMSAtPiAxCitjb3R4NjY3IGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMSAtPiAxCitjb3R4NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxCitjb3R4NjY5IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMiAtPiAwCitjb3R4NjcwIGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMiAtPiAxCitjb3R4NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxCitjb3R4NjcyIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMSAtPiAtMQorY290eDY3MyBjb21wYXJldG90YWwgIC0wRTIgICAwRTEgLT4gLTEKK2NvdHg2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDAKK2NvdHg2NzUgY29tcGFyZXRvdGFsICAgMEUyICAgMEUxIC0+IDEKK2NvdHg2NzYgY29tcGFyZXRvdGFsICAtMEUxICAgMEUyIC0+IC0xCitjb3R4Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQorY290eDY3OCBjb21wYXJldG90YWwgICAwRTEgICAwRTIgLT4gLTEKK2NvdHg2NzkgY29tcGFyZXRvdGFsICAgMEUyICAgMEUyIC0+IDAKKworLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQorcHJlY2lzaW9uOiAyMAorY290eDY4MCBjb21wYXJldG90YWwgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorY290eDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQorY290eDY4MiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMQorY290eDY4MyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMQorY290eDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQorY290eDY4NSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMQorY290eDY4NiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMQorY290eDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQorY290eDY4OCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMQorY290eDY4OSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMQorY290eDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorY290eDY5MSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgICAgMTIgLT4gLTEKK2NvdHg2OTIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAgIDEyIC0+IC0xCitjb3R4NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQorY290eDY5NCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgICAgMTIgLT4gLTEKK2NvdHg2OTUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IC0xCitjb3R4Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQorY290eDY5NyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gLTEKK2NvdHg2OTggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IC0xCitjb3R4Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5Citjb3R4NzAxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAgMSAtPiAgMQorY290eDcwMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAgLT4gLTEKK2NvdHg3MDMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgICAxIC0+ICAxCitjb3R4NzA0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgICAtPiAtMQorY290eDcwNSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MCAgIDEgLT4gIDEKK2NvdHg3MDYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgIC0+IC0xCitjb3R4NzA3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAgMSAtPiAgMQorY290eDcwOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAgLT4gLTEKK2NvdHg3MDkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxICAxIC0+ICAxCitjb3R4NzEwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxICAtPiAtMQorY290eDcxMSBjb21wYXJldG90YWwgMTIzNDU2Nzg5NiAgIDEgLT4gIDEKK2NvdHg3MTIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgIC0+IC0xCitjb3R4NzEzIGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MSAgMSAtPiAtMQorY290eDcxNCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MSAgLT4gIDEKK2NvdHg3MTUgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkwMSAxIC0+IC0xCitjb3R4NzE2IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkwMSAtPiAgMQorY290eDcxNyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTYgIDEgLT4gLTEKK2NvdHg3MTggY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTYgIC0+ICAxCisKK3ByZWNpc2lvbjogMTUKKy0tIHNhbWUgd2l0aCBwbGVudHkgb2YgcHJlY2lzaW9uCitjb3R4NzIxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAxIC0+IDEKK2NvdHg3MjIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgLT4gLTEKK2NvdHg3MjMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgIDEgLT4gMQorY290eDcyNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAtPiAtMQorY290eDcyNSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MCAgMSAtPiAxCitjb3R4NzI2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgIC0+IC0xCitjb3R4NzI3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAxIC0+IDEKK2NvdHg3MjggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgLT4gLTEKK2NvdHg3MjkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxIDEgLT4gMQorY290eDczMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAtPiAtMQorY290eDczMSBjb21wYXJldG90YWwgMTIzNDU2Nzg5NiAgMSAtPiAxCitjb3R4NzMyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgIC0+IC0xCisKKy0tIHJlc2lkdWUgY2FzZXMKK3ByZWNpc2lvbjogNQorY290eDc0MCBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5OSAgLT4gMQorY290eDc0MSBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5ICAgLT4gMQorY290eDc0MiBjb21wYXJldG90YWwgIDEgIDAuOTk5OTkgICAgLT4gMQorY290eDc0MyBjb21wYXJldG90YWwgIDEgIDEuMDAwMCAgICAgLT4gMQorY290eDc0NCBjb21wYXJldG90YWwgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2NvdHg3NDUgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMSAgIC0+IC0xCitjb3R4NzQ2IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDAxICAtPiAtMQorY290eDc1MCBjb21wYXJldG90YWwgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2NvdHg3NTEgY29tcGFyZXRvdGFsICAwLjk5OTk5OSAgIDEgIC0+IC0xCitjb3R4NzUyIGNvbXBhcmV0b3RhbCAgMC45OTk5OSAgICAxICAtPiAtMQorY290eDc1MyBjb21wYXJldG90YWwgIDEuMDAwMCAgICAgMSAgLT4gLTEKK2NvdHg3NTQgY29tcGFyZXRvdGFsICAxLjAwMDAxICAgIDEgIC0+IDEKK2NvdHg3NTUgY29tcGFyZXRvdGFsICAxLjAwMDAwMSAgIDEgIC0+IDEKK2NvdHg3NTYgY29tcGFyZXRvdGFsICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gYSBzZWxlY3Rpb24gb2YgbG9uZ2llcworY290eDc2MCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3NTY1NjAzNTc5NDAgLT4gLTEKK2NvdHg3NjEgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDAKK2NvdHg3NjIgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IC0xCitjb3R4NzYzIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCistLSBwcmVjaXNpb25zIGFib3ZlIG9yIGJlbG93IHRoZSBkaWZmZXJlbmNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdAorcHJlY2lzaW9uOiAgIDExCitjb3R4NzY0IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgMTAKK2NvdHg3NjUgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgOQorY290eDc2NiBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA4Citjb3R4NzY3IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDcKK2NvdHg3NjggY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgNgorY290eDc2OSBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA1Citjb3R4NzcwIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDQKK2NvdHg3NzEgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgMworY290eDc3MiBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICAyCitjb3R4NzczIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDEKK2NvdHg3NzQgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKKworLS0gU3BlY2lhbHMKK3ByZWNpc2lvbjogICA5Citjb3R4NzgwIGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDEKK2NvdHg3ODEgY29tcGFyZXRvdGFsICBJbmYgIC0xMDAwICAtPiAgMQorY290eDc4MiBjb21wYXJldG90YWwgIEluZiAgLTEgICAgIC0+ICAxCitjb3R4NzgzIGNvbXBhcmV0b3RhbCAgSW5mICAtMCAgICAgLT4gIDEKK2NvdHg3ODQgY29tcGFyZXRvdGFsICBJbmYgICAwICAgICAtPiAgMQorY290eDc4NSBjb21wYXJldG90YWwgIEluZiAgIDEgICAgIC0+ICAxCitjb3R4Nzg2IGNvbXBhcmV0b3RhbCAgSW5mICAgMTAwMCAgLT4gIDEKK2NvdHg3ODcgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAorY290eDc4OCBjb21wYXJldG90YWwgLTEwMDAgIEluZiAgIC0+IC0xCitjb3R4Nzg5IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKK2NvdHg3OTAgY29tcGFyZXRvdGFsIC0xICAgICBJbmYgICAtPiAtMQorY290eDc5MSBjb21wYXJldG90YWwgLTAgICAgIEluZiAgIC0+IC0xCitjb3R4NzkyIGNvbXBhcmV0b3RhbCAgMCAgICAgSW5mICAgLT4gLTEKK2NvdHg3OTMgY29tcGFyZXRvdGFsICAxICAgICBJbmYgICAtPiAtMQorY290eDc5NCBjb21wYXJldG90YWwgIDEwMDAgIEluZiAgIC0+IC0xCitjb3R4Nzk1IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKKworY290eDgwMCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCitjb3R4ODAxIGNvbXBhcmV0b3RhbCAtSW5mICAtMTAwMCAgLT4gLTEKK2NvdHg4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQorY290eDgwMyBjb21wYXJldG90YWwgLUluZiAgLTAgICAgIC0+IC0xCitjb3R4ODA0IGNvbXBhcmV0b3RhbCAtSW5mICAgMCAgICAgLT4gLTEKK2NvdHg4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQorY290eDgwNiBjb21wYXJldG90YWwgLUluZiAgIDEwMDAgIC0+IC0xCitjb3R4ODA3IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKK2NvdHg4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorY290eDgwOSBjb21wYXJldG90YWwgLTEwMDAgLUluZiAgIC0+ICAxCitjb3R4ODEwIGNvbXBhcmV0b3RhbCAtMSAgICAtSW5mICAgLT4gIDEKK2NvdHg4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQorY290eDgxMiBjb21wYXJldG90YWwgIDAgICAgLUluZiAgIC0+ICAxCitjb3R4ODEzIGNvbXBhcmV0b3RhbCAgMSAgICAtSW5mICAgLT4gIDEKK2NvdHg4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQorY290eDgxNSBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCisKK2NvdHg4MjEgY29tcGFyZXRvdGFsICBOYU4gLUluZiAgICAtPiAgMQorY290eDgyMiBjb21wYXJldG90YWwgIE5hTiAtMTAwMCAgIC0+ICAxCitjb3R4ODIzIGNvbXBhcmV0b3RhbCAgTmFOIC0xICAgICAgLT4gIDEKK2NvdHg4MjQgY29tcGFyZXRvdGFsICBOYU4gLTAgICAgICAtPiAgMQorY290eDgyNSBjb21wYXJldG90YWwgIE5hTiAgMCAgICAgIC0+ICAxCitjb3R4ODI2IGNvbXBhcmV0b3RhbCAgTmFOICAxICAgICAgLT4gIDEKK2NvdHg4MjcgY29tcGFyZXRvdGFsICBOYU4gIDEwMDAgICAtPiAgMQorY290eDgyOCBjb21wYXJldG90YWwgIE5hTiAgSW5mICAgIC0+ICAxCitjb3R4ODI5IGNvbXBhcmV0b3RhbCAgTmFOICBOYU4gICAgLT4gIDAKK2NvdHg4MzAgY29tcGFyZXRvdGFsIC1JbmYgIE5hTiAgICAtPiAgLTEKK2NvdHg4MzEgY29tcGFyZXRvdGFsIC0xMDAwIE5hTiAgICAtPiAgLTEKK2NvdHg4MzIgY29tcGFyZXRvdGFsIC0xICAgIE5hTiAgICAtPiAgLTEKK2NvdHg4MzMgY29tcGFyZXRvdGFsIC0wICAgIE5hTiAgICAtPiAgLTEKK2NvdHg4MzQgY29tcGFyZXRvdGFsICAwICAgIE5hTiAgICAtPiAgLTEKK2NvdHg4MzUgY29tcGFyZXRvdGFsICAxICAgIE5hTiAgICAtPiAgLTEKK2NvdHg4MzYgY29tcGFyZXRvdGFsICAxMDAwIE5hTiAgICAtPiAgLTEKK2NvdHg4MzcgY29tcGFyZXRvdGFsICBJbmYgIE5hTiAgICAtPiAgLTEKK2NvdHg4MzggY29tcGFyZXRvdGFsIC1OYU4gLU5hTiAgICAtPiAgMAorY290eDgzOSBjb21wYXJldG90YWwgK05hTiAtTmFOICAgIC0+ICAxCitjb3R4ODQwIGNvbXBhcmV0b3RhbCAtTmFOICtOYU4gICAgLT4gIC0xCisKK2NvdHg4NDEgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAtPiAgMQorY290eDg0MiBjb21wYXJldG90YWwgIHNOYU4gLU5hTiAgIC0+ICAxCitjb3R4ODQzIGNvbXBhcmV0b3RhbCAgc05hTiAtSW5mICAgLT4gIDEKK2NvdHg4NDQgY29tcGFyZXRvdGFsICBzTmFOIC0xMDAwICAtPiAgMQorY290eDg0NSBjb21wYXJldG90YWwgIHNOYU4gLTEgICAgIC0+ICAxCitjb3R4ODQ2IGNvbXBhcmV0b3RhbCAgc05hTiAtMCAgICAgLT4gIDEKK2NvdHg4NDcgY29tcGFyZXRvdGFsICBzTmFOICAwICAgICAtPiAgMQorY290eDg0OCBjb21wYXJldG90YWwgIHNOYU4gIDEgICAgIC0+ICAxCitjb3R4ODQ5IGNvbXBhcmV0b3RhbCAgc05hTiAgMTAwMCAgLT4gIDEKK2NvdHg4NTAgY29tcGFyZXRvdGFsICBzTmFOICBOYU4gICAtPiAgLTEKK2NvdHg4NTEgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMAorCitjb3R4ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xCitjb3R4ODUzIGNvbXBhcmV0b3RhbCAtTmFOICBzTmFOICAgLT4gIC0xCitjb3R4ODU0IGNvbXBhcmV0b3RhbCAtSW5mICBzTmFOICAgLT4gIC0xCitjb3R4ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xCitjb3R4ODU2IGNvbXBhcmV0b3RhbCAtMSAgICBzTmFOICAgLT4gIC0xCitjb3R4ODU3IGNvbXBhcmV0b3RhbCAtMCAgICBzTmFOICAgLT4gIC0xCitjb3R4ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xCitjb3R4ODU5IGNvbXBhcmV0b3RhbCAgMSAgICBzTmFOICAgLT4gIC0xCitjb3R4ODYwIGNvbXBhcmV0b3RhbCAgMTAwMCBzTmFOICAgLT4gIC0xCitjb3R4ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xCitjb3R4ODYyIGNvbXBhcmV0b3RhbCAgTmFOICBzTmFOICAgLT4gIDEKK2NvdHg4NjMgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMAorCitjb3R4ODcxIGNvbXBhcmV0b3RhbCAgLXNOYU4gLXNOYU4gIC0+ICAwCitjb3R4ODcyIGNvbXBhcmV0b3RhbCAgLXNOYU4gLU5hTiAgIC0+ICAxCitjb3R4ODczIGNvbXBhcmV0b3RhbCAgLXNOYU4gLUluZiAgIC0+ICAtMQorY290eDg3NCBjb21wYXJldG90YWwgIC1zTmFOIC0xMDAwICAtPiAgLTEKK2NvdHg4NzUgY29tcGFyZXRvdGFsICAtc05hTiAtMSAgICAgLT4gIC0xCitjb3R4ODc2IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTAgICAgIC0+ICAtMQorY290eDg3NyBjb21wYXJldG90YWwgIC1zTmFOICAwICAgICAtPiAgLTEKK2NvdHg4NzggY29tcGFyZXRvdGFsICAtc05hTiAgMSAgICAgLT4gIC0xCitjb3R4ODc5IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEwMDAgIC0+ICAtMQorY290eDg4MCBjb21wYXJldG90YWwgIC1zTmFOICBOYU4gICAtPiAgLTEKK2NvdHg4ODEgY29tcGFyZXRvdGFsICAtc05hTiBzTmFOICAgLT4gIC0xCisKK2NvdHg4ODIgY29tcGFyZXRvdGFsIC1zTmFOIC1zTmFOICAgLT4gIDAKK2NvdHg4ODMgY29tcGFyZXRvdGFsIC1OYU4gIC1zTmFOICAgLT4gIC0xCitjb3R4ODg0IGNvbXBhcmV0b3RhbCAtSW5mICAtc05hTiAgIC0+ICAxCitjb3R4ODg1IGNvbXBhcmV0b3RhbCAtMTAwMCAtc05hTiAgIC0+ICAxCitjb3R4ODg2IGNvbXBhcmV0b3RhbCAtMSAgICAtc05hTiAgIC0+ICAxCitjb3R4ODg3IGNvbXBhcmV0b3RhbCAtMCAgICAtc05hTiAgIC0+ICAxCitjb3R4ODg4IGNvbXBhcmV0b3RhbCAgMCAgICAtc05hTiAgIC0+ICAxCitjb3R4ODg5IGNvbXBhcmV0b3RhbCAgMSAgICAtc05hTiAgIC0+ICAxCitjb3R4ODkwIGNvbXBhcmV0b3RhbCAgMTAwMCAtc05hTiAgIC0+ICAxCitjb3R4ODkxIGNvbXBhcmV0b3RhbCAgSW5mICAtc05hTiAgIC0+ICAxCitjb3R4ODkyIGNvbXBhcmV0b3RhbCAgTmFOICAtc05hTiAgIC0+ICAxCitjb3R4ODkzIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgIC0+ICAxCisKKy0tIE5hTnMgd2l0aCBwYXlsb2FkCitjb3R4OTYwIGNvbXBhcmV0b3RhbCAgTmFOOSAtSW5mICAgLT4gIDEKK2NvdHg5NjEgY29tcGFyZXRvdGFsICBOYU44ICA5OTkgICAtPiAgMQorY290eDk2MiBjb21wYXJldG90YWwgIE5hTjc3IEluZiAgIC0+ICAxCitjb3R4OTYzIGNvbXBhcmV0b3RhbCAtTmFONjcgTmFONSAgLT4gIC0xCitjb3R4OTY0IGNvbXBhcmV0b3RhbCAtSW5mICAtTmFONCAgLT4gIDEKK2NvdHg5NjUgY29tcGFyZXRvdGFsIC05OTkgIC1OYU4zMyAtPiAgMQorY290eDk2NiBjb21wYXJldG90YWwgIEluZiAgIE5hTjIgIC0+ICAtMQorCitjb3R4OTcwIGNvbXBhcmV0b3RhbCAtTmFONDEgLU5hTjQyIC0+IDEKK2NvdHg5NzEgY29tcGFyZXRvdGFsICtOYU40MSAtTmFONDIgLT4gMQorY290eDk3MiBjb21wYXJldG90YWwgLU5hTjQxICtOYU40MiAtPiAtMQorY290eDk3MyBjb21wYXJldG90YWwgK05hTjQxICtOYU40MiAtPiAtMQorY290eDk3NCBjb21wYXJldG90YWwgLU5hTjQyIC1OYU4wMSAtPiAtMQorY290eDk3NSBjb21wYXJldG90YWwgK05hTjQyIC1OYU4wMSAtPiAgMQorY290eDk3NiBjb21wYXJldG90YWwgLU5hTjQyICtOYU4wMSAtPiAtMQorY290eDk3NyBjb21wYXJldG90YWwgK05hTjQyICtOYU4wMSAtPiAgMQorCitjb3R4OTgwIGNvbXBhcmV0b3RhbCAtc05hTjc3MSAtc05hTjc3MiAtPiAxCitjb3R4OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxCitjb3R4OTgyIGNvbXBhcmV0b3RhbCAtc05hTjc3MSArc05hTjc3MiAtPiAtMQorY290eDk4MyBjb21wYXJldG90YWwgK3NOYU43NzEgK3NOYU43NzIgLT4gLTEKK2NvdHg5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xCitjb3R4OTg1IGNvbXBhcmV0b3RhbCArc05hTjc3MiAtc05hTjc3MSAtPiAgMQorY290eDk4NiBjb21wYXJldG90YWwgLXNOYU43NzIgK3NOYU43NzEgLT4gLTEKK2NvdHg5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxCisKK2NvdHg5OTEgY29tcGFyZXRvdGFsIC1zTmFOOTkgLUluZiAgICAtPiAtMQorY290eDk5MiBjb21wYXJldG90YWwgIHNOYU45OCAtMTEgICAgIC0+ICAxCitjb3R4OTkzIGNvbXBhcmV0b3RhbCAgc05hTjk3ICBOYU4gICAgLT4gLTEKK2NvdHg5OTQgY29tcGFyZXRvdGFsICBzTmFOMTYgc05hTjk0ICAtPiAtMQorY290eDk5NSBjb21wYXJldG90YWwgIE5hTjg1ICBzTmFOODMgIC0+ICAxCitjb3R4OTk2IGNvbXBhcmV0b3RhbCAtSW5mICAgIHNOYU45MiAgLT4gLTEKK2NvdHg5OTcgY29tcGFyZXRvdGFsICAwODggICAgc05hTjgxICAtPiAtMQorY290eDk5OCBjb21wYXJldG90YWwgIEluZiAgICBzTmFOOTAgIC0+IC0xCitjb3R4OTk5IGNvbXBhcmV0b3RhbCAgTmFOICAgLXNOYU44OSAgLT4gIDEKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBub3cgYWxsb3dlZAorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2NvdHgxMDgwIGNvbXBhcmV0b3RhbCArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTEKK2NvdHgxMDgxIGNvbXBhcmV0b3RhbCA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2NvdHgxMDgyIGNvbXBhcmV0b3RhbCArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gIDEKK2NvdHgxMDgzIGNvbXBhcmV0b3RhbCA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTEKK2NvdHgxMDg1IGNvbXBhcmV0b3RhbCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTEKK2NvdHgxMDg2IGNvbXBhcmV0b3RhbCA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2NvdHgxMDg3IGNvbXBhcmV0b3RhbCAtMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTEKK2NvdHgxMDg4IGNvbXBhcmV0b3RhbCA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDEKKworY290eDEwODkgY29tcGFyZXRvdGFsIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAtPiAtMQorY290eDEwOTAgY29tcGFyZXRvdGFsIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgICAtPiAtMQorY290eDEwOTEgY29tcGFyZXRvdGFsIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAtPiAtMQorY290eDEwOTIgY29tcGFyZXRvdGFsIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAtPiAtMQorY290eDEwOTMgY29tcGFyZXRvdGFsIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAtMQorY290eDEwOTQgY29tcGFyZXRvdGFsIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAtPiAgMQorY290eDEwOTUgY29tcGFyZXRvdGFsIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMQorY290eDEwOTYgY29tcGFyZXRvdGFsIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwICAgICAtPiAgMQorY290eDEwOTcgY29tcGFyZXRvdGFsIDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAtPiAgMQorY290eDEwOTggY29tcGFyZXRvdGFsIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgMQorY290eDEwOTkgY29tcGFyZXRvdGFsIDllOTk5OTk5OTk4IDEwICAgICAgICAgICAgICAtPiAgMQorY290eDExMDAgY29tcGFyZXRvdGFsIDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAtPiAtMQorLS0gc2lnbnMKK2NvdHgxMTAxIGNvbXBhcmV0b3RhbCAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDEKK2NvdHgxMTAyIGNvbXBhcmV0b3RhbCAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gIDEKK2NvdHgxMTAzIGNvbXBhcmV0b3RhbCAtMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gLTEKK2NvdHgxMTA0IGNvbXBhcmV0b3RhbCAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTEKK2NvdHgxMTA1IGNvbXBhcmV0b3RhbCAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gLTEKK2NvdHgxMTA2IGNvbXBhcmV0b3RhbCAgMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDEKK2NvdHgxMTA3IGNvbXBhcmV0b3RhbCAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gLTEKK2NvdHgxMTA4IGNvbXBhcmV0b3RhbCAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitjb3R4MTExMCBjb21wYXJldG90YWwgICAwRS0zODMgIDAgICAgICAgLT4gLTEKK2NvdHgxMTExIGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMCAgICAgICAtPiAgMQorY290eDExMTIgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwICAgICAgIC0+IC0xCitjb3R4MTExMyBjb21wYXJldG90YWwgIC0wRS0zODMgLTAgICAgICAgLT4gIDEKK2NvdHgxMTE0IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAgMEUrMzg0ICAtPiAtMQorY290eDExMTUgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wRSszODQgIC0+ICAxCitjb3R4MTExNiBjb21wYXJldG90YWwgIC0wRS0zODMgIDBFKzM4NCAgLT4gLTEKK2NvdHgxMTE3IGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAtMEUrMzg0ICAtPiAgMQorY290eDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSszODQgIC0+IC0xCitjb3R4MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzM4NCAgLT4gIDEKK2NvdHgxMTIwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUrMzg0ICAtPiAtMQorY290eDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSszODQgIC0+ICAxCisKK2NvdHgxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMCAgICAgICAtPiAgMQorY290eDExMzEgY29tcGFyZXRvdGFsICAgMEUrMzg0IC0wICAgICAgIC0+ICAxCitjb3R4MTEzMiBjb21wYXJldG90YWwgIC0wRSszODQgIDAgICAgICAgLT4gLTEKK2NvdHgxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMCAgICAgICAtPiAtMQorY290eDExMzQgY29tcGFyZXRvdGFsICAgMEUrMzg0ICAwRS0zODMgIC0+ICAxCitjb3R4MTEzNSBjb21wYXJldG90YWwgICAwRSszODQgLTBFLTM4MyAgLT4gIDEKK2NvdHgxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMEUtMzgzICAtPiAtMQorY290eDExMzcgY29tcGFyZXRvdGFsICAtMEUrMzg0IC0wRS0zODMgIC0+IC0xCitjb3R4MTEzOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFLTM4MyAgLT4gIDEKK2NvdHgxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtMzgzICAtPiAgMQorY290eDExNDAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRS0zODMgIC0+IC0xCitjb3R4MTE0MSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFLTM4MyAgLT4gLTEKKworLS0gTnVsbCB0ZXN0cworY290eDk5OTAgY29tcGFyZXRvdGFsIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorY290eDk5OTEgY29tcGFyZXRvdGFsICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90bWFnLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RtYWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWRmZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90bWFnLmRlY1Rlc3QKQEAgLTAsMCArMSw3OTAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY29tcGFyZXRvdG1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgY29tcGFyaXNvbiwgYWJzLiB0b3RhbCBvcmRlcmluZyAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgaXQgY2Fubm90IGJlIGFzc3VtZWQgdGhhdCBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMKKy0tIGZvciB0aGlzIG9wZXJhdGlvbiBhZGVxdWF0ZWx5LCBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlCistLSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90IG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28KKy0tIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLiBTaW1pbGFybHksIGNvbXBhcmV0b3RhbAorLS0gd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocyB0aGFuIGNvbXBhcmUuCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCistLSBzYW5pdHkgY2hlY2tzCitjdG14MDAxIGNvbXBhcmV0b3RtYWcgIC0yICAtMiAgIC0+ICAgMAorY3RteDAwMiBjb21wYXJldG90bWFnICAtMiAgLTEgICAtPiAgIDEKK2N0bXgwMDMgY29tcGFyZXRvdG1hZyAgLTIgICAwICAgLT4gICAxCitjdG14MDA0IGNvbXBhcmV0b3RtYWcgIC0yICAgMSAgIC0+ICAgMQorY3RteDAwNSBjb21wYXJldG90bWFnICAtMiAgIDIgICAtPiAgIDAKK2N0bXgwMDYgY29tcGFyZXRvdG1hZyAgLTEgIC0yICAgLT4gIC0xCitjdG14MDA3IGNvbXBhcmV0b3RtYWcgIC0xICAtMSAgIC0+ICAgMAorY3RteDAwOCBjb21wYXJldG90bWFnICAtMSAgIDAgICAtPiAgIDEKK2N0bXgwMDkgY29tcGFyZXRvdG1hZyAgLTEgICAxICAgLT4gICAwCitjdG14MDEwIGNvbXBhcmV0b3RtYWcgIC0xICAgMiAgIC0+ICAtMQorY3RteDAxMSBjb21wYXJldG90bWFnICAgMCAgLTIgICAtPiAgLTEKK2N0bXgwMTIgY29tcGFyZXRvdG1hZyAgIDAgIC0xICAgLT4gIC0xCitjdG14MDEzIGNvbXBhcmV0b3RtYWcgICAwICAgMCAgIC0+ICAgMAorY3RteDAxNCBjb21wYXJldG90bWFnICAgMCAgIDEgICAtPiAgLTEKK2N0bXgwMTUgY29tcGFyZXRvdG1hZyAgIDAgICAyICAgLT4gIC0xCitjdG14MDE2IGNvbXBhcmV0b3RtYWcgICAxICAtMiAgIC0+ICAtMQorY3RteDAxNyBjb21wYXJldG90bWFnICAgMSAgLTEgICAtPiAgIDAKK2N0bXgwMTggY29tcGFyZXRvdG1hZyAgIDEgICAwICAgLT4gICAxCitjdG14MDE5IGNvbXBhcmV0b3RtYWcgICAxICAgMSAgIC0+ICAgMAorY3RteDAyMCBjb21wYXJldG90bWFnICAgMSAgIDIgICAtPiAgLTEKK2N0bXgwMjEgY29tcGFyZXRvdG1hZyAgIDIgIC0yICAgLT4gICAwCitjdG14MDIyIGNvbXBhcmV0b3RtYWcgICAyICAtMSAgIC0+ICAgMQorY3RteDAyMyBjb21wYXJldG90bWFnICAgMiAgIDAgICAtPiAgIDEKK2N0bXgwMjUgY29tcGFyZXRvdG1hZyAgIDIgICAxICAgLT4gICAxCitjdG14MDI2IGNvbXBhcmV0b3RtYWcgICAyICAgMiAgIC0+ICAgMAorCitjdG14MDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwCitjdG14MDMyIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTEwICAgLT4gICAxCitjdG14MDMzIGNvbXBhcmV0b3RtYWcgIC0yMCAgIDAwICAgLT4gICAxCitjdG14MDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxCitjdG14MDM1IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDIwICAgLT4gICAwCitjdG14MDM2IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTIwICAgLT4gIC0xCitjdG14MDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwCitjdG14MDM4IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDAwICAgLT4gICAxCitjdG14MDM5IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDEwICAgLT4gICAwCitjdG14MDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xCitjdG14MDQxIGNvbXBhcmV0b3RtYWcgICAwMCAgLTIwICAgLT4gIC0xCitjdG14MDQyIGNvbXBhcmV0b3RtYWcgICAwMCAgLTEwICAgLT4gIC0xCitjdG14MDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwCitjdG14MDQ0IGNvbXBhcmV0b3RtYWcgICAwMCAgIDEwICAgLT4gIC0xCitjdG14MDQ1IGNvbXBhcmV0b3RtYWcgICAwMCAgIDIwICAgLT4gIC0xCitjdG14MDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xCitjdG14MDQ3IGNvbXBhcmV0b3RtYWcgICAxMCAgLTEwICAgLT4gICAwCitjdG14MDQ4IGNvbXBhcmV0b3RtYWcgICAxMCAgIDAwICAgLT4gICAxCitjdG14MDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwCitjdG14MDUwIGNvbXBhcmV0b3RtYWcgICAxMCAgIDIwICAgLT4gIC0xCitjdG14MDUxIGNvbXBhcmV0b3RtYWcgICAyMCAgLTIwICAgLT4gICAwCitjdG14MDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxCitjdG14MDUzIGNvbXBhcmV0b3RtYWcgICAyMCAgIDAwICAgLT4gICAxCitjdG14MDU1IGNvbXBhcmV0b3RtYWcgICAyMCAgIDEwICAgLT4gICAxCitjdG14MDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwCisKK2N0bXgwNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMAorY3RteDA2MiBjb21wYXJldG90bWFnICAtMi4wICAtMS4wICAgLT4gICAxCitjdG14MDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDEKK2N0bXgwNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQorY3RteDA2NSBjb21wYXJldG90bWFnICAtMi4wICAgMi4wICAgLT4gICAwCitjdG14MDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTEKK2N0bXgwNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMAorY3RteDA2OCBjb21wYXJldG90bWFnICAtMS4wICAgMC4wICAgLT4gICAxCitjdG14MDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDAKK2N0bXgwNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQorY3RteDA3MSBjb21wYXJldG90bWFnICAgMC4wICAtMi4wICAgLT4gIC0xCitjdG14MDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTEKK2N0bXgwNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMAorY3RteDA3NCBjb21wYXJldG90bWFnICAgMC4wICAgMS4wICAgLT4gIC0xCitjdG14MDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTEKK2N0bXgwNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQorY3RteDA3NyBjb21wYXJldG90bWFnICAgMS4wICAtMS4wICAgLT4gICAwCitjdG14MDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDEKK2N0bXgwNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMAorY3RteDA4MCBjb21wYXJldG90bWFnICAgMS4wICAgMi4wICAgLT4gIC0xCitjdG14MDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDAKK2N0bXgwODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQorY3RteDA4MyBjb21wYXJldG90bWFnICAgMi4wICAgMC4wICAgLT4gICAxCitjdG14MDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDEKK2N0bXgwODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitjdG14MDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgICAtPiAgIDAKK2N0bXgwOTEgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgIC0+ICAgMAorY3RteDA5MiBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gICAwCitjdG14MDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAgIDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCitjdG14MTAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNy4wICAgICAtPiAgIDAKK2N0bXgxMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3ICAgICAgIC0+ICAtMQorY3RteDEwMiBjb21wYXJldG90bWFnICAgNyAgICAgIDcuMCAgICAgLT4gICAxCitjdG14MTAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgNy4wICAgICAtPiAgIDEKK2N0bXgxMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3LjAgICAgIC0+ICAgMAorY3RteDEwNSBjb21wYXJldG90bWFnICAgMC43RSsxIDcgICAgICAgLT4gICAwCitjdG14MTA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNyAgICAgICAtPiAgLTEKK2N0bXgxMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3RSswICAgIC0+ICAtMQorY3RteDEwOCBjb21wYXJldG90bWFnICAgNy4wICAgIDcwRS0xICAgLT4gICAwCitjdG14MTA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgMC43RSsxICAtPiAgIDAKK2N0bXgxMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3MEUtMSAgIC0+ICAgMQorCitjdG14MTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDEKK2N0bXgxMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3ICAgICAgIC0+ICAgMQorY3RteDEyMiBjb21wYXJldG90bWFnICAgOCAgICAgIDcuMCAgICAgLT4gICAxCitjdG14MTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDEKK2N0bXgxMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3LjAgICAgIC0+ICAgMQorY3RteDEyNSBjb21wYXJldG90bWFnICAgMC44RSsxIDcgICAgICAgLT4gICAxCitjdG14MTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDEKK2N0bXgxMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3RSswICAgIC0+ICAgMQorY3RteDEyOCBjb21wYXJldG90bWFnICAgOC4wICAgIDcwRS0xICAgLT4gICAxCitjdG14MTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxCitjdG14MTMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNzBFLTEgICAtPiAgIDEKKworY3RteDE0MCBjb21wYXJldG90bWFnICAgOC4wICAgIDkuMCAgICAgLT4gIC0xCitjdG14MTQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOSAgICAgICAtPiAgLTEKK2N0bXgxNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQorY3RteDE0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIDkuMCAgICAgLT4gIC0xCitjdG14MTQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOS4wICAgICAtPiAgLTEKK2N0bXgxNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQorY3RteDE0NiBjb21wYXJldG90bWFnICAgODBFLTEgIDkgICAgICAgLT4gIC0xCitjdG14MTQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOUUrMCAgICAtPiAgLTEKK2N0bXgxNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQorY3RteDE0OSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuOUUrMSAgLT4gIC0xCitjdG14MTUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorY3RteDIwMCBjb21wYXJldG90bWFnICAtNy4wICAgIDcuMCAgICAgLT4gICAwCitjdG14MjAxIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNyAgICAgICAtPiAgLTEKK2N0bXgyMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQorY3RteDIwMyBjb21wYXJldG90bWFnICAtN0UrMCAgIDcuMCAgICAgLT4gICAxCitjdG14MjA0IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNy4wICAgICAtPiAgIDAKK2N0bXgyMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMAorY3RteDIwNiBjb21wYXJldG90bWFnICAtNzBFLTEgIDcgICAgICAgLT4gIC0xCitjdG14MjA3IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgN0UrMCAgICAtPiAgLTEKK2N0bXgyMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMAorY3RteDIwOSBjb21wYXJldG90bWFnICAtNyAgICAgIDAuN0UrMSAgLT4gICAwCitjdG14MjEwIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNzBFLTEgICAtPiAgIDEKKworY3RteDIyMCBjb21wYXJldG90bWFnICAtOC4wICAgIDcuMCAgICAgLT4gICAxCitjdG14MjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDEKK2N0bXgyMjIgY29tcGFyZXRvdG1hZyAgLTggICAgICA3LjAgICAgIC0+ICAgMQorY3RteDIyMyBjb21wYXJldG90bWFnICAtOEUrMCAgIDcuMCAgICAgLT4gICAxCitjdG14MjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDEKK2N0bXgyMjUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA3ICAgICAgIC0+ICAgMQorY3RteDIyNiBjb21wYXJldG90bWFnICAtODBFLTEgIDcgICAgICAgLT4gICAxCitjdG14MjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDEKK2N0bXgyMjggY29tcGFyZXRvdG1hZyAgLTguMCAgICA3MEUtMSAgIC0+ICAgMQorY3RteDIyOSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuN0UrMSAgLT4gICAxCitjdG14MjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDEKKworY3RteDI0MCBjb21wYXJldG90bWFnICAtOC4wICAgIDkuMCAgICAgLT4gIC0xCitjdG14MjQxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOSAgICAgICAtPiAgLTEKK2N0bXgyNDIgY29tcGFyZXRvdG1hZyAgLTggICAgICA5LjAgICAgIC0+ICAtMQorY3RteDI0MyBjb21wYXJldG90bWFnICAtOEUrMCAgIDkuMCAgICAgLT4gIC0xCitjdG14MjQ0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOS4wICAgICAtPiAgLTEKK2N0bXgyNDUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA5ICAgICAgIC0+ICAtMQorY3RteDI0NiBjb21wYXJldG90bWFnICAtODBFLTEgIDkgICAgICAgLT4gIC0xCitjdG14MjQ3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOUUrMCAgICAtPiAgLTEKK2N0bXgyNDggY29tcGFyZXRvdG1hZyAgLTguMCAgICA5MEUtMSAgIC0+ICAtMQorY3RteDI0OSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuOUUrMSAgLT4gIC0xCitjdG14MjUwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorY3RteDMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMAorY3RteDMwMSBjb21wYXJldG90bWFnICAgNy4wICAgIC03ICAgICAgIC0+ICAtMQorY3RteDMwMiBjb21wYXJldG90bWFnICAgNyAgICAgIC03LjAgICAgIC0+ICAgMQorY3RteDMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQorY3RteDMwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIC03LjAgICAgIC0+ICAgMAorY3RteDMwNSBjb21wYXJldG90bWFnICAgLjdFKzEgIC03ICAgICAgIC0+ICAgMAorY3RteDMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQorY3RteDMwNyBjb21wYXJldG90bWFnICAgNy4wICAgIC03RSswICAgIC0+ICAtMQorY3RteDMwOCBjb21wYXJldG90bWFnICAgNy4wICAgIC03MEUtMSAgIC0+ICAgMAorY3RteDMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMAorY3RteDMxMCBjb21wYXJldG90bWFnICAgNyAgICAgIC03MEUtMSAgIC0+ICAgMQorCitjdG14MzIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcuMCAgICAgLT4gICAxCitjdG14MzIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcgICAgICAgLT4gICAxCitjdG14MzIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcuMCAgICAgLT4gICAxCitjdG14MzIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTcuMCAgICAgLT4gICAxCitjdG14MzI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcuMCAgICAgLT4gICAxCitjdG14MzI1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTcgICAgICAgLT4gICAxCitjdG14MzI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcgICAgICAgLT4gICAxCitjdG14MzI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTdFKzAgICAgLT4gICAxCitjdG14MzI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcwRS0xICAgLT4gICAxCitjdG14MzI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS43RSsxICAgLT4gICAxCitjdG14MzMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2N0bXgzNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOS4wICAgICAtPiAgLTEKK2N0bXgzNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTEKK2N0bXgzNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOS4wICAgICAtPiAgLTEKK2N0bXgzNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtOS4wICAgICAtPiAgLTEKK2N0bXgzNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTEKK2N0bXgzNDUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtOSAgICAgICAtPiAgLTEKK2N0bXgzNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOSAgICAgICAtPiAgLTEKK2N0bXgzNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTEKK2N0bXgzNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOTBFLTEgICAtPiAgLTEKK2N0bXgzNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjlFKzEgICAtPiAgLTEKK2N0bXgzNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorY3RteDQwMCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNy4wICAgICAtPiAgIDAKK2N0bXg0MDEgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcgICAgICAgLT4gIC0xCitjdG14NDAyIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03LjAgICAgIC0+ICAgMQorY3RteDQwMyBjb21wYXJldG90bWFnICAgLTdFKzAgICAtNy4wICAgICAtPiAgIDEKK2N0bXg0MDQgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcuMCAgICAgLT4gICAwCitjdG14NDA1IGNvbXBhcmV0b3RtYWcgICAtLjdFKzEgIC03ICAgICAgIC0+ICAgMAorY3RteDQwNiBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNyAgICAgICAtPiAgLTEKK2N0bXg0MDcgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTdFKzAgICAgLT4gIC0xCitjdG14NDA4IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03MEUtMSAgIC0+ICAgMAorY3RteDQwOSBjb21wYXJldG90bWFnICAgLTcgICAgICAtLjdFKzEgICAtPiAgIDAKK2N0bXg0MTAgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2N0bXg0MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxCitjdG14NDIxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03ICAgICAgIC0+ICAgMQorY3RteDQyMiBjb21wYXJldG90bWFnICAgLTggICAgICAtNy4wICAgICAtPiAgIDEKK2N0bXg0MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxCitjdG14NDI0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03LjAgICAgIC0+ICAgMQorY3RteDQyNSBjb21wYXJldG90bWFnICAgLS44RSsxICAtNyAgICAgICAtPiAgIDEKK2N0bXg0MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxCitjdG14NDI3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03RSswICAgIC0+ICAgMQorY3RteDQyOCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNzBFLTEgICAtPiAgIDEKK2N0bXg0MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxCitjdG14NDMwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitjdG14NDQwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05LjAgICAgIC0+ICAtMQorY3RteDQ0MSBjb21wYXJldG90bWFnICAgLTguMCAgICAtOSAgICAgICAtPiAgLTEKK2N0bXg0NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xCitjdG14NDQzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC05LjAgICAgIC0+ICAtMQorY3RteDQ0NCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOS4wICAgICAtPiAgLTEKK2N0bXg0NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xCitjdG14NDQ2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05ICAgICAgIC0+ICAtMQorY3RteDQ0NyBjb21wYXJldG90bWFnICAgLTguMCAgICAtOUUrMCAgICAtPiAgLTEKK2N0bXg0NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xCitjdG14NDQ5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uOUUrMSAgIC0+ICAtMQorY3RteDQ1MCBjb21wYXJldG90bWFnICAgLTggICAgICAtOTBFLTEgICAtPiAgLTEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK3ByZWNpc2lvbjogNDAKK2N0bXg0NzAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ3MSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0NzIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorY3RteDQ3NCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0NzUgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ3NyBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0NzggY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorY3RteDQ4MCBjb21wYXJldG90bWFnIDEyMy40NTYwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0ODEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ4MyBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5ICAtPiAgIDAKK2N0bXg0ODQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDAwMEUtODkgIC0+ICAgMQorY3RteDQ4NSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwMDBFNzg5ICAtPiAgIDEKK2N0bXg0ODYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDBFLTg5ICAtPiAgIDEKK2N0bXg0ODcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMEU3ODkgIC0+ICAgMQorY3RteDQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDEKK2N0bXg0ODkgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDBFNzg5ICAtPiAgIDEKK2N0bXg0OTAgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgIC0+ICAgMQorY3RteDQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDBFNzg5ICAtPiAgIDEKK2N0bXg0OTIgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5ICAtPiAgIDEKK2N0bXg0OTMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMEU3ODkgIC0+ICAgMQorY3RteDQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDEKK2N0bXg0OTUgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDBFNzg5ICAtPiAgIDEKK2N0bXg0OTYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgIC0+ICAgMQorY3RteDQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTZFNzg5ICAtPiAgIDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorcHJlY2lzaW9uOiA5CitjdG14NTAwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTUgICAgIC0+ICAgMQorY3RteDUwMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE0ICAgICAtPiAgIDEKK2N0bXg1MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxCitjdG14NTAzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTIgICAgIC0+ICAgMQorY3RteDUwNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTExICAgICAtPiAgIDEKK2N0bXg1MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxCitjdG14NTA2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOSAgICAgIC0+ICAgMQorY3RteDUwNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTggICAgICAtPiAgIDEKK2N0bXg1MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxCitjdG14NTA5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNiAgICAgIC0+ICAgMQorY3RteDUxMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTUgICAgICAtPiAgIDEKK2N0bXg1MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxCitjdG14NTEyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMyAgICAgIC0+ICAgMQorY3RteDUxMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTIgICAgICAtPiAgIDEKK2N0bXg1MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxCitjdG14NTE1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMCAgICAgIC0+ICAgMAorY3RteDUxNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEgICAgICAtPiAgLTEKK2N0bXg1MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xCitjdG14NTE4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMyAgICAgIC0+ICAtMQorY3RteDUxOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzQgICAgICAtPiAgLTEKK2N0bXg1MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xCitjdG14NTIyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNiAgICAgIC0+ICAtMQorY3RteDUyMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzcgICAgICAtPiAgLTEKK2N0bXg1MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xCitjdG14NTI1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOSAgICAgIC0+ICAtMQorY3RteDUyNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEwICAgICAtPiAgLTEKK2N0bXg1MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xCitjdG14NTI4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTIgICAgIC0+ICAtMQorY3RteDUyOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEzICAgICAtPiAgLTEKK2N0bXg1MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xCitjdG14NTMxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTUgICAgIC0+ICAtMQorLS0gTFIgc3dhcAorY3RteDU0MCBjb21wYXJldG90bWFnICAgIDFFLTE1ICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDEgY29tcGFyZXRvdG1hZyAgICAxRS0xNCAgMSAgICAgICAgLT4gIC0xCitjdG14NTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQorY3RteDU0MyBjb21wYXJldG90bWFnICAgIDFFLTEyICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDQgY29tcGFyZXRvdG1hZyAgICAxRS0xMSAgMSAgICAgICAgLT4gIC0xCitjdG14NTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQorY3RteDU0NiBjb21wYXJldG90bWFnICAgIDFFLTkgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDcgY29tcGFyZXRvdG1hZyAgICAxRS04ICAgMSAgICAgICAgLT4gIC0xCitjdG14NTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQorY3RteDU0OSBjb21wYXJldG90bWFnICAgIDFFLTYgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NTAgY29tcGFyZXRvdG1hZyAgICAxRS01ICAgMSAgICAgICAgLT4gIC0xCitjdG14NTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQorY3RteDU1MiBjb21wYXJldG90bWFnICAgIDFFLTMgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NTMgY29tcGFyZXRvdG1hZyAgICAxRS0yICAgMSAgICAgICAgLT4gIC0xCitjdG14NTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQorY3RteDU1NSBjb21wYXJldG90bWFnICAgIDFFLTAgICAxICAgICAgICAtPiAgIDAKK2N0bXg1NTYgY29tcGFyZXRvdG1hZyAgICAxRSsxICAgMSAgICAgICAgLT4gICAxCitjdG14NTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQorY3RteDU1OCBjb21wYXJldG90bWFnICAgIDFFKzMgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NTkgY29tcGFyZXRvdG1hZyAgICAxRSs0ICAgMSAgICAgICAgLT4gICAxCitjdG14NTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQorY3RteDU2MiBjb21wYXJldG90bWFnICAgIDFFKzYgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjMgY29tcGFyZXRvdG1hZyAgICAxRSs3ICAgMSAgICAgICAgLT4gICAxCitjdG14NTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQorY3RteDU2NSBjb21wYXJldG90bWFnICAgIDFFKzkgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjYgY29tcGFyZXRvdG1hZyAgICAxRSsxMCAgMSAgICAgICAgLT4gICAxCitjdG14NTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQorY3RteDU2OCBjb21wYXJldG90bWFnICAgIDFFKzEyICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjkgY29tcGFyZXRvdG1hZyAgICAxRSsxMyAgMSAgICAgICAgLT4gICAxCitjdG14NTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQorY3RteDU3MSBjb21wYXJldG90bWFnICAgIDFFKzE1ICAxICAgICAgICAtPiAgIDEKKy0tIHNpbWlsYXIgd2l0aCBhbiB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2N0bXg1ODAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2N0bXg1ODEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgICAtPiAgIDEKK2N0bXg1ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDEKK2N0bXg1ODMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgICAtPiAgIDEKK2N0bXg1ODQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgICAtPiAgIDEKK2N0bXg1ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDEKK2N0bXg1ODYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgICAtPiAgIDEKK2N0bXg1ODcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgICAtPiAgIDEKK2N0bXg1ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDEKK2N0bXg1ODkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgICAtPiAgLTEKK2N0bXg1OTAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgICAtPiAgLTEKK2N0bXg1OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTEKK2N0bXg1OTIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgICAtPiAgLTEKK2N0bXg1OTMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgICAtPiAgLTEKK2N0bXg1OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTEKK2N0bXg1OTUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgICAtPiAgLTEKK2N0bXg1OTYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgICAtPiAgLTEKK2N0bXg1OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTEKK2N0bXg1OTggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgICAtPiAgLTEKK2N0bXg1OTkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgICAtPiAgLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK3ByZWNpc2lvbjogMjAKK2N0bXg2MDAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjAxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjA0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjA3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjEwIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgIC0+ICAgMQorY3RteDYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDEKK2N0bXg2MTIgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAgLT4gICAxCitjdG14NjEzIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgIC0+ICAgMQorY3RteDYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDEKK2N0bXg2MTUgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAgLT4gICAxCitjdG14NjE2IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgIC0+ICAgMQorY3RteDYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDEKK2N0bXg2MTggY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAgLT4gICAxCitjdG14NjE5IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgIC0+ICAgMQorY3RteDYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjEgY29tcGFyZXRvdG1hZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjIyIGNvbXBhcmV0b3RtYWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjQgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjI1IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjcgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjI4IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MzAgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAgLT4gICAxCitjdG14NjMxIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgIC0+ICAgMQorY3RteDYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDEKK2N0bXg2MzMgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAgLT4gICAxCitjdG14NjM0IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgIC0+ICAgMQorY3RteDYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDEKK2N0bXg2MzYgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAgLT4gICAxCitjdG14NjM3IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgIC0+ICAgMQorY3RteDYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDEKK2N0bXg2MzkgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAgLT4gICAxCitwcmVjaXNpb246IDkKKworLS0gZXh0ZW5kZWQgemVyb3MKK2N0bXg2NDAgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAgICAgLT4gICAwCitjdG14NjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMAorY3RteDY0MiBjb21wYXJldG90bWFnICAgMCAgICAtMC4wICAtPiAgIDEKK2N0bXg2NDMgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAuMCAgLT4gICAxCitjdG14NjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMAorY3RteDY0NSBjb21wYXJldG90bWFnICAtMCAgICAtMCAgICAtPiAgIDAKK2N0bXg2NDYgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAuMCAgLT4gICAxCitjdG14NjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQorY3RteDY0OCBjb21wYXJldG90bWFnICAgMC4wICAgMCAgICAtPiAgLTEKK2N0bXg2NDkgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAgICAgLT4gIC0xCitjdG14NjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMAorY3RteDY1MSBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAtPiAgIDAKK2N0bXg2NTIgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAgICAgLT4gIC0xCitjdG14NjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQorY3RteDY1NCBjb21wYXJldG90bWFnICAtMC4wICAtMC4wICAtPiAgIDAKK2N0bXg2NTUgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAuMCAgLT4gICAwCisKK2N0bXg2NTYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAuMCAgLT4gICAxCitjdG14NjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQorY3RteDY1OCBjb21wYXJldG90bWFnICAgMEUxICAgMC4wICAtPiAgIDEKK2N0bXg2NTkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAuMCAgLT4gICAxCitjdG14NjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQorY3RteDY2MSBjb21wYXJldG90bWFnICAtMEUyICAgMCAgICAtPiAgIDEKK2N0bXg2NjIgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAgICAgLT4gICAxCitjdG14NjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQorY3RteDY2NCBjb21wYXJldG90bWFnICAtMEUxICAtMEUxICAtPiAgIDAKK2N0bXg2NjUgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMSAgLT4gICAxCitjdG14NjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMAorY3RteDY2NyBjb21wYXJldG90bWFnICAgMEUyICAtMEUxICAtPiAgIDEKK2N0bXg2NjggY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMiAgLT4gIC0xCitjdG14NjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMAorY3RteDY3MCBjb21wYXJldG90bWFnICAgMEUxICAtMEUyICAtPiAgLTEKK2N0bXg2NzEgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMiAgLT4gICAwCitjdG14NjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMAorY3RteDY3MyBjb21wYXJldG90bWFnICAtMEUyICAgMEUxICAtPiAgIDEKK2N0bXg2NzQgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMSAgLT4gICAwCitjdG14Njc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQorY3RteDY3NiBjb21wYXJldG90bWFnICAtMEUxICAgMEUyICAtPiAgLTEKK2N0bXg2NzcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMiAgLT4gICAwCitjdG14Njc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQorY3RteDY3OSBjb21wYXJldG90bWFnICAgMEUyICAgMEUyICAtPiAgIDAKKworLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQorcHJlY2lzaW9uOiAyMAorY3RteDY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDAKK2N0bXg2ODEgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAgICAgICAgICAgLT4gICAxCitjdG14NjgyIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMCAgICAgICAgIC0+ICAgMQorY3RteDY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDEKK2N0bXg2ODQgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAgICAgICAgLT4gICAxCitjdG14Njg1IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMCAgICAgIC0+ICAgMQorY3RteDY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDEKK2N0bXg2ODcgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAgICAgLT4gICAxCitjdG14Njg4IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMCAgIC0+ICAgMQorY3RteDY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDEKK2N0bXg2OTAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgICAxMiAgLT4gICAwCitjdG14NjkxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgICAgMTIgIC0+ICAtMQorY3RteDY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgICAxMiAgLT4gIC0xCitjdG14Njk0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgICAgMTIgIC0+ICAtMQorY3RteDY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgICAxMiAgLT4gIC0xCitjdG14Njk3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgICAgMTIgIC0+ICAtMQorY3RteDY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAgLT4gIC0xCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK2N0bXg3MDEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAgMSAgLT4gICAxCitjdG14NzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQorY3RteDcwMyBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAgICAxICAtPiAgIDEKK2N0bXg3MDQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAgLT4gIC0xCitjdG14NzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQorY3RteDcwNiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MCAgICAtPiAgLTEKK2N0bXg3MDcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAgMSAgLT4gICAxCitjdG14NzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQorY3RteDcwOSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAxICAxICAtPiAgIDEKK2N0bXg3MTAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gIC0xCitjdG14NzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQorY3RteDcxMiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAgLTEKK2N0bXg3MTMgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gICAxCitjdG14NzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQorY3RteDcxNSBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkwMSAxICAtPiAgIDEKK2N0bXg3MTYgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gIC0xCitjdG14NzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQorY3RteDcxOCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAgLTEKKworcHJlY2lzaW9uOiAxNQorLS0gc2FtZSB3aXRoIHBsZW50eSBvZiBwcmVjaXNpb24KK2N0bXg3MjEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAxICAtPiAgIDEKK2N0bXg3MjIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAgLTEKK2N0bXg3MjMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAxICAtPiAgIDEKK2N0bXg3MjQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAgLTEKK2N0bXg3MjUgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwICAxICAtPiAgIDEKK2N0bXg3MjYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAgLTEKK2N0bXg3MjcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAxICAtPiAgIDEKK2N0bXg3MjggY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAgLTEKK2N0bXg3MjkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAxICAtPiAgIDEKK2N0bXg3MzAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAgLTEKK2N0bXg3MzEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODk2ICAxICAtPiAgIDEKK2N0bXg3MzIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAgLTEKKworLS0gcmVzaWR1ZSBjYXNlcworcHJlY2lzaW9uOiA1CitjdG14NzQwIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5OSAgIC0+ICAgMQorY3RteDc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDEKK2N0bXg3NDIgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OSAgICAgLT4gICAxCitjdG14NzQzIGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMCAgICAgIC0+ICAgMQorY3RteDc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTEKK2N0bXg3NDUgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDEgICAgLT4gIC0xCitjdG14NzQ2IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAwMSAgIC0+ICAtMQorY3RteDc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTEKK2N0bXg3NTEgY29tcGFyZXRvdG1hZyAgMC45OTk5OTkgICAxICAgLT4gIC0xCitjdG14NzUyIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTkgICAgMSAgIC0+ICAtMQorY3RteDc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTEKK2N0bXg3NTQgY29tcGFyZXRvdG1hZyAgMS4wMDAwMSAgICAxICAgLT4gICAxCitjdG14NzU1IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAxICAgMSAgIC0+ICAgMQorY3RteDc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDEKKworLS0gYSBzZWxlY3Rpb24gb2YgbG9uZ2llcworY3RteDc2MCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzU2NTYwMzU3OTQwICAtPiAgIDEKK2N0bXg3NjEgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gICAwCitjdG14NzYyIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAgMQorY3RteDc2MyBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKKy0tIHByZWNpc2lvbnMgYWJvdmUgb3IgYmVsb3cgdGhlIGRpZmZlcmVuY2Ugc2hvdWxkIGhhdmUgbm8gZWZmZWN0CitwcmVjaXNpb246ICAgMTEKK2N0bXg3NjQgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgMTAKK2N0bXg3NjUgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDkKK2N0bXg3NjYgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDgKK2N0bXg3NjcgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDcKK2N0bXg3NjggY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDYKK2N0bXg3NjkgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDUKK2N0bXg3NzAgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDQKK2N0bXg3NzEgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDMKK2N0bXg3NzIgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDIKK2N0bXg3NzMgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDEKK2N0bXg3NzQgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246ICAgOQorY3RteDc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMAorY3RteDc4MSBjb21wYXJldG90bWFnICBJbmYgIC0xMDAwICAtPiAgMQorY3RteDc4MiBjb21wYXJldG90bWFnICBJbmYgIC0xICAgICAtPiAgMQorY3RteDc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQorY3RteDc4NCBjb21wYXJldG90bWFnICBJbmYgICAwICAgICAtPiAgMQorY3RteDc4NSBjb21wYXJldG90bWFnICBJbmYgICAxICAgICAtPiAgMQorY3RteDc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQorY3RteDc4NyBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAorY3RteDc4OCBjb21wYXJldG90bWFnIC0xMDAwICBJbmYgICAtPiAtMQorY3RteDc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAorY3RteDc5MCBjb21wYXJldG90bWFnIC0xICAgICBJbmYgICAtPiAtMQorY3RteDc5MSBjb21wYXJldG90bWFnIC0wICAgICBJbmYgICAtPiAtMQorY3RteDc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQorY3RteDc5MyBjb21wYXJldG90bWFnICAxICAgICBJbmYgICAtPiAtMQorY3RteDc5NCBjb21wYXJldG90bWFnICAxMDAwICBJbmYgICAtPiAtMQorY3RteDc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAorCitjdG14ODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCitjdG14ODAxIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEwMDAgIC0+ICAxCitjdG14ODAyIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEgICAgIC0+ICAxCitjdG14ODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxCitjdG14ODA0IGNvbXBhcmV0b3RtYWcgLUluZiAgIDAgICAgIC0+ICAxCitjdG14ODA1IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEgICAgIC0+ICAxCitjdG14ODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxCitjdG14ODA3IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitjdG14ODA4IGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCitjdG14ODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xCitjdG14ODEwIGNvbXBhcmV0b3RtYWcgLTEgICAgLUluZiAgIC0+IC0xCitjdG14ODExIGNvbXBhcmV0b3RtYWcgLTAgICAgLUluZiAgIC0+IC0xCitjdG14ODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xCitjdG14ODEzIGNvbXBhcmV0b3RtYWcgIDEgICAgLUluZiAgIC0+IC0xCitjdG14ODE0IGNvbXBhcmV0b3RtYWcgIDEwMDAgLUluZiAgIC0+IC0xCitjdG14ODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCisKK2N0bXg4MjEgY29tcGFyZXRvdG1hZyAgTmFOIC1JbmYgICAgLT4gIDEKK2N0bXg4MjIgY29tcGFyZXRvdG1hZyAgTmFOIC0xMDAwICAgLT4gIDEKK2N0bXg4MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDEKK2N0bXg4MjQgY29tcGFyZXRvdG1hZyAgTmFOIC0wICAgICAgLT4gIDEKK2N0bXg4MjUgY29tcGFyZXRvdG1hZyAgTmFOICAwICAgICAgLT4gIDEKK2N0bXg4MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2N0bXg4MjcgY29tcGFyZXRvdG1hZyAgTmFOICAxMDAwICAgLT4gIDEKK2N0bXg4MjggY29tcGFyZXRvdG1hZyAgTmFOICBJbmYgICAgLT4gIDEKK2N0bXg4MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDAKK2N0bXg4MzAgY29tcGFyZXRvdG1hZyAtSW5mICBOYU4gICAgLT4gIC0xCitjdG14ODMxIGNvbXBhcmV0b3RtYWcgLTEwMDAgTmFOICAgIC0+ICAtMQorY3RteDgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTEKK2N0bXg4MzMgY29tcGFyZXRvdG1hZyAtMCAgICBOYU4gICAgLT4gIC0xCitjdG14ODM0IGNvbXBhcmV0b3RtYWcgIDAgICAgTmFOICAgIC0+ICAtMQorY3RteDgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTEKK2N0bXg4MzYgY29tcGFyZXRvdG1hZyAgMTAwMCBOYU4gICAgLT4gIC0xCitjdG14ODM3IGNvbXBhcmV0b3RtYWcgIEluZiAgTmFOICAgIC0+ICAtMQorY3RteDgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMAorY3RteDgzOSBjb21wYXJldG90bWFnICtOYU4gLU5hTiAgICAtPiAgMAorY3RteDg0MCBjb21wYXJldG90bWFnIC1OYU4gK05hTiAgICAtPiAgMAorCitjdG14ODQxIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gIC0+ICAwCitjdG14ODQyIGNvbXBhcmV0b3RtYWcgIHNOYU4gLU5hTiAgIC0+ICAtMQorY3RteDg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQorY3RteDg0NCBjb21wYXJldG90bWFnICBzTmFOIC0xMDAwICAtPiAgMQorY3RteDg0NSBjb21wYXJldG90bWFnICBzTmFOIC0xICAgICAtPiAgMQorY3RteDg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQorY3RteDg0NyBjb21wYXJldG90bWFnICBzTmFOICAwICAgICAtPiAgMQorY3RteDg0OCBjb21wYXJldG90bWFnICBzTmFOICAxICAgICAtPiAgMQorY3RteDg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQorY3RteDg1MCBjb21wYXJldG90bWFnICBzTmFOICBOYU4gICAtPiAgLTEKK2N0bXg4NTEgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDAKKworY3RteDg1MiBjb21wYXJldG90bWFnIC1zTmFOIHNOYU4gICAtPiAgMAorY3RteDg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQorY3RteDg1NCBjb21wYXJldG90bWFnIC1JbmYgIHNOYU4gICAtPiAgLTEKK2N0bXg4NTUgY29tcGFyZXRvdG1hZyAtMTAwMCBzTmFOICAgLT4gIC0xCitjdG14ODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQorY3RteDg1NyBjb21wYXJldG90bWFnIC0wICAgIHNOYU4gICAtPiAgLTEKK2N0bXg4NTggY29tcGFyZXRvdG1hZyAgMCAgICBzTmFOICAgLT4gIC0xCitjdG14ODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQorY3RteDg2MCBjb21wYXJldG90bWFnICAxMDAwIHNOYU4gICAtPiAgLTEKK2N0bXg4NjEgY29tcGFyZXRvdG1hZyAgSW5mICBzTmFOICAgLT4gIC0xCitjdG14ODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxCitjdG14ODYzIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2N0bXg4NzEgY29tcGFyZXRvdG1hZyAgLXNOYU4gLXNOYU4gIC0+ICAwCitjdG14ODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTEKK2N0bXg4NzMgY29tcGFyZXRvdG1hZyAgLXNOYU4gLUluZiAgIC0+ICAxCitjdG14ODc0IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xMDAwICAtPiAgMQorY3RteDg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDEKK2N0bXg4NzYgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTAgICAgIC0+ICAxCitjdG14ODc3IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAwICAgICAtPiAgMQorY3RteDg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDEKK2N0bXg4NzkgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEwMDAgIC0+ICAxCitjdG14ODgwIGNvbXBhcmV0b3RtYWcgIC1zTmFOICBOYU4gICAtPiAgLTEKK2N0bXg4ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwCisKK2N0bXg4ODIgY29tcGFyZXRvdG1hZyAtc05hTiAtc05hTiAgIC0+ICAwCitjdG14ODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQorY3RteDg4NCBjb21wYXJldG90bWFnIC1JbmYgIC1zTmFOICAgLT4gIC0xCitjdG14ODg1IGNvbXBhcmV0b3RtYWcgLTEwMDAgLXNOYU4gICAtPiAgLTEKK2N0bXg4ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQorY3RteDg4NyBjb21wYXJldG90bWFnIC0wICAgIC1zTmFOICAgLT4gIC0xCitjdG14ODg4IGNvbXBhcmV0b3RtYWcgIDAgICAgLXNOYU4gICAtPiAgLTEKK2N0bXg4ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQorY3RteDg5MCBjb21wYXJldG90bWFnICAxMDAwIC1zTmFOICAgLT4gIC0xCitjdG14ODkxIGNvbXBhcmV0b3RtYWcgIEluZiAgLXNOYU4gICAtPiAgLTEKK2N0bXg4OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxCitjdG14ODkzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gICAtPiAgMAorCistLSBOYU5zIHdpdGggcGF5bG9hZAorY3RteDk2MCBjb21wYXJldG90bWFnICBOYU45IC1JbmYgICAtPiAgMQorY3RteDk2MSBjb21wYXJldG90bWFnICBOYU44ICA5OTkgICAtPiAgMQorY3RteDk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQorY3RteDk2MyBjb21wYXJldG90bWFnIC1OYU42NyBOYU41ICAtPiAgMQorY3RteDk2NCBjb21wYXJldG90bWFnIC1JbmYgIC1OYU40ICAtPiAgLTEKK2N0bXg5NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xCitjdG14OTY2IGNvbXBhcmV0b3RtYWcgIEluZiAgIE5hTjIgIC0+ICAtMQorCitjdG14OTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQorY3RteDk3MSBjb21wYXJldG90bWFnICtOYU40MSAtTmFONDIgLT4gLTEKK2N0bXg5NzIgY29tcGFyZXRvdG1hZyAtTmFONDEgK05hTjQyIC0+IC0xCitjdG14OTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQorY3RteDk3NCBjb21wYXJldG90bWFnIC1OYU40MiAtTmFOMDEgLT4gIDEKK2N0bXg5NzUgY29tcGFyZXRvdG1hZyArTmFONDIgLU5hTjAxIC0+ICAxCitjdG14OTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQorY3RteDk3NyBjb21wYXJldG90bWFnICtOYU40MiArTmFOMDEgLT4gIDEKKworY3RteDk4MCBjb21wYXJldG90bWFnIC1zTmFONzcxIC1zTmFONzcyIC0+IC0xCitjdG14OTgxIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgLXNOYU43NzIgLT4gLTEKK2N0bXg5ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQorY3RteDk4MyBjb21wYXJldG90bWFnICtzTmFONzcxICtzTmFONzcyIC0+IC0xCitjdG14OTg0IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgLXNOYU43NzEgLT4gIDEKK2N0bXg5ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQorY3RteDk4NiBjb21wYXJldG90bWFnIC1zTmFONzcyICtzTmFONzcxIC0+ICAxCitjdG14OTg3IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgK3NOYU43NzEgLT4gIDEKKworY3RteDk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQorY3RteDk5MiBjb21wYXJldG90bWFnICBzTmFOOTggLTExICAgICAtPiAgMQorY3RteDk5MyBjb21wYXJldG90bWFnICBzTmFOOTcgIE5hTiAgICAtPiAtMQorY3RteDk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQorY3RteDk5NSBjb21wYXJldG90bWFnICBOYU44NSAgc05hTjgzICAtPiAgMQorY3RteDk5NiBjb21wYXJldG90bWFnIC1JbmYgICAgc05hTjkyICAtPiAtMQorY3RteDk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQorY3RteDk5OCBjb21wYXJldG90bWFnICBJbmYgICAgc05hTjkwICAtPiAtMQorY3RteDk5OSBjb21wYXJldG90bWFnICBOYU4gICAtc05hTjg5ICAtPiAgMQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIHN1Ym5vcm1hbCByZXN1bHRzIG5vdyBhbGxvd2VkCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorY3RteDEwODAgY29tcGFyZXRvdG1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgIC0+ICAtMQorY3RteDEwODEgY29tcGFyZXRvdG1hZyA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+ICAgMQorY3RteDEwODIgY29tcGFyZXRvdG1hZyArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgIC0+ICAgMQorY3RteDEwODMgY29tcGFyZXRvdG1hZyA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgIC0+ICAtMQorY3RteDEwODUgY29tcGFyZXRvdG1hZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgIC0+ICAtMQorY3RteDEwODYgY29tcGFyZXRvdG1hZyA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+ICAgMQorY3RteDEwODcgY29tcGFyZXRvdG1hZyAtMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgIC0+ICAgMQorY3RteDEwODggY29tcGFyZXRvdG1hZyA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgIC0+ICAtMQorCitjdG14MTA4OSBjb21wYXJldG90bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAgLT4gIC0xCitjdG14MTA5MCBjb21wYXJldG90bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgICAgLT4gIC0xCitjdG14MTA5MSBjb21wYXJldG90bWFnIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAgLT4gIC0xCitjdG14MTA5MiBjb21wYXJldG90bWFnIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAgLT4gIC0xCitjdG14MTA5MyBjb21wYXJldG90bWFnIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAgLT4gIC0xCitjdG14MTA5NCBjb21wYXJldG90bWFnIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAgLT4gICAxCitjdG14MTA5NSBjb21wYXJldG90bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAgLT4gICAxCitjdG14MTA5NiBjb21wYXJldG90bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwICAgICAgLT4gICAxCitjdG14MTA5NyBjb21wYXJldG90bWFnIDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAgLT4gICAxCitjdG14MTA5OCBjb21wYXJldG90bWFnIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAgLT4gICAxCitjdG14MTA5OSBjb21wYXJldG90bWFnIDllOTk5OTk5OTk4IDEwICAgICAgICAgICAgICAgLT4gICAxCitjdG14MTEwMCBjb21wYXJldG90bWFnIDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAgLT4gIC0xCistLSBzaWducworY3RteDExMDEgY29tcGFyZXRvdG1hZyAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgIC0+ICAgMQorY3RteDExMDIgY29tcGFyZXRvdG1hZyAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgIC0+ICAgMQorY3RteDExMDMgY29tcGFyZXRvdG1hZyAtMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgIC0+ICAgMQorY3RteDExMDQgY29tcGFyZXRvdG1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgIC0+ICAgMQorY3RteDExMDUgY29tcGFyZXRvdG1hZyAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgIC0+ICAtMQorY3RteDExMDYgY29tcGFyZXRvdG1hZyAgMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgIC0+ICAtMQorY3RteDExMDcgY29tcGFyZXRvdG1hZyAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgIC0+ICAtMQorY3RteDExMDggY29tcGFyZXRvdG1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgIC0+ICAtMQorCistLSBzcHJlYWQgemVyb3MKK2N0bXgxMTEwIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDAgICAgICAgIC0+ICAtMQorY3RteDExMTEgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAtMCAgICAgICAgLT4gIC0xCitjdG14MTExMiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwICAgICAgICAtPiAgLTEKK2N0bXgxMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTAgICAgICAgIC0+ICAtMQorY3RteDExMTQgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAgMEUrMzg0ICAgLT4gIC0xCitjdG14MTExNSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wRSszODQgICAtPiAgLTEKK2N0bXgxMTE2IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDBFKzM4NCAgIC0+ICAtMQorY3RteDExMTcgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAtMEUrMzg0ICAgLT4gIC0xCitjdG14MTExOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRSszODQgICAtPiAgLTEKK2N0bXgxMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzM4NCAgIC0+ICAtMQorY3RteDExMjAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUrMzg0ICAgLT4gIC0xCitjdG14MTEyMSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRSszODQgICAtPiAgLTEKKworY3RteDExMzAgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAgMCAgICAgICAgLT4gICAxCitjdG14MTEzMSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wICAgICAgICAtPiAgIDEKK2N0bXgxMTMyIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDAgICAgICAgIC0+ICAgMQorY3RteDExMzMgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAtMCAgICAgICAgLT4gICAxCitjdG14MTEzNCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwRS0zODMgICAtPiAgIDEKK2N0bXgxMTM1IGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTBFLTM4MyAgIC0+ICAgMQorY3RteDExMzYgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAgMEUtMzgzICAgLT4gICAxCitjdG14MTEzNyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wRS0zODMgICAtPiAgIDEKK2N0bXgxMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTM4MyAgIC0+ICAgMQorY3RteDExMzkgY29tcGFyZXRvdG1hZyAgIDAgICAgICAtMEUtMzgzICAgLT4gICAxCitjdG14MTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS0zODMgICAtPiAgIDEKK2N0bXgxMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTM4MyAgIC0+ICAgMQorCistLSBOdWxsIHRlc3RzCitjdG14OTk5MCBjb21wYXJldG90bWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorY3RteDk5OTEgY29tcGFyZXRvdG1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmMjk5ZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weS5kZWNUZXN0CkBAIC0wLDAgKzEsODYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY29weS5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sKK2NweXgwMDEgY29weSAgICAgICArNy41MCAgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitjcHl4MDExIGNvcHkgIEluZmluaXR5ICAgIC0+IEluZmluaXR5CitjcHl4MDEyIGNvcHkgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2NweXgwMjEgY29weSAgICAgICAgIE5hTiAgLT4gTmFOCitjcHl4MDIyIGNvcHkgICAgICAgIC1OYU4gIC0+IC1OYU4KK2NweXgwMjMgY29weSAgICAgICAgc05hTiAgLT4gc05hTgorY3B5eDAyNCBjb3B5ICAgICAgIC1zTmFOICAtPiAtc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitjcHl4MDMxIGNvcHkgICAgICAgTmFOMTAgIC0+IE5hTjEwCitjcHl4MDMyIGNvcHkgICAgICAtTmFOMTAgIC0+IC1OYU4xMAorY3B5eDAzMyBjb3B5ICAgICAgc05hTjEwICAtPiBzTmFOMTAKK2NweXgwMzQgY29weSAgICAgLXNOYU4xMCAgLT4gLXNOYU4xMAorY3B5eDAzNSBjb3B5ICAgICAgIE5hTjcgICAtPiBOYU43CitjcHl4MDM2IGNvcHkgICAgICAtTmFONyAgIC0+IC1OYU43CitjcHl4MDM3IGNvcHkgICAgICBzTmFOMTAxIC0+IHNOYU4xMDEKK2NweXgwMzggY29weSAgICAgLXNOYU4xMDEgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworY3B5eDEwMSBjb3B5ICAgICAgICAgIDcgICAtPiA3CitjcHl4MTAyIGNvcHkgICAgICAgICAtNyAgIC0+IC03CitjcHl4MTAzIGNvcHkgICAgICAgICA3NSAgIC0+IDc1CitjcHl4MTA0IGNvcHkgICAgICAgIC03NSAgIC0+IC03NQorY3B5eDEwNSBjb3B5ICAgICAgIDcuNTAgICAtPiA3LjUwCitjcHl4MTA2IGNvcHkgICAgICAtNy41MCAgIC0+IC03LjUwCitjcHl4MTA3IGNvcHkgICAgICAgNy41MDAgIC0+IDcuNTAwCitjcHl4MTA4IGNvcHkgICAgICAtNy41MDAgIC0+IC03LjUwMAorCistLSB6ZXJvcworY3B5eDExMSBjb3B5ICAgICAgICAgIDAgICAtPiAwCitjcHl4MTEyIGNvcHkgICAgICAgICAtMCAgIC0+IC0wCitjcHl4MTEzIGNvcHkgICAgICAgMEUrNCAgIC0+IDBFKzQKK2NweXgxMTQgY29weSAgICAgIC0wRSs0ICAgLT4gLTBFKzQKK2NweXgxMTUgY29weSAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitjcHl4MTE2IGNvcHkgICAgLTAuMDAwMCAgIC0+IC0wLjAwMDAKK2NweXgxMTcgY29weSAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitjcHl4MTE4IGNvcHkgICAgIC0wRS0xNDEgIC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2NweXgxMjEgY29weSAgIDI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4CitjcHl4MTIyIGNvcHkgIC0yNjgyNjgyNjggICAgICAgIC0+IC0yNjgyNjgyNjgKK2NweXgxMjMgY29weSAgIDEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0CitjcHl4MTI0IGNvcHkgIC0xMzQxMzQxMzQgICAgICAgIC0+IC0xMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2NweXgxMzEgY29weSAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOS45OTk5OTk5OUUrOTk5CitjcHl4MTMyIGNvcHkgIDFFLTk5OSAgICAgICAgICAgIC0+IDFFLTk5OQorY3B5eDEzMyBjb3B5ICAxLjAwMDAwMDAwRS05OTkgICAtPiAxLjAwMDAwMDAwRS05OTkKK2NweXgxMzQgY29weSAgMUUtMTAwNyAgICAgICAgICAgLT4gMUUtMTAwNworCitjcHl4MTM1IGNvcHkgIC0xRS0xMDA3ICAgICAgICAgIC0+IC0xRS0xMDA3CitjcHl4MTM2IGNvcHkgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC0xLjAwMDAwMDAwRS05OTkKK2NweXgxMzcgY29weSAgLTFFLTk5OSAgICAgICAgICAgLT4gLTFFLTk5OQorY3B5eDEzOCBjb3B5ICAtOS45OTk5OTk5OUUrOTk5ICAtPiAtOS45OTk5OTk5OUUrOTk5CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlhYnMuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weWFicy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMDAyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlhYnMuZGVjVGVzdApAQCAtMCwwICsxLDg2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvcHlBYnMuZGVjVGVzdCAtLSBxdWlldCBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrCitjcGF4MDAxIGNvcHlhYnMgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworY3BheDAxMSBjb3B5YWJzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorY3BheDAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2NwYXgwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFOCitjcGF4MDIyIGNvcHlhYnMgICAgICAgIC1OYU4gIC0+IE5hTgorY3BheDAyMyBjb3B5YWJzICAgICAgICBzTmFOICAtPiBzTmFOCitjcGF4MDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorY3BheDAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMAorY3BheDAzMiBjb3B5YWJzICAgICAgLU5hTjE1ICAtPiBOYU4xNQorY3BheDAzMyBjb3B5YWJzICAgICAgc05hTjE1ICAtPiBzTmFOMTUKK2NwYXgwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwCitjcGF4MDM1IGNvcHlhYnMgICAgICAgTmFONyAgIC0+IE5hTjcKK2NwYXgwMzYgY29weWFicyAgICAgIC1OYU43ICAgLT4gTmFONworY3BheDAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCitjcGF4MDM4IGNvcHlhYnMgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworY3BheDEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3CitjcGF4MTAyIGNvcHlhYnMgICAgICAgICAtNyAgIC0+IDcKK2NwYXgxMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUKK2NwYXgxMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUKK2NwYXgxMDUgY29weWFicyAgICAgICA3LjEwICAgLT4gNy4xMAorY3BheDEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwCitjcGF4MTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwCitjcGF4MTA4IGNvcHlhYnMgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitjcGF4MTExIGNvcHlhYnMgICAgICAgICAgMCAgIC0+IDAKK2NwYXgxMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMAorY3BheDExMyBjb3B5YWJzICAgICAgIDBFKzYgICAtPiAwRSs2CitjcGF4MTE0IGNvcHlhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYKK2NwYXgxMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitjcGF4MTE2IGNvcHlhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorY3BheDExNyBjb3B5YWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2NwYXgxMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitjcGF4MTIxIGNvcHlhYnMgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OAorY3BheDEyMiBjb3B5YWJzICAtMjY4MjY4MjY4ICAgICAgICAtPiAyNjgyNjgyNjgKK2NwYXgxMjMgY29weWFicyAgIDEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0CitjcGF4MTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorY3BheDEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5Ljk5OTk5OTk5RSs5OTkKK2NwYXgxMzIgY29weWFicyAgMUUtOTk5ICAgICAgICAgICAgLT4gMUUtOTk5CitjcGF4MTMzIGNvcHlhYnMgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDEuMDAwMDAwMDBFLTk5OQorY3BheDEzNCBjb3B5YWJzICAxRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3CisKK2NwYXgxMzUgY29weWFicyAgLTFFLTEwMDcgICAgICAgICAgLT4gMUUtMTAwNworY3BheDEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAxLjAwMDAwMDAwRS05OTkKK2NwYXgxMzcgY29weWFicyAgLTFFLTk5OSAgICAgICAgICAgLT4gMUUtOTk5CitjcGF4MTk5IGNvcHlhYnMgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IDkuOTk5OTk5OTlFKzk5OQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5bmVnYXRlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHluZWdhdGUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhkZTlkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5bmVnYXRlLmRlY1Rlc3QKQEAgLTAsMCArMSw4NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb3B5TmVnYXRlLmRlY1Rlc3QgLS0gcXVpZXQgY29weSBhbmQgbmVnYXRlICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaworY3BueDAwMSBjb3B5bmVnYXRlICAgICAgICs3LjUwICAtPiAtNy41MAorCistLSBJbmZpbml0aWVzCitjcG54MDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQorY3BueDAxMiBjb3B5bmVnYXRlICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2NwbngwMjEgY29weW5lZ2F0ZSAgICAgICAgIE5hTiAgLT4gLU5hTgorY3BueDAyMiBjb3B5bmVnYXRlICAgICAgICAtTmFOICAtPiBOYU4KK2NwbngwMjMgY29weW5lZ2F0ZSAgICAgICAgc05hTiAgLT4gLXNOYU4KK2NwbngwMjQgY29weW5lZ2F0ZSAgICAgICAtc05hTiAgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitjcG54MDMxIGNvcHluZWdhdGUgICAgICAgTmFOMTMgIC0+IC1OYU4xMworY3BueDAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMworY3BueDAzMyBjb3B5bmVnYXRlICAgICAgc05hTjEzICAtPiAtc05hTjEzCitjcG54MDM0IGNvcHluZWdhdGUgICAgIC1zTmFOMTMgIC0+IHNOYU4xMworY3BueDAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzAKK2NwbngwMzYgY29weW5lZ2F0ZSAgICAgIC1OYU43MCAgLT4gTmFONzAKK2NwbngwMzcgY29weW5lZ2F0ZSAgICAgIHNOYU4xMDEgLT4gLXNOYU4xMDEKK2NwbngwMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitjcG54MTAxIGNvcHluZWdhdGUgICAgICAgICAgNyAgIC0+IC03CitjcG54MTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcKK2NwbngxMDMgY29weW5lZ2F0ZSAgICAgICAgIDc1ICAgLT4gLTc1CitjcG54MTA0IGNvcHluZWdhdGUgICAgICAgIC03NSAgIC0+IDc1CitjcG54MTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwCitjcG54MTA2IGNvcHluZWdhdGUgICAgICAtNy41MCAgIC0+IDcuNTAKK2NwbngxMDcgY29weW5lZ2F0ZSAgICAgICA3LjUwMCAgLT4gLTcuNTAwCitjcG54MTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitjcG54MTExIGNvcHluZWdhdGUgICAgICAgICAgMCAgIC0+IC0wCitjcG54MTEyIGNvcHluZWdhdGUgICAgICAgICAtMCAgIC0+IDAKK2NwbngxMTMgY29weW5lZ2F0ZSAgICAgICAwRSs0ICAgLT4gLTBFKzQKK2NwbngxMTQgY29weW5lZ2F0ZSAgICAgIC0wRSs0ICAgLT4gMEUrNAorY3BueDExNSBjb3B5bmVnYXRlICAgICAwLjAwMDAgICAtPiAtMC4wMDAwCitjcG54MTE2IGNvcHluZWdhdGUgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorY3BueDExNyBjb3B5bmVnYXRlICAgICAgMEUtMTQxICAtPiAtMEUtMTQxCitjcG54MTE4IGNvcHluZWdhdGUgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworY3BueDEyMSBjb3B5bmVnYXRlICAyNjgyNjgyNjggICAgICAgICAtPiAtMjY4MjY4MjY4CitjcG54MTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OAorY3BueDEyMyBjb3B5bmVnYXRlICAxMzQxMzQxMzQgICAgICAgICAtPiAtMTM0MTM0MTM0CitjcG54MTI0IGNvcHluZWdhdGUgIC0xMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorY3BueDEzMSBjb3B5bmVnYXRlICA5Ljk5OTk5OTk5RSs5OTkgICAtPiAtOS45OTk5OTk5OUUrOTk5CitjcG54MTMyIGNvcHluZWdhdGUgIDFFLTk5OSAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS05OTkKK2NwbngxMzMgY29weW5lZ2F0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gLTEuMDAwMDAwMDBFLTk5OQorY3BueDEzNCBjb3B5bmVnYXRlICAxRS0xMDA3ICAgICAgICAgICAgICAgICAgICAtPiAtMUUtMTAwNworCitjcG54MTM1IGNvcHluZWdhdGUgIC0xRS0xMDA3ICAgICAgICAgICAgICAgICAgIC0+IDFFLTEwMDcKK2NwbngxMzYgY29weW5lZ2F0ZSAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gMS4wMDAwMDAwMEUtOTk5CitjcG54MTM3IGNvcHluZWdhdGUgIC0xRS05OTkgICAgICAgICAgICAgICAgICAgIC0+IDFFLTk5OQorY3BueDEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OUUrOTk5ICAtPiA5Ljk5OTk5OTk5RSs5OTkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weXNpZ24uZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weXNpZ24uZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmRkNjcwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5c2lnbi5kZWNUZXN0CkBAIC0wLDAgKzEsMTc3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvcHlzaWduLmRlY1Rlc3QgLS0gcXVpZXQgY29weSB3aXRoIHNpZ24gZnJvbSByaHMgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrLCBhbmQgZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorY3BzeDAwMSBjb3B5c2lnbiAgICs3LjUwICAgICAgIDExICAtPiA3LjUwCitjcHN4MDAyIGNvcHlzaWduICAgJzEuNTAnICAgJzcuMzMnIC0+IDEuNTAKK2Nwc3gwMDMgY29weXNpZ24gICctMS41MCcgICAnNy4zMycgLT4gMS41MAorY3BzeDAwNCBjb3B5c2lnbiAgICcxLjUwJyAgJy03LjMzJyAtPiAtMS41MAorY3BzeDAwNSBjb3B5c2lnbiAgJy0xLjUwJyAgJy03LjMzJyAtPiAtMS41MAorCistLSBJbmZpbml0aWVzCitjcHN4MDExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAxMSAtPiBJbmZpbml0eQorY3BzeDAxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgMTEgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitjcHN4MDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4KK2Nwc3gwMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIDExIC0+IE5hTgorY3BzeDAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTgorY3BzeDAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitjcHN4MDMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAxMSAtPiBOYU4xMAorY3BzeDAzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgMTEgLT4gTmFOMTAKK2Nwc3gwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMAorY3BzeDAzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgMTEgLT4gc05hTjEwCitjcHN4MDM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAxMSAtPiBOYU43CitjcHN4MDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43CitjcHN4MDM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxCitjcHN4MDM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2Nwc3gxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcKK2Nwc3gxMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIDExIC0+IDcKK2Nwc3gxMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIDExIC0+IDc1CitjcHN4MTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQorY3BzeDEwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgMTEgLT4gNy41MAorY3BzeDEwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgMTEgLT4gNy41MAorY3BzeDEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDAKK2Nwc3gxMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIDExIC0+IDcuNTAwCisKKy0tIHplcm9zCitjcHN4MTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwCitjcHN4MTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwCitjcHN4MTEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAxMSAtPiAwRSs0CitjcHN4MTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0CitjcHN4MTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2Nwc3gxMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIDExIC0+IDAuMDAwMAorY3BzeDExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCitjcHN4MTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2Nwc3gxMjEgY29weXNpZ24gICAyNjgyNjgyNjggICAgICAgICAgIDExIC0+IDI2ODI2ODI2OAorY3BzeDEyMiBjb3B5c2lnbiAgLTI2ODI2ODI2OCAgICAgICAgICAgMTEgLT4gMjY4MjY4MjY4CitjcHN4MTIzIGNvcHlzaWduICAgMTM0MTM0MTM0ICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQKK2Nwc3gxMjQgY29weXNpZ24gIC0xMzQxMzQxMzQgICAgICAgICAgIDExIC0+IDEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorY3BzeDEzMSBjb3B5c2lnbiAgOS45OTk5OTk5OUUrOTk5ICAgICAgMTEgLT4gOS45OTk5OTk5OUUrOTk5CitjcHN4MTMyIGNvcHlzaWduICAxRS05OTkgICAgICAgICAgICAgICAxMSAtPiAxRS05OTkKK2Nwc3gxMzMgY29weXNpZ24gIDEuMDAwMDAwMDBFLTk5OSAgICAgIDExIC0+IDEuMDAwMDAwMDBFLTk5OQorY3BzeDEzNCBjb3B5c2lnbiAgMUUtMTAwNyAgICAgICAgICAgICAgMTEgLT4gMUUtMTAwNworCitjcHN4MTM1IGNvcHlzaWduICAtMUUtMTAwNyAgICAgICAgICAgICAxMSAtPiAxRS0xMDA3CitjcHN4MTM2IGNvcHlzaWduICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxMSAtPiAxLjAwMDAwMDAwRS05OTkKK2Nwc3gxMzcgY29weXNpZ24gIC0xRS05OTkgICAgICAgICAgICAgIDExIC0+IDFFLTk5OQorY3BzeDEzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTlFKzk5OSAgICAgMTEgLT4gOS45OTk5OTk5OUUrOTk5CisKKy0tIHJlcGVhdCB3aXRoIG5lZ2F0aXZlIFJIUworCistLSBJbmZpbml0aWVzCitjcHN4MjExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAtMzQgLT4gLUluZmluaXR5CitjcHN4MjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorY3BzeDIyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgLTM0IC0+IC1OYU4KK2Nwc3gyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFOCitjcHN4MjIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAtMzQgLT4gLXNOYU4KK2Nwc3gyMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIC0zNCAtPiAtc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitjcHN4MjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwCitjcHN4MjMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAtMzQgLT4gLU5hTjEwCitjcHN4MjMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMAorY3BzeDIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKK2Nwc3gyMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIC0zNCAtPiAtTmFONworY3BzeDIzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgLTM0IC0+IC1OYU43CitjcHN4MjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKK2Nwc3gyMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQorCistLSBmaW5pdGVzCitjcHN4MzAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAtMzQgLT4gLTcKK2Nwc3gzMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIC0zNCAtPiAtNworY3BzeDMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQorY3BzeDMwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgLTM0IC0+IC03NQorY3BzeDMwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgLTM0IC0+IC03LjUwCitjcHN4MzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTAKK2Nwc3gzMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIC0zNCAtPiAtNy41MDAKK2Nwc3gzMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIC0zNCAtPiAtNy41MDAKKworLS0gemVyb3MKK2Nwc3gzMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIC0zNCAtPiAtMAorY3BzeDMxMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgLTM0IC0+IC0wCitjcHN4MzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2Nwc3gzMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIC0zNCAtPiAtMEUrNAorY3BzeDMxNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDAKK2Nwc3gzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCitjcHN4MzE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQorY3BzeDMxOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2Nwc3gzMjEgY29weXNpZ24gICAyNjgyNjgyNjggICAgICAgICAgLTE4IC0+IC0yNjgyNjgyNjgKK2Nwc3gzMjIgY29weXNpZ24gIC0yNjgyNjgyNjggICAgICAgICAgLTE4IC0+IC0yNjgyNjgyNjgKK2Nwc3gzMjMgY29weXNpZ24gICAxMzQxMzQxMzQgICAgICAgICAgLTE4IC0+IC0xMzQxMzQxMzQKK2Nwc3gzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQgICAgICAgICAgLTE4IC0+IC0xMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Nwc3gzMzEgY29weXNpZ24gIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IC05Ljk5OTk5OTk5RSs5OTkKK2Nwc3gzMzIgY29weXNpZ24gIDFFLTk5OSAgICAgICAgICAgICAgLTE4IC0+IC0xRS05OTkKK2Nwc3gzMzMgY29weXNpZ24gIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IC0xLjAwMDAwMDAwRS05OTkKK2Nwc3gzMzQgY29weXNpZ24gIDFFLTEwMDcgICAgICAgICAgICAgLTE4IC0+IC0xRS0xMDA3CisKK2Nwc3gzMzUgY29weXNpZ24gIC0xRS0xMDA3ICAgICAgICAgICAgLTE4IC0+IC0xRS0xMDA3CitjcHN4MzM2IGNvcHlzaWduICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0xOCAtPiAtMS4wMDAwMDAwMEUtOTk5CitjcHN4MzM3IGNvcHlzaWduICAtMUUtOTk5ICAgICAgICAgICAgIC0xOCAtPiAtMUUtOTk5CitjcHN4MzM4IGNvcHlzaWduICAtOS45OTk5OTk5OUUrOTk5ICAgIC0xOCAtPiAtOS45OTk5OTk5OUUrOTk5CisKKy0tIE90aGVyIGtpbmRzIG9mIFJIUworY3BzeDQwMSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTM0IC0+IC03MDEKK2Nwc3g0MDIgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0zNCAtPiAtNzIwCitjcHN4NDAzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMCAgLT4gLTcwMQorY3BzeDQwNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTAgIC0+IC03MjAKK2Nwc3g0MDUgY29weXNpZ24gICAgICAgICAgNzAxICAgICswICAtPiAgNzAxCitjcHN4NDA2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMCAgLT4gIDcyMAorY3BzeDQwNyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzM0IC0+ICA3MDEKK2Nwc3g0MDggY29weXNpZ24gICAgICAgICAtNzIwICAgICszNCAtPiAgNzIwCisKK2Nwc3g0MTMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1JbmYgIC0+IC03MDEKK2Nwc3g0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjAKK2Nwc3g0MTUgY29weXNpZ24gICAgICAgICAgNzAxICAgICtJbmYgIC0+ICA3MDEKK2Nwc3g0MTYgY29weXNpZ24gICAgICAgICAtNzIwICAgICtJbmYgIC0+ICA3MjAKKworY3BzeDQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQorY3BzeDQyMSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLU5hTiAgLT4gLTcyMAorY3BzeDQyMiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK05hTiAgLT4gIDcwMQorY3BzeDQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMAorY3BzeDQyNSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTjggLT4gIDcyMAorCitjcHN4NDI2IGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtc05hTiAgLT4gLTcwMQorY3BzeDQyNyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLXNOYU4gIC0+IC03MjAKK2Nwc3g0MjggY29weXNpZ24gICAgICAgICAgNzAxICAgICtzTmFOICAtPiAgNzAxCitjcHN4NDI5IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTiAgLT4gIDcyMAorY3BzeDQzMCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4zIC0+ICA3MjAKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFicy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFicy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OGQ2NGEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWJzLmRlY1Rlc3QKQEAgLTAsMCArMSwxMjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRBYnMuZGVjVGVzdCAtLSBkZWNEb3VibGUgYWJzb2x1dGUgdmFsdWUsIGhlZWRpbmcgc05hTiAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRhYnMwMDEgYWJzICcxJyAgICAgIC0+ICcxJworZGRhYnMwMDIgYWJzICctMScgICAgIC0+ICcxJworZGRhYnMwMDMgYWJzICcxLjAwJyAgIC0+ICcxLjAwJworZGRhYnMwMDQgYWJzICctMS4wMCcgIC0+ICcxLjAwJworZGRhYnMwMDUgYWJzICcwJyAgICAgIC0+ICcwJworZGRhYnMwMDYgYWJzICcwLjAwJyAgIC0+ICcwLjAwJworZGRhYnMwMDcgYWJzICcwMC4wJyAgIC0+ICcwLjAnCitkZGFiczAwOCBhYnMgJzAwLjAwJyAgLT4gJzAuMDAnCitkZGFiczAwOSBhYnMgJzAwJyAgICAgLT4gJzAnCisKK2RkYWJzMDEwIGFicyAnLTInICAgICAtPiAnMicKK2RkYWJzMDExIGFicyAnMicgICAgICAtPiAnMicKK2RkYWJzMDEyIGFicyAnLTIuMDAnICAtPiAnMi4wMCcKK2RkYWJzMDEzIGFicyAnMi4wMCcgICAtPiAnMi4wMCcKK2RkYWJzMDE0IGFicyAnLTAnICAgICAtPiAnMCcKK2RkYWJzMDE1IGFicyAnLTAuMDAnICAtPiAnMC4wMCcKK2RkYWJzMDE2IGFicyAnLTAwLjAnICAtPiAnMC4wJworZGRhYnMwMTcgYWJzICctMDAuMDAnIC0+ICcwLjAwJworZGRhYnMwMTggYWJzICctMDAnICAgIC0+ICcwJworCitkZGFiczAyMCBhYnMgJy0yMDAwMDAwJyAtPiAnMjAwMDAwMCcKK2RkYWJzMDIxIGFicyAnMjAwMDAwMCcgIC0+ICcyMDAwMDAwJworCitkZGFiczAzMCBhYnMgJyswLjEnICAgICAgICAgICAgLT4gJzAuMScKK2RkYWJzMDMxIGFicyAnLTAuMScgICAgICAgICAgICAtPiAnMC4xJworZGRhYnMwMzIgYWJzICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJworZGRhYnMwMzMgYWJzICctMC4wMScgICAgICAgICAgIC0+ICcwLjAxJworZGRhYnMwMzQgYWJzICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2RkYWJzMDM1IGFicyAnLTAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCitkZGFiczAzNiBhYnMgJyswLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJworZGRhYnMwMzcgYWJzICctMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2RkYWJzMDM4IGFicyAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCitkZGFiczAzOSBhYnMgJy0wLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJworCistLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoCitkZGFiczA0MCBhYnMgJzIuMScgICAgIC0+ICAnMi4xJworZGRhYnMwNDEgYWJzICctMTAwJyAgICAtPiAgJzEwMCcKK2RkYWJzMDQyIGFicyAnMTAxLjUnICAgLT4gICcxMDEuNScKK2RkYWJzMDQzIGFicyAnLTEwMS41JyAgLT4gICcxMDEuNScKKworLS0gbW9yZSBmaXhlZCwgcG90ZW50aWFsIExIUyBzd2Fwcy9vdmVybGF5cyBpZiBkb25lIGJ5IHN1YnRyYWN0IDAKK2RkYWJzMDYwIGFicyAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnCitkZGFiczA2MSBhYnMgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycKK2RkYWJzMDYyIGFicyAnLTU2MjY3RS0yJyAgIC0+ICc1NjIuNjcnCitkZGFiczA2MyBhYnMgJy01NjI2N0UtMScgICAtPiAnNTYyNi43JworZGRhYnMwNjUgYWJzICctNTYyNjdFLTAnICAgLT4gJzU2MjY3JworCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKKworLS0gbG9uZyBvcGVyYW5kIHRlc3RzCitkZGFiczMyMSBhYnMgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRhYnMzMjIgYWJzIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAorZGRhYnMzMjMgYWJzIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitkZGFiczMyNCBhYnMgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK2RkYWJzMzI1IGFicyAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQorZGRhYnMzMjYgYWJzIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorZGRhYnMzMjcgYWJzIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CisKKy0tIHplcm9zCitkZGFiczExMSBhYnMgICAgICAgICAgMCAgIC0+IDAKK2RkYWJzMTEyIGFicyAgICAgICAgIC0wICAgLT4gMAorZGRhYnMxMTMgYWJzICAgICAgIDBFKzYgICAtPiAwRSs2CitkZGFiczExNCBhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYKK2RkYWJzMTE1IGFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkZGFiczExNiBhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZGRhYnMxMTcgYWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2RkYWJzMTE4IGFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZGFiczEyMSBhYnMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGFiczEyMiBhYnMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGFiczEyMyBhYnMgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCitkZGFiczEyNCBhYnMgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGFiczEzMSBhYnMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGFiczEzMiBhYnMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkYWJzMTMzIGFicyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkYWJzMTM0IGFicyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwKKworZGRhYnMxMzUgYWJzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbAorZGRhYnMxMzYgYWJzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRhYnMxMzcgYWJzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZGFiczEzOCBhYnMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CisKKy0tIHNwZWNpYWxzCitkZGFiczUyMCBhYnMgJ0luZicgICAgLT4gJ0luZmluaXR5JworZGRhYnM1MjEgYWJzICctSW5mJyAgIC0+ICdJbmZpbml0eScKK2RkYWJzNTIyIGFicyAgIE5hTiAgICAtPiAgTmFOCitkZGFiczUyMyBhYnMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZGFiczUyNCBhYnMgICBOYU4yMiAgLT4gIE5hTjIyCitkZGFiczUyNSBhYnMgIHNOYU4zMyAgLT4gIE5hTjMzIEludmFsaWRfb3BlcmF0aW9uCitkZGFiczUyNiBhYnMgIC1OYU4yMiAgLT4gLU5hTjIyCitkZGFiczUyNyBhYnMgLXNOYU4zMyAgLT4gLU5hTjMzIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK2RkYWJzOTAwIGFicyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFkZC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFkZC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMTJjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWRkLmRlY1Rlc3QKQEAgLTAsMCArMSwxMzI4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQWRkLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGFkZGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgYXJlIGZvciBkZWNEb3VibGVzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjRG91YmxlCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCitkZGFkZDAwMSBhZGQgMSAgICAgICAxICAgICAgIC0+ICAyCitkZGFkZDAwMiBhZGQgMiAgICAgICAzICAgICAgIC0+ICA1CitkZGFkZDAwMyBhZGQgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1CitkZGFkZDAwNCBhZGQgJzUnICAgICAnLTMnICAgIC0+ICAyCitkZGFkZDAwNSBhZGQgJy01JyAgICAnLTMnICAgIC0+ICAtOAorZGRhZGQwMDYgYWRkICctNycgICAgJzIuNScgICAtPiAgLTQuNQorZGRhZGQwMDcgYWRkICcwLjcnICAgJzAuMycgICAtPiAgMS4wCitkZGFkZDAwOCBhZGQgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCitkZGFkZDAwOSBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCitkZGFkZDAxMCBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCisKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGFkZDAxMSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAxMiBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZGRhZGQwMTMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5JworZGRhZGQwMTQgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDE1IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAxNiBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMTcgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDE4IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAxOSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMjAgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQwMjEgYWRkIDAgMSAtPiAxCitkZGFkZDAyMiBhZGQgMSAxIC0+IDIKK2RkYWRkMDIzIGFkZCAyIDEgLT4gMworZGRhZGQwMjQgYWRkIDMgMSAtPiA0CitkZGFkZDAyNSBhZGQgNCAxIC0+IDUKK2RkYWRkMDI2IGFkZCA1IDEgLT4gNgorZGRhZGQwMjcgYWRkIDYgMSAtPiA3CitkZGFkZDAyOCBhZGQgNyAxIC0+IDgKK2RkYWRkMDI5IGFkZCA4IDEgLT4gOQorZGRhZGQwMzAgYWRkIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2RkYWRkMDMxIGFkZCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2RkYWRkMDMyIGFkZCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2RkYWRkMDMzIGFkZCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2RkYWRkMDM0IGFkZCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworZGRhZGQwMzUgYWRkICc3MCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMzYgYWRkICc3MDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDM3IGFkZCAnNzAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMzggYWRkICc3MDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMzkgYWRkICc3MDAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5OgorZGRhZGQwNDAgYWRkICcxMDAwMGUrMTYnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwNDEgYWRkICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDQyIGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwNDQgYWRkICcxMDAwMGUrMTYnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwNDUgYWRkICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKKy0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcKK2RkYWRkMDQ2IGFkZCAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JworZGRhZGQwNDcgYWRkICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJworZGRhZGQwNDggYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2RkYWRkMDQ5IGFkZCAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJworZGRhZGQwNTAgYWRkICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJworZGRhZGQwNTEgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKK2RkYWRkMDUyIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJworCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkZGFkZDA1MyBhZGQgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJworZGRhZGQwNTQgYWRkICcxLjMnICctMS4wNycgLT4gJzAuMjMnCitkZGFkZDA1NSBhZGQgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKK2RkYWRkMDU2IGFkZCAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKK2RkYWRkMDU3IGFkZCAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uCitkZGFkZDA2MSBhZGQgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJworZGRhZGQwNjIgYWRkIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJworZGRhZGQwNjMgYWRkIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCitkZGFkZDA2NCBhZGQgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJworZGRhZGQwNjUgYWRkIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJworCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitkZGFkZDA3MCBhZGQgMSAgMCAgICAtPiAxCitkZGFkZDA3MSBhZGQgMSAwLiAgICAtPiAxCitkZGFkZDA3MiBhZGQgMSAgLjAgICAtPiAxLjAKK2RkYWRkMDczIGFkZCAxIDAuMCAgIC0+IDEuMAorZGRhZGQwNzQgYWRkIDEgMC4wMCAgLT4gMS4wMAorZGRhZGQwNzUgYWRkICAwICAxICAgLT4gMQorZGRhZGQwNzYgYWRkIDAuICAxICAgLT4gMQorZGRhZGQwNzcgYWRkICAuMCAxICAgLT4gMS4wCitkZGFkZDA3OCBhZGQgMC4wIDEgICAtPiAxLjAKK2RkYWRkMDc5IGFkZCAwLjAwIDEgIC0+IDEuMDAKKworLS0gc29tZSBjYXJyaWVzCitkZGFkZDA4MCBhZGQgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQorZGRhZGQwODEgYWRkIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwCitkZGFkZDA4MiBhZGQgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAorZGRhZGQwODMgYWRkICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAorZGRhZGQwODQgYWRkICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwCitkZGFkZDA4NSBhZGQgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorZGRhZGQwODYgYWRkICAgICAgOTk5OSAxICAtPiAxMDAwMAorZGRhZGQwODcgYWRkICAgICAgIDk5OSAxICAtPiAxMDAwCitkZGFkZDA4OCBhZGQgICAgICAgIDk5IDEgIC0+IDEwMAorZGRhZGQwODkgYWRkICAgICAgICAgOSAxICAtPiAxMAorCisKKy0tIG1vcmUgTEhTIHN3YXBzCitkZGFkZDA5MCBhZGQgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitkZGFkZDA5MSBhZGQgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2RkYWRkMDkyIGFkZCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitkZGFkZDA5MyBhZGQgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitkZGFkZDA5NCBhZGQgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkZGFkZDA5NSBhZGQgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitkZGFkZDA5NiBhZGQgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitkZGFkZDA5NyBhZGQgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2RkYWRkMDk4IGFkZCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZGRhZGQwOTkgYWRkICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2RkYWRkMTAwIGFkZCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZGRhZGQxMDEgYWRkICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2RkYWRkMTAyIGFkZCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2RkYWRkMTAzIGFkZCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2RkYWRkMTA0IGFkZCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitkZGFkZDEwNSBhZGQgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2RkYWRkMTA2IGFkZCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2RkYWRkMTA3IGFkZCAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCitkZGFkZDEwOCBhZGQgJy01RTE2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICBSb3VuZGVkCitkZGFkZDEwOSBhZGQgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkCitkZGFkZDExMCBhZGQgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkCitkZGFkZDExMSBhZGQgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzCitkZGFkZDExMyBhZGQgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RkYWRkMTE0IGFkZCAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCitkZGFkZDExNiBhZGQgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCitkZGFkZDExNyBhZGQgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2RkYWRkMTE5IGFkZCAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JworZGRhZGQxMjAgYWRkIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCitkZGFkZDEyMSBhZGQgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2RkYWRkMTIyIGFkZCAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCitkZGFkZDEyMyBhZGQgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJworZGRhZGQxMjQgYWRkIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZGRhZGQxMjUgYWRkIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKK2RkYWRkMTI2IGFkZCAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKK2RkYWRkMTI3IGFkZCAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZGRhZGQxMjggYWRkIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCitkZGFkZDEyOSBhZGQgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCitkZGFkZDEzMCBhZGQgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZGRhZGQxMzEgYWRkIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCitkZGFkZDEzMiBhZGQgMCAgJy01RTE1JyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCitkZGFkZDEzMyBhZGQgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCitkZGFkZDEzNCBhZGQgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkCitkZGFkZDEzNSBhZGQgMCAgJy01RTE4JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkCitkZGFkZDEzNiBhZGQgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2RkYWRkMTM3IGFkZCAgMSAgJzBFLTE5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkZGFkZDEzOCBhZGQgLTEgICcwRS0xOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZGRhZGQxMzkgYWRkICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RkYWRkMTQwIGFkZCAnMEUtMTknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZGFkZDE0MSBhZGQgMUUrMTEgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJworZGRhZGQxNDIgYWRkIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKK2RkYWRkMTQzIGFkZCAwLjAwMCAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnCitkZGFkZDE0NCBhZGQgMC4wMDAwICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZAorCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQorZGRhZGQxNDYgYWRkICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2RkYWRkMTQ3IGFkZCAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJworZGRhZGQxNDggYWRkICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCitkZGFkZDE0OSBhZGQgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworZGRhZGQxNTAgYWRkICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCitkZGFkZDE1MSBhZGQgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKK2RkYWRkMTUyIGFkZCAnMycgICAgICcuMycgICAgLT4gICczLjMnCitkZGFkZDE1MyBhZGQgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJworZGRhZGQxNTQgYWRkICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKK2RkYWRkMTU1IGFkZCAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworZGRhZGQxNTYgYWRkICczJyAgICAgJzMnICAgICAtPiAgJzYnCitkZGFkZDE1NyBhZGQgJzMnICAgICAnKzMnICAgIC0+ICAnNicKK2RkYWRkMTU4IGFkZCAnMycgICAgICctMycgICAgLT4gICcwJworZGRhZGQxNTkgYWRkICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKK2RkYWRkMTYwIGFkZCAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorZGRhZGQxNjEgYWRkICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JworZGRhZGQxNjIgYWRkICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2RkYWRkMTYzIGFkZCAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkZGFkZDE2NCBhZGQgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCitkZGFkZDE2NSBhZGQgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5JworZGRhZGQxNjYgYWRkICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2RkYWRkMTY3IGFkZCAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkZGFkZDE2OCBhZGQgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5JworCityb3VuZGluZzogaGFsZl91cAorLS0gICAgICAgICAgIDEuMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDU2CitkZGFkZDE3MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTcxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTc0IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzUgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3NiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTc3IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQKK2RkYWRkMTc4IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzkgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE4MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTgxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxODIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE4MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGFkZDIwMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCitkZGFkZDIwMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjAzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjA2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjA5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjEyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjE1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnCitkZGFkZDIxNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjE5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkYWRkMjIwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKK2RkYWRkMjIxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjI0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjI3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjMwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjMzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjM2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcKK2RkYWRkMjM3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkZGFkZDI0MCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNDEgYWRkICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjQyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZGFkZDI1MCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCitkZGFkZDI1MSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjUzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1NCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjU2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1NyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjU5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2MCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjYyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2MyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjY1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2NiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnCitkZGFkZDI2NyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjY5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfdXAKK2RkYWRkMzAxIGFkZCAgLTEgICAxICAgICAgLT4gICAwCitkZGFkZDMwMiBhZGQgICAwICAgMSAgICAgIC0+ICAgMQorZGRhZGQzMDMgYWRkICAgMSAgIDEgICAgICAtPiAgIDIKK2RkYWRkMzA0IGFkZCAgMTIgICAxICAgICAgLT4gIDEzCitkZGFkZDMwNSBhZGQgIDk4ICAgMSAgICAgIC0+ICA5OQorZGRhZGQzMDYgYWRkICA5OSAgIDEgICAgICAtPiAxMDAKK2RkYWRkMzA3IGFkZCAxMDAgICAxICAgICAgLT4gMTAxCitkZGFkZDMwOCBhZGQgMTAxICAgMSAgICAgIC0+IDEwMgorZGRhZGQzMDkgYWRkICAtMSAgLTEgICAgICAtPiAgLTIKK2RkYWRkMzEwIGFkZCAgIDAgIC0xICAgICAgLT4gIC0xCitkZGFkZDMxMSBhZGQgICAxICAtMSAgICAgIC0+ICAgMAorZGRhZGQzMTIgYWRkICAxMiAgLTEgICAgICAtPiAgMTEKK2RkYWRkMzEzIGFkZCAgOTggIC0xICAgICAgLT4gIDk3CitkZGFkZDMxNCBhZGQgIDk5ICAtMSAgICAgIC0+ICA5OAorZGRhZGQzMTUgYWRkIDEwMCAgLTEgICAgICAtPiAgOTkKK2RkYWRkMzE2IGFkZCAxMDEgIC0xICAgICAgLT4gMTAwCisKK2RkYWRkMzIxIGFkZCAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMAorZGRhZGQzMjIgYWRkICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCitkZGFkZDMyMyBhZGQgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKK2RkYWRkMzI0IGFkZCAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMworZGRhZGQzMjUgYWRkICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5CitkZGFkZDMyNiBhZGQgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKK2RkYWRkMzI3IGFkZCAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQorZGRhZGQzMjggYWRkICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCitkZGFkZDMyOSBhZGQgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKK2RkYWRkMzMwIGFkZCAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQorZGRhZGQzMzEgYWRkICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCitkZGFkZDMzMiBhZGQgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKK2RkYWRkMzMzIGFkZCAgMC45OCAtMC4wMSAgICAtPiAgMC45NworZGRhZGQzMzQgYWRkICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4CitkZGFkZDMzNSBhZGQgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKK2RkYWRkMzM2IGFkZCAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMAorCistLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgYWRkaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKK2RkYWRkMzQwIGFkZCAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCitkZGFkZDM0MSBhZGQgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAKK2RkYWRkMzQyIGFkZCAxRSsxNiAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQKK2RkYWRkMzQzIGFkZCAxRSsyMCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2RkYWRkMzQ0IGFkZCAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitkZGFkZDM0NSBhZGQgMUUrMTUgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDEKK2RkYWRkMzQ2IGFkZCAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQzNDcgYWRkIDFFKzIwICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDM0OCBhZGQgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNworZGRhZGQzNDkgYWRkIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3CitkZGFkZDM1MCBhZGQgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMzUxIGFkZCAxRSsyMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIEluZXhhY3QgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RkYWRkMzYwICBhZGQgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorZGRhZGQzNjEgIGFkZCAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZAorZGRhZGQzNjIgIGFkZCAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZAorZGRhZGQzNjMgIGFkZCAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdAorZGRhZGQzNjQgIGFkZCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDBFKzM2OQorCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCityb3VuZGluZzogICAgaGFsZl9kb3duCitkZGFkZDM3MCBhZGQgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAorZGRhZGQzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGFkZDM3MiBhZGQgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAorZGRhZGQzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK2RkYWRkMzc0IGFkZCAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0CitkZGFkZDM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdAorCistLSBvcGVyYW5kcyBmb2xkZWQKK2RkYWRkMzgwIGFkZCAgIDFFKzM4NCAgMUUrMzg0ICAtPiAgMi4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAorZGRhZGQzODEgYWRkICAgMUUrMzgwICAxRSszODAgIC0+ICAyLjAwMDAwMDAwMDAwRSszODAgICAgICBDbGFtcGVkCitkZGFkZDM4MiBhZGQgICAxRSszNzYgIDFFKzM3NiAgLT4gIDIuMDAwMDAwMEUrMzc2ICAgICAgICAgIENsYW1wZWQKK2RkYWRkMzgzIGFkZCAgIDFFKzM3MiAgMUUrMzcyICAtPiAgMi4wMDBFKzM3MiAgICAgICAgICAgICAgQ2xhbXBlZAorZGRhZGQzODQgYWRkICAgMUUrMzcwICAxRSszNzAgIC0+ICAyLjBFKzM3MCAgICAgICAgICAgICAgICBDbGFtcGVkCitkZGFkZDM4NSBhZGQgICAxRSszNjkgIDFFKzM2OSAgLT4gIDJFKzM2OQorZGRhZGQzODYgYWRkICAgMUUrMzY4ICAxRSszNjggIC0+ICAyRSszNjgKKworLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCitkZGFkZDQwMCBhZGQgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2RkYWRkNDAxIGFkZCAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2RkYWRkNDAyIGFkZCAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGFkZDQwMyBhZGQgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MDQgYWRkICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDA1IGFkZCAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQwNiBhZGQgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDQxMCBhZGQgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CitkZGFkZDQxMSBhZGQgIDEwICAgNzdlLTE1ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MTIgYWRkICAxMCAgIDc3ZS0xNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDEzIGFkZCAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQxNCBhZGQgIDEwICAgNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MTUgYWRkICAxMCAgIDc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDE2IGFkZCAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNDIwIGFkZCAgNzdlLTE0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDA3NworZGRhZGQ0MjEgYWRkICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworZGRhZGQ0MjIgYWRkICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDIzIGFkZCAgNzdlLTE3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQyNCBhZGQgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MjUgYWRkICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDI2IGFkZCAgNzdlLTI5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNDMwIGFkZCAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2RkYWRkNDMxIGFkZCAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGFkZDQzMiBhZGQgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MzMgYWRkICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDM0IGFkZCAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQzNSBhZGQgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MzYgYWRkICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gZmFzdHBhdGggYm91bmRhcnkgKG1vcmUgaW4gZHFhZGQpCistLSAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkYWRkNTM5IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczMzMzMzMzMzMzMzMzMzMzJyAtPiAnNzc3Nzc3Nzc3Nzc3Nzc3NycKK2RkYWRkNTQwIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnODg4ODg4ODg4ODg4ODg4OCcKK2RkYWRkNTQxIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTk5OTk5OTk5OTk5OTk5OScKK2RkYWRkNTQyIGFkZCAnMzMzMzMzMzMzMzMzMzMzMycgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnNzc3Nzc3Nzc3Nzc3Nzc3NycKK2RkYWRkNTQzIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnODg4ODg4ODg4ODg4ODg4OCcKK2RkYWRkNTQ0IGFkZCAnNTU1NTU1NTU1NTU1NTU1NScgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnOTk5OTk5OTk5OTk5OTk5OScKK2RkYWRkNTQ1IGFkZCAnMzAwMDAwNDAwMDAwMDAwMCcgICczMDAwMDAwMDAwMDAwMDQwJyAtPiAnNjAwMDAwNDAwMDAwMDA0MCcKK2RkYWRkNTQ2IGFkZCAnMzAwMDAwMDQwMDAwMDAwMCcgICc0MDAwMDAwMDAwMDAwNDAwJyAtPiAnNzAwMDAwMDQwMDAwMDQwMCcKK2RkYWRkNTQ3IGFkZCAnMzAwMDAwMDA0MDAwMDAwMCcgICc1MDAwMDAwMDAwMDA0MDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMCcKK2RkYWRkNTQ4IGFkZCAnNDAwMDAwMDAwNDAwMDAwMCcgICczMDAwMDAwMDAwMDQwMDAwJyAtPiAnNzAwMDAwMDAwNDA0MDAwMCcKK2RkYWRkNTQ5IGFkZCAnNDAwMDAwMDAwMDQwMDAwMCcgICc0MDAwMDAwMDAwNDAwMDAwJyAtPiAnODAwMDAwMDAwMDgwMDAwMCcKK2RkYWRkNTUwIGFkZCAnNDAwMDAwMDAwMDA0MDAwMCcgICc1MDAwMDAwMDA0MDAwMDAwJyAtPiAnOTAwMDAwMDAwNDA0MDAwMCcKK2RkYWRkNTUxIGFkZCAnNTAwMDAwMDAwMDAwNDAwMCcgICczMDAwMDAwMDQwMDAwMDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMCcKK2RkYWRkNTUyIGFkZCAnNTAwMDAwMDAwMDAwMDQwMCcgICc0MDAwMDAwNDAwMDAwMDAwJyAtPiAnOTAwMDAwMDQwMDAwMDQwMCcKK2RkYWRkNTUzIGFkZCAnNTAwMDAwMDAwMDAwMDA0MCcgICc1MDAwMDA0MDAwMDAwMDAwJyAtPiAxLjAwMDAwMDQwMDAwMDAwNEUrMTYgUm91bmRlZAorLS0gY2hlY2sgcHJvcGFnYXRpb24KK2RkYWRkNTU0IGFkZCAnODk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAxJyAtPiA5MDAwMDAwMDAwMDAwMDAwCitkZGFkZDU1NSBhZGQgJzAwMDAwMDAwMDAwMDAwMDEnICAnODk5OTk5OTk5OTk5OTk5OScgLT4gOTAwMDAwMDAwMDAwMDAwMAorZGRhZGQ1NTYgYWRkICcwOTk5OTk5OTk5OTk5OTk5JyAgJzAwMDAwMDAwMDAwMDAwMDEnIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2RkYWRkNTU3IGFkZCAnMDAwMDAwMDAwMDAwMDAwMScgICcwOTk5OTk5OTk5OTk5OTk5JyAtPiAxMDAwMDAwMDAwMDAwMDAwCitkZGFkZDU1OCBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDU1NTU1NTU1NTU1NTU1NicgLT4gOTAwMDAwMDAwMDAwMDAwMAorZGRhZGQ1NTkgYWRkICc0NTU1NTU1NTU1NTU1NTU2JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+IDkwMDAwMDAwMDAwMDAwMDAKKworLS0gbmVnYXRpdmUgdWxwcworZGRhZGQ2NDQwIGFkZCAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ0MSBhZGQgICAxICAgLTc3ZS0xNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDQyIGFkZCAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDQzIGFkZCAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ0NCBhZGQgICAxICAgLTc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NDUgYWRkICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NDYgYWRkICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNjQ1MCBhZGQgIDEwICAgLTc3ZS0xNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMworZGRhZGQ2NDUxIGFkZCAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDUyIGFkZCAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ1MyBhZGQgIDEwICAgLTc3ZS0xNyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NTQgYWRkICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NTUgYWRkICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NTYgYWRkICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNjQ2MCBhZGQgIC03N2UtMTQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NjEgYWRkICAtNzdlLTE1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ2MiBhZGQgIC03N2UtMTYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ2MyBhZGQgIC03N2UtMTcgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NjQgYWRkICAtNzdlLTE4ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDY1IGFkZCAgLTc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDY2IGFkZCAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY0NzAgYWRkICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ3MSBhZGQgIC03N2UtMTUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ3MiBhZGQgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NzMgYWRkICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDc0IGFkZCAgLTc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDc1IGFkZCAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDc2IGFkZCAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitkZGFkZDY0ODAgYWRkICAtMSAgICA3N2UtMTQgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ4MSBhZGQgIC0xICAgIDc3ZS0xNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ4MiBhZGQgIC0xICAgIDc3ZS0xNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0ODMgYWRkICAtMSAgICA3N2UtMTcgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ4NCBhZGQgIC0xICAgIDc3ZS0xOCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDg1IGFkZCAgLTEgICAgNzdlLTE5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ4NiBhZGQgIC0xICAgIDc3ZS05OSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNjQ5MCBhZGQgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ5MSBhZGQgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0OTIgYWRkIC0xMCAgICA3N2UtMTYgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ5MyBhZGQgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDk0IGFkZCAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ5NSBhZGQgLTEwICAgIDc3ZS0xOSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0OTYgYWRkIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY1MDAgYWRkICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKK2RkYWRkNjUwMSBhZGQgICA3N2UtMTUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjUwMiBhZGQgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCitkZGFkZDY1MDMgYWRkICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjUwNCBhZGQgICA3N2UtMTggICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTA1IGFkZCAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjUwNiBhZGQgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNjUxMCBhZGQgICA3N2UtMTQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKK2RkYWRkNjUxMSBhZGQgICA3N2UtMTUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY1MTIgYWRkICAgNzdlLTE2ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjUxMyBhZGQgICA3N2UtMTcgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTE0IGFkZCAgIDc3ZS0xOCAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjUxNSBhZGQgICA3N2UtMTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MTYgYWRkICAgNzdlLTk5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2RkYWRkNjU0MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCitkZGFkZDY1NDEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQ2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQ5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTUyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTU1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZGRhZGQ2NTU3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZGFkZDY1NjAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZGRhZGQ2NTYxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTY0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTY3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTcwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTczIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTc2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkYWRkNjU3NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTc4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RkYWRkNzU0MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTQxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NDIgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkYWRkNzU1MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCitkZGFkZDc1NTEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTUzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTU2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTU5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTYyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTY1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZGRhZGQ3NTY3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSB2ZXJpZnkgYSBxdWVyeQorcm91bmRpbmc6ICAgICBkb3duCitkZGFkZDc2NjEgYWRkIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc2NjIgYWRkICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAorZGRhZGQ3NjYzIGFkZCAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NjY0IGFkZCAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcm91bmRpbmc6IGhhbGZfZXZlbgorCitkZGFkZDc3MDEgYWRkIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCitkZGFkZDc3MDIgYWRkIDAwLjAwIDAuMDAwICAtPiAwLjAwMAorZGRhZGQ3NzAzIGFkZCAwMC4wMCAwRS0zICAgLT4gMC4wMDAKK2RkYWRkNzcwNCBhZGQgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2RkYWRkNzcxMCBhZGQgMEUrMyAgMDAuMDAgIC0+IDAuMDAKK2RkYWRkNzcxMSBhZGQgMEUrMyAgMDAuMCAgIC0+IDAuMAorZGRhZGQ3NzEyIGFkZCAwRSszICAwMC4gICAgLT4gMAorZGRhZGQ3NzEzIGFkZCAwRSszICAwMC5FKzEgLT4gMEUrMQorZGRhZGQ3NzE0IGFkZCAwRSszICAwMC5FKzIgLT4gMEUrMgorZGRhZGQ3NzE1IGFkZCAwRSszICAwMC5FKzMgLT4gMEUrMworZGRhZGQ3NzE2IGFkZCAwRSszICAwMC5FKzQgLT4gMEUrMworZGRhZGQ3NzE3IGFkZCAwRSszICAwMC5FKzUgLT4gMEUrMworZGRhZGQ3NzE4IGFkZCAwRSszICAtMDAuMCAgIC0+IDAuMAorZGRhZGQ3NzE5IGFkZCAwRSszICAtMDAuICAgIC0+IDAKK2RkYWRkNzczMSBhZGQgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCisKK2RkYWRkNzcyMCBhZGQgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2RkYWRkNzcyMSBhZGQgMDAuMCAgIDBFKzMgIC0+IDAuMAorZGRhZGQ3NzIyIGFkZCAwMC4gICAgMEUrMyAgLT4gMAorZGRhZGQ3NzIzIGFkZCAwMC5FKzEgMEUrMyAgLT4gMEUrMQorZGRhZGQ3NzI0IGFkZCAwMC5FKzIgMEUrMyAgLT4gMEUrMgorZGRhZGQ3NzI1IGFkZCAwMC5FKzMgMEUrMyAgLT4gMEUrMworZGRhZGQ3NzI2IGFkZCAwMC5FKzQgMEUrMyAgLT4gMEUrMworZGRhZGQ3NzI3IGFkZCAwMC5FKzUgMEUrMyAgLT4gMEUrMworZGRhZGQ3NzI4IGFkZCAtMDAuMDAgMEUrMyAgLT4gMC4wMAorZGRhZGQ3NzI5IGFkZCAtMDAuMCAgMEUrMyAgLT4gMC4wCitkZGFkZDc3MzAgYWRkIC0wMC4gICAwRSszICAtPiAwCisKK2RkYWRkNzczMiBhZGQgIDAgICAgIDAgICAgIC0+ICAwCitkZGFkZDc3MzMgYWRkICAwICAgIC0wICAgICAtPiAgMAorZGRhZGQ3NzM0IGFkZCAtMCAgICAgMCAgICAgLT4gIDAKK2RkYWRkNzczNSBhZGQgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UKKworZGRhZGQ3NzM2IGFkZCAgMSAgICAtMSAgICAgLT4gIDAKK2RkYWRkNzczNyBhZGQgLTEgICAgLTEgICAgIC0+IC0yCitkZGFkZDc3MzggYWRkICAxICAgICAxICAgICAtPiAgMgorZGRhZGQ3NzM5IGFkZCAtMSAgICAgMSAgICAgLT4gIDAKKworZGRhZGQ3NzQxIGFkZCAgMCAgICAtMSAgICAgLT4gLTEKK2RkYWRkNzc0MiBhZGQgLTAgICAgLTEgICAgIC0+IC0xCitkZGFkZDc3NDMgYWRkICAwICAgICAxICAgICAtPiAgMQorZGRhZGQ3NzQ0IGFkZCAtMCAgICAgMSAgICAgLT4gIDEKK2RkYWRkNzc0NSBhZGQgLTEgICAgIDAgICAgIC0+IC0xCitkZGFkZDc3NDYgYWRkIC0xICAgIC0wICAgICAtPiAtMQorZGRhZGQ3NzQ3IGFkZCAgMSAgICAgMCAgICAgLT4gIDEKK2RkYWRkNzc0OCBhZGQgIDEgICAgLTAgICAgIC0+ICAxCisKK2RkYWRkNzc1MSBhZGQgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2RkYWRkNzc1MiBhZGQgLTAuMCAgLTEgICAgIC0+IC0xLjAKK2RkYWRkNzc1MyBhZGQgIDAuMCAgIDEgICAgIC0+ICAxLjAKK2RkYWRkNzc1NCBhZGQgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2RkYWRkNzc1NSBhZGQgLTEuMCAgIDAgICAgIC0+IC0xLjAKK2RkYWRkNzc1NiBhZGQgLTEuMCAgLTAgICAgIC0+IC0xLjAKK2RkYWRkNzc1NyBhZGQgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2RkYWRkNzc1OCBhZGQgIDEuMCAgLTAgICAgIC0+ICAxLjAKKworZGRhZGQ3NzYxIGFkZCAgMCAgICAtMS4wICAgLT4gLTEuMAorZGRhZGQ3NzYyIGFkZCAtMCAgICAtMS4wICAgLT4gLTEuMAorZGRhZGQ3NzYzIGFkZCAgMCAgICAgMS4wICAgLT4gIDEuMAorZGRhZGQ3NzY0IGFkZCAtMCAgICAgMS4wICAgLT4gIDEuMAorZGRhZGQ3NzY1IGFkZCAtMSAgICAgMC4wICAgLT4gLTEuMAorZGRhZGQ3NzY2IGFkZCAtMSAgICAtMC4wICAgLT4gLTEuMAorZGRhZGQ3NzY3IGFkZCAgMSAgICAgMC4wICAgLT4gIDEuMAorZGRhZGQ3NzY4IGFkZCAgMSAgICAtMC4wICAgLT4gIDEuMAorCitkZGFkZDc3NzEgYWRkICAwLjAgIC0xLjAgICAtPiAtMS4wCitkZGFkZDc3NzIgYWRkIC0wLjAgIC0xLjAgICAtPiAtMS4wCitkZGFkZDc3NzMgYWRkICAwLjAgICAxLjAgICAtPiAgMS4wCitkZGFkZDc3NzQgYWRkIC0wLjAgICAxLjAgICAtPiAgMS4wCitkZGFkZDc3NzUgYWRkIC0xLjAgICAwLjAgICAtPiAtMS4wCitkZGFkZDc3NzYgYWRkIC0xLjAgIC0wLjAgICAtPiAtMS4wCitkZGFkZDc3NzcgYWRkICAxLjAgICAwLjAgICAtPiAgMS4wCitkZGFkZDc3NzggYWRkICAxLjAgIC0wLjAgICAtPiAgMS4wCisKKy0tIFNwZWNpYWxzCitkZGFkZDc3ODAgYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4MSBhZGQgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRhZGQ3NzgyIGFkZCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZGFkZDc3ODMgYWRkIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4NCBhZGQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRhZGQ3Nzg1IGFkZCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZGFkZDc3ODYgYWRkIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4NyBhZGQgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3Nzg4IGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3ODkgYWRkIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc5MCBhZGQgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3NzkxIGFkZCAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3OTIgYWRkICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc5MyBhZGQgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3Nzk0IGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZGRhZGQ3ODAwIGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzgwMSBhZGQgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODAyIGFkZCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkZGFkZDc4MDMgYWRkICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwNCBhZGQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODA1IGFkZCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkZGFkZDc4MDYgYWRkICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwNyBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODA4IGFkZCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZGFkZDc4MDkgYWRkIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODEwIGFkZCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGFkZDc4MTEgYWRkIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgxMiBhZGQgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODEzIGFkZCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGFkZDc4MTQgYWRkICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgxNSBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZGFkZDc4MjEgYWRkICBOYU4gLUluZiAgICAtPiAgTmFOCitkZGFkZDc4MjIgYWRkICBOYU4gLTEwMDAgICAtPiAgTmFOCitkZGFkZDc4MjMgYWRkICBOYU4gLTEgICAgICAtPiAgTmFOCitkZGFkZDc4MjQgYWRkICBOYU4gLTAgICAgICAtPiAgTmFOCitkZGFkZDc4MjUgYWRkICBOYU4gIDAgICAgICAtPiAgTmFOCitkZGFkZDc4MjYgYWRkICBOYU4gIDEgICAgICAtPiAgTmFOCitkZGFkZDc4MjcgYWRkICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZGFkZDc4MjggYWRkICBOYU4gIEluZiAgICAtPiAgTmFOCitkZGFkZDc4MjkgYWRkICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZGFkZDc4MzAgYWRkIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZGFkZDc4MzEgYWRkIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkZGFkZDc4MzIgYWRkIC0xICAgIE5hTiAgICAtPiAgTmFOCitkZGFkZDc4MzMgYWRkIC0wICAgIE5hTiAgICAtPiAgTmFOCitkZGFkZDc4MzQgYWRkICAwICAgIE5hTiAgICAtPiAgTmFOCitkZGFkZDc4MzUgYWRkICAxICAgIE5hTiAgICAtPiAgTmFOCitkZGFkZDc4MzYgYWRkICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZGFkZDc4MzcgYWRkICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RkYWRkNzg0MSBhZGQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDIgYWRkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQzIGFkZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0NCBhZGQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDUgYWRkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQ2IGFkZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0NyBhZGQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDggYWRkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQ5IGFkZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1MCBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTEgYWRkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODUyIGFkZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1MyBhZGQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTQgYWRkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODU1IGFkZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1NiBhZGQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTcgYWRkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODU4IGFkZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1OSBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkYWRkNzg2MSBhZGQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkZGFkZDc4NjIgYWRkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZGRhZGQ3ODYzIGFkZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2RkYWRkNzg2NCBhZGQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkZGFkZDc4NjUgYWRkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZGRhZGQ3ODY2IGFkZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2RkYWRkNzg2NyBhZGQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkZGFkZDc4NjggYWRkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZGRhZGQ3ODY5IGFkZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkZGFkZDc4NzEgYWRkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NzIgYWRkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NzMgYWRkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NzQgYWRkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NzUgYWRkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NzYgYWRkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NzcgYWRkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NzggYWRkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NzkgYWRkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4ODAgYWRkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4ODEgYWRkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4ODIgYWRkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2RkYWRkNzg4MyBhZGQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg4NCBhZGQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZGRhZGQ3ODg1IGFkZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBIZXJlIHdlIGV4cGxvcmUgbmVhciB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgorZGRhZGQ3NTc1IGFkZCAgMUUtMzgzIC0xRS0zOTggLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCitkZGFkZDc1NzYgYWRkIC0xRS0zODMgKzFFLTM5OCAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKKworLS0gYW5kIGFub3RoZXIgY3VyaW91cyBjYXNlCitkZGFkZDc1NzcgYWRkIDcuMDAwMDAwMDAwMDAwRS0zODUgLTEuMDAwMDBFLTM5MSAtPiA2Ljk5OTk5OTAwMDAwMEUtMzg1IFN1Ym5vcm1hbAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRhZGQ3OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkYWRkNzk3MyBhZGQgICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTc0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5NzUgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTc2IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk3NyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDhFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5NzggYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTc5IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNkUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4MCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDVFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5ODEgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5ODIgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAzRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5ODMgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAyRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5ODQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNzk4NSBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRhZGQ3OTg2IGFkZCAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTg3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTg4IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5ODkgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5MCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLThFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTkxIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtN0UrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTIgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5MyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTVFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTk0IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNEUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5NSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTYgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0yRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTk3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCityb3VuZGluZzogICAgIGRvd24KK2RkYWRkNzExMDAgYWRkIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMDEgYWRkIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTAzIGFkZCAgICsxIC0xZS0zODMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMDQgYWRkIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMDUgYWRkIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA2IGFkZCAxZS0zIC0xZS0zODMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMDcgYWRkIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMDggYWRkIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA5IGFkZCAxZS02IC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGNlaWxpbmcKK2RkYWRkNzExMTAgYWRkIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTExIGFkZCAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMTMgYWRkICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMTQgYWRkIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE1IGFkZCAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMTYgYWRkIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMTcgYWRkIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE4IGFkZCAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMTkgYWRkIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQorcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4KKworZGRhZGQ3MTMwMCBhZGQgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTAgYWRkIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzExIGFkZCAxRTE2ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxMiBhZGQgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTMgYWRkIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzE0IGFkZCAxRTE2ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxNSBhZGQgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTYgYWRkIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzE3IGFkZCAxRTE2ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxOCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTkgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzIwIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyMSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjIgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzIzIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyNCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjUgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzI2IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjggYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzI5IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzEgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzMyIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzQgYWRkIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzM1IGFkZCAxRTE2ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzNiBhZGQgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzcgYWRkIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzM4IGFkZCAxRTE2ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzOSBhZGQgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ3MTM0MCBhZGQgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNDEgYWRkIDFFMTYgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNzEzNDkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzUxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzU0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzU3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzYwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzYzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzY3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzcwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzc2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzc5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzgyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzg1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzg4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM5MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzkxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM5MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzk0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM5NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCitkZGFkZDcxNDIwIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0MjEgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0MjIgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDIzIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0MjQgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0MjUgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDI2IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0MjcgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZGRhZGQ3MTQyOCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CitkZGFkZDcxNDI5IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2RkYWRkNzE0MzAgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RkYWRkNzE0MzEgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2RkYWRkNzE0MzIgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RkYWRkNzE0MzMgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RkYWRkNzE0MzQgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2RkYWRkNzE0MzUgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RkYWRkNzE0MzYgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RkYWRkNzE0MzcgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2RkYWRkNzE0MzggYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RkYWRkNzE0MzkgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorZGRhZGQ3MTQ0MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ0MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ0MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ0NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ0NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03CitkZGFkZDcxNDQ4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZGRhZGQ3MTQ0OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2RkYWRkNzE0NTAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZGRhZGQ3MTQ1MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitkZGFkZDcxNDUyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RkYWRkNzE0NTMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMworZGRhZGQ3MTQ1NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitkZGFkZDcxNDU1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RkYWRkNzE0NTYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZGRhZGQ3MTQ1NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitkZGFkZDcxNDU4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RkYWRkNzE0NTkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCBFcyBvbiB0aGUgMAorZGRhZGQ3MTQ2MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ2MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ2MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ2MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ2NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ2NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ2NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ2NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ2OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ2OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ3MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ3MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ3MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ3MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ3NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ3NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorZGRhZGQ3MTQ3NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkZGFkZDcxNDc3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RkYWRkNzE0NzggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZGRhZGQ3MTQ3OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCisKKy0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCityb3VuZGluZzogICAgaGFsZl91cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRhZGQ3MTUwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTUwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGFkZDcxNTExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZGRhZGQ3MTUxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRhZGQ3MTUyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTUyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGFkZDcxNTMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZGRhZGQ3MTUzMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRhZGQ3MTU0MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1NDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTQyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU0MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGFkZDcxNTUxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZGRhZGQ3MTU1MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIHVwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGFkZDcxNTYwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU2MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1NjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTYzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkYWRkNzE1NzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGFkZDcxNTcyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRhZGQ3MTU4MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1ODEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTgyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU4MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGFkZDcxNTkxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZGRhZGQ3MTU5MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE2MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNjAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTYwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE2MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTYxMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE2MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKKy0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgorcm91bmRpbmc6ICAgIGZsb29yCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGFkZDcxNjIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTYyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RkYWRkNzE2MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitkZGFkZDcxNjIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkYWRkNzE2MzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCitkZGFkZDcxNjMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2RkYWRkNzE3MDEgYWRkIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAorZGRhZGQ3MTcwMiBhZGQgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCitkZGFkZDcxNzAzIGFkZCAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2RkYWRkNzE3MDQgYWRkIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAorZGRhZGQ3MTcwNSBhZGQgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwCitkZGFkZDcxNzA2IGFkZCAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTAKK2RkYWRkNzE3MDcgYWRkIDEzMEUtMiAgIC0xRTAgICAgLT4gMC4zMAorZGRhZGQ3MTcwOCBhZGQgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszCisKKy0tIHF1ZXJ5IGZyb20gVmluY2VudCBLdWxhbmRhaXNhbXkKK3JvdW5kaW5nOiBjZWlsaW5nCitkZGFkZDcxODAxICBhZGQgIDcuODgyMjc3MzgwNTg2MkUrMjc3ICAgIC01LjE3NTc1MDM4MjA2NjNFLTIxIC0+IDcuODgyMjc3MzgwNTg2MjAwRSsyNzcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxODAyICBhZGQgIDcuODgyMjc3MzgwNTg2MjAwRSsyNzcgIDEyLjM0MSAgICAgICAgICAgICAgIC0+IDcuODgyMjc3MzgwNTg2MjAxRSsyNzcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxODAzICBhZGQgIDcuODgyMjc3MzgwNTg2MjAxRSsyNzcgIDIuNzI3MDU0NTA0NjYxM0UtMzEgIC0+IDcuODgyMjc3MzgwNTg2MjAyRSsyNzcgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNzE4MTEgIGFkZCAgICAgICAgICAgICAgICAgICAxMi4zNDEgLTUuMTc1NzUwMzgyMDY2M0UtMjEgLT4gMTIuMzQxMDAwMDAwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzE4MTIgIGFkZCAgICAgICAgMTIuMzQxMDAwMDAwMDAwMDAgMi43MjcwNTQ1MDQ2NjEzRS0zMSAgLT4gMTIuMzQxMDAwMDAwMDAwMDEgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzE4MTMgIGFkZCAgICAgICAgMTIuMzQxMDAwMDAwMDAwMDEgNy44ODIyNzczODA1ODYyRSsyNzcgLT4gNy44ODIyNzczODA1ODYyMDFFKzI3NyBJbmV4YWN0IFJvdW5kZWQKKworLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcAorcm91bmRpbmc6IGhhbGZfZXZlbgorCitkZGFkZDc1MDAxIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3CitkZGFkZDc1MDAyIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMDMgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAwNCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDA1IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMDYgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAwNyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDA4IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMDkgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxMCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDExIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTIgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxMyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDE0IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTUgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxNiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDE3IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTggYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxOSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDIwIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMjEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorCistLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwCitkZGFkZDc1MDMwIGFkZCAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQorZGRhZGQ3NTAzMSBhZGQgMTIzNDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMQorZGRhZGQ3NTAzMiBhZGQgMTIzNDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIKK2RkYWRkNzUwMzMgYWRkIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMworZGRhZGQ3NTAzNCBhZGQgMTIzNDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNAorZGRhZGQ3NTAzNSBhZGQgMTIzNDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDUKK2RkYWRkNzUwMzYgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NgorZGRhZGQ3NTAzNyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NworZGRhZGQ3NTAzOCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzgKK2RkYWRkNzUwMzkgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0MCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQxIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDIgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0MyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQ0IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDUgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0NiBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQ3IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDggYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0OSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngorcm91bmRpbmc6IGhhbGZfZXZlbgorZGRhZGQ3NTA1MCBhZGQgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDUxIGFkZCAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNTIgYWRkIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1MyBhZGQgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDU0IGFkZCAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNTUgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1NiBhZGQgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDU3IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjAgYWRkIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2MSBhZGQgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDYyIGFkZCAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjMgYWRkIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2NCBhZGQgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDY1IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjYgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2NyBhZGQgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCistLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpCityb3VuZGluZzogdXAKK2RkYWRkNzUwNzAgYWRkIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxCitkZGFkZDc1MDcxIGFkZCAxMjM0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzIgYWRkIDEyMzQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3MyBhZGQgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDc0IGFkZCAxMjM0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzUgYWRkIDEyMzQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3NiBhZGQgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDc3IGFkZCAxMjM0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzggYWRkIDEyMzQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3OSBhZGQgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDgwIGFkZCAxMjM0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODEgYWRkIDEyMzQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4MiBhZGQgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDgzIGFkZCAxMjM0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODQgYWRkIDEyMzQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4NSBhZGQgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDg2IGFkZCAxMjM0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODcgYWRkIDEyMzQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4OCBhZGQgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDg5IGFkZCAxMjM0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gUHVuaXQncworZGRhZGQ3NTEwMCBhZGQgMS4wMDAgLTIwMC4wMDAgICAgICAgICAgICAgICAgICAgLT4gLTE5OS4wMDAKKworLS0gUm91bmRpbmcgc3dhdGhlCityb3VuZGluZzogaGFsZl9ldmVuCitkZGFkZDgxMTAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxMTAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2RkYWRkODEyMDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKK2RkYWRkODEyMDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2RkYWRkODEzMDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKK2RkYWRkODEzMDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiB1cAorZGRhZGQ4MTQwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAorZGRhZGQ4MTQwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRhZGQ4MTUwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAorZGRhZGQ4MTUwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKK2RkYWRkODE2MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKK2RkYWRkODE2MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZmxvb3IKK2RkYWRkODE3MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKK2RkYWRkODE3MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogMDV1cAorZGRhZGQ4MTgwMCBhZGQgIC4yMDAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMCAgUm91bmRlZAorZGRhZGQ4MTgwMSBhZGQgIC4yMDAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODAyIGFkZCAgLjIwMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MDMgYWRkICAuMjA1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgwNCBhZGQgIC4yMDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODA3IGFkZCAgLjIwNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MDggYWRkICAuMjA3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgwOSBhZGQgIC4yMDk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODExIGFkZCAtLjIwOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDgxOTAwIGFkZCAgLjIxMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBSb3VuZGVkCitkZGFkZDgxOTAxIGFkZCAgLjIxMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE5MDIgYWRkICAuMjExMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTkwMyBhZGQgIC4yMTUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTA0IGFkZCAgLjIxNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE5MDcgYWRkICAuMjE2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTkwOCBhZGQgIC4yMTcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTA5IGFkZCAgLjIxOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE5MTEgYWRkIC0uMjE5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDgyMDAwIGFkZCAgLjI0MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBSb3VuZGVkCitkZGFkZDgyMDAxIGFkZCAgLjI0MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIwMDIgYWRkICAuMjQxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjAwMyBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDA0IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIwMDcgYWRkICAuMjQ2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjAwOCBhZGQgIC4yNDcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDA5IGFkZCAgLjI0OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIwMTEgYWRkIC0uMjQ5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDgyMTAwIGFkZCAgLjI1MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBSb3VuZGVkCitkZGFkZDgyMTAxIGFkZCAgLjI1MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIxMDIgYWRkICAuMjUxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjEwMyBhZGQgIC4yNTUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTA0IGFkZCAgLjI1NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIxMDcgYWRkICAuMjU2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjEwOCBhZGQgIC4yNTcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTA5IGFkZCAgLjI1OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIxMTEgYWRkIC0uMjU5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDgyMjAwIGFkZCAgLjI2MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBSb3VuZGVkCitkZGFkZDgyMjAxIGFkZCAgLjI2MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIyMDIgYWRkICAuMjYxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjIwMyBhZGQgIC4yNjUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjA0IGFkZCAgLjI2NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIyMDcgYWRkICAuMjY2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjIwOCBhZGQgIC4yNjcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjA5IGFkZCAgLjI2OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIyMTEgYWRkIC0uMjY5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDgyMzAwIGFkZCAgLjI5MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBSb3VuZGVkCitkZGFkZDgyMzAxIGFkZCAgLjI5MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIzMDIgYWRkICAuMjkxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjMwMyBhZGQgIC4yOTUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzA0IGFkZCAgLjI5NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIzMDcgYWRkICAuMjk2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjMwOCBhZGQgIC4yOTcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzA5IGFkZCAgLjI5OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIzMTEgYWRkIC0uMjk5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCitkZGFkZDk5OTAgYWRkIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ5OTkxIGFkZCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBbmQuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBbmQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGE5ZjkyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFuZC5kZWNUZXN0CkBAIC0wLDAgKzEsMzQ3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQW5kLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgQU5EIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkZGFuZDAwMSBhbmQgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2RkYW5kMDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMAorZGRhbmQwMDMgYW5kICAgICAgICAgICAgIDEgICAgMCAtPiAgICAwCitkZGFuZDAwNCBhbmQgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK2RkYW5kMDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKKy0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGFuZDAwNiBhbmQgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZGRhbmQwMDcgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RkYW5kMDA4IGFuZCAxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkZGFuZDAwOSBhbmQgMTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGRhbmQwMTAgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RkYW5kMDExIGFuZCAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkZGFuZDAxMiBhbmQgMDEwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZGRhbmQwMTMgYW5kIDAxMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRhbmQwMjEgYW5kIDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTEKK2RkYW5kMDI0IGFuZCAxMTExMTExMTExMTExMTExICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExCitkZGFuZDAyNSBhbmQgMTExMTExMTExMTExMTExMSAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQorZGRhbmQwMjYgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTEKK2RkYW5kMDI3IGFuZCAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExCitkZGFuZDAyOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQorZGRhbmQwMjkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTEKK2RkYW5kMDMwIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExCitkZGFuZDAzMSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQorZGRhbmQwMzIgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTEKK2RkYW5kMDMzIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExCitkZGFuZDAzNCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQorZGRhbmQwMzUgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTEKK2RkYW5kMDM2IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExCitkZGFuZDAzNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQorZGRhbmQwMzggYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDEKK2RkYW5kMDM5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwCisKK2RkYW5kMDQwIGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gIDExMTExMTExMTExMTExMTEKK2RkYW5kMDQxIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTEKK2RkYW5kMDQyIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTEKK2RkYW5kMDQzIGFuZCAgIDExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgMTExMTExMTExMTExMTEKK2RkYW5kMDQ0IGFuZCAgICAxMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgIDExMTExMTExMTExMTEKK2RkYW5kMDQ1IGFuZCAgICAgMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAxMTExMTExMTExMTEKK2RkYW5kMDQ2IGFuZCAgICAgIDExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgMTExMTExMTExMTEKK2RkYW5kMDQ3IGFuZCAgICAgICAxMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgIDExMTExMTExMTEKK2RkYW5kMDQ4IGFuZCAgICAgICAgMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAxMTExMTExMTEKK2RkYW5kMDQ5IGFuZCAgICAgICAgIDExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgMTExMTExMTEKK2RkYW5kMDUwIGFuZCAgICAgICAgICAxMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgIDExMTExMTEKK2RkYW5kMDUxIGFuZCAgICAgICAgICAgMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAxMTExMTEKK2RkYW5kMDUyIGFuZCAgICAgICAgICAgIDExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgMTExMTEKK2RkYW5kMDUzIGFuZCAgICAgICAgICAgICAxMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgIDExMTEKK2RkYW5kMDU0IGFuZCAgICAgICAgICAgICAgMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAxMTEKK2RkYW5kMDU1IGFuZCAgICAgICAgICAgICAgIDExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgMTEKK2RkYW5kMDU2IGFuZCAgICAgICAgICAgICAgICAxICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDEKK2RkYW5kMDU3IGFuZCAgICAgICAgICAgICAgICAwICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDAKKworZGRhbmQxNTAgYW5kIDExMTExMTExMTEgIDEgIC0+ICAxCitkZGFuZDE1MSBhbmQgIDExMTExMTExMSAgMSAgLT4gIDEKK2RkYW5kMTUyIGFuZCAgIDExMTExMTExICAxICAtPiAgMQorZGRhbmQxNTMgYW5kICAgIDExMTExMTEgIDEgIC0+ICAxCitkZGFuZDE1NCBhbmQgICAgIDExMTExMSAgMSAgLT4gIDEKK2RkYW5kMTU1IGFuZCAgICAgIDExMTExICAxICAtPiAgMQorZGRhbmQxNTYgYW5kICAgICAgIDExMTEgIDEgIC0+ICAxCitkZGFuZDE1NyBhbmQgICAgICAgIDExMSAgMSAgLT4gIDEKK2RkYW5kMTU4IGFuZCAgICAgICAgIDExICAxICAtPiAgMQorZGRhbmQxNTkgYW5kICAgICAgICAgIDEgIDEgIC0+ICAxCisKK2RkYW5kMTYwIGFuZCAxMTExMTExMTExICAwICAtPiAgMAorZGRhbmQxNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwCitkZGFuZDE2MiBhbmQgICAxMTExMTExMSAgMCAgLT4gIDAKK2RkYW5kMTYzIGFuZCAgICAxMTExMTExICAwICAtPiAgMAorZGRhbmQxNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwCitkZGFuZDE2NSBhbmQgICAgICAxMTExMSAgMCAgLT4gIDAKK2RkYW5kMTY2IGFuZCAgICAgICAxMTExICAwICAtPiAgMAorZGRhbmQxNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwCitkZGFuZDE2OCBhbmQgICAgICAgICAxMSAgMCAgLT4gIDAKK2RkYW5kMTY5IGFuZCAgICAgICAgICAxICAwICAtPiAgMAorCitkZGFuZDE3MCBhbmQgMSAgMTExMTExMTExMSAgLT4gIDEKK2RkYW5kMTcxIGFuZCAxICAgMTExMTExMTExICAtPiAgMQorZGRhbmQxNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxCitkZGFuZDE3MyBhbmQgMSAgICAgMTExMTExMSAgLT4gIDEKK2RkYW5kMTc0IGFuZCAxICAgICAgMTExMTExICAtPiAgMQorZGRhbmQxNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxCitkZGFuZDE3NiBhbmQgMSAgICAgICAgMTExMSAgLT4gIDEKK2RkYW5kMTc3IGFuZCAxICAgICAgICAgMTExICAtPiAgMQorZGRhbmQxNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxCitkZGFuZDE3OSBhbmQgMSAgICAgICAgICAgMSAgLT4gIDEKKworZGRhbmQxODAgYW5kIDAgIDExMTExMTExMTEgIC0+ICAwCitkZGFuZDE4MSBhbmQgMCAgIDExMTExMTExMSAgLT4gIDAKK2RkYW5kMTgyIGFuZCAwICAgIDExMTExMTExICAtPiAgMAorZGRhbmQxODMgYW5kIDAgICAgIDExMTExMTEgIC0+ICAwCitkZGFuZDE4NCBhbmQgMCAgICAgIDExMTExMSAgLT4gIDAKK2RkYW5kMTg1IGFuZCAwICAgICAgIDExMTExICAtPiAgMAorZGRhbmQxODYgYW5kIDAgICAgICAgIDExMTEgIC0+ICAwCitkZGFuZDE4NyBhbmQgMCAgICAgICAgIDExMSAgLT4gIDAKK2RkYW5kMTg4IGFuZCAwICAgICAgICAgIDExICAtPiAgMAorZGRhbmQxODkgYW5kIDAgICAgICAgICAgIDEgIC0+ICAwCisKK2RkYW5kMDkwIGFuZCAwMTExMTExMTEgIDExMTExMTExMSAgLT4gICAxMTExMTExMQorZGRhbmQwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExCitkZGFuZDA5MiBhbmQgMTEwMTExMTExICAxMTExMTExMTEgIC0+ICAxMTAxMTExMTEKK2RkYW5kMDkzIGFuZCAxMTEwMTExMTEgIDExMTExMTExMSAgLT4gIDExMTAxMTExMQorZGRhbmQwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExCitkZGFuZDA5NSBhbmQgMTExMTEwMTExICAxMTExMTExMTEgIC0+ICAxMTExMTAxMTEKK2RkYW5kMDk2IGFuZCAxMTExMTEwMTEgIDExMTExMTExMSAgLT4gIDExMTExMTAxMQorZGRhbmQwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxCitkZGFuZDA5OCBhbmQgMTExMTExMTEwICAxMTExMTExMTEgIC0+ICAxMTExMTExMTAKKworZGRhbmQxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExCitkZGFuZDEwMSBhbmQgMTExMTExMTExICAxMDExMTExMTEgIC0+ICAxMDExMTExMTEKK2RkYW5kMTAyIGFuZCAxMTExMTExMTEgIDExMDExMTExMSAgLT4gIDExMDExMTExMQorZGRhbmQxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExCitkZGFuZDEwNCBhbmQgMTExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2RkYW5kMTA1IGFuZCAxMTExMTExMTEgIDExMTExMDExMSAgLT4gIDExMTExMDExMQorZGRhbmQxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExCitkZGFuZDEwNyBhbmQgMTExMTExMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMDEKK2RkYW5kMTA4IGFuZCAxMTExMTExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMAorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RkYW5kMjIwIGFuZCAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyMiBhbmQgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjIzIGFuZCA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyNSBhbmQgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjI2IGFuZCA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyOCBhbmQgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjI5IGFuZCA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIzMSBhbmQgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjMyIGFuZCA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZGRhbmQyNDAgYW5kICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI0MSBhbmQgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNDMgYW5kIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI0NCBhbmQgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkZGFuZDI1MCBhbmQgIDIwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1MSBhbmQgIDcwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1MiBhbmQgIDgwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1MyBhbmQgIDkwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1NCBhbmQgIDIwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1NSBhbmQgIDcwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1NiBhbmQgIDgwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1NyBhbmQgIDkwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1OCBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1OSBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2MCBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2MSBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2MiBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2MyBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2NCBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2NSBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkZGFuZDI3MCBhbmQgIDAyMDAwMDEwMDAwMDAwMDAgMTAwMDEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3MSBhbmQgIDA3MDAwMDAxMDAwMDAwMDAgMTAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3MiBhbmQgIDA4MDAwMDAwMTAwMDAwMDAgMTAwMDAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3MyBhbmQgIDA5MDAwMDAwMDEwMDAwMDAgMTAwMDAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3NCBhbmQgIDEwMDAwMDAwMDAxMDAwMDAgMDIwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3NSBhbmQgIDEwMDAwMDAwMDAwMTAwMDAgMDcwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3NiBhbmQgIDEwMDAwMDAwMDAwMDEwMDAgMDgwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3NyBhbmQgIDEwMDAwMDAwMDAwMDAxMDAgMDkwMDAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZGRhbmQyODAgYW5kICAwMDEwMDAwMDAwMDAwMDAyIDEwMDAwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODEgYW5kICAwMDAxMDAwMDAwMDAwMDA3IDEwMDAwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODIgYW5kICAwMDAwMTAwMDAwMDAwMDA4IDEwMDAwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODMgYW5kICAwMDAwMDEwMDAwMDAwMDA5IDEwMDAxMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODQgYW5kICAxMDAwMDAxMDAwMDAwMDAwIDAwMDEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODUgYW5kICAxMDAwMDAwMTAwMDAwMDAwIDAwMTAwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODYgYW5kICAxMDAwMDAwMDEwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODcgYW5kICAxMDAwMDAwMDAxMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RkYW5kMjg4IGFuZCAgMDAxMDAwMDAyMDAwMDAwMCAxMDAwMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjg5IGFuZCAgMDAwMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjkwIGFuZCAgMDAwMDEwMDA4MDAwMDAxMCAxMDAwMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjkxIGFuZCAgMDAwMDAxMDA5MDAwMDEwMCAxMDAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjkyIGFuZCAgMTAwMDAwMTAwMDAwMTAwMCAwMDAwMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjkzIGFuZCAgMTAwMDAwMDEwMDAxMDAwMCAwMDAwMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjk0IGFuZCAgMTAwMDAwMDAxMDEwMDAwMCAwMDAwMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjk1IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAwMDAwMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkZGFuZDI5NiBhbmQgLTEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTcgYW5kIC0xMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjk4IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5OSBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZGRhbmQzMzEgYW5kICAyICAgOS45OTk5OTk5OUUrMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzMyIGFuZCAgMyAgIDFFLTE5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDMzMyBhbmQgIDQgICAxLjAwMDAwMDAwRS0xOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzMzQgYW5kICA1ICAgMUUtMTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzM1IGFuZCAgNiAgIC0xRS0xMDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDMzNiBhbmQgIDcgICAtMS4wMDAwMDAwMEUtMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzMzcgYW5kICA4ICAgLTFFLTE5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzM4IGFuZCAgOSAgIC05Ljk5OTk5OTk5RSsxOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0MSBhbmQgIDkuOTk5OTk5OTlFKzE5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDIgYW5kICAxRS0xOTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQzIGFuZCAgMS4wMDAwMDAwMEUtMTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0NCBhbmQgIDFFLTEwMCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDUgYW5kICAtMUUtMTAwICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQ2IGFuZCAgLTEuMDAwMDAwMDBFLTE5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0NyBhbmQgIC0xRS0xOTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDggYW5kICAtOS45OTk5OTk5OUUrMTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkZGFuZDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNjIgYW5kICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzYzIGFuZCAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNjUgYW5kICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzY2IGFuZCAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNzIgYW5kICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzczIGFuZCAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNzUgYW5kICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzc2IGFuZCAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2RkYW5kNzgwIGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODIgYW5kIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzgzIGFuZCAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODUgYW5kIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzg2IGFuZCAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODggYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzg5IGFuZCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3OTEgYW5kICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzkyIGFuZCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3OTQgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRhbmQ4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODAxIGFuZCAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwMiBhbmQgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODA0IGFuZCAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwNSBhbmQgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODA3IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwOCBhbmQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODEwIGFuZCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgxMSBhbmQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODEzIGFuZCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgxNCBhbmQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRhbmQ4MjEgYW5kICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODIyIGFuZCAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyMyBhbmQgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjQgYW5kICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODI1IGFuZCAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyNiBhbmQgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjcgYW5kICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODI4IGFuZCAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyOSBhbmQgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzAgYW5kIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODMxIGFuZCAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzMiBhbmQgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzMgYW5kIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODM0IGFuZCAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzNSBhbmQgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzYgYW5kICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODM3IGFuZCAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkYW5kODQxIGFuZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQzIGFuZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ0IGFuZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ2IGFuZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ3IGFuZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ5IGFuZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODUwIGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODUyIGFuZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODUzIGFuZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU1IGFuZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU2IGFuZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU4IGFuZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU5IGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRhbmQ4NjEgYW5kICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODYyIGFuZCArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2MyBhbmQgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjQgYW5kICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODY1IGFuZCAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2NiBhbmQgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjcgYW5kIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODY4IGFuZCAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2OSBhbmQgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzEgYW5kICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODcyIGFuZCAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3MyBhbmQgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzQgYW5kICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODc1IGFuZCAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3NiBhbmQgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzcgYW5kIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODc4IGFuZCAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3OSBhbmQgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4ODAgYW5kICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODgxIGFuZCArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg4MiBhbmQgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4ODMgYW5kIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODg0IGFuZCAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg4NSBhbmQgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEJhc2UuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRCYXNlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmZWJmOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRCYXNlLmRlY1Rlc3QKQEAgLTAsMCArMSwxMTA0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQmFzZS5kZWNUZXN0IC0tIGJhc2UgZGVjRG91YmxlIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcgorLS0gYW5kIGJhY2sgdG8gYSBzdHJpbmcgKGluIFNjaWVudGlmaWMgZm9ybSkKKworLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcKKy0tIHRvIGNvbmZvcm0gdG8gZW1heCBhbmQgcHJlY2lzaW9uIHNldHRpbmdzICh0aGF0IGlzLCBudW1iZXJzIHdpbGwKKy0tIGNvbmZvcm0gdG8gcnVsZXMgYW5kIGV4cG9uZW50IHdpbGwgYmUgaW4gcGVybWl0dGVkIHJhbmdlKS4gIFRoZQorLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlCistLSByZXByZXNlbnRlZCBpbiBhIGRlY0RvdWJsZS4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUKKy0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8KKy0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLgorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwCitkZGJhczAwMiB0b1NjaSAgICAgICAxIC0+IDEKK2RkYmFzMDAzIHRvU2NpICAgICAxLjAgLT4gMS4wCitkZGJhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDAKK2RkYmFzMDA1IHRvU2NpICAgICAgMTAgLT4gMTAKK2RkYmFzMDA2IHRvU2NpICAgIDEwMDAgLT4gMTAwMAorZGRiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wCitkZGJhczAwOCB0b1NjaSAgICAxMC4xIC0+IDEwLjEKK2RkYmFzMDA5IHRvU2NpICAgIDEwLjQgLT4gMTAuNAorZGRiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41CitkZGJhczAxMSB0b1NjaSAgICAxMC42IC0+IDEwLjYKK2RkYmFzMDEyIHRvU2NpICAgIDEwLjkgLT4gMTAuOQorZGRiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wCitkZGJhczAxNCB0b1NjaSAgMS4yMzQgLT4gMS4yMzQKK2RkYmFzMDE1IHRvU2NpICAwLjEyMyAtPiAwLjEyMworZGRiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyCitkZGJhczAxNyB0b1NjaSAgLTAgICAgLT4gLTAKK2RkYmFzMDE4IHRvU2NpICAtMC4wICAtPiAtMC4wCitkZGJhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDAKKworZGRiYXMwMjEgdG9TY2kgICAgIC0xIC0+IC0xCitkZGJhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMAorZGRiYXMwMjMgdG9TY2kgICAtMC4xIC0+IC0wLjEKK2RkYmFzMDI0IHRvU2NpICAgLTkuMSAtPiAtOS4xCitkZGJhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExCitkZGJhczAyNiB0b1NjaSAgIC05LjExOSAtPiAtOS4xMTkKK2RkYmFzMDI3IHRvU2NpICAgLTkuOTk5IC0+IC05Ljk5OQorCitkZGJhczAzMCB0b1NjaSAgJzEyMzQ1Njc4OS4xMjM0NTYnICAgLT4gJzEyMzQ1Njc4OS4xMjM0NTYnCitkZGJhczAzMSB0b1NjaSAgJzEyMzQ1Njc4OS4wMDAwMDAnICAgLT4gJzEyMzQ1Njc4OS4wMDAwMDAnCitkZGJhczAzMiB0b1NjaSAgICcxMjM0NTY3ODkxMjM0NTYnICAgLT4gJzEyMzQ1Njc4OTEyMzQ1NicKK2RkYmFzMDMzIHRvU2NpICAgJzAuMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMTIzNDU2Nzg5JworZGRiYXMwMzQgdG9TY2kgICcwLjAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAwMTIzNDU2Nzg5JworZGRiYXMwMzUgdG9TY2kgJzAuMDAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcxLjIzNDU2Nzg5RS03JworZGRiYXMwMzYgdG9TY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OScgIC0+ICcxLjIzNDU2Nzg5RS04JworCitkZGJhczAzNyB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDQnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ0JworZGRiYXMwMzggdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NScKKworLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkKK2RkYnNuMDAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGJzbjAwMiB0b1NjaSAtMUUtMzgzIC0+IC0xRS0zODMKK2RkYnNuMDAzIHRvU2NpIC0xRS0zOTggLT4gLTFFLTM5OCBTdWJub3JtYWwKK2RkYnNuMDA0IHRvU2NpIC0wIC0+IC0wCitkZGJzbjAwNSB0b1NjaSArMCAtPiAgMAorZGRic24wMDYgdG9TY2kgKzFFLTM5OCAtPiAgMUUtMzk4IFN1Ym5vcm1hbAorZGRic24wMDcgdG9TY2kgKzFFLTM4MyAtPiAgMUUtMzgzCitkZGJzbjAwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorCistLSBTdHJpbmcgW21hbnkgbW9yZSBleGFtcGxlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgZWxzZXdoZXJlXQorLS0gc3RyaW5ncyB3aXRob3V0IEUgY2Fubm90IGdlbmVyYXRlIEUgaW4gcmVzdWx0CitkZGJhczA0MCB0b1NjaSAiMTIiICAgICAgICAtPiAnMTInCitkZGJhczA0MSB0b1NjaSAiLTc2IiAgICAgICAtPiAnLTc2JworZGRiYXMwNDIgdG9TY2kgIjEyLjc2IiAgICAgLT4gJzEyLjc2JworZGRiYXMwNDMgdG9TY2kgIisxMi43NiIgICAgLT4gJzEyLjc2JworZGRiYXMwNDQgdG9TY2kgIjAxMi43NiIgICAgLT4gJzEyLjc2JworZGRiYXMwNDUgdG9TY2kgIiswLjAwMyIgICAgLT4gJzAuMDAzJworZGRiYXMwNDYgdG9TY2kgIjE3LiIgICAgICAgLT4gJzE3JworZGRiYXMwNDcgdG9TY2kgIi41IiAgICAgICAgLT4gJzAuNScKK2RkYmFzMDQ4IHRvU2NpICIwNDQiICAgICAgIC0+ICc0NCcKK2RkYmFzMDQ5IHRvU2NpICIwMDQ0IiAgICAgIC0+ICc0NCcKK2RkYmFzMDUwIHRvU2NpICIwLjAwMDUiICAgICAgLT4gJzAuMDAwNScKK2RkYmFzMDUxIHRvU2NpICIwMC4wMDAwNSIgICAgLT4gJzAuMDAwMDUnCitkZGJhczA1MiB0b1NjaSAiMC4wMDAwMDUiICAgIC0+ICcwLjAwMDAwNScKK2RkYmFzMDUzIHRvU2NpICIwLjAwMDAwNTAiICAgLT4gJzAuMDAwMDA1MCcKK2RkYmFzMDU0IHRvU2NpICIwLjAwMDAwMDUiICAgLT4gJzVFLTcnCitkZGJhczA1NSB0b1NjaSAiMC4wMDAwMDAwNSIgIC0+ICc1RS04JworZGRiYXMwNTYgdG9TY2kgIjEyMzQ1Njc4LjU0MzIxMCIgLT4gJzEyMzQ1Njc4LjU0MzIxMCcKK2RkYmFzMDU3IHRvU2NpICIyMzQ1Njc4LjU0MzIxMCIgLT4gJzIzNDU2NzguNTQzMjEwJworZGRiYXMwNTggdG9TY2kgIjM0NTY3OC41NDMyMTAiIC0+ICczNDU2NzguNTQzMjEwJworZGRiYXMwNTkgdG9TY2kgIjAzNDU2NzguNTQzMjEiIC0+ICczNDU2NzguNTQzMjEnCitkZGJhczA2MCB0b1NjaSAiMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RkYmFzMDYxIHRvU2NpICIrMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RkYmFzMDYyIHRvU2NpICIrMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkZGJhczA2MyB0b1NjaSAiKzAwMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RkYmFzMDY0IHRvU2NpICItMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworZGRiYXMwNjUgdG9TY2kgIi0wMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworZGRiYXMwNjYgdG9TY2kgIi0wMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKKy0tIGV4YW1wbGVzCitkZGJhczA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScKK2RkYmFzMDY4IHRvU2NpICI1MEUtNyIgICAgICAgLT4gJzAuMDAwMDA1MCcKK2RkYmFzMDY5IHRvU2NpICI1RS03IiAgICAgICAgLT4gJzVFLTcnCisKKy0tIFtObyBleG90aWNzIGFzIG5vIFVuaWNvZGVdCisKKy0tIHJvdW5kZWQgd2l0aCBkb3RzIGluIGFsbCAoaW5jbHVkaW5nIGVkZ2UpIHBsYWNlcworZGRiYXMwNzEgdG9TY2kgIC4xMjM0NTY3ODkwMTIzNDU2MTIzICAtPiAwLjEyMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3MiB0b1NjaSAgMS4yMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkwMTIzNDU2MTIzICAtPiAxMi4zNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDc0IHRvU2NpICAxMjMuNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzLjQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3NSB0b1NjaSAgMTIzNC41Njc4OTAxMjM0NTYxMjMgIC0+IDEyMzQuNTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkwMTIzNDU2MTIzICAtPiAxMjM0NS42Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDc3IHRvU2NpICAxMjM0NTYuNzg5MDEyMzQ1NjEyMyAgLT4gMTIzNDU2Ljc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3OCB0b1NjaSAgMTIzNDU2Ny44OTAxMjM0NTYxMjMgIC0+IDEyMzQ1NjcuODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkwMTIzNDU2MTIzICAtPiAxMjM0NTY3OC45MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDgwIHRvU2NpICAxMjM0NTY3ODkuMDEyMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5LjAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4MSB0b1NjaSAgMTIzNDU2Nzg5MC4xMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAuMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTAxLjIzNDU2MTIzICAtPiAxMjM0NTY3ODkwMS4yMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDgzIHRvU2NpICAxMjM0NTY3ODkwMTIuMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEyLjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4NCB0b1NjaSAgMTIzNDU2Nzg5MDEyMy40NTYxMjMgIC0+IDEyMzQ1Njc4OTAxMjMuNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0LjU2MTIzICAtPiAxMjM0NTY3ODkwMTIzNC41NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDg2IHRvU2NpICAxMjM0NTY3ODkwMTIzNDUuNjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1LjYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4NyB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1Ni4xMjMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxLjIzICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4OSB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NjEyLjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSsxNyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDkwIHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MTIzLiAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE4IEluZXhhY3QgUm91bmRlZAorCisKKy0tIE51bWJlcnMgd2l0aCBFCitkZGJhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZGRiYXMxMzEgdG9TY2kgIjAuMDAwRS0yIiAgLT4gJzAuMDAwMDAnCitkZGJhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnCitkZGJhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycKK2RkYmFzMTM0IHRvU2NpICIwLjAwRS0yIiAgIC0+ICcwLjAwMDAnCitkZGJhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcKK2RkYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcKK2RkYmFzMTM3IHRvU2NpICIwLjAwRS01IiAgIC0+ICcwRS03JworZGRiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknCitkZGJhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknCitkZGJhczE0MCB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKK2RkYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5JworZGRiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJworZGRiYXMxNDMgdG9TY2kgIisxRSswMDkiICAgLT4gJzFFKzknCitkZGJhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScKK2RkYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworZGRiYXMxNDYgdG9TY2kgIjFFKzA5IiAgICAgLT4gJzFFKzknCitkZGJhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnCitkZGJhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScKK2RkYmFzMTQ5IHRvU2NpICIwMDBFKzkiICAgIC0+ICcwRSs5JworZGRiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknCitkZGJhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScKK2RkYmFzMTUyIHRvU2NpICIxRTkwIiAgICAgIC0+ICcxRSs5MCcKK2RkYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5JworZGRiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknCitkZGJhczE1NSB0b1NjaSAiMC4wMDBlKzAiICAtPiAnMC4wMDAnCitkZGJhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZGRiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknCitkZGJhczE1OCB0b1NjaSAiNDRFKzkiICAgICAtPiAnNC40RSsxMCcKK2RkYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnCitkZGJhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScKK2RkYmFzMTYxIHRvU2NpICIwMEUtOSIgICAgIC0+ICcwRS05JworZGRiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnCitkZGJhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcKK2RkYmFzMTY0IHRvU2NpICIxMGUrOTAiICAgIC0+ICcxLjBFKzkxJworZGRiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnCitkZGJhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnCitkZGJhczE2NyB0b1NjaSAiMTAwZSswOSIgICAtPiAnMS4wMEUrMTEnCitkZGJhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInCitkZGJhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnCisKK2RkYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScKK2RkYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnCitkZGJhczE3MiB0b1NjaSAiMS4yNjVFLTgiICAtPiAnMS4yNjVFLTgnCitkZGJhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1JworZGRiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1JworZGRiYXMxNzUgdG9TY2kgIjEuMjY1RS0yIiAgLT4gJzAuMDEyNjUnCitkZGJhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1JworZGRiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1JworZGRiYXMxNzggdG9TY2kgIjEuMjY1RSsxIiAgLT4gJzEyLjY1JworZGRiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41JworZGRiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnCitkZGJhczE4MSB0b1NjaSAiMS4yNjVFKzQiICAtPiAnMS4yNjVFKzQnCitkZGJhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnCitkZGJhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJworCitkZGJhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnCitkZGJhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5JworZGRiYXMxOTIgdG9TY2kgIjEyLjY1RS04IiAgLT4gJzEuMjY1RS03JworZGRiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1JworZGRiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnCitkZGJhczE5NSB0b1NjaSAiMTIuNjVFLTIiICAtPiAnMC4xMjY1JworZGRiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1JworZGRiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1JworZGRiYXMxOTggdG9TY2kgIjEyLjY1RSsxIiAgLT4gJzEyNi41JworZGRiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnCitkZGJhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnCitkZGJhczIwMSB0b1NjaSAiMTIuNjVFKzQiICAtPiAnMS4yNjVFKzUnCitkZGJhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknCitkZGJhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJworCitkZGJhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnCitkZGJhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4JworZGRiYXMyMTIgdG9TY2kgIjEyNi41RS04IiAgLT4gJzAuMDAwMDAxMjY1JworZGRiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnCitkZGJhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1JworZGRiYXMyMTUgdG9TY2kgIjEyNi41RS0yIiAgLT4gJzEuMjY1JworZGRiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1JworZGRiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41JworZGRiYXMyMTggdG9TY2kgIjEyNi41RSsxIiAgLT4gJzEyNjUnCitkZGJhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnCitkZGJhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnCitkZGJhczIyMSB0b1NjaSAiMTI2LjVFKzQiICAtPiAnMS4yNjVFKzYnCitkZGJhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJworZGRiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicKKworZGRiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScKK2RkYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycKK2RkYmFzMjMyIHRvU2NpICIxMjY1RS04IiAgLT4gJzAuMDAwMDEyNjUnCitkZGJhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnCitkZGJhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScKK2RkYmFzMjM1IHRvU2NpICIxMjY1RS0yIiAgLT4gJzEyLjY1JworZGRiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnCitkZGJhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1JworZGRiYXMyMzggdG9TY2kgIjEyNjVFKzEiICAtPiAnMS4yNjVFKzQnCitkZGJhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScKK2RkYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2JworZGRiYXMyNDEgdG9TY2kgIjEyNjVFKzQiICAtPiAnMS4yNjVFKzcnCitkZGJhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnCitkZGJhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnCitkZGJhczI0NCB0b1NjaSAiMTI2NUUtOSIgIC0+ICcwLjAwMDAwMTI2NScKK2RkYmFzMjQ1IHRvU2NpICIxMjY1RS0xMCIgLT4gJzEuMjY1RS03JworZGRiYXMyNDYgdG9TY2kgIjEyNjVFLTExIiAtPiAnMS4yNjVFLTgnCitkZGJhczI0NyB0b1NjaSAiMTI2NUUtMTIiIC0+ICcxLjI2NUUtOScKKworZGRiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnCitkZGJhczI1MSB0b1NjaSAiMC4xMjY1RS0yMCIgLT4gJzEuMjY1RS0yMScKK2RkYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknCitkZGJhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnCitkZGJhczI1NCB0b1NjaSAiMC4xMjY1RS0zIiAgLT4gJzAuMDAwMTI2NScKK2RkYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnCitkZGJhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnCitkZGJhczI1NyB0b1NjaSAiMC4xMjY1RS0wIiAgLT4gJzAuMTI2NScKK2RkYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnCitkZGJhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1JworZGRiYXMyNjAgdG9TY2kgIjAuMTI2NUUrMyIgIC0+ICcxMjYuNScKK2RkYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScKK2RkYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnCitkZGJhczI2MyB0b1NjaSAiMC4xMjY1RSsyMCIgLT4gJzEuMjY1RSsxOScKKworLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQorZGRiYXMyOTAgdG9TY2kgIi0wLjAwMEUtMSIgIC0+ICctMC4wMDAwJworZGRiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcKK2RkYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJworZGRiYXMyOTMgdG9TY2kgIi0wLjAwMEUtNCIgIC0+ICctMEUtNycKK2RkYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcKK2RkYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnCitkZGJhczI5NiB0b1NjaSAiLTAuMEUtMiIgICAgLT4gJy0wLjAwMCcKK2RkYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcKK2RkYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnCitkZGJhczI5OSB0b1NjaSAiLTBFLTMiICAgICAgLT4gJy0wLjAwMCcKKworLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMKK2RkYmFzMzAxICB0b1NjaSAxMGUxMiAgLT4gMS4wRSsxMworZGRiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTIKK2RkYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMgorZGRiYXMzMDQgIHRvRW5nIDEwZTExICAtPiAxLjBFKzEyCitkZGJhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTEKK2RkYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5CitkZGJhczMwNyAgdG9TY2kgMTBlOSAgIC0+IDEuMEUrMTAKK2RkYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkKK2RkYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5CitkZGJhczMxMCAgdG9FbmcgMTBlOCAgIC0+IDEuMEUrOQorZGRiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgKK2RkYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2CitkZGJhczMxMyAgdG9TY2kgMTBlNiAgIC0+IDEuMEUrNworZGRiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNgorZGRiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYKK2RkYmFzMzE2ICB0b0VuZyAxMGU1ICAgLT4gMS4wRSs2CitkZGJhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQorZGRiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMKK2RkYmFzMzE5ICB0b1NjaSAxMGUzICAgLT4gMS4wRSs0CitkZGJhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszCitkZGJhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMworZGRiYXMzMjIgIHRvRW5nIDEwZTIgICAtPiAxLjBFKzMKK2RkYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyCitkZGJhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMAorZGRiYXMzMjUgIHRvU2NpIDEwZTAgICAtPiAxMAorZGRiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMAorZGRiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjAKK2RkYmFzMzI4ICB0b0VuZyAxMGUtMSAgLT4gMS4wCitkZGJhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTAKK2RkYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMAorZGRiYXMzMzEgIHRvU2NpIDEwZS0zICAtPiAwLjAxMAorZGRiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMAorZGRiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTAKK2RkYmFzMzM0ICB0b0VuZyAxMGUtNCAgLT4gMC4wMDEwCitkZGJhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTAKK2RkYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMAorZGRiYXMzMzcgIHRvU2NpIDEwZS02ICAtPiAwLjAwMDAxMAorZGRiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMAorZGRiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTAKK2RkYmFzMzQwICB0b0VuZyAxMGUtNyAgLT4gMC4wMDAwMDEwCitkZGJhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNworZGRiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkKK2RkYmFzMzQzICB0b1NjaSAxMGUtOSAgLT4gMS4wRS04CitkZGJhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05CitkZGJhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQorZGRiYXMzNDYgIHRvRW5nIDEwZS0xMCAtPiAxLjBFLTkKK2RkYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMAorZGRiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyCitkZGJhczM0OSAgdG9TY2kgMTBlLTEyIC0+IDEuMEUtMTEKK2RkYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyCitkZGJhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTIKK2RkYmFzMzUyICB0b0VuZyAxMGUtMTMgLT4gMS4wRS0xMgorCitkZGJhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTIKK2RkYmFzMzYyICB0b0VuZyA3RTEyICAtPiA3RSsxMgorZGRiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExCitkZGJhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5CitkZGJhczM2NSAgdG9TY2kgN0UxMCAgLT4gN0UrMTAKK2RkYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQorZGRiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkKK2RkYmFzMzY4ICB0b0VuZyA3RTkgICAtPiA3RSs5CitkZGJhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOAorZGRiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNgorZGRiYXMzNzEgIHRvU2NpIDdFNyAgIC0+IDdFKzcKK2RkYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNgorZGRiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYKK2RkYmFzMzc0ICB0b0VuZyA3RTYgICAtPiA3RSs2CitkZGJhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQorZGRiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMworZGRiYXMzNzcgIHRvU2NpIDdFNCAgIC0+IDdFKzQKK2RkYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMworZGRiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMKK2RkYmFzMzgwICB0b0VuZyA3RTMgICAtPiA3RSszCitkZGJhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMgorZGRiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMAorZGRiYXMzODMgIHRvU2NpIDdFMSAgIC0+IDdFKzEKK2RkYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MAorZGRiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcKK2RkYmFzMzg2ICB0b0VuZyA3RTAgICAtPiA3CitkZGJhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43CitkZGJhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43CitkZGJhczM4OSAgdG9TY2kgN0UtMiAgLT4gMC4wNworZGRiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcKK2RkYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNworZGRiYXMzOTIgIHRvRW5nIDdFLTMgIC0+IDAuMDA3CitkZGJhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3CitkZGJhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3CitkZGJhczM5NSAgdG9TY2kgN0UtNSAgLT4gMC4wMDAwNworZGRiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcKK2RkYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNworZGRiYXMzOTggIHRvRW5nIDdFLTYgIC0+IDAuMDAwMDA3CitkZGJhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNworZGRiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQorZGRiYXM0MDEgIHRvU2NpIDdFLTggIC0+IDdFLTgKK2RkYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQorZGRiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkKK2RkYmFzNDA0ICB0b0VuZyA3RS05ICAtPiA3RS05CitkZGJhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTAKK2RkYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyCitkZGJhczQwNyAgdG9TY2kgN0UtMTEgLT4gN0UtMTEKK2RkYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTIKK2RkYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMgorZGRiYXM0MTAgIHRvRW5nIDdFLTEyIC0+IDdFLTEyCitkZGJhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMKK2RkYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1CisKKy0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uCityb3VuZGluZzogIGhhbGZfdXAKK2RkYmFzNDIwICB0b1NjaSAgICAxMDAgLT4gMTAwCitkZGJhczQyMSAgdG9FbmcgICAgMTAwIC0+IDEwMAorZGRiYXM0MjIgIHRvU2NpICAgMTAwMCAtPiAxMDAwCitkZGJhczQyMyAgdG9FbmcgICAxMDAwIC0+IDEwMDAKK2RkYmFzNDI0ICB0b1NjaSAgOTk5LjkgLT4gIDk5OS45CitkZGJhczQyNSAgdG9FbmcgIDk5OS45IC0+ICA5OTkuOQorZGRiYXM0MjYgIHRvU2NpIDEwMDAuMCAtPiAxMDAwLjAKK2RkYmFzNDI3ICB0b0VuZyAxMDAwLjAgLT4gMTAwMC4wCitkZGJhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQorZGRiYXM0MjkgIHRvRW5nIDEwMDAuMSAtPiAxMDAwLjEKK2RkYmFzNDMwICB0b1NjaSAxMDAwMCAtPiAxMDAwMAorZGRiYXM0MzEgIHRvRW5nIDEwMDAwIC0+IDEwMDAwCitkZGJhczQzMiAgdG9TY2kgMTAwMDAwIC0+IDEwMDAwMAorZGRiYXM0MzMgIHRvRW5nIDEwMDAwMCAtPiAxMDAwMDAKK2RkYmFzNDM0ICB0b1NjaSAxMDAwMDAwIC0+IDEwMDAwMDAKK2RkYmFzNDM1ICB0b0VuZyAxMDAwMDAwIC0+IDEwMDAwMDAKK2RkYmFzNDM2ICB0b1NjaSAxMDAwMDAwMCAtPiAxMDAwMDAwMAorZGRiYXM0MzcgIHRvRW5nIDEwMDAwMDAwIC0+IDEwMDAwMDAwCitkZGJhczQzOCAgdG9TY2kgMTAwMDAwMDAwIC0+IDEwMDAwMDAwMAorZGRiYXM0MzkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRiYXM0NDAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgIFJvdW5kZWQKK2RkYmFzNDQxICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkCitkZGJhczQ0MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDEgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDEgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0NyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE3ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ0OSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMTAwLjAwMDAwMDAwMDAwMDFFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZAorZGRiYXM0NTMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDEwMC4wMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQKK2RkYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDMgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDUgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDUgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDkgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDU5ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDkgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkCitkZGJhczQ2MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZAorZGRiYXM0NjIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAzMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAzMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjUgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjcgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA5MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NjggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOSAgIFJvdW5kZWQKK2RkYmFzNDY5ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkCitkZGJhczQ3MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDMwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE5ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDMwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE5ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE5ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ3NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0CisKKy0tIGNoZWNrIHJvdW5kaW5nIG1vZGVzIGhlZWRlZAorcm91bmRpbmc6ICBjZWlsaW5nCitkZGJzcjQwMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNDAyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQwMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MDQgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RkYnNyNDA1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MDYgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDA3ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQwOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZGRic3I0MTAgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjQxMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MTIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDEzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZGRic3I0MTUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjQxNiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MTcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDE4ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQxOSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RkYnNyNDIxICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MjIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDIzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQyNCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MjUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZGRic3I0MjYgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjQyNyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MjggIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDI5ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RkYnNyNDMxICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MzIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDMzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQzNCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MzUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKy0tIG5lZ2F0aXZlcworcm91bmRpbmc6ICBjZWlsaW5nCitkZGJzcjUwMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNTAyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUwMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MDQgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RkYnNyNTA1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MDYgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTA3ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUwOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZGRic3I1MTAgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjUxMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MTIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTEzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZGRic3I1MTUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjUxNiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MTcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTE4ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUxOSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RkYnNyNTIxICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MjIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTIzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUyNCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MjUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZGRic3I1MjYgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjUyNyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MjggIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTI5ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RkYnNyNTMxICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MzIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTMzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUzNCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MzUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGUgJ2JhZGRpZXMnIHRlc3RzIGZyb20gRGlhZ0JpZ0RlY2ltYWwsIHBsdXMgc29tZSBuZXcgb25lcworZGRiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTAyIHRvU2NpICcuLicgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTA1IHRvU2NpICctKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTA4IHRvU2NpICcxMmUrKycgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTExIHRvU2NpICcrIDEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTE0IHRvU2NpICcgLSAxICcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTE3IHRvU2NpICcxMi0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTIwIHRvU2NpICcxZS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTIzIHRvU2NpICc3ZTEyMzU2Nzg5MDEyeCcgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTI2IHRvU2NpICdcdTBlNWEnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTI5IHRvU2NpICcxLjM0LjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTMyIHRvU2NpICcwMS4zNS0nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTM1IHRvU2NpICcwMC4uMDAnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTM4IHRvU2NpICcxMTFlKzEyKycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQxIHRvU2NpICcxMTFlMWUrMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQ0IHRvU2NpICd0ZW4nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQ3IHRvU2NpICcxZTEuJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTUwIHRvU2NpICcxLjIzLjQnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTUzIHRvU2NpICcxRSsxLjIuMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTU2IHRvU2NpICcxRSstMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTU5IHRvU2NpICIxRSIiMSIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CistLSBOZWFyLXNwZWNpYWxzCitkZGJhczU2MSB0b1NjaSAicU5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2NCB0b1NjaSAiSW5maSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2NyB0b1NjaSAiSW5maW5pdCIgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU3MCB0b1NjaSAiOUluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU3MyB0b1NjaSAiLXNOYSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscworZGRiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzcgdG9TY2kgICcuZSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODAgdG9TY2kgICctLmUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODMgdG9TY2kgICcrLkUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkZGJhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU4OCB0b1NjaSAgJysuc05hTicgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIFplcm9zCitkZGJhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05CitkZGJhczYwMiB0b1NjaSAwLjAwMDAwMDAwICAgICAgICAtPiAwRS04CitkZGJhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03CitkZGJhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorZGRiYXM2MDUgdG9TY2kgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorZGRiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkZGJhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorZGRiYXM2MDggdG9TY2kgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorZGRiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkZGJhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RkYmFzNjExIHRvU2NpIDAuICAgICAgICAgICAgICAgIC0+IDAKK2RkYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RkYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitkZGJhczYxNCB0b1NjaSAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitkZGJhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZGRiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitkZGJhczYxNyB0b1NjaSAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitkZGJhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZGRiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitkZGJhczYyMCB0b1NjaSAtMC4wMDAwMDAwICAgICAgICAtPiAtMEUtNworZGRiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgKK2RkYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RkYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2RkYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorZGRiYXM2MzIgdG9TY2kgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZGRiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQorZGRiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMgorZGRiYXM2MzUgdG9TY2kgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMworZGRiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNAorZGRiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQorZGRiYXM2MzggdG9TY2kgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorZGRiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNworCitkZGJhczY0MCB0b1NjaSAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RkYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2RkYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzEKK2RkYmFzNjQzIHRvU2NpICAwLjBFKzMgICAgICAgICAgIC0+IDBFKzIKK2RkYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RkYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQKK2RkYmFzNjQ2IHRvU2NpICAwLjBFKzYgICAgICAgICAgIC0+IDBFKzUKK2RkYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKK2RkYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcKK2RkYmFzNjQ5IHRvU2NpICAwLjBFKzkgICAgICAgICAgIC0+IDBFKzgKKworZGRiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMAorZGRiYXM2NTEgdG9TY2kgIDBFKzEgICAgICAgICAgICAgLT4gMEUrMQorZGRiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMgorZGRiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZGRiYXM2NTQgdG9TY2kgIDBFKzQgICAgICAgICAgICAgLT4gMEUrNAorZGRiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQorZGRiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgorZGRiYXM2NTcgdG9TY2kgIDBFKzcgICAgICAgICAgICAgLT4gMEUrNworZGRiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOAorZGRiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitkZGJhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2RkYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RkYmFzNjYyIHRvU2NpICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitkZGJhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2RkYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RkYmFzNjY1IHRvU2NpICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitkZGJhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03CitkZGJhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04CitkZGJhczY2OCB0b1NjaSAgMC4wRS04ICAgICAgICAgICAtPiAwRS05CitkZGJhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMAorCitkZGJhczY3MCB0b1NjaSAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkZGJhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorZGRiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitkZGJhczY3MyB0b1NjaSAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorZGRiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNworZGRiYXM2NzYgdG9TY2kgIDAuMDBFLTYgICAgICAgICAgLT4gMEUtOAorZGRiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZGRiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTAKK2RkYmFzNjc5IHRvU2NpICAwLjAwRS05ICAgICAgICAgIC0+IDBFLTExCisKK2RkYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4MSB0b1NjaSAgIDAwMDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDAKK2RkYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4NCB0b1NjaSAgICAgIDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDAKK2RkYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4NyB0b1NjaSAgLTAwMDAwLiAgICAgICAgICAtPiAtMAorZGRiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDAKK2RkYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wCisKKy0tIFNwZWNpYWxzCitkZGJhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzAxIHRvU2NpICJuYW4iICAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzA0IHRvU2NpICIrTmFOIiAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzA3IHRvU2NpICIrTkFOIiAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTgorZGRiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTgorZGRiYXM3MTAgdG9TY2kgIi1uQW4iICAgICAgICAgICAgLT4gLU5hTgorZGRiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTgorZGRiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFOCitkZGJhczcxMyB0b1NjaSAnTmFOMScgICAgICAgICAgICAtPiBOYU4xCitkZGJhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMgorZGRiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzCitkZGJhczcxNiB0b1NjaSAnTmFOMTIzNCcgICAgICAgICAtPiBOYU4xMjM0CitkZGJhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xCitkZGJhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMgorZGRiYXM3MTkgdG9TY2kgJ05hTjAxMjMnICAgICAgICAgLT4gTmFOMTIzCitkZGJhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0CitkZGJhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xCitkZGJhczcyMiB0b1NjaSAnTmFOMDAxMicgICAgICAgICAtPiBOYU4xMgorZGRiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzCitkZGJhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0CitkZGJhczcyNSB0b1NjaSAnTmFOMTIzNDU2Nzg5MDEyMzQ1NicgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM3MjggdG9TY2kgJ05hTi0xMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZGRiYXM3MzAgdG9TY2kgInNOYU4iICAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzMgdG9TY2kgIlNOQU4iICAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzYgdG9TY2kgIitTbkFuIiAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTgorZGRiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RkYmFzNzM5IHRvU2NpICItc25hbiIgICAgICAgICAgIC0+IC1zTmFOCitkZGJhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTgorZGRiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RkYmFzNzQyIHRvU2NpICdzTmFOMDAwMCcgICAgICAgIC0+IHNOYU4KK2RkYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43CitkZGJhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNAorZGRiYXM3NDUgdG9TY2kgJ3NOYU43MjM0NTYxMjM0NTY3ODkwJyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RkYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTAgdG9TY2kgImlOZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTMgdG9TY2kgIitpbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTYgdG9TY2kgIi1JbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitkZGJhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXM3NTkgdG9TY2kgIi1JTkYiICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2RkYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2MSB0b1NjaSAiaW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2NCB0b1NjaSAiK0luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2NyB0b1NjaSAiK0lORklOSVRZIiAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5CitkZGJhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzNzcwIHRvU2NpICItaU5mSW5JdFkiICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5CisKKy0tIFNwZWNpYWxzIGFuZCB6ZXJvcyBmb3IgdG9FbmcKK2RkYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXN0Nzc0IHRvRW5nICItc05hTiIgICAgICAgICAgICAtPiAtc05hTgorZGRiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFOCitkZGJhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3NzggdG9FbmcgIitzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3ODEgdG9FbmcgIlNOQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3ODQgdG9FbmcgInNuYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3ODcgdG9FbmcgIlNuQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3OTAgdG9FbmcgInNOYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkZGJhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkZGJhc3Q3OTMgdG9FbmcgInNOYU4iICAgICAgICAgICAgIC0+IHNOYU4KKworLS0gWmVybyB0b0VuZywgZXRjLgorZGRiYXN0ODAwIHRvRW5nIDBlKzEgICAgICAgICAgICAgIC0+ICIwLjAwRSszIiAgLS0gZG9jIGV4YW1wbGUKKworZGRiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2RkYmFzdDgwMiB0b0VuZyAwLjAwMDAwMDAwICAgICAgICAtPiAwLjAwRS02CitkZGJhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02CitkZGJhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzdDgwNSB0b0VuZyAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkZGJhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzdDgwOCB0b0VuZyAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitkZGJhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkZGJhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitkZGJhc3Q4MTEgdG9FbmcgMC4gICAgICAgICAgICAgICAgLT4gMAorZGRiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RkYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMAorZGRiYXN0ODE0IHRvRW5nIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2RkYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZGRiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorZGRiYXN0ODE3IHRvRW5nIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2RkYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZGRiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorZGRiYXN0ODIwIHRvRW5nIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wLjBFLTYKK2RkYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNgorZGRiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RkYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitkZGJhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitkZGJhc3Q4MzIgdG9FbmcgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZGRiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMKK2RkYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMKK2RkYmFzdDgzNSB0b0VuZyAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitkZGJhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNgorZGRiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNgorZGRiYXN0ODM4IHRvRW5nICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2RkYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5CisKK2RkYmFzdDg0MCB0b0VuZyAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RkYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwCitkZGJhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMworZGRiYXN0ODQzIHRvRW5nICAwLjBFKzMgICAgICAgICAgIC0+IDAuMEUrMworZGRiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RkYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2CitkZGJhc3Q4NDYgdG9FbmcgIDAuMEUrNiAgICAgICAgICAgLT4gMC4wRSs2CitkZGJhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorZGRiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkKK2RkYmFzdDg0OSB0b0VuZyAgMC4wRSs5ICAgICAgICAgICAtPiAwLjBFKzkKKworZGRiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDAKK2RkYmFzdDg1MSB0b0VuZyAgMEUrMSAgICAgICAgICAgICAtPiAwLjAwRSszCitkZGJhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszCitkZGJhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZGRiYXN0ODU0IHRvRW5nICAwRSs0ICAgICAgICAgICAgIC0+IDAuMDBFKzYKK2RkYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYKK2RkYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2CitkZGJhc3Q4NTcgdG9FbmcgIDBFKzcgICAgICAgICAgICAgLT4gMC4wMEUrOQorZGRiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQorZGRiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworZGRiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorZGRiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RkYmFzdDg2MiB0b0VuZyAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorZGRiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorZGRiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RkYmFzdDg2NSB0b0VuZyAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorZGRiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNgorZGRiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYKK2RkYmFzdDg2OCB0b0VuZyAgMC4wRS04ICAgICAgICAgICAtPiAwRS05CitkZGJhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05CisKK2RkYmFzdDg3MCB0b0VuZyAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkZGJhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2RkYmFzdDg3MyB0b0VuZyAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYKK2RkYmFzdDg3NiB0b0VuZyAgMC4wMEUtNiAgICAgICAgICAtPiAwLjAwRS02CitkZGJhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZGRiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQorZGRiYXN0ODc5IHRvRW5nICAwLjAwRS05ICAgICAgICAgIC0+IDAuMDBFLTkKKworLS0gbG9uZyBpbnB1dCBzdHJpbmdzCitkZGJhczgwMSB0b3NjaSAnMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODAyIHRvc2NpICcwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODAzIHRvc2NpICcwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwNCB0b3NjaSAnMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODA1IHRvc2NpICcwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODA2IHRvc2NpICcwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwNyB0b3NjaSAnMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODA4IHRvc2NpICcwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODA5IHRvc2NpICcwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgxMCB0b3NjaSAnMDAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKKworZGRiYXM4MTEgdG9zY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4xMjM0NTY3ODkwMTIzNDU2CitkZGJhczgxMiB0b3NjaSAnMC4wMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTMgdG9zY2kgJzAuMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTQgdG9zY2kgJzAuMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgxNSB0b3NjaSAnMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTYgdG9zY2kgJzAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTcgdG9zY2kgJzAuMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTcKK2RkYmFzODE4IHRvc2NpICcwLjAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOAorZGRiYXM4MTkgdG9zY2kgJzAuMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOQorZGRiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTEwCisKK2RkYmFzODIxIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzE5IEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjIgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMScgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIwIEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjMgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTInIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMSBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI0IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMycgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIyIEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjUgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIzIEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjYgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNCBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI3IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI1IEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjggdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NycgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI2IEluZXhhY3QgUm91bmRlZAorZGRiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzCitkZGJhczkwNiB0b1NjaSAnOTllOTk5OTk5OTk5JyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkwNyB0b1NjaSAnOTk5ZTk5OTk5OTk5OScgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkwOCB0b1NjaSAnMC45ZS05OTk5OTk5OTknICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MDkgdG9TY2kgJzAuMDllLTk5OTk5OTk5OScgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTEwIHRvU2NpICcwLjFlMTAwMDAwMDAwMCcgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzOTExIHRvU2NpICcxMGUtMTAwMDAwMDAwMCcgICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkxMiB0b1NjaSAnMC45ZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkxMyB0b1NjaSAnOTllLTk5OTk5OTk5OTknICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MTQgdG9TY2kgJzExMWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MTUgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTknICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTE2IHRvU2NpICcxMTExZS05OTk5OTk5OTk5OScgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkxNyB0b1NjaSAnN2UxMDAwMDAwMDAwJyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMgdGhlIHNhbWUKK2RkYmFzOTE4IHRvU2NpICctOTllOTk5OTk5OTk5JyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkxOSB0b1NjaSAnLTk5OWU5OTk5OTk5OTknICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MjAgdG9TY2kgJy0wLjllLTk5OTk5OTk5OScgICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyMSB0b1NjaSAnLTAuMDllLTk5OTk5OTk5OScgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTIyIHRvU2NpICctMC4xZTEwMDAwMDAwMDAnICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkyMyB0b1NjaSAnLTEwZS0xMDAwMDAwMDAwJyAgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTI0IHRvU2NpICctMC45ZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkyNSB0b1NjaSAnLTk5ZS05OTk5OTk5OTk5JyAgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTI2IHRvU2NpICctMTExZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkyNyB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTknICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTI4IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OTknIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MjkgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgcmVzdWx0cyBhdCBkaWZmZXJlbnQgcm91bmRpbmcgbW9kZXMKK3JvdW5kaW5nOiAgY2VpbGluZworZGRiYXM5MzAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzOTMxIHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgdXAKK2RkYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzMyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBkb3duCitkZGJhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzNSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIGZsb29yCitkZGJhczkzNiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzNyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfdXAKK2RkYmFzOTM4IHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzOSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RkYmFzOTQwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczk0MSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RkYmFzOTQyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczk0MyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfZXZlbgorCistLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMAorZGRiZW00MDAgdG9TY2kgIDEuMDAwMEUtMzgzICAgICAtPiAxLjAwMDBFLTM4MworZGRiZW00MDEgdG9TY2kgIDAuMUUtMzk0ICAgICAgICAtPiAxRS0zOTUgICAgICAgU3Vibm9ybWFsCitkZGJlbTQwMiB0b1NjaSAgMC4xMDAwRS0zOTQgICAgIC0+IDEuMDAwRS0zOTUgICBTdWJub3JtYWwKK2RkYmVtNDAzIHRvU2NpICAwLjAxMDBFLTM5NCAgICAgLT4gMS4wMEUtMzk2ICAgIFN1Ym5vcm1hbAorZGRiZW00MDQgdG9TY2kgIDAuMDAxMEUtMzk0ICAgICAtPiAxLjBFLTM5NyAgICAgU3Vibm9ybWFsCitkZGJlbTQwNSB0b1NjaSAgMC4wMDAxRS0zOTQgICAgIC0+IDFFLTM5OCAgICAgICBTdWJub3JtYWwKK2RkYmVtNDA2IHRvU2NpICAwLjAwMDEwRS0zOTQgICAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwgUm91bmRlZAorZGRiZW00MDcgdG9TY2kgIDAuMDAwMTNFLTM5NCAgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQwOCB0b1NjaSAgMC4wMDAxNUUtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDA5IHRvU2NpICAwLjAwMDE3RS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTAgdG9TY2kgIDAuMDAwMjNFLTM5NCAgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxMSB0b1NjaSAgMC4wMDAyNUUtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDEyIHRvU2NpICAwLjAwMDI3RS0zOTQgICAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTMgdG9TY2kgIDAuMDAwMTQ5RS0zOTQgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDE1IHRvU2NpICAwLjAwMDE1MUUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTYgdG9TY2kgIDAuMDAwMjQ5RS0zOTQgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDE4IHRvU2NpICAwLjAwMDI1MUUtMzk0ICAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTkgdG9TY2kgIDAuMDAwMDlFLTM5NCAgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQyMCB0b1NjaSAgMC4wMDAwNUUtMzk0ICAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiZW00MjEgdG9TY2kgIDAuMDAwMDNFLTM5NCAgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDIyIHRvU2NpICAwLjAwMDAwOUUtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTM5NCAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiZW00MjQgdG9TY2kgIDAuMDAwMDAzRS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZGRiZW00MjUgdG9TY2kgIDAuMDAxMDQ5RS0zOTQgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTM5NCAgIC0+IDEuMEUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDI3IHRvU2NpICAwLjAwMTA1MUUtMzk0ICAgLT4gMS4xRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MjggdG9TY2kgIDAuMDAxMTQ5RS0zOTQgICAtPiAxLjFFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTM5NCAgIC0+IDEuMkUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDMwIHRvU2NpICAwLjAwMTE1MUUtMzk0ICAgLT4gMS4yRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZGJlbTQzMiB0b1NjaSAgMC4wMTAwNDlFLTM5NCAgIC0+IDEuMDBFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDMzIHRvU2NpICAwLjAxMDA1MEUtMzk0ICAgLT4gMS4wMEUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS0zOTQgICAtPiAxLjAxRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQzNSB0b1NjaSAgMC4wMTAxNDlFLTM5NCAgIC0+IDEuMDFFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDM2IHRvU2NpICAwLjAxMDE1MEUtMzk0ICAgLT4gMS4wMkUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS0zOTQgICAtPiAxLjAyRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkYmVtNDQwIHRvU2NpICAwLjEwMTAzRS0zOTQgICAgLT4gMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTM5NCAgICAtPiAxLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ0MiB0b1NjaSAgMC4xMDEwN0UtMzk0ICAgIC0+IDEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDQzIHRvU2NpICAwLjEwMTEzRS0zOTQgICAgLT4gMS4wMTFFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTM5NCAgICAtPiAxLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ0NSB0b1NjaSAgMC4xMDExN0UtMzk0ICAgIC0+IDEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRiZW00NTAgdG9TY2kgIDEuMTA3MzBFLTM5NSAgIC0+IDEuMTA3RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDUxIHRvU2NpICAxLjEwNzUwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ1MiB0b1NjaSAgMS4xMDc3MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTMgdG9TY2kgIDEuMTA4MzBFLTM5NSAgIC0+IDEuMTA4RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDU0IHRvU2NpICAxLjEwODUwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ1NSB0b1NjaSAgMS4xMDg3MEUtMzk1ICAgLT4gMS4xMDlFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBtYWtlIHN1cmUgc2lnbiBPSworZGRiZW00NTYgdG9TY2kgIC0wLjEwMTAzRS0zOTQgICAtPiAtMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS0zOTQgICAtPiAtMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTggdG9TY2kgIC0wLjEwMTA3RS0zOTQgICAtPiAtMS4wMTFFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTkgdG9TY2kgIC0wLjEwMTEzRS0zOTQgICAtPiAtMS4wMTFFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS0zOTQgICAtPiAtMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NjEgdG9TY2kgIC0wLjEwMTE3RS0zOTQgICAtPiAtMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSAnOTk5cycgY2FzZXMKK2RkYmVtNDY0IHRvU2NpICA5OTk5OTlFLTM5NSAgICAgICAgIC0+IDkuOTk5OTlFLTM5MCBTdWJub3JtYWwKK2RkYmVtNDY1IHRvU2NpICA5OTk5OS4wRS0zOTQgICAgICAgIC0+IDkuOTk5OTBFLTM5MCBTdWJub3JtYWwKK2RkYmVtNDY2IHRvU2NpICA5OTk5OS5FLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkwICBTdWJub3JtYWwKK2RkYmVtNDY3IHRvU2NpICA5OTk5LjlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkxICBTdWJub3JtYWwKK2RkYmVtNDY4IHRvU2NpICA5OTkuOTlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkyICBTdWJub3JtYWwKK2RkYmVtNDY5IHRvU2NpICA5OS45OTlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkzICBTdWJub3JtYWwKK2RkYmVtNDcwIHRvU2NpICA5Ljk5OTlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzk0ICBTdWJub3JtYWwKK2RkYmVtNDcxIHRvU2NpICAwLjk5OTk5RS0zOTQgICAgICAgIC0+IDEuMDAwMEUtMzk0IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3MiB0b1NjaSAgMC4wOTk5OTlFLTM5NCAgICAgICAtPiAxLjAwMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3MyB0b1NjaSAgMC4wMDk5OTk5RS0zOTQgICAgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtMzk0ICAgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTM5NCAgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ3NiB0b1NjaSAgMC4wMDAwMDk5OTk5RS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS0zOTQgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiZW00NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS0zOTQgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIEV4cG9uZW50cyB3aXRoIGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcworZGRiYXMxMDAxIHRvU2NpICAxZTk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwMiB0b1NjaSAgMWUwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMDAzIHRvU2NpICAxZTAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMDA0IHRvU2NpICAxZTAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwNSB0b1NjaSAgMWUwMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGJhczEwMDYgdG9TY2kgIDFlMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMDA3IHRvU2NpICAxZS05OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzMTAwOCB0b1NjaSAgMWUtMDk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczEwMDkgdG9TY2kgIDFlLTAwOTk5OTk5OTk5IC0+IDBFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXMxMDEwIHRvU2NpICAxZS0wMDA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzMTAxMSB0b1NjaSAgMWUtMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczEwMTIgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworZGRiYXMxMDQxIHRvU2NpICAgICAxLjExMTExMTExMTExNTI0NDRFLTM4NCAtPiAgMS4xMTExMTExMTExMTUyNEUtMzg0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGJhczEwNDIgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NUUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkYmFzMTA0MyB0b1NjaSAgICAgMS4xMTExMTExMTExMTUyNDQ2RS0zODQgLT4gIDEuMTExMTExMTExMTE1MjRFLTM4NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBjbGFtcGVkIGxhcmdlIG5vcm1hbHMKK2RkYmFzMTA3MCB0b1NjaSAgIDFFKzM2OSAgLT4gIDFFKzM2OQorZGRiYXMxMDcxIHRvU2NpICAgMUUrMzcwICAtPiAgMS4wRSszNzAgIENsYW1wZWQKK2RkYmFzMTA3MiB0b1NjaSAgIDFFKzM3OCAgLT4gIDEuMDAwMDAwMDAwRSszNzggIENsYW1wZWQKK2RkYmFzMTA3MyB0b1NjaSAgIDFFKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKK2RkYmFzMTA3NCB0b1NjaSAgIDFFKzM4NSAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCisKKy0tIGNsYW1wZWQgemVyb3MgW3NlZSBhbHNvIGNsYW1wLmRlY1Rlc3RdCitkZGJhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzM2OSAgQ2xhbXBlZAorZGRiYXMxMDc2IHRvU2NpICAgMGUtMTAwMDAgIC0+ICAwRS0zOTggIENsYW1wZWQKK2RkYmFzMTA3NyB0b1NjaSAgLTBlKzEwMDAwICAtPiAtMEUrMzY5ICBDbGFtcGVkCitkZGJhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTM5OCAgQ2xhbXBlZAorCistLSBleHRyZW1lIHZhbHVlcyBmcm9tIG5leHQtd2lkZXIKK2RkYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGJhczExMDIgdG9TY2kgLTFFLTYxNDMgLT4gLTBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkZGJhczExMDMgdG9TY2kgLTFFLTYxNzYgLT4gLTBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkZGJhczExMDQgdG9TY2kgLTAgLT4gLTAKK2RkYmFzMTEwNSB0b1NjaSArMCAtPiAgMAorZGRiYXMxMTA2IHRvU2NpICsxRS02MTc2IC0+ICAwRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRiYXMxMTA3IHRvU2NpICsxRS02MTczIC0+ICAwRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRiYXMxMTA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENhbm9uaWNhbC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENhbm9uaWNhbC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZjllMzIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2Fub25pY2FsLmRlY1Rlc3QKQEAgLTAsMCArMSwzNTcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDYW5vbmljYWwuZGVjVGVzdCAtLSB0ZXN0IGRlY0RvdWJsZSBjYW5vbmljYWwgcmVzdWx0cyAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIGZpbGUgdGVzdHMgdGhhdCBjb3B5IG9wZXJhdGlvbnMgbGVhdmUgdW5jYW5vbmljYWwgb3BlcmFuZHMKKy0tIHVuY2hhbmdlZCwgYW5kIHZpY2UgdmVyc2EKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBVbmNhbm9uaWNhbCBkZWNsZXRzIGFyZTogYWJjLCB3aGVyZToKKy0tICAgYT0xLDIsMworLS0gICBiPTYsNyxlLGYKKy0tICAgYz1lLGYKKworLS0gYXNzZXJ0IHNvbWUgc3RhbmRhcmQgKGNhbm9uaWNhbCkgdmFsdWVzOyB0aGlzIHRlc3RzIHRoYXQgRnJvbVN0cmluZworLS0gcHJvZHVjZXMgY2Fub25pY2FsIHJlc3VsdHMgKG1hbnkgbW9yZSBpbiBkZWNpbWFsTk4pCitkZGNhbjAwMSBhcHBseSA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAwMiBhcHBseSAwICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAwCitkZGNhbjAwMyBhcHBseSAxICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAxCitkZGNhbjAwNCBhcHBseSAtMSAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDAxCitkZGNhbjAwNSBhcHBseSBJbmZpbml0eSAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjAwNiBhcHBseSAtSW5maW5pdHkgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZGNhbjAwNyBhcHBseSAtTmFOICAgICAgICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwCitkZGNhbjAwOCBhcHBseSAtc05hTiAgICAgICAgICAgICAgICAgIC0+ICNmZTAwMDAwMDAwMDAwMDAwCitkZGNhbjAwOSBhcHBseSBOYU45OTk5OTk5OTk5OTk5OTkgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjAxMCBhcHBseSBzTmFOOTk5OTk5OTk5OTk5OTk5ICAgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZWNhbjAxMSBhcHBseSAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCitkZGNhbjAxMiBhcHBseSA3LjUwICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwM2QwCitkZGNhbjAxMyBhcHBseSA5Ljk5ICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwMGZmCisKKy0tIEJhc2UgdGVzdHMgZm9yIGNhbm9uaWNhbCBlbmNvZGluZ3MgKGluZGl2aWR1YWwgb3BlcmF0b3IKKy0tIHByb3BhZ2F0aW9uIGlzIHRlc3RlZCBsYXRlcikKKworLS0gRmluaXRlczogZGVjbGV0cyBpbiBjb2VmZmljaWVudAorZGRjYW4wMjEgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDIyIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyMyBjYW5vbmljYWwgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMjQgY2Fub25pY2FsICAjNzdmZmZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDI1IGNhbm9uaWNhbCAgIzc3ZmNmZmZmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyNiBjYW5vbmljYWwgICM3N2ZjZmZmZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMjcgY2Fub25pY2FsICAjNzdmY2ZmM2ZmZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDI4IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZmZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAzMCBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZmZmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMzEgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmZmZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDMyIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZmZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAzMyBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmZmZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMzUgY2Fub25pY2FsICAjNzdmY2ZmM2ZkZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDM2IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZWZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCisKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjEwMCBjYW5vbmljYWwgIE5hTjk5OTk5OTk5OTk5OTk5OSAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDEgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTAyIGNhbm9uaWNhbCAgIzdjMDNmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjEwMyBjYW5vbmljYWwgICM3YzAwZmZmZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDQgY2Fub25pY2FsICAjN2MwMGZmM2ZmZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTA1IGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmZmZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjEwNiBjYW5vbmljYWwgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDcgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmZmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4xMTAgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTEyIGNhbm9uaWNhbCAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExMyBjYW5vbmljYWwgICM3YzgwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMTQgY2Fub25pY2FsICAjN2M0MGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTE1IGNhbm9uaWNhbCAgIzdjMjBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExNiBjYW5vbmljYWwgICM3YzEwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMTcgY2Fub25pY2FsICAjN2MwOGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTE4IGNhbm9uaWNhbCAgIzdjMDRmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCisKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZGRjYW4xMjAgY2Fub25pY2FsIHNOYU45OTk5OTk5OTk5OTk5OTkgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTIxIGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyMiBjYW5vbmljYWwgICM3ZTAzZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMjMgY2Fub25pY2FsICAjN2UwMGZmZmZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTI0IGNhbm9uaWNhbCAgIzdlMDBmZjNmZmZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyNSBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMjYgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmYzZmZmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTI3IGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjEzMCBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzIgY2Fub25pY2FsICAjN2YwMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTMzIGNhbm9uaWNhbCAgIzdlODBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEzNCBjYW5vbmljYWwgICM3ZTQwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzUgY2Fub25pY2FsICAjN2UyMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTM2IGNhbm9uaWNhbCAgIzdlMTBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEzNyBjYW5vbmljYWwgICM3ZTA4ZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzggY2Fub25pY2FsICAjN2UwNGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKKworLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZGRjYW4xNDAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQxIGNhbm9uaWNhbCAgIzc5MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0MiBjYW5vbmljYWwgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDMgY2Fub25pY2FsICAjNzg4MDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQ0IGNhbm9uaWNhbCAgIzc4NDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0NSBjYW5vbmljYWwgICM3ODIwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDYgY2Fub25pY2FsICAjNzgxMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQ3IGNhbm9uaWNhbCAgIzc4MDgwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0OCBjYW5vbmljYWwgICM3ODA0MDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzIChmaXJzdCwgbGFzdCwgYW5kIGEgZmV3IG90aGVycykKK2RkY2FuMTUwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1MSBjYW5vbmljYWwgICM3ODAyMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTUzIGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1NCBjYW5vbmljYWwgICM3ODAwMjAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTUgY2Fub25pY2FsICAjNzgwMDA4MDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTU2IGNhbm9uaWNhbCAgIzc4MDAwMDIwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1NyBjYW5vbmljYWwgICM3ODAwMDAwNDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTggY2Fub25pY2FsICAjNzgwMDAwMDA0MDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTU5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDgwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE2MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwNDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNjEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAyMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTYyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDgwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE2MyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMjAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNjQgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDA0MCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTY1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDggIC0+ICM3ODAwMDAwMDAwMDAwMDAwCisKKworLS0gTm93IHRoZSBvcGVyYXRvcnMgLS0gdHJ5aW5nIHRvIGNoZWNrIHBhdGhzIHRoYXQgbWlnaHQgZmFpbCB0bworLS0gY2Fub25pY2FsaXplIHByb3BhZ2F0ZWQgb3BlcmFuZHMKKworLS0tLS0gQWRkOgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkZGNhbjIwMiBhZGQgIDBFKzM4NCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjAzIGFkZCAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIDBFKzM4NCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorLS0gdGlueSB6ZXJvCitkZGNhbjIwNCBhZGQgIDBFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorZGRjYW4yMDUgYWRkICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKKy0tIHRpbnkgbm9uIHplcm8KK2RkY2FuMjA2IGFkZCAtMUUtMzk4ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkCitkZGNhbjIwNyBhZGQgICAgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAtMUUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuMjExIGFkZCAgMCAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4yMTIgYWRkICAgICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RkY2FuMjEzIGFkZCAgMCAgIzdjNDBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4yMTQgYWRkICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuMjE1IGFkZCAgMCAgIzdlMDBmZmZmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW4yMTYgYWRkICAgICAjN2UwMGZmZmZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCistLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjIxNyBhZGQgIDAgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuMjE4IGFkZCAgICAgIzdlODBmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZGRjYW4yMjAgYWRkICAwICAjNzg4MDAwMDAwMDAwMDAwMCAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjIyMSBhZGQgICAgICM3ODgwMDAwMDAwMDAwMDAwICAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuMjIyIGFkZCAgMCAgIzc4MDIwMDAwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjIyMyBhZGQgICAgICM3ODAyMDAwMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjQgYWRkICAwICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMjI1IGFkZCAgICAgIzc4MDAwMDAwMDAwMDAwMDEgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjIyNiBhZGQgIDAgICM3ODAwMDAyMDAwMDAwMDAwICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjcgYWRkICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKworLS0tLS0gQ2xhc3M6IFtkb2VzIG5vdCByZXR1cm4gZW5jb2RlZF0KKworLS0tLS0gQ29tcGFyZToKK2RkY2FuMjMxIGNvbXBhcmUgLUluZiAgIDEgICAgIC0+ICAjYTIzODAwMDAwMDAwMDAwMQorZGRjYW4yMzIgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAwCitkZGNhbjIzMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgIzIyMzgwMDAwMDAwMDAwMDEKK2RkY2FuMjM0IGNvbXBhcmUgICM3YzAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjM1IGNvbXBhcmUgICM3ZTAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIENvbXBhcmVTaWc6CitkZGNhbjI0MSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAgI2EyMzgwMDAwMDAwMDAwMDEKK2RkY2FuMjQyIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMAorZGRjYW4yNDMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAxCitkZGNhbjI0NCBjb21wYXJlc2lnICAjN2MwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW4yNDUgY29tcGFyZXNpZyAgIzdlMDBmZjNmZmZmM2ZjZmYgLTEwMDAgIC0+ICAjN2MwMGZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0tLS0gQ29weTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZGRjYW4yNTAgY29weSAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZmZmYzZmNmZjNmY2ZmCitkZGNhbjI1MSBjb3B5ICAjNzdmY2ZmM2ZkZmYzZmNmZiAgLT4gIzc3ZmNmZjNmZGZmM2ZjZmYKKy0tIE5hTnMKK2RkY2FuMjUyIGNvcHkgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwM2ZmM2ZjZmYzZmNmZgorZGRjYW4yNTMgY29weSAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmZmZmCitkZGNhbjI1NCBjb3B5ICAjN2QwMGZmM2ZjZmYzZmNmZiAgLT4gIzdkMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjU1IGNvcHkgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwNGZmM2ZjZmYzZmNmZgorLS0gc05hTgorZGRjYW4yNTYgY29weSAgIzdlMDBmZjNmY2ZmZmZjZmYgIC0+ICM3ZTAwZmYzZmNmZmZmY2ZmCitkZGNhbjI1NyBjb3B5ICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlNDBmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZGRjYW4yNTggY29weSAgIzdhMDAwMDAwMDAwMDAwMDAgIC0+ICM3YTAwMDAwMDAwMDAwMDAwCitkZGNhbjI1OSBjb3B5ICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAyMDAwMDAwMDAwMDAKKworLS0tLS0gQ29weUFiczogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZGRjYW4yNjAgY29weWFicyAgI2Y3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZmZmYzZmNmZjNmY2ZmCitkZGNhbjI2MSBjb3B5YWJzICAjZjdmY2ZmM2ZkZmYzZmNmZiAgLT4gIzc3ZmNmZjNmZGZmM2ZjZmYKKy0tIE5hTnMKK2RkY2FuMjYyIGNvcHlhYnMgICNmYzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwM2ZmM2ZjZmYzZmNmZgorZGRjYW4yNjMgY29weWFicyAgI2ZjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmZmZmCitkZGNhbjI2NCBjb3B5YWJzICAjZmQwMGZmM2ZjZmYzZmNmZiAgLT4gIzdkMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjY1IGNvcHlhYnMgICNmYzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwNGZmM2ZjZmYzZmNmZgorLS0gc05hTgorZGRjYW4yNjYgY29weWFicyAgI2ZlMDBmZjNmY2ZmZmZjZmYgIC0+ICM3ZTAwZmYzZmNmZmZmY2ZmCitkZGNhbjI2NyBjb3B5YWJzICAjZmU0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlNDBmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZGRjYW4yNjggY29weWFicyAgI2ZhMDAwMDAwMDAwMDAwMDAgIC0+ICM3YTAwMDAwMDAwMDAwMDAwCitkZGNhbjI2OSBjb3B5YWJzICAjZjgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAyMDAwMDAwMDAwMDAKKworLS0tLS0gQ29weU5lZ2F0ZTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZGRjYW4yNzAgY29weW5lZ2F0ZSAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICNmN2ZmZmYzZmNmZjNmY2ZmCitkZGNhbjI3MSBjb3B5bmVnYXRlICAjNzdmY2ZmM2ZkZmYzZmNmZiAgLT4gI2Y3ZmNmZjNmZGZmM2ZjZmYKKy0tIE5hTnMKK2RkY2FuMjcyIGNvcHluZWdhdGUgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjZmMwM2ZmM2ZjZmYzZmNmZgorZGRjYW4yNzMgY29weW5lZ2F0ZSAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICNmYzAwZmYzZmNmZjNmZmZmCitkZGNhbjI3NCBjb3B5bmVnYXRlICAjN2QwMGZmM2ZjZmYzZmNmZiAgLT4gI2ZkMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjc1IGNvcHluZWdhdGUgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjZmMwNGZmM2ZjZmYzZmNmZgorLS0gc05hTgorZGRjYW4yNzYgY29weW5lZ2F0ZSAgIzdlMDBmZjNmY2ZmZmZjZmYgIC0+ICNmZTAwZmYzZmNmZmZmY2ZmCitkZGNhbjI3NyBjb3B5bmVnYXRlICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gI2ZlNDBmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZGRjYW4yNzggY29weW5lZ2F0ZSAgIzdhMDAwMDAwMDAwMDAwMDAgIC0+ICNmYTAwMDAwMDAwMDAwMDAwCitkZGNhbjI3OSBjb3B5bmVnYXRlICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gI2Y4MDAyMDAwMDAwMDAwMDAKKworLS0tLS0gQ29weVNpZ246IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RkY2FuMjgwIGNvcHlzaWduICAjNzdmZmZmM2ZjZmYzZmNmZiAtMSAtPiAjZjdmZmZmM2ZjZmYzZmNmZgorZGRjYW4yODEgY29weXNpZ24gICM3N2ZjZmYzZmRmZjNmY2ZmICAxIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmCistLSBOYU5zCitkZGNhbjI4MiBjb3B5c2lnbiAgIzdjMDNmZjNmY2ZmM2ZjZmYgLTEgLT4gI2ZjMDNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjgzIGNvcHlzaWduICAjN2MwMGZmM2ZjZmYzZmZmZiAgMSAtPiAjN2MwMGZmM2ZjZmYzZmZmZgorZGRjYW4yODQgY29weXNpZ24gICM3ZDAwZmYzZmNmZjNmY2ZmIC0xIC0+ICNmZDAwZmYzZmNmZjNmY2ZmCitkZGNhbjI4NSBjb3B5c2lnbiAgIzdjMDRmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RkY2FuMjg2IGNvcHlzaWduICAjN2UwMGZmM2ZjZmZmZmNmZiAtMSAtPiAjZmUwMGZmM2ZjZmZmZmNmZgorZGRjYW4yODcgY29weXNpZ24gICM3ZTQwZmYzZmNmZjNmY2ZmICAxIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RkY2FuMjg4IGNvcHlzaWduICAjN2EwMDAwMDAwMDAwMDAwMCAtMSAtPiAjZmEwMDAwMDAwMDAwMDAwMAorZGRjYW4yODkgY29weXNpZ24gICM3ODAwMjAwMDAwMDAwMDAwICAxIC0+ICM3ODAwMjAwMDAwMDAwMDAwCisKKy0tLS0tIE11bHRpcGx5OgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkZGNhbjMwMiBtdWx0aXBseSAgMSAgICAgICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4zMDMgbXVsdGlwbHkgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAgMSAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKKy0tIG5lZ2F0aXZlCitkZGNhbjMwNiBtdWx0aXBseSAtMSAgICAgICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4zMDcgbXVsdGlwbHkgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAtMSAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjMxMSBtdWx0aXBseSAgMSAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4zMTIgbXVsdGlwbHkgICAgICM3YzAzZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4zMTMgbXVsdGlwbHkgIDEgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMzE0IG11bHRpcGx5ICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuMzE1IG11bHRpcGx5ICAxICAjN2UwMGZmZmZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjMxNiBtdWx0aXBseSAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4zMTcgbXVsdGlwbHkgIDEgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuMzE4IG11bHRpcGx5ICAgICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCistLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkZGNhbjMyMCBtdWx0aXBseSAgMSAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4zMjEgbXVsdGlwbHkgICAgICM3ODgwMDAwMDAwMDAwMDAwICAxICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuMzIyIG11bHRpcGx5ICAxICAjNzgwMjAwMDAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzIzIG11bHRpcGx5ICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzI0IG11bHRpcGx5ICAxICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzI1IG11bHRpcGx5ICAgICAjNzgwMDAwMDAwMDAwMDAwMSAgMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzI2IG11bHRpcGx5ICAxICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzI3IG11bHRpcGx5ICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKworLS0tLS0gUXVhbnRpemU6CitkZGNhbjQwMSBxdWFudGl6ZSAgIzZlMzhmZjNmZmZmM2ZjZmYgMSAgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZgorZGRjYW40MDIgcXVhbnRpemUgICM2ZTM4ZmYzZmNmZjNmZGZmIDAgICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYKK2RkY2FuNDAzIHF1YW50aXplICAjNzg4MDAwMDAwMDAwMDAwMCBJbmYgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjQwNCBxdWFudGl6ZSAgIzc4MDIwMDAwMDAwMDAwMDAgLUluZiAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW40MTAgcXVhbnRpemUgICM3YzAzZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNDExIHF1YW50aXplICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjQxMiBxdWFudGl6ZSAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW40MTMgcXVhbnRpemUgICM3YzQwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNDE0IHF1YW50aXplICAjN2UwMGZmZmZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjQxNSBxdWFudGl6ZSAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW40MTYgcXVhbnRpemUgICM3ZTgwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNDE3IHF1YW50aXplICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIFN1YnRyYWN0OgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkZGNhbjUwMiBzdWJ0cmFjdCAgMEUrMzg0ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZgorZGRjYW41MDMgc3VidHJhY3QgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRSszODQgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKKy0tIHRpbnkgemVybworZGRjYW41MDQgc3VidHJhY3QgIDBFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorZGRjYW41MDUgc3VidHJhY3QgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRS0zOTggLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorLS0gdGlueSBub24gemVybworZGRjYW41MDYgc3VidHJhY3QgLTFFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorZGRjYW41MDcgc3VidHJhY3QgICAgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAtMUUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuNTExIHN1YnRyYWN0ICAwICAjN2MwM2ZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjUxMiBzdWJ0cmFjdCAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjUxMyBzdWJ0cmFjdCAgMCAgIzdjNDBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW41MTQgc3VidHJhY3QgICAgICM3YzQwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZGRjYW41MTUgc3VidHJhY3QgIDAgICM3ZTAwZmZmZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNTE2IHN1YnRyYWN0ICAgICAjN2UwMGZmZmZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCistLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjUxNyBzdWJ0cmFjdCAgMCAgIzdlODBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW41MTggc3VidHJhY3QgICAgICM3ZTgwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuNTIwIHN1YnRyYWN0ICAwICAjNzg4MDAwMDAwMDAwMDAwMCAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZGNhbjUyMSBzdWJ0cmFjdCAgICAgIzc4ODAwMDAwMDAwMDAwMDAgIDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cworZGRjYW41MjIgc3VidHJhY3QgIDAgICM3ODAyMDAwMDAwMDAwMDAwICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjMgc3VidHJhY3QgICAgICM3ODAyMDAwMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjQgc3VidHJhY3QgIDAgICM3ODAwMDAwMDAwMDAwMDAxICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjUgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDAwMDAxICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjYgc3VidHJhY3QgIDAgICM3ODAwMDAyMDAwMDAwMDAwICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW41Mjcgc3VidHJhY3QgICAgICM3ODAwMDAyMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorCistLS0tLSBUb0ludGVncmFsOgorZGRjYW42MDEgdG9pbnRlZ3JhbHggICM2ZTM4ZmYzZmZmZjNmY2ZmIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCitkZGNhbjYwMiB0b2ludGVncmFseCAgIzZlMzhmZjNmY2ZmM2ZkZmYgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYKK2RkY2FuNjAzIHRvaW50ZWdyYWx4ICAjNzg4MDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW42MDQgdG9pbnRlZ3JhbHggICM3ODAyMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjYxMCB0b2ludGVncmFseCAgIzdjMDNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNjExIHRvaW50ZWdyYWx4ICAjN2MwM2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW42MTIgdG9pbnRlZ3JhbHggICM3YzQwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjYxMyB0b2ludGVncmFseCAgIzdjNDBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNjE0IHRvaW50ZWdyYWx4ICAjN2UwMGZmZmZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW42MTUgdG9pbnRlZ3JhbHggICM3ZTAwZmZmZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjYxNiB0b2ludGVncmFseCAgIzdlODBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNjE3IHRvaW50ZWdyYWx4ICAjN2U4MGZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdW5jYW5vbmljYWwgMzk5OSwgMzkuOTksIDMuOTksIDAuMzk5LCBhbmQgbmVnYXRpdmVzCitkZGNhbjYxOCB0b2ludGVncmFseCAgIzIyMzgwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDBjZmYKK2RkY2FuNjE5IHRvaW50ZWdyYWx4ICAjMjIzMDAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMDA0MCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjIwIHRvaW50ZWdyYWx4ICAjMjIyYzAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMDAwNCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjIxIHRvaW50ZWdyYWx4ICAjMjIyODAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjIyIHRvaW50ZWdyYWx4ICAjYTIzODAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMGNmZgorZGRjYW42MjMgdG9pbnRlZ3JhbHggICNhMjMwMDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwMDQwIEluZXhhY3QgUm91bmRlZAorZGRjYW42MjQgdG9pbnRlZ3JhbHggICNhMjJjMDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwMDA0IEluZXhhY3QgUm91bmRlZAorZGRjYW42MjUgdG9pbnRlZ3JhbHggICNhMjI4MDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCisKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENsYXNzLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2xhc3MuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjM0YzQyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENsYXNzLmRlY1Rlc3QKQEAgLTAsMCArMSw3NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENsYXNzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIENsYXNzIG9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFtOZXcgMjAwNi4xMS4yN10KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZGNsYTAwMSAgY2xhc3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitkZGNsYTAwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitkZGNsYTAwMyAgY2xhc3MgICAgMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitkZGNsYTAwNCAgY2xhc3MgICAgMUUtMzk2ICAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2RkY2xhMDA1ICBjbGFzcyAgMC4xRS0zODMgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorZGRjbGEwMDYgIGNsYXNzICAwLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgICAtPiArU3Vibm9ybWFsCitkZGNsYTAwNyAgY2xhc3MgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDA4ICBjbGFzcyAgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMDkgIGNsYXNzICAgMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxMCAgY2xhc3MgICAxRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTMgIGNsYXNzICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxNCAgY2xhc3MgICAyLjUwICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTYgIGNsYXNzICAgMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxNyAgY2xhc3MgICAxRSszODQgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDE4ICBjbGFzcyAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgLT4gK05vcm1hbAorZGRjbGEwMTkgIGNsYXNzICAgSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiArSW5maW5pdHkKKworZGRjbGEwMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworZGRjbGEwMjIgIGNsYXNzICAgLTAuMDAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworZGRjbGEwMjMgIGNsYXNzICAgLTBFKzUgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworZGRjbGEwMjQgIGNsYXNzICAgLTFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitkZGNsYTAyNSAgY2xhc3MgIC0wLjFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2RkY2xhMDI2ICBjbGFzcyAgLTAuOTk5OTk5OTk5OTk5OTk5RS0zODMgICAgLT4gLVN1Ym5vcm1hbAorZGRjbGEwMjcgIGNsYXNzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAtPiAtTm9ybWFsCitkZGNsYTAyOCAgY2xhc3MgIC0xRS0zODMgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDI5ICBjbGFzcyAgLTFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzMiAgY2xhc3MgIC0xRS0xICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDMzICBjbGFzcyAgLTEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzNSAgY2xhc3MgIC0xMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDM2ICBjbGFzcyAgLTFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzcgIGNsYXNzICAtMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzOCAgY2xhc3MgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDM5ICBjbGFzcyAgLUluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2RkY2xhMDQxICBjbGFzcyAgIE5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitkZGNsYTA0MiAgY2xhc3MgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorZGRjbGEwNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4KK2RkY2xhMDQ0ICBjbGFzcyAgIHNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorZGRjbGEwNDUgIGNsYXNzICAtc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitkZGNsYTA0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4KKworCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZWJmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZS5kZWNUZXN0CkBAIC0wLDAgKzEsNzQ0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29tcGFyZS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uIHRoYXQgYWxsb3dzIHF1aWV0IE5hTnMgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZGNvbTAwMSBjb21wYXJlICAtMiAgLTIgIC0+IDAKK2RkY29tMDAyIGNvbXBhcmUgIC0yICAtMSAgLT4gLTEKK2RkY29tMDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTEKK2RkY29tMDA0IGNvbXBhcmUgIC0yICAgMSAgLT4gLTEKK2RkY29tMDA1IGNvbXBhcmUgIC0yICAgMiAgLT4gLTEKK2RkY29tMDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQorZGRjb20wMDcgY29tcGFyZSAgLTEgIC0xICAtPiAwCitkZGNvbTAwOCBjb21wYXJlICAtMSAgIDAgIC0+IC0xCitkZGNvbTAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xCitkZGNvbTAxMCBjb21wYXJlICAtMSAgIDIgIC0+IC0xCitkZGNvbTAxMSBjb21wYXJlICAgMCAgLTIgIC0+IDEKK2RkY29tMDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQorZGRjb20wMTMgY29tcGFyZSAgIDAgICAwICAtPiAwCitkZGNvbTAxNCBjb21wYXJlICAgMCAgIDEgIC0+IC0xCitkZGNvbTAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xCitkZGNvbTAxNiBjb21wYXJlICAgMSAgLTIgIC0+IDEKK2RkY29tMDE3IGNvbXBhcmUgICAxICAtMSAgLT4gMQorZGRjb20wMTggY29tcGFyZSAgIDEgICAwICAtPiAxCitkZGNvbTAxOSBjb21wYXJlICAgMSAgIDEgIC0+IDAKK2RkY29tMDIwIGNvbXBhcmUgICAxICAgMiAgLT4gLTEKK2RkY29tMDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQorZGRjb20wMjIgY29tcGFyZSAgIDIgIC0xICAtPiAxCitkZGNvbTAyMyBjb21wYXJlICAgMiAgIDAgIC0+IDEKK2RkY29tMDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQorZGRjb20wMjYgY29tcGFyZSAgIDIgICAyICAtPiAwCisKK2RkY29tMDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwCitkZGNvbTAzMiBjb21wYXJlICAtMjAgIC0xMCAgLT4gLTEKK2RkY29tMDMzIGNvbXBhcmUgIC0yMCAgIDAwICAtPiAtMQorZGRjb20wMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xCitkZGNvbTAzNSBjb21wYXJlICAtMjAgICAyMCAgLT4gLTEKK2RkY29tMDM2IGNvbXBhcmUgIC0xMCAgLTIwICAtPiAxCitkZGNvbTAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMAorZGRjb20wMzggY29tcGFyZSAgLTEwICAgMDAgIC0+IC0xCitkZGNvbTAzOSBjb21wYXJlICAtMTAgICAxMCAgLT4gLTEKK2RkY29tMDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQorZGRjb20wNDEgY29tcGFyZSAgIDAwICAtMjAgIC0+IDEKK2RkY29tMDQyIGNvbXBhcmUgICAwMCAgLTEwICAtPiAxCitkZGNvbTA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMAorZGRjb20wNDQgY29tcGFyZSAgIDAwICAgMTAgIC0+IC0xCitkZGNvbTA0NSBjb21wYXJlICAgMDAgICAyMCAgLT4gLTEKK2RkY29tMDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxCitkZGNvbTA0NyBjb21wYXJlICAgMTAgIC0xMCAgLT4gMQorZGRjb20wNDggY29tcGFyZSAgIDEwICAgMDAgIC0+IDEKK2RkY29tMDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwCitkZGNvbTA1MCBjb21wYXJlICAgMTAgICAyMCAgLT4gLTEKK2RkY29tMDUxIGNvbXBhcmUgICAyMCAgLTIwICAtPiAxCitkZGNvbTA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQorZGRjb20wNTMgY29tcGFyZSAgIDIwICAgMDAgIC0+IDEKK2RkY29tMDU1IGNvbXBhcmUgICAyMCAgIDEwICAtPiAxCitkZGNvbTA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMAorCitkZGNvbTA2MSBjb21wYXJlICAtMi4wICAtMi4wICAtPiAwCitkZGNvbTA2MiBjb21wYXJlICAtMi4wICAtMS4wICAtPiAtMQorZGRjb20wNjMgY29tcGFyZSAgLTIuMCAgIDAuMCAgLT4gLTEKK2RkY29tMDY0IGNvbXBhcmUgIC0yLjAgICAxLjAgIC0+IC0xCitkZGNvbTA2NSBjb21wYXJlICAtMi4wICAgMi4wICAtPiAtMQorZGRjb20wNjYgY29tcGFyZSAgLTEuMCAgLTIuMCAgLT4gMQorZGRjb20wNjcgY29tcGFyZSAgLTEuMCAgLTEuMCAgLT4gMAorZGRjb20wNjggY29tcGFyZSAgLTEuMCAgIDAuMCAgLT4gLTEKK2RkY29tMDY5IGNvbXBhcmUgIC0xLjAgICAxLjAgIC0+IC0xCitkZGNvbTA3MCBjb21wYXJlICAtMS4wICAgMi4wICAtPiAtMQorZGRjb20wNzEgY29tcGFyZSAgIDAuMCAgLTIuMCAgLT4gMQorZGRjb20wNzIgY29tcGFyZSAgIDAuMCAgLTEuMCAgLT4gMQorZGRjb20wNzMgY29tcGFyZSAgIDAuMCAgIDAuMCAgLT4gMAorZGRjb20wNzQgY29tcGFyZSAgIDAuMCAgIDEuMCAgLT4gLTEKK2RkY29tMDc1IGNvbXBhcmUgICAwLjAgICAyLjAgIC0+IC0xCitkZGNvbTA3NiBjb21wYXJlICAgMS4wICAtMi4wICAtPiAxCitkZGNvbTA3NyBjb21wYXJlICAgMS4wICAtMS4wICAtPiAxCitkZGNvbTA3OCBjb21wYXJlICAgMS4wICAgMC4wICAtPiAxCitkZGNvbTA3OSBjb21wYXJlICAgMS4wICAgMS4wICAtPiAwCitkZGNvbTA4MCBjb21wYXJlICAgMS4wICAgMi4wICAtPiAtMQorZGRjb20wODEgY29tcGFyZSAgIDIuMCAgLTIuMCAgLT4gMQorZGRjb20wODIgY29tcGFyZSAgIDIuMCAgLTEuMCAgLT4gMQorZGRjb20wODMgY29tcGFyZSAgIDIuMCAgIDAuMCAgLT4gMQorZGRjb20wODUgY29tcGFyZSAgIDIuMCAgIDEuMCAgLT4gMQorZGRjb20wODYgY29tcGFyZSAgIDIuMCAgIDIuMCAgLT4gMAorZGRjb20wODcgY29tcGFyZSAgIDEuMCAgIDAuMSAgLT4gMQorZGRjb20wODggY29tcGFyZSAgIDAuMSAgIDEuMCAgLT4gLTEKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkZGNvbTA5NSBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDAKK2RkY29tMDk2IGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTEKK2RkY29tMDk3IGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQorZGRjb20wOTggY29tcGFyZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworZGRjb20xMDAgY29tcGFyZSAgIDcuMCAgICA3LjAgICAgLT4gMAorZGRjb20xMDEgY29tcGFyZSAgIDcuMCAgICA3ICAgICAgLT4gMAorZGRjb20xMDIgY29tcGFyZSAgIDcgICAgICA3LjAgICAgLT4gMAorZGRjb20xMDMgY29tcGFyZSAgIDdFKzAgICA3LjAgICAgLT4gMAorZGRjb20xMDQgY29tcGFyZSAgIDcwRS0xICA3LjAgICAgLT4gMAorZGRjb20xMDUgY29tcGFyZSAgIDAuN0UrMSA3ICAgICAgLT4gMAorZGRjb20xMDYgY29tcGFyZSAgIDcwRS0xICA3ICAgICAgLT4gMAorZGRjb20xMDcgY29tcGFyZSAgIDcuMCAgICA3RSswICAgLT4gMAorZGRjb20xMDggY29tcGFyZSAgIDcuMCAgICA3MEUtMSAgLT4gMAorZGRjb20xMDkgY29tcGFyZSAgIDcgICAgICAwLjdFKzEgLT4gMAorZGRjb20xMTAgY29tcGFyZSAgIDcgICAgICA3MEUtMSAgLT4gMAorCitkZGNvbTEyMCBjb21wYXJlICAgOC4wICAgIDcuMCAgICAtPiAxCitkZGNvbTEyMSBjb21wYXJlICAgOC4wICAgIDcgICAgICAtPiAxCitkZGNvbTEyMiBjb21wYXJlICAgOCAgICAgIDcuMCAgICAtPiAxCitkZGNvbTEyMyBjb21wYXJlICAgOEUrMCAgIDcuMCAgICAtPiAxCitkZGNvbTEyNCBjb21wYXJlICAgODBFLTEgIDcuMCAgICAtPiAxCitkZGNvbTEyNSBjb21wYXJlICAgMC44RSsxIDcgICAgICAtPiAxCitkZGNvbTEyNiBjb21wYXJlICAgODBFLTEgIDcgICAgICAtPiAxCitkZGNvbTEyNyBjb21wYXJlICAgOC4wICAgIDdFKzAgICAtPiAxCitkZGNvbTEyOCBjb21wYXJlICAgOC4wICAgIDcwRS0xICAtPiAxCitkZGNvbTEyOSBjb21wYXJlICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZGRjb20xMzAgY29tcGFyZSAgIDggICAgICA3MEUtMSAgLT4gMQorCitkZGNvbTE0MCBjb21wYXJlICAgOC4wICAgIDkuMCAgICAtPiAtMQorZGRjb20xNDEgY29tcGFyZSAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RkY29tMTQyIGNvbXBhcmUgICA4ICAgICAgOS4wICAgIC0+IC0xCitkZGNvbTE0MyBjb21wYXJlICAgOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjb20xNDQgY29tcGFyZSAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RkY29tMTQ1IGNvbXBhcmUgICAwLjhFKzEgOSAgICAgIC0+IC0xCitkZGNvbTE0NiBjb21wYXJlICAgODBFLTEgIDkgICAgICAtPiAtMQorZGRjb20xNDcgY29tcGFyZSAgIDguMCAgICA5RSswICAgLT4gLTEKK2RkY29tMTQ4IGNvbXBhcmUgICA4LjAgICAgOTBFLTEgIC0+IC0xCitkZGNvbTE0OSBjb21wYXJlICAgOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjb20xNTAgY29tcGFyZSAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZGRjb20yMDAgY29tcGFyZSAgLTcuMCAgICA3LjAgICAgLT4gLTEKK2RkY29tMjAxIGNvbXBhcmUgIC03LjAgICAgNyAgICAgIC0+IC0xCitkZGNvbTIwMiBjb21wYXJlICAtNyAgICAgIDcuMCAgICAtPiAtMQorZGRjb20yMDMgY29tcGFyZSAgLTdFKzAgICA3LjAgICAgLT4gLTEKK2RkY29tMjA0IGNvbXBhcmUgIC03MEUtMSAgNy4wICAgIC0+IC0xCitkZGNvbTIwNSBjb21wYXJlICAtMC43RSsxIDcgICAgICAtPiAtMQorZGRjb20yMDYgY29tcGFyZSAgLTcwRS0xICA3ICAgICAgLT4gLTEKK2RkY29tMjA3IGNvbXBhcmUgIC03LjAgICAgN0UrMCAgIC0+IC0xCitkZGNvbTIwOCBjb21wYXJlICAtNy4wICAgIDcwRS0xICAtPiAtMQorZGRjb20yMDkgY29tcGFyZSAgLTcgICAgICAwLjdFKzEgLT4gLTEKK2RkY29tMjEwIGNvbXBhcmUgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2RkY29tMjIwIGNvbXBhcmUgIC04LjAgICAgNy4wICAgIC0+IC0xCitkZGNvbTIyMSBjb21wYXJlICAtOC4wICAgIDcgICAgICAtPiAtMQorZGRjb20yMjIgY29tcGFyZSAgLTggICAgICA3LjAgICAgLT4gLTEKK2RkY29tMjIzIGNvbXBhcmUgIC04RSswICAgNy4wICAgIC0+IC0xCitkZGNvbTIyNCBjb21wYXJlICAtODBFLTEgIDcuMCAgICAtPiAtMQorZGRjb20yMjUgY29tcGFyZSAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2RkY29tMjI2IGNvbXBhcmUgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkZGNvbTIyNyBjb21wYXJlICAtOC4wICAgIDdFKzAgICAtPiAtMQorZGRjb20yMjggY29tcGFyZSAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2RkY29tMjI5IGNvbXBhcmUgIC04ICAgICAgMC43RSsxIC0+IC0xCitkZGNvbTIzMCBjb21wYXJlICAtOCAgICAgIDcwRS0xICAtPiAtMQorCitkZGNvbTI0MCBjb21wYXJlICAtOC4wICAgIDkuMCAgICAtPiAtMQorZGRjb20yNDEgY29tcGFyZSAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RkY29tMjQyIGNvbXBhcmUgIC04ICAgICAgOS4wICAgIC0+IC0xCitkZGNvbTI0MyBjb21wYXJlICAtOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjb20yNDQgY29tcGFyZSAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RkY29tMjQ1IGNvbXBhcmUgIC0wLjhFKzEgOSAgICAgIC0+IC0xCitkZGNvbTI0NiBjb21wYXJlICAtODBFLTEgIDkgICAgICAtPiAtMQorZGRjb20yNDcgY29tcGFyZSAgLTguMCAgICA5RSswICAgLT4gLTEKK2RkY29tMjQ4IGNvbXBhcmUgIC04LjAgICAgOTBFLTEgIC0+IC0xCitkZGNvbTI0OSBjb21wYXJlICAtOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjb20yNTAgY29tcGFyZSAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZGRjb20zMDAgY29tcGFyZSAgIDcuMCAgICAtNy4wICAgIC0+IDEKK2RkY29tMzAxIGNvbXBhcmUgICA3LjAgICAgLTcgICAgICAtPiAxCitkZGNvbTMwMiBjb21wYXJlICAgNyAgICAgIC03LjAgICAgLT4gMQorZGRjb20zMDMgY29tcGFyZSAgIDdFKzAgICAtNy4wICAgIC0+IDEKK2RkY29tMzA0IGNvbXBhcmUgICA3MEUtMSAgLTcuMCAgICAtPiAxCitkZGNvbTMwNSBjb21wYXJlICAgLjdFKzEgIC03ICAgICAgLT4gMQorZGRjb20zMDYgY29tcGFyZSAgIDcwRS0xICAtNyAgICAgIC0+IDEKK2RkY29tMzA3IGNvbXBhcmUgICA3LjAgICAgLTdFKzAgICAtPiAxCitkZGNvbTMwOCBjb21wYXJlICAgNy4wICAgIC03MEUtMSAgLT4gMQorZGRjb20zMDkgY29tcGFyZSAgIDcgICAgICAtLjdFKzEgIC0+IDEKK2RkY29tMzEwIGNvbXBhcmUgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2RkY29tMzIwIGNvbXBhcmUgICA4LjAgICAgLTcuMCAgICAtPiAxCitkZGNvbTMyMSBjb21wYXJlICAgOC4wICAgIC03ICAgICAgLT4gMQorZGRjb20zMjIgY29tcGFyZSAgIDggICAgICAtNy4wICAgIC0+IDEKK2RkY29tMzIzIGNvbXBhcmUgICA4RSswICAgLTcuMCAgICAtPiAxCitkZGNvbTMyNCBjb21wYXJlICAgODBFLTEgIC03LjAgICAgLT4gMQorZGRjb20zMjUgY29tcGFyZSAgIC44RSsxICAtNyAgICAgIC0+IDEKK2RkY29tMzI2IGNvbXBhcmUgICA4MEUtMSAgLTcgICAgICAtPiAxCitkZGNvbTMyNyBjb21wYXJlICAgOC4wICAgIC03RSswICAgLT4gMQorZGRjb20zMjggY29tcGFyZSAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2RkY29tMzI5IGNvbXBhcmUgICA4ICAgICAgLS43RSsxICAtPiAxCitkZGNvbTMzMCBjb21wYXJlICAgOCAgICAgIC03MEUtMSAgLT4gMQorCitkZGNvbTM0MCBjb21wYXJlICAgOC4wICAgIC05LjAgICAgLT4gMQorZGRjb20zNDEgY29tcGFyZSAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RkY29tMzQyIGNvbXBhcmUgICA4ICAgICAgLTkuMCAgICAtPiAxCitkZGNvbTM0MyBjb21wYXJlICAgOEUrMCAgIC05LjAgICAgLT4gMQorZGRjb20zNDQgY29tcGFyZSAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RkY29tMzQ1IGNvbXBhcmUgICAuOEUrMSAgLTkgICAgICAtPiAxCitkZGNvbTM0NiBjb21wYXJlICAgODBFLTEgIC05ICAgICAgLT4gMQorZGRjb20zNDcgY29tcGFyZSAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RkY29tMzQ4IGNvbXBhcmUgICA4LjAgICAgLTkwRS0xICAtPiAxCitkZGNvbTM0OSBjb21wYXJlICAgOCAgICAgIC0uOUUrMSAgLT4gMQorZGRjb20zNTAgY29tcGFyZSAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZGRjb200MDAgY29tcGFyZSAgIC03LjAgICAgLTcuMCAgICAtPiAwCitkZGNvbTQwMSBjb21wYXJlICAgLTcuMCAgICAtNyAgICAgIC0+IDAKK2RkY29tNDAyIGNvbXBhcmUgICAtNyAgICAgIC03LjAgICAgLT4gMAorZGRjb200MDMgY29tcGFyZSAgIC03RSswICAgLTcuMCAgICAtPiAwCitkZGNvbTQwNCBjb21wYXJlICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RkY29tNDA1IGNvbXBhcmUgICAtLjdFKzEgIC03ICAgICAgLT4gMAorZGRjb200MDYgY29tcGFyZSAgIC03MEUtMSAgLTcgICAgICAtPiAwCitkZGNvbTQwNyBjb21wYXJlICAgLTcuMCAgICAtN0UrMCAgIC0+IDAKK2RkY29tNDA4IGNvbXBhcmUgICAtNy4wICAgIC03MEUtMSAgLT4gMAorZGRjb200MDkgY29tcGFyZSAgIC03ICAgICAgLS43RSsxICAtPiAwCitkZGNvbTQxMCBjb21wYXJlICAgLTcgICAgICAtNzBFLTEgIC0+IDAKKworZGRjb200MjAgY29tcGFyZSAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZGRjb200MjEgY29tcGFyZSAgIC04LjAgICAgLTcgICAgICAtPiAtMQorZGRjb200MjIgY29tcGFyZSAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorZGRjb200MjMgY29tcGFyZSAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZGRjb200MjQgY29tcGFyZSAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQorZGRjb200MjUgY29tcGFyZSAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorZGRjb200MjYgY29tcGFyZSAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZGRjb200MjcgY29tcGFyZSAgIC04LjAgICAgLTdFKzAgICAtPiAtMQorZGRjb200MjggY29tcGFyZSAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorZGRjb200MjkgY29tcGFyZSAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZGRjb200MzAgY29tcGFyZSAgIC04ICAgICAgLTcwRS0xICAtPiAtMQorCitkZGNvbTQ0MCBjb21wYXJlICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2RkY29tNDQxIGNvbXBhcmUgICAtOC4wICAgIC05ICAgICAgLT4gMQorZGRjb200NDIgY29tcGFyZSAgIC04ICAgICAgLTkuMCAgICAtPiAxCitkZGNvbTQ0MyBjb21wYXJlICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2RkY29tNDQ0IGNvbXBhcmUgICAtODBFLTEgIC05LjAgICAgLT4gMQorZGRjb200NDUgY29tcGFyZSAgIC0uOEUrMSAgLTkgICAgICAtPiAxCitkZGNvbTQ0NiBjb21wYXJlICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2RkY29tNDQ3IGNvbXBhcmUgICAtOC4wICAgIC05RSswICAgLT4gMQorZGRjb200NDggY29tcGFyZSAgIC04LjAgICAgLTkwRS0xICAtPiAxCitkZGNvbTQ0OSBjb21wYXJlICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2RkY29tNDUwIGNvbXBhcmUgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK2RkY29tNDUxIGNvbXBhcmUgICAgICAxLjAgICAgICAgMC4xICAtPiAxCitkZGNvbTQ1MiBjb21wYXJlICAgICAgMC4xICAgICAgIDEuMCAgLT4gLTEKK2RkY29tNDUzIGNvbXBhcmUgICAgIDEwLjAgICAgICAgMC4xICAtPiAxCitkZGNvbTQ1NCBjb21wYXJlICAgICAgMC4xICAgICAgMTAuMCAgLT4gLTEKK2RkY29tNDU1IGNvbXBhcmUgICAgICAxMDAgICAgICAgMS4wICAtPiAxCitkZGNvbTQ1NiBjb21wYXJlICAgICAgMS4wICAgICAgIDEwMCAgLT4gLTEKK2RkY29tNDU3IGNvbXBhcmUgICAgIDEwMDAgICAgICAxMC4wICAtPiAxCitkZGNvbTQ1OCBjb21wYXJlICAgICAxMC4wICAgICAgMTAwMCAgLT4gLTEKK2RkY29tNDU5IGNvbXBhcmUgICAgMTAwMDAgICAgIDEwMC4wICAtPiAxCitkZGNvbTQ2MCBjb21wYXJlICAgIDEwMC4wICAgICAxMDAwMCAgLT4gLTEKK2RkY29tNDYxIGNvbXBhcmUgICAxMDAwMDAgICAgMTAwMC4wICAtPiAxCitkZGNvbTQ2MiBjb21wYXJlICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gLTEKK2RkY29tNDYzIGNvbXBhcmUgIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxCitkZGNvbTQ2NCBjb21wYXJlICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gLTEKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitkZGNvbTQ3MyBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ3NCBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKK2RkY29tNDc1IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ3NiBjb21wYXJlIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ3NyBjb21wYXJlIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY29tNDc4IGNvbXBhcmUgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ3OSBjb21wYXJlIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ4MCBjb21wYXJlIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKK2RkY29tNDgxIGNvbXBhcmUgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ4MiBjb21wYXJlIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ4MyBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY29tNDg3IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDAKK2RkY29tNDg4IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMAorZGRjb200ODkgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDAKK2RkY29tNDkwIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDAKK2RkY29tNDkxIGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMAorZGRjb200OTIgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDAKK2RkY29tNDkzIGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDAKK2RkY29tNDk0IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMAorZGRjb200OTUgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDAKK2RkY29tNDk2IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDAKK2RkY29tNDk3IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitkZGNvbTUwMCBjb21wYXJlICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2RkY29tNTAxIGNvbXBhcmUgICAgMSAgICAgMUUtMTQgICAgLT4gMQorZGRjb201MDIgY29tcGFyZSAgICAxICAgICAxRS0xMyAgICAtPiAxCitkZGNvbTUwMyBjb21wYXJlICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2RkY29tNTA0IGNvbXBhcmUgICAgMSAgICAgMUUtMTEgICAgLT4gMQorZGRjb201MDUgY29tcGFyZSAgICAxICAgICAxRS0xMCAgICAtPiAxCitkZGNvbTUwNiBjb21wYXJlICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2RkY29tNTA3IGNvbXBhcmUgICAgMSAgICAgMUUtOCAgICAgLT4gMQorZGRjb201MDggY29tcGFyZSAgICAxICAgICAxRS03ICAgICAtPiAxCitkZGNvbTUwOSBjb21wYXJlICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2RkY29tNTEwIGNvbXBhcmUgICAgMSAgICAgMUUtNSAgICAgLT4gMQorZGRjb201MTEgY29tcGFyZSAgICAxICAgICAxRS00ICAgICAtPiAxCitkZGNvbTUxMiBjb21wYXJlICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2RkY29tNTEzIGNvbXBhcmUgICAgMSAgICAgMUUtMiAgICAgLT4gMQorZGRjb201MTQgY29tcGFyZSAgICAxICAgICAxRS0xICAgICAtPiAxCitkZGNvbTUxNSBjb21wYXJlICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2RkY29tNTE2IGNvbXBhcmUgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2RkY29tNTE3IGNvbXBhcmUgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY29tNTE4IGNvbXBhcmUgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2RkY29tNTE5IGNvbXBhcmUgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2RkY29tNTIxIGNvbXBhcmUgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RkY29tNTIyIGNvbXBhcmUgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2RkY29tNTIzIGNvbXBhcmUgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2RkY29tNTI0IGNvbXBhcmUgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RkY29tNTI1IGNvbXBhcmUgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2RkY29tNTI2IGNvbXBhcmUgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2RkY29tNTI3IGNvbXBhcmUgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RkY29tNTI4IGNvbXBhcmUgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2RkY29tNTI5IGNvbXBhcmUgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2RkY29tNTMwIGNvbXBhcmUgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RkY29tNTMxIGNvbXBhcmUgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RkY29tNTQwIGNvbXBhcmUgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RkY29tNTQxIGNvbXBhcmUgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKK2RkY29tNTQyIGNvbXBhcmUgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2RkY29tNTQzIGNvbXBhcmUgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ0IGNvbXBhcmUgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ1IGNvbXBhcmUgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ2IGNvbXBhcmUgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ3IGNvbXBhcmUgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ4IGNvbXBhcmUgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2RkY29tNTQ5IGNvbXBhcmUgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RkY29tNTUwIGNvbXBhcmUgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKK2RkY29tNTUxIGNvbXBhcmUgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2RkY29tNTUyIGNvbXBhcmUgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RkY29tNTUzIGNvbXBhcmUgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKK2RkY29tNTU0IGNvbXBhcmUgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2RkY29tNTU1IGNvbXBhcmUgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RkY29tNTU2IGNvbXBhcmUgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKK2RkY29tNTU3IGNvbXBhcmUgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2RkY29tNTU4IGNvbXBhcmUgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RkY29tNTU5IGNvbXBhcmUgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKK2RkY29tNTYxIGNvbXBhcmUgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2RkY29tNTYyIGNvbXBhcmUgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RkY29tNTYzIGNvbXBhcmUgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKK2RkY29tNTY0IGNvbXBhcmUgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2RkY29tNTY1IGNvbXBhcmUgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RkY29tNTY2IGNvbXBhcmUgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKK2RkY29tNTY3IGNvbXBhcmUgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2RkY29tNTY4IGNvbXBhcmUgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RkY29tNTY5IGNvbXBhcmUgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKK2RkY29tNTcwIGNvbXBhcmUgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2RkY29tNTcxIGNvbXBhcmUgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorZGRjb201ODAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RkY29tNTgxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitkZGNvbTU4MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorZGRjb201ODMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RkY29tNTg0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitkZGNvbTU4NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorZGRjb201ODYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RkY29tNTg3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitkZGNvbTU4OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorZGRjb201ODkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkZGNvbTU5MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2RkY29tNTkxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorZGRjb201OTIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkZGNvbTU5MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2RkY29tNTk0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorZGRjb201OTUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkZGNvbTU5NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2RkY29tNTk3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorZGRjb201OTggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNvbTU5OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK2RkY29tNjAwIGNvbXBhcmUgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjAxIGNvbXBhcmUgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjAyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjAzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjA5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2RkY29tNjEwIGNvbXBhcmUgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RkY29tNjExIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2RkY29tNjEyIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2RkY29tNjEzIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RkY29tNjE0IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2RkY29tNjE1IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2RkY29tNjE2IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RkY29tNjE3IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2RkY29tNjE4IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2RkY29tNjE5IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RkY29tNjIwIGNvbXBhcmUgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjIxIGNvbXBhcmUgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjIyIGNvbXBhcmUgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjIzIGNvbXBhcmUgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI0IGNvbXBhcmUgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI1IGNvbXBhcmUgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI2IGNvbXBhcmUgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI3IGNvbXBhcmUgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI4IGNvbXBhcmUgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjI5IGNvbXBhcmUgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2RkY29tNjMwIGNvbXBhcmUgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2RkY29tNjMxIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RkY29tNjMyIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2RkY29tNjMzIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2RkY29tNjM0IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RkY29tNjM1IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2RkY29tNjM2IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2RkY29tNjM3IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RkY29tNjM4IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2RkY29tNjM5IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkY29tNjQwIGNvbXBhcmUgICAwICAgICAwICAgLT4gMAorZGRjb202NDEgY29tcGFyZSAgIDAgICAgLTAgICAtPiAwCitkZGNvbTY0MiBjb21wYXJlICAgMCAgICAtMC4wIC0+IDAKK2RkY29tNjQzIGNvbXBhcmUgICAwICAgICAwLjAgLT4gMAorZGRjb202NDQgY29tcGFyZSAgLTAgICAgIDAgICAtPiAwCitkZGNvbTY0NSBjb21wYXJlICAtMCAgICAtMCAgIC0+IDAKK2RkY29tNjQ2IGNvbXBhcmUgIC0wICAgIC0wLjAgLT4gMAorZGRjb202NDcgY29tcGFyZSAgLTAgICAgIDAuMCAtPiAwCitkZGNvbTY0OCBjb21wYXJlICAgMC4wICAgMCAgIC0+IDAKK2RkY29tNjQ5IGNvbXBhcmUgICAwLjAgIC0wICAgLT4gMAorZGRjb202NTAgY29tcGFyZSAgIDAuMCAgLTAuMCAtPiAwCitkZGNvbTY1MSBjb21wYXJlICAgMC4wICAgMC4wIC0+IDAKK2RkY29tNjUyIGNvbXBhcmUgIC0wLjAgICAwICAgLT4gMAorZGRjb202NTMgY29tcGFyZSAgLTAuMCAgLTAgICAtPiAwCitkZGNvbTY1NCBjb21wYXJlICAtMC4wICAtMC4wIC0+IDAKK2RkY29tNjU1IGNvbXBhcmUgIC0wLjAgICAwLjAgLT4gMAorCitkZGNvbTY1NiBjb21wYXJlICAtMEUxICAgMC4wIC0+IDAKK2RkY29tNjU3IGNvbXBhcmUgIC0wRTIgICAwLjAgLT4gMAorZGRjb202NTggY29tcGFyZSAgIDBFMSAgIDAuMCAtPiAwCitkZGNvbTY1OSBjb21wYXJlICAgMEUyICAgMC4wIC0+IDAKK2RkY29tNjYwIGNvbXBhcmUgIC0wRTEgICAwICAgLT4gMAorZGRjb202NjEgY29tcGFyZSAgLTBFMiAgIDAgICAtPiAwCitkZGNvbTY2MiBjb21wYXJlICAgMEUxICAgMCAgIC0+IDAKK2RkY29tNjYzIGNvbXBhcmUgICAwRTIgICAwICAgLT4gMAorZGRjb202NjQgY29tcGFyZSAgLTBFMSAgLTBFMSAtPiAwCitkZGNvbTY2NSBjb21wYXJlICAtMEUyICAtMEUxIC0+IDAKK2RkY29tNjY2IGNvbXBhcmUgICAwRTEgIC0wRTEgLT4gMAorZGRjb202NjcgY29tcGFyZSAgIDBFMiAgLTBFMSAtPiAwCitkZGNvbTY2OCBjb21wYXJlICAtMEUxICAtMEUyIC0+IDAKK2RkY29tNjY5IGNvbXBhcmUgIC0wRTIgIC0wRTIgLT4gMAorZGRjb202NzAgY29tcGFyZSAgIDBFMSAgLTBFMiAtPiAwCitkZGNvbTY3MSBjb21wYXJlICAgMEUyICAtMEUyIC0+IDAKK2RkY29tNjcyIGNvbXBhcmUgIC0wRTEgICAwRTEgLT4gMAorZGRjb202NzMgY29tcGFyZSAgLTBFMiAgIDBFMSAtPiAwCitkZGNvbTY3NCBjb21wYXJlICAgMEUxICAgMEUxIC0+IDAKK2RkY29tNjc1IGNvbXBhcmUgICAwRTIgICAwRTEgLT4gMAorZGRjb202NzYgY29tcGFyZSAgLTBFMSAgIDBFMiAtPiAwCitkZGNvbTY3NyBjb21wYXJlICAtMEUyICAgMEUyIC0+IDAKK2RkY29tNjc4IGNvbXBhcmUgICAwRTEgICAwRTIgLT4gMAorZGRjb202NzkgY29tcGFyZSAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RkY29tNjgwIGNvbXBhcmUgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZGRjb202ODEgY29tcGFyZSAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwCitkZGNvbTY4MiBjb21wYXJlICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKK2RkY29tNjgzIGNvbXBhcmUgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAorZGRjb202ODQgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwCitkZGNvbTY4NSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKK2RkY29tNjg2IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAorZGRjb202ODcgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwCitkZGNvbTY4OCBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKK2RkY29tNjg5IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAorZGRjb202OTAgY29tcGFyZSAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCitkZGNvbTY5MSBjb21wYXJlICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKK2RkY29tNjkyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAorZGRjb202OTMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwCitkZGNvbTY5NCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKK2RkY29tNjk1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAorZGRjb202OTYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwCitkZGNvbTY5NyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKK2RkY29tNjk4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAorZGRjb202OTkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwCisKKy0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdAorZGRjb203MDAgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NSAtPiAxCitkZGNvbTcwMSBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDAKK2RkY29tNzAyIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTcgLT4gLTEKK2RkY29tNzAzIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDAyMzQ1Njc4OTAxMjM0NTYgLT4gMQorZGRjb203MDQgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwCitkZGNvbTcwNSBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAyMjM0NTY3ODkwMTIzNDU2IC0+IC0xCitkZGNvbTcwNiBjb21wYXJlICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMDM0NTY3ODkwMTIzNDU2IC0+IDEKK2RkY29tNzA3IGNvbXBhcmUgICAxMTM0NTY3ODkwMTIzNDU2IDExMzQ1Njc4OTAxMjM0NTYgLT4gMAorZGRjb203MDggY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQorCistLSBtaXNjZWxsYW5lb3VzCitkZGNvbTcyMSBjb21wYXJlIDEyMzQ1Njc4MDAwIDEgLT4gMQorZGRjb203MjIgY29tcGFyZSAxIDEyMzQ1Njc4MDAwIC0+IC0xCitkZGNvbTcyMyBjb21wYXJlIDEyMzQ1Njc4MDAgIDEgLT4gMQorZGRjb203MjQgY29tcGFyZSAxIDEyMzQ1Njc4MDAgIC0+IC0xCitkZGNvbTcyNSBjb21wYXJlIDEyMzQ1Njc4OTAgIDEgLT4gMQorZGRjb203MjYgY29tcGFyZSAxIDEyMzQ1Njc4OTAgIC0+IC0xCitkZGNvbTcyNyBjb21wYXJlIDEyMzQ1Njc4OTEgIDEgLT4gMQorZGRjb203MjggY29tcGFyZSAxIDEyMzQ1Njc4OTEgIC0+IC0xCitkZGNvbTcyOSBjb21wYXJlIDEyMzQ1Njc4OTAxIDEgLT4gMQorZGRjb203MzAgY29tcGFyZSAxIDEyMzQ1Njc4OTAxIC0+IC0xCitkZGNvbTczMSBjb21wYXJlIDEyMzQ1Njc4OTYgIDEgLT4gMQorZGRjb203MzIgY29tcGFyZSAxIDEyMzQ1Njc4OTYgIC0+IC0xCisKKy0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uCitkZGNvbTc0MCBjb21wYXJlICAxICAwLjk5OTk5OTkgIC0+IDEKK2RkY29tNzQxIGNvbXBhcmUgIDEgIDAuOTk5OTk5ICAgLT4gMQorZGRjb203NDIgY29tcGFyZSAgMSAgMC45OTk5OSAgICAtPiAxCitkZGNvbTc0MyBjb21wYXJlICAxICAxLjAwMDAgICAgIC0+IDAKK2RkY29tNzQ0IGNvbXBhcmUgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RkY29tNzQ1IGNvbXBhcmUgIDEgIDEuMDAwMDAxICAgLT4gLTEKK2RkY29tNzQ2IGNvbXBhcmUgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2RkY29tNzUwIGNvbXBhcmUgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RkY29tNzUxIGNvbXBhcmUgIDAuOTk5OTk5ICAgMSAgLT4gLTEKK2RkY29tNzUyIGNvbXBhcmUgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2RkY29tNzUzIGNvbXBhcmUgIDEuMDAwMCAgICAgMSAgLT4gMAorZGRjb203NTQgY29tcGFyZSAgMS4wMDAwMSAgICAxICAtPiAxCitkZGNvbTc1NSBjb21wYXJlICAxLjAwMDAwMSAgIDEgIC0+IDEKK2RkY29tNzU2IGNvbXBhcmUgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBTcGVjaWFscworZGRjb203ODAgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDEKK2RkY29tNzgxIGNvbXBhcmUgIEluZiAgLTEwMDAgIC0+ICAxCitkZGNvbTc4MiBjb21wYXJlICBJbmYgIC0xICAgICAtPiAgMQorZGRjb203ODMgY29tcGFyZSAgSW5mICAtMCAgICAgLT4gIDEKK2RkY29tNzg0IGNvbXBhcmUgIEluZiAgIDAgICAgIC0+ICAxCitkZGNvbTc4NSBjb21wYXJlICBJbmYgICAxICAgICAtPiAgMQorZGRjb203ODYgY29tcGFyZSAgSW5mICAgMTAwMCAgLT4gIDEKK2RkY29tNzg3IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwCitkZGNvbTc4OCBjb21wYXJlIC0xMDAwICBJbmYgICAtPiAtMQorZGRjb203ODkgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTEKK2RkY29tNzkwIGNvbXBhcmUgLTEgICAgIEluZiAgIC0+IC0xCitkZGNvbTc5MSBjb21wYXJlIC0wICAgICBJbmYgICAtPiAtMQorZGRjb203OTIgY29tcGFyZSAgMCAgICAgSW5mICAgLT4gLTEKK2RkY29tNzkzIGNvbXBhcmUgIDEgICAgIEluZiAgIC0+IC0xCitkZGNvbTc5NCBjb21wYXJlICAxMDAwICBJbmYgICAtPiAtMQorZGRjb203OTUgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDAKKworZGRjb204MDAgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDAKK2RkY29tODAxIGNvbXBhcmUgLUluZiAgLTEwMDAgIC0+IC0xCitkZGNvbTgwMiBjb21wYXJlIC1JbmYgIC0xICAgICAtPiAtMQorZGRjb204MDMgY29tcGFyZSAtSW5mICAtMCAgICAgLT4gLTEKK2RkY29tODA0IGNvbXBhcmUgLUluZiAgIDAgICAgIC0+IC0xCitkZGNvbTgwNSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAtMQorZGRjb204MDYgY29tcGFyZSAtSW5mICAgMTAwMCAgLT4gLTEKK2RkY29tODA3IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCitkZGNvbTgwOCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjb204MDkgY29tcGFyZSAtMTAwMCAtSW5mICAgLT4gIDEKK2RkY29tODEwIGNvbXBhcmUgLTEgICAgLUluZiAgIC0+ICAxCitkZGNvbTgxMSBjb21wYXJlIC0wICAgIC1JbmYgICAtPiAgMQorZGRjb204MTIgY29tcGFyZSAgMCAgICAtSW5mICAgLT4gIDEKK2RkY29tODEzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAxCitkZGNvbTgxNCBjb21wYXJlICAxMDAwIC1JbmYgICAtPiAgMQorZGRjb204MTUgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDEKKworZGRjb204MjEgY29tcGFyZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRjb204MjIgY29tcGFyZSAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRjb204MjMgY29tcGFyZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRjb204MjQgY29tcGFyZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRjb204MjUgY29tcGFyZSAgTmFOICAwICAgICAgLT4gIE5hTgorZGRjb204MjYgY29tcGFyZSAgTmFOICAxICAgICAgLT4gIE5hTgorZGRjb204MjcgY29tcGFyZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRjb204MjggY29tcGFyZSAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRjb204MjkgY29tcGFyZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRjb204MzAgY29tcGFyZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRjb204MzEgY29tcGFyZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRjb204MzIgY29tcGFyZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRjb204MzMgY29tcGFyZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRjb204MzQgY29tcGFyZSAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRjb204MzUgY29tcGFyZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRjb204MzYgY29tcGFyZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRjb204MzcgY29tcGFyZSAgSW5mICBOYU4gICAgLT4gIE5hTgorZGRjb204MzggY29tcGFyZSAtTmFOIC1OYU4gICAgLT4gLU5hTgorZGRjb204MzkgY29tcGFyZSArTmFOIC1OYU4gICAgLT4gIE5hTgorZGRjb204NDAgY29tcGFyZSAtTmFOICtOYU4gICAgLT4gLU5hTgorCitkZGNvbTg0MSBjb21wYXJlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDIgY29tcGFyZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQzIGNvbXBhcmUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0NCBjb21wYXJlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDUgY29tcGFyZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQ2IGNvbXBhcmUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0NyBjb21wYXJlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDggY29tcGFyZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQ5IGNvbXBhcmUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1MCBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTEgY29tcGFyZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODUyIGNvbXBhcmUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1MyBjb21wYXJlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTQgY29tcGFyZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODU1IGNvbXBhcmUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1NiBjb21wYXJlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTcgY29tcGFyZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODU4IGNvbXBhcmUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1OSBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGNvbTg2MCBjb21wYXJlICBOYU45IC1JbmYgICAtPiAgTmFOOQorZGRjb204NjEgY29tcGFyZSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKK2RkY29tODYyIGNvbXBhcmUgIE5hTjc3IEluZiAgIC0+ICBOYU43NworZGRjb204NjMgY29tcGFyZSAtTmFONjcgTmFONSAgLT4gLU5hTjY3CitkZGNvbTg2NCBjb21wYXJlIC1JbmYgIC1OYU40ICAtPiAtTmFONAorZGRjb204NjUgY29tcGFyZSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzCitkZGNvbTg2NiBjb21wYXJlICBJbmYgICBOYU4yICAtPiAgTmFOMgorZGRjb204NjcgY29tcGFyZSAtTmFONDEgLU5hTjQyIC0+IC1OYU40MQorZGRjb204NjggY29tcGFyZSArTmFONDEgLU5hTjQyIC0+ICBOYU40MQorZGRjb204NjkgY29tcGFyZSAtTmFONDEgK05hTjQyIC0+IC1OYU40MQorZGRjb204NzAgY29tcGFyZSArTmFONDEgK05hTjQyIC0+ICBOYU40MQorCitkZGNvbTg3MSBjb21wYXJlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODcyIGNvbXBhcmUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzMgY29tcGFyZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3NCBjb21wYXJlICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODc1IGNvbXBhcmUgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzYgY29tcGFyZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3NyBjb21wYXJlICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODc4IGNvbXBhcmUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzkgY29tcGFyZSAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHdpZGUgcmFuZ2UKK2RkY29tODgwIGNvbXBhcmUgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xCitkZGNvbTg4MSBjb21wYXJlIDlFKzM4NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZGRjb204ODIgY29tcGFyZSArMC4xMDAgOUUtMzgzICAgICAgICAgICAgICAgLT4gIDEKK2RkY29tODgzIGNvbXBhcmUgOUUtMzgzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xCitkZGNvbTg4NSBjb21wYXJlIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQorZGRjb204ODYgY29tcGFyZSA5RSszODQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RkY29tODg3IGNvbXBhcmUgLTAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+IC0xCitkZGNvbTg4OCBjb21wYXJlIDlFLTM4MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQorCistLSBzcHJlYWQgemVyb3MKK2RkY29tOTAwIGNvbXBhcmUgICAwRS0zODMgIDAgICAgICAgLT4gIDAKK2RkY29tOTAxIGNvbXBhcmUgICAwRS0zODMgLTAgICAgICAgLT4gIDAKK2RkY29tOTAyIGNvbXBhcmUgIC0wRS0zODMgIDAgICAgICAgLT4gIDAKK2RkY29tOTAzIGNvbXBhcmUgIC0wRS0zODMgLTAgICAgICAgLT4gIDAKK2RkY29tOTA0IGNvbXBhcmUgICAwRS0zODMgIDBFKzM4NCAgLT4gIDAKK2RkY29tOTA1IGNvbXBhcmUgICAwRS0zODMgLTBFKzM4NCAgLT4gIDAKK2RkY29tOTA2IGNvbXBhcmUgIC0wRS0zODMgIDBFKzM4NCAgLT4gIDAKK2RkY29tOTA3IGNvbXBhcmUgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDAKK2RkY29tOTA4IGNvbXBhcmUgICAwICAgICAgIDBFKzM4NCAgLT4gIDAKK2RkY29tOTA5IGNvbXBhcmUgICAwICAgICAgLTBFKzM4NCAgLT4gIDAKK2RkY29tOTEwIGNvbXBhcmUgIC0wICAgICAgIDBFKzM4NCAgLT4gIDAKK2RkY29tOTExIGNvbXBhcmUgIC0wICAgICAgLTBFKzM4NCAgLT4gIDAKK2RkY29tOTMwIGNvbXBhcmUgICAwRSszODQgIDAgICAgICAgLT4gIDAKK2RkY29tOTMxIGNvbXBhcmUgICAwRSszODQgLTAgICAgICAgLT4gIDAKK2RkY29tOTMyIGNvbXBhcmUgIC0wRSszODQgIDAgICAgICAgLT4gIDAKK2RkY29tOTMzIGNvbXBhcmUgIC0wRSszODQgLTAgICAgICAgLT4gIDAKK2RkY29tOTM0IGNvbXBhcmUgICAwRSszODQgIDBFLTM4MyAgLT4gIDAKK2RkY29tOTM1IGNvbXBhcmUgICAwRSszODQgLTBFLTM4MyAgLT4gIDAKK2RkY29tOTM2IGNvbXBhcmUgIC0wRSszODQgIDBFLTM4MyAgLT4gIDAKK2RkY29tOTM3IGNvbXBhcmUgIC0wRSszODQgLTBFLTM4MyAgLT4gIDAKK2RkY29tOTM4IGNvbXBhcmUgICAwICAgICAgIDBFLTM4MyAgLT4gIDAKK2RkY29tOTM5IGNvbXBhcmUgICAwICAgICAgLTBFLTM4MyAgLT4gIDAKK2RkY29tOTQwIGNvbXBhcmUgIC0wICAgICAgIDBFLTM4MyAgLT4gIDAKK2RkY29tOTQxIGNvbXBhcmUgIC0wICAgICAgLTBFLTM4MyAgLT4gIDAKKworLS0gc2lnbnMKK2RkY29tOTYxIGNvbXBhcmUgIDFlKzc3ICAxZSsxMSAtPiAgMQorZGRjb205NjIgY29tcGFyZSAgMWUrNzcgLTFlKzExIC0+ICAxCitkZGNvbTk2MyBjb21wYXJlIC0xZSs3NyAgMWUrMTEgLT4gLTEKK2RkY29tOTY0IGNvbXBhcmUgLTFlKzc3IC0xZSsxMSAtPiAtMQorZGRjb205NjUgY29tcGFyZSAgMWUtNzcgIDFlLTExIC0+IC0xCitkZGNvbTk2NiBjb21wYXJlICAxZS03NyAtMWUtMTEgLT4gIDEKK2RkY29tOTY3IGNvbXBhcmUgLTFlLTc3ICAxZS0xMSAtPiAtMQorZGRjb205NjggY29tcGFyZSAtMWUtNzcgLTFlLTExIC0+ICAxCisKKy0tIGZ1bGwgYWxpZ25tZW50IHJhbmdlLCBib3RoIHdheXMKK2RkY29tcDEwMDEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAwCitkZGNvbXAxMDAyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwICAgLT4gMAorZGRjb21wMTAwMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwICAgIC0+IDAKK2RkY29tcDEwMDQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwICAgICAtPiAwCitkZGNvbXAxMDA1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwICAgICAgLT4gMAorZGRjb21wMTAwNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwICAgICAgIC0+IDAKK2RkY29tcDEwMDcgY29tcGFyZSAxIDEuMDAwMDAwMDAwICAgICAgICAtPiAwCitkZGNvbXAxMDA4IGNvbXBhcmUgMSAxLjAwMDAwMDAwICAgICAgICAgLT4gMAorZGRjb21wMTAwOSBjb21wYXJlIDEgMS4wMDAwMDAwICAgICAgICAgIC0+IDAKK2RkY29tcDEwMTAgY29tcGFyZSAxIDEuMDAwMDAwICAgICAgICAgICAtPiAwCitkZGNvbXAxMDExIGNvbXBhcmUgMSAxLjAwMDAwICAgICAgICAgICAgLT4gMAorZGRjb21wMTAxMiBjb21wYXJlIDEgMS4wMDAwICAgICAgICAgICAgIC0+IDAKK2RkY29tcDEwMTMgY29tcGFyZSAxIDEuMDAwICAgICAgICAgICAgICAtPiAwCitkZGNvbXAxMDE0IGNvbXBhcmUgMSAxLjAwICAgICAgICAgICAgICAgLT4gMAorZGRjb21wMTAxNSBjb21wYXJlIDEgMS4wICAgICAgICAgICAgICAgIC0+IDAKK2RkY29tcDEwMjEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMCAgMSAtPiAwCitkZGNvbXAxMDIyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMCAgIDEgLT4gMAorZGRjb21wMTAyMyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMCAgICAxIC0+IDAKK2RkY29tcDEwMjQgY29tcGFyZSAxLjAwMDAwMDAwMDAwMCAgICAgMSAtPiAwCitkZGNvbXAxMDI1IGNvbXBhcmUgMS4wMDAwMDAwMDAwMCAgICAgIDEgLT4gMAorZGRjb21wMTAyNiBjb21wYXJlIDEuMDAwMDAwMDAwMCAgICAgICAxIC0+IDAKK2RkY29tcDEwMjcgY29tcGFyZSAxLjAwMDAwMDAwMCAgICAgICAgMSAtPiAwCitkZGNvbXAxMDI4IGNvbXBhcmUgMS4wMDAwMDAwMCAgICAgICAgIDEgLT4gMAorZGRjb21wMTAyOSBjb21wYXJlIDEuMDAwMDAwMCAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMzAgY29tcGFyZSAxLjAwMDAwMCAgICAgICAgICAgMSAtPiAwCitkZGNvbXAxMDMxIGNvbXBhcmUgMS4wMDAwMCAgICAgICAgICAgIDEgLT4gMAorZGRjb21wMTAzMiBjb21wYXJlIDEuMDAwMCAgICAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMzMgY29tcGFyZSAxLjAwMCAgICAgICAgICAgICAgMSAtPiAwCitkZGNvbXAxMDM0IGNvbXBhcmUgMS4wMCAgICAgICAgICAgICAgIDEgLT4gMAorZGRjb21wMTAzNSBjb21wYXJlIDEuMCAgICAgICAgICAgICAgICAxIC0+IDAKKworLS0gY2hlY2sgTVNEIGFsd2F5cyBkZXRlY3RlZCBub24temVybworZGRjb21wMTA0MCBjb21wYXJlIDAgMC4wMDAwMDAwMDAwMDAwMDAgIC0+IDAKK2RkY29tcDEwNDEgY29tcGFyZSAwIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0MiBjb21wYXJlIDAgMi4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQzIGNvbXBhcmUgMCAzLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDQgY29tcGFyZSAwIDQuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0NSBjb21wYXJlIDAgNS4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQ2IGNvbXBhcmUgMCA2LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDcgY29tcGFyZSAwIDcuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0OCBjb21wYXJlIDAgOC4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQ5IGNvbXBhcmUgMCA5LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNTAgY29tcGFyZSAwLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAwCitkZGNvbXAxMDUxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1MiBjb21wYXJlIDIuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTMgY29tcGFyZSAzLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDU0IGNvbXBhcmUgNC4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1NSBjb21wYXJlIDUuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTYgY29tcGFyZSA2LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDU3IGNvbXBhcmUgNy4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1OCBjb21wYXJlIDguMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTkgY29tcGFyZSA5LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCisKKy0tIE51bGwgdGVzdHMKK2RkY29tOTk5MCBjb21wYXJlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRjb205OTkxIGNvbXBhcmUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVNpZy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVTaWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODJlYzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVTaWcuZGVjVGVzdApAQCAtMCwwICsxLDY0NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvbXBhcmVTaWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbjsgYWxsIE5hTnMgc2lnbmFsICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRjbXMwMDEgY29tcGFyZXNpZyAgLTIgIC0yICAtPiAwCitkZGNtczAwMiBjb21wYXJlc2lnICAtMiAgLTEgIC0+IC0xCitkZGNtczAwMyBjb21wYXJlc2lnICAtMiAgIDAgIC0+IC0xCitkZGNtczAwNCBjb21wYXJlc2lnICAtMiAgIDEgIC0+IC0xCitkZGNtczAwNSBjb21wYXJlc2lnICAtMiAgIDIgIC0+IC0xCitkZGNtczAwNiBjb21wYXJlc2lnICAtMSAgLTIgIC0+IDEKK2RkY21zMDA3IGNvbXBhcmVzaWcgIC0xICAtMSAgLT4gMAorZGRjbXMwMDggY29tcGFyZXNpZyAgLTEgICAwICAtPiAtMQorZGRjbXMwMDkgY29tcGFyZXNpZyAgLTEgICAxICAtPiAtMQorZGRjbXMwMTAgY29tcGFyZXNpZyAgLTEgICAyICAtPiAtMQorZGRjbXMwMTEgY29tcGFyZXNpZyAgIDAgIC0yICAtPiAxCitkZGNtczAxMiBjb21wYXJlc2lnICAgMCAgLTEgIC0+IDEKK2RkY21zMDEzIGNvbXBhcmVzaWcgICAwICAgMCAgLT4gMAorZGRjbXMwMTQgY29tcGFyZXNpZyAgIDAgICAxICAtPiAtMQorZGRjbXMwMTUgY29tcGFyZXNpZyAgIDAgICAyICAtPiAtMQorZGRjbXMwMTYgY29tcGFyZXNpZyAgIDEgIC0yICAtPiAxCitkZGNtczAxNyBjb21wYXJlc2lnICAgMSAgLTEgIC0+IDEKK2RkY21zMDE4IGNvbXBhcmVzaWcgICAxICAgMCAgLT4gMQorZGRjbXMwMTkgY29tcGFyZXNpZyAgIDEgICAxICAtPiAwCitkZGNtczAyMCBjb21wYXJlc2lnICAgMSAgIDIgIC0+IC0xCitkZGNtczAyMSBjb21wYXJlc2lnICAgMiAgLTIgIC0+IDEKK2RkY21zMDIyIGNvbXBhcmVzaWcgICAyICAtMSAgLT4gMQorZGRjbXMwMjMgY29tcGFyZXNpZyAgIDIgICAwICAtPiAxCitkZGNtczAyNSBjb21wYXJlc2lnICAgMiAgIDEgIC0+IDEKK2RkY21zMDI2IGNvbXBhcmVzaWcgICAyICAgMiAgLT4gMAorCitkZGNtczAzMSBjb21wYXJlc2lnICAtMjAgIC0yMCAgLT4gMAorZGRjbXMwMzIgY29tcGFyZXNpZyAgLTIwICAtMTAgIC0+IC0xCitkZGNtczAzMyBjb21wYXJlc2lnICAtMjAgICAwMCAgLT4gLTEKK2RkY21zMDM0IGNvbXBhcmVzaWcgIC0yMCAgIDEwICAtPiAtMQorZGRjbXMwMzUgY29tcGFyZXNpZyAgLTIwICAgMjAgIC0+IC0xCitkZGNtczAzNiBjb21wYXJlc2lnICAtMTAgIC0yMCAgLT4gMQorZGRjbXMwMzcgY29tcGFyZXNpZyAgLTEwICAtMTAgIC0+IDAKK2RkY21zMDM4IGNvbXBhcmVzaWcgIC0xMCAgIDAwICAtPiAtMQorZGRjbXMwMzkgY29tcGFyZXNpZyAgLTEwICAgMTAgIC0+IC0xCitkZGNtczA0MCBjb21wYXJlc2lnICAtMTAgICAyMCAgLT4gLTEKK2RkY21zMDQxIGNvbXBhcmVzaWcgICAwMCAgLTIwICAtPiAxCitkZGNtczA0MiBjb21wYXJlc2lnICAgMDAgIC0xMCAgLT4gMQorZGRjbXMwNDMgY29tcGFyZXNpZyAgIDAwICAgMDAgIC0+IDAKK2RkY21zMDQ0IGNvbXBhcmVzaWcgICAwMCAgIDEwICAtPiAtMQorZGRjbXMwNDUgY29tcGFyZXNpZyAgIDAwICAgMjAgIC0+IC0xCitkZGNtczA0NiBjb21wYXJlc2lnICAgMTAgIC0yMCAgLT4gMQorZGRjbXMwNDcgY29tcGFyZXNpZyAgIDEwICAtMTAgIC0+IDEKK2RkY21zMDQ4IGNvbXBhcmVzaWcgICAxMCAgIDAwICAtPiAxCitkZGNtczA0OSBjb21wYXJlc2lnICAgMTAgICAxMCAgLT4gMAorZGRjbXMwNTAgY29tcGFyZXNpZyAgIDEwICAgMjAgIC0+IC0xCitkZGNtczA1MSBjb21wYXJlc2lnICAgMjAgIC0yMCAgLT4gMQorZGRjbXMwNTIgY29tcGFyZXNpZyAgIDIwICAtMTAgIC0+IDEKK2RkY21zMDUzIGNvbXBhcmVzaWcgICAyMCAgIDAwICAtPiAxCitkZGNtczA1NSBjb21wYXJlc2lnICAgMjAgICAxMCAgLT4gMQorZGRjbXMwNTYgY29tcGFyZXNpZyAgIDIwICAgMjAgIC0+IDAKKworZGRjbXMwNjEgY29tcGFyZXNpZyAgLTIuMCAgLTIuMCAgLT4gMAorZGRjbXMwNjIgY29tcGFyZXNpZyAgLTIuMCAgLTEuMCAgLT4gLTEKK2RkY21zMDYzIGNvbXBhcmVzaWcgIC0yLjAgICAwLjAgIC0+IC0xCitkZGNtczA2NCBjb21wYXJlc2lnICAtMi4wICAgMS4wICAtPiAtMQorZGRjbXMwNjUgY29tcGFyZXNpZyAgLTIuMCAgIDIuMCAgLT4gLTEKK2RkY21zMDY2IGNvbXBhcmVzaWcgIC0xLjAgIC0yLjAgIC0+IDEKK2RkY21zMDY3IGNvbXBhcmVzaWcgIC0xLjAgIC0xLjAgIC0+IDAKK2RkY21zMDY4IGNvbXBhcmVzaWcgIC0xLjAgICAwLjAgIC0+IC0xCitkZGNtczA2OSBjb21wYXJlc2lnICAtMS4wICAgMS4wICAtPiAtMQorZGRjbXMwNzAgY29tcGFyZXNpZyAgLTEuMCAgIDIuMCAgLT4gLTEKK2RkY21zMDcxIGNvbXBhcmVzaWcgICAwLjAgIC0yLjAgIC0+IDEKK2RkY21zMDcyIGNvbXBhcmVzaWcgICAwLjAgIC0xLjAgIC0+IDEKK2RkY21zMDczIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgIC0+IDAKK2RkY21zMDc0IGNvbXBhcmVzaWcgICAwLjAgICAxLjAgIC0+IC0xCitkZGNtczA3NSBjb21wYXJlc2lnICAgMC4wICAgMi4wICAtPiAtMQorZGRjbXMwNzYgY29tcGFyZXNpZyAgIDEuMCAgLTIuMCAgLT4gMQorZGRjbXMwNzcgY29tcGFyZXNpZyAgIDEuMCAgLTEuMCAgLT4gMQorZGRjbXMwNzggY29tcGFyZXNpZyAgIDEuMCAgIDAuMCAgLT4gMQorZGRjbXMwNzkgY29tcGFyZXNpZyAgIDEuMCAgIDEuMCAgLT4gMAorZGRjbXMwODAgY29tcGFyZXNpZyAgIDEuMCAgIDIuMCAgLT4gLTEKK2RkY21zMDgxIGNvbXBhcmVzaWcgICAyLjAgIC0yLjAgIC0+IDEKK2RkY21zMDgyIGNvbXBhcmVzaWcgICAyLjAgIC0xLjAgIC0+IDEKK2RkY21zMDgzIGNvbXBhcmVzaWcgICAyLjAgICAwLjAgIC0+IDEKK2RkY21zMDg1IGNvbXBhcmVzaWcgICAyLjAgICAxLjAgIC0+IDEKK2RkY21zMDg2IGNvbXBhcmVzaWcgICAyLjAgICAyLjAgIC0+IDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkZGNtczA5MCBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDAKK2RkY21zMDkxIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTEKK2RkY21zMDkyIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQorZGRjbXMwOTMgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworZGRjbXMxMDAgY29tcGFyZXNpZyAgIDcuMCAgICA3LjAgICAgLT4gMAorZGRjbXMxMDEgY29tcGFyZXNpZyAgIDcuMCAgICA3ICAgICAgLT4gMAorZGRjbXMxMDIgY29tcGFyZXNpZyAgIDcgICAgICA3LjAgICAgLT4gMAorZGRjbXMxMDMgY29tcGFyZXNpZyAgIDdFKzAgICA3LjAgICAgLT4gMAorZGRjbXMxMDQgY29tcGFyZXNpZyAgIDcwRS0xICA3LjAgICAgLT4gMAorZGRjbXMxMDUgY29tcGFyZXNpZyAgIDAuN0UrMSA3ICAgICAgLT4gMAorZGRjbXMxMDYgY29tcGFyZXNpZyAgIDcwRS0xICA3ICAgICAgLT4gMAorZGRjbXMxMDcgY29tcGFyZXNpZyAgIDcuMCAgICA3RSswICAgLT4gMAorZGRjbXMxMDggY29tcGFyZXNpZyAgIDcuMCAgICA3MEUtMSAgLT4gMAorZGRjbXMxMDkgY29tcGFyZXNpZyAgIDcgICAgICAwLjdFKzEgLT4gMAorZGRjbXMxMTAgY29tcGFyZXNpZyAgIDcgICAgICA3MEUtMSAgLT4gMAorCitkZGNtczEyMCBjb21wYXJlc2lnICAgOC4wICAgIDcuMCAgICAtPiAxCitkZGNtczEyMSBjb21wYXJlc2lnICAgOC4wICAgIDcgICAgICAtPiAxCitkZGNtczEyMiBjb21wYXJlc2lnICAgOCAgICAgIDcuMCAgICAtPiAxCitkZGNtczEyMyBjb21wYXJlc2lnICAgOEUrMCAgIDcuMCAgICAtPiAxCitkZGNtczEyNCBjb21wYXJlc2lnICAgODBFLTEgIDcuMCAgICAtPiAxCitkZGNtczEyNSBjb21wYXJlc2lnICAgMC44RSsxIDcgICAgICAtPiAxCitkZGNtczEyNiBjb21wYXJlc2lnICAgODBFLTEgIDcgICAgICAtPiAxCitkZGNtczEyNyBjb21wYXJlc2lnICAgOC4wICAgIDdFKzAgICAtPiAxCitkZGNtczEyOCBjb21wYXJlc2lnICAgOC4wICAgIDcwRS0xICAtPiAxCitkZGNtczEyOSBjb21wYXJlc2lnICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZGRjbXMxMzAgY29tcGFyZXNpZyAgIDggICAgICA3MEUtMSAgLT4gMQorCitkZGNtczE0MCBjb21wYXJlc2lnICAgOC4wICAgIDkuMCAgICAtPiAtMQorZGRjbXMxNDEgY29tcGFyZXNpZyAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RkY21zMTQyIGNvbXBhcmVzaWcgICA4ICAgICAgOS4wICAgIC0+IC0xCitkZGNtczE0MyBjb21wYXJlc2lnICAgOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjbXMxNDQgY29tcGFyZXNpZyAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RkY21zMTQ1IGNvbXBhcmVzaWcgICAwLjhFKzEgOSAgICAgIC0+IC0xCitkZGNtczE0NiBjb21wYXJlc2lnICAgODBFLTEgIDkgICAgICAtPiAtMQorZGRjbXMxNDcgY29tcGFyZXNpZyAgIDguMCAgICA5RSswICAgLT4gLTEKK2RkY21zMTQ4IGNvbXBhcmVzaWcgICA4LjAgICAgOTBFLTEgIC0+IC0xCitkZGNtczE0OSBjb21wYXJlc2lnICAgOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjbXMxNTAgY29tcGFyZXNpZyAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZGRjbXMyMDAgY29tcGFyZXNpZyAgLTcuMCAgICA3LjAgICAgLT4gLTEKK2RkY21zMjAxIGNvbXBhcmVzaWcgIC03LjAgICAgNyAgICAgIC0+IC0xCitkZGNtczIwMiBjb21wYXJlc2lnICAtNyAgICAgIDcuMCAgICAtPiAtMQorZGRjbXMyMDMgY29tcGFyZXNpZyAgLTdFKzAgICA3LjAgICAgLT4gLTEKK2RkY21zMjA0IGNvbXBhcmVzaWcgIC03MEUtMSAgNy4wICAgIC0+IC0xCitkZGNtczIwNSBjb21wYXJlc2lnICAtMC43RSsxIDcgICAgICAtPiAtMQorZGRjbXMyMDYgY29tcGFyZXNpZyAgLTcwRS0xICA3ICAgICAgLT4gLTEKK2RkY21zMjA3IGNvbXBhcmVzaWcgIC03LjAgICAgN0UrMCAgIC0+IC0xCitkZGNtczIwOCBjb21wYXJlc2lnICAtNy4wICAgIDcwRS0xICAtPiAtMQorZGRjbXMyMDkgY29tcGFyZXNpZyAgLTcgICAgICAwLjdFKzEgLT4gLTEKK2RkY21zMjEwIGNvbXBhcmVzaWcgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2RkY21zMjIwIGNvbXBhcmVzaWcgIC04LjAgICAgNy4wICAgIC0+IC0xCitkZGNtczIyMSBjb21wYXJlc2lnICAtOC4wICAgIDcgICAgICAtPiAtMQorZGRjbXMyMjIgY29tcGFyZXNpZyAgLTggICAgICA3LjAgICAgLT4gLTEKK2RkY21zMjIzIGNvbXBhcmVzaWcgIC04RSswICAgNy4wICAgIC0+IC0xCitkZGNtczIyNCBjb21wYXJlc2lnICAtODBFLTEgIDcuMCAgICAtPiAtMQorZGRjbXMyMjUgY29tcGFyZXNpZyAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2RkY21zMjI2IGNvbXBhcmVzaWcgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkZGNtczIyNyBjb21wYXJlc2lnICAtOC4wICAgIDdFKzAgICAtPiAtMQorZGRjbXMyMjggY29tcGFyZXNpZyAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2RkY21zMjI5IGNvbXBhcmVzaWcgIC04ICAgICAgMC43RSsxIC0+IC0xCitkZGNtczIzMCBjb21wYXJlc2lnICAtOCAgICAgIDcwRS0xICAtPiAtMQorCitkZGNtczI0MCBjb21wYXJlc2lnICAtOC4wICAgIDkuMCAgICAtPiAtMQorZGRjbXMyNDEgY29tcGFyZXNpZyAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RkY21zMjQyIGNvbXBhcmVzaWcgIC04ICAgICAgOS4wICAgIC0+IC0xCitkZGNtczI0MyBjb21wYXJlc2lnICAtOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjbXMyNDQgY29tcGFyZXNpZyAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RkY21zMjQ1IGNvbXBhcmVzaWcgIC0wLjhFKzEgOSAgICAgIC0+IC0xCitkZGNtczI0NiBjb21wYXJlc2lnICAtODBFLTEgIDkgICAgICAtPiAtMQorZGRjbXMyNDcgY29tcGFyZXNpZyAgLTguMCAgICA5RSswICAgLT4gLTEKK2RkY21zMjQ4IGNvbXBhcmVzaWcgIC04LjAgICAgOTBFLTEgIC0+IC0xCitkZGNtczI0OSBjb21wYXJlc2lnICAtOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjbXMyNTAgY29tcGFyZXNpZyAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZGRjbXMzMDAgY29tcGFyZXNpZyAgIDcuMCAgICAtNy4wICAgIC0+IDEKK2RkY21zMzAxIGNvbXBhcmVzaWcgICA3LjAgICAgLTcgICAgICAtPiAxCitkZGNtczMwMiBjb21wYXJlc2lnICAgNyAgICAgIC03LjAgICAgLT4gMQorZGRjbXMzMDMgY29tcGFyZXNpZyAgIDdFKzAgICAtNy4wICAgIC0+IDEKK2RkY21zMzA0IGNvbXBhcmVzaWcgICA3MEUtMSAgLTcuMCAgICAtPiAxCitkZGNtczMwNSBjb21wYXJlc2lnICAgLjdFKzEgIC03ICAgICAgLT4gMQorZGRjbXMzMDYgY29tcGFyZXNpZyAgIDcwRS0xICAtNyAgICAgIC0+IDEKK2RkY21zMzA3IGNvbXBhcmVzaWcgICA3LjAgICAgLTdFKzAgICAtPiAxCitkZGNtczMwOCBjb21wYXJlc2lnICAgNy4wICAgIC03MEUtMSAgLT4gMQorZGRjbXMzMDkgY29tcGFyZXNpZyAgIDcgICAgICAtLjdFKzEgIC0+IDEKK2RkY21zMzEwIGNvbXBhcmVzaWcgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2RkY21zMzIwIGNvbXBhcmVzaWcgICA4LjAgICAgLTcuMCAgICAtPiAxCitkZGNtczMyMSBjb21wYXJlc2lnICAgOC4wICAgIC03ICAgICAgLT4gMQorZGRjbXMzMjIgY29tcGFyZXNpZyAgIDggICAgICAtNy4wICAgIC0+IDEKK2RkY21zMzIzIGNvbXBhcmVzaWcgICA4RSswICAgLTcuMCAgICAtPiAxCitkZGNtczMyNCBjb21wYXJlc2lnICAgODBFLTEgIC03LjAgICAgLT4gMQorZGRjbXMzMjUgY29tcGFyZXNpZyAgIC44RSsxICAtNyAgICAgIC0+IDEKK2RkY21zMzI2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcgICAgICAtPiAxCitkZGNtczMyNyBjb21wYXJlc2lnICAgOC4wICAgIC03RSswICAgLT4gMQorZGRjbXMzMjggY29tcGFyZXNpZyAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2RkY21zMzI5IGNvbXBhcmVzaWcgICA4ICAgICAgLS43RSsxICAtPiAxCitkZGNtczMzMCBjb21wYXJlc2lnICAgOCAgICAgIC03MEUtMSAgLT4gMQorCitkZGNtczM0MCBjb21wYXJlc2lnICAgOC4wICAgIC05LjAgICAgLT4gMQorZGRjbXMzNDEgY29tcGFyZXNpZyAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RkY21zMzQyIGNvbXBhcmVzaWcgICA4ICAgICAgLTkuMCAgICAtPiAxCitkZGNtczM0MyBjb21wYXJlc2lnICAgOEUrMCAgIC05LjAgICAgLT4gMQorZGRjbXMzNDQgY29tcGFyZXNpZyAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RkY21zMzQ1IGNvbXBhcmVzaWcgICAuOEUrMSAgLTkgICAgICAtPiAxCitkZGNtczM0NiBjb21wYXJlc2lnICAgODBFLTEgIC05ICAgICAgLT4gMQorZGRjbXMzNDcgY29tcGFyZXNpZyAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RkY21zMzQ4IGNvbXBhcmVzaWcgICA4LjAgICAgLTkwRS0xICAtPiAxCitkZGNtczM0OSBjb21wYXJlc2lnICAgOCAgICAgIC0uOUUrMSAgLT4gMQorZGRjbXMzNTAgY29tcGFyZXNpZyAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZGRjbXM0MDAgY29tcGFyZXNpZyAgIC03LjAgICAgLTcuMCAgICAtPiAwCitkZGNtczQwMSBjb21wYXJlc2lnICAgLTcuMCAgICAtNyAgICAgIC0+IDAKK2RkY21zNDAyIGNvbXBhcmVzaWcgICAtNyAgICAgIC03LjAgICAgLT4gMAorZGRjbXM0MDMgY29tcGFyZXNpZyAgIC03RSswICAgLTcuMCAgICAtPiAwCitkZGNtczQwNCBjb21wYXJlc2lnICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RkY21zNDA1IGNvbXBhcmVzaWcgICAtLjdFKzEgIC03ICAgICAgLT4gMAorZGRjbXM0MDYgY29tcGFyZXNpZyAgIC03MEUtMSAgLTcgICAgICAtPiAwCitkZGNtczQwNyBjb21wYXJlc2lnICAgLTcuMCAgICAtN0UrMCAgIC0+IDAKK2RkY21zNDA4IGNvbXBhcmVzaWcgICAtNy4wICAgIC03MEUtMSAgLT4gMAorZGRjbXM0MDkgY29tcGFyZXNpZyAgIC03ICAgICAgLS43RSsxICAtPiAwCitkZGNtczQxMCBjb21wYXJlc2lnICAgLTcgICAgICAtNzBFLTEgIC0+IDAKKworZGRjbXM0MjAgY29tcGFyZXNpZyAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZGRjbXM0MjEgY29tcGFyZXNpZyAgIC04LjAgICAgLTcgICAgICAtPiAtMQorZGRjbXM0MjIgY29tcGFyZXNpZyAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorZGRjbXM0MjMgY29tcGFyZXNpZyAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZGRjbXM0MjQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQorZGRjbXM0MjUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorZGRjbXM0MjYgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZGRjbXM0MjcgY29tcGFyZXNpZyAgIC04LjAgICAgLTdFKzAgICAtPiAtMQorZGRjbXM0MjggY29tcGFyZXNpZyAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorZGRjbXM0MjkgY29tcGFyZXNpZyAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZGRjbXM0MzAgY29tcGFyZXNpZyAgIC04ICAgICAgLTcwRS0xICAtPiAtMQorCitkZGNtczQ0MCBjb21wYXJlc2lnICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2RkY21zNDQxIGNvbXBhcmVzaWcgICAtOC4wICAgIC05ICAgICAgLT4gMQorZGRjbXM0NDIgY29tcGFyZXNpZyAgIC04ICAgICAgLTkuMCAgICAtPiAxCitkZGNtczQ0MyBjb21wYXJlc2lnICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2RkY21zNDQ0IGNvbXBhcmVzaWcgICAtODBFLTEgIC05LjAgICAgLT4gMQorZGRjbXM0NDUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTkgICAgICAtPiAxCitkZGNtczQ0NiBjb21wYXJlc2lnICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2RkY21zNDQ3IGNvbXBhcmVzaWcgICAtOC4wICAgIC05RSswICAgLT4gMQorZGRjbXM0NDggY29tcGFyZXNpZyAgIC04LjAgICAgLTkwRS0xICAtPiAxCitkZGNtczQ0OSBjb21wYXJlc2lnICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2RkY21zNDUwIGNvbXBhcmVzaWcgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZGRjbXM0NzMgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0NzQgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNtczQ3NSBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0NzYgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjbXM0NzcgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNtczQ3OCBjb21wYXJlc2lnIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjbXM0NzkgY29tcGFyZXNpZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0ODAgY29tcGFyZXNpZyAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNtczQ4MSBjb21wYXJlc2lnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0ODIgY29tcGFyZXNpZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjbXM0ODMgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNtczQ4NyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAwCitkZGNtczQ4OCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDAKK2RkY21zNDg5IGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAwCitkZGNtczQ5MCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAwCitkZGNtczQ5MSBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDAKK2RkY21zNDkyIGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAwCitkZGNtczQ5MyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAwCitkZGNtczQ5NCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDAKK2RkY21zNDk1IGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAwCitkZGNtczQ5NiBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAwCitkZGNtczQ5NyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZGRjbXM1MDAgY29tcGFyZXNpZyAgICAxICAgICAxRS0xNSAgICAtPiAxCitkZGNtczUwMSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RkY21zNTAyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTMgICAgLT4gMQorZGRjbXM1MDMgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMiAgICAtPiAxCitkZGNtczUwNCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RkY21zNTA1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTAgICAgLT4gMQorZGRjbXM1MDYgY29tcGFyZXNpZyAgICAxICAgICAxRS05ICAgICAtPiAxCitkZGNtczUwNyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RkY21zNTA4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNyAgICAgLT4gMQorZGRjbXM1MDkgY29tcGFyZXNpZyAgICAxICAgICAxRS02ICAgICAtPiAxCitkZGNtczUxMCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RkY21zNTExIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNCAgICAgLT4gMQorZGRjbXM1MTIgY29tcGFyZXNpZyAgICAxICAgICAxRS0zICAgICAtPiAxCitkZGNtczUxMyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RkY21zNTE0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMSAgICAgLT4gMQorZGRjbXM1MTUgY29tcGFyZXNpZyAgICAxICAgICAxRS0wICAgICAtPiAwCitkZGNtczUxNiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNtczUxNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitkZGNtczUxOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNtczUxOSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkZGNtczUyMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitkZGNtczUyMiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitkZGNtczUyMyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkZGNtczUyNCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitkZGNtczUyNSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitkZGNtczUyNiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkZGNtczUyNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitkZGNtczUyOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitkZGNtczUyOSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkZGNtczUzMCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitkZGNtczUzMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCistLSBMUiBzd2FwCitkZGNtczU0MCBjb21wYXJlc2lnICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitkZGNtczU0MSBjb21wYXJlc2lnICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitkZGNtczU0MiBjb21wYXJlc2lnICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkZGNtczU0MyBjb21wYXJlc2lnICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitkZGNtczU0NCBjb21wYXJlc2lnICAgIDFFLTExICAxICAgICAgIC0+IC0xCitkZGNtczU0NSBjb21wYXJlc2lnICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkZGNtczU0NiBjb21wYXJlc2lnICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitkZGNtczU0NyBjb21wYXJlc2lnICAgIDFFLTggICAxICAgICAgIC0+IC0xCitkZGNtczU0OCBjb21wYXJlc2lnICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkZGNtczU0OSBjb21wYXJlc2lnICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitkZGNtczU1MCBjb21wYXJlc2lnICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitkZGNtczU1MSBjb21wYXJlc2lnICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkZGNtczU1MiBjb21wYXJlc2lnICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitkZGNtczU1MyBjb21wYXJlc2lnICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitkZGNtczU1NCBjb21wYXJlc2lnICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkZGNtczU1NSBjb21wYXJlc2lnICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitkZGNtczU1NiBjb21wYXJlc2lnICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitkZGNtczU1NyBjb21wYXJlc2lnICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkZGNtczU1OCBjb21wYXJlc2lnICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitkZGNtczU1OSBjb21wYXJlc2lnICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitkZGNtczU2MSBjb21wYXJlc2lnICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkZGNtczU2MiBjb21wYXJlc2lnICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitkZGNtczU2MyBjb21wYXJlc2lnICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitkZGNtczU2NCBjb21wYXJlc2lnICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkZGNtczU2NSBjb21wYXJlc2lnICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitkZGNtczU2NiBjb21wYXJlc2lnICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitkZGNtczU2NyBjb21wYXJlc2lnICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkZGNtczU2OCBjb21wYXJlc2lnICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitkZGNtczU2OSBjb21wYXJlc2lnICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitkZGNtczU3MCBjb21wYXJlc2lnICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkZGNtczU3MSBjb21wYXJlc2lnICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RkY21zNTgwIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitkZGNtczU4MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorZGRjbXM1ODIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RkY21zNTgzIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitkZGNtczU4NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorZGRjbXM1ODUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RkY21zNTg2IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitkZGNtczU4NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorZGRjbXM1ODggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RkY21zNTg5IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorZGRjbXM1OTAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitkZGNtczU5MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RkY21zNTkyIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorZGRjbXM1OTMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitkZGNtczU5NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RkY21zNTk1IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorZGRjbXM1OTYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNtczU5NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY21zNTk4IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorZGRjbXM1OTkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkZGNtczYwMCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwMSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwMiBjb21wYXJlc2lnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwMyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwNCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwNSBjb21wYXJlc2lnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwNiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwNyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwOCBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwOSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkZGNtczYxMCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitkZGNtczYxMSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitkZGNtczYxMiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkZGNtczYxMyBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitkZGNtczYxNCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitkZGNtczYxNSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkZGNtczYxNiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitkZGNtczYxNyBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitkZGNtczYxOCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkZGNtczYxOSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitkZGNtczYyMCBjb21wYXJlc2lnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyMSBjb21wYXJlc2lnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyMiBjb21wYXJlc2lnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyMyBjb21wYXJlc2lnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyNCBjb21wYXJlc2lnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyNSBjb21wYXJlc2lnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyNiBjb21wYXJlc2lnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyNyBjb21wYXJlc2lnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyOCBjb21wYXJlc2lnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyOSBjb21wYXJlc2lnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYzMCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkZGNtczYzMSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitkZGNtczYzMiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitkZGNtczYzMyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkZGNtczYzNCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitkZGNtczYzNSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitkZGNtczYzNiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkZGNtczYzNyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitkZGNtczYzOCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitkZGNtczYzOSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZGNtczY0MCBjb21wYXJlc2lnICAgMCAgICAgMCAgIC0+IDAKK2RkY21zNjQxIGNvbXBhcmVzaWcgICAwICAgIC0wICAgLT4gMAorZGRjbXM2NDIgY29tcGFyZXNpZyAgIDAgICAgLTAuMCAtPiAwCitkZGNtczY0MyBjb21wYXJlc2lnICAgMCAgICAgMC4wIC0+IDAKK2RkY21zNjQ0IGNvbXBhcmVzaWcgIC0wICAgICAwICAgLT4gMAorZGRjbXM2NDUgY29tcGFyZXNpZyAgLTAgICAgLTAgICAtPiAwCitkZGNtczY0NiBjb21wYXJlc2lnICAtMCAgICAtMC4wIC0+IDAKK2RkY21zNjQ3IGNvbXBhcmVzaWcgIC0wICAgICAwLjAgLT4gMAorZGRjbXM2NDggY29tcGFyZXNpZyAgIDAuMCAgIDAgICAtPiAwCitkZGNtczY0OSBjb21wYXJlc2lnICAgMC4wICAtMCAgIC0+IDAKK2RkY21zNjUwIGNvbXBhcmVzaWcgICAwLjAgIC0wLjAgLT4gMAorZGRjbXM2NTEgY29tcGFyZXNpZyAgIDAuMCAgIDAuMCAtPiAwCitkZGNtczY1MiBjb21wYXJlc2lnICAtMC4wICAgMCAgIC0+IDAKK2RkY21zNjUzIGNvbXBhcmVzaWcgIC0wLjAgIC0wICAgLT4gMAorZGRjbXM2NTQgY29tcGFyZXNpZyAgLTAuMCAgLTAuMCAtPiAwCitkZGNtczY1NSBjb21wYXJlc2lnICAtMC4wICAgMC4wIC0+IDAKKworZGRjbXM2NTYgY29tcGFyZXNpZyAgLTBFMSAgIDAuMCAtPiAwCitkZGNtczY1NyBjb21wYXJlc2lnICAtMEUyICAgMC4wIC0+IDAKK2RkY21zNjU4IGNvbXBhcmVzaWcgICAwRTEgICAwLjAgLT4gMAorZGRjbXM2NTkgY29tcGFyZXNpZyAgIDBFMiAgIDAuMCAtPiAwCitkZGNtczY2MCBjb21wYXJlc2lnICAtMEUxICAgMCAgIC0+IDAKK2RkY21zNjYxIGNvbXBhcmVzaWcgIC0wRTIgICAwICAgLT4gMAorZGRjbXM2NjIgY29tcGFyZXNpZyAgIDBFMSAgIDAgICAtPiAwCitkZGNtczY2MyBjb21wYXJlc2lnICAgMEUyICAgMCAgIC0+IDAKK2RkY21zNjY0IGNvbXBhcmVzaWcgIC0wRTEgIC0wRTEgLT4gMAorZGRjbXM2NjUgY29tcGFyZXNpZyAgLTBFMiAgLTBFMSAtPiAwCitkZGNtczY2NiBjb21wYXJlc2lnICAgMEUxICAtMEUxIC0+IDAKK2RkY21zNjY3IGNvbXBhcmVzaWcgICAwRTIgIC0wRTEgLT4gMAorZGRjbXM2NjggY29tcGFyZXNpZyAgLTBFMSAgLTBFMiAtPiAwCitkZGNtczY2OSBjb21wYXJlc2lnICAtMEUyICAtMEUyIC0+IDAKK2RkY21zNjcwIGNvbXBhcmVzaWcgICAwRTEgIC0wRTIgLT4gMAorZGRjbXM2NzEgY29tcGFyZXNpZyAgIDBFMiAgLTBFMiAtPiAwCitkZGNtczY3MiBjb21wYXJlc2lnICAtMEUxICAgMEUxIC0+IDAKK2RkY21zNjczIGNvbXBhcmVzaWcgIC0wRTIgICAwRTEgLT4gMAorZGRjbXM2NzQgY29tcGFyZXNpZyAgIDBFMSAgIDBFMSAtPiAwCitkZGNtczY3NSBjb21wYXJlc2lnICAgMEUyICAgMEUxIC0+IDAKK2RkY21zNjc2IGNvbXBhcmVzaWcgIC0wRTEgICAwRTIgLT4gMAorZGRjbXM2NzcgY29tcGFyZXNpZyAgLTBFMiAgIDBFMiAtPiAwCitkZGNtczY3OCBjb21wYXJlc2lnICAgMEUxICAgMEUyIC0+IDAKK2RkY21zNjc5IGNvbXBhcmVzaWcgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkZGNtczY4MCBjb21wYXJlc2lnICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2RkY21zNjgxIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wICAgICAgICAgLT4gMAorZGRjbXM2ODIgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwCitkZGNtczY4MyBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDAKK2RkY21zNjg0IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMAorZGRjbXM2ODUgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwCitkZGNtczY4NiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDAKK2RkY21zNjg3IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMAorZGRjbXM2ODggY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwCitkZGNtczY4OSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDAKK2RkY21zNjkwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorZGRjbXM2OTEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwCitkZGNtczY5MiBjb21wYXJlc2lnICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDAKK2RkY21zNjkzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMAorZGRjbXM2OTQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwCitkZGNtczY5NSBjb21wYXJlc2lnICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDAKK2RkY21zNjk2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMAorZGRjbXM2OTcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwCitkZGNtczY5OCBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDAKK2RkY21zNjk5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMAorCistLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQKK2RkY21zNzAwIGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTUgLT4gMQorZGRjbXM3MDEgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwCitkZGNtczcwMiBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU3IC0+IC0xCitkZGNtczcwMyBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAwMjM0NTY3ODkwMTIzNDU2IC0+IDEKK2RkY21zNzA0IGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gMAorZGRjbXM3MDUgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMjIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQorZGRjbXM3MDYgY29tcGFyZXNpZyAgIDExMzQ1Njc4OTAxMjM0NTYgMTAzNDU2Nzg5MDEyMzQ1NiAtPiAxCitkZGNtczcwNyBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMTM0NTY3ODkwMTIzNDU2IC0+IDAKK2RkY21zNzA4IGNvbXBhcmVzaWcgICAxMTM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gLTEKKworLS0gbWlzY2VsbGFuZW91cworZGRjbXM3MjEgY29tcGFyZXNpZyAxMjM0NTY3ODAwMCAxIC0+IDEKK2RkY21zNzIyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODAwMCAtPiAtMQorZGRjbXM3MjMgY29tcGFyZXNpZyAxMjM0NTY3ODAwICAxIC0+IDEKK2RkY21zNzI0IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODAwICAtPiAtMQorZGRjbXM3MjUgY29tcGFyZXNpZyAxMjM0NTY3ODkwICAxIC0+IDEKK2RkY21zNzI2IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwICAtPiAtMQorZGRjbXM3MjcgY29tcGFyZXNpZyAxMjM0NTY3ODkxICAxIC0+IDEKK2RkY21zNzI4IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkxICAtPiAtMQorZGRjbXM3MjkgY29tcGFyZXNpZyAxMjM0NTY3ODkwMSAxIC0+IDEKK2RkY21zNzMwIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwMSAtPiAtMQorZGRjbXM3MzEgY29tcGFyZXNpZyAxMjM0NTY3ODk2ICAxIC0+IDEKK2RkY21zNzMyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbgorZGRjbXM3NDAgY29tcGFyZXNpZyAgMSAgMC45OTk5OTk5ICAtPiAxCitkZGNtczc0MSBjb21wYXJlc2lnICAxICAwLjk5OTk5OSAgIC0+IDEKK2RkY21zNzQyIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTkgICAgLT4gMQorZGRjbXM3NDMgY29tcGFyZXNpZyAgMSAgMS4wMDAwICAgICAtPiAwCitkZGNtczc0NCBjb21wYXJlc2lnICAxICAxLjAwMDAxICAgIC0+IC0xCitkZGNtczc0NSBjb21wYXJlc2lnICAxICAxLjAwMDAwMSAgIC0+IC0xCitkZGNtczc0NiBjb21wYXJlc2lnICAxICAxLjAwMDAwMDEgIC0+IC0xCitkZGNtczc1MCBjb21wYXJlc2lnICAwLjk5OTk5OTkgIDEgIC0+IC0xCitkZGNtczc1MSBjb21wYXJlc2lnICAwLjk5OTk5OSAgIDEgIC0+IC0xCitkZGNtczc1MiBjb21wYXJlc2lnICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkZGNtczc1MyBjb21wYXJlc2lnICAxLjAwMDAgICAgIDEgIC0+IDAKK2RkY21zNzU0IGNvbXBhcmVzaWcgIDEuMDAwMDEgICAgMSAgLT4gMQorZGRjbXM3NTUgY29tcGFyZXNpZyAgMS4wMDAwMDEgICAxICAtPiAxCitkZGNtczc1NiBjb21wYXJlc2lnICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RkY21zNzgwIGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxCitkZGNtczc4MSBjb21wYXJlc2lnICBJbmYgIC0xMDAwICAtPiAgMQorZGRjbXM3ODIgY29tcGFyZXNpZyAgSW5mICAtMSAgICAgLT4gIDEKK2RkY21zNzgzIGNvbXBhcmVzaWcgIEluZiAgLTAgICAgIC0+ICAxCitkZGNtczc4NCBjb21wYXJlc2lnICBJbmYgICAwICAgICAtPiAgMQorZGRjbXM3ODUgY29tcGFyZXNpZyAgSW5mICAgMSAgICAgLT4gIDEKK2RkY21zNzg2IGNvbXBhcmVzaWcgIEluZiAgIDEwMDAgIC0+ICAxCitkZGNtczc4NyBjb21wYXJlc2lnICBJbmYgICBJbmYgICAtPiAgMAorZGRjbXM3ODggY29tcGFyZXNpZyAtMTAwMCAgSW5mICAgLT4gLTEKK2RkY21zNzg5IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xCitkZGNtczc5MCBjb21wYXJlc2lnIC0xICAgICBJbmYgICAtPiAtMQorZGRjbXM3OTEgY29tcGFyZXNpZyAtMCAgICAgSW5mICAgLT4gLTEKK2RkY21zNzkyIGNvbXBhcmVzaWcgIDAgICAgIEluZiAgIC0+IC0xCitkZGNtczc5MyBjb21wYXJlc2lnICAxICAgICBJbmYgICAtPiAtMQorZGRjbXM3OTQgY29tcGFyZXNpZyAgMTAwMCAgSW5mICAgLT4gLTEKK2RkY21zNzk1IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwCisKK2RkY21zODAwIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwCitkZGNtczgwMSBjb21wYXJlc2lnIC1JbmYgIC0xMDAwICAtPiAtMQorZGRjbXM4MDIgY29tcGFyZXNpZyAtSW5mICAtMSAgICAgLT4gLTEKK2RkY21zODAzIGNvbXBhcmVzaWcgLUluZiAgLTAgICAgIC0+IC0xCitkZGNtczgwNCBjb21wYXJlc2lnIC1JbmYgICAwICAgICAtPiAtMQorZGRjbXM4MDUgY29tcGFyZXNpZyAtSW5mICAgMSAgICAgLT4gLTEKK2RkY21zODA2IGNvbXBhcmVzaWcgLUluZiAgIDEwMDAgIC0+IC0xCitkZGNtczgwNyBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQorZGRjbXM4MDggY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDAKK2RkY21zODA5IGNvbXBhcmVzaWcgLTEwMDAgLUluZiAgIC0+ICAxCitkZGNtczgxMCBjb21wYXJlc2lnIC0xICAgIC1JbmYgICAtPiAgMQorZGRjbXM4MTEgY29tcGFyZXNpZyAtMCAgICAtSW5mICAgLT4gIDEKK2RkY21zODEyIGNvbXBhcmVzaWcgIDAgICAgLUluZiAgIC0+ICAxCitkZGNtczgxMyBjb21wYXJlc2lnICAxICAgIC1JbmYgICAtPiAgMQorZGRjbXM4MTQgY29tcGFyZXNpZyAgMTAwMCAtSW5mICAgLT4gIDEKK2RkY21zODE1IGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxCisKK2RkY21zODIxIGNvbXBhcmVzaWcgIE5hTiAtSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyMiBjb21wYXJlc2lnICBOYU4gLTEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjMgY29tcGFyZXNpZyAgTmFOIC0xICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODI0IGNvbXBhcmVzaWcgIE5hTiAtMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyNSBjb21wYXJlc2lnICBOYU4gIDAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjYgY29tcGFyZXNpZyAgTmFOICAxICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODI3IGNvbXBhcmVzaWcgIE5hTiAgMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyOCBjb21wYXJlc2lnICBOYU4gIEluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjkgY29tcGFyZXNpZyAgTmFOICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODMwIGNvbXBhcmVzaWcgLUluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzMSBjb21wYXJlc2lnIC0xMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzIgY29tcGFyZXNpZyAtMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODMzIGNvbXBhcmVzaWcgLTAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzNCBjb21wYXJlc2lnICAwICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzUgY29tcGFyZXNpZyAgMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODM2IGNvbXBhcmVzaWcgIDEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzNyBjb21wYXJlc2lnICBJbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzggY29tcGFyZXNpZyAtTmFOIC1OYU4gICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODM5IGNvbXBhcmVzaWcgK05hTiAtTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0MCBjb21wYXJlc2lnIC1OYU4gK05hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkZGNtczg0MSBjb21wYXJlc2lnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDIgY29tcGFyZXNpZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQzIGNvbXBhcmVzaWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0NCBjb21wYXJlc2lnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDUgY29tcGFyZXNpZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQ2IGNvbXBhcmVzaWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0NyBjb21wYXJlc2lnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDggY29tcGFyZXNpZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQ5IGNvbXBhcmVzaWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1MCBjb21wYXJlc2lnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTEgY29tcGFyZXNpZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODUyIGNvbXBhcmVzaWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1MyBjb21wYXJlc2lnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTQgY29tcGFyZXNpZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODU1IGNvbXBhcmVzaWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1NiBjb21wYXJlc2lnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTcgY29tcGFyZXNpZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODU4IGNvbXBhcmVzaWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1OSBjb21wYXJlc2lnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGNtczg2MCBjb21wYXJlc2lnICBOYU45IC1JbmYgICAtPiAgTmFOOSAgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2MSBjb21wYXJlc2lnICBOYU44ICA5OTkgICAtPiAgTmFOOCAgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2MiBjb21wYXJlc2lnICBOYU43NyBJbmYgICAtPiAgTmFONzcgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2MyBjb21wYXJlc2lnIC1OYU42NyBOYU41ICAtPiAtTmFONjcgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2NCBjb21wYXJlc2lnIC1JbmYgIC1OYU40ICAtPiAtTmFONCAgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2NSBjb21wYXJlc2lnIC05OTkgIC1OYU4zMyAtPiAtTmFOMzMgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2NiBjb21wYXJlc2lnICBJbmYgICBOYU4yICAtPiAgTmFOMiAgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2NyBjb21wYXJlc2lnIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2OCBjb21wYXJlc2lnICtOYU40MSAtTmFONDIgLT4gIE5hTjQxIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2OSBjb21wYXJlc2lnIC1OYU40MSArTmFONDIgLT4gLU5hTjQxIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3MCBjb21wYXJlc2lnICtOYU40MSArTmFONDIgLT4gIE5hTjQxIEludmFsaWRfb3BlcmF0aW9uCisKK2RkY21zODcxIGNvbXBhcmVzaWcgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzIgY29tcGFyZXNpZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3MyBjb21wYXJlc2lnICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODc0IGNvbXBhcmVzaWcgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzUgY29tcGFyZXNpZyAgTmFOODUgIHNOYU44MyAgLT4gIE5hTjgzIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3NiBjb21wYXJlc2lnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODc3IGNvbXBhcmVzaWcgIDA4OCAgICBzTmFOODEgIC0+ICBOYU44MSBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzggY29tcGFyZXNpZyAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3OSBjb21wYXJlc2lnICBOYU4gICAtc05hTjg5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gd2lkZSByYW5nZQorZGRjbXM4ODAgY29tcGFyZXNpZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTEKK2RkY21zODgxIGNvbXBhcmVzaWcgOUUrMzg0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkZGNtczg4MiBjb21wYXJlc2lnICswLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAgMQorZGRjbXM4ODMgY29tcGFyZXNpZyA5RS0zODMgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTEKK2RkY21zODg1IGNvbXBhcmVzaWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xCitkZGNtczg4NiBjb21wYXJlc2lnIDlFKzM4NCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZGRjbXM4ODcgY29tcGFyZXNpZyAtMC4xMDAgOUUtMzgzICAgICAgICAgICAgICAgLT4gLTEKK2RkY21zODg4IGNvbXBhcmVzaWcgOUUtMzgzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxCisKKy0tIHNpZ25zCitkZGNtczkwMSBjb21wYXJlc2lnICAxZSs3NyAgMWUrMTEgLT4gIDEKK2RkY21zOTAyIGNvbXBhcmVzaWcgIDFlKzc3IC0xZSsxMSAtPiAgMQorZGRjbXM5MDMgY29tcGFyZXNpZyAtMWUrNzcgIDFlKzExIC0+IC0xCitkZGNtczkwNCBjb21wYXJlc2lnIC0xZSs3NyAtMWUrMTEgLT4gLTEKK2RkY21zOTA1IGNvbXBhcmVzaWcgIDFlLTc3ICAxZS0xMSAtPiAtMQorZGRjbXM5MDYgY29tcGFyZXNpZyAgMWUtNzcgLTFlLTExIC0+ICAxCitkZGNtczkwNyBjb21wYXJlc2lnIC0xZS03NyAgMWUtMTEgLT4gLTEKK2RkY21zOTA4IGNvbXBhcmVzaWcgLTFlLTc3IC0xZS0xMSAtPiAgMQorCistLSBOdWxsIHRlc3RzCitkZGNtczk5MCBjb21wYXJlc2lnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM5OTEgY29tcGFyZXNpZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWwuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWwuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGM5ODRjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVUb3RhbC5kZWNUZXN0CkBAIC0wLDAgKzEsNzA2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29tcGFyZVRvdGFsLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmctLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCistLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCistLSB0aGFuIGNvbXBhcmUuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZGNvdDAwMSBjb21wYXJldG90YWwgIC0yICAtMiAgLT4gMAorZGRjb3QwMDIgY29tcGFyZXRvdGFsICAtMiAgLTEgIC0+IC0xCitkZGNvdDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTEKK2RkY290MDA0IGNvbXBhcmV0b3RhbCAgLTIgICAxICAtPiAtMQorZGRjb3QwMDUgY29tcGFyZXRvdGFsICAtMiAgIDIgIC0+IC0xCitkZGNvdDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQorZGRjb3QwMDcgY29tcGFyZXRvdGFsICAtMSAgLTEgIC0+IDAKK2RkY290MDA4IGNvbXBhcmV0b3RhbCAgLTEgICAwICAtPiAtMQorZGRjb3QwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xCitkZGNvdDAxMCBjb21wYXJldG90YWwgIC0xICAgMiAgLT4gLTEKK2RkY290MDExIGNvbXBhcmV0b3RhbCAgIDAgIC0yICAtPiAxCitkZGNvdDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQorZGRjb3QwMTMgY29tcGFyZXRvdGFsICAgMCAgIDAgIC0+IDAKK2RkY290MDE0IGNvbXBhcmV0b3RhbCAgIDAgICAxICAtPiAtMQorZGRjb3QwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xCitkZGNvdDAxNiBjb21wYXJldG90YWwgICAxICAtMiAgLT4gMQorZGRjb3QwMTcgY29tcGFyZXRvdGFsICAgMSAgLTEgIC0+IDEKK2RkY290MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxCitkZGNvdDAxOSBjb21wYXJldG90YWwgICAxICAgMSAgLT4gMAorZGRjb3QwMjAgY29tcGFyZXRvdGFsICAgMSAgIDIgIC0+IC0xCitkZGNvdDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQorZGRjb3QwMjIgY29tcGFyZXRvdGFsICAgMiAgLTEgIC0+IDEKK2RkY290MDIzIGNvbXBhcmV0b3RhbCAgIDIgICAwICAtPiAxCitkZGNvdDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQorZGRjb3QwMjYgY29tcGFyZXRvdGFsICAgMiAgIDIgIC0+IDAKKworZGRjb3QwMzEgY29tcGFyZXRvdGFsICAtMjAgIC0yMCAgLT4gMAorZGRjb3QwMzIgY29tcGFyZXRvdGFsICAtMjAgIC0xMCAgLT4gLTEKK2RkY290MDMzIGNvbXBhcmV0b3RhbCAgLTIwICAgMDAgIC0+IC0xCitkZGNvdDAzNCBjb21wYXJldG90YWwgIC0yMCAgIDEwICAtPiAtMQorZGRjb3QwMzUgY29tcGFyZXRvdGFsICAtMjAgICAyMCAgLT4gLTEKK2RkY290MDM2IGNvbXBhcmV0b3RhbCAgLTEwICAtMjAgIC0+IDEKK2RkY290MDM3IGNvbXBhcmV0b3RhbCAgLTEwICAtMTAgIC0+IDAKK2RkY290MDM4IGNvbXBhcmV0b3RhbCAgLTEwICAgMDAgIC0+IC0xCitkZGNvdDAzOSBjb21wYXJldG90YWwgIC0xMCAgIDEwICAtPiAtMQorZGRjb3QwNDAgY29tcGFyZXRvdGFsICAtMTAgICAyMCAgLT4gLTEKK2RkY290MDQxIGNvbXBhcmV0b3RhbCAgIDAwICAtMjAgIC0+IDEKK2RkY290MDQyIGNvbXBhcmV0b3RhbCAgIDAwICAtMTAgIC0+IDEKK2RkY290MDQzIGNvbXBhcmV0b3RhbCAgIDAwICAgMDAgIC0+IDAKK2RkY290MDQ0IGNvbXBhcmV0b3RhbCAgIDAwICAgMTAgIC0+IC0xCitkZGNvdDA0NSBjb21wYXJldG90YWwgICAwMCAgIDIwICAtPiAtMQorZGRjb3QwNDYgY29tcGFyZXRvdGFsICAgMTAgIC0yMCAgLT4gMQorZGRjb3QwNDcgY29tcGFyZXRvdGFsICAgMTAgIC0xMCAgLT4gMQorZGRjb3QwNDggY29tcGFyZXRvdGFsICAgMTAgICAwMCAgLT4gMQorZGRjb3QwNDkgY29tcGFyZXRvdGFsICAgMTAgICAxMCAgLT4gMAorZGRjb3QwNTAgY29tcGFyZXRvdGFsICAgMTAgICAyMCAgLT4gLTEKK2RkY290MDUxIGNvbXBhcmV0b3RhbCAgIDIwICAtMjAgIC0+IDEKK2RkY290MDUyIGNvbXBhcmV0b3RhbCAgIDIwICAtMTAgIC0+IDEKK2RkY290MDUzIGNvbXBhcmV0b3RhbCAgIDIwICAgMDAgIC0+IDEKK2RkY290MDU1IGNvbXBhcmV0b3RhbCAgIDIwICAgMTAgIC0+IDEKK2RkY290MDU2IGNvbXBhcmV0b3RhbCAgIDIwICAgMjAgIC0+IDAKKworZGRjb3QwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwCitkZGNvdDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xCitkZGNvdDA2MyBjb21wYXJldG90YWwgIC0yLjAgICAwLjAgIC0+IC0xCitkZGNvdDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xCitkZGNvdDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xCitkZGNvdDA2NiBjb21wYXJldG90YWwgIC0xLjAgIC0yLjAgIC0+IDEKK2RkY290MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMAorZGRjb3QwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQorZGRjb3QwNjkgY29tcGFyZXRvdGFsICAtMS4wICAgMS4wICAtPiAtMQorZGRjb3QwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQorZGRjb3QwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxCitkZGNvdDA3MiBjb21wYXJldG90YWwgICAwLjAgIC0xLjAgIC0+IDEKK2RkY290MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMAorZGRjb3QwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQorZGRjb3QwNzUgY29tcGFyZXRvdGFsICAgMC4wICAgMi4wICAtPiAtMQorZGRjb3QwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxCitkZGNvdDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDEKK2RkY290MDc4IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDAuMCAgLT4gMQorZGRjb3QwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwCitkZGNvdDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xCitkZGNvdDA4MSBjb21wYXJldG90YWwgICAyLjAgIC0yLjAgIC0+IDEKK2RkY290MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQorZGRjb3QwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxCitkZGNvdDA4NSBjb21wYXJldG90YWwgICAyLjAgICAxLjAgIC0+IDEKK2RkY290MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RkY290MDkwIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgLT4gMAorZGRjb3QwOTEgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAtPiAtMQorZGRjb3QwOTIgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAtPiAxCitkZGNvdDA5MyBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0IC0+IDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCitkZGNvdDEwMCBjb21wYXJldG90YWwgICA3LjAgICAgNy4wICAgIC0+IDAKK2RkY290MTAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3ICAgICAgLT4gLTEKK2RkY290MTAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3LjAgICAgLT4gMQorZGRjb3QxMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIDcuMCAgICAtPiAxCitkZGNvdDEwNCBjb21wYXJldG90YWwgICA3MEUtMSAgNy4wICAgIC0+IDAKK2RkY290MTA1IGNvbXBhcmV0b3RhbCAgIDAuN0UrMSA3ICAgICAgLT4gMAorZGRjb3QxMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcgICAgICAtPiAtMQorZGRjb3QxMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIDdFKzAgICAtPiAtMQorZGRjb3QxMDggY29tcGFyZXRvdGFsICAgNy4wICAgIDcwRS0xICAtPiAwCitkZGNvdDEwOSBjb21wYXJldG90YWwgICA3ICAgICAgMC43RSsxIC0+IDAKK2RkY290MTEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3MEUtMSAgLT4gMQorCitkZGNvdDEyMCBjb21wYXJldG90YWwgICA4LjAgICAgNy4wICAgIC0+IDEKK2RkY290MTIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3ICAgICAgLT4gMQorZGRjb3QxMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIDcuMCAgICAtPiAxCitkZGNvdDEyMyBjb21wYXJldG90YWwgICA4RSswICAgNy4wICAgIC0+IDEKK2RkY290MTI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3LjAgICAgLT4gMQorZGRjb3QxMjUgY29tcGFyZXRvdGFsICAgMC44RSsxIDcgICAgICAtPiAxCitkZGNvdDEyNiBjb21wYXJldG90YWwgICA4MEUtMSAgNyAgICAgIC0+IDEKK2RkY290MTI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3RSswICAgLT4gMQorZGRjb3QxMjggY29tcGFyZXRvdGFsICAgOC4wICAgIDcwRS0xICAtPiAxCitkZGNvdDEyOSBjb21wYXJldG90YWwgICA4ICAgICAgMC43RSsxICAtPiAxCitkZGNvdDEzMCBjb21wYXJldG90YWwgICA4ICAgICAgNzBFLTEgIC0+IDEKKworZGRjb3QxNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIDkuMCAgICAtPiAtMQorZGRjb3QxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQorZGRjb3QxNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIDkuMCAgICAtPiAtMQorZGRjb3QxNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjb3QxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQorZGRjb3QxNDUgY29tcGFyZXRvdGFsICAgMC44RSsxIDkgICAgICAtPiAtMQorZGRjb3QxNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIDkgICAgICAtPiAtMQorZGRjb3QxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQorZGRjb3QxNDggY29tcGFyZXRvdGFsICAgOC4wICAgIDkwRS0xICAtPiAtMQorZGRjb3QxNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjb3QxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitkZGNvdDIwMCBjb21wYXJldG90YWwgIC03LjAgICAgNy4wICAgIC0+IC0xCitkZGNvdDIwMSBjb21wYXJldG90YWwgIC03LjAgICAgNyAgICAgIC0+IC0xCitkZGNvdDIwMiBjb21wYXJldG90YWwgIC03ICAgICAgNy4wICAgIC0+IC0xCitkZGNvdDIwMyBjb21wYXJldG90YWwgIC03RSswICAgNy4wICAgIC0+IC0xCitkZGNvdDIwNCBjb21wYXJldG90YWwgIC03MEUtMSAgNy4wICAgIC0+IC0xCitkZGNvdDIwNSBjb21wYXJldG90YWwgIC0wLjdFKzEgNyAgICAgIC0+IC0xCitkZGNvdDIwNiBjb21wYXJldG90YWwgIC03MEUtMSAgNyAgICAgIC0+IC0xCitkZGNvdDIwNyBjb21wYXJldG90YWwgIC03LjAgICAgN0UrMCAgIC0+IC0xCitkZGNvdDIwOCBjb21wYXJldG90YWwgIC03LjAgICAgNzBFLTEgIC0+IC0xCitkZGNvdDIwOSBjb21wYXJldG90YWwgIC03ICAgICAgMC43RSsxIC0+IC0xCitkZGNvdDIxMCBjb21wYXJldG90YWwgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2RkY290MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTEKK2RkY290MjIxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3ICAgICAgLT4gLTEKK2RkY290MjIyIGNvbXBhcmV0b3RhbCAgLTggICAgICA3LjAgICAgLT4gLTEKK2RkY290MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTEKK2RkY290MjI0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2RkY290MjI1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2RkY290MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTEKK2RkY290MjI3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3RSswICAgLT4gLTEKK2RkY290MjI4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2RkY290MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTEKK2RkY290MjMwIGNvbXBhcmV0b3RhbCAgLTggICAgICA3MEUtMSAgLT4gLTEKKworZGRjb3QyNDAgY29tcGFyZXRvdGFsICAtOC4wICAgIDkuMCAgICAtPiAtMQorZGRjb3QyNDEgY29tcGFyZXRvdGFsICAtOC4wICAgIDkgICAgICAtPiAtMQorZGRjb3QyNDIgY29tcGFyZXRvdGFsICAtOCAgICAgIDkuMCAgICAtPiAtMQorZGRjb3QyNDMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjb3QyNDQgY29tcGFyZXRvdGFsICAtODBFLTEgIDkuMCAgICAtPiAtMQorZGRjb3QyNDUgY29tcGFyZXRvdGFsICAtMC44RSsxIDkgICAgICAtPiAtMQorZGRjb3QyNDYgY29tcGFyZXRvdGFsICAtODBFLTEgIDkgICAgICAtPiAtMQorZGRjb3QyNDcgY29tcGFyZXRvdGFsICAtOC4wICAgIDlFKzAgICAtPiAtMQorZGRjb3QyNDggY29tcGFyZXRvdGFsICAtOC4wICAgIDkwRS0xICAtPiAtMQorZGRjb3QyNDkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjb3QyNTAgY29tcGFyZXRvdGFsICAtOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitkZGNvdDMwMCBjb21wYXJldG90YWwgICA3LjAgICAgLTcuMCAgICAtPiAxCitkZGNvdDMwMSBjb21wYXJldG90YWwgICA3LjAgICAgLTcgICAgICAtPiAxCitkZGNvdDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxCitkZGNvdDMwMyBjb21wYXJldG90YWwgICA3RSswICAgLTcuMCAgICAtPiAxCitkZGNvdDMwNCBjb21wYXJldG90YWwgICA3MEUtMSAgLTcuMCAgICAtPiAxCitkZGNvdDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxCitkZGNvdDMwNiBjb21wYXJldG90YWwgICA3MEUtMSAgLTcgICAgICAtPiAxCitkZGNvdDMwNyBjb21wYXJldG90YWwgICA3LjAgICAgLTdFKzAgICAtPiAxCitkZGNvdDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxCitkZGNvdDMwOSBjb21wYXJldG90YWwgICA3ICAgICAgLS43RSsxICAtPiAxCitkZGNvdDMxMCBjb21wYXJldG90YWwgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2RkY290MzIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNy4wICAgIC0+IDEKK2RkY290MzIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNyAgICAgIC0+IDEKK2RkY290MzIyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNy4wICAgIC0+IDEKK2RkY290MzIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtNy4wICAgIC0+IDEKK2RkY290MzI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2RkY290MzI1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtNyAgICAgIC0+IDEKK2RkY290MzI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNyAgICAgIC0+IDEKK2RkY290MzI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2RkY290MzI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2RkY290MzI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjdFKzEgIC0+IDEKK2RkY290MzMwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNzBFLTEgIC0+IDEKKworZGRjb3QzNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIC05LjAgICAgLT4gMQorZGRjb3QzNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIC05ICAgICAgLT4gMQorZGRjb3QzNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIC05LjAgICAgLT4gMQorZGRjb3QzNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC05LjAgICAgLT4gMQorZGRjb3QzNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIC05LjAgICAgLT4gMQorZGRjb3QzNDUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC05ICAgICAgLT4gMQorZGRjb3QzNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIC05ICAgICAgLT4gMQorZGRjb3QzNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIC05RSswICAgLT4gMQorZGRjb3QzNDggY29tcGFyZXRvdGFsICAgOC4wICAgIC05MEUtMSAgLT4gMQorZGRjb3QzNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uOUUrMSAgLT4gMQorZGRjb3QzNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitkZGNvdDQwMCBjb21wYXJldG90YWwgICAtNy4wICAgIC03LjAgICAgLT4gMAorZGRjb3Q0MDEgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNyAgICAgIC0+IDEKK2RkY290NDAyIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MDMgY29tcGFyZXRvdGFsICAgLTdFKzAgICAtNy4wICAgIC0+IC0xCitkZGNvdDQwNCBjb21wYXJldG90YWwgICAtNzBFLTEgIC03LjAgICAgLT4gMAorZGRjb3Q0MDUgY29tcGFyZXRvdGFsICAgLS43RSsxICAtNyAgICAgIC0+IDAKK2RkY290NDA2IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcgICAgICAtPiAxCitkZGNvdDQwNyBjb21wYXJldG90YWwgICAtNy4wICAgIC03RSswICAgLT4gMQorZGRjb3Q0MDggY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKK2RkY290NDA5IGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLS43RSsxICAtPiAwCitkZGNvdDQxMCBjb21wYXJldG90YWwgICAtNyAgICAgIC03MEUtMSAgLT4gLTEKKworZGRjb3Q0MjAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNy4wICAgIC0+IC0xCitkZGNvdDQyMSBjb21wYXJldG90YWwgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2RkY290NDIyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MjMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtNy4wICAgIC0+IC0xCitkZGNvdDQyNCBjb21wYXJldG90YWwgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2RkY290NDI1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorZGRjb3Q0MjYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCitkZGNvdDQyNyBjb21wYXJldG90YWwgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2RkY290NDI4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorZGRjb3Q0MjkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjdFKzEgIC0+IC0xCitkZGNvdDQzMCBjb21wYXJldG90YWwgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworZGRjb3Q0NDAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2RkY290NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxCitkZGNvdDQ0MiBjb21wYXJldG90YWwgICAtOCAgICAgIC05LjAgICAgLT4gMQorZGRjb3Q0NDMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2RkY290NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxCitkZGNvdDQ0NSBjb21wYXJldG90YWwgICAtLjhFKzEgIC05ICAgICAgLT4gMQorZGRjb3Q0NDYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2RkY290NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxCitkZGNvdDQ0OCBjb21wYXJldG90YWwgICAtOC4wICAgIC05MEUtMSAgLT4gMQorZGRjb3Q0NDkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2RkY290NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxCisKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitkZGNvdDQ3MyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ3NCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RkY290NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ3NiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ3NyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RkY290NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ3OSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ4MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RkY290NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ4MiBjb21wYXJldG90YWwgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ4MyBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb3Q0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAxCitkZGNvdDQ4OCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMQorZGRjb3Q0ODkgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgLT4gMQorZGRjb3Q0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxCitkZGNvdDQ5MSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMQorZGRjb3Q0OTIgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMQorZGRjb3Q0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAxCitkZGNvdDQ5NCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMQorZGRjb3Q0OTUgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgLT4gMQorZGRjb3Q0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxCitkZGNvdDQ5NyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitkZGNvdDQ5OCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTcgICAgLT4gMQorZGRjb3Q0OTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE2ICAgIC0+IDEKK2RkY290NTAwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNSAgICAtPiAxCitkZGNvdDUwMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTQgICAgLT4gMQorZGRjb3Q1MDIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEzICAgIC0+IDEKK2RkY290NTAzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMiAgICAtPiAxCitkZGNvdDUwNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTEgICAgLT4gMQorZGRjb3Q1MDUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEwICAgIC0+IDEKK2RkY290NTA2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS05ICAgICAtPiAxCitkZGNvdDUwNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOCAgICAgLT4gMQorZGRjb3Q1MDggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTcgICAgIC0+IDEKK2RkY290NTA5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS02ICAgICAtPiAxCitkZGNvdDUxMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNSAgICAgLT4gMQorZGRjb3Q1MTEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTQgICAgIC0+IDEKK2RkY290NTEyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0zICAgICAtPiAxCitkZGNvdDUxMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMiAgICAgLT4gMQorZGRjb3Q1MTQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEgICAgIC0+IDEKK2RkY290NTE1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0wICAgICAtPiAwCitkZGNvdDUxNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2RkY290NTE3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsyICAgICAtPiAtMQorZGRjb3Q1MTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNvdDUxOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2RkY290NTIxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs1ICAgICAtPiAtMQorZGRjb3Q1MjIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitkZGNvdDUyMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2RkY290NTI0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs4ICAgICAtPiAtMQorZGRjb3Q1MjUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitkZGNvdDUyNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2RkY290NTI3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMSAgICAtPiAtMQorZGRjb3Q1MjggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitkZGNvdDUyOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2RkY290NTMwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNCAgICAtPiAtMQorZGRjb3Q1MzEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCitkZGNvdDUzMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTYgICAgLT4gLTEKK2RkY290NTMzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNyAgICAtPiAtMQorLS0gTFIgc3dhcAorZGRjb3Q1MzggY29tcGFyZXRvdGFsICAgIDFFLTE3ICAxICAgICAgIC0+IC0xCitkZGNvdDUzOSBjb21wYXJldG90YWwgICAgMUUtMTYgIDEgICAgICAgLT4gLTEKK2RkY290NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDEgY29tcGFyZXRvdGFsICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitkZGNvdDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2RkY290NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDQgY29tcGFyZXRvdGFsICAgIDFFLTExICAxICAgICAgIC0+IC0xCitkZGNvdDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2RkY290NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDcgY29tcGFyZXRvdGFsICAgIDFFLTggICAxICAgICAgIC0+IC0xCitkZGNvdDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2RkY290NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NTAgY29tcGFyZXRvdGFsICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitkZGNvdDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2RkY290NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NTMgY29tcGFyZXRvdGFsICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitkZGNvdDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2RkY290NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMAorZGRjb3Q1NTYgY29tcGFyZXRvdGFsICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitkZGNvdDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2RkY290NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NTkgY29tcGFyZXRvdGFsICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitkZGNvdDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2RkY290NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjMgY29tcGFyZXRvdGFsICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitkZGNvdDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2RkY290NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjYgY29tcGFyZXRvdGFsICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitkZGNvdDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2RkY290NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjkgY29tcGFyZXRvdGFsICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitkZGNvdDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2RkY290NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQorZGRjb3Q1NzIgY29tcGFyZXRvdGFsICAgIDFFKzE2ICAxICAgICAgIC0+ICAxCitkZGNvdDU3MyBjb21wYXJldG90YWwgICAgMUUrMTcgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorZGRjb3Q1NzggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgLT4gMQorZGRjb3Q1NzkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgLT4gMQorZGRjb3Q1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQorZGRjb3Q1ODEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorZGRjb3Q1ODIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorZGRjb3Q1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQorZGRjb3Q1ODQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorZGRjb3Q1ODUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorZGRjb3Q1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQorZGRjb3Q1ODcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorZGRjb3Q1ODggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorZGRjb3Q1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKK2RkY290NTkwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitkZGNvdDU5MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorZGRjb3Q1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKK2RkY290NTkzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitkZGNvdDU5NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorZGRjb3Q1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKK2RkY290NTk2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNvdDU5NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorZGRjb3Q1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKK2RkY290NTk5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkZGNvdDYwMCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjAxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwMyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjA0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwNiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjA3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwOSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjEwIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQorZGRjb3Q2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitkZGNvdDYxMiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2RkY290NjEzIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQorZGRjb3Q2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitkZGNvdDYxNSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2RkY290NjE2IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQorZGRjb3Q2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitkZGNvdDYxOCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2RkY290NjE5IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQorZGRjb3Q2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyMSBjb21wYXJldG90YWwgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjIyIGNvbXBhcmV0b3RhbCAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyNCBjb21wYXJldG90YWwgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjI1IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyNyBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjI4IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYzMCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2RkY290NjMxIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQorZGRjb3Q2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitkZGNvdDYzMyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2RkY290NjM0IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQorZGRjb3Q2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitkZGNvdDYzNiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2RkY290NjM3IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQorZGRjb3Q2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitkZGNvdDYzOSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkY290NjQwIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAgICAtPiAwCitkZGNvdDY0MSBjb21wYXJldG90YWwgICAwICAgIC0wICAgLT4gMQorZGRjb3Q2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDEKK2RkY290NjQzIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAuMCAtPiAxCitkZGNvdDY0NCBjb21wYXJldG90YWwgIC0wICAgICAwICAgLT4gLTEKK2RkY290NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwCitkZGNvdDY0NiBjb21wYXJldG90YWwgIC0wICAgIC0wLjAgLT4gLTEKK2RkY290NjQ3IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAuMCAtPiAtMQorZGRjb3Q2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xCitkZGNvdDY0OSBjb21wYXJldG90YWwgICAwLjAgIC0wICAgLT4gMQorZGRjb3Q2NTAgY29tcGFyZXRvdGFsICAgMC4wICAtMC4wIC0+IDEKK2RkY290NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwCitkZGNvdDY1MiBjb21wYXJldG90YWwgIC0wLjAgICAwICAgLT4gLTEKK2RkY290NjUzIGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAgICAtPiAxCitkZGNvdDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMAorZGRjb3Q2NTUgY29tcGFyZXRvdGFsICAtMC4wICAgMC4wIC0+IC0xCisKK2RkY290NjU2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAuMCAtPiAtMQorZGRjb3Q2NTcgY29tcGFyZXRvdGFsICAtMEUyICAgMC4wIC0+IC0xCitkZGNvdDY1OCBjb21wYXJldG90YWwgICAwRTEgICAwLjAgLT4gMQorZGRjb3Q2NTkgY29tcGFyZXRvdGFsICAgMEUyICAgMC4wIC0+IDEKK2RkY290NjYwIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAgICAtPiAtMQorZGRjb3Q2NjEgY29tcGFyZXRvdGFsICAtMEUyICAgMCAgIC0+IC0xCitkZGNvdDY2MiBjb21wYXJldG90YWwgICAwRTEgICAwICAgLT4gMQorZGRjb3Q2NjMgY29tcGFyZXRvdGFsICAgMEUyICAgMCAgIC0+IDEKK2RkY290NjY0IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMSAtPiAwCitkZGNvdDY2NSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTEgLT4gLTEKK2RkY290NjY2IGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMSAtPiAxCitkZGNvdDY2NyBjb21wYXJldG90YWwgICAwRTIgIC0wRTEgLT4gMQorZGRjb3Q2NjggY29tcGFyZXRvdGFsICAtMEUxICAtMEUyIC0+IDEKK2RkY290NjY5IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMiAtPiAwCitkZGNvdDY3MCBjb21wYXJldG90YWwgICAwRTEgIC0wRTIgLT4gMQorZGRjb3Q2NzEgY29tcGFyZXRvdGFsICAgMEUyICAtMEUyIC0+IDEKK2RkY290NjcyIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMSAtPiAtMQorZGRjb3Q2NzMgY29tcGFyZXRvdGFsICAtMEUyICAgMEUxIC0+IC0xCitkZGNvdDY3NCBjb21wYXJldG90YWwgICAwRTEgICAwRTEgLT4gMAorZGRjb3Q2NzUgY29tcGFyZXRvdGFsICAgMEUyICAgMEUxIC0+IDEKK2RkY290Njc2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMiAtPiAtMQorZGRjb3Q2NzcgY29tcGFyZXRvdGFsICAtMEUyICAgMEUyIC0+IC0xCitkZGNvdDY3OCBjb21wYXJldG90YWwgICAwRTEgICAwRTIgLT4gLTEKK2RkY290Njc5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RkY290NjgwIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyICAgICAgICAgICAtPiAwCitkZGNvdDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQorZGRjb3Q2ODIgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDEKK2RkY290NjgzIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAxCitkZGNvdDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQorZGRjb3Q2ODUgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDEKK2RkY290Njg2IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAxCitkZGNvdDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQorZGRjb3Q2ODggY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDEKK2RkY290Njg5IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAxCitkZGNvdDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorZGRjb3Q2OTEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAgIDEyIC0+IC0xCitkZGNvdDY5MiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgICAgMTIgLT4gLTEKK2RkY290NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IC0xCitkZGNvdDY5NSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gLTEKK2RkY290Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IC0xCitkZGNvdDY5OCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gLTEKK2RkY290Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQorCistLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcworZGRjb3Q3MDEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAwICAxIC0+ICAxCitkZGNvdDcwMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAgLT4gLTEKK2RkY290NzAzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAgMSAtPiAgMQorZGRjb3Q3MDQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgIC0+IC0xCitkZGNvdDcwNSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MCAgIDEgLT4gIDEKK2RkY290NzA2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgICAtPiAtMQorZGRjb3Q3MDcgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTEgICAxIC0+ICAxCitkZGNvdDcwOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAgLT4gLTEKK2RkY290NzA5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAgMSAtPiAgMQorZGRjb3Q3MTAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgIC0+IC0xCitkZGNvdDcxMSBjb21wYXJldG90YWwgMTIzNDU2Nzg5NiAgIDEgLT4gIDEKK2RkY290NzEyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgICAtPiAtMQorZGRjb3Q3MTMgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkxICAxIC0+IC0xCitkZGNvdDcxNCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MSAgLT4gIDEKK2RkY290NzE1IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MDEgMSAtPiAtMQorZGRjb3Q3MTYgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTAxIC0+ICAxCitkZGNvdDcxNyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTYgIDEgLT4gLTEKK2RkY290NzE4IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODk2ICAtPiAgMQorCistLSBvbGQgcmVzaWR1ZSBjYXNlcworZGRjb3Q3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDEKK2RkY290NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxCitkZGNvdDc0MiBjb21wYXJldG90YWwgIDEgIDAuOTk5OTkgICAgLT4gMQorZGRjb3Q3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDEKK2RkY290NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQorZGRjb3Q3NDUgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMSAgIC0+IC0xCitkZGNvdDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2RkY290NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQorZGRjb3Q3NTEgY29tcGFyZXRvdGFsICAwLjk5OTk5OSAgIDEgIC0+IC0xCitkZGNvdDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2RkY290NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQorZGRjb3Q3NTQgY29tcGFyZXRvdGFsICAxLjAwMDAxICAgIDEgIC0+IDEKK2RkY290NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxCitkZGNvdDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBTcGVjaWFscworZGRjb3Q3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQorZGRjb3Q3ODEgY29tcGFyZXRvdGFsICBJbmYgIC0xMDAwICAtPiAgMQorZGRjb3Q3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQorZGRjb3Q3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQorZGRjb3Q3ODQgY29tcGFyZXRvdGFsICBJbmYgICAwICAgICAtPiAgMQorZGRjb3Q3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQorZGRjb3Q3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQorZGRjb3Q3ODcgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAorZGRjb3Q3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQorZGRjb3Q3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQorZGRjb3Q3OTAgY29tcGFyZXRvdGFsIC0xICAgICBJbmYgICAtPiAtMQorZGRjb3Q3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQorZGRjb3Q3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQorZGRjb3Q3OTMgY29tcGFyZXRvdGFsICAxICAgICBJbmYgICAtPiAtMQorZGRjb3Q3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQorZGRjb3Q3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAorCitkZGNvdDgwMCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCitkZGNvdDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xCitkZGNvdDgwMiBjb21wYXJldG90YWwgLUluZiAgLTEgICAgIC0+IC0xCitkZGNvdDgwMyBjb21wYXJldG90YWwgLUluZiAgLTAgICAgIC0+IC0xCitkZGNvdDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xCitkZGNvdDgwNSBjb21wYXJldG90YWwgLUluZiAgIDEgICAgIC0+IC0xCitkZGNvdDgwNiBjb21wYXJldG90YWwgLUluZiAgIDEwMDAgIC0+IC0xCitkZGNvdDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCitkZGNvdDgwOCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCitkZGNvdDgwOSBjb21wYXJldG90YWwgLTEwMDAgLUluZiAgIC0+ICAxCitkZGNvdDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxCitkZGNvdDgxMSBjb21wYXJldG90YWwgLTAgICAgLUluZiAgIC0+ICAxCitkZGNvdDgxMiBjb21wYXJldG90YWwgIDAgICAgLUluZiAgIC0+ICAxCitkZGNvdDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxCitkZGNvdDgxNCBjb21wYXJldG90YWwgIDEwMDAgLUluZiAgIC0+ICAxCitkZGNvdDgxNSBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCisKK2RkY290ODIxIGNvbXBhcmV0b3RhbCAgTmFOIC1JbmYgICAgLT4gIDEKK2RkY290ODIyIGNvbXBhcmV0b3RhbCAgTmFOIC0xMDAwICAgLT4gIDEKK2RkY290ODIzIGNvbXBhcmV0b3RhbCAgTmFOIC0xICAgICAgLT4gIDEKK2RkY290ODI0IGNvbXBhcmV0b3RhbCAgTmFOIC0wICAgICAgLT4gIDEKK2RkY290ODI1IGNvbXBhcmV0b3RhbCAgTmFOICAwICAgICAgLT4gIDEKK2RkY290ODI2IGNvbXBhcmV0b3RhbCAgTmFOICAxICAgICAgLT4gIDEKK2RkY290ODI3IGNvbXBhcmV0b3RhbCAgTmFOICAxMDAwICAgLT4gIDEKK2RkY290ODI4IGNvbXBhcmV0b3RhbCAgTmFOICBJbmYgICAgLT4gIDEKK2RkY290ODI5IGNvbXBhcmV0b3RhbCAgTmFOICBOYU4gICAgLT4gIDAKK2RkY290ODMwIGNvbXBhcmV0b3RhbCAtSW5mICBOYU4gICAgLT4gIC0xCitkZGNvdDgzMSBjb21wYXJldG90YWwgLTEwMDAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzIgY29tcGFyZXRvdGFsIC0xICAgIE5hTiAgICAtPiAgLTEKK2RkY290ODMzIGNvbXBhcmV0b3RhbCAtMCAgICBOYU4gICAgLT4gIC0xCitkZGNvdDgzNCBjb21wYXJldG90YWwgIDAgICAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzUgY29tcGFyZXRvdGFsICAxICAgIE5hTiAgICAtPiAgLTEKK2RkY290ODM2IGNvbXBhcmV0b3RhbCAgMTAwMCBOYU4gICAgLT4gIC0xCitkZGNvdDgzNyBjb21wYXJldG90YWwgIEluZiAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzggY29tcGFyZXRvdGFsIC1OYU4gLU5hTiAgICAtPiAgMAorZGRjb3Q4MzkgY29tcGFyZXRvdGFsICtOYU4gLU5hTiAgICAtPiAgMQorZGRjb3Q4NDAgY29tcGFyZXRvdGFsIC1OYU4gK05hTiAgICAtPiAgLTEKKworZGRjb3Q4NDEgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAtPiAgMQorZGRjb3Q4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQorZGRjb3Q4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQorZGRjb3Q4NDQgY29tcGFyZXRvdGFsICBzTmFOIC0xMDAwICAtPiAgMQorZGRjb3Q4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQorZGRjb3Q4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQorZGRjb3Q4NDcgY29tcGFyZXRvdGFsICBzTmFOICAwICAgICAtPiAgMQorZGRjb3Q4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQorZGRjb3Q4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQorZGRjb3Q4NTAgY29tcGFyZXRvdGFsICBzTmFOICBOYU4gICAtPiAgLTEKK2RkY290ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKKworZGRjb3Q4NTIgY29tcGFyZXRvdGFsIC1zTmFOIHNOYU4gICAtPiAgLTEKK2RkY290ODUzIGNvbXBhcmV0b3RhbCAtTmFOICBzTmFOICAgLT4gIC0xCitkZGNvdDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NTUgY29tcGFyZXRvdGFsIC0xMDAwIHNOYU4gICAtPiAgLTEKK2RkY290ODU2IGNvbXBhcmV0b3RhbCAtMSAgICBzTmFOICAgLT4gIC0xCitkZGNvdDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NTggY29tcGFyZXRvdGFsICAwICAgIHNOYU4gICAtPiAgLTEKK2RkY290ODU5IGNvbXBhcmV0b3RhbCAgMSAgICBzTmFOICAgLT4gIC0xCitkZGNvdDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NjEgY29tcGFyZXRvdGFsICBJbmYgIHNOYU4gICAtPiAgLTEKK2RkY290ODYyIGNvbXBhcmV0b3RhbCAgTmFOICBzTmFOICAgLT4gIDEKK2RkY290ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKKworZGRjb3Q4NzEgY29tcGFyZXRvdGFsICAtc05hTiAtc05hTiAgLT4gIDAKK2RkY290ODcyIGNvbXBhcmV0b3RhbCAgLXNOYU4gLU5hTiAgIC0+ICAxCitkZGNvdDg3MyBjb21wYXJldG90YWwgIC1zTmFOIC1JbmYgICAtPiAgLTEKK2RkY290ODc0IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEwMDAgIC0+ICAtMQorZGRjb3Q4NzUgY29tcGFyZXRvdGFsICAtc05hTiAtMSAgICAgLT4gIC0xCitkZGNvdDg3NiBjb21wYXJldG90YWwgIC1zTmFOIC0wICAgICAtPiAgLTEKK2RkY290ODc3IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDAgICAgIC0+ICAtMQorZGRjb3Q4NzggY29tcGFyZXRvdGFsICAtc05hTiAgMSAgICAgLT4gIC0xCitkZGNvdDg3OSBjb21wYXJldG90YWwgIC1zTmFOICAxMDAwICAtPiAgLTEKK2RkY290ODgwIGNvbXBhcmV0b3RhbCAgLXNOYU4gIE5hTiAgIC0+ICAtMQorZGRjb3Q4ODEgY29tcGFyZXRvdGFsICAtc05hTiBzTmFOICAgLT4gIC0xCisKK2RkY290ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwCitkZGNvdDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTEKK2RkY290ODg0IGNvbXBhcmV0b3RhbCAtSW5mICAtc05hTiAgIC0+ICAxCitkZGNvdDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQorZGRjb3Q4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDEKK2RkY290ODg3IGNvbXBhcmV0b3RhbCAtMCAgICAtc05hTiAgIC0+ICAxCitkZGNvdDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQorZGRjb3Q4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDEKK2RkY290ODkwIGNvbXBhcmV0b3RhbCAgMTAwMCAtc05hTiAgIC0+ICAxCitkZGNvdDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQorZGRjb3Q4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDEKK2RkY290ODkzIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgIC0+ICAxCisKKy0tIE5hTnMgd2l0aCBwYXlsb2FkCitkZGNvdDk2MCBjb21wYXJldG90YWwgIE5hTjkgLUluZiAgIC0+ICAxCitkZGNvdDk2MSBjb21wYXJldG90YWwgIE5hTjggIDk5OSAgIC0+ICAxCitkZGNvdDk2MiBjb21wYXJldG90YWwgIE5hTjc3IEluZiAgIC0+ICAxCitkZGNvdDk2MyBjb21wYXJldG90YWwgLU5hTjY3IE5hTjUgIC0+ICAtMQorZGRjb3Q5NjQgY29tcGFyZXRvdGFsIC1JbmYgIC1OYU40ICAtPiAgMQorZGRjb3Q5NjUgY29tcGFyZXRvdGFsIC05OTkgIC1OYU4zMyAtPiAgMQorZGRjb3Q5NjYgY29tcGFyZXRvdGFsICBJbmYgICBOYU4yICAtPiAgLTEKKworZGRjb3Q5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQorZGRjb3Q5NzEgY29tcGFyZXRvdGFsICtOYU40MSAtTmFONDIgLT4gMQorZGRjb3Q5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTEKK2RkY290OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xCitkZGNvdDk3NCBjb21wYXJldG90YWwgLU5hTjQyIC1OYU4wMSAtPiAtMQorZGRjb3Q5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDEKK2RkY290OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xCitkZGNvdDk3NyBjb21wYXJldG90YWwgK05hTjQyICtOYU4wMSAtPiAgMQorCitkZGNvdDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQorZGRjb3Q5ODEgY29tcGFyZXRvdGFsICtzTmFONzcxIC1zTmFONzcyIC0+IDEKK2RkY290OTgyIGNvbXBhcmV0b3RhbCAtc05hTjc3MSArc05hTjc3MiAtPiAtMQorZGRjb3Q5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xCitkZGNvdDk4NCBjb21wYXJldG90YWwgLXNOYU43NzIgLXNOYU43NzEgLT4gLTEKK2RkY290OTg1IGNvbXBhcmV0b3RhbCArc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZGRjb3Q5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xCitkZGNvdDk4NyBjb21wYXJldG90YWwgK3NOYU43NzIgK3NOYU43NzEgLT4gIDEKKworZGRjb3Q5OTEgY29tcGFyZXRvdGFsIC1zTmFOOTkgLUluZiAgICAtPiAtMQorZGRjb3Q5OTIgY29tcGFyZXRvdGFsICBzTmFOOTggLTExICAgICAtPiAgMQorZGRjb3Q5OTMgY29tcGFyZXRvdGFsICBzTmFOOTcgIE5hTiAgICAtPiAtMQorZGRjb3Q5OTQgY29tcGFyZXRvdGFsICBzTmFOMTYgc05hTjk0ICAtPiAtMQorZGRjb3Q5OTUgY29tcGFyZXRvdGFsICBOYU44NSAgc05hTjgzICAtPiAgMQorZGRjb3Q5OTYgY29tcGFyZXRvdGFsIC1JbmYgICAgc05hTjkyICAtPiAtMQorZGRjb3Q5OTcgY29tcGFyZXRvdGFsICAwODggICAgc05hTjgxICAtPiAtMQorZGRjb3Q5OTggY29tcGFyZXRvdGFsICBJbmYgICAgc05hTjkwICAtPiAtMQorZGRjb3Q5OTkgY29tcGFyZXRvdGFsICBOYU4gICAtc05hTjg5ICAtPiAgMQorCistLSBzcHJlYWQgemVyb3MKK2RkY290MTExMCBjb21wYXJldG90YWwgICAwRS0zODMgIDAgICAgICAgLT4gLTEKK2RkY290MTExMSBjb21wYXJldG90YWwgICAwRS0zODMgLTAgICAgICAgLT4gIDEKK2RkY290MTExMiBjb21wYXJldG90YWwgIC0wRS0zODMgIDAgICAgICAgLT4gLTEKK2RkY290MTExMyBjb21wYXJldG90YWwgIC0wRS0zODMgLTAgICAgICAgLT4gIDEKK2RkY290MTExNCBjb21wYXJldG90YWwgICAwRS0zODMgIDBFKzM4NCAgLT4gLTEKK2RkY290MTExNSBjb21wYXJldG90YWwgICAwRS0zODMgLTBFKzM4NCAgLT4gIDEKK2RkY290MTExNiBjb21wYXJldG90YWwgIC0wRS0zODMgIDBFKzM4NCAgLT4gLTEKK2RkY290MTExNyBjb21wYXJldG90YWwgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDEKK2RkY290MTExOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFKzM4NCAgLT4gLTEKK2RkY290MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzM4NCAgLT4gIDEKK2RkY290MTEyMCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFKzM4NCAgLT4gLTEKK2RkY290MTEyMSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFKzM4NCAgLT4gIDEKKworZGRjb3QxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMCAgICAgICAtPiAgMQorZGRjb3QxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMCAgICAgICAtPiAgMQorZGRjb3QxMTMyIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMCAgICAgICAtPiAtMQorZGRjb3QxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMCAgICAgICAtPiAtMQorZGRjb3QxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMQorZGRjb3QxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMEUtMzgzICAtPiAgMQorZGRjb3QxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMEUtMzgzICAtPiAtMQorZGRjb3QxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMEUtMzgzICAtPiAtMQorZGRjb3QxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtMzgzICAtPiAgMQorZGRjb3QxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtMzgzICAtPiAgMQorZGRjb3QxMTQwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUtMzgzICAtPiAtMQorZGRjb3QxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtMzgzICAtPiAtMQorCistLSBOdWxsIHRlc3RzCitkZGNvdDk5OTAgY29tcGFyZXRvdGFsIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRjb3Q5OTkxIGNvbXBhcmV0b3RhbCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWxNYWcuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWxNYWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODdhMDkyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVUb3RhbE1hZy5kZWNUZXN0CkBAIC0wLDAgKzEsNzA2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb247IGFicy4gdG90YWwgb3JkZXItLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCistLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCistLSB0aGFuIGNvbXBhcmUuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZGN0bTAwMSBjb21wYXJldG90bWFnICAtMiAgLTIgICAtPiAgIDAKK2RkY3RtMDAyIGNvbXBhcmV0b3RtYWcgIC0yICAtMSAgIC0+ICAgMQorZGRjdG0wMDMgY29tcGFyZXRvdG1hZyAgLTIgICAwICAgLT4gICAxCitkZGN0bTAwNCBjb21wYXJldG90bWFnICAtMiAgIDEgICAtPiAgIDEKK2RkY3RtMDA1IGNvbXBhcmV0b3RtYWcgIC0yICAgMiAgIC0+ICAgMAorZGRjdG0wMDYgY29tcGFyZXRvdG1hZyAgLTEgIC0yICAgLT4gIC0xCitkZGN0bTAwNyBjb21wYXJldG90bWFnICAtMSAgLTEgICAtPiAgIDAKK2RkY3RtMDA4IGNvbXBhcmV0b3RtYWcgIC0xICAgMCAgIC0+ICAgMQorZGRjdG0wMDkgY29tcGFyZXRvdG1hZyAgLTEgICAxICAgLT4gICAwCitkZGN0bTAxMCBjb21wYXJldG90bWFnICAtMSAgIDIgICAtPiAgLTEKK2RkY3RtMDExIGNvbXBhcmV0b3RtYWcgICAwICAtMiAgIC0+ICAtMQorZGRjdG0wMTIgY29tcGFyZXRvdG1hZyAgIDAgIC0xICAgLT4gIC0xCitkZGN0bTAxMyBjb21wYXJldG90bWFnICAgMCAgIDAgICAtPiAgIDAKK2RkY3RtMDE0IGNvbXBhcmV0b3RtYWcgICAwICAgMSAgIC0+ICAtMQorZGRjdG0wMTUgY29tcGFyZXRvdG1hZyAgIDAgICAyICAgLT4gIC0xCitkZGN0bTAxNiBjb21wYXJldG90bWFnICAgMSAgLTIgICAtPiAgLTEKK2RkY3RtMDE3IGNvbXBhcmV0b3RtYWcgICAxICAtMSAgIC0+ICAgMAorZGRjdG0wMTggY29tcGFyZXRvdG1hZyAgIDEgICAwICAgLT4gICAxCitkZGN0bTAxOSBjb21wYXJldG90bWFnICAgMSAgIDEgICAtPiAgIDAKK2RkY3RtMDIwIGNvbXBhcmV0b3RtYWcgICAxICAgMiAgIC0+ICAtMQorZGRjdG0wMjEgY29tcGFyZXRvdG1hZyAgIDIgIC0yICAgLT4gICAwCitkZGN0bTAyMiBjb21wYXJldG90bWFnICAgMiAgLTEgICAtPiAgIDEKK2RkY3RtMDIzIGNvbXBhcmV0b3RtYWcgICAyICAgMCAgIC0+ICAgMQorZGRjdG0wMjUgY29tcGFyZXRvdG1hZyAgIDIgICAxICAgLT4gICAxCitkZGN0bTAyNiBjb21wYXJldG90bWFnICAgMiAgIDIgICAtPiAgIDAKKworZGRjdG0wMzEgY29tcGFyZXRvdG1hZyAgLTIwICAtMjAgICAtPiAgIDAKK2RkY3RtMDMyIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTEwICAgLT4gICAxCitkZGN0bTAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQorZGRjdG0wMzQgY29tcGFyZXRvdG1hZyAgLTIwICAgMTAgICAtPiAgIDEKK2RkY3RtMDM1IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDIwICAgLT4gICAwCitkZGN0bTAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQorZGRjdG0wMzcgY29tcGFyZXRvdG1hZyAgLTEwICAtMTAgICAtPiAgIDAKK2RkY3RtMDM4IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDAwICAgLT4gICAxCitkZGN0bTAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMAorZGRjdG0wNDAgY29tcGFyZXRvdG1hZyAgLTEwICAgMjAgICAtPiAgLTEKK2RkY3RtMDQxIGNvbXBhcmV0b3RtYWcgICAwMCAgLTIwICAgLT4gIC0xCitkZGN0bTA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQorZGRjdG0wNDMgY29tcGFyZXRvdG1hZyAgIDAwICAgMDAgICAtPiAgIDAKK2RkY3RtMDQ0IGNvbXBhcmV0b3RtYWcgICAwMCAgIDEwICAgLT4gIC0xCitkZGN0bTA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQorZGRjdG0wNDYgY29tcGFyZXRvdG1hZyAgIDEwICAtMjAgICAtPiAgLTEKK2RkY3RtMDQ3IGNvbXBhcmV0b3RtYWcgICAxMCAgLTEwICAgLT4gICAwCitkZGN0bTA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQorZGRjdG0wNDkgY29tcGFyZXRvdG1hZyAgIDEwICAgMTAgICAtPiAgIDAKK2RkY3RtMDUwIGNvbXBhcmV0b3RtYWcgICAxMCAgIDIwICAgLT4gIC0xCitkZGN0bTA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMAorZGRjdG0wNTIgY29tcGFyZXRvdG1hZyAgIDIwICAtMTAgICAtPiAgIDEKK2RkY3RtMDUzIGNvbXBhcmV0b3RtYWcgICAyMCAgIDAwICAgLT4gICAxCitkZGN0bTA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQorZGRjdG0wNTYgY29tcGFyZXRvdG1hZyAgIDIwICAgMjAgICAtPiAgIDAKKworZGRjdG0wNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMAorZGRjdG0wNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQorZGRjdG0wNjMgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDAuMCAgIC0+ICAgMQorZGRjdG0wNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQorZGRjdG0wNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMAorZGRjdG0wNjYgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTIuMCAgIC0+ICAtMQorZGRjdG0wNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMAorZGRjdG0wNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQorZGRjdG0wNjkgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDEuMCAgIC0+ICAgMAorZGRjdG0wNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQorZGRjdG0wNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQorZGRjdG0wNzIgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTEuMCAgIC0+ICAtMQorZGRjdG0wNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMAorZGRjdG0wNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQorZGRjdG0wNzUgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDIuMCAgIC0+ICAtMQorZGRjdG0wNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQorZGRjdG0wNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMAorZGRjdG0wNzggY29tcGFyZXRvdG1hZyAgIDEuMCAgIDAuMCAgIC0+ICAgMQorZGRjdG0wNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMAorZGRjdG0wODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQorZGRjdG0wODEgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTIuMCAgIC0+ICAgMAorZGRjdG0wODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQorZGRjdG0wODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQorZGRjdG0wODUgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDEuMCAgIC0+ICAgMQorZGRjdG0wODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RkY3RtMDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgICAtPiAgIDAKK2RkY3RtMDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgICAtPiAgIDAKK2RkY3RtMDkyIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0ICAtPiAgIDAKK2RkY3RtMDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0ICAtPiAgIDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCitkZGN0bTEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwCitkZGN0bTEwMSBjb21wYXJldG90bWFnICAgNy4wICAgIDcgICAgICAgLT4gIC0xCitkZGN0bTEwMiBjb21wYXJldG90bWFnICAgNyAgICAgIDcuMCAgICAgLT4gICAxCitkZGN0bTEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxCitkZGN0bTEwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIDcuMCAgICAgLT4gICAwCitkZGN0bTEwNSBjb21wYXJldG90bWFnICAgMC43RSsxIDcgICAgICAgLT4gICAwCitkZGN0bTEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xCitkZGN0bTEwNyBjb21wYXJldG90bWFnICAgNy4wICAgIDdFKzAgICAgLT4gIC0xCitkZGN0bTEwOCBjb21wYXJldG90bWFnICAgNy4wICAgIDcwRS0xICAgLT4gICAwCitkZGN0bTEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwCitkZGN0bTExMCBjb21wYXJldG90bWFnICAgNyAgICAgIDcwRS0xICAgLT4gICAxCisKK2RkY3RtMTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDEKK2RkY3RtMTIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTI1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgNyAgICAgICAtPiAgIDEKK2RkY3RtMTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDEKK2RkY3RtMTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDEKK2RkY3RtMTI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNzBFLTEgICAtPiAgIDEKK2RkY3RtMTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxCitkZGN0bTEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2RkY3RtMTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMTQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOSAgICAgICAtPiAgLTEKK2RkY3RtMTQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMTQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOS4wICAgICAtPiAgLTEKK2RkY3RtMTQ1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgOSAgICAgICAtPiAgLTEKK2RkY3RtMTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTEKK2RkY3RtMTQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOUUrMCAgICAtPiAgLTEKK2RkY3RtMTQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOTBFLTEgICAtPiAgLTEKK2RkY3RtMTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTEKK2RkY3RtMTUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZGRjdG0yMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMAorZGRjdG0yMDEgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3ICAgICAgIC0+ICAtMQorZGRjdG0yMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0yMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0yMDQgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3LjAgICAgIC0+ICAgMAorZGRjdG0yMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMAorZGRjdG0yMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQorZGRjdG0yMDcgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3RSswICAgIC0+ICAtMQorZGRjdG0yMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMAorZGRjdG0yMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMAorZGRjdG0yMTAgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3MEUtMSAgIC0+ICAgMQorCitkZGN0bTIyMCBjb21wYXJldG90bWFnICAtOC4wICAgIDcuMCAgICAgLT4gICAxCitkZGN0bTIyMSBjb21wYXJldG90bWFnICAtOC4wICAgIDcgICAgICAgLT4gICAxCitkZGN0bTIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxCitkZGN0bTIyMyBjb21wYXJldG90bWFnICAtOEUrMCAgIDcuMCAgICAgLT4gICAxCitkZGN0bTIyNCBjb21wYXJldG90bWFnICAtODBFLTEgIDcuMCAgICAgLT4gICAxCitkZGN0bTIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxCitkZGN0bTIyNiBjb21wYXJldG90bWFnICAtODBFLTEgIDcgICAgICAgLT4gICAxCitkZGN0bTIyNyBjb21wYXJldG90bWFnICAtOC4wICAgIDdFKzAgICAgLT4gICAxCitkZGN0bTIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxCitkZGN0bTIyOSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuN0UrMSAgLT4gICAxCitkZGN0bTIzMCBjb21wYXJldG90bWFnICAtOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2RkY3RtMjQwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMjQxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOSAgICAgICAtPiAgLTEKK2RkY3RtMjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMjQzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMjQ0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOS4wICAgICAtPiAgLTEKK2RkY3RtMjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTEKK2RkY3RtMjQ2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOSAgICAgICAtPiAgLTEKK2RkY3RtMjQ3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOUUrMCAgICAtPiAgLTEKK2RkY3RtMjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTEKK2RkY3RtMjQ5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC45RSsxICAtPiAgLTEKK2RkY3RtMjUwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZGRjdG0zMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNy4wICAgICAtPiAgIDAKK2RkY3RtMzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xCitkZGN0bTMwMiBjb21wYXJldG90bWFnICAgNyAgICAgIC03LjAgICAgIC0+ICAgMQorZGRjdG0zMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtMzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwCitkZGN0bTMwNSBjb21wYXJldG90bWFnICAgLjdFKzEgIC03ICAgICAgIC0+ICAgMAorZGRjdG0zMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNyAgICAgICAtPiAgLTEKK2RkY3RtMzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xCitkZGN0bTMwOCBjb21wYXJldG90bWFnICAgNy4wICAgIC03MEUtMSAgIC0+ICAgMAorZGRjdG0zMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtLjdFKzEgICAtPiAgIDAKK2RkY3RtMzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2RkY3RtMzIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQorZGRjdG0zMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtMzIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQorZGRjdG0zMjUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtNyAgICAgICAtPiAgIDEKK2RkY3RtMzI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcgICAgICAgLT4gICAxCitkZGN0bTMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQorZGRjdG0zMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNzBFLTEgICAtPiAgIDEKK2RkY3RtMzI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS43RSsxICAgLT4gICAxCitkZGN0bTMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkZGN0bTM0MCBjb21wYXJldG90bWFnICAgOC4wICAgIC05LjAgICAgIC0+ICAtMQorZGRjdG0zNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTEKK2RkY3RtMzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTM0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIC05LjAgICAgIC0+ICAtMQorZGRjdG0zNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTEKK2RkY3RtMzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xCitkZGN0bTM0NiBjb21wYXJldG90bWFnICAgODBFLTEgIC05ICAgICAgIC0+ICAtMQorZGRjdG0zNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTEKK2RkY3RtMzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xCitkZGN0bTM0OSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uOUUrMSAgIC0+ICAtMQorZGRjdG0zNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZGRjdG00MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwCitkZGN0bTQwMSBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNyAgICAgICAtPiAgLTEKK2RkY3RtNDAyIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03LjAgICAgIC0+ICAgMQorZGRjdG00MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTQwNCBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNy4wICAgICAtPiAgIDAKK2RkY3RtNDA1IGNvbXBhcmV0b3RtYWcgICAtLjdFKzEgIC03ICAgICAgIC0+ICAgMAorZGRjdG00MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xCitkZGN0bTQwNyBjb21wYXJldG90bWFnICAgLTcuMCAgICAtN0UrMCAgICAtPiAgLTEKK2RkY3RtNDA4IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03MEUtMSAgIC0+ICAgMAorZGRjdG00MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwCitkZGN0bTQxMCBjb21wYXJldG90bWFnICAgLTcgICAgICAtNzBFLTEgICAtPiAgIDEKKworZGRjdG00MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDEKK2RkY3RtNDIyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03LjAgICAgIC0+ICAgMQorZGRjdG00MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDEKK2RkY3RtNDI1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC03ICAgICAgIC0+ICAgMQorZGRjdG00MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxCitkZGN0bTQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDEKK2RkY3RtNDI4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03MEUtMSAgIC0+ICAgMQorZGRjdG00MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxCitkZGN0bTQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDEKKworZGRjdG00NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTQ0MSBjb21wYXJldG90bWFnICAgLTguMCAgICAtOSAgICAgICAtPiAgLTEKK2RkY3RtNDQyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05LjAgICAgIC0+ICAtMQorZGRjdG00NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTQ0NCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOS4wICAgICAtPiAgLTEKK2RkY3RtNDQ1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC05ICAgICAgIC0+ICAtMQorZGRjdG00NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xCitkZGN0bTQ0NyBjb21wYXJldG90bWFnICAgLTguMCAgICAtOUUrMCAgICAtPiAgLTEKK2RkY3RtNDQ4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05MEUtMSAgIC0+ICAtMQorZGRjdG00NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xCitkZGN0bTQ1MCBjb21wYXJldG90bWFnICAgLTggICAgICAtOTBFLTEgICAtPiAgLTEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK2RkY3RtNDczIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RkY3RtNDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZGRjdG00NzUgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RkY3RtNDc2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RkY3RtNDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZGRjdG00NzggY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RkY3RtNDc5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RkY3RtNDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZGRjdG00ODEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RkY3RtNDgyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RkY3RtNDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMAorZGRjdG00ODcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgIC0+ICAgMQorZGRjdG00ODggY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAgLT4gICAxCitkZGN0bTQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgIC0+ICAgMQorZGRjdG00OTAgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgIC0+ICAgMQorZGRjdG00OTEgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAgLT4gICAxCitkZGN0bTQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQorZGRjdG00OTMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgIC0+ICAgMQorZGRjdG00OTQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAgLT4gICAxCitkZGN0bTQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgIC0+ICAgMQorZGRjdG00OTYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgIC0+ICAgMQorZGRjdG00OTcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAgLT4gICAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK2RkY3RtNDk4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTcgICAgIC0+ICAgMQorZGRjdG00OTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNiAgICAgLT4gICAxCitkZGN0bTUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2RkY3RtNTAxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTQgICAgIC0+ICAgMQorZGRjdG01MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxCitkZGN0bTUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDEKK2RkY3RtNTA0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTEgICAgIC0+ICAgMQorZGRjdG01MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxCitkZGN0bTUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDEKK2RkY3RtNTA3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOCAgICAgIC0+ICAgMQorZGRjdG01MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxCitkZGN0bTUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDEKK2RkY3RtNTEwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNSAgICAgIC0+ICAgMQorZGRjdG01MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxCitkZGN0bTUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDEKK2RkY3RtNTEzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMiAgICAgIC0+ICAgMQorZGRjdG01MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxCitkZGN0bTUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDAKK2RkY3RtNTE2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMSAgICAgIC0+ICAtMQorZGRjdG01MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xCitkZGN0bTUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTEKK2RkY3RtNTE5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNCAgICAgIC0+ICAtMQorZGRjdG01MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xCitkZGN0bTUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTEKK2RkY3RtNTIzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNyAgICAgIC0+ICAtMQorZGRjdG01MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xCitkZGN0bTUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTEKK2RkY3RtNTI2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTAgICAgIC0+ICAtMQorZGRjdG01MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xCitkZGN0bTUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTEKK2RkY3RtNTI5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTMgICAgIC0+ICAtMQorZGRjdG01MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xCitkZGN0bTUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTEKK2RkY3RtNTMyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTYgICAgIC0+ICAtMQorZGRjdG01MzMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNyAgICAgLT4gIC0xCistLSBMUiBzd2FwCitkZGN0bTUzOCBjb21wYXJldG90bWFnICAgIDFFLTE3ICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTM5IGNvbXBhcmV0b3RtYWcgICAgMUUtMTYgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDAgY29tcGFyZXRvdG1hZyAgICAxRS0xNSAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0MSBjb21wYXJldG90bWFnICAgIDFFLTE0ICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDMgY29tcGFyZXRvdG1hZyAgICAxRS0xMiAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0NCBjb21wYXJldG90bWFnICAgIDFFLTExICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDYgY29tcGFyZXRvdG1hZyAgICAxRS05ICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0NyBjb21wYXJldG90bWFnICAgIDFFLTggICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDkgY29tcGFyZXRvdG1hZyAgICAxRS02ICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU1MCBjb21wYXJldG90bWFnICAgIDFFLTUgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NTIgY29tcGFyZXRvdG1hZyAgICAxRS0zICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU1MyBjb21wYXJldG90bWFnICAgIDFFLTIgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NTUgY29tcGFyZXRvdG1hZyAgICAxRS0wICAgMSAgICAgICAgLT4gICAwCitkZGN0bTU1NiBjb21wYXJldG90bWFnICAgIDFFKzEgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NTggY29tcGFyZXRvdG1hZyAgICAxRSszICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU1OSBjb21wYXJldG90bWFnICAgIDFFKzQgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjIgY29tcGFyZXRvdG1hZyAgICAxRSs2ICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2MyBjb21wYXJldG90bWFnICAgIDFFKzcgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjUgY29tcGFyZXRvdG1hZyAgICAxRSs5ICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2NiBjb21wYXJldG90bWFnICAgIDFFKzEwICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjggY29tcGFyZXRvdG1hZyAgICAxRSsxMiAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2OSBjb21wYXJldG90bWFnICAgIDFFKzEzICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NzEgY29tcGFyZXRvdG1hZyAgICAxRSsxNSAgMSAgICAgICAgLT4gICAxCitkZGN0bTU3MiBjb21wYXJldG90bWFnICAgIDFFKzE2ICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTczIGNvbXBhcmV0b3RtYWcgICAgMUUrMTcgIDEgICAgICAgIC0+ICAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitkZGN0bTU3OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgIC0+ICAgMQorZGRjdG01NzkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgICAtPiAgIDEKK2RkY3RtNTgwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAgLT4gICAxCitkZGN0bTU4MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgIC0+ICAgMQorZGRjdG01ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDEKK2RkY3RtNTgzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAgLT4gICAxCitkZGN0bTU4NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgIC0+ICAgMQorZGRjdG01ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDEKK2RkY3RtNTg2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAgLT4gICAxCitkZGN0bTU4NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgIC0+ICAgMQorZGRjdG01ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDEKK2RkY3RtNTg5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAgLT4gIC0xCitkZGN0bTU5MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgIC0+ICAtMQorZGRjdG01OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTEKK2RkY3RtNTkyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAgLT4gIC0xCitkZGN0bTU5MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgIC0+ICAtMQorZGRjdG01OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTEKK2RkY3RtNTk1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAgLT4gIC0xCitkZGN0bTU5NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgIC0+ICAtMQorZGRjdG01OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTEKK2RkY3RtNTk4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAgLT4gIC0xCitkZGN0bTU5OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgIC0+ICAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZGRjdG02MDAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjAyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjA1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjA4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDEKK2RkY3RtNjExIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgIC0+ICAgMQorZGRjdG02MTIgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAgLT4gICAxCitkZGN0bTYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDEKK2RkY3RtNjE0IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgIC0+ICAgMQorZGRjdG02MTUgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAgLT4gICAxCitkZGN0bTYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDEKK2RkY3RtNjE3IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgIC0+ICAgMQorZGRjdG02MTggY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAgLT4gICAxCitkZGN0bTYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDEKK2RkY3RtNjIwIGNvbXBhcmV0b3RtYWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjEgY29tcGFyZXRvdG1hZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjIzIGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjQgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjI2IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjcgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjI5IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MzAgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAgLT4gICAxCitkZGN0bTYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDEKK2RkY3RtNjMyIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgIC0+ICAgMQorZGRjdG02MzMgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAgLT4gICAxCitkZGN0bTYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDEKK2RkY3RtNjM1IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgIC0+ICAgMQorZGRjdG02MzYgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAgLT4gICAxCitkZGN0bTYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDEKK2RkY3RtNjM4IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgIC0+ICAgMQorZGRjdG02MzkgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAgLT4gICAxCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZGN0bTY0MCBjb21wYXJldG90bWFnICAgMCAgICAgMCAgICAtPiAgIDAKK2RkY3RtNjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMAorZGRjdG02NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxCitkZGN0bTY0MyBjb21wYXJldG90bWFnICAgMCAgICAgMC4wICAtPiAgIDEKK2RkY3RtNjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMAorZGRjdG02NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwCitkZGN0bTY0NiBjb21wYXJldG90bWFnICAtMCAgICAtMC4wICAtPiAgIDEKK2RkY3RtNjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQorZGRjdG02NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xCitkZGN0bTY0OSBjb21wYXJldG90bWFnICAgMC4wICAtMCAgICAtPiAgLTEKK2RkY3RtNjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMAorZGRjdG02NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwCitkZGN0bTY1MiBjb21wYXJldG90bWFnICAtMC4wICAgMCAgICAtPiAgLTEKK2RkY3RtNjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQorZGRjdG02NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwCitkZGN0bTY1NSBjb21wYXJldG90bWFnICAtMC4wICAgMC4wICAtPiAgIDAKKworZGRjdG02NTYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAuMCAgLT4gICAxCitkZGN0bTY1NyBjb21wYXJldG90bWFnICAtMEUyICAgMC4wICAtPiAgIDEKK2RkY3RtNjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQorZGRjdG02NTkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAuMCAgLT4gICAxCitkZGN0bTY2MCBjb21wYXJldG90bWFnICAtMEUxICAgMCAgICAtPiAgIDEKK2RkY3RtNjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQorZGRjdG02NjIgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAgICAgLT4gICAxCitkZGN0bTY2MyBjb21wYXJldG90bWFnICAgMEUyICAgMCAgICAtPiAgIDEKK2RkY3RtNjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMAorZGRjdG02NjUgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMSAgLT4gICAxCitkZGN0bTY2NiBjb21wYXJldG90bWFnICAgMEUxICAtMEUxICAtPiAgIDAKK2RkY3RtNjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQorZGRjdG02NjggY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMiAgLT4gIC0xCitkZGN0bTY2OSBjb21wYXJldG90bWFnICAtMEUyICAtMEUyICAtPiAgIDAKK2RkY3RtNjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQorZGRjdG02NzEgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMiAgLT4gICAwCitkZGN0bTY3MiBjb21wYXJldG90bWFnICAtMEUxICAgMEUxICAtPiAgIDAKK2RkY3RtNjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQorZGRjdG02NzQgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMSAgLT4gICAwCitkZGN0bTY3NSBjb21wYXJldG90bWFnICAgMEUyICAgMEUxICAtPiAgIDEKK2RkY3RtNjc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQorZGRjdG02NzcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMiAgLT4gICAwCitkZGN0bTY3OCBjb21wYXJldG90bWFnICAgMEUxICAgMEUyICAtPiAgLTEKK2RkY3RtNjc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkZGN0bTY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDAKK2RkY3RtNjgxIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wICAgICAgICAgIC0+ICAgMQorZGRjdG02ODIgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwICAgICAgICAgLT4gICAxCitkZGN0bTY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDEKK2RkY3RtNjg0IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwICAgICAgIC0+ICAgMQorZGRjdG02ODUgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwICAgICAgLT4gICAxCitkZGN0bTY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDEKK2RkY3RtNjg3IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwICAgIC0+ICAgMQorZGRjdG02ODggY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwICAgLT4gICAxCitkZGN0bTY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDEKK2RkY3RtNjkwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgICAgMTIgIC0+ICAgMAorZGRjdG02OTEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjkzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgICAgMTIgIC0+ICAtMQorZGRjdG02OTQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjk2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgICAgMTIgIC0+ICAtMQorZGRjdG02OTcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjk5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgICAgMTIgIC0+ICAtMQorCistLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcworZGRjdG03MDEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAgMSAgLT4gICAxCitkZGN0bTcwMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgICAtPiAgLTEKK2RkY3RtNzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQorZGRjdG03MDQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAgLT4gIC0xCitkZGN0bTcwNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgICAxICAtPiAgIDEKK2RkY3RtNzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQorZGRjdG03MDcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAgMSAgLT4gICAxCitkZGN0bTcwOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAgLTEKK2RkY3RtNzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQorZGRjdG03MTAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gIC0xCitkZGN0bTcxMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgICAxICAtPiAgIDEKK2RkY3RtNzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQorZGRjdG03MTMgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gICAxCitkZGN0bTcxNCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAgLTEKK2RkY3RtNzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQorZGRjdG03MTYgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gIC0xCitkZGN0bTcxNyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODk2ICAxICAtPiAgIDEKK2RkY3RtNzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQorCistLSBvbGQgcmVzaWR1ZSBjYXNlcworZGRjdG03NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxCitkZGN0bTc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDEKK2RkY3RtNzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQorZGRjdG03NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxCitkZGN0bTc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTEKK2RkY3RtNzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQorZGRjdG03NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xCitkZGN0bTc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTEKK2RkY3RtNzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQorZGRjdG03NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xCitkZGN0bTc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTEKK2RkY3RtNzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQorZGRjdG03NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxCitkZGN0bTc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDEKKworLS0gU3BlY2lhbHMKK2RkY3RtNzgwIGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCitkZGN0bTc4MSBjb21wYXJldG90bWFnICBJbmYgIC0xMDAwICAtPiAgMQorZGRjdG03ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDEKK2RkY3RtNzgzIGNvbXBhcmV0b3RtYWcgIEluZiAgLTAgICAgIC0+ICAxCitkZGN0bTc4NCBjb21wYXJldG90bWFnICBJbmYgICAwICAgICAtPiAgMQorZGRjdG03ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDEKK2RkY3RtNzg2IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEwMDAgIC0+ICAxCitkZGN0bTc4NyBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAorZGRjdG03ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTEKK2RkY3RtNzg5IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitkZGN0bTc5MCBjb21wYXJldG90bWFnIC0xICAgICBJbmYgICAtPiAtMQorZGRjdG03OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTEKK2RkY3RtNzkyIGNvbXBhcmV0b3RtYWcgIDAgICAgIEluZiAgIC0+IC0xCitkZGN0bTc5MyBjb21wYXJldG90bWFnICAxICAgICBJbmYgICAtPiAtMQorZGRjdG03OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTEKK2RkY3RtNzk1IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCisKK2RkY3RtODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCitkZGN0bTgwMSBjb21wYXJldG90bWFnIC1JbmYgIC0xMDAwICAtPiAgMQorZGRjdG04MDIgY29tcGFyZXRvdG1hZyAtSW5mICAtMSAgICAgLT4gIDEKK2RkY3RtODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxCitkZGN0bTgwNCBjb21wYXJldG90bWFnIC1JbmYgICAwICAgICAtPiAgMQorZGRjdG04MDUgY29tcGFyZXRvdG1hZyAtSW5mICAgMSAgICAgLT4gIDEKK2RkY3RtODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxCitkZGN0bTgwNyBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAorZGRjdG04MDggY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKK2RkY3RtODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xCitkZGN0bTgxMCBjb21wYXJldG90bWFnIC0xICAgIC1JbmYgICAtPiAtMQorZGRjdG04MTEgY29tcGFyZXRvdG1hZyAtMCAgICAtSW5mICAgLT4gLTEKK2RkY3RtODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xCitkZGN0bTgxMyBjb21wYXJldG90bWFnICAxICAgIC1JbmYgICAtPiAtMQorZGRjdG04MTQgY29tcGFyZXRvdG1hZyAgMTAwMCAtSW5mICAgLT4gLTEKK2RkY3RtODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCisKK2RkY3RtODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxCitkZGN0bTgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQorZGRjdG04MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDEKK2RkY3RtODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxCitkZGN0bTgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQorZGRjdG04MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RkY3RtODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxCitkZGN0bTgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQorZGRjdG04MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDAKK2RkY3RtODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQorZGRjdG04MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xCitkZGN0bTgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTEKK2RkY3RtODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQorZGRjdG04MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xCitkZGN0bTgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTEKK2RkY3RtODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQorZGRjdG04MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xCitkZGN0bTgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMAorZGRjdG04MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDAKK2RkY3RtODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwCisKK2RkY3RtODQxIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gIC0+ICAwCitkZGN0bTg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTEKK2RkY3RtODQzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLUluZiAgIC0+ICAxCitkZGN0bTg0NCBjb21wYXJldG90bWFnICBzTmFOIC0xMDAwICAtPiAgMQorZGRjdG04NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDEKK2RkY3RtODQ2IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTAgICAgIC0+ICAxCitkZGN0bTg0NyBjb21wYXJldG90bWFnICBzTmFOICAwICAgICAtPiAgMQorZGRjdG04NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDEKK2RkY3RtODQ5IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEwMDAgIC0+ICAxCitkZGN0bTg1MCBjb21wYXJldG90bWFnICBzTmFOICBOYU4gICAtPiAgLTEKK2RkY3RtODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RkY3RtODUyIGNvbXBhcmV0b3RtYWcgLXNOYU4gc05hTiAgIC0+ICAwCitkZGN0bTg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQorZGRjdG04NTQgY29tcGFyZXRvdG1hZyAtSW5mICBzTmFOICAgLT4gIC0xCitkZGN0bTg1NSBjb21wYXJldG90bWFnIC0xMDAwIHNOYU4gICAtPiAgLTEKK2RkY3RtODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQorZGRjdG04NTcgY29tcGFyZXRvdG1hZyAtMCAgICBzTmFOICAgLT4gIC0xCitkZGN0bTg1OCBjb21wYXJldG90bWFnICAwICAgIHNOYU4gICAtPiAgLTEKK2RkY3RtODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQorZGRjdG04NjAgY29tcGFyZXRvdG1hZyAgMTAwMCBzTmFOICAgLT4gIC0xCitkZGN0bTg2MSBjb21wYXJldG90bWFnICBJbmYgIHNOYU4gICAtPiAgLTEKK2RkY3RtODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxCitkZGN0bTg2MyBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAorCitkZGN0bTg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDAKK2RkY3RtODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTEKK2RkY3RtODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQorZGRjdG04NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxCitkZGN0bTg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDEKK2RkY3RtODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQorZGRjdG04NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxCitkZGN0bTg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDEKK2RkY3RtODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQorZGRjdG04ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQorZGRjdG04ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwCisKK2RkY3RtODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMAorZGRjdG04ODMgY29tcGFyZXRvdG1hZyAtTmFOICAtc05hTiAgIC0+ICAxCitkZGN0bTg4NCBjb21wYXJldG90bWFnIC1JbmYgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4NiBjb21wYXJldG90bWFnIC0xICAgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4NyBjb21wYXJldG90bWFnIC0wICAgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4OSBjb21wYXJldG90bWFnICAxICAgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg5MCBjb21wYXJldG90bWFnICAxMDAwIC1zTmFOICAgLT4gIC0xCitkZGN0bTg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg5MiBjb21wYXJldG90bWFnICBOYU4gIC1zTmFOICAgLT4gIDEKK2RkY3RtODkzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gICAtPiAgMAorCistLSBOYU5zIHdpdGggcGF5bG9hZAorZGRjdG05NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDEKK2RkY3RtOTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxCitkZGN0bTk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQorZGRjdG05NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDEKK2RkY3RtOTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQorZGRjdG05NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xCitkZGN0bTk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTEKKworZGRjdG05NzAgY29tcGFyZXRvdG1hZyAtTmFONDEgLU5hTjQyIC0+IC0xCitkZGN0bTk3MSBjb21wYXJldG90bWFnICtOYU40MSAtTmFONDIgLT4gLTEKK2RkY3RtOTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQorZGRjdG05NzMgY29tcGFyZXRvdG1hZyArTmFONDEgK05hTjQyIC0+IC0xCitkZGN0bTk3NCBjb21wYXJldG90bWFnIC1OYU40MiAtTmFOMDEgLT4gIDEKK2RkY3RtOTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQorZGRjdG05NzYgY29tcGFyZXRvdG1hZyAtTmFONDIgK05hTjAxIC0+ICAxCitkZGN0bTk3NyBjb21wYXJldG90bWFnICtOYU40MiArTmFOMDEgLT4gIDEKKworZGRjdG05ODAgY29tcGFyZXRvdG1hZyAtc05hTjc3MSAtc05hTjc3MiAtPiAtMQorZGRjdG05ODEgY29tcGFyZXRvdG1hZyArc05hTjc3MSAtc05hTjc3MiAtPiAtMQorZGRjdG05ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQorZGRjdG05ODMgY29tcGFyZXRvdG1hZyArc05hTjc3MSArc05hTjc3MiAtPiAtMQorZGRjdG05ODQgY29tcGFyZXRvdG1hZyAtc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZGRjdG05ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZGRjdG05ODYgY29tcGFyZXRvdG1hZyAtc05hTjc3MiArc05hTjc3MSAtPiAgMQorZGRjdG05ODcgY29tcGFyZXRvdG1hZyArc05hTjc3MiArc05hTjc3MSAtPiAgMQorCitkZGN0bTk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQorZGRjdG05OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2RkY3RtOTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xCitkZGN0bTk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQorZGRjdG05OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2RkY3RtOTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xCitkZGN0bTk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQorZGRjdG05OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2RkY3RtOTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxCisKKy0tIHNwcmVhZCB6ZXJvcworZGRjdG0xMTEwIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDAgICAgICAgIC0+ICAtMQorZGRjdG0xMTExIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTAgICAgICAgIC0+ICAtMQorZGRjdG0xMTEyIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDAgICAgICAgIC0+ICAtMQorZGRjdG0xMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTAgICAgICAgIC0+ICAtMQorZGRjdG0xMTE0IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE1IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE2IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE3IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTIwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTIxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFKzM4NCAgIC0+ICAtMQorCitkZGN0bTExMzAgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAgMCAgICAgICAgLT4gICAxCitkZGN0bTExMzEgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMCAgICAgICAgLT4gICAxCitkZGN0bTExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAgMCAgICAgICAgLT4gICAxCitkZGN0bTExMzMgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAtMCAgICAgICAgLT4gICAxCitkZGN0bTExMzQgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAgMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzUgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzYgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAgMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzcgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAtMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzkgY29tcGFyZXRvdG1hZyAgIDAgICAgICAtMEUtMzgzICAgLT4gICAxCitkZGN0bTExNDAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUtMzgzICAgLT4gICAxCitkZGN0bTExNDEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUtMzgzICAgLT4gICAxCisKKy0tIE51bGwgdGVzdHMKK2RkY3RtOTk5MCBjb21wYXJldG90bWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRjdG05OTkxIGNvbXBhcmV0b3RtYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHkuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTE3NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHkuZGVjVGVzdApAQCAtMCwwICsxLDg4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29weS5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRjcHkwMDEgY29weSAgICAgICArNy41MCAgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkZGNweTAxMSBjb3B5ICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorZGRjcHkwMTIgY29weSAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRjcHkwMjEgY29weSAgICAgICAgIE5hTiAgLT4gTmFOCitkZGNweTAyMiBjb3B5ICAgICAgICAtTmFOICAtPiAtTmFOCitkZGNweTAyMyBjb3B5ICAgICAgICBzTmFOICAtPiBzTmFOCitkZGNweTAyNCBjb3B5ICAgICAgIC1zTmFOICAtPiAtc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZGNweTAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMAorZGRjcHkwMzIgY29weSAgICAgIC1OYU4xMCAgLT4gLU5hTjEwCitkZGNweTAzMyBjb3B5ICAgICAgc05hTjEwICAtPiBzTmFOMTAKK2RkY3B5MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTAKK2RkY3B5MDM1IGNvcHkgICAgICAgTmFONyAgIC0+IE5hTjcKK2RkY3B5MDM2IGNvcHkgICAgICAtTmFONyAgIC0+IC1OYU43CitkZGNweTAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCitkZGNweTAzOCBjb3B5ICAgICAtc05hTjEwMSAtPiAtc05hTjEwMQorCistLSBmaW5pdGVzCitkZGNweTEwMSBjb3B5ICAgICAgICAgIDcgICAtPiA3CitkZGNweTEwMiBjb3B5ICAgICAgICAgLTcgICAtPiAtNworZGRjcHkxMDMgY29weSAgICAgICAgIDc1ICAgLT4gNzUKK2RkY3B5MTA0IGNvcHkgICAgICAgIC03NSAgIC0+IC03NQorZGRjcHkxMDUgY29weSAgICAgICA3LjUwICAgLT4gNy41MAorZGRjcHkxMDYgY29weSAgICAgIC03LjUwICAgLT4gLTcuNTAKK2RkY3B5MTA3IGNvcHkgICAgICAgNy41MDAgIC0+IDcuNTAwCitkZGNweTEwOCBjb3B5ICAgICAgLTcuNTAwICAtPiAtNy41MDAKKworLS0gemVyb3MKK2RkY3B5MTExIGNvcHkgICAgICAgICAgMCAgIC0+IDAKK2RkY3B5MTEyIGNvcHkgICAgICAgICAtMCAgIC0+IC0wCitkZGNweTExMyBjb3B5ICAgICAgIDBFKzQgICAtPiAwRSs0CitkZGNweTExNCBjb3B5ICAgICAgLTBFKzQgICAtPiAtMEUrNAorZGRjcHkxMTUgY29weSAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkZGNweTExNiBjb3B5ICAgIC0wLjAwMDAgICAtPiAtMC4wMDAwCitkZGNweTExNyBjb3B5ICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2RkY3B5MTE4IGNvcHkgICAgIC0wRS0xNDEgIC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkY3B5MTIxIGNvcHkgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGNweTEyMiBjb3B5ICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODIKK2RkY3B5MTIzIGNvcHkgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCitkZGNweTEyNCBjb3B5ICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkY3B5MTMxIGNvcHkgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGNweTEzMiBjb3B5ICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZGNweTEzMyBjb3B5ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcHkxMzQgY29weSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OAorCitkZGNweTEzNSBjb3B5ICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OAorZGRjcHkxMzYgY29weSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNweTEzNyBjb3B5ICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MworZGRjcHkxMzggY29weSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weUFicy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlBYnMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODIzY2YyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlBYnMuZGVjVGVzdApAQCAtMCwwICsxLDg4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29weUFicy5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRjcGEwMDEgY29weWFicyAgICAgICArNy41MCAgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkZGNwYTAxMSBjb3B5YWJzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorZGRjcGEwMTIgY29weWFicyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkZGNwYTAyMSBjb3B5YWJzICAgICAgICAgTmFOICAtPiBOYU4KK2RkY3BhMDIyIGNvcHlhYnMgICAgICAgIC1OYU4gIC0+IE5hTgorZGRjcGEwMjMgY29weWFicyAgICAgICAgc05hTiAgLT4gc05hTgorZGRjcGEwMjQgY29weWFicyAgICAgICAtc05hTiAgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZGNwYTAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMAorZGRjcGEwMzIgY29weWFicyAgICAgIC1OYU4xNSAgLT4gTmFOMTUKK2RkY3BhMDMzIGNvcHlhYnMgICAgICBzTmFOMTUgIC0+IHNOYU4xNQorZGRjcGEwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwCitkZGNwYTAzNSBjb3B5YWJzICAgICAgIE5hTjcgICAtPiBOYU43CitkZGNwYTAzNiBjb3B5YWJzICAgICAgLU5hTjcgICAtPiBOYU43CitkZGNwYTAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCitkZGNwYTAzOCBjb3B5YWJzICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RkY3BhMTAxIGNvcHlhYnMgICAgICAgICAgNyAgIC0+IDcKK2RkY3BhMTAyIGNvcHlhYnMgICAgICAgICAtNyAgIC0+IDcKK2RkY3BhMTAzIGNvcHlhYnMgICAgICAgICA3NSAgIC0+IDc1CitkZGNwYTEwNCBjb3B5YWJzICAgICAgICAtNzUgICAtPiA3NQorZGRjcGExMDUgY29weWFicyAgICAgICA3LjEwICAgLT4gNy4xMAorZGRjcGExMDYgY29weWFicyAgICAgIC03LjEwICAgLT4gNy4xMAorZGRjcGExMDcgY29weWFicyAgICAgICA3LjUwMCAgLT4gNy41MDAKK2RkY3BhMTA4IGNvcHlhYnMgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkZGNwYTExMSBjb3B5YWJzICAgICAgICAgIDAgICAtPiAwCitkZGNwYTExMiBjb3B5YWJzICAgICAgICAgLTAgICAtPiAwCitkZGNwYTExMyBjb3B5YWJzICAgICAgIDBFKzYgICAtPiAwRSs2CitkZGNwYTExNCBjb3B5YWJzICAgICAgLTBFKzYgICAtPiAwRSs2CitkZGNwYTExNSBjb3B5YWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RkY3BhMTE2IGNvcHlhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZGRjcGExMTcgY29weWFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkZGNwYTExOCBjb3B5YWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkY3BhMTIxIGNvcHlhYnMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGNwYTEyMiBjb3B5YWJzICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRjcGExMjMgY29weWFicyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKK2RkY3BhMTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGNwYTEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRjcGExMzIgY29weWFicyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRjcGExMzMgY29weWFicyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BhMTM0IGNvcHlhYnMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgKKworZGRjcGExMzUgY29weWFicyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OAorZGRjcGExMzYgY29weWFicyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BhMTM3IGNvcHlhYnMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkY3BhMTM4IGNvcHlhYnMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weU5lZ2F0ZS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlOZWdhdGUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjE5NDVjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlOZWdhdGUuZGVjVGVzdApAQCAtMCwwICsxLDg4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29weU5lZ2F0ZS5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IGFuZCBuZWdhdGUgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRjcG4wMDEgY29weW5lZ2F0ZSAgICAgICArNy41MCAgLT4gLTcuNTAKKworLS0gSW5maW5pdGllcworZGRjcG4wMTEgY29weW5lZ2F0ZSAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5CitkZGNwbjAxMiBjb3B5bmVnYXRlICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkY3BuMDIxIGNvcHluZWdhdGUgICAgICAgICBOYU4gIC0+IC1OYU4KK2RkY3BuMDIyIGNvcHluZWdhdGUgICAgICAgIC1OYU4gIC0+IE5hTgorZGRjcG4wMjMgY29weW5lZ2F0ZSAgICAgICAgc05hTiAgLT4gLXNOYU4KK2RkY3BuMDI0IGNvcHluZWdhdGUgICAgICAgLXNOYU4gIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZGRjcG4wMzEgY29weW5lZ2F0ZSAgICAgICBOYU4xMyAgLT4gLU5hTjEzCitkZGNwbjAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMworZGRjcG4wMzMgY29weW5lZ2F0ZSAgICAgIHNOYU4xMyAgLT4gLXNOYU4xMworZGRjcG4wMzQgY29weW5lZ2F0ZSAgICAgLXNOYU4xMyAgLT4gc05hTjEzCitkZGNwbjAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzAKK2RkY3BuMDM2IGNvcHluZWdhdGUgICAgICAtTmFONzAgIC0+IE5hTjcwCitkZGNwbjAzNyBjb3B5bmVnYXRlICAgICAgc05hTjEwMSAtPiAtc05hTjEwMQorZGRjcG4wMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitkZGNwbjEwMSBjb3B5bmVnYXRlICAgICAgICAgIDcgICAtPiAtNworZGRjcG4xMDIgY29weW5lZ2F0ZSAgICAgICAgIC03ICAgLT4gNworZGRjcG4xMDMgY29weW5lZ2F0ZSAgICAgICAgIDc1ICAgLT4gLTc1CitkZGNwbjEwNCBjb3B5bmVnYXRlICAgICAgICAtNzUgICAtPiA3NQorZGRjcG4xMDUgY29weW5lZ2F0ZSAgICAgICA3LjUwICAgLT4gLTcuNTAKK2RkY3BuMTA2IGNvcHluZWdhdGUgICAgICAtNy41MCAgIC0+IDcuNTAKK2RkY3BuMTA3IGNvcHluZWdhdGUgICAgICAgNy41MDAgIC0+IC03LjUwMAorZGRjcG4xMDggY29weW5lZ2F0ZSAgICAgIC03LjUwMCAgLT4gNy41MDAKKworLS0gemVyb3MKK2RkY3BuMTExIGNvcHluZWdhdGUgICAgICAgICAgMCAgIC0+IC0wCitkZGNwbjExMiBjb3B5bmVnYXRlICAgICAgICAgLTAgICAtPiAwCitkZGNwbjExMyBjb3B5bmVnYXRlICAgICAgIDBFKzQgICAtPiAtMEUrNAorZGRjcG4xMTQgY29weW5lZ2F0ZSAgICAgIC0wRSs0ICAgLT4gMEUrNAorZGRjcG4xMTUgY29weW5lZ2F0ZSAgICAgMC4wMDAwICAgLT4gLTAuMDAwMAorZGRjcG4xMTYgY29weW5lZ2F0ZSAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkZGNwbjExNyBjb3B5bmVnYXRlICAgICAgMEUtMTQxICAtPiAtMEUtMTQxCitkZGNwbjExOCBjb3B5bmVnYXRlICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkY3BuMTIxIGNvcHluZWdhdGUgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MgorZGRjcG4xMjIgY29weW5lZ2F0ZSAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkY3BuMTIzIGNvcHluZWdhdGUgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MQorZGRjcG4xMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkY3BuMTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRjcG4xMzIgY29weW5lZ2F0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMKK2RkY3BuMTMzIGNvcHluZWdhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcG4xMzQgY29weW5lZ2F0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgKKworZGRjcG4xMzUgY29weW5lZ2F0ZSAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OAorZGRjcG4xMzYgY29weW5lZ2F0ZSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BuMTM3IGNvcHluZWdhdGUgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkY3BuMTM4IGNvcHluZWdhdGUgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weVNpZ24uZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5U2lnbi5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OTU0NGQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weVNpZ24uZGVjVGVzdApAQCAtMCwwICsxLDE3NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvcHlTaWduLmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RkY3BzMDAxIGNvcHlzaWduICAgICAgICs3LjUwICAgICAxMSAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2RkY3BzMDExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAxMSAtPiBJbmZpbml0eQorZGRjcHMwMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIDExIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRjcHMwMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIDExIC0+IE5hTgorZGRjcHMwMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIDExIC0+IE5hTgorZGRjcHMwMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIDExIC0+IHNOYU4KK2RkY3BzMDI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAxMSAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RkY3BzMDMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAxMSAtPiBOYU4xMAorZGRjcHMwMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIDExIC0+IE5hTjEwCitkZGNwczAzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgMTEgLT4gc05hTjEwCitkZGNwczAzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgMTEgLT4gc05hTjEwCitkZGNwczAzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgMTEgLT4gTmFONworZGRjcHMwMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIDExIC0+IE5hTjcKK2RkY3BzMDM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxCitkZGNwczAzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitkZGNwczEwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgMTEgLT4gNworZGRjcHMxMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIDExIC0+IDcKK2RkY3BzMTAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAxMSAtPiA3NQorZGRjcHMxMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIDExIC0+IDc1CitkZGNwczEwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgMTEgLT4gNy41MAorZGRjcHMxMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIDExIC0+IDcuNTAKK2RkY3BzMTA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAxMSAtPiA3LjUwMAorZGRjcHMxMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIDExIC0+IDcuNTAwCisKKy0tIHplcm9zCitkZGNwczExMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgMTEgLT4gMAorZGRjcHMxMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIDExIC0+IDAKK2RkY3BzMTEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAxMSAtPiAwRSs0CitkZGNwczExNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgMTEgLT4gMEUrNAorZGRjcHMxMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIDExIC0+IDAuMDAwMAorZGRjcHMxMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIDExIC0+IDAuMDAwMAorZGRjcHMxMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIDExIC0+IDBFLTE0MQorZGRjcHMxMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIDExIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRjcHMxMjEgY29weXNpZ24gIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGNwczEyMiBjb3B5c2lnbiAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgIDExIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkY3BzMTIzIGNvcHlzaWduICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAgMTEgLT4gMTM0MTM0MTM0MTM0MTM0MQorZGRjcHMxMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGNwczEzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDExIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkY3BzMTMyIGNvcHlzaWduICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzgzCitkZGNwczEzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDExIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BzMTM0IGNvcHlzaWduICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzk4CisKK2RkY3BzMTM1IGNvcHlzaWduICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzk4CitkZGNwczEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIDExIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BzMTM3IGNvcHlzaWduICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzgzCitkZGNwczEzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIDExIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworLS0gcmVwZWF0IHdpdGggbmVnYXRpdmUgUkhTCisKKy0tIEluZmluaXRpZXMKK2RkY3BzMjExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAtMzQgLT4gLUluZmluaXR5CitkZGNwczIxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgLTM0IC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkY3BzMjIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAtMzQgLT4gLU5hTgorZGRjcHMyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFOCitkZGNwczIyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgLTM0IC0+IC1zTmFOCitkZGNwczIyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgLTM0IC0+IC1zTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RkY3BzMjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwCitkZGNwczIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorZGRjcHMyMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwCitkZGNwczIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKK2RkY3BzMjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2RkY3BzMjM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2RkY3BzMjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKK2RkY3BzMjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworZGRjcHMzMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIC0zNCAtPiAtNworZGRjcHMzMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIC0zNCAtPiAtNworZGRjcHMzMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIC0zNCAtPiAtNzUKK2RkY3BzMzA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAtMzQgLT4gLTc1CitkZGNwczMwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgLTM0IC0+IC03LjUwCitkZGNwczMwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgLTM0IC0+IC03LjUwCitkZGNwczMwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgLTM0IC0+IC03LjUwMAorZGRjcHMzMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIC0zNCAtPiAtNy41MDAKKworLS0gemVyb3MKK2RkY3BzMzExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAtMzQgLT4gLTAKK2RkY3BzMzEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAtMzQgLT4gLTAKK2RkY3BzMzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2RkY3BzMzE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2RkY3BzMzE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMAorZGRjcHMzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCitkZGNwczMxNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKK2RkY3BzMzE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRjcHMzMjEgY29weXNpZ24gIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgICAtMzQgLT4gLTI2ODI2ODI2ODI2ODI2ODIKK2RkY3BzMzIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgLTM0IC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZGNwczMyMyBjb3B5c2lnbiAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgICAgIC0zNCAtPiAtMTM0MTM0MTM0MTM0MTM0MQorZGRjcHMzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAtMzQgLT4gLTEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkY3BzMzMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgLTM0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGNwczMzMiBjb3B5c2lnbiAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzgzCitkZGNwczMzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIC0zNCAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcHMzMzQgY29weXNpZ24gIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM5OAorCitkZGNwczMzNSBjb3B5c2lnbiAgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzk4CitkZGNwczMzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0zNCAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcHMzMzcgY29weXNpZ24gIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM4MworZGRjcHMzMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMzQgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworLS0gT3RoZXIga2luZHMgb2YgUkhTCitkZGNwczQwMSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTM0IC0+IC03MDEKK2RkY3BzNDAyIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMzQgLT4gLTcyMAorZGRjcHM0MDMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0wICAtPiAtNzAxCitkZGNwczQwNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTAgIC0+IC03MjAKK2RkY3BzNDA1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMCAgLT4gIDcwMQorZGRjcHM0MDYgY29weXNpZ24gICAgICAgICAtNzIwICAgICswICAtPiAgNzIwCitkZGNwczQwNyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzM0IC0+ICA3MDEKK2RkY3BzNDA4IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMzQgLT4gIDcyMAorCitkZGNwczQxMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLUluZiAgLT4gLTcwMQorZGRjcHM0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjAKK2RkY3BzNDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxCitkZGNwczQxNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK0luZiAgLT4gIDcyMAorCitkZGNwczQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQorZGRjcHM0MjEgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1OYU4gIC0+IC03MjAKK2RkY3BzNDIyIGNvcHlzaWduICAgICAgICAgIDcwMSAgICArTmFOICAtPiAgNzAxCitkZGNwczQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMAorZGRjcHM0MjUgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU44IC0+ICA3MjAKKworZGRjcHM0MjYgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1zTmFOICAtPiAtNzAxCitkZGNwczQyNyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLXNOYU4gIC0+IC03MjAKK2RkY3BzNDI4IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArc05hTiAgLT4gIDcwMQorZGRjcHM0MjkgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOICAtPiAgNzIwCitkZGNwczQzMCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4zIC0+ICA3MjAKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOWRiMjIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRGl2aWRlLmRlY1Rlc3QKQEAgLTAsMCArMSw4NjMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGREaXZpZGUuZGVjVGVzdCAtLSBkZWNEb3VibGUgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRkaXYwMDEgZGl2aWRlICAxICAgICAxICAgIC0+ICAxCitkZGRpdjAwMiBkaXZpZGUgIDIgICAgIDEgICAgLT4gIDIKK2RkZGl2MDAzIGRpdmlkZSAgMSAgICAgMiAgICAtPiAgMC41CitkZGRpdjAwNCBkaXZpZGUgIDIgICAgIDIgICAgLT4gIDEKK2RkZGl2MDA1IGRpdmlkZSAgMCAgICAgMSAgICAtPiAgMAorZGRkaXYwMDYgZGl2aWRlICAwICAgICAyICAgIC0+ICAwCitkZGRpdjAwNyBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MDA4IGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYwMDkgZGl2aWRlICAzICAgICAzICAgIC0+ICAxCisKK2RkZGl2MDEwIGRpdmlkZSAgMi40ICAgMSAgICAtPiAgMi40CitkZGRpdjAxMSBkaXZpZGUgIDIuNCAgIC0xICAgLT4gIC0yLjQKK2RkZGl2MDEyIGRpdmlkZSAgLTIuNCAgMSAgICAtPiAgLTIuNAorZGRkaXYwMTMgZGl2aWRlICAtMi40ICAtMSAgIC0+ICAyLjQKK2RkZGl2MDE0IGRpdmlkZSAgMi40MCAgMSAgICAtPiAgMi40MAorZGRkaXYwMTUgZGl2aWRlICAyLjQwMCAxICAgIC0+ICAyLjQwMAorZGRkaXYwMTYgZGl2aWRlICAyLjQgICAyICAgIC0+ICAxLjIKK2RkZGl2MDE3IGRpdmlkZSAgMi40MDAgMiAgICAtPiAgMS4yMDAKK2RkZGl2MDE4IGRpdmlkZSAgMi4gICAgMiAgICAtPiAgMQorZGRkaXYwMTkgZGl2aWRlICAyMCAgICAyMCAgIC0+ICAxCisKK2RkZGl2MDIwIGRpdmlkZSAgMTg3ICAgMTg3ICAgIC0+ICAxCitkZGRpdjAyMSBkaXZpZGUgIDUgICAgIDIgICAgICAtPiAgMi41CitkZGRpdjAyMiBkaXZpZGUgIDUwICAgIDIwICAgICAtPiAgMi41CitkZGRpdjAyMyBkaXZpZGUgIDUwMCAgIDIwMCAgICAtPiAgMi41CitkZGRpdjAyNCBkaXZpZGUgIDUwLjAgIDIwLjAgICAtPiAgMi41CitkZGRpdjAyNSBkaXZpZGUgIDUuMDAgIDIuMDAgICAtPiAgMi41CitkZGRpdjAyNiBkaXZpZGUgIDUgICAgIDIuMCAgICAtPiAgMi41CitkZGRpdjAyNyBkaXZpZGUgIDUgICAgIDIuMDAwICAtPiAgMi41CitkZGRpdjAyOCBkaXZpZGUgIDUgICAgIDAuMjAgICAtPiAgMjUKK2RkZGl2MDI5IGRpdmlkZSAgNSAgICAgMC4yMDAgIC0+ICAyNQorZGRkaXYwMzAgZGl2aWRlICAxMCAgICAxICAgICAgLT4gIDEwCitkZGRpdjAzMSBkaXZpZGUgIDEwMCAgIDEgICAgICAtPiAgMTAwCitkZGRpdjAzMiBkaXZpZGUgIDEwMDAgIDEgICAgICAtPiAgMTAwMAorZGRkaXYwMzMgZGl2aWRlICAxMDAwICAxMDAgICAgLT4gIDEwCisKK2RkZGl2MDM1IGRpdmlkZSAgMSAgICAgMiAgICAgIC0+ICAwLjUKK2RkZGl2MDM2IGRpdmlkZSAgMSAgICAgNCAgICAgIC0+ICAwLjI1CitkZGRpdjAzNyBkaXZpZGUgIDEgICAgIDggICAgICAtPiAgMC4xMjUKK2RkZGl2MDM4IGRpdmlkZSAgMSAgICAgMTYgICAgIC0+ICAwLjA2MjUKK2RkZGl2MDM5IGRpdmlkZSAgMSAgICAgMzIgICAgIC0+ICAwLjAzMTI1CitkZGRpdjA0MCBkaXZpZGUgIDEgICAgIDY0ICAgICAtPiAgMC4wMTU2MjUKK2RkZGl2MDQxIGRpdmlkZSAgMSAgICAtMiAgICAgIC0+ICAtMC41CitkZGRpdjA0MiBkaXZpZGUgIDEgICAgLTQgICAgICAtPiAgLTAuMjUKK2RkZGl2MDQzIGRpdmlkZSAgMSAgICAtOCAgICAgIC0+ICAtMC4xMjUKK2RkZGl2MDQ0IGRpdmlkZSAgMSAgICAtMTYgICAgIC0+ICAtMC4wNjI1CitkZGRpdjA0NSBkaXZpZGUgIDEgICAgLTMyICAgICAtPiAgLTAuMDMxMjUKK2RkZGl2MDQ2IGRpdmlkZSAgMSAgICAtNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RkZGl2MDQ3IGRpdmlkZSAtMSAgICAgMiAgICAgIC0+ICAtMC41CitkZGRpdjA0OCBkaXZpZGUgLTEgICAgIDQgICAgICAtPiAgLTAuMjUKK2RkZGl2MDQ5IGRpdmlkZSAtMSAgICAgOCAgICAgIC0+ICAtMC4xMjUKK2RkZGl2MDUwIGRpdmlkZSAtMSAgICAgMTYgICAgIC0+ICAtMC4wNjI1CitkZGRpdjA1MSBkaXZpZGUgLTEgICAgIDMyICAgICAtPiAgLTAuMDMxMjUKK2RkZGl2MDUyIGRpdmlkZSAtMSAgICAgNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RkZGl2MDUzIGRpdmlkZSAtMSAgICAtMiAgICAgIC0+ICAwLjUKK2RkZGl2MDU0IGRpdmlkZSAtMSAgICAtNCAgICAgIC0+ICAwLjI1CitkZGRpdjA1NSBkaXZpZGUgLTEgICAgLTggICAgICAtPiAgMC4xMjUKK2RkZGl2MDU2IGRpdmlkZSAtMSAgICAtMTYgICAgIC0+ICAwLjA2MjUKK2RkZGl2MDU3IGRpdmlkZSAtMSAgICAtMzIgICAgIC0+ICAwLjAzMTI1CitkZGRpdjA1OCBkaXZpZGUgLTEgICAgLTY0ICAgICAtPiAgMC4wMTU2MjUKKworLS0gYmNkVGltZQorZGRkaXYwNjAgZGl2aWRlICAxIDcgICAgICAgICAgICAgICAgICAgLT4gMC4xNDI4NTcxNDI4NTcxNDI5IEluZXhhY3QgUm91bmRlZAorZGRkaXYwNjEgZGl2aWRlIDEuMjM0NTY3OCAgMS45ODc2NTQzICAgLT4gMC42MjExMTc5NjgwNDkwNzE3IEluZXhhY3QgUm91bmRlZAorCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkZGl2MDcxIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OQorZGRkaXYwNzIgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTkgIDEgIC0+ICA5OTk5OTk5OTk5OTk5OTkKK2RkZGl2MDczIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTkgICAxICAtPiAgOTk5OTk5OTk5OTk5OTkKK2RkZGl2MDc0IGRpdmlkZSAgOTk5OTk5OTk5OTk5OSAgICAxICAtPiAgOTk5OTk5OTk5OTk5OQorZGRkaXYwNzUgZGl2aWRlICA5OTk5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTk5OTkKK2RkZGl2MDc2IGRpdmlkZSAgOTk5OTk5OTk5OTkgICAgICAxICAtPiAgOTk5OTk5OTk5OTkKK2RkZGl2MDc3IGRpdmlkZSAgOTk5OTk5OTk5OSAgICAgICAxICAtPiAgOTk5OTk5OTk5OQorZGRkaXYwNzggZGl2aWRlICA5OTk5OTk5OTkgICAgICAgIDEgIC0+ICA5OTk5OTk5OTkKK2RkZGl2MDc5IGRpdmlkZSAgOTk5OTk5OTkgICAgICAgICAxICAtPiAgOTk5OTk5OTkKK2RkZGl2MDgwIGRpdmlkZSAgOTk5OTk5OSAgICAgICAgICAxICAtPiAgOTk5OTk5OQorZGRkaXYwODEgZGl2aWRlICA5OTk5OTkgICAgICAgICAgIDEgIC0+ICA5OTk5OTkKK2RkZGl2MDgyIGRpdmlkZSAgOTk5OTkgICAgICAgICAgICAxICAtPiAgOTk5OTkKK2RkZGl2MDgzIGRpdmlkZSAgOTk5OSAgICAgICAgICAgICAxICAtPiAgOTk5OQorZGRkaXYwODQgZGl2aWRlICA5OTkgICAgICAgICAgICAgIDEgIC0+ICA5OTkKK2RkZGl2MDg1IGRpdmlkZSAgOTkgICAgICAgICAgICAgICAxICAtPiAgOTkKK2RkZGl2MDg2IGRpdmlkZSAgOSAgICAgICAgICAgICAgICAxICAtPiAgOQorCitkZGRpdjA5MCBkaXZpZGUgIDAuICAgICAgICAgICAgMSAgICAtPiAgMAorZGRkaXYwOTEgZGl2aWRlICAuMCAgICAgICAgICAgIDEgICAgLT4gIDAuMAorZGRkaXYwOTIgZGl2aWRlICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAuMDAKK2RkZGl2MDkzIGRpdmlkZSAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwRSs3CitkZGRpdjA5NCBkaXZpZGUgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMEUtNTQKKworZGRkaXYwOTUgZGl2aWRlICAxICAgICAgICAgICAgMUUtOCAgLT4gIDFFKzgKK2RkZGl2MDk2IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTkgIC0+ICAxRSs5CitkZGRpdjA5NyBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMCAtPiAgMUUrMTAKK2RkZGl2MDk4IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTExIC0+ICAxRSsxMQorZGRkaXYwOTkgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTIgLT4gIDFFKzEyCisKK2RkZGl2MTAwIGRpdmlkZSAgMSAgMSAgIC0+IDEKK2RkZGl2MTAxIGRpdmlkZSAgMSAgMiAgIC0+IDAuNQorZGRkaXYxMDIgZGl2aWRlICAxICAzICAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDMgZGl2aWRlICAxICA0ICAgLT4gMC4yNQorZGRkaXYxMDQgZGl2aWRlICAxICA1ICAgLT4gMC4yCitkZGRpdjEwNSBkaXZpZGUgIDEgIDYgICAtPiAwLjE2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNiBkaXZpZGUgIDEgIDcgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNyBkaXZpZGUgIDEgIDggICAtPiAwLjEyNQorZGRkaXYxMDggZGl2aWRlICAxICA5ICAgLT4gMC4xMTExMTExMTExMTExMTExIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDkgZGl2aWRlICAxICAxMCAgLT4gMC4xCitkZGRpdjExMCBkaXZpZGUgIDEgIDEgICAtPiAxCitkZGRpdjExMSBkaXZpZGUgIDIgIDEgICAtPiAyCitkZGRpdjExMiBkaXZpZGUgIDMgIDEgICAtPiAzCitkZGRpdjExMyBkaXZpZGUgIDQgIDEgICAtPiA0CitkZGRpdjExNCBkaXZpZGUgIDUgIDEgICAtPiA1CitkZGRpdjExNSBkaXZpZGUgIDYgIDEgICAtPiA2CitkZGRpdjExNiBkaXZpZGUgIDcgIDEgICAtPiA3CitkZGRpdjExNyBkaXZpZGUgIDggIDEgICAtPiA4CitkZGRpdjExOCBkaXZpZGUgIDkgIDEgICAtPiA5CitkZGRpdjExOSBkaXZpZGUgIDEwIDEgICAtPiAxMAorCitkZGRpdjEyMCBkaXZpZGUgIDNFKzEgMC4wMDEgIC0+IDNFKzQKK2RkZGl2MTIxIGRpdmlkZSAgMi4yMDAgMiAgICAgLT4gMS4xMDAKKworZGRkaXYxMzAgZGl2aWRlICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5LjQ5Mzg5ODc3OTc1NiAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTMxIGRpdmlkZSAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3My45NDc4OTU3OTE1ODMgICAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEzMiBkaXZpZGUgIDEyMzQ1ICA0LjkgICAgLT4gIDI1MTkuMzg3NzU1MTAyMDQxICAgIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMzMgZGl2aWRlICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5CitkZGRpdjEzNCBkaXZpZGUgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjAuNTg4MjM1Mjk0MTE4ICAgIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMzUgZGl2aWRlICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0LjA3MTg1NjI4NzQyNSAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTM2IGRpdmlkZSAgMTIzNDUgIDUuMDAxICAtPiAgMjQ2OC41MDYyOTg3NDAyNTIgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3QgcG9zc2libHkgaW1wcmVjaXNlIHJlc3VsdHMKK2RkZGl2MjIwIGRpdmlkZSAzOTEgICA1OTcgLT4gIDAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIyMSBkaXZpZGUgMzkxICAtNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMjIgZGl2aWRlIC0zOTEgIDU5NyAtPiAtMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjIzIGRpdmlkZSAtMzkxIC01OTcgLT4gIDAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdywgc29tZSB3aXRoIGNvZWZmaWNpZW50IHBhZGRpbmcKK2RkZGl2MjcwIGRpdmlkZSAxIDFlMzg0ICAgICAgICAgICAgICAgICAgLT4gMUUtMzg0ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RkZGl2MjcxIGRpdmlkZSAxIDAuOWUzODQgICAgICAgICAgICAgICAgLT4gMS4xMTExMTExMTExMTExMUUtMzg0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRkaXYyNzIgZGl2aWRlIDEgMC45OWUzODQgICAgICAgICAgICAgICAtPiAxLjAxMDEwMTAxMDEwMTAxRS0zODQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGRpdjI3MyBkaXZpZGUgMSAwLjk5OTk5OTk5OTk5OTk5OTllMzg0IC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZGl2Mjc0IGRpdmlkZSA5ZTM4NCAgICAxICAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCitkZGRpdjI3NSBkaXZpZGUgOS45ZTM4NCAgMSAgICAgICAgICAgICAgIC0+IDkuOTAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorZGRkaXYyNzYgZGl2aWRlIDkuOTllMzg0IDEgICAgICAgICAgICAgICAtPiA5Ljk5MDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKK2RkZGl2Mjc3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTllMzg0IDEgICAgLT4gOS45OTk5OTk5OTk5OTk5MDBFKzM4NCBDbGFtcGVkCitkZGRpdjI3OCBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OWUzODQgMSAgIC0+IDkuOTk5OTk5OTk5OTk5OTkwRSszODQgQ2xhbXBlZAorZGRkaXYyNzkgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CisKK2RkZGl2Mjg1IGRpdmlkZSA5LjllMzg0ICAxLjEgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorZGRkaXYyODYgZGl2aWRlIDkuOTllMzg0IDEuMSAgICAgICAgICAgICAgLT4gOS4wODE4MTgxODE4MTgxODJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2Mjg3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTllMzg0IDEuMSAgIC0+IDkuMDkwOTA5MDkwOTA5MDAwRSszODQgQ2xhbXBlZAorZGRkaXYyODggZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTllMzg0IDEuMSAgLT4gOS4wOTA5MDkwOTA5MDkwODJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2Mjg5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMS4xIC0+IDkuMDkwOTA5MDkwOTA5MDkwRSszODQgQ2xhbXBlZAorCisKKy0tIERpdmlkZSBpbnRvIDAgdGVzdHMKK2RkZGl2MzAxIGRpdmlkZSAgICAwICAgIDcgICAgIC0+IDAKK2RkZGl2MzAyIGRpdmlkZSAgICAwICAgIDdFLTUgIC0+IDBFKzUKK2RkZGl2MzAzIGRpdmlkZSAgICAwICAgIDdFLTEgIC0+IDBFKzEKK2RkZGl2MzA0IGRpdmlkZSAgICAwICAgIDdFKzEgIC0+IDAuMAorZGRkaXYzMDUgZGl2aWRlICAgIDAgICAgN0UrNSAgLT4gMC4wMDAwMAorZGRkaXYzMDYgZGl2aWRlICAgIDAgICAgN0UrNiAgLT4gMC4wMDAwMDAKK2RkZGl2MzA3IGRpdmlkZSAgICAwICAgIDdFKzcgIC0+IDBFLTcKK2RkZGl2MzA4IGRpdmlkZSAgICAwICAgNzBFLTUgIC0+IDBFKzUKK2RkZGl2MzA5IGRpdmlkZSAgICAwICAgNzBFLTEgIC0+IDBFKzEKK2RkZGl2MzEwIGRpdmlkZSAgICAwICAgNzBFKzAgIC0+IDAKK2RkZGl2MzExIGRpdmlkZSAgICAwICAgNzBFKzEgIC0+IDAuMAorZGRkaXYzMTIgZGl2aWRlICAgIDAgICA3MEUrNSAgLT4gMC4wMDAwMAorZGRkaXYzMTMgZGl2aWRlICAgIDAgICA3MEUrNiAgLT4gMC4wMDAwMDAKK2RkZGl2MzE0IGRpdmlkZSAgICAwICAgNzBFKzcgIC0+IDBFLTcKK2RkZGl2MzE1IGRpdmlkZSAgICAwICA3MDBFLTUgIC0+IDBFKzUKK2RkZGl2MzE2IGRpdmlkZSAgICAwICA3MDBFLTEgIC0+IDBFKzEKK2RkZGl2MzE3IGRpdmlkZSAgICAwICA3MDBFKzAgIC0+IDAKK2RkZGl2MzE4IGRpdmlkZSAgICAwICA3MDBFKzEgIC0+IDAuMAorZGRkaXYzMTkgZGl2aWRlICAgIDAgIDcwMEUrNSAgLT4gMC4wMDAwMAorZGRkaXYzMjAgZGl2aWRlICAgIDAgIDcwMEUrNiAgLT4gMC4wMDAwMDAKK2RkZGl2MzIxIGRpdmlkZSAgICAwICA3MDBFKzcgIC0+IDBFLTcKK2RkZGl2MzIyIGRpdmlkZSAgICAwICA3MDBFKzc3IC0+IDBFLTc3CisKK2RkZGl2MzMxIGRpdmlkZSAwRS0zICAgIDdFLTUgIC0+IDBFKzIKK2RkZGl2MzMyIGRpdmlkZSAwRS0zICAgIDdFLTEgIC0+IDAuMDAKK2RkZGl2MzMzIGRpdmlkZSAwRS0zICAgIDdFKzEgIC0+IDAuMDAwMAorZGRkaXYzMzQgZGl2aWRlIDBFLTMgICAgN0UrNSAgLT4gMEUtOAorZGRkaXYzMzUgZGl2aWRlIDBFLTEgICAgN0UtNSAgLT4gMEUrNAorZGRkaXYzMzYgZGl2aWRlIDBFLTEgICAgN0UtMSAgLT4gMAorZGRkaXYzMzcgZGl2aWRlIDBFLTEgICAgN0UrMSAgLT4gMC4wMAorZGRkaXYzMzggZGl2aWRlIDBFLTEgICAgN0UrNSAgLT4gMC4wMDAwMDAKK2RkZGl2MzM5IGRpdmlkZSAwRSsxICAgIDdFLTUgIC0+IDBFKzYKK2RkZGl2MzQwIGRpdmlkZSAwRSsxICAgIDdFLTEgIC0+IDBFKzIKK2RkZGl2MzQxIGRpdmlkZSAwRSsxICAgIDdFKzEgIC0+IDAKK2RkZGl2MzQyIGRpdmlkZSAwRSsxICAgIDdFKzUgIC0+IDAuMDAwMAorZGRkaXYzNDMgZGl2aWRlIDBFKzMgICAgN0UtNSAgLT4gMEUrOAorZGRkaXYzNDQgZGl2aWRlIDBFKzMgICAgN0UtMSAgLT4gMEUrNAorZGRkaXYzNDUgZGl2aWRlIDBFKzMgICAgN0UrMSAgLT4gMEUrMgorZGRkaXYzNDYgZGl2aWRlIDBFKzMgICAgN0UrNSAgLT4gMC4wMAorCistLSBUaGVzZSB3ZXJlICdpbnB1dCByb3VuZGluZycKK2RkZGl2NDQxIGRpdmlkZSAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCitkZGRpdjQ0MiBkaXZpZGUgMSAxMjM0NTY3ODAwMCAtPiA4LjEwMDAwMDY2NDIwMDA1NEUtMTEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQ0MyBkaXZpZGUgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCitkZGRpdjQ0NCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2NDIwMDA1NEUtMTAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQ0NSBkaXZpZGUgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCitkZGRpdjQ0NiBkaXZpZGUgMSAxMjM0NTY3ODkwICAtPiA4LjEwMDAwMDA3MzcxMDAwMUUtMTAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQ0NyBkaXZpZGUgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCitkZGRpdjQ0OCBkaXZpZGUgMSAxMjM0NTY3ODkxICAtPiA4LjEwMDAwMDA2NzE0OTAwMUUtMTAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQ0OSBkaXZpZGUgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQorZGRkaXY0NTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwNzMwNTM5MDFFLTExIEluZXhhY3QgUm91bmRlZAorZGRkaXY0NTEgZGl2aWRlIDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgorZGRkaXY0NTIgZGl2aWRlIDEgMTIzNDU2Nzg5NiAgLT4gOC4xMDAwMDAwMzQzNDQwMDBFLTEwIEluZXhhY3QgUm91bmRlZAorCistLSBoaWdoLWxvd3MKK2RkZGl2NDUzIGRpdmlkZSAxZSsxICAgMSAgICAtPiAgIDFFKzEKK2RkZGl2NDU0IGRpdmlkZSAxZSsxICAgMS4wICAtPiAgIDFFKzEKK2RkZGl2NDU1IGRpdmlkZSAxZSsxICAgMS4wMCAtPiAgIDFFKzEKK2RkZGl2NDU2IGRpdmlkZSAxZSsyICAgMiAgICAtPiAgIDVFKzEKK2RkZGl2NDU3IGRpdmlkZSAxZSsyICAgMi4wICAtPiAgIDVFKzEKK2RkZGl2NDU4IGRpdmlkZSAxZSsyICAgMi4wMCAtPiAgIDVFKzEKKworLS0gc29tZSBmcm9tIElFRUUgZGlzY3Vzc2lvbnMKK2RkZGl2NDYwIGRpdmlkZSAzZTAgICAgICAyZTAgICAgIC0+IDEuNQorZGRkaXY0NjEgZGl2aWRlIDMwZS0xICAgIDJlMCAgICAgLT4gMS41CitkZGRpdjQ2MiBkaXZpZGUgMzAwZS0yICAgMmUwICAgICAtPiAxLjUwCitkZGRpdjQ2NCBkaXZpZGUgMzAwMGUtMyAgMmUwICAgICAtPiAxLjUwMAorZGRkaXY0NjUgZGl2aWRlIDNlMCAgICAgIDIwZS0xICAgLT4gMS41CitkZGRpdjQ2NiBkaXZpZGUgMzBlLTEgICAgMjBlLTEgICAtPiAxLjUKK2RkZGl2NDY3IGRpdmlkZSAzMDBlLTIgICAyMGUtMSAgIC0+IDEuNQorZGRkaXY0NjggZGl2aWRlIDMwMDBlLTMgIDIwZS0xICAgLT4gMS41MAorZGRkaXY0NjkgZGl2aWRlIDNlMCAgICAgIDIwMGUtMiAgLT4gMS41CitkZGRpdjQ3MCBkaXZpZGUgMzBlLTEgICAgMjAwZS0yICAtPiAxLjUKK2RkZGl2NDcxIGRpdmlkZSAzMDBlLTIgICAyMDBlLTIgIC0+IDEuNQorZGRkaXY0NzIgZGl2aWRlIDMwMDBlLTMgIDIwMGUtMiAgLT4gMS41CitkZGRpdjQ3MyBkaXZpZGUgM2UwICAgICAgMjAwMGUtMyAtPiAxLjUKK2RkZGl2NDc0IGRpdmlkZSAzMGUtMSAgICAyMDAwZS0zIC0+IDEuNQorZGRkaXY0NzUgZGl2aWRlIDMwMGUtMiAgIDIwMDBlLTMgLT4gMS41CitkZGRpdjQ3NiBkaXZpZGUgMzAwMGUtMyAgMjAwMGUtMyAtPiAxLjUKKworLS0gc29tZSByZWNpcHJvY2FscworZGRkaXY0ODAgZGl2aWRlIDEgICAgICAgIDEuMEUrMzMgLT4gMUUtMzMKK2RkZGl2NDgxIGRpdmlkZSAxICAgICAgICAxMEUrMzMgIC0+IDFFLTM0CitkZGRpdjQ4MiBkaXZpZGUgMSAgICAgICAgMS4wRS0zMyAtPiAxRSszMworZGRkaXY0ODMgZGl2aWRlIDEgICAgICAgIDEwRS0zMyAgLT4gMUUrMzIKKworLS0gUk1TIGRpc2N1c3Npb24gdGFibGUKK2RkZGl2NDg0IGRpdmlkZSAwZTUgICAgIDFlMyAtPiAgIDBFKzIKK2RkZGl2NDg1IGRpdmlkZSAwZTUgICAgIDJlMyAtPiAgIDBFKzIKK2RkZGl2NDg2IGRpdmlkZSAwZTUgICAgMTBlMiAtPiAgIDBFKzMKK2RkZGl2NDg3IGRpdmlkZSAwZTUgICAgMjBlMiAtPiAgIDBFKzMKK2RkZGl2NDg4IGRpdmlkZSAwZTUgICAxMDBlMSAtPiAgIDBFKzQKK2RkZGl2NDg5IGRpdmlkZSAwZTUgICAyMDBlMSAtPiAgIDBFKzQKKworZGRkaXY0OTEgZGl2aWRlIDFlNSAgICAgMWUzIC0+ICAgMUUrMgorZGRkaXY0OTIgZGl2aWRlIDFlNSAgICAgMmUzIC0+ICAgNUUrMQorZGRkaXY0OTMgZGl2aWRlIDFlNSAgICAxMGUyIC0+ICAgMUUrMgorZGRkaXY0OTQgZGl2aWRlIDFlNSAgICAyMGUyIC0+ICAgNUUrMQorZGRkaXY0OTUgZGl2aWRlIDFlNSAgIDEwMGUxIC0+ICAgMUUrMgorZGRkaXY0OTYgZGl2aWRlIDFlNSAgIDIwMGUxIC0+ICAgNUUrMQorCistLSB0cnl6ZXJvcyBjYXNlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RkZGl2NDk3ICBkaXZpZGUgIDBFKzM4MCAxMDAwRS0xMyAgLT4gMEUrMzY5IENsYW1wZWQKK2RkZGl2NDk4ICBkaXZpZGUgIDBFLTM5MCAxMDAwRSsxMyAgLT4gMEUtMzk4IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKworLS0gZm9jdXMgb24gdHJhaWxpbmcgemVyb3MgaXNzdWVzCitkZGRpdjUwMCBkaXZpZGUgIDEgICAgICA5LjkgICAgLT4gIDAuMTAxMDEwMTAxMDEwMTAxMCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjUwMSBkaXZpZGUgIDEgICAgICA5LjA5ICAgLT4gIDAuMTEwMDExMDAxMTAwMTEwMCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjUwMiBkaXZpZGUgIDEgICAgICA5LjAwOSAgLT4gIDAuMTExMDAwMTExMDAwMTExMCAgSW5leGFjdCBSb3VuZGVkCisKK2RkZGl2NTExIGRpdmlkZSAxICAgICAgICAgMiAgICAtPiAwLjUKK2RkZGl2NTEyIGRpdmlkZSAxLjAgICAgICAgMiAgICAtPiAwLjUKK2RkZGl2NTEzIGRpdmlkZSAxLjAwICAgICAgMiAgICAtPiAwLjUwCitkZGRpdjUxNCBkaXZpZGUgMS4wMDAgICAgIDIgICAgLT4gMC41MDAKK2RkZGl2NTE1IGRpdmlkZSAxLjAwMDAgICAgMiAgICAtPiAwLjUwMDAKK2RkZGl2NTE2IGRpdmlkZSAxLjAwMDAwICAgMiAgICAtPiAwLjUwMDAwCitkZGRpdjUxNyBkaXZpZGUgMS4wMDAwMDAgIDIgICAgLT4gMC41MDAwMDAKK2RkZGl2NTE4IGRpdmlkZSAxLjAwMDAwMDAgMiAgICAtPiAwLjUwMDAwMDAKK2RkZGl2NTE5IGRpdmlkZSAxLjAwICAgICAgMi4wMCAtPiAwLjUKKworZGRkaXY1MjEgZGl2aWRlIDIgICAgMSAgICAgICAgIC0+IDIKK2RkZGl2NTIyIGRpdmlkZSAyICAgIDEuMCAgICAgICAtPiAyCitkZGRpdjUyMyBkaXZpZGUgMiAgICAxLjAwICAgICAgLT4gMgorZGRkaXY1MjQgZGl2aWRlIDIgICAgMS4wMDAgICAgIC0+IDIKK2RkZGl2NTI1IGRpdmlkZSAyICAgIDEuMDAwMCAgICAtPiAyCitkZGRpdjUyNiBkaXZpZGUgMiAgICAxLjAwMDAwICAgLT4gMgorZGRkaXY1MjcgZGl2aWRlIDIgICAgMS4wMDAwMDAgIC0+IDIKK2RkZGl2NTI4IGRpdmlkZSAyICAgIDEuMDAwMDAwMCAtPiAyCitkZGRpdjUyOSBkaXZpZGUgMi4wMCAxLjAwICAgICAgLT4gMgorCitkZGRpdjUzMCBkaXZpZGUgIDIuNDAgICAyICAgICAgLT4gIDEuMjAKK2RkZGl2NTMxIGRpdmlkZSAgMi40MCAgIDQgICAgICAtPiAgMC42MAorZGRkaXY1MzIgZGl2aWRlICAyLjQwICAxMCAgICAgIC0+ICAwLjI0CitkZGRpdjUzMyBkaXZpZGUgIDIuNDAgICAyLjAgICAgLT4gIDEuMgorZGRkaXY1MzQgZGl2aWRlICAyLjQwICAgNC4wICAgIC0+ICAwLjYKK2RkZGl2NTM1IGRpdmlkZSAgMi40MCAgMTAuMCAgICAtPiAgMC4yNAorZGRkaXY1MzYgZGl2aWRlICAyLjQwICAgMi4wMCAgIC0+ICAxLjIKK2RkZGl2NTM3IGRpdmlkZSAgMi40MCAgIDQuMDAgICAtPiAgMC42CitkZGRpdjUzOCBkaXZpZGUgIDIuNDAgIDEwLjAwICAgLT4gIDAuMjQKK2RkZGl2NTM5IGRpdmlkZSAgMC45ICAgIDAuMSAgICAtPiAgOQorZGRkaXY1NDAgZGl2aWRlICAwLjkgICAgMC4wMSAgIC0+ICA5RSsxCitkZGRpdjU0MSBkaXZpZGUgIDAuOSAgICAwLjAwMSAgLT4gIDlFKzIKK2RkZGl2NTQyIGRpdmlkZSAgNSAgICAgIDIgICAgICAtPiAgMi41CitkZGRpdjU0MyBkaXZpZGUgIDUgICAgICAyLjAgICAgLT4gIDIuNQorZGRkaXY1NDQgZGl2aWRlICA1ICAgICAgMi4wMCAgIC0+ICAyLjUKK2RkZGl2NTQ1IGRpdmlkZSAgNSAgICAgIDIwICAgICAtPiAgMC4yNQorZGRkaXY1NDYgZGl2aWRlICA1ICAgICAgMjAuMCAgIC0+ICAwLjI1CitkZGRpdjU0NyBkaXZpZGUgIDIuNDAwICAyICAgICAgLT4gIDEuMjAwCitkZGRpdjU0OCBkaXZpZGUgIDIuNDAwICAyLjAgICAgLT4gIDEuMjAKK2RkZGl2NTQ5IGRpdmlkZSAgMi40MDAgIDIuNDAwICAtPiAgMQorCitkZGRpdjU1MCBkaXZpZGUgIDI0MCAgICAxICAgICAgLT4gIDI0MAorZGRkaXY1NTEgZGl2aWRlICAyNDAgICAgMTAgICAgIC0+ICAyNAorZGRkaXY1NTIgZGl2aWRlICAyNDAgICAgMTAwICAgIC0+ICAyLjQKK2RkZGl2NTUzIGRpdmlkZSAgMjQwICAgIDEwMDAgICAtPiAgMC4yNAorZGRkaXY1NTQgZGl2aWRlICAyNDAwICAgMSAgICAgIC0+ICAyNDAwCitkZGRpdjU1NSBkaXZpZGUgIDI0MDAgICAxMCAgICAgLT4gIDI0MAorZGRkaXY1NTYgZGl2aWRlICAyNDAwICAgMTAwICAgIC0+ICAyNAorZGRkaXY1NTcgZGl2aWRlICAyNDAwICAgMTAwMCAgIC0+ICAyLjQKKworLS0gK3ZlIGV4cG9uZW50CitkZGRpdjYwMCBkaXZpZGUgIDIuNEUrOSAgICAgMiAgLT4gIDEuMkUrOQorZGRkaXY2MDEgZGl2aWRlICAyLjQwRSs5ICAgIDIgIC0+ICAxLjIwRSs5CitkZGRpdjYwMiBkaXZpZGUgIDIuNDAwRSs5ICAgMiAgLT4gIDEuMjAwRSs5CitkZGRpdjYwMyBkaXZpZGUgIDIuNDAwMEUrOSAgMiAgLT4gIDEuMjAwMEUrOQorZGRkaXY2MDQgZGl2aWRlICAyNEUrOCAgICAgIDIgIC0+ICAxLjJFKzkKK2RkZGl2NjA1IGRpdmlkZSAgMjQwRSs3ICAgICAyICAtPiAgMS4yMEUrOQorZGRkaXY2MDYgZGl2aWRlICAyNDAwRSs2ICAgIDIgIC0+ICAxLjIwMEUrOQorZGRkaXY2MDcgZGl2aWRlICAyNDAwMEUrNSAgIDIgIC0+ICAxLjIwMDBFKzkKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorZGRkaXY3MzEgZGl2aWRlIDUuMDAgMUUtMyAgICAtPiA1LjAwRSszCitkZGRpdjczMiBkaXZpZGUgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2NzMzIGRpdmlkZSAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkaXY3MzQgZGl2aWRlICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGRpdjczNSBkaXZpZGUgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2NzM2IGRpdmlkZSAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorCitkZGRpdjc0MSBkaXZpZGUgIDAgICAgLTEgICAgIC0+IC0wCitkZGRpdjc0MiBkaXZpZGUgLTAgICAgLTEgICAgIC0+ICAwCitkZGRpdjc0MyBkaXZpZGUgIDAgICAgIDEgICAgIC0+ICAwCitkZGRpdjc0NCBkaXZpZGUgLTAgICAgIDEgICAgIC0+IC0wCitkZGRpdjc0NSBkaXZpZGUgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc0NiBkaXZpZGUgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc0NyBkaXZpZGUgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc0OCBkaXZpZGUgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2NzUxIGRpdmlkZSAgMC4wICAtMSAgICAgLT4gLTAuMAorZGRkaXY3NTIgZGl2aWRlIC0wLjAgIC0xICAgICAtPiAgMC4wCitkZGRpdjc1MyBkaXZpZGUgIDAuMCAgIDEgICAgIC0+ICAwLjAKK2RkZGl2NzU0IGRpdmlkZSAtMC4wICAgMSAgICAgLT4gLTAuMAorZGRkaXY3NTUgZGl2aWRlIC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NTYgZGl2aWRlIC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NTcgZGl2aWRlICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NTggZGl2aWRlICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGRpdjc2MSBkaXZpZGUgIDAgICAgLTEuMCAgIC0+IC0wRSsxCitkZGRpdjc2MiBkaXZpZGUgLTAgICAgLTEuMCAgIC0+ICAwRSsxCitkZGRpdjc2MyBkaXZpZGUgIDAgICAgIDEuMCAgIC0+ICAwRSsxCitkZGRpdjc2NCBkaXZpZGUgLTAgICAgIDEuMCAgIC0+IC0wRSsxCitkZGRpdjc2NSBkaXZpZGUgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc2NiBkaXZpZGUgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc2NyBkaXZpZGUgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc2OCBkaXZpZGUgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2NzcxIGRpdmlkZSAgMC4wICAtMS4wICAgLT4gLTAKK2RkZGl2NzcyIGRpdmlkZSAtMC4wICAtMS4wICAgLT4gIDAKK2RkZGl2NzczIGRpdmlkZSAgMC4wICAgMS4wICAgLT4gIDAKK2RkZGl2Nzc0IGRpdmlkZSAtMC4wICAgMS4wICAgLT4gLTAKK2RkZGl2Nzc1IGRpdmlkZSAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2Nzc2IGRpdmlkZSAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2Nzc3IGRpdmlkZSAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2Nzc4IGRpdmlkZSAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gU3BlY2lhbHMKK2RkZGl2NzgwIGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY3ODEgZGl2aWRlICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RkZGl2NzgyIGRpdmlkZSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZGRpdjc4MyBkaXZpZGUgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRkaXY3ODQgZGl2aWRlICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RkZGl2Nzg1IGRpdmlkZSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkZGRpdjc4NiBkaXZpZGUgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZGRkaXY3ODcgZGl2aWRlICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjc4OCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY3ODkgZGl2aWRlIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjc5MCBkaXZpZGUgLTEgICAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY3OTEgZGl2aWRlIC0wICAgICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2NzkyIGRpdmlkZSAgMCAgICAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkZGRpdjc5MyBkaXZpZGUgIDEgICAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGRkaXY3OTQgZGl2aWRlICAxMDAwICBJbmYgICAtPiAgMEUtMzk4IENsYW1wZWQKK2RkZGl2Nzk1IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZGRpdjgwMCBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODAxIGRpdmlkZSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZGRpdjgwMiBkaXZpZGUgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRkaXY4MDMgZGl2aWRlIC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RkZGl2ODA0IGRpdmlkZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZGRpdjgwNSBkaXZpZGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRkaXY4MDYgZGl2aWRlIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkZGl2ODA3IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4MDggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2ODA5IGRpdmlkZSAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4MTAgZGl2aWRlIC0xICAgIC1JbmYgICAtPiAgMEUtMzk4IENsYW1wZWQKK2RkZGl2ODExIGRpdmlkZSAtMCAgICAtSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkZGRpdjgxMiBkaXZpZGUgIDAgICAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY4MTMgZGl2aWRlICAxICAgIC1JbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2ODE0IGRpdmlkZSAgMTAwMCAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkZGRpdjgxNSBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRkaXY4MjEgZGl2aWRlICBOYU4gLUluZiAgICAtPiAgTmFOCitkZGRpdjgyMiBkaXZpZGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkZGl2ODIzIGRpdmlkZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRkaXY4MjQgZGl2aWRlICBOYU4gLTAgICAgICAtPiAgTmFOCitkZGRpdjgyNSBkaXZpZGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkZGl2ODI2IGRpdmlkZSAgTmFOICAxICAgICAgLT4gIE5hTgorZGRkaXY4MjcgZGl2aWRlICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZGRpdjgyOCBkaXZpZGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkZGl2ODI5IGRpdmlkZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzAgZGl2aWRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzMSBkaXZpZGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODMyIGRpdmlkZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzMgZGl2aWRlIC0wICAgIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzNCBkaXZpZGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODM1IGRpdmlkZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzYgZGl2aWRlICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzNyBkaXZpZGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRkaXY4NDEgZGl2aWRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDIgZGl2aWRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDMgZGl2aWRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDQgZGl2aWRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDUgZGl2aWRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDYgZGl2aWRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDcgZGl2aWRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDggZGl2aWRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDkgZGl2aWRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTAgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTEgZGl2aWRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTIgZGl2aWRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTMgZGl2aWRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTQgZGl2aWRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTUgZGl2aWRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTYgZGl2aWRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTcgZGl2aWRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTggZGl2aWRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTkgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGRpdjg2MSBkaXZpZGUgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkZGRpdjg2MiBkaXZpZGUgIE5hTjggIDEwMDAgIC0+ICBOYU44CitkZGRpdjg2MyBkaXZpZGUgIE5hTjcgIEluZiAgIC0+ICBOYU43CitkZGRpdjg2NCBkaXZpZGUgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitkZGRpdjg2NSBkaXZpZGUgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkZGRpdjg2NiBkaXZpZGUgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCitkZGRpdjg2NyBkaXZpZGUgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK2RkZGl2ODcxIGRpdmlkZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3MiBkaXZpZGUgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzMgZGl2aWRlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODc0IGRpdmlkZSAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3NSBkaXZpZGUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzYgZGl2aWRlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODc3IGRpdmlkZSAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3OCBkaXZpZGUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzkgZGl2aWRlICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZGRkaXY4ODEgZGl2aWRlICAtTmFOOSAgLUluZiAgIC0+ICAtTmFOOQorZGRkaXY4ODIgZGl2aWRlICAtTmFOOCAgIDEwMDAgIC0+ICAtTmFOOAorZGRkaXY4ODMgZGl2aWRlICAtTmFONyAgIEluZiAgIC0+ICAtTmFONworZGRkaXY4ODQgZGl2aWRlICAtTmFONiAgLU5hTjUgIC0+ICAtTmFONgorZGRkaXY4ODUgZGl2aWRlICAtSW5mICAgLU5hTjQgIC0+ICAtTmFONAorZGRkaXY4ODYgZGl2aWRlICAtMTAwMCAgLU5hTjMgIC0+ICAtTmFOMworZGRkaXY4ODcgZGl2aWRlICAgSW5mICAgLU5hTjIgIC0+ICAtTmFOMgorCitkZGRpdjg5MSBkaXZpZGUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTIgZGl2aWRlIC1zTmFOOTggLTEgICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODkzIGRpdmlkZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5NCBkaXZpZGUgLXNOYU45NiAtc05hTjk0IC0+IC1OYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTUgZGl2aWRlIC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODk2IGRpdmlkZSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5NyBkaXZpZGUgIDAgICAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTggZGl2aWRlICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODk5IGRpdmlkZSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlIGJ5IDAKK2RkZGl2OTAxIGRpdmlkZSAgICAwICAgICAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkaXY5MDIgZGl2aWRlICAgIDAuMEU1ICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGRpdjkwMyBkaXZpZGUgICAgMC4wMDAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2OTA0IGRpdmlkZSAgICAwLjAwMDEgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MDUgZGl2aWRlICAgIDAuMDEgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkwNiBkaXZpZGUgICAgMC4xICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTA3IGRpdmlkZSAgICAxICAgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MDggZGl2aWRlICAgIDEgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkwOSBkaXZpZGUgICAxMCAgICAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTEwIGRpdmlkZSAgIDFFKzEwMCAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MTEgZGl2aWRlICAgMUUrMTAwICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2OTIxIGRpdmlkZSAgIC0wLjAwMDEgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjIgZGl2aWRlICAgLTAuMDEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkyMyBkaXZpZGUgICAtMC4xICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTI0IGRpdmlkZSAgIC0xICAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjUgZGl2aWRlICAgLTEgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkyNiBkaXZpZGUgIC0xMCAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTI3IGRpdmlkZSAgLTFFKzEwMCAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjggZGl2aWRlICAtMUUrMTAwICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2OTMxIGRpdmlkZSAgICAwLjAwMDEgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzIgZGl2aWRlICAgIDAuMDEgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkzMyBkaXZpZGUgICAgMC4xICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTM0IGRpdmlkZSAgICAxICAgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzUgZGl2aWRlICAgIDEgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkzNiBkaXZpZGUgICAxMCAgICAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTM3IGRpdmlkZSAgIDFFKzEwMCAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzggZGl2aWRlICAgMUUrMTAwICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2OTQxIGRpdmlkZSAgIC0wLjAwMDEgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDIgZGl2aWRlICAgLTAuMDEgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjk0MyBkaXZpZGUgICAtMC4xICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTQ0IGRpdmlkZSAgIC0xICAgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDUgZGl2aWRlICAgLTEgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjk0NiBkaXZpZGUgIC0xMCAgICAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTQ3IGRpdmlkZSAgLTFFKzEwMCAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDggZGl2aWRlICAtMUUrMTAwICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZGRkaXYxMDIxICBkaXZpZGUgMUUwICAgICAgICAgIDFFMCAtPiAxCitkZGRpdjEwMjIgIGRpdmlkZSAxRTAgICAgICAgICAgMkUwIC0+IDAuNQorZGRkaXYxMDIzICBkaXZpZGUgMUUwICAgICAgICAgIDNFMCAtPiAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwMjQgIGRpdmlkZSAxMDBFLTIgICAxMDAwRS0zIC0+IDEKK2RkZGl2MTAyNSAgZGl2aWRlIDI0RS0xICAgICAgICAyRTAgLT4gMS4yCitkZGRpdjEwMjYgIGRpdmlkZSAyNDAwRS0zICAgICAgMkUwIC0+IDEuMjAwCitkZGRpdjEwMjcgIGRpdmlkZSA1RTAgICAgICAgICAgMkUwIC0+IDIuNQorZGRkaXYxMDI4ICBkaXZpZGUgNUUwICAgICAgICAyMEUtMSAtPiAyLjUKK2RkZGl2MTAyOSAgZGl2aWRlIDVFMCAgICAgIDIwMDBFLTMgLT4gMi41CitkZGRpdjEwMzAgIGRpdmlkZSA1RTAgICAgICAgICAyRS0xIC0+IDI1CitkZGRpdjEwMzEgIGRpdmlkZSA1RTAgICAgICAgIDIwRS0yIC0+IDI1CitkZGRpdjEwMzIgIGRpdmlkZSA0ODBFLTIgICAgICAgM0UwIC0+IDEuNjAKK2RkZGl2MTAzMyAgZGl2aWRlIDQ3RS0xICAgICAgICAyRTAgLT4gMi4zNQorCistLSBFQ01BU2NyaXB0IGJhZCBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorZGRkaXYxMDQwICBkaXZpZGUgNSA5ICAtPiAwLjU1NTU1NTU1NTU1NTU1NTYgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogICAgaGFsZl9ldmVuCitkZGRpdjEwNDEgIGRpdmlkZSA2IDExIC0+IDAuNTQ1NDU0NTQ1NDU0NTQ1NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZGRkaXYxMDUxIGRpdmlkZSAgMWUrMjc3ICAxZS0zMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDUyIGRpdmlkZSAgMWUrMjc3IC0xZS0zMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDUzIGRpdmlkZSAtMWUrMjc3ICAxZS0zMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDU0IGRpdmlkZSAtMWUrMjc3IC0xZS0zMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDU1IGRpdmlkZSAgMWUtMjc3ICAxZSszMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjEwNTYgZGl2aWRlICAxZS0yNzcgLTFlKzMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTA1NyBkaXZpZGUgLTFlLTI3NyAgMWUrMzExIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMDU4IGRpdmlkZSAtMWUtMjc3IC0xZSszMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZGRkaXYxMDYwIGRpdmlkZSAxZS0yOTEgMWUrMTAxIC0+IDFFLTM5MiBTdWJub3JtYWwKK2RkZGl2MTA2MSBkaXZpZGUgMWUtMjkxIDFlKzEwMiAtPiAxRS0zOTMgU3Vibm9ybWFsCitkZGRpdjEwNjIgZGl2aWRlIDFlLTI5MSAxZSsxMDMgLT4gMUUtMzk0IFN1Ym5vcm1hbAorZGRkaXYxMDYzIGRpdmlkZSAxZS0yOTEgMWUrMTA0IC0+IDFFLTM5NSBTdWJub3JtYWwKK2RkZGl2MTA2NCBkaXZpZGUgMWUtMjkxIDFlKzEwNSAtPiAxRS0zOTYgU3Vibm9ybWFsCitkZGRpdjEwNjUgZGl2aWRlIDFlLTI5MSAxZSsxMDYgLT4gMUUtMzk3IFN1Ym5vcm1hbAorZGRkaXYxMDY2IGRpdmlkZSAxZS0yOTEgMWUrMTA3IC0+IDFFLTM5OCBTdWJub3JtYWwKK2RkZGl2MTA2NyBkaXZpZGUgMWUtMjkxIDFlKzEwOCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMDY4IGRpdmlkZSAxZS0yOTEgMWUrMTA5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjEwNjkgZGl2aWRlIDFlLTI5MSAxZSsxMTAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KK2RkZGl2MTA3MCBkaXZpZGUgMWUrNjAgMWUtMzIxIC0+IDEuMDAwMDAwMDAwMDAwRSszODEgIENsYW1wZWQKK2RkZGl2MTA3MSBkaXZpZGUgMWUrNjAgMWUtMzIyIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyICBDbGFtcGVkCitkZGRpdjEwNzIgZGl2aWRlIDFlKzYwIDFlLTMyMyAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQKK2RkZGl2MTA3MyBkaXZpZGUgMWUrNjAgMWUtMzI0IC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKK2RkZGl2MTA3NCBkaXZpZGUgMWUrNjAgMWUtMzI1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDc1IGRpdmlkZSAxZSs2MCAxZS0zMjYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNzYgZGl2aWRlIDFlKzYwIDFlLTMyNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA3NyBkaXZpZGUgMWUrNjAgMWUtMzI4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDc4IGRpdmlkZSAxZSs2MCAxZS0zMjkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNzkgZGl2aWRlIDFlKzYwIDFlLTMzMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZGRkaXYxMTAxIGRpdmlkZSAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbAorZGRkaXYxMTAyIGRpdmlkZSAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDEuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRkaXYxMTAzIGRpdmlkZSAgMS4wMEUtMzk0ICAgIDFlKzIgIC0+IDEuMDBFLTM5NiAgIFN1Ym5vcm1hbAorZGRkaXYxMTA0IGRpdmlkZSAgMS4wRS0zOTQgICAgIDFlKzMgIC0+IDEuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRkaXYxMTA1IGRpdmlkZSAgMS4wRS0zOTQgICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZGl2MTEwNiBkaXZpZGUgIDEuM0UtMzk0ICAgICAxZSs0ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMDcgZGl2aWRlICAxLjVFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTA4IGRpdmlkZSAgMS43RS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEwOSBkaXZpZGUgIDIuM0UtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTAgZGl2aWRlICAyLjVFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTExIGRpdmlkZSAgMi43RS0zOTQgICAgIDFlKzQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExMiBkaXZpZGUgIDEuNDlFLTM5NCAgICAxZSs0ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTMgZGl2aWRlICAxLjUwRS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTE0IGRpdmlkZSAgMS41MUUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExNSBkaXZpZGUgIDIuNDlFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTYgZGl2aWRlICAyLjUwRS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTE3IGRpdmlkZSAgMi41MUUtMzk0ICAgIDFlKzQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRkaXYxMTE4IGRpdmlkZSAgMUUtMzk0ICAgICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsCitkZGRpdjExMTkgZGl2aWRlICAzRS0zOTQgICAgICAgMWUrNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjExMjAgZGl2aWRlICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjExMjEgZGl2aWRlICA3RS0zOTQgICAgICAgMWUrNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTIyIGRpdmlkZSAgOUUtMzk0ICAgICAgIDFlKzUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEyMyBkaXZpZGUgIDkuOUUtMzk0ICAgICAxZSs1ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkZGl2MTEyNCBkaXZpZGUgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMUUtMzk4ICAgIFN1Ym5vcm1hbAorZGRkaXYxMTI1IGRpdmlkZSAgM0UtMzk0ICAgICAgLTFlKzUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMTI2IGRpdmlkZSAtNUUtMzk0ICAgICAgIDFlKzUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMTI3IGRpdmlkZSAgN0UtMzk0ICAgICAgLTFlKzUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEyOCBkaXZpZGUgLTlFLTM5NCAgICAgICAxZSs1ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMjkgZGl2aWRlICA5LjlFLTM5NCAgICAtMWUrNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTMwIGRpdmlkZSAgMy4wRS0zOTQgICAgLTFlKzUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkZGRpdjExMzEgZGl2aWRlICAxLjBFLTE5OSAgICAgMWUrMjAwIC0+IDBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjExMzIgZGl2aWRlICAxLjBFLTE5OSAgICAgMWUrMTk5IC0+IDFFLTM5OCAgICBTdWJub3JtYWwgUm91bmRlZAorZGRkaXYxMTMzIGRpdmlkZSAgMS4wRS0xOTkgICAgIDFlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsCitkZGRpdjExMzQgZGl2aWRlICAyLjBFLTE5OSAgICAgMmUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwKK2RkZGl2MTEzNSBkaXZpZGUgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbAorZGRkaXYxMTM2IGRpdmlkZSAxMC4wRS0xOTkgICAgMTBlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsCitkZGRpdjExMzcgZGl2aWRlIDMwLjBFLTE5OSAgICAzMGUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwKKworLS0gcmFuZG9tcworZGRkaXYyMDEwICBkaXZpZGUgIC0zLjMwMzIyNjcxNDkwMDcxMUUtMzUgICA4Ljc5NjU3ODg0MjcxMzE4M0UrNzMgICAtPiAgLTMuNzU1MTI2NTk0MDU4NzgzRS0xMDkgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTEgIGRpdmlkZSAgIDkzMzE1MzMyNzgyMTA3My42ICAgICAgIDY4NzgyMTgxMDkwMjQ2LjI1ICAgICAgIC0+ICAgMTMuNTY2Nzg4ODU0NzU3NjMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTIgIGRpdmlkZSAgIDUuMDQ3NTI0MzYwNTc5MDZFLTcyICAgLTguMTc5NDgxNzcxMjM4NjQyRSs2NCAgIC0+ICAtNi4xNzA5NTg2Mjc2MzI4MzVFLTEzNyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxMyAgZGl2aWRlICAtMzcwNzYxMzMwOTU4MjMxOCAgICAgICAgMzM5NDkxMTE5NjUwMy4wNDggICAgICAgLT4gIC0xMDkyLjEwOTA3MDAxMDgzNiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxNCAgZGl2aWRlICAgOTk2ODkuMDU1NTE5MDQ2MSAgICAgICAtNC43MzUyMDg1NTM4OTE0NjQgICAgICAgLT4gIC0yMTA1Mi43Mjc1Mzc2NTQxMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxNSAgZGl2aWRlICAtMTQ0NzkxNTc3NTYxMzMyOSAgICAgICAgMjY5NzUwNzk3LjgxODQ4NzUgICAgICAgLT4gIC01MzY3NjA1LjE2NDkyNTY1MyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxNiAgZGl2aWRlICAtOS4zOTQ4ODEzMDQyMjUyNThFLTE5ICAtODMwNTg1LjAyNTI2NzE2MzYgICAgICAgLT4gICAxLjEzMTExNjE0MzI1MTM1OEUtMjQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTcgIGRpdmlkZSAgLTEuMDU2MjgzNDMyNzM4OTM0ICAgICAgIDg4LjU4NzU0NTU1MTI0MDEzICAgICAgIC0+ICAtMC4wMTE5MjM2MTEwMDE1OTM1MiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxOCAgZGl2aWRlICAgNTc2MzIyMDkzMzM0My4wODEgICAgICAgNjg5MDg5NTY3MDI1MDUyLjEgICAgICAgLT4gICAwLjAwODM2MzUyOTUxNjUyNDQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxOSAgZGl2aWRlICAgODczODE5LjEyMjEwMzIxNiAgICAgICAgOS43NDA2MTI0OTQ1MjMzMDBFLTQ5ICAgLT4gICA4Ljk3MDg4NDc2MzA5Mzk0OEUrNTMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjAgIGRpdmlkZSAgIDgwMjI5MTQuODM4NTMzNTc2ICAgICAgIDYxNzguNTY2ODAxNzQyNzEzICAgICAgIC0+ICAgMTI5OC41MDc0MjAyNDM1ODMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjEgIGRpdmlkZSAgIDIwMzk4Mi43NjA1NjUwMzYzICAgICAgLTIxNTguMjgzNjM5MDUzNDM1ICAgICAgIC0+ICAtOTQuNTExNTYzMjA0MjIxNjggSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjIgIGRpdmlkZSAgIDgwMy42MzEwNTQ3MDEzMDMwICAgICAgIDcxMDExNDM3OTUzOTkuMjM4ICAgICAgIC0+ICAgMS4xMzE2OTI0MTE2MTExNjZFLTEwIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDIzICBkaXZpZGUgICA5LjI1MTY5Nzg0MjEyMzM5OUUtODIgIC0xLjM0MjM1MDIyMDYwNjExOUUtNyAgICAtPiAgLTYuODkyMTYzOTgyMzIxOTM2RS03NSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyNCAgZGl2aWRlICAtMS45ODA2MDA2NDU2Mzc5OTJFLTUzICAtNS40NzQyNjI3NTMyMTQ0NTdFKzc3ICAgLT4gICAzLjYxODAyMjYxNzcwMzE2OEUtMTMxIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDI1ICBkaXZpZGUgIC0yMTAuMDMyMjk5NjM1MTY5MCAgICAgIC04LjU4MDk1MTgzNTg3Mjg0M0UrODAgICAtPiAgIDIuNDQ3NjU3MzY1NDM0OTcxRS03OSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyNiAgZGl2aWRlICAtMS44MjE5ODAzMTQwMjAzNzBFKzg1ICAtMy4wMTg5MTUyNjcxMzgxNjUgICAgICAgLT4gICA2LjAzNTIxNTE0NDUwMzA0MkUrODQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjcgIGRpdmlkZSAgLTc3MjI2NDUwMzYwMS4xMDQ3ICAgICAgIDUuMTU4MjU4MjcxNDA4OTg4RS04NiAgIC0+ICAtMS40OTcxNDE5ODY2MzA2MTRFKzk3IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDI4ICBkaXZpZGUgIC03NjcuMDUzMjQxNTg0NzEwNiAgICAgICAyLjcwMDAyNzIyODAyODkzOUUtNTkgICAtPiAgLTIuODQwOTA5MjgyNzcyOTQxRSs2MSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyOSAgZGl2aWRlICAgNDk2NzI0Ljg1NDgyNTAwOTMgICAgICAgNy4zMjcwMDU4ODE2MzEwMEUrNjYgICAgLT4gICA2Ljc3OTM3MDIyMDkyOTAxM0UtNjIgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzAgIGRpdmlkZSAgLTMwNDIzMjY1MTQ0NzcwMy45ICAgICAgLTEwOC45NzMwODA4NjU3NDQwICAgICAgIC0+ICAgMjc5MTgxNDcyMTg2Mi41NjUgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzEgIGRpdmlkZSAgLTcuMjMzODE3MTkyNjk5NDA1RSs0MiAgLTU3MTEzMDIwMDQuMTQ5NDExICAgICAgIC0+ICAgMS4yNjY1NzkzNTIyMTE0MzBFKzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDMyICBkaXZpZGUgIC05Ljk5OTIyMTQ0NDkxMjc0NUUrOTYgICA0MDEwNTY5NDA2NDQ2MTk3ICAgICAgICAtPiAgLTIuNDkzMjE3NDA0MjAyMjUwRSs4MSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzMyAgZGl2aWRlICAtMTgzNzI3Mi4wNjE5Mzc2MjIgICAgICAgOC4zNTYzMjI4MzgwNjY3NjIgICAgICAgLT4gIC0yMTk4NjYuMDkzOTE5Njg4MiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzNCAgZGl2aWRlICAgMjE2OC41MTc1NTU2MDY1MjkgICAgICAgMjA5LjE5MTAyNTg2MTUwNjEgICAgICAgLT4gICAxMC4zNjYyMDczNzc1Njc4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzNSAgZGl2aWRlICAtMS44ODQzODk3OTA1NzYzNzFFKzg4ICAgMi45NTE4MTk1Mzg3MDU4M0UrMjAgICAgLT4gIC02LjM4MzgyNDUwNTA3OTgyOEUrNjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzYgIGRpdmlkZSAgIDczMjI2My42MDM3NDM4MTk2ICAgICAgIDk2MTIyMi4zNjM0NDQ2ODg5ICAgICAgIC0+ICAgMC43NjE4MDQ1ODUwNjk4MjY5IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDM3ICBkaXZpZGUgIC04MTM0NjE0MTkuMDM0ODMzNiAgICAgICA1LjM3NjI5Mzc1MzgwOTE0M0UrODQgICAtPiAgLTEuNTEzMDUyNDA0Mjg1OTI3RS03NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzOCAgZGl2aWRlICAtNDU1NjIxMzM1MDgxMDguNTAgICAgICAtOS43NzY4NDM0OTQ2OTAxMDdFKzUxICAgLT4gICA0LjY2MDIwODk0NTAyOTUxOUUtMzkgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzkgIGRpdmlkZSAgLTYuNDg5MzkzMTcyNDQxMDE2RSs4MCAgLTkxMDE5NjUuMDk3ODUyMTEzICAgICAgIC0+ICAgNy4xMjk2NjE2NzQ4OTc0MjFFKzczIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQwICBkaXZpZGUgICAzLjY5NDU3NjIzNzExNzM0OUUrOTMgICA2NjgzNTEyLjAxMjYyMjAwMyAgICAgICAtPiAgIDUuNTI3ODk2NDU2NDQzOTEyRSs4NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0MSAgZGl2aWRlICAtMi4yNTI4Nzc3MjY0MDMyNzJFKzE5ICAtNzQ1MTkxMzI1Ni4xODEzNjcgICAgICAgLT4gICAzMDIzMjIwNTQ2LjEyNTUzMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0MiAgZGl2aWRlICAgNTE4MzAzLjE5ODkxMTE4NDIgICAgICAgNTAuMDE1ODcwMjA0NzQxMzMgICAgICAgLT4gICAxMDM2Mi43NzQ3OTEwNzEyMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0MyAgZGl2aWRlICAgMi45MDIwODc4ODE4ODAxMDNFKzI0ICAgMzMuMzI0MDA5OTIzMDU3MDIgICAgICAgLT4gICA4LjcwODY5OTQ4ODk4OTU3OEUrMjIgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDQgIGRpdmlkZSAgIDU0OTYxOS40NTU5NTEwNTU3ICAgICAgIDE2NjA4MjQ4NDUxOTYzMzggICAgICAgIC0+ICAgMy4zMDkzMTYxOTYzNTExMDRFLTEwIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQ1ICBkaXZpZGUgIC02Nzc1NjcwNzc0Njg0MDQzICAgICAgICA4MjkyMTUyMDIzLjA3NzI2MiAgICAgICAtPiAgLTgxNzExOC40OTQxODkxMDYyIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQ2ICBkaXZpZGUgIC03Ny41MDkyMzkyMTUyNDA3OSAgICAgIC01LjYzNjg4MjY1NTQyNTgxNUUrNzQgICAtPiAgIDEuMzc1MDM3MzAyNTg4NDA1RS03MyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0NyAgZGl2aWRlICAtMi45ODQ4ODk0NTk2MDUxNDlFLTEwICAtODgxMDYxNTY3ODQxMjIuOTkgICAgICAgLT4gICAzLjM4NzgzMzAwNTcyMTM4NEUtMjQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDggIGRpdmlkZSAgIDAuOTQ5NTE3MjkzOTk3MDg1ICAgICAgIDQ0NzY3MTE1Ljk2NDUwOTk4ICAgICAgIC0+ICAgMi4xMjEwMTUxMTAxNzU1ODlFLTggSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDkgIGRpdmlkZSAgLTI3NjA5MzcyMTEuMDg0NTIxICAgICAgLTEwODcwMTU4NzY5NzU0MDggICAgICAgIC0+ICAgMC4wMDAwMDI1Mzk5MjM1MzcwNTcwMjQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTAgIGRpdmlkZSAgIDI4NDM4MzUxLjg1MDMwNTM2ICAgICAgLTQuMjA5Mzk3OTA0MDg4NjI0RS00NyAgIC0+ICAtNi43NTU5MTkxMzU3NzA2ODhFKzUzIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDUxICBkaXZpZGUgIC04NTU2MjczMS42ODIwOTU2ICAgICAgIC03LjE2NjA0NTQ0MjUzMDE4NUUrNDUgICAtPiAgIDEuMTk0MDAyMDgwNjIxNTQyRS0zOCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1MiAgZGl2aWRlICAgMjUzMzgwMjg1MjE2NS4yNSAgICAgICAgNzE1NC4xMTk2MDYyMzU5NTUgICAgICAgLT4gICAzNTQxNzM5NTcuMzMxNzUwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1MyAgZGl2aWRlICAtODg1ODgzMTM0Njg1MS40NzQgICAgICAgOTcuNTk3MzQyMDg4MDE3MTYgICAgICAgLT4gIC05MDc2OTE4NjUwOS44MzU3NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1NCAgZGl2aWRlICAgMTc2NzgzNjI5ODAxMzg3LjUgICAgICAgODQwMDczMjYzLjMxMDk4MTcgICAgICAgLT4gICAyMTA0MzguMzQ4MDg0ODIwNiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1NSAgZGl2aWRlICAtNDkzNTA2NDcxNzk2MTc1LjYgICAgICAgNzk3MzM4OTQ3OTA4MjIuMDMgICAgICAgLT4gIC02LjE4OTQxODg1NDk0MDc0NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1NiAgZGl2aWRlICAgNzkwLjE2ODI1NDIxMDM0NDUgICAgICAgODI5Ljk0NDkzNzAzNjc0MzUgICAgICAgLT4gICAwLjk1MjA3MzEwNjIzNzEyMTQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTcgIGRpdmlkZSAgLTg5MjA0NTk4MzguNTgzMTY0ICAgICAgLTQ3NjcuODg5MTg3ODk5MjE0ICAgICAgIC0+ICAgMTg3MDk0NS4yOTQwMzU1ODEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTggIGRpdmlkZSAgIDUzNTM2Njg3MTY0NDIyLjEgICAgICAgIDUzMTM3LjUwMDcwMzI2ODkgICAgICAgIC0+ICAgMTAwNzUxMjMzMC4zODU2OTggSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTkgIGRpdmlkZSAgIDQuMDUxNTMyMzExMTQ2NTYxRS03NCAgLTIuMzQzMDg5NzY4OTcyMjYxRSs5NCAgIC0+ICAtMS43MjkxNDA4ODI2MDYzMzJFLTE2OCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA2MCAgZGl2aWRlICAtMTQ4NDc3NTg3Nzg2MzYuODggICAgICAgMy4wNjI1NDM1MTYzODM4MDdFLTQzICAgLT4gIC00Ljg0ODE3ODg3NDU4NzQ5N0UrNTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIERpdmlzaW9uIHByb2JhYmx5IGhhcyBwcmUtcm91bmRpbmcsIHNvIG5lZWQgdG8gdGVzdCByb3VuZGluZworLS0gZXhwbGljaXRseSByYXRoZXIgdGhhbiBhc3N1bWUgaW5jbHVkZWQgdGhyb3VnaCBvdGhlciB0ZXN0czsKKy0tIHRlc3RzIGluY2x1ZGUgc2ltcGxlIHJvdW5kaW5nIGFuZCBhbHNvIHRoZSB0cmlja3kgY2FzZXMgb2Ygc3RpY2t5CistLSBiaXRzIGZvbGxvd2luZyB0d28gemVyb3MKKy0tCistLSAgIDEvOTk5OTkgZ2l2ZXMgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxCistLSAgICAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorLS0KKy0tICAgMS85OTk5OTkgZ2l2ZXMgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEKKy0tICAgICAgICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKKworcm91bmRpbmc6IGNlaWxpbmcKK2RkZGl2MzAwMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMDIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDAzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDA0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAxIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZmxvb3IKK2RkZGl2MzAxMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMTIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDEzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDE0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogdXAKK2RkZGl2MzAyMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMjIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDIzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDI0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAxIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRkaXYzMDMxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAzMiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMzMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMzQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGRpdjMwNDEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDQyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA0MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA0NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorZGRkaXYzMDUxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA1MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNTMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNTQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkZGl2MzA2MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNjIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDYzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDY0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogMDV1cAorZGRkaXYzMDcxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA3MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNzMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNzQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJhbmRvbSBkaXZpZGUgdGVzdHMgd2l0aCByZXN1bHQgbmVhciAxCityb3VuZGluZzogaGFsZl9ldmVuCitkZGRpdjQwMDEgZGl2aWRlICAzMTk1Mzg1MTkyOTE2OTE3ICAgMzE5NTM4NTE5Mjk0NjY5NSAgLT4gIDAuOTk5OTk5OTk5OTkwNjgwOSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDIgZGl2aWRlICAxMzkzNzIzMDY3NTI2OTkzICAgMTM5MzcyMzA2NzUxOTQ3NSAgLT4gIDEuMDAwMDAwMDAwMDA1Mzk0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwMyBkaXZpZGUgICA3NTk5ODU1NDM3MDIzMDIgICAgNzU5OTg1NTQzNjc0MDE1ICAtPiAgMS4wMDAwMDAwMDAwMzcyMjAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA0IGRpdmlkZSAgOTU3OTE1ODQ1NjAyNzMwMiAgIDk1NzkxNTg0NTYwMzY4NjQgIC0+ICAwLjk5OTk5OTk5OTk5OTAwMTggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA1IGRpdmlkZSAgNzA3OTM5ODI5OTE0MzU2OSAgIDcwNzkzOTgyOTkxNTY5MDQgIC0+ICAwLjk5OTk5OTk5OTk5ODExNjQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA2IGRpdmlkZSAgNjYzNjE2OTI1NTM2NjU5OCAgIDY2MzYxNjkyNTUzMzYzODYgIC0+ICAxLjAwMDAwMDAwMDAwNDU1MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDcgZGl2aWRlICA2OTY0ODEzOTcxMzQwMDkwICAgNjk2NDgxMzk3MTMyMTU1NCAgLT4gIDEuMDAwMDAwMDAwMDAyNjYxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwOCBkaXZpZGUgIDQxODIyNzUyMjU0ODA3ODQgICA0MTgyMjc1MjI1NDU0MDA5ICAtPiAgMS4wMDAwMDAwMDAwMDY0MDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA5IGRpdmlkZSAgOTIyODMyNTEyNDkzODAyOSAgIDkyMjgzMjUxMjQ5MTg3MzAgIC0+ICAxLjAwMDAwMDAwMDAwMjA5MSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTAgZGl2aWRlICAzNDI4MzQ2MzM4NjMwMTkyICAgMzQyODM0NjMzODYwOTg0MyAgLT4gIDEuMDAwMDAwMDAwMDA1OTM2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxMSBkaXZpZGUgIDIxNDM1MTE1NTA3MjI4OTMgICAyMTQzNTExNTUwNzUxNzU0ICAtPiAgMC45OTk5OTk5OTk5ODY1MzU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxMiBkaXZpZGUgIDE2NzI3MzI5MjQzOTY3ODUgICAxNjcyNzMyOTI0NDAxODExICAtPiAgMC45OTk5OTk5OTk5OTY5OTUzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxMyBkaXZpZGUgIDQxOTA3MTQ2MTE5NDgyMTYgICA0MTkwNzE0NjExOTQ4NjY0ICAtPiAgMC45OTk5OTk5OTk5OTk4OTMxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxNCBkaXZpZGUgIDM5NDIyNTQ4MDA4NDg4NzcgICAzOTQyMjU0ODAwODE0NTU2ICAtPiAgMS4wMDAwMDAwMDAwMDg3MDYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE1IGRpdmlkZSAgMjg1NDQ1OTgyNjk1MjMzNCAgIDI4NTQ0NTk4MjY5NjA3NjIgIC0+ICAwLjk5OTk5OTk5OTk5NzA0NzQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE2IGRpdmlkZSAgMjg1MzI1ODk1MzY2NDczMSAgIDI4NTMyNTg5NTM2ODQ0NzEgIC0+ICAwLjk5OTk5OTk5OTk5MzA4MTYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE3IGRpdmlkZSAgOTQ1MzUxMjYzODEyNTk3OCAgIDk0NTM1MTI2MzgxNDY0MjUgIC0+ICAwLjk5OTk5OTk5OTk5NzgzNzEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE4IGRpdmlkZSAgIDMzOTQ3NjYzMzk0MDM2OSAgICAzMzk0NzY2MzM5MTI4ODcgIC0+ICAxLjAwMDAwMDAwMDA4MDk1NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTkgZGl2aWRlICA0NTQyMTgxNDkyNjg4NDY3ICAgNDU0MjE4MTQ5MjY5NzczNSAgLT4gIDAuOTk5OTk5OTk5OTk3OTU5NiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjAgZGl2aWRlICA3MzEyNjAwMTkyMzk5MTk3ICAgNzMxMjYwMDE5MjM5NTQyNCAgLT4gIDEuMDAwMDAwMDAwMDAwNTE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyMSBkaXZpZGUgIDE4MTE2NzQ5ODU1NzAxMTEgICAxODExNjc0OTg1NjAzOTM1ICAtPiAgMC45OTk5OTk5OTk5ODEzMzAwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyMiBkaXZpZGUgIDE3MDY0NjI2MzkwMDM0ODEgICAxNzA2NDYyNjM5MDE3NzQwICAtPiAgMC45OTk5OTk5OTk5OTE2NDQxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyMyBkaXZpZGUgIDY2OTcwNTI2NTQ5NDAzNjggICA2Njk3MDUyNjU0OTM0MTEwICAtPiAgMS4wMDAwMDAwMDAwMDA5MzQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDI0IGRpdmlkZSAgNTAxNTI4MzY2NDI3NzUzOSAgIDUwMTUyODM2NjQzMTA3MTkgIC0+ICAwLjk5OTk5OTk5OTk5MzM4NDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDI1IGRpdmlkZSAgMjM1OTUwMTU2MTUzNzQ2NCAgIDIzNTk1MDE1NjE1MDI0NjQgIC0+ICAxLjAwMDAwMDAwMDAxNDgzNCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjYgZGl2aWRlICAyNjY5ODUwMjI3OTA5MTU3ICAgMjY2OTg1MDIyNzkwMTU0OCAgLT4gIDEuMDAwMDAwMDAwMDAyODUwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyNyBkaXZpZGUgIDkzMjk3MjU1NDY5NzQ2NDggICA5MzI5NzI1NTQ3MDAyNDQ1ICAtPiAgMC45OTk5OTk5OTk5OTcwMjA2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyOCBkaXZpZGUgIDMyMjg1NjI4NjcwNzEyNDggICAzMjI4NTYyODY3MTA2MjA2ICAtPiAgMC45OTk5OTk5OTk5ODkxNzIzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyOSBkaXZpZGUgIDQ4NjIyMjY2NDQ5MjExNzUgICA0ODYyMjI2NjQ0OTA5MzgwICAtPiAgMS4wMDAwMDAwMDAwMDI0MjYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDMwIGRpdmlkZSAgMTAyMjI2Nzk5NzA1NDUyOSAgIDEwMjIyNjc5OTcwNzEzMjkgIC0+ICAwLjk5OTk5OTk5OTk4MzU2NjAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDMxIGRpdmlkZSAgMTA0ODc3NzQ4MjAyMzcxOSAgIDEwNDg3Nzc0ODIwMDA5NDggIC0+ICAxLjAwMDAwMDAwMDAyMTcxMiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzIgZGl2aWRlICA5OTgwMTEzNzc3MzM3MDk4ICAgOTk4MDExMzc3NzMzMDUzOSAgLT4gIDEuMDAwMDAwMDAwMDAwNjU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzMyBkaXZpZGUgIDc1MDY4MzkxNjc5NjM5MDggICA3NTA2ODM5MTY3OTQyOTAxICAtPiAgMS4wMDAwMDAwMDAwMDI3OTggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDM0IGRpdmlkZSAgIDIzMTExOTc1MTk3Nzg2MCAgICAyMzExMTk3NTE5NjI0NTMgIC0+ICAxLjAwMDAwMDAwMDA2NjY2MiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzUgZGl2aWRlICA0MDM0OTAzNjY0NzYyOTYyICAgNDAzNDkwMzY2NDc5NTUyNiAgLT4gIDAuOTk5OTk5OTk5OTkxOTI5NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzYgZGl2aWRlICA1NzAwMTIyMTUyMjc0Njk2ICAgNTcwMDEyMjE1MjI1MTM4NiAgLT4gIDEuMDAwMDAwMDAwMDA0MDg5ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzNyBkaXZpZGUgIDY4Njk1OTk1OTAyOTMxMTAgICA2ODY5NTk5NTkwMjkzNDk1ICAtPiAgMC45OTk5OTk5OTk5OTk5NDQwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzOCBkaXZpZGUgIDU1NzYyODE5NjAwOTI3OTcgICA1NTc2MjgxOTYwMTA1NTc5ICAtPiAgMC45OTk5OTk5OTk5OTc3MDc4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzOSBkaXZpZGUgIDIzMDQ4NDQ4ODgzODEzMTggICAyMzA0ODQ0ODg4MzUzMDczICAtPiAgMS4wMDAwMDAwMDAwMTIyNTUgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQwIGRpdmlkZSAgMzI2NTkzMzY1MTY1NjQ1MiAgIDMyNjU5MzM2NTE2ODI3NzkgIC0+ICAwLjk5OTk5OTk5OTk5MTkzODkgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQxIGRpdmlkZSAgNTIzNTcxNDk4NTA3OTkxNCAgIDUyMzU3MTQ5ODUwNjYxMzEgIC0+ICAxLjAwMDAwMDAwMDAwMjYzMiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDIgZGl2aWRlICA1NTc4NDgxNTcyODI3NTUxICAgNTU3ODQ4MTU3MjgyMjk0NSAgLT4gIDEuMDAwMDAwMDAwMDAwODI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0MyBkaXZpZGUgIDQ5MDk2MTYwODEzOTYxMzQgICA0OTA5NjE2MDgxMzczMDc2ICAtPiAgMS4wMDAwMDAwMDAwMDQ2OTYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQ0IGRpdmlkZSAgIDYzNjQ0NzIyNDM0OTUzNyAgICA2MzY0NDcyMjQzMzg3NTcgIC0+ICAxLjAwMDAwMDAwMDAxNjkzOCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDUgZGl2aWRlICAxNTM5MzczNDI4Mzk2NjQwICAgMTUzOTM3MzQyODM2NDcyNyAgLT4gIDEuMDAwMDAwMDAwMDIwNzMxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0NiBkaXZpZGUgIDIwMjg3ODY3MDczNzc4OTMgICAyMDI4Nzg2NzA3Mzc4ODY2ICAtPiAgMC45OTk5OTk5OTk5OTk1MjA0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0NyBkaXZpZGUgICAxMzc2NDMyNjA0ODYyMjIgICAgMTM3NjQzMjYwNDg3NDE5ICAtPiAgMC45OTk5OTk5OTk5OTEzMDM2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0OCBkaXZpZGUgICAyNDc0NTE1MTk3NDY3NjUgICAgMjQ3NDUxNTE5NzUyMjY3ICAtPiAgMC45OTk5OTk5OTk5Nzc3NjUzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0OSBkaXZpZGUgIDc4Nzc4NTg0NzUwMjIwNTQgICA3ODc3ODU4NDc0OTk5Nzk0ICAtPiAgMS4wMDAwMDAwMDAwMDI4MjYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDUwIGRpdmlkZSAgNzMzMzI0MjY5NDc2NjI1OCAgIDczMzMyNDI2OTQ3NDQ2MjggIC0+ICAxLjAwMDAwMDAwMDAwMjk1MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTEgZGl2aWRlICAgMTI0MDUxNTAzNjk4NTkyICAgIDEyNDA1MTUwMzY5OTM5NyAgLT4gIDAuOTk5OTk5OTk5OTkzNTEwOCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTIgZGl2aWRlICA4OTQ0NzM3NDMyMzg1MTg4ICAgODk0NDczNzQzMjQwNjg2MCAgLT4gIDAuOTk5OTk5OTk5OTk3NTc3MSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTMgZGl2aWRlICA5ODgzOTQ4OTIzNDA2ODc0ICAgOTg4Mzk0ODkyMzQyNDg0MyAgLT4gIDAuOTk5OTk5OTk5OTk4MTgyMCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTQgZGl2aWRlICA2ODI5MTc4NzQxNjU0Mjg0ICAgNjgyOTE3ODc0MTY3MTk3MyAgLT4gIDAuOTk5OTk5OTk5OTk3NDA5OCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTUgZGl2aWRlICA3MzQyNzUyNDc5NzY4MTIyICAgNzM0Mjc1MjQ3OTc5MzM4NSAgLT4gIDAuOTk5OTk5OTk5OTk2NTU5NSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTYgZGl2aWRlICA4MDY2NDI2NTc5MDA4NzgzICAgODA2NjQyNjU3ODk3NzU2MyAgLT4gIDEuMDAwMDAwMDAwMDAzODcwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1NyBkaXZpZGUgIDg5OTI3NzUwNzEzODMyOTUgICA4OTkyNzc1MDcxMzUyNzEyICAtPiAgMS4wMDAwMDAwMDAwMDM0MDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDU4IGRpdmlkZSAgNTQ4NTAxMTc1NTU0NTY0MSAgIDU0ODUwMTE3NTU1NDM2MTEgIC0+ICAxLjAwMDAwMDAwMDAwMDM3MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTkgZGl2aWRlICA1Nzc5OTgzMDU0MzUzOTE4ICAgNTc3OTk4MzA1NDM2NTMwMCAgLT4gIDAuOTk5OTk5OTk5OTk4MDMwOCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjAgZGl2aWRlICA5NTAyMjY1MTAyNzEzNzc0ICAgOTUwMjI2NTEwMjczNTIwOCAgLT4gIDAuOTk5OTk5OTk5OTk3NzQ0MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjEgZGl2aWRlICAyMTA5NTU4Mzk5MTMwOTgxICAgMjEwOTU1ODM5OTExNjI4MSAgLT4gIDEuMDAwMDAwMDAwMDA2OTY4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2MiBkaXZpZGUgIDUyOTYxODI2MzYzNTA0NzEgICA1Mjk2MTgyNjM2MzUxNTIxICAtPiAgMC45OTk5OTk5OTk5OTk4MDE3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2MyBkaXZpZGUgIDE0NDAwMTkyMjU1OTE4ODMgICAxNDQwMDE5MjI1NjAxODQ0ICAtPiAgMC45OTk5OTk5OTk5OTMwODI3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2NCBkaXZpZGUgIDgxODIxMTA3OTE4ODEzNDEgICA4MTgyMTEwNzkxODQ3MTc0ICAtPiAgMS4wMDAwMDAwMDAwMDQxNzYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDY1IGRpdmlkZSAgIDQ4OTA5ODIzNTUxMjA2MCAgICA0ODkwOTgyMzU1MzQ1MTYgIC0+ICAwLjk5OTk5OTk5OTk1NDA4NjkgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDY2IGRpdmlkZSAgNjQ3NTY4NzA4NDc4MjAzOCAgIDY0NzU2ODcwODQ3NTYwODkgIC0+ICAxLjAwMDAwMDAwMDAwNDAwNyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjcgZGl2aWRlICA4MDk0MzQ4NTU1NzM2OTQ4ICAgODA5NDM0ODU1NTc1OTIzNiAgLT4gIDAuOTk5OTk5OTk5OTk3MjQ2NSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjggZGl2aWRlICAxOTgyNzY2ODE2MjkxNTQzICAgMTk4Mjc2NjgxNjMwOTQ2MyAgLT4gIDAuOTk5OTk5OTk5OTkwOTYyMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjkgZGl2aWRlICA5Mjc3MzE0MzAwMTEzMjUxICAgOTI3NzMxNDMwMDA4NDQ2NyAgLT4gIDEuMDAwMDAwMDAwMDAzMTAzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3MCBkaXZpZGUgIDQzMzU1MzI5NTkzMTg5MzQgICA0MzM1NTMyOTU5MjkzMTY3ICAtPiAgMS4wMDAwMDAwMDAwMDU5NDMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDcxIGRpdmlkZSAgNzc2NzExMzAzMjk4MTM0OCAgIDc3NjcxMTMwMzI5NjgxMzIgIC0+ICAxLjAwMDAwMDAwMDAwMTcwMiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzIgZGl2aWRlICAxNTc4NTQ4MDUzMzQyODY4ICAgMTU3ODU0ODA1MzM3MDQ0OCAgLT4gIDAuOTk5OTk5OTk5OTgyNTI4MiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzMgZGl2aWRlICAzNzkwNDIwNjg2NjY2ODk4ICAgMzc5MDQyMDY4NjYzNjMxNSAgLT4gIDEuMDAwMDAwMDAwMDA4MDY4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3NCBkaXZpZGUgICA4NzE2ODI0MjE5NTUxNDcgICAgODcxNjgyNDIxOTc2NDQxICAtPiAgMC45OTk5OTk5OTk5NzU1NzE0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3NSBkaXZpZGUgICA3NDQxNDEwNTQ0Nzk5NDAgICAgNzQ0MTQxMDU0NTEyMzI5ICAtPiAgMC45OTk5OTk5OTk5NTY0NzQ2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3NiBkaXZpZGUgIDg5NTY4MjQxODM2NzA3MzUgICA4OTU2ODI0MTgzNjQxNzQxICAtPiAgMS4wMDAwMDAwMDAwMDMyMzcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDc3IGRpdmlkZSAgODMzNzI5MTY5NDQ4NTY4MiAgIDgzMzcyOTE2OTQ0NTExOTMgIC0+ICAxLjAwMDAwMDAwMDAwNDEzNyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzggZGl2aWRlICA0MTA3Nzc1OTQ0NjgzNjY5ICAgNDEwNzc3NTk0NDY1NzA5NyAgLT4gIDEuMDAwMDAwMDAwMDA2NDY5ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3OSBkaXZpZGUgIDg2OTE5MDAwNTc5NjQ2NDggICA4NjkxOTAwMDU3OTk3NTU1ICAtPiAgMC45OTk5OTk5OTk5OTYyMTQxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4MCBkaXZpZGUgIDIyMjk1Mjg1MjA1MzY0NjIgICAyMjI5NTI4NTIwNTAyMzM3ICAtPiAgMS4wMDAwMDAwMDAwMTUzMDYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDgxIGRpdmlkZSAgIDM5ODQ0MjA4Mzc3NDMyMiAgICAzOTg0NDIwODM3NDYyNzMgIC0+ICAxLjAwMDAwMDAwMDA3MDM5NyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODIgZGl2aWRlICA1MzE5ODE5Nzc2ODA4NzU5ICAgNTMxOTgxOTc3NjgzODMxMyAgLT4gIDAuOTk5OTk5OTk5OTk0NDQ0NSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODMgZGl2aWRlICA3NzEwNDkxMjk5MDY2ODU1ICAgNzcxMDQ5MTI5OTA0MTg1OCAgLT4gIDEuMDAwMDAwMDAwMDAzMjQyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4NCBkaXZpZGUgIDkwODMyMzEyOTYwODcyNjYgICA5MDgzMjMxMjk2MDU4MTYwICAtPiAgMS4wMDAwMDAwMDAwMDMyMDQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDg1IGRpdmlkZSAgMzU2Njg3MzU3NDkwNDU1OSAgIDM1NjY4NzM1NzQ4OTAzMjggIC0+ICAxLjAwMDAwMDAwMDAwMzk5MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODYgZGl2aWRlICAgNTk2MzQzMjkwNTUwNTI1ICAgIDU5NjM0MzI5MDU1NTYxNCAgLT4gIDAuOTk5OTk5OTk5OTkxNDY2MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODcgZGl2aWRlICAgMjc4MjI3OTI1MDkzMTkyICAgIDI3ODIyNzkyNTA2ODEwNCAgLT4gIDEuMDAwMDAwMDAwMDkwMTcxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4OCBkaXZpZGUgIDMyOTI5MDI5NTg0OTA2NDkgICAzMjkyOTAyOTU4NTE5ODgxICAtPiAgMC45OTk5OTk5OTk5OTExMjI3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4OSBkaXZpZGUgIDU1MjE4NzEzNjQyNDU4ODEgICA1NTIxODcxMzY0MjI5NTM2ICAtPiAgMS4wMDAwMDAwMDAwMDI5NjAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDkwIGRpdmlkZSAgMjQwNjUwNTYwMjg4MzYxNyAgIDI0MDY1MDU2MDI4NTc5OTcgIC0+ICAxLjAwMDAwMDAwMDAxMDY0NiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTEgZGl2aWRlICA3NzQxMTQ2OTg0ODY5MjA4ICAgNzc0MTE0Njk4NDg2NzI1NSAgLT4gIDEuMDAwMDAwMDAwMDAwMjUyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5MiBkaXZpZGUgIDQ1NzYwNDE4MzI0MTQ5MDkgICA0NTc2MDQxODMyNDA1MTAyICAtPiAgMS4wMDAwMDAwMDAwMDIxNDMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDkzIGRpdmlkZSAgOTE4Mzc1Njk4Mjg3ODA1NyAgIDkxODM3NTY5ODI5MDE5MzQgIC0+ICAwLjk5OTk5OTk5OTk5NzQwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk0IGRpdmlkZSAgNjIxNTczNjUxMzg1NTE1OSAgIDYyMTU3MzY1MTM4NzAzNDIgIC0+ICAwLjk5OTk5OTk5OTk5NzU1NzMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk1IGRpdmlkZSAgIDI0ODU1NDk2ODUzNDUzMyAgICAyNDg1NTQ5Njg1NTE0MTcgIC0+ICAwLjk5OTk5OTk5OTkzMjA3MTQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk2IGRpdmlkZSAgIDM3NjMxNDE2NTY2ODY0NSAgICAzNzYzMTQxNjU2NTk3NTUgIC0+ICAxLjAwMDAwMDAwMDAyMzYyNCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTcgZGl2aWRlICA1NTEzNTY5MjQ5ODA5NzE4ICAgNTUxMzU2OTI0OTgwODkwNiAgLT4gIDEuMDAwMDAwMDAwMDAwMTQ3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5OCBkaXZpZGUgIDMzNjc5OTIyNDIxNjc5MDQgICAzMzY3OTkyMjQyMTU2MjI4ICAtPiAgMS4wMDAwMDAwMDAwMDM0NjcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk5IGRpdmlkZSAgNjEzNDg2OTUzODk2Njk2NyAgIDYxMzQ4Njk1Mzg5ODU5ODYgIC0+ICAwLjk5OTk5OTk5OTk5Njg5OTkgIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCitkZGRpdjk5OTggZGl2aWRlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY5OTk5IGRpdmlkZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZUludC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZUludC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzU2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRGl2aWRlSW50LmRlY1Rlc3QKQEAgLTAsMCArMSw0NDkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGREaXZpZGVJbnQuZGVjVGVzdCAtLSBkZWNEb3VibGUgaW50ZWdlciBkaXZpc2lvbiAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRkdmkwMDEgZGl2aWRlaW50ICAxICAgICAxICAgIC0+ICAxCitkZGR2aTAwMiBkaXZpZGVpbnQgIDIgICAgIDEgICAgLT4gIDIKK2RkZHZpMDAzIGRpdmlkZWludCAgMSAgICAgMiAgICAtPiAgMAorZGRkdmkwMDQgZGl2aWRlaW50ICAyICAgICAyICAgIC0+ICAxCitkZGR2aTAwNSBkaXZpZGVpbnQgIDAgICAgIDEgICAgLT4gIDAKK2RkZHZpMDA2IGRpdmlkZWludCAgMCAgICAgMiAgICAtPiAgMAorZGRkdmkwMDcgZGl2aWRlaW50ICAxICAgICAzICAgIC0+ICAwCitkZGR2aTAwOCBkaXZpZGVpbnQgIDIgICAgIDMgICAgLT4gIDAKK2RkZHZpMDA5IGRpdmlkZWludCAgMyAgICAgMyAgICAtPiAgMQorCitkZGR2aTAxMCBkaXZpZGVpbnQgIDIuNCAgIDEgICAgLT4gIDIKK2RkZHZpMDExIGRpdmlkZWludCAgMi40ICAgLTEgICAtPiAgLTIKK2RkZHZpMDEyIGRpdmlkZWludCAgLTIuNCAgMSAgICAtPiAgLTIKK2RkZHZpMDEzIGRpdmlkZWludCAgLTIuNCAgLTEgICAtPiAgMgorZGRkdmkwMTQgZGl2aWRlaW50ICAyLjQwICAxICAgIC0+ICAyCitkZGR2aTAxNSBkaXZpZGVpbnQgIDIuNDAwIDEgICAgLT4gIDIKK2RkZHZpMDE2IGRpdmlkZWludCAgMi40ICAgMiAgICAtPiAgMQorZGRkdmkwMTcgZGl2aWRlaW50ICAyLjQwMCAyICAgIC0+ICAxCitkZGR2aTAxOCBkaXZpZGVpbnQgIDIuICAgIDIgICAgLT4gIDEKK2RkZHZpMDE5IGRpdmlkZWludCAgMjAgICAgMjAgICAtPiAgMQorCitkZGR2aTAyMCBkaXZpZGVpbnQgIDE4NyAgIDE4NyAgLT4gIDEKK2RkZHZpMDIxIGRpdmlkZWludCAgNSAgICAgMiAgICAtPiAgMgorZGRkdmkwMjIgZGl2aWRlaW50ICA1ICAgICAyLjAgICAgLT4gIDIKK2RkZHZpMDIzIGRpdmlkZWludCAgNSAgICAgMi4wMDAgIC0+ICAyCitkZGR2aTAyNCBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKK2RkZHZpMDI1IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQorCitkZGR2aTAzMCBkaXZpZGVpbnQgIDEgICAgIDIgICAgICAtPiAgMAorZGRkdmkwMzEgZGl2aWRlaW50ICAxICAgICA0ICAgICAgLT4gIDAKK2RkZHZpMDMyIGRpdmlkZWludCAgMSAgICAgOCAgICAgIC0+ICAwCitkZGR2aTAzMyBkaXZpZGVpbnQgIDEgICAgIDE2ICAgICAtPiAgMAorZGRkdmkwMzQgZGl2aWRlaW50ICAxICAgICAzMiAgICAgLT4gIDAKK2RkZHZpMDM1IGRpdmlkZWludCAgMSAgICAgNjQgICAgIC0+ICAwCitkZGR2aTA0MCBkaXZpZGVpbnQgIDEgICAgLTIgICAgICAtPiAtMAorZGRkdmkwNDEgZGl2aWRlaW50ICAxICAgIC00ICAgICAgLT4gLTAKK2RkZHZpMDQyIGRpdmlkZWludCAgMSAgICAtOCAgICAgIC0+IC0wCitkZGR2aTA0MyBkaXZpZGVpbnQgIDEgICAgLTE2ICAgICAtPiAtMAorZGRkdmkwNDQgZGl2aWRlaW50ICAxICAgIC0zMiAgICAgLT4gLTAKK2RkZHZpMDQ1IGRpdmlkZWludCAgMSAgICAtNjQgICAgIC0+IC0wCitkZGR2aTA1MCBkaXZpZGVpbnQgLTEgICAgIDIgICAgICAtPiAtMAorZGRkdmkwNTEgZGl2aWRlaW50IC0xICAgICA0ICAgICAgLT4gLTAKK2RkZHZpMDUyIGRpdmlkZWludCAtMSAgICAgOCAgICAgIC0+IC0wCitkZGR2aTA1MyBkaXZpZGVpbnQgLTEgICAgIDE2ICAgICAtPiAtMAorZGRkdmkwNTQgZGl2aWRlaW50IC0xICAgICAzMiAgICAgLT4gLTAKK2RkZHZpMDU1IGRpdmlkZWludCAtMSAgICAgNjQgICAgIC0+IC0wCitkZGR2aTA2MCBkaXZpZGVpbnQgLTEgICAgLTIgICAgICAtPiAgMAorZGRkdmkwNjEgZGl2aWRlaW50IC0xICAgIC00ICAgICAgLT4gIDAKK2RkZHZpMDYyIGRpdmlkZWludCAtMSAgICAtOCAgICAgIC0+ICAwCitkZGR2aTA2MyBkaXZpZGVpbnQgLTEgICAgLTE2ICAgICAtPiAgMAorZGRkdmkwNjQgZGl2aWRlaW50IC0xICAgIC0zMiAgICAgLT4gIDAKK2RkZHZpMDY1IGRpdmlkZWludCAtMSAgICAtNjQgICAgIC0+ICAwCisKKy0tIHNpbWlsYXIgd2l0aCBwb3dlcnMgb2YgdGVuCitkZGR2aTE2MCBkaXZpZGVpbnQgIDEgICAgIDEgICAgICAgICAtPiAgMQorZGRkdmkxNjEgZGl2aWRlaW50ICAxICAgICAxMCAgICAgICAgLT4gIDAKK2RkZHZpMTYyIGRpdmlkZWludCAgMSAgICAgMTAwICAgICAgIC0+ICAwCitkZGR2aTE2MyBkaXZpZGVpbnQgIDEgICAgIDEwMDAgICAgICAtPiAgMAorZGRkdmkxNjQgZGl2aWRlaW50ICAxICAgICAxMDAwMCAgICAgLT4gIDAKK2RkZHZpMTY1IGRpdmlkZWludCAgMSAgICAgMTAwMDAwICAgIC0+ICAwCitkZGR2aTE2NiBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAgICAtPiAgMAorZGRkdmkxNjcgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMCAgLT4gIDAKK2RkZHZpMTY4IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAwIC0+ICAwCitkZGR2aTE3MCBkaXZpZGVpbnQgIDEgICAgLTEgICAgICAgICAtPiAtMQorZGRkdmkxNzEgZGl2aWRlaW50ICAxICAgIC0xMCAgICAgICAgLT4gLTAKK2RkZHZpMTcyIGRpdmlkZWludCAgMSAgICAtMTAwICAgICAgIC0+IC0wCitkZGR2aTE3MyBkaXZpZGVpbnQgIDEgICAgLTEwMDAgICAgICAtPiAtMAorZGRkdmkxNzQgZGl2aWRlaW50ICAxICAgIC0xMDAwMCAgICAgLT4gLTAKK2RkZHZpMTc1IGRpdmlkZWludCAgMSAgICAtMTAwMDAwICAgIC0+IC0wCitkZGR2aTE3NiBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAgICAtPiAtMAorZGRkdmkxNzcgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMCAgLT4gLTAKK2RkZHZpMTc4IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAwIC0+IC0wCitkZGR2aTE4MCBkaXZpZGVpbnQgLTEgICAgIDEgICAgICAgICAtPiAtMQorZGRkdmkxODEgZGl2aWRlaW50IC0xICAgICAxMCAgICAgICAgLT4gLTAKK2RkZHZpMTgyIGRpdmlkZWludCAtMSAgICAgMTAwICAgICAgIC0+IC0wCitkZGR2aTE4MyBkaXZpZGVpbnQgLTEgICAgIDEwMDAgICAgICAtPiAtMAorZGRkdmkxODQgZGl2aWRlaW50IC0xICAgICAxMDAwMCAgICAgLT4gLTAKK2RkZHZpMTg1IGRpdmlkZWludCAtMSAgICAgMTAwMDAwICAgIC0+IC0wCitkZGR2aTE4NiBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAgICAtPiAtMAorZGRkdmkxODcgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMCAgLT4gLTAKK2RkZHZpMTg4IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAwIC0+IC0wCitkZGR2aTE5MCBkaXZpZGVpbnQgLTEgICAgLTEgICAgICAgICAtPiAgMQorZGRkdmkxOTEgZGl2aWRlaW50IC0xICAgIC0xMCAgICAgICAgLT4gIDAKK2RkZHZpMTkyIGRpdmlkZWludCAtMSAgICAtMTAwICAgICAgIC0+ICAwCitkZGR2aTE5MyBkaXZpZGVpbnQgLTEgICAgLTEwMDAgICAgICAtPiAgMAorZGRkdmkxOTQgZGl2aWRlaW50IC0xICAgIC0xMDAwMCAgICAgLT4gIDAKK2RkZHZpMTk1IGRpdmlkZWludCAtMSAgICAtMTAwMDAwICAgIC0+ICAwCitkZGR2aTE5NiBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAgICAtPiAgMAorZGRkdmkxOTcgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMCAgLT4gIDAKK2RkZHZpMTk4IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAwIC0+ICAwCisKKy0tIHNvbWUgbG9uZyBvcGVyYW5kIChhdCBwPTkpIGNhc2VzCitkZGR2aTA3MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OQorZGRkdmkwNzEgZGl2aWRlaW50ICA5OTk5OTk5OTkuNCAgIDEgIC0+ICA5OTk5OTk5OTkKK2RkZHZpMDcyIGRpdmlkZWludCAgOTk5OTk5OTk5LjUgICAxICAtPiAgOTk5OTk5OTk5CitkZGR2aTA3MyBkaXZpZGVpbnQgIDk5OTk5OTk5OS45ICAgMSAgLT4gIDk5OTk5OTk5OQorZGRkdmkwNzQgZGl2aWRlaW50ICA5OTk5OTk5OTkuOTk5IDEgIC0+ICA5OTk5OTk5OTkKKworZGRkdmkwOTAgZGl2aWRlaW50ICAwLiAgICAgICAgICAgIDEgICAgLT4gIDAKK2RkZHZpMDkxIGRpdmlkZWludCAgLjAgICAgICAgICAgICAxICAgIC0+ICAwCitkZGR2aTA5MiBkaXZpZGVpbnQgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMAorZGRkdmkwOTMgZGl2aWRlaW50ICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDAKK2RkZHZpMDk0IGRpdmlkZWludCAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwCisKK2RkZHZpMTAwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2RkZHZpMTAxIGRpdmlkZWludCAgMSAgMiAgIC0+IDAKK2RkZHZpMTAyIGRpdmlkZWludCAgMSAgMyAgIC0+IDAKK2RkZHZpMTAzIGRpdmlkZWludCAgMSAgNCAgIC0+IDAKK2RkZHZpMTA0IGRpdmlkZWludCAgMSAgNSAgIC0+IDAKK2RkZHZpMTA1IGRpdmlkZWludCAgMSAgNiAgIC0+IDAKK2RkZHZpMTA2IGRpdmlkZWludCAgMSAgNyAgIC0+IDAKK2RkZHZpMTA3IGRpdmlkZWludCAgMSAgOCAgIC0+IDAKK2RkZHZpMTA4IGRpdmlkZWludCAgMSAgOSAgIC0+IDAKK2RkZHZpMTA5IGRpdmlkZWludCAgMSAgMTAgIC0+IDAKK2RkZHZpMTEwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2RkZHZpMTExIGRpdmlkZWludCAgMiAgMSAgIC0+IDIKK2RkZHZpMTEyIGRpdmlkZWludCAgMyAgMSAgIC0+IDMKK2RkZHZpMTEzIGRpdmlkZWludCAgNCAgMSAgIC0+IDQKK2RkZHZpMTE0IGRpdmlkZWludCAgNSAgMSAgIC0+IDUKK2RkZHZpMTE1IGRpdmlkZWludCAgNiAgMSAgIC0+IDYKK2RkZHZpMTE2IGRpdmlkZWludCAgNyAgMSAgIC0+IDcKK2RkZHZpMTE3IGRpdmlkZWludCAgOCAgMSAgIC0+IDgKK2RkZHZpMTE4IGRpdmlkZWludCAgOSAgMSAgIC0+IDkKK2RkZHZpMTE5IGRpdmlkZWludCAgMTAgMSAgIC0+IDEwCisKKy0tIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2RkZHZpMTMxIGRpdmlkZWludCAgMTAxLjMgICAxICAgICAtPiAgMTAxCitkZGR2aTEzMiBkaXZpZGVpbnQgIDEwMS4wICAgMSAgICAgLT4gIDEwMQorZGRkdmkxMzMgZGl2aWRlaW50ICAxMDEuMyAgIDMgICAgIC0+ICAzMworZGRkdmkxMzQgZGl2aWRlaW50ICAxMDEuMCAgIDMgICAgIC0+ICAzMworZGRkdmkxMzUgZGl2aWRlaW50ICAyLjQgICAgIDEgICAgIC0+ICAyCitkZGR2aTEzNiBkaXZpZGVpbnQgIDIuNDAwICAgMSAgICAgLT4gIDIKK2RkZHZpMTM3IGRpdmlkZWludCAgMTggICAgICAxOCAgICAtPiAgMQorZGRkdmkxMzggZGl2aWRlaW50ICAxMTIwICAgIDEwMDAgIC0+ICAxCitkZGR2aTEzOSBkaXZpZGVpbnQgIDIuNCAgICAgMiAgICAgLT4gIDEKK2RkZHZpMTQwIGRpdmlkZWludCAgMi40MDAgICAyICAgICAtPiAgMQorZGRkdmkxNDEgZGl2aWRlaW50ICAwLjUgICAgIDIuMDAwIC0+ICAwCitkZGR2aTE0MiBkaXZpZGVpbnQgIDguMDA1ICAgNyAgICAgLT4gIDEKK2RkZHZpMTQzIGRpdmlkZWludCAgNSAgICAgICAyICAgICAtPiAgMgorZGRkdmkxNDQgZGl2aWRlaW50ICAwICAgICAgIDIgICAgIC0+ICAwCitkZGR2aTE0NSBkaXZpZGVpbnQgIDAuMDAgICAgMiAgICAgLT4gIDAKKworLS0gT3RoZXJzCitkZGR2aTE1MCBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkKK2RkZHZpMTUxIGRpdmlkZWludCAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3MworZGRkdmkxNTIgZGl2aWRlaW50ICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5CitkZGR2aTE1MyBkaXZpZGVpbnQgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkKK2RkZHZpMTU0IGRpdmlkZWludCAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMAorZGRkdmkxNTUgZGl2aWRlaW50ICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0CitkZGR2aTE1NiBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjgKK2RkZHZpMTU3IGRpdmlkZWludCAgICAxMDEgIDcuNiAgICAtPiAgMTMKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGVpbnQgYnkgMAorZGRkdmkyMDEgZGl2aWRlaW50ICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZHZpMjAyIGRpdmlkZWludCAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTIwMyBkaXZpZGVpbnQgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkdmkyMDQgZGl2aWRlaW50ICAwLjAwMDEgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjA1IGRpdmlkZWludCAgMC4wMSAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIwNiBkaXZpZGVpbnQgIDAuMSAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMDcgZGl2aWRlaW50ICAxICAgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjA4IGRpdmlkZWludCAgMSAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIwOSBkaXZpZGVpbnQgMTAgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMTAgZGl2aWRlaW50IDFFKzEwMCAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjExIGRpdmlkZWludCAxRSszODAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxNCBkaXZpZGVpbnQgIC0wLjAwMDEgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxNSBkaXZpZGVpbnQgIC0wLjAxICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxNiBkaXZpZGVpbnQgIC0wLjEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxNyBkaXZpZGVpbnQgIC0xICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxOCBkaXZpZGVpbnQgIC0xICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxOSBkaXZpZGVpbnQgLTEwICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIyMCBkaXZpZGVpbnQgLTFFKzEwMCAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIyMSBkaXZpZGVpbnQgLTFFKzM4MCAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworZGRkdmkyNzAgZGl2aWRlaW50IDEgMWUzODQgICAgICAgICAgLT4gMAorZGRkdmkyNzEgZGl2aWRlaW50IDEgMC45ZTM4NCAgICAgICAgLT4gMAorZGRkdmkyNzIgZGl2aWRlaW50IDEgMC45OWUzODQgICAgICAgLT4gMAorZGRkdmkyNzMgZGl2aWRlaW50IDEgMC45OTk5OTk5OTk5OTk5OTk5ZTM4NCAgICAgICAtPiAwCitkZGR2aTI3NCBkaXZpZGVpbnQgOWUzODQgICAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkyNzUgZGl2aWRlaW50IDkuOWUzODQgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjc2IGRpdmlkZWludCA5Ljk5ZTM4NCAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTI3NyBkaXZpZGVpbnQgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworZGRkdmkyODAgZGl2aWRlaW50IDAuMSA5ZS0zODMgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjgxIGRpdmlkZWludCAwLjEgOTllLTM4MyAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTI4MiBkaXZpZGVpbnQgMC4xIDk5OWUtMzgzICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkyODMgZGl2aWRlaW50IDAuMSA5ZS0zODIgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjg0IGRpdmlkZWludCAwLjEgOTllLTM4MiAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIEdEIGVkZ2UgY2FzZXM6IGxocyBzbWFsbGVyIHRoYW4gcmhzIGJ1dCBtb3JlIGRpZ2l0cworZGRkdmkzMDEgIGRpdmlkZWludCAgMC45ICAgICAgMiAgICAgIC0+ICAwCitkZGR2aTMwMiAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAgICAgLT4gIDAKK2RkZHZpMzAzICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMSAgICAtPiAgMAorZGRkdmkzMDQgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMCAgIC0+ICAwCitkZGR2aTMwNSAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAxICAgLT4gIDAKK2RkZHZpMzA2ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEgICAgICAtPiAgMAorZGRkdmkzMDcgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwCitkZGR2aTMwOCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDAKK2RkZHZpMzA5ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAorZGRkdmkzMTAgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCitkZGR2aTMxMSAgZGl2aWRlaW50ICAwLjEyICAgICAyICAgICAgLT4gIDAKK2RkZHZpMzEyICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMCAgICAtPiAgMAorZGRkdmkzMTMgIGRpdmlkZWludCAgMC4xMiAgICAgMi4xICAgIC0+ICAwCitkZGR2aTMxNCAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAwICAgLT4gIDAKK2RkZHZpMzE1ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDEgICAtPiAgMAorCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKK2RkZHZpMzMwICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+ICAxMjM0NTY3ODkwMTIzNDUKK2RkZHZpMzMxICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAxICAgIC0+ICAxMjM0NTY3ODkwMTIzNDU2CitkZGR2aTMzMiAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMzMzICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK2RkZHZpMTA1MSBkaXZpZGVpbnQgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkxMDUyIGRpdmlkZWludCAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTEwNTMgZGl2aWRlaW50IC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMTA1NCBkaXZpZGVpbnQgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkxMDU1IGRpdmlkZWludCAgMWUtMjc3ICAxZSszMTEgLT4gIDAKK2RkZHZpMTA1NiBkaXZpZGVpbnQgIDFlLTI3NyAtMWUrMzExIC0+IC0wCitkZGR2aTEwNTcgZGl2aWRlaW50IC0xZS0yNzcgIDFlKzMxMSAtPiAtMAorZGRkdmkxMDU4IGRpdmlkZWludCAtMWUtMjc3IC0xZSszMTEgLT4gIDAKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkZGR2aTEwNjAgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDEgLT4gMAorZGRkdmkxMDYxIGRpdmlkZWludCAxZS0yOTEgMWUrMTAyIC0+IDAKK2RkZHZpMTA2MiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMyAtPiAwCitkZGR2aTEwNjMgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDQgLT4gMAorZGRkdmkxMDY0IGRpdmlkZWludCAxZS0yOTEgMWUrMTA1IC0+IDAKK2RkZHZpMTA2NSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNiAtPiAwCitkZGR2aTEwNjYgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDcgLT4gMAorZGRkdmkxMDY3IGRpdmlkZWludCAxZS0yOTEgMWUrMTA4IC0+IDAKK2RkZHZpMTA2OCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOSAtPiAwCitkZGR2aTEwNjkgZGl2aWRlaW50IDFlLTI5MSAxZSsxMTAgLT4gMAorCitkZGR2aTExMDEgZGl2aWRlaW50ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMAorZGRkdmkxMTAyIGRpdmlkZWludCAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDAKK2RkZHZpMTEwMyBkaXZpZGVpbnQgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAwCisKK2RkZHZpMTExOCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAwCitkZGR2aTExMTkgZGl2aWRlaW50ICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTAKK2RkZHZpMTEyMCBkaXZpZGVpbnQgIDVFLTM5NCAgICAgICAxZSs1ICAtPiAwCisKK2RkZHZpMTEyNCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMAorZGRkdmkxMTMwIGRpdmlkZWludCAgMy4wRS0zOTQgICAgLTFlKzUgIC0+IC0wCisKK2RkZHZpMTEzMSBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMAorZGRkdmkxMTMyIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OSAtPiAwCitkZGR2aTExMzMgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk4IC0+IDAKK2RkZHZpMTEzNCBkaXZpZGVpbnQgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMAorZGRkdmkxMTM1IGRpdmlkZWludCAgNC4wRS0xOTkgICAgIDRlKzE5OCAtPiAwCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RkZHZpNDAxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxMDAgLT4gMTIzNDU2NzgwCitkZGR2aTQwMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAgIC0+IDAKK2RkZHZpNDAzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxMCAgLT4gMTIzNDU2NzgwCitkZGR2aTQwNCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAgIC0+IDAKK2RkZHZpNDA1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxMCAgLT4gMTIzNDU2Nzg5CitkZGR2aTQwNiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAgIC0+IDAKK2RkZHZpNDA3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxMCAgLT4gMTIzNDU2Nzg5CitkZGR2aTQwOCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAgIC0+IDAKK2RkZHZpNDA5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxMDAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxMCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAgIC0+IDAKK2RkZHZpNDExIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxMCAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAgIC0+IDAKK2RkZHZpNDEzIGRpdmlkZWludCAxMjM0NTY3ODk0OCAxMDAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxNCBkaXZpZGVpbnQgMTIzNDU2Nzg5NDkgMTAwIC0+IDEyMzQ1Njc4OQorZGRkdmk0MTUgZGl2aWRlaW50IDEyMzQ1Njc4OTUwIDEwMCAtPiAxMjM0NTY3ODkKK2RkZHZpNDE2IGRpdmlkZWludCAxMjM0NTY3ODk1MSAxMDAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxNyBkaXZpZGVpbnQgMTIzNDU2Nzg5OTkgMTAwIC0+IDEyMzQ1Njc4OQorZGRkdmk0NDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKK2RkZHZpNDQyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwIC0+IDAKK2RkZHZpNDQzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKK2RkZHZpNDQ0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgIC0+IDAKK2RkZHZpNDQ1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK2RkZHZpNDQ2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgIC0+IDAKK2RkZHZpNDQ3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKK2RkZHZpNDQ4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgIC0+IDAKK2RkZHZpNDQ5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCitkZGR2aTQ1MCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAtPiAwCitkZGR2aTQ1MSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2CitkZGR2aTQ1MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAtPiAwCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK2RkZHZpNTMxIGRpdmlkZWludCA1LjAwIDFFLTMgICAgLT4gNTAwMAorZGRkdmk1MzIgZGl2aWRlaW50IDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTUzMyBkaXZpZGVpbnQgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZHZpNTM0IGRpdmlkZWludCAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkdmk1MzUgZGl2aWRlaW50IC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTUzNiBkaXZpZGVpbnQgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKworZGRkdmk1NDEgZGl2aWRlaW50ICAwICAgIC0xICAgICAtPiAtMAorZGRkdmk1NDIgZGl2aWRlaW50IC0wICAgIC0xICAgICAtPiAgMAorZGRkdmk1NDMgZGl2aWRlaW50ICAwICAgICAxICAgICAtPiAgMAorZGRkdmk1NDQgZGl2aWRlaW50IC0wICAgICAxICAgICAtPiAtMAorZGRkdmk1NDUgZGl2aWRlaW50IC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NDYgZGl2aWRlaW50IC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NDcgZGl2aWRlaW50ICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NDggZGl2aWRlaW50ICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGR2aTU1MSBkaXZpZGVpbnQgIDAuMCAgLTEgICAgIC0+IC0wCitkZGR2aTU1MiBkaXZpZGVpbnQgLTAuMCAgLTEgICAgIC0+ICAwCitkZGR2aTU1MyBkaXZpZGVpbnQgIDAuMCAgIDEgICAgIC0+ICAwCitkZGR2aTU1NCBkaXZpZGVpbnQgLTAuMCAgIDEgICAgIC0+IC0wCitkZGR2aTU1NSBkaXZpZGVpbnQgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU1NiBkaXZpZGVpbnQgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU1NyBkaXZpZGVpbnQgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU1OCBkaXZpZGVpbnQgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZHZpNTYxIGRpdmlkZWludCAgMCAgICAtMS4wICAgLT4gLTAKK2RkZHZpNTYyIGRpdmlkZWludCAtMCAgICAtMS4wICAgLT4gIDAKK2RkZHZpNTYzIGRpdmlkZWludCAgMCAgICAgMS4wICAgLT4gIDAKK2RkZHZpNTY0IGRpdmlkZWludCAtMCAgICAgMS4wICAgLT4gLTAKK2RkZHZpNTY1IGRpdmlkZWludCAtMSAgICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTY2IGRpdmlkZWludCAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTY3IGRpdmlkZWludCAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTY4IGRpdmlkZWludCAgMSAgICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkdmk1NzEgZGl2aWRlaW50ICAwLjAgIC0xLjAgICAtPiAtMAorZGRkdmk1NzIgZGl2aWRlaW50IC0wLjAgIC0xLjAgICAtPiAgMAorZGRkdmk1NzMgZGl2aWRlaW50ICAwLjAgICAxLjAgICAtPiAgMAorZGRkdmk1NzQgZGl2aWRlaW50IC0wLjAgICAxLjAgICAtPiAtMAorZGRkdmk1NzUgZGl2aWRlaW50IC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NzYgZGl2aWRlaW50IC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NzcgZGl2aWRlaW50ICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NzggZGl2aWRlaW50ICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBTcGVjaWFscworZGRkdmk1ODAgZGl2aWRlaW50ICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTU4MSBkaXZpZGVpbnQgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRkdmk1ODIgZGl2aWRlaW50ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RkZHZpNTgzIGRpdmlkZWludCAgSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZGR2aTU4NCBkaXZpZGVpbnQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRkdmk1ODUgZGl2aWRlaW50ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkZHZpNTg2IGRpdmlkZWludCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZGR2aTU4NyBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNTg4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTAKK2RkZHZpNTg5IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk1OTAgZGl2aWRlaW50IC0xICAgICBJbmYgICAtPiAtMAorZGRkdmk1OTEgZGl2aWRlaW50IC0wICAgICBJbmYgICAtPiAtMAorZGRkdmk1OTIgZGl2aWRlaW50ICAwICAgICBJbmYgICAtPiAgMAorZGRkdmk1OTMgZGl2aWRlaW50ICAxICAgICBJbmYgICAtPiAgMAorZGRkdmk1OTQgZGl2aWRlaW50ICAxMDAwICBJbmYgICAtPiAgMAorZGRkdmk1OTUgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkZHZpNjAwIGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2MDEgZGl2aWRlaW50IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RkZHZpNjAyIGRpdmlkZWludCAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkZGR2aTYwMyBkaXZpZGVpbnQgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZGRkdmk2MDQgZGl2aWRlaW50IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RkZHZpNjA1IGRpdmlkZWludCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZGR2aTYwNiBkaXZpZGVpbnQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRkdmk2MDcgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTYwOCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wCitkZGR2aTYwOSBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjEwIGRpdmlkZWludCAtMSAgICAtSW5mICAgLT4gIDAKK2RkZHZpNjExIGRpdmlkZWludCAtMCAgICAtSW5mICAgLT4gIDAKK2RkZHZpNjEyIGRpdmlkZWludCAgMCAgICAtSW5mICAgLT4gLTAKK2RkZHZpNjEzIGRpdmlkZWludCAgMSAgICAtSW5mICAgLT4gLTAKK2RkZHZpNjE0IGRpdmlkZWludCAgMTAwMCAtSW5mICAgLT4gLTAKK2RkZHZpNjE1IGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZGR2aTYyMSBkaXZpZGVpbnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkZHZpNjIyIGRpdmlkZWludCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRkdmk2MjMgZGl2aWRlaW50ICBOYU4gLTEgICAgICAtPiAgTmFOCitkZGR2aTYyNCBkaXZpZGVpbnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkZHZpNjI1IGRpdmlkZWludCAgTmFOICAwICAgICAgLT4gIE5hTgorZGRkdmk2MjYgZGl2aWRlaW50ICBOYU4gIDEgICAgICAtPiAgTmFOCitkZGR2aTYyNyBkaXZpZGVpbnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkZHZpNjI4IGRpdmlkZWludCAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRkdmk2MjkgZGl2aWRlaW50ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzMCBkaXZpZGVpbnQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjMxIGRpdmlkZWludCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzIgZGl2aWRlaW50IC0xICAgIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzMyBkaXZpZGVpbnQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjM0IGRpdmlkZWludCAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzUgZGl2aWRlaW50ICAxICAgIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzNiBkaXZpZGVpbnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjM3IGRpdmlkZWludCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZGR2aTY0MSBkaXZpZGVpbnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0MiBkaXZpZGVpbnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0MyBkaXZpZGVpbnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0NCBkaXZpZGVpbnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0NSBkaXZpZGVpbnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0NiBkaXZpZGVpbnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0NyBkaXZpZGVpbnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0OCBkaXZpZGVpbnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0OSBkaXZpZGVpbnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1MCBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1MSBkaXZpZGVpbnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1MiBkaXZpZGVpbnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1MyBkaXZpZGVpbnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1NCBkaXZpZGVpbnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1NSBkaXZpZGVpbnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1NiBkaXZpZGVpbnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1NyBkaXZpZGVpbnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1OCBkaXZpZGVpbnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1OSBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkZHZpNjYxIGRpdmlkZWludCAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RkZHZpNjYyIGRpdmlkZWludCAgTmFOOCAgMTAwMCAgLT4gIE5hTjgKK2RkZHZpNjYzIGRpdmlkZWludCAgTmFONyAgSW5mICAgLT4gIE5hTjcKK2RkZHZpNjY0IGRpdmlkZWludCAtTmFONiAgTmFONSAgLT4gLU5hTjYKK2RkZHZpNjY1IGRpdmlkZWludCAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RkZHZpNjY2IGRpdmlkZWludCAtMTAwMCAgTmFOMyAgLT4gIE5hTjMKK2RkZHZpNjY3IGRpdmlkZWludCAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZGRkdmk2NzEgZGl2aWRlaW50IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjcyIGRpdmlkZWludCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3MyBkaXZpZGVpbnQgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzQgZGl2aWRlaW50ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjc1IGRpdmlkZWludCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3NiBkaXZpZGVpbnQgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzcgZGl2aWRlaW50ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjc4IGRpdmlkZWludCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3OSBkaXZpZGVpbnQgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitkZGR2aTkwMCBkaXZpZGVpbnQgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk5MDEgZGl2aWRlaW50ICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRFbmNvZGUuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRFbmNvZGUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTlkMzFjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEVuY29kZS5kZWNUZXN0CkBAIC0wLDAgKzEsNDk1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkRW5jb2RlLmRlY1Rlc3QgLS0gZGVjaW1hbCBlaWdodC1ieXRlIGZvcm1hdCB0ZXN0Y2FzZXMgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDAsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFtQcmV2aW91c2x5IGNhbGxlZCBkZWNpbWFsNjQuZGVjVGVzdF0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIHRoZSBlaWdodC1ieXRlIGNvbmNyZXRlIHJlcHJlc2VudGF0aW9uLgorLS0gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmU6CistLQorLS0gIDEgYml0ICBzaWduCistLSAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkCistLSAgOCBiaXRzIGV4cG9uZW50IGNvbnRpbnVhdGlvbgorLS0gNTAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24KKy0tCistLSBUb3RhbCBleHBvbmVudCBsZW5ndGggMTAgYml0cworLS0gVG90YWwgY29lZmZpY2llbnQgbGVuZ3RoIDU0IGJpdHMgKDE2IGRpZ2l0cykKKy0tCistLSBFbGltaXQgPSAgNzY3IChtYXhpbXVtIGVuY29kZWQgZXhwb25lbnQpCistLSBFbWF4ICAgPSAgMzg0IChsYXJnZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gRW1pbiAgID0gLTM4MyAoc21hbGxlc3QgZXhwb25lbnQgdmFsdWUpCistLSBiaWFzICAgPSAgMzk4IChzdWJ0cmFjdGVkIGZyb20gZW5jb2RlZCBleHBvbmVudCkgPSAtRXRpbnkKKworLS0gVGhlIHRlc3RjYXNlcyBoZXJlIGhhdmUgb25seSBleGFjdGx5IHJlcHJlc2VudGFibGUgZGF0YSBvbiB0aGUKKy0tICdsZWZ0LWhhbmQtc2lkZSc7IHJvdW5kaW5nIGZyb20gc3RyaW5ncyBpcyB0ZXN0ZWQgaW4gJ2Jhc2UnCistLSB0ZXN0Y2FzZSBncm91cHMuCisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworLS0gR2VuZXJhbCB0ZXN0Y2FzZXMKKy0tIChtb3N0bHkgZGVyaXZlZCBmcm9tIHRoZSBTdHJhd21hbiA0IGRvY3VtZW50IGFuZCBleGFtcGxlcykKK2RlY2UwMDEgYXBwbHkgICAjQTIzMDAwMDAwMDAwMDNEMCAtPiAtNy41MAorZGVjZTAwMiBhcHBseSAgIC03LjUwICAgICAgICAgICAgIC0+ICNBMjMwMDAwMDAwMDAwM0QwCistLSBkZXJpdmF0aXZlIGNhbm9uaWNhbCBwbGFpbiBzdHJpbmdzCitkZWNlMDAzIGFwcGx5ICAgI0EyM2MwMDAwMDAwMDAzRDAgLT4gLTcuNTBFKzMKK2RlY2UwMDQgYXBwbHkgICAtNy41MEUrMyAgICAgICAgICAtPiAjQTIzYzAwMDAwMDAwMDNEMAorZGVjZTAwNSBhcHBseSAgICNBMjM4MDAwMDAwMDAwM0QwIC0+IC03NTAKK2RlY2UwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTIzODAwMDAwMDAwMDNEMAorZGVjZTAwNyBhcHBseSAgICNBMjM0MDAwMDAwMDAwM0QwIC0+IC03NS4wCitkZWNlMDA4IGFwcGx5ICAgLTc1LjAgICAgICAgICAgICAgLT4gI0EyMzQwMDAwMDAwMDAzRDAKK2RlY2UwMDkgYXBwbHkgICAjQTIyYzAwMDAwMDAwMDNEMCAtPiAtMC43NTAKK2RlY2UwMTAgYXBwbHkgICAtMC43NTAgICAgICAgICAgICAtPiAjQTIyYzAwMDAwMDAwMDNEMAorZGVjZTAxMSBhcHBseSAgICNBMjI4MDAwMDAwMDAwM0QwIC0+IC0wLjA3NTAKK2RlY2UwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIyODAwMDAwMDAwMDNEMAorZGVjZTAxMyBhcHBseSAgICNBMjIwMDAwMDAwMDAwM0QwIC0+IC0wLjAwMDc1MAorZGVjZTAxNCBhcHBseSAgIC0wLjAwMDc1MCAgICAgICAgIC0+ICNBMjIwMDAwMDAwMDAwM0QwCitkZWNlMDE1IGFwcGx5ICAgI0EyMTgwMDAwMDAwMDAzRDAgLT4gLTAuMDAwMDA3NTAKK2RlY2UwMTYgYXBwbHkgICAtMC4wMDAwMDc1MCAgICAgICAtPiAjQTIxODAwMDAwMDAwMDNEMAorZGVjZTAxNyBhcHBseSAgICNBMjE0MDAwMDAwMDAwM0QwIC0+IC03LjUwRS03CitkZWNlMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0EyMTQwMDAwMDAwMDAzRDAKKworLS0gTm9ybWFsaXR5CitkZWNlMDIwIGFwcGx5ICAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+ICMyNjM5MzRiOWMxZTI4ZTU2CitkZWNlMDIxIGFwcGx5ICAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+ICNhNjM5MzRiOWMxZTI4ZTU2CitkZWNlMDIyIGFwcGx5ICAgMTIzNC41Njc4OTAxMjM0NTYgIC0+ICMyNjA5MzRiOWMxZTI4ZTU2CitkZWNlMDIzIGFwcGx5ICAjMjYwOTM0YjljMWUyOGU1NiAgIC0+IDEyMzQuNTY3ODkwMTIzNDU2CitkZWNlMDI0IGFwcGx5ICAgMTExMTExMTExMTExMTExMSAgIC0+ICMyNjM4OTEyNDQ5MTI0NDkxCitkZWNlMDI1IGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OSAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCisKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY2UwMzEgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGVjZTAzMiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZWNlMDMzIGFwcGx5ICAgIzc3ZmNmZjNmY2ZmM2ZjZmYgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGVjZTAzNCBhcHBseSAgIDEuMjM0NTY3ODkwMTIzNDU2RSszODQgIC0+ICM0N2ZkMzRiOWMxZTI4ZTU2CitkZWNlMDM1IGFwcGx5ICAgIzQ3ZmQzNGI5YzFlMjhlNTYgICAgICAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NAorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY2UwMzYgYXBwbHkgICAxLjIzRSszODQgICAgICAgICAgICAgICAtPiAjNDdmZDMwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNlMDM3IGFwcGx5ICAgIzQ3ZmQzMDAwMDAwMDAwMDAgICAgICAgLT4gMS4yMzAwMDAwMDAwMDAwMDBFKzM4NAorZGVjZDAzOCBhcHBseSAgIDFFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM0N2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2QwMzkgYXBwbHkgICAjNDdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0CisKK2RlY2QwNTEgYXBwbHkgICAxMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwNDljNQorZGVjZDA1MiBhcHBseSAgICMyMjM4MDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMzQ1CitkZWNkMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDA1MzQKK2RlY2QwNTQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDUzNCAgICAgICAtPiAxMjM0CitkZWNkMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwYTMKK2RlY2QwNTYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBhMyAgICAgICAtPiAxMjMKK2RlY2QwNTcgYXBwbHkgICAxMiAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAxMgorZGVjZDA1OCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDEyICAgICAgIC0+IDEyCitkZWNkMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMDEKK2RlY2QwNjAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAwMSAgICAgICAtPiAxCitkZWNkMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDAwYTMKK2RlY2QwNjIgYXBwbHkgICAjMjIzMDAwMDAwMDAwMDBhMyAgICAgICAtPiAxLjIzCitkZWNkMDYzIGFwcGx5ICAgMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDQ5YzUKK2RlY2QwNjQgYXBwbHkgICAjMjIzMDAwMDAwMDAwNDljNSAgICAgICAtPiAxMjMuNDUKKworLS0gTm1pbiBhbmQgYmVsb3cKK2RlY2QwNzEgYXBwbHkgICAxRS0zODMgICAgICAgICAgICAgICAgICAtPiAjMDAzYzAwMDAwMDAwMDAwMQorZGVjZDA3MiBhcHBseSAgICMwMDNjMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM4MworZGVjZDA3MyBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwNDAwMDAwMDAwMDAwMDAwCitkZWNkMDc0IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGVjZDA3NSBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICMwNDAwMDAwMDAwMDAwMDAxCitkZWNkMDc2IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworCitkZWNkMDc3IGFwcGx5ICAgMC4xMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzAwMDA4MDAwMDAwMDAwMDAgICAgICBTdWJub3JtYWwKK2RlY2QwNzggYXBwbHkgICAjMDAwMDgwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgIFN1Ym5vcm1hbAorZGVjZDA3OSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDEwICAgICAgU3Vibm9ybWFsCitkZWNkMDgwIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMTAgICAgICAgLT4gMS4wRS0zOTcgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY2QwODEgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAxRS0zODMgICAtPiAjMDAwNDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAorZGVjZDA4MiBhcHBseSAgICMwMDA0MDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM5NyAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNkMDgzIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDFFLTM4MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwKK2RlY2QwODQgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRS0zOTggICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyBzbWFsbGVzdCBhbGwtbmluZXMKK2RlY2QwODUgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5RS0zOTggICAtPiAjNjQwMGZmM2ZjZmYzZmNmZgorZGVjZDA4NiBhcHBseSAgICM2NDAwZmYzZmNmZjNmY2ZmICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS0zODMKKy0tIGFuZCBhIHByb2JsZW1hdGljIGRpdmlkZSByZXN1bHQKK2RlY2QwODggYXBwbHkgICAxLjExMTExMTExMTExMTExMUUtMzgzICAtPiAjMDQwMDkxMjQ0OTEyNDQ5MQorZGVjZDA4OSBhcHBseSAgICMwNDAwOTEyNDQ5MTI0NDkxICAgICAgIC0+IDEuMTExMTExMTExMTExMTExRS0zODMKKworLS0gZm9ydGllcworZGVjZDA5MCBhcHBseSAgICAgICAgNDAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwNDAKK2RlY2QwOTEgYXBwbHkgICAgICAgIDM5Ljk5ICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwY2ZmCisKKy0tIHVuZGVyZmxvd3MgY2Fubm90IGJlIHRlc3RlZCBhcyBhbGwgTEhTIGV4YWN0CisKKy0tIFNhbWUgYWdhaW4sIG5lZ2F0aXZlcworLS0gTm1heCBhbmQgc2ltaWxhcgorZGVjZDEyMiBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmCitkZWNkMTIzIGFwcGx5ICAgI2Y3ZmNmZjNmY2ZmM2ZjZmYgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RlY2QxMjQgYXBwbHkgIC0xLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0ICAtPiAjYzdmZDM0YjljMWUyOGU1NgorZGVjZDEyNSBhcHBseSAgICNjN2ZkMzRiOWMxZTI4ZTU2ICAgICAgIC0+IC0xLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0CistLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQorZGVjZDEzMCBhcHBseSAgLTEuMjNFKzM4NCAgICAgICAgICAgICAgIC0+ICNjN2ZkMzAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2QxMzEgYXBwbHkgICAjYzdmZDMwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4yMzAwMDAwMDAwMDAwMDBFKzM4NAorZGVjZDEzMiBhcHBseSAgLTFFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICNjN2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2QxMzMgYXBwbHkgICAjYzdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorCistLSBvdmVyZmxvd3MKK2RlY2QxNTEgYXBwbHkgIC0xMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwNDljNQorZGVjZDE1MiBhcHBseSAgICNhMjM4MDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjM0NQorZGVjZDE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwNTM0CitkZWNkMTU0IGFwcGx5ICAgI2EyMzgwMDAwMDAwMDA1MzQgICAgICAgLT4gLTEyMzQKK2RlY2QxNTUgYXBwbHkgIC0xMjMgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDBhMworZGVjZDE1NiBhcHBseSAgICNhMjM4MDAwMDAwMDAwMGEzICAgICAgIC0+IC0xMjMKK2RlY2QxNTcgYXBwbHkgIC0xMiAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAxMgorZGVjZDE1OCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDEyICAgICAgIC0+IC0xMgorZGVjZDE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDAxCitkZWNkMTYwIGFwcGx5ICAgI2EyMzgwMDAwMDAwMDAwMDEgICAgICAgLT4gLTEKK2RlY2QxNjEgYXBwbHkgIC0xLjIzICAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwMDBhMworZGVjZDE2MiBhcHBseSAgICNhMjMwMDAwMDAwMDAwMGEzICAgICAgIC0+IC0xLjIzCitkZWNkMTYzIGFwcGx5ICAtMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gI2EyMzAwMDAwMDAwMDQ5YzUKK2RlY2QxNjQgYXBwbHkgICAjYTIzMDAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitkZWNkMTcxIGFwcGx5ICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIzgwM2MwMDAwMDAwMDAwMDEKK2RlY2QxNzIgYXBwbHkgICAjODAzYzAwMDAwMDAwMDAwMSAgICAgICAtPiAtMUUtMzgzCitkZWNkMTczIGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzg0MDAwMDAwMDAwMDAwMDAKK2RlY2QxNzQgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGVjZDE3NSBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICM4NDAwMDAwMDAwMDAwMDAxCitkZWNkMTc2IGFwcGx5ICAgIzg0MDAwMDAwMDAwMDAwMDEgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMKKworZGVjZDE3NyBhcHBseSAgLTAuMTAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICM4MDAwODAwMDAwMDAwMDAwICAgICAgIFN1Ym5vcm1hbAorZGVjZDE3OCBhcHBseSAgICM4MDAwODAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQgIFN1Ym5vcm1hbAorZGVjZDE3OSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+ICM4MDAwMDAwMDAwMDAwMDEwICAgICAgIFN1Ym5vcm1hbAorZGVjZDE4MCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IC0xLjBFLTM5NyAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGVjZDE4MSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDFFLTM4MyAgIC0+ICM4MDA0MDAwMDAwMDAwMDAxICAgICAgIFN1Ym5vcm1hbAorZGVjZDE4MiBhcHBseSAgICM4MDA0MDAwMDAwMDAwMDAxICAgICAgIC0+IC0xRS0zOTcgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGVjZDE4MyBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICAgICAgIFN1Ym5vcm1hbAorZGVjZDE4NCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyBzbWFsbGVzdCBhbGwtbmluZXMKK2RlY2QxODUgYXBwbHkgICAtOTk5OTk5OTk5OTk5OTk5OUUtMzk4ICAgLT4gI2U0MDBmZjNmY2ZmM2ZjZmYKK2RlY2QxODYgYXBwbHkgICAjZTQwMGZmM2ZjZmYzZmNmZiAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTM4MworLS0gYW5kIGEgdHJpY2t5IHN1Ym5vcm1hbAorZGVjZDE4NyBhcHBseSAgIDEuMTExMTExMTExMTE1MjRFLTM4NCAgICAtPiAjMDAwMDkxMjQ0OTEyNDZhNCAgICAgIFN1Ym5vcm1hbAorZGVjZDE4OCBhcHBseSAgICMwMDAwOTEyNDQ5MTI0NmE0ICAgICAgICAtPiAxLjExMTExMTExMTExNTI0RS0zODQgIFN1Ym5vcm1hbAorCistLSBuZWFyLXVuZGVyZmxvd3MKK2RlY2QxODkgYXBwbHkgICAtMWUtMzk4ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsCitkZWNkMTkwIGFwcGx5ICAgLTEuMGUtMzk4ICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBSb3VuZGVkCisKKy0tIHplcm9zCitkZWNkNDAxIGFwcGx5ICAgMEUtNTAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MDIgYXBwbHkgICAwRS00MDAgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQwMyBhcHBseSAgIDBFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwCitkZWNkNDA0IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUtMzk4CitkZWNkNDA1IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAKK2RlY2Q0MDYgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS0zOTgKK2RlY2Q0MDcgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDAwMAorZGVjZDQwOCBhcHBseSAgICMyMjMwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAuMDAKK2RlY2Q0MDkgYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMAorZGVjZDQxMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDAwICAgICAgIC0+IDAKK2RlY2Q0MTEgYXBwbHkgICAwRSszICAgICAgICAgICAgICAgICAgICAtPiAjMjI0NDAwMDAwMDAwMDAwMAorZGVjZDQxMiBhcHBseSAgICMyMjQ0MDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzMKK2RlY2Q0MTMgYXBwbHkgICAwRSszNjkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMAorZGVjZDQxNCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQorLS0gY2xhbXBlZCB6ZXJvcy4uLgorZGVjZDQxNSBhcHBseSAgIDBFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDE2IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5CitkZWNkNDE3IGFwcGx5ICAgMEUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MTggYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkKK2RlY2Q0MTkgYXBwbHkgICAwRSs0MDAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQyMCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQorZGVjZDQyMSBhcHBseSAgIDBFKzUwMCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDIyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5CisKKy0tIG5lZ2F0aXZlIHplcm9zCitkZWNkNDMxIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MzIgYXBwbHkgICAtMEUtNDAwICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQzMyBhcHBseSAgIC0wRS0zOTggICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwCitkZWNkNDM0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTM5OAorZGVjZDQzNSBhcHBseSAgIC0wLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0+ICM4MDAwMDAwMDAwMDAwMDAwCitkZWNkNDM2IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTM5OAorZGVjZDQzNyBhcHBseSAgIC0wRS0yICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMDAwMDAwMDAwCitkZWNkNDM4IGFwcGx5ICAgI2EyMzAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTAuMDAKK2RlY2Q0MzkgYXBwbHkgICAtMCAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMAorZGVjZDQ0MCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDAwICAgICAgIC0+IC0wCitkZWNkNDQxIGFwcGx5ICAgLTBFKzMgICAgICAgICAgICAgICAgICAgLT4gI2EyNDQwMDAwMDAwMDAwMDAKK2RlY2Q0NDIgYXBwbHkgICAjYTI0NDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMworZGVjZDQ0MyBhcHBseSAgIC0wRSszNjkgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwCitkZWNkNDQ0IGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQorLS0gY2xhbXBlZCB6ZXJvcy4uLgorZGVjZDQ0NSBhcHBseSAgIC0wRSszNzAgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDQ2IGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQorZGVjZDQ0NyBhcHBseSAgIC0wRSszODQgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDQ4IGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQorZGVjZDQ0OSBhcHBseSAgIC0wRSs0MDAgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDUwIGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQorZGVjZDQ1MSBhcHBseSAgIC0wRSs1MDAgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDUyIGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQorCistLSBleHBvbmVudHMKK2RlY2Q0NjAgYXBwbHkgICAjMjI1YzAwMDAwMDAwMDAwNyAtPiA3RSs5CitkZWNkNDYxIGFwcGx5ICAgN0UrOSAgLT4gIzIyNWMwMDAwMDAwMDAwMDcKK2RlY2Q0NjIgYXBwbHkgICAjMjNjNDAwMDAwMDAwMDAwNyAtPiA3RSs5OQorZGVjZDQ2MyBhcHBseSAgIDdFKzk5IC0+ICMyM2M0MDAwMDAwMDAwMDA3CisKKy0tIFNwZWNpYWxzCitkZWNkNTAwIGFwcGx5ICAgSW5maW5pdHkgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MDEgYXBwbHkgICAjNzg3ODc4Nzg3ODc4Nzg3OCAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGVjZDUwMiBhcHBseSAgICM3ODAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CitkZWNkNTAzIGFwcGx5ICAgIzc5Nzk3OTc5Nzk3OTc5NzkgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MDQgYXBwbHkgICAjNzkwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorZGVjZDUwNSBhcHBseSAgICM3YTdhN2E3YTdhN2E3YTdhIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZWNkNTA2IGFwcGx5ICAgIzdhMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKK2RlY2Q1MDcgYXBwbHkgICAjN2I3YjdiN2I3YjdiN2I3YiAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGVjZDUwOCBhcHBseSAgICM3YjAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CisKK2RlY2Q1MDkgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMAorZGVjZDUxMCBhcHBseSAgICM3YzdjN2M3YzdjN2M3YzdjIC0+ICM3YzAwN2M3YzdjN2M3YzdjCitkZWNkNTExIGFwcGx5ICAgIzdjMDAwMDAwMDAwMDAwMDAgLT4gTmFOCitkZWNkNTEyIGFwcGx5ICAgIzdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gIzdjMDE3ZDdkN2Q3ZDdkN2QKK2RlY2Q1MTMgYXBwbHkgICAjN2QwMDAwMDAwMDAwMDAwMCAtPiBOYU4KK2RlY2Q1MTQgYXBwbHkgICAjN2U3ZTdlN2U3ZTdlN2U3ZSAtPiAjN2UwMDdlN2U3ZTdlN2M3ZQorZGVjZDUxNSBhcHBseSAgICM3ZTAwMDAwMDAwMDAwMDAwIC0+IHNOYU4KK2RlY2Q1MTYgYXBwbHkgICAjN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjN2UwMDdmN2Y3ZjdmN2M3ZgorZGVjZDUxNyBhcHBseSAgICM3ZjAwMDAwMDAwMDAwMDAwIC0+IHNOYU4KK2RlY2Q1MTggYXBwbHkgICAjN2ZmZmZmZmZmZmZmZmZmZiAtPiBzTmFOOTk5OTk5OTk5OTk5OTk5CitkZWNkNTE5IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmYgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKKworZGVjZDUyMCBhcHBseSAgIC1JbmZpbml0eSAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZWNkNTIxIGFwcGx5ICAgI2Y4Nzg3ODc4Nzg3ODc4NzggLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MjIgYXBwbHkgICAjZjgwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY2Q1MjMgYXBwbHkgICAjZjk3OTc5Nzk3OTc5Nzk3OSAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGVjZDUyNCBhcHBseSAgICNmOTAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjZDUyNSBhcHBseSAgICNmYTdhN2E3YTdhN2E3YTdhIC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZWNkNTI2IGFwcGx5ICAgI2ZhMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CitkZWNkNTI3IGFwcGx5ICAgI2ZiN2I3YjdiN2I3YjdiN2IgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MjggYXBwbHkgICAjZmIwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKKworZGVjZDUyOSBhcHBseSAgIC1OYU4gICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwCitkZWNkNTMwIGFwcGx5ICAgI2ZjN2M3YzdjN2M3YzdjN2MgLT4gI2ZjMDA3YzdjN2M3YzdjN2MKK2RlY2Q1MzEgYXBwbHkgICAjZmMwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCitkZWNkNTMyIGFwcGx5ICAgI2ZkN2Q3ZDdkN2Q3ZDdkN2QgLT4gI2ZjMDE3ZDdkN2Q3ZDdkN2QKK2RlY2Q1MzMgYXBwbHkgICAjZmQwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCitkZWNkNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlN2U3ZTdlN2UgLT4gI2ZlMDA3ZTdlN2U3ZTdjN2UKK2RlY2Q1MzUgYXBwbHkgICAjZmUwMDAwMDAwMDAwMDAwMCAtPiAtc05hTgorZGVjZDUzNiBhcHBseSAgICNmZjdmN2Y3ZjdmN2Y3ZjdmIC0+ICNmZTAwN2Y3ZjdmN2Y3YzdmCitkZWNkNTM3IGFwcGx5ICAgI2ZmMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4KK2RlY2Q1MzggYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZiAtPiAtc05hTjk5OTk5OTk5OTk5OTk5OQorZGVjZDUzOSBhcHBseSAgICNmZmZmZmZmZmZmZmZmZmZmIC0+ICNmZTAwZmYzZmNmZjNmY2ZmCisKKy0tIGRpYWdub3N0aWMgTmFOcworZGVjZDU0MCBhcHBseSAgIE5hTiAgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAKK2RlY2Q1NDEgYXBwbHkgICBOYU4wICAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwCitkZWNkNTQyIGFwcGx5ICAgTmFOMSAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMQorZGVjZDU0MyBhcHBseSAgIE5hTjEyICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMTIKK2RlY2Q1NDQgYXBwbHkgICBOYU43OSAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDc5CitkZWNkNTQ1IGFwcGx5ICAgTmFOMTIzNDUgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwNDljNQorZGVjZDU0NiBhcHBseSAgIE5hTjEyMzQ1NiAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMjhlNTYKK2RlY2Q1NDcgYXBwbHkgICBOYU43OTk3OTkgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMGY3ZmRmCitkZWNkNTQ4IGFwcGx5ICAgTmFONzk5Nzk5Nzk5Nzk5Nzk5ICAtPiAjN2MwM2RmZjdmZGZmN2ZkZgorZGVjZDU0OSBhcHBseSAgIE5hTjk5OTk5OTk5OTk5OTk5OSAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKKy0tIHRvbyBtYW55IGRpZ2l0cworCistLSBmb2xkLWRvd24gZnVsbCBzZXF1ZW5jZQorZGVjZDYwMSBhcHBseSAgIDFFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM0N2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2MDIgYXBwbHkgICAjNDdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0CitkZWNkNjAzIGFwcGx5ICAgMUUrMzgzICAgICAgICAgICAgICAgICAgLT4gIzQzZmM4MDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDYwNCBhcHBseSAgICM0M2ZjODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4MworZGVjZDYwNSBhcHBseSAgIDFFKzM4MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMTAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2MDYgYXBwbHkgICAjNDNmYzEwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MgorZGVjZDYwNyBhcHBseSAgIDFFKzM4MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDEwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2MDggYXBwbHkgICAjNDNmYzAxMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxCitkZWNkNjA5IGFwcGx5ICAgMUUrMzgwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDIwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDYxMCBhcHBseSAgICM0M2ZjMDAyMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDBFKzM4MAorZGVjZDYxMSBhcHBseSAgIDFFKzM3OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwNDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2MTIgYXBwbHkgICAjNDNmYzAwMDQwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDBFKzM3OQorZGVjZDYxMyBhcHBseSAgIDFFKzM3OCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDQwMDAwMDAwIENsYW1wZWQKK2RlY2Q2MTQgYXBwbHkgICAjNDNmYzAwMDA0MDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMEUrMzc4CitkZWNkNjE1IGFwcGx5ICAgMUUrMzc3ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDgwMDAwMDAgQ2xhbXBlZAorZGVjZDYxNiBhcHBseSAgICM0M2ZjMDAwMDA4MDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDBFKzM3NworZGVjZDYxNyBhcHBseSAgIDFFKzM3NiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAxMDAwMDAwIENsYW1wZWQKK2RlY2Q2MTggYXBwbHkgICAjNDNmYzAwMDAwMTAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDBFKzM3NgorZGVjZDYxOSBhcHBseSAgIDFFKzM3NSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMTAwMDAwIENsYW1wZWQKK2RlY2Q2MjAgYXBwbHkgICAjNDNmYzAwMDAwMDEwMDAwMCAgICAgICAtPiAxLjAwMDAwMEUrMzc1CitkZWNkNjIxIGFwcGx5ICAgMUUrMzc0ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMjAwMDAgQ2xhbXBlZAorZGVjZDYyMiBhcHBseSAgICM0M2ZjMDAwMDAwMDIwMDAwICAgICAgIC0+IDEuMDAwMDBFKzM3NAorZGVjZDYyMyBhcHBseSAgIDFFKzM3MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDA0MDAwIENsYW1wZWQKK2RlY2Q2MjQgYXBwbHkgICAjNDNmYzAwMDAwMDAwNDAwMCAgICAgICAtPiAxLjAwMDBFKzM3MworZGVjZDYyNSBhcHBseSAgIDFFKzM3MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwNDAwIENsYW1wZWQKK2RlY2Q2MjYgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDQwMCAgICAgICAtPiAxLjAwMEUrMzcyCitkZWNkNjI3IGFwcGx5ICAgMUUrMzcxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwODAgQ2xhbXBlZAorZGVjZDYyOCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDgwICAgICAgIC0+IDEuMDBFKzM3MQorZGVjZDYyOSBhcHBseSAgIDFFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDEwIENsYW1wZWQKK2RlY2Q2MzAgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAxMCAgICAgICAtPiAxLjBFKzM3MAorZGVjZDYzMSBhcHBseSAgIDFFKzM2OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAxCitkZWNkNjMyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrMzY5CitkZWNkNjMzIGFwcGx5ICAgMUUrMzY4ICAgICAgICAgICAgICAgICAgLT4gIzQzZjgwMDAwMDAwMDAwMDEKK2RlY2Q2MzQgYXBwbHkgICAjNDNmODAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSszNjgKKy0tIHNhbWUgd2l0aCA5cworZGVjZDY0MSBhcHBseSAgIDlFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM3N2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2NDIgYXBwbHkgICAjNzdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0CitkZWNkNjQzIGFwcGx5ICAgOUUrMzgzICAgICAgICAgICAgICAgICAgLT4gIzQzZmM4YzAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDY0NCBhcHBseSAgICM0M2ZjOGMwMDAwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDBFKzM4MworZGVjZDY0NSBhcHBseSAgIDlFKzM4MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMWEwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2NDYgYXBwbHkgICAjNDNmYzFhMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDBFKzM4MgorZGVjZDY0NyBhcHBseSAgIDlFKzM4MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDkwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2NDggYXBwbHkgICAjNDNmYzA5MDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMEUrMzgxCitkZWNkNjQ5IGFwcGx5ICAgOUUrMzgwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDIzMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDY1MCBhcHBseSAgICM0M2ZjMDAyMzAwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMDBFKzM4MAorZGVjZDY1MSBhcHBseSAgIDlFKzM3OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwNjgwMDAwMDAwIENsYW1wZWQKK2RlY2Q2NTIgYXBwbHkgICAjNDNmYzAwMDY4MDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDBFKzM3OQorZGVjZDY1MyBhcHBseSAgIDlFKzM3OCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMjQwMDAwMDAwIENsYW1wZWQKK2RlY2Q2NTQgYXBwbHkgICAjNDNmYzAwMDI0MDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMEUrMzc4CitkZWNkNjU1IGFwcGx5ICAgOUUrMzc3ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDhjMDAwMDAgQ2xhbXBlZAorZGVjZDY1NiBhcHBseSAgICM0M2ZjMDAwMDA4YzAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDBFKzM3NworZGVjZDY1NyBhcHBseSAgIDlFKzM3NiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAxYTAwMDAwIENsYW1wZWQKK2RlY2Q2NTggYXBwbHkgICAjNDNmYzAwMDAwMWEwMDAwMCAgICAgICAtPiA5LjAwMDAwMDBFKzM3NgorZGVjZDY1OSBhcHBseSAgIDlFKzM3NSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwOTAwMDAwIENsYW1wZWQKK2RlY2Q2NjAgYXBwbHkgICAjNDNmYzAwMDAwMDkwMDAwMCAgICAgICAtPiA5LjAwMDAwMEUrMzc1CitkZWNkNjYxIGFwcGx5ICAgOUUrMzc0ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMjMwMDAgQ2xhbXBlZAorZGVjZDY2MiBhcHBseSAgICM0M2ZjMDAwMDAwMDIzMDAwICAgICAgIC0+IDkuMDAwMDBFKzM3NAorZGVjZDY2MyBhcHBseSAgIDlFKzM3MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDA2ODAwIENsYW1wZWQKK2RlY2Q2NjQgYXBwbHkgICAjNDNmYzAwMDAwMDAwNjgwMCAgICAgICAtPiA5LjAwMDBFKzM3MworZGVjZDY2NSBhcHBseSAgIDlFKzM3MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAyNDAwIENsYW1wZWQKK2RlY2Q2NjYgYXBwbHkgICAjNDNmYzAwMDAwMDAwMjQwMCAgICAgICAtPiA5LjAwMEUrMzcyCitkZWNkNjY3IGFwcGx5ICAgOUUrMzcxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwOGMgQ2xhbXBlZAorZGVjZDY2OCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDhjICAgICAgIC0+IDkuMDBFKzM3MQorZGVjZDY2OSBhcHBseSAgIDlFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDFhIENsYW1wZWQKK2RlY2Q2NzAgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAxYSAgICAgICAtPiA5LjBFKzM3MAorZGVjZDY3MSBhcHBseSAgIDlFKzM2OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDA5CitkZWNkNjcyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDkgICAgICAgLT4gOUUrMzY5CitkZWNkNjczIGFwcGx5ICAgOUUrMzY4ICAgICAgICAgICAgICAgICAgLT4gIzQzZjgwMDAwMDAwMDAwMDkKK2RlY2Q2NzQgYXBwbHkgICAjNDNmODAwMDAwMDAwMDAwOSAgICAgICAtPiA5RSszNjgKKworCistLSBTZWxlY3RlZCBEUEQgY29kZXMKK2RlY2Q3MDAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAwCitkZWNkNzAxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDkgICAgICAgLT4gOQorZGVjZDcwMiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDEwICAgICAgIC0+IDEwCitkZWNkNzAzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMTkgICAgICAgLT4gMTkKK2RlY2Q3MDQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAyMCAgICAgICAtPiAyMAorZGVjZDcwNSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDI5ICAgICAgIC0+IDI5CitkZWNkNzA2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMzAgICAgICAgLT4gMzAKK2RlY2Q3MDcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAzOSAgICAgICAtPiAzOQorZGVjZDcwOCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDQwICAgICAgIC0+IDQwCitkZWNkNzA5IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNDkgICAgICAgLT4gNDkKK2RlY2Q3MTAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA1MCAgICAgICAtPiA1MAorZGVjZDcxMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDU5ICAgICAgIC0+IDU5CitkZWNkNzEyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNjAgICAgICAgLT4gNjAKK2RlY2Q3MTMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2OSAgICAgICAtPiA2OQorZGVjZDcxNCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDcwICAgICAgIC0+IDcwCitkZWNkNzE1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzEgICAgICAgLT4gNzEKK2RlY2Q3MTYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MiAgICAgICAtPiA3MgorZGVjZDcxNyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDczICAgICAgIC0+IDczCitkZWNkNzE4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzQgICAgICAgLT4gNzQKK2RlY2Q3MTkgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NSAgICAgICAtPiA3NQorZGVjZDcyMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc2ICAgICAgIC0+IDc2CitkZWNkNzIxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzcgICAgICAgLT4gNzcKK2RlY2Q3MjIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3OCAgICAgICAtPiA3OAorZGVjZDcyMyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc5ICAgICAgIC0+IDc5CisKK2RlY2Q3MjUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI5ZSAgICAgICAtPiA5OTQKK2RlY2Q3MjYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI5ZiAgICAgICAtPiA5OTUKK2RlY2Q3MjcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMCAgICAgICAtPiA1MjAKK2RlY2Q3MjggYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMSAgICAgICAtPiA1MjEKKy0tIGZyb20gdGVsY28gdGVzdCBkYXRhCitkZWNkNzMwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxODggICAgICAgLT4gMzA4CitkZWNkNzMxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxYTMgICAgICAgLT4gMzIzCitkZWNkNzMyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMmEgICAgICAgLT4gIDgyCitkZWNkNzMzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxYTkgICAgICAgLT4gMzI5CitkZWNkNzM0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwODEgICAgICAgLT4gMTAxCitkZWNkNzM1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyYTIgICAgICAgLT4gNTIyCisKKy0tIERQRDogb25lIG9mIGVhY2ggb2YgdGhlIGh1ZmZtYW4gZ3JvdXBzCitkZWNkNzQwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZjcgICAgICAgLT4gNzc3CitkZWNkNzQxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZjggICAgICAgLT4gNzc4CitkZWNkNzQyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZWIgICAgICAgLT4gNzg3CitkZWNkNzQzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzN2QgICAgICAgLT4gODc3CitkZWNkNzQ0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzOWYgICAgICAgLT4gOTk3CitkZWNkNzQ1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzYmYgICAgICAgLT4gOTc5CitkZWNkNzQ2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZGYgICAgICAgLT4gNzk5CitkZWNkNzQ3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4CisKKy0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpCitkZWNkNzUwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4CitkZWNkNzUxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxNmUgICAgICAgLT4gODg4CitkZWNkNzUyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyNmUgICAgICAgLT4gODg4CitkZWNkNzUzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzNmUgICAgICAgLT4gODg4CitkZWNkNzU0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmYgICAgICAgLT4gODg5CitkZWNkNzU1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxNmYgICAgICAgLT4gODg5CitkZWNkNzU2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyNmYgICAgICAgLT4gODg5CitkZWNkNzU3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzNmYgICAgICAgLT4gODg5CisKK2RlY2Q3NjAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3ZSAgICAgICAtPiA4OTgKK2RlY2Q3NjEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE3ZSAgICAgICAtPiA4OTgKK2RlY2Q3NjIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI3ZSAgICAgICAtPiA4OTgKK2RlY2Q3NjMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZSAgICAgICAtPiA4OTgKK2RlY2Q3NjQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3ZiAgICAgICAtPiA4OTkKK2RlY2Q3NjUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE3ZiAgICAgICAtPiA4OTkKK2RlY2Q3NjYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI3ZiAgICAgICAtPiA4OTkKK2RlY2Q3NjcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZiAgICAgICAtPiA4OTkKKworZGVjZDc3MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGVlICAgICAgIC0+IDk4OAorZGVjZDc3MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWVlICAgICAgIC0+IDk4OAorZGVjZDc3MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmVlICAgICAgIC0+IDk4OAorZGVjZDc3MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2VlICAgICAgIC0+IDk4OAorZGVjZDc3NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGVmICAgICAgIC0+IDk4OQorZGVjZDc3NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWVmICAgICAgIC0+IDk4OQorZGVjZDc3NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmVmICAgICAgIC0+IDk4OQorZGVjZDc3NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2VmICAgICAgIC0+IDk4OQorCitkZWNkNzgwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZmUgICAgICAgLT4gOTk4CitkZWNkNzgxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxZmUgICAgICAgLT4gOTk4CitkZWNkNzgyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZmUgICAgICAgLT4gOTk4CitkZWNkNzgzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZmUgICAgICAgLT4gOTk4CitkZWNkNzg0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZmYgICAgICAgLT4gOTk5CitkZWNkNzg1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxZmYgICAgICAgLT4gOTk5CitkZWNkNzg2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZmYgICAgICAgLT4gOTk5CitkZWNkNzg3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZmYgICAgICAgLT4gOTk5CisKKy0tIHZhbHVlcyBhcm91bmQgW3VdaW50MzIgZWRnZXMgKHplcm9zIGRvbmUgZWFybGllcikKK2RlY2Q4MDAgYXBwbHkgLTIxNDc0ODM2NDYgIC0+ICNhMjM4MDAwMDhjNzhhZjQ2CitkZWNkODAxIGFwcGx5IC0yMTQ3NDgzNjQ3ICAtPiAjYTIzODAwMDA4Yzc4YWY0NworZGVjZDgwMiBhcHBseSAtMjE0NzQ4MzY0OCAgLT4gI2EyMzgwMDAwOGM3OGFmNDgKK2RlY2Q4MDMgYXBwbHkgLTIxNDc0ODM2NDkgIC0+ICNhMjM4MDAwMDhjNzhhZjQ5CitkZWNkODA0IGFwcGx5ICAyMTQ3NDgzNjQ2ICAtPiAjMjIzODAwMDA4Yzc4YWY0NgorZGVjZDgwNSBhcHBseSAgMjE0NzQ4MzY0NyAgLT4gIzIyMzgwMDAwOGM3OGFmNDcKK2RlY2Q4MDYgYXBwbHkgIDIxNDc0ODM2NDggIC0+ICMyMjM4MDAwMDhjNzhhZjQ4CitkZWNkODA3IGFwcGx5ICAyMTQ3NDgzNjQ5ICAtPiAjMjIzODAwMDA4Yzc4YWY0OQorZGVjZDgwOCBhcHBseSAgNDI5NDk2NzI5NCAgLT4gIzIyMzgwMDAxMTVhZmI1NWEKK2RlY2Q4MDkgYXBwbHkgIDQyOTQ5NjcyOTUgIC0+ICMyMjM4MDAwMTE1YWZiNTViCitkZWNkODEwIGFwcGx5ICA0Mjk0OTY3Mjk2ICAtPiAjMjIzODAwMDExNWFmYjU3YQorZGVjZDgxMSBhcHBseSAgNDI5NDk2NzI5NyAgLT4gIzIyMzgwMDAxMTVhZmI1N2IKKworZGVjZDgyMCBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDYgLT4gLTIxNDc0ODM2NDYKK2RlY2Q4MjEgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ3IC0+IC0yMTQ3NDgzNjQ3CitkZWNkODIyIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0OCAtPiAtMjE0NzQ4MzY0OAorZGVjZDgyMyBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDkgLT4gLTIxNDc0ODM2NDkKK2RlY2Q4MjQgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ2IC0+ICAyMTQ3NDgzNjQ2CitkZWNkODI1IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0NyAtPiAgMjE0NzQ4MzY0NworZGVjZDgyNiBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDggLT4gIDIxNDc0ODM2NDgKK2RlY2Q4MjcgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ5IC0+ICAyMTQ3NDgzNjQ5CitkZWNkODI4IGFwcGx5ICAjMjIzODAwMDExNWFmYjU1YSAtPiAgNDI5NDk2NzI5NAorZGVjZDgyOSBhcHBseSAgIzIyMzgwMDAxMTVhZmI1NWIgLT4gIDQyOTQ5NjcyOTUKK2RlY2Q4MzAgYXBwbHkgICMyMjM4MDAwMTE1YWZiNTdhIC0+ICA0Mjk0OTY3Mjk2CitkZWNkODMxIGFwcGx5ICAjMjIzODAwMDExNWFmYjU3YiAtPiAgNDI5NDk2NzI5NworCistLSBmb3IgbmFycm93aW5nCitkZWNkODQwIGFwcGx5ICAjMjg3MDAwMDAwMDAwMDAwMCAtPiAgMi4wMDAwMDAwMDAwMDAwMDBFLTk5CisKKy0tIHNvbWUgbWlzY2VsbGFuZW91cworZGVjZDg1MCBhcHBseSAgIzAwMDQwNzAwMDAwMDAwMDAgLT4gNy4wMDAwMDAwMDAwMDBFLTM4NSAgU3Vibm9ybWFsCitkZWNkODUxIGFwcGx5ICAjMDAwODAwMDAwMDAyMDAwMCAtPiAxLjAwMDAwRS0zOTEgICAgICAgICBTdWJub3JtYWwKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEZNQS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEZNQS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZTkyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRk1BLmRlY1Rlc3QKQEAgLTAsMCArMSwxNjk4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkRk1BLmRlY1Rlc3QgLS0gZGVjRG91YmxlIEZ1c2VkIE11bHRpcGx5IEFkZCAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFRoZXNlIHRlc3RzIGNvbXByZXNlIHRocmVlIHBhcnRzOgorLS0gICAxLiBTYW5pdHkgY2hlY2tzIGFuZCBvdGhlciB0aHJlZS1vcGVyYW5kIHRlc3RzIChlc3BlY2lhbGx5IHRob3NlCistLSAgICAgIHdoZXJlIHRoZSBmdXNlZCBvcGVyYXRpb24gbWFrZXMgYSBkaWZmZXJlbmNlKQorLS0gICAyLiBNdWx0aXBseSB0ZXN0cyAodGhpcmQgb3BlcmFuZCBpcyBuZXV0cmFsIHplcm8gWzBFK2VtYXhdKQorLS0gICAzLiBBZGRpdGlvbiB0ZXN0cyAoZmlyc3Qgb3BlcmFuZCBpcyAxKQorLS0gVGhlIG11bHRpcGx5IGFuZCBhZGRpdGlvbiB0ZXN0cyBhcmUgZXh0ZW5zaXZlIGJlY2F1c2UgRk1BIG1heSBoYXZlCistLSBpdHMgb3duIGRlZGljYXRlZCBtdWx0aXBsaWNhdGlvbiBvciBhZGRpdGlvbiByb3V0aW5lKHMpLCBhbmQgdGhleQorLS0gYWxzbyBpbmhlcmVudGx5IGNoZWNrIHRoZSBsZWZ0LXRvLXJpZ2h0IHByb3BlcnRpZXMuCisKKy0tIFNhbml0eSBjaGVja3MKK2RkZm1hMDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDIKK2RkZm1hMDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMKK2RkZm1hMDAwMyBmbWEgIDIgICAyICAgMyAtPiAgIDcKK2RkZm1hMDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTAKK2RkZm1hMDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDAKK2RkZm1hMDAwNiBmbWEgLTEgICAxICAgMiAtPiAgIDEKK2RkZm1hMDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTEKK2RkZm1hMDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzIKK2RkZm1hMDAxMSBmbWEgIDEgIC0xICAgMSAtPiAgIDAKK2RkZm1hMDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDEKK2RkZm1hMDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTEKK2RkZm1hMDAxNCBmbWEgIDkgIC05ICAgOSAtPiAtNzIKK2RkZm1hMDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDAKK2RkZm1hMDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTEKK2RkZm1hMDAxNyBmbWEgIDIgICAyICAtMyAtPiAgIDEKK2RkZm1hMDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzIKKworLS0gbm9uLWludGVnZXIgZXhhY3RzCitkZGZtYTAxMDAgIGZtYSAgICAyNS4yICAgNjMuNiAgIC00MzggIC0+ICAxMTY0LjcyCitkZGZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwCitkZGZtYTAxMDIgIGZtYSAgICA0OS4yICAgLTQuOCAgIDIzLjMgIC0+ICAtMjEyLjg2CitkZGZtYTAxMDMgIGZtYSAgICA0LjIyICAwLjA3OSAgLTk0LjYgIC0+ICAtOTQuMjY2NjIKK2RkZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgKK2RkZm1hMDEwNSAgZm1hICAgIDYuMTMgICAtMTYxICAgNjUuOSAgLT4gIC05MjEuMDMKK2RkZm1hMDEwNiAgZm1hICAgIDI4LjIgICAgNzI3ICAgNS40NSAgLT4gIDIwNTA2Ljg1CitkZGZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4CitkZGZtYTAxMDggIGZtYSAgICA5My4zICAgMC4xOSAgMC4yMjYgIC0+ICAxNy45NTMKK2RkZm1hMDEwOSAgZm1hICAgMC4xNjkgICAtMzQxICAgNS42MSAgLT4gIC01Mi4wMTkKK2RkZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjIKK2RkZm1hMDExMSAgZm1hICAtMC40MDkgICAgIDEzICAgMjAuNCAgLT4gIDE1LjA4MworZGRmbWEwMTEyICBmbWEgICAgIDMxNyAgIDc3LjAgICAxOS4wICAtPiAgMjQ0MjguMAorZGRmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4CitkZGZtYTAxMTQgIGZtYSAgICAxLjM2ICAwLjk4NCAgMC40OTMgIC0+ICAxLjgzMTI0CitkZGZtYTAxMTUgIGZtYSAgICA3Mi43ICAgIDI3NCAgIDEuNTYgIC0+ICAxOTkyMS4zNgorZGRmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4CitkZGZtYTAxMTcgIGZtYSAgICAgNjY2ICAwLjI0NyAgIDI1LjQgIC0+ICAxODkuOTAyCitkZGZtYTAxMTggIGZtYSAgIC0zLjg3ICAgMy4wNiAgIDc4LjAgIC0+ICA2Ni4xNTc4CitkZGZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0CitkZGZtYTAxMjAgIGZtYSAgIC05MS42ICAgNS4yOSAgMC4xNTMgIC0+ICAtNDg0LjQxMQorCistLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gKKy0tIGlzIHByZWNlZGVkIGJ5IHRoZSByZXN1bHQgb2YgdW5mdXNlZCBtdWx0aXBseSBhbmQgYWRkCistLSBbdGhpcyBpcyBhYm91dCAyMCUgb2YgYWxsIHNpbWlsYXIgIGNhc2VzIGluIGdlbmVyYWxdCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNy4xMjMzNTY0MjkyNTc5NjlFKzE2CitkZGZtYTAyMDEgIGZtYSAgICAgICAyNzU4MzQ4OS42NjQ1ICAgICAgMjU4MjQ3MTA3OC4wNCAgICAgIDI1OTMxODMuNDIzNzEgIC0+ICA3LjEyMzM1NjQyOTI1Nzk3MEUrMTYgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIyODEzMjc1MzI4LjgwNTA2CitkZGZtYTAyMDggIGZtYSAgICAgICAgMjQyODAuMzU1NTY2ICAgICAgOTM5NTc3LjM5NzY1MyAgICAgICAgMjAzMi4wMTMyNTIgIC0+ICAyMjgxMzI3NTMyOC44MDUwNyAgICAgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjAzMDM5NzczNDI3ODA2MkUrMTYKK2RkZm1hMDIwOSAgZm1hICAgICAgICAgIDc4NDg5NzY0MzIgICAgICAtMjU4NjgzMS4yMjgxICAgICAgMTM3OTAzLjUxNzkwOSAgLT4gIC0yLjAzMDM5NzczNDI3ODA2MUUrMTYgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMjA0MDc3NDA5NDgxNC4wNzcKK2RkZm1hMDIxNyAgZm1hICAgICAgICA1Njg5MC4zODg3MzEgICAgICAzNTg3MjAzMC40MjU1ICAgICAgMzM5MzM3LjEyMzQxMCAgLT4gIDIwNDA3NzQwOTQ4MTQuMDc4ICAgICAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMi43MTQ0Njk1NzUyMDUwNDlFKzE4CitkZGZtYTAyMjAgIGZtYSAgICAgICA3NTMzNTQzLjU3NDQ1ICAgICAgIDM2MDMxNzc2MzkyOCAgICAgIDUwNzMzOTIuMzE2MzggIC0+ICAyLjcxNDQ2OTU3NTIwNTA1MEUrMTggIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuMDExNjc2Mjk3NzE2NzE2RSsxOQorZGRmbWEwMjIzICBmbWEgICAgICAgNzM5OTQ1MjU1LjU2MyAgICAgIDEzNjcyMzEyNzg0LjEgICAgICAtOTk0MzgxLjUzNTcyICAtPiAgMS4wMTE2NzYyOTc3MTY3MTVFKzE5ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi45MTQxMzU3MjE0NTUzMTVFKzIzCitkZGZtYTAyMjQgIGZtYSAgICAgICAtNDEzNTEwOTU3MjE4ICAgICAgIDcwNDcyOTk4ODU1MCAgICAgICA5MjM0MTYyNjE0LjAgIC0+ICAtMi45MTQxMzU3MjE0NTUzMTRFKzIzIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIuNjIwMTE5ODYzMzY1Nzg2RSsxNworZGRmbWEwMjI2ICBmbWEgICAgICAgIDQzNzQ4NC4wMDYwMSAgICAgICA1OTg5MDY0MzI3OTAgICAgICA4OTQ0NTA2MzguNDQyICAtPiAgMi42MjAxMTk4NjMzNjU3ODdFKzE3ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjI3MjY0Nzk5NTgwODE3OEUrMTkKK2RkZm1hMDI1MyAgZm1hICAgICAgICAgNzMyODc1NTY5MjkgICAgICAxNzM2NTEzMDUuNzg0ICAgICAtMzU4MzEyNTY4LjM4OSAgLT4gIDEuMjcyNjQ3OTk1ODA4MTc3RSsxOSAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTEuNzUzNzY5MzIwODYxODUxRSsxOAorZGRmbWEwMjU3ICBmbWEgICAgICAgIDIwMzI1ODMwNDQ4NiAgICAgIC04NjI4Mjc4LjgwNjYgICAgICAxNTMxMjcuNDQ2NzI3ICAtPiAgLTEuNzUzNzY5MzIwODYxODUwRSsxOCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMS41NTA3Mzc4MzUyNjMzNDZFKzE3CitkZGZtYTAyNjAgIGZtYSAgICAgICA0MjU2MDUzMy4xNzc0ICAgICAtMzY0MzYwNTI4Mi44NiAgICAgICAxNzgyNzcuOTYzNzcgIC0+ICAtMS41NTA3Mzc4MzUyNjMzNDdFKzE3IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIuODk3NjI0NjIwNTc2MDA1RSsyMgorZGRmbWEwMjY5ICBmbWEgICAgICAgIDE0MjY1NjU4NzM3NSAgICAgICAyMDMxMTg4Nzk2NzAgICAgICAgNjA0NTc2MTAzOTkxICAtPiAgMi44OTc2MjQ2MjA1NzYwMDRFKzIyICBJbmV4YWN0IFJvdW5kZWQKKworLS0gQ2FzZXMgd2hlcmUgbXVsdGlwbHkgd291bGQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlmIHNlcGFyYXRlCitmbWEwMzAwICBmbWEgICA5ZSszODQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1hMDMwMSAgZm1hICAgMWUrMzg0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYTAzMDIgIGZtYSAgIDFlKzM4NCAgICAxMCAgIC0xZSszODQgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCitmbWEwMzAzICBmbWEgICAxZSszODQgICAgMTAgICAtOWUrMzg0ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAorLS0gc3Vibm9ybWFsIGV0Yy4KK2ZtYTAzMDUgIGZtYSAgIDFlLTM5OCAgICAwLjEgIDAgICAgICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1hMDMwNiAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMSAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1hMDMwNyAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMWUtMzk4ICAgIC0+IDFFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBJbmZpbml0ZSBjb21iaW5hdGlvbnMKK2RkZm1hMDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RkZm1hMDgwMSBmbWEgIEluZiAgIEluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA4MDIgZm1hICBJbmYgIC1JbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQorZGRmbWEwODA0IGZtYSAtSW5mICAgSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDgwNSBmbWEgLUluZiAgIEluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKK2RkZm1hMDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RkZm1hMDgwNyBmbWEgLUluZiAgLUluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24KK2RkZm1hMDkwMCBmbWEgIE5hTjIgIE5hTjMgIE5hTjUgICAtPiAgTmFOMgorZGRmbWEwOTAxIGZtYSAgMCAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zCitkZGZtYTA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUKKy0tIGZpcnN0IHNOYU4gd2lucyAoY29uc2lkZXIgcU5hTiBmcm9tIGVhcmxpZXIgc05hTiBiZWluZworLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpCitkZGZtYTA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDkwNCBmbWEgIDAgICAgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDkwNyBmbWEgIE5hTjcgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE1VTFRJUExJQ0FUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBzYW5pdHkgY2hlY2tzCitkZGZtYTIwMDAgZm1hICAyICAgICAgMiAgIDBlKzM4NCAgLT4gIDQKK2RkZm1hMjAwMSBmbWEgIDIgICAgICAzICAgMGUrMzg0ICAtPiAgNgorZGRmbWEyMDAyIGZtYSAgNSAgICAgIDEgICAwZSszODQgIC0+ICA1CitkZGZtYTIwMDMgZm1hICA1ICAgICAgMiAgIDBlKzM4NCAgLT4gIDEwCitkZGZtYTIwMDQgZm1hICAxLjIwICAgMiAgIDBlKzM4NCAgLT4gIDIuNDAKK2RkZm1hMjAwNSBmbWEgIDEuMjAgICAwICAgMGUrMzg0ICAtPiAgMC4wMAorZGRmbWEyMDA2IGZtYSAgMS4yMCAgLTIgICAwZSszODQgIC0+ICAtMi40MAorZGRmbWEyMDA3IGZtYSAgLTEuMjAgIDIgICAwZSszODQgIC0+ICAtMi40MAorZGRmbWEyMDA4IGZtYSAgLTEuMjAgIDAgICAwZSszODQgIC0+ICAwLjAwCitkZGZtYTIwMDkgZm1hICAtMS4yMCAtMiAgIDBlKzM4NCAgLT4gIDIuNDAKK2RkZm1hMjAxMCBmbWEgIDUuMDkgNy4xICAgMGUrMzg0ICAtPiAgMzYuMTM5CitkZGZtYTIwMTEgZm1hICAyLjUgICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAKK2RkZm1hMjAxMiBmbWEgIDIuNTAgICA0ICAgMGUrMzg0ICAtPiAgMTAuMDAKK2RkZm1hMjAxMyBmbWEgIDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAgIDBlKzM4NCAgLT4gIDEuMjM0NTY3ODkwMDAwMDAwIFJvdW5kZWQKK2RkZm1hMjAxNSBmbWEgIDIuNTAgICA0ICAgMGUrMzg0ICAtPiAgMTAuMDAKK2RkZm1hMjAxNiBmbWEgICA5Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTIwMTcgZm1hICAgOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgLTk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEyMDE4IGZtYSAgLTkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gIC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjAxOSBmbWEgIC05Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHplcm9zLCBldGMuCitkZGZtYTIwMjEgZm1hICAgMCAgICAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjAyMiBmbWEgICAwICAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyMDIzIGZtYSAgLTAgICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTIwMjQgZm1hICAtMCAgICAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjAyNSBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyMDI2IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTIwMjcgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjAyOCBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyMDMwIGZtYSAgIDUuMDAgICAxRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwCitkZGZtYTIwMzEgZm1hICAgMDAuMDAgIDAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAKK2RkZm1hMjAzMiBmbWEgICAwMC4wMCAgMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkZm1hMjAzMyBmbWEgICAwRS0zICAgMDAuMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkZm1hMjAzNCBmbWEgIC01LjAwICAgMUUtMyAgICAwZSszODQgIC0+ICAtMC4wMDUwMAorZGRmbWEyMDM1IGZtYSAgLTAwLjAwICAwLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwCitkZGZtYTIwMzYgZm1hICAtMDAuMDAgIDBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZGZtYTIwMzcgZm1hICAtMEUtMyAgIDAwLjAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZGZtYTIwMzggZm1hICAgNS4wMCAgLTFFLTMgICAgMGUrMzg0ICAtPiAgLTAuMDA1MDAKK2RkZm1hMjAzOSBmbWEgICAwMC4wMCAtMC4wMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMAorZGRmbWEyMDQwIGZtYSAgIDAwLjAwIC0wRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZGRmbWEyMDQxIGZtYSAgIDBFLTMgIC0wMC4wMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZGRmbWEyMDQyIGZtYSAgLTUuMDAgIC0xRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwCitkZGZtYTIwNDMgZm1hICAtMDAuMDAgLTAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAKK2RkZm1hMjA0NCBmbWEgIC0wMC4wMCAtMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkZm1hMjA0NSBmbWEgIC0wRS0zICAtMDAuMDAgIC0wZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkZm1hMjA0NiBmbWEgIC0wRS0zICAgMDAuMDAgIC0wZSszODQgIC0+ICAtMC4wMDAwMAorZGRmbWEyMDQ3IGZtYSAgIDBFLTMgIC0wMC4wMCAgLTBlKzM4NCAgLT4gIC0wLjAwMDAwCitkZGZtYTIwNDggZm1hICAgMEUtMyAgIDAwLjAwICAtMGUrMzg0ICAtPiAgIDAuMDAwMDAKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZGRmbWEyMDUwIGZtYSAgMS4yMCAzICAgICAgICAgIDBlKzM4NCAgLT4gIDMuNjAKK2RkZm1hMjA1MSBmbWEgIDcgICAgMyAgICAgICAgICAwZSszODQgIC0+ICAyMQorZGRmbWEyMDUyIGZtYSAgMC45ICAwLjggICAgICAgIDBlKzM4NCAgLT4gIDAuNzIKK2RkZm1hMjA1MyBmbWEgIDAuOSAgLTAgICAgICAgICAwZSszODQgIC0+ICAwLjAKK2RkZm1hMjA1NCBmbWEgIDY1NDMyMSA2NTQzMjEgICAwZSszODQgIC0+ICA0MjgxMzU5NzEwNDEKKworZGRmbWEyMDYwIGZtYSAgMTIzLjQ1IDFlNyAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSs5CitkZGZtYTIwNjEgZm1hICAxMjMuNDUgMWU4ICAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEwCitkZGZtYTIwNjIgZm1hICAxMjMuNDUgMWUrOSAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzExCitkZGZtYTIwNjMgZm1hICAxMjMuNDUgMWUxMCAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEyCitkZGZtYTIwNjQgZm1hICAxMjMuNDUgMWUxMSAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEzCitkZGZtYTIwNjUgZm1hICAxMjMuNDUgMWUxMiAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzE0CitkZGZtYTIwNjYgZm1hICAxMjMuNDUgMWUxMyAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzE1CisKKworLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRmbWEyMDgwIGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkKK2RkZm1hMjA4NCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45CitkZGZtYTIwOTAgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQorZGRmbWEyMDk0IGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkKKworLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcworZGRmbWEyMTAxIGZtYSAgOSA5ICAgICAwZSszODQgIC0+ICA4MQorZGRmbWEyMTAyIGZtYSAgOSA5MCAgICAgMGUrMzg0ICAtPiAgODEwCitkZGZtYTIxMDMgZm1hICA5IDkwMCAgICAgMGUrMzg0ICAtPiAgODEwMAorZGRmbWEyMTA0IGZtYSAgOSA5MDAwICAgICAwZSszODQgIC0+ICA4MTAwMAorZGRmbWEyMTA1IGZtYSAgOSA5MDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwCitkZGZtYTIxMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMAorZGRmbWEyMTA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMAorZGRmbWEyMTA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwCitkZGZtYTIxMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMAorZGRmbWEyMTEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMAorZGRmbWEyMTExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwCitkZGZtYTIxMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMAorZGRmbWEyMTEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMAorZGRmbWEyMTE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwCitkZGZtYTIxMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMTYgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwCistLWRkZm1hMjExNyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMTggZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMTkgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwCistLWRkZm1hMjEyMCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMjEgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMjIgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRkZm1hMjEyMyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKK2RkZm1hMjEzMSBmbWEgIDMgMyAgICAgMGUrMzg0ICAtPiAgOQorZGRmbWEyMTMyIGZtYSAgMyAzMCAgICAgMGUrMzg0ICAtPiAgOTAKK2RkZm1hMjEzMyBmbWEgIDMgMzAwICAgICAwZSszODQgIC0+ICA5MDAKK2RkZm1hMjEzNCBmbWEgIDMgMzAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMAorZGRmbWEyMTM1IGZtYSAgMyAzMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAKK2RkZm1hMjEzNiBmbWEgIDMgMzAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAKK2RkZm1hMjEzNyBmbWEgIDMgMzAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMAorZGRmbWEyMTM4IGZtYSAgMyAzMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAKK2RkZm1hMjEzOSBmbWEgIDMgMzAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAKK2RkZm1hMjE0MCBmbWEgIDMgMzAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMAorZGRmbWEyMTQxIGZtYSAgMyAzMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAKK2RkZm1hMjE0MiBmbWEgIDMgMzAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwMDAKK2RkZm1hMjE0MyBmbWEgIDMgMzAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMAorZGRmbWEyMTQ0IGZtYSAgMyAzMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMDAKK2RkZm1hMjE0NSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwMDAwMDAKKworLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZworZGRmbWEyMzAxIGZtYSAgOSA5ICAgICAwZSszODQgIC0+ICA4MQorZGRmbWEyMzAyIGZtYSAgOSA5MCAgICAgMGUrMzg0ICAtPiAgODEwCitkZGZtYTIzMDMgZm1hICA5IDkwMCAgICAgMGUrMzg0ICAtPiAgODEwMAorZGRmbWEyMzA0IGZtYSAgOSA5MDAwICAgICAwZSszODQgIC0+ICA4MTAwMAorZGRmbWEyMzA1IGZtYSAgOSA5MDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwCitkZGZtYTIzMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMAorZGRmbWEyMzA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMAorZGRmbWEyMzA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwCitkZGZtYTIzMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMAorZGRmbWEyMzEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMAorZGRmbWEyMzExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwCitkZGZtYTIzMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMAorZGRmbWEyMzEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMAorZGRmbWEyMzE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwCitkZGZtYTIzMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMAorZGRmbWEyMzE2IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQKK2RkZm1hMjMxNyBmbWEgIDkwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZAorZGRmbWEyMzE4IGZtYSAgOTAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxOCAgUm91bmRlZAorZGRmbWEyMzE5IGZtYSAgOTAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTkgIFJvdW5kZWQKK2RkZm1hMjMyMCBmbWEgIDkwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZAorZGRmbWEyMzIxIGZtYSAgOTAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMSAgUm91bmRlZAorZGRmbWEyMzIyIGZtYSAgOTAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjIgIFJvdW5kZWQKK2RkZm1hMjMyMyBmbWEgIDkwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMyAgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworZGRmbWEyNTA0ICBmbWEgICAwRS0yNjAgMTAwMEUtMjYwICAgIDBlKzM4NCAgLT4gIDBFLTM5OCBDbGFtcGVkCitkZGZtYTI1MDUgIGZtYSAgIDEwMEUrMjYwIDBFKzI2MCAgICAgMGUrMzg0ICAtPiAgMEUrMzY5IENsYW1wZWQKKworLS0gbWl4ZWQgd2l0aCB6ZXJvcworZGRmbWEyNTQxIGZtYSAgIDAgICAgLTEgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0MiBmbWEgIC0wICAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDMgZm1hICAgMCAgICAgMSAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyNTQ0IGZtYSAgLTAgICAgIDEgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0NSBmbWEgIC0xICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDYgZm1hICAtMSAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyNTQ3IGZtYSAgIDEgICAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0OCBmbWEgICAxICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwCisKK2RkZm1hMjU1MSBmbWEgICAwLjAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1MiBmbWEgIC0wLjAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1MyBmbWEgICAwLjAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1NCBmbWEgIC0wLjAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1NSBmbWEgIC0xLjAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1NiBmbWEgIC0xLjAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1NyBmbWEgICAxLjAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU1OCBmbWEgICAxLjAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwLjAKKworZGRmbWEyNTYxIGZtYSAgIDAgICAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTYyIGZtYSAgLTAgICAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTYzIGZtYSAgIDAgICAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY0IGZtYSAgLTAgICAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY1IGZtYSAgLTEgICAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY2IGZtYSAgLTEgICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY3IGZtYSAgIDEgICAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorZGRmbWEyNTY4IGZtYSAgIDEgICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAorCitkZGZtYTI1NzEgZm1hICAgMC4wICAtMS4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTcyIGZtYSAgLTAuMCAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3MyBmbWEgICAwLjAgICAxLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTI1NzQgZm1hICAtMC4wICAgMS4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTc1IGZtYSAgLTEuMCAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3NiBmbWEgIC0xLjAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTI1NzcgZm1hICAgMS4wICAgMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTc4IGZtYSAgIDEuMCAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKKworLS0gU3BlY2lhbHMKK2RkZm1hMjU4MCBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNTgxIGZtYSAgIEluZiAgLTEwMDAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI1ODIgZm1hICAgSW5mICAtMSAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjU4MyBmbWEgICBJbmYgIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI1ODQgZm1hICAgSW5mICAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNTg1IGZtYSAgIEluZiAgIDEgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI1ODYgZm1hICAgSW5mICAgMTAwMCAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjU4NyBmbWEgICBJbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNTg4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI1ODkgZm1hICAtSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjU5MCBmbWEgIC0xICAgICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNTkxIGZtYSAgLTAgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjU5MiBmbWEgICAwICAgICBJbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI1OTMgZm1hICAgMSAgICAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjU5NCBmbWEgICAxMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNTk1IGZtYSAgIEluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CisKK2RkZm1hMjYwMCBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNjAxIGZtYSAgLUluZiAgLTEwMDAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI2MDIgZm1hICAtSW5mICAtMSAgICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjYwMyBmbWEgIC1JbmYgIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2MDQgZm1hICAtSW5mICAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjA1IGZtYSAgLUluZiAgIDEgICAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI2MDYgZm1hICAtSW5mICAgMTAwMCAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjYwNyBmbWEgIC1JbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNjA4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI2MDkgZm1hICAtSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjYxMCBmbWEgIC0xICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNjExIGZtYSAgLTAgICAgLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjYxMiBmbWEgICAwICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2MTMgZm1hICAgMSAgICAtSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjYxNCBmbWEgICAxMDAwIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNjE1IGZtYSAgIEluZiAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CisKK2RkZm1hMjYyMSBmbWEgICBOYU4gLUluZiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyMiBmbWEgICBOYU4gLTEwMDAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyMyBmbWEgICBOYU4gLTEgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyNCBmbWEgICBOYU4gLTAgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyNSBmbWEgICBOYU4gIDAgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyNiBmbWEgICBOYU4gIDEgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyNyBmbWEgICBOYU4gIDEwMDAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyOCBmbWEgICBOYU4gIEluZiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYyOSBmbWEgICBOYU4gIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzMCBmbWEgIC1JbmYgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzMSBmbWEgIC0xMDAwIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzMiBmbWEgIC0xICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzMyBmbWEgIC0wICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzNCBmbWEgICAwICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzNSBmbWEgICAxICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzNiBmbWEgICAxMDAwIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KK2RkZm1hMjYzNyBmbWEgICBJbmYgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KKworZGRmbWEyNjQxIGZtYSAgIHNOYU4gLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0MiBmbWEgICBzTmFOIC0xMDAwICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDMgZm1hICAgc05hTiAtMSAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQ0IGZtYSAgIHNOYU4gLTAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0NSBmbWEgICBzTmFOICAwICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDYgZm1hICAgc05hTiAgMSAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQ3IGZtYSAgIHNOYU4gIDEwMDAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0OCBmbWEgICBzTmFOICBOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDkgZm1hICAgc05hTiBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjUwIGZtYSAgIE5hTiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1MSBmbWEgIC1JbmYgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTIgZm1hICAtMTAwMCBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjUzIGZtYSAgLTEgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1NCBmbWEgIC0wICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTUgZm1hICAgMCAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjU2IGZtYSAgIDEgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1NyBmbWEgICAxMDAwIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTggZm1hICAgSW5mICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjU5IGZtYSAgIE5hTiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRmbWEyNjYxIGZtYSAgIE5hTjkgLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTjkKK2RkZm1hMjY2MiBmbWEgICBOYU44ICA5OTkgICAgIDBlKzM4NCAgLT4gICBOYU44CitkZGZtYTI2NjMgZm1hICAgTmFONzEgSW5mICAgICAwZSszODQgIC0+ICAgTmFONzEKK2RkZm1hMjY2NCBmbWEgICBOYU42ICBOYU41ICAgIDBlKzM4NCAgLT4gICBOYU42CitkZGZtYTI2NjUgZm1hICAtSW5mICAgTmFONCAgICAwZSszODQgIC0+ICAgTmFONAorZGRmbWEyNjY2IGZtYSAgLTk5OSAgIE5hTjMzICAgMGUrMzg0ICAtPiAgIE5hTjMzCitkZGZtYTI2NjcgZm1hICAgSW5mICAgTmFOMiAgICAwZSszODQgIC0+ICAgTmFOMgorCitkZGZtYTI2NzEgZm1hICAgc05hTjk5IC1JbmYgICAgICAwZSszODQgIC0+ICAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3MiBmbWEgICBzTmFOOTggLTExICAgICAgIDBlKzM4NCAgLT4gICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjczIGZtYSAgIHNOYU45NyAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzQgZm1hICAgc05hTjE2IHNOYU45NCAgICAwZSszODQgIC0+ICAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3NSBmbWEgICBOYU45NSAgc05hTjkzICAgIDBlKzM4NCAgLT4gICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjc2IGZtYSAgLUluZiAgICBzTmFOOTIgICAgMGUrMzg0ICAtPiAgIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzcgZm1hICAgMDg4ICAgIHNOYU45MSAgICAwZSszODQgIC0+ICAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3OCBmbWEgICBJbmYgICAgc05hTjkwICAgIDBlKzM4NCAgLT4gICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjc5IGZtYSAgIE5hTiAgICBzTmFOODkgICAgMGUrMzg0ICAtPiAgIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RkZm1hMjY4MSBmbWEgIC1OYU45IC1JbmYgICAgIDBlKzM4NCAgLT4gIC1OYU45CitkZGZtYTI2ODIgZm1hICAtTmFOOCAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFOOAorZGRmbWEyNjgzIGZtYSAgLU5hTjcxIEluZiAgICAgMGUrMzg0ICAtPiAgLU5hTjcxCitkZGZtYTI2ODQgZm1hICAtTmFONiAtTmFONSAgICAwZSszODQgIC0+ICAtTmFONgorZGRmbWEyNjg1IGZtYSAgLUluZiAgLU5hTjQgICAgMGUrMzg0ICAtPiAgLU5hTjQKK2RkZm1hMjY4NiBmbWEgIC05OTkgIC1OYU4zMyAgIDBlKzM4NCAgLT4gIC1OYU4zMworZGRmbWEyNjg3IGZtYSAgIEluZiAgLU5hTjIgICAgMGUrMzg0ICAtPiAgLU5hTjIKKworZGRmbWEyNjkxIGZtYSAgLXNOYU45OSAtSW5mICAgICAgMGUrMzg0ICAtPiAgLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTIgZm1hICAtc05hTjk4IC0xMSAgICAgICAwZSszODQgIC0+ICAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5MyBmbWEgIC1zTmFOOTcgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjk0IGZtYSAgLXNOYU4xNiAtc05hTjk0ICAgMGUrMzg0ICAtPiAgLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTUgZm1hICAtTmFOOTUgIC1zTmFOOTMgICAwZSszODQgIC0+ICAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5NiBmbWEgIC1JbmYgICAgLXNOYU45MiAgIDBlKzM4NCAgLT4gIC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjk3IGZtYSAgIDA4OCAgICAtc05hTjkxICAgMGUrMzg0ICAtPiAgLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTggZm1hICAgSW5mICAgIC1zTmFOOTAgICAwZSszODQgIC0+ICAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5OSBmbWEgIC1OYU4gICAgLXNOYU44OSAgIDBlKzM4NCAgLT4gIC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkZGZtYTI3MDEgZm1hICAtTmFOICAtSW5mICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDIgZm1hICAtTmFOICAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDMgZm1hICAtTmFOICAgSW5mICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDQgZm1hICAtTmFOICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDUgZm1hICAtSW5mICAtTmFOMCAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDYgZm1hICAtOTk5ICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFOCitkZGZtYTI3MDcgZm1hICAgSW5mICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFOCisKK2RkZm1hMjcxMSBmbWEgIC1zTmFOICAgLUluZiAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxMiBmbWEgIC1zTmFOICAgLTExICAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxMyBmbWEgIC1zTmFOMDAgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxNCBmbWEgIC1zTmFOICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxNSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxNiBmbWEgIC1JbmYgICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxNyBmbWEgICAwODggICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxOCBmbWEgICBJbmYgICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjcxOSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZGRmbWEyNzUxIGZtYSAgIDFlKzI3NyAgMWUrMzExICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzUyIGZtYSAgIDFlKzI3NyAtMWUrMzExICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzUzIGZtYSAgLTFlKzI3NyAgMWUrMzExICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzU0IGZtYSAgLTFlKzI3NyAtMWUrMzExICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzU1IGZtYSAgIDFlLTI3NyAgMWUtMzExICAgMGUrMzg0ICAtPiAgIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI3NTYgZm1hICAgMWUtMjc3IC0xZS0zMTEgICAwZSszODQgIC0+ICAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjc1NyBmbWEgIC0xZS0yNzcgIDFlLTMxMSAgIDBlKzM4NCAgLT4gIC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyNzU4IGZtYSAgLTFlLTI3NyAtMWUtMzExICAgMGUrMzg0ICAtPiAgIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZGRmbWEyNzYwIGZtYSAgMWUtMjkxIDFlLTEwMSAgIDBlKzM4NCAgLT4gIDFFLTM5MiBTdWJub3JtYWwKK2RkZm1hMjc2MSBmbWEgIDFlLTI5MSAxZS0xMDIgICAwZSszODQgIC0+ICAxRS0zOTMgU3Vibm9ybWFsCitkZGZtYTI3NjIgZm1hICAxZS0yOTEgMWUtMTAzICAgMGUrMzg0ICAtPiAgMUUtMzk0IFN1Ym5vcm1hbAorZGRmbWEyNzYzIGZtYSAgMWUtMjkxIDFlLTEwNCAgIDBlKzM4NCAgLT4gIDFFLTM5NSBTdWJub3JtYWwKK2RkZm1hMjc2NCBmbWEgIDFlLTI5MSAxZS0xMDUgICAwZSszODQgIC0+ICAxRS0zOTYgU3Vibm9ybWFsCitkZGZtYTI3NjUgZm1hICAxZS0yOTEgMWUtMTA2ICAgMGUrMzg0ICAtPiAgMUUtMzk3IFN1Ym5vcm1hbAorZGRmbWEyNzY2IGZtYSAgMWUtMjkxIDFlLTEwNyAgIDBlKzM4NCAgLT4gIDFFLTM5OCBTdWJub3JtYWwKK2RkZm1hMjc2NyBmbWEgIDFlLTI5MSAxZS0xMDggICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyNzY4IGZtYSAgMWUtMjkxIDFlLTEwOSAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI3NjkgZm1hICAxZS0yOTEgMWUtMTEwICAgMGUrMzg0ICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KK2RkZm1hMjc3MCBmbWEgIDFlKzYwIDFlKzMyMSAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwRSszODEgIENsYW1wZWQKK2RkZm1hMjc3MSBmbWEgIDFlKzYwIDFlKzMyMiAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMEUrMzgyICBDbGFtcGVkCitkZGZtYTI3NzIgZm1hICAxZSs2MCAxZSszMjMgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQKK2RkZm1hMjc3MyBmbWEgIDFlKzYwIDFlKzMyNCAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKK2RkZm1hMjc3NCBmbWEgIDFlKzYwIDFlKzMyNSAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzc1IGZtYSAgMWUrNjAgMWUrMzI2ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI3NzYgZm1hICAxZSs2MCAxZSszMjcgICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc3NyBmbWEgIDFlKzYwIDFlKzMyOCAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzc4IGZtYSAgMWUrNjAgMWUrMzI5ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI3NzkgZm1hICAxZSs2MCAxZSszMzAgICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEyODAxIGZtYSAgIDEuMDAwMEUtMzk0ICAxICAgICAgIDBlKzM4NCAgLT4gIDEuMDAwMEUtMzk0IFN1Ym5vcm1hbAorZGRmbWEyODAyIGZtYSAgIDEuMDAwRS0zOTQgICAxZS0xICAgIDBlKzM4NCAgLT4gIDEuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRmbWEyODAzIGZtYSAgIDEuMDBFLTM5NCAgICAxZS0yICAgIDBlKzM4NCAgLT4gIDEuMDBFLTM5NiAgIFN1Ym5vcm1hbAorZGRmbWEyODA0IGZtYSAgIDEuMEUtMzk0ICAgICAxZS0zICAgIDBlKzM4NCAgLT4gIDEuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRmbWEyODA1IGZtYSAgIDEuMEUtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjgwNiBmbWEgICAxLjNFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MDcgZm1hICAgMS41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODA4IGZtYSAgIDEuN0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgwOSBmbWEgICAyLjNFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTAgZm1hICAgMi41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODExIGZtYSAgIDIuN0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxMiBmbWEgICAxLjQ5RS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTMgZm1hICAgMS41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODE0IGZtYSAgIDEuNTFFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxNSBmbWEgICAyLjQ5RS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTYgZm1hICAgMi41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODE3IGZtYSAgIDIuNTFFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEyODE4IGZtYSAgIDFFLTM5NCAgICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgU3Vibm9ybWFsCitkZGZtYTI4MTkgZm1hICAgM0UtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI4MjAgZm1hICAgNUUtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI4MjEgZm1hICAgN0UtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODIyIGZtYSAgIDlFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgyMyBmbWEgICA5LjlFLTM5NCAgICAgMWUtNSAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMjgyNCBmbWEgICAxRS0zOTQgICAgICAtMWUtNCAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFN1Ym5vcm1hbAorZGRmbWEyODI1IGZtYSAgIDNFLTM5NCAgICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODI2IGZtYSAgLTVFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODI3IGZtYSAgIDdFLTM5NCAgICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgyOCBmbWEgIC05RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MjkgZm1hICAgOS45RS0zOTQgICAgLTFlLTUgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODMwIGZtYSAgIDMuMEUtMzk0ICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkZGZtYTI4MzEgZm1hICAgMS4wRS0xOTkgICAgIDFlLTIwMCAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI4MzIgZm1hICAgMS4wRS0xOTkgICAgIDFlLTE5OSAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICBTdWJub3JtYWwgUm91bmRlZAorZGRmbWEyODMzIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0xOTggICAwZSszODQgIC0+ICAxLjBFLTM5NyAgICBTdWJub3JtYWwKK2RkZm1hMjgzNCBmbWEgICAyLjBFLTE5OSAgICAgMmUtMTk4ICAgMGUrMzg0ICAtPiAgNC4wRS0zOTcgICAgU3Vibm9ybWFsCitkZGZtYTI4MzUgZm1hICAgNC4wRS0xOTkgICAgIDRlLTE5OCAgIDBlKzM4NCAgLT4gIDEuNjBFLTM5NiAgIFN1Ym5vcm1hbAorZGRmbWEyODM2IGZtYSAgMTAuMEUtMTk5ICAgIDEwZS0xOTggICAwZSszODQgIC0+ICAxLjAwMEUtMzk1ICBTdWJub3JtYWwKK2RkZm1hMjgzNyBmbWEgIDMwLjBFLTE5OSAgICAzMGUtMTk4ICAgMGUrMzg0ICAtPiAgOS4wMDBFLTM5NSAgU3Vibm9ybWFsCitkZGZtYTI4MzggZm1hICA0MC4wRS0xOTkgICAgNDBlLTE4OCAgIDBlKzM4NCAgLT4gIDEuNjAwMEUtMzg0IFN1Ym5vcm1hbAorZGRmbWEyODM5IGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODcgICAwZSszODQgIC0+ICAxLjYwMDBFLTM4MworZGRmbWEyODQwIGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODYgICAwZSszODQgIC0+ICAxLjYwMDBFLTM4MgorCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK2RkZm1hMjg3MCBmbWEgIDEwMCAgOS45OTlFKzM4MyAgICAgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGRmbWEyODcxIGZtYSAgMTAwIC05Ljk5OUUrMzgzICAgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RkZm1hMjg3MiBmbWEgICAgICAgOS45OTlFKzM4MyAxMDAgICAwZSszODQgIC0+ICAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkZGZtYTI4NzMgZm1hICAgICAgLTkuOTk5RSszODMgMTAwICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworZGRmbWEyODgxIGZtYSAgIDEuMjM0N0UtMzU1IDEuMjM0N0UtNDAgICAgMGUrMzg0ICAtPiAgIDEuNTI0RS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg4MiBmbWEgICAxLjIzNEUtMzU1IDEuMjM0RS00MCAgICAgIDBlKzM4NCAgLT4gICAxLjUyM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4ODMgZm1hICAgMS4yM0UtMzU1ICAxLjIzRS00MCAgICAgICAwZSszODQgIC0+ICAgMS41MTNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODg0IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MCAgICAgICAgMGUrMzg0ICAtPiAgIDEuNDRFLTM5NSAgU3Vibm9ybWFsCitkZGZtYTI4ODUgZm1hICAgMS4yRS0zNTUgICAxLjJFLTQxICAgICAgICAwZSszODQgIC0+ICAgMS40NEUtMzk2ICBTdWJub3JtYWwKK2RkZm1hMjg4NiBmbWEgICAxLjJFLTM1NSAgIDEuMkUtNDIgICAgICAgIDBlKzM4NCAgLT4gICAxLjRFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZGZtYTI4ODcgZm1hICAgMS4yRS0zNTUgICAxLjNFLTQyICAgICAgICAwZSszODQgIC0+ICAgMS42RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRmbWEyODg4IGZtYSAgIDEuM0UtMzU1ICAgMS4zRS00MiAgICAgICAgMGUrMzg0ICAtPiAgIDEuN0UtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkZm1hMjg4OSBmbWEgICAxLjNFLTM1NSAgIDEuM0UtNDMgICAgICAgIDBlKzM4NCAgLT4gICAgIDJFLTM5OCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZGZtYTI4OTAgZm1hICAgMS4zRS0zNTYgICAxLjNFLTQzICAgICAgICAwZSszODQgIC0+ICAgICAwRS0zOTggICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK2RkZm1hMjg5MSBmbWEgICAxLjIzNDVFLTM5ICAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODkyIGZtYSAgIDEuMjM0NTZFLTM5ICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4OTMgZm1hICAgMS4yMzQ1RS00MCAgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg5NCBmbWEgICAxLjIzNDU2RS00MCAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODk1IGZtYSAgIDEuMjM0NUUtNDEgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4OTYgZm1hICAgMS4yMzQ1NkUtNDEgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MkUtMzk2ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdworZGRmbWEyOTAwIGZtYSAgIDAuMzAwMDAwMDAwMEUtMTkxIDAuMzAwMDAwMDAwMEUtMTkxICAgMGUrMzg0ICAtPiAgOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI5MDEgZm1hICAgMC4zMDAwMDAwMDAxRS0xOTEgMC4zMDAwMDAwMDAxRS0xOTEgICAwZSszODQgIC0+ICA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjkwMiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZGRmbWEyOTAzIGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTkgICAgICAgICAgMGUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI5MDQgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTkgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjkwNSBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0CitkZGZtYTI5MDYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCitkZGZtYTI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSszODQgIC0+ICAwLjA5OTk5OTk5OTk5OTk5OTk5CistLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbgorZGRmbWEyOTA4IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCistLSBodWdlc3QKK2RkZm1hMjkwOSBmbWEgICA5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTkgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzEgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bGwgdGVzdHMKK2RkZm1hMjk5MCBmbWEgIDEwICAjICAgMGUrMzg0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI5OTEgZm1hICAgIyAxMCAgIDBlKzM4NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKKy0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2RkZm1hMzAwMSBmbWEgIDEgIDEgICAgICAgMSAgICAgICAtPiAgMgorZGRmbWEzMDAyIGZtYSAgMSAgMiAgICAgICAzICAgICAgIC0+ICA1CitkZGZtYTMwMDMgZm1hICAxICAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2RkZm1hMzAwNCBmbWEgIDEgICc1JyAgICAgJy0zJyAgICAtPiAgMgorZGRmbWEzMDA1IGZtYSAgMSAgJy01JyAgICAnLTMnICAgIC0+ICAtOAorZGRmbWEzMDA2IGZtYSAgMSAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CitkZGZtYTMwMDcgZm1hICAxICAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorZGRmbWEzMDA4IGZtYSAgMSAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCitkZGZtYTMwMDkgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2RkZm1hMzAxMCBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCistLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRmbWEzMDExIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTIgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZGZtYTMwMTMgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKK2RkZm1hMzAxNCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxNSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxNiBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxNyBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxOCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAxOSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAyMCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzMDIxIGZtYSAgMSAgMCAxIC0+IDEKK2RkZm1hMzAyMiBmbWEgIDEgIDEgMSAtPiAyCitkZGZtYTMwMjMgZm1hICAxICAyIDEgLT4gMworZGRmbWEzMDI0IGZtYSAgMSAgMyAxIC0+IDQKK2RkZm1hMzAyNSBmbWEgIDEgIDQgMSAtPiA1CitkZGZtYTMwMjYgZm1hICAxICA1IDEgLT4gNgorZGRmbWEzMDI3IGZtYSAgMSAgNiAxIC0+IDcKK2RkZm1hMzAyOCBmbWEgIDEgIDcgMSAtPiA4CitkZGZtYTMwMjkgZm1hICAxICA4IDEgLT4gOQorZGRmbWEzMDMwIGZtYSAgMSAgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworZGRmbWEzMDMxIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitkZGZtYTMwMzIgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2RkZm1hMzAzMyBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworZGRmbWEzMDM0IGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2RkZm1hMzAzNSBmbWEgIDEgICc3MCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDM2IGZtYSAgMSAgJzcwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDM3IGZtYSAgMSAgJzcwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAzOCBmbWEgIDEgICc3MDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDM5IGZtYSAgMSAgJzcwMDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQKKworLS0gc3ltbWV0cnk6CitkZGZtYTMwNDAgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzA0MSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzA0MiBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwNDQgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzA0NSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKKy0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcKK2RkZm1hMzA0NiBmbWEgIDEgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCitkZGZtYTMwNDcgZm1hICAxICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2RkZm1hMzA0OCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2RkZm1hMzA0OSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCitkZGZtYTMwNTAgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2RkZm1hMzA1MSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKK2RkZm1hMzA1MiBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RkZm1hMzA1MyBmbWEgIDEgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2RkZm1hMzA1NCBmbWEgIDEgICcxLjMnICctMS4wNycgLT4gJzAuMjMnCitkZGZtYTMwNTUgZm1hICAxICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworZGRmbWEzMDU2IGZtYSAgMSAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCitkZGZtYTMwNTcgZm1hICAxICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uCitkZGZtYTMwNjEgZm1hICAxICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCitkZGZtYTMwNjIgZm1hICAxICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2RkZm1hMzA2MyBmbWEgIDEgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCitkZGZtYTMwNjQgZm1hICAxICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCitkZGZtYTMwNjUgZm1hICAxICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZGRmbWEzMDcwIGZtYSAgMSAgMSAgMCAgICAtPiAxCitkZGZtYTMwNzEgZm1hICAxICAxIDAuICAgIC0+IDEKK2RkZm1hMzA3MiBmbWEgIDEgIDEgIC4wICAgLT4gMS4wCitkZGZtYTMwNzMgZm1hICAxICAxIDAuMCAgIC0+IDEuMAorZGRmbWEzMDc0IGZtYSAgMSAgMSAwLjAwICAtPiAxLjAwCitkZGZtYTMwNzUgZm1hICAxICAgMCAgMSAgIC0+IDEKK2RkZm1hMzA3NiBmbWEgIDEgIDAuICAxICAgLT4gMQorZGRmbWEzMDc3IGZtYSAgMSAgIC4wIDEgICAtPiAxLjAKK2RkZm1hMzA3OCBmbWEgIDEgIDAuMCAxICAgLT4gMS4wCitkZGZtYTMwNzkgZm1hICAxICAwLjAwIDEgIC0+IDEuMDAKKworLS0gc29tZSBjYXJyaWVzCitkZGZtYTMwODAgZm1hICAxICA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5CitkZGZtYTMwODEgZm1hICAxICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAorZGRmbWEzMDgyIGZtYSAgMSAgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAorZGRmbWEzMDgzIGZtYSAgMSAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCitkZGZtYTMwODQgZm1hICAxICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAorZGRmbWEzMDg1IGZtYSAgMSAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorZGRmbWEzMDg2IGZtYSAgMSAgICAgICA5OTk5IDEgIC0+IDEwMDAwCitkZGZtYTMwODcgZm1hICAxICAgICAgICA5OTkgMSAgLT4gMTAwMAorZGRmbWEzMDg4IGZtYSAgMSAgICAgICAgIDk5IDEgIC0+IDEwMAorZGRmbWEzMDg5IGZtYSAgMSAgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2RkZm1hMzA5MCBmbWEgIDEgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZGRmbWEzMDkxIGZtYSAgMSAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2RkZm1hMzA5MiBmbWEgIDEgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2RkZm1hMzA5MyBmbWEgIDEgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZGRmbWEzMDk0IGZtYSAgMSAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkZGZtYTMwOTUgZm1hICAxICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2RkZm1hMzA5NiBmbWEgIDEgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZGRmbWEzMDk3IGZtYSAgMSAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2RkZm1hMzA5OCBmbWEgIDEgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitkZGZtYTMwOTkgZm1hICAxICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkZGZtYTMxMDAgZm1hICAxICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZGRmbWEzMTAxIGZtYSAgMSAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZGRmbWEzMTAyIGZtYSAgMSAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkZGZtYTMxMDMgZm1hICAxICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2RkZm1hMzEwNCBmbWEgIDEgICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2RkZm1hMzEwNSBmbWEgIDEgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkZGZtYTMxMDYgZm1hICAxICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2RkZm1hMzEwNyBmbWEgIDEgICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2RkZm1hMzEwOCBmbWEgIDEgICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZAorZGRmbWEzMTA5IGZtYSAgMSAgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkCitkZGZtYTMxMTAgZm1hICAxICAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQKK2RkZm1hMzExMSBmbWEgIDEgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZGRmbWEzMTEzIGZtYSAgMSAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RkZm1hMzExNCBmbWEgIDEgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2RkZm1hMzExNiBmbWEgIDEgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZGRmbWEzMTE3IGZtYSAgMSAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2RkZm1hMzExOSBmbWEgIDEgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCitkZGZtYTMxMjAgZm1hICAxICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZGRmbWEzMTIxIGZtYSAgMSAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2RkZm1hMzEyMiBmbWEgIDEgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2RkZm1hMzEyMyBmbWEgIDEgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2RkZm1hMzEyNCBmbWEgIDEgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZGRmbWEzMTI1IGZtYSAgMSAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworZGRmbWEzMTI2IGZtYSAgMSAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitkZGZtYTMxMjcgZm1hICAxICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZGRmbWEzMTI4IGZtYSAgMSAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2RkZm1hMzEyOSBmbWEgIDEgIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZGRmbWEzMTMwIGZtYSAgMSAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZGRmbWEzMTMxIGZtYSAgMSAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2RkZm1hMzEzMiBmbWEgIDEgIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZGRmbWEzMTMzIGZtYSAgMSAgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCitkZGZtYTMxMzQgZm1hICAxICAwICAnLTVFMTcnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQKK2RkZm1hMzEzNSBmbWEgIDEgIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZAorZGRmbWEzMTM2IGZtYSAgMSAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2RkZm1hMzEzNyBmbWEgIDEgICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RkZm1hMzEzOCBmbWEgIDEgIC0xICAnMEUtMTknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RkZm1hMzEzOSBmbWEgIDEgICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RkZm1hMzE0MCBmbWEgIDEgICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RkZm1hMzE0MSBmbWEgIDEgIDFFKzExICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcKK2RkZm1hMzE0MiBmbWEgIDEgIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKK2RkZm1hMzE0MyBmbWEgIDEgIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcKK2RkZm1hMzE0NCBmbWEgIDEgIDAuMDAwMCAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2RkZm1hMzE0NiBmbWEgIDEgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2RkZm1hMzE0NyBmbWEgIDEgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCitkZGZtYTMxNDggZm1hICAxICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZGRmbWEzMTQ5IGZtYSAgMSAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworZGRmbWEzMTUwIGZtYSAgMSAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RkZm1hMzE1MSBmbWEgIDEgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitkZGZtYTMxNTIgZm1hICAxICAnMycgICAgICcuMycgICAgLT4gICczLjMnCitkZGZtYTMxNTMgZm1hICAxICAnMy4nICAgICcuMycgICAgLT4gICczLjMnCitkZGZtYTMxNTQgZm1hICAxICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitkZGZtYTMxNTUgZm1hICAxICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworZGRmbWEzMTU2IGZtYSAgMSAgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2RkZm1hMzE1NyBmbWEgIDEgICczJyAgICAgJyszJyAgICAtPiAgJzYnCitkZGZtYTMxNTggZm1hICAxICAnMycgICAgICctMycgICAgLT4gICcwJworZGRmbWEzMTU5IGZtYSAgMSAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworZGRmbWEzMTYwIGZtYSAgMSAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2RkZm1hMzE2MSBmbWEgIDEgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JworZGRmbWEzMTYyIGZtYSAgMSAgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZGRmbWEzMTYzIGZtYSAgMSAgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZGRmbWEzMTY0IGZtYSAgMSAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCitkZGZtYTMxNjUgZm1hICAxICAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCitkZGZtYTMxNjYgZm1hICAxICAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkZGZtYTMxNjcgZm1hICAxICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkZGZtYTMxNjggZm1hICAxICAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCisKK3JvdW5kaW5nOiBoYWxmX3VwCistLSAgICAgICAgICAgMS4yMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKK2RkZm1hMzE3MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTcyIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE3MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzQgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTc1IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE3NiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzcgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQKK2RkZm1hMzE3OCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzkgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTgwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE4MSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxODIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTgzIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGZtYTMyMDAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKK2RkZm1hMzIwMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIwOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRmbWEzMjE3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjE4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjE5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZGZtYTMyMjAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKK2RkZm1hMzIyMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIyOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRmbWEzMjM3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjM4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjM5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RkZm1hMzI0MCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI0MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI0MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkZm1hMzI1MCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JworZGRmbWEzMjUxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjUyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjUzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjU5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjYwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjYxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjYyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjYzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnCitkZGZtYTMyNjcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyNjggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyNjkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfdXAKK2RkZm1hMzMwMSBmbWEgIDEgICAtMSAgIDEgICAgICAtPiAgIDAKK2RkZm1hMzMwMiBmbWEgIDEgICAgMCAgIDEgICAgICAtPiAgIDEKK2RkZm1hMzMwMyBmbWEgIDEgICAgMSAgIDEgICAgICAtPiAgIDIKK2RkZm1hMzMwNCBmbWEgIDEgICAxMiAgIDEgICAgICAtPiAgMTMKK2RkZm1hMzMwNSBmbWEgIDEgICA5OCAgIDEgICAgICAtPiAgOTkKK2RkZm1hMzMwNiBmbWEgIDEgICA5OSAgIDEgICAgICAtPiAxMDAKK2RkZm1hMzMwNyBmbWEgIDEgIDEwMCAgIDEgICAgICAtPiAxMDEKK2RkZm1hMzMwOCBmbWEgIDEgIDEwMSAgIDEgICAgICAtPiAxMDIKK2RkZm1hMzMwOSBmbWEgIDEgICAtMSAgLTEgICAgICAtPiAgLTIKK2RkZm1hMzMxMCBmbWEgIDEgICAgMCAgLTEgICAgICAtPiAgLTEKK2RkZm1hMzMxMSBmbWEgIDEgICAgMSAgLTEgICAgICAtPiAgIDAKK2RkZm1hMzMxMiBmbWEgIDEgICAxMiAgLTEgICAgICAtPiAgMTEKK2RkZm1hMzMxMyBmbWEgIDEgICA5OCAgLTEgICAgICAtPiAgOTcKK2RkZm1hMzMxNCBmbWEgIDEgICA5OSAgLTEgICAgICAtPiAgOTgKK2RkZm1hMzMxNSBmbWEgIDEgIDEwMCAgLTEgICAgICAtPiAgOTkKK2RkZm1hMzMxNiBmbWEgIDEgIDEwMSAgLTEgICAgICAtPiAxMDAKKworZGRmbWEzMzIxIGZtYSAgMSAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2RkZm1hMzMyMiBmbWEgIDEgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCitkZGZtYTMzMjMgZm1hICAxICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorZGRmbWEzMzI0IGZtYSAgMSAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2RkZm1hMzMyNSBmbWEgIDEgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5CitkZGZtYTMzMjYgZm1hICAxICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorZGRmbWEzMzI3IGZtYSAgMSAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2RkZm1hMzMyOCBmbWEgIDEgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCitkZGZtYTMzMjkgZm1hICAxICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorZGRmbWEzMzMwIGZtYSAgMSAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2RkZm1hMzMzMSBmbWEgIDEgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCitkZGZtYTMzMzIgZm1hICAxICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorZGRmbWEzMzMzIGZtYSAgMSAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2RkZm1hMzMzNCBmbWEgIDEgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4CitkZGZtYTMzMzUgZm1hICAxICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorZGRmbWEzMzM2IGZtYSAgMSAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitkZGZtYTMzNDAgZm1hICAxICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCitkZGZtYTMzNDEgZm1hICAxICAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMAorZGRmbWEzMzQyIGZtYSAgMSAgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCitkZGZtYTMzNDMgZm1hICAxICAxRSsyMCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2RkZm1hMzM0NCBmbWEgIDEgIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2RkZm1hMzM0NSBmbWEgIDEgIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxCitkZGZtYTMzNDYgZm1hICAxICAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMzQ3IGZtYSAgMSAgMUUrMjAgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzM0OCBmbWEgIDEgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2RkZm1hMzM0OSBmbWEgIDEgIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3CitkZGZtYTMzNTAgZm1hICAxICAxRSsxNiAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMzUxIGZtYSAgMSAgMUUrMjAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGZtYTMzNjAgIGZtYSAgMSAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorZGRmbWEzMzYxICBmbWEgIDEgIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkCitkZGZtYTMzNjIgIGZtYSAgMSAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQKK2RkZm1hMzM2MyAgZm1hICAxICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzMzY0ICBmbWEgIDEgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMEUrMzY5CisKKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK2RkZm1hMzM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQKK2RkZm1hMzM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGZtYTMzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0CitkZGZtYTMzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitkZGZtYTMzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0CitkZGZtYTMzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0CisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworZGRmbWEzNDAwIGZtYSAgMSAgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQwMSBmbWEgIDEgICAgMSAgIDc3ZS0xNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworZGRmbWEzNDAyIGZtYSAgMSAgICAxICAgNzdlLTE2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDAzIGZtYSAgMSAgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDA0IGZtYSAgMSAgICAxICAgNzdlLTE4ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDA1IGZtYSAgMSAgICAxICAgNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDA2IGZtYSAgMSAgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM0MTAgZm1hICAxICAgMTAgICA3N2UtMTQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQxMSBmbWEgIDEgICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxMiBmbWEgIDEgICAxMCAgIDc3ZS0xNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxMyBmbWEgIDEgICAxMCAgIDc3ZS0xNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxNCBmbWEgIDEgICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxNSBmbWEgIDEgICAxMCAgIDc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQxNiBmbWEgIDEgICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNDIwIGZtYSAgMSAgIDc3ZS0xNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQyMSBmbWEgIDEgICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworZGRmbWEzNDIyIGZtYSAgMSAgIDc3ZS0xNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDIzIGZtYSAgMSAgIDc3ZS0xNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDI0IGZtYSAgMSAgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDI1IGZtYSAgMSAgIDc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNDI2IGZtYSAgMSAgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM0MzAgZm1hICAxICAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQzMSBmbWEgIDEgICA3N2UtMTUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzMiBmbWEgIDEgICA3N2UtMTYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzMyBmbWEgIDEgICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzNCBmbWEgIDEgICA3N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzNSBmbWEgIDEgICA3N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQzNiBmbWEgIDEgICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZGRmbWEzNjQ0MCBmbWEgIDEgICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ0MSBmbWEgIDEgICAgMSAgIC03N2UtMTUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NDIgZm1hICAxICAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ0MyBmbWEgIDEgICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ0NCBmbWEgIDEgICAgMSAgIC03N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ0NSBmbWEgIDEgICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDQ2IGZtYSAgMSAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjQ1MCBmbWEgIDEgICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NTEgZm1hICAxICAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ1MiBmbWEgIDEgICAxMCAgIC03N2UtMTYgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ1MyBmbWEgIDEgICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ1NCBmbWEgIDEgICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDU1IGZtYSAgMSAgIDEwICAgLTc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NTYgZm1hICAxICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM2NDYwIGZtYSAgMSAgIC03N2UtMTQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDYxIGZtYSAgMSAgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ2MiBmbWEgIDEgICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDYzIGZtYSAgMSAgIC03N2UtMTcgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDY0IGZtYSAgMSAgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDY1IGZtYSAgMSAgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NjYgZm1hICAxICAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM2NDcwIGZtYSAgMSAgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ3MSBmbWEgIDEgICAtNzdlLTE1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDcyIGZtYSAgMSAgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDczIGZtYSAgMSAgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDc0IGZtYSAgMSAgIC03N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NzUgZm1hICAxICAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ3NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RkZm1hMzY0ODAgZm1hICAxICAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDgxIGZtYSAgMSAgIC0xICAgIDc3ZS0xNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0ODIgZm1hICAxICAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0ODMgZm1hICAxICAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDg0IGZtYSAgMSAgIC0xICAgIDc3ZS0xOCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ4NSBmbWEgIDEgICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ4NiBmbWEgIDEgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM2NDkwIGZtYSAgMSAgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0OTEgZm1hICAxICAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0OTIgZm1hICAxICAtMTAgICAgNzdlLTE2ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDkzIGZtYSAgMSAgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ5NCBmbWEgIDEgIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ5NSBmbWEgIDEgIC0xMCAgICA3N2UtMTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ5NiBmbWEgIDEgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM2NTAwIGZtYSAgMSAgICA3N2UtMTQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworZGRmbWEzNjUwMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NTAyIGZtYSAgMSAgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NTAzIGZtYSAgMSAgICA3N2UtMTcgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUwNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MDUgZm1hICAxICAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MDYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjUxMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NTExIGZtYSAgMSAgICA3N2UtMTUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NTEyIGZtYSAgMSAgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUxMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MTQgZm1hICAxICAgIDc3ZS0xOCAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MTUgZm1hICAxICAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MTYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIGEgY291cGxlIG1vcmUgd2l0aCBsb25nZXIgUkhTCitkZGZtYTM2NTIwIGZtYSAgMSAgICAxICAgLTc3NzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjIyMworZGRmbWEzNjUyMSBmbWEgIDEgICAgMSAgIC03Nzc3ZS0xNyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMjIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTIyIGZtYSAgMSAgICAxICAgLTc3NzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MjMgZm1hICAxICAgIDEgICAtNzc3N2UtMTkgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUyNCBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTI1IGZtYSAgMSAgICAxICAgLTc3NzdlLTIxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUyNiBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworCistLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2RkZm1hMzY1NDAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkZm1hMzY1NDEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQ1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQ4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTUxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTU0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkZm1hMzY1NTcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTU4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRmbWEzNjU2MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZGRmbWEzNjU2MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTYzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTY2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTY5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTcyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTc1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZGRmbWEzNjU3NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTc5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZGRmbWEzNzU0MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NDEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTQyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRmbWEzNzU1MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZGRmbWEzNzU1MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTUzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTU2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTU5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTYyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTY1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZGRmbWEzNzU2NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTY5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCisKKy0tIHZlcmlmeSBhIHF1ZXJ5Cityb3VuZGluZzogICAgIGRvd24KK2RkZm1hMzc2NjEgZm1hICAxICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzY2MiBmbWEgIDEgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAorZGRmbWEzNzY2MyBmbWEgIDEgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NjY0IGZtYSAgMSAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZGRmbWEzNzcwMSBmbWEgIDEgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCitkZGZtYTM3NzAyIGZtYSAgMSAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCitkZGZtYTM3NzAzIGZtYSAgMSAgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCitkZGZtYTM3NzA0IGZtYSAgMSAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2RkZm1hMzc3MTAgZm1hICAxICAwRSszICAwMC4wMCAgLT4gMC4wMAorZGRmbWEzNzcxMSBmbWEgIDEgIDBFKzMgIDAwLjAgICAtPiAwLjAKK2RkZm1hMzc3MTIgZm1hICAxICAwRSszICAwMC4gICAgLT4gMAorZGRmbWEzNzcxMyBmbWEgIDEgIDBFKzMgIDAwLkUrMSAtPiAwRSsxCitkZGZtYTM3NzE0IGZtYSAgMSAgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2RkZm1hMzc3MTUgZm1hICAxICAwRSszICAwMC5FKzMgLT4gMEUrMworZGRmbWEzNzcxNiBmbWEgIDEgIDBFKzMgIDAwLkUrNCAtPiAwRSszCitkZGZtYTM3NzE3IGZtYSAgMSAgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2RkZm1hMzc3MTggZm1hICAxICAwRSszICAtMDAuMCAgIC0+IDAuMAorZGRmbWEzNzcxOSBmbWEgIDEgIDBFKzMgIC0wMC4gICAgLT4gMAorZGRmbWEzNzczMSBmbWEgIDEgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCitkZGZtYTM3NzIwIGZtYSAgMSAgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2RkZm1hMzc3MjEgZm1hICAxICAwMC4wICAgMEUrMyAgLT4gMC4wCitkZGZtYTM3NzIyIGZtYSAgMSAgMDAuICAgIDBFKzMgIC0+IDAKK2RkZm1hMzc3MjMgZm1hICAxICAwMC5FKzEgMEUrMyAgLT4gMEUrMQorZGRmbWEzNzcyNCBmbWEgIDEgIDAwLkUrMiAwRSszICAtPiAwRSsyCitkZGZtYTM3NzI1IGZtYSAgMSAgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2RkZm1hMzc3MjYgZm1hICAxICAwMC5FKzQgMEUrMyAgLT4gMEUrMworZGRmbWEzNzcyNyBmbWEgIDEgIDAwLkUrNSAwRSszICAtPiAwRSszCitkZGZtYTM3NzI4IGZtYSAgMSAgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2RkZm1hMzc3MjkgZm1hICAxICAtMDAuMCAgMEUrMyAgLT4gMC4wCitkZGZtYTM3NzMwIGZtYSAgMSAgLTAwLiAgIDBFKzMgIC0+IDAKKworZGRmbWEzNzczMiBmbWEgIDEgICAwICAgICAwICAgICAtPiAgMAorZGRmbWEzNzczMyBmbWEgIDEgICAwICAgIC0wICAgICAtPiAgMAorZGRmbWEzNzczNCBmbWEgIDEgIC0wICAgICAwICAgICAtPiAgMAorZGRmbWEzNzczNSBmbWEgIDEgIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCisKK2RkZm1hMzc3MzYgZm1hICAxICAgMSAgICAtMSAgICAgLT4gIDAKK2RkZm1hMzc3MzcgZm1hICAxICAtMSAgICAtMSAgICAgLT4gLTIKK2RkZm1hMzc3MzggZm1hICAxICAgMSAgICAgMSAgICAgLT4gIDIKK2RkZm1hMzc3MzkgZm1hICAxICAtMSAgICAgMSAgICAgLT4gIDAKKworZGRmbWEzNzc0MSBmbWEgIDEgICAwICAgIC0xICAgICAtPiAtMQorZGRmbWEzNzc0MiBmbWEgIDEgIC0wICAgIC0xICAgICAtPiAtMQorZGRmbWEzNzc0MyBmbWEgIDEgICAwICAgICAxICAgICAtPiAgMQorZGRmbWEzNzc0NCBmbWEgIDEgIC0wICAgICAxICAgICAtPiAgMQorZGRmbWEzNzc0NSBmbWEgIDEgIC0xICAgICAwICAgICAtPiAtMQorZGRmbWEzNzc0NiBmbWEgIDEgIC0xICAgIC0wICAgICAtPiAtMQorZGRmbWEzNzc0NyBmbWEgIDEgICAxICAgICAwICAgICAtPiAgMQorZGRmbWEzNzc0OCBmbWEgIDEgICAxICAgIC0wICAgICAtPiAgMQorCitkZGZtYTM3NzUxIGZtYSAgMSAgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2RkZm1hMzc3NTIgZm1hICAxICAtMC4wICAtMSAgICAgLT4gLTEuMAorZGRmbWEzNzc1MyBmbWEgIDEgICAwLjAgICAxICAgICAtPiAgMS4wCitkZGZtYTM3NzU0IGZtYSAgMSAgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2RkZm1hMzc3NTUgZm1hICAxICAtMS4wICAgMCAgICAgLT4gLTEuMAorZGRmbWEzNzc1NiBmbWEgIDEgIC0xLjAgIC0wICAgICAtPiAtMS4wCitkZGZtYTM3NzU3IGZtYSAgMSAgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2RkZm1hMzc3NTggZm1hICAxICAgMS4wICAtMCAgICAgLT4gIDEuMAorCitkZGZtYTM3NzYxIGZtYSAgMSAgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NjIgZm1hICAxICAtMCAgICAtMS4wICAgLT4gLTEuMAorZGRmbWEzNzc2MyBmbWEgIDEgICAwICAgICAxLjAgICAtPiAgMS4wCitkZGZtYTM3NzY0IGZtYSAgMSAgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2RkZm1hMzc3NjUgZm1hICAxICAtMSAgICAgMC4wICAgLT4gLTEuMAorZGRmbWEzNzc2NiBmbWEgIDEgIC0xICAgIC0wLjAgICAtPiAtMS4wCitkZGZtYTM3NzY3IGZtYSAgMSAgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2RkZm1hMzc3NjggZm1hICAxICAgMSAgICAtMC4wICAgLT4gIDEuMAorCitkZGZtYTM3NzcxIGZtYSAgMSAgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NzIgZm1hICAxICAtMC4wICAtMS4wICAgLT4gLTEuMAorZGRmbWEzNzc3MyBmbWEgIDEgICAwLjAgICAxLjAgICAtPiAgMS4wCitkZGZtYTM3Nzc0IGZtYSAgMSAgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2RkZm1hMzc3NzUgZm1hICAxICAtMS4wICAgMC4wICAgLT4gLTEuMAorZGRmbWEzNzc3NiBmbWEgIDEgIC0xLjAgIC0wLjAgICAtPiAtMS4wCitkZGZtYTM3Nzc3IGZtYSAgMSAgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2RkZm1hMzc3NzggZm1hICAxICAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworZGRmbWEzNzc4MCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODEgZm1hICAxICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZGZtYTM3NzgyIGZtYSAgMSAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4MyBmbWEgIDEgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODQgZm1hICAxICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzg1IGZtYSAgMSAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4NiBmbWEgIDEgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODcgZm1hICAxICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzg4IGZtYSAgMSAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4OSBmbWEgIDEgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3OTAgZm1hICAxICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3NzkxIGZtYSAgMSAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc5MiBmbWEgIDEgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3OTMgZm1hICAxICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzk0IGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RkZm1hMzc4MDAgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4MDEgZm1hICAxICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZGZtYTM3ODAyIGZtYSAgMSAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwMyBmbWEgIDEgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDQgZm1hICAxICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODA1IGZtYSAgMSAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwNiBmbWEgIDEgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDcgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODA4IGZtYSAgMSAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwOSBmbWEgIDEgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzgxMCBmbWEgIDEgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MTEgZm1hICAxICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODEyIGZtYSAgMSAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgxMyBmbWEgIDEgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MTQgZm1hICAxICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODE1IGZtYSAgMSAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZGZtYTM3ODIxIGZtYSAgMSAgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkZm1hMzc4MjIgZm1hICAxICAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRmbWEzNzgyMyBmbWEgIDEgICBOYU4gLTEgICAgICAtPiAgTmFOCitkZGZtYTM3ODI0IGZtYSAgMSAgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkZm1hMzc4MjUgZm1hICAxICAgTmFOICAwICAgICAgLT4gIE5hTgorZGRmbWEzNzgyNiBmbWEgIDEgICBOYU4gIDEgICAgICAtPiAgTmFOCitkZGZtYTM3ODI3IGZtYSAgMSAgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkZm1hMzc4MjggZm1hICAxICAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRmbWEzNzgyOSBmbWEgIDEgICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODMwIGZtYSAgMSAgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzEgZm1hICAxICAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzMiBmbWEgIDEgIC0xICAgIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODMzIGZtYSAgMSAgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzQgZm1hICAxICAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzNSBmbWEgIDEgICAxICAgIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODM2IGZtYSAgMSAgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzcgZm1hICAxICAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZGZtYTM3ODQxIGZtYSAgMSAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQyIGZtYSAgMSAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQzIGZtYSAgMSAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ0IGZtYSAgMSAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ1IGZtYSAgMSAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ2IGZtYSAgMSAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ3IGZtYSAgMSAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ4IGZtYSAgMSAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODQ5IGZtYSAgMSAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODUwIGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODUxIGZtYSAgMSAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODUyIGZtYSAgMSAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODUzIGZtYSAgMSAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU0IGZtYSAgMSAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU1IGZtYSAgMSAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU2IGZtYSAgMSAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU3IGZtYSAgMSAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU4IGZtYSAgMSAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODU5IGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkZm1hMzc4NjEgZm1hICAxICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RkZm1hMzc4NjIgZm1hICAxICArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RkZm1hMzc4NjMgZm1hICAxICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2RkZm1hMzc4NjQgZm1hICAxICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RkZm1hMzc4NjUgZm1hICAxICAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RkZm1hMzc4NjYgZm1hICAxICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2RkZm1hMzc4NjcgZm1hICAxICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RkZm1hMzc4NjggZm1hICAxICAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RkZm1hMzc4NjkgZm1hICAxICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkZGZtYTM3ODcxIGZtYSAgMSAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzIgZm1hICAxICAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3MyBmbWEgIDEgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODc0IGZtYSAgMSAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzUgZm1hICAxICAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3NiBmbWEgIDEgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODc3IGZtYSAgMSAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzggZm1hICAxICAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3OSBmbWEgIDEgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODgwIGZtYSAgMSAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4ODEgZm1hICAxICArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg4MiBmbWEgIDEgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2RkZm1hMzc4ODMgZm1hICAxICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg4NCBmbWEgIDEgICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RkZm1hMzc4ODUgZm1hICAxICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBIZXJlIHdlIGV4cGxvcmUgbmVhciB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgorZGRmbWEzNzU3NSBmbWEgIDEgICAxRS0zODMgLTFFLTM5OCAtPiAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2RkZm1hMzc1NzYgZm1hICAxICAtMUUtMzgzICsxRS0zOTggLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCisKKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGZtYTM3OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkZm1hMzc5NzMgZm1hICAxICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTc0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3NSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3NiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3NyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3OCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3OSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4MCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4MSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTgyIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODMgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkZm1hMzc5ODYgZm1hICAxICAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTg4IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4OSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5OTAgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOEUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTkxIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5MiBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5OTMgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTk0IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTk1IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTk2IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTJFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTk3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitkZGZtYTM3MTEwMCBmbWEgIDEgIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTAxIGZtYSAgMSAgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTAzIGZtYSAgMSAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwNCBmbWEgIDEgIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTA1IGZtYSAgMSAgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTA2IGZtYSAgMSAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwNyBmbWEgIDEgIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTA4IGZtYSAgMSAgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTA5IGZtYSAgMSAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitkZGZtYTM3MTExMCBmbWEgIDEgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExMSBmbWEgIDEgIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTMgZm1hICAxICAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExNCBmbWEgIDEgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExNSBmbWEgIDEgIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTYgZm1hICAxICAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExNyBmbWEgIDEgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTExOCBmbWEgIDEgIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTkgZm1hICAxICAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2RkZm1hMzcxMzAwIGZtYSAgMSAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzEwIGZtYSAgMSAgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzExIGZtYSAgMSAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzEyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzEzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE4IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzE5IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzIwIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzIxIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzIyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzIzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI4IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzI5IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzMwIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzMxIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzMyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzMzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM4IGZtYSAgMSAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzM5IGZtYSAgMSAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNzEzNDAgZm1hICAxICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNDEgZm1hICAxICAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM3MTM0OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzUxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzU0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzU3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzYwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzYzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzY3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzcwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzc2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzc5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzgyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzg1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzg4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzkxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM5MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzk0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM5NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK2RkZm1hMzcxNDIwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDIyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDIzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDI1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDI2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZGRmbWEzNzE0MjggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2RkZm1hMzcxNDI5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitkZGZtYTM3MTQzMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RkZm1hMzcxNDMxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZGRmbWEzNzE0MzIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitkZGZtYTM3MTQzMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RkZm1hMzcxNDM0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZGRmbWEzNzE0MzUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitkZGZtYTM3MTQzNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RkZm1hMzcxNDM3IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZGRmbWEzNzE0MzggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitkZGZtYTM3MTQzOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorZGRmbWEzNzE0NDAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQyIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQ1IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NDcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZGRmbWEzNzE0NDggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZGRmbWEzNzE0NDkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZGRmbWEzNzE0NTAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RkZm1hMzcxNDUxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitkZGZtYTM3MTQ1MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZGRmbWEzNzE0NTMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RkZm1hMzcxNDU0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitkZGZtYTM3MTQ1NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZGRmbWEzNzE0NTYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RkZm1hMzcxNDU3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitkZGZtYTM3MTQ1OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZGRmbWEzNzE0NTkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2RkZm1hMzcxNDYwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDYzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDY2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDY5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NzAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ3MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDcyIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NzMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ3NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDc1IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorZGRmbWEzNzE0NzYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RkZm1hMzcxNDc3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkZGZtYTM3MTQ3OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZGRmbWEzNzE0NzkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTUwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUwMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1MTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTUyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUyMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTUyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTU0MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU0MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU0MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1NTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkZm1hMzcxNTYwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNTYxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNTYyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNTYzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGZtYTM3MTU3MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGZtYTM3MTU3MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTU4MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU4MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU4MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU4MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1OTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1OTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgY2VpbGluZworLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE2MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE2MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE2MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE2MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNjExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNjEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkZm1hMzcxNjIwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNjIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RkZm1hMzcxNjIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RkZm1hMzcxNjIzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGZtYTM3MTYzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCitkZGZtYTM3MTYzMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZGRmbWEzNzE3MDEgZm1hICAxICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKK2RkZm1hMzcxNzAyIGZtYSAgMSAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCitkZGZtYTM3MTcwMyBmbWEgIDEgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAorZGRmbWEzNzE3MDQgZm1hICAxICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKK2RkZm1hMzcxNzA1IGZtYSAgMSAgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwCitkZGZtYTM3MTcwNiBmbWEgIDEgIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMAorZGRmbWEzNzE3MDcgZm1hICAxICAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzAKK2RkZm1hMzcxNzA4IGZtYSAgMSAgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszCisKKy0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZGRmbWEzNzUwMDEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3CitkZGZtYTM3NTAwMiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDMgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDA0IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAwNSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDYgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDA3IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAwOCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDkgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDEwIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxMSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTIgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDEzIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxNCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTUgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDE2IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxNyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTggZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDE5IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAyMCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMjEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAorZGRmbWEzNzUwMzAgZm1hICAxICAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQorZGRmbWEzNzUwMzEgZm1hICAxICAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xCitkZGZtYTM3NTAzMiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyCitkZGZtYTM3NTAzMyBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMworZGRmbWEzNzUwMzQgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0CitkZGZtYTM3NTAzNSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1CitkZGZtYTM3NTAzNiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NgorZGRmbWEzNzUwMzcgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3CitkZGZtYTM3NTAzOCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4CitkZGZtYTM3NTAzOSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDAgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQxIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0MiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDMgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQ0IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0NSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDYgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQ3IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0OCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDkgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Cityb3VuZGluZzogaGFsZl9ldmVuCitkZGZtYTM3NTA1MCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTEgZm1hICAxICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDUyIGZtYSAgMSAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA1MyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTQgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDU1IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA1NiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTcgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDYwIGZtYSAgMSAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjIgZm1hICAxICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDYzIGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjUgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDY2IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQorcm91bmRpbmc6IHVwCitkZGZtYTM3NTA3MCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxCitkZGZtYTM3NTA3MSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzIgZm1hICAxICAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDczIGZtYSAgMSAgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3NCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzUgZm1hICAxICAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDc2IGZtYSAgMSAgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3NyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzggZm1hICAxICAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDc5IGZtYSAgMSAgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4MCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODEgZm1hICAxICAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDgyIGZtYSAgMSAgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4MyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODQgZm1hICAxICAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDg1IGZtYSAgMSAgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4NiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODcgZm1hICAxICAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDg4IGZtYSAgMSAgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4OSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorCistLSBkZXNjdHJ1Y3RpdmUgc3VidHJhY3Rpb24gKGZyb20gcmVtYWluZGVyIHRlc3RzKQorCistLSArKysgc29tZSBvZiB0aGVzZSB3aWxsIGJlIG9mZi1ieS1vbmUgcmVtYWluZGVyIHZzIHJlbWFpbmRlck5lYXIKKworZGRmbWE0MDAwICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU0ICAgMS4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNzY1NDMyMTA5ODc2NTQ2CitkZGZtYTQwMDEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NDMgICAgMS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC42NTQzMjEwOTg3NjU1NworZGRmbWE0MDAyICBmbWEgIC0xMjM0NTY3ODkwMTIzMzMyICAgICAxLjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNTQzMjEwOTg3NjY2OAorZGRmbWE0MDAzICBmbWEgICAtMzA4NjQxOTcyNTMwODYzICAgNC4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM3CitkZGZtYTQwMDQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjMgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMy42OTEzNTgwMjc0NjkxMzcKK2RkZm1hNDAwNSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5NiAgICAgNC45OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY5MTM1NzgwMjQ2OTYKK2RkZm1hNDAwNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgICA0Ljk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAzLjQ2OTEzNTc4MDI0NjkxCitkZGZtYTQwMDcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA0Ljk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMS4yNDY5MTM1NzgwMjQ2OTEKK2RkZm1hNDAwOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDUuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQorZGRmbWE0MDA5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkwICAgIDUuMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDMuNTMwODY0MjE5NzUzMTAKK2RkZm1hNDAxMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY4NiAgICAgNS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjMwODY0MjE5NzUzMTQKK2RkZm1hNDAxMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1NSAgIDEuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTUKK2RkZm1hNDAxMiAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ0NCAgICAxLjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4zNDU2Nzg5MDEyMzQ0NAorZGRmbWE0MDEzICBmbWEgIC0xMjM0NTY3ODkwMTIzMzMzICAgICAxLjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIC0wLjQ1Njc4OTAxMjMzMzMKK2RkZm1hNDAxNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NCAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTUgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQKK2RkZm1hNDAxNSAgZm1hICAgLTMwODY0MTk3MjUzMDg2NCAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4zMDg2NDE5NzI1MzA4NjQKK2RkZm1hNDAxNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5NiAgICAgNC45OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY5MTM1NzgwMjQ2OTYKK2RkZm1hNDAxNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MiAgICA0Ljk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS41MzA4NjQyMTk3NTMwOAorZGRmbWE0MDE4ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxICAgNC45OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMjQ2OTEzNTc4MDI0NjkxCitkZGZtYTQwMTkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA1LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC43NTMwODY0MjE5NzUzMDkKK2RkZm1hNDAyMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgICA1LjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS40NjkxMzU3ODAyNDY5MQorZGRmbWE0MDIxICBmbWEgICAtMjQ2OTEzNTc4MDI0Njg2ICAgICA1LjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMzA4NjQyMTk3NTMxNAorCisKKy0tIE51bGwgdGVzdHMKK2RkZm1hMzk5OTAgZm1hICAxICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzk5OTEgZm1hICAxICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkSW52ZXJ0LmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkSW52ZXJ0LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxOWZiYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRJbnZlcnQuZGVjVGVzdApAQCAtMCwwICsxLDIwMiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEludmVydC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIElOVkVSVCBmb3IgZGVjRG91YmxlcyAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorZGRpbnYwMDEgaW52ZXJ0ICAgICAgICAgICAgIDAgLT4gMTExMTExMTExMTExMTExMQorZGRpbnYwMDIgaW52ZXJ0ICAgICAgICAgICAgIDEgLT4gMTExMTExMTExMTExMTExMAorZGRpbnYwMDMgaW52ZXJ0ICAgICAgICAgICAgMTAgLT4gMTExMTExMTExMTExMTEwMQorZGRpbnYwMDQgaW52ZXJ0ICAgICAxMTExMTExMTEgLT4gMTExMTExMTAwMDAwMDAwMAorZGRpbnYwMDUgaW52ZXJ0ICAgICAwMDAwMDAwMDAgLT4gMTExMTExMTExMTExMTExMQorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2RkaW52MDA3IGludmVydCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTExMTExMTExMTExMTExMQorZGRpbnYwMDggaW52ZXJ0IDEwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTExMTExMTExMTExMTExCitkZGludjAwOSBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTEKK2RkaW52MDEwIGludmVydCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgMTAxMTExMTExMTExMTExMQorZGRpbnYwMTEgaW52ZXJ0IDAxMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwCitkZGludjAxMiBpbnZlcnQgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgIDAKK2RkaW52MDEzIGludmVydCAwMDExMTExMTExMTExMTExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMAorZGRpbnYwMTQgaW52ZXJ0IDAxMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5ICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRpbnYwMjEgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gIDExMTExMTEwMDAwMDAwMDAKK2RkaW52MDIyIGludmVydCAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAwMDAwCitkZGludjAyMyBpbnZlcnQgIDExMTExMTExICAgICAtPiAgMTExMTExMTEwMDAwMDAwMAorZGRpbnYwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gIDExMTExMTExMTAwMDAwMDAKK2RkaW52MDI2IGludmVydCAgICAxMTExMTEgICAgIC0+ICAxMTExMTExMTExMDAwMDAwCitkZGludjAyNyBpbnZlcnQgICAgIDExMTExICAgICAtPiAgMTExMTExMTExMTEwMDAwMAorZGRpbnYwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gIDExMTExMTExMTExMTAwMDAKK2RkaW52MDI5IGludmVydCAgICAgICAxMTEgICAgIC0+ICAxMTExMTExMTExMTExMDAwCitkZGludjAzMSBpbnZlcnQgICAgICAgIDExICAgICAtPiAgMTExMTExMTExMTExMTEwMAorZGRpbnYwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gIDExMTExMTExMTExMTExMTAKK2RkaW52MDMzIGludmVydCAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAwMDAwCitkZGludjAzNCBpbnZlcnQgMTExMTExMTExMTEgICAtPiAgMTExMTEwMDAwMDAwMDAwMAorZGRpbnYwMzUgaW52ZXJ0IDExMTExMTExMTEgICAgLT4gIDExMTExMTAwMDAwMDAwMDAKK2RkaW52MDM2IGludmVydCAxMTExMTExMTEgICAgIC0+ICAxMTExMTExMDAwMDAwMDAwCisKK2RkaW52MDQwIGludmVydCAwMTExMTExMTEgICAtPiAgMTExMTExMTEwMDAwMDAwMAorZGRpbnYwNDEgaW52ZXJ0IDEwMTExMTExMSAgIC0+ICAxMTExMTExMDEwMDAwMDAwCitkZGludjA0MiBpbnZlcnQgMTEwMTExMTExICAgLT4gIDExMTExMTEwMDEwMDAwMDAKK2RkaW52MDQzIGludmVydCAxMTEwMTExMTEgICAtPiAgMTExMTExMTAwMDEwMDAwMAorZGRpbnYwNDQgaW52ZXJ0IDExMTEwMTExMSAgIC0+ICAxMTExMTExMDAwMDEwMDAwCitkZGludjA0NSBpbnZlcnQgMTExMTEwMTExICAgLT4gIDExMTExMTEwMDAwMDEwMDAKK2RkaW52MDQ2IGludmVydCAxMTExMTEwMTEgICAtPiAgMTExMTExMTAwMDAwMDEwMAorZGRpbnYwNDcgaW52ZXJ0IDExMTExMTEwMSAgIC0+ICAxMTExMTExMDAwMDAwMDEwCitkZGludjA0OCBpbnZlcnQgMTExMTExMTEwICAgLT4gIDExMTExMTEwMDAwMDAwMDEKK2RkaW52MDQ5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTExMTExMTEwMDAwMDEwMAorZGRpbnYwNTAgaW52ZXJ0IDEwMTExMTEwMSAgIC0+ICAxMTExMTExMDEwMDAwMDEwCitkZGludjA1MSBpbnZlcnQgMTEwMTExMTEwICAgLT4gIDExMTExMTEwMDEwMDAwMDEKK2RkaW52MDUyIGludmVydCAxMTEwMTExMDEgICAtPiAgMTExMTExMTAwMDEwMDAxMAorZGRpbnYwNTMgaW52ZXJ0IDExMTEwMTAxMSAgIC0+ICAxMTExMTExMDAwMDEwMTAwCitkZGludjA1NCBpbnZlcnQgMTExMTEwMTExICAgLT4gIDExMTExMTEwMDAwMDEwMDAKK2RkaW52MDU1IGludmVydCAxMTExMDEwMTEgICAtPiAgMTExMTExMTAwMDAxMDEwMAorZGRpbnYwNTYgaW52ZXJ0IDExMTAxMTEwMSAgIC0+ICAxMTExMTExMDAwMTAwMDEwCitkZGludjA1NyBpbnZlcnQgMTEwMTExMTEwICAgLT4gIDExMTExMTEwMDEwMDAwMDEKK2RkaW52MDU4IGludmVydCAxMDExMTExMDEgICAtPiAgMTExMTExMTAxMDAwMDAxMAorZGRpbnYwNTkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+ICAxMTExMTExMTAwMDAwMTAwCisKK2RkaW52MDgwIGludmVydCAxMDAwMDAwMDExMTExMTExICAgLT4gICAxMTExMTExMDAwMDAwMDAKK2RkaW52MDgxIGludmVydCAwMTAwMDAwMTAxMTExMTExICAgLT4gIDEwMTExMTEwMTAwMDAwMDAKK2RkaW52MDgyIGludmVydCAwMDEwMDAwMTEwMTExMTExICAgLT4gIDExMDExMTEwMDEwMDAwMDAKK2RkaW52MDgzIGludmVydCAwMDAxMDAwMTExMDExMTExICAgLT4gIDExMTAxMTEwMDAxMDAwMDAKK2RkaW52MDg0IGludmVydCAwMDAwMTAwMTExMTAxMTExICAgLT4gIDExMTEwMTEwMDAwMTAwMDAKK2RkaW52MDg1IGludmVydCAwMDAwMDEwMTExMTEwMTExICAgLT4gIDExMTExMDEwMDAwMDEwMDAKK2RkaW52MDg2IGludmVydCAwMDAwMDAxMTExMTExMDExICAgLT4gIDExMTExMTAwMDAwMDAxMDAKK2RkaW52MDg3IGludmVydCAwMDAwMDEwMTExMTExMTAxICAgLT4gIDExMTExMDEwMDAwMDAwMTAKK2RkaW52MDg4IGludmVydCAwMDAwMTAwMTExMTExMTEwICAgLT4gIDExMTEwMTEwMDAwMDAwMDEKK2RkaW52MDg5IGludmVydCAwMDAxMDAwMDExMTExMDExICAgLT4gIDExMTAxMTExMDAwMDAxMDAKK2RkaW52MDkwIGludmVydCAwMDEwMDAwMTAxMTExMTAxICAgLT4gIDExMDExMTEwMTAwMDAwMTAKK2RkaW52MDkxIGludmVydCAwMTAwMDAwMTEwMTExMTEwICAgLT4gIDEwMTExMTEwMDEwMDAwMDEKK2RkaW52MDkyIGludmVydCAxMDAwMDAwMTExMDExMTAxICAgLT4gICAxMTExMTEwMDAxMDAwMTAKK2RkaW52MDkzIGludmVydCAwMTAwMDAwMTExMTAxMDExICAgLT4gIDEwMTExMTEwMDAwMTAxMDAKK2RkaW52MDk0IGludmVydCAwMDEwMDAwMTExMTEwMTExICAgLT4gIDExMDExMTEwMDAwMDEwMDAKK2RkaW52MDk1IGludmVydCAwMDAxMDAwMTExMTAxMDExICAgLT4gIDExMTAxMTEwMDAwMTAxMDAKK2RkaW52MDk2IGludmVydCAwMDAwMTAwMTExMDExMTAxICAgLT4gIDExMTEwMTEwMDAxMDAwMTAKK2RkaW52MDk3IGludmVydCAwMDAwMDEwMTEwMTExMTEwICAgLT4gIDExMTExMDEwMDEwMDAwMDEKK2RkaW52MDk4IGludmVydCAwMDAwMDAxMTAxMTExMTAxICAgLT4gIDExMTExMTAwMTAwMDAwMTAKK2RkaW52MDk5IGludmVydCAwMDAwMDEwMDExMTExMDExICAgLT4gIDExMTExMDExMDAwMDAxMDAKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkZGludjIyMCBpbnZlcnQgMTExMTExMTEyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjEgaW52ZXJ0IDMzMzMzMzMzMyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjIyIGludmVydCA1NTU1NTU1NTUgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyMyBpbnZlcnQgNzc3Nzc3Nzc3ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjQgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjI1IGludmVydCAyMjIyMjIyMjIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyNiBpbnZlcnQgNDQ0NDQ0NDQ0ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjcgaW52ZXJ0IDY2NjY2NjY2NiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjI4IGludmVydCA4ODg4ODg4ODggICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyOSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMzAgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjMxIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIzMiBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZGRpbnYyNDAgaW52ZXJ0ICA1Njc0Njg2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjQxIGludmVydCAgNTY3MzY3Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI0MiBpbnZlcnQgLTYzMTkxNzc3MiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNDMgaW52ZXJ0IC03NTYyNTMyNTcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjQ0IGludmVydCAgODM1NTkwMTQ5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZGRpbnYyNTAgaW52ZXJ0ICAyMDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI1MSBpbnZlcnQgIDMwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjUyIGludmVydCAgNDAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTMgaW52ZXJ0ICA1MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI1NCBpbnZlcnQgIDYwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjU1IGludmVydCAgNzAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTYgaW52ZXJ0ICA4MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI1NyBpbnZlcnQgIDkwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2RkaW52MjcwIGludmVydCAgMDIwMDAwMTAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNzEgaW52ZXJ0ICAwMzAwMDAwMTAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI3MiBpbnZlcnQgIDA0MDAwMDAwMTAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjczIGludmVydCAgMDUwMDAwMDAwMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNzQgaW52ZXJ0ICAxNjAwMDAwMDAwMTAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI3NSBpbnZlcnQgIDE3MDAwMDAwMDAwMTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjc2IGludmVydCAgMTgwMDAwMDAwMDAwMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNzcgaW52ZXJ0ICAxOTAwMDAwMDAwMDAwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZGRpbnYyODAgaW52ZXJ0ICAwMDEwMDAwMDAwMDAwMDAyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4MSBpbnZlcnQgIDAwMDEwMDAwMDAwMDAwMDMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjgyIGludmVydCAgMDAwMDEwMDAwMDAwMDAwNCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODMgaW52ZXJ0ICAwMDAwMDEwMDAwMDAwMDA1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4NCBpbnZlcnQgIDEwMDAwMDEwMDAwMDAwMDYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjg1IGludmVydCAgMTAwMDAwMDEwMDAwMDAwNyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODYgaW52ZXJ0ICAxMDAwMDAwMDEwMDAwMDA4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4NyBpbnZlcnQgIDEwMDAwMDAwMDEwMDAwMDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkZGludjI4OCBpbnZlcnQgIDAwMTAwMDAwMjAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjg5IGludmVydCAgMDAwMTAwMDAzMDAwMDAwMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTAgaW52ZXJ0ICAwMDAwMTAwMDQwMDAwMDEwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI5MSBpbnZlcnQgIDAwMDAwMTAwNTAwMDAxMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjkyIGludmVydCAgMTAwMDAwMTA2MDAwMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTMgaW52ZXJ0ICAxMDAwMDAwMTcwMDEwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI5NCBpbnZlcnQgIDEwMDAwMDAwODAxMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjk1IGludmVydCAgMTAwMDAwMDA5MTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbgorZGRpbnYyOTYgaW52ZXJ0IC0xMDAwMDAwMDAxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI5OSBpbnZlcnQgIDEwMDAwMDAwMDEwMDAwMDAgIC0+ICAxMTExMTExMTAxMTExMTEKKworCistLSBObWF4LCBObWluLCBOdGlueS1saWtlCitkZGludjM0MSBpbnZlcnQgIDkuOTk5OTk5OTlFKzI5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNDIgaW52ZXJ0ICAxRS0yOTkgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQzIGludmVydCAgMS4wMDAwMDAwMEUtMjk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM0NCBpbnZlcnQgIDFFLTIwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNDUgaW52ZXJ0ICAtMUUtMjA3ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQ2IGludmVydCAgLTEuMDAwMDAwMDBFLTI5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM0NyBpbnZlcnQgIC0xRS0yOTkgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNDggaW52ZXJ0ICAtOS45OTk5OTk5OUUrMjk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkZGludjM2MSBpbnZlcnQgIDEuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzYzIGludmVydCAgMC4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM2NCBpbnZlcnQgIDBFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzY2IGludmVydCAgOUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2RkaW52Nzg4IGludmVydCAtSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGludjc5NCBpbnZlcnQgIEluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4MjEgaW52ZXJ0ICBOYU4gICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODQxIGludmVydCAgc05hTiAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGludjg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg2MiBpbnZlcnQgK05hTjIgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg2MyBpbnZlcnQgIE5hTjMgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg2NSBpbnZlcnQgIE5hTjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg3MSBpbnZlcnQgIHNOYU4xMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg3MyBpbnZlcnQgIHNOYU4xMyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg3NCBpbnZlcnQgIHNOYU4xNCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg3NiBpbnZlcnQgIE5hTjE2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg4MSBpbnZlcnQgK05hTjI1ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg4MyBpbnZlcnQgLXNOYU4yNyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTG9nQi5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZExvZ0IuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTcyOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZExvZ0IuZGVjVGVzdApAQCAtMCwwICsxLDE1OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZExvZ0IuZGVjVGVzdCAtLSBpbnRlZ3JhbCA3NTRyIGFkanVzdGVkIGV4cG9uZW50LCBmb3IgZGVjRG91YmxlcyAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBiYXNpY3MKK2RkbG9nYjAwMCBsb2diICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RkbG9nYjAwMSBsb2diICAxRS0zOTggICAgICAgICAgICAtPiAtMzk4CitkZGxvZ2IwMDIgbG9nYiAgMUUtMzgzICAgICAgICAgICAgLT4gLTM4MworZGRsb2diMDAzIGxvZ2IgIDAuMDAxICAgICAgICAgICAgIC0+IC0zCitkZGxvZ2IwMDQgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTIKK2RkbG9nYjAwNSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgMAorZGRsb2diMDA2IGxvZ2IgIDIgICAgICAgICAgICAgICAgIC0+ICAwCitkZGxvZ2IwMDcgbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDAKK2RkbG9nYjAwOCBsb2diICAyLjUwMCAgICAgICAgICAgICAtPiAgMAorZGRsb2diMDA5IGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxCitkZGxvZ2IwMTAgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDEKK2RkbG9nYjAxMSBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMgorZGRsb2diMDEyIGxvZ2IgIDMzMyAgICAgICAgICAgICAgIC0+ICAyCitkZGxvZ2IwMTMgbG9nYiAgOUUrMzg0ICAgICAgICAgICAgLT4gIDM4NAorZGRsb2diMDE0IGxvZ2IgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBuZWdhdGl2ZXMgYXBwZWFyIHRvIGJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzCitkZGxvZ2IwMjEgbG9nYiAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IwMjIgbG9nYiAtMUUtMzk4ICAgICAgICAgICAgLT4gLTM5OAorZGRsb2diMDIzIGxvZ2IgLTlFLTM4MyAgICAgICAgICAgIC0+IC0zODMKK2RkbG9nYjAyNCBsb2diIC0wLjAwMSAgICAgICAgICAgICAtPiAtMworZGRsb2diMDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwCitkZGxvZ2IwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDAKK2RkbG9nYjAyNyBsb2diIC0xMCAgICAgICAgICAgICAgICAtPiAgMQorZGRsb2diMDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxCitkZGxvZ2IwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDIKK2RkbG9nYjAzMCBsb2diIC05RSszODQgICAgICAgICAgICAtPiAgMzg0CitkZGxvZ2IwMzEgbG9nYiAtSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIHplcm9zCitkZGxvZ2IxMTEgbG9nYiAgICAgICAgICAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTMgbG9nYiAgICAgICAwRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTQgbG9nYiAgICAgIC0wRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTYgbG9nYiAgICAtMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTcgbG9nYiAgICAgIDBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZGxvZ2IxMjEgbG9nYiAgIDI2ODI2ODI2OCAgICAgICAgLT4gOAorZGRsb2diMTIyIGxvZ2IgIC0yNjgyNjgyNjggICAgICAgIC0+IDgKK2RkbG9nYjEyMyBsb2diICAgMTM0MTM0MTM0ICAgICAgICAtPiA4CitkZGxvZ2IxMjQgbG9nYiAgLTEzNDEzNDEzNCAgICAgICAgLT4gOAorCistLSBObWF4LCBObWluLCBOdGlueQorZGRsb2diMTMxIGxvZ2IgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAgMzg0CitkZGxvZ2IxMzIgbG9nYiAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IC0zODMKK2RkbG9nYjEzMyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTM4MworZGRsb2diMTM0IGxvZ2IgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMzk4CisKK2RkbG9nYjEzNSBsb2diICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTM5OAorZGRsb2diMTM2IGxvZ2IgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMzgzCitkZGxvZ2IxMzcgbG9nYiAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0zODMKK2RkbG9nYjEzOCBsb2diICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIDM4NAorCistLSBvbmVzCitkZGxvZ2IwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorZGRsb2diMDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2RkbG9nYjAwNjMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCisKKy0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwCitkZGxvZ2IxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwCitkZGxvZ2IxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxCitkZGxvZ2IxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyCitkZGxvZ2IxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzCitkZGxvZ2IxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0CitkZGxvZ2IxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1CitkZGxvZ2IxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2CitkZGxvZ2IxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3CitkZGxvZ2IxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4CitkZGxvZ2IxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5CitkZGxvZ2IxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMAorZGRsb2diMTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTEKK2RkbG9nYjExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyCitkZGxvZ2IxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTEKK2RkbG9nYjExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwCitkZGxvZ2IxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkKK2RkbG9nYjExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04CitkZGxvZ2IxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03CitkZGxvZ2IxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYKK2RkbG9nYjExMTkgbG9nYiAwLjAwMDAxIC0+IC01CitkZGxvZ2IxMTIwIGxvZ2IgMC4wMDAxIC0+IC00CitkZGxvZ2IxMTIxIGxvZ2IgMC4wMDEgLT4gLTMKK2RkbG9nYjExMjIgbG9nYiAwLjAxIC0+IC0yCitkZGxvZ2IxMTIzIGxvZ2IgMC4xIC0+IC0xCitkZGxvZ2IxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQorZGRsb2diMTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwCitkZGxvZ2IxMTI3IGxvZ2IgMUUtMjk5IC0+IC0yOTkKK2RkbG9nYjExMjYgbG9nYiAxRS0zODMgLT4gLTM4MworCistLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hCitkZGxvZ2IxNDAwIGxvZ2IgMTBFLTMgICAgLT4gLTIKK2RkbG9nYjE0MDEgbG9nYiAxMEUtMiAgICAtPiAtMQorZGRsb2diMTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwCitkZGxvZ2IxNDAzIGxvZ2IgMTAwMEUtMiAgLT4gIDEKK2RkbG9nYjE0MDQgbG9nYiAxMDAwMEUtMiAtPiAgMgorZGRsb2diMTQwNSBsb2diIDEwRS0xICAgIC0+ICAwCitkZGxvZ2IxNDA2IGxvZ2IgMTAwRS0xICAgLT4gIDEKK2RkbG9nYjE0MDcgbG9nYiAxMDAwRS0xICAtPiAgMgorZGRsb2diMTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzCitkZGxvZ2IxNDA5IGxvZ2IgMTBFMCAgICAgLT4gIDEKK2RkbG9nYjE0MTAgbG9nYiAxMDBFMCAgICAtPiAgMgorZGRsb2diMTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzCitkZGxvZ2IxNDEyIGxvZ2IgMTAwMDBFMCAgLT4gIDQKK2RkbG9nYjE0MTMgbG9nYiAxMEUxICAgICAtPiAgMgorZGRsb2diMTQxNCBsb2diIDEwMEUxICAgIC0+ICAzCitkZGxvZ2IxNDE1IGxvZ2IgMTAwMEUxICAgLT4gIDQKK2RkbG9nYjE0MTYgbG9nYiAxMDAwMEUxICAtPiAgNQorZGRsb2diMTQxNyBsb2diIDEwRTIgICAgIC0+ICAzCitkZGxvZ2IxNDE4IGxvZ2IgMTAwRTIgICAgLT4gIDQKK2RkbG9nYjE0MTkgbG9nYiAxMDAwRTIgICAtPiAgNQorZGRsb2diMTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2CisKKy0tIHNwZWNpYWwgdmFsdWVzCitkZGxvZ2I4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5CitkZGxvZ2I4MjEgIGxvZ2IgICAwICAgICAgICAtPiAgLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkbG9nYjgyMiAgbG9nYiAgIE5hTiAgICAgIC0+ICAgTmFOCitkZGxvZ2I4MjMgIGxvZ2IgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbG9nYjgyNCAgbG9nYiAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgorZGRsb2diODI1ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uCitkZGxvZ2I4MjYgIGxvZ2IgICBOYU40NTYgICAtPiAgIE5hTjQ1NgorZGRsb2diODI3ICBsb2diICAgLU5hTjY1NCAgLT4gIC1OYU42NTQKK2RkbG9nYjgyOCAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQorCistLSBOdWxsIHRlc3QKK2RkbG9nYjkwMCAgbG9nYiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzYzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4LmRlY1Rlc3QKQEAgLTAsMCArMSwzMjIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNYXguZGVjVGVzdCAtLSBkZWNEb3VibGUgbWF4bnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkbWF4MDAxIG1heCAgLTIgIC0yICAtPiAtMgorZGRtYXgwMDIgbWF4ICAtMiAgLTEgIC0+IC0xCitkZG1heDAwMyBtYXggIC0yICAgMCAgLT4gIDAKK2RkbWF4MDA0IG1heCAgLTIgICAxICAtPiAgMQorZGRtYXgwMDUgbWF4ICAtMiAgIDIgIC0+ICAyCitkZG1heDAwNiBtYXggIC0xICAtMiAgLT4gLTEKK2RkbWF4MDA3IG1heCAgLTEgIC0xICAtPiAtMQorZGRtYXgwMDggbWF4ICAtMSAgIDAgIC0+ICAwCitkZG1heDAwOSBtYXggIC0xICAgMSAgLT4gIDEKK2RkbWF4MDEwIG1heCAgLTEgICAyICAtPiAgMgorZGRtYXgwMTEgbWF4ICAgMCAgLTIgIC0+ICAwCitkZG1heDAxMiBtYXggICAwICAtMSAgLT4gIDAKK2RkbWF4MDEzIG1heCAgIDAgICAwICAtPiAgMAorZGRtYXgwMTQgbWF4ICAgMCAgIDEgIC0+ICAxCitkZG1heDAxNSBtYXggICAwICAgMiAgLT4gIDIKK2RkbWF4MDE2IG1heCAgIDEgIC0yICAtPiAgMQorZGRtYXgwMTcgbWF4ICAgMSAgLTEgIC0+ICAxCitkZG1heDAxOCBtYXggICAxICAgMCAgLT4gIDEKK2RkbWF4MDE5IG1heCAgIDEgICAxICAtPiAgMQorZGRtYXgwMjAgbWF4ICAgMSAgIDIgIC0+ICAyCitkZG1heDAyMSBtYXggICAyICAtMiAgLT4gIDIKK2RkbWF4MDIyIG1heCAgIDIgIC0xICAtPiAgMgorZGRtYXgwMjMgbWF4ICAgMiAgIDAgIC0+ICAyCitkZG1heDAyNSBtYXggICAyICAgMSAgLT4gIDIKK2RkbWF4MDI2IG1heCAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZGRtYXgwMzAgbWF4ICAgMCAgICAgMCAgIC0+ICAwCitkZG1heDAzMSBtYXggICAwICAgIC0wICAgLT4gIDAKK2RkbWF4MDMyIG1heCAgIDAgICAgLTAuMCAtPiAgMAorZGRtYXgwMzMgbWF4ICAgMCAgICAgMC4wIC0+ICAwCitkZG1heDAzNCBtYXggIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4KK2RkbWF4MDM1IG1heCAgLTAgICAgLTAgICAtPiAtMAorZGRtYXgwMzYgbWF4ICAtMCAgICAtMC4wIC0+IC0wLjAKK2RkbWF4MDM3IG1heCAgLTAgICAgIDAuMCAtPiAgMC4wCitkZG1heDAzOCBtYXggICAwLjAgICAwICAgLT4gIDAKK2RkbWF4MDM5IG1heCAgIDAuMCAgLTAgICAtPiAgMC4wCitkZG1heDA0MCBtYXggICAwLjAgIC0wLjAgLT4gIDAuMAorZGRtYXgwNDEgbWF4ICAgMC4wICAgMC4wIC0+ICAwLjAKK2RkbWF4MDQyIG1heCAgLTAuMCAgIDAgICAtPiAgMAorZGRtYXgwNDMgbWF4ICAtMC4wICAtMCAgIC0+IC0wLjAKK2RkbWF4MDQ0IG1heCAgLTAuMCAgLTAuMCAtPiAtMC4wCitkZG1heDA0NSBtYXggIC0wLjAgICAwLjAgLT4gIDAuMAorCitkZG1heDA1MCBtYXggIC0wRTEgICAwRTEgLT4gIDBFKzEKK2RkbWF4MDUxIG1heCAgLTBFMiAgIDBFMiAtPiAgMEUrMgorZGRtYXgwNTIgbWF4ICAtMEUyICAgMEUxIC0+ICAwRSsxCitkZG1heDA1MyBtYXggIC0wRTEgICAwRTIgLT4gIDBFKzIKK2RkbWF4MDU0IG1heCAgIDBFMSAgLTBFMSAtPiAgMEUrMQorZGRtYXgwNTUgbWF4ICAgMEUyICAtMEUyIC0+ICAwRSsyCitkZG1heDA1NiBtYXggICAwRTIgIC0wRTEgLT4gIDBFKzIKK2RkbWF4MDU3IG1heCAgIDBFMSAgLTBFMiAtPiAgMEUrMQorCitkZG1heDA1OCBtYXggICAwRTEgICAwRTEgLT4gIDBFKzEKK2RkbWF4MDU5IG1heCAgIDBFMiAgIDBFMiAtPiAgMEUrMgorZGRtYXgwNjAgbWF4ICAgMEUyICAgMEUxIC0+ICAwRSsyCitkZG1heDA2MSBtYXggICAwRTEgICAwRTIgLT4gIDBFKzIKK2RkbWF4MDYyIG1heCAgLTBFMSAgLTBFMSAtPiAtMEUrMQorZGRtYXgwNjMgbWF4ICAtMEUyICAtMEUyIC0+IC0wRSsyCitkZG1heDA2NCBtYXggIC0wRTIgIC0wRTEgLT4gLTBFKzEKK2RkbWF4MDY1IG1heCAgLTBFMSAgLTBFMiAtPiAtMEUrMQorCistLSBTcGVjaWFscworZGRtYXgwOTAgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MDkxIG1heCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZG1heDA5MiBtYXggIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTMgbWF4ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RkbWF4MDk0IG1heCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkZG1heDA5NSBtYXggIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTYgbWF4ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkbWF4MDk3IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDA5OCBtYXggLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTkgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MTAwIG1heCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDEwMSBtYXggLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMDIgbWF4ICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MTAzIG1heCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDEwNCBtYXggIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMDUgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRtYXgxMjAgbWF4IC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWF4MTIxIG1heCAtSW5mICAtMTAwMCAgLT4gLTEwMDAKK2RkbWF4MTIyIG1heCAtSW5mICAtMSAgICAgLT4gLTEKK2RkbWF4MTIzIG1heCAtSW5mICAtMCAgICAgLT4gLTAKK2RkbWF4MTI0IG1heCAtSW5mICAgMCAgICAgLT4gIDAKK2RkbWF4MTI1IG1heCAtSW5mICAgMSAgICAgLT4gIDEKK2RkbWF4MTI2IG1heCAtSW5mICAgMTAwMCAgLT4gIDEwMDAKK2RkbWF4MTI3IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDEyOCBtYXggLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RkbWF4MTI5IG1heCAtMTAwMCAtSW5mICAgLT4gIC0xMDAwCitkZG1heDEzMCBtYXggLTEgICAgLUluZiAgIC0+ICAtMQorZGRtYXgxMzEgbWF4IC0wICAgIC1JbmYgICAtPiAgLTAKK2RkbWF4MTMyIG1heCAgMCAgICAtSW5mICAgLT4gIDAKK2RkbWF4MTMzIG1heCAgMSAgICAtSW5mICAgLT4gIDEKK2RkbWF4MTM0IG1heCAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2RkbWF4MTM1IG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZGRtYXgxNDEgbWF4ICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkKK2RkbWF4MTQyIG1heCAgTmFOIC0xMDAwICAgLT4gLTEwMDAKK2RkbWF4MTQzIG1heCAgTmFOIC0xICAgICAgLT4gLTEKK2RkbWF4MTQ0IG1heCAgTmFOIC0wICAgICAgLT4gLTAKK2RkbWF4MTQ1IG1heCAgTmFOICAwICAgICAgLT4gIDAKK2RkbWF4MTQ2IG1heCAgTmFOICAxICAgICAgLT4gIDEKK2RkbWF4MTQ3IG1heCAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RkbWF4MTQ4IG1heCAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkZG1heDE0OSBtYXggIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkbWF4MTUwIG1heCAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkZG1heDE1MSBtYXggLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkZG1heDE1MiBtYXggLTEgICAgTmFOICAgIC0+IC0xCitkZG1heDE1MyBtYXggLTAgICAgTmFOICAgIC0+IC0wCitkZG1heDE1NCBtYXggIDAgICAgTmFOICAgIC0+ICAwCitkZG1heDE1NSBtYXggIDEgICAgTmFOICAgIC0+ICAxCitkZG1heDE1NiBtYXggIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkZG1heDE1NyBtYXggIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkZG1heDE2MSBtYXggIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE2MiBtYXggIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE2MyBtYXggIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE2NCBtYXggIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE2NSBtYXggIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE2NiBtYXggIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE2NyBtYXggIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE2OCBtYXggIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE2OSBtYXggIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3MCBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3MSBtYXggLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3MiBtYXggLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3MyBtYXggLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3NCBtYXggLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3NSBtYXggIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3NiBtYXggIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3NyBtYXggIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3OCBtYXggIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE3OSBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbWF4MTgxIG1heCAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtYXgxODIgbWF4ICBOYU44ICAgICA5ICAgLT4gIDkKK2RkbWF4MTgzIG1heCAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG1heDE4NCBtYXggLU5hTjEgICBOYU4xMSAtPiAtTmFOMQorZGRtYXgxODUgbWF4ICBOYU4yICAgTmFOMTIgLT4gIE5hTjIKK2RkbWF4MTg2IG1heCAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMworZGRtYXgxODcgbWF4ICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0CisKK2RkbWF4MTg4IG1heCAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQorZGRtYXgxODkgbWF4IC05ICAgICAtTmFOMyAgLT4gLTkKK2RkbWF4MTkwIG1heCAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkZG1heDE5MSBtYXggIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTIgbWF4ICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTkzIG1heCAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5NCBtYXggIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTUgbWF4ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTk2IG1heCAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5NyBtYXggIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTggbWF4ICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTk5IG1heCAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RkbWF4MjIxIG1heCAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMAorZGRtYXgyMjIgbWF4IDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitkZG1heDIyMyBtYXggMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMAorZGRtYXgyMjQgbWF4IDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK2RkbWF4MjI1IG1heCAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwCitkZG1heDIyNiBtYXggMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorZGRtYXgyMjcgbWF4IDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTEKK2RkbWF4MjI4IG1heCAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitkZG1heDIyOSBtYXggMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDEKK2RkbWF4MjMwIG1heCAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorZGRtYXgyMzEgbWF4IDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYKK2RkbWF4MjMyIG1heCAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CitkZG1heDIzMyBtYXggLTEyMzQ1Njc4OTEgIDEgLT4gMQorZGRtYXgyMzQgbWF4IDEgLTEyMzQ1Njc4OTEgIC0+IDEKK2RkbWF4MjM1IG1heCAtMTIzNDU2Nzg5MDEgMSAtPiAxCitkZG1heDIzNiBtYXggMSAtMTIzNDU2Nzg5MDEgLT4gMQorZGRtYXgyMzcgbWF4IC0xMjM0NTY3ODk2ICAxIC0+IDEKK2RkbWF4MjM4IG1heCAxIC0xMjM0NTY3ODk2ICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK2RkbWF4MjgwIG1heCAnMycgICAnMicgIC0+ICAnMycKK2RkbWF4MjgxIG1heCAnLTEwJyAnMycgIC0+ICAnMycKK2RkbWF4MjgyIG1heCAnMS4wJyAnMScgIC0+ICAnMScKK2RkbWF4MjgzIG1heCAnMScgJzEuMCcgIC0+ICAnMScKK2RkbWF4Mjg0IG1heCAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkZG1heDQwMSBtYXggIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQorZGRtYXg0MDIgbWF4ICAxLjEgICAgMSAgICAgICAtPiAgMS4xCitkZG1heDQwMyBtYXggIDEgICAgICAxLjAgICAgIC0+ICAxCitkZG1heDQwNCBtYXggIDEuMCAgICAwLjEgICAgIC0+ICAxLjAKK2RkbWF4NDA1IG1heCAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQorZGRtYXg0MDYgbWF4ICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAorZGRtYXg0MDcgbWF4ICAwLjEwICAgMCAgICAgICAtPiAgMC4xMAorZGRtYXg0MDggbWF4ICAwICAgICAgMC4wICAgICAtPiAgMAorZGRtYXg0MDkgbWF4ICAwLjAgICAtMCAgICAgICAtPiAgMC4wCitkZG1heDQxMCBtYXggIDAuMCAgIC0wLjAgICAgIC0+ICAwLjAKK2RkbWF4NDExIG1heCAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDAKK2RkbWF4NDEyIG1heCAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAorZGRtYXg0MTMgbWF4ICAwICAgICAtMC4wICAgICAtPiAgMAorZGRtYXg0MTQgbWF4ICAwICAgICAtMCAgICAgICAtPiAgMAorZGRtYXg0MTUgbWF4IC0wLjAgICAtMCAgICAgICAtPiAtMC4wCitkZG1heDQxNiBtYXggLTAgICAgIC0wLjEwMCAgIC0+IC0wCitkZG1heDQxNyBtYXggLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwMAorZGRtYXg0MTggbWF4IC0wLjEwICAtMC4xICAgICAtPiAtMC4xMAorZGRtYXg0MTkgbWF4IC0wLjEgICAtMS4wICAgICAtPiAtMC4xCitkZG1heDQyMCBtYXggLTEuMCAgIC0xICAgICAgIC0+IC0xLjAKK2RkbWF4NDIxIG1heCAtMSAgICAgLTEuMSAgICAgLT4gLTEKK2RkbWF4NDIzIG1heCAtMS4xICAgLUluZiAgICAgLT4gLTEuMQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkZG1heDQzMSBtYXggIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQorZGRtYXg0MzIgbWF4ICAxICAgICAgMS4xICAgICAtPiAgMS4xCitkZG1heDQzMyBtYXggIDEuMCAgICAxICAgICAgIC0+ICAxCitkZG1heDQzNCBtYXggIDAuMSAgICAxLjAgICAgIC0+ICAxLjAKK2RkbWF4NDM1IG1heCAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQorZGRtYXg0MzYgbWF4ICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMAorZGRtYXg0MzcgbWF4ICAwICAgICAgMC4xMCAgICAtPiAgMC4xMAorZGRtYXg0MzggbWF4ICAwLjAgICAgMCAgICAgICAtPiAgMAorZGRtYXg0MzkgbWF4IC0wICAgICAgMC4wICAgICAtPiAgMC4wCitkZG1heDQ0MCBtYXggLTAuMCAgICAwLjAgICAgIC0+ICAwLjAKK2RkbWF4NDQxIG1heCAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDAKK2RkbWF4NDQyIG1heCAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMAorZGRtYXg0NDMgbWF4IC0wLjAgICAgMCAgICAgICAtPiAgMAorZGRtYXg0NDQgbWF4IC0wICAgICAgMCAgICAgICAtPiAgMAorZGRtYXg0NDUgbWF4IC0wICAgICAtMC4wICAgICAtPiAtMC4wCitkZG1heDQ0NiBtYXggLTAuMTAwIC0wICAgICAgIC0+IC0wCitkZG1heDQ0NyBtYXggLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZGRtYXg0NDggbWF4IC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMAorZGRtYXg0NDkgbWF4IC0xLjAgICAtMC4xICAgICAtPiAtMC4xCitkZG1heDQ1MCBtYXggLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKK2RkbWF4NDUxIG1heCAtMS4xICAgLTEgICAgICAgLT4gLTEKK2RkbWF4NDUzIG1heCAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQorLS0gbGFyZ2llcworZGRtYXg0NjAgbWF4ICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMworZGRtYXg0NjEgbWF4ICAxRSszICAgMTAwMCAgICAtPiAgMUUrMworZGRtYXg0NjIgbWF4ICAxMDAwICAtMUUrMyAgICAtPiAgMTAwMAorZGRtYXg0NjMgbWF4ICAxRSszICAtMTAwMCAgICAtPiAgMUUrMworZGRtYXg0NjQgbWF4IC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMworZGRtYXg0NjUgbWF4IC0xRSszICAgMTAwMCAgICAtPiAgMTAwMAorZGRtYXg0NjYgbWF4IC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMAorZGRtYXg0NjcgbWF4IC0xRSszICAtMTAwMCAgICAtPiAtMTAwMAorCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK2RkbWF4NDcxIG1heCAgICAgIDEuMCAgICAgICAwLjEgIC0+IDEuMAorZGRtYXg0NzIgbWF4ICAgICAgMC4xICAgICAgIDEuMCAgLT4gMS4wCitkZG1heDQ3MyBtYXggICAgIDEwLjAgICAgICAgMC4xICAtPiAxMC4wCitkZG1heDQ3NCBtYXggICAgICAwLjEgICAgICAxMC4wICAtPiAxMC4wCitkZG1heDQ3NSBtYXggICAgICAxMDAgICAgICAgMS4wICAtPiAxMDAKK2RkbWF4NDc2IG1heCAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEwMAorZGRtYXg0NzcgbWF4ICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAwMAorZGRtYXg0NzggbWF4ICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAwMAorZGRtYXg0NzkgbWF4ICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwMDAKK2RkbWF4NDgwIG1heCAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMDAwCitkZG1heDQ4MSBtYXggICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwMDAKK2RkbWF4NDgyIG1heCAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAwMAorZGRtYXg0ODMgbWF4ICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAwMAorZGRtYXg0ODQgbWF4ICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAwMAorCistLSBzdWJub3JtYWxzCitkZG1heDUxMCBtYXggIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDEuMDBFLTM4MworZGRtYXg1MTEgbWF4ICAwLjFFLTM4MyAgICAgICAgMCAgLT4gICAxRS0zODQgICAgU3Vibm9ybWFsCitkZG1heDUxMiBtYXggIDAuMTBFLTM4MyAgICAgICAwICAtPiAgIDEuMEUtMzg0ICBTdWJub3JtYWwKK2RkbWF4NTEzIG1heCAgMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMS4wMEUtMzg0IFN1Ym5vcm1hbAorZGRtYXg1MTQgbWF4ICAwLjAxRS0zODMgICAgICAgMCAgLT4gICAxRS0zODUgICAgU3Vibm9ybWFsCitkZG1heDUxNSBtYXggIDAuOTk5RS0zODMgICAgICAwICAtPiAgIDkuOTlFLTM4NCBTdWJub3JtYWwKK2RkbWF4NTE2IG1heCAgMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgOS45RS0zODUgIFN1Ym5vcm1hbAorZGRtYXg1MTcgbWF4ICAwLjAwOUUtMzgzICAgICAgMCAgLT4gICA5RS0zODYgICAgU3Vibm9ybWFsCitkZG1heDUxOCBtYXggIDAuMDAxRS0zODMgICAgICAwICAtPiAgIDFFLTM4NiAgICBTdWJub3JtYWwKK2RkbWF4NTE5IG1heCAgMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgOUUtMzg3ICAgIFN1Ym5vcm1hbAorZGRtYXg1MjAgbWF4ICAwLjAwMDFFLTM4MyAgICAgMCAgLT4gICAxRS0zODcgICAgU3Vibm9ybWFsCisKK2RkbWF4NTMwIG1heCAtMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzEgbWF4IC0wLjFFLTM4MyAgICAgICAgMCAgLT4gICAwCitkZG1heDUzMiBtYXggLTAuMTBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbWF4NTMzIG1heCAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzQgbWF4IC0wLjAxRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1heDUzNSBtYXggLTAuOTk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbWF4NTM2IG1heCAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzcgbWF4IC0wLjAwOUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1heDUzOCBtYXggLTAuMDAxRS0zODMgICAgICAwICAtPiAgIDAKK2RkbWF4NTM5IG1heCAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgMAorZGRtYXg1NDAgbWF4IC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwCisKKy0tIE51bGwgdGVzdHMKK2RkbWF4OTAwIG1heCAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDkwMSBtYXggICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heE1hZy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heE1hZy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzNlOTAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4TWFnLmRlY1Rlc3QKQEAgLTAsMCArMSwzMDQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNYXhNYWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgbWF4bnVtbWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkbXhnMDAxIG1heG1hZyAgLTIgIC0yICAtPiAtMgorZGRteGcwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yCitkZG14ZzAwMyBtYXhtYWcgIC0yICAgMCAgLT4gLTIKK2RkbXhnMDA0IG1heG1hZyAgLTIgICAxICAtPiAtMgorZGRteGcwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyCitkZG14ZzAwNiBtYXhtYWcgIC0xICAtMiAgLT4gLTIKK2RkbXhnMDA3IG1heG1hZyAgLTEgIC0xICAtPiAtMQorZGRteGcwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xCitkZG14ZzAwOSBtYXhtYWcgIC0xICAgMSAgLT4gIDEKK2RkbXhnMDEwIG1heG1hZyAgLTEgICAyICAtPiAgMgorZGRteGcwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yCitkZG14ZzAxMiBtYXhtYWcgICAwICAtMSAgLT4gLTEKK2RkbXhnMDEzIG1heG1hZyAgIDAgICAwICAtPiAgMAorZGRteGcwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxCitkZG14ZzAxNSBtYXhtYWcgICAwICAgMiAgLT4gIDIKK2RkbXhnMDE2IG1heG1hZyAgIDEgIC0yICAtPiAtMgorZGRteGcwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxCitkZG14ZzAxOCBtYXhtYWcgICAxICAgMCAgLT4gIDEKK2RkbXhnMDE5IG1heG1hZyAgIDEgICAxICAtPiAgMQorZGRteGcwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyCitkZG14ZzAyMSBtYXhtYWcgICAyICAtMiAgLT4gIDIKK2RkbXhnMDIyIG1heG1hZyAgIDIgIC0xICAtPiAgMgorZGRteGcwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyCitkZG14ZzAyNSBtYXhtYWcgICAyICAgMSAgLT4gIDIKK2RkbXhnMDI2IG1heG1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZGRteGcwMzAgbWF4bWFnICAgMCAgICAgMCAgIC0+ICAwCitkZG14ZzAzMSBtYXhtYWcgICAwICAgIC0wICAgLT4gIDAKK2RkbXhnMDMyIG1heG1hZyAgIDAgICAgLTAuMCAtPiAgMAorZGRteGcwMzMgbWF4bWFnICAgMCAgICAgMC4wIC0+ICAwCitkZG14ZzAzNCBtYXhtYWcgIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4KK2RkbXhnMDM1IG1heG1hZyAgLTAgICAgLTAgICAtPiAtMAorZGRteGcwMzYgbWF4bWFnICAtMCAgICAtMC4wIC0+IC0wLjAKK2RkbXhnMDM3IG1heG1hZyAgLTAgICAgIDAuMCAtPiAgMC4wCitkZG14ZzAzOCBtYXhtYWcgICAwLjAgICAwICAgLT4gIDAKK2RkbXhnMDM5IG1heG1hZyAgIDAuMCAgLTAgICAtPiAgMC4wCitkZG14ZzA0MCBtYXhtYWcgICAwLjAgIC0wLjAgLT4gIDAuMAorZGRteGcwNDEgbWF4bWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK2RkbXhnMDQyIG1heG1hZyAgLTAuMCAgIDAgICAtPiAgMAorZGRteGcwNDMgbWF4bWFnICAtMC4wICAtMCAgIC0+IC0wLjAKK2RkbXhnMDQ0IG1heG1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCitkZG14ZzA0NSBtYXhtYWcgIC0wLjAgICAwLjAgLT4gIDAuMAorCitkZG14ZzA1MCBtYXhtYWcgIC0wRTEgICAwRTEgLT4gIDBFKzEKK2RkbXhnMDUxIG1heG1hZyAgLTBFMiAgIDBFMiAtPiAgMEUrMgorZGRteGcwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxCitkZG14ZzA1MyBtYXhtYWcgIC0wRTEgICAwRTIgLT4gIDBFKzIKK2RkbXhnMDU0IG1heG1hZyAgIDBFMSAgLTBFMSAtPiAgMEUrMQorZGRteGcwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyCitkZG14ZzA1NiBtYXhtYWcgICAwRTIgIC0wRTEgLT4gIDBFKzIKK2RkbXhnMDU3IG1heG1hZyAgIDBFMSAgLTBFMiAtPiAgMEUrMQorCitkZG14ZzA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzEKK2RkbXhnMDU5IG1heG1hZyAgIDBFMiAgIDBFMiAtPiAgMEUrMgorZGRteGcwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyCitkZG14ZzA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzIKK2RkbXhnMDYyIG1heG1hZyAgLTBFMSAgLTBFMSAtPiAtMEUrMQorZGRteGcwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyCitkZG14ZzA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzEKK2RkbXhnMDY1IG1heG1hZyAgLTBFMSAgLTBFMiAtPiAtMEUrMQorCistLSBTcGVjaWFscworZGRteGcwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMDkxIG1heG1hZyAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZG14ZzA5MiBtYXhtYWcgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRteGcwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RkbXhnMDk0IG1heG1hZyAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkZG14ZzA5NSBtYXhtYWcgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRteGcwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkbXhnMDk3IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzA5OCBtYXhtYWcgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMTAwIG1heG1hZyAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEwMSBtYXhtYWcgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMTAzIG1heG1hZyAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEwNCBtYXhtYWcgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRteGcxMjAgbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZG14ZzEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRteGcxMjMgbWF4bWFnIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RkbXhnMTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZG14ZzEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRteGcxMjYgbWF4bWFnIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkbXhnMTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RkbXhnMTI5IG1heG1hZyAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxMzEgbWF4bWFnIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTMyIG1heG1hZyAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxMzQgbWF4bWFnICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTM1IG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZGRteGcxNDEgbWF4bWFnICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkKK2RkbXhnMTQyIG1heG1hZyAgTmFOIC0xMDAwICAgLT4gLTEwMDAKK2RkbXhnMTQzIG1heG1hZyAgTmFOIC0xICAgICAgLT4gLTEKK2RkbXhnMTQ0IG1heG1hZyAgTmFOIC0wICAgICAgLT4gLTAKK2RkbXhnMTQ1IG1heG1hZyAgTmFOICAwICAgICAgLT4gIDAKK2RkbXhnMTQ2IG1heG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RkbXhnMTQ3IG1heG1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RkbXhnMTQ4IG1heG1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkZG14ZzE0OSBtYXhtYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkbXhnMTUwIG1heG1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkZG14ZzE1MSBtYXhtYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkZG14ZzE1MiBtYXhtYWcgLTEgICAgTmFOICAgIC0+IC0xCitkZG14ZzE1MyBtYXhtYWcgLTAgICAgTmFOICAgIC0+IC0wCitkZG14ZzE1NCBtYXhtYWcgIDAgICAgTmFOICAgIC0+ICAwCitkZG14ZzE1NSBtYXhtYWcgIDEgICAgTmFOICAgIC0+ICAxCitkZG14ZzE1NiBtYXhtYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkZG14ZzE1NyBtYXhtYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkZG14ZzE2MSBtYXhtYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2MyBtYXhtYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2NCBtYXhtYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2NiBtYXhtYWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2NyBtYXhtYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2OSBtYXhtYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3MCBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3MiBtYXhtYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3MyBtYXhtYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3NSBtYXhtYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3NiBtYXhtYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3OCBtYXhtYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3OSBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbXhnMTgxIG1heG1hZyAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxODIgbWF4bWFnICBOYU44ICAgICA5ICAgLT4gIDkKK2RkbXhnMTgzIG1heG1hZyAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG14ZzE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQorZGRteGcxODUgbWF4bWFnICBOYU4yICAgTmFOMTIgLT4gIE5hTjIKK2RkbXhnMTg2IG1heG1hZyAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMworZGRteGcxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0CisKK2RkbXhnMTg4IG1heG1hZyAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQorZGRteGcxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkKK2RkbXhnMTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkZG14ZzE5MSBtYXhtYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTIgbWF4bWFnICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTkzIG1heG1hZyAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5NCBtYXhtYWcgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTUgbWF4bWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTk2IG1heG1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5NyBtYXhtYWcgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTggbWF4bWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTk5IG1heG1hZyAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RkbXhnMjIxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMAorZGRteGcyMjIgbWF4bWFnIDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitkZG14ZzIyMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMAorZGRteGcyMjQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK2RkbXhnMjI1IG1heG1hZyAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwCitkZG14ZzIyNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorZGRteGcyMjcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTEKK2RkbXhnMjI4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitkZG14ZzIyOSBtYXhtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDEKK2RkbXhnMjMwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorZGRteGcyMzEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYKK2RkbXhnMjMyIG1heG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CitkZG14ZzIzMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEyMzQ1Njc4OTEKK2RkbXhnMjM0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMTIzNDU2Nzg5MQorZGRteGcyMzUgbWF4bWFnIC0xMjM0NTY3ODkwMSAxIC0+IC0xMjM0NTY3ODkwMQorZGRteGcyMzYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xMjM0NTY3ODkwMQorZGRteGcyMzcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xMjM0NTY3ODk2CitkZG14ZzIzOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEyMzQ1Njc4OTYKKworLS0gZnJvbSBleGFtcGxlcworZGRteGcyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJworZGRteGcyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnCitkZG14ZzI4MiBtYXhtYWcgJzEuMCcgJzEnICAtPiAgJzEnCitkZG14ZzI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnCitkZG14ZzI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZGRteGc0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK2RkbXhnNDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorZGRteGc0MDMgbWF4bWFnICAxICAgICAgMS4wICAgICAtPiAgMQorZGRteGc0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitkZG14ZzQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK2RkbXhnNDA2IG1heG1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKK2RkbXhnNDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK2RkbXhnNDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAKK2RkbXhnNDA5IG1heG1hZyAgMC4wICAgLTAgICAgICAgLT4gIDAuMAorZGRteGc0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitkZG14ZzQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitkZG14ZzQxMiBtYXhtYWcgIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKK2RkbXhnNDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDAKK2RkbXhnNDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDAKK2RkbXhnNDE1IG1heG1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAuMAorZGRteGc0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKK2RkbXhnNDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCitkZG14ZzQxOCBtYXhtYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwCitkZG14ZzQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK2RkbXhnNDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMAorZGRteGc0MjEgbWF4bWFnIC0xICAgICAtMS4xICAgICAtPiAtMS4xCitkZG14ZzQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkZG14ZzQzMSBtYXhtYWcgIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQorZGRteGc0MzIgbWF4bWFnICAxICAgICAgMS4xICAgICAtPiAgMS4xCitkZG14ZzQzMyBtYXhtYWcgIDEuMCAgICAxICAgICAgIC0+ICAxCitkZG14ZzQzNCBtYXhtYWcgIDAuMSAgICAxLjAgICAgIC0+ICAxLjAKK2RkbXhnNDM1IG1heG1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQorZGRteGc0MzYgbWF4bWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMAorZGRteGc0MzcgbWF4bWFnICAwICAgICAgMC4xMCAgICAtPiAgMC4xMAorZGRteGc0MzggbWF4bWFnICAwLjAgICAgMCAgICAgICAtPiAgMAorZGRteGc0MzkgbWF4bWFnIC0wICAgICAgMC4wICAgICAtPiAgMC4wCitkZG14ZzQ0MCBtYXhtYWcgLTAuMCAgICAwLjAgICAgIC0+ICAwLjAKK2RkbXhnNDQxIG1heG1hZyAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDAKK2RkbXhnNDQyIG1heG1hZyAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMAorZGRteGc0NDMgbWF4bWFnIC0wLjAgICAgMCAgICAgICAtPiAgMAorZGRteGc0NDQgbWF4bWFnIC0wICAgICAgMCAgICAgICAtPiAgMAorZGRteGc0NDUgbWF4bWFnIC0wICAgICAtMC4wICAgICAtPiAtMC4wCitkZG14ZzQ0NiBtYXhtYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAorZGRteGc0NDcgbWF4bWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKK2RkbXhnNDQ4IG1heG1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK2RkbXhnNDQ5IG1heG1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAorZGRteGc0NTAgbWF4bWFnIC0xICAgICAtMS4wICAgICAtPiAtMS4wCitkZG14ZzQ1MSBtYXhtYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK2RkbXhnNDUzIG1heG1hZyAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitkZG14ZzQ2MCBtYXhtYWcgIDEwMDAgICAxRSszICAgIC0+ICAxRSszCitkZG14ZzQ2MSBtYXhtYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCitkZG14ZzQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCitkZG14ZzQ2MyBtYXhtYWcgIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszCitkZG14ZzQ2NCBtYXhtYWcgLTEwMDAgICAxRSszICAgIC0+ICAxRSszCitkZG14ZzQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkZG14ZzQ2NiBtYXhtYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwCitkZG14ZzQ2NyBtYXhtYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCisKKy0tIHN1Ym5vcm1hbHMKK2RkbXhnNTEwIG1heG1hZyAgMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wMEUtMzgzCitkZG14ZzUxMSBtYXhtYWcgIDAuMUUtMzgzICAgICAgICAwICAtPiAgIDFFLTM4NCAgICBTdWJub3JtYWwKK2RkbXhnNTEyIG1heG1hZyAgMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wRS0zODQgIFN1Ym5vcm1hbAorZGRteGc1MTMgbWF4bWFnICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAxLjAwRS0zODQgU3Vibm9ybWFsCitkZG14ZzUxNCBtYXhtYWcgIDAuMDFFLTM4MyAgICAgICAwICAtPiAgIDFFLTM4NSAgICBTdWJub3JtYWwKK2RkbXhnNTE1IG1heG1hZyAgMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgOS45OUUtMzg0IFN1Ym5vcm1hbAorZGRteGc1MTYgbWF4bWFnICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICA5LjlFLTM4NSAgU3Vibm9ybWFsCitkZG14ZzUxNyBtYXhtYWcgIDAuMDA5RS0zODMgICAgICAwICAtPiAgIDlFLTM4NiAgICBTdWJub3JtYWwKK2RkbXhnNTE4IG1heG1hZyAgMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRteGc1MTkgbWF4bWFnICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICA5RS0zODcgICAgU3Vibm9ybWFsCitkZG14ZzUyMCBtYXhtYWcgIDAuMDAwMUUtMzgzICAgICAwICAtPiAgIDFFLTM4NyAgICBTdWJub3JtYWwKKworZGRteGc1MzAgbWF4bWFnIC0xLjAwRS0zODMgICAgICAgMCAgLT4gIC0xLjAwRS0zODMKK2RkbXhnNTMxIG1heG1hZyAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbAorZGRteGc1MzIgbWF4bWFnIC0wLjEwRS0zODMgICAgICAgMCAgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsCitkZG14ZzUzMyBtYXhtYWcgLTAuMTAwRS0zODMgICAgICAwICAtPiAgLTEuMDBFLTM4NCBTdWJub3JtYWwKK2RkbXhnNTM0IG1heG1hZyAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAtMUUtMzg1ICAgIFN1Ym5vcm1hbAorZGRteGc1MzUgbWF4bWFnIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gIC05Ljk5RS0zODQgU3Vibm9ybWFsCitkZG14ZzUzNiBtYXhtYWcgLTAuMDk5RS0zODMgICAgICAwICAtPiAgLTkuOUUtMzg1ICBTdWJub3JtYWwKK2RkbXhnNTM3IG1heG1hZyAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAtOUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRteGc1MzggbWF4bWFnIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gIC0xRS0zODYgICAgU3Vibm9ybWFsCitkZG14ZzUzOSBtYXhtYWcgLTAuMDAwOUUtMzgzICAgICAwICAtPiAgLTlFLTM4NyAgICBTdWJub3JtYWwKK2RkbXhnNTQwIG1heG1hZyAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAtMUUtMzg3ICAgIFN1Ym5vcm1hbAorCistLSBOdWxsIHRlc3RzCitkZG14ZzkwMCBtYXhtYWcgMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRteGc5MDEgbWF4bWFnICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbi5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbi5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOTQyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWluLmRlY1Rlc3QKQEAgLTAsMCArMSwzMDkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNaW4uZGVjVGVzdCAtLSBkZWNEb3VibGUgbWlubnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkbWluMDAxIG1pbiAgLTIgIC0yICAtPiAtMgorZGRtaW4wMDIgbWluICAtMiAgLTEgIC0+IC0yCitkZG1pbjAwMyBtaW4gIC0yICAgMCAgLT4gLTIKK2RkbWluMDA0IG1pbiAgLTIgICAxICAtPiAtMgorZGRtaW4wMDUgbWluICAtMiAgIDIgIC0+IC0yCitkZG1pbjAwNiBtaW4gIC0xICAtMiAgLT4gLTIKK2RkbWluMDA3IG1pbiAgLTEgIC0xICAtPiAtMQorZGRtaW4wMDggbWluICAtMSAgIDAgIC0+IC0xCitkZG1pbjAwOSBtaW4gIC0xICAgMSAgLT4gLTEKK2RkbWluMDEwIG1pbiAgLTEgICAyICAtPiAtMQorZGRtaW4wMTEgbWluICAgMCAgLTIgIC0+IC0yCitkZG1pbjAxMiBtaW4gICAwICAtMSAgLT4gLTEKK2RkbWluMDEzIG1pbiAgIDAgICAwICAtPiAgMAorZGRtaW4wMTQgbWluICAgMCAgIDEgIC0+ICAwCitkZG1pbjAxNSBtaW4gICAwICAgMiAgLT4gIDAKK2RkbWluMDE2IG1pbiAgIDEgIC0yICAtPiAtMgorZGRtaW4wMTcgbWluICAgMSAgLTEgIC0+IC0xCitkZG1pbjAxOCBtaW4gICAxICAgMCAgLT4gIDAKK2RkbWluMDE5IG1pbiAgIDEgICAxICAtPiAgMQorZGRtaW4wMjAgbWluICAgMSAgIDIgIC0+ICAxCitkZG1pbjAyMSBtaW4gICAyICAtMiAgLT4gLTIKK2RkbWluMDIyIG1pbiAgIDIgIC0xICAtPiAtMQorZGRtaW4wMjMgbWluICAgMiAgIDAgIC0+ICAwCitkZG1pbjAyNSBtaW4gICAyICAgMSAgLT4gIDEKK2RkbWluMDI2IG1pbiAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZGRtaW4wMzAgbWluICAgMCAgICAgMCAgIC0+ICAwCitkZG1pbjAzMSBtaW4gICAwICAgIC0wICAgLT4gLTAKK2RkbWluMDMyIG1pbiAgIDAgICAgLTAuMCAtPiAtMC4wCitkZG1pbjAzMyBtaW4gICAwICAgICAwLjAgLT4gIDAuMAorZGRtaW4wMzQgbWluICAtMCAgICAgMCAgIC0+IC0wCitkZG1pbjAzNSBtaW4gIC0wICAgIC0wICAgLT4gLTAKK2RkbWluMDM2IG1pbiAgLTAgICAgLTAuMCAtPiAtMAorZGRtaW4wMzcgbWluICAtMCAgICAgMC4wIC0+IC0wCitkZG1pbjAzOCBtaW4gICAwLjAgICAwICAgLT4gIDAuMAorZGRtaW4wMzkgbWluICAgMC4wICAtMCAgIC0+IC0wCitkZG1pbjA0MCBtaW4gICAwLjAgIC0wLjAgLT4gLTAuMAorZGRtaW4wNDEgbWluICAgMC4wICAgMC4wIC0+ICAwLjAKK2RkbWluMDQyIG1pbiAgLTAuMCAgIDAgICAtPiAtMC4wCitkZG1pbjA0MyBtaW4gIC0wLjAgIC0wICAgLT4gLTAKK2RkbWluMDQ0IG1pbiAgLTAuMCAgLTAuMCAtPiAtMC4wCitkZG1pbjA0NSBtaW4gIC0wLjAgICAwLjAgLT4gLTAuMAorCitkZG1pbjA0NiBtaW4gICAwRTEgIC0wRTEgLT4gLTBFKzEKK2RkbWluMDQ3IG1pbiAgLTBFMSAgIDBFMiAtPiAtMEUrMQorZGRtaW4wNDggbWluICAgMEUyICAgMEUxIC0+ICAwRSsxCitkZG1pbjA0OSBtaW4gICAwRTEgICAwRTIgLT4gIDBFKzEKK2RkbWluMDUwIG1pbiAgLTBFMyAgLTBFMiAtPiAtMEUrMworZGRtaW4wNTEgbWluICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitkZG1pbjA5MCBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4wOTEgbWluICBJbmYgIC0xMDAwICAtPiAtMTAwMAorZGRtaW4wOTIgbWluICBJbmYgIC0xICAgICAtPiAtMQorZGRtaW4wOTMgbWluICBJbmYgIC0wICAgICAtPiAtMAorZGRtaW4wOTQgbWluICBJbmYgICAwICAgICAtPiAgMAorZGRtaW4wOTUgbWluICBJbmYgICAxICAgICAtPiAgMQorZGRtaW4wOTYgbWluICBJbmYgICAxMDAwICAtPiAgMTAwMAorZGRtaW4wOTcgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWluMDk4IG1pbiAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RkbWluMDk5IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEwMCBtaW4gLTEgICAgIEluZiAgIC0+IC0xCitkZG1pbjEwMSBtaW4gLTAgICAgIEluZiAgIC0+IC0wCitkZG1pbjEwMiBtaW4gIDAgICAgIEluZiAgIC0+ICAwCitkZG1pbjEwMyBtaW4gIDEgICAgIEluZiAgIC0+ICAxCitkZG1pbjEwNCBtaW4gIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkZG1pbjEwNSBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG1pbjEyMCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjEgbWluIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RkbWluMTIyIG1pbiAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZG1pbjEyMyBtaW4gLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjQgbWluIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RkbWluMTI1IG1pbiAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZG1pbjEyNiBtaW4gLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjcgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTI4IG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEyOSBtaW4gLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMzAgbWluIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTMxIG1pbiAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEzMiBtaW4gIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMzMgbWluICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTM0IG1pbiAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEzNSBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RkbWluMTQxIG1pbiAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQorZGRtaW4xNDIgbWluICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKK2RkbWluMTQzIG1pbiAgTmFOIC0xICAgICAgLT4gIC0xCitkZG1pbjE0NCBtaW4gIE5hTiAtMCAgICAgIC0+ICAtMAorZGRtaW4xNDUgbWluICBOYU4gIDAgICAgICAtPiAgMAorZGRtaW4xNDYgbWluICBOYU4gIDEgICAgICAtPiAgMQorZGRtaW4xNDcgbWluICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZGRtaW4xNDggbWluICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RkbWluMTQ5IG1pbiAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRtaW4xNTAgbWluIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RkbWluMTUxIG1pbiAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RkbWluMTUyIG1pbiAtMSAgIC1OYU4gICAgLT4gLTEKK2RkbWluMTUzIG1pbiAtMCAgICBOYU4gICAgLT4gLTAKK2RkbWluMTU0IG1pbiAgMCAgIC1OYU4gICAgLT4gIDAKK2RkbWluMTU1IG1pbiAgMSAgICBOYU4gICAgLT4gIDEKK2RkbWluMTU2IG1pbiAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RkbWluMTU3IG1pbiAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RkbWluMTYxIG1pbiAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTYyIG1pbiAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTYzIG1pbiAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY0IG1pbiAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY1IG1pbiAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY2IG1pbiAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY3IG1pbiAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY4IG1pbiAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY5IG1pbiAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTcwIG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTcxIG1pbiAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTcyIG1pbiAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTczIG1pbiAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc0IG1pbiAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc1IG1pbiAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc2IG1pbiAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc3IG1pbiAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc4IG1pbiAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc5IG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRtaW4xODEgbWluICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xODIgbWluIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCitkZG1pbjE4MyBtaW4gIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbWluMTg0IG1pbiAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQorZGRtaW4xODUgbWluICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgorZGRtaW4xODYgbWluIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCitkZG1pbjE4NyBtaW4gLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0CisKK2RkbWluMTg4IG1pbiAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKK2RkbWluMTg5IG1pbiAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorZGRtaW4xOTAgbWluICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkZG1pbjE5MSBtaW4gIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTIgbWluICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTkzIG1pbiAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5NCBtaW4gIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTUgbWluICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTk2IG1pbiAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5NyBtaW4gIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTggbWluICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTk5IG1pbiAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RkbWluMjIxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEyMzQ1Njc4MDAwCitkZG1pbjIyMiBtaW4gMSAtMTIzNDU2NzgwMDAgIC0+IC0xMjM0NTY3ODAwMAorZGRtaW4yMjMgbWluIC0xMjM0NTY3ODAwICAxICAtPiAtMTIzNDU2NzgwMAorZGRtaW4yMjQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMTIzNDU2NzgwMAorZGRtaW4yMjUgbWluIC0xMjM0NTY3ODkwICAxICAtPiAtMTIzNDU2Nzg5MAorZGRtaW4yMjYgbWluIDEgLTEyMzQ1Njc4OTAgICAtPiAtMTIzNDU2Nzg5MAorZGRtaW4yMjcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMTIzNDU2Nzg5MQorZGRtaW4yMjggbWluIDEgLTEyMzQ1Njc4OTEgICAtPiAtMTIzNDU2Nzg5MQorZGRtaW4yMjkgbWluIC0xMjM0NTY3ODkwMSAxICAtPiAtMTIzNDU2Nzg5MDEKK2RkbWluMjMwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxCitkZG1pbjIzMSBtaW4gLTEyMzQ1Njc4OTYgIDEgIC0+IC0xMjM0NTY3ODk2CitkZG1pbjIzMiBtaW4gMSAtMTIzNDU2Nzg5NiAgIC0+IC0xMjM0NTY3ODk2CitkZG1pbjIzMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK2RkbWluMjM0IG1pbiAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRtaW4yMzUgbWluIDEyMzQ1Njc4OTAxIDEgICAtPiAxCitkZG1pbjIzNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RkbWluMjM3IG1pbiAxMjM0NTY3ODk2ICAxICAgLT4gMQorZGRtaW4yMzggbWluIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK2RkbWluMjgwIG1pbiAnMycgICAnMicgIC0+ICAnMicKK2RkbWluMjgxIG1pbiAnLTEwJyAnMycgIC0+ICAnLTEwJworZGRtaW4yODIgbWluICcxLjAnICcxJyAgLT4gICcxLjAnCitkZG1pbjI4MyBtaW4gJzEnICcxLjAnICAtPiAgJzEuMCcKK2RkbWluMjg0IG1pbiAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkZG1pbjQwMSBtaW4gIEluZiAgICAxLjEgICAgIC0+ICAxLjEKK2RkbWluNDAyIG1pbiAgMS4xICAgIDEgICAgICAgLT4gIDEKK2RkbWluNDAzIG1pbiAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAorZGRtaW40MDQgbWluICAxLjAgICAgMC4xICAgICAtPiAgMC4xCitkZG1pbjQwNSBtaW4gIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCitkZG1pbjQwNiBtaW4gIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAorZGRtaW40MDcgbWluICAwLjEwICAgMCAgICAgICAtPiAgMAorZGRtaW40MDggbWluICAwICAgICAgMC4wICAgICAtPiAgMC4wCitkZG1pbjQwOSBtaW4gIDAuMCAgIC0wICAgICAgIC0+IC0wCitkZG1pbjQxMCBtaW4gIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbWluNDExIG1pbiAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAorZGRtaW40MTIgbWluICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAorZGRtaW40MTMgbWluICAwICAgICAtMC4wICAgICAtPiAtMC4wCitkZG1pbjQxNCBtaW4gIDAgICAgIC0wICAgICAgIC0+IC0wCitkZG1pbjQxNSBtaW4gLTAuMCAgIC0wICAgICAgIC0+IC0wCitkZG1pbjQxNiBtaW4gLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZGRtaW40MTcgbWluIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAorZGRtaW40MTggbWluIC0wLjEwICAtMC4xICAgICAtPiAtMC4xCitkZG1pbjQxOSBtaW4gLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK2RkbWluNDIwIG1pbiAtMS4wICAgLTEgICAgICAgLT4gLTEKK2RkbWluNDIxIG1pbiAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQorZGRtaW40MjMgbWluIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZGRtaW40MzEgbWluICAxLjEgICAgSW5mICAgICAtPiAgMS4xCitkZG1pbjQzMiBtaW4gIDEgICAgICAxLjEgICAgIC0+ICAxCitkZG1pbjQzMyBtaW4gIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK2RkbWluNDM0IG1pbiAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQorZGRtaW40MzUgbWluICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAorZGRtaW40MzYgbWluICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK2RkbWluNDM3IG1pbiAgMCAgICAgIDAuMTAgICAgLT4gIDAKK2RkbWluNDM4IG1pbiAgMC4wICAgIDAgICAgICAgLT4gIDAuMAorZGRtaW40MzkgbWluIC0wICAgICAgMC4wICAgICAtPiAtMAorZGRtaW40NDAgbWluIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCitkZG1pbjQ0MSBtaW4gLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKK2RkbWluNDQyIG1pbiAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK2RkbWluNDQzIG1pbiAtMC4wICAgIDAgICAgICAgLT4gLTAuMAorZGRtaW40NDQgbWluIC0wICAgICAgMCAgICAgICAtPiAtMAorZGRtaW40NDUgbWluIC0wICAgICAtMC4wICAgICAtPiAtMAorZGRtaW40NDYgbWluIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDAKK2RkbWluNDQ3IG1pbiAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKK2RkbWluNDQ4IG1pbiAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQorZGRtaW40NDkgbWluIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCitkZG1pbjQ1MCBtaW4gLTEgICAgIC0xLjAgICAgIC0+IC0xCitkZG1pbjQ1MSBtaW4gLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK2RkbWluNDUzIG1pbiAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitkZG1pbjQ2MCBtaW4gIDEwMDAgICAxRSszICAgIC0+ICAxMDAwCitkZG1pbjQ2MSBtaW4gIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkZG1pbjQ2MiBtaW4gIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCitkZG1pbjQ2MyBtaW4gIDFFKzMgIC0zODQgICAgLT4gLTM4NAorZGRtaW40NjQgbWluIC0zODQgICAxRSszICAgIC0+IC0zODQKK2RkbWluNDY1IG1pbiAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKK2RkbWluNDY2IG1pbiAtMzg0ICAtMUUrMyAgICAtPiAtMUUrMworZGRtaW40NjcgbWluIC0xRSszICAtMzg0ICAgIC0+IC0xRSszCisKKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgorZGRtaW40NzEgbWluICAgICAgMS4wICAgICAgIDAuMSAgLT4gMC4xCitkZG1pbjQ3MiBtaW4gICAgICAwLjEgICAgICAgMS4wICAtPiAwLjEKK2RkbWluNDczIG1pbiAgICAgMTAuMCAgICAgICAwLjEgIC0+IDAuMQorZGRtaW40NzQgbWluICAgICAgMC4xICAgICAgMTAuMCAgLT4gMC4xCitkZG1pbjQ3NSBtaW4gICAgICAxMDAgICAgICAgMS4wICAtPiAxLjAKK2RkbWluNDc2IG1pbiAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEuMAorZGRtaW40NzcgbWluICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAuMAorZGRtaW40NzggbWluICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAuMAorZGRtaW40NzkgbWluICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwLjAKK2RkbWluNDgwIG1pbiAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMC4wCitkZG1pbjQ4MSBtaW4gICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwLjAKK2RkbWluNDgyIG1pbiAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAuMAorZGRtaW40ODMgbWluICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAuMAorZGRtaW40ODQgbWluICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAuMAorCistLSBzdWJub3JtYWxzCitkZG1pbjUxMCBtaW4gIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbWluNTExIG1pbiAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAorZGRtaW41MTIgbWluICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1pbjUxMyBtaW4gIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKK2RkbWluNTE0IG1pbiAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtaW41MTUgbWluICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1pbjUxNiBtaW4gIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbWluNTE3IG1pbiAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtaW41MTggbWluICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1pbjUxOSBtaW4gIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKK2RkbWluNTIwIG1pbiAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAorCitkZG1pbjUzMCBtaW4gLTEuMDBFLTM4MyAgICAgICAwICAtPiAgLTEuMDBFLTM4MworZGRtaW41MzEgbWluIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsCitkZG1pbjUzMiBtaW4gLTAuMTBFLTM4MyAgICAgICAwICAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwKK2RkbWluNTMzIG1pbiAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAtMS4wMEUtMzg0IFN1Ym5vcm1hbAorZGRtaW41MzQgbWluIC0wLjAxRS0zODMgICAgICAgMCAgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsCitkZG1pbjUzNSBtaW4gLTAuOTk5RS0zODMgICAgICAwICAtPiAgLTkuOTlFLTM4NCBTdWJub3JtYWwKK2RkbWluNTM2IG1pbiAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAtOS45RS0zODUgIFN1Ym5vcm1hbAorZGRtaW41MzcgbWluIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gIC05RS0zODYgICAgU3Vibm9ybWFsCitkZG1pbjUzOCBtaW4gLTAuMDAxRS0zODMgICAgICAwICAtPiAgLTFFLTM4NiAgICBTdWJub3JtYWwKK2RkbWluNTM5IG1pbiAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAtOUUtMzg3ICAgIFN1Ym5vcm1hbAorZGRtaW41NDAgbWluIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gIC0xRS0zODcgICAgU3Vibm9ybWFsCisKKworLS0gTnVsbCB0ZXN0cworZGRtaW45MDAgbWluIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW45MDEgbWluICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbk1hZy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbk1hZy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMTJmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWluTWFnLmRlY1Rlc3QKQEAgLTAsMCArMSwyOTMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNaW5NYWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgbWlubnVtbWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkbW5nMDAxIG1pbm1hZyAgLTIgIC0yICAtPiAtMgorZGRtbmcwMDIgbWlubWFnICAtMiAgLTEgIC0+IC0xCitkZG1uZzAwMyBtaW5tYWcgIC0yICAgMCAgLT4gIDAKK2RkbW5nMDA0IG1pbm1hZyAgLTIgICAxICAtPiAgMQorZGRtbmcwMDUgbWlubWFnICAtMiAgIDIgIC0+IC0yCitkZG1uZzAwNiBtaW5tYWcgIC0xICAtMiAgLT4gLTEKK2RkbW5nMDA3IG1pbm1hZyAgLTEgIC0xICAtPiAtMQorZGRtbmcwMDggbWlubWFnICAtMSAgIDAgIC0+ICAwCitkZG1uZzAwOSBtaW5tYWcgIC0xICAgMSAgLT4gLTEKK2RkbW5nMDEwIG1pbm1hZyAgLTEgICAyICAtPiAtMQorZGRtbmcwMTEgbWlubWFnICAgMCAgLTIgIC0+ICAwCitkZG1uZzAxMiBtaW5tYWcgICAwICAtMSAgLT4gIDAKK2RkbW5nMDEzIG1pbm1hZyAgIDAgICAwICAtPiAgMAorZGRtbmcwMTQgbWlubWFnICAgMCAgIDEgIC0+ICAwCitkZG1uZzAxNSBtaW5tYWcgICAwICAgMiAgLT4gIDAKK2RkbW5nMDE2IG1pbm1hZyAgIDEgIC0yICAtPiAgMQorZGRtbmcwMTcgbWlubWFnICAgMSAgLTEgIC0+IC0xCitkZG1uZzAxOCBtaW5tYWcgICAxICAgMCAgLT4gIDAKK2RkbW5nMDE5IG1pbm1hZyAgIDEgICAxICAtPiAgMQorZGRtbmcwMjAgbWlubWFnICAgMSAgIDIgIC0+ICAxCitkZG1uZzAyMSBtaW5tYWcgICAyICAtMiAgLT4gLTIKK2RkbW5nMDIyIG1pbm1hZyAgIDIgIC0xICAtPiAtMQorZGRtbmcwMjMgbWlubWFnICAgMiAgIDAgIC0+ICAwCitkZG1uZzAyNSBtaW5tYWcgICAyICAgMSAgLT4gIDEKK2RkbW5nMDI2IG1pbm1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZGRtbmcwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwCitkZG1uZzAzMSBtaW5tYWcgICAwICAgIC0wICAgLT4gLTAKK2RkbW5nMDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wCitkZG1uZzAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMAorZGRtbmcwMzQgbWlubWFnICAtMCAgICAgMCAgIC0+IC0wCitkZG1uZzAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTAKK2RkbW5nMDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMAorZGRtbmcwMzcgbWlubWFnICAtMCAgICAgMC4wIC0+IC0wCitkZG1uZzAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMAorZGRtbmcwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wCitkZG1uZzA0MCBtaW5tYWcgICAwLjAgIC0wLjAgLT4gLTAuMAorZGRtbmcwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK2RkbW5nMDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wCitkZG1uZzA0MyBtaW5tYWcgIC0wLjAgIC0wICAgLT4gLTAKK2RkbW5nMDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCitkZG1uZzA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMAorCitkZG1uZzA0NiBtaW5tYWcgICAwRTEgIC0wRTEgLT4gLTBFKzEKK2RkbW5nMDQ3IG1pbm1hZyAgLTBFMSAgIDBFMiAtPiAtMEUrMQorZGRtbmcwNDggbWlubWFnICAgMEUyICAgMEUxIC0+ICAwRSsxCitkZG1uZzA0OSBtaW5tYWcgICAwRTEgICAwRTIgLT4gIDBFKzEKK2RkbW5nMDUwIG1pbm1hZyAgLTBFMyAgLTBFMiAtPiAtMEUrMworZGRtbmcwNTEgbWlubWFnICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitkZG1uZzA5MCBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtbmcwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMAorZGRtbmcwOTIgbWlubWFnICBJbmYgIC0xICAgICAtPiAtMQorZGRtbmcwOTMgbWlubWFnICBJbmYgIC0wICAgICAtPiAtMAorZGRtbmcwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMAorZGRtbmcwOTUgbWlubWFnICBJbmYgICAxICAgICAtPiAgMQorZGRtbmcwOTYgbWlubWFnICBJbmYgICAxMDAwICAtPiAgMTAwMAorZGRtbmcwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbW5nMDk4IG1pbm1hZyAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RkbW5nMDk5IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZG1uZzEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xCitkZG1uZzEwMSBtaW5tYWcgLTAgICAgIEluZiAgIC0+IC0wCitkZG1uZzEwMiBtaW5tYWcgIDAgICAgIEluZiAgIC0+ICAwCitkZG1uZzEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxCitkZG1uZzEwNCBtaW5tYWcgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkZG1uZzEwNSBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG1uZzEyMCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtbmcxMjEgbWlubWFnIC1JbmYgIC0xMDAwICAtPiAtMTAwMAorZGRtbmcxMjIgbWlubWFnIC1JbmYgIC0xICAgICAtPiAtMQorZGRtbmcxMjMgbWlubWFnIC1JbmYgIC0wICAgICAtPiAtMAorZGRtbmcxMjQgbWlubWFnIC1JbmYgICAwICAgICAtPiAgMAorZGRtbmcxMjUgbWlubWFnIC1JbmYgICAxICAgICAtPiAgMQorZGRtbmcxMjYgbWlubWFnIC1JbmYgICAxMDAwICAtPiAgMTAwMAorZGRtbmcxMjcgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbW5nMTI4IG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1uZzEyOSBtaW5tYWcgLTEwMDAgLUluZiAgIC0+IC0xMDAwCitkZG1uZzEzMCBtaW5tYWcgLTEgICAgLUluZiAgIC0+IC0xCitkZG1uZzEzMSBtaW5tYWcgLTAgICAgLUluZiAgIC0+IC0wCitkZG1uZzEzMiBtaW5tYWcgIDAgICAgLUluZiAgIC0+ICAwCitkZG1uZzEzMyBtaW5tYWcgIDEgICAgLUluZiAgIC0+ICAxCitkZG1uZzEzNCBtaW5tYWcgIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkZG1uZzEzNSBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RkbW5nMTQxIG1pbm1hZyAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQorZGRtbmcxNDIgbWlubWFnICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKK2RkbW5nMTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xCitkZG1uZzE0NCBtaW5tYWcgIE5hTiAtMCAgICAgIC0+ICAtMAorZGRtbmcxNDUgbWlubWFnICBOYU4gIDAgICAgICAtPiAgMAorZGRtbmcxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQorZGRtbmcxNDcgbWlubWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZGRtbmcxNDggbWlubWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RkbW5nMTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRtbmcxNTAgbWlubWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RkbW5nMTUxIG1pbm1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RkbW5nMTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTEKK2RkbW5nMTUzIG1pbm1hZyAtMCAgICBOYU4gICAgLT4gLTAKK2RkbW5nMTU0IG1pbm1hZyAgMCAgIC1OYU4gICAgLT4gIDAKK2RkbW5nMTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDEKK2RkbW5nMTU2IG1pbm1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RkbW5nMTU3IG1pbm1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RkbW5nMTYxIG1pbm1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTYyIG1pbm1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTYzIG1pbm1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY0IG1pbm1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY1IG1pbm1hZyAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY2IG1pbm1hZyAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY3IG1pbm1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY4IG1pbm1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY5IG1pbm1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTcwIG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTcxIG1pbm1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTcyIG1pbm1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTczIG1pbm1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc0IG1pbm1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc1IG1pbm1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc2IG1pbm1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc3IG1pbm1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc4IG1pbm1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc5IG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRtbmcxODEgbWlubWFnICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtbmcxODIgbWlubWFnIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCitkZG1uZzE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbW5nMTg0IG1pbm1hZyAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQorZGRtbmcxODUgbWlubWFnICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgorZGRtbmcxODYgbWlubWFnIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCitkZG1uZzE4NyBtaW5tYWcgLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0CisKK2RkbW5nMTg4IG1pbm1hZyAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKK2RkbW5nMTg5IG1pbm1hZyAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorZGRtbmcxOTAgbWlubWFnICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkZG1uZzE5MSBtaW5tYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTkzIG1pbm1hZyAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5NCBtaW5tYWcgIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTk2IG1pbm1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5NyBtaW5tYWcgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTk5IG1pbm1hZyAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RkbW5nMjIxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQorZGRtbmcyMjIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxCitkZG1uZzIyMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDEKK2RkbW5nMjI0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQorZGRtbmcyMjUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxCitkZG1uZzIyNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDEKK2RkbW5nMjI3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQorZGRtbmcyMjggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxCitkZG1uZzIyOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDEKK2RkbW5nMjMwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQorZGRtbmcyMzEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxCitkZG1uZzIzMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDEKK2RkbW5nMjMzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQorZGRtbmcyMzQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkZG1uZzIzNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDEKK2RkbW5nMjM2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZGRtbmcyMzcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxCitkZG1uZzIzOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBleGFtcGxlcworZGRtbmcyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJworZGRtbmcyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJworZGRtbmcyODIgbWlubWFnICcxLjAnICcxJyAgLT4gICcxLjAnCitkZG1uZzI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcKK2RkbW5nMjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkZG1uZzQwMSBtaW5tYWcgIEluZiAgICAxLjEgICAgIC0+ICAxLjEKK2RkbW5nNDAyIG1pbm1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEKK2RkbW5nNDAzIG1pbm1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAorZGRtbmc0MDQgbWlubWFnICAxLjAgICAgMC4xICAgICAtPiAgMC4xCitkZG1uZzQwNSBtaW5tYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCitkZG1uZzQwNiBtaW5tYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAorZGRtbmc0MDcgbWlubWFnICAwLjEwICAgMCAgICAgICAtPiAgMAorZGRtbmc0MDggbWlubWFnICAwICAgICAgMC4wICAgICAtPiAgMC4wCitkZG1uZzQwOSBtaW5tYWcgIDAuMCAgIC0wICAgICAgIC0+IC0wCitkZG1uZzQxMCBtaW5tYWcgIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbW5nNDExIG1pbm1hZyAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAorZGRtbmc0MTIgbWlubWFnICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAorZGRtbmc0MTMgbWlubWFnICAwICAgICAtMC4wICAgICAtPiAtMC4wCitkZG1uZzQxNCBtaW5tYWcgIDAgICAgIC0wICAgICAgIC0+IC0wCitkZG1uZzQxNSBtaW5tYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wCitkZG1uZzQxNiBtaW5tYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wCitkZG1uZzQxNyBtaW5tYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwCitkZG1uZzQxOCBtaW5tYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEKK2RkbW5nNDE5IG1pbm1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQorZGRtbmc0MjAgbWlubWFnIC0xLjAgICAtMSAgICAgICAtPiAtMQorZGRtbmc0MjEgbWlubWFnIC0xICAgICAtMS4xICAgICAtPiAtMQorZGRtbmc0MjMgbWlubWFnIC0xLjEgICAtSW5mICAgICAtPiAtMS4xCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RkbW5nNDMxIG1pbm1hZyAgMS4xICAgIEluZiAgICAgLT4gIDEuMQorZGRtbmc0MzIgbWlubWFnICAxICAgICAgMS4xICAgICAtPiAgMQorZGRtbmc0MzMgbWlubWFnICAxLjAgICAgMSAgICAgICAtPiAgMS4wCitkZG1uZzQzNCBtaW5tYWcgIDAuMSAgICAxLjAgICAgIC0+ICAwLjEKK2RkbW5nNDM1IG1pbm1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKK2RkbW5nNDM2IG1pbm1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwCitkZG1uZzQzNyBtaW5tYWcgIDAgICAgICAwLjEwICAgIC0+ICAwCitkZG1uZzQzOCBtaW5tYWcgIDAuMCAgICAwICAgICAgIC0+ICAwLjAKK2RkbW5nNDM5IG1pbm1hZyAtMCAgICAgIDAuMCAgICAgLT4gLTAKK2RkbW5nNDQwIG1pbm1hZyAtMC4wICAgIDAuMCAgICAgLT4gLTAuMAorZGRtbmc0NDEgbWlubWFnIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCitkZG1uZzQ0MiBtaW5tYWcgLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwCitkZG1uZzQ0MyBtaW5tYWcgLTAuMCAgICAwICAgICAgIC0+IC0wLjAKK2RkbW5nNDQ0IG1pbm1hZyAtMCAgICAgIDAgICAgICAgLT4gLTAKK2RkbW5nNDQ1IG1pbm1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAKK2RkbW5nNDQ2IG1pbm1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAKK2RkbW5nNDQ3IG1pbm1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKK2RkbW5nNDQ4IG1pbm1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQorZGRtbmc0NDkgbWlubWFnIC0xLjAgICAtMC4xICAgICAtPiAtMC4xCitkZG1uZzQ1MCBtaW5tYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xCitkZG1uZzQ1MSBtaW5tYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xCitkZG1uZzQ1MyBtaW5tYWcgLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKKy0tIGxhcmdpZXMKK2RkbW5nNDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDAKK2RkbW5nNDYxIG1pbm1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RkbW5nNDYyIG1pbm1hZyAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK2RkbW5nNDYzIG1pbm1hZyAgMUUrMyAgIC0zODQgICAgLT4gLTM4NAorZGRtbmc0NjQgbWlubWFnIC0zODQgICAgMUUrMyAgICAtPiAtMzg0CitkZG1uZzQ2NSBtaW5tYWcgLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCitkZG1uZzQ2NiBtaW5tYWcgLTM4NCAgIC0xRSszICAgIC0+IC0zODQKK2RkbW5nNDY3IG1pbm1hZyAtMUUrMyAgIC0zODQgICAgLT4gLTM4NAorCistLSBzdWJub3JtYWxzCitkZG1uZzUxMCBtaW5tYWcgIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbW5nNTExIG1pbm1hZyAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTIgbWlubWFnICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1uZzUxMyBtaW5tYWcgIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTE0IG1pbm1hZyAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTUgbWlubWFnICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUxNiBtaW5tYWcgIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTE3IG1pbm1hZyAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTggbWlubWFnICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUxOSBtaW5tYWcgIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKK2RkbW5nNTIwIG1pbm1hZyAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAorCitkZG1uZzUzMCBtaW5tYWcgLTEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbW5nNTMxIG1pbm1hZyAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzIgbWlubWFnIC0wLjEwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1uZzUzMyBtaW5tYWcgLTAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTM0IG1pbm1hZyAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzUgbWlubWFnIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUzNiBtaW5tYWcgLTAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTM3IG1pbm1hZyAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzggbWlubWFnIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUzOSBtaW5tYWcgLTAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKK2RkbW5nNTQwIG1pbm1hZyAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAorCisKKy0tIE51bGwgdGVzdHMKK2RkbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nOTAxIG1pbm1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW51cy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbnVzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmZmZmNwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW51cy5kZWNUZXN0CkBAIC0wLDAgKzEsODggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNaW51cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSAwLXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZG1uczAwMSBtaW51cyAgICAgICArNy41MCAgLT4gLTcuNTAKKworLS0gSW5maW5pdGllcworZGRtbnMwMTEgbWludXMgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQorZGRtbnMwMTIgbWludXMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRtbnMwMjEgbWludXMgICAgICAgICBOYU4gIC0+IE5hTgorZGRtbnMwMjIgbWludXMgICAgICAgIC1OYU4gIC0+IC1OYU4KK2RkbW5zMDIzIG1pbnVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uczAyNCBtaW51cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZG1uczAzMSBtaW51cyAgICAgICBOYU4xMyAgLT4gTmFOMTMKK2RkbW5zMDMyIG1pbnVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMKK2RkbW5zMDMzIG1pbnVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uCitkZG1uczAzNCBtaW51cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbnMwMzUgbWludXMgICAgICAgTmFONzAgIC0+IE5hTjcwCitkZG1uczAzNiBtaW51cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwCitkZG1uczAzNyBtaW51cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbnMwMzggbWludXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZGRtbnMxMDEgbWludXMgICAgICAgICAgNyAgIC0+IC03CitkZG1uczEwMiBtaW51cyAgICAgICAgIC03ICAgLT4gNworZGRtbnMxMDMgbWludXMgICAgICAgICA3NSAgIC0+IC03NQorZGRtbnMxMDQgbWludXMgICAgICAgIC03NSAgIC0+IDc1CitkZG1uczEwNSBtaW51cyAgICAgICA3LjUwICAgLT4gLTcuNTAKK2RkbW5zMTA2IG1pbnVzICAgICAgLTcuNTAgICAtPiA3LjUwCitkZG1uczEwNyBtaW51cyAgICAgICA3LjUwMCAgLT4gLTcuNTAwCitkZG1uczEwOCBtaW51cyAgICAgIC03LjUwMCAgLT4gNy41MDAKKworLS0gemVyb3MKK2RkbW5zMTExIG1pbnVzICAgICAgICAgIDAgICAtPiAwCitkZG1uczExMiBtaW51cyAgICAgICAgIC0wICAgLT4gMAorZGRtbnMxMTMgbWludXMgICAgICAgMEUrNCAgIC0+IDBFKzQKK2RkbW5zMTE0IG1pbnVzICAgICAgLTBFKzQgICAtPiAwRSs0CitkZG1uczExNSBtaW51cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkZG1uczExNiBtaW51cyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkZG1uczExNyBtaW51cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkZG1uczExOCBtaW51cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZG1uczEyMSBtaW51cyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZG1uczEyMiBtaW51cyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkbW5zMTIzIG1pbnVzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEKK2RkbW5zMTI0IG1pbnVzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRtbnMxMzEgbWludXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRtbnMxMzIgbWludXMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCitkZG1uczEzMyBtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZG1uczEzNCBtaW51cyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggU3Vibm9ybWFsCisKK2RkbW5zMTM1IG1pbnVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbAorZGRtbnMxMzYgbWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZG1uczEzNyBtaW51cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRtbnMxMzggbWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTXVsdGlwbHkuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNdWx0aXBseS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NzNmODAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTXVsdGlwbHkuZGVjVGVzdApAQCAtMCwwICsxLDU1MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE11bHRpcGx5LmRlY1Rlc3QgLS0gZGVjRG91YmxlIG11bHRpcGxpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQorLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY0RvdWJsZQorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkbXVsMDAwIG11bHRpcGx5IDIgICAgICAyIC0+IDQKK2RkbXVsMDAxIG11bHRpcGx5IDIgICAgICAzIC0+IDYKK2RkbXVsMDAyIG11bHRpcGx5IDUgICAgICAxIC0+IDUKK2RkbXVsMDAzIG11bHRpcGx5IDUgICAgICAyIC0+IDEwCitkZG11bDAwNCBtdWx0aXBseSAxLjIwICAgMiAtPiAyLjQwCitkZG11bDAwNSBtdWx0aXBseSAxLjIwICAgMCAtPiAwLjAwCitkZG11bDAwNiBtdWx0aXBseSAxLjIwICAtMiAtPiAtMi40MAorZGRtdWwwMDcgbXVsdGlwbHkgLTEuMjAgIDIgLT4gLTIuNDAKK2RkbXVsMDA4IG11bHRpcGx5IC0xLjIwICAwIC0+IC0wLjAwCitkZG11bDAwOSBtdWx0aXBseSAtMS4yMCAtMiAtPiAyLjQwCitkZG11bDAxMCBtdWx0aXBseSA1LjA5IDcuMSAtPiAzNi4xMzkKK2RkbXVsMDExIG11bHRpcGx5IDIuNSAgICA0IC0+IDEwLjAKK2RkbXVsMDEyIG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwCitkZG11bDAxMyBtdWx0aXBseSAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAgUm91bmRlZAorZGRtdWwwMTUgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDAKK2RkbXVsMDE2IG11bHRpcGx5ICA5Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgLT4gIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRtdWwwMTcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZG11bDAxOCBtdWx0aXBseSAtOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5IC0+IC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsMDE5IG11bHRpcGx5IC05Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgLT4gIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSB6ZXJvcywgZXRjLgorZGRtdWwwMjEgbXVsdGlwbHkgIDAgICAgICAwICAgICAtPiAgMAorZGRtdWwwMjIgbXVsdGlwbHkgIDAgICAgIC0wICAgICAtPiAtMAorZGRtdWwwMjMgbXVsdGlwbHkgLTAgICAgICAwICAgICAtPiAtMAorZGRtdWwwMjQgbXVsdGlwbHkgLTAgICAgIC0wICAgICAtPiAgMAorZGRtdWwwMjUgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorZGRtdWwwMjYgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorZGRtdWwwMjcgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorZGRtdWwwMjggbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorZGRtdWwwMzAgbXVsdGlwbHkgIDUuMDAgICAxRS0zICAtPiAgMC4wMDUwMAorZGRtdWwwMzEgbXVsdGlwbHkgIDAwLjAwICAwLjAwMCAtPiAgMC4wMDAwMAorZGRtdWwwMzIgbXVsdGlwbHkgIDAwLjAwICAwRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkbXVsMDMzIG11bHRpcGx5ICAwRS0zICAgMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZG11bDAzNCBtdWx0aXBseSAtNS4wMCAgIDFFLTMgIC0+IC0wLjAwNTAwCitkZG11bDAzNSBtdWx0aXBseSAtMDAuMDAgIDAuMDAwIC0+IC0wLjAwMDAwCitkZG11bDAzNiBtdWx0aXBseSAtMDAuMDAgIDBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMAorZGRtdWwwMzcgbXVsdGlwbHkgLTBFLTMgICAwMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkbXVsMDM4IG11bHRpcGx5ICA1LjAwICAtMUUtMyAgLT4gLTAuMDA1MDAKK2RkbXVsMDM5IG11bHRpcGx5ICAwMC4wMCAtMC4wMDAgLT4gLTAuMDAwMDAKK2RkbXVsMDQwIG11bHRpcGx5ICAwMC4wMCAtMEUtMyAgLT4gLTAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZG11bDA0MSBtdWx0aXBseSAgMEUtMyAgLTAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZGRtdWwwNDIgbXVsdGlwbHkgLTUuMDAgIC0xRS0zICAtPiAgMC4wMDUwMAorZGRtdWwwNDMgbXVsdGlwbHkgLTAwLjAwIC0wLjAwMCAtPiAgMC4wMDAwMAorZGRtdWwwNDQgbXVsdGlwbHkgLTAwLjAwIC0wRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkbXVsMDQ1IG11bHRpcGx5IC0wRS0zICAtMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RkbXVsMDUwIG11bHRpcGx5IDEuMjAgMyAgICAgICAgLT4gMy42MAorZGRtdWwwNTEgbXVsdGlwbHkgNyAgICAzICAgICAgICAtPiAyMQorZGRtdWwwNTIgbXVsdGlwbHkgMC45ICAwLjggICAgICAtPiAwLjcyCitkZG11bDA1MyBtdWx0aXBseSAwLjkgIC0wICAgICAgIC0+IC0wLjAKK2RkbXVsMDU0IG11bHRpcGx5IDY1NDMyMSA2NTQzMjEgLT4gNDI4MTM1OTcxMDQxCisKK2RkbXVsMDYwIG11bHRpcGx5IDEyMy40NSAxZTcgIC0+ICAxLjIzNDVFKzkKK2RkbXVsMDYxIG11bHRpcGx5IDEyMy40NSAxZTggIC0+ICAxLjIzNDVFKzEwCitkZG11bDA2MiBtdWx0aXBseSAxMjMuNDUgMWUrOSAtPiAgMS4yMzQ1RSsxMQorZGRtdWwwNjMgbXVsdGlwbHkgMTIzLjQ1IDFlMTAgLT4gIDEuMjM0NUUrMTIKK2RkbXVsMDY0IG11bHRpcGx5IDEyMy40NSAxZTExIC0+ICAxLjIzNDVFKzEzCitkZG11bDA2NSBtdWx0aXBseSAxMjMuNDUgMWUxMiAtPiAgMS4yMzQ1RSsxNAorZGRtdWwwNjYgbXVsdGlwbHkgMTIzLjQ1IDFlMTMgLT4gIDEuMjM0NUUrMTUKKworCistLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMKKy0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZG11bDA4MCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RkbXVsMDg0IG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQorZGRtdWwwOTAgbXVsdGlwbHkgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkZG11bDA5NCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKKworLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcworZGRtdWwxMDEgbXVsdGlwbHkgOSA5ICAgLT4gODEKK2RkbXVsMTAyIG11bHRpcGx5IDkgOTAgICAtPiA4MTAKK2RkbXVsMTAzIG11bHRpcGx5IDkgOTAwICAgLT4gODEwMAorZGRtdWwxMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDAKK2RkbXVsMTA1IG11bHRpcGx5IDkgOTAwMDAgICAtPiA4MTAwMDAKK2RkbXVsMTA2IG11bHRpcGx5IDkgOTAwMDAwICAgLT4gODEwMDAwMAorZGRtdWwxMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDAKK2RkbXVsMTA4IG11bHRpcGx5IDkgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAKK2RkbXVsMTA5IG11bHRpcGx5IDkgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMAorZGRtdWwxMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAKK2RkbXVsMTExIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAKK2RkbXVsMTEyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMAorZGRtdWwxMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAKK2RkbXVsMTE0IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAKK2RkbXVsMTE1IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMAorLS1kZG11bDExNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMAorLS1kZG11bDExNyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwCistLWRkbXVsMTE4IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAorLS1kZG11bDExOSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZG11bDEyMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRkbXVsMTIxIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZG11bDEyMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZG11bDEyMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2FycmllcworZGRtdWwxMzEgbXVsdGlwbHkgMyAzICAgLT4gOQorZGRtdWwxMzIgbXVsdGlwbHkgMyAzMCAgIC0+IDkwCitkZG11bDEzMyBtdWx0aXBseSAzIDMwMCAgIC0+IDkwMAorZGRtdWwxMzQgbXVsdGlwbHkgMyAzMDAwICAgLT4gOTAwMAorZGRtdWwxMzUgbXVsdGlwbHkgMyAzMDAwMCAgIC0+IDkwMDAwCitkZG11bDEzNiBtdWx0aXBseSAzIDMwMDAwMCAgIC0+IDkwMDAwMAorZGRtdWwxMzcgbXVsdGlwbHkgMyAzMDAwMDAwICAgLT4gOTAwMDAwMAorZGRtdWwxMzggbXVsdGlwbHkgMyAzMDAwMDAwMCAgIC0+IDkwMDAwMDAwCitkZG11bDEzOSBtdWx0aXBseSAzIDMwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMAorZGRtdWwxNDAgbXVsdGlwbHkgMyAzMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMAorZGRtdWwxNDEgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwCitkZG11bDE0MiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMAorZGRtdWwxNDMgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMAorZGRtdWwxNDQgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwCitkZG11bDE0NSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMAorCistLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nCitkZG11bDMwMSBtdWx0aXBseSA5IDkgICAtPiA4MQorZGRtdWwzMDIgbXVsdGlwbHkgOSA5MCAgIC0+IDgxMAorZGRtdWwzMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwCitkZG11bDMwNCBtdWx0aXBseSA5IDkwMDAgICAtPiA4MTAwMAorZGRtdWwzMDUgbXVsdGlwbHkgOSA5MDAwMCAgIC0+IDgxMDAwMAorZGRtdWwzMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwCitkZG11bDMwNyBtdWx0aXBseSA5IDkwMDAwMDAgICAtPiA4MTAwMDAwMAorZGRtdWwzMDggbXVsdGlwbHkgOSA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMAorZGRtdWwzMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwCitkZG11bDMxMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMAorZGRtdWwzMTEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMAorZGRtdWwzMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwCitkZG11bDMxMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMAorZGRtdWwzMTQgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMAorZGRtdWwzMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwCitkZG11bDMxNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQKK2RkbXVsMzE3IG11bHRpcGx5IDkwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMTcgIFJvdW5kZWQKK2RkbXVsMzE4IG11bHRpcGx5IDkwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE4ICBSb3VuZGVkCitkZG11bDMxOSBtdWx0aXBseSA5MDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMTkgIFJvdW5kZWQKK2RkbXVsMzIwIG11bHRpcGx5IDkwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQKK2RkbXVsMzIxIG11bHRpcGx5IDkwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIxICBSb3VuZGVkCitkZG11bDMyMiBtdWx0aXBseSA5MDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMjIgIFJvdW5kZWQKK2RkbXVsMzIzIG11bHRpcGx5IDkwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMjMgIFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK2RkbXVsNTA0ICBtdWx0aXBseSAgMEUtMjYwIDEwMDBFLTI2MCAgLT4gMEUtMzk4IENsYW1wZWQKK2RkbXVsNTA1ICBtdWx0aXBseSAgMTAwRSsyNjAgMEUrMjYwICAgLT4gMEUrMzY5IENsYW1wZWQKKy0tIDY1Sy0xIGNhc2UKK2RkbXVsNTA2IG11bHRpcGx5IDc3LjEgODUwIC0+IDY1NTM1LjAKKworLS0gbWl4ZWQgd2l0aCB6ZXJvcworZGRtdWw1NDEgbXVsdGlwbHkgIDAgICAgLTEgICAgIC0+IC0wCitkZG11bDU0MiBtdWx0aXBseSAtMCAgICAtMSAgICAgLT4gIDAKK2RkbXVsNTQzIG11bHRpcGx5ICAwICAgICAxICAgICAtPiAgMAorZGRtdWw1NDQgbXVsdGlwbHkgLTAgICAgIDEgICAgIC0+IC0wCitkZG11bDU0NSBtdWx0aXBseSAtMSAgICAgMCAgICAgLT4gLTAKK2RkbXVsNTQ2IG11bHRpcGx5IC0xICAgIC0wICAgICAtPiAgMAorZGRtdWw1NDcgbXVsdGlwbHkgIDEgICAgIDAgICAgIC0+ICAwCitkZG11bDU0OCBtdWx0aXBseSAgMSAgICAtMCAgICAgLT4gLTAKKworZGRtdWw1NTEgbXVsdGlwbHkgIDAuMCAgLTEgICAgIC0+IC0wLjAKK2RkbXVsNTUyIG11bHRpcGx5IC0wLjAgIC0xICAgICAtPiAgMC4wCitkZG11bDU1MyBtdWx0aXBseSAgMC4wICAgMSAgICAgLT4gIDAuMAorZGRtdWw1NTQgbXVsdGlwbHkgLTAuMCAgIDEgICAgIC0+IC0wLjAKK2RkbXVsNTU1IG11bHRpcGx5IC0xLjAgICAwICAgICAtPiAtMC4wCitkZG11bDU1NiBtdWx0aXBseSAtMS4wICAtMCAgICAgLT4gIDAuMAorZGRtdWw1NTcgbXVsdGlwbHkgIDEuMCAgIDAgICAgIC0+ICAwLjAKK2RkbXVsNTU4IG11bHRpcGx5ICAxLjAgIC0wICAgICAtPiAtMC4wCisKK2RkbXVsNTYxIG11bHRpcGx5ICAwICAgIC0xLjAgICAtPiAtMC4wCitkZG11bDU2MiBtdWx0aXBseSAtMCAgICAtMS4wICAgLT4gIDAuMAorZGRtdWw1NjMgbXVsdGlwbHkgIDAgICAgIDEuMCAgIC0+ICAwLjAKK2RkbXVsNTY0IG11bHRpcGx5IC0wICAgICAxLjAgICAtPiAtMC4wCitkZG11bDU2NSBtdWx0aXBseSAtMSAgICAgMC4wICAgLT4gLTAuMAorZGRtdWw1NjYgbXVsdGlwbHkgLTEgICAgLTAuMCAgIC0+ICAwLjAKK2RkbXVsNTY3IG11bHRpcGx5ICAxICAgICAwLjAgICAtPiAgMC4wCitkZG11bDU2OCBtdWx0aXBseSAgMSAgICAtMC4wICAgLT4gLTAuMAorCitkZG11bDU3MSBtdWx0aXBseSAgMC4wICAtMS4wICAgLT4gLTAuMDAKK2RkbXVsNTcyIG11bHRpcGx5IC0wLjAgIC0xLjAgICAtPiAgMC4wMAorZGRtdWw1NzMgbXVsdGlwbHkgIDAuMCAgIDEuMCAgIC0+ICAwLjAwCitkZG11bDU3NCBtdWx0aXBseSAtMC4wICAgMS4wICAgLT4gLTAuMDAKK2RkbXVsNTc1IG11bHRpcGx5IC0xLjAgICAwLjAgICAtPiAtMC4wMAorZGRtdWw1NzYgbXVsdGlwbHkgLTEuMCAgLTAuMCAgIC0+ICAwLjAwCitkZG11bDU3NyBtdWx0aXBseSAgMS4wICAgMC4wICAgLT4gIDAuMDAKK2RkbXVsNTc4IG11bHRpcGx5ICAxLjAgIC0wLjAgICAtPiAtMC4wMAorCisKKy0tIFNwZWNpYWxzCitkZG11bDU4MCBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG11bDU4MSBtdWx0aXBseSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZG11bDU4MiBtdWx0aXBseSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZG11bDU4MyBtdWx0aXBseSAgSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNTg0IG11bHRpcGx5ICBJbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw1ODUgbXVsdGlwbHkgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRtdWw1ODYgbXVsdGlwbHkgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZGRtdWw1ODcgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtdWw1ODggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw1ODkgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw1OTAgbXVsdGlwbHkgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw1OTEgbXVsdGlwbHkgLTAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDU5MiBtdWx0aXBseSAgMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNTkzIG11bHRpcGx5ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXVsNTk0IG11bHRpcGx5ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXVsNTk1IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRtdWw2MDAgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRtdWw2MDEgbXVsdGlwbHkgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRtdWw2MDIgbXVsdGlwbHkgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRtdWw2MDMgbXVsdGlwbHkgLUluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDYwNCBtdWx0aXBseSAtSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjA1IG11bHRpcGx5IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RkbXVsNjA2IG11bHRpcGx5IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkbXVsNjA3IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNjA4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNjA5IG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RkbXVsNjEwIG11bHRpcGx5IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RkbXVsNjExIG11bHRpcGx5IC0wICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2MTIgbXVsdGlwbHkgIDAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDYxMyBtdWx0aXBseSAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG11bDYxNCBtdWx0aXBseSAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZG11bDYxNSBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CisKK2RkbXVsNjIxIG11bHRpcGx5ICBOYU4gLUluZiAgICAtPiAgTmFOCitkZG11bDYyMiBtdWx0aXBseSAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRtdWw2MjMgbXVsdGlwbHkgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RkbXVsNjI0IG11bHRpcGx5ICBOYU4gLTAgICAgICAtPiAgTmFOCitkZG11bDYyNSBtdWx0aXBseSAgTmFOICAwICAgICAgLT4gIE5hTgorZGRtdWw2MjYgbXVsdGlwbHkgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RkbXVsNjI3IG11bHRpcGx5ICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZG11bDYyOCBtdWx0aXBseSAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRtdWw2MjkgbXVsdGlwbHkgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjMwIG11bHRpcGx5IC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZG11bDYzMSBtdWx0aXBseSAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzIgbXVsdGlwbHkgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjMzIG11bHRpcGx5IC0wICAgIE5hTiAgICAtPiAgTmFOCitkZG11bDYzNCBtdWx0aXBseSAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzUgbXVsdGlwbHkgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjM2IG11bHRpcGx5ICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZG11bDYzNyBtdWx0aXBseSAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZG11bDY0MSBtdWx0aXBseSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQyIG11bHRpcGx5ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDMgbXVsdGlwbHkgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0NCBtdWx0aXBseSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQ1IG11bHRpcGx5ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDYgbXVsdGlwbHkgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0NyBtdWx0aXBseSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQ4IG11bHRpcGx5ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDkgbXVsdGlwbHkgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1MCBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjUxIG11bHRpcGx5IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTIgbXVsdGlwbHkgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1MyBtdWx0aXBseSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjU0IG11bHRpcGx5IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTUgbXVsdGlwbHkgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1NiBtdWx0aXBseSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjU3IG11bHRpcGx5ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTggbXVsdGlwbHkgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1OSBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRtdWw2NjEgbXVsdGlwbHkgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkZG11bDY2MiBtdWx0aXBseSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKK2RkbXVsNjYzIG11bHRpcGx5ICBOYU43MSBJbmYgICAtPiAgTmFONzEKK2RkbXVsNjY0IG11bHRpcGx5ICBOYU42ICBOYU41ICAtPiAgTmFONgorZGRtdWw2NjUgbXVsdGlwbHkgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkZG11bDY2NiBtdWx0aXBseSAtOTk5ICAgTmFOMzMgLT4gIE5hTjMzCitkZG11bDY2NyBtdWx0aXBseSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworZGRtdWw2NzEgbXVsdGlwbHkgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NzIgbXVsdGlwbHkgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NzMgbXVsdGlwbHkgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NzQgbXVsdGlwbHkgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NzUgbXVsdGlwbHkgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NzYgbXVsdGlwbHkgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NzcgbXVsdGlwbHkgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NzggbXVsdGlwbHkgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NzkgbXVsdGlwbHkgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkZG11bDY4MSBtdWx0aXBseSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKK2RkbXVsNjgyIG11bHRpcGx5IC1OYU44ICA5OTkgICAtPiAtTmFOOAorZGRtdWw2ODMgbXVsdGlwbHkgLU5hTjcxIEluZiAgIC0+IC1OYU43MQorZGRtdWw2ODQgbXVsdGlwbHkgLU5hTjYgLU5hTjUgIC0+IC1OYU42CitkZG11bDY4NSBtdWx0aXBseSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RkbXVsNjg2IG11bHRpcGx5IC05OTkgIC1OYU4zMyAtPiAtTmFOMzMKK2RkbXVsNjg3IG11bHRpcGx5ICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCitkZG11bDY5MSBtdWx0aXBseSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY5MiBtdWx0aXBseSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY5MyBtdWx0aXBseSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY5NCBtdWx0aXBseSAtc05hTjE2IC1zTmFOOTQgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY5NSBtdWx0aXBseSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY5NiBtdWx0aXBseSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY5NyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOOTEgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY5OCBtdWx0aXBseSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY5OSBtdWx0aXBseSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RkbXVsNzAxIG11bHRpcGx5IC1OYU4gIC1JbmYgICAtPiAtTmFOCitkZG11bDcwMiBtdWx0aXBseSAtTmFOICAgOTk5ICAgLT4gLU5hTgorZGRtdWw3MDMgbXVsdGlwbHkgLU5hTiAgIEluZiAgIC0+IC1OYU4KK2RkbXVsNzA0IG11bHRpcGx5IC1OYU4gIC1OYU4gICAtPiAtTmFOCitkZG11bDcwNSBtdWx0aXBseSAtSW5mICAtTmFOMCAgLT4gLU5hTgorZGRtdWw3MDYgbXVsdGlwbHkgLTk5OSAgLU5hTiAgIC0+IC1OYU4KK2RkbXVsNzA3IG11bHRpcGx5ICBJbmYgIC1OYU4gICAtPiAtTmFOCisKK2RkbXVsNzExIG11bHRpcGx5IC1zTmFOICAgLUluZiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxMiBtdWx0aXBseSAtc05hTiAgIC0xMSAgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTMgbXVsdGlwbHkgLXNOYU4wMCAgTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzE0IG11bHRpcGx5IC1zTmFOICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxNSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTYgbXVsdGlwbHkgLUluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzE3IG11bHRpcGx5ICAwODggICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxOCBtdWx0aXBseSAgSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZGRtdWw3NTEgbXVsdGlwbHkgIDFlKzI3NyAgMWUrMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzUyIG11bHRpcGx5ICAxZSsyNzcgLTFlKzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc1MyBtdWx0aXBseSAtMWUrMjc3ICAxZSszMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NTQgbXVsdGlwbHkgLTFlKzI3NyAtMWUrMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzU1IG11bHRpcGx5ICAxZS0yNzcgIDFlLTMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsNzU2IG11bHRpcGx5ICAxZS0yNzcgLTFlLTMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsNzU3IG11bHRpcGx5IC0xZS0yNzcgIDFlLTMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsNzU4IG11bHRpcGx5IC0xZS0yNzcgLTFlLTMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkZG11bDc2MCBtdWx0aXBseSAxZS0yOTEgMWUtMTAxIC0+IDFFLTM5MiBTdWJub3JtYWwKK2RkbXVsNzYxIG11bHRpcGx5IDFlLTI5MSAxZS0xMDIgLT4gMUUtMzkzIFN1Ym5vcm1hbAorZGRtdWw3NjIgbXVsdGlwbHkgMWUtMjkxIDFlLTEwMyAtPiAxRS0zOTQgU3Vibm9ybWFsCitkZG11bDc2MyBtdWx0aXBseSAxZS0yOTEgMWUtMTA0IC0+IDFFLTM5NSBTdWJub3JtYWwKK2RkbXVsNzY0IG11bHRpcGx5IDFlLTI5MSAxZS0xMDUgLT4gMUUtMzk2IFN1Ym5vcm1hbAorZGRtdWw3NjUgbXVsdGlwbHkgMWUtMjkxIDFlLTEwNiAtPiAxRS0zOTcgU3Vibm9ybWFsCitkZG11bDc2NiBtdWx0aXBseSAxZS0yOTEgMWUtMTA3IC0+IDFFLTM5OCBTdWJub3JtYWwKK2RkbXVsNzY3IG11bHRpcGx5IDFlLTI5MSAxZS0xMDggLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsNzY4IG11bHRpcGx5IDFlLTI5MSAxZS0xMDkgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsNzY5IG11bHRpcGx5IDFlLTI5MSAxZS0xMTAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KK2RkbXVsNzcwIG11bHRpcGx5IDFlKzYwIDFlKzMyMSAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxICBDbGFtcGVkCitkZG11bDc3MSBtdWx0aXBseSAxZSs2MCAxZSszMjIgLT4gMS4wMDAwMDAwMDAwMDAwRSszODIgIENsYW1wZWQKK2RkbXVsNzcyIG11bHRpcGx5IDFlKzYwIDFlKzMyMyAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQKK2RkbXVsNzczIG11bHRpcGx5IDFlKzYwIDFlKzMyNCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCitkZG11bDc3NCBtdWx0aXBseSAxZSs2MCAxZSszMjUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc3NSBtdWx0aXBseSAxZSs2MCAxZSszMjYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc3NiBtdWx0aXBseSAxZSs2MCAxZSszMjcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc3NyBtdWx0aXBseSAxZSs2MCAxZSszMjggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc3OCBtdWx0aXBseSAxZSs2MCAxZSszMjkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc3OSBtdWx0aXBseSAxZSs2MCAxZSszMzAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK2RkbXVsODAxIG11bHRpcGx5ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMS4wMDAwRS0zOTQgU3Vibm9ybWFsCitkZG11bDgwMiBtdWx0aXBseSAgMS4wMDBFLTM5NCAgIDFlLTEgIC0+IDEuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRtdWw4MDMgbXVsdGlwbHkgIDEuMDBFLTM5NCAgICAxZS0yICAtPiAxLjAwRS0zOTYgICBTdWJub3JtYWwKK2RkbXVsODA0IG11bHRpcGx5ICAxLjBFLTM5NCAgICAgMWUtMyAgLT4gMS4wRS0zOTcgICAgU3Vibm9ybWFsCitkZG11bDgwNSBtdWx0aXBseSAgMS4wRS0zOTQgICAgIDFlLTQgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsODA2IG11bHRpcGx5ICAxLjNFLTM5NCAgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MDcgbXVsdGlwbHkgIDEuNUUtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgwOCBtdWx0aXBseSAgMS43RS0zOTQgICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODA5IG11bHRpcGx5ICAyLjNFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTAgbXVsdGlwbHkgIDIuNUUtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxMSBtdWx0aXBseSAgMi43RS0zOTQgICAgIDFlLTQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODEyIG11bHRpcGx5ICAxLjQ5RS0zOTQgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTMgbXVsdGlwbHkgIDEuNTBFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxNCBtdWx0aXBseSAgMS41MUUtMzk0ICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODE1IG11bHRpcGx5ICAyLjQ5RS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTYgbXVsdGlwbHkgIDIuNTBFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxNyBtdWx0aXBseSAgMi41MUUtMzk0ICAgIDFlLTQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRtdWw4MTggbXVsdGlwbHkgIDFFLTM5NCAgICAgICAxZS00ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbAorZGRtdWw4MTkgbXVsdGlwbHkgIDNFLTM5NCAgICAgICAxZS01ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsODIwIG11bHRpcGx5ICA1RS0zOTQgICAgICAgMWUtNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDgyMSBtdWx0aXBseSAgN0UtMzk0ICAgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODIyIG11bHRpcGx5ICA5RS0zOTQgICAgICAgMWUtNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MjMgbXVsdGlwbHkgIDkuOUUtMzk0ICAgICAxZS01ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkbXVsODI0IG11bHRpcGx5ICAxRS0zOTQgICAgICAtMWUtNCAgLT4gLTFFLTM5OCAgICBTdWJub3JtYWwKK2RkbXVsODI1IG11bHRpcGx5ICAzRS0zOTQgICAgICAtMWUtNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDgyNiBtdWx0aXBseSAtNUUtMzk0ICAgICAgIDFlLTUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw4MjcgbXVsdGlwbHkgIDdFLTM5NCAgICAgIC0xZS01ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgyOCBtdWx0aXBseSAtOUUtMzk0ICAgICAgIDFlLTUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODI5IG11bHRpcGx5ICA5LjlFLTM5NCAgICAtMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MzAgbXVsdGlwbHkgIDMuMEUtMzk0ICAgIC0xZS01ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZGRtdWw4MzEgbXVsdGlwbHkgIDEuMEUtMTk5ICAgICAxZS0yMDAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsODMyIG11bHRpcGx5ICAxLjBFLTE5OSAgICAgMWUtMTk5IC0+IDFFLTM5OCAgICBTdWJub3JtYWwgUm91bmRlZAorZGRtdWw4MzMgbXVsdGlwbHkgIDEuMEUtMTk5ICAgICAxZS0xOTggLT4gMS4wRS0zOTcgICAgU3Vibm9ybWFsCitkZG11bDgzNCBtdWx0aXBseSAgMi4wRS0xOTkgICAgIDJlLTE5OCAtPiA0LjBFLTM5NyAgICBTdWJub3JtYWwKK2RkbXVsODM1IG11bHRpcGx5ICA0LjBFLTE5OSAgICAgNGUtMTk4IC0+IDEuNjBFLTM5NiAgIFN1Ym5vcm1hbAorZGRtdWw4MzYgbXVsdGlwbHkgMTAuMEUtMTk5ICAgIDEwZS0xOTggLT4gMS4wMDBFLTM5NSAgU3Vibm9ybWFsCitkZG11bDgzNyBtdWx0aXBseSAzMC4wRS0xOTkgICAgMzBlLTE5OCAtPiA5LjAwMEUtMzk1ICBTdWJub3JtYWwKK2RkbXVsODM4IG11bHRpcGx5IDQwLjBFLTE5OSAgICA0MGUtMTg4IC0+IDEuNjAwMEUtMzg0IFN1Ym5vcm1hbAorZGRtdWw4MzkgbXVsdGlwbHkgNDAuMEUtMTk5ICAgIDQwZS0xODcgLT4gMS42MDAwRS0zODMKK2RkbXVsODQwIG11bHRpcGx5IDQwLjBFLTE5OSAgICA0MGUtMTg2IC0+IDEuNjAwMEUtMzgyCisKKy0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aAorZGRtdWw4NzAgbXVsdGlwbHkgMTAwICA5Ljk5OUUrMzgzICAgICAgICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGRtdWw4NzEgbXVsdGlwbHkgMTAwIC05Ljk5OUUrMzgzICAgICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkZG11bDg3MiBtdWx0aXBseSAgICAgIDkuOTk5RSszODMgMTAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RkbXVsODczIG11bHRpcGx5ICAgICAtOS45OTlFKzM4MyAxMDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworZGRtdWw4ODEgbXVsdGlwbHkgIDEuMjM0N0UtMzU1IDEuMjM0N0UtNDAgIC0+ICAxLjUyNEUtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZG11bDg4MiBtdWx0aXBseSAgMS4yMzRFLTM1NSAxLjIzNEUtNDAgICAgLT4gIDEuNTIzRS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkbXVsODgzIG11bHRpcGx5ICAxLjIzRS0zNTUgIDEuMjNFLTQwICAgICAtPiAgMS41MTNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4ODQgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4yRS00MCAgICAgIC0+ICAxLjQ0RS0zOTUgIFN1Ym5vcm1hbAorZGRtdWw4ODUgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4yRS00MSAgICAgIC0+ICAxLjQ0RS0zOTYgIFN1Ym5vcm1hbAorZGRtdWw4ODYgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4yRS00MiAgICAgIC0+ICAxLjRFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZG11bDg4NyBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjNFLTQyICAgICAgLT4gIDEuNkUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkbXVsODg4IG11bHRpcGx5ICAxLjNFLTM1NSAgIDEuM0UtNDIgICAgICAtPiAgMS43RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRtdWw4ODkgbXVsdGlwbHkgIDEuM0UtMzU1ICAgMS4zRS00MyAgICAgIC0+ICAgIDJFLTM5OCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZG11bDg5MCBtdWx0aXBseSAgMS4zRS0zNTYgICAxLjNFLTQzICAgICAgLT4gICAgMEUtMzk4ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCitkZG11bDg5MSBtdWx0aXBseSAgMS4yMzQ1RS0zOSAgIDEuMjM0RS0zNTUgLT4gIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZG11bDg5MiBtdWx0aXBseSAgMS4yMzQ1NkUtMzkgIDEuMjM0RS0zNTUgLT4gIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZG11bDg5MyBtdWx0aXBseSAgMS4yMzQ1RS00MCAgIDEuMjM0RS0zNTUgLT4gIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZG11bDg5NCBtdWx0aXBseSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS0zNTUgLT4gIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZG11bDg5NSBtdWx0aXBseSAgMS4yMzQ1RS00MSAgIDEuMjM0RS0zNTUgLT4gIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZG11bDg5NiBtdWx0aXBseSAgMS4yMzQ1NkUtNDEgIDEuMjM0RS0zNTUgLT4gIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1NgorZGRtdWw5MDAgbXVsdGlwbHkgIDAuMzAwMDAwMDAwMEUtMTkxIDAuMzAwMDAwMDAwMEUtMTkxIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZGRtdWw5MDEgbXVsdGlwbHkgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxIC0+IDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZGRtdWw5MDIgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OSAgICAtPiA5Ljk5OTk5OTk5OTk5MDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsOTAzIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgLT4gOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZG11bDkwNCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZGRtdWw5MDUgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OSAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKy0tIFRoZSBuZXh0IHJvdW5kcyB0byBObWluIChiKiplbWluKTsgdGhpcyBpcyB0aGUgZGlzdGluZ3Vpc2hpbmcgY2FzZQorLS0gZm9yIGRldGVjdGluZyB0aW5pbmVzcyAoYmVmb3JlIG9yIGFmdGVyIHJvdW5kaW5nKSAtLSBpZiBhZnRlcgorLS0gcm91bmRpbmcgdGhlbiB0aGUgcmVzdWx0IHdvdWxkIGJlIHRoZSBzYW1lLCBidXQgdGhlIFVuZGVyZmxvdyBmbGFnCistLSB3b3VsZCBub3QgYmUgc2V0CitkZG11bDkwNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorLS0gcHJvdmUgdGhvc2Ugb3BlcmFuZHMgd2VyZSBleGFjdAorZGRtdWw5MDcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS0zODMKK2RkbXVsOTA4IG11bHRpcGx5ICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5CisKKy0tIHJlZHVjaW5nIHRpbmllc3QKK2RkbXVsOTEwIG11bHRpcGx5IDFlLTM5OCAwLjk5IC0+IDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRtdWw5MTEgbXVsdGlwbHkgMWUtMzk4IDAuNzUgLT4gMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZG11bDkxMiBtdWx0aXBseSAxZS0zOTggMC41ICAtPiAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRtdWw5MTMgbXVsdGlwbHkgMWUtMzk4IDAuMjUgLT4gMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2RkbXVsOTE0IG11bHRpcGx5IDFlLTM5OCAwLjAxIC0+IDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIGh1Z2VzdAorZGRtdWw5MjAgbXVsdGlwbHkgIDk5OTk5OTk5OTk5OTk5OTkgOTk5OTk5OTk5OTk5OTk5OSAtPiA5Ljk5OTk5OTk5OTk5OTk5OEUrMzEgSW5leGFjdCBSb3VuZGVkCisKKy0tIHBvd2VyLW9mLXRlbiBlZGdlIGNhc2VzCitkZG11bDEwMDEgbXVsdGlwbHkgIDEgICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwCitkZG11bDEwMDIgbXVsdGlwbHkgIDEgICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMAorZGRtdWwxMDAzIG11bHRpcGx5ICAxICAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwCitkZG11bDEwMDQgbXVsdGlwbHkgIDEgICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwCitkZG11bDEwMDUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMAorZGRtdWwxMDA2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwCitkZG11bDEwMDcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwCitkZG11bDEwMDggbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMAorZGRtdWwxMDA5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwCitkZG11bDEwMTAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwCitkZG11bDEwMTEgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMAorZGRtdWwxMDEyIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwCitkZG11bDEwMTMgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwCitkZG11bDEwMTQgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDE1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwCitkZG11bDEwMjEgbXVsdGlwbHkgIDEwICAgICAxICAgICAgICAgICAgICAgIC0+IDEwCitkZG11bDEwMjIgbXVsdGlwbHkgIDEwICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMAorZGRtdWwxMDIzIG11bHRpcGx5ICAxMCAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwCitkZG11bDEwMjQgbXVsdGlwbHkgIDEwICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwCitkZG11bDEwMjUgbXVsdGlwbHkgIDEwICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMAorZGRtdWwxMDI2IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwCitkZG11bDEwMjcgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwCitkZG11bDEwMjggbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMAorZGRtdWwxMDI5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwCitkZG11bDEwMzAgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwCitkZG11bDEwMzEgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMAorZGRtdWwxMDMyIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwCitkZG11bDEwMzMgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkZG11bDEwMzQgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDM1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDAwCitkZG11bDEwNDEgbXVsdGlwbHkgIDEwMCAgICAwLjEgICAgICAgICAgICAgIC0+IDEwLjAKK2RkbXVsMTA0MiBtdWx0aXBseSAgMTAwICAgIDEgICAgICAgICAgICAgICAgLT4gMTAwCitkZG11bDEwNDMgbXVsdGlwbHkgIDEwMCAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAKK2RkbXVsMTA0NCBtdWx0aXBseSAgMTAwICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAKK2RkbXVsMTA0NSBtdWx0aXBseSAgMTAwICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwCitkZG11bDEwNDYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RkbXVsMTA0NyBtdWx0aXBseSAgMTAwICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RkbXVsMTA0OCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwCitkZG11bDEwNDkgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RkbXVsMTA1MCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RkbXVsMTA1MSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwCitkZG11bDEwNTIgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RkbXVsMTA1MyBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RkbXVsMTA1NCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkZG11bDEwNTUgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTA2MSBtdWx0aXBseSAgMTAwMCAgIDAuMDEgICAgICAgICAgICAgLT4gMTAuMDAKK2RkbXVsMTA2MiBtdWx0aXBseSAgMTAwMCAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwLjAKK2RkbXVsMTA2MyBtdWx0aXBseSAgMTAwMCAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMAorZGRtdWwxMDY0IG11bHRpcGx5ICAxMDAwICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMAorZGRtdWwxMDY1IG11bHRpcGx5ICAxMDAwICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDAKK2RkbXVsMTA2NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMAorZGRtdWwxMDY3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMAorZGRtdWwxMDY4IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RkbXVsMTA2OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMAorZGRtdWwxMDcwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMAorZGRtdWwxMDcxIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RkbXVsMTA3MiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMAorZGRtdWwxMDczIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMAorZGRtdWwxMDc0IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTA3NSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDgxIG11bHRpcGx5ICAxMDAwMCAgMC4wMDEgICAgICAgICAgICAtPiAxMC4wMDAKK2RkbXVsMTA4MiBtdWx0aXBseSAgMTAwMDAgIDAuMDEgICAgICAgICAgICAgLT4gMTAwLjAwCitkZG11bDEwODMgbXVsdGlwbHkgIDEwMDAwICAwLjEgICAgICAgICAgICAgIC0+IDEwMDAuMAorZGRtdWwxMDg0IG11bHRpcGx5ICAxMDAwMCAgMSAgICAgICAgICAgICAgICAtPiAxMDAwMAorZGRtdWwxMDg1IG11bHRpcGx5ICAxMDAwMCAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMDAKK2RkbXVsMTA4NiBtdWx0aXBseSAgMTAwMDAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwMAorZGRtdWwxMDg3IG11bHRpcGx5ICAxMDAwMCAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwMAorZGRtdWwxMDg4IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RkbXVsMTA4OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwMAorZGRtdWwxMDkwIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwMAorZGRtdWwxMDkxIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RkbXVsMTA5MiBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMAorZGRtdWwxMDkzIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwMAorZGRtdWwxMDk0IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTA5NSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMAorCitkZG11bDEwOTcgbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDAKK2RkbXVsMTA5OCBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMAorCisKKy0tIE51bGwgdGVzdHMKK2RkbXVsOTk5MCBtdWx0aXBseSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsOTk5MSBtdWx0aXBseSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRNaW51cy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRNaW51cy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjU4YzEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dE1pbnVzLmRlY1Rlc3QKQEAgLTAsMCArMSwxMjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGROZXh0TWludXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgbmV4dCB0aGF0IGlzIGxlc3MgWzc1NHIgbmV4dGRvd25dIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRuZXh0bTAwMSBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NAorZGRuZXh0bTAwMiBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NQorZGRuZXh0bTAwMyBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NgorZGRuZXh0bTAwNCBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0bTAwNSBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0bTAwNiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0bTAwNyBuZXh0bWludXMgIDEuMCAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRtMDA4IG5leHRtaW51cyAgMSAgICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dG0wMDkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0bTAxMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHRtMDExIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDIKK2RkbmV4dG0wMTIgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMworZGRuZXh0bTAxMyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA1ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHRtMDE0IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDUKK2RkbmV4dG0wMTUgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNgorZGRuZXh0bTAxNiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA4ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHRtMDE3IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDgKK2RkbmV4dG0wMTggbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAxMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQorZGRuZXh0bTAxOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDExICAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHRtMDIwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMTIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTEKKworZGRuZXh0bTAyMSBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NgorZGRuZXh0bTAyMiBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0bTAyMyBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0bTAyNCBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0bTAyNSBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHRtMDI2IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dG0wMjcgbmV4dG1pbnVzIC0xLjAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHRtMDI4IG5leHRtaW51cyAtMSAgICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0bTAyOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHRtMDMwIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dG0wMzEgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0bTAzMiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHRtMDMzIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dG0wMzQgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0bTAzNSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHRtMDM2IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dG0wMzcgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwOSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0bTAzOCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDExCitkZG5leHRtMDM5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTIKKworLS0gdWx0cmEtdGlueSBpbnB1dHMKK2RkbmV4dG0wNjIgbmV4dG1pbnVzICAxRS0zOTggICAgICAgICAtPiAgIDBFLTM5OAorZGRuZXh0bTA2NSBuZXh0bWludXMgLTFFLTM5OCAgICAgICAgIC0+ICAtMkUtMzk4CisKKy0tIFplcm9zCitkZG5leHRtMTAwIG5leHRtaW51cyAtMCAgICAgICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTEwMSBuZXh0bWludXMgIDAgICAgICAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDIgbmV4dG1pbnVzICAwLjAwICAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTAzIG5leHRtaW51cyAtMC4wMCAgICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTEwNCBuZXh0bWludXMgIDBFLTMwMCAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDUgbmV4dG1pbnVzICAwRSszMDAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTA2IG5leHRtaW51cyAgMEUrMzAwMDAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTEwNyBuZXh0bWludXMgLTBFKzMwMDAwICAgIC0+IC0xRS0zOTgKKworLS0gc3BlY2lhbHMKK2RkbmV4dG0xNTAgbmV4dG1pbnVzICAgSW5mICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHRtMTUxIG5leHRtaW51cyAgLUluZiAgICAtPiAtSW5maW5pdHkKK2RkbmV4dG0xNTIgbmV4dG1pbnVzICAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dG0xNTMgbmV4dG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0bTE1NCBuZXh0bWludXMgICBOYU43NyAgLT4gIE5hTjc3CitkZG5leHRtMTU1IG5leHRtaW51cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dG0xNTYgbmV4dG1pbnVzICAtTmFOICAgIC0+IC1OYU4KK2RkbmV4dG0xNTcgbmV4dG1pbnVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0bTE1OCBuZXh0bWludXMgIC1OYU43NyAgLT4gLU5hTjc3CitkZG5leHRtMTU5IG5leHRtaW51cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK2RkbmV4dG0xNzAgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OThFKzM4NAorZGRuZXh0bTE3MSBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0CitkZG5leHRtMTcyIG5leHRtaW51cyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NAorZGRuZXh0bTE3MyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQKK2RkbmV4dG0xNzQgbmV4dG1pbnVzICA5RS0zOTggICAgICAgICAgICAgICAgICAgLT4gOEUtMzk4CitkZG5leHRtMTc1IG5leHRtaW51cyAgOS45RS0zOTcgICAgICAgICAgICAgICAgIC0+IDkuOEUtMzk3CitkZG5leHRtMTc2IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgIC0+IDkuOTk5OTk5OTk5OThFLTM4NworZGRuZXh0bTE3NyBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk4RS0zODQKK2RkbmV4dG0xNzggbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk4RS0zODQgICAgLT4gOS45OTk5OTk5OTk5OTk5N0UtMzg0CitkZG5leHRtMTc5IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTZFLTM4NAorZGRuZXh0bTE4MCBuZXh0bWludXMgIDBFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTgxIG5leHRtaW51cyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDBFLTM5OAorZGRuZXh0bTE4MiBuZXh0bWludXMgIDJFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgKKworZGRuZXh0bTE4MyBuZXh0bWludXMgIC0wRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTg0IG5leHRtaW51cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0yRS0zOTgKK2RkbmV4dG0xODUgbmV4dG1pbnVzICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTNFLTM5OAorZGRuZXh0bTE4NiBuZXh0bWludXMgIC0xMEUtMzk4ICAgICAgICAgICAgICAgICAtPiAtMS4xRS0zOTcKK2RkbmV4dG0xODcgbmV4dG1pbnVzICAtMTAwRS0zOTggICAgICAgICAgICAgICAgLT4gLTEuMDFFLTM5NgorZGRuZXh0bTE4OCBuZXh0bWludXMgIC0xMDAwMDBFLTM5OCAgICAgICAgICAgICAtPiAtMS4wMDAwMUUtMzkzCitkZG5leHRtMTg5IG5leHRtaW51cyAgLTEuMDAwMDAwMDAwMDBFLTM4MyAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHRtMTkwIG5leHRtaW51cyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHRtMTkxIG5leHRtaW51cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHRtMTkyIG5leHRtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHRtMTkzIG5leHRtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC1JbmZpbml0eQorCistLSBOdWxsIHRlc3RzCitkZG5leHRtOTAwIG5leHRtaW51cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRQbHVzLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFBsdXMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFkZmJhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRQbHVzLmRlY1Rlc3QKQEAgLTAsMCArMSwxMjQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGROZXh0UGx1cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBuZXh0IHRoYXQgaXMgZ3JlYXRlciBbNzU0ciBuZXh0dXBdIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRuZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHRwMDAyIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dHAwMDMgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRwMDA1IG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0cDAwNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHAwMDggbmV4dHBsdXMgIDEgICAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHRwMDEwIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMworZGRuZXh0cDAxMSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHRwMDEzIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNgorZGRuZXh0cDAxNCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHRwMDE2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQorZGRuZXh0cDAxNyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDExCitkZG5leHRwMDE5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMgorCitkZG5leHRwMDIxIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTQKK2RkbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NQorZGRuZXh0cDAyMyBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHRwMDI0IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0cDAyNiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRwMDI3IG5leHRwbHVzIC0xLjAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0cDAyOCBuZXh0cGx1cyAtMSAgICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHAwMjkgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0cDAzMSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDIKK2RkbmV4dHAwMzIgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0cDAzNCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUKK2RkbmV4dHAwMzUgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0cDAzNyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgKK2RkbmV4dHAwMzggbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0cDA0MCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMTIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTEKKworLS0gWmVyb3MKK2RkbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDEgbmV4dHBsdXMgIDAuMDAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDIgbmV4dHBsdXMgIDBFLTMwMCAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDQgbmV4dHBsdXMgIDBFKzMwMDAwICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDUgbmV4dHBsdXMgLTAgICAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDcgbmV4dHBsdXMgLTBFLTMwMCAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDggbmV4dHBsdXMgLTBFKzMwMCAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS0zOTgKKworLS0gc3BlY2lhbHMKK2RkbmV4dHAxNTAgbmV4dHBsdXMgICBJbmYgICAgLT4gIEluZmluaXR5CitkZG5leHRwMTUxIG5leHRwbHVzICAtSW5mICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHRwMTUyIG5leHRwbHVzICAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHRwMTU0IG5leHRwbHVzICAgTmFONzcgIC0+ICBOYU43NworZGRuZXh0cDE1NSBuZXh0cGx1cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTgorZGRuZXh0cDE1NyBuZXh0cGx1cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHAxNTggbmV4dHBsdXMgIC1OYU43NyAgLT4gLU5hTjc3CitkZG5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZGRuZXh0cDE3MCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0CitkZG5leHRwMTcxIG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk3RSszODQKK2RkbmV4dHAxNzIgbmV4dHBsdXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0CitkZG5leHRwMTczIG5leHRwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NAorZGRuZXh0cDE3NCBuZXh0cGx1cyAgLTlFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC04RS0zOTgKK2RkbmV4dHAxNzUgbmV4dHBsdXMgIC05LjlFLTM5NyAgICAgICAgICAgICAgICAtPiAtOS44RS0zOTcKK2RkbmV4dHAxNzYgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5RS0zODcgICAgICAtPiAtOS45OTk5OTk5OTk5OEUtMzg3CitkZG5leHRwMTc3IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OThFLTM4NAorZGRuZXh0cDE3OCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk3RS0zODQKK2RkbmV4dHAxNzkgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk3RS0zODQgICAtPiAtOS45OTk5OTk5OTk5OTk5NkUtMzg0CitkZG5leHRwMTgwIG5leHRwbHVzICAtMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDE4MSBuZXh0cGx1cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0wRS0zOTgKK2RkbmV4dHAxODIgbmV4dHBsdXMgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4CisKK2RkbmV4dHAxODMgbmV4dHBsdXMgICAwRS0zOTggICAgICAgICAgICAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTg0IG5leHRwbHVzICAgMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDJFLTM5OAorZGRuZXh0cDE4NSBuZXh0cGx1cyAgIDJFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAzRS0zOTgKK2RkbmV4dHAxODYgbmV4dHBsdXMgICAxMEUtMzk4ICAgICAgICAgICAgICAgICAtPiAgMS4xRS0zOTcKK2RkbmV4dHAxODcgbmV4dHBsdXMgICAxMDBFLTM5OCAgICAgICAgICAgICAgICAtPiAgMS4wMUUtMzk2CitkZG5leHRwMTg4IG5leHRwbHVzICAgMTAwMDAwRS0zOTggICAgICAgICAgICAgLT4gIDEuMDAwMDFFLTM5MworZGRuZXh0cDE4OSBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDBFLTM4MyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHRwMTkwIG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dHAxOTEgbmV4dHBsdXMgICAxRS0zODMgICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0cDE5MiBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHRwMTkzIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIEluZmluaXR5CisKKy0tIE51bGwgdGVzdHMKK2RkbmV4dHA5MDAgbmV4dHBsdXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0VG93YXJkLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFRvd2FyZC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTQ3NGQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFRvd2FyZC5kZWNUZXN0CkBAIC0wLDAgKzEsMzc0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTmV4dFRvd2FyZC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBuZXh0IHRvd2FyZCByaHMgWzc1NHIgbmV4dGFmdGVyXSAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcworZGRuZXh0dDAwMSBuZXh0dG93YXJkICAgMTAgICAgMTAgICAtPiAgMTAKK2RkbmV4dHQwMDIgbmV4dHRvd2FyZCAgLTEwICAgLTEwICAgLT4gLTEwCitkZG5leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDAwNCBuZXh0dG93YXJkICAgMSAgICAtMTAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDA1IG5leHR0b3dhcmQgIC0xICAgICAxMCAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0MDA3IG5leHR0b3dhcmQgICAwICAgICAxMCAgIC0+ICAxRS0zOTggICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQwMDggbmV4dHRvd2FyZCAgIDAgICAgLTEwICAgLT4gLTFFLTM5OCAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArSW5maW5pdHkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDAxMCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtSW5maW5pdHkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDAxMSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5ICAxMCAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwCitkZG5leHR0MDEyIG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTkgICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQwMTMgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OSAtMTAgIC0+IC0xMC4wMDAwMDAwMDAwMDAwMAorZGRuZXh0dDAxNCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDE1IG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTggIDEwICAtPiAgOS45OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQwMTYgbmV4dHRvd2FyZCAgIDEwICA5Ljk5OTk5OTk5OTk5OTk5OCAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDAxNyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk4IC0xMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDE4IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTggICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkKKworLS0tLS0tLSBsaHM9cmhzCistLSBmaW5pdGVzCitkZG5leHR0MTAxIG5leHR0b3dhcmQgICAgICAgICAgNyAgICAgICA3IC0+ICA3CitkZG5leHR0MTAyIG5leHR0b3dhcmQgICAgICAgICAtNyAgICAgIC03IC0+IC03CitkZG5leHR0MTAzIG5leHR0b3dhcmQgICAgICAgICA3NSAgICAgIDc1IC0+ICA3NQorZGRuZXh0dDEwNCBuZXh0dG93YXJkICAgICAgICAtNzUgICAgIC03NSAtPiAtNzUKK2RkbmV4dHQxMDUgbmV4dHRvd2FyZCAgICAgICA3LjUwICAgICA3LjUgLT4gIDcuNTAKK2RkbmV4dHQxMDYgbmV4dHRvd2FyZCAgICAgIC03LjUwICAgLTcuNTAgLT4gLTcuNTAKK2RkbmV4dHQxMDcgbmV4dHRvd2FyZCAgICAgICA3LjUwMCA3LjUwMDAgLT4gIDcuNTAwCitkZG5leHR0MTA4IG5leHR0b3dhcmQgICAgICAtNy41MDAgICAtNy41IC0+IC03LjUwMAorCistLSB6ZXJvcworZGRuZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMAorZGRuZXh0dDExMiBuZXh0dG93YXJkICAgICAgICAgLTAgICAgICAtMCAtPiAtMAorZGRuZXh0dDExMyBuZXh0dG93YXJkICAgICAgIDBFKzQgICAgICAgMCAtPiAgMEUrNAorZGRuZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNAorZGRuZXh0dDExNSBuZXh0dG93YXJkICAgICAwLjAwMDAwMDAwMDAwICAgMC4wMDAwMDAwMDAwMDAgLT4gIDBFLTExCitkZG5leHR0MTE2IG5leHR0b3dhcmQgICAgLTAuMDAwMDAwMDAwMDAgIC0wLjAwICAgICAgICAgICAtPiAtMEUtMTEKK2RkbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQorZGRuZXh0dDExOCBuZXh0dG93YXJkICAgICAtMEUtMTQxICAgLTAwMCAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZG5leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4CitkZG5leHR0MTIyIG5leHR0b3dhcmQgIC0yNjgyNjgyNjggICAtMjY4MjY4MjY4IC0+ICAtMjY4MjY4MjY4CitkZG5leHR0MTIzIG5leHR0b3dhcmQgICAxMzQxMzQxMzQgICAgMTM0MTM0MTM0IC0+ICAgMTM0MTM0MTM0CitkZG5leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZG5leHR0MTMxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQxMzIgbmV4dHRvd2FyZCAgMUUtMzgzICAgICAgICAgICAxRS0zODMgICAgICAgICAgICAtPiAgIDFFLTM4MworZGRuZXh0dDEzMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZG5leHR0MTM0IG5leHR0b3dhcmQgIDFFLTM5OCAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAgLT4gICAxRS0zOTgKKworZGRuZXh0dDEzNSBuZXh0dG93YXJkICAtMUUtMzk4ICAgICAgICAgIC0xRS0zOTggICAgICAgICAgIC0+ICAtMUUtMzk4CitkZG5leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkbmV4dHQxMzcgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAtMUUtMzgzICAgICAgICAgICAtPiAgLTFFLTM4MworZGRuZXh0dDEzOCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CisKKy0tLS0tLS0gbGhzPHJocworZGRuZXh0dDIwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHQyMDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3CitkZG5leHR0MjAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NyBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0dDIwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQyMDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHQyMDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQyMDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0MjA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHR0MjEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHR0MjExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHR0MjEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHR0MjEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHR0MjE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHR0MjE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHR0MjE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHR0MjE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHR0MjE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDExCitkZG5leHR0MjE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEyCisKK2RkbmV4dHQyMjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk0CitkZG5leHR0MjIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NQorZGRuZXh0dDIyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHQyMjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk4IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk3CitkZG5leHR0MjI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0dDIyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQyMjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQyMjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQyMjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHQyMzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQyMzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDMgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDIKK2RkbmV4dHQyMzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dHQyMzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDUgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dHQyMzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDYgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUKK2RkbmV4dHQyMzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dHQyMzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dHQyMzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgKK2RkbmV4dHQyMzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dHQyMzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dHQyNDAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTEKKworLS0gWmVyb3MKK2RkbmV4dHQzMDAgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDEgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDIgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDMgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDQgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDUgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDYgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDcgbmV4dHRvd2FyZCAtMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDggbmV4dHRvd2FyZCAtMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzMDkgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3BlY2lhbHMKK2RkbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkKK2RkbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDM1MiBuZXh0dG93YXJkICAgTmFOICAgIEluZmluaXR5IC0+ICBOYU4KK2RkbmV4dHQzNTMgbmV4dHRvd2FyZCAgc05hTiAgICBJbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQzNTQgbmV4dHRvd2FyZCAgIE5hTjc3ICBJbmZpbml0eSAtPiAgTmFONzcKK2RkbmV4dHQzNTUgbmV4dHRvd2FyZCAgc05hTjg4ICBJbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQzNTYgbmV4dHRvd2FyZCAgLU5hTiAgICBJbmZpbml0eSAtPiAtTmFOCitkZG5leHR0MzU3IG5leHR0b3dhcmQgLXNOYU4gICAgSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0MzU4IG5leHR0b3dhcmQgIC1OYU43NyAgSW5maW5pdHkgLT4gLU5hTjc3CitkZG5leHR0MzU5IG5leHR0b3dhcmQgLXNOYU44OCAgSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkZG5leHR0MzcwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk4RSszODQKK2RkbmV4dHQzNzEgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTdFKzM4NAorZGRuZXh0dDM3MiBuZXh0dG93YXJkICAtMUUtMzgzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzczIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzNzQgbmV4dHRvd2FyZCAgLTlFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOEUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3NSBuZXh0dG93YXJkICAtOS45RS0zOTcgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05LjhFLTM5NyAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzc2IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5RS0zODcgICAgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OThFLTM4NyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzNzcgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OEUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3OCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk3RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzc5IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk3RS0zODQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTZFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODAgbmV4dHRvd2FyZCAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4MSBuZXh0dG93YXJkICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRuZXh0dDM4MiBuZXh0dG93YXJkICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkbmV4dHQzODMgbmV4dHRvd2FyZCAgIDBFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4NCBuZXh0dG93YXJkICAgMUUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAyRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzg1IG5leHR0b3dhcmQgICAyRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDNFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODYgbmV4dHRvd2FyZCAgIDEwRS0zOTggICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4xRS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4NyBuZXh0dG93YXJkICAgMTAwRS0zOTggICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAxRS0zOTYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzg4IG5leHR0b3dhcmQgICAxMDAwMDBFLTM5OCAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDFFLTM5MyAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODkgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDBFLTM4MyAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDM5MCBuZXh0dG93YXJkICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0MzkxIG5leHR0b3dhcmQgICAxRS0zODMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dHQzOTIgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk3RSszODQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OThFKzM4NAorZGRuZXh0dDM5MyBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgSW5maW5pdHkgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0Mzk0IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICBJbmZpbml0eSAgLT4gIEluZmluaXR5ICAgICAgICAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tLS0gbGhzPnJocworZGRuZXh0dDQwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NAorZGRuZXh0dDQwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NQorZGRuZXh0dDQwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NgorZGRuZXh0dDQwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0dDQwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0dDQwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDQwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0NDA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ0MDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0NDExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDIKK2RkbmV4dHQ0MTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMworZGRuZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHR0NDE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDUKK2RkbmV4dHQ0MTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNgorZGRuZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHR0NDE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDgKK2RkbmV4dHQ0MTggbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQorZGRuZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHR0NDIwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDEyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMTEKKworZGRuZXh0dDQyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NgorZGRuZXh0dDQyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0dDQyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0dDQyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDQyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHR0NDI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQ0MjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0NDI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDQyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dHQ0MzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0dDQzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dHQ0MzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0dDQzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dHQ0MzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0dDQzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDExCitkZG5leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDExICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTIKKworLS0gWmVyb3MKK2RkbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDEgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDIgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDQgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDUgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ1MDcgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3BlY2lhbHMKK2RkbmV4dHQ1NTAgbmV4dHRvd2FyZCAgIEluZiAgICAgLUluZmluaXR5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0NTUxIG5leHR0b3dhcmQgIC1JbmYgICAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkKK2RkbmV4dHQ1NTIgbmV4dHRvd2FyZCAgIE5hTiAgICAgLUluZmluaXR5IC0+ICBOYU4KK2RkbmV4dHQ1NTMgbmV4dHRvd2FyZCAgc05hTiAgICAgLUluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDU1NCBuZXh0dG93YXJkICAgTmFONzcgICAtSW5maW5pdHkgLT4gIE5hTjc3CitkZG5leHR0NTU1IG5leHR0b3dhcmQgIHNOYU44OCAgIC1JbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ1NTYgbmV4dHRvd2FyZCAgLU5hTiAgICAgLUluZmluaXR5IC0+IC1OYU4KK2RkbmV4dHQ1NTcgbmV4dHRvd2FyZCAtc05hTiAgICAgLUluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDU1OCBuZXh0dG93YXJkICAtTmFONzcgICAtSW5maW5pdHkgLT4gLU5hTjc3CitkZG5leHR0NTU5IG5leHR0b3dhcmQgLXNOYU44OCAgIC1JbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK2RkbmV4dHQ2NzAgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OThFKzM4NAorZGRuZXh0dDY3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0CitkZG5leHR0NjcyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzQgbmV4dHRvd2FyZCAgOUUtMzk4ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gOEUtMzk4ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njc1IG5leHR0b3dhcmQgIDkuOUUtMzk3ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOEUtMzk3ICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3NiBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5RS0zODcgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk4RS0zODcgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njc4IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3OSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk2RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODAgbmV4dHRvd2FyZCAgMEUtMzk4ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NjgxIG5leHR0b3dhcmQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDBFLTM5OCAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG5leHR0NjgyIG5leHR0b3dhcmQgIDJFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDFFLTM5OCAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorCitkZG5leHR0NjgzIG5leHR0b3dhcmQgIC0wRS0zOTggICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4NCBuZXh0dG93YXJkICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMkUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODUgbmV4dHRvd2FyZCAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTNFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njg2IG5leHR0b3dhcmQgIC0xMEUtMzk4ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjFFLTM5NyAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4NyBuZXh0dG93YXJkICAtMTAwRS0zOTggICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMUUtMzk2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODggbmV4dHRvd2FyZCAgLTEwMDAwMEUtMzk4ICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDFFLTM5MyAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njg5IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwRS0zODMgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0NjkwIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0NjkxIG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0NjkyIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0NjkzIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtSW5maW5pdHkgIC0+IC1JbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tIFNwZWNpYWxzCitkZG5leHR0NzgwIG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRuZXh0dDc4MSBuZXh0dG93YXJkIC1JbmYgIC0xMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4MiBuZXh0dG93YXJkIC1JbmYgIC0xICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4MyBuZXh0dG93YXJkIC1JbmYgIC0wICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4NCBuZXh0dG93YXJkIC1JbmYgICAwICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4NSBuZXh0dG93YXJkIC1JbmYgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4NiBuZXh0dG93YXJkIC1JbmYgICAxMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDc4NyBuZXh0dG93YXJkIC0xMDAwIC1JbmYgICAtPiAtMTAwMC4wMDAwMDAwMDAwMDEKK2RkbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG5leHR0Nzg5IG5leHR0b3dhcmQgLTEgICAgLUluZiAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDc5MCBuZXh0dG93YXJkIC0wICAgIC1JbmYgICAtPiAtMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDc5MSBuZXh0dG93YXJkICAwICAgIC1JbmYgICAtPiAtMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDc5MiBuZXh0dG93YXJkICAxICAgIC1JbmYgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0NzkzIG5leHR0b3dhcmQgIDEwMDAgLUluZiAgIC0+ICA5OTkuOTk5OTk5OTk5OTk5OQorZGRuZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorCitkZG5leHR0ODAwIG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODAxIG5leHR0b3dhcmQgIEluZiAgLTEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODAyIG5leHR0b3dhcmQgIEluZiAgLTEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODAzIG5leHR0b3dhcmQgIEluZiAgLTAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODA0IG5leHR0b3dhcmQgIEluZiAgIDAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODA1IG5leHR0b3dhcmQgIEluZiAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODA2IG5leHR0b3dhcmQgIEluZiAgIDEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODA3IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRuZXh0dDgwOCBuZXh0dG93YXJkIC0xMDAwICBJbmYgICAtPiAtOTk5Ljk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ4MDkgbmV4dHRvd2FyZCAtSW5mICAgSW5mICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDgxMSBuZXh0dG93YXJkIC0wICAgICBJbmYgICAtPiAgMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDgxMiBuZXh0dG93YXJkICAwICAgICBJbmYgICAtPiAgMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDgxMyBuZXh0dG93YXJkICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQ4MTQgbmV4dHRvd2FyZCAgMTAwMCAgSW5mICAgLT4gIDEwMDAuMDAwMDAwMDAwMDAxCitkZG5leHR0ODE1IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG5leHR0ODIxIG5leHR0b3dhcmQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkbmV4dHQ4MjIgbmV4dHRvd2FyZCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRuZXh0dDgyMyBuZXh0dG93YXJkICBOYU4gLTEgICAgICAtPiAgTmFOCitkZG5leHR0ODI0IG5leHR0b3dhcmQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkbmV4dHQ4MjUgbmV4dHRvd2FyZCAgTmFOICAwICAgICAgLT4gIE5hTgorZGRuZXh0dDgyNiBuZXh0dG93YXJkICBOYU4gIDEgICAgICAtPiAgTmFOCitkZG5leHR0ODI3IG5leHR0b3dhcmQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkbmV4dHQ4MjggbmV4dHRvd2FyZCAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRuZXh0dDgyOSBuZXh0dG93YXJkICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODMwIG5leHR0b3dhcmQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzEgbmV4dHRvd2FyZCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzMiBuZXh0dG93YXJkIC0xICAgIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODMzIG5leHR0b3dhcmQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzQgbmV4dHRvd2FyZCAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzNSBuZXh0dG93YXJkICAxICAgIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODM2IG5leHR0b3dhcmQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzcgbmV4dHRvd2FyZCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZG5leHR0ODQxIG5leHR0b3dhcmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQyIG5leHR0b3dhcmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQzIG5leHR0b3dhcmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ0IG5leHR0b3dhcmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ1IG5leHR0b3dhcmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ2IG5leHR0b3dhcmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ3IG5leHR0b3dhcmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ4IG5leHR0b3dhcmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODQ5IG5leHR0b3dhcmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODUwIG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODUxIG5leHR0b3dhcmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODUyIG5leHR0b3dhcmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODUzIG5leHR0b3dhcmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU0IG5leHR0b3dhcmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU1IG5leHR0b3dhcmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU2IG5leHR0b3dhcmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU3IG5leHR0b3dhcmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU4IG5leHR0b3dhcmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODU5IG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbmV4dHQ4NjEgbmV4dHRvd2FyZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RkbmV4dHQ4NjIgbmV4dHRvd2FyZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RkbmV4dHQ4NjMgbmV4dHRvd2FyZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2RkbmV4dHQ4NjQgbmV4dHRvd2FyZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RkbmV4dHQ4NjUgbmV4dHRvd2FyZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RkbmV4dHQ4NjYgbmV4dHRvd2FyZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2RkbmV4dHQ4NjcgbmV4dHRvd2FyZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RkbmV4dHQ4NjggbmV4dHRvd2FyZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RkbmV4dHQ4NjkgbmV4dHRvd2FyZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkZG5leHR0ODcxIG5leHR0b3dhcmQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzIgbmV4dHRvd2FyZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3MyBuZXh0dG93YXJkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODc0IG5leHR0b3dhcmQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzUgbmV4dHRvd2FyZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3NiBuZXh0dG93YXJkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODc3IG5leHR0b3dhcmQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzggbmV4dHRvd2FyZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3OSBuZXh0dG93YXJkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODgwIG5leHR0b3dhcmQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4ODEgbmV4dHRvd2FyZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg4MiBuZXh0dG93YXJkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2RkbmV4dHQ4ODMgbmV4dHRvd2FyZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg4NCBuZXh0dG93YXJkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RkbmV4dHQ4ODUgbmV4dHRvd2FyZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitkZG5leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ5MDEgbmV4dHRvd2FyZCAjICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkT3IuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRPci5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTcwMmIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkT3IuZGVjVGVzdApAQCAtMCwwICsxLDI5MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgT1IgZm9yIGRlY0RvdWJsZXMgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorZGRvcjAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAorZGRvcjAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQorZGRvcjAwMyBvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQorZGRvcjAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQorZGRvcjAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2Rkb3IwMDYgb3IgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkZG9yMDA3IG9yIDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKK2Rkb3IwMDggb3IgMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGRvcjAwOSBvciAxMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCitkZG9yMDEwIG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZGRvcjAxMSBvciAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCitkZG9yMDEyIG9yIDAxMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKK2Rkb3IwMTMgb3IgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2CitkZG9yMDIwIG9yIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExCitkZG9yMDIxIG9yICAxMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExCitkZG9yMDIyIG9yICAgMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExCitkZG9yMDIzIG9yICAgIDExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExCitkZG9yMDI0IG9yICAgICAxMTExMTExMTExMTEgICAgICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExCitkZG9yMDI1IG9yICAgICAgMTExMTExMTExMTEgICAgICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExCitkZG9yMDI2IG9yICAgICAgIDExMTExMTExMTEgICAgICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExCitkZG9yMDI3IG9yICAgICAgICAxMTExMTExMTEgICAgICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExCitkZG9yMDI4IG9yICAgICAgICAgMTExMTExMTEgICAgICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExCitkZG9yMDI5IG9yICAgICAgICAgIDExMTExMTEgICAgICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExCitkZG9yMDMwIG9yICAgICAgICAgICAxMTExMTEgICAgICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExCitkZG9yMDMxIG9yICAgICAgICAgICAgMTExMTEgICAgICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExCitkZG9yMDMyIG9yICAgICAgICAgICAgIDExMTEgICAgICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExCitkZG9yMDMzIG9yICAgICAgICAgICAgICAxMTEgICAgICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExCitkZG9yMDM0IG9yICAgICAgICAgICAgICAgMTEgICAgICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExCitkZG9yMDM1IG9yICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxCitkZG9yMDM2IG9yICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwCisKK2Rkb3IwNDIgb3IgIDExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDExMTExMTExMTAwMDAwMDAKK2Rkb3IwNDMgb3IgICAxMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMDEwMDAwMDAwMCAgLT4gIDEwMTExMTExMTAwMDAwMDAKK2Rkb3IwNDQgb3IgICAgMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMTAwMDAwMDAwMCAgLT4gIDEwMDExMTExMTAwMDAwMDAKK2Rkb3IwNDUgb3IgICAgIDExMTExMDAwMDAwMCAgICAgMTAwMDAxMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDAKK2Rkb3IwNDYgb3IgICAgICAxMTExMDAwMDAwMCAgICAgMTAwMDEwMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDAKK2Rkb3IwNDcgb3IgICAgICAgMTExMDAwMDAwMCAgICAgMTAwMTAwMDAwMDAwMDAwMCAgLT4gIDEwMDEwMDExMTAwMDAwMDAKK2Rkb3IwNDggb3IgICAgICAgIDExMDAwMDAwMCAgICAgMTAxMDAwMDAwMDAwMDAwMCAgLT4gIDEwMTAwMDAxMTAwMDAwMDAKK2Rkb3IwNDkgb3IgICAgICAgICAxMDAwMDAwMCAgICAgMTEwMDAwMDAwMDAwMDAwMCAgLT4gIDExMDAwMDAwMTAwMDAwMDAKKworZGRvcjA5MCBvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZGRvcjA5MSBvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZGRvcjA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZGRvcjA5MyBvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZGRvcjA5NCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorZGRvcjA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZGRvcjA5NiBvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZGRvcjA5NyBvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZGRvcjA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorCitkZG9yMTAwIG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTExMTExMTExCitkZG9yMTAxIG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgMTExMTExMTExCitkZG9yMTAyIG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgMTExMTExMTExCitkZG9yMTAzIG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgMTExMTExMTExCitkZG9yMTA0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCitkZG9yMTA1IG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgMTExMTExMTExCitkZG9yMTA2IG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMTExCitkZG9yMTA3IG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTExCitkZG9yMTA4IG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTExCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworZGRvcjIyMCBvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIyMSBvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIyMyBvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIyNCBvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIyNiBvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIyNyBvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIyOSBvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIzMCBvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjIzMiBvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZGRvcjI0MCBvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI0MSBvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI0MiBvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI0MyBvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI0NCBvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2Rkb3IyNTAgb3IgIDIwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjUxIG9yICA3MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1MiBvciAgODAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTMgb3IgIDkwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjU0IG9yICAyMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1NSBvciAgNzAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTYgb3IgIDgwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjU3IG9yICA5MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1OCBvciAgMTAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTkgb3IgIDEwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjYwIG9yICAxMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI2MSBvciAgMTAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNjIgb3IgIDAwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjYzIG9yICAwMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI2NCBvciAgMDAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNjUgb3IgIDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkZG9yMjcwIG9yICAwMjAwMDAxMDAwMDAwMDAwIDEwMDAxMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI3MSBvciAgMDcwMDAwMDEwMDAwMDAwMCAxMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzIgb3IgIDA4MDAwMDAwMTAwMDAwMDAgMTAwMDAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjczIG9yICAwOTAwMDAwMDAxMDAwMDAwIDEwMDAwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI3NCBvciAgMTAwMDAwMDAwMDEwMDAwMCAwMjAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzUgb3IgIDEwMDAwMDAwMDAwMTAwMDAgMDcwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjc2IG9yICAxMDAwMDAwMDAwMDAxMDAwIDA4MDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI3NyBvciAgMTAwMDAwMDAwMDAwMDEwMCAwOTAwMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitkZG9yMjgwIG9yICAwMDEwMDAwMDAwMDAwMDAyIDEwMDAwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4MSBvciAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODIgb3IgIDAwMDAxMDAwMDAwMDAwMDggMTAwMDAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjgzIG9yICAwMDAwMDEwMDAwMDAwMDA5IDEwMDAxMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4NCBvciAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODUgb3IgIDEwMDAwMDAxMDAwMDAwMDAgMDAxMDAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjg2IG9yICAxMDAwMDAwMDEwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4NyBvciAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkZG9yMjg4IG9yICAwMDEwMDAwMDIwMDAwMDAwIDEwMDAwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4OSBvciAgMDAwMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTAgb3IgIDAwMDAxMDAwODAwMDAwMTAgMTAwMDAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjkxIG9yICAwMDAwMDEwMDkwMDAwMTAwIDEwMDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5MiBvciAgMTAwMDAwMTAwMDAwMTAwMCAwMDAwMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTMgb3IgIDEwMDAwMDAxMDAwMTAwMDAgMDAwMDAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjk0IG9yICAxMDAwMDAwMDEwMTAwMDAwIDAwMDAwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5NSBvciAgMTAwMDAwMDAwMTAwMDAwMCAwMDAwMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkZG9yMjk2IG9yIC0xMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTcgb3IgLTEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5OCBvciAgMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjk5IG9yICAxMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAwMDExMDAwMTAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2Rkb3IzMzEgb3IgIDIgICA5Ljk5OTk5OTk5RSsxOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjMzMiBvciAgMyAgIDFFLTE5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzMzIG9yICA0ICAgMS4wMDAwMDAwMEUtMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzQgb3IgIDUgICAxRS0xMDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjMzNSBvciAgNiAgIC0xRS0xMDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzM2IG9yICA3ICAgLTEuMDAwMDAwMDBFLTE5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzcgb3IgIDggICAtMUUtMTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjMzOCBvciAgOSAgIC05Ljk5OTk5OTk5RSsxOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQxIG9yICA5Ljk5OTk5OTk5RSsyOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDIgb3IgIDFFLTI5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0MyBvciAgMS4wMDAwMDAwMEUtMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQ0IG9yICAxRS0xMDAgICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDUgb3IgIC0xRS0xMDAgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0NiBvciAgLTEuMDAwMDAwMDBFLTI5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQ3IG9yICAtMUUtMjk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDggb3IgIC05Ljk5OTk5OTk5RSsyOTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2Rkb3IzNjEgb3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzYzIG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNjQgb3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzY2IG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNzEgb3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzczIG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNzQgb3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzc2IG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorZGRvcjc4MCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4MyBvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4NiBvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4OSBvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc5MiBvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZG9yODAwIG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwMiBvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODAzIG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwNSBvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODA2IG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwOCBvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODA5IG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgxMSBvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODEyIG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgxNCBvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODE1IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRvcjgyMSBvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODIyIG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MjMgb3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyNCBvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODI1IG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MjYgb3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyNyBvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODI4IG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Mjkgb3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzMCBvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODMxIG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzIgb3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzMyBvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODM0IG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzUgb3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzNiBvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODM3IG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRvcjg0MSBvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0NCBvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0NyBvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1MCBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1MyBvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1NiBvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1OSBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRvcjg2MSBvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODYyIG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NjMgb3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2NCBvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODY1IG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NjYgb3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2NyBvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODY4IG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Njkgb3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3MSBvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODcyIG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NzMgb3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3NCBvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODc1IG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NzYgb3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3NyBvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODc4IG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Nzkgb3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg4MCBvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODgxIG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4ODIgb3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg4MyBvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODg0IG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4ODUgb3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFBsdXMuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRQbHVzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhYTA4YQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRQbHVzLmRlY1Rlc3QKQEAgLTAsMCArMSw4OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFBsdXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgMCt4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RkcGxzMDAxIHBsdXMgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZGRwbHMwMTEgcGx1cyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RkcGxzMDEyIHBsdXMgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkcGxzMDIxIHBsdXMgICAgICAgICBOYU4gIC0+IE5hTgorZGRwbHMwMjIgcGx1cyAgICAgICAgLU5hTiAgLT4gLU5hTgorZGRwbHMwMjMgcGx1cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRwbHMwMjQgcGx1cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZHBsczAzMSBwbHVzICAgICAgIE5hTjEzICAtPiBOYU4xMworZGRwbHMwMzIgcGx1cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCitkZHBsczAzMyBwbHVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uCitkZHBsczAzNCBwbHVzICAgICAtc05hTjEzICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHBsczAzNSBwbHVzICAgICAgIE5hTjcwICAtPiBOYU43MAorZGRwbHMwMzYgcGx1cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwCitkZHBsczAzNyBwbHVzICAgICAgc05hTjEwMSAtPiBOYU4xMDEgIEludmFsaWRfb3BlcmF0aW9uCitkZHBsczAzOCBwbHVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2RkcGxzMTAxIHBsdXMgICAgICAgICAgNyAgIC0+IDcKK2RkcGxzMTAyIHBsdXMgICAgICAgICAtNyAgIC0+IC03CitkZHBsczEwMyBwbHVzICAgICAgICAgNzUgICAtPiA3NQorZGRwbHMxMDQgcGx1cyAgICAgICAgLTc1ICAgLT4gLTc1CitkZHBsczEwNSBwbHVzICAgICAgIDcuNTAgICAtPiA3LjUwCitkZHBsczEwNiBwbHVzICAgICAgLTcuNTAgICAtPiAtNy41MAorZGRwbHMxMDcgcGx1cyAgICAgICA3LjUwMCAgLT4gNy41MDAKK2RkcGxzMTA4IHBsdXMgICAgICAtNy41MDAgIC0+IC03LjUwMAorCistLSB6ZXJvcworZGRwbHMxMTEgcGx1cyAgICAgICAgICAwICAgLT4gMAorZGRwbHMxMTIgcGx1cyAgICAgICAgIC0wICAgLT4gMAorZGRwbHMxMTMgcGx1cyAgICAgICAwRSs0ICAgLT4gMEUrNAorZGRwbHMxMTQgcGx1cyAgICAgIC0wRSs0ICAgLT4gMEUrNAorZGRwbHMxMTUgcGx1cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkZHBsczExNiBwbHVzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RkcGxzMTE3IHBsdXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZGRwbHMxMTggcGx1cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZHBsczEyMSBwbHVzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRwbHMxMjIgcGx1cyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZHBsczEyMyBwbHVzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorZGRwbHMxMjQgcGx1cyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZHBsczEzMSBwbHVzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRwbHMxMzIgcGx1cyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRwbHMxMzMgcGx1cyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkcGxzMTM0IHBsdXMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsCisKK2RkcGxzMTM1IHBsdXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4IFN1Ym5vcm1hbAorZGRwbHMxMzYgcGx1cyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHBsczEzNyBwbHVzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MworZGRwbHMxMzggcGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUXVhbnRpemUuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRRdWFudGl6ZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMTljOWQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUXVhbnRpemUuZGVjVGVzdApAQCAtMCwwICsxLDgzMyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFF1YW50aXplLmRlY1Rlc3QgLS0gZGVjRG91YmxlIHF1YW50aXplIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE1vc3Qgb2YgdGhlIHRlc3RzIGhlcmUgYXNzdW1lIGEgInJlZ3VsYXIgcGF0dGVybiIsIHdoZXJlIHRoZQorLS0gc2lnbiBhbmQgY29lZmZpY2llbnQgYXJlICsxLgorLS0gMjAwNC4wMy4xNSBVbmRlcmZsb3cgZm9yIHF1YW50aXplIGlzIHN1cHByZXNzZWQKKy0tIDIwMDUuMDYuMDggTW9yZSBleHRlbnNpdmUgdGVzdHMgZm9yICdkb2VzIG5vdCBmaXQnCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRxdWEwMDEgcXVhbnRpemUgMCAgICAgICAxZTAgICAtPiAwCitkZHF1YTAwMiBxdWFudGl6ZSAxICAgICAgIDFlMCAgIC0+IDEKK2RkcXVhMDAzIHF1YW50aXplIDAuMSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDA1IHF1YW50aXplIDAuMSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDA2IHF1YW50aXplIDAuMSAgICAgMWUwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDA3IHF1YW50aXplIDAuMSAgICAxZS0xICAgLT4gMC4xCitkZHF1YTAwOCBxdWFudGl6ZSAwLjEgICAgMWUtMiAgIC0+IDAuMTAKK2RkcXVhMDA5IHF1YW50aXplIDAuMSAgICAxZS0zICAgLT4gMC4xMDAKK2RkcXVhMDEwIHF1YW50aXplIDAuOSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDExIHF1YW50aXplIDAuOSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDEyIHF1YW50aXplIDAuOSAgICAxZSswICAgLT4gMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDEzIHF1YW50aXplIDAuOSAgICAxZS0xICAgLT4gMC45CitkZHF1YTAxNCBxdWFudGl6ZSAwLjkgICAgMWUtMiAgIC0+IDAuOTAKK2RkcXVhMDE1IHF1YW50aXplIDAuOSAgICAxZS0zICAgLT4gMC45MDAKKy0tIG5lZ2F0aXZlcworZGRxdWEwMjEgcXVhbnRpemUgLTAgICAgICAxZTAgICAtPiAtMAorZGRxdWEwMjIgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAtMQorZGRxdWEwMjMgcXVhbnRpemUgLTAuMSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDI1IHF1YW50aXplIC0wLjEgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAyNiBxdWFudGl6ZSAtMC4xICAgIDFlMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMjcgcXVhbnRpemUgLTAuMSAgIDFlLTEgICAtPiAtMC4xCitkZHF1YTAyOCBxdWFudGl6ZSAtMC4xICAgMWUtMiAgIC0+IC0wLjEwCitkZHF1YTAyOSBxdWFudGl6ZSAtMC4xICAgMWUtMyAgIC0+IC0wLjEwMAorZGRxdWEwMzAgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDMxIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAzMiBxdWFudGl6ZSAtMC45ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMzMgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45CitkZHF1YTAzNCBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwCitkZHF1YTAzNSBxdWFudGl6ZSAtMC45ICAgMWUtMyAgIC0+IC0wLjkwMAorZGRxdWEwMzYgcXVhbnRpemUgLTAuNSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDM3IHF1YW50aXplIC0wLjUgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAzOCBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMzkgcXVhbnRpemUgLTAuNSAgIDFlLTEgICAtPiAtMC41CitkZHF1YTA0MCBxdWFudGl6ZSAtMC41ICAgMWUtMiAgIC0+IC0wLjUwCitkZHF1YTA0MSBxdWFudGl6ZSAtMC41ICAgMWUtMyAgIC0+IC0wLjUwMAorZGRxdWEwNDIgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDQzIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA0NCBxdWFudGl6ZSAtMC45ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNDUgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45CitkZHF1YTA0NiBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwCitkZHF1YTA0NyBxdWFudGl6ZSAtMC45ICAgMWUtMyAgIC0+IC0wLjkwMAorCistLSBleGFtcGxlcyBmcm9tIFNwZWNpZmljYXRpb24KK2RkcXVhMDYwIHF1YW50aXplIDIuMTcgICAwLjAwMSAgLT4gMi4xNzAKK2RkcXVhMDYxIHF1YW50aXplIDIuMTcgICAwLjAxICAgLT4gMi4xNworZGRxdWEwNjIgcXVhbnRpemUgMi4xNyAgIDAuMSAgICAtPiAyLjIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA2MyBxdWFudGl6ZSAyLjE3ICAgMWUrMCAgIC0+IDIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA2NCBxdWFudGl6ZSAyLjE3ICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA2NSBxdWFudGl6ZSAtSW5mICAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRxdWEwNjYgcXVhbnRpemUgMiAgICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMDY3IHF1YW50aXplIC0wLjEgICAgMSAgICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA2OCBxdWFudGl6ZSAtMCAgICAgIDFlKzUgICAgIC0+IC0wRSs1CitkZHF1YTA2OSBxdWFudGl6ZSArMTIzNDU2Nzg5MDEyMzQ1LjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMDcwIHF1YW50aXplIC05ODc2NTQzMzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEwNzEgcXVhbnRpemUgMjE3ICAgIDFlLTEgICAtPiAyMTcuMAorZGRxdWEwNzIgcXVhbnRpemUgMjE3ICAgIDFlKzAgICAtPiAyMTcKK2RkcXVhMDczIHF1YW50aXplIDIxNyAgICAxZSsxICAgLT4gMi4yRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNzQgcXVhbnRpemUgMjE3ICAgIDFlKzIgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZAorCistLSBnZW5lcmFsIHRlc3RzIC4uCitkZHF1YTA4OSBxdWFudGl6ZSAxMiAgICAgMWUrNCAgIC0+IDBFKzQgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5MCBxdWFudGl6ZSAxMiAgICAgMWUrMyAgIC0+IDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5MSBxdWFudGl6ZSAxMiAgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5MiBxdWFudGl6ZSAxMiAgICAgMWUrMSAgIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5MyBxdWFudGl6ZSAxLjIzNDUgMWUtMiAgIC0+IDEuMjMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5NCBxdWFudGl6ZSAxLjIzNTUgMWUtMiAgIC0+IDEuMjQgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5NSBxdWFudGl6ZSAxLjIzNDUgMWUtNiAgIC0+IDEuMjM0NTAwCitkZHF1YTA5NiBxdWFudGl6ZSA5Ljk5OTkgMWUtMiAgIC0+IDEwLjAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTcgcXVhbnRpemUgMC4wMDAxIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTggcXVhbnRpemUgMC4wMDEgIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTkgcXVhbnRpemUgMC4wMDkgIDFlLTIgICAtPiAwLjAxIEluZXhhY3QgUm91bmRlZAorZGRxdWExMDAgcXVhbnRpemUgOTIgICAgIDFlKzIgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTEwMSBxdWFudGl6ZSAtMSAgICAgIDFlMCAgIC0+ICAtMQorZGRxdWExMDIgcXVhbnRpemUgLTEgICAgIDFlLTEgICAtPiAgLTEuMAorZGRxdWExMDMgcXVhbnRpemUgLTEgICAgIDFlLTIgICAtPiAgLTEuMDAKK2RkcXVhMTA0IHF1YW50aXplICAwICAgICAgMWUwICAgLT4gIDAKK2RkcXVhMTA1IHF1YW50aXplICAwICAgICAxZS0xICAgLT4gIDAuMAorZGRxdWExMDYgcXVhbnRpemUgIDAgICAgIDFlLTIgICAtPiAgMC4wMAorZGRxdWExMDcgcXVhbnRpemUgIDAuMDAgICAxZTAgICAtPiAgMAorZGRxdWExMDggcXVhbnRpemUgIDAgICAgIDFlKzEgICAtPiAgMEUrMQorZGRxdWExMDkgcXVhbnRpemUgIDAgICAgIDFlKzIgICAtPiAgMEUrMgorZGRxdWExMTAgcXVhbnRpemUgKzEgICAgICAxZTAgICAtPiAgMQorZGRxdWExMTEgcXVhbnRpemUgKzEgICAgIDFlLTEgICAtPiAgMS4wCitkZHF1YTExMiBxdWFudGl6ZSArMSAgICAgMWUtMiAgIC0+ICAxLjAwCisKK2RkcXVhMTIwIHF1YW50aXplICAgMS4wNCAgMWUtMyAtPiAgMS4wNDAKK2RkcXVhMTIxIHF1YW50aXplICAgMS4wNCAgMWUtMiAtPiAgMS4wNAorZGRxdWExMjIgcXVhbnRpemUgICAxLjA0ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMyBxdWFudGl6ZSAgIDEuMDQgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyNCBxdWFudGl6ZSAgIDEuMDUgIDFlLTMgLT4gIDEuMDUwCitkZHF1YTEyNSBxdWFudGl6ZSAgIDEuMDUgIDFlLTIgLT4gIDEuMDUKK2RkcXVhMTI2IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzEgcXVhbnRpemUgICAxLjA1ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzIgcXVhbnRpemUgICAxLjA2ICAxZS0zIC0+ICAxLjA2MAorZGRxdWExMzMgcXVhbnRpemUgICAxLjA2ICAxZS0yIC0+ICAxLjA2CitkZHF1YTEzNCBxdWFudGl6ZSAgIDEuMDYgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTM1IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWExNDAgcXVhbnRpemUgICAtMTAgICAgMWUtMiAgLT4gIC0xMC4wMAorZGRxdWExNDEgcXVhbnRpemUgICArMSAgICAgMWUtMiAgLT4gIDEuMDAKK2RkcXVhMTQyIHF1YW50aXplICAgKzEwICAgIDFlLTIgIC0+ICAxMC4wMAorZGRxdWExNDMgcXVhbnRpemUgICAxRSsxNyAgMWUtMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWExNDQgcXVhbnRpemUgICAxRS0xNyAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0NSBxdWFudGl6ZSAgIDFFLTMgICAxZS0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQ2IHF1YW50aXplICAgMUUtMiAgIDFlLTIgIC0+ICAwLjAxCitkZHF1YTE0NyBxdWFudGl6ZSAgIDFFLTEgICAxZS0yICAtPiAgMC4xMAorZGRxdWExNDggcXVhbnRpemUgICAwRS0xNyAgMWUtMiAgLT4gIDAuMDAKKworZGRxdWExNTAgcXVhbnRpemUgICAxLjA2MDAgMWUtNSAtPiAgMS4wNjAwMAorZGRxdWExNTEgcXVhbnRpemUgICAxLjA2MDAgMWUtNCAtPiAgMS4wNjAwCitkZHF1YTE1MiBxdWFudGl6ZSAgIDEuMDYwMCAxZS0zIC0+ICAxLjA2MCBSb3VuZGVkCitkZHF1YTE1MyBxdWFudGl6ZSAgIDEuMDYwMCAxZS0yIC0+ICAxLjA2IFJvdW5kZWQKK2RkcXVhMTU0IHF1YW50aXplICAgMS4wNjAwIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTU1IHF1YW50aXplICAgMS4wNjAwICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIGEgY291cGxlIHdoZXJlIHJvdW5kaW5nIHdhcyBkaWZmZXJlbnQgaW4gYmFzZSB0ZXN0cworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RkcXVhMTU3IHF1YW50aXplIC0wLjUgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1OCBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTU5IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gYmFzZSB0ZXN0cyB3aXRoIG5vbi0xIGNvZWZmaWNpZW50cworZGRxdWExNjEgcXVhbnRpemUgMCAgICAgIC05ZTAgICAtPiAwCitkZHF1YTE2MiBxdWFudGl6ZSAxICAgICAgLTdlMCAgIC0+IDEKK2RkcXVhMTYzIHF1YW50aXplIDAuMSAgIC0xZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTY1IHF1YW50aXplIDAuMSAgICAwZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTY2IHF1YW50aXplIDAuMSAgICAgMmUwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTY3IHF1YW50aXplIDAuMSAgICAzZS0xICAgLT4gMC4xCitkZHF1YTE2OCBxdWFudGl6ZSAwLjEgICA0NGUtMiAgIC0+IDAuMTAKK2RkcXVhMTY5IHF1YW50aXplIDAuMSAgNTU1ZS0zICAgLT4gMC4xMDAKK2RkcXVhMTcwIHF1YW50aXplIDAuOSA2NjY2ZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcxIHF1YW50aXplIDAuOSAtNzc3ZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcyIHF1YW50aXplIDAuOSAgLTg4ZSswICAgLT4gMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTczIHF1YW50aXplIDAuOSAgIC05ZS0xICAgLT4gMC45CitkZHF1YTE3NCBxdWFudGl6ZSAwLjkgICAgMGUtMiAgIC0+IDAuOTAKK2RkcXVhMTc1IHF1YW50aXplIDAuOSAgMS4xZS0zICAgLT4gMC45MDAwCistLSBuZWdhdGl2ZXMKK2RkcXVhMTgxIHF1YW50aXplIC0wICAgIDEuMWUwICAgLT4gLTAuMAorZGRxdWExODIgcXVhbnRpemUgLTEgICAgIC0xZTAgICAtPiAtMQorZGRxdWExODMgcXVhbnRpemUgLTAuMSAgMTFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTg1IHF1YW50aXplIC0wLjEgMTExZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4NiBxdWFudGl6ZSAtMC4xICAgNzFlMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZGRxdWExODcgcXVhbnRpemUgLTAuMSAtOTFlLTEgICAtPiAtMC4xCitkZHF1YTE4OCBxdWFudGl6ZSAtMC4xIC0uMWUtMiAgIC0+IC0wLjEwMAorZGRxdWExODkgcXVhbnRpemUgLTAuMSAgLTFlLTMgICAtPiAtMC4xMDAKK2RkcXVhMTkwIHF1YW50aXplIC0wLjkgICAwZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MSBxdWFudGl6ZSAtMC45ICAtMGUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTIgcXVhbnRpemUgLTAuOSAtMTBlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkzIHF1YW50aXplIC0wLjkgMTAwZS0xICAgLT4gLTAuOQorZGRxdWExOTQgcXVhbnRpemUgLTAuOSA5OTllLTIgICAtPiAtMC45MAorCistLSArdmUgZXhwb25lbnRzIC4uCitkZHF1YTIwMSBxdWFudGl6ZSAgIC0xICAgMWUrMCAtPiAgLTEKK2RkcXVhMjAyIHF1YW50aXplICAgLTEgICAxZSsxIC0+ICAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAzIHF1YW50aXplICAgLTEgICAxZSsyIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjA0IHF1YW50aXplICAgIDAgICAxZSswIC0+ICAwCitkZHF1YTIwNSBxdWFudGl6ZSAgICAwICAgMWUrMSAtPiAgMEUrMQorZGRxdWEyMDYgcXVhbnRpemUgICAgMCAgIDFlKzIgLT4gIDBFKzIKK2RkcXVhMjA3IHF1YW50aXplICAgKzEgICAxZSswIC0+ICAxCitkZHF1YTIwOCBxdWFudGl6ZSAgICsxICAgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjA5IHF1YW50aXplICAgKzEgICAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIyMCBxdWFudGl6ZSAgIDEuMDQgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIxIHF1YW50aXplICAgMS4wNCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjIgcXVhbnRpemUgICAxLjA0IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMyBxdWFudGl6ZSAgIDEuMDQgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjI0IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjUgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyNiBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjI3IHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjggcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyOSBxdWFudGl6ZSAgIDEuMDUgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwIHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzEgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMiBxdWFudGl6ZSAgIDEuMDYgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMzIHF1YW50aXplICAgMS4wNiAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzQgcXVhbnRpemUgICAxLjA2IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzNSBxdWFudGl6ZSAgIDEuMDYgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEyNDAgcXVhbnRpemUgICAtMTAgICAxZSsxICAtPiAgLTFFKzEgUm91bmRlZAorZGRxdWEyNDEgcXVhbnRpemUgICArMSAgICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjQyIHF1YW50aXplICAgKzEwICAgMWUrMSAgLT4gIDFFKzEgUm91bmRlZAorZGRxdWEyNDMgcXVhbnRpemUgICAxRSsxICAxZSsxICAtPiAgMUUrMSAgICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI0NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzEgIC0+ICAxLjBFKzIgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjQ1IHF1YW50aXplICAgMUUrMyAgMWUrMSAgLT4gIDEuMDBFKzMgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNDYgcXVhbnRpemUgICAxRSs0ICAxZSsxICAtPiAgMS4wMDBFKzQgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI0NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzEgIC0+ICAxLjAwMDBFKzUgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjQ4IHF1YW50aXplICAgMUUrNiAgMWUrMSAgLT4gIDEuMDAwMDBFKzYgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNDkgcXVhbnRpemUgICAxRSs3ICAxZSsxICAtPiAgMS4wMDAwMDBFKzcgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI1MCBxdWFudGl6ZSAgIDFFKzggIDFlKzEgIC0+ICAxLjAwMDAwMDBFKzggIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjUxIHF1YW50aXplICAgMUUrOSAgMWUrMSAgLT4gIDEuMDAwMDAwMDBFKzkgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorLS0gbmV4dCBvbmUgdHJpZXMgdG8gYWRkIDkgemVyb3MKK2RkcXVhMjUyIHF1YW50aXplICAgMUUrMTcgMWUrMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEyNTMgcXVhbnRpemUgICAxRS0xNyAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjU0IHF1YW50aXplICAgMUUtMiAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI1NSBxdWFudGl6ZSAgIDBFLTE3IDFlKzEgIC0+ICAwRSsxCitkZHF1YTI1NiBxdWFudGl6ZSAgLTBFLTE3IDFlKzEgIC0+IC0wRSsxCitkZHF1YTI1NyBxdWFudGl6ZSAgLTBFLTEgIDFlKzEgIC0+IC0wRSsxCitkZHF1YTI1OCBxdWFudGl6ZSAgLTAgICAgIDFlKzEgIC0+IC0wRSsxCitkZHF1YTI1OSBxdWFudGl6ZSAgLTBFKzEgIDFlKzEgIC0+IC0wRSsxCisKK2RkcXVhMjYwIHF1YW50aXplICAgLTEwICAgMWUrMiAgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNjEgcXVhbnRpemUgICArMSAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjYyIHF1YW50aXplICAgKzEwICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI2MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNjQgcXVhbnRpemUgICAxRSsyICAxZSsyICAtPiAgMUUrMgorZGRxdWEyNjUgcXVhbnRpemUgICAxRSszICAxZSsyICAtPiAgMS4wRSszCitkZHF1YTI2NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzIgIC0+ICAxLjAwRSs0CitkZHF1YTI2NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzIgIC0+ICAxLjAwMEUrNQorZGRxdWEyNjggcXVhbnRpemUgICAxRSs2ICAxZSsyICAtPiAgMS4wMDAwRSs2CitkZHF1YTI2OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzIgIC0+ICAxLjAwMDAwRSs3CitkZHF1YTI3MCBxdWFudGl6ZSAgIDFFKzggIDFlKzIgIC0+ICAxLjAwMDAwMEUrOAorZGRxdWEyNzEgcXVhbnRpemUgICAxRSs5ICAxZSsyICAtPiAgMS4wMDAwMDAwRSs5CitkZHF1YTI3MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzIgIC0+ICAxLjAwMDAwMDAwRSsxMAorZGRxdWEyNzMgcXVhbnRpemUgICAxRS0xMCAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjc0IHF1YW50aXplICAgMUUtMiAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI3NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzIgIC0+ICAwRSsyCisKK2RkcXVhMjgwIHF1YW50aXplICAgLTEwICAgMWUrMyAgLT4gIC0wRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyODEgcXVhbnRpemUgICArMSAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjgyIHF1YW50aXplICAgKzEwICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI4MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyODQgcXVhbnRpemUgICAxRSsyICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjg1IHF1YW50aXplICAgMUUrMyAgMWUrMyAgLT4gIDFFKzMKK2RkcXVhMjg2IHF1YW50aXplICAgMUUrNCAgMWUrMyAgLT4gIDEuMEUrNAorZGRxdWEyODcgcXVhbnRpemUgICAxRSs1ICAxZSszICAtPiAgMS4wMEUrNQorZGRxdWEyODggcXVhbnRpemUgICAxRSs2ICAxZSszICAtPiAgMS4wMDBFKzYKK2RkcXVhMjg5IHF1YW50aXplICAgMUUrNyAgMWUrMyAgLT4gIDEuMDAwMEUrNworZGRxdWEyOTAgcXVhbnRpemUgICAxRSs4ICAxZSszICAtPiAgMS4wMDAwMEUrOAorZGRxdWEyOTEgcXVhbnRpemUgICAxRSs5ICAxZSszICAtPiAgMS4wMDAwMDBFKzkKK2RkcXVhMjkyIHF1YW50aXplICAgMUUrMTAgMWUrMyAgLT4gIDEuMDAwMDAwMEUrMTAKK2RkcXVhMjkzIHF1YW50aXplICAgMUUtMTAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI5NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyOTUgcXVhbnRpemUgICAwRS0xMCAxZSszICAtPiAgMEUrMworCistLSByb3VuZCB1cCBmcm9tIGJlbG93IFtzaWduIHdyb25nIGluIEpJVCBjb21waWxlciBvbmNlXQorZGRxdWEzMDAgcXVhbnRpemUgICAwLjAwNzggMWUtNSAtPiAgMC4wMDc4MAorZGRxdWEzMDEgcXVhbnRpemUgICAwLjAwNzggMWUtNCAtPiAgMC4wMDc4CitkZHF1YTMwMiBxdWFudGl6ZSAgIDAuMDA3OCAxZS0zIC0+ICAwLjAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzAzIHF1YW50aXplICAgMC4wMDc4IDFlLTIgLT4gIDAuMDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMwNCBxdWFudGl6ZSAgIDAuMDA3OCAxZS0xIC0+ICAwLjAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMwNSBxdWFudGl6ZSAgIDAuMDA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMDYgcXVhbnRpemUgICAwLjAwNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzA3IHF1YW50aXplICAgMC4wMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMzEwIHF1YW50aXplICAtMC4wMDc4IDFlLTUgLT4gLTAuMDA3ODAKK2RkcXVhMzExIHF1YW50aXplICAtMC4wMDc4IDFlLTQgLT4gLTAuMDA3OAorZGRxdWEzMTIgcXVhbnRpemUgIC0wLjAwNzggMWUtMyAtPiAtMC4wMDggSW5leGFjdCBSb3VuZGVkCitkZHF1YTMxMyBxdWFudGl6ZSAgLTAuMDA3OCAxZS0yIC0+IC0wLjAxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMTQgcXVhbnRpemUgIC0wLjAwNzggMWUtMSAtPiAtMC4wIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMTUgcXVhbnRpemUgIC0wLjAwNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzE2IHF1YW50aXplICAtMC4wMDc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMxNyBxdWFudGl6ZSAgLTAuMDA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTMyMCBxdWFudGl6ZSAgIDAuMDc4IDFlLTUgLT4gIDAuMDc4MDAKK2RkcXVhMzIxIHF1YW50aXplICAgMC4wNzggMWUtNCAtPiAgMC4wNzgwCitkZHF1YTMyMiBxdWFudGl6ZSAgIDAuMDc4IDFlLTMgLT4gIDAuMDc4CitkZHF1YTMyMyBxdWFudGl6ZSAgIDAuMDc4IDFlLTIgLT4gIDAuMDggSW5leGFjdCBSb3VuZGVkCitkZHF1YTMyNCBxdWFudGl6ZSAgIDAuMDc4IDFlLTEgLT4gIDAuMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzI1IHF1YW50aXplICAgMC4wNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzI2IHF1YW50aXplICAgMC4wNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzI3IHF1YW50aXplICAgMC4wNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEzMzAgcXVhbnRpemUgIC0wLjA3OCAxZS01IC0+IC0wLjA3ODAwCitkZHF1YTMzMSBxdWFudGl6ZSAgLTAuMDc4IDFlLTQgLT4gLTAuMDc4MAorZGRxdWEzMzIgcXVhbnRpemUgIC0wLjA3OCAxZS0zIC0+IC0wLjA3OAorZGRxdWEzMzMgcXVhbnRpemUgIC0wLjA3OCAxZS0yIC0+IC0wLjA4IEluZXhhY3QgUm91bmRlZAorZGRxdWEzMzQgcXVhbnRpemUgIC0wLjA3OCAxZS0xIC0+IC0wLjEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMzNSBxdWFudGl6ZSAgLTAuMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMzNiBxdWFudGl6ZSAgLTAuMDc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMzNyBxdWFudGl6ZSAgLTAuMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMzQwIHF1YW50aXplICAgMC43OCAxZS01IC0+ICAwLjc4MDAwCitkZHF1YTM0MSBxdWFudGl6ZSAgIDAuNzggMWUtNCAtPiAgMC43ODAwCitkZHF1YTM0MiBxdWFudGl6ZSAgIDAuNzggMWUtMyAtPiAgMC43ODAKK2RkcXVhMzQzIHF1YW50aXplICAgMC43OCAxZS0yIC0+ICAwLjc4CitkZHF1YTM0NCBxdWFudGl6ZSAgIDAuNzggMWUtMSAtPiAgMC44IEluZXhhY3QgUm91bmRlZAorZGRxdWEzNDUgcXVhbnRpemUgICAwLjc4ICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM0NiBxdWFudGl6ZSAgIDAuNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzQ3IHF1YW50aXplICAgMC43OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTM1MCBxdWFudGl6ZSAgLTAuNzggMWUtNSAtPiAtMC43ODAwMAorZGRxdWEzNTEgcXVhbnRpemUgIC0wLjc4IDFlLTQgLT4gLTAuNzgwMAorZGRxdWEzNTIgcXVhbnRpemUgIC0wLjc4IDFlLTMgLT4gLTAuNzgwCitkZHF1YTM1MyBxdWFudGl6ZSAgLTAuNzggMWUtMiAtPiAtMC43OAorZGRxdWEzNTQgcXVhbnRpemUgIC0wLjc4IDFlLTEgLT4gLTAuOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzU1IHF1YW50aXplICAtMC43OCAgMWUwIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNTYgcXVhbnRpemUgIC0wLjc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM1NyBxdWFudGl6ZSAgLTAuNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEzNjAgcXVhbnRpemUgICA3LjggMWUtNSAtPiAgNy44MDAwMAorZGRxdWEzNjEgcXVhbnRpemUgICA3LjggMWUtNCAtPiAgNy44MDAwCitkZHF1YTM2MiBxdWFudGl6ZSAgIDcuOCAxZS0zIC0+ICA3LjgwMAorZGRxdWEzNjMgcXVhbnRpemUgICA3LjggMWUtMiAtPiAgNy44MAorZGRxdWEzNjQgcXVhbnRpemUgICA3LjggMWUtMSAtPiAgNy44CitkZHF1YTM2NSBxdWFudGl6ZSAgIDcuOCAgMWUwIC0+ICA4IEluZXhhY3QgUm91bmRlZAorZGRxdWEzNjYgcXVhbnRpemUgICA3LjggMWUrMSAtPiAgMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzY3IHF1YW50aXplICAgNy44IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM2OCBxdWFudGl6ZSAgIDcuOCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTM3MCBxdWFudGl6ZSAgLTcuOCAxZS01IC0+IC03LjgwMDAwCitkZHF1YTM3MSBxdWFudGl6ZSAgLTcuOCAxZS00IC0+IC03LjgwMDAKK2RkcXVhMzcyIHF1YW50aXplICAtNy44IDFlLTMgLT4gLTcuODAwCitkZHF1YTM3MyBxdWFudGl6ZSAgLTcuOCAxZS0yIC0+IC03LjgwCitkZHF1YTM3NCBxdWFudGl6ZSAgLTcuOCAxZS0xIC0+IC03LjgKK2RkcXVhMzc1IHF1YW50aXplICAtNy44ICAxZTAgLT4gLTggSW5leGFjdCBSb3VuZGVkCitkZHF1YTM3NiBxdWFudGl6ZSAgLTcuOCAxZSsxIC0+IC0xRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNzcgcXVhbnRpemUgIC03LjggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzc4IHF1YW50aXplICAtNy44IDFlKzMgLT4gLTBFKzMgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgaW5kaXZpZHVhbHMKK2RkcXVhMzgwIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAxMjM0NTY3MzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzODEgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NS4wNiAxZS0yIC0+IDEyMzQ1NjczNTIzNjQ1LjA2CitkZHF1YTM4MiBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTM4MyBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MDYgIDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTM4NCBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gLTEyMzQ1NjczNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM4NSBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gLTEyMzQ1NjczNTIzNjQ1LjA2CitkZHF1YTM4NiBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTM4NyBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQ1MDYgIDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3JvdW5kaW5nOiBkb3duCitkZHF1YTM4OSBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSA/IHNob3VsZCB0aGF0IG9uZSBpbnN0ZWFkIGhhdmUgYmVlbjoKKy0tIGRkcXVhMzg5IHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdW5kaW5nOiBoYWxmX3VwCisKKy0tIGFuZCBhIGZldyBtb3JlIGZyb20gZS1tYWlsIGRpc2N1c3Npb25zCitkZHF1YTM5MSBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIuMzQ1NjcgIDFlLTMgLT4gMTIzNDU2Nzg5MTIuMzQ2ICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM5MiBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzLjQ1NjcgIDFlLTMgLT4gMTIzNDU2Nzg5MTIzLjQ1NyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM5MyBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzNC41NjcgIDFlLTMgLT4gMTIzNDU2Nzg5MTIzNC41NjcKK2RkcXVhMzk0IHF1YW50aXplICAxMjM0NTY3ODkxMjM0NS42NyAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMzk1IHF1YW50aXplICAxMjM0NTY3ODkxMjM0NTYuNyAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMzk2IHF1YW50aXplICAxMjM0NTY3ODkxMjM0NTY3LiAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzCitkZHF1YTQwMCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS01ICAtPiAgOS45OTkwMAorZGRxdWE0MDEgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNCAgLT4gIDkuOTk5MAorZGRxdWE0MDIgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMyAgLT4gIDkuOTk5CitkZHF1YTQwMyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0yICAtPiAxMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQwNCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0xICAtPiAxMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQwNSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQwNiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUxICAtPiAxRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQwNyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUyICAtPiAwRSsyICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNDEwIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTUgIC0+ICAwLjk5OTAwCitkZHF1YTQxMSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS00ICAtPiAgMC45OTkwCitkZHF1YTQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkKK2RkcXVhNDEzIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTIgIC0+ICAxLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDE0IHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTEgIC0+ICAxLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDE2IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTAKK2RkcXVhNDIxIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTQgIC0+ICAwLjA5OTkKK2RkcXVhNDIyIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTMgIC0+ICAwLjEwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDI0IHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTEgIC0+ICAwLjEgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDI1IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE0MzAgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNSAgLT4gIDAuMDA5OTkKK2RkcXVhNDMxIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDMyIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTMgIC0+ICAwLjAxMCAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDMzIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTIgIC0+ICAwLjAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDM0IHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDM1IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDM2IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE0NDAgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNSAgLT4gIDAuMDAxMDAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDEgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNCAgLT4gIDAuMDAxMCAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDMgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMiAgLT4gIDAuMDAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDQgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDYgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDAKK2RkcXVhMTAwMiBxdWFudGl6ZSAgMC4wMDEgICAgICAgIDAuMDAxIC0+ICAwLjAwMQorZGRxdWExMDAzIHF1YW50aXplICAwLjAwMTIgICAgICAgMC4wMDEgLT4gIDAuMDAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEwMDUgcXVhbnRpemUgIDAuNTAxICAgICAgICAwLjAwMSAtPiAgMC41MDEKK2RkcXVhMTAwNiBxdWFudGl6ZSAgMC41MDEyICAgICAgIDAuMDAxIC0+ICAwLjUwMSAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMDA4IHF1YW50aXplICAwLjk5OSAgICAgICAgMC4wMDEgLT4gIDAuOTk5CisKK2RkcXVhNDgxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCitkZHF1YTQ4MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZGRxdWE0ODMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2RkcXVhNDg0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDg1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ4NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCistLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQKK2RkcXVhNDg3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorZGRxdWE0ODggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNDkxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCitkZHF1YTQ5MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZGRxdWE0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2RkcXVhNDk0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDk1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ5NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDk4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorCistLSBaZXJvcworZGRxdWE1MDAgcXVhbnRpemUgICAwICAgICAxZTEgLT4gIDBFKzEKK2RkcXVhNTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwCitkZHF1YTUwMiBxdWFudGl6ZSAgIDAgICAgMWUtMSAtPiAgMC4wCitkZHF1YTUwMyBxdWFudGl6ZSAgIDAuMCAgMWUtMSAtPiAgMC4wCitkZHF1YTUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMAorZGRxdWE1MDUgcXVhbnRpemUgICAwLjAgIDFlKzEgLT4gIDBFKzEKK2RkcXVhNTA2IHF1YW50aXplICAgMEUrMSAxZS0xIC0+ICAwLjAKK2RkcXVhNTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwCitkZHF1YTUwOCBxdWFudGl6ZSAgIDBFKzEgMWUrMSAtPiAgMEUrMQorZGRxdWE1MDkgcXVhbnRpemUgIC0wICAgICAxZTEgLT4gLTBFKzEKK2RkcXVhNTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wCitkZHF1YTUxMSBxdWFudGl6ZSAgLTAgICAgMWUtMSAtPiAtMC4wCitkZHF1YTUxMiBxdWFudGl6ZSAgLTAuMCAgMWUtMSAtPiAtMC4wCitkZHF1YTUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMAorZGRxdWE1MTQgcXVhbnRpemUgIC0wLjAgIDFlKzEgLT4gLTBFKzEKK2RkcXVhNTE1IHF1YW50aXplICAtMEUrMSAxZS0xIC0+IC0wLjAKK2RkcXVhNTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wCitkZHF1YTUxNyBxdWFudGl6ZSAgLTBFKzEgMWUrMSAtPiAtMEUrMQorCistLSBTdXNwaWNpb3VzIFJIUyB2YWx1ZXMKK2RkcXVhNTIwIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorZGRxdWE1MjEgcXVhbnRpemUgMTIzLjQ1NiAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCitkZHF1YTUyMiBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNTIzIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBmb3VyIGFyZSAid29uJ3QgZml0IiBvdmVyZmwKK2RkcXVhNTI2IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTUyNyBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1MjggcXVhbnRpemUgICAxLjIzNCAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTI5IHF1YW50aXplIDEyMy40NTYgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkcXVhNTMyIHF1YW50aXplICAgMS4yMzRFKzI5OSAgICAxZTI5OSAtPiAxRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTUzMyBxdWFudGl6ZSAgIDEuMjM0RSsyOTggICAgMWUyOTkgLT4gMEUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE1MzQgcXVhbnRpemUgICAxLjIzNCAgICAgICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNTM3IHF1YW50aXplICAgMCAgICAgICAgICAgIDFlLTI5OSAtPiAwRS0yOTkKKy0tIG5leHQgdHdvIGFyZSAid29uJ3QgZml0IiBvdmVyZmxvd3MKK2RkcXVhNTM4IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTM5IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTMwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIFttb3JlIGJlbG93XQorCistLSBTcGVjaWFscworZGRxdWE1ODAgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZHF1YTU4MSBxdWFudGl6ZSAgSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1ODIgcXVhbnRpemUgIEluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTgzIHF1YW50aXplICBJbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU4NCBxdWFudGl6ZSAgSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1ODUgcXVhbnRpemUgIEluZiAgIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTg2IHF1YW50aXplICBJbmYgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRxdWE1ODcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTg4IHF1YW50aXplIC1JbmYgICAgIEluZiAgIC0+ICAtSW5maW5pdHkKK2RkcXVhNTg5IHF1YW50aXplIC0xICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU5MCBxdWFudGl6ZSAgMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1OTEgcXVhbnRpemUgIDEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTkyIHF1YW50aXplICAxMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU5MyBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkcXVhNTk0IHF1YW50aXplICBJbmYgIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU5NSBxdWFudGl6ZSAtMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkZHF1YTYwMCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5CitkZHF1YTYwMSBxdWFudGl6ZSAtSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MDIgcXVhbnRpemUgLUluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjAzIHF1YW50aXplIC1JbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYwNCBxdWFudGl6ZSAtSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MDUgcXVhbnRpemUgLUluZiAgIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjA2IHF1YW50aXplIC1JbmYgICAgIEluZiAgIC0+ICAtSW5maW5pdHkKK2RkcXVhNjA3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYwOCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5CitkZHF1YTYwOSBxdWFudGl6ZSAtMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MTAgcXVhbnRpemUgIDAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjExIHF1YW50aXplICAxICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYxMiBxdWFudGl6ZSAgMTAwMCAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MTMgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZHF1YTYxNCBxdWFudGl6ZSAtSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MTUgcXVhbnRpemUgLTAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZGRxdWE2MjEgcXVhbnRpemUgIE5hTiAgIC1JbmYgICAgLT4gIE5hTgorZGRxdWE2MjIgcXVhbnRpemUgIE5hTiAxZS0yOTkgICAgLT4gIE5hTgorZGRxdWE2MjMgcXVhbnRpemUgIE5hTiAxZS0xICAgICAgLT4gIE5hTgorZGRxdWE2MjQgcXVhbnRpemUgIE5hTiAgMWUwICAgICAgLT4gIE5hTgorZGRxdWE2MjUgcXVhbnRpemUgIE5hTiAgMWUxICAgICAgLT4gIE5hTgorZGRxdWE2MjYgcXVhbnRpemUgIE5hTiAgMWUyOTkgICAgLT4gIE5hTgorZGRxdWE2MjcgcXVhbnRpemUgIE5hTiAgICBJbmYgICAgLT4gIE5hTgorZGRxdWE2MjggcXVhbnRpemUgIE5hTiAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MjkgcXVhbnRpemUgLUluZiAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzAgcXVhbnRpemUgLTEwMDAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzEgcXVhbnRpemUgLTEgICAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzIgcXVhbnRpemUgIDAgICAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzMgcXVhbnRpemUgIDEgICAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzQgcXVhbnRpemUgIDEwMDAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzUgcXVhbnRpemUgIEluZiAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzYgcXVhbnRpemUgIE5hTiAxZS0wICAgICAgLT4gIE5hTgorZGRxdWE2MzcgcXVhbnRpemUgLTAgICAgICBOYU4gICAgLT4gIE5hTgorCitkZHF1YTY0MSBxdWFudGl6ZSAgc05hTiAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDIgcXVhbnRpemUgIHNOYU4gMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQzIHF1YW50aXplICBzTmFOIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0NCBxdWFudGl6ZSAgc05hTiAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDUgcXVhbnRpemUgIHNOYU4gIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQ2IHF1YW50aXplICBzTmFOICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0NyBxdWFudGl6ZSAgc05hTiAgICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDggcXVhbnRpemUgIHNOYU4gICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQ5IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1MCBxdWFudGl6ZSAtSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTEgcXVhbnRpemUgLTEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjUyIHF1YW50aXplIC0xICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1MyBxdWFudGl6ZSAgMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTQgcXVhbnRpemUgIDEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjU1IHF1YW50aXplICAxMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1NiBxdWFudGl6ZSAgSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTcgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjU4IHF1YW50aXplICBzTmFOIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1OSBxdWFudGl6ZSAtMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZHF1YTY2MSBxdWFudGl6ZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RkcXVhNjYyIHF1YW50aXplICBOYU44ICA5MTkgICAtPiAgTmFOOAorZGRxdWE2NjMgcXVhbnRpemUgIE5hTjcxIEluZiAgIC0+ICBOYU43MQorZGRxdWE2NjQgcXVhbnRpemUgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitkZHF1YTY2NSBxdWFudGl6ZSAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RkcXVhNjY2IHF1YW50aXplIC05MTkgICBOYU4zMSAtPiAgTmFOMzEKK2RkcXVhNjY3IHF1YW50aXplICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitkZHF1YTY3MSBxdWFudGl6ZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3MiBxdWFudGl6ZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3MyBxdWFudGl6ZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3NCBxdWFudGl6ZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3NSBxdWFudGl6ZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3NiBxdWFudGl6ZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3NyBxdWFudGl6ZSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3OCBxdWFudGl6ZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3OSBxdWFudGl6ZSAgTmFOICAgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKK2RkcXVhNjgxIHF1YW50aXplIC1OYU45IC1JbmYgICAtPiAtTmFOOQorZGRxdWE2ODIgcXVhbnRpemUgLU5hTjggIDkxOSAgIC0+IC1OYU44CitkZHF1YTY4MyBxdWFudGl6ZSAtTmFONzEgSW5mICAgLT4gLU5hTjcxCitkZHF1YTY4NCBxdWFudGl6ZSAtTmFONiAtTmFONSAgLT4gLU5hTjYKK2RkcXVhNjg1IHF1YW50aXplIC1JbmYgIC1OYU40ICAtPiAtTmFONAorZGRxdWE2ODYgcXVhbnRpemUgLTkxOSAgLU5hTjMxIC0+IC1OYU4zMQorZGRxdWE2ODcgcXVhbnRpemUgIEluZiAgLU5hTjIgIC0+IC1OYU4yCisKK2RkcXVhNjkxIHF1YW50aXplIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjkyIHF1YW50aXplIC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjkzIHF1YW50aXplIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk0IHF1YW50aXplIC1zTmFOMTYgc05hTjk0ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk1IHF1YW50aXplIC1OYU45NSAtc05hTjkzICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk2IHF1YW50aXplIC1JbmYgICAtc05hTjkyICAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk3IHF1YW50aXplICAwODggICAtc05hTjkxICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk4IHF1YW50aXplICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk5IHF1YW50aXplICBOYU4gICAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CitkZHF1YTcxMCBxdWFudGl6ZSAgMS4wMEUtMzgzICAgIDFlLTM4MyAgLT4gICAxRS0zODMgICAgUm91bmRlZAorZGRxdWE3MTEgcXVhbnRpemUgIDAuMUUtMzgzICAgIDJlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwKK2RkcXVhNzEyIHF1YW50aXplICAwLjEwRS0zODMgICAzZS0zODQgIC0+ICAgMUUtMzg0ICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkcXVhNzEzIHF1YW50aXplICAwLjEwMEUtMzgzICA0ZS0zODQgIC0+ICAgMUUtMzg0ICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkcXVhNzE0IHF1YW50aXplICAwLjAxRS0zODMgICA1ZS0zODUgIC0+ICAgMUUtMzg1ICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZGRxdWE3MTUgcXVhbnRpemUgIDAuOTk5RS0zODMgICAxZS0zODMgIC0+ICAgMUUtMzgzICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3MTYgcXVhbnRpemUgIDAuMDk5RS0zODMgMTBlLTM4NCAgLT4gICAxRS0zODQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCisKK2RkcXVhNzE3IHF1YW50aXplICAwLjAwOUUtMzgzICAxZS0zODUgIC0+ICAgMUUtMzg1ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZGRxdWE3MTggcXVhbnRpemUgIDAuMDAxRS0zODMgIDFlLTM4NSAgLT4gICAwRS0zODUgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzE5IHF1YW50aXplICAwLjAwMDlFLTM4MyAxZS0zODUgIC0+ICAgMEUtMzg1ICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTcyMCBxdWFudGl6ZSAgMC4wMDAxRS0zODMgMWUtMzg1ICAtPiAgIDBFLTM4NSAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTczMCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzgzICAtPiAgLTFFLTM4MyAgICAgUm91bmRlZAorZGRxdWE3MzEgcXVhbnRpemUgLTAuMUUtMzgzICAgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIFJvdW5kZWQgSW5leGFjdAorZGRxdWE3MzIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIFJvdW5kZWQgSW5leGFjdAorZGRxdWE3MzMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIFJvdW5kZWQgSW5leGFjdAorZGRxdWE3MzQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RkcXVhNzM1IHF1YW50aXplIC0wLjk5OUUtMzgzIDkwZS0zODMgIC0+ICAtMUUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzM2IHF1YW50aXplIC0wLjA5OUUtMzgzIC0xZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzM3IHF1YW50aXplIC0wLjAwOUUtMzgzIC0xZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzM4IHF1YW50aXplIC0wLjAwMUUtMzgzIC0wZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzM5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAwZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE3NDAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4NCAtPiAgLTEuMEUtMzgzICAgUm91bmRlZAorZGRxdWE3NDEgcXVhbnRpemUgLTAuMUUtMzgzICAgIDFlLTM4NCAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwKK2RkcXVhNzQyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODQgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkcXVhNzQzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODQgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkcXVhNzQ0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZGRxdWE3NDUgcXVhbnRpemUgLTAuOTk5RS0zODMgIDFlLTM4NCAtPiAgLTEuMEUtMzgzICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTc0NiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RkcXVhNzQ3IHF1YW50aXplIC0wLjAwOUUtMzgzICAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTc0OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3NDkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE3NTAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4NSAtPiAgLTEuMDBFLTM4MworZGRxdWE3NTEgcXVhbnRpemUgLTAuMUUtMzgzICAgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwKK2RkcXVhNzUyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsCitkZHF1YTc1MyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHF1YTc1NCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzg1IC0+ICAtMUUtMzg1ICAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RkcXVhNzU1IHF1YW50aXplIC0wLjk5OUUtMzgzICAxZS0zODUgLT4gIC0xLjAwRS0zODMgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3NTYgcXVhbnRpemUgLTAuMDk5RS0zODMgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkZHF1YTc1NyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAgMWUtMzg1IC0+ICAtMUUtMzg1ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RkcXVhNzU4IHF1YW50aXplIC0wLjAwMUUtMzgzICAxZS0zODUgLT4gIC0wRS0zODUgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTc1OSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMWUtMzg1IC0+ICAtMEUtMzg1ICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTc2MCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzg2IC0+ICAtMS4wMDBFLTM4MworZGRxdWE3NjEgcXVhbnRpemUgLTAuMUUtMzgzICAgIDFlLTM4NiAtPiAgLTEuMDBFLTM4NCAgU3Vibm9ybWFsCitkZHF1YTc2MiBxdWFudGl6ZSAtMC4xMEUtMzgzICAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwKK2RkcXVhNzYzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODYgLT4gIC0xLjAwRS0zODQgIFN1Ym5vcm1hbAorZGRxdWE3NjQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4NiAtPiAgLTEuMEUtMzg1ICAgU3Vibm9ybWFsCitkZHF1YTc2NSBxdWFudGl6ZSAtMC45OTlFLTM4MyAgMWUtMzg2IC0+ICAtOS45OUUtMzg0ICBTdWJub3JtYWwKK2RkcXVhNzY2IHF1YW50aXplIC0wLjA5OUUtMzgzICAxZS0zODYgLT4gIC05LjlFLTM4NSAgIFN1Ym5vcm1hbAorZGRxdWE3NjcgcXVhbnRpemUgLTAuMDA5RS0zODMgIDFlLTM4NiAtPiAgLTlFLTM4NiAgICAgU3Vibm9ybWFsCitkZHF1YTc2OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg2IC0+ICAtMUUtMzg2ICAgICBTdWJub3JtYWwKK2RkcXVhNzY5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAxZS0zODYgLT4gIC0wRS0zODYgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIGZyb20gRnVuZyBMZWUKK2RkcXVhMTAyMSBxdWFudGl6ZSAgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiAgOC42NjY2NjY2NjY2NjYwMDBFKzM4NAorZGRxdWExMDIyIHF1YW50aXplIC04LjY2NjY2NjY2NjY2NjAwMEUrMzg0ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IC04LjY2NjY2NjY2NjY2NjAwMEUrMzg0CitkZHF1YTEwMjcgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzMyMyAgMUUrMzEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTEwMjkgcXVhbnRpemUgOC42NjY2NjY2NkUrMyAgICAgICAgICAgMUUrMyAgICAgLT4gOUUrMyBJbmV4YWN0IFJvdW5kZWQKKworCistLWRkcXVhMTAzMCBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4NCAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZCBJbmV4YWN0CistLWRkcXVhMTAzMSBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4NCAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZAorLS1kZHF1YTEwMzIgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODMgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQKKy0tZGRxdWExMDMzIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzgyICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkCistLWRkcXVhMTAzNCBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MSAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZAorLS1kZHF1YTEwMzUgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODAgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQKKworLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMKK2RkcXVhMTA0MCBxdWFudGl6ZSAtMjE0NzQ4MzY0NiAgICAgMCAtPiAtMjE0NzQ4MzY0NgorZGRxdWExMDQxIHF1YW50aXplIC0yMTQ3NDgzNjQ3ICAgICAwIC0+IC0yMTQ3NDgzNjQ3CitkZHF1YTEwNDIgcXVhbnRpemUgLTIxNDc0ODM2NDggICAgIDAgLT4gLTIxNDc0ODM2NDgKK2RkcXVhMTA0MyBxdWFudGl6ZSAtMjE0NzQ4MzY0OSAgICAgMCAtPiAtMjE0NzQ4MzY0OQorZGRxdWExMDQ0IHF1YW50aXplICAyMTQ3NDgzNjQ2ICAgICAwIC0+ICAyMTQ3NDgzNjQ2CitkZHF1YTEwNDUgcXVhbnRpemUgIDIxNDc0ODM2NDcgICAgIDAgLT4gIDIxNDc0ODM2NDcKK2RkcXVhMTA0NiBxdWFudGl6ZSAgMjE0NzQ4MzY0OCAgICAgMCAtPiAgMjE0NzQ4MzY0OAorZGRxdWExMDQ3IHF1YW50aXplICAyMTQ3NDgzNjQ5ICAgICAwIC0+ICAyMTQ3NDgzNjQ5CitkZHF1YTEwNDggcXVhbnRpemUgIDQyOTQ5NjcyOTQgICAgIDAgLT4gIDQyOTQ5NjcyOTQKK2RkcXVhMTA0OSBxdWFudGl6ZSAgNDI5NDk2NzI5NSAgICAgMCAtPiAgNDI5NDk2NzI5NQorZGRxdWExMDUwIHF1YW50aXplICA0Mjk0OTY3Mjk2ICAgICAwIC0+ICA0Mjk0OTY3Mjk2CitkZHF1YTEwNTEgcXVhbnRpemUgIDQyOTQ5NjcyOTcgICAgIDAgLT4gIDQyOTQ5NjcyOTcKKworLS0gUm91bmRpbmcgc3dhdGhlCityb3VuZGluZzogaGFsZl9ldmVuCitkZHF1YTExMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTExMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkZHF1YTEyMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTEyMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2RkcXVhMTMwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RkcXVhMTMwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IHVwCitkZHF1YTE0MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTE0MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkcXVhMTUwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RkcXVhMTUwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjMgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogY2VpbGluZworZGRxdWExNjAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZGRxdWExNjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBmbG9vcgorZGRxdWExNzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZGRxdWExNzAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAwNXVwCitkZHF1YTE4MDAgcXVhbnRpemUgIDEuMjAwMCAgICAxLjAwICAgIC0+ICAxLjIwICBSb3VuZGVkCitkZHF1YTE4MDEgcXVhbnRpemUgIDEuMjAwMSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgwMiBxdWFudGl6ZSAgMS4yMDEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExODAzIHF1YW50aXplICAxLjIwNTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4MDQgcXVhbnRpemUgIDEuMjA1MSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgwNyBxdWFudGl6ZSAgMS4yMDYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExODA4IHF1YW50aXplICAxLjIwNzAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4MDkgcXVhbnRpemUgIDEuMjA5OSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgxMSBxdWFudGl6ZSAtMS4yMDk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTE5MDAgcXVhbnRpemUgIDEuMjEwMCAgICAxLjAwICAgIC0+ICAxLjIxICBSb3VuZGVkCitkZHF1YTE5MDEgcXVhbnRpemUgIDEuMjEwMSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkwMiBxdWFudGl6ZSAgMS4yMTEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTAzIHF1YW50aXplICAxLjIxNTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MDQgcXVhbnRpemUgIDEuMjE1MSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkwNyBxdWFudGl6ZSAgMS4yMTYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTA4IHF1YW50aXplICAxLjIxNzAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MDkgcXVhbnRpemUgIDEuMjE5OSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkxMSBxdWFudGl6ZSAtMS4yMTk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIwMDAgcXVhbnRpemUgIDEuMjQwMCAgICAxLjAwICAgIC0+ICAxLjI0ICBSb3VuZGVkCitkZHF1YTIwMDEgcXVhbnRpemUgIDEuMjQwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAwMiBxdWFudGl6ZSAgMS4yNDEwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDAzIHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMDQgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAwNyBxdWFudGl6ZSAgMS4yNDYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDA4IHF1YW50aXplICAxLjI0NzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMDkgcXVhbnRpemUgIDEuMjQ5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAxMSBxdWFudGl6ZSAtMS4yNDk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIxMDAgcXVhbnRpemUgIDEuMjUwMCAgICAxLjAwICAgIC0+ICAxLjI1ICBSb3VuZGVkCitkZHF1YTIxMDEgcXVhbnRpemUgIDEuMjUwMSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjEwMiBxdWFudGl6ZSAgMS4yNTEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMTAzIHF1YW50aXplICAxLjI1NTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIxMDQgcXVhbnRpemUgIDEuMjU1MSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjEwNyBxdWFudGl6ZSAgMS4yNTYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMTA4IHF1YW50aXplICAxLjI1NzAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIxMDkgcXVhbnRpemUgIDEuMjU5OSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjExMSBxdWFudGl6ZSAtMS4yNTk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIyMDAgcXVhbnRpemUgIDEuMjYwMCAgICAxLjAwICAgIC0+ICAxLjI2ICBSb3VuZGVkCitkZHF1YTIyMDEgcXVhbnRpemUgIDEuMjYwMSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIwMiBxdWFudGl6ZSAgMS4yNjEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjAzIHF1YW50aXplICAxLjI2NTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMDQgcXVhbnRpemUgIDEuMjY1MSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIwNyBxdWFudGl6ZSAgMS4yNjYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjA4IHF1YW50aXplICAxLjI2NzAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMDkgcXVhbnRpemUgIDEuMjY5OSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIxMSBxdWFudGl6ZSAtMS4yNjk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIzMDAgcXVhbnRpemUgIDEuMjkwMCAgICAxLjAwICAgIC0+ICAxLjI5ICBSb3VuZGVkCitkZHF1YTIzMDEgcXVhbnRpemUgIDEuMjkwMSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwMiBxdWFudGl6ZSAgMS4yOTEwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzAzIHF1YW50aXplICAxLjI5NTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMDQgcXVhbnRpemUgIDEuMjk1MSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwNyBxdWFudGl6ZSAgMS4yOTYwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzA4IHF1YW50aXplICAxLjI5NzAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMDkgcXVhbnRpemUgIDEuMjk5OSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMxMSBxdWFudGl6ZSAtMS4yOTk5ICAgIDEuMDAgICAgLT4gLTEuMjkgIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCityb3VuZGluZzogICAgaGFsZl9ldmVuCitkZHF1YTk5OCBxdWFudGl6ZSAxMCAgICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE5OTkgcXVhbnRpemUgICMgMWUxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZWR1Y2UuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZWR1Y2UuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTI5ZTUwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlZHVjZS5kZWNUZXN0CkBAIC0wLDAgKzEsMTgyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkUmVkdWNlLmRlY1Rlc3QgLS0gcmVtb3ZlIHRyYWlsaW5nIHplcm9zIGZyb20gYSBkZWNEb3VibGUgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDMsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkcmVkMDAxIHJlZHVjZSAnMScgICAgICAtPiAnMScKK2RkcmVkMDAyIHJlZHVjZSAnLTEnICAgICAtPiAnLTEnCitkZHJlZDAwMyByZWR1Y2UgJzEuMDAnICAgLT4gJzEnCitkZHJlZDAwNCByZWR1Y2UgJy0xLjAwJyAgLT4gJy0xJworZGRyZWQwMDUgcmVkdWNlICcwJyAgICAgIC0+ICcwJworZGRyZWQwMDYgcmVkdWNlICcwLjAwJyAgIC0+ICcwJworZGRyZWQwMDcgcmVkdWNlICcwMC4wJyAgIC0+ICcwJworZGRyZWQwMDggcmVkdWNlICcwMC4wMCcgIC0+ICcwJworZGRyZWQwMDkgcmVkdWNlICcwMCcgICAgIC0+ICcwJworZGRyZWQwMTAgcmVkdWNlICcwRSsxJyAgIC0+ICcwJworZGRyZWQwMTEgcmVkdWNlICcwRSs1JyAgIC0+ICcwJworCitkZHJlZDAxMiByZWR1Y2UgJy0yJyAgICAgLT4gJy0yJworZGRyZWQwMTMgcmVkdWNlICcyJyAgICAgIC0+ICcyJworZGRyZWQwMTQgcmVkdWNlICctMi4wMCcgIC0+ICctMicKK2RkcmVkMDE1IHJlZHVjZSAnMi4wMCcgICAtPiAnMicKK2RkcmVkMDE2IHJlZHVjZSAnLTAnICAgICAtPiAnLTAnCitkZHJlZDAxNyByZWR1Y2UgJy0wLjAwJyAgLT4gJy0wJworZGRyZWQwMTggcmVkdWNlICctMDAuMCcgIC0+ICctMCcKK2RkcmVkMDE5IHJlZHVjZSAnLTAwLjAwJyAtPiAnLTAnCitkZHJlZDAyMCByZWR1Y2UgJy0wMCcgICAgLT4gJy0wJworZGRyZWQwMjEgcmVkdWNlICctMEUrNScgICAtPiAnLTAnCitkZHJlZDAyMiByZWR1Y2UgJy0wRSsxJyAgLT4gJy0wJworCitkZHJlZDAzMCByZWR1Y2UgJyswLjEnICAgICAgICAgICAgLT4gJzAuMScKK2RkcmVkMDMxIHJlZHVjZSAnLTAuMScgICAgICAgICAgICAtPiAnLTAuMScKK2RkcmVkMDMyIHJlZHVjZSAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScKK2RkcmVkMDMzIHJlZHVjZSAnLTAuMDEnICAgICAgICAgICAtPiAnLTAuMDEnCitkZHJlZDAzNCByZWR1Y2UgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJworZGRyZWQwMzUgcmVkdWNlICctMC4wMDEnICAgICAgICAgIC0+ICctMC4wMDEnCitkZHJlZDAzNiByZWR1Y2UgJyswLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJworZGRyZWQwMzcgcmVkdWNlICctMC4wMDAwMDEnICAgICAgIC0+ICctMC4wMDAwMDEnCitkZHJlZDAzOCByZWR1Y2UgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJworZGRyZWQwMzkgcmVkdWNlICctMC4wMDAwMDAwMDAwMDEnIC0+ICctMUUtMTInCisKK2RkcmVkMDQxIHJlZHVjZSAxLjEgICAgICAgIC0+IDEuMQorZGRyZWQwNDIgcmVkdWNlIDEuMTAgICAgICAgLT4gMS4xCitkZHJlZDA0MyByZWR1Y2UgMS4xMDAgICAgICAtPiAxLjEKK2RkcmVkMDQ0IHJlZHVjZSAxLjExMCAgICAgIC0+IDEuMTEKK2RkcmVkMDQ1IHJlZHVjZSAtMS4xICAgICAgIC0+IC0xLjEKK2RkcmVkMDQ2IHJlZHVjZSAtMS4xMCAgICAgIC0+IC0xLjEKK2RkcmVkMDQ3IHJlZHVjZSAtMS4xMDAgICAgIC0+IC0xLjEKK2RkcmVkMDQ4IHJlZHVjZSAtMS4xMTAgICAgIC0+IC0xLjExCitkZHJlZDA0OSByZWR1Y2UgOS45ICAgICAgICAtPiA5LjkKK2RkcmVkMDUwIHJlZHVjZSA5LjkwICAgICAgIC0+IDkuOQorZGRyZWQwNTEgcmVkdWNlIDkuOTAwICAgICAgLT4gOS45CitkZHJlZDA1MiByZWR1Y2UgOS45OTAgICAgICAtPiA5Ljk5CitkZHJlZDA1MyByZWR1Y2UgLTkuOSAgICAgICAtPiAtOS45CitkZHJlZDA1NCByZWR1Y2UgLTkuOTAgICAgICAtPiAtOS45CitkZHJlZDA1NSByZWR1Y2UgLTkuOTAwICAgICAtPiAtOS45CitkZHJlZDA1NiByZWR1Y2UgLTkuOTkwICAgICAtPiAtOS45OQorCistLSBzb21lIHRyYWlsaW5nIGZyYWN0aW9uYWwgemVyb3Mgd2l0aCB6ZXJvcyBpbiB1bml0cworZGRyZWQwNjAgcmVkdWNlICAxMC4wICAgICAgICAtPiAxRSsxCitkZHJlZDA2MSByZWR1Y2UgIDEwLjAwICAgICAgIC0+IDFFKzEKK2RkcmVkMDYyIHJlZHVjZSAgMTAwLjAgICAgICAgLT4gMUUrMgorZGRyZWQwNjMgcmVkdWNlICAxMDAuMDAgICAgICAtPiAxRSsyCitkZHJlZDA2NCByZWR1Y2UgIDEuMTAwMEUrMyAgIC0+IDEuMUUrMworZGRyZWQwNjUgcmVkdWNlICAxLjEwMDAwRSszICAtPiAxLjFFKzMKK2RkcmVkMDY2IHJlZHVjZSAtMTAuMCAgICAgICAgLT4gLTFFKzEKK2RkcmVkMDY3IHJlZHVjZSAtMTAuMDAgICAgICAgLT4gLTFFKzEKK2RkcmVkMDY4IHJlZHVjZSAtMTAwLjAgICAgICAgLT4gLTFFKzIKK2RkcmVkMDY5IHJlZHVjZSAtMTAwLjAwICAgICAgLT4gLTFFKzIKK2RkcmVkMDcwIHJlZHVjZSAtMS4xMDAwRSszICAgLT4gLTEuMUUrMworZGRyZWQwNzEgcmVkdWNlIC0xLjEwMDAwRSszICAtPiAtMS4xRSszCisKKy0tIHNvbWUgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyB3aXRoIHBvc2l0aXZlIGV4cG9uZW50CitkZHJlZDA4MCByZWR1Y2UgIDEwRSsxICAgICAgIC0+IDFFKzIKK2RkcmVkMDgxIHJlZHVjZSAgMTAwRSsxICAgICAgLT4gMUUrMworZGRyZWQwODIgcmVkdWNlICAxLjBFKzIgICAgICAtPiAxRSsyCitkZHJlZDA4MyByZWR1Y2UgIDEuMEUrMyAgICAgIC0+IDFFKzMKK2RkcmVkMDg0IHJlZHVjZSAgMS4xRSszICAgICAgLT4gMS4xRSszCitkZHJlZDA4NSByZWR1Y2UgIDEuMDBFKzMgICAgIC0+IDFFKzMKK2RkcmVkMDg2IHJlZHVjZSAgMS4xMEUrMyAgICAgLT4gMS4xRSszCitkZHJlZDA4NyByZWR1Y2UgLTEwRSsxICAgICAgIC0+IC0xRSsyCitkZHJlZDA4OCByZWR1Y2UgLTEwMEUrMSAgICAgIC0+IC0xRSszCitkZHJlZDA4OSByZWR1Y2UgLTEuMEUrMiAgICAgIC0+IC0xRSsyCitkZHJlZDA5MCByZWR1Y2UgLTEuMEUrMyAgICAgIC0+IC0xRSszCitkZHJlZDA5MSByZWR1Y2UgLTEuMUUrMyAgICAgIC0+IC0xLjFFKzMKK2RkcmVkMDkyIHJlZHVjZSAtMS4wMEUrMyAgICAgLT4gLTFFKzMKK2RkcmVkMDkzIHJlZHVjZSAtMS4xMEUrMyAgICAgLT4gLTEuMUUrMworCistLSBzb21lIHNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zLCB3ZXJlIHdlIHRvIGJlIHRyaW1taW5nCitkZHJlZDEwMCByZWR1Y2UgIDExICAgICAgICAgIC0+IDExCitkZHJlZDEwMSByZWR1Y2UgIDEwICAgICAgICAgIC0+IDFFKzEKK2RkcmVkMTAyIHJlZHVjZSAgMTAuICAgICAgICAgLT4gMUUrMQorZGRyZWQxMDMgcmVkdWNlICAxLjFFKzEgICAgICAtPiAxMQorZGRyZWQxMDQgcmVkdWNlICAxLjBFKzEgICAgICAtPiAxRSsxCitkZHJlZDEwNSByZWR1Y2UgIDEuMTBFKzIgICAgIC0+IDEuMUUrMgorZGRyZWQxMDYgcmVkdWNlICAxLjAwRSsyICAgICAtPiAxRSsyCitkZHJlZDEwNyByZWR1Y2UgIDEuMTAwRSszICAgIC0+IDEuMUUrMworZGRyZWQxMDggcmVkdWNlICAxLjAwMEUrMyAgICAtPiAxRSszCitkZHJlZDEwOSByZWR1Y2UgIDEuMDAwMDAwRSs2IC0+IDFFKzYKK2RkcmVkMTEwIHJlZHVjZSAtMTEgICAgICAgICAgLT4gLTExCitkZHJlZDExMSByZWR1Y2UgLTEwICAgICAgICAgIC0+IC0xRSsxCitkZHJlZDExMiByZWR1Y2UgLTEwLiAgICAgICAgIC0+IC0xRSsxCitkZHJlZDExMyByZWR1Y2UgLTEuMUUrMSAgICAgIC0+IC0xMQorZGRyZWQxMTQgcmVkdWNlIC0xLjBFKzEgICAgICAtPiAtMUUrMQorZGRyZWQxMTUgcmVkdWNlIC0xLjEwRSsyICAgICAtPiAtMS4xRSsyCitkZHJlZDExNiByZWR1Y2UgLTEuMDBFKzIgICAgIC0+IC0xRSsyCitkZHJlZDExNyByZWR1Y2UgLTEuMTAwRSszICAgIC0+IC0xLjFFKzMKK2RkcmVkMTE4IHJlZHVjZSAtMS4wMDBFKzMgICAgLT4gLTFFKzMKK2RkcmVkMTE5IHJlZHVjZSAtMS4wMDAwMEUrNSAgLT4gLTFFKzUKK2RkcmVkMTIwIHJlZHVjZSAtMS4wMDAwMDBFKzYgLT4gLTFFKzYKK2RkcmVkMTIxIHJlZHVjZSAtMTAuMDAwMDBFKzYgLT4gLTFFKzcKK2RkcmVkMTIyIHJlZHVjZSAtMTAwLjAwMDBFKzYgLT4gLTFFKzgKK2RkcmVkMTIzIHJlZHVjZSAtMTAwMC4wMDBFKzYgLT4gLTFFKzkKK2RkcmVkMTI0IHJlZHVjZSAtMTAwMDAuMDBFKzYgLT4gLTFFKzEwCitkZHJlZDEyNSByZWR1Y2UgLTEwMDAwMC4wRSs2IC0+IC0xRSsxMQorZGRyZWQxMjYgcmVkdWNlIC0xMDAwMDAwLkUrNiAtPiAtMUUrMTIKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorZGRyZWQxNDAgcmVkdWNlICcyLjEnICAgICAtPiAgJzIuMScKK2RkcmVkMTQxIHJlZHVjZSAnLTIuMCcgICAgLT4gICctMicKK2RkcmVkMTQyIHJlZHVjZSAnMS4yMDAnICAgLT4gICcxLjInCitkZHJlZDE0MyByZWR1Y2UgJy0xMjAnICAgIC0+ICAnLTEuMkUrMicKK2RkcmVkMTQ0IHJlZHVjZSAnMTIwLjAwJyAgLT4gICcxLjJFKzInCitkZHJlZDE0NSByZWR1Y2UgJzAuMDAnICAgIC0+ICAnMCcKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKKy0tIG5vdGUgb3JpZ2FtaSBlZmZlY3Qgb24gc29tZSBvZiB0aGVzZQorZGRyZWQxNTEgcmVkdWNlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyZWQxNTIgcmVkdWNlICA5Ljk5OTk5OTAwMDAwMDAwMEUrMzgwICAgLT4gOS45OTk5OTkwMDAwMEUrMzgwCitkZHJlZDE1MyByZWR1Y2UgIDkuOTk5OTk5OTk5OTkwMDAwRSszODQgICAtPiA5Ljk5OTk5OTk5OTk5MDAwMEUrMzg0CitkZHJlZDE1NCByZWR1Y2UgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkcmVkMTU1IHJlZHVjZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDFFLTM4MworZGRyZWQxNTYgcmVkdWNlICAyLjAwMEUtMzk1ICAgICAgICAgICAgICAgLT4gMkUtMzk1ICAgU3Vibm9ybWFsCitkZHJlZDE1NyByZWR1Y2UgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTggICBTdWJub3JtYWwKKworZGRyZWQxNjEgcmVkdWNlICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OCAgU3Vibm9ybWFsCitkZHJlZDE2MiByZWR1Y2UgIC0yLjAwMEUtMzk1ICAgICAgICAgICAgICAtPiAtMkUtMzk1ICBTdWJub3JtYWwKK2RkcmVkMTYzIHJlZHVjZSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xRS0zODMKK2RkcmVkMTY0IHJlZHVjZSAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMKK2RkcmVkMTY1IHJlZHVjZSAgLTkuOTk5OTk5MDAwMDAwMDAwRSszODAgIC0+IC05Ljk5OTk5OTAwMDAwRSszODAKK2RkcmVkMTY2IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTkwMDAwRSszODQgIC0+IC05Ljk5OTk5OTk5OTk5MDAwMEUrMzg0CitkZHJlZDE2NyByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NAorZGRyZWQxNjggcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkcmVkMTY5IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTkwRSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0CisKKworLS0gc3BlY2lhbHMgKHJlZHVjZSBkb2VzIG5vdCBhZmZlY3QgcGF5bG9hZCkKK2RkcmVkODIwIHJlZHVjZSAnSW5mJyAgICAtPiAnSW5maW5pdHknCitkZHJlZDgyMSByZWR1Y2UgJy1JbmYnICAgLT4gJy1JbmZpbml0eScKK2RkcmVkODIyIHJlZHVjZSAgIE5hTiAgICAtPiAgTmFOCitkZHJlZDgyMyByZWR1Y2UgIHNOYU4gICAgLT4gIE5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZWQ4MjQgcmVkdWNlICAgTmFOMTAxIC0+ICBOYU4xMDEKK2RkcmVkODI1IHJlZHVjZSAgc05hTjAxMCAtPiAgTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uCitkZHJlZDgyNyByZWR1Y2UgIC1OYU4gICAgLT4gLU5hTgorZGRyZWQ4MjggcmVkdWNlIC1zTmFOICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVkODI5IHJlZHVjZSAgLU5hTjEwMSAtPiAtTmFOMTAxCitkZHJlZDgzMCByZWR1Y2UgLXNOYU4wMTAgLT4gLU5hTjEwICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3QKK2RkcmVkOTAwIHJlZHVjZSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXIuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXIuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWQ4NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlci5kZWNUZXN0CkBAIC0wLDAgKzEsNjAwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkUmVtYWluZGVyLmRlY1Rlc3QgLS0gZGVjRG91YmxlIHJlbWFpbmRlciAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQorZGRyZW0wMDEgcmVtYWluZGVyICAxICAgICAxICAgIC0+ICAwCitkZHJlbTAwMiByZW1haW5kZXIgIDIgICAgIDEgICAgLT4gIDAKK2RkcmVtMDAzIHJlbWFpbmRlciAgMSAgICAgMiAgICAtPiAgMQorZGRyZW0wMDQgcmVtYWluZGVyICAyICAgICAyICAgIC0+ICAwCitkZHJlbTAwNSByZW1haW5kZXIgIDAgICAgIDEgICAgLT4gIDAKK2RkcmVtMDA2IHJlbWFpbmRlciAgMCAgICAgMiAgICAtPiAgMAorZGRyZW0wMDcgcmVtYWluZGVyICAxICAgICAzICAgIC0+ICAxCitkZHJlbTAwOCByZW1haW5kZXIgIDIgICAgIDMgICAgLT4gIDIKK2RkcmVtMDA5IHJlbWFpbmRlciAgMyAgICAgMyAgICAtPiAgMAorCitkZHJlbTAxMCByZW1haW5kZXIgIDIuNCAgIDEgICAgLT4gIDAuNAorZGRyZW0wMTEgcmVtYWluZGVyICAyLjQgICAtMSAgIC0+ICAwLjQKK2RkcmVtMDEyIHJlbWFpbmRlciAgLTIuNCAgMSAgICAtPiAgLTAuNAorZGRyZW0wMTMgcmVtYWluZGVyICAtMi40ICAtMSAgIC0+ICAtMC40CitkZHJlbTAxNCByZW1haW5kZXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKK2RkcmVtMDE1IHJlbWFpbmRlciAgMi40MDAgMSAgICAtPiAgMC40MDAKK2RkcmVtMDE2IHJlbWFpbmRlciAgMi40ICAgMiAgICAtPiAgMC40CitkZHJlbTAxNyByZW1haW5kZXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCitkZHJlbTAxOCByZW1haW5kZXIgIDIuICAgIDIgICAgLT4gIDAKK2RkcmVtMDE5IHJlbWFpbmRlciAgMjAgICAgMjAgICAtPiAgMAorCitkZHJlbTAyMCByZW1haW5kZXIgIDE4NyAgIDE4NyAgICAtPiAgMAorZGRyZW0wMjEgcmVtYWluZGVyICA1ICAgICAyICAgICAgLT4gIDEKK2RkcmVtMDIyIHJlbWFpbmRlciAgNSAgICAgMi4wICAgIC0+ICAxLjAKK2RkcmVtMDIzIHJlbWFpbmRlciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAorZGRyZW0wMjQgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCitkZHJlbTAyNSByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKKworZGRyZW0wMzAgcmVtYWluZGVyICAxICAgICAyICAgICAgLT4gIDEKK2RkcmVtMDMxIHJlbWFpbmRlciAgMSAgICAgNCAgICAgIC0+ICAxCitkZHJlbTAzMiByZW1haW5kZXIgIDEgICAgIDggICAgICAtPiAgMQorCitkZHJlbTAzMyByZW1haW5kZXIgIDEgICAgIDE2ICAgICAtPiAgMQorZGRyZW0wMzQgcmVtYWluZGVyICAxICAgICAzMiAgICAgLT4gIDEKK2RkcmVtMDM1IHJlbWFpbmRlciAgMSAgICAgNjQgICAgIC0+ICAxCitkZHJlbTA0MCByZW1haW5kZXIgIDEgICAgLTIgICAgICAtPiAgMQorZGRyZW0wNDEgcmVtYWluZGVyICAxICAgIC00ICAgICAgLT4gIDEKK2RkcmVtMDQyIHJlbWFpbmRlciAgMSAgICAtOCAgICAgIC0+ICAxCitkZHJlbTA0MyByZW1haW5kZXIgIDEgICAgLTE2ICAgICAtPiAgMQorZGRyZW0wNDQgcmVtYWluZGVyICAxICAgIC0zMiAgICAgLT4gIDEKK2RkcmVtMDQ1IHJlbWFpbmRlciAgMSAgICAtNjQgICAgIC0+ICAxCitkZHJlbTA1MCByZW1haW5kZXIgLTEgICAgIDIgICAgICAtPiAgLTEKK2RkcmVtMDUxIHJlbWFpbmRlciAtMSAgICAgNCAgICAgIC0+ICAtMQorZGRyZW0wNTIgcmVtYWluZGVyIC0xICAgICA4ICAgICAgLT4gIC0xCitkZHJlbTA1MyByZW1haW5kZXIgLTEgICAgIDE2ICAgICAtPiAgLTEKK2RkcmVtMDU0IHJlbWFpbmRlciAtMSAgICAgMzIgICAgIC0+ICAtMQorZGRyZW0wNTUgcmVtYWluZGVyIC0xICAgICA2NCAgICAgLT4gIC0xCitkZHJlbTA2MCByZW1haW5kZXIgLTEgICAgLTIgICAgICAtPiAgLTEKK2RkcmVtMDYxIHJlbWFpbmRlciAtMSAgICAtNCAgICAgIC0+ICAtMQorZGRyZW0wNjIgcmVtYWluZGVyIC0xICAgIC04ICAgICAgLT4gIC0xCitkZHJlbTA2MyByZW1haW5kZXIgLTEgICAgLTE2ICAgICAtPiAgLTEKK2RkcmVtMDY0IHJlbWFpbmRlciAtMSAgICAtMzIgICAgIC0+ICAtMQorZGRyZW0wNjUgcmVtYWluZGVyIC0xICAgIC02NCAgICAgLT4gIC0xCisKK2RkcmVtMDY2IHJlbWFpbmRlciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCitkZHJlbTA2NyByZW1haW5kZXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40CitkZHJlbTA2OCByZW1haW5kZXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gMC41CitkZHJlbTA2OSByZW1haW5kZXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gMC45CitkZHJlbTA3MCByZW1haW5kZXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gMC45OTkKK2RkcmVtMDcxIHJlbWFpbmRlciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAwLjk5OTk5OQorZGRyZW0wNzIgcmVtYWluZGVyICA5ICAgICAgICAgICAgIDEgIC0+IDAKK2RkcmVtMDczIHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAwCitkZHJlbTA3NCByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgMiAgLT4gMQorZGRyZW0wNzUgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDMgIC0+IDAKK2RkcmVtMDc2IHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSA0ICAtPiAzCisKK2RkcmVtMDgwIHJlbWFpbmRlciAgMC4gICAgICAgICAgICAxICAtPiAwCitkZHJlbTA4MSByZW1haW5kZXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wCitkZHJlbTA4MiByZW1haW5kZXIgIDAuMDAgICAgICAgICAgMSAgLT4gMC4wMAorZGRyZW0wODMgcmVtYWluZGVyICAwLjAwRSs5ICAgICAgIDEgIC0+IDAKK2RkcmVtMDg0IHJlbWFpbmRlciAgMC4wMEUrMyAgICAgICAxICAtPiAwCitkZHJlbTA4NSByZW1haW5kZXIgIDAuMDBFKzIgICAgICAgMSAgLT4gMAorZGRyZW0wODYgcmVtYWluZGVyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMAorZGRyZW0wODcgcmVtYWluZGVyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDAKK2RkcmVtMDg4IHJlbWFpbmRlciAgMC4wMEUtMCAgICAgICAxICAtPiAwLjAwCitkZHJlbTA4OSByZW1haW5kZXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDAKK2RkcmVtMDkwIHJlbWFpbmRlciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDAKK2RkcmVtMDkxIHJlbWFpbmRlciAgMC4wMEUtMyAgICAgICAxICAtPiAwLjAwMDAwCitkZHJlbTA5MiByZW1haW5kZXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDAKK2RkcmVtMDkzIHJlbWFpbmRlciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03CitkZHJlbTA5NCByZW1haW5kZXIgIDAuMDBFLTYgICAgICAgMSAgLT4gMEUtOAorZGRyZW0wOTUgcmVtYWluZGVyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0CisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDAKK2RkcmVtMTAxIHJlbWFpbmRlciAgMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0xMDIgcmVtYWluZGVyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTEwMyByZW1haW5kZXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMTA0IHJlbWFpbmRlciAtMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0xMDUgcmVtYWluZGVyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTEwNiByZW1haW5kZXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKy0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dAorLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3IKKy0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldCitkZHJlbTEwNyByZW1haW5kZXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMDggcmVtYWluZGVyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTA5IHJlbWFpbmRlciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExMCByZW1haW5kZXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTEgcmVtYWluZGVyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTEyIHJlbWFpbmRlciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExMyByZW1haW5kZXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTQgcmVtYWluZGVyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTE1IHJlbWFpbmRlciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExNiByZW1haW5kZXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTkgcmVtYWluZGVyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTIwIHJlbWFpbmRlciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEyMSByZW1haW5kZXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMjIgcmVtYWluZGVyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTIzIHJlbWFpbmRlciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEyNCByZW1haW5kZXIgMUUrMzg0ICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHplcm9zIG9uIGxlZnQKK2RkcmVtMTMwIHJlbWFpbmRlciAgMCAgICAgIDEgICAtPiAgMAorZGRyZW0xMzEgcmVtYWluZGVyICAwICAgICAtMSAgIC0+ICAwCitkZHJlbTEzMiByZW1haW5kZXIgIDAuMCAgICAxICAgLT4gIDAuMAorZGRyZW0xMzMgcmVtYWluZGVyICAwLjAgICAtMSAgIC0+ICAwLjAKK2RkcmVtMTM0IHJlbWFpbmRlciAtMCAgICAgIDEgICAtPiAtMAorZGRyZW0xMzUgcmVtYWluZGVyIC0wICAgICAtMSAgIC0+IC0wCitkZHJlbTEzNiByZW1haW5kZXIgLTAuMCAgICAxICAgLT4gLTAuMAorZGRyZW0xMzcgcmVtYWluZGVyIC0wLjAgICAtMSAgIC0+IC0wLjAKKworLS0gMC41ZXJzCitkZHJlbTE0MyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK2RkcmVtMTQ0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZGRyZW0xNDUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MAorZGRyZW0xNDYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK2RkcmVtMTQ3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2RkcmVtMTQ4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2RkcmVtMTQ5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKKy0tIHN0ZWFkaWVzCitkZHJlbTE1MCByZW1haW5kZXIgIDEgIDEgICAtPiAwCitkZHJlbTE1MSByZW1haW5kZXIgIDEgIDIgICAtPiAxCitkZHJlbTE1MiByZW1haW5kZXIgIDEgIDMgICAtPiAxCitkZHJlbTE1MyByZW1haW5kZXIgIDEgIDQgICAtPiAxCitkZHJlbTE1NCByZW1haW5kZXIgIDEgIDUgICAtPiAxCitkZHJlbTE1NSByZW1haW5kZXIgIDEgIDYgICAtPiAxCitkZHJlbTE1NiByZW1haW5kZXIgIDEgIDcgICAtPiAxCitkZHJlbTE1NyByZW1haW5kZXIgIDEgIDggICAtPiAxCitkZHJlbTE1OCByZW1haW5kZXIgIDEgIDkgICAtPiAxCitkZHJlbTE1OSByZW1haW5kZXIgIDEgIDEwICAtPiAxCitkZHJlbTE2MCByZW1haW5kZXIgIDEgIDEgICAtPiAwCitkZHJlbTE2MSByZW1haW5kZXIgIDIgIDEgICAtPiAwCitkZHJlbTE2MiByZW1haW5kZXIgIDMgIDEgICAtPiAwCitkZHJlbTE2MyByZW1haW5kZXIgIDQgIDEgICAtPiAwCitkZHJlbTE2NCByZW1haW5kZXIgIDUgIDEgICAtPiAwCitkZHJlbTE2NSByZW1haW5kZXIgIDYgIDEgICAtPiAwCitkZHJlbTE2NiByZW1haW5kZXIgIDcgIDEgICAtPiAwCitkZHJlbTE2NyByZW1haW5kZXIgIDggIDEgICAtPiAwCitkZHJlbTE2OCByZW1haW5kZXIgIDkgIDEgICAtPiAwCitkZHJlbTE2OSByZW1haW5kZXIgIDEwIDEgICAtPiAwCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyCitkZHJlbTE3MSByZW1haW5kZXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMAorZGRyZW0xNzIgcmVtYWluZGVyICAgMC41MCAxLjAyMCAtPiAgMC41MDAKK2RkcmVtMTczIHJlbWFpbmRlciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwCitkZHJlbTE3NCByZW1haW5kZXIgICAwLjUyIDEuMDIwIC0+ICAwLjUyMAorZGRyZW0xNzUgcmVtYWluZGVyICAgMC42ICAxLjAyMCAtPiAgMC42MDAKKworLS0gTW9yZSBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMAorZGRyZW0yMDEgcmVtYWluZGVyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMjAyIHJlbWFpbmRlciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTIwMyByZW1haW5kZXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0yMDQgcmVtYWluZGVyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0yMDUgcmVtYWluZGVyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0yMDYgcmVtYWluZGVyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0yMDcgcmVtYWluZGVyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0yMDggcmVtYWluZGVyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0yMDkgcmVtYWluZGVyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0yMTAgcmVtYWluZGVyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0yMTEgcmVtYWluZGVyIDFFKzM4MCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcgorZGRyZW0yMzEgcmVtYWluZGVyICAtMC40ICAxLjAyMCAtPiAtMC40MDAKK2RkcmVtMjMyIHJlbWFpbmRlciAgLTAuNTAgMS4wMjAgLT4gLTAuNTAwCitkZHJlbTIzMyByZW1haW5kZXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMAorZGRyZW0yMzQgcmVtYWluZGVyICAtMC41MiAxLjAyMCAtPiAtMC41MjAKK2RkcmVtMjM1IHJlbWFpbmRlciAgLTAuNiAgMS4wMjAgLT4gLTAuNjAwCisKKy0tIGhpZ2ggWHMKK2RkcmVtMjQwIHJlbWFpbmRlciAgMUUrMiAgMS4wMCAgLT4gIDAuMDAKKworLS0gZGRyZW0zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2RkcmVtMzAxIHJlbWFpbmRlciAgIDEgICAgMyAgICAgLT4gIDEKK2RkcmVtMzAyIHJlbWFpbmRlciAgIDUgICAgNSAgICAgLT4gIDAKK2RkcmVtMzAzIHJlbWFpbmRlciAgIDEzICAgMTAgICAgLT4gIDMKK2RkcmVtMzA0IHJlbWFpbmRlciAgIDEzICAgNTAgICAgLT4gIDEzCitkZHJlbTMwNSByZW1haW5kZXIgICAxMyAgIDEwMCAgIC0+ICAxMworZGRyZW0zMDYgcmVtYWluZGVyICAgMTMgICAxMDAwICAtPiAgMTMKK2RkcmVtMzA3IHJlbWFpbmRlciAgIC4xMyAgICAxICAgLT4gIDAuMTMKK2RkcmVtMzA4IHJlbWFpbmRlciAgIDAuMTMzICAxICAgLT4gIDAuMTMzCitkZHJlbTMwOSByZW1haW5kZXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMKK2RkcmVtMzEwIHJlbWFpbmRlciAgIDEuMDMzICAxICAgLT4gIDAuMDMzCitkZHJlbTMxMSByZW1haW5kZXIgICAxMC4zMyAgMSAgIC0+ICAwLjMzCitkZHJlbTMxMiByZW1haW5kZXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzCitkZHJlbTMxMyByZW1haW5kZXIgICAxMDMuMyAgMSAgIC0+ICAwLjMKK2RkcmVtMzE0IHJlbWFpbmRlciAgIDEzMyAgIDEwICAgLT4gIDMKK2RkcmVtMzE1IHJlbWFpbmRlciAgIDEwMzMgIDEwICAgLT4gIDMKK2RkcmVtMzE2IHJlbWFpbmRlciAgIDEwMzMgIDUwICAgLT4gIDMzCitkZHJlbTMxNyByZW1haW5kZXIgICAxMDEuMCAgMyAgIC0+ICAyLjAKK2RkcmVtMzE4IHJlbWFpbmRlciAgIDEwMi4wICAzICAgLT4gIDAuMAorZGRyZW0zMTkgcmVtYWluZGVyICAgMTAzLjAgIDMgICAtPiAgMS4wCitkZHJlbTMyMCByZW1haW5kZXIgICAyLjQwICAgMSAgIC0+ICAwLjQwCitkZHJlbTMyMSByZW1haW5kZXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMAorZGRyZW0zMjIgcmVtYWluZGVyICAgMi40ICAgIDEgICAtPiAgMC40CitkZHJlbTMyMyByZW1haW5kZXIgICAyLjQgICAgMiAgIC0+ICAwLjQKK2RkcmVtMzI0IHJlbWFpbmRlciAgIDIuNDAwICAyICAgLT4gIDAuNDAwCitkZHJlbTMyNSByZW1haW5kZXIgICAxICAgMC4zICAgIC0+ICAwLjEKK2RkcmVtMzI2IHJlbWFpbmRlciAgIDEgICAwLjMwICAgLT4gIDAuMTAKK2RkcmVtMzI3IHJlbWFpbmRlciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwCitkZHJlbTMyOCByZW1haW5kZXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDAKK2RkcmVtMzI5IHJlbWFpbmRlciAgIDEuMCAgICAwLjMgLT4gIDAuMQorZGRyZW0zMzAgcmVtYWluZGVyICAgMS4wMCAgIDAuMyAtPiAgMC4xMAorZGRyZW0zMzEgcmVtYWluZGVyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDAKK2RkcmVtMzMyIHJlbWFpbmRlciAgIDEuMDAwMCAwLjMgLT4gIDAuMTAwMAorZGRyZW0zMzMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41CitkZHJlbTMzNCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK2RkcmVtMzM1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2RkcmVtMzM2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkZHJlbTMzNyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCitkZHJlbTMzOCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkZHJlbTMzOSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCitkZHJlbTM0MCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIDAuNTAwMDAwMAorZGRyZW0zNDEgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMAorZGRyZW0zNDIgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwCitkZHJlbTM0MyByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwMAorZGRyZW0zNDQgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwMAorZGRyZW0zNDUgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5ICAgIC0+ICAxRS03CitkZHJlbTM0NiByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04CitkZHJlbTM0NyByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQorZGRyZW0zNDggcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5ICAgIC0+ICAxRS0xMAorZGRyZW0zNDkgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTEKK2RkcmVtMzUwIHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMgorCitkZHJlbTM1MSByZW1haW5kZXIgICAwLjAzICA3ICAtPiAgMC4wMworZGRyZW0zNTIgcmVtYWluZGVyICAgNSAgIDIgICAgLT4gIDEKK2RkcmVtMzUzIHJlbWFpbmRlciAgIDQuMSAgIDIgICAgLT4gIDAuMQorZGRyZW0zNTQgcmVtYWluZGVyICAgNC4wMSAgIDIgICAgLT4gIDAuMDEKK2RkcmVtMzU1IHJlbWFpbmRlciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDEKK2RkcmVtMzU2IHJlbWFpbmRlciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQorZGRyZW0zNTcgcmVtYWluZGVyICAgNC4wMDAwMSAgIDIgICAgLT4gIDAuMDAwMDEKK2RkcmVtMzU4IHJlbWFpbmRlciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDEKK2RkcmVtMzU5IHJlbWFpbmRlciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcKKworZGRyZW0zNjAgcmVtYWluZGVyICAgMS4yICAgMC43MzQ1IC0+ICAwLjQ2NTUKK2RkcmVtMzYxIHJlbWFpbmRlciAgIDAuOCAgIDEyICAgICAtPiAgMC44CitkZHJlbTM2MiByZW1haW5kZXIgICAwLjggICAwLjIgICAgLT4gIDAuMAorZGRyZW0zNjMgcmVtYWluZGVyICAgMC44ICAgMC4zICAgIC0+ICAwLjIKK2RkcmVtMzY0IHJlbWFpbmRlciAgIDAuODAwICAgMTIgICAtPiAgMC44MDAKK2RkcmVtMzY1IHJlbWFpbmRlciAgIDAuODAwICAgMS43ICAtPiAgMC44MDAKK2RkcmVtMzY2IHJlbWFpbmRlciAgIDIuNDAwICAgMiAgICAtPiAgMC40MDAKKworZGRyZW0zNzEgcmVtYWluZGVyICAgMi40MDAgIDIgICAgICAgIC0+ICAwLjQwMAorCitkZHJlbTM4MSByZW1haW5kZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMAorZGRyZW0zODIgcmVtYWluZGVyIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDAuNzY1NworZGRyZW0zODMgcmVtYWluZGVyIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDAuNjY4CitkZHJlbTM4NCByZW1haW5kZXIgMTIzNDUgIDEuMDEgICAgICAtPiAgMC43OAorZGRyZW0zODUgcmVtYWluZGVyIDEyMzQ1ICAxLjEgICAgICAgLT4gIDAuOAorZGRyZW0zODYgcmVtYWluZGVyIDEyMzU1ICA0ICAgICAgICAgLT4gIDMKK2RkcmVtMzg3IHJlbWFpbmRlciAxMjM0NSAgNCAgICAgICAgIC0+ICAxCitkZHJlbTM4OCByZW1haW5kZXIgMTIzNTUgIDQuMDAwMSAgICAtPiAgMi42OTEyCitkZHJlbTM4OSByZW1haW5kZXIgMTIzNDUgIDQuMDAwMSAgICAtPiAgMC42OTE0CitkZHJlbTM5MCByZW1haW5kZXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45CitkZHJlbTM5MSByZW1haW5kZXIgMTIzNDUgIDQuOTkgICAgICAtPiAgNC43MworZGRyZW0zOTIgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDIuNDY5CitkZHJlbTM5MyByZW1haW5kZXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5CitkZHJlbTM5NCByZW1haW5kZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMAorZGRyZW0zOTUgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDQuNzUzMgorZGRyZW0zOTYgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDIuNTMyCitkZHJlbTM5NyByZW1haW5kZXIgMTIzNDUgIDUuMDEgICAgICAtPiAgMC4zNgorZGRyZW0zOTggcmVtYWluZGVyIDEyMzQ1ICA1LjEgICAgICAgLT4gIDMuMAorCistLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcworZGRyZW00MDEgcmVtYWluZGVyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUKK2RkcmVtNDAyIHJlbWFpbmRlciAgIDAuNTUgICAgICAgIDEgICAtPiAgMC41NQorZGRyZW00MDMgcmVtYWluZGVyICAgMC41NTUgICAgICAgMSAgIC0+ICAwLjU1NQorZGRyZW00MDQgcmVtYWluZGVyICAgMC41NTU1ICAgICAgMSAgIC0+ICAwLjU1NTUKK2RkcmVtNDA1IHJlbWFpbmRlciAgIDAuNTU1NTUgICAgIDEgICAtPiAgMC41NTU1NQorZGRyZW00MDYgcmVtYWluZGVyICAgMC41NTU1NTUgICAgMSAgIC0+ICAwLjU1NTU1NQorZGRyZW00MDcgcmVtYWluZGVyICAgMC41NTU1NTU1ICAgMSAgIC0+ICAwLjU1NTU1NTUKK2RkcmVtNDA4IHJlbWFpbmRlciAgIDAuNTU1NTU1NTUgIDEgICAtPiAgMC41NTU1NTU1NQorZGRyZW00MDkgcmVtYWluZGVyICAgMC41NTU1NTU1NTUgMSAgIC0+ICAwLjU1NTU1NTU1NQorCistLSBmb2xkZG93bnMKK2RkcmVtNDIxIHJlbWFpbmRlciAgIDFFKzM4NCAgICAgICAxICAtPiAgIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJlbTQyMiByZW1haW5kZXIgICAxRSszODQgIDFFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAorZGRyZW00MjMgcmVtYWluZGVyICAgMUUrMzg0ICAyRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQKK2RkcmVtNDI0IHJlbWFpbmRlciAgIDFFKzM4NCAgM0UrMzgzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJlbTQyNSByZW1haW5kZXIgICAxRSszODQgIDRFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRyZW00MjYgcmVtYWluZGVyICAgMUUrMzg0ICA1RSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQKK2RkcmVtNDI3IHJlbWFpbmRlciAgIDFFKzM4NCAgNkUrMzgzICAtPiAgIDQuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJlbTQyOCByZW1haW5kZXIgICAxRSszODQgIDdFKzM4MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRyZW00MjkgcmVtYWluZGVyICAgMUUrMzg0ICA4RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2RkcmVtNDMwIHJlbWFpbmRlciAgIDFFKzM4NCAgOUUrMzgzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCistLSB0aW5pZXMKK2RkcmVtNDMxIHJlbWFpbmRlciAgIDFFLTM5NyAgMUUtMzk4ICAtPiAgIDBFLTM5OAorZGRyZW00MzIgcmVtYWluZGVyICAgMUUtMzk3ICAyRS0zOTggIC0+ICAgMEUtMzk4CitkZHJlbTQzMyByZW1haW5kZXIgICAxRS0zOTcgIDNFLTM5OCAgLT4gICAxRS0zOTggU3Vibm9ybWFsCitkZHJlbTQzNCByZW1haW5kZXIgICAxRS0zOTcgIDRFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsCitkZHJlbTQzNSByZW1haW5kZXIgICAxRS0zOTcgIDVFLTM5OCAgLT4gICAwRS0zOTgKK2RkcmVtNDM2IHJlbWFpbmRlciAgIDFFLTM5NyAgNkUtMzk4ICAtPiAgIDRFLTM5OCBTdWJub3JtYWwKK2RkcmVtNDM3IHJlbWFpbmRlciAgIDFFLTM5NyAgN0UtMzk4ICAtPiAgIDNFLTM5OCBTdWJub3JtYWwKK2RkcmVtNDM4IHJlbWFpbmRlciAgIDFFLTM5NyAgOEUtMzk4ICAtPiAgIDJFLTM5OCBTdWJub3JtYWwKK2RkcmVtNDM5IHJlbWFpbmRlciAgIDFFLTM5NyAgOUUtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwKK2RkcmVtNDQwIHJlbWFpbmRlciAgIDFFLTM5NyAxMEUtMzk4ICAtPiAgIDBFLTM5OAorZGRyZW00NDEgcmVtYWluZGVyICAgMUUtMzk3IDExRS0zOTggIC0+IDEuMEUtMzk3IFN1Ym5vcm1hbAorZGRyZW00NDIgcmVtYWluZGVyIDEwMEUtMzk3IDExRS0zOTggIC0+IDEuMEUtMzk3IFN1Ym5vcm1hbAorZGRyZW00NDMgcmVtYWluZGVyIDEwMEUtMzk3IDIwRS0zOTggIC0+ICAgMEUtMzk4CitkZHJlbTQ0NCByZW1haW5kZXIgMTAwRS0zOTcgMjFFLTM5OCAgLT4gMS4zRS0zOTcgU3Vibm9ybWFsCitkZHJlbTQ0NSByZW1haW5kZXIgMTAwRS0zOTcgMzBFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsCisKKy0tIHplcm8gc2lnbnMKK2RkcmVtNjUwIHJlbWFpbmRlciAgMSAgMSAtPiAgMAorZGRyZW02NTEgcmVtYWluZGVyIC0xICAxIC0+IC0wCitkZHJlbTY1MiByZW1haW5kZXIgIDEgLTEgLT4gIDAKK2RkcmVtNjUzIHJlbWFpbmRlciAtMSAtMSAtPiAtMAorZGRyZW02NTQgcmVtYWluZGVyICAwICAxIC0+ICAwCitkZHJlbTY1NSByZW1haW5kZXIgLTAgIDEgLT4gLTAKK2RkcmVtNjU2IHJlbWFpbmRlciAgMCAtMSAtPiAgMAorZGRyZW02NTcgcmVtYWluZGVyIC0wIC0xIC0+IC0wCitkZHJlbTY1OCByZW1haW5kZXIgIDAuMDAgIDEgIC0+ICAwLjAwCitkZHJlbTY1OSByZW1haW5kZXIgLTAuMDAgIDEgIC0+IC0wLjAwCisKKy0tIFNwZWNpYWxzCitkZHJlbTY4MCByZW1haW5kZXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjgxIHJlbWFpbmRlciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODIgcmVtYWluZGVyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4MyByZW1haW5kZXIgIEluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjg0IHJlbWFpbmRlciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODUgcmVtYWluZGVyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4NiByZW1haW5kZXIgIEluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjg3IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODggcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZGRyZW02ODkgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY5MSByZW1haW5kZXIgLTEgICAgIEluZiAgIC0+IC0xCitkZHJlbTY5MiByZW1haW5kZXIgIDAgICAgIEluZiAgIC0+ICAwCitkZHJlbTY5MyByZW1haW5kZXIgLTAgICAgIEluZiAgIC0+IC0wCitkZHJlbTY5NCByZW1haW5kZXIgIDEgICAgIEluZiAgIC0+ICAxCitkZHJlbTY5NSByZW1haW5kZXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkZHJlbTY5NiByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRyZW03MDAgcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwMSByZW1haW5kZXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzAyIHJlbWFpbmRlciAtSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDMgcmVtYWluZGVyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwNCByZW1haW5kZXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzA1IHJlbWFpbmRlciAtSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDYgcmVtYWluZGVyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwNyByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzA4IHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDkgcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZGRyZW03MTAgcmVtYWluZGVyIC0xICAgIC1JbmYgICAtPiAtMQorZGRyZW03MTEgcmVtYWluZGVyIC0wICAgIC1JbmYgICAtPiAtMAorZGRyZW03MTIgcmVtYWluZGVyICAwICAgIC1JbmYgICAtPiAgMAorZGRyZW03MTMgcmVtYWluZGVyICAxICAgIC1JbmYgICAtPiAgMQorZGRyZW03MTQgcmVtYWluZGVyICAxMDAwIC1JbmYgICAtPiAgMTAwMAorZGRyZW03MTUgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkcmVtNzIxIHJlbWFpbmRlciAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRyZW03MjIgcmVtYWluZGVyICBOYU4gLTEwMDAgICAtPiAgTmFOCitkZHJlbTcyMyByZW1haW5kZXIgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RkcmVtNzI0IHJlbWFpbmRlciAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRyZW03MjUgcmVtYWluZGVyIC1OYU4gIDAgICAgICAtPiAtTmFOCitkZHJlbTcyNiByZW1haW5kZXIgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RkcmVtNzI3IHJlbWFpbmRlciAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRyZW03MjggcmVtYWluZGVyICBOYU4gIEluZiAgICAtPiAgTmFOCitkZHJlbTcyOSByZW1haW5kZXIgIE5hTiAtTmFOICAgIC0+ICBOYU4KK2RkcmVtNzMwIHJlbWFpbmRlciAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRyZW03MzEgcmVtYWluZGVyIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkZHJlbTczMiByZW1haW5kZXIgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RkcmVtNzMzIHJlbWFpbmRlciAtMCAgIC1OYU4gICAgLT4gLU5hTgorZGRyZW03MzQgcmVtYWluZGVyICAwICAgIE5hTiAgICAtPiAgTmFOCitkZHJlbTczNSByZW1haW5kZXIgIDEgICAtTmFOICAgIC0+IC1OYU4KK2RkcmVtNzM2IHJlbWFpbmRlciAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRyZW03MzcgcmVtYWluZGVyICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RkcmVtNzQxIHJlbWFpbmRlciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzQyIHJlbWFpbmRlciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzQzIHJlbWFpbmRlciAtc05hTiAtMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzQ0IHJlbWFpbmRlciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzQ1IHJlbWFpbmRlciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzQ2IHJlbWFpbmRlciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzQ3IHJlbWFpbmRlciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzQ5IHJlbWFpbmRlciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzUwIHJlbWFpbmRlciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzUxIHJlbWFpbmRlciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzUyIHJlbWFpbmRlciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzUzIHJlbWFpbmRlciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzU0IHJlbWFpbmRlciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzU1IHJlbWFpbmRlciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzU2IHJlbWFpbmRlciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzU3IHJlbWFpbmRlciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzU4IHJlbWFpbmRlciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzU5IHJlbWFpbmRlciAgSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnaW5nIE5hTnMKK2RkcmVtNzYwIHJlbWFpbmRlciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQorZGRyZW03NjEgcmVtYWluZGVyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc2MiByZW1haW5kZXIgIE5hTjMgIHNOYU45ICAgLT4gIE5hTjkgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzYzIHJlbWFpbmRlciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NjQgcmVtYWluZGVyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQorZGRyZW03NjUgcmVtYWluZGVyICBOYU42ICAgTmFOMTIgIC0+ICBOYU42CitkZHJlbTc2NiByZW1haW5kZXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzCitkZHJlbTc2NyByZW1haW5kZXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0CitkZHJlbTc2OCByZW1haW5kZXIgICAgMCAgICBOYU4xNSAgLT4gIE5hTjE1CitkZHJlbTc2OSByZW1haW5kZXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2CisKKy0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQorZGRyZW03NzAgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gIDYKK2RkcmVtNzcxICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAxICAgIC0+ICAwCitkZHJlbTc3MiAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkcmVtNzczICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCitkZHJlbTgwMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK2RkcmVtODAyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZGRyZW04MDMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkZHJlbTgwNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK2RkcmVtODA1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZGRyZW04MDYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkZHJlbTgwNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK2RkcmVtODA4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRyZW04MDkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkZHJlbTgxMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RkcmVtODExIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNgorZGRyZW04MTIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKK2RkcmVtODIxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZGRyZW04MjIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkZHJlbTgyMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKK2RkcmVtODI0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZGRyZW04MjUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkZHJlbTgyNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKK2RkcmVtODI3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZGRyZW04MjggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkZHJlbTgyOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKK2RkcmVtODMwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZGRyZW04MzEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2CitkZHJlbTgzMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBkaXZpZGVpbnQKK2RkcmVtODQwIHJlbWFpbmRlciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wCitkZHJlbTg0MSByZW1haW5kZXIgIDEwMDAwMDAwMC40ICAgMSAgLT4gIDAuNAorZGRyZW04NDIgcmVtYWluZGVyICAxMDAwMDAwMDAuNSAgIDEgIC0+ICAwLjUKK2RkcmVtODQzIHJlbWFpbmRlciAgMTAwMDAwMDAwLjkgICAxICAtPiAgMC45CitkZHJlbTg0NCByZW1haW5kZXIgIDEwMDAwMDAwMC45OTkgMSAgLT4gIDAuOTk5CitkZHJlbTg1MCByZW1haW5kZXIgIDEwMDAwMDAwMyAgICAgNSAgLT4gIDMKK2RkcmVtODUxIHJlbWFpbmRlciAgMTAwMDAwMDMgICAgICA1ICAtPiAgMworZGRyZW04NTIgcmVtYWluZGVyICAxMDAwMDAzICAgICAgIDUgIC0+ICAzCitkZHJlbTg1MyByZW1haW5kZXIgIDEwMDAwMyAgICAgICAgNSAgLT4gIDMKK2RkcmVtODU0IHJlbWFpbmRlciAgMTAwMDMgICAgICAgICA1ICAtPiAgMworZGRyZW04NTUgcmVtYWluZGVyICAxMDAzICAgICAgICAgIDUgIC0+ICAzCitkZHJlbTg1NiByZW1haW5kZXIgIDEwMyAgICAgICAgICAgNSAgLT4gIDMKK2RkcmVtODU3IHJlbWFpbmRlciAgMTMgICAgICAgICAgICA1ICAtPiAgMworZGRyZW04NTggcmVtYWluZGVyICAxICAgICAgICAgICAgIDUgIC0+ICAxCisKKy0tIFZsYWRpbWlyJ3MgY2FzZXMgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZHJlbTg2MCByZW1haW5kZXIgMTIzLjBlMSAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJlbTg2MSByZW1haW5kZXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJlbTg2MiByZW1haW5kZXIgMTIuM2UyICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJlbTg2MyByZW1haW5kZXIgMS4yM2UzICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJlbTg2NCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJlbTg3MCByZW1haW5kZXIgMTIzZTEgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg3MSByZW1haW5kZXIgMTIzZTEgICAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg3MiByZW1haW5kZXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg3MyByZW1haW5kZXIgMTIzZTEgICAgICAgMTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg3NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDEwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg3NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg3NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMTAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg3NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg3OCByZW1haW5kZXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg3OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAxMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg4MCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMTAwMDAwMCAtPiAxMjMwCitkZHJlbTg4MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwCitkZHJlbTg4MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAxMDAwMCAtPiAxMjMwCitkZHJlbTg4MyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMTAwMCAtPiAgMjMwCitkZHJlbTg4NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwCitkZHJlbTg4NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAxMCAtPiAgICAwCitkZHJlbTg4NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMSAtPiAgICAwCisKK2RkcmVtODkwIHJlbWFpbmRlciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODkxIHJlbWFpbmRlciAxMjNlMSAgICAgMjAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODkyIHJlbWFpbmRlciAxMjNlMSAgICAgIDIwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODkzIHJlbWFpbmRlciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODk0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMjAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODk1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDIwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODk2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODk3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMjAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODk5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDIwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTAwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTAxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgMjAwMDAwIC0+IDEyMzAKK2RkcmVtOTAyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDIwMDAwIC0+IDEyMzAKK2RkcmVtOTAzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IDEyMzAKK2RkcmVtOTA0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgMjAwIC0+ICAgMzAKK2RkcmVtOTA1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDIwIC0+ICAgMTAKK2RkcmVtOTA2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDAKKworZGRyZW05MTAgcmVtYWluZGVyIDEyM2UxICAgIDUwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MTEgcmVtYWluZGVyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MTIgcmVtYWluZGVyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDUwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MTQgcmVtYWluZGVyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MTUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDUwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MTkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMAorZGRyZW05MjAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDUwMDAwMDAgLT4gMTIzMAorZGRyZW05MjEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMAorZGRyZW05MjIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMAorZGRyZW05MjMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDUwMDAgLT4gMTIzMAorZGRyZW05MjQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMAorZGRyZW05MjUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gICAzMAorZGRyZW05MjYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDUgLT4gICAgMAorCitkZHJlbTkzMCByZW1haW5kZXIgMTIzZTEgICAgOTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkzMSByZW1haW5kZXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkzMiByZW1haW5kZXIgMTIzZTEgICAgICA5MDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkzMyByZW1haW5kZXIgMTIzZTEgICAgICAgOTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkzNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkzNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA5MDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkzNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgOTAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkzNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkzOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA5MDAwMDAwMCAtPiAxMjMwCitkZHJlbTk0MCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgOTAwMDAwMCAtPiAxMjMwCitkZHJlbTk0MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwCitkZHJlbTk0MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA5MDAwMCAtPiAxMjMwCitkZHJlbTk0MyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgOTAwMCAtPiAxMjMwCitkZHJlbTk0NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwCitkZHJlbTk0NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA5MCAtPiAgIDYwCitkZHJlbTk0NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgOSAtPiAgICA2CisKK2RkcmVtOTUwIHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05NjEgcmVtYWluZGVyIDEyM2UxICAgMjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2MiByZW1haW5kZXIgMTIzZTEgICAzOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTYzIHJlbWFpbmRlciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjQgcmVtYWluZGVyIDEyM2UxICAgNTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2NSByZW1haW5kZXIgMTIzZTEgICA2OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTY2IHJlbWFpbmRlciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjcgcmVtYWluZGVyIDEyM2UxICAgODk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2OCByZW1haW5kZXIgMTIzZTEgICA5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTY5IHJlbWFpbmRlciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMAorCitkZHJlbTk4MCByZW1haW5kZXIgMTIzZTEgMTAwMEUyOTkgLT4gMS4yM0UrMyAgLS0gMTIzRSsxIGludGVybmFsbHkKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCitkZHJlbTEwNTEgcmVtYWluZGVyICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkcmVtMTA1MiByZW1haW5kZXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRyZW0xMDUzIHJlbWFpbmRlciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJlbTEwNTQgcmVtYWluZGVyIC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkcmVtMTA1NSByZW1haW5kZXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcKK2RkcmVtMTA1NiByZW1haW5kZXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcKK2RkcmVtMTA1NyByZW1haW5kZXIgLTFlLTI3NyAgMWUrMzExIC0+IC0xRS0yNzcKK2RkcmVtMTA1OCByZW1haW5kZXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcKKworLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QKK2RkcmVtMTEwMSByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgMC43NjU0MzIxMDk4NzY1NDYKK2RkcmVtMTEwMiByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAxLjAwMDAwMDAwMDAwMDAxICAtPiAgIDAuNjU0MzIxMDk4NzY1NTcKK2RkcmVtMTEwMyByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAgMS4wMDAwMDAwMDAwMDAxICAtPiAgICAwLjU0MzIxMDk4NzY2NjgKK2RkcmVtMTEwNCByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTUgIDQuMDAwMDAwMDAwMDAwMDAxICAtPiAgMi42OTEzNTgwMjc0NjkxMzcKK2RkcmVtMTEwNSByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDQuMDAwMDAwMDAwMDAwMDAxICAtPiAgMy42OTEzNTgwMjc0NjkxMzcKK2RkcmVtMTEwNiByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAgNC45OTk5OTk5OTk5OTk5ICAtPiAgICAwLjY5MTM1NzgwMjQ2OTYKK2RkcmVtMTEwNyByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA0Ljk5OTk5OTk5OTk5OTk5ICAtPiAgIDMuNDY5MTM1NzgwMjQ2OTEKK2RkcmVtMTEwOCByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDQuOTk5OTk5OTk5OTk5OTk5ICAtPiAgMS4yNDY5MTM1NzgwMjQ2OTEKK2RkcmVtMTEwOSByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDUuMDAwMDAwMDAwMDAwMDAxICAtPiAgMC43NTMwODY0MjE5NzUzMDkKK2RkcmVtMTExMCByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA1LjAwMDAwMDAwMDAwMDAxICAtPiAgIDMuNTMwODY0MjE5NzUzMTAKK2RkcmVtMTExMSByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAgNS4wMDAwMDAwMDAwMDAxICAtPiAgICAxLjMwODY0MjE5NzUzMTQKKworLS0gTnVsbCB0ZXN0cworZGRyZW0xMDAwIHJlbWFpbmRlciAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTAwMSByZW1haW5kZXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXJOZWFyLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyTmVhci5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYTlhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyTmVhci5kZWNUZXN0CkBAIC0wLDAgKzEsNjI5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkUmVtYWluZGVyTmVhci5kZWNUZXN0IC0tIGRlY0RvdWJsZSByZW1haW5kZXItbmVhciAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQorZGRybW4wMDEgcmVtYWluZGVybmVhciAgMSAgICAgMSAgICAtPiAgMAorZGRybW4wMDIgcmVtYWluZGVybmVhciAgMiAgICAgMSAgICAtPiAgMAorZGRybW4wMDMgcmVtYWluZGVybmVhciAgMSAgICAgMiAgICAtPiAgMQorZGRybW4wMDQgcmVtYWluZGVybmVhciAgMiAgICAgMiAgICAtPiAgMAorZGRybW4wMDUgcmVtYWluZGVybmVhciAgMCAgICAgMSAgICAtPiAgMAorZGRybW4wMDYgcmVtYWluZGVybmVhciAgMCAgICAgMiAgICAtPiAgMAorZGRybW4wMDcgcmVtYWluZGVybmVhciAgMSAgICAgMyAgICAtPiAgMQorZGRybW4wMDggcmVtYWluZGVybmVhciAgMiAgICAgMyAgICAtPiAtMQorZGRybW4wMDkgcmVtYWluZGVybmVhciAgMyAgICAgMyAgICAtPiAgMAorCitkZHJtbjAxMCByZW1haW5kZXJuZWFyICAyLjQgICAxICAgIC0+ICAwLjQKK2Rkcm1uMDExIHJlbWFpbmRlcm5lYXIgIDIuNCAgIC0xICAgLT4gIDAuNAorZGRybW4wMTIgcmVtYWluZGVybmVhciAgLTIuNCAgMSAgICAtPiAgLTAuNAorZGRybW4wMTMgcmVtYWluZGVybmVhciAgLTIuNCAgLTEgICAtPiAgLTAuNAorZGRybW4wMTQgcmVtYWluZGVybmVhciAgMi40MCAgMSAgICAtPiAgMC40MAorZGRybW4wMTUgcmVtYWluZGVybmVhciAgMi40MDAgMSAgICAtPiAgMC40MDAKK2Rkcm1uMDE2IHJlbWFpbmRlcm5lYXIgIDIuNCAgIDIgICAgLT4gIDAuNAorZGRybW4wMTcgcmVtYWluZGVybmVhciAgMi40MDAgMiAgICAtPiAgMC40MDAKK2Rkcm1uMDE4IHJlbWFpbmRlcm5lYXIgIDIuICAgIDIgICAgLT4gIDAKK2Rkcm1uMDE5IHJlbWFpbmRlcm5lYXIgIDIwICAgIDIwICAgLT4gIDAKKworZGRybW4wMjAgcmVtYWluZGVybmVhciAgMTg3ICAgMTg3ICAgIC0+ICAwCitkZHJtbjAyMSByZW1haW5kZXJuZWFyICA1ICAgICAyICAgICAgLT4gIDEKK2Rkcm1uMDIyIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIuMCAgICAtPiAgMS4wCitkZHJtbjAyMyByZW1haW5kZXJuZWFyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwCitkZHJtbjAyNCByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCitkZHJtbjAyNSByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCisKK2Rkcm1uMDMwIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgICAtPiAgMQorZGRybW4wMzEgcmVtYWluZGVybmVhciAgMSAgICAgNCAgICAgIC0+ICAxCitkZHJtbjAzMiByZW1haW5kZXJuZWFyICAxICAgICA4ICAgICAgLT4gIDEKKworZGRybW4wMzMgcmVtYWluZGVybmVhciAgMSAgICAgMTYgICAgIC0+ICAxCitkZHJtbjAzNCByZW1haW5kZXJuZWFyICAxICAgICAzMiAgICAgLT4gIDEKK2Rkcm1uMDM1IHJlbWFpbmRlcm5lYXIgIDEgICAgIDY0ICAgICAtPiAgMQorZGRybW4wNDAgcmVtYWluZGVybmVhciAgMSAgICAtMiAgICAgIC0+ICAxCitkZHJtbjA0MSByZW1haW5kZXJuZWFyICAxICAgIC00ICAgICAgLT4gIDEKK2Rkcm1uMDQyIHJlbWFpbmRlcm5lYXIgIDEgICAgLTggICAgICAtPiAgMQorZGRybW4wNDMgcmVtYWluZGVybmVhciAgMSAgICAtMTYgICAgIC0+ICAxCitkZHJtbjA0NCByZW1haW5kZXJuZWFyICAxICAgIC0zMiAgICAgLT4gIDEKK2Rkcm1uMDQ1IHJlbWFpbmRlcm5lYXIgIDEgICAgLTY0ICAgICAtPiAgMQorZGRybW4wNTAgcmVtYWluZGVybmVhciAtMSAgICAgMiAgICAgIC0+ICAtMQorZGRybW4wNTEgcmVtYWluZGVybmVhciAtMSAgICAgNCAgICAgIC0+ICAtMQorZGRybW4wNTIgcmVtYWluZGVybmVhciAtMSAgICAgOCAgICAgIC0+ICAtMQorZGRybW4wNTMgcmVtYWluZGVybmVhciAtMSAgICAgMTYgICAgIC0+ICAtMQorZGRybW4wNTQgcmVtYWluZGVybmVhciAtMSAgICAgMzIgICAgIC0+ICAtMQorZGRybW4wNTUgcmVtYWluZGVybmVhciAtMSAgICAgNjQgICAgIC0+ICAtMQorZGRybW4wNjAgcmVtYWluZGVybmVhciAtMSAgICAtMiAgICAgIC0+ICAtMQorZGRybW4wNjEgcmVtYWluZGVybmVhciAtMSAgICAtNCAgICAgIC0+ICAtMQorZGRybW4wNjIgcmVtYWluZGVybmVhciAtMSAgICAtOCAgICAgIC0+ICAtMQorZGRybW4wNjMgcmVtYWluZGVybmVhciAtMSAgICAtMTYgICAgIC0+ICAtMQorZGRybW4wNjQgcmVtYWluZGVybmVhciAtMSAgICAtMzIgICAgIC0+ICAtMQorZGRybW4wNjUgcmVtYWluZGVybmVhciAtMSAgICAtNjQgICAgIC0+ICAtMQorCitkZHJtbjA2NiByZW1haW5kZXJuZWFyICAgICAgICAgIDkuOSAgIDEgIC0+IC0wLjEKK2Rkcm1uMDY3IHJlbWFpbmRlcm5lYXIgICAgICAgICA5OS43ICAgMSAgLT4gLTAuMworZGRybW4wNjggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCitkZHJtbjA2OSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNAorZGRybW4wNzAgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjUgICAxICAtPiAtMC41CitkZHJtbjA3MSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOSAgIDEgIC0+IC0wLjEKK2Rkcm1uMDcyIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gLTAuMDAxCitkZHJtbjA3MyByZW1haW5kZXJuZWFyICA5OTk5OTkuOTk5OTk5IDEgIC0+IC0wLjAwMDAwMQorZGRybW4wNzQgcmVtYWluZGVybmVhciAgOSAgICAgICAgICAgICAxICAtPiAwCitkZHJtbjA3NSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDAKK2Rkcm1uMDc2IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMiAgLT4gLTEKK2Rkcm1uMDc3IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMyAgLT4gMAorZGRybW4wNzggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSA0ICAtPiAtMQorCitkZHJtbjA4MCByZW1haW5kZXJuZWFyICAwLiAgICAgICAgICAgIDEgIC0+IDAKK2Rkcm1uMDgxIHJlbWFpbmRlcm5lYXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wCitkZHJtbjA4MiByZW1haW5kZXJuZWFyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDAKK2Rkcm1uMDgzIHJlbWFpbmRlcm5lYXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMAorZGRybW4wODQgcmVtYWluZGVybmVhciAgMC4wMEUrMyAgICAgICAxICAtPiAwCitkZHJtbjA4NSByZW1haW5kZXJuZWFyICAwLjAwRSsyICAgICAgIDEgIC0+IDAKK2Rkcm1uMDg2IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wCitkZHJtbjA4NyByZW1haW5kZXJuZWFyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDAKK2Rkcm1uMDg4IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMAorZGRybW4wODkgcmVtYWluZGVybmVhciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMAorZGRybW4wOTAgcmVtYWluZGVybmVhciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDAKK2Rkcm1uMDkxIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMAorZGRybW4wOTIgcmVtYWluZGVybmVhciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMAorZGRybW4wOTMgcmVtYWluZGVybmVhciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03CitkZHJtbjA5NCByZW1haW5kZXJuZWFyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgKK2Rkcm1uMDk1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDAKK2Rkcm1uMTAxIHJlbWFpbmRlcm5lYXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTAyIHJlbWFpbmRlcm5lYXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTAzIHJlbWFpbmRlcm5lYXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTA0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTA1IHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMTA2IHJlbWFpbmRlcm5lYXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKy0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dAorLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3IKKy0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldCitkZHJtbjEwNyByZW1haW5kZXJuZWFyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTA4IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMDkgcmVtYWluZGVybmVhciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExMCByZW1haW5kZXJuZWFyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTExIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTIgcmVtYWluZGVybmVhciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExMyByZW1haW5kZXJuZWFyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTE0IHJlbWFpbmRlcm5lYXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTUgcmVtYWluZGVybmVhciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExNiByZW1haW5kZXJuZWFyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTE5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMjAgcmVtYWluZGVybmVhciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEyMSByZW1haW5kZXJuZWFyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTIyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMjMgcmVtYWluZGVybmVhciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEyNCByZW1haW5kZXJuZWFyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB6ZXJvcyBvbiBsZWZ0CitkZHJtbjEzMCByZW1haW5kZXJuZWFyICAwICAgICAgMSAgIC0+ICAwCitkZHJtbjEzMSByZW1haW5kZXJuZWFyICAwICAgICAtMSAgIC0+ICAwCitkZHJtbjEzMiByZW1haW5kZXJuZWFyICAwLjAgICAgMSAgIC0+ICAwLjAKK2Rkcm1uMTMzIHJlbWFpbmRlcm5lYXIgIDAuMCAgIC0xICAgLT4gIDAuMAorZGRybW4xMzQgcmVtYWluZGVybmVhciAtMCAgICAgIDEgICAtPiAtMAorZGRybW4xMzUgcmVtYWluZGVybmVhciAtMCAgICAgLTEgICAtPiAtMAorZGRybW4xMzYgcmVtYWluZGVybmVhciAtMC4wICAgIDEgICAtPiAtMC4wCitkZHJtbjEzNyByZW1haW5kZXJuZWFyIC0wLjAgICAtMSAgIC0+IC0wLjAKKworLS0gMC41ZXJzCitkZHJtbjE0MyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41CitkZHJtbjE0NCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41CitkZHJtbjE0NSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAorZGRybW4xNDYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkZHJtbjE0NyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAorZGRybW4xNDggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2Rkcm1uMTQ5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCistLSBzdGVhZGllcworZGRybW4xNTAgcmVtYWluZGVybmVhciAgMSAgMSAgIC0+IDAKK2Rkcm1uMTUxIHJlbWFpbmRlcm5lYXIgIDEgIDIgICAtPiAxCitkZHJtbjE1MiByZW1haW5kZXJuZWFyICAxICAzICAgLT4gMQorZGRybW4xNTMgcmVtYWluZGVybmVhciAgMSAgNCAgIC0+IDEKK2Rkcm1uMTU0IHJlbWFpbmRlcm5lYXIgIDEgIDUgICAtPiAxCitkZHJtbjE1NSByZW1haW5kZXJuZWFyICAxICA2ICAgLT4gMQorZGRybW4xNTYgcmVtYWluZGVybmVhciAgMSAgNyAgIC0+IDEKK2Rkcm1uMTU3IHJlbWFpbmRlcm5lYXIgIDEgIDggICAtPiAxCitkZHJtbjE1OCByZW1haW5kZXJuZWFyICAxICA5ICAgLT4gMQorZGRybW4xNTkgcmVtYWluZGVybmVhciAgMSAgMTAgIC0+IDEKK2Rkcm1uMTYwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCitkZHJtbjE2MSByZW1haW5kZXJuZWFyICAyICAxICAgLT4gMAorZGRybW4xNjIgcmVtYWluZGVybmVhciAgMyAgMSAgIC0+IDAKK2Rkcm1uMTYzIHJlbWFpbmRlcm5lYXIgIDQgIDEgICAtPiAwCitkZHJtbjE2NCByZW1haW5kZXJuZWFyICA1ICAxICAgLT4gMAorZGRybW4xNjUgcmVtYWluZGVybmVhciAgNiAgMSAgIC0+IDAKK2Rkcm1uMTY2IHJlbWFpbmRlcm5lYXIgIDcgIDEgICAtPiAwCitkZHJtbjE2NyByZW1haW5kZXJuZWFyICA4ICAxICAgLT4gMAorZGRybW4xNjggcmVtYWluZGVybmVhciAgOSAgMSAgIC0+IDAKK2Rkcm1uMTY5IHJlbWFpbmRlcm5lYXIgIDEwIDEgICAtPiAwCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXIKK2Rkcm1uMTcxIHJlbWFpbmRlcm5lYXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMAorZGRybW4xNzIgcmVtYWluZGVybmVhciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCitkZHJtbjE3MyByZW1haW5kZXJuZWFyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKK2Rkcm1uMTc0IHJlbWFpbmRlcm5lYXIgICAwLjUyIDEuMDIwIC0+IC0wLjUwMAorZGRybW4xNzUgcmVtYWluZGVybmVhciAgIDAuNiAgMS4wMjAgLT4gLTAuNDIwCisKKy0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCitkZHJtbjIwMSByZW1haW5kZXJuZWFyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMjAyIHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRybW4yMDMgcmVtYWluZGVybmVhciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjIwNCByZW1haW5kZXJuZWFyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMDUgcmVtYWluZGVybmVhciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjA2IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjIwNyByZW1haW5kZXJuZWFyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMDggcmVtYWluZGVybmVhciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjA5IHJlbWFpbmRlcm5lYXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjIxMCByZW1haW5kZXJuZWFyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMTEgcmVtYWluZGVybmVhciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gdGVzdHMgZnJvbSB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbgorZGRybW4yMjEgcmVtYWluZGVybmVhciAyLjEgICAgIDMgICAtPiAtMC45CitkZHJtbjIyMiByZW1haW5kZXJuZWFyICAxMCAgICAgNiAgIC0+IC0yCitkZHJtbjIyMyByZW1haW5kZXJuZWFyICAxMCAgICAgMyAgIC0+ICAxCitkZHJtbjIyNCByZW1haW5kZXJuZWFyIC0xMCAgICAgMyAgIC0+IC0xCitkZHJtbjIyNSByZW1haW5kZXJuZWFyICAxMC4yICAgMSAgIC0+IDAuMgorZGRybW4yMjYgcmVtYWluZGVybmVhciAgMTAgICAgIDAuMyAtPiAwLjEKK2Rkcm1uMjI3IHJlbWFpbmRlcm5lYXIgICAzLjYgICAxLjMgLT4gLTAuMworCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCitkZHJtbjIzMSByZW1haW5kZXJuZWFyICAtMC40ICAxLjAyMCAtPiAtMC40MDAKK2Rkcm1uMjMyIHJlbWFpbmRlcm5lYXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMAorZGRybW4yMzMgcmVtYWluZGVybmVhciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCitkZHJtbjIzNCByZW1haW5kZXJuZWFyICAtMC41MiAxLjAyMCAtPiAgMC41MDAKK2Rkcm1uMjM1IHJlbWFpbmRlcm5lYXIgIC0wLjYgIDEuMDIwIC0+ICAwLjQyMAorCistLSBoaWdoIFhzCitkZHJtbjI0MCByZW1haW5kZXJuZWFyICAxRSsyICAxLjAwICAtPiAgMC4wMAorCistLSBkZHJtbjN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAorZGRybW4zMDEgcmVtYWluZGVybmVhciAgIDEgICAgMyAgICAgLT4gIDEKK2Rkcm1uMzAyIHJlbWFpbmRlcm5lYXIgICA1ICAgIDUgICAgIC0+ICAwCitkZHJtbjMwMyByZW1haW5kZXJuZWFyICAgMTMgICAxMCAgICAtPiAgMworZGRybW4zMDQgcmVtYWluZGVybmVhciAgIDEzICAgNTAgICAgLT4gIDEzCitkZHJtbjMwNSByZW1haW5kZXJuZWFyICAgMTMgICAxMDAgICAtPiAgMTMKK2Rkcm1uMzA2IHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwMDAgIC0+ICAxMworZGRybW4zMDcgcmVtYWluZGVybmVhciAgIC4xMyAgICAxICAgLT4gIDAuMTMKK2Rkcm1uMzA4IHJlbWFpbmRlcm5lYXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMworZGRybW4zMDkgcmVtYWluZGVybmVhciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMworZGRybW4zMTAgcmVtYWluZGVybmVhciAgIDEuMDMzICAxICAgLT4gIDAuMDMzCitkZHJtbjMxMSByZW1haW5kZXJuZWFyICAgMTAuMzMgIDEgICAtPiAgMC4zMworZGRybW4zMTIgcmVtYWluZGVybmVhciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKK2Rkcm1uMzEzIHJlbWFpbmRlcm5lYXIgICAxMDMuMyAgMSAgIC0+ICAwLjMKK2Rkcm1uMzE0IHJlbWFpbmRlcm5lYXIgICAxMzMgICAxMCAgIC0+ICAzCitkZHJtbjMxNSByZW1haW5kZXJuZWFyICAgMTAzMyAgMTAgICAtPiAgMworZGRybW4zMTYgcmVtYWluZGVybmVhciAgIDEwMzMgIDUwICAgLT4gLTE3CitkZHJtbjMxNyByZW1haW5kZXJuZWFyICAgMTAxLjAgIDMgICAtPiAtMS4wCitkZHJtbjMxOCByZW1haW5kZXJuZWFyICAgMTAyLjAgIDMgICAtPiAgMC4wCitkZHJtbjMxOSByZW1haW5kZXJuZWFyICAgMTAzLjAgIDMgICAtPiAgMS4wCitkZHJtbjMyMCByZW1haW5kZXJuZWFyICAgMi40MCAgIDEgICAtPiAgMC40MAorZGRybW4zMjEgcmVtYWluZGVybmVhciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCitkZHJtbjMyMiByZW1haW5kZXJuZWFyICAgMi40ICAgIDEgICAtPiAgMC40CitkZHJtbjMyMyByZW1haW5kZXJuZWFyICAgMi40ICAgIDIgICAtPiAgMC40CitkZHJtbjMyNCByZW1haW5kZXJuZWFyICAgMi40MDAgIDIgICAtPiAgMC40MDAKK2Rkcm1uMzI1IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zICAgIC0+ICAwLjEKK2Rkcm1uMzI2IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMCAgIC0+ICAwLjEwCitkZHJtbjMyNyByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKK2Rkcm1uMzI4IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDAKK2Rkcm1uMzI5IHJlbWFpbmRlcm5lYXIgICAxLjAgICAgMC4zIC0+ICAwLjEKK2Rkcm1uMzMwIHJlbWFpbmRlcm5lYXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCitkZHJtbjMzMSByZW1haW5kZXJuZWFyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDAKK2Rkcm1uMzMyIHJlbWFpbmRlcm5lYXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDAKK2Rkcm1uMzMzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK2Rkcm1uMzM0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK2Rkcm1uMzM1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkZHJtbjMzNiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK2Rkcm1uMzM3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCitkZHJtbjMzOCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MAorZGRybW4zMzkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKK2Rkcm1uMzQwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIC0xRS03CitkZHJtbjM0MSByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgLTFFLTgKK2Rkcm1uMzQyIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgLTFFLTkKK2Rkcm1uMzQzIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIC0xRS0xMAorZGRybW4zNDQgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIC0xRS0xMQorZGRybW4zNDUgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNworZGRybW4zNDYgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKK2Rkcm1uMzQ3IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQorZGRybW4zNDggcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTAKK2Rkcm1uMzQ5IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQorZGRybW4zNTAgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMgorCitkZHJtbjM1MSByZW1haW5kZXJuZWFyICAgMC4wMyAgNyAgLT4gIDAuMDMKK2Rkcm1uMzUyIHJlbWFpbmRlcm5lYXIgICA1ICAgMiAgICAtPiAgMQorZGRybW4zNTMgcmVtYWluZGVybmVhciAgIDQuMSAgIDIgICAgLT4gIDAuMQorZGRybW4zNTQgcmVtYWluZGVybmVhciAgIDQuMDEgICAyICAgIC0+ICAwLjAxCitkZHJtbjM1NSByZW1haW5kZXJuZWFyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQorZGRybW4zNTYgcmVtYWluZGVybmVhciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQorZGRybW4zNTcgcmVtYWluZGVybmVhciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxCitkZHJtbjM1OCByZW1haW5kZXJuZWFyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQorZGRybW4zNTkgcmVtYWluZGVybmVhciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcKKworZGRybW4zNjAgcmVtYWluZGVybmVhciAgIDEuMiAgIDAuNzM0NSAtPiAtMC4yNjkwCitkZHJtbjM2MSByZW1haW5kZXJuZWFyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKK2Rkcm1uMzYyIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjIgICAgLT4gIDAuMAorZGRybW4zNjMgcmVtYWluZGVybmVhciAgIDAuOCAgIDAuMyAgICAtPiAtMC4xCitkZHJtbjM2NCByZW1haW5kZXJuZWFyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAorZGRybW4zNjUgcmVtYWluZGVybmVhciAgIDAuODAwICAgMS43ICAtPiAgMC44MDAKK2Rkcm1uMzY2IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwCisKKy0tIHJvdW5kIHRvIGV2ZW4KK2Rkcm1uMzcxIHJlbWFpbmRlcm5lYXIgICAxMjEgICAgIDIgICAgLT4gIDEKK2Rkcm1uMzcyIHJlbWFpbmRlcm5lYXIgICAxMjIgICAgIDIgICAgLT4gIDAKK2Rkcm1uMzczIHJlbWFpbmRlcm5lYXIgICAxMjMgICAgIDIgICAgLT4gLTEKK2Rkcm1uMzc0IHJlbWFpbmRlcm5lYXIgICAxMjQgICAgIDIgICAgLT4gIDAKK2Rkcm1uMzc1IHJlbWFpbmRlcm5lYXIgICAxMjUgICAgIDIgICAgLT4gIDEKK2Rkcm1uMzc2IHJlbWFpbmRlcm5lYXIgICAxMjYgICAgIDIgICAgLT4gIDAKK2Rkcm1uMzc3IHJlbWFpbmRlcm5lYXIgICAxMjcgICAgIDIgICAgLT4gLTEKKworZGRybW4zODEgcmVtYWluZGVybmVhciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCitkZHJtbjM4MiByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAwMDEgICAgLT4gLTAuMjM0NAorZGRybW4zODMgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDEgICAgIC0+IC0wLjMzMworZGRybW4zODQgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMSAgICAgIC0+IC0wLjIzCitkZHJtbjM4NSByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjEgICAgICAgLT4gLTAuMworZGRybW4zODYgcmVtYWluZGVybmVhciAxMjM1NSAgNCAgICAgICAgIC0+IC0xCitkZHJtbjM4NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKK2Rkcm1uMzg4IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQuMDAwMSAgICAtPiAtMS4zMDg5CitkZHJtbjM4OSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNAorZGRybW4zOTAgcmVtYWluZGVybmVhciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKK2Rkcm1uMzkxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTkgICAgICAtPiAtMC4yNgorZGRybW4zOTIgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQorZGRybW4zOTMgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKK2Rkcm1uMzk0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUgICAgICAgICAtPiAgMAorZGRybW4zOTUgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDAxICAgIC0+IC0wLjI0NjkKK2Rkcm1uMzk2IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAxICAgICAtPiAtMi40NjkKK2Rkcm1uMzk3IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDEgICAgICAtPiAgMC4zNgorZGRybW4zOTggcmVtYWluZGVybmVhciAxMjM0NSAgNS4xICAgICAgIC0+IC0yLjEKKworLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMKK2Rkcm1uNDAxIHJlbWFpbmRlcm5lYXIgICAwLjQgICAgICAgICAxICAgLT4gIDAuNAorZGRybW40MDIgcmVtYWluZGVybmVhciAgIDAuNDUgICAgICAgIDEgICAtPiAgMC40NQorZGRybW40MDMgcmVtYWluZGVybmVhciAgIDAuNDU1ICAgICAgIDEgICAtPiAgMC40NTUKK2Rkcm1uNDA0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTUgICAgICAxICAgLT4gIDAuNDU1NQorZGRybW40MDUgcmVtYWluZGVybmVhciAgIDAuNDU1NTUgICAgIDEgICAtPiAgMC40NTU1NQorZGRybW40MDYgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1ICAgIDEgICAtPiAgMC40NTU1NTUKK2Rkcm1uNDA3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTUgICAxICAgLT4gIDAuNDU1NTU1NQorZGRybW40MDggcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTUgIDEgICAtPiAgMC40NTU1NTU1NQorZGRybW40MDkgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU1NTU1NTUKKy0tIHdpdGggc3BpbGwuLi4gWzQxMiBleGVyY2lzZXMgc3RpY2t0YWIgbG9vcF0KK2Rkcm1uNDExIHJlbWFpbmRlcm5lYXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQorZGRybW40MTIgcmVtYWluZGVybmVhciAgIDAuNTUgICAgICAgIDEgICAtPiAtMC40NQorZGRybW40MTMgcmVtYWluZGVybmVhciAgIDAuNTU1ICAgICAgIDEgICAtPiAtMC40NDUKK2Rkcm1uNDE0IHJlbWFpbmRlcm5lYXIgICAwLjU1NTUgICAgICAxICAgLT4gLTAuNDQ0NQorZGRybW40MTUgcmVtYWluZGVybmVhciAgIDAuNTU1NTUgICAgIDEgICAtPiAtMC40NDQ0NQorZGRybW40MTYgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1ICAgIDEgICAtPiAtMC40NDQ0NDUKK2Rkcm1uNDE3IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTUgICAxICAgLT4gLTAuNDQ0NDQ0NQorZGRybW40MTggcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTUgIDEgICAtPiAtMC40NDQ0NDQ0NQorZGRybW40MTkgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTU1IDEgICAtPiAtMC40NDQ0NDQ0NDUKKworLS0gZm9sZGRvd25zCitkZHJtbjQyMSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rkcm1uNDIyIHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDFFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAorZGRybW40MjMgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgMkUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCitkZHJtbjQyNCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAzRSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2Rkcm1uNDI1IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDRFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRybW40MjYgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgNUUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCitkZHJtbjQyNyByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA2RSszODMgIC0+ICAtMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2Rkcm1uNDI4IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDdFKzM4MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRybW40MjkgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgOEUrMzgzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJtbjQzMCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA5RSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKKy0tIHRpbmllcworZGRybW40MzEgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgMUUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40MzIgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgMkUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40MzMgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgM0UtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDM0IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDRFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsCitkZHJtbjQzNSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA1RS0zOTggIC0+ICAgMEUtMzk4CitkZHJtbjQzNiByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA2RS0zOTggIC0+ICAtMkUtMzk4IFN1Ym5vcm1hbAorZGRybW40MzcgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgN0UtMzk4ICAtPiAgIDNFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDM4IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDhFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsCitkZHJtbjQzOSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA5RS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbAorZGRybW40NDAgcmVtYWluZGVybmVhciAgIDFFLTM5NyAxMEUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40NDEgcmVtYWluZGVybmVhciAgIDFFLTM5NyAxMUUtMzk4ICAtPiAgLTFFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDQyIHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMTFFLTM5OCAgLT4gIC0xRS0zOTggU3Vibm9ybWFsCitkZHJtbjQ0MyByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDIwRS0zOTggIC0+ICAgMEUtMzk4CitkZHJtbjQ0NCByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDIxRS0zOTggIC0+ICAtOEUtMzk4IFN1Ym5vcm1hbAorZGRybW40NDUgcmVtYWluZGVybmVhciAxMDBFLTM5NyAzMEUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwKKworLS0gemVybyBzaWducworZGRybW42NTAgcmVtYWluZGVybmVhciAgMSAgMSAtPiAgMAorZGRybW42NTEgcmVtYWluZGVybmVhciAtMSAgMSAtPiAtMAorZGRybW42NTIgcmVtYWluZGVybmVhciAgMSAtMSAtPiAgMAorZGRybW42NTMgcmVtYWluZGVybmVhciAtMSAtMSAtPiAtMAorZGRybW42NTQgcmVtYWluZGVybmVhciAgMCAgMSAtPiAgMAorZGRybW42NTUgcmVtYWluZGVybmVhciAtMCAgMSAtPiAtMAorZGRybW42NTYgcmVtYWluZGVybmVhciAgMCAtMSAtPiAgMAorZGRybW42NTcgcmVtYWluZGVybmVhciAtMCAtMSAtPiAtMAorZGRybW42NTggcmVtYWluZGVybmVhciAgMC4wMCAgMSAgLT4gIDAuMDAKK2Rkcm1uNjU5IHJlbWFpbmRlcm5lYXIgLTAuMDAgIDEgIC0+IC0wLjAwCisKKy0tIFNwZWNpYWxzCitkZHJtbjY4MCByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4MSByZW1haW5kZXJuZWFyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4MyByZW1haW5kZXJuZWFyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4NCByZW1haW5kZXJuZWFyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4NiByZW1haW5kZXJuZWFyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4NyByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZGRybW42ODkgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42OTEgcmVtYWluZGVybmVhciAtMSAgICAgSW5mICAgLT4gLTEKK2Rkcm1uNjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwCitkZHJtbjY5MyByZW1haW5kZXJuZWFyIC0wICAgICBJbmYgICAtPiAtMAorZGRybW42OTQgcmVtYWluZGVybmVhciAgMSAgICAgSW5mICAgLT4gIDEKK2Rkcm1uNjk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkZHJtbjY5NiByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkcm1uNzAwIHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzAxIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzAyIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzAzIHJlbWFpbmRlcm5lYXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA0IHJlbWFpbmRlcm5lYXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA1IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA2IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA3IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA4IHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzA5IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkZHJtbjcxMCByZW1haW5kZXJuZWFyIC0xICAgIC1JbmYgICAtPiAtMQorZGRybW43MTEgcmVtYWluZGVybmVhciAtMCAgICAtSW5mICAgLT4gLTAKK2Rkcm1uNzEyIHJlbWFpbmRlcm5lYXIgIDAgICAgLUluZiAgIC0+ICAwCitkZHJtbjcxMyByZW1haW5kZXJuZWFyICAxICAgIC1JbmYgICAtPiAgMQorZGRybW43MTQgcmVtYWluZGVybmVhciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2Rkcm1uNzE1IHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRybW43MjEgcmVtYWluZGVybmVhciAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRybW43MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRybW43MjMgcmVtYWluZGVybmVhciAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRybW43MjQgcmVtYWluZGVybmVhciAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRybW43MjUgcmVtYWluZGVybmVhciAtTmFOICAwICAgICAgLT4gLU5hTgorZGRybW43MjYgcmVtYWluZGVybmVhciAgTmFOICAxICAgICAgLT4gIE5hTgorZGRybW43MjcgcmVtYWluZGVybmVhciAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRybW43MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRybW43MjkgcmVtYWluZGVybmVhciAgTmFOIC1OYU4gICAgLT4gIE5hTgorZGRybW43MzAgcmVtYWluZGVybmVhciAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRybW43MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRybW43MzIgcmVtYWluZGVybmVhciAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRybW43MzMgcmVtYWluZGVybmVhciAtMCAgIC1OYU4gICAgLT4gLU5hTgorZGRybW43MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRybW43MzUgcmVtYWluZGVybmVhciAgMSAgIC1OYU4gICAgLT4gLU5hTgorZGRybW43MzYgcmVtYWluZGVybmVhciAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRybW43MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZHJtbjc0MSByZW1haW5kZXJuZWFyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQzIHJlbWFpbmRlcm5lYXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc0NCByZW1haW5kZXJuZWFyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQ2IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc0NyByZW1haW5kZXJuZWFyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzUwIHJlbWFpbmRlcm5lYXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1MSByZW1haW5kZXJuZWFyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzUzIHJlbWFpbmRlcm5lYXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1NCByZW1haW5kZXJuZWFyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTUgcmVtYWluZGVybmVhciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzU2IHJlbWFpbmRlcm5lYXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1NyByZW1haW5kZXJuZWFyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzU5IHJlbWFpbmRlcm5lYXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCitkZHJtbjc2MCByZW1haW5kZXJuZWFyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xCitkZHJtbjc2MSByZW1haW5kZXJuZWFyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc2MiByZW1haW5kZXJuZWFyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc2MyByZW1haW5kZXJuZWFyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc2NCByZW1haW5kZXJuZWFyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQorZGRybW43NjUgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorZGRybW43NjYgcmVtYWluZGVybmVhciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMKK2Rkcm1uNzY3IHJlbWFpbmRlcm5lYXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0CitkZHJtbjc2OCByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorZGRybW43NjkgcmVtYWluZGVybmVhciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYKKworLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCitkZHJtbjc3MCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gLTQKK2Rkcm1uNzcxICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAorZGRybW43NzIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW43NzMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCitkZHJtbjgwMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkZHJtbjgwMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkZHJtbjgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkZHJtbjgwNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkZHJtbjgwNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkZHJtbjgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkZHJtbjgwNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkZHJtbjgwOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkZHJtbjgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkZHJtbjgxMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkZHJtbjgxMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorZGRybW44MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitkZHJtbjgyMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkZHJtbjgyMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkZHJtbjgyMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkZHJtbjgyNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkZHJtbjgyNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkZHJtbjgyNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkZHJtbjgyNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkZHJtbjgyOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkZHJtbjgyOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkZHJtbjgzMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkZHJtbjgzMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorZGRybW44MzIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGRpdmlkZWludAorZGRybW44NDAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wCitkZHJtbjg0MSByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKK2Rkcm1uODQyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQorZGRybW44NDMgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjkgICAxICAtPiAtMC4xCitkZHJtbjg0NCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuOTk5IDEgIC0+IC0wLjAwMQorZGRybW44NTAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAzICAgICA1ICAtPiAtMgorZGRybW44NTEgcmVtYWluZGVybmVhciAgMTAwMDAwMDMgICAgICA1ICAtPiAtMgorZGRybW44NTIgcmVtYWluZGVybmVhciAgMTAwMDAwMyAgICAgICA1ICAtPiAtMgorZGRybW44NTMgcmVtYWluZGVybmVhciAgMTAwMDAzICAgICAgICA1ICAtPiAtMgorZGRybW44NTQgcmVtYWluZGVybmVhciAgMTAwMDMgICAgICAgICA1ICAtPiAtMgorZGRybW44NTUgcmVtYWluZGVybmVhciAgMTAwMyAgICAgICAgICA1ICAtPiAtMgorZGRybW44NTYgcmVtYWluZGVybmVhciAgMTAzICAgICAgICAgICA1ICAtPiAtMgorZGRybW44NTcgcmVtYWluZGVybmVhciAgMTMgICAgICAgICAgICA1ICAtPiAtMgorZGRybW44NTggcmVtYWluZGVybmVhciAgMSAgICAgICAgICAgICA1ICAtPiAgMQorCistLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRybW44NjAgcmVtYWluZGVybmVhciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rkcm1uODYxIHJlbWFpbmRlcm5lYXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJtbjg2MiByZW1haW5kZXJuZWFyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRybW44NjMgcmVtYWluZGVybmVhciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rkcm1uODY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJtbjg3MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODcyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODc1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODc4IHJlbWFpbmRlcm5lYXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAorZGRybW44ODAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODgxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwCitkZHJtbjg4MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAorZGRybW44ODMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKK2Rkcm1uODg0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwCitkZHJtbjg4NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAorZGRybW44ODYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKKworZGRybW44OTAgcmVtYWluZGVybmVhciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODkxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODk0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODk3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMAorZGRybW45MDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTAxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCitkZHJtbjkwMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMAorZGRybW45MDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IC03NzAKK2Rkcm1uOTA0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCitkZHJtbjkwNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gIC0xMAorZGRybW45MDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDAKKworZGRybW45MTAgcmVtYWluZGVybmVhciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTExIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTE0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTE3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMAorZGRybW45MjAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTIxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCitkZHJtbjkyMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMAorZGRybW45MjMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKK2Rkcm1uOTI0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCitkZHJtbjkyNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gIC0yMAorZGRybW45MjYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKKworZGRybW45MzAgcmVtYWluZGVybmVhciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTMxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTM0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTM3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAorZGRybW45NDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTQxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwCitkZHJtbjk0MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAorZGRybW45NDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKK2Rkcm1uOTQ0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwCitkZHJtbjk0NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gIC0zMAorZGRybW45NDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgLTMKKworZGRybW45NTAgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45NjEgcmVtYWluZGVybmVhciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjIgcmVtYWluZGVybmVhciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjMgcmVtYWluZGVybmVhciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjUgcmVtYWluZGVybmVhciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjYgcmVtYWluZGVybmVhciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjcgcmVtYWluZGVybmVhciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjggcmVtYWluZGVybmVhciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRybW45NjkgcmVtYWluZGVybmVhciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMAorCitkZHJtbjk4MCByZW1haW5kZXJuZWFyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5CisKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCitkZHJtbjEwNTEgcmVtYWluZGVybmVhciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjEwNTIgcmVtYWluZGVybmVhciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjEwNTMgcmVtYWluZGVybmVhciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjEwNTQgcmVtYWluZGVybmVhciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjEwNTUgcmVtYWluZGVybmVhciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3NworZGRybW4xMDU2IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcKK2Rkcm1uMTA1NyByZW1haW5kZXJuZWFyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3CitkZHJtbjEwNTggcmVtYWluZGVybmVhciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3NworCistLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdAorZGRybW4xMTAwIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU1CitkZHJtbjExMDEgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEuMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTAuMzQ1Njc4OTAxMjM0NDQKK2Rkcm1uMTEwMiByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDEuMDAwMDAwMDAwMDAwMSAgLT4gICAgLTAuNDU2Nzg5MDEyMzMzMworZGRybW4xMTAzIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTUgIDQuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0CitkZHJtbjExMDQgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4zMDg2NDE5NzI1MzA4NjQKK2Rkcm1uMTExNSByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDQuOTk5OTk5OTk5OTk5OSAgLT4gICAgIDAuNjkxMzU3ODAyNDY5NgorZGRybW4xMTE2IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA0Ljk5OTk5OTk5OTk5OTk5ICAtPiAgIC0xLjUzMDg2NDIxOTc1MzA4CitkZHJtbjExMTcgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC45OTk5OTk5OTk5OTk5OTkgIC0+ICAgMS4yNDY5MTM1NzgwMjQ2OTEKK2Rkcm1uMTExOCByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICA1LjAwMDAwMDAwMDAwMDAwMSAgLT4gICAwLjc1MzA4NjQyMTk3NTMwOQorZGRybW4xMTE5IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA1LjAwMDAwMDAwMDAwMDAxICAtPiAgIC0xLjQ2OTEzNTc4MDI0NjkxCitkZHJtbjExMTAgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA1LjAwMDAwMDAwMDAwMDEgIC0+ICAgICAxLjMwODY0MjE5NzUzMTQKKworLS0gTnVsbCB0ZXN0cworZGRybW4xMDAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEwMDEgcmVtYWluZGVybmVhciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJvdGF0ZS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJvdGF0ZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMGZlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUm90YXRlLmRlY1Rlc3QKQEAgLTAsMCArMSwyNjIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRSb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgYSBkZWNEb3VibGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZHJvdDAwMSByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKK2Rkcm90MDAyIHJvdGF0ZSAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMAorZGRyb3QwMDMgcm90YXRlICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDAKK2Rkcm90MDA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIDE1ICAtPiAgMTAwMDAwMDAwMDAwMDAwMAorZGRyb3QwMDUgcm90YXRlICAgICAgICAgICAgICAgICAxICAgMTYgIC0+ICAxCitkZHJvdDAwNiByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAKK2Rkcm90MDA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAorZGRyb3QwMDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+ICA2MTIzNDU2Nzg5MDEyMzQ1CitkZHJvdDAwOSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDIzNDU2Nzg5MDEyMzQ1NjEKK2Rkcm90MDEwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRyb3QwMTEgcm90YXRlICA5OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+ICA5MzQ1Njc4OTAxMjM0NTY5CitkZHJvdDAxMiByb3RhdGUgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDk5MzQ1Njc4OTAxMjM0NTYKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorZGRyb3QwMTUgcm90YXRlICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAxNyByb3RhdGUgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMTggcm90YXRlICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDE5IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAyMCByb3RhdGUgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMjEgcm90YXRlICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDIyIHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCitkZHJvdDAyNSByb3RhdGUgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMjYgcm90YXRlICAgICAgICAxICAgIC0xNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDI3IHJvdGF0ZSAgICAgICAgMSAgICAgMTcgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAyOCByb3RhdGUgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHBhdHRlcm4KK2Rkcm90MDMwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRyb3QwMzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE1ICAtPiAyMzQ1Njc4OTAxMjM0NTYxCitkZHJvdDAzMiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTQgIC0+IDM0NTY3ODkwMTIzNDU2MTIKK2Rkcm90MDMzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMyAgLT4gNDU2Nzg5MDEyMzQ1NjEyMworZGRyb3QwMzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEyICAtPiA1Njc4OTAxMjM0NTYxMjM0CitkZHJvdDAzNSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTEgIC0+IDY3ODkwMTIzNDU2MTIzNDUKK2Rkcm90MDM2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMCAgLT4gNzg5MDEyMzQ1NjEyMzQ1NgorZGRyb3QwMzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTkgICAtPiA4OTAxMjM0NTYxMjM0NTY3CitkZHJvdDAzOCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtOCAgIC0+IDkwMTIzNDU2MTIzNDU2NzgKK2Rkcm90MDM5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC03ICAgLT4gIDEyMzQ1NjEyMzQ1Njc4OQorZGRyb3QwNDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTYgICAtPiAxMjM0NTYxMjM0NTY3ODkwCitkZHJvdDA0MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNSAgIC0+IDIzNDU2MTIzNDU2Nzg5MDEKK2Rkcm90MDQyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC00ICAgLT4gMzQ1NjEyMzQ1Njc4OTAxMgorZGRyb3QwNDMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTMgICAtPiA0NTYxMjM0NTY3ODkwMTIzCitkZHJvdDA0NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMiAgIC0+IDU2MTIzNDU2Nzg5MDEyMzQKK2Rkcm90MDQ1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xICAgLT4gNjEyMzQ1Njc4OTAxMjM0NQorZGRyb3QwNDYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2CisKK2Rkcm90MDQ3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRyb3QwNDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTYxCitkZHJvdDA0OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMTIzNDU2MTIKK2Rkcm90MDUwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1NjEyMworZGRyb3QwNTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTYxMjM0CitkZHJvdDA1MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNSAgIC0+IDY3ODkwMTIzNDU2MTIzNDUKK2Rkcm90MDUzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1NjEyMzQ1NgorZGRyb3QwNTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTYxMjM0NTY3CitkZHJvdDA1NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArOCAgIC0+IDkwMTIzNDU2MTIzNDU2NzgKK2Rkcm90MDU2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs5ICAgLT4gIDEyMzQ1NjEyMzQ1Njc4OQorZGRyb3QwNTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEwICAtPiAxMjM0NTYxMjM0NTY3ODkwCitkZHJvdDA1OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTEgIC0+IDIzNDU2MTIzNDU2Nzg5MDEKK2Rkcm90MDU5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMiAgLT4gMzQ1NjEyMzQ1Njc4OTAxMgorZGRyb3QwNjAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEzICAtPiA0NTYxMjM0NTY3ODkwMTIzCitkZHJvdDA2MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTQgIC0+IDU2MTIzNDU2Nzg5MDEyMzQKK2Rkcm90MDYyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNSAgLT4gNjEyMzQ1Njc4OTAxMjM0NQorZGRyb3QwNjMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2CisKKy0tIHplcm9zCitkZHJvdDA3MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTAKK2Rkcm90MDcxIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMAorZGRyb3QwNzIgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgIDAuMDAwCitkZHJvdDA3MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDAKK2Rkcm90MDc0IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMAorZGRyb3QwNzUgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFKzEwCitkZHJvdDA3NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTAKK2Rkcm90MDc3IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMAorZGRyb3QwNzggcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgLTAuMDAwCitkZHJvdDA3OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDAKK2Rkcm90MDgwIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMAorZGRyb3QwODEgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFKzEwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZHJvdDE0MSByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE0MiByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE0MyByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE0NCByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE0NSByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHJvdDE0NiByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAxLjBFLTM4MgorZGRyb3QxNDcgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zODIKK2Rkcm90MTQ4IHJvdGF0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zNjgKK2Rkcm90MTUxIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxNTIgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gMUUtMzk4CitkZHJvdDE1MyByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAxRS0zOTgKK2Rkcm90MTU0IHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxNTUgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE1NiByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiA5RS0zOTgKK2Rkcm90MTU3IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IDlFLTM5OAorZGRyb3QxNTggcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE2MCByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHJvdDE2MSByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAxLjBFLTM5NworZGRyb3QxNjIgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zOTcKK2Rkcm90MTYzIHJvdGF0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKKy0tICBuZWdhdGl2ZXMKK2Rkcm90MTcxIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE3MiByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyb3QxNzMgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkcm90MTc0IHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE3NSByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM2OAorZGRyb3QxNzYgcm90YXRlIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMTUgLT4gLTEuMEUtMzgyCitkZHJvdDE3NyByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zODIKK2Rkcm90MTc4IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHJvdDE4MSByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE4MiByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtMUUtMzk4CitkZHJvdDE4MyByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMUUtMzk4CitkZHJvdDE4NCByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE4NSByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE4NiByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtOUUtMzk4CitkZHJvdDE4NyByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtOUUtMzk4CitkZHJvdDE4OCByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE5MCByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRyb3QxOTEgcm90YXRlIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMTUgLT4gLTEuMEUtMzk3CitkZHJvdDE5MiByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zOTcKK2Rkcm90MTkzIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCisKKy0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykKK2Rkcm90MjAxIHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgICAwICAtPiAtMAorZGRyb3QyMDIgcm90YXRlICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wCitkZHJvdDIwMyByb3RhdGUgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMAorZGRyb3QyMDQgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgMTUgIC0+IC0xMDAwMDAwMDAwMDAwMDAwCitkZHJvdDIwNSByb3RhdGUgICAgICAgICAgICAgICAgLTEgICAxNiAgLT4gLTEKK2Rkcm90MjA2IHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMTAwMDAwMDAwMDAwMDAwMAorZGRyb3QyMDcgcm90YXRlICAgICAgICAgICAgICAgIC0wICAgLTIgIC0+IC0wCitkZHJvdDIwOCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMSAgLT4gLTYxMjM0NTY3ODkwMTIzNDUKK2Rkcm90MjA5IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAtMjM0NTY3ODkwMTIzNDU2MQorZGRyb3QyMTAgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC0xMjM0NTY3ODkwMTIzNDU2CitkZHJvdDIxMSByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTkzNDU2Nzg5MDEyMzQ1NjkKK2Rkcm90MjEyIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtOTkzNDU2Nzg5MDEyMzQ1NgorCisKKy0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsCitkZHJvdDc4MSByb3RhdGUgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorZGRyb3Q3ODIgcm90YXRlIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rkcm90NzgzIHJvdGF0ZSAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZHJvdDc4NCByb3RhdGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRyb3Q3ODUgcm90YXRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rkcm90Nzg2IHJvdGF0ZSAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5CitkZHJvdDc4NyByb3RhdGUgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3ODggcm90YXRlIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90Nzg5IHJvdGF0ZSAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDc5MCByb3RhdGUgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3OTEgcm90YXRlICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90NzkyIHJvdGF0ZSAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDc5MyByb3RhdGUgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3OTQgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRyb3Q4MDAgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODAxIHJvdGF0ZSAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODAyIHJvdGF0ZSAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODAzIHJvdGF0ZSAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODA0IHJvdGF0ZSAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODA1IHJvdGF0ZSAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODA2IHJvdGF0ZSAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODA3IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgwOCByb3RhdGUgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MDkgcm90YXRlIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODEwIHJvdGF0ZSAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgxMSByb3RhdGUgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MTIgcm90YXRlICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODEzIHJvdGF0ZSAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgxNCByb3RhdGUgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MTUgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRyb3Q4MjEgcm90YXRlICBOYU4gLUluZiAgICAtPiAgTmFOCitkZHJvdDgyMiByb3RhdGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rkcm90ODIzIHJvdGF0ZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRyb3Q4MjQgcm90YXRlICBOYU4gLTAgICAgICAtPiAgTmFOCitkZHJvdDgyNSByb3RhdGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2Rkcm90ODI2IHJvdGF0ZSAgTmFOICAxICAgICAgLT4gIE5hTgorZGRyb3Q4Mjcgcm90YXRlICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZHJvdDgyOCByb3RhdGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rkcm90ODI5IHJvdGF0ZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzAgcm90YXRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzMSByb3RhdGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODMyIHJvdGF0ZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzMgcm90YXRlIC0wICAgIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzNCByb3RhdGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODM1IHJvdGF0ZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzYgcm90YXRlICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzNyByb3RhdGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRyb3Q4NDEgcm90YXRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDIgcm90YXRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDMgcm90YXRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDQgcm90YXRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDUgcm90YXRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDYgcm90YXRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDcgcm90YXRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDggcm90YXRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDkgcm90YXRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTAgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTEgcm90YXRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTIgcm90YXRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTMgcm90YXRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTQgcm90YXRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTUgcm90YXRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTYgcm90YXRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTcgcm90YXRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTggcm90YXRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTkgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZHJvdDg2MSByb3RhdGUgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkZHJvdDg2MiByb3RhdGUgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkZHJvdDg2MyByb3RhdGUgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkZHJvdDg2NCByb3RhdGUgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkZHJvdDg2NSByb3RhdGUgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkZHJvdDg2NiByb3RhdGUgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkZHJvdDg2NyByb3RhdGUgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkZHJvdDg2OCByb3RhdGUgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkZHJvdDg2OSByb3RhdGUgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZGRyb3Q4NzEgcm90YXRlICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3MiByb3RhdGUgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODczIHJvdGF0ZSAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NzQgcm90YXRlICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3NSByb3RhdGUgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODc2IHJvdGF0ZSAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4Nzcgcm90YXRlIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3OCByb3RhdGUgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODc5IHJvdGF0ZSAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4ODAgcm90YXRlICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg4MSByb3RhdGUgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODgyIHJvdGF0ZSAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkZHJvdDg4MyByb3RhdGUgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODg0IHJvdGF0ZSAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkZHJvdDg4NSByb3RhdGUgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTYW1lUXVhbnR1bS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNhbWVRdWFudHVtLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1YjM2YQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTYW1lUXVhbnR1bS5kZWNUZXN0CkBAIC0wLDAgKzEsMzg5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkU2FtZVF1YW50dW0uZGVjVGVzdCAtLSBjaGVjayBkZWNEb3VibGUgcXVhbnR1bXMgbWF0Y2ggICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2Rkc2FtcTAwMSBzYW1lcXVhbnR1bSAgMCAgICAgIDAgICAgICAtPiAgMQorZGRzYW1xMDAyIHNhbWVxdWFudHVtICAwICAgICAgMSAgICAgIC0+ICAxCitkZHNhbXEwMDMgc2FtZXF1YW50dW0gIDEgICAgICAwICAgICAgLT4gIDEKK2Rkc2FtcTAwNCBzYW1lcXVhbnR1bSAgMSAgICAgIDEgICAgICAtPiAgMQorCitkZHNhbXEwMTEgc2FtZXF1YW50dW0gIDEwICAgICAxRSsxICAgLT4gMAorZGRzYW1xMDEyIHNhbWVxdWFudHVtICAxMEUrMSAgMTBFKzEgIC0+IDEKK2Rkc2FtcTAxMyBzYW1lcXVhbnR1bSAgMTAwICAgIDEwRSsxICAtPiAwCitkZHNhbXEwMTQgc2FtZXF1YW50dW0gIDEwMCAgICAxRSsyICAgLT4gMAorZGRzYW1xMDE1IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMiAgIC0+IDAKK2Rkc2FtcTAxNiBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTEgICAtPiAxCitkZHNhbXEwMTcgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0wICAgLT4gMAorZGRzYW1xMDE4IHNhbWVxdWFudHVtICA5OTkgICAgOTk5ICAgIC0+IDEKK2Rkc2FtcTAxOSBzYW1lcXVhbnR1bSAgOTk5RS0xIDk5LjkgICAtPiAxCitkZHNhbXEwMjAgc2FtZXF1YW50dW0gIDExMUUtMSAyMi4yICAgLT4gMQorZGRzYW1xMDIxIHNhbWVxdWFudHVtICAxMTFFLTEgMTIzNC4yIC0+IDEKKworLS0gemVyb3MKK2Rkc2FtcTAzMCBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMSAgICAtPiAxCitkZHNhbXEwMzEgc2FtZXF1YW50dW0gIDAuMCAgICAxLjExICAgLT4gMAorZGRzYW1xMDMyIHNhbWVxdWFudHVtICAwLjAgICAgMCAgICAgIC0+IDAKK2Rkc2FtcTAzMyBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMCAgICAtPiAxCitkZHNhbXEwMzQgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAwICAgLT4gMAorZGRzYW1xMDM1IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMCAgIC0+IDAKK2Rkc2FtcTAzNiBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzEgICAtPiAxCitkZHNhbXEwMzcgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsyICAgLT4gMAorZGRzYW1xMDM4IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTYgIC0+IDAKK2Rkc2FtcTAzOSBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE3ICAtPiAxCitkZHNhbXEwNDAgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xOCAgLT4gMAorZGRzYW1xMDQxIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNSAtPiAwCitkZHNhbXEwNDIgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE2IC0+IDEKK2Rkc2FtcTA0MyBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTcgLT4gMAorZGRzYW1xMDQ0IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNiAtPiAxCitkZHNhbXEwNDUgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE3IC0+IDAKK2Rkc2FtcTA0NiBzYW1lcXVhbnR1bSAgMEUtMTcgLTAuMEUtMTYgLT4gMQorZGRzYW1xMDQ3IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNyAtPiAwCitkZHNhbXEwNDggc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE2IC0+IDEKK2Rkc2FtcTA0OSBzYW1lcXVhbnR1bSAtMEUtMTcgLTAuMEUtMTcgLT4gMAorCistLSBObWF4LCBObWluLCBOdGlueQorZGRzYW1xMDUxIHNhbWVxdWFudHVtICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDEKK2Rkc2FtcTA1MiBzYW1lcXVhbnR1bSAgMUUtMzgzICAgICAgICAgICAgIDFFLTM4MyAgICAgICAgICAgLT4gMQorZGRzYW1xMDUzIHNhbWVxdWFudHVtICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEKK2Rkc2FtcTA1NCBzYW1lcXVhbnR1bSAgMUUtMzk4ICAgICAgICAgICAgIDFFLTM5OCAgICAgICAgICAgLT4gMQorZGRzYW1xMDU1IHNhbWVxdWFudHVtICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDEKK2Rkc2FtcTA1NiBzYW1lcXVhbnR1bSAgMUUtMzgzICAgICAgICAgICAgIDFFLTM4MyAgICAgICAgICAgLT4gMQorZGRzYW1xMDU3IHNhbWVxdWFudHVtICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEKK2Rkc2FtcTA1OCBzYW1lcXVhbnR1bSAgMUUtMzk4ICAgICAgICAgICAgIDFFLTM5OCAgICAgICAgICAgLT4gMQorCitkZHNhbXEwNjEgc2FtZXF1YW50dW0gIC0xRS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDEKK2Rkc2FtcTA2MiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtPiAxCitkZHNhbXEwNjMgc2FtZXF1YW50dW0gIC0xRS0zODMgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDEKK2Rkc2FtcTA2NCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxCitkZHNhbXEwNjUgc2FtZXF1YW50dW0gIC0xRS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDEKK2Rkc2FtcTA2NiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtPiAxCitkZHNhbXEwNjcgc2FtZXF1YW50dW0gIC0xRS0zODMgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDEKK2Rkc2FtcTA2OCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxCisKK2Rkc2FtcTA3MSBzYW1lcXVhbnR1bSAgLTRFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQorZGRzYW1xMDcyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDA0MDAwMDAwMDAwMEUtMzgzIC0+IDEKK2Rkc2FtcTA3MyBzYW1lcXVhbnR1bSAgLTRFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQorZGRzYW1xMDc0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTk5OTk5OTk0OTk5OUUrMzg0IC0+IDEKK2Rkc2FtcTA3NSBzYW1lcXVhbnR1bSAgLTRFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQorZGRzYW1xMDc2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwNDAwMDAwMDAwMDAwMEUtMzgzIC0+IDEKK2Rkc2FtcTA3NyBzYW1lcXVhbnR1bSAgLTRFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQorZGRzYW1xMDc4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk0OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDEKKworZGRzYW1xMDgxIHNhbWVxdWFudHVtICAtNEUtMzk3ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAwCitkZHNhbXEwODIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDQwMDAwMDAwMDAwRS0zMzYgLT4gMAorZGRzYW1xMDgzIHNhbWVxdWFudHVtICAtNEUtMzQ2ICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAwCitkZHNhbXEwODQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5NDk5OTk5OTk5OTk5RSszMzYgLT4gMAorZGRzYW1xMDg1IHNhbWVxdWFudHVtICAtNEUtMzk3ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAwCitkZHNhbXEwODYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDA0MDAwMDAwMDAwMDAwRS0zMzYgLT4gMAorZGRzYW1xMDg3IHNhbWVxdWFudHVtICAtNEUtMzQ2ICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAwCitkZHNhbXEwODggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTQ5OTk5OTk5OTk5OTk5RSszMzYgLT4gMAorCistLSBzcGVjaWFscyAmIGNvbWJpbmF0aW9ucworZGRzYW1xMDExMCBzYW1lcXVhbnR1bSAgLUluZiAgICAtSW5mICAgLT4gMQorZGRzYW1xMDExMSBzYW1lcXVhbnR1bSAgLUluZiAgICAgSW5mICAgLT4gMQorZGRzYW1xMDExMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgTmFOICAgLT4gMAorZGRzYW1xMDExMyBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UrMyAgLT4gMAorZGRzYW1xMDExNCBzYW1lcXVhbnR1bSAgLUluZiAgICAtNyAgICAgLT4gMAorZGRzYW1xMDExNSBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UtMyAgLT4gMAorZGRzYW1xMDExNiBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDExNyBzYW1lcXVhbnR1bSAgLUluZiAgICAtMCAgICAgLT4gMAorZGRzYW1xMDExOCBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDExOSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDEyMCBzYW1lcXVhbnR1bSAgLUluZiAgICAgMCAgICAgLT4gMAorZGRzYW1xMDEyMSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDEyMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDEyMyBzYW1lcXVhbnR1bSAgLUluZiAgICAgNyAgICAgLT4gMAorZGRzYW1xMDEyNCBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDEyNSBzYW1lcXVhbnR1bSAgLUluZiAgICAgc05hTiAgLT4gMAorCitkZHNhbXEwMjEwIHNhbWVxdWFudHVtICAgSW5mICAgIC1JbmYgICAtPiAxCitkZHNhbXEwMjExIHNhbWVxdWFudHVtICAgSW5mICAgICBJbmYgICAtPiAxCitkZHNhbXEwMjEyIHNhbWVxdWFudHVtICAgSW5mICAgICBOYU4gICAtPiAwCitkZHNhbXEwMjEzIHNhbWVxdWFudHVtICAgSW5mICAgIC03RSszICAtPiAwCitkZHNhbXEwMjE0IHNhbWVxdWFudHVtICAgSW5mICAgIC03ICAgICAtPiAwCitkZHNhbXEwMjE1IHNhbWVxdWFudHVtICAgSW5mICAgIC03RS0zICAtPiAwCitkZHNhbXEwMjE2IHNhbWVxdWFudHVtICAgSW5mICAgIC0wRS0zICAtPiAwCitkZHNhbXEwMjE3IHNhbWVxdWFudHVtICAgSW5mICAgIC0wICAgICAtPiAwCitkZHNhbXEwMjE4IHNhbWVxdWFudHVtICAgSW5mICAgIC0wRSszICAtPiAwCitkZHNhbXEwMjE5IHNhbWVxdWFudHVtICAgSW5mICAgICAwRS0zICAtPiAwCitkZHNhbXEwMjIwIHNhbWVxdWFudHVtICAgSW5mICAgICAwICAgICAtPiAwCitkZHNhbXEwMjIxIHNhbWVxdWFudHVtICAgSW5mICAgICAwRSszICAtPiAwCitkZHNhbXEwMjIyIHNhbWVxdWFudHVtICAgSW5mICAgICA3RS0zICAtPiAwCitkZHNhbXEwMjIzIHNhbWVxdWFudHVtICAgSW5mICAgICA3ICAgICAtPiAwCitkZHNhbXEwMjI0IHNhbWVxdWFudHVtICAgSW5mICAgICA3RSszICAtPiAwCitkZHNhbXEwMjI1IHNhbWVxdWFudHVtICAgSW5mICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTAzMTAgc2FtZXF1YW50dW0gICBOYU4gICAgLUluZiAgIC0+IDAKK2Rkc2FtcTAzMTEgc2FtZXF1YW50dW0gICBOYU4gICAgIEluZiAgIC0+IDAKK2Rkc2FtcTAzMTIgc2FtZXF1YW50dW0gICBOYU4gICAgIE5hTiAgIC0+IDEKK2Rkc2FtcTAzMTMgc2FtZXF1YW50dW0gICBOYU4gICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTAzMTQgc2FtZXF1YW50dW0gICBOYU4gICAgLTcgICAgIC0+IDAKK2Rkc2FtcTAzMTUgc2FtZXF1YW50dW0gICBOYU4gICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTAzMTYgc2FtZXF1YW50dW0gICBOYU4gICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTAzMTcgc2FtZXF1YW50dW0gICBOYU4gICAgLTAgICAgIC0+IDAKK2Rkc2FtcTAzMTggc2FtZXF1YW50dW0gICBOYU4gICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTAzMTkgc2FtZXF1YW50dW0gICBOYU4gICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTAzMjAgc2FtZXF1YW50dW0gICBOYU4gICAgIDAgICAgIC0+IDAKK2Rkc2FtcTAzMjEgc2FtZXF1YW50dW0gICBOYU4gICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTAzMjIgc2FtZXF1YW50dW0gICBOYU4gICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTAzMjMgc2FtZXF1YW50dW0gICBOYU4gICAgIDcgICAgIC0+IDAKK2Rkc2FtcTAzMjQgc2FtZXF1YW50dW0gICBOYU4gICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTAzMjUgc2FtZXF1YW50dW0gICBOYU4gICAgIHNOYU4gIC0+IDEKKworZGRzYW1xMDQxMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTA0MTEgc2FtZXF1YW50dW0gIC03RSszICAgICBJbmYgICAtPiAwCitkZHNhbXEwNDEyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMDQxMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTdFKzMgIC0+IDEKK2Rkc2FtcTA0MTQgc2FtZXF1YW50dW0gIC03RSszICAgIC03ICAgICAtPiAwCitkZHNhbXEwNDE1IHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UtMyAgLT4gMAorZGRzYW1xMDQxNiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTA0MTcgc2FtZXF1YW50dW0gIC03RSszICAgIC0wICAgICAtPiAwCitkZHNhbXEwNDE4IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUrMyAgLT4gMQorZGRzYW1xMDQxOSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTA0MjAgc2FtZXF1YW50dW0gIC03RSszICAgICAwICAgICAtPiAwCitkZHNhbXEwNDIxIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUrMyAgLT4gMQorZGRzYW1xMDQyMiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTA0MjMgc2FtZXF1YW50dW0gIC03RSszICAgICA3ICAgICAtPiAwCitkZHNhbXEwNDI0IHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UrMyAgLT4gMQorZGRzYW1xMDQyNSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDUxMCBzYW1lcXVhbnR1bSAgLTcgICAgICAtSW5mICAgLT4gMAorZGRzYW1xMDUxMSBzYW1lcXVhbnR1bSAgLTcgICAgICAgSW5mICAgLT4gMAorZGRzYW1xMDUxMiBzYW1lcXVhbnR1bSAgLTcgICAgICAgTmFOICAgLT4gMAorZGRzYW1xMDUxMyBzYW1lcXVhbnR1bSAgLTcgICAgICAtN0UrMyAgLT4gMAorZGRzYW1xMDUxNCBzYW1lcXVhbnR1bSAgLTcgICAgICAtNyAgICAgLT4gMQorZGRzYW1xMDUxNSBzYW1lcXVhbnR1bSAgLTcgICAgICAtN0UtMyAgLT4gMAorZGRzYW1xMDUxNiBzYW1lcXVhbnR1bSAgLTcgICAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDUxNyBzYW1lcXVhbnR1bSAgLTcgICAgICAtMCAgICAgLT4gMQorZGRzYW1xMDUxOCBzYW1lcXVhbnR1bSAgLTcgICAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDUxOSBzYW1lcXVhbnR1bSAgLTcgICAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDUyMCBzYW1lcXVhbnR1bSAgLTcgICAgICAgMCAgICAgLT4gMQorZGRzYW1xMDUyMSBzYW1lcXVhbnR1bSAgLTcgICAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDUyMiBzYW1lcXVhbnR1bSAgLTcgICAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDUyMyBzYW1lcXVhbnR1bSAgLTcgICAgICAgNyAgICAgLT4gMQorZGRzYW1xMDUyNCBzYW1lcXVhbnR1bSAgLTcgICAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDUyNSBzYW1lcXVhbnR1bSAgLTcgICAgICAgc05hTiAgLT4gMAorCitkZHNhbXEwNjEwIHNhbWVxdWFudHVtICAtN0UtMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMDYxMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTA2MTIgc2FtZXF1YW50dW0gIC03RS0zICAgICBOYU4gICAtPiAwCitkZHNhbXEwNjEzIHNhbWVxdWFudHVtICAtN0UtMyAgICAtN0UrMyAgLT4gMAorZGRzYW1xMDYxNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTA2MTUgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RS0zICAtPiAxCitkZHNhbXEwNjE2IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMEUtMyAgLT4gMQorZGRzYW1xMDYxNyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTA2MTggc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRSszICAtPiAwCitkZHNhbXEwNjE5IHNhbWVxdWFudHVtICAtN0UtMyAgICAgMEUtMyAgLT4gMQorZGRzYW1xMDYyMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTA2MjEgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRSszICAtPiAwCitkZHNhbXEwNjIyIHNhbWVxdWFudHVtICAtN0UtMyAgICAgN0UtMyAgLT4gMQorZGRzYW1xMDYyMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTA2MjQgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RSszICAtPiAwCitkZHNhbXEwNjI1IHNhbWVxdWFudHVtICAtN0UtMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXEwNzEwIHNhbWVxdWFudHVtICAtMEUtMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMDcxMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTA3MTIgc2FtZXF1YW50dW0gIC0wRS0zICAgICBOYU4gICAtPiAwCitkZHNhbXEwNzEzIHNhbWVxdWFudHVtICAtMEUtMyAgICAtN0UrMyAgLT4gMAorZGRzYW1xMDcxNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTA3MTUgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RS0zICAtPiAxCitkZHNhbXEwNzE2IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMEUtMyAgLT4gMQorZGRzYW1xMDcxNyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTA3MTggc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRSszICAtPiAwCitkZHNhbXEwNzE5IHNhbWVxdWFudHVtICAtMEUtMyAgICAgMEUtMyAgLT4gMQorZGRzYW1xMDcyMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTA3MjEgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRSszICAtPiAwCitkZHNhbXEwNzIyIHNhbWVxdWFudHVtICAtMEUtMyAgICAgN0UtMyAgLT4gMQorZGRzYW1xMDcyMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTA3MjQgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RSszICAtPiAwCitkZHNhbXEwNzI1IHNhbWVxdWFudHVtICAtMEUtMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXEwODEwIHNhbWVxdWFudHVtICAtMCAgICAgIC1JbmYgICAtPiAwCitkZHNhbXEwODExIHNhbWVxdWFudHVtICAtMCAgICAgICBJbmYgICAtPiAwCitkZHNhbXEwODEyIHNhbWVxdWFudHVtICAtMCAgICAgICBOYU4gICAtPiAwCitkZHNhbXEwODEzIHNhbWVxdWFudHVtICAtMCAgICAgIC03RSszICAtPiAwCitkZHNhbXEwODE0IHNhbWVxdWFudHVtICAtMCAgICAgIC03ICAgICAtPiAxCitkZHNhbXEwODE1IHNhbWVxdWFudHVtICAtMCAgICAgIC03RS0zICAtPiAwCitkZHNhbXEwODE2IHNhbWVxdWFudHVtICAtMCAgICAgIC0wRS0zICAtPiAwCitkZHNhbXEwODE3IHNhbWVxdWFudHVtICAtMCAgICAgIC0wICAgICAtPiAxCitkZHNhbXEwODE4IHNhbWVxdWFudHVtICAtMCAgICAgIC0wRSszICAtPiAwCitkZHNhbXEwODE5IHNhbWVxdWFudHVtICAtMCAgICAgICAwRS0zICAtPiAwCitkZHNhbXEwODIwIHNhbWVxdWFudHVtICAtMCAgICAgICAwICAgICAtPiAxCitkZHNhbXEwODIxIHNhbWVxdWFudHVtICAtMCAgICAgICAwRSszICAtPiAwCitkZHNhbXEwODIyIHNhbWVxdWFudHVtICAtMCAgICAgICA3RS0zICAtPiAwCitkZHNhbXEwODIzIHNhbWVxdWFudHVtICAtMCAgICAgICA3ICAgICAtPiAxCitkZHNhbXEwODI0IHNhbWVxdWFudHVtICAtMCAgICAgICA3RSszICAtPiAwCitkZHNhbXEwODI1IHNhbWVxdWFudHVtICAtMCAgICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTA5MTAgc2FtZXF1YW50dW0gIC0wRSszICAgIC1JbmYgICAtPiAwCitkZHNhbXEwOTExIHNhbWVxdWFudHVtICAtMEUrMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMDkxMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTA5MTMgc2FtZXF1YW50dW0gIC0wRSszICAgIC03RSszICAtPiAxCitkZHNhbXEwOTE0IHNhbWVxdWFudHVtICAtMEUrMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMDkxNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTA5MTYgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wRS0zICAtPiAwCitkZHNhbXEwOTE3IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMDkxOCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFKzMgIC0+IDEKK2Rkc2FtcTA5MTkgc2FtZXF1YW50dW0gIC0wRSszICAgICAwRS0zICAtPiAwCitkZHNhbXEwOTIwIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMDkyMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFKzMgIC0+IDEKK2Rkc2FtcTA5MjIgc2FtZXF1YW50dW0gIC0wRSszICAgICA3RS0zICAtPiAwCitkZHNhbXEwOTIzIHNhbWVxdWFudHVtICAtMEUrMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMDkyNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFKzMgIC0+IDEKK2Rkc2FtcTA5MjUgc2FtZXF1YW50dW0gIC0wRSszICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTExMTAgc2FtZXF1YW50dW0gIDBFLTMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTExMTEgc2FtZXF1YW50dW0gIDBFLTMgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTExMTIgc2FtZXF1YW50dW0gIDBFLTMgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTExMTMgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTExMTQgc2FtZXF1YW50dW0gIDBFLTMgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTExMTUgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFLTMgIC0+IDEKK2Rkc2FtcTExMTYgc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFLTMgIC0+IDEKK2Rkc2FtcTExMTcgc2FtZXF1YW50dW0gIDBFLTMgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTExMTggc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTExMTkgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFLTMgIC0+IDEKK2Rkc2FtcTExMjAgc2FtZXF1YW50dW0gIDBFLTMgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTExMjEgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTExMjIgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFLTMgIC0+IDEKK2Rkc2FtcTExMjMgc2FtZXF1YW50dW0gIDBFLTMgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTExMjQgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTExMjUgc2FtZXF1YW50dW0gIDBFLTMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMTIxMCBzYW1lcXVhbnR1bSAgMCAgICAgICAtSW5mICAgLT4gMAorZGRzYW1xMTIxMSBzYW1lcXVhbnR1bSAgMCAgICAgICAgSW5mICAgLT4gMAorZGRzYW1xMTIxMiBzYW1lcXVhbnR1bSAgMCAgICAgICAgTmFOICAgLT4gMAorZGRzYW1xMTIxMyBzYW1lcXVhbnR1bSAgMCAgICAgICAtN0UrMyAgLT4gMAorZGRzYW1xMTIxNCBzYW1lcXVhbnR1bSAgMCAgICAgICAtNyAgICAgLT4gMQorZGRzYW1xMTIxNSBzYW1lcXVhbnR1bSAgMCAgICAgICAtN0UtMyAgLT4gMAorZGRzYW1xMTIxNiBzYW1lcXVhbnR1bSAgMCAgICAgICAtMEUtMyAgLT4gMAorZGRzYW1xMTIxNyBzYW1lcXVhbnR1bSAgMCAgICAgICAtMCAgICAgLT4gMQorZGRzYW1xMTIxOCBzYW1lcXVhbnR1bSAgMCAgICAgICAtMEUrMyAgLT4gMAorZGRzYW1xMTIxOSBzYW1lcXVhbnR1bSAgMCAgICAgICAgMEUtMyAgLT4gMAorZGRzYW1xMTIyMCBzYW1lcXVhbnR1bSAgMCAgICAgICAgMCAgICAgLT4gMQorZGRzYW1xMTIyMSBzYW1lcXVhbnR1bSAgMCAgICAgICAgMEUrMyAgLT4gMAorZGRzYW1xMTIyMiBzYW1lcXVhbnR1bSAgMCAgICAgICAgN0UtMyAgLT4gMAorZGRzYW1xMTIyMyBzYW1lcXVhbnR1bSAgMCAgICAgICAgNyAgICAgLT4gMQorZGRzYW1xMTIyNCBzYW1lcXVhbnR1bSAgMCAgICAgICAgN0UrMyAgLT4gMAorZGRzYW1xMTIyNSBzYW1lcXVhbnR1bSAgMCAgICAgICAgc05hTiAgLT4gMAorCitkZHNhbXExMzEwIHNhbWVxdWFudHVtICAwRSszICAgIC1JbmYgICAtPiAwCitkZHNhbXExMzExIHNhbWVxdWFudHVtICAwRSszICAgICBJbmYgICAtPiAwCitkZHNhbXExMzEyIHNhbWVxdWFudHVtICAwRSszICAgICBOYU4gICAtPiAwCitkZHNhbXExMzEzIHNhbWVxdWFudHVtICAwRSszICAgIC03RSszICAtPiAxCitkZHNhbXExMzE0IHNhbWVxdWFudHVtICAwRSszICAgIC03ICAgICAtPiAwCitkZHNhbXExMzE1IHNhbWVxdWFudHVtICAwRSszICAgIC03RS0zICAtPiAwCitkZHNhbXExMzE2IHNhbWVxdWFudHVtICAwRSszICAgIC0wRS0zICAtPiAwCitkZHNhbXExMzE3IHNhbWVxdWFudHVtICAwRSszICAgIC0wICAgICAtPiAwCitkZHNhbXExMzE4IHNhbWVxdWFudHVtICAwRSszICAgIC0wRSszICAtPiAxCitkZHNhbXExMzE5IHNhbWVxdWFudHVtICAwRSszICAgICAwRS0zICAtPiAwCitkZHNhbXExMzIwIHNhbWVxdWFudHVtICAwRSszICAgICAwICAgICAtPiAwCitkZHNhbXExMzIxIHNhbWVxdWFudHVtICAwRSszICAgICAwRSszICAtPiAxCitkZHNhbXExMzIyIHNhbWVxdWFudHVtICAwRSszICAgICA3RS0zICAtPiAwCitkZHNhbXExMzIzIHNhbWVxdWFudHVtICAwRSszICAgICA3ICAgICAtPiAwCitkZHNhbXExMzI0IHNhbWVxdWFudHVtICAwRSszICAgICA3RSszICAtPiAxCitkZHNhbXExMzI1IHNhbWVxdWFudHVtICAwRSszICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTE0MTAgc2FtZXF1YW50dW0gIDdFLTMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTE0MTEgc2FtZXF1YW50dW0gIDdFLTMgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTE0MTIgc2FtZXF1YW50dW0gIDdFLTMgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTE0MTMgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTE0MTQgc2FtZXF1YW50dW0gIDdFLTMgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTE0MTUgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFLTMgIC0+IDEKK2Rkc2FtcTE0MTYgc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFLTMgIC0+IDEKK2Rkc2FtcTE0MTcgc2FtZXF1YW50dW0gIDdFLTMgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTE0MTggc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTE0MTkgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFLTMgIC0+IDEKK2Rkc2FtcTE0MjAgc2FtZXF1YW50dW0gIDdFLTMgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTE0MjEgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTE0MjIgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFLTMgIC0+IDEKK2Rkc2FtcTE0MjMgc2FtZXF1YW50dW0gIDdFLTMgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTE0MjQgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTE0MjUgc2FtZXF1YW50dW0gIDdFLTMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMTUxMCBzYW1lcXVhbnR1bSAgNyAgICAgIC1JbmYgICAtPiAwCitkZHNhbXExNTExIHNhbWVxdWFudHVtICA3ICAgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTE1MTIgc2FtZXF1YW50dW0gIDcgICAgICAgTmFOICAgLT4gMAorZGRzYW1xMTUxMyBzYW1lcXVhbnR1bSAgNyAgICAgIC03RSszICAtPiAwCitkZHNhbXExNTE0IHNhbWVxdWFudHVtICA3ICAgICAgLTcgICAgIC0+IDEKK2Rkc2FtcTE1MTUgc2FtZXF1YW50dW0gIDcgICAgICAtN0UtMyAgLT4gMAorZGRzYW1xMTUxNiBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRS0zICAtPiAwCitkZHNhbXExNTE3IHNhbWVxdWFudHVtICA3ICAgICAgLTAgICAgIC0+IDEKK2Rkc2FtcTE1MTggc2FtZXF1YW50dW0gIDcgICAgICAtMEUrMyAgLT4gMAorZGRzYW1xMTUxOSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRS0zICAtPiAwCitkZHNhbXExNTIwIHNhbWVxdWFudHVtICA3ICAgICAgIDAgICAgIC0+IDEKK2Rkc2FtcTE1MjEgc2FtZXF1YW50dW0gIDcgICAgICAgMEUrMyAgLT4gMAorZGRzYW1xMTUyMiBzYW1lcXVhbnR1bSAgNyAgICAgICA3RS0zICAtPiAwCitkZHNhbXExNTIzIHNhbWVxdWFudHVtICA3ICAgICAgIDcgICAgIC0+IDEKK2Rkc2FtcTE1MjQgc2FtZXF1YW50dW0gIDcgICAgICAgN0UrMyAgLT4gMAorZGRzYW1xMTUyNSBzYW1lcXVhbnR1bSAgNyAgICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTE2MTAgc2FtZXF1YW50dW0gIDdFKzMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTE2MTEgc2FtZXF1YW50dW0gIDdFKzMgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTE2MTIgc2FtZXF1YW50dW0gIDdFKzMgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTE2MTMgc2FtZXF1YW50dW0gIDdFKzMgICAgLTdFKzMgIC0+IDEKK2Rkc2FtcTE2MTQgc2FtZXF1YW50dW0gIDdFKzMgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTE2MTUgc2FtZXF1YW50dW0gIDdFKzMgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTE2MTYgc2FtZXF1YW50dW0gIDdFKzMgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTE2MTcgc2FtZXF1YW50dW0gIDdFKzMgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTE2MTggc2FtZXF1YW50dW0gIDdFKzMgICAgLTBFKzMgIC0+IDEKK2Rkc2FtcTE2MTkgc2FtZXF1YW50dW0gIDdFKzMgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTE2MjAgc2FtZXF1YW50dW0gIDdFKzMgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTE2MjEgc2FtZXF1YW50dW0gIDdFKzMgICAgIDBFKzMgIC0+IDEKK2Rkc2FtcTE2MjIgc2FtZXF1YW50dW0gIDdFKzMgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTE2MjMgc2FtZXF1YW50dW0gIDdFKzMgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTE2MjQgc2FtZXF1YW50dW0gIDdFKzMgICAgIDdFKzMgIC0+IDEKK2Rkc2FtcTE2MjUgc2FtZXF1YW50dW0gIDdFKzMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMTcxMCBzYW1lcXVhbnR1bSAgc05hTiAgICAtSW5mICAgLT4gMAorZGRzYW1xMTcxMSBzYW1lcXVhbnR1bSAgc05hTiAgICAgSW5mICAgLT4gMAorZGRzYW1xMTcxMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgTmFOICAgLT4gMQorZGRzYW1xMTcxMyBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UrMyAgLT4gMAorZGRzYW1xMTcxNCBzYW1lcXVhbnR1bSAgc05hTiAgICAtNyAgICAgLT4gMAorZGRzYW1xMTcxNSBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UtMyAgLT4gMAorZGRzYW1xMTcxNiBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUtMyAgLT4gMAorZGRzYW1xMTcxNyBzYW1lcXVhbnR1bSAgc05hTiAgICAtMCAgICAgLT4gMAorZGRzYW1xMTcxOCBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUrMyAgLT4gMAorZGRzYW1xMTcxOSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUtMyAgLT4gMAorZGRzYW1xMTcyMCBzYW1lcXVhbnR1bSAgc05hTiAgICAgMCAgICAgLT4gMAorZGRzYW1xMTcyMSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUrMyAgLT4gMAorZGRzYW1xMTcyMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UtMyAgLT4gMAorZGRzYW1xMTcyMyBzYW1lcXVhbnR1bSAgc05hTiAgICAgNyAgICAgLT4gMAorZGRzYW1xMTcyNCBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UrMyAgLT4gMAorZGRzYW1xMTcyNSBzYW1lcXVhbnR1bSAgc05hTiAgICAgc05hTiAgLT4gMQorLS0gbm9pc3kgTmFOcworZGRzYW1xMTczMCBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjMgLT4gMQorZGRzYW1xMTczMSBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjQgLT4gMQorZGRzYW1xMTczMiBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIE5hTjMgLT4gMQorZGRzYW1xMTczMyBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIE5hTjQgLT4gMQorZGRzYW1xMTczNCBzYW1lcXVhbnR1bSAgc05hTjMgICAgIDMgICAgLT4gMAorZGRzYW1xMTczNSBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIDMgICAgLT4gMAorZGRzYW1xMTczNiBzYW1lcXVhbnR1bSAgICAgIDQgICAgc05hTjQgLT4gMAorZGRzYW1xMTczNyBzYW1lcXVhbnR1bSAgICAgIDMgICAgIE5hTjMgLT4gMAorZGRzYW1xMTczOCBzYW1lcXVhbnR1bSAgICBJbmYgICAgc05hTjQgLT4gMAorZGRzYW1xMTczOSBzYW1lcXVhbnR1bSAgIC1JbmYgICAgIE5hTjMgLT4gMAorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2NhbGVCLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2NhbGVCLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlZTExYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTY2FsZUIuZGVjVGVzdApAQCAtMCwwICsxLDI0MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFNjYWxlYkIuZGVjVGVzdCAtLSBzY2FsZSBhIGRlY0RvdWJsZSBieSBwb3dlcnMgb2YgMTAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBNYXggfHJoc3wgaXMgMiooMzg0KzE2KSA9IDgwMAorCistLSBTYW5pdHkgY2hlY2tzCitkZHNjYjAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwCitkZHNjYjAwMiBzY2FsZWIgICAgICAgNy41MCAgICAzIC0+IDcuNTBFKzMKK2Rkc2NiMDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwCitkZHNjYjAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjAKK2Rkc2NiMDA1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgLT4gNy41MAorZGRzY2IwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MAorZGRzY2IwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTAKK2Rkc2NiMDA4IHNjYWxlYiAgICAgICA3LjUwICAtMTAgLT4gNy41MEUtMTAKK2Rkc2NiMDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMKK2Rkc2NiMDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MAorZGRzY2IwMTEgc2NhbGViICAgICAgLTcuNTAgICAgMSAtPiAtNzUuMAorZGRzY2IwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MAorZGRzY2IwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTAKKworLS0gSW5maW5pdGllcworZGRzY2IwMTQgc2NhbGViICBJbmZpbml0eSAgIDEgLT4gSW5maW5pdHkKK2Rkc2NiMDE1IHNjYWxlYiAgLUluZmluaXR5ICAyIC0+IC1JbmZpbml0eQorZGRzY2IwMTYgc2NhbGViICBJbmZpbml0eSAgLTEgLT4gSW5maW5pdHkKK2Rkc2NiMDE3IHNjYWxlYiAgLUluZmluaXR5IC0yIC0+IC1JbmZpbml0eQorCistLSBOZXh0IHR3byBhcmUgc29tZXdoYXQgdW5kZWZpbmVkIGluIDc1NHI7IHRyZWF0IGFzIG5vbi1pbnRlZ2VyCitkZHNjYjAxOCBzY2FsZWIgIDEwICBJbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDE5IHNjYWxlYiAgMTAgLUluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRzY2IwMjEgc2NhbGViICAgICAgICAgTmFOICAxIC0+IE5hTgorZGRzY2IwMjIgc2NhbGViICAgICAgICAtTmFOIC0xIC0+IC1OYU4KK2Rkc2NiMDIzIHNjYWxlYiAgICAgICAgc05hTiAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDI0IHNjYWxlYiAgICAgICAtc05hTiAgMSAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjAyNSBzY2FsZWIgICAgNCAgICBOYU4gICAgLT4gTmFOCitkZHNjYjAyNiBzY2FsZWIgLUluZiAgIC1OYU4gICAgLT4gLU5hTgorZGRzY2IwMjcgc2NhbGViICAgIDQgICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMjggc2NhbGViICBJbmYgIC1zTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gbm9uLWludGVnZXIgUkhTCitkZHNjYjAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMworZGRzY2IwMzEgc2NhbGViICAxLjIzICAgIDEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzQgc2NhbGViICAxLjIzICAgIDAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM3IHNjYWxlYiAgMS4yMyAgIC0xICAgIC0+ICAwLjEyMworZGRzY2IwMzggc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMzkgc2NhbGViICAxLjIzICAgLTEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDAgc2NhbGViICAxLjIzICAgLTEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDIgc2NhbGViICAxLjIzICAgLTAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDMgc2NhbGViICAxLjIzICAgLTAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjA0NSBzY2FsZWIgIDEuMjMgICAgMUUrMSAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDYgc2NhbGViICAxLjIzICAgIDEuMTIzNEUrNiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG91dC1vZiByYW5nZSBSSFMKK2Rkc2NiMTIwIHNjYWxlYiAgMS4yMyAgICA3OTkgICAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZHNjYjEyMSBzY2FsZWIgIDEuMjMgICAgODAwICAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMjIgc2NhbGViICAxLjIzICAgIDgwMSAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMTIzIHNjYWxlYiAgMS4yMyAgICA4MDIgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjEyNCBzY2FsZWIgIDEuMjMgICAtNzk5ICAgICAgICAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZHNjYjEyNSBzY2FsZWIgIDEuMjMgICAtODAwICAgICAgICAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZHNjYjEyNiBzY2FsZWIgIDEuMjMgICAtODAxICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IxMjcgc2NhbGViICAxLjIzICAgLTgwMiAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorLS0gcHJvcGFnYXRpbmcgTmFOcworZGRzY2I4NjEgc2NhbGViICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xCitkZHNjYjg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKK2Rkc2NiODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMworZGRzY2I4NjQgc2NhbGViICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40CitkZHNjYjg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKK2Rkc2NiODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzEKK2Rkc2NiODY3IHNjYWxlYiAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODEKK2Rkc2NiODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKK2Rkc2NiODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxCitkZHNjYjg3MSBzY2FsZWIgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3NCBzY2FsZWIgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3NyBzY2FsZWIgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg4MCBzY2FsZWIgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZGRzY2IwNTEgc2NhbGViICAgICAgICAgIDcgICAtMiAgLT4gMC4wNworZGRzY2IwNTIgc2NhbGViICAgICAgICAgLTcgICAtMiAgLT4gLTAuMDcKK2Rkc2NiMDUzIHNjYWxlYiAgICAgICAgIDc1ICAgLTIgIC0+IDAuNzUKK2Rkc2NiMDU0IHNjYWxlYiAgICAgICAgLTc1ICAgLTIgIC0+IC0wLjc1CitkZHNjYjA1NSBzY2FsZWIgICAgICAgNy41MCAgIC0yICAtPiAwLjA3NTAKK2Rkc2NiMDU2IHNjYWxlYiAgICAgIC03LjUwICAgLTIgIC0+IC0wLjA3NTAKK2Rkc2NiMDU3IHNjYWxlYiAgICAgICA3LjUwMCAgLTIgIC0+IDAuMDc1MDAKK2Rkc2NiMDU4IHNjYWxlYiAgICAgIC03LjUwMCAgLTIgIC0+IC0wLjA3NTAwCitkZHNjYjA2MSBzY2FsZWIgICAgICAgICAgNyAgIC0xICAtPiAwLjcKK2Rkc2NiMDYyIHNjYWxlYiAgICAgICAgIC03ICAgLTEgIC0+IC0wLjcKK2Rkc2NiMDYzIHNjYWxlYiAgICAgICAgIDc1ICAgLTEgIC0+IDcuNQorZGRzY2IwNjQgc2NhbGViICAgICAgICAtNzUgICAtMSAgLT4gLTcuNQorZGRzY2IwNjUgc2NhbGViICAgICAgIDcuNTAgICAtMSAgLT4gMC43NTAKK2Rkc2NiMDY2IHNjYWxlYiAgICAgIC03LjUwICAgLTEgIC0+IC0wLjc1MAorZGRzY2IwNjcgc2NhbGViICAgICAgIDcuNTAwICAtMSAgLT4gMC43NTAwCitkZHNjYjA2OCBzY2FsZWIgICAgICAtNy41MDAgIC0xICAtPiAtMC43NTAwCitkZHNjYjA3MSBzY2FsZWIgICAgICAgICAgNyAgICAwICAtPiA3CitkZHNjYjA3MiBzY2FsZWIgICAgICAgICAtNyAgICAwICAtPiAtNworZGRzY2IwNzMgc2NhbGViICAgICAgICAgNzUgICAgMCAgLT4gNzUKK2Rkc2NiMDc0IHNjYWxlYiAgICAgICAgLTc1ICAgIDAgIC0+IC03NQorZGRzY2IwNzUgc2NhbGViICAgICAgIDcuNTAgICAgMCAgLT4gNy41MAorZGRzY2IwNzYgc2NhbGViICAgICAgLTcuNTAgICAgMCAgLT4gLTcuNTAKK2Rkc2NiMDc3IHNjYWxlYiAgICAgICA3LjUwMCAgIDAgIC0+IDcuNTAwCitkZHNjYjA3OCBzY2FsZWIgICAgICAtNy41MDAgICAwICAtPiAtNy41MDAKK2Rkc2NiMDgxIHNjYWxlYiAgICAgICAgICA3ICAgIDEgIC0+IDdFKzEKK2Rkc2NiMDgyIHNjYWxlYiAgICAgICAgIC03ICAgIDEgIC0+IC03RSsxCitkZHNjYjA4MyBzY2FsZWIgICAgICAgICA3NSAgICAxICAtPiA3LjVFKzIKK2Rkc2NiMDg0IHNjYWxlYiAgICAgICAgLTc1ICAgIDEgIC0+IC03LjVFKzIKK2Rkc2NiMDg1IHNjYWxlYiAgICAgICA3LjUwICAgIDEgIC0+IDc1LjAKK2Rkc2NiMDg2IHNjYWxlYiAgICAgIC03LjUwICAgIDEgIC0+IC03NS4wCitkZHNjYjA4NyBzY2FsZWIgICAgICAgNy41MDAgICAxICAtPiA3NS4wMAorZGRzY2IwODggc2NhbGViICAgICAgLTcuNTAwICAgMSAgLT4gLTc1LjAwCitkZHNjYjA5MSBzY2FsZWIgICAgICAgICAgNyAgICAyICAtPiA3RSsyCitkZHNjYjA5MiBzY2FsZWIgICAgICAgICAtNyAgICAyICAtPiAtN0UrMgorZGRzY2IwOTMgc2NhbGViICAgICAgICAgNzUgICAgMiAgLT4gNy41RSszCitkZHNjYjA5NCBzY2FsZWIgICAgICAgIC03NSAgICAyICAtPiAtNy41RSszCitkZHNjYjA5NSBzY2FsZWIgICAgICAgNy41MCAgICAyICAtPiA3NTAKK2Rkc2NiMDk2IHNjYWxlYiAgICAgIC03LjUwICAgIDIgIC0+IC03NTAKK2Rkc2NiMDk3IHNjYWxlYiAgICAgICA3LjUwMCAgIDIgIC0+IDc1MC4wCitkZHNjYjA5OCBzY2FsZWIgICAgICAtNy41MDAgICAyICAtPiAtNzUwLjAKKworLS0gemVyb3MKK2Rkc2NiMTExIHNjYWxlYiAgICAgICAgICAwICAxIC0+IDBFKzEKK2Rkc2NiMTEyIHNjYWxlYiAgICAgICAgIC0wICAyIC0+IC0wRSsyCitkZHNjYjExMyBzY2FsZWIgICAgICAgMEUrNCAgMyAtPiAwRSs3CitkZHNjYjExNCBzY2FsZWIgICAgICAtMEUrNCAgNCAtPiAtMEUrOAorZGRzY2IxMTUgc2NhbGViICAgICAwLjAwMDAgIDUgLT4gMEUrMQorZGRzY2IxMTYgc2NhbGViICAgIC0wLjAwMDAgIDYgLT4gLTBFKzIKK2Rkc2NiMTE3IHNjYWxlYiAgICAgIDBFLTE0MSA3IC0+IDBFLTEzNAorZGRzY2IxMTggc2NhbGViICAgICAtMEUtMTQxIDggLT4gLTBFLTEzMworCistLSBObWF4LCBObWluLCBOdGlueQorZGRzY2IxMzIgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICArMzg0IC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMzMgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICArMTAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMzQgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMzUgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgMCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRzY2IxMzYgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4MworZGRzY2IxMzcgc2NhbGViICAxRS0zODMgICAgICAgICAgICsxICAtPiAxRS0zODIKK2Rkc2NiMTM4IHNjYWxlYiAgMUUtMzgzICAgICAgICAgICAtMCAgLT4gMUUtMzgzCitkZHNjYjEzOSBzY2FsZWIgIDFFLTM4MyAgICAgICAgICAgLTEgIC0+IDFFLTM4NCAgICAgICAgICBTdWJub3JtYWwKK2Rkc2NiMTQwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgKzEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODIKK2Rkc2NiMTQxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2Rkc2NiMTQyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IxNDMgc2NhbGViICAxRS0zOTggICAgICAgICAgKzEgIC0+IDFFLTM5NyAgICAgICAgICBTdWJub3JtYWwKK2Rkc2NiMTQ0IHNjYWxlYiAgMUUtMzk4ICAgICAgICAgIC0wICAtPiAxRS0zOTggICAgICAgICBTdWJub3JtYWwKK2Rkc2NiMTQ1IHNjYWxlYiAgMUUtMzk4ICAgICAgICAgIC0xICAtPiAwRS0zOTggICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2Rkc2NiMTUwIHNjYWxlYiAgLTFFLTM5OCAgICAgICAgICsxICAtPiAtMUUtMzk3ICAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE1MSBzY2FsZWIgIC0xRS0zOTggICAgICAgICAtMCAgLT4gLTFFLTM5OCAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE1MiBzY2FsZWIgIC0xRS0zOTggICAgICAgICAtMSAgLT4gLTBFLTM5OCAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRzY2IxNTMgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyArMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODIKK2Rkc2NiMTU0IHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgKzAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHNjYjE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjE1NiBzY2FsZWIgIC0xRS0zODMgICAgICAgICAgKzEgIC0+IC0xRS0zODIKK2Rkc2NiMTU3IHNjYWxlYiAgLTFFLTM4MyAgICAgICAgICAtMCAgLT4gLTFFLTM4MworZGRzY2IxNTggc2NhbGViICAtMUUtMzgzICAgICAgICAgIC0xICAtPiAtMUUtMzg0ICAgICAgICAgIFN1Ym5vcm1hbAorZGRzY2IxNTkgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTYwIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgKzAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHNjYjE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4MworZGRzY2IxNjIgc2NhbGViICAtOUUrMzg0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxNjMgc2NhbGViICAtMUUrMzg0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIE9yaWdhbWkKKy0tICh0aGVzZSBjaGVjayB0aGF0IG92ZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQorZGRzY2IxNzEgc2NhbGViICAgMTAwMEUrMzY1ICArMSAtPiAxLjAwMEUrMzY5CitkZHNjYjE3MiBzY2FsZWIgICAxMDAwRSszNjYgICsxIC0+IDEuMDAwRSszNzAKK2Rkc2NiMTczIHNjYWxlYiAgIDEwMDBFKzM2NyAgKzEgLT4gMS4wMDBFKzM3MQorZGRzY2IxNzQgc2NhbGViICAgMTAwMEUrMzY4ICArMSAtPiAxLjAwMEUrMzcyCitkZHNjYjE3NSBzY2FsZWIgICAxMDAwRSszNjkgICsxIC0+IDEuMDAwMEUrMzczICAgICAgICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxNzYgc2NhbGViICAgMTAwMEUrMzcwICArMSAtPiAxLjAwMDAwRSszNzQgICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTc3IHNjYWxlYiAgIDEwMDBFKzM3MSAgKzEgLT4gMS4wMDAwMDBFKzM3NSAgICAgICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE3OCBzY2FsZWIgICAxMDAwRSszNzIgICsxIC0+IDEuMDAwMDAwMEUrMzc2ICAgICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxNzkgc2NhbGViICAgMTAwMEUrMzczICArMSAtPiAxLjAwMDAwMDAwRSszNzcgICAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTgwIHNjYWxlYiAgIDEwMDBFKzM3NCAgKzEgLT4gMS4wMDAwMDAwMDBFKzM3OCAgICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE4MSBzY2FsZWIgICAxMDAwRSszNzUgICsxIC0+IDEuMDAwMDAwMDAwMEUrMzc5ICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxODIgc2NhbGViICAgMTAwMEUrMzc2ICArMSAtPiAxLjAwMDAwMDAwMDAwRSszODAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTgzIHNjYWxlYiAgIDEwMDBFKzM3NyAgKzEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgICAgICAgICBDbGFtcGVkCitkZHNjYjE4NCBzY2FsZWIgICAxMDAwRSszNzggICsxIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyICAgICAgICAgQ2xhbXBlZAorZGRzY2IxODUgc2NhbGViICAgMTAwMEUrMzc5ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgICAgICAgIENsYW1wZWQKK2Rkc2NiMTg2IHNjYWxlYiAgIDEwMDBFKzM4MCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgICAgICBDbGFtcGVkCitkZHNjYjE4NyBzY2FsZWIgICAxMDAwRSszODEgICsxIC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgYSBmZXcgbW9yZSBzdWJub3JtYWwgdHJ1bmNhdGlvbnMKKy0tICh0aGVzZSBjaGVjayB0aGF0IHVuZGVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkKK2Rkc2NiMjAxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2Rkc2NiMjAyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMDMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMiAgLT4gMS4wMDAwMDAwMDAwMDAwRS0zODUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTMgIC0+IDEuMDAwMDAwMDAwMDAwRS0zODYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTQgIC0+IDEuMDAwMDAwMDAwMDBFLTM4NyBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMDYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNSAgLT4gMS4wMDAwMDAwMDAwRS0zODggU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTYgIC0+IDEuMDAwMDAwMDAwRS0zODkgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTcgIC0+IDEuMDAwMDAwMDBFLTM5MCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMDkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtOCAgLT4gMS4wMDAwMDAwRS0zOTEgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjEwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTkgIC0+IDEuMDAwMDAwRS0zOTIgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjExIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEwIC0+IDEuMDAwMDBFLTM5MyBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMTIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTEgLT4gMS4wMDAwRS0zOTQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjEzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEyIC0+IDEuMDAwRS0zOTUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjE0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEzIC0+IDEuMDBFLTM5NiBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMTUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTQgLT4gMS4wRS0zOTcgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjE2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE1IC0+IDFFLTM5OCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IyMTcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTYgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rkc2NiMjE4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE3IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTaGlmdC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNoaWZ0LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYTIzNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTaGlmdC5kZWNUZXN0CkBAIC0wLDAgKzEsMjYyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkU2hpZnQuZGVjVGVzdCAtLSBzaGlmdCBkZWNEb3VibGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRzaGkwMDEgc2hpZnQgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKK2Rkc2hpMDAyIHNoaWZ0ICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwCitkZHNoaTAwMyBzaGlmdCAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwCitkZHNoaTAwNCBzaGlmdCAgICAgICAgICAgICAgICAgMSAgIDE1ICAtPiAgMTAwMDAwMDAwMDAwMDAwMAorZGRzaGkwMDUgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAxNiAgLT4gIDAKK2Rkc2hpMDA2IHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAwCitkZHNoaTAwNyBzaGlmdCAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAorZGRzaGkwMDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMSAgLT4gIDEyMzQ1Njc4OTAxMjM0NQorZGRzaGkwMDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDEKK2Rkc2hpMDEwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICAwCitkZHNoaTAxMSBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgOQorZGRzaGkwMTIgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDAKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorZGRzaGkwMTUgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMTYgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMTcgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMTggc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMTkgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjAgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjEgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjIgc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgorZGRzaGkwMjUgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjYgc2hpZnQgICAgICAgIDEgICAgLTE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjcgc2hpZnQgICAgICAgIDEgICAgIDE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjggc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4KK2Rkc2hpMDMwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE2ICAtPiAwCitkZHNoaTAzMSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNSAgLT4gMQorZGRzaGkwMzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTQgIC0+IDEyCitkZHNoaTAzMyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMyAgLT4gMTIzCitkZHNoaTAzNCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMiAgLT4gMTIzNAorZGRzaGkwMzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTEgIC0+IDEyMzQ1CitkZHNoaTAzNiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMCAgLT4gMTIzNDU2CitkZHNoaTAzNyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC05ICAgLT4gMTIzNDU2NworZGRzaGkwMzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtOCAgIC0+IDEyMzQ1Njc4CitkZHNoaTAzOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC03ICAgLT4gMTIzNDU2Nzg5CitkZHNoaTA0MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC02ICAgLT4gMTIzNDU2Nzg5MAorZGRzaGkwNDEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNSAgIC0+IDEyMzQ1Njc4OTAxCitkZHNoaTA0MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC00ICAgLT4gMTIzNDU2Nzg5MDEyCitkZHNoaTA0MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0zICAgLT4gMTIzNDU2Nzg5MDEyMworZGRzaGkwNDQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMiAgIC0+IDEyMzQ1Njc4OTAxMjM0CitkZHNoaTA0NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xICAgLT4gMTIzNDU2Nzg5MDEyMzQ1CitkZHNoaTA0NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorCitkZHNoaTA0NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRzaGkwNDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1NjAKK2Rkc2hpMDQ5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1NjAwCitkZHNoaTA1MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1NjAwMAorZGRzaGkwNTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1NjAwMDAKK2Rkc2hpMDUyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1NjAwMDAwCitkZHNoaTA1MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1NjAwMDAwMAorZGRzaGkwNTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1NjAwMDAwMDAKK2Rkc2hpMDU1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzggICAtPiA5MDEyMzQ1NjAwMDAwMDAwCitkZHNoaTA1NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs5ICAgLT4gIDEyMzQ1NjAwMDAwMDAwMAorZGRzaGkwNTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTAgIC0+IDEyMzQ1NjAwMDAwMDAwMDAKK2Rkc2hpMDU4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzExICAtPiAyMzQ1NjAwMDAwMDAwMDAwCitkZHNoaTA1OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMiAgLT4gMzQ1NjAwMDAwMDAwMDAwMAorZGRzaGkwNjAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTMgIC0+IDQ1NjAwMDAwMDAwMDAwMDAKK2Rkc2hpMDYxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE0ICAtPiA1NjAwMDAwMDAwMDAwMDAwCitkZHNoaTA2MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNSAgLT4gNjAwMDAwMDAwMDAwMDAwMAorZGRzaGkwNjMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTYgIC0+IDAKKworLS0gemVyb3MKK2Rkc2hpMDcwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwCitkZHNoaTA3MSBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMAorZGRzaGkwNzIgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDAKK2Rkc2hpMDczIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwCitkZHNoaTA3NCBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMAorZGRzaGkwNzUgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTAKK2Rkc2hpMDc2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwCitkZHNoaTA3NyBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMAorZGRzaGkwNzggc2hpZnQgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDAKK2Rkc2hpMDc5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwCitkZHNoaTA4MCBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMAorZGRzaGkwODEgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rkc2hpMTQxIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OUUrMzgzCitkZHNoaTE0MiBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTE1IC0+IDlFKzM2OQorZGRzaGkxNDMgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5MEUrMzg0CitkZHNoaTE0NCBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQKK2Rkc2hpMTQ1IHNoaWZ0ICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzgzCitkZHNoaTE0NiBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDBFLTM4MworZGRzaGkxNDcgc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM4MgorZGRzaGkxNDggc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHNoaTE1MSBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRzaGkxNTIgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAxRS0zOTgKK2Rkc2hpMTUzIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gMEUtMzk4CitkZHNoaTE1NCBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDBFLTM5OAorZGRzaGkxNTUgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkc2hpMTU2IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gOUUtMzk4CitkZHNoaTE1NyBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IDBFLTM5OAorZGRzaGkxNTggc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAwRS0zOTgKK2Rkc2hpMTYwIHNoaWZ0ICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzk4CitkZHNoaTE2MSBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDBFLTM5OAorZGRzaGkxNjIgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM5NworZGRzaGkxNjMgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCistLSAgbmVnYXRpdmVzCitkZHNoaTE3MSBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RSszODMKK2Rkc2hpMTcyIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gLTlFKzM2OQorZGRzaGkxNzMgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NAorZGRzaGkxNzQgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiAtOS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorZGRzaGkxNzUgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzgzCitkZHNoaTE3NiBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0wRS0zODMKK2Rkc2hpMTc3IHNoaWZ0IC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzgyCitkZHNoaTE3OCBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHNoaTE4MSBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkc2hpMTgyIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gLTFFLTM5OAorZGRzaGkxODMgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMEUtMzk4CitkZHNoaTE4NCBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC0wRS0zOTgKK2Rkc2hpMTg1IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRzaGkxODYgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtOUUtMzk4CitkZHNoaTE4NyBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IC0wRS0zOTgKK2Rkc2hpMTg4IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTBFLTM5OAorZGRzaGkxOTAgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzk4CitkZHNoaTE5MSBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0wRS0zOTgKK2Rkc2hpMTkyIHNoaWZ0IC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzk3CitkZHNoaTE5MyBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCisKKy0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykKK2Rkc2hpMjAxIHNoaWZ0ICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wCitkZHNoaTIwMiBzaGlmdCAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMAorZGRzaGkyMDMgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMAorZGRzaGkyMDQgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAxNSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAKK2Rkc2hpMjA1IHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgMTYgIC0+IC0wCitkZHNoaTIwNiBzaGlmdCAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMAorZGRzaGkyMDcgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTAKK2Rkc2hpMjA4IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+IC0xMjM0NTY3ODkwMTIzNDUKK2Rkc2hpMjA5IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC0xCitkZHNoaTIxMCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMAorZGRzaGkyMTEgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTkKK2Rkc2hpMjEyIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC0wCisKKworLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKK2Rkc2hpNzgxIHNoaWZ0IC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzgyIHNoaWZ0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzgzIHNoaWZ0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzg0IHNoaWZ0IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzg1IHNoaWZ0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzg2IHNoaWZ0IC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzg3IHNoaWZ0IC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzg4IHNoaWZ0IC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzg5IHNoaWZ0IC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzkwIHNoaWZ0IC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzkxIHNoaWZ0ICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzkyIHNoaWZ0ICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzkzIHNoaWZ0ICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzk0IHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRzaGk4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MDEgc2hpZnQgIEluZiAgLTggICAgIC0+IEluZmluaXR5CitkZHNoaTgwMiBzaGlmdCAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKK2Rkc2hpODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQorZGRzaGk4MDQgc2hpZnQgIEluZiAgIDAgICAgIC0+IEluZmluaXR5CitkZHNoaTgwNSBzaGlmdCAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKK2Rkc2hpODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQorZGRzaGk4MDcgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MDggc2hpZnQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTAgc2hpZnQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTEgc2hpZnQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTMgc2hpZnQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTQgc2hpZnQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHNoaTgyMSBzaGlmdCAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRzaGk4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rkc2hpODIzIHNoaWZ0ICBOYU4gLTEgICAgICAtPiAgTmFOCitkZHNoaTgyNCBzaGlmdCAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRzaGk4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2Rkc2hpODI2IHNoaWZ0ICBOYU4gIDEgICAgICAtPiAgTmFOCitkZHNoaTgyNyBzaGlmdCAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRzaGk4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rkc2hpODI5IHNoaWZ0ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzMCBzaGlmdCAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRzaGk4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODMyIHNoaWZ0IC0xICAgIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzMyBzaGlmdCAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRzaGk4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODM1IHNoaWZ0ICAxICAgIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzNiBzaGlmdCAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRzaGk4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRzaGk4NDEgc2hpZnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0MiBzaGlmdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQzIHNoaWZ0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDQgc2hpZnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0NSBzaGlmdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQ2IHNoaWZ0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDcgc2hpZnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0OCBzaGlmdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQ5IHNoaWZ0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTAgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1MSBzaGlmdCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODUyIHNoaWZ0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTMgc2hpZnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1NCBzaGlmdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODU1IHNoaWZ0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTYgc2hpZnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1NyBzaGlmdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODU4IHNoaWZ0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTkgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rkc2hpODYxIHNoaWZ0ICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZGRzaGk4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkZHNoaTg2MyBzaGlmdCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2Rkc2hpODY0IHNoaWZ0ICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZGRzaGk4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkZHNoaTg2NiBzaGlmdCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2Rkc2hpODY3IHNoaWZ0IC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZGRzaGk4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkZHNoaTg2OSBzaGlmdCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkZHNoaTg3MSBzaGlmdCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODczIHNoaWZ0ICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3NCBzaGlmdCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODc2IHNoaWZ0ICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3NyBzaGlmdCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODc5IHNoaWZ0ICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg4MCBzaGlmdCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODgyIHNoaWZ0IC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2Rkc2hpODgzIHNoaWZ0IC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkZHNoaTg4NSBzaGlmdCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFN1YnRyYWN0LmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU3VidHJhY3QuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJjNDg3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFN1YnRyYWN0LmRlY1Rlc3QKQEAgLTAsMCArMSw2MjkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRTdWJ0cmFjdC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY0RvdWJsZXMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNEb3VibGUKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2Rkc3ViMDAxIHN1YnRyYWN0ICAwICAgMCAgLT4gJzAnCitkZHN1YjAwMiBzdWJ0cmFjdCAgMSAgIDEgIC0+ICcwJworZGRzdWIwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnCitkZHN1YjAwNCBzdWJ0cmFjdCAgMiAgIDEgIC0+ICcxJworZGRzdWIwMDUgc3VidHJhY3QgIDIgICAyICAtPiAnMCcKK2Rkc3ViMDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnCitkZHN1YjAwNyBzdWJ0cmFjdCAgMiAgIDMgIC0+ICctMScKKworZGRzdWIwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnCitkZHN1YjAxMiBzdWJ0cmFjdCAtMSAgIDEgIC0+ICctMicKK2Rkc3ViMDEzIHN1YnRyYWN0IC0xICAgMiAgLT4gJy0zJworZGRzdWIwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnCitkZHN1YjAxNSBzdWJ0cmFjdCAtMiAgIDIgIC0+ICctNCcKK2Rkc3ViMDE2IHN1YnRyYWN0IC0zICAgMiAgLT4gJy01JworZGRzdWIwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnCisKK2Rkc3ViMDIxIHN1YnRyYWN0ICAwICAtMCAgLT4gJzAnCitkZHN1YjAyMiBzdWJ0cmFjdCAgMSAgLTEgIC0+ICcyJworZGRzdWIwMjMgc3VidHJhY3QgIDEgIC0yICAtPiAnMycKK2Rkc3ViMDI0IHN1YnRyYWN0ICAyICAtMSAgLT4gJzMnCitkZHN1YjAyNSBzdWJ0cmFjdCAgMiAgLTIgIC0+ICc0JworZGRzdWIwMjYgc3VidHJhY3QgIDMgIC0yICAtPiAnNScKK2Rkc3ViMDI3IHN1YnRyYWN0ICAyICAtMyAgLT4gJzUnCisKK2Rkc3ViMDMwIHN1YnRyYWN0ICAxMSAgMSAgLT4gMTAKK2Rkc3ViMDMxIHN1YnRyYWN0ICAxMCAgMSAgLT4gIDkKK2Rkc3ViMDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgKK2Rkc3ViMDMzIHN1YnRyYWN0ICAxICAgMSAgLT4gIDAKK2Rkc3ViMDM0IHN1YnRyYWN0ICAwICAgMSAgLT4gLTEKK2Rkc3ViMDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTIKK2Rkc3ViMDM2IHN1YnRyYWN0IC05ICAgMSAgLT4gLTEwCitkZHN1YjAzNyBzdWJ0cmFjdCAtMTAgIDEgIC0+IC0xMQorZGRzdWIwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTIKKworZGRzdWIwNDAgc3VidHJhY3QgJzUuNzUnICczLjMnICAtPiAnMi40NScKK2Rkc3ViMDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnCitkZHN1YjA0MiBzdWJ0cmFjdCAnLTUnICAgJy0zJyAgIC0+ICctMicKK2Rkc3ViMDQzIHN1YnRyYWN0ICctNycgICAnMi41JyAgLT4gJy05LjUnCitkZHN1YjA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnCitkZHN1YjA0NSBzdWJ0cmFjdCAnMS4zJyAgJzAuMycgIC0+ICcxLjAnCitkZHN1YjA0NiBzdWJ0cmFjdCAnMS4yNScgJzEuMjUnIC0+ICcwLjAwJworCitkZHN1YjA1MCBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwMDAnIC0+ICcwLjIzNDU2Nzg5JworZGRzdWIwNTEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDg5JyAtPiAnMC4yMzQ1NjcwMCcKKworZGRzdWIwNjAgc3VidHJhY3QgJzcwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2MSBzdWJ0cmFjdCAnNzAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSsxNicgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OUUrMTknIEluZXhhY3QgUm91bmRlZAorZGRzdWIwNjMgc3VidHJhY3QgJzcwMDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTkzRSsxOScgUm91bmRlZAorZGRzdWIwNjQgc3VidHJhY3QgJzcwMDAwMCcgICAgJzEwMDAwZSsxNicgLT4gJy05Ljk5OTk5OTk5OTk5OTkzMEUrMTknIFJvdW5kZWQKKyAgLS0gc3ltbWV0cnk6CitkZHN1YjA2NSBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRzdWIwNjYgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2NyBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5RSsxOScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2OCBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5M0UrMTknIFJvdW5kZWQKK2Rkc3ViMDY5IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MDAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTkzMEUrMTknIFJvdW5kZWQKKworICAtLSBzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHMKK2Rkc3ViMDkwIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wJyAgLT4gJzAuMCcKK2Rkc3ViMDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnCitkZHN1YjA5MiBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJworZGRzdWIwOTMgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcKK2Rkc3ViMDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCitkZHN1YjA5NSBzdWJ0cmFjdCAnMycgICAgJy4zJyAgIC0+ICcyLjcnCitkZHN1YjA5NiBzdWJ0cmFjdCAnMy4nICAgJy4zJyAgIC0+ICcyLjcnCitkZHN1YjA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnCitkZHN1YjA5OCBzdWJ0cmFjdCAnMy4wMCcgJy4zJyAgIC0+ICcyLjcwJworZGRzdWIwOTkgc3VidHJhY3QgJzMnICAgICczJyAgICAtPiAnMCcKK2Rkc3ViMTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnCitkZHN1YjEwMSBzdWJ0cmFjdCAnMycgICAgJy0zJyAgIC0+ICc2JworZGRzdWIxMDIgc3VidHJhY3QgJzMnICAgICcwLjMnICAtPiAnMi43JworZGRzdWIxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43JworZGRzdWIxMDQgc3VidHJhY3QgJzMuMCcgICcwLjMnICAtPiAnMi43JworZGRzdWIxMDUgc3VidHJhY3QgJzMuMDAnICcwLjMnICAtPiAnMi43MCcKK2Rkc3ViMTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcKK2Rkc3ViMTA3IHN1YnRyYWN0ICczJyAgICAnKzMuMCcgLT4gJzAuMCcKK2Rkc3ViMTA4IHN1YnRyYWN0ICczJyAgICAnLTMuMCcgLT4gJzYuMCcKKworLS0gdGhlIGFib3ZlIGFsbCBmcm9tIGFkZDsgbWFzc2FnZWQgYW5kIGV4dGVuZGVkLiAgTm93IHNvbWUgbmV3IG9uZXMuLi4KKy0tIFtwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBjb21wYXJpc29uc10KKy0tIE5COiAteEUtOCBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kgWDMtMjc0LCBhbmQgLTFFLTcgb3IgMEUtNworLS0gd2l0aCBpbnB1dCByb3VuZGluZy4KK2Rkc3ViMTIwIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNUUtOCcKK2Rkc3ViMTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcKK2Rkc3ViMTIyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctM0UtOCcKK2Rkc3ViMTIzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMkUtOCcKK2Rkc3ViMTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcKK2Rkc3ViMTI1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4OScgIC0+ICcwRS04JworZGRzdWIxMjYgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzFFLTgnCitkZHN1YjEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcKK2Rkc3ViMTI4IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTInICAgICcxMC4yMzQ1Njc4OScgIC0+ICczRS04JworZGRzdWIxMjkgc3VidHJhY3QgICcxMC4yMzQ1Njc5MycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzRFLTgnCitkZHN1YjEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcKK2Rkc3ViMTMxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNUUtOCcKK2Rkc3ViMTMyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODInICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNEUtOCcKK2Rkc3ViMTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcKK2Rkc3ViMTM0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMkUtOCcKK2Rkc3ViMTM1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMUUtOCcKK2Rkc3ViMTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04JworZGRzdWIxMzcgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzFFLTgnCitkZHN1YjEzOCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg4JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMkUtOCcKK2Rkc3ViMTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04JworZGRzdWIxNDAgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzRFLTgnCitkZHN1YjE0MSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNUUtOCcKK2Rkc3ViMTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05JworZGRzdWIxNDMgc3VidHJhY3QgICcwLjk5OTk5OTk5OScgICAgJzEnICAgICAgICAgICAgLT4gJy0xRS05JworZGRzdWIxNDQgc3VidHJhY3QgICctMTAuMjM0NTY3ODAnICAgJy0xMC4yMzQ1Njc4NicgLT4gJzZFLTgnCitkZHN1YjE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnCitkZHN1YjE0NiBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MScgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTVFLTgnCisKKy0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0KK2Rkc3ViMTYwIHN1YnRyYWN0ICcwJyAgICAgJy4xJyAgICAgIC0+ICctMC4xJworZGRzdWIxNjEgc3VidHJhY3QgJzAwJyAgICAnLjk3OTgzJyAgLT4gJy0wLjk3OTgzJworZGRzdWIxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknCitkZHN1YjE2MyBzdWJ0cmFjdCAnMCcgICAgICcwLjEwMicgICAtPiAnLTAuMTAyJworZGRzdWIxNjQgc3VidHJhY3QgJzAnICAgICAnLjQnICAgICAgLT4gJy0wLjQnCitkZHN1YjE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3JworZGRzdWIxNjYgc3VidHJhY3QgJzAnICAgICAnLjQzODIyJyAgLT4gJy0wLjQzODIyJworZGRzdWIxNjcgc3VidHJhY3QgJzAnICAgICAnLjkxMScgICAgLT4gJy0wLjkxMScKK2Rkc3ViMTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicKK2Rkc3ViMTY5IHN1YnRyYWN0ICcwMCcgICAgJy4zOTInICAgIC0+ICctMC4zOTInCitkZHN1YjE3MCBzdWJ0cmFjdCAnMCcgICAgICcuMjYnICAgICAtPiAnLTAuMjYnCitkZHN1YjE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnCitkZHN1YjE3MiBzdWJ0cmFjdCAnMCcgICAgICcuMjIzNCcgICAtPiAnLTAuMjIzNCcKK2Rkc3ViMTczIHN1YnRyYWN0ICcwJyAgICAgJy4yJyAgICAgIC0+ICctMC4yJworZGRzdWIxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnCistLSAwLiBvbiBsZWZ0CitkZHN1YjE4MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMScgICAgICAtPiAnMC4xJworZGRzdWIxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCitkZHN1YjE4MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOScgICAgICAtPiAnMC45JworZGRzdWIxODMgc3VidHJhY3QgJzAuMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJworZGRzdWIxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKK2Rkc3ViMTg1IHN1YnRyYWN0ICcwLjAnICAgICAnLS4zMDcnICAgIC0+ICcwLjMwNycKK2Rkc3ViMTg2IHN1YnRyYWN0ICcwLjAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJworZGRzdWIxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJworZGRzdWIxODggc3VidHJhY3QgJzAuMCcgICAgICctLjAyJyAgICAgLT4gJzAuMDInCitkZHN1YjE4OSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCitkZHN1YjE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKK2Rkc3ViMTkxIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuNTEnICAgIC0+ICcwLjUxJworZGRzdWIxOTIgc3VidHJhY3QgJzAuMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKK2Rkc3ViMTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCitkZHN1YjE5NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDAwOCcgICAtPiAnMC4wMDA4JworLS0gbmVnYXRpdmVzIG9mIHNhbWUKK2Rkc3ViMjAwIHN1YnRyYWN0ICcwJyAgICAgJy0uMScgICAgICAtPiAnMC4xJworZGRzdWIyMDEgc3VidHJhY3QgJzAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJworZGRzdWIyMDIgc3VidHJhY3QgJzAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCitkZHN1YjIwMyBzdWJ0cmFjdCAnMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJworZGRzdWIyMDQgc3VidHJhY3QgJzAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnCitkZHN1YjIwNSBzdWJ0cmFjdCAnMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3JworZGRzdWIyMDYgc3VidHJhY3QgJzAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJworZGRzdWIyMDcgc3VidHJhY3QgJzAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScKK2Rkc3ViMjA4IHN1YnRyYWN0ICcuMCcgICAgJy0uMDInICAgICAtPiAnMC4wMicKK2Rkc3ViMjA5IHN1YnRyYWN0ICcwMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCitkZHN1YjIxMCBzdWJ0cmFjdCAnMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnCitkZHN1YjIxMSBzdWJ0cmFjdCAnMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCitkZHN1YjIxMiBzdWJ0cmFjdCAnMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKK2Rkc3ViMjEzIHN1YnRyYWN0ICcwJyAgICAgJy0uMicgICAgICAtPiAnMC4yJworZGRzdWIyMTQgc3VidHJhY3QgJy4wJyAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCisKKy0tIG1vcmUgZml4ZWQsIExIUyBzd2FwcyBbcmVhbGx5IHRoZSBzYW1lIGFzIHRlc3RjYXNlcyB1bmRlciBhZGRdCitkZHN1YjIyMCBzdWJ0cmFjdCAnLTU2MjY3RS0xMicgMCAgLT4gJy01LjYyNjdFLTgnCitkZHN1YjIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnCitkZHN1YjIyMiBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgMCAgLT4gJy0wLjAwMDAwNTYyNjcnCitkZHN1YjIyMyBzdWJ0cmFjdCAnLTU2MjY3RS05JyAgMCAgLT4gJy0wLjAwMDA1NjI2NycKK2Rkc3ViMjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnCitkZHN1YjIyNSBzdWJ0cmFjdCAnLTU2MjY3RS03JyAgMCAgLT4gJy0wLjAwNTYyNjcnCitkZHN1YjIyNiBzdWJ0cmFjdCAnLTU2MjY3RS02JyAgMCAgLT4gJy0wLjA1NjI2NycKK2Rkc3ViMjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnCitkZHN1YjIyOCBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgMCAgLT4gJy01NjIuNjcnCitkZHN1YjIyOSBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgMCAgLT4gJy01NjI2LjcnCitkZHN1YjIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycKKy0tIHN5bW1ldHJ5IC4uLgorZGRzdWIyNDAgc3VidHJhY3QgMCAnLTU2MjY3RS0xMicgIC0+ICc1LjYyNjdFLTgnCitkZHN1YjI0MSBzdWJ0cmFjdCAwICctNTYyNjdFLTExJyAgLT4gJzUuNjI2N0UtNycKK2Rkc3ViMjQyIHN1YnRyYWN0IDAgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JworZGRzdWIyNDMgc3VidHJhY3QgMCAnLTU2MjY3RS05JyAgIC0+ICcwLjAwMDA1NjI2NycKK2Rkc3ViMjQ0IHN1YnRyYWN0IDAgJy01NjI2N0UtOCcgICAtPiAnMC4wMDA1NjI2NycKK2Rkc3ViMjQ1IHN1YnRyYWN0IDAgJy01NjI2N0UtNycgICAtPiAnMC4wMDU2MjY3JworZGRzdWIyNDYgc3VidHJhY3QgMCAnLTU2MjY3RS02JyAgIC0+ICcwLjA1NjI2NycKK2Rkc3ViMjQ3IHN1YnRyYWN0IDAgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycKK2Rkc3ViMjQ4IHN1YnRyYWN0IDAgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JworZGRzdWIyNDkgc3VidHJhY3QgMCAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCitkZHN1YjI1MCBzdWJ0cmFjdCAwICctNTYyNjdFLTAnICAgLT4gJzU2MjY3JworCistLSBub3cgc29tZSBtb3JlIGZyb20gdGhlICduZXcnIGFkZAorZGRzdWIzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCitkZHN1YjMwMiBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMC4yMzQ1Njc3OCcKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitkZHN1YjMyMSBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2Rkc3ViMzIyIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk3JworZGRzdWIzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnCitkZHN1YjMyNCBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzAuOTk5NScKK2Rkc3ViMzI1IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMCcgLT4gJzAuOTk5OCcKK2Rkc3ViMzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScKK2Rkc3ViMzI3IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMicgLT4gJzEuMDAwMCcKK2Rkc3ViMzI4IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMycgLT4gJzEuMDAwMScKKworLS0gaW50ZXJuYWwgYm91bmRhcmllcworZGRzdWIzNDYgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcnICAgLT4gJzk5OTk5OTk5OTk5OTMnCitkZHN1YjM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnCitkZHN1YjM0OCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwJyAgIC0+ICc5OTk5OTk5OTk5MzAwJworZGRzdWIzNDkgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAnICAgLT4gJzk5OTk5OTk5OTMwMDAnCitkZHN1YjM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnCitkZHN1YjM1MSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAwJyAgIC0+ICc5OTk5OTk5MzAwMDAwJworZGRzdWIzNTIgc3VidHJhY3QgJzcnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5OTMnCitkZHN1YjM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnCitkZHN1YjM1NCBzdWJ0cmFjdCAnNzAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5MzAwJworZGRzdWIzNTUgc3VidHJhY3QgJzcwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTMwMDAnCitkZHN1YjM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnCitkZHN1YjM1NyBzdWJ0cmFjdCAnNzAwMDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5MzAwMDAwJworCistLSB6ZXJvIHByZXNlcnZhdGlvbgorZGRzdWIzNjEgc3VidHJhY3QgMSAnMC4wMDAxJyAtPiAnMC45OTk5JworZGRzdWIzNjIgc3VidHJhY3QgMSAnMC4wMDAwMScgLT4gJzAuOTk5OTknCitkZHN1YjM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5JworZGRzdWIzNjQgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5JworZGRzdWIzNjUgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViMzY2IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitkZHN1YjM3MCBzdWJ0cmFjdCAxICAwICAtPiAxCitkZHN1YjM3MSBzdWJ0cmFjdCAxIDAuICAtPiAxCitkZHN1YjM3MiBzdWJ0cmFjdCAxICAuMCAtPiAxLjAKK2Rkc3ViMzczIHN1YnRyYWN0IDEgMC4wIC0+IDEuMAorZGRzdWIzNzQgc3VidHJhY3QgIDAgIDEgLT4gLTEKK2Rkc3ViMzc1IHN1YnRyYWN0IDAuICAxIC0+IC0xCitkZHN1YjM3NiBzdWJ0cmFjdCAgLjAgMSAtPiAtMS4wCitkZHN1YjM3NyBzdWJ0cmFjdCAwLjAgMSAtPiAtMS4wCisKKy0tIGxlYWRpbmcgMCBkaWdpdCBiZWZvcmUgcm91bmQKK2Rkc3ViOTEwIHN1YnRyYWN0IC0xMDM1MTkzNjIgLTUxODk3OTU1LjMgLT4gLTUxNjIxNDA2LjcKK2Rkc3ViOTExIHN1YnRyYWN0IDE1OTU3OS40NDQgODk4MjcuNTIyOSAtPiA2OTc1MS45MjExCisKK2Rkc3ViOTIwIHN1YnRyYWN0IDMzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY2IC0+IDI5OS45OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRzdWI5MjEgc3VidHJhY3QgMzMzLjAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDEyMzQ1NjUgLT4gMzAwLjAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZHN1YjkyMiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NSAtPiAgOTkuOTk5OTk5OTk5OTk5OTUKK2Rkc3ViOTIzIHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY0IC0+ICA5OS45OTk5OTk5OTk5OTk5NgorZGRzdWI5MjQgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDEyMzQ1NDAgLT4gMTAwLjAwMDAwMDAwMDAwMDIgUm91bmRlZAorZGRzdWI5MjUgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAwMDAwMDAwCitkZHN1YjkyNiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMTIzNDU2MSAtPiAgODkuOTk5OTk5OTk5OTk5OTkKK2Rkc3ViOTI3IHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAxMjM0NTY2IC0+ICA4OS45OTk5OTk5OTk5OTk5NAorZGRzdWI5Mjggc3VidHJhY3QgMTAxLjAwMDAwMDAxMjM0NTYgOTEuMDAwMDAwMDEyMzQ1NjYgLT4gICA5Ljk5OTk5OTk5OTk5OTk0CitkZHN1YjkyOSBzdWJ0cmFjdCAxMDEuMDAwMDAwMDEyMzQ1NiA5OS4wMDAwMDAwMTIzNDU2NiAtPiAgIDEuOTk5OTk5OTk5OTk5OTQKKworLS0gbW9yZSBMSFMgc3dhcHMgW3dlcmUgZml4ZWRdCitkZHN1YjM5MCBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2Rkc3ViMzkxIHN1YnRyYWN0ICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitkZHN1YjM5MiBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitkZHN1YjM5MyBzdWJ0cmFjdCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2Rkc3ViMzk0IHN1YnRyYWN0ICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZGRzdWIzOTUgc3VidHJhY3QgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitkZHN1YjM5NiBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2Rkc3ViMzk3IHN1YnRyYWN0ICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitkZHN1YjM5OCBzdWJ0cmFjdCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZGRzdWIzOTkgc3VidHJhY3QgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZGRzdWI0MDAgc3VidHJhY3QgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2Rkc3ViNDAxIHN1YnRyYWN0ICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2Rkc3ViNDAyIHN1YnRyYWN0ICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZGRzdWI0MDMgc3VidHJhY3QgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitkZHN1YjQwNCBzdWJ0cmFjdCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitkZHN1YjQwNSBzdWJ0cmFjdCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZGRzdWI0MDYgc3VidHJhY3QgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitkZHN1YjQwNyBzdWJ0cmFjdCAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCitkZHN1YjQwOCBzdWJ0cmFjdCAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgIFJvdW5kZWQKK2Rkc3ViNDA5IHN1YnRyYWN0ICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZAorZGRzdWI0MTAgc3VidHJhY3QgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkCitkZHN1YjQxMSBzdWJ0cmFjdCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMgW3dlcmUgZml4ZWRdCitkZHN1YjQyMCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xMCcgLT4gICcwLjAwMDAwNTYyNjcnCitkZHN1YjQyMSBzdWJ0cmFjdCAwICAnLTU2MjY3RS02JyAgLT4gICcwLjA1NjI2NycKK2Rkc3ViNDIyIHN1YnRyYWN0IDAgICctNTYyNjdFLTUnICAtPiAgJzAuNTYyNjcnCitkZHN1YjQyMyBzdWJ0cmFjdCAwICAnLTU2MjY3RS00JyAgLT4gICc1LjYyNjcnCitkZHN1YjQyNCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0zJyAgLT4gICc1Ni4yNjcnCitkZHN1YjQyNSBzdWJ0cmFjdCAwICAnLTU2MjY3RS0yJyAgLT4gICc1NjIuNjcnCitkZHN1YjQyNiBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xJyAgLT4gICc1NjI2LjcnCitkZHN1YjQyNyBzdWJ0cmFjdCAwICAnLTU2MjY3RS0wJyAgLT4gICc1NjI2NycKK2Rkc3ViNDI4IHN1YnRyYWN0IDAgICctNUUtMTAnICAgICAtPiAgJzVFLTEwJworZGRzdWI0Mjkgc3VidHJhY3QgMCAgJy01RS03JyAgICAgIC0+ICAnNUUtNycKK2Rkc3ViNDMwIHN1YnRyYWN0IDAgICctNUUtNicgICAgICAtPiAgJzAuMDAwMDA1JworZGRzdWI0MzEgc3VidHJhY3QgMCAgJy01RS01JyAgICAgIC0+ICAnMC4wMDAwNScKK2Rkc3ViNDMyIHN1YnRyYWN0IDAgICctNUUtNCcgICAgICAtPiAgJzAuMDAwNScKK2Rkc3ViNDMzIHN1YnRyYWN0IDAgICctNUUtMScgICAgICAtPiAgJzAuNScKK2Rkc3ViNDM0IHN1YnRyYWN0IDAgICctNUUwJyAgICAgICAtPiAgJzUnCitkZHN1YjQzNSBzdWJ0cmFjdCAwICAnLTVFMScgICAgICAgLT4gICc1MCcKK2Rkc3ViNDM2IHN1YnRyYWN0IDAgICctNUU1JyAgICAgICAtPiAgJzUwMDAwMCcKK2Rkc3ViNDM3IHN1YnRyYWN0IDAgICctNUUxNScgICAgICAtPiAgJzUwMDAwMDAwMDAwMDAwMDAnCitkZHN1YjQzOCBzdWJ0cmFjdCAwICAnLTVFMTYnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZGRzdWI0Mzkgc3VidHJhY3QgMCAgJy01RTE3JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQKK2Rkc3ViNDQwIHN1YnRyYWN0IDAgICctNUUxOCcgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkCitkZHN1YjQ0MSBzdWJ0cmFjdCAwICAnLTVFMTAwJyAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitkZHN1YjQ2MSBzdWJ0cmFjdCAnMUUrMTYnICcxJyAgICAgICAgLT4gJzk5OTk5OTk5OTk5OTk5OTknCitkZHN1YjQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJworZGRzdWI0NjMgc3VidHJhY3QgJzEuMTExJyAgJy0xRSsxMicgIC0+ICcxMDAwMDAwMDAwMDAxLjExMScKK2Rkc3ViNDY0IHN1YnRyYWN0ICctMScgICAgJy0xRSsxNicgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScKK2Rkc3ViNDY1IHN1YnRyYWN0ICc3RSsxNScgJzEnICAgICAgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScKK2Rkc3ViNDY2IHN1YnRyYWN0ICc3RSsxMicgJy0xLjExMScgICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnCitkZHN1YjQ2NyBzdWJ0cmFjdCAnMS4xMTEnICAnLTdFKzEyJyAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJworZGRzdWI0Njggc3VidHJhY3QgJy0xJyAgICAnLTdFKzE1JyAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5JworCistLSAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDUKK2Rkc3ViNDcwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDcxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDcyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDczIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDc0IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDc1IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDc2IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDc3IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZHN1YjQ3OCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCitkZHN1YjQ3OSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTgnCitkZHN1YjQ4MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTcnCitkZHN1YjQ4MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTYnCitkZHN1YjQ4MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTUnCitkZHN1YjQ4MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTQnCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkZHN1YjUwMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScKK2Rkc3ViNTAxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTAyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTAzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTEwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTExIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTEyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTEzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTE0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTE1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTE2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI1MTcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZHN1YjUyMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScKK2Rkc3ViNTIxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTIyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTIzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTMwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTMxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTMyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTMzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTM0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTM1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTM2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI1Mzcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1Mzggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1Mzkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2Rkc3ViNTQwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTQxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTQyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2Rkc3ViNTUwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JworZGRzdWI1NTEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnCitkZHN1YjU2NyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2OCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2OSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5Li4uCityb3VuZGluZzogaGFsZl91cAorZGRzdWI2MDAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JworZGRzdWI2MDEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjAyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjA1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjA4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjExIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjE0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI2MTcgc3VidHJhY3QgMS4wMDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjE4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZHN1YjYyMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknCitkZHN1YjYyMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MjIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjIzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MjUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjI2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2Mjggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjI5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MzEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjMyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MzQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjM1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnCitkZHN1YjYzNyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2Mzggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjM5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZGRzdWI2NDAgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjQxIHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY0MiBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRzdWI2NTAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JworZGRzdWI2NTEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjUyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1MyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjU1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1NiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjU4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1OSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjYxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2MiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjY0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2NSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI2Njcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjY4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2OSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvdHMgb2YgbGVhZGluZyB6ZXJvcyBpbiBpbnRlcm1lZGlhdGUgcmVzdWx0LCBhbmQgc2hvd2luZyBlZmZlY3RzIG9mCistLSBpbnB1dCByb3VuZGluZyB3b3VsZCBoYXZlIGFmZmVjdGVkIHRoZSBmb2xsb3dpbmcKK3JvdW5kaW5nOiBoYWxmX3VwCitkZHN1YjY3MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45CitkZHN1YjY3MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCitkZHN1YjY3MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQorZGRzdWI2NzMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKK2Rkc3ViNjc0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45CisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2Rkc3ViNjgwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKK2Rkc3ViNjgxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKK2Rkc3ViNjgyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCitkZHN1YjY4MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQorZGRzdWI2ODQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKKworZGRzdWI2ODUgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjEnIC0+IDAuOQorZGRzdWI2ODYgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjknIC0+IDAuMQorZGRzdWI2ODcgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjEnIC0+IC0wLjEKK2Rkc3ViNjg4IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC41JyAtPiAtMC41CitkZHN1YjY4OSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguOScgLT4gLTAuOQorCityb3VuZGluZzogZG93bgorZGRzdWI2OTAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQorZGRzdWI2OTEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQorZGRzdWI2OTIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKK2Rkc3ViNjkzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41CitkZHN1YjY5NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQorCistLSBTcGVjaWFscworZGRzdWI3ODAgc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODEgc3VidHJhY3QgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODIgc3VidHJhY3QgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODMgc3VidHJhY3QgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODQgc3VidHJhY3QgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODUgc3VidHJhY3QgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODcgc3VidHJhY3QgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODggc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODkgc3VidHJhY3QgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3OTAgc3VidHJhY3QgIDAgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3OTEgc3VidHJhY3QgIDEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3OTIgc3VidHJhY3QgIDEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorCitkZHN1YjgwMCBzdWJ0cmFjdCAgSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODAxIHN1YnRyYWN0ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2Rkc3ViODAyIHN1YnRyYWN0ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2Rkc3ViODAzIHN1YnRyYWN0ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA0IHN1YnRyYWN0ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA1IHN1YnRyYWN0ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA2IHN1YnRyYWN0ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2Rkc3ViODA3IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA4IHN1YnRyYWN0IC0xMDAwIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA5IHN1YnRyYWN0IC1JbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4MTAgc3VidHJhY3QgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTEgc3VidHJhY3QgLTAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTIgc3VidHJhY3QgIDAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTMgc3VidHJhY3QgIDEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTQgc3VidHJhY3QgIDEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTUgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCitkZHN1YjgyMSBzdWJ0cmFjdCAgTmFOICAgSW5mICAgLT4gIE5hTgorZGRzdWI4MjIgc3VidHJhY3QgLU5hTiAgIDEwMDAgIC0+IC1OYU4KK2Rkc3ViODIzIHN1YnRyYWN0ICBOYU4gICAxICAgICAtPiAgTmFOCitkZHN1YjgyNCBzdWJ0cmFjdCAgTmFOICAgMCAgICAgLT4gIE5hTgorZGRzdWI4MjUgc3VidHJhY3QgIE5hTiAgLTAgICAgIC0+ICBOYU4KK2Rkc3ViODI2IHN1YnRyYWN0ICBOYU4gIC0xICAgICAtPiAgTmFOCitkZHN1YjgyNyBzdWJ0cmFjdCAgTmFOICAtMTAwMCAgLT4gIE5hTgorZGRzdWI4Mjggc3VidHJhY3QgIE5hTiAgLUluZiAgIC0+ICBOYU4KK2Rkc3ViODI5IHN1YnRyYWN0IC1OYU4gICBOYU4gICAtPiAtTmFOCitkZHN1YjgzMCBzdWJ0cmFjdCAtSW5mICAgTmFOICAgLT4gIE5hTgorZGRzdWI4MzEgc3VidHJhY3QgLTEwMDAgIE5hTiAgIC0+ICBOYU4KK2Rkc3ViODMyIHN1YnRyYWN0IC0xICAgICBOYU4gICAtPiAgTmFOCitkZHN1YjgzMyBzdWJ0cmFjdCAtMCAgICAgTmFOICAgLT4gIE5hTgorZGRzdWI4MzQgc3VidHJhY3QgIDAgICAgIE5hTiAgIC0+ICBOYU4KK2Rkc3ViODM1IHN1YnRyYWN0ICAxICAgICBOYU4gICAtPiAgTmFOCitkZHN1YjgzNiBzdWJ0cmFjdCAgMTAwMCAtTmFOICAgLT4gLU5hTgorZGRzdWI4Mzcgc3VidHJhY3QgIEluZiAgIE5hTiAgIC0+ICBOYU4KKworZGRzdWI4NDEgc3VidHJhY3QgIHNOYU4gIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0MiBzdWJ0cmFjdCAtc05hTiAgMTAwMCAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQzIHN1YnRyYWN0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDQgc3VidHJhY3QgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0NSBzdWJ0cmFjdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQ2IHN1YnRyYWN0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDcgc3VidHJhY3QgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0OCBzdWJ0cmFjdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQ5IHN1YnRyYWN0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTAgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1MSBzdWJ0cmFjdCAtSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODUyIHN1YnRyYWN0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTMgc3VidHJhY3QgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1NCBzdWJ0cmFjdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODU1IHN1YnRyYWN0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTYgc3VidHJhY3QgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1NyBzdWJ0cmFjdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODU4IHN1YnRyYWN0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTkgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rkc3ViODYxIHN1YnRyYWN0ICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xCitkZHN1Yjg2MiBzdWJ0cmFjdCAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMgorZGRzdWI4NjMgc3VidHJhY3QgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK2Rkc3ViODY0IHN1YnRyYWN0ICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40CitkZHN1Yjg2NSBzdWJ0cmFjdCAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQorZGRzdWI4NjYgc3VidHJhY3QgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitkZHN1Yjg2NyBzdWJ0cmFjdCAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODEKK2Rkc3ViODY4IHN1YnRyYWN0ICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQorZGRzdWI4Njkgc3VidHJhY3QgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorZGRzdWI4NzEgc3VidHJhY3QgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzIgc3VidHJhY3QgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzMgc3VidHJhY3QgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzQgc3VidHJhY3QgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzUgc3VidHJhY3QgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzYgc3VidHJhY3QgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4Nzcgc3VidHJhY3QgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4Nzggc3VidHJhY3QgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4Nzkgc3VidHJhY3QgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4ODAgc3VidHJhY3QgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4ODEgc3VidHJhY3QgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBlZGdlIGNhc2Ugc3BpbGxzCitkZHN1YjkwMSBzdWJ0cmFjdCAgMi5FLTMgIDEuMDAyICAtPiAtMS4wMDAKK2Rkc3ViOTAyIHN1YnRyYWN0ICAyLjBFLTMgIDEuMDAyICAtPiAtMS4wMDAwCitkZHN1YjkwMyBzdWJ0cmFjdCAgMi4wMEUtMyAgMS4wMDIwICAtPiAtMS4wMDAwMAorZGRzdWI5MDQgc3VidHJhY3QgIDIuMDAwRS0zICAxLjAwMjAwICAtPiAtMS4wMDAwMDAKK2Rkc3ViOTA1IHN1YnRyYWN0ICAyLjAwMDBFLTMgIDEuMDAyMDAwICAtPiAtMS4wMDAwMDAwCitkZHN1YjkwNiBzdWJ0cmFjdCAgMi4wMDAwMEUtMyAgMS4wMDIwMDAwICAtPiAtMS4wMDAwMDAwMAorZGRzdWI5MDcgc3VidHJhY3QgIDIuMDAwMDAwRS0zICAxLjAwMjAwMDAwICAtPiAtMS4wMDAwMDAwMDAKK2Rkc3ViOTA4IHN1YnRyYWN0ICAyLjAwMDAwMDBFLTMgIDEuMDAyMDAwMDAwICAtPiAtMS4wMDAwMDAwMDAwCisKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cyBjb3ZlcmVkIHVuZGVyIEFkZAorCistLSBOdWxsIHRlc3RzCitkZHN1Yjk5OTAgc3VidHJhY3QgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjk5OTEgc3VidHJhY3QgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkVG9JbnRlZ3JhbC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFRvSW50ZWdyYWwuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjZkNjFmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFRvSW50ZWdyYWwuZGVjVGVzdApAQCAtMCwwICsxLDI1NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFRvSW50ZWdyYWwuZGVjVGVzdCAtLSByb3VuZCBEb3VibGUgdG8gaW50ZWdyYWwgdmFsdWUgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHRlc3RzIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uICdyb3VuZC10by1pbnRlZ3JhbAorLS0gdmFsdWUtZXhhY3QnIG9wZXJhdGlvbnMgKGZyb20gSUVFRSA4NTQsIGxhdGVyIG1vZGlmaWVkIGluIDc1NHIpLgorLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcgorLS0gcXVhbnRpemUsIHNvIHRob3NlIGFyZSBhc3N1bWVkIHRvIGhhdmUgYmVlbiB0ZXN0ZWQgZXh0ZW5zaXZlbHkKKy0tIGVsc2V3aGVyZTsgdGhlIHRlc3RzIGhlcmUgYXJlIGZvciBpbnRlZ3JpdHksIHJvdW5kaW5nIG1vZGUsIGV0Yy4KKy0tIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhlIHRlc3QgaGFybmVzcyB3aWxsIHVzZSB0aGVzZSB0ZXN0cyBmb3IgYm90aAorLS0gVG9JbnRlZ3JhbEV4YWN0ICh3aGljaCBkb2VzIHNldCBJbmV4YWN0KSBhbmQgdGhlIGZpeGVkLW5hbWUKKy0tIGZ1bmN0aW9ucyAod2hpY2ggZG8gbm90IHNldCBJbmV4YWN0KS4KKworLS0gTm90ZSB0aGF0IGRlY051bWJlciBpbXBsZW1lbnRzIGFuIGVhcmxpZXIgZGVmaW5pdGlvbiBvZiB0b0ludGVncmFsCistLSB3aGljaCBuZXZlciBzZXRzIEluZXhhY3Q7IHRoZSBkZWNUZXN0IG9wZXJhdG9yIGZvciB0aGF0IGlzIGNhbGxlZAorLS0gJ3RvaW50ZWdyYWwnIGluc3RlYWQgb2YgJ3RvaW50ZWdyYWx4Jy4KKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkaW50eDAwMSB0b2ludGVncmFseCAgICAgIDAgICAgIC0+ICAwCitkZGludHgwMDIgdG9pbnRlZ3JhbHggICAgICAwLjAgICAtPiAgMAorZGRpbnR4MDAzIHRvaW50ZWdyYWx4ICAgICAgMC4xICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA1IHRvaW50ZWdyYWx4ICAgICAgMC4zICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA2IHRvaW50ZWdyYWx4ICAgICAgMC40ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA4IHRvaW50ZWdyYWx4ICAgICAgMC42ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDA5IHRvaW50ZWdyYWx4ICAgICAgMC43ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDExIHRvaW50ZWdyYWx4ICAgICAgMC45ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDEyIHRvaW50ZWdyYWx4ICAgICAgMSAgICAgLT4gIDEKK2RkaW50eDAxMyB0b2ludGVncmFseCAgICAgIDEuMCAgIC0+ICAxICBSb3VuZGVkCitkZGludHgwMTQgdG9pbnRlZ3JhbHggICAgICAxLjEgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTYgdG9pbnRlZ3JhbHggICAgICAxLjMgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTcgdG9pbnRlZ3JhbHggICAgICAxLjQgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMTkgdG9pbnRlZ3JhbHggICAgICAxLjYgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMjAgdG9pbnRlZ3JhbHggICAgICAxLjcgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwMjIgdG9pbnRlZ3JhbHggICAgICAxLjkgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMKK2RkaW50eDAzMSB0b2ludGVncmFseCAgICAgLTAgICAgIC0+IC0wCitkZGludHgwMzIgdG9pbnRlZ3JhbHggICAgIC0wLjAgICAtPiAtMAorZGRpbnR4MDMzIHRvaW50ZWdyYWx4ICAgICAtMC4xICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM0IHRvaW50ZWdyYWx4ICAgICAtMC4yICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM2IHRvaW50ZWdyYWx4ICAgICAtMC40ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM3IHRvaW50ZWdyYWx4ICAgICAtMC41ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDM5IHRvaW50ZWdyYWx4ICAgICAtMC43ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQwIHRvaW50ZWdyYWx4ICAgICAtMC44ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQyIHRvaW50ZWdyYWx4ICAgICAtMSAgICAgLT4gLTEKK2RkaW50eDA0MyB0b2ludGVncmFseCAgICAgLTEuMCAgIC0+IC0xICBSb3VuZGVkCitkZGludHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDUgdG9pbnRlZ3JhbHggICAgIC0xLjIgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDYgdG9pbnRlZ3JhbHggICAgIC0xLjMgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDggdG9pbnRlZ3JhbHggICAgIC0xLjUgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNDkgdG9pbnRlZ3JhbHggICAgIC0xLjYgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNTEgdG9pbnRlZ3JhbHggICAgIC0xLjggICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNTIgdG9pbnRlZ3JhbHggICAgIC0xLjkgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IHR3byB3b3VsZCBiZSBOYU4gdXNpbmcgcXVhbnRpemUoeCwgMCkKK2RkaW50eDA1MyB0b2ludGVncmFseCAgICAxMEUrNjAgIC0+IDEuMEUrNjEKK2RkaW50eDA1NCB0b2ludGVncmFseCAgIC0xMEUrNjAgIC0+IC0xLjBFKzYxCisKKy0tIG51bWJlcnMgYXJvdW5kIHByZWNpc2lvbgorZGRpbnR4MDYwIHRvaW50ZWdyYWx4ICc1NjI2N0UtMTcnICAgLT4gJzAnICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNjEgdG9pbnRlZ3JhbHggJzU2MjY3RS01JyAgICAtPiAnMScgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA2MiB0b2ludGVncmFseCAnNTYyNjdFLTInICAgIC0+ICc1NjMnICAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDYzIHRvaW50ZWdyYWx4ICc1NjI2N0UtMScgICAgLT4gJzU2MjcnICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNjUgdG9pbnRlZ3JhbHggJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnCitkZGludHgwNjYgdG9pbnRlZ3JhbHggJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnCitkZGludHgwNjcgdG9pbnRlZ3JhbHggJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1JworZGRpbnR4MDY4IHRvaW50ZWdyYWx4ICc1NjI2N0UrOScgICAgLT4gJzUuNjI2N0UrMTMnCitkZGludHgwNjkgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMCcgICAtPiAnNS42MjY3RSsxNCcKK2RkaW50eDA3MCB0b2ludGVncmFseCAnNTYyNjdFKzExJyAgIC0+ICc1LjYyNjdFKzE1JworZGRpbnR4MDcxIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTInICAgLT4gJzUuNjI2N0UrMTYnCitkZGludHgwNzIgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMycgICAtPiAnNS42MjY3RSsxNycKK2RkaW50eDA3MyB0b2ludGVncmFseCAnMS4yM0UrOTYnICAgIC0+ICcxLjIzRSs5NicKK2RkaW50eDA3NCB0b2ludGVncmFseCAnMS4yM0UrMzg0JyAgIC0+ICM0N2ZkMzAwMDAwMDAwMDAwICBDbGFtcGVkCisKK2RkaW50eDA4MCB0b2ludGVncmFseCAnLTU2MjY3RS0xMCcgIC0+ICctMCcgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA4MiB0b2ludGVncmFseCAnLTU2MjY3RS0yJyAgIC0+ICctNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA4MyB0b2ludGVncmFseCAnLTU2MjY3RS0xJyAgIC0+ICctNTYyNycgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnCitkZGludHgwODYgdG9pbnRlZ3JhbHggJy01NjI2N0UrMCcgICAtPiAnLTU2MjY3JworZGRpbnR4MDg3IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEnICAgLT4gJy01LjYyNjdFKzUnCitkZGludHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrOScgICAtPiAnLTUuNjI2N0UrMTMnCitkZGludHgwODkgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTAnICAtPiAnLTUuNjI2N0UrMTQnCitkZGludHgwOTAgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTEnICAtPiAnLTUuNjI2N0UrMTUnCitkZGludHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTInICAtPiAnLTUuNjI2N0UrMTYnCitkZGludHgwOTIgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTMnICAtPiAnLTUuNjI2N0UrMTcnCitkZGludHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2JworZGRpbnR4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrMzg0JyAgLT4gI2M3ZmQzMDAwMDAwMDAwMDAgIENsYW1wZWQKKworLS0gc3Vibm9ybWFsIGlucHV0cworZGRpbnR4MTAwIHRvaW50ZWdyYWx4ICAgICAgICAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCitkZGludHgxMDEgdG9pbnRlZ3JhbHggICAgICAwLjFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDEwMiB0b2ludGVncmFseCAgICAgMC4wMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MTAzIHRvaW50ZWdyYWx4ICAgICAgICAwRS0yOTkgLT4gMAorCistLSBzcGVjaWFscyBhbmQgemVyb3MKK2RkaW50eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkKK2RkaW50eDEyMSB0b2ludGVncmFseCAnLUluZicgICAgICAtPiAtSW5maW5pdHkKK2RkaW50eDEyMiB0b2ludGVncmFseCAgIE5hTiAgICAgICAtPiAgTmFOCitkZGludHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkaW50eDEyNCB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMAorZGRpbnR4MTI1IHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCitkZGludHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDAKK2RkaW50eDEyNyB0b2ludGVncmFseCAgICAgMC4wMCAgICAtPiAgMAorZGRpbnR4MTI4IHRvaW50ZWdyYWx4ICAgICAwLjAgICAgIC0+ICAwCitkZGludHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKK2RkaW50eDEzMCB0b2ludGVncmFseCAgICAgMEUtMyAgICAtPiAgMAorZGRpbnR4MTMxIHRvaW50ZWdyYWx4ICAgICAwRS0yICAgIC0+ICAwCitkZGludHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDAKK2RkaW50eDEzMyB0b2ludGVncmFseCAgICAgMEUtMCAgICAtPiAgMAorZGRpbnR4MTM0IHRvaW50ZWdyYWx4ICAgICAwRSsxICAgIC0+ICAwRSsxCitkZGludHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzIKK2RkaW50eDEzNiB0b2ludGVncmFseCAgICAgMEUrMyAgICAtPiAgMEUrMworZGRpbnR4MTM3IHRvaW50ZWdyYWx4ICAgICAwRSs0ICAgIC0+ICAwRSs0CitkZGludHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUKK2RkaW50eDEzOSB0b2ludGVncmFseCAgICAtMC4wMDAgICAtPiAtMAorZGRpbnR4MTQwIHRvaW50ZWdyYWx4ICAgIC0wLjAwICAgIC0+IC0wCitkZGludHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTAKK2RkaW50eDE0MiB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAorZGRpbnR4MTQzIHRvaW50ZWdyYWx4ICAgIC0wRS0zICAgIC0+IC0wCitkZGludHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTAKK2RkaW50eDE0NSB0b2ludGVncmFseCAgICAtMEUtMSAgICAtPiAtMAorZGRpbnR4MTQ2IHRvaW50ZWdyYWx4ICAgIC0wRS0wICAgIC0+IC0wCitkZGludHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzEKK2RkaW50eDE0OCB0b2ludGVncmFseCAgICAtMEUrMiAgICAtPiAtMEUrMgorZGRpbnR4MTQ5IHRvaW50ZWdyYWx4ICAgIC0wRSszICAgIC0+IC0wRSszCitkZGludHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQKK2RkaW50eDE1MSB0b2ludGVncmFseCAgICAtMEUrNSAgICAtPiAtMEUrNQorLS0gcHJvcGFnYXRpbmcgTmFOcworZGRpbnR4MTUyIHRvaW50ZWdyYWx4ICAgTmFOODA4ICAgIC0+ICBOYU44MDgKK2RkaW50eDE1MyB0b2ludGVncmFseCAgc05hTjA4MCAgICAtPiAgTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitkZGludHgxNTQgdG9pbnRlZ3JhbHggIC1OYU44MDggICAgLT4gLU5hTjgwOAorZGRpbnR4MTU1IHRvaW50ZWdyYWx4IC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24KK2RkaW50eDE1NiB0b2ludGVncmFseCAgLU5hTiAgICAgICAtPiAtTmFOCitkZGludHgxNTcgdG9pbnRlZ3JhbHggLXNOYU4gICAgICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RkaW50eDIwMCB0b2ludGVncmFseCAgICAgMi4xICAgIC0+IDIgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIwMSB0b2ludGVncmFseCAgIDEwMCAgICAgIC0+IDEwMAorZGRpbnR4MjAyIHRvaW50ZWdyYWx4ICAgMTAwLjAgICAgLT4gMTAwICAgICAgICAgIFJvdW5kZWQKK2RkaW50eDIwMyB0b2ludGVncmFseCAgIDEwMS41ICAgIC0+IDEwMiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIwNCB0b2ludGVncmFseCAgLTEwMS41ICAgIC0+IC0xMDIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIwNSB0b2ludGVncmFseCAgIDEwRSs1ICAgIC0+IDEuMEUrNgorZGRpbnR4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcKK2RkaW50eDIwNyB0b2ludGVncmFseCAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorCisKKy0tIGFsbCByb3VuZGluZyBtb2Rlcworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZGRpbnR4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIxMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIxNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl91cAorCitkZGludHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjIxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjI0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKworZGRpbnR4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIzMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIzNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgdXAKKworZGRpbnR4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI0MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI0NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZG93bgorCitkZGludHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjUxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjU0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCisKK2RkaW50eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNjEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNjQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGZsb29yCisKK2RkaW50eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNzEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNzQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMKK2RkaW50eDMwMCB0b2ludGVncmFseCAtMjE0NzQ4MzY0NiAgLT4gLTIxNDc0ODM2NDYKK2RkaW50eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcKK2RkaW50eDMwMiB0b2ludGVncmFseCAtMjE0NzQ4MzY0OCAgLT4gLTIxNDc0ODM2NDgKK2RkaW50eDMwMyB0b2ludGVncmFseCAtMjE0NzQ4MzY0OSAgLT4gLTIxNDc0ODM2NDkKK2RkaW50eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYKK2RkaW50eDMwNSB0b2ludGVncmFseCAgMjE0NzQ4MzY0NyAgLT4gIDIxNDc0ODM2NDcKK2RkaW50eDMwNiB0b2ludGVncmFseCAgMjE0NzQ4MzY0OCAgLT4gIDIxNDc0ODM2NDgKK2RkaW50eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkKK2RkaW50eDMwOCB0b2ludGVncmFseCAgNDI5NDk2NzI5NCAgLT4gIDQyOTQ5NjcyOTQKK2RkaW50eDMwOSB0b2ludGVncmFseCAgNDI5NDk2NzI5NSAgLT4gIDQyOTQ5NjcyOTUKK2RkaW50eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYKK2RkaW50eDMxMSB0b2ludGVncmFseCAgNDI5NDk2NzI5NyAgLT4gIDQyOTQ5NjcyOTcKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFhvci5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFhvci5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMWM3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkWG9yLmRlY1Rlc3QKQEAgLTAsMCArMSwzMzcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRYb3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBYT1IgZm9yIGRlY0RvdWJsZXMgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2RkeG9yMDAxIHhvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAorZGR4b3IwMDIgeG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxCitkZHhvcjAwMyB4b3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDEKK2RkeG9yMDA0IHhvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMAorZGR4b3IwMDUgeG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAgMTEwCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorZGR4b3IwMDYgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZGR4b3IwMDcgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKK2RkeG9yMDA4IHhvciAxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCitkZHhvcjAwOSB4b3IgMTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkZHhvcjAxMCB4b3IgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkZHhvcjAxMSB4b3IgMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMAorZGR4b3IwMTIgeG9yIDAxMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKK2RkeG9yMDEzIHhvciAwMTAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYKK2RkeG9yMDIxIHhvciAxMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjIgeG9yICAxMTExMTExMTAwMDAwMDAgICAgICAxMTExMTExMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyMyB4b3IgICAxMTExMTExMDAwMDAwMCAgICAgICAxMTExMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDI0IHhvciAgICAxMTExMTEwMDAwMDAwICAgICAgICAxMTExMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjUgeG9yICAgICAxMTExMTAwMDAwMDAgICAgICAgICAxMTExMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyNiB4b3IgICAgICAxMTExMDAwMDAwMCAgICAgICAgICAxMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDI3IHhvciAgICAgICAxMTEwMDAwMDAwICAgICAgICAgICAxMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjggeG9yICAgICAgICAxMTAwMDAwMDAgICAgICAgICAgICAxMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyOSB4b3IgICAgICAgICAxMDAwMDAwMCAgICAgICAgICAgICAxMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDMwIHhvciAgICAgICAgICAxMDAwMDAwICAgICAgICAgICAgICAxMDAwMDAwICAtPiAgMAorZGR4b3IwMzEgeG9yICAgICAgICAgICAxMDAwMDAgICAgICAgICAgICAgICAxMDAwMDAgIC0+ICAwCitkZHhvcjAzMiB4b3IgICAgICAgICAgICAxMDAwMCAgICAgICAgICAgICAgICAxMDAwMCAgLT4gIDAKK2RkeG9yMDMzIHhvciAgICAgICAgICAgICAxMDAwICAgICAgICAgICAgICAgICAxMDAwICAtPiAgMAorZGR4b3IwMzQgeG9yICAgICAgICAgICAgICAxMDAgICAgICAgICAgICAgICAgICAxMDAgIC0+ICAwCitkZHhvcjAzNSB4b3IgICAgICAgICAgICAgICAxMCAgICAgICAgICAgICAgICAgICAxMCAgLT4gIDAKK2RkeG9yMDM2IHhvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgMAorCitkZHhvcjA0MCB4b3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTEwMDAwMDAwMDAKK2RkeG9yMDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMAorZGR4b3IwNDIgeG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTAwMDAwMDAwCitkZHhvcjA0MyB4b3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMDEKK2RkeG9yMDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQorZGR4b3IwNDUgeG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDEwMTExCitkZHhvcjA0NiB4b3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTEKK2RkeG9yMDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQorZGR4b3IwNDggeG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExCitkZHhvcjA0OSB4b3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDEKKworZGR4b3IwNTAgeG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTEwCitkZHhvcjA1MSB4b3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMAorZGR4b3IwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMAorZGR4b3IwNTMgeG9yICAgIDExMTExMTEgIDEgIC0+ICAxMTExMTEwCitkZHhvcjA1NCB4b3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMAorZGR4b3IwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMAorZGR4b3IwNTYgeG9yICAgICAgIDExMTEgIDEgIC0+ICAxMTEwCitkZHhvcjA1NyB4b3IgICAgICAgIDExMSAgMSAgLT4gIDExMAorZGR4b3IwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMAorZGR4b3IwNTkgeG9yICAgICAgICAgIDEgIDEgIC0+ICAwCisKK2RkeG9yMDYwIHhvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExMQorZGR4b3IwNjEgeG9yICAxMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTEKK2RkeG9yMDYyIHhvciAgIDExMTExMTExICAwICAtPiAgMTExMTExMTEKK2RkeG9yMDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQorZGR4b3IwNjQgeG9yICAgICAxMTExMTEgIDAgIC0+ICAxMTExMTEKK2RkeG9yMDY1IHhvciAgICAgIDExMTExICAwICAtPiAgMTExMTEKK2RkeG9yMDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQorZGR4b3IwNjcgeG9yICAgICAgICAxMTEgIDAgIC0+ICAxMTEKK2RkeG9yMDY4IHhvciAgICAgICAgIDExICAwICAtPiAgMTEKK2RkeG9yMDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQorCitkZHhvcjA3MCB4b3IgMSAgMTExMTExMTExMSAgLT4gIDExMTExMTExMTAKK2RkeG9yMDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwCitkZHhvcjA3MiB4b3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTEwCitkZHhvcjA3MyB4b3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTAKK2RkeG9yMDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwCitkZHhvcjA3NSB4b3IgMSAgICAgICAxMTExMSAgLT4gIDExMTEwCitkZHhvcjA3NiB4b3IgMSAgICAgICAgMTExMSAgLT4gIDExMTAKK2RkeG9yMDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwCitkZHhvcjA3OCB4b3IgMSAgICAgICAgICAxMSAgLT4gIDEwCitkZHhvcjA3OSB4b3IgMSAgICAgICAgICAgMSAgLT4gIDAKKworZGR4b3IwODAgeG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTExCitkZHhvcjA4MSB4b3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorZGR4b3IwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQorZGR4b3IwODMgeG9yIDAgICAgIDExMTExMTEgIC0+ICAxMTExMTExCitkZHhvcjA4NCB4b3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQorZGR4b3IwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQorZGR4b3IwODYgeG9yIDAgICAgICAgIDExMTEgIC0+ICAxMTExCitkZHhvcjA4NyB4b3IgMCAgICAgICAgIDExMSAgLT4gIDExMQorZGR4b3IwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQorZGR4b3IwODkgeG9yIDAgICAgICAgICAgIDEgIC0+ICAxCisKK2RkeG9yMDkwIHhvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDEwMDAxMDAwMAorZGR4b3IwOTEgeG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgIDEwMDEwMDAwCitkZHhvcjA5MiB4b3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAgIDEwMTAwMDAKK2RkeG9yMDkzIHhvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gICAgIDExMDAwMAorZGR4b3IwOTQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCitkZHhvcjA5NSB4b3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAgICAgMTEwMDAKK2RkeG9yMDk2IHhvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gICAgICAxMDEwMAorZGR4b3IwOTcgeG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgICAgIDEwMDEwCitkZHhvcjA5OCB4b3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAgICAgMTAwMDEKKworZGR4b3IxMDAgeG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTAwMDEwMDAwCitkZHhvcjEwMSB4b3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAgMTAwMTAwMDAKK2RkeG9yMTAyIHhvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gICAgMTAxMDAwMAorZGR4b3IxMDMgeG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgICAgMTEwMDAwCitkZHhvcjEwNCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDAKK2RkeG9yMTA1IHhvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gICAgICAxMTAwMAorZGR4b3IxMDYgeG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgICAgIDEwMTAwCitkZHhvcjEwNyB4b3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAgICAgMTAwMTAKK2RkeG9yMTA4IHhvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gICAgICAxMDAwMQorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RkeG9yMjIwIHhvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjEgeG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyMiB4b3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjIzIHhvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjQgeG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyNSB4b3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjI2IHhvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjcgeG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyOCB4b3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjI5IHhvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMzAgeG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIzMSB4b3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjMyIHhvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZGR4b3IyNDAgeG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI0MSB4b3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjQyIHhvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNDMgeG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI0NCB4b3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkZHhvcjI1MCB4b3IgIDIwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI1MSB4b3IgIDcwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI1MiB4b3IgIDgwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI1MyB4b3IgIDkwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI1NCB4b3IgIDIwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI1NSB4b3IgIDcwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI1NiB4b3IgIDgwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI1NyB4b3IgIDkwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI1OCB4b3IgIDEwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI1OSB4b3IgIDEwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI2MCB4b3IgIDEwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI2MSB4b3IgIDEwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI2MiB4b3IgIDAwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI2MyB4b3IgIDAwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI2NCB4b3IgIDAwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI2NSB4b3IgIDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkZHhvcjI3MCB4b3IgIDAyMDAwMDEwMDAwMDAwMDAgMTAwMDEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI3MSB4b3IgIDA3MDAwMDAxMDAwMDAwMDAgMTAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI3MiB4b3IgIDA4MDAwMDAwMTAwMDAwMDAgMTAwMDAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI3MyB4b3IgIDA5MDAwMDAwMDEwMDAwMDAgMTAwMDAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI3NCB4b3IgIDEwMDAwMDAwMDAxMDAwMDAgMDIwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI3NSB4b3IgIDEwMDAwMDAwMDAwMTAwMDAgMDcwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI3NiB4b3IgIDEwMDAwMDAwMDAwMDEwMDAgMDgwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI3NyB4b3IgIDEwMDAwMDAwMDAwMDAxMDAgMDkwMDAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZGR4b3IyODAgeG9yICAwMDEwMDAwMDAwMDAwMDAyIDEwMDAwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyODEgeG9yICAwMDAxMDAwMDAwMDAwMDA3IDEwMDAwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyODIgeG9yICAwMDAwMTAwMDAwMDAwMDA4IDEwMDAwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyODMgeG9yICAwMDAwMDEwMDAwMDAwMDA5IDEwMDAxMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyODQgeG9yICAxMDAwMDAxMDAwMDAwMDAwIDAwMDEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyODUgeG9yICAxMDAwMDAwMTAwMDAwMDAwIDAwMTAwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyODYgeG9yICAxMDAwMDAwMDEwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyODcgeG9yICAxMDAwMDAwMDAxMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RkeG9yMjg4IHhvciAgMDAxMDAwMDAyMDAwMDAwMCAxMDAwMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjg5IHhvciAgMDAwMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjkwIHhvciAgMDAwMDEwMDA4MDAwMDAxMCAxMDAwMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjkxIHhvciAgMDAwMDAxMDA5MDAwMDEwMCAxMDAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjkyIHhvciAgMTAwMDAwMTAwMDAwMTAwMCAwMDAwMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjkzIHhvciAgMTAwMDAwMDEwMDAxMDAwMCAwMDAwMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjk0IHhvciAgMTAwMDAwMDAxMDEwMDAwMCAwMDAwMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjk1IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAwMDAwMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkZHhvcjI5NiB4b3IgLTEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTcgeG9yIC0xMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjk4IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5OSB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDAwMTAwMDAxMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZGR4b3IzMzEgeG9yICAyICAgOS45OTk5OTk5OUUrMjk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzMyIHhvciAgMyAgIDFFLTI5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzMyB4b3IgIDQgICAxLjAwMDAwMDAwRS0yOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzMzQgeG9yICA1ICAgMUUtMjAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzM1IHhvciAgNiAgIC0xRS0yMDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzNiB4b3IgIDcgICAtMS4wMDAwMDAwMEUtMjk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzMzcgeG9yICA4ICAgLTFFLTI5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzM4IHhvciAgOSAgIC05Ljk5OTk5OTk5RSsyOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0MSB4b3IgIDkuOTk5OTk5OTlFKzI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDIgeG9yICAxRS0yOTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQzIHhvciAgMS4wMDAwMDAwMEUtMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0NCB4b3IgIDFFLTIwOCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDUgeG9yICAtMUUtMjA3ICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQ2IHhvciAgLTEuMDAwMDAwMDBFLTI5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0NyB4b3IgIC0xRS0yOTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDggeG9yICAtOS45OTk5OTk5OUUrMjk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkZHhvcjM2MSB4b3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNjIgeG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzYzIHhvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM2NCB4b3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNjUgeG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzY2IHhvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM3MSB4b3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNzIgeG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzczIHhvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM3NCB4b3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNzUgeG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzc2IHhvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2RkeG9yNzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4MSB4b3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODIgeG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4NCB4b3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODUgeG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4NyB4b3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODggeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc5MCB4b3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3OTEgeG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc5MyB4b3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3OTQgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGR4b3I4MDAgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODAxIHhvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwMiB4b3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDMgeG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODA0IHhvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwNSB4b3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDYgeG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODA3IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwOCB4b3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDkgeG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODEwIHhvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgxMSB4b3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MTIgeG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODEzIHhvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgxNCB4b3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MTUgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGR4b3I4MjEgeG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODIyIHhvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyMyB4b3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjQgeG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODI1IHhvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyNiB4b3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjcgeG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODI4IHhvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyOSB4b3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzAgeG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODMxIHhvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzMiB4b3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzMgeG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODM0IHhvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzNSB4b3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzYgeG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODM3IHhvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkeG9yODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODQyIHhvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODQzIHhvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODQ1IHhvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODQ2IHhvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODQ4IHhvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODQ5IHhvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODUxIHhvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODUyIHhvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODU0IHhvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODU1IHhvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODU3IHhvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODU4IHhvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGR4b3I4NjEgeG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODYyIHhvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2MyB4b3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjQgeG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODY1IHhvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2NiB4b3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjcgeG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODY4IHhvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2OSB4b3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzEgeG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODcyIHhvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3MyB4b3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzQgeG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODc1IHhvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3NiB4b3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzcgeG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODc4IHhvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3OSB4b3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4ODAgeG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODgxIHhvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg4MiB4b3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4ODMgeG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODg0IHhvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg4NSB4b3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZWNEb3VibGUuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGVjRG91YmxlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxNzA2MgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGVjRG91YmxlLmRlY1Rlc3QKQEAgLTAsMCArMSw2NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZWNEb3VibGUuZGVjVGVzdCAtLSBydW4gYWxsIGRlY0RvdWJsZSBkZWNpbWFsIGFyaXRobWV0aWMgdGVzdHMgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIGRlY0RvdWJsZSB0ZXN0cworZGVjdGVzdDogZGRBYnMKK2RlY3Rlc3Q6IGRkQWRkCitkZWN0ZXN0OiBkZEFuZAorZGVjdGVzdDogZGRCYXNlCitkZWN0ZXN0OiBkZENhbm9uaWNhbAorZGVjdGVzdDogZGRDbGFzcworZGVjdGVzdDogZGRDb21wYXJlCitkZWN0ZXN0OiBkZENvbXBhcmVTaWcKK2RlY3Rlc3Q6IGRkQ29tcGFyZVRvdGFsCitkZWN0ZXN0OiBkZENvbXBhcmVUb3RhbE1hZworZGVjdGVzdDogZGRDb3B5CitkZWN0ZXN0OiBkZENvcHlBYnMKK2RlY3Rlc3Q6IGRkQ29weU5lZ2F0ZQorZGVjdGVzdDogZGRDb3B5U2lnbgorZGVjdGVzdDogZGREaXZpZGUKK2RlY3Rlc3Q6IGRkRGl2aWRlSW50CitkZWN0ZXN0OiBkZEVuY29kZQorZGVjdGVzdDogZGRGTUEKK2RlY3Rlc3Q6IGRkSW52ZXJ0CitkZWN0ZXN0OiBkZExvZ0IKK2RlY3Rlc3Q6IGRkTWF4CitkZWN0ZXN0OiBkZE1heE1hZworZGVjdGVzdDogZGRNaW4KK2RlY3Rlc3Q6IGRkTWluTWFnCitkZWN0ZXN0OiBkZE1pbnVzCitkZWN0ZXN0OiBkZE11bHRpcGx5CitkZWN0ZXN0OiBkZE5leHRNaW51cworZGVjdGVzdDogZGROZXh0UGx1cworZGVjdGVzdDogZGROZXh0VG93YXJkCitkZWN0ZXN0OiBkZE9yCitkZWN0ZXN0OiBkZFBsdXMKK2RlY3Rlc3Q6IGRkUXVhbnRpemUKK2RlY3Rlc3Q6IGRkUmVkdWNlCitkZWN0ZXN0OiBkZFJlbWFpbmRlcgorZGVjdGVzdDogZGRSZW1haW5kZXJOZWFyCitkZWN0ZXN0OiBkZFJvdGF0ZQorZGVjdGVzdDogZGRTYW1lUXVhbnR1bQorZGVjdGVzdDogZGRTY2FsZUIKK2RlY3Rlc3Q6IGRkU2hpZnQKK2RlY3Rlc3Q6IGRkU3VidHJhY3QKK2RlY3Rlc3Q6IGRkVG9JbnRlZ3JhbAorZGVjdGVzdDogZGRYb3IKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZWNRdWFkLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RlY1F1YWQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGRiMTQyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZWNRdWFkLmRlY1Rlc3QKQEAgLTAsMCArMSw2NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZWNRdWFkLmRlY1Rlc3QgLS0gcnVuIGFsbCBkZWNRdWFkIGRlY2ltYWwgYXJpdGhtZXRpYyB0ZXN0cyAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIGRlY1F1YWQgdGVzdHMKK2RlY3Rlc3Q6IGRxQWJzCitkZWN0ZXN0OiBkcUFkZAorZGVjdGVzdDogZHFBbmQKK2RlY3Rlc3Q6IGRxQmFzZQorZGVjdGVzdDogZHFDYW5vbmljYWwKK2RlY3Rlc3Q6IGRxQ2xhc3MKK2RlY3Rlc3Q6IGRxQ29tcGFyZQorZGVjdGVzdDogZHFDb21wYXJlU2lnCitkZWN0ZXN0OiBkcUNvbXBhcmVUb3RhbAorZGVjdGVzdDogZHFDb21wYXJlVG90YWxNYWcKK2RlY3Rlc3Q6IGRxQ29weQorZGVjdGVzdDogZHFDb3B5QWJzCitkZWN0ZXN0OiBkcUNvcHlOZWdhdGUKK2RlY3Rlc3Q6IGRxQ29weVNpZ24KK2RlY3Rlc3Q6IGRxRGl2aWRlCitkZWN0ZXN0OiBkcURpdmlkZUludAorZGVjdGVzdDogZHFFbmNvZGUKK2RlY3Rlc3Q6IGRxRk1BCitkZWN0ZXN0OiBkcUludmVydAorZGVjdGVzdDogZHFMb2dCCitkZWN0ZXN0OiBkcU1heAorZGVjdGVzdDogZHFNYXhNYWcKK2RlY3Rlc3Q6IGRxTWluCitkZWN0ZXN0OiBkcU1pbk1hZworZGVjdGVzdDogZHFNaW51cworZGVjdGVzdDogZHFNdWx0aXBseQorZGVjdGVzdDogZHFOZXh0TWludXMKK2RlY3Rlc3Q6IGRxTmV4dFBsdXMKK2RlY3Rlc3Q6IGRxTmV4dFRvd2FyZAorZGVjdGVzdDogZHFPcgorZGVjdGVzdDogZHFQbHVzCitkZWN0ZXN0OiBkcVF1YW50aXplCitkZWN0ZXN0OiBkcVJlZHVjZQorZGVjdGVzdDogZHFSZW1haW5kZXIKK2RlY3Rlc3Q6IGRxUmVtYWluZGVyTmVhcgorZGVjdGVzdDogZHFSb3RhdGUKK2RlY3Rlc3Q6IGRxU2FtZVF1YW50dW0KK2RlY3Rlc3Q6IGRxU2NhbGVCCitkZWN0ZXN0OiBkcVNoaWZ0CitkZWN0ZXN0OiBkcVN1YnRyYWN0CitkZWN0ZXN0OiBkcVRvSW50ZWdyYWwKK2RlY3Rlc3Q6IGRxWG9yCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGVjU2luZ2xlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RlY1NpbmdsZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZjk3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RlY1NpbmdsZS5kZWNUZXN0CkBAIC0wLDAgKzEsMjUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGVjU2luZ2xlLmRlY1Rlc3QgLS0gcnVuIGFsbCBkZWNTaW5nbGUgZGVjaW1hbCBhcml0aG1ldGljIHRlc3RzICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBkZWNTaW5nbGUgdGVzdHMKK2RlY3Rlc3Q6IGRzQmFzZQorZGVjdGVzdDogZHNFbmNvZGUKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kaXZpZGUuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGl2aWRlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZiYjViYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGl2aWRlLmRlY1Rlc3QKQEAgLTAsMCArMSw4NTQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGl2aWRlLmRlY1Rlc3QgLS0gZGVjaW1hbCBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBzYW5pdHkgY2hlY2tzCitkaXZ4MDAxIGRpdmlkZSAgMSAgICAgMSAgICAtPiAgMQorZGl2eDAwMiBkaXZpZGUgIDIgICAgIDEgICAgLT4gIDIKK2RpdngwMDMgZGl2aWRlICAxICAgICAyICAgIC0+ICAwLjUKK2RpdngwMDQgZGl2aWRlICAyICAgICAyICAgIC0+ICAxCitkaXZ4MDA1IGRpdmlkZSAgMCAgICAgMSAgICAtPiAgMAorZGl2eDAwNiBkaXZpZGUgIDAgICAgIDIgICAgLT4gIDAKK2RpdngwMDcgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RpdngwMDggZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RpdngwMDkgZGl2aWRlICAzICAgICAzICAgIC0+ICAxCisKK2RpdngwMTAgZGl2aWRlICAyLjQgICAxICAgIC0+ICAyLjQKK2RpdngwMTEgZGl2aWRlICAyLjQgICAtMSAgIC0+ICAtMi40CitkaXZ4MDEyIGRpdmlkZSAgLTIuNCAgMSAgICAtPiAgLTIuNAorZGl2eDAxMyBkaXZpZGUgIC0yLjQgIC0xICAgLT4gIDIuNAorZGl2eDAxNCBkaXZpZGUgIDIuNDAgIDEgICAgLT4gIDIuNDAKK2RpdngwMTUgZGl2aWRlICAyLjQwMCAxICAgIC0+ICAyLjQwMAorZGl2eDAxNiBkaXZpZGUgIDIuNCAgIDIgICAgLT4gIDEuMgorZGl2eDAxNyBkaXZpZGUgIDIuNDAwIDIgICAgLT4gIDEuMjAwCitkaXZ4MDE4IGRpdmlkZSAgMi4gICAgMiAgICAtPiAgMQorZGl2eDAxOSBkaXZpZGUgIDIwICAgIDIwICAgLT4gIDEKKworZGl2eDAyMCBkaXZpZGUgIDE4NyAgIDE4NyAgICAtPiAgMQorZGl2eDAyMSBkaXZpZGUgIDUgICAgIDIgICAgICAtPiAgMi41CitkaXZ4MDIyIGRpdmlkZSAgNTAgICAgMjAgICAgIC0+ICAyLjUKK2RpdngwMjMgZGl2aWRlICA1MDAgICAyMDAgICAgLT4gIDIuNQorZGl2eDAyNCBkaXZpZGUgIDUwLjAgIDIwLjAgICAtPiAgMi41CitkaXZ4MDI1IGRpdmlkZSAgNS4wMCAgMi4wMCAgIC0+ICAyLjUKK2RpdngwMjYgZGl2aWRlICA1ICAgICAyLjAgICAgLT4gIDIuNQorZGl2eDAyNyBkaXZpZGUgIDUgICAgIDIuMDAwICAtPiAgMi41CitkaXZ4MDI4IGRpdmlkZSAgNSAgICAgMC4yMCAgIC0+ICAyNQorZGl2eDAyOSBkaXZpZGUgIDUgICAgIDAuMjAwICAtPiAgMjUKK2RpdngwMzAgZGl2aWRlICAxMCAgICAxICAgICAgLT4gIDEwCitkaXZ4MDMxIGRpdmlkZSAgMTAwICAgMSAgICAgIC0+ICAxMDAKK2RpdngwMzIgZGl2aWRlICAxMDAwICAxICAgICAgLT4gIDEwMDAKK2RpdngwMzMgZGl2aWRlICAxMDAwICAxMDAgICAgLT4gIDEwCisKK2RpdngwMzUgZGl2aWRlICAxICAgICAyICAgICAgLT4gIDAuNQorZGl2eDAzNiBkaXZpZGUgIDEgICAgIDQgICAgICAtPiAgMC4yNQorZGl2eDAzNyBkaXZpZGUgIDEgICAgIDggICAgICAtPiAgMC4xMjUKK2RpdngwMzggZGl2aWRlICAxICAgICAxNiAgICAgLT4gIDAuMDYyNQorZGl2eDAzOSBkaXZpZGUgIDEgICAgIDMyICAgICAtPiAgMC4wMzEyNQorZGl2eDA0MCBkaXZpZGUgIDEgICAgIDY0ICAgICAtPiAgMC4wMTU2MjUKK2RpdngwNDEgZGl2aWRlICAxICAgIC0yICAgICAgLT4gIC0wLjUKK2RpdngwNDIgZGl2aWRlICAxICAgIC00ICAgICAgLT4gIC0wLjI1CitkaXZ4MDQzIGRpdmlkZSAgMSAgICAtOCAgICAgIC0+ICAtMC4xMjUKK2RpdngwNDQgZGl2aWRlICAxICAgIC0xNiAgICAgLT4gIC0wLjA2MjUKK2RpdngwNDUgZGl2aWRlICAxICAgIC0zMiAgICAgLT4gIC0wLjAzMTI1CitkaXZ4MDQ2IGRpdmlkZSAgMSAgICAtNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RpdngwNDcgZGl2aWRlIC0xICAgICAyICAgICAgLT4gIC0wLjUKK2RpdngwNDggZGl2aWRlIC0xICAgICA0ICAgICAgLT4gIC0wLjI1CitkaXZ4MDQ5IGRpdmlkZSAtMSAgICAgOCAgICAgIC0+ICAtMC4xMjUKK2RpdngwNTAgZGl2aWRlIC0xICAgICAxNiAgICAgLT4gIC0wLjA2MjUKK2RpdngwNTEgZGl2aWRlIC0xICAgICAzMiAgICAgLT4gIC0wLjAzMTI1CitkaXZ4MDUyIGRpdmlkZSAtMSAgICAgNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RpdngwNTMgZGl2aWRlIC0xICAgIC0yICAgICAgLT4gIDAuNQorZGl2eDA1NCBkaXZpZGUgLTEgICAgLTQgICAgICAtPiAgMC4yNQorZGl2eDA1NSBkaXZpZGUgLTEgICAgLTggICAgICAtPiAgMC4xMjUKK2RpdngwNTYgZGl2aWRlIC0xICAgIC0xNiAgICAgLT4gIDAuMDYyNQorZGl2eDA1NyBkaXZpZGUgLTEgICAgLTMyICAgICAtPiAgMC4wMzEyNQorZGl2eDA1OCBkaXZpZGUgLTEgICAgLTY0ICAgICAtPiAgMC4wMTU2MjUKKworZGl2eDA3MCBkaXZpZGUgIDk5OTk5OTk5OSAgICAgICAgMSAgICAtPiAgOTk5OTk5OTk5CitkaXZ4MDcxIGRpdmlkZSAgOTk5OTk5OTk5LjQgICAgICAxICAgIC0+ICA5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkaXZ4MDcyIGRpdmlkZSAgOTk5OTk5OTk5LjUgICAgICAxICAgIC0+ICAxLjAwMDAwMDAwRSs5IEluZXhhY3QgUm91bmRlZAorZGl2eDA3MyBkaXZpZGUgIDk5OTk5OTk5OS45ICAgICAgMSAgICAtPiAgMS4wMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQKK2RpdngwNzQgZGl2aWRlICA5OTk5OTk5OTkuOTk5ICAgIDEgICAgLT4gIDEuMDAwMDAwMDBFKzkgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDYKK2RpdngwODAgZGl2aWRlICA5OTk5OTk5OTkgICAgIDEgIC0+ICAxLjAwMDAwRSs5IEluZXhhY3QgUm91bmRlZAorZGl2eDA4MSBkaXZpZGUgIDk5OTk5OTk5ICAgICAgMSAgLT4gIDEuMDAwMDBFKzggSW5leGFjdCBSb3VuZGVkCitkaXZ4MDgyIGRpdmlkZSAgOTk5OTk5OSAgICAgICAxICAtPiAgMS4wMDAwMEUrNyBJbmV4YWN0IFJvdW5kZWQKK2RpdngwODMgZGl2aWRlICA5OTk5OTkgICAgICAgIDEgIC0+ICA5OTk5OTkKK2RpdngwODQgZGl2aWRlICA5OTk5OSAgICAgICAgIDEgIC0+ICA5OTk5OQorZGl2eDA4NSBkaXZpZGUgIDk5OTkgICAgICAgICAgMSAgLT4gIDk5OTkKK2RpdngwODYgZGl2aWRlICA5OTkgICAgICAgICAgIDEgIC0+ICA5OTkKK2RpdngwODcgZGl2aWRlICA5OSAgICAgICAgICAgIDEgIC0+ICA5OQorZGl2eDA4OCBkaXZpZGUgIDkgICAgICAgICAgICAgMSAgLT4gIDkKKworcHJlY2lzaW9uOiA5CitkaXZ4MDkwIGRpdmlkZSAgMC4gICAgICAgICAgICAxICAgIC0+ICAwCitkaXZ4MDkxIGRpdmlkZSAgLjAgICAgICAgICAgICAxICAgIC0+ICAwLjAKK2RpdngwOTIgZGl2aWRlICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAuMDAKK2RpdngwOTMgZGl2aWRlICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDBFKzcKK2RpdngwOTQgZGl2aWRlICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDBFLTU0CisKK2RpdngwOTUgZGl2aWRlICAxICAgICAgICAgICAgMUUtOCAgLT4gIDFFKzgKK2RpdngwOTYgZGl2aWRlICAxICAgICAgICAgICAgMUUtOSAgLT4gIDFFKzkKK2RpdngwOTcgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTAgLT4gIDFFKzEwCitkaXZ4MDk4IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTExIC0+ICAxRSsxMQorZGl2eDA5OSBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMiAtPiAgMUUrMTIKKworZGl2eDEwMCBkaXZpZGUgIDEgIDEgICAtPiAxCitkaXZ4MTAxIGRpdmlkZSAgMSAgMiAgIC0+IDAuNQorZGl2eDEwMiBkaXZpZGUgIDEgIDMgICAtPiAwLjMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RpdngxMDMgZGl2aWRlICAxICA0ICAgLT4gMC4yNQorZGl2eDEwNCBkaXZpZGUgIDEgIDUgICAtPiAwLjIKK2RpdngxMDUgZGl2aWRlICAxICA2ICAgLT4gMC4xNjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkaXZ4MTA2IGRpdmlkZSAgMSAgNyAgIC0+IDAuMTQyODU3MTQzIEluZXhhY3QgUm91bmRlZAorZGl2eDEwNyBkaXZpZGUgIDEgIDggICAtPiAwLjEyNQorZGl2eDEwOCBkaXZpZGUgIDEgIDkgICAtPiAwLjExMTExMTExMSBJbmV4YWN0IFJvdW5kZWQKK2RpdngxMDkgZGl2aWRlICAxICAxMCAgLT4gMC4xCitkaXZ4MTEwIGRpdmlkZSAgMSAgMSAgIC0+IDEKK2RpdngxMTEgZGl2aWRlICAyICAxICAgLT4gMgorZGl2eDExMiBkaXZpZGUgIDMgIDEgICAtPiAzCitkaXZ4MTEzIGRpdmlkZSAgNCAgMSAgIC0+IDQKK2RpdngxMTQgZGl2aWRlICA1ICAxICAgLT4gNQorZGl2eDExNSBkaXZpZGUgIDYgIDEgICAtPiA2CitkaXZ4MTE2IGRpdmlkZSAgNyAgMSAgIC0+IDcKK2RpdngxMTcgZGl2aWRlICA4ICAxICAgLT4gOAorZGl2eDExOCBkaXZpZGUgIDkgIDEgICAtPiA5CitkaXZ4MTE5IGRpdmlkZSAgMTAgMSAgIC0+IDEwCisKK2RpdngxMjAgZGl2aWRlICAzRSsxIDAuMDAxICAtPiAzRSs0CitkaXZ4MTIxIGRpdmlkZSAgMi4yMDAgMiAgICAgLT4gMS4xMDAKKworZGl2eDEzMCBkaXZpZGUgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkuNDkzOTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4MTMxIGRpdmlkZSAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3My45NDc5MCBJbmV4YWN0IFJvdW5kZWQKK2RpdngxMzIgZGl2aWRlICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5LjM4Nzc2IEluZXhhY3QgUm91bmRlZAorZGl2eDEzMyBkaXZpZGUgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkKK2RpdngxMzQgZGl2aWRlICAxMjM0NSAgNS4xICAgIC0+ICAyNDIwLjU4ODI0IEluZXhhY3QgUm91bmRlZAorZGl2eDEzNSBkaXZpZGUgIDEyMzQ1ICA1LjAxICAgLT4gIDI0NjQuMDcxODYgSW5leGFjdCBSb3VuZGVkCitkaXZ4MTM2IGRpdmlkZSAgMTIzNDUgIDUuMDAxICAtPiAgMjQ2OC41MDYzMCBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAgIDkKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CisKKy0tIHRlc3QgcG9zc2libHkgaW1wcmVjaXNlIHJlc3VsdHMKK2RpdngyMjAgZGl2aWRlIDM5MSAgIDU5NyAtPiAgMC42NTQ5NDEzNzQgSW5leGFjdCBSb3VuZGVkCitkaXZ4MjIxIGRpdmlkZSAzOTEgIC01OTcgLT4gLTAuNjU0OTQxMzc0IEluZXhhY3QgUm91bmRlZAorZGl2eDIyMiBkaXZpZGUgLTM5MSAgNTk3IC0+IC0wLjY1NDk0MTM3NCBJbmV4YWN0IFJvdW5kZWQKK2RpdngyMjMgZGl2aWRlIC0zOTEgLTU5NyAtPiAgMC42NTQ5NDEzNzQgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2RpdngyNzAgZGl2aWRlIDEgMWU5OTk5OTk5OTkgICAgLT4gMUUtOTk5OTk5OTk5CitkaXZ4MjcxIGRpdmlkZSAxIDAuOWU5OTk5OTk5OTkgIC0+IDEuMTExMTExMTFFLTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RpdngyNzIgZGl2aWRlIDEgMC45OWU5OTk5OTk5OTkgLT4gMS4wMTAxMDEwMUUtOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGl2eDI3MyBkaXZpZGUgMSAwLjk5OTk5OTk5OWU5OTk5OTk5OTkgLT4gMS4wMDAwMDAwMEUtOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGl2eDI3NCBkaXZpZGUgOWU5OTk5OTk5OTkgICAgMSAtPiA5RSs5OTk5OTk5OTkKK2RpdngyNzUgZGl2aWRlIDkuOWU5OTk5OTk5OTkgIDEgLT4gOS45RSs5OTk5OTk5OTkKK2RpdngyNzYgZGl2aWRlIDkuOTllOTk5OTk5OTk5IDEgLT4gOS45OUUrOTk5OTk5OTk5CitkaXZ4Mjc3IGRpdmlkZSA5Ljk5OTk5OTk5ZTk5OTk5OTk5OSAxIC0+IDkuOTk5OTk5OTlFKzk5OTk5OTk5OQorCitkaXZ4MjgwIGRpdmlkZSAwLjEgOWUtOTk5OTk5OTk5ICAgLT4gMS4xMTExMTExMUUrOTk5OTk5OTk3IEluZXhhY3QgUm91bmRlZAorZGl2eDI4MSBkaXZpZGUgMC4xIDk5ZS05OTk5OTk5OTkgIC0+IDEuMDEwMTAxMDFFKzk5OTk5OTk5NiBJbmV4YWN0IFJvdW5kZWQKK2RpdngyODIgZGl2aWRlIDAuMSA5OTllLTk5OTk5OTk5OSAtPiAxLjAwMTAwMTAwRSs5OTk5OTk5OTUgSW5leGFjdCBSb3VuZGVkCisKK2RpdngyODMgZGl2aWRlIDAuMSA5ZS05OTk5OTk5OTggICAgIC0+IDEuMTExMTExMTFFKzk5OTk5OTk5NiBJbmV4YWN0IFJvdW5kZWQKK2RpdngyODQgZGl2aWRlIDAuMSA5OWUtOTk5OTk5OTk4ICAgIC0+IDEuMDEwMTAxMDFFKzk5OTk5OTk5NSBJbmV4YWN0IFJvdW5kZWQKK2RpdngyODUgZGl2aWRlIDAuMSA5OTllLTk5OTk5OTk5OCAgIC0+IDEuMDAxMDAxMDBFKzk5OTk5OTk5NCBJbmV4YWN0IFJvdW5kZWQKK2RpdngyODYgZGl2aWRlIDAuMSA5OTllLTk5OTk5OTk5NyAgIC0+IDEuMDAxMDAxMDBFKzk5OTk5OTk5MyBJbmV4YWN0IFJvdW5kZWQKK2RpdngyODcgZGl2aWRlIDAuMSA5OTk5ZS05OTk5OTk5OTcgIC0+IDEuMDAwMTAwMDFFKzk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RpdngyODggZGl2aWRlIDAuMSA5OTk5OWUtOTk5OTk5OTk3IC0+IDEuMDAwMDEwMDBFKzk5OTk5OTk5MSBJbmV4YWN0IFJvdW5kZWQKKworLS0gRGl2aWRlIGludG8gMCB0ZXN0cworCitkaXZ4MzAxIGRpdmlkZSAgICAwICAgIDcgICAgIC0+IDAKK2RpdngzMDIgZGl2aWRlICAgIDAgICAgN0UtNSAgLT4gMEUrNQorZGl2eDMwMyBkaXZpZGUgICAgMCAgICA3RS0xICAtPiAwRSsxCitkaXZ4MzA0IGRpdmlkZSAgICAwICAgIDdFKzEgIC0+IDAuMAorZGl2eDMwNSBkaXZpZGUgICAgMCAgICA3RSs1ICAtPiAwLjAwMDAwCitkaXZ4MzA2IGRpdmlkZSAgICAwICAgIDdFKzYgIC0+IDAuMDAwMDAwCitkaXZ4MzA3IGRpdmlkZSAgICAwICAgIDdFKzcgIC0+IDBFLTcKK2RpdngzMDggZGl2aWRlICAgIDAgICA3MEUtNSAgLT4gMEUrNQorZGl2eDMwOSBkaXZpZGUgICAgMCAgIDcwRS0xICAtPiAwRSsxCitkaXZ4MzEwIGRpdmlkZSAgICAwICAgNzBFKzAgIC0+IDAKK2RpdngzMTEgZGl2aWRlICAgIDAgICA3MEUrMSAgLT4gMC4wCitkaXZ4MzEyIGRpdmlkZSAgICAwICAgNzBFKzUgIC0+IDAuMDAwMDAKK2RpdngzMTMgZGl2aWRlICAgIDAgICA3MEUrNiAgLT4gMC4wMDAwMDAKK2RpdngzMTQgZGl2aWRlICAgIDAgICA3MEUrNyAgLT4gMEUtNworZGl2eDMxNSBkaXZpZGUgICAgMCAgNzAwRS01ICAtPiAwRSs1CitkaXZ4MzE2IGRpdmlkZSAgICAwICA3MDBFLTEgIC0+IDBFKzEKK2RpdngzMTcgZGl2aWRlICAgIDAgIDcwMEUrMCAgLT4gMAorZGl2eDMxOCBkaXZpZGUgICAgMCAgNzAwRSsxICAtPiAwLjAKK2RpdngzMTkgZGl2aWRlICAgIDAgIDcwMEUrNSAgLT4gMC4wMDAwMAorZGl2eDMyMCBkaXZpZGUgICAgMCAgNzAwRSs2ICAtPiAwLjAwMDAwMAorZGl2eDMyMSBkaXZpZGUgICAgMCAgNzAwRSs3ICAtPiAwRS03CitkaXZ4MzIyIGRpdmlkZSAgICAwICA3MDBFKzc3IC0+IDBFLTc3CisKK2RpdngzMzEgZGl2aWRlIDBFLTMgICAgN0UtNSAgLT4gMEUrMgorZGl2eDMzMiBkaXZpZGUgMEUtMyAgICA3RS0xICAtPiAwLjAwCitkaXZ4MzMzIGRpdmlkZSAwRS0zICAgIDdFKzEgIC0+IDAuMDAwMAorZGl2eDMzNCBkaXZpZGUgMEUtMyAgICA3RSs1ICAtPiAwRS04CitkaXZ4MzM1IGRpdmlkZSAwRS0xICAgIDdFLTUgIC0+IDBFKzQKK2RpdngzMzYgZGl2aWRlIDBFLTEgICAgN0UtMSAgLT4gMAorZGl2eDMzNyBkaXZpZGUgMEUtMSAgICA3RSsxICAtPiAwLjAwCitkaXZ4MzM4IGRpdmlkZSAwRS0xICAgIDdFKzUgIC0+IDAuMDAwMDAwCitkaXZ4MzM5IGRpdmlkZSAwRSsxICAgIDdFLTUgIC0+IDBFKzYKK2RpdngzNDAgZGl2aWRlIDBFKzEgICAgN0UtMSAgLT4gMEUrMgorZGl2eDM0MSBkaXZpZGUgMEUrMSAgICA3RSsxICAtPiAwCitkaXZ4MzQyIGRpdmlkZSAwRSsxICAgIDdFKzUgIC0+IDAuMDAwMAorZGl2eDM0MyBkaXZpZGUgMEUrMyAgICA3RS01ICAtPiAwRSs4CitkaXZ4MzQ0IGRpdmlkZSAwRSszICAgIDdFLTEgIC0+IDBFKzQKK2RpdngzNDUgZGl2aWRlIDBFKzMgICAgN0UrMSAgLT4gMEUrMgorZGl2eDM0NiBkaXZpZGUgMEUrMyAgICA3RSs1ICAtPiAwLjAwCisKK21heGV4cG9uZW50OiA5MgorbWluZXhwb25lbnQ6IC05MgorcHJlY2lzaW9uOiAgICA3CitkaXZ4MzUxIGRpdmlkZSAwRS05MiAgIDdFLTEgIC0+IDBFLTkxCitkaXZ4MzUyIGRpdmlkZSAwRS05MiAgIDdFKzEgIC0+IDBFLTkzCitkaXZ4MzUzIGRpdmlkZSAwRS05MiAgIDdFKzUgIC0+IDBFLTk3CitkaXZ4MzU0IGRpdmlkZSAwRS05MiAgIDdFKzYgIC0+IDBFLTk4CitkaXZ4MzU1IGRpdmlkZSAwRS05MiAgIDdFKzcgIC0+IDBFLTk4IENsYW1wZWQKK2RpdngzNTYgZGl2aWRlIDBFLTkyIDc3N0UtMSAgLT4gMEUtOTEKK2RpdngzNTcgZGl2aWRlIDBFLTkyIDc3N0UrMSAgLT4gMEUtOTMKK2RpdngzNTggZGl2aWRlIDBFLTkyIDc3N0UrMyAgLT4gMEUtOTUKK2RpdngzNTkgZGl2aWRlIDBFLTkyIDc3N0UrNCAgLT4gMEUtOTYKK2RpdngzNjAgZGl2aWRlIDBFLTkyIDc3N0UrNSAgLT4gMEUtOTcKK2RpdngzNjEgZGl2aWRlIDBFLTkyIDc3N0UrNiAgLT4gMEUtOTgKK2RpdngzNjIgZGl2aWRlIDBFLTkyIDc3N0UrNyAgLT4gMEUtOTggQ2xhbXBlZAorZGl2eDM2MyBkaXZpZGUgMEUtOTIgICA3RSs5MiAtPiAwRS05OCBDbGFtcGVkCisKK2RpdngzNzEgZGl2aWRlIDBFLTkyIDcwMEUtMSAgLT4gMEUtOTEKK2RpdngzNzIgZGl2aWRlIDBFLTkyIDcwMEUrMSAgLT4gMEUtOTMKK2RpdngzNzMgZGl2aWRlIDBFLTkyIDcwMEUrMyAgLT4gMEUtOTUKK2RpdngzNzQgZGl2aWRlIDBFLTkyIDcwMEUrNCAgLT4gMEUtOTYKK2RpdngzNzUgZGl2aWRlIDBFLTkyIDcwMEUrNSAgLT4gMEUtOTcKK2RpdngzNzYgZGl2aWRlIDBFLTkyIDcwMEUrNiAgLT4gMEUtOTgKK2RpdngzNzcgZGl2aWRlIDBFLTkyIDcwMEUrNyAgLT4gMEUtOTggQ2xhbXBlZAorCitkaXZ4MzgxIGRpdmlkZSAwRSs5MiAgIDdFKzEgIC0+IDBFKzkxCitkaXZ4MzgyIGRpdmlkZSAwRSs5MiAgIDdFKzAgIC0+IDBFKzkyCitkaXZ4MzgzIGRpdmlkZSAwRSs5MiAgIDdFLTEgIC0+IDBFKzkyIENsYW1wZWQKK2RpdngzODQgZGl2aWRlIDBFKzkwIDc3N0UrMSAgLT4gMEUrODkKK2RpdngzODUgZGl2aWRlIDBFKzkwIDc3N0UtMSAgLT4gMEUrOTEKK2RpdngzODYgZGl2aWRlIDBFKzkwIDc3N0UtMiAgLT4gMEUrOTIKK2RpdngzODcgZGl2aWRlIDBFKzkwIDc3N0UtMyAgLT4gMEUrOTIgQ2xhbXBlZAorZGl2eDM4OCBkaXZpZGUgMEUrOTAgNzc3RS00ICAtPiAwRSs5MiBDbGFtcGVkCisKK2RpdngzOTEgZGl2aWRlIDBFKzkwIDcwMEUrMSAgLT4gMEUrODkKK2RpdngzOTIgZGl2aWRlIDBFKzkwIDcwMEUtMSAgLT4gMEUrOTEKK2RpdngzOTMgZGl2aWRlIDBFKzkwIDcwMEUtMiAgLT4gMEUrOTIKK2RpdngzOTQgZGl2aWRlIDBFKzkwIDcwMEUtMyAgLT4gMEUrOTIgQ2xhbXBlZAorZGl2eDM5NSBkaXZpZGUgMEUrOTAgNzAwRS00ICAtPiAwRSs5MiBDbGFtcGVkCisKKy0tIGlucHV0IHJvdW5kaW5nIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorZGl2eDQwMSBkaXZpZGUgMTIzNDU2NzgwMDAgMSAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitkaXZ4NDAyIGRpdmlkZSAxIDEyMzQ1Njc4MDAwIC0+IDguMTAwMDAwNjZFLTExIEluZXhhY3QgUm91bmRlZAorZGl2eDQwMyBkaXZpZGUgMTIzNDU2NzgwMCAgMSAtPiAxLjIzNDU2NzgwRSs5ICBSb3VuZGVkCitkaXZ4NDA0IGRpdmlkZSAxIDEyMzQ1Njc4MDAgIC0+IDguMTAwMDAwNjZFLTEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQwNSBkaXZpZGUgMTIzNDU2Nzg5MCAgMSAtPiAxLjIzNDU2Nzg5RSs5ICBSb3VuZGVkCitkaXZ4NDA2IGRpdmlkZSAxIDEyMzQ1Njc4OTAgIC0+IDguMTAwMDAwMDdFLTEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQwNyBkaXZpZGUgMTIzNDU2Nzg5MSAgMSAtPiAxLjIzNDU2Nzg5RSs5ICBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MDggZGl2aWRlIDEgMTIzNDU2Nzg5MSAgLT4gOC4xMDAwMDAwN0UtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDA5IGRpdmlkZSAxMjM0NTY3ODkwMSAxIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQxMCBkaXZpZGUgMSAxMjM0NTY3ODkwMSAtPiA4LjEwMDAwMDA3RS0xMSBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MTEgZGl2aWRlIDEyMzQ1Njc4OTYgIDEgLT4gMS4yMzQ1Njc5MEUrOSAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDEyIGRpdmlkZSAxIDEyMzQ1Njc4OTYgIC0+IDguMTAwMDAwMDNFLTEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQxMyBkaXZpZGUgMSAxMjM0NTY3ODk3ICAtPiA4LjEwMDAwMDAzRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MTQgZGl2aWRlIDEgMTIzNDU2Nzg5OCAgLT4gOC4xMDAwMDAwMkUtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDE1IGRpdmlkZSAxIDEyMzQ1Njc4OTkgIC0+IDguMTAwMDAwMDFFLTEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQxNiBkaXZpZGUgMSAxMjM0NTY3OTAwICAtPiA4LjEwMDAwMDAxRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MTcgZGl2aWRlIDEgMTIzNDU2NzkwMSAgLT4gOC4xMDAwMDAwMEUtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDE4IGRpdmlkZSAxIDEyMzQ1Njc5MDIgIC0+IDguMDk5OTk5OTlFLTEwIEluZXhhY3QgUm91bmRlZAorLS0gc29tZSBsb25naWVzCitkaXZ4NDIxIGRpdmlkZSAxMjM0NTY3ODk2LjAwMDAwMDAwMDAwMCAgMSAtPiAxLjIzNDU2NzkwRSs5ICBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MjIgZGl2aWRlIDEgMTIzNDU2Nzg5Ni4wMDAwMDAwMDAwMDAgIC0+IDguMTAwMDAwMDNFLTEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQyMyBkaXZpZGUgMTIzNDU2Nzg5Ni4wMDAwMDAwMDAwMDEgIDEgLT4gMS4yMzQ1Njc5MEUrOSAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDI0IGRpdmlkZSAxIDEyMzQ1Njc4OTYuMDAwMDAwMDAwMDAxICAtPiA4LjEwMDAwMDAzRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MjUgZGl2aWRlIDEyMzQ1Njc4OTYuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAxIC0+IDEuMjM0NTY3OTBFKzkgIEluZXhhY3QgUm91bmRlZAorZGl2eDQyNiBkaXZpZGUgMSAxMjM0NTY3ODk2LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgLT4gOC4xMDAwMDAwM0UtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDI3IGRpdmlkZSAxMjM0NTY3ODk3LjkwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgMSAtPiAxLjIzNDU2NzkwRSs5ICBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MjggZGl2aWRlIDEgMTIzNDU2Nzg5Ny45MDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+IDguMTAwMDAwMDJFLTEwIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDE1CistLSBzdGlsbCBjaGVja2luZy4uLgorZGl2eDQ0MSBkaXZpZGUgMTIzNDU2NzgwMDAgMSAtPiAxMjM0NTY3ODAwMAorZGl2eDQ0MiBkaXZpZGUgMSAxMjM0NTY3ODAwMCAtPiA4LjEwMDAwMDY2NDIwMDA1RS0xMSBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0NDMgZGl2aWRlIDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMAorZGl2eDQ0NCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2NDIwMDA1RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0NDUgZGl2aWRlIDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MAorZGl2eDQ0NiBkaXZpZGUgMSAxMjM0NTY3ODkwICAtPiA4LjEwMDAwMDA3MzcxMDAwRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0NDcgZGl2aWRlIDEyMzQ1Njc4OTEgIDEgLT4gMTIzNDU2Nzg5MQorZGl2eDQ0OCBkaXZpZGUgMSAxMjM0NTY3ODkxICAtPiA4LjEwMDAwMDA2NzE0OTAwRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0NDkgZGl2aWRlIDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDEKK2Rpdng0NTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwNzMwNTM5MEUtMTEgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDUxIGRpdmlkZSAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYKK2Rpdng0NTIgZGl2aWRlIDEgMTIzNDU2Nzg5NiAgLT4gOC4xMDAwMDAwMzQzNDQwMEUtMTAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGhpZ2gtbG93cworZGl2eDQ1MyBkaXZpZGUgMWUrMSAgIDEgICAgLT4gICAxRSsxCitkaXZ4NDU0IGRpdmlkZSAxZSsxICAgMS4wICAtPiAgIDFFKzEKK2Rpdng0NTUgZGl2aWRlIDFlKzEgICAxLjAwIC0+ICAgMUUrMQorZGl2eDQ1NiBkaXZpZGUgMWUrMiAgIDIgICAgLT4gICA1RSsxCitkaXZ4NDU3IGRpdmlkZSAxZSsyICAgMi4wICAtPiAgIDVFKzEKK2Rpdng0NTggZGl2aWRlIDFlKzIgICAyLjAwIC0+ICAgNUUrMQorCistLSBzb21lIGZyb20gSUVFRSBkaXNjdXNzaW9ucworZGl2eDQ2MCBkaXZpZGUgM2UwICAgICAgMmUwICAgICAtPiAxLjUKK2Rpdng0NjEgZGl2aWRlIDMwZS0xICAgIDJlMCAgICAgLT4gMS41CitkaXZ4NDYyIGRpdmlkZSAzMDBlLTIgICAyZTAgICAgIC0+IDEuNTAKK2Rpdng0NjQgZGl2aWRlIDMwMDBlLTMgIDJlMCAgICAgLT4gMS41MDAKK2Rpdng0NjUgZGl2aWRlIDNlMCAgICAgIDIwZS0xICAgLT4gMS41CitkaXZ4NDY2IGRpdmlkZSAzMGUtMSAgICAyMGUtMSAgIC0+IDEuNQorZGl2eDQ2NyBkaXZpZGUgMzAwZS0yICAgMjBlLTEgICAtPiAxLjUKK2Rpdng0NjggZGl2aWRlIDMwMDBlLTMgIDIwZS0xICAgLT4gMS41MAorZGl2eDQ2OSBkaXZpZGUgM2UwICAgICAgMjAwZS0yICAtPiAxLjUKK2Rpdng0NzAgZGl2aWRlIDMwZS0xICAgIDIwMGUtMiAgLT4gMS41CitkaXZ4NDcxIGRpdmlkZSAzMDBlLTIgICAyMDBlLTIgIC0+IDEuNQorZGl2eDQ3MiBkaXZpZGUgMzAwMGUtMyAgMjAwZS0yICAtPiAxLjUKK2Rpdng0NzMgZGl2aWRlIDNlMCAgICAgIDIwMDBlLTMgLT4gMS41CitkaXZ4NDc0IGRpdmlkZSAzMGUtMSAgICAyMDAwZS0zIC0+IDEuNQorZGl2eDQ3NSBkaXZpZGUgMzAwZS0yICAgMjAwMGUtMyAtPiAxLjUKK2Rpdng0NzYgZGl2aWRlIDMwMDBlLTMgIDIwMDBlLTMgLT4gMS41CisKKy0tIHNvbWUgcmVjaXByb2NhbHMKK2Rpdng0ODAgZGl2aWRlIDEgICAgICAgIDEuMEUrMzMgLT4gMUUtMzMKK2Rpdng0ODEgZGl2aWRlIDEgICAgICAgIDEwRSszMyAgLT4gMUUtMzQKK2Rpdng0ODIgZGl2aWRlIDEgICAgICAgIDEuMEUtMzMgLT4gMUUrMzMKK2Rpdng0ODMgZGl2aWRlIDEgICAgICAgIDEwRS0zMyAgLT4gMUUrMzIKKworLS0gUk1TIGRpc2N1c3Npb24gdGFibGUKK21heGV4cG9uZW50OiAgOTYKK21pbmV4cG9uZW50OiAtOTUKK3ByZWNpc2lvbjogICAgIDcKKworZGl2eDQ4NCBkaXZpZGUgMGU1ICAgICAxZTMgLT4gICAwRSsyCitkaXZ4NDg1IGRpdmlkZSAwZTUgICAgIDJlMyAtPiAgIDBFKzIKK2Rpdng0ODYgZGl2aWRlIDBlNSAgICAxMGUyIC0+ICAgMEUrMworZGl2eDQ4NyBkaXZpZGUgMGU1ICAgIDIwZTIgLT4gICAwRSszCitkaXZ4NDg4IGRpdmlkZSAwZTUgICAxMDBlMSAtPiAgIDBFKzQKK2Rpdng0ODkgZGl2aWRlIDBlNSAgIDIwMGUxIC0+ICAgMEUrNAorCitkaXZ4NDkxIGRpdmlkZSAxZTUgICAgIDFlMyAtPiAgIDFFKzIKK2Rpdng0OTIgZGl2aWRlIDFlNSAgICAgMmUzIC0+ICAgNUUrMQorZGl2eDQ5MyBkaXZpZGUgMWU1ICAgIDEwZTIgLT4gICAxRSsyCitkaXZ4NDk0IGRpdmlkZSAxZTUgICAgMjBlMiAtPiAgIDVFKzEKK2Rpdng0OTUgZGl2aWRlIDFlNSAgIDEwMGUxIC0+ICAgMUUrMgorZGl2eDQ5NiBkaXZpZGUgMWU1ICAgMjAwZTEgLT4gICA1RSsxCisKKy0tIHRyeXplcm9zIGNhc2VzCitwcmVjaXNpb246ICAgNworcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5MgorbWluZXhwb25lbnQ6IC05MgorZGl2eDQ5NyAgZGl2aWRlICAwRSs4NiAxMDAwRS0xMyAgLT4gMEUrOTIgQ2xhbXBlZAorZGl2eDQ5OCAgZGl2aWRlICAwRS05OCAxMDAwRSsxMyAgLT4gMEUtOTggQ2xhbXBlZAorCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CisKKy0tIGZvY3VzIG9uIHRyYWlsaW5nIHplcm9zIGlzc3VlcworcHJlY2lzaW9uOiAgIDkKK2Rpdng1MDAgZGl2aWRlICAxICAgICAgOS45ICAgIC0+ICAwLjEwMTAxMDEwMSAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgOAorZGl2eDUwMSBkaXZpZGUgIDEgICAgICA5LjkgICAgLT4gIDAuMTAxMDEwMTAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA3CitkaXZ4NTAyIGRpdmlkZSAgMSAgICAgIDkuOSAgICAtPiAgMC4xMDEwMTAxICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDYKK2Rpdng1MDMgZGl2aWRlICAxICAgICAgOS45ICAgIC0+ICAwLjEwMTAxMCAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgOQorCitkaXZ4NTExIGRpdmlkZSAxICAgICAgICAgMiAgICAtPiAwLjUKK2Rpdng1MTIgZGl2aWRlIDEuMCAgICAgICAyICAgIC0+IDAuNQorZGl2eDUxMyBkaXZpZGUgMS4wMCAgICAgIDIgICAgLT4gMC41MAorZGl2eDUxNCBkaXZpZGUgMS4wMDAgICAgIDIgICAgLT4gMC41MDAKK2Rpdng1MTUgZGl2aWRlIDEuMDAwMCAgICAyICAgIC0+IDAuNTAwMAorZGl2eDUxNiBkaXZpZGUgMS4wMDAwMCAgIDIgICAgLT4gMC41MDAwMAorZGl2eDUxNyBkaXZpZGUgMS4wMDAwMDAgIDIgICAgLT4gMC41MDAwMDAKK2Rpdng1MTggZGl2aWRlIDEuMDAwMDAwMCAyICAgIC0+IDAuNTAwMDAwMAorZGl2eDUxOSBkaXZpZGUgMS4wMCAgICAgIDIuMDAgLT4gMC41CisKK2Rpdng1MjEgZGl2aWRlIDIgICAgMSAgICAgICAgIC0+IDIKK2Rpdng1MjIgZGl2aWRlIDIgICAgMS4wICAgICAgIC0+IDIKK2Rpdng1MjMgZGl2aWRlIDIgICAgMS4wMCAgICAgIC0+IDIKK2Rpdng1MjQgZGl2aWRlIDIgICAgMS4wMDAgICAgIC0+IDIKK2Rpdng1MjUgZGl2aWRlIDIgICAgMS4wMDAwICAgIC0+IDIKK2Rpdng1MjYgZGl2aWRlIDIgICAgMS4wMDAwMCAgIC0+IDIKK2Rpdng1MjcgZGl2aWRlIDIgICAgMS4wMDAwMDAgIC0+IDIKK2Rpdng1MjggZGl2aWRlIDIgICAgMS4wMDAwMDAwIC0+IDIKK2Rpdng1MjkgZGl2aWRlIDIuMDAgMS4wMCAgICAgIC0+IDIKKworZGl2eDUzMCBkaXZpZGUgIDIuNDAgICAyICAgICAgLT4gIDEuMjAKK2Rpdng1MzEgZGl2aWRlICAyLjQwICAgNCAgICAgIC0+ICAwLjYwCitkaXZ4NTMyIGRpdmlkZSAgMi40MCAgMTAgICAgICAtPiAgMC4yNAorZGl2eDUzMyBkaXZpZGUgIDIuNDAgICAyLjAgICAgLT4gIDEuMgorZGl2eDUzNCBkaXZpZGUgIDIuNDAgICA0LjAgICAgLT4gIDAuNgorZGl2eDUzNSBkaXZpZGUgIDIuNDAgIDEwLjAgICAgLT4gIDAuMjQKK2Rpdng1MzYgZGl2aWRlICAyLjQwICAgMi4wMCAgIC0+ICAxLjIKK2Rpdng1MzcgZGl2aWRlICAyLjQwICAgNC4wMCAgIC0+ICAwLjYKK2Rpdng1MzggZGl2aWRlICAyLjQwICAxMC4wMCAgIC0+ICAwLjI0CitkaXZ4NTM5IGRpdmlkZSAgMC45ICAgIDAuMSAgICAtPiAgOQorZGl2eDU0MCBkaXZpZGUgIDAuOSAgICAwLjAxICAgLT4gIDlFKzEKK2Rpdng1NDEgZGl2aWRlICAwLjkgICAgMC4wMDEgIC0+ICA5RSsyCitkaXZ4NTQyIGRpdmlkZSAgNSAgICAgIDIgICAgICAtPiAgMi41CitkaXZ4NTQzIGRpdmlkZSAgNSAgICAgIDIuMCAgICAtPiAgMi41CitkaXZ4NTQ0IGRpdmlkZSAgNSAgICAgIDIuMDAgICAtPiAgMi41CitkaXZ4NTQ1IGRpdmlkZSAgNSAgICAgIDIwICAgICAtPiAgMC4yNQorZGl2eDU0NiBkaXZpZGUgIDUgICAgICAyMC4wICAgLT4gIDAuMjUKK2Rpdng1NDcgZGl2aWRlICAyLjQwMCAgMiAgICAgIC0+ICAxLjIwMAorZGl2eDU0OCBkaXZpZGUgIDIuNDAwICAyLjAgICAgLT4gIDEuMjAKK2Rpdng1NDkgZGl2aWRlICAyLjQwMCAgMi40MDAgIC0+ICAxCisKK2Rpdng1NTAgZGl2aWRlICAyNDAgICAgMSAgICAgIC0+ICAyNDAKK2Rpdng1NTEgZGl2aWRlICAyNDAgICAgMTAgICAgIC0+ICAyNAorZGl2eDU1MiBkaXZpZGUgIDI0MCAgICAxMDAgICAgLT4gIDIuNAorZGl2eDU1MyBkaXZpZGUgIDI0MCAgICAxMDAwICAgLT4gIDAuMjQKK2Rpdng1NTQgZGl2aWRlICAyNDAwICAgMSAgICAgIC0+ICAyNDAwCitkaXZ4NTU1IGRpdmlkZSAgMjQwMCAgIDEwICAgICAtPiAgMjQwCitkaXZ4NTU2IGRpdmlkZSAgMjQwMCAgIDEwMCAgICAtPiAgMjQKK2Rpdng1NTcgZGl2aWRlICAyNDAwICAgMTAwMCAgIC0+ICAyLjQKKworLS0gK3ZlIGV4cG9uZW50CitwcmVjaXNpb246IDUKK2Rpdng1NzAgZGl2aWRlICAyLjRFKzYgICAgIDIgIC0+ICAxLjJFKzYKK2Rpdng1NzEgZGl2aWRlICAyLjQwRSs2ICAgIDIgIC0+ICAxLjIwRSs2CitkaXZ4NTcyIGRpdmlkZSAgMi40MDBFKzYgICAyICAtPiAgMS4yMDBFKzYKK2Rpdng1NzMgZGl2aWRlICAyLjQwMDBFKzYgIDIgIC0+ICAxLjIwMDBFKzYKK2Rpdng1NzQgZGl2aWRlICAyNEUrNSAgICAgIDIgIC0+ICAxLjJFKzYKK2Rpdng1NzUgZGl2aWRlICAyNDBFKzQgICAgIDIgIC0+ICAxLjIwRSs2CitkaXZ4NTc2IGRpdmlkZSAgMjQwMEUrMyAgICAyICAtPiAgMS4yMDBFKzYKK2Rpdng1NzcgZGl2aWRlICAyNDAwMEUrMiAgIDIgIC0+ICAxLjIwMDBFKzYKK3ByZWNpc2lvbjogNgorZGl2eDU4MCBkaXZpZGUgIDIuNEUrNiAgICAgMiAgLT4gIDEuMkUrNgorZGl2eDU4MSBkaXZpZGUgIDIuNDBFKzYgICAgMiAgLT4gIDEuMjBFKzYKK2Rpdng1ODIgZGl2aWRlICAyLjQwMEUrNiAgIDIgIC0+ICAxLjIwMEUrNgorZGl2eDU4MyBkaXZpZGUgIDIuNDAwMEUrNiAgMiAgLT4gIDEuMjAwMEUrNgorZGl2eDU4NCBkaXZpZGUgIDI0RSs1ICAgICAgMiAgLT4gIDEuMkUrNgorZGl2eDU4NSBkaXZpZGUgIDI0MEUrNCAgICAgMiAgLT4gIDEuMjBFKzYKK2Rpdng1ODYgZGl2aWRlICAyNDAwRSszICAgIDIgIC0+ICAxLjIwMEUrNgorZGl2eDU4NyBkaXZpZGUgIDI0MDAwRSsyICAgMiAgLT4gIDEuMjAwMEUrNgorcHJlY2lzaW9uOiA3CitkaXZ4NTkwIGRpdmlkZSAgMi40RSs2ICAgICAyICAtPiAgMS4yRSs2CitkaXZ4NTkxIGRpdmlkZSAgMi40MEUrNiAgICAyICAtPiAgMS4yMEUrNgorZGl2eDU5MiBkaXZpZGUgIDIuNDAwRSs2ICAgMiAgLT4gIDEuMjAwRSs2CitkaXZ4NTkzIGRpdmlkZSAgMi40MDAwRSs2ICAyICAtPiAgMS4yMDAwRSs2CitkaXZ4NTk0IGRpdmlkZSAgMjRFKzUgICAgICAyICAtPiAgMS4yRSs2CitkaXZ4NTk1IGRpdmlkZSAgMjQwRSs0ICAgICAyICAtPiAgMS4yMEUrNgorZGl2eDU5NiBkaXZpZGUgIDI0MDBFKzMgICAgMiAgLT4gIDEuMjAwRSs2CitkaXZ4NTk3IGRpdmlkZSAgMjQwMDBFKzIgICAyICAtPiAgMS4yMDAwRSs2CitwcmVjaXNpb246ICAgOQorZGl2eDYwMCBkaXZpZGUgIDIuNEUrOSAgICAgMiAgLT4gIDEuMkUrOQorZGl2eDYwMSBkaXZpZGUgIDIuNDBFKzkgICAgMiAgLT4gIDEuMjBFKzkKK2Rpdng2MDIgZGl2aWRlICAyLjQwMEUrOSAgIDIgIC0+ICAxLjIwMEUrOQorZGl2eDYwMyBkaXZpZGUgIDIuNDAwMEUrOSAgMiAgLT4gIDEuMjAwMEUrOQorZGl2eDYwNCBkaXZpZGUgIDI0RSs4ICAgICAgMiAgLT4gIDEuMkUrOQorZGl2eDYwNSBkaXZpZGUgIDI0MEUrNyAgICAgMiAgLT4gIDEuMjBFKzkKK2Rpdng2MDYgZGl2aWRlICAyNDAwRSs2ICAgIDIgIC0+ICAxLjIwMEUrOQorZGl2eDYwNyBkaXZpZGUgIDI0MDAwRSs1ICAgMiAgLT4gIDEuMjAwMEUrOQorCistLSBsb25nIG9wZXJhbmQgdHJpYW5nbGUKK3ByZWNpc2lvbjogMzMKK2Rpdng2MTAgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44MTMxMDk3NzAzNzkyIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMgorZGl2eDYxMSBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk3LjgxMzEwOTc3MDM3OSAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMxCitkaXZ4NjEyIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcuODEzMTA5NzcwMzggICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzAKK2Rpdng2MTMgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44MTMxMDk3NzA0ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOQorZGl2eDYxNCBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk3LjgxMzEwOTc3MCAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI4CitkaXZ4NjE1IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcuODEzMTA5NzcgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjcKK2Rpdng2MTYgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44MTMxMDk4ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNgorZGl2eDYxNyBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk3LjgxMzExMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI1CitkaXZ4NjE4IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcuODEzMTEgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjQKK2Rpdng2MTkgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44MTMxICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMworZGl2eDYyMCBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk3LjgxMyAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIyCitkaXZ4NjIxIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcuODEgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjEKK2Rpdng2MjIgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMAorZGl2eDYyMyBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk4ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE5CitkaXZ4NjI0IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODgzNzk2ODE3ODBFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE4CitkaXZ4NjI1IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODgzNzk2ODE3OEUrMTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTcKK2Rpdng2MjYgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00LjEwMTE0MDg4ODM3OTY4MThFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE2CitkaXZ4NjI3IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODgzNzk2ODJFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE1CitkaXZ4NjI4IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODgzNzk2OEUrMTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTQKK2Rpdng2MjkgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00LjEwMTE0MDg4ODM3OTdFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEzCitkaXZ4NjMwIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODgzODBFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEyCitkaXZ4NjMxIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODgzOEUrMTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTEKK2Rpdng2MzIgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00LjEwMTE0MDg4ODRFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEwCitkaXZ4NjMzIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODhFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA5CitkaXZ4NjM0IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4OUUrMTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDgKK2Rpdng2MzUgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00LjEwMTE0MDlFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA3CitkaXZ4NjM2IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDFFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA2CitkaXZ4NjM3IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNEUrMTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDUKK2Rpdng2MzggZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00LjEwMTFFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA0CitkaXZ4NjM5IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDFFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzCitkaXZ4NjQwIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMEUrMTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIKK2Rpdng2NDEgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00LjFFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxCitkaXZ4NjQyIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNEUrMTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworZGl2eDczMSBkaXZpZGUgNS4wMCAxRS0zICAgIC0+IDUuMDBFKzMKK2Rpdng3MzIgZGl2aWRlIDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkaXZ4NzMzIGRpdmlkZSAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGl2eDczNCBkaXZpZGUgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rpdng3MzUgZGl2aWRlIC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkaXZ4NzM2IGRpdmlkZSAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorCitkaXZ4NzQxIGRpdmlkZSAgMCAgICAtMSAgICAgLT4gLTAKK2Rpdng3NDIgZGl2aWRlIC0wICAgIC0xICAgICAtPiAgMAorZGl2eDc0MyBkaXZpZGUgIDAgICAgIDEgICAgIC0+ICAwCitkaXZ4NzQ0IGRpdmlkZSAtMCAgICAgMSAgICAgLT4gLTAKK2Rpdng3NDUgZGl2aWRlIC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDc0NiBkaXZpZGUgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4NzQ3IGRpdmlkZSAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng3NDggZGl2aWRlICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkaXZ4NzUxIGRpdmlkZSAgMC4wICAtMSAgICAgLT4gLTAuMAorZGl2eDc1MiBkaXZpZGUgLTAuMCAgLTEgICAgIC0+ICAwLjAKK2Rpdng3NTMgZGl2aWRlICAwLjAgICAxICAgICAtPiAgMC4wCitkaXZ4NzU0IGRpdmlkZSAtMC4wICAgMSAgICAgLT4gLTAuMAorZGl2eDc1NSBkaXZpZGUgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4NzU2IGRpdmlkZSAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng3NTcgZGl2aWRlICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDc1OCBkaXZpZGUgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2Rpdng3NjEgZGl2aWRlICAwICAgIC0xLjAgICAtPiAtMEUrMQorZGl2eDc2MiBkaXZpZGUgLTAgICAgLTEuMCAgIC0+ICAwRSsxCitkaXZ4NzYzIGRpdmlkZSAgMCAgICAgMS4wICAgLT4gIDBFKzEKK2Rpdng3NjQgZGl2aWRlIC0wICAgICAxLjAgICAtPiAtMEUrMQorZGl2eDc2NSBkaXZpZGUgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4NzY2IGRpdmlkZSAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng3NjcgZGl2aWRlICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDc2OCBkaXZpZGUgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2Rpdng3NzEgZGl2aWRlICAwLjAgIC0xLjAgICAtPiAtMAorZGl2eDc3MiBkaXZpZGUgLTAuMCAgLTEuMCAgIC0+ICAwCitkaXZ4NzczIGRpdmlkZSAgMC4wICAgMS4wICAgLT4gIDAKK2Rpdng3NzQgZGl2aWRlIC0wLjAgICAxLjAgICAtPiAtMAorZGl2eDc3NSBkaXZpZGUgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4Nzc2IGRpdmlkZSAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng3NzcgZGl2aWRlICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDc3OCBkaXZpZGUgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIFNwZWNpYWxzCitkaXZ4NzgwIGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDc4MSBkaXZpZGUgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGl2eDc4MiBkaXZpZGUgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGl2eDc4MyBkaXZpZGUgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGl2eDc4NCBkaXZpZGUgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGl2eDc4NSBkaXZpZGUgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGl2eDc4NiBkaXZpZGUgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZGl2eDc4NyBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rpdng3ODggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2Rpdng3ODkgZGl2aWRlIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4NzkwIGRpdmlkZSAtMSAgICAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkaXZ4NzkxIGRpdmlkZSAtMCAgICAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkaXZ4NzkyIGRpdmlkZSAgMCAgICAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkaXZ4NzkzIGRpdmlkZSAgMSAgICAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkaXZ4Nzk0IGRpdmlkZSAgMTAwMCAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkaXZ4Nzk1IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkaXZ4ODAwIGRpdmlkZSAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDgwMSBkaXZpZGUgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGl2eDgwMiBkaXZpZGUgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGl2eDgwMyBkaXZpZGUgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZGl2eDgwNCBkaXZpZGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGl2eDgwNSBkaXZpZGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGl2eDgwNiBkaXZpZGUgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGl2eDgwNyBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4MDggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2Rpdng4MDkgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODEwIGRpdmlkZSAtMSAgICAtSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkaXZ4ODExIGRpdmlkZSAtMCAgICAtSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkaXZ4ODEyIGRpdmlkZSAgMCAgICAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkaXZ4ODEzIGRpdmlkZSAgMSAgICAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkaXZ4ODE0IGRpdmlkZSAgMTAwMCAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkaXZ4ODE1IGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkaXZ4ODIxIGRpdmlkZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGl2eDgyMiBkaXZpZGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rpdng4MjMgZGl2aWRlICBOYU4gLTEgICAgICAtPiAgTmFOCitkaXZ4ODI0IGRpdmlkZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZGl2eDgyNSBkaXZpZGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2Rpdng4MjYgZGl2aWRlICBOYU4gIDEgICAgICAtPiAgTmFOCitkaXZ4ODI3IGRpdmlkZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZGl2eDgyOCBkaXZpZGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rpdng4MjkgZGl2aWRlICBOYU4gIE5hTiAgICAtPiAgTmFOCitkaXZ4ODMwIGRpdmlkZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZGl2eDgzMSBkaXZpZGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rpdng4MzIgZGl2aWRlIC0xICAgIE5hTiAgICAtPiAgTmFOCitkaXZ4ODMzIGRpdmlkZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZGl2eDgzNCBkaXZpZGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rpdng4MzUgZGl2aWRlICAxICAgIE5hTiAgICAtPiAgTmFOCitkaXZ4ODM2IGRpdmlkZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGl2eDgzNyBkaXZpZGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGl2eDg0MSBkaXZpZGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODQyIGRpdmlkZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NDMgZGl2aWRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg0NCBkaXZpZGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODQ1IGRpdmlkZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NDYgZGl2aWRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg0NyBkaXZpZGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODQ4IGRpdmlkZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NDkgZGl2aWRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg1MCBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODUxIGRpdmlkZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NTIgZGl2aWRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg1MyBkaXZpZGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODU0IGRpdmlkZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NTUgZGl2aWRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg1NiBkaXZpZGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODU3IGRpdmlkZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NTggZGl2aWRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg1OSBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rpdng4NjEgZGl2aWRlICBOYU45IC1JbmYgICAtPiAgTmFOOQorZGl2eDg2MiBkaXZpZGUgIE5hTjggIDEwMDAgIC0+ICBOYU44CitkaXZ4ODYzIGRpdmlkZSAgTmFONyAgSW5mICAgLT4gIE5hTjcKK2Rpdng4NjQgZGl2aWRlICBOYU42ICBOYU41ICAtPiAgTmFONgorZGl2eDg2NSBkaXZpZGUgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkaXZ4ODY2IGRpdmlkZSAtMTAwMCAgTmFOMyAgLT4gIE5hTjMKK2Rpdng4NjcgZGl2aWRlICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitkaXZ4ODcxIGRpdmlkZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODcyIGRpdmlkZSAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODczIGRpdmlkZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODc0IGRpdmlkZSAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODc1IGRpdmlkZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODc2IGRpdmlkZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODc3IGRpdmlkZSAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODc4IGRpdmlkZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODc5IGRpdmlkZSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2Rpdng4ODEgZGl2aWRlICAtTmFOOSAgLUluZiAgIC0+ICAtTmFOOQorZGl2eDg4MiBkaXZpZGUgIC1OYU44ICAgMTAwMCAgLT4gIC1OYU44CitkaXZ4ODgzIGRpdmlkZSAgLU5hTjcgICBJbmYgICAtPiAgLU5hTjcKK2Rpdng4ODQgZGl2aWRlICAtTmFONiAgLU5hTjUgIC0+ICAtTmFONgorZGl2eDg4NSBkaXZpZGUgIC1JbmYgICAtTmFONCAgLT4gIC1OYU40CitkaXZ4ODg2IGRpdmlkZSAgLTEwMDAgIC1OYU4zICAtPiAgLU5hTjMKK2Rpdng4ODcgZGl2aWRlICAgSW5mICAgLU5hTjIgIC0+ICAtTmFOMgorCitkaXZ4ODkxIGRpdmlkZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODkyIGRpdmlkZSAtc05hTjk4IC0xICAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODkzIGRpdmlkZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODk0IGRpdmlkZSAtc05hTjk2IC1zTmFOOTQgLT4gLU5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODk1IGRpdmlkZSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODk2IGRpdmlkZSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODk3IGRpdmlkZSAgMCAgICAgIC1zTmFOOTEgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODk4IGRpdmlkZSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODk5IGRpdmlkZSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlIGJ5IDAKK2Rpdng5MDEgZGl2aWRlICAgIDAgICAgICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkaXZ4OTAyIGRpdmlkZSAgICAwLjBFNSAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGl2eDkwMyBkaXZpZGUgICAgMC4wMDAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rpdng5MDQgZGl2aWRlICAgIDAuMDAwMSAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTA1IGRpdmlkZSAgICAwLjAxICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkwNiBkaXZpZGUgICAgMC4xICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MDcgZGl2aWRlICAgIDEgICAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTA4IGRpdmlkZSAgICAxICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkwOSBkaXZpZGUgICAxMCAgICAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MTAgZGl2aWRlICAgMUUrMTAwICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTExIGRpdmlkZSAgIDFFKzEwMDAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkaXZ4OTIxIGRpdmlkZSAgIC0wLjAwMDEgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkyMiBkaXZpZGUgICAtMC4wMSAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MjMgZGl2aWRlICAgLTAuMSAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTI0IGRpdmlkZSAgIC0xICAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkyNSBkaXZpZGUgICAtMSAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MjYgZGl2aWRlICAtMTAgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTI3IGRpdmlkZSAgLTFFKzEwMCAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkyOCBkaXZpZGUgIC0xRSsxMDAwICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGl2eDkzMSBkaXZpZGUgICAgMC4wMDAxIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MzIgZGl2aWRlICAgIDAuMDEgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTMzIGRpdmlkZSAgICAwLjEgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkzNCBkaXZpZGUgICAgMSAgICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MzUgZGl2aWRlICAgIDEgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTM2IGRpdmlkZSAgIDEwICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkzNyBkaXZpZGUgICAxRSsxMDAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MzggZGl2aWRlICAgMUUrMTAwMCAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2Rpdng5NDEgZGl2aWRlICAgLTAuMDAwMSAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTQyIGRpdmlkZSAgIC0wLjAxICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDk0MyBkaXZpZGUgICAtMC4xICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5NDQgZGl2aWRlICAgLTEgICAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTQ1IGRpdmlkZSAgIC0xICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDk0NiBkaXZpZGUgIC0xMCAgICAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5NDcgZGl2aWRlICAtMUUrMTAwICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTQ4IGRpdmlkZSAgLTFFKzEwMDAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzCitwcmVjaXNpb246IDkKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitkaXZ4OTUxIGRpdmlkZSA5RSs5OTk5OTk5OTkgKzAuMjM0NTY3ODkwMTIzNDVFLTAgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkaXZ4OTUyIGRpdmlkZSArMC4xMDAgOUUrOTk5OTk5OTk5IC0+IDEuMTExMTExRS0xMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitkaXZ4OTUzIGRpdmlkZSA5RS05OTk5OTk5OTkgKzkuMTAwIC0+IDkuODkwMTA5OUUtMTAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZGl2eDk1NCBkaXZpZGUgLTEuMjM0NTY3ODkgICAgICAgICAgOUUrOTk5OTk5OTk5IC0+IC0xLjM3MTc0MjFFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCitkaXZ4OTU1IGRpdmlkZSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTEuMzcxNzQyMUUtMTAwMDAwMDAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIFJvdW5kZWQgSW5leGFjdAorZGl2eDk1NiBkaXZpZGUgLTEuMjM0NTY3ODkwMTIzNDVFLTAgN0UrOTk5OTk5OTk5IC0+IC0xLjc2MzY2ODRFLTEwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2Rpdng5NTcgZGl2aWRlIDlFKzk5OTk5OTk5OSAtMC44MzQ1Njc4OTAxMjM0NUUtMCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkaXZ4OTU4IGRpdmlkZSAtMC4xMDAgOUUrOTk5OTk5OTk5IC0+IC0xLjExMTExMUUtMTAwMDAwMDAwMSBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGl2eDk1OSBkaXZpZGUgOUUtOTk5OTk5OTk5IC05LjEwMCAtPiAtOS44OTAxMDk5RS0xMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgKGFkZGl0aW9uYWwgZWRnZSB0ZXN0cyBpbiBtdWx0aXBseS5kZWNUZXN0KQorLS0gJ3N1Ym5vcm1hbCcgcmVzdWx0cyBub3cgcG9zc2libGUgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbgorLS0gYmFzZSBhcml0aGVtdGljKQorZGl2eDk2MCBkaXZpZGUgMWUtNjAwMDAwMDAwIDFlKzQwMDAwMDAwMSAtPiAxRS0xMDAwMDAwMDAxIFN1Ym5vcm1hbAorZGl2eDk2MSBkaXZpZGUgMWUtNjAwMDAwMDAwIDFlKzQwMDAwMDAwMiAtPiAxRS0xMDAwMDAwMDAyIFN1Ym5vcm1hbAorZGl2eDk2MiBkaXZpZGUgMWUtNjAwMDAwMDAwIDFlKzQwMDAwMDAwMyAtPiAxRS0xMDAwMDAwMDAzIFN1Ym5vcm1hbAorZGl2eDk2MyBkaXZpZGUgMWUtNjAwMDAwMDAwIDFlKzQwMDAwMDAwNCAtPiAxRS0xMDAwMDAwMDA0IFN1Ym5vcm1hbAorZGl2eDk2NCBkaXZpZGUgMWUtNjAwMDAwMDAwIDFlKzQwMDAwMDAwNSAtPiAxRS0xMDAwMDAwMDA1IFN1Ym5vcm1hbAorZGl2eDk2NSBkaXZpZGUgMWUtNjAwMDAwMDAwIDFlKzQwMDAwMDAwNiAtPiAxRS0xMDAwMDAwMDA2IFN1Ym5vcm1hbAorZGl2eDk2NiBkaXZpZGUgMWUtNjAwMDAwMDAwIDFlKzQwMDAwMDAwNyAtPiAxRS0xMDAwMDAwMDA3IFN1Ym5vcm1hbAorZGl2eDk2NyBkaXZpZGUgMWUtNjAwMDAwMDAwIDFlKzQwMDAwMDAwOCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rpdng5NjggZGl2aWRlIDFlLTYwMDAwMDAwMCAxZSs0MDAwMDAwMDkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkaXZ4OTY5IGRpdmlkZSAxZS02MDAwMDAwMDAgMWUrNDAwMDAwMDEwIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorZGl2eDk3MCBkaXZpZGUgMWUrNjAwMDAwMDAwIDFlLTQwMDAwMDAwMSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rpdng5NzEgZGl2aWRlIDFlKzYwMDAwMDAwMCAxZS00MDAwMDAwMDIgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkaXZ4OTcyIGRpdmlkZSAxZSs2MDAwMDAwMDAgMWUtNDAwMDAwMDAzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGl2eDk3MyBkaXZpZGUgMWUrNjAwMDAwMDAwIDFlLTQwMDAwMDAwNCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rpdng5NzQgZGl2aWRlIDFlKzYwMDAwMDAwMCAxZS00MDAwMDAwMDUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkaXZ4OTc1IGRpdmlkZSAxZSs2MDAwMDAwMDAgMWUtNDAwMDAwMDA2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGl2eDk3NiBkaXZpZGUgMWUrNjAwMDAwMDAwIDFlLTQwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rpdng5NzcgZGl2aWRlIDFlKzYwMDAwMDAwMCAxZS00MDAwMDAwMDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkaXZ4OTc4IGRpdmlkZSAxZSs2MDAwMDAwMDAgMWUtNDAwMDAwMDA5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGl2eDk3OSBkaXZpZGUgMWUrNjAwMDAwMDAwIDFlLTQwMDAwMDAxMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gU2lnbiBhZnRlciBvdmVyZmxvdyBhbmQgdW5kZXJmbG93CitkaXZ4OTgwIGRpdmlkZSAgMWUtNjAwMDAwMDAwICAxZSs0MDAwMDAwMDkgLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGl2eDk4MSBkaXZpZGUgIDFlLTYwMDAwMDAwMCAtMWUrNDAwMDAwMDA5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rpdng5ODIgZGl2aWRlIC0xZS02MDAwMDAwMDAgIDFlKzQwMDAwMDAwOSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkaXZ4OTgzIGRpdmlkZSAtMWUtNjAwMDAwMDAwIC0xZSs0MDAwMDAwMDkgLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGl2eDk4NCBkaXZpZGUgIDFlKzYwMDAwMDAwMCAgMWUtNDAwMDAwMDA5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rpdng5ODUgZGl2aWRlICAxZSs2MDAwMDAwMDAgLTFlLTQwMDAwMDAwOSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkaXZ4OTg2IGRpdmlkZSAtMWUrNjAwMDAwMDAwICAxZS00MDAwMDAwMDkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGl2eDk4NyBkaXZpZGUgLTFlKzYwMDAwMDAwMCAtMWUtNDAwMDAwMDA5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoCitwcmVjaXNpb246IDMKK2Rpdng5OTAgZGl2aWRlIDEwMDAgIDkuOTk5RS05OTk5OTk5OTkgICAgICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkaXZ4OTkxIGRpdmlkZSAxMDAwIC05Ljk5OUUtOTk5OTk5OTk5ICAgICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGl2eDk5MiBkaXZpZGUgICAgICAgOS45OTlFKzk5OTk5OTk5OSAwLjAxIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2Rpdng5OTMgZGl2aWRlICAgICAgLTkuOTk5RSs5OTk5OTk5OTkgMC4wMSAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitwcmVjaXNpb246ICAgNQorbWF4ZXhwb25lbnQ6IDc5CittaW5leHBvbmVudDogLTc5CitkaXZ4MTAwMSBkaXZpZGUgICAgMS41MjQ0NEUtODAgMSAgICAgIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGl2eDEwMDIgZGl2aWRlICAgIDEuNTI0NDVFLTgwIDEgICAgICAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RpdngxMDAzIGRpdmlkZSAgICAxLjUyNDQ2RS04MCAxICAgICAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIGEgcm91bmRpbmcgcHJvYmxlbSBpbiBvbmUgaW1wbGVtZW50YXRpb24KK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKKy0tIFVuYm91bmRlZCBhbnN3ZXIgdG8gNDAgZGlnaXRzOgorLS0gICAxLjQ2NTgxMTk2NTgxMTk2NTgxMTk2NTgxMTk2NTgxMTk2NTgxMTk2NkUrNzAwMAorZGl2eDEwMTAgZGl2aWRlIDM0M0U2MDAwICAyMzRFLTEwMDAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitwcmVjaXNpb246IDcKK2RpdngxMDIxICBkaXZpZGUgMUUwICAgICAgICAgIDFFMCAtPiAxCitkaXZ4MTAyMiAgZGl2aWRlIDFFMCAgICAgICAgICAyRTAgLT4gMC41CitkaXZ4MTAyMyAgZGl2aWRlIDFFMCAgICAgICAgICAzRTAgLT4gMC4zMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGl2eDEwMjQgIGRpdmlkZSAxMDBFLTIgICAxMDAwRS0zIC0+IDEKK2RpdngxMDI1ICBkaXZpZGUgMjRFLTEgICAgICAgIDJFMCAtPiAxLjIKK2RpdngxMDI2ICBkaXZpZGUgMjQwMEUtMyAgICAgIDJFMCAtPiAxLjIwMAorZGl2eDEwMjcgIGRpdmlkZSA1RTAgICAgICAgICAgMkUwIC0+IDIuNQorZGl2eDEwMjggIGRpdmlkZSA1RTAgICAgICAgIDIwRS0xIC0+IDIuNQorZGl2eDEwMjkgIGRpdmlkZSA1RTAgICAgICAyMDAwRS0zIC0+IDIuNQorZGl2eDEwMzAgIGRpdmlkZSA1RTAgICAgICAgICAyRS0xIC0+IDI1CitkaXZ4MTAzMSAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTIgLT4gMjUKK2RpdngxMDMyICBkaXZpZGUgNDgwRS0yICAgICAgIDNFMCAtPiAxLjYwCitkaXZ4MTAzMyAgZGl2aWRlIDQ3RS0xICAgICAgICAyRTAgLT4gMi4zNQorCistLSBFQ01BU2NyaXB0IGJhZCBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorcHJlY2lzaW9uOiA3CitkaXZ4MTA1MCAgZGl2aWRlIDUgOSAgLT4gMC41NTU1NTU2IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZGl2eDEwNTEgIGRpdmlkZSA1IDExIC0+IDAuNDU0NTQ1NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlCitwcmVjaXNpb246IDUKK2RpdngxMDU1ICBkaXZpZGUgICBzTmFOOTg3NjU0MzIxIDEgLT4gIE5hTjU0MzIxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitkaXZ4OTk5OCBkaXZpZGUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4OTk5OSBkaXZpZGUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGl2aWRlaW50LmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RpdmlkZWludC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYTFhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RpdmlkZWludC5kZWNUZXN0CkBAIC0wLDAgKzEsNDg2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRpdmlkZWludC5kZWNUZXN0IC0tIGRlY2ltYWwgaW50ZWdlciBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworZHZpeDAwMSBkaXZpZGVpbnQgIDEgICAgIDEgICAgLT4gIDEKK2R2aXgwMDIgZGl2aWRlaW50ICAyICAgICAxICAgIC0+ICAyCitkdml4MDAzIGRpdmlkZWludCAgMSAgICAgMiAgICAtPiAgMAorZHZpeDAwNCBkaXZpZGVpbnQgIDIgICAgIDIgICAgLT4gIDEKK2R2aXgwMDUgZGl2aWRlaW50ICAwICAgICAxICAgIC0+ICAwCitkdml4MDA2IGRpdmlkZWludCAgMCAgICAgMiAgICAtPiAgMAorZHZpeDAwNyBkaXZpZGVpbnQgIDEgICAgIDMgICAgLT4gIDAKK2R2aXgwMDggZGl2aWRlaW50ICAyICAgICAzICAgIC0+ICAwCitkdml4MDA5IGRpdmlkZWludCAgMyAgICAgMyAgICAtPiAgMQorCitkdml4MDEwIGRpdmlkZWludCAgMi40ICAgMSAgICAtPiAgMgorZHZpeDAxMSBkaXZpZGVpbnQgIDIuNCAgIC0xICAgLT4gIC0yCitkdml4MDEyIGRpdmlkZWludCAgLTIuNCAgMSAgICAtPiAgLTIKK2R2aXgwMTMgZGl2aWRlaW50ICAtMi40ICAtMSAgIC0+ICAyCitkdml4MDE0IGRpdmlkZWludCAgMi40MCAgMSAgICAtPiAgMgorZHZpeDAxNSBkaXZpZGVpbnQgIDIuNDAwIDEgICAgLT4gIDIKK2R2aXgwMTYgZGl2aWRlaW50ICAyLjQgICAyICAgIC0+ICAxCitkdml4MDE3IGRpdmlkZWludCAgMi40MDAgMiAgICAtPiAgMQorZHZpeDAxOCBkaXZpZGVpbnQgIDIuICAgIDIgICAgLT4gIDEKK2R2aXgwMTkgZGl2aWRlaW50ICAyMCAgICAyMCAgIC0+ICAxCisKK2R2aXgwMjAgZGl2aWRlaW50ICAxODcgICAxODcgIC0+ICAxCitkdml4MDIxIGRpdmlkZWludCAgNSAgICAgMiAgICAtPiAgMgorZHZpeDAyMiBkaXZpZGVpbnQgIDUgICAgIDIuMCAgICAtPiAgMgorZHZpeDAyMyBkaXZpZGVpbnQgIDUgICAgIDIuMDAwICAtPiAgMgorZHZpeDAyNCBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKK2R2aXgwMjUgZGl2aWRlaW50ICA1ICAgICAwLjIwMCAgLT4gIDI1CisKK2R2aXgwMzAgZGl2aWRlaW50ICAxICAgICAyICAgICAgLT4gIDAKK2R2aXgwMzEgZGl2aWRlaW50ICAxICAgICA0ICAgICAgLT4gIDAKK2R2aXgwMzIgZGl2aWRlaW50ICAxICAgICA4ICAgICAgLT4gIDAKK2R2aXgwMzMgZGl2aWRlaW50ICAxICAgICAxNiAgICAgLT4gIDAKK2R2aXgwMzQgZGl2aWRlaW50ICAxICAgICAzMiAgICAgLT4gIDAKK2R2aXgwMzUgZGl2aWRlaW50ICAxICAgICA2NCAgICAgLT4gIDAKK2R2aXgwNDAgZGl2aWRlaW50ICAxICAgIC0yICAgICAgLT4gLTAKK2R2aXgwNDEgZGl2aWRlaW50ICAxICAgIC00ICAgICAgLT4gLTAKK2R2aXgwNDIgZGl2aWRlaW50ICAxICAgIC04ICAgICAgLT4gLTAKK2R2aXgwNDMgZGl2aWRlaW50ICAxICAgIC0xNiAgICAgLT4gLTAKK2R2aXgwNDQgZGl2aWRlaW50ICAxICAgIC0zMiAgICAgLT4gLTAKK2R2aXgwNDUgZGl2aWRlaW50ICAxICAgIC02NCAgICAgLT4gLTAKK2R2aXgwNTAgZGl2aWRlaW50IC0xICAgICAyICAgICAgLT4gLTAKK2R2aXgwNTEgZGl2aWRlaW50IC0xICAgICA0ICAgICAgLT4gLTAKK2R2aXgwNTIgZGl2aWRlaW50IC0xICAgICA4ICAgICAgLT4gLTAKK2R2aXgwNTMgZGl2aWRlaW50IC0xICAgICAxNiAgICAgLT4gLTAKK2R2aXgwNTQgZGl2aWRlaW50IC0xICAgICAzMiAgICAgLT4gLTAKK2R2aXgwNTUgZGl2aWRlaW50IC0xICAgICA2NCAgICAgLT4gLTAKK2R2aXgwNjAgZGl2aWRlaW50IC0xICAgIC0yICAgICAgLT4gIDAKK2R2aXgwNjEgZGl2aWRlaW50IC0xICAgIC00ICAgICAgLT4gIDAKK2R2aXgwNjIgZGl2aWRlaW50IC0xICAgIC04ICAgICAgLT4gIDAKK2R2aXgwNjMgZGl2aWRlaW50IC0xICAgIC0xNiAgICAgLT4gIDAKK2R2aXgwNjQgZGl2aWRlaW50IC0xICAgIC0zMiAgICAgLT4gIDAKK2R2aXgwNjUgZGl2aWRlaW50IC0xICAgIC02NCAgICAgLT4gIDAKKworLS0gc2ltaWxhciB3aXRoIHBvd2VycyBvZiB0ZW4KK2R2aXgxNjAgZGl2aWRlaW50ICAxICAgICAxICAgICAgICAgLT4gIDEKK2R2aXgxNjEgZGl2aWRlaW50ICAxICAgICAxMCAgICAgICAgLT4gIDAKK2R2aXgxNjIgZGl2aWRlaW50ICAxICAgICAxMDAgICAgICAgLT4gIDAKK2R2aXgxNjMgZGl2aWRlaW50ICAxICAgICAxMDAwICAgICAgLT4gIDAKK2R2aXgxNjQgZGl2aWRlaW50ICAxICAgICAxMDAwMCAgICAgLT4gIDAKK2R2aXgxNjUgZGl2aWRlaW50ICAxICAgICAxMDAwMDAgICAgLT4gIDAKK2R2aXgxNjYgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwICAgLT4gIDAKK2R2aXgxNjcgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMCAgLT4gIDAKK2R2aXgxNjggZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMDAgLT4gIDAKK2R2aXgxNzAgZGl2aWRlaW50ICAxICAgIC0xICAgICAgICAgLT4gLTEKK2R2aXgxNzEgZGl2aWRlaW50ICAxICAgIC0xMCAgICAgICAgLT4gLTAKK2R2aXgxNzIgZGl2aWRlaW50ICAxICAgIC0xMDAgICAgICAgLT4gLTAKK2R2aXgxNzMgZGl2aWRlaW50ICAxICAgIC0xMDAwICAgICAgLT4gLTAKK2R2aXgxNzQgZGl2aWRlaW50ICAxICAgIC0xMDAwMCAgICAgLT4gLTAKK2R2aXgxNzUgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAgICAgLT4gLTAKK2R2aXgxNzYgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwICAgLT4gLTAKK2R2aXgxNzcgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMCAgLT4gLTAKK2R2aXgxNzggZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMDAgLT4gLTAKK2R2aXgxODAgZGl2aWRlaW50IC0xICAgICAxICAgICAgICAgLT4gLTEKK2R2aXgxODEgZGl2aWRlaW50IC0xICAgICAxMCAgICAgICAgLT4gLTAKK2R2aXgxODIgZGl2aWRlaW50IC0xICAgICAxMDAgICAgICAgLT4gLTAKK2R2aXgxODMgZGl2aWRlaW50IC0xICAgICAxMDAwICAgICAgLT4gLTAKK2R2aXgxODQgZGl2aWRlaW50IC0xICAgICAxMDAwMCAgICAgLT4gLTAKK2R2aXgxODUgZGl2aWRlaW50IC0xICAgICAxMDAwMDAgICAgLT4gLTAKK2R2aXgxODYgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwICAgLT4gLTAKK2R2aXgxODcgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMCAgLT4gLTAKK2R2aXgxODggZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMDAgLT4gLTAKK2R2aXgxOTAgZGl2aWRlaW50IC0xICAgIC0xICAgICAgICAgLT4gIDEKK2R2aXgxOTEgZGl2aWRlaW50IC0xICAgIC0xMCAgICAgICAgLT4gIDAKK2R2aXgxOTIgZGl2aWRlaW50IC0xICAgIC0xMDAgICAgICAgLT4gIDAKK2R2aXgxOTMgZGl2aWRlaW50IC0xICAgIC0xMDAwICAgICAgLT4gIDAKK2R2aXgxOTQgZGl2aWRlaW50IC0xICAgIC0xMDAwMCAgICAgLT4gIDAKK2R2aXgxOTUgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAgICAgLT4gIDAKK2R2aXgxOTYgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwICAgLT4gIDAKK2R2aXgxOTcgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMCAgLT4gIDAKK2R2aXgxOTggZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMDAgLT4gIDAKKworLS0gc29tZSBsb25nIG9wZXJhbmQgY2FzZXMgaGVyZQorZHZpeDA3MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OQorZHZpeDA3MSBkaXZpZGVpbnQgIDk5OTk5OTk5OS40ICAgMSAgLT4gIDk5OTk5OTk5OQorZHZpeDA3MiBkaXZpZGVpbnQgIDk5OTk5OTk5OS41ICAgMSAgLT4gIDk5OTk5OTk5OQorZHZpeDA3MyBkaXZpZGVpbnQgIDk5OTk5OTk5OS45ICAgMSAgLT4gIDk5OTk5OTk5OQorZHZpeDA3NCBkaXZpZGVpbnQgIDk5OTk5OTk5OS45OTkgMSAgLT4gIDk5OTk5OTk5OQorcHJlY2lzaW9uOiA2Citkdml4MDgwIGRpdmlkZWludCAgOTk5OTk5OTk5ICAgICAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXgwODEgZGl2aWRlaW50ICA5OTk5OTk5OSAgICAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDA4MiBkaXZpZGVpbnQgIDk5OTk5OTkgICAgICAgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4MDgzIGRpdmlkZWludCAgOTk5OTk5ICAgICAgICAxICAtPiAgOTk5OTk5Citkdml4MDg0IGRpdmlkZWludCAgOTk5OTkgICAgICAgICAxICAtPiAgOTk5OTkKK2R2aXgwODUgZGl2aWRlaW50ICA5OTk5ICAgICAgICAgIDEgIC0+ICA5OTk5Citkdml4MDg2IGRpdmlkZWludCAgOTk5ICAgICAgICAgICAxICAtPiAgOTk5Citkdml4MDg3IGRpdmlkZWludCAgOTkgICAgICAgICAgICAxICAtPiAgOTkKK2R2aXgwODggZGl2aWRlaW50ICA5ICAgICAgICAgICAgIDEgIC0+ICA5CisKK3ByZWNpc2lvbjogOQorZHZpeDA5MCBkaXZpZGVpbnQgIDAuICAgICAgICAgICAgMSAgICAtPiAgMAorZHZpeDA5MSBkaXZpZGVpbnQgIC4wICAgICAgICAgICAgMSAgICAtPiAgMAorZHZpeDA5MiBkaXZpZGVpbnQgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMAorZHZpeDA5MyBkaXZpZGVpbnQgIDAuMDBFKzkgICAgICAgMSAgICAtPiAgMAorZHZpeDA5NCBkaXZpZGVpbnQgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMAorCitkdml4MTAwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2R2aXgxMDEgZGl2aWRlaW50ICAxICAyICAgLT4gMAorZHZpeDEwMiBkaXZpZGVpbnQgIDEgIDMgICAtPiAwCitkdml4MTAzIGRpdmlkZWludCAgMSAgNCAgIC0+IDAKK2R2aXgxMDQgZGl2aWRlaW50ICAxICA1ICAgLT4gMAorZHZpeDEwNSBkaXZpZGVpbnQgIDEgIDYgICAtPiAwCitkdml4MTA2IGRpdmlkZWludCAgMSAgNyAgIC0+IDAKK2R2aXgxMDcgZGl2aWRlaW50ICAxICA4ICAgLT4gMAorZHZpeDEwOCBkaXZpZGVpbnQgIDEgIDkgICAtPiAwCitkdml4MTA5IGRpdmlkZWludCAgMSAgMTAgIC0+IDAKK2R2aXgxMTAgZGl2aWRlaW50ICAxICAxICAgLT4gMQorZHZpeDExMSBkaXZpZGVpbnQgIDIgIDEgICAtPiAyCitkdml4MTEyIGRpdmlkZWludCAgMyAgMSAgIC0+IDMKK2R2aXgxMTMgZGl2aWRlaW50ICA0ICAxICAgLT4gNAorZHZpeDExNCBkaXZpZGVpbnQgIDUgIDEgICAtPiA1Citkdml4MTE1IGRpdmlkZWludCAgNiAgMSAgIC0+IDYKK2R2aXgxMTYgZGl2aWRlaW50ICA3ICAxICAgLT4gNworZHZpeDExNyBkaXZpZGVpbnQgIDggIDEgICAtPiA4Citkdml4MTE4IGRpdmlkZWludCAgOSAgMSAgIC0+IDkKK2R2aXgxMTkgZGl2aWRlaW50ICAxMCAxICAgLT4gMTAKKworLS0gZnJvbSBEaWFnQmlnRGVjaW1hbAorZHZpeDEzMSBkaXZpZGVpbnQgIDEwMS4zICAgMSAgICAgLT4gIDEwMQorZHZpeDEzMiBkaXZpZGVpbnQgIDEwMS4wICAgMSAgICAgLT4gIDEwMQorZHZpeDEzMyBkaXZpZGVpbnQgIDEwMS4zICAgMyAgICAgLT4gIDMzCitkdml4MTM0IGRpdmlkZWludCAgMTAxLjAgICAzICAgICAtPiAgMzMKK2R2aXgxMzUgZGl2aWRlaW50ICAyLjQgICAgIDEgICAgIC0+ICAyCitkdml4MTM2IGRpdmlkZWludCAgMi40MDAgICAxICAgICAtPiAgMgorZHZpeDEzNyBkaXZpZGVpbnQgIDE4ICAgICAgMTggICAgLT4gIDEKK2R2aXgxMzggZGl2aWRlaW50ICAxMTIwICAgIDEwMDAgIC0+ICAxCitkdml4MTM5IGRpdmlkZWludCAgMi40ICAgICAyICAgICAtPiAgMQorZHZpeDE0MCBkaXZpZGVpbnQgIDIuNDAwICAgMiAgICAgLT4gIDEKK2R2aXgxNDEgZGl2aWRlaW50ICAwLjUgICAgIDIuMDAwIC0+ICAwCitkdml4MTQyIGRpdmlkZWludCAgOC4wMDUgICA3ICAgICAtPiAgMQorZHZpeDE0MyBkaXZpZGVpbnQgIDUgICAgICAgMiAgICAgLT4gIDIKK2R2aXgxNDQgZGl2aWRlaW50ICAwICAgICAgIDIgICAgIC0+ICAwCitkdml4MTQ1IGRpdmlkZWludCAgMC4wMCAgICAyICAgICAtPiAgMAorCistLSBPdGhlcnMKK2R2aXgxNTAgZGl2aWRlaW50ICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5Citkdml4MTUxIGRpdmlkZWludCAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3MworZHZpeDE1MiBkaXZpZGVpbnQgIDEyMzQ1ICA0LjkgICAgLT4gIDI1MTkKK2R2aXgxNTMgZGl2aWRlaW50ICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5Citkdml4MTU0IGRpdmlkZWludCAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMAorZHZpeDE1NSBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAxICAgLT4gIDI0NjQKK2R2aXgxNTYgZGl2aWRlaW50ICAxMjM0NSAgNS4wMDEgIC0+ICAyNDY4Citkdml4MTU3IGRpdmlkZWludCAgICAxMDEgIDcuNiAgICAtPiAgMTMKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGVpbnQgYnkgMAorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2R2aXgyMDEgZGl2aWRlaW50ICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2R2aXgyMDIgZGl2aWRlaW50ICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2R2aXgyMDMgZGl2aWRlaW50ICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2R2aXgyMDQgZGl2aWRlaW50ICAwLjAwMDEgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMDUgZGl2aWRlaW50ICAwLjAxICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMDYgZGl2aWRlaW50ICAwLjEgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMDcgZGl2aWRlaW50ICAxICAgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMDggZGl2aWRlaW50ICAxICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMDkgZGl2aWRlaW50IDEwICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMTAgZGl2aWRlaW50IDFFKzEwMCAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMTEgZGl2aWRlaW50IDFFKzEwMDAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMTQgZGl2aWRlaW50ICAtMC4wMDAxIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDIxNSBkaXZpZGVpbnQgIC0wLjAxICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjE2IGRpdmlkZWludCAgLTAuMSAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMTcgZGl2aWRlaW50ICAtMSAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDIxOCBkaXZpZGVpbnQgIC0xICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjE5IGRpdmlkZWludCAtMTAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMjAgZGl2aWRlaW50IC0xRSsxMDAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDIyMSBkaXZpZGVpbnQgLTFFKzEwMDAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2R2aXgyNzAgZGl2aWRlaW50IDEgMWU5OTk5OTk5OTkgICAgLT4gMAorZHZpeDI3MSBkaXZpZGVpbnQgMSAwLjllOTk5OTk5OTk5ICAtPiAwCitkdml4MjcyIGRpdmlkZWludCAxIDAuOTllOTk5OTk5OTk5IC0+IDAKK2R2aXgyNzMgZGl2aWRlaW50IDEgMC45OTk5OTk5OTllOTk5OTk5OTk5IC0+IDAKK2R2aXgyNzQgZGl2aWRlaW50IDllOTk5OTk5OTk5ICAgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXgyNzUgZGl2aWRlaW50IDkuOWU5OTk5OTk5OTkgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXgyNzYgZGl2aWRlaW50IDkuOTllOTk5OTk5OTk5IDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXgyNzcgZGl2aWRlaW50IDkuOTk5OTk5OTllOTk5OTk5OTk5IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworZHZpeDI4MCBkaXZpZGVpbnQgMC4xIDllLTk5OTk5OTk5OSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDI4MSBkaXZpZGVpbnQgMC4xIDk5ZS05OTk5OTk5OTkgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDI4MiBkaXZpZGVpbnQgMC4xIDk5OWUtOTk5OTk5OTk5ICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCitkdml4MjgzIGRpdmlkZWludCAwLjEgOWUtOTk5OTk5OTk4ICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4Mjg0IGRpdmlkZWludCAwLjEgOTllLTk5OTk5OTk5OCAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4Mjg1IGRpdmlkZWludCAwLjEgOTk5ZS05OTk5OTk5OTggICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4Mjg2IGRpdmlkZWludCAwLjEgOTk5ZS05OTk5OTk5OTcgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4Mjg3IGRpdmlkZWludCAwLjEgOTk5OWUtOTk5OTk5OTk3ICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4Mjg4IGRpdmlkZWludCAwLjEgOTk5OTllLTk5OTk5OTk5NyAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIEdEIGVkZ2UgY2FzZXM6IGxocyBzbWFsbGVyIHRoYW4gcmhzIGJ1dCBtb3JlIGRpZ2l0cworZHZpeDMwMSAgZGl2aWRlaW50ICAwLjkgICAgICAyICAgICAgLT4gIDAKK2R2aXgzMDIgIGRpdmlkZWludCAgMC45ICAgICAgMi4wICAgIC0+ICAwCitkdml4MzAzICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMSAgICAtPiAgMAorZHZpeDMwNCAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAwICAgLT4gIDAKK2R2aXgzMDUgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMSAgIC0+ICAwCitkdml4MzA2ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEgICAgICAtPiAgMAorZHZpeDMwNyAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDAKK2R2aXgzMDggIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCitkdml4MzA5ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAorZHZpeDMxMCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDAKK2R2aXgzMTEgIGRpdmlkZWludCAgMC4xMiAgICAgMiAgICAgIC0+ICAwCitkdml4MzEyICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMCAgICAtPiAgMAorZHZpeDMxMyAgZGl2aWRlaW50ICAwLjEyICAgICAyLjEgICAgLT4gIDAKK2R2aXgzMTQgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMCAgIC0+ICAwCitkdml4MzE1ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDEgICAtPiAgMAorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Citkdml4MzMwIGRpdmlkZWludCArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgICAgLT4gMAorZHZpeDMzMSBkaXZpZGVpbnQgOUUrOTk5OTk5OTk5ICswLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4MzMyIGRpdmlkZWludCArMC4xMDAgOUUrOTk5OTk5OTk5ICAgIC0+IDAKK2R2aXgzMzMgZGl2aWRlaW50IDlFLTk5OTk5OTk5OSArOS4xMDAgICAgLT4gMAorZHZpeDMzNSBkaXZpZGVpbnQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5ICAgIC0+IC0wCitkdml4MzM2IGRpdmlkZWludCA5RSs5OTk5OTk5OTkgLTAuODM0NTY3ODkwMTIzNDVFLTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXgzMzcgZGl2aWRlaW50IC0wLjEwMCA5RSs5OTk5OTk5OTkgICAgLT4gLTAKK2R2aXgzMzggZGl2aWRlaW50IDlFLTk5OTk5OTk5OSAtOS4xMDAgICAgLT4gLTAKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorZHZpeDQwMSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMTAwIC0+IDEyMzQ1Njc4MAorZHZpeDQwMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAgIC0+IDAKK2R2aXg0MDMgZGl2aWRlaW50IDEyMzQ1Njc4MDAgIDEwICAtPiAxMjM0NTY3ODAKK2R2aXg0MDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgICAtPiAwCitkdml4NDA1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxMCAgLT4gMTIzNDU2Nzg5Citkdml4NDA2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgICAgLT4gMAorZHZpeDQwNyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMTAgIC0+IDEyMzQ1Njc4OQorZHZpeDQwOCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAgIC0+IDAKK2R2aXg0MDkgZGl2aWRlaW50IDEyMzQ1Njc4OTAxIDEwMCAtPiAxMjM0NTY3ODkKK2R2aXg0MTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgICAtPiAwCitkdml4NDExIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxMCAgLT4gMTIzNDU2Nzg5Citkdml4NDEyIGRpdmlkZWludCAxIDEyMzQ1Njc4OTYgICAgLT4gMAorZHZpeDQxMyBkaXZpZGVpbnQgMTIzNDU2Nzg5NDggMTAwIC0+IDEyMzQ1Njc4OQorZHZpeDQxNCBkaXZpZGVpbnQgMTIzNDU2Nzg5NDkgMTAwIC0+IDEyMzQ1Njc4OQorZHZpeDQxNSBkaXZpZGVpbnQgMTIzNDU2Nzg5NTAgMTAwIC0+IDEyMzQ1Njc4OQorZHZpeDQxNiBkaXZpZGVpbnQgMTIzNDU2Nzg5NTEgMTAwIC0+IDEyMzQ1Njc4OQorZHZpeDQxNyBkaXZpZGVpbnQgMTIzNDU2Nzg5OTkgMTAwIC0+IDEyMzQ1Njc4OQorCitwcmVjaXNpb246IDE1Citkdml4NDQxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCitkdml4NDQyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwIC0+IDAKK2R2aXg0NDMgZGl2aWRlaW50IDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMAorZHZpeDQ0NCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAtPiAwCitkdml4NDQ1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK2R2aXg0NDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgLT4gMAorZHZpeDQ0NyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCitkdml4NDQ4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgIC0+IDAKK2R2aXg0NDkgZGl2aWRlaW50IDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDEKK2R2aXg0NTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgLT4gMAorZHZpeDQ1MSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2Citkdml4NDUyIGRpdmlkZWludCAxIDEyMzQ1Njc4OTYgIC0+IDAKKworcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorCistLSBtb3JlIHplcm9zLCBldGMuCitkdml4NTMxIGRpdmlkZWludCA1LjAwIDFFLTMgICAgLT4gNTAwMAorZHZpeDUzMiBkaXZpZGVpbnQgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2R2aXg1MzMgZGl2aWRlaW50IDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkdml4NTM0IGRpdmlkZWludCAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHZpeDUzNSBkaXZpZGVpbnQgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2R2aXg1MzYgZGl2aWRlaW50IC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCisKK2R2aXg1NDEgZGl2aWRlaW50ICAwICAgIC0xICAgICAtPiAtMAorZHZpeDU0MiBkaXZpZGVpbnQgLTAgICAgLTEgICAgIC0+ICAwCitkdml4NTQzIGRpdmlkZWludCAgMCAgICAgMSAgICAgLT4gIDAKK2R2aXg1NDQgZGl2aWRlaW50IC0wICAgICAxICAgICAtPiAtMAorZHZpeDU0NSBkaXZpZGVpbnQgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4NTQ2IGRpdmlkZWludCAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXg1NDcgZGl2aWRlaW50ICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDU0OCBkaXZpZGVpbnQgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2R2aXg1NTEgZGl2aWRlaW50ICAwLjAgIC0xICAgICAtPiAtMAorZHZpeDU1MiBkaXZpZGVpbnQgLTAuMCAgLTEgICAgIC0+ICAwCitkdml4NTUzIGRpdmlkZWludCAgMC4wICAgMSAgICAgLT4gIDAKK2R2aXg1NTQgZGl2aWRlaW50IC0wLjAgICAxICAgICAtPiAtMAorZHZpeDU1NSBkaXZpZGVpbnQgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4NTU2IGRpdmlkZWludCAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXg1NTcgZGl2aWRlaW50ICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDU1OCBkaXZpZGVpbnQgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2R2aXg1NjEgZGl2aWRlaW50ICAwICAgIC0xLjAgICAtPiAtMAorZHZpeDU2MiBkaXZpZGVpbnQgLTAgICAgLTEuMCAgIC0+ICAwCitkdml4NTYzIGRpdmlkZWludCAgMCAgICAgMS4wICAgLT4gIDAKK2R2aXg1NjQgZGl2aWRlaW50IC0wICAgICAxLjAgICAtPiAtMAorZHZpeDU2NSBkaXZpZGVpbnQgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4NTY2IGRpdmlkZWludCAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXg1NjcgZGl2aWRlaW50ICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDU2OCBkaXZpZGVpbnQgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2R2aXg1NzEgZGl2aWRlaW50ICAwLjAgIC0xLjAgICAtPiAtMAorZHZpeDU3MiBkaXZpZGVpbnQgLTAuMCAgLTEuMCAgIC0+ICAwCitkdml4NTczIGRpdmlkZWludCAgMC4wICAgMS4wICAgLT4gIDAKK2R2aXg1NzQgZGl2aWRlaW50IC0wLjAgICAxLjAgICAtPiAtMAorZHZpeDU3NSBkaXZpZGVpbnQgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4NTc2IGRpdmlkZWludCAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXg1NzcgZGl2aWRlaW50ICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDU3OCBkaXZpZGVpbnQgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIFNwZWNpYWxzCitkdml4NTgwIGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDU4MSBkaXZpZGVpbnQgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZHZpeDU4MiBkaXZpZGVpbnQgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHZpeDU4MyBkaXZpZGVpbnQgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHZpeDU4NCBkaXZpZGVpbnQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZHZpeDU4NSBkaXZpZGVpbnQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHZpeDU4NiBkaXZpZGVpbnQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHZpeDU4NyBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2R2aXg1ODggZGl2aWRlaW50IC0xMDAwICBJbmYgICAtPiAtMAorZHZpeDU4OSBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2R2aXg1OTAgZGl2aWRlaW50IC0xICAgICBJbmYgICAtPiAtMAorZHZpeDU5MSBkaXZpZGVpbnQgLTAgICAgIEluZiAgIC0+IC0wCitkdml4NTkyIGRpdmlkZWludCAgMCAgICAgSW5mICAgLT4gIDAKK2R2aXg1OTMgZGl2aWRlaW50ICAxICAgICBJbmYgICAtPiAgMAorZHZpeDU5NCBkaXZpZGVpbnQgIDEwMDAgIEluZiAgIC0+ICAwCitkdml4NTk1IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkdml4NjAwIGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDYwMSBkaXZpZGVpbnQgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZHZpeDYwMiBkaXZpZGVpbnQgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHZpeDYwMyBkaXZpZGVpbnQgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHZpeDYwNCBkaXZpZGVpbnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZHZpeDYwNSBkaXZpZGVpbnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHZpeDYwNiBkaXZpZGVpbnQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHZpeDYwNyBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2MDggZGl2aWRlaW50IC0xMDAwICBJbmYgICAtPiAtMAorZHZpeDYwOSBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2MTAgZGl2aWRlaW50IC0xICAgIC1JbmYgICAtPiAgMAorZHZpeDYxMSBkaXZpZGVpbnQgLTAgICAgLUluZiAgIC0+ICAwCitkdml4NjEyIGRpdmlkZWludCAgMCAgICAtSW5mICAgLT4gLTAKK2R2aXg2MTMgZGl2aWRlaW50ICAxICAgIC1JbmYgICAtPiAtMAorZHZpeDYxNCBkaXZpZGVpbnQgIDEwMDAgLUluZiAgIC0+IC0wCitkdml4NjE1IGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkdml4NjIxIGRpdmlkZWludCAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHZpeDYyMiBkaXZpZGVpbnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2R2aXg2MjMgZGl2aWRlaW50ICBOYU4gLTEgICAgICAtPiAgTmFOCitkdml4NjI0IGRpdmlkZWludCAgTmFOIC0wICAgICAgLT4gIE5hTgorZHZpeDYyNSBkaXZpZGVpbnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2R2aXg2MjYgZGl2aWRlaW50ICBOYU4gIDEgICAgICAtPiAgTmFOCitkdml4NjI3IGRpdmlkZWludCAgTmFOICAxMDAwICAgLT4gIE5hTgorZHZpeDYyOCBkaXZpZGVpbnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2R2aXg2MjkgZGl2aWRlaW50ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkdml4NjMwIGRpdmlkZWludCAtSW5mICBOYU4gICAgLT4gIE5hTgorZHZpeDYzMSBkaXZpZGVpbnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2R2aXg2MzIgZGl2aWRlaW50IC0xICAgIE5hTiAgICAtPiAgTmFOCitkdml4NjMzIGRpdmlkZWludCAtMCAgICBOYU4gICAgLT4gIE5hTgorZHZpeDYzNCBkaXZpZGVpbnQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2R2aXg2MzUgZGl2aWRlaW50ICAxICAgIE5hTiAgICAtPiAgTmFOCitkdml4NjM2IGRpdmlkZWludCAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHZpeDYzNyBkaXZpZGVpbnQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHZpeDY0MSBkaXZpZGVpbnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjQyIGRpdmlkZWludCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NDMgZGl2aWRlaW50ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY0NCBkaXZpZGVpbnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjQ1IGRpdmlkZWludCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NDYgZGl2aWRlaW50ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY0NyBkaXZpZGVpbnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjQ4IGRpdmlkZWludCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NDkgZGl2aWRlaW50ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY1MCBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjUxIGRpdmlkZWludCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NTIgZGl2aWRlaW50IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY1MyBkaXZpZGVpbnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjU0IGRpdmlkZWludCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NTUgZGl2aWRlaW50ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY1NiBkaXZpZGVpbnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjU3IGRpdmlkZWludCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NTggZGl2aWRlaW50ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY1OSBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2R2aXg2NjEgZGl2aWRlaW50ICBOYU45IC1JbmYgICAtPiAgTmFOOQorZHZpeDY2MiBkaXZpZGVpbnQgIE5hTjggIDEwMDAgIC0+ICBOYU44Citkdml4NjYzIGRpdmlkZWludCAgTmFONyAgSW5mICAgLT4gIE5hTjcKK2R2aXg2NjQgZGl2aWRlaW50IC1OYU42ICBOYU41ICAtPiAtTmFONgorZHZpeDY2NSBkaXZpZGVpbnQgLUluZiAgIE5hTjQgIC0+ICBOYU40Citkdml4NjY2IGRpdmlkZWludCAtMTAwMCAgTmFOMyAgLT4gIE5hTjMKK2R2aXg2NjcgZGl2aWRlaW50ICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCitkdml4NjcxIGRpdmlkZWludCAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkdml4NjcyIGRpdmlkZWludCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkdml4NjczIGRpdmlkZWludCAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkdml4Njc0IGRpdmlkZWludCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkdml4Njc1IGRpdmlkZWludCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkdml4Njc2IGRpdmlkZWludCAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkdml4Njc3IGRpdmlkZWludCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkdml4Njc4IGRpdmlkZWludCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkdml4Njc5IGRpdmlkZWludCAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHNvbWUgbG9uZyBvcGVyYW5kIGNhc2VzIGFnYWluCitwcmVjaXNpb246IDgKK2R2aXg3MTAgZGl2aWRlaW50ICAxMDAwMDAwMDEgICAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDcxMSBkaXZpZGVpbnQgIDEwMDAwMDAwMC40ICAgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzEyIGRpdmlkZWludCAgMTAwMDAwMDAwLjUgICAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3MTMgZGl2aWRlaW50ICAxMDAwMDAwMDAuOSAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDcxNCBkaXZpZGVpbnQgIDEwMDAwMDAwMC45OTkgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitwcmVjaXNpb246IDYKK2R2aXg3MjAgZGl2aWRlaW50ICAxMDAwMDAwMDAgICAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDcyMSBkaXZpZGVpbnQgIDEwMDAwMDAwICAgICAgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzIyIGRpdmlkZWludCAgMTAwMDAwMCAgICAgICAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3MjMgZGl2aWRlaW50ICAxMDAwMDAgICAgICAgIDEgIC0+ICAxMDAwMDAKK2R2aXg3MjQgZGl2aWRlaW50ICAxMDAwMCAgICAgICAgIDEgIC0+ICAxMDAwMAorZHZpeDcyNSBkaXZpZGVpbnQgIDEwMDAgICAgICAgICAgMSAgLT4gIDEwMDAKK2R2aXg3MjYgZGl2aWRlaW50ICAxMDAgICAgICAgICAgIDEgIC0+ICAxMDAKK2R2aXg3MjcgZGl2aWRlaW50ICAxMCAgICAgICAgICAgIDEgIC0+ICAxMAorZHZpeDcyOCBkaXZpZGVpbnQgIDEgICAgICAgICAgICAgMSAgLT4gIDEKK2R2aXg3MjkgZGl2aWRlaW50ICAxICAgICAgICAgICAgMTAgIC0+ICAwCisKK3ByZWNpc2lvbjogOQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2R2aXg3MzIgZGl2aWRlaW50IDEgMC45OWU5OTk5OTk5OTkgLT4gMAorZHZpeDczMyBkaXZpZGVpbnQgMSAwLjk5OTk5OTk5OWU5OTk5OTk5OTkgLT4gMAorZHZpeDczNCBkaXZpZGVpbnQgOWU5OTk5OTk5OTkgICAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDczNSBkaXZpZGVpbnQgOS45ZTk5OTk5OTk5OSAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDczNiBkaXZpZGVpbnQgOS45OWU5OTk5OTk5OTkgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDczNyBkaXZpZGVpbnQgOS45OTk5OTk5OWU5OTk5OTk5OTkgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCitkdml4NzQwIGRpdmlkZWludCAwLjEgOWUtOTk5OTk5OTk5ICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzQxIGRpdmlkZWludCAwLjEgOTllLTk5OTk5OTk5OSAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzQyIGRpdmlkZWludCAwLjEgOTk5ZS05OTk5OTk5OTkgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKK2R2aXg3NDMgZGl2aWRlaW50IDAuMSA5ZS05OTk5OTk5OTggICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3NDQgZGl2aWRlaW50IDAuMSA5OWUtOTk5OTk5OTk4ICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3NDUgZGl2aWRlaW50IDAuMSA5OTllLTk5OTk5OTk5OCAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3NDYgZGl2aWRlaW50IDAuMSA5OTllLTk5OTk5OTk5NyAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3NDcgZGl2aWRlaW50IDAuMSA5OTk5ZS05OTk5OTk5OTcgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3NDggZGl2aWRlaW50IDAuMSA5OTk5OWUtOTk5OTk5OTk3ICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworCistLSBOdWxsIHRlc3RzCitkdml4OTAwIGRpdmlkZWludCAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkdml4OTAxIGRpdmlkZWludCAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWJzLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWJzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhYTA2MwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBYnMuZGVjVGVzdApAQCAtMCwwICsxLDEyNiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUFicy5kZWNUZXN0IC0tIGRlY1F1YWQgYWJzb2x1dGUgdmFsdWUsIGhlZWRpbmcgc05hTiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxYWJzMDAxIGFicyAnMScgICAgICAtPiAnMScKK2RxYWJzMDAyIGFicyAnLTEnICAgICAtPiAnMScKK2RxYWJzMDAzIGFicyAnMS4wMCcgICAtPiAnMS4wMCcKK2RxYWJzMDA0IGFicyAnLTEuMDAnICAtPiAnMS4wMCcKK2RxYWJzMDA1IGFicyAnMCcgICAgICAtPiAnMCcKK2RxYWJzMDA2IGFicyAnMC4wMCcgICAtPiAnMC4wMCcKK2RxYWJzMDA3IGFicyAnMDAuMCcgICAtPiAnMC4wJworZHFhYnMwMDggYWJzICcwMC4wMCcgIC0+ICcwLjAwJworZHFhYnMwMDkgYWJzICcwMCcgICAgIC0+ICcwJworCitkcWFiczAxMCBhYnMgJy0yJyAgICAgLT4gJzInCitkcWFiczAxMSBhYnMgJzInICAgICAgLT4gJzInCitkcWFiczAxMiBhYnMgJy0yLjAwJyAgLT4gJzIuMDAnCitkcWFiczAxMyBhYnMgJzIuMDAnICAgLT4gJzIuMDAnCitkcWFiczAxNCBhYnMgJy0wJyAgICAgLT4gJzAnCitkcWFiczAxNSBhYnMgJy0wLjAwJyAgLT4gJzAuMDAnCitkcWFiczAxNiBhYnMgJy0wMC4wJyAgLT4gJzAuMCcKK2RxYWJzMDE3IGFicyAnLTAwLjAwJyAtPiAnMC4wMCcKK2RxYWJzMDE4IGFicyAnLTAwJyAgICAtPiAnMCcKKworZHFhYnMwMjAgYWJzICctMjAwMDAwMCcgLT4gJzIwMDAwMDAnCitkcWFiczAyMSBhYnMgJzIwMDAwMDAnICAtPiAnMjAwMDAwMCcKKworZHFhYnMwMzAgYWJzICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCitkcWFiczAzMSBhYnMgJy0wLjEnICAgICAgICAgICAgLT4gJzAuMScKK2RxYWJzMDMyIGFicyAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScKK2RxYWJzMDMzIGFicyAnLTAuMDEnICAgICAgICAgICAtPiAnMC4wMScKK2RxYWJzMDM0IGFicyAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCitkcWFiczAzNSBhYnMgJy0wLjAwMScgICAgICAgICAgLT4gJzAuMDAxJworZHFhYnMwMzYgYWJzICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2RxYWJzMDM3IGFicyAnLTAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCitkcWFiczAzOCBhYnMgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJworZHFhYnMwMzkgYWJzICctMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorZHFhYnMwNDAgYWJzICcyLjEnICAgICAtPiAgJzIuMScKK2RxYWJzMDQxIGFicyAnLTEwMCcgICAgLT4gICcxMDAnCitkcWFiczA0MiBhYnMgJzEwMS41JyAgIC0+ICAnMTAxLjUnCitkcWFiczA0MyBhYnMgJy0xMDEuNScgIC0+ICAnMTAxLjUnCisKKy0tIG1vcmUgZml4ZWQsIHBvdGVudGlhbCBMSFMgc3dhcHMvb3ZlcmxheXMgaWYgZG9uZSBieSBzdWJ0cmFjdCAwCitkcWFiczA2MCBhYnMgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JworZHFhYnMwNjEgYWJzICctNTYyNjdFLTUnICAgLT4gJzAuNTYyNjcnCitkcWFiczA2MiBhYnMgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JworZHFhYnMwNjMgYWJzICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKK2RxYWJzMDY1IGFicyAnLTU2MjY3RS0wJyAgIC0+ICc1NjI2NycKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CisKKy0tIGxvbmcgb3BlcmFuZCB0ZXN0cworZHFhYnMzMjEgYWJzIDEyMzQ1Njc4OTAxMjM0NTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYWJzMzIyIGFicyAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK2RxYWJzMzIzIGFicyAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorZHFhYnMzMjQgYWJzIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitkcWFiczMyNSBhYnMgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK2RxYWJzMzI2IGFicyAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK2RxYWJzMzI3IGFicyAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorCistLSB6ZXJvcworZHFhYnMxMTEgYWJzICAgICAgICAgIDAgICAtPiAwCitkcWFiczExMiBhYnMgICAgICAgICAtMCAgIC0+IDAKK2RxYWJzMTEzIGFicyAgICAgICAwRSs2ICAgLT4gMEUrNgorZHFhYnMxMTQgYWJzICAgICAgLTBFKzYgICAtPiAwRSs2CitkcWFiczExNSBhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZHFhYnMxMTYgYWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RxYWJzMTE3IGFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkcWFiczExOCBhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFhYnMxMjEgYWJzICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFhYnMxMjIgYWJzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFhYnMxMjMgYWJzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFhYnMxMjQgYWJzICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFhYnMxMzEgYWJzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFhYnMxMzIgYWJzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCitkcWFiczEzMyBhYnMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWFiczEzNCBhYnMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsCisKK2RxYWJzMTM1IGFicyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwKK2RxYWJzMTM2IGFicyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxYWJzMTM3IGFicyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFhYnMxMzggYWJzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorCistLSBzcGVjaWFscworZHFhYnM1MjAgYWJzICdJbmYnICAgIC0+ICdJbmZpbml0eScKK2RxYWJzNTIxIGFicyAnLUluZicgICAtPiAnSW5maW5pdHknCitkcWFiczUyMiBhYnMgICBOYU4gICAgLT4gIE5hTgorZHFhYnM1MjMgYWJzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZHFhYnM1MjQgYWJzICAgTmFOMjIgIC0+ICBOYU4yMgorZHFhYnM1MjUgYWJzICBzTmFOMzMgIC0+ICBOYU4zMyBJbnZhbGlkX29wZXJhdGlvbgorZHFhYnM1MjYgYWJzICAtTmFOMjIgIC0+IC1OYU4yMgorZHFhYnM1MjcgYWJzIC1zTmFOMzMgIC0+IC1OYU4zMyBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitkcWFiczkwMCBhYnMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBZGQuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBZGQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWRmNzdhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFkZC5kZWNUZXN0CkBAIC0wLDAgKzEsMTIxNSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUFkZC5kZWNUZXN0IC0tIGRlY1F1YWQgYWRkaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNRdWFkCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2RxYWRkMDAxIGFkZCAxICAgICAgIDEgICAgICAgLT4gIDIKK2RxYWRkMDAyIGFkZCAyICAgICAgIDMgICAgICAgLT4gIDUKK2RxYWRkMDAzIGFkZCAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2RxYWRkMDA0IGFkZCAnNScgICAgICctMycgICAgLT4gIDIKK2RxYWRkMDA1IGFkZCAnLTUnICAgICctMycgICAgLT4gIC04CitkcWFkZDAwNiBhZGQgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CitkcWFkZDAwNyBhZGQgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKK2RxYWRkMDA4IGFkZCAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKK2RxYWRkMDA5IGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2RxYWRkMDEwIGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKKworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RxYWRkMDExIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ2JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDEyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkcWFkZDAxMyBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDAxNCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDknICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMTUgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDE2IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTk5JyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAxNyBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMCcgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMTggYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDE5IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDEnICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAyMCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTEnICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDAyMSBhZGQgMCAxIC0+IDEKK2RxYWRkMDIyIGFkZCAxIDEgLT4gMgorZHFhZGQwMjMgYWRkIDIgMSAtPiAzCitkcWFkZDAyNCBhZGQgMyAxIC0+IDQKK2RxYWRkMDI1IGFkZCA0IDEgLT4gNQorZHFhZGQwMjYgYWRkIDUgMSAtPiA2CitkcWFkZDAyNyBhZGQgNiAxIC0+IDcKK2RxYWRkMDI4IGFkZCA3IDEgLT4gOAorZHFhZGQwMjkgYWRkIDggMSAtPiA5CitkcWFkZDAzMCBhZGQgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworZHFhZGQwMzEgYWRkICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZHFhZGQwMzIgYWRkICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JworZHFhZGQwMzMgYWRkICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworZHFhZGQwMzQgYWRkICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJworCitkcWFkZDAzNSBhZGQgJzcwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAzNiBhZGQgJzcwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMzcgYWRkICc3MDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAzOCBhZGQgJzcwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAzOSBhZGQgJzcwMDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQKKworLS0gc3ltbWV0cnk6CitkcWFkZDA0MCBhZGQgJzEwMDAwZSszNCcgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDA0MSBhZGQgJzEwMDAwZSszNCcgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwNDIgYWRkICcxMDAwMGUrMzQnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDA0NCBhZGQgJzEwMDAwZSszNCcgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDA0NSBhZGQgJzEwMDAwZSszNCcgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQKKworLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZworZHFhZGQwNDYgYWRkICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCitkcWFkZDA0NyBhZGQgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCitkcWFkZDA0OCBhZGQgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJworZHFhZGQwNDkgYWRkICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCitkcWFkZDA1MCBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCitkcWFkZDA1MSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJworZHFhZGQwNTIgYWRkICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RxYWRkMDUzIGFkZCAnMTInICc3LjAwJyAtPiAnMTkuMDAnCitkcWFkZDA1NCBhZGQgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKK2RxYWRkMDU1IGFkZCAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworZHFhZGQwNTYgYWRkICcxLjMnICctMi4wNycgLT4gJy0wLjc3JworZHFhZGQwNTcgYWRkICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCisKKy0tIGxlYWRpbmcgemVybyBwcmVzZXJ2YXRpb24KK2RxYWRkMDYxIGFkZCAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCitkcWFkZDA2MiBhZGQgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCitkcWFkZDA2MyBhZGQgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScKK2RxYWRkMDY0IGFkZCAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCitkcWFkZDA2NSBhZGQgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2RxYWRkMDcwIGFkZCAxICAwICAgIC0+IDEKK2RxYWRkMDcxIGFkZCAxIDAuICAgIC0+IDEKK2RxYWRkMDcyIGFkZCAxICAuMCAgIC0+IDEuMAorZHFhZGQwNzMgYWRkIDEgMC4wICAgLT4gMS4wCitkcWFkZDA3NCBhZGQgMSAwLjAwICAtPiAxLjAwCitkcWFkZDA3NSBhZGQgIDAgIDEgICAtPiAxCitkcWFkZDA3NiBhZGQgMC4gIDEgICAtPiAxCitkcWFkZDA3NyBhZGQgIC4wIDEgICAtPiAxLjAKK2RxYWRkMDc4IGFkZCAwLjAgMSAgIC0+IDEuMAorZHFhZGQwNzkgYWRkIDAuMDAgMSAgLT4gMS4wMAorCistLSBzb21lIGNhcnJpZXMKK2RxYWRkMDgwIGFkZCA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5CitkcWFkZDA4MSBhZGQgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAKK2RxYWRkMDgyIGFkZCAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwCitkcWFkZDA4MyBhZGQgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCitkcWFkZDA4NCBhZGQgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDAKK2RxYWRkMDg1IGFkZCAgICAgOTk5OTkgMSAgLT4gMTAwMDAwCitkcWFkZDA4NiBhZGQgICAgICA5OTk5IDEgIC0+IDEwMDAwCitkcWFkZDA4NyBhZGQgICAgICAgOTk5IDEgIC0+IDEwMDAKK2RxYWRkMDg4IGFkZCAgICAgICAgOTkgMSAgLT4gMTAwCitkcWFkZDA4OSBhZGQgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2RxYWRkMDkwIGFkZCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RxYWRkMDkxIGFkZCAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JworZHFhZGQwOTIgYWRkICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2RxYWRkMDkzIGFkZCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2RxYWRkMDk0IGFkZCAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKK2RxYWRkMDk1IGFkZCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2RxYWRkMDk2IGFkZCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2RxYWRkMDk3IGFkZCAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JworZHFhZGQwOTggYWRkICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitkcWFkZDA5OSBhZGQgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZHFhZGQxMDAgYWRkICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCitkcWFkZDEwMSBhZGQgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZHFhZGQxMDIgYWRkICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZHFhZGQxMDMgYWRkICctNUUtMScgICAgICAgIDAgLT4gICctMC41JworZHFhZGQxMDQgYWRkICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2RxYWRkMTA1IGFkZCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZHFhZGQxMDYgYWRkICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJworZHFhZGQxMDcgYWRkICctNUUzMycgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkMTA4IGFkZCAnLTVFMzQnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgIFJvdW5kZWQKK2RxYWRkMTA5IGFkZCAnLTVFMzUnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgIFJvdW5kZWQKK2RxYWRkMTEwIGFkZCAnLTVFMzYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgIFJvdW5kZWQKK2RxYWRkMTExIGFkZCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMKK2RxYWRkMTEzIGFkZCAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JworZHFhZGQxMTQgYWRkIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2RxYWRkMTE2IGFkZCAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKK2RxYWRkMTE3IGFkZCAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JworZHFhZGQxMTkgYWRkIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCitkcWFkZDEyMCBhZGQgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKK2RxYWRkMTIxIGFkZCAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JworZHFhZGQxMjIgYWRkIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2RxYWRkMTIzIGFkZCAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCitkcWFkZDEyNCBhZGQgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCitkcWFkZDEyNSBhZGQgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworZHFhZGQxMjYgYWRkIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JworZHFhZGQxMjcgYWRkIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCitkcWFkZDEyOCBhZGQgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2RxYWRkMTI5IGFkZCAwICAnLTVFMCcgICAgICAgLT4gICctNScKK2RxYWRkMTMwIGFkZCAwICAnLTVFMScgICAgICAgLT4gICctNTAnCitkcWFkZDEzMSBhZGQgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2RxYWRkMTMyIGFkZCAwICAnLTVFMzMnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkMTMzIGFkZCAwICAnLTVFMzQnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgIFJvdW5kZWQKK2RxYWRkMTM0IGFkZCAwICAnLTVFMzUnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQKK2RxYWRkMTM1IGFkZCAwICAnLTVFMzYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgIFJvdW5kZWQKK2RxYWRkMTM2IGFkZCAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworLS0gcmVsYXRlZAorZHFhZGQxMzcgYWRkICAxICAnMEUtMzknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RxYWRkMTM4IGFkZCAtMSAgJzBFLTM5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkcWFkZDEzOSBhZGQgJzBFLTM5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZHFhZGQxNDAgYWRkICcwRS0zOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RxYWRkMTQxIGFkZCAxRSsyOSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMDAnCitkcWFkZDE0MiBhZGQgMUUrMjkgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZAorZHFhZGQxNDMgYWRkIDAuMDAwICAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcKK2RxYWRkMTQ0IGFkZCAwLjAwMDAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkCisKKy0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCitkcWFkZDE0NiBhZGQgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJworZHFhZGQxNDcgYWRkICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCitkcWFkZDE0OCBhZGQgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RxYWRkMTQ5IGFkZCAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCitkcWFkZDE1MCBhZGQgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RxYWRkMTUxIGFkZCAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJworZHFhZGQxNTIgYWRkICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMTUzIGFkZCAnMy4nICAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDE1NCBhZGQgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJworZHFhZGQxNTUgYWRkICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCitkcWFkZDE1NiBhZGQgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2RxYWRkMTU3IGFkZCAnMycgICAgICcrMycgICAgLT4gICc2JworZHFhZGQxNTggYWRkICczJyAgICAgJy0zJyAgICAtPiAgJzAnCitkcWFkZDE1OSBhZGQgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworZHFhZGQxNjAgYWRkICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitkcWFkZDE2MSBhZGQgJzFFKzEyJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTknCitkcWFkZDE2MiBhZGQgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZHFhZGQxNjMgYWRkICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMTY0IGFkZCAnLTEnICAgICcxRSsxMicgLT4gJzk5OTk5OTk5OTk5OScKK2RxYWRkMTY1IGFkZCAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCitkcWFkZDE2NiBhZGQgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZHFhZGQxNjcgYWRkICcxLjExJyAgJzdFKzEyJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMTY4IGFkZCAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDE3MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTcxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTc0IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzUgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3NiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTc3IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQKK2RxYWRkMTc4IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzkgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE4MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTgxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxODIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE4MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDIwMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCitkcWFkZDIwMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjAzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjA2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjA5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjEyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjE1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCitkcWFkZDIxNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjE5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RxYWRkMjIwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKK2RxYWRkMjIxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyMiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjI0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyNSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjI3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjMwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjMzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjM2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcKK2RxYWRkMjM3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkcWFkZDI0MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNDEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjQyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcWFkZDI1MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCitkcWFkZDI1MSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjUzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1NCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjU2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1NyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjU5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjYyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2MyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjY1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2NiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCitkcWFkZDI2NyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjY5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfdXAKK2RxYWRkMzAxIGFkZCAgLTEgICAxICAgICAgLT4gICAwCitkcWFkZDMwMiBhZGQgICAwICAgMSAgICAgIC0+ICAgMQorZHFhZGQzMDMgYWRkICAgMSAgIDEgICAgICAtPiAgIDIKK2RxYWRkMzA0IGFkZCAgMTIgICAxICAgICAgLT4gIDEzCitkcWFkZDMwNSBhZGQgIDk4ICAgMSAgICAgIC0+ICA5OQorZHFhZGQzMDYgYWRkICA5OSAgIDEgICAgICAtPiAxMDAKK2RxYWRkMzA3IGFkZCAxMDAgICAxICAgICAgLT4gMTAxCitkcWFkZDMwOCBhZGQgMTAxICAgMSAgICAgIC0+IDEwMgorZHFhZGQzMDkgYWRkICAtMSAgLTEgICAgICAtPiAgLTIKK2RxYWRkMzEwIGFkZCAgIDAgIC0xICAgICAgLT4gIC0xCitkcWFkZDMxMSBhZGQgICAxICAtMSAgICAgIC0+ICAgMAorZHFhZGQzMTIgYWRkICAxMiAgLTEgICAgICAtPiAgMTEKK2RxYWRkMzEzIGFkZCAgOTggIC0xICAgICAgLT4gIDk3CitkcWFkZDMxNCBhZGQgIDk5ICAtMSAgICAgIC0+ICA5OAorZHFhZGQzMTUgYWRkIDEwMCAgLTEgICAgICAtPiAgOTkKK2RxYWRkMzE2IGFkZCAxMDEgIC0xICAgICAgLT4gMTAwCisKK2RxYWRkMzIxIGFkZCAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMAorZHFhZGQzMjIgYWRkICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCitkcWFkZDMyMyBhZGQgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKK2RxYWRkMzI0IGFkZCAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMworZHFhZGQzMjUgYWRkICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5CitkcWFkZDMyNiBhZGQgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKK2RxYWRkMzI3IGFkZCAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQorZHFhZGQzMjggYWRkICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCitkcWFkZDMyOSBhZGQgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKK2RxYWRkMzMwIGFkZCAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQorZHFhZGQzMzEgYWRkICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCitkcWFkZDMzMiBhZGQgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKK2RxYWRkMzMzIGFkZCAgMC45OCAtMC4wMSAgICAtPiAgMC45NworZHFhZGQzMzQgYWRkICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4CitkcWFkZDMzNSBhZGQgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKK2RxYWRkMzM2IGFkZCAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMAorCistLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgYWRkaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKK2RxYWRkMzQwIGFkZCAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCitkcWFkZDM0MSBhZGQgMUUrMzMgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYWRkMzQyIGFkZCAxRSszNCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIFJvdW5kZWQKK2RxYWRkMzQzIGFkZCAxRSszNSAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2RxYWRkMzQ0IGFkZCAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitkcWFkZDM0NSBhZGQgMUUrMzMgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxYWRkMzQ2IGFkZCAxRSszNCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDcgYWRkIDFFKzM1ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0OCBhZGQgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNworZHFhZGQzNDkgYWRkIDFFKzMzICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcWFkZDM1MCBhZGQgMUUrMzQgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzUxIGFkZCAxRSszNSAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RxYWRkMzYwICBhZGQgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorZHFhZGQzNjEgIGFkZCAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAorZHFhZGQzNjIgIGFkZCAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAorZHFhZGQzNjMgIGFkZCAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNjQgIGFkZCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMEUrNjExMQorLS0gICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCityb3VuZGluZzogICAgaGFsZl9kb3duCitkcWFkZDM3MCBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAorZHFhZGQzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkcWFkZDM3MiBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAorZHFhZGQzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK2RxYWRkMzc0IGFkZCAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0CitkcWFkZDM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK2RxYWRkNDAwIGFkZCAgIDEgICA3N2UtMzIgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQ0MDEgYWRkICAgMSAgIDc3ZS0zMyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQ0MDIgYWRkICAgMSAgIDc3ZS0zNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDAzIGFkZCAgIDEgICA3N2UtMzUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQwNCBhZGQgICAxICAgNzdlLTM2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MDUgYWRkICAgMSAgIDc3ZS0zNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDA2IGFkZCAgIDEgICA3N2UtMjk5ICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNDEwIGFkZCAgMTAgICA3N2UtMzIgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkNDExIGFkZCAgMTAgICA3N2UtMzMgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDQxMiBhZGQgIDEwICAgNzdlLTM0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MTMgYWRkICAxMCAgIDc3ZS0zNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDE0IGFkZCAgMTAgICA3N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQxNSBhZGQgIDEwICAgNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MTYgYWRkICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ0MjAgYWRkICA3N2UtMzIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDQyMSBhZGQgIDc3ZS0zMyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDQyMiBhZGQgIDc3ZS0zNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MjMgYWRkICA3N2UtMzUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDI0IGFkZCAgNzdlLTM2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQyNSBhZGQgIDc3ZS0zNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MjYgYWRkICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ0MzAgYWRkICA3N2UtMzIgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQ0MzEgYWRkICA3N2UtMzMgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDMyIGFkZCAgNzdlLTM0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQzMyBhZGQgIDc3ZS0zNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MzQgYWRkICA3N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDM1IGFkZCAgNzdlLTM3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQzNiBhZGQgIDc3ZS0yOTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBmYXN0cGF0aCBib3VuZGFyaWVzCistLSAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2RxYWRkNTAxIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTAyIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTAzIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczNTU1NTU1NTU1NTU1NTU1NTU1MDU1NTU1NTU1NTU1NTU1JyAtPiAnNzk5OTk5OTk5OTk5OTk5OTk5OTQ5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTA0IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczOTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODM5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTA1IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0OTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTM5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTA2IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1OTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAxLjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDUxMSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUxMiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUxMyBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUxNCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUxNSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUxNiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUxNyBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUxOCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUxOSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUyMCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUyMSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUyMiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUyMyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzMzMzMzMzMzMzMzMzMzMzMzMzMzMycgLT4gJzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcnCitkcWFkZDUyNCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUyNSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUyNiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUyNyBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUyOCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUyOSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUzMCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTknCitkcWFkZDUzMSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTknCitkcWFkZDUzMiBhZGQgJzM0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTknCitkcWFkZDUzMyBhZGQgJzM0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTknCitkcWFkZDUzNCBhZGQgJzM0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTknCitkcWFkZDUzNSBhZGQgJzM0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTknCitkcWFkZDUzNiBhZGQgJzM0NDQ0NDQ0NCcgICc1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTknCitkcWFkZDUzNyBhZGQgJzM0NDQ0NDQ0JyAgJzU1NTU1NTU1JyAtPiAnODk5OTk5OTknCitkcWFkZDUzOCBhZGQgJzM0NDQ0NDQnICAnNTU1NTU1NScgLT4gJzg5OTk5OTknCitkcWFkZDUzOSBhZGQgJzM0NDQ0NCcgICc1NTU1NTUnIC0+ICc4OTk5OTknCitkcWFkZDU0MCBhZGQgJzM0NDQ0JyAgJzU1NTU1JyAtPiAnODk5OTknCitkcWFkZDU0MSBhZGQgJzM0NDQnICAnNTU1NScgLT4gJzg5OTknCitkcWFkZDU0MiBhZGQgJzM0NCcgICc1NTUnIC0+ICc4OTknCitkcWFkZDU0MyBhZGQgJzM0JyAgJzU1JyAtPiAnODknCitkcWFkZDU0NCBhZGQgJzMnICAnNScgLT4gJzgnCisKK2RxYWRkNTQ1IGFkZCAnMzAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICczMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnNjAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkNTQ2IGFkZCAnMzAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnNzAwMDAwMDQwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkNTQ3IGFkZCAnMzAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc1MDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkNTQ4IGFkZCAnNDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICczMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnNzAwMDAwMDAwNDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkNTQ5IGFkZCAnNDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnODAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkNTUwIGFkZCAnNDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc1MDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnOTAwMDAwMDAwNDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkNTUxIGFkZCAnNTAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICczMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkNTUyIGFkZCAnNTAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnOTAwMDAwMDQwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkNTUzIGFkZCAnNTAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMCcgICc1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAxLjAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgUm91bmRlZAorLS0gY2hlY2sgcHJvcGFnYXRpb24KK2RxYWRkNTU0IGFkZCAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFhZGQ1NTUgYWRkICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAgJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWFkZDU1NiBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NicgLT4gIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYWRkNTU3IGFkZCAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NicgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLSBuZWdhdGl2ZSB1bHBzCitkcWFkZDY0NDAgYWRkICAgMSAgIC03N2UtMzIgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDQxIGFkZCAgIDEgICAtNzdlLTMzICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NDIgYWRkICAgMSAgIC03N2UtMzQgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NDMgYWRkICAgMSAgIC03N2UtMzUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDQ0IGFkZCAgIDEgICAtNzdlLTM2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ0NSBhZGQgICAxICAgLTc3ZS0zNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ0NiBhZGQgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ2NDUwIGFkZCAgMTAgICAtNzdlLTMyICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NTEgYWRkICAxMCAgIC03N2UtMzMgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NTIgYWRkICAxMCAgIC03N2UtMzQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDUzIGFkZCAgMTAgICAtNzdlLTM1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ1NCBhZGQgIDEwICAgLTc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ1NSBhZGQgIDEwICAgLTc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ1NiBhZGQgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ2NDYwIGFkZCAgLTc3ZS0zMiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ2MSBhZGQgIC03N2UtMzMgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDYyIGFkZCAgLTc3ZS0zNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDYzIGFkZCAgLTc3ZS0zNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ2NCBhZGQgIC03N2UtMzYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NjUgYWRkICAtNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NjYgYWRkICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjQ3MCBhZGQgIC03N2UtMzIgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDcxIGFkZCAgLTc3ZS0zMyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDcyIGFkZCAgLTc3ZS0zNCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ3MyBhZGQgIC03N2UtMzUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NzQgYWRkICAtNzdlLTM2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NzUgYWRkICAtNzdlLTM3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NzYgYWRkICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RxYWRkNjQ4MCBhZGQgIC0xICAgIDc3ZS0zMiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDgxIGFkZCAgLTEgICAgNzdlLTMzICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDgyIGFkZCAgLTEgICAgNzdlLTM0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ4MyBhZGQgIC0xICAgIDc3ZS0zNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDg0IGFkZCAgLTEgICAgNzdlLTM2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0ODUgYWRkICAtMSAgICA3N2UtMzcgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDg2IGFkZCAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ2NDkwIGFkZCAtMTAgICAgNzdlLTMyICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDkxIGFkZCAtMTAgICAgNzdlLTMzICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ5MiBhZGQgLTEwICAgIDc3ZS0zNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDkzIGFkZCAtMTAgICAgNzdlLTM1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0OTQgYWRkIC0xMCAgICA3N2UtMzYgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDk1IGFkZCAtMTAgICAgNzdlLTM3ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ5NiBhZGQgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjUwMCBhZGQgICA3N2UtMzIgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NTAxIGFkZCAgIDc3ZS0zMyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NTAyIGFkZCAgIDc3ZS0zNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjUwMyBhZGQgICA3N2UtMzUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTA0IGFkZCAgIDc3ZS0zNiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1MDUgYWRkICAgNzdlLTM3ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTA2IGFkZCAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ2NTEwIGFkZCAgIDc3ZS0zMiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NTExIGFkZCAgIDc3ZS0zMyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjUxMiBhZGQgICA3N2UtMzQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTEzIGFkZCAgIDc3ZS0zNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1MTQgYWRkICAgNzdlLTM2ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTE1IGFkZCAgIDc3ZS0zNyAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUxNiBhZGQgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZHFhZGQ2NTQwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKK2RxYWRkNjU0MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQ1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQ4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTUxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTU0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCitkcWFkZDY1NTcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTU5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RxYWRkNjU2MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDY1NjEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTYzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTY2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTY5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTcyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTc1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJworZHFhZGQ2NTc3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZHFhZGQ3NTQwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NDEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU0MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZHFhZGQ3NTUwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKK2RxYWRkNzU1MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTUyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTU1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTU4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTYxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTY0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCitkcWFkZDc1NjcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTY5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZHFhZGQ3NzAxIGFkZCA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAorZHFhZGQ3NzAyIGFkZCAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2RxYWRkNzcwMyBhZGQgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCitkcWFkZDc3MDQgYWRkIDBFLTMgIDAwLjAwICAtPiAwLjAwMAorCitkcWFkZDc3MTAgYWRkIDBFKzMgIDAwLjAwICAtPiAwLjAwCitkcWFkZDc3MTEgYWRkIDBFKzMgIDAwLjAgICAtPiAwLjAKK2RxYWRkNzcxMiBhZGQgMEUrMyAgMDAuICAgIC0+IDAKK2RxYWRkNzcxMyBhZGQgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2RxYWRkNzcxNCBhZGQgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2RxYWRkNzcxNSBhZGQgMEUrMyAgMDAuRSszIC0+IDBFKzMKK2RxYWRkNzcxNiBhZGQgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2RxYWRkNzcxNyBhZGQgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2RxYWRkNzcxOCBhZGQgMEUrMyAgLTAwLjAgICAtPiAwLjAKK2RxYWRkNzcxOSBhZGQgMEUrMyAgLTAwLiAgICAtPiAwCitkcWFkZDc3MzEgYWRkIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCitkcWFkZDc3MjAgYWRkIDAwLjAwICAwRSszICAtPiAwLjAwCitkcWFkZDc3MjEgYWRkIDAwLjAgICAwRSszICAtPiAwLjAKK2RxYWRkNzcyMiBhZGQgMDAuICAgIDBFKzMgIC0+IDAKK2RxYWRkNzcyMyBhZGQgMDAuRSsxIDBFKzMgIC0+IDBFKzEKK2RxYWRkNzcyNCBhZGQgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2RxYWRkNzcyNSBhZGQgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2RxYWRkNzcyNiBhZGQgMDAuRSs0IDBFKzMgIC0+IDBFKzMKK2RxYWRkNzcyNyBhZGQgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2RxYWRkNzcyOCBhZGQgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2RxYWRkNzcyOSBhZGQgLTAwLjAgIDBFKzMgIC0+IDAuMAorZHFhZGQ3NzMwIGFkZCAtMDAuICAgMEUrMyAgLT4gMAorCitkcWFkZDc3MzIgYWRkICAwICAgICAwICAgICAtPiAgMAorZHFhZGQ3NzMzIGFkZCAgMCAgICAtMCAgICAgLT4gIDAKK2RxYWRkNzczNCBhZGQgLTAgICAgIDAgICAgIC0+ICAwCitkcWFkZDc3MzUgYWRkIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA3NTQgc3BlY2lhbCBjYXNlCisKK2RxYWRkNzczNiBhZGQgIDEgICAgLTEgICAgIC0+ICAwCitkcWFkZDc3MzcgYWRkIC0xICAgIC0xICAgICAtPiAtMgorZHFhZGQ3NzM4IGFkZCAgMSAgICAgMSAgICAgLT4gIDIKK2RxYWRkNzczOSBhZGQgLTEgICAgIDEgICAgIC0+ICAwCisKK2RxYWRkNzc0MSBhZGQgIDAgICAgLTEgICAgIC0+IC0xCitkcWFkZDc3NDIgYWRkIC0wICAgIC0xICAgICAtPiAtMQorZHFhZGQ3NzQzIGFkZCAgMCAgICAgMSAgICAgLT4gIDEKK2RxYWRkNzc0NCBhZGQgLTAgICAgIDEgICAgIC0+ICAxCitkcWFkZDc3NDUgYWRkIC0xICAgICAwICAgICAtPiAtMQorZHFhZGQ3NzQ2IGFkZCAtMSAgICAtMCAgICAgLT4gLTEKK2RxYWRkNzc0NyBhZGQgIDEgICAgIDAgICAgIC0+ICAxCitkcWFkZDc3NDggYWRkICAxICAgIC0wICAgICAtPiAgMQorCitkcWFkZDc3NTEgYWRkICAwLjAgIC0xICAgICAtPiAtMS4wCitkcWFkZDc3NTIgYWRkIC0wLjAgIC0xICAgICAtPiAtMS4wCitkcWFkZDc3NTMgYWRkICAwLjAgICAxICAgICAtPiAgMS4wCitkcWFkZDc3NTQgYWRkIC0wLjAgICAxICAgICAtPiAgMS4wCitkcWFkZDc3NTUgYWRkIC0xLjAgICAwICAgICAtPiAtMS4wCitkcWFkZDc3NTYgYWRkIC0xLjAgIC0wICAgICAtPiAtMS4wCitkcWFkZDc3NTcgYWRkICAxLjAgICAwICAgICAtPiAgMS4wCitkcWFkZDc3NTggYWRkICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2RxYWRkNzc2MSBhZGQgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkNzc2MiBhZGQgLTAgICAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkNzc2MyBhZGQgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkNzc2NCBhZGQgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkNzc2NSBhZGQgLTEgICAgIDAuMCAgIC0+IC0xLjAKK2RxYWRkNzc2NiBhZGQgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2RxYWRkNzc2NyBhZGQgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2RxYWRkNzc2OCBhZGQgIDEgICAgLTAuMCAgIC0+ICAxLjAKKworZHFhZGQ3NzcxIGFkZCAgMC4wICAtMS4wICAgLT4gLTEuMAorZHFhZGQ3NzcyIGFkZCAtMC4wICAtMS4wICAgLT4gLTEuMAorZHFhZGQ3NzczIGFkZCAgMC4wICAgMS4wICAgLT4gIDEuMAorZHFhZGQ3Nzc0IGFkZCAtMC4wICAgMS4wICAgLT4gIDEuMAorZHFhZGQ3Nzc1IGFkZCAtMS4wICAgMC4wICAgLT4gLTEuMAorZHFhZGQ3Nzc2IGFkZCAtMS4wICAtMC4wICAgLT4gLTEuMAorZHFhZGQ3Nzc3IGFkZCAgMS4wICAgMC4wICAgLT4gIDEuMAorZHFhZGQ3Nzc4IGFkZCAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworZHFhZGQ3NzgwIGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3ODEgYWRkIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4MiBhZGQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzgzIGFkZCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkcWFkZDc3ODQgYWRkIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4NSBhZGQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFhZGQ3Nzg2IGFkZCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkcWFkZDc3ODcgYWRkIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4OCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3Nzg5IGFkZCAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3OTAgYWRkIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc5MSBhZGQgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzkyIGFkZCAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3OTMgYWRkICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc5NCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RxYWRkNzgwMCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4MDEgYWRkICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwMiBhZGQgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODAzIGFkZCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkcWFkZDc4MDQgYWRkICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwNSBhZGQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODA2IGFkZCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkcWFkZDc4MDcgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwOCBhZGQgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODA5IGFkZCAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzgxMCBhZGQgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODExIGFkZCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDc4MTIgYWRkICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgxMyBhZGQgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODE0IGFkZCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDc4MTUgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFhZGQ3ODIxIGFkZCAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFhZGQ3ODIyIGFkZCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFhZGQ3ODIzIGFkZCAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFhZGQ3ODI0IGFkZCAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFhZGQ3ODI1IGFkZCAgTmFOICAwICAgICAgLT4gIE5hTgorZHFhZGQ3ODI2IGFkZCAgTmFOICAxICAgICAgLT4gIE5hTgorZHFhZGQ3ODI3IGFkZCAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFhZGQ3ODI4IGFkZCAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFhZGQ3ODI5IGFkZCAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFhZGQ3ODMwIGFkZCAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFhZGQ3ODMxIGFkZCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFhZGQ3ODMyIGFkZCAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFhZGQ3ODMzIGFkZCAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFhZGQ3ODM0IGFkZCAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFhZGQ3ODM1IGFkZCAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFhZGQ3ODM2IGFkZCAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFhZGQ3ODM3IGFkZCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcWFkZDc4NDEgYWRkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQyIGFkZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0MyBhZGQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDQgYWRkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQ1IGFkZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0NiBhZGQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDcgYWRkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQ4IGFkZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0OSBhZGQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTAgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODUxIGFkZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1MiBhZGQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTMgYWRkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODU0IGFkZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1NSBhZGQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTYgYWRkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODU3IGFkZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1OCBhZGQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTkgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWFkZDc4NjEgYWRkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZHFhZGQ3ODYyIGFkZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RxYWRkNzg2MyBhZGQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkcWFkZDc4NjQgYWRkICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZHFhZGQ3ODY1IGFkZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RxYWRkNzg2NiBhZGQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkcWFkZDc4NjcgYWRkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZHFhZGQ3ODY4IGFkZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RxYWRkNzg2OSBhZGQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZHFhZGQ3ODcxIGFkZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODcyIGFkZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODczIGFkZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODc0IGFkZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODc1IGFkZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODc2IGFkZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODc3IGFkZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODc4IGFkZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODc5IGFkZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODgwIGFkZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODgxIGFkZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODgyIGFkZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkcWFkZDc4ODMgYWRkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4ODQgYWRkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RxYWRkNzg4NSBhZGQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2RxYWRkNzU3NSBhZGQgIDFFLTYxNDMgLTFFLTYxNzYgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsCitkcWFkZDc1NzYgYWRkIC0xRS02MTQzICsxRS02MTc2IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFhZGQ3OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFhZGQ3OTczIGFkZCAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk3NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5NzUgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5NzYgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5NzcgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOEUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5NzggYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgN0UrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5NzkgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNkUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODAgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODEgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNEUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODIgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgM0UrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODMgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMkUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNzk4NSBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWFkZDc5ODYgYWRkICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk4NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTg4IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTEgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk4OSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC05RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTAgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOEUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTkxIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTdFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5MiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC02RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTMgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTk0IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTRFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5NSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0zRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTYgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMkUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTk3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCityb3VuZGluZzogICAgIGRvd24KK2RxYWRkNzExMDAgYWRkIDFlKzIgLTFlLTYxNDMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTAxIGFkZCAxZSsxIC0xZS02MTQzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMDMgYWRkICAgKzEgLTFlLTYxNDMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMDQgYWRkIDFlLTEgLTFlLTYxNDMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA1IGFkZCAxZS0yIC0xZS02MTQzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMDYgYWRkIDFlLTMgLTFlLTYxNDMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMDcgYWRkIDFlLTQgLTFlLTYxNDMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA4IGFkZCAxZS01IC0xZS02MTQzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMDkgYWRkIDFlLTYgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGNlaWxpbmcKK2RxYWRkNzExMTAgYWRkIC0xZSsyICsxZS02MTQzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTExMSBhZGQgLTFlKzEgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTExMyBhZGQgICAgLTEgKzFlLTYxNDMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTQgYWRkIC0xZS0xICsxZS02MTQzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTExNSBhZGQgLTFlLTIgKzFlLTYxNDMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTExNiBhZGQgLTFlLTMgKzFlLTYxNDMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTcgYWRkIC0xZS00ICsxZS02MTQzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTExOCBhZGQgLTFlLTUgKzFlLTYxNDMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTExOSBhZGQgLTFlLTYgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQorcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4KKworZHFhZGQ3MTMwMCBhZGQgMUUzNCAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTAgYWRkIDFFMzQgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzExIGFkZCAxRTM0ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxMiBhZGQgMUUzNCAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTMgYWRkIDFFMzQgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzE0IGFkZCAxRTM0ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxNSBhZGQgMUUzNCAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTYgYWRkIDFFMzQgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzE3IGFkZCAxRTM0ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxOCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTkgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzIwIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyMSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjIgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzIzIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyNCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjUgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzI2IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyNyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjggYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzI5IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzMCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzEgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzMyIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzMyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzQgYWRkIDFFMzQgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzM1IGFkZCAxRTM0ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzNiBhZGQgMUUzNCAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzcgYWRkIDFFMzQgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzM4IGFkZCAxRTM0ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzOSBhZGQgMUUzNCAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ3MTM0MCBhZGQgMUUzNCAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNDEgYWRkIDFFMzQgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNzEzNDkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzUxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzU0IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzU3IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzYwIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzYzIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzY3IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzcwIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzc2IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzc5IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzgyIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzg1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzg4IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM5MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzkxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM5MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzk0IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM5NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCitkcWFkZDcxNDIwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0MjEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0MjIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDIzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0MjQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0MjUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDI2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0MjcgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNworZHFhZGQ3MTQyOCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04CitkcWFkZDcxNDI5IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkKK2RxYWRkNzE0MzAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RxYWRkNzE0MzEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEKK2RxYWRkNzE0MzIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RxYWRkNzE0MzMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RxYWRkNzE0MzQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQKK2RxYWRkNzE0MzUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RxYWRkNzE0MzYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RxYWRkNzE0MzcgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcKK2RxYWRkNzE0MzggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RxYWRkNzE0MzkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkKK2RxYWRkNzE0NDAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAKK2RxYWRkNzE0NDEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEKK2RxYWRkNzE0NDIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIKK2RxYWRkNzE0NDMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMKK2RxYWRkNzE0NDQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQKK2RxYWRkNzE0NDUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUKK2RxYWRkNzE0NDYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYKK2RxYWRkNzE0NDcgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcKK2RxYWRkNzE0NDggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgKK2RxYWRkNzE0NDkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkKK2RxYWRkNzE0NTAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAKK2RxYWRkNzE0NTEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEKK2RxYWRkNzE0NTIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIKK2RxYWRkNzE0NTMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMKK2RxYWRkNzE0NTQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQKK2RxYWRkNzE0NTUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUKK2RxYWRkNzE0NTYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorZHFhZGQ3MTQ2MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQ2MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQ2MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQ2NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQ2NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03CitkcWFkZDcxNDY4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOAorZHFhZGQ3MTQ2OSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkKK2RxYWRkNzE0NzAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZHFhZGQ3MTQ3MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExCitkcWFkZDcxNDcyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RxYWRkNzE0NzMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMworZHFhZGQ3MTQ3NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0CitkcWFkZDcxNDc1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RxYWRkNzE0NzYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZHFhZGQ3MTQ3NyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3CitkcWFkZDcxNDc4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RxYWRkNzE0NzkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQorZHFhZGQ3MTQ4MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwCitkcWFkZDcxNDgxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEKK2RxYWRkNzE0ODIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMgorZHFhZGQ3MTQ4MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzCitkcWFkZDcxNDg0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQKK2RxYWRkNzE0ODUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQorZHFhZGQ3MTQ4NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2CitkcWFkZDcxNDg3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcKK2RxYWRkNzE0ODggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOAorZHFhZGQ3MTQ4OSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5CitkcWFkZDcxNDkwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAKK2RxYWRkNzE0OTEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQorZHFhZGQ3MTQ5MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyCitkcWFkZDcxNDkzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMKK2RxYWRkNzE0OTQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNAorZHFhZGQ3MTQ5NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1CitkcWFkZDcxNDk2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2RxYWRkNzE1MDAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MDEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MDIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MDMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MDQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MDUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MDYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MDcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MDggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MDkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MTkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MjkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MzAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MzEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MzIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE1MzMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2RxYWRkNzE1MzQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZHFhZGQ3MTUzNSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkcWFkZDcxNTM2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RxYWRkNzE1MzcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMAorcm91bmRpbmc6ICAgIGhhbGZfdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkNzE2MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTYwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQ3MTYxMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkNzE2MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkNzE2MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTYyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQ3MTYzMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkNzE2MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkNzE2NDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjQxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY0MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2NDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQ3MTY1MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkNzE2NTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICB1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQ3MTY2MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2NjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjYyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY2MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDcxNjcxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQ3MTY3MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGRvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkNzE2ODAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjgxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY4MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2ODMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQ3MTY5MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkNzE2OTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNzAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTcwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE3MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNzAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE3MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNzEyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCistLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKK3JvdW5kaW5nOiAgICBmbG9vcgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQ3MTcyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE3MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitkcWFkZDcxNzIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZHFhZGQ3MTcyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDcxNzMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgorZHFhZGQ3MTczMiBhZGQgIDExICAgICAtMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitkcWFkZDcxNzQxIGFkZCAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKK2RxYWRkNzE3NDIgYWRkIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZHFhZGQ3MTc0MyBhZGQgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCitkcWFkZDcxNzQ0IGFkZCAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKK2RxYWRkNzE3NDUgYWRkIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMAorZHFhZGQ3MTc0NiBhZGQgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwCitkcWFkZDcxNzQ3IGFkZCAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzAKK2RxYWRkNzE3NDggYWRkIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMworCistLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RxYWRkNzUwMDEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcKK2RxYWRkNzUwMDIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAwMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDA0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAwNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDA3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAwOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDEwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDEzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDE2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDE5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMjAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAyMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXAKK2RxYWRkNzUwMzAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc5CitkcWFkZDc1MDMxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xCitkcWFkZDc1MDMyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMgorZHFhZGQ3NTAzMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzCitkcWFkZDc1MDM0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0CitkcWFkZDc1MDM1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NQorZHFhZGQ3NTAzNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2CitkcWFkZDc1MDM3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3CitkcWFkZDc1MDM4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OAorZHFhZGQ3NTAzOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQ2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQ5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Cityb3VuZGluZzogaGFsZl9ldmVuCitkcWFkZDc1MDUwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNTEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA1MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDUzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNTQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA1NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDU2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNTcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDYxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDY0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDY3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykKK3JvdW5kaW5nOiB1cAorZHFhZGQ3NTA3MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEKK2RxYWRkNzUwNzEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDczIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDc2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDc5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDgyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDg1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDg4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODkgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCitkcWFkZDk5OTAgYWRkIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ5OTkxIGFkZCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBbmQuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBbmQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjA5YmMxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFuZC5kZWNUZXN0CkBAIC0wLDAgKzEsNDIwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQW5kLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgQU5EIGZvciBkZWNRdWFkcyAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2RxYW5kMDAxIGFuZCAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAorZHFhbmQwMDIgYW5kICAgICAgICAgICAgIDAgICAgMSAtPiAgICAwCitkcWFuZDAwMyBhbmQgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDAKK2RxYW5kMDA0IGFuZCAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQorZHFhbmQwMDUgYW5kICAgICAgICAgIDExMDAgMTAxMCAtPiAxMDAwCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2RxYW5kMDA2IGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkcWFuZDAwNyBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZHFhbmQwMDggYW5kIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RxYW5kMDA5IGFuZCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWFuZDAxMCBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZHFhbmQwMTEgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RxYW5kMDEyIGFuZCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkcWFuZDAxMyBhbmQgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CisKK2RxYW5kNjAxIGFuZCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjAyIGFuZCAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjAzIGFuZCAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjA0IGFuZCAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjA1IGFuZCAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjA2IGFuZCAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjA3IGFuZCAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjA4IGFuZCAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjA5IGFuZCAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjEwIGFuZCAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjExIGFuZCAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjEyIGFuZCAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjEzIGFuZCAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjE0IGFuZCAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjE1IGFuZCAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjE2IGFuZCAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEKK2RxYW5kNjE3IGFuZCAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEKK2RxYW5kNjE4IGFuZCAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEKK2RxYW5kNjE5IGFuZCAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEKK2RxYW5kNjIwIGFuZCAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEKK2RxYW5kNjIxIGFuZCAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEKK2RxYW5kNjIyIGFuZCAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEKK2RxYW5kNjIzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEKK2RxYW5kNjI0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEKK2RxYW5kNjI1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEKK2RxYW5kNjI2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEKK2RxYW5kNjI3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEKK2RxYW5kNjI4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEKK2RxYW5kNjI5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEKK2RxYW5kNjMwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEKK2RxYW5kNjMxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEKK2RxYW5kNjMyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEKK2RxYW5kNjMzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEKK2RxYW5kNjM0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKKworZHFhbmQ2NDEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NDIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NDMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NDQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NDUgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NDYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NDcgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NDggYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NDkgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NTAgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NTEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NTIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NTMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NTQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NTUgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2NTYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMQorZHFhbmQ2NTcgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMQorZHFhbmQ2NTggYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMQorZHFhbmQ2NTkgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMQorZHFhbmQ2NjAgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMQorZHFhbmQ2NjEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMQorZHFhbmQ2NjIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMQorZHFhbmQ2NjMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMQorZHFhbmQ2NjQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMQorZHFhbmQ2NjUgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMQorZHFhbmQ2NjYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMQorZHFhbmQ2NjcgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMQorZHFhbmQ2NjggYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMQorZHFhbmQ2NjkgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMQorZHFhbmQ2NzAgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMQorZHFhbmQ2NzEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMQorZHFhbmQ2NzIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMQorZHFhbmQ2NzMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQorZHFhbmQ2NzQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorZHFhbmQ2NzUgYW5kIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorZHFhbmQ2NzYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorCitkcWFuZDAyMSBhbmQgMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQorZHFhbmQwMjQgYW5kIDExMTExMTExMTExMTExMTEgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTEKK2RxYW5kMDI1IGFuZCAxMTExMTExMTExMTExMTExICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExCitkcWFuZDAyNiBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQorZHFhbmQwMjcgYW5kIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTEKK2RxYW5kMDI4IGFuZCAxMTExMTExMTExMTExMTExICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExCitkcWFuZDAyOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQorZHFhbmQwMzAgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTEKK2RxYW5kMDMxIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExCitkcWFuZDAzMiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQorZHFhbmQwMzMgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTEKK2RxYW5kMDM0IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExCitkcWFuZDAzNSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQorZHFhbmQwMzYgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTEKK2RxYW5kMDM3IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExCitkcWFuZDAzOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQorZHFhbmQwMzkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDAKKworZHFhbmQwNDAgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgMTExMTExMTExMTExMTExMQorZHFhbmQwNDEgYW5kICAxMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMQorZHFhbmQwNDIgYW5kICAxMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMQorZHFhbmQwNDMgYW5kICAgMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAxMTExMTExMTExMTExMQorZHFhbmQwNDQgYW5kICAgIDExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgMTExMTExMTExMTExMQorZHFhbmQwNDUgYW5kICAgICAxMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgIDExMTExMTExMTExMQorZHFhbmQwNDYgYW5kICAgICAgMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAxMTExMTExMTExMQorZHFhbmQwNDcgYW5kICAgICAgIDExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgMTExMTExMTExMQorZHFhbmQwNDggYW5kICAgICAgICAxMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgIDExMTExMTExMQorZHFhbmQwNDkgYW5kICAgICAgICAgMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAxMTExMTExMQorZHFhbmQwNTAgYW5kICAgICAgICAgIDExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgMTExMTExMQorZHFhbmQwNTEgYW5kICAgICAgICAgICAxMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgIDExMTExMQorZHFhbmQwNTIgYW5kICAgICAgICAgICAgMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAxMTExMQorZHFhbmQwNTMgYW5kICAgICAgICAgICAgIDExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgMTExMQorZHFhbmQwNTQgYW5kICAgICAgICAgICAgICAxMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgIDExMQorZHFhbmQwNTUgYW5kICAgICAgICAgICAgICAgMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAxMQorZHFhbmQwNTYgYW5kICAgICAgICAgICAgICAgIDEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgMQorZHFhbmQwNTcgYW5kICAgICAgICAgICAgICAgIDAgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgMAorCitkcWFuZDE1MCBhbmQgMTExMTExMTExMSAgMSAgLT4gIDEKK2RxYW5kMTUxIGFuZCAgMTExMTExMTExICAxICAtPiAgMQorZHFhbmQxNTIgYW5kICAgMTExMTExMTEgIDEgIC0+ICAxCitkcWFuZDE1MyBhbmQgICAgMTExMTExMSAgMSAgLT4gIDEKK2RxYW5kMTU0IGFuZCAgICAgMTExMTExICAxICAtPiAgMQorZHFhbmQxNTUgYW5kICAgICAgMTExMTEgIDEgIC0+ICAxCitkcWFuZDE1NiBhbmQgICAgICAgMTExMSAgMSAgLT4gIDEKK2RxYW5kMTU3IGFuZCAgICAgICAgMTExICAxICAtPiAgMQorZHFhbmQxNTggYW5kICAgICAgICAgMTEgIDEgIC0+ICAxCitkcWFuZDE1OSBhbmQgICAgICAgICAgMSAgMSAgLT4gIDEKKworZHFhbmQxNjAgYW5kIDExMTExMTExMTEgIDAgIC0+ICAwCitkcWFuZDE2MSBhbmQgIDExMTExMTExMSAgMCAgLT4gIDAKK2RxYW5kMTYyIGFuZCAgIDExMTExMTExICAwICAtPiAgMAorZHFhbmQxNjMgYW5kICAgIDExMTExMTEgIDAgIC0+ICAwCitkcWFuZDE2NCBhbmQgICAgIDExMTExMSAgMCAgLT4gIDAKK2RxYW5kMTY1IGFuZCAgICAgIDExMTExICAwICAtPiAgMAorZHFhbmQxNjYgYW5kICAgICAgIDExMTEgIDAgIC0+ICAwCitkcWFuZDE2NyBhbmQgICAgICAgIDExMSAgMCAgLT4gIDAKK2RxYW5kMTY4IGFuZCAgICAgICAgIDExICAwICAtPiAgMAorZHFhbmQxNjkgYW5kICAgICAgICAgIDEgIDAgIC0+ICAwCisKK2RxYW5kMTcwIGFuZCAxICAxMTExMTExMTExICAtPiAgMQorZHFhbmQxNzEgYW5kIDEgICAxMTExMTExMTEgIC0+ICAxCitkcWFuZDE3MiBhbmQgMSAgICAxMTExMTExMSAgLT4gIDEKK2RxYW5kMTczIGFuZCAxICAgICAxMTExMTExICAtPiAgMQorZHFhbmQxNzQgYW5kIDEgICAgICAxMTExMTEgIC0+ICAxCitkcWFuZDE3NSBhbmQgMSAgICAgICAxMTExMSAgLT4gIDEKK2RxYW5kMTc2IGFuZCAxICAgICAgICAxMTExICAtPiAgMQorZHFhbmQxNzcgYW5kIDEgICAgICAgICAxMTEgIC0+ICAxCitkcWFuZDE3OCBhbmQgMSAgICAgICAgICAxMSAgLT4gIDEKK2RxYW5kMTc5IGFuZCAxICAgICAgICAgICAxICAtPiAgMQorCitkcWFuZDE4MCBhbmQgMCAgMTExMTExMTExMSAgLT4gIDAKK2RxYW5kMTgxIGFuZCAwICAgMTExMTExMTExICAtPiAgMAorZHFhbmQxODIgYW5kIDAgICAgMTExMTExMTEgIC0+ICAwCitkcWFuZDE4MyBhbmQgMCAgICAgMTExMTExMSAgLT4gIDAKK2RxYW5kMTg0IGFuZCAwICAgICAgMTExMTExICAtPiAgMAorZHFhbmQxODUgYW5kIDAgICAgICAgMTExMTEgIC0+ICAwCitkcWFuZDE4NiBhbmQgMCAgICAgICAgMTExMSAgLT4gIDAKK2RxYW5kMTg3IGFuZCAwICAgICAgICAgMTExICAtPiAgMAorZHFhbmQxODggYW5kIDAgICAgICAgICAgMTEgIC0+ICAwCitkcWFuZDE4OSBhbmQgMCAgICAgICAgICAgMSAgLT4gIDAKKworZHFhbmQwOTAgYW5kIDAxMTExMTExMSAgMTExMTExMTExICAtPiAgIDExMTExMTExCitkcWFuZDA5MSBhbmQgMTAxMTExMTExICAxMTExMTExMTEgIC0+ICAxMDExMTExMTEKK2RxYW5kMDkyIGFuZCAxMTAxMTExMTEgIDExMTExMTExMSAgLT4gIDExMDExMTExMQorZHFhbmQwOTMgYW5kIDExMTAxMTExMSAgMTExMTExMTExICAtPiAgMTExMDExMTExCitkcWFuZDA5NCBhbmQgMTExMTAxMTExICAxMTExMTExMTEgIC0+ICAxMTExMDExMTEKK2RxYW5kMDk1IGFuZCAxMTExMTAxMTEgIDExMTExMTExMSAgLT4gIDExMTExMDExMQorZHFhbmQwOTYgYW5kIDExMTExMTAxMSAgMTExMTExMTExICAtPiAgMTExMTExMDExCitkcWFuZDA5NyBhbmQgMTExMTExMTAxICAxMTExMTExMTEgIC0+ICAxMTExMTExMDEKK2RxYW5kMDk4IGFuZCAxMTExMTExMTAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAorCitkcWFuZDEwMCBhbmQgMTExMTExMTExICAwMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2RxYW5kMTAxIGFuZCAxMTExMTExMTEgIDEwMTExMTExMSAgLT4gIDEwMTExMTExMQorZHFhbmQxMDIgYW5kIDExMTExMTExMSAgMTEwMTExMTExICAtPiAgMTEwMTExMTExCitkcWFuZDEwMyBhbmQgMTExMTExMTExICAxMTEwMTExMTEgIC0+ICAxMTEwMTExMTEKK2RxYW5kMTA0IGFuZCAxMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorZHFhbmQxMDUgYW5kIDExMTExMTExMSAgMTExMTEwMTExICAtPiAgMTExMTEwMTExCitkcWFuZDEwNiBhbmQgMTExMTExMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTEwMTEKK2RxYW5kMTA3IGFuZCAxMTExMTExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTEwMQorZHFhbmQxMDggYW5kIDExMTExMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTEwCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworZHFhbmQyMjAgYW5kIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyMSBhbmQgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjIyIGFuZCA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjMgYW5kIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyNCBhbmQgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjI1IGFuZCAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjYgYW5kIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyNyBhbmQgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjI4IGFuZCA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjkgYW5kIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIzMCBhbmQgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjMxIGFuZCA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMzIgYW5kIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitkcWFuZDI0MCBhbmQgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjQxIGFuZCAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNDIgYW5kIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI0MyBhbmQgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjQ0IGFuZCAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2RxYW5kMjUwIGFuZCAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjUxIGFuZCAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjUyIGFuZCAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjUzIGFuZCAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjU0IGFuZCAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjU1IGFuZCAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjU2IGFuZCAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjU3IGFuZCAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjU4IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjU5IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjYwIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjYxIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjYyIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjYzIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjY0IGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjY1IGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2RxYW5kMjcwIGFuZCAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjcxIGFuZCAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjcyIGFuZCAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjczIGFuZCAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjc0IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDEwMDAwMCAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjc1IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjc2IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMTAwMCAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjc3IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDEwMCAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitkcWFuZDI4MCBhbmQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI4MSBhbmQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI4MiBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDggMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI4MyBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDkgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI4NCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI4NSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI4NiBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMDEwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI4NyBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorZHFhbmQyODggYW5kICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODkgYW5kICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDAwMDAxIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTAgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDgwMDAwMDEwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTEgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDkwMDAwMTAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTIgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTMgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDEwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTQgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTUgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2RxYW5kMjk2IGFuZCAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5NyBhbmQgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTggYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjk5IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMTAwMDEwMCAtPiAgMTEwMDAwMTEwMDAwMTEwMDAwMDAxMDAwMDAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2RxYW5kMzMxIGFuZCAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDMzMiBhbmQgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzMgYW5kICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzM0IGFuZCAgNSAgIDFFLTkwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDMzNSBhbmQgIDYgICAtMUUtOTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzYgYW5kICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzM3IGFuZCAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDMzOCBhbmQgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDEgYW5kICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQyIGFuZCAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0MyBhbmQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDQgYW5kICAxRS05MDAgICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQ1IGFuZCAgLTFFLTkwMCAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0NiBhbmQgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDcgYW5kICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQ4IGFuZCAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZHFhbmQzNjEgYW5kICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzYyIGFuZCAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM2MyBhbmQgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNjQgYW5kICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzY1IGFuZCAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM2NiBhbmQgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNzEgYW5kICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzcyIGFuZCAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM3MyBhbmQgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNzQgYW5kICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzc1IGFuZCAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM3NiBhbmQgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkcWFuZDc4MCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODEgYW5kIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzgyIGFuZCAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4MyBhbmQgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODQgYW5kIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzg1IGFuZCAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4NiBhbmQgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODcgYW5kIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzg4IGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4OSBhbmQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3OTAgYW5kIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzkxIGFuZCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc5MiBhbmQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3OTMgYW5kICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzk0IGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxYW5kODAwIGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwMSBhbmQgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDIgYW5kICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODAzIGFuZCAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwNCBhbmQgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDUgYW5kICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODA2IGFuZCAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwNyBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDggYW5kIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODA5IGFuZCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgxMCBhbmQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MTEgYW5kIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODEyIGFuZCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgxMyBhbmQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MTQgYW5kICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODE1IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxYW5kODIxIGFuZCAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyMiBhbmQgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjMgYW5kICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODI0IGFuZCAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyNSBhbmQgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjYgYW5kICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODI3IGFuZCAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyOCBhbmQgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjkgYW5kICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODMwIGFuZCAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzMSBhbmQgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzIgYW5kIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODMzIGFuZCAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzNCBhbmQgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzUgYW5kICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODM2IGFuZCAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzNyBhbmQgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWFuZDg0MSBhbmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg0MiBhbmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg0MyBhbmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg0NCBhbmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg0NSBhbmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg0NiBhbmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg0NyBhbmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg0OCBhbmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg0OSBhbmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1MCBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1MSBhbmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1MiBhbmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1MyBhbmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1NCBhbmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1NSBhbmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1NiBhbmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1NyBhbmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1OCBhbmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg1OSBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxYW5kODYxIGFuZCAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2MiBhbmQgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjMgYW5kICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODY0IGFuZCAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2NSBhbmQgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjYgYW5kIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODY3IGFuZCAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2OCBhbmQgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjkgYW5kICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODcxIGFuZCAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3MiBhbmQgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzMgYW5kICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODc0IGFuZCAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3NSBhbmQgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzYgYW5kICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODc3IGFuZCAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3OCBhbmQgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzkgYW5kICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODgwIGFuZCAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg4MSBhbmQgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4ODIgYW5kIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODgzIGFuZCAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg4NCBhbmQgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4ODUgYW5kICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFCYXNlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQmFzZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOWM2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQmFzZS5kZWNUZXN0CkBAIC0wLDAgKzEsMTA4MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUJhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY1F1YWQgPC0tPiBzdHJpbmcgY29udmVyc2lvbnMgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZmlsZSB0ZXN0cyBiYXNlIGNvbnZlcnNpb25zIGZyb20gc3RyaW5nIHRvIGEgZGVjaW1hbCBudW1iZXIKKy0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pCisKKy0tIE5vdGUgdGhhdCB1bmxpa2Ugb3RoZXIgb3BlcmF0aW9ucyB0aGUgb3BlcmFuZCBpcyBzdWJqZWN0IHRvIHJvdW5kaW5nCistLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsCistLSBjb25mb3JtIHRvIHJ1bGVzIGFuZCBleHBvbmVudCB3aWxsIGJlIGluIHBlcm1pdHRlZCByYW5nZSkuICBUaGUKKy0tICdsZWZ0IGhhbmQgc2lkZScsIHRoZXJlZm9yZSwgbWF5IGhhdmUgbnVtYmVycyB0aGF0IGNhbm5vdCBiZQorLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNRdWFkLiAgU29tZSB0ZXN0Y2FzZXMgZ28gdG8gdGhlIGxpbWl0IG9mIHRoZQorLS0gbmV4dC13aWRlciBmb3JtYXQsIGFuZCBoZW5jZSB0aGVzZSB0ZXN0Y2FzZXMgbWF5IGFsc28gYmUgdXNlZCB0bworLS0gdGVzdCBuYXJyb3dpbmcgYW5kIHdpZGVuaW5nIG9wZXJhdGlvbnMuCisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxYmFzMDAxIHRvU2NpICAgICAgIDAgLT4gMAorZHFiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxCitkcWJhczAwMyB0b1NjaSAgICAgMS4wIC0+IDEuMAorZHFiYXMwMDQgdG9TY2kgICAgMS4wMCAtPiAxLjAwCitkcWJhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwCitkcWJhczAwNiB0b1NjaSAgICAxMDAwIC0+IDEwMDAKK2RxYmFzMDA3IHRvU2NpICAgIDEwLjAgLT4gMTAuMAorZHFiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xCitkcWJhczAwOSB0b1NjaSAgICAxMC40IC0+IDEwLjQKK2RxYmFzMDEwIHRvU2NpICAgIDEwLjUgLT4gMTAuNQorZHFiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42CitkcWJhczAxMiB0b1NjaSAgICAxMC45IC0+IDEwLjkKK2RxYmFzMDEzIHRvU2NpICAgIDExLjAgLT4gMTEuMAorZHFiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0CitkcWJhczAxNSB0b1NjaSAgMC4xMjMgLT4gMC4xMjMKK2RxYmFzMDE2IHRvU2NpICAwLjAxMiAtPiAwLjAxMgorZHFiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wCitkcWJhczAxOCB0b1NjaSAgLTAuMCAgLT4gLTAuMAorZHFiYXMwMTkgdG9TY2kgLTAwLjAwIC0+IC0wLjAwCisKK2RxYmFzMDIxIHRvU2NpICAgICAtMSAtPiAtMQorZHFiYXMwMjIgdG9TY2kgICAtMS4wIC0+IC0xLjAKK2RxYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xCitkcWJhczAyNCB0b1NjaSAgIC05LjEgLT4gLTkuMQorZHFiYXMwMjUgdG9TY2kgICAtOS4xMSAtPiAtOS4xMQorZHFiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5CitkcWJhczAyNyB0b1NjaSAgIC05Ljk5OSAtPiAtOS45OTkKKworZHFiYXMwMzAgdG9TY2kgICcxMjM0NTY3ODkuMTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkuMTIzNDU2JworZHFiYXMwMzEgdG9TY2kgICcxMjM0NTY3ODkuMDAwMDAwJyAgIC0+ICcxMjM0NTY3ODkuMDAwMDAwJworZHFiYXMwMzIgdG9TY2kgICAnMTIzNDU2Nzg5MTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkxMjM0NTYnCitkcWJhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDEyMzQ1Njc4OScKK2RxYmFzMDM0IHRvU2NpICAnMC4wMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMDEyMzQ1Njc4OScKK2RxYmFzMDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1Njc4OScgICAtPiAnMS4yMzQ1Njc4OUUtNycKK2RxYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3ODknICAtPiAnMS4yMzQ1Njc4OUUtOCcKKworZHFiYXMwMzcgdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ0JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NCcKK2RxYmFzMDM4IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NScgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDUnCisKKy0tIHRlc3QgZmluaXRlIGJvdW5kcyAoTmVncyBvZiwgdGhlbiAwLCBOdGlueSwgTm1pbiwgb3RoZXIsIE5tYXgpCitkcWJzbjAwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWJzbjAwMiB0b1NjaSAtMUUtNjE0MyAtPiAtMUUtNjE0MworZHFic24wMDMgdG9TY2kgLTFFLTYxNzYgLT4gLTFFLTYxNzYgU3Vibm9ybWFsCitkcWJzbjAwNCB0b1NjaSAtMCAtPiAtMAorZHFic24wMDUgdG9TY2kgKzAgLT4gIDAKK2RxYnNuMDA2IHRvU2NpICsxRS02MTc2IC0+ICAxRS02MTc2IFN1Ym5vcm1hbAorZHFic24wMDcgdG9TY2kgKzFFLTYxNDMgLT4gIDFFLTYxNDMKK2RxYnNuMDA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0KKy0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdAorZHFiYXMwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJworZHFiYXMwNDEgdG9TY2kgIi03NiIgICAgICAgLT4gJy03NicKK2RxYmFzMDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicKK2RxYmFzMDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicKK2RxYmFzMDQ0IHRvU2NpICIwMTIuNzYiICAgIC0+ICcxMi43NicKK2RxYmFzMDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycKK2RxYmFzMDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycKK2RxYmFzMDQ3IHRvU2NpICIuNSIgICAgICAgIC0+ICcwLjUnCitkcWJhczA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnCitkcWJhczA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnCitkcWJhczA1MCB0b1NjaSAiMC4wMDA1IiAgICAgIC0+ICcwLjAwMDUnCitkcWJhczA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1JworZHFiYXMwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnCitkcWJhczA1MyB0b1NjaSAiMC4wMDAwMDUwIiAgIC0+ICcwLjAwMDAwNTAnCitkcWJhczA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03JworZHFiYXMwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcKK2RxYmFzMDU2IHRvU2NpICIxMjM0NTY3OC41NDMyMTAiIC0+ICcxMjM0NTY3OC41NDMyMTAnCitkcWJhczA1NyB0b1NjaSAiMjM0NTY3OC41NDMyMTAiIC0+ICcyMzQ1Njc4LjU0MzIxMCcKK2RxYmFzMDU4IHRvU2NpICIzNDU2NzguNTQzMjEwIiAtPiAnMzQ1Njc4LjU0MzIxMCcKK2RxYmFzMDU5IHRvU2NpICIwMzQ1Njc4LjU0MzIxIiAtPiAnMzQ1Njc4LjU0MzIxJworZHFiYXMwNjAgdG9TY2kgIjM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkcWJhczA2MSB0b1NjaSAiKzM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkcWJhczA2MiB0b1NjaSAiKzAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworZHFiYXMwNjMgdG9TY2kgIiswMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkcWJhczA2NCB0b1NjaSAiLTM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKK2RxYmFzMDY1IHRvU2NpICItMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKK2RxYmFzMDY2IHRvU2NpICItMDAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCistLSBleGFtcGxlcworZHFiYXMwNjcgdG9TY2kgIjVFLTYiICAgICAgICAtPiAnMC4wMDAwMDUnCitkcWJhczA2OCB0b1NjaSAiNTBFLTciICAgICAgIC0+ICcwLjAwMDAwNTAnCitkcWJhczA2OSB0b1NjaSAiNUUtNyIgICAgICAgIC0+ICc1RS03JworCistLSBbTm8gZXhvdGljcyBhcyBubyBVbmljb2RlXQorCistLSByb3VuZGVkIHdpdGggZG90cyBpbiBhbGwgKGluY2x1ZGluZyBlZGdlKSBwbGFjZXMKK2RxYmFzMDcxIHRvU2NpICAuMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gMC4xMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzIgdG9TY2kgIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3MyB0b1NjaSAgMTIuMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMi4zNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDc0IHRvU2NpICAxMjMuNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMy40NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzUgdG9TY2kgIDEyMzQuNTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNC41Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3NiB0b1NjaSAgMTIzNDUuNjc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NS42Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDc3IHRvU2NpICAxMjM0NTYuNzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Ni43ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzggdG9TY2kgIDEyMzQ1NjcuODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Ny44OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3OSB0b1NjaSAgMTIzNDU2NzguOTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3OC45MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDgwIHRvU2NpICAxMjM0NTY3ODkuMTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OS4xMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODEgdG9TY2kgIDEyMzQ1Njc4OTEuMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MS4yMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4MiB0b1NjaSAgMTIzNDU2Nzg5MTIuMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMi4zNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDgzIHRvU2NpICAxMjM0NTY3ODkxMjMuNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMy40NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODQgdG9TY2kgIDEyMzQ1Njc4OTEyMzQuNTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNC41Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4NSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDUuNjc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NS42Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDg2IHRvU2NpICAxMjM0NTY3ODkxMjM0NTYuNzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Ni43ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1NjcuODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Ny44OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4OCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2NzguOTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3OC45MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDg5IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkuMDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OS4wMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTAgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAuMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MC4xMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5MSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEuMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMS4yMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDkyIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIuMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMi4zNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTMgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjMuNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMy40NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5NCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQuNTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNC41Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDk1IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDUuNjc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NS42NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTYgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTYuNzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Ni43ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5NyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1NjcuODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ny44MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDk4IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzguMDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3OC4wMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTkgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAuMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MC4xMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEuMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMS4yMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAxIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIuMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMi4zNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDIgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjMuNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMy40NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQuNTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNC41NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTA0IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDUuNjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NS42IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDUgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYuMTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwNiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEuMjMgIC0+ICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NkUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwNyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyLjMgIC0+ICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NkUrMzUgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwOCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMy4gIC0+ICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NkUrMzYgSW5leGFjdCBSb3VuZGVkCistLSAxMjM0NTY3ODkwMTIzNDU2NzgKKworLS0gTnVtYmVycyB3aXRoIEUKK2RxYmFzMTMwIHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCitkcWJhczEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcKK2RxYmFzMTMyIHRvU2NpICIwLjAwMEUtMyIgIC0+ICcwLjAwMDAwMCcKK2RxYmFzMTMzIHRvU2NpICIwLjAwMEUtNCIgIC0+ICcwRS03JworZHFiYXMxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcKK2RxYmFzMTM1IHRvU2NpICIwLjAwRS0zIiAgIC0+ICcwLjAwMDAwJworZHFiYXMxMzYgdG9TY2kgIjAuMDBFLTQiICAgLT4gJzAuMDAwMDAwJworZHFiYXMxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnCitkcWJhczEzOCB0b1NjaSAiKzBFKzkiICAgICAtPiAnMEUrOScKK2RxYmFzMTM5IHRvU2NpICItMEUrOSIgICAgIC0+ICctMEUrOScKK2RxYmFzMTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworZHFiYXMxNDEgdG9TY2kgIjFlKzA5IiAgICAgLT4gJzFFKzknCitkcWJhczE0MiB0b1NjaSAiMUUrOTAiICAgICAtPiAnMUUrOTAnCitkcWJhczE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScKK2RxYmFzMTQ0IHRvU2NpICIwRSs5IiAgICAgIC0+ICcwRSs5JworZHFiYXMxNDUgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCitkcWJhczE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScKK2RxYmFzMTQ3IHRvU2NpICIxZSs5MCIgICAgIC0+ICcxRSs5MCcKK2RxYmFzMTQ4IHRvU2NpICIxRSswMDkiICAgIC0+ICcxRSs5JworZHFiYXMxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknCitkcWJhczE1MCB0b1NjaSAiMUU5IiAgICAgICAtPiAnMUUrOScKK2RxYmFzMTUxIHRvU2NpICIxZTA5IiAgICAgIC0+ICcxRSs5JworZHFiYXMxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJworZHFiYXMxNTMgdG9TY2kgIjFFMDA5IiAgICAgLT4gJzFFKzknCitkcWJhczE1NCB0b1NjaSAiMEU5IiAgICAgICAtPiAnMEUrOScKK2RxYmFzMTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcKK2RxYmFzMTU2IHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCitkcWJhczE1NyB0b1NjaSAiNEUrOSIgICAgICAtPiAnNEUrOScKK2RxYmFzMTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJworZHFiYXMxNTkgdG9TY2kgIjAuNzNlLTciICAgLT4gJzcuM0UtOCcKK2RxYmFzMTYwIHRvU2NpICIwMEUrOSIgICAgIC0+ICcwRSs5JworZHFiYXMxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknCitkcWJhczE2MiB0b1NjaSAiMTBFKzkiICAgICAtPiAnMS4wRSsxMCcKK2RxYmFzMTYzIHRvU2NpICIxMEUrMDkiICAgIC0+ICcxLjBFKzEwJworZHFiYXMxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnCitkcWJhczE2NSB0b1NjaSAiMTBFKzAwOSIgICAtPiAnMS4wRSsxMCcKK2RxYmFzMTY2IHRvU2NpICIxMDBlKzkiICAgIC0+ICcxLjAwRSsxMScKK2RxYmFzMTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScKK2RxYmFzMTY4IHRvU2NpICIxMDBFKzkwIiAgIC0+ICcxLjAwRSs5MicKK2RxYmFzMTY5IHRvU2NpICIxMDBlKzAwOSIgIC0+ICcxLjAwRSsxMScKKworZHFiYXMxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1JworZHFiYXMxNzEgdG9TY2kgIjEuMjY1RS0yMCIgLT4gJzEuMjY1RS0yMCcKK2RxYmFzMTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcKK2RxYmFzMTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnCitkcWJhczE3NCB0b1NjaSAiMS4yNjVFLTMiICAtPiAnMC4wMDEyNjUnCitkcWJhczE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScKK2RxYmFzMTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnCitkcWJhczE3NyB0b1NjaSAiMS4yNjVFLTAiICAtPiAnMS4yNjUnCitkcWJhczE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnCitkcWJhczE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnCitkcWJhczE4MCB0b1NjaSAiMS4yNjVFKzMiICAtPiAnMTI2NScKK2RxYmFzMTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcKK2RxYmFzMTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcKK2RxYmFzMTgzIHRvU2NpICIxLjI2NUUrMjAiIC0+ICcxLjI2NUUrMjAnCisKK2RxYmFzMTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScKK2RxYmFzMTkxIHRvU2NpICIxMi42NUUtMjAiIC0+ICcxLjI2NUUtMTknCitkcWJhczE5MiB0b1NjaSAiMTIuNjVFLTgiICAtPiAnMS4yNjVFLTcnCitkcWJhczE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnCitkcWJhczE5NCB0b1NjaSAiMTIuNjVFLTMiICAtPiAnMC4wMTI2NScKK2RxYmFzMTk1IHRvU2NpICIxMi42NUUtMiIgIC0+ICcwLjEyNjUnCitkcWJhczE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnCitkcWJhczE5NyB0b1NjaSAiMTIuNjVFLTAiICAtPiAnMTIuNjUnCitkcWJhczE5OCB0b1NjaSAiMTIuNjVFKzEiICAtPiAnMTI2LjUnCitkcWJhczE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScKK2RxYmFzMjAwIHRvU2NpICIxMi42NUUrMyIgIC0+ICcxLjI2NUUrNCcKK2RxYmFzMjAxIHRvU2NpICIxMi42NUUrNCIgIC0+ICcxLjI2NUUrNScKK2RxYmFzMjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScKK2RxYmFzMjAzIHRvU2NpICIxMi42NUUrMjAiIC0+ICcxLjI2NUUrMjEnCisKK2RxYmFzMjEwIHRvU2NpICIxMjYuNSIgICAgIC0+ICcxMjYuNScKK2RxYmFzMjExIHRvU2NpICIxMjYuNUUtMjAiIC0+ICcxLjI2NUUtMTgnCitkcWJhczIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnCitkcWJhczIxMyB0b1NjaSAiMTI2LjVFLTQiICAtPiAnMC4wMTI2NScKK2RxYmFzMjE0IHRvU2NpICIxMjYuNUUtMyIgIC0+ICcwLjEyNjUnCitkcWJhczIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnCitkcWJhczIxNiB0b1NjaSAiMTI2LjVFLTEiICAtPiAnMTIuNjUnCitkcWJhczIxNyB0b1NjaSAiMTI2LjVFLTAiICAtPiAnMTI2LjUnCitkcWJhczIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScKK2RxYmFzMjE5IHRvU2NpICIxMjYuNUUrMiIgIC0+ICcxLjI2NUUrNCcKK2RxYmFzMjIwIHRvU2NpICIxMjYuNUUrMyIgIC0+ICcxLjI2NUUrNScKK2RxYmFzMjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicKK2RxYmFzMjIyIHRvU2NpICIxMjYuNUUrOCIgIC0+ICcxLjI2NUUrMTAnCitkcWJhczIyMyB0b1NjaSAiMTI2LjVFKzIwIiAtPiAnMS4yNjVFKzIyJworCitkcWJhczIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1JworZHFiYXMyMzEgdG9TY2kgIjEyNjVFLTIwIiAtPiAnMS4yNjVFLTE3JworZHFiYXMyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScKK2RxYmFzMjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScKK2RxYmFzMjM0IHRvU2NpICIxMjY1RS0zIiAgLT4gJzEuMjY1JworZHFiYXMyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnCitkcWJhczIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScKK2RxYmFzMjM3IHRvU2NpICIxMjY1RS0wIiAgLT4gJzEyNjUnCitkcWJhczIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcKK2RxYmFzMjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1JworZHFiYXMyNDAgdG9TY2kgIjEyNjVFKzMiICAtPiAnMS4yNjVFKzYnCitkcWJhczI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycKK2RxYmFzMjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScKK2RxYmFzMjQzIHRvU2NpICIxMjY1RSsyMCIgLT4gJzEuMjY1RSsyMycKKworZHFiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnCitkcWJhczI1MSB0b1NjaSAiMC4xMjY1RS0yMCIgLT4gJzEuMjY1RS0yMScKK2RxYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknCitkcWJhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnCitkcWJhczI1NCB0b1NjaSAiMC4xMjY1RS0zIiAgLT4gJzAuMDAwMTI2NScKK2RxYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnCitkcWJhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnCitkcWJhczI1NyB0b1NjaSAiMC4xMjY1RS0wIiAgLT4gJzAuMTI2NScKK2RxYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnCitkcWJhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1JworZHFiYXMyNjAgdG9TY2kgIjAuMTI2NUUrMyIgIC0+ICcxMjYuNScKK2RxYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScKK2RxYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnCitkcWJhczI2MyB0b1NjaSAiMC4xMjY1RSsyMCIgLT4gJzEuMjY1RSsxOScKKworLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQorZHFiYXMyOTAgdG9TY2kgIi0wLjAwMEUtMSIgIC0+ICctMC4wMDAwJworZHFiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcKK2RxYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJworZHFiYXMyOTMgdG9TY2kgIi0wLjAwMEUtNCIgIC0+ICctMEUtNycKK2RxYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcKK2RxYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnCitkcWJhczI5NiB0b1NjaSAiLTAuMEUtMiIgICAgLT4gJy0wLjAwMCcKK2RxYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcKK2RxYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnCitkcWJhczI5OSB0b1NjaSAiLTBFLTMiICAgICAgLT4gJy0wLjAwMCcKKworLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMKK2RxYmFzMzAxICB0b1NjaSAxMGUxMiAgLT4gMS4wRSsxMworZHFiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTIKK2RxYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMgorZHFiYXMzMDQgIHRvRW5nIDEwZTExICAtPiAxLjBFKzEyCitkcWJhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTEKK2RxYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5CitkcWJhczMwNyAgdG9TY2kgMTBlOSAgIC0+IDEuMEUrMTAKK2RxYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkKK2RxYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5CitkcWJhczMxMCAgdG9FbmcgMTBlOCAgIC0+IDEuMEUrOQorZHFiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgKK2RxYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2CitkcWJhczMxMyAgdG9TY2kgMTBlNiAgIC0+IDEuMEUrNworZHFiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNgorZHFiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYKK2RxYmFzMzE2ICB0b0VuZyAxMGU1ICAgLT4gMS4wRSs2CitkcWJhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQorZHFiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMKK2RxYmFzMzE5ICB0b1NjaSAxMGUzICAgLT4gMS4wRSs0CitkcWJhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszCitkcWJhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMworZHFiYXMzMjIgIHRvRW5nIDEwZTIgICAtPiAxLjBFKzMKK2RxYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyCitkcWJhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMAorZHFiYXMzMjUgIHRvU2NpIDEwZTAgICAtPiAxMAorZHFiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMAorZHFiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjAKK2RxYmFzMzI4ICB0b0VuZyAxMGUtMSAgLT4gMS4wCitkcWJhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTAKK2RxYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMAorZHFiYXMzMzEgIHRvU2NpIDEwZS0zICAtPiAwLjAxMAorZHFiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMAorZHFiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTAKK2RxYmFzMzM0ICB0b0VuZyAxMGUtNCAgLT4gMC4wMDEwCitkcWJhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTAKK2RxYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMAorZHFiYXMzMzcgIHRvU2NpIDEwZS02ICAtPiAwLjAwMDAxMAorZHFiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMAorZHFiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTAKK2RxYmFzMzQwICB0b0VuZyAxMGUtNyAgLT4gMC4wMDAwMDEwCitkcWJhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNworZHFiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkKK2RxYmFzMzQzICB0b1NjaSAxMGUtOSAgLT4gMS4wRS04CitkcWJhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05CitkcWJhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQorZHFiYXMzNDYgIHRvRW5nIDEwZS0xMCAtPiAxLjBFLTkKK2RxYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMAorZHFiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyCitkcWJhczM0OSAgdG9TY2kgMTBlLTEyIC0+IDEuMEUtMTEKK2RxYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyCitkcWJhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTIKK2RxYmFzMzUyICB0b0VuZyAxMGUtMTMgLT4gMS4wRS0xMgorCitkcWJhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTIKK2RxYmFzMzYyICB0b0VuZyA3RTEyICAtPiA3RSsxMgorZHFiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExCitkcWJhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5CitkcWJhczM2NSAgdG9TY2kgN0UxMCAgLT4gN0UrMTAKK2RxYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQorZHFiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkKK2RxYmFzMzY4ICB0b0VuZyA3RTkgICAtPiA3RSs5CitkcWJhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOAorZHFiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNgorZHFiYXMzNzEgIHRvU2NpIDdFNyAgIC0+IDdFKzcKK2RxYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNgorZHFiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYKK2RxYmFzMzc0ICB0b0VuZyA3RTYgICAtPiA3RSs2CitkcWJhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQorZHFiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMworZHFiYXMzNzcgIHRvU2NpIDdFNCAgIC0+IDdFKzQKK2RxYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMworZHFiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMKK2RxYmFzMzgwICB0b0VuZyA3RTMgICAtPiA3RSszCitkcWJhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMgorZHFiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMAorZHFiYXMzODMgIHRvU2NpIDdFMSAgIC0+IDdFKzEKK2RxYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MAorZHFiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcKK2RxYmFzMzg2ICB0b0VuZyA3RTAgICAtPiA3CitkcWJhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43CitkcWJhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43CitkcWJhczM4OSAgdG9TY2kgN0UtMiAgLT4gMC4wNworZHFiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcKK2RxYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNworZHFiYXMzOTIgIHRvRW5nIDdFLTMgIC0+IDAuMDA3CitkcWJhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3CitkcWJhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3CitkcWJhczM5NSAgdG9TY2kgN0UtNSAgLT4gMC4wMDAwNworZHFiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcKK2RxYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNworZHFiYXMzOTggIHRvRW5nIDdFLTYgIC0+IDAuMDAwMDA3CitkcWJhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNworZHFiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQorZHFiYXM0MDEgIHRvU2NpIDdFLTggIC0+IDdFLTgKK2RxYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQorZHFiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkKK2RxYmFzNDA0ICB0b0VuZyA3RS05ICAtPiA3RS05CitkcWJhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTAKK2RxYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyCitkcWJhczQwNyAgdG9TY2kgN0UtMTEgLT4gN0UtMTEKK2RxYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTIKK2RxYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMgorZHFiYXM0MTAgIHRvRW5nIDdFLTEyIC0+IDdFLTEyCitkcWJhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMKK2RxYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1CisKKy0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uCitkcWJhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMAorZHFiYXM0MjIgIHRvU2NpICAgMTAwMCAtPiAxMDAwCitkcWJhczQyNCAgdG9TY2kgIDk5OS45IC0+ICA5OTkuOQorZHFiYXM0MjYgIHRvU2NpIDEwMDAuMCAtPiAxMDAwLjAKK2RxYmFzNDI4ICB0b1NjaSAxMDAwLjEgLT4gMTAwMC4xCitkcWJhczQzMCAgdG9TY2kgMTAwMDAgLT4gMTAwMDAKK2RxYmFzNDMyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWJhczQzNCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYmFzNDM2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYmFzNDM4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWJhczQ0MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZAorZHFiYXM0NDIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQKK2RxYmFzNDQ0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDQ2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDQ4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDUwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzQgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDUyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkCitkcWJhczQ1NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ1NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ1OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ2MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICAgUm91bmRlZAorZHFiYXM0NjIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NjQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NjYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNiAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NjggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgIFJvdW5kZWQKK2RxYmFzNDcwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDcyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDc0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzcgICBSb3VuZGVkIEluZXhhY3QKKworLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkCityb3VuZGluZzogIGNlaWxpbmcKK2RxYnNyNDAxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MDIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDAzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQwNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICB1cAorZHFic3I0MDUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQwNiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MDcgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDA4ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGZsb29yCitkcWJzcjQxMCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNDExICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQxMiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MTMgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkcWJzcjQxNSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNDE2ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQxNyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MTggIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDE5ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZXZlbgorZHFic3I0MjEgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQyMiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MjMgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDI0ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQyNSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBkb3duCitkcWJzcjQyNiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNDI3ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQyOCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MjkgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl91cAorZHFic3I0MzEgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQzMiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MzMgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDM0ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NyAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQzNSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorLS0gbmVnYXRpdmVzCityb3VuZGluZzogIGNlaWxpbmcKK2RxYnNyNTAxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MDIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTAzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUwNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICB1cAorZHFic3I1MDUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUwNiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MDcgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTA4ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGZsb29yCitkcWJzcjUxMCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNTExICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUxMiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MTMgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkcWJzcjUxNSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNTE2ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUxNyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MTggIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTE5ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZXZlbgorZHFic3I1MjEgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUyMiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MjMgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTI0ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUyNSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBkb3duCitkcWJzcjUyNiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNTI3ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUyOCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MjkgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl91cAorZHFic3I1MzEgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUzMiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MzMgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTM0ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NyAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUzNSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFRoZSAnYmFkZGllcycgdGVzdHMgZnJvbSBEaWFnQmlnRGVjaW1hbCwgcGx1cyBzb21lIG5ldyBvbmVzCitkcWJhczUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTAxIHRvU2NpICcuJyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDIgdG9TY2kgJy4uJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTA0IHRvU2NpICctLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDUgdG9TY2kgJy0rMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTA3IHRvU2NpICcxMmUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDggdG9TY2kgJzEyZSsrJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTEwIHRvU2NpICcgKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTEgdG9TY2kgJysgMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTEzIHRvU2NpICcgKyAxJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTQgdG9TY2kgJyAtIDEgJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTE2IHRvU2NpICctMS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTcgdG9TY2kgJzEyLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTE5IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjAgdG9TY2kgJzFlLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTIyIHRvU2NpICc3ZTEyMzU2Nzg5MHgnICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjMgdG9TY2kgJzdlMTIzNTY3ODkwMTJ4JyAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTI1IHRvU2NpICdlMTAwJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjYgdG9TY2kgJ1x1MGU1YScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTI4IHRvU2NpICcxMjMsNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjkgdG9TY2kgJzEuMzQuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTMxIHRvU2NpICcwMS4zNS4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzIgdG9TY2kgJzAxLjM1LScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTM0IHRvU2NpICcuMDAwMC4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzUgdG9TY2kgJzAwLi4wMCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTM3IHRvU2NpICcxMTFlMTIzLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzggdG9TY2kgJzExMWUrMTIrJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQwIHRvU2NpICcxMTFlMSoyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDEgdG9TY2kgJzExMWUxZSszJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQzIHRvU2NpICcxZTEyM2UnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDQgdG9TY2kgJ3RlbicgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQ2IHRvU2NpICcxZS4xJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDcgdG9TY2kgJzFlMS4nICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQ5IHRvU2NpICdlKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTAgdG9TY2kgJzEuMjMuNCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTUyIHRvU2NpICcxRSsxLjInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTMgdG9TY2kgJzFFKzEuMi4zJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTU1IHRvU2NpICcxRS0tMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTYgdG9TY2kgJzFFKy0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTU4IHRvU2NpICcxRScnMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTkgdG9TY2kgIjFFIiIxIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKy0tIE5lYXItc3BlY2lhbHMKK2RxYmFzNTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjIgdG9TY2kgIk5hTnEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2MyB0b1NjaSAiTmFOcyIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjUgdG9TY2kgIkluZmluIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2NiB0b1NjaSAiSW5maW5pIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjggdG9TY2kgIi1JbmZpbml0IiAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2OSB0b1NjaSAiMEluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzEgdG9TY2kgIi0wSW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3MiB0b1NjaSAiLTlJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzQgdG9TY2kgInhOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3NSB0b1NjaSAiMHNOYU4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzCitkcWJhczU3NiB0b1NjaSAgJ2UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3NyB0b1NjaSAgJy5lKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3OSB0b1NjaSAgJy0uZSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4MCB0b1NjaSAgJy0uZScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4MiB0b1NjaSAgJy5FKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4MyB0b1NjaSAgJysuRSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4NSB0b1NjaSAgJy0uRScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RxYmFzNTg2IHRvU2NpICAnLk5hTicgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTg3IHRvU2NpICAnLS5OYU4nICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTg5IHRvU2NpICAnKy5JbmYnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTkwIHRvU2NpICAnLkluZmluaXR5JyAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworLS0gWmVyb3MKK2RxYmFzNjAxIHRvU2NpIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2RxYmFzNjAyIHRvU2NpIDAuMDAwMDAwMDAgICAgICAgIC0+IDBFLTgKK2RxYmFzNjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcKK2RxYmFzNjA0IHRvU2NpIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwCitkcWJhczYwNSB0b1NjaSAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitkcWJhczYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKK2RxYmFzNjA3IHRvU2NpIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwCitkcWJhczYwOCB0b1NjaSAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitkcWJhczYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RxYmFzNjEwIHRvU2NpICAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZHFiYXM2MTEgdG9TY2kgMC4gICAgICAgICAgICAgICAgLT4gMAorZHFiYXM2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAorZHFiYXM2MTMgdG9TY2kgLTAuICAgICAgICAgICAgICAgLT4gLTAKK2RxYmFzNjE0IHRvU2NpIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2RxYmFzNjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCitkcWJhczYxNiB0b1NjaSAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDAKK2RxYmFzNjE3IHRvU2NpIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2RxYmFzNjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCitkcWJhczYxOSB0b1NjaSAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDAKK2RxYmFzNjIwIHRvU2NpIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wRS03CitkcWJhczYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOAorZHFiYXM2MjIgdG9TY2kgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKKworZHFiYXM2MzAgdG9TY2kgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMAorZHFiYXM2MzEgdG9TY2kgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitkcWJhczYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwCitkcWJhczYzMyB0b1NjaSAgMC4wMEUrMyAgICAgICAgICAtPiAwRSsxCitkcWJhczYzNCB0b1NjaSAgMC4wMEUrNCAgICAgICAgICAtPiAwRSsyCitkcWJhczYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitkcWJhczYzNiB0b1NjaSAgMC4wMEUrNiAgICAgICAgICAtPiAwRSs0CitkcWJhczYzNyB0b1NjaSAgMC4wMEUrNyAgICAgICAgICAtPiAwRSs1CitkcWJhczYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2CitkcWJhczYzOSB0b1NjaSAgMC4wMEUrOSAgICAgICAgICAtPiAwRSs3CisKK2RxYmFzNjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAorZHFiYXM2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMAorZHFiYXM2NDIgdG9TY2kgIDAuMEUrMiAgICAgICAgICAgLT4gMEUrMQorZHFiYXM2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMgorZHFiYXM2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMworZHFiYXM2NDUgdG9TY2kgIDAuMEUrNSAgICAgICAgICAgLT4gMEUrNAorZHFiYXM2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQorZHFiYXM2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorZHFiYXM2NDggdG9TY2kgIDAuMEUrOCAgICAgICAgICAgLT4gMEUrNworZHFiYXM2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOAorCitkcWJhczY1MCB0b1NjaSAgMEUrMCAgICAgICAgICAgICAtPiAwCitkcWJhczY1MSB0b1NjaSAgMEUrMSAgICAgICAgICAgICAtPiAwRSsxCitkcWJhczY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyCitkcWJhczY1MyB0b1NjaSAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCitkcWJhczY1NCB0b1NjaSAgMEUrNCAgICAgICAgICAgICAtPiAwRSs0CitkcWJhczY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1CitkcWJhczY1NiB0b1NjaSAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2CitkcWJhczY1NyB0b1NjaSAgMEUrNyAgICAgICAgICAgICAtPiAwRSs3CitkcWJhczY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4CitkcWJhczY1OSB0b1NjaSAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5CisKK2RxYmFzNjYwIHRvU2NpICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorZHFiYXM2NjEgdG9TY2kgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAorZHFiYXM2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDAKK2RxYmFzNjYzIHRvU2NpICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorZHFiYXM2NjQgdG9TY2kgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAorZHFiYXM2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RxYmFzNjY2IHRvU2NpICAwLjBFLTYgICAgICAgICAgIC0+IDBFLTcKK2RxYmFzNjY3IHRvU2NpICAwLjBFLTcgICAgICAgICAgIC0+IDBFLTgKK2RxYmFzNjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKK2RxYmFzNjY5IHRvU2NpICAwLjBFLTkgICAgICAgICAgIC0+IDBFLTEwCisKK2RxYmFzNjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKK2RxYmFzNjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwCitkcWJhczY3MiB0b1NjaSAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2RxYmFzNjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKK2RxYmFzNjc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwCitkcWJhczY3NSB0b1NjaSAgMC4wMEUtNSAgICAgICAgICAtPiAwRS03CitkcWJhczY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04CitkcWJhczY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05CitkcWJhczY3OCB0b1NjaSAgMC4wMEUtOCAgICAgICAgICAtPiAwRS0xMAorZHFiYXM2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTEKKworZHFiYXM2ODAgdG9TY2kgIDAwMDAwMC4gICAgICAgICAgLT4gIDAKK2RxYmFzNjgxIHRvU2NpICAgMDAwMDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMAorZHFiYXM2ODMgdG9TY2kgICAgIDAwMC4gICAgICAgICAgLT4gIDAKK2RxYmFzNjg0IHRvU2NpICAgICAgMDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMAorZHFiYXM2ODYgdG9TY2kgICswMDAwMC4gICAgICAgICAgLT4gIDAKK2RxYmFzNjg3IHRvU2NpICAtMDAwMDAuICAgICAgICAgIC0+IC0wCitkcWJhczY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMAorZHFiYXM2ODkgdG9TY2kgIC0wLiAgICAgICAgICAgICAgLT4gLTAKKworLS0gU3BlY2lhbHMKK2RxYmFzNzAwIHRvU2NpICJOYU4iICAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwMiB0b1NjaSAibkFuIiAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzAzIHRvU2NpICJOQU4iICAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwNSB0b1NjaSAiK25hbiIgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzA2IHRvU2NpICIrbkFuIiAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwOCB0b1NjaSAiLU5hTiIgICAgICAgICAgICAtPiAtTmFOCitkcWJhczcwOSB0b1NjaSAiLW5hbiIgICAgICAgICAgICAtPiAtTmFOCitkcWJhczcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFOCitkcWJhczcxMSB0b1NjaSAiLU5BTiIgICAgICAgICAgICAtPiAtTmFOCitkcWJhczcxMiB0b1NjaSAnTmFOMCcgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjEKK2RxYmFzNzE0IHRvU2NpICdOYU4xMicgICAgICAgICAgIC0+IE5hTjEyCitkcWJhczcxNSB0b1NjaSAnTmFOMTIzJyAgICAgICAgICAtPiBOYU4xMjMKK2RxYmFzNzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQKK2RxYmFzNzE3IHRvU2NpICdOYU4wMScgICAgICAgICAgIC0+IE5hTjEKK2RxYmFzNzE4IHRvU2NpICdOYU4wMTInICAgICAgICAgIC0+IE5hTjEyCitkcWJhczcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMKK2RxYmFzNzIwIHRvU2NpICdOYU4wMTIzNCcgICAgICAgIC0+IE5hTjEyMzQKK2RxYmFzNzIxIHRvU2NpICdOYU4wMDEnICAgICAgICAgIC0+IE5hTjEKK2RxYmFzNzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyCitkcWJhczcyMyB0b1NjaSAnTmFOMDAxMjMnICAgICAgICAtPiBOYU4xMjMKK2RxYmFzNzI0IHRvU2NpICdOYU4wMDEyMzQnICAgICAgIC0+IE5hTjEyMzQKK2RxYmFzNzI1IHRvU2NpICdOYU4xMjM0NTY3ODkwMTIzNDU2NzgxMjM0NTY3ODkwMTIzNDU2JyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM3MjcgdG9TY2kgJ05hTjEyLjQ1JyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczcyOCB0b1NjaSAnTmFOLTEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkcWJhczczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFOCitkcWJhczczMSB0b1NjaSAic25hbiIgICAgICAgICAgICAtPiBzTmFOCitkcWJhczczMiB0b1NjaSAiU25BbiIgICAgICAgICAgICAtPiBzTmFOCitkcWJhczczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFOCitkcWJhczczNCB0b1NjaSAiK3NOYU4iICAgICAgICAgICAtPiBzTmFOCitkcWJhczczNSB0b1NjaSAiK3NuYW4iICAgICAgICAgICAtPiBzTmFOCitkcWJhczczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFOCitkcWJhczczNyB0b1NjaSAiK1NOQU4iICAgICAgICAgICAtPiBzTmFOCitkcWJhczczOCB0b1NjaSAiLXNOYU4iICAgICAgICAgICAtPiAtc05hTgorZHFiYXM3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4KK2RxYmFzNzQwIHRvU2NpICItU25BbiIgICAgICAgICAgIC0+IC1zTmFOCitkcWJhczc0MSB0b1NjaSAiLVNOQU4iICAgICAgICAgICAtPiAtc05hTgorZHFiYXM3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTgorZHFiYXM3NDMgdG9TY2kgJ3NOYU43JyAgICAgICAgICAgLT4gc05hTjcKK2RxYmFzNzQ0IHRvU2NpICdzTmFOMDA3MjM0JyAgICAgIC0+IHNOYU43MjM0CitkcWJhczc0NSB0b1NjaSAnc05hTjEyMzQ1Njc4OTAxMjM0NTY3ODcyMzQ1NjEyMzQ1Njc4OTAnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczc0NyB0b1NjaSAnc05hTi03MicgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZHFiYXM3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzQ5IHRvU2NpICJpbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc1MCB0b1NjaSAiaU5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzUyIHRvU2NpICIrSW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc1MyB0b1NjaSAiK2luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzU1IHRvU2NpICIrSU5GIiAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc1NiB0b1NjaSAiLUluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RxYmFzNzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXM3NTggdG9TY2kgIi1pTmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitkcWJhczc1OSB0b1NjaSAiLUlORiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKKworZHFiYXM3NjAgdG9TY2kgIkluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2MiB0b1NjaSAiaU5mSW5JdFkiICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjMgdG9TY2kgIklORklOSVRZIiAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2NSB0b1NjaSAiK2luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjYgdG9TY2kgIitpTmZJbkl0WSIgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2OCB0b1NjaSAiLUluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2RxYmFzNzY5IHRvU2NpICItaW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXM3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5CitkcWJhczc3MSB0b1NjaSAiLUlORklOSVRZIiAgICAgICAtPiAtSW5maW5pdHkKKworLS0gU3BlY2lhbHMgYW5kIHplcm9zIGZvciB0b0VuZworZHFiYXN0NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzdDc3MyB0b0VuZyAiLUluZmluaXR5IiAgICAgICAgLT4gLUluZmluaXR5CitkcWJhc3Q3NzQgdG9FbmcgIi1zTmFOIiAgICAgICAgICAgIC0+IC1zTmFOCitkcWJhc3Q3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4KK2RxYmFzdDc3NiB0b0VuZyAiK0luZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzdDc3OCB0b0VuZyAiK3NOYU4iICAgICAgICAgICAgLT4gc05hTgorZHFiYXN0Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzdDc4MCB0b0VuZyAiSU5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzdDc4MSB0b0VuZyAiU05BTiIgICAgICAgICAgICAgLT4gc05hTgorZHFiYXN0NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzdDc4MyB0b0VuZyAiaW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzdDc4NCB0b0VuZyAic25hbiIgICAgICAgICAgICAgLT4gc05hTgorZHFiYXN0Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzdDc4NiB0b0VuZyAiSW5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzdDc4NyB0b0VuZyAiU25BTiIgICAgICAgICAgICAgLT4gc05hTgorZHFiYXN0Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzdDc4OSB0b0VuZyAiaU5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzdDc5MCB0b0VuZyAic05hbiIgICAgICAgICAgICAgLT4gc05hTgorZHFiYXN0NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzdDc5MiB0b0VuZyAiSW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzdDc5MyB0b0VuZyAic05hTiIgICAgICAgICAgICAgLT4gc05hTgorCistLSBaZXJvIHRvRW5nLCBldGMuCitkcWJhc3Q4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQorCitkcWJhc3Q4MDEgdG9FbmcgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQorZHFiYXN0ODAyIHRvRW5nIDAuMDAwMDAwMDAgICAgICAgIC0+IDAuMDBFLTYKK2RxYmFzdDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYKK2RxYmFzdDgwNCB0b0VuZyAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorZHFiYXN0ODA1IHRvRW5nIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDAKK2RxYmFzdDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKK2RxYmFzdDgwNyB0b0VuZyAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorZHFiYXN0ODA4IHRvRW5nIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDAKK2RxYmFzdDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RxYmFzdDgxMCB0b0VuZyAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RxYmFzdDgxMSB0b0VuZyAwLiAgICAgICAgICAgICAgICAtPiAwCitkcWJhc3Q4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAorZHFiYXN0ODEzIHRvRW5nIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitkcWJhc3Q4MTQgdG9FbmcgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMAorZHFiYXN0ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCitkcWJhc3Q4MTYgdG9FbmcgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitkcWJhc3Q4MTcgdG9FbmcgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMAorZHFiYXN0ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCitkcWJhc3Q4MTkgdG9FbmcgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitkcWJhc3Q4MjAgdG9FbmcgLTAuMDAwMDAwMCAgICAgICAgLT4gLTAuMEUtNgorZHFiYXN0ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02CitkcWJhc3Q4MjIgdG9FbmcgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKKworZHFiYXN0ODMwIHRvRW5nICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2RxYmFzdDgzMSB0b0VuZyAgMC4wMEUrMSAgICAgICAgICAtPiAwLjAKK2RxYmFzdDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwCitkcWJhc3Q4MzMgdG9FbmcgIDAuMDBFKzMgICAgICAgICAgLT4gMC4wMEUrMworZHFiYXN0ODM0IHRvRW5nICAwLjAwRSs0ICAgICAgICAgIC0+IDAuMEUrMworZHFiYXN0ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKK2RxYmFzdDgzNiB0b0VuZyAgMC4wMEUrNiAgICAgICAgICAtPiAwLjAwRSs2CitkcWJhc3Q4MzcgdG9FbmcgIDAuMDBFKzcgICAgICAgICAgLT4gMC4wRSs2CitkcWJhc3Q4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorZHFiYXN0ODM5IHRvRW5nICAwLjAwRSs5ICAgICAgICAgIC0+IDAuMDBFKzkKKworZHFiYXN0ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAorZHFiYXN0ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2RxYmFzdDg0MiB0b0VuZyAgMC4wRSsyICAgICAgICAgICAtPiAwLjAwRSszCitkcWJhc3Q4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszCitkcWJhc3Q4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMworZHFiYXN0ODQ1IHRvRW5nICAwLjBFKzUgICAgICAgICAgIC0+IDAuMDBFKzYKK2RxYmFzdDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYKK2RxYmFzdDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2CitkcWJhc3Q4NDggdG9FbmcgIDAuMEUrOCAgICAgICAgICAgLT4gMC4wMEUrOQorZHFiYXN0ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQorCitkcWJhc3Q4NTAgdG9FbmcgIDBFKzAgICAgICAgICAgICAgLT4gMAorZHFiYXN0ODUxIHRvRW5nICAwRSsxICAgICAgICAgICAgIC0+IDAuMDBFKzMKK2RxYmFzdDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMKK2RxYmFzdDg1MyB0b0VuZyAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCitkcWJhc3Q4NTQgdG9FbmcgIDBFKzQgICAgICAgICAgICAgLT4gMC4wMEUrNgorZHFiYXN0ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNgorZHFiYXN0ODU2IHRvRW5nICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKK2RxYmFzdDg1NyB0b0VuZyAgMEUrNyAgICAgICAgICAgICAtPiAwLjAwRSs5CitkcWJhc3Q4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5CitkcWJhc3Q4NTkgdG9FbmcgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitkcWJhc3Q4NjAgdG9FbmcgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wCitkcWJhc3Q4NjEgdG9FbmcgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAorZHFiYXN0ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitkcWJhc3Q4NjMgdG9FbmcgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwCitkcWJhc3Q4NjQgdG9FbmcgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAorZHFiYXN0ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitkcWJhc3Q4NjYgdG9FbmcgIDAuMEUtNiAgICAgICAgICAgLT4gMC4wRS02CitkcWJhc3Q4NjcgdG9FbmcgIDAuMEUtNyAgICAgICAgICAgLT4gMC4wMEUtNgorZHFiYXN0ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKK2RxYmFzdDg2OSB0b0VuZyAgMC4wRS05ICAgICAgICAgICAtPiAwLjBFLTkKKworZHFiYXN0ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKK2RxYmFzdDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorZHFiYXN0ODcyIHRvRW5nICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMAorZHFiYXN0ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKK2RxYmFzdDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorZHFiYXN0ODc1IHRvRW5nICAwLjAwRS01ICAgICAgICAgIC0+IDAuMEUtNgorZHFiYXN0ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYKK2RxYmFzdDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05CitkcWJhc3Q4NzggdG9FbmcgIDAuMDBFLTggICAgICAgICAgLT4gMC4wRS05CitkcWJhc3Q4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQorCistLSBsb25nIGlucHV0IHN0cmluZ3MKK2RxYmFzODAxIHRvc2NpICcwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MDIgdG9zY2kgJzAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MDMgdG9zY2kgJzAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA0IHRvc2NpICcwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MDUgdG9zY2kgJzAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MDYgdG9zY2kgJzAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA3IHRvc2NpICcwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MDggdG9zY2kgJzAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MDkgdG9zY2kgJzAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODEwIHRvc2NpICcwMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorCitkcWJhczgxMSB0b3NjaSAnMC4xMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODEyIHRvc2NpICcwLjAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxMyB0b3NjaSAnMC4wMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxNCB0b3NjaSAnMC4wMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODE1IHRvc2NpICcwLjAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxNiB0b3NjaSAnMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxNyB0b3NjaSAnMC4wMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtNworZHFiYXM4MTggdG9zY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS04CitkcWJhczgxOSB0b3NjaSAnMC4wMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS05CitkcWJhczgyMCB0b3NjaSAnMC4wMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtMTAKKworZHFiYXM4MjEgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwJyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrMzcgSW5leGFjdCBSb3VuZGVkCitkcWJhczgyMiB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxJyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrMzggSW5leGFjdCBSb3VuZGVkCitkcWJhczgyMyB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMicgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM5IEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjQgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzJyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDAgSW5leGFjdCBSb3VuZGVkCitkcWJhczgyNSB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDEgSW5leGFjdCBSb3VuZGVkCitkcWJhczgyNiB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0NScgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQyIEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjcgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDMgSW5leGFjdCBSb3VuZGVkCitkcWJhczgyOCB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0NTY3JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDQgSW5leGFjdCBSb3VuZGVkCitkcWJhczgyOSB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0NTY3OCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQ1IEluZXhhY3QgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MKK2RxYmFzOTA2IHRvU2NpICc5OWU5OTk5OTk5OTknICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTA3IHRvU2NpICc5OTllOTk5OTk5OTk5JyAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTA4IHRvU2NpICcwLjllLTk5OTk5OTk5OScgICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MDkgdG9TY2kgJzAuMDllLTk5OTk5OTk5OScgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkxMCB0b1NjaSAnMC4xZTEwMDAwMDAwMDAnICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTEyIHRvU2NpICcwLjllOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTEzIHRvU2NpICc5OWUtOTk5OTk5OTk5OScgICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MTQgdG9TY2kgJzExMWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MTUgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTknICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTE3IHRvU2NpICc3ZTEwMDAwMDAwMDAnICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5lZ2F0aXZlcyB0aGUgc2FtZQorZHFiYXM5MTggdG9TY2kgJy05OWU5OTk5OTk5OTknICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTE5IHRvU2NpICctOTk5ZTk5OTk5OTk5OScgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkyMCB0b1NjaSAnLTAuOWUtOTk5OTk5OTk5JyAgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkyMSB0b1NjaSAnLTAuMDllLTk5OTk5OTk5OScgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MjMgdG9TY2kgJy0xMGUtMTAwMDAwMDAwMCcgICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjQgdG9TY2kgJy0wLjllOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTI1IHRvU2NpICctOTllLTk5OTk5OTk5OTknICAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTI2IHRvU2NpICctMTExZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkyNyB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTknICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkyOCB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTk5JyAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkyOSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCistLSBvdmVyZmxvdyByZXN1bHRzIGF0IGRpZmZlcmVudCByb3VuZGluZyBtb2Rlcworcm91bmRpbmc6ICBjZWlsaW5nCitkcWJhczkzMCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MzEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgdXAKK2RxYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkzMyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBkb3duCitkcWJhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MzUgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZmxvb3IKK2RxYmFzOTM2IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkzNyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfdXAKK2RxYmFzOTM4IHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkzOSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RxYmFzOTQwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczk0MSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RxYmFzOTQyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczk0MyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfZXZlbgorCistLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMAorZHFiZW00MDAgdG9TY2kgIDEuMDAwMEUtMzgzICAgICAtPiAxLjAwMDBFLTM4MworZHFiZW00MDEgdG9TY2kgIDAuMUUtNjE3MiAgICAgICAgLT4gMUUtNjE3MyAgICAgICBTdWJub3JtYWwKK2RxYmVtNDAyIHRvU2NpICAwLjEwMDBFLTYxNzIgICAgIC0+IDEuMDAwRS02MTczICAgU3Vibm9ybWFsCitkcWJlbTQwMyB0b1NjaSAgMC4wMTAwRS02MTcyICAgICAtPiAxLjAwRS02MTc0ICAgIFN1Ym5vcm1hbAorZHFiZW00MDQgdG9TY2kgIDAuMDAxMEUtNjE3MiAgICAgLT4gMS4wRS02MTc1ICAgICBTdWJub3JtYWwKK2RxYmVtNDA1IHRvU2NpICAwLjAwMDFFLTYxNzIgICAgIC0+IDFFLTYxNzYgICAgICAgU3Vibm9ybWFsCitkcWJlbTQwNiB0b1NjaSAgMC4wMDAxMEUtNjE3MiAgICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwgUm91bmRlZAorZHFiZW00MDcgdG9TY2kgIDAuMDAwMTNFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDA4IHRvU2NpICAwLjAwMDE1RS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQwOSB0b1NjaSAgMC4wMDAxN0UtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTAgdG9TY2kgIDAuMDAwMjNFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDExIHRvU2NpICAwLjAwMDI1RS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxMiB0b1NjaSAgMC4wMDAyN0UtNjE3MiAgICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTMgdG9TY2kgIDAuMDAwMTQ5RS02MTcyICAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDE0IHRvU2NpICAwLjAwMDE1MEUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxNSB0b1NjaSAgMC4wMDAxNTFFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTYgdG9TY2kgIDAuMDAwMjQ5RS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDE3IHRvU2NpICAwLjAwMDI1MEUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxOCB0b1NjaSAgMC4wMDAyNTFFLTYxNzIgICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTkgdG9TY2kgIDAuMDAwMDlFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDIwIHRvU2NpICAwLjAwMDA1RS02MTcyICAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmVtNDIxIHRvU2NpICAwLjAwMDAzRS02MTcyICAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmVtNDIyIHRvU2NpICAwLjAwMDAwOUUtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmVtNDIzIHRvU2NpICAwLjAwMDAwNUUtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmVtNDI0IHRvU2NpICAwLjAwMDAwM0UtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZHFiZW00MjUgdG9TY2kgIDAuMDAxMDQ5RS02MTcyICAgLT4gMS4wRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDI2IHRvU2NpICAwLjAwMTA1MEUtNjE3MiAgIC0+IDEuMEUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQyNyB0b1NjaSAgMC4wMDEwNTFFLTYxNzIgICAtPiAxLjFFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MjggdG9TY2kgIDAuMDAxMTQ5RS02MTcyICAgLT4gMS4xRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDI5IHRvU2NpICAwLjAwMTE1MEUtNjE3MiAgIC0+IDEuMkUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQzMCB0b1NjaSAgMC4wMDExNTFFLTYxNzIgICAtPiAxLjJFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcWJlbTQzMiB0b1NjaSAgMC4wMTAwNDlFLTYxNzIgICAtPiAxLjAwRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MzMgdG9TY2kgIDAuMDEwMDUwRS02MTcyICAgLT4gMS4wMEUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDM0IHRvU2NpICAwLjAxMDA1MUUtNjE3MiAgIC0+IDEuMDFFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQzNSB0b1NjaSAgMC4wMTAxNDlFLTYxNzIgICAtPiAxLjAxRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MzYgdG9TY2kgIDAuMDEwMTUwRS02MTcyICAgLT4gMS4wMkUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDM3IHRvU2NpICAwLjAxMDE1MUUtNjE3MiAgIC0+IDEuMDJFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxYmVtNDQwIHRvU2NpICAwLjEwMTAzRS02MTcyICAgIC0+IDEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ0MSB0b1NjaSAgMC4xMDEwNUUtNjE3MiAgICAtPiAxLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTYxNzIgICAgLT4gMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDQzIHRvU2NpICAwLjEwMTEzRS02MTcyICAgIC0+IDEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ0NCB0b1NjaSAgMC4xMDExNUUtNjE3MiAgICAtPiAxLjAxMkUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTYxNzIgICAgLT4gMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFiZW00NTAgdG9TY2kgIDEuMTA3MzBFLTYxNzMgICAtPiAxLjEwN0UtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NTEgdG9TY2kgIDEuMTA3NTBFLTYxNzMgICAtPiAxLjEwOEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NTIgdG9TY2kgIDEuMTA3NzBFLTYxNzMgICAtPiAxLjEwOEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NTMgdG9TY2kgIDEuMTA4MzBFLTYxNzMgICAtPiAxLjEwOEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NTQgdG9TY2kgIDEuMTA4NTBFLTYxNzMgICAtPiAxLjEwOEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NTUgdG9TY2kgIDEuMTA4NzBFLTYxNzMgICAtPiAxLjEwOUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBtYWtlIHN1cmUgc2lnbiBPSworZHFiZW00NTYgdG9TY2kgIC0wLjEwMTAzRS02MTcyICAgLT4gLTEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ1NyB0b1NjaSAgLTAuMTAxMDVFLTYxNzIgICAtPiAtMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtNjE3MiAgIC0+IC0xLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NTkgdG9TY2kgIC0wLjEwMTEzRS02MTcyICAgLT4gLTEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ2MCB0b1NjaSAgLTAuMTAxMTVFLTYxNzIgICAtPiAtMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtNjE3MiAgIC0+IC0xLjAxMkUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSAnOTk5cycgY2FzZXMKK2RxYmVtNDY0IHRvU2NpICA5OTk5OTlFLTYxNzMgICAgICAgICAtPiA5Ljk5OTk5RS02MTY4IFN1Ym5vcm1hbAorZHFiZW00NjUgdG9TY2kgIDk5OTk5LjBFLTYxNzIgICAgICAgIC0+IDkuOTk5OTBFLTYxNjggU3Vibm9ybWFsCitkcWJlbTQ2NiB0b1NjaSAgOTk5OTkuRS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTY4ICBTdWJub3JtYWwKK2RxYmVtNDY3IHRvU2NpICA5OTk5LjlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNjkgIFN1Ym5vcm1hbAorZHFiZW00NjggdG9TY2kgIDk5OS45OUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE3MCAgU3Vibm9ybWFsCitkcWJlbTQ2OSB0b1NjaSAgOTkuOTk5RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTcxICBTdWJub3JtYWwKK2RxYmVtNDcwIHRvU2NpICA5Ljk5OTlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNzIgIFN1Ym5vcm1hbAorZHFiZW00NzEgdG9TY2kgIDAuOTk5OTlFLTYxNzIgICAgICAgIC0+IDEuMDAwMEUtNjE3MiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NzIgdG9TY2kgIDAuMDk5OTk5RS02MTcyICAgICAgIC0+IDEuMDAwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ3MyB0b1NjaSAgMC4wMDk5OTk5RS02MTcyICAgICAgLT4gMS4wMEUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDc0IHRvU2NpICAwLjAwMDk5OTk5RS02MTcyICAgICAtPiAxLjBFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NzUgdG9TY2kgIDAuMDAwMDk5OTk5RS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ3NiB0b1NjaSAgMC4wMDAwMDk5OTk5RS02MTcyICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiZW00NzcgdG9TY2kgIDAuMDAwMDAwOTk5OTlFLTYxNzIgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmVtNDc4IHRvU2NpICAwLjAwMDAwMDA5OTk5OUUtNjE3MiAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIEV4cG9uZW50cyB3aXRoIGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcworZHFiYXMxMDAxIHRvU2NpICAxZTk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwMiB0b1NjaSAgMWUwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDAzIHRvU2NpICAxZTAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDA0IHRvU2NpICAxZTAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwNSB0b1NjaSAgMWUwMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMDYgdG9TY2kgIDFlMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDA3IHRvU2NpICAxZS05OTk5OTk5OTkgLT4gMEUtNjE3NiAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMEUtNjE3NiAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzMTAwOSB0b1NjaSAgMWUtMDA5OTk5OTk5OTkgLT4gMEUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXMxMDEwIHRvU2NpICAxZS0wMDA5OTk5OTk5OTkgLT4gMEUtNjE3NiAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzMTAxMiB0b1NjaSAgMWUtMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworZHFiYXMxMDQxIHRvU2NpICAgICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0NDRFLTYxNDQgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjRFLTYxNDQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxYmFzMTA0MiB0b1NjaSAgICAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNDQ1RS02MTQ0IC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0RS02MTQ0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWJhczEwNDMgdG9TY2kgICAgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjQ0NkUtNjE0NCAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNEUtNjE0NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBjbGFtcGVkIHplcm9zIFtzZWUgYWxzbyBjbGFtcC5kZWNUZXN0XQorZHFiYXMxMDc1IHRvU2NpICAgMGUrMTAwMDAgIC0+ICAwRSs2MTExIENsYW1wZWQKK2RxYmFzMTA3NiB0b1NjaSAgIDBlLTEwMDAwICAtPiAgMEUtNjE3NiAgQ2xhbXBlZAorZHFiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSs2MTExIENsYW1wZWQKK2RxYmFzMTA3OCB0b1NjaSAgLTBlLTEwMDAwICAtPiAtMEUtNjE3NiAgQ2xhbXBlZAorCistLSBleHRyZW1lIHZhbHVlcyBmcm9tIG5leHQtd2lkZXIKK2RxYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSsxNTcyODY0IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTEwMiB0b1NjaSAtMUUtMTU3Mjg2MyAtPiAtMEUtNjE3NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkcWJhczExMDMgdG9TY2kgLTFFLTE1NzI5MzIgLT4gLTBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHFiYXMxMTA0IHRvU2NpIC0wIC0+IC0wCitkcWJhczExMDUgdG9TY2kgKzAgLT4gIDAKK2RxYmFzMTEwNiB0b1NjaSArMUUtMTU3MjkzMiAtPiAgMEUtNjE3NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkcWJhczExMDcgdG9TY2kgKzFFLTE1NzI4NjMgLT4gIDBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHFiYXMxMTA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzE1NzI4NjQgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2Fub25pY2FsLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2Fub25pY2FsLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2ZGI4NQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDYW5vbmljYWwuZGVjVGVzdApAQCAtMCwwICsxLDM3MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNhbm9uaWNhbC5kZWNUZXN0IC0tIHRlc3QgZGVjUXVhZCBjYW5vbmljYWwgcmVzdWx0cyAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZmlsZSB0ZXN0cyB0aGF0IGNvcHkgb3BlcmF0aW9ucyBsZWF2ZSB1bmNhbm9uaWNhbCBvcGVyYW5kcworLS0gdW5jaGFuZ2VkLCBhbmQgdmljZSB2ZXJzYQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gVW5jYW5vbmljYWwgZGVjbGV0cyBhcmU6IGFiYywgd2hlcmU6CistLSAgIGE9MSwyLDMKKy0tICAgYj02LDcsZSxmCistLSAgIGM9ZSxmCisKKy0tIGFzc2VydCBzb21lIHN0YW5kYXJkIChjYW5vbmljYWwpIHZhbHVlczsgdGhpcyB0ZXN0cyB0aGF0IEZyb21TdHJpbmcKKy0tIHByb2R1Y2VzIGNhbm9uaWNhbCByZXN1bHRzIChtYW55IG1vcmUgaW4gZGVjaW1hbE5OKQorZHFjYW4wMDEgYXBwbHkgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMDIgYXBwbHkgMCAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMDAzIGFwcGx5IDEgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWNhbjAwNCBhcHBseSAtMSAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFjYW4wMDUgYXBwbHkgSW5maW5pdHkgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMDA2IGFwcGx5IC1JbmZpbml0eSAgICAgICAgICAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjAwNyBhcHBseSAtTmFOICAgICAgICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4wMDggYXBwbHkgLXNOYU4gICAgICAgICAgICAgICAgICAtPiAjZmUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMDA5IGFwcGx5ICBOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMTAgYXBwbHkgc05hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkZWNhbjAxMSBhcHBseSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDEyIGFwcGx5IDcuNTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNkMAorZHFjYW4wMTMgYXBwbHkgOS45OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmCisKKy0tIEJhc2UgdGVzdHMgZm9yIGNhbm9uaWNhbCBlbmNvZGluZ3MgKGluZGl2aWR1YWwgb3BlcmF0b3IKKy0tIHByb3BhZ2F0aW9uIGlzIHRlc3RlZCBsYXRlcikKKworLS0gRmluaXRlczogZGVjbGV0cyBpbiBjb2VmZmljaWVudAorZHFjYW4wMjEgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyMiBjYW5vbmljYWwgICM3N2ZmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDIzIGNhbm9uaWNhbCAgIzc3ZmZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjQgY2Fub25pY2FsICAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyNSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDI2IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjcgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyOCBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDI5IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMzAgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAzMSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDMyIGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4wNjEgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2MiBjYW5vbmljYWwgICM3YzAwMGZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDYzIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjQgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2NSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDY2IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjcgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2OCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDY5IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNzAgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA3MSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW4wODEgY2Fub25pY2FsICAjN2QwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4MiBjYW5vbmljYWwgICM3YzgwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDgzIGNhbm9uaWNhbCAgIzdjNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODQgY2Fub25pY2FsICAjN2MyMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4NSBjYW5vbmljYWwgICM3YzEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDg2IGNhbm9uaWNhbCAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODcgY2Fub25pY2FsICAjN2MwNDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4OCBjYW5vbmljYWwgICM3YzAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDg5IGNhbm9uaWNhbCAgIzdjMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wOTAgY2Fub25pY2FsICAjN2MwMDhmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA5MSBjYW5vbmljYWwgICM3YzAwNGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkcWNhbjEwMSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTAyIGNhbm9uaWNhbCAgIzdlMDAwZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDMgY2Fub25pY2FsICAjN2UwMDBmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwNCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTA1IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDYgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwNyBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTA4IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDkgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwMCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTExIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW4xMjEgY2Fub25pY2FsICAjN2YwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyMiBjYW5vbmljYWwgICM3ZTgwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTIzIGNhbm9uaWNhbCAgIzdlNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjQgY2Fub25pY2FsICAjN2UyMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyNSBjYW5vbmljYWwgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTI2IGNhbm9uaWNhbCAgIzdlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjcgY2Fub25pY2FsICAjN2UwNDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyOCBjYW5vbmljYWwgICM3ZTAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTI5IGNhbm9uaWNhbCAgIzdlMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMzAgY2Fub25pY2FsICAjN2UwMDhmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEzMSBjYW5vbmljYWwgICM3ZTAwNGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZHFjYW4xMzcgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjEzOCBjYW5vbmljYWwgICM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTM5IGNhbm9uaWNhbCAgIzdhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDAgY2Fub25pY2FsICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0MSBjYW5vbmljYWwgICM3ODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQyIGNhbm9uaWNhbCAgIzc4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDMgY2Fub25pY2FsICAjNzgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0NCBjYW5vbmljYWwgICM3ODA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQ1IGNhbm9uaWNhbCAgIzc4MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDYgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0NyBjYW5vbmljYWwgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQ4IGNhbm9uaWNhbCAgIzc4MDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDkgY2Fub25pY2FsICAjNzgwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMgKGZpcnN0LCBsYXN0LCBhbmQgYSBmZXcgb3RoZXJzKQorZHFjYW4xNTAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1MSBjYW5vbmljYWwgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTUyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTMgY2Fub25pY2FsICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1NCBjYW5vbmljYWwgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTU1IGNhbm9uaWNhbCAgIzc4MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTYgY2Fub25pY2FsICAjNzgwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1NyBjYW5vbmljYWwgICM3ODAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTU4IGNhbm9uaWNhbCAgIzc4MDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTkgY2Fub25pY2FsICAjNzgwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTYxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2MyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTY0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjUgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2NiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTY3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjggY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2OSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTcwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTczIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzQgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3NSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTc2IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzcgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3OCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTc5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xODAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE4MSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworCistLSBOb3cgdGhlIG9wZXJhdG9ycyAtLSB0cnlpbmcgdG8gY2hlY2sgcGF0aHMgdGhhdCBtaWdodCBmYWlsIHRvCistLSBjYW5vbmljYWxpemUgcHJvcGFnYXRlZCBvcGVyYW5kcworCistLS0tLSBBZGQ6CistLSBGaW5pdGVzOiBuZXV0cmFsIDAKK2RxY2FuMjAyIGFkZCAgMEUrNjE0NCAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMjAzIGFkZCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgMEUrNjE0NCAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHRpbnkgemVybworZHFjYW4yMDQgYWRkICAwRS02MTc2ICM3N2ZmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCitkcWNhbjIwNSBhZGQgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIDBFLTYxNzYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKKy0tIHRpbnkgbm9uIHplcm8KK2RxY2FuMjA2IGFkZCAtMUUtNjE3NiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZmZmYgICAgICAgICAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorZHFjYW4yMDcgYWRkICAgICAgICAgICM3N2ZmY2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzZmNmZiAtMUUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4yMTEgYWRkICAwICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMjEyIGFkZCAgICAgIzdjMDAwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMjEzIGFkZCAgMCAgIzdjNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjIxNCBhZGQgICAgICM3YzAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkcWNhbjIxNSBhZGQgIDAgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuMjE2IGFkZCAgICAgIzdlMDAzZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW4yMTcgYWRkICAwICAjN2U1MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjIxOCBhZGQgICAgICM3ZTBlMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMjIwIGFkZCAgMCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyMSBhZGQgICAgICM3ODY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cworZHFjYW4yMjIgYWRkICAwICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjIzIGFkZCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyNCBhZGQgIDAgICM3ODAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMjUgYWRkICAgICAjNzgwMDAwMDAwMDAwZjAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjI2IGFkZCAgMCAgIzc4MDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyNyBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLS0tLSBDbGFzczogW2RvZXMgbm90IHJldHVybiBlbmNvZGVkXQorCistLS0tLSBDb21wYXJlOgorZHFjYW4yMzEgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFjYW4yMzIgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMzMgY29tcGFyZSAgMSAgICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFjYW4yMzQgY29tcGFyZSAgIzdjMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZmZmY2ZmICAgICAtMTAwMCAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjIzNSBjb21wYXJlICAjN2UwMDRmZjNmY2ZmM2ZjZmYzZmZmZmZmY2ZmM2ZjZmYgICAgIC0xMDAwICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKworLS0tLS0gQ29tcGFyZVNpZzoKK2RxY2FuMjQxIGNvbXBhcmVzaWcgLUluZiAgIDEgICAgIC0+ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMjQyIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjQzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMjQ0IGNvbXBhcmVzaWcgICM3YzQwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0xMDAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW4yNDUgY29tcGFyZXNpZyAgIzdlMDUwZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZjNmY2ZmICAgLTEwMDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIENvcHk6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RxY2FuMjUwIGNvcHkgICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZiAtPiAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYKK2RxY2FuMjUxIGNvcHkgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYKKy0tIE5hTnMKK2RxY2FuMjUyIGNvcHkgICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKK2RxY2FuMjUzIGNvcHkgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RxY2FuMjU0IGNvcHkgICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtPiAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKK2RxY2FuMjU1IGNvcHkgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZHFjYW4yNTggY29weSAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yNTkgY29weSAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwIC0+ICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMAorCistLS0tLSBDb3B5QWJzOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCistLSBmaW5pdGVzCitkcWNhbjI2MCBjb3B5YWJzICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmCitkcWNhbjI2MSBjb3B5YWJzICAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzZlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmCistLSBOYU5zCitkcWNhbjI2MiBjb3B5YWJzICAjZmMwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI2MyBjb3B5YWJzICAjZmMwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBzTmFOCitkcWNhbjI2NCBjb3B5YWJzICAjZmUwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI2NSBjb3B5YWJzICAjZmUxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RxY2FuMjY4IGNvcHlhYnMgICNmODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjY5IGNvcHlhYnMgICNmODAwMDAwMDAwMDAwMDcwMDcwMDcwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDA3MDA3MDA3MDAwMDAwMDAwMDAKKworLS0tLS0gQ29weU5lZ2F0ZTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZHFjYW4yNzAgY29weW5lZ2F0ZSAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZgorZHFjYW4yNzEgY29weW5lZ2F0ZSAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZgorLS0gTmFOcworZHFjYW4yNzIgY29weW5lZ2F0ZSAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmYzZmNmZjNmY2ZmIC0+ICNmYzAwMGZmM2ZjZmZmZmZmZmZmZmZmM2ZjZmYzZmNmZgorZHFjYW4yNzMgY29weW5lZ2F0ZSAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICNmYzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTgorZHFjYW4yNzQgY29weW5lZ2F0ZSAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICNmZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgorZHFjYW4yNzUgY29weW5lZ2F0ZSAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICNmZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gSW5mCitkcWNhbjI3OCBjb3B5bmVnYXRlICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gI2Y4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjI3OSBjb3B5bmVnYXRlICAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAgLT4gI2Y4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwCisKKy0tLS0tIENvcHlTaWduOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCistLSBmaW5pdGVzCitkcWNhbjI4MCBjb3B5c2lnbiAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0xIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZgorZHFjYW4yODEgY29weXNpZ24gICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAgMSAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYKKy0tIE5hTnMKK2RxY2FuMjgyIGNvcHlzaWduICAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLTEgLT4gI2ZjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI4MyBjb3B5c2lnbiAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxIC0+ICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTgorZHFjYW4yODQgY29weXNpZ24gICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtMSAtPiAjZmUwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKK2RxY2FuMjg1IGNvcHlzaWduICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RxY2FuMjg4IGNvcHlzaWduICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLTEgLT4gI2Y4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjI4OSBjb3B5c2lnbiAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwICAxIC0+ICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMAorCistLS0tLSBNdWx0aXBseToKKy0tIEZpbml0ZXM6IG5ldXRyYWwgMAorZHFjYW4zMDIgbXVsdGlwbHkgIDEgICM3N2ZmZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3N2ZmZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMDMgbXVsdGlwbHkgICAgICM3N2ZjZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3N2ZjY2ZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAorLS0gbmVnYXRpdmUKK2RxY2FuMzA2IG11bHRpcGx5IC0xICAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjZjdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzA3IG11bHRpcGx5ICAgICAjNzdmY2ZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgLTEgICAgICAgICAgICAtPiAjZjdmY2NmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkcWNhbjMxMSBtdWx0aXBseSAgMSAgIzdjMDNmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjMxMiBtdWx0aXBseSAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMzEzIG11bHRpcGx5ICAxICAjN2M0MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzE0IG11bHRpcGx5ICAgICAjN2M0MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4zMTUgbXVsdGlwbHkgIDEgICM3ZTAwZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwMGZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW4zMTYgbXVsdGlwbHkgICAgICM3ZTAwZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwMGZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW4zMTcgbXVsdGlwbHkgIDEgICM3ZTgwZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW4zMTggbXVsdGlwbHkgICAgICM3ZTgwZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCBJbnZhbGlkX29wZXJhdGlvbgorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZHFjYW4zMjAgbXVsdGlwbHkgIDEgICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjEgbXVsdGlwbHkgICAgICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cworZHFjYW4zMjIgbXVsdGlwbHkgIDEgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjMgbXVsdGlwbHkgICAgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjQgbXVsdGlwbHkgIDEgICM3ODAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjUgbXVsdGlwbHkgICAgICM3ODAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjYgbXVsdGlwbHkgIDEgICM3ODAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMjcgbXVsdGlwbHkgICAgICM3ODAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLS0tLSBRdWFudGl6ZToKK2RxY2FuNDAxIHF1YW50aXplICAjZWUwODBmZjNmY2ZmM2ZjZmYzZmZmZmZmZmZmM2ZjZmYgMCAgICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNDAyIHF1YW50aXplICAjZWUwODBmZjNmZmZmZmZmZmZmZmNmZjNmY2ZmM2ZjZmYgMCAgICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNDAzIHF1YW50aXplICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5mICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuNDA0IHF1YW50aXplICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLUluZiAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuNDEwIHF1YW50aXplICAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNDExIHF1YW50aXplICAjZmMwMDBmZjNmY2ZmZmZmZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNDEyIHF1YW50aXplICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuNDEzIHF1YW50aXplICAjZmUwMDBmZjNmY2ZmM2ZjZmYzZmZmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKworLS0tLS0gU3VidHJhY3Q6CistLSBGaW5pdGVzOiBuZXV0cmFsIDAKK2RxY2FuNTAyIHN1YnRyYWN0ICAwRSs2MTQ0ICM3N2ZmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICNmN2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW41MDMgc3VidHJhY3QgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIDBFKzYxNDQgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSB0aW55IHplcm8KK2RxY2FuNTA0IHN1YnRyYWN0ICAwRS02MTc2ICM3N2ZmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICNmN2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCitkcWNhbjUwNSBzdWJ0cmFjdCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgMEUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorLS0gdGlueSBub24gemVybworZHFjYW41MDYgc3VidHJhY3QgLTFFLTYxNzYgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmICAgICAgICAgIC0+ICNmN2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuNTA3IHN1YnRyYWN0ICAgICAgICAgICM3N2ZmY2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzZmNmZiAtMUUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW41MTEgc3VidHJhY3QgIDAgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW41MTIgc3VidHJhY3QgICAgICM3YzAwMGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkcWNhbjUxMyBzdWJ0cmFjdCAgMCAgIzdjNDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjUxNCBzdWJ0cmFjdCAgICAgIzdjMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuNTE1IHN1YnRyYWN0ICAwICAjN2UwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjUxNiBzdWJ0cmFjdCAgICAgIzdlMDAzZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW41MTcgc3VidHJhY3QgIDAgICM3ZTUwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuNTE4IHN1YnRyYWN0ICAgICAjN2UwZTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCistLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkcWNhbjUyMCBzdWJ0cmFjdCAgMCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyMSBzdWJ0cmFjdCAgICAgIzc4NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkcWNhbjUyMiBzdWJ0cmFjdCAgMCAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyMyBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyNCBzdWJ0cmFjdCAgMCAgIzc4MDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyNSBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMGYwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyNiBzdWJ0cmFjdCAgMCAgIzc4MDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjUyNyBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tLS0tIFRvSW50ZWdyYWw6CitkcWNhbjYwMSB0b2ludGVncmFseCAgIzZlMDgwZmYzZmRmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNjAyIHRvaW50ZWdyYWx4ICAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYgIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW42MDMgdG9pbnRlZ3JhbHggICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjYwNCB0b2ludGVncmFseCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuNjE0IHRvaW50ZWdyYWx4ICAjN2MxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW42MTUgdG9pbnRlZ3JhbHggICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjYxNiB0b2ludGVncmFseCAgIzdlMDEwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjYxNyB0b2ludGVncmFseCAgI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZkZmYzZmNmZjNmY2ZmICAtPiAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCistLSB1bmNhbm9uaWNhbCAzOTk5LCAzOS45OSwgMy45OSwgMC4zOTksICAgICAgICAgICAgICAgICAgYW5kIG5lZ2F0aXZlcworZHFjYW42MTggdG9pbnRlZ3JhbHggICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwY2ZmCitkcWNhbjYxOSB0b2ludGVncmFseCAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAgIEluZXhhY3QgUm91bmRlZAorZHFjYW42MjAgdG9pbnRlZ3JhbHggICMyMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuNjIxIHRvaW50ZWdyYWx4ICAjMjIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitkcWNhbjYyMiB0b2ludGVncmFseCAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBjZmYKK2RxY2FuNjIzIHRvaW50ZWdyYWx4ICAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgSW5leGFjdCBSb3VuZGVkCitkcWNhbjYyNCB0b2ludGVncmFseCAgI2EyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZXhhY3QgUm91bmRlZAorZHFjYW42MjUgdG9pbnRlZ3JhbHggICNhMjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKKworCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDbGFzcy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNsYXNzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlMTliMwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDbGFzcy5kZWNUZXN0CkBAIC0wLDAgKzEsNzcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDbGFzcy5kZWNUZXN0IC0tIGRlY1F1YWQgQ2xhc3Mgb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBbTmV3IDIwMDYuMTEuMjddCisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxY2xhMDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2RxY2xhMDAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2RxY2xhMDAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2RxY2xhMDA0ICBjbGFzcyAgICAxRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorZHFjbGEwMDUgIGNsYXNzICAwLjFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitkcWNsYTAwNiAgY2xhc3MgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgICAgIC0+ICtTdWJub3JtYWwKK2RxY2xhMDA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLT4gK05vcm1hbAorZHFjbGEwMDggIGNsYXNzICAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDE3ICBjbGFzcyAgIDFFKzYxNDQgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTggIGNsYXNzICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAtPiArTm9ybWFsCitkcWNsYTAxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQorCitkcWNsYTAyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitkcWNsYTAyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitkcWNsYTAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitkcWNsYTAyNCAgY2xhc3MgICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2RxY2xhMDI1ICBjbGFzcyAgLTAuMUUtNjE0MyAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorZHFjbGEwMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgICAtPiAtU3Vibm9ybWFsCitkcWNsYTAyNyAgY2xhc3MgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDI4ICBjbGFzcyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAzNyAgY2xhc3MgIC0xRSs2MTQ0ICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDYxNCAgY2xhc3MgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDM5ICBjbGFzcyAgLUluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2RxY2xhMDQxICBjbGFzcyAgIE5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitkcWNsYTA0MiAgY2xhc3MgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorZHFjbGEwNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4KK2RxY2xhMDQ0ICBjbGFzcyAgIHNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorZHFjbGEwNDUgIGNsYXNzICAtc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitkcWNsYTA0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4KKworCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YjVlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZS5kZWNUZXN0CkBAIC0wLDAgKzEsNzUzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29tcGFyZS5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbiB0aGF0IGFsbG93cyBxdWlldCBOYU5zICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWNvbTAwMSBjb21wYXJlICAtMiAgLTIgIC0+IDAKK2RxY29tMDAyIGNvbXBhcmUgIC0yICAtMSAgLT4gLTEKK2RxY29tMDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTEKK2RxY29tMDA0IGNvbXBhcmUgIC0yICAgMSAgLT4gLTEKK2RxY29tMDA1IGNvbXBhcmUgIC0yICAgMiAgLT4gLTEKK2RxY29tMDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQorZHFjb20wMDcgY29tcGFyZSAgLTEgIC0xICAtPiAwCitkcWNvbTAwOCBjb21wYXJlICAtMSAgIDAgIC0+IC0xCitkcWNvbTAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xCitkcWNvbTAxMCBjb21wYXJlICAtMSAgIDIgIC0+IC0xCitkcWNvbTAxMSBjb21wYXJlICAgMCAgLTIgIC0+IDEKK2RxY29tMDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQorZHFjb20wMTMgY29tcGFyZSAgIDAgICAwICAtPiAwCitkcWNvbTAxNCBjb21wYXJlICAgMCAgIDEgIC0+IC0xCitkcWNvbTAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xCitkcWNvbTAxNiBjb21wYXJlICAgMSAgLTIgIC0+IDEKK2RxY29tMDE3IGNvbXBhcmUgICAxICAtMSAgLT4gMQorZHFjb20wMTggY29tcGFyZSAgIDEgICAwICAtPiAxCitkcWNvbTAxOSBjb21wYXJlICAgMSAgIDEgIC0+IDAKK2RxY29tMDIwIGNvbXBhcmUgICAxICAgMiAgLT4gLTEKK2RxY29tMDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQorZHFjb20wMjIgY29tcGFyZSAgIDIgIC0xICAtPiAxCitkcWNvbTAyMyBjb21wYXJlICAgMiAgIDAgIC0+IDEKK2RxY29tMDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQorZHFjb20wMjYgY29tcGFyZSAgIDIgICAyICAtPiAwCisKK2RxY29tMDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwCitkcWNvbTAzMiBjb21wYXJlICAtMjAgIC0xMCAgLT4gLTEKK2RxY29tMDMzIGNvbXBhcmUgIC0yMCAgIDAwICAtPiAtMQorZHFjb20wMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xCitkcWNvbTAzNSBjb21wYXJlICAtMjAgICAyMCAgLT4gLTEKK2RxY29tMDM2IGNvbXBhcmUgIC0xMCAgLTIwICAtPiAxCitkcWNvbTAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMAorZHFjb20wMzggY29tcGFyZSAgLTEwICAgMDAgIC0+IC0xCitkcWNvbTAzOSBjb21wYXJlICAtMTAgICAxMCAgLT4gLTEKK2RxY29tMDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQorZHFjb20wNDEgY29tcGFyZSAgIDAwICAtMjAgIC0+IDEKK2RxY29tMDQyIGNvbXBhcmUgICAwMCAgLTEwICAtPiAxCitkcWNvbTA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMAorZHFjb20wNDQgY29tcGFyZSAgIDAwICAgMTAgIC0+IC0xCitkcWNvbTA0NSBjb21wYXJlICAgMDAgICAyMCAgLT4gLTEKK2RxY29tMDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxCitkcWNvbTA0NyBjb21wYXJlICAgMTAgIC0xMCAgLT4gMQorZHFjb20wNDggY29tcGFyZSAgIDEwICAgMDAgIC0+IDEKK2RxY29tMDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwCitkcWNvbTA1MCBjb21wYXJlICAgMTAgICAyMCAgLT4gLTEKK2RxY29tMDUxIGNvbXBhcmUgICAyMCAgLTIwICAtPiAxCitkcWNvbTA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQorZHFjb20wNTMgY29tcGFyZSAgIDIwICAgMDAgIC0+IDEKK2RxY29tMDU1IGNvbXBhcmUgICAyMCAgIDEwICAtPiAxCitkcWNvbTA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMAorCitkcWNvbTA2MSBjb21wYXJlICAtMi4wICAtMi4wICAtPiAwCitkcWNvbTA2MiBjb21wYXJlICAtMi4wICAtMS4wICAtPiAtMQorZHFjb20wNjMgY29tcGFyZSAgLTIuMCAgIDAuMCAgLT4gLTEKK2RxY29tMDY0IGNvbXBhcmUgIC0yLjAgICAxLjAgIC0+IC0xCitkcWNvbTA2NSBjb21wYXJlICAtMi4wICAgMi4wICAtPiAtMQorZHFjb20wNjYgY29tcGFyZSAgLTEuMCAgLTIuMCAgLT4gMQorZHFjb20wNjcgY29tcGFyZSAgLTEuMCAgLTEuMCAgLT4gMAorZHFjb20wNjggY29tcGFyZSAgLTEuMCAgIDAuMCAgLT4gLTEKK2RxY29tMDY5IGNvbXBhcmUgIC0xLjAgICAxLjAgIC0+IC0xCitkcWNvbTA3MCBjb21wYXJlICAtMS4wICAgMi4wICAtPiAtMQorZHFjb20wNzEgY29tcGFyZSAgIDAuMCAgLTIuMCAgLT4gMQorZHFjb20wNzIgY29tcGFyZSAgIDAuMCAgLTEuMCAgLT4gMQorZHFjb20wNzMgY29tcGFyZSAgIDAuMCAgIDAuMCAgLT4gMAorZHFjb20wNzQgY29tcGFyZSAgIDAuMCAgIDEuMCAgLT4gLTEKK2RxY29tMDc1IGNvbXBhcmUgICAwLjAgICAyLjAgIC0+IC0xCitkcWNvbTA3NiBjb21wYXJlICAgMS4wICAtMi4wICAtPiAxCitkcWNvbTA3NyBjb21wYXJlICAgMS4wICAtMS4wICAtPiAxCitkcWNvbTA3OCBjb21wYXJlICAgMS4wICAgMC4wICAtPiAxCitkcWNvbTA3OSBjb21wYXJlICAgMS4wICAgMS4wICAtPiAwCitkcWNvbTA4MCBjb21wYXJlICAgMS4wICAgMi4wICAtPiAtMQorZHFjb20wODEgY29tcGFyZSAgIDIuMCAgLTIuMCAgLT4gMQorZHFjb20wODIgY29tcGFyZSAgIDIuMCAgLTEuMCAgLT4gMQorZHFjb20wODMgY29tcGFyZSAgIDIuMCAgIDAuMCAgLT4gMQorZHFjb20wODUgY29tcGFyZSAgIDIuMCAgIDEuMCAgLT4gMQorZHFjb20wODYgY29tcGFyZSAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RxY29tMDkwIGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAwCitkcWNvbTA5MSBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTEKK2RxY29tMDkyIGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCitkcWNvbTA5MyBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKK2RxY29tMTAwIGNvbXBhcmUgICA3LjAgICAgNy4wICAgIC0+IDAKK2RxY29tMTAxIGNvbXBhcmUgICA3LjAgICAgNyAgICAgIC0+IDAKK2RxY29tMTAyIGNvbXBhcmUgICA3ICAgICAgNy4wICAgIC0+IDAKK2RxY29tMTAzIGNvbXBhcmUgICA3RSswICAgNy4wICAgIC0+IDAKK2RxY29tMTA0IGNvbXBhcmUgICA3MEUtMSAgNy4wICAgIC0+IDAKK2RxY29tMTA1IGNvbXBhcmUgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RxY29tMTA2IGNvbXBhcmUgICA3MEUtMSAgNyAgICAgIC0+IDAKK2RxY29tMTA3IGNvbXBhcmUgICA3LjAgICAgN0UrMCAgIC0+IDAKK2RxY29tMTA4IGNvbXBhcmUgICA3LjAgICAgNzBFLTEgIC0+IDAKK2RxY29tMTA5IGNvbXBhcmUgICA3ICAgICAgMC43RSsxIC0+IDAKK2RxY29tMTEwIGNvbXBhcmUgICA3ICAgICAgNzBFLTEgIC0+IDAKKworZHFjb20xMjAgY29tcGFyZSAgIDguMCAgICA3LjAgICAgLT4gMQorZHFjb20xMjEgY29tcGFyZSAgIDguMCAgICA3ICAgICAgLT4gMQorZHFjb20xMjIgY29tcGFyZSAgIDggICAgICA3LjAgICAgLT4gMQorZHFjb20xMjMgY29tcGFyZSAgIDhFKzAgICA3LjAgICAgLT4gMQorZHFjb20xMjQgY29tcGFyZSAgIDgwRS0xICA3LjAgICAgLT4gMQorZHFjb20xMjUgY29tcGFyZSAgIDAuOEUrMSA3ICAgICAgLT4gMQorZHFjb20xMjYgY29tcGFyZSAgIDgwRS0xICA3ICAgICAgLT4gMQorZHFjb20xMjcgY29tcGFyZSAgIDguMCAgICA3RSswICAgLT4gMQorZHFjb20xMjggY29tcGFyZSAgIDguMCAgICA3MEUtMSAgLT4gMQorZHFjb20xMjkgY29tcGFyZSAgIDggICAgICAwLjdFKzEgIC0+IDEKK2RxY29tMTMwIGNvbXBhcmUgICA4ICAgICAgNzBFLTEgIC0+IDEKKworZHFjb20xNDAgY29tcGFyZSAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RxY29tMTQxIGNvbXBhcmUgICA4LjAgICAgOSAgICAgIC0+IC0xCitkcWNvbTE0MiBjb21wYXJlICAgOCAgICAgIDkuMCAgICAtPiAtMQorZHFjb20xNDMgY29tcGFyZSAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RxY29tMTQ0IGNvbXBhcmUgICA4MEUtMSAgOS4wICAgIC0+IC0xCitkcWNvbTE0NSBjb21wYXJlICAgMC44RSsxIDkgICAgICAtPiAtMQorZHFjb20xNDYgY29tcGFyZSAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RxY29tMTQ3IGNvbXBhcmUgICA4LjAgICAgOUUrMCAgIC0+IC0xCitkcWNvbTE0OCBjb21wYXJlICAgOC4wICAgIDkwRS0xICAtPiAtMQorZHFjb20xNDkgY29tcGFyZSAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RxY29tMTUwIGNvbXBhcmUgICA4ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2RxY29tMjAwIGNvbXBhcmUgIC03LjAgICAgNy4wICAgIC0+IC0xCitkcWNvbTIwMSBjb21wYXJlICAtNy4wICAgIDcgICAgICAtPiAtMQorZHFjb20yMDIgY29tcGFyZSAgLTcgICAgICA3LjAgICAgLT4gLTEKK2RxY29tMjAzIGNvbXBhcmUgIC03RSswICAgNy4wICAgIC0+IC0xCitkcWNvbTIwNCBjb21wYXJlICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZHFjb20yMDUgY29tcGFyZSAgLTAuN0UrMSA3ICAgICAgLT4gLTEKK2RxY29tMjA2IGNvbXBhcmUgIC03MEUtMSAgNyAgICAgIC0+IC0xCitkcWNvbTIwNyBjb21wYXJlICAtNy4wICAgIDdFKzAgICAtPiAtMQorZHFjb20yMDggY29tcGFyZSAgLTcuMCAgICA3MEUtMSAgLT4gLTEKK2RxY29tMjA5IGNvbXBhcmUgIC03ICAgICAgMC43RSsxIC0+IC0xCitkcWNvbTIxMCBjb21wYXJlICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkcWNvbTIyMCBjb21wYXJlICAtOC4wICAgIDcuMCAgICAtPiAtMQorZHFjb20yMjEgY29tcGFyZSAgLTguMCAgICA3ICAgICAgLT4gLTEKK2RxY29tMjIyIGNvbXBhcmUgIC04ICAgICAgNy4wICAgIC0+IC0xCitkcWNvbTIyMyBjb21wYXJlICAtOEUrMCAgIDcuMCAgICAtPiAtMQorZHFjb20yMjQgY29tcGFyZSAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2RxY29tMjI1IGNvbXBhcmUgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkcWNvbTIyNiBjb21wYXJlICAtODBFLTEgIDcgICAgICAtPiAtMQorZHFjb20yMjcgY29tcGFyZSAgLTguMCAgICA3RSswICAgLT4gLTEKK2RxY29tMjI4IGNvbXBhcmUgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkcWNvbTIyOSBjb21wYXJlICAtOCAgICAgIDAuN0UrMSAtPiAtMQorZHFjb20yMzAgY29tcGFyZSAgLTggICAgICA3MEUtMSAgLT4gLTEKKworZHFjb20yNDAgY29tcGFyZSAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RxY29tMjQxIGNvbXBhcmUgIC04LjAgICAgOSAgICAgIC0+IC0xCitkcWNvbTI0MiBjb21wYXJlICAtOCAgICAgIDkuMCAgICAtPiAtMQorZHFjb20yNDMgY29tcGFyZSAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RxY29tMjQ0IGNvbXBhcmUgIC04MEUtMSAgOS4wICAgIC0+IC0xCitkcWNvbTI0NSBjb21wYXJlICAtMC44RSsxIDkgICAgICAtPiAtMQorZHFjb20yNDYgY29tcGFyZSAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RxY29tMjQ3IGNvbXBhcmUgIC04LjAgICAgOUUrMCAgIC0+IC0xCitkcWNvbTI0OCBjb21wYXJlICAtOC4wICAgIDkwRS0xICAtPiAtMQorZHFjb20yNDkgY29tcGFyZSAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RxY29tMjUwIGNvbXBhcmUgIC04ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2RxY29tMzAwIGNvbXBhcmUgICA3LjAgICAgLTcuMCAgICAtPiAxCitkcWNvbTMwMSBjb21wYXJlICAgNy4wICAgIC03ICAgICAgLT4gMQorZHFjb20zMDIgY29tcGFyZSAgIDcgICAgICAtNy4wICAgIC0+IDEKK2RxY29tMzAzIGNvbXBhcmUgICA3RSswICAgLTcuMCAgICAtPiAxCitkcWNvbTMwNCBjb21wYXJlICAgNzBFLTEgIC03LjAgICAgLT4gMQorZHFjb20zMDUgY29tcGFyZSAgIC43RSsxICAtNyAgICAgIC0+IDEKK2RxY29tMzA2IGNvbXBhcmUgICA3MEUtMSAgLTcgICAgICAtPiAxCitkcWNvbTMwNyBjb21wYXJlICAgNy4wICAgIC03RSswICAgLT4gMQorZHFjb20zMDggY29tcGFyZSAgIDcuMCAgICAtNzBFLTEgIC0+IDEKK2RxY29tMzA5IGNvbXBhcmUgICA3ICAgICAgLS43RSsxICAtPiAxCitkcWNvbTMxMCBjb21wYXJlICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkcWNvbTMyMCBjb21wYXJlICAgOC4wICAgIC03LjAgICAgLT4gMQorZHFjb20zMjEgY29tcGFyZSAgIDguMCAgICAtNyAgICAgIC0+IDEKK2RxY29tMzIyIGNvbXBhcmUgICA4ICAgICAgLTcuMCAgICAtPiAxCitkcWNvbTMyMyBjb21wYXJlICAgOEUrMCAgIC03LjAgICAgLT4gMQorZHFjb20zMjQgY29tcGFyZSAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2RxY29tMzI1IGNvbXBhcmUgICAuOEUrMSAgLTcgICAgICAtPiAxCitkcWNvbTMyNiBjb21wYXJlICAgODBFLTEgIC03ICAgICAgLT4gMQorZHFjb20zMjcgY29tcGFyZSAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2RxY29tMzI4IGNvbXBhcmUgICA4LjAgICAgLTcwRS0xICAtPiAxCitkcWNvbTMyOSBjb21wYXJlICAgOCAgICAgIC0uN0UrMSAgLT4gMQorZHFjb20zMzAgY29tcGFyZSAgIDggICAgICAtNzBFLTEgIC0+IDEKKworZHFjb20zNDAgY29tcGFyZSAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RxY29tMzQxIGNvbXBhcmUgICA4LjAgICAgLTkgICAgICAtPiAxCitkcWNvbTM0MiBjb21wYXJlICAgOCAgICAgIC05LjAgICAgLT4gMQorZHFjb20zNDMgY29tcGFyZSAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RxY29tMzQ0IGNvbXBhcmUgICA4MEUtMSAgLTkuMCAgICAtPiAxCitkcWNvbTM0NSBjb21wYXJlICAgLjhFKzEgIC05ICAgICAgLT4gMQorZHFjb20zNDYgY29tcGFyZSAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RxY29tMzQ3IGNvbXBhcmUgICA4LjAgICAgLTlFKzAgICAtPiAxCitkcWNvbTM0OCBjb21wYXJlICAgOC4wICAgIC05MEUtMSAgLT4gMQorZHFjb20zNDkgY29tcGFyZSAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RxY29tMzUwIGNvbXBhcmUgICA4ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2RxY29tNDAwIGNvbXBhcmUgICAtNy4wICAgIC03LjAgICAgLT4gMAorZHFjb200MDEgY29tcGFyZSAgIC03LjAgICAgLTcgICAgICAtPiAwCitkcWNvbTQwMiBjb21wYXJlICAgLTcgICAgICAtNy4wICAgIC0+IDAKK2RxY29tNDAzIGNvbXBhcmUgICAtN0UrMCAgIC03LjAgICAgLT4gMAorZHFjb200MDQgY29tcGFyZSAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitkcWNvbTQwNSBjb21wYXJlICAgLS43RSsxICAtNyAgICAgIC0+IDAKK2RxY29tNDA2IGNvbXBhcmUgICAtNzBFLTEgIC03ICAgICAgLT4gMAorZHFjb200MDcgY29tcGFyZSAgIC03LjAgICAgLTdFKzAgICAtPiAwCitkcWNvbTQwOCBjb21wYXJlICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKK2RxY29tNDA5IGNvbXBhcmUgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZHFjb200MTAgY29tcGFyZSAgIC03ICAgICAgLTcwRS0xICAtPiAwCisKK2RxY29tNDIwIGNvbXBhcmUgICAtOC4wICAgIC03LjAgICAgLT4gLTEKK2RxY29tNDIxIGNvbXBhcmUgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2RxY29tNDIyIGNvbXBhcmUgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RxY29tNDIzIGNvbXBhcmUgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKK2RxY29tNDI0IGNvbXBhcmUgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2RxY29tNDI1IGNvbXBhcmUgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RxY29tNDI2IGNvbXBhcmUgICAtODBFLTEgIC03ICAgICAgLT4gLTEKK2RxY29tNDI3IGNvbXBhcmUgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2RxY29tNDI4IGNvbXBhcmUgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RxY29tNDI5IGNvbXBhcmUgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKK2RxY29tNDMwIGNvbXBhcmUgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworZHFjb200NDAgY29tcGFyZSAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkcWNvbTQ0MSBjb21wYXJlICAgLTguMCAgICAtOSAgICAgIC0+IDEKK2RxY29tNDQyIGNvbXBhcmUgICAtOCAgICAgIC05LjAgICAgLT4gMQorZHFjb200NDMgY29tcGFyZSAgIC04RSswICAgLTkuMCAgICAtPiAxCitkcWNvbTQ0NCBjb21wYXJlICAgLTgwRS0xICAtOS4wICAgIC0+IDEKK2RxY29tNDQ1IGNvbXBhcmUgICAtLjhFKzEgIC05ICAgICAgLT4gMQorZHFjb200NDYgY29tcGFyZSAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkcWNvbTQ0NyBjb21wYXJlICAgLTguMCAgICAtOUUrMCAgIC0+IDEKK2RxY29tNDQ4IGNvbXBhcmUgICAtOC4wICAgIC05MEUtMSAgLT4gMQorZHFjb200NDkgY29tcGFyZSAgIC04ICAgICAgLS45RSsxICAtPiAxCitkcWNvbTQ1MCBjb21wYXJlICAgLTggICAgICAtOTBFLTEgIC0+IDEKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkcWNvbTQ1MSBjb21wYXJlICAgICAgMS4wICAgICAgIDAuMSAgLT4gMQorZHFjb200NTIgY29tcGFyZSAgICAgIDAuMSAgICAgICAxLjAgIC0+IC0xCitkcWNvbTQ1MyBjb21wYXJlICAgICAxMC4wICAgICAgIDAuMSAgLT4gMQorZHFjb200NTQgY29tcGFyZSAgICAgIDAuMSAgICAgIDEwLjAgIC0+IC0xCitkcWNvbTQ1NSBjb21wYXJlICAgICAgMTAwICAgICAgIDEuMCAgLT4gMQorZHFjb200NTYgY29tcGFyZSAgICAgIDEuMCAgICAgICAxMDAgIC0+IC0xCitkcWNvbTQ1NyBjb21wYXJlICAgICAxMDAwICAgICAgMTAuMCAgLT4gMQorZHFjb200NTggY29tcGFyZSAgICAgMTAuMCAgICAgIDEwMDAgIC0+IC0xCitkcWNvbTQ1OSBjb21wYXJlICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMQorZHFjb200NjAgY29tcGFyZSAgICAxMDAuMCAgICAgMTAwMDAgIC0+IC0xCitkcWNvbTQ2MSBjb21wYXJlICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMQorZHFjb200NjIgY29tcGFyZSAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IC0xCitkcWNvbTQ2MyBjb21wYXJlICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMQorZHFjb200NjQgY29tcGFyZSAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IC0xCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZHFjb200NzMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200NzQgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNvbTQ3NSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200NzYgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjb200NzcgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNvbTQ3OCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjb200NzkgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200ODAgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNvbTQ4MSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200ODIgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjb200ODMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNvbTQ4NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRSs4OSAtPiAwCitkcWNvbTQ4OCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFLTg5IC0+IDAKK2RxY29tNDg5IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRSs4OSAtPiAwCitkcWNvbTQ5MCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRS04OSAtPiAwCitkcWNvbTQ5MSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFKzg5IC0+IDAKK2RxY29tNDkyIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRS04OSAtPiAwCitkcWNvbTQ5MyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRSs4OSAtPiAwCitkcWNvbTQ5NCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFLTg5IC0+IDAKK2RxY29tNDk1IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRSs4OSAtPiAwCitkcWNvbTQ5NiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRS04OSAtPiAwCitkcWNvbTQ5NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZHFjb201MDAgY29tcGFyZSAgICAxICAgICAxRS0xNSAgICAtPiAxCitkcWNvbTUwMSBjb21wYXJlICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RxY29tNTAyIGNvbXBhcmUgICAgMSAgICAgMUUtMTMgICAgLT4gMQorZHFjb201MDMgY29tcGFyZSAgICAxICAgICAxRS0xMiAgICAtPiAxCitkcWNvbTUwNCBjb21wYXJlICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RxY29tNTA1IGNvbXBhcmUgICAgMSAgICAgMUUtMTAgICAgLT4gMQorZHFjb201MDYgY29tcGFyZSAgICAxICAgICAxRS05ICAgICAtPiAxCitkcWNvbTUwNyBjb21wYXJlICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RxY29tNTA4IGNvbXBhcmUgICAgMSAgICAgMUUtNyAgICAgLT4gMQorZHFjb201MDkgY29tcGFyZSAgICAxICAgICAxRS02ICAgICAtPiAxCitkcWNvbTUxMCBjb21wYXJlICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RxY29tNTExIGNvbXBhcmUgICAgMSAgICAgMUUtNCAgICAgLT4gMQorZHFjb201MTIgY29tcGFyZSAgICAxICAgICAxRS0zICAgICAtPiAxCitkcWNvbTUxMyBjb21wYXJlICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RxY29tNTE0IGNvbXBhcmUgICAgMSAgICAgMUUtMSAgICAgLT4gMQorZHFjb201MTUgY29tcGFyZSAgICAxICAgICAxRS0wICAgICAtPiAwCitkcWNvbTUxNiBjb21wYXJlICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkcWNvbTUxNyBjb21wYXJlICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitkcWNvbTUxOCBjb21wYXJlICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitkcWNvbTUxOSBjb21wYXJlICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkcWNvbTUyMSBjb21wYXJlICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitkcWNvbTUyMiBjb21wYXJlICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitkcWNvbTUyMyBjb21wYXJlICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkcWNvbTUyNCBjb21wYXJlICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitkcWNvbTUyNSBjb21wYXJlICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitkcWNvbTUyNiBjb21wYXJlICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkcWNvbTUyNyBjb21wYXJlICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitkcWNvbTUyOCBjb21wYXJlICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitkcWNvbTUyOSBjb21wYXJlICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkcWNvbTUzMCBjb21wYXJlICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitkcWNvbTUzMSBjb21wYXJlICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCistLSBMUiBzd2FwCitkcWNvbTU0MCBjb21wYXJlICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitkcWNvbTU0MSBjb21wYXJlICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitkcWNvbTU0MiBjb21wYXJlICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkcWNvbTU0MyBjb21wYXJlICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitkcWNvbTU0NCBjb21wYXJlICAgIDFFLTExICAxICAgICAgIC0+IC0xCitkcWNvbTU0NSBjb21wYXJlICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkcWNvbTU0NiBjb21wYXJlICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitkcWNvbTU0NyBjb21wYXJlICAgIDFFLTggICAxICAgICAgIC0+IC0xCitkcWNvbTU0OCBjb21wYXJlICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkcWNvbTU0OSBjb21wYXJlICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitkcWNvbTU1MCBjb21wYXJlICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitkcWNvbTU1MSBjb21wYXJlICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkcWNvbTU1MiBjb21wYXJlICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitkcWNvbTU1MyBjb21wYXJlICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitkcWNvbTU1NCBjb21wYXJlICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkcWNvbTU1NSBjb21wYXJlICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitkcWNvbTU1NiBjb21wYXJlICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitkcWNvbTU1NyBjb21wYXJlICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkcWNvbTU1OCBjb21wYXJlICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitkcWNvbTU1OSBjb21wYXJlICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitkcWNvbTU2MSBjb21wYXJlICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkcWNvbTU2MiBjb21wYXJlICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitkcWNvbTU2MyBjb21wYXJlICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitkcWNvbTU2NCBjb21wYXJlICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkcWNvbTU2NSBjb21wYXJlICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitkcWNvbTU2NiBjb21wYXJlICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitkcWNvbTU2NyBjb21wYXJlICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkcWNvbTU2OCBjb21wYXJlICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitkcWNvbTU2OSBjb21wYXJlICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitkcWNvbTU3MCBjb21wYXJlICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkcWNvbTU3MSBjb21wYXJlICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RxY29tNTgwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitkcWNvbTU4MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorZHFjb201ODIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RxY29tNTgzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitkcWNvbTU4NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorZHFjb201ODUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RxY29tNTg2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitkcWNvbTU4NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorZHFjb201ODggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RxY29tNTg5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorZHFjb201OTAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitkcWNvbTU5MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RxY29tNTkyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorZHFjb201OTMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitkcWNvbTU5NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RxY29tNTk1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorZHFjb201OTYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitkcWNvbTU5NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY29tNTk4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorZHFjb201OTkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkcWNvbTYwMCBjb21wYXJlICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwMSBjb21wYXJlICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwMiBjb21wYXJlICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwMyBjb21wYXJlICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwNCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwNSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwNiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwNyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwOCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwOSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYxMCBjb21wYXJlICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitkcWNvbTYxMSBjb21wYXJlICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitkcWNvbTYxMiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkcWNvbTYxMyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitkcWNvbTYxNCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitkcWNvbTYxNSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkcWNvbTYxNiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitkcWNvbTYxNyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitkcWNvbTYxOCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkcWNvbTYxOSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitkcWNvbTYyMCBjb21wYXJlICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyMSBjb21wYXJlICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyMiBjb21wYXJlICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyMyBjb21wYXJlICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyNCBjb21wYXJlICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyNSBjb21wYXJlICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyNiBjb21wYXJlICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyNyBjb21wYXJlICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyOCBjb21wYXJlICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyOSBjb21wYXJlICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYzMCBjb21wYXJlICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkcWNvbTYzMSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitkcWNvbTYzMiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitkcWNvbTYzMyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkcWNvbTYzNCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitkcWNvbTYzNSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitkcWNvbTYzNiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkcWNvbTYzNyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitkcWNvbTYzOCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitkcWNvbTYzOSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcWNvbTY0MCBjb21wYXJlICAgMCAgICAgMCAgIC0+IDAKK2RxY29tNjQxIGNvbXBhcmUgICAwICAgIC0wICAgLT4gMAorZHFjb202NDIgY29tcGFyZSAgIDAgICAgLTAuMCAtPiAwCitkcWNvbTY0MyBjb21wYXJlICAgMCAgICAgMC4wIC0+IDAKK2RxY29tNjQ0IGNvbXBhcmUgIC0wICAgICAwICAgLT4gMAorZHFjb202NDUgY29tcGFyZSAgLTAgICAgLTAgICAtPiAwCitkcWNvbTY0NiBjb21wYXJlICAtMCAgICAtMC4wIC0+IDAKK2RxY29tNjQ3IGNvbXBhcmUgIC0wICAgICAwLjAgLT4gMAorZHFjb202NDggY29tcGFyZSAgIDAuMCAgIDAgICAtPiAwCitkcWNvbTY0OSBjb21wYXJlICAgMC4wICAtMCAgIC0+IDAKK2RxY29tNjUwIGNvbXBhcmUgICAwLjAgIC0wLjAgLT4gMAorZHFjb202NTEgY29tcGFyZSAgIDAuMCAgIDAuMCAtPiAwCitkcWNvbTY1MiBjb21wYXJlICAtMC4wICAgMCAgIC0+IDAKK2RxY29tNjUzIGNvbXBhcmUgIC0wLjAgIC0wICAgLT4gMAorZHFjb202NTQgY29tcGFyZSAgLTAuMCAgLTAuMCAtPiAwCitkcWNvbTY1NSBjb21wYXJlICAtMC4wICAgMC4wIC0+IDAKKworZHFjb202NTYgY29tcGFyZSAgLTBFMSAgIDAuMCAtPiAwCitkcWNvbTY1NyBjb21wYXJlICAtMEUyICAgMC4wIC0+IDAKK2RxY29tNjU4IGNvbXBhcmUgICAwRTEgICAwLjAgLT4gMAorZHFjb202NTkgY29tcGFyZSAgIDBFMiAgIDAuMCAtPiAwCitkcWNvbTY2MCBjb21wYXJlICAtMEUxICAgMCAgIC0+IDAKK2RxY29tNjYxIGNvbXBhcmUgIC0wRTIgICAwICAgLT4gMAorZHFjb202NjIgY29tcGFyZSAgIDBFMSAgIDAgICAtPiAwCitkcWNvbTY2MyBjb21wYXJlICAgMEUyICAgMCAgIC0+IDAKK2RxY29tNjY0IGNvbXBhcmUgIC0wRTEgIC0wRTEgLT4gMAorZHFjb202NjUgY29tcGFyZSAgLTBFMiAgLTBFMSAtPiAwCitkcWNvbTY2NiBjb21wYXJlICAgMEUxICAtMEUxIC0+IDAKK2RxY29tNjY3IGNvbXBhcmUgICAwRTIgIC0wRTEgLT4gMAorZHFjb202NjggY29tcGFyZSAgLTBFMSAgLTBFMiAtPiAwCitkcWNvbTY2OSBjb21wYXJlICAtMEUyICAtMEUyIC0+IDAKK2RxY29tNjcwIGNvbXBhcmUgICAwRTEgIC0wRTIgLT4gMAorZHFjb202NzEgY29tcGFyZSAgIDBFMiAgLTBFMiAtPiAwCitkcWNvbTY3MiBjb21wYXJlICAtMEUxICAgMEUxIC0+IDAKK2RxY29tNjczIGNvbXBhcmUgIC0wRTIgICAwRTEgLT4gMAorZHFjb202NzQgY29tcGFyZSAgIDBFMSAgIDBFMSAtPiAwCitkcWNvbTY3NSBjb21wYXJlICAgMEUyICAgMEUxIC0+IDAKK2RxY29tNjc2IGNvbXBhcmUgIC0wRTEgICAwRTIgLT4gMAorZHFjb202NzcgY29tcGFyZSAgLTBFMiAgIDBFMiAtPiAwCitkcWNvbTY3OCBjb21wYXJlICAgMEUxICAgMEUyIC0+IDAKK2RxY29tNjc5IGNvbXBhcmUgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkcWNvbTY4MCBjb21wYXJlICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2RxY29tNjgxIGNvbXBhcmUgICAxMiAgICAxMi4wICAgICAgICAgLT4gMAorZHFjb202ODIgY29tcGFyZSAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwCitkcWNvbTY4MyBjb21wYXJlICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDAKK2RxY29tNjg0IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMAorZHFjb202ODUgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwCitkcWNvbTY4NiBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDAKK2RxY29tNjg3IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMAorZHFjb202ODggY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwCitkcWNvbTY4OSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDAKK2RxY29tNjkwIGNvbXBhcmUgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorZHFjb202OTEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwCitkcWNvbTY5MiBjb21wYXJlICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDAKK2RxY29tNjkzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMAorZHFjb202OTQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwCitkcWNvbTY5NSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDAKK2RxY29tNjk2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMAorZHFjb202OTcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwCitkcWNvbTY5OCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDAKK2RxY29tNjk5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMAorCistLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQKK2RxY29tNzAwIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTUgLT4gMQorZHFjb203MDEgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCitkcWNvbTcwMiBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU3IC0+IC0xCitkcWNvbTcwMyBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAwMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDEKK2RxY29tNzA0IGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAorZHFjb203MDUgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMjIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQorZHFjb203MDYgY29tcGFyZSAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTAzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAxCitkcWNvbTcwNyBjb21wYXJlICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKK2RxY29tNzA4IGNvbXBhcmUgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTEKKworLS0gbWlzY2VsbGFuZW91cworZHFjb203MjEgY29tcGFyZSAxMjM0NTY3ODAwMCAxIC0+IDEKK2RxY29tNzIyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAtPiAtMQorZHFjb203MjMgY29tcGFyZSAxMjM0NTY3ODAwICAxIC0+IDEKK2RxY29tNzI0IGNvbXBhcmUgMSAxMjM0NTY3ODAwICAtPiAtMQorZHFjb203MjUgY29tcGFyZSAxMjM0NTY3ODkwICAxIC0+IDEKK2RxY29tNzI2IGNvbXBhcmUgMSAxMjM0NTY3ODkwICAtPiAtMQorZHFjb203MjcgY29tcGFyZSAxMjM0NTY3ODkxICAxIC0+IDEKK2RxY29tNzI4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAtPiAtMQorZHFjb203MjkgY29tcGFyZSAxMjM0NTY3ODkwMSAxIC0+IDEKK2RxY29tNzMwIGNvbXBhcmUgMSAxMjM0NTY3ODkwMSAtPiAtMQorZHFjb203MzEgY29tcGFyZSAxMjM0NTY3ODk2ICAxIC0+IDEKK2RxY29tNzMyIGNvbXBhcmUgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbgorZHFjb203NDAgY29tcGFyZSAgMSAgMC45OTk5OTk5ICAtPiAxCitkcWNvbTc0MSBjb21wYXJlICAxICAwLjk5OTk5OSAgIC0+IDEKK2RxY29tNzQyIGNvbXBhcmUgIDEgIDAuOTk5OTkgICAgLT4gMQorZHFjb203NDMgY29tcGFyZSAgMSAgMS4wMDAwICAgICAtPiAwCitkcWNvbTc0NCBjb21wYXJlICAxICAxLjAwMDAxICAgIC0+IC0xCitkcWNvbTc0NSBjb21wYXJlICAxICAxLjAwMDAwMSAgIC0+IC0xCitkcWNvbTc0NiBjb21wYXJlICAxICAxLjAwMDAwMDEgIC0+IC0xCitkcWNvbTc1MCBjb21wYXJlICAwLjk5OTk5OTkgIDEgIC0+IC0xCitkcWNvbTc1MSBjb21wYXJlICAwLjk5OTk5OSAgIDEgIC0+IC0xCitkcWNvbTc1MiBjb21wYXJlICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkcWNvbTc1MyBjb21wYXJlICAxLjAwMDAgICAgIDEgIC0+IDAKK2RxY29tNzU0IGNvbXBhcmUgIDEuMDAwMDEgICAgMSAgLT4gMQorZHFjb203NTUgY29tcGFyZSAgMS4wMDAwMDEgICAxICAtPiAxCitkcWNvbTc1NiBjb21wYXJlICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RxY29tNzgwIGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCitkcWNvbTc4MSBjb21wYXJlICBJbmYgIC0xMDAwICAtPiAgMQorZHFjb203ODIgY29tcGFyZSAgSW5mICAtMSAgICAgLT4gIDEKK2RxY29tNzgzIGNvbXBhcmUgIEluZiAgLTAgICAgIC0+ICAxCitkcWNvbTc4NCBjb21wYXJlICBJbmYgICAwICAgICAtPiAgMQorZHFjb203ODUgY29tcGFyZSAgSW5mICAgMSAgICAgLT4gIDEKK2RxY29tNzg2IGNvbXBhcmUgIEluZiAgIDEwMDAgIC0+ICAxCitkcWNvbTc4NyBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMAorZHFjb203ODggY29tcGFyZSAtMTAwMCAgSW5mICAgLT4gLTEKK2RxY29tNzg5IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCitkcWNvbTc5MCBjb21wYXJlIC0xICAgICBJbmYgICAtPiAtMQorZHFjb203OTEgY29tcGFyZSAtMCAgICAgSW5mICAgLT4gLTEKK2RxY29tNzkyIGNvbXBhcmUgIDAgICAgIEluZiAgIC0+IC0xCitkcWNvbTc5MyBjb21wYXJlICAxICAgICBJbmYgICAtPiAtMQorZHFjb203OTQgY29tcGFyZSAgMTAwMCAgSW5mICAgLT4gLTEKK2RxY29tNzk1IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwCisKK2RxY29tODAwIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwCitkcWNvbTgwMSBjb21wYXJlIC1JbmYgIC0xMDAwICAtPiAtMQorZHFjb204MDIgY29tcGFyZSAtSW5mICAtMSAgICAgLT4gLTEKK2RxY29tODAzIGNvbXBhcmUgLUluZiAgLTAgICAgIC0+IC0xCitkcWNvbTgwNCBjb21wYXJlIC1JbmYgICAwICAgICAtPiAtMQorZHFjb204MDUgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gLTEKK2RxY29tODA2IGNvbXBhcmUgLUluZiAgIDEwMDAgIC0+IC0xCitkcWNvbTgwNyBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQorZHFjb204MDggY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDAKK2RxY29tODA5IGNvbXBhcmUgLTEwMDAgLUluZiAgIC0+ICAxCitkcWNvbTgxMCBjb21wYXJlIC0xICAgIC1JbmYgICAtPiAgMQorZHFjb204MTEgY29tcGFyZSAtMCAgICAtSW5mICAgLT4gIDEKK2RxY29tODEyIGNvbXBhcmUgIDAgICAgLUluZiAgIC0+ICAxCitkcWNvbTgxMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgMQorZHFjb204MTQgY29tcGFyZSAgMTAwMCAtSW5mICAgLT4gIDEKK2RxY29tODE1IGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCisKK2RxY29tODIxIGNvbXBhcmUgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxY29tODIyIGNvbXBhcmUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxY29tODIzIGNvbXBhcmUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxY29tODI0IGNvbXBhcmUgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxY29tODI1IGNvbXBhcmUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxY29tODI2IGNvbXBhcmUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxY29tODI3IGNvbXBhcmUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxY29tODI4IGNvbXBhcmUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxY29tODI5IGNvbXBhcmUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxY29tODMwIGNvbXBhcmUgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxY29tODMxIGNvbXBhcmUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxY29tODMyIGNvbXBhcmUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxY29tODMzIGNvbXBhcmUgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM0IGNvbXBhcmUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM1IGNvbXBhcmUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM2IGNvbXBhcmUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM3IGNvbXBhcmUgIEluZiAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM4IGNvbXBhcmUgLU5hTiAtTmFOICAgIC0+IC1OYU4KK2RxY29tODM5IGNvbXBhcmUgK05hTiAtTmFOICAgIC0+ICBOYU4KK2RxY29tODQwIGNvbXBhcmUgLU5hTiArTmFOICAgIC0+IC1OYU4KKworZHFjb204NDEgY29tcGFyZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQyIGNvbXBhcmUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0MyBjb21wYXJlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDQgY29tcGFyZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQ1IGNvbXBhcmUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0NiBjb21wYXJlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDcgY29tcGFyZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQ4IGNvbXBhcmUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0OSBjb21wYXJlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTAgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODUxIGNvbXBhcmUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1MiBjb21wYXJlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTMgY29tcGFyZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODU0IGNvbXBhcmUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1NSBjb21wYXJlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTYgY29tcGFyZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODU3IGNvbXBhcmUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1OCBjb21wYXJlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTkgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFjb204NjAgY29tcGFyZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RxY29tODYxIGNvbXBhcmUgIE5hTjggIDk5OSAgIC0+ICBOYU44CitkcWNvbTg2MiBjb21wYXJlICBOYU43NyBJbmYgICAtPiAgTmFONzcKK2RxY29tODYzIGNvbXBhcmUgLU5hTjY3IE5hTjUgIC0+IC1OYU42NworZHFjb204NjQgY29tcGFyZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RxY29tODY1IGNvbXBhcmUgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMworZHFjb204NjYgY29tcGFyZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKK2RxY29tODY3IGNvbXBhcmUgLU5hTjQxIC1OYU40MiAtPiAtTmFONDEKK2RxY29tODY4IGNvbXBhcmUgK05hTjQxIC1OYU40MiAtPiAgTmFONDEKK2RxY29tODY5IGNvbXBhcmUgLU5hTjQxICtOYU40MiAtPiAtTmFONDEKK2RxY29tODcwIGNvbXBhcmUgK05hTjQxICtOYU40MiAtPiAgTmFONDEKKworZHFjb204NzEgY29tcGFyZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3MiBjb21wYXJlICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODczIGNvbXBhcmUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzQgY29tcGFyZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3NSBjb21wYXJlICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODc2IGNvbXBhcmUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzcgY29tcGFyZSAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3OCBjb21wYXJlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODc5IGNvbXBhcmUgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSB3aWRlIHJhbmdlCitkcWNvbTg4MCBjb21wYXJlICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTEKK2RxY29tODgxIGNvbXBhcmUgOUUrNjE0NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZHFjb204ODIgY29tcGFyZSArMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+ICAxCitkcWNvbTg4MyBjb21wYXJlIDlFLTYxNDMgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTEKK2RxY29tODg1IGNvbXBhcmUgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQorZHFjb204ODYgY29tcGFyZSA5RSs2MTQ0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkcWNvbTg4NyBjb21wYXJlIC0wLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gLTEKK2RxY29tODg4IGNvbXBhcmUgOUUtNjE0MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQorCistLSBzaWducworZHFjb205MDEgY29tcGFyZSAgMWUrNzcgIDFlKzExIC0+ICAxCitkcWNvbTkwMiBjb21wYXJlICAxZSs3NyAtMWUrMTEgLT4gIDEKK2RxY29tOTAzIGNvbXBhcmUgLTFlKzc3ICAxZSsxMSAtPiAtMQorZHFjb205MDQgY29tcGFyZSAtMWUrNzcgLTFlKzExIC0+IC0xCitkcWNvbTkwNSBjb21wYXJlICAxZS03NyAgMWUtMTEgLT4gLTEKK2RxY29tOTA2IGNvbXBhcmUgIDFlLTc3IC0xZS0xMSAtPiAgMQorZHFjb205MDcgY29tcGFyZSAtMWUtNzcgIDFlLTExIC0+IC0xCitkcWNvbTkwOCBjb21wYXJlIC0xZS03NyAtMWUtMTEgLT4gIDEKKworLS0gZnVsbCBhbGlnbm1lbnQgcmFuZ2UsIGJvdGggd2F5cworZHFjb21wMTAwMSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDAKK2RxY29tcDEwMDIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAwCitkcWNvbXAxMDAzIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMAorZHFjb21wMTAwNCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIC0+IDAKK2RxY29tcDEwMDUgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAtPiAwCitkcWNvbXAxMDA2IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMAorZHFjb21wMTAwNyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIC0+IDAKK2RxY29tcDEwMDggY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAtPiAwCitkcWNvbXAxMDA5IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gMAorZHFjb21wMTAxMCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDEyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDE1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTcgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDE4IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxOSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAgIC0+IDAKK2RxY29tcDEwMjAgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAgICAtPiAwCitkcWNvbXAxMDIxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAgICAgLT4gMAorZHFjb21wMTAyMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAgICAgIC0+IDAKK2RxY29tcDEwMjMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAgICAgICAtPiAwCitkcWNvbXAxMDI0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAgICAgICAgLT4gMAorZHFjb21wMTAyNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAgICAgICAgIC0+IDAKK2RxY29tcDEwMjYgY29tcGFyZSAxIDEuMDAwMDAwMDAgICAgICAgICAtPiAwCitkcWNvbXAxMDI3IGNvbXBhcmUgMSAxLjAwMDAwMDAgICAgICAgICAgLT4gMAorZHFjb21wMTAyOCBjb21wYXJlIDEgMS4wMDAwMDAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMjkgY29tcGFyZSAxIDEuMDAwMDAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDMwIGNvbXBhcmUgMSAxLjAwMDAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAzMSBjb21wYXJlIDEgMS4wMDAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMzIgY29tcGFyZSAxIDEuMDAgICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDMzIGNvbXBhcmUgMSAxLjAgICAgICAgICAgICAgICAgLT4gMAorCitkcWNvbXAxMDQxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDEgLT4gMAorZHFjb21wMTA0MiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAxIC0+IDAKK2RxY29tcDEwNDMgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMSAtPiAwCitkcWNvbXAxMDQ0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDEgLT4gMAorZHFjb21wMTA0NSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAxIC0+IDAKK2RxY29tcDEwNDYgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgMSAtPiAwCitkcWNvbXAxMDQ3IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIDEgLT4gMAorZHFjb21wMTA0OCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNDkgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDUwIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDUzIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1NCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTUgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDU2IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1NyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTggY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDU5IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDEgLT4gMAorZHFjb21wMTA2MCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAgICAxIC0+IDAKK2RxY29tcDEwNjEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAgICAgMSAtPiAwCitkcWNvbXAxMDYyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAgICAgIDEgLT4gMAorZHFjb21wMTA2MyBjb21wYXJlIDEuMDAwMDAwMDAwMDAgICAgICAxIC0+IDAKK2RxY29tcDEwNjQgY29tcGFyZSAxLjAwMDAwMDAwMDAgICAgICAgMSAtPiAwCitkcWNvbXAxMDY1IGNvbXBhcmUgMS4wMDAwMDAwMDAgICAgICAgIDEgLT4gMAorZHFjb21wMTA2NiBjb21wYXJlIDEuMDAwMDAwMDAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNjcgY29tcGFyZSAxLjAwMDAwMDAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDY4IGNvbXBhcmUgMS4wMDAwMDAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA2OSBjb21wYXJlIDEuMDAwMDAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNzAgY29tcGFyZSAxLjAwMDAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDcxIGNvbXBhcmUgMS4wMDAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA3MiBjb21wYXJlIDEuMDAgICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNzMgY29tcGFyZSAxLjAgICAgICAgICAgICAgICAgMSAtPiAwCisKKy0tIGNoZWNrIE1TRCBhbHdheXMgZGV0ZWN0ZWQgbm9uLXplcm8KK2RxY29tcDEwODAgY29tcGFyZSAwIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAwCitkcWNvbXAxMDgxIGNvbXBhcmUgMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODIgY29tcGFyZSAwIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4MyBjb21wYXJlIDAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDg0IGNvbXBhcmUgMCA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODUgY29tcGFyZSAwIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4NiBjb21wYXJlIDAgNi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDg3IGNvbXBhcmUgMCA3LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODggY29tcGFyZSAwIDguMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4OSBjb21wYXJlIDAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDkwIGNvbXBhcmUgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMAorZHFjb21wMTA5MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTIgY29tcGFyZSAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDkzIGNvbXBhcmUgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5NCBjb21wYXJlIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTUgY29tcGFyZSA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDk2IGNvbXBhcmUgNi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5NyBjb21wYXJlIDcuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTggY29tcGFyZSA4LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDk5IGNvbXBhcmUgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorCistLSBOdWxsIHRlc3RzCitkcWNvbTk5MCBjb21wYXJlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFjb205OTEgY29tcGFyZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlU2lnLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVNpZy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NWYwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVNpZy5kZWNUZXN0CkBAIC0wLDAgKzEsNjQ3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29tcGFyZVNpZy5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbjsgYWxsIE5hTnMgc2lnbmFsICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWNtczAwMSBjb21wYXJlc2lnICAtMiAgLTIgIC0+IDAKK2RxY21zMDAyIGNvbXBhcmVzaWcgIC0yICAtMSAgLT4gLTEKK2RxY21zMDAzIGNvbXBhcmVzaWcgIC0yICAgMCAgLT4gLTEKK2RxY21zMDA0IGNvbXBhcmVzaWcgIC0yICAgMSAgLT4gLTEKK2RxY21zMDA1IGNvbXBhcmVzaWcgIC0yICAgMiAgLT4gLTEKK2RxY21zMDA2IGNvbXBhcmVzaWcgIC0xICAtMiAgLT4gMQorZHFjbXMwMDcgY29tcGFyZXNpZyAgLTEgIC0xICAtPiAwCitkcWNtczAwOCBjb21wYXJlc2lnICAtMSAgIDAgIC0+IC0xCitkcWNtczAwOSBjb21wYXJlc2lnICAtMSAgIDEgIC0+IC0xCitkcWNtczAxMCBjb21wYXJlc2lnICAtMSAgIDIgIC0+IC0xCitkcWNtczAxMSBjb21wYXJlc2lnICAgMCAgLTIgIC0+IDEKK2RxY21zMDEyIGNvbXBhcmVzaWcgICAwICAtMSAgLT4gMQorZHFjbXMwMTMgY29tcGFyZXNpZyAgIDAgICAwICAtPiAwCitkcWNtczAxNCBjb21wYXJlc2lnICAgMCAgIDEgIC0+IC0xCitkcWNtczAxNSBjb21wYXJlc2lnICAgMCAgIDIgIC0+IC0xCitkcWNtczAxNiBjb21wYXJlc2lnICAgMSAgLTIgIC0+IDEKK2RxY21zMDE3IGNvbXBhcmVzaWcgICAxICAtMSAgLT4gMQorZHFjbXMwMTggY29tcGFyZXNpZyAgIDEgICAwICAtPiAxCitkcWNtczAxOSBjb21wYXJlc2lnICAgMSAgIDEgIC0+IDAKK2RxY21zMDIwIGNvbXBhcmVzaWcgICAxICAgMiAgLT4gLTEKK2RxY21zMDIxIGNvbXBhcmVzaWcgICAyICAtMiAgLT4gMQorZHFjbXMwMjIgY29tcGFyZXNpZyAgIDIgIC0xICAtPiAxCitkcWNtczAyMyBjb21wYXJlc2lnICAgMiAgIDAgIC0+IDEKK2RxY21zMDI1IGNvbXBhcmVzaWcgICAyICAgMSAgLT4gMQorZHFjbXMwMjYgY29tcGFyZXNpZyAgIDIgICAyICAtPiAwCisKK2RxY21zMDMxIGNvbXBhcmVzaWcgIC0yMCAgLTIwICAtPiAwCitkcWNtczAzMiBjb21wYXJlc2lnICAtMjAgIC0xMCAgLT4gLTEKK2RxY21zMDMzIGNvbXBhcmVzaWcgIC0yMCAgIDAwICAtPiAtMQorZHFjbXMwMzQgY29tcGFyZXNpZyAgLTIwICAgMTAgIC0+IC0xCitkcWNtczAzNSBjb21wYXJlc2lnICAtMjAgICAyMCAgLT4gLTEKK2RxY21zMDM2IGNvbXBhcmVzaWcgIC0xMCAgLTIwICAtPiAxCitkcWNtczAzNyBjb21wYXJlc2lnICAtMTAgIC0xMCAgLT4gMAorZHFjbXMwMzggY29tcGFyZXNpZyAgLTEwICAgMDAgIC0+IC0xCitkcWNtczAzOSBjb21wYXJlc2lnICAtMTAgICAxMCAgLT4gLTEKK2RxY21zMDQwIGNvbXBhcmVzaWcgIC0xMCAgIDIwICAtPiAtMQorZHFjbXMwNDEgY29tcGFyZXNpZyAgIDAwICAtMjAgIC0+IDEKK2RxY21zMDQyIGNvbXBhcmVzaWcgICAwMCAgLTEwICAtPiAxCitkcWNtczA0MyBjb21wYXJlc2lnICAgMDAgICAwMCAgLT4gMAorZHFjbXMwNDQgY29tcGFyZXNpZyAgIDAwICAgMTAgIC0+IC0xCitkcWNtczA0NSBjb21wYXJlc2lnICAgMDAgICAyMCAgLT4gLTEKK2RxY21zMDQ2IGNvbXBhcmVzaWcgICAxMCAgLTIwICAtPiAxCitkcWNtczA0NyBjb21wYXJlc2lnICAgMTAgIC0xMCAgLT4gMQorZHFjbXMwNDggY29tcGFyZXNpZyAgIDEwICAgMDAgIC0+IDEKK2RxY21zMDQ5IGNvbXBhcmVzaWcgICAxMCAgIDEwICAtPiAwCitkcWNtczA1MCBjb21wYXJlc2lnICAgMTAgICAyMCAgLT4gLTEKK2RxY21zMDUxIGNvbXBhcmVzaWcgICAyMCAgLTIwICAtPiAxCitkcWNtczA1MiBjb21wYXJlc2lnICAgMjAgIC0xMCAgLT4gMQorZHFjbXMwNTMgY29tcGFyZXNpZyAgIDIwICAgMDAgIC0+IDEKK2RxY21zMDU1IGNvbXBhcmVzaWcgICAyMCAgIDEwICAtPiAxCitkcWNtczA1NiBjb21wYXJlc2lnICAgMjAgICAyMCAgLT4gMAorCitkcWNtczA2MSBjb21wYXJlc2lnICAtMi4wICAtMi4wICAtPiAwCitkcWNtczA2MiBjb21wYXJlc2lnICAtMi4wICAtMS4wICAtPiAtMQorZHFjbXMwNjMgY29tcGFyZXNpZyAgLTIuMCAgIDAuMCAgLT4gLTEKK2RxY21zMDY0IGNvbXBhcmVzaWcgIC0yLjAgICAxLjAgIC0+IC0xCitkcWNtczA2NSBjb21wYXJlc2lnICAtMi4wICAgMi4wICAtPiAtMQorZHFjbXMwNjYgY29tcGFyZXNpZyAgLTEuMCAgLTIuMCAgLT4gMQorZHFjbXMwNjcgY29tcGFyZXNpZyAgLTEuMCAgLTEuMCAgLT4gMAorZHFjbXMwNjggY29tcGFyZXNpZyAgLTEuMCAgIDAuMCAgLT4gLTEKK2RxY21zMDY5IGNvbXBhcmVzaWcgIC0xLjAgICAxLjAgIC0+IC0xCitkcWNtczA3MCBjb21wYXJlc2lnICAtMS4wICAgMi4wICAtPiAtMQorZHFjbXMwNzEgY29tcGFyZXNpZyAgIDAuMCAgLTIuMCAgLT4gMQorZHFjbXMwNzIgY29tcGFyZXNpZyAgIDAuMCAgLTEuMCAgLT4gMQorZHFjbXMwNzMgY29tcGFyZXNpZyAgIDAuMCAgIDAuMCAgLT4gMAorZHFjbXMwNzQgY29tcGFyZXNpZyAgIDAuMCAgIDEuMCAgLT4gLTEKK2RxY21zMDc1IGNvbXBhcmVzaWcgICAwLjAgICAyLjAgIC0+IC0xCitkcWNtczA3NiBjb21wYXJlc2lnICAgMS4wICAtMi4wICAtPiAxCitkcWNtczA3NyBjb21wYXJlc2lnICAgMS4wICAtMS4wICAtPiAxCitkcWNtczA3OCBjb21wYXJlc2lnICAgMS4wICAgMC4wICAtPiAxCitkcWNtczA3OSBjb21wYXJlc2lnICAgMS4wICAgMS4wICAtPiAwCitkcWNtczA4MCBjb21wYXJlc2lnICAgMS4wICAgMi4wICAtPiAtMQorZHFjbXMwODEgY29tcGFyZXNpZyAgIDIuMCAgLTIuMCAgLT4gMQorZHFjbXMwODIgY29tcGFyZXNpZyAgIDIuMCAgLTEuMCAgLT4gMQorZHFjbXMwODMgY29tcGFyZXNpZyAgIDIuMCAgIDAuMCAgLT4gMQorZHFjbXMwODUgY29tcGFyZXNpZyAgIDIuMCAgIDEuMCAgLT4gMQorZHFjbXMwODYgY29tcGFyZXNpZyAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RxY21zMDkwIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAwCitkcWNtczA5MSBjb21wYXJlc2lnIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTEKK2RxY21zMDkyIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCitkcWNtczA5MyBjb21wYXJlc2lnIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKK2RxY21zMTAwIGNvbXBhcmVzaWcgICA3LjAgICAgNy4wICAgIC0+IDAKK2RxY21zMTAxIGNvbXBhcmVzaWcgICA3LjAgICAgNyAgICAgIC0+IDAKK2RxY21zMTAyIGNvbXBhcmVzaWcgICA3ICAgICAgNy4wICAgIC0+IDAKK2RxY21zMTAzIGNvbXBhcmVzaWcgICA3RSswICAgNy4wICAgIC0+IDAKK2RxY21zMTA0IGNvbXBhcmVzaWcgICA3MEUtMSAgNy4wICAgIC0+IDAKK2RxY21zMTA1IGNvbXBhcmVzaWcgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RxY21zMTA2IGNvbXBhcmVzaWcgICA3MEUtMSAgNyAgICAgIC0+IDAKK2RxY21zMTA3IGNvbXBhcmVzaWcgICA3LjAgICAgN0UrMCAgIC0+IDAKK2RxY21zMTA4IGNvbXBhcmVzaWcgICA3LjAgICAgNzBFLTEgIC0+IDAKK2RxY21zMTA5IGNvbXBhcmVzaWcgICA3ICAgICAgMC43RSsxIC0+IDAKK2RxY21zMTEwIGNvbXBhcmVzaWcgICA3ICAgICAgNzBFLTEgIC0+IDAKKworZHFjbXMxMjAgY29tcGFyZXNpZyAgIDguMCAgICA3LjAgICAgLT4gMQorZHFjbXMxMjEgY29tcGFyZXNpZyAgIDguMCAgICA3ICAgICAgLT4gMQorZHFjbXMxMjIgY29tcGFyZXNpZyAgIDggICAgICA3LjAgICAgLT4gMQorZHFjbXMxMjMgY29tcGFyZXNpZyAgIDhFKzAgICA3LjAgICAgLT4gMQorZHFjbXMxMjQgY29tcGFyZXNpZyAgIDgwRS0xICA3LjAgICAgLT4gMQorZHFjbXMxMjUgY29tcGFyZXNpZyAgIDAuOEUrMSA3ICAgICAgLT4gMQorZHFjbXMxMjYgY29tcGFyZXNpZyAgIDgwRS0xICA3ICAgICAgLT4gMQorZHFjbXMxMjcgY29tcGFyZXNpZyAgIDguMCAgICA3RSswICAgLT4gMQorZHFjbXMxMjggY29tcGFyZXNpZyAgIDguMCAgICA3MEUtMSAgLT4gMQorZHFjbXMxMjkgY29tcGFyZXNpZyAgIDggICAgICAwLjdFKzEgIC0+IDEKK2RxY21zMTMwIGNvbXBhcmVzaWcgICA4ICAgICAgNzBFLTEgIC0+IDEKKworZHFjbXMxNDAgY29tcGFyZXNpZyAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RxY21zMTQxIGNvbXBhcmVzaWcgICA4LjAgICAgOSAgICAgIC0+IC0xCitkcWNtczE0MiBjb21wYXJlc2lnICAgOCAgICAgIDkuMCAgICAtPiAtMQorZHFjbXMxNDMgY29tcGFyZXNpZyAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RxY21zMTQ0IGNvbXBhcmVzaWcgICA4MEUtMSAgOS4wICAgIC0+IC0xCitkcWNtczE0NSBjb21wYXJlc2lnICAgMC44RSsxIDkgICAgICAtPiAtMQorZHFjbXMxNDYgY29tcGFyZXNpZyAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RxY21zMTQ3IGNvbXBhcmVzaWcgICA4LjAgICAgOUUrMCAgIC0+IC0xCitkcWNtczE0OCBjb21wYXJlc2lnICAgOC4wICAgIDkwRS0xICAtPiAtMQorZHFjbXMxNDkgY29tcGFyZXNpZyAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RxY21zMTUwIGNvbXBhcmVzaWcgICA4ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2RxY21zMjAwIGNvbXBhcmVzaWcgIC03LjAgICAgNy4wICAgIC0+IC0xCitkcWNtczIwMSBjb21wYXJlc2lnICAtNy4wICAgIDcgICAgICAtPiAtMQorZHFjbXMyMDIgY29tcGFyZXNpZyAgLTcgICAgICA3LjAgICAgLT4gLTEKK2RxY21zMjAzIGNvbXBhcmVzaWcgIC03RSswICAgNy4wICAgIC0+IC0xCitkcWNtczIwNCBjb21wYXJlc2lnICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZHFjbXMyMDUgY29tcGFyZXNpZyAgLTAuN0UrMSA3ICAgICAgLT4gLTEKK2RxY21zMjA2IGNvbXBhcmVzaWcgIC03MEUtMSAgNyAgICAgIC0+IC0xCitkcWNtczIwNyBjb21wYXJlc2lnICAtNy4wICAgIDdFKzAgICAtPiAtMQorZHFjbXMyMDggY29tcGFyZXNpZyAgLTcuMCAgICA3MEUtMSAgLT4gLTEKK2RxY21zMjA5IGNvbXBhcmVzaWcgIC03ICAgICAgMC43RSsxIC0+IC0xCitkcWNtczIxMCBjb21wYXJlc2lnICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkcWNtczIyMCBjb21wYXJlc2lnICAtOC4wICAgIDcuMCAgICAtPiAtMQorZHFjbXMyMjEgY29tcGFyZXNpZyAgLTguMCAgICA3ICAgICAgLT4gLTEKK2RxY21zMjIyIGNvbXBhcmVzaWcgIC04ICAgICAgNy4wICAgIC0+IC0xCitkcWNtczIyMyBjb21wYXJlc2lnICAtOEUrMCAgIDcuMCAgICAtPiAtMQorZHFjbXMyMjQgY29tcGFyZXNpZyAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2RxY21zMjI1IGNvbXBhcmVzaWcgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkcWNtczIyNiBjb21wYXJlc2lnICAtODBFLTEgIDcgICAgICAtPiAtMQorZHFjbXMyMjcgY29tcGFyZXNpZyAgLTguMCAgICA3RSswICAgLT4gLTEKK2RxY21zMjI4IGNvbXBhcmVzaWcgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkcWNtczIyOSBjb21wYXJlc2lnICAtOCAgICAgIDAuN0UrMSAtPiAtMQorZHFjbXMyMzAgY29tcGFyZXNpZyAgLTggICAgICA3MEUtMSAgLT4gLTEKKworZHFjbXMyNDAgY29tcGFyZXNpZyAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RxY21zMjQxIGNvbXBhcmVzaWcgIC04LjAgICAgOSAgICAgIC0+IC0xCitkcWNtczI0MiBjb21wYXJlc2lnICAtOCAgICAgIDkuMCAgICAtPiAtMQorZHFjbXMyNDMgY29tcGFyZXNpZyAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RxY21zMjQ0IGNvbXBhcmVzaWcgIC04MEUtMSAgOS4wICAgIC0+IC0xCitkcWNtczI0NSBjb21wYXJlc2lnICAtMC44RSsxIDkgICAgICAtPiAtMQorZHFjbXMyNDYgY29tcGFyZXNpZyAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RxY21zMjQ3IGNvbXBhcmVzaWcgIC04LjAgICAgOUUrMCAgIC0+IC0xCitkcWNtczI0OCBjb21wYXJlc2lnICAtOC4wICAgIDkwRS0xICAtPiAtMQorZHFjbXMyNDkgY29tcGFyZXNpZyAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RxY21zMjUwIGNvbXBhcmVzaWcgIC04ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2RxY21zMzAwIGNvbXBhcmVzaWcgICA3LjAgICAgLTcuMCAgICAtPiAxCitkcWNtczMwMSBjb21wYXJlc2lnICAgNy4wICAgIC03ICAgICAgLT4gMQorZHFjbXMzMDIgY29tcGFyZXNpZyAgIDcgICAgICAtNy4wICAgIC0+IDEKK2RxY21zMzAzIGNvbXBhcmVzaWcgICA3RSswICAgLTcuMCAgICAtPiAxCitkcWNtczMwNCBjb21wYXJlc2lnICAgNzBFLTEgIC03LjAgICAgLT4gMQorZHFjbXMzMDUgY29tcGFyZXNpZyAgIC43RSsxICAtNyAgICAgIC0+IDEKK2RxY21zMzA2IGNvbXBhcmVzaWcgICA3MEUtMSAgLTcgICAgICAtPiAxCitkcWNtczMwNyBjb21wYXJlc2lnICAgNy4wICAgIC03RSswICAgLT4gMQorZHFjbXMzMDggY29tcGFyZXNpZyAgIDcuMCAgICAtNzBFLTEgIC0+IDEKK2RxY21zMzA5IGNvbXBhcmVzaWcgICA3ICAgICAgLS43RSsxICAtPiAxCitkcWNtczMxMCBjb21wYXJlc2lnICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkcWNtczMyMCBjb21wYXJlc2lnICAgOC4wICAgIC03LjAgICAgLT4gMQorZHFjbXMzMjEgY29tcGFyZXNpZyAgIDguMCAgICAtNyAgICAgIC0+IDEKK2RxY21zMzIyIGNvbXBhcmVzaWcgICA4ICAgICAgLTcuMCAgICAtPiAxCitkcWNtczMyMyBjb21wYXJlc2lnICAgOEUrMCAgIC03LjAgICAgLT4gMQorZHFjbXMzMjQgY29tcGFyZXNpZyAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2RxY21zMzI1IGNvbXBhcmVzaWcgICAuOEUrMSAgLTcgICAgICAtPiAxCitkcWNtczMyNiBjb21wYXJlc2lnICAgODBFLTEgIC03ICAgICAgLT4gMQorZHFjbXMzMjcgY29tcGFyZXNpZyAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2RxY21zMzI4IGNvbXBhcmVzaWcgICA4LjAgICAgLTcwRS0xICAtPiAxCitkcWNtczMyOSBjb21wYXJlc2lnICAgOCAgICAgIC0uN0UrMSAgLT4gMQorZHFjbXMzMzAgY29tcGFyZXNpZyAgIDggICAgICAtNzBFLTEgIC0+IDEKKworZHFjbXMzNDAgY29tcGFyZXNpZyAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RxY21zMzQxIGNvbXBhcmVzaWcgICA4LjAgICAgLTkgICAgICAtPiAxCitkcWNtczM0MiBjb21wYXJlc2lnICAgOCAgICAgIC05LjAgICAgLT4gMQorZHFjbXMzNDMgY29tcGFyZXNpZyAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RxY21zMzQ0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTkuMCAgICAtPiAxCitkcWNtczM0NSBjb21wYXJlc2lnICAgLjhFKzEgIC05ICAgICAgLT4gMQorZHFjbXMzNDYgY29tcGFyZXNpZyAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RxY21zMzQ3IGNvbXBhcmVzaWcgICA4LjAgICAgLTlFKzAgICAtPiAxCitkcWNtczM0OCBjb21wYXJlc2lnICAgOC4wICAgIC05MEUtMSAgLT4gMQorZHFjbXMzNDkgY29tcGFyZXNpZyAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RxY21zMzUwIGNvbXBhcmVzaWcgICA4ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2RxY21zNDAwIGNvbXBhcmVzaWcgICAtNy4wICAgIC03LjAgICAgLT4gMAorZHFjbXM0MDEgY29tcGFyZXNpZyAgIC03LjAgICAgLTcgICAgICAtPiAwCitkcWNtczQwMiBjb21wYXJlc2lnICAgLTcgICAgICAtNy4wICAgIC0+IDAKK2RxY21zNDAzIGNvbXBhcmVzaWcgICAtN0UrMCAgIC03LjAgICAgLT4gMAorZHFjbXM0MDQgY29tcGFyZXNpZyAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitkcWNtczQwNSBjb21wYXJlc2lnICAgLS43RSsxICAtNyAgICAgIC0+IDAKK2RxY21zNDA2IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03ICAgICAgLT4gMAorZHFjbXM0MDcgY29tcGFyZXNpZyAgIC03LjAgICAgLTdFKzAgICAtPiAwCitkcWNtczQwOCBjb21wYXJlc2lnICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKK2RxY21zNDA5IGNvbXBhcmVzaWcgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZHFjbXM0MTAgY29tcGFyZXNpZyAgIC03ICAgICAgLTcwRS0xICAtPiAwCisKK2RxY21zNDIwIGNvbXBhcmVzaWcgICAtOC4wICAgIC03LjAgICAgLT4gLTEKK2RxY21zNDIxIGNvbXBhcmVzaWcgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2RxY21zNDIyIGNvbXBhcmVzaWcgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RxY21zNDIzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKK2RxY21zNDI0IGNvbXBhcmVzaWcgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2RxY21zNDI1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RxY21zNDI2IGNvbXBhcmVzaWcgICAtODBFLTEgIC03ICAgICAgLT4gLTEKK2RxY21zNDI3IGNvbXBhcmVzaWcgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2RxY21zNDI4IGNvbXBhcmVzaWcgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RxY21zNDI5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKK2RxY21zNDMwIGNvbXBhcmVzaWcgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworZHFjbXM0NDAgY29tcGFyZXNpZyAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkcWNtczQ0MSBjb21wYXJlc2lnICAgLTguMCAgICAtOSAgICAgIC0+IDEKK2RxY21zNDQyIGNvbXBhcmVzaWcgICAtOCAgICAgIC05LjAgICAgLT4gMQorZHFjbXM0NDMgY29tcGFyZXNpZyAgIC04RSswICAgLTkuMCAgICAtPiAxCitkcWNtczQ0NCBjb21wYXJlc2lnICAgLTgwRS0xICAtOS4wICAgIC0+IDEKK2RxY21zNDQ1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC05ICAgICAgLT4gMQorZHFjbXM0NDYgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkcWNtczQ0NyBjb21wYXJlc2lnICAgLTguMCAgICAtOUUrMCAgIC0+IDEKK2RxY21zNDQ4IGNvbXBhcmVzaWcgICAtOC4wICAgIC05MEUtMSAgLT4gMQorZHFjbXM0NDkgY29tcGFyZXNpZyAgIC04ICAgICAgLS45RSsxICAtPiAxCitkcWNtczQ1MCBjb21wYXJlc2lnICAgLTggICAgICAtOTBFLTEgIC0+IDEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK2RxY21zNDczIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY21zNDc0IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjbXM0NzUgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY21zNDc2IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY21zNDc3IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjbXM0NzggY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY21zNDc5IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY21zNDgwIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjbXM0ODEgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY21zNDgyIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY21zNDgzIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjbXM0ODcgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwMEUrODkgLT4gMAorZHFjbXM0ODggY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRS04OSAtPiAwCitkcWNtczQ4OSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUrODkgLT4gMAorZHFjbXM0OTAgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMEUtODkgLT4gMAorZHFjbXM0OTEgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRSs4OSAtPiAwCitkcWNtczQ5MiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUtODkgLT4gMAorZHFjbXM0OTMgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMEUrODkgLT4gMAorZHFjbXM0OTQgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRS04OSAtPiAwCitkcWNtczQ5NSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUrODkgLT4gMAorZHFjbXM0OTYgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MEUtODkgLT4gMAorZHFjbXM0OTcgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK2RxY21zNTAwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTUgICAgLT4gMQorZHFjbXM1MDEgY29tcGFyZXNpZyAgICAxICAgICAxRS0xNCAgICAtPiAxCitkcWNtczUwMiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEzICAgIC0+IDEKK2RxY21zNTAzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTIgICAgLT4gMQorZHFjbXM1MDQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMSAgICAtPiAxCitkcWNtczUwNSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEwICAgIC0+IDEKK2RxY21zNTA2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOSAgICAgLT4gMQorZHFjbXM1MDcgY29tcGFyZXNpZyAgICAxICAgICAxRS04ICAgICAtPiAxCitkcWNtczUwOCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTcgICAgIC0+IDEKK2RxY21zNTA5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNiAgICAgLT4gMQorZHFjbXM1MTAgY29tcGFyZXNpZyAgICAxICAgICAxRS01ICAgICAtPiAxCitkcWNtczUxMSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTQgICAgIC0+IDEKK2RxY21zNTEyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMyAgICAgLT4gMQorZHFjbXM1MTMgY29tcGFyZXNpZyAgICAxICAgICAxRS0yICAgICAtPiAxCitkcWNtczUxNCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEgICAgIC0+IDEKK2RxY21zNTE1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMCAgICAgLT4gMAorZHFjbXM1MTYgY29tcGFyZXNpZyAgICAxICAgICAxRSsxICAgICAtPiAtMQorZHFjbXM1MTcgY29tcGFyZXNpZyAgICAxICAgICAxRSsyICAgICAtPiAtMQorZHFjbXM1MTggY29tcGFyZXNpZyAgICAxICAgICAxRSszICAgICAtPiAtMQorZHFjbXM1MTkgY29tcGFyZXNpZyAgICAxICAgICAxRSs0ICAgICAtPiAtMQorZHFjbXM1MjEgY29tcGFyZXNpZyAgICAxICAgICAxRSs1ICAgICAtPiAtMQorZHFjbXM1MjIgY29tcGFyZXNpZyAgICAxICAgICAxRSs2ICAgICAtPiAtMQorZHFjbXM1MjMgY29tcGFyZXNpZyAgICAxICAgICAxRSs3ICAgICAtPiAtMQorZHFjbXM1MjQgY29tcGFyZXNpZyAgICAxICAgICAxRSs4ICAgICAtPiAtMQorZHFjbXM1MjUgY29tcGFyZXNpZyAgICAxICAgICAxRSs5ICAgICAtPiAtMQorZHFjbXM1MjYgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMCAgICAtPiAtMQorZHFjbXM1MjcgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMSAgICAtPiAtMQorZHFjbXM1MjggY29tcGFyZXNpZyAgICAxICAgICAxRSsxMiAgICAtPiAtMQorZHFjbXM1MjkgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMyAgICAtPiAtMQorZHFjbXM1MzAgY29tcGFyZXNpZyAgICAxICAgICAxRSsxNCAgICAtPiAtMQorZHFjbXM1MzEgY29tcGFyZXNpZyAgICAxICAgICAxRSsxNSAgICAtPiAtMQorLS0gTFIgc3dhcAorZHFjbXM1NDAgY29tcGFyZXNpZyAgICAxRS0xNSAgMSAgICAgICAtPiAtMQorZHFjbXM1NDEgY29tcGFyZXNpZyAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorZHFjbXM1NDIgY29tcGFyZXNpZyAgICAxRS0xMyAgMSAgICAgICAtPiAtMQorZHFjbXM1NDMgY29tcGFyZXNpZyAgICAxRS0xMiAgMSAgICAgICAtPiAtMQorZHFjbXM1NDQgY29tcGFyZXNpZyAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorZHFjbXM1NDUgY29tcGFyZXNpZyAgICAxRS0xMCAgMSAgICAgICAtPiAtMQorZHFjbXM1NDYgY29tcGFyZXNpZyAgICAxRS05ICAgMSAgICAgICAtPiAtMQorZHFjbXM1NDcgY29tcGFyZXNpZyAgICAxRS04ICAgMSAgICAgICAtPiAtMQorZHFjbXM1NDggY29tcGFyZXNpZyAgICAxRS03ICAgMSAgICAgICAtPiAtMQorZHFjbXM1NDkgY29tcGFyZXNpZyAgICAxRS02ICAgMSAgICAgICAtPiAtMQorZHFjbXM1NTAgY29tcGFyZXNpZyAgICAxRS01ICAgMSAgICAgICAtPiAtMQorZHFjbXM1NTEgY29tcGFyZXNpZyAgICAxRS00ICAgMSAgICAgICAtPiAtMQorZHFjbXM1NTIgY29tcGFyZXNpZyAgICAxRS0zICAgMSAgICAgICAtPiAtMQorZHFjbXM1NTMgY29tcGFyZXNpZyAgICAxRS0yICAgMSAgICAgICAtPiAtMQorZHFjbXM1NTQgY29tcGFyZXNpZyAgICAxRS0xICAgMSAgICAgICAtPiAtMQorZHFjbXM1NTUgY29tcGFyZXNpZyAgICAxRS0wICAgMSAgICAgICAtPiAgMAorZHFjbXM1NTYgY29tcGFyZXNpZyAgICAxRSsxICAgMSAgICAgICAtPiAgMQorZHFjbXM1NTcgY29tcGFyZXNpZyAgICAxRSsyICAgMSAgICAgICAtPiAgMQorZHFjbXM1NTggY29tcGFyZXNpZyAgICAxRSszICAgMSAgICAgICAtPiAgMQorZHFjbXM1NTkgY29tcGFyZXNpZyAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorZHFjbXM1NjEgY29tcGFyZXNpZyAgICAxRSs1ICAgMSAgICAgICAtPiAgMQorZHFjbXM1NjIgY29tcGFyZXNpZyAgICAxRSs2ICAgMSAgICAgICAtPiAgMQorZHFjbXM1NjMgY29tcGFyZXNpZyAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorZHFjbXM1NjQgY29tcGFyZXNpZyAgICAxRSs4ICAgMSAgICAgICAtPiAgMQorZHFjbXM1NjUgY29tcGFyZXNpZyAgICAxRSs5ICAgMSAgICAgICAtPiAgMQorZHFjbXM1NjYgY29tcGFyZXNpZyAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorZHFjbXM1NjcgY29tcGFyZXNpZyAgICAxRSsxMSAgMSAgICAgICAtPiAgMQorZHFjbXM1NjggY29tcGFyZXNpZyAgICAxRSsxMiAgMSAgICAgICAtPiAgMQorZHFjbXM1NjkgY29tcGFyZXNpZyAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorZHFjbXM1NzAgY29tcGFyZXNpZyAgICAxRSsxNCAgMSAgICAgICAtPiAgMQorZHFjbXM1NzEgY29tcGFyZXNpZyAgICAxRSsxNSAgMSAgICAgICAtPiAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitkcWNtczU4MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQorZHFjbXM1ODEgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDEKK2RxY21zNTgyIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxCitkcWNtczU4MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQorZHFjbXM1ODQgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDEKK2RxY21zNTg1IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxCitkcWNtczU4NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQorZHFjbXM1ODcgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDEKK2RxY21zNTg4IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxCitkcWNtczU4OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKK2RxY21zNTkwIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQorZHFjbXM1OTEgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xCitkcWNtczU5MiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKK2RxY21zNTkzIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQorZHFjbXM1OTQgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xCitkcWNtczU5NSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKK2RxY21zNTk2IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQorZHFjbXM1OTcgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xCitkcWNtczU5OCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKK2RxY21zNTk5IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZHFjbXM2MDAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MDEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MDIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MDMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MDQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MDUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MDYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MDcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MDggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MDkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQorZHFjbXM2MTAgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQorZHFjbXM2MTEgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQorZHFjbXM2MTIgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQorZHFjbXM2MTMgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQorZHFjbXM2MTQgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQorZHFjbXM2MTUgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQorZHFjbXM2MTYgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQorZHFjbXM2MTcgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQorZHFjbXM2MTggY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQorZHFjbXM2MTkgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQorZHFjbXM2MjAgY29tcGFyZXNpZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MjEgY29tcGFyZXNpZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MjIgY29tcGFyZXNpZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MjMgY29tcGFyZXNpZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MjQgY29tcGFyZXNpZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MjUgY29tcGFyZXNpZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MjYgY29tcGFyZXNpZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MjcgY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MjggY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MjkgY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQorZHFjbXM2MzAgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQorZHFjbXM2MzEgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQorZHFjbXM2MzIgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQorZHFjbXM2MzMgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQorZHFjbXM2MzQgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQorZHFjbXM2MzUgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQorZHFjbXM2MzYgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQorZHFjbXM2MzcgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQorZHFjbXM2MzggY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQorZHFjbXM2MzkgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQorCistLSBleHRlbmRlZCB6ZXJvcworZHFjbXM2NDAgY29tcGFyZXNpZyAgIDAgICAgIDAgICAtPiAwCitkcWNtczY0MSBjb21wYXJlc2lnICAgMCAgICAtMCAgIC0+IDAKK2RxY21zNjQyIGNvbXBhcmVzaWcgICAwICAgIC0wLjAgLT4gMAorZHFjbXM2NDMgY29tcGFyZXNpZyAgIDAgICAgIDAuMCAtPiAwCitkcWNtczY0NCBjb21wYXJlc2lnICAtMCAgICAgMCAgIC0+IDAKK2RxY21zNjQ1IGNvbXBhcmVzaWcgIC0wICAgIC0wICAgLT4gMAorZHFjbXM2NDYgY29tcGFyZXNpZyAgLTAgICAgLTAuMCAtPiAwCitkcWNtczY0NyBjb21wYXJlc2lnICAtMCAgICAgMC4wIC0+IDAKK2RxY21zNjQ4IGNvbXBhcmVzaWcgICAwLjAgICAwICAgLT4gMAorZHFjbXM2NDkgY29tcGFyZXNpZyAgIDAuMCAgLTAgICAtPiAwCitkcWNtczY1MCBjb21wYXJlc2lnICAgMC4wICAtMC4wIC0+IDAKK2RxY21zNjUxIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgLT4gMAorZHFjbXM2NTIgY29tcGFyZXNpZyAgLTAuMCAgIDAgICAtPiAwCitkcWNtczY1MyBjb21wYXJlc2lnICAtMC4wICAtMCAgIC0+IDAKK2RxY21zNjU0IGNvbXBhcmVzaWcgIC0wLjAgIC0wLjAgLT4gMAorZHFjbXM2NTUgY29tcGFyZXNpZyAgLTAuMCAgIDAuMCAtPiAwCisKK2RxY21zNjU2IGNvbXBhcmVzaWcgIC0wRTEgICAwLjAgLT4gMAorZHFjbXM2NTcgY29tcGFyZXNpZyAgLTBFMiAgIDAuMCAtPiAwCitkcWNtczY1OCBjb21wYXJlc2lnICAgMEUxICAgMC4wIC0+IDAKK2RxY21zNjU5IGNvbXBhcmVzaWcgICAwRTIgICAwLjAgLT4gMAorZHFjbXM2NjAgY29tcGFyZXNpZyAgLTBFMSAgIDAgICAtPiAwCitkcWNtczY2MSBjb21wYXJlc2lnICAtMEUyICAgMCAgIC0+IDAKK2RxY21zNjYyIGNvbXBhcmVzaWcgICAwRTEgICAwICAgLT4gMAorZHFjbXM2NjMgY29tcGFyZXNpZyAgIDBFMiAgIDAgICAtPiAwCitkcWNtczY2NCBjb21wYXJlc2lnICAtMEUxICAtMEUxIC0+IDAKK2RxY21zNjY1IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTEgLT4gMAorZHFjbXM2NjYgY29tcGFyZXNpZyAgIDBFMSAgLTBFMSAtPiAwCitkcWNtczY2NyBjb21wYXJlc2lnICAgMEUyICAtMEUxIC0+IDAKK2RxY21zNjY4IGNvbXBhcmVzaWcgIC0wRTEgIC0wRTIgLT4gMAorZHFjbXM2NjkgY29tcGFyZXNpZyAgLTBFMiAgLTBFMiAtPiAwCitkcWNtczY3MCBjb21wYXJlc2lnICAgMEUxICAtMEUyIC0+IDAKK2RxY21zNjcxIGNvbXBhcmVzaWcgICAwRTIgIC0wRTIgLT4gMAorZHFjbXM2NzIgY29tcGFyZXNpZyAgLTBFMSAgIDBFMSAtPiAwCitkcWNtczY3MyBjb21wYXJlc2lnICAtMEUyICAgMEUxIC0+IDAKK2RxY21zNjc0IGNvbXBhcmVzaWcgICAwRTEgICAwRTEgLT4gMAorZHFjbXM2NzUgY29tcGFyZXNpZyAgIDBFMiAgIDBFMSAtPiAwCitkcWNtczY3NiBjb21wYXJlc2lnICAtMEUxICAgMEUyIC0+IDAKK2RxY21zNjc3IGNvbXBhcmVzaWcgIC0wRTIgICAwRTIgLT4gMAorZHFjbXM2NzggY29tcGFyZXNpZyAgIDBFMSAgIDBFMiAtPiAwCitkcWNtczY3OSBjb21wYXJlc2lnICAgMEUyICAgMEUyIC0+IDAKKworLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQorZHFjbXM2ODAgY29tcGFyZXNpZyAgIDEyICAgIDEyICAgICAgICAgICAtPiAwCitkcWNtczY4MSBjb21wYXJlc2lnICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDAKK2RxY21zNjgyIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMAorZHFjbXM2ODMgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAwCitkcWNtczY4NCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDAKK2RxY21zNjg1IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMAorZHFjbXM2ODYgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAwCitkcWNtczY4NyBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDAKK2RxY21zNjg4IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMAorZHFjbXM2ODkgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAwCitkcWNtczY5MCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2RxY21zNjkxIGNvbXBhcmVzaWcgICAxMi4wICAgICAgICAgICAgMTIgLT4gMAorZHFjbXM2OTIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgICAxMiAtPiAwCitkcWNtczY5MyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAgIDEyIC0+IDAKK2RxY21zNjk0IGNvbXBhcmVzaWcgICAxMi4wMDAwICAgICAgICAgMTIgLT4gMAorZHFjbXM2OTUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAwCitkcWNtczY5NiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IDAKK2RxY21zNjk3IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gMAorZHFjbXM2OTggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAwCitkcWNtczY5OSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IDAKKworLS0gZmlyc3QsIHNlY29uZCwgJiBsYXN0IGRpZ2l0CitkcWNtczcwMCBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU1IC0+IDEKK2RxY21zNzAxIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAorZHFjbXM3MDIgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NyAtPiAtMQorZHFjbXM3MDMgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMDIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAxCitkcWNtczcwNCBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKK2RxY21zNzA1IGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDIyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTEKK2RxY21zNzA2IGNvbXBhcmVzaWcgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEwMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQorZHFjbXM3MDcgY29tcGFyZXNpZyAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCitkcWNtczcwOCBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xCisKKy0tIG1pc2NlbGxhbmVvdXMKK2RxY21zNzIxIGNvbXBhcmVzaWcgMTIzNDU2NzgwMDAgMSAtPiAxCitkcWNtczcyMiBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMDAgLT4gLTEKK2RxY21zNzIzIGNvbXBhcmVzaWcgMTIzNDU2NzgwMCAgMSAtPiAxCitkcWNtczcyNCBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMCAgLT4gLTEKK2RxY21zNzI1IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MCAgMSAtPiAxCitkcWNtczcyNiBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MCAgLT4gLTEKK2RxY21zNzI3IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MSAgMSAtPiAxCitkcWNtczcyOCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MSAgLT4gLTEKK2RxY21zNzI5IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MDEgMSAtPiAxCitkcWNtczczMCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MDEgLT4gLTEKK2RxY21zNzMxIGNvbXBhcmVzaWcgMTIzNDU2Nzg5NiAgMSAtPiAxCitkcWNtczczMiBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5NiAgLT4gLTEKKworLS0gcmVzaWR1ZSBjYXNlcyBhdCBsb3dlciBwcmVjaXNpb24KK2RxY21zNzQwIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTk5OSAgLT4gMQorZHFjbXM3NDEgY29tcGFyZXNpZyAgMSAgMC45OTk5OTkgICAtPiAxCitkcWNtczc0MiBjb21wYXJlc2lnICAxICAwLjk5OTk5ICAgIC0+IDEKK2RxY21zNzQzIGNvbXBhcmVzaWcgIDEgIDEuMDAwMCAgICAgLT4gMAorZHFjbXM3NDQgY29tcGFyZXNpZyAgMSAgMS4wMDAwMSAgICAtPiAtMQorZHFjbXM3NDUgY29tcGFyZXNpZyAgMSAgMS4wMDAwMDEgICAtPiAtMQorZHFjbXM3NDYgY29tcGFyZXNpZyAgMSAgMS4wMDAwMDAxICAtPiAtMQorZHFjbXM3NTAgY29tcGFyZXNpZyAgMC45OTk5OTk5ICAxICAtPiAtMQorZHFjbXM3NTEgY29tcGFyZXNpZyAgMC45OTk5OTkgICAxICAtPiAtMQorZHFjbXM3NTIgY29tcGFyZXNpZyAgMC45OTk5OSAgICAxICAtPiAtMQorZHFjbXM3NTMgY29tcGFyZXNpZyAgMS4wMDAwICAgICAxICAtPiAwCitkcWNtczc1NCBjb21wYXJlc2lnICAxLjAwMDAxICAgIDEgIC0+IDEKK2RxY21zNzU1IGNvbXBhcmVzaWcgIDEuMDAwMDAxICAgMSAgLT4gMQorZHFjbXM3NTYgY29tcGFyZXNpZyAgMS4wMDAwMDAxICAxICAtPiAxCisKKy0tIFNwZWNpYWxzCitkcWNtczc4MCBjb21wYXJlc2lnICBJbmYgIC1JbmYgICAtPiAgMQorZHFjbXM3ODEgY29tcGFyZXNpZyAgSW5mICAtMTAwMCAgLT4gIDEKK2RxY21zNzgyIGNvbXBhcmVzaWcgIEluZiAgLTEgICAgIC0+ICAxCitkcWNtczc4MyBjb21wYXJlc2lnICBJbmYgIC0wICAgICAtPiAgMQorZHFjbXM3ODQgY29tcGFyZXNpZyAgSW5mICAgMCAgICAgLT4gIDEKK2RxY21zNzg1IGNvbXBhcmVzaWcgIEluZiAgIDEgICAgIC0+ICAxCitkcWNtczc4NiBjb21wYXJlc2lnICBJbmYgICAxMDAwICAtPiAgMQorZHFjbXM3ODcgY29tcGFyZXNpZyAgSW5mICAgSW5mICAgLT4gIDAKK2RxY21zNzg4IGNvbXBhcmVzaWcgLTEwMDAgIEluZiAgIC0+IC0xCitkcWNtczc4OSBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQorZHFjbXM3OTAgY29tcGFyZXNpZyAtMSAgICAgSW5mICAgLT4gLTEKK2RxY21zNzkxIGNvbXBhcmVzaWcgLTAgICAgIEluZiAgIC0+IC0xCitkcWNtczc5MiBjb21wYXJlc2lnICAwICAgICBJbmYgICAtPiAtMQorZHFjbXM3OTMgY29tcGFyZXNpZyAgMSAgICAgSW5mICAgLT4gLTEKK2RxY21zNzk0IGNvbXBhcmVzaWcgIDEwMDAgIEluZiAgIC0+IC0xCitkcWNtczc5NSBjb21wYXJlc2lnICBJbmYgICBJbmYgICAtPiAgMAorCitkcWNtczgwMCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjbXM4MDEgY29tcGFyZXNpZyAtSW5mICAtMTAwMCAgLT4gLTEKK2RxY21zODAyIGNvbXBhcmVzaWcgLUluZiAgLTEgICAgIC0+IC0xCitkcWNtczgwMyBjb21wYXJlc2lnIC1JbmYgIC0wICAgICAtPiAtMQorZHFjbXM4MDQgY29tcGFyZXNpZyAtSW5mICAgMCAgICAgLT4gLTEKK2RxY21zODA1IGNvbXBhcmVzaWcgLUluZiAgIDEgICAgIC0+IC0xCitkcWNtczgwNiBjb21wYXJlc2lnIC1JbmYgICAxMDAwICAtPiAtMQorZHFjbXM4MDcgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTEKK2RxY21zODA4IGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwCitkcWNtczgwOSBjb21wYXJlc2lnIC0xMDAwIC1JbmYgICAtPiAgMQorZHFjbXM4MTAgY29tcGFyZXNpZyAtMSAgICAtSW5mICAgLT4gIDEKK2RxY21zODExIGNvbXBhcmVzaWcgLTAgICAgLUluZiAgIC0+ICAxCitkcWNtczgxMiBjb21wYXJlc2lnICAwICAgIC1JbmYgICAtPiAgMQorZHFjbXM4MTMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gIDEKK2RxY21zODE0IGNvbXBhcmVzaWcgIDEwMDAgLUluZiAgIC0+ICAxCitkcWNtczgxNSBjb21wYXJlc2lnICBJbmYgIC1JbmYgICAtPiAgMQorCitkcWNtczgyMSBjb21wYXJlc2lnICBOYU4gLUluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjIgY29tcGFyZXNpZyAgTmFOIC0xMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODIzIGNvbXBhcmVzaWcgIE5hTiAtMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyNCBjb21wYXJlc2lnICBOYU4gLTAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjUgY29tcGFyZXNpZyAgTmFOICAwICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODI2IGNvbXBhcmVzaWcgIE5hTiAgMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyNyBjb21wYXJlc2lnICBOYU4gIDEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjggY29tcGFyZXNpZyAgTmFOICBJbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODI5IGNvbXBhcmVzaWcgIE5hTiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzMCBjb21wYXJlc2lnIC1JbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzEgY29tcGFyZXNpZyAtMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODMyIGNvbXBhcmVzaWcgLTEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzMyBjb21wYXJlc2lnIC0wICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzQgY29tcGFyZXNpZyAgMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODM1IGNvbXBhcmVzaWcgIDEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzNiBjb21wYXJlc2lnICAxMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzcgY29tcGFyZXNpZyAgSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODM4IGNvbXBhcmVzaWcgLU5hTiAtTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzOSBjb21wYXJlc2lnICtOYU4gLU5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDAgY29tcGFyZXNpZyAtTmFOICtOYU4gICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZHFjbXM4NDEgY29tcGFyZXNpZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQyIGNvbXBhcmVzaWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0MyBjb21wYXJlc2lnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDQgY29tcGFyZXNpZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQ1IGNvbXBhcmVzaWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0NiBjb21wYXJlc2lnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDcgY29tcGFyZXNpZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQ4IGNvbXBhcmVzaWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0OSBjb21wYXJlc2lnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTAgY29tcGFyZXNpZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODUxIGNvbXBhcmVzaWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1MiBjb21wYXJlc2lnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTMgY29tcGFyZXNpZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODU0IGNvbXBhcmVzaWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1NSBjb21wYXJlc2lnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTYgY29tcGFyZXNpZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODU3IGNvbXBhcmVzaWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1OCBjb21wYXJlc2lnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTkgY29tcGFyZXNpZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFjbXM4NjAgY29tcGFyZXNpZyAgTmFOOSAtSW5mICAgLT4gIE5hTjkgICAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODYxIGNvbXBhcmVzaWcgIE5hTjggIDk5OSAgIC0+ICBOYU44ICAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2MiBjb21wYXJlc2lnICBOYU43NyBJbmYgICAtPiAgTmFONzcgICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjMgY29tcGFyZXNpZyAtTmFONjcgTmFONSAgLT4gLU5hTjY3ICAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODY0IGNvbXBhcmVzaWcgLUluZiAgLU5hTjQgIC0+IC1OYU40ICAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2NSBjb21wYXJlc2lnIC05OTkgIC1OYU4zMyAtPiAtTmFOMzMgICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjYgY29tcGFyZXNpZyAgSW5mICAgTmFOMiAgLT4gIE5hTjIgICAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODY3IGNvbXBhcmVzaWcgLU5hTjQxIC1OYU40MiAtPiAtTmFONDEgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2OCBjb21wYXJlc2lnICtOYU40MSAtTmFONDIgLT4gIE5hTjQxICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjkgY29tcGFyZXNpZyAtTmFONDEgK05hTjQyIC0+IC1OYU40MSAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODcwIGNvbXBhcmVzaWcgK05hTjQxICtOYU40MiAtPiAgTmFONDEgIEludmFsaWRfb3BlcmF0aW9uCisKK2RxY21zODcxIGNvbXBhcmVzaWcgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzIgY29tcGFyZXNpZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3MyBjb21wYXJlc2lnICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODc0IGNvbXBhcmVzaWcgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzUgY29tcGFyZXNpZyAgTmFOODUgIHNOYU44MyAgLT4gIE5hTjgzIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3NiBjb21wYXJlc2lnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODc3IGNvbXBhcmVzaWcgIDA4OCAgICBzTmFOODEgIC0+ICBOYU44MSBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzggY29tcGFyZXNpZyAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3OSBjb21wYXJlc2lnICBOYU4gICAtc05hTjg5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gd2lkZSByYW5nZQorZHFjbXM4ODAgY29tcGFyZXNpZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xCitkcWNtczg4MSBjb21wYXJlc2lnIDlFKzYxNDQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RxY21zODgyIGNvbXBhcmVzaWcgKzAuMTAwIDlFLTYxNDMgICAgICAgICAgICAgICAtPiAgMQorZHFjbXM4ODMgY29tcGFyZXNpZyA5RS02MTQzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xCitkcWNtczg4NSBjb21wYXJlc2lnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTEKK2RxY21zODg2IGNvbXBhcmVzaWcgOUUrNjE0NCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZHFjbXM4ODcgY29tcGFyZXNpZyAtMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+IC0xCitkcWNtczg4OCBjb21wYXJlc2lnIDlFLTYxNDMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDEKKworLS0gc2lnbnMKK2RxY21zOTAxIGNvbXBhcmVzaWcgIDFlKzc3ICAxZSsxMSAtPiAgMQorZHFjbXM5MDIgY29tcGFyZXNpZyAgMWUrNzcgLTFlKzExIC0+ICAxCitkcWNtczkwMyBjb21wYXJlc2lnIC0xZSs3NyAgMWUrMTEgLT4gLTEKK2RxY21zOTA0IGNvbXBhcmVzaWcgLTFlKzc3IC0xZSsxMSAtPiAtMQorZHFjbXM5MDUgY29tcGFyZXNpZyAgMWUtNzcgIDFlLTExIC0+IC0xCitkcWNtczkwNiBjb21wYXJlc2lnICAxZS03NyAtMWUtMTEgLT4gIDEKK2RxY21zOTA3IGNvbXBhcmVzaWcgLTFlLTc3ICAxZS0xMSAtPiAtMQorZHFjbXM5MDggY29tcGFyZXNpZyAtMWUtNzcgLTFlLTExIC0+ICAxCisKKy0tIE51bGwgdGVzdHMKK2RxY21zOTkwIGNvbXBhcmVzaWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczk5MSBjb21wYXJlc2lnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNzAxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsLmRlY1Rlc3QKQEAgLTAsMCArMSw3MDYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb21wYXJlVG90YWwuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmcgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwKKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdAorLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4KKy0tIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMKKy0tIHRoYW4gY29tcGFyZS4KKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxY290MDAxIGNvbXBhcmV0b3RhbCAgLTIgIC0yICAtPiAwCitkcWNvdDAwMiBjb21wYXJldG90YWwgIC0yICAtMSAgLT4gLTEKK2RxY290MDAzIGNvbXBhcmV0b3RhbCAgLTIgICAwICAtPiAtMQorZHFjb3QwMDQgY29tcGFyZXRvdGFsICAtMiAgIDEgIC0+IC0xCitkcWNvdDAwNSBjb21wYXJldG90YWwgIC0yICAgMiAgLT4gLTEKK2RxY290MDA2IGNvbXBhcmV0b3RhbCAgLTEgIC0yICAtPiAxCitkcWNvdDAwNyBjb21wYXJldG90YWwgIC0xICAtMSAgLT4gMAorZHFjb3QwMDggY29tcGFyZXRvdGFsICAtMSAgIDAgIC0+IC0xCitkcWNvdDAwOSBjb21wYXJldG90YWwgIC0xICAgMSAgLT4gLTEKK2RxY290MDEwIGNvbXBhcmV0b3RhbCAgLTEgICAyICAtPiAtMQorZHFjb3QwMTEgY29tcGFyZXRvdGFsICAgMCAgLTIgIC0+IDEKK2RxY290MDEyIGNvbXBhcmV0b3RhbCAgIDAgIC0xICAtPiAxCitkcWNvdDAxMyBjb21wYXJldG90YWwgICAwICAgMCAgLT4gMAorZHFjb3QwMTQgY29tcGFyZXRvdGFsICAgMCAgIDEgIC0+IC0xCitkcWNvdDAxNSBjb21wYXJldG90YWwgICAwICAgMiAgLT4gLTEKK2RxY290MDE2IGNvbXBhcmV0b3RhbCAgIDEgIC0yICAtPiAxCitkcWNvdDAxNyBjb21wYXJldG90YWwgICAxICAtMSAgLT4gMQorZHFjb3QwMTggY29tcGFyZXRvdGFsICAgMSAgIDAgIC0+IDEKK2RxY290MDE5IGNvbXBhcmV0b3RhbCAgIDEgICAxICAtPiAwCitkcWNvdDAyMCBjb21wYXJldG90YWwgICAxICAgMiAgLT4gLTEKK2RxY290MDIxIGNvbXBhcmV0b3RhbCAgIDIgIC0yICAtPiAxCitkcWNvdDAyMiBjb21wYXJldG90YWwgICAyICAtMSAgLT4gMQorZHFjb3QwMjMgY29tcGFyZXRvdGFsICAgMiAgIDAgIC0+IDEKK2RxY290MDI1IGNvbXBhcmV0b3RhbCAgIDIgICAxICAtPiAxCitkcWNvdDAyNiBjb21wYXJldG90YWwgICAyICAgMiAgLT4gMAorCitkcWNvdDAzMSBjb21wYXJldG90YWwgIC0yMCAgLTIwICAtPiAwCitkcWNvdDAzMiBjb21wYXJldG90YWwgIC0yMCAgLTEwICAtPiAtMQorZHFjb3QwMzMgY29tcGFyZXRvdGFsICAtMjAgICAwMCAgLT4gLTEKK2RxY290MDM0IGNvbXBhcmV0b3RhbCAgLTIwICAgMTAgIC0+IC0xCitkcWNvdDAzNSBjb21wYXJldG90YWwgIC0yMCAgIDIwICAtPiAtMQorZHFjb3QwMzYgY29tcGFyZXRvdGFsICAtMTAgIC0yMCAgLT4gMQorZHFjb3QwMzcgY29tcGFyZXRvdGFsICAtMTAgIC0xMCAgLT4gMAorZHFjb3QwMzggY29tcGFyZXRvdGFsICAtMTAgICAwMCAgLT4gLTEKK2RxY290MDM5IGNvbXBhcmV0b3RhbCAgLTEwICAgMTAgIC0+IC0xCitkcWNvdDA0MCBjb21wYXJldG90YWwgIC0xMCAgIDIwICAtPiAtMQorZHFjb3QwNDEgY29tcGFyZXRvdGFsICAgMDAgIC0yMCAgLT4gMQorZHFjb3QwNDIgY29tcGFyZXRvdGFsICAgMDAgIC0xMCAgLT4gMQorZHFjb3QwNDMgY29tcGFyZXRvdGFsICAgMDAgICAwMCAgLT4gMAorZHFjb3QwNDQgY29tcGFyZXRvdGFsICAgMDAgICAxMCAgLT4gLTEKK2RxY290MDQ1IGNvbXBhcmV0b3RhbCAgIDAwICAgMjAgIC0+IC0xCitkcWNvdDA0NiBjb21wYXJldG90YWwgICAxMCAgLTIwICAtPiAxCitkcWNvdDA0NyBjb21wYXJldG90YWwgICAxMCAgLTEwICAtPiAxCitkcWNvdDA0OCBjb21wYXJldG90YWwgICAxMCAgIDAwICAtPiAxCitkcWNvdDA0OSBjb21wYXJldG90YWwgICAxMCAgIDEwICAtPiAwCitkcWNvdDA1MCBjb21wYXJldG90YWwgICAxMCAgIDIwICAtPiAtMQorZHFjb3QwNTEgY29tcGFyZXRvdGFsICAgMjAgIC0yMCAgLT4gMQorZHFjb3QwNTIgY29tcGFyZXRvdGFsICAgMjAgIC0xMCAgLT4gMQorZHFjb3QwNTMgY29tcGFyZXRvdGFsICAgMjAgICAwMCAgLT4gMQorZHFjb3QwNTUgY29tcGFyZXRvdGFsICAgMjAgICAxMCAgLT4gMQorZHFjb3QwNTYgY29tcGFyZXRvdGFsICAgMjAgICAyMCAgLT4gMAorCitkcWNvdDA2MSBjb21wYXJldG90YWwgIC0yLjAgIC0yLjAgIC0+IDAKK2RxY290MDYyIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTEuMCAgLT4gLTEKK2RxY290MDYzIGNvbXBhcmV0b3RhbCAgLTIuMCAgIDAuMCAgLT4gLTEKK2RxY290MDY0IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDEuMCAgLT4gLTEKK2RxY290MDY1IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDIuMCAgLT4gLTEKK2RxY290MDY2IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTIuMCAgLT4gMQorZHFjb3QwNjcgY29tcGFyZXRvdGFsICAtMS4wICAtMS4wICAtPiAwCitkcWNvdDA2OCBjb21wYXJldG90YWwgIC0xLjAgICAwLjAgIC0+IC0xCitkcWNvdDA2OSBjb21wYXJldG90YWwgIC0xLjAgICAxLjAgIC0+IC0xCitkcWNvdDA3MCBjb21wYXJldG90YWwgIC0xLjAgICAyLjAgIC0+IC0xCitkcWNvdDA3MSBjb21wYXJldG90YWwgICAwLjAgIC0yLjAgIC0+IDEKK2RxY290MDcyIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTEuMCAgLT4gMQorZHFjb3QwNzMgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wICAtPiAwCitkcWNvdDA3NCBjb21wYXJldG90YWwgICAwLjAgICAxLjAgIC0+IC0xCitkcWNvdDA3NSBjb21wYXJldG90YWwgICAwLjAgICAyLjAgIC0+IC0xCitkcWNvdDA3NiBjb21wYXJldG90YWwgICAxLjAgIC0yLjAgIC0+IDEKK2RxY290MDc3IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTEuMCAgLT4gMQorZHFjb3QwNzggY29tcGFyZXRvdGFsICAgMS4wICAgMC4wICAtPiAxCitkcWNvdDA3OSBjb21wYXJldG90YWwgICAxLjAgICAxLjAgIC0+IDAKK2RxY290MDgwIGNvbXBhcmV0b3RhbCAgIDEuMCAgIDIuMCAgLT4gLTEKK2RxY290MDgxIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTIuMCAgLT4gMQorZHFjb3QwODIgY29tcGFyZXRvdGFsICAgMi4wICAtMS4wICAtPiAxCitkcWNvdDA4MyBjb21wYXJldG90YWwgICAyLjAgICAwLjAgIC0+IDEKK2RxY290MDg1IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDEuMCAgLT4gMQorZHFjb3QwODYgY29tcGFyZXRvdGFsICAgMi4wICAgMi4wICAtPiAwCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorZHFjb3QwOTAgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDAKK2RxY290MDkxIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtMQorZHFjb3QwOTIgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKK2RxY290MDkzIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAorZHFjb3QxMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIDcuMCAgICAtPiAwCitkcWNvdDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xCitkcWNvdDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDEKK2RxY290MTAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICA3LjAgICAgLT4gMQorZHFjb3QxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwCitkcWNvdDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RxY290MTA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3ICAgICAgLT4gLTEKK2RxY290MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTEKK2RxY290MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMAorZHFjb3QxMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIDAuN0UrMSAtPiAwCitkcWNvdDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDEKKworZHFjb3QxMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIDcuMCAgICAtPiAxCitkcWNvdDEyMSBjb21wYXJldG90YWwgICA4LjAgICAgNyAgICAgIC0+IDEKK2RxY290MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQorZHFjb3QxMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDcuMCAgICAtPiAxCitkcWNvdDEyNCBjb21wYXJldG90YWwgICA4MEUtMSAgNy4wICAgIC0+IDEKK2RxY290MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQorZHFjb3QxMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIDcgICAgICAtPiAxCitkcWNvdDEyNyBjb21wYXJldG90YWwgICA4LjAgICAgN0UrMCAgIC0+IDEKK2RxY290MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQorZHFjb3QxMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZHFjb3QxMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2RxY290MTQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RxY290MTQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RxY290MTQyIGNvbXBhcmV0b3RhbCAgIDggICAgICA5LjAgICAgLT4gLTEKK2RxY290MTQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RxY290MTQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RxY290MTQ1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY290MTQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RxY290MTQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5RSswICAgLT4gLTEKK2RxY290MTQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2RxY290MTQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RxY290MTUwIGNvbXBhcmV0b3RhbCAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZHFjb3QyMDAgY29tcGFyZXRvdGFsICAtNy4wICAgIDcuMCAgICAtPiAtMQorZHFjb3QyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQorZHFjb3QyMDIgY29tcGFyZXRvdGFsICAtNyAgICAgIDcuMCAgICAtPiAtMQorZHFjb3QyMDMgY29tcGFyZXRvdGFsICAtN0UrMCAgIDcuMCAgICAtPiAtMQorZHFjb3QyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZHFjb3QyMDUgY29tcGFyZXRvdGFsICAtMC43RSsxIDcgICAgICAtPiAtMQorZHFjb3QyMDYgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcgICAgICAtPiAtMQorZHFjb3QyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQorZHFjb3QyMDggY29tcGFyZXRvdGFsICAtNy4wICAgIDcwRS0xICAtPiAtMQorZHFjb3QyMDkgY29tcGFyZXRvdGFsICAtNyAgICAgIDAuN0UrMSAtPiAtMQorZHFjb3QyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkcWNvdDIyMCBjb21wYXJldG90YWwgIC04LjAgICAgNy4wICAgIC0+IC0xCitkcWNvdDIyMSBjb21wYXJldG90YWwgIC04LjAgICAgNyAgICAgIC0+IC0xCitkcWNvdDIyMiBjb21wYXJldG90YWwgIC04ICAgICAgNy4wICAgIC0+IC0xCitkcWNvdDIyMyBjb21wYXJldG90YWwgIC04RSswICAgNy4wICAgIC0+IC0xCitkcWNvdDIyNCBjb21wYXJldG90YWwgIC04MEUtMSAgNy4wICAgIC0+IC0xCitkcWNvdDIyNSBjb21wYXJldG90YWwgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkcWNvdDIyNiBjb21wYXJldG90YWwgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkcWNvdDIyNyBjb21wYXJldG90YWwgIC04LjAgICAgN0UrMCAgIC0+IC0xCitkcWNvdDIyOCBjb21wYXJldG90YWwgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkcWNvdDIyOSBjb21wYXJldG90YWwgIC04ICAgICAgMC43RSsxIC0+IC0xCitkcWNvdDIzMCBjb21wYXJldG90YWwgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2RxY290MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RxY290MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RxY290MjQyIGNvbXBhcmV0b3RhbCAgLTggICAgICA5LjAgICAgLT4gLTEKK2RxY290MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RxY290MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RxY290MjQ1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY290MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RxY290MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTEKK2RxY290MjQ4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2RxY290MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RxY290MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZHFjb3QzMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIC03LjAgICAgLT4gMQorZHFjb3QzMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIC03ICAgICAgLT4gMQorZHFjb3QzMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIC03LjAgICAgLT4gMQorZHFjb3QzMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIC03LjAgICAgLT4gMQorZHFjb3QzMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03LjAgICAgLT4gMQorZHFjb3QzMDUgY29tcGFyZXRvdGFsICAgLjdFKzEgIC03ICAgICAgLT4gMQorZHFjb3QzMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03ICAgICAgLT4gMQorZHFjb3QzMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIC03RSswICAgLT4gMQorZHFjb3QzMDggY29tcGFyZXRvdGFsICAgNy4wICAgIC03MEUtMSAgLT4gMQorZHFjb3QzMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIC0uN0UrMSAgLT4gMQorZHFjb3QzMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkcWNvdDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxCitkcWNvdDMyMSBjb21wYXJldG90YWwgICA4LjAgICAgLTcgICAgICAtPiAxCitkcWNvdDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxCitkcWNvdDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxCitkcWNvdDMyNCBjb21wYXJldG90YWwgICA4MEUtMSAgLTcuMCAgICAtPiAxCitkcWNvdDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxCitkcWNvdDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxCitkcWNvdDMyNyBjb21wYXJldG90YWwgICA4LjAgICAgLTdFKzAgICAtPiAxCitkcWNvdDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxCitkcWNvdDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxCitkcWNvdDMzMCBjb21wYXJldG90YWwgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2RxY290MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RxY290MzQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RxY290MzQyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOS4wICAgIC0+IDEKK2RxY290MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RxY290MzQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RxY290MzQ1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtOSAgICAgIC0+IDEKK2RxY290MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RxY290MzQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RxY290MzQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2RxY290MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RxY290MzUwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZHFjb3Q0MDAgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2RxY290NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxCitkcWNvdDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTEKK2RxY290NDAzIGNvbXBhcmV0b3RhbCAgIC03RSswICAgLTcuMCAgICAtPiAtMQorZHFjb3Q0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RxY290NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitkcWNvdDQwNiBjb21wYXJldG90YWwgICAtNzBFLTEgIC03ICAgICAgLT4gMQorZHFjb3Q0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDEKK2RxY290NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwCitkcWNvdDQwOSBjb21wYXJldG90YWwgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZHFjb3Q0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xCisKK2RxY290NDIwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZHFjb3Q0MjEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitkcWNvdDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RxY290NDIzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZHFjb3Q0MjQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitkcWNvdDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RxY290NDI2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZHFjb3Q0MjcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitkcWNvdDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RxY290NDI5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZHFjb3Q0MzAgY29tcGFyZXRvdGFsICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2RxY290NDQwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkcWNvdDQ0MSBjb21wYXJldG90YWwgICAtOC4wICAgIC05ICAgICAgLT4gMQorZHFjb3Q0NDIgY29tcGFyZXRvdGFsICAgLTggICAgICAtOS4wICAgIC0+IDEKK2RxY290NDQzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTkuMCAgICAtPiAxCitkcWNvdDQ0NCBjb21wYXJldG90YWwgICAtODBFLTEgIC05LjAgICAgLT4gMQorZHFjb3Q0NDUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2RxY290NDQ2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkcWNvdDQ0NyBjb21wYXJldG90YWwgICAtOC4wICAgIC05RSswICAgLT4gMQorZHFjb3Q0NDggY29tcGFyZXRvdGFsICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2RxY290NDQ5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS45RSsxICAtPiAxCitkcWNvdDQ1MCBjb21wYXJldG90YWwgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZHFjb3Q0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0NzQgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkcWNvdDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0NzcgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkcWNvdDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0ODAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkcWNvdDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0ODMgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RxY290NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgLT4gMQorZHFjb3Q0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDEKK2RxY290NDg5IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDEKK2RxY290NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQorZHFjb3Q0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDEKK2RxY290NDkyIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDEKK2RxY290NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgLT4gMQorZHFjb3Q0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDEKK2RxY290NDk1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDEKK2RxY290NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQorZHFjb3Q0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZHFjb3Q0OTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE3ICAgIC0+IDEKK2RxY290NDk5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNiAgICAtPiAxCitkcWNvdDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQorZHFjb3Q1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RxY290NTAyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMyAgICAtPiAxCitkcWNvdDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQorZHFjb3Q1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RxY290NTA1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMCAgICAtPiAxCitkcWNvdDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQorZHFjb3Q1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RxY290NTA4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS03ICAgICAtPiAxCitkcWNvdDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQorZHFjb3Q1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RxY290NTExIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS00ICAgICAtPiAxCitkcWNvdDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQorZHFjb3Q1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RxY290NTE0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xICAgICAtPiAxCitkcWNvdDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMAorZHFjb3Q1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkcWNvdDUxNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY290NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQorZHFjb3Q1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkcWNvdDUyMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RxY290NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQorZHFjb3Q1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkcWNvdDUyNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RxY290NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQorZHFjb3Q1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkcWNvdDUyNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RxY290NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQorZHFjb3Q1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkcWNvdDUzMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RxY290NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQorZHFjb3Q1MzIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE2ICAgIC0+IC0xCitkcWNvdDUzMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTcgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RxY290NTM4IGNvbXBhcmV0b3RhbCAgICAxRS0xNyAgMSAgICAgICAtPiAtMQorZHFjb3Q1MzkgY29tcGFyZXRvdGFsICAgIDFFLTE2ICAxICAgICAgIC0+IC0xCitkcWNvdDU0MCBjb21wYXJldG90YWwgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RxY290NTQxIGNvbXBhcmV0b3RhbCAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDIgY29tcGFyZXRvdGFsICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkcWNvdDU0MyBjb21wYXJldG90YWwgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RxY290NTQ0IGNvbXBhcmV0b3RhbCAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDUgY29tcGFyZXRvdGFsICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkcWNvdDU0NiBjb21wYXJldG90YWwgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RxY290NTQ3IGNvbXBhcmV0b3RhbCAgICAxRS04ICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDggY29tcGFyZXRvdGFsICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkcWNvdDU0OSBjb21wYXJldG90YWwgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RxY290NTUwIGNvbXBhcmV0b3RhbCAgICAxRS01ICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NTEgY29tcGFyZXRvdGFsICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkcWNvdDU1MiBjb21wYXJldG90YWwgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RxY290NTUzIGNvbXBhcmV0b3RhbCAgICAxRS0yICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NTQgY29tcGFyZXRvdGFsICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkcWNvdDU1NSBjb21wYXJldG90YWwgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RxY290NTU2IGNvbXBhcmV0b3RhbCAgICAxRSsxICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NTcgY29tcGFyZXRvdGFsICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkcWNvdDU1OCBjb21wYXJldG90YWwgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RxY290NTU5IGNvbXBhcmV0b3RhbCAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjEgY29tcGFyZXRvdGFsICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkcWNvdDU2MiBjb21wYXJldG90YWwgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RxY290NTYzIGNvbXBhcmV0b3RhbCAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjQgY29tcGFyZXRvdGFsICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkcWNvdDU2NSBjb21wYXJldG90YWwgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RxY290NTY2IGNvbXBhcmV0b3RhbCAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjcgY29tcGFyZXRvdGFsICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkcWNvdDU2OCBjb21wYXJldG90YWwgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RxY290NTY5IGNvbXBhcmV0b3RhbCAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorZHFjb3Q1NzAgY29tcGFyZXRvdGFsICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkcWNvdDU3MSBjb21wYXJldG90YWwgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKK2RxY290NTcyIGNvbXBhcmV0b3RhbCAgICAxRSsxNiAgMSAgICAgICAtPiAgMQorZHFjb3Q1NzMgY29tcGFyZXRvdGFsICAgIDFFKzE3ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RxY290NTc4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgIC0+IDEKK2RxY290NTc5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgIC0+IDEKK2RxY290NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY290NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDEKK2RxY290NTgyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RxY290NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RxY290NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDEKK2RxY290NTg1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RxY290NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RxY290NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDEKK2RxY290NTg4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RxY290NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkcWNvdDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQorZHFjb3Q1OTEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RxY290NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkcWNvdDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQorZHFjb3Q1OTQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RxY290NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkcWNvdDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQorZHFjb3Q1OTcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY290NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkcWNvdDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZHFjb3Q2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwMSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjAyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwNCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjA1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwNyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjA4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYxMCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RxY290NjExIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQorZHFjb3Q2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkcWNvdDYxMyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RxY290NjE0IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQorZHFjb3Q2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkcWNvdDYxNiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RxY290NjE3IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQorZHFjb3Q2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkcWNvdDYxOSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RxY290NjIwIGNvbXBhcmV0b3RhbCAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyMiBjb21wYXJldG90YWwgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjIzIGNvbXBhcmV0b3RhbCAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyNSBjb21wYXJldG90YWwgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjI2IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyOCBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjI5IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkcWNvdDYzMSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RxY290NjMyIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQorZHFjb3Q2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkcWNvdDYzNCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RxY290NjM1IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQorZHFjb3Q2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkcWNvdDYzNyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RxY290NjM4IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQorZHFjb3Q2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcWNvdDY0MCBjb21wYXJldG90YWwgICAwICAgICAwICAgLT4gMAorZHFjb3Q2NDEgY29tcGFyZXRvdGFsICAgMCAgICAtMCAgIC0+IDEKK2RxY290NjQyIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAuMCAtPiAxCitkcWNvdDY0MyBjb21wYXJldG90YWwgICAwICAgICAwLjAgLT4gMQorZHFjb3Q2NDQgY29tcGFyZXRvdGFsICAtMCAgICAgMCAgIC0+IC0xCitkcWNvdDY0NSBjb21wYXJldG90YWwgIC0wICAgIC0wICAgLT4gMAorZHFjb3Q2NDYgY29tcGFyZXRvdGFsICAtMCAgICAtMC4wIC0+IC0xCitkcWNvdDY0NyBjb21wYXJldG90YWwgIC0wICAgICAwLjAgLT4gLTEKK2RxY290NjQ4IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAgICAtPiAtMQorZHFjb3Q2NDkgY29tcGFyZXRvdGFsICAgMC4wICAtMCAgIC0+IDEKK2RxY290NjUwIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAuMCAtPiAxCitkcWNvdDY1MSBjb21wYXJldG90YWwgICAwLjAgICAwLjAgLT4gMAorZHFjb3Q2NTIgY29tcGFyZXRvdGFsICAtMC4wICAgMCAgIC0+IC0xCitkcWNvdDY1MyBjb21wYXJldG90YWwgIC0wLjAgIC0wICAgLT4gMQorZHFjb3Q2NTQgY29tcGFyZXRvdGFsICAtMC4wICAtMC4wIC0+IDAKK2RxY290NjU1IGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAuMCAtPiAtMQorCitkcWNvdDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTEKK2RxY290NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQorZHFjb3Q2NTggY29tcGFyZXRvdGFsICAgMEUxICAgMC4wIC0+IDEKK2RxY290NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxCitkcWNvdDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTEKK2RxY290NjYxIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAgICAtPiAtMQorZHFjb3Q2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDEKK2RxY290NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxCitkcWNvdDY2NCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTEgLT4gMAorZHFjb3Q2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xCitkcWNvdDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQorZHFjb3Q2NjcgY29tcGFyZXRvdGFsICAgMEUyICAtMEUxIC0+IDEKK2RxY290NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxCitkcWNvdDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMAorZHFjb3Q2NzAgY29tcGFyZXRvdGFsICAgMEUxICAtMEUyIC0+IDEKK2RxY290NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxCitkcWNvdDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTEKK2RxY290NjczIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMSAtPiAtMQorZHFjb3Q2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDAKK2RxY290Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxCitkcWNvdDY3NiBjb21wYXJldG90YWwgIC0wRTEgICAwRTIgLT4gLTEKK2RxY290Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQorZHFjb3Q2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xCitkcWNvdDY3OSBjb21wYXJldG90YWwgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkcWNvdDY4MCBjb21wYXJldG90YWwgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZHFjb3Q2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDEKK2RxY290NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxCitkcWNvdDY4MyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMQorZHFjb3Q2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDEKK2RxY290Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxCitkcWNvdDY4NiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMQorZHFjb3Q2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDEKK2RxY290Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxCitkcWNvdDY4OSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMQorZHFjb3Q2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2RxY290NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAgIDEyIC0+IC0xCitkcWNvdDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTEKK2RxY290Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IC0xCitkcWNvdDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTEKK2RxY290Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IC0xCitkcWNvdDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTEKKworLS0gb2xkIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RxY290NzAxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAgMSAtPiAgMQorZHFjb3Q3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xCitkcWNvdDcwMyBjb21wYXJldG90YWwgMTIzNDU2NzgwMCAgIDEgLT4gIDEKK2RxY290NzA0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgICAtPiAtMQorZHFjb3Q3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxCitkcWNvdDcwNiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwICAgLT4gLTEKK2RxY290NzA3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAgMSAtPiAgMQorZHFjb3Q3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xCitkcWNvdDcwOSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MDEgIDEgLT4gIDEKK2RxY290NzEwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxICAtPiAtMQorZHFjb3Q3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxCitkcWNvdDcxMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODk2ICAgLT4gLTEKK2RxY290NzEzIGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MSAgMSAtPiAtMQorZHFjb3Q3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxCitkcWNvdDcxNSBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTAxIDEgLT4gLTEKK2RxY290NzE2IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkwMSAtPiAgMQorZHFjb3Q3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xCitkcWNvdDcxOCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5NiAgLT4gIDEKKworLS0gb2xkIHJlc2lkdWUgY2FzZXMKK2RxY290NzQwIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTk5ICAtPiAxCitkcWNvdDc0MSBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5ICAgLT4gMQorZHFjb3Q3NDIgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5ICAgIC0+IDEKK2RxY290NzQzIGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwICAgICAtPiAxCitkcWNvdDc0NCBjb21wYXJldG90YWwgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RxY290NzQ1IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDEgICAtPiAtMQorZHFjb3Q3NDYgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMDEgIC0+IC0xCitkcWNvdDc1MCBjb21wYXJldG90YWwgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RxY290NzUxIGNvbXBhcmV0b3RhbCAgMC45OTk5OTkgICAxICAtPiAtMQorZHFjb3Q3NTIgY29tcGFyZXRvdGFsICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkcWNvdDc1MyBjb21wYXJldG90YWwgIDEuMDAwMCAgICAgMSAgLT4gLTEKK2RxY290NzU0IGNvbXBhcmV0b3RhbCAgMS4wMDAwMSAgICAxICAtPiAxCitkcWNvdDc1NSBjb21wYXJldG90YWwgIDEuMDAwMDAxICAgMSAgLT4gMQorZHFjb3Q3NTYgY29tcGFyZXRvdGFsICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RxY290NzgwIGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDEKK2RxY290NzgxIGNvbXBhcmV0b3RhbCAgSW5mICAtMTAwMCAgLT4gIDEKK2RxY290NzgyIGNvbXBhcmV0b3RhbCAgSW5mICAtMSAgICAgLT4gIDEKK2RxY290NzgzIGNvbXBhcmV0b3RhbCAgSW5mICAtMCAgICAgLT4gIDEKK2RxY290Nzg0IGNvbXBhcmV0b3RhbCAgSW5mICAgMCAgICAgLT4gIDEKK2RxY290Nzg1IGNvbXBhcmV0b3RhbCAgSW5mICAgMSAgICAgLT4gIDEKK2RxY290Nzg2IGNvbXBhcmV0b3RhbCAgSW5mICAgMTAwMCAgLT4gIDEKK2RxY290Nzg3IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKK2RxY290Nzg4IGNvbXBhcmV0b3RhbCAtMTAwMCAgSW5mICAgLT4gLTEKK2RxY290Nzg5IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKK2RxY290NzkwIGNvbXBhcmV0b3RhbCAtMSAgICAgSW5mICAgLT4gLTEKK2RxY290NzkxIGNvbXBhcmV0b3RhbCAtMCAgICAgSW5mICAgLT4gLTEKK2RxY290NzkyIGNvbXBhcmV0b3RhbCAgMCAgICAgSW5mICAgLT4gLTEKK2RxY290NzkzIGNvbXBhcmV0b3RhbCAgMSAgICAgSW5mICAgLT4gLTEKK2RxY290Nzk0IGNvbXBhcmV0b3RhbCAgMTAwMCAgSW5mICAgLT4gLTEKK2RxY290Nzk1IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKKworZHFjb3Q4MDAgY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjb3Q4MDEgY29tcGFyZXRvdGFsIC1JbmYgIC0xMDAwICAtPiAtMQorZHFjb3Q4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQorZHFjb3Q4MDMgY29tcGFyZXRvdGFsIC1JbmYgIC0wICAgICAtPiAtMQorZHFjb3Q4MDQgY29tcGFyZXRvdGFsIC1JbmYgICAwICAgICAtPiAtMQorZHFjb3Q4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQorZHFjb3Q4MDYgY29tcGFyZXRvdGFsIC1JbmYgICAxMDAwICAtPiAtMQorZHFjb3Q4MDcgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQorZHFjb3Q4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjb3Q4MDkgY29tcGFyZXRvdGFsIC0xMDAwIC1JbmYgICAtPiAgMQorZHFjb3Q4MTAgY29tcGFyZXRvdGFsIC0xICAgIC1JbmYgICAtPiAgMQorZHFjb3Q4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQorZHFjb3Q4MTIgY29tcGFyZXRvdGFsICAwICAgIC1JbmYgICAtPiAgMQorZHFjb3Q4MTMgY29tcGFyZXRvdGFsICAxICAgIC1JbmYgICAtPiAgMQorZHFjb3Q4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQorZHFjb3Q4MTUgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQorCitkcWNvdDgyMSBjb21wYXJldG90YWwgIE5hTiAtSW5mICAgIC0+ICAxCitkcWNvdDgyMiBjb21wYXJldG90YWwgIE5hTiAtMTAwMCAgIC0+ICAxCitkcWNvdDgyMyBjb21wYXJldG90YWwgIE5hTiAtMSAgICAgIC0+ICAxCitkcWNvdDgyNCBjb21wYXJldG90YWwgIE5hTiAtMCAgICAgIC0+ICAxCitkcWNvdDgyNSBjb21wYXJldG90YWwgIE5hTiAgMCAgICAgIC0+ICAxCitkcWNvdDgyNiBjb21wYXJldG90YWwgIE5hTiAgMSAgICAgIC0+ICAxCitkcWNvdDgyNyBjb21wYXJldG90YWwgIE5hTiAgMTAwMCAgIC0+ICAxCitkcWNvdDgyOCBjb21wYXJldG90YWwgIE5hTiAgSW5mICAgIC0+ICAxCitkcWNvdDgyOSBjb21wYXJldG90YWwgIE5hTiAgTmFOICAgIC0+ICAwCitkcWNvdDgzMCBjb21wYXJldG90YWwgLUluZiAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzEgY29tcGFyZXRvdGFsIC0xMDAwIE5hTiAgICAtPiAgLTEKK2RxY290ODMyIGNvbXBhcmV0b3RhbCAtMSAgICBOYU4gICAgLT4gIC0xCitkcWNvdDgzMyBjb21wYXJldG90YWwgLTAgICAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzQgY29tcGFyZXRvdGFsICAwICAgIE5hTiAgICAtPiAgLTEKK2RxY290ODM1IGNvbXBhcmV0b3RhbCAgMSAgICBOYU4gICAgLT4gIC0xCitkcWNvdDgzNiBjb21wYXJldG90YWwgIDEwMDAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzcgY29tcGFyZXRvdGFsICBJbmYgIE5hTiAgICAtPiAgLTEKK2RxY290ODM4IGNvbXBhcmV0b3RhbCAtTmFOIC1OYU4gICAgLT4gIDAKK2RxY290ODM5IGNvbXBhcmV0b3RhbCArTmFOIC1OYU4gICAgLT4gIDEKK2RxY290ODQwIGNvbXBhcmV0b3RhbCAtTmFOICtOYU4gICAgLT4gIC0xCisKK2RxY290ODQxIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgLT4gIDEKK2RxY290ODQyIGNvbXBhcmV0b3RhbCAgc05hTiAtTmFOICAgLT4gIDEKK2RxY290ODQzIGNvbXBhcmV0b3RhbCAgc05hTiAtSW5mICAgLT4gIDEKK2RxY290ODQ0IGNvbXBhcmV0b3RhbCAgc05hTiAtMTAwMCAgLT4gIDEKK2RxY290ODQ1IGNvbXBhcmV0b3RhbCAgc05hTiAtMSAgICAgLT4gIDEKK2RxY290ODQ2IGNvbXBhcmV0b3RhbCAgc05hTiAtMCAgICAgLT4gIDEKK2RxY290ODQ3IGNvbXBhcmV0b3RhbCAgc05hTiAgMCAgICAgLT4gIDEKK2RxY290ODQ4IGNvbXBhcmV0b3RhbCAgc05hTiAgMSAgICAgLT4gIDEKK2RxY290ODQ5IGNvbXBhcmV0b3RhbCAgc05hTiAgMTAwMCAgLT4gIDEKK2RxY290ODUwIGNvbXBhcmV0b3RhbCAgc05hTiAgTmFOICAgLT4gIC0xCitkcWNvdDg1MSBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RxY290ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xCitkcWNvdDg1MyBjb21wYXJldG90YWwgLU5hTiAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NTQgY29tcGFyZXRvdGFsIC1JbmYgIHNOYU4gICAtPiAgLTEKK2RxY290ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xCitkcWNvdDg1NiBjb21wYXJldG90YWwgLTEgICAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NTcgY29tcGFyZXRvdGFsIC0wICAgIHNOYU4gICAtPiAgLTEKK2RxY290ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xCitkcWNvdDg1OSBjb21wYXJldG90YWwgIDEgICAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NjAgY29tcGFyZXRvdGFsICAxMDAwIHNOYU4gICAtPiAgLTEKK2RxY290ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xCitkcWNvdDg2MiBjb21wYXJldG90YWwgIE5hTiAgc05hTiAgIC0+ICAxCitkcWNvdDg2MyBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RxY290ODcxIGNvbXBhcmV0b3RhbCAgLXNOYU4gLXNOYU4gIC0+ICAwCitkcWNvdDg3MiBjb21wYXJldG90YWwgIC1zTmFOIC1OYU4gICAtPiAgMQorZHFjb3Q4NzMgY29tcGFyZXRvdGFsICAtc05hTiAtSW5mICAgLT4gIC0xCitkcWNvdDg3NCBjb21wYXJldG90YWwgIC1zTmFOIC0xMDAwICAtPiAgLTEKK2RxY290ODc1IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEgICAgIC0+ICAtMQorZHFjb3Q4NzYgY29tcGFyZXRvdGFsICAtc05hTiAtMCAgICAgLT4gIC0xCitkcWNvdDg3NyBjb21wYXJldG90YWwgIC1zTmFOICAwICAgICAtPiAgLTEKK2RxY290ODc4IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEgICAgIC0+ICAtMQorZHFjb3Q4NzkgY29tcGFyZXRvdGFsICAtc05hTiAgMTAwMCAgLT4gIC0xCitkcWNvdDg4MCBjb21wYXJldG90YWwgIC1zTmFOICBOYU4gICAtPiAgLTEKK2RxY290ODgxIGNvbXBhcmV0b3RhbCAgLXNOYU4gc05hTiAgIC0+ICAtMQorCitkcWNvdDg4MiBjb21wYXJldG90YWwgLXNOYU4gLXNOYU4gICAtPiAgMAorZHFjb3Q4ODMgY29tcGFyZXRvdGFsIC1OYU4gIC1zTmFOICAgLT4gIC0xCitkcWNvdDg4NCBjb21wYXJldG90YWwgLUluZiAgLXNOYU4gICAtPiAgMQorZHFjb3Q4ODUgY29tcGFyZXRvdGFsIC0xMDAwIC1zTmFOICAgLT4gIDEKK2RxY290ODg2IGNvbXBhcmV0b3RhbCAtMSAgICAtc05hTiAgIC0+ICAxCitkcWNvdDg4NyBjb21wYXJldG90YWwgLTAgICAgLXNOYU4gICAtPiAgMQorZHFjb3Q4ODggY29tcGFyZXRvdGFsICAwICAgIC1zTmFOICAgLT4gIDEKK2RxY290ODg5IGNvbXBhcmV0b3RhbCAgMSAgICAtc05hTiAgIC0+ICAxCitkcWNvdDg5MCBjb21wYXJldG90YWwgIDEwMDAgLXNOYU4gICAtPiAgMQorZHFjb3Q4OTEgY29tcGFyZXRvdGFsICBJbmYgIC1zTmFOICAgLT4gIDEKK2RxY290ODkyIGNvbXBhcmV0b3RhbCAgTmFOICAtc05hTiAgIC0+ICAxCitkcWNvdDg5MyBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gICAtPiAgMQorCistLSBOYU5zIHdpdGggcGF5bG9hZAorZHFjb3Q5NjAgY29tcGFyZXRvdGFsICBOYU45IC1JbmYgICAtPiAgMQorZHFjb3Q5NjEgY29tcGFyZXRvdGFsICBOYU44ICA5OTkgICAtPiAgMQorZHFjb3Q5NjIgY29tcGFyZXRvdGFsICBOYU43NyBJbmYgICAtPiAgMQorZHFjb3Q5NjMgY29tcGFyZXRvdGFsIC1OYU42NyBOYU41ICAtPiAgLTEKK2RxY290OTY0IGNvbXBhcmV0b3RhbCAtSW5mICAtTmFONCAgLT4gIDEKK2RxY290OTY1IGNvbXBhcmV0b3RhbCAtOTk5ICAtTmFOMzMgLT4gIDEKK2RxY290OTY2IGNvbXBhcmV0b3RhbCAgSW5mICAgTmFOMiAgLT4gIC0xCisKK2RxY290OTcwIGNvbXBhcmV0b3RhbCAtTmFONDEgLU5hTjQyIC0+IDEKK2RxY290OTcxIGNvbXBhcmV0b3RhbCArTmFONDEgLU5hTjQyIC0+IDEKK2RxY290OTcyIGNvbXBhcmV0b3RhbCAtTmFONDEgK05hTjQyIC0+IC0xCitkcWNvdDk3MyBjb21wYXJldG90YWwgK05hTjQxICtOYU40MiAtPiAtMQorZHFjb3Q5NzQgY29tcGFyZXRvdGFsIC1OYU40MiAtTmFOMDEgLT4gLTEKK2RxY290OTc1IGNvbXBhcmV0b3RhbCArTmFONDIgLU5hTjAxIC0+ICAxCitkcWNvdDk3NiBjb21wYXJldG90YWwgLU5hTjQyICtOYU4wMSAtPiAtMQorZHFjb3Q5NzcgY29tcGFyZXRvdGFsICtOYU40MiArTmFOMDEgLT4gIDEKKworZHFjb3Q5ODAgY29tcGFyZXRvdGFsIC1zTmFONzcxIC1zTmFONzcyIC0+IDEKK2RxY290OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxCitkcWNvdDk4MiBjb21wYXJldG90YWwgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKK2RxY290OTgzIGNvbXBhcmV0b3RhbCArc05hTjc3MSArc05hTjc3MiAtPiAtMQorZHFjb3Q5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xCitkcWNvdDk4NSBjb21wYXJldG90YWwgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKK2RxY290OTg2IGNvbXBhcmV0b3RhbCAtc05hTjc3MiArc05hTjc3MSAtPiAtMQorZHFjb3Q5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxCisKK2RxY290OTkxIGNvbXBhcmV0b3RhbCAtc05hTjk5IC1JbmYgICAgLT4gLTEKK2RxY290OTkyIGNvbXBhcmV0b3RhbCAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2RxY290OTkzIGNvbXBhcmV0b3RhbCAgc05hTjk3ICBOYU4gICAgLT4gLTEKK2RxY290OTk0IGNvbXBhcmV0b3RhbCAgc05hTjE2IHNOYU45NCAgLT4gLTEKK2RxY290OTk1IGNvbXBhcmV0b3RhbCAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2RxY290OTk2IGNvbXBhcmV0b3RhbCAtSW5mICAgIHNOYU45MiAgLT4gLTEKK2RxY290OTk3IGNvbXBhcmV0b3RhbCAgMDg4ICAgIHNOYU44MSAgLT4gLTEKK2RxY290OTk4IGNvbXBhcmV0b3RhbCAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2RxY290OTk5IGNvbXBhcmV0b3RhbCAgTmFOICAgLXNOYU44OSAgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitkcWNvdDExMTAgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAgMCAgICAgICAtPiAtMQorZHFjb3QxMTExIGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgLTAgICAgICAgLT4gIDEKK2RxY290MTExMiBjb21wYXJldG90YWwgIC0wRS02MTQzICAwICAgICAgIC0+IC0xCitkcWNvdDExMTMgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAtMCAgICAgICAtPiAgMQorZHFjb3QxMTE0IGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgIDBFKzYxNDQgIC0+IC0xCitkcWNvdDExMTUgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAtMEUrNjE0NCAgLT4gIDEKK2RxY290MTExNiBjb21wYXJldG90YWwgIC0wRS02MTQzICAwRSs2MTQ0ICAtPiAtMQorZHFjb3QxMTE3IGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgLTBFKzYxNDQgIC0+ICAxCitkcWNvdDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSs2MTQ0ICAtPiAtMQorZHFjb3QxMTE5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUrNjE0NCAgLT4gIDEKK2RxY290MTEyMCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFKzYxNDQgIC0+IC0xCitkcWNvdDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSs2MTQ0ICAtPiAgMQorCitkcWNvdDExMzAgY29tcGFyZXRvdGFsICAgMEUrNjE0NCAgMCAgICAgICAtPiAgMQorZHFjb3QxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgLTAgICAgICAgLT4gIDEKK2RxY290MTEzMiBjb21wYXJldG90YWwgIC0wRSs2MTQ0ICAwICAgICAgIC0+IC0xCitkcWNvdDExMzMgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAtMCAgICAgICAtPiAtMQorZHFjb3QxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgIDBFLTYxNDMgIC0+ICAxCitkcWNvdDExMzUgY29tcGFyZXRvdGFsICAgMEUrNjE0NCAtMEUtNjE0MyAgLT4gIDEKK2RxY290MTEzNiBjb21wYXJldG90YWwgIC0wRSs2MTQ0ICAwRS02MTQzICAtPiAtMQorZHFjb3QxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgLTBFLTYxNDMgIC0+IC0xCitkcWNvdDExMzggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRS02MTQzICAtPiAgMQorZHFjb3QxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtNjE0MyAgLT4gIDEKK2RxY290MTE0MCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFLTYxNDMgIC0+IC0xCitkcWNvdDExNDEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRS02MTQzICAtPiAtMQorCistLSBOdWxsIHRlc3RzCitkcWNvdDk5OTAgY29tcGFyZXRvdGFsIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFjb3Q5OTkxIGNvbXBhcmV0b3RhbCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlVG90YWxNYWcuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlVG90YWxNYWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjgxYmZiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbE1hZy5kZWNUZXN0CkBAIC0wLDAgKzEsNzA2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uOyBhYnMuIHRvdGFsIG9yZGVyICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCistLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCistLSB0aGFuIGNvbXBhcmUuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWN0bTAwMSBjb21wYXJldG90bWFnICAtMiAgLTIgICAtPiAgIDAKK2RxY3RtMDAyIGNvbXBhcmV0b3RtYWcgIC0yICAtMSAgIC0+ICAgMQorZHFjdG0wMDMgY29tcGFyZXRvdG1hZyAgLTIgICAwICAgLT4gICAxCitkcWN0bTAwNCBjb21wYXJldG90bWFnICAtMiAgIDEgICAtPiAgIDEKK2RxY3RtMDA1IGNvbXBhcmV0b3RtYWcgIC0yICAgMiAgIC0+ICAgMAorZHFjdG0wMDYgY29tcGFyZXRvdG1hZyAgLTEgIC0yICAgLT4gIC0xCitkcWN0bTAwNyBjb21wYXJldG90bWFnICAtMSAgLTEgICAtPiAgIDAKK2RxY3RtMDA4IGNvbXBhcmV0b3RtYWcgIC0xICAgMCAgIC0+ICAgMQorZHFjdG0wMDkgY29tcGFyZXRvdG1hZyAgLTEgICAxICAgLT4gICAwCitkcWN0bTAxMCBjb21wYXJldG90bWFnICAtMSAgIDIgICAtPiAgLTEKK2RxY3RtMDExIGNvbXBhcmV0b3RtYWcgICAwICAtMiAgIC0+ICAtMQorZHFjdG0wMTIgY29tcGFyZXRvdG1hZyAgIDAgIC0xICAgLT4gIC0xCitkcWN0bTAxMyBjb21wYXJldG90bWFnICAgMCAgIDAgICAtPiAgIDAKK2RxY3RtMDE0IGNvbXBhcmV0b3RtYWcgICAwICAgMSAgIC0+ICAtMQorZHFjdG0wMTUgY29tcGFyZXRvdG1hZyAgIDAgICAyICAgLT4gIC0xCitkcWN0bTAxNiBjb21wYXJldG90bWFnICAgMSAgLTIgICAtPiAgLTEKK2RxY3RtMDE3IGNvbXBhcmV0b3RtYWcgICAxICAtMSAgIC0+ICAgMAorZHFjdG0wMTggY29tcGFyZXRvdG1hZyAgIDEgICAwICAgLT4gICAxCitkcWN0bTAxOSBjb21wYXJldG90bWFnICAgMSAgIDEgICAtPiAgIDAKK2RxY3RtMDIwIGNvbXBhcmV0b3RtYWcgICAxICAgMiAgIC0+ICAtMQorZHFjdG0wMjEgY29tcGFyZXRvdG1hZyAgIDIgIC0yICAgLT4gICAwCitkcWN0bTAyMiBjb21wYXJldG90bWFnICAgMiAgLTEgICAtPiAgIDEKK2RxY3RtMDIzIGNvbXBhcmV0b3RtYWcgICAyICAgMCAgIC0+ICAgMQorZHFjdG0wMjUgY29tcGFyZXRvdG1hZyAgIDIgICAxICAgLT4gICAxCitkcWN0bTAyNiBjb21wYXJldG90bWFnICAgMiAgIDIgICAtPiAgIDAKKworZHFjdG0wMzEgY29tcGFyZXRvdG1hZyAgLTIwICAtMjAgICAtPiAgIDAKK2RxY3RtMDMyIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTEwICAgLT4gICAxCitkcWN0bTAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQorZHFjdG0wMzQgY29tcGFyZXRvdG1hZyAgLTIwICAgMTAgICAtPiAgIDEKK2RxY3RtMDM1IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDIwICAgLT4gICAwCitkcWN0bTAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQorZHFjdG0wMzcgY29tcGFyZXRvdG1hZyAgLTEwICAtMTAgICAtPiAgIDAKK2RxY3RtMDM4IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDAwICAgLT4gICAxCitkcWN0bTAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMAorZHFjdG0wNDAgY29tcGFyZXRvdG1hZyAgLTEwICAgMjAgICAtPiAgLTEKK2RxY3RtMDQxIGNvbXBhcmV0b3RtYWcgICAwMCAgLTIwICAgLT4gIC0xCitkcWN0bTA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQorZHFjdG0wNDMgY29tcGFyZXRvdG1hZyAgIDAwICAgMDAgICAtPiAgIDAKK2RxY3RtMDQ0IGNvbXBhcmV0b3RtYWcgICAwMCAgIDEwICAgLT4gIC0xCitkcWN0bTA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQorZHFjdG0wNDYgY29tcGFyZXRvdG1hZyAgIDEwICAtMjAgICAtPiAgLTEKK2RxY3RtMDQ3IGNvbXBhcmV0b3RtYWcgICAxMCAgLTEwICAgLT4gICAwCitkcWN0bTA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQorZHFjdG0wNDkgY29tcGFyZXRvdG1hZyAgIDEwICAgMTAgICAtPiAgIDAKK2RxY3RtMDUwIGNvbXBhcmV0b3RtYWcgICAxMCAgIDIwICAgLT4gIC0xCitkcWN0bTA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMAorZHFjdG0wNTIgY29tcGFyZXRvdG1hZyAgIDIwICAtMTAgICAtPiAgIDEKK2RxY3RtMDUzIGNvbXBhcmV0b3RtYWcgICAyMCAgIDAwICAgLT4gICAxCitkcWN0bTA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQorZHFjdG0wNTYgY29tcGFyZXRvdG1hZyAgIDIwICAgMjAgICAtPiAgIDAKKworZHFjdG0wNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMAorZHFjdG0wNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQorZHFjdG0wNjMgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDAuMCAgIC0+ICAgMQorZHFjdG0wNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQorZHFjdG0wNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMAorZHFjdG0wNjYgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTIuMCAgIC0+ICAtMQorZHFjdG0wNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMAorZHFjdG0wNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQorZHFjdG0wNjkgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDEuMCAgIC0+ICAgMAorZHFjdG0wNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQorZHFjdG0wNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQorZHFjdG0wNzIgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTEuMCAgIC0+ICAtMQorZHFjdG0wNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMAorZHFjdG0wNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQorZHFjdG0wNzUgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDIuMCAgIC0+ICAtMQorZHFjdG0wNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQorZHFjdG0wNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMAorZHFjdG0wNzggY29tcGFyZXRvdG1hZyAgIDEuMCAgIDAuMCAgIC0+ICAgMQorZHFjdG0wNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMAorZHFjdG0wODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQorZHFjdG0wODEgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTIuMCAgIC0+ICAgMAorZHFjdG0wODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQorZHFjdG0wODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQorZHFjdG0wODUgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDEuMCAgIC0+ICAgMQorZHFjdG0wODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RxY3RtMDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgMAorZHFjdG0wOTEgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gICAwCitkcWN0bTA5MiBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgIDAKK2RxY3RtMDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICAgMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwKK2RxY3RtMTAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNy4wICAgICAtPiAgIDAKK2RxY3RtMTAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNyAgICAgICAtPiAgLTEKK2RxY3RtMTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNy4wICAgICAtPiAgIDAKK2RxY3RtMTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDAKK2RxY3RtMTA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNyAgICAgICAtPiAgLTEKK2RxY3RtMTA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgN0UrMCAgICAtPiAgLTEKK2RxY3RtMTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDAKK2RxY3RtMTA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgMC43RSsxICAtPiAgIDAKK2RxY3RtMTEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNzBFLTEgICAtPiAgIDEKKworZHFjdG0xMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0xMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3ICAgICAgIC0+ICAgMQorZHFjdG0xMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0xMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0xMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3LjAgICAgIC0+ICAgMQorZHFjdG0xMjUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA3ICAgICAgIC0+ICAgMQorZHFjdG0xMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3ICAgICAgIC0+ICAgMQorZHFjdG0xMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3RSswICAgIC0+ICAgMQorZHFjdG0xMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICA3MEUtMSAgIC0+ICAgMQorZHFjdG0xMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjdFKzEgICAtPiAgIDEKK2RxY3RtMTMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNzBFLTEgICAtPiAgIDEKKworZHFjdG0xNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0xNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5ICAgICAgIC0+ICAtMQorZHFjdG0xNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0xNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0xNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5LjAgICAgIC0+ICAtMQorZHFjdG0xNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQorZHFjdG0xNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5ICAgICAgIC0+ICAtMQorZHFjdG0xNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5RSswICAgIC0+ICAtMQorZHFjdG0xNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQorZHFjdG0xNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjlFKzEgIC0+ICAtMQorZHFjdG0xNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICA5MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitkcWN0bTIwMCBjb21wYXJldG90bWFnICAtNy4wICAgIDcuMCAgICAgLT4gICAwCitkcWN0bTIwMSBjb21wYXJldG90bWFnICAtNy4wICAgIDcgICAgICAgLT4gIC0xCitkcWN0bTIwMiBjb21wYXJldG90bWFnICAtNyAgICAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIwMyBjb21wYXJldG90bWFnICAtN0UrMCAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIwNCBjb21wYXJldG90bWFnICAtNzBFLTEgIDcuMCAgICAgLT4gICAwCitkcWN0bTIwNSBjb21wYXJldG90bWFnICAtMC43RSsxIDcgICAgICAgLT4gICAwCitkcWN0bTIwNiBjb21wYXJldG90bWFnICAtNzBFLTEgIDcgICAgICAgLT4gIC0xCitkcWN0bTIwNyBjb21wYXJldG90bWFnICAtNy4wICAgIDdFKzAgICAgLT4gIC0xCitkcWN0bTIwOCBjb21wYXJldG90bWFnICAtNy4wICAgIDcwRS0xICAgLT4gICAwCitkcWN0bTIwOSBjb21wYXJldG90bWFnICAtNyAgICAgIDAuN0UrMSAgLT4gICAwCitkcWN0bTIxMCBjb21wYXJldG90bWFnICAtNyAgICAgIDcwRS0xICAgLT4gICAxCisKK2RxY3RtMjIwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDEKK2RxY3RtMjIyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMjIzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDEKK2RxY3RtMjI1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgNyAgICAgICAtPiAgIDEKK2RxY3RtMjI2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNyAgICAgICAtPiAgIDEKK2RxY3RtMjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDEKK2RxY3RtMjI4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNzBFLTEgICAtPiAgIDEKK2RxY3RtMjI5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC43RSsxICAtPiAgIDEKK2RxY3RtMjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDEKKworZHFjdG0yNDAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0yNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQorZHFjdG0yNDIgY29tcGFyZXRvdG1hZyAgLTggICAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0yNDMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA5LjAgICAgIC0+ICAtMQorZHFjdG0yNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQorZHFjdG0yNDUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA5ICAgICAgIC0+ICAtMQorZHFjdG0yNDYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5ICAgICAgIC0+ICAtMQorZHFjdG0yNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQorZHFjdG0yNDggY29tcGFyZXRvdG1hZyAgLTguMCAgICA5MEUtMSAgIC0+ICAtMQorZHFjdG0yNDkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjlFKzEgIC0+ICAtMQorZHFjdG0yNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitkcWN0bTMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMAorZHFjdG0zMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNyAgICAgICAtPiAgLTEKK2RxY3RtMzAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQorZHFjdG0zMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNy4wICAgICAtPiAgIDAKK2RxY3RtMzA1IGNvbXBhcmV0b3RtYWcgICAuN0UrMSAgLTcgICAgICAgLT4gICAwCitkcWN0bTMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQorZHFjdG0zMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtN0UrMCAgICAtPiAgLTEKK2RxY3RtMzA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcwRS0xICAgLT4gICAwCitkcWN0bTMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMAorZHFjdG0zMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNzBFLTEgICAtPiAgIDEKKworZHFjdG0zMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtMzIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcgICAgICAgLT4gICAxCitkcWN0bTMyMiBjb21wYXJldG90bWFnICAgOCAgICAgIC03LjAgICAgIC0+ICAgMQorZHFjdG0zMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtMzI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcuMCAgICAgLT4gICAxCitkcWN0bTMyNSBjb21wYXJldG90bWFnICAgLjhFKzEgIC03ICAgICAgIC0+ICAgMQorZHFjdG0zMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDEKK2RxY3RtMzI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTdFKzAgICAgLT4gICAxCitkcWN0bTMyOCBjb21wYXJldG90bWFnICAgOC4wICAgIC03MEUtMSAgIC0+ICAgMQorZHFjdG0zMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDEKK2RxY3RtMzMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2RxY3RtMzQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTM0MSBjb21wYXJldG90bWFnICAgOC4wICAgIC05ICAgICAgIC0+ICAtMQorZHFjdG0zNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOS4wICAgICAtPiAgLTEKK2RxY3RtMzQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTM0NCBjb21wYXJldG90bWFnICAgODBFLTEgIC05LjAgICAgIC0+ICAtMQorZHFjdG0zNDUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtOSAgICAgICAtPiAgLTEKK2RxY3RtMzQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkgICAgICAgLT4gIC0xCitkcWN0bTM0NyBjb21wYXJldG90bWFnICAgOC4wICAgIC05RSswICAgIC0+ICAtMQorZHFjdG0zNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOTBFLTEgICAtPiAgLTEKK2RxY3RtMzQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS45RSsxICAgLT4gIC0xCitkcWN0bTM1MCBjb21wYXJldG90bWFnICAgOCAgICAgIC05MEUtMSAgIC0+ICAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitkcWN0bTQwMCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNy4wICAgICAtPiAgIDAKK2RxY3RtNDAxIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03ICAgICAgIC0+ICAtMQorZHFjdG00MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQwMyBjb21wYXJldG90bWFnICAgLTdFKzAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtNDA0IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03LjAgICAgIC0+ICAgMAorZHFjdG00MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwCitkcWN0bTQwNiBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNyAgICAgICAtPiAgLTEKK2RxY3RtNDA3IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03RSswICAgIC0+ICAtMQorZHFjdG00MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwCitkcWN0bTQwOSBjb21wYXJldG90bWFnICAgLTcgICAgICAtLjdFKzEgICAtPiAgIDAKK2RxY3RtNDEwIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkcWN0bTQyMCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtNDIxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03ICAgICAgIC0+ICAgMQorZHFjdG00MjIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQyMyBjb21wYXJldG90bWFnICAgLThFKzAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtNDI0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03LjAgICAgIC0+ICAgMQorZHFjdG00MjUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTcgICAgICAgLT4gICAxCitkcWN0bTQyNiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNyAgICAgICAtPiAgIDEKK2RxY3RtNDI3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03RSswICAgIC0+ICAgMQorZHFjdG00MjggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcwRS0xICAgLT4gICAxCitkcWN0bTQyOSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjdFKzEgICAtPiAgIDEKK2RxY3RtNDMwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkcWN0bTQ0MCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOS4wICAgICAtPiAgLTEKK2RxY3RtNDQxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05ICAgICAgIC0+ICAtMQorZHFjdG00NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTQ0MyBjb21wYXJldG90bWFnICAgLThFKzAgICAtOS4wICAgICAtPiAgLTEKK2RxY3RtNDQ0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05LjAgICAgIC0+ICAtMQorZHFjdG00NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xCitkcWN0bTQ0NiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOSAgICAgICAtPiAgLTEKK2RxY3RtNDQ3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05RSswICAgIC0+ICAtMQorZHFjdG00NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xCitkcWN0bTQ0OSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjlFKzEgICAtPiAgLTEKK2RxY3RtNDUwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05MEUtMSAgIC0+ICAtMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZHFjdG00NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00NzQgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCitkcWN0bTQ3NSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00NzcgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitkcWN0bTQ3OCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00ODAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCitkcWN0bTQ4MSBjb21wYXJldG90bWFnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00ODMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAgLT4gICAwCitkcWN0bTQ4NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAgLT4gICAxCitkcWN0bTQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDEKK2RxY3RtNDg5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAgLT4gICAxCitkcWN0bTQ5MCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAgLT4gICAxCitkcWN0bTQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5ICAtPiAgIDEKK2RxY3RtNDkyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAgLT4gICAxCitkcWN0bTQ5MyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAgLT4gICAxCitkcWN0bTQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDEKK2RxY3RtNDk1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAgLT4gICAxCitkcWN0bTQ5NiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAgLT4gICAxCitkcWN0bTQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5ICAtPiAgIDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZHFjdG00OTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNyAgICAgLT4gICAxCitkcWN0bTQ5OSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE2ICAgICAtPiAgIDEKK2RxY3RtNTAwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTUgICAgIC0+ICAgMQorZHFjdG01MDEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNCAgICAgLT4gICAxCitkcWN0bTUwMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEzICAgICAtPiAgIDEKK2RxY3RtNTAzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTIgICAgIC0+ICAgMQorZHFjdG01MDQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMSAgICAgLT4gICAxCitkcWN0bTUwNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEwICAgICAtPiAgIDEKK2RxY3RtNTA2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOSAgICAgIC0+ICAgMQorZHFjdG01MDcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS04ICAgICAgLT4gICAxCitkcWN0bTUwOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTcgICAgICAtPiAgIDEKK2RxY3RtNTA5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNiAgICAgIC0+ICAgMQorZHFjdG01MTAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS01ICAgICAgLT4gICAxCitkcWN0bTUxMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTQgICAgICAtPiAgIDEKK2RxY3RtNTEyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMyAgICAgIC0+ICAgMQorZHFjdG01MTMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0yICAgICAgLT4gICAxCitkcWN0bTUxNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEgICAgICAtPiAgIDEKK2RxY3RtNTE1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMCAgICAgIC0+ICAgMAorZHFjdG01MTYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxICAgICAgLT4gIC0xCitkcWN0bTUxNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzIgICAgICAtPiAgLTEKK2RxY3RtNTE4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMyAgICAgIC0+ICAtMQorZHFjdG01MTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs0ICAgICAgLT4gIC0xCitkcWN0bTUyMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzUgICAgICAtPiAgLTEKK2RxY3RtNTIyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNiAgICAgIC0+ICAtMQorZHFjdG01MjMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs3ICAgICAgLT4gIC0xCitkcWN0bTUyNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzggICAgICAtPiAgLTEKK2RxY3RtNTI1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOSAgICAgIC0+ICAtMQorZHFjdG01MjYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMCAgICAgLT4gIC0xCitkcWN0bTUyNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzExICAgICAtPiAgLTEKK2RxY3RtNTI4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTIgICAgIC0+ICAtMQorZHFjdG01MjkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMyAgICAgLT4gIC0xCitkcWN0bTUzMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE0ICAgICAtPiAgLTEKK2RxY3RtNTMxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTUgICAgIC0+ICAtMQorZHFjdG01MzIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNiAgICAgLT4gIC0xCitkcWN0bTUzMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE3ICAgICAtPiAgLTEKKy0tIExSIHN3YXAKK2RxY3RtNTM4IGNvbXBhcmV0b3RtYWcgICAgMUUtMTcgIDEgICAgICAgIC0+ICAtMQorZHFjdG01MzkgY29tcGFyZXRvdG1hZyAgICAxRS0xNiAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0MCBjb21wYXJldG90bWFnICAgIDFFLTE1ICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDIgY29tcGFyZXRvdG1hZyAgICAxRS0xMyAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0MyBjb21wYXJldG90bWFnICAgIDFFLTEyICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDUgY29tcGFyZXRvdG1hZyAgICAxRS0xMCAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0NiBjb21wYXJldG90bWFnICAgIDFFLTkgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDggY29tcGFyZXRvdG1hZyAgICAxRS03ICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0OSBjb21wYXJldG90bWFnICAgIDFFLTYgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NTEgY29tcGFyZXRvdG1hZyAgICAxRS00ICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU1MiBjb21wYXJldG90bWFnICAgIDFFLTMgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NTQgY29tcGFyZXRvdG1hZyAgICAxRS0xICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU1NSBjb21wYXJldG90bWFnICAgIDFFLTAgICAxICAgICAgICAtPiAgIDAKK2RxY3RtNTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NTcgY29tcGFyZXRvdG1hZyAgICAxRSsyICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU1OCBjb21wYXJldG90bWFnICAgIDFFKzMgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjEgY29tcGFyZXRvdG1hZyAgICAxRSs1ICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2MiBjb21wYXJldG90bWFnICAgIDFFKzYgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjQgY29tcGFyZXRvdG1hZyAgICAxRSs4ICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2NSBjb21wYXJldG90bWFnICAgIDFFKzkgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjcgY29tcGFyZXRvdG1hZyAgICAxRSsxMSAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2OCBjb21wYXJldG90bWFnICAgIDFFKzEyICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NzAgY29tcGFyZXRvdG1hZyAgICAxRSsxNCAgMSAgICAgICAgLT4gICAxCitkcWN0bTU3MSBjb21wYXJldG90bWFnICAgIDFFKzE1ICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTcyIGNvbXBhcmV0b3RtYWcgICAgMUUrMTYgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NzMgY29tcGFyZXRvdG1hZyAgICAxRSsxNyAgMSAgICAgICAgLT4gICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RxY3RtNTc4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAgLT4gICAxCitkcWN0bTU3OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgIC0+ICAgMQorZHFjdG01ODAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2RxY3RtNTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxCitkcWN0bTU4MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgIC0+ICAgMQorZHFjdG01ODMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgICAtPiAgIDEKK2RxY3RtNTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxCitkcWN0bTU4NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgIC0+ICAgMQorZHFjdG01ODYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgICAtPiAgIDEKK2RxY3RtNTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxCitkcWN0bTU4OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgIC0+ICAgMQorZHFjdG01ODkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgICAtPiAgLTEKK2RxY3RtNTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xCitkcWN0bTU5MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgIC0+ICAtMQorZHFjdG01OTIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgICAtPiAgLTEKK2RxY3RtNTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xCitkcWN0bTU5NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgIC0+ICAtMQorZHFjdG01OTUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgICAtPiAgLTEKK2RxY3RtNTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xCitkcWN0bTU5NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgIC0+ICAtMQorZHFjdG01OTggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgICAtPiAgLTEKK2RxY3RtNTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkcWN0bTYwMCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjAxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwMyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjA0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwNiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjA3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwOSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjEwIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgIC0+ICAgMQorZHFjdG02MTEgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAgLT4gICAxCitkcWN0bTYxMiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgICAtPiAgIDEKK2RxY3RtNjEzIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgIC0+ICAgMQorZHFjdG02MTQgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAgLT4gICAxCitkcWN0bTYxNSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgICAtPiAgIDEKK2RxY3RtNjE2IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgIC0+ICAgMQorZHFjdG02MTcgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAgLT4gICAxCitkcWN0bTYxOCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgICAtPiAgIDEKK2RxY3RtNjE5IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgIC0+ICAgMQorZHFjdG02MjAgY29tcGFyZXRvdG1hZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyMSBjb21wYXJldG90bWFnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjIyIGNvbXBhcmV0b3RtYWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjMgY29tcGFyZXRvdG1hZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyNCBjb21wYXJldG90bWFnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjI1IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjYgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyNyBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjI4IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjkgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYzMCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIgICAgICAgICAgICAtPiAgIDEKK2RxY3RtNjMxIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgIC0+ICAgMQorZHFjdG02MzIgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAgLT4gICAxCitkcWN0bTYzMyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgICAtPiAgIDEKK2RxY3RtNjM0IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgIC0+ICAgMQorZHFjdG02MzUgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAgLT4gICAxCitkcWN0bTYzNiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgICAtPiAgIDEKK2RxY3RtNjM3IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgIC0+ICAgMQorZHFjdG02MzggY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAgLT4gICAxCitkcWN0bTYzOSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwICAtPiAgIDEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RxY3RtNjQwIGNvbXBhcmV0b3RtYWcgICAwICAgICAwICAgIC0+ICAgMAorZHFjdG02NDEgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAgICAgLT4gICAwCitkcWN0bTY0MiBjb21wYXJldG90bWFnICAgMCAgICAtMC4wICAtPiAgIDEKK2RxY3RtNjQzIGNvbXBhcmV0b3RtYWcgICAwICAgICAwLjAgIC0+ICAgMQorZHFjdG02NDQgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAgICAgLT4gICAwCitkcWN0bTY0NSBjb21wYXJldG90bWFnICAtMCAgICAtMCAgICAtPiAgIDAKK2RxY3RtNjQ2IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wLjAgIC0+ICAgMQorZHFjdG02NDcgY29tcGFyZXRvdG1hZyAgLTAgICAgIDAuMCAgLT4gICAxCitkcWN0bTY0OCBjb21wYXJldG90bWFnICAgMC4wICAgMCAgICAtPiAgLTEKK2RxY3RtNjQ5IGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wICAgIC0+ICAtMQorZHFjdG02NTAgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAuMCAgLT4gICAwCitkcWN0bTY1MSBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAtPiAgIDAKK2RxY3RtNjUyIGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwICAgIC0+ICAtMQorZHFjdG02NTMgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAgICAgLT4gIC0xCitkcWN0bTY1NCBjb21wYXJldG90bWFnICAtMC4wICAtMC4wICAtPiAgIDAKK2RxY3RtNjU1IGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwLjAgIC0+ICAgMAorCitkcWN0bTY1NiBjb21wYXJldG90bWFnICAtMEUxICAgMC4wICAtPiAgIDEKK2RxY3RtNjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQorZHFjdG02NTggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAuMCAgLT4gICAxCitkcWN0bTY1OSBjb21wYXJldG90bWFnICAgMEUyICAgMC4wICAtPiAgIDEKK2RxY3RtNjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQorZHFjdG02NjEgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAgICAgLT4gICAxCitkcWN0bTY2MiBjb21wYXJldG90bWFnICAgMEUxICAgMCAgICAtPiAgIDEKK2RxY3RtNjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQorZHFjdG02NjQgY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMSAgLT4gICAwCitkcWN0bTY2NSBjb21wYXJldG90bWFnICAtMEUyICAtMEUxICAtPiAgIDEKK2RxY3RtNjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMAorZHFjdG02NjcgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMSAgLT4gICAxCitkcWN0bTY2OCBjb21wYXJldG90bWFnICAtMEUxICAtMEUyICAtPiAgLTEKK2RxY3RtNjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMAorZHFjdG02NzAgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMiAgLT4gIC0xCitkcWN0bTY3MSBjb21wYXJldG90bWFnICAgMEUyICAtMEUyICAtPiAgIDAKK2RxY3RtNjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMAorZHFjdG02NzMgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMSAgLT4gICAxCitkcWN0bTY3NCBjb21wYXJldG90bWFnICAgMEUxICAgMEUxICAtPiAgIDAKK2RxY3RtNjc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQorZHFjdG02NzYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMiAgLT4gIC0xCitkcWN0bTY3NyBjb21wYXJldG90bWFnICAtMEUyICAgMEUyICAtPiAgIDAKK2RxY3RtNjc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQorZHFjdG02NzkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMiAgLT4gICAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RxY3RtNjgwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMiAgICAgICAgICAgIC0+ICAgMAorZHFjdG02ODEgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAgICAgICAgICAgLT4gICAxCitkcWN0bTY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDEKK2RxY3RtNjgzIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAgICAgICAgIC0+ICAgMQorZHFjdG02ODQgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAgICAgICAgLT4gICAxCitkcWN0bTY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDEKK2RxY3RtNjg2IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAgICAgIC0+ICAgMQorZHFjdG02ODcgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAgICAgLT4gICAxCitkcWN0bTY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDEKK2RxY3RtNjg5IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMDAgIC0+ICAgMQorZHFjdG02OTAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgICAxMiAgLT4gICAwCitkcWN0bTY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjkyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgICAgMTIgIC0+ICAtMQorZHFjdG02OTMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjk1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgICAgMTIgIC0+ICAtMQorZHFjdG02OTYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjk4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgICAgMTIgIC0+ICAtMQorZHFjdG02OTkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAgLT4gIC0xCisKKy0tIG9sZCBsb25nIG9wZXJhbmQgY2hlY2tzCitkcWN0bTcwMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwICAxICAtPiAgIDEKK2RxY3RtNzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQorZHFjdG03MDMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAgMSAgLT4gICAxCitkcWN0bTcwNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgICAtPiAgLTEKK2RxY3RtNzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQorZHFjdG03MDYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAgLT4gIC0xCitkcWN0bTcwNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgICAxICAtPiAgIDEKK2RxY3RtNzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQorZHFjdG03MDkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAgMSAgLT4gICAxCitkcWN0bTcxMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAgLTEKK2RxY3RtNzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQorZHFjdG03MTIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gIC0xCitkcWN0bTcxMyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkxICAxICAtPiAgIDEKK2RxY3RtNzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQorZHFjdG03MTUgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gICAxCitkcWN0bTcxNiBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAgLTEKK2RxY3RtNzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQorZHFjdG03MTggY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gIC0xCisKKy0tIG9sZCByZXNpZHVlIGNhc2VzCitkcWN0bTc0MCBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OTkgICAtPiAgIDEKK2RxY3RtNzQxIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5ICAgIC0+ICAgMQorZHFjdG03NDIgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OSAgICAgLT4gICAxCitkcWN0bTc0MyBjb21wYXJldG90bWFnICAxICAxLjAwMDAgICAgICAtPiAgIDEKK2RxY3RtNzQ0IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDEgICAgIC0+ICAtMQorZHFjdG03NDUgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDEgICAgLT4gIC0xCitkcWN0bTc0NiBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMDEgICAtPiAgLTEKK2RxY3RtNzUwIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5OSAgMSAgIC0+ICAtMQorZHFjdG03NTEgY29tcGFyZXRvdG1hZyAgMC45OTk5OTkgICAxICAgLT4gIC0xCitkcWN0bTc1MiBjb21wYXJldG90bWFnICAwLjk5OTk5ICAgIDEgICAtPiAgLTEKK2RxY3RtNzUzIGNvbXBhcmV0b3RtYWcgIDEuMDAwMCAgICAgMSAgIC0+ICAtMQorZHFjdG03NTQgY29tcGFyZXRvdG1hZyAgMS4wMDAwMSAgICAxICAgLT4gICAxCitkcWN0bTc1NSBjb21wYXJldG90bWFnICAxLjAwMDAwMSAgIDEgICAtPiAgIDEKK2RxY3RtNzU2IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAwMSAgMSAgIC0+ICAgMQorCistLSBTcGVjaWFscworZHFjdG03ODAgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDAKK2RxY3RtNzgxIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEwMDAgIC0+ICAxCitkcWN0bTc4MiBjb21wYXJldG90bWFnICBJbmYgIC0xICAgICAtPiAgMQorZHFjdG03ODMgY29tcGFyZXRvdG1hZyAgSW5mICAtMCAgICAgLT4gIDEKK2RxY3RtNzg0IGNvbXBhcmV0b3RtYWcgIEluZiAgIDAgICAgIC0+ICAxCitkcWN0bTc4NSBjb21wYXJldG90bWFnICBJbmYgICAxICAgICAtPiAgMQorZHFjdG03ODYgY29tcGFyZXRvdG1hZyAgSW5mICAgMTAwMCAgLT4gIDEKK2RxY3RtNzg3IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCitkcWN0bTc4OCBjb21wYXJldG90bWFnIC0xMDAwICBJbmYgICAtPiAtMQorZHFjdG03ODkgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDAKK2RxY3RtNzkwIGNvbXBhcmV0b3RtYWcgLTEgICAgIEluZiAgIC0+IC0xCitkcWN0bTc5MSBjb21wYXJldG90bWFnIC0wICAgICBJbmYgICAtPiAtMQorZHFjdG03OTIgY29tcGFyZXRvdG1hZyAgMCAgICAgSW5mICAgLT4gLTEKK2RxY3RtNzkzIGNvbXBhcmV0b3RtYWcgIDEgICAgIEluZiAgIC0+IC0xCitkcWN0bTc5NCBjb21wYXJldG90bWFnICAxMDAwICBJbmYgICAtPiAtMQorZHFjdG03OTUgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDAKKworZHFjdG04MDAgY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKK2RxY3RtODAxIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEwMDAgIC0+ICAxCitkcWN0bTgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQorZHFjdG04MDMgY29tcGFyZXRvdG1hZyAtSW5mICAtMCAgICAgLT4gIDEKK2RxY3RtODA0IGNvbXBhcmV0b3RtYWcgLUluZiAgIDAgICAgIC0+ICAxCitkcWN0bTgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQorZHFjdG04MDYgY29tcGFyZXRvdG1hZyAtSW5mICAgMTAwMCAgLT4gIDEKK2RxY3RtODA3IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitkcWN0bTgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjdG04MDkgY29tcGFyZXRvdG1hZyAtMTAwMCAtSW5mICAgLT4gLTEKK2RxY3RtODEwIGNvbXBhcmV0b3RtYWcgLTEgICAgLUluZiAgIC0+IC0xCitkcWN0bTgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQorZHFjdG04MTIgY29tcGFyZXRvdG1hZyAgMCAgICAtSW5mICAgLT4gLTEKK2RxY3RtODEzIGNvbXBhcmV0b3RtYWcgIDEgICAgLUluZiAgIC0+IC0xCitkcWN0bTgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQorZHFjdG04MTUgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDAKKworZHFjdG04MjEgY29tcGFyZXRvdG1hZyAgTmFOIC1JbmYgICAgLT4gIDEKK2RxY3RtODIyIGNvbXBhcmV0b3RtYWcgIE5hTiAtMTAwMCAgIC0+ICAxCitkcWN0bTgyMyBjb21wYXJldG90bWFnICBOYU4gLTEgICAgICAtPiAgMQorZHFjdG04MjQgY29tcGFyZXRvdG1hZyAgTmFOIC0wICAgICAgLT4gIDEKK2RxY3RtODI1IGNvbXBhcmV0b3RtYWcgIE5hTiAgMCAgICAgIC0+ICAxCitkcWN0bTgyNiBjb21wYXJldG90bWFnICBOYU4gIDEgICAgICAtPiAgMQorZHFjdG04MjcgY29tcGFyZXRvdG1hZyAgTmFOICAxMDAwICAgLT4gIDEKK2RxY3RtODI4IGNvbXBhcmV0b3RtYWcgIE5hTiAgSW5mICAgIC0+ICAxCitkcWN0bTgyOSBjb21wYXJldG90bWFnICBOYU4gIE5hTiAgICAtPiAgMAorZHFjdG04MzAgY29tcGFyZXRvdG1hZyAtSW5mICBOYU4gICAgLT4gIC0xCitkcWN0bTgzMSBjb21wYXJldG90bWFnIC0xMDAwIE5hTiAgICAtPiAgLTEKK2RxY3RtODMyIGNvbXBhcmV0b3RtYWcgLTEgICAgTmFOICAgIC0+ICAtMQorZHFjdG04MzMgY29tcGFyZXRvdG1hZyAtMCAgICBOYU4gICAgLT4gIC0xCitkcWN0bTgzNCBjb21wYXJldG90bWFnICAwICAgIE5hTiAgICAtPiAgLTEKK2RxY3RtODM1IGNvbXBhcmV0b3RtYWcgIDEgICAgTmFOICAgIC0+ICAtMQorZHFjdG04MzYgY29tcGFyZXRvdG1hZyAgMTAwMCBOYU4gICAgLT4gIC0xCitkcWN0bTgzNyBjb21wYXJldG90bWFnICBJbmYgIE5hTiAgICAtPiAgLTEKK2RxY3RtODM4IGNvbXBhcmV0b3RtYWcgLU5hTiAtTmFOICAgIC0+ICAwCitkcWN0bTgzOSBjb21wYXJldG90bWFnICtOYU4gLU5hTiAgICAtPiAgMAorZHFjdG04NDAgY29tcGFyZXRvdG1hZyAtTmFOICtOYU4gICAgLT4gIDAKKworZHFjdG04NDEgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgLT4gIDAKK2RxY3RtODQyIGNvbXBhcmV0b3RtYWcgIHNOYU4gLU5hTiAgIC0+ICAtMQorZHFjdG04NDMgY29tcGFyZXRvdG1hZyAgc05hTiAtSW5mICAgLT4gIDEKK2RxY3RtODQ0IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEwMDAgIC0+ICAxCitkcWN0bTg0NSBjb21wYXJldG90bWFnICBzTmFOIC0xICAgICAtPiAgMQorZHFjdG04NDYgY29tcGFyZXRvdG1hZyAgc05hTiAtMCAgICAgLT4gIDEKK2RxY3RtODQ3IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDAgICAgIC0+ICAxCitkcWN0bTg0OCBjb21wYXJldG90bWFnICBzTmFOICAxICAgICAtPiAgMQorZHFjdG04NDkgY29tcGFyZXRvdG1hZyAgc05hTiAgMTAwMCAgLT4gIDEKK2RxY3RtODUwIGNvbXBhcmV0b3RtYWcgIHNOYU4gIE5hTiAgIC0+ICAtMQorZHFjdG04NTEgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDAKKworZHFjdG04NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDAKK2RxY3RtODUzIGNvbXBhcmV0b3RtYWcgLU5hTiAgc05hTiAgIC0+ICAxCitkcWN0bTg1NCBjb21wYXJldG90bWFnIC1JbmYgIHNOYU4gICAtPiAgLTEKK2RxY3RtODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQorZHFjdG04NTYgY29tcGFyZXRvdG1hZyAtMSAgICBzTmFOICAgLT4gIC0xCitkcWN0bTg1NyBjb21wYXJldG90bWFnIC0wICAgIHNOYU4gICAtPiAgLTEKK2RxY3RtODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQorZHFjdG04NTkgY29tcGFyZXRvdG1hZyAgMSAgICBzTmFOICAgLT4gIC0xCitkcWN0bTg2MCBjb21wYXJldG90bWFnICAxMDAwIHNOYU4gICAtPiAgLTEKK2RxY3RtODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQorZHFjdG04NjIgY29tcGFyZXRvdG1hZyAgTmFOICBzTmFOICAgLT4gIDEKK2RxY3RtODYzIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RxY3RtODcxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1zTmFOICAtPiAgMAorZHFjdG04NzIgY29tcGFyZXRvdG1hZyAgLXNOYU4gLU5hTiAgIC0+ICAtMQorZHFjdG04NzMgY29tcGFyZXRvdG1hZyAgLXNOYU4gLUluZiAgIC0+ICAxCitkcWN0bTg3NCBjb21wYXJldG90bWFnICAtc05hTiAtMTAwMCAgLT4gIDEKK2RxY3RtODc1IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xICAgICAtPiAgMQorZHFjdG04NzYgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTAgICAgIC0+ICAxCitkcWN0bTg3NyBjb21wYXJldG90bWFnICAtc05hTiAgMCAgICAgLT4gIDEKK2RxY3RtODc4IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxICAgICAtPiAgMQorZHFjdG04NzkgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEwMDAgIC0+ICAxCitkcWN0bTg4MCBjb21wYXJldG90bWFnICAtc05hTiAgTmFOICAgLT4gIC0xCitkcWN0bTg4MSBjb21wYXJldG90bWFnICAtc05hTiBzTmFOICAgLT4gIDAKKworZHFjdG04ODIgY29tcGFyZXRvdG1hZyAtc05hTiAtc05hTiAgIC0+ICAwCitkcWN0bTg4MyBjb21wYXJldG90bWFnIC1OYU4gIC1zTmFOICAgLT4gIDEKK2RxY3RtODg0IGNvbXBhcmV0b3RtYWcgLUluZiAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg1IGNvbXBhcmV0b3RtYWcgLTEwMDAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg2IGNvbXBhcmV0b3RtYWcgLTEgICAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg3IGNvbXBhcmV0b3RtYWcgLTAgICAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg4IGNvbXBhcmV0b3RtYWcgIDAgICAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODg5IGNvbXBhcmV0b3RtYWcgIDEgICAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODkwIGNvbXBhcmV0b3RtYWcgIDEwMDAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODkxIGNvbXBhcmV0b3RtYWcgIEluZiAgLXNOYU4gICAtPiAgLTEKK2RxY3RtODkyIGNvbXBhcmV0b3RtYWcgIE5hTiAgLXNOYU4gICAtPiAgMQorZHFjdG04OTMgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgIC0+ICAwCisKKy0tIE5hTnMgd2l0aCBwYXlsb2FkCitkcWN0bTk2MCBjb21wYXJldG90bWFnICBOYU45IC1JbmYgICAtPiAgMQorZHFjdG05NjEgY29tcGFyZXRvdG1hZyAgTmFOOCAgOTk5ICAgLT4gIDEKK2RxY3RtOTYyIGNvbXBhcmV0b3RtYWcgIE5hTjc3IEluZiAgIC0+ICAxCitkcWN0bTk2MyBjb21wYXJldG90bWFnIC1OYU42NyBOYU41ICAtPiAgMQorZHFjdG05NjQgY29tcGFyZXRvdG1hZyAtSW5mICAtTmFONCAgLT4gIC0xCitkcWN0bTk2NSBjb21wYXJldG90bWFnIC05OTkgIC1OYU4zMyAtPiAgLTEKK2RxY3RtOTY2IGNvbXBhcmV0b3RtYWcgIEluZiAgIE5hTjIgIC0+ICAtMQorCitkcWN0bTk3MCBjb21wYXJldG90bWFnIC1OYU40MSAtTmFONDIgLT4gLTEKK2RxY3RtOTcxIGNvbXBhcmV0b3RtYWcgK05hTjQxIC1OYU40MiAtPiAtMQorZHFjdG05NzIgY29tcGFyZXRvdG1hZyAtTmFONDEgK05hTjQyIC0+IC0xCitkcWN0bTk3MyBjb21wYXJldG90bWFnICtOYU40MSArTmFONDIgLT4gLTEKK2RxY3RtOTc0IGNvbXBhcmV0b3RtYWcgLU5hTjQyIC1OYU4wMSAtPiAgMQorZHFjdG05NzUgY29tcGFyZXRvdG1hZyArTmFONDIgLU5hTjAxIC0+ICAxCitkcWN0bTk3NiBjb21wYXJldG90bWFnIC1OYU40MiArTmFOMDEgLT4gIDEKK2RxY3RtOTc3IGNvbXBhcmV0b3RtYWcgK05hTjQyICtOYU4wMSAtPiAgMQorCitkcWN0bTk4MCBjb21wYXJldG90bWFnIC1zTmFONzcxIC1zTmFONzcyIC0+IC0xCitkcWN0bTk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xCitkcWN0bTk4MiBjb21wYXJldG90bWFnIC1zTmFONzcxICtzTmFONzcyIC0+IC0xCitkcWN0bTk4MyBjb21wYXJldG90bWFnICtzTmFONzcxICtzTmFONzcyIC0+IC0xCitkcWN0bTk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxCitkcWN0bTk4NSBjb21wYXJldG90bWFnICtzTmFONzcyIC1zTmFONzcxIC0+ICAxCitkcWN0bTk4NiBjb21wYXJldG90bWFnIC1zTmFONzcyICtzTmFONzcxIC0+ICAxCitkcWN0bTk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxCisKK2RxY3RtOTkxIGNvbXBhcmV0b3RtYWcgLXNOYU45OSAtSW5mICAgIC0+ICAxCitkcWN0bTk5MiBjb21wYXJldG90bWFnICBzTmFOOTggLTExICAgICAtPiAgMQorZHFjdG05OTMgY29tcGFyZXRvdG1hZyAgc05hTjk3ICBOYU4gICAgLT4gLTEKK2RxY3RtOTk0IGNvbXBhcmV0b3RtYWcgIHNOYU4xNiBzTmFOOTQgIC0+IC0xCitkcWN0bTk5NSBjb21wYXJldG90bWFnICBOYU44NSAgc05hTjgzICAtPiAgMQorZHFjdG05OTYgY29tcGFyZXRvdG1hZyAtSW5mICAgIHNOYU45MiAgLT4gLTEKK2RxY3RtOTk3IGNvbXBhcmV0b3RtYWcgIDA4OCAgICBzTmFOODEgIC0+IC0xCitkcWN0bTk5OCBjb21wYXJldG90bWFnICBJbmYgICAgc05hTjkwICAtPiAtMQorZHFjdG05OTkgY29tcGFyZXRvdG1hZyAgTmFOICAgLXNOYU44OSAgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitkcWN0bTExMTAgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgIDAgICAgICAgIC0+ICAtMQorZHFjdG0xMTExIGNvbXBhcmV0b3RtYWcgICAwRS02MTQzIC0wICAgICAgICAtPiAgLTEKK2RxY3RtMTExMiBjb21wYXJldG90bWFnICAtMEUtNjE0MyAgMCAgICAgICAgLT4gIC0xCitkcWN0bTExMTMgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgLTAgICAgICAgIC0+ICAtMQorZHFjdG0xMTE0IGNvbXBhcmV0b3RtYWcgICAwRS02MTQzICAwRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMTUgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgLTBFKzYxNDQgICAtPiAgLTEKK2RxY3RtMTExNiBjb21wYXJldG90bWFnICAtMEUtNjE0MyAgMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTE3IGNvbXBhcmV0b3RtYWcgIC0wRS02MTQzIC0wRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMTggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzYxNDQgICAtPiAgLTEKK2RxY3RtMTEyMCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMjEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUrNjE0NCAgIC0+ICAtMQorCitkcWN0bTExMzAgY29tcGFyZXRvdG1hZyAgIDBFKzYxNDQgIDAgICAgICAgIC0+ICAgMQorZHFjdG0xMTMxIGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0IC0wICAgICAgICAtPiAgIDEKK2RxY3RtMTEzMiBjb21wYXJldG90bWFnICAtMEUrNjE0NCAgMCAgICAgICAgLT4gICAxCitkcWN0bTExMzMgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgLTAgICAgICAgIC0+ICAgMQorZHFjdG0xMTM0IGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0ICAwRS02MTQzICAgLT4gICAxCitkcWN0bTExMzUgY29tcGFyZXRvdG1hZyAgIDBFKzYxNDQgLTBFLTYxNDMgICAtPiAgIDEKK2RxY3RtMTEzNiBjb21wYXJldG90bWFnICAtMEUrNjE0NCAgMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTM3IGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0IC0wRS02MTQzICAgLT4gICAxCitkcWN0bTExMzggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTYxNDMgICAtPiAgIDEKK2RxY3RtMTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS02MTQzICAgLT4gICAxCitkcWN0bTExNDEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUtNjE0MyAgIC0+ICAgMQorCistLSBOdWxsIHRlc3RzCitkcWN0bTk5OTAgY29tcGFyZXRvdG1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxY3RtOTk5MSBjb21wYXJldG90bWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHkuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2MjQzMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5LmRlY1Rlc3QKQEAgLTAsMCArMSw4OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvcHkuZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RxY3B5MDAxIGNvcHkgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZHFjcHkwMTEgY29weSAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RxY3B5MDEyIGNvcHkgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxY3B5MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTgorZHFjcHkwMjIgY29weSAgICAgICAgLU5hTiAgLT4gLU5hTgorZHFjcHkwMjMgY29weSAgICAgICAgc05hTiAgLT4gc05hTgorZHFjcHkwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZHFjcHkwMzEgY29weSAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2RxY3B5MDMyIGNvcHkgICAgICAtTmFOMTAgIC0+IC1OYU4xMAorZHFjcHkwMzMgY29weSAgICAgIHNOYU4xMCAgLT4gc05hTjEwCitkcWNweTAzNCBjb3B5ICAgICAtc05hTjEwICAtPiAtc05hTjEwCitkcWNweTAzNSBjb3B5ICAgICAgIE5hTjcgICAtPiBOYU43CitkcWNweTAzNiBjb3B5ICAgICAgLU5hTjcgICAtPiAtTmFONworZHFjcHkwMzcgY29weSAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorZHFjcHkwMzggY29weSAgICAgLXNOYU4xMDEgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcHkxMDEgY29weSAgICAgICAgICA3ICAgLT4gNworZHFjcHkxMDIgY29weSAgICAgICAgIC03ICAgLT4gLTcKK2RxY3B5MTAzIGNvcHkgICAgICAgICA3NSAgIC0+IDc1CitkcWNweTEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUKK2RxY3B5MTA1IGNvcHkgICAgICAgNy41MCAgIC0+IDcuNTAKK2RxY3B5MTA2IGNvcHkgICAgICAtNy41MCAgIC0+IC03LjUwCitkcWNweTEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMAorZHFjcHkxMDggY29weSAgICAgIC03LjUwMCAgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkcWNweTExMSBjb3B5ICAgICAgICAgIDAgICAtPiAwCitkcWNweTExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMAorZHFjcHkxMTMgY29weSAgICAgICAwRSs0ICAgLT4gMEUrNAorZHFjcHkxMTQgY29weSAgICAgIC0wRSs0ICAgLT4gLTBFKzQKK2RxY3B5MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZHFjcHkxMTYgY29weSAgICAtMC4wMDAwICAgLT4gLTAuMDAwMAorZHFjcHkxMTcgY29weSAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkcWNweTExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWNweTEyMSBjb3B5ICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcHkxMjIgY29weSAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3B5MTIzIGNvcHkgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWNweTEyNCBjb3B5ICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFjcHkxMzEgY29weSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxY3B5MTMyIGNvcHkgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxY3B5MTMzIGNvcHkgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNweTEzNCBjb3B5ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2CisKK2RxY3B5MTM1IGNvcHkgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYKK2RxY3B5MTM2IGNvcHkgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNweTEzNyBjb3B5ICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzCitkcWNweTEzOCBjb3B5ICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlBYnMuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5QWJzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZiY2I0ZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5QWJzLmRlY1Rlc3QKQEAgLTAsMCArMSw4OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvcHlBYnMuZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgYW5kIHNldCBzaWduIHRvIHplcm8gICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RxY3BhMDAxIGNvcHlhYnMgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZHFjcGEwMTEgY29weWFicyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RxY3BhMDEyIGNvcHlhYnMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZHFjcGEwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFOCitkcWNwYTAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4KK2RxY3BhMDIzIGNvcHlhYnMgICAgICAgIHNOYU4gIC0+IHNOYU4KK2RxY3BhMDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZHFjcGEwMzEgY29weWFicyAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2RxY3BhMDMyIGNvcHlhYnMgICAgICAtTmFOMTUgIC0+IE5hTjE1CitkcWNwYTAzMyBjb3B5YWJzICAgICAgc05hTjE1ICAtPiBzTmFOMTUKK2RxY3BhMDM0IGNvcHlhYnMgICAgIC1zTmFOMTAgIC0+IHNOYU4xMAorZHFjcGEwMzUgY29weWFicyAgICAgICBOYU43ICAgLT4gTmFONworZHFjcGEwMzYgY29weWFicyAgICAgIC1OYU43ICAgLT4gTmFONworZHFjcGEwMzcgY29weWFicyAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorZHFjcGEwMzggY29weWFicyAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitkcWNwYTEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3CitkcWNwYTEwMiBjb3B5YWJzICAgICAgICAgLTcgICAtPiA3CitkcWNwYTEwMyBjb3B5YWJzICAgICAgICAgNzUgICAtPiA3NQorZHFjcGExMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUKK2RxY3BhMTA1IGNvcHlhYnMgICAgICAgNy4xMCAgIC0+IDcuMTAKK2RxY3BhMTA2IGNvcHlhYnMgICAgICAtNy4xMCAgIC0+IDcuMTAKK2RxY3BhMTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwCitkcWNwYTEwOCBjb3B5YWJzICAgICAgLTcuNTAwICAtPiA3LjUwMAorCistLSB6ZXJvcworZHFjcGExMTEgY29weWFicyAgICAgICAgICAwICAgLT4gMAorZHFjcGExMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMAorZHFjcGExMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNgorZHFjcGExMTQgY29weWFicyAgICAgIC0wRSs2ICAgLT4gMEUrNgorZHFjcGExMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkcWNwYTExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RxY3BhMTE3IGNvcHlhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZHFjcGExMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWNwYTEyMSBjb3B5YWJzICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcGExMjIgY29weWFicyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BhMTIzIGNvcHlhYnMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWNwYTEyNCBjb3B5YWJzICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFjcGExMzEgY29weWFicyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxY3BhMTMyIGNvcHlhYnMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxY3BhMTMzIGNvcHlhYnMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwYTEzNCBjb3B5YWJzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2CisKK2RxY3BhMTM1IGNvcHlhYnMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYKK2RxY3BhMTM2IGNvcHlhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwYTEzNyBjb3B5YWJzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCitkcWNwYTEzOCBjb3B5YWJzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlOZWdhdGUuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5TmVnYXRlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1M2Y1YQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5TmVnYXRlLmRlY1Rlc3QKQEAgLTAsMCArMSw4OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvcHlOZWdhdGUuZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RxY3BuMDAxIGNvcHluZWdhdGUgICAgICAgKzcuNTAgIC0+IC03LjUwCisKKy0tIEluZmluaXRpZXMKK2RxY3BuMDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQorZHFjcG4wMTIgY29weW5lZ2F0ZSAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkcWNwbjAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFOCitkcWNwbjAyMiBjb3B5bmVnYXRlICAgICAgICAtTmFOICAtPiBOYU4KK2RxY3BuMDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFOCitkcWNwbjAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RxY3BuMDMxIGNvcHluZWdhdGUgICAgICAgTmFOMTMgIC0+IC1OYU4xMworZHFjcG4wMzIgY29weW5lZ2F0ZSAgICAgIC1OYU4xMyAgLT4gTmFOMTMKK2RxY3BuMDMzIGNvcHluZWdhdGUgICAgICBzTmFOMTMgIC0+IC1zTmFOMTMKK2RxY3BuMDM0IGNvcHluZWdhdGUgICAgIC1zTmFOMTMgIC0+IHNOYU4xMworZHFjcG4wMzUgY29weW5lZ2F0ZSAgICAgICBOYU43MCAgLT4gLU5hTjcwCitkcWNwbjAzNiBjb3B5bmVnYXRlICAgICAgLU5hTjcwICAtPiBOYU43MAorZHFjcG4wMzcgY29weW5lZ2F0ZSAgICAgIHNOYU4xMDEgLT4gLXNOYU4xMDEKK2RxY3BuMDM4IGNvcHluZWdhdGUgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcG4xMDEgY29weW5lZ2F0ZSAgICAgICAgICA3ICAgLT4gLTcKK2RxY3BuMTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcKK2RxY3BuMTAzIGNvcHluZWdhdGUgICAgICAgICA3NSAgIC0+IC03NQorZHFjcG4xMDQgY29weW5lZ2F0ZSAgICAgICAgLTc1ICAgLT4gNzUKK2RxY3BuMTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwCitkcWNwbjEwNiBjb3B5bmVnYXRlICAgICAgLTcuNTAgICAtPiA3LjUwCitkcWNwbjEwNyBjb3B5bmVnYXRlICAgICAgIDcuNTAwICAtPiAtNy41MDAKK2RxY3BuMTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkcWNwbjExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMAorZHFjcG4xMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMAorZHFjcG4xMTMgY29weW5lZ2F0ZSAgICAgICAwRSs0ICAgLT4gLTBFKzQKK2RxY3BuMTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQKK2RxY3BuMTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDAKK2RxY3BuMTE2IGNvcHluZWdhdGUgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZHFjcG4xMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQorZHFjcG4xMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWNwbjEyMSBjb3B5bmVnYXRlICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcG4xMjIgY29weW5lZ2F0ZSAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BuMTIzIGNvcHluZWdhdGUgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWNwbjEyNCBjb3B5bmVnYXRlICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFjcG4xMzEgY29weW5lZ2F0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxY3BuMTMyIGNvcHluZWdhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKK2RxY3BuMTMzIGNvcHluZWdhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwbjEzNCBjb3B5bmVnYXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2CisKK2RxY3BuMTM1IGNvcHluZWdhdGUgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYKK2RxY3BuMTM2IGNvcHluZWdhdGUgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwbjEzNyBjb3B5bmVnYXRlICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCitkcWNwbjEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlTaWduLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weVNpZ24uZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2I1ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlTaWduLmRlY1Rlc3QKQEAgLTAsMCArMSwxNzUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb3B5U2lnbi5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSB3aXRoIHNpZ24gZnJvbSByaHMgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcWNwczAwMSBjb3B5c2lnbiAgICAgICArNy41MCAgICAgMTEgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkcWNwczAxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgMTEgLT4gSW5maW5pdHkKK2RxY3BzMDEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAxMSAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxY3BzMDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4KK2RxY3BzMDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4KK2RxY3BzMDIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAxMSAtPiBzTmFOCitkcWNwczAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkcWNwczAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTAKK2RxY3BzMDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMAorZHFjcHMwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMAorZHFjcHMwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMAorZHFjcHMwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcKK2RxY3BzMDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43CitkcWNwczAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorZHFjcHMwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcHMxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcKK2RxY3BzMTAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAxMSAtPiA3CitkcWNwczEwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgMTEgLT4gNzUKK2RxY3BzMTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQorZHFjcHMxMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIDExIC0+IDcuNTAKK2RxY3BzMTA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAxMSAtPiA3LjUwCitkcWNwczEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDAKK2RxY3BzMTA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAxMSAtPiA3LjUwMAorCistLSB6ZXJvcworZHFjcHMxMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIDExIC0+IDAKK2RxY3BzMTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwCitkcWNwczExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNAorZHFjcHMxMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIDExIC0+IDBFKzQKK2RxY3BzMTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2RxY3BzMTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2RxY3BzMTE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKK2RxY3BzMTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxY3BzMTIxIGNvcHlzaWduICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiA4ICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcHMxMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyIDggIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNwczEyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgOCAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKK2RxY3BzMTI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSA4ICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFjcHMxMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDggLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWNwczEzMiBjb3B5c2lnbiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE0MworZHFjcHMxMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIDggLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwczEzNCBjb3B5c2lnbiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE3NgorCitkcWNwczEzNSBjb3B5c2lnbiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNzYKK2RxY3BzMTM2IGNvcHlzaWduICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgOCAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3BzMTM3IGNvcHlzaWduICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE0MworZHFjcHMxMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorCistLSByZXBlYXQgd2l0aCBuZWdhdGl2ZSBSSFMKKworLS0gSW5maW5pdGllcworZHFjcHMyMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIC0zNCAtPiAtSW5maW5pdHkKK2RxY3BzMjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZHFjcHMyMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIC0zNCAtPiAtTmFOCitkcWNwczIyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgLTM0IC0+IC1OYU4KK2RxY3BzMjIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAtMzQgLT4gLXNOYU4KK2RxY3BzMjI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAtMzQgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZHFjcHMyMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIC0zNCAtPiAtTmFOMTAKK2RxY3BzMjMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAtMzQgLT4gLU5hTjEwCitkcWNwczIzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKK2RxY3BzMjM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMAorZHFjcHMyMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIC0zNCAtPiAtTmFONworZHFjcHMyMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIC0zNCAtPiAtTmFONworZHFjcHMyMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQorZHFjcHMyMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQorCistLSBmaW5pdGVzCitkcWNwczMwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgLTM0IC0+IC03CitkcWNwczMwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgLTM0IC0+IC03CitkcWNwczMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQorZHFjcHMzMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIC0zNCAtPiAtNzUKK2RxY3BzMzA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAtMzQgLT4gLTcuNTAKK2RxY3BzMzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTAKK2RxY3BzMzA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAtMzQgLT4gLTcuNTAwCitkcWNwczMwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgLTM0IC0+IC03LjUwMAorCistLSB6ZXJvcworZHFjcHMzMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIC0zNCAtPiAtMAorZHFjcHMzMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIC0zNCAtPiAtMAorZHFjcHMzMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIC0zNCAtPiAtMEUrNAorZHFjcHMzMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIC0zNCAtPiAtMEUrNAorZHFjcHMzMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCitkcWNwczMxNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDAKK2RxY3BzMzE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQorZHFjcHMzMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWNwczMyMSBjb3B5c2lnbiAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgLTkgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BzMzIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAtOSAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcHMzMjMgY29weXNpZ24gICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIC05IC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWNwczMyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgLTkgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxY3BzMzMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWNwczMzMiBjb3B5c2lnbiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0xRS02MTQzCitkcWNwczMzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcHMzMzQgY29weXNpZ24gIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMUUtNjE3NgorCitkcWNwczMzNSBjb3B5c2lnbiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zIC0+IC0xRS02MTc2CitkcWNwczMzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0zIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcHMzMzcgY29weXNpZ24gIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMyAtPiAtMUUtNjE0MworZHFjcHMzMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0gT3RoZXIga2luZHMgb2YgUkhTCitkcWNwczQwMSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTM0IC0+IC03MDEKK2RxY3BzNDAyIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMzQgLT4gLTcyMAorZHFjcHM0MDMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0wICAtPiAtNzAxCitkcWNwczQwNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTAgIC0+IC03MjAKK2RxY3BzNDA1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMCAgLT4gIDcwMQorZHFjcHM0MDYgY29weXNpZ24gICAgICAgICAtNzIwICAgICswICAtPiAgNzIwCitkcWNwczQwNyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzM0IC0+ICA3MDEKK2RxY3BzNDA4IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMzQgLT4gIDcyMAorCitkcWNwczQxMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLUluZiAgLT4gLTcwMQorZHFjcHM0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjAKK2RxY3BzNDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxCitkcWNwczQxNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK0luZiAgLT4gIDcyMAorCitkcWNwczQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQorZHFjcHM0MjEgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1OYU4gIC0+IC03MjAKK2RxY3BzNDIyIGNvcHlzaWduICAgICAgICAgIDcwMSAgICArTmFOICAtPiAgNzAxCitkcWNwczQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMAorZHFjcHM0MjUgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU44IC0+ICA3MjAKKworZHFjcHM0MjYgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1zTmFOICAtPiAtNzAxCitkcWNwczQyNyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLXNOYU4gIC0+IC03MjAKK2RxY3BzNDI4IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArc05hTiAgLT4gIDcwMQorZHFjcHM0MjkgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOICAtPiAgNzIwCitkcWNwczQzMCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4zIC0+ICA3MjAKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmI5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlLmRlY1Rlc3QKQEAgLTAsMCArMSw4MDggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFEaXZpZGUuZGVjVGVzdCAtLSBkZWNRdWFkIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWRpdjAwMSBkaXZpZGUgIDEgICAgIDEgICAgLT4gIDEKK2RxZGl2MDAyIGRpdmlkZSAgMiAgICAgMSAgICAtPiAgMgorZHFkaXYwMDMgZGl2aWRlICAxICAgICAyICAgIC0+ICAwLjUKK2RxZGl2MDA0IGRpdmlkZSAgMiAgICAgMiAgICAtPiAgMQorZHFkaXYwMDUgZGl2aWRlICAwICAgICAxICAgIC0+ICAwCitkcWRpdjAwNiBkaXZpZGUgIDAgICAgIDIgICAgLT4gIDAKK2RxZGl2MDA3IGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZHFkaXYwMDggZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjAwOSBkaXZpZGUgIDMgICAgIDMgICAgLT4gIDEKKworZHFkaXYwMTAgZGl2aWRlICAyLjQgICAxICAgIC0+ICAyLjQKK2RxZGl2MDExIGRpdmlkZSAgMi40ICAgLTEgICAtPiAgLTIuNAorZHFkaXYwMTIgZGl2aWRlICAtMi40ICAxICAgIC0+ICAtMi40CitkcWRpdjAxMyBkaXZpZGUgIC0yLjQgIC0xICAgLT4gIDIuNAorZHFkaXYwMTQgZGl2aWRlICAyLjQwICAxICAgIC0+ICAyLjQwCitkcWRpdjAxNSBkaXZpZGUgIDIuNDAwIDEgICAgLT4gIDIuNDAwCitkcWRpdjAxNiBkaXZpZGUgIDIuNCAgIDIgICAgLT4gIDEuMgorZHFkaXYwMTcgZGl2aWRlICAyLjQwMCAyICAgIC0+ICAxLjIwMAorZHFkaXYwMTggZGl2aWRlICAyLiAgICAyICAgIC0+ICAxCitkcWRpdjAxOSBkaXZpZGUgIDIwICAgIDIwICAgLT4gIDEKKworZHFkaXYwMjAgZGl2aWRlICAxODcgICAxODcgICAgLT4gIDEKK2RxZGl2MDIxIGRpdmlkZSAgNSAgICAgMiAgICAgIC0+ICAyLjUKK2RxZGl2MDIyIGRpdmlkZSAgNTAgICAgMjAgICAgIC0+ICAyLjUKK2RxZGl2MDIzIGRpdmlkZSAgNTAwICAgMjAwICAgIC0+ICAyLjUKK2RxZGl2MDI0IGRpdmlkZSAgNTAuMCAgMjAuMCAgIC0+ICAyLjUKK2RxZGl2MDI1IGRpdmlkZSAgNS4wMCAgMi4wMCAgIC0+ICAyLjUKK2RxZGl2MDI2IGRpdmlkZSAgNSAgICAgMi4wICAgIC0+ICAyLjUKK2RxZGl2MDI3IGRpdmlkZSAgNSAgICAgMi4wMDAgIC0+ICAyLjUKK2RxZGl2MDI4IGRpdmlkZSAgNSAgICAgMC4yMCAgIC0+ICAyNQorZHFkaXYwMjkgZGl2aWRlICA1ICAgICAwLjIwMCAgLT4gIDI1CitkcWRpdjAzMCBkaXZpZGUgIDEwICAgIDEgICAgICAtPiAgMTAKK2RxZGl2MDMxIGRpdmlkZSAgMTAwICAgMSAgICAgIC0+ICAxMDAKK2RxZGl2MDMyIGRpdmlkZSAgMTAwMCAgMSAgICAgIC0+ICAxMDAwCitkcWRpdjAzMyBkaXZpZGUgIDEwMDAgIDEwMCAgICAtPiAgMTAKKworZHFkaXYwMzUgZGl2aWRlICAxICAgICAyICAgICAgLT4gIDAuNQorZHFkaXYwMzYgZGl2aWRlICAxICAgICA0ICAgICAgLT4gIDAuMjUKK2RxZGl2MDM3IGRpdmlkZSAgMSAgICAgOCAgICAgIC0+ICAwLjEyNQorZHFkaXYwMzggZGl2aWRlICAxICAgICAxNiAgICAgLT4gIDAuMDYyNQorZHFkaXYwMzkgZGl2aWRlICAxICAgICAzMiAgICAgLT4gIDAuMDMxMjUKK2RxZGl2MDQwIGRpdmlkZSAgMSAgICAgNjQgICAgIC0+ICAwLjAxNTYyNQorZHFkaXYwNDEgZGl2aWRlICAxICAgIC0yICAgICAgLT4gIC0wLjUKK2RxZGl2MDQyIGRpdmlkZSAgMSAgICAtNCAgICAgIC0+ICAtMC4yNQorZHFkaXYwNDMgZGl2aWRlICAxICAgIC04ICAgICAgLT4gIC0wLjEyNQorZHFkaXYwNDQgZGl2aWRlICAxICAgIC0xNiAgICAgLT4gIC0wLjA2MjUKK2RxZGl2MDQ1IGRpdmlkZSAgMSAgICAtMzIgICAgIC0+ICAtMC4wMzEyNQorZHFkaXYwNDYgZGl2aWRlICAxICAgIC02NCAgICAgLT4gIC0wLjAxNTYyNQorZHFkaXYwNDcgZGl2aWRlIC0xICAgICAyICAgICAgLT4gIC0wLjUKK2RxZGl2MDQ4IGRpdmlkZSAtMSAgICAgNCAgICAgIC0+ICAtMC4yNQorZHFkaXYwNDkgZGl2aWRlIC0xICAgICA4ICAgICAgLT4gIC0wLjEyNQorZHFkaXYwNTAgZGl2aWRlIC0xICAgICAxNiAgICAgLT4gIC0wLjA2MjUKK2RxZGl2MDUxIGRpdmlkZSAtMSAgICAgMzIgICAgIC0+ICAtMC4wMzEyNQorZHFkaXYwNTIgZGl2aWRlIC0xICAgICA2NCAgICAgLT4gIC0wLjAxNTYyNQorZHFkaXYwNTMgZGl2aWRlIC0xICAgIC0yICAgICAgLT4gIDAuNQorZHFkaXYwNTQgZGl2aWRlIC0xICAgIC00ICAgICAgLT4gIDAuMjUKK2RxZGl2MDU1IGRpdmlkZSAtMSAgICAtOCAgICAgIC0+ICAwLjEyNQorZHFkaXYwNTYgZGl2aWRlIC0xICAgIC0xNiAgICAgLT4gIDAuMDYyNQorZHFkaXYwNTcgZGl2aWRlIC0xICAgIC0zMiAgICAgLT4gIDAuMDMxMjUKK2RxZGl2MDU4IGRpdmlkZSAtMSAgICAtNjQgICAgIC0+ICAwLjAxNTYyNQorCistLSBiY2RUaW1lCitkcWRpdjA2MCBkaXZpZGUgIDEgNyAgICAgICAgICAgICAgICAgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjA2MSBkaXZpZGUgMS4yMzQ1Njc4ICAxLjk4NzY1NDMgICAtPiAwLjYyMTExNzk2ODA0OTA3MTcxMjMxOTM5MDc1MTE5ODUzNTkgSW5leGFjdCBSb3VuZGVkCisKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFkaXYwNjcgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcWRpdjA2OCBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgIDEgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNjkgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzAgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzEgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5CitkcWRpdjA3MiBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzMgZGl2aWRlICA5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzQgZGl2aWRlICA5OTk5OTk5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5CitkcWRpdjA3NSBkaXZpZGUgIDk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OQorZHFkaXYwNzYgZGl2aWRlICA5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OQorZHFkaXYwNzcgZGl2aWRlICA5OTk5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5CitkcWRpdjA3OCBkaXZpZGUgIDk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OQorZHFkaXYwNzkgZGl2aWRlICA5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OQorZHFkaXYwODAgZGl2aWRlICA5OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5CitkcWRpdjA4MSBkaXZpZGUgIDk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OQorZHFkaXYwODIgZGl2aWRlICA5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OQorZHFkaXYwODMgZGl2aWRlICA5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5CitkcWRpdjA4NCBkaXZpZGUgIDk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OQorZHFkaXYwODUgZGl2aWRlICA5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OQorZHFkaXYwODYgZGl2aWRlICA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5CisKK2RxZGl2MDkwIGRpdmlkZSAgMC4gICAgICAgICAgICAxICAgIC0+ICAwCitkcWRpdjA5MSBkaXZpZGUgIC4wICAgICAgICAgICAgMSAgICAtPiAgMC4wCitkcWRpdjA5MiBkaXZpZGUgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMC4wMAorZHFkaXYwOTMgZGl2aWRlICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDBFKzcKK2RxZGl2MDk0IGRpdmlkZSAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwRS01NAorCitkcWRpdjA5NSBkaXZpZGUgIDEgICAgICAgICAgICAxRS04ICAtPiAgMUUrOAorZHFkaXYwOTYgZGl2aWRlICAxICAgICAgICAgICAgMUUtOSAgLT4gIDFFKzkKK2RxZGl2MDk3IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEwIC0+ICAxRSsxMAorZHFkaXYwOTggZGl2aWRlICAxICAgICAgICAgICAgMUUtMTEgLT4gIDFFKzExCitkcWRpdjA5OSBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMiAtPiAgMUUrMTIKKworZHFkaXYxMDAgZGl2aWRlICAxICAxICAgLT4gMQorZHFkaXYxMDEgZGl2aWRlICAxICAyICAgLT4gMC41CitkcWRpdjEwMiBkaXZpZGUgIDEgIDMgICAtPiAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwMyBkaXZpZGUgIDEgIDQgICAtPiAwLjI1CitkcWRpdjEwNCBkaXZpZGUgIDEgIDUgICAtPiAwLjIKK2RxZGl2MTA1IGRpdmlkZSAgMSAgNiAgIC0+IDAuMTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTA2IGRpdmlkZSAgMSAgNyAgIC0+IDAuMTQyODU3MTQyODU3MTQyODU3MTQyODU3MTQyODU3MTQyOSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTA3IGRpdmlkZSAgMSAgOCAgIC0+IDAuMTI1CitkcWRpdjEwOCBkaXZpZGUgIDEgIDkgICAtPiAwLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwOSBkaXZpZGUgIDEgIDEwICAtPiAwLjEKK2RxZGl2MTEwIGRpdmlkZSAgMSAgMSAgIC0+IDEKK2RxZGl2MTExIGRpdmlkZSAgMiAgMSAgIC0+IDIKK2RxZGl2MTEyIGRpdmlkZSAgMyAgMSAgIC0+IDMKK2RxZGl2MTEzIGRpdmlkZSAgNCAgMSAgIC0+IDQKK2RxZGl2MTE0IGRpdmlkZSAgNSAgMSAgIC0+IDUKK2RxZGl2MTE1IGRpdmlkZSAgNiAgMSAgIC0+IDYKK2RxZGl2MTE2IGRpdmlkZSAgNyAgMSAgIC0+IDcKK2RxZGl2MTE3IGRpdmlkZSAgOCAgMSAgIC0+IDgKK2RxZGl2MTE4IGRpdmlkZSAgOSAgMSAgIC0+IDkKK2RxZGl2MTE5IGRpdmlkZSAgMTAgMSAgIC0+IDEwCisKK2RxZGl2MTIwIGRpdmlkZSAgM0UrMSAwLjAwMSAgLT4gM0UrNAorZHFkaXYxMjEgZGl2aWRlICAyLjIwMCAyICAgICAtPiAxLjEwMAorCitkcWRpdjEzMCBkaXZpZGUgIDEyMzQ1ICA0Ljk5OSAgLT4gMjQ2OS40OTM4OTg3Nzk3NTU5NTExOTAyMzgwNDc2MDk1MjIgIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMzEgZGl2aWRlICAxMjM0NSAgNC45OSAgIC0+IDI0NzMuOTQ3ODk1NzkxNTgzMTY2MzMyNjY1MzMwNjYxMzIzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTMyIGRpdmlkZSAgMTIzNDUgIDQuOSAgICAtPiAyNTE5LjM4Nzc1NTEwMjA0MDgxNjMyNjUzMDYxMjI0NDg5OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEzMyBkaXZpZGUgIDEyMzQ1ICA1ICAgICAgLT4gMjQ2OQorZHFkaXYxMzQgZGl2aWRlICAxMjM0NSAgNS4xICAgIC0+IDI0MjAuNTg4MjM1Mjk0MTE3NjQ3MDU4ODIzNTI5NDExNzY1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTM1IGRpdmlkZSAgMTIzNDUgIDUuMDEgICAtPiAyNDY0LjA3MTg1NjI4NzQyNTE0OTcwMDU5ODgwMjM5NTIxMCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEzNiBkaXZpZGUgIDEyMzQ1ICA1LjAwMSAgLT4gMjQ2OC41MDYyOTg3NDAyNTE5NDk2MTAwNzc5ODQ0MDMxMTkgIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHBvc3NpYmx5IGltcHJlY2lzZSByZXN1bHRzCitkcWRpdjIyMCBkaXZpZGUgMzkxICAgNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMjEgZGl2aWRlIDM5MSAgLTU5NyAtPiAtMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjIyIGRpdmlkZSAtMzkxICA1OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4MzU4NDU4OTYxNDc0MDM2ODUwOSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIyMyBkaXZpZGUgLTM5MSAtNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK2RxZGl2MjcwIGRpdmlkZSAxIDFlNjE0NCAgICAgICAgICAgICAgICAgIC0+IDFFLTYxNDQgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZHFkaXYyNzEgZGl2aWRlIDEgMC45ZTYxNDQgICAgICAgICAgICAgICAgLT4gMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMUUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZGl2MjcyIGRpdmlkZSAxIDAuOTllNjE0NCAgICAgICAgICAgICAgIC0+IDEuMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDFFLTYxNDQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWRpdjI3MyBkaXZpZGUgMSAwLjk5OTk5OTk5OTk5OTk5OTllNjE0NCAtPiAxLjAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFkaXYyNzQgZGl2aWRlIDllNjE0NCAgICAxICAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorZHFkaXYyNzUgZGl2aWRlIDkuOWU2MTQ0ICAxICAgICAgICAgICAgICAgLT4gOS45MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorZHFkaXYyNzYgZGl2aWRlIDkuOTllNjE0NCAxICAgICAgICAgICAgICAgLT4gOS45OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorZHFkaXYyNzcgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTk5ZTYxNDQgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorCitkcWRpdjI3OCBkaXZpZGUgMSAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllNjE0NCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFkaXYyNzkgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZTYxNDQgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0gRGl2aWRlIGludG8gMCB0ZXN0cworZHFkaXYzMDEgZGl2aWRlICAgIDAgICAgNyAgICAgLT4gMAorZHFkaXYzMDIgZGl2aWRlICAgIDAgICAgN0UtNSAgLT4gMEUrNQorZHFkaXYzMDMgZGl2aWRlICAgIDAgICAgN0UtMSAgLT4gMEUrMQorZHFkaXYzMDQgZGl2aWRlICAgIDAgICAgN0UrMSAgLT4gMC4wCitkcWRpdjMwNSBkaXZpZGUgICAgMCAgICA3RSs1ICAtPiAwLjAwMDAwCitkcWRpdjMwNiBkaXZpZGUgICAgMCAgICA3RSs2ICAtPiAwLjAwMDAwMAorZHFkaXYzMDcgZGl2aWRlICAgIDAgICAgN0UrNyAgLT4gMEUtNworZHFkaXYzMDggZGl2aWRlICAgIDAgICA3MEUtNSAgLT4gMEUrNQorZHFkaXYzMDkgZGl2aWRlICAgIDAgICA3MEUtMSAgLT4gMEUrMQorZHFkaXYzMTAgZGl2aWRlICAgIDAgICA3MEUrMCAgLT4gMAorZHFkaXYzMTEgZGl2aWRlICAgIDAgICA3MEUrMSAgLT4gMC4wCitkcWRpdjMxMiBkaXZpZGUgICAgMCAgIDcwRSs1ICAtPiAwLjAwMDAwCitkcWRpdjMxMyBkaXZpZGUgICAgMCAgIDcwRSs2ICAtPiAwLjAwMDAwMAorZHFkaXYzMTQgZGl2aWRlICAgIDAgICA3MEUrNyAgLT4gMEUtNworZHFkaXYzMTUgZGl2aWRlICAgIDAgIDcwMEUtNSAgLT4gMEUrNQorZHFkaXYzMTYgZGl2aWRlICAgIDAgIDcwMEUtMSAgLT4gMEUrMQorZHFkaXYzMTcgZGl2aWRlICAgIDAgIDcwMEUrMCAgLT4gMAorZHFkaXYzMTggZGl2aWRlICAgIDAgIDcwMEUrMSAgLT4gMC4wCitkcWRpdjMxOSBkaXZpZGUgICAgMCAgNzAwRSs1ICAtPiAwLjAwMDAwCitkcWRpdjMyMCBkaXZpZGUgICAgMCAgNzAwRSs2ICAtPiAwLjAwMDAwMAorZHFkaXYzMjEgZGl2aWRlICAgIDAgIDcwMEUrNyAgLT4gMEUtNworZHFkaXYzMjIgZGl2aWRlICAgIDAgIDcwMEUrNzcgLT4gMEUtNzcKKworZHFkaXYzMzEgZGl2aWRlIDBFLTMgICAgN0UtNSAgLT4gMEUrMgorZHFkaXYzMzIgZGl2aWRlIDBFLTMgICAgN0UtMSAgLT4gMC4wMAorZHFkaXYzMzMgZGl2aWRlIDBFLTMgICAgN0UrMSAgLT4gMC4wMDAwCitkcWRpdjMzNCBkaXZpZGUgMEUtMyAgICA3RSs1ICAtPiAwRS04CitkcWRpdjMzNSBkaXZpZGUgMEUtMSAgICA3RS01ICAtPiAwRSs0CitkcWRpdjMzNiBkaXZpZGUgMEUtMSAgICA3RS0xICAtPiAwCitkcWRpdjMzNyBkaXZpZGUgMEUtMSAgICA3RSsxICAtPiAwLjAwCitkcWRpdjMzOCBkaXZpZGUgMEUtMSAgICA3RSs1ICAtPiAwLjAwMDAwMAorZHFkaXYzMzkgZGl2aWRlIDBFKzEgICAgN0UtNSAgLT4gMEUrNgorZHFkaXYzNDAgZGl2aWRlIDBFKzEgICAgN0UtMSAgLT4gMEUrMgorZHFkaXYzNDEgZGl2aWRlIDBFKzEgICAgN0UrMSAgLT4gMAorZHFkaXYzNDIgZGl2aWRlIDBFKzEgICAgN0UrNSAgLT4gMC4wMDAwCitkcWRpdjM0MyBkaXZpZGUgMEUrMyAgICA3RS01ICAtPiAwRSs4CitkcWRpdjM0NCBkaXZpZGUgMEUrMyAgICA3RS0xICAtPiAwRSs0CitkcWRpdjM0NSBkaXZpZGUgMEUrMyAgICA3RSsxICAtPiAwRSsyCitkcWRpdjM0NiBkaXZpZGUgMEUrMyAgICA3RSs1ICAtPiAwLjAwCisKKy0tIFRoZXNlIHdlcmUgJ2lucHV0IHJvdW5kaW5nJworZHFkaXY0NDEgZGl2aWRlIDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKK2RxZGl2NDQyIGRpdmlkZSAxIDEyMzQ1Njc4MDAwIC0+IDguMTAwMDAwNjY0MjAwMDU0NDY0NDA0NDY2MDgxMTY2MjE5RS0xMSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDQzIGRpdmlkZSAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKK2RxZGl2NDQ0IGRpdmlkZSAxIDEyMzQ1Njc4MDAgIC0+IDguMTAwMDAwNjY0MjAwMDU0NDY0NDA0NDY2MDgxMTY2MjE5RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDQ1IGRpdmlkZSAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK2RxZGl2NDQ2IGRpdmlkZSAxIDEyMzQ1Njc4OTAgIC0+IDguMTAwMDAwMDczNzEwMDAwNjcwNzYxMDA2MTAzOTI1MTU2RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDQ3IGRpdmlkZSAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKK2RxZGl2NDQ4IGRpdmlkZSAxIDEyMzQ1Njc4OTEgIC0+IDguMTAwMDAwMDY3MTQ5MDAwNTU2NjY1MjE0NjE0NzU0NjI5RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDQ5IGRpdmlkZSAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCitkcWRpdjQ1MCBkaXZpZGUgMSAxMjM0NTY3ODkwMSAtPiA4LjEwMDAwMDA3MzA1MzkwMDY1ODg3MzEzMDA0MjM3Njc2MEUtMTEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ1MSBkaXZpZGUgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2CitkcWRpdjQ1MiBkaXZpZGUgMSAxMjM0NTY3ODk2ICAtPiA4LjEwMDAwMDAzNDM0NDAwMDE0NTYxODU2MDYxNzQyMjY5N0UtMTAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGhpZ2gtbG93cworZHFkaXY0NTMgZGl2aWRlIDFlKzEgICAxICAgIC0+ICAgMUUrMQorZHFkaXY0NTQgZGl2aWRlIDFlKzEgICAxLjAgIC0+ICAgMUUrMQorZHFkaXY0NTUgZGl2aWRlIDFlKzEgICAxLjAwIC0+ICAgMUUrMQorZHFkaXY0NTYgZGl2aWRlIDFlKzIgICAyICAgIC0+ICAgNUUrMQorZHFkaXY0NTcgZGl2aWRlIDFlKzIgICAyLjAgIC0+ICAgNUUrMQorZHFkaXY0NTggZGl2aWRlIDFlKzIgICAyLjAwIC0+ICAgNUUrMQorCistLSBzb21lIGZyb20gSUVFRSBkaXNjdXNzaW9ucworZHFkaXY0NjAgZGl2aWRlIDNlMCAgICAgIDJlMCAgICAgLT4gMS41CitkcWRpdjQ2MSBkaXZpZGUgMzBlLTEgICAgMmUwICAgICAtPiAxLjUKK2RxZGl2NDYyIGRpdmlkZSAzMDBlLTIgICAyZTAgICAgIC0+IDEuNTAKK2RxZGl2NDY0IGRpdmlkZSAzMDAwZS0zICAyZTAgICAgIC0+IDEuNTAwCitkcWRpdjQ2NSBkaXZpZGUgM2UwICAgICAgMjBlLTEgICAtPiAxLjUKK2RxZGl2NDY2IGRpdmlkZSAzMGUtMSAgICAyMGUtMSAgIC0+IDEuNQorZHFkaXY0NjcgZGl2aWRlIDMwMGUtMiAgIDIwZS0xICAgLT4gMS41CitkcWRpdjQ2OCBkaXZpZGUgMzAwMGUtMyAgMjBlLTEgICAtPiAxLjUwCitkcWRpdjQ2OSBkaXZpZGUgM2UwICAgICAgMjAwZS0yICAtPiAxLjUKK2RxZGl2NDcwIGRpdmlkZSAzMGUtMSAgICAyMDBlLTIgIC0+IDEuNQorZHFkaXY0NzEgZGl2aWRlIDMwMGUtMiAgIDIwMGUtMiAgLT4gMS41CitkcWRpdjQ3MiBkaXZpZGUgMzAwMGUtMyAgMjAwZS0yICAtPiAxLjUKK2RxZGl2NDczIGRpdmlkZSAzZTAgICAgICAyMDAwZS0zIC0+IDEuNQorZHFkaXY0NzQgZGl2aWRlIDMwZS0xICAgIDIwMDBlLTMgLT4gMS41CitkcWRpdjQ3NSBkaXZpZGUgMzAwZS0yICAgMjAwMGUtMyAtPiAxLjUKK2RxZGl2NDc2IGRpdmlkZSAzMDAwZS0zICAyMDAwZS0zIC0+IDEuNQorCistLSBzb21lIHJlY2lwcm9jYWxzCitkcWRpdjQ4MCBkaXZpZGUgMSAgICAgICAgMS4wRSszMyAtPiAxRS0zMworZHFkaXY0ODEgZGl2aWRlIDEgICAgICAgIDEwRSszMyAgLT4gMUUtMzQKK2RxZGl2NDgyIGRpdmlkZSAxICAgICAgICAxLjBFLTMzIC0+IDFFKzMzCitkcWRpdjQ4MyBkaXZpZGUgMSAgICAgICAgMTBFLTMzICAtPiAxRSszMgorCistLSBSTVMgZGlzY3Vzc2lvbiB0YWJsZQorZHFkaXY0ODQgZGl2aWRlIDBlNSAgICAgMWUzIC0+ICAgMEUrMgorZHFkaXY0ODUgZGl2aWRlIDBlNSAgICAgMmUzIC0+ICAgMEUrMgorZHFkaXY0ODYgZGl2aWRlIDBlNSAgICAxMGUyIC0+ICAgMEUrMworZHFkaXY0ODcgZGl2aWRlIDBlNSAgICAyMGUyIC0+ICAgMEUrMworZHFkaXY0ODggZGl2aWRlIDBlNSAgIDEwMGUxIC0+ICAgMEUrNAorZHFkaXY0ODkgZGl2aWRlIDBlNSAgIDIwMGUxIC0+ICAgMEUrNAorCitkcWRpdjQ5MSBkaXZpZGUgMWU1ICAgICAxZTMgLT4gICAxRSsyCitkcWRpdjQ5MiBkaXZpZGUgMWU1ICAgICAyZTMgLT4gICA1RSsxCitkcWRpdjQ5MyBkaXZpZGUgMWU1ICAgIDEwZTIgLT4gICAxRSsyCitkcWRpdjQ5NCBkaXZpZGUgMWU1ICAgIDIwZTIgLT4gICA1RSsxCitkcWRpdjQ5NSBkaXZpZGUgMWU1ICAgMTAwZTEgLT4gICAxRSsyCitkcWRpdjQ5NiBkaXZpZGUgMWU1ICAgMjAwZTEgLT4gICA1RSsxCisKKy0tIHRyeXplcm9zIGNhc2VzCityb3VuZGluZzogICAgaGFsZl91cAorZHFkaXY0OTcgIGRpdmlkZSAgMEUrNjEwOCAxMDAwRS0zMyAgLT4gMEUrNjExMSBDbGFtcGVkCitkcWRpdjQ5OCAgZGl2aWRlICAwRS02MTcwIDEwMDBFKzMzICAtPiAwRS02MTc2IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKworLS0gZm9jdXMgb24gdHJhaWxpbmcgemVyb3MgaXNzdWVzCitkcWRpdjUwMCBkaXZpZGUgIDEgICAgICA5LjkgICAgLT4gIDAuMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjUwMSBkaXZpZGUgIDEgICAgICA5LjA5ICAgLT4gIDAuMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjUwMiBkaXZpZGUgIDEgICAgICA5LjAwOSAgLT4gIDAuMTExMDAwMTExMDAwMTExMDAwMTExMDAwMTExMDAwMTExMCAgSW5leGFjdCBSb3VuZGVkCisKK2RxZGl2NTExIGRpdmlkZSAxICAgICAgICAgMiAgICAtPiAwLjUKK2RxZGl2NTEyIGRpdmlkZSAxLjAgICAgICAgMiAgICAtPiAwLjUKK2RxZGl2NTEzIGRpdmlkZSAxLjAwICAgICAgMiAgICAtPiAwLjUwCitkcWRpdjUxNCBkaXZpZGUgMS4wMDAgICAgIDIgICAgLT4gMC41MDAKK2RxZGl2NTE1IGRpdmlkZSAxLjAwMDAgICAgMiAgICAtPiAwLjUwMDAKK2RxZGl2NTE2IGRpdmlkZSAxLjAwMDAwICAgMiAgICAtPiAwLjUwMDAwCitkcWRpdjUxNyBkaXZpZGUgMS4wMDAwMDAgIDIgICAgLT4gMC41MDAwMDAKK2RxZGl2NTE4IGRpdmlkZSAxLjAwMDAwMDAgMiAgICAtPiAwLjUwMDAwMDAKK2RxZGl2NTE5IGRpdmlkZSAxLjAwICAgICAgMi4wMCAtPiAwLjUKKworZHFkaXY1MjEgZGl2aWRlIDIgICAgMSAgICAgICAgIC0+IDIKK2RxZGl2NTIyIGRpdmlkZSAyICAgIDEuMCAgICAgICAtPiAyCitkcWRpdjUyMyBkaXZpZGUgMiAgICAxLjAwICAgICAgLT4gMgorZHFkaXY1MjQgZGl2aWRlIDIgICAgMS4wMDAgICAgIC0+IDIKK2RxZGl2NTI1IGRpdmlkZSAyICAgIDEuMDAwMCAgICAtPiAyCitkcWRpdjUyNiBkaXZpZGUgMiAgICAxLjAwMDAwICAgLT4gMgorZHFkaXY1MjcgZGl2aWRlIDIgICAgMS4wMDAwMDAgIC0+IDIKK2RxZGl2NTI4IGRpdmlkZSAyICAgIDEuMDAwMDAwMCAtPiAyCitkcWRpdjUyOSBkaXZpZGUgMi4wMCAxLjAwICAgICAgLT4gMgorCitkcWRpdjUzMCBkaXZpZGUgIDIuNDAgICAyICAgICAgLT4gIDEuMjAKK2RxZGl2NTMxIGRpdmlkZSAgMi40MCAgIDQgICAgICAtPiAgMC42MAorZHFkaXY1MzIgZGl2aWRlICAyLjQwICAxMCAgICAgIC0+ICAwLjI0CitkcWRpdjUzMyBkaXZpZGUgIDIuNDAgICAyLjAgICAgLT4gIDEuMgorZHFkaXY1MzQgZGl2aWRlICAyLjQwICAgNC4wICAgIC0+ICAwLjYKK2RxZGl2NTM1IGRpdmlkZSAgMi40MCAgMTAuMCAgICAtPiAgMC4yNAorZHFkaXY1MzYgZGl2aWRlICAyLjQwICAgMi4wMCAgIC0+ICAxLjIKK2RxZGl2NTM3IGRpdmlkZSAgMi40MCAgIDQuMDAgICAtPiAgMC42CitkcWRpdjUzOCBkaXZpZGUgIDIuNDAgIDEwLjAwICAgLT4gIDAuMjQKK2RxZGl2NTM5IGRpdmlkZSAgMC45ICAgIDAuMSAgICAtPiAgOQorZHFkaXY1NDAgZGl2aWRlICAwLjkgICAgMC4wMSAgIC0+ICA5RSsxCitkcWRpdjU0MSBkaXZpZGUgIDAuOSAgICAwLjAwMSAgLT4gIDlFKzIKK2RxZGl2NTQyIGRpdmlkZSAgNSAgICAgIDIgICAgICAtPiAgMi41CitkcWRpdjU0MyBkaXZpZGUgIDUgICAgICAyLjAgICAgLT4gIDIuNQorZHFkaXY1NDQgZGl2aWRlICA1ICAgICAgMi4wMCAgIC0+ICAyLjUKK2RxZGl2NTQ1IGRpdmlkZSAgNSAgICAgIDIwICAgICAtPiAgMC4yNQorZHFkaXY1NDYgZGl2aWRlICA1ICAgICAgMjAuMCAgIC0+ICAwLjI1CitkcWRpdjU0NyBkaXZpZGUgIDIuNDAwICAyICAgICAgLT4gIDEuMjAwCitkcWRpdjU0OCBkaXZpZGUgIDIuNDAwICAyLjAgICAgLT4gIDEuMjAKK2RxZGl2NTQ5IGRpdmlkZSAgMi40MDAgIDIuNDAwICAtPiAgMQorCitkcWRpdjU1MCBkaXZpZGUgIDI0MCAgICAxICAgICAgLT4gIDI0MAorZHFkaXY1NTEgZGl2aWRlICAyNDAgICAgMTAgICAgIC0+ICAyNAorZHFkaXY1NTIgZGl2aWRlICAyNDAgICAgMTAwICAgIC0+ICAyLjQKK2RxZGl2NTUzIGRpdmlkZSAgMjQwICAgIDEwMDAgICAtPiAgMC4yNAorZHFkaXY1NTQgZGl2aWRlICAyNDAwICAgMSAgICAgIC0+ICAyNDAwCitkcWRpdjU1NSBkaXZpZGUgIDI0MDAgICAxMCAgICAgLT4gIDI0MAorZHFkaXY1NTYgZGl2aWRlICAyNDAwICAgMTAwICAgIC0+ICAyNAorZHFkaXY1NTcgZGl2aWRlICAyNDAwICAgMTAwMCAgIC0+ICAyLjQKKworLS0gK3ZlIGV4cG9uZW50CitkcWRpdjYwMCBkaXZpZGUgIDIuNEUrOSAgICAgMiAgLT4gIDEuMkUrOQorZHFkaXY2MDEgZGl2aWRlICAyLjQwRSs5ICAgIDIgIC0+ICAxLjIwRSs5CitkcWRpdjYwMiBkaXZpZGUgIDIuNDAwRSs5ICAgMiAgLT4gIDEuMjAwRSs5CitkcWRpdjYwMyBkaXZpZGUgIDIuNDAwMEUrOSAgMiAgLT4gIDEuMjAwMEUrOQorZHFkaXY2MDQgZGl2aWRlICAyNEUrOCAgICAgIDIgIC0+ICAxLjJFKzkKK2RxZGl2NjA1IGRpdmlkZSAgMjQwRSs3ICAgICAyICAtPiAgMS4yMEUrOQorZHFkaXY2MDYgZGl2aWRlICAyNDAwRSs2ICAgIDIgIC0+ICAxLjIwMEUrOQorZHFkaXY2MDcgZGl2aWRlICAyNDAwMEUrNSAgIDIgIC0+ICAxLjIwMDBFKzkKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorZHFkaXY3MzEgZGl2aWRlIDUuMDAgMUUtMyAgICAtPiA1LjAwRSszCitkcWRpdjczMiBkaXZpZGUgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2NzMzIGRpdmlkZSAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkaXY3MzQgZGl2aWRlICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjczNSBkaXZpZGUgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2NzM2IGRpdmlkZSAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorCitkcWRpdjc0MSBkaXZpZGUgIDAgICAgLTEgICAgIC0+IC0wCitkcWRpdjc0MiBkaXZpZGUgLTAgICAgLTEgICAgIC0+ICAwCitkcWRpdjc0MyBkaXZpZGUgIDAgICAgIDEgICAgIC0+ICAwCitkcWRpdjc0NCBkaXZpZGUgLTAgICAgIDEgICAgIC0+IC0wCitkcWRpdjc0NSBkaXZpZGUgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc0NiBkaXZpZGUgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc0NyBkaXZpZGUgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc0OCBkaXZpZGUgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2NzUxIGRpdmlkZSAgMC4wICAtMSAgICAgLT4gLTAuMAorZHFkaXY3NTIgZGl2aWRlIC0wLjAgIC0xICAgICAtPiAgMC4wCitkcWRpdjc1MyBkaXZpZGUgIDAuMCAgIDEgICAgIC0+ICAwLjAKK2RxZGl2NzU0IGRpdmlkZSAtMC4wICAgMSAgICAgLT4gLTAuMAorZHFkaXY3NTUgZGl2aWRlIC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NTYgZGl2aWRlIC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NTcgZGl2aWRlICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NTggZGl2aWRlICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjc2MSBkaXZpZGUgIDAgICAgLTEuMCAgIC0+IC0wRSsxCitkcWRpdjc2MiBkaXZpZGUgLTAgICAgLTEuMCAgIC0+ICAwRSsxCitkcWRpdjc2MyBkaXZpZGUgIDAgICAgIDEuMCAgIC0+ICAwRSsxCitkcWRpdjc2NCBkaXZpZGUgLTAgICAgIDEuMCAgIC0+IC0wRSsxCitkcWRpdjc2NSBkaXZpZGUgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc2NiBkaXZpZGUgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc2NyBkaXZpZGUgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc2OCBkaXZpZGUgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2NzcxIGRpdmlkZSAgMC4wICAtMS4wICAgLT4gLTAKK2RxZGl2NzcyIGRpdmlkZSAtMC4wICAtMS4wICAgLT4gIDAKK2RxZGl2NzczIGRpdmlkZSAgMC4wICAgMS4wICAgLT4gIDAKK2RxZGl2Nzc0IGRpdmlkZSAtMC4wICAgMS4wICAgLT4gLTAKK2RxZGl2Nzc1IGRpdmlkZSAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2Nzc2IGRpdmlkZSAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2Nzc3IGRpdmlkZSAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2Nzc4IGRpdmlkZSAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gU3BlY2lhbHMKK2RxZGl2NzgwIGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY3ODEgZGl2aWRlICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxZGl2NzgyIGRpdmlkZSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcWRpdjc4MyBkaXZpZGUgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFkaXY3ODQgZGl2aWRlICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxZGl2Nzg1IGRpdmlkZSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcWRpdjc4NiBkaXZpZGUgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFkaXY3ODcgZGl2aWRlICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjc4OCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQKK2RxZGl2Nzg5IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY3OTAgZGl2aWRlIC0xICAgICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc5MSBkaXZpZGUgLTAgICAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQKK2RxZGl2NzkyIGRpdmlkZSAgMCAgICAgSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAorZHFkaXY3OTMgZGl2aWRlICAxICAgICBJbmYgICAtPiAgMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc5NCBkaXZpZGUgIDEwMDAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQKK2RxZGl2Nzk1IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWRpdjgwMCBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODAxIGRpdmlkZSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcWRpdjgwMiBkaXZpZGUgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFkaXY4MDMgZGl2aWRlIC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxZGl2ODA0IGRpdmlkZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcWRpdjgwNSBkaXZpZGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFkaXY4MDYgZGl2aWRlIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxZGl2ODA3IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4MDggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjgwOSBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODEwIGRpdmlkZSAtMSAgICAtSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MTEgZGl2aWRlIC0wICAgIC1JbmYgICAtPiAgMEUtNjE3NiBDbGFtcGVkCitkcWRpdjgxMiBkaXZpZGUgIDAgICAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQKK2RxZGl2ODEzIGRpdmlkZSAgMSAgICAtSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MTQgZGl2aWRlICAxMDAwIC1JbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjgxNSBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFkaXY4MjEgZGl2aWRlICBOYU4gLUluZiAgICAtPiAgTmFOCitkcWRpdjgyMiBkaXZpZGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxZGl2ODIzIGRpdmlkZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFkaXY4MjQgZGl2aWRlICBOYU4gLTAgICAgICAtPiAgTmFOCitkcWRpdjgyNSBkaXZpZGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxZGl2ODI2IGRpdmlkZSAgTmFOICAxICAgICAgLT4gIE5hTgorZHFkaXY4MjcgZGl2aWRlICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcWRpdjgyOCBkaXZpZGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxZGl2ODI5IGRpdmlkZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzAgZGl2aWRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzMSBkaXZpZGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODMyIGRpdmlkZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzMgZGl2aWRlIC0wICAgIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzNCBkaXZpZGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODM1IGRpdmlkZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzYgZGl2aWRlICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzNyBkaXZpZGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFkaXY4NDEgZGl2aWRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDIgZGl2aWRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDMgZGl2aWRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDQgZGl2aWRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDUgZGl2aWRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDYgZGl2aWRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDcgZGl2aWRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDggZGl2aWRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NDkgZGl2aWRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTAgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTEgZGl2aWRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTIgZGl2aWRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTMgZGl2aWRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTQgZGl2aWRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTUgZGl2aWRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTYgZGl2aWRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTcgZGl2aWRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTggZGl2aWRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NTkgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWRpdjg2MSBkaXZpZGUgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkcWRpdjg2MiBkaXZpZGUgIE5hTjggIDEwMDAgIC0+ICBOYU44CitkcWRpdjg2MyBkaXZpZGUgIE5hTjcgIEluZiAgIC0+ICBOYU43CitkcWRpdjg2NCBkaXZpZGUgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitkcWRpdjg2NSBkaXZpZGUgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkcWRpdjg2NiBkaXZpZGUgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCitkcWRpdjg2NyBkaXZpZGUgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK2RxZGl2ODcxIGRpdmlkZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3MiBkaXZpZGUgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzMgZGl2aWRlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODc0IGRpdmlkZSAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3NSBkaXZpZGUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzYgZGl2aWRlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODc3IGRpdmlkZSAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3OCBkaXZpZGUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzkgZGl2aWRlICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZHFkaXY4ODEgZGl2aWRlICAtTmFOOSAgLUluZiAgIC0+ICAtTmFOOQorZHFkaXY4ODIgZGl2aWRlICAtTmFOOCAgIDEwMDAgIC0+ICAtTmFOOAorZHFkaXY4ODMgZGl2aWRlICAtTmFONyAgIEluZiAgIC0+ICAtTmFONworZHFkaXY4ODQgZGl2aWRlICAtTmFONiAgLU5hTjUgIC0+ICAtTmFONgorZHFkaXY4ODUgZGl2aWRlICAtSW5mICAgLU5hTjQgIC0+ICAtTmFONAorZHFkaXY4ODYgZGl2aWRlICAtMTAwMCAgLU5hTjMgIC0+ICAtTmFOMworZHFkaXY4ODcgZGl2aWRlICAgSW5mICAgLU5hTjIgIC0+ICAtTmFOMgorCitkcWRpdjg5MSBkaXZpZGUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTIgZGl2aWRlIC1zTmFOOTggLTEgICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODkzIGRpdmlkZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5NCBkaXZpZGUgLXNOYU45NiAtc05hTjk0IC0+IC1OYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTUgZGl2aWRlIC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODk2IGRpdmlkZSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5NyBkaXZpZGUgIDAgICAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTggZGl2aWRlICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODk5IGRpdmlkZSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlIGJ5IDAKK2RxZGl2OTAxIGRpdmlkZSAgICAwICAgICAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkaXY5MDIgZGl2aWRlICAgIDAuMEU1ICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjkwMyBkaXZpZGUgICAgMC4wMDAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2OTA0IGRpdmlkZSAgICAwLjAwMDEgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MDUgZGl2aWRlICAgIDAuMDEgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkwNiBkaXZpZGUgICAgMC4xICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTA3IGRpdmlkZSAgICAxICAgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MDggZGl2aWRlICAgIDEgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkwOSBkaXZpZGUgICAxMCAgICAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTEwIGRpdmlkZSAgIDFFKzEwMCAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MTEgZGl2aWRlICAgMUUrMTAwICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2OTIxIGRpdmlkZSAgIC0wLjAwMDEgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjIgZGl2aWRlICAgLTAuMDEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkyMyBkaXZpZGUgICAtMC4xICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTI0IGRpdmlkZSAgIC0xICAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjUgZGl2aWRlICAgLTEgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkyNiBkaXZpZGUgIC0xMCAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTI3IGRpdmlkZSAgLTFFKzEwMCAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjggZGl2aWRlICAtMUUrMTAwICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2OTMxIGRpdmlkZSAgICAwLjAwMDEgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzIgZGl2aWRlICAgIDAuMDEgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkzMyBkaXZpZGUgICAgMC4xICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTM0IGRpdmlkZSAgICAxICAgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzUgZGl2aWRlICAgIDEgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkzNiBkaXZpZGUgICAxMCAgICAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTM3IGRpdmlkZSAgIDFFKzEwMCAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzggZGl2aWRlICAgMUUrMTAwICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZGl2OTQxIGRpdmlkZSAgIC0wLjAwMDEgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDIgZGl2aWRlICAgLTAuMDEgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjk0MyBkaXZpZGUgICAtMC4xICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQ0IGRpdmlkZSAgIC0xICAgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDUgZGl2aWRlICAgLTEgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjk0NiBkaXZpZGUgIC0xMCAgICAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQ3IGRpdmlkZSAgLTFFKzEwMCAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDggZGl2aWRlICAtMUUrMTAwICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZHFkaXYxMDIxICBkaXZpZGUgMUUwICAgICAgICAgIDFFMCAtPiAxCitkcWRpdjEwMjIgIGRpdmlkZSAxRTAgICAgICAgICAgMkUwIC0+IDAuNQorZHFkaXYxMDIzICBkaXZpZGUgMUUwICAgICAgICAgIDNFMCAtPiAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwMjQgIGRpdmlkZSAxMDBFLTIgICAxMDAwRS0zIC0+IDEKK2RxZGl2MTAyNSAgZGl2aWRlIDI0RS0xICAgICAgICAyRTAgLT4gMS4yCitkcWRpdjEwMjYgIGRpdmlkZSAyNDAwRS0zICAgICAgMkUwIC0+IDEuMjAwCitkcWRpdjEwMjcgIGRpdmlkZSA1RTAgICAgICAgICAgMkUwIC0+IDIuNQorZHFkaXYxMDI4ICBkaXZpZGUgNUUwICAgICAgICAyMEUtMSAtPiAyLjUKK2RxZGl2MTAyOSAgZGl2aWRlIDVFMCAgICAgIDIwMDBFLTMgLT4gMi41CitkcWRpdjEwMzAgIGRpdmlkZSA1RTAgICAgICAgICAyRS0xIC0+IDI1CitkcWRpdjEwMzEgIGRpdmlkZSA1RTAgICAgICAgIDIwRS0yIC0+IDI1CitkcWRpdjEwMzIgIGRpdmlkZSA0ODBFLTIgICAgICAgM0UwIC0+IDEuNjAKK2RxZGl2MTAzMyAgZGl2aWRlIDQ3RS0xICAgICAgICAyRTAgLT4gMi4zNQorCistLSBFQ01BU2NyaXB0IGJhZCBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorZHFkaXYxMDQwICBkaXZpZGUgNSA5ICAtPiAwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogICAgaGFsZl9ldmVuCitkcWRpdjEwNDEgIGRpdmlkZSA2IDExIC0+IDAuNTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gR3l1cmlzIGV4YW1wbGUKK2RxZGl2MTA1MCAgZGl2aWRlIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MTI1NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZHFkaXYxNzUxIGRpdmlkZSAgMWUrNDI3NyAgMWUtMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE3NTIgZGl2aWRlICAxZSs0Mjc3IC0xZS0zMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc1MyBkaXZpZGUgLTFlKzQyNzcgIDFlLTMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzU0IGRpdmlkZSAtMWUrNDI3NyAtMWUtMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE3NTUgZGl2aWRlICAxZS00Mjc3ICAxZSszMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTc1NiBkaXZpZGUgIDFlLTQyNzcgLTFlKzMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxNzU3IGRpdmlkZSAtMWUtNDI3NyAgMWUrMzMxMSAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE3NTggZGl2aWRlIC0xZS00Mjc3IC0xZSszMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkcWRpdjE3NjAgZGl2aWRlIDFlLTYwNjkgMWUrMTAxIC0+IDFFLTYxNzAgU3Vibm9ybWFsCitkcWRpdjE3NjEgZGl2aWRlIDFlLTYwNjkgMWUrMTAyIC0+IDFFLTYxNzEgU3Vibm9ybWFsCitkcWRpdjE3NjIgZGl2aWRlIDFlLTYwNjkgMWUrMTAzIC0+IDFFLTYxNzIgU3Vibm9ybWFsCitkcWRpdjE3NjMgZGl2aWRlIDFlLTYwNjkgMWUrMTA0IC0+IDFFLTYxNzMgU3Vibm9ybWFsCitkcWRpdjE3NjQgZGl2aWRlIDFlLTYwNjkgMWUrMTA1IC0+IDFFLTYxNzQgU3Vibm9ybWFsCitkcWRpdjE3NjUgZGl2aWRlIDFlLTYwNjkgMWUrMTA2IC0+IDFFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE3NjYgZGl2aWRlIDFlLTYwNjkgMWUrMTA3IC0+IDFFLTYxNzYgU3Vibm9ybWFsCitkcWRpdjE3NjcgZGl2aWRlIDFlLTYwNjkgMWUrMTA4IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxNzY4IGRpdmlkZSAxZS02MDY5IDFlKzEwOSAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTc2OSBkaXZpZGUgMWUtNjA2OSAxZSsxMTAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkcWRpdjE3NzAgZGl2aWRlIDFlKzQwIDFlLTYxMDEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZAorZHFkaXYxNzcxIGRpdmlkZSAxZSs0MCAxZS02MTAyIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgQ2xhbXBlZAorZHFkaXYxNzcyIGRpdmlkZSAxZSs0MCAxZS02MTAzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgIENsYW1wZWQKK2RxZGl2MTc3MyBkaXZpZGUgMWUrNDAgMWUtNjEwNCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAorZHFkaXYxNzc0IGRpdmlkZSAxZSs0MCAxZS02MTA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc1IGRpdmlkZSAxZSs0MCAxZS02MTA2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc2IGRpdmlkZSAxZSs0MCAxZS02MTA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc3IGRpdmlkZSAxZSs0MCAxZS02MTA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc4IGRpdmlkZSAxZSs0MCAxZS02MTA5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzc5IGRpdmlkZSAxZSs0MCAxZS02MTEwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitkcWRpdjE4MDEgZGl2aWRlICAxLjAwMDBFLTYxNzIgIDEgICAgIC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwKK2RxZGl2MTgwMiBkaXZpZGUgIDEuMDAwRS02MTcyICAgMWUrMSAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFkaXYxODAzIGRpdmlkZSAgMS4wMEUtNjE3MiAgICAxZSsyICAtPiAxLjAwRS02MTc0ICAgU3Vibm9ybWFsCitkcWRpdjE4MDQgZGl2aWRlICAxLjBFLTYxNzIgICAgIDFlKzMgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxZGl2MTgwNSBkaXZpZGUgIDEuMEUtNjE3MiAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxZGl2MTgwNiBkaXZpZGUgIDEuM0UtNjE3MiAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgwNyBkaXZpZGUgIDEuNUUtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgwOCBkaXZpZGUgIDEuN0UtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgwOSBkaXZpZGUgIDIuM0UtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxMCBkaXZpZGUgIDIuNUUtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxMSBkaXZpZGUgIDIuN0UtNjE3MiAgICAgMWUrNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxMiBkaXZpZGUgIDEuNDlFLTYxNzIgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxMyBkaXZpZGUgIDEuNTBFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxNCBkaXZpZGUgIDEuNTFFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxNSBkaXZpZGUgIDIuNDlFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxNiBkaXZpZGUgIDIuNTBFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgxNyBkaXZpZGUgIDIuNTFFLTYxNzIgICAgMWUrNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFkaXYxODE4IGRpdmlkZSAgMUUtNjE3MiAgICAgICAxZSs0ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwKK2RxZGl2MTgxOSBkaXZpZGUgIDNFLTYxNzIgICAgICAgMWUrNSAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxODIwIGRpdmlkZSAgNUUtNjE3MiAgICAgICAxZSs1ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE4MjEgZGl2aWRlICA3RS02MTcyICAgICAgIDFlKzUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MjIgZGl2aWRlICA5RS02MTcyICAgICAgIDFlKzUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MjMgZGl2aWRlICA5LjlFLTYxNzIgICAgIDFlKzUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxZGl2MTgyNCBkaXZpZGUgIDFFLTYxNzIgICAgICAtMWUrNCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsCitkcWRpdjE4MjUgZGl2aWRlICAzRS02MTcyICAgICAgLTFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTgyNiBkaXZpZGUgLTVFLTYxNzIgICAgICAgMWUrNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxODI3IGRpdmlkZSAgN0UtNjE3MiAgICAgIC0xZSs1ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODI4IGRpdmlkZSAtOUUtNjE3MiAgICAgICAxZSs1ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODI5IGRpdmlkZSAgOS45RS02MTcyICAgIC0xZSs1ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODMwIGRpdmlkZSAgMy4wRS02MTcyICAgIC0xZSs1ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RxZGl2MTgzMSBkaXZpZGUgIDEuMEUtNTk3NyAgICAgMWUrMjAwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxODMyIGRpdmlkZSAgMS4wRS01OTc3ICAgICAxZSsxOTkgLT4gMUUtNjE3NiAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcWRpdjE4MzMgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzQgZGl2aWRlICAyLjBFLTU5NzcgICAgIDJlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzUgZGl2aWRlICA0LjBFLTU5NzcgICAgIDRlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzYgZGl2aWRlIDEwLjBFLTU5NzcgICAgMTBlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzcgZGl2aWRlIDMwLjBFLTU5NzcgICAgMzBlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcWRpdjE4MzggZGl2aWRlIDQwLjBFLTU5ODIgICAgNDBlKzE2NiAtPiAxLjBFLTYxNDggU3Vibm9ybWFsCitkcWRpdjE4MzkgZGl2aWRlIDQwLjBFLTU5ODIgICAgNDBlKzE2NSAtPiAxLjBFLTYxNDcgU3Vibm9ybWFsCitkcWRpdjE4NDAgZGl2aWRlIDQwLjBFLTU5ODIgICAgNDBlKzE2NCAtPiAxLjBFLTYxNDYgU3Vibm9ybWFsCisKKy0tIHJhbmRvbXMKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkcWRpdjIwMTAgIGRpdmlkZSAgLTUyMzExOTU2NTI5MzE2NTE5NjgwMzQzNTYxMTcxMTg4NTAgICAgICAgICAtNzI0MzcxODY2NDQyMjU0ODU3MzIwMzI2MDk3MC4zNDk5NSAgICAgICAgICAtPiAgIDcyMjE2OS45MDk1ODMxMjg0NjI0NzM2MDUxNDYwNTUwNjgwIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDExICBkaXZpZGUgIC04OTU4NDY2OTc3MzkyNy44MjcxMTIzNzM1MDAyMjUxNTM1MiAgICAgICAgLTQyMDc3OTQzNzI4NTI5NjM1ODg0LjIxMTQyNjI3NTMyOTg1ICAgICAgICAgLT4gICAwLjAwMDAwMjEyOTAxNzI5MTE0NjQ3MTU2NTkyODEyNTg4NzUyNzI2NiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxMiAgZGl2aWRlICAtMi44MjgyMDE2OTMzNjA3MjMyMDM4MDY5NzQ4OTE5NDYxODBFLTIzMiAgICA4MTI1OTY1NDEyMjE4MjM5NjAzODYzODQ0MDMwODkyNDAuOSAgICAgICAgIC0+ICAtMy40ODA0NTAwNzU2NDA1MjEzMjAwNDAwNTU3NTkxMjUxMjBFLTI2NSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxMyAgZGl2aWRlICAtNjQ0Mjc3NTM3Mjc2MTA2OTI2NzUwMjkzNzUzOTQwODcyMCAgICAgICAgICAyNDkwNDA4NTA1Ni42OTE4NTQ2NTE0NTE4MjYwNjA4OTE5NiAgICAgICAgIC0+ICAtMjU4NzAzNTU2Mzg4MjI2NDYzNjg3NzAxLjQ4ODQ3MTk1ODkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTQgIGRpdmlkZSAgIDUuNTM1NTIwMDExMjcyNjI1NjI5NjEwMDc5ODc5NzE0NzA1ICAgICAgICAtNDQzNDM2NjQ2NTAuNTcyMDMwNTIwMDMwNjgxMTM1MzEyMDggICAgICAgICAtPiAgLTEuMjQ4MzIyNjMwNzI4MDg5MzA4OTc1OTQwNTMzNDkzNTYyRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxNSAgZGl2aWRlICAgNjU5MTkyNzM3MTI1MTc4NjU5NjQzMjUuOTk0MTk2MjUwMTAgICAgICAgIC0zMTQ3MzMzNTQxNDEzODE3MzczNzg2MjI1MTUuNzc4OTA1NCAgICAgICAgIC0+ICAtMC4wMDAyMDk0NDQ4Mjk1NTIxNDkwNjE2Mzc5Nzg0NzU4OTExNjMyIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDE2ICBkaXZpZGUgIC03Ljc3OTE3MjU2ODE5MzE5NzEwNzExNTI3NTE0MDQzMTEyOUUrNzU5ICAgLTE0MDQ1MzAxNTYzOS4zOTg4OTg3NjUyODk1MTc4NzgyMTQzICAgICAgICAgLT4gICA1LjUzODYyOTc5MjE2MTY0MTUzNDk2Mjc3NDI0NDIzODExNUUrNzQ4IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDE3ICBkaXZpZGUgICA2NDQzMTQ4MzI1OTc1NjkuMDE4MTIyNjA2NzUxODE3ODc5NyAgICAgICAgLTExNTAyNDU4NTI1NzQyNS4xNjM1NzU5NTIxNTY1MjAxMDc1ICAgICAgICAgLT4gIC01LjYwMTU0MDE1MDM1NjQ3OTI1NzM2NzY4NzQ1MDkyMjc5NSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxOCAgZGl2aWRlICAgNi44OTg2NDA5NDE1Nzk2MTE0NTA2NzY1OTI1NTMyODY4NzBFLTQ3ICAgIC0xMTI3MjQyOTg4MTQwNzg1MTQ4NTE2MzkxNDk5OS4yNTk0MyAgICAgICAgIC0+ICAtNi4xMTk5MjM1NzgyODUzMzg2ODkzNzExMzc2NDgzMTkyODBFLTc1IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDE5ICBkaXZpZGUgIC0zNTkxMzQ0NTQ0ODg4NzI3MTMzLjMwODE5NzUwMTYzMjU0ICAgICAgICAgIDUzMjkzOTUuNDIzNzkyNzk1NjYxNDQ2NTYxMDkwMzMxMDM3ICAgICAgICAgLT4gIC02NzM4NzQ2NjI5NDEuMTk2ODUyNTU4OTQ2MDUzMzcyNTI5MCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyMCAgZGl2aWRlICAtNy42ODIzNTY3ODEzODQ2MzEzMTMxNTY0NjI3MjQ0MjU4MzhFKzc0NyAgIC02LjYwMzc1ODU1NTEyMjE5MDU3MjgxOTIyMTQxODA5OTQwRSs3MDMgICAgIC0+ICAgMS4xNjMzMzA5NjAyNzk1NTYwMTY2NzgzNzkxMjg4NzUxNDlFKzQ0IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDIxICBkaXZpZGUgIC00NTExNDk1NTk2NTk2OTQxODIwODYzMjI0LjI3NDY3OTY5OSAgICAgICAgIDMzNjUzOTUwMTcuMjYzMzI5Nzk1NDQ5NjYxNjE2MDkwNzI0ICAgICAgICAgLT4gIC0xMzQwNTU0NTQ4MTE1MzA0LjkwNDE2Njg4ODAxODM0NjI5OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyMiAgZGl2aWRlICAgNS4yMTExNjQxMjc4NDA5MzE1MTcyNjM2Mzk2MDgxNTEyOTkgICAgICAgICAxNjQuNTU2NjM4MTM1NjI3NjU2NzAxMjUzMzg0NzAwNjQ1MyAgICAgICAgIC0+ICAgMC4wMzE2Njc5MDU4NzY1NTIyODg2NDQ3ODI2MDE1NzE1NjUxMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyMyAgZGl2aWRlICAtNDk4OTEuMjI0Mzg5MzQ1ODgzMDM4NDA3NzY4NDYyMDM4MyAgICAgICAgIC00NzE3OS45MzEyOTYxODYwNzQ3NTU0MDUzMzcxMTcxNTMwICAgICAgICAgIC0+ICAgMS4wNTc0NjcwODQzODY3NjcyOTE2MDIxODk2NTY0MzAyNjggSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjQgIGRpdmlkZSAgIDE1MDY1NDc3LjQ3MjE0MjY4NDg4MDc3NDE1NDYyNDEzMzUzICAgICAgICAgNDM2NjIxMS4xMjA4OTI5NTMyNjEzMDk1Mjk3NDA1NTI1OTYgICAgICAgICAtPiAgIDMuNDUwNDY5MzA5NjYxMjI3OTg0MjQ0NTQ1NTEzNDQxMzU5IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDI1ICBkaXZpZGUgICAxLjU3NTY3MDI2OTQ0MDc2MTg0NjEwOTYwMjQyOTYxMjY0NEUrMzcwICAgIDY1MzE5OTY0OTMyNDc0MDMwMC4wMDYxODU0ODI2NDM0MzkgICAgICAgICAgLT4gICAyLjQxMjIzMzc5NTcwMDM1OTE3MDkwNDU4ODU0ODA0MTQ4MUUrMzUyIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDI2ICBkaXZpZGUgIC0yMTEyNDIyMzExNzMzNDQ4OTI0NTczNDMyMTkyLjYyMDE0NSAgICAgICAgLTgwMDY3MjA2LjAzNTkwNjkzMTUzODQ4MjE1ODQ4NjEzNDA2ICAgICAgICAgLT4gICAyNjM4MzExNTA4OTQxNzY2MDE3NS4yMDEwMjY0Njc1NjU3NCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyNyAgZGl2aWRlICAtNjcwOTY1MzYwNTEyNzk4MDkuMzIyMTg2MTE1NDg3MjE4MzkgICAgICAgIC04Njk2ODU0MTI4ODE5NDEwODE2NjQyNTE5OTAxODEuMTA0OSAgICAgICAgIC0+ICAgNy43MTUwMzUyMzY1ODQ4MDU5MjEyNzg1NjYzNjUyMzExNjhFLTE0IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDI4ICBkaXZpZGUgIC01ODYxMjkwODU0ODk2MjA0Ny4yMTg2NjkxMzQyNTQ4ODk3MiAgICAgICAgLTk3ODQ0OTU5NzUzMS4zODczNjY1NTgzNDc1NjMzODMxNjQ0ICAgICAgICAgLT4gICA1OTkwMy44NjA4NTk5MTcwMzA5MTIzNjUwNzg1OTgzNzAyMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyOSAgZGl2aWRlICAtMTMzMDMyNDEyMDEwOTQyLjE0NzY4NjQxMzgyMTMzMTk3OTYgICAgICAgIC03Ljg4MjA1OTI5MzQ5ODY3MDcwNTQ0NjUyODY0ODIwMTM1OUUtNDI4ICAgIC0+ICAgMS42ODc3ODc1MDY1MDQ0MzMwNjQ1NDk1MTU2ODE2OTM3MTVFKzQ0MSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzMCAgZGl2aWRlICAgMS44Mzc0NjY5ODMzODk2NjAyOTQ5MjI5OTcxNjM2MDUxM0UrOTc3ICAgIC05Ljg5NzkyNjYwODk3OTY0OTk1MTY3MjgzOTg3OTEyODYwM0UrMTU0ICAgIC0+ICAtMS44NTY0MTYwNTE1NDIyMTI1NTIwNDIzOTAyMTgwNjI0NThFKzgyMiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzMSAgZGl2aWRlICAtMTEzNzQyNDc1ODQxMzk5MjM2MzA3MTI4OTYyLjE1MDcwNjMgICAgICAgICA4Mjk4NjAyLjIwMzA0OTgzNDczMjY1NzU2Nzk2NTI2Mjk4OSAgICAgICAgIC0+ICAtMTM3MDYyMjEwMDY2NjUxMzc4MjYuMTY1NTczOTM5MTk5MjkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzIgIGRpdmlkZSAgIDE5Ni40Nzg3NTc0NjUwNzU0MTUyOTk1OTQxODA4MzMxODYyICAgICAgICAgOTI5LjY1NTMzODg0NzIzMTgwOTQ0Mjc0MjIxMTcxNzIzOTQgICAgICAgICAtPiAgIDAuMjExMzQ1ODA2NjE3NjUyNjY1MTAwNjkxNzkyMjgxNDAxOCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzMyAgZGl2aWRlICAgNzE5MzEyMjE0NjUuNDM4Njc5OTYyODI4MDM2MjgxMzAzNTAgICAgICAgICAzODM4Njg1OTM0MjA2NDI2MjU3MDkwNzE4LjQwMjI0ODg1MyAgICAgICAgIC0+ICAgMS44NzM4NTAxMzI1Mjc0MjM0MTM2MDcxOTk1MTMzMjQwMjFFLTE0IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDM0ICBkaXZpZGUgICA0ODguNDI4MjUwMjI4OTY1MTY1Mzc4MzU5NjI0NjMxMjg4NSAgICAgICAgLTgwLjY4OTQwOTU2ODA2NjM0MjgwMDc4NzA2NTc3OTUzMTg4ICAgICAgICAgLT4gIC02LjA1MzE4OTA0NzI4MDY5MzMxODg0NDgwMTg5OTQ3MzI3MiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzNSAgZGl2aWRlICAgOS4wMDE3NjQzNDQ5NjM5MjE3NTQ5ODE3NjI5MTMyNDczOTRFLTE2MiAgIC04LjU4NTU0MDk3MzY2NzIwNTc1MzczNDk2NzY0NTM4NjkxOUUtNzI5ICAgIC0+ICAtMS4wNDg0Nzk1NzQyNzE4MjczMjYzOTYwMTI1NzMyMzI5MzRFKzU2NyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzNiAgZGl2aWRlICAtNy40MDQxMzM5NTk0MDk4OTQ3NDM3MDY0MDI4NTcxNDU0NzFFLTgyOCAgIC01MS4zODE1OTkyOTQ2MDI4OTcxMTEzNDY4NDg0MzA4NjI2NSAgICAgICAgIC0+ICAgMS40NDEwMDg4NTU1MTYwMjk0NjEwMzIwNjE3ODUyMTk3NzNFLTgyOSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzNyAgZGl2aWRlICAgMi45Njc1MjAyMzU1NzQ0MTk3OTQwNDg5OTQ0MzYwNDA3MTdFLTYxMyAgIC02MjUyNTEzODU1LjkxMzk0ODk0OTQ5ODc5MjYyNzMxODg5ICAgICAgICAgIC0+ICAtNC43NDYxMjM0MDU2NTY0MDkxMjc1NzI5OTg3NTE4ODUzMzhFLTYyMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzOCAgZGl2aWRlICAtMTg4MjY4NTI2NTQ4MjQwNDA1MDUuODM5MjAzNjY3NjUwNTEgICAgICAgIC02MzM2OTI0ODc3OTQyNDM3OTkyNTkwNTU3NDYwMTQ3MzQwICAgICAgICAgIC0+ICAgMi45NzA5NzYxNDY1NDY0OTQ2Njk4MDc4ODYyNzg1MTkxOTRFLTE1IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDM5ICBkaXZpZGUgIC04LjEwMTQwNjc4NDgwOTE5NzYwNDk0OTU4NDAwMTczNTk0OUUrNTYxICAgIDQuODIzMzAwMzA2OTQ4OTQyODIxMDc2NjgxNjU4NzcxNjM1RSszNjEgICAgLT4gIC0xLjY3OTYzOTcyMTYxMDgzOTIwNDczODQ0NTc0NzIzODk4N0UrMjAwIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDQwICBkaXZpZGUgIC02LjExOTgxOTc3NzczMDk0MDUyMzMxMDYyNTg1MTkxNzIzRSsyOTUgICAgIDEuNTA3NjEwMjUzNzU1MzM5MzI4MzAyNzc5MDA1NTg2NTM0RSsyMzggICAgLT4gIC00LjA1OTI4NTA1ODkxMTU3NzI0NDA0NDQxODQxNjA0NDc2M0UrNTcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDEgIGRpdmlkZSAgIDYuNDcyNjM4ODUwMDQ2ODE1ODgwNTk5MjIwNTM0Mjc0MDU1RS01OTYgICAtNC40NzUyMzM3MTIwODMwNDc1MTY5MzM5MTE3ODYxNTk5NzIgICAgICAgICAtPiAgLTEuNDQ2MzI0MjA3MDYyMjYxNzQ1NTIwNDk2NDc1Nzc4ODc5RS01OTYgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDIgIGRpdmlkZSAgLTg0NDM4NTkzMzMwLjcxMjc3ODM5NjMxMTQ0NTA5Mzk3MTEyICAgICAgICAtNTg2Njg0NTk2MjA0NDAxNjY0MjA4OTQ3LjQwNTQ4Nzk2MzMgICAgICAgICAtPiAgIDEuNDM5MjUwMjE4NTUwMDQxMjI4NzU5OTgzOTM3NzcyNTA0RS0xMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0MyAgZGl2aWRlICAgOS4zNTQ1MzMyMzMyOTQwMjI2MTY2OTU4MTU2NTY3MDQzNjlFLTI0ICAgICA0MDUuNTAwMzkwNjI2MTM1MzA0MjUyMTQ0MTYzNTkxNzQ2ICAgICAgICAgIC0+ICAgMi4zMDY5MTEwMjg4Mjc3NzQ1NDk3NDA1NzEyMjk3MzYxOThFLTI2IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDQ0ICBkaXZpZGUgICA5ODU2MDY0MjMzNTAyMTAuNzM3NDg3NjY1MDE0OTk1Nzg4MSAgICAgICAgLTM2ODExNTYzNjk3LjQxOTI1NjgxODY2Njk0ODU5ODI4Nzk0ICAgICAgICAgLT4gIC0yNjc3NC4zNjk5MDg2NDExOTQ0NTMzNTgxMzM1NDcxNzcxMSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0NSAgZGl2aWRlICAtOC4xODcyODA3NzQxNzc3MTU3MDYyNzgwMDIyNDc3NjYzMTFFLTEyMyAgIC0zODc4NDEyNDM5My45MTIxMjg3MDgyODQzMDAwMTMwMDA2OCAgICAgICAgIC0+ICAgMi4xMTA5ODc2NTMzNTYxMzkxNDczNTcyNDA3Mjc3OTQzNjVFLTEzMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0NiAgZGl2aWRlICAtNC42MTIyMDMxMjYzNTAwNzA5MDM0NTkyNDU3OTgzNzE2NTdFKzkxMiAgICA3Ljk3MTU2MjE4MjcyNzk1NjI5MDkwMTk4NDczNjgwMDUxOUUrNjQgICAgIC0+ICAtNS43ODU4MjA5MjI3MDg2ODMyMzcwOTg4MjY2NjI3Njk3NDhFKzg0NyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0NyAgZGl2aWRlICAgNC42NjEwMTU5MDk0MjE0ODUyOTgyNDc5Mjg5Njc5NzcwODlFKzg4OCAgIC02LjM2MDkxMTI1MzMyMzkyMjMzODczNzMxMTU2Mzg0NTU4MUUrMzg4ICAgIC0+ICAtNy4zMjc1OTE0NzgzMjEzNjU5ODAxNTY2NTQ1Mzk2Mzg4MzZFKzQ5OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0OCAgZGl2aWRlICAgOTE1NjA3ODE3MjkwMy4yNTc1MDAwMDMyNjA3MTA4MzMwMzAgICAgICAgICA3LjE4OTc5NjY1MzI2MjE0NzEzOTA3MTYzNDIzNzk2NDA3NEUtOTAgICAgIC0+ICAgMS4yNzM0ODIyMTU3NjYwMDA5OTQzNjUyMDE1NDUwOTYwMjZFKzEwMiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0OSAgZGl2aWRlICAtMS43MTA3MjIzMDMzMjc0NzY1ODYzNzM0Nzc3ODEyNzY1ODZFLTMxMSAgIC0zMTY3NTYxNjI4MjYwMTU2ODM3MzI5MzIzLjcyOTM4MDY5NSAgICAgICAgIC0+ICAgNS40MDA3NTQ1OTk1Nzg2MTM5ODQ4NzU3NTI5NTg2NDU2NTVFLTMzNiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1MCAgZGl2aWRlICAtNC42NDc5MzUyMTA4ODE4MDYyMzgzMjE2MTYzNDU0MTMwMjFFLTg3OCAgICAyMDkzODguNTQzMTg2Nzc0NDY0ODE3NzMwODQ2MDYzOTU4MiAgICAgICAgIC0+ICAtMi4yMTk3NjU3NzEzOTQ1OTM3MzMxNDA0OTQyOTczODgxNDBFLTg4MyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1MSAgZGl2aWRlICAgNTk1OC42OTQ3MjgzOTU3NjA5OTI3MTkwODQ3ODE1ODI3MDAgICAgICAgICA0LjU0MTUxMDE1NjU2NDMxNTYzMjUzNjM1MzE3MTg0NjA5NkUtNzQ2ICAgIC0+ICAgMS4zMTIwNTEzOTMyNTM2Mzg2NjQ5NDc4NTI2OTMwMDU0ODBFKzc0OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1MiAgZGl2aWRlICAtNy45MzU3MzI1NDQ2NDk3MDIxNzUyNTY2OTk4ODY4NzIwOTNFLTQ4OSAgIC03LjQzMzMyOTA3MzY2NDc5MzEzODk5ODc2NTY0NzQ2Nzk3MUUrMzYwICAgIC0+ICAgMS4wNjc1ODc5NDk2MjYwNzY5MTc2NzIyNzE2MTk2NjQ2NTZFLTg0OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1MyAgZGl2aWRlICAtMjc0NjY1MDg2NDYwMTE1Ny44NjM1ODk5NTk5Mzk5MDEzNTAgICAgICAgICA3LjAxNjY4NDk0NTUwNzY0NzUyODkwNzE4NDY5NDM1OTU5OEUrNTQ4ICAgIC0+ICAtMy45MTQ0NTY1OTMwMDkzMDk1MjkzNTEyNTQ5NTA0Mjk5MzJFLTUzNCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1NCAgZGl2aWRlICAgMzYwNTE0OTQwODYzMTE5NzM2NTQ0Nzk1My45OTQ1NjkxNzggICAgICAgIC03NTYxNDAyNTgyNTY0OTA4Mi43ODI2NDg2NDQyODIzNzgzMyAgICAgICAgIC0+ICAtNDc2NzgzMTUuODg0NzI2OTM1MDcwNjAwNjMxODgwMjA1MzIgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTUgIGRpdmlkZSAgIDc4ODE5NDMyMDkyMTc5ODQwNDkwNjM3NTIxNC4xOTYzNDkgICAgICAgICAtNi4yMjI3MTgxNDg0MzMyNDczODQ5MzI1NzM0MDE5NzYzMzdFLTQxOCAgICAtPiAgLTEuMjY2NjM5OTE4NjM0NjcxODAzOTgyMjIyMjQ0OTc3Mjg3RSs0NDQgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTYgIGRpdmlkZSAgIDU2MjA3MjI3MzA1MzQ3NTIuNzU4MjA4OTQzNDQ3NjAzMjExICAgICAgICAgNi44NDM1NTI4NDExNjg1MzgzMTkxMjMwMDA5MTc2NTc3NTlFLTEzOSAgICAtPiAgIDguMjEzMTY0ODAwNDg1NDM0NjY2NjI5OTcwNDQzNzM5NTU0RSsxNTMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTcgIGRpdmlkZSAgIDczMDQ1MzQ2NzY3MTM3MDM5MzgxMDIuNDAzOTQ5MDE5NDAyICAgICAgICAtNTc2MTY5LjM2ODUwMTA5MzUxMDgxNTMwMjM4MDM1OTA4MzUgICAgICAgICAtPiAgLTEyNjc3NzU2MDE0MjAxOTk1LjMxOTY5MjM3MTQ0Mzk0NzcyIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU4ICBkaXZpZGUgICA4MDY3OTE4NzYyLjEzNDYyMTYzOTI1NDkxNjc4Njk0NTU0NyAgICAgICAgLTguNzc0NzcxNDgwMDU1NTM2MDA5MTA1NTk2MTYzODY0NzU4RSs5NTQgICAgLT4gIC05LjE5NDQ0ODg1ODgzNjMzMjE1Njc2Njc2NDYwNTEyNTI0NUUtOTQ2IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU5ICBkaXZpZGUgICA4LjcwMjA5MzQ1NDEyMzA0NjUwNzU3ODI1Njg5OTUzNzU2M0UtMzI0ICAgLTUuODc1Mzk5NzMzMDE2MDE4NDA0NTgwMjAxMTc2NTc2MjkzRS00MDEgICAgLT4gIC0xLjQ4MTEwNjYyMjQ1MjA1MjU4MTQ3MDQ0MzUyNjk1NzMzNUUrNzcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNjAgIGRpdmlkZSAgLTQxNDI2LjAxNjYyNTE4NDUxODYxMzg2MzUyNDE1MDkyMzU2ICAgICAgICAgOTAuMDAxNDY2MjE2ODQ0NzgzMDA1MTA3Njk4MDIwMTM0NjQgICAgICAgICAtPiAgLTQ2MC4yODE1NzUwMjg3MzE4NjkyNzMyMDY3NzA5MTc2MjAwIEluZXhhY3QgUm91bmRlZAorCistLSByYW5kb20gZGl2aWRlIHRlc3RzIHdpdGggcmVzdWx0IG5lYXIgMQorZHFkaXY0MDAxIGRpdmlkZSAgMjAwMzEwMDM1Mjc3MDc1Mzk2OTg3ODkyNTY2NDUyNDkwMCAgIDIwMDMxMDAzNTI3NzA3NTM5Njk4Nzg5MjU2NjQ0OTc4MjQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMzUxNyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDIgZGl2aWRlICA0ODE3Nzg1NzkzOTE2NDkwNjUyNTc5NTUyMzE4MzcxNjQ1ICAgNDgxNzc4NTc5MzkxNjQ5MDY1MjU3OTU1MjMxODM2MjA5NyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOTgyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwMyBkaXZpZGUgIDgyOTkxODc0MTA5MjAwNjczMjU2NDgwNjg0Mzk1NjAyODIgICA4Mjk5MTg3NDEwOTIwMDY3MzI1NjQ4MDY4NDM5NTkxMTU5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYyNzk1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwNCBkaXZpZGUgIDU2NDEwODg0NTU4OTc0MDcwNDQ1NDQ0NjE3ODUzNjU4OTkgICA1NjQxMDg4NDU1ODk3NDA3MDQ0NTQ0NDYxNzg1Mzg5OTY1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU3MzM4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwNSBkaXZpZGUgIDU3NTIyNzQ2OTQ3MDY1NDUzNTkzMjYzNjEzMTM0OTA0MjQgICA1NzUyMjc0Njk0NzA2NTQ1MzU5MzI2MzYxMzEzNTAyNzIzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTc4NjE5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwNiBkaXZpZGUgIDY3NjIwNzk0NzczNzM2NzA1OTQ4MjkzMTkzNDYwOTk2NjUgICA2NzYyMDc5NDc3MzczNjcwNTk0ODI5MzE5MzQ2MTMyNTc5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUxMzI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwNyBkaXZpZGUgIDcyODY0MjUxNTM2OTE4OTAzNDE2MzMwMjMyMjI2MDI5MTYgICA3Mjg2NDI1MTUzNjkxODkwMzQxNjMzMDIzMjIyNjA2NTU2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwOCBkaXZpZGUgIDk0ODEyMzM5OTE5MDEzMDU3Mjc2NDgzMDY0MjE5NDY2NTUgICA5NDgxMjMzOTkxOTAxMzA1NzI3NjQ4MzA2NDIxOTE5MTI0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MDQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDA5IGRpdmlkZSAgNDI4MjA1Mzk0MTg5Mzk1MTc0MjAyOTQ0NDA2NTYxNDMxMSAgIDQyODIwNTM5NDE4OTM5NTE3NDIwMjk0NDQwNjU1ODMwNzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzI5NCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMTAgZGl2aWRlICAgNjI2ODg4MjI1NDQxMjUwNjM5NzQxNzgxODUwMzM4Njk1ICAgIDYyNjg4ODIyNTQ0MTI1MDYzOTc0MTc4MTg1MDMyNzI5OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MTc5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxMSBkaXZpZGUgIDM4NjA5NzM2NDkyMjIwMjgwMDk0NTY1OTg2MDQ0Njg1NDcgICAzODYwOTczNjQ5MjIyMDI4MDA5NDU2NTk4NjA0NDc2ODQ5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTc4NDk4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxMiBkaXZpZGUgIDQ3NTMxNTcwODAxMjc0NjgxMjc5MDgwNjA2MDc4MjE4MzkgICA0NzUzMTU3MDgwMTI3NDY4MTI3OTA4MDYwNjA3Nzg4Mzc5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwNDAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDEzIGRpdmlkZSAgIDU1MjQ0ODU0NjIwMzc1NDA2MjgwNTcwNjI3Nzg4MDQxOSAgICA1NTI0NDg1NDYyMDM3NTQwNjI4MDU3MDYyNzc4ODE5MDMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzMxMzggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE0IGRpdmlkZSAgODQwNTk1NDUyNzk1MjE1ODQ1NTMyMzcxMzcyODkxNzM5NSAgIDg0MDU5NTQ1Mjc5NTIxNTg0NTUzMjM3MTM3Mjg5MzM4NjYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODA0MDYgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE1IGRpdmlkZSAgNzU1NDA5NjUwMjIzNTMyMTE0MjU1NTgwMjIzODAxNjExNiAgIDc1NTQwOTY1MDIyMzUzMjExNDI1NTU4MDIyMzgwMjY1NDYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODYxOTMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE2IGRpdmlkZSAgNDA1MzI1NzY3NDEyNzUxODYwNjg3MTA1NDkzNDc0Njc4MiAgIDQwNTMyNTc2NzQxMjc1MTg2MDY4NzEwNTQ5MzQ3NjczNTUgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDkyNDMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE3IGRpdmlkZSAgNzExMjQxOTQyMDc1NTA5MDQ1NDcxNjg4ODg0NDAxMTU4MiAgIDcxMTI0MTk0MjA3NTUwOTA0NTQ3MTY4ODg4NDQwMzgxMDUgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjI3MDkgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE4IGRpdmlkZSAgMzEzMjMwMjEzNzUyMDA3MjcyODE2NDU0OTczMDkxMTg0NiAgIDMxMzIzMDIxMzc1MjAwNzI3MjgxNjQ1NDk3MzA5MDg0MTYgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMTkgZGl2aWRlICA0Nzg4Mzc0MDQ1ODQxNDE2MzU1NzA2NzE1MDQ4MTYxMDEzICAgNDc4ODM3NDA0NTg0MTQxNjM1NTcwNjcxNTA0ODE5MDA3NyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzOTMwMyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjAgZGl2aWRlICA5NDY2MDIxNjM2MDQ3NjMwMjE4MjM4MDc1MDk5NTEwNTk3ICAgOTQ2NjAyMTYzNjA0NzYzMDIxODIzODA3NTA5OTQ4NDA1MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyODA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyMSBkaXZpZGUgICA5MTI3NDI3NDU2NDY3NjU2MjU1OTczOTk2OTIxMzg2NTAgICAgOTEyNzQyNzQ1NjQ2NzY1NjI1NTk3Mzk5NjkyMTM5MDQyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NzA1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyMiBkaXZpZGUgIDk1MDg0MDI3NDI5MzM2NDMyMDg4MDYyNjQ4OTcxODg1MDQgICA5NTA4NDAyNzQyOTMzNjQzMjA4ODA2MjY0ODk3MTk1OTczICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMTQ1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyMyBkaXZpZGUgIDExODY5NTY3OTU3MjcyMzM3MDQ5NjIzNjE5MTQzNjA4OTUgICAxMTg2OTU2Nzk1NzI3MjMzNzA0OTYyMzYxOTE0MzI5NTc3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYzODUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI0IGRpdmlkZSAgNTk3MjIxMDI2ODgzOTAxNDgxMjY5NjkxNjE3MDk2NzkzOCAgIDU5NzIyMTAyNjg4MzkwMTQ4MTI2OTY5MTYxNzA5NTQ5NzQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjE3MSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjUgZGl2aWRlICAyMzAzODAxNjI1NTIxNjE5OTMwODk0NDYwMTM5NzkzMTQwICAgMjMwMzgwMTYyNTUyMTYxOTkzMDg5NDQ2MDEzOTc5OTY0MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MTc3MyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjYgZGl2aWRlICA2MDIyMjMxNTYwMDAyODk4MjY0Nzc3MzkzNDczOTY2NTk1ICAgNjAyMjIzMTU2MDAwMjg5ODI2NDc3NzM5MzQ3Mzk0NzE5OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyNyBkaXZpZGUgIDg0MjYxNDgzMzU4MDEzOTYxOTk5NjkzNDYwMzIyMTA4OTMgICA4NDI2MTQ4MzM1ODAxMzk2MTk5OTY5MzQ2MDMyMjAzMTc5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MTUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI4IGRpdmlkZSAgODgxMjI3ODk0NzAyODc4NDYzNzM4Mjg0NzA5ODQxMTc0OSAgIDg4MTIyNzg5NDcwMjg3ODQ2MzczODI4NDcwOTgzODUzMTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk5OSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjkgZGl2aWRlICA4MTQ1MjgyMDAyMzQ4MzY3MzgzMjY0MTk3MTcwMTE2MTQ2ICAgODE0NTI4MjAwMjM0ODM2NzM4MzI2NDE5NzE3MDA4Mzk4OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOTQ4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzMCBkaXZpZGUgIDY4MjE1Nzc1NzE4NzY4NDAxNTMxMjM1MTAxMDczODcwMjYgICA2ODIxNTc3NTcxODc2ODQwMTUzMTIzNTEwMTA3NDE4MDA4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU0NTgyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzMSBkaXZpZGUgIDkwMTg1NTUzMTk1MTg5NjY5NzA0ODA1NjU0ODIwMjM3MjAgICA5MDE4NTU1MzE5NTE4OTY2OTcwNDgwNTY1NDgyMDEzMzQ2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExNTAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDMyIGRpdmlkZSAgNDYwMjE1NTcxMjk5ODIyODQ0OTY0MDcxNzI1Mjc4ODg2NCAgIDQ2MDIxNTU3MTI5OTgyMjg0NDk2NDA3MTcyNTI4MTg1MDIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzU2MDAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDMzIGRpdmlkZSAgNjY3NTYwNzQ4MTUyMjc4NTYxNDUwNjgyODI5MjI2NDQ3MiAgIDY2NzU2MDc0ODE1MjI3ODU2MTQ1MDY4MjgyOTIyNzcxMDAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODEwODMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM0IGRpdmlkZSAgNDAxNTg4MTUxNjg3MTgzMzg5Nzc2Njk0NTgzNjI2NDQ3MiAgIDQwMTU4ODE1MTY4NzE4MzM4OTc3NjY5NDU4MzYyNjI2NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMzUgZGl2aWRlICAxNDE1NTgwMjA1OTMzNDExODM3NTk1NDU5NzE2OTEwMzY1ICAgMTQxNTU4MDIwNTkzMzQxMTgzNzU5NTQ1OTcxNjg4MDEzOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxMzUyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzNiBkaXZpZGUgIDk0MzI5NjgyOTcwNjk1NDI4MTY3NTIwMzUyNzYzNjE1NTIgICA5NDMyOTY4Mjk3MDY5NTQyODE2NzUyMDM1Mjc2MzUzMDU0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM3IGRpdmlkZSAgNDc5OTMxOTU5MTMwMzg0ODUwMDUzMjc2NjY4MjE0MDY1OCAgIDQ3OTkzMTk1OTEzMDM4NDg1MDA1MzI3NjY2ODIxNzI2NTUgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzMzMzAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM4IGRpdmlkZSAgIDMxNjg1NDI3MDczMjgzOTUyOTc5MDU4NDI4NDk4NzQ3MiAgICAzMTY4NTQyNzA3MzI4Mzk1Mjk3OTA1ODQyODUwMDQ4MzIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0NTIxMTQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM5IGRpdmlkZSAgMzU5ODk4MTMwMDU5MjQ5MDQyNzgyNjAyNzk3NTY5NzQxNSAgIDM1OTg5ODEzMDA1OTI0OTA0Mjc4MjYwMjc5NzU2ODY3MTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk3NCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDAgZGl2aWRlICAxNjY0MzE1NDM1Njk0NDYxMzcxMTU1ODAwNjgyMTk2NTIwICAgMTY2NDMxNTQzNTY5NDQ2MTM3MTE1NTgwMDY4MjE5NTYxNyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0MSBkaXZpZGUgIDE2ODA4NzIzMTY1MzExMjg4OTAxMDI4NTUzMTY1MTA1ODEgICAxNjgwODcyMzE2NTMxMTI4ODkwMTAyODU1MzE2NDk1NTQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5NDUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQyIGRpdmlkZSAgOTg4MTI3NDg3OTU2NjQwNTQ3NTc1NTQ5OTI4MTY0NDczMCAgIDk4ODEyNzQ4Nzk1NjY0MDU0NzU3NTU0OTkyODE2MTU3NDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzNCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDMgZGl2aWRlICA0NzM3MjI1OTU3NzE3NDY2OTYwNDQ3MjA0MjMyMjc5MjE2ICAgNDczNzIyNTk1NzcxNzQ2Njk2MDQ0NzIwNDIzMjI3NzQ1MiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0NCBkaXZpZGUgIDI0ODIwOTczNzk0MTQ4NjcwNjEyMTMzMTkzNDY0MTgyODggICAyNDgyMDk3Mzc5NDE0ODY3MDYxMjEzMzE5MzQ2Mzg3OTM2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIyMjggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQ1IGRpdmlkZSAgNzQwNjk3NzU5NTIzMzc2MjcyMzU3NjQzNDEyMjE2MTg2OCAgIDc0MDY5Nzc1OTUyMzM3NjI3MjM1NzY0MzQxMjIxODkwNDIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjMzMTMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQ2IGRpdmlkZSAgIDIyODc4MjA1Nzc1NzU2NjA0NzA4NjU5MzI4MTc3MzU3NyAgICAyMjg3ODIwNTc3NTc1NjYwNDcwODY1OTMyODE3Njk3MjcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNjgyOCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDcgZGl2aWRlICAyOTU2NTk0MjcwMjQwNTc5NjQ4ODIzMjcwNTQwMzY3NjUzICAgMjk1NjU5NDI3MDI0MDU3OTY0ODgyMzI3MDU0MDM2ODU1NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Njk0NiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDggZGl2aWRlICA2MzI2OTY0MDk4ODk3NjIwNjIwNTM0MTM2NzY3NjM0MzQwICAgNjMyNjk2NDA5ODg5NzYyMDYyMDUzNDEzNjc2NzYxOTMzOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzcxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0OSBkaXZpZGUgICA0MTQ1ODY0NDA0NTY1OTAyMTUyNDcwMDI2NzgzMjc4MDAgICAgNDE0NTg2NDQwNDU2NTkwMjE1MjQ3MDAyNjc4MzE2OTIyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYyMzggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDUwIGRpdmlkZSAgNzM2NDU1MjIwODU3MDAzOTM4NjIyMDUwNTYzNjc3OTEyNSAgIDczNjQ1NTIyMDg1NzAwMzkzODYyMjA1MDU2MzY4MDM1NDggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjY4MzcgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDUxIGRpdmlkZSAgNTYyNjI2Njc0OTkwMjM2OTcxMDAyMjgyNDk1MDU5MDA1NiAgIDU2MjYyNjY3NDk5MDIzNjk3MTAwMjI4MjQ5NTA1OTEwMDggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgzMDggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDUyIGRpdmlkZSAgNDg2MzI3ODI5MzkxNjE5NzQ1NDk4NzQ4MTM0MzQ2MDQ4NCAgIDQ4NjMyNzgyOTM5MTYxOTc0NTQ5ODc0ODEzNDM0NDI1MjIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzY5MyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTMgZGl2aWRlICAxMTcwNzEzNTgyMDMwNjM3MzU5NzEzMjQ5Nzk2ODM1NDgzICAgMTE3MDcxMzU4MjAzMDYzNzM1OTcxMzI0OTc5NjgyMzM0NSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMzY4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1NCBkaXZpZGUgIDk4MzgwNjI0OTQ3MjU5NjU2Njc3NzYzMjY1NTYwNTI5MzEgICA5ODM4MDYyNDk0NzI1OTY1NjY3Nzc2MzI2NTU2MDYxMDAyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkxNzk2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1NSBkaXZpZGUgIDQwNzEzODg3MzEyOTg4NjEwOTMwMDU2ODcwOTE0OTg5MjIgICA0MDcxMzg4NzMxMjk4ODYxMDkzMDA1Njg3MDkxNDk4Mjc4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDU2IGRpdmlkZSAgODc1MzE1NTcyMjMyNDcwNjc5NTg1NTAzODU5MDI3MjUyNiAgIDg3NTMxNTU3MjIzMjQ3MDY3OTU4NTUwMzg1OTAyNzY2NTYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUyODIgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDU3IGRpdmlkZSAgNDM5OTk0MTkxMTUzMzI3MzQxODg0NDc0MjY1ODI0MDQ4NSAgIDQzOTk5NDE5MTE1MzMyNzM0MTg4NDQ3NDI2NTgyMTk4OTEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDY4MSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTggZGl2aWRlICA0MTI3ODg0MTU5OTQ5NTAzNjc3Nzc2NDMwNjIwMDUwMjY5ICAgNDEyNzg4NDE1OTk0OTUwMzY3Nzc3NjQzMDYyMDAyNjA5MSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ODU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1OSBkaXZpZGUgIDU1MzYxNjA4MjIzNjA4MDAwNjcwNDI1MjgzMTc0Mzg4MDggICA1NTM2MTYwODIyMzYwODAwMDY3MDQyNTI4MzE3NDUwNjg3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTc4NTQzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2MCBkaXZpZGUgIDM5NzMyMzQ5OTg0Njg2NjQ5MzY2NzEwODgyMzc3MTAyNDYgICAzOTczMjM0OTk4NDY4NjY0OTM2NjcxMDg4MjM3NzQxODg2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIwMzY3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2MSBkaXZpZGUgIDk4MjQ4NTU5MzU2MzgyNjM1OTM0MTA0NDQxNDIzMjczNTggICA5ODI0ODU1OTM1NjM4MjYzNTkzNDEwNDQ0MTQyMzI4NTc2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4NzYwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2MiBkaXZpZGUgIDU5MTcwNzg1MTczNDAyMTgxMzE4NjczMjczMDA4MTQ4NjcgICA1OTE3MDc4NTE3MzQwMjE4MTMxODY3MzI3MzAwNzg4NzAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0MjIgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDYzIGRpdmlkZSAgNDM1NDIzNjYwMTgzMDU0NDg4MjI4NjEzOTYxMjUyMTM2MiAgIDQzNTQyMzY2MDE4MzA1NDQ4ODIyODYxMzk2MTI1NDMyMjMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDk3OTQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY0IGRpdmlkZSAgODA1ODQ3NDc3MjM3NTI1OTAxNzM0MjExMDAxMzg5MTI5NCAgIDgwNTg0NzQ3NzIzNzUyNTkwMTczNDIxMTAwMTM5MDY3OTIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODA3NjggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY1IGRpdmlkZSAgNTUxOTYwNDAyMDk4MTc0ODE3MDUxNzA5Mzc0NjE2NjMyOCAgIDU1MTk2MDQwMjA5ODE3NDgxNzA1MTcwOTM3NDYxODE3NjMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzIwMzYgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY2IGRpdmlkZSAgMTUwMjEzMDk2Njg3OTgwNTQ1ODgzMTMyMzc4MjQ0MzEzOSAgIDE1MDIxMzA5NjY4Nzk4MDU0NTg4MzEzMjM3ODI0MTIyMTMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDU4OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjcgZGl2aWRlICAgNTYyNzk1NjMzNzE5NDgxMjEyOTE1MTU5Nzg3OTgwMjcwICAgIDU2Mjc5NTYzMzcxOTQ4MTIxMjkxNTE1OTc4ODAwNzA2NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUyMzg3NyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjggZGl2aWRlICA2NTg0NzQzMzI0NDk0NjY0MjczOTQxMjgxNTU3MjY4ODc4ICAgNjU4NDc0MzMyNDQ5NDY2NDI3Mzk0MTI4MTU1NzI1ODk0NSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTA4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2OSBkaXZpZGUgIDM2MzIwMDAzMjcyODU3NDM5OTc5NzY0MzExMDk0MTY1MDAgICAzNjMyMDAwMzI3Mjg1NzQzOTk3OTc2NDMxMTA5NDA4MTA3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzMTEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDcwIGRpdmlkZSAgMTE0NTgyNzIzNzMxNTQzMDA4OTM4ODk1MzgzODU2MTQ1MCAgIDExNDU4MjcyMzczMTU0MzAwODkzODg5NTM4Mzg1MjczMzIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTc3NiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzEgZGl2aWRlICA4ODc0NDMxMDEwMzU3NjkxODY5NzI1MzcyMzE3MzUwMzgwICAgODg3NDQzMTAxMDM1NzY5MTg2OTcyNTM3MjMxNzMxNjQ3MiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzODIxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3MiBkaXZpZGUgICA5OTI5NDg3MTg5MDI4MDQ2NDgxMTk3NTMxNDEyMDIxOTYgICAgOTkyOTQ4NzE4OTAyODA0NjQ4MTE5NzUzMTQxMjM1MjIyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjY3Mzk1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3MyBkaXZpZGUgIDI1MjI3MzUxODMzNzQyMTg1MDUxNDI0MTcyNjU0Mzk5ODkgICAyNTIyNzM1MTgzMzc0MjE4NTA1MTQyNDE3MjY1NDUzNzc5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ1MzM3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3NCBkaXZpZGUgIDI2Njg0MTkxNjE5MTI5MzY1MDgwMDY4NzIzMDM1MDEwNTIgICAyNjY4NDE5MTYxOTEyOTM2NTA4MDA2ODcyMzAzNDcxMDM2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEyNDkgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc1IGRpdmlkZSAgMzAzNjE2OTA4NTY2NTE4NjcxMjU5MDk0MTExMTc3NTA5MiAgIDMwMzYxNjkwODU2NjUxODY3MTI1OTA5NDExMTE4MDg4NDYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ODg4MjcgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc2IGRpdmlkZSAgOTQ0MTYzNDYwNDkxNzIzMTYzODUwODg5ODkzNDAwNjE0NyAgIDk0NDE2MzQ2MDQ5MTcyMzE2Mzg1MDg4OTg5MzQwMDAyODggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyMSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzcgZGl2aWRlICAyNjc3MzAxMzUzMTY0Mzc3MDkxMTExNDU4ODExODM5MTkwICAgMjY3NzMwMTM1MzE2NDM3NzA5MTExMTQ1ODgxMTg2NzcyMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg5MzQzMCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzggZGl2aWRlICA2ODQ0OTc5MjAzMTEyMDY2MTY2NTgzNzY1ODU3MTcxNDI2ICAgNjg0NDk3OTIwMzExMjA2NjE2NjU4Mzc2NTg1NzE4OTY4MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MzMyOSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzkgZGl2aWRlICAyMjIwMzM3NDM1MTQxNzk2NzI0MzIzNzgzOTYwMjMxNjYxICAgMjIyMDMzNzQzNTE0MTc5NjcyNDMyMzc4Mzk2MDIwODc3OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMzA2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4MCBkaXZpZGUgIDY0NDc0MjQ3MDAwMTk3ODM5MzE1Njk5OTY5ODk1NjEzODAgICA2NDQ3NDI0NzAwMDE5NzgzOTMxNTY5OTk2OTg5NTcyNDU0ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgyODI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4MSBkaXZpZGUgIDc1MTI4NTY3NjI2OTY2MDcxMTk4NDcwOTIxOTU1ODcxODAgICA3NTEyODU2NzYyNjk2NjA3MTE5ODQ3MDkyMTk1NTU3MzQ2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5NzEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDgyIGRpdmlkZSAgNzM5NTI2MTk4MTE5Mzk2MDM5OTA4NzgxOTA3NzIzNzQ4MiAgIDczOTUyNjE5ODExOTM5NjAzOTkwODc4MTkwNzcyNDI0ODcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMyMzIgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDgzIGRpdmlkZSAgMjI1MzQ0MjQ2NzY4MjU4NDAzNTc5MjcyNDg4NDM3NjczNSAgIDIyNTM0NDI0Njc2ODI1ODQwMzU3OTI3MjQ4ODQ0MDcxNzggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4NjQ5MDQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDg0IGRpdmlkZSAgODE1MzEzODY4MDMwMDIxMzEzNTU3NzMzNjQ2NjE5MDk5NyAgIDgxNTMxMzg2ODAzMDAyMTMxMzU1NzczMzY0NjYyMjA2MDcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjM2ODMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDg1IGRpdmlkZSAgNDY2ODczMTI1MjI1NDE0ODA3NDA0MTAyMjY4MTgwMTM5MCAgIDQ2Njg3MzEyNTIyNTQxNDgwNzQwNDEwMjI2ODE3NzgxMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDk4OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODYgZGl2aWRlICA2MDc4NDA0NTU3OTkzNjY5Njk2MDQwNDI1NTAxODE1MDU2ICAgNjA3ODQwNDU1Nzk5MzY2OTY5NjA0MDQyNTUwMTc5NzYxMiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyODcwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4NyBkaXZpZGUgIDIzMDYzNTIzNTk4NzQyNjE2MjMyMjMzNTY4NzgzMTYyNzggICAyMzA2MzUyMzU5ODc0MjYxNjIzMjIzMzU2ODc4MzM1NjEyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTE2MTcxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4OCBkaXZpZGUgIDMyNjQ4NDIxODY2Njg0ODAzNjI5MDA5MDk1NjQwOTE5MDggICAzMjY0ODQyMTg2NjY4NDgwMzYyOTAwOTA5NTY0MDU4NjU4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxODQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDg5IGRpdmlkZSAgNjk3MTk4NTA0NzI3OTYzNjg3ODk1Nzk1OTYwODYxMjIwNCAgIDY5NzE5ODUwNDcyNzk2MzY4Nzg5NTc5NTk2MDg2MTUwODggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU4NjMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDkwIGRpdmlkZSAgNTI2MjgxMDg4OTk1MjcyMTIzNTQ2NjQ0NTk3MzgxNjI1NyAgIDUyNjI4MTA4ODk5NTI3MjEyMzU0NjY0NDU5NzM3ODMwNzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMwNSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTEgZGl2aWRlICA3OTQ3OTQ0NzMxMDM1MjY3MTc4NTQ4MzU3MDcwMDgwMjg4ICAgNzk0Nzk0NDczMTAzNTI2NzE3ODU0ODM1NzA3MDA2MTMzOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzg0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5MiBkaXZpZGUgIDUwNzE4MDg5MDgzOTUzNzUxMDgzODMwMzU4MDA0NDMyMjkgICA1MDcxODA4OTA4Mzk1Mzc1MTA4MzgzMDM1ODAwNDEyNDI5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwNzMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDkzIGRpdmlkZSAgMjA0MzE0NjU0MjA4NDUwMzY1NTUxMTUwNzIwOTI2Mjk2OSAgIDIwNDMxNDY1NDIwODQ1MDM2NTU1MTE1MDcyMDkyNDkyNjMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcwOCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTQgZGl2aWRlICA0MDk3NjMyNzM1Mzg0NTM0MTgxNjYxOTU5NzMxMjY0ODAyICAgNDA5NzYzMjczNTM4NDUzNDE4MTY2MTk1OTczMTIzNDQ5OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Mzk1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5NSBkaXZpZGUgIDMwNjE0Nzc2NDI4MzEzODc0ODk3Mjk0NjQ1ODcwNDQ0MzAgICAzMDYxNDc3NjQyODMxMzg3NDg5NzI5NDY0NTg3MDU5NDUyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwOTMyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5NiBkaXZpZGUgIDM0Mjk4NTQ5NDEwMzk3NzYxNTk0OTg4MDI5MzYyNTI2MzggICAzNDI5ODU0OTQxMDM5Nzc2MTU5NDk4ODAyOTM2MjQ2NDE1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MTQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDk3IGRpdmlkZSAgNDg3NDMyNDk3OTU3ODU5OTcwMDAyNDEzMzI3ODI4NDU0NSAgIDQ4NzQzMjQ5Nzk1Nzg1OTk3MDAwMjQxMzMyNzgyNjIxMzEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDU5OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTggZGl2aWRlICA1NzAxNjUyMzY5NjkxODMzNTQxNDU1OTc4NTE1ODIwODgyICAgNTcwMTY1MjM2OTY5MTgzMzU0MTQ1NTk3ODUxNTgzNDg1NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3NTQ5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTkgZGl2aWRlICAyOTI4MjA1NzI4NDAyOTQ1MjY2OTUzMjU1NjMyMzQzMTEzICAgMjkyODIwNTcyODQwMjk0NTI2Njk1MzI1NTYzMjM3Mzc5NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg5NTIyMyAgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bGwgdGVzdHMKK2RxZGl2OTk5OCBkaXZpZGUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjk5OTkgZGl2aWRlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlSW50LmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlSW50LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5MDM1MQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGVJbnQuZGVjVGVzdApAQCAtMCwwICsxLDQ1MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcURpdmlkZUludC5kZWNUZXN0IC0tIGRlY1F1YWQgaW50ZWdlciBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKworZHFkdmkwMDEgZGl2aWRlaW50ICAxICAgICAxICAgIC0+ICAxCitkcWR2aTAwMiBkaXZpZGVpbnQgIDIgICAgIDEgICAgLT4gIDIKK2RxZHZpMDAzIGRpdmlkZWludCAgMSAgICAgMiAgICAtPiAgMAorZHFkdmkwMDQgZGl2aWRlaW50ICAyICAgICAyICAgIC0+ICAxCitkcWR2aTAwNSBkaXZpZGVpbnQgIDAgICAgIDEgICAgLT4gIDAKK2RxZHZpMDA2IGRpdmlkZWludCAgMCAgICAgMiAgICAtPiAgMAorZHFkdmkwMDcgZGl2aWRlaW50ICAxICAgICAzICAgIC0+ICAwCitkcWR2aTAwOCBkaXZpZGVpbnQgIDIgICAgIDMgICAgLT4gIDAKK2RxZHZpMDA5IGRpdmlkZWludCAgMyAgICAgMyAgICAtPiAgMQorCitkcWR2aTAxMCBkaXZpZGVpbnQgIDIuNCAgIDEgICAgLT4gIDIKK2RxZHZpMDExIGRpdmlkZWludCAgMi40ICAgLTEgICAtPiAgLTIKK2RxZHZpMDEyIGRpdmlkZWludCAgLTIuNCAgMSAgICAtPiAgLTIKK2RxZHZpMDEzIGRpdmlkZWludCAgLTIuNCAgLTEgICAtPiAgMgorZHFkdmkwMTQgZGl2aWRlaW50ICAyLjQwICAxICAgIC0+ICAyCitkcWR2aTAxNSBkaXZpZGVpbnQgIDIuNDAwIDEgICAgLT4gIDIKK2RxZHZpMDE2IGRpdmlkZWludCAgMi40ICAgMiAgICAtPiAgMQorZHFkdmkwMTcgZGl2aWRlaW50ICAyLjQwMCAyICAgIC0+ICAxCitkcWR2aTAxOCBkaXZpZGVpbnQgIDIuICAgIDIgICAgLT4gIDEKK2RxZHZpMDE5IGRpdmlkZWludCAgMjAgICAgMjAgICAtPiAgMQorCitkcWR2aTAyMCBkaXZpZGVpbnQgIDE4NyAgIDE4NyAgLT4gIDEKK2RxZHZpMDIxIGRpdmlkZWludCAgNSAgICAgMiAgICAtPiAgMgorZHFkdmkwMjIgZGl2aWRlaW50ICA1ICAgICAyLjAgICAgLT4gIDIKK2RxZHZpMDIzIGRpdmlkZWludCAgNSAgICAgMi4wMDAgIC0+ICAyCitkcWR2aTAyNCBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKK2RxZHZpMDI1IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQorCitkcWR2aTAzMCBkaXZpZGVpbnQgIDEgICAgIDIgICAgICAtPiAgMAorZHFkdmkwMzEgZGl2aWRlaW50ICAxICAgICA0ICAgICAgLT4gIDAKK2RxZHZpMDMyIGRpdmlkZWludCAgMSAgICAgOCAgICAgIC0+ICAwCitkcWR2aTAzMyBkaXZpZGVpbnQgIDEgICAgIDE2ICAgICAtPiAgMAorZHFkdmkwMzQgZGl2aWRlaW50ICAxICAgICAzMiAgICAgLT4gIDAKK2RxZHZpMDM1IGRpdmlkZWludCAgMSAgICAgNjQgICAgIC0+ICAwCitkcWR2aTA0MCBkaXZpZGVpbnQgIDEgICAgLTIgICAgICAtPiAtMAorZHFkdmkwNDEgZGl2aWRlaW50ICAxICAgIC00ICAgICAgLT4gLTAKK2RxZHZpMDQyIGRpdmlkZWludCAgMSAgICAtOCAgICAgIC0+IC0wCitkcWR2aTA0MyBkaXZpZGVpbnQgIDEgICAgLTE2ICAgICAtPiAtMAorZHFkdmkwNDQgZGl2aWRlaW50ICAxICAgIC0zMiAgICAgLT4gLTAKK2RxZHZpMDQ1IGRpdmlkZWludCAgMSAgICAtNjQgICAgIC0+IC0wCitkcWR2aTA1MCBkaXZpZGVpbnQgLTEgICAgIDIgICAgICAtPiAtMAorZHFkdmkwNTEgZGl2aWRlaW50IC0xICAgICA0ICAgICAgLT4gLTAKK2RxZHZpMDUyIGRpdmlkZWludCAtMSAgICAgOCAgICAgIC0+IC0wCitkcWR2aTA1MyBkaXZpZGVpbnQgLTEgICAgIDE2ICAgICAtPiAtMAorZHFkdmkwNTQgZGl2aWRlaW50IC0xICAgICAzMiAgICAgLT4gLTAKK2RxZHZpMDU1IGRpdmlkZWludCAtMSAgICAgNjQgICAgIC0+IC0wCitkcWR2aTA2MCBkaXZpZGVpbnQgLTEgICAgLTIgICAgICAtPiAgMAorZHFkdmkwNjEgZGl2aWRlaW50IC0xICAgIC00ICAgICAgLT4gIDAKK2RxZHZpMDYyIGRpdmlkZWludCAtMSAgICAtOCAgICAgIC0+ICAwCitkcWR2aTA2MyBkaXZpZGVpbnQgLTEgICAgLTE2ICAgICAtPiAgMAorZHFkdmkwNjQgZGl2aWRlaW50IC0xICAgIC0zMiAgICAgLT4gIDAKK2RxZHZpMDY1IGRpdmlkZWludCAtMSAgICAtNjQgICAgIC0+ICAwCisKKy0tIHNpbWlsYXIgd2l0aCBwb3dlcnMgb2YgdGVuCitkcWR2aTE2MCBkaXZpZGVpbnQgIDEgICAgIDEgICAgICAgICAtPiAgMQorZHFkdmkxNjEgZGl2aWRlaW50ICAxICAgICAxMCAgICAgICAgLT4gIDAKK2RxZHZpMTYyIGRpdmlkZWludCAgMSAgICAgMTAwICAgICAgIC0+ICAwCitkcWR2aTE2MyBkaXZpZGVpbnQgIDEgICAgIDEwMDAgICAgICAtPiAgMAorZHFkdmkxNjQgZGl2aWRlaW50ICAxICAgICAxMDAwMCAgICAgLT4gIDAKK2RxZHZpMTY1IGRpdmlkZWludCAgMSAgICAgMTAwMDAwICAgIC0+ICAwCitkcWR2aTE2NiBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAgICAtPiAgMAorZHFkdmkxNjcgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMCAgLT4gIDAKK2RxZHZpMTY4IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAwIC0+ICAwCitkcWR2aTE3MCBkaXZpZGVpbnQgIDEgICAgLTEgICAgICAgICAtPiAtMQorZHFkdmkxNzEgZGl2aWRlaW50ICAxICAgIC0xMCAgICAgICAgLT4gLTAKK2RxZHZpMTcyIGRpdmlkZWludCAgMSAgICAtMTAwICAgICAgIC0+IC0wCitkcWR2aTE3MyBkaXZpZGVpbnQgIDEgICAgLTEwMDAgICAgICAtPiAtMAorZHFkdmkxNzQgZGl2aWRlaW50ICAxICAgIC0xMDAwMCAgICAgLT4gLTAKK2RxZHZpMTc1IGRpdmlkZWludCAgMSAgICAtMTAwMDAwICAgIC0+IC0wCitkcWR2aTE3NiBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAgICAtPiAtMAorZHFkdmkxNzcgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMCAgLT4gLTAKK2RxZHZpMTc4IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAwIC0+IC0wCitkcWR2aTE4MCBkaXZpZGVpbnQgLTEgICAgIDEgICAgICAgICAtPiAtMQorZHFkdmkxODEgZGl2aWRlaW50IC0xICAgICAxMCAgICAgICAgLT4gLTAKK2RxZHZpMTgyIGRpdmlkZWludCAtMSAgICAgMTAwICAgICAgIC0+IC0wCitkcWR2aTE4MyBkaXZpZGVpbnQgLTEgICAgIDEwMDAgICAgICAtPiAtMAorZHFkdmkxODQgZGl2aWRlaW50IC0xICAgICAxMDAwMCAgICAgLT4gLTAKK2RxZHZpMTg1IGRpdmlkZWludCAtMSAgICAgMTAwMDAwICAgIC0+IC0wCitkcWR2aTE4NiBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAgICAtPiAtMAorZHFkdmkxODcgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMCAgLT4gLTAKK2RxZHZpMTg4IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAwIC0+IC0wCitkcWR2aTE5MCBkaXZpZGVpbnQgLTEgICAgLTEgICAgICAgICAtPiAgMQorZHFkdmkxOTEgZGl2aWRlaW50IC0xICAgIC0xMCAgICAgICAgLT4gIDAKK2RxZHZpMTkyIGRpdmlkZWludCAtMSAgICAtMTAwICAgICAgIC0+ICAwCitkcWR2aTE5MyBkaXZpZGVpbnQgLTEgICAgLTEwMDAgICAgICAtPiAgMAorZHFkdmkxOTQgZGl2aWRlaW50IC0xICAgIC0xMDAwMCAgICAgLT4gIDAKK2RxZHZpMTk1IGRpdmlkZWludCAtMSAgICAtMTAwMDAwICAgIC0+ICAwCitkcWR2aTE5NiBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAgICAtPiAgMAorZHFkdmkxOTcgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMCAgLT4gIDAKK2RxZHZpMTk4IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAwIC0+ICAwCisKKy0tIHNvbWUgbG9uZyBvcGVyYW5kIChhdCBwPTkpIGNhc2VzCitkcWR2aTA3MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OQorZHFkdmkwNzEgZGl2aWRlaW50ICA5OTk5OTk5OTkuNCAgIDEgIC0+ICA5OTk5OTk5OTkKK2RxZHZpMDcyIGRpdmlkZWludCAgOTk5OTk5OTk5LjUgICAxICAtPiAgOTk5OTk5OTk5CitkcWR2aTA3MyBkaXZpZGVpbnQgIDk5OTk5OTk5OS45ICAgMSAgLT4gIDk5OTk5OTk5OQorZHFkdmkwNzQgZGl2aWRlaW50ICA5OTk5OTk5OTkuOTk5IDEgIC0+ICA5OTk5OTk5OTkKKworZHFkdmkwOTAgZGl2aWRlaW50ICAwLiAgICAgICAgICAgIDEgICAgLT4gIDAKK2RxZHZpMDkxIGRpdmlkZWludCAgLjAgICAgICAgICAgICAxICAgIC0+ICAwCitkcWR2aTA5MiBkaXZpZGVpbnQgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMAorZHFkdmkwOTMgZGl2aWRlaW50ICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDAKK2RxZHZpMDk0IGRpdmlkZWludCAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwCisKK2RxZHZpMTAwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2RxZHZpMTAxIGRpdmlkZWludCAgMSAgMiAgIC0+IDAKK2RxZHZpMTAyIGRpdmlkZWludCAgMSAgMyAgIC0+IDAKK2RxZHZpMTAzIGRpdmlkZWludCAgMSAgNCAgIC0+IDAKK2RxZHZpMTA0IGRpdmlkZWludCAgMSAgNSAgIC0+IDAKK2RxZHZpMTA1IGRpdmlkZWludCAgMSAgNiAgIC0+IDAKK2RxZHZpMTA2IGRpdmlkZWludCAgMSAgNyAgIC0+IDAKK2RxZHZpMTA3IGRpdmlkZWludCAgMSAgOCAgIC0+IDAKK2RxZHZpMTA4IGRpdmlkZWludCAgMSAgOSAgIC0+IDAKK2RxZHZpMTA5IGRpdmlkZWludCAgMSAgMTAgIC0+IDAKK2RxZHZpMTEwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2RxZHZpMTExIGRpdmlkZWludCAgMiAgMSAgIC0+IDIKK2RxZHZpMTEyIGRpdmlkZWludCAgMyAgMSAgIC0+IDMKK2RxZHZpMTEzIGRpdmlkZWludCAgNCAgMSAgIC0+IDQKK2RxZHZpMTE0IGRpdmlkZWludCAgNSAgMSAgIC0+IDUKK2RxZHZpMTE1IGRpdmlkZWludCAgNiAgMSAgIC0+IDYKK2RxZHZpMTE2IGRpdmlkZWludCAgNyAgMSAgIC0+IDcKK2RxZHZpMTE3IGRpdmlkZWludCAgOCAgMSAgIC0+IDgKK2RxZHZpMTE4IGRpdmlkZWludCAgOSAgMSAgIC0+IDkKK2RxZHZpMTE5IGRpdmlkZWludCAgMTAgMSAgIC0+IDEwCisKKy0tIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2RxZHZpMTMxIGRpdmlkZWludCAgMTAxLjMgICAxICAgICAtPiAgMTAxCitkcWR2aTEzMiBkaXZpZGVpbnQgIDEwMS4wICAgMSAgICAgLT4gIDEwMQorZHFkdmkxMzMgZGl2aWRlaW50ICAxMDEuMyAgIDMgICAgIC0+ICAzMworZHFkdmkxMzQgZGl2aWRlaW50ICAxMDEuMCAgIDMgICAgIC0+ICAzMworZHFkdmkxMzUgZGl2aWRlaW50ICAyLjQgICAgIDEgICAgIC0+ICAyCitkcWR2aTEzNiBkaXZpZGVpbnQgIDIuNDAwICAgMSAgICAgLT4gIDIKK2RxZHZpMTM3IGRpdmlkZWludCAgMTggICAgICAxOCAgICAtPiAgMQorZHFkdmkxMzggZGl2aWRlaW50ICAxMTIwICAgIDEwMDAgIC0+ICAxCitkcWR2aTEzOSBkaXZpZGVpbnQgIDIuNCAgICAgMiAgICAgLT4gIDEKK2RxZHZpMTQwIGRpdmlkZWludCAgMi40MDAgICAyICAgICAtPiAgMQorZHFkdmkxNDEgZGl2aWRlaW50ICAwLjUgICAgIDIuMDAwIC0+ICAwCitkcWR2aTE0MiBkaXZpZGVpbnQgIDguMDA1ICAgNyAgICAgLT4gIDEKK2RxZHZpMTQzIGRpdmlkZWludCAgNSAgICAgICAyICAgICAtPiAgMgorZHFkdmkxNDQgZGl2aWRlaW50ICAwICAgICAgIDIgICAgIC0+ICAwCitkcWR2aTE0NSBkaXZpZGVpbnQgIDAuMDAgICAgMiAgICAgLT4gIDAKKworLS0gT3RoZXJzCitkcWR2aTE1MCBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkKK2RxZHZpMTUxIGRpdmlkZWludCAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3MworZHFkdmkxNTIgZGl2aWRlaW50ICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5CitkcWR2aTE1MyBkaXZpZGVpbnQgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkKK2RxZHZpMTU0IGRpdmlkZWludCAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMAorZHFkdmkxNTUgZGl2aWRlaW50ICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0CitkcWR2aTE1NiBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjgKK2RxZHZpMTU3IGRpdmlkZWludCAgICAxMDEgIDcuNiAgICAtPiAgMTMKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGVpbnQgYnkgMAorZHFkdmkyMDEgZGl2aWRlaW50ICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZHZpMjAyIGRpdmlkZWludCAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTIwMyBkaXZpZGVpbnQgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmkyMDQgZGl2aWRlaW50ICAwLjAwMDEgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjA1IGRpdmlkZWludCAgMC4wMSAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIwNiBkaXZpZGVpbnQgIDAuMSAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMDcgZGl2aWRlaW50ICAxICAgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjA4IGRpdmlkZWludCAgMSAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIwOSBkaXZpZGVpbnQgMTAgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTAgZGl2aWRlaW50IDFFKzEwMCAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjExIGRpdmlkZWludCAxRSszODAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxNCBkaXZpZGVpbnQgIC0wLjAwMDEgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxNSBkaXZpZGVpbnQgIC0wLjAxICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxNiBkaXZpZGVpbnQgIC0wLjEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxNyBkaXZpZGVpbnQgIC0xICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxOCBkaXZpZGVpbnQgIC0xICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxOSBkaXZpZGVpbnQgLTEwICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIyMCBkaXZpZGVpbnQgLTFFKzEwMCAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIyMSBkaXZpZGVpbnQgLTFFKzM4MCAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworZHFkdmkyNzAgZGl2aWRlaW50IDEgMWUzODQgICAgICAgICAgLT4gMAorZHFkdmkyNzEgZGl2aWRlaW50IDEgMC45ZTM4NCAgICAgICAgLT4gMAorZHFkdmkyNzIgZGl2aWRlaW50IDEgMC45OWUzODQgICAgICAgLT4gMAorZHFkdmkyNzMgZGl2aWRlaW50IDEgMC45OTk5OTk5OTk5OTk5OTk5ZTM4NCAgICAgICAtPiAwCitkcWR2aTI3NCBkaXZpZGVpbnQgOWUzODQgICAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkyNzUgZGl2aWRlaW50IDkuOWUzODQgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjc2IGRpdmlkZWludCA5Ljk5ZTM4NCAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI3NyBkaXZpZGVpbnQgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworZHFkdmkyODAgZGl2aWRlaW50IDAuMSA5ZS0zODMgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjgxIGRpdmlkZWludCAwLjEgOTllLTM4MyAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI4MiBkaXZpZGVpbnQgMC4xIDk5OWUtMzgzICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkyODMgZGl2aWRlaW50IDAuMSA5ZS0zODIgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjg0IGRpdmlkZWludCAwLjEgOTllLTM4MiAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIEdEIGVkZ2UgY2FzZXM6IGxocyBzbWFsbGVyIHRoYW4gcmhzIGJ1dCBtb3JlIGRpZ2l0cworZHFkdmkzMDEgIGRpdmlkZWludCAgMC45ICAgICAgMiAgICAgIC0+ICAwCitkcWR2aTMwMiAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAgICAgLT4gIDAKK2RxZHZpMzAzICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMSAgICAtPiAgMAorZHFkdmkzMDQgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMCAgIC0+ICAwCitkcWR2aTMwNSAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAxICAgLT4gIDAKK2RxZHZpMzA2ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEgICAgICAtPiAgMAorZHFkdmkzMDcgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwCitkcWR2aTMwOCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDAKK2RxZHZpMzA5ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAorZHFkdmkzMTAgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCitkcWR2aTMxMSAgZGl2aWRlaW50ICAwLjEyICAgICAyICAgICAgLT4gIDAKK2RxZHZpMzEyICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMCAgICAtPiAgMAorZHFkdmkzMTMgIGRpdmlkZWludCAgMC4xMiAgICAgMi4xICAgIC0+ICAwCitkcWR2aTMxNCAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAwICAgLT4gIDAKK2RxZHZpMzE1ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDEgICAtPiAgMAorCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKK2RxZHZpMzMwICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgIDEwICAgIC0+ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDUKK2RxZHZpMzMxICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgICAxICAgIC0+ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2CitkcWR2aTMzMiAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMzMzICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK2RxZHZpMTA1MSBkaXZpZGVpbnQgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkxMDUyIGRpdmlkZWludCAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTEwNTMgZGl2aWRlaW50IC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMTA1NCBkaXZpZGVpbnQgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkxMDU1IGRpdmlkZWludCAgMWUtMjc3ICAxZSszMTEgLT4gIDAKK2RxZHZpMTA1NiBkaXZpZGVpbnQgIDFlLTI3NyAtMWUrMzExIC0+IC0wCitkcWR2aTEwNTcgZGl2aWRlaW50IC0xZS0yNzcgIDFlKzMxMSAtPiAtMAorZHFkdmkxMDU4IGRpdmlkZWludCAtMWUtMjc3IC0xZSszMTEgLT4gIDAKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkcWR2aTEwNjAgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDEgLT4gMAorZHFkdmkxMDYxIGRpdmlkZWludCAxZS0yOTEgMWUrMTAyIC0+IDAKK2RxZHZpMTA2MiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMyAtPiAwCitkcWR2aTEwNjMgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDQgLT4gMAorZHFkdmkxMDY0IGRpdmlkZWludCAxZS0yOTEgMWUrMTA1IC0+IDAKK2RxZHZpMTA2NSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNiAtPiAwCitkcWR2aTEwNjYgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDcgLT4gMAorZHFkdmkxMDY3IGRpdmlkZWludCAxZS0yOTEgMWUrMTA4IC0+IDAKK2RxZHZpMTA2OCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOSAtPiAwCitkcWR2aTEwNjkgZGl2aWRlaW50IDFlLTI5MSAxZSsxMTAgLT4gMAorCitkcWR2aTExMDEgZGl2aWRlaW50ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMAorZHFkdmkxMTAyIGRpdmlkZWludCAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDAKK2RxZHZpMTEwMyBkaXZpZGVpbnQgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAwCisKK2RxZHZpMTExOCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAwCitkcWR2aTExMTkgZGl2aWRlaW50ICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTAKK2RxZHZpMTEyMCBkaXZpZGVpbnQgIDVFLTM5NCAgICAgICAxZSs1ICAtPiAwCisKK2RxZHZpMTEyNCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMAorZHFkdmkxMTMwIGRpdmlkZWludCAgMy4wRS0zOTQgICAgLTFlKzUgIC0+IC0wCisKK2RxZHZpMTEzMSBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMAorZHFkdmkxMTMyIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OSAtPiAwCitkcWR2aTExMzMgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk4IC0+IDAKK2RxZHZpMTEzNCBkaXZpZGVpbnQgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMAorZHFkdmkxMTM1IGRpdmlkZWludCAgNC4wRS0xOTkgICAgIDRlKzE5OCAtPiAwCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RxZHZpNDAxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxMDAgLT4gMTIzNDU2NzgwCitkcWR2aTQwMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAgIC0+IDAKK2RxZHZpNDAzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxMCAgLT4gMTIzNDU2NzgwCitkcWR2aTQwNCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAgIC0+IDAKK2RxZHZpNDA1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxMCAgLT4gMTIzNDU2Nzg5CitkcWR2aTQwNiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAgIC0+IDAKK2RxZHZpNDA3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxMCAgLT4gMTIzNDU2Nzg5CitkcWR2aTQwOCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAgIC0+IDAKK2RxZHZpNDA5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxMDAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxMCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAgIC0+IDAKK2RxZHZpNDExIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxMCAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAgIC0+IDAKK2RxZHZpNDEzIGRpdmlkZWludCAxMjM0NTY3ODk0OCAxMDAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxNCBkaXZpZGVpbnQgMTIzNDU2Nzg5NDkgMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTUgZGl2aWRlaW50IDEyMzQ1Njc4OTUwIDEwMCAtPiAxMjM0NTY3ODkKK2RxZHZpNDE2IGRpdmlkZWludCAxMjM0NTY3ODk1MSAxMDAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxNyBkaXZpZGVpbnQgMTIzNDU2Nzg5OTkgMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0NDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKK2RxZHZpNDQyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwIC0+IDAKK2RxZHZpNDQzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKK2RxZHZpNDQ0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgIC0+IDAKK2RxZHZpNDQ1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK2RxZHZpNDQ2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgIC0+IDAKK2RxZHZpNDQ3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKK2RxZHZpNDQ4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgIC0+IDAKK2RxZHZpNDQ5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCitkcWR2aTQ1MCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAtPiAwCitkcWR2aTQ1MSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2CitkcWR2aTQ1MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAtPiAwCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK2RxZHZpNTMxIGRpdmlkZWludCA1LjAwIDFFLTMgICAgLT4gNTAwMAorZHFkdmk1MzIgZGl2aWRlaW50IDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTUzMyBkaXZpZGVpbnQgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZHZpNTM0IGRpdmlkZWludCAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmk1MzUgZGl2aWRlaW50IC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTUzNiBkaXZpZGVpbnQgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKworZHFkdmk1NDEgZGl2aWRlaW50ICAwICAgIC0xICAgICAtPiAtMAorZHFkdmk1NDIgZGl2aWRlaW50IC0wICAgIC0xICAgICAtPiAgMAorZHFkdmk1NDMgZGl2aWRlaW50ICAwICAgICAxICAgICAtPiAgMAorZHFkdmk1NDQgZGl2aWRlaW50IC0wICAgICAxICAgICAtPiAtMAorZHFkdmk1NDUgZGl2aWRlaW50IC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NDYgZGl2aWRlaW50IC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NDcgZGl2aWRlaW50ICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NDggZGl2aWRlaW50ICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWR2aTU1MSBkaXZpZGVpbnQgIDAuMCAgLTEgICAgIC0+IC0wCitkcWR2aTU1MiBkaXZpZGVpbnQgLTAuMCAgLTEgICAgIC0+ICAwCitkcWR2aTU1MyBkaXZpZGVpbnQgIDAuMCAgIDEgICAgIC0+ICAwCitkcWR2aTU1NCBkaXZpZGVpbnQgLTAuMCAgIDEgICAgIC0+IC0wCitkcWR2aTU1NSBkaXZpZGVpbnQgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU1NiBkaXZpZGVpbnQgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU1NyBkaXZpZGVpbnQgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU1OCBkaXZpZGVpbnQgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZHZpNTYxIGRpdmlkZWludCAgMCAgICAtMS4wICAgLT4gLTAKK2RxZHZpNTYyIGRpdmlkZWludCAtMCAgICAtMS4wICAgLT4gIDAKK2RxZHZpNTYzIGRpdmlkZWludCAgMCAgICAgMS4wICAgLT4gIDAKK2RxZHZpNTY0IGRpdmlkZWludCAtMCAgICAgMS4wICAgLT4gLTAKK2RxZHZpNTY1IGRpdmlkZWludCAtMSAgICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTY2IGRpdmlkZWludCAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTY3IGRpdmlkZWludCAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTY4IGRpdmlkZWludCAgMSAgICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZHFkdmk1NzEgZGl2aWRlaW50ICAwLjAgIC0xLjAgICAtPiAtMAorZHFkdmk1NzIgZGl2aWRlaW50IC0wLjAgIC0xLjAgICAtPiAgMAorZHFkdmk1NzMgZGl2aWRlaW50ICAwLjAgICAxLjAgICAtPiAgMAorZHFkdmk1NzQgZGl2aWRlaW50IC0wLjAgICAxLjAgICAtPiAtMAorZHFkdmk1NzUgZGl2aWRlaW50IC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NzYgZGl2aWRlaW50IC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NzcgZGl2aWRlaW50ICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NzggZGl2aWRlaW50ICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBTcGVjaWFscworZHFkdmk1ODAgZGl2aWRlaW50ICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTU4MSBkaXZpZGVpbnQgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZHFkdmk1ODIgZGl2aWRlaW50ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RxZHZpNTgzIGRpdmlkZWludCAgSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkcWR2aTU4NCBkaXZpZGVpbnQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZHFkdmk1ODUgZGl2aWRlaW50ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RxZHZpNTg2IGRpdmlkZWludCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkcWR2aTU4NyBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNTg4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTAKK2RxZHZpNTg5IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk1OTAgZGl2aWRlaW50IC0xICAgICBJbmYgICAtPiAtMAorZHFkdmk1OTEgZGl2aWRlaW50IC0wICAgICBJbmYgICAtPiAtMAorZHFkdmk1OTIgZGl2aWRlaW50ICAwICAgICBJbmYgICAtPiAgMAorZHFkdmk1OTMgZGl2aWRlaW50ICAxICAgICBJbmYgICAtPiAgMAorZHFkdmk1OTQgZGl2aWRlaW50ICAxMDAwICBJbmYgICAtPiAgMAorZHFkdmk1OTUgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxZHZpNjAwIGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2MDEgZGl2aWRlaW50IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RxZHZpNjAyIGRpdmlkZWludCAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcWR2aTYwMyBkaXZpZGVpbnQgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHFkdmk2MDQgZGl2aWRlaW50IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RxZHZpNjA1IGRpdmlkZWludCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcWR2aTYwNiBkaXZpZGVpbnQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFkdmk2MDcgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTYwOCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wCitkcWR2aTYwOSBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjEwIGRpdmlkZWludCAtMSAgICAtSW5mICAgLT4gIDAKK2RxZHZpNjExIGRpdmlkZWludCAtMCAgICAtSW5mICAgLT4gIDAKK2RxZHZpNjEyIGRpdmlkZWludCAgMCAgICAtSW5mICAgLT4gLTAKK2RxZHZpNjEzIGRpdmlkZWludCAgMSAgICAtSW5mICAgLT4gLTAKK2RxZHZpNjE0IGRpdmlkZWludCAgMTAwMCAtSW5mICAgLT4gLTAKK2RxZHZpNjE1IGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWR2aTYyMSBkaXZpZGVpbnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxZHZpNjIyIGRpdmlkZWludCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFkdmk2MjMgZGl2aWRlaW50ICBOYU4gLTEgICAgICAtPiAgTmFOCitkcWR2aTYyNCBkaXZpZGVpbnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxZHZpNjI1IGRpdmlkZWludCAgTmFOICAwICAgICAgLT4gIE5hTgorZHFkdmk2MjYgZGl2aWRlaW50ICBOYU4gIDEgICAgICAtPiAgTmFOCitkcWR2aTYyNyBkaXZpZGVpbnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxZHZpNjI4IGRpdmlkZWludCAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFkdmk2MjkgZGl2aWRlaW50ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzMCBkaXZpZGVpbnQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjMxIGRpdmlkZWludCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzIgZGl2aWRlaW50IC0xICAgIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzMyBkaXZpZGVpbnQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjM0IGRpdmlkZWludCAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzUgZGl2aWRlaW50ICAxICAgIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzNiBkaXZpZGVpbnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjM3IGRpdmlkZWludCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcWR2aTY0MSBkaXZpZGVpbnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0MiBkaXZpZGVpbnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0MyBkaXZpZGVpbnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0NCBkaXZpZGVpbnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0NSBkaXZpZGVpbnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0NiBkaXZpZGVpbnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0NyBkaXZpZGVpbnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0OCBkaXZpZGVpbnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY0OSBkaXZpZGVpbnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1MCBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1MSBkaXZpZGVpbnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1MiBkaXZpZGVpbnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1MyBkaXZpZGVpbnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1NCBkaXZpZGVpbnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1NSBkaXZpZGVpbnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1NiBkaXZpZGVpbnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1NyBkaXZpZGVpbnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1OCBkaXZpZGVpbnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY1OSBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxZHZpNjYxIGRpdmlkZWludCAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RxZHZpNjYyIGRpdmlkZWludCAgTmFOOCAgMTAwMCAgLT4gIE5hTjgKK2RxZHZpNjYzIGRpdmlkZWludCAgTmFONyAgSW5mICAgLT4gIE5hTjcKK2RxZHZpNjY0IGRpdmlkZWludCAtTmFONiAgTmFONSAgLT4gLU5hTjYKK2RxZHZpNjY1IGRpdmlkZWludCAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RxZHZpNjY2IGRpdmlkZWludCAtMTAwMCAgTmFOMyAgLT4gIE5hTjMKK2RxZHZpNjY3IGRpdmlkZWludCAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZHFkdmk2NzEgZGl2aWRlaW50IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjcyIGRpdmlkZWludCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3MyBkaXZpZGVpbnQgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzQgZGl2aWRlaW50ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjc1IGRpdmlkZWludCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3NiBkaXZpZGVpbnQgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzcgZGl2aWRlaW50ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjc4IGRpdmlkZWludCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3OSBkaXZpZGVpbnQgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBHeXVyaXMgZXhhbXBsZQorZHFkdmk3MDAgZGl2aWRlaW50IDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDAKKworLS0gTnVsbCB0ZXN0cworZHFkdmk5MDAgZGl2aWRlaW50ICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpOTAxIGRpdmlkZWludCAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRW5jb2RlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRW5jb2RlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllZGY1YgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFFbmNvZGUuZGVjVGVzdApAQCAtMCwwICsxLDQ3NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUVuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgc2l4dGVlbi1ieXRlIGZvcm1hdCB0ZXN0Y2FzZXMgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAwLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDEyOC5kZWNUZXN0XQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgdGhlIHNpeHRlZW4tYnl0ZSBjb25jcmV0ZSByZXByZXNlbnRhdGlvbi4KKy0tIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlOgorLS0KKy0tICAgMSBiaXQgIHNpZ24KKy0tICAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkCistLSAgMTIgYml0cyBleHBvbmVudCBjb250aW51YXRpb24KKy0tIDExMCBiaXRzIGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbgorLS0KKy0tIFRvdGFsIGV4cG9uZW50IGxlbmd0aCAxNCBiaXRzCistLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggMTE0IGJpdHMgKDM0IGRpZ2l0cykKKy0tCistLSBFbGltaXQgPSAxMjI4NyAobWF4aW11bSBlbmNvZGVkIGV4cG9uZW50KQorLS0gRW1heCAgID0gIDYxNDQgKGxhcmdlc3QgZXhwb25lbnQgdmFsdWUpCistLSBFbWluICAgPSAtNjE0MyAoc21hbGxlc3QgZXhwb25lbnQgdmFsdWUpCistLSBiaWFzICAgPSAgNjE3NiAoc3VidHJhY3RlZCBmcm9tIGVuY29kZWQgZXhwb25lbnQpID0gLUV0aW55CisKKy0tIFRoZSB0ZXN0Y2FzZXMgaGVyZSBoYXZlIG9ubHkgZXhhY3RseSByZXByZXNlbnRhYmxlIGRhdGEgb24gdGhlCistLSAnbGVmdC1oYW5kLXNpZGUnOyByb3VuZGluZyBmcm9tIHN0cmluZ3MgaXMgdGVzdGVkIGluICdiYXNlJworLS0gdGVzdGNhc2UgZ3JvdXBzLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKKworLS0gR2VuZXJhbCB0ZXN0Y2FzZXMKKy0tIChtb3N0bHkgZGVyaXZlZCBmcm9tIHRoZSBTdHJhd21hbiA0IGRvY3VtZW50IGFuZCBleGFtcGxlcykKK2RlY3EwMDEgYXBwbHkgICAjQTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTcuNTAKK2RlY3EwMDIgYXBwbHkgICAtNy41MCAgICAgICAgICAgICAtPiAjQTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKKy0tIGRlcml2YXRpdmUgY2Fub25pY2FsIHBsYWluIHN0cmluZ3MKK2RlY3EwMDMgYXBwbHkgICAjQTIwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTcuNTBFKzMKK2RlY3EwMDQgYXBwbHkgICAtNy41MEUrMyAgICAgICAgICAtPiAjQTIwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMDUgYXBwbHkgICAjQTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTc1MAorZGVjcTAwNiBhcHBseSAgIC03NTAgICAgICAgICAgICAgIC0+ICNBMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMAorZGVjcTAwNyBhcHBseSAgICNBMjA3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtNzUuMAorZGVjcTAwOCBhcHBseSAgIC03NS4wICAgICAgICAgICAgIC0+ICNBMjA3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMAorZGVjcTAwOSBhcHBseSAgICNBMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtMC43NTAKK2RlY3EwMTAgYXBwbHkgICAtMC43NTAgICAgICAgICAgICAtPiAjQTIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMTEgYXBwbHkgICAjQTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDc1MAorZGVjcTAxMiBhcHBseSAgIC0wLjA3NTAgICAgICAgICAgIC0+ICNBMjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMAorZGVjcTAxMyBhcHBseSAgICNBMjA2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtMC4wMDA3NTAKK2RlY3EwMTQgYXBwbHkgICAtMC4wMDA3NTAgICAgICAgICAtPiAjQTIwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMTUgYXBwbHkgICAjQTIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwMDA3NTAKK2RlY3EwMTYgYXBwbHkgICAtMC4wMDAwMDc1MCAgICAgICAtPiAjQTIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMTcgYXBwbHkgICAjQTIwNWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTcuNTBFLTcKK2RlY3EwMTggYXBwbHkgICAtNy41MEUtNyAgICAgICAgICAtPiAjQTIwNWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKKworLS0gTm9ybWFsaXR5CitkZWNxMDIwIGFwcGx5ICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0+ICMyNjA4MTM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNAorZGVjcTAyMSBhcHBseSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtPiAjYTYwODEzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQKK2RlY3EwMjIgYXBwbHkgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAgLT4gIzI2MDgwOTEyNDQ5MTI0NDkxMjQ0OTEyNDQ5MTI0NDkxCisKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY3EwMzEgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkZWNxMDMyIGFwcGx5ICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkZWNxMDMzIGFwcGx5ICAgMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQgLT4gIzQ3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0CitkZWNxMDM0IGFwcGx5ICAgIzQ3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0IC0+IDEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0CistLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQorZGVjcTAzNSBhcHBseSAgIDEuMjNFKzYxNDQgICAgLT4gIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3EwMzYgYXBwbHkgICAjNDdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4yMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQKK2RlY3EwMzcgYXBwbHkgICAxRSs2MTQ0ICAgICAgIC0+ICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxMDM4IGFwcGx5ICAgIzQ3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CisKK2RlY3EwNTEgYXBwbHkgICAxMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUKK2RlY3EwNTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUgICAgICAgLT4gMTIzNDUKK2RlY3EwNTMgYXBwbHkgICAxMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MzQKK2RlY3EwNTQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MzQgICAgICAgLT4gMTIzNAorZGVjcTA1NSBhcHBseSAgIDEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMworZGVjcTA1NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAxMjMKK2RlY3EwNTcgYXBwbHkgICAxMiAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKK2RlY3EwNTggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgICAgICAgLT4gMTIKK2RlY3EwNTkgYXBwbHkgICAxICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RlY3EwNjAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMQorZGVjcTA2MSBhcHBseSAgIDEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMworZGVjcTA2MiBhcHBseSAgICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAxLjIzCitkZWNxMDYzIGFwcGx5ICAgMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1CitkZWNxMDY0IGFwcGx5ICAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMy40NQorCistLSBObWluIGFuZCBiZWxvdworZGVjcTA3MSBhcHBseSAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjMDAwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RlY3EwNzIgYXBwbHkgICAjMDAwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gMUUtNjE0MworZGVjcTA3MyBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3EwNzQgYXBwbHkgICAjMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RlY3EwNzUgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMDc2IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCisKK2RlY3EwNzcgYXBwbHkgICAwLjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgU3Vibm9ybWFsCitkZWNxMDc4IGFwcGx5ICAgIzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgIFN1Ym5vcm1hbAorZGVjcTA3OSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRS02MTQzICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICBTdWJub3JtYWwKK2RlY3EwODAgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgICAgLT4gMS4wRS02MTc1ICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY3EwODEgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAgLT4gIzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCitkZWNxMDgyIGFwcGx5ICAgIzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDFFLTYxNzUgICAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNxMDgzIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAorZGVjcTA4NCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxRS02MTc2ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKKworLS0gdW5kZXJmbG93cyBjYW5ub3QgYmUgdGVzdGVkIGZvciBzaW1wbGUgY29waWVzLCBjaGVjayBlZGdlIGNhc2VzCitkZWNxMDkwIGFwcGx5ICAgMWUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsCitkZWNxMTAwIGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZS02MTc2IC0+ICMwMDAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgU3Vibm9ybWFsCisKKy0tIHNhbWUgYWdhaW4sIG5lZ2F0aXZlcworLS0gTm1heCBhbmQgc2ltaWxhcgorZGVjcTEyMiBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RlY3ExMjMgYXBwbHkgICAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkZWNxMTI0IGFwcGx5ICAtMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQgLT4gI2M3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0CitkZWNxMTI1IGFwcGx5ICAgI2M3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0IC0+IC0xLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNEUrNjE0NAorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY3ExMzAgYXBwbHkgIC0xLjIzRSs2MTQ0ICAgIC0+ICNjN2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxMTMxIGFwcGx5ICAgI2M3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorZGVjcTEzMiBhcHBseSAgLTFFKzYxNDQgICAgICAgLT4gI2M3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3ExMzMgYXBwbHkgICAjYzdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CisKK2RlY3ExNTEgYXBwbHkgIC0xMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUKK2RlY3ExNTIgYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUgICAgICAgLT4gLTEyMzQ1CitkZWNxMTUzIGFwcGx5ICAtMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0CitkZWNxMTU0IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0ICAgICAgIC0+IC0xMjM0CitkZWNxMTU1IGFwcGx5ICAtMTIzICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzCitkZWNxMTU2IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzICAgICAgIC0+IC0xMjMKK2RlY3ExNTcgYXBwbHkgIC0xMiAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKK2RlY3ExNTggYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgICAgICAgLT4gLTEyCitkZWNxMTU5IGFwcGx5ICAtMSAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMTYwIGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IC0xCitkZWNxMTYxIGFwcGx5ICAtMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzCitkZWNxMTYyIGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzICAgICAgIC0+IC0xLjIzCitkZWNxMTYzIGFwcGx5ICAtMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1CitkZWNxMTY0IGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjMuNDUKKworLS0gTm1pbiBhbmQgYmVsb3cKK2RlY3ExNzEgYXBwbHkgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzgwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMTcyIGFwcGx5ICAgIzgwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTQzCitkZWNxMTczIGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTE3NCBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RlY3ExNzUgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMTc2IGFwcGx5ICAgIzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworCitkZWNxMTc3IGFwcGx5ICAtMC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICM4MDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIFN1Ym5vcm1hbAorZGVjcTE3OCBhcHBseSAgICM4MDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCAgU3Vibm9ybWFsCitkZWNxMTc5IGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTBFLTYxNDMgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgIFN1Ym5vcm1hbAorZGVjcTE4MCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAgICAtPiAtMS4wRS02MTc1ICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY3ExODEgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAgLT4gIzgwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCitkZWNxMTgyIGFwcGx5ICAgIzgwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTc1ICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGVjcTE4MyBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwKK2RlY3ExODQgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorCistLSB1bmRlcmZsb3cgZWRnZSBjYXNlcworZGVjcTE5MCBhcHBseSAgIC0xZS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwKK2RlY3EyMDAgYXBwbHkgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZS02MTc2IC0+ICM4MDAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgU3Vibm9ybWFsCisKKy0tIHplcm9zCitkZWNxNDAwIGFwcGx5ICAgMEUtODAwMCAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDAxIGFwcGx5ICAgMEUtNjE3NyAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDAyIGFwcGx5ICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDAzIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTYxNzYKK2RlY3E0MDQgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDA1IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTYxNzYKK2RlY3E0MDYgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MDcgYXBwbHkgICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMC4wMAorZGVjcTQwOCBhcHBseSAgIDAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQwOSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwCitkZWNxNDEwIGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDExIGFwcGx5ICAgIzIyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzMKK2RlY3E0MTIgYXBwbHkgICAwRSs2MTExICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MTMgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQorLS0gY2xhbXBlZCB6ZXJvcy4uLgorZGVjcTQxNCBhcHBseSAgIDBFKzYxMTIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQxNSBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSs2MTExCitkZWNxNDE2IGFwcGx5ICAgMEUrNjE0NCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDE3IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTEKK2RlY3E0MTggYXBwbHkgICAwRSs4MDAwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MTkgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQorCistLSBuZWdhdGl2ZSB6ZXJvcworZGVjcTQyMCBhcHBseSAgLTBFLTgwMDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQyMSBhcHBseSAgLTBFLTYxNzcgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQyMiBhcHBseSAgLTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQyMyBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUtNjE3NgorZGVjcTQyNCBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MjUgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTYxNzYKK2RlY3E0MjYgYXBwbHkgIC0wRS0yICAgICAgICAgICAgICAgICAgICAtPiAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MjcgYXBwbHkgICAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTAuMDAKK2RlY3E0MjggYXBwbHkgIC0wICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MjkgYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTAKK2RlY3E0MzAgYXBwbHkgIC0wRSszICAgICAgICAgICAgICAgICAgICAtPiAjYTIwOGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MzEgYXBwbHkgICAjYTIwOGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzMKK2RlY3E0MzIgYXBwbHkgIC0wRSs2MTExICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MzMgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTEKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY3E0MzQgYXBwbHkgIC0wRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MzUgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTEKK2RlY3E0MzYgYXBwbHkgIC0wRSs2MTQ0ICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MzcgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTEKK2RlY3E0MzggYXBwbHkgIC0wRSs4MDAwICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MzkgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTEKKworLS0gZXhwb25lbnQgbGVuZ3RocworZGVjcTQ0MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3CitkZWNxNDQxIGFwcGx5ICAgNyAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RlY3E0NDIgYXBwbHkgICAjMjIwYTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gN0UrOQorZGVjcTQ0MyBhcHBseSAgIDdFKzkgLT4gIzIyMGE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkZWNxNDQ0IGFwcGx5ICAgIzIyMjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzk5CitkZWNxNDQ1IGFwcGx5ICAgN0UrOTkgLT4gIzIyMjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkZWNxNDQ2IGFwcGx5ICAgIzIzMDFjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzk5OQorZGVjcTQ0NyBhcHBseSAgIDdFKzk5OSAtPiAjMjMwMWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RlY3E0NDggYXBwbHkgICAjNDNlM2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gN0UrNTk5OQorZGVjcTQ0OSBhcHBseSAgIDdFKzU5OTkgLT4gIzQzZTNjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CisKKy0tIFNwZWNpYWxzCitkZWNxNTAwIGFwcGx5ICAgSW5maW5pdHkgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUwMSBhcHBseSAgICM3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3OCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MDIgYXBwbHkgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKK2RlY3E1MDMgYXBwbHkgICAjNzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5NzkgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTA0IGFwcGx5ICAgIzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CitkZWNxNTA1IGFwcGx5ICAgIzdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUwNiBhcHBseSAgICM3YTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorZGVjcTUwNyBhcHBseSAgICM3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YiAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MDggYXBwbHkgICAjN2IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKKworZGVjcTUwOSBhcHBseSAgIE5hTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MTAgYXBwbHkgICAjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2MgLT4gIzdjMDAzYzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjCitkZWNxNTExIGFwcGx5ICAgIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IE5hTgorZGVjcTUxMiBhcHBseSAgICM3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZCAtPiAjN2MwMDNkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QKK2RlY3E1MTMgYXBwbHkgICAjN2QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gTmFOCitkZWNxNTE0IGFwcGx5ICAgIzdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICM3ZTAwM2U3ZTdjN2U3ZTdlN2U3YzdlN2U3ZTdlN2M3ZQorZGVjcTUxNSBhcHBseSAgICM3ZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBzTmFOCitkZWNxNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmIC0+ICM3ZTAwM2Y3ZjdjN2Y3ZjdmN2Y3YzdmN2Y3ZjdmN2M3ZgorZGVjcTUxNyBhcHBseSAgICM3ZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBzTmFOCitkZWNxNTE4IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIC0+IHNOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RlY3E1MTkgYXBwbHkgICAjN2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCisKK2RlY3E1MjAgYXBwbHkgICAtSW5maW5pdHkgICAgICAgICAgICAgICAgICAgICAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTIxIGFwcGx5ICAgI2Y4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4IC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUyMiBhcHBseSAgICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY3E1MjMgYXBwbHkgICAjZjk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5NzkgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTI0IGFwcGx5ICAgI2Y5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjcTUyNSBhcHBseSAgICNmYTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YSAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MjYgYXBwbHkgICAjZmEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CitkZWNxNTI3IGFwcGx5ICAgI2ZiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUyOCBhcHBseSAgICNmYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKKworZGVjcTUyOSBhcHBseSAgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MzAgYXBwbHkgICAjZmM3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2MgLT4gI2ZjMDAzYzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjCitkZWNxNTMxIGFwcGx5ICAgI2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1OYU4KK2RlY3E1MzIgYXBwbHkgICAjZmQ3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gI2ZjMDAzZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkCitkZWNxNTMzIGFwcGx5ICAgI2ZkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1OYU4KK2RlY3E1MzQgYXBwbHkgICAjZmU3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2UgLT4gI2ZlMDAzZTdlN2M3ZTdlN2U3ZTdjN2U3ZTdlN2U3YzdlCitkZWNxNTM1IGFwcGx5ICAgI2ZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1zTmFOCitkZWNxNTM2IGFwcGx5ICAgI2ZmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmIC0+ICNmZTAwM2Y3ZjdjN2Y3ZjdmN2Y3YzdmN2Y3ZjdmN2M3ZgorZGVjcTUzNyBhcHBseSAgICNmZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtc05hTgorZGVjcTUzOCBhcHBseSAgICNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiAtc05hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZGVjcTUzOSBhcHBseSAgICNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiAjZmUwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworZGVjcTU0MCBhcHBseSAgIE5hTiAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTU0MSBhcHBseSAgIE5hTjAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTU0MiBhcHBseSAgIE5hTjEgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTU0MyBhcHBseSAgIE5hTjEyICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorZGVjcTU0NCBhcHBseSAgIE5hTjc5ICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorZGVjcTU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQorZGVjcTU0NiBhcHBseSAgIE5hTjEyMzQ1NiAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOGU1NgorZGVjcTU0NyBhcHBseSAgIE5hTjc5OTc5OSAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmN2ZkZgorZGVjcTU0OCBhcHBseSAgIE5hTjc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OSAgLT4gIzdjMDAzZGZmN2ZkZmY3ZmRmZjdmZGZmN2ZkZmY3ZmRmCitkZWNxNTQ5IGFwcGx5ICAgTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RlY3E1NTAgYXBwbHkgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorCistLSBmb2xkLWRvd24gZnVsbCBzZXF1ZW5jZQorZGVjcTYwMSBhcHBseSAgIDFFKzYxNDQgICAgICAgICAgICAgICAgIC0+ICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjAyIGFwcGx5ICAgIzQ3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CitkZWNxNjAzIGFwcGx5ICAgMUUrNjE0MyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MDQgYXBwbHkgICAjNDNmZmM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MworZGVjcTYwNSBhcHBseSAgIDFFKzYxNDIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjA2IGFwcGx5ICAgIzQzZmZjMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MgorZGVjcTYwNyBhcHBseSAgIDFFKzYxNDEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjA4IGFwcGx5ICAgIzQzZmZjMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxCitkZWNxNjA5IGFwcGx5ICAgMUUrNjE0MCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MTAgYXBwbHkgICAjNDNmZmMwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MAorZGVjcTYxMSBhcHBseSAgIDFFKzYxMzkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjEyIGFwcGx5ICAgIzQzZmZjMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOQorZGVjcTYxMyBhcHBseSAgIDFFKzYxMzggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjE0IGFwcGx5ICAgIzQzZmZjMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM4CitkZWNxNjE1IGFwcGx5ICAgMUUrNjEzNyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MTYgYXBwbHkgICAjNDNmZmMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNworZGVjcTYxNyBhcHBseSAgIDFFKzYxMzYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjE4IGFwcGx5ICAgIzQzZmZjMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNgorZGVjcTYxOSBhcHBseSAgIDFFKzYxMzUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjIwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM1CitkZWNxNjIxIGFwcGx5ICAgMUUrNjEzNCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MjIgYXBwbHkgICAjNDNmZmMwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNAorZGVjcTYyMyBhcHBseSAgIDFFKzYxMzMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjI0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMworZGVjcTYyNSBhcHBseSAgIDFFKzYxMzIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjI2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTMyCitkZWNxNjI3IGFwcGx5ICAgMUUrNjEzMSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MjggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMQorZGVjcTYyOSBhcHBseSAgIDFFKzYxMzAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjMwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMAorZGVjcTYzMSBhcHBseSAgIDFFKzYxMjkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjMyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTI5CitkZWNxNjMzIGFwcGx5ICAgMUUrNjEyOCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2MzQgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMEUrNjEyOAorZGVjcTYzNSBhcHBseSAgIDFFKzYxMjcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjM2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMEUrNjEyNworZGVjcTYzNyBhcHBseSAgIDFFKzYxMjYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjM4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSs2MTI2CitkZWNxNjM5IGFwcGx5ICAgMUUrNjEyNSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2NDAgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMEUrNjEyNQorZGVjcTY0MSBhcHBseSAgIDFFKzYxMjQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMEUrNjEyNAorZGVjcTY0MyBhcHBseSAgIDFFKzYxMjMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQ0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwRSs2MTIzCitkZWNxNjQ1IGFwcGx5ICAgMUUrNjEyMiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwIENsYW1wZWQKK2RlY3E2NDYgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMEUrNjEyMgorZGVjcTY0NyBhcHBseSAgIDFFKzYxMjEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQ4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMEUrNjEyMQorZGVjcTY0OSBhcHBseSAgIDFFKzYxMjAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMCBDbGFtcGVkCitkZWNxNjUwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwRSs2MTIwCitkZWNxNjUxIGFwcGx5ICAgMUUrNjExOSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwIENsYW1wZWQKK2RlY3E2NTIgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMEUrNjExOQorZGVjcTY1MyBhcHBseSAgIDFFKzYxMTggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMCBDbGFtcGVkCitkZWNxNjU0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMEUrNjExOAorZGVjcTY1NSBhcHBseSAgIDFFKzYxMTcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMCBDbGFtcGVkCitkZWNxNjU2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwICAgICAgIC0+IDEuMDAwMDAwRSs2MTE3CitkZWNxNjU3IGFwcGx5ICAgMUUrNjExNiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwIENsYW1wZWQKK2RlY3E2NTggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAgICAgICAgLT4gMS4wMDAwMEUrNjExNgorZGVjcTY1OSBhcHBseSAgIDFFKzYxMTUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMCBDbGFtcGVkCitkZWNxNjYwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwICAgICAgIC0+IDEuMDAwMEUrNjExNQorZGVjcTY2MSBhcHBseSAgIDFFKzYxMTQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMCBDbGFtcGVkCitkZWNxNjYyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwICAgICAgIC0+IDEuMDAwRSs2MTE0CitkZWNxNjYzIGFwcGx5ICAgMUUrNjExMyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwIENsYW1wZWQKK2RlY3E2NjQgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAgICAgICAgLT4gMS4wMEUrNjExMworZGVjcTY2NSBhcHBseSAgIDFFKzYxMTIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCBDbGFtcGVkCitkZWNxNjY2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUrNjExMgorZGVjcTY2NyBhcHBseSAgIDFFKzYxMTEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTY2OCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSs2MTExCitkZWNxNjY5IGFwcGx5ICAgMUUrNjExMCAgICAgICAgICAgICAgICAgLT4gIzQzZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxNjcwIGFwcGx5ICAgIzQzZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzYxMTAKKworLS0gU2VsZWN0ZWQgRFBEIGNvZGVzCitkZWNxNzAwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAKK2RlY3E3MDEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAgICAgLT4gOQorZGVjcTcwMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAxMAorZGVjcTcwMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOSAgICAgICAtPiAxOQorZGVjcTcwNCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMCAgICAgICAtPiAyMAorZGVjcTcwNSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOSAgICAgICAtPiAyOQorZGVjcTcwNiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMCAgICAgICAtPiAzMAorZGVjcTcwNyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOSAgICAgICAtPiAzOQorZGVjcTcwOCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgICAgICAtPiA0MAorZGVjcTcwOSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OSAgICAgICAtPiA0OQorZGVjcTcxMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MCAgICAgICAtPiA1MAorZGVjcTcxMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OSAgICAgICAtPiA1OQorZGVjcTcxMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MCAgICAgICAtPiA2MAorZGVjcTcxMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OSAgICAgICAtPiA2OQorZGVjcTcxNCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MCAgICAgICAtPiA3MAorZGVjcTcxNSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MSAgICAgICAtPiA3MQorZGVjcTcxNiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MiAgICAgICAtPiA3MgorZGVjcTcxNyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MyAgICAgICAtPiA3MworZGVjcTcxOCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NCAgICAgICAtPiA3NAorZGVjcTcxOSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NSAgICAgICAtPiA3NQorZGVjcTcyMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NiAgICAgICAtPiA3NgorZGVjcTcyMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NyAgICAgICAtPiA3NworZGVjcTcyMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OCAgICAgICAtPiA3OAorZGVjcTcyMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OSAgICAgICAtPiA3OQorCitkZWNxNzMwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjllICAgICAgIC0+IDk5NAorZGVjcTczMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5ZiAgICAgICAtPiA5OTUKK2RlY3E3MzIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYTAgICAgICAgLT4gNTIwCitkZWNxNzMzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmExICAgICAgIC0+IDUyMQorCistLSBEUEQ6IG9uZSBvZiBlYWNoIG9mIHRoZSBodWZmbWFuIGdyb3VwcworZGVjcTc0MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNmNyAgICAgICAtPiA3NzcKK2RlY3E3NDEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZjggICAgICAgLT4gNzc4CitkZWNxNzQyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ViICAgICAgIC0+IDc4NworZGVjcTc0MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZCAgICAgICAtPiA4NzcKK2RlY3E3NDQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOWYgICAgICAgLT4gOTk3CitkZWNxNzQ1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2JmICAgICAgIC0+IDk3OQorZGVjcTc0NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNkZiAgICAgICAtPiA3OTkKK2RlY3E3NDcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4CisKKworLS0gRFBEIGFsbC1oaWdocyBjYXNlcyAoaW5jbHVkZXMgdGhlIDI0IHJlZHVuZGFudCBjb2RlcykKK2RlY3E3NTAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4CitkZWNxNzUxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTZlICAgICAgIC0+IDg4OAorZGVjcTc1MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2ZSAgICAgICAtPiA4ODgKK2RlY3E3NTMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNmUgICAgICAgLT4gODg4CitkZWNxNzU0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZmICAgICAgIC0+IDg4OQorZGVjcTc1NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2ZiAgICAgICAtPiA4ODkKK2RlY3E3NTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNmYgICAgICAgLT4gODg5CitkZWNxNzU3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzZmICAgICAgIC0+IDg4OQorCitkZWNxNzYwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdlICAgICAgIC0+IDg5OAorZGVjcTc2MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3ZSAgICAgICAtPiA4OTgKK2RlY3E3NjIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyN2UgICAgICAgLT4gODk4CitkZWNxNzYzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzdlICAgICAgIC0+IDg5OAorZGVjcTc2NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZiAgICAgICAtPiA4OTkKK2RlY3E3NjUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxN2YgICAgICAgLT4gODk5CitkZWNxNzY2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjdmICAgICAgIC0+IDg5OQorZGVjcTc2NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZiAgICAgICAtPiA4OTkKKworZGVjcTc3MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlZSAgICAgICAtPiA5ODgKK2RlY3E3NzEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZWUgICAgICAgLT4gOTg4CitkZWNxNzcyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmVlICAgICAgIC0+IDk4OAorZGVjcTc3MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNlZSAgICAgICAtPiA5ODgKK2RlY3E3NzQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZWYgICAgICAgLT4gOTg5CitkZWNxNzc1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWVmICAgICAgIC0+IDk4OQorZGVjcTc3NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJlZiAgICAgICAtPiA5ODkKK2RlY3E3NzcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZWYgICAgICAgLT4gOTg5CisKK2RlY3E3ODAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmUgICAgICAgLT4gOTk4CitkZWNxNzgxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWZlICAgICAgIC0+IDk5OAorZGVjcTc4MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJmZSAgICAgICAtPiA5OTgKK2RlY3E3ODMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZmUgICAgICAgLT4gOTk4CitkZWNxNzg0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmICAgICAgIC0+IDk5OQorZGVjcTc4NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmZiAgICAgICAtPiA5OTkKK2RlY3E3ODYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZmYgICAgICAgLT4gOTk5CitkZWNxNzg3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ZmICAgICAgIC0+IDk5OQorCistLSBNaXNjZWxsYW5lb3VzICh0ZXN0ZXJzJyBxdWVyaWVzLCBldGMuKQorCitkZWNxNzkwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBjMDAwICAgICAgIC0+IDMwMDAwCitkZWNxNzkxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ODAwICAgICAgIC0+IDg5MDAwMAorZGVjcTc5MiBhcHBseSAgIDMwMDAwIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzAwMAorZGVjcTc5MyBhcHBseSAgIDg5MDAwMCAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4MDAKKworLS0gdmFsdWVzIGFyb3VuZCBbdV1pbnQzMiBlZGdlcyAoemVyb3MgZG9uZSBlYXJsaWVyKQorZGVjcTgwMCBhcHBseSAtMjE0NzQ4MzY0NiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2CitkZWNxODAxIGFwcGx5IC0yMTQ3NDgzNjQ3ICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcKK2RlY3E4MDIgYXBwbHkgLTIxNDc0ODM2NDggIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OAorZGVjcTgwMyBhcHBseSAtMjE0NzQ4MzY0OSAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5CitkZWNxODA0IGFwcGx5ICAyMTQ3NDgzNjQ2ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYKK2RlY3E4MDUgYXBwbHkgIDIxNDc0ODM2NDcgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NworZGVjcTgwNiBhcHBseSAgMjE0NzQ4MzY0OCAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4CitkZWNxODA3IGFwcGx5ICAyMTQ3NDgzNjQ5ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkKK2RlY3E4MDggYXBwbHkgIDQyOTQ5NjcyOTQgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YQorZGVjcTgwOSBhcHBseSAgNDI5NDk2NzI5NSAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTViCitkZWNxODEwIGFwcGx5ICA0Mjk0OTY3Mjk2ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2EKK2RlY3E4MTEgYXBwbHkgIDQyOTQ5NjcyOTcgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YgorCitkZWNxODIwIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYgLT4gLTIxNDc0ODM2NDYKK2RlY3E4MjEgYXBwbHkgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NyAtPiAtMjE0NzQ4MzY0NworZGVjcTgyMiBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4IC0+IC0yMTQ3NDgzNjQ4CitkZWNxODIzIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkgLT4gLTIxNDc0ODM2NDkKK2RlY3E4MjQgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NiAtPiAgMjE0NzQ4MzY0NgorZGVjcTgyNSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ3IC0+ICAyMTQ3NDgzNjQ3CitkZWNxODI2IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDggLT4gIDIxNDc0ODM2NDgKK2RlY3E4MjcgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OSAtPiAgMjE0NzQ4MzY0OQorZGVjcTgyOCBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTVhIC0+ICA0Mjk0OTY3Mjk0CitkZWNxODI5IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1NWIgLT4gIDQyOTQ5NjcyOTUKK2RlY3E4MzAgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YSAtPiAgNDI5NDk2NzI5NgorZGVjcTgzMSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTdiIC0+ICA0Mjk0OTY3Mjk3CisKKy0tIFZHIHRlc3RjYXNlCitkZWNxODQwIGFwcGx5ICAgICMyMDgwMDAwMDAwMDAwMDAwRjI5NDAwMDAwMDE3MjYzNiAtPiA4LjgxMTI1MDAwMDAwMDAxMzQ5NDM2RS0xNTQ4CitkZWNxODQxIGFwcGx5ICAgICMyMDgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMCAtPiA4LjAwMDAwMDAwMDAwMDAwMDAwMEUtMTU1MAorZGVjcTg0MiBhcHBseSAgICAjMUVGOTg0OTAwMDAwMDAwMTBGNkU0RTAwMDAwMDAwMDAgLT4gNy4wNDkwMDAwMDAwMDAwMTA3OTU0ODgwMDAwMDAwMDAwMDBFLTMwOTcKK2RlY3E4NDMgbXVsdGlwbHkgIzIwODAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwICMyMDgwMDAwMDAwMDAwMDAwRjI5NDAwMDAwMDE3MjYzNiAtPiAjMUVGOTg0OTAwMDAwMDAwMTBGNkU0RTAwMDAwMDAwMDAgUm91bmRlZAorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRk1BLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRk1BLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4NDU1MwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFGTUEuZGVjVGVzdApAQCAtMCwwICsxLDE3ODYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFGTUEuZGVjVGVzdCAtLSBkZWNRdWFkIEZ1c2VkIE11bHRpcGx5IEFkZCAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoKKy0tICAgMS4gU2FuaXR5IGNoZWNrcyBhbmQgb3RoZXIgdGhyZWUtb3BlcmFuZCB0ZXN0cyAoZXNwZWNpYWxseSB0aG9zZQorLS0gICAgICB3aGVyZSB0aGUgZnVzZWQgb3BlcmF0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSkKKy0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkKKy0tICAgMy4gQWRkaXRpb24gdGVzdHMgKGZpcnN0IG9wZXJhbmQgaXMgMSkKKy0tIFRoZSBtdWx0aXBseSBhbmQgYWRkaXRpb24gdGVzdHMgYXJlIGV4dGVuc2l2ZSBiZWNhdXNlIEZNQSBtYXkgaGF2ZQorLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkKKy0tIGFsc28gaW5oZXJlbnRseSBjaGVjayB0aGUgbGVmdC10by1yaWdodCBwcm9wZXJ0aWVzLgorCistLSBTYW5pdHkgY2hlY2tzCitkcWZtYTAwMDEgZm1hICAxICAgMSAgIDEgLT4gICAyCitkcWZtYTAwMDIgZm1hICAxICAgMSAgIDIgLT4gICAzCitkcWZtYTAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3CitkcWZtYTAwMDQgZm1hICA5ICAgOSAgIDkgLT4gIDkwCitkcWZtYTAwMDUgZm1hIC0xICAgMSAgIDEgLT4gICAwCitkcWZtYTAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxCitkcWZtYTAwMDcgZm1hIC0yICAgMiAgIDMgLT4gIC0xCitkcWZtYTAwMDggZm1hIC05ICAgOSAgIDkgLT4gLTcyCitkcWZtYTAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwCitkcWZtYTAwMTIgZm1hICAxICAtMSAgIDIgLT4gICAxCitkcWZtYTAwMTMgZm1hICAyICAtMiAgIDMgLT4gIC0xCitkcWZtYTAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyCitkcWZtYTAwMTUgZm1hICAxICAgMSAgLTEgLT4gICAwCitkcWZtYTAwMTYgZm1hICAxICAgMSAgLTIgLT4gIC0xCitkcWZtYTAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxCitkcWZtYTAwMTggZm1hICA5ICAgOSAgLTkgLT4gIDcyCisKKy0tIG5vbi1pbnRlZ2VyIGV4YWN0cworZHFmbWEwMTAwICBmbWEgICAgMjUuMiAgIDYzLjYgICAtNDM4ICAtPiAgMTE2NC43MgorZHFmbWEwMTAxICBmbWEgICAwLjMwMSAgMC4zODAgICAgMzM0ICAtPiAgMzM0LjExNDM4MAorZHFmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44NgorZHFmbWEwMTAzICBmbWEgICAgNC4yMiAgMC4wNzkgIC05NC42ICAtPiAgLTk0LjI2NjYyCitkcWZtYTAxMDQgIGZtYSAgICAgOTAzICAwLjc5NyAgMC44ODcgIC0+ICA3MjAuNTc4CitkcWZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzCitkcWZtYTAxMDYgIGZtYSAgICAyOC4yICAgIDcyNyAgIDUuNDUgIC0+ICAyMDUwNi44NQorZHFmbWEwMTA3ICBmbWEgICAgICAgNCAgICA2MDUgICAgNjg4ICAtPiAgMzEwOAorZHFmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzCitkcWZtYTAxMDkgIGZtYSAgIDAuMTY5ICAgLTM0MSAgIDUuNjEgIC0+ICAtNTIuMDE5CitkcWZtYTAxMTAgIGZtYSAgIC03Mi4yICAgICAzMCAgLTUxLjIgIC0+ICAtMjIxNy4yCitkcWZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMKK2RxZm1hMDExMiAgZm1hICAgICAzMTcgICA3Ny4wICAgMTkuMCAgLT4gIDI0NDI4LjAKK2RxZm1hMDExMyAgZm1hICAgICAgNDcgICA2LjU4ICAgMS42MiAgLT4gIDMxMC44OAorZHFmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNAorZHFmbWEwMTE1ICBmbWEgICAgNzIuNyAgICAyNzQgICAxLjU2ICAtPiAgMTk5MjEuMzYKK2RxZm1hMDExNiAgZm1hICAgICAzMzUgICAgODQ3ICAgICA4MyAgLT4gIDI4MzgyOAorZHFmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMgorZHFmbWEwMTE4ICBmbWEgICAtMy44NyAgIDMuMDYgICA3OC4wICAtPiAgNjYuMTU3OAorZHFmbWEwMTE5ICBmbWEgICAwLjc0MiAgICAxOTIgICAzNS42ICAtPiAgMTc4LjA2NAorZHFmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTEKKworLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoCistLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZAorLS0gW3RoaXMgaXMgYWJvdXQgMjAlIG9mIGFsbCBzaW1pbGFyICBjYXNlcyBpbiBnZW5lcmFsXQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNC41MDAxMTkwMDIxMDAwMDAyMDk0Njk3MjkzNzU2OTg3NzhFKzM4CitkcWZtYTAyMDIgIGZtYSAgICAgICA2ODUzNzk4NTg2MTM1NTg2NDQ1Ny41Njk0ICAgICAgNjU2NTg3NTc2Mjk3MjA4NjYwNS44NTk2OSAgICAgICAzNTg5MjYzNDQ0NzIzNjc1My4xNzI4MTIgIC0+ICA0LjUwMDExOTAwMjEwMDAwMDIwOTQ2OTcyOTM3NTY5ODc3OUUrMzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA1Ljk5NjI0ODQ2OTU4NDU5NDM0Njg1ODg4MTYyMDE4NTUxNEUrNDEKK2RxZm1hMDIwOCAgZm1hICAgICAgICAgIDg5MjYxODIyMzQ0NzI3NjI4NTcxLjkgICAgICA2NzE3NTk1ODQ1NjU0MTMxMzgzMzM2Ljg5ICAgICAgNTA2MTAzNjQ5NzI4ODc5NjA3NjI2Ni4xMSAgLT4gIDUuOTk2MjQ4NDY5NTg0NTk0MzQ2ODU4ODgxNjIwMTg1NTEzRSs0MSBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuODk5MjQyOTY4Njc4MjU2OTI0MDIxNTk0NzcwODc0MDcwRSszNAorZHFmbWEwMjEwICBmbWEgICAgICAgMzIwNTA2MjM3MjMyNDQ4Njg1LjQ5NTk3MSAgICAgICA1OTI1NzU5Nzc2NDAxNzk2Ny45ODQ0NDggICAgICAzMjA1NjE1MjM5MDc3NzExNTg5OTEyLjg1ICAtPiAgMS44OTkyNDI5Njg2NzgyNTY5MjQwMjE1OTQ3NzA4NzQwNzFFKzM0IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNy4wNzg1OTY5Nzg4NDI4MDk1Mzc5Mjk2OTk5NTQ4NjAzMDlFKzM3CitkcWZtYTAyMTUgIGZtYSAgICAgICAgMjIwMjQ3ODQzMjU5MTEyMjYzLjE3OTk1ICAgICAgIDMyMTM5MjM0MDI4Nzk4Nzk3OTAwMi44MCAgICAgICAgNDc1MzMyNzk4MTk5OTcxNjc2NTU0NDAgIC0+ICA3LjA3ODU5Njk3ODg0MjgwOTUzNzkyOTY5OTk1NDg2MDMwOEUrMzcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjIyNDk1NTY2NzU4MTQyNzU1OTc1NDEwNjg2MjM1MDc0M0UrMzcKK2RxZm1hMDIyNiAgZm1hICAgICAgIDIzODgwNzI5NzkwMzY4ODgwNDEyLjE0NDkgICAgICAgNTEyOTQ3MzMzODI3MDY0NzE5LjU1NDA3ICAgICAgMjE3MTE3NDM4NDE5NTkwODI0NTAyLjk2MyAgLT4gIDEuMjI0OTU1NjY3NTgxNDI3NTU5NzU0MTA2ODYyMzUwNzQ0RSszNyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjUzMDA5NDA0MzI1MzE0ODgwNjI3MjI3NjM2ODU3OTE0NEUrNDIKK2RxZm1hMDIyOSAgZm1hICAgICAgICAyNTM5ODkyMzU3MDE2MDk5NzA2LjQxMjYgICAgICAtOTk2MTQyMjMyNjY3NTA0ODE3NzE3NDM1ICAgICAgIDUzNjgyMDgyNTk4MzE1OTQ5NDI1LjkzNyAgLT4gIC0yLjUzMDA5NDA0MzI1MzE0ODgwNjI3MjI3NjM2ODU3OTE0M0UrNDIgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjcxMzM4NzA4NTc1OTcxMTk1NDMxOTM5MTQxMjc4ODQ1NEUrMzcKK2RxZm1hMDIzMyAgZm1hICAgICAgICA0NTQ2MzM5NDkxMzQxNjI0NDY0LjA4MDQgICAgICAgICAgICAzNzY4NzE3ODY0MTY5MjA1NTgxICAgICAgIDgzNTc4OTgwMjc4NjkwMzk1MTg0LjYyMCAgLT4gIDEuNzEzMzg3MDg1NzU5NzExOTU0MzE5MzkxNDEyNzg4NDUzRSszNyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDQuMDYyMjc1NjYzNDA1ODIzNzE2NDExNTc5MTE3NzcxNTQ3RSszNQorZHFmbWEwMjM1ICBmbWEgICAgICAgIDQwOTI0MjExOTQzMzgxNjEzMS40MjI1MyAgICAgIDk5MjYzMzgxNTE2Njc0MTUwMS40NzcyNDkgICAgICAgIDcwMTc5NjM2NTQ0NDE2NzU2MTI5NTQ2ICAtPiAgNC4wNjIyNzU2NjM0MDU4MjM3MTY0MTE1NzkxMTc3NzE1NDhFKzM1IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNi4wMDI2MDQzMjc3MzI1Njg0OTA1NjIyNDk4NzUzMDY4MjNFKzQ3CitkcWZtYTAyNTggIGZtYSAgICAgICAgODE3OTQxMzM2NTkzNTQxNzQyMTU5Njg0ICAgICAgIDczMzg2NzMzOTc2OTMxMDcyOTI2NjU5OCAgICAgIDc4NTYzODQ0NjUwOTQyNDE5MzExODMwLjggIC0+ICA2LjAwMjYwNDMyNzczMjU2ODQ5MDU2MjI0OTg3NTMwNjgyMkUrNDcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi4wMjcwMjI1MTQzODE0NTIxOTc1MTAxMDMzOTUyODM4NzRFKzM5CitkcWZtYTAyNjQgIGZtYSAgICAgICAzODc2MTczMTAxNjkxNjEyNzAuNzM3NTMyICAgICAtNTIyOTQ0MjcwMzQxNDk1NjA2MTIxNi42MiAgICAgIDU3NjY1NjY2ODE2NjUyOTY3MTUwNDczLjUgIC0+ICAtMi4wMjcwMjI1MTQzODE0NTIxOTc1MTAxMDMzOTUyODM4NzNFKzM5IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTcuODU2NTI1MDM5ODAzNTU0MDAxMTQ0MDg5ODQyNzMwMzYxRSszNworZHFmbWEwMjY3ICBmbWEgICAgICAtODQ3NjU1ODQ1NzIwNTY1Mjc0NzAxLjIxMCAgICAgICAgOTI2ODUzMTY1NjQxMTc3MzkuODM5ODQgICAgICAyMjc4MDk1MDA0MTM3NjQyNDQyOS41Njg2ICAtPiAgLTcuODU2NTI1MDM5ODAzNTU0MDAxMTQ0MDg5ODQyNzMwMzYwRSszNyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuNjk1NTE1NTYyMDExNTIwNzQ2MTI1NjA3NTAyMjM3NTU5RSszOAorZHFmbWEwMjY4ICBmbWEgICAgICAgICAgMjE1OTAyOTAzNjUxMjc2ODUuMzY3NSAgICAgICA3ODUzMTM5MjI3NTc2NTQxMzc5NDI2LjggICAgICAgLTMyNzU4NTk0MzcyMzYxODAuNzYxNTQ0ICAtPiAgMS42OTU1MTU1NjIwMTE1MjA3NDYxMjU2MDc1MDIyMzc1NThFKzM4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTguNDQ4NDIyOTM1NzgzMjg5MjE5NzQ4MTE1MDM4MDE0NzEwRSszOAorZHFmbWEwMjY5ICBmbWEgICAgICAtOTc0MzIwNjM2MjcyODYyNjk3Ljk3MTU4NiAgICAgIDg2NzEwOTEwMzY0MTg2MDI0NzQ0MC43NTYgICAgICAgIC05Nzc1MTcwNzc1OTAyNDU0NzYyLjk4ICAtPiAgLTguNDQ4NDIyOTM1NzgzMjg5MjE5NzQ4MTE1MDM4MDE0NzA5RSszOCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQ2FzZXMgd2hlcmUgbXVsdGlwbHkgd291bGQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlmIHNlcGFyYXRlCitkcWZtYTAzMDAgIGZtYSAgIDllKzYxNDQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEwMzAxICBmbWEgICAxZSs2MTQ0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMDMwMiAgZm1hICAgMWUrNjE0NCAgICAxMCAgIC0xZSs2MTQ0ICAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCBDbGFtcGVkCitkcWZtYTAzMDMgIGZtYSAgIDFlKzYxNDQgICAgMTAgICAtOWUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorLS0gc3Vibm9ybWFsIGV0Yy4KK2RxZm1hMDMwNSAgZm1hICAgMWUtNjE3NiAgICAwLjEgIDAgICAgICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMDMwNiAgZm1hICAgMWUtNjE3NiAgICAwLjEgIDEgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMDMwNyAgZm1hICAgMWUtNjE3NiAgICAwLjEgIDFlLTYxNzYgICAtPiAxRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIEluZmluaXRlIGNvbWJpbmF0aW9ucworZHFmbWEwODAwIGZtYSAgSW5mICAgSW5mICAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFmbWEwODAxIGZtYSAgSW5mICAgSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDgwMiBmbWEgIEluZiAgLUluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA4MDMgZm1hICBJbmYgIC1JbmYgIC1JbmYgICAgLT4gLUluZmluaXR5CitkcWZtYTA4MDQgZm1hIC1JbmYgICBJbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwODA1IGZtYSAtSW5mICAgSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQorZHFmbWEwODA2IGZtYSAtSW5mICAtSW5mICAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFmbWEwODA3IGZtYSAtSW5mICAtSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gVHJpcGxlIE5hTiBwcm9wYWdhdGlvbgorZHFmbWEwOTAwIGZtYSAgTmFOMiAgTmFOMyAgTmFONSAgIC0+ICBOYU4yCitkcWZtYTA5MDEgZm1hICAwICAgICBOYU4zICBOYU41ICAgLT4gIE5hTjMKK2RxZm1hMDkwMiBmbWEgIDAgICAgIDAgICAgIE5hTjUgICAtPiAgTmFONQorLS0gZmlyc3Qgc05hTiB3aW5zIChjb25zaWRlciBxTmFOIGZyb20gZWFybGllciBzTmFOIGJlaW5nCistLSBvdmVycmlkZGVuIGJ5IGFuIHNOYU4gaW4gdGhpcmQgb3BlcmFuZCkKK2RxZm1hMDkwMyBmbWEgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwOTA0IGZtYSAgMCAgICAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA5MDUgZm1hICAwICAgICAwICAgICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDkwNiBmbWEgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwOTA3IGZtYSAgTmFONyAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA5MDggZm1hICBOYU43ICBOYU41ICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTVVMVElQTElDQVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxZm1hMjAwMCBmbWEgIDIgICAgICAyICAgMGUrNjE0NCAgLT4gNAorZHFmbWEyMDAxIGZtYSAgMiAgICAgIDMgICAwZSs2MTQ0ICAtPiA2CitkcWZtYTIwMDIgZm1hICA1ICAgICAgMSAgIDBlKzYxNDQgIC0+IDUKK2RxZm1hMjAwMyBmbWEgIDUgICAgICAyICAgMGUrNjE0NCAgLT4gMTAKK2RxZm1hMjAwNCBmbWEgIDEuMjAgICAyICAgMGUrNjE0NCAgLT4gMi40MAorZHFmbWEyMDA1IGZtYSAgMS4yMCAgIDAgICAwZSs2MTQ0ICAtPiAwLjAwCitkcWZtYTIwMDYgZm1hICAxLjIwICAtMiAgIDBlKzYxNDQgIC0+IC0yLjQwCitkcWZtYTIwMDcgZm1hICAtMS4yMCAgMiAgIDBlKzYxNDQgIC0+IC0yLjQwCitkcWZtYTIwMDggZm1hICAtMS4yMCAgMCAgIDBlKzYxNDQgIC0+IDAuMDAKK2RxZm1hMjAwOSBmbWEgIC0xLjIwIC0yICAgMGUrNjE0NCAgLT4gMi40MAorZHFmbWEyMDEwIGZtYSAgNS4wOSA3LjEgICAwZSs2MTQ0ICAtPiAzNi4xMzkKK2RxZm1hMjAxMSBmbWEgIDIuNSAgICA0ICAgMGUrNjE0NCAgLT4gMTAuMAorZHFmbWEyMDEyIGZtYSAgMi41MCAgIDQgICAwZSs2MTQ0ICAtPiAxMC4wMAorZHFmbWEyMDEzIGZtYSAgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAwZSs2MTQ0ICAtPiAxLjIzNDU2Nzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkCitkcWZtYTIwMTUgZm1hICAyLjUwICAgNCAgIDBlKzYxNDQgIC0+IDEwLjAwCitkcWZtYTIwMTYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjAxNyBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC05Ljk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFmbWEyMDE4IGZtYSAgLTkuOTk5OTk5OTk5OTk5OTk5OTkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWZtYTIwMTkgZm1hICAtOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gemVyb3MsIGV0Yy4KK2RxZm1hMjAyMSBmbWEgICAwICAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyMDIyIGZtYSAgIDAgICAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTIwMjMgZm1hICAtMCAgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjAyNCBmbWEgIC0wICAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyMDI1IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTIwMjYgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjAyNyBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyMDI4IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTIwMzAgZm1hICAgNS4wMCAgIDFFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDA1MDAKK2RxZm1hMjAzMSBmbWEgICAwMC4wMCAgMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMAorZHFmbWEyMDMyIGZtYSAgIDAwLjAwICAwRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFmbWEyMDMzIGZtYSAgIDBFLTMgICAwMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZHFmbWEyMDM0IGZtYSAgLTUuMDAgICAxRS0zICAgIDBlKzYxNDQgIC0+IC0wLjAwNTAwCitkcWZtYTIwMzUgZm1hICAtMDAuMDAgIDAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAKK2RxZm1hMjAzNiBmbWEgIC0wMC4wMCAgMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxZm1hMjAzNyBmbWEgIC0wRS0zICAgMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RxZm1hMjAzOCBmbWEgICA1LjAwICAtMUUtMyAgICAwZSs2MTQ0ICAtPiAtMC4wMDUwMAorZHFmbWEyMDM5IGZtYSAgIDAwLjAwIC0wLjAwMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwCitkcWZtYTIwNDAgZm1hICAgMDAuMDAgLTBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkcWZtYTIwNDEgZm1hICAgMEUtMyAgLTAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkcWZtYTIwNDIgZm1hICAtNS4wMCAgLTFFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDA1MDAKK2RxZm1hMjA0MyBmbWEgIC0wMC4wMCAtMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMAorZHFmbWEyMDQ0IGZtYSAgLTAwLjAwIC0wRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFmbWEyMDQ1IGZtYSAgLTBFLTMgIC0wMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkcWZtYTIwNTAgZm1hICAxLjIwIDMgICAgICAgICAgMGUrNjE0NCAgLT4gMy42MAorZHFmbWEyMDUxIGZtYSAgNyAgICAzICAgICAgICAgIDBlKzYxNDQgIC0+IDIxCitkcWZtYTIwNTIgZm1hICAwLjkgIDAuOCAgICAgICAgMGUrNjE0NCAgLT4gMC43MgorZHFmbWEyMDUzIGZtYSAgMC45ICAtMCAgICAgICAgIDBlKzYxNDQgIC0+IDAuMAorZHFmbWEyMDU0IGZtYSAgNjU0MzIxIDY1NDMyMSAgIDBlKzYxNDQgIC0+IDQyODEzNTk3MTA0MQorCitkcWZtYTIwNjAgZm1hICAxMjMuNDUgMWU3ICAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzkKK2RxZm1hMjA2MSBmbWEgIDEyMy40NSAxZTggICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTAKK2RxZm1hMjA2MiBmbWEgIDEyMy40NSAxZSs5ICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTEKK2RxZm1hMjA2MyBmbWEgIDEyMy40NSAxZTEwICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTIKK2RxZm1hMjA2NCBmbWEgIDEyMy40NSAxZTExICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTMKK2RxZm1hMjA2NSBmbWEgIDEyMy40NSAxZTEyICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTQKK2RxZm1hMjA2NiBmbWEgIDEyMy40NSAxZTEzICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTUKKworCistLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMKKy0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcWZtYTIwODAgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQorZHFmbWEyMDg0IGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RxZm1hMjA5MCBmbWEgIDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkcWZtYTIwOTQgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQorCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzCitkcWZtYTIxMDEgZm1hICA5IDkgICAgIDBlKzYxNDQgIC0+IDgxCitkcWZtYTIxMDIgZm1hICA5IDkwICAgICAwZSs2MTQ0ICAtPiA4MTAKK2RxZm1hMjEwMyBmbWEgIDkgOTAwICAgICAwZSs2MTQ0ICAtPiA4MTAwCitkcWZtYTIxMDQgZm1hICA5IDkwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwCitkcWZtYTIxMDUgZm1hICA5IDkwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAKK2RxZm1hMjEwNiBmbWEgIDkgOTAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwCitkcWZtYTIxMDcgZm1hICA5IDkwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwCitkcWZtYTIxMDggZm1hICA5IDkwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAKK2RxZm1hMjEwOSBmbWEgIDkgOTAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwCitkcWZtYTIxMTAgZm1hICA5IDkwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwCitkcWZtYTIxMTEgZm1hICA5IDkwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAKK2RxZm1hMjExMiBmbWEgIDkgOTAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwCitkcWZtYTIxMTMgZm1hICA5IDkwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwCitkcWZtYTIxMTQgZm1hICA5IDkwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAKK2RxZm1hMjExNSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjExNiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAKKy0tZHFmbWEyMTE3IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjExOCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjExOSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFmbWEyMTIwIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjEyMSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjEyMiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFmbWEyMTIzIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2FycmllcworZHFmbWEyMTMxIGZtYSAgMyAzICAgICAwZSs2MTQ0ICAtPiA5CitkcWZtYTIxMzIgZm1hICAzIDMwICAgICAwZSs2MTQ0ICAtPiA5MAorZHFmbWEyMTMzIGZtYSAgMyAzMDAgICAgIDBlKzYxNDQgIC0+IDkwMAorZHFmbWEyMTM0IGZtYSAgMyAzMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwCitkcWZtYTIxMzUgZm1hICAzIDMwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMAorZHFmbWEyMTM2IGZtYSAgMyAzMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMAorZHFmbWEyMTM3IGZtYSAgMyAzMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwCitkcWZtYTIxMzggZm1hICAzIDMwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMAorZHFmbWEyMTM5IGZtYSAgMyAzMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMAorZHFmbWEyMTQwIGZtYSAgMyAzMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwCitkcWZtYTIxNDEgZm1hICAzIDMwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMAorZHFmbWEyMTQyIGZtYSAgMyAzMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMAorZHFmbWEyMTQzIGZtYSAgMyAzMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwCitkcWZtYTIxNDQgZm1hICAzIDMwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ1IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ2IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwCitkcWZtYTIxNDcgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ4IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ5IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIxNTAgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTUxIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTUyIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIxNTMgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcWZtYTIyNjMgZm1hICAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAgMGUrNjE0NCAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgyOTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcKK2RxZm1hMjMwMSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5ICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDIgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMwNCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDUgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDYgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMwNyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDggZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDkgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMxMCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTEgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTIgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMxMyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTQgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTUgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjMxNiBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTcgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZAorZHFmbWEyMzE4IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkCitkcWZtYTIzMTkgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICBSb3VuZGVkCitkcWZtYTIzMjAgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgUm91bmRlZAorZHFmbWEyMzIxIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4ICBSb3VuZGVkCitkcWZtYTIzMjIgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM5ICBSb3VuZGVkCitkcWZtYTIzMjMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs0MCAgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworZHFmbWEyNTA0ICBmbWEgICAwRS00MjYwIDEwMDBFLTQyNjAgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBDbGFtcGVkCitkcWZtYTI1MDUgIGZtYSAgIDEwMEUrNDI2MCAwRSs0MjYwICAgICAwZSs2MTQ0ICAtPiAwRSs2MTExIENsYW1wZWQKKworLS0gbWl4ZWQgd2l0aCB6ZXJvcworZHFmbWEyNTQxIGZtYSAgIDAgICAgLTEgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0MiBmbWEgIC0wICAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDMgZm1hICAgMCAgICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyNTQ0IGZtYSAgLTAgICAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0NSBmbWEgIC0xICAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDYgZm1hICAtMSAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyNTQ3IGZtYSAgIDEgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0OCBmbWEgICAxICAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwCisKK2RxZm1hMjU1MSBmbWEgICAwLjAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1MiBmbWEgIC0wLjAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1MyBmbWEgICAwLjAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1NCBmbWEgIC0wLjAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1NSBmbWEgIC0xLjAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1NiBmbWEgIC0xLjAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1NyBmbWEgICAxLjAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU1OCBmbWEgICAxLjAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwLjAKKworZHFmbWEyNTYxIGZtYSAgIDAgICAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTYyIGZtYSAgLTAgICAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTYzIGZtYSAgIDAgICAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY0IGZtYSAgLTAgICAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY1IGZtYSAgLTEgICAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY2IGZtYSAgLTEgICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY3IGZtYSAgIDEgICAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorZHFmbWEyNTY4IGZtYSAgIDEgICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMAorCitkcWZtYTI1NzEgZm1hICAgMC4wICAtMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTcyIGZtYSAgLTAuMCAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3MyBmbWEgICAwLjAgICAxLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzQgZm1hICAtMC4wICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTc1IGZtYSAgLTEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3NiBmbWEgIC0xLjAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzcgZm1hICAgMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTc4IGZtYSAgIDEuMCAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3OSBmbWEgICAxLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1MzAgZm1hICAtMS4wICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTMxIGZtYSAgLTEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjUzMiBmbWEgICAxLjAgIC0wLjAgICAgLTBlKzYxNDQgIC0+IC0wLjAwCitkcWZtYTI1MzMgZm1hICAgMS4wICAgMC4wICAgIC0wZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTM0IGZtYSAgLTEuMCAgLTAuMCAgICAtMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjUzNSBmbWEgIC0xLjAgICAwLjAgICAgLTBlKzYxNDQgIC0+IC0wLjAwCisKKworLS0gU3BlY2lhbHMKK2RxZm1hMjU4MCBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNTgxIGZtYSAgIEluZiAgLTEwMDAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI1ODIgZm1hICAgSW5mICAtMSAgICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjU4MyBmbWEgICBJbmYgIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI1ODQgZm1hICAgSW5mICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNTg1IGZtYSAgIEluZiAgIDEgICAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI1ODYgZm1hICAgSW5mICAgMTAwMCAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjU4NyBmbWEgICBJbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNTg4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI1ODkgZm1hICAtSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjU5MCBmbWEgIC0xICAgICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNTkxIGZtYSAgLTAgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjU5MiBmbWEgICAwICAgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI1OTMgZm1hICAgMSAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjU5NCBmbWEgICAxMDAwICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNTk1IGZtYSAgIEluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CisKK2RxZm1hMjYwMCBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNjAxIGZtYSAgLUluZiAgLTEwMDAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI2MDIgZm1hICAtSW5mICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjYwMyBmbWEgIC1JbmYgIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2MDQgZm1hICAtSW5mICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjA1IGZtYSAgLUluZiAgIDEgICAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI2MDYgZm1hICAtSW5mICAgMTAwMCAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjYwNyBmbWEgIC1JbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNjA4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI2MDkgZm1hICAtSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjYxMCBmbWEgIC0xICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNjExIGZtYSAgLTAgICAgLUluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjYxMiBmbWEgICAwICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2MTMgZm1hICAgMSAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjYxNCBmbWEgICAxMDAwIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNjE1IGZtYSAgIEluZiAgLUluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CisKK2RxZm1hMjYyMSBmbWEgICBOYU4gLUluZiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyMiBmbWEgICBOYU4gLTEwMDAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyMyBmbWEgICBOYU4gLTEgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyNCBmbWEgICBOYU4gLTAgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyNSBmbWEgICBOYU4gIDAgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyNiBmbWEgICBOYU4gIDEgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyNyBmbWEgICBOYU4gIDEwMDAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyOCBmbWEgICBOYU4gIEluZiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYyOSBmbWEgICBOYU4gIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzMCBmbWEgIC1JbmYgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzMSBmbWEgIC0xMDAwIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzMiBmbWEgIC0xICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzMyBmbWEgIC0wICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzNCBmbWEgICAwICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzNSBmbWEgICAxICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzNiBmbWEgICAxMDAwIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KK2RxZm1hMjYzNyBmbWEgICBJbmYgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4KKworZHFmbWEyNjQxIGZtYSAgIHNOYU4gLUluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0MiBmbWEgICBzTmFOIC0xMDAwICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDMgZm1hICAgc05hTiAtMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQ0IGZtYSAgIHNOYU4gLTAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0NSBmbWEgICBzTmFOICAwICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDYgZm1hICAgc05hTiAgMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQ3IGZtYSAgIHNOYU4gIDEwMDAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0OCBmbWEgICBzTmFOICBOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDkgZm1hICAgc05hTiBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjUwIGZtYSAgIE5hTiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1MSBmbWEgIC1JbmYgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTIgZm1hICAtMTAwMCBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjUzIGZtYSAgLTEgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1NCBmbWEgIC0wICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTUgZm1hICAgMCAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjU2IGZtYSAgIDEgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1NyBmbWEgICAxMDAwIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTggZm1hICAgSW5mICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjU5IGZtYSAgIE5hTiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFmbWEyNjYxIGZtYSAgIE5hTjkgLUluZiAgICAgMGUrNjE0NCAgLT4gIE5hTjkKK2RxZm1hMjY2MiBmbWEgICBOYU44ICA5OTkgICAgIDBlKzYxNDQgIC0+ICBOYU44CitkcWZtYTI2NjMgZm1hICAgTmFONzEgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFONzEKK2RxZm1hMjY2NCBmbWEgICBOYU42ICBOYU41ICAgIDBlKzYxNDQgIC0+ICBOYU42CitkcWZtYTI2NjUgZm1hICAtSW5mICAgTmFONCAgICAwZSs2MTQ0ICAtPiAgTmFONAorZHFmbWEyNjY2IGZtYSAgLTk5OSAgIE5hTjMzICAgMGUrNjE0NCAgLT4gIE5hTjMzCitkcWZtYTI2NjcgZm1hICAgSW5mICAgTmFOMiAgICAwZSs2MTQ0ICAtPiAgTmFOMgorCitkcWZtYTI2NzEgZm1hICAgc05hTjk5IC1JbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3MiBmbWEgICBzTmFOOTggLTExICAgICAgIDBlKzYxNDQgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjczIGZtYSAgIHNOYU45NyAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzQgZm1hICAgc05hTjE2IHNOYU45NCAgICAwZSs2MTQ0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3NSBmbWEgICBOYU45NSAgc05hTjkzICAgIDBlKzYxNDQgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjc2IGZtYSAgLUluZiAgICBzTmFOOTIgICAgMGUrNjE0NCAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzcgZm1hICAgMDg4ICAgIHNOYU45MSAgICAwZSs2MTQ0ICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3OCBmbWEgICBJbmYgICAgc05hTjkwICAgIDBlKzYxNDQgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjc5IGZtYSAgIE5hTiAgICBzTmFOODkgICAgMGUrNjE0NCAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RxZm1hMjY4MSBmbWEgIC1OYU45IC1JbmYgICAgIDBlKzYxNDQgIC0+IC1OYU45CitkcWZtYTI2ODIgZm1hICAtTmFOOCAgOTk5ICAgICAwZSs2MTQ0ICAtPiAtTmFOOAorZHFmbWEyNjgzIGZtYSAgLU5hTjcxIEluZiAgICAgMGUrNjE0NCAgLT4gLU5hTjcxCitkcWZtYTI2ODQgZm1hICAtTmFONiAtTmFONSAgICAwZSs2MTQ0ICAtPiAtTmFONgorZHFmbWEyNjg1IGZtYSAgLUluZiAgLU5hTjQgICAgMGUrNjE0NCAgLT4gLU5hTjQKK2RxZm1hMjY4NiBmbWEgIC05OTkgIC1OYU4zMyAgIDBlKzYxNDQgIC0+IC1OYU4zMworZHFmbWEyNjg3IGZtYSAgIEluZiAgLU5hTjIgICAgMGUrNjE0NCAgLT4gLU5hTjIKKworZHFmbWEyNjkxIGZtYSAgLXNOYU45OSAtSW5mICAgICAgMGUrNjE0NCAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTIgZm1hICAtc05hTjk4IC0xMSAgICAgICAwZSs2MTQ0ICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5MyBmbWEgIC1zTmFOOTcgIE5hTiAgICAgIDBlKzYxNDQgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjk0IGZtYSAgLXNOYU4xNiAtc05hTjk0ICAgMGUrNjE0NCAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTUgZm1hICAtTmFOOTUgIC1zTmFOOTMgICAwZSs2MTQ0ICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5NiBmbWEgIC1JbmYgICAgLXNOYU45MiAgIDBlKzYxNDQgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjk3IGZtYSAgIDA4OCAgICAtc05hTjkxICAgMGUrNjE0NCAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTggZm1hICAgSW5mICAgIC1zTmFOOTAgICAwZSs2MTQ0ICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5OSBmbWEgIC1OYU4gICAgLXNOYU44OSAgIDBlKzYxNDQgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkcWZtYTI3MDEgZm1hICAtTmFOICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDIgZm1hICAtTmFOICAgOTk5ICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDMgZm1hICAtTmFOICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDQgZm1hICAtTmFOICAtTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDUgZm1hICAtSW5mICAtTmFOMCAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDYgZm1hICAtOTk5ICAtTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOCitkcWZtYTI3MDcgZm1hICAgSW5mICAtTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOCisKK2RxZm1hMjcxMSBmbWEgIC1zTmFOICAgLUluZiAgICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxMiBmbWEgIC1zTmFOICAgLTExICAgICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxMyBmbWEgIC1zTmFOMDAgIE5hTiAgICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxNCBmbWEgIC1zTmFOICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxNSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxNiBmbWEgIC1JbmYgICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxNyBmbWEgICAwODggICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxOCBmbWEgICBJbmYgICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjcxOSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZHFmbWEyNzUxIGZtYSAgIDFlKzQyNzcgIDFlKzMzMTEgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI3NTIgZm1hICAgMWUrNDI3NyAtMWUrMzMxMSAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc1MyBmbWEgIC0xZSs0Mjc3ICAxZSszMzExICAgMGUrNjE0NCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzU0IGZtYSAgLTFlKzQyNzcgLTFlKzMzMTEgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI3NTUgZm1hICAgMWUtNDI3NyAgMWUtMzMxMSAgIDBlKzYxNDQgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjc1NiBmbWEgICAxZS00Mjc3IC0xZS0zMzExICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyNzU3IGZtYSAgLTFlLTQyNzcgIDFlLTMzMTEgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI3NTggZm1hICAtMWUtNDI3NyAtMWUtMzMxMSAgIDBlKzYxNDQgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkcWZtYTI3NjAgZm1hICAxZS02MDY5IDFlLTEwMSAgIDBlKzYxNDQgIC0+IDFFLTYxNzAgU3Vibm9ybWFsCitkcWZtYTI3NjEgZm1hICAxZS02MDY5IDFlLTEwMiAgIDBlKzYxNDQgIC0+IDFFLTYxNzEgU3Vibm9ybWFsCitkcWZtYTI3NjIgZm1hICAxZS02MDY5IDFlLTEwMyAgIDBlKzYxNDQgIC0+IDFFLTYxNzIgU3Vibm9ybWFsCitkcWZtYTI3NjMgZm1hICAxZS02MDY5IDFlLTEwNCAgIDBlKzYxNDQgIC0+IDFFLTYxNzMgU3Vibm9ybWFsCitkcWZtYTI3NjQgZm1hICAxZS02MDY5IDFlLTEwNSAgIDBlKzYxNDQgIC0+IDFFLTYxNzQgU3Vibm9ybWFsCitkcWZtYTI3NjUgZm1hICAxZS02MDY5IDFlLTEwNiAgIDBlKzYxNDQgIC0+IDFFLTYxNzUgU3Vibm9ybWFsCitkcWZtYTI3NjYgZm1hICAxZS02MDY5IDFlLTEwNyAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgU3Vibm9ybWFsCitkcWZtYTI3NjcgZm1hICAxZS02MDY5IDFlLTEwOCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyNzY4IGZtYSAgMWUtNjA2OSAxZS0xMDkgICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjc2OSBmbWEgIDFlLTYwNjkgMWUtMTEwICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkcWZtYTI3NzAgZm1hICAxZSs0MCAxZSs2MTAxICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZAorZHFmbWEyNzcxIGZtYSAgMWUrNDAgMWUrNjEwMiAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgQ2xhbXBlZAorZHFmbWEyNzcyIGZtYSAgMWUrNDAgMWUrNjEwMyAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgIENsYW1wZWQKK2RxZm1hMjc3MyBmbWEgIDFlKzQwIDFlKzYxMDQgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAorZHFmbWEyNzc0IGZtYSAgMWUrNDAgMWUrNjEwNSAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc1IGZtYSAgMWUrNDAgMWUrNjEwNiAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc2IGZtYSAgMWUrNDAgMWUrNjEwNyAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc3IGZtYSAgMWUrNDAgMWUrNjEwOCAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc4IGZtYSAgMWUrNDAgMWUrNjEwOSAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzc5IGZtYSAgMWUrNDAgMWUrNjExMCAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitkcWZtYTI4MDEgZm1hICAgMS4wMDAwRS02MTcyICAxICAgICAgIDBlKzYxNDQgIC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwKK2RxZm1hMjgwMiBmbWEgICAxLjAwMEUtNjE3MiAgIDFlLTEgICAgMGUrNjE0NCAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFmbWEyODAzIGZtYSAgIDEuMDBFLTYxNzIgICAgMWUtMiAgICAwZSs2MTQ0ICAtPiAxLjAwRS02MTc0ICAgU3Vibm9ybWFsCitkcWZtYTI4MDQgZm1hICAgMS4wRS02MTcyICAgICAxZS0zICAgIDBlKzYxNDQgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxZm1hMjgwNSBmbWEgICAxLjBFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxZm1hMjgwNiBmbWEgICAxLjNFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgwNyBmbWEgICAxLjVFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgwOCBmbWEgICAxLjdFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgwOSBmbWEgICAyLjNFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxMCBmbWEgICAyLjVFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxMSBmbWEgICAyLjdFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxMiBmbWEgICAxLjQ5RS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxMyBmbWEgICAxLjUwRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxNCBmbWEgICAxLjUxRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxNSBmbWEgICAyLjQ5RS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxNiBmbWEgICAyLjUwRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgxNyBmbWEgICAyLjUxRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFmbWEyODE4IGZtYSAgIDFFLTYxNzIgICAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwKK2RxZm1hMjgxOSBmbWEgICAzRS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyODIwIGZtYSAgIDVFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI4MjEgZm1hICAgN0UtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MjIgZm1hICAgOUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MjMgZm1hICAgOS45RS02MTcyICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxZm1hMjgyNCBmbWEgICAxRS02MTcyICAgICAgLTFlLTQgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsCitkcWZtYTI4MjUgZm1hICAgM0UtNjE3MiAgICAgIC0xZS01ICAgIDBlKzYxNDQgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjgyNiBmbWEgIC01RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyODI3IGZtYSAgIDdFLTYxNzIgICAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODI4IGZtYSAgLTlFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODI5IGZtYSAgIDkuOUUtNjE3MiAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODMwIGZtYSAgIDMuMEUtNjE3MiAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RxZm1hMjgzMSBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTIwMCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyODMyIGZtYSAgIDEuMEUtNTk3NyAgICAgMWUtMTk5ICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICBTdWJub3JtYWwgUm91bmRlZAorZHFmbWEyODMzIGZtYSAgIDEuMEUtNTk3NyAgICAgMWUtMTk4ICAgMGUrNjE0NCAgLT4gMS4wRS02MTc1ICAgIFN1Ym5vcm1hbAorZHFmbWEyODM0IGZtYSAgIDIuMEUtNTk3NyAgICAgMmUtMTk4ICAgMGUrNjE0NCAgLT4gNC4wRS02MTc1ICAgIFN1Ym5vcm1hbAorZHFmbWEyODM1IGZtYSAgIDQuMEUtNTk3NyAgICAgNGUtMTk4ICAgMGUrNjE0NCAgLT4gMS42MEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFmbWEyODM2IGZtYSAgMTAuMEUtNTk3NyAgICAxMGUtMTk4ICAgMGUrNjE0NCAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFmbWEyODM3IGZtYSAgMzAuMEUtNTk3NyAgICAzMGUtMTk4ICAgMGUrNjE0NCAgLT4gOS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFmbWEyODM4IGZtYSAgNDAuMEUtNTk4MiAgICA0MGUtMTY2ICAgMGUrNjE0NCAgLT4gMS42MDAwRS02MTQ1IFN1Ym5vcm1hbAorZHFmbWEyODM5IGZtYSAgNDAuMEUtNTk4MiAgICA0MGUtMTY1ICAgMGUrNjE0NCAgLT4gMS42MDAwRS02MTQ0IFN1Ym5vcm1hbAorZHFmbWEyODQwIGZtYSAgNDAuMEUtNTk4MiAgICA0MGUtMTY0ICAgMGUrNjE0NCAgLT4gMS42MDAwRS02MTQzCisKKy0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aAorZHFmbWEyODcwIGZtYSAgMTAwICA5Ljk5OUUrNjE0MyAgICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcWZtYTI4NzEgZm1hICAxMDAgLTkuOTk5RSs2MTQzICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RxZm1hMjg3MiBmbWEgICAgICAgOS45OTlFKzYxNDMgMTAwICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZHFmbWEyODczIGZtYSAgICAgIC05Ljk5OUUrNjE0MyAxMDAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitkcWZtYTI4ODEgZm1hICAgMS4yMzQ3RS02MTMzIDEuMjM0N0UtNDAgICAgMGUrNjE0NCAgLT4gIDEuNTI0RS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4ODIgZm1hICAgMS4yMzRFLTYxMzMgMS4yMzRFLTQwICAgICAgMGUrNjE0NCAgLT4gIDEuNTIzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4ODMgZm1hICAgMS4yM0UtNjEzMyAgMS4yM0UtNDAgICAgICAgMGUrNjE0NCAgLT4gIDEuNTEzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4ODQgZm1hICAgMS4yRS02MTMzICAgMS4yRS00MCAgICAgICAgMGUrNjE0NCAgLT4gIDEuNDRFLTYxNzMgIFN1Ym5vcm1hbAorZHFmbWEyODg1IGZtYSAgIDEuMkUtNjEzMyAgIDEuMkUtNDEgICAgICAgIDBlKzYxNDQgIC0+ICAxLjQ0RS02MTc0ICBTdWJub3JtYWwKK2RxZm1hMjg4NiBmbWEgICAxLjJFLTYxMzMgICAxLjJFLTQyICAgICAgICAwZSs2MTQ0ICAtPiAgMS40RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxZm1hMjg4NyBmbWEgICAxLjJFLTYxMzMgICAxLjNFLTQyICAgICAgICAwZSs2MTQ0ICAtPiAgMS42RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxZm1hMjg4OCBmbWEgICAxLjNFLTYxMzMgICAxLjNFLTQyICAgICAgICAwZSs2MTQ0ICAtPiAgMS43RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxZm1hMjg4OSBmbWEgICAxLjNFLTYxMzMgICAxLjNFLTQzICAgICAgICAwZSs2MTQ0ICAtPiAgICAyRS02MTc2ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxZm1hMjg5MCBmbWEgICAxLjNFLTYxMzQgICAxLjNFLTQzICAgICAgICAwZSs2MTQ0ICAtPiAgICAwRS02MTc2ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCitkcWZtYTI4OTEgZm1hICAgMS4yMzQ1RS0zOSAgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyMzRFLTYxNzIgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZm1hMjg5MiBmbWEgICAxLjIzNDU2RS0zOSAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODkzIGZtYSAgIDEuMjM0NUUtNDAgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZm1hMjg5NCBmbWEgICAxLjIzNDU2RS00MCAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4OTUgZm1hICAgMS4yMzQ1RS00MSAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTJFLTYxNzQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODk2IGZtYSAgIDEuMjM0NTZFLTQxICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdworLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0CitkcWZtYTI5MDYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDEgICAgICAgICAgICAgICAgICAgICAgICAgMGUrNjE0NCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMKK2RxZm1hMjkwNyBmbWEgICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgIDBlKzYxNDQgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKKy0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluCitkcWZtYTI5MDggZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gaHVnZXN0CitkcWZtYTI5MDkgZm1hICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjcgSW5leGFjdCBSb3VuZGVkCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorcHJlY2lzaW9uOiAgIDM0Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworZHFmbWEyMTAwMSAgZm1hICAxMzBFLTIgIDEyMEUtMiAgIDBlKzYxNDQgIC0+IDEuNTYwMAorZHFmbWEyMTAwMiAgZm1hICAxMzBFLTIgIDEyRS0xICAgIDBlKzYxNDQgIC0+IDEuNTYwCitkcWZtYTIxMDAzICBmbWEgIDEzMEUtMiAgMUUwICAgICAgMGUrNjE0NCAgLT4gMS4zMAorZHFmbWEyMTAwNCAgZm1hICAxRTIgICAgIDFFNCAgICAgIDBlKzYxNDQgIC0+IDFFKzYKKworLS0gTnVsbCB0ZXN0cworZHFmbWEyOTkwIGZtYSAgMTAgICMgICAwZSs2MTQ0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjk5MSBmbWEgICAjIDEwICAgMGUrNjE0NCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKworLS0gQURESVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZHFhZGQzMDAxIGZtYSAgMSAgMSAgICAgICAxICAgICAgIC0+ICAyCitkcWFkZDMwMDIgZm1hICAxICAyICAgICAgIDMgICAgICAgLT4gIDUKK2RxYWRkMzAwMyBmbWEgIDEgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQorZHFhZGQzMDA0IGZtYSAgMSAgJzUnICAgICAnLTMnICAgIC0+ICAyCitkcWFkZDMwMDUgZm1hICAxICAnLTUnICAgICctMycgICAgLT4gIC04CitkcWFkZDMwMDYgZm1hICAxICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUKK2RxYWRkMzAwNyBmbWEgIDEgICcwLjcnICAgJzAuMycgICAtPiAgMS4wCitkcWFkZDMwMDggZm1hICAxICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKK2RxYWRkMzAwOSBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5JworZHFhZGQzMDEwIGZtYSAgMSAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCisKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcWFkZDMwMTEgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ2JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxMiBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RxYWRkMzAxMyBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQzMDE0IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDknICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE1IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5JyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE2IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE3IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMCcgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE4IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDE5IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDIwIGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTEnICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDMwMjEgZm1hICAxICAwIDEgLT4gMQorZHFhZGQzMDIyIGZtYSAgMSAgMSAxIC0+IDIKK2RxYWRkMzAyMyBmbWEgIDEgIDIgMSAtPiAzCitkcWFkZDMwMjQgZm1hICAxICAzIDEgLT4gNAorZHFhZGQzMDI1IGZtYSAgMSAgNCAxIC0+IDUKK2RxYWRkMzAyNiBmbWEgIDEgIDUgMSAtPiA2CitkcWFkZDMwMjcgZm1hICAxICA2IDEgLT4gNworZHFhZGQzMDI4IGZtYSAgMSAgNyAxIC0+IDgKK2RxYWRkMzAyOSBmbWEgIDEgIDggMSAtPiA5CitkcWFkZDMwMzAgZm1hICAxICA5IDEgLT4gMTAKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitkcWFkZDMwMzEgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2RxYWRkMzAzMiBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JworZHFhZGQzMDMzIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCitkcWFkZDMwMzQgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworZHFhZGQzMDM1IGZtYSAgMSAgJzcwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwMzYgZm1hICAxICAnNzAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwMzcgZm1hICAxICAnNzAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDM4IGZtYSAgMSAgJzcwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwMzkgZm1hICAxICAnNzAwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2RxYWRkMzA0MCBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDQxIGZtYSAgMSAgJzEwMDAwZSszNCcgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDQyIGZtYSAgMSAgJzEwMDAwZSszNCcgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzA0NCBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDQ1IGZtYSAgMSAgJzEwMDAwZSszNCcgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQKKworLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZworZHFhZGQzMDQ2IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2RxYWRkMzA0NyBmbWEgIDEgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJworZHFhZGQzMDQ4IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJworZHFhZGQzMDQ5IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2RxYWRkMzA1MCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJworZHFhZGQzMDUxIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJworZHFhZGQzMDUyIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZHFhZGQzMDUzIGZtYSAgMSAgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJworZHFhZGQzMDU0IGZtYSAgMSAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKK2RxYWRkMzA1NSBmbWEgIDEgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnCitkcWFkZDMwNTYgZm1hICAxICAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKK2RxYWRkMzA1NyBmbWEgIDEgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCisKKy0tIGxlYWRpbmcgemVybyBwcmVzZXJ2YXRpb24KK2RxYWRkMzA2MSBmbWEgIDEgIDEgJzAuMDAwMScgLT4gJzEuMDAwMScKK2RxYWRkMzA2MiBmbWEgIDEgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJworZHFhZGQzMDYzIGZtYSAgMSAgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScKK2RxYWRkMzA2NCBmbWEgIDEgIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScKK2RxYWRkMzA2NSBmbWEgIDEgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJworCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitkcWFkZDMwNzAgZm1hICAxICAxICAwICAgIC0+IDEKK2RxYWRkMzA3MSBmbWEgIDEgIDEgMC4gICAgLT4gMQorZHFhZGQzMDcyIGZtYSAgMSAgMSAgLjAgICAtPiAxLjAKK2RxYWRkMzA3MyBmbWEgIDEgIDEgMC4wICAgLT4gMS4wCitkcWFkZDMwNzQgZm1hICAxICAxIDAuMDAgIC0+IDEuMDAKK2RxYWRkMzA3NSBmbWEgIDEgICAwICAxICAgLT4gMQorZHFhZGQzMDc2IGZtYSAgMSAgMC4gIDEgICAtPiAxCitkcWFkZDMwNzcgZm1hICAxICAgLjAgMSAgIC0+IDEuMAorZHFhZGQzMDc4IGZtYSAgMSAgMC4wIDEgICAtPiAxLjAKK2RxYWRkMzA3OSBmbWEgIDEgIDAuMDAgMSAgLT4gMS4wMAorCistLSBzb21lIGNhcnJpZXMKK2RxYWRkMzA4MCBmbWEgIDEgIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkKK2RxYWRkMzA4MSBmbWEgIDEgIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwCitkcWFkZDMwODIgZm1hICAxICAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwCitkcWFkZDMwODMgZm1hICAxICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKK2RxYWRkMzA4NCBmbWEgIDEgICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwCitkcWFkZDMwODUgZm1hICAxICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwCitkcWFkZDMwODYgZm1hICAxICAgICAgIDk5OTkgMSAgLT4gMTAwMDAKK2RxYWRkMzA4NyBmbWEgIDEgICAgICAgIDk5OSAxICAtPiAxMDAwCitkcWFkZDMwODggZm1hICAxICAgICAgICAgOTkgMSAgLT4gMTAwCitkcWFkZDMwODkgZm1hICAxICAgICAgICAgIDkgMSAgLT4gMTAKKworCistLSBtb3JlIExIUyBzd2FwcworZHFhZGQzMDkwIGZtYSAgMSAgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitkcWFkZDMwOTEgZm1hICAxICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JworZHFhZGQzMDkyIGZtYSAgMSAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworZHFhZGQzMDkzIGZtYSAgMSAgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitkcWFkZDMwOTQgZm1hICAxICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKK2RxYWRkMzA5NSBmbWEgIDEgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworZHFhZGQzMDk2IGZtYSAgMSAgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitkcWFkZDMwOTcgZm1hICAxICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JworZHFhZGQzMDk4IGZtYSAgMSAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2RxYWRkMzA5OSBmbWEgIDEgICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2RxYWRkMzEwMCBmbWEgIDEgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCitkcWFkZDMxMDEgZm1hICAxICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitkcWFkZDMxMDIgZm1hICAxICAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2RxYWRkMzEwMyBmbWEgIDEgICctNUUtMScgICAgICAgIDAgLT4gICctMC41JworZHFhZGQzMTA0IGZtYSAgMSAgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworZHFhZGQzMTA1IGZtYSAgMSAgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2RxYWRkMzEwNiBmbWEgIDEgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJworZHFhZGQzMTA3IGZtYSAgMSAgJy01RTMzJyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQzMTA4IGZtYSAgMSAgJy01RTM0JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICBSb3VuZGVkCitkcWFkZDMxMDkgZm1hICAxICAnLTVFMzUnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgIFJvdW5kZWQKK2RxYWRkMzExMCBmbWEgIDEgICctNUUzNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgUm91bmRlZAorZHFhZGQzMTExIGZtYSAgMSAgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzCitkcWFkZDMxMTMgZm1hICAxICAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JworZHFhZGQzMTE0IGZtYSAgMSAgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3JworZHFhZGQzMTE2IGZtYSAgMSAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCitkcWFkZDMxMTcgZm1hICAxICAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JworZHFhZGQzMTE5IGZtYSAgMSAgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycKK2RxYWRkMzEyMCBmbWEgIDEgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCitkcWFkZDMxMjEgZm1hICAxICAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JworZHFhZGQzMTIyIGZtYSAgMSAgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3JworZHFhZGQzMTIzIGZtYSAgMSAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJworZHFhZGQzMTI0IGZtYSAgMSAgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCitkcWFkZDMxMjUgZm1hICAxICAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnCitkcWFkZDMxMjYgZm1hICAxICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKK2RxYWRkMzEyNyBmbWEgIDEgIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCitkcWFkZDMxMjggZm1hICAxICAwICAnLTVFLTEnICAgICAgLT4gICctMC41JworZHFhZGQzMTI5IGZtYSAgMSAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCitkcWFkZDMxMzAgZm1hICAxICAwICAnLTVFMScgICAgICAgLT4gICctNTAnCitkcWFkZDMxMzEgZm1hICAxICAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJworZHFhZGQzMTMyIGZtYSAgMSAgMCAgJy01RTMzJyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDMxMzMgZm1hICAxICAwICAnLTVFMzQnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgIFJvdW5kZWQKK2RxYWRkMzEzNCBmbWEgIDEgIDAgICctNUUzNScgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICAgUm91bmRlZAorZHFhZGQzMTM1IGZtYSAgMSAgMCAgJy01RTM2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkCitkcWFkZDMxMzYgZm1hICAxICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworLS0gcmVsYXRlZAorZHFhZGQzMTM3IGZtYSAgMSAgIDEgICcwRS0zOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZHFhZGQzMTM4IGZtYSAgMSAgLTEgICcwRS0zOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFhZGQzMTM5IGZtYSAgMSAgJzBFLTM5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZHFhZGQzMTQwIGZtYSAgMSAgJzBFLTM5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFhZGQzMTQxIGZtYSAgMSAgMUUrMjkgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJworZHFhZGQzMTQyIGZtYSAgMSAgMUUrMjkgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZAorZHFhZGQzMTQzIGZtYSAgMSAgMC4wMDAgICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJworZHFhZGQzMTQ0IGZtYSAgMSAgMC4wMDAwICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZAorCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQorZHFhZGQzMTQ2IGZtYSAgMSAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJworZHFhZGQzMTQ3IGZtYSAgMSAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcKK2RxYWRkMzE0OCBmbWEgIDEgICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCitkcWFkZDMxNDkgZm1hICAxICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCitkcWFkZDMxNTAgZm1hICAxICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJworZHFhZGQzMTUxIGZtYSAgMSAgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKK2RxYWRkMzE1MiBmbWEgIDEgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMzE1MyBmbWEgIDEgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMzE1NCBmbWEgIDEgICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMzE1NSBmbWEgIDEgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCitkcWFkZDMxNTYgZm1hICAxICAnMycgICAgICczJyAgICAgLT4gICc2JworZHFhZGQzMTU3IGZtYSAgMSAgJzMnICAgICAnKzMnICAgIC0+ICAnNicKK2RxYWRkMzE1OCBmbWEgIDEgICczJyAgICAgJy0zJyAgICAtPiAgJzAnCitkcWFkZDMxNTkgZm1hICAxICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnCitkcWFkZDMxNjAgZm1hICAxICAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorZHFhZGQzMTYxIGZtYSAgMSAgJzFFKzEyJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTknCitkcWFkZDMxNjIgZm1hICAxICAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDMxNjMgZm1hICAxICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDMxNjQgZm1hICAxICAnLTEnICAgICcxRSsxMicgLT4gJzk5OTk5OTk5OTk5OScKK2RxYWRkMzE2NSBmbWEgIDEgICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScKK2RxYWRkMzE2NiBmbWEgIDEgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMzE2NyBmbWEgIDEgICcxLjExJyAgJzdFKzEyJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMzE2OCBmbWEgIDEgICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScKKworcm91bmRpbmc6IGhhbGZfdXAKK2RxYWRkMzE3MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTcyIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE3MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzQgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTc1IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE3NiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzcgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQKK2RxYWRkMzE3OCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzkgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTgwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE4MSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxODIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTgzIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDMyMDAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKK2RxYWRkMzIwMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIwOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQzMjE3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjE4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjE5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcWFkZDMyMjAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKK2RxYWRkMzIyMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIyOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQzMjM3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjM4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjM5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RxYWRkMzI0MCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI0MSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI0MiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RxYWRkMzI1MCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JworZHFhZGQzMjUxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjUyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjUzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjU5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjYwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjYxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjYyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjYzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCitkcWFkZDMyNjcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyNjggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyNjkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfdXAKK2RxYWRkMzMwMSBmbWEgIDEgICAtMSAgIDEgICAgICAtPiAgIDAKK2RxYWRkMzMwMiBmbWEgIDEgICAgMCAgIDEgICAgICAtPiAgIDEKK2RxYWRkMzMwMyBmbWEgIDEgICAgMSAgIDEgICAgICAtPiAgIDIKK2RxYWRkMzMwNCBmbWEgIDEgICAxMiAgIDEgICAgICAtPiAgMTMKK2RxYWRkMzMwNSBmbWEgIDEgICA5OCAgIDEgICAgICAtPiAgOTkKK2RxYWRkMzMwNiBmbWEgIDEgICA5OSAgIDEgICAgICAtPiAxMDAKK2RxYWRkMzMwNyBmbWEgIDEgIDEwMCAgIDEgICAgICAtPiAxMDEKK2RxYWRkMzMwOCBmbWEgIDEgIDEwMSAgIDEgICAgICAtPiAxMDIKK2RxYWRkMzMwOSBmbWEgIDEgICAtMSAgLTEgICAgICAtPiAgLTIKK2RxYWRkMzMxMCBmbWEgIDEgICAgMCAgLTEgICAgICAtPiAgLTEKK2RxYWRkMzMxMSBmbWEgIDEgICAgMSAgLTEgICAgICAtPiAgIDAKK2RxYWRkMzMxMiBmbWEgIDEgICAxMiAgLTEgICAgICAtPiAgMTEKK2RxYWRkMzMxMyBmbWEgIDEgICA5OCAgLTEgICAgICAtPiAgOTcKK2RxYWRkMzMxNCBmbWEgIDEgICA5OSAgLTEgICAgICAtPiAgOTgKK2RxYWRkMzMxNSBmbWEgIDEgIDEwMCAgLTEgICAgICAtPiAgOTkKK2RxYWRkMzMxNiBmbWEgIDEgIDEwMSAgLTEgICAgICAtPiAxMDAKKworZHFhZGQzMzIxIGZtYSAgMSAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2RxYWRkMzMyMiBmbWEgIDEgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCitkcWFkZDMzMjMgZm1hICAxICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorZHFhZGQzMzI0IGZtYSAgMSAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2RxYWRkMzMyNSBmbWEgIDEgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5CitkcWFkZDMzMjYgZm1hICAxICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorZHFhZGQzMzI3IGZtYSAgMSAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2RxYWRkMzMyOCBmbWEgIDEgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCitkcWFkZDMzMjkgZm1hICAxICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorZHFhZGQzMzMwIGZtYSAgMSAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2RxYWRkMzMzMSBmbWEgIDEgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCitkcWFkZDMzMzIgZm1hICAxICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorZHFhZGQzMzMzIGZtYSAgMSAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2RxYWRkMzMzNCBmbWEgIDEgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4CitkcWFkZDMzMzUgZm1hICAxICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorZHFhZGQzMzM2IGZtYSAgMSAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitkcWFkZDMzNDAgZm1hICAxICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCitkcWFkZDMzNDEgZm1hICAxICAxRSszMyAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFhZGQzMzQyIGZtYSAgMSAgMUUrMzQgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBSb3VuZGVkCitkcWFkZDMzNDMgZm1hICAxICAxRSszNSAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2RxYWRkMzM0NCBmbWEgIDEgIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2RxYWRkMzM0NSBmbWEgIDEgIDFFKzMzICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWFkZDMzNDYgZm1hICAxICAxRSszNCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMzQ3IGZtYSAgMSAgMUUrMzUgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzM0OCBmbWEgIDEgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2RxYWRkMzM0OSBmbWEgIDEgIDFFKzMzICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcWFkZDMzNTAgZm1hICAxICAxRSszNCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzQgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMzUxIGZtYSAgMSAgMUUrMzUgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkcWFkZDMzNjAgIGZtYSAgMSAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorZHFhZGQzMzYxICBmbWEgIDEgIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkCitkcWFkZDMzNjIgIGZtYSAgMSAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKK2RxYWRkMzM2MyAgZm1hICAxICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzMzY0ICBmbWEgIDEgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwRSs2MTExCistLSAgICAgICAgICAgIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CisKKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK2RxYWRkMzM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQKK2RxYWRkMzM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkcWFkZDMzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0CitkcWFkZDMzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitkcWFkZDMzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0CitkcWFkZDMzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0CisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworZHFhZGQzNDAwIGZtYSAgMSAgICAxICAgNzdlLTMyICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQwMSBmbWEgIDEgICAgMSAgIDc3ZS0zMyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQzNDAyIGZtYSAgMSAgICAxICAgNzdlLTM0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDAzIGZtYSAgMSAgICAxICAgNzdlLTM1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDA0IGZtYSAgMSAgICAxICAgNzdlLTM2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDA1IGZtYSAgMSAgICAxICAgNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDA2IGZtYSAgMSAgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM0MTAgZm1hICAxICAgMTAgICA3N2UtMzIgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQxMSBmbWEgIDEgICAxMCAgIDc3ZS0zMyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxMiBmbWEgIDEgICAxMCAgIDc3ZS0zNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxMyBmbWEgIDEgICAxMCAgIDc3ZS0zNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxNCBmbWEgIDEgICAxMCAgIDc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxNSBmbWEgIDEgICAxMCAgIDc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQxNiBmbWEgIDEgICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNDIwIGZtYSAgMSAgIDc3ZS0zMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQyMSBmbWEgIDEgICA3N2UtMzMgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQzNDIyIGZtYSAgMSAgIDc3ZS0zNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDIzIGZtYSAgMSAgIDc3ZS0zNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDI0IGZtYSAgMSAgIDc3ZS0zNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDI1IGZtYSAgMSAgIDc3ZS0zNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDI2IGZtYSAgMSAgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM0MzAgZm1hICAxICAgNzdlLTMyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQzMSBmbWEgIDEgICA3N2UtMzMgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzMiBmbWEgIDEgICA3N2UtMzQgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzMyBmbWEgIDEgICA3N2UtMzUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzNCBmbWEgIDEgICA3N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzNSBmbWEgIDEgICA3N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQzNiBmbWEgIDEgICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZHFhZGQzNjQ0MCBmbWEgIDEgICAgMSAgIC03N2UtMzIgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ0MSBmbWEgIDEgICAgMSAgIC03N2UtMzMgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NDIgZm1hICAxICAgIDEgICAtNzdlLTM0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ0MyBmbWEgIDEgICAgMSAgIC03N2UtMzUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ0NCBmbWEgIDEgICAgMSAgIC03N2UtMzYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ0NSBmbWEgIDEgICAgMSAgIC03N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDQ2IGZtYSAgMSAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjQ1MCBmbWEgIDEgICAxMCAgIC03N2UtMzIgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NTEgZm1hICAxICAgMTAgICAtNzdlLTMzICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ1MiBmbWEgIDEgICAxMCAgIC03N2UtMzQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ1MyBmbWEgIDEgICAxMCAgIC03N2UtMzUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ1NCBmbWEgIDEgICAxMCAgIC03N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDU1IGZtYSAgMSAgIDEwICAgLTc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NTYgZm1hICAxICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM2NDYwIGZtYSAgMSAgIC03N2UtMzIgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDYxIGZtYSAgMSAgIC03N2UtMzMgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ2MiBmbWEgIDEgICAtNzdlLTM0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDYzIGZtYSAgMSAgIC03N2UtMzUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDY0IGZtYSAgMSAgIC03N2UtMzYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDY1IGZtYSAgMSAgIC03N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NjYgZm1hICAxICAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM2NDcwIGZtYSAgMSAgIC03N2UtMzIgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ3MSBmbWEgIDEgICAtNzdlLTMzICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDcyIGZtYSAgMSAgIC03N2UtMzQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDczIGZtYSAgMSAgIC03N2UtMzUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDc0IGZtYSAgMSAgIC03N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NzUgZm1hICAxICAgLTc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ3NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RxYWRkMzY0ODAgZm1hICAxICAgLTEgICAgNzdlLTMyICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDgxIGZtYSAgMSAgIC0xICAgIDc3ZS0zMyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0ODIgZm1hICAxICAgLTEgICAgNzdlLTM0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0ODMgZm1hICAxICAgLTEgICAgNzdlLTM1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDg0IGZtYSAgMSAgIC0xICAgIDc3ZS0zNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ4NSBmbWEgIDEgICAtMSAgICA3N2UtMzcgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ4NiBmbWEgIDEgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM2NDkwIGZtYSAgMSAgLTEwICAgIDc3ZS0zMiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0OTEgZm1hICAxICAtMTAgICAgNzdlLTMzICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0OTIgZm1hICAxICAtMTAgICAgNzdlLTM0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDkzIGZtYSAgMSAgLTEwICAgIDc3ZS0zNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ5NCBmbWEgIDEgIC0xMCAgICA3N2UtMzYgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ5NSBmbWEgIDEgIC0xMCAgICA3N2UtMzcgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ5NiBmbWEgIDEgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM2NTAwIGZtYSAgMSAgICA3N2UtMzIgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUwMSBmbWEgIDEgICAgNzdlLTMzICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NTAyIGZtYSAgMSAgICA3N2UtMzQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NTAzIGZtYSAgMSAgICA3N2UtMzUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjUwNCBmbWEgIDEgICAgNzdlLTM2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MDUgZm1hICAxICAgIDc3ZS0zNyAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MDYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjUxMCBmbWEgIDEgICAgNzdlLTMyICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NTExIGZtYSAgMSAgICA3N2UtMzMgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NTEyIGZtYSAgMSAgICA3N2UtMzQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjUxMyBmbWEgIDEgICAgNzdlLTM1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MTQgZm1hICAxICAgIDc3ZS0zNiAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MTUgZm1hICAxICAgIDc3ZS0zNyAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MTYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDM2NTQwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDM2NTQxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQ0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQ3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTUwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTUzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTU2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCitkcWFkZDM2NTU3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RxYWRkMzY1NjAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKK2RxYWRkMzY1NjEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTYyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTY1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTY4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTcxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTc0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcKK2RxYWRkMzY1NzcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTc4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RxYWRkMzc1NDAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTQxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU0MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RxYWRkMzc1NTAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKK2RxYWRkMzc1NTEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTUyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTU1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTU4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTYxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTY0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcKK2RxYWRkMzc1NjcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTY4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcm91bmRpbmc6IGhhbGZfZXZlbgorCitkcWFkZDM3NzAxIGZtYSAgMSAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDAKK2RxYWRkMzc3MDIgZm1hICAxICAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2RxYWRkMzc3MDMgZm1hICAxICAwMC4wMCAwRS0zICAgLT4gMC4wMDAKK2RxYWRkMzc3MDQgZm1hICAxICAwRS0zICAwMC4wMCAgLT4gMC4wMDAKKworZHFhZGQzNzcxMCBmbWEgIDEgIDBFKzMgIDAwLjAwICAtPiAwLjAwCitkcWFkZDM3NzExIGZtYSAgMSAgMEUrMyAgMDAuMCAgIC0+IDAuMAorZHFhZGQzNzcxMiBmbWEgIDEgIDBFKzMgIDAwLiAgICAtPiAwCitkcWFkZDM3NzEzIGZtYSAgMSAgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2RxYWRkMzc3MTQgZm1hICAxICAwRSszICAwMC5FKzIgLT4gMEUrMgorZHFhZGQzNzcxNSBmbWEgIDEgIDBFKzMgIDAwLkUrMyAtPiAwRSszCitkcWFkZDM3NzE2IGZtYSAgMSAgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2RxYWRkMzc3MTcgZm1hICAxICAwRSszICAwMC5FKzUgLT4gMEUrMworZHFhZGQzNzcxOCBmbWEgIDEgIDBFKzMgIC0wMC4wICAgLT4gMC4wCitkcWFkZDM3NzE5IGZtYSAgMSAgMEUrMyAgLTAwLiAgICAtPiAwCitkcWFkZDM3NzMxIGZtYSAgMSAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCisKK2RxYWRkMzc3MjAgZm1hICAxICAwMC4wMCAgMEUrMyAgLT4gMC4wMAorZHFhZGQzNzcyMSBmbWEgIDEgIDAwLjAgICAwRSszICAtPiAwLjAKK2RxYWRkMzc3MjIgZm1hICAxICAwMC4gICAgMEUrMyAgLT4gMAorZHFhZGQzNzcyMyBmbWEgIDEgIDAwLkUrMSAwRSszICAtPiAwRSsxCitkcWFkZDM3NzI0IGZtYSAgMSAgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2RxYWRkMzc3MjUgZm1hICAxICAwMC5FKzMgMEUrMyAgLT4gMEUrMworZHFhZGQzNzcyNiBmbWEgIDEgIDAwLkUrNCAwRSszICAtPiAwRSszCitkcWFkZDM3NzI3IGZtYSAgMSAgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2RxYWRkMzc3MjggZm1hICAxICAtMDAuMDAgMEUrMyAgLT4gMC4wMAorZHFhZGQzNzcyOSBmbWEgIDEgIC0wMC4wICAwRSszICAtPiAwLjAKK2RxYWRkMzc3MzAgZm1hICAxICAtMDAuICAgMEUrMyAgLT4gMAorCitkcWFkZDM3NzMyIGZtYSAgMSAgIDAgICAgIDAgICAgIC0+ICAwCitkcWFkZDM3NzMzIGZtYSAgMSAgIDAgICAgLTAgICAgIC0+ICAwCitkcWFkZDM3NzM0IGZtYSAgMSAgLTAgICAgIDAgICAgIC0+ICAwCitkcWFkZDM3NzM1IGZtYSAgMSAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UKKworZHFhZGQzNzczNiBmbWEgIDEgICAxICAgIC0xICAgICAtPiAgMAorZHFhZGQzNzczNyBmbWEgIDEgIC0xICAgIC0xICAgICAtPiAtMgorZHFhZGQzNzczOCBmbWEgIDEgICAxICAgICAxICAgICAtPiAgMgorZHFhZGQzNzczOSBmbWEgIDEgIC0xICAgICAxICAgICAtPiAgMAorCitkcWFkZDM3NzQxIGZtYSAgMSAgIDAgICAgLTEgICAgIC0+IC0xCitkcWFkZDM3NzQyIGZtYSAgMSAgLTAgICAgLTEgICAgIC0+IC0xCitkcWFkZDM3NzQzIGZtYSAgMSAgIDAgICAgIDEgICAgIC0+ICAxCitkcWFkZDM3NzQ0IGZtYSAgMSAgLTAgICAgIDEgICAgIC0+ICAxCitkcWFkZDM3NzQ1IGZtYSAgMSAgLTEgICAgIDAgICAgIC0+IC0xCitkcWFkZDM3NzQ2IGZtYSAgMSAgLTEgICAgLTAgICAgIC0+IC0xCitkcWFkZDM3NzQ3IGZtYSAgMSAgIDEgICAgIDAgICAgIC0+ICAxCitkcWFkZDM3NzQ4IGZtYSAgMSAgIDEgICAgLTAgICAgIC0+ICAxCisKK2RxYWRkMzc3NTEgZm1hICAxICAgMC4wICAtMSAgICAgLT4gLTEuMAorZHFhZGQzNzc1MiBmbWEgIDEgIC0wLjAgIC0xICAgICAtPiAtMS4wCitkcWFkZDM3NzUzIGZtYSAgMSAgIDAuMCAgIDEgICAgIC0+ICAxLjAKK2RxYWRkMzc3NTQgZm1hICAxICAtMC4wICAgMSAgICAgLT4gIDEuMAorZHFhZGQzNzc1NSBmbWEgIDEgIC0xLjAgICAwICAgICAtPiAtMS4wCitkcWFkZDM3NzU2IGZtYSAgMSAgLTEuMCAgLTAgICAgIC0+IC0xLjAKK2RxYWRkMzc3NTcgZm1hICAxICAgMS4wICAgMCAgICAgLT4gIDEuMAorZHFhZGQzNzc1OCBmbWEgIDEgICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2RxYWRkMzc3NjEgZm1hICAxICAgMCAgICAtMS4wICAgLT4gLTEuMAorZHFhZGQzNzc2MiBmbWEgIDEgIC0wICAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDM3NzYzIGZtYSAgMSAgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NjQgZm1hICAxICAtMCAgICAgMS4wICAgLT4gIDEuMAorZHFhZGQzNzc2NSBmbWEgIDEgIC0xICAgICAwLjAgICAtPiAtMS4wCitkcWFkZDM3NzY2IGZtYSAgMSAgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2RxYWRkMzc3NjcgZm1hICAxICAgMSAgICAgMC4wICAgLT4gIDEuMAorZHFhZGQzNzc2OCBmbWEgIDEgICAxICAgIC0wLjAgICAtPiAgMS4wCisKK2RxYWRkMzc3NzEgZm1hICAxICAgMC4wICAtMS4wICAgLT4gLTEuMAorZHFhZGQzNzc3MiBmbWEgIDEgIC0wLjAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDM3NzczIGZtYSAgMSAgIDAuMCAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NzQgZm1hICAxICAtMC4wICAgMS4wICAgLT4gIDEuMAorZHFhZGQzNzc3NSBmbWEgIDEgIC0xLjAgICAwLjAgICAtPiAtMS4wCitkcWFkZDM3Nzc2IGZtYSAgMSAgLTEuMCAgLTAuMCAgIC0+IC0xLjAKK2RxYWRkMzc3NzcgZm1hICAxICAgMS4wICAgMC4wICAgLT4gIDEuMAorZHFhZGQzNzc3OCBmbWEgIDEgICAxLjAgIC0wLjAgICAtPiAgMS4wCisKKy0tIFNwZWNpYWxzCitkcWFkZDM3NzgwIGZtYSAgMSAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4MSBmbWEgIDEgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODIgZm1hICAxICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcWFkZDM3NzgzIGZtYSAgMSAgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4NCBmbWEgIDEgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODUgZm1hICAxICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzg2IGZtYSAgMSAgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4NyBmbWEgIDEgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODggZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzg5IGZtYSAgMSAgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc5MCBmbWEgIDEgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3OTEgZm1hICAxICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3NzkyIGZtYSAgMSAgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc5MyBmbWEgIDEgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3OTQgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZHFhZGQzNzgwMCBmbWEgIDEgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzgwMSBmbWEgIDEgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDIgZm1hICAxICAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODAzIGZtYSAgMSAgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwNCBmbWEgIDEgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDUgZm1hICAxICAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODA2IGZtYSAgMSAgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwNyBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDggZm1hICAxICAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODA5IGZtYSAgMSAgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODEwIGZtYSAgMSAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgxMSBmbWEgIDEgIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MTIgZm1hICAxICAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODEzIGZtYSAgMSAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgxNCBmbWEgIDEgICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MTUgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxYWRkMzc4MjEgZm1hICAxICAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFhZGQzNzgyMiBmbWEgIDEgICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcWFkZDM3ODIzIGZtYSAgMSAgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxYWRkMzc4MjQgZm1hICAxICAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFhZGQzNzgyNSBmbWEgIDEgICBOYU4gIDAgICAgICAtPiAgTmFOCitkcWFkZDM3ODI2IGZtYSAgMSAgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxYWRkMzc4MjcgZm1hICAxICAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFhZGQzNzgyOCBmbWEgIDEgICBOYU4gIEluZiAgICAtPiAgTmFOCitkcWFkZDM3ODI5IGZtYSAgMSAgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzAgZm1hICAxICAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzMSBmbWEgIDEgIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODMyIGZtYSAgMSAgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzMgZm1hICAxICAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzNCBmbWEgIDEgICAwICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODM1IGZtYSAgMSAgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzYgZm1hICAxICAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzNyBmbWEgIDEgICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RxYWRkMzc4NDEgZm1hICAxICAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDIgZm1hICAxICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDMgZm1hICAxICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDQgZm1hICAxICAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDUgZm1hICAxICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDYgZm1hICAxICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDcgZm1hICAxICAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDggZm1hICAxICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NDkgZm1hICAxICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTAgZm1hICAxICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTEgZm1hICAxICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTIgZm1hICAxICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTMgZm1hICAxICAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTQgZm1hICAxICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTUgZm1hICAxICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTYgZm1hICAxICAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTcgZm1hICAxICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTggZm1hICAxICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NTkgZm1hICAxICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFhZGQzNzg2MSBmbWEgIDEgICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZHFhZGQzNzg2MiBmbWEgIDEgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZHFhZGQzNzg2MyBmbWEgIDEgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZHFhZGQzNzg2NCBmbWEgIDEgICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZHFhZGQzNzg2NSBmbWEgIDEgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZHFhZGQzNzg2NiBmbWEgIDEgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZHFhZGQzNzg2NyBmbWEgIDEgIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZHFhZGQzNzg2OCBmbWEgIDEgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZHFhZGQzNzg2OSBmbWEgIDEgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2RxYWRkMzc4NzEgZm1hICAxICAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3MiBmbWEgIDEgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODczIGZtYSAgMSAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzQgZm1hICAxICAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3NSBmbWEgIDEgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODc2IGZtYSAgMSAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzcgZm1hICAxICAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3OCBmbWEgIDEgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODc5IGZtYSAgMSAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4ODAgZm1hICAxICAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg4MSBmbWEgIDEgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODgyIGZtYSAgMSAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZHFhZGQzNzg4MyBmbWEgIDEgIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODg0IGZtYSAgMSAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZHFhZGQzNzg4NSBmbWEgIDEgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCitkcWFkZDM3NTc1IGZtYSAgMSAgIDFFLTYxNDMgLTFFLTYxNzYgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsCitkcWFkZDM3NTc2IGZtYSAgMSAgLTFFLTYxNDMgKzFFLTYxNzYgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsCisKKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcWFkZDM3OTcyIGFwcGx5ICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxYWRkMzc5NzMgZm1hICAxICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzQgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzUgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTEgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk3NiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTc3IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA4RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzggZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDdFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk3OSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNkUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTgwIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA1RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODEgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDRFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk4MiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgM0UrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTgzIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAyRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODQgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM3OTg1IGFwcGx5ICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWFkZDM3OTg2IGZtYSAgMSAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk4NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODggZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTEgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODkgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTlFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTAgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLThFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTEgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTdFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTIgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTZFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTMgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTVFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTQgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTRFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTUgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTNFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTYgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTJFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5OTcgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCityb3VuZGluZzogICAgIGRvd24KK2RxYWRkMzcxMTAwIGZtYSAgMSAgMWUrMiAtMWUtNjE0MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTAxIGZtYSAgMSAgMWUrMSAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwMyBmbWEgIDEgICAgKzEgLTFlLTYxNDMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTA0IGZtYSAgMSAgMWUtMSAtMWUtNjE0MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTA1IGZtYSAgMSAgMWUtMiAtMWUtNjE0MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwNiBmbWEgIDEgIDFlLTMgLTFlLTYxNDMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTA3IGZtYSAgMSAgMWUtNCAtMWUtNjE0MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTA4IGZtYSAgMSAgMWUtNSAtMWUtNjE0MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwOSBmbWEgIDEgIDFlLTYgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGNlaWxpbmcKK2RxYWRkMzcxMTEwIGZtYSAgMSAgLTFlKzIgKzFlLTYxNDMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExMSBmbWEgIDEgIC0xZSsxICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTEzIGZtYSAgMSAgICAgLTEgKzFlLTYxNDMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTE0IGZtYSAgMSAgLTFlLTEgKzFlLTYxNDMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExNSBmbWEgIDEgIC0xZS0yICsxZS02MTQzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTE2IGZtYSAgMSAgLTFlLTMgKzFlLTYxNDMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTE3IGZtYSAgMSAgLTFlLTQgKzFlLTYxNDMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExOCBmbWEgIDEgIC0xZS01ICsxZS02MTQzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzcxMTE5IGZtYSAgMSAgLTFlLTYgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQorcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4KKworZHFhZGQzNzEzMDAgZm1hICAxICAxRTM0ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTAgZm1hICAxICAxRTM0ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTEgZm1hICAxICAxRTM0ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTIgZm1hICAxICAxRTM0ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTMgZm1hICAxICAxRTM0ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTQgZm1hICAxICAxRTM0ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTUgZm1hICAxICAxRTM0ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTYgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTcgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTggZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMTkgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjAgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjEgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjIgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjMgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjQgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjUgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjYgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjcgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjggZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMjkgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzAgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzEgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzIgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzMgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzQgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzUgZm1hICAxICAxRTM0ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzYgZm1hICAxICAxRTM0ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzcgZm1hICAxICAxRTM0ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzggZm1hICAxICAxRTM0ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzMzkgZm1hICAxICAxRTM0ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM3MTM0MCBmbWEgIDEgIDFFMzQgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM0MSBmbWEgIDEgIDFFMzQgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkMzcxMzQ5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzUyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzU1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzU4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzYxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzY0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzY4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzcxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzc0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzc3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzgwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzgzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzg2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzg5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzkyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzk1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAorZHFhZGQzNzE0MjAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDIxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0MjIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0MjMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDI0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0MjUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0MjYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDI3IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03CitkcWFkZDM3MTQyOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOAorZHFhZGQzNzE0MjkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkKK2RxYWRkMzcxNDMwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZHFhZGQzNzE0MzEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExCitkcWFkZDM3MTQzMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RxYWRkMzcxNDMzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMworZHFhZGQzNzE0MzQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0CitkcWFkZDM3MTQzNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RxYWRkMzcxNDM2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZHFhZGQzNzE0MzcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3CitkcWFkZDM3MTQzOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RxYWRkMzcxNDM5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQorZHFhZGQzNzE0NDAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwCitkcWFkZDM3MTQ0MSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEKK2RxYWRkMzcxNDQyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMgorZHFhZGQzNzE0NDMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzCitkcWFkZDM3MTQ0NCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQKK2RxYWRkMzcxNDQ1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQorZHFhZGQzNzE0NDYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2CitkcWFkZDM3MTQ0NyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcKK2RxYWRkMzcxNDQ4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOAorZHFhZGQzNzE0NDkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5CitkcWFkZDM3MTQ1MCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAKK2RxYWRkMzcxNDUxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQorZHFhZGQzNzE0NTIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyCitkcWFkZDM3MTQ1MyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMKK2RxYWRkMzcxNDU0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNAorZHFhZGQzNzE0NTUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1CitkcWFkZDM3MTQ1NiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorZHFhZGQzNzE0NjAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDYyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDY1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE0NjcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNworZHFhZGQzNzE0NjggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOAorZHFhZGQzNzE0NjkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQorZHFhZGQzNzE0NzAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RxYWRkMzcxNDcxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExCitkcWFkZDM3MTQ3MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZHFhZGQzNzE0NzMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RxYWRkMzcxNDc0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0CitkcWFkZDM3MTQ3NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZHFhZGQzNzE0NzYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RxYWRkMzcxNDc3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3CitkcWFkZDM3MTQ3OCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZHFhZGQzNzE0NzkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkKK2RxYWRkMzcxNDgwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwCitkcWFkZDM3MTQ4MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQorZHFhZGQzNzE0ODIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIKK2RxYWRkMzcxNDgzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzCitkcWFkZDM3MTQ4NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNAorZHFhZGQzNzE0ODUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUKK2RxYWRkMzcxNDg2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2CitkcWFkZDM3MTQ4NyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNworZHFhZGQzNzE0ODggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjggMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgKK2RxYWRkMzcxNDg5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5CitkcWFkZDM3MTQ5MCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMAorZHFhZGQzNzE0OTEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEKK2RxYWRkMzcxNDkyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyCitkcWFkZDM3MTQ5MyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMworZHFhZGQzNzE0OTQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQKK2RxYWRkMzcxNDk1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1CitkcWFkZDM3MTQ5NiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNgorCistLSBzYW1lLCBFcyBvbiB0aGUgMAorZHFhZGQzNzE1MDAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwMSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTAyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwNCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTA1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwNyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTA4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxMCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTExIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxMyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTE0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxNiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTE3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxOSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTIwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyMiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTIzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyNSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTI2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyOCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTI5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI5ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MzAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUzMSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTMyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MzMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0CitkcWFkZDM3MTUzNCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZHFhZGQzNzE1MzUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RxYWRkMzcxNTM2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkcWFkZDM3MTUzNyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMAorcm91bmRpbmc6ICAgIGhhbGZfdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNjAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjAxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTYxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTYxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE2MTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTYxNCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE2MjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2MjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2MjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNjMxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNjMyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTYzMyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNjM0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDM3MTY0MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTY0MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTY0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTY0MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQzNzE2NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQzNzE2NTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorLS0gb3ZlcmZsb3cKK2RxYWRkMzcxNjUzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzE2NTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICB1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE2NjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNjcxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNjcyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTY3MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNjc0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE2ODAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2ODEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2ODIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2ODMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNjkxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNjkyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTY5MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNjk0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgY2VpbGluZworLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE3MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNzExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNzEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTcxMyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNzE0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKK3JvdW5kaW5nOiAgICBmbG9vcgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE3MjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZHFhZGQzNzE3MjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZHFhZGQzNzE3MjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNzMxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKK2RxYWRkMzcxNzMyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKKy0tIG92ZXJmbG93CitkcWFkZDM3MTczMyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNzM0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgMDV1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE3NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3NDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3NDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE3NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNzUxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNzUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTc1MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNzU0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2RxYWRkMzcxNzYxIGZtYSAgMSAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitkcWFkZDM3MTc2MiBmbWEgIDEgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZHFhZGQzNzE3NjMgZm1hICAxICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2RxYWRkMzcxNzY0IGZtYSAgMSAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitkcWFkZDM3MTc2NSBmbWEgIDEgIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMAorZHFhZGQzNzE3NjYgZm1hICAxICAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTAKK2RxYWRkMzcxNzY3IGZtYSAgMSAgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwCitkcWFkZDM3MTc2OCBmbWEgIDEgIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMworCistLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RxYWRkMzc1MDAxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NworZHFhZGQzNzUwMDIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDAzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwNCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMDUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDA2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwNyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMDggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDA5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxMCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDEyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxMyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDE1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxNiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDE4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxOSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMjAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDIxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXAKK2RxYWRkMzc1MDMwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzkKK2RxYWRkMzc1MDMxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMQorZHFhZGQzNzUwMzIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMgorZHFhZGQzNzUwMzMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjMKK2RxYWRkMzc1MDM0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNAorZHFhZGQzNzUwMzUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NQorZHFhZGQzNzUwMzYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTYKK2RxYWRkMzc1MDM3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NworZHFhZGQzNzUwMzggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OAorZHFhZGQzNzUwMzkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQ2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQ5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngorcm91bmRpbmc6IGhhbGZfZXZlbgorZHFhZGQzNzUwNTAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDUxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNTMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDU0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNTYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDU3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDYyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDY1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykKK3JvdW5kaW5nOiB1cAorZHFhZGQzNzUwNzAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMQorZHFhZGQzNzUwNzEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDcyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDc1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDc4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3OSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDgxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDg0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDg3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4OCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gRGVzdHJ1Y3RpdmUgc3VidHJhY3QgKGZyb20gcmVtYWluZGVyIHRlc3RzKQorCistLSArKysgc29tZSBvZiB0aGVzZSB3aWxsIGJlIG9mZi1ieS1vbmUgcmVtYWluZGVyIHZzIHJlbWFpbmRlck5lYXIKKworZHFmbWE0MDAwICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMzICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMworZHFmbWE0MDAxICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIyICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIyCitkcWZtYTQwMDIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTEgICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTExMQorZHFmbWE0MDAzICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzE0ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgLT4gIC0xLjMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxNAorZHFmbWE0MDA0ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyCitkcWZtYTQwMDUgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTIgICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTEuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc0OAorZHFmbWE0MDA2ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3ICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKK2RxZm1hNDAwNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC43NTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMKK2RxZm1hNDAwOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMS4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKK2RxZm1hNDAwOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NiAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjUzMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU0CitkcWZtYTQwMTAgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDIgICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0MgorZHFmbWE0MDExICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMyICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY4CitkcWZtYTQwMTIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjEgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMC42NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc3OQorZHFmbWE0MDEzICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMTEwICAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODg5MAorZHFmbWE0MDE0ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzEzICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0Njg3CitkcWZtYTQwMTUgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMDggICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTIKK2RxZm1hNDAxNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI1MSAgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAzLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTEKK2RxZm1hNDAxNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3CitkcWZtYTQwMTggIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgNC4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYKK2RxZm1hNDAxOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0MSAgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICA0LjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTkKKworLS0gTnVsbCB0ZXN0cworZHFhZGQzOTk5MCBmbWEgIDEgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzOTk5MSBmbWEgIDEgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFJbnZlcnQuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFJbnZlcnQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJjZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUludmVydC5kZWNUZXN0CkBAIC0wLDAgKzEsMjQ1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxSW52ZXJ0LmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgSU5WRVJUIGZvciBkZWNRdWFkcyAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2RxaW52MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxaW52MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKK2RxaW52MDAzIGludmVydCAgICAgICAgICAgIDEwIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEKK2RxaW52MDA0IGludmVydCAgICAgMTExMTExMTExIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAKK2RxaW52MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkcWludjAwNyBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxaW52MDA4IGludmVydCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFpbnYwMDkgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWludjAxMCBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxaW52MDExIGludmVydCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFpbnYwMTIgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgICAwCitkcWludjAxMyBpbnZlcnQgMDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxaW52MDE0IGludmVydCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKK2RxaW52NjAwIGludmVydCAwMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMAorZHFpbnY2MDEgaW52ZXJ0IDAwMTExMTExMTExMTExMTExMTAxMDExMTExMTExMTExMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwMDAxMDEwMDAwMDAwMDAwMDAwCitkcWludjYwMiBpbnZlcnQgMDEwMTExMTExMTExMTExMTEwMTExMDExMTExMTExMTExMSAtPiAgIDEwMTAwMDAwMDAwMDAwMDAwMTAwMDEwMDAwMDAwMDAwMDAKK2RxaW52NjAzIGludmVydCAwMTEwMTExMTExMTExMTExMDExMTExMDExMTExMTExMTExIC0+ICAgMTAwMTAwMDAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMAorZHFpbnY2MDQgaW52ZXJ0IDAxMTEwMTExMTExMTExMTAxMTExMTExMDExMTExMTExMTEgLT4gICAxMDAwMTAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMDAwCitkcWludjYwNSBpbnZlcnQgMDExMTEwMTExMTExMTEwMTExMTExMTExMDExMTExMTExMSAtPiAgIDEwMDAwMTAwMDAwMDAwMTAwMDAwMDAwMDEwMDAwMDAwMDAKK2RxaW52NjA2IGludmVydCAwMTExMTEwMTExMTExMDExMTExMTExMTExMDExMTExMTExIC0+ICAgMTAwMDAwMTAwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDAwMAorZHFpbnY2MDcgaW52ZXJ0IDAxMTExMTEwMTExMTAxMTExMTExMTExMTExMDExMTExMTEgLT4gICAxMDAwMDAwMTAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMDAwCitkcWludjYwOCBpbnZlcnQgMDExMTExMTEwMTEwMTExMTExMTExMTExMTExMDExMTExMSAtPiAgIDEwMDAwMDAwMTAwMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDAKK2RxaW52NjA5IGludmVydCAwMTExMTExMTEwMDExMTExMTExMTExMTExMTExMDExMTExIC0+ICAgMTAwMDAwMDAwMTEwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMAorZHFpbnY2MTAgaW52ZXJ0IDAxMTExMTExMTAwMTExMTExMTExMTExMTExMTExMDExMTEgLT4gICAxMDAwMDAwMDAxMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwCitkcWludjYxMSBpbnZlcnQgMDExMTExMTEwMTEwMTExMTExMTExMTExMTExMTExMDExMSAtPiAgIDEwMDAwMDAwMTAwMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAKK2RxaW52NjEyIGludmVydCAwMTExMTExMDExMTEwMTExMTExMTExMTExMTExMTExMDExIC0+ICAgMTAwMDAwMDEwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDEwMAorZHFpbnY2MTMgaW52ZXJ0IDAxMTExMTAxMTExMTEwMTExMTExMTExMTExMTExMTExMDEgLT4gICAxMDAwMDAxMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcWludjYxNCBpbnZlcnQgMDExMTEwMTExMTExMTEwMTExMTExMTExMTExMTExMTExMCAtPiAgIDEwMDAwMTAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxaW52NjE1IGludmVydCAwMTExMDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIC0+ICAgMTAwMDEwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMAorZHFpbnY2MTYgaW52ZXJ0IDAxMTAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTAgLT4gICAxMDAxMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxCitkcWludjYxNyBpbnZlcnQgMDEwMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEwMSAtPiAgIDEwMTAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMTAKK2RxaW52NjE4IGludmVydCAwMDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMDExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDEwMAorZHFpbnY2MTkgaW52ZXJ0IDAxMDExMTExMTExMTExMTExMTEwMTExMTExMTExMTAxMTEgLT4gICAxMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAxMDAwCitkcWludjYyMCBpbnZlcnQgMDExMDExMTExMTExMTExMTExMTEwMTExMTExMTEwMTExMSAtPiAgIDEwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMTAwMDAKK2RxaW52NjIxIGludmVydCAwMTExMDExMTExMTExMTExMTExMTEwMTExMTExMDExMTExIC0+ICAgMTAwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDEwMDAwMAorZHFpbnY2MjIgaW52ZXJ0IDAxMTExMDExMTExMTExMTExMTExMTEwMTExMTAxMTExMTEgLT4gICAxMDAwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAxMDAwMDAwCitkcWludjYyMyBpbnZlcnQgMDExMTExMDExMTExMTExMTExMTExMTEwMTEwMTExMTExMSAtPiAgIDEwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMTAwMDAwMDAKK2RxaW52NjI0IGludmVydCAwMTExMTExMDExMTExMTExMTExMTExMTEwMDExMTExMTExIC0+ICAgMTAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMTEwMDAwMDAwMAorZHFpbnY2MjUgaW52ZXJ0IDAxMTExMTExMDExMTExMTExMTExMTExMTAwMTExMTExMTEgLT4gICAxMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxMTAwMDAwMDAwCitkcWludjYyNiBpbnZlcnQgMDExMTExMTExMDExMTExMTExMTExMTEwMTEwMTExMTExMSAtPiAgIDEwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMTAwMDAwMDAKK2RxaW52NjI3IGludmVydCAwMTExMTExMTExMDExMTExMTExMTExMDExMTEwMTExMTExIC0+ICAgMTAwMDAwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMTAwMDAwMAorZHFpbnY2MjggaW52ZXJ0IDAxMTExMTExMTExMDExMTExMTExMTAxMTExMTEwMTExMTEgLT4gICAxMDAwMDAwMDAwMDEwMDAwMDAwMDAxMDAwMDAwMTAwMDAwCitkcWludjYyOSBpbnZlcnQgMDExMTExMTExMTExMDExMTExMTEwMTExMTExMTEwMTExMSAtPiAgIDEwMDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAwMTAwMDAKK2RxaW52NjMwIGludmVydCAwMTExMTExMTExMTExMDExMTExMDExMTExMTExMTEwMTExIC0+ICAgMTAwMDAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMTAwMAorZHFpbnY2MzEgaW52ZXJ0IDAxMTExMTExMTExMTExMDExMTAxMTExMTExMTExMTEwMTEgLT4gICAxMDAwMDAwMDAwMDAwMDEwMDAxMDAwMDAwMDAwMDAwMTAwCitkcWludjYzMiBpbnZlcnQgMDExMTExMTExMTExMTExMDEwMTExMTExMTExMTExMTEwMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDEwMTAwMDAwMDAwMDAwMDAwMTAKK2RxaW52NjMzIGludmVydCAwMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMQorCitkcWludjAyMSBpbnZlcnQgMTExMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwCitkcWludjAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwCitkcWludjAyMyBpbnZlcnQgIDExMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwCitkcWludjAyNSBpbnZlcnQgICAxMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwCitkcWludjAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwCitkcWludjAyNyBpbnZlcnQgICAgIDExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwCitkcWludjAyOCBpbnZlcnQgICAgICAxMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwCitkcWludjAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwCitkcWludjAzMSBpbnZlcnQgICAgICAgIDExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwCitkcWludjAzMiBpbnZlcnQgICAgICAgICAxICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCitkcWludjAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwCitkcWludjAzNCBpbnZlcnQgMTExMTExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwCitkcWludjAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwCitkcWludjAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwCisKK2RxaW52MDQwIGludmVydCAwMTExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwCitkcWludjA0MSBpbnZlcnQgMTAxMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAwMAorZHFpbnYwNDIgaW52ZXJ0IDExMDExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDAKK2RxaW52MDQzIGludmVydCAxMTEwMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMTAwMDAwCitkcWludjA0NCBpbnZlcnQgMTExMTAxMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMDAwMAorZHFpbnYwNDUgaW52ZXJ0IDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMDAKK2RxaW52MDQ2IGludmVydCAxMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMTAwCitkcWludjA0NyBpbnZlcnQgMTExMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAxMAorZHFpbnYwNDggaW52ZXJ0IDExMTExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDEKK2RxaW52MDQ5IGludmVydCAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMTAwCitkcWludjA1MCBpbnZlcnQgMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAxMAorZHFpbnYwNTEgaW52ZXJ0IDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDEKK2RxaW52MDUyIGludmVydCAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMTAwMDEwCitkcWludjA1MyBpbnZlcnQgMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMDEwMAorZHFpbnYwNTQgaW52ZXJ0IDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMDAKK2RxaW52MDU1IGludmVydCAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDEwMTAwCitkcWludjA1NiBpbnZlcnQgMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDEwMDAxMAorZHFpbnYwNTcgaW52ZXJ0IDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDEKK2RxaW52MDU4IGludmVydCAxMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDEwCitkcWludjA1OSBpbnZlcnQgMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMAorCitkcWludjA4MCBpbnZlcnQgMTAwMDAwMDAxMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMDAwMDAwMDAKK2RxaW52MDgxIGludmVydCAwMTAwMDAwMTAxMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTAxMDAwMDAwMAorZHFpbnYwODIgaW52ZXJ0IDAwMTAwMDAxMTAxMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMDAxMDAwMDAwCitkcWludjA4MyBpbnZlcnQgMDAwMTAwMDExMTAxMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTEwMDAxMDAwMDAKK2RxaW52MDg0IGludmVydCAwMDAwMTAwMTExMTAxMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDAxMDAwMAorZHFpbnYwODUgaW52ZXJ0IDAwMDAwMTAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAxMDAwCitkcWludjA4NiBpbnZlcnQgMDAwMDAwMTExMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAxMDAKK2RxaW52MDg3IGludmVydCAwMDAwMDEwMTExMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMDAxMAorZHFpbnYwODggaW52ZXJ0IDAwMDAxMDAxMTExMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMDAwMDAwMDAxCitkcWludjA4OSBpbnZlcnQgMDAwMTAwMDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMDAwMDAxMDAKK2RxaW52MDkwIGludmVydCAwMDEwMDAwMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTAxMDAwMDAxMAorZHFpbnYwOTEgaW52ZXJ0IDAxMDAwMDAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMDAxMDAwMDAxCitkcWludjA5MiBpbnZlcnQgMTAwMDAwMDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTEwMDAxMDAwMTAKK2RxaW52MDkzIGludmVydCAwMTAwMDAwMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTAwMDAxMDEwMAorZHFpbnYwOTQgaW52ZXJ0IDAwMTAwMDAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMDAwMDAxMDAwCitkcWludjA5NSBpbnZlcnQgMDAwMTAwMDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTEwMDAwMTAxMDAKK2RxaW52MDk2IGludmVydCAwMDAwMTAwMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDEwMDAxMAorZHFpbnYwOTcgaW52ZXJ0IDAwMDAwMTAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMDAxMDAwMDAxCitkcWludjA5OCBpbnZlcnQgMDAwMDAwMTEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAwMTAwMDAwMTAKK2RxaW52MDk5IGludmVydCAwMDAwMDEwMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAwMDEwMAorCistLSBhbmQgbW9yZSB0aG9yb3VnaCBNU0QvTFNEIHRlc3RzIFs4IGFuZCA5IG1naHQgYmUgZW5jb2RlZCBkaWZmZXJlbnRseS4uLl0KK2RxaW52MTUxIGludmVydCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCitkcWludjE1MiBpbnZlcnQgMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgICAgMTExMTExMTExMTExMTExMQorZHFpbnYxNTMgaW52ZXJ0IDEwMDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMDAKK2RxaW52MTU0IGludmVydCAxMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgICAgMTExMTExMTExMTExMTExCitkcWludjE1NSBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMSAtPiAgMTAxMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMAorZHFpbnYxNTYgaW52ZXJ0IDEwMTExMTExMTExMTExMTExMTAxMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDEwMTExMTExMTExMTExMTEKK2RxaW52MTU3IGludmVydCAxMTAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwCitkcWludjE1OCBpbnZlcnQgMTExMDExMTExMTExMTExMTExMDAxMTExMTExMTExMTExMSAtPiAgICAgMTAwMDAwMDAwMDAwMDAwMTEwMDAwMDAwMDAwMDAwMAorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RxaW52MjIwIGludmVydCAxMTExMTExMTIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyMSBpbnZlcnQgMzMzMzMzMzMzICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjIgaW52ZXJ0IDU1NTU1NTU1NSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjIzIGludmVydCA3Nzc3Nzc3NzcgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyNCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjUgaW52ZXJ0IDIyMjIyMjIyMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjI2IGludmVydCA0NDQ0NDQ0NDQgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyNyBpbnZlcnQgNjY2NjY2NjY2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjggaW52ZXJ0IDg4ODg4ODg4OCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjI5IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIzMCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMzEgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjMyIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitkcWludjI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNDEgaW52ZXJ0ICA1NjczNjc2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjQyIGludmVydCAtNjMxOTE3NzcyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNDQgaW52ZXJ0ICA4MzU1OTAxNDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkcWludjI1MCBpbnZlcnQgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTEgaW52ZXJ0ICAzMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjUyIGludmVydCAgNDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI1MyBpbnZlcnQgIDUwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTQgaW52ZXJ0ICA2MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjU1IGludmVydCAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI1NiBpbnZlcnQgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTcgaW52ZXJ0ICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2RxaW52MjcwIGludmVydCAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3MSBpbnZlcnQgIDAzMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNzIgaW52ZXJ0ICAwNDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjczIGludmVydCAgMDUwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3NCBpbnZlcnQgIDE2MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNzUgaW52ZXJ0ICAxNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjc2IGludmVydCAgMTgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3NyBpbnZlcnQgIDE5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RxaW52MjgwIGludmVydCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4MSBpbnZlcnQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODIgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjgzIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwNSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4NCBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDYgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODUgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjg2IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4NyBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RxaW52Mjg4IGludmVydCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4OSBpbnZlcnQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMzAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTAgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDQwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjkxIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA1MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI5MiBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwNjAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTMgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjk0IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI5NSBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2RxaW52Mjk2IGludmVydCAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTkgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAtPiAgMTExMTExMDAwMTExMDAwMTExMDAwMTExMTEwMTExMTExCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2RxaW52MzQxIGludmVydCAgOS45OTk5OTk5OUUrMjk5OCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0MiBpbnZlcnQgIDFFLTI5OTggICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNDMgaW52ZXJ0ICAxLjAwMDAwMDAwRS0yOTk4ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzQ0IGludmVydCAgMUUtMjA3OCAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0NSBpbnZlcnQgIC0xRS0yMDc4ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNDYgaW52ZXJ0ICAtMS4wMDAwMDAwMEUtMjk5OCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzQ3IGludmVydCAgLTFFLTI5OTggICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0OCBpbnZlcnQgIC05Ljk5OTk5OTk5RSsyOTk4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2RxaW52MzYxIGludmVydCAgMS4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM2MiBpbnZlcnQgIDFFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNjMgaW52ZXJ0ICAwLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzY0IGludmVydCAgMEUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM2NSBpbnZlcnQgIDkuOSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNjYgaW52ZXJ0ICA5RSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorZHFpbnY3ODggaW52ZXJ0IC1JbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Nzk0IGludmVydCAgSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWludjgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NDEgaW52ZXJ0ICBzTmFOICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxaW52ODYxIGludmVydCAgTmFOMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODYyIGludmVydCArTmFOMiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODYzIGludmVydCAgTmFOMyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODY0IGludmVydCAgTmFONCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODY1IGludmVydCAgTmFONSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODcxIGludmVydCAgc05hTjExICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODcyIGludmVydCAgc05hTjEyICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODczIGludmVydCAgc05hTjEzICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODc0IGludmVydCAgc05hTjE0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODc1IGludmVydCAgc05hTjE1ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODc2IGludmVydCAgTmFOMTYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODgxIGludmVydCArTmFOMjUgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODgyIGludmVydCAtTmFOMjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODgzIGludmVydCAtc05hTjI3ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFMb2dCLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTG9nQi5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OWYzZGMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTG9nQi5kZWNUZXN0CkBAIC0wLDAgKzEsMTYwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTG9nQi5kZWNUZXN0IC0tIGludGVncmFsIDc1NHIgYWRqdXN0ZWQgZXhwb25lbnQsIGZvciBkZWNRdWFkcyAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gYmFzaWNzCitkcWxvZ2IwMDAgbG9nYiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2IwMDEgbG9nYiAgMUUtNjE3NiAgICAgICAgICAgLT4gLTYxNzYKK2RxbG9nYjAwMiBsb2diICAxRS02MTQzICAgICAgICAgICAtPiAtNjE0MworZHFsb2diMDAzIGxvZ2IgIDAuMDAxICAgICAgICAgICAgIC0+IC0zCitkcWxvZ2IwMDQgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTIKK2RxbG9nYjAwNSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgMAorZHFsb2diMDA2IGxvZ2IgIDIgICAgICAgICAgICAgICAgIC0+ICAwCitkcWxvZ2IwMDcgbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAwOCBsb2diICAyLjUwICAgICAgICAgICAgICAtPiAgMAorZHFsb2diMDA5IGxvZ2IgIDIuNTAwICAgICAgICAgICAgIC0+ICAwCitkcWxvZ2IwMTAgbG9nYiAgMTAgICAgICAgICAgICAgICAgLT4gIDEKK2RxbG9nYjAxMSBsb2diICA3MCAgICAgICAgICAgICAgICAtPiAgMQorZHFsb2diMDEyIGxvZ2IgIDEwMCAgICAgICAgICAgICAgIC0+ICAyCitkcWxvZ2IwMTMgbG9nYiAgMjUwICAgICAgICAgICAgICAgLT4gIDIKK2RxbG9nYjAxNCBsb2diICA5RSs2MTQ0ICAgICAgICAgICAtPiAgNjE0NAorZHFsb2diMDE1IGxvZ2IgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBuZWdhdGl2ZXMgYXBwZWFyIHRvIGJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzCitkcWxvZ2IwMjEgbG9nYiAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2IwMjIgbG9nYiAtMUUtNjE3NiAgICAgICAgICAgLT4gLTYxNzYKK2RxbG9nYjAyMyBsb2diIC05RS02MTQzICAgICAgICAgICAtPiAtNjE0MworZHFsb2diMDI0IGxvZ2IgLTAuMDAxICAgICAgICAgICAgIC0+IC0zCitkcWxvZ2IwMjUgbG9nYiAtMSAgICAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAyNiBsb2diIC0yICAgICAgICAgICAgICAgICAtPiAgMAorZHFsb2diMDI3IGxvZ2IgLTEwICAgICAgICAgICAgICAgIC0+ICAxCitkcWxvZ2IwMjggbG9nYiAtNzAgICAgICAgICAgICAgICAgLT4gIDEKK2RxbG9nYjAyOSBsb2diIC0xMDAgICAgICAgICAgICAgICAtPiAgMgorZHFsb2diMDMwIGxvZ2IgLTlFKzYxNDQgICAgICAgICAgIC0+ICA2MTQ0CitkcWxvZ2IwMzEgbG9nYiAtSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIHplcm9zCitkcWxvZ2IxMTEgbG9nYiAgICAgICAgICAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2IxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2IxMTMgbG9nYiAgICAgICAwRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2IxMTQgbG9nYiAgICAgIC0wRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2IxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2IxMTYgbG9nYiAgICAtMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2IxMTcgbG9nYiAgICAgIDBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2IxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWxvZ2IxMjEgbG9nYiAgIDI2ODI2ODI2OCAgICAgICAgLT4gOAorZHFsb2diMTIyIGxvZ2IgIC0yNjgyNjgyNjggICAgICAgIC0+IDgKK2RxbG9nYjEyMyBsb2diICAgMTM0MTM0MTM0ICAgICAgICAtPiA4CitkcWxvZ2IxMjQgbG9nYiAgLTEzNDEzNDEzNCAgICAgICAgLT4gOAorCistLSBObWF4LCBObWluLCBOdGlueQorZHFsb2diMTMxIGxvZ2IgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDYxNDQKK2RxbG9nYjEzMiBsb2diICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IC02MTQzCitkcWxvZ2IxMzMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAtNjE0MworZHFsb2diMTM0IGxvZ2IgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gLTYxNzYKKworZHFsb2diMTM1IGxvZ2IgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTYxNzYKK2RxbG9nYjEzNiBsb2diICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC02MTQzCitkcWxvZ2IxMzcgbG9nYiAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAtNjE0MworZHFsb2diMTYxNCBsb2diICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA2MTQ0CisKKy0tIG9uZXMKK2RxbG9nYjAwNjEgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCitkcWxvZ2IwMDYyIGxvZ2IgIDEuMCAgICAgICAgICAgICAgIC0+ICAgMAorZHFsb2diMDA2MyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKKworLS0gbm90YWJsZSBjYXNlcyAtLSBleGFjdCBwb3dlcnMgb2YgMTAKK2RxbG9nYjExMDAgbG9nYiAxICAgICAgICAgICAgIC0+IDAKK2RxbG9nYjExMDEgbG9nYiAxMCAgICAgICAgICAgIC0+IDEKK2RxbG9nYjExMDIgbG9nYiAxMDAgICAgICAgICAgIC0+IDIKK2RxbG9nYjExMDMgbG9nYiAxMDAwICAgICAgICAgIC0+IDMKK2RxbG9nYjExMDQgbG9nYiAxMDAwMCAgICAgICAgIC0+IDQKK2RxbG9nYjExMDUgbG9nYiAxMDAwMDAgICAgICAgIC0+IDUKK2RxbG9nYjExMDYgbG9nYiAxMDAwMDAwICAgICAgIC0+IDYKK2RxbG9nYjExMDcgbG9nYiAxMDAwMDAwMCAgICAgIC0+IDcKK2RxbG9nYjExMDggbG9nYiAxMDAwMDAwMDAgICAgIC0+IDgKK2RxbG9nYjExMDkgbG9nYiAxMDAwMDAwMDAwICAgIC0+IDkKK2RxbG9nYjExMTAgbG9nYiAxMDAwMDAwMDAwMCAgIC0+IDEwCitkcWxvZ2IxMTExIGxvZ2IgMTAwMDAwMDAwMDAwICAtPiAxMQorZHFsb2diMTExMiBsb2diIDEwMDAwMDAwMDAwMDAgLT4gMTIKK2RxbG9nYjExMTMgbG9nYiAwLjAwMDAwMDAwMDAxIC0+IC0xMQorZHFsb2diMTExNCBsb2diIDAuMDAwMDAwMDAwMSAtPiAtMTAKK2RxbG9nYjExMTUgbG9nYiAwLjAwMDAwMDAwMSAtPiAtOQorZHFsb2diMTExNiBsb2diIDAuMDAwMDAwMDEgLT4gLTgKK2RxbG9nYjExMTcgbG9nYiAwLjAwMDAwMDEgLT4gLTcKK2RxbG9nYjExMTggbG9nYiAwLjAwMDAwMSAtPiAtNgorZHFsb2diMTExOSBsb2diIDAuMDAwMDEgLT4gLTUKK2RxbG9nYjExMjAgbG9nYiAwLjAwMDEgLT4gLTQKK2RxbG9nYjExMjEgbG9nYiAwLjAwMSAtPiAtMworZHFsb2diMTEyMiBsb2diIDAuMDEgLT4gLTIKK2RxbG9nYjExMjMgbG9nYiAwLjEgLT4gLTEKK2RxbG9nYjExMjQgbG9nYiAxRS05OSAgLT4gLTk5CitkcWxvZ2IxMTI1IGxvZ2IgMUUtMTAwIC0+IC0xMDAKK2RxbG9nYjExMjcgbG9nYiAxRS0yOTkgLT4gLTI5OQorZHFsb2diMTEyNiBsb2diIDFFLTYxNDMgLT4gLTYxNDMKKworLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQorZHFsb2diMTQwMCBsb2diIDEwRS0zICAgIC0+IC0yCitkcWxvZ2IxNDAxIGxvZ2IgMTBFLTIgICAgLT4gLTEKK2RxbG9nYjE0MDIgbG9nYiAxMDBFLTIgICAtPiAgMAorZHFsb2diMTQwMyBsb2diIDEwMDBFLTIgIC0+ICAxCitkcWxvZ2IxNDA0IGxvZ2IgMTAwMDBFLTIgLT4gIDIKK2RxbG9nYjE0MDUgbG9nYiAxMEUtMSAgICAtPiAgMAorZHFsb2diMTQwNiBsb2diIDEwMEUtMSAgIC0+ICAxCitkcWxvZ2IxNDA3IGxvZ2IgMTAwMEUtMSAgLT4gIDIKK2RxbG9nYjE0MDggbG9nYiAxMDAwMEUtMSAtPiAgMworZHFsb2diMTQwOSBsb2diIDEwRTAgICAgIC0+ICAxCitkcWxvZ2IxNDEwIGxvZ2IgMTAwRTAgICAgLT4gIDIKK2RxbG9nYjE0MTEgbG9nYiAxMDAwRTAgICAtPiAgMworZHFsb2diMTQxMiBsb2diIDEwMDAwRTAgIC0+ICA0CitkcWxvZ2IxNDEzIGxvZ2IgMTBFMSAgICAgLT4gIDIKK2RxbG9nYjE0MTQgbG9nYiAxMDBFMSAgICAtPiAgMworZHFsb2diMTQxNSBsb2diIDEwMDBFMSAgIC0+ICA0CitkcWxvZ2IxNDE2IGxvZ2IgMTAwMDBFMSAgLT4gIDUKK2RxbG9nYjE0MTcgbG9nYiAxMEUyICAgICAtPiAgMworZHFsb2diMTQxOCBsb2diIDEwMEUyICAgIC0+ICA0CitkcWxvZ2IxNDE5IGxvZ2IgMTAwMEUyICAgLT4gIDUKK2RxbG9nYjE0MjAgbG9nYiAxMDAwMEUyICAtPiAgNgorCistLSBzcGVjaWFsIHZhbHVlcworZHFsb2diODIwICBsb2diICAgSW5maW5pdHkgLT4gICBJbmZpbml0eQorZHFsb2diODIxICBsb2diICAgMCAgICAgICAgLT4gIC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWxvZ2I4MjIgIGxvZ2IgICBOYU4gICAgICAtPiAgIE5hTgorZHFsb2diODIzICBsb2diICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWxvZ2I4MjQgIGxvZ2IgICBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxbG9nYjgyNSAgbG9nYiAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbgorZHFsb2diODI2ICBsb2diICAgTmFONDU2ICAgLT4gICBOYU40NTYKK2RxbG9nYjgyNyAgbG9nYiAgIC1OYU42NTQgIC0+ICAtTmFONjU0CitkcWxvZ2I4MjggIGxvZ2IgICBOYU4xICAgICAtPiAgIE5hTjEKKworLS0gTnVsbCB0ZXN0CitkcWxvZ2I5MDAgIGxvZ2IgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXguZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXguZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJkNGJkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heC5kZWNUZXN0CkBAIC0wLDAgKzEsMzIyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTWF4LmRlY1Rlc3QgLS0gZGVjUXVhZCBtYXhudW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxbWF4MDAxIG1heCAgLTIgIC0yICAtPiAtMgorZHFtYXgwMDIgbWF4ICAtMiAgLTEgIC0+IC0xCitkcW1heDAwMyBtYXggIC0yICAgMCAgLT4gIDAKK2RxbWF4MDA0IG1heCAgLTIgICAxICAtPiAgMQorZHFtYXgwMDUgbWF4ICAtMiAgIDIgIC0+ICAyCitkcW1heDAwNiBtYXggIC0xICAtMiAgLT4gLTEKK2RxbWF4MDA3IG1heCAgLTEgIC0xICAtPiAtMQorZHFtYXgwMDggbWF4ICAtMSAgIDAgIC0+ICAwCitkcW1heDAwOSBtYXggIC0xICAgMSAgLT4gIDEKK2RxbWF4MDEwIG1heCAgLTEgICAyICAtPiAgMgorZHFtYXgwMTEgbWF4ICAgMCAgLTIgIC0+ICAwCitkcW1heDAxMiBtYXggICAwICAtMSAgLT4gIDAKK2RxbWF4MDEzIG1heCAgIDAgICAwICAtPiAgMAorZHFtYXgwMTQgbWF4ICAgMCAgIDEgIC0+ICAxCitkcW1heDAxNSBtYXggICAwICAgMiAgLT4gIDIKK2RxbWF4MDE2IG1heCAgIDEgIC0yICAtPiAgMQorZHFtYXgwMTcgbWF4ICAgMSAgLTEgIC0+ICAxCitkcW1heDAxOCBtYXggICAxICAgMCAgLT4gIDEKK2RxbWF4MDE5IG1heCAgIDEgICAxICAtPiAgMQorZHFtYXgwMjAgbWF4ICAgMSAgIDIgIC0+ICAyCitkcW1heDAyMSBtYXggICAyICAtMiAgLT4gIDIKK2RxbWF4MDIyIG1heCAgIDIgIC0xICAtPiAgMgorZHFtYXgwMjMgbWF4ICAgMiAgIDAgIC0+ICAyCitkcW1heDAyNSBtYXggICAyICAgMSAgLT4gIDIKK2RxbWF4MDI2IG1heCAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZHFtYXgwMzAgbWF4ICAgMCAgICAgMCAgIC0+ICAwCitkcW1heDAzMSBtYXggICAwICAgIC0wICAgLT4gIDAKK2RxbWF4MDMyIG1heCAgIDAgICAgLTAuMCAtPiAgMAorZHFtYXgwMzMgbWF4ICAgMCAgICAgMC4wIC0+ICAwCitkcW1heDAzNCBtYXggIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4KK2RxbWF4MDM1IG1heCAgLTAgICAgLTAgICAtPiAtMAorZHFtYXgwMzYgbWF4ICAtMCAgICAtMC4wIC0+IC0wLjAKK2RxbWF4MDM3IG1heCAgLTAgICAgIDAuMCAtPiAgMC4wCitkcW1heDAzOCBtYXggICAwLjAgICAwICAgLT4gIDAKK2RxbWF4MDM5IG1heCAgIDAuMCAgLTAgICAtPiAgMC4wCitkcW1heDA0MCBtYXggICAwLjAgIC0wLjAgLT4gIDAuMAorZHFtYXgwNDEgbWF4ICAgMC4wICAgMC4wIC0+ICAwLjAKK2RxbWF4MDQyIG1heCAgLTAuMCAgIDAgICAtPiAgMAorZHFtYXgwNDMgbWF4ICAtMC4wICAtMCAgIC0+IC0wLjAKK2RxbWF4MDQ0IG1heCAgLTAuMCAgLTAuMCAtPiAtMC4wCitkcW1heDA0NSBtYXggIC0wLjAgICAwLjAgLT4gIDAuMAorCitkcW1heDA1MCBtYXggIC0wRTEgICAwRTEgLT4gIDBFKzEKK2RxbWF4MDUxIG1heCAgLTBFMiAgIDBFMiAtPiAgMEUrMgorZHFtYXgwNTIgbWF4ICAtMEUyICAgMEUxIC0+ICAwRSsxCitkcW1heDA1MyBtYXggIC0wRTEgICAwRTIgLT4gIDBFKzIKK2RxbWF4MDU0IG1heCAgIDBFMSAgLTBFMSAtPiAgMEUrMQorZHFtYXgwNTUgbWF4ICAgMEUyICAtMEUyIC0+ICAwRSsyCitkcW1heDA1NiBtYXggICAwRTIgIC0wRTEgLT4gIDBFKzIKK2RxbWF4MDU3IG1heCAgIDBFMSAgLTBFMiAtPiAgMEUrMQorCitkcW1heDA1OCBtYXggICAwRTEgICAwRTEgLT4gIDBFKzEKK2RxbWF4MDU5IG1heCAgIDBFMiAgIDBFMiAtPiAgMEUrMgorZHFtYXgwNjAgbWF4ICAgMEUyICAgMEUxIC0+ICAwRSsyCitkcW1heDA2MSBtYXggICAwRTEgICAwRTIgLT4gIDBFKzIKK2RxbWF4MDYyIG1heCAgLTBFMSAgLTBFMSAtPiAtMEUrMQorZHFtYXgwNjMgbWF4ICAtMEUyICAtMEUyIC0+IC0wRSsyCitkcW1heDA2NCBtYXggIC0wRTIgIC0wRTEgLT4gLTBFKzEKK2RxbWF4MDY1IG1heCAgLTBFMSAgLTBFMiAtPiAtMEUrMQorCistLSBTcGVjaWFscworZHFtYXgwOTAgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MDkxIG1heCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcW1heDA5MiBtYXggIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTMgbWF4ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxbWF4MDk0IG1heCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcW1heDA5NSBtYXggIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTYgbWF4ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RxbWF4MDk3IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDA5OCBtYXggLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTkgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MTAwIG1heCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDEwMSBtYXggLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMDIgbWF4ICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MTAzIG1heCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDEwNCBtYXggIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMDUgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtYXgxMjAgbWF4IC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWF4MTIxIG1heCAtSW5mICAtMTAwMCAgLT4gLTEwMDAKK2RxbWF4MTIyIG1heCAtSW5mICAtMSAgICAgLT4gLTEKK2RxbWF4MTIzIG1heCAtSW5mICAtMCAgICAgLT4gLTAKK2RxbWF4MTI0IG1heCAtSW5mICAgMCAgICAgLT4gIDAKK2RxbWF4MTI1IG1heCAtSW5mICAgMSAgICAgLT4gIDEKK2RxbWF4MTI2IG1heCAtSW5mICAgMTAwMCAgLT4gIDEwMDAKK2RxbWF4MTI3IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDEyOCBtYXggLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RxbWF4MTI5IG1heCAtMTAwMCAtSW5mICAgLT4gIC0xMDAwCitkcW1heDEzMCBtYXggLTEgICAgLUluZiAgIC0+ICAtMQorZHFtYXgxMzEgbWF4IC0wICAgIC1JbmYgICAtPiAgLTAKK2RxbWF4MTMyIG1heCAgMCAgICAtSW5mICAgLT4gIDAKK2RxbWF4MTMzIG1heCAgMSAgICAtSW5mICAgLT4gIDEKK2RxbWF4MTM0IG1heCAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2RxbWF4MTM1IG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZHFtYXgxNDEgbWF4ICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkKK2RxbWF4MTQyIG1heCAgTmFOIC0xMDAwICAgLT4gLTEwMDAKK2RxbWF4MTQzIG1heCAgTmFOIC0xICAgICAgLT4gLTEKK2RxbWF4MTQ0IG1heCAgTmFOIC0wICAgICAgLT4gLTAKK2RxbWF4MTQ1IG1heCAgTmFOICAwICAgICAgLT4gIDAKK2RxbWF4MTQ2IG1heCAgTmFOICAxICAgICAgLT4gIDEKK2RxbWF4MTQ3IG1heCAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RxbWF4MTQ4IG1heCAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkcW1heDE0OSBtYXggIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxbWF4MTUwIG1heCAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkcW1heDE1MSBtYXggLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkcW1heDE1MiBtYXggLTEgICAgTmFOICAgIC0+IC0xCitkcW1heDE1MyBtYXggLTAgICAgTmFOICAgIC0+IC0wCitkcW1heDE1NCBtYXggIDAgICAgTmFOICAgIC0+ICAwCitkcW1heDE1NSBtYXggIDEgICAgTmFOICAgIC0+ICAxCitkcW1heDE1NiBtYXggIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkcW1heDE1NyBtYXggIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkcW1heDE2MSBtYXggIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE2MiBtYXggIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE2MyBtYXggIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE2NCBtYXggIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE2NSBtYXggIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE2NiBtYXggIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE2NyBtYXggIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE2OCBtYXggIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE2OSBtYXggIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3MCBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3MSBtYXggLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3MiBtYXggLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3MyBtYXggLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3NCBtYXggLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3NSBtYXggIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3NiBtYXggIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3NyBtYXggIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3OCBtYXggIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE3OSBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxbWF4MTgxIG1heCAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtYXgxODIgbWF4ICBOYU44ICAgICA5ICAgLT4gIDkKK2RxbWF4MTgzIG1heCAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW1heDE4NCBtYXggLU5hTjEgICBOYU4xMSAtPiAtTmFOMQorZHFtYXgxODUgbWF4ICBOYU4yICAgTmFOMTIgLT4gIE5hTjIKK2RxbWF4MTg2IG1heCAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMworZHFtYXgxODcgbWF4ICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0CisKK2RxbWF4MTg4IG1heCAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQorZHFtYXgxODkgbWF4IC05ICAgICAtTmFOMyAgLT4gLTkKK2RxbWF4MTkwIG1heCAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkcW1heDE5MSBtYXggIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTIgbWF4ICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTkzIG1heCAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5NCBtYXggIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTUgbWF4ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTk2IG1heCAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5NyBtYXggIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTggbWF4ICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTk5IG1heCAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RxbWF4MjIxIG1heCAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMAorZHFtYXgyMjIgbWF4IDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitkcW1heDIyMyBtYXggMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMAorZHFtYXgyMjQgbWF4IDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK2RxbWF4MjI1IG1heCAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwCitkcW1heDIyNiBtYXggMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorZHFtYXgyMjcgbWF4IDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTEKK2RxbWF4MjI4IG1heCAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitkcW1heDIyOSBtYXggMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDEKK2RxbWF4MjMwIG1heCAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorZHFtYXgyMzEgbWF4IDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYKK2RxbWF4MjMyIG1heCAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CitkcW1heDIzMyBtYXggLTEyMzQ1Njc4OTEgIDEgLT4gMQorZHFtYXgyMzQgbWF4IDEgLTEyMzQ1Njc4OTEgIC0+IDEKK2RxbWF4MjM1IG1heCAtMTIzNDU2Nzg5MDEgMSAtPiAxCitkcW1heDIzNiBtYXggMSAtMTIzNDU2Nzg5MDEgLT4gMQorZHFtYXgyMzcgbWF4IC0xMjM0NTY3ODk2ICAxIC0+IDEKK2RxbWF4MjM4IG1heCAxIC0xMjM0NTY3ODk2ICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK2RxbWF4MjgwIG1heCAnMycgICAnMicgIC0+ICAnMycKK2RxbWF4MjgxIG1heCAnLTEwJyAnMycgIC0+ICAnMycKK2RxbWF4MjgyIG1heCAnMS4wJyAnMScgIC0+ICAnMScKK2RxbWF4MjgzIG1heCAnMScgJzEuMCcgIC0+ICAnMScKK2RxbWF4Mjg0IG1heCAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkcW1heDQwMSBtYXggIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQorZHFtYXg0MDIgbWF4ICAxLjEgICAgMSAgICAgICAtPiAgMS4xCitkcW1heDQwMyBtYXggIDEgICAgICAxLjAgICAgIC0+ICAxCitkcW1heDQwNCBtYXggIDEuMCAgICAwLjEgICAgIC0+ICAxLjAKK2RxbWF4NDA1IG1heCAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQorZHFtYXg0MDYgbWF4ICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAorZHFtYXg0MDcgbWF4ICAwLjEwICAgMCAgICAgICAtPiAgMC4xMAorZHFtYXg0MDggbWF4ICAwICAgICAgMC4wICAgICAtPiAgMAorZHFtYXg0MDkgbWF4ICAwLjAgICAtMCAgICAgICAtPiAgMC4wCitkcW1heDQxMCBtYXggIDAuMCAgIC0wLjAgICAgIC0+ICAwLjAKK2RxbWF4NDExIG1heCAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDAKK2RxbWF4NDEyIG1heCAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAorZHFtYXg0MTMgbWF4ICAwICAgICAtMC4wICAgICAtPiAgMAorZHFtYXg0MTQgbWF4ICAwICAgICAtMCAgICAgICAtPiAgMAorZHFtYXg0MTUgbWF4IC0wLjAgICAtMCAgICAgICAtPiAtMC4wCitkcW1heDQxNiBtYXggLTAgICAgIC0wLjEwMCAgIC0+IC0wCitkcW1heDQxNyBtYXggLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwMAorZHFtYXg0MTggbWF4IC0wLjEwICAtMC4xICAgICAtPiAtMC4xMAorZHFtYXg0MTkgbWF4IC0wLjEgICAtMS4wICAgICAtPiAtMC4xCitkcW1heDQyMCBtYXggLTEuMCAgIC0xICAgICAgIC0+IC0xLjAKK2RxbWF4NDIxIG1heCAtMSAgICAgLTEuMSAgICAgLT4gLTEKK2RxbWF4NDIzIG1heCAtMS4xICAgLUluZiAgICAgLT4gLTEuMQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkcW1heDQzMSBtYXggIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQorZHFtYXg0MzIgbWF4ICAxICAgICAgMS4xICAgICAtPiAgMS4xCitkcW1heDQzMyBtYXggIDEuMCAgICAxICAgICAgIC0+ICAxCitkcW1heDQzNCBtYXggIDAuMSAgICAxLjAgICAgIC0+ICAxLjAKK2RxbWF4NDM1IG1heCAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQorZHFtYXg0MzYgbWF4ICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMAorZHFtYXg0MzcgbWF4ICAwICAgICAgMC4xMCAgICAtPiAgMC4xMAorZHFtYXg0MzggbWF4ICAwLjAgICAgMCAgICAgICAtPiAgMAorZHFtYXg0MzkgbWF4IC0wICAgICAgMC4wICAgICAtPiAgMC4wCitkcW1heDQ0MCBtYXggLTAuMCAgICAwLjAgICAgIC0+ICAwLjAKK2RxbWF4NDQxIG1heCAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDAKK2RxbWF4NDQyIG1heCAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMAorZHFtYXg0NDMgbWF4IC0wLjAgICAgMCAgICAgICAtPiAgMAorZHFtYXg0NDQgbWF4IC0wICAgICAgMCAgICAgICAtPiAgMAorZHFtYXg0NDUgbWF4IC0wICAgICAtMC4wICAgICAtPiAtMC4wCitkcW1heDQ0NiBtYXggLTAuMTAwIC0wICAgICAgIC0+IC0wCitkcW1heDQ0NyBtYXggLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZHFtYXg0NDggbWF4IC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMAorZHFtYXg0NDkgbWF4IC0xLjAgICAtMC4xICAgICAtPiAtMC4xCitkcW1heDQ1MCBtYXggLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKK2RxbWF4NDUxIG1heCAtMS4xICAgLTEgICAgICAgLT4gLTEKK2RxbWF4NDUzIG1heCAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQorLS0gbGFyZ2llcworZHFtYXg0NjAgbWF4ICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMworZHFtYXg0NjEgbWF4ICAxRSszICAgMTAwMCAgICAtPiAgMUUrMworZHFtYXg0NjIgbWF4ICAxMDAwICAtMUUrMyAgICAtPiAgMTAwMAorZHFtYXg0NjMgbWF4ICAxRSszICAtMTAwMCAgICAtPiAgMUUrMworZHFtYXg0NjQgbWF4IC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMworZHFtYXg0NjUgbWF4IC0xRSszICAgMTAwMCAgICAtPiAgMTAwMAorZHFtYXg0NjYgbWF4IC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMAorZHFtYXg0NjcgbWF4IC0xRSszICAtMTAwMCAgICAtPiAtMTAwMAorCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK2RxbWF4NDcxIG1heCAgICAgIDEuMCAgICAgICAwLjEgIC0+IDEuMAorZHFtYXg0NzIgbWF4ICAgICAgMC4xICAgICAgIDEuMCAgLT4gMS4wCitkcW1heDQ3MyBtYXggICAgIDEwLjAgICAgICAgMC4xICAtPiAxMC4wCitkcW1heDQ3NCBtYXggICAgICAwLjEgICAgICAxMC4wICAtPiAxMC4wCitkcW1heDQ3NSBtYXggICAgICAxMDAgICAgICAgMS4wICAtPiAxMDAKK2RxbWF4NDc2IG1heCAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEwMAorZHFtYXg0NzcgbWF4ICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAwMAorZHFtYXg0NzggbWF4ICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAwMAorZHFtYXg0NzkgbWF4ICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwMDAKK2RxbWF4NDgwIG1heCAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMDAwCitkcW1heDQ4MSBtYXggICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwMDAKK2RxbWF4NDgyIG1heCAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAwMAorZHFtYXg0ODMgbWF4ICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAwMAorZHFtYXg0ODQgbWF4ICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAwMAorCistLSBzdWJub3JtYWxzCitkcW1heDUxMCBtYXggIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAxLjAwRS02MTQzCitkcW1heDUxMSBtYXggIDAuMUUtNjE0MyAgICAgICAgMCAgLT4gICAxRS02MTQ0ICAgIFN1Ym5vcm1hbAorZHFtYXg1MTIgbWF4ICAwLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wRS02MTQ0ICBTdWJub3JtYWwKK2RxbWF4NTEzIG1heCAgMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDEuMDBFLTYxNDQgU3Vibm9ybWFsCitkcW1heDUxNCBtYXggIDAuMDFFLTYxNDMgICAgICAgMCAgLT4gICAxRS02MTQ1ICAgIFN1Ym5vcm1hbAorZHFtYXg1MTUgbWF4ICAwLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgOS45OUUtNjE0NCBTdWJub3JtYWwKK2RxbWF4NTE2IG1heCAgMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDkuOUUtNjE0NSAgU3Vibm9ybWFsCitkcW1heDUxNyBtYXggIDAuMDA5RS02MTQzICAgICAgMCAgLT4gICA5RS02MTQ2ICAgIFN1Ym5vcm1hbAorZHFtYXg1MTggbWF4ICAwLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMUUtNjE0NiAgICBTdWJub3JtYWwKK2RxbWF4NTE5IG1heCAgMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDlFLTYxNDcgICAgU3Vibm9ybWFsCitkcW1heDUyMCBtYXggIDAuMDAwMUUtNjE0MyAgICAgMCAgLT4gICAxRS02MTQ3ICAgIFN1Ym5vcm1hbAorCitkcW1heDUzMCBtYXggLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1heDUzMSBtYXggLTAuMUUtNjE0MyAgICAgICAgMCAgLT4gICAwCitkcW1heDUzMiBtYXggLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1heDUzMyBtYXggLTAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1heDUzNCBtYXggLTAuMDFFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1heDUzNSBtYXggLTAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1heDUzNiBtYXggLTAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1heDUzNyBtYXggLTAuMDA5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1heDUzOCBtYXggLTAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1heDUzOSBtYXggLTAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwCitkcW1heDU0MCBtYXggLTAuMDAwMUUtNjE0MyAgICAgMCAgLT4gICAwCisKKy0tIE51bGwgdGVzdHMKK2RxbWF4OTAwIG1heCAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDkwMSBtYXggICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heE1hZy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heE1hZy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MjFlODAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4TWFnLmRlY1Rlc3QKQEAgLTAsMCArMSwzMDQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNYXhNYWcuZGVjVGVzdCAtLSBkZWNRdWFkIG1heG51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFteGcwMDEgbWF4bWFnICAtMiAgLTIgIC0+IC0yCitkcW14ZzAwMiBtYXhtYWcgIC0yICAtMSAgLT4gLTIKK2RxbXhnMDAzIG1heG1hZyAgLTIgICAwICAtPiAtMgorZHFteGcwMDQgbWF4bWFnICAtMiAgIDEgIC0+IC0yCitkcW14ZzAwNSBtYXhtYWcgIC0yICAgMiAgLT4gIDIKK2RxbXhnMDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMgorZHFteGcwMDcgbWF4bWFnICAtMSAgLTEgIC0+IC0xCitkcW14ZzAwOCBtYXhtYWcgIC0xICAgMCAgLT4gLTEKK2RxbXhnMDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQorZHFteGcwMTAgbWF4bWFnICAtMSAgIDIgIC0+ICAyCitkcW14ZzAxMSBtYXhtYWcgICAwICAtMiAgLT4gLTIKK2RxbXhnMDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQorZHFteGcwMTMgbWF4bWFnICAgMCAgIDAgIC0+ICAwCitkcW14ZzAxNCBtYXhtYWcgICAwICAgMSAgLT4gIDEKK2RxbXhnMDE1IG1heG1hZyAgIDAgICAyICAtPiAgMgorZHFteGcwMTYgbWF4bWFnICAgMSAgLTIgIC0+IC0yCitkcW14ZzAxNyBtYXhtYWcgICAxICAtMSAgLT4gIDEKK2RxbXhnMDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQorZHFteGcwMTkgbWF4bWFnICAgMSAgIDEgIC0+ICAxCitkcW14ZzAyMCBtYXhtYWcgICAxICAgMiAgLT4gIDIKK2RxbXhnMDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMgorZHFteGcwMjIgbWF4bWFnICAgMiAgLTEgIC0+ICAyCitkcW14ZzAyMyBtYXhtYWcgICAyICAgMCAgLT4gIDIKK2RxbXhnMDI1IG1heG1hZyAgIDIgICAxICAtPiAgMgorZHFteGcwMjYgbWF4bWFnICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcW14ZzAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDAKK2RxbXhnMDMxIG1heG1hZyAgIDAgICAgLTAgICAtPiAgMAorZHFteGcwMzIgbWF4bWFnICAgMCAgICAtMC4wIC0+ICAwCitkcW14ZzAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDAKK2RxbXhnMDM0IG1heG1hZyAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgorZHFteGcwMzUgbWF4bWFnICAtMCAgICAtMCAgIC0+IC0wCitkcW14ZzAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMAorZHFteGcwMzcgbWF4bWFnICAtMCAgICAgMC4wIC0+ICAwLjAKK2RxbXhnMDM4IG1heG1hZyAgIDAuMCAgIDAgICAtPiAgMAorZHFteGcwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjAKK2RxbXhnMDQwIG1heG1hZyAgIDAuMCAgLTAuMCAtPiAgMC4wCitkcW14ZzA0MSBtYXhtYWcgICAwLjAgICAwLjAgLT4gIDAuMAorZHFteGcwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwCitkcW14ZzA0MyBtYXhtYWcgIC0wLjAgIC0wICAgLT4gLTAuMAorZHFteGcwNDQgbWF4bWFnICAtMC4wICAtMC4wIC0+IC0wLjAKK2RxbXhnMDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wCisKK2RxbXhnMDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQorZHFteGcwNTEgbWF4bWFnICAtMEUyICAgMEUyIC0+ICAwRSsyCitkcW14ZzA1MiBtYXhtYWcgIC0wRTIgICAwRTEgLT4gIDBFKzEKK2RxbXhnMDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMgorZHFteGcwNTQgbWF4bWFnICAgMEUxICAtMEUxIC0+ICAwRSsxCitkcW14ZzA1NSBtYXhtYWcgICAwRTIgIC0wRTIgLT4gIDBFKzIKK2RxbXhnMDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMgorZHFteGcwNTcgbWF4bWFnICAgMEUxICAtMEUyIC0+ICAwRSsxCisKK2RxbXhnMDU4IG1heG1hZyAgIDBFMSAgIDBFMSAtPiAgMEUrMQorZHFteGcwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyCitkcW14ZzA2MCBtYXhtYWcgICAwRTIgICAwRTEgLT4gIDBFKzIKK2RxbXhnMDYxIG1heG1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMgorZHFteGcwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxCitkcW14ZzA2MyBtYXhtYWcgIC0wRTIgIC0wRTIgLT4gLTBFKzIKK2RxbXhnMDY0IG1heG1hZyAgLTBFMiAgLTBFMSAtPiAtMEUrMQorZHFteGcwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxCisKKy0tIFNwZWNpYWxzCitkcW14ZzA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFteGcwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RxbXhnMDkyIG1heG1hZyAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcW14ZzA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHFteGcwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxbXhnMDk1IG1heG1hZyAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcW14ZzA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFteGcwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMDk4IG1heG1hZyAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTAxIG1heG1hZyAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTA0IG1heG1hZyAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW14ZzEyMCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMjEgbWF4bWFnIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxbXhnMTIyIG1heG1hZyAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcW14ZzEyMyBtYXhtYWcgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFteGcxMjQgbWF4bWFnIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RxbXhnMTI1IG1heG1hZyAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcW14ZzEyNiBtYXhtYWcgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFteGcxMjcgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTI4IG1heG1hZyAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQorZHFteGcxMjkgbWF4bWFnIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMzIgbWF4bWFnICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMzUgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCitkcW14ZzE0MSBtYXhtYWcgIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQorZHFteGcxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMAorZHFteGcxNDMgbWF4bWFnICBOYU4gLTEgICAgICAtPiAtMQorZHFteGcxNDQgbWF4bWFnICBOYU4gLTAgICAgICAtPiAtMAorZHFteGcxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMAorZHFteGcxNDYgbWF4bWFnICBOYU4gIDEgICAgICAtPiAgMQorZHFteGcxNDcgbWF4bWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZHFteGcxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RxbXhnMTQ5IG1heG1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFteGcxNTAgbWF4bWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RxbXhnMTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RxbXhnMTUyIG1heG1hZyAtMSAgICBOYU4gICAgLT4gLTEKK2RxbXhnMTUzIG1heG1hZyAtMCAgICBOYU4gICAgLT4gLTAKK2RxbXhnMTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDAKK2RxbXhnMTU1IG1heG1hZyAgMSAgICBOYU4gICAgLT4gIDEKK2RxbXhnMTU2IG1heG1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RxbXhnMTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RxbXhnMTYxIG1heG1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY0IG1heG1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY3IG1heG1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTcwIG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTczIG1heG1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc2IG1heG1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTc5IG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFteGcxODEgbWF4bWFnICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQorZHFteGcxODMgbWF4bWFnIC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbXhnMTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCitkcW14ZzE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMgorZHFteGcxODYgbWF4bWFnIC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzCitkcW14ZzE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKKworZHFteGcxODggbWF4bWFnIC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5CitkcW14ZzE4OSBtYXhtYWcgLTkgICAgIC1OYU4zICAtPiAtOQorZHFteGcxOTAgbWF4bWFnICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RxbXhnMTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5MiBtYXhtYWcgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTMgbWF4bWFnIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5NSBtYXhtYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTYgbWF4bWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5OCBtYXhtYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTkgbWF4bWFnICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZHFteGcyMjEgbWF4bWFnIDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwCitkcW14ZzIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK2RxbXhnMjIzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCitkcW14ZzIyNCBtYXhtYWcgMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorZHFteGcyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKK2RxbXhnMjI2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitkcW14ZzIyNyBtYXhtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQorZHFteGcyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK2RxbXhnMjI5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQorZHFteGcyMzAgbWF4bWFnIDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCitkcW14ZzIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgorZHFteGcyMzIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKK2RxbXhnMjMzIG1heG1hZyAtMTIzNDU2Nzg5MSAgMSAtPiAtMTIzNDU2Nzg5MQorZHFteGcyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxCitkcW14ZzIzNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEyMzQ1Njc4OTAxCitkcW14ZzIzNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEyMzQ1Njc4OTAxCitkcW14ZzIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYKK2RxbXhnMjM4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMTIzNDU2Nzg5NgorCistLSBmcm9tIGV4YW1wbGVzCitkcW14ZzI4MCBtYXhtYWcgJzMnICAgJzInICAtPiAgJzMnCitkcW14ZzI4MSBtYXhtYWcgJy0xMCcgJzMnICAtPiAgJy0xMCcKK2RxbXhnMjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScKK2RxbXhnMjgzIG1heG1hZyAnMScgJzEuMCcgIC0+ICAnMScKK2RxbXhnMjg0IG1heG1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkcW14ZzQwMSBtYXhtYWcgIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQorZHFteGc0MDIgbWF4bWFnICAxLjEgICAgMSAgICAgICAtPiAgMS4xCitkcW14ZzQwMyBtYXhtYWcgIDEgICAgICAxLjAgICAgIC0+ICAxCitkcW14ZzQwNCBtYXhtYWcgIDEuMCAgICAwLjEgICAgIC0+ICAxLjAKK2RxbXhnNDA1IG1heG1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQorZHFteGc0MDYgbWF4bWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAorZHFteGc0MDcgbWF4bWFnICAwLjEwICAgMCAgICAgICAtPiAgMC4xMAorZHFteGc0MDggbWF4bWFnICAwICAgICAgMC4wICAgICAtPiAgMAorZHFteGc0MDkgbWF4bWFnICAwLjAgICAtMCAgICAgICAtPiAgMC4wCitkcW14ZzQxMCBtYXhtYWcgIDAuMCAgIC0wLjAgICAgIC0+ICAwLjAKK2RxbXhnNDExIG1heG1hZyAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDAKK2RxbXhnNDEyIG1heG1hZyAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAorZHFteGc0MTMgbWF4bWFnICAwICAgICAtMC4wICAgICAtPiAgMAorZHFteGc0MTQgbWF4bWFnICAwICAgICAtMCAgICAgICAtPiAgMAorZHFteGc0MTUgbWF4bWFnIC0wLjAgICAtMCAgICAgICAtPiAtMC4wCitkcW14ZzQxNiBtYXhtYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZHFteGc0MTcgbWF4bWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK2RxbXhnNDE4IG1heG1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK2RxbXhnNDE5IG1heG1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTEuMAorZHFteGc0MjAgbWF4bWFnIC0xLjAgICAtMSAgICAgICAtPiAtMS4wCitkcW14ZzQyMSBtYXhtYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKK2RxbXhnNDIzIG1heG1hZyAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5CistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RxbXhnNDMxIG1heG1hZyAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5CitkcW14ZzQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjEKK2RxbXhnNDMzIG1heG1hZyAgMS4wICAgIDEgICAgICAgLT4gIDEKK2RxbXhnNDM0IG1heG1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAorZHFteGc0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xCitkcW14ZzQzNiBtYXhtYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwCitkcW14ZzQzNyBtYXhtYWcgIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCitkcW14ZzQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwCitkcW14ZzQzOSBtYXhtYWcgLTAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RxbXhnNDQwIG1heG1hZyAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAorZHFteGc0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAorZHFteGc0NDIgbWF4bWFnIC0wLjAwICAgMC4wICAgICAtPiAgMC4wCitkcW14ZzQ0MyBtYXhtYWcgLTAuMCAgICAwICAgICAgIC0+ICAwCitkcW14ZzQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwCitkcW14ZzQ0NSBtYXhtYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbXhnNDQ2IG1heG1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwCitkcW14ZzQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZHFteGc0NDggbWF4bWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMAorZHFteGc0NDkgbWF4bWFnIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCitkcW14ZzQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKK2RxbXhnNDUxIG1heG1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEuMQorZHFteGc0NTMgbWF4bWFnIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkKKy0tIGxhcmdpZXMKK2RxbXhnNDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RxbXhnNDYxIG1heG1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMKK2RxbXhnNDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK2RxbXhnNDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK2RxbXhnNDY0IG1heG1hZyAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RxbXhnNDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RxbXhnNDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK2RxbXhnNDY3IG1heG1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKKworLS0gc3Vibm9ybWFscworZHFteGc1MTAgbWF4bWFnICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wMEUtNjE0MworZHFteGc1MTEgbWF4bWFnICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMUUtNjE0NCAgICBTdWJub3JtYWwKK2RxbXhnNTEyIG1heG1hZyAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcW14ZzUxMyBtYXhtYWcgIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAxLjAwRS02MTQ0IFN1Ym5vcm1hbAorZHFteGc1MTQgbWF4bWFnICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMUUtNjE0NSAgICBTdWJub3JtYWwKK2RxbXhnNTE1IG1heG1hZyAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDkuOTlFLTYxNDQgU3Vibm9ybWFsCitkcW14ZzUxNiBtYXhtYWcgIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICA5LjlFLTYxNDUgIFN1Ym5vcm1hbAorZHFteGc1MTcgbWF4bWFnICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgOUUtNjE0NiAgICBTdWJub3JtYWwKK2RxbXhnNTE4IG1heG1hZyAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDFFLTYxNDYgICAgU3Vibm9ybWFsCitkcW14ZzUxOSBtYXhtYWcgIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICA5RS02MTQ3ICAgIFN1Ym5vcm1hbAorZHFteGc1MjAgbWF4bWFnICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMUUtNjE0NyAgICBTdWJub3JtYWwKKworZHFteGc1MzAgbWF4bWFnIC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAtMS4wMEUtNjE0MworZHFteGc1MzEgbWF4bWFnIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwKK2RxbXhnNTMyIG1heG1hZyAtMC4xMEUtNjE0MyAgICAgICAwICAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcW14ZzUzMyBtYXhtYWcgLTAuMTAwRS02MTQzICAgICAgMCAgLT4gIC0xLjAwRS02MTQ0IFN1Ym5vcm1hbAorZHFteGc1MzQgbWF4bWFnIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAtMUUtNjE0NSAgICBTdWJub3JtYWwKK2RxbXhnNTM1IG1heG1hZyAtMC45OTlFLTYxNDMgICAgICAwICAtPiAgLTkuOTlFLTYxNDQgU3Vibm9ybWFsCitkcW14ZzUzNiBtYXhtYWcgLTAuMDk5RS02MTQzICAgICAgMCAgLT4gIC05LjlFLTYxNDUgIFN1Ym5vcm1hbAorZHFteGc1MzcgbWF4bWFnIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAtOUUtNjE0NiAgICBTdWJub3JtYWwKK2RxbXhnNTM4IG1heG1hZyAtMC4wMDFFLTYxNDMgICAgICAwICAtPiAgLTFFLTYxNDYgICAgU3Vibm9ybWFsCitkcW14ZzUzOSBtYXhtYWcgLTAuMDAwOUUtNjE0MyAgICAgMCAgLT4gIC05RS02MTQ3ICAgIFN1Ym5vcm1hbAorZHFteGc1NDAgbWF4bWFnIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAtMUUtNjE0NyAgICBTdWJub3JtYWwKKworLS0gTnVsbCB0ZXN0cworZHFteGc5MDAgbWF4bWFnIDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnOTAxIG1heG1hZyAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW4uZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW4uZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODdmNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbi5kZWNUZXN0CkBAIC0wLDAgKzEsMzA5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTWluLmRlY1Rlc3QgLS0gZGVjUXVhZCBtaW5udW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxbWluMDAxIG1pbiAgLTIgIC0yICAtPiAtMgorZHFtaW4wMDIgbWluICAtMiAgLTEgIC0+IC0yCitkcW1pbjAwMyBtaW4gIC0yICAgMCAgLT4gLTIKK2RxbWluMDA0IG1pbiAgLTIgICAxICAtPiAtMgorZHFtaW4wMDUgbWluICAtMiAgIDIgIC0+IC0yCitkcW1pbjAwNiBtaW4gIC0xICAtMiAgLT4gLTIKK2RxbWluMDA3IG1pbiAgLTEgIC0xICAtPiAtMQorZHFtaW4wMDggbWluICAtMSAgIDAgIC0+IC0xCitkcW1pbjAwOSBtaW4gIC0xICAgMSAgLT4gLTEKK2RxbWluMDEwIG1pbiAgLTEgICAyICAtPiAtMQorZHFtaW4wMTEgbWluICAgMCAgLTIgIC0+IC0yCitkcW1pbjAxMiBtaW4gICAwICAtMSAgLT4gLTEKK2RxbWluMDEzIG1pbiAgIDAgICAwICAtPiAgMAorZHFtaW4wMTQgbWluICAgMCAgIDEgIC0+ICAwCitkcW1pbjAxNSBtaW4gICAwICAgMiAgLT4gIDAKK2RxbWluMDE2IG1pbiAgIDEgIC0yICAtPiAtMgorZHFtaW4wMTcgbWluICAgMSAgLTEgIC0+IC0xCitkcW1pbjAxOCBtaW4gICAxICAgMCAgLT4gIDAKK2RxbWluMDE5IG1pbiAgIDEgICAxICAtPiAgMQorZHFtaW4wMjAgbWluICAgMSAgIDIgIC0+ICAxCitkcW1pbjAyMSBtaW4gICAyICAtMiAgLT4gLTIKK2RxbWluMDIyIG1pbiAgIDIgIC0xICAtPiAtMQorZHFtaW4wMjMgbWluICAgMiAgIDAgIC0+ICAwCitkcW1pbjAyNSBtaW4gICAyICAgMSAgLT4gIDEKK2RxbWluMDI2IG1pbiAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZHFtaW4wMzAgbWluICAgMCAgICAgMCAgIC0+ICAwCitkcW1pbjAzMSBtaW4gICAwICAgIC0wICAgLT4gLTAKK2RxbWluMDMyIG1pbiAgIDAgICAgLTAuMCAtPiAtMC4wCitkcW1pbjAzMyBtaW4gICAwICAgICAwLjAgLT4gIDAuMAorZHFtaW4wMzQgbWluICAtMCAgICAgMCAgIC0+IC0wCitkcW1pbjAzNSBtaW4gIC0wICAgIC0wICAgLT4gLTAKK2RxbWluMDM2IG1pbiAgLTAgICAgLTAuMCAtPiAtMAorZHFtaW4wMzcgbWluICAtMCAgICAgMC4wIC0+IC0wCitkcW1pbjAzOCBtaW4gICAwLjAgICAwICAgLT4gIDAuMAorZHFtaW4wMzkgbWluICAgMC4wICAtMCAgIC0+IC0wCitkcW1pbjA0MCBtaW4gICAwLjAgIC0wLjAgLT4gLTAuMAorZHFtaW4wNDEgbWluICAgMC4wICAgMC4wIC0+ICAwLjAKK2RxbWluMDQyIG1pbiAgLTAuMCAgIDAgICAtPiAtMC4wCitkcW1pbjA0MyBtaW4gIC0wLjAgIC0wICAgLT4gLTAKK2RxbWluMDQ0IG1pbiAgLTAuMCAgLTAuMCAtPiAtMC4wCitkcW1pbjA0NSBtaW4gIC0wLjAgICAwLjAgLT4gLTAuMAorCitkcW1pbjA0NiBtaW4gICAwRTEgIC0wRTEgLT4gLTBFKzEKK2RxbWluMDQ3IG1pbiAgLTBFMSAgIDBFMiAtPiAtMEUrMQorZHFtaW4wNDggbWluICAgMEUyICAgMEUxIC0+ICAwRSsxCitkcW1pbjA0OSBtaW4gICAwRTEgICAwRTIgLT4gIDBFKzEKK2RxbWluMDUwIG1pbiAgLTBFMyAgLTBFMiAtPiAtMEUrMworZHFtaW4wNTEgbWluICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitkcW1pbjA5MCBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4wOTEgbWluICBJbmYgIC0xMDAwICAtPiAtMTAwMAorZHFtaW4wOTIgbWluICBJbmYgIC0xICAgICAtPiAtMQorZHFtaW4wOTMgbWluICBJbmYgIC0wICAgICAtPiAtMAorZHFtaW4wOTQgbWluICBJbmYgICAwICAgICAtPiAgMAorZHFtaW4wOTUgbWluICBJbmYgICAxICAgICAtPiAgMQorZHFtaW4wOTYgbWluICBJbmYgICAxMDAwICAtPiAgMTAwMAorZHFtaW4wOTcgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWluMDk4IG1pbiAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RxbWluMDk5IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEwMCBtaW4gLTEgICAgIEluZiAgIC0+IC0xCitkcW1pbjEwMSBtaW4gLTAgICAgIEluZiAgIC0+IC0wCitkcW1pbjEwMiBtaW4gIDAgICAgIEluZiAgIC0+ICAwCitkcW1pbjEwMyBtaW4gIDEgICAgIEluZiAgIC0+ICAxCitkcW1pbjEwNCBtaW4gIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkcW1pbjEwNSBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW1pbjEyMCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjEgbWluIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxbWluMTIyIG1pbiAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcW1pbjEyMyBtaW4gLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjQgbWluIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RxbWluMTI1IG1pbiAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcW1pbjEyNiBtaW4gLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjcgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTI4IG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEyOSBtaW4gLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMzAgbWluIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTMxIG1pbiAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEzMiBtaW4gIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMzMgbWluICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTM0IG1pbiAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEzNSBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RxbWluMTQxIG1pbiAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQorZHFtaW4xNDIgbWluICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKK2RxbWluMTQzIG1pbiAgTmFOIC0xICAgICAgLT4gIC0xCitkcW1pbjE0NCBtaW4gIE5hTiAtMCAgICAgIC0+ICAtMAorZHFtaW4xNDUgbWluICBOYU4gIDAgICAgICAtPiAgMAorZHFtaW4xNDYgbWluICBOYU4gIDEgICAgICAtPiAgMQorZHFtaW4xNDcgbWluICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZHFtaW4xNDggbWluICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RxbWluMTQ5IG1pbiAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFtaW4xNTAgbWluIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RxbWluMTUxIG1pbiAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RxbWluMTUyIG1pbiAtMSAgIC1OYU4gICAgLT4gLTEKK2RxbWluMTUzIG1pbiAtMCAgICBOYU4gICAgLT4gLTAKK2RxbWluMTU0IG1pbiAgMCAgIC1OYU4gICAgLT4gIDAKK2RxbWluMTU1IG1pbiAgMSAgICBOYU4gICAgLT4gIDEKK2RxbWluMTU2IG1pbiAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RxbWluMTU3IG1pbiAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RxbWluMTYxIG1pbiAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTYyIG1pbiAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTYzIG1pbiAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY0IG1pbiAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY1IG1pbiAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY2IG1pbiAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY3IG1pbiAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY4IG1pbiAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY5IG1pbiAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTcwIG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTcxIG1pbiAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTcyIG1pbiAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTczIG1pbiAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc0IG1pbiAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc1IG1pbiAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc2IG1pbiAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc3IG1pbiAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc4IG1pbiAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc5IG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFtaW4xODEgbWluICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xODIgbWluIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCitkcW1pbjE4MyBtaW4gIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbWluMTg0IG1pbiAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQorZHFtaW4xODUgbWluICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgorZHFtaW4xODYgbWluIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCitkcW1pbjE4NyBtaW4gLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0CisKK2RxbWluMTg4IG1pbiAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKK2RxbWluMTg5IG1pbiAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorZHFtaW4xOTAgbWluICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkcW1pbjE5MSBtaW4gIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTIgbWluICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTkzIG1pbiAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5NCBtaW4gIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTUgbWluICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTk2IG1pbiAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5NyBtaW4gIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTggbWluICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTk5IG1pbiAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RxbWluMjIxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEyMzQ1Njc4MDAwCitkcW1pbjIyMiBtaW4gMSAtMTIzNDU2NzgwMDAgIC0+IC0xMjM0NTY3ODAwMAorZHFtaW4yMjMgbWluIC0xMjM0NTY3ODAwICAxICAtPiAtMTIzNDU2NzgwMAorZHFtaW4yMjQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMTIzNDU2NzgwMAorZHFtaW4yMjUgbWluIC0xMjM0NTY3ODkwICAxICAtPiAtMTIzNDU2Nzg5MAorZHFtaW4yMjYgbWluIDEgLTEyMzQ1Njc4OTAgICAtPiAtMTIzNDU2Nzg5MAorZHFtaW4yMjcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMTIzNDU2Nzg5MQorZHFtaW4yMjggbWluIDEgLTEyMzQ1Njc4OTEgICAtPiAtMTIzNDU2Nzg5MQorZHFtaW4yMjkgbWluIC0xMjM0NTY3ODkwMSAxICAtPiAtMTIzNDU2Nzg5MDEKK2RxbWluMjMwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxCitkcW1pbjIzMSBtaW4gLTEyMzQ1Njc4OTYgIDEgIC0+IC0xMjM0NTY3ODk2CitkcW1pbjIzMiBtaW4gMSAtMTIzNDU2Nzg5NiAgIC0+IC0xMjM0NTY3ODk2CitkcW1pbjIzMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK2RxbWluMjM0IG1pbiAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZHFtaW4yMzUgbWluIDEyMzQ1Njc4OTAxIDEgICAtPiAxCitkcW1pbjIzNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RxbWluMjM3IG1pbiAxMjM0NTY3ODk2ICAxICAgLT4gMQorZHFtaW4yMzggbWluIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK2RxbWluMjgwIG1pbiAnMycgICAnMicgIC0+ICAnMicKK2RxbWluMjgxIG1pbiAnLTEwJyAnMycgIC0+ICAnLTEwJworZHFtaW4yODIgbWluICcxLjAnICcxJyAgLT4gICcxLjAnCitkcW1pbjI4MyBtaW4gJzEnICcxLjAnICAtPiAgJzEuMCcKK2RxbWluMjg0IG1pbiAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkcW1pbjQwMSBtaW4gIEluZiAgICAxLjEgICAgIC0+ICAxLjEKK2RxbWluNDAyIG1pbiAgMS4xICAgIDEgICAgICAgLT4gIDEKK2RxbWluNDAzIG1pbiAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAorZHFtaW40MDQgbWluICAxLjAgICAgMC4xICAgICAtPiAgMC4xCitkcW1pbjQwNSBtaW4gIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCitkcW1pbjQwNiBtaW4gIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAorZHFtaW40MDcgbWluICAwLjEwICAgMCAgICAgICAtPiAgMAorZHFtaW40MDggbWluICAwICAgICAgMC4wICAgICAtPiAgMC4wCitkcW1pbjQwOSBtaW4gIDAuMCAgIC0wICAgICAgIC0+IC0wCitkcW1pbjQxMCBtaW4gIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbWluNDExIG1pbiAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAorZHFtaW40MTIgbWluICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAorZHFtaW40MTMgbWluICAwICAgICAtMC4wICAgICAtPiAtMC4wCitkcW1pbjQxNCBtaW4gIDAgICAgIC0wICAgICAgIC0+IC0wCitkcW1pbjQxNSBtaW4gLTAuMCAgIC0wICAgICAgIC0+IC0wCitkcW1pbjQxNiBtaW4gLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZHFtaW40MTcgbWluIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAorZHFtaW40MTggbWluIC0wLjEwICAtMC4xICAgICAtPiAtMC4xCitkcW1pbjQxOSBtaW4gLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK2RxbWluNDIwIG1pbiAtMS4wICAgLTEgICAgICAgLT4gLTEKK2RxbWluNDIxIG1pbiAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQorZHFtaW40MjMgbWluIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZHFtaW40MzEgbWluICAxLjEgICAgSW5mICAgICAtPiAgMS4xCitkcW1pbjQzMiBtaW4gIDEgICAgICAxLjEgICAgIC0+ICAxCitkcW1pbjQzMyBtaW4gIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK2RxbWluNDM0IG1pbiAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQorZHFtaW40MzUgbWluICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAorZHFtaW40MzYgbWluICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK2RxbWluNDM3IG1pbiAgMCAgICAgIDAuMTAgICAgLT4gIDAKK2RxbWluNDM4IG1pbiAgMC4wICAgIDAgICAgICAgLT4gIDAuMAorZHFtaW40MzkgbWluIC0wICAgICAgMC4wICAgICAtPiAtMAorZHFtaW40NDAgbWluIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCitkcW1pbjQ0MSBtaW4gLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKK2RxbWluNDQyIG1pbiAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK2RxbWluNDQzIG1pbiAtMC4wICAgIDAgICAgICAgLT4gLTAuMAorZHFtaW40NDQgbWluIC0wICAgICAgMCAgICAgICAtPiAtMAorZHFtaW40NDUgbWluIC0wICAgICAtMC4wICAgICAtPiAtMAorZHFtaW40NDYgbWluIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDAKK2RxbWluNDQ3IG1pbiAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKK2RxbWluNDQ4IG1pbiAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQorZHFtaW40NDkgbWluIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCitkcW1pbjQ1MCBtaW4gLTEgICAgIC0xLjAgICAgIC0+IC0xCitkcW1pbjQ1MSBtaW4gLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK2RxbWluNDUzIG1pbiAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitkcW1pbjQ2MCBtaW4gIDEwMDAgICAxRSszICAgIC0+ICAxMDAwCitkcW1pbjQ2MSBtaW4gIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkcW1pbjQ2MiBtaW4gIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCitkcW1pbjQ2MyBtaW4gIDFFKzMgIC0zODQgICAgLT4gLTM4NAorZHFtaW40NjQgbWluIC0zODQgICAxRSszICAgIC0+IC0zODQKK2RxbWluNDY1IG1pbiAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKK2RxbWluNDY2IG1pbiAtMzg0ICAtMUUrMyAgICAtPiAtMUUrMworZHFtaW40NjcgbWluIC0xRSszICAtMzg0ICAgIC0+IC0xRSszCisKKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgorZHFtaW40NzEgbWluICAgICAgMS4wICAgICAgIDAuMSAgLT4gMC4xCitkcW1pbjQ3MiBtaW4gICAgICAwLjEgICAgICAgMS4wICAtPiAwLjEKK2RxbWluNDczIG1pbiAgICAgMTAuMCAgICAgICAwLjEgIC0+IDAuMQorZHFtaW40NzQgbWluICAgICAgMC4xICAgICAgMTAuMCAgLT4gMC4xCitkcW1pbjQ3NSBtaW4gICAgICAxMDAgICAgICAgMS4wICAtPiAxLjAKK2RxbWluNDc2IG1pbiAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEuMAorZHFtaW40NzcgbWluICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAuMAorZHFtaW40NzggbWluICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAuMAorZHFtaW40NzkgbWluICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwLjAKK2RxbWluNDgwIG1pbiAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMC4wCitkcW1pbjQ4MSBtaW4gICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwLjAKK2RxbWluNDgyIG1pbiAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAuMAorZHFtaW40ODMgbWluICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAuMAorZHFtaW40ODQgbWluICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAuMAorCistLSBzdWJub3JtYWxzCitkcW1pbjUxMCBtaW4gIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1pbjUxMSBtaW4gIDAuMUUtNjE0MyAgICAgICAgMCAgLT4gICAwCitkcW1pbjUxMiBtaW4gIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1pbjUxMyBtaW4gIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxNCBtaW4gIDAuMDFFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1pbjUxNSBtaW4gIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxNiBtaW4gIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxNyBtaW4gIDAuMDA5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxOCBtaW4gIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxOSBtaW4gIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwCitkcW1pbjUyMCBtaW4gIDAuMDAwMUUtNjE0MyAgICAgMCAgLT4gICAwCisKK2RxbWluNTMwIG1pbiAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgLTEuMDBFLTYxNDMKK2RxbWluNTMxIG1pbiAtMC4xRS02MTQzICAgICAgICAwICAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsCitkcW1pbjUzMiBtaW4gLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbAorZHFtaW41MzMgbWluIC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAtMS4wMEUtNjE0NCBTdWJub3JtYWwKK2RxbWluNTM0IG1pbiAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgLTFFLTYxNDUgICAgU3Vibm9ybWFsCitkcW1pbjUzNSBtaW4gLTAuOTk5RS02MTQzICAgICAgMCAgLT4gIC05Ljk5RS02MTQ0IFN1Ym5vcm1hbAorZHFtaW41MzYgbWluIC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAtOS45RS02MTQ1ICBTdWJub3JtYWwKK2RxbWluNTM3IG1pbiAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgLTlFLTYxNDYgICAgU3Vibm9ybWFsCitkcW1pbjUzOCBtaW4gLTAuMDAxRS02MTQzICAgICAgMCAgLT4gIC0xRS02MTQ2ICAgIFN1Ym5vcm1hbAorZHFtaW41MzkgbWluIC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAtOUUtNjE0NyAgICBTdWJub3JtYWwKK2RxbWluNTQwIG1pbiAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgLTFFLTYxNDcgICAgU3Vibm9ybWFsCisKKworLS0gTnVsbCB0ZXN0cworZHFtaW45MDAgbWluIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW45MDEgbWluICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbk1hZy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbk1hZy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluTWFnLmRlY1Rlc3QKQEAgLTAsMCArMSwyOTMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNaW5NYWcuZGVjVGVzdCAtLSBkZWNRdWFkIG1pbm51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFtbmcwMDEgbWlubWFnICAtMiAgLTIgIC0+IC0yCitkcW1uZzAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTEKK2RxbW5nMDAzIG1pbm1hZyAgLTIgICAwICAtPiAgMAorZHFtbmcwMDQgbWlubWFnICAtMiAgIDEgIC0+ICAxCitkcW1uZzAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTIKK2RxbW5nMDA2IG1pbm1hZyAgLTEgIC0yICAtPiAtMQorZHFtbmcwMDcgbWlubWFnICAtMSAgLTEgIC0+IC0xCitkcW1uZzAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDAKK2RxbW5nMDA5IG1pbm1hZyAgLTEgICAxICAtPiAtMQorZHFtbmcwMTAgbWlubWFnICAtMSAgIDIgIC0+IC0xCitkcW1uZzAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDAKK2RxbW5nMDEyIG1pbm1hZyAgIDAgIC0xICAtPiAgMAorZHFtbmcwMTMgbWlubWFnICAgMCAgIDAgIC0+ICAwCitkcW1uZzAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDAKK2RxbW5nMDE1IG1pbm1hZyAgIDAgICAyICAtPiAgMAorZHFtbmcwMTYgbWlubWFnICAgMSAgLTIgIC0+ICAxCitkcW1uZzAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTEKK2RxbW5nMDE4IG1pbm1hZyAgIDEgICAwICAtPiAgMAorZHFtbmcwMTkgbWlubWFnICAgMSAgIDEgIC0+ICAxCitkcW1uZzAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDEKK2RxbW5nMDIxIG1pbm1hZyAgIDIgIC0yICAtPiAtMgorZHFtbmcwMjIgbWlubWFnICAgMiAgLTEgIC0+IC0xCitkcW1uZzAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDAKK2RxbW5nMDI1IG1pbm1hZyAgIDIgICAxICAtPiAgMQorZHFtbmcwMjYgbWlubWFnICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcW1uZzAzMCBtaW5tYWcgICAwICAgICAwICAgLT4gIDAKK2RxbW5nMDMxIG1pbm1hZyAgIDAgICAgLTAgICAtPiAtMAorZHFtbmcwMzIgbWlubWFnICAgMCAgICAtMC4wIC0+IC0wLjAKK2RxbW5nMDMzIG1pbm1hZyAgIDAgICAgIDAuMCAtPiAgMC4wCitkcW1uZzAzNCBtaW5tYWcgIC0wICAgICAwICAgLT4gLTAKK2RxbW5nMDM1IG1pbm1hZyAgLTAgICAgLTAgICAtPiAtMAorZHFtbmcwMzYgbWlubWFnICAtMCAgICAtMC4wIC0+IC0wCitkcW1uZzAzNyBtaW5tYWcgIC0wICAgICAwLjAgLT4gLTAKK2RxbW5nMDM4IG1pbm1hZyAgIDAuMCAgIDAgICAtPiAgMC4wCitkcW1uZzAzOSBtaW5tYWcgICAwLjAgIC0wICAgLT4gLTAKK2RxbW5nMDQwIG1pbm1hZyAgIDAuMCAgLTAuMCAtPiAtMC4wCitkcW1uZzA0MSBtaW5tYWcgICAwLjAgICAwLjAgLT4gIDAuMAorZHFtbmcwNDIgbWlubWFnICAtMC4wICAgMCAgIC0+IC0wLjAKK2RxbW5nMDQzIG1pbm1hZyAgLTAuMCAgLTAgICAtPiAtMAorZHFtbmcwNDQgbWlubWFnICAtMC4wICAtMC4wIC0+IC0wLjAKK2RxbW5nMDQ1IG1pbm1hZyAgLTAuMCAgIDAuMCAtPiAtMC4wCisKK2RxbW5nMDQ2IG1pbm1hZyAgIDBFMSAgLTBFMSAtPiAtMEUrMQorZHFtbmcwNDcgbWlubWFnICAtMEUxICAgMEUyIC0+IC0wRSsxCitkcW1uZzA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzEKK2RxbW5nMDQ5IG1pbm1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMQorZHFtbmcwNTAgbWlubWFnICAtMEUzICAtMEUyIC0+IC0wRSszCitkcW1uZzA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMKKworLS0gU3BlY2lhbHMKK2RxbW5nMDkwIG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1uZzA5MSBtaW5tYWcgIEluZiAgLTEwMDAgIC0+IC0xMDAwCitkcW1uZzA5MiBtaW5tYWcgIEluZiAgLTEgICAgIC0+IC0xCitkcW1uZzA5MyBtaW5tYWcgIEluZiAgLTAgICAgIC0+IC0wCitkcW1uZzA5NCBtaW5tYWcgIEluZiAgIDAgICAgIC0+ICAwCitkcW1uZzA5NSBtaW5tYWcgIEluZiAgIDEgICAgIC0+ICAxCitkcW1uZzA5NiBtaW5tYWcgIEluZiAgIDEwMDAgIC0+ICAxMDAwCitkcW1uZzA5NyBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtbmcwOTggbWlubWFnIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZHFtbmcwOTkgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbW5nMTAwIG1pbm1hZyAtMSAgICAgSW5mICAgLT4gLTEKK2RxbW5nMTAxIG1pbm1hZyAtMCAgICAgSW5mICAgLT4gLTAKK2RxbW5nMTAyIG1pbm1hZyAgMCAgICAgSW5mICAgLT4gIDAKK2RxbW5nMTAzIG1pbm1hZyAgMSAgICAgSW5mICAgLT4gIDEKK2RxbW5nMTA0IG1pbm1hZyAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK2RxbW5nMTA1IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbW5nMTIwIG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1uZzEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwCitkcW1uZzEyMiBtaW5tYWcgLUluZiAgLTEgICAgIC0+IC0xCitkcW1uZzEyMyBtaW5tYWcgLUluZiAgLTAgICAgIC0+IC0wCitkcW1uZzEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwCitkcW1uZzEyNSBtaW5tYWcgLUluZiAgIDEgICAgIC0+ICAxCitkcW1uZzEyNiBtaW5tYWcgLUluZiAgIDEwMDAgIC0+ICAxMDAwCitkcW1uZzEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtbmcxMjggbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbW5nMTI5IG1pbm1hZyAtMTAwMCAtSW5mICAgLT4gLTEwMDAKK2RxbW5nMTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTEKK2RxbW5nMTMxIG1pbm1hZyAtMCAgICAtSW5mICAgLT4gLTAKK2RxbW5nMTMyIG1pbm1hZyAgMCAgICAtSW5mICAgLT4gIDAKK2RxbW5nMTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDEKK2RxbW5nMTM0IG1pbm1hZyAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2RxbW5nMTM1IG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZHFtbmcxNDEgbWlubWFnICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5CitkcW1uZzE0MiBtaW5tYWcgIE5hTiAtMTAwMCAgIC0+ICAtMTAwMAorZHFtbmcxNDMgbWlubWFnICBOYU4gLTEgICAgICAtPiAgLTEKK2RxbW5nMTQ0IG1pbm1hZyAgTmFOIC0wICAgICAgLT4gIC0wCitkcW1uZzE0NSBtaW5tYWcgIE5hTiAgMCAgICAgIC0+ICAwCitkcW1uZzE0NiBtaW5tYWcgIE5hTiAgMSAgICAgIC0+ICAxCitkcW1uZzE0NyBtaW5tYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkcW1uZzE0OCBtaW5tYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFtbmcxNDkgbWlubWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcW1uZzE1MCBtaW5tYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZHFtbmcxNTEgbWlubWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZHFtbmcxNTIgbWlubWFnIC0xICAgLU5hTiAgICAtPiAtMQorZHFtbmcxNTMgbWlubWFnIC0wICAgIE5hTiAgICAtPiAtMAorZHFtbmcxNTQgbWlubWFnICAwICAgLU5hTiAgICAtPiAgMAorZHFtbmcxNTUgbWlubWFnICAxICAgIE5hTiAgICAtPiAgMQorZHFtbmcxNTYgbWlubWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZHFtbmcxNTcgbWlubWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZHFtbmcxNjEgbWlubWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjMgbWlubWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjQgbWlubWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjYgbWlubWFnIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjcgbWlubWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjkgbWlubWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzAgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzIgbWlubWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzMgbWlubWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzUgbWlubWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzYgbWlubWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzggbWlubWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzkgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW1uZzE4MSBtaW5tYWcgIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1uZzE4MiBtaW5tYWcgLU5hTjggICAgOTk5MCAgLT4gIDk5OTAKK2RxbW5nMTgzIG1pbm1hZyAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtbmcxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xCitkcW1uZzE4NSBtaW5tYWcgIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyCitkcW1uZzE4NiBtaW5tYWcgLU5hTjMgICAgTmFONiAgLT4gLU5hTjMKK2RxbW5nMTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQKKworZHFtbmcxODggbWlubWFnIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQorZHFtbmcxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5CitkcW1uZzE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RxbW5nMTkxIG1pbm1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5MiBtaW5tYWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTMgbWlubWFnIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTk0IG1pbm1hZyAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5NSBtaW5tYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTYgbWlubWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTk3IG1pbm1hZyAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5OCBtaW5tYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTkgbWlubWFnICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZHFtbmcyMjEgbWlubWFnIC0xMjM0NTY3ODAwMCAxICAtPiAxCitkcW1uZzIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDEKK2RxbW5nMjIzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQorZHFtbmcyMjQgbWlubWFnIDEgLTEyMzQ1Njc4MDAgICAtPiAxCitkcW1uZzIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDEKK2RxbW5nMjI2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQorZHFtbmcyMjcgbWlubWFnIC0xMjM0NTY3ODkxICAxICAtPiAxCitkcW1uZzIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDEKK2RxbW5nMjI5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQorZHFtbmcyMzAgbWlubWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAxCitkcW1uZzIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDEKK2RxbW5nMjMyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQorZHFtbmcyMzMgbWlubWFnIDEyMzQ1Njc4OTEgIDEgICAtPiAxCitkcW1uZzIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RxbW5nMjM1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQorZHFtbmcyMzYgbWlubWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcW1uZzIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDEKK2RxbW5nMjM4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCitkcW1uZzI4MCBtaW5tYWcgJzMnICAgJzInICAtPiAgJzInCitkcW1uZzI4MSBtaW5tYWcgJy0xMCcgJzMnICAtPiAgJzMnCitkcW1uZzI4MiBtaW5tYWcgJzEuMCcgJzEnICAtPiAgJzEuMCcKK2RxbW5nMjgzIG1pbm1hZyAnMScgJzEuMCcgIC0+ICAnMS4wJworZHFtbmcyODQgbWlubWFnICc3JyAnTmFOJyAgLT4gICc3JworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK2RxbW5nNDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQorZHFtbmc0MDIgbWlubWFnICAxLjEgICAgMSAgICAgICAtPiAgMQorZHFtbmc0MDMgbWlubWFnICAxICAgICAgMS4wICAgICAtPiAgMS4wCitkcW1uZzQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjEKK2RxbW5nNDA1IG1pbm1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTAKK2RxbW5nNDA2IG1pbm1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwCitkcW1uZzQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwCitkcW1uZzQwOCBtaW5tYWcgIDAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RxbW5nNDA5IG1pbm1hZyAgMC4wICAgLTAgICAgICAgLT4gLTAKK2RxbW5nNDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMAorZHFtbmc0MTEgbWlubWFnICAwLjAwICAtMC4wICAgICAtPiAtMC4wCitkcW1uZzQxMiBtaW5tYWcgIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwCitkcW1uZzQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbW5nNDE0IG1pbm1hZyAgMCAgICAgLTAgICAgICAgLT4gLTAKK2RxbW5nNDE1IG1pbm1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAKK2RxbW5nNDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAKK2RxbW5nNDE3IG1pbm1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAKK2RxbW5nNDE4IG1pbm1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQorZHFtbmc0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xCitkcW1uZzQyMCBtaW5tYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xCitkcW1uZzQyMSBtaW5tYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xCitkcW1uZzQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZHFtbmc0MzEgbWlubWFnICAxLjEgICAgSW5mICAgICAtPiAgMS4xCitkcW1uZzQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxCitkcW1uZzQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK2RxbW5nNDM0IG1pbm1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQorZHFtbmc0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAorZHFtbmc0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK2RxbW5nNDM3IG1pbm1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAKK2RxbW5nNDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMAorZHFtbmc0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMAorZHFtbmc0NDAgbWlubWFnIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCitkcW1uZzQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKK2RxbW5nNDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK2RxbW5nNDQzIG1pbm1hZyAtMC4wICAgIDAgICAgICAgLT4gLTAuMAorZHFtbmc0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMAorZHFtbmc0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMAorZHFtbmc0NDYgbWlubWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMAorZHFtbmc0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMAorZHFtbmc0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xCitkcW1uZzQ0OSBtaW5tYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0wLjEKK2RxbW5nNDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEKK2RxbW5nNDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEKK2RxbW5nNDUzIG1pbm1hZyAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQorLS0gbGFyZ2llcworZHFtbmc0NjAgbWlubWFnICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAorZHFtbmc0NjEgbWlubWFnICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAorZHFtbmc0NjIgbWlubWFnICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMworZHFtbmc0NjMgbWlubWFnICAxRSszICAgLTM4NCAgICAtPiAtMzg0CitkcW1uZzQ2NCBtaW5tYWcgLTM4NCAgICAxRSszICAgIC0+IC0zODQKK2RxbW5nNDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKK2RxbW5nNDY2IG1pbm1hZyAtMzg0ICAgLTFFKzMgICAgLT4gLTM4NAorZHFtbmc0NjcgbWlubWFnIC0xRSszICAgLTM4NCAgICAtPiAtMzg0CisKKy0tIHN1Ym5vcm1hbHMKK2RxbW5nNTEwIG1pbm1hZyAgMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbW5nNTExIG1pbm1hZyAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDAKK2RxbW5nNTEyIG1pbm1hZyAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbW5nNTEzIG1pbm1hZyAgMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE0IG1pbm1hZyAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbW5nNTE1IG1pbm1hZyAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE2IG1pbm1hZyAgMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE3IG1pbm1hZyAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE4IG1pbm1hZyAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE5IG1pbm1hZyAgMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDAKK2RxbW5nNTIwIG1pbm1hZyAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDAKKworZHFtbmc1MzAgbWlubWFnIC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzEgbWlubWFnIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzIgbWlubWFnIC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzMgbWlubWFnIC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzQgbWlubWFnIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzUgbWlubWFnIC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzYgbWlubWFnIC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzcgbWlubWFnIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzggbWlubWFnIC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzkgbWlubWFnIC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMAorZHFtbmc1NDAgbWlubWFnIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMAorCisKKy0tIE51bGwgdGVzdHMKK2RxbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nOTAxIG1pbm1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW51cy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbnVzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlNDYyZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW51cy5kZWNUZXN0CkBAIC0wLDAgKzEsODggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNaW51cy5kZWNUZXN0IC0tIGRlY1F1YWQgMC14ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcW1uczAwMSBtaW51cyAgICAgICArNy41MCAgLT4gLTcuNTAKKworLS0gSW5maW5pdGllcworZHFtbnMwMTEgbWludXMgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQorZHFtbnMwMTIgbWludXMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZHFtbnMwMjEgbWludXMgICAgICAgICBOYU4gIC0+IE5hTgorZHFtbnMwMjIgbWludXMgICAgICAgIC1OYU4gIC0+IC1OYU4KK2RxbW5zMDIzIG1pbnVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1uczAyNCBtaW51cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkcW1uczAzMSBtaW51cyAgICAgICBOYU4xMyAgLT4gTmFOMTMKK2RxbW5zMDMyIG1pbnVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMKK2RxbW5zMDMzIG1pbnVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uCitkcW1uczAzNCBtaW51cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbnMwMzUgbWludXMgICAgICAgTmFONzAgIC0+IE5hTjcwCitkcW1uczAzNiBtaW51cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwCitkcW1uczAzNyBtaW51cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbnMwMzggbWludXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZHFtbnMxMDEgbWludXMgICAgICAgICAgNyAgIC0+IC03CitkcW1uczEwMiBtaW51cyAgICAgICAgIC03ICAgLT4gNworZHFtbnMxMDMgbWludXMgICAgICAgICA3NSAgIC0+IC03NQorZHFtbnMxMDQgbWludXMgICAgICAgIC03NSAgIC0+IDc1CitkcW1uczEwNSBtaW51cyAgICAgICA3LjUwICAgLT4gLTcuNTAKK2RxbW5zMTA2IG1pbnVzICAgICAgLTcuNTAgICAtPiA3LjUwCitkcW1uczEwNyBtaW51cyAgICAgICA3LjUwMCAgLT4gLTcuNTAwCitkcW1uczEwOCBtaW51cyAgICAgIC03LjUwMCAgLT4gNy41MDAKKworLS0gemVyb3MKK2RxbW5zMTExIG1pbnVzICAgICAgICAgIDAgICAtPiAwCitkcW1uczExMiBtaW51cyAgICAgICAgIC0wICAgLT4gMAorZHFtbnMxMTMgbWludXMgICAgICAgMEUrNCAgIC0+IDBFKzQKK2RxbW5zMTE0IG1pbnVzICAgICAgLTBFKzQgICAtPiAwRSs0CitkcW1uczExNSBtaW51cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkcW1uczExNiBtaW51cyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkcW1uczExNyBtaW51cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkcW1uczExOCBtaW51cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcW1uczEyMSBtaW51cyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxbW5zMTIyIG1pbnVzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFtbnMxMjMgbWludXMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcW1uczEyNCBtaW51cyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxbW5zMTMxIG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFtbnMxMzIgbWludXMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKK2RxbW5zMTMzIG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFtbnMxMzQgbWludXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgU3Vibm9ybWFsCisKK2RxbW5zMTM1IG1pbnVzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2IFN1Ym5vcm1hbAorZHFtbnMxMzYgbWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcW1uczEzNyBtaW51cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFtbnMxMzggbWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTXVsdGlwbHkuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNdWx0aXBseS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODdhODUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTXVsdGlwbHkuZGVjVGVzdApAQCAtMCwwICsxLDU4OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcU11bHRpcGx5LmRlY1Rlc3QgLS0gZGVjUXVhZCBtdWx0aXBsaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNRdWFkCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcW11bDAwMCBtdWx0aXBseSAyICAgICAgMiAtPiA0CitkcW11bDAwMSBtdWx0aXBseSAyICAgICAgMyAtPiA2CitkcW11bDAwMiBtdWx0aXBseSA1ICAgICAgMSAtPiA1CitkcW11bDAwMyBtdWx0aXBseSA1ICAgICAgMiAtPiAxMAorZHFtdWwwMDQgbXVsdGlwbHkgMS4yMCAgIDIgLT4gMi40MAorZHFtdWwwMDUgbXVsdGlwbHkgMS4yMCAgIDAgLT4gMC4wMAorZHFtdWwwMDYgbXVsdGlwbHkgMS4yMCAgLTIgLT4gLTIuNDAKK2RxbXVsMDA3IG11bHRpcGx5IC0xLjIwICAyIC0+IC0yLjQwCitkcW11bDAwOCBtdWx0aXBseSAtMS4yMCAgMCAtPiAtMC4wMAorZHFtdWwwMDkgbXVsdGlwbHkgLTEuMjAgLTIgLT4gMi40MAorZHFtdWwwMTAgbXVsdGlwbHkgNS4wOSA3LjEgLT4gMzYuMTM5CitkcW11bDAxMSBtdWx0aXBseSAyLjUgICAgNCAtPiAxMC4wCitkcW11bDAxMiBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMAorZHFtdWwwMTMgbXVsdGlwbHkgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAorZHFtdWwwMTUgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDAKK2RxbXVsMDE2IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsMDE3IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC05Ljk5OTk5OTk5OTk5OTk5OTk5IC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsMDE4IG11bHRpcGx5IC05Ljk5OTk5OTk5OTk5OTk5OTk5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsMDE5IG11bHRpcGx5IC05Ljk5OTk5OTk5OTk5OTk5OTk5IC05Ljk5OTk5OTk5OTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gemVyb3MsIGV0Yy4KK2RxbXVsMDIxIG11bHRpcGx5ICAwICAgICAgMCAgICAgLT4gIDAKK2RxbXVsMDIyIG11bHRpcGx5ICAwICAgICAtMCAgICAgLT4gLTAKK2RxbXVsMDIzIG11bHRpcGx5IC0wICAgICAgMCAgICAgLT4gLTAKK2RxbXVsMDI0IG11bHRpcGx5IC0wICAgICAtMCAgICAgLT4gIDAKK2RxbXVsMDI1IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RxbXVsMDI2IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RxbXVsMDI3IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RxbXVsMDI4IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RxbXVsMDMwIG11bHRpcGx5ICA1LjAwICAgMUUtMyAgLT4gIDAuMDA1MDAKK2RxbXVsMDMxIG11bHRpcGx5ICAwMC4wMCAgMC4wMDAgLT4gIDAuMDAwMDAKK2RxbXVsMDMyIG11bHRpcGx5ICAwMC4wMCAgMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkcW11bDAzMyBtdWx0aXBseSAgMEUtMyAgIDAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZHFtdWwwMzQgbXVsdGlwbHkgLTUuMDAgICAxRS0zICAtPiAtMC4wMDUwMAorZHFtdWwwMzUgbXVsdGlwbHkgLTAwLjAwICAwLjAwMCAtPiAtMC4wMDAwMAorZHFtdWwwMzYgbXVsdGlwbHkgLTAwLjAwICAwRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxbXVsMDM3IG11bHRpcGx5IC0wRS0zICAgMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkcW11bDAzOCBtdWx0aXBseSAgNS4wMCAgLTFFLTMgIC0+IC0wLjAwNTAwCitkcW11bDAzOSBtdWx0aXBseSAgMDAuMDAgLTAuMDAwIC0+IC0wLjAwMDAwCitkcW11bDA0MCBtdWx0aXBseSAgMDAuMDAgLTBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFtdWwwNDEgbXVsdGlwbHkgIDBFLTMgIC0wMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RxbXVsMDQyIG11bHRpcGx5IC01LjAwICAtMUUtMyAgLT4gIDAuMDA1MDAKK2RxbXVsMDQzIG11bHRpcGx5IC0wMC4wMCAtMC4wMDAgLT4gIDAuMDAwMDAKK2RxbXVsMDQ0IG11bHRpcGx5IC0wMC4wMCAtMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkcW11bDA0NSBtdWx0aXBseSAtMEUtMyAgLTAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkcW11bDA1MCBtdWx0aXBseSAxLjIwIDMgICAgICAgIC0+IDMuNjAKK2RxbXVsMDUxIG11bHRpcGx5IDcgICAgMyAgICAgICAgLT4gMjEKK2RxbXVsMDUyIG11bHRpcGx5IDAuOSAgMC44ICAgICAgLT4gMC43MgorZHFtdWwwNTMgbXVsdGlwbHkgMC45ICAtMCAgICAgICAtPiAtMC4wCitkcW11bDA1NCBtdWx0aXBseSA2NTQzMjEgNjU0MzIxIC0+IDQyODEzNTk3MTA0MQorCitkcW11bDA2MCBtdWx0aXBseSAxMjMuNDUgMWU3ICAtPiAgMS4yMzQ1RSs5CitkcW11bDA2MSBtdWx0aXBseSAxMjMuNDUgMWU4ICAtPiAgMS4yMzQ1RSsxMAorZHFtdWwwNjIgbXVsdGlwbHkgMTIzLjQ1IDFlKzkgLT4gIDEuMjM0NUUrMTEKK2RxbXVsMDYzIG11bHRpcGx5IDEyMy40NSAxZTEwIC0+ICAxLjIzNDVFKzEyCitkcW11bDA2NCBtdWx0aXBseSAxMjMuNDUgMWUxMSAtPiAgMS4yMzQ1RSsxMworZHFtdWwwNjUgbXVsdGlwbHkgMTIzLjQ1IDFlMTIgLT4gIDEuMjM0NUUrMTQKK2RxbXVsMDY2IG11bHRpcGx5IDEyMy40NSAxZTEzIC0+ICAxLjIzNDVFKzE1CisKKworLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFtdWwwODAgbXVsdGlwbHkgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkcW11bDA4NCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RxbXVsMDkwIG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQorZHFtdWwwOTQgbXVsdGlwbHkgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xIC0+IDEyMzAxMjM0NTY0NTY3OC45CisKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMKK2RxbXVsMTAxIG11bHRpcGx5IDkgOSAgIC0+IDgxCitkcW11bDEwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwCitkcW11bDEwMyBtdWx0aXBseSA5IDkwMCAgIC0+IDgxMDAKK2RxbXVsMTA0IG11bHRpcGx5IDkgOTAwMCAgIC0+IDgxMDAwCitkcW11bDEwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwCitkcW11bDEwNiBtdWx0aXBseSA5IDkwMDAwMCAgIC0+IDgxMDAwMDAKK2RxbXVsMTA3IG11bHRpcGx5IDkgOTAwMDAwMCAgIC0+IDgxMDAwMDAwCitkcW11bDEwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwCitkcW11bDEwOSBtdWx0aXBseSA5IDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAKK2RxbXVsMTEwIG11bHRpcGx5IDkgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwCitkcW11bDExMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwCitkcW11bDExMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAKK2RxbXVsMTEzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwCitkcW11bDExNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwCitkcW11bDExNSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMTcgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMAorLS1kcW11bDExOCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMTkgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMjAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kcW11bDEyMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMjIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMjMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKK2RxbXVsMTMxIG11bHRpcGx5IDMgMyAgIC0+IDkKK2RxbXVsMTMyIG11bHRpcGx5IDMgMzAgICAtPiA5MAorZHFtdWwxMzMgbXVsdGlwbHkgMyAzMDAgICAtPiA5MDAKK2RxbXVsMTM0IG11bHRpcGx5IDMgMzAwMCAgIC0+IDkwMDAKK2RxbXVsMTM1IG11bHRpcGx5IDMgMzAwMDAgICAtPiA5MDAwMAorZHFtdWwxMzYgbXVsdGlwbHkgMyAzMDAwMDAgICAtPiA5MDAwMDAKK2RxbXVsMTM3IG11bHRpcGx5IDMgMzAwMDAwMCAgIC0+IDkwMDAwMDAKK2RxbXVsMTM4IG11bHRpcGx5IDMgMzAwMDAwMDAgICAtPiA5MDAwMDAwMAorZHFtdWwxMzkgbXVsdGlwbHkgMyAzMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAKK2RxbXVsMTQwIG11bHRpcGx5IDMgMzAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAKK2RxbXVsMTQxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMAorZHFtdWwxNDIgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAKK2RxbXVsMTQzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAKK2RxbXVsMTQ0IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMAorZHFtdWwxNDUgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAKK2RxbXVsMTQ2IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTQ3IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxNDggbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTQ5IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTUwIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxNTEgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTUyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTUzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcW11bDI2MyBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4Mjk2IEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nCitkcW11bDMwMSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOSAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzAyIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwMyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwNCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzA1IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwNiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwNyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzA4IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwOSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxMCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzExIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxMiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxMyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzE0IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxNSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxNiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzE3IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZAorZHFtdWwzMTggbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZAorZHFtdWwzMTkgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgIFJvdW5kZWQKK2RxbXVsMzIwIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgUm91bmRlZAorZHFtdWwzMjEgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCAgUm91bmRlZAorZHFtdWwzMjIgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzkgIFJvdW5kZWQKK2RxbXVsMzIzIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs0MCAgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworZHFtdWw1MDQgIG11bHRpcGx5ICAwRS00MjYwIDEwMDBFLTQyNjAgIC0+IDBFLTYxNzYgQ2xhbXBlZAorZHFtdWw1MDUgIG11bHRpcGx5ICAxMDBFKzQyNjAgMEUrNDI2MCAgIC0+IDBFKzYxMTEgQ2xhbXBlZAorCistLSBtaXhlZCB3aXRoIHplcm9zCitkcW11bDU0MSBtdWx0aXBseSAgMCAgICAtMSAgICAgLT4gLTAKK2RxbXVsNTQyIG11bHRpcGx5IC0wICAgIC0xICAgICAtPiAgMAorZHFtdWw1NDMgbXVsdGlwbHkgIDAgICAgIDEgICAgIC0+ICAwCitkcW11bDU0NCBtdWx0aXBseSAtMCAgICAgMSAgICAgLT4gLTAKK2RxbXVsNTQ1IG11bHRpcGx5IC0xICAgICAwICAgICAtPiAtMAorZHFtdWw1NDYgbXVsdGlwbHkgLTEgICAgLTAgICAgIC0+ICAwCitkcW11bDU0NyBtdWx0aXBseSAgMSAgICAgMCAgICAgLT4gIDAKK2RxbXVsNTQ4IG11bHRpcGx5ICAxICAgIC0wICAgICAtPiAtMAorCitkcW11bDU1MSBtdWx0aXBseSAgMC4wICAtMSAgICAgLT4gLTAuMAorZHFtdWw1NTIgbXVsdGlwbHkgLTAuMCAgLTEgICAgIC0+ICAwLjAKK2RxbXVsNTUzIG11bHRpcGx5ICAwLjAgICAxICAgICAtPiAgMC4wCitkcW11bDU1NCBtdWx0aXBseSAtMC4wICAgMSAgICAgLT4gLTAuMAorZHFtdWw1NTUgbXVsdGlwbHkgLTEuMCAgIDAgICAgIC0+IC0wLjAKK2RxbXVsNTU2IG11bHRpcGx5IC0xLjAgIC0wICAgICAtPiAgMC4wCitkcW11bDU1NyBtdWx0aXBseSAgMS4wICAgMCAgICAgLT4gIDAuMAorZHFtdWw1NTggbXVsdGlwbHkgIDEuMCAgLTAgICAgIC0+IC0wLjAKKworZHFtdWw1NjEgbXVsdGlwbHkgIDAgICAgLTEuMCAgIC0+IC0wLjAKK2RxbXVsNTYyIG11bHRpcGx5IC0wICAgIC0xLjAgICAtPiAgMC4wCitkcW11bDU2MyBtdWx0aXBseSAgMCAgICAgMS4wICAgLT4gIDAuMAorZHFtdWw1NjQgbXVsdGlwbHkgLTAgICAgIDEuMCAgIC0+IC0wLjAKK2RxbXVsNTY1IG11bHRpcGx5IC0xICAgICAwLjAgICAtPiAtMC4wCitkcW11bDU2NiBtdWx0aXBseSAtMSAgICAtMC4wICAgLT4gIDAuMAorZHFtdWw1NjcgbXVsdGlwbHkgIDEgICAgIDAuMCAgIC0+ICAwLjAKK2RxbXVsNTY4IG11bHRpcGx5ICAxICAgIC0wLjAgICAtPiAtMC4wCisKK2RxbXVsNTcxIG11bHRpcGx5ICAwLjAgIC0xLjAgICAtPiAtMC4wMAorZHFtdWw1NzIgbXVsdGlwbHkgLTAuMCAgLTEuMCAgIC0+ICAwLjAwCitkcW11bDU3MyBtdWx0aXBseSAgMC4wICAgMS4wICAgLT4gIDAuMDAKK2RxbXVsNTc0IG11bHRpcGx5IC0wLjAgICAxLjAgICAtPiAtMC4wMAorZHFtdWw1NzUgbXVsdGlwbHkgLTEuMCAgIDAuMCAgIC0+IC0wLjAwCitkcW11bDU3NiBtdWx0aXBseSAtMS4wICAtMC4wICAgLT4gIDAuMDAKK2RxbXVsNTc3IG11bHRpcGx5ICAxLjAgICAwLjAgICAtPiAgMC4wMAorZHFtdWw1NzggbXVsdGlwbHkgIDEuMCAgLTAuMCAgIC0+IC0wLjAwCisKKworLS0gU3BlY2lhbHMKK2RxbXVsNTgwIG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNTgxIG11bHRpcGx5ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxbXVsNTgyIG11bHRpcGx5ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RxbXVsNTgzIG11bHRpcGx5ICBJbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw1ODQgbXVsdGlwbHkgIEluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDU4NSBtdWx0aXBseSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcW11bDU4NiBtdWx0aXBseSAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkcW11bDU4NyBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW11bDU4OCBtdWx0aXBseSAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5CitkcW11bDU4OSBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkcW11bDU5MCBtdWx0aXBseSAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5CitkcW11bDU5MSBtdWx0aXBseSAtMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNTkyIG11bHRpcGx5ICAwICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw1OTMgbXVsdGlwbHkgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtdWw1OTQgbXVsdGlwbHkgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtdWw1OTUgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW11bDYwMCBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkcW11bDYwMSBtdWx0aXBseSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcW11bDYwMiBtdWx0aXBseSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcW11bDYwMyBtdWx0aXBseSAtSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjA0IG11bHRpcGx5IC1JbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2MDUgbXVsdGlwbHkgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFtdWw2MDYgbXVsdGlwbHkgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFtdWw2MDcgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw2MDggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw2MDkgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFtdWw2MTAgbXVsdGlwbHkgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFtdWw2MTEgbXVsdGlwbHkgLTAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDYxMiBtdWx0aXBseSAgMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjEzIG11bHRpcGx5ICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNjE0IG11bHRpcGx5ICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNjE1IG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKKworZHFtdWw2MjEgbXVsdGlwbHkgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxbXVsNjIyIG11bHRpcGx5ICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcW11bDYyMyBtdWx0aXBseSAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFtdWw2MjQgbXVsdGlwbHkgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxbXVsNjI1IG11bHRpcGx5ICBOYU4gIDAgICAgICAtPiAgTmFOCitkcW11bDYyNiBtdWx0aXBseSAgTmFOICAxICAgICAgLT4gIE5hTgorZHFtdWw2MjcgbXVsdGlwbHkgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxbXVsNjI4IG11bHRpcGx5ICBOYU4gIEluZiAgICAtPiAgTmFOCitkcW11bDYyOSBtdWx0aXBseSAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzAgbXVsdGlwbHkgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjMxIG11bHRpcGx5IC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcW11bDYzMiBtdWx0aXBseSAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzMgbXVsdGlwbHkgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjM0IG11bHRpcGx5ICAwICAgIE5hTiAgICAtPiAgTmFOCitkcW11bDYzNSBtdWx0aXBseSAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzYgbXVsdGlwbHkgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjM3IG11bHRpcGx5ICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RxbXVsNjQxIG11bHRpcGx5ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDIgbXVsdGlwbHkgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0MyBtdWx0aXBseSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQ0IG11bHRpcGx5ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDUgbXVsdGlwbHkgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0NiBtdWx0aXBseSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQ3IG11bHRpcGx5ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDggbXVsdGlwbHkgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0OSBtdWx0aXBseSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjUwIG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTEgbXVsdGlwbHkgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1MiBtdWx0aXBseSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjUzIG11bHRpcGx5IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTQgbXVsdGlwbHkgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1NSBtdWx0aXBseSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjU2IG11bHRpcGx5ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTcgbXVsdGlwbHkgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1OCBtdWx0aXBseSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjU5IG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW11bDY2MSBtdWx0aXBseSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RxbXVsNjYyIG11bHRpcGx5ICBOYU44ICA5OTkgICAtPiAgTmFOOAorZHFtdWw2NjMgbXVsdGlwbHkgIE5hTjcxIEluZiAgIC0+ICBOYU43MQorZHFtdWw2NjQgbXVsdGlwbHkgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitkcW11bDY2NSBtdWx0aXBseSAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RxbXVsNjY2IG11bHRpcGx5IC05OTkgICBOYU4zMyAtPiAgTmFOMzMKK2RxbXVsNjY3IG11bHRpcGx5ICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitkcW11bDY3MSBtdWx0aXBseSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY3MiBtdWx0aXBseSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY3MyBtdWx0aXBseSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY3NCBtdWx0aXBseSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY3NSBtdWx0aXBseSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY3NiBtdWx0aXBseSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY3NyBtdWx0aXBseSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY3OCBtdWx0aXBseSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY3OSBtdWx0aXBseSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RxbXVsNjgxIG11bHRpcGx5IC1OYU45IC1JbmYgICAtPiAtTmFOOQorZHFtdWw2ODIgbXVsdGlwbHkgLU5hTjggIDk5OSAgIC0+IC1OYU44CitkcW11bDY4MyBtdWx0aXBseSAtTmFONzEgSW5mICAgLT4gLU5hTjcxCitkcW11bDY4NCBtdWx0aXBseSAtTmFONiAtTmFONSAgLT4gLU5hTjYKK2RxbXVsNjg1IG11bHRpcGx5IC1JbmYgIC1OYU40ICAtPiAtTmFONAorZHFtdWw2ODYgbXVsdGlwbHkgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMworZHFtdWw2ODcgbXVsdGlwbHkgIEluZiAgLU5hTjIgIC0+IC1OYU4yCisKK2RxbXVsNjkxIG11bHRpcGx5IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjkyIG11bHRpcGx5IC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjkzIG11bHRpcGx5IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjk0IG11bHRpcGx5IC1zTmFOMTYgLXNOYU45NCAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjk1IG11bHRpcGx5IC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjk2IG11bHRpcGx5IC1JbmYgICAgLXNOYU45MiAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjk3IG11bHRpcGx5ICAwODggICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjk4IG11bHRpcGx5ICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjk5IG11bHRpcGx5IC1OYU4gICAgLXNOYU44OSAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZHFtdWw3MDEgbXVsdGlwbHkgLU5hTiAgLUluZiAgIC0+IC1OYU4KK2RxbXVsNzAyIG11bHRpcGx5IC1OYU4gICA5OTkgICAtPiAtTmFOCitkcW11bDcwMyBtdWx0aXBseSAtTmFOICAgSW5mICAgLT4gLU5hTgorZHFtdWw3MDQgbXVsdGlwbHkgLU5hTiAgLU5hTiAgIC0+IC1OYU4KK2RxbXVsNzA1IG11bHRpcGx5IC1JbmYgIC1OYU4wICAtPiAtTmFOCitkcW11bDcwNiBtdWx0aXBseSAtOTk5ICAtTmFOICAgLT4gLU5hTgorZHFtdWw3MDcgbXVsdGlwbHkgIEluZiAgLU5hTiAgIC0+IC1OYU4KKworZHFtdWw3MTEgbXVsdGlwbHkgLXNOYU4gICAtSW5mICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzEyIG11bHRpcGx5IC1zTmFOICAgLTExICAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxMyBtdWx0aXBseSAtc05hTjAwICBOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTQgbXVsdGlwbHkgLXNOYU4gICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzE1IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxNiBtdWx0aXBseSAtSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzE4IG11bHRpcGx5ICBJbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxOSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMKKy0tIHNpZ25zCitkcW11bDc1MSBtdWx0aXBseSAgMWUrNDI3NyAgMWUrMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc1MiBtdWx0aXBseSAgMWUrNDI3NyAtMWUrMzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc1MyBtdWx0aXBseSAtMWUrNDI3NyAgMWUrMzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc1NCBtdWx0aXBseSAtMWUrNDI3NyAtMWUrMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc1NSBtdWx0aXBseSAgMWUtNDI3NyAgMWUtMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDc1NiBtdWx0aXBseSAgMWUtNDI3NyAtMWUtMzMxMSAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDc1NyBtdWx0aXBseSAtMWUtNDI3NyAgMWUtMzMxMSAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDc1OCBtdWx0aXBseSAtMWUtNDI3NyAtMWUtMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZHFtdWw3NjAgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDEgLT4gMUUtNjE3MCBTdWJub3JtYWwKK2RxbXVsNzYxIG11bHRpcGx5IDFlLTYwNjkgMWUtMTAyIC0+IDFFLTYxNzEgU3Vibm9ybWFsCitkcW11bDc2MiBtdWx0aXBseSAxZS02MDY5IDFlLTEwMyAtPiAxRS02MTcyIFN1Ym5vcm1hbAorZHFtdWw3NjMgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDQgLT4gMUUtNjE3MyBTdWJub3JtYWwKK2RxbXVsNzY0IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA1IC0+IDFFLTYxNzQgU3Vibm9ybWFsCitkcW11bDc2NSBtdWx0aXBseSAxZS02MDY5IDFlLTEwNiAtPiAxRS02MTc1IFN1Ym5vcm1hbAorZHFtdWw3NjYgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDcgLT4gMUUtNjE3NiBTdWJub3JtYWwKK2RxbXVsNzY3IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA4IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw3NjggbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDc2OSBtdWx0aXBseSAxZS02MDY5IDFlLTExMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KK2RxbXVsNzcwIG11bHRpcGx5IDFlKzQwIDFlKzYxMDEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZAorZHFtdWw3NzEgbXVsdGlwbHkgMWUrNDAgMWUrNjEwMiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgIENsYW1wZWQKK2RxbXVsNzcyIG11bHRpcGx5IDFlKzQwIDFlKzYxMDMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyAgQ2xhbXBlZAorZHFtdWw3NzMgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAorZHFtdWw3NzQgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzc1IG11bHRpcGx5IDFlKzQwIDFlKzYxMDYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc3NiBtdWx0aXBseSAxZSs0MCAxZSs2MTA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NzcgbXVsdGlwbHkgMWUrNDAgMWUrNjEwOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzc4IG11bHRpcGx5IDFlKzQwIDFlKzYxMDkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc3OSBtdWx0aXBseSAxZSs0MCAxZSs2MTEwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitkcW11bDgwMSBtdWx0aXBseSAgMS4wMDAwRS02MTcyICAxICAgICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsCitkcW11bDgwMiBtdWx0aXBseSAgMS4wMDBFLTYxNzIgICAxZS0xICAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsCitkcW11bDgwMyBtdWx0aXBseSAgMS4wMEUtNjE3MiAgICAxZS0yICAtPiAxLjAwRS02MTc0ICAgU3Vibm9ybWFsCitkcW11bDgwNCBtdWx0aXBseSAgMS4wRS02MTcyICAgICAxZS0zICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsCitkcW11bDgwNSBtdWx0aXBseSAgMS4wRS02MTcyICAgICAxZS00ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwgUm91bmRlZAorZHFtdWw4MDYgbXVsdGlwbHkgIDEuM0UtNjE3MiAgICAgMWUtNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODA3IG11bHRpcGx5ICAxLjVFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgwOCBtdWx0aXBseSAgMS43RS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MDkgbXVsdGlwbHkgIDIuM0UtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODEwIG11bHRpcGx5ICAyLjVFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxMSBtdWx0aXBseSAgMi43RS02MTcyICAgICAxZS00ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTIgbXVsdGlwbHkgIDEuNDlFLTYxNzIgICAgMWUtNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODEzIG11bHRpcGx5ICAxLjUwRS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxNCBtdWx0aXBseSAgMS41MUUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTUgbXVsdGlwbHkgIDIuNDlFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODE2IG11bHRpcGx5ICAyLjUwRS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxNyBtdWx0aXBseSAgMi41MUUtNjE3MiAgICAxZS00ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcW11bDgxOCBtdWx0aXBseSAgMUUtNjE3MiAgICAgICAxZS00ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwKK2RxbXVsODE5IG11bHRpcGx5ICAzRS02MTcyICAgICAgIDFlLTUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsODIwIG11bHRpcGx5ICA1RS02MTcyICAgICAgIDFlLTUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsODIxIG11bHRpcGx5ICA3RS02MTcyICAgICAgIDFlLTUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgyMiBtdWx0aXBseSAgOUUtNjE3MiAgICAgICAxZS01ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MjMgbXVsdGlwbHkgIDkuOUUtNjE3MiAgICAgMWUtNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFtdWw4MjQgbXVsdGlwbHkgIDFFLTYxNzIgICAgICAtMWUtNCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsCitkcW11bDgyNSBtdWx0aXBseSAgM0UtNjE3MiAgICAgIC0xZS01ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDgyNiBtdWx0aXBseSAtNUUtNjE3MiAgICAgICAxZS01ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDgyNyBtdWx0aXBseSAgN0UtNjE3MiAgICAgIC0xZS01ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MjggbXVsdGlwbHkgLTlFLTYxNzIgICAgICAgMWUtNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODI5IG11bHRpcGx5ICA5LjlFLTYxNzIgICAgLTFlLTUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgzMCBtdWx0aXBseSAgMy4wRS02MTcyICAgIC0xZS01ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RxbXVsODMxIG11bHRpcGx5ICAxLjBFLTU5NzcgICAgIDFlLTIwMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsODMyIG11bHRpcGx5ICAxLjBFLTU5NzcgICAgIDFlLTE5OSAtPiAxRS02MTc2ICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcW11bDgzMyBtdWx0aXBseSAgMS4wRS01OTc3ICAgICAxZS0xOTggLT4gMS4wRS02MTc1ICAgIFN1Ym5vcm1hbAorZHFtdWw4MzQgbXVsdGlwbHkgIDIuMEUtNTk3NyAgICAgMmUtMTk4IC0+IDQuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxbXVsODM1IG11bHRpcGx5ICA0LjBFLTU5NzcgICAgIDRlLTE5OCAtPiAxLjYwRS02MTc0ICAgU3Vibm9ybWFsCitkcW11bDgzNiBtdWx0aXBseSAxMC4wRS01OTc3ICAgIDEwZS0xOTggLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFtdWw4MzcgbXVsdGlwbHkgMzAuMEUtNTk3NyAgICAzMGUtMTk4IC0+IDkuMDAwRS02MTczICBTdWJub3JtYWwKK2RxbXVsODM4IG11bHRpcGx5IDQwLjBFLTU5ODIgICAgNDBlLTE2NiAtPiAxLjYwMDBFLTYxNDUgU3Vibm9ybWFsCitkcW11bDgzOSBtdWx0aXBseSA0MC4wRS01OTgyICAgIDQwZS0xNjUgLT4gMS42MDAwRS02MTQ0IFN1Ym5vcm1hbAorZHFtdWw4NDAgbXVsdGlwbHkgNDAuMEUtNTk4MiAgICA0MGUtMTY0IC0+IDEuNjAwMEUtNjE0MworCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK2RxbXVsODcwIG11bHRpcGx5IDEwMCAgOS45OTlFKzYxNDMgICAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RxbXVsODcxIG11bHRpcGx5IDEwMCAtOS45OTlFKzYxNDMgICAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RxbXVsODcyIG11bHRpcGx5ICAgICAgOS45OTlFKzYxNDMgMTAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RxbXVsODczIG11bHRpcGx5ICAgICAtOS45OTlFKzYxNDMgMTAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RxbXVsODgxIG11bHRpcGx5ICAxLjIzNDdFLTYxMzMgMS4yMzQ3RS00MCAgLT4gIDEuNTI0RS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg4MiBtdWx0aXBseSAgMS4yMzRFLTYxMzMgMS4yMzRFLTQwICAgIC0+ICAxLjUyM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4ODMgbXVsdGlwbHkgIDEuMjNFLTYxMzMgIDEuMjNFLTQwICAgICAtPiAgMS41MTNFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODg0IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjJFLTQwICAgICAgLT4gIDEuNDRFLTYxNzMgIFN1Ym5vcm1hbAorZHFtdWw4ODUgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDEgICAgICAtPiAgMS40NEUtNjE3NCAgU3Vibm9ybWFsCitkcW11bDg4NiBtdWx0aXBseSAgMS4yRS02MTMzICAgMS4yRS00MiAgICAgIC0+ICAxLjRFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZHFtdWw4ODcgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuM0UtNDIgICAgICAtPiAgMS42RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxbXVsODg4IG11bHRpcGx5ICAxLjNFLTYxMzMgICAxLjNFLTQyICAgICAgLT4gIDEuN0UtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcW11bDg4OSBtdWx0aXBseSAgMS4zRS02MTMzICAgMS4zRS00MyAgICAgIC0+ICAgIDJFLTYxNzYgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZHFtdWw4OTAgbXVsdGlwbHkgIDEuM0UtNjEzNCAgIDEuM0UtNDMgICAgICAtPiAgICAwRS02MTc2ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCitkcW11bDg5MSBtdWx0aXBseSAgMS4yMzQ1RS0zOSAgICAxLjIzNEUtNjEzMyAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg5MiBtdWx0aXBseSAgMS4yMzQ1NkUtMzkgICAxLjIzNEUtNjEzMyAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg5MyBtdWx0aXBseSAgMS4yMzQ1RS00MCAgIDEuMjM0RS02MTMzIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODk0IG11bHRpcGx5ICAxLjIzNDU2RS00MCAgMS4yMzRFLTYxMzMgLT4gIDEuNTIzRS02MTczICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4OTUgbXVsdGlwbHkgIDEuMjM0NUUtNDEgICAxLjIzNEUtNjEzMyAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg5NiBtdWx0aXBseSAgMS4yMzQ1NkUtNDEgIDEuMjM0RS02MTMzIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdworLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0CitkcW11bDkwNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzCitkcW11bDkwNyBtdWx0aXBseSAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4KK2RxbXVsOTA4IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gaHVnZXN0CitkcW11bDkwOSBtdWx0aXBseSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzY3IEluZXhhY3QgUm91bmRlZAorLS0gVkcgY2FzZQorZHFtdWw5MTAgbXVsdGlwbHkgOC44MTEyNTAwMDAwMDAwMTM0OTQzNkUtMTU0OCA4LjAwMDAwMDAwMDAwMDAwMDAwMEUtMTU1MCAtPiA3LjA0OTAwMDAwMDAwMDAxMDc5NTQ4ODAwMDAwMDAwMDAwMEUtMzA5NyBSb3VuZGVkCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorcHJlY2lzaW9uOiAgIDM0Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworZHFtdWw5MTEgIG11bHRpcGx5IDEzMEUtMiAgMTIwRS0yIC0+IDEuNTYwMAorZHFtdWw5MTIgIG11bHRpcGx5IDEzMEUtMiAgMTJFLTEgIC0+IDEuNTYwCitkcW11bDkxMyAgbXVsdGlwbHkgMTMwRS0yICAxRTAgICAgLT4gMS4zMAorZHFtdWw5MTQgIG11bHRpcGx5IDFFMiAgICAgMUU0ICAgIC0+IDFFKzYKKworLS0gcG93ZXItb2YtdGVuIGVkZ2UgY2FzZXMKK2RxbXVsMTAwMSBtdWx0aXBseSAgMSAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTAKK2RxbXVsMTAwMiBtdWx0aXBseSAgMSAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwCitkcW11bDEwMDMgbXVsdGlwbHkgIDEgICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAKK2RxbXVsMTAwNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAKK2RxbXVsMTAwNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwCitkcW11bDEwMDYgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAKK2RxbXVsMTAwNyBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAKK2RxbXVsMTAwOCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwCitkcW11bDEwMDkgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAKK2RxbXVsMTAxMCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAKK2RxbXVsMTAxMSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwCitkcW11bDEwMTIgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RxbXVsMTAxMyBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RxbXVsMTAxNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwCitkcW11bDEwMTUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDE2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwMTcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwMTggbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAxOSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwMjAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDIxIG11bHRpcGx5ICAxMCAgICAgMSAgICAgICAgICAgICAgICAtPiAxMAorZHFtdWwxMDIyIG11bHRpcGx5ICAxMCAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAKK2RxbXVsMTAyMyBtdWx0aXBseSAgMTAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMAorZHFtdWwxMDI0IG11bHRpcGx5ICAxMCAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMAorZHFtdWwxMDI1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAKK2RxbXVsMTAyNiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMAorZHFtdWwxMDI3IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMAorZHFtdWwxMDI4IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RxbXVsMTAyOSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMAorZHFtdWwxMDMwIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMAorZHFtdWwxMDMxIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RxbXVsMTAzMiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMAorZHFtdWwxMDMzIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMAorZHFtdWwxMDM0IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAzNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwMzYgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDM3IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwMzggbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDM5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDQwIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDQxIG11bHRpcGx5ICAxMDAgICAgMC4xICAgICAgICAgICAgICAtPiAxMC4wCitkcW11bDEwNDIgbXVsdGlwbHkgIDEwMCAgICAxICAgICAgICAgICAgICAgIC0+IDEwMAorZHFtdWwxMDQzIG11bHRpcGx5ICAxMDAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwCitkcW11bDEwNDQgbXVsdGlwbHkgIDEwMCAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwCitkcW11bDEwNDUgbXVsdGlwbHkgIDEwMCAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMAorZHFtdWwxMDQ2IG11bHRpcGx5ICAxMDAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwCitkcW11bDEwNDcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwCitkcW11bDEwNDggbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMAorZHFtdWwxMDQ5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwCitkcW11bDEwNTAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwCitkcW11bDEwNTEgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMAorZHFtdWwxMDUyIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwCitkcW11bDEwNTMgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkcW11bDEwNTQgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDU1IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTA1NiBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA1NyBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNTggbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNTkgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA2MCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDYxIG11bHRpcGx5ICAxMDAwICAgMC4wMSAgICAgICAgICAgICAtPiAxMC4wMAorZHFtdWwxMDYyIG11bHRpcGx5ICAxMDAwICAgMC4xICAgICAgICAgICAgICAtPiAxMDAuMAorZHFtdWwxMDYzIG11bHRpcGx5ICAxMDAwICAgMSAgICAgICAgICAgICAgICAtPiAxMDAwCitkcW11bDEwNjQgbXVsdGlwbHkgIDEwMDAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwCitkcW11bDEwNjUgbXVsdGlwbHkgIDEwMDAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMAorZHFtdWwxMDY2IG11bHRpcGx5ICAxMDAwICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwCitkcW11bDEwNjcgbXVsdGlwbHkgIDEwMDAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwCitkcW11bDEwNjggbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMAorZHFtdWwxMDY5IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwCitkcW11bDEwNzAgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwCitkcW11bDEwNzEgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMAorZHFtdWwxMDcyIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwCitkcW11bDEwNzMgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkcW11bDEwNzQgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDc1IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTA3NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDc3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDc4IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNzkgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDgwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTA4MSBtdWx0aXBseSAgMTAwMDAgIDAuMDAxICAgICAgICAgICAgLT4gMTAuMDAwCitkcW11bDEwODIgbXVsdGlwbHkgIDEwMDAwICAwLjAxICAgICAgICAgICAgIC0+IDEwMC4wMAorZHFtdWwxMDgzIG11bHRpcGx5ICAxMDAwMCAgMC4xICAgICAgICAgICAgICAtPiAxMDAwLjAKK2RxbXVsMTA4NCBtdWx0aXBseSAgMTAwMDAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMDAKK2RxbXVsMTA4NSBtdWx0aXBseSAgMTAwMDAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDAwCitkcW11bDEwODYgbXVsdGlwbHkgIDEwMDAwICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RxbXVsMTA4NyBtdWx0aXBseSAgMTAwMDAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RxbXVsMTA4OCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDAwCitkcW11bDEwODkgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RxbXVsMTA5MCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RxbXVsMTA5MSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDAwCitkcW11bDEwOTIgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RxbXVsMTA5MyBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RxbXVsMTA5NCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkcW11bDEwOTUgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDk2IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA5NyBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDk4IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA5OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTEwMCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTEwNyBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMAorZHFtdWwxMTA4IG11bHRpcGx5ICAxMDAwMCAgIDk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTkwMDAwCisKKy0tIE51bGwgdGVzdHMKK2RxbXVsOTk5MCBtdWx0aXBseSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsOTk5MSBtdWx0aXBseSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRNaW51cy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRNaW51cy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzdiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dE1pbnVzLmRlY1Rlc3QKQEAgLTAsMCArMSwxMjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFOZXh0TWludXMuZGVjVGVzdCAtLSBkZWNRdWFkIG5leHQgdGhhdCBpcyBsZXNzIFs3NTRyIG5leHRkb3duXSAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFuZXh0bTAwMSBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NAorZHFuZXh0bTAwMiBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQorZHFuZXh0bTAwMyBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0bTAwNCBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NworZHFuZXh0bTAwNSBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0bTAwNiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0bTAwNyBuZXh0bWludXMgIDEuMCAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRtMDA4IG5leHRtaW51cyAgMSAgICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dG0wMDkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0bTAxMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRtMDExIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK2RxbmV4dG0wMTIgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0bTAxMyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CitkcW5leHRtMDE0IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKK2RxbmV4dG0wMTUgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0bTAxNiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcW5leHRtMDE3IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKK2RxbmV4dG0wMTggbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0bTAxOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcW5leHRtMDIwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKworZHFuZXh0bTAyMSBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0bTAyMiBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NworZHFuZXh0bTAyMyBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0bTAyNCBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0bTAyNSBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHRtMDI2IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dG0wMjcgbmV4dG1pbnVzIC0xLjAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRtMDI4IG5leHRtaW51cyAtMSAgICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0bTAyOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHRtMDMwIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dG0wMzEgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0bTAzMiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHRtMDMzIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dG0wMzQgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0bTAzNSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHRtMDM2IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dG0wMzcgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0bTAzOCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCitkcW5leHRtMDM5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKworLS0gdWx0cmEtdGlueSBpbnB1dHMKK2RxbmV4dG0wNjIgbmV4dG1pbnVzICAxRS02MTc2ICAgICAgICAgLT4gICAwRS02MTc2CitkcW5leHRtMDY1IG5leHRtaW51cyAtMUUtNjE3NiAgICAgICAgIC0+ICAtMkUtNjE3NgorCistLSBaZXJvcworZHFuZXh0bTEwMCBuZXh0bWludXMgLTAgICAgICAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTAxIG5leHRtaW51cyAgMCAgICAgICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xMDIgbmV4dG1pbnVzICAwLjAwICAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwMyBuZXh0bWludXMgLTAuMDAgICAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTA0IG5leHRtaW51cyAgMEUtMzAwICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xMDUgbmV4dG1pbnVzICAwRSszMDAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwNiBuZXh0bWludXMgIDBFKzMwMDAwICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTA3IG5leHRtaW51cyAtMEUrMzAwMDAgICAgLT4gLTFFLTYxNzYKKworLS0gc3BlY2lhbHMKK2RxbmV4dG0xNTAgbmV4dG1pbnVzICAgSW5mICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0bTE1MSBuZXh0bWludXMgIC1JbmYgICAgLT4gLUluZmluaXR5CitkcW5leHRtMTUyIG5leHRtaW51cyAgIE5hTiAgICAtPiAgTmFOCitkcW5leHRtMTUzIG5leHRtaW51cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dG0xNTQgbmV4dG1pbnVzICAgTmFONzcgIC0+ICBOYU43NworZHFuZXh0bTE1NSBuZXh0bWludXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkcW5leHRtMTU2IG5leHRtaW51cyAgLU5hTiAgICAtPiAtTmFOCitkcW5leHRtMTU3IG5leHRtaW51cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dG0xNTggbmV4dG1pbnVzICAtTmFONzcgIC0+IC1OYU43NworZHFuZXh0bTE1OSBuZXh0bWludXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkcW5leHRtMTcwIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NAorZHFuZXh0bTE3MSBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQKK2RxbmV4dG0xNzIgbmV4dG1pbnVzICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQKK2RxbmV4dG0xNzMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQKK2RxbmV4dG0xNzQgbmV4dG1pbnVzICA5RS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IDhFLTYxNzYKK2RxbmV4dG0xNzUgbmV4dG1pbnVzICA5LjlFLTYxNzUgICAgICAgICAgICAgICAgIC0+IDkuOEUtNjE3NQorZHFuZXh0bTE3NiBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NworZHFuZXh0bTE3NyBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NAorZHFuZXh0bTE3OCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NAorZHFuZXh0bTE3OSBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NAorZHFuZXh0bTE4MCBuZXh0bWludXMgIDBFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xODEgbmV4dG1pbnVzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IDBFLTYxNzYKK2RxbmV4dG0xODIgbmV4dG1pbnVzICAyRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IDFFLTYxNzYKKworZHFuZXh0bTE4MyBuZXh0bWludXMgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xODQgbmV4dG1pbnVzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0yRS02MTc2CitkcW5leHRtMTg1IG5leHRtaW51cyAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtM0UtNjE3NgorZHFuZXh0bTE4NiBuZXh0bWludXMgIC0xMEUtNjE3NiAgICAgICAgICAgICAgICAgLT4gLTEuMUUtNjE3NQorZHFuZXh0bTE4NyBuZXh0bWludXMgIC0xMDBFLTYxNzYgICAgICAgICAgICAgICAgLT4gLTEuMDFFLTYxNzQKK2RxbmV4dG0xODggbmV4dG1pbnVzICAtMTAwMDAwRS02MTc2ICAgICAgICAgICAgIC0+IC0xLjAwMDAxRS02MTcxCitkcW5leHRtMTg5IG5leHRtaW51cyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dG0xOTAgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0bTE5MSBuZXh0bWludXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHRtMTkyIG5leHRtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dG0xOTMgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC1JbmZpbml0eQorCistLSBOdWxsIHRlc3RzCitkcW5leHRtOTAwIG5leHRtaW51cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRQbHVzLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dFBsdXMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzhlOWNkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRQbHVzLmRlY1Rlc3QKQEAgLTAsMCArMSwxMjQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFOZXh0UGx1cy5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0aGF0IGlzIGdyZWF0ZXIgWzc1NHIgbmV4dHVwXSAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFuZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHRwMDAyIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHAwMDMgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRwMDA1IG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0cDAwNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHAwMDggbmV4dHBsdXMgIDEgICAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHRwMDEwIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0cDAxMSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHRwMDEzIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0cDAxNCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHRwMDE2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0cDAxNyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCitkcW5leHRwMDE5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorCitkcW5leHRwMDIxIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2RxbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQorZHFuZXh0cDAyMyBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHRwMDI0IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0cDAyNiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRwMDI3IG5leHRwbHVzIC0xLjAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0cDAyOCBuZXh0cGx1cyAtMSAgICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHAwMjkgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0cDAzMSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK2RxbmV4dHAwMzIgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0cDAzNCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKK2RxbmV4dHAwMzUgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0cDAzNyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKK2RxbmV4dHAwMzggbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0cDA0MCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKworLS0gWmVyb3MKK2RxbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS02MTc2CisKKy0tIHNwZWNpYWxzCitkcW5leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFuZXh0cDE1MSBuZXh0cGx1cyAgLUluZiAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0cDE1MyBuZXh0cGx1cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHAxNTQgbmV4dHBsdXMgICBOYU43NyAgLT4gIE5hTjc3CitkcW5leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0cDE1NiBuZXh0cGx1cyAgLU5hTiAgICAtPiAtTmFOCitkcW5leHRwMTU3IG5leHRwbHVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcKK2RxbmV4dHAxNTkgbmV4dHBsdXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkcW5leHRwMTcwIG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NAorZHFuZXh0cDE3MSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQKK2RxbmV4dHAxNzIgbmV4dHBsdXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQKK2RxbmV4dHAxNzMgbmV4dHBsdXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQKK2RxbmV4dHAxNzQgbmV4dHBsdXMgIC05RS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLThFLTYxNzYKK2RxbmV4dHAxNzUgbmV4dHBsdXMgIC05LjlFLTYxNzUgICAgICAgICAgICAgICAgLT4gLTkuOEUtNjE3NQorZHFuZXh0cDE3NiBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NworZHFuZXh0cDE3NyBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NAorZHFuZXh0cDE3OCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NAorZHFuZXh0cDE3OSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NAorZHFuZXh0cDE4MCBuZXh0cGx1cyAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDE4MSBuZXh0cGx1cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMEUtNjE3NgorZHFuZXh0cDE4MiBuZXh0cGx1cyAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NgorCitkcW5leHRwMTgzIG5leHRwbHVzICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTg0IG5leHRwbHVzICAgMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAyRS02MTc2CitkcW5leHRwMTg1IG5leHRwbHVzICAgMkUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAzRS02MTc2CitkcW5leHRwMTg2IG5leHRwbHVzICAgMTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICAxLjFFLTYxNzUKK2RxbmV4dHAxODcgbmV4dHBsdXMgICAxMDBFLTYxNzYgICAgICAgICAgICAgICAgLT4gIDEuMDFFLTYxNzQKK2RxbmV4dHAxODggbmV4dHBsdXMgICAxMDAwMDBFLTYxNzYgICAgICAgICAgICAgLT4gIDEuMDAwMDFFLTYxNzEKK2RxbmV4dHAxODkgbmV4dHBsdXMgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHRwMTkwIG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0cDE5MSBuZXh0cGx1cyAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHAxOTIgbmV4dHBsdXMgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHRwMTkzIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICBJbmZpbml0eQorCistLSBOdWxsIHRlc3RzCitkcW5leHRwOTAwIG5leHRwbHVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dFRvd2FyZC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRUb3dhcmQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDdlN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRUb3dhcmQuZGVjVGVzdApAQCAtMCwwICsxLDM3NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcU5leHRUb3dhcmQuZGVjVGVzdCAtLSBkZWNRdWFkIG5leHQgdG93YXJkIHJocyBbNzU0ciBuZXh0YWZ0ZXJdICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCisKKy0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcworZHFuZXh0dDAwMSBuZXh0dG93YXJkICAgMTAgICAgMTAgICAtPiAgMTAKK2RxbmV4dHQwMDIgbmV4dHRvd2FyZCAgLTEwICAgLTEwICAgLT4gLTEwCitkcW5leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDAwNCBuZXh0dG93YXJkICAgMSAgICAtMTAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MDA1IG5leHR0b3dhcmQgIC0xICAgICAxMCAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0MDA3IG5leHR0b3dhcmQgICAwICAgICAxMCAgIC0+ICAxRS02MTc2ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MDA4IG5leHR0b3dhcmQgICAwICAgIC0xMCAgIC0+IC0xRS02MTc2ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MDA5IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCArSW5maW5pdHkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDAxMCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQwMTEgbmV4dHRvd2FyZCAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgMTAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0dDAxMiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MDEzIG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLTEwICAtPiAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHQwMTQgbmV4dHRvd2FyZCAgLTEwIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAxNSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAxMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MDE2IG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQwMTcgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAxOCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CisKKy0tLS0tLS0gbGhzPXJocworLS0gZmluaXRlcworZHFuZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNworZHFuZXh0dDEwMiBuZXh0dG93YXJkICAgICAgICAgLTcgICAgICAtNyAtPiAtNworZHFuZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUKK2RxbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1CitkcW5leHR0MTA1IG5leHR0b3dhcmQgICAgICAgNy41MCAgICAgNy41IC0+ICA3LjUwCitkcW5leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwCitkcW5leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMAorZHFuZXh0dDEwOCBuZXh0dG93YXJkICAgICAgLTcuNTAwICAgLTcuNSAtPiAtNy41MDAKKworLS0gemVyb3MKK2RxbmV4dHQxMTEgbmV4dHRvd2FyZCAgICAgICAgICAwICAgICAgIDAgLT4gIDAKK2RxbmV4dHQxMTIgbmV4dHRvd2FyZCAgICAgICAgIC0wICAgICAgLTAgLT4gLTAKK2RxbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQKK2RxbmV4dHQxMTQgbmV4dHRvd2FyZCAgICAgIC0wRSs0ICAgICAgLTAgLT4gLTBFKzQKK2RxbmV4dHQxMTUgbmV4dHRvd2FyZCAgICAgMC4wMDAwMDAwMDAwMCAgIDAuMDAwMDAwMDAwMDAwIC0+ICAwRS0xMQorZHFuZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAwMDAwMDAwICAtMC4wMCAgICAgICAgICAgLT4gLTBFLTExCitkcW5leHR0MTE3IG5leHR0b3dhcmQgICAgICAwRS0xNDEgICAgICAwIC0+ICAwRS0xNDEKK2RxbmV4dHQxMTggbmV4dHRvd2FyZCAgICAgLTBFLTE0MSAgIC0wMDAgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFuZXh0dDEyMSBuZXh0dG93YXJkICAgMjY4MjY4MjY4ICAgIDI2ODI2ODI2OCAtPiAgIDI2ODI2ODI2OAorZHFuZXh0dDEyMiBuZXh0dG93YXJkICAtMjY4MjY4MjY4ICAgLTI2ODI2ODI2OCAtPiAgLTI2ODI2ODI2OAorZHFuZXh0dDEyMyBuZXh0dG93YXJkICAgMTM0MTM0MTM0ICAgIDEzNDEzNDEzNCAtPiAgIDEzNDEzNDEzNAorZHFuZXh0dDEyNCBuZXh0dG93YXJkICAtMTM0MTM0MTM0ICAgLTEzNDEzNDEzNCAtPiAgLTEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorZHFuZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0MTMyIG5leHR0b3dhcmQgIDFFLTYxNDMgICAgICAgICAgIDFFLTYxNDMgICAgICAgICAgICAtPiAgIDFFLTYxNDMKK2RxbmV4dHQxMzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFuZXh0dDEzNCBuZXh0dG93YXJkICAxRS02MTc2ICAgICAgICAgICAxRS02MTc2ICAgICAgICAgICAgLT4gICAxRS02MTc2CisKK2RxbmV4dHQxMzUgbmV4dHRvd2FyZCAgLTFFLTYxNzYgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgIC0+ICAtMUUtNjE3NgorZHFuZXh0dDEzNiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcW5leHR0MTM3IG5leHR0b3dhcmQgIC0xRS02MTQzICAgICAgICAgIC0xRS02MTQzICAgICAgICAgICAtPiAgLTFFLTYxNDMKK2RxbmV4dHQxMzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorCistLS0tLS0tIGxoczxyaHMKK2RxbmV4dHQyMDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHR0MjAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NworZHFuZXh0dDIwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHQyMDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MjA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHR0MjA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0MjA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQyMDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0dDIxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0dDIxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0dDIxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorZHFuZXh0dDIxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorCitkcW5leHR0MjIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NAorZHFuZXh0dDIyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgSW5maW5pdHkgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQorZHFuZXh0dDIyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dHQyMjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHR0MjI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0dDIyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQyMjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQyMjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQyMjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHQyMzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQyMzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK2RxbmV4dHQyMzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dHQyMzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHQyMzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKK2RxbmV4dHQyMzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dHQyMzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHQyMzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKK2RxbmV4dHQyMzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dHQyMzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHQyNDAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKworLS0gWmVyb3MKK2RxbmV4dHQzMDAgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzAxIG5leHR0b3dhcmQgIDAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwMiBuZXh0dG93YXJkICAwRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDMgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzA0IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwNSBuZXh0dG93YXJkIC0wICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDYgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzA3IG5leHR0b3dhcmQgLTBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwOCBuZXh0dG93YXJkIC0wRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDkgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNwZWNpYWxzCitkcW5leHR0MzUwIG5leHR0b3dhcmQgICBJbmYgICAgSW5maW5pdHkgLT4gIEluZmluaXR5CitkcW5leHR0MzUxIG5leHR0b3dhcmQgIC1JbmYgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0MzUyIG5leHR0b3dhcmQgICBOYU4gICAgSW5maW5pdHkgLT4gIE5hTgorZHFuZXh0dDM1MyBuZXh0dG93YXJkICBzTmFOICAgIEluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDM1NCBuZXh0dG93YXJkICAgTmFONzcgIEluZmluaXR5IC0+ICBOYU43NworZHFuZXh0dDM1NSBuZXh0dG93YXJkICBzTmFOODggIEluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDM1NiBuZXh0dG93YXJkICAtTmFOICAgIEluZmluaXR5IC0+IC1OYU4KK2RxbmV4dHQzNTcgbmV4dHRvd2FyZCAtc05hTiAgICBJbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQzNTggbmV4dHRvd2FyZCAgLU5hTjc3ICBJbmZpbml0eSAtPiAtTmFONzcKK2RxbmV4dHQzNTkgbmV4dHRvd2FyZCAtc05hTjg4ICBJbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK2RxbmV4dHQzNzAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0CitkcW5leHR0MzcxIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NAorZHFuZXh0dDM3MiBuZXh0dG93YXJkICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzNzMgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwRS02MTQzICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzc0IG5leHR0b3dhcmQgIC05RS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC04RS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM3NSBuZXh0dG93YXJkICAtOS45RS02MTc1ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS44RS02MTc1ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzNzYgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzc3IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM3OCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzNzkgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzgwIG5leHR0b3dhcmQgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4MSBuZXh0dG93YXJkICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW5leHR0MzgyIG5leHR0b3dhcmQgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcW5leHR0MzgzIG5leHR0b3dhcmQgICAwRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4NCBuZXh0dG93YXJkICAgMUUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMkUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODUgbmV4dHRvd2FyZCAgIDJFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDNFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzg2IG5leHR0b3dhcmQgICAxMEUtNjE3NiAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjFFLTYxNzUgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4NyBuZXh0dG93YXJkICAgMTAwRS02MTc2ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMUUtNjE3NCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODggbmV4dHRvd2FyZCAgIDEwMDAwMEUtNjE3NiAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDFFLTYxNzEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzg5IG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0dDM5MCBuZXh0dG93YXJkICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHQzOTEgbmV4dHRvd2FyZCAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHR0MzkyIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NCAgSW5maW5pdHkgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NAorZHFuZXh0dDM5MyBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQzOTQgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICBJbmZpbml0eSAgLT4gIEluZmluaXR5ICAgICAgICAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tLS0gbGhzPnJocworZHFuZXh0dDQwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NAorZHFuZXh0dDQwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQorZHFuZXh0dDQwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0dDQwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NworZHFuZXh0dDQwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0dDQwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDQwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0NDA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ0MDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0NDExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK2RxbmV4dHQ0MTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CitkcW5leHR0NDE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKK2RxbmV4dHQ0MTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcW5leHR0NDE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKK2RxbmV4dHQ0MTggbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcW5leHR0NDIwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKworZHFuZXh0dDQyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0dDQyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NworZHFuZXh0dDQyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0dDQyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDQyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHR0NDI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ0MjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0NDI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDQyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dHQ0MzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0dDQzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dHQ0MzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0dDQzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dHQ0MzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0dDQzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCitkcW5leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKworLS0gWmVyb3MKK2RxbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NTAxIG5leHR0b3dhcmQgIDAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwMiBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NTA0IG5leHR0b3dhcmQgIDBFLTMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwNSBuZXh0dG93YXJkICAwRSszMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NTA3IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBzcGVjaWFscworZHFuZXh0dDU1MCBuZXh0dG93YXJkICAgSW5mICAgICAtSW5maW5pdHkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0NTUxIG5leHR0b3dhcmQgIC1JbmYgICAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkKK2RxbmV4dHQ1NTIgbmV4dHRvd2FyZCAgIE5hTiAgICAgLUluZmluaXR5IC0+ICBOYU4KK2RxbmV4dHQ1NTMgbmV4dHRvd2FyZCAgc05hTiAgICAgLUluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDU1NCBuZXh0dG93YXJkICAgTmFONzcgICAtSW5maW5pdHkgLT4gIE5hTjc3CitkcW5leHR0NTU1IG5leHR0b3dhcmQgIHNOYU44OCAgIC1JbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ1NTYgbmV4dHRvd2FyZCAgLU5hTiAgICAgLUluZmluaXR5IC0+IC1OYU4KK2RxbmV4dHQ1NTcgbmV4dHRvd2FyZCAtc05hTiAgICAgLUluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDU1OCBuZXh0dG93YXJkICAtTmFONzcgICAtSW5maW5pdHkgLT4gLU5hTjc3CitkcW5leHR0NTU5IG5leHR0b3dhcmQgLXNOYU44OCAgIC1JbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK2RxbmV4dHQ2NzAgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0CitkcW5leHR0NjcxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NAorZHFuZXh0dDY3MiBuZXh0dG93YXJkICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY3NCBuZXh0dG93YXJkICA5RS02MTc2ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gOEUtNjE3NiAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY3NSBuZXh0dG93YXJkICA5LjlFLTYxNzUgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gOS44RS02MTc1ICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY3NiBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NyAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY3NyBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY3OCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY3OSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY4MCBuZXh0dG93YXJkICAwRS02MTc2ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY4MSBuZXh0dG93YXJkICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gMEUtNjE3NiAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW5leHR0NjgyIG5leHR0b3dhcmQgIDJFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAxRS02MTc2ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCisKK2RxbmV4dHQ2ODMgbmV4dHRvd2FyZCAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODQgbmV4dHRvd2FyZCAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0yRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODUgbmV4dHRvd2FyZCAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0zRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODYgbmV4dHRvd2FyZCAgLTEwRS02MTc2ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjFFLTYxNzUgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODcgbmV4dHRvd2FyZCAgLTEwMEUtNjE3NiAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAxRS02MTc0ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODggbmV4dHRvd2FyZCAgLTEwMDAwMEUtNjE3NiAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAxRS02MTcxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODkgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0dDY5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHR0NjkxIG5leHR0b3dhcmQgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHQ2OTIgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAtSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDY5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC1JbmZpbml0eSAgLT4gLUluZmluaXR5ICAgICAgICAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tLS0gU3BlY2lhbHMKK2RxbmV4dHQ3ODAgbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW5leHR0NzgxIG5leHR0b3dhcmQgLUluZiAgLTEwMDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDc4MiBuZXh0dG93YXJkIC1JbmYgIC0xICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ3ODMgbmV4dHRvd2FyZCAtSW5mICAtMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0Nzg0IG5leHR0b3dhcmQgLUluZiAgIDAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDc4NSBuZXh0dG93YXJkIC1JbmYgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ3ODYgbmV4dHRvd2FyZCAtSW5mICAgMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0Nzg3IG5leHR0b3dhcmQgLTEwMDAgLUluZiAgIC0+IC0xMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDc4OCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbmV4dHQ3ODkgbmV4dHRvd2FyZCAtMSAgICAtSW5mICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0NzkwIG5leHR0b3dhcmQgLTAgICAgLUluZiAgIC0+IC0xRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDc5MSBuZXh0dG93YXJkICAwICAgIC1JbmYgICAtPiAtMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ3OTIgbmV4dHRvd2FyZCAgMSAgICAtSW5mICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDc5MyBuZXh0dG93YXJkICAxMDAwIC1JbmYgICAtPiAgOTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ3OTQgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CisKK2RxbmV4dHQ4MDAgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODAxIG5leHR0b3dhcmQgIEluZiAgLTEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwMiBuZXh0dG93YXJkICBJbmYgIC0xICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MDMgbmV4dHRvd2FyZCAgSW5mICAtMCAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODA0IG5leHR0b3dhcmQgIEluZiAgIDAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwNSBuZXh0dG93YXJkICBJbmYgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MDYgbmV4dHRvd2FyZCAgSW5mICAgMTAwMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODA3IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFuZXh0dDgwOCBuZXh0dG93YXJkIC0xMDAwICBJbmYgICAtPiAtOTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ4MDkgbmV4dHRvd2FyZCAtSW5mICAgSW5mICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODEwIG5leHR0b3dhcmQgLTEgICAgIEluZiAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0ODEyIG5leHR0b3dhcmQgIDAgICAgIEluZiAgIC0+ICAxRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDgxMyBuZXh0dG93YXJkICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ4MTQgbmV4dHRvd2FyZCAgMTAwMCAgSW5mICAgLT4gIDEwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0ODE1IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW5leHR0ODIxIG5leHR0b3dhcmQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxbmV4dHQ4MjIgbmV4dHRvd2FyZCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFuZXh0dDgyMyBuZXh0dG93YXJkICBOYU4gLTEgICAgICAtPiAgTmFOCitkcW5leHR0ODI0IG5leHR0b3dhcmQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxbmV4dHQ4MjUgbmV4dHRvd2FyZCAgTmFOICAwICAgICAgLT4gIE5hTgorZHFuZXh0dDgyNiBuZXh0dG93YXJkICBOYU4gIDEgICAgICAtPiAgTmFOCitkcW5leHR0ODI3IG5leHR0b3dhcmQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxbmV4dHQ4MjggbmV4dHRvd2FyZCAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFuZXh0dDgyOSBuZXh0dG93YXJkICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODMwIG5leHR0b3dhcmQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzEgbmV4dHRvd2FyZCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzMiBuZXh0dG93YXJkIC0xICAgIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODMzIG5leHR0b3dhcmQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzQgbmV4dHRvd2FyZCAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzNSBuZXh0dG93YXJkICAxICAgIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODM2IG5leHR0b3dhcmQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzcgbmV4dHRvd2FyZCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcW5leHR0ODQxIG5leHR0b3dhcmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODQyIG5leHR0b3dhcmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODQzIG5leHR0b3dhcmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODQ0IG5leHR0b3dhcmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODQ1IG5leHR0b3dhcmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODQ2IG5leHR0b3dhcmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODQ3IG5leHR0b3dhcmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODQ4IG5leHR0b3dhcmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODQ5IG5leHR0b3dhcmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODUwIG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODUxIG5leHR0b3dhcmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODUyIG5leHR0b3dhcmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODUzIG5leHR0b3dhcmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODU0IG5leHR0b3dhcmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODU1IG5leHR0b3dhcmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODU2IG5leHR0b3dhcmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODU3IG5leHR0b3dhcmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODU4IG5leHR0b3dhcmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODU5IG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxbmV4dHQ4NjEgbmV4dHRvd2FyZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RxbmV4dHQ4NjIgbmV4dHRvd2FyZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RxbmV4dHQ4NjMgbmV4dHRvd2FyZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2RxbmV4dHQ4NjQgbmV4dHRvd2FyZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RxbmV4dHQ4NjUgbmV4dHRvd2FyZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RxbmV4dHQ4NjYgbmV4dHRvd2FyZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2RxbmV4dHQ4NjcgbmV4dHRvd2FyZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RxbmV4dHQ4NjggbmV4dHRvd2FyZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RxbmV4dHQ4NjkgbmV4dHRvd2FyZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkcW5leHR0ODcxIG5leHR0b3dhcmQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzIgbmV4dHRvd2FyZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3MyBuZXh0dG93YXJkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODc0IG5leHR0b3dhcmQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzUgbmV4dHRvd2FyZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3NiBuZXh0dG93YXJkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODc3IG5leHR0b3dhcmQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzggbmV4dHRvd2FyZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3OSBuZXh0dG93YXJkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODgwIG5leHR0b3dhcmQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4ODEgbmV4dHRvd2FyZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg4MiBuZXh0dG93YXJkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2RxbmV4dHQ4ODMgbmV4dHRvd2FyZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg4NCBuZXh0dG93YXJkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RxbmV4dHQ4ODUgbmV4dHRvd2FyZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitkcW5leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ5MDEgbmV4dHRvd2FyZCAjICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxT3IuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFPci5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZDM0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxT3IuZGVjVGVzdApAQCAtMCwwICsxLDQwMSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcU9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgT1IgZm9yIGRlY1F1YWRzICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkcW9yMDAxIG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCitkcW9yMDAyIG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxCitkcW9yMDAzIG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCitkcW9yMDA0IG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxCitkcW9yMDA1IG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAxMTEwCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorZHFvcjAwNiBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2Rxb3IwMDcgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFvcjAwOCBvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW9yMDA5IG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxb3IwMTAgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkcW9yMDExIG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxb3IwMTIgb3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFvcjAxMyBvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworZHFvcjYwMSBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDIgb3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjAzIG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwNCBvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDUgb3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjA2IG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwNyBvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDggb3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjA5IG9yIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxMCBvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTEgb3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjEyIG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxMyBvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTQgb3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjE1IG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxNiBvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTcgb3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjE4IG9yIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxOSBvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjAgb3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjIxIG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyMiBvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjMgb3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjI0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyNSBvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjI3IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyOCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2Mjkgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjMwIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYzMSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MzIgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjMzIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYzNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKKworZHFvcjY0MSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDIgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQzIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0NCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDUgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQ2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0NyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDggb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQ5IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1MCBvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTEgb3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjUyIG9yIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1MyBvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTQgb3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjU1IG9yIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1NiBvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTcgb3IgMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCAxMDEwMTAxMDEwMTAxMDEwMDAxMDEwMTAxMDEwMTAxMDEwICAtPiAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwCitkcW9yNjU4IG9yIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1OSBvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjAgb3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjYxIG9yIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2MiBvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjMgb3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjY0IG9yIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2NSBvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjYgb3IgMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMSAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAxMDEwMTAxICAtPiAgMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxCitkcW9yNjY3IG9yIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2OCBvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2Njkgb3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjcwIG9yIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY3MSBvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NzIgb3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjczIG9yIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY3NCBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NzUgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCitkcW9yNjc2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorCitkcW9yNjgxIG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMCAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4MiBvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTAxMDExMTExMTExMTExMTExMTExMTExMDEgIC0+IDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODMgb3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTAxMTExMTAxMTEwMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjg0IG9yIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMDExMTAxMTExMTAxMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4NSBvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTAxMTExMTExMDExMTExMTExMTExMTExMDExMTEgIC0+IDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODYgb3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTAxMTExMTExMTEwMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjg3IG9yIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMDExMTExMTExMTAxMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4OCBvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTEwMTExMTExMTExMDExMTExMTExMDExMTExMTEgIC0+IDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODkgb3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTAxMTExMTAxMTExMTExMTEwMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjkwIG9yIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMDExMTExMTExMTAxMTExMDExMTExMTExMCAgLT4gMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY5MSBvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTEwMTExMTExMTExMDExMDExMTExMTExMDEgIC0+IDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTIgb3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTEwMDExMTExMTExMDExICAtPiAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjkzIG9yIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMDAxMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMQorZHFvcjY5NCBvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMDExMDExMTExMDExMTEgIC0+IDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTUgb3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMDExMTEwMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExCitkcW9yNjk2IG9yIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMDExMTExMTAxMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMQorZHFvcjY5NyBvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMDExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTggb3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDAxMTExMTExMDEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExCitkcW9yNjk5IG9yIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMDExMTExMDExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMQorZHFvcjcwMCBvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTEwMTExMDExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEKK2Rxb3I3MDEgb3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTAxMDExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExCitkcW9yNzAyIG9yIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMDExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMQorZHFvcjcwMyBvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMDEwMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEKK2Rxb3I3MDQgb3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMDExMTAxMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExCitkcW9yNzA1IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMDExMTExMTExMDExMTExMTExMDExMTExMDExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMQorZHFvcjcwNiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDEwMTExMTExMDExMTExMTExMDExMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEKK2Rxb3I3MDcgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTAxMTExMDExMTExMTExMDExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExCitkcW9yNzA4IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMDExMDExMTExMTExMDExMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMQorZHFvcjcwOSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTEwMDExMTExMTExMDExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEKK2Rxb3I3MTAgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMDAxMTExMTExMDExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExCitkcW9yNzExIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMDExMDExMTExMDExMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMQorZHFvcjcxMiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMDExMTEwMTExMDExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEKK2Rxb3I3MTMgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMDExMTExMTAxMDExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxCitkcW9yNzE0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorCisKKworLS0gICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYKK2Rxb3IwMjAgb3IgMTExMTExMTExMTExMTExMSAgICAgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTEKK2Rxb3IwMjEgb3IgIDExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTEKK2Rxb3IwMjIgb3IgICAxMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTEKK2Rxb3IwMjMgb3IgICAgMTExMTExMTExMTExMSAgICAgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTEKK2Rxb3IwMjQgb3IgICAgIDExMTExMTExMTExMSAgICAgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTEKK2Rxb3IwMjUgb3IgICAgICAxMTExMTExMTExMSAgICAgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTEKK2Rxb3IwMjYgb3IgICAgICAgMTExMTExMTExMSAgICAgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTEKK2Rxb3IwMjcgb3IgICAgICAgIDExMTExMTExMSAgICAgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTEKK2Rxb3IwMjggb3IgICAgICAgICAxMTExMTExMSAgICAgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTEKK2Rxb3IwMjkgb3IgICAgICAgICAgMTExMTExMSAgICAgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTEKK2Rxb3IwMzAgb3IgICAgICAgICAgIDExMTExMSAgICAgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTEKK2Rxb3IwMzEgb3IgICAgICAgICAgICAxMTExMSAgICAgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTEKK2Rxb3IwMzIgb3IgICAgICAgICAgICAgMTExMSAgICAgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTEKK2Rxb3IwMzMgb3IgICAgICAgICAgICAgIDExMSAgICAgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTEKK2Rxb3IwMzQgb3IgICAgICAgICAgICAgICAxMSAgICAgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTEKK2Rxb3IwMzUgb3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDEKK2Rxb3IwMzYgb3IgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDAKKworZHFvcjA0MiBvciAgMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMTExMTExMTExMDAwMDAwMAorZHFvcjA0MyBvciAgIDExMTExMTEwMDAwMDAwICAgICAxMDAwMDAwMTAwMDAwMDAwICAtPiAgMTAxMTExMTExMDAwMDAwMAorZHFvcjA0NCBvciAgICAxMTExMTEwMDAwMDAwICAgICAxMDAwMDAxMDAwMDAwMDAwICAtPiAgMTAwMTExMTExMDAwMDAwMAorZHFvcjA0NSBvciAgICAgMTExMTEwMDAwMDAwICAgICAxMDAwMDEwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMAorZHFvcjA0NiBvciAgICAgIDExMTEwMDAwMDAwICAgICAxMDAwMTAwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMAorZHFvcjA0NyBvciAgICAgICAxMTEwMDAwMDAwICAgICAxMDAxMDAwMDAwMDAwMDAwICAtPiAgMTAwMTAwMTExMDAwMDAwMAorZHFvcjA0OCBvciAgICAgICAgMTEwMDAwMDAwICAgICAxMDEwMDAwMDAwMDAwMDAwICAtPiAgMTAxMDAwMDExMDAwMDAwMAorZHFvcjA0OSBvciAgICAgICAgIDEwMDAwMDAwICAgICAxMTAwMDAwMDAwMDAwMDAwICAtPiAgMTEwMDAwMDAxMDAwMDAwMAorCitkcW9yMDkwIG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDkxIG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDkyIG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDkzIG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDk0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCitkcW9yMDk1IG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDk2IG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDk3IG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDk4IG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgMTExMTExMTExCisKK2Rxb3IxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDEgb3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDIgb3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2Rxb3IxMDUgb3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDcgb3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDggb3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTEKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkcW9yMjIwIG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjIxIG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjIyIG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjIzIG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI0IG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI1IG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI2IG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI3IG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI4IG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI5IG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjMwIG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjMxIG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjMyIG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitkcW9yMjQwIG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjQxIG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjQzIG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjQ0IG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZHFvcjI1MCBvciAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTEgb3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjUyIG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1MyBvciAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTQgb3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjU1IG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1NiBvciAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTcgb3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjU4IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1OSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNjAgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjYxIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI2MiBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNjMgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjY0IG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI2NSBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2Rxb3IyNzAgb3IgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjcxIG9yICAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI3MiBvciAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNzMgb3IgIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjc0IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI3NSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNzYgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjc3IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2Rxb3IyODAgb3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjgxIG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4MiBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODMgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDkgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjg0IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4NSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODYgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMDEwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjg3IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2Rxb3IyODggb3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjg5IG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDAwMDAxIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5MCBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTEgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjkyIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5MyBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTQgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjk1IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2Rxb3IyOTYgb3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5NyBvciAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjk4IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTkgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDExMTEwMDExMTEwMDExMTEwMDAwMTEwMDAxMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZHFvcjMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzE5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzMyIG9yICAzICAgMUUtMTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzMzMgb3IgIDQgICAxLjAwMDAwMDAwRS0xOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjMzNCBvciAgNSAgIDFFLTEwMDkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzM1IG9yICA2ICAgLTFFLTEwMDkgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzMzYgb3IgIDcgICAtMS4wMDAwMDAwMEUtMTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjMzNyBvciAgOCAgIC0xRS0xOTk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzM4IG9yICA5ICAgLTkuOTk5OTk5OTlFKzE5OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDEgb3IgIDkuOTk5OTk5OTlFKzI5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0MiBvciAgMUUtMjk5OSAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQzIG9yICAxLjAwMDAwMDAwRS0yOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDQgb3IgIDFFLTEwMDkgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0NSBvciAgLTFFLTEwMDkgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQ2IG9yICAtMS4wMDAwMDAwMEUtMjk5OSAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDcgb3IgIC0xRS0yOTk5ICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0OCBvciAgLTkuOTk5OTk5OTlFKzI5OTkgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZHFvcjM2MSBvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzYyIG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNjMgb3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM2NCBvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzY1IG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNjYgb3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM3MSBvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzcyIG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNzMgb3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM3NCBvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzc1IG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNzYgb3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkcW9yNzgwIG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODEgb3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4MiBvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzgzIG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODQgb3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4NSBvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzg2IG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODcgb3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4OCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzg5IG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3OTAgb3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc5MSBvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzkyIG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3OTMgb3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc5NCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxb3I4MDAgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwMSBvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODAyIG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDMgb3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwNCBvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODA1IG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDYgb3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwNyBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODA4IG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDkgb3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgxMCBvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODExIG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MTIgb3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgxMyBvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODE0IG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MTUgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcW9yODIxIG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyMyBvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODI0IG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyNiBvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODI3IG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyOSBvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODMwIG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzMiBvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODMzIG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzNSBvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODM2IG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcW9yODQxIG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0MiBvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDMgb3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQ0IG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0NSBvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDYgb3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQ3IG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0OCBvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDkgb3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODUwIG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1MSBvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTIgb3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODUzIG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1NCBvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTUgb3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODU2IG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1NyBvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTggb3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODU5IG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW9yODYxIG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2MyBvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODY0IG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2NiBvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODY3IG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2OSBvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODcxIG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3MyBvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODc0IG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3NiBvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODc3IG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3OSBvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODgwIG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg4MiBvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODgzIG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg4NSBvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUGx1cy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVBsdXMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWVjYWFiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVBsdXMuZGVjVGVzdApAQCAtMCwwICsxLDg4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxUGx1cy5kZWNUZXN0IC0tIGRlY1F1YWQgMCt4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFwbHMwMDEgcGx1cyAgICAgICArNy41MCAgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkcXBsczAxMSBwbHVzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorZHFwbHMwMTIgcGx1cyAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRxbHMwMjEgcGx1cyAgICAgICAgIE5hTiAgLT4gTmFOCitkZHFsczAyMiBwbHVzICAgICAgICAtTmFOICAtPiAtTmFOCitkZHFsczAyMyBwbHVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHFsczAyNCBwbHVzICAgICAgIC1zTmFOICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RkcWxzMDMxIHBsdXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCitkZHFsczAzMiBwbHVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMKK2RkcWxzMDMzIHBsdXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24KK2RkcWxzMDM0IHBsdXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkcWxzMDM1IHBsdXMgICAgICAgTmFONzAgIC0+IE5hTjcwCitkZHFsczAzNiBwbHVzICAgICAgLU5hTjcwICAtPiAtTmFONzAKK2RkcWxzMDM3IHBsdXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkcWxzMDM4IHBsdXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZHFwbHMxMDEgcGx1cyAgICAgICAgICA3ICAgLT4gNworZHFwbHMxMDIgcGx1cyAgICAgICAgIC03ICAgLT4gLTcKK2RxcGxzMTAzIHBsdXMgICAgICAgICA3NSAgIC0+IDc1CitkcXBsczEwNCBwbHVzICAgICAgICAtNzUgICAtPiAtNzUKK2RxcGxzMTA1IHBsdXMgICAgICAgNy41MCAgIC0+IDcuNTAKK2RxcGxzMTA2IHBsdXMgICAgICAtNy41MCAgIC0+IC03LjUwCitkcXBsczEwNyBwbHVzICAgICAgIDcuNTAwICAtPiA3LjUwMAorZHFwbHMxMDggcGx1cyAgICAgIC03LjUwMCAgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkcXBsczExMSBwbHVzICAgICAgICAgIDAgICAtPiAwCitkcXBsczExMiBwbHVzICAgICAgICAgLTAgICAtPiAwCitkcXBsczExMyBwbHVzICAgICAgIDBFKzQgICAtPiAwRSs0CitkcXBsczExNCBwbHVzICAgICAgLTBFKzQgICAtPiAwRSs0CitkcXBsczExNSBwbHVzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RxcGxzMTE2IHBsdXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZHFwbHMxMTcgcGx1cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkcXBsczExOCBwbHVzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxcGxzMTIxIHBsdXMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcXBsczEyMiBwbHVzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFwbHMxMjMgcGx1cyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKK2RxcGxzMTI0IHBsdXMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcXBsczEzMSBwbHVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFwbHMxMzIgcGx1cyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFwbHMxMzMgcGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxcGxzMTM0IHBsdXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsCisKK2RxcGxzMTM1IHBsdXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgU3Vibm9ybWFsCitkcXBsczEzNiBwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFwbHMxMzcgcGx1cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0MworZHFwbHMxMzggcGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFRdWFudGl6ZS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVF1YW50aXplLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0NzFjMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFRdWFudGl6ZS5kZWNUZXN0CkBAIC0wLDAgKzEsODM2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxUXVhbnRpemUuZGVjVGVzdCAtLSBkZWNRdWFkIHF1YW50aXplIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTW9zdCBvZiB0aGUgdGVzdHMgaGVyZSBhc3N1bWUgYSAicmVndWxhciBwYXR0ZXJuIiwgd2hlcmUgdGhlCistLSBzaWduIGFuZCBjb2VmZmljaWVudCBhcmUgKzEuCistLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZAorLS0gMjAwNS4wNi4wOCBNb3JlIGV4dGVuc2l2ZSB0ZXN0cyBmb3IgJ2RvZXMgbm90IGZpdCcKKy0tIFtGb3JrZWQgZnJvbSBxdWFudGl6ZS5kZWNUZXN0IDIwMDYuMTEuMjVdCisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxcXVhMDAxIHF1YW50aXplIDAgICAgICAgMWUwICAgLT4gMAorZHFxdWEwMDIgcXVhbnRpemUgMSAgICAgICAxZTAgICAtPiAxCitkcXF1YTAwMyBxdWFudGl6ZSAwLjEgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAwNSBxdWFudGl6ZSAwLjEgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAwNiBxdWFudGl6ZSAwLjEgICAgIDFlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAwNyBxdWFudGl6ZSAwLjEgICAgMWUtMSAgIC0+IDAuMQorZHFxdWEwMDggcXVhbnRpemUgMC4xICAgIDFlLTIgICAtPiAwLjEwCitkcXF1YTAwOSBxdWFudGl6ZSAwLjEgICAgMWUtMyAgIC0+IDAuMTAwCitkcXF1YTAxMCBxdWFudGl6ZSAwLjkgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAxMSBxdWFudGl6ZSAwLjkgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAxMiBxdWFudGl6ZSAwLjkgICAgMWUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAxMyBxdWFudGl6ZSAwLjkgICAgMWUtMSAgIC0+IDAuOQorZHFxdWEwMTQgcXVhbnRpemUgMC45ICAgIDFlLTIgICAtPiAwLjkwCitkcXF1YTAxNSBxdWFudGl6ZSAwLjkgICAgMWUtMyAgIC0+IDAuOTAwCistLSBuZWdhdGl2ZXMKK2RxcXVhMDIxIHF1YW50aXplIC0wICAgICAgMWUwICAgLT4gLTAKK2RxcXVhMDIyIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gLTEKK2RxcXVhMDIzIHF1YW50aXplIC0wLjEgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAyNSBxdWFudGl6ZSAtMC4xICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMjYgcXVhbnRpemUgLTAuMSAgICAxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDI3IHF1YW50aXplIC0wLjEgICAxZS0xICAgLT4gLTAuMQorZHFxdWEwMjggcXVhbnRpemUgLTAuMSAgIDFlLTIgICAtPiAtMC4xMAorZHFxdWEwMjkgcXVhbnRpemUgLTAuMSAgIDFlLTMgICAtPiAtMC4xMDAKK2RxcXVhMDMwIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAzMSBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMzIgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDMzIHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQorZHFxdWEwMzQgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MAorZHFxdWEwMzUgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKK2RxcXVhMDM2IHF1YW50aXplIC0wLjUgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAzNyBxdWFudGl6ZSAtMC41ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMzggcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDM5IHF1YW50aXplIC0wLjUgICAxZS0xICAgLT4gLTAuNQorZHFxdWEwNDAgcXVhbnRpemUgLTAuNSAgIDFlLTIgICAtPiAtMC41MAorZHFxdWEwNDEgcXVhbnRpemUgLTAuNSAgIDFlLTMgICAtPiAtMC41MDAKK2RxcXVhMDQyIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA0MyBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNDQgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDQ1IHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQorZHFxdWEwNDYgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MAorZHFxdWEwNDcgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKKworLS0gZXhhbXBsZXMgZnJvbSBTcGVjaWZpY2F0aW9uCitkcXF1YTA2MCBxdWFudGl6ZSAyLjE3ICAgMC4wMDEgIC0+IDIuMTcwCitkcXF1YTA2MSBxdWFudGl6ZSAyLjE3ICAgMC4wMSAgIC0+IDIuMTcKK2RxcXVhMDYyIHF1YW50aXplIDIuMTcgICAwLjEgICAgLT4gMi4yIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNjMgcXVhbnRpemUgMi4xNyAgIDFlKzAgICAtPiAyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNjQgcXVhbnRpemUgMi4xNyAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNjUgcXVhbnRpemUgLUluZiAgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxcXVhMDY2IHF1YW50aXplIDIgICAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTA2NyBxdWFudGl6ZSAtMC4xICAgIDEgICAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNjggcXVhbnRpemUgLTAgICAgICAxZSs1ICAgICAtPiAtMEUrNQorZHFxdWEwNjkgcXVhbnRpemUgKzEyMzQ1MTIzNDU2Nzg5OTg3NjU0MzIxNjc4OTAxMjM0NS42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTA3MCBxdWFudGl6ZSAtOTg3NjUxMjM0NTY3ODk5ODc2NTQzMjE0MzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMDcxIHF1YW50aXplIDIxNyAgICAxZS0xICAgLT4gMjE3LjAKK2RxcXVhMDcyIHF1YW50aXplIDIxNyAgICAxZSswICAgLT4gMjE3CitkcXF1YTA3MyBxdWFudGl6ZSAyMTcgICAgMWUrMSAgIC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDc0IHF1YW50aXplIDIxNyAgICAxZSsyICAgLT4gMkUrMiBJbmV4YWN0IFJvdW5kZWQKKworLS0gZ2VuZXJhbCB0ZXN0cyAuLgorZHFxdWEwODkgcXVhbnRpemUgMTIgICAgIDFlKzQgICAtPiAwRSs0IEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTAgcXVhbnRpemUgMTIgICAgIDFlKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTEgcXVhbnRpemUgMTIgICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTIgcXVhbnRpemUgMTIgICAgIDFlKzEgICAtPiAxRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTMgcXVhbnRpemUgMS4yMzQ1IDFlLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTQgcXVhbnRpemUgMS4yMzU1IDFlLTIgICAtPiAxLjI0IEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTUgcXVhbnRpemUgMS4yMzQ1IDFlLTYgICAtPiAxLjIzNDUwMAorZHFxdWEwOTYgcXVhbnRpemUgOS45OTk5IDFlLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDk3IHF1YW50aXplIDAuMDAwMSAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDk4IHF1YW50aXplIDAuMDAxICAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDk5IHF1YW50aXplIDAuMDA5ICAxZS0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTAwIHF1YW50aXplIDkyICAgICAxZSsyICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWExMDEgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAgLTEKK2RxcXVhMTAyIHF1YW50aXplIC0xICAgICAxZS0xICAgLT4gIC0xLjAKK2RxcXVhMTAzIHF1YW50aXplIC0xICAgICAxZS0yICAgLT4gIC0xLjAwCitkcXF1YTEwNCBxdWFudGl6ZSAgMCAgICAgIDFlMCAgIC0+ICAwCitkcXF1YTEwNSBxdWFudGl6ZSAgMCAgICAgMWUtMSAgIC0+ICAwLjAKK2RxcXVhMTA2IHF1YW50aXplICAwICAgICAxZS0yICAgLT4gIDAuMDAKK2RxcXVhMTA3IHF1YW50aXplICAwLjAwICAgMWUwICAgLT4gIDAKK2RxcXVhMTA4IHF1YW50aXplICAwICAgICAxZSsxICAgLT4gIDBFKzEKK2RxcXVhMTA5IHF1YW50aXplICAwICAgICAxZSsyICAgLT4gIDBFKzIKK2RxcXVhMTEwIHF1YW50aXplICsxICAgICAgMWUwICAgLT4gIDEKK2RxcXVhMTExIHF1YW50aXplICsxICAgICAxZS0xICAgLT4gIDEuMAorZHFxdWExMTIgcXVhbnRpemUgKzEgICAgIDFlLTIgICAtPiAgMS4wMAorCitkcXF1YTEyMCBxdWFudGl6ZSAgIDEuMDQgIDFlLTMgLT4gIDEuMDQwCitkcXF1YTEyMSBxdWFudGl6ZSAgIDEuMDQgIDFlLTIgLT4gIDEuMDQKK2RxcXVhMTIyIHF1YW50aXplICAgMS4wNCAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjMgcXVhbnRpemUgICAxLjA0ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjQgcXVhbnRpemUgICAxLjA1ICAxZS0zIC0+ICAxLjA1MAorZHFxdWExMjUgcXVhbnRpemUgICAxLjA1ICAxZS0yIC0+ICAxLjA1CitkcXF1YTEyNiBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMxIHF1YW50aXplICAgMS4wNSAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMyIHF1YW50aXplICAgMS4wNiAgMWUtMyAtPiAgMS4wNjAKK2RxcXVhMTMzIHF1YW50aXplICAgMS4wNiAgMWUtMiAtPiAgMS4wNgorZHFxdWExMzQgcXVhbnRpemUgICAxLjA2ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzNSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMTQwIHF1YW50aXplICAgLTEwICAgIDFlLTIgIC0+ICAtMTAuMDAKK2RxcXVhMTQxIHF1YW50aXplICAgKzEgICAgIDFlLTIgIC0+ICAxLjAwCitkcXF1YTE0MiBxdWFudGl6ZSAgICsxMCAgICAxZS0yICAtPiAgMTAuMDAKK2RxcXVhMTQzIHF1YW50aXplICAgMUUrMzcgIDFlLTIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMTQ0IHF1YW50aXplICAgMUUtMzcgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDUgcXVhbnRpemUgICAxRS0zICAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0NiBxdWFudGl6ZSAgIDFFLTIgICAxZS0yICAtPiAgMC4wMQorZHFxdWExNDcgcXVhbnRpemUgICAxRS0xICAgMWUtMiAgLT4gIDAuMTAKK2RxcXVhMTQ4IHF1YW50aXplICAgMEUtMzcgIDFlLTIgIC0+ICAwLjAwCisKK2RxcXVhMTUwIHF1YW50aXplICAgMS4wNjAwIDFlLTUgLT4gIDEuMDYwMDAKK2RxcXVhMTUxIHF1YW50aXplICAgMS4wNjAwIDFlLTQgLT4gIDEuMDYwMAorZHFxdWExNTIgcXVhbnRpemUgICAxLjA2MDAgMWUtMyAtPiAgMS4wNjAgUm91bmRlZAorZHFxdWExNTMgcXVhbnRpemUgICAxLjA2MDAgMWUtMiAtPiAgMS4wNiBSb3VuZGVkCitkcXF1YTE1NCBxdWFudGl6ZSAgIDEuMDYwMCAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1NSBxdWFudGl6ZSAgIDEuMDYwMCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCistLSBhIGNvdXBsZSB3aGVyZSByb3VuZGluZyB3YXMgZGlmZmVyZW50IGluIGJhc2UgdGVzdHMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkcXF1YTE1NyBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTggcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1OSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIGJhc2UgdGVzdHMgd2l0aCBub24tMSBjb2VmZmljaWVudHMKK2RxcXVhMTYxIHF1YW50aXplIDAgICAgICAtOWUwICAgLT4gMAorZHFxdWExNjIgcXVhbnRpemUgMSAgICAgIC03ZTAgICAtPiAxCitkcXF1YTE2MyBxdWFudGl6ZSAwLjEgICAtMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2NSBxdWFudGl6ZSAwLjEgICAgMGUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2NiBxdWFudGl6ZSAwLjEgICAgIDJlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2NyBxdWFudGl6ZSAwLjEgICAgM2UtMSAgIC0+IDAuMQorZHFxdWExNjggcXVhbnRpemUgMC4xICAgNDRlLTIgICAtPiAwLjEwCitkcXF1YTE2OSBxdWFudGl6ZSAwLjEgIDU1NWUtMyAgIC0+IDAuMTAwCitkcXF1YTE3MCBxdWFudGl6ZSAwLjkgNjY2NmUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MSBxdWFudGl6ZSAwLjkgLTc3N2UrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MiBxdWFudGl6ZSAwLjkgIC04OGUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MyBxdWFudGl6ZSAwLjkgICAtOWUtMSAgIC0+IDAuOQorZHFxdWExNzQgcXVhbnRpemUgMC45ICAgIDBlLTIgICAtPiAwLjkwCitkcXF1YTE3NSBxdWFudGl6ZSAwLjkgIDEuMWUtMyAgIC0+IDAuOTAwMAorLS0gbmVnYXRpdmVzCitkcXF1YTE4MSBxdWFudGl6ZSAtMCAgICAxLjFlMCAgIC0+IC0wLjAKK2RxcXVhMTgyIHF1YW50aXplIC0xICAgICAtMWUwICAgLT4gLTEKK2RxcXVhMTgzIHF1YW50aXplIC0wLjEgIDExZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4NSBxdWFudGl6ZSAtMC4xIDExMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWExODYgcXVhbnRpemUgLTAuMSAgIDcxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTg3IHF1YW50aXplIC0wLjEgLTkxZS0xICAgLT4gLTAuMQorZHFxdWExODggcXVhbnRpemUgLTAuMSAtLjFlLTIgICAtPiAtMC4xMDAKK2RxcXVhMTg5IHF1YW50aXplIC0wLjEgIC0xZS0zICAgLT4gLTAuMTAwCitkcXF1YTE5MCBxdWFudGl6ZSAtMC45ICAgMGUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTEgcXVhbnRpemUgLTAuOSAgLTBlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkyIHF1YW50aXplIC0wLjkgLTEwZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MyBxdWFudGl6ZSAtMC45IDEwMGUtMSAgIC0+IC0wLjkKK2RxcXVhMTk0IHF1YW50aXplIC0wLjkgOTk5ZS0yICAgLT4gLTAuOTAKKworLS0gK3ZlIGV4cG9uZW50cyAuLgorZHFxdWEyMDEgcXVhbnRpemUgICAtMSAgIDFlKzAgLT4gIC0xCitkcXF1YTIwMiBxdWFudGl6ZSAgIC0xICAgMWUrMSAtPiAgLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMyBxdWFudGl6ZSAgIC0xICAgMWUrMiAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwNCBxdWFudGl6ZSAgICAwICAgMWUrMCAtPiAgMAorZHFxdWEyMDUgcXVhbnRpemUgICAgMCAgIDFlKzEgLT4gIDBFKzEKK2RxcXVhMjA2IHF1YW50aXplICAgIDAgICAxZSsyIC0+ICAwRSsyCitkcXF1YTIwNyBxdWFudGl6ZSAgICsxICAgMWUrMCAtPiAgMQorZHFxdWEyMDggcXVhbnRpemUgICArMSAgIDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwOSBxdWFudGl6ZSAgICsxICAgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMjAgcXVhbnRpemUgICAxLjA0IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMSBxdWFudGl6ZSAgIDEuMDQgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIyIHF1YW50aXplICAgMS4wNCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjMgcXVhbnRpemUgICAxLjA0IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyNCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjI1IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjYgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyNyBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjI4IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjkgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMCBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMxIHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzIgcXVhbnRpemUgICAxLjA2IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMyBxdWFudGl6ZSAgIDEuMDYgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjM0IHF1YW50aXplICAgMS4wNiAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzUgcXVhbnRpemUgICAxLjA2IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMjQwIHF1YW50aXplICAgLTEwICAgMWUrMSAgLT4gIC0xRSsxIFJvdW5kZWQKK2RxcXVhMjQxIHF1YW50aXplICAgKzEgICAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI0MiBxdWFudGl6ZSAgICsxMCAgIDFlKzEgIC0+ICAxRSsxIFJvdW5kZWQKK2RxcXVhMjQzIHF1YW50aXplICAgMUUrMSAgMWUrMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNDQgcXVhbnRpemUgICAxRSsyICAxZSsxICAtPiAgMS4wRSsyICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI0NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzEgIC0+ICAxLjAwRSszICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjQ2IHF1YW50aXplICAgMUUrNCAgMWUrMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNDcgcXVhbnRpemUgICAxRSs1ICAxZSsxICAtPiAgMS4wMDAwRSs1ICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI0OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzEgIC0+ICAxLjAwMDAwRSs2ICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjQ5IHF1YW50aXplICAgMUUrNyAgMWUrMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNTAgcXVhbnRpemUgICAxRSs4ICAxZSsxICAtPiAgMS4wMDAwMDAwRSs4ICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI1MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzEgIC0+ICAxLjAwMDAwMDAwRSs5IC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKKy0tIG5leHQgb25lIHRyaWVzIHRvIGFkZCA5IHplcm9zCitkcXF1YTI1MiBxdWFudGl6ZSAgIDFFKzM3IDFlKzEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMjUzIHF1YW50aXplICAgMUUtMzcgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI1NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNTUgcXVhbnRpemUgICAwRS0zNyAxZSsxICAtPiAgMEUrMQorZHFxdWEyNTYgcXVhbnRpemUgIC0wRS0zNyAxZSsxICAtPiAtMEUrMQorZHFxdWEyNTcgcXVhbnRpemUgIC0wRS0xICAxZSsxICAtPiAtMEUrMQorZHFxdWEyNTggcXVhbnRpemUgIC0wICAgICAxZSsxICAtPiAtMEUrMQorZHFxdWEyNTkgcXVhbnRpemUgIC0wRSsxICAxZSsxICAtPiAtMEUrMQorCitkcXF1YTI2MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzIgIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjYxIHF1YW50aXplICAgKzEgICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI2MiBxdWFudGl6ZSAgICsxMCAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNjMgcXVhbnRpemUgICAxRSsxICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjY0IHF1YW50aXplICAgMUUrMiAgMWUrMiAgLT4gIDFFKzIKK2RxcXVhMjY1IHF1YW50aXplICAgMUUrMyAgMWUrMiAgLT4gIDEuMEUrMworZHFxdWEyNjYgcXVhbnRpemUgICAxRSs0ICAxZSsyICAtPiAgMS4wMEUrNAorZHFxdWEyNjcgcXVhbnRpemUgICAxRSs1ICAxZSsyICAtPiAgMS4wMDBFKzUKK2RxcXVhMjY4IHF1YW50aXplICAgMUUrNiAgMWUrMiAgLT4gIDEuMDAwMEUrNgorZHFxdWEyNjkgcXVhbnRpemUgICAxRSs3ICAxZSsyICAtPiAgMS4wMDAwMEUrNworZHFxdWEyNzAgcXVhbnRpemUgICAxRSs4ICAxZSsyICAtPiAgMS4wMDAwMDBFKzgKK2RxcXVhMjcxIHF1YW50aXplICAgMUUrOSAgMWUrMiAgLT4gIDEuMDAwMDAwMEUrOQorZHFxdWEyNzIgcXVhbnRpemUgICAxRSsxMCAxZSsyICAtPiAgMS4wMDAwMDAwMEUrMTAKK2RxcXVhMjczIHF1YW50aXplICAgMUUtMTAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI3NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNzUgcXVhbnRpemUgICAwRS0xMCAxZSsyICAtPiAgMEUrMgorCitkcXF1YTI4MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjgxIHF1YW50aXplICAgKzEgICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI4MiBxdWFudGl6ZSAgICsxMCAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyODMgcXVhbnRpemUgICAxRSsxICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjg0IHF1YW50aXplICAgMUUrMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI4NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzMgIC0+ICAxRSszCitkcXF1YTI4NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzMgIC0+ICAxLjBFKzQKK2RxcXVhMjg3IHF1YW50aXplICAgMUUrNSAgMWUrMyAgLT4gIDEuMDBFKzUKK2RxcXVhMjg4IHF1YW50aXplICAgMUUrNiAgMWUrMyAgLT4gIDEuMDAwRSs2CitkcXF1YTI4OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzMgIC0+ICAxLjAwMDBFKzcKK2RxcXVhMjkwIHF1YW50aXplICAgMUUrOCAgMWUrMyAgLT4gIDEuMDAwMDBFKzgKK2RxcXVhMjkxIHF1YW50aXplICAgMUUrOSAgMWUrMyAgLT4gIDEuMDAwMDAwRSs5CitkcXF1YTI5MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzMgIC0+ICAxLjAwMDAwMDBFKzEwCitkcXF1YTI5MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyOTQgcXVhbnRpemUgICAxRS0yICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjk1IHF1YW50aXplICAgMEUtMTAgMWUrMyAgLT4gIDBFKzMKKworLS0gcm91bmQgdXAgZnJvbSBiZWxvdyBbc2lnbiB3cm9uZyBpbiBKSVQgY29tcGlsZXIgb25jZV0KK2RxcXVhMzAwIHF1YW50aXplICAgMC4wMDc4IDFlLTUgLT4gIDAuMDA3ODAKK2RxcXVhMzAxIHF1YW50aXplICAgMC4wMDc4IDFlLTQgLT4gIDAuMDA3OAorZHFxdWEzMDIgcXVhbnRpemUgICAwLjAwNzggMWUtMyAtPiAgMC4wMDggSW5leGFjdCBSb3VuZGVkCitkcXF1YTMwMyBxdWFudGl6ZSAgIDAuMDA3OCAxZS0yIC0+ICAwLjAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMDQgcXVhbnRpemUgICAwLjAwNzggMWUtMSAtPiAgMC4wIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMDUgcXVhbnRpemUgICAwLjAwNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzA2IHF1YW50aXplICAgMC4wMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMwNyBxdWFudGl6ZSAgIDAuMDA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTMxMCBxdWFudGl6ZSAgLTAuMDA3OCAxZS01IC0+IC0wLjAwNzgwCitkcXF1YTMxMSBxdWFudGl6ZSAgLTAuMDA3OCAxZS00IC0+IC0wLjAwNzgKK2RxcXVhMzEyIHF1YW50aXplICAtMC4wMDc4IDFlLTMgLT4gLTAuMDA4IEluZXhhY3QgUm91bmRlZAorZHFxdWEzMTMgcXVhbnRpemUgIC0wLjAwNzggMWUtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzE0IHF1YW50aXplICAtMC4wMDc4IDFlLTEgLT4gLTAuMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzE1IHF1YW50aXplICAtMC4wMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMxNiBxdWFudGl6ZSAgLTAuMDA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMTcgcXVhbnRpemUgIC0wLjAwNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzMjAgcXVhbnRpemUgICAwLjA3OCAxZS01IC0+ICAwLjA3ODAwCitkcXF1YTMyMSBxdWFudGl6ZSAgIDAuMDc4IDFlLTQgLT4gIDAuMDc4MAorZHFxdWEzMjIgcXVhbnRpemUgICAwLjA3OCAxZS0zIC0+ICAwLjA3OAorZHFxdWEzMjMgcXVhbnRpemUgICAwLjA3OCAxZS0yIC0+ICAwLjA4IEluZXhhY3QgUm91bmRlZAorZHFxdWEzMjQgcXVhbnRpemUgICAwLjA3OCAxZS0xIC0+ICAwLjEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMyNSBxdWFudGl6ZSAgIDAuMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMyNiBxdWFudGl6ZSAgIDAuMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMyNyBxdWFudGl6ZSAgIDAuMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMzMwIHF1YW50aXplICAtMC4wNzggMWUtNSAtPiAtMC4wNzgwMAorZHFxdWEzMzEgcXVhbnRpemUgIC0wLjA3OCAxZS00IC0+IC0wLjA3ODAKK2RxcXVhMzMyIHF1YW50aXplICAtMC4wNzggMWUtMyAtPiAtMC4wNzgKK2RxcXVhMzMzIHF1YW50aXplICAtMC4wNzggMWUtMiAtPiAtMC4wOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzM0IHF1YW50aXplICAtMC4wNzggMWUtMSAtPiAtMC4xIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMzUgcXVhbnRpemUgIC0wLjA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMzYgcXVhbnRpemUgIC0wLjA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMzcgcXVhbnRpemUgIC0wLjA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTM0MCBxdWFudGl6ZSAgIDAuNzggMWUtNSAtPiAgMC43ODAwMAorZHFxdWEzNDEgcXVhbnRpemUgICAwLjc4IDFlLTQgLT4gIDAuNzgwMAorZHFxdWEzNDIgcXVhbnRpemUgICAwLjc4IDFlLTMgLT4gIDAuNzgwCitkcXF1YTM0MyBxdWFudGl6ZSAgIDAuNzggMWUtMiAtPiAgMC43OAorZHFxdWEzNDQgcXVhbnRpemUgICAwLjc4IDFlLTEgLT4gIDAuOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzQ1IHF1YW50aXplICAgMC43OCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNDYgcXVhbnRpemUgICAwLjc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM0NyBxdWFudGl6ZSAgIDAuNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzNTAgcXVhbnRpemUgIC0wLjc4IDFlLTUgLT4gLTAuNzgwMDAKK2RxcXVhMzUxIHF1YW50aXplICAtMC43OCAxZS00IC0+IC0wLjc4MDAKK2RxcXVhMzUyIHF1YW50aXplICAtMC43OCAxZS0zIC0+IC0wLjc4MAorZHFxdWEzNTMgcXVhbnRpemUgIC0wLjc4IDFlLTIgLT4gLTAuNzgKK2RxcXVhMzU0IHF1YW50aXplICAtMC43OCAxZS0xIC0+IC0wLjggSW5leGFjdCBSb3VuZGVkCitkcXF1YTM1NSBxdWFudGl6ZSAgLTAuNzggIDFlMCAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzU2IHF1YW50aXplICAtMC43OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNTcgcXVhbnRpemUgIC0wLjc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMzYwIHF1YW50aXplICAgNy44IDFlLTUgLT4gIDcuODAwMDAKK2RxcXVhMzYxIHF1YW50aXplICAgNy44IDFlLTQgLT4gIDcuODAwMAorZHFxdWEzNjIgcXVhbnRpemUgICA3LjggMWUtMyAtPiAgNy44MDAKK2RxcXVhMzYzIHF1YW50aXplICAgNy44IDFlLTIgLT4gIDcuODAKK2RxcXVhMzY0IHF1YW50aXplICAgNy44IDFlLTEgLT4gIDcuOAorZHFxdWEzNjUgcXVhbnRpemUgICA3LjggIDFlMCAtPiAgOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzY2IHF1YW50aXplICAgNy44IDFlKzEgLT4gIDFFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM2NyBxdWFudGl6ZSAgIDcuOCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNjggcXVhbnRpemUgICA3LjggMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzNzAgcXVhbnRpemUgIC03LjggMWUtNSAtPiAtNy44MDAwMAorZHFxdWEzNzEgcXVhbnRpemUgIC03LjggMWUtNCAtPiAtNy44MDAwCitkcXF1YTM3MiBxdWFudGl6ZSAgLTcuOCAxZS0zIC0+IC03LjgwMAorZHFxdWEzNzMgcXVhbnRpemUgIC03LjggMWUtMiAtPiAtNy44MAorZHFxdWEzNzQgcXVhbnRpemUgIC03LjggMWUtMSAtPiAtNy44CitkcXF1YTM3NSBxdWFudGl6ZSAgLTcuOCAgMWUwIC0+IC04IEluZXhhY3QgUm91bmRlZAorZHFxdWEzNzYgcXVhbnRpemUgIC03LjggMWUrMSAtPiAtMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzc3IHF1YW50aXplICAtNy44IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM3OCBxdWFudGl6ZSAgLTcuOCAxZSszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGluZGl2aWR1YWxzCitkcXF1YTM4MCBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzgxIHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUuMDYgMWUtMiAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNgorZHFxdWEzODIgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEzODMgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEzODQgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0LjUwNiAxZS0yIC0+IC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzODUgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNiAxZS0yIC0+IC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNgorZHFxdWEzODYgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEzODcgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityb3VuZGluZzogZG93bgorZHFxdWEzODkgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm91bmRpbmc6IGhhbGZfdXAKKworLS0gYW5kIGEgZmV3IG1vcmUgZnJvbSBlLW1haWwgZGlzY3Vzc2lvbnMKK2RxcXVhMzkxIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMi4zNDU2NyAgMWUtMyAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMi4zNDYgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzkyIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU2NyAgMWUtMyAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzkzIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjM0NTY3LiAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzCitkcXF1YTQwMCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS01ICAtPiAgOS45OTkwMAorZHFxdWE0MDEgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNCAgLT4gIDkuOTk5MAorZHFxdWE0MDIgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMyAgLT4gIDkuOTk5CitkcXF1YTQwMyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0yICAtPiAxMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQwNCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0xICAtPiAxMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQwNSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQwNiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUxICAtPiAxRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQwNyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUyICAtPiAwRSsyICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNDEwIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTUgIC0+ICAwLjk5OTAwCitkcXF1YTQxMSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS00ICAtPiAgMC45OTkwCitkcXF1YTQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkKK2RxcXVhNDEzIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTIgIC0+ICAxLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDE0IHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTEgIC0+ICAxLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDE2IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTAKK2RxcXVhNDIxIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTQgIC0+ICAwLjA5OTkKK2RxcXVhNDIyIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTMgIC0+ICAwLjEwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDI0IHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTEgIC0+ICAwLjEgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDI1IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE0MzAgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNSAgLT4gIDAuMDA5OTkKK2RxcXVhNDMxIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDMyIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTMgIC0+ICAwLjAxMCAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDMzIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTIgIC0+ICAwLjAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDM0IHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDM1IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDM2IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE0NDAgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNSAgLT4gIDAuMDAxMDAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDEgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNCAgLT4gIDAuMDAxMCAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDMgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMiAgLT4gIDAuMDAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDQgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDYgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDAKK2RxcXVhMTAwMiBxdWFudGl6ZSAgMC4wMDEgICAgICAgIDAuMDAxIC0+ICAwLjAwMQorZHFxdWExMDAzIHF1YW50aXplICAwLjAwMTIgICAgICAgMC4wMDEgLT4gIDAuMDAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEwMDUgcXVhbnRpemUgIDAuNTAxICAgICAgICAwLjAwMSAtPiAgMC41MDEKK2RxcXVhMTAwNiBxdWFudGl6ZSAgMC41MDEyICAgICAgIDAuMDAxIC0+ICAwLjUwMSAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMDA4IHF1YW50aXplICAwLjk5OSAgICAgICAgMC4wMDEgLT4gIDAuOTk5CisKK2RxcXVhNDgxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCitkcXF1YTQ4MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZHFxdWE0ODMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2RxcXVhNDg0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDg1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ4NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCistLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQKK2RxcXVhNDg3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorZHFxdWE0ODggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNDkxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCitkcXF1YTQ5MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZHFxdWE0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2RxcXVhNDk0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDk1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ5NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDk4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorCistLSBaZXJvcworZHFxdWE1MDAgcXVhbnRpemUgICAwICAgICAxZTEgLT4gIDBFKzEKK2RxcXVhNTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwCitkcXF1YTUwMiBxdWFudGl6ZSAgIDAgICAgMWUtMSAtPiAgMC4wCitkcXF1YTUwMyBxdWFudGl6ZSAgIDAuMCAgMWUtMSAtPiAgMC4wCitkcXF1YTUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMAorZHFxdWE1MDUgcXVhbnRpemUgICAwLjAgIDFlKzEgLT4gIDBFKzEKK2RxcXVhNTA2IHF1YW50aXplICAgMEUrMSAxZS0xIC0+ICAwLjAKK2RxcXVhNTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwCitkcXF1YTUwOCBxdWFudGl6ZSAgIDBFKzEgMWUrMSAtPiAgMEUrMQorZHFxdWE1MDkgcXVhbnRpemUgIC0wICAgICAxZTEgLT4gLTBFKzEKK2RxcXVhNTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wCitkcXF1YTUxMSBxdWFudGl6ZSAgLTAgICAgMWUtMSAtPiAtMC4wCitkcXF1YTUxMiBxdWFudGl6ZSAgLTAuMCAgMWUtMSAtPiAtMC4wCitkcXF1YTUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMAorZHFxdWE1MTQgcXVhbnRpemUgIC0wLjAgIDFlKzEgLT4gLTBFKzEKK2RxcXVhNTE1IHF1YW50aXplICAtMEUrMSAxZS0xIC0+IC0wLjAKK2RxcXVhNTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wCitkcXF1YTUxNyBxdWFudGl6ZSAgLTBFKzEgMWUrMSAtPiAtMEUrMQorLS0gIzUxOSBoZXJlIG9uY2UgYSBwcm9ibGVtCitkcXF1YTUxOCBxdWFudGl6ZSAgMCAgICAwRS0zICAtPiAwLjAwMAorZHFxdWE1MTkgcXVhbnRpemUgIDAgICAgMEUtMzMgLT4gMEUtMzMKK2RxcXVhNTIwIHF1YW50aXplICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMEUtMzMgLT4gMEUtMzMKK2RxcXVhNTIxIHF1YW50aXplICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMEUtMzMgLT4gMEUtMzMKKworLS0gU29tZSBub24temVyb3Mgd2l0aCBsb3RzIG9mIHBhZGRpbmcgb24gdGhlIHJpZ2h0CitkcXF1YTUyMyBxdWFudGl6ZSAgIDEgICAwRS0zMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFxdWE1MjQgcXVhbnRpemUgIDEyICAgMEUtMzIgLT4gMTIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxcXVhNTI1IHF1YW50aXplIDEyMyAgIDBFLTMxIC0+IDEyMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXF1YTUyNiBxdWFudGl6ZSAxMjMgICAwRS0zMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTI3IHF1YW50aXplIDEyMy40IDBFLTMxIC0+IDEyMy40MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXF1YTUyOCBxdWFudGl6ZSAxMjMuNCAwRS0zMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gU3VzcGljaW91cyBSSFMgdmFsdWVzCitkcXF1YTUzMCBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNTMxIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorZHFxdWE1MzIgcXVhbnRpemUgICAxLjIzNCAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCitkcXF1YTUzMyBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgZm91ciBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCitkcXF1YTUzNiBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1MzcgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTM4IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTUzOSBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXF1YTU0MiBxdWFudGl6ZSAgIDEuMjM0RSsyOTkgICAgMWUyOTkgLT4gMUUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE1NDMgcXVhbnRpemUgICAxLjIzNEUrMjk4ICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNTQ0IHF1YW50aXplICAgMS4yMzQgICAgICAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTU0NyBxdWFudGl6ZSAgIDAgICAgICAgICAgICAxZS0yOTkgLT4gMEUtMjk5CistLSBuZXh0IHR3byBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCitkcXF1YTU0OCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU0OSBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0zMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBbbW9yZSBiZWxvd10KKworLS0gU3BlY2lhbHMKK2RxcXVhNTgwIHF1YW50aXplICBJbmYgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFxdWE1ODEgcXVhbnRpemUgIEluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTgyIHF1YW50aXplICBJbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU4MyBxdWFudGl6ZSAgSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1ODQgcXVhbnRpemUgIEluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTg1IHF1YW50aXplICBJbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU4NiBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxcXVhNTg3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU4OCBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5CitkcXF1YTU4OSBxdWFudGl6ZSAtMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1OTAgcXVhbnRpemUgIDAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTkxIHF1YW50aXplICAxICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU5MiBxdWFudGl6ZSAgMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1OTMgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcXF1YTU5NCBxdWFudGl6ZSAgSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1OTUgcXVhbnRpemUgLTAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZHFxdWE2MDAgcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQorZHFxdWE2MDEgcXVhbnRpemUgLUluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjAyIHF1YW50aXplIC1JbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYwMyBxdWFudGl6ZSAtSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MDQgcXVhbnRpemUgLUluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjA1IHF1YW50aXplIC1JbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYwNiBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5CitkcXF1YTYwNyBxdWFudGl6ZSAtMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MDggcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQorZHFxdWE2MDkgcXVhbnRpemUgLTEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjEwIHF1YW50aXplICAwICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYxMSBxdWFudGl6ZSAgMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MTIgcXVhbnRpemUgIDEwMDAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjEzIHF1YW50aXplICBJbmYgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFxdWE2MTQgcXVhbnRpemUgLUluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjE1IHF1YW50aXplIC0wICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RxcXVhNjIxIHF1YW50aXplICBOYU4gICAtSW5mICAgIC0+ICBOYU4KK2RxcXVhNjIyIHF1YW50aXplICBOYU4gMWUtMjk5ICAgIC0+ICBOYU4KK2RxcXVhNjIzIHF1YW50aXplICBOYU4gMWUtMSAgICAgIC0+ICBOYU4KK2RxcXVhNjI0IHF1YW50aXplICBOYU4gIDFlMCAgICAgIC0+ICBOYU4KK2RxcXVhNjI1IHF1YW50aXplICBOYU4gIDFlMSAgICAgIC0+ICBOYU4KK2RxcXVhNjI2IHF1YW50aXplICBOYU4gIDFlMjk5ICAgIC0+ICBOYU4KK2RxcXVhNjI3IHF1YW50aXplICBOYU4gICAgSW5mICAgIC0+ICBOYU4KK2RxcXVhNjI4IHF1YW50aXplICBOYU4gICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjI5IHF1YW50aXplIC1JbmYgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjMwIHF1YW50aXplIC0xMDAwICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjMxIHF1YW50aXplIC0xICAgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjMyIHF1YW50aXplICAwICAgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjMzIHF1YW50aXplICAxICAgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjM0IHF1YW50aXplICAxMDAwICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjM1IHF1YW50aXplICBJbmYgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjM2IHF1YW50aXplICBOYU4gMWUtMCAgICAgIC0+ICBOYU4KK2RxcXVhNjM3IHF1YW50aXplIC0wICAgICAgTmFOICAgIC0+ICBOYU4KKworZHFxdWE2NDEgcXVhbnRpemUgIHNOYU4gICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQyIHF1YW50aXplICBzTmFOIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0MyBxdWFudGl6ZSAgc05hTiAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDQgcXVhbnRpemUgIHNOYU4gIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQ1IHF1YW50aXplICBzTmFOICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0NiBxdWFudGl6ZSAgc05hTiAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDcgcXVhbnRpemUgIHNOYU4gICAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQ4IHF1YW50aXplICBzTmFOICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0OSBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTAgcXVhbnRpemUgLUluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjUxIHF1YW50aXplIC0xMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1MiBxdWFudGl6ZSAtMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTMgcXVhbnRpemUgIDAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjU0IHF1YW50aXplICAxICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1NSBxdWFudGl6ZSAgMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTYgcXVhbnRpemUgIEluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjU3IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1OCBxdWFudGl6ZSAgc05hTiAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTkgcXVhbnRpemUgLTAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFxdWE2NjEgcXVhbnRpemUgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkcXF1YTY2MiBxdWFudGl6ZSAgTmFOOCAgOTE5ICAgLT4gIE5hTjgKK2RxcXVhNjYzIHF1YW50aXplICBOYU43MSBJbmYgICAtPiAgTmFONzEKK2RxcXVhNjY0IHF1YW50aXplICBOYU42ICBOYU41ICAtPiAgTmFONgorZHFxdWE2NjUgcXVhbnRpemUgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkcXF1YTY2NiBxdWFudGl6ZSAtOTE5ICAgTmFOMzEgLT4gIE5hTjMxCitkcXF1YTY2NyBxdWFudGl6ZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworZHFxdWE2NzEgcXVhbnRpemUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzIgcXVhbnRpemUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzMgcXVhbnRpemUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzQgcXVhbnRpemUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzUgcXVhbnRpemUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzYgcXVhbnRpemUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzcgcXVhbnRpemUgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzggcXVhbnRpemUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzkgcXVhbnRpemUgIE5hTiAgICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCitkcXF1YTY4MSBxdWFudGl6ZSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKK2RxcXVhNjgyIHF1YW50aXplIC1OYU44ICA5MTkgICAtPiAtTmFOOAorZHFxdWE2ODMgcXVhbnRpemUgLU5hTjcxIEluZiAgIC0+IC1OYU43MQorZHFxdWE2ODQgcXVhbnRpemUgLU5hTjYgLU5hTjUgIC0+IC1OYU42CitkcXF1YTY4NSBxdWFudGl6ZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RxcXVhNjg2IHF1YW50aXplIC05MTkgIC1OYU4zMSAtPiAtTmFOMzEKK2RxcXVhNjg3IHF1YW50aXplICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCitkcXF1YTY5MSBxdWFudGl6ZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5MiBxdWFudGl6ZSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5MyBxdWFudGl6ZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5NCBxdWFudGl6ZSAtc05hTjE2IHNOYU45NCAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5NSBxdWFudGl6ZSAtTmFOOTUgLXNOYU45MyAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5NiBxdWFudGl6ZSAtSW5mICAgLXNOYU45MiAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5NyBxdWFudGl6ZSAgMDg4ICAgLXNOYU45MSAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5OCBxdWFudGl6ZSAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5OSBxdWFudGl6ZSAgTmFOICAgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworZHFxdWE3MTAgcXVhbnRpemUgIDEuMDBFLTYxNDMgICAxZS02MTQzICAtPiAgIDFFLTYxNDMgICBSb3VuZGVkCitkcXF1YTcxMSBxdWFudGl6ZSAgMC4xRS02MTQzICAgIDJlLTYxNDQgIC0+ICAgMUUtNjE0NCAgIFN1Ym5vcm1hbAorZHFxdWE3MTIgcXVhbnRpemUgIDAuMTBFLTYxNDMgICAzZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwgUm91bmRlZAorZHFxdWE3MTMgcXVhbnRpemUgIDAuMTAwRS02MTQzICA0ZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwgUm91bmRlZAorZHFxdWE3MTQgcXVhbnRpemUgIDAuMDFFLTYxNDMgICA1ZS02MTQ1ICAtPiAgIDFFLTYxNDUgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitkcXF1YTcxNSBxdWFudGl6ZSAgMC45OTlFLTYxNDMgIDFlLTYxNDMgIC0+ICAgMUUtNjE0MyAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3MTYgcXVhbnRpemUgIDAuMDk5RS02MTQzIDEwZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCisKK2RxcXVhNzE3IHF1YW50aXplICAwLjAwOUUtNjE0MyAgMWUtNjE0NSAgLT4gICAxRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZHFxdWE3MTggcXVhbnRpemUgIDAuMDAxRS02MTQzICAxZS02MTQ1ICAtPiAgIDBFLTYxNDUgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzE5IHF1YW50aXplICAwLjAwMDlFLTYxNDMgMWUtNjE0NSAgLT4gICAwRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTcyMCBxdWFudGl6ZSAgMC4wMDAxRS02MTQzIDFlLTYxNDUgIC0+ICAgMEUtNjE0NSAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTczMCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDMgIC0+ICAtMUUtNjE0MyAgICAgUm91bmRlZAorZHFxdWE3MzEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdAorZHFxdWE3MzIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdAorZHFxdWE3MzMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdAorZHFxdWE3MzQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RxcXVhNzM1IHF1YW50aXplIC0wLjk5OUUtNjE0MyA5MGUtNjE0MyAgLT4gIC0xRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzM2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAtMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzM3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAtMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzM4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAtMGUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzM5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMGUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE3NDAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQ0IC0+ICAtMS4wRS02MTQzICAgUm91bmRlZAorZHFxdWE3NDEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwKK2RxcXVhNzQyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxcXVhNzQzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxcXVhNzQ0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZHFxdWE3NDUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ0IC0+ICAtMS4wRS02MTQzICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTc0NiBxdWFudGl6ZSAtMC4wOTlFLTYxNDMgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RxcXVhNzQ3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTc0OCBxdWFudGl6ZSAtMC4wMDFFLTYxNDMgIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3NDkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ0IC0+ICAtMEUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE3NTAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQ1IC0+ICAtMS4wMEUtNjE0MworZHFxdWE3NTEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwKK2RxcXVhNzUyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcXF1YTc1MyBxdWFudGl6ZSAtMC4xMDBFLTYxNDMgIDFlLTYxNDUgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXF1YTc1NCBxdWFudGl6ZSAtMC4wMUUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xRS02MTQ1ICAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RxcXVhNzU1IHF1YW50aXplIC0wLjk5OUUtNjE0MyAgMWUtNjE0NSAtPiAgLTEuMDBFLTYxNDMgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3NTYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkcXF1YTc1NyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgIDFlLTYxNDUgLT4gIC0xRS02MTQ1ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RxcXVhNzU4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAgMWUtNjE0NSAtPiAgLTBFLTYxNDUgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTc1OSBxdWFudGl6ZSAtMC4wMDAxRS02MTQzIDFlLTYxNDUgLT4gIC0wRS02MTQ1ICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTc2MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDYgLT4gIC0xLjAwMEUtNjE0MworZHFxdWE3NjEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsCitkcXF1YTc2MiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDYgLT4gIC0xLjAwRS02MTQ0ICBTdWJub3JtYWwKK2RxcXVhNzYzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NiAtPiAgLTEuMDBFLTYxNDQgIFN1Ym5vcm1hbAorZHFxdWE3NjQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQ2IC0+ICAtMS4wRS02MTQ1ICAgU3Vibm9ybWFsCitkcXF1YTc2NSBxdWFudGl6ZSAtMC45OTlFLTYxNDMgIDFlLTYxNDYgLT4gIC05Ljk5RS02MTQ0ICBTdWJub3JtYWwKK2RxcXVhNzY2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAgMWUtNjE0NiAtPiAgLTkuOUUtNjE0NSAgIFN1Ym5vcm1hbAorZHFxdWE3NjcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ2IC0+ICAtOUUtNjE0NiAgICAgU3Vibm9ybWFsCitkcXF1YTc2OCBxdWFudGl6ZSAtMC4wMDFFLTYxNDMgIDFlLTYxNDYgLT4gIC0xRS02MTQ2ICAgICBTdWJub3JtYWwKK2RxcXVhNzY5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMWUtNjE0NiAtPiAgLTBFLTYxNDYgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIGZyb20gRnVuZyBMZWUKKy0tIHRoZSBuZXh0IGZvdXIgd291bGQgYXBwZWFyIHRvIGJlIGluIGVycm9yLCBidXQgdGhleSBhcmUgbWlzbGVhZGluZyAodGhlCistLSBvcGVyYW5kcyB3aWxsIGJlIGNsYW1wZWQgdG8gYSBsb3dlciBleHBvbmVudCkgYW5kIHNvIGFyZSBvbWl0dGVkCistLSBkcXF1YTEwMjEgcXVhbnRpemUgIDguNjY2NjY2NjY2NjY2MDAwRSs2MTQ0ICAxLjAwMDAwMDAwMDAwMDAwMEUrNjE0NCAtPiAgOC42NjY2NjY2NjY2NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKKy0tIGRxcXVhMTAyMiBxdWFudGl6ZSAtOC42NjY2NjY2NjY2NjYwMDBFKzYxNDQgIDEuMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IC0+IC04LjY2NjY2NjY2NjY2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAorLS0gZHFxdWExMDI3IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszMjMgIDFFKzMxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gZHFxdWExMDMwIHF1YW50aXplIDguNjY2NjY2NjZFKzMgICAgICAgICAgIDFFKzMgICAgIC0+IDlFKzMgSW5leGFjdCBSb3VuZGVkCisKKy0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCitkcXF1YTEwNDAgcXVhbnRpemUgLTIxNDc0ODM2NDYgICAgIDAgLT4gLTIxNDc0ODM2NDYKK2RxcXVhMTA0MSBxdWFudGl6ZSAtMjE0NzQ4MzY0NyAgICAgMCAtPiAtMjE0NzQ4MzY0NworZHFxdWExMDQyIHF1YW50aXplIC0yMTQ3NDgzNjQ4ICAgICAwIC0+IC0yMTQ3NDgzNjQ4CitkcXF1YTEwNDMgcXVhbnRpemUgLTIxNDc0ODM2NDkgICAgIDAgLT4gLTIxNDc0ODM2NDkKK2RxcXVhMTA0NCBxdWFudGl6ZSAgMjE0NzQ4MzY0NiAgICAgMCAtPiAgMjE0NzQ4MzY0NgorZHFxdWExMDQ1IHF1YW50aXplICAyMTQ3NDgzNjQ3ICAgICAwIC0+ICAyMTQ3NDgzNjQ3CitkcXF1YTEwNDYgcXVhbnRpemUgIDIxNDc0ODM2NDggICAgIDAgLT4gIDIxNDc0ODM2NDgKK2RxcXVhMTA0NyBxdWFudGl6ZSAgMjE0NzQ4MzY0OSAgICAgMCAtPiAgMjE0NzQ4MzY0OQorZHFxdWExMDQ4IHF1YW50aXplICA0Mjk0OTY3Mjk0ICAgICAwIC0+ICA0Mjk0OTY3Mjk0CitkcXF1YTEwNDkgcXVhbnRpemUgIDQyOTQ5NjcyOTUgICAgIDAgLT4gIDQyOTQ5NjcyOTUKK2RxcXVhMTA1MCBxdWFudGl6ZSAgNDI5NDk2NzI5NiAgICAgMCAtPiAgNDI5NDk2NzI5NgorZHFxdWExMDUxIHF1YW50aXplICA0Mjk0OTY3Mjk3ICAgICAwIC0+ICA0Mjk0OTY3Mjk3CisKKy0tIFJvdW5kaW5nIHN3YXRoZQorcm91bmRpbmc6IGhhbGZfZXZlbgorZHFxdWExMTAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExMTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZHFxdWExMjAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExMjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCitkcXF1YTEzMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkcXF1YTEzMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiB1cAorZHFxdWExNDAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExNDAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcXF1YTE1MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkcXF1YTE1MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKK2RxcXVhMTYwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RxcXVhMTYwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjMgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZmxvb3IKK2RxcXVhMTcwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RxcXVhMTcwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogMDV1cAorZHFxdWExODAwIHF1YW50aXplICAxLjIwMDAgICAgMS4wMCAgICAtPiAgMS4yMCAgUm91bmRlZAorZHFxdWExODAxIHF1YW50aXplICAxLjIwMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MDIgcXVhbnRpemUgIDEuMjAxMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTgwMyBxdWFudGl6ZSAgMS4yMDUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExODA0IHF1YW50aXplICAxLjIwNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MDcgcXVhbnRpemUgIDEuMjA2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTgwOCBxdWFudGl6ZSAgMS4yMDcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExODA5IHF1YW50aXplICAxLjIwOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MTEgcXVhbnRpemUgLTEuMjA5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWExOTAwIHF1YW50aXplICAxLjIxMDAgICAgMS4wMCAgICAtPiAgMS4yMSAgUm91bmRlZAorZHFxdWExOTAxIHF1YW50aXplICAxLjIxMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MDIgcXVhbnRpemUgIDEuMjExMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkwMyBxdWFudGl6ZSAgMS4yMTUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTA0IHF1YW50aXplICAxLjIxNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MDcgcXVhbnRpemUgIDEuMjE2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkwOCBxdWFudGl6ZSAgMS4yMTcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTA5IHF1YW50aXplICAxLjIxOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MTEgcXVhbnRpemUgLTEuMjE5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMDAwIHF1YW50aXplICAxLjI0MDAgICAgMS4wMCAgICAtPiAgMS4yNCAgUm91bmRlZAorZHFxdWEyMDAxIHF1YW50aXplICAxLjI0MDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMDIgcXVhbnRpemUgIDEuMjQxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAwMyBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDA0IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMDcgcXVhbnRpemUgIDEuMjQ2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAwOCBxdWFudGl6ZSAgMS4yNDcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDA5IHF1YW50aXplICAxLjI0OTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMTEgcXVhbnRpemUgLTEuMjQ5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMTAwIHF1YW50aXplICAxLjI1MDAgICAgMS4wMCAgICAtPiAgMS4yNSAgUm91bmRlZAorZHFxdWEyMTAxIHF1YW50aXplICAxLjI1MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMDIgcXVhbnRpemUgIDEuMjUxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjEwMyBxdWFudGl6ZSAgMS4yNTUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMTA0IHF1YW50aXplICAxLjI1NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMDcgcXVhbnRpemUgIDEuMjU2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjEwOCBxdWFudGl6ZSAgMS4yNTcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMTA5IHF1YW50aXplICAxLjI1OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMTEgcXVhbnRpemUgLTEuMjU5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMjAwIHF1YW50aXplICAxLjI2MDAgICAgMS4wMCAgICAtPiAgMS4yNiAgUm91bmRlZAorZHFxdWEyMjAxIHF1YW50aXplICAxLjI2MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMDIgcXVhbnRpemUgIDEuMjYxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIwMyBxdWFudGl6ZSAgMS4yNjUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjA0IHF1YW50aXplICAxLjI2NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMDcgcXVhbnRpemUgIDEuMjY2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIwOCBxdWFudGl6ZSAgMS4yNjcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjA5IHF1YW50aXplICAxLjI2OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMTEgcXVhbnRpemUgLTEuMjY5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMzAwIHF1YW50aXplICAxLjI5MDAgICAgMS4wMCAgICAtPiAgMS4yOSAgUm91bmRlZAorZHFxdWEyMzAxIHF1YW50aXplICAxLjI5MDEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMDIgcXVhbnRpemUgIDEuMjkxMCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMwMyBxdWFudGl6ZSAgMS4yOTUwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzA0IHF1YW50aXplICAxLjI5NTEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMDcgcXVhbnRpemUgIDEuMjk2MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMwOCBxdWFudGl6ZSAgMS4yOTcwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzA5IHF1YW50aXplICAxLjI5OTkgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMTEgcXVhbnRpemUgLTEuMjk5OSAgICAxLjAwICAgIC0+IC0xLjI5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVsbCB0ZXN0cworZHFxdWE5OTggcXVhbnRpemUgMTAgICAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhOTk5IHF1YW50aXplICAjIDFlMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVkdWNlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVkdWNlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzNWU2YgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZWR1Y2UuZGVjVGVzdApAQCAtMCwwICsxLDE4MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVJlZHVjZS5kZWNUZXN0IC0tIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBmcm9tIGEgZGVjUXVhZCAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAzLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFyZWQwMDEgcmVkdWNlICcxJyAgICAgIC0+ICcxJworZHFyZWQwMDIgcmVkdWNlICctMScgICAgIC0+ICctMScKK2RxcmVkMDAzIHJlZHVjZSAnMS4wMCcgICAtPiAnMScKK2RxcmVkMDA0IHJlZHVjZSAnLTEuMDAnICAtPiAnLTEnCitkcXJlZDAwNSByZWR1Y2UgJzAnICAgICAgLT4gJzAnCitkcXJlZDAwNiByZWR1Y2UgJzAuMDAnICAgLT4gJzAnCitkcXJlZDAwNyByZWR1Y2UgJzAwLjAnICAgLT4gJzAnCitkcXJlZDAwOCByZWR1Y2UgJzAwLjAwJyAgLT4gJzAnCitkcXJlZDAwOSByZWR1Y2UgJzAwJyAgICAgLT4gJzAnCitkcXJlZDAxMCByZWR1Y2UgJzBFKzEnICAgLT4gJzAnCitkcXJlZDAxMSByZWR1Y2UgJzBFKzUnICAgLT4gJzAnCisKK2RxcmVkMDEyIHJlZHVjZSAnLTInICAgICAtPiAnLTInCitkcXJlZDAxMyByZWR1Y2UgJzInICAgICAgLT4gJzInCitkcXJlZDAxNCByZWR1Y2UgJy0yLjAwJyAgLT4gJy0yJworZHFyZWQwMTUgcmVkdWNlICcyLjAwJyAgIC0+ICcyJworZHFyZWQwMTYgcmVkdWNlICctMCcgICAgIC0+ICctMCcKK2RxcmVkMDE3IHJlZHVjZSAnLTAuMDAnICAtPiAnLTAnCitkcXJlZDAxOCByZWR1Y2UgJy0wMC4wJyAgLT4gJy0wJworZHFyZWQwMTkgcmVkdWNlICctMDAuMDAnIC0+ICctMCcKK2RxcmVkMDIwIHJlZHVjZSAnLTAwJyAgICAtPiAnLTAnCitkcXJlZDAyMSByZWR1Y2UgJy0wRSs1JyAgIC0+ICctMCcKK2RxcmVkMDIyIHJlZHVjZSAnLTBFKzEnICAtPiAnLTAnCisKK2RxcmVkMDMwIHJlZHVjZSAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJworZHFyZWQwMzEgcmVkdWNlICctMC4xJyAgICAgICAgICAgIC0+ICctMC4xJworZHFyZWQwMzIgcmVkdWNlICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJworZHFyZWQwMzMgcmVkdWNlICctMC4wMScgICAgICAgICAgIC0+ICctMC4wMScKK2RxcmVkMDM0IHJlZHVjZSAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCitkcXJlZDAzNSByZWR1Y2UgJy0wLjAwMScgICAgICAgICAgLT4gJy0wLjAwMScKK2RxcmVkMDM2IHJlZHVjZSAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCitkcXJlZDAzNyByZWR1Y2UgJy0wLjAwMDAwMScgICAgICAgLT4gJy0wLjAwMDAwMScKK2RxcmVkMDM4IHJlZHVjZSAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCitkcXJlZDAzOSByZWR1Y2UgJy0wLjAwMDAwMDAwMDAwMScgLT4gJy0xRS0xMicKKworZHFyZWQwNDEgcmVkdWNlIDEuMSAgICAgICAgLT4gMS4xCitkcXJlZDA0MiByZWR1Y2UgMS4xMCAgICAgICAtPiAxLjEKK2RxcmVkMDQzIHJlZHVjZSAxLjEwMCAgICAgIC0+IDEuMQorZHFyZWQwNDQgcmVkdWNlIDEuMTEwICAgICAgLT4gMS4xMQorZHFyZWQwNDUgcmVkdWNlIC0xLjEgICAgICAgLT4gLTEuMQorZHFyZWQwNDYgcmVkdWNlIC0xLjEwICAgICAgLT4gLTEuMQorZHFyZWQwNDcgcmVkdWNlIC0xLjEwMCAgICAgLT4gLTEuMQorZHFyZWQwNDggcmVkdWNlIC0xLjExMCAgICAgLT4gLTEuMTEKK2RxcmVkMDQ5IHJlZHVjZSA5LjkgICAgICAgIC0+IDkuOQorZHFyZWQwNTAgcmVkdWNlIDkuOTAgICAgICAgLT4gOS45CitkcXJlZDA1MSByZWR1Y2UgOS45MDAgICAgICAtPiA5LjkKK2RxcmVkMDUyIHJlZHVjZSA5Ljk5MCAgICAgIC0+IDkuOTkKK2RxcmVkMDUzIHJlZHVjZSAtOS45ICAgICAgIC0+IC05LjkKK2RxcmVkMDU0IHJlZHVjZSAtOS45MCAgICAgIC0+IC05LjkKK2RxcmVkMDU1IHJlZHVjZSAtOS45MDAgICAgIC0+IC05LjkKK2RxcmVkMDU2IHJlZHVjZSAtOS45OTAgICAgIC0+IC05Ljk5CisKKy0tIHNvbWUgdHJhaWxpbmcgZnJhY3Rpb25hbCB6ZXJvcyB3aXRoIHplcm9zIGluIHVuaXRzCitkcXJlZDA2MCByZWR1Y2UgIDEwLjAgICAgICAgIC0+IDFFKzEKK2RxcmVkMDYxIHJlZHVjZSAgMTAuMDAgICAgICAgLT4gMUUrMQorZHFyZWQwNjIgcmVkdWNlICAxMDAuMCAgICAgICAtPiAxRSsyCitkcXJlZDA2MyByZWR1Y2UgIDEwMC4wMCAgICAgIC0+IDFFKzIKK2RxcmVkMDY0IHJlZHVjZSAgMS4xMDAwRSszICAgLT4gMS4xRSszCitkcXJlZDA2NSByZWR1Y2UgIDEuMTAwMDBFKzMgIC0+IDEuMUUrMworZHFyZWQwNjYgcmVkdWNlIC0xMC4wICAgICAgICAtPiAtMUUrMQorZHFyZWQwNjcgcmVkdWNlIC0xMC4wMCAgICAgICAtPiAtMUUrMQorZHFyZWQwNjggcmVkdWNlIC0xMDAuMCAgICAgICAtPiAtMUUrMgorZHFyZWQwNjkgcmVkdWNlIC0xMDAuMDAgICAgICAtPiAtMUUrMgorZHFyZWQwNzAgcmVkdWNlIC0xLjEwMDBFKzMgICAtPiAtMS4xRSszCitkcXJlZDA3MSByZWR1Y2UgLTEuMTAwMDBFKzMgIC0+IC0xLjFFKzMKKworLS0gc29tZSBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIHdpdGggcG9zaXRpdmUgZXhwb25lbnQKK2RxcmVkMDgwIHJlZHVjZSAgMTBFKzEgICAgICAgLT4gMUUrMgorZHFyZWQwODEgcmVkdWNlICAxMDBFKzEgICAgICAtPiAxRSszCitkcXJlZDA4MiByZWR1Y2UgIDEuMEUrMiAgICAgIC0+IDFFKzIKK2RxcmVkMDgzIHJlZHVjZSAgMS4wRSszICAgICAgLT4gMUUrMworZHFyZWQwODQgcmVkdWNlICAxLjFFKzMgICAgICAtPiAxLjFFKzMKK2RxcmVkMDg1IHJlZHVjZSAgMS4wMEUrMyAgICAgLT4gMUUrMworZHFyZWQwODYgcmVkdWNlICAxLjEwRSszICAgICAtPiAxLjFFKzMKK2RxcmVkMDg3IHJlZHVjZSAtMTBFKzEgICAgICAgLT4gLTFFKzIKK2RxcmVkMDg4IHJlZHVjZSAtMTAwRSsxICAgICAgLT4gLTFFKzMKK2RxcmVkMDg5IHJlZHVjZSAtMS4wRSsyICAgICAgLT4gLTFFKzIKK2RxcmVkMDkwIHJlZHVjZSAtMS4wRSszICAgICAgLT4gLTFFKzMKK2RxcmVkMDkxIHJlZHVjZSAtMS4xRSszICAgICAgLT4gLTEuMUUrMworZHFyZWQwOTIgcmVkdWNlIC0xLjAwRSszICAgICAtPiAtMUUrMworZHFyZWQwOTMgcmVkdWNlIC0xLjEwRSszICAgICAtPiAtMS4xRSszCisKKy0tIHNvbWUgc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MsIHdlcmUgd2UgdG8gYmUgdHJpbW1pbmcKK2RxcmVkMTAwIHJlZHVjZSAgMTEgICAgICAgICAgLT4gMTEKK2RxcmVkMTAxIHJlZHVjZSAgMTAgICAgICAgICAgLT4gMUUrMQorZHFyZWQxMDIgcmVkdWNlICAxMC4gICAgICAgICAtPiAxRSsxCitkcXJlZDEwMyByZWR1Y2UgIDEuMUUrMSAgICAgIC0+IDExCitkcXJlZDEwNCByZWR1Y2UgIDEuMEUrMSAgICAgIC0+IDFFKzEKK2RxcmVkMTA1IHJlZHVjZSAgMS4xMEUrMiAgICAgLT4gMS4xRSsyCitkcXJlZDEwNiByZWR1Y2UgIDEuMDBFKzIgICAgIC0+IDFFKzIKK2RxcmVkMTA3IHJlZHVjZSAgMS4xMDBFKzMgICAgLT4gMS4xRSszCitkcXJlZDEwOCByZWR1Y2UgIDEuMDAwRSszICAgIC0+IDFFKzMKK2RxcmVkMTA5IHJlZHVjZSAgMS4wMDAwMDBFKzYgLT4gMUUrNgorZHFyZWQxMTAgcmVkdWNlIC0xMSAgICAgICAgICAtPiAtMTEKK2RxcmVkMTExIHJlZHVjZSAtMTAgICAgICAgICAgLT4gLTFFKzEKK2RxcmVkMTEyIHJlZHVjZSAtMTAuICAgICAgICAgLT4gLTFFKzEKK2RxcmVkMTEzIHJlZHVjZSAtMS4xRSsxICAgICAgLT4gLTExCitkcXJlZDExNCByZWR1Y2UgLTEuMEUrMSAgICAgIC0+IC0xRSsxCitkcXJlZDExNSByZWR1Y2UgLTEuMTBFKzIgICAgIC0+IC0xLjFFKzIKK2RxcmVkMTE2IHJlZHVjZSAtMS4wMEUrMiAgICAgLT4gLTFFKzIKK2RxcmVkMTE3IHJlZHVjZSAtMS4xMDBFKzMgICAgLT4gLTEuMUUrMworZHFyZWQxMTggcmVkdWNlIC0xLjAwMEUrMyAgICAtPiAtMUUrMworZHFyZWQxMTkgcmVkdWNlIC0xLjAwMDAwRSs1ICAtPiAtMUUrNQorZHFyZWQxMjAgcmVkdWNlIC0xLjAwMDAwMEUrNiAtPiAtMUUrNgorZHFyZWQxMjEgcmVkdWNlIC0xMC4wMDAwMEUrNiAtPiAtMUUrNworZHFyZWQxMjIgcmVkdWNlIC0xMDAuMDAwMEUrNiAtPiAtMUUrOAorZHFyZWQxMjMgcmVkdWNlIC0xMDAwLjAwMEUrNiAtPiAtMUUrOQorZHFyZWQxMjQgcmVkdWNlIC0xMDAwMC4wMEUrNiAtPiAtMUUrMTAKK2RxcmVkMTI1IHJlZHVjZSAtMTAwMDAwLjBFKzYgLT4gLTFFKzExCitkcXJlZDEyNiByZWR1Y2UgLTEwMDAwMDAuRSs2IC0+IC0xRSsxMgorCistLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoCitkcXJlZDE0MCByZWR1Y2UgJzIuMScgICAgIC0+ICAnMi4xJworZHFyZWQxNDEgcmVkdWNlICctMi4wJyAgICAtPiAgJy0yJworZHFyZWQxNDIgcmVkdWNlICcxLjIwMCcgICAtPiAgJzEuMicKK2RxcmVkMTQzIHJlZHVjZSAnLTEyMCcgICAgLT4gICctMS4yRSsyJworZHFyZWQxNDQgcmVkdWNlICcxMjAuMDAnICAtPiAgJzEuMkUrMicKK2RxcmVkMTQ1IHJlZHVjZSAnMC4wMCcgICAgLT4gICcwJworCistLSBObWF4LCBObWluLCBOdGlueQorLS0gbm90ZSBvcmlnYW1pIGVmZmVjdCBvbiBzb21lIG9mIHRoZXNlCitkcXJlZDE1MSByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxcmVkMTUyIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDBFKzYxNDAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwRSs2MTQwCitkcXJlZDE1MyByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQKK2RxcmVkMTU0IHJlZHVjZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAxRS02MTQzCitkcXJlZDE1NSByZWR1Y2UgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gMUUtNjE0MworZHFyZWQxNTYgcmVkdWNlICAyLjAwMEUtNjE3MyAgICAgICAgICAgICAgIC0+IDJFLTYxNzMgICBTdWJub3JtYWwKK2RxcmVkMTU3IHJlZHVjZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAxRS02MTc2ICAgU3Vibm9ybWFsCisKK2RxcmVkMTYxIHJlZHVjZSAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NiAgU3Vibm9ybWFsCitkcXJlZDE2MiByZWR1Y2UgIC0yLjAwMEUtNjE3MyAgICAgICAgICAgICAgLT4gLTJFLTYxNzMgIFN1Ym5vcm1hbAorZHFyZWQxNjMgcmVkdWNlICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xRS02MTQzCitkcXJlZDE2NCByZWR1Y2UgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKK2RxcmVkMTY1IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwRSs2MTQwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMEUrNjE0MAorZHFyZWQxNjYgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NAorZHFyZWQxNjcgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NAorZHFyZWQxNjggcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyZWQxNjkgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NAorCisKKy0tIHNwZWNpYWxzIChyZWR1Y2UgZG9lcyBub3QgYWZmZWN0IHBheWxvYWQpCitkcXJlZDgyMCByZWR1Y2UgJ0luZicgICAgLT4gJ0luZmluaXR5JworZHFyZWQ4MjEgcmVkdWNlICctSW5mJyAgIC0+ICctSW5maW5pdHknCitkcXJlZDgyMiByZWR1Y2UgICBOYU4gICAgLT4gIE5hTgorZHFyZWQ4MjMgcmVkdWNlICBzTmFOICAgIC0+ICBOYU4gICAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVkODI0IHJlZHVjZSAgIE5hTjEwMSAtPiAgTmFOMTAxCitkcXJlZDgyNSByZWR1Y2UgIHNOYU4wMTAgLT4gIE5hTjEwICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZWQ4MjcgcmVkdWNlICAtTmFOICAgIC0+IC1OYU4KK2RxcmVkODI4IHJlZHVjZSAtc05hTiAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCitkcXJlZDgyOSByZWR1Y2UgIC1OYU4xMDEgLT4gLU5hTjEwMQorZHFyZWQ4MzAgcmVkdWNlIC1zTmFOMDEwIC0+IC1OYU4xMCAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0CitkcXJlZDkwMCByZWR1Y2UgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwZDNjZgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZW1haW5kZXIuZGVjVGVzdApAQCAtMCwwICsxLDU5NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVJlbWFpbmRlci5kZWNUZXN0IC0tIGRlY1F1YWQgcmVtYWluZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQorZHFyZW0wMDEgcmVtYWluZGVyICAxICAgICAxICAgIC0+ICAwCitkcXJlbTAwMiByZW1haW5kZXIgIDIgICAgIDEgICAgLT4gIDAKK2RxcmVtMDAzIHJlbWFpbmRlciAgMSAgICAgMiAgICAtPiAgMQorZHFyZW0wMDQgcmVtYWluZGVyICAyICAgICAyICAgIC0+ICAwCitkcXJlbTAwNSByZW1haW5kZXIgIDAgICAgIDEgICAgLT4gIDAKK2RxcmVtMDA2IHJlbWFpbmRlciAgMCAgICAgMiAgICAtPiAgMAorZHFyZW0wMDcgcmVtYWluZGVyICAxICAgICAzICAgIC0+ICAxCitkcXJlbTAwOCByZW1haW5kZXIgIDIgICAgIDMgICAgLT4gIDIKK2RxcmVtMDA5IHJlbWFpbmRlciAgMyAgICAgMyAgICAtPiAgMAorCitkcXJlbTAxMCByZW1haW5kZXIgIDIuNCAgIDEgICAgLT4gIDAuNAorZHFyZW0wMTEgcmVtYWluZGVyICAyLjQgICAtMSAgIC0+ICAwLjQKK2RxcmVtMDEyIHJlbWFpbmRlciAgLTIuNCAgMSAgICAtPiAgLTAuNAorZHFyZW0wMTMgcmVtYWluZGVyICAtMi40ICAtMSAgIC0+ICAtMC40CitkcXJlbTAxNCByZW1haW5kZXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKK2RxcmVtMDE1IHJlbWFpbmRlciAgMi40MDAgMSAgICAtPiAgMC40MDAKK2RxcmVtMDE2IHJlbWFpbmRlciAgMi40ICAgMiAgICAtPiAgMC40CitkcXJlbTAxNyByZW1haW5kZXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCitkcXJlbTAxOCByZW1haW5kZXIgIDIuICAgIDIgICAgLT4gIDAKK2RxcmVtMDE5IHJlbWFpbmRlciAgMjAgICAgMjAgICAtPiAgMAorCitkcXJlbTAyMCByZW1haW5kZXIgIDE4NyAgIDE4NyAgICAtPiAgMAorZHFyZW0wMjEgcmVtYWluZGVyICA1ICAgICAyICAgICAgLT4gIDEKK2RxcmVtMDIyIHJlbWFpbmRlciAgNSAgICAgMi4wICAgIC0+ICAxLjAKK2RxcmVtMDIzIHJlbWFpbmRlciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAorZHFyZW0wMjQgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCitkcXJlbTAyNSByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKKworZHFyZW0wMzAgcmVtYWluZGVyICAxICAgICAyICAgICAgLT4gIDEKK2RxcmVtMDMxIHJlbWFpbmRlciAgMSAgICAgNCAgICAgIC0+ICAxCitkcXJlbTAzMiByZW1haW5kZXIgIDEgICAgIDggICAgICAtPiAgMQorCitkcXJlbTAzMyByZW1haW5kZXIgIDEgICAgIDE2ICAgICAtPiAgMQorZHFyZW0wMzQgcmVtYWluZGVyICAxICAgICAzMiAgICAgLT4gIDEKK2RxcmVtMDM1IHJlbWFpbmRlciAgMSAgICAgNjQgICAgIC0+ICAxCitkcXJlbTA0MCByZW1haW5kZXIgIDEgICAgLTIgICAgICAtPiAgMQorZHFyZW0wNDEgcmVtYWluZGVyICAxICAgIC00ICAgICAgLT4gIDEKK2RxcmVtMDQyIHJlbWFpbmRlciAgMSAgICAtOCAgICAgIC0+ICAxCitkcXJlbTA0MyByZW1haW5kZXIgIDEgICAgLTE2ICAgICAtPiAgMQorZHFyZW0wNDQgcmVtYWluZGVyICAxICAgIC0zMiAgICAgLT4gIDEKK2RxcmVtMDQ1IHJlbWFpbmRlciAgMSAgICAtNjQgICAgIC0+ICAxCitkcXJlbTA1MCByZW1haW5kZXIgLTEgICAgIDIgICAgICAtPiAgLTEKK2RxcmVtMDUxIHJlbWFpbmRlciAtMSAgICAgNCAgICAgIC0+ICAtMQorZHFyZW0wNTIgcmVtYWluZGVyIC0xICAgICA4ICAgICAgLT4gIC0xCitkcXJlbTA1MyByZW1haW5kZXIgLTEgICAgIDE2ICAgICAtPiAgLTEKK2RxcmVtMDU0IHJlbWFpbmRlciAtMSAgICAgMzIgICAgIC0+ICAtMQorZHFyZW0wNTUgcmVtYWluZGVyIC0xICAgICA2NCAgICAgLT4gIC0xCitkcXJlbTA2MCByZW1haW5kZXIgLTEgICAgLTIgICAgICAtPiAgLTEKK2RxcmVtMDYxIHJlbWFpbmRlciAtMSAgICAtNCAgICAgIC0+ICAtMQorZHFyZW0wNjIgcmVtYWluZGVyIC0xICAgIC04ICAgICAgLT4gIC0xCitkcXJlbTA2MyByZW1haW5kZXIgLTEgICAgLTE2ICAgICAtPiAgLTEKK2RxcmVtMDY0IHJlbWFpbmRlciAtMSAgICAtMzIgICAgIC0+ICAtMQorZHFyZW0wNjUgcmVtYWluZGVyIC0xICAgIC02NCAgICAgLT4gIC0xCisKK2RxcmVtMDY2IHJlbWFpbmRlciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCitkcXJlbTA2NyByZW1haW5kZXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40CitkcXJlbTA2OCByZW1haW5kZXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gMC41CitkcXJlbTA2OSByZW1haW5kZXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gMC45CitkcXJlbTA3MCByZW1haW5kZXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gMC45OTkKK2RxcmVtMDcxIHJlbWFpbmRlciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAwLjk5OTk5OQorZHFyZW0wNzIgcmVtYWluZGVyICA5ICAgICAgICAgICAgIDEgIC0+IDAKKworZHFyZW0wODAgcmVtYWluZGVyICAwLiAgICAgICAgICAgIDEgIC0+IDAKK2RxcmVtMDgxIHJlbWFpbmRlciAgLjAgICAgICAgICAgICAxICAtPiAwLjAKK2RxcmVtMDgyIHJlbWFpbmRlciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCitkcXJlbTA4MyByZW1haW5kZXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMAorZHFyZW0wODQgcmVtYWluZGVyICAwLjAwRSszICAgICAgIDEgIC0+IDAKK2RxcmVtMDg1IHJlbWFpbmRlciAgMC4wMEUrMiAgICAgICAxICAtPiAwCitkcXJlbTA4NiByZW1haW5kZXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wCitkcXJlbTA4NyByZW1haW5kZXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMAorZHFyZW0wODggcmVtYWluZGVyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKK2RxcmVtMDg5IHJlbWFpbmRlciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMAorZHFyZW0wOTAgcmVtYWluZGVyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMAorZHFyZW0wOTEgcmVtYWluZGVyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKK2RxcmVtMDkyIHJlbWFpbmRlciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMAorZHFyZW0wOTMgcmVtYWluZGVyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcKK2RxcmVtMDk0IHJlbWFpbmRlciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04CitkcXJlbTA5NSByZW1haW5kZXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMAorZHFyZW0xMDEgcmVtYWluZGVyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTEwMiByZW1haW5kZXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMTAzIHJlbWFpbmRlciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0xMDQgcmVtYWluZGVyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTEwNSByZW1haW5kZXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMTA2IHJlbWFpbmRlciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0CistLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcgorLS0gcmVtYWluZGVyLW5lYXIsIGFueXdheV0KK2RxcmVtMTA3IHJlbWFpbmRlciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEwOCByZW1haW5kZXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMDkgcmVtYWluZGVyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTEwIHJlbWFpbmRlciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExMSByZW1haW5kZXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTIgcmVtYWluZGVyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTEzIHJlbWFpbmRlciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExNCByZW1haW5kZXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTUgcmVtYWluZGVyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTE2IHJlbWFpbmRlciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExOSByZW1haW5kZXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMjAgcmVtYWluZGVyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTIxIHJlbWFpbmRlciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEyMiByZW1haW5kZXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMjMgcmVtYWluZGVyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTI0IHJlbWFpbmRlciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgemVyb3Mgb24gbGVmdAorZHFyZW0xMzAgcmVtYWluZGVyICAwICAgICAgMSAgIC0+ICAwCitkcXJlbTEzMSByZW1haW5kZXIgIDAgICAgIC0xICAgLT4gIDAKK2RxcmVtMTMyIHJlbWFpbmRlciAgMC4wICAgIDEgICAtPiAgMC4wCitkcXJlbTEzMyByZW1haW5kZXIgIDAuMCAgIC0xICAgLT4gIDAuMAorZHFyZW0xMzQgcmVtYWluZGVyIC0wICAgICAgMSAgIC0+IC0wCitkcXJlbTEzNSByZW1haW5kZXIgLTAgICAgIC0xICAgLT4gLTAKK2RxcmVtMTM2IHJlbWFpbmRlciAtMC4wICAgIDEgICAtPiAtMC4wCitkcXJlbTEzNyByZW1haW5kZXIgLTAuMCAgIC0xICAgLT4gLTAuMAorCistLSAwLjVlcnMKK2RxcmVtMTQzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZHFyZW0xNDQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41CitkcXJlbTE0NSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkcXJlbTE0NiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZHFyZW0xNDcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MAorZHFyZW0xNDggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MAorZHFyZW0xNDkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworLS0gc3RlYWRpZXMKK2RxcmVtMTUwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKK2RxcmVtMTUxIHJlbWFpbmRlciAgMSAgMiAgIC0+IDEKK2RxcmVtMTUyIHJlbWFpbmRlciAgMSAgMyAgIC0+IDEKK2RxcmVtMTUzIHJlbWFpbmRlciAgMSAgNCAgIC0+IDEKK2RxcmVtMTU0IHJlbWFpbmRlciAgMSAgNSAgIC0+IDEKK2RxcmVtMTU1IHJlbWFpbmRlciAgMSAgNiAgIC0+IDEKK2RxcmVtMTU2IHJlbWFpbmRlciAgMSAgNyAgIC0+IDEKK2RxcmVtMTU3IHJlbWFpbmRlciAgMSAgOCAgIC0+IDEKK2RxcmVtMTU4IHJlbWFpbmRlciAgMSAgOSAgIC0+IDEKK2RxcmVtMTU5IHJlbWFpbmRlciAgMSAgMTAgIC0+IDEKK2RxcmVtMTYwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKK2RxcmVtMTYxIHJlbWFpbmRlciAgMiAgMSAgIC0+IDAKK2RxcmVtMTYyIHJlbWFpbmRlciAgMyAgMSAgIC0+IDAKK2RxcmVtMTYzIHJlbWFpbmRlciAgNCAgMSAgIC0+IDAKK2RxcmVtMTY0IHJlbWFpbmRlciAgNSAgMSAgIC0+IDAKK2RxcmVtMTY1IHJlbWFpbmRlciAgNiAgMSAgIC0+IDAKK2RxcmVtMTY2IHJlbWFpbmRlciAgNyAgMSAgIC0+IDAKK2RxcmVtMTY3IHJlbWFpbmRlciAgOCAgMSAgIC0+IDAKK2RxcmVtMTY4IHJlbWFpbmRlciAgOSAgMSAgIC0+IDAKK2RxcmVtMTY5IHJlbWFpbmRlciAgMTAgMSAgIC0+IDAKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXIKK2RxcmVtMTcxIHJlbWFpbmRlciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwCitkcXJlbTE3MiByZW1haW5kZXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAorZHFyZW0xNzMgcmVtYWluZGVyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKK2RxcmVtMTc0IHJlbWFpbmRlciAgIDAuNTIgMS4wMjAgLT4gIDAuNTIwCitkcXJlbTE3NSByZW1haW5kZXIgICAwLjYgIDEuMDIwIC0+ICAwLjYwMAorCistLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwCitkcXJlbTIwMSByZW1haW5kZXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0yMDIgcmVtYWluZGVyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMjAzIHJlbWFpbmRlciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTIwNCByZW1haW5kZXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwNSByZW1haW5kZXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwNiByZW1haW5kZXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwNyByZW1haW5kZXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwOCByZW1haW5kZXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwOSByZW1haW5kZXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIxMCByZW1haW5kZXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIxMSByZW1haW5kZXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyCitkcXJlbTIzMSByZW1haW5kZXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMAorZHFyZW0yMzIgcmVtYWluZGVyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKK2RxcmVtMjMzIHJlbWFpbmRlciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCitkcXJlbTIzNCByZW1haW5kZXIgIC0wLjUyIDEuMDIwIC0+IC0wLjUyMAorZHFyZW0yMzUgcmVtYWluZGVyICAtMC42ICAxLjAyMCAtPiAtMC42MDAKKworLS0gaGlnaCBYcworZHFyZW0yNDAgcmVtYWluZGVyICAxRSsyICAxLjAwICAtPiAgMC4wMAorCistLSBkcXJlbTN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAorZHFyZW0zMDEgcmVtYWluZGVyICAgMSAgICAzICAgICAtPiAgMQorZHFyZW0zMDIgcmVtYWluZGVyICAgNSAgICA1ICAgICAtPiAgMAorZHFyZW0zMDMgcmVtYWluZGVyICAgMTMgICAxMCAgICAtPiAgMworZHFyZW0zMDQgcmVtYWluZGVyICAgMTMgICA1MCAgICAtPiAgMTMKK2RxcmVtMzA1IHJlbWFpbmRlciAgIDEzICAgMTAwICAgLT4gIDEzCitkcXJlbTMwNiByZW1haW5kZXIgICAxMyAgIDEwMDAgIC0+ICAxMworZHFyZW0zMDcgcmVtYWluZGVyICAgLjEzICAgIDEgICAtPiAgMC4xMworZHFyZW0zMDggcmVtYWluZGVyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKK2RxcmVtMzA5IHJlbWFpbmRlciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMworZHFyZW0zMTAgcmVtYWluZGVyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMKK2RxcmVtMzExIHJlbWFpbmRlciAgIDEwLjMzICAxICAgLT4gIDAuMzMKK2RxcmVtMzEyIHJlbWFpbmRlciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKK2RxcmVtMzEzIHJlbWFpbmRlciAgIDEwMy4zICAxICAgLT4gIDAuMworZHFyZW0zMTQgcmVtYWluZGVyICAgMTMzICAgMTAgICAtPiAgMworZHFyZW0zMTUgcmVtYWluZGVyICAgMTAzMyAgMTAgICAtPiAgMworZHFyZW0zMTYgcmVtYWluZGVyICAgMTAzMyAgNTAgICAtPiAgMzMKK2RxcmVtMzE3IHJlbWFpbmRlciAgIDEwMS4wICAzICAgLT4gIDIuMAorZHFyZW0zMTggcmVtYWluZGVyICAgMTAyLjAgIDMgICAtPiAgMC4wCitkcXJlbTMxOSByZW1haW5kZXIgICAxMDMuMCAgMyAgIC0+ICAxLjAKK2RxcmVtMzIwIHJlbWFpbmRlciAgIDIuNDAgICAxICAgLT4gIDAuNDAKK2RxcmVtMzIxIHJlbWFpbmRlciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCitkcXJlbTMyMiByZW1haW5kZXIgICAyLjQgICAgMSAgIC0+ICAwLjQKK2RxcmVtMzIzIHJlbWFpbmRlciAgIDIuNCAgICAyICAgLT4gIDAuNAorZHFyZW0zMjQgcmVtYWluZGVyICAgMi40MDAgIDIgICAtPiAgMC40MDAKK2RxcmVtMzI1IHJlbWFpbmRlciAgIDEgICAwLjMgICAgLT4gIDAuMQorZHFyZW0zMjYgcmVtYWluZGVyICAgMSAgIDAuMzAgICAtPiAgMC4xMAorZHFyZW0zMjcgcmVtYWluZGVyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKK2RxcmVtMzI4IHJlbWFpbmRlciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMAorZHFyZW0zMjkgcmVtYWluZGVyICAgMS4wICAgIDAuMyAtPiAgMC4xCitkcXJlbTMzMCByZW1haW5kZXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCitkcXJlbTMzMSByZW1haW5kZXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMAorZHFyZW0zMzIgcmVtYWluZGVyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCitkcXJlbTMzMyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK2RxcmVtMzM0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZHFyZW0zMzUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MAorZHFyZW0zMzYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK2RxcmVtMzM3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2RxcmVtMzM4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2RxcmVtMzM5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKK2RxcmVtMzQwIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgMC41MDAwMDAwCitkcXJlbTM0MSByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwCitkcXJlbTM0MiByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAKK2RxcmVtMzQzIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwCitkcXJlbTM0NCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAwCitkcXJlbTM0NSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKK2RxcmVtMzQ2IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKK2RxcmVtMzQ3IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05CitkcXJlbTM0OCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCitkcXJlbTM0OSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQorZHFyZW0zNTAgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyCisKK2RxcmVtMzUxIHJlbWFpbmRlciAgIDAuMDMgIDcgIC0+ICAwLjAzCitkcXJlbTM1MiByZW1haW5kZXIgICA1ICAgMiAgICAtPiAgMQorZHFyZW0zNTMgcmVtYWluZGVyICAgNC4xICAgMiAgICAtPiAgMC4xCitkcXJlbTM1NCByZW1haW5kZXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQorZHFyZW0zNTUgcmVtYWluZGVyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQorZHFyZW0zNTYgcmVtYWluZGVyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxCitkcXJlbTM1NyByZW1haW5kZXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQorZHFyZW0zNTggcmVtYWluZGVyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQorZHFyZW0zNTkgcmVtYWluZGVyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNworCitkcXJlbTM2MCByZW1haW5kZXIgICAxLjIgICAwLjczNDUgLT4gIDAuNDY1NQorZHFyZW0zNjEgcmVtYWluZGVyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKK2RxcmVtMzYyIHJlbWFpbmRlciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wCitkcXJlbTM2MyByZW1haW5kZXIgICAwLjggICAwLjMgICAgLT4gIDAuMgorZHFyZW0zNjQgcmVtYWluZGVyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAorZHFyZW0zNjUgcmVtYWluZGVyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMAorZHFyZW0zNjYgcmVtYWluZGVyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAorCitkcXJlbTM3MSByZW1haW5kZXIgICAyLjQwMCAgMiAgICAgICAgLT4gIDAuNDAwCisKK2RxcmVtMzgxIHJlbWFpbmRlciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCitkcXJlbTM4MiByZW1haW5kZXIgMTIzNDUgIDEuMDAwMSAgICAtPiAgMC43NjU3CitkcXJlbTM4MyByZW1haW5kZXIgMTIzNDUgIDEuMDAxICAgICAtPiAgMC42NjgKK2RxcmVtMzg0IHJlbWFpbmRlciAxMjM0NSAgMS4wMSAgICAgIC0+ICAwLjc4CitkcXJlbTM4NSByZW1haW5kZXIgMTIzNDUgIDEuMSAgICAgICAtPiAgMC44CitkcXJlbTM4NiByZW1haW5kZXIgMTIzNTUgIDQgICAgICAgICAtPiAgMworZHFyZW0zODcgcmVtYWluZGVyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKK2RxcmVtMzg4IHJlbWFpbmRlciAxMjM1NSAgNC4wMDAxICAgIC0+ICAyLjY5MTIKK2RxcmVtMzg5IHJlbWFpbmRlciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKK2RxcmVtMzkwIHJlbWFpbmRlciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKK2RxcmVtMzkxIHJlbWFpbmRlciAxMjM0NSAgNC45OSAgICAgIC0+ICA0LjczCitkcXJlbTM5MiByZW1haW5kZXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKK2RxcmVtMzkzIHJlbWFpbmRlciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKK2RxcmVtMzk0IHJlbWFpbmRlciAxMjM0NSAgNSAgICAgICAgIC0+ICAwCitkcXJlbTM5NSByZW1haW5kZXIgMTIzNDUgIDUuMDAwMSAgICAtPiAgNC43NTMyCitkcXJlbTM5NiByZW1haW5kZXIgMTIzNDUgIDUuMDAxICAgICAtPiAgMi41MzIKK2RxcmVtMzk3IHJlbWFpbmRlciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2CitkcXJlbTM5OCByZW1haW5kZXIgMTIzNDUgIDUuMSAgICAgICAtPiAgMy4wCisKKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCitkcXJlbTQwMSByZW1haW5kZXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQorZHFyZW00MDIgcmVtYWluZGVyICAgMC41NSAgICAgICAgMSAgIC0+ICAwLjU1CitkcXJlbTQwMyByZW1haW5kZXIgICAwLjU1NSAgICAgICAxICAgLT4gIDAuNTU1CitkcXJlbTQwNCByZW1haW5kZXIgICAwLjU1NTUgICAgICAxICAgLT4gIDAuNTU1NQorZHFyZW00MDUgcmVtYWluZGVyICAgMC41NTU1NSAgICAgMSAgIC0+ICAwLjU1NTU1CitkcXJlbTQwNiByZW1haW5kZXIgICAwLjU1NTU1NSAgICAxICAgLT4gIDAuNTU1NTU1CitkcXJlbTQwNyByZW1haW5kZXIgICAwLjU1NTU1NTUgICAxICAgLT4gIDAuNTU1NTU1NQorZHFyZW00MDggcmVtYWluZGVyICAgMC41NTU1NTU1NSAgMSAgIC0+ICAwLjU1NTU1NTU1CitkcXJlbTQwOSByZW1haW5kZXIgICAwLjU1NTU1NTU1NSAxICAgLT4gIDAuNTU1NTU1NTU1CisKKy0tIGZvbGRkb3ducworZHFyZW00MjEgcmVtYWluZGVyICAgMUUrNjE0NCAgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFyZW00MjIgcmVtYWluZGVyICAgMUUrNjE0NCAgMUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQKK2RxcmVtNDIzIHJlbWFpbmRlciAgIDFFKzYxNDQgIDJFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJlbTQyNCByZW1haW5kZXIgICAxRSs2MTQ0ICAzRSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFyZW00MjUgcmVtYWluZGVyICAgMUUrNjE0NCAgNEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2RxcmVtNDI2IHJlbWFpbmRlciAgIDFFKzYxNDQgIDVFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJlbTQyNyByZW1haW5kZXIgICAxRSs2MTQ0ICA2RSs2MTQzICAtPiAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFyZW00MjggcmVtYWluZGVyICAgMUUrNjE0NCAgN0UrNjE0MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2RxcmVtNDI5IHJlbWFpbmRlciAgIDFFKzYxNDQgIDhFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJlbTQzMCByZW1haW5kZXIgICAxRSs2MTQ0ICA5RSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorLS0gdGluaWVzCitkcXJlbTQzMSByZW1haW5kZXIgICAxRS02MTc1ICAxRS02MTc2ICAtPiAgIDBFLTYxNzYKK2RxcmVtNDMyIHJlbWFpbmRlciAgIDFFLTYxNzUgIDJFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFyZW00MzMgcmVtYWluZGVyICAgMUUtNjE3NSAgM0UtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbAorZHFyZW00MzQgcmVtYWluZGVyICAgMUUtNjE3NSAgNEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbAorZHFyZW00MzUgcmVtYWluZGVyICAgMUUtNjE3NSAgNUUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJlbTQzNiByZW1haW5kZXIgICAxRS02MTc1ICA2RS02MTc2ICAtPiAgIDRFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQzNyByZW1haW5kZXIgICAxRS02MTc1ICA3RS02MTc2ICAtPiAgIDNFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQzOCByZW1haW5kZXIgICAxRS02MTc1ICA4RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQzOSByZW1haW5kZXIgICAxRS02MTc1ICA5RS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQ0MCByZW1haW5kZXIgICAxRS02MTc1IDEwRS02MTc2ICAtPiAgIDBFLTYxNzYKK2RxcmVtNDQxIHJlbWFpbmRlciAgIDFFLTYxNzUgMTFFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKK2RxcmVtNDQyIHJlbWFpbmRlciAxMDBFLTYxNzUgMTFFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKK2RxcmVtNDQzIHJlbWFpbmRlciAxMDBFLTYxNzUgMjBFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFyZW00NDQgcmVtYWluZGVyIDEwMEUtNjE3NSAyMUUtNjE3NiAgLT4gMS4zRS02MTc1IFN1Ym5vcm1hbAorZHFyZW00NDUgcmVtYWluZGVyIDEwMEUtNjE3NSAzMEUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorCistLSB6ZXJvIHNpZ25zCitkcXJlbTY1MCByZW1haW5kZXIgIDEgIDEgLT4gIDAKK2RxcmVtNjUxIHJlbWFpbmRlciAtMSAgMSAtPiAtMAorZHFyZW02NTIgcmVtYWluZGVyICAxIC0xIC0+ICAwCitkcXJlbTY1MyByZW1haW5kZXIgLTEgLTEgLT4gLTAKK2RxcmVtNjU0IHJlbWFpbmRlciAgMCAgMSAtPiAgMAorZHFyZW02NTUgcmVtYWluZGVyIC0wICAxIC0+IC0wCitkcXJlbTY1NiByZW1haW5kZXIgIDAgLTEgLT4gIDAKK2RxcmVtNjU3IHJlbWFpbmRlciAtMCAtMSAtPiAtMAorZHFyZW02NTggcmVtYWluZGVyICAwLjAwICAxICAtPiAgMC4wMAorZHFyZW02NTkgcmVtYWluZGVyIC0wLjAwICAxICAtPiAtMC4wMAorCistLSBTcGVjaWFscworZHFyZW02ODAgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4MSByZW1haW5kZXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjgyIHJlbWFpbmRlciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODMgcmVtYWluZGVyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4NCByZW1haW5kZXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjg1IHJlbWFpbmRlciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODYgcmVtYWluZGVyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4NyByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjg4IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RxcmVtNjg5IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02OTEgcmVtYWluZGVyIC0xICAgICBJbmYgICAtPiAtMQorZHFyZW02OTIgcmVtYWluZGVyICAwICAgICBJbmYgICAtPiAgMAorZHFyZW02OTMgcmVtYWluZGVyIC0wICAgICBJbmYgICAtPiAtMAorZHFyZW02OTQgcmVtYWluZGVyICAxICAgICBJbmYgICAtPiAgMQorZHFyZW02OTUgcmVtYWluZGVyICAxMDAwICBJbmYgICAtPiAgMTAwMAorZHFyZW02OTYgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxcmVtNzAwIHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDEgcmVtYWluZGVyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwMiByZW1haW5kZXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzAzIHJlbWFpbmRlciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDQgcmVtYWluZGVyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwNSByZW1haW5kZXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzA2IHJlbWFpbmRlciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDcgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwOCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzA5IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RxcmVtNzEwIHJlbWFpbmRlciAtMSAgICAtSW5mICAgLT4gLTEKK2RxcmVtNzExIHJlbWFpbmRlciAtMCAgICAtSW5mICAgLT4gLTAKK2RxcmVtNzEyIHJlbWFpbmRlciAgMCAgICAtSW5mICAgLT4gIDAKK2RxcmVtNzEzIHJlbWFpbmRlciAgMSAgICAtSW5mICAgLT4gIDEKK2RxcmVtNzE0IHJlbWFpbmRlciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2RxcmVtNzE1IHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXJlbTcyMSByZW1haW5kZXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxcmVtNzIyIHJlbWFpbmRlciAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFyZW03MjMgcmVtYWluZGVyICBOYU4gLTEgICAgICAtPiAgTmFOCitkcXJlbTcyNCByZW1haW5kZXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxcmVtNzI1IHJlbWFpbmRlciAtTmFOICAwICAgICAgLT4gLU5hTgorZHFyZW03MjYgcmVtYWluZGVyICBOYU4gIDEgICAgICAtPiAgTmFOCitkcXJlbTcyNyByZW1haW5kZXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxcmVtNzI4IHJlbWFpbmRlciAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFyZW03MjkgcmVtYWluZGVyICBOYU4gLU5hTiAgICAtPiAgTmFOCitkcXJlbTczMCByZW1haW5kZXIgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxcmVtNzMxIHJlbWFpbmRlciAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFyZW03MzIgcmVtYWluZGVyIC0xICAgIE5hTiAgICAtPiAgTmFOCitkcXJlbTczMyByZW1haW5kZXIgLTAgICAtTmFOICAgIC0+IC1OYU4KK2RxcmVtNzM0IHJlbWFpbmRlciAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFyZW03MzUgcmVtYWluZGVyICAxICAgLU5hTiAgICAtPiAtTmFOCitkcXJlbTczNiByZW1haW5kZXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxcmVtNzM3IHJlbWFpbmRlciAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcXJlbTc0MSByZW1haW5kZXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0MiByZW1haW5kZXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0MyByZW1haW5kZXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0NCByZW1haW5kZXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0NSByZW1haW5kZXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0NiByZW1haW5kZXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0NyByZW1haW5kZXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0OSByZW1haW5kZXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1MCByZW1haW5kZXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1MSByZW1haW5kZXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1MiByZW1haW5kZXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1MyByZW1haW5kZXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1NCByZW1haW5kZXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1NSByZW1haW5kZXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1NiByZW1haW5kZXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1NyByZW1haW5kZXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1OCByZW1haW5kZXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1OSByZW1haW5kZXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCitkcXJlbTc2MCByZW1haW5kZXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjEKK2RxcmVtNzYxIHJlbWFpbmRlciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NjIgcmVtYWluZGVyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc2MyByZW1haW5kZXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzY0IHJlbWFpbmRlciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTEKK2RxcmVtNzY1IHJlbWFpbmRlciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorZHFyZW03NjYgcmVtYWluZGVyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMworZHFyZW03NjcgcmVtYWluZGVyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNAorZHFyZW03NjggcmVtYWluZGVyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorZHFyZW03NjkgcmVtYWluZGVyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNgorCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKK2RxcmVtNzcwICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgIDEwICAgIC0+ICA2CitkcXJlbTc3MSAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAorZHFyZW03NzIgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJlbTc3MyAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworZHFyZW04MDEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkcXJlbTgwMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKK2RxcmVtODAzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZHFyZW04MDQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkcXJlbTgwNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKK2RxcmVtODA2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZHFyZW04MDcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkcXJlbTgwOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RxcmVtODA5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZHFyZW04MTAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcXJlbTgxMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYKK2RxcmVtODEyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitkcXJlbTgyMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK2RxcmVtODIyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZHFyZW04MjMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkcXJlbTgyNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK2RxcmVtODI1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZHFyZW04MjYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkcXJlbTgyNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK2RxcmVtODI4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZHFyZW04MjkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkcXJlbTgzMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RxcmVtODMxIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNgorZHFyZW04MzIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZGl2aWRlaW50CitkcXJlbTg0MCByZW1haW5kZXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMAorZHFyZW04NDEgcmVtYWluZGVyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKK2RxcmVtODQyIHJlbWFpbmRlciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41CitkcXJlbTg0MyByZW1haW5kZXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gIDAuOQorZHFyZW04NDQgcmVtYWluZGVyICAxMDAwMDAwMDAuOTk5IDEgIC0+ICAwLjk5OQorZHFyZW04NTAgcmVtYWluZGVyICAxMDAwMDAwMDMgICAgIDUgIC0+ICAzCitkcXJlbTg1MSByZW1haW5kZXIgIDEwMDAwMDAzICAgICAgNSAgLT4gIDMKK2RxcmVtODUyIHJlbWFpbmRlciAgMTAwMDAwMyAgICAgICA1ICAtPiAgMworZHFyZW04NTMgcmVtYWluZGVyICAxMDAwMDMgICAgICAgIDUgIC0+ICAzCitkcXJlbTg1NCByZW1haW5kZXIgIDEwMDAzICAgICAgICAgNSAgLT4gIDMKK2RxcmVtODU1IHJlbWFpbmRlciAgMTAwMyAgICAgICAgICA1ICAtPiAgMworZHFyZW04NTYgcmVtYWluZGVyICAxMDMgICAgICAgICAgIDUgIC0+ICAzCitkcXJlbTg1NyByZW1haW5kZXIgIDEzICAgICAgICAgICAgNSAgLT4gIDMKK2RxcmVtODU4IHJlbWFpbmRlciAgMSAgICAgICAgICAgICA1ICAtPiAgMQorCistLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFyZW04NjAgcmVtYWluZGVyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NjEgcmVtYWluZGVyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NjIgcmVtYWluZGVyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NjMgcmVtYWluZGVyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NjQgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NzAgcmVtYWluZGVyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzEgcmVtYWluZGVyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzIgcmVtYWluZGVyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzQgcmVtYWluZGVyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzggcmVtYWluZGVyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAorZHFyZW04ODAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMAorZHFyZW04ODEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMAorZHFyZW04ODIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAorZHFyZW04ODMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMAorZHFyZW04ODQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMAorZHFyZW04ODUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAorZHFyZW04ODYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMAorCitkcXJlbTg5MCByZW1haW5kZXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5MSByZW1haW5kZXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5MiByZW1haW5kZXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5MyByZW1haW5kZXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkwMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwCitkcXJlbTkwMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCitkcXJlbTkwMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwCitkcXJlbTkwMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAxMjMwCitkcXJlbTkwNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCitkcXJlbTkwNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgIDEwCitkcXJlbTkwNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwCisKK2RxcmVtOTEwIHJlbWFpbmRlciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTExIHJlbWFpbmRlciAxMjNlMSAgICAgNTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTEyIHJlbWFpbmRlciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTEzIHJlbWFpbmRlciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgNTAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgNTAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTIwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKK2RxcmVtOTIxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgNTAwMDAwIC0+IDEyMzAKK2RxcmVtOTIyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzAKK2RxcmVtOTIzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKK2RxcmVtOTI0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgNTAwIC0+ICAyMzAKK2RxcmVtOTI1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAgMzAKK2RxcmVtOTI2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKKworZHFyZW05MzAgcmVtYWluZGVyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzEgcmVtYWluZGVyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzIgcmVtYWluZGVyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzQgcmVtYWluZGVyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAorZHFyZW05NDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMAorZHFyZW05NDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMAorZHFyZW05NDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAorZHFyZW05NDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMAorZHFyZW05NDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMAorZHFyZW05NDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gICA2MAorZHFyZW05NDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAgNgorCitkcXJlbTk1MCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTYxIHJlbWFpbmRlciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjIgcmVtYWluZGVyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2MyByZW1haW5kZXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTY0IHJlbWFpbmRlciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjUgcmVtYWluZGVyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2NiByZW1haW5kZXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTY3IHJlbWFpbmRlciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjggcmVtYWluZGVyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2OSByZW1haW5kZXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzAKKworZHFyZW05ODAgcmVtYWluZGVyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5CisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorZHFyZW0xMDUxIHJlbWFpbmRlciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJlbTEwNTIgcmVtYWluZGVyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxcmVtMTA1MyByZW1haW5kZXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFyZW0xMDU0IHJlbWFpbmRlciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJlbTEwNTUgcmVtYWluZGVyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3CitkcXJlbTEwNTYgcmVtYWluZGVyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3CitkcXJlbTEwNTcgcmVtYWluZGVyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3CitkcXJlbTEwNTggcmVtYWluZGVyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3CisKKy0tIEd5dXJpcyBleGFtcGxlCitkcXJlbTEwNzAgcmVtYWluZGVyIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzCisKKy0tIGRlc3RydWN0aXZlIHN1YnRyYWN0CitkcXJlbTExMjAgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2OAorZHFyZW0xMTIxICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDAuNjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NzkKK2RxcmVtMTEyMiAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgMC41NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4ODkwCitkcXJlbTExMjMgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY4NworZHFyZW0xMTI0ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTIKK2RxcmVtMTEyNSAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAgMy42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUxCitkcXJlbTExMjYgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NworZHFyZW0xMTI3ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgNC4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYKK2RxcmVtMTEyOCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgNC4zMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU5CisKKy0tIE51bGwgdGVzdHMKK2RxcmVtMTAwMCByZW1haW5kZXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEwMDEgcmVtYWluZGVyICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyTmVhci5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlck5lYXIuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGQyNzNmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlck5lYXIuZGVjVGVzdApAQCAtMCwwICsxLDYzMSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVJlbWFpbmRlck5lYXIuZGVjVGVzdCAtLSBkZWNRdWFkIHJlbWFpbmRlci1uZWFyICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQorZHFybW4wMDEgcmVtYWluZGVybmVhciAgMSAgICAgMSAgICAtPiAgMAorZHFybW4wMDIgcmVtYWluZGVybmVhciAgMiAgICAgMSAgICAtPiAgMAorZHFybW4wMDMgcmVtYWluZGVybmVhciAgMSAgICAgMiAgICAtPiAgMQorZHFybW4wMDQgcmVtYWluZGVybmVhciAgMiAgICAgMiAgICAtPiAgMAorZHFybW4wMDUgcmVtYWluZGVybmVhciAgMCAgICAgMSAgICAtPiAgMAorZHFybW4wMDYgcmVtYWluZGVybmVhciAgMCAgICAgMiAgICAtPiAgMAorZHFybW4wMDcgcmVtYWluZGVybmVhciAgMSAgICAgMyAgICAtPiAgMQorZHFybW4wMDggcmVtYWluZGVybmVhciAgMiAgICAgMyAgICAtPiAtMQorZHFybW4wMDkgcmVtYWluZGVybmVhciAgMyAgICAgMyAgICAtPiAgMAorCitkcXJtbjAxMCByZW1haW5kZXJuZWFyICAyLjQgICAxICAgIC0+ICAwLjQKK2Rxcm1uMDExIHJlbWFpbmRlcm5lYXIgIDIuNCAgIC0xICAgLT4gIDAuNAorZHFybW4wMTIgcmVtYWluZGVybmVhciAgLTIuNCAgMSAgICAtPiAgLTAuNAorZHFybW4wMTMgcmVtYWluZGVybmVhciAgLTIuNCAgLTEgICAtPiAgLTAuNAorZHFybW4wMTQgcmVtYWluZGVybmVhciAgMi40MCAgMSAgICAtPiAgMC40MAorZHFybW4wMTUgcmVtYWluZGVybmVhciAgMi40MDAgMSAgICAtPiAgMC40MDAKK2Rxcm1uMDE2IHJlbWFpbmRlcm5lYXIgIDIuNCAgIDIgICAgLT4gIDAuNAorZHFybW4wMTcgcmVtYWluZGVybmVhciAgMi40MDAgMiAgICAtPiAgMC40MDAKK2Rxcm1uMDE4IHJlbWFpbmRlcm5lYXIgIDIuICAgIDIgICAgLT4gIDAKK2Rxcm1uMDE5IHJlbWFpbmRlcm5lYXIgIDIwICAgIDIwICAgLT4gIDAKKworZHFybW4wMjAgcmVtYWluZGVybmVhciAgMTg3ICAgMTg3ICAgIC0+ICAwCitkcXJtbjAyMSByZW1haW5kZXJuZWFyICA1ICAgICAyICAgICAgLT4gIDEKK2Rxcm1uMDIyIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIuMCAgICAtPiAgMS4wCitkcXJtbjAyMyByZW1haW5kZXJuZWFyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwCitkcXJtbjAyNCByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCitkcXJtbjAyNSByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCisKK2Rxcm1uMDMwIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgICAtPiAgMQorZHFybW4wMzEgcmVtYWluZGVybmVhciAgMSAgICAgNCAgICAgIC0+ICAxCitkcXJtbjAzMiByZW1haW5kZXJuZWFyICAxICAgICA4ICAgICAgLT4gIDEKKworZHFybW4wMzMgcmVtYWluZGVybmVhciAgMSAgICAgMTYgICAgIC0+ICAxCitkcXJtbjAzNCByZW1haW5kZXJuZWFyICAxICAgICAzMiAgICAgLT4gIDEKK2Rxcm1uMDM1IHJlbWFpbmRlcm5lYXIgIDEgICAgIDY0ICAgICAtPiAgMQorZHFybW4wNDAgcmVtYWluZGVybmVhciAgMSAgICAtMiAgICAgIC0+ICAxCitkcXJtbjA0MSByZW1haW5kZXJuZWFyICAxICAgIC00ICAgICAgLT4gIDEKK2Rxcm1uMDQyIHJlbWFpbmRlcm5lYXIgIDEgICAgLTggICAgICAtPiAgMQorZHFybW4wNDMgcmVtYWluZGVybmVhciAgMSAgICAtMTYgICAgIC0+ICAxCitkcXJtbjA0NCByZW1haW5kZXJuZWFyICAxICAgIC0zMiAgICAgLT4gIDEKK2Rxcm1uMDQ1IHJlbWFpbmRlcm5lYXIgIDEgICAgLTY0ICAgICAtPiAgMQorZHFybW4wNTAgcmVtYWluZGVybmVhciAtMSAgICAgMiAgICAgIC0+ICAtMQorZHFybW4wNTEgcmVtYWluZGVybmVhciAtMSAgICAgNCAgICAgIC0+ICAtMQorZHFybW4wNTIgcmVtYWluZGVybmVhciAtMSAgICAgOCAgICAgIC0+ICAtMQorZHFybW4wNTMgcmVtYWluZGVybmVhciAtMSAgICAgMTYgICAgIC0+ICAtMQorZHFybW4wNTQgcmVtYWluZGVybmVhciAtMSAgICAgMzIgICAgIC0+ICAtMQorZHFybW4wNTUgcmVtYWluZGVybmVhciAtMSAgICAgNjQgICAgIC0+ICAtMQorZHFybW4wNjAgcmVtYWluZGVybmVhciAtMSAgICAtMiAgICAgIC0+ICAtMQorZHFybW4wNjEgcmVtYWluZGVybmVhciAtMSAgICAtNCAgICAgIC0+ICAtMQorZHFybW4wNjIgcmVtYWluZGVybmVhciAtMSAgICAtOCAgICAgIC0+ICAtMQorZHFybW4wNjMgcmVtYWluZGVybmVhciAtMSAgICAtMTYgICAgIC0+ICAtMQorZHFybW4wNjQgcmVtYWluZGVybmVhciAtMSAgICAtMzIgICAgIC0+ICAtMQorZHFybW4wNjUgcmVtYWluZGVybmVhciAtMSAgICAtNjQgICAgIC0+ICAtMQorCitkcXJtbjA2NiByZW1haW5kZXJuZWFyICAgICAgICAgIDkuOSAgIDEgIC0+IC0wLjEKK2Rxcm1uMDY3IHJlbWFpbmRlcm5lYXIgICAgICAgICA5OS43ICAgMSAgLT4gLTAuMworZHFybW4wNjggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCitkcXJtbjA2OSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNAorZHFybW4wNzAgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjUgICAxICAtPiAtMC41CitkcXJtbjA3MSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOSAgIDEgIC0+IC0wLjEKK2Rxcm1uMDcyIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gLTAuMDAxCitkcXJtbjA3MyByZW1haW5kZXJuZWFyICA5OTk5OTkuOTk5OTk5IDEgIC0+IC0wLjAwMDAwMQorZHFybW4wNzQgcmVtYWluZGVybmVhciAgOSAgICAgICAgICAgICAxICAtPiAwCitkcXJtbjA3NSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDAKK2Rxcm1uMDc2IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMiAgLT4gLTEKK2Rxcm1uMDc3IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMyAgLT4gMAorZHFybW4wNzggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSA0ICAtPiAtMQorCitkcXJtbjA4MCByZW1haW5kZXJuZWFyICAwLiAgICAgICAgICAgIDEgIC0+IDAKK2Rxcm1uMDgxIHJlbWFpbmRlcm5lYXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wCitkcXJtbjA4MiByZW1haW5kZXJuZWFyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDAKK2Rxcm1uMDgzIHJlbWFpbmRlcm5lYXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMAorZHFybW4wODQgcmVtYWluZGVybmVhciAgMC4wMEUrMyAgICAgICAxICAtPiAwCitkcXJtbjA4NSByZW1haW5kZXJuZWFyICAwLjAwRSsyICAgICAgIDEgIC0+IDAKK2Rxcm1uMDg2IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wCitkcXJtbjA4NyByZW1haW5kZXJuZWFyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDAKK2Rxcm1uMDg4IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMAorZHFybW4wODkgcmVtYWluZGVybmVhciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMAorZHFybW4wOTAgcmVtYWluZGVybmVhciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDAKK2Rxcm1uMDkxIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMAorZHFybW4wOTIgcmVtYWluZGVybmVhciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMAorZHFybW4wOTMgcmVtYWluZGVybmVhciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03CitkcXJtbjA5NCByZW1haW5kZXJuZWFyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgKK2Rxcm1uMDk1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDAKK2Rxcm1uMTAxIHJlbWFpbmRlcm5lYXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rxcm1uMTAyIHJlbWFpbmRlcm5lYXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rxcm1uMTAzIHJlbWFpbmRlcm5lYXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rxcm1uMTA0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rxcm1uMTA1IHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rxcm1uMTA2IHJlbWFpbmRlcm5lYXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKy0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dAorLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3IKKy0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldCitkcXJtbjEwNyByZW1haW5kZXJuZWFyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTA4IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMDkgcmVtYWluZGVybmVhciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExMCByZW1haW5kZXJuZWFyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTExIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTIgcmVtYWluZGVybmVhciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExMyByZW1haW5kZXJuZWFyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTE0IHJlbWFpbmRlcm5lYXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTUgcmVtYWluZGVybmVhciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExNiByZW1haW5kZXJuZWFyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTE5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMjAgcmVtYWluZGVybmVhciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEyMSByZW1haW5kZXJuZWFyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTIyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMjMgcmVtYWluZGVybmVhciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEyNCByZW1haW5kZXJuZWFyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB6ZXJvcyBvbiBsZWZ0CitkcXJtbjEzMCByZW1haW5kZXJuZWFyICAwICAgICAgMSAgIC0+ICAwCitkcXJtbjEzMSByZW1haW5kZXJuZWFyICAwICAgICAtMSAgIC0+ICAwCitkcXJtbjEzMiByZW1haW5kZXJuZWFyICAwLjAgICAgMSAgIC0+ICAwLjAKK2Rxcm1uMTMzIHJlbWFpbmRlcm5lYXIgIDAuMCAgIC0xICAgLT4gIDAuMAorZHFybW4xMzQgcmVtYWluZGVybmVhciAtMCAgICAgIDEgICAtPiAtMAorZHFybW4xMzUgcmVtYWluZGVybmVhciAtMCAgICAgLTEgICAtPiAtMAorZHFybW4xMzYgcmVtYWluZGVybmVhciAtMC4wICAgIDEgICAtPiAtMC4wCitkcXJtbjEzNyByZW1haW5kZXJuZWFyIC0wLjAgICAtMSAgIC0+IC0wLjAKKworLS0gMC41ZXJzCitkcXJtbjE0MyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41CitkcXJtbjE0NCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41CitkcXJtbjE0NSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAorZHFybW4xNDYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkcXJtbjE0NyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAorZHFybW4xNDggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2Rxcm1uMTQ5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCistLSBzdGVhZGllcworZHFybW4xNTAgcmVtYWluZGVybmVhciAgMSAgMSAgIC0+IDAKK2Rxcm1uMTUxIHJlbWFpbmRlcm5lYXIgIDEgIDIgICAtPiAxCitkcXJtbjE1MiByZW1haW5kZXJuZWFyICAxICAzICAgLT4gMQorZHFybW4xNTMgcmVtYWluZGVybmVhciAgMSAgNCAgIC0+IDEKK2Rxcm1uMTU0IHJlbWFpbmRlcm5lYXIgIDEgIDUgICAtPiAxCitkcXJtbjE1NSByZW1haW5kZXJuZWFyICAxICA2ICAgLT4gMQorZHFybW4xNTYgcmVtYWluZGVybmVhciAgMSAgNyAgIC0+IDEKK2Rxcm1uMTU3IHJlbWFpbmRlcm5lYXIgIDEgIDggICAtPiAxCitkcXJtbjE1OCByZW1haW5kZXJuZWFyICAxICA5ICAgLT4gMQorZHFybW4xNTkgcmVtYWluZGVybmVhciAgMSAgMTAgIC0+IDEKK2Rxcm1uMTYwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCitkcXJtbjE2MSByZW1haW5kZXJuZWFyICAyICAxICAgLT4gMAorZHFybW4xNjIgcmVtYWluZGVybmVhciAgMyAgMSAgIC0+IDAKK2Rxcm1uMTYzIHJlbWFpbmRlcm5lYXIgIDQgIDEgICAtPiAwCitkcXJtbjE2NCByZW1haW5kZXJuZWFyICA1ICAxICAgLT4gMAorZHFybW4xNjUgcmVtYWluZGVybmVhciAgNiAgMSAgIC0+IDAKK2Rxcm1uMTY2IHJlbWFpbmRlcm5lYXIgIDcgIDEgICAtPiAwCitkcXJtbjE2NyByZW1haW5kZXJuZWFyICA4ICAxICAgLT4gMAorZHFybW4xNjggcmVtYWluZGVybmVhciAgOSAgMSAgIC0+IDAKK2Rxcm1uMTY5IHJlbWFpbmRlcm5lYXIgIDEwIDEgICAtPiAwCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXIKK2Rxcm1uMTcxIHJlbWFpbmRlcm5lYXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMAorZHFybW4xNzIgcmVtYWluZGVybmVhciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCitkcXJtbjE3MyByZW1haW5kZXJuZWFyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKK2Rxcm1uMTc0IHJlbWFpbmRlcm5lYXIgICAwLjUyIDEuMDIwIC0+IC0wLjUwMAorZHFybW4xNzUgcmVtYWluZGVybmVhciAgIDAuNiAgMS4wMjAgLT4gLTAuNDIwCisKKy0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCitkcXJtbjIwMSByZW1haW5kZXJuZWFyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rxcm1uMjAyIHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFybW4yMDMgcmVtYWluZGVybmVhciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjIwNCByZW1haW5kZXJuZWFyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4yMDUgcmVtYWluZGVybmVhciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjA2IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjIwNyByZW1haW5kZXJuZWFyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4yMDggcmVtYWluZGVybmVhciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjA5IHJlbWFpbmRlcm5lYXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjIxMCByZW1haW5kZXJuZWFyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4yMTEgcmVtYWluZGVybmVhciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gdGVzdHMgZnJvbSB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbgorZHFybW4yMjEgcmVtYWluZGVybmVhciAyLjEgICAgIDMgICAtPiAtMC45CitkcXJtbjIyMiByZW1haW5kZXJuZWFyICAxMCAgICAgNiAgIC0+IC0yCitkcXJtbjIyMyByZW1haW5kZXJuZWFyICAxMCAgICAgMyAgIC0+ICAxCitkcXJtbjIyNCByZW1haW5kZXJuZWFyIC0xMCAgICAgMyAgIC0+IC0xCitkcXJtbjIyNSByZW1haW5kZXJuZWFyICAxMC4yICAgMSAgIC0+IDAuMgorZHFybW4yMjYgcmVtYWluZGVybmVhciAgMTAgICAgIDAuMyAtPiAwLjEKK2Rxcm1uMjI3IHJlbWFpbmRlcm5lYXIgICAzLjYgICAxLjMgLT4gLTAuMworCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCitkcXJtbjIzMSByZW1haW5kZXJuZWFyICAtMC40ICAxLjAyMCAtPiAtMC40MDAKK2Rxcm1uMjMyIHJlbWFpbmRlcm5lYXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMAorZHFybW4yMzMgcmVtYWluZGVybmVhciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCitkcXJtbjIzNCByZW1haW5kZXJuZWFyICAtMC41MiAxLjAyMCAtPiAgMC41MDAKK2Rxcm1uMjM1IHJlbWFpbmRlcm5lYXIgIC0wLjYgIDEuMDIwIC0+ICAwLjQyMAorCistLSBoaWdoIFhzCitkcXJtbjI0MCByZW1haW5kZXJuZWFyICAxRSsyICAxLjAwICAtPiAgMC4wMAorCistLSBkcXJtbjN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAorZHFybW4zMDEgcmVtYWluZGVybmVhciAgIDEgICAgMyAgICAgLT4gIDEKK2Rxcm1uMzAyIHJlbWFpbmRlcm5lYXIgICA1ICAgIDUgICAgIC0+ICAwCitkcXJtbjMwMyByZW1haW5kZXJuZWFyICAgMTMgICAxMCAgICAtPiAgMworZHFybW4zMDQgcmVtYWluZGVybmVhciAgIDEzICAgNTAgICAgLT4gIDEzCitkcXJtbjMwNSByZW1haW5kZXJuZWFyICAgMTMgICAxMDAgICAtPiAgMTMKK2Rxcm1uMzA2IHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwMDAgIC0+ICAxMworZHFybW4zMDcgcmVtYWluZGVybmVhciAgIC4xMyAgICAxICAgLT4gIDAuMTMKK2Rxcm1uMzA4IHJlbWFpbmRlcm5lYXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMworZHFybW4zMDkgcmVtYWluZGVybmVhciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMworZHFybW4zMTAgcmVtYWluZGVybmVhciAgIDEuMDMzICAxICAgLT4gIDAuMDMzCitkcXJtbjMxMSByZW1haW5kZXJuZWFyICAgMTAuMzMgIDEgICAtPiAgMC4zMworZHFybW4zMTIgcmVtYWluZGVybmVhciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKK2Rxcm1uMzEzIHJlbWFpbmRlcm5lYXIgICAxMDMuMyAgMSAgIC0+ICAwLjMKK2Rxcm1uMzE0IHJlbWFpbmRlcm5lYXIgICAxMzMgICAxMCAgIC0+ICAzCitkcXJtbjMxNSByZW1haW5kZXJuZWFyICAgMTAzMyAgMTAgICAtPiAgMworZHFybW4zMTYgcmVtYWluZGVybmVhciAgIDEwMzMgIDUwICAgLT4gLTE3CitkcXJtbjMxNyByZW1haW5kZXJuZWFyICAgMTAxLjAgIDMgICAtPiAtMS4wCitkcXJtbjMxOCByZW1haW5kZXJuZWFyICAgMTAyLjAgIDMgICAtPiAgMC4wCitkcXJtbjMxOSByZW1haW5kZXJuZWFyICAgMTAzLjAgIDMgICAtPiAgMS4wCitkcXJtbjMyMCByZW1haW5kZXJuZWFyICAgMi40MCAgIDEgICAtPiAgMC40MAorZHFybW4zMjEgcmVtYWluZGVybmVhciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCitkcXJtbjMyMiByZW1haW5kZXJuZWFyICAgMi40ICAgIDEgICAtPiAgMC40CitkcXJtbjMyMyByZW1haW5kZXJuZWFyICAgMi40ICAgIDIgICAtPiAgMC40CitkcXJtbjMyNCByZW1haW5kZXJuZWFyICAgMi40MDAgIDIgICAtPiAgMC40MDAKK2Rxcm1uMzI1IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zICAgIC0+ICAwLjEKK2Rxcm1uMzI2IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMCAgIC0+ICAwLjEwCitkcXJtbjMyNyByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKK2Rxcm1uMzI4IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDAKK2Rxcm1uMzI5IHJlbWFpbmRlcm5lYXIgICAxLjAgICAgMC4zIC0+ICAwLjEKK2Rxcm1uMzMwIHJlbWFpbmRlcm5lYXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCitkcXJtbjMzMSByZW1haW5kZXJuZWFyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDAKK2Rxcm1uMzMyIHJlbWFpbmRlcm5lYXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDAKK2Rxcm1uMzMzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK2Rxcm1uMzM0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK2Rxcm1uMzM1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkcXJtbjMzNiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK2Rxcm1uMzM3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCitkcXJtbjMzOCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MAorZHFybW4zMzkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKK2Rxcm1uMzQwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIC0xRS03CitkcXJtbjM0MSByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgLTFFLTgKK2Rxcm1uMzQyIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgLTFFLTkKK2Rxcm1uMzQzIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIC0xRS0xMAorZHFybW4zNDQgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIC0xRS0xMQorZHFybW4zNDUgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNworZHFybW4zNDYgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKK2Rxcm1uMzQ3IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQorZHFybW4zNDggcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTAKK2Rxcm1uMzQ5IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQorZHFybW4zNTAgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMgorCitkcXJtbjM1MSByZW1haW5kZXJuZWFyICAgMC4wMyAgNyAgLT4gIDAuMDMKK2Rxcm1uMzUyIHJlbWFpbmRlcm5lYXIgICA1ICAgMiAgICAtPiAgMQorZHFybW4zNTMgcmVtYWluZGVybmVhciAgIDQuMSAgIDIgICAgLT4gIDAuMQorZHFybW4zNTQgcmVtYWluZGVybmVhciAgIDQuMDEgICAyICAgIC0+ICAwLjAxCitkcXJtbjM1NSByZW1haW5kZXJuZWFyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQorZHFybW4zNTYgcmVtYWluZGVybmVhciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQorZHFybW4zNTcgcmVtYWluZGVybmVhciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxCitkcXJtbjM1OCByZW1haW5kZXJuZWFyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQorZHFybW4zNTkgcmVtYWluZGVybmVhciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcKKworZHFybW4zNjAgcmVtYWluZGVybmVhciAgIDEuMiAgIDAuNzM0NSAtPiAtMC4yNjkwCitkcXJtbjM2MSByZW1haW5kZXJuZWFyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKK2Rxcm1uMzYyIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjIgICAgLT4gIDAuMAorZHFybW4zNjMgcmVtYWluZGVybmVhciAgIDAuOCAgIDAuMyAgICAtPiAtMC4xCitkcXJtbjM2NCByZW1haW5kZXJuZWFyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAorZHFybW4zNjUgcmVtYWluZGVybmVhciAgIDAuODAwICAgMS43ICAtPiAgMC44MDAKK2Rxcm1uMzY2IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwCisKKy0tIHJvdW5kIHRvIGV2ZW4KK2Rxcm1uMzcxIHJlbWFpbmRlcm5lYXIgICAxMjEgICAgIDIgICAgLT4gIDEKK2Rxcm1uMzcyIHJlbWFpbmRlcm5lYXIgICAxMjIgICAgIDIgICAgLT4gIDAKK2Rxcm1uMzczIHJlbWFpbmRlcm5lYXIgICAxMjMgICAgIDIgICAgLT4gLTEKK2Rxcm1uMzc0IHJlbWFpbmRlcm5lYXIgICAxMjQgICAgIDIgICAgLT4gIDAKK2Rxcm1uMzc1IHJlbWFpbmRlcm5lYXIgICAxMjUgICAgIDIgICAgLT4gIDEKK2Rxcm1uMzc2IHJlbWFpbmRlcm5lYXIgICAxMjYgICAgIDIgICAgLT4gIDAKK2Rxcm1uMzc3IHJlbWFpbmRlcm5lYXIgICAxMjcgICAgIDIgICAgLT4gLTEKKworZHFybW4zODEgcmVtYWluZGVybmVhciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCitkcXJtbjM4MiByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAwMDEgICAgLT4gLTAuMjM0NAorZHFybW4zODMgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDEgICAgIC0+IC0wLjMzMworZHFybW4zODQgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMSAgICAgIC0+IC0wLjIzCitkcXJtbjM4NSByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjEgICAgICAgLT4gLTAuMworZHFybW4zODYgcmVtYWluZGVybmVhciAxMjM1NSAgNCAgICAgICAgIC0+IC0xCitkcXJtbjM4NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKK2Rxcm1uMzg4IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQuMDAwMSAgICAtPiAtMS4zMDg5CitkcXJtbjM4OSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNAorZHFybW4zOTAgcmVtYWluZGVybmVhciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKK2Rxcm1uMzkxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTkgICAgICAtPiAtMC4yNgorZHFybW4zOTIgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQorZHFybW4zOTMgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKK2Rxcm1uMzk0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUgICAgICAgICAtPiAgMAorZHFybW4zOTUgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDAxICAgIC0+IC0wLjI0NjkKK2Rxcm1uMzk2IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAxICAgICAtPiAtMi40NjkKK2Rxcm1uMzk3IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDEgICAgICAtPiAgMC4zNgorZHFybW4zOTggcmVtYWluZGVybmVhciAxMjM0NSAgNS4xICAgICAgIC0+IC0yLjEKKworLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMKK2Rxcm1uNDAxIHJlbWFpbmRlcm5lYXIgICAwLjQgICAgICAgICAxICAgLT4gIDAuNAorZHFybW40MDIgcmVtYWluZGVybmVhciAgIDAuNDUgICAgICAgIDEgICAtPiAgMC40NQorZHFybW40MDMgcmVtYWluZGVybmVhciAgIDAuNDU1ICAgICAgIDEgICAtPiAgMC40NTUKK2Rxcm1uNDA0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTUgICAgICAxICAgLT4gIDAuNDU1NQorZHFybW40MDUgcmVtYWluZGVybmVhciAgIDAuNDU1NTUgICAgIDEgICAtPiAgMC40NTU1NQorZHFybW40MDYgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1ICAgIDEgICAtPiAgMC40NTU1NTUKK2Rxcm1uNDA3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTUgICAxICAgLT4gIDAuNDU1NTU1NQorZHFybW40MDggcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTUgIDEgICAtPiAgMC40NTU1NTU1NQorZHFybW40MDkgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU1NTU1NTUKKy0tIHdpdGggc3BpbGwuLi4gWzQxMiBleGVyY2lzZXMgc3RpY2t0YWIgbG9vcF0KK2Rxcm1uNDExIHJlbWFpbmRlcm5lYXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQorZHFybW40MTIgcmVtYWluZGVybmVhciAgIDAuNTUgICAgICAgIDEgICAtPiAtMC40NQorZHFybW40MTMgcmVtYWluZGVybmVhciAgIDAuNTU1ICAgICAgIDEgICAtPiAtMC40NDUKK2Rxcm1uNDE0IHJlbWFpbmRlcm5lYXIgICAwLjU1NTUgICAgICAxICAgLT4gLTAuNDQ0NQorZHFybW40MTUgcmVtYWluZGVybmVhciAgIDAuNTU1NTUgICAgIDEgICAtPiAtMC40NDQ0NQorZHFybW40MTYgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1ICAgIDEgICAtPiAtMC40NDQ0NDUKK2Rxcm1uNDE3IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTUgICAxICAgLT4gLTAuNDQ0NDQ0NQorZHFybW40MTggcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTUgIDEgICAtPiAtMC40NDQ0NDQ0NQorZHFybW40MTkgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTU1IDEgICAtPiAtMC40NDQ0NDQ0NDUKKworLS0gZm9sZGRvd25zCitkcXJtbjQyMSByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW40MjIgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDFFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJtbjQyMyByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgMkUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQKK2Rxcm1uNDI0IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAzRSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFybW40MjUgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDRFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJtbjQyNiByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgNUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQKK2Rxcm1uNDI3IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA2RSs2MTQzICAtPiAgLTIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFybW40MjggcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDdFKzYxNDMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJtbjQyOSByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgOEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2Rxcm1uNDMwIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA5RSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorLS0gdGluaWVzCitkcXJtbjQzMSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgMUUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJtbjQzMiByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgMkUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJtbjQzMyByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgM0UtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbAorZHFybW40MzQgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDRFLTYxNzYgIC0+ICAgMkUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDM1IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA1RS02MTc2ICAtPiAgIDBFLTYxNzYKK2Rxcm1uNDM2IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA2RS02MTc2ICAtPiAgLTJFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQzNyByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgN0UtNjE3NiAgLT4gICAzRS02MTc2IFN1Ym5vcm1hbAorZHFybW40MzggcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDhFLTYxNzYgIC0+ICAgMkUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDM5IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA5RS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQ0MCByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAxMEUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJtbjQ0MSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAxMUUtNjE3NiAgLT4gIC0xRS02MTc2IFN1Ym5vcm1hbAorZHFybW40NDIgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMTFFLTYxNzYgIC0+ICAtMUUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDQzIHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDIwRS02MTc2ICAtPiAgIDBFLTYxNzYKK2Rxcm1uNDQ0IHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDIxRS02MTc2ICAtPiAgLThFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQ0NSByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAzMEUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorCistLSB6ZXJvIHNpZ25zCitkcXJtbjY1MCByZW1haW5kZXJuZWFyICAxICAxIC0+ICAwCitkcXJtbjY1MSByZW1haW5kZXJuZWFyIC0xICAxIC0+IC0wCitkcXJtbjY1MiByZW1haW5kZXJuZWFyICAxIC0xIC0+ICAwCitkcXJtbjY1MyByZW1haW5kZXJuZWFyIC0xIC0xIC0+IC0wCitkcXJtbjY1NCByZW1haW5kZXJuZWFyICAwICAxIC0+ICAwCitkcXJtbjY1NSByZW1haW5kZXJuZWFyIC0wICAxIC0+IC0wCitkcXJtbjY1NiByZW1haW5kZXJuZWFyICAwIC0xIC0+ICAwCitkcXJtbjY1NyByZW1haW5kZXJuZWFyIC0wIC0xIC0+IC0wCitkcXJtbjY1OCByZW1haW5kZXJuZWFyICAwLjAwICAxICAtPiAgMC4wMAorZHFybW42NTkgcmVtYWluZGVybmVhciAtMC4wMCAgMSAgLT4gLTAuMDAKKworLS0gU3BlY2lhbHMKK2Rxcm1uNjgwIHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNjgxIHJlbWFpbmRlcm5lYXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNjgyIHJlbWFpbmRlcm5lYXIgIEluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNjgzIHJlbWFpbmRlcm5lYXIgIEluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNjg0IHJlbWFpbmRlcm5lYXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNjg1IHJlbWFpbmRlcm5lYXIgIEluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNjg2IHJlbWFpbmRlcm5lYXIgIEluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNjg3IHJlbWFpbmRlcm5lYXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNjg4IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkcXJtbjY4OSByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY5MSByZW1haW5kZXJuZWFyIC0xICAgICBJbmYgICAtPiAtMQorZHFybW42OTIgcmVtYWluZGVybmVhciAgMCAgICAgSW5mICAgLT4gIDAKK2Rxcm1uNjkzIHJlbWFpbmRlcm5lYXIgLTAgICAgIEluZiAgIC0+IC0wCitkcXJtbjY5NCByZW1haW5kZXJuZWFyICAxICAgICBJbmYgICAtPiAgMQorZHFybW42OTUgcmVtYWluZGVybmVhciAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK2Rxcm1uNjk2IHJlbWFpbmRlcm5lYXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFybW43MDAgcmVtYWluZGVybmVhciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43MDEgcmVtYWluZGVybmVhciAtSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43MDIgcmVtYWluZGVybmVhciAtSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43MDMgcmVtYWluZGVybmVhciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43MDQgcmVtYWluZGVybmVhciAtSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43MDUgcmVtYWluZGVybmVhciAtSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43MDYgcmVtYWluZGVybmVhciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43MDcgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43MDggcmVtYWluZGVybmVhciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43MDkgcmVtYWluZGVybmVhciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2Rxcm1uNzEwIHJlbWFpbmRlcm5lYXIgLTEgICAgLUluZiAgIC0+IC0xCitkcXJtbjcxMSByZW1haW5kZXJuZWFyIC0wICAgIC1JbmYgICAtPiAtMAorZHFybW43MTIgcmVtYWluZGVybmVhciAgMCAgICAtSW5mICAgLT4gIDAKK2Rxcm1uNzEzIHJlbWFpbmRlcm5lYXIgIDEgICAgLUluZiAgIC0+ICAxCitkcXJtbjcxNCByZW1haW5kZXJuZWFyICAxMDAwIC1JbmYgICAtPiAgMTAwMAorZHFybW43MTUgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXJtbjcyMSByZW1haW5kZXJuZWFyICBOYU4gLUluZiAgICAtPiAgTmFOCitkcXJtbjcyMiByZW1haW5kZXJuZWFyICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcXJtbjcyMyByZW1haW5kZXJuZWFyICBOYU4gLTEgICAgICAtPiAgTmFOCitkcXJtbjcyNCByZW1haW5kZXJuZWFyICBOYU4gLTAgICAgICAtPiAgTmFOCitkcXJtbjcyNSByZW1haW5kZXJuZWFyIC1OYU4gIDAgICAgICAtPiAtTmFOCitkcXJtbjcyNiByZW1haW5kZXJuZWFyICBOYU4gIDEgICAgICAtPiAgTmFOCitkcXJtbjcyNyByZW1haW5kZXJuZWFyICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcXJtbjcyOCByZW1haW5kZXJuZWFyICBOYU4gIEluZiAgICAtPiAgTmFOCitkcXJtbjcyOSByZW1haW5kZXJuZWFyICBOYU4gLU5hTiAgICAtPiAgTmFOCitkcXJtbjczMCByZW1haW5kZXJuZWFyIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcXJtbjczMSByZW1haW5kZXJuZWFyIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcXJtbjczMiByZW1haW5kZXJuZWFyIC0xICAgIE5hTiAgICAtPiAgTmFOCitkcXJtbjczMyByZW1haW5kZXJuZWFyIC0wICAgLU5hTiAgICAtPiAtTmFOCitkcXJtbjczNCByZW1haW5kZXJuZWFyICAwICAgIE5hTiAgICAtPiAgTmFOCitkcXJtbjczNSByZW1haW5kZXJuZWFyICAxICAgLU5hTiAgICAtPiAtTmFOCitkcXJtbjczNiByZW1haW5kZXJuZWFyICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcXJtbjczNyByZW1haW5kZXJuZWFyICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2Rxcm1uNzQxIHJlbWFpbmRlcm5lYXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc0MiByZW1haW5kZXJuZWFyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDMgcmVtYWluZGVybmVhciAtc05hTiAtMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzQ0IHJlbWFpbmRlcm5lYXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc0NSByZW1haW5kZXJuZWFyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDYgcmVtYWluZGVybmVhciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzQ3IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc0OSByZW1haW5kZXJuZWFyICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTAgcmVtYWluZGVybmVhciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzUxIHJlbWFpbmRlcm5lYXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1MiByZW1haW5kZXJuZWFyIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTMgcmVtYWluZGVybmVhciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzU0IHJlbWFpbmRlcm5lYXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1NSByZW1haW5kZXJuZWFyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTYgcmVtYWluZGVybmVhciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzU3IHJlbWFpbmRlcm5lYXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1OCByZW1haW5kZXJuZWFyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTkgcmVtYWluZGVybmVhciAgSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnaW5nIE5hTnMKK2Rxcm1uNzYwIHJlbWFpbmRlcm5lYXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjEKK2Rxcm1uNzYxIHJlbWFpbmRlcm5lYXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzYyIHJlbWFpbmRlcm5lYXIgIE5hTjMgIHNOYU45ICAgLT4gIE5hTjkgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzYzIHJlbWFpbmRlcm5lYXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzY0IHJlbWFpbmRlcm5lYXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExCitkcXJtbjc2NSByZW1haW5kZXJuZWFyICBOYU42ICAgTmFOMTIgIC0+ICBOYU42CitkcXJtbjc2NiByZW1haW5kZXJuZWFyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMworZHFybW43NjcgcmVtYWluZGVybmVhciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQKK2Rxcm1uNzY4IHJlbWFpbmRlcm5lYXIgICAgMCAgICBOYU4xNSAgLT4gIE5hTjE1CitkcXJtbjc2OSByZW1haW5kZXJuZWFyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNgorCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKK2Rxcm1uNzcwICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAxMCAgICAtPiAtNAorZHFybW43NzEgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAxICAgIC0+ICAwCitkcXJtbjc3MiAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJtbjc3MyAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK2Rxcm1uODAxIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK2Rxcm1uODAyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKK2Rxcm1uODAzIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKK2Rxcm1uODA0IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK2Rxcm1uODA1IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKK2Rxcm1uODA2IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKK2Rxcm1uODA3IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK2Rxcm1uODA4IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2Rxcm1uODA5IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKK2Rxcm1uODEwIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2Rxcm1uODExIHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5NiAgMTAgIC0+IC00CitkcXJtbjgxMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKK2Rxcm1uODIxIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK2Rxcm1uODIyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKK2Rxcm1uODIzIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKK2Rxcm1uODI0IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK2Rxcm1uODI1IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKK2Rxcm1uODI2IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKK2Rxcm1uODI3IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK2Rxcm1uODI4IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2Rxcm1uODI5IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKK2Rxcm1uODMwIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2Rxcm1uODMxIHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5NiAgMTAgIC0+IC00CitkcXJtbjgzMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZGl2aWRlaW50CitkcXJtbjg0MCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuMCAgIDEgIC0+ICAwLjAKK2Rxcm1uODQxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC40ICAgMSAgLT4gIDAuNAorZHFybW44NDIgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41CitkcXJtbjg0MyByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuOSAgIDEgIC0+IC0wLjEKK2Rxcm1uODQ0IHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45OTkgMSAgLT4gLTAuMDAxCitkcXJtbjg1MCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDMgICAgIDUgIC0+IC0yCitkcXJtbjg1MSByZW1haW5kZXJuZWFyICAxMDAwMDAwMyAgICAgIDUgIC0+IC0yCitkcXJtbjg1MiByZW1haW5kZXJuZWFyICAxMDAwMDAzICAgICAgIDUgIC0+IC0yCitkcXJtbjg1MyByZW1haW5kZXJuZWFyICAxMDAwMDMgICAgICAgIDUgIC0+IC0yCitkcXJtbjg1NCByZW1haW5kZXJuZWFyICAxMDAwMyAgICAgICAgIDUgIC0+IC0yCitkcXJtbjg1NSByZW1haW5kZXJuZWFyICAxMDAzICAgICAgICAgIDUgIC0+IC0yCitkcXJtbjg1NiByZW1haW5kZXJuZWFyICAxMDMgICAgICAgICAgIDUgIC0+IC0yCitkcXJtbjg1NyByZW1haW5kZXJuZWFyICAxMyAgICAgICAgICAgIDUgIC0+IC0yCitkcXJtbjg1OCByZW1haW5kZXJuZWFyICAxICAgICAgICAgICAgIDUgIC0+ICAxCisKKy0tIFZsYWRpbWlyJ3MgY2FzZXMgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcXJtbjg2MCByZW1haW5kZXJuZWFyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFybW44NjEgcmVtYWluZGVybmVhciAxMjMwICAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rxcm1uODYyIHJlbWFpbmRlcm5lYXIgMTIuM2UyICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJtbjg2MyByZW1haW5kZXJuZWFyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFybW44NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rxcm1uODcwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDEwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODczIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgMTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDEwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODc2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgMTAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3NyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzggcmVtYWluZGVybmVhciAxMjMwICAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODc5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAxMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg4MCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMAorZHFybW44ODEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgMTAwMDAwIC0+IDEyMzAKK2Rxcm1uODgyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAxMDAwMCAtPiAxMjMwCitkcXJtbjg4MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMAorZHFybW44ODQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgMTAwIC0+ICAgMzAKK2Rxcm1uODg1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAxMCAtPiAgICAwCitkcXJtbjg4NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMAorCitkcXJtbjg5MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDIwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMjAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODkyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDIwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMjAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODk1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDIwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMjAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODk5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkwMCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDIwMDAwMDAgLT4gMTIzMAorZHFybW45MDEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgMjAwMDAwIC0+IDEyMzAKK2Rxcm1uOTAyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwCitkcXJtbjkwMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDIwMDAgLT4gLTc3MAorZHFybW45MDQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgMjAwIC0+ICAgMzAKK2Rxcm1uOTA1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgLTEwCitkcXJtbjkwNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDIgLT4gICAgMAorCitkcXJtbjkxMCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDUwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgNTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTEyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDUwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgNTAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTE1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDUwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgNTAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTE5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwCitkcXJtbjkyMCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDUwMDAwMDAgLT4gMTIzMAorZHFybW45MjEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgNTAwMDAwIC0+IDEyMzAKK2Rxcm1uOTIyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwCitkcXJtbjkyMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDUwMDAgLT4gMTIzMAorZHFybW45MjQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgNTAwIC0+ICAyMzAKK2Rxcm1uOTI1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgLTIwCitkcXJtbjkyNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDUgLT4gICAgMAorCitkcXJtbjkzMCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgOTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTMyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICA5MDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgOTAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTM1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICA5MDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgOTAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTM5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICA5MDAwMDAwMCAtPiAxMjMwCitkcXJtbjk0MCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMAorZHFybW45NDEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgOTAwMDAwIC0+IDEyMzAKK2Rxcm1uOTQyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICA5MDAwMCAtPiAxMjMwCitkcXJtbjk0MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMAorZHFybW45NDQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgOTAwIC0+ICAzMzAKK2Rxcm1uOTQ1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICA5MCAtPiAgLTMwCitkcXJtbjk0NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAtMworCitkcXJtbjk1MCByZW1haW5kZXJuZWFyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjk2MSByZW1haW5kZXJuZWFyIDEyM2UxICAgMjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJtbjk2MiByZW1haW5kZXJuZWFyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJtbjk2MyByZW1haW5kZXJuZWFyIDEyM2UxICAgNDk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJtbjk2NCByZW1haW5kZXJuZWFyIDEyM2UxICAgNTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJtbjk2NSByZW1haW5kZXJuZWFyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJtbjk2NiByZW1haW5kZXJuZWFyIDEyM2UxICAgNzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJtbjk2NyByZW1haW5kZXJuZWFyIDEyM2UxICAgODk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJtbjk2OCByZW1haW5kZXJuZWFyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJtbjk2OSByZW1haW5kZXJuZWFyIDEyM2UxICAgOTg3NjU0MzIxMDk4NzY1NCAtPiAxMjMwCisKK2Rxcm1uOTgwIHJlbWFpbmRlcm5lYXIgMTIzZTEgMTAwMEUyOTkgLT4gMS4yM0UrMyAgLS0gMTIzRSsxIGludGVybmFsbHkKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCitkcXJtbjEwNTEgcmVtYWluZGVybmVhciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJtbjEwNTIgcmVtYWluZGVybmVhciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJtbjEwNTMgcmVtYWluZGVybmVhciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJtbjEwNTQgcmVtYWluZGVybmVhciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJtbjEwNTUgcmVtYWluZGVybmVhciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3NworZHFybW4xMDU2IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcKK2Rxcm1uMTA1NyByZW1haW5kZXJuZWFyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3CitkcXJtbjEwNTggcmVtYWluZGVybmVhciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3NworCistLSBHeXVyaXMgZXhhbXBsZQorZHFybW4xMDcwIHJlbWFpbmRlciA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MworCistLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdAorZHFybW4xMTAxICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0wLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMworZHFybW4xMTAyICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAtMC4zNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIyMgorZHFybW4xMTAzICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgLTAuNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTExMQorZHFybW4xMTA0ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjU1ICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxNAorZHFybW4xMTA1ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY5MgorZHFybW4xMTA2ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAgLTEuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc0OAorZHFybW4xMTA3ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NworZHFybW4xMTA4ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIC0wLjc1MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1MworZHFybW4xMTA5ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NworZHFybW4xMTEwICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgMS41MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1NAorZHFybW4xMTExICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgLTAuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0MgorCistLSBOdWxsIHRlc3RzCitkcXJtbjEwMDAgcmVtYWluZGVybmVhciAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTAwMSByZW1haW5kZXJuZWFyICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUm90YXRlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUm90YXRlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjZjllZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSb3RhdGUuZGVjVGVzdApAQCAtMCwwICsxLDI5OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVJvdGF0ZS5kZWNUZXN0IC0tIHJvdGF0ZSBkZWNRdWFkIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFyb3QwMDEgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgIDAgIC0+ICAwCitkcXJvdDAwMiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDAKK2Rxcm90MDAzIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwCitkcXJvdDAwNCByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAzMyAgLT4gIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxcm90MDA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDM0ICAtPiAgMQorZHFyb3QwMDYgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXJvdDAwNyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAtMiAgLT4gIDAKK2Rxcm90MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAgNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFyb3QwMDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+ICAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxCitkcXJvdDAxMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2Rxcm90MDExIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgOTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OQorZHFyb3QwMTIgcm90YXRlICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CisKKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXIKK2Rxcm90MDE1IHJvdGF0ZSAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAxNiByb3RhdGUgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMTcgcm90YXRlICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDE4IHJvdGF0ZSAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAxOSByb3RhdGUgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMjAgcm90YXRlICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDIxIHJvdGF0ZSAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAyMiByb3RhdGUgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgorZHFyb3QwMjUgcm90YXRlICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDI2IHJvdGF0ZSAgICAgICAgMSAgICAtMzUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAyNyByb3RhdGUgICAgICAgIDEgICAgIDM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMjggcm90YXRlICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gZnVsbCBwYXR0ZXJuCitkcXJvdDAzMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2Rxcm90MDMxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMyAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MQorZHFyb3QwMzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyCitkcXJvdDAzMyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzEgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjMKK2Rxcm90MDM0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMCAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNAorZHFyb3QwMzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI5ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1CitkcXJvdDAzNiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjggIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTYKK2Rxcm90MDM3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNyAgLT4gODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2NworZHFyb3QwMzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI2ICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4CitkcXJvdDAzOSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjUgIC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkKK2Rxcm90MDQwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MAorZHFyb3QwNDEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIzICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxCitkcXJvdDA0MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjIgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIKK2Rxcm90MDQzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMSAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMworZHFyb3QwNDQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIwICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0CitkcXJvdDA0NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTkgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDUKK2Rxcm90MDQ3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOCAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1NgorZHFyb3QwNDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3CitkcXJvdDA0OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTYgIC0+IDkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2NzgKK2Rxcm90MDUwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNSAgLT4gIDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OQorZHFyb3QwNTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXJvdDA1MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTMgIC0+IDIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEKK2Rxcm90MDUzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMiAgLT4gMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgorZHFyb3QwNTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTExICAtPiA0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXJvdDA1NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTAgIC0+IDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2Rxcm90MDU2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC05ICAgLT4gNjc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NQorZHFyb3QwNTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTggICAtPiA3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2CitkcXJvdDA1OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNyAgIC0+IDg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcKK2Rxcm90MDU5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC02ICAgLT4gOTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OAorZHFyb3QwNjAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTUgICAtPiAgMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CitkcXJvdDA2MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNCAgIC0+IDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAKK2Rxcm90MDYyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zICAgLT4gMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQorZHFyb3QwNjMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIgICAtPiAzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCitkcXJvdDA2NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMSAgIC0+IDQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxcm90MDY1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCitkcXJvdDA2NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2Rxcm90MDY3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MQorZHFyb3QwNjggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyCitkcXJvdDA2OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMyAgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjMKK2Rxcm90MDcwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs0ICAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNAorZHFyb3QwNzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1CitkcXJvdDA3MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNiAgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTYKK2Rxcm90MDczIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs3ICAgLT4gODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2NworZHFyb3QwNzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzggICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4CitkcXJvdDA3NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArOSAgIC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkKK2Rxcm90MDc2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MAorZHFyb3QwNzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzExICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxCitkcXJvdDA3OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTIgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIKK2Rxcm90MDc5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMyAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMworZHFyb3QwODAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE0ICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0CitkcXJvdDA4MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTUgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDUKK2Rxcm90MDgyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNiAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1NgorZHFyb3QwODMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3CitkcXJvdDA4NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTggIC0+IDkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2NzgKK2Rxcm90MDg1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxOSAgLT4gIDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OQorZHFyb3QwODYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIwICAtPiAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXJvdDA4NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjEgIC0+IDIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEKK2Rxcm90MDg4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMiAgLT4gMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgorZHFyb3QwODkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIzICAtPiA0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXJvdDA5MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjQgIC0+IDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2Rxcm90MDkxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNSAgLT4gNjc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NQorZHFyb3QwOTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI2ICAtPiA3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2CitkcXJvdDA5MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjcgIC0+IDg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcKK2Rxcm90MDk0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyOCAgLT4gOTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OAorZHFyb3QwOTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI5ICAtPiAgMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CitkcXJvdDA5NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzAgIC0+IDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAKK2Rxcm90MDk3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMSAgLT4gMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQorZHFyb3QwOTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMyICAtPiAzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCitkcXJvdDA5OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzMgIC0+IDQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxcm90MTAwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCistLSB6ZXJvcworZHFyb3QyNzAgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRS0xMAorZHFyb3QyNzEgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwRS0xMAorZHFyb3QyNzIgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwLjAwMAorZHFyb3QyNzMgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwLjAwMAorZHFyb3QyNzQgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRSsxMAorZHFyb3QyNzUgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwRSsxMAorZHFyb3QyNzYgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRS0xMAorZHFyb3QyNzcgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wRS0xMAorZHFyb3QyNzggcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wLjAwMAorZHFyb3QyNzkgcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wLjAwMAorZHFyb3QyODAgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRSsxMAorZHFyb3QyODEgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wRSsxMAorCistLSBObWF4LCBObWluLCBOdGlueQorZHFyb3QxNDEgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJvdDE0MiByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMzMgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTQzIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNDQgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJvdDE0NSByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKK2Rxcm90MTQ2IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAxLjBFLTYxNDIKK2Rxcm90MTQ3IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTYxNDIKK2Rxcm90MTQ4IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAorZHFyb3QxNTEgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTUyIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAxRS02MTc2CitkcXJvdDE1MyByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gMUUtNjE3NgorZHFyb3QxNTQgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTU1IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE1NiByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gOUUtNjE3NgorZHFyb3QxNTcgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDlFLTYxNzYKK2Rxcm90MTU4IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE2MCByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2Rxcm90MTYxIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAxLjBFLTYxNzUKK2Rxcm90MTYyIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTYxNzUKK2Rxcm90MTYzIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworLS0gIG5lZ2F0aXZlcworZHFyb3QxNzEgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNzIgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNzMgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNzQgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNzUgcm90YXRlIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAorZHFyb3QxNzYgcm90YXRlIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0xLjBFLTYxNDIKK2Rxcm90MTc3IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTQyCitkcXJvdDE3OCByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwCitkcXJvdDE4MSByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTgyIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtMUUtNjE3NgorZHFyb3QxODMgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IC0xRS02MTc2CitkcXJvdDE4NCByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTg1IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxODYgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IC05RS02MTc2CitkcXJvdDE4NyByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTlFLTYxNzYKK2Rxcm90MTg4IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxOTAgcm90YXRlIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFyb3QxOTEgcm90YXRlIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0xLjBFLTYxNzUKK2Rxcm90MTkyIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTc1CitkcXJvdDE5MyByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCisKKy0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykKK2Rxcm90MjAxIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgICAwICAtPiAtMAorZHFyb3QyMDIgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wCitkcXJvdDIwMyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMAorZHFyb3QyMDQgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgMzMgIC0+IC0xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXJvdDIwNSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzNCAgLT4gLTEKK2Rxcm90MjA2IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFyb3QyMDcgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgLTIgIC0+IC0wCitkcXJvdDIwOCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gLTQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxcm90MjA5IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MQorZHFyb3QyMTAgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDIxMSByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDkKK2Rxcm90MjEyIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCisKKy0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsCitkcXJvdDc4MSByb3RhdGUgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorZHFyb3Q3ODIgcm90YXRlIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rxcm90NzgzIHJvdGF0ZSAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkcXJvdDc4NCByb3RhdGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZHFyb3Q3ODUgcm90YXRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rxcm90Nzg2IHJvdGF0ZSAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5CitkcXJvdDc4NyByb3RhdGUgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q3ODggcm90YXRlIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90Nzg5IHJvdGF0ZSAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDc5MCByb3RhdGUgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q3OTEgcm90YXRlICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90NzkyIHJvdGF0ZSAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDc5MyByb3RhdGUgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q3OTQgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFyb3Q4MDAgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODAxIHJvdGF0ZSAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK2Rxcm90ODAyIHJvdGF0ZSAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKK2Rxcm90ODAzIHJvdGF0ZSAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkKK2Rxcm90ODA0IHJvdGF0ZSAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK2Rxcm90ODA1IHJvdGF0ZSAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKK2Rxcm90ODA2IHJvdGF0ZSAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkKK2Rxcm90ODA3IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgwOCByb3RhdGUgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MDkgcm90YXRlIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODEwIHJvdGF0ZSAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgxMSByb3RhdGUgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MTIgcm90YXRlICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODEzIHJvdGF0ZSAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgxNCByb3RhdGUgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MTUgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFyb3Q4MjEgcm90YXRlICBOYU4gLUluZiAgICAtPiAgTmFOCitkcXJvdDgyMiByb3RhdGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rxcm90ODIzIHJvdGF0ZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFyb3Q4MjQgcm90YXRlICBOYU4gLTAgICAgICAtPiAgTmFOCitkcXJvdDgyNSByb3RhdGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2Rxcm90ODI2IHJvdGF0ZSAgTmFOICAxICAgICAgLT4gIE5hTgorZHFyb3Q4Mjcgcm90YXRlICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcXJvdDgyOCByb3RhdGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rxcm90ODI5IHJvdGF0ZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFyb3Q4MzAgcm90YXRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzMSByb3RhdGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODMyIHJvdGF0ZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFyb3Q4MzMgcm90YXRlIC0wICAgIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzNCByb3RhdGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODM1IHJvdGF0ZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFyb3Q4MzYgcm90YXRlICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzNyByb3RhdGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFyb3Q4NDEgcm90YXRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NDIgcm90YXRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NDMgcm90YXRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NDQgcm90YXRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NDUgcm90YXRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NDYgcm90YXRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NDcgcm90YXRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NDggcm90YXRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NDkgcm90YXRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTAgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTEgcm90YXRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTIgcm90YXRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTMgcm90YXRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTQgcm90YXRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTUgcm90YXRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTYgcm90YXRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTcgcm90YXRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTggcm90YXRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NTkgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcXJvdDg2MSByb3RhdGUgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkcXJvdDg2MiByb3RhdGUgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkcXJvdDg2MyByb3RhdGUgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkcXJvdDg2NCByb3RhdGUgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkcXJvdDg2NSByb3RhdGUgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkcXJvdDg2NiByb3RhdGUgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkcXJvdDg2NyByb3RhdGUgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkcXJvdDg2OCByb3RhdGUgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkcXJvdDg2OSByb3RhdGUgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZHFyb3Q4NzEgcm90YXRlICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3MiByb3RhdGUgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODczIHJvdGF0ZSAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NzQgcm90YXRlICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3NSByb3RhdGUgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODc2IHJvdGF0ZSAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4Nzcgcm90YXRlIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3OCByb3RhdGUgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODc5IHJvdGF0ZSAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4ODAgcm90YXRlICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg4MSByb3RhdGUgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODgyIHJvdGF0ZSAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkcXJvdDg4MyByb3RhdGUgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODg0IHJvdGF0ZSAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkcXJvdDg4NSByb3RhdGUgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTYW1lUXVhbnR1bS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNhbWVRdWFudHVtLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3Y2RhOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTYW1lUXVhbnR1bS5kZWNUZXN0CkBAIC0wLDAgKzEsMzg5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxU2FtZVF1YW50dW0uZGVjVGVzdCAtLSBjaGVjayBkZWNRdWFkIHF1YW50dW1zIG1hdGNoICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2Rxc2FtcTAwMSBzYW1lcXVhbnR1bSAgMCAgICAgIDAgICAgICAtPiAgMQorZHFzYW1xMDAyIHNhbWVxdWFudHVtICAwICAgICAgMSAgICAgIC0+ICAxCitkcXNhbXEwMDMgc2FtZXF1YW50dW0gIDEgICAgICAwICAgICAgLT4gIDEKK2Rxc2FtcTAwNCBzYW1lcXVhbnR1bSAgMSAgICAgIDEgICAgICAtPiAgMQorCitkcXNhbXEwMTEgc2FtZXF1YW50dW0gIDEwICAgICAxRSsxICAgLT4gMAorZHFzYW1xMDEyIHNhbWVxdWFudHVtICAxMEUrMSAgMTBFKzEgIC0+IDEKK2Rxc2FtcTAxMyBzYW1lcXVhbnR1bSAgMTAwICAgIDEwRSsxICAtPiAwCitkcXNhbXEwMTQgc2FtZXF1YW50dW0gIDEwMCAgICAxRSsyICAgLT4gMAorZHFzYW1xMDE1IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMiAgIC0+IDAKK2Rxc2FtcTAxNiBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTEgICAtPiAxCitkcXNhbXEwMTcgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0wICAgLT4gMAorZHFzYW1xMDE4IHNhbWVxdWFudHVtICA5OTkgICAgOTk5ICAgIC0+IDEKK2Rxc2FtcTAxOSBzYW1lcXVhbnR1bSAgOTk5RS0xIDk5LjkgICAtPiAxCitkcXNhbXEwMjAgc2FtZXF1YW50dW0gIDExMUUtMSAyMi4yICAgLT4gMQorZHFzYW1xMDIxIHNhbWVxdWFudHVtICAxMTFFLTEgMTIzNC4yIC0+IDEKKworLS0gemVyb3MKK2Rxc2FtcTAzMCBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMSAgICAtPiAxCitkcXNhbXEwMzEgc2FtZXF1YW50dW0gIDAuMCAgICAxLjExICAgLT4gMAorZHFzYW1xMDMyIHNhbWVxdWFudHVtICAwLjAgICAgMCAgICAgIC0+IDAKK2Rxc2FtcTAzMyBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMCAgICAtPiAxCitkcXNhbXEwMzQgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAwICAgLT4gMAorZHFzYW1xMDM1IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMCAgIC0+IDAKK2Rxc2FtcTAzNiBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzEgICAtPiAxCitkcXNhbXEwMzcgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsyICAgLT4gMAorZHFzYW1xMDM4IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTYgIC0+IDAKK2Rxc2FtcTAzOSBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE3ICAtPiAxCitkcXNhbXEwNDAgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xOCAgLT4gMAorZHFzYW1xMDQxIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNSAtPiAwCitkcXNhbXEwNDIgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE2IC0+IDEKK2Rxc2FtcTA0MyBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTcgLT4gMAorZHFzYW1xMDQ0IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNiAtPiAxCitkcXNhbXEwNDUgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE3IC0+IDAKK2Rxc2FtcTA0NiBzYW1lcXVhbnR1bSAgMEUtMTcgLTAuMEUtMTYgLT4gMQorZHFzYW1xMDQ3IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNyAtPiAwCitkcXNhbXEwNDggc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE2IC0+IDEKK2Rxc2FtcTA0OSBzYW1lcXVhbnR1bSAtMEUtMTcgLTAuMEUtMTcgLT4gMAorCistLSBObWF4LCBObWluLCBOdGlueQorZHFzYW1xMDUxIHNhbWVxdWFudHVtICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDEKK2Rxc2FtcTA1MiBzYW1lcXVhbnR1bSAgMUUtNjE0MyAgICAgICAgICAgICAxRS02MTQzICAgICAgICAgICAtPiAxCitkcXNhbXEwNTMgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gMQorZHFzYW1xMDU0IHNhbWVxdWFudHVtICAxRS02MTc2ICAgICAgICAgICAgIDFFLTYxNzYgICAgICAgICAgIC0+IDEKK2Rxc2FtcTA1NSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAxCitkcXNhbXEwNTYgc2FtZXF1YW50dW0gIDFFLTYxNDMgICAgICAgICAgICAgMUUtNjE0MyAgICAgICAgICAgLT4gMQorZHFzYW1xMDU3IHNhbWVxdWFudHVtICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IDEKK2Rxc2FtcTA1OCBzYW1lcXVhbnR1bSAgMUUtNjE3NiAgICAgICAgICAgICAxRS02MTc2ICAgICAgICAgICAtPiAxCisKK2Rxc2FtcTA2MSBzYW1lcXVhbnR1bSAgLTFFLTYxNzYgICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAxCitkcXNhbXEwNjIgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLT4gMQorZHFzYW1xMDYzIHNhbWVxdWFudHVtICAtMUUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDEKK2Rxc2FtcTA2NCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCitkcXNhbXEwNjUgc2FtZXF1YW50dW0gIC0xRS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQorZHFzYW1xMDY2IHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0+IDEKK2Rxc2FtcTA2NyBzYW1lcXVhbnR1bSAgLTFFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxCitkcXNhbXEwNjggc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQorCitkcXNhbXEwNzEgc2FtZXF1YW50dW0gIC00RS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQorZHFzYW1xMDcyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwRS02MTQzIC0+IDEKK2Rxc2FtcTA3MyBzYW1lcXVhbnR1bSAgLTRFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxCitkcXNhbXEwNzQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQorZHFzYW1xMDc1IHNhbWVxdWFudHVtICAtNEUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDEKK2Rxc2FtcTA3NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtPiAxCitkcXNhbXEwNzcgc2FtZXF1YW50dW0gIC00RS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQorZHFzYW1xMDc4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKKworZHFzYW1xMDgxIHNhbWVxdWFudHVtICAtNEUtMTAwNiAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMAorZHFzYW1xMDgyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTM2IC0+IDAKK2Rxc2FtcTA4MyBzYW1lcXVhbnR1bSAgLTRFLTYxNDAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDAKK2Rxc2FtcTA4NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45OTk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjEzNiAtPiAwCitkcXNhbXEwODUgc2FtZXF1YW50dW0gIC00RS0xMDA2ICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAwCitkcXNhbXEwODYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMzYgLT4gMAorZHFzYW1xMDg3IHNhbWVxdWFudHVtICAtNEUtNjEzMyAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMAorZHFzYW1xMDg4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTM2IC0+IDAKKworLS0gc3BlY2lhbHMgJiBjb21iaW5hdGlvbnMKK2Rxc2FtcTAxMTAgc2FtZXF1YW50dW0gIC1JbmYgICAgLUluZiAgIC0+IDEKK2Rxc2FtcTAxMTEgc2FtZXF1YW50dW0gIC1JbmYgICAgIEluZiAgIC0+IDEKK2Rxc2FtcTAxMTIgc2FtZXF1YW50dW0gIC1JbmYgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTAxMTMgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTAxMTQgc2FtZXF1YW50dW0gIC1JbmYgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTAxMTUgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTAxMTYgc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTAxMTcgc2FtZXF1YW50dW0gIC1JbmYgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTAxMTggc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTAxMTkgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTAxMjAgc2FtZXF1YW50dW0gIC1JbmYgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTAxMjEgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTAxMjIgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTAxMjMgc2FtZXF1YW50dW0gIC1JbmYgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTAxMjQgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTAxMjUgc2FtZXF1YW50dW0gIC1JbmYgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMDIxMCBzYW1lcXVhbnR1bSAgIEluZiAgICAtSW5mICAgLT4gMQorZHFzYW1xMDIxMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgSW5mICAgLT4gMQorZHFzYW1xMDIxMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgTmFOICAgLT4gMAorZHFzYW1xMDIxMyBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UrMyAgLT4gMAorZHFzYW1xMDIxNCBzYW1lcXVhbnR1bSAgIEluZiAgICAtNyAgICAgLT4gMAorZHFzYW1xMDIxNSBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UtMyAgLT4gMAorZHFzYW1xMDIxNiBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUtMyAgLT4gMAorZHFzYW1xMDIxNyBzYW1lcXVhbnR1bSAgIEluZiAgICAtMCAgICAgLT4gMAorZHFzYW1xMDIxOCBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUrMyAgLT4gMAorZHFzYW1xMDIxOSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUtMyAgLT4gMAorZHFzYW1xMDIyMCBzYW1lcXVhbnR1bSAgIEluZiAgICAgMCAgICAgLT4gMAorZHFzYW1xMDIyMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUrMyAgLT4gMAorZHFzYW1xMDIyMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UtMyAgLT4gMAorZHFzYW1xMDIyMyBzYW1lcXVhbnR1bSAgIEluZiAgICAgNyAgICAgLT4gMAorZHFzYW1xMDIyNCBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UrMyAgLT4gMAorZHFzYW1xMDIyNSBzYW1lcXVhbnR1bSAgIEluZiAgICAgc05hTiAgLT4gMAorCitkcXNhbXEwMzEwIHNhbWVxdWFudHVtICAgTmFOICAgIC1JbmYgICAtPiAwCitkcXNhbXEwMzExIHNhbWVxdWFudHVtICAgTmFOICAgICBJbmYgICAtPiAwCitkcXNhbXEwMzEyIHNhbWVxdWFudHVtICAgTmFOICAgICBOYU4gICAtPiAxCitkcXNhbXEwMzEzIHNhbWVxdWFudHVtICAgTmFOICAgIC03RSszICAtPiAwCitkcXNhbXEwMzE0IHNhbWVxdWFudHVtICAgTmFOICAgIC03ICAgICAtPiAwCitkcXNhbXEwMzE1IHNhbWVxdWFudHVtICAgTmFOICAgIC03RS0zICAtPiAwCitkcXNhbXEwMzE2IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRS0zICAtPiAwCitkcXNhbXEwMzE3IHNhbWVxdWFudHVtICAgTmFOICAgIC0wICAgICAtPiAwCitkcXNhbXEwMzE4IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRSszICAtPiAwCitkcXNhbXEwMzE5IHNhbWVxdWFudHVtICAgTmFOICAgICAwRS0zICAtPiAwCitkcXNhbXEwMzIwIHNhbWVxdWFudHVtICAgTmFOICAgICAwICAgICAtPiAwCitkcXNhbXEwMzIxIHNhbWVxdWFudHVtICAgTmFOICAgICAwRSszICAtPiAwCitkcXNhbXEwMzIyIHNhbWVxdWFudHVtICAgTmFOICAgICA3RS0zICAtPiAwCitkcXNhbXEwMzIzIHNhbWVxdWFudHVtICAgTmFOICAgICA3ICAgICAtPiAwCitkcXNhbXEwMzI0IHNhbWVxdWFudHVtICAgTmFOICAgICA3RSszICAtPiAwCitkcXNhbXEwMzI1IHNhbWVxdWFudHVtICAgTmFOICAgICBzTmFOICAtPiAxCisKK2Rxc2FtcTA0MTAgc2FtZXF1YW50dW0gIC03RSszICAgIC1JbmYgICAtPiAwCitkcXNhbXEwNDExIHNhbWVxdWFudHVtICAtN0UrMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMDQxMiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTA0MTMgc2FtZXF1YW50dW0gIC03RSszICAgIC03RSszICAtPiAxCitkcXNhbXEwNDE0IHNhbWVxdWFudHVtICAtN0UrMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMDQxNSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTA0MTYgc2FtZXF1YW50dW0gIC03RSszICAgIC0wRS0zICAtPiAwCitkcXNhbXEwNDE3IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMDQxOCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTBFKzMgIC0+IDEKK2Rxc2FtcTA0MTkgc2FtZXF1YW50dW0gIC03RSszICAgICAwRS0zICAtPiAwCitkcXNhbXEwNDIwIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMDQyMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDBFKzMgIC0+IDEKK2Rxc2FtcTA0MjIgc2FtZXF1YW50dW0gIC03RSszICAgICA3RS0zICAtPiAwCitkcXNhbXEwNDIzIHNhbWVxdWFudHVtICAtN0UrMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMDQyNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDdFKzMgIC0+IDEKK2Rxc2FtcTA0MjUgc2FtZXF1YW50dW0gIC03RSszICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTA1MTAgc2FtZXF1YW50dW0gIC03ICAgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTA1MTEgc2FtZXF1YW50dW0gIC03ICAgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTA1MTIgc2FtZXF1YW50dW0gIC03ICAgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTA1MTMgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTA1MTQgc2FtZXF1YW50dW0gIC03ICAgICAgLTcgICAgIC0+IDEKK2Rxc2FtcTA1MTUgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTA1MTYgc2FtZXF1YW50dW0gIC03ICAgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTA1MTcgc2FtZXF1YW50dW0gIC03ICAgICAgLTAgICAgIC0+IDEKK2Rxc2FtcTA1MTggc2FtZXF1YW50dW0gIC03ICAgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTA1MTkgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTA1MjAgc2FtZXF1YW50dW0gIC03ICAgICAgIDAgICAgIC0+IDEKK2Rxc2FtcTA1MjEgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTA1MjIgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTA1MjMgc2FtZXF1YW50dW0gIC03ICAgICAgIDcgICAgIC0+IDEKK2Rxc2FtcTA1MjQgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTA1MjUgc2FtZXF1YW50dW0gIC03ICAgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMDYxMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTA2MTEgc2FtZXF1YW50dW0gIC03RS0zICAgICBJbmYgICAtPiAwCitkcXNhbXEwNjEyIHNhbWVxdWFudHVtICAtN0UtMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMDYxMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTA2MTQgc2FtZXF1YW50dW0gIC03RS0zICAgIC03ICAgICAtPiAwCitkcXNhbXEwNjE1IHNhbWVxdWFudHVtICAtN0UtMyAgICAtN0UtMyAgLT4gMQorZHFzYW1xMDYxNiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFLTMgIC0+IDEKK2Rxc2FtcTA2MTcgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wICAgICAtPiAwCitkcXNhbXEwNjE4IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMEUrMyAgLT4gMAorZHFzYW1xMDYxOSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFLTMgIC0+IDEKK2Rxc2FtcTA2MjAgc2FtZXF1YW50dW0gIC03RS0zICAgICAwICAgICAtPiAwCitkcXNhbXEwNjIxIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMEUrMyAgLT4gMAorZHFzYW1xMDYyMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFLTMgIC0+IDEKK2Rxc2FtcTA2MjMgc2FtZXF1YW50dW0gIC03RS0zICAgICA3ICAgICAtPiAwCitkcXNhbXEwNjI0IHNhbWVxdWFudHVtICAtN0UtMyAgICAgN0UrMyAgLT4gMAorZHFzYW1xMDYyNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMDcxMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTA3MTEgc2FtZXF1YW50dW0gIC0wRS0zICAgICBJbmYgICAtPiAwCitkcXNhbXEwNzEyIHNhbWVxdWFudHVtICAtMEUtMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMDcxMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTA3MTQgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03ICAgICAtPiAwCitkcXNhbXEwNzE1IHNhbWVxdWFudHVtICAtMEUtMyAgICAtN0UtMyAgLT4gMQorZHFzYW1xMDcxNiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFLTMgIC0+IDEKK2Rxc2FtcTA3MTcgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wICAgICAtPiAwCitkcXNhbXEwNzE4IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMEUrMyAgLT4gMAorZHFzYW1xMDcxOSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFLTMgIC0+IDEKK2Rxc2FtcTA3MjAgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwICAgICAtPiAwCitkcXNhbXEwNzIxIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMEUrMyAgLT4gMAorZHFzYW1xMDcyMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFLTMgIC0+IDEKK2Rxc2FtcTA3MjMgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3ICAgICAtPiAwCitkcXNhbXEwNzI0IHNhbWVxdWFudHVtICAtMEUtMyAgICAgN0UrMyAgLT4gMAorZHFzYW1xMDcyNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMDgxMCBzYW1lcXVhbnR1bSAgLTAgICAgICAtSW5mICAgLT4gMAorZHFzYW1xMDgxMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgSW5mICAgLT4gMAorZHFzYW1xMDgxMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgTmFOICAgLT4gMAorZHFzYW1xMDgxMyBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UrMyAgLT4gMAorZHFzYW1xMDgxNCBzYW1lcXVhbnR1bSAgLTAgICAgICAtNyAgICAgLT4gMQorZHFzYW1xMDgxNSBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UtMyAgLT4gMAorZHFzYW1xMDgxNiBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUtMyAgLT4gMAorZHFzYW1xMDgxNyBzYW1lcXVhbnR1bSAgLTAgICAgICAtMCAgICAgLT4gMQorZHFzYW1xMDgxOCBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUrMyAgLT4gMAorZHFzYW1xMDgxOSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUtMyAgLT4gMAorZHFzYW1xMDgyMCBzYW1lcXVhbnR1bSAgLTAgICAgICAgMCAgICAgLT4gMQorZHFzYW1xMDgyMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUrMyAgLT4gMAorZHFzYW1xMDgyMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UtMyAgLT4gMAorZHFzYW1xMDgyMyBzYW1lcXVhbnR1bSAgLTAgICAgICAgNyAgICAgLT4gMQorZHFzYW1xMDgyNCBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UrMyAgLT4gMAorZHFzYW1xMDgyNSBzYW1lcXVhbnR1bSAgLTAgICAgICAgc05hTiAgLT4gMAorCitkcXNhbXEwOTEwIHNhbWVxdWFudHVtICAtMEUrMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMDkxMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTA5MTIgc2FtZXF1YW50dW0gIC0wRSszICAgICBOYU4gICAtPiAwCitkcXNhbXEwOTEzIHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UrMyAgLT4gMQorZHFzYW1xMDkxNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTA5MTUgc2FtZXF1YW50dW0gIC0wRSszICAgIC03RS0zICAtPiAwCitkcXNhbXEwOTE2IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUtMyAgLT4gMAorZHFzYW1xMDkxNyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTA5MTggc2FtZXF1YW50dW0gIC0wRSszICAgIC0wRSszICAtPiAxCitkcXNhbXEwOTE5IHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUtMyAgLT4gMAorZHFzYW1xMDkyMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTA5MjEgc2FtZXF1YW50dW0gIC0wRSszICAgICAwRSszICAtPiAxCitkcXNhbXEwOTIyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UtMyAgLT4gMAorZHFzYW1xMDkyMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTA5MjQgc2FtZXF1YW50dW0gIC0wRSszICAgICA3RSszICAtPiAxCitkcXNhbXEwOTI1IHNhbWVxdWFudHVtICAtMEUrMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXExMTEwIHNhbWVxdWFudHVtICAwRS0zICAgIC1JbmYgICAtPiAwCitkcXNhbXExMTExIHNhbWVxdWFudHVtICAwRS0zICAgICBJbmYgICAtPiAwCitkcXNhbXExMTEyIHNhbWVxdWFudHVtICAwRS0zICAgICBOYU4gICAtPiAwCitkcXNhbXExMTEzIHNhbWVxdWFudHVtICAwRS0zICAgIC03RSszICAtPiAwCitkcXNhbXExMTE0IHNhbWVxdWFudHVtICAwRS0zICAgIC03ICAgICAtPiAwCitkcXNhbXExMTE1IHNhbWVxdWFudHVtICAwRS0zICAgIC03RS0zICAtPiAxCitkcXNhbXExMTE2IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRS0zICAtPiAxCitkcXNhbXExMTE3IHNhbWVxdWFudHVtICAwRS0zICAgIC0wICAgICAtPiAwCitkcXNhbXExMTE4IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRSszICAtPiAwCitkcXNhbXExMTE5IHNhbWVxdWFudHVtICAwRS0zICAgICAwRS0zICAtPiAxCitkcXNhbXExMTIwIHNhbWVxdWFudHVtICAwRS0zICAgICAwICAgICAtPiAwCitkcXNhbXExMTIxIHNhbWVxdWFudHVtICAwRS0zICAgICAwRSszICAtPiAwCitkcXNhbXExMTIyIHNhbWVxdWFudHVtICAwRS0zICAgICA3RS0zICAtPiAxCitkcXNhbXExMTIzIHNhbWVxdWFudHVtICAwRS0zICAgICA3ICAgICAtPiAwCitkcXNhbXExMTI0IHNhbWVxdWFudHVtICAwRS0zICAgICA3RSszICAtPiAwCitkcXNhbXExMTI1IHNhbWVxdWFudHVtICAwRS0zICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTEyMTAgc2FtZXF1YW50dW0gIDAgICAgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTEyMTEgc2FtZXF1YW50dW0gIDAgICAgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTEyMTIgc2FtZXF1YW50dW0gIDAgICAgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTEyMTMgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTEyMTQgc2FtZXF1YW50dW0gIDAgICAgICAgLTcgICAgIC0+IDEKK2Rxc2FtcTEyMTUgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTEyMTYgc2FtZXF1YW50dW0gIDAgICAgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTEyMTcgc2FtZXF1YW50dW0gIDAgICAgICAgLTAgICAgIC0+IDEKK2Rxc2FtcTEyMTggc2FtZXF1YW50dW0gIDAgICAgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTEyMTkgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTEyMjAgc2FtZXF1YW50dW0gIDAgICAgICAgIDAgICAgIC0+IDEKK2Rxc2FtcTEyMjEgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTEyMjIgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTEyMjMgc2FtZXF1YW50dW0gIDAgICAgICAgIDcgICAgIC0+IDEKK2Rxc2FtcTEyMjQgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTEyMjUgc2FtZXF1YW50dW0gIDAgICAgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTMxMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMTMxMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMTMxMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMTMxMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UrMyAgLT4gMQorZHFzYW1xMTMxNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMTMxNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UtMyAgLT4gMAorZHFzYW1xMTMxNiBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUtMyAgLT4gMAorZHFzYW1xMTMxNyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMTMxOCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUrMyAgLT4gMQorZHFzYW1xMTMxOSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUtMyAgLT4gMAorZHFzYW1xMTMyMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMTMyMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUrMyAgLT4gMQorZHFzYW1xMTMyMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UtMyAgLT4gMAorZHFzYW1xMTMyMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMTMyNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UrMyAgLT4gMQorZHFzYW1xMTMyNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXExNDEwIHNhbWVxdWFudHVtICA3RS0zICAgIC1JbmYgICAtPiAwCitkcXNhbXExNDExIHNhbWVxdWFudHVtICA3RS0zICAgICBJbmYgICAtPiAwCitkcXNhbXExNDEyIHNhbWVxdWFudHVtICA3RS0zICAgICBOYU4gICAtPiAwCitkcXNhbXExNDEzIHNhbWVxdWFudHVtICA3RS0zICAgIC03RSszICAtPiAwCitkcXNhbXExNDE0IHNhbWVxdWFudHVtICA3RS0zICAgIC03ICAgICAtPiAwCitkcXNhbXExNDE1IHNhbWVxdWFudHVtICA3RS0zICAgIC03RS0zICAtPiAxCitkcXNhbXExNDE2IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRS0zICAtPiAxCitkcXNhbXExNDE3IHNhbWVxdWFudHVtICA3RS0zICAgIC0wICAgICAtPiAwCitkcXNhbXExNDE4IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRSszICAtPiAwCitkcXNhbXExNDE5IHNhbWVxdWFudHVtICA3RS0zICAgICAwRS0zICAtPiAxCitkcXNhbXExNDIwIHNhbWVxdWFudHVtICA3RS0zICAgICAwICAgICAtPiAwCitkcXNhbXExNDIxIHNhbWVxdWFudHVtICA3RS0zICAgICAwRSszICAtPiAwCitkcXNhbXExNDIyIHNhbWVxdWFudHVtICA3RS0zICAgICA3RS0zICAtPiAxCitkcXNhbXExNDIzIHNhbWVxdWFudHVtICA3RS0zICAgICA3ICAgICAtPiAwCitkcXNhbXExNDI0IHNhbWVxdWFudHVtICA3RS0zICAgICA3RSszICAtPiAwCitkcXNhbXExNDI1IHNhbWVxdWFudHVtICA3RS0zICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTE1MTAgc2FtZXF1YW50dW0gIDcgICAgICAtSW5mICAgLT4gMAorZHFzYW1xMTUxMSBzYW1lcXVhbnR1bSAgNyAgICAgICBJbmYgICAtPiAwCitkcXNhbXExNTEyIHNhbWVxdWFudHVtICA3ICAgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTE1MTMgc2FtZXF1YW50dW0gIDcgICAgICAtN0UrMyAgLT4gMAorZHFzYW1xMTUxNCBzYW1lcXVhbnR1bSAgNyAgICAgIC03ICAgICAtPiAxCitkcXNhbXExNTE1IHNhbWVxdWFudHVtICA3ICAgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTE1MTYgc2FtZXF1YW50dW0gIDcgICAgICAtMEUtMyAgLT4gMAorZHFzYW1xMTUxNyBzYW1lcXVhbnR1bSAgNyAgICAgIC0wICAgICAtPiAxCitkcXNhbXExNTE4IHNhbWVxdWFudHVtICA3ICAgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTE1MTkgc2FtZXF1YW50dW0gIDcgICAgICAgMEUtMyAgLT4gMAorZHFzYW1xMTUyMCBzYW1lcXVhbnR1bSAgNyAgICAgICAwICAgICAtPiAxCitkcXNhbXExNTIxIHNhbWVxdWFudHVtICA3ICAgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTE1MjIgc2FtZXF1YW50dW0gIDcgICAgICAgN0UtMyAgLT4gMAorZHFzYW1xMTUyMyBzYW1lcXVhbnR1bSAgNyAgICAgICA3ICAgICAtPiAxCitkcXNhbXExNTI0IHNhbWVxdWFudHVtICA3ICAgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTE1MjUgc2FtZXF1YW50dW0gIDcgICAgICAgc05hTiAgLT4gMAorCitkcXNhbXExNjEwIHNhbWVxdWFudHVtICA3RSszICAgIC1JbmYgICAtPiAwCitkcXNhbXExNjExIHNhbWVxdWFudHVtICA3RSszICAgICBJbmYgICAtPiAwCitkcXNhbXExNjEyIHNhbWVxdWFudHVtICA3RSszICAgICBOYU4gICAtPiAwCitkcXNhbXExNjEzIHNhbWVxdWFudHVtICA3RSszICAgIC03RSszICAtPiAxCitkcXNhbXExNjE0IHNhbWVxdWFudHVtICA3RSszICAgIC03ICAgICAtPiAwCitkcXNhbXExNjE1IHNhbWVxdWFudHVtICA3RSszICAgIC03RS0zICAtPiAwCitkcXNhbXExNjE2IHNhbWVxdWFudHVtICA3RSszICAgIC0wRS0zICAtPiAwCitkcXNhbXExNjE3IHNhbWVxdWFudHVtICA3RSszICAgIC0wICAgICAtPiAwCitkcXNhbXExNjE4IHNhbWVxdWFudHVtICA3RSszICAgIC0wRSszICAtPiAxCitkcXNhbXExNjE5IHNhbWVxdWFudHVtICA3RSszICAgICAwRS0zICAtPiAwCitkcXNhbXExNjIwIHNhbWVxdWFudHVtICA3RSszICAgICAwICAgICAtPiAwCitkcXNhbXExNjIxIHNhbWVxdWFudHVtICA3RSszICAgICAwRSszICAtPiAxCitkcXNhbXExNjIyIHNhbWVxdWFudHVtICA3RSszICAgICA3RS0zICAtPiAwCitkcXNhbXExNjIzIHNhbWVxdWFudHVtICA3RSszICAgICA3ICAgICAtPiAwCitkcXNhbXExNjI0IHNhbWVxdWFudHVtICA3RSszICAgICA3RSszICAtPiAxCitkcXNhbXExNjI1IHNhbWVxdWFudHVtICA3RSszICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTE3MTAgc2FtZXF1YW50dW0gIHNOYU4gICAgLUluZiAgIC0+IDAKK2Rxc2FtcTE3MTEgc2FtZXF1YW50dW0gIHNOYU4gICAgIEluZiAgIC0+IDAKK2Rxc2FtcTE3MTIgc2FtZXF1YW50dW0gIHNOYU4gICAgIE5hTiAgIC0+IDEKK2Rxc2FtcTE3MTMgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTE3MTQgc2FtZXF1YW50dW0gIHNOYU4gICAgLTcgICAgIC0+IDAKK2Rxc2FtcTE3MTUgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTE3MTYgc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTE3MTcgc2FtZXF1YW50dW0gIHNOYU4gICAgLTAgICAgIC0+IDAKK2Rxc2FtcTE3MTggc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTE3MTkgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTE3MjAgc2FtZXF1YW50dW0gIHNOYU4gICAgIDAgICAgIC0+IDAKK2Rxc2FtcTE3MjEgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTE3MjIgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTE3MjMgc2FtZXF1YW50dW0gIHNOYU4gICAgIDcgICAgIC0+IDAKK2Rxc2FtcTE3MjQgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTE3MjUgc2FtZXF1YW50dW0gIHNOYU4gICAgIHNOYU4gIC0+IDEKKy0tIG5vaXN5IE5hTnMKK2Rxc2FtcTE3MzAgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU4zIC0+IDEKK2Rxc2FtcTE3MzEgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU40IC0+IDEKK2Rxc2FtcTE3MzIgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU4zIC0+IDEKK2Rxc2FtcTE3MzMgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU40IC0+IDEKK2Rxc2FtcTE3MzQgc2FtZXF1YW50dW0gIHNOYU4zICAgICAzICAgIC0+IDAKK2Rxc2FtcTE3MzUgc2FtZXF1YW50dW0gICBOYU4zICAgICAzICAgIC0+IDAKK2Rxc2FtcTE3MzYgc2FtZXF1YW50dW0gICAgICA0ICAgIHNOYU40IC0+IDAKK2Rxc2FtcTE3Mzcgc2FtZXF1YW50dW0gICAgICAzICAgICBOYU4zIC0+IDAKK2Rxc2FtcTE3Mzggc2FtZXF1YW50dW0gICAgSW5mICAgIHNOYU40IC0+IDAKK2Rxc2FtcTE3Mzkgc2FtZXF1YW50dW0gICAtSW5mICAgICBOYU4zIC0+IDAKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNjYWxlQi5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNjYWxlQi5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NWRjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2NhbGVCLmRlY1Rlc3QKQEAgLTAsMCArMSwyNjAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFTY2FsZWJCLmRlY1Rlc3QgLS0gc2NhbGUgYSBkZWNRdWFkIGJ5IHBvd2VycyBvZiAxMCAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBNYXggfHJoc3wgaXMgMiooNjE0NCszNCkgPSAxMjM1NgorCistLSBTYW5pdHkgY2hlY2tzCitkcXNjYjAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwCitkcXNjYjAwMiBzY2FsZWIgICAgICAgNy41MCAgICAzIC0+IDcuNTBFKzMKK2Rxc2NiMDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwCitkcXNjYjAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjAKK2Rxc2NiMDA1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgLT4gNy41MAorZHFzY2IwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MAorZHFzY2IwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTAKK2Rxc2NiMDA4IHNjYWxlYiAgICAgICA3LjUwICAtMTAgLT4gNy41MEUtMTAKK2Rxc2NiMDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMKK2Rxc2NiMDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MAorZHFzY2IwMTEgc2NhbGViICAgICAgLTcuNTAgICAgMSAtPiAtNzUuMAorZHFzY2IwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MAorZHFzY2IwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTAKKworLS0gSW5maW5pdGllcworZHFzY2IwMTQgc2NhbGViICBJbmZpbml0eSAgIDEgLT4gSW5maW5pdHkKK2Rxc2NiMDE1IHNjYWxlYiAgLUluZmluaXR5ICAyIC0+IC1JbmZpbml0eQorZHFzY2IwMTYgc2NhbGViICBJbmZpbml0eSAgLTEgLT4gSW5maW5pdHkKK2Rxc2NiMDE3IHNjYWxlYiAgLUluZmluaXR5IC0yIC0+IC1JbmZpbml0eQorCistLSBOZXh0IHR3byBhcmUgc29tZXdoYXQgdW5kZWZpbmVkIGluIDc1NHI7IHRyZWF0IGFzIG5vbi1pbnRlZ2VyCitkcXNjYjAxOCBzY2FsZWIgIDEwICBJbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDE5IHNjYWxlYiAgMTAgLUluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcKKy0tIE5hTnMsIDAgcGF5bG9hZAorZHFzY2IwMjEgc2NhbGViICAgICAgICAgTmFOICAxIC0+IE5hTgorZHFzY2IwMjIgc2NhbGViICAgICAgICAtTmFOIC0xIC0+IC1OYU4KK2Rxc2NiMDIzIHNjYWxlYiAgICAgICAgc05hTiAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDI0IHNjYWxlYiAgICAgICAtc05hTiAgMSAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAyNSBzY2FsZWIgICAgNCAgICBOYU4gICAgLT4gTmFOCitkcXNjYjAyNiBzY2FsZWIgLUluZiAgIC1OYU4gICAgLT4gLU5hTgorZHFzY2IwMjcgc2NhbGViICAgIDQgICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMjggc2NhbGViICBJbmYgIC1zTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gbm9uLWludGVnZXIgUkhTCitkcXNjYjAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMworZHFzY2IwMzEgc2NhbGViICAxLjIzICAgIDEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMzQgc2NhbGViICAxLjIzICAgIDAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDM3IHNjYWxlYiAgMS4yMyAgIC0xICAgIC0+ICAwLjEyMworZHFzY2IwNjE0IHNjYWxlYiAgMS4yMyAgIC0xLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDM5IHNjYWxlYiAgMS4yMyAgIC0xLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDQwIHNjYWxlYiAgMS4yMyAgIC0xLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDQxIHNjYWxlYiAgMS4yMyAgIC0wLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDQyIHNjYWxlYiAgMS4yMyAgIC0wLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDQzIHNjYWxlYiAgMS4yMyAgIC0wLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0NCBzY2FsZWIgIDEuMjMgICAgMC4xICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDUgc2NhbGViICAxLjIzICAgIDFFKzEgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDQ2IHNjYWxlYiAgMS4yMyAgICAxLjEyMzRFKzYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0NyBzY2FsZWIgIDEuMjMgICAgMS4xMjNFKzQgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdXQtb2YgcmFuZ2UgUkhTCitkcXNjYjEyMCBzY2FsZWIgIDEuMjMgICAgMTIzNTUgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFzY2IxMjEgc2NhbGViICAxLjIzICAgIDEyMzU2ICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTIyIHNjYWxlYiAgMS4yMyAgICAxMjM1NyAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjEyMyBzY2FsZWIgIDEuMjMgICAgMTIzNTggICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IxMjQgc2NhbGViICAxLjIzICAgLTEyMzU1ICAgICAgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rxc2NiMTI1IHNjYWxlYiAgMS4yMyAgIC0xMjM1NiAgICAgICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcXNjYjEyNiBzY2FsZWIgIDEuMjMgICAtMTIzNTcgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IxMjcgc2NhbGViICAxLjIzICAgLTEyMzU4ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorLS0gcHJvcGFnYXRpbmcgTmFOcworZHFzY2I4NjEgc2NhbGViICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xCitkcXNjYjg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKK2Rxc2NiODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMworZHFzY2I4NjQgc2NhbGViICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40CitkcXNjYjg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKK2Rxc2NiODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzEKK2Rxc2NiODY3IHNjYWxlYiAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODEKK2Rxc2NiODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKK2Rxc2NiODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxCitkcXNjYjg3MSBzY2FsZWIgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3NCBzY2FsZWIgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3NyBzY2FsZWIgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg4MCBzY2FsZWIgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworZHFzY2IwNTEgc2NhbGViICAgICAgICAgIDcgICAtMiAgLT4gMC4wNworZHFzY2IwNTIgc2NhbGViICAgICAgICAgLTcgICAtMiAgLT4gLTAuMDcKK2Rxc2NiMDUzIHNjYWxlYiAgICAgICAgIDc1ICAgLTIgIC0+IDAuNzUKK2Rxc2NiMDU0IHNjYWxlYiAgICAgICAgLTc1ICAgLTIgIC0+IC0wLjc1CitkcXNjYjA1NSBzY2FsZWIgICAgICAgNy41MCAgIC0yICAtPiAwLjA3NTAKK2Rxc2NiMDU2IHNjYWxlYiAgICAgIC03LjUwICAgLTIgIC0+IC0wLjA3NTAKK2Rxc2NiMDU3IHNjYWxlYiAgICAgICA3LjUwMCAgLTIgIC0+IDAuMDc1MDAKK2Rxc2NiMDU4IHNjYWxlYiAgICAgIC03LjUwMCAgLTIgIC0+IC0wLjA3NTAwCitkcXNjYjA2MSBzY2FsZWIgICAgICAgICAgNyAgIC0xICAtPiAwLjcKK2Rxc2NiMDYyIHNjYWxlYiAgICAgICAgIC03ICAgLTEgIC0+IC0wLjcKK2Rxc2NiMDYzIHNjYWxlYiAgICAgICAgIDc1ICAgLTEgIC0+IDcuNQorZHFzY2IwNjQgc2NhbGViICAgICAgICAtNzUgICAtMSAgLT4gLTcuNQorZHFzY2IwNjUgc2NhbGViICAgICAgIDcuNTAgICAtMSAgLT4gMC43NTAKK2Rxc2NiMDY2IHNjYWxlYiAgICAgIC03LjUwICAgLTEgIC0+IC0wLjc1MAorZHFzY2IwNjcgc2NhbGViICAgICAgIDcuNTAwICAtMSAgLT4gMC43NTAwCitkcXNjYjA2OCBzY2FsZWIgICAgICAtNy41MDAgIC0xICAtPiAtMC43NTAwCitkcXNjYjA3MSBzY2FsZWIgICAgICAgICAgNyAgICAwICAtPiA3CitkcXNjYjA3MiBzY2FsZWIgICAgICAgICAtNyAgICAwICAtPiAtNworZHFzY2IwNzMgc2NhbGViICAgICAgICAgNzUgICAgMCAgLT4gNzUKK2Rxc2NiMDc0IHNjYWxlYiAgICAgICAgLTc1ICAgIDAgIC0+IC03NQorZHFzY2IwNzUgc2NhbGViICAgICAgIDcuNTAgICAgMCAgLT4gNy41MAorZHFzY2IwNzYgc2NhbGViICAgICAgLTcuNTAgICAgMCAgLT4gLTcuNTAKK2Rxc2NiMDc3IHNjYWxlYiAgICAgICA3LjUwMCAgIDAgIC0+IDcuNTAwCitkcXNjYjA3OCBzY2FsZWIgICAgICAtNy41MDAgICAwICAtPiAtNy41MDAKK2Rxc2NiMDgxIHNjYWxlYiAgICAgICAgICA3ICAgIDEgIC0+IDdFKzEKK2Rxc2NiMDgyIHNjYWxlYiAgICAgICAgIC03ICAgIDEgIC0+IC03RSsxCitkcXNjYjA4MyBzY2FsZWIgICAgICAgICA3NSAgICAxICAtPiA3LjVFKzIKK2Rxc2NiMDg0IHNjYWxlYiAgICAgICAgLTc1ICAgIDEgIC0+IC03LjVFKzIKK2Rxc2NiMDg1IHNjYWxlYiAgICAgICA3LjUwICAgIDEgIC0+IDc1LjAKK2Rxc2NiMDg2IHNjYWxlYiAgICAgIC03LjUwICAgIDEgIC0+IC03NS4wCitkcXNjYjA4NyBzY2FsZWIgICAgICAgNy41MDAgICAxICAtPiA3NS4wMAorZHFzY2IwODggc2NhbGViICAgICAgLTcuNTAwICAgMSAgLT4gLTc1LjAwCitkcXNjYjA5MSBzY2FsZWIgICAgICAgICAgNyAgICAyICAtPiA3RSsyCitkcXNjYjA5MiBzY2FsZWIgICAgICAgICAtNyAgICAyICAtPiAtN0UrMgorZHFzY2IwOTMgc2NhbGViICAgICAgICAgNzUgICAgMiAgLT4gNy41RSszCitkcXNjYjA5NCBzY2FsZWIgICAgICAgIC03NSAgICAyICAtPiAtNy41RSszCitkcXNjYjA5NSBzY2FsZWIgICAgICAgNy41MCAgICAyICAtPiA3NTAKK2Rxc2NiMDk2IHNjYWxlYiAgICAgIC03LjUwICAgIDIgIC0+IC03NTAKK2Rxc2NiMDk3IHNjYWxlYiAgICAgICA3LjUwMCAgIDIgIC0+IDc1MC4wCitkcXNjYjA5OCBzY2FsZWIgICAgICAtNy41MDAgICAyICAtPiAtNzUwLjAKKworLS0gemVyb3MKK2Rxc2NiMTExIHNjYWxlYiAgICAgICAgICAwICAxIC0+IDBFKzEKK2Rxc2NiMTEyIHNjYWxlYiAgICAgICAgIC0wICAyIC0+IC0wRSsyCitkcXNjYjExMyBzY2FsZWIgICAgICAgMEUrNCAgMyAtPiAwRSs3CitkcXNjYjExNCBzY2FsZWIgICAgICAtMEUrNCAgNCAtPiAtMEUrOAorZHFzY2IxMTUgc2NhbGViICAgICAwLjAwMDAgIDUgLT4gMEUrMQorZHFzY2IxMTYgc2NhbGViICAgIC0wLjAwMDAgIDYgLT4gLTBFKzIKK2Rxc2NiMTE3IHNjYWxlYiAgICAgIDBFLTE0MSA3IC0+IDBFLTEzNAorZHFzY2IxMTggc2NhbGViICAgICAtMEUtMTQxIDggLT4gLTBFLTEzMworCistLSBObWF4LCBObWluLCBOdGlueQorZHFzY2IxMzIgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgKzYxNDQgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjEzMyBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICArMTAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFzY2IxMzQgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgKzEgIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTM1IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFzY2IxMzYgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQzCitkcXNjYjEzNyBzY2FsZWIgIDFFLTYxNDMgICAgICAgICAgICsxICAtPiAxRS02MTQyCitkcXNjYjE2MTQgc2NhbGViICAxRS02MTQzICAgICAgICAgICAtMCAgLT4gMUUtNjE0MworZHFzY2IxMzkgc2NhbGViICAxRS02MTQzICAgICAgICAgICAtMSAgLT4gMUUtNjE0NCAgICAgICAgICBTdWJub3JtYWwKK2Rxc2NiMTQwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICsxICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MgorZHFzY2IxNDEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcXNjYjE0MiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IxNDMgc2NhbGViICAxRS02MTc2ICAgICAgICAgICsxICAtPiAxRS02MTc1ICAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE0NCBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgLTAgIC0+IDFFLTYxNzYgICAgICAgICBTdWJub3JtYWwKK2Rxc2NiMTQ1IHNjYWxlYiAgMUUtNjE3NiAgICAgICAgICAtMSAgLT4gMEUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZHFzY2IxNTAgc2NhbGViICAtMUUtNjE3NiAgICAgICAgICsxICAtPiAtMUUtNjE3NSAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE1MSBzY2FsZWIgIC0xRS02MTc2ICAgICAgICAgLTAgIC0+IC0xRS02MTc2ICAgICAgICBTdWJub3JtYWwKK2Rxc2NiMTUyIHNjYWxlYiAgLTFFLTYxNzYgICAgICAgICAtMSAgLT4gLTBFLTYxNzYgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rxc2NiMTUzIHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICsxICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDIKK2Rxc2NiMTU0IHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICswICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2Rxc2NiMTU1IHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IxNTYgc2NhbGViICAtMUUtNjE0MyAgICAgICAgICArMSAgLT4gLTFFLTYxNDIKK2Rxc2NiMTU3IHNjYWxlYiAgLTFFLTYxNDMgICAgICAgICAgLTAgIC0+IC0xRS02MTQzCitkcXNjYjE1OCBzY2FsZWIgIC0xRS02MTQzICAgICAgICAgIC0xICAtPiAtMUUtNjE0NCAgICAgICAgICBTdWJub3JtYWwKK2Rxc2NiMTU5IHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFzY2IxNjAgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgKzAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFzY2IxNjEgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0MworZHFzY2IxNjIgc2NhbGViICAtOUUrNjE0NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTYzIHNjYWxlYiAgLTFFKzYxNDQgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgT3JpZ2FtaQorLS0gKHRoZXNlIGNoZWNrIHRoYXQgb3ZlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpCitkcXNjYjE3MSBzY2FsZWIgICAxMDAwRSs2MTA5ICArMSAtPiAxLjAwMEUrNjExMworZHFzY2IxNzIgc2NhbGViICAgMTAwMEUrNjExMCAgKzEgLT4gMS4wMDBFKzYxMTQKK2Rxc2NiMTczIHNjYWxlYiAgIDEwMDBFKzYxMTEgICsxIC0+IDEuMDAwMEUrNjExNSAgICAgICAgICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxNzQgc2NhbGViICAgMTAwMEUrNjExMiAgKzEgLT4gMS4wMDAwMEUrNjExNiAgICAgICAgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE3NSBzY2FsZWIgICAxMDAwRSs2MTEzICArMSAtPiAxLjAwMDAwMEUrNjExNyAgICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc2IHNjYWxlYiAgIDEwMDBFKzYxMTQgICsxIC0+IDEuMDAwMDAwMEUrNjExOCAgICAgICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxNzcgc2NhbGViICAgMTAwMEUrNjEzMSAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzUgICAgICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxNzggc2NhbGViICAgMTAwMEUrNjEzMiAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM2ICAgICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxNzkgc2NhbGViICAgMTAwMEUrNjEzMyAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNyAgICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxODAgc2NhbGViICAgMTAwMEUrNjEzNCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzggICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxODEgc2NhbGViICAgMTAwMEUrNjEzNSAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM5ICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxODIgc2NhbGViICAgMTAwMEUrNjEzNiAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MCAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxODMgc2NhbGViICAgMTAwMEUrNjEzNyAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxODQgc2NhbGViICAgMTAwMEUrNjEzOCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICAgICAgICAgQ2xhbXBlZAorZHFzY2IxODUgc2NhbGViICAgMTAwMEUrNjEzOSAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyAgICAgICAgQ2xhbXBlZAorZHFzY2IxODYgc2NhbGViICAgMTAwMEUrNjE0MCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgICAgICAgQ2xhbXBlZAorZHFzY2IxODcgc2NhbGViICAgMTAwMEUrNjE0MSAgKzEgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIGFuZCBhIGZldyBtb3JlIHN1Ym5vcm1hbCB0cnVuY2F0aW9ucworLS0gKHRoZXNlIGNoZWNrIHRoYXQgdW5kZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQorZHFzY2IyMjEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcXNjYjIyMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMjMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMjQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ2IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIyNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtNCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NyBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMjYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTUgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0OCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMjcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTYgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ5IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIyOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtNyAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMjkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTggIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUyIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MyBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTExIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEyIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU1IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NiBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE0IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NyBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU4IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTYgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMEUtNjE1OSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE3IC0+IDEuMDAwMDAwMDAwMDAwMDAwMEUtNjE2MCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE4IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS02MTYxIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIwMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTkgLT4gMS4wMDAwMDAwMDAwMDAwMEUtNjE2MiBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIwIC0+IDEuMDAwMDAwMDAwMDAwMEUtNjE2MyBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIxIC0+IDEuMDAwMDAwMDAwMDAwRS02MTY0IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIwNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjIgLT4gMS4wMDAwMDAwMDAwMEUtNjE2NSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIzIC0+IDEuMDAwMDAwMDAwMEUtNjE2NiBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI0IC0+IDEuMDAwMDAwMDAwRS02MTY3IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIwOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjUgLT4gMS4wMDAwMDAwMEUtNjE2OCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI2IC0+IDEuMDAwMDAwMEUtNjE2OSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI3IC0+IDEuMDAwMDAwRS02MTcwIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIxMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjggLT4gMS4wMDAwMEUtNjE3MSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI5IC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTMwIC0+IDEuMDAwRS02MTczIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIxNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzEgLT4gMS4wMEUtNjE3NCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTMyIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTMzIC0+IDFFLTYxNzYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjE3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zNCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rxc2NiMjE4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zNSAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTaGlmdC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNoaWZ0LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2OTIxMwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTaGlmdC5kZWNUZXN0CkBAIC0wLDAgKzEsMjk4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxU2hpZnQuZGVjVGVzdCAtLSBzaGlmdCBkZWNRdWFkIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcXNoaTAwMSBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAwICAtPiAgMAorZHFzaGkwMDIgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDAKK2Rxc2hpMDAzIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDAKK2Rxc2hpMDA0IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzMgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTAwNSBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDM0ICAtPiAgMAorZHFzaGkwMDYgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDAKK2Rxc2hpMDA3IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgLTIgIC0+ICAwCitkcXNoaTAwOCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXNoaTAwOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgMQorZHFzaGkwMTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gIDAKK2Rxc2hpMDExIHNoaWZ0ICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+ICA5CitkcXNoaTAxMiBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgMAorCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyCitkcXNoaTAxNSBzaGlmdCAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAxNiBzaGlmdCAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAxNyBzaGlmdCAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAxOCBzaGlmdCAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAxOSBzaGlmdCAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAyMCBzaGlmdCAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAyMSBzaGlmdCAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAyMiBzaGlmdCAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCitkcXNoaTAyNSBzaGlmdCAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAyNiBzaGlmdCAgICAgICAgMSAgICAtMzUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAyNyBzaGlmdCAgICAgICAgMSAgICAgMzUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTAyOCBzaGlmdCAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZ1bGwgc2hpZnRpbmcgcGF0dGVybgorZHFzaGkwMzAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzQgIC0+IDAKK2Rxc2hpMDMxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMzICAtPiAxCitkcXNoaTAzMiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMiAgLT4gMTIKK2Rxc2hpMDMzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMxICAtPiAxMjMKK2Rxc2hpMDM0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMwICAtPiAxMjM0CitkcXNoaTAzNSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOSAgLT4gMTIzNDUKK2Rxc2hpMDM2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI4ICAtPiAxMjM0NTYKK2Rxc2hpMDM3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI3ICAtPiAxMjM0NTY3CitkcXNoaTAzOCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNiAgLT4gMTIzNDU2NzgKK2Rxc2hpMDM5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI1ICAtPiAxMjM0NTY3ODkKK2Rxc2hpMDQwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI0ICAtPiAxMjM0NTY3ODkwCitkcXNoaTA0MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMyAgLT4gMTIzNDU2Nzg5MDEKK2Rxc2hpMDQyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIyICAtPiAxMjM0NTY3ODkwMTIKK2Rxc2hpMDQzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIxICAtPiAxMjM0NTY3ODkwMTIzCitkcXNoaTA0NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQKK2Rxc2hpMDQ1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDUKK2Rxc2hpMDQ3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE4ICAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcXNoaTA0OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NjcKK2Rxc2hpMDQ5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2NzgKK2Rxc2hpMDUwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE1ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5CitkcXNoaTA1MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAKK2Rxc2hpMDUyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEKK2Rxc2hpMDUzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEyICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCitkcXNoaTA1NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxc2hpMDU1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2Rxc2hpMDU2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTkgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1CitkcXNoaTA1NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYKK2Rxc2hpMDU4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcKK2Rxc2hpMDU5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTYgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4CitkcXNoaTA2MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKK2Rxc2hpMDYxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAKK2Rxc2hpMDYyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCitkcXNoaTA2MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKK2Rxc2hpMDY0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxc2hpMDY1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CisKK2Rxc2hpMDY2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXNoaTA2NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MAorZHFzaGkwNjggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAKK2Rxc2hpMDY5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwCitkcXNoaTA3MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs0ICAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMAorZHFzaGkwNzEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNSAgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAKK2Rxc2hpMDcyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwCitkcXNoaTA3MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs3ICAgLT4gODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMAorZHFzaGkwNzQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArOCAgIC0+IDkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAKK2Rxc2hpMDc1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzkgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwCitkcXNoaTA3NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMAorZHFzaGkwNzcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTEgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAKK2Rxc2hpMDc4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwCitkcXNoaTA3OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMyAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMAorZHFzaGkwODAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTQgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDgxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE1ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNiAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDg0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE4ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxOSAgLT4gIDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjAgIC0+IDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDg3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIxICAtPiAyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMiAgLT4gMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjMgIC0+IDQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDkwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI0ICAtPiA1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNSAgLT4gNjc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjYgIC0+IDc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDkzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI3ICAtPiA4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyOCAgLT4gOTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjkgIC0+ICAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDk2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMwICAtPiAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMSAgLT4gMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzIgIC0+IDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDk5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMzICAtPiA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTEwMCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszNCAgLT4gMAorCistLSB6ZXJvcworZHFzaGkyNzAgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFLTEwCitkcXNoaTI3MSBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUtMTAKK2Rxc2hpMjcyIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwLjAwMAorZHFzaGkyNzMgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgIDAuMDAwCitkcXNoaTI3NCBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMEUrMTAKK2Rxc2hpMjc1IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwRSsxMAorZHFzaGkyNzYgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFLTEwCitkcXNoaTI3NyBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUtMTAKK2Rxc2hpMjc4IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wLjAwMAorZHFzaGkyNzkgc2hpZnQgLTAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgLTAuMDAwCitkcXNoaTI4MCBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMEUrMTAKK2Rxc2hpMjgxIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wRSsxMAorCistLSBObWF4LCBObWluLCBOdGlueQorZHFzaGkxNDEgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0MworZHFzaGkxNDIgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMzMgLT4gOUUrNjExMQorZHFzaGkxNDMgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQKK2Rxc2hpMTQ0IHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CitkcXNoaTE0NSBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAwRS02MTQzCitkcXNoaTE0NiBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAwRS02MTQzCitkcXNoaTE0NyBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTYxNDIKK2Rxc2hpMTQ4IHNoaWZ0ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwCitkcXNoaTE1MSBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXNoaTE1MiBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAxRS02MTc2CitkcXNoaTE1MyBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAwRS02MTc2CitkcXNoaTE1NCBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAwRS02MTc2CitkcXNoaTE1NSBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXNoaTE1NiBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiA5RS02MTc2CitkcXNoaTE1NyBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAwRS02MTc2CitkcXNoaTE1OCBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAwRS02MTc2CitkcXNoaTE2MCBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAwRS02MTc2CitkcXNoaTE2MSBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAwRS02MTc2CitkcXNoaTE2MiBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTYxNzUKK2Rxc2hpMTYzIHNoaWZ0ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCistLSAgbmVnYXRpdmVzCitkcXNoaTE3MSBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0MworZHFzaGkxNzIgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMzMgLT4gLTlFKzYxMTEKK2Rxc2hpMTczIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NAorZHFzaGkxNzQgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMzMgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CitkcXNoaTE3NSBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtNjE0MworZHFzaGkxNzYgc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTBFLTYxNDMKK2Rxc2hpMTc3IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTYxNDIKK2Rxc2hpMTc4IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAorZHFzaGkxODEgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxc2hpMTgyIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IC0xRS02MTc2CitkcXNoaTE4MyBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtMEUtNjE3NgorZHFzaGkxODQgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTBFLTYxNzYKK2Rxc2hpMTg1IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXNoaTE4NiBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtOUUtNjE3NgorZHFzaGkxODcgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTBFLTYxNzYKK2Rxc2hpMTg4IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC0wRS02MTc2CitkcXNoaTE5MCBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtNjE3NgorZHFzaGkxOTEgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTBFLTYxNzYKK2Rxc2hpMTkyIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTYxNzUKK2Rxc2hpMTkzIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCitkcXNoaTIwMSBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgICAwICAtPiAtMAorZHFzaGkyMDIgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTAKK2Rxc2hpMjAzIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDAKK2Rxc2hpMjA0IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgMzMgIC0+IC0xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTIwNSBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDM0ICAtPiAtMAorZHFzaGkyMDYgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTAKK2Rxc2hpMjA3IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgLTIgIC0+IC0wCitkcXNoaTIwOCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXNoaTIwOSBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtMQorZHFzaGkyMTAgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTAKK2Rxc2hpMjExIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+IC05CitkcXNoaTIxMiBzaGlmdCAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAtMAorCisKKy0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsCitkcXNoaTc4MSBzaGlmdCAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5CitkcXNoaTc4MiBzaGlmdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcXNoaTc4MyBzaGlmdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkcXNoaTc4NCBzaGlmdCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcXNoaTc4NSBzaGlmdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcXNoaTc4NiBzaGlmdCAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5CitkcXNoaTc4NyBzaGlmdCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTc4OCBzaGlmdCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTc4OSBzaGlmdCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTc5MCBzaGlmdCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTc5MSBzaGlmdCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTc5MiBzaGlmdCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTc5MyBzaGlmdCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTc5NCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxc2hpODAwIHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODAxIHNoaWZ0ICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQorZHFzaGk4MDIgc2hpZnQgIEluZiAgLTEgICAgIC0+IEluZmluaXR5CitkcXNoaTgwMyBzaGlmdCAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkKK2Rxc2hpODA0IHNoaWZ0ICBJbmYgICAwICAgICAtPiBJbmZpbml0eQorZHFzaGk4MDUgc2hpZnQgIEluZiAgIDEgICAgIC0+IEluZmluaXR5CitkcXNoaTgwNiBzaGlmdCAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkKK2Rxc2hpODA3IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODA4IHNoaWZ0IC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODA5IHNoaWZ0IC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODEwIHNoaWZ0IC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODExIHNoaWZ0IC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODEyIHNoaWZ0ICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODEzIHNoaWZ0ICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODE0IHNoaWZ0ICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODE1IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFzaGk4MjEgc2hpZnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2Rxc2hpODIyIHNoaWZ0ICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcXNoaTgyMyBzaGlmdCAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFzaGk4MjQgc2hpZnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2Rxc2hpODI1IHNoaWZ0ICBOYU4gIDAgICAgICAtPiAgTmFOCitkcXNoaTgyNiBzaGlmdCAgTmFOICAxICAgICAgLT4gIE5hTgorZHFzaGk4Mjcgc2hpZnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2Rxc2hpODI4IHNoaWZ0ICBOYU4gIEluZiAgICAtPiAgTmFOCitkcXNoaTgyOSBzaGlmdCAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFzaGk4MzAgc2hpZnQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODMxIHNoaWZ0IC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzMiBzaGlmdCAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFzaGk4MzMgc2hpZnQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODM0IHNoaWZ0ICAwICAgIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzNSBzaGlmdCAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFzaGk4MzYgc2hpZnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODM3IHNoaWZ0ICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2Rxc2hpODQxIHNoaWZ0ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDIgc2hpZnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0MyBzaGlmdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQ0IHNoaWZ0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDUgc2hpZnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0NiBzaGlmdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQ3IHNoaWZ0ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDggc2hpZnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0OSBzaGlmdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODUwIHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTEgc2hpZnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1MiBzaGlmdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODUzIHNoaWZ0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTQgc2hpZnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1NSBzaGlmdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODU2IHNoaWZ0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTcgc2hpZnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1OCBzaGlmdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODU5IHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcXNoaTg2MSBzaGlmdCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2Rxc2hpODYyIHNoaWZ0ICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZHFzaGk4NjMgc2hpZnQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkcXNoaTg2NCBzaGlmdCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2Rxc2hpODY1IHNoaWZ0ICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZHFzaGk4NjYgc2hpZnQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkcXNoaTg2NyBzaGlmdCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2Rxc2hpODY4IHNoaWZ0ICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZHFzaGk4Njkgc2hpZnQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZHFzaGk4NzEgc2hpZnQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODcyIHNoaWZ0ICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3MyBzaGlmdCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NzQgc2hpZnQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODc1IHNoaWZ0ICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3NiBzaGlmdCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4Nzcgc2hpZnQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODc4IHNoaWZ0IC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3OSBzaGlmdCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4ODAgc2hpZnQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODgxIHNoaWZ0ICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg4MiBzaGlmdCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkcXNoaTg4MyBzaGlmdCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4ODQgc2hpZnQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZHFzaGk4ODUgc2hpZnQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTdWJ0cmFjdC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVN1YnRyYWN0LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1NzJmNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTdWJ0cmFjdC5kZWNUZXN0CkBAIC0wLDAgKzEsNjM1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxU3VidHJhY3QuZGVjVGVzdCAtLSBkZWNRdWFkIHN1YnRyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgYXJlIGZvciBkZWNRdWFkcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQorLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY1F1YWQKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZHFzdWIwMDEgc3VidHJhY3QgIDAgICAwICAtPiAnMCcKK2Rxc3ViMDAyIHN1YnRyYWN0ICAxICAgMSAgLT4gJzAnCitkcXN1YjAwMyBzdWJ0cmFjdCAgMSAgIDIgIC0+ICctMScKK2Rxc3ViMDA0IHN1YnRyYWN0ICAyICAgMSAgLT4gJzEnCitkcXN1YjAwNSBzdWJ0cmFjdCAgMiAgIDIgIC0+ICcwJworZHFzdWIwMDYgc3VidHJhY3QgIDMgICAyICAtPiAnMScKK2Rxc3ViMDA3IHN1YnRyYWN0ICAyICAgMyAgLT4gJy0xJworCitkcXN1YjAxMSBzdWJ0cmFjdCAtMCAgIDAgIC0+ICctMCcKK2Rxc3ViMDEyIHN1YnRyYWN0IC0xICAgMSAgLT4gJy0yJworZHFzdWIwMTMgc3VidHJhY3QgLTEgICAyICAtPiAnLTMnCitkcXN1YjAxNCBzdWJ0cmFjdCAtMiAgIDEgIC0+ICctMycKK2Rxc3ViMDE1IHN1YnRyYWN0IC0yICAgMiAgLT4gJy00JworZHFzdWIwMTYgc3VidHJhY3QgLTMgICAyICAtPiAnLTUnCitkcXN1YjAxNyBzdWJ0cmFjdCAtMiAgIDMgIC0+ICctNScKKworZHFzdWIwMjEgc3VidHJhY3QgIDAgIC0wICAtPiAnMCcKK2Rxc3ViMDIyIHN1YnRyYWN0ICAxICAtMSAgLT4gJzInCitkcXN1YjAyMyBzdWJ0cmFjdCAgMSAgLTIgIC0+ICczJworZHFzdWIwMjQgc3VidHJhY3QgIDIgIC0xICAtPiAnMycKK2Rxc3ViMDI1IHN1YnRyYWN0ICAyICAtMiAgLT4gJzQnCitkcXN1YjAyNiBzdWJ0cmFjdCAgMyAgLTIgIC0+ICc1JworZHFzdWIwMjcgc3VidHJhY3QgIDIgIC0zICAtPiAnNScKKworZHFzdWIwMzAgc3VidHJhY3QgIDExICAxICAtPiAxMAorZHFzdWIwMzEgc3VidHJhY3QgIDEwICAxICAtPiAgOQorZHFzdWIwMzIgc3VidHJhY3QgIDkgICAxICAtPiAgOAorZHFzdWIwMzMgc3VidHJhY3QgIDEgICAxICAtPiAgMAorZHFzdWIwMzQgc3VidHJhY3QgIDAgICAxICAtPiAtMQorZHFzdWIwMzUgc3VidHJhY3QgLTEgICAxICAtPiAtMgorZHFzdWIwMzYgc3VidHJhY3QgLTkgICAxICAtPiAtMTAKK2Rxc3ViMDM3IHN1YnRyYWN0IC0xMCAgMSAgLT4gLTExCitkcXN1YjAzOCBzdWJ0cmFjdCAtMTEgIDEgIC0+IC0xMgorCitkcXN1YjA0MCBzdWJ0cmFjdCAnNS43NScgJzMuMycgIC0+ICcyLjQ1JworZHFzdWIwNDEgc3VidHJhY3QgJzUnICAgICctMycgICAtPiAnOCcKK2Rxc3ViMDQyIHN1YnRyYWN0ICctNScgICAnLTMnICAgLT4gJy0yJworZHFzdWIwNDMgc3VidHJhY3QgJy03JyAgICcyLjUnICAtPiAnLTkuNScKK2Rxc3ViMDQ0IHN1YnRyYWN0ICcwLjcnICAnMC4zJyAgLT4gJzAuNCcKK2Rxc3ViMDQ1IHN1YnRyYWN0ICcxLjMnICAnMC4zJyAgLT4gJzEuMCcKK2Rxc3ViMDQ2IHN1YnRyYWN0ICcxLjI1JyAnMS4yNScgLT4gJzAuMDAnCisKK2Rxc3ViMDUwIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCitkcXN1YjA1MSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwODknIC0+ICcwLjIzNDU2NzAwJworCitkcXN1YjA2MCBzdWJ0cmFjdCAnNzAnICAgICcxMDAwMGUrMzQnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMDYxIHN1YnRyYWN0ICc3MDAnICAgICcxMDAwMGUrMzQnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMDYyIHN1YnRyYWN0ICc3MDAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSszNycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2MyBzdWJ0cmFjdCAnNzAwMDAnICAgICcxMDAwMGUrMzQnIC0+ICctOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTNFKzM3JyBSb3VuZGVkCitkcXN1YjA2NCBzdWJ0cmFjdCAnNzAwMDAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMwRSszNycgUm91bmRlZAorICAtLSBzeW1tZXRyeToKK2Rxc3ViMDY1IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2NiBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMDY3IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzM3JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMDY4IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzRSszNycgUm91bmRlZAorZHFzdWIwNjkgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMwRSszNycgUm91bmRlZAorCisgIC0tIHNvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0cworZHFzdWIwOTAgc3VidHJhY3QgJzAwLjAnICAgICcwLjAnICAtPiAnMC4wJworZHFzdWIwOTEgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcKK2Rxc3ViMDkyIHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCitkcXN1YjA5MyBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJworZHFzdWIwOTQgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcKK2Rxc3ViMDk1IHN1YnRyYWN0ICczJyAgICAnLjMnICAgLT4gJzIuNycKK2Rxc3ViMDk2IHN1YnRyYWN0ICczLicgICAnLjMnICAgLT4gJzIuNycKK2Rxc3ViMDk3IHN1YnRyYWN0ICczLjAnICAnLjMnICAgLT4gJzIuNycKK2Rxc3ViMDk4IHN1YnRyYWN0ICczLjAwJyAnLjMnICAgLT4gJzIuNzAnCitkcXN1YjA5OSBzdWJ0cmFjdCAnMycgICAgJzMnICAgIC0+ICcwJworZHFzdWIxMDAgc3VidHJhY3QgJzMnICAgICcrMycgICAtPiAnMCcKK2Rxc3ViMTAxIHN1YnRyYWN0ICczJyAgICAnLTMnICAgLT4gJzYnCitkcXN1YjEwMiBzdWJ0cmFjdCAnMycgICAgJzAuMycgIC0+ICcyLjcnCitkcXN1YjEwMyBzdWJ0cmFjdCAnMy4nICAgJzAuMycgIC0+ICcyLjcnCitkcXN1YjEwNCBzdWJ0cmFjdCAnMy4wJyAgJzAuMycgIC0+ICcyLjcnCitkcXN1YjEwNSBzdWJ0cmFjdCAnMy4wMCcgJzAuMycgIC0+ICcyLjcwJworZHFzdWIxMDYgc3VidHJhY3QgJzMnICAgICczLjAnICAtPiAnMC4wJworZHFzdWIxMDcgc3VidHJhY3QgJzMnICAgICcrMy4wJyAtPiAnMC4wJworZHFzdWIxMDggc3VidHJhY3QgJzMnICAgICctMy4wJyAtPiAnNi4wJworCistLSB0aGUgYWJvdmUgYWxsIGZyb20gYWRkOyBtYXNzYWdlZCBhbmQgZXh0ZW5kZWQuICBOb3cgc29tZSBuZXcgb25lcy4uLgorLS0gW3BhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGNvbXBhcmlzb25zXQorLS0gTkI6IC14RS04IGJlbG93IHdlcmUgbm9uLWV4cG9uZW50cyBwcmUtQU5TSSBYMy0yNzQsIGFuZCAtMUUtNyBvciAwRS03CistLSB3aXRoIGlucHV0IHJvdW5kaW5nLgorZHFzdWIxMjAgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy01RS04JworZHFzdWIxMjEgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy00RS04JworZHFzdWIxMjIgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0zRS04JworZHFzdWIxMjMgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0yRS04JworZHFzdWIxMjQgc3VidHJhY3QgICcxMC4yMzQ1Njc4OCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0xRS04JworZHFzdWIxMjUgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzBFLTgnCitkcXN1YjEyNiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMUUtOCcKK2Rxc3ViMTI3IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4OScgIC0+ICcyRS04JworZHFzdWIxMjggc3VidHJhY3QgICcxMC4yMzQ1Njc5MicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzNFLTgnCitkcXN1YjEyOSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkzJyAgICAnMTAuMjM0NTY3ODknICAtPiAnNEUtOCcKK2Rxc3ViMTMwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICc1RS04JworZHFzdWIxMzEgc3VidHJhY3QgICcxMC4yMzQ1Njc4MScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy01RS04JworZHFzdWIxMzIgc3VidHJhY3QgICcxMC4yMzQ1Njc4MicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy00RS04JworZHFzdWIxMzMgc3VidHJhY3QgICcxMC4yMzQ1Njc4MycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0zRS04JworZHFzdWIxMzQgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0yRS04JworZHFzdWIxMzUgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0xRS04JworZHFzdWIxMzYgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzBFLTgnCitkcXN1YjEzNyBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg3JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMUUtOCcKK2Rxc3ViMTM4IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcyRS04JworZHFzdWIxMzkgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzNFLTgnCitkcXN1YjE0MCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNEUtOCcKK2Rxc3ViMTQxIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc1RS04JworZHFzdWIxNDIgc3VidHJhY3QgICcxJyAgICAgICAgICAgICAgJzAuOTk5OTk5OTk5JyAgLT4gJzFFLTknCitkcXN1YjE0MyBzdWJ0cmFjdCAgJzAuOTk5OTk5OTk5JyAgICAnMScgICAgICAgICAgICAtPiAnLTFFLTknCitkcXN1YjE0NCBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc4MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnNkUtOCcKK2Rxc3ViMTQ1IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkwJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNEUtOCcKK2Rxc3ViMTQ2IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkxJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNUUtOCcKKworLS0gYWRkaXRpb25hbCBzY2FsZWQgYXJpdGhtZXRpYyB0ZXN0cyBbMC45NyBwcm9ibGVtXQorZHFzdWIxNjAgc3VidHJhY3QgJzAnICAgICAnLjEnICAgICAgLT4gJy0wLjEnCitkcXN1YjE2MSBzdWJ0cmFjdCAnMDAnICAgICcuOTc5ODMnICAtPiAnLTAuOTc5ODMnCitkcXN1YjE2MiBzdWJ0cmFjdCAnMCcgICAgICcuOScgICAgICAtPiAnLTAuOScKK2Rxc3ViMTYzIHN1YnRyYWN0ICcwJyAgICAgJzAuMTAyJyAgIC0+ICctMC4xMDInCitkcXN1YjE2NCBzdWJ0cmFjdCAnMCcgICAgICcuNCcgICAgICAtPiAnLTAuNCcKK2Rxc3ViMTY1IHN1YnRyYWN0ICcwJyAgICAgJy4zMDcnICAgIC0+ICctMC4zMDcnCitkcXN1YjE2NiBzdWJ0cmFjdCAnMCcgICAgICcuNDM4MjInICAtPiAnLTAuNDM4MjInCitkcXN1YjE2NyBzdWJ0cmFjdCAnMCcgICAgICcuOTExJyAgICAtPiAnLTAuOTExJworZHFzdWIxNjggc3VidHJhY3QgJy4wJyAgICAnLjAyJyAgICAgLT4gJy0wLjAyJworZHFzdWIxNjkgc3VidHJhY3QgJzAwJyAgICAnLjM5MicgICAgLT4gJy0wLjM5MicKK2Rxc3ViMTcwIHN1YnRyYWN0ICcwJyAgICAgJy4yNicgICAgIC0+ICctMC4yNicKK2Rxc3ViMTcxIHN1YnRyYWN0ICcwJyAgICAgJzAuNTEnICAgIC0+ICctMC41MScKK2Rxc3ViMTcyIHN1YnRyYWN0ICcwJyAgICAgJy4yMjM0JyAgIC0+ICctMC4yMjM0JworZHFzdWIxNzMgc3VidHJhY3QgJzAnICAgICAnLjInICAgICAgLT4gJy0wLjInCitkcXN1YjE3NCBzdWJ0cmFjdCAnLjAnICAgICcuMDAwOCcgICAtPiAnLTAuMDAwOCcKKy0tIDAuIG9uIGxlZnQKK2Rxc3ViMTgwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCitkcXN1YjE4MSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycKK2Rxc3ViMTgyIHN1YnRyYWN0ICcwLjAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCitkcXN1YjE4MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCitkcXN1YjE4NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uNCcgICAgICAtPiAnMC40JworZHFzdWIxODUgc3VidHJhY3QgJzAuMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3JworZHFzdWIxODYgc3VidHJhY3QgJzAuMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCitkcXN1YjE4NyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnCitkcXN1YjE4OCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDInICAgICAtPiAnMC4wMicKK2Rxc3ViMTg5IHN1YnRyYWN0ICcwLjAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKK2Rxc3ViMTkwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2JworZHFzdWIxOTEgc3VidHJhY3QgJzAuMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCitkcXN1YjE5MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0JworZHFzdWIxOTMgc3VidHJhY3QgJzAuMCcgICAgICctLjInICAgICAgLT4gJzAuMicKK2Rxc3ViMTk0IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCistLSBuZWdhdGl2ZXMgb2Ygc2FtZQorZHFzdWIyMDAgc3VidHJhY3QgJzAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCitkcXN1YjIwMSBzdWJ0cmFjdCAnMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCitkcXN1YjIwMiBzdWJ0cmFjdCAnMCcgICAgICctLjknICAgICAgLT4gJzAuOScKK2Rxc3ViMjAzIHN1YnRyYWN0ICcwJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCitkcXN1YjIwNCBzdWJ0cmFjdCAnMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKK2Rxc3ViMjA1IHN1YnRyYWN0ICcwJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnCitkcXN1YjIwNiBzdWJ0cmFjdCAnMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCitkcXN1YjIwNyBzdWJ0cmFjdCAnMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJworZHFzdWIyMDggc3VidHJhY3QgJy4wJyAgICAnLS4wMicgICAgIC0+ICcwLjAyJworZHFzdWIyMDkgc3VidHJhY3QgJzAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKK2Rxc3ViMjEwIHN1YnRyYWN0ICcwJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKK2Rxc3ViMjExIHN1YnRyYWN0ICcwJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScKK2Rxc3ViMjEyIHN1YnRyYWN0ICcwJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0JworZHFzdWIyMTMgc3VidHJhY3QgJzAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCitkcXN1YjIxNCBzdWJ0cmFjdCAnLjAnICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcKKworLS0gbW9yZSBmaXhlZCwgTEhTIHN3YXBzIFtyZWFsbHkgdGhlIHNhbWUgYXMgdGVzdGNhc2VzIHVuZGVyIGFkZF0KK2Rxc3ViMjIwIHN1YnRyYWN0ICctNTYyNjdFLTEyJyAwICAtPiAnLTUuNjI2N0UtOCcKK2Rxc3ViMjIxIHN1YnRyYWN0ICctNTYyNjdFLTExJyAwICAtPiAnLTUuNjI2N0UtNycKK2Rxc3ViMjIyIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAwICAtPiAnLTAuMDAwMDA1NjI2NycKK2Rxc3ViMjIzIHN1YnRyYWN0ICctNTYyNjdFLTknICAwICAtPiAnLTAuMDAwMDU2MjY3JworZHFzdWIyMjQgc3VidHJhY3QgJy01NjI2N0UtOCcgIDAgIC0+ICctMC4wMDA1NjI2NycKK2Rxc3ViMjI1IHN1YnRyYWN0ICctNTYyNjdFLTcnICAwICAtPiAnLTAuMDA1NjI2NycKK2Rxc3ViMjI2IHN1YnRyYWN0ICctNTYyNjdFLTYnICAwICAtPiAnLTAuMDU2MjY3JworZHFzdWIyMjcgc3VidHJhY3QgJy01NjI2N0UtNScgIDAgIC0+ICctMC41NjI2NycKK2Rxc3ViMjI4IHN1YnRyYWN0ICctNTYyNjdFLTInICAwICAtPiAnLTU2Mi42NycKK2Rxc3ViMjI5IHN1YnRyYWN0ICctNTYyNjdFLTEnICAwICAtPiAnLTU2MjYuNycKK2Rxc3ViMjMwIHN1YnRyYWN0ICctNTYyNjdFLTAnICAwICAtPiAnLTU2MjY3JworLS0gc3ltbWV0cnkgLi4uCitkcXN1YjI0MCBzdWJ0cmFjdCAwICctNTYyNjdFLTEyJyAgLT4gJzUuNjI2N0UtOCcKK2Rxc3ViMjQxIHN1YnRyYWN0IDAgJy01NjI2N0UtMTEnICAtPiAnNS42MjY3RS03JworZHFzdWIyNDIgc3VidHJhY3QgMCAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnCitkcXN1YjI0MyBzdWJ0cmFjdCAwICctNTYyNjdFLTknICAgLT4gJzAuMDAwMDU2MjY3JworZHFzdWIyNDQgc3VidHJhY3QgMCAnLTU2MjY3RS04JyAgIC0+ICcwLjAwMDU2MjY3JworZHFzdWIyNDUgc3VidHJhY3QgMCAnLTU2MjY3RS03JyAgIC0+ICcwLjAwNTYyNjcnCitkcXN1YjI0NiBzdWJ0cmFjdCAwICctNTYyNjdFLTYnICAgLT4gJzAuMDU2MjY3JworZHFzdWIyNDcgc3VidHJhY3QgMCAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3JworZHFzdWIyNDggc3VidHJhY3QgMCAnLTU2MjY3RS0yJyAgIC0+ICc1NjIuNjcnCitkcXN1YjI0OSBzdWJ0cmFjdCAwICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKK2Rxc3ViMjUwIHN1YnRyYWN0IDAgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCisKKy0tIG5vdyBzb21lIG1vcmUgZnJvbSB0aGUgJ25ldycgYWRkCitkcXN1YjMwMSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScKK2Rxc3ViMzAyIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcwLjIzNDU2Nzc4JworCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2Rxc3ViMzIxIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZHFzdWIzMjIgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTcnCitkcXN1YjMyMyBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzAuOTk5NicKK2Rxc3ViMzI0IHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMC45OTk1JworZHFzdWIzMjUgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAwJyAtPiAnMC45OTk4JworZHFzdWIzMjYgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAxJyAtPiAnMC45OTk5JworZHFzdWIzMjcgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAyJyAtPiAnMS4wMDAwJworZHFzdWIzMjggc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAzJyAtPiAnMS4wMDAxJworCistLSBpbnRlcm5hbCBib3VuZGFyaWVzCitkcXN1YjM0NiBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNycgICAtPiAnOTk5OTk5OTk5OTk5MycKK2Rxc3ViMzQ3IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MCcgICAtPiAnOTk5OTk5OTk5OTkzMCcKK2Rxc3ViMzQ4IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAnICAgLT4gJzk5OTk5OTk5OTkzMDAnCitkcXN1YjM0OSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMCcgICAtPiAnOTk5OTk5OTk5MzAwMCcKK2Rxc3ViMzUwIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMCcgICAtPiAnOTk5OTk5OTkzMDAwMCcKK2Rxc3ViMzUxIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMDAnICAgLT4gJzk5OTk5OTkzMDAwMDAnCitkcXN1YjM1MiBzdWJ0cmFjdCAnNycgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTk5MycKK2Rxc3ViMzUzIHN1YnRyYWN0ICc3MCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTkzMCcKK2Rxc3ViMzU0IHN1YnRyYWN0ICc3MDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTkzMDAnCitkcXN1YjM1NSBzdWJ0cmFjdCAnNzAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5MzAwMCcKK2Rxc3ViMzU2IHN1YnRyYWN0ICc3MDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTkzMDAwMCcKK2Rxc3ViMzU3IHN1YnRyYWN0ICc3MDAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTkzMDAwMDAnCisKKy0tIHplcm8gcHJlc2VydmF0aW9uCitkcXN1YjM2MSBzdWJ0cmFjdCAxICcwLjAwMDEnIC0+ICcwLjk5OTknCitkcXN1YjM2MiBzdWJ0cmFjdCAxICcwLjAwMDAxJyAtPiAnMC45OTk5OScKK2Rxc3ViMzYzIHN1YnRyYWN0IDEgJzAuMDAwMDAxJyAtPiAnMC45OTk5OTknCitkcXN1YjM2NCBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcXN1YjM2NSBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZHFzdWIzNjYgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2Rxc3ViMzcwIHN1YnRyYWN0IDEgIDAgIC0+IDEKK2Rxc3ViMzcxIHN1YnRyYWN0IDEgMC4gIC0+IDEKK2Rxc3ViMzcyIHN1YnRyYWN0IDEgIC4wIC0+IDEuMAorZHFzdWIzNzMgc3VidHJhY3QgMSAwLjAgLT4gMS4wCitkcXN1YjM3NCBzdWJ0cmFjdCAgMCAgMSAtPiAtMQorZHFzdWIzNzUgc3VidHJhY3QgMC4gIDEgLT4gLTEKK2Rxc3ViMzc2IHN1YnRyYWN0ICAuMCAxIC0+IC0xLjAKK2Rxc3ViMzc3IHN1YnRyYWN0IDAuMCAxIC0+IC0xLjAKKworLS0gbGVhZGluZyAwIGRpZ2l0IGJlZm9yZSByb3VuZAorZHFzdWI5MTAgc3VidHJhY3QgLTEwMzUxOTM2MiAtNTE4OTc5NTUuMyAtPiAtNTE2MjE0MDYuNworZHFzdWI5MTEgc3VidHJhY3QgMTU5NTc5LjQ0NCA4OTgyNy41MjI5IC0+IDY5NzUxLjkyMTEKKworZHFzdWI5MjAgc3VidHJhY3QgMzMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gMjk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcXN1YjkyMSBzdWJ0cmFjdCAzMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NSAtPiAzMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViOTIyIHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY1IC0+ICA5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQorZHFzdWI5MjMgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjQgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcXN1YjkyNCBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU0MCAtPiAxMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiBSb3VuZGVkCitkcXN1YjkyNSBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2MCAtPiAgOTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc3ViOTI2IHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYxIC0+ICA4OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFzdWI5Mjcgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gIDg5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0CitkcXN1YjkyOCBzdWJ0cmFjdCAxMDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA5MS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NiAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2Rxc3ViOTI5IHN1YnRyYWN0IDEwMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDk5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+ICAgMS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NAorCistLSBtb3JlIExIUyBzd2FwcyBbd2VyZSBmaXhlZF0KK2Rxc3ViMzkwIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZHFzdWIzOTEgc3VidHJhY3QgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2Rxc3ViMzkyIHN1YnRyYWN0ICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2Rxc3ViMzkzIHN1YnRyYWN0ICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZHFzdWIzOTQgc3VidHJhY3QgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkcXN1YjM5NSBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2Rxc3ViMzk2IHN1YnRyYWN0ICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZHFzdWIzOTcgc3VidHJhY3QgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2Rxc3ViMzk4IHN1YnRyYWN0ICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitkcXN1YjM5OSBzdWJ0cmFjdCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkcXN1YjQwMCBzdWJ0cmFjdCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZHFzdWI0MDEgc3VidHJhY3QgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZHFzdWI0MDIgc3VidHJhY3QgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkcXN1YjQwMyBzdWJ0cmFjdCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2Rxc3ViNDA0IHN1YnRyYWN0ICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2Rxc3ViNDA1IHN1YnRyYWN0ICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkcXN1YjQwNiBzdWJ0cmFjdCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2Rxc3ViNDA3IHN1YnRyYWN0ICctNUUzMycgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2Rxc3ViNDA4IHN1YnRyYWN0ICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZAorZHFzdWI0MDkgc3VidHJhY3QgJy01RTM1JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICBSb3VuZGVkCitkcXN1YjQxMCBzdWJ0cmFjdCAnLTVFMzYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgIFJvdW5kZWQKK2Rxc3ViNDExIHN1YnRyYWN0ICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcyBbd2VyZSBmaXhlZF0KK2Rxc3ViNDIwIHN1YnRyYWN0IDAgICctNTYyNjdFLTEwJyAtPiAgJzAuMDAwMDA1NjI2NycKK2Rxc3ViNDIxIHN1YnRyYWN0IDAgICctNTYyNjdFLTYnICAtPiAgJzAuMDU2MjY3JworZHFzdWI0MjIgc3VidHJhY3QgMCAgJy01NjI2N0UtNScgIC0+ICAnMC41NjI2NycKK2Rxc3ViNDIzIHN1YnRyYWN0IDAgICctNTYyNjdFLTQnICAtPiAgJzUuNjI2NycKK2Rxc3ViNDI0IHN1YnRyYWN0IDAgICctNTYyNjdFLTMnICAtPiAgJzU2LjI2NycKK2Rxc3ViNDI1IHN1YnRyYWN0IDAgICctNTYyNjdFLTInICAtPiAgJzU2Mi42NycKK2Rxc3ViNDI2IHN1YnRyYWN0IDAgICctNTYyNjdFLTEnICAtPiAgJzU2MjYuNycKK2Rxc3ViNDI3IHN1YnRyYWN0IDAgICctNTYyNjdFLTAnICAtPiAgJzU2MjY3JworZHFzdWI0Mjggc3VidHJhY3QgMCAgJy01RS0xMCcgICAgIC0+ICAnNUUtMTAnCitkcXN1YjQyOSBzdWJ0cmFjdCAwICAnLTVFLTcnICAgICAgLT4gICc1RS03JworZHFzdWI0MzAgc3VidHJhY3QgMCAgJy01RS02JyAgICAgIC0+ICAnMC4wMDAwMDUnCitkcXN1YjQzMSBzdWJ0cmFjdCAwICAnLTVFLTUnICAgICAgLT4gICcwLjAwMDA1JworZHFzdWI0MzIgc3VidHJhY3QgMCAgJy01RS00JyAgICAgIC0+ICAnMC4wMDA1JworZHFzdWI0MzMgc3VidHJhY3QgMCAgJy01RS0xJyAgICAgIC0+ICAnMC41JworZHFzdWI0MzQgc3VidHJhY3QgMCAgJy01RTAnICAgICAgIC0+ICAnNScKK2Rxc3ViNDM1IHN1YnRyYWN0IDAgICctNUUxJyAgICAgICAtPiAgJzUwJworZHFzdWI0MzYgc3VidHJhY3QgMCAgJy01RTUnICAgICAgIC0+ICAnNTAwMDAwJworZHFzdWI0Mzcgc3VidHJhY3QgMCAgJy01RTMzJyAgICAgIC0+ICAnNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2Rxc3ViNDM4IHN1YnRyYWN0IDAgICctNUUzNCcgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkCitkcXN1YjQzOSBzdWJ0cmFjdCAwICAnLTVFMzUnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICAgUm91bmRlZAorZHFzdWI0NDAgc3VidHJhY3QgMCAgJy01RTM2JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgIFJvdW5kZWQKK2Rxc3ViNDQxIHN1YnRyYWN0IDAgICctNUUxMDAnICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2Rxc3ViNDYxIHN1YnRyYWN0ICcxRSsxNicgJzEnICAgICAgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScKK2Rxc3ViNDYyIHN1YnRyYWN0ICcxRSsxMicgJy0xLjExMScgICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnCitkcXN1YjQ2MyBzdWJ0cmFjdCAnMS4xMTEnICAnLTFFKzEyJyAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJworZHFzdWI0NjQgc3VidHJhY3QgJy0xJyAgICAnLTFFKzE2JyAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5JworZHFzdWI0NjUgc3VidHJhY3QgJzdFKzE1JyAnMScgICAgICAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5JworZHFzdWI0NjYgc3VidHJhY3QgJzdFKzEyJyAnLTEuMTExJyAgIC0+ICc3MDAwMDAwMDAwMDAxLjExMScKK2Rxc3ViNDY3IHN1YnRyYWN0ICcxLjExMScgICctN0UrMTInICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnCitkcXN1YjQ2OCBzdWJ0cmFjdCAnLTEnICAgICctN0UrMTUnICAgLT4gJzY5OTk5OTk5OTk5OTk5OTknCisKKy0tICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDUKK2Rxc3ViNDcwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDcxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDcyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDczIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDc0IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDc1IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDc2IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNDc3IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkcXN1YjQ3OCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcXN1YjQ3OSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnCitkcXN1YjQ4MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcnCitkcXN1YjQ4MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYnCitkcXN1YjQ4MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUnCitkcXN1YjQ4MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQnCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkcXN1YjUwMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNTAxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTAyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTAzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTA5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTEwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTExIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTEyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTEzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI1MTcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1MTggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1MTkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcXN1YjUyMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNTIxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTIyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTIzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTI5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTMwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTMxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTMyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTMzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI1Mzcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1Mzggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1Mzkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2Rxc3ViNTQwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTQxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTQyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2Rxc3ViNTUwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JworZHFzdWI1NTEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NTkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1NjYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnCitkcXN1YjU2NyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjU2OCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjU2OSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5Li4uCityb3VuZGluZzogaGFsZl91cAorZHFzdWI2MDAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JworZHFzdWI2MDEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjAyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjA1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjA4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjExIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjE0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI2MTcgc3VidHJhY3QgMS4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjE4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcXN1YjYyMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknCitkcXN1YjYyMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MjIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjIzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MjUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjI2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2Mjggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjI5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjMyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjM1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnCitkcXN1YjYzNyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2Mzggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjM5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZHFzdWI2NDAgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjQxIHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY0MiBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZHFzdWI2NTAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JworZHFzdWI2NTEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjUyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1MyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjU1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1NiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjU4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1OSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjYxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2MiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjY0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2NSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI2Njcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjY4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2OSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvdHMgb2YgbGVhZGluZyB6ZXJvcyBpbiBpbnRlcm1lZGlhdGUgcmVzdWx0LCBhbmQgc2hvd2luZyBlZmZlY3RzIG9mCistLSBpbnB1dCByb3VuZGluZyB3b3VsZCBoYXZlIGFmZmVjdGVkIHRoZSBmb2xsb3dpbmcKK3JvdW5kaW5nOiBoYWxmX3VwCitkcXN1YjY3MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45CitkcXN1YjY3MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCitkcXN1YjY3MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQorZHFzdWI2NzMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKK2Rxc3ViNjc0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45CisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2Rxc3ViNjgwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKK2Rxc3ViNjgxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKK2Rxc3ViNjgyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCitkcXN1YjY4MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQorZHFzdWI2ODQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKKworZHFzdWI2ODUgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjEnIC0+IDAuOQorZHFzdWI2ODYgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjknIC0+IDAuMQorZHFzdWI2ODcgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjEnIC0+IC0wLjEKK2Rxc3ViNjg4IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC41JyAtPiAtMC41CitkcXN1YjY4OSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguOScgLT4gLTAuOQorCityb3VuZGluZzogZG93bgorZHFzdWI2OTAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQorZHFzdWI2OTEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQorZHFzdWI2OTIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKK2Rxc3ViNjkzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41CitkcXN1YjY5NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQorCistLSBTcGVjaWFscworZHFzdWI3ODAgc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODEgc3VidHJhY3QgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODIgc3VidHJhY3QgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODMgc3VidHJhY3QgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODQgc3VidHJhY3QgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODUgc3VidHJhY3QgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODcgc3VidHJhY3QgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODggc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3ODkgc3VidHJhY3QgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3OTAgc3VidHJhY3QgIDAgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3OTEgc3VidHJhY3QgIDEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFzdWI3OTIgc3VidHJhY3QgIDEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorCitkcXN1YjgwMCBzdWJ0cmFjdCAgSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODAxIHN1YnRyYWN0ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2Rxc3ViODAyIHN1YnRyYWN0ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2Rxc3ViODAzIHN1YnRyYWN0ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA0IHN1YnRyYWN0ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA1IHN1YnRyYWN0ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA2IHN1YnRyYWN0ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2Rxc3ViODA3IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA4IHN1YnRyYWN0IC0xMDAwIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODA5IHN1YnRyYWN0IC1JbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4MTAgc3VidHJhY3QgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTEgc3VidHJhY3QgLTAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTIgc3VidHJhY3QgIDAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTMgc3VidHJhY3QgIDEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTQgc3VidHJhY3QgIDEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFzdWI4MTUgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCitkcXN1YjgyMSBzdWJ0cmFjdCAgTmFOICAgSW5mICAgLT4gIE5hTgorZHFzdWI4MjIgc3VidHJhY3QgLU5hTiAgIDEwMDAgIC0+IC1OYU4KK2Rxc3ViODIzIHN1YnRyYWN0ICBOYU4gICAxICAgICAtPiAgTmFOCitkcXN1YjgyNCBzdWJ0cmFjdCAgTmFOICAgMCAgICAgLT4gIE5hTgorZHFzdWI4MjUgc3VidHJhY3QgIE5hTiAgLTAgICAgIC0+ICBOYU4KK2Rxc3ViODI2IHN1YnRyYWN0ICBOYU4gIC0xICAgICAtPiAgTmFOCitkcXN1YjgyNyBzdWJ0cmFjdCAgTmFOICAtMTAwMCAgLT4gIE5hTgorZHFzdWI4Mjggc3VidHJhY3QgIE5hTiAgLUluZiAgIC0+ICBOYU4KK2Rxc3ViODI5IHN1YnRyYWN0IC1OYU4gICBOYU4gICAtPiAtTmFOCitkcXN1YjgzMCBzdWJ0cmFjdCAtSW5mICAgTmFOICAgLT4gIE5hTgorZHFzdWI4MzEgc3VidHJhY3QgLTEwMDAgIE5hTiAgIC0+ICBOYU4KK2Rxc3ViODMyIHN1YnRyYWN0IC0xICAgICBOYU4gICAtPiAgTmFOCitkcXN1YjgzMyBzdWJ0cmFjdCAtMCAgICAgTmFOICAgLT4gIE5hTgorZHFzdWI4MzQgc3VidHJhY3QgIDAgICAgIE5hTiAgIC0+ICBOYU4KK2Rxc3ViODM1IHN1YnRyYWN0ICAxICAgICBOYU4gICAtPiAgTmFOCitkcXN1YjgzNiBzdWJ0cmFjdCAgMTAwMCAtTmFOICAgLT4gLU5hTgorZHFzdWI4Mzcgc3VidHJhY3QgIEluZiAgIE5hTiAgIC0+ICBOYU4KKworZHFzdWI4NDEgc3VidHJhY3QgIHNOYU4gIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0MiBzdWJ0cmFjdCAtc05hTiAgMTAwMCAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQzIHN1YnRyYWN0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDQgc3VidHJhY3QgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0NSBzdWJ0cmFjdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQ2IHN1YnRyYWN0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDcgc3VidHJhY3QgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0OCBzdWJ0cmFjdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQ5IHN1YnRyYWN0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTAgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1MSBzdWJ0cmFjdCAtSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODUyIHN1YnRyYWN0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTMgc3VidHJhY3QgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1NCBzdWJ0cmFjdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODU1IHN1YnRyYWN0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTYgc3VidHJhY3QgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1NyBzdWJ0cmFjdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODU4IHN1YnRyYWN0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTkgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rxc3ViODYxIHN1YnRyYWN0ICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xCitkcXN1Yjg2MiBzdWJ0cmFjdCAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMgorZHFzdWI4NjMgc3VidHJhY3QgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK2Rxc3ViODY0IHN1YnRyYWN0ICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40CitkcXN1Yjg2NSBzdWJ0cmFjdCAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQorZHFzdWI4NjYgc3VidHJhY3QgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitkcXN1Yjg2NyBzdWJ0cmFjdCAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODEKK2Rxc3ViODY4IHN1YnRyYWN0ICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQorZHFzdWI4Njkgc3VidHJhY3QgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorZHFzdWI4NzEgc3VidHJhY3QgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzIgc3VidHJhY3QgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzMgc3VidHJhY3QgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzQgc3VidHJhY3QgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzUgc3VidHJhY3QgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NzYgc3VidHJhY3QgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4Nzcgc3VidHJhY3QgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4Nzggc3VidHJhY3QgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4Nzkgc3VidHJhY3QgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4ODAgc3VidHJhY3QgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4ODEgc3VidHJhY3QgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBlZGdlIGNhc2Ugc3BpbGxzCitkcXN1YjkwMSBzdWJ0cmFjdCAgMi5FLTMgIDEuMDAyICAtPiAtMS4wMDAKK2Rxc3ViOTAyIHN1YnRyYWN0ICAyLjBFLTMgIDEuMDAyICAtPiAtMS4wMDAwCitkcXN1YjkwMyBzdWJ0cmFjdCAgMi4wMEUtMyAgMS4wMDIwICAtPiAtMS4wMDAwMAorZHFzdWI5MDQgc3VidHJhY3QgIDIuMDAwRS0zICAxLjAwMjAwICAtPiAtMS4wMDAwMDAKK2Rxc3ViOTA1IHN1YnRyYWN0ICAyLjAwMDBFLTMgIDEuMDAyMDAwICAtPiAtMS4wMDAwMDAwCitkcXN1YjkwNiBzdWJ0cmFjdCAgMi4wMDAwMEUtMyAgMS4wMDIwMDAwICAtPiAtMS4wMDAwMDAwMAorZHFzdWI5MDcgc3VidHJhY3QgIDIuMDAwMDAwRS0zICAxLjAwMjAwMDAwICAtPiAtMS4wMDAwMDAwMDAKK2Rxc3ViOTA4IHN1YnRyYWN0ICAyLjAwMDAwMDBFLTMgIDEuMDAyMDAwMDAwICAtPiAtMS4wMDAwMDAwMDAwCisKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cyBjb3ZlcmVkIHVuZGVyIEFkZAorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2Rxc3ViMTEyNSAgc3VidHJhY3QgMTMwRS0yICAxMjBFLTIgLT4gMC4xMAorZHFzdWIxMTI2ICBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwCitkcXN1YjExMjcgIHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzAKK2Rxc3ViMTEyOCAgc3VidHJhY3QgMUUyICAgICAxRTQgICAgLT4gLTkuOUUrMworCistLSBOdWxsIHRlc3RzCitkcXN1Yjk5OTAgc3VidHJhY3QgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjk5OTEgc3VidHJhY3QgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxVG9JbnRlZ3JhbC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVRvSW50ZWdyYWwuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDU1ZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVRvSW50ZWdyYWwuZGVjVGVzdApAQCAtMCwwICsxLDI1NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVRvSW50ZWdyYWwuZGVjVGVzdCAtLSByb3VuZCBRdWFkIHRvIGludGVncmFsIHZhbHVlICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHRlc3RzIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uICdyb3VuZC10by1pbnRlZ3JhbAorLS0gdmFsdWUtZXhhY3QnIG9wZXJhdGlvbnMgKGZyb20gSUVFRSA4NTQsIGxhdGVyIG1vZGlmaWVkIGluIDc1NHIpLgorLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcgorLS0gcXVhbnRpemUsIHNvIHRob3NlIGFyZSBhc3N1bWVkIHRvIGhhdmUgYmVlbiB0ZXN0ZWQgZXh0ZW5zaXZlbHkKKy0tIGVsc2V3aGVyZTsgdGhlIHRlc3RzIGhlcmUgYXJlIGZvciBpbnRlZ3JpdHksIHJvdW5kaW5nIG1vZGUsIGV0Yy4KKy0tIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhlIHRlc3QgaGFybmVzcyB3aWxsIHVzZSB0aGVzZSB0ZXN0cyBmb3IgYm90aAorLS0gVG9JbnRlZ3JhbEV4YWN0ICh3aGljaCBkb2VzIHNldCBJbmV4YWN0KSBhbmQgdGhlIGZpeGVkLW5hbWUKKy0tIGZ1bmN0aW9ucyAod2hpY2ggZG8gbm90IHNldCBJbmV4YWN0KS4KKworLS0gTm90ZSB0aGF0IGRlY051bWJlciBpbXBsZW1lbnRzIGFuIGVhcmxpZXIgZGVmaW5pdGlvbiBvZiB0b0ludGVncmFsCistLSB3aGljaCBuZXZlciBzZXRzIEluZXhhY3Q7IHRoZSBkZWNUZXN0IG9wZXJhdG9yIGZvciB0aGF0IGlzIGNhbGxlZAorLS0gJ3RvaW50ZWdyYWwnIGluc3RlYWQgb2YgJ3RvaW50ZWdyYWx4Jy4KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFpbnR4MDAxIHRvaW50ZWdyYWx4ICAgICAgMCAgICAgLT4gIDAKK2RxaW50eDAwMiB0b2ludGVncmFseCAgICAgIDAuMCAgIC0+ICAwCitkcWludHgwMDMgdG9pbnRlZ3JhbHggICAgICAwLjEgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDQgdG9pbnRlZ3JhbHggICAgICAwLjIgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDUgdG9pbnRlZ3JhbHggICAgICAwLjMgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDYgdG9pbnRlZ3JhbHggICAgICAwLjQgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDcgdG9pbnRlZ3JhbHggICAgICAwLjUgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDggdG9pbnRlZ3JhbHggICAgICAwLjYgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMDkgdG9pbnRlZ3JhbHggICAgICAwLjcgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTAgdG9pbnRlZ3JhbHggICAgICAwLjggICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTEgdG9pbnRlZ3JhbHggICAgICAwLjkgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTIgdG9pbnRlZ3JhbHggICAgICAxICAgICAtPiAgMQorZHFpbnR4MDEzIHRvaW50ZWdyYWx4ICAgICAgMS4wICAgLT4gIDEgIFJvdW5kZWQKK2RxaW50eDAxNCB0b2ludGVncmFseCAgICAgIDEuMSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxNSB0b2ludGVncmFseCAgICAgIDEuMiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxNiB0b2ludGVncmFseCAgICAgIDEuMyAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxNyB0b2ludGVncmFseCAgICAgIDEuNCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxOCB0b2ludGVncmFseCAgICAgIDEuNSAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAxOSB0b2ludGVncmFseCAgICAgIDEuNiAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAyMCB0b2ludGVncmFseCAgICAgIDEuNyAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAyMSB0b2ludGVncmFseCAgICAgIDEuOCAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDAyMiB0b2ludGVncmFseCAgICAgIDEuOSAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5lZ2F0aXZlcworZHFpbnR4MDMxIHRvaW50ZWdyYWx4ICAgICAtMCAgICAgLT4gLTAKK2RxaW50eDAzMiB0b2ludGVncmFseCAgICAgLTAuMCAgIC0+IC0wCitkcWludHgwMzMgdG9pbnRlZ3JhbHggICAgIC0wLjEgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzQgdG9pbnRlZ3JhbHggICAgIC0wLjIgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzUgdG9pbnRlZ3JhbHggICAgIC0wLjMgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzYgdG9pbnRlZ3JhbHggICAgIC0wLjQgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzcgdG9pbnRlZ3JhbHggICAgIC0wLjUgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzggdG9pbnRlZ3JhbHggICAgIC0wLjYgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMzkgdG9pbnRlZ3JhbHggICAgIC0wLjcgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDAgdG9pbnRlZ3JhbHggICAgIC0wLjggICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDEgdG9pbnRlZ3JhbHggICAgIC0wLjkgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDIgdG9pbnRlZ3JhbHggICAgIC0xICAgICAtPiAtMQorZHFpbnR4MDQzIHRvaW50ZWdyYWx4ICAgICAtMS4wICAgLT4gLTEgIFJvdW5kZWQKK2RxaW50eDA0NCB0b2ludGVncmFseCAgICAgLTEuMSAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0NSB0b2ludGVncmFseCAgICAgLTEuMiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0NiB0b2ludGVncmFseCAgICAgLTEuMyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0NyB0b2ludGVncmFseCAgICAgLTEuNCAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0OCB0b2ludGVncmFseCAgICAgLTEuNSAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA0OSB0b2ludGVncmFseCAgICAgLTEuNiAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA1MCB0b2ludGVncmFseCAgICAgLTEuNyAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA1MSB0b2ludGVncmFseCAgICAgLTEuOCAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA1MiB0b2ludGVncmFseCAgICAgLTEuOSAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgdHdvIHdvdWxkIGJlIE5hTiB1c2luZyBxdWFudGl6ZSh4LCAwKQorZHFpbnR4MDUzIHRvaW50ZWdyYWx4ICAgIDEwRSs2MCAgLT4gMS4wRSs2MQorZHFpbnR4MDU0IHRvaW50ZWdyYWx4ICAgLTEwRSs2MCAgLT4gLTEuMEUrNjEKKworLS0gbnVtYmVycyBhcm91bmQgcHJlY2lzaW9uCitkcWludHgwNjAgdG9pbnRlZ3JhbHggJzU2MjY3RS0xNycgICAtPiAnMCcgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA2MSB0b2ludGVncmFseCAnNTYyNjdFLTUnICAgIC0+ICcxJyAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDYyIHRvaW50ZWdyYWx4ICc1NjI2N0UtMicgICAgLT4gJzU2MycgICAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNjMgdG9pbnRlZ3JhbHggJzU2MjY3RS0xJyAgICAtPiAnNTYyNycgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA2NSB0b2ludGVncmFseCAnNTYyNjdFLTAnICAgIC0+ICc1NjI2NycKK2RxaW50eDA2NiB0b2ludGVncmFseCAnNTYyNjdFKzAnICAgIC0+ICc1NjI2NycKK2RxaW50eDA2NyB0b2ludGVncmFseCAnNTYyNjdFKzEnICAgIC0+ICc1LjYyNjdFKzUnCitkcWludHgwNjggdG9pbnRlZ3JhbHggJzU2MjY3RSs5JyAgICAtPiAnNS42MjY3RSsxMycKK2RxaW50eDA2OSB0b2ludGVncmFseCAnNTYyNjdFKzEwJyAgIC0+ICc1LjYyNjdFKzE0JworZHFpbnR4MDcwIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTEnICAgLT4gJzUuNjI2N0UrMTUnCitkcWludHgwNzEgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMicgICAtPiAnNS42MjY3RSsxNicKK2RxaW50eDA3MiB0b2ludGVncmFseCAnNTYyNjdFKzEzJyAgIC0+ICc1LjYyNjdFKzE3JworZHFpbnR4MDczIHRvaW50ZWdyYWx4ICcxLjIzRSs5NicgICAgLT4gJzEuMjNFKzk2JworZHFpbnR4MDc0IHRvaW50ZWdyYWx4ICcxLjIzRSs2MTQ0JyAgLT4gIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKKworZHFpbnR4MDgwIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEwJyAgLT4gJy0wJyAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDgxIHRvaW50ZWdyYWx4ICctNTYyNjdFLTUnICAgLT4gJy0xJyAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDgyIHRvaW50ZWdyYWx4ICctNTYyNjdFLTInICAgLT4gJy01NjMnICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDgzIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEnICAgLT4gJy01NjI3JyAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDg1IHRvaW50ZWdyYWx4ICctNTYyNjdFLTAnICAgLT4gJy01NjI2NycKK2RxaW50eDA4NiB0b2ludGVncmFseCAnLTU2MjY3RSswJyAgIC0+ICctNTYyNjcnCitkcWludHgwODcgdG9pbnRlZ3JhbHggJy01NjI2N0UrMScgICAtPiAnLTUuNjI2N0UrNScKK2RxaW50eDA4OCB0b2ludGVncmFseCAnLTU2MjY3RSs5JyAgIC0+ICctNS42MjY3RSsxMycKK2RxaW50eDA4OSB0b2ludGVncmFseCAnLTU2MjY3RSsxMCcgIC0+ICctNS42MjY3RSsxNCcKK2RxaW50eDA5MCB0b2ludGVncmFseCAnLTU2MjY3RSsxMScgIC0+ICctNS42MjY3RSsxNScKK2RxaW50eDA5MSB0b2ludGVncmFseCAnLTU2MjY3RSsxMicgIC0+ICctNS42MjY3RSsxNicKK2RxaW50eDA5MiB0b2ludGVncmFseCAnLTU2MjY3RSsxMycgIC0+ICctNS42MjY3RSsxNycKK2RxaW50eDA5MyB0b2ludGVncmFseCAnLTEuMjNFKzk2JyAgIC0+ICctMS4yM0UrOTYnCitkcWludHgwOTQgdG9pbnRlZ3JhbHggJy0xLjIzRSs2MTQ0JyAtPiAjYzdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorCistLSBzdWJub3JtYWwgaW5wdXRzCitkcWludHgxMDAgdG9pbnRlZ3JhbHggICAgICAgIDFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDEwMSB0b2ludGVncmFseCAgICAgIDAuMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MTAyIHRvaW50ZWdyYWx4ICAgICAwLjAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgxMDMgdG9pbnRlZ3JhbHggICAgICAgIDBFLTI5OSAtPiAwCisKKy0tIHNwZWNpYWxzIGFuZCB6ZXJvcworZHFpbnR4MTIwIHRvaW50ZWdyYWx4ICdJbmYnICAgICAgIC0+ICBJbmZpbml0eQorZHFpbnR4MTIxIHRvaW50ZWdyYWx4ICctSW5mJyAgICAgIC0+IC1JbmZpbml0eQorZHFpbnR4MTIyIHRvaW50ZWdyYWx4ICAgTmFOICAgICAgIC0+ICBOYU4KK2RxaW50eDEyMyB0b2ludGVncmFseCAgc05hTiAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnR4MTI0IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwCitkcWludHgxMjUgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTAKK2RxaW50eDEyNiB0b2ludGVncmFseCAgICAgMC4wMDAgICAtPiAgMAorZHFpbnR4MTI3IHRvaW50ZWdyYWx4ICAgICAwLjAwICAgIC0+ICAwCitkcWludHgxMjggdG9pbnRlZ3JhbHggICAgIDAuMCAgICAgLT4gIDAKK2RxaW50eDEyOSB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMAorZHFpbnR4MTMwIHRvaW50ZWdyYWx4ICAgICAwRS0zICAgIC0+ICAwCitkcWludHgxMzEgdG9pbnRlZ3JhbHggICAgIDBFLTIgICAgLT4gIDAKK2RxaW50eDEzMiB0b2ludGVncmFseCAgICAgMEUtMSAgICAtPiAgMAorZHFpbnR4MTMzIHRvaW50ZWdyYWx4ICAgICAwRS0wICAgIC0+ICAwCitkcWludHgxMzQgdG9pbnRlZ3JhbHggICAgIDBFKzEgICAgLT4gIDBFKzEKK2RxaW50eDEzNSB0b2ludGVncmFseCAgICAgMEUrMiAgICAtPiAgMEUrMgorZHFpbnR4MTM2IHRvaW50ZWdyYWx4ICAgICAwRSszICAgIC0+ICAwRSszCitkcWludHgxMzcgdG9pbnRlZ3JhbHggICAgIDBFKzQgICAgLT4gIDBFKzQKK2RxaW50eDEzOCB0b2ludGVncmFseCAgICAgMEUrNSAgICAtPiAgMEUrNQorZHFpbnR4MTM5IHRvaW50ZWdyYWx4ICAgIC0wLjAwMCAgIC0+IC0wCitkcWludHgxNDAgdG9pbnRlZ3JhbHggICAgLTAuMDAgICAgLT4gLTAKK2RxaW50eDE0MSB0b2ludGVncmFseCAgICAtMC4wICAgICAtPiAtMAorZHFpbnR4MTQyIHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCitkcWludHgxNDMgdG9pbnRlZ3JhbHggICAgLTBFLTMgICAgLT4gLTAKK2RxaW50eDE0NCB0b2ludGVncmFseCAgICAtMEUtMiAgICAtPiAtMAorZHFpbnR4MTQ1IHRvaW50ZWdyYWx4ICAgIC0wRS0xICAgIC0+IC0wCitkcWludHgxNDYgdG9pbnRlZ3JhbHggICAgLTBFLTAgICAgLT4gLTAKK2RxaW50eDE0NyB0b2ludGVncmFseCAgICAtMEUrMSAgICAtPiAtMEUrMQorZHFpbnR4MTQ4IHRvaW50ZWdyYWx4ICAgIC0wRSsyICAgIC0+IC0wRSsyCitkcWludHgxNDkgdG9pbnRlZ3JhbHggICAgLTBFKzMgICAgLT4gLTBFKzMKK2RxaW50eDE1MCB0b2ludGVncmFseCAgICAtMEUrNCAgICAtPiAtMEUrNAorZHFpbnR4MTUxIHRvaW50ZWdyYWx4ICAgIC0wRSs1ICAgIC0+IC0wRSs1CistLSBwcm9wYWdhdGluZyBOYU5zCitkcWludHgxNTIgdG9pbnRlZ3JhbHggICBOYU44MDggICAgLT4gIE5hTjgwOAorZHFpbnR4MTUzIHRvaW50ZWdyYWx4ICBzTmFOMDgwICAgIC0+ICBOYU44MCAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW50eDE1NCB0b2ludGVncmFseCAgLU5hTjgwOCAgICAtPiAtTmFOODA4CitkcWludHgxNTUgdG9pbnRlZ3JhbHggLXNOYU4wODAgICAgLT4gLU5hTjgwICBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnR4MTU2IHRvaW50ZWdyYWx4ICAtTmFOICAgICAgIC0+IC1OYU4KK2RxaW50eDE1NyB0b2ludGVncmFseCAtc05hTiAgICAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGV4YW1wbGVzCityb3VuZGluZzogICAgaGFsZl91cAorZHFpbnR4MjAwIHRvaW50ZWdyYWx4ICAgICAyLjEgICAgLT4gMiAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjAxIHRvaW50ZWdyYWx4ICAgMTAwICAgICAgLT4gMTAwCitkcWludHgyMDIgdG9pbnRlZ3JhbHggICAxMDAuMCAgICAtPiAxMDAgICAgICAgICAgUm91bmRlZAorZHFpbnR4MjAzIHRvaW50ZWdyYWx4ICAgMTAxLjUgICAgLT4gMTAyICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjA0IHRvaW50ZWdyYWx4ICAtMTAxLjUgICAgLT4gLTEwMiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjA1IHRvaW50ZWdyYWx4ICAgMTBFKzUgICAgLT4gMS4wRSs2CitkcWludHgyMDYgdG9pbnRlZ3JhbHggIDcuODlFKzc3ICAtPiA3Ljg5RSs3NworZHFpbnR4MjA3IHRvaW50ZWdyYWx4ICAgLUluZiAgICAgLT4gLUluZmluaXR5CisKKworLS0gYWxsIHJvdW5kaW5nIG1vZGVzCityb3VuZGluZzogICAgaGFsZl9ldmVuCitkcWludHgyMTAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjExIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIxMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMTMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjE0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIxNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX3VwCisKK2RxaW50eDIyMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMjEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjIyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIyMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMjQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjI1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorCitkcWludHgyMzAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjMxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIzMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMzMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjM0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIzNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICB1cAorCitkcWludHgyNDAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjQxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI0MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNDMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjQ0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI0NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBkb3duCisKK2RxaW50eDI1MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNTEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjUyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI1MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNTQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjU1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKworZHFpbnR4MjYwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI2MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNjIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjYzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI2NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNjUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZmxvb3IKKworZHFpbnR4MjcwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI3MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNzIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjczIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI3NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNzUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCistLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucworZHFpbnR4MzAwIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ2ICAtPiAtMjE0NzQ4MzY0NgorZHFpbnR4MzAxIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ3ICAtPiAtMjE0NzQ4MzY0NworZHFpbnR4MzAyIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ4ICAtPiAtMjE0NzQ4MzY0OAorZHFpbnR4MzAzIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ5ICAtPiAtMjE0NzQ4MzY0OQorZHFpbnR4MzA0IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ2ICAtPiAgMjE0NzQ4MzY0NgorZHFpbnR4MzA1IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ3ICAtPiAgMjE0NzQ4MzY0NworZHFpbnR4MzA2IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ4ICAtPiAgMjE0NzQ4MzY0OAorZHFpbnR4MzA3IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ5ICAtPiAgMjE0NzQ4MzY0OQorZHFpbnR4MzA4IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk0ICAtPiAgNDI5NDk2NzI5NAorZHFpbnR4MzA5IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk1ICAtPiAgNDI5NDk2NzI5NQorZHFpbnR4MzEwIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk2ICAtPiAgNDI5NDk2NzI5NgorZHFpbnR4MzExIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk3ICAtPiAgNDI5NDk2NzI5NworCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxWG9yLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxWG9yLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxNmU5ZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFYb3IuZGVjVGVzdApAQCAtMCwwICsxLDQxMCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVhvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIFhPUiBmb3IgZGVjUXVhZHMgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkcXhvcjAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2RxeG9yMDAyIHhvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQorZHF4b3IwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCitkcXhvcjAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDAKK2RxeG9yMDA1IHhvciAgICAgICAgICAxMTAwIDEwMTAgLT4gIDExMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2RxeG9yMDA2IHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RxeG9yMDA3IHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjAwOCB4b3IgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3IwMDkgeG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZHF4b3IwMTAgeG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZHF4b3IwMTEgeG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yMDEyIHhvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjAxMyB4b3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2RxeG9yNjAxIHhvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjAyIHhvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjAzIHhvciAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA0IHhvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA1IHhvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA2IHhvciAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA3IHhvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA4IHhvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjA5IHhvciAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjEwIHhvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjExIHhvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjEyIHhvciAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjEzIHhvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE0IHhvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE1IHhvciAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE2IHhvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE3IHhvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE4IHhvciAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjE5IHhvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjIwIHhvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjIxIHhvciAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAKK2RxeG9yNjIyIHhvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAKK2RxeG9yNjIzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAKK2RxeG9yNjI0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAKK2RxeG9yNjI1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAKK2RxeG9yNjI2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAKK2RxeG9yNjI3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAKK2RxeG9yNjI4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAKK2RxeG9yNjI5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAKK2RxeG9yNjMwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAKK2RxeG9yNjMxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAKK2RxeG9yNjMyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKK2RxeG9yNjMzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKK2RxeG9yNjM0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworZHF4b3I2NDEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NDkgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NTkgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMAorZHF4b3I2NjAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMAorZHF4b3I2NjEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMAorZHF4b3I2NjIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMAorZHF4b3I2NjMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMAorZHF4b3I2NjQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMAorZHF4b3I2NjUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMAorZHF4b3I2NjYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMAorZHF4b3I2NjcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMAorZHF4b3I2NjggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMAorZHF4b3I2NjkgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMAorZHF4b3I2NzAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMAorZHF4b3I2NzEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMAorZHF4b3I2NzIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAorZHF4b3I2NzMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorZHF4b3I2NzQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorZHF4b3I2NzUgeG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHF4b3I2NzYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisKK2RxeG9yMDIxIHhvciAxMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjIgeG9yICAxMTExMTExMTAwMDAwMDAgICAgICAxMTExMTExMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyMyB4b3IgICAxMTExMTExMDAwMDAwMCAgICAgICAxMTExMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDI0IHhvciAgICAxMTExMTEwMDAwMDAwICAgICAgICAxMTExMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjUgeG9yICAgICAxMTExMTAwMDAwMDAgICAgICAgICAxMTExMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyNiB4b3IgICAgICAxMTExMDAwMDAwMCAgICAgICAgICAxMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDI3IHhvciAgICAgICAxMTEwMDAwMDAwICAgICAgICAgICAxMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjggeG9yICAgICAgICAxMTAwMDAwMDAgICAgICAgICAgICAxMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyOSB4b3IgICAgICAgICAxMDAwMDAwMCAgICAgICAgICAgICAxMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDMwIHhvciAgICAgICAgICAxMDAwMDAwICAgICAgICAgICAgICAxMDAwMDAwICAtPiAgMAorZHF4b3IwMzEgeG9yICAgICAgICAgICAxMDAwMDAgICAgICAgICAgICAgICAxMDAwMDAgIC0+ICAwCitkcXhvcjAzMiB4b3IgICAgICAgICAgICAxMDAwMCAgICAgICAgICAgICAgICAxMDAwMCAgLT4gIDAKK2RxeG9yMDMzIHhvciAgICAgICAgICAgICAxMDAwICAgICAgICAgICAgICAgICAxMDAwICAtPiAgMAorZHF4b3IwMzQgeG9yICAgICAgICAgICAgICAxMDAgICAgICAgICAgICAgICAgICAxMDAgIC0+ICAwCitkcXhvcjAzNSB4b3IgICAgICAgICAgICAgICAxMCAgICAgICAgICAgICAgICAgICAxMCAgLT4gIDAKK2RxeG9yMDM2IHhvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgMAorCitkcXhvcjA0MCB4b3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTEwMDAwMDAwMDAKK2RxeG9yMDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMAorZHF4b3IwNDIgeG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTAwMDAwMDAwCitkcXhvcjA0MyB4b3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMDEKK2RxeG9yMDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQorZHF4b3IwNDUgeG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDEwMTExCitkcXhvcjA0NiB4b3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTEKK2RxeG9yMDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQorZHF4b3IwNDggeG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExCitkcXhvcjA0OSB4b3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDEKKworZHF4b3IwNTAgeG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTEwCitkcXhvcjA1MSB4b3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMAorZHF4b3IwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMAorZHF4b3IwNTMgeG9yICAgIDExMTExMTEgIDEgIC0+ICAxMTExMTEwCitkcXhvcjA1NCB4b3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMAorZHF4b3IwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMAorZHF4b3IwNTYgeG9yICAgICAgIDExMTEgIDEgIC0+ICAxMTEwCitkcXhvcjA1NyB4b3IgICAgICAgIDExMSAgMSAgLT4gIDExMAorZHF4b3IwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMAorZHF4b3IwNTkgeG9yICAgICAgICAgIDEgIDEgIC0+ICAwCisKK2RxeG9yMDYwIHhvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExMQorZHF4b3IwNjEgeG9yICAxMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTEKK2RxeG9yMDYyIHhvciAgIDExMTExMTExICAwICAtPiAgMTExMTExMTEKK2RxeG9yMDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQorZHF4b3IwNjQgeG9yICAgICAxMTExMTEgIDAgIC0+ICAxMTExMTEKK2RxeG9yMDY1IHhvciAgICAgIDExMTExICAwICAtPiAgMTExMTEKK2RxeG9yMDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQorZHF4b3IwNjcgeG9yICAgICAgICAxMTEgIDAgIC0+ICAxMTEKK2RxeG9yMDY4IHhvciAgICAgICAgIDExICAwICAtPiAgMTEKK2RxeG9yMDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQorCitkcXhvcjA3MCB4b3IgMSAgMTExMTExMTExMSAgLT4gIDExMTExMTExMTAKK2RxeG9yMDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwCitkcXhvcjA3MiB4b3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTEwCitkcXhvcjA3MyB4b3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTAKK2RxeG9yMDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwCitkcXhvcjA3NSB4b3IgMSAgICAgICAxMTExMSAgLT4gIDExMTEwCitkcXhvcjA3NiB4b3IgMSAgICAgICAgMTExMSAgLT4gIDExMTAKK2RxeG9yMDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwCitkcXhvcjA3OCB4b3IgMSAgICAgICAgICAxMSAgLT4gIDEwCitkcXhvcjA3OSB4b3IgMSAgICAgICAgICAgMSAgLT4gIDAKKworZHF4b3IwODAgeG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTExCitkcXhvcjA4MSB4b3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorZHF4b3IwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQorZHF4b3IwODMgeG9yIDAgICAgIDExMTExMTEgIC0+ICAxMTExMTExCitkcXhvcjA4NCB4b3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQorZHF4b3IwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQorZHF4b3IwODYgeG9yIDAgICAgICAgIDExMTEgIC0+ICAxMTExCitkcXhvcjA4NyB4b3IgMCAgICAgICAgIDExMSAgLT4gIDExMQorZHF4b3IwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQorZHF4b3IwODkgeG9yIDAgICAgICAgICAgIDEgIC0+ICAxCisKK2RxeG9yMDkwIHhvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDEwMDAxMDAwMAorZHF4b3IwOTEgeG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgIDEwMDEwMDAwCitkcXhvcjA5MiB4b3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAgIDEwMTAwMDAKK2RxeG9yMDkzIHhvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gICAgIDExMDAwMAorZHF4b3IwOTQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCitkcXhvcjA5NSB4b3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAgICAgMTEwMDAKK2RxeG9yMDk2IHhvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gICAgICAxMDEwMAorZHF4b3IwOTcgeG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgICAgIDEwMDEwCitkcXhvcjA5OCB4b3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAgICAgMTAwMDEKKworZHF4b3IxMDAgeG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTAwMDEwMDAwCitkcXhvcjEwMSB4b3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAgMTAwMTAwMDAKK2RxeG9yMTAyIHhvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gICAgMTAxMDAwMAorZHF4b3IxMDMgeG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgICAgMTEwMDAwCitkcXhvcjEwNCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDAKK2RxeG9yMTA1IHhvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gICAgICAxMTAwMAorZHF4b3IxMDYgeG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgICAgIDEwMTAwCitkcXhvcjEwNyB4b3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAgICAgMTAwMTAKK2RxeG9yMTA4IHhvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gICAgICAxMDAwMQorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RxeG9yMjIwIHhvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjEgeG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyMiB4b3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjIzIHhvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjQgeG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyNSB4b3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjI2IHhvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjcgeG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyOCB4b3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjI5IHhvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMzAgeG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIzMSB4b3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjMyIHhvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZHF4b3IyNDAgeG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI0MSB4b3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjQyIHhvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNDMgeG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI0NCB4b3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkcXhvcjI1MCB4b3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1MSB4b3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1MiB4b3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1MyB4b3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1NCB4b3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1NSB4b3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1NiB4b3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1NyB4b3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1OCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI1OSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2MCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2MSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2MiB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2MyB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2NCB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI2NSB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkcXhvcjI3MCB4b3IgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3MSB4b3IgIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3MiB4b3IgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3MyB4b3IgIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3NSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3NiB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI3NyB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZHF4b3IyODAgeG9yICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODEgeG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODIgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA4IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODMgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA5IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODQgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODYgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDAxMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyODcgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RxeG9yMjg4IHhvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg5IHhvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjkwIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjkxIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA5MDAwMDEwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjkyIHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjkzIHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjk0IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjk1IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkcXhvcjI5NiB4b3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyOTcgeG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjk4IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5OSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDEwMDEwMDEwMDEwMDEwMDEwMDAwMTAwMDAxMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZHF4b3IzMzEgeG9yICAyICAgOS45OTk5OTk5OUUrOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzMyIHhvciAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzMyB4b3IgIDQgICAxLjAwMDAwMDAwRS0yODIxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzMzQgeG9yICA1ICAgMUUtOTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzM1IHhvciAgNiAgIC0xRS05MDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzNiB4b3IgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzMzcgeG9yICA4ICAgLTFFLTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzM4IHhvciAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0MSB4b3IgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDIgeG9yICAxRS05OTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQzIHhvciAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0NCB4b3IgIDFFLTkwOCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDUgeG9yICAtMUUtOTA3ICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQ2IHhvciAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0NyB4b3IgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDggeG9yICAtOS45OTk5OTk5OUUrMjk5MSAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkcXhvcjM2MSB4b3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNjIgeG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzYzIHhvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM2NCB4b3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNjUgeG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzY2IHhvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM3MSB4b3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNzIgeG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzczIHhvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM3NCB4b3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNzUgeG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzc2IHhvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2RxeG9yNzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4MSB4b3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODIgeG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4NCB4b3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODUgeG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4NyB4b3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODggeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc5MCB4b3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3OTEgeG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc5MyB4b3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3OTQgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHF4b3I4MDAgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODAxIHhvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwMiB4b3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDMgeG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODA0IHhvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwNSB4b3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDYgeG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODA3IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwOCB4b3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDkgeG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODEwIHhvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgxMSB4b3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MTIgeG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODEzIHhvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgxNCB4b3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MTUgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHF4b3I4MjEgeG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODIyIHhvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyMyB4b3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjQgeG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODI1IHhvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyNiB4b3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjcgeG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODI4IHhvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyOSB4b3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzAgeG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODMxIHhvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzMiB4b3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzMgeG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODM0IHhvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzNSB4b3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzYgeG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODM3IHhvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxeG9yODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQyIHhvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQzIHhvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ1IHhvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ2IHhvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ4IHhvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODQ5IHhvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODUxIHhvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODUyIHhvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU0IHhvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU1IHhvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU3IHhvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU4IHhvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHF4b3I4NjEgeG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODYyIHhvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2MyB4b3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjQgeG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODY1IHhvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2NiB4b3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjcgeG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODY4IHhvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2OSB4b3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzEgeG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODcyIHhvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3MyB4b3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzQgeG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODc1IHhvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3NiB4b3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzcgeG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODc4IHhvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3OSB4b3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4ODAgeG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODgxIHhvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg4MiB4b3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4ODMgeG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODg0IHhvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg4NSB4b3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0Jhc2UuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNCYXNlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1ZTVhNQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNCYXNlLmRlY1Rlc3QKQEAgLTAsMCArMSwxMDYyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRzQmFzZS5kZWNUZXN0IC0tIGJhc2UgZGVjU2luZ2xlIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcgorLS0gYW5kIGJhY2sgdG8gYSBzdHJpbmcgKGluIFNjaWVudGlmaWMgZm9ybSkKKworLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcKKy0tIHRvIGNvbmZvcm0gdG8gZW1heCBhbmQgcHJlY2lzaW9uIHNldHRpbmdzICh0aGF0IGlzLCBudW1iZXJzIHdpbGwKKy0tIGNvbmZvcm0gdG8gcnVsZXMgYW5kIGV4cG9uZW50IHdpbGwgYmUgaW4gcGVybWl0dGVkIHJhbmdlKS4gIFRoZQorLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlCistLSByZXByZXNlbnRlZCBpbiBhIGRlY1NpbmdsZS4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUKKy0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8KKy0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICA3CittYXhFeHBvbmVudDogOTYKK21pbkV4cG9uZW50OiAtOTUKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHNiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwCitkc2JhczAwMiB0b1NjaSAgICAgICAxIC0+IDEKK2RzYmFzMDAzIHRvU2NpICAgICAxLjAgLT4gMS4wCitkc2JhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDAKK2RzYmFzMDA1IHRvU2NpICAgICAgMTAgLT4gMTAKK2RzYmFzMDA2IHRvU2NpICAgIDEwMDAgLT4gMTAwMAorZHNiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wCitkc2JhczAwOCB0b1NjaSAgICAxMC4xIC0+IDEwLjEKK2RzYmFzMDA5IHRvU2NpICAgIDEwLjQgLT4gMTAuNAorZHNiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41Citkc2JhczAxMSB0b1NjaSAgICAxMC42IC0+IDEwLjYKK2RzYmFzMDEyIHRvU2NpICAgIDEwLjkgLT4gMTAuOQorZHNiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wCitkc2JhczAxNCB0b1NjaSAgMS4yMzQgLT4gMS4yMzQKK2RzYmFzMDE1IHRvU2NpICAwLjEyMyAtPiAwLjEyMworZHNiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyCitkc2JhczAxNyB0b1NjaSAgLTAgICAgLT4gLTAKK2RzYmFzMDE4IHRvU2NpICAtMC4wICAtPiAtMC4wCitkc2JhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDAKKworZHNiYXMwMjEgdG9TY2kgICAgIC0xIC0+IC0xCitkc2JhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMAorZHNiYXMwMjMgdG9TY2kgICAtMC4xIC0+IC0wLjEKK2RzYmFzMDI0IHRvU2NpICAgLTkuMSAtPiAtOS4xCitkc2JhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExCitkc2JhczAyNiB0b1NjaSAgIC05LjExOSAtPiAtOS4xMTkKK2RzYmFzMDI3IHRvU2NpICAgLTkuOTk5IC0+IC05Ljk5OQorCitkc2JhczAzMCB0b1NjaSAgJzEyMzQuNTY3JyAgIC0+ICcxMjM0LjU2NycKK2RzYmFzMDMxIHRvU2NpICAnMTIzNC4wMDAnICAgLT4gJzEyMzQuMDAwJworZHNiYXMwMzIgdG9TY2kgICAnMTIzNDkxMicgICAtPiAnMTIzNDkxMicKK2RzYmFzMDMzIHRvU2NpICAgJzAuMDAwMDEyMzQ1NjcnICAgLT4gJzAuMDAwMDEyMzQ1NjcnCitkc2JhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3JyAgIC0+ICcwLjAwMDAwMTIzNDU2NycKK2RzYmFzMDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1NjcnICAgLT4gJzEuMjM0NTY3RS03JworZHNiYXMwMzYgdG9TY2kgJzAuMDAwMDAwMDEyMzQ1NjcnICAtPiAnMS4yMzQ1NjdFLTgnCisKK2RzYmFzMDM3IHRvU2NpICcwLjEyMzQ1NjQnICAgLT4gJzAuMTIzNDU2NCcKK2RzYmFzMDM4IHRvU2NpICcwLjEyMzQ1NjUnICAgLT4gJzAuMTIzNDU2NScKKworLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkKK2RzYnNuMDAxIHRvU2NpIC05Ljk5OTk5OUUrOTYgLT4gLTkuOTk5OTk5RSs5NgorZHNic24wMDIgdG9TY2kgLTFFLTk1IC0+IC0xRS05NQorZHNic24wMDMgdG9TY2kgLTFFLTEwMSAtPiAtMUUtMTAxIFN1Ym5vcm1hbAorZHNic24wMDQgdG9TY2kgLTAgLT4gLTAKK2RzYnNuMDA1IHRvU2NpICswIC0+ICAwCitkc2JzbjAwNiB0b1NjaSArMUUtMTAxIC0+ICAxRS0xMDEgU3Vibm9ybWFsCitkc2JzbjAwNyB0b1NjaSArMUUtOTUgLT4gIDFFLTk1Citkc2JzbjAwOCB0b1NjaSArOS45OTk5OTlFKzk2IC0+ICA5Ljk5OTk5OUUrOTYKKworLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0KKy0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdAorZHNiYXMwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJworZHNiYXMwNDEgdG9TY2kgIi03NiIgICAgICAgLT4gJy03NicKK2RzYmFzMDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicKK2RzYmFzMDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicKK2RzYmFzMDQ0IHRvU2NpICIwMTIuNzYiICAgIC0+ICcxMi43NicKK2RzYmFzMDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycKK2RzYmFzMDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycKK2RzYmFzMDQ3IHRvU2NpICIuNSIgICAgICAgIC0+ICcwLjUnCitkc2JhczA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnCitkc2JhczA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnCitkc2JhczA1MCB0b1NjaSAiMC4wMDA1IiAgICAgIC0+ICcwLjAwMDUnCitkc2JhczA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1JworZHNiYXMwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnCitkc2JhczA1MyB0b1NjaSAiMC4wMDAwMDUwIiAgIC0+ICcwLjAwMDAwNTAnCitkc2JhczA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03JworZHNiYXMwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcKK2RzYmFzMDU2IHRvU2NpICIxMjY3OC41NCIgLT4gJzEyNjc4LjU0JworZHNiYXMwNTcgdG9TY2kgIjI2NzguNTQzIiAtPiAnMjY3OC41NDMnCitkc2JhczA1OCB0b1NjaSAiMzQ1Njc4LjUiIC0+ICczNDU2NzguNScKK2RzYmFzMDU5IHRvU2NpICIwNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDYwIHRvU2NpICI2NzguNTQzMiIgLT4gJzY3OC41NDMyJworZHNiYXMwNjEgdG9TY2kgIis2NzguNTQzMiIgLT4gJzY3OC41NDMyJworZHNiYXMwNjIgdG9TY2kgIiswNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDYzIHRvU2NpICIrMDA2NzguNTQzMiIgLT4gJzY3OC41NDMyJworZHNiYXMwNjQgdG9TY2kgIi02NzguNTQzMiIgIC0+ICctNjc4LjU0MzInCitkc2JhczA2NSB0b1NjaSAiLTA2NzguNTQzMiIgIC0+ICctNjc4LjU0MzInCitkc2JhczA2NiB0b1NjaSAiLTAwNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJworLS0gZXhhbXBsZXMKK2RzYmFzMDY3IHRvU2NpICI1RS02IiAgICAgICAgLT4gJzAuMDAwMDA1JworZHNiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJworZHNiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycKKworLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0KKworLS0gcm91bmRlZCB3aXRoIGRvdHMgaW4gYWxsIChpbmNsdWRpbmcgZWRnZSkgcGxhY2VzCitkc2JhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTAxMjM0NTYgIC0+IDAuMTIzNDU2OCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MDEyMzQ1NiAgLT4gMS4yMzQ1NjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3MyB0b1NjaSAgMTIuMzQ1Njc4OTAxMjM0NTYgIC0+IDEyLjM0NTY4IEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzQgdG9TY2kgIDEyMy40NTY3ODkwMTIzNDU2ICAtPiAxMjMuNDU2OCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MDEyMzQ1NiAgLT4gMTIzNC41NjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3NiB0b1NjaSAgMTIzNDUuNjc4OTAxMjM0NTYgIC0+IDEyMzQ1LjY4IEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzcgdG9TY2kgIDEyMzQ1Ni43ODkwMTIzNDU2ICAtPiAxMjM0NTYuOCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MDEyMzQ1NiAgLT4gMTIzNDU2OCAgSW5leGFjdCBSb3VuZGVkCitkc2JhczA3OSB0b1NjaSAgMTIzNDU2NzguOTAxMjM0NTYgIC0+IDEuMjM0NTY4RSs3IEluZXhhY3QgUm91bmRlZAorZHNiYXMwODAgdG9TY2kgIDEyMzQ1Njc4OS4wMTIzNDU2ICAtPiAxLjIzNDU2OEUrOCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkwLjEyMzQ1NiAgLT4gMS4yMzQ1NjhFKzkgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4MiB0b1NjaSAgMTIzNDU2Nzg5MDEuMjM0NTYgIC0+IDEuMjM0NTY4RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDgzIHRvU2NpICAxMjM0NTY3ODkwMTIuMzQ1NiAgLT4gMS4yMzQ1NjhFKzExIEluZXhhY3QgUm91bmRlZAorZHNiYXMwODQgdG9TY2kgIDEyMzQ1Njc4OTAxMjMuNDU2ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4NSB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQuNTYgIC0+IDEuMjM0NTY4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDg2IHRvU2NpICAxMjM0NTY3ODkwMTIzNDUuNiAgLT4gMS4yMzQ1NjhFKzE0IEluZXhhY3QgUm91bmRlZAorZHNiYXMwODcgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYuICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4OCB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+IDEuMjM0NTY4RSsxNSBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVtYmVycyB3aXRoIEUKK2RzYmFzMTMwIHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCitkc2JhczEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcKK2RzYmFzMTMyIHRvU2NpICIwLjAwMEUtMyIgIC0+ICcwLjAwMDAwMCcKK2RzYmFzMTMzIHRvU2NpICIwLjAwMEUtNCIgIC0+ICcwRS03JworZHNiYXMxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcKK2RzYmFzMTM1IHRvU2NpICIwLjAwRS0zIiAgIC0+ICcwLjAwMDAwJworZHNiYXMxMzYgdG9TY2kgIjAuMDBFLTQiICAgLT4gJzAuMDAwMDAwJworZHNiYXMxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnCitkc2JhczEzOCB0b1NjaSAiKzBFKzkiICAgICAtPiAnMEUrOScKK2RzYmFzMTM5IHRvU2NpICItMEUrOSIgICAgIC0+ICctMEUrOScKK2RzYmFzMTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworZHNiYXMxNDEgdG9TY2kgIjFlKzA5IiAgICAgLT4gJzFFKzknCitkc2JhczE0MiB0b1NjaSAiMUUrOTAiICAgICAtPiAnMUUrOTAnCitkc2JhczE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScKK2RzYmFzMTQ0IHRvU2NpICIwRSs5IiAgICAgIC0+ICcwRSs5JworZHNiYXMxNDUgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCitkc2JhczE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScKK2RzYmFzMTQ3IHRvU2NpICIxZSs5MCIgICAgIC0+ICcxRSs5MCcKK2RzYmFzMTQ4IHRvU2NpICIxRSswMDkiICAgIC0+ICcxRSs5JworZHNiYXMxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknCitkc2JhczE1MCB0b1NjaSAiMUU5IiAgICAgICAtPiAnMUUrOScKK2RzYmFzMTUxIHRvU2NpICIxZTA5IiAgICAgIC0+ICcxRSs5JworZHNiYXMxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJworZHNiYXMxNTMgdG9TY2kgIjFFMDA5IiAgICAgLT4gJzFFKzknCitkc2JhczE1NCB0b1NjaSAiMEU5IiAgICAgICAtPiAnMEUrOScKK2RzYmFzMTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcKK2RzYmFzMTU2IHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCitkc2JhczE1NyB0b1NjaSAiNEUrOSIgICAgICAtPiAnNEUrOScKK2RzYmFzMTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJworZHNiYXMxNTkgdG9TY2kgIjAuNzNlLTciICAgLT4gJzcuM0UtOCcKK2RzYmFzMTYwIHRvU2NpICIwMEUrOSIgICAgIC0+ICcwRSs5JworZHNiYXMxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknCitkc2JhczE2MiB0b1NjaSAiMTBFKzkiICAgICAtPiAnMS4wRSsxMCcKK2RzYmFzMTYzIHRvU2NpICIxMEUrMDkiICAgIC0+ICcxLjBFKzEwJworZHNiYXMxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnCitkc2JhczE2NSB0b1NjaSAiMTBFKzAwOSIgICAtPiAnMS4wRSsxMCcKK2RzYmFzMTY2IHRvU2NpICIxMDBlKzkiICAgIC0+ICcxLjAwRSsxMScKK2RzYmFzMTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScKK2RzYmFzMTY4IHRvU2NpICIxMDBFKzkwIiAgIC0+ICcxLjAwRSs5MicKK2RzYmFzMTY5IHRvU2NpICIxMDBlKzAwOSIgIC0+ICcxLjAwRSsxMScKKworZHNiYXMxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1JworZHNiYXMxNzEgdG9TY2kgIjEuMjY1RS0yMCIgLT4gJzEuMjY1RS0yMCcKK2RzYmFzMTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcKK2RzYmFzMTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnCitkc2JhczE3NCB0b1NjaSAiMS4yNjVFLTMiICAtPiAnMC4wMDEyNjUnCitkc2JhczE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScKK2RzYmFzMTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnCitkc2JhczE3NyB0b1NjaSAiMS4yNjVFLTAiICAtPiAnMS4yNjUnCitkc2JhczE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnCitkc2JhczE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnCitkc2JhczE4MCB0b1NjaSAiMS4yNjVFKzMiICAtPiAnMTI2NScKK2RzYmFzMTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcKK2RzYmFzMTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcKK2RzYmFzMTgzIHRvU2NpICIxLjI2NUUrMjAiIC0+ICcxLjI2NUUrMjAnCisKK2RzYmFzMTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScKK2RzYmFzMTkxIHRvU2NpICIxMi42NUUtMjAiIC0+ICcxLjI2NUUtMTknCitkc2JhczE5MiB0b1NjaSAiMTIuNjVFLTgiICAtPiAnMS4yNjVFLTcnCitkc2JhczE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnCitkc2JhczE5NCB0b1NjaSAiMTIuNjVFLTMiICAtPiAnMC4wMTI2NScKK2RzYmFzMTk1IHRvU2NpICIxMi42NUUtMiIgIC0+ICcwLjEyNjUnCitkc2JhczE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnCitkc2JhczE5NyB0b1NjaSAiMTIuNjVFLTAiICAtPiAnMTIuNjUnCitkc2JhczE5OCB0b1NjaSAiMTIuNjVFKzEiICAtPiAnMTI2LjUnCitkc2JhczE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScKK2RzYmFzMjAwIHRvU2NpICIxMi42NUUrMyIgIC0+ICcxLjI2NUUrNCcKK2RzYmFzMjAxIHRvU2NpICIxMi42NUUrNCIgIC0+ICcxLjI2NUUrNScKK2RzYmFzMjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScKK2RzYmFzMjAzIHRvU2NpICIxMi42NUUrMjAiIC0+ICcxLjI2NUUrMjEnCisKK2RzYmFzMjEwIHRvU2NpICIxMjYuNSIgICAgIC0+ICcxMjYuNScKK2RzYmFzMjExIHRvU2NpICIxMjYuNUUtMjAiIC0+ICcxLjI2NUUtMTgnCitkc2JhczIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnCitkc2JhczIxMyB0b1NjaSAiMTI2LjVFLTQiICAtPiAnMC4wMTI2NScKK2RzYmFzMjE0IHRvU2NpICIxMjYuNUUtMyIgIC0+ICcwLjEyNjUnCitkc2JhczIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnCitkc2JhczIxNiB0b1NjaSAiMTI2LjVFLTEiICAtPiAnMTIuNjUnCitkc2JhczIxNyB0b1NjaSAiMTI2LjVFLTAiICAtPiAnMTI2LjUnCitkc2JhczIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScKK2RzYmFzMjE5IHRvU2NpICIxMjYuNUUrMiIgIC0+ICcxLjI2NUUrNCcKK2RzYmFzMjIwIHRvU2NpICIxMjYuNUUrMyIgIC0+ICcxLjI2NUUrNScKK2RzYmFzMjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicKK2RzYmFzMjIyIHRvU2NpICIxMjYuNUUrOCIgIC0+ICcxLjI2NUUrMTAnCitkc2JhczIyMyB0b1NjaSAiMTI2LjVFKzIwIiAtPiAnMS4yNjVFKzIyJworCitkc2JhczIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1JworZHNiYXMyMzEgdG9TY2kgIjEyNjVFLTIwIiAtPiAnMS4yNjVFLTE3JworZHNiYXMyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScKK2RzYmFzMjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScKK2RzYmFzMjM0IHRvU2NpICIxMjY1RS0zIiAgLT4gJzEuMjY1JworZHNiYXMyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnCitkc2JhczIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScKK2RzYmFzMjM3IHRvU2NpICIxMjY1RS0wIiAgLT4gJzEyNjUnCitkc2JhczIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcKK2RzYmFzMjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1JworZHNiYXMyNDAgdG9TY2kgIjEyNjVFKzMiICAtPiAnMS4yNjVFKzYnCitkc2JhczI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycKK2RzYmFzMjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScKK2RzYmFzMjQzIHRvU2NpICIxMjY1RSsyMCIgLT4gJzEuMjY1RSsyMycKKworZHNiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnCitkc2JhczI1MSB0b1NjaSAiMC4xMjY1RS0yMCIgLT4gJzEuMjY1RS0yMScKK2RzYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknCitkc2JhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnCitkc2JhczI1NCB0b1NjaSAiMC4xMjY1RS0zIiAgLT4gJzAuMDAwMTI2NScKK2RzYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnCitkc2JhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnCitkc2JhczI1NyB0b1NjaSAiMC4xMjY1RS0wIiAgLT4gJzAuMTI2NScKK2RzYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnCitkc2JhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1JworZHNiYXMyNjAgdG9TY2kgIjAuMTI2NUUrMyIgIC0+ICcxMjYuNScKK2RzYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScKK2RzYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnCitkc2JhczI2MyB0b1NjaSAiMC4xMjY1RSsyMCIgLT4gJzEuMjY1RSsxOScKKworLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQorZHNiYXMyOTAgdG9TY2kgIi0wLjAwMEUtMSIgIC0+ICctMC4wMDAwJworZHNiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcKK2RzYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJworZHNiYXMyOTMgdG9TY2kgIi0wLjAwMEUtNCIgIC0+ICctMEUtNycKK2RzYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcKK2RzYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnCitkc2JhczI5NiB0b1NjaSAiLTAuMEUtMiIgICAgLT4gJy0wLjAwMCcKK2RzYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcKK2RzYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnCitkc2JhczI5OSB0b1NjaSAiLTBFLTMiICAgICAgLT4gJy0wLjAwMCcKKworLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMKK2RzYmFzMzAxICB0b1NjaSAxMGUxMiAgLT4gMS4wRSsxMworZHNiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTIKK2RzYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMgorZHNiYXMzMDQgIHRvRW5nIDEwZTExICAtPiAxLjBFKzEyCitkc2JhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTEKK2RzYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5Citkc2JhczMwNyAgdG9TY2kgMTBlOSAgIC0+IDEuMEUrMTAKK2RzYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkKK2RzYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5Citkc2JhczMxMCAgdG9FbmcgMTBlOCAgIC0+IDEuMEUrOQorZHNiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgKK2RzYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2Citkc2JhczMxMyAgdG9TY2kgMTBlNiAgIC0+IDEuMEUrNworZHNiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNgorZHNiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYKK2RzYmFzMzE2ICB0b0VuZyAxMGU1ICAgLT4gMS4wRSs2Citkc2JhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQorZHNiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMKK2RzYmFzMzE5ICB0b1NjaSAxMGUzICAgLT4gMS4wRSs0Citkc2JhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszCitkc2JhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMworZHNiYXMzMjIgIHRvRW5nIDEwZTIgICAtPiAxLjBFKzMKK2RzYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyCitkc2JhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMAorZHNiYXMzMjUgIHRvU2NpIDEwZTAgICAtPiAxMAorZHNiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMAorZHNiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjAKK2RzYmFzMzI4ICB0b0VuZyAxMGUtMSAgLT4gMS4wCitkc2JhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTAKK2RzYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMAorZHNiYXMzMzEgIHRvU2NpIDEwZS0zICAtPiAwLjAxMAorZHNiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMAorZHNiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTAKK2RzYmFzMzM0ICB0b0VuZyAxMGUtNCAgLT4gMC4wMDEwCitkc2JhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTAKK2RzYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMAorZHNiYXMzMzcgIHRvU2NpIDEwZS02ICAtPiAwLjAwMDAxMAorZHNiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMAorZHNiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTAKK2RzYmFzMzQwICB0b0VuZyAxMGUtNyAgLT4gMC4wMDAwMDEwCitkc2JhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNworZHNiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkKK2RzYmFzMzQzICB0b1NjaSAxMGUtOSAgLT4gMS4wRS04Citkc2JhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05Citkc2JhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQorZHNiYXMzNDYgIHRvRW5nIDEwZS0xMCAtPiAxLjBFLTkKK2RzYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMAorZHNiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyCitkc2JhczM0OSAgdG9TY2kgMTBlLTEyIC0+IDEuMEUtMTEKK2RzYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyCitkc2JhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTIKK2RzYmFzMzUyICB0b0VuZyAxMGUtMTMgLT4gMS4wRS0xMgorCitkc2JhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTIKK2RzYmFzMzYyICB0b0VuZyA3RTEyICAtPiA3RSsxMgorZHNiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExCitkc2JhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5Citkc2JhczM2NSAgdG9TY2kgN0UxMCAgLT4gN0UrMTAKK2RzYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQorZHNiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkKK2RzYmFzMzY4ICB0b0VuZyA3RTkgICAtPiA3RSs5Citkc2JhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOAorZHNiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNgorZHNiYXMzNzEgIHRvU2NpIDdFNyAgIC0+IDdFKzcKK2RzYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNgorZHNiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYKK2RzYmFzMzc0ICB0b0VuZyA3RTYgICAtPiA3RSs2Citkc2JhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQorZHNiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMworZHNiYXMzNzcgIHRvU2NpIDdFNCAgIC0+IDdFKzQKK2RzYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMworZHNiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMKK2RzYmFzMzgwICB0b0VuZyA3RTMgICAtPiA3RSszCitkc2JhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMgorZHNiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMAorZHNiYXMzODMgIHRvU2NpIDdFMSAgIC0+IDdFKzEKK2RzYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MAorZHNiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcKK2RzYmFzMzg2ICB0b0VuZyA3RTAgICAtPiA3Citkc2JhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43Citkc2JhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43Citkc2JhczM4OSAgdG9TY2kgN0UtMiAgLT4gMC4wNworZHNiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcKK2RzYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNworZHNiYXMzOTIgIHRvRW5nIDdFLTMgIC0+IDAuMDA3Citkc2JhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3Citkc2JhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3Citkc2JhczM5NSAgdG9TY2kgN0UtNSAgLT4gMC4wMDAwNworZHNiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcKK2RzYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNworZHNiYXMzOTggIHRvRW5nIDdFLTYgIC0+IDAuMDAwMDA3Citkc2JhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNworZHNiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQorZHNiYXM0MDEgIHRvU2NpIDdFLTggIC0+IDdFLTgKK2RzYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQorZHNiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkKK2RzYmFzNDA0ICB0b0VuZyA3RS05ICAtPiA3RS05Citkc2JhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTAKK2RzYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyCitkc2JhczQwNyAgdG9TY2kgN0UtMTEgLT4gN0UtMTEKK2RzYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTIKK2RzYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMgorZHNiYXM0MTAgIHRvRW5nIDdFLTEyIC0+IDdFLTEyCitkc2JhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMKK2RzYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1CisKKy0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uCitkc2JhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMAorZHNiYXM0MjIgIHRvU2NpICAgMTAwMCAtPiAxMDAwCitkc2JhczQyNCAgdG9TY2kgIDk5OS45IC0+ICA5OTkuOQorZHNiYXM0MjYgIHRvU2NpIDEwMDAuMCAtPiAxMDAwLjAKK2RzYmFzNDI4ICB0b1NjaSAxMDAwLjEgLT4gMTAwMC4xCitkc2JhczQzMCAgdG9TY2kgMTAwMDAgLT4gMTAwMDAKK2RzYmFzNDMyICB0b1NjaSAxMDAwICAgICAgICAtPiAxMDAwCitkc2JhczQzNCAgdG9TY2kgMTAwMDAgICAgICAgLT4gMTAwMDAKK2RzYmFzNDM2ICB0b1NjaSAxMDAwMDAgICAgICAtPiAxMDAwMDAKK2RzYmFzNDM4ICB0b1NjaSAxMDAwMDAwICAgICAtPiAxMDAwMDAwCitkc2JhczQ0MCAgdG9TY2kgMTAwMDAwMDAgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkCitkc2JhczQ0MiAgdG9TY2kgMTAwMDAwMDAgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkCitkc2JhczQ0NCAgdG9TY2kgMTAwMDAwMDMgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDQ2ICB0b1NjaSAxMDAwMDAwNSAgICAtPiAxLjAwMDAwMEUrNyAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NDggIHRvU2NpIDEwMDAwMDA1MCAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ1MCAgdG9TY2kgMTAwMDAwMDkgICAgLT4gMS4wMDAwMDFFKzcgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDUyICB0b1NjaSAxMDAwMDAwMDAgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQKK2RzYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDMgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NTYgIHRvU2NpIDEwMDAwMDAwNSAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ1OCAgdG9TY2kgMTAwMDAwMDA5ICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQKK2RzYmFzNDYyICB0b1NjaSAxMDAwMDAwMzAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NjQgIHRvU2NpIDEwMDAwMDA1MDAgIC0+IDEuMDAwMDAwRSs5ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ2NiAgdG9TY2kgMTAwMDAwMDkwMCAgLT4gMS4wMDAwMDFFKzkgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQKK2RzYmFzNDcwICB0b1NjaSAxMDAwMDAwMzAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NzIgIHRvU2NpIDEwMDAwMDA1MDAwIC0+IDEuMDAwMDAwRSsxMCAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ3NCAgdG9TY2kgMTAwMDAwMDkwMDAgLT4gMS4wMDAwMDFFKzEwICBSb3VuZGVkIEluZXhhY3QKKworLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkCityb3VuZGluZzogIGNlaWxpbmcKK2RzYnNyNDAxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZAorZHNic3I0MDIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDAzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQwNCAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICB1cAorZHNic3I0MDUgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQwNiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MDcgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDA4ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGZsb29yCitkc2JzcjQxMCAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNDExICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQxMiAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MTMgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkc2JzcjQxNSAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNDE2ICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQxNyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MTggIHRvU2NpICAxLjExMjM0NjUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDE5ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZXZlbgorZHNic3I0MjEgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQyMiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MjMgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDI0ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQyNSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBkb3duCitkc2JzcjQyNiAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNDI3ICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQyOCAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MjkgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl91cAorZHNic3I0MzEgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQzMiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MzMgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDM0ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQzNSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorLS0gbmVnYXRpdmVzCityb3VuZGluZzogIGNlaWxpbmcKK2RzYnNyNTAxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZAorZHNic3I1MDIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTAzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUwNCAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICB1cAorZHNic3I1MDUgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUwNiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MDcgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTA4ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGZsb29yCitkc2JzcjUxMCAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNTExICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUxMiAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MTMgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkc2JzcjUxNSAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNTE2ICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUxNyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MTggIHRvU2NpIC0xLjExMjM0NjUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTE5ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZXZlbgorZHNic3I1MjEgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUyMiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MjMgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTI0ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUyNSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBkb3duCitkc2JzcjUyNiAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNTI3ICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUyOCAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MjkgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl91cAorZHNic3I1MzEgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUzMiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MzMgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTM0ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUzNSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFRoZSAnYmFkZGllcycgdGVzdHMgZnJvbSBEaWFnQmlnRGVjaW1hbCwgcGx1cyBzb21lIG5ldyBvbmVzCitkc2JhczUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTAxIHRvU2NpICcuJyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDIgdG9TY2kgJy4uJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTA0IHRvU2NpICctLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDUgdG9TY2kgJy0rMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTA3IHRvU2NpICcxMmUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDggdG9TY2kgJzEyZSsrJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTEwIHRvU2NpICcgKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTEgdG9TY2kgJysgMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTEzIHRvU2NpICcgKyAxJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTQgdG9TY2kgJyAtIDEgJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTE2IHRvU2NpICctMS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTcgdG9TY2kgJzEyLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTE5IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjAgdG9TY2kgJzFlLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTIyIHRvU2NpICc3ZTEyMzU2Nzg5MHgnICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjMgdG9TY2kgJzdlMTIzNTY3ODkwMTJ4JyAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTI1IHRvU2NpICdlMTAwJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjYgdG9TY2kgJ1x1MGU1YScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTI4IHRvU2NpICcxMjMsNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjkgdG9TY2kgJzEuMzQuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTMxIHRvU2NpICcwMS4zNS4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzIgdG9TY2kgJzAxLjM1LScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTM0IHRvU2NpICcuMDAwMC4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzUgdG9TY2kgJzAwLi4wMCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTM3IHRvU2NpICcxMTFlMTIzLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzggdG9TY2kgJzExMWUrMTIrJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQwIHRvU2NpICcxMTFlMSoyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDEgdG9TY2kgJzExMWUxZSszJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQzIHRvU2NpICcxZTEyM2UnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDQgdG9TY2kgJ3RlbicgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQ2IHRvU2NpICcxZS4xJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDcgdG9TY2kgJzFlMS4nICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQ5IHRvU2NpICdlKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTAgdG9TY2kgJzEuMjMuNCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTUyIHRvU2NpICcxRSsxLjInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTMgdG9TY2kgJzFFKzEuMi4zJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTU1IHRvU2NpICcxRS0tMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTYgdG9TY2kgJzFFKy0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTU4IHRvU2NpICcxRScnMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTkgdG9TY2kgIjFFIiIxIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKy0tIE5lYXItc3BlY2lhbHMKK2RzYmFzNTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjIgdG9TY2kgIk5hTnEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2MyB0b1NjaSAiTmFOcyIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjUgdG9TY2kgIkluZmluIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2NiB0b1NjaSAiSW5maW5pIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjggdG9TY2kgIi1JbmZpbml0IiAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2OSB0b1NjaSAiMEluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzEgdG9TY2kgIi0wSW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3MiB0b1NjaSAiLTlJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzQgdG9TY2kgInhOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3NSB0b1NjaSAiMHNOYU4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzCitkc2JhczU3NiB0b1NjaSAgJ2UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3NyB0b1NjaSAgJy5lKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3OSB0b1NjaSAgJy0uZSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4MCB0b1NjaSAgJy0uZScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4MiB0b1NjaSAgJy5FKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4MyB0b1NjaSAgJysuRSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4NSB0b1NjaSAgJy0uRScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RzYmFzNTg2IHRvU2NpICAnLk5hTicgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTg3IHRvU2NpICAnLS5OYU4nICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTg5IHRvU2NpICAnKy5JbmYnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTkwIHRvU2NpICAnLkluZmluaXR5JyAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworLS0gWmVyb3MKK2RzYmFzNjAxIHRvU2NpIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2RzYmFzNjAyIHRvU2NpIDAuMDAwMDAwMDAgICAgICAgIC0+IDBFLTgKK2RzYmFzNjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcKK2RzYmFzNjA0IHRvU2NpIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwCitkc2JhczYwNSB0b1NjaSAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitkc2JhczYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzNjA3IHRvU2NpIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwCitkc2JhczYwOCB0b1NjaSAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitkc2JhczYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RzYmFzNjEwIHRvU2NpICAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZHNiYXM2MTEgdG9TY2kgMC4gICAgICAgICAgICAgICAgLT4gMAorZHNiYXM2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAorZHNiYXM2MTMgdG9TY2kgLTAuICAgICAgICAgICAgICAgLT4gLTAKK2RzYmFzNjE0IHRvU2NpIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2RzYmFzNjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCitkc2JhczYxNiB0b1NjaSAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDAKK2RzYmFzNjE3IHRvU2NpIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2RzYmFzNjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCitkc2JhczYxOSB0b1NjaSAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDAKK2RzYmFzNjIwIHRvU2NpIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wRS03Citkc2JhczYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOAorZHNiYXM2MjIgdG9TY2kgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKKworZHNiYXM2MzAgdG9TY2kgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMAorZHNiYXM2MzEgdG9TY2kgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitkc2JhczYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwCitkc2JhczYzMyB0b1NjaSAgMC4wMEUrMyAgICAgICAgICAtPiAwRSsxCitkc2JhczYzNCB0b1NjaSAgMC4wMEUrNCAgICAgICAgICAtPiAwRSsyCitkc2JhczYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitkc2JhczYzNiB0b1NjaSAgMC4wMEUrNiAgICAgICAgICAtPiAwRSs0Citkc2JhczYzNyB0b1NjaSAgMC4wMEUrNyAgICAgICAgICAtPiAwRSs1Citkc2JhczYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2Citkc2JhczYzOSB0b1NjaSAgMC4wMEUrOSAgICAgICAgICAtPiAwRSs3CisKK2RzYmFzNjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAorZHNiYXM2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMAorZHNiYXM2NDIgdG9TY2kgIDAuMEUrMiAgICAgICAgICAgLT4gMEUrMQorZHNiYXM2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMgorZHNiYXM2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMworZHNiYXM2NDUgdG9TY2kgIDAuMEUrNSAgICAgICAgICAgLT4gMEUrNAorZHNiYXM2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQorZHNiYXM2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorZHNiYXM2NDggdG9TY2kgIDAuMEUrOCAgICAgICAgICAgLT4gMEUrNworZHNiYXM2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOAorCitkc2JhczY1MCB0b1NjaSAgMEUrMCAgICAgICAgICAgICAtPiAwCitkc2JhczY1MSB0b1NjaSAgMEUrMSAgICAgICAgICAgICAtPiAwRSsxCitkc2JhczY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyCitkc2JhczY1MyB0b1NjaSAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCitkc2JhczY1NCB0b1NjaSAgMEUrNCAgICAgICAgICAgICAtPiAwRSs0Citkc2JhczY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1Citkc2JhczY1NiB0b1NjaSAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2Citkc2JhczY1NyB0b1NjaSAgMEUrNyAgICAgICAgICAgICAtPiAwRSs3Citkc2JhczY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4Citkc2JhczY1OSB0b1NjaSAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5CisKK2RzYmFzNjYwIHRvU2NpICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorZHNiYXM2NjEgdG9TY2kgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAorZHNiYXM2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDAKK2RzYmFzNjYzIHRvU2NpICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorZHNiYXM2NjQgdG9TY2kgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAorZHNiYXM2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RzYmFzNjY2IHRvU2NpICAwLjBFLTYgICAgICAgICAgIC0+IDBFLTcKK2RzYmFzNjY3IHRvU2NpICAwLjBFLTcgICAgICAgICAgIC0+IDBFLTgKK2RzYmFzNjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKK2RzYmFzNjY5IHRvU2NpICAwLjBFLTkgICAgICAgICAgIC0+IDBFLTEwCisKK2RzYmFzNjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKK2RzYmFzNjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwCitkc2JhczY3MiB0b1NjaSAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzNjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzNjc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwCitkc2JhczY3NSB0b1NjaSAgMC4wMEUtNSAgICAgICAgICAtPiAwRS03Citkc2JhczY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04Citkc2JhczY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05Citkc2JhczY3OCB0b1NjaSAgMC4wMEUtOCAgICAgICAgICAtPiAwRS0xMAorZHNiYXM2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTEKKworZHNiYXM2ODAgdG9TY2kgIDAwMDAwMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjgxIHRvU2NpICAgMDAwMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMAorZHNiYXM2ODMgdG9TY2kgICAgIDAwMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjg0IHRvU2NpICAgICAgMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMAorZHNiYXM2ODYgdG9TY2kgICswMDAwMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjg3IHRvU2NpICAtMDAwMDAuICAgICAgICAgIC0+IC0wCitkc2JhczY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMAorZHNiYXM2ODkgdG9TY2kgIC0wLiAgICAgICAgICAgICAgLT4gLTAKKworLS0gU3BlY2lhbHMKK2RzYmFzNzAwIHRvU2NpICJOYU4iICAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwMiB0b1NjaSAibkFuIiAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzAzIHRvU2NpICJOQU4iICAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwNSB0b1NjaSAiK25hbiIgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzA2IHRvU2NpICIrbkFuIiAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwOCB0b1NjaSAiLU5hTiIgICAgICAgICAgICAtPiAtTmFOCitkc2JhczcwOSB0b1NjaSAiLW5hbiIgICAgICAgICAgICAtPiAtTmFOCitkc2JhczcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFOCitkc2JhczcxMSB0b1NjaSAiLU5BTiIgICAgICAgICAgICAtPiAtTmFOCitkc2JhczcxMiB0b1NjaSAnTmFOMCcgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjEKK2RzYmFzNzE0IHRvU2NpICdOYU4xMicgICAgICAgICAgIC0+IE5hTjEyCitkc2JhczcxNSB0b1NjaSAnTmFOMTIzJyAgICAgICAgICAtPiBOYU4xMjMKK2RzYmFzNzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQKK2RzYmFzNzE3IHRvU2NpICdOYU4wMScgICAgICAgICAgIC0+IE5hTjEKK2RzYmFzNzE4IHRvU2NpICdOYU4wMTInICAgICAgICAgIC0+IE5hTjEyCitkc2JhczcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMKK2RzYmFzNzIwIHRvU2NpICdOYU4wMTIzNCcgICAgICAgIC0+IE5hTjEyMzQKK2RzYmFzNzIxIHRvU2NpICdOYU4wMDEnICAgICAgICAgIC0+IE5hTjEKK2RzYmFzNzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyCitkc2JhczcyMyB0b1NjaSAnTmFOMDAxMjMnICAgICAgICAtPiBOYU4xMjMKK2RzYmFzNzI0IHRvU2NpICdOYU4wMDEyMzQnICAgICAgIC0+IE5hTjEyMzQKK2RzYmFzNzI1IHRvU2NpICdOYU4xMjM0NTY3ODkwMTIzNDU2JyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM3MjcgdG9TY2kgJ05hTjEyLjQ1JyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczcyOCB0b1NjaSAnTmFOLTEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkc2JhczczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFOCitkc2JhczczMSB0b1NjaSAic25hbiIgICAgICAgICAgICAtPiBzTmFOCitkc2JhczczMiB0b1NjaSAiU25BbiIgICAgICAgICAgICAtPiBzTmFOCitkc2JhczczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFOCitkc2JhczczNCB0b1NjaSAiK3NOYU4iICAgICAgICAgICAtPiBzTmFOCitkc2JhczczNSB0b1NjaSAiK3NuYW4iICAgICAgICAgICAtPiBzTmFOCitkc2JhczczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFOCitkc2JhczczNyB0b1NjaSAiK1NOQU4iICAgICAgICAgICAtPiBzTmFOCitkc2JhczczOCB0b1NjaSAiLXNOYU4iICAgICAgICAgICAtPiAtc05hTgorZHNiYXM3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4KK2RzYmFzNzQwIHRvU2NpICItU25BbiIgICAgICAgICAgIC0+IC1zTmFOCitkc2Jhczc0MSB0b1NjaSAiLVNOQU4iICAgICAgICAgICAtPiAtc05hTgorZHNiYXM3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTgorZHNiYXM3NDMgdG9TY2kgJ3NOYU43JyAgICAgICAgICAgLT4gc05hTjcKK2RzYmFzNzQ0IHRvU2NpICdzTmFOMDA3MjM0JyAgICAgIC0+IHNOYU43MjM0Citkc2Jhczc0NSB0b1NjaSAnc05hTjcyMzQ1NjEyMzQ1Njc4OTAnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2Jhczc0NyB0b1NjaSAnc05hTi03MicgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZHNiYXM3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzQ5IHRvU2NpICJpbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1MCB0b1NjaSAiaU5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzUyIHRvU2NpICIrSW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1MyB0b1NjaSAiK2luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzU1IHRvU2NpICIrSU5GIiAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1NiB0b1NjaSAiLUluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RzYmFzNzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXM3NTggdG9TY2kgIi1pTmYiICAgICAgICAgICAgLT4gLUluZmluaXR5Citkc2Jhczc1OSB0b1NjaSAiLUlORiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKKworZHNiYXM3NjAgdG9TY2kgIkluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2MiB0b1NjaSAiaU5mSW5JdFkiICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjMgdG9TY2kgIklORklOSVRZIiAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2NSB0b1NjaSAiK2luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjYgdG9TY2kgIitpTmZJbkl0WSIgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2OCB0b1NjaSAiLUluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2RzYmFzNzY5IHRvU2NpICItaW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXM3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5Citkc2Jhczc3MSB0b1NjaSAiLUlORklOSVRZIiAgICAgICAtPiAtSW5maW5pdHkKKworLS0gU3BlY2lhbHMgYW5kIHplcm9zIGZvciB0b0VuZworZHNiYXN0NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc3MyB0b0VuZyAiLUluZmluaXR5IiAgICAgICAgLT4gLUluZmluaXR5Citkc2Jhc3Q3NzQgdG9FbmcgIi1zTmFOIiAgICAgICAgICAgIC0+IC1zTmFOCitkc2Jhc3Q3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4KK2RzYmFzdDc3NiB0b0VuZyAiK0luZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc3OCB0b0VuZyAiK3NOYU4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc4MCB0b0VuZyAiSU5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc4MSB0b0VuZyAiU05BTiIgICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc4MyB0b0VuZyAiaW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc4NCB0b0VuZyAic25hbiIgICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc4NiB0b0VuZyAiSW5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc4NyB0b0VuZyAiU25BTiIgICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc4OSB0b0VuZyAiaU5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc5MCB0b0VuZyAic05hbiIgICAgICAgICAgICAgLT4gc05hTgorZHNiYXN0NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzdDc5MiB0b0VuZyAiSW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzdDc5MyB0b0VuZyAic05hTiIgICAgICAgICAgICAgLT4gc05hTgorCistLSBaZXJvIHRvRW5nLCBldGMuCitkc2Jhc3Q4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQorCitkc2Jhc3Q4MDEgdG9FbmcgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQorZHNiYXN0ODAyIHRvRW5nIDAuMDAwMDAwMDAgICAgICAgIC0+IDAuMDBFLTYKK2RzYmFzdDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYKK2RzYmFzdDgwNCB0b0VuZyAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXN0ODA1IHRvRW5nIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzdDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzdDgwNyB0b0VuZyAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorZHNiYXN0ODA4IHRvRW5nIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDAKK2RzYmFzdDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RzYmFzdDgxMCB0b0VuZyAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RzYmFzdDgxMSB0b0VuZyAwLiAgICAgICAgICAgICAgICAtPiAwCitkc2Jhc3Q4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAorZHNiYXN0ODEzIHRvRW5nIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitkc2Jhc3Q4MTQgdG9FbmcgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMAorZHNiYXN0ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCitkc2Jhc3Q4MTYgdG9FbmcgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitkc2Jhc3Q4MTcgdG9FbmcgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMAorZHNiYXN0ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCitkc2Jhc3Q4MTkgdG9FbmcgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitkc2Jhc3Q4MjAgdG9FbmcgLTAuMDAwMDAwMCAgICAgICAgLT4gLTAuMEUtNgorZHNiYXN0ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02Citkc2Jhc3Q4MjIgdG9FbmcgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKKworZHNiYXN0ODMwIHRvRW5nICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2RzYmFzdDgzMSB0b0VuZyAgMC4wMEUrMSAgICAgICAgICAtPiAwLjAKK2RzYmFzdDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwCitkc2Jhc3Q4MzMgdG9FbmcgIDAuMDBFKzMgICAgICAgICAgLT4gMC4wMEUrMworZHNiYXN0ODM0IHRvRW5nICAwLjAwRSs0ICAgICAgICAgIC0+IDAuMEUrMworZHNiYXN0ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKK2RzYmFzdDgzNiB0b0VuZyAgMC4wMEUrNiAgICAgICAgICAtPiAwLjAwRSs2Citkc2Jhc3Q4MzcgdG9FbmcgIDAuMDBFKzcgICAgICAgICAgLT4gMC4wRSs2Citkc2Jhc3Q4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorZHNiYXN0ODM5IHRvRW5nICAwLjAwRSs5ICAgICAgICAgIC0+IDAuMDBFKzkKKworZHNiYXN0ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAorZHNiYXN0ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2RzYmFzdDg0MiB0b0VuZyAgMC4wRSsyICAgICAgICAgICAtPiAwLjAwRSszCitkc2Jhc3Q4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszCitkc2Jhc3Q4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMworZHNiYXN0ODQ1IHRvRW5nICAwLjBFKzUgICAgICAgICAgIC0+IDAuMDBFKzYKK2RzYmFzdDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYKK2RzYmFzdDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2Citkc2Jhc3Q4NDggdG9FbmcgIDAuMEUrOCAgICAgICAgICAgLT4gMC4wMEUrOQorZHNiYXN0ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQorCitkc2Jhc3Q4NTAgdG9FbmcgIDBFKzAgICAgICAgICAgICAgLT4gMAorZHNiYXN0ODUxIHRvRW5nICAwRSsxICAgICAgICAgICAgIC0+IDAuMDBFKzMKK2RzYmFzdDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMKK2RzYmFzdDg1MyB0b0VuZyAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCitkc2Jhc3Q4NTQgdG9FbmcgIDBFKzQgICAgICAgICAgICAgLT4gMC4wMEUrNgorZHNiYXN0ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNgorZHNiYXN0ODU2IHRvRW5nICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKK2RzYmFzdDg1NyB0b0VuZyAgMEUrNyAgICAgICAgICAgICAtPiAwLjAwRSs5Citkc2Jhc3Q4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5Citkc2Jhc3Q4NTkgdG9FbmcgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitkc2Jhc3Q4NjAgdG9FbmcgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wCitkc2Jhc3Q4NjEgdG9FbmcgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAorZHNiYXN0ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitkc2Jhc3Q4NjMgdG9FbmcgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwCitkc2Jhc3Q4NjQgdG9FbmcgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAorZHNiYXN0ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitkc2Jhc3Q4NjYgdG9FbmcgIDAuMEUtNiAgICAgICAgICAgLT4gMC4wRS02Citkc2Jhc3Q4NjcgdG9FbmcgIDAuMEUtNyAgICAgICAgICAgLT4gMC4wMEUtNgorZHNiYXN0ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKK2RzYmFzdDg2OSB0b0VuZyAgMC4wRS05ICAgICAgICAgICAtPiAwLjBFLTkKKworZHNiYXN0ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKK2RzYmFzdDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorZHNiYXN0ODcyIHRvRW5nICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMAorZHNiYXN0ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzdDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXN0ODc1IHRvRW5nICAwLjAwRS01ICAgICAgICAgIC0+IDAuMEUtNgorZHNiYXN0ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYKK2RzYmFzdDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05Citkc2Jhc3Q4NzggdG9FbmcgIDAuMDBFLTggICAgICAgICAgLT4gMC4wRS05Citkc2Jhc3Q4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQorCistLSBsb25nIGlucHV0IHN0cmluZ3MKK2RzYmFzODAxIHRvc2NpICAgICAgICAgICcwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDIgdG9zY2kgICAgICAgICAnMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwMyB0b3NjaSAgICAgICAgJzAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODA0IHRvc2NpICAgICAgICcwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDUgdG9zY2kgICAgICAnMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwNiB0b3NjaSAgICAgJzAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODA3IHRvc2NpICAgICcwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDggdG9zY2kgICAnMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwOSB0b3NjaSAgJzAwMDAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODEwIHRvc2NpICcwMDAwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworCitkc2JhczgxMSB0b3NjaSAgICAgICAgICAnMC4xMjM0NTY3JyAtPiAgICAgIDAuMTIzNDU2NworZHNiYXM4MTIgdG9zY2kgICAgICAgICAnMC4wMTIzNDU2NycgLT4gICAgIDAuMDEyMzQ1NjcKK2RzYmFzODEzIHRvc2NpICAgICAgICAnMC4wMDEyMzQ1NjcnIC0+ICAgIDAuMDAxMjM0NTY3Citkc2JhczgxNCB0b3NjaSAgICAgICAnMC4wMDAxMjM0NTY3JyAtPiAgIDAuMDAwMTIzNDU2NworZHNiYXM4MTUgdG9zY2kgICAgICAnMC4wMDAwMTIzNDU2NycgLT4gIDAuMDAwMDEyMzQ1NjcKK2RzYmFzODE2IHRvc2NpICAgICAnMC4wMDAwMDEyMzQ1NjcnIC0+IDAuMDAwMDAxMjM0NTY3Citkc2JhczgxNyB0b3NjaSAgICAnMC4wMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtNworZHNiYXM4MTggdG9zY2kgICAnMC4wMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTgKK2RzYmFzODE5IHRvc2NpICAnMC4wMDAwMDAwMDEyMzQ1NjcnIC0+ICAgICAgIDEuMjM0NTY3RS05Citkc2JhczgyMCB0b3NjaSAnMC4wMDAwMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtMTAKKworZHNiYXM4MjEgdG9zY2kgJzEyMzQ1Njc5MCcgICAgICAgICAtPiAxLjIzNDU2OEUrOCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODIyIHRvc2NpICcxMjM0NTY3OTAxJyAgICAgICAgLT4gMS4yMzQ1NjhFKzkgIEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjMgdG9zY2kgJzEyMzQ1Njc5MDEyJyAgICAgICAtPiAxLjIzNDU2OEUrMTAgSW5leGFjdCBSb3VuZGVkCitkc2JhczgyNCB0b3NjaSAnMTIzNDU2NzkwMTIzJyAgICAgIC0+IDEuMjM0NTY4RSsxMSBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODI1IHRvc2NpICcxMjM0NTY3OTAxMjM0JyAgICAgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjYgdG9zY2kgJzEyMzQ1Njc5MDEyMzQ1JyAgICAtPiAxLjIzNDU2OEUrMTMgSW5leGFjdCBSb3VuZGVkCitkc2JhczgyNyB0b3NjaSAnMTIzNDU2NzkwMTIzNDU2JyAgIC0+IDEuMjM0NTY4RSsxNCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODI4IHRvc2NpICcxMjM0NTY3OTAxMjM0NTY3JyAgLT4gMS4yMzQ1NjhFKzE1IEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTYnICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cworZHNiYXM5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MDcgdG9TY2kgJzk5OWU5OTk5OTk5OTknICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkxMCB0b1NjaSAnMC4xZTEwMDAwMDAwMDAnICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MTIgdG9TY2kgJzAuOWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorLS0gbmVnYXRpdmVzIHRoZSBzYW1lCitkc2JhczkxOCB0b1NjaSAnLTk5ZTk5OTk5OTk5OScgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MjMgdG9TY2kgJy0xMGUtMTAwMDAwMDAwMCcgICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyOCB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTk5JyAtPiAtMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTI5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93IHJlc3VsdHMgYXQgZGlmZmVyZW50IHJvdW5kaW5nIG1vZGVzCityb3VuZGluZzogIGNlaWxpbmcKK2RzYmFzOTMwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzMSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgdXAKK2RzYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzMyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBkb3duCitkc2JhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTM1IHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OUUrOTYgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBmbG9vcgorZHNiYXM5MzYgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzNyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfdXAKK2RzYmFzOTM4IHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzOSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RzYmFzOTQwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2Jhczk0MSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RzYmFzOTQyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2Jhczk0MyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogIGhhbGZfZXZlbgorCistLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMAorZHNiZW00MDAgdG9TY2kgIDEuMDAwMEUtODYgICAgIC0+IDEuMDAwMEUtODYKK2RzYmVtNDAxIHRvU2NpICAwLjFFLTk3ICAgICAgICAtPiAxRS05OCAgICAgICBTdWJub3JtYWwKK2RzYmVtNDAyIHRvU2NpICAwLjEwMDBFLTk3ICAgICAtPiAxLjAwMEUtOTggICBTdWJub3JtYWwKK2RzYmVtNDAzIHRvU2NpICAwLjAxMDBFLTk3ICAgICAtPiAxLjAwRS05OSAgICBTdWJub3JtYWwKK2RzYmVtNDA0IHRvU2NpICAwLjAwMTBFLTk3ICAgICAtPiAxLjBFLTEwMCAgICAgU3Vibm9ybWFsCitkc2JlbTQwNSB0b1NjaSAgMC4wMDAxRS05NyAgICAgLT4gMUUtMTAxICAgICAgIFN1Ym5vcm1hbAorZHNiZW00MDYgdG9TY2kgIDAuMDAwMTBFLTk3ICAgIC0+IDFFLTEwMSAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RzYmVtNDA3IHRvU2NpICAwLjAwMDEzRS05NyAgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQwOCB0b1NjaSAgMC4wMDAxNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MDkgdG9TY2kgIDAuMDAwMTdFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDEwIHRvU2NpICAwLjAwMDIzRS05NyAgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxMSB0b1NjaSAgMC4wMDAyNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTIgdG9TY2kgIDAuMDAwMjdFLTk3ICAgIC0+IDNFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtOTcgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTUgdG9TY2kgIDAuMDAwMTUxRS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtOTcgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTggdG9TY2kgIDAuMDAwMjUxRS05NyAgIC0+IDNFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDE5IHRvU2NpICAwLjAwMDA5RS05NyAgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQyMCB0b1NjaSAgMC4wMDAwNUUtOTcgICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQyMSB0b1NjaSAgMC4wMDAwM0UtOTcgICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQyNCB0b1NjaSAgMC4wMDAwMDNFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RzYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtOTcgICAtPiAxLjBFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTk3ICAgLT4gMS4wRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS05NyAgIC0+IDEuMUUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtOTcgICAtPiAxLjFFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTk3ICAgLT4gMS4yRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS05NyAgIC0+IDEuMkUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHNiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS05NyAgIC0+IDEuMDBFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzMgdG9TY2kgIDAuMDEwMDUwRS05NyAgIC0+IDEuMDBFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS05NyAgIC0+IDEuMDFFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS05NyAgIC0+IDEuMDFFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzYgdG9TY2kgIDAuMDEwMTUwRS05NyAgIC0+IDEuMDJFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS05NyAgIC0+IDEuMDJFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkc2JlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtOTcgICAgLT4gMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0MSB0b1NjaSAgMC4xMDEwNUUtOTcgICAgLT4gMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0MiB0b1NjaSAgMC4xMDEwN0UtOTcgICAgLT4gMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0MyB0b1NjaSAgMC4xMDExM0UtOTcgICAgLT4gMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0NCB0b1NjaSAgMC4xMDExNUUtOTcgICAgLT4gMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ0NSB0b1NjaSAgMC4xMDExN0UtOTcgICAgLT4gMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RzYmVtNDUwIHRvU2NpICAxLjEwNzMwRS05OCAgICAtPiAxLjEwN0UtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDUxIHRvU2NpICAxLjEwNzUwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDUyIHRvU2NpICAxLjEwNzcwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDUzIHRvU2NpICAxLjEwODMwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDU0IHRvU2NpICAxLjEwODUwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDU1IHRvU2NpICAxLjEwODcwRS05OCAgICAtPiAxLjEwOUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbWFrZSBzdXJlIHNpZ24gT0sKK2RzYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtOTcgICAtPiAtMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1NyB0b1NjaSAgLTAuMTAxMDVFLTk3ICAgLT4gLTEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NTggdG9TY2kgIC0wLjEwMTA3RS05NyAgIC0+IC0xLjAxMUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtOTcgICAtPiAtMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ2MCB0b1NjaSAgLTAuMTAxMTVFLTk3ICAgLT4gLTEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NjEgdG9TY2kgIC0wLjEwMTE3RS05NyAgIC0+IC0xLjAxMkUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gJzk5OXMnIGNhc2VzCitkc2JlbTQ2NCB0b1NjaSAgOTk5OTk5RS05OCAgICAgICAgIC0+IDkuOTk5OTlFLTkzCitkc2JlbTQ2NSB0b1NjaSAgOTk5OTkuMEUtOTcgICAgICAgIC0+IDkuOTk5OTBFLTkzCitkc2JlbTQ2NiB0b1NjaSAgOTk5OTkuRS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTMKK2RzYmVtNDY3IHRvU2NpICA5OTk5LjlFLTk3ICAgICAgICAgLT4gOS45OTk5RS05NAorZHNiZW00NjggdG9TY2kgIDk5OS45OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk1Citkc2JlbTQ2OSB0b1NjaSAgOTkuOTk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTYgU3Vibm9ybWFsCitkc2JlbTQ3MCB0b1NjaSAgOS45OTk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTcgU3Vibm9ybWFsCitkc2JlbTQ3MSB0b1NjaSAgMC45OTk5OUUtOTcgICAgICAgIC0+IDEuMDAwMEUtOTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtOTcgICAgICAgLT4gMS4wMDBFLTk4ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtOTcgICAgICAtPiAxLjAwRS05OSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtOTcgICAgIC0+IDEuMEUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtOTcgICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtOTcgICAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS05NyAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTk3IC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MKK2RzYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHNiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMEUtMTAxICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXMxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXMxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RzYmFzMTA0MSB0b1NjaSAgICAgMS4xMTUyNDQ0RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RzYmFzMTA0MiB0b1NjaSAgICAgMS4xMTUyNDQ1RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RzYmFzMTA0MyB0b1NjaSAgICAgMS4xMTUyNDQ2RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0KK2RzYmFzMTA3NSB0b1NjaSAgIDBlKzEwMDAwICAtPiAgMEUrOTAgICBDbGFtcGVkCitkc2JhczEwNzYgdG9TY2kgICAwZS0xMDAwMCAgLT4gIDBFLTEwMSAgQ2xhbXBlZAorZHNiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSs5MCAgIENsYW1wZWQKK2RzYmFzMTA3OCB0b1NjaSAgLTBlLTEwMDAwICAtPiAtMEUtMTAxICBDbGFtcGVkCisKKy0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcgorZHNiYXMxMTAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTEwMiB0b1NjaSAtMUUtMzgzIC0+IC0wRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHNiYXMxMTAzIHRvU2NpIC0xRS0zOTggLT4gLTBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkc2JhczExMDQgdG9TY2kgLTAgLT4gLTAKK2RzYmFzMTEwNSB0b1NjaSArMCAtPiAgMAorZHNiYXMxMTA2IHRvU2NpICsxRS0zOTggLT4gIDBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkc2JhczExMDcgdG9TY2kgKzFFLTM4MyAtPiAgMEUtMTAxIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RzYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5hcnJvd2luZyBjYXNlCitkc2JhczExMTAgdG9TY2kgMi4wMDAwMDAwMDAwMDAwMDBFLTk5IC0+IDIuMDBFLTk5IFJvdW5kZWQgU3Vibm9ybWFsCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzRW5jb2RlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzRW5jb2RlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4NTc4YgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNFbmNvZGUuZGVjVGVzdApAQCAtMCwwICsxLDM3MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkc0VuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgZm91ci1ieXRlIGZvcm1hdCB0ZXN0Y2FzZXMgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAwLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDMyLmRlY1Rlc3RdCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgZm91ci1ieXRlIGNvbmNyZXRlIHJlcHJlc2VudGF0aW9uLgorLS0gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmU6CistLQorLS0gIDEgYml0ICBzaWduCistLSAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkCistLSAgNiBiaXRzIGV4cG9uZW50IGNvbnRpbnVhdGlvbgorLS0gMjAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24KKy0tCistLSBUb3RhbCBleHBvbmVudCBsZW5ndGggOCBiaXRzCistLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggMjQgYml0cyAoNyBkaWdpdHMpCistLQorLS0gRWxpbWl0ID0gIDE5MSAobWF4aW11bSBlbmNvZGVkIGV4cG9uZW50KQorLS0gRW1heCAgID0gICA5NiAobGFyZ2VzdCBleHBvbmVudCB2YWx1ZSkKKy0tIEVtaW4gICA9ICAtOTUgKHNtYWxsZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gYmlhcyAgID0gIDEwMSAoc3VidHJhY3RlZCBmcm9tIGVuY29kZWQgZXhwb25lbnQpID0gLUV0aW55CisKKy0tIFRoZSB0ZXN0Y2FzZXMgaGVyZSBoYXZlIG9ubHkgZXhhY3RseSByZXByZXNlbnRhYmxlIGRhdGEgb24gdGhlCistLSAnbGVmdC1oYW5kLXNpZGUnOyByb3VuZGluZyBmcm9tIHN0cmluZ3MgaXMgdGVzdGVkIGluICdiYXNlJworLS0gdGVzdGNhc2UgZ3JvdXBzLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICA3Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk2CittaW5FeHBvbmVudDogLTk1CisKKy0tIEdlbmVyYWwgdGVzdGNhc2VzCistLSAobW9zdGx5IGRlcml2ZWQgZnJvbSB0aGUgU3RyYXdtYW4gNCBkb2N1bWVudCBhbmQgZXhhbXBsZXMpCitkZWNzMDAxIGFwcGx5ICAgI0EyMzAwM0QwICAgICAgICAgIC0+IC03LjUwCitkZWNzMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgIC0+ICNBMjMwMDNEMAorLS0gZGVyaXZhdGl2ZSBjYW5vbmljYWwgcGxhaW4gc3RyaW5ncworZGVjczAwMyBhcHBseSAgICNBMjYwMDNEMCAgICAgICAgIC0+IC03LjUwRSszCitkZWNzMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyNjAwM0QwCitkZWNzMDA1IGFwcGx5ICAgI0EyNTAwM0QwICAgICAgICAgLT4gLTc1MAorZGVjczAwNiBhcHBseSAgIC03NTAgICAgICAgICAgICAgIC0+ICNBMjUwMDNEMAorZGVjczAwNyBhcHBseSAgICNBMjQwMDNEMCAgICAgICAgIC0+IC03NS4wCitkZWNzMDA4IGFwcGx5ICAgLTc1LjAgICAgICAgICAgICAgLT4gI0EyNDAwM0QwCitkZWNzMDA5IGFwcGx5ICAgI0EyMjAwM0QwICAgICAgICAgLT4gLTAuNzUwCitkZWNzMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMjAwM0QwCitkZWNzMDExIGFwcGx5ICAgI0EyMTAwM0QwICAgICAgICAgLT4gLTAuMDc1MAorZGVjczAxMiBhcHBseSAgIC0wLjA3NTAgICAgICAgICAgIC0+ICNBMjEwMDNEMAorZGVjczAxMyBhcHBseSAgICNBMWYwMDNEMCAgICAgICAgIC0+IC0wLjAwMDc1MAorZGVjczAxNCBhcHBseSAgIC0wLjAwMDc1MCAgICAgICAgIC0+ICNBMWYwMDNEMAorZGVjczAxNSBhcHBseSAgICNBMWQwMDNEMCAgICAgICAgIC0+IC0wLjAwMDAwNzUwCitkZWNzMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0ExZDAwM0QwCitkZWNzMDE3IGFwcGx5ICAgI0ExYzAwM0QwICAgICAgICAgLT4gLTcuNTBFLTcKK2RlY3MwMTggYXBwbHkgICAtNy41MEUtNyAgICAgICAgICAtPiAjQTFjMDAzRDAKKworLS0gTm9ybWFsaXR5CitkZWNzMDIwIGFwcGx5ICAgMTIzNDU2NyAgICAgICAgICAgIC0+ICMyNjU0ZDJlNworZGVjczAyMSBhcHBseSAgLTEyMzQ1NjcgICAgICAgICAgICAtPiAjYTY1NGQyZTcKK2RlY3MwMjIgYXBwbHkgICAxMTExMTExICAgICAgICAgICAgLT4gIzI2NTI0NDkxCisKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY3MwMzEgYXBwbHkgICA5Ljk5OTk5OUUrOTYgICAgICAgICAgICAtPiAjNzdmM2ZjZmYKK2RlY3MwMzIgYXBwbHkgICAjNzdmM2ZjZmYgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OUUrOTYKK2RlY3MwMzMgYXBwbHkgICAxLjIzNDU2N0UrOTYgICAgICAgICAgICAtPiAjNDdmNGQyZTcKK2RlY3MwMzQgYXBwbHkgICAjNDdmNGQyZTcgICAgICAgICAgICAgICAtPiAxLjIzNDU2N0UrOTYKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitkZWNzMDM1IGFwcGx5ICAgMS4yM0UrOTYgICAgICAgICAgICAgICAgLT4gIzQ3ZjRjMDAwIENsYW1wZWQKK2RlY3MwMzYgYXBwbHkgICAjNDdmNGMwMDAgICAgICAgICAgICAgICAtPiAxLjIzMDAwMEUrOTYKK2RlY3MwMzcgYXBwbHkgICAxRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjNDdmMDAwMDAgQ2xhbXBlZAorZGVjczAzOCBhcHBseSAgICM0N2YwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRSs5NgorCitkZWNzMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gIzIyNTA0OWM1CitkZWNzMDUyIGFwcGx5ICAgIzIyNTA0OWM1ICAgICAgICAgICAgICAgLT4gMTIzNDUKK2RlY3MwNTMgYXBwbHkgICAxMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDA1MzQKK2RlY3MwNTQgYXBwbHkgICAjMjI1MDA1MzQgICAgICAgICAgICAgICAtPiAxMjM0CitkZWNzMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMGEzCitkZWNzMDU2IGFwcGx5ICAgIzIyNTAwMGEzICAgICAgICAgICAgICAgLT4gMTIzCitkZWNzMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMDEyCitkZWNzMDU4IGFwcGx5ICAgIzIyNTAwMDEyICAgICAgICAgICAgICAgLT4gMTIKK2RlY3MwNTkgYXBwbHkgICAxICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwMDEKK2RlY3MwNjAgYXBwbHkgICAjMjI1MDAwMDEgICAgICAgICAgICAgICAtPiAxCitkZWNzMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMGEzCitkZWNzMDYyIGFwcGx5ICAgIzIyMzAwMGEzICAgICAgICAgICAgICAgLT4gMS4yMworZGVjczA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICMyMjMwNDljNQorZGVjczA2NCBhcHBseSAgICMyMjMwNDljNSAgICAgICAgICAgICAgIC0+IDEyMy40NQorCistLSBObWluIGFuZCBiZWxvdworZGVjczA3MSBhcHBseSAgIDFFLTk1ICAgICAgICAgICAgICAgICAgIC0+ICMwMDYwMDAwMQorZGVjczA3MiBhcHBseSAgICMwMDYwMDAwMSAgICAgICAgICAgICAgIC0+IDFFLTk1CitkZWNzMDczIGFwcGx5ICAgMS4wMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzA0MDAwMDAwCitkZWNzMDc0IGFwcGx5ICAgIzA0MDAwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFLTk1CitkZWNzMDc1IGFwcGx5ICAgMS4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzA0MDAwMDAxCitkZWNzMDc2IGFwcGx5ICAgIzA0MDAwMDAxICAgICAgICAgICAgICAgLT4gMS4wMDAwMDFFLTk1CisKK2RlY3MwNzcgYXBwbHkgICAwLjEwMDAwMEUtOTUgICAgICAgICAgICAtPiAjMDAwMjAwMDAgICAgIFN1Ym5vcm1hbAorZGVjczA3eCBhcHBseSAgIDEuMDAwMDBFLTk2ICAgICAgICAgICAgIC0+IDEuMDAwMDBFLTk2ICAgU3Vibm9ybWFsCitkZWNzMDc4IGFwcGx5ICAgIzAwMDIwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMEUtOTYgICBTdWJub3JtYWwKK2RlY3MwNzkgYXBwbHkgICAwLjAwMDAxMEUtOTUgICAgICAgICAgICAtPiAjMDAwMDAwMTAgICAgIFN1Ym5vcm1hbAorZGVjczA4MCBhcHBseSAgICMwMDAwMDAxMCAgICAgICAgICAgICAgIC0+IDEuMEUtMTAwICAgICAgU3Vibm9ybWFsCitkZWNzMDgxIGFwcGx5ICAgMC4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDAxICAgICBTdWJub3JtYWwKK2RlY3MwODIgYXBwbHkgICAjMDAwMDAwMDEgICAgICAgICAgICAgICAtPiAxRS0xMDEgICAgICAgIFN1Ym5vcm1hbAorZGVjczA4MyBhcHBseSAgIDFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMSAgICAgU3Vibm9ybWFsCitkZWNzMDg0IGFwcGx5ICAgIzAwMDAwMDAxICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwKK2RlY3MwOHggYXBwbHkgICAxZS0xMDEgICAgICAgICAgICAgICAgICAtPiAxRS0xMDEgICAgICAgIFN1Ym5vcm1hbAorCistLSB1bmRlcmZsb3dzIGNhbm5vdCBiZSB0ZXN0ZWQ7IGp1c3QgY2hlY2sgZWRnZSBjYXNlCitkZWNzMDkwIGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAxICBTdWJub3JtYWwKKworLS0gc2FtZSBhZ2FpbiwgbmVnYXRpdmVzIC0tCisKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY3MxMjIgYXBwbHkgIC05Ljk5OTk5OUUrOTYgICAgICAgICAgICAtPiAjZjdmM2ZjZmYKK2RlY3MxMjMgYXBwbHkgICAjZjdmM2ZjZmYgICAgICAgICAgICAgICAtPiAtOS45OTk5OTlFKzk2CitkZWNzMTI0IGFwcGx5ICAtMS4yMzQ1NjdFKzk2ICAgICAgICAgICAgLT4gI2M3ZjRkMmU3CitkZWNzMTI1IGFwcGx5ICAgI2M3ZjRkMmU3ICAgICAgICAgICAgICAgLT4gLTEuMjM0NTY3RSs5NgorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY3MxMzAgYXBwbHkgIC0xLjIzRSs5NiAgICAgICAgICAgICAgICAtPiAjYzdmNGMwMDAgQ2xhbXBlZAorZGVjczEzMSBhcHBseSAgICNjN2Y0YzAwMCAgICAgICAgICAgICAgIC0+IC0xLjIzMDAwMEUrOTYKK2RlY3MxMzIgYXBwbHkgIC0xRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjYzdmMDAwMDAgQ2xhbXBlZAorZGVjczEzMyBhcHBseSAgICNjN2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMEUrOTYKKworZGVjczE1MSBhcHBseSAgLTEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwNDljNQorZGVjczE1MiBhcHBseSAgICNhMjUwNDljNSAgICAgICAgICAgICAgIC0+IC0xMjM0NQorZGVjczE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDUzNAorZGVjczE1NCBhcHBseSAgICNhMjUwMDUzNCAgICAgICAgICAgICAgIC0+IC0xMjM0CitkZWNzMTU1IGFwcGx5ICAtMTIzICAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwMGEzCitkZWNzMTU2IGFwcGx5ICAgI2EyNTAwMGEzICAgICAgICAgICAgICAgLT4gLTEyMworZGVjczE1NyBhcHBseSAgLTEyICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDAxMgorZGVjczE1OCBhcHBseSAgICNhMjUwMDAxMiAgICAgICAgICAgICAgIC0+IC0xMgorZGVjczE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDAwMQorZGVjczE2MCBhcHBseSAgICNhMjUwMDAwMSAgICAgICAgICAgICAgIC0+IC0xCitkZWNzMTYxIGFwcGx5ICAtMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzAwMGEzCitkZWNzMTYyIGFwcGx5ICAgI2EyMzAwMGEzICAgICAgICAgICAgICAgLT4gLTEuMjMKK2RlY3MxNjMgYXBwbHkgIC0xMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjYTIzMDQ5YzUKK2RlY3MxNjQgYXBwbHkgICAjYTIzMDQ5YzUgICAgICAgICAgICAgICAtPiAtMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitkZWNzMTcxIGFwcGx5ICAtMUUtOTUgICAgICAgICAgICAgICAgICAgLT4gIzgwNjAwMDAxCitkZWNzMTcyIGFwcGx5ICAgIzgwNjAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTk1CitkZWNzMTczIGFwcGx5ICAtMS4wMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzg0MDAwMDAwCitkZWNzMTc0IGFwcGx5ICAgIzg0MDAwMDAwICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwRS05NQorZGVjczE3NSBhcHBseSAgLTEuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICM4NDAwMDAwMQorZGVjczE3NiBhcHBseSAgICM4NDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMUUtOTUKKworZGVjczE3NyBhcHBseSAgLTAuMTAwMDAwRS05NSAgICAgICAgICAgIC0+ICM4MDAyMDAwMCAgICAgU3Vibm9ybWFsCitkZWNzMTc4IGFwcGx5ICAgIzgwMDIwMDAwICAgICAgICAgICAgICAgLT4gLTEuMDAwMDBFLTk2ICBTdWJub3JtYWwKK2RlY3MxNzkgYXBwbHkgIC0wLjAwMDAxMEUtOTUgICAgICAgICAgICAtPiAjODAwMDAwMTAgICAgIFN1Ym5vcm1hbAorZGVjczE4MCBhcHBseSAgICM4MDAwMDAxMCAgICAgICAgICAgICAgIC0+IC0xLjBFLTEwMCAgICAgU3Vibm9ybWFsCitkZWNzMTgxIGFwcGx5ICAtMC4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzgwMDAwMDAxICAgICBTdWJub3JtYWwKK2RlY3MxODIgYXBwbHkgICAjODAwMDAwMDEgICAgICAgICAgICAgICAtPiAtMUUtMTAxICAgICAgIFN1Ym5vcm1hbAorZGVjczE4MyBhcHBseSAgLTFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgICAgU3Vibm9ybWFsCitkZWNzMTg0IGFwcGx5ICAgIzgwMDAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTEwMSAgICAgICBTdWJub3JtYWwKKworLS0gdW5kZXJmbG93IGVkZ2UgY2FzZQorZGVjczE5MCBhcHBseSAgLTFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgU3Vibm9ybWFsCisKKy0tIHplcm9zCitkZWNzNDAwIGFwcGx5ICAgMEUtNDAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwICBDbGFtcGVkCitkZWNzNDAxIGFwcGx5ICAgMEUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwCitkZWNzNDAyIGFwcGx5ICAgIzAwMDAwMDAwICAgICAgICAgICAgICAgLT4gMEUtMTAxCitkZWNzNDAzIGFwcGx5ICAgMC4wMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDAwCitkZWNzNDA0IGFwcGx5ICAgIzAwMDAwMDAwICAgICAgICAgICAgICAgLT4gMEUtMTAxCitkZWNzNDA1IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwCitkZWNzNDA2IGFwcGx5ICAgIzIyMzAwMDAwICAgICAgICAgICAgICAgLT4gMC4wMAorZGVjczQwNyBhcHBseSAgIDAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwMDAwMAorZGVjczQwOCBhcHBseSAgICMyMjUwMDAwMCAgICAgICAgICAgICAgIC0+IDAKK2RlY3M0MDkgYXBwbHkgICAwRSszICAgICAgICAgICAgICAgICAgICAtPiAjMjI4MDAwMDAKK2RlY3M0MTAgYXBwbHkgICAjMjI4MDAwMDAgICAgICAgICAgICAgICAtPiAwRSszCitkZWNzNDExIGFwcGx5ICAgMEUrOTAgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwCitkZWNzNDEyIGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTAKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY3M0MTMgYXBwbHkgICAwRSs5MSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDAgIENsYW1wZWQKK2RlY3M0MTQgYXBwbHkgICAjNDNmMDAwMDAgICAgICAgICAgICAgICAtPiAwRSs5MAorZGVjczQxNSBhcHBseSAgIDBFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMCAgQ2xhbXBlZAorZGVjczQxNiBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwCitkZWNzNDE3IGFwcGx5ICAgMEUrNDAwICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwICBDbGFtcGVkCitkZWNzNDE4IGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTAKKworLS0gbmVnYXRpdmUgemVyb3MKK2RlY3M0MjAgYXBwbHkgICAtMEUtNDAwICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAgIENsYW1wZWQKK2RlY3M0MjEgYXBwbHkgICAtMEUtMTAxICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAKK2RlY3M0MjIgYXBwbHkgICAjODAwMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUtMTAxCitkZWNzNDIzIGFwcGx5ICAgLTAuMDAwMDAwRS05NSAgICAgICAgICAgLT4gIzgwMDAwMDAwCitkZWNzNDI0IGFwcGx5ICAgIzgwMDAwMDAwICAgICAgICAgICAgICAgLT4gLTBFLTEwMQorZGVjczQyNSBhcHBseSAgIC0wRS0yICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMAorZGVjczQyNiBhcHBseSAgICNhMjMwMDAwMCAgICAgICAgICAgICAgIC0+IC0wLjAwCitkZWNzNDI3IGFwcGx5ICAgLTAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwMDAwCitkZWNzNDI4IGFwcGx5ICAgI2EyNTAwMDAwICAgICAgICAgICAgICAgLT4gLTAKK2RlY3M0MjkgYXBwbHkgICAtMEUrMyAgICAgICAgICAgICAgICAgICAtPiAjYTI4MDAwMDAKK2RlY3M0MzAgYXBwbHkgICAjYTI4MDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrMworZGVjczQzMSBhcHBseSAgIC0wRSs5MCAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMAorZGVjczQzMiBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MAorLS0gY2xhbXBlZCB6ZXJvcy4uLgorZGVjczQzMyBhcHBseSAgIC0wRSs5MSAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMCAgQ2xhbXBlZAorZGVjczQzNCBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MAorZGVjczQzNSBhcHBseSAgIC0wRSs5NiAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMCAgQ2xhbXBlZAorZGVjczQzNiBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MAorZGVjczQzNyBhcHBseSAgIC0wRSs0MDAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMCAgQ2xhbXBlZAorZGVjczQzOCBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MAorCistLSBTcGVjaWFscworZGVjczUwMCBhcHBseSAgIEluZmluaXR5ICAtPiAjNzgwMDAwMDAKK2RlY3M1MDEgYXBwbHkgICAjNzg3ODc4NzggLT4gIzc4MDAwMDAwCitkZWNzNTAyIGFwcGx5ICAgIzc4MDAwMDAwIC0+IEluZmluaXR5CitkZWNzNTAzIGFwcGx5ICAgIzc5Nzk3OTc5IC0+ICM3ODAwMDAwMAorZGVjczUwNCBhcHBseSAgICM3OTAwMDAwMCAtPiBJbmZpbml0eQorZGVjczUwNSBhcHBseSAgICM3YTdhN2E3YSAtPiAjNzgwMDAwMDAKK2RlY3M1MDYgYXBwbHkgICAjN2EwMDAwMDAgLT4gSW5maW5pdHkKK2RlY3M1MDcgYXBwbHkgICAjN2I3YjdiN2IgLT4gIzc4MDAwMDAwCitkZWNzNTA4IGFwcGx5ICAgIzdiMDAwMDAwIC0+IEluZmluaXR5CitkZWNzNTA5IGFwcGx5ICAgIzdjN2M3YzdjIC0+ICM3YzBjN2M3YworCitkZWNzNTEwIGFwcGx5ICAgTmFOICAgICAgIC0+ICM3YzAwMDAwMAorZGVjczUxMSBhcHBseSAgICM3YzAwMDAwMCAtPiBOYU4KK2RlY3M1MTIgYXBwbHkgICAjN2Q3ZDdkN2QgLT4gIzdjMGQ3ZDdkCitkZWNzNTEzIGFwcGx5ICAgIzdkMDAwMDAwIC0+IE5hTgorZGVjczUxNCBhcHBseSAgICM3ZTdlN2U3ZSAtPiAjN2UwZTdjN2UKK2RlY3M1MTUgYXBwbHkgICAjN2UwMDAwMDAgLT4gc05hTgorZGVjczUxNiBhcHBseSAgICM3ZjdmN2Y3ZiAtPiAjN2UwZjdjN2YKK2RlY3M1MTcgYXBwbHkgICAjN2YwMDAwMDAgLT4gc05hTgorZGVjczUxOCBhcHBseSAgICM3ZmZmZmZmZiAtPiBzTmFOOTk5OTk5CitkZWNzNTE5IGFwcGx5ICAgIzdmZmZmZmZmIC0+ICM3ZTAzZmNmZgorCitkZWNzNTIwIGFwcGx5ICAgLUluZmluaXR5IC0+ICNmODAwMDAwMAorZGVjczUyMSBhcHBseSAgICNmODc4Nzg3OCAtPiAjZjgwMDAwMDAKK2RlY3M1MjIgYXBwbHkgICAjZjgwMDAwMDAgLT4gLUluZmluaXR5CitkZWNzNTIzIGFwcGx5ICAgI2Y5Nzk3OTc5IC0+ICNmODAwMDAwMAorZGVjczUyNCBhcHBseSAgICNmOTAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY3M1MjUgYXBwbHkgICAjZmE3YTdhN2EgLT4gI2Y4MDAwMDAwCitkZWNzNTI2IGFwcGx5ICAgI2ZhMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjczUyNyBhcHBseSAgICNmYjdiN2I3YiAtPiAjZjgwMDAwMDAKK2RlY3M1MjggYXBwbHkgICAjZmIwMDAwMDAgLT4gLUluZmluaXR5CisKK2RlY3M1MjkgYXBwbHkgICAtTmFOICAgICAgLT4gI2ZjMDAwMDAwCitkZWNzNTMwIGFwcGx5ICAgI2ZjN2M3YzdjIC0+ICNmYzBjN2M3YworZGVjczUzMSBhcHBseSAgICNmYzAwMDAwMCAtPiAtTmFOCitkZWNzNTMyIGFwcGx5ICAgI2ZkN2Q3ZDdkIC0+ICNmYzBkN2Q3ZAorZGVjczUzMyBhcHBseSAgICNmZDAwMDAwMCAtPiAtTmFOCitkZWNzNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlIC0+ICNmZTBlN2M3ZQorZGVjczUzNSBhcHBseSAgICNmZTAwMDAwMCAtPiAtc05hTgorZGVjczUzNiBhcHBseSAgICNmZjdmN2Y3ZiAtPiAjZmUwZjdjN2YKK2RlY3M1MzcgYXBwbHkgICAjZmYwMDAwMDAgLT4gLXNOYU4KK2RlY3M1MzggYXBwbHkgICAjZmZmZmZmZmYgLT4gLXNOYU45OTk5OTkKK2RlY3M1MzkgYXBwbHkgICAjZmZmZmZmZmYgLT4gI2ZlMDNmY2ZmCisKKy0tIGRpYWdub3N0aWMgTmFOcworZGVjczU0MCBhcHBseSAgIE5hTiAgICAgICAtPiAjN2MwMDAwMDAKK2RlY3M1NDEgYXBwbHkgICBOYU4wICAgICAgLT4gIzdjMDAwMDAwCitkZWNzNTQyIGFwcGx5ICAgTmFOMSAgICAgIC0+ICM3YzAwMDAwMQorZGVjczU0MyBhcHBseSAgIE5hTjEyICAgICAtPiAjN2MwMDAwMTIKK2RlY3M1NDQgYXBwbHkgICBOYU43OSAgICAgLT4gIzdjMDAwMDc5CitkZWNzNTQ1IGFwcGx5ICAgTmFOMTIzNDUgICAtPiAjN2MwMDQ5YzUKK2RlY3M1NDYgYXBwbHkgICBOYU4xMjM0NTYgIC0+ICM3YzAyOGU1NgorZGVjczU0NyBhcHBseSAgIE5hTjc5OTc5OSAgLT4gIzdjMGY3ZmRmCitkZWNzNTQ4IGFwcGx5ICAgTmFOOTk5OTk5ICAtPiAjN2MwM2ZjZmYKKworCistLSBmb2xkLWRvd24gZnVsbCBzZXF1ZW5jZQorZGVjczYwMSBhcHBseSAgIDFFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICM0N2YwMDAwMCBDbGFtcGVkCitkZWNzNjAyIGFwcGx5ICAgIzQ3ZjAwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFKzk2CitkZWNzNjAzIGFwcGx5ICAgMUUrOTUgICAgICAgICAgICAgICAgICAgLT4gIzQzZjIwMDAwIENsYW1wZWQKK2RlY3M2MDQgYXBwbHkgICAjNDNmMjAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwRSs5NQorZGVjczYwNSBhcHBseSAgIDFFKzk0ICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwNDAwMCBDbGFtcGVkCitkZWNzNjA2IGFwcGx5ICAgIzQzZjA0MDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwRSs5NAorZGVjczYwNyBhcHBseSAgIDFFKzkzICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDQwMCBDbGFtcGVkCitkZWNzNjA4IGFwcGx5ICAgIzQzZjAwNDAwICAgICAgICAgICAgICAgLT4gMS4wMDBFKzkzCitkZWNzNjA5IGFwcGx5ICAgMUUrOTIgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDgwIENsYW1wZWQKK2RlY3M2MTAgYXBwbHkgICAjNDNmMDAwODAgICAgICAgICAgICAgICAtPiAxLjAwRSs5MgorZGVjczYxMSBhcHBseSAgIDFFKzkxICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAxMCBDbGFtcGVkCitkZWNzNjEyIGFwcGx5ICAgIzQzZjAwMDEwICAgICAgICAgICAgICAgLT4gMS4wRSs5MQorZGVjczYxMyBhcHBseSAgIDFFKzkwICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMQorZGVjczYxNCBhcHBseSAgICM0M2YwMDAwMSAgICAgICAgICAgICAgIC0+IDFFKzkwCisKKworLS0gU2VsZWN0ZWQgRFBEIGNvZGVzCitkZWNzNzAwIGFwcGx5ICAgIzIyNTAwMDAwICAgICAgIC0+IDAKK2RlY3M3MDEgYXBwbHkgICAjMjI1MDAwMDkgICAgICAgLT4gOQorZGVjczcwMiBhcHBseSAgICMyMjUwMDAxMCAgICAgICAtPiAxMAorZGVjczcwMyBhcHBseSAgICMyMjUwMDAxOSAgICAgICAtPiAxOQorZGVjczcwNCBhcHBseSAgICMyMjUwMDAyMCAgICAgICAtPiAyMAorZGVjczcwNSBhcHBseSAgICMyMjUwMDAyOSAgICAgICAtPiAyOQorZGVjczcwNiBhcHBseSAgICMyMjUwMDAzMCAgICAgICAtPiAzMAorZGVjczcwNyBhcHBseSAgICMyMjUwMDAzOSAgICAgICAtPiAzOQorZGVjczcwOCBhcHBseSAgICMyMjUwMDA0MCAgICAgICAtPiA0MAorZGVjczcwOSBhcHBseSAgICMyMjUwMDA0OSAgICAgICAtPiA0OQorZGVjczcxMCBhcHBseSAgICMyMjUwMDA1MCAgICAgICAtPiA1MAorZGVjczcxMSBhcHBseSAgICMyMjUwMDA1OSAgICAgICAtPiA1OQorZGVjczcxMiBhcHBseSAgICMyMjUwMDA2MCAgICAgICAtPiA2MAorZGVjczcxMyBhcHBseSAgICMyMjUwMDA2OSAgICAgICAtPiA2OQorZGVjczcxNCBhcHBseSAgICMyMjUwMDA3MCAgICAgICAtPiA3MAorZGVjczcxNSBhcHBseSAgICMyMjUwMDA3MSAgICAgICAtPiA3MQorZGVjczcxNiBhcHBseSAgICMyMjUwMDA3MiAgICAgICAtPiA3MgorZGVjczcxNyBhcHBseSAgICMyMjUwMDA3MyAgICAgICAtPiA3MworZGVjczcxOCBhcHBseSAgICMyMjUwMDA3NCAgICAgICAtPiA3NAorZGVjczcxOSBhcHBseSAgICMyMjUwMDA3NSAgICAgICAtPiA3NQorZGVjczcyMCBhcHBseSAgICMyMjUwMDA3NiAgICAgICAtPiA3NgorZGVjczcyMSBhcHBseSAgICMyMjUwMDA3NyAgICAgICAtPiA3NworZGVjczcyMiBhcHBseSAgICMyMjUwMDA3OCAgICAgICAtPiA3OAorZGVjczcyMyBhcHBseSAgICMyMjUwMDA3OSAgICAgICAtPiA3OQorCitkZWNzNzMwIGFwcGx5ICAgIzIyNTAwMjllICAgICAgIC0+IDk5NAorZGVjczczMSBhcHBseSAgICMyMjUwMDI5ZiAgICAgICAtPiA5OTUKK2RlY3M3MzIgYXBwbHkgICAjMjI1MDAyYTAgICAgICAgLT4gNTIwCitkZWNzNzMzIGFwcGx5ICAgIzIyNTAwMmExICAgICAgIC0+IDUyMQorCistLSBEUEQ6IG9uZSBvZiBlYWNoIG9mIHRoZSBodWZmbWFuIGdyb3VwcworZGVjczc0MCBhcHBseSAgICMyMjUwMDNmNyAgICAgICAtPiA3NzcKK2RlY3M3NDEgYXBwbHkgICAjMjI1MDAzZjggICAgICAgLT4gNzc4CitkZWNzNzQyIGFwcGx5ICAgIzIyNTAwM2ViICAgICAgIC0+IDc4NworZGVjczc0MyBhcHBseSAgICMyMjUwMDM3ZCAgICAgICAtPiA4NzcKK2RlY3M3NDQgYXBwbHkgICAjMjI1MDAzOWYgICAgICAgLT4gOTk3CitkZWNzNzQ1IGFwcGx5ICAgIzIyNTAwM2JmICAgICAgIC0+IDk3OQorZGVjczc0NiBhcHBseSAgICMyMjUwMDNkZiAgICAgICAtPiA3OTkKK2RlY3M3NDcgYXBwbHkgICAjMjI1MDAwNmUgICAgICAgLT4gODg4CisKKworLS0gRFBEIGFsbC1oaWdocyBjYXNlcyAoaW5jbHVkZXMgdGhlIDI0IHJlZHVuZGFudCBjb2RlcykKK2RlY3M3NTAgYXBwbHkgICAjMjI1MDAwNmUgICAgICAgLT4gODg4CitkZWNzNzUxIGFwcGx5ICAgIzIyNTAwMTZlICAgICAgIC0+IDg4OAorZGVjczc1MiBhcHBseSAgICMyMjUwMDI2ZSAgICAgICAtPiA4ODgKK2RlY3M3NTMgYXBwbHkgICAjMjI1MDAzNmUgICAgICAgLT4gODg4CitkZWNzNzU0IGFwcGx5ICAgIzIyNTAwMDZmICAgICAgIC0+IDg4OQorZGVjczc1NSBhcHBseSAgICMyMjUwMDE2ZiAgICAgICAtPiA4ODkKK2RlY3M3NTYgYXBwbHkgICAjMjI1MDAyNmYgICAgICAgLT4gODg5CitkZWNzNzU3IGFwcGx5ICAgIzIyNTAwMzZmICAgICAgIC0+IDg4OQorCitkZWNzNzYwIGFwcGx5ICAgIzIyNTAwMDdlICAgICAgIC0+IDg5OAorZGVjczc2MSBhcHBseSAgICMyMjUwMDE3ZSAgICAgICAtPiA4OTgKK2RlY3M3NjIgYXBwbHkgICAjMjI1MDAyN2UgICAgICAgLT4gODk4CitkZWNzNzYzIGFwcGx5ICAgIzIyNTAwMzdlICAgICAgIC0+IDg5OAorZGVjczc2NCBhcHBseSAgICMyMjUwMDA3ZiAgICAgICAtPiA4OTkKK2RlY3M3NjUgYXBwbHkgICAjMjI1MDAxN2YgICAgICAgLT4gODk5CitkZWNzNzY2IGFwcGx5ICAgIzIyNTAwMjdmICAgICAgIC0+IDg5OQorZGVjczc2NyBhcHBseSAgICMyMjUwMDM3ZiAgICAgICAtPiA4OTkKKworZGVjczc3MCBhcHBseSAgICMyMjUwMDBlZSAgICAgICAtPiA5ODgKK2RlY3M3NzEgYXBwbHkgICAjMjI1MDAxZWUgICAgICAgLT4gOTg4CitkZWNzNzcyIGFwcGx5ICAgIzIyNTAwMmVlICAgICAgIC0+IDk4OAorZGVjczc3MyBhcHBseSAgICMyMjUwMDNlZSAgICAgICAtPiA5ODgKK2RlY3M3NzQgYXBwbHkgICAjMjI1MDAwZWYgICAgICAgLT4gOTg5CitkZWNzNzc1IGFwcGx5ICAgIzIyNTAwMWVmICAgICAgIC0+IDk4OQorZGVjczc3NiBhcHBseSAgICMyMjUwMDJlZiAgICAgICAtPiA5ODkKK2RlY3M3NzcgYXBwbHkgICAjMjI1MDAzZWYgICAgICAgLT4gOTg5CisKK2RlY3M3ODAgYXBwbHkgICAjMjI1MDAwZmUgICAgICAgLT4gOTk4CitkZWNzNzgxIGFwcGx5ICAgIzIyNTAwMWZlICAgICAgIC0+IDk5OAorZGVjczc4MiBhcHBseSAgICMyMjUwMDJmZSAgICAgICAtPiA5OTgKK2RlY3M3ODMgYXBwbHkgICAjMjI1MDAzZmUgICAgICAgLT4gOTk4CitkZWNzNzg0IGFwcGx5ICAgIzIyNTAwMGZmICAgICAgIC0+IDk5OQorZGVjczc4NSBhcHBseSAgICMyMjUwMDFmZiAgICAgICAtPiA5OTkKK2RlY3M3ODYgYXBwbHkgICAjMjI1MDAyZmYgICAgICAgLT4gOTk5CitkZWNzNzg3IGFwcGx5ICAgIzIyNTAwM2ZmICAgICAgIC0+IDk5OQorCistLSBuYXJyb3dpbmcgY2FzZQorZGVjczc5MCBhcHBseSAyLjAwRS05OSAtPiAjMDAwMDAxMDAgU3Vibm9ybWFsCitkZWNzNzkxIGFwcGx5ICMwMDAwMDEwMCAtPiAyLjAwRS05OSBTdWJub3JtYWwKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXhwLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjk5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0CkBAIC0wLDAgKzEsNjc0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGV4cC5kZWNUZXN0IC0tIGRlY2ltYWwgbmF0dXJhbCBleHBvbmVudGlhdGlvbiAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGVzdHMgb2YgdGhlIGV4cG9uZW50aWFsIGZ1bnRpb24uICBDdXJyZW50bHkgYWxsIHRlc3RjYXNlcyBoZXJlCistLSBzaG93IHJlc3VsdHMgd2hpY2ggYXJlIGNvcnJlY3RseSByb3VuZGVkICh3aXRoaW4gPD0gMC41IHVscCkuCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gYmFzaWNzIChleGFtcGxlcyBpbiBzcGVjaWZpY2lhdGlvbiwgZXRjLikKK2V4cHgwMDEgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKK2V4cHgwMDIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDQ1Mzk5OTI5OCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMDMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuMzY3ODc5NDQxIEluZXhhY3QgUm91bmRlZAorZXhweDAwNCBleHAgICAwICAgICAgICAgICAgLT4gMQorZXhweDAwNSBleHAgIC0wICAgICAgICAgICAgLT4gMQorZXhweDAwNiBleHAgICAxICAgICAgICAgICAgLT4gMi43MTgyODE4MyAgSW5leGFjdCBSb3VuZGVkCitleHB4MDA3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyLjAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMDggZXhwICAgMTAgICAgICAgICAgIC0+IDIyMDI2LjQ2NTggIEluZXhhY3QgUm91bmRlZAorZXhweDAwOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkKKworLS0gdGlueSBlZGdlIGNhc2VzCitwcmVjaXNpb246ICAgNworZXhweDAxMSBleHAgIDAuMSAgICAgICAgICAtPiAgMS4xMDUxNzEgIEluZXhhY3QgUm91bmRlZAorZXhweDAxMiBleHAgIDAuMDEgICAgICAgICAtPiAgMS4wMTAwNTAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxMyBleHAgIDAuMDAxICAgICAgICAtPiAgMS4wMDEwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAxNCBleHAgIDAuMDAwMSAgICAgICAtPiAgMS4wMDAxMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxNSBleHAgIDAuMDAwMDEgICAgICAtPiAgMS4wMDAwMTAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxNiBleHAgIDAuMDAwMDAxICAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAxNyBleHAgIDAuMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxOCBleHAgIDAuMDAwMDAwMyAgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxOSBleHAgIDAuMDAwMDAwNCAgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAyMCBleHAgIDAuMDAwMDAwNSAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyMSBleHAgIDAuMDAwMDAwOCAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyMiBleHAgIDAuMDAwMDAwOSAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyMyBleHAgIDAuMDAwMDAxMCAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyNCBleHAgIDAuMDAwMDAxMSAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyNSBleHAgIDAuMDAwMDAwMDkgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAyNiBleHAgIDAuMDAwMDAwMDUgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAyNyBleHAgIDAuMDAwMDAwMDQgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAyOCBleHAgIDAuMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlIHplcm9zCitleHB4MDMwIGV4cCAgMC4wMDAwMDAwMCAgIC0+ICAxCitleHB4MDMxIGV4cCAgMEUrMTAwICAgICAgIC0+ICAxCitleHB4MDMyIGV4cCAgMEUtMTAwICAgICAgIC0+ICAxCitleHB4MDMzIGV4cCAtMC4wMDAwMDAwMCAgIC0+ICAxCitleHB4MDM0IGV4cCAtMEUrMTAwICAgICAgIC0+ICAxCitleHB4MDM1IGV4cCAtMEUtMTAwICAgICAgIC0+ICAxCisKKy0tIGJhc2ljIGU9MCwgZT0xLCBlPTIsIGU9NCwgZT49OCBjYXNlcworcHJlY2lzaW9uOiAgIDcKK2V4cHgwNDEgZXhwICAxICAgICAgICAgIC0+ICAyLjcxODI4MiAgSW5leGFjdCBSb3VuZGVkCitleHB4MDQyIGV4cCAtMSAgICAgICAgICAtPiAgMC4zNjc4Nzk0IEluZXhhY3QgUm91bmRlZAorZXhweDA0MyBleHAgIDEwICAgICAgICAgLT4gIDIyMDI2LjQ3ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDQgZXhwIC0xMCAgICAgICAgIC0+ICAwLjAwMDA0NTM5OTkzIEluZXhhY3QgUm91bmRlZAorZXhweDA0NSBleHAgIDEwMCAgICAgICAgLT4gIDIuNjg4MTE3RSs0MyAgSW5leGFjdCBSb3VuZGVkCitleHB4MDQ2IGV4cCAtMTAwICAgICAgICAtPiAgMy43MjAwNzZFLTQ0ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDcgZXhwICAxMDAwICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDggZXhwIC0xMDAwICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDA0OSBleHAgIDEwMDAwMDAwMCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDA1MCBleHAgLTEwMDAwMDAwMCAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCisKKy0tIG1pc2NlbGxhbmVhCistLSBzaW1pbGFyIHRvICdWRiBidWcnIHRlc3QsIGF0IDE3LCBidXQgd2l0aCBsYXN0IGRpZ2l0IGNvcnJlY3RlZCBmb3IgZGVjaW1hbAorcHJlY2lzaW9uOiAxNgorZXhweDA1NSBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzJFLTIzNiBJbmV4YWN0IFJvdW5kZWQKKy0tICByZXN1bHQgZnJvbSBOZXRSZXh4L0phdmEgcHJvdG90eXBlIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTExNzY3NzkyOTYyODYxNzI0NjA1NDQ1OTY0NDcxMTEwOEUtMjM2CistLSAgIHJlc3VsdCBmcm9tIFJleHggKHNlcmllcykgdmVyc2lvbiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMTc2Nzc5Mjk2Mjg2MTcyNDYwNTQ0NkUtMjM2CitwcmVjaXNpb246IDE3CitleHB4MDU2IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjFFLTIzNiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTgKK2V4cHgwNTcgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTFFLTIzNiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTkKK2V4cHgwNTggZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTEyRS0yMzYgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCitleHB4MDU5IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMThFLTIzNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gcm91bmRpbmcgaW4gYXJlYXMgb2YgLi41MDAuLiwgLi40OTkuLiwgLi4xMDAuLiwgLi45OTkuLiBzZXF1ZW5jZXMKK3ByZWNpc2lvbjogICA1MAorZXhweDEwMSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3MzM3NDk5NTA3OTI1MDA3MzgxMSBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAzMQorZXhweDEwMiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDMwCitleHB4MTAzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMyAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjkKK2V4cHgxMDQgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyOAorZXhweDEwNSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI3CitleHB4MTA2IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMCAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjYKK2V4cHgxMDcgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNQorZXhweDEwOCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI0CitleHB4MTA5IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3OSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjMKK2V4cHgxMTAgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODggICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMgorZXhweDExMSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk5ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIxCitleHB4MTEyIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjAKK2V4cHgxMTMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxOQorZXhweDExNCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE4CitleHB4MTE1IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MCAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTcKK2V4cHgxMTYgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNgorZXhweDExNyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE1CitleHB4MTE4IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTQKK2V4cHgxMTkgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMworZXhweDEyMCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDEyCitleHB4MTIxIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMCAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTEKK2V4cHgxMjIgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMAorZXhweDEyMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA5CitleHB4MTI0IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMCAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDgKK2V4cHgxMjUgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNworZXhweDEyNiBleHAgLTlFLTggLT4gMC45OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA2CitleHB4MTI3IGV4cCAtOUUtOCAtPiAxLjAwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDUKK2V4cHgxMjggZXhwIC05RS04IC0+IDEuMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNAorZXhweDEyOSBleHAgLTlFLTggLT4gMS4wMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAzCitleHB4MTMwIGV4cCAtOUUtOCAtPiAxLjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDIKK2V4cHgxMzEgZXhwIC05RS04IC0+IDEuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMQorZXhweDEzMiBleHAgLTlFLTggLT4gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCisKKy0tIHNhbml0eSBjaGVja3MsIHdpdGggaXRlcmF0aW9uIGNvdW50cyBbbm9ybWFsaXplZCBzbyAwPD18eHw8MV0KK3ByZWNpc2lvbjogICA1MAorCitleHB4MjEwIGV4cCAwIC0+IDEKKy0tIGl0ZXJhdGlvbnM6IDIKK2V4cHgyMTEgZXhwIC0xRS00MCAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogOAorZXhweDIxMiBleHAgLTlFLTcgLT4gMC45OTk5OTkxMDAwMDA0MDQ5OTk4Nzg1MDAwMjczMzc0OTUwNzkyNTA3MzgxMTI0MDUxMCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDYKK2V4cHgyMTMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNzMzNzQ5OTUwNzkyNTAwNzM4MTEgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAxNQorZXhweDIxNCBleHAgLTAuMDAzIC0+IDAuOTk3MDA0NDk1NTAzMzcyOTc2MDEyMDY2MjM0MDk3NTYwOTEwNzQxNzc0ODA0ODk4NDUgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAxNAorZXhweDIxNSBleHAgLTAuMDAxIC0+IDAuOTk5MDAwNDk5ODMzMzc0OTkxNjY4MDU1MzU3MTY3NjU1OTc0NzAyMzU1OTAyMzYwMDggSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNgorZXhweDIxNiBleHAgLTAuMSAtPiAwLjkwNDgzNzQxODAzNTk1OTU3MzE2NDI0OTA1OTQ0NjQzNjYyMTE5NDcwNTM2MDk4MDQwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMzkKK2V4cHgyMTcgZXhwIC0wLjcgLT4gMC40OTY1ODUzMDM3OTE0MDk1MTQ3MDQ4MDAwOTMzOTc1Mjg5NjE3MDc2NjcxNjU3MTE4MiBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDQxCitleHB4MjE4IGV4cCAtMC45IC0+IDAuNDA2NTY5NjU5NzQwNTk5MTExODgzNDU0MjM5NjQ1NjI1OTg3ODMzNzAzMzc2MTcwMzggSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA0MworZXhweDIxOSBleHAgLTAuOTkgLT4gMC4zNzE1NzY2OTEwMjIwNDU2OTA1MzE1MjQxMTk5MDgyMDEzODY5MTgwMjg4NTQ5MDUwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjIwIGV4cCAtMSAtPiAwLjM2Nzg3OTQ0MTE3MTQ0MjMyMTU5NTUyMzc3MDE2MTQ2MDg2NzQ0NTgxMTEzMTAzMTc3IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyMjEgZXhwIC0xLjAxIC0+IDAuMzY0MjE4OTc5NTcxNTIzMzE5NzU3MDQ2Mjk1NjM3MzQ1NDg5NTk1ODkxMzkxOTI0ODIgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNworZXhweDIyMiBleHAgLTEuMSAtPiAwLjMzMjg3MTA4MzY5ODA3OTU1MzI4ODg0NjkwNjQzMTMxNTUyMTYxMjQ3OTUyMTU2OTIxIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjgKK2V4cHgyMjMgZXhwIC0xLjUgLT4gMC4yMjMxMzAxNjAxNDg0Mjk4Mjg5MzMyODA0NzA3NjQwMTI1MjEzNDIxNzE2MjkzNjEwOCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDMwCitleHB4MjI0IGV4cCAtMiAtPiAwLjEzNTMzNTI4MzIzNjYxMjY5MTg5Mzk5OTQ5NDk3MjQ4NDQwMzQwNzYzMTU0NTkwOTU4IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMzYKK2V4cHgyMjUgZXhwIC01IC0+IDAuMDA2NzM3OTQ2OTk5MDg1NDY3MDk2NjM2MDQ4NDIzMTQ4NDI0MjQ4ODQ5NTg1MDI3MzU1MSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjI2IGV4cCAtMTAgLT4gMC4wMDAwNDUzOTk5Mjk3NjI0ODQ4NTE1MzU1OTE1MTU1NjA1NTA2MTAyMzc5MTgwODg4NjY1NjUgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOAorZXhweDIyNyBleHAgLTE0IC0+IDguMzE1Mjg3MTkxMDM1Njc4ODQwNjM5ODUxNDI1NjUyNjIyOTQ2MDc2NTgzNjQ5ODQ1N0UtNyBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI5CitleHB4MjI4IGV4cCAtMTUgLT4gMy4wNTkwMjMyMDUwMTgyNTc4ODM3MTQ3OTQ5NzcwMjI4OTYzOTM3MDgyMDc4MDgxODU2RS03IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMzAKK2V4cHgyMzMgZXhwIDAgLT4gMQorLS0gaXRlcmF0aW9uczogMgorZXhweDIzNCBleHAgMUUtNDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogNworZXhweDIzNSBleHAgOUUtNyAtPiAxLjAwMDAwMDkwMDAwMDQwNTAwMDEyMTUwMDAyNzMzNzUwNDkyMDc1MDczODExMjU5NDkgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA2CitleHB4MjM2IGV4cCA5RS04IC0+IDEuMDAwMDAwMDkwMDAwMDA0MDUwMDAwMTIxNTAwMDAyNzMzNzUwMDQ5MjA3NTAwNzM4MSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDE1CitleHB4MjM3IGV4cCAwLjAwMyAtPiAxLjAwMzAwNDUwNDUwMzM3NzAyNjAxMjkzNDA5MTM0ODkwMDIwNTMzMTg3MjcxOTU2MTkgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAxMworZXhweDIzOCBleHAgMC4wMDEgLT4gMS4wMDEwMDA1MDAxNjY3MDgzNDE2NjgwNTU3NTM5OTMwNTgzMTE1NjMwNzYyMDA1ODA3IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjUKK2V4cHgyMzkgZXhwIDAuMSAtPiAxLjEwNTE3MDkxODA3NTY0NzYyNDgxMTcwNzgyNjQ5MDI0NjY2ODIyNDU0NzE5NDczNzUgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAzOAorZXhweDI0MCBleHAgMC43IC0+IDIuMDEzNzUyNzA3NDcwNDc2NTIxNjI0NTQ5Mzg4NTgzMDY1MjcwMDE3NTQyMzk0MTQ1OSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDQxCitleHB4MjQxIGV4cCAwLjkgLT4gMi40NTk2MDMxMTExNTY5NDk2NjM4MDAxMjY1NjM2MDI0NzA2OTU0MjE3NzIzMDY0NDAxIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogNDIKK2V4cHgyNDIgZXhwIDAuOTkgLT4gMi42OTEyMzQ0NzIzNDkyNjIyODkwOTk4Nzk0MDQwNzEwMTM5NzIxODAyOTMxODQxMDMwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyNDMgZXhwIDEgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjI0OTc3NTcyNDcwOTM3MDAwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyNDQgZXhwIDEuMDEgLT4gMi43NDU2MDEwMTUwMTY5MTY0OTM5ODk3NzYzMTY2NjAzODc2MjQwNzM3NTA4MTk1OTYwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyNDUgZXhwIDEuMSAtPiAzLjAwNDE2NjAyMzk0NjQzMzExMjA1ODQwNzk1MzU4ODY3MjM5MzI4MjY4MTAyNjAxNjMgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOAorZXhweDI0NiBleHAgMS41IC0+IDQuNDgxNjg5MDcwMzM4MDY0ODIyNjAyMDU1NDYwMTE5Mjc1ODE5MDA1NzQ5ODY4MzY5NyBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI5CitleHB4MjQ3IGV4cCAyIC0+IDcuMzg5MDU2MDk4OTMwNjUwMjI3MjMwNDI3NDYwNTc1MDA3ODEzMTgwMzE1NTcwNTUxOCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDM2CitleHB4MjQ4IGV4cCA1IC0+IDE0OC40MTMxNTkxMDI1NzY2MDM0MjExMTU1ODAwNDA1NTIyNzk2MjM0ODc2Njc1OTM4OCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjQ5IGV4cCAxMCAtPiAyMjAyNi40NjU3OTQ4MDY3MTY1MTY5NTc5MDA2NDUyODQyNDQzNjYzNTM1MTI2MTg1NTcgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOAorZXhweDI1MCBleHAgMTQgLT4gMTIwMjYwNC4yODQxNjQ3NzY3Nzc3NDkyMzY3NzA3Njc4NTk0NDk0MTI0ODY1NDMzNzYxIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjgKK2V4cHgyNTEgZXhwIDE1IC0+IDMyNjkwMTcuMzcyNDcyMTEwNjM5MzAxODU1MDQ2MDkxNzIxMzE1NTA1NzM4NTQzODIwMCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI5CisKKy0tIGEgYmlnZ2llIFtyZXN1bHQgdmVyaWZpZWQgMyB3YXlzXQorcHJlY2lzaW9uOiAyNTAKK2V4cHgyNjAgZXhwIDEgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjI0OTc3NTcyNDcwOTM2OTk5NTk1NzQ5NjY5Njc2Mjc3MjQwNzY2MzAzNTM1NDc1OTQ1NzEzODIxNzg1MjUxNjY0Mjc0Mjc0NjYzOTE5MzIwMDMwNTk5MjE4MTc0MTM1OTY2MjkwNDM1NzI5MDAzMzQyOTUyNjA1OTU2MzA3MzgxMzIzMjg2Mjc5NDM0OTA3NjMyMzM4Mjk4ODA3NTMxOTUyNTEwMTkwMTE1NzM4MzQxODc5MzA3MDIxNTQwODkxNDk5MzQ4ODQxNjc1MDkyNDQ3NjE0NjA2NjggSW5leGFjdCBSb3VuZGVkCisKKy0tIGV4dHJlbWUgcmFuZ2UgYm91bmRhcmllcworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogOTk5OTk5CittaW5FeHBvbmVudDogLTk5OTk5OQorLS0gTnRpbnkgYm91bmRhcnkKK2V4cHgyOTAgZXhwICAtMjMwMjYxOC4wMjIzMzI1MjkgLT4gMEUtMTAwMDAxNCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitleHB4MjkxIGV4cCAgLTIzMDI2MTguMDIyMzMyNTI4IC0+IDFFLTEwMDAwMTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKy0tIE5tYXgvMTAgYW5kIE5tYXggYm91bmRhcnkKK2V4cHgyOTIgZXhwICAyMzAyNTgyLjc5MDQwODk1MiAtPiA5Ljk5OTk5OTk5MzEwMDI3N0UrOTk5OTk4ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgyOTMgZXhwICAyMzAyNTgyLjc5MDQwODk1MyAtPiAxLjAwMDAwMDAwMDMxMDAyOEUrOTk5OTk5ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgyOTQgZXhwICAyMzAyNTg1LjA5Mjk5Mzk0NiAtPiA5Ljk5OTk5OTAwMzE1OTg3MEUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorZXhweDI5NSBleHAgIDIzMDI1ODUuMDkyOTk0MDM2IC0+IDkuOTk5OTk5OTAzMTU5ODIxRSs5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitleHB4Mjk2IGV4cCAgMjMwMjU4NS4wOTI5OTQwNDUgLT4gOS45OTk5OTk5OTMxNTk4MjBFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgyOTcgZXhwICAyMzAyNTg1LjA5Mjk5NDA0NiAtPiBJbmZpbml0eSBPdmVyZmxvdyAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSAwPC14PDwxIGVmZmVjdHMKK3ByZWNpc2lvbjogICAgMzAKK2V4cHgzMjAgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMDA5NzkxNjY2MTcgSW5leGFjdCBSb3VuZGVkCitleHB4MzIxIGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjQ5OTk5OTc5MTY2NjY3IEluZXhhY3QgUm91bmRlZAorZXhweDMyMiBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI0OTk5ODk3OTE2NjcxNyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMjAKK2V4cHgzMjMgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjQgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjUgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMTQKK2V4cHgzMjYgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NTAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjcgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NTAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjggZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NTAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKy0tIG92ZXJwcmVjaXNlIGFuZCAwPC14PDwxCitwcmVjaXNpb246ICAgIDgKK2V4cHgzMzAgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMzEgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMzIgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNworZXhweDMzMyBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDMzNCBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDMzNSBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAzCitleHB4MzM2IGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzM3IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzM4IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIDA8eDw8MSBlZmZlY3RzCitwcmVjaXNpb246ICAgIDMwCitleHB4MzQwIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjQ5OTk5MDIwODMzMjggIEluZXhhY3QgUm91bmRlZAorZXhweDM0MSBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAwMDAyMDgzMzMzICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNDIgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwMDEwMjA4MzMzOCAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDIwCitleHB4MzQzIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQ0IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQ1IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMCAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDE0CitleHB4MzQ2IGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMDUwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQ3IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMDUwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQ4IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMDUwMDAwMCAgSW5leGFjdCBSb3VuZGVkCistLSBvdmVycHJlY2lzZSBhbmQgMDx4PDwxCitwcmVjaXNpb246ICAgIDgKK2V4cHgzNTAgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNTEgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNTIgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNworZXhweDM1MyBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDM1NCBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDM1NSBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAzCitleHB4MzU2IGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzU3IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzU4IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGNhc2VzIG5lYXIgMSAgICAgICAgICAgICAgLS0gIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MAorcHJlY2lzaW9uOiAgICAyMAorZXhweDQwMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43MTgyODE4Mjg0NTg5MzY1MDQxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MDIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNzE4MjgxODI4NDU4OTYzNjg2OSAgSW5leGFjdCBSb3VuZGVkCitleHB4NDAzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcxODI4MTgyODQ1ODk5MDg2OTcgIEluZXhhY3QgUm91bmRlZAorZXhweDQwNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43MTgyODE4Mjg0NTkwMTgwNTI1ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MDUgZXhwIDEuMDAwMDAwMDAwMDAwMCAgIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1NCAgSW5leGFjdCBSb3VuZGVkCitleHB4NDA2IGV4cCAxLjAwMDAwMDAwMDAwMDEgICAtPiAyLjcxODI4MTgyODQ1OTMxNzA2MzUgIEluZXhhY3QgUm91bmRlZAorZXhweDQwNyBleHAgMS4wMDAwMDAwMDAwMDAyICAgLT4gMi43MTgyODE4Mjg0NTk1ODg4OTE3ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMTQKK2V4cHg0MTEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNzE4MjgxODI4NDU4OSAgSW5leGFjdCBSb3VuZGVkCitleHB4NDEyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZAorZXhweDQxMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MTQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkCitleHB4NDE1IGV4cCAxLjAwMDAwMDAwMDAwMDAgICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZAorZXhweDQxNiBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43MTgyODE4Mjg0NTkzICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MTcgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNzE4MjgxODI4NDU5NiAgSW5leGFjdCBSb3VuZGVkCistLSBvdmVycHJlY2lzZS4uLgorcHJlY2lzaW9uOiAgICA3CitleHB4NDIxIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQyMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MjMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDI0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQyNSBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MjYgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDI3IGV4cCAxLjAwMDAwMDAwMDAwMDMgICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAyCitleHB4NDMxIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQzMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MzMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDM0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQzNSBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MzYgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDM3IGV4cCAxLjAwMDAwMDAwMDAwMDMgICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBiYXNpY3MgYXQgbG93IHByZWNpc2lvbnMKK3ByZWNpc2lvbjogMworZXhweDUwMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMAorZXhweDUwMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNDU0ICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTAzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjM2OCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MDQgZXhwICAgMCAgICAgICAgICAgIC0+IDEKK2V4cHg1MDUgZXhwICAtMCAgICAgICAgICAgIC0+IDEKK2V4cHg1MDYgZXhwICAgMSAgICAgICAgICAgIC0+IDIuNzIgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUwNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMi4wMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTA4IGV4cCAgIDEwICAgICAgICAgICAtPiAyLjIwRSs0ICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MDkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5CitwcmVjaXNpb246IDIKK2V4cHg1MTEgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKK2V4cHg1MTIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDQ1ICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUxMyBleHAgIC0xICAgICAgICAgICAgLT4gMC4zNyAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTE0IGV4cCAgIDAgICAgICAgICAgICAtPiAxCitleHB4NTE1IGV4cCAgLTAgICAgICAgICAgICAtPiAxCitleHB4NTE2IGV4cCAgIDEgICAgICAgICAgICAtPiAyLjcgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MTcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIuMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUxOCBleHAgICAxMCAgICAgICAgICAgLT4gMi4yRSs0ICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTE5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQorcHJlY2lzaW9uOiAxCitleHB4NTIxIGV4cCAgLUluZmluaXR5ICAgICAtPiAwCitleHB4NTIyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA1ICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MjMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuNCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUyNCBleHAgICAwICAgICAgICAgICAgLT4gMQorZXhweDUyNSBleHAgIC0wICAgICAgICAgICAgLT4gMQorZXhweDUyNiBleHAgICAxICAgICAgICAgICAgLT4gMyAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTI3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MjggZXhwICAgMTAgICAgICAgICAgIC0+IDJFKzQgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUyOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkKKworLS0gb3ZlcmZsb3dzLCBpbmNsdWRpbmcgc29tZSBvdmVycHJlY2lzZSBib3JkZXJsaW5lcworcHJlY2lzaW9uOiAgIDcKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHB4NzAxIGV4cCAgMTAwMDAwMDAwMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzAyIGV4cCAgMTAwMDAwMDAwICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzAzIGV4cCAgMTAwMDAwMDAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA0IGV4cCAgMTAwMDAwMCAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA1IGV4cCAgMTAwMDAwICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA2IGV4cCAgMTAwMDAgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA3IGV4cCAgMTAwMCAgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA4IGV4cCAgODg2LjQ5NTI2MDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA5IGV4cCAgODg2LjQ5NTI2MDcgLT4gOS45OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MTAgZXhwICA4ODYuNDk1MjcgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MTEgZXhwICA4ODYuNDk1MjYgICAtPiA5Ljk5OTk5MkUrMzg0IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE2CitleHB4NzIxIGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU4ODMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzIyIGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU4ODIgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MjMgZXhwICA4ODYuNDk1MjYwODAyNzA3NTkgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MjQgZXhwICA4ODYuNDk1MjYwODAyNzA3NTggICAtPiA5Ljk5OTk5OTk5OTk5OTkxN0UrMzg0IEluZXhhY3QgUm91bmRlZAorZXhweDcyNSBleHAgIDg4Ni40OTUyNjA4MDI3MDc2ICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcyNiBleHAgIDg4Ni40OTUyNjA4MDI3MDc1ICAgIC0+IDkuOTk5OTk5OTk5OTk5MTE3RSszODQgSW5leGFjdCBSb3VuZGVkCistLSBhbmQgYnkgc3BlY2lhbCByZXF1ZXN0IC4uLgorcHJlY2lzaW9uOiAgIDE1CitleHB4NzMxIGV4cCAgODg2LjQ5NTI2MDgwMjcwOCAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzMyIGV4cCAgODg2LjQ5NTI2MDgwMjcwNyAgICAgLT4gOS45OTk5OTk5OTk5OTQxMkUrMzg0IEluZXhhY3QgUm91bmRlZAorZXhweDczMyBleHAgIDg4Ni40OTUyNjA4MDI3MDYgICAgIC0+IDkuOTk5OTk5OTk5OTg0MTJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CitleHB4NzM1IGV4cCAgMjMwMi41ODUwOTI5OTQwNSAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MzYgZXhwICAyMzAyLjU4NTA5Mjk5NDA0ICAgIC0+IDkuOTk5OTk5OTk5OTQzMTZFKzk5OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MzcgZXhwICAyMzAyLjU4NTA5Mjk5NDAzICAgIC0+IDkuOTk5OTk5OTk5ODQzMTZFKzk5OSBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93cywgaW5jbHVkaW5nIHVuZGVyZmxvdy10by16ZXJvIGVkZ2UgcG9pbnQKK3ByZWNpc2lvbjogICA3CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXhweDc1MSBleHAgLTEwMDAwMDAwMDAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTIgZXhwIC0xMDAwMDAwMDAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4NzUzIGV4cCAtMTAwMDAwMDAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDc1NCBleHAgLTEwMDAwMDAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTUgZXhwIC0xMDAwMDAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4NzU2IGV4cCAtMTAwMDAgICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDc1NyBleHAgLTEwMDAgICAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTggZXhwIC04ODEuODkwMDkgICAgLT4gIDEuMDAwMDAxRS0zODMgSW5leGFjdCBSb3VuZGVkCitleHB4NzU5IGV4cCAtODgxLjg5MDEgICAgIC0+ICA5Ljk5OTkxRS0zODQgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzYwIGV4cCAtODg1ICAgICAgICAgIC0+ICA0LjQ2MDVFLTM4NSAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzYxIGV4cCAtODg4ICAgICAgICAgIC0+ICAyLjIyMUUtMzg2ICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzYyIGV4cCAtODkwICAgICAgICAgIC0+ICAzLjAxRS0zODcgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzYzIGV4cCAtODkyLjkgICAgICAgIC0+ICAxLjdFLTM4OCAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzY0IGV4cCAtODkzICAgICAgICAgIC0+ICAxLjVFLTM4OCAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzY1IGV4cCAtODkzLjUgICAgICAgIC0+ICA5RS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzY2IGV4cCAtODk1LjcwNTYgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzY5IGV4cCAtODk1LjggICAgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzcwIGV4cCAtODk1LjczICAgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzcxIGV4cCAtODk2LjM5ODcgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzcyIGV4cCAtODk2LjM5ODggICAgIC0+ICAwRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKK2V4cHg3NzMgZXhwIC04OTguMDA4MSAgICAgLT4gIDBFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorZXhweDc3NCBleHAgLTg5OC4wMDgyICAgICAtPiAgMEUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCisKKy0tIHNwZWNpYWwgdmFsdWVzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorZXhweDgyMCBleHAgICBJbmYgICAgLT4gSW5maW5pdHkKK2V4cHg4MjEgZXhwICAtSW5mICAgIC0+IDAKK2V4cHg4MjIgZXhwICAgTmFOICAgIC0+IE5hTgorZXhweDgyMyBleHAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitleHB4ODI0IGV4cCAgc05hTjEyMyAtPiAgTmFOMTIzIEludmFsaWRfb3BlcmF0aW9uCitleHB4ODI1IGV4cCAtc05hTjMyMSAtPiAtTmFOMzIxIEludmFsaWRfb3BlcmF0aW9uCitleHB4ODI2IGV4cCAgIE5hTjQ1NiAtPiAgTmFONDU2CitleHB4ODI3IGV4cCAgLU5hTjY1NCAtPiAtTmFONjU0CitleHB4ODI4IGV4cCAgIE5hTjEgICAtPiAgTmFOMQorCistLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucworLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10KK3ByZWNpc2lvbjogMTAwMDAwMDAwCitleHB4OTAxIGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0CitwcmVjaXNpb246ICA5OTk5OTk5OQorZXhweDkwMiBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dAorCitwcmVjaXNpb246IDkKK21heEV4cG9uZW50OiAgIDEwMDAwMDAKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK2V4cHg5MDMgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK2V4cHg5MDQgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgLTEwMDAwMDAKK2V4cHg5MDUgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTgKK2V4cHg5MDYgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKKworLS0KK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gTnVsbCB0ZXN0CitleHB4OTAwIGV4cCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCistLSBSYW5kb21zIFA9NTAsIHdpdGhpbiAwLTk5OQorUHJlY2lzaW9uOiA1MAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4cHgxNTAxIGV4cCA2NTYuMzUzOTc5NTA1OTAyODU2MTIyNjYwOTU1OTY1Mzk5MzQyMTM5NDM4NzI4ODU3MjggIC0+IDEuMTI0Mzc1NzYxMDY0MDMxOTc4MzYxMTE3ODUyODgzOTY1MjY3MjA2MjgyMDA0MDMxNEUrMjg1IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDIgZXhwIDAuOTM2MjA1NzEwOTM2NTI4MDAyMjUwMzg1NTA2MDA3ODAzMjI4MzEyMzYwODI3ODE0NzEgLT4gMi41NTAyODY1MTMwOTg2MTc2Njg5MTk5NzExODU3ODI1NzcxMzExMTc4MDQ2ODQyMDA5IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDMgZXhwIDAuMDAwMDAwMDAwMDAwMDAwMDgzNDA3ODU4NTY2MDE1MTQ3MTQxODMzNzM4NzQxMDU3OTEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwODM0MDc4NTg1NjYwMTUxNTA2MjAyNjkxNzQwMjUyNTEyIEluZXhhY3QgUm91bmRlZAorZXhweDE1MDQgZXhwIDAuMDAwMDkxNzQwNTcyNjI4ODc3ODk2MjU3NDU1NzQ2ODY1NDUxNjMxNjg3ODg0NTYyMDMgLT4gMS4wMDAwOTE3NDQ3ODA5MjM5MDA1MTQ2NzIyMzQxMjUxNTI0MDgxMDA2MDUxNDczMjczIEluZXhhY3QgUm91bmRlZAorZXhweDE1MDUgZXhwIDMzLjkwOTExNjg5Nzk3Mzc5NzczNTY1Nzc1MTU5MTAxNDkyNjYyOTA1MTExNzU0MTI0MyAgLT4gNTMyNzczMTgxMDI1MDAyLjAzNTQzNjE4OTAxMzA2NzI2NDk1ODcwNDc2NjE3MjMyMjI5IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDYgZXhwIDAuMDAwMDA3NDA0NzA0MTMwMDQ0MDY1OTIxMjQ1NzUyOTUyNzg0NTY5MzY4MDk1ODczMTEgLT4gMS4wMDAwMDc0MDQ3MzE1NDQ5MzMzNTkwMDY2Mzk1NjcwMzA2MTM1NTY3ODg5MjEwODE0IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDcgZXhwIDAuMDAwMDAwMDAwMDAxMjQ4NTQ5MjIyMjIxMDg4MDI0NTM3NDY5MjI0ODMwNzE0NDU0OTIgLT4gMS4wMDAwMDAwMDAwMDEyNDg1NDkyMjIyMjE4Njc0NjIxMTc2MjM5OTExNDI0OTY4MjYzIEluZXhhY3QgUm91bmRlZAorZXhweDE1MDggZXhwIDQuMTc5MzI4MDY3NDE1NTY1OTc5NDI4Njk1MTE1OTQzMDY1MTI1ODM1NjAxNDM5MTM4MiAgLT4gNjUuMzIxOTQ2NTIwMTQ3MTk5NDA0MTk5Nzg3ODExMzM2ODYwMDg3OTc1MTE4Mjc4MTg1IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDkgZXhwIDQ4NS40MzU5NTc0NTQ2MDY1NTg5Mzc0NjE3OTg5MDI1NTUyOTkxOTIyMTU1MDIwMTY4NiAgLT4gNi42Mzk4NDAzOTIwNDU5NjE3MjU1OTUwNDc2OTUzMTI5Mzc3NDU5ODQ1MzY2NTg1NDYzRSsyMTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxMCBleHAgMC4wMDAwMDAwMDAwMzU0NzI1OTgwNjU5MDg1NjAzMjUyNzg3NTE1NzgzMDMyODE1NjU5NyAtPiAxLjAwMDAwMDAwMDAzNTQ3MjU5ODA2NjUzNzcxMjkzMjA1ODk0MDY3MTUwMDA2ODU1MTUgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxMSBleHAgMC4wMDAwMDAwMDAwMDAwMDc1OTYyMTQ5NzMzOTEwNDA0NzkzMDYxNjQ3ODYzNTA0MjY3OCAtPiAxLjAwMDAwMDAwMDAwMDAwNzU5NjIxNDk3MzM5MTA2OTMzMDU0NzEyNTc3MTU0NjM4ODcgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxMiBleHAgOS43OTU5MTY4ODIxNzYwMzM5MzA0NTcxNTk1NDc0NDgwNjQwMjg2MDcyNzIwMjMzNzk2ICAtPiAxNzk2MC4yNjExNDYwNDI5NTUxNzkxNjQzMDM2NTM0MTI2NTA3NTE2ODE0MzYzNTI0MzcgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxMyBleHAgMC4wMDAwMDAwMDU2NjY0MjAwNjI1ODI5MDUyNjc4MzkwMTQ1MTE5NDk0MzE2NDUzNTU4MSAtPiAxLjAwMDAwMDAwNTY2NjQyMDA3ODYzNzA2MzQ2MDk4MzI0Mzg4MTU2NjUyNDkzNDc2NTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxNCBleHAgNzQxLjI5ODg4NzkxMTM0Mjk4MTk0MDg4ODI3NTcyMzc0NzE4OTQwOTI1ODIwMDI3MzU0ICAtPiA4Ljc1MDE2OTQwMDYzMTczMzI4MDgxMjg5NDY2NjY0MDI2MjI0MzIwNjQ5MjMxOTg3MzFFKzMyMSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE1IGV4cCAwMzIuNzU1NzMwMDM1NTI1MTc2Njg4MDg1MjkwOTk4OTcxNTM3MTA4ODcwMTQ5NDc5MzUgIC0+IDE2ODEyNTE5NjU3ODY3OC4xNzcyNTg0MTEwODYxNzk1NTkwNDQyNTM0NTYzMTA5MjMzOSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE2IGV4cCA0Mi4zMzM3MDA3MjY0MjkzMzMzMDg1OTQyNjU1NTM0MjI5MDI0NjM3MzczOTk0Mzc2NDQgIC0+IDI0MjgyNDU2NzU4NjQxNzI0NzUuNDY4MTExOTQ5MzA0NTY1Nzc5NzMwOTM2OTY3MjAxMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE3IGV4cCAwLjAwMDAwMDAwMDAwMDAwNTU5NjgyNjE2ODc2NDkxODg4MTk3NjA5MTU4ODAyODM1Nzk4IC0+IDEuMDAwMDAwMDAwMDAwMDA1NTk2ODI2MTY4NzY0OTM0NTQ0MjA3NjczMjczOTU3NzA0OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE4IGV4cCAwLjAwMDAwMDAwMDAwMDgwNzAzNjg4NjY4MjgwMTkzNTg0NzU4MzAwOTczNTQ5NDg2MzEyIC0+IDEuMDAwMDAwMDAwMDAwODA3MDM2ODg2NjgzMTI3NTkwMTE1ODE2NDMyMTg2NzkxNDM0MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE5IGV4cCA2NDAuNzIzOTYwMTI3OTY1MDk0ODIzODI3MTI4OTE3MDkwNzI1NzA2NTM2MDY4MzgyNTEgIC0+IDEuODMxODA5NDk5MDY4MzM5NDIyOTMwNDEzMzA2ODk4MzkxNDIzNjk5NTMyNjg5MTA0NUUrMjc4IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjAgZXhwIDAuMDAwMDAwMDAwMDAwMDA1MDk0NTg5MjIxNjc2MzEwNzE0MTY5NDgxMTIyMTk1MTIyMjQgLT4gMS4wMDAwMDAwMDAwMDAwMDUwOTQ1ODkyMjE2NzYzMjM2OTE1ODkxNDk5MzI0MzU4NTU2IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjEgZXhwIDYuNzY3MDM5NDMxNDMxNTIwNjM3ODYyNTIyMTU4Mzk3MzQxNDY2MDcyNzk2MDI0MTM5NSAgLT4gODY4LjczNjEzMDEyODIyMDMxMzY3ODA2MjQ4Njk3MDkyODg0NDE1MTE5NTY4MjcxMzE1IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjIgZXhwIDA0LjgyMzIxNzQwNzQxMjk2MzUwNjYzODI2NzIyNjg5MTAyNDEzODA1NDc4MzEyMjU0OCAgLT4gMTI0LjM2NDU3OTI5NTg4ODM3MTI5NzMxODIxMDc3NTg2NzA1NTA1NTY1OTA0MjA1MzY2IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjMgZXhwIDE5My41MTMwNzg3ODcwMTE5NjQwMzk5MTIwODQ4MjUyMDExNTM1OTY5MDEwNjE0MzYxNSAgLT4gMS4xMDA2ODMwODcyODU0NzE1Njc3MzkwOTE0NjU1NDUyMjYxNTUwNzY4OTU3NTc2MDM0RSs4NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI0IGV4cCA1LjczMDc3NDkwMzgzMDM2NTA1MzkyMDAzNDU5MDEyMTA0OTcwMTU2MTczOTM5NzA0NjMgIC0+IDMwOC4yMDgwMDc0MzEwNjg0MzA4MzUyMjcyMTUyMzcxNTY0NTk1MDU3NDg2NjQ5NTE5NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI1IGV4cCAwLjAwMDAwMDAwMDAwMDk1MjE3ODI1MTk5Nzk3OTY1MjAwNTQxMTY5MTIzNzQzNTAwMjY3IC0+IDEuMDAwMDAwMDAwMDAwOTUyMTc4MjUxOTk4NDMyOTczNzE3MjAwNzk5MTM5MDM4MTI3MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI2IGV4cCAwLjAwMDI3MTMxNDQwOTQ5MTgzMzcwOTY2MzkzNjgyNjE3OTMwMTUzNDk1MDI4OTE5MTQwIC0+IDEuMDAwMjcxMzUxMjE4NTc1MTAyMjkwNjA1ODE2MDQ4MDYwNjU5ODc1NDkxMzYwNzM2NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI3IGV4cCAwLjAwMDAwMDAwMDY0NTAzMDU5MTE0NjgwNjgyMzQzMDAyMzE1NjYyMDY5MjcyNzA3MTIzIC0+IDEuMDAwMDAwMDAwNjQ1MDMwNTkxMzU0ODM5MDU1MjMyMzUxNzQwMzYxMzEzNTQ5NjYzMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI4IGV4cCAwLjAwMDAwMDAwMDAwMDAwMDk1NjE2NjQzNTA2NTI3Mjg4ODY2MjM1MjM4NTQ4NDQwNTkzIC0+IDEuMDAwMDAwMDAwMDAwMDAwOTU2MTY2NDM1MDY1MjczMzQ1Nzg5NDc4MTU4MjAwOTA5NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI5IGV4cCAwLjAwMDAwMDAwMDAwMDAwMDg2NDQ5OTQyODExNjc4NjUwMjQ0NDU5NTUwMjUyNzQzNDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwODY0NDk5NDI4MTE2Nzg2ODc2MTI0MjI2MTA5NjUyOTk4NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTMwIGV4cCAwLjA2MjIzNDg4MzU1NjM1MzU5OTY1NjgzMDUzMTU3NzI5MjA0OTg4MzgxODg3NjIxODUwIC0+IDEuMDY0MjEyMjgxMzM5MjQwNjY1Nzc4OTY4ODkzMTgzODkxOTMyMzgyNjI1MDYzMDgzMSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTMxIGV4cCAwLjAwMDAwNDAwNzEwODA3ODA0NDI5NDM1NTAyNjU3MTMxOTEyMzA4NjgwNjc0MDU3MDUzIC0+IDEuMDAwMDA0MDA3MTE2MTA2NTEyNTkyNTYyMDg5MDAxOTMxOTgzMjEyNzg2MzU1OTI2MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTMyIGV4cCA4NS41MjI3OTY4OTQ3NDQ1NzYyMTE1NzMyMzIwNTU0OTQ1NTE0MjkyOTc4Nzg0MTMwMTcgIC0+IDEzODcwMDczNjg2NDA0MjI4NDUyNzU3Nzk5NzcwMjUxMDg1MTc3Ljg1MzMzNzM2ODkzNSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTMzIGV4cCA5LjE0OTY3MjA4MTEzNjM2Nzg2OTY5MzgwMzYzNzk3NTY2NjM1NDgzNTMzOTk5NTQzNjMgIC0+IDk0MTEuMzUzNzEyMjgzMjc0MzM4Njc4MzU5NzYyOTE2MTc2MzA1NzM3MDAzNDQ5NTE1NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM0IGV4cCA4LjIyMTU3MDUyNDA3ODgyOTQ0NzI5NDQzODIwNTYzMzA1MTY3Mzg1Nzc3ODUxNzc5NDIgIC0+IDM3MjAuMzQwNjgxMzM4MzA3Njk1Mzg5OTY1NDcwMTYxNTA4NDQyNTU5ODM3Nzc1ODE4OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM1IGV4cCAwLjAwMDAwMDAwMDE1NzcyMDY0NTY5NjQwNjEzMTQyODIzMjAzNzI2ODIxMDc2MjM5NTYxIC0+IDEuMDAwMDAwMDAwMTU3NzIwNjQ1NzA4ODQ0MDMyNDY4MzMxNTc4ODM1ODkyNjEyOTgzMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM2IGV4cCAwLjU4MTc5MzQ2NDczOTU5NTMxNDMyNjI0MTUzNTc2ODgzNDQwNjI1NTM4MDE3NTMyNDgwIC0+IDEuNzg5MjQ0NTAxODI3NTM2MDE2Mzc5NzAyMjM3MjY1NTgzNzE4ODQyMzE5NDg2MzYwNSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM3IGV4cCAzMy41NTU3MjYxOTcxNDk1MjUwNjE0NTU1MTc3ODQ4NzA1NzA0NzA4MzM0OTgwOTY1NTkgIC0+IDM3NDE2ODA2OTg5NjMyNC42MjU3ODA3MzE0ODk5MzUyNjYyNjMwNzA5NTg1NDQwNzk1MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM4IGV4cCA5Ljc4OTgwNzk4MDM5MDYyMTUwOTQxNDAwMTAwMDk1ODMzNzU1MzcyNTk4MTAzOTg2NTkgIC0+IDE3ODUwLjg3ODExOTkxMjIwODg4ODIxNzEwMDk5ODAxOTk4NjYzNDYyMDM2ODUzODQyNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM5IGV4cCA4OS4xNTc2OTczMjcxNzQ1MjE1NDI1MDI0NDc5NTMwMzI1MzY1NDEwMzg2MzY5NjYzNDcgIC0+IDUyNTY0OTE1MjMyMDE2NjUwMzc3MTIyNDE0OTMzMDQ0ODA4OTU1MC42NzI5MzgyOTIyNyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTQwIGV4cCAyNS4wMjI5NDc2MDAxMjMzMjg5MTIwMjkwNTE4OTcxNzEzMTk1NzMzMjI4ODg1MTQ4ODUgIC0+IDczNjc2MzQzNDQyLjk1MjUxNzgyNDM0NTQzMTQzNzY4MzE1MzMwNDY0NTg1MTk2MDUyNCBJbmV4YWN0IFJvdW5kZWQKKworLS0gZXhwKDEpIGF0IDM0CitQcmVjaXNpb246IDM0CitleHB4MTIwMCBleHAgMSAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MiBJbmV4YWN0IFJvdW5kZWQKKworLS0gUmFuZG9tcyBQPTM0LCB3aXRoaW4gMC05OTkKK1ByZWNpc2lvbjogMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK2V4cHgxMjAxIGV4cCAzMDkuNTk0ODg1NTgyMTUxMDIxMjk5NjcwMDY0NTA4NzE4OCAgLT4gMi44NTMzMTk2OTI5MDEzODc1MjEyMDE3MzgwMTUwNTA3MjRFKzEzNCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjAyIGV4cCA5LjkzNjU0MzA2ODcwNjIxMTQyMDQyMjgwMzk2MjY4MDE2NCAgLT4gMjA2NzIuMTU4MzkyMDMxNzE4Nzc0NzY1MTEwOTMyNzYwMjIgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwMyBleHAgNi4zMDc4NzAzMjM4ODE1MDU2ODQ0Mjk4Mzk0OTE3MDc5MDggIC0+IDU0OC44NzQ3Nzc3MDU0NjM3Mjk2MTM3Mjc3MzkxNzU0NjY1IEluZXhhY3QgUm91bmRlZAorZXhweDEyMDQgZXhwIDAuMDAwMzU0MzI4MTM4OTQzODQyMDUzNTIwMTMwODI4MjUwMyAtPiAxLjAwMDM1NDM5MDkyMDU3Mzc0NjE2NDczMzM1MDg0MzE1NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjA1IGV4cCAwLjAwMDAwMzcwODc0NTMzNjM5MTgzNzU1OTgzOTQ5MjAyMjkgLT4gMS4wMDAwMDM3MDg3NTIyMTM3OTYzMjQ4NDE5MjAxODkzMjMgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwNiBleHAgMC4wMDIwNDMyMzEyNjg3NTEyNDM4MDQwMjIyNDQ0MTE2NTg1IC0+IDEuMDAyMDQ1MzIwMDg4MTY0ODI2MDEzNTYxNjMwOTc1MzA4IEluZXhhY3QgUm91bmRlZAorZXhweDEyMDcgZXhwIDYuODU2MzEzMzQwMDMyMTc3NjcyNTUwMzQzMjE2MTI5NTg2ICAtPiA5NDkuODU4Nzk4MTYwNDE0NDE0Nzk4MzU4OTY2MDUyNDM5NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjA4IGV4cCAwLjAwMDAwMDAwMDA0MDIwOTQ5MjgzMzM4MTU2NDMzMjY0MTggLT4gMS4wMDAwMDAwMDAwNDAyMDk0OTI4MzQxODk5NjU5ODk2MTIgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwOSBleHAgMC4wMDQ5NjEwNzg0NzIyNDEyMTE3NjMyNjQ3MDAzNTQ1ODM5IC0+IDEuMDA0OTczNDA0OTk3OTAxOTg3MDM5NTg5MDI5Mjc3ODMzIEluZXhhY3QgUm91bmRlZAorZXhweDEyMTAgZXhwIDAuMDAwMDg5MTQ3MTg4MzcyNDA2NjkwOTc0Njc4NjcwMjY4NiAtPiAxLjAwMDA4OTE1MTE2MjEwMTA4NTQxMjc4MDA4ODI2NjY5OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjExIGV4cCAwOC41OTk3OTE3MDM3NjA2MTg5MDY4NDcyMzIxMTExMjU2NiAgLT4gNTQzMC41MjgzMTQ5MjA5MDU3MTQ2MTUzMzkyNzM3MzgwOTcgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxMiBleHAgOS40NzMxMTcwMzkzNDEwMDM4NTQ4NzI3NzgxMTI3NTI1OTAgIC0+IDEzMDA1LjM2MjM0MzMxMjI0OTUzNDYwMDU1ODk3OTEzOTE3IEluZXhhY3QgUm91bmRlZAorZXhweDEyMTMgZXhwIDAuMDk5OTA2MDcyNDY5MjIwNzY0ODQyOTk2OTk5OTMxMDExOCAtPiAxLjEwNTA2NzExNjk3NTE5MDYwMjI5NjA1MjcwMDcyNjgwMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjE0IGV4cCAwLjAwMDAwMDA5Mjc4MDQ1MzM1NTU4Nzc4ODQwODIyNjkyNDcgLT4gMS4wMDAwMDAwOTI3ODA0NTc2NTk2OTQxODM5NTQ3NDA3NzIgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxNSBleHAgMC4wMzc2NTc4NTgzODcyODg5OTE2Mjk4NzcyODE4MjY1Njc3IC0+IDEuMDM4Mzc1OTAwNDg5NzcxOTQ2NDc3ODU3ODE4NDQ3NTU2IEluZXhhY3QgUm91bmRlZAorZXhweDEyMTYgZXhwIDI2MS42ODk2NDExNjk3NTM5NTI0OTExNTM2MTE2NzEyMzA3ICAtPiA0LjQ3MDYxMzU2MjEyNzQ2NTA5NTI0MTYwMDE3NDk0MTQ2MEUrMTEzIEluZXhhY3QgUm91bmRlZAorZXhweDEyMTcgZXhwIDAuMDcwOTk5NzQyMzI2OTE2Mjk4MDg3NTgyNDIxMzg4OTYyNiAtPiAxLjA3MzU4MDk0OTIzNTQwNzk0OTQxNzgxNDQ4NTUzMzE3MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjE4IGV4cCAwLjAwMDAwMDA0NDQ2MDU1ODMyOTUxNjk4OTUyMzU2NTg3MzEgLT4gMS4wMDAwMDAwNDQ0NjA1NTkzMTc4ODc2Mjc2NTc1OTM5MDAgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxOSBleHAgMC4wMDAwMDIxMjI0MDcyODU0Nzc3NTEyMjgxMzY5ODE1MTg1IC0+IDEuMDAwMDAyMTIyNDA5NTM3Nzg1Njg3MzkwNjMxMDcwOTA2IEluZXhhY3QgUm91bmRlZAorZXhweDEyMjAgZXhwIDU0Ny41MTc0NDYyNTc0MTU2ODg1NDczNTU4NDg1NDc1MDUyICAtPiA2LjA3ODYyOTI0NzM4MzgwNzk0MjYxMjExNDU3OTcyODY3MkUrMjM3IEluZXhhY3QgUm91bmRlZAorZXhweDEyMjEgZXhwIDAuMDAwMDAwOTA2NzU5ODA0MTYxNTE5MjAwMjMzOTg0NDY3MCAtPiAxLjAwMDAwMDkwNjc2MDIxNTI2ODMxNDY4MDExNTM3NDM4NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjIyIGV4cCAwLjAzMTY0NzY1MDAzMDgwNjUzNjU4MDM0NTU1MzMyNDQ2MDMgLT4gMS4wMzIxNTM3NjE4ODAxODc5Nzc2NTgzODc5NjE3NjkwMzQgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyMyBleHAgODQuNDYxNjA1MzAzNzc2NDUxMDE4MzM5OTY3MDYzODQ0NzMgIC0+IDQuNzk5NjQ0OTk1ODk3OTY4MzgzNTAzMjY5ODcxNjk3ODU2RSszNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjI0IGV4cCAwLjAwMDAwMDAwMDA1MjA1OTk3NDAyOTA4NDgwMTg5MDQxNDUgLT4gMS4wMDAwMDAwMDAwNTIwNTk5NzQwMzA0Mzk5MjIzMzgzOTMgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyNSBleHAgMC4wMDAwMDA2NzQ4NTMwNjQwMDkzNjIwNjY1NjUxNzI2NzA4IC0+IDEuMDAwMDAwNjc0ODUzMjkxNzIyNzQyMjkyMzMxODEyOTk3IEluZXhhY3QgUm91bmRlZAorZXhweDEyMjYgZXhwIDAuMDAwMDAwMDExNjg1MzExOTc2MTA0MjAyMDUwNzkxNjE2OSAtPiAxLjAwMDAwMDAxMTY4NTMxMjA0NDM3NzQ2MDMwNjE2NTIwMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjI3IGV4cCAwLjAwMjI1OTM4MTgwOTQyNTg2MzY3Mjc2MTY4ODY2OTMyODAgLT4gMS4wMDIyNjE5MzYxMzU4NzY4OTM3MDcwOTQ4NDU1NDM0NjEgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyOCBleHAgMC4wMDI5Mzk4ODU3NjczNDc4OTEyMjQ5ODU2NTA5NjY3NTE3IC0+IDEuMDAyOTQ0MjExNDY5NDk1MDg2ODEzMDg3NjUxMjg3MDEyIEluZXhhY3QgUm91bmRlZAorZXhweDEyMjkgZXhwIDAuNzUxMTQ4MDAyOTkyODgwMjc3NTM3NjI3MDU1NzYzNjk2MyAtPiAyLjExOTQzMTczNDUxMDMyMDE2OTgwNjk3NjU2OTM2Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjMwIGV4cCAxNzQuOTQzMTk1MjE3Njc1MDY3MTE1MDg4NjQyMzA0ODQ0NyAgLT4gOS40ODEyMjIzMDUzNzQ5NTUwMTE0NjQ2MTk0NjgwNDQwNTFFKzc1IEluZXhhY3QgUm91bmRlZAorZXhweDEyMzEgZXhwIDAuMDAwMDgxMDYxMjQ1MTY5NDEzNjEyOTE5OTg5NTE2NDQyNCAtPiAxLjAwMDA4MTA2NDUzMDcyMDkyNDE4NjYxNTE0OTY0NjkyMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjMyIGV4cCA1MS4wNjg4ODk4OTcwMjY2OTI4ODE4MDk0NjI3MjQ5OTAzNSAgLT4gMTUwOTg2MTM4ODg2MTkxNjUwNzM5NTkuODk4OTYwMTg3NDkgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzMyBleHAgMC4wMDAwMDAwMDA1OTkyODg3NTk5NDM3MDkzNjUxNDk0NTEwIC0+IDEuMDAwMDAwMDAwNTk5Mjg4NzYwMTIzMjgyODc0MDgyNzU4IEluZXhhY3QgUm91bmRlZAorZXhweDEyMzQgZXhwIDcxNC44NTQ5MDQ2NzYxMDU0ODU2MzExMTA4ODI4OTAzOTcyICAtPiAyLjg2Nzc0NDU0NDg5MTA4MTExNzM4MTU5NTA4MDQ4MDc4NEUrMzEwIEluZXhhY3QgUm91bmRlZAorZXhweDEyMzUgZXhwIDAuMDAwMDAwMDAwNDQ2ODI0NzgwMjk5MDY0MzY0NTYwNzExMCAtPiAxLjAwMDAwMDAwMDQ0NjgyNDc4MDM5ODg5MDU1NjcyMDIzMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjM2IGV4cCA4MzEuNTgxODE1MTU4OTg5MDM2NjMyMzU1MTY3MjA0MzcwOSAgLT4gMS40MTcwNzc0MDkxODI2MjQ5Njk0MzU5MzgwNjIyNjE2NTVFKzM2MSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjM3IGV4cCAwLjAwMDAwMDAwMDY4NjgzMjM4MjUxNzk2MDU3NDcxMDgwNDQgLT4gMS4wMDAwMDAwMDA2ODY4MzIzODI3NTM4Mjk5MzU2MDI0NTQgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzOCBleHAgMC4wMDAwMDAxMzA2NzQwMjY2NDA4OTc2ODQwMjI4NDQwMjU1IC0+IDEuMDAwMDAwMTMwNjc0MDM1MTc4NzQ4Njc1MTg3NjQ4MDk4IEluZXhhY3QgUm91bmRlZAorZXhweDEyMzkgZXhwIDAuMzE4MjIxMDYwOTAyMjI2NzcwNDgxMTUwMjQxMjMzNTE2MyAtPiAxLjM3NDY4MDExNTY2Nzc5ODE4NTc1ODkyNzI0Nzg5NDg1OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjQwIGV4cCAwLjAxNDc3NDEyMzQxNzkxMDQ0Mzc0NDAyNjQ2NDQyOTU1MDEgLT4gMS4wMTQ4ODM4MDAyMzk5NTA2ODI2MjgyNzc1MzQ4MzkyMjIgSW5leGFjdCBSb3VuZGVkCisKKy0tIFJhbmRvbXMgUD0xNiwgd2l0aGluIDAtOTkKK1ByZWNpc2lvbjogMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHB4MTEwMSBleHAgOC40NzMwMTE1MjcwMTM3MjQgIC0+IDQ3ODMuOTAwNjQzOTY5MjQ2IEluZXhhY3QgUm91bmRlZAorZXhweDExMDIgZXhwIDAuMDAwMDA1NTc1MzAyMjc2NCAtPiAxLjAwMDAwNTU3NTMxNzgxOCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTAzIGV4cCAwLjAwMDAzMjM0NzQxMTQ0ODIgLT4gMS4wMDAwMzIzNDc5MzQ2MzEgSW5leGFjdCBSb3VuZGVkCitleHB4MTEwNCBleHAgNjQuNTQzNzQxMzg1NDQxNjYgIC0+IDEuMDczOTY2NDc2MTczNTMxRSsyOCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTA1IGV4cCA5MC40NzIwMzI0NjQxNjU2OSAgLT4gMS45NTY2MTA4ODcyNTA2NDNFKzM5IEluZXhhY3QgUm91bmRlZAorZXhweDExMDYgZXhwIDkuMjk5OTMxNTMyMzQyNzU3ICAtPiAxMDkzNy4yNzAzMzMyNTIyNyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTA3IGV4cCA4Ljc1OTY3ODQzNzg1MjIwMyAgLT4gNjM3Mi4wNjIyMzQ0OTUzODEgSW5leGFjdCBSb3VuZGVkCitleHB4MTEwOCBleHAgMC4wMDAwOTMxNzU1MTI3MTcyIC0+IDEuMDAwMDkzMTc5ODUzNjkwIEluZXhhY3QgUm91bmRlZAorZXhweDExMDkgZXhwIDAuMDAwMDAyODEwMTE1ODM3MyAtPiAxLjAwMDAwMjgxMDExOTc4NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTEwIGV4cCAwLjAwMDAwMDgwMDgxMzA5MTkgLT4gMS4wMDAwMDA4MDA4MTM0MTMgSW5leGFjdCBSb3VuZGVkCitleHB4MTExMSBleHAgOC4zMzk3NzE3MjIyOTkwNDkgIC0+IDQxODcuMTMzODAzMDgxODc4IEluZXhhY3QgUm91bmRlZAorZXhweDExMTIgZXhwIDAuMDAyNjE0MDQ5Nzk5NTQ3NCAtPiAxLjAwMjYxNzQ2OTQwNjc1MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTEzIGV4cCAwLjc0NzgwMzMzNTYyNjE3NzEgLT4gMi4xMTIzNTQ3ODE5NzU0MTggSW5leGFjdCBSb3VuZGVkCitleHB4MTExNCBleHAgNTEuNzc2NjM3NjE4Mjc5NjYgIC0+IDMuMDY0MTM1ODAxMTIwMzY1RSsyMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTE1IGV4cCAwLjE1MjQ5ODk3ODMwNjEwMTIgLT4gMS4xNjQ3NDEyNzIwODQ5NTUgSW5leGFjdCBSb3VuZGVkCitleHB4MTExNiBleHAgMC4wMDY2Mjk4Nzk4NjY5MjE5IC0+IDEuMDA2NjUxOTA2MTcwNzkxIEluZXhhY3QgUm91bmRlZAorZXhweDExMTcgZXhwIDkuOTU1MTQxODY1NTM0OTYwICAtPiAyMTA2MC4yMzMzNDI4NzAzOCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTE4IGV4cCA5Mi4zNDUwMzA1OTE5ODQ4MyAgLT4gMS4yNzMzMTg5OTM0ODEyMjZFKzQwIEluZXhhY3QgUm91bmRlZAorZXhweDExMTkgZXhwIDAuMDAwMDcwOTM4ODY3NzM0NiAtPiAxLjAwMDA3MDk0MTM4Mzk1NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTIwIGV4cCA3OS4xMjg4MzAzNjQzMzIwNCAgLT4gMi4zMTg1Mzg4OTkzODkyNDNFKzM0IEluZXhhY3QgUm91bmRlZAorZXhweDExMjEgZXhwIDAuMDAwMDA5MDg4MTU0ODg3MyAtPiAxLjAwMDAwOTA4ODE5NjE4NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTIyIGV4cCAwLjA0MjQ4Mjg4MDk2MDM0MTEgLT4gMS4wNDMzOTgxOTQyNDU3MjAgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyMyBleHAgMC44MDA5MDM1ODkxNDI3NDE2IC0+IDIuMjI3NTUyODExOTMzMzEwIEluZXhhY3QgUm91bmRlZAorZXhweDExMjQgZXhwIDguODI1Nzg2MTY3MjgzMTAyICAtPiA2ODA3LjU0MDQ1NTI4OTk5NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTI1IGV4cCAxLjUzNTQ1NzI0OTc0NjI3NSAgLT4gNC42NDM0NDgyNjAxNDY4NDkgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyNiBleHAgNjkuMDIyNTQyNTQzNTU4MDAgIC0+IDkuNDY0NzU0NTAwNjcwNjUzRSsyOSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTI3IGV4cCAwLjAwMDcwNTA1NTQzNjg3MTMgLT4gMS4wMDA3MDUzMDQwNDY4ODAgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyOCBleHAgMC4wMDAwMDgxMjA2NTQ5NTA0IC0+IDEuMDAwMDA4MTIwNjg3OTIzIEluZXhhY3QgUm91bmRlZAorZXhweDExMjkgZXhwIDAuNjIxNzc0ODU0NjQxMTM3ICAtPiAxLjg2MjIzMDI5ODU1NDkwMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTMwIGV4cCAzLjg0NzYyOTAzMTQwNDM1NCAgLT4gNDYuODgxNzc2MTM1NjgyMDMgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzMSBleHAgMjQuODEyNTAxODQ2OTc3MzIgIC0+IDU5Njk0MjY4NDU2LjE5OTY2IEluZXhhY3QgUm91bmRlZAorZXhweDExMzIgZXhwIDUuMTA3NTQ2NTAwNTE2MDQ0ICAtPiAxNjUuMjY0MzgwOTc1NTY3MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTMzIGV4cCA3OS4xNzgxMDk0Mzk1MTk4NiAgLT4gMi40MzU2NTYzNzI1NDEzNjBFKzM0IEluZXhhY3QgUm91bmRlZAorZXhweDExMzQgZXhwIDAuMDA1MTM5NDY5NTY2NzAxNSAtPiAxLjAwNTE1MjY5OTI5NTMwMSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTM1IGV4cCA1Ny40NDUwNDQ4ODUwMTcyNSAgLT4gOC44NzI5MDg1NjY5Mjk2ODhFKzI0IEluZXhhY3QgUm91bmRlZAorZXhweDExMzYgZXhwIDAuMDAwMDUwODM4ODk2ODAzNiAtPiAxLjAwMDA1MDg0MDE4OTEyMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTM3IGV4cCA2OS43MTMwOTkzMjE0ODk5NyAgLT4gMS44ODgwNTM3NDA2OTM1NDFFKzMwIEluZXhhY3QgUm91bmRlZAorZXhweDExMzggZXhwIDAuMDA2NDE4MzQxMjk4MTUwMiAtPiAxLjAwNjQzODk4Mjk4ODgzNSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTM5IGV4cCA5LjM0Njk5MTIyMDgxNDY3NyAgLT4gMTE0NjQuMjc4MDIwMzUwODIgSW5leGFjdCBSb3VuZGVkCitleHB4MTE0MCBleHAgMzMuMDkwODcxMzk5OTkxNTIgIC0+IDIzNTA2MjIyOTE2ODc2My41IEluZXhhY3QgUm91bmRlZAorCistLSBSYW5kb21zIFA9Nywgd2l0aGluIDAtOQorUHJlY2lzaW9uOiA3CittYXhFeHBvbmVudDogOTYKK21pbkV4cG9uZW50OiAtOTUKK2V4cHgxMDAxIGV4cCAyLjM5NTQ0MSAgLT4gMTAuOTczMDQgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwMiBleHAgMC42NDA2Nzc5IC0+IDEuODk3NzY3IEluZXhhY3QgUm91bmRlZAorZXhweDEwMDMgZXhwIDAuNTYxODIxOCAtPiAxLjc1Mzg2NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDA0IGV4cCAzLjA1NTEyMCAgLT4gMjEuMjIzNzMgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwNSBleHAgMS41MzY3OTIgIC0+IDQuNjQ5NjUwIEluZXhhY3QgUm91bmRlZAorZXhweDEwMDYgZXhwIDAuMDgwMTU5MSAtPiAxLjA4MzQ1OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDA3IGV4cCAwLjA5NjY4NzUgLT4gMS4xMDE1MTYgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwOCBleHAgMC4wNjQ2NzYxIC0+IDEuMDY2ODEzIEluZXhhY3QgUm91bmRlZAorZXhweDEwMDkgZXhwIDAuMDA5NTY3MCAtPiAxLjAwOTYxMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDEwIGV4cCAyLjk1Njg1OSAgLT4gMTkuMjM3NDUgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxMSBleHAgNy41MDQ2NzkgIC0+IDE4MTYuNTIyIEluZXhhY3QgUm91bmRlZAorZXhweDEwMTIgZXhwIDAuMDA0NTI1OSAtPiAxLjAwNDUzNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDEzIGV4cCAzLjgxMDA3MSAgLT4gNDUuMTUzNjQgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxNCBleHAgMS41MDIzOTAgIC0+IDQuNDkyNDEzIEluZXhhY3QgUm91bmRlZAorZXhweDEwMTUgZXhwIDAuMDMyMTUyMyAtPiAxLjAzMjY3NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDE2IGV4cCAwLjAwNTcyMTQgLT4gMS4wMDU3MzggSW5leGFjdCBSb3VuZGVkCitleHB4MTAxNyBleHAgOS44MTE0NDUgIC0+IDE4MjQxLjMzIEluZXhhY3QgUm91bmRlZAorZXhweDEwMTggZXhwIDMuMjQ1MjQ5ICAtPiAyNS42NjgxMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDE5IGV4cCAwLjMxODk3NDIgLT4gMS4zNzU3MTYgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyMCBleHAgMC44NjIxNjEwIC0+IDIuMzY4MjczIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjEgZXhwIDAuMDEyMjUxMSAtPiAxLjAxMjMyNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDIyIGV4cCAyLjIwMjA4OCAgLT4gOS4wNDM4NzcgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyMyBleHAgOC43NzgyMDMgIC0+IDY0OTEuMjAyIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjQgZXhwIDAuMTg5NjI3OSAtPiAxLjIwODgwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDI1IGV4cCAwLjQ1MTA5NDcgLT4gMS41NzAwMzAgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyNiBleHAgMC4yNzY0MTMgIC0+IDEuMzE4MzkyIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjcgZXhwIDQuNDkwMDY3ICAtPiA4OS4xMjc0MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDI4IGV4cCAwLjA0Mzk3ODYgLT4gMS4wNDQ5NjAgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyOSBleHAgMC44MTY4MjQ1IC0+IDIuMjYzMzAxIEluZXhhY3QgUm91bmRlZAorZXhweDEwMzAgZXhwIDAuMDM5MTY1OCAtPiAxLjAzOTk0MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDMxIGV4cCA5LjI2MTgxNiAgLT4gMTA1MjguMjQgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzMiBleHAgOS42MTExODYgIC0+IDE0OTMwLjg3IEluZXhhY3QgUm91bmRlZAorZXhweDEwMzMgZXhwIDkuMTE4MTI1ICAtPiA5MTE5LjA4NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDM0IGV4cCA5LjQ2OTA4MyAgLT4gMTI5NTMuMDAgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzNSBleHAgMC4wNDk5OTgzIC0+IDEuMDUxMjY5IEluZXhhY3QgUm91bmRlZAorZXhweDEwMzYgZXhwIDAuMDA1MDc0NiAtPiAxLjAwNTA4NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDM3IGV4cCAwLjAwMTQ2OTYgLT4gMS4wMDE0NzEgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzOCBleHAgOS4xMzg0OTQgIC0+IDkzMDYuNzM5IEluZXhhY3QgUm91bmRlZAorZXhweDEwMzkgZXhwIDAuMDA2NTQzNiAtPiAxLjAwNjU2NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDQwIGV4cCAwLjcyODQ4MDMgLT4gMi4wNzE5MzAgSW5leGFjdCBSb3VuZGVkCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXh0cmEuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXh0cmEuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjMwZDhlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHRyYS5kZWNUZXN0CkBAIC0wLDAgKzEsMjgzMCBAQAordmVyc2lvbjogPy4/PworCitleHRlbmRlZDogMQorcm91bmRpbmc6IGhhbGZfZXZlbgorCistLSB0ZXN0aW5nIGZvbGRkb3duIGFuZCBjbGFtcGluZworbWF4ZXhwb25lbnQ6IDkKK21pbmV4cG9uZW50OiAtOQorcHJlY2lzaW9uOiA2CitjbGFtcDogMQorZXh0cjAwMDAgYXBwbHkgMUUrMTEgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHRyMDAwMSBhcHBseSAxRSsxMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4dHIwMDAyIGFwcGx5IDFFKzkgLT4gMS4wMDAwMEUrOSBDbGFtcGVkCitleHRyMDAwMyBhcHBseSAxRSs4IC0+IDEuMDAwMEUrOCBDbGFtcGVkCitleHRyMDAwNCBhcHBseSAxRSs3IC0+IDEuMDAwRSs3IENsYW1wZWQKK2V4dHIwMDA1IGFwcGx5IDFFKzYgLT4gMS4wMEUrNiBDbGFtcGVkCitleHRyMDAwNiBhcHBseSAxRSs1IC0+IDEuMEUrNSBDbGFtcGVkCitleHRyMDAwNyBhcHBseSAxRSs0IC0+IDFFKzQKK2V4dHIwMDA4IGFwcGx5IDFFKzMgLT4gMUUrMworZXh0cjAwMDkgYXBwbHkgMUUrMiAtPiAxRSsyCitleHRyMDAxMCBhcHBseSAxRSsxIC0+IDFFKzEKK2V4dHIwMDExIGFwcGx5IDEgLT4gMQorZXh0cjAwMTIgYXBwbHkgMUUtMSAtPiAwLjEKK2V4dHIwMDEzIGFwcGx5IDFFLTIgLT4gMC4wMQorZXh0cjAwMTQgYXBwbHkgMUUtMyAtPiAwLjAwMQorZXh0cjAwMTUgYXBwbHkgMUUtNCAtPiAwLjAwMDEKK2V4dHIwMDE2IGFwcGx5IDFFLTUgLT4gMC4wMDAwMQorZXh0cjAwMTcgYXBwbHkgMUUtNiAtPiAwLjAwMDAwMQorZXh0cjAwMTggYXBwbHkgMUUtNyAtPiAxRS03CitleHRyMDAxOSBhcHBseSAxRS04IC0+IDFFLTgKK2V4dHIwMDIwIGFwcGx5IDFFLTkgLT4gMUUtOQorZXh0cjAwMjEgYXBwbHkgMUUtMTAgLT4gMUUtMTAgU3Vibm9ybWFsCitleHRyMDAyMiBhcHBseSAxRS0xMSAtPiAxRS0xMSBTdWJub3JtYWwKK2V4dHIwMDIzIGFwcGx5IDFFLTEyIC0+IDFFLTEyIFN1Ym5vcm1hbAorZXh0cjAwMjQgYXBwbHkgMUUtMTMgLT4gMUUtMTMgU3Vibm9ybWFsCitleHRyMDAyNSBhcHBseSAxRS0xNCAtPiAxRS0xNCBTdWJub3JtYWwKK2V4dHIwMDI2IGFwcGx5IDFFLTE1IC0+IDBFLTE0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2V4dHIwMDI3IGFwcGx5IDFFLTE2IC0+IDBFLTE0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2NsYW1wOiAwCisKKy0tIGxhcmdlIHByZWNpc2lvbiwgc21hbGwgbWluaW11bSBhbmQgbWF4aW11bSBleHBvbmVudDsgaW4gdGhpcyBjYXNlCistLSBpdCdzIHBvc3NpYmxlIHRoYXQgZm9sZGRvd24gaXMgcmVxdWlyZWQgb24gYSBzdWJub3JtYWwgcmVzdWx0CittYXhleHBvbmVudDogOQorbWluZXhwb25lbnQ6IC05CitwcmVjaXNpb246IDI0CitjbGFtcDogMQorZXh0cjAxMDAgYXBwbHkgMUUrMTEgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHRyMDEwMSBhcHBseSAxRSsxMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4dHIwMTAyIGFwcGx5IDFFKzkgLT4gMTAwMDAwMDAwMC4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDEwMyBhcHBseSAxRSs4IC0+IDEwMDAwMDAwMC4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDEwNCBhcHBseSAxRSs3IC0+IDEwMDAwMDAwLjAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2V4dHIwMTA1IGFwcGx5IDFFKzYgLT4gMTAwMDAwMC4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDEwNiBhcHBseSAxRSs1IC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDEwNyBhcHBseSAxRSs0IC0+IDEwMDAwLjAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2V4dHIwMTA4IGFwcGx5IDFFKzMgLT4gMTAwMC4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDEwOSBhcHBseSAxRSsyIC0+IDEwMC4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDExMCBhcHBseSAxRSsxIC0+IDEwLjAwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2V4dHIwMTExIGFwcGx5IDEgLT4gICAgMS4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDExMiBhcHBseSAxRS0xIC0+IDAuMTAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMTMgYXBwbHkgMUUtMiAtPiAwLjAxMDAwMDAwMDAwMDAwIENsYW1wZWQKK2V4dHIwMTE0IGFwcGx5IDFFLTMgLT4gMC4wMDEwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDExNSBhcHBseSAxRS00IC0+IDAuMDAwMTAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMTYgYXBwbHkgMUUtNSAtPiAwLjAwMDAxMDAwMDAwMDAwIENsYW1wZWQKK2V4dHIwMTE3IGFwcGx5IDFFLTYgLT4gMC4wMDAwMDEwMDAwMDAwMCBDbGFtcGVkCitleHRyMDExOCBhcHBseSAxRS03IC0+IDEuMDAwMDAwMEUtNyBDbGFtcGVkCitleHRyMDExOSBhcHBseSAxRS04IC0+IDEuMDAwMDAwRS04IENsYW1wZWQKK2V4dHIwMTIwIGFwcGx5IDFFLTkgLT4gMS4wMDAwMEUtOSBDbGFtcGVkCitleHRyMDEyMSBhcHBseSAxRS0xMCAtPiAxLjAwMDBFLTEwIFN1Ym5vcm1hbCBDbGFtcGVkCitleHRyMDEyMiBhcHBseSAxRS0xMSAtPiAxLjAwMEUtMTEgU3Vibm9ybWFsIENsYW1wZWQKK2V4dHIwMTIzIGFwcGx5IDFFLTEyIC0+IDEuMDBFLTEyIFN1Ym5vcm1hbCBDbGFtcGVkCitleHRyMDEyNCBhcHBseSAxRS0xMyAtPiAxLjBFLTEzIFN1Ym5vcm1hbCBDbGFtcGVkCitleHRyMDEyNSBhcHBseSAxRS0xNCAtPiAxRS0xNCBTdWJub3JtYWwKK2V4dHIwMTI2IGFwcGx5IDFFLTE1IC0+IDFFLTE1IFN1Ym5vcm1hbAorZXh0cjAxMjcgYXBwbHkgMUUtMTYgLT4gMUUtMTYgU3Vibm9ybWFsCitleHRyMDEyOCBhcHBseSAxRS0xNyAtPiAxRS0xNyBTdWJub3JtYWwKK2V4dHIwMTI5IGFwcGx5IDFFLTE4IC0+IDFFLTE4IFN1Ym5vcm1hbAorZXh0cjAxMzAgYXBwbHkgMUUtMTkgLT4gMUUtMTkgU3Vibm9ybWFsCitleHRyMDEzMSBhcHBseSAxRS0yMCAtPiAxRS0yMCBTdWJub3JtYWwKK2V4dHIwMTMyIGFwcGx5IDFFLTIxIC0+IDFFLTIxIFN1Ym5vcm1hbAorZXh0cjAxMzMgYXBwbHkgMUUtMjIgLT4gMUUtMjIgU3Vibm9ybWFsCitleHRyMDEzNCBhcHBseSAxRS0yMyAtPiAxRS0yMyBTdWJub3JtYWwKK2V4dHIwMTM1IGFwcGx5IDFFLTI0IC0+IDFFLTI0IFN1Ym5vcm1hbAorZXh0cjAxMzYgYXBwbHkgMUUtMjUgLT4gMUUtMjUgU3Vibm9ybWFsCitleHRyMDEzNyBhcHBseSAxRS0yNiAtPiAxRS0yNiBTdWJub3JtYWwKK2V4dHIwMTM4IGFwcGx5IDFFLTI3IC0+IDFFLTI3IFN1Ym5vcm1hbAorZXh0cjAxMzkgYXBwbHkgMUUtMjggLT4gMUUtMjggU3Vibm9ybWFsCitleHRyMDE0MCBhcHBseSAxRS0yOSAtPiAxRS0yOSBTdWJub3JtYWwKK2V4dHIwMTQxIGFwcGx5IDFFLTMwIC0+IDFFLTMwIFN1Ym5vcm1hbAorZXh0cjAxNDIgYXBwbHkgMUUtMzEgLT4gMUUtMzEgU3Vibm9ybWFsCitleHRyMDE0MyBhcHBseSAxRS0zMiAtPiAxRS0zMiBTdWJub3JtYWwKK2V4dHIwMTQ0IGFwcGx5IDFFLTMzIC0+IDBFLTMyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2V4dHIwMTQ1IGFwcGx5IDFFLTM0IC0+IDBFLTMyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2NsYW1wOiAwCisKKy0tIHNvbWUgYnVnZ3kgYWRkaXRpb24gY2FzZXMgZnJvbSBQeXRob24gMi41LngKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDYKK2V4dHIxMDAwIGFkZCAwRSsxMDAwIDBFKzIwMDAgLT4gMEUrOTk5IENsYW1wZWQKK2V4dHIxMDAxIGFkZCAwRSsxMDA0IDBFKzEwMDEgLT4gMEUrOTk5IENsYW1wZWQKK2NsYW1wOiAxCitleHRyMTAwMiBhZGQgMEUrMTAwMCAwRSsxMDAwIC0+IDBFKzk5NCBDbGFtcGVkCitjbGFtcDogMAorZXh0cjEwMDMgYWRkIDBFKzEwMDAgMEUtMTAwNSAtPiAwRS0xMDA0IENsYW1wZWQKK2V4dHIxMDA0IGFkZCAwRS0xMDA2IDAgLT4gMEUtMTAwNCBDbGFtcGVkCitleHRyMTAwNSBhZGQgMUUrMTAwMCAtMUUrMTAwMCAtPiAwRSs5OTkgQ2xhbXBlZAorZXh0cjEwMDYgYWRkIC0zLjFFKzEwMDQgMy4xRSsxMDA0IC0+IDBFKzk5OSBDbGFtcGVkCitjbGFtcDogMQorZXh0cjEwMDcgYWRkIDFFKzk5OCAtMUUrOTk4IC0+IDBFKzk5NCBDbGFtcGVkCitjbGFtcDogMAorZXh0cjEwMDggYWRkIDJFLTEwMDUgLTJFLTEwMDUgLT4gMEUtMTAwNCBDbGFtcGVkCitleHRyMTAwOSBhZGQgLTMuMUUtMTAwNSAzLjFFLTEwMDUgLT4gMEUtMTAwNCBDbGFtcGVkCisKK3ByZWNpc2lvbjogMworZXh0cjEwMTAgYWRkIDk5OTQ5LjkgMC4yMDAwMDAgLT4gMS4wMEUrNSBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMDExIGFkZCA5OTk0OS45IDAuMTAwMDAwIC0+IDEuMDBFKzUgSW5leGFjdCBSb3VuZGVkCitleHRyMTAxMiBhZGQgOTk4NDkuOSAwLjIwMDAwMCAtPiA5Ljk5RSs0IEluZXhhY3QgUm91bmRlZAorZXh0cjEwMTMgYWRkIDk5ODQ5LjkgMC4xMDAwMDAgLT4gOS45OEUrNCBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMDE0IGFkZCAxLjAxNDkgMC4wMDAxMSAtPiAxLjAyIEluZXhhY3QgUm91bmRlZAorZXh0cjEwMTUgYWRkIDEuMDE0OSAwLjAwMDEwIC0+IDEuMDIgSW5leGFjdCBSb3VuZGVkCitleHRyMTAxNiBhZGQgMS4wMTQ5IDAuMDAwMDkgLT4gMS4wMSBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMDE3IGFkZCAxLjAwNDkgMC4wMDAxMSAtPiAxLjAxIEluZXhhY3QgUm91bmRlZAorZXh0cjEwMTggYWRkIDEuMDA0OSAwLjAwMDEwIC0+IDEuMDAgSW5leGFjdCBSb3VuZGVkCitleHRyMTAxOSBhZGQgMS4wMDQ5IDAuMDAwMDkgLT4gMS4wMCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitleHRyMTAyMCBhZGQgOTk5OTkuOSAwLjIwMDAwMCAtPiAxLjAwRSs1IEluZXhhY3QgUm91bmRlZAorZXh0cjEwMjEgYWRkIDk5OTk5LjggMC4yMDAwMDAgLT4gMS4wMEUrNSBSb3VuZGVkCitleHRyMTAyMiBhZGQgOTk5OTkuNyAwLjIwMDAwMCAtPiA5Ljk5RSs0IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorCistLSBhIGJ1ZyBpbiBfcmVzY2FsZSBjYXVzZWQgdGhlIGZvbGxvd2luZyB0byBmYWlsIGluIFB5dGhvbiAyLjUuMQorbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogNgorZXh0cjExMDAgYWRkIDBFKzEwMDAgMUUrMTAwMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMTAxIHJlbWFpbmRlciAxRSsxMDAwIDJFKzEwMDAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3RzIGZvciBzY2FsZWIgaW4gY2FzZSB3aGVyZSBpbnB1dCBwcmVjaXNpb24gPiBjb250ZXh0IHByZWNpc2lvbi4KKy0tIFJlc3VsdCBzaG91bGQgYmUgcm91bmRlZC4gIChUaGlzIGlzbid0IHRvdGFsbHkgY2xlYXIgZnJvbSB0aGUKKy0tIHNwZWNpZmljYXRpb24sIGJ1dCB0aGUgdHJlYXRtZW50IG9mIHVuZGVyZmxvdyBpbiB0aGUgdGVzdGNhc2VzCistLSBzdWdnZXN0cyB0aGF0IHJvdW5kaW5nIHNob3VsZCBvY2N1ciBpbiBnZW5lcmFsLiAgRnVydGhlcm1vcmUsIGl0J3MKKy0tIHRoZSB3YXkgdGhhdCB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGJlaGF2ZXMuKQorbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogMworZXh0cjEyMDAgc2NhbGViIDEyMzQgMSAtPiAxLjIzRSs0IEluZXhhY3QgUm91bmRlZAorZXh0cjEyMDEgc2NhbGViIDU2NzggMCAtPiA1LjY4RSszIEluZXhhY3QgUm91bmRlZAorZXh0cjEyMDIgc2NhbGViIC05MTA1IC0xIC0+IC05MTAgSW5leGFjdCBSb3VuZGVkCisKKy0tIEludmFsaWQgb3BlcmF0aW9uIGZyb20gMCAqIGluZmluaXR5IGluIGZtYQorLS0gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGEgdGhpcmQtYXJndW1lbnQgc05hTgorZXh0cjEzMDAgZm1hIDAgSW5mIHNOYU4xMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitleHRyMTMwMSBmbWEgSW5mIDAgc05hTjQ1NiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2V4dHIxMzAyIGZtYSAwRTEyMyAtSW5mIHNOYU43ODkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitleHRyMTMwMiBmbWEgLUluZiAwRS00NTYgc05hTjE0OCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gbWF4L21pbi9tYXhfbWFnL21pbl9tYWcgYnVnIGluIDIuNS4yLzIuNi8zLjA6IG1heChOYU4sIGZpbml0ZSkgZ2F2ZQorLS0gaW5jb3JyZWN0IGFuc3dlcnMgd2hlbiB0aGUgZmluaXRlIG51bWJlciByZXF1aXJlZCByb3VuZGluZzsgc2ltaWxhcmx5CistLSBmb3IgdGhlIG90aGVyIHRocmUgZnVuY3Rpb25zCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA2Cityb3VuZGluZzogaGFsZl9ldmVuCitleHRyMTQwMCBtYXggTmFOIDEyMzQ1NjcgLT4gMS4yMzQ1N0UrNiBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxNDAxIG1heCAzMTQxNTkwRS0xMjMgTmFOMTcyOSAtPiAzLjE0MTU5RS0xMTcgUm91bmRlZAorZXh0cjE0MDIgbWF4IC03LjY1NDMyMSAtTmFOIC0+IC03LjY1NDMyIEluZXhhY3QgUm91bmRlZAorZXh0cjE0MTAgbWluIC1OYU4gLTc2NTQzMi4xIC0+IC03NjU0MzIgSW5leGFjdCBSb3VuZGVkCitleHRyMTQxMSBtaW4gMzE0MTU5MiBOYU4gLT4gMy4xNDE1OUUrNiBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxNDIwIG1heF9tYWcgMC4xMTExMTExIC1OYU4xMjMgLT4gMC4xMTExMTEgSW5leGFjdCBSb3VuZGVkCitleHRyMTQyMSBtYXhfbWFnIE5hTjk5OTk5OTk5OSAwLjAwMTIzNDU2NyAtPiAwLjAwMTIzNDU3IEluZXhhY3QgUm91bmRlZAorZXh0cjE0MzAgbWluX21hZyA5MTgxNzE2MTUxIC1OYU4gLT4gOS4xODE3MkUrOSBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxNDMxIG1pbl9tYWcgTmFONCAxLjgxODE4MEUxMDAgLT4gMS44MTgxOEUrMTAwIFJvdW5kZWQKKworLS0gSXNzdWUgIzY3OTQ6IHdoZW4gY29tcGFyaW5nIE5hTnMgdXNpbmcgY29tcGFyZV90b3RhbCwgcGF5bG9hZHMKKy0tIHNob3VsZCBiZSBjb21wYXJlZCBhcyB0aG91Z2ggcG9zaXRpdmUgaW50ZWdlcnM7IG5vdAorLS0gbGV4aWNvZ3JhcGhpY2FsbHkgYXMgc3RyaW5ncy4KK2V4dHIxNTAwIGNvbXBhcmV0b3RhbCBOYU4xMjMgTmFONDUgLT4gMQorZXh0cjE1MDEgY29tcGFyZXRvdGFsIHNOYU4xMjMgc05hTjQ1IC0+IDEKK2V4dHIxNTAyIGNvbXBhcmV0b3RhbCAtTmFOMTIzIC1OYU40NSAtPiAtMQorZXh0cjE1MDMgY29tcGFyZXRvdGFsIC1zTmFOMTIzIC1zTmFONDUgLT4gLTEKK2V4dHIxNTA0IGNvbXBhcmV0b3RhbCBOYU40NSBOYU4xMjMgLT4gLTEKK2V4dHIxNTA1IGNvbXBhcmV0b3RhbCBzTmFONDUgc05hTjEyMyAtPiAtMQorZXh0cjE1MDYgY29tcGFyZXRvdGFsIC1OYU40NSAtTmFOMTIzIC0+IDEKK2V4dHIxNTA3IGNvbXBhcmV0b3RhbCAtc05hTjQ1IC1zTmFOMTIzIC0+IDEKKworZXh0cjE1MTAgY29tcGFyZXRvdGFsIC1zTmFONjM0NTA3NDg4NTQxNzI0MTYgLXNOYU45MTE5OTMgLT4gLTEKK2V4dHIxNTExIGNvbXBhcmV0b3RtYWcgTmFOMTIyMjIyMjIyMjIyMiAtTmFOOTk5OTk5IC0+IDEKKworLS0gSXNzdWUgIzcyMzM6IHJvdGF0ZSBhbmQgc2NhbGUgc2hvdWxkIHRydW5jYXRlIGFuIGFyZ3VtZW50CistLSBvZiBsZW5ndGggZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IHByZWNpc2lvbi4KK3ByZWNpc2lvbjogNAorZXh0cjE2MDAgcm90YXRlIDEyMzQ1NjcgLTUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitleHRyMTYwMSByb3RhdGUgMTIzNDU2NyAtNCAtPiA0NTY3CitleHRyMTYwMiByb3RhdGUgMTIzNDU2NyAtMyAtPiA1Njc0CitleHRyMTYwMyByb3RhdGUgMTIzNDU2NyAtMiAtPiA2NzQ1CitleHRyMTYwNCByb3RhdGUgMTIzNDU2NyAtMSAtPiA3NDU2CitleHRyMTYwNSByb3RhdGUgMTIzNDU2NyAwIC0+IDQ1NjcKK2V4dHIxNjA2IHJvdGF0ZSAxMjM0NTY3IDEgLT4gNTY3NAorZXh0cjE2MDcgcm90YXRlIDEyMzQ1NjcgMiAtPiA2NzQ1CitleHRyMTYwOCByb3RhdGUgMTIzNDU2NyAzIC0+IDc0NTYKK2V4dHIxNjA5IHJvdGF0ZSAxMjM0NTY3IDQgLT4gNDU2NworZXh0cjE2MTAgcm90YXRlIDEyMzQ1NjcgNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZXh0cjE2NTAgc2hpZnQgMTIzNDU2NyAtNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2V4dHIxNjUxIHNoaWZ0IDEyMzQ1NjcgLTQgLT4gMAorZXh0cjE2NTIgc2hpZnQgMTIzNDU2NyAtMyAtPiA0CitleHRyMTY1MyBzaGlmdCAxMjM0NTY3IC0yIC0+IDQ1CitleHRyMTY1NCBzaGlmdCAxMjM0NTY3IC0xIC0+IDQ1NgorZXh0cjE2NTUgc2hpZnQgMTIzNDU2NyAwIC0+IDQ1NjcKK2V4dHIxNjU2IHNoaWZ0IDEyMzQ1NjcgMSAtPiA1NjcwCitleHRyMTY1NyBzaGlmdCAxMjM0NTY3IDIgLT4gNjcwMAorZXh0cjE2NTggc2hpZnQgMTIzNDU2NyAzIC0+IDcwMDAKK2V4dHIxNjU5IHNoaWZ0IDEyMzQ1NjcgNCAtPiAwCitleHRyMTY2MCBzaGlmdCAxMjM0NTY3IDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIENhc2VzIHdoZXJlIHRoZSBwb3dlciBmdW5jdGlvbiB3YXMgaW1wb3NzaWJseSBzbG93IHRvIGRldGVybWluZSB0aGF0IHRoZQorLS0gcmVzdWx0IGlzIGluZXhhY3QuICBUaGFua3MgU3RlZmFuIEtyYWggZm9yIGlkZW50aWZ5aW5nIHRoaXMgcHJvYmxlbS4KK3ByZWNpc2lvbjogMTYKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbkV4cG9uZW50OiAtOTk5OTk5OTk5CitleHRyMTcwMCBwb3dlciAxMCAxZS05OTk5OTk5OTkgLT4gMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitleHRyMTcwMSBwb3dlciAxMDAuMCAtNTU3LjcxZS03NDI4ODg4ODggLT4gMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitleHRyMTcwMiBwb3dlciAxMCAxZS0xMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFub3RoZXIgb25lIChzZWUgaXNzdWUgIzEyMDgwKS4gIFRoYW5rcyBhZ2FpbiB0byBTdGVmYW4gS3JhaC4KK2V4dHIxNzAzIHBvd2VyIDQgLTEuMmUtOTk5OTk5OTk5IC0+IDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBBIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBleGFjdCBjYXNlcyBmb3IgcG93ZXIuICBOb3RlIHRoYXQgdGhlIHNwZWNpZmljYXRpb24KKy0tIHJlcXVpcmVzIHRoZXNlIHRvIGJlIHJlcG9ydGVkIGFzIEluZXhhY3QuCitleHRyMTcxMCBwb3dlciAxZTM3NSA1NmUtMyAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMjEgSW5leGFjdCBSb3VuZGVkCitleHRyMTcxMSBwb3dlciAxMDAwMCAwLjc1IC0+IDEwMDAuMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZXh0cjE3MTIgcG93ZXIgMWUtMjQgMC44NzUgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTIxIEluZXhhY3QgUm91bmRlZAorCistLSBTb21lIG1vcmUgZXhhY3QgY2FzZXMsIGV4ZXJjaXNpbmcgcG93ZXIgd2l0aCBuZWdhdGl2ZSBzZWNvbmQgYXJndW1lbnQuCitleHRyMTcyMCBwb3dlciA0MDAgLTAuNSAtPiAwLjA1MDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZXh0cjE3MjEgcG93ZXIgNDA5NiAtMC43NSAtPiAwLjAwMTk1MzEyNTAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxNzIyIHBvd2VyIDYyNWU0IC0wLjI1IC0+IDAuMDIwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIE5vbmV4YWN0IGNhc2VzLCB0byBleGVyY2lzZSBzb21lIG9mIHRoZSBlYXJseSBleGl0IGNvbmRpdGlvbnMgZnJvbQorLS0gX3Bvd2VyX2V4YWN0LgorZXh0cjE3MzAgcG93ZXIgMjA0OCAtMC43NSAtPiAwLjAwMzI4NDc1MTYyMjA4NDgyMiBJbmV4YWN0IFJvdW5kZWQKKworCistLSBUZXN0cyBmb3IgdGhlIGlzXyogYm9vbGVhbiBvcGVyYXRpb25zCitwcmVjaXNpb246IDkKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKK2Jvb2wwMDAwIGlzY2Fub25pY2FsIDBFLTIwMDAgLT4gMQorYm9vbDAwMDEgaXNjYW5vbmljYWwgLTBFLTIwMDAgLT4gMQorYm9vbDAwMDIgaXNjYW5vbmljYWwgMEUtMTAwOCAtPiAxCitib29sMDAwMyBpc2Nhbm9uaWNhbCAtMEUtMTAwOCAtPiAxCitib29sMDAwNCBpc2Nhbm9uaWNhbCAwRS0xMDA3IC0+IDEKK2Jvb2wwMDA1IGlzY2Fub25pY2FsIC0wRS0xMDA3IC0+IDEKK2Jvb2wwMDA2IGlzY2Fub25pY2FsIDBFLTEwMDYgLT4gMQorYm9vbDAwMDcgaXNjYW5vbmljYWwgLTBFLTEwMDYgLT4gMQorYm9vbDAwMDggaXNjYW5vbmljYWwgMEUtMTAwMCAtPiAxCitib29sMDAwOSBpc2Nhbm9uaWNhbCAtMEUtMTAwMCAtPiAxCitib29sMDAxMCBpc2Nhbm9uaWNhbCAwRS05OTkgLT4gMQorYm9vbDAwMTEgaXNjYW5vbmljYWwgLTBFLTk5OSAtPiAxCitib29sMDAxMiBpc2Nhbm9uaWNhbCAwRS05OTggLT4gMQorYm9vbDAwMTMgaXNjYW5vbmljYWwgLTBFLTk5OCAtPiAxCitib29sMDAxNCBpc2Nhbm9uaWNhbCAwRS0xMDAgLT4gMQorYm9vbDAwMTUgaXNjYW5vbmljYWwgLTBFLTEwMCAtPiAxCitib29sMDAxNiBpc2Nhbm9uaWNhbCAwLjAwMDAwMCAtPiAxCitib29sMDAxNyBpc2Nhbm9uaWNhbCAtMC4wMDAwMDAgLT4gMQorYm9vbDAwMTggaXNjYW5vbmljYWwgMC4wMDAgLT4gMQorYm9vbDAwMTkgaXNjYW5vbmljYWwgLTAuMDAwIC0+IDEKK2Jvb2wwMDIwIGlzY2Fub25pY2FsIDAuMDAgLT4gMQorYm9vbDAwMjEgaXNjYW5vbmljYWwgLTAuMDAgLT4gMQorYm9vbDAwMjIgaXNjYW5vbmljYWwgMC4wIC0+IDEKK2Jvb2wwMDIzIGlzY2Fub25pY2FsIC0wLjAgLT4gMQorYm9vbDAwMjQgaXNjYW5vbmljYWwgMCAtPiAxCitib29sMDAyNSBpc2Nhbm9uaWNhbCAtMCAtPiAxCitib29sMDAyNiBpc2Nhbm9uaWNhbCAwRSsxIC0+IDEKK2Jvb2wwMDI3IGlzY2Fub25pY2FsIC0wRSsxIC0+IDEKK2Jvb2wwMDI4IGlzY2Fub25pY2FsIDBFKzIgLT4gMQorYm9vbDAwMjkgaXNjYW5vbmljYWwgLTBFKzIgLT4gMQorYm9vbDAwMzAgaXNjYW5vbmljYWwgMEUrMyAtPiAxCitib29sMDAzMSBpc2Nhbm9uaWNhbCAtMEUrMyAtPiAxCitib29sMDAzMiBpc2Nhbm9uaWNhbCAwRSs2IC0+IDEKK2Jvb2wwMDMzIGlzY2Fub25pY2FsIC0wRSs2IC0+IDEKK2Jvb2wwMDM0IGlzY2Fub25pY2FsIDBFKzEwMCAtPiAxCitib29sMDAzNSBpc2Nhbm9uaWNhbCAtMEUrMTAwIC0+IDEKK2Jvb2wwMDM2IGlzY2Fub25pY2FsIDBFKzk5MCAtPiAxCitib29sMDAzNyBpc2Nhbm9uaWNhbCAtMEUrOTkwIC0+IDEKK2Jvb2wwMDM4IGlzY2Fub25pY2FsIDBFKzk5MSAtPiAxCitib29sMDAzOSBpc2Nhbm9uaWNhbCAtMEUrOTkxIC0+IDEKK2Jvb2wwMDQwIGlzY2Fub25pY2FsIDBFKzk5MiAtPiAxCitib29sMDA0MSBpc2Nhbm9uaWNhbCAtMEUrOTkyIC0+IDEKK2Jvb2wwMDQyIGlzY2Fub25pY2FsIDBFKzk5OCAtPiAxCitib29sMDA0MyBpc2Nhbm9uaWNhbCAtMEUrOTk4IC0+IDEKK2Jvb2wwMDQ0IGlzY2Fub25pY2FsIDBFKzk5OSAtPiAxCitib29sMDA0NSBpc2Nhbm9uaWNhbCAtMEUrOTk5IC0+IDEKK2Jvb2wwMDQ2IGlzY2Fub25pY2FsIDBFKzEwMDAgLT4gMQorYm9vbDAwNDcgaXNjYW5vbmljYWwgLTBFKzEwMDAgLT4gMQorYm9vbDAwNDggaXNjYW5vbmljYWwgMEUrMjAwMCAtPiAxCitib29sMDA0OSBpc2Nhbm9uaWNhbCAtMEUrMjAwMCAtPiAxCitib29sMDA1MCBpc2Nhbm9uaWNhbCAxRS0yMDAwIC0+IDEKK2Jvb2wwMDUxIGlzY2Fub25pY2FsIC0xRS0yMDAwIC0+IDEKK2Jvb2wwMDUyIGlzY2Fub25pY2FsIDFFLTEwMDggLT4gMQorYm9vbDAwNTMgaXNjYW5vbmljYWwgLTFFLTEwMDggLT4gMQorYm9vbDAwNTQgaXNjYW5vbmljYWwgMUUtMTAwNyAtPiAxCitib29sMDA1NSBpc2Nhbm9uaWNhbCAtMUUtMTAwNyAtPiAxCitib29sMDA1NiBpc2Nhbm9uaWNhbCAxRS0xMDA2IC0+IDEKK2Jvb2wwMDU3IGlzY2Fub25pY2FsIC0xRS0xMDA2IC0+IDEKK2Jvb2wwMDU4IGlzY2Fub25pY2FsIDFFLTEwMDAgLT4gMQorYm9vbDAwNTkgaXNjYW5vbmljYWwgLTFFLTEwMDAgLT4gMQorYm9vbDAwNjAgaXNjYW5vbmljYWwgMUUtOTk5IC0+IDEKK2Jvb2wwMDYxIGlzY2Fub25pY2FsIC0xRS05OTkgLT4gMQorYm9vbDAwNjIgaXNjYW5vbmljYWwgMUUtOTk4IC0+IDEKK2Jvb2wwMDYzIGlzY2Fub25pY2FsIC0xRS05OTggLT4gMQorYm9vbDAwNjQgaXNjYW5vbmljYWwgMUUtMTAwIC0+IDEKK2Jvb2wwMDY1IGlzY2Fub25pY2FsIC0xRS0xMDAgLT4gMQorYm9vbDAwNjYgaXNjYW5vbmljYWwgMC4wMDAwMDEgLT4gMQorYm9vbDAwNjcgaXNjYW5vbmljYWwgLTAuMDAwMDAxIC0+IDEKK2Jvb2wwMDY4IGlzY2Fub25pY2FsIDAuMDAxIC0+IDEKK2Jvb2wwMDY5IGlzY2Fub25pY2FsIC0wLjAwMSAtPiAxCitib29sMDA3MCBpc2Nhbm9uaWNhbCAwLjAxIC0+IDEKK2Jvb2wwMDcxIGlzY2Fub25pY2FsIC0wLjAxIC0+IDEKK2Jvb2wwMDcyIGlzY2Fub25pY2FsIDAuMSAtPiAxCitib29sMDA3MyBpc2Nhbm9uaWNhbCAtMC4xIC0+IDEKK2Jvb2wwMDc0IGlzY2Fub25pY2FsIDEgLT4gMQorYm9vbDAwNzUgaXNjYW5vbmljYWwgLTEgLT4gMQorYm9vbDAwNzYgaXNjYW5vbmljYWwgMUUrMSAtPiAxCitib29sMDA3NyBpc2Nhbm9uaWNhbCAtMUUrMSAtPiAxCitib29sMDA3OCBpc2Nhbm9uaWNhbCAxRSsyIC0+IDEKK2Jvb2wwMDc5IGlzY2Fub25pY2FsIC0xRSsyIC0+IDEKK2Jvb2wwMDgwIGlzY2Fub25pY2FsIDFFKzMgLT4gMQorYm9vbDAwODEgaXNjYW5vbmljYWwgLTFFKzMgLT4gMQorYm9vbDAwODIgaXNjYW5vbmljYWwgMUUrNiAtPiAxCitib29sMDA4MyBpc2Nhbm9uaWNhbCAtMUUrNiAtPiAxCitib29sMDA4NCBpc2Nhbm9uaWNhbCAxRSsxMDAgLT4gMQorYm9vbDAwODUgaXNjYW5vbmljYWwgLTFFKzEwMCAtPiAxCitib29sMDA4NiBpc2Nhbm9uaWNhbCAxRSs5OTAgLT4gMQorYm9vbDAwODcgaXNjYW5vbmljYWwgLTFFKzk5MCAtPiAxCitib29sMDA4OCBpc2Nhbm9uaWNhbCAxRSs5OTEgLT4gMQorYm9vbDAwODkgaXNjYW5vbmljYWwgLTFFKzk5MSAtPiAxCitib29sMDA5MCBpc2Nhbm9uaWNhbCAxRSs5OTIgLT4gMQorYm9vbDAwOTEgaXNjYW5vbmljYWwgLTFFKzk5MiAtPiAxCitib29sMDA5MiBpc2Nhbm9uaWNhbCAxRSs5OTggLT4gMQorYm9vbDAwOTMgaXNjYW5vbmljYWwgLTFFKzk5OCAtPiAxCitib29sMDA5NCBpc2Nhbm9uaWNhbCAxRSs5OTkgLT4gMQorYm9vbDAwOTUgaXNjYW5vbmljYWwgLTFFKzk5OSAtPiAxCitib29sMDA5NiBpc2Nhbm9uaWNhbCAxRSsxMDAwIC0+IDEKK2Jvb2wwMDk3IGlzY2Fub25pY2FsIC0xRSsxMDAwIC0+IDEKK2Jvb2wwMDk4IGlzY2Fub25pY2FsIDFFKzIwMDAgLT4gMQorYm9vbDAwOTkgaXNjYW5vbmljYWwgLTFFKzIwMDAgLT4gMQorYm9vbDAxMDAgaXNjYW5vbmljYWwgOUUtMjAwMCAtPiAxCitib29sMDEwMSBpc2Nhbm9uaWNhbCAtOUUtMjAwMCAtPiAxCitib29sMDEwMiBpc2Nhbm9uaWNhbCA5RS0xMDA4IC0+IDEKK2Jvb2wwMTAzIGlzY2Fub25pY2FsIC05RS0xMDA4IC0+IDEKK2Jvb2wwMTA0IGlzY2Fub25pY2FsIDlFLTEwMDcgLT4gMQorYm9vbDAxMDUgaXNjYW5vbmljYWwgLTlFLTEwMDcgLT4gMQorYm9vbDAxMDYgaXNjYW5vbmljYWwgOUUtMTAwNiAtPiAxCitib29sMDEwNyBpc2Nhbm9uaWNhbCAtOUUtMTAwNiAtPiAxCitib29sMDEwOCBpc2Nhbm9uaWNhbCA5RS0xMDAwIC0+IDEKK2Jvb2wwMTA5IGlzY2Fub25pY2FsIC05RS0xMDAwIC0+IDEKK2Jvb2wwMTEwIGlzY2Fub25pY2FsIDlFLTk5OSAtPiAxCitib29sMDExMSBpc2Nhbm9uaWNhbCAtOUUtOTk5IC0+IDEKK2Jvb2wwMTEyIGlzY2Fub25pY2FsIDlFLTk5OCAtPiAxCitib29sMDExMyBpc2Nhbm9uaWNhbCAtOUUtOTk4IC0+IDEKK2Jvb2wwMTE0IGlzY2Fub25pY2FsIDlFLTEwMCAtPiAxCitib29sMDExNSBpc2Nhbm9uaWNhbCAtOUUtMTAwIC0+IDEKK2Jvb2wwMTE2IGlzY2Fub25pY2FsIDAuMDAwMDA5IC0+IDEKK2Jvb2wwMTE3IGlzY2Fub25pY2FsIC0wLjAwMDAwOSAtPiAxCitib29sMDExOCBpc2Nhbm9uaWNhbCAwLjAwOSAtPiAxCitib29sMDExOSBpc2Nhbm9uaWNhbCAtMC4wMDkgLT4gMQorYm9vbDAxMjAgaXNjYW5vbmljYWwgMC4wOSAtPiAxCitib29sMDEyMSBpc2Nhbm9uaWNhbCAtMC4wOSAtPiAxCitib29sMDEyMiBpc2Nhbm9uaWNhbCAwLjkgLT4gMQorYm9vbDAxMjMgaXNjYW5vbmljYWwgLTAuOSAtPiAxCitib29sMDEyNCBpc2Nhbm9uaWNhbCA5IC0+IDEKK2Jvb2wwMTI1IGlzY2Fub25pY2FsIC05IC0+IDEKK2Jvb2wwMTI2IGlzY2Fub25pY2FsIDlFKzEgLT4gMQorYm9vbDAxMjcgaXNjYW5vbmljYWwgLTlFKzEgLT4gMQorYm9vbDAxMjggaXNjYW5vbmljYWwgOUUrMiAtPiAxCitib29sMDEyOSBpc2Nhbm9uaWNhbCAtOUUrMiAtPiAxCitib29sMDEzMCBpc2Nhbm9uaWNhbCA5RSszIC0+IDEKK2Jvb2wwMTMxIGlzY2Fub25pY2FsIC05RSszIC0+IDEKK2Jvb2wwMTMyIGlzY2Fub25pY2FsIDlFKzYgLT4gMQorYm9vbDAxMzMgaXNjYW5vbmljYWwgLTlFKzYgLT4gMQorYm9vbDAxMzQgaXNjYW5vbmljYWwgOUUrMTAwIC0+IDEKK2Jvb2wwMTM1IGlzY2Fub25pY2FsIC05RSsxMDAgLT4gMQorYm9vbDAxMzYgaXNjYW5vbmljYWwgOUUrOTkwIC0+IDEKK2Jvb2wwMTM3IGlzY2Fub25pY2FsIC05RSs5OTAgLT4gMQorYm9vbDAxMzggaXNjYW5vbmljYWwgOUUrOTkxIC0+IDEKK2Jvb2wwMTM5IGlzY2Fub25pY2FsIC05RSs5OTEgLT4gMQorYm9vbDAxNDAgaXNjYW5vbmljYWwgOUUrOTkyIC0+IDEKK2Jvb2wwMTQxIGlzY2Fub25pY2FsIC05RSs5OTIgLT4gMQorYm9vbDAxNDIgaXNjYW5vbmljYWwgOUUrOTk4IC0+IDEKK2Jvb2wwMTQzIGlzY2Fub25pY2FsIC05RSs5OTggLT4gMQorYm9vbDAxNDQgaXNjYW5vbmljYWwgOUUrOTk5IC0+IDEKK2Jvb2wwMTQ1IGlzY2Fub25pY2FsIC05RSs5OTkgLT4gMQorYm9vbDAxNDYgaXNjYW5vbmljYWwgOUUrMTAwMCAtPiAxCitib29sMDE0NyBpc2Nhbm9uaWNhbCAtOUUrMTAwMCAtPiAxCitib29sMDE0OCBpc2Nhbm9uaWNhbCA5RSsyMDAwIC0+IDEKK2Jvb2wwMTQ5IGlzY2Fub25pY2FsIC05RSsyMDAwIC0+IDEKK2Jvb2wwMTUwIGlzY2Fub25pY2FsIDkuOTk5OTk5OTlFLTIwMDAgLT4gMQorYm9vbDAxNTEgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFLTIwMDAgLT4gMQorYm9vbDAxNTIgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUtMTAwOCAtPiAxCitib29sMDE1MyBpc2Nhbm9uaWNhbCAtOS45OTk5OTk5OUUtMTAwOCAtPiAxCitib29sMDE1NCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RS0xMDA3IC0+IDEKK2Jvb2wwMTU1IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RS0xMDA3IC0+IDEKK2Jvb2wwMTU2IGlzY2Fub25pY2FsIDkuOTk5OTk5OTlFLTEwMDYgLT4gMQorYm9vbDAxNTcgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFLTEwMDYgLT4gMQorYm9vbDAxNTggaXNjYW5vbmljYWwgOS45OTk5OTk5OUUtMTAwMCAtPiAxCitib29sMDE1OSBpc2Nhbm9uaWNhbCAtOS45OTk5OTk5OUUtMTAwMCAtPiAxCitib29sMDE2MCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RS05OTkgLT4gMQorYm9vbDAxNjEgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFLTk5OSAtPiAxCitib29sMDE2MiBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RS05OTggLT4gMQorYm9vbDAxNjMgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFLTk5OCAtPiAxCitib29sMDE2NCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RS0xMDAgLT4gMQorYm9vbDAxNjUgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFLTEwMCAtPiAxCitib29sMDE2NiBpc2Nhbm9uaWNhbCAwLjAwMDAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMTY3IGlzY2Fub25pY2FsIC0wLjAwMDAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMTY4IGlzY2Fub25pY2FsIDAuMDA5OTk5OTk5OTkgLT4gMQorYm9vbDAxNjkgaXNjYW5vbmljYWwgLTAuMDA5OTk5OTk5OTkgLT4gMQorYm9vbDAxNzAgaXNjYW5vbmljYWwgMC4wOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMTcxIGlzY2Fub25pY2FsIC0wLjA5OTk5OTk5OTkgLT4gMQorYm9vbDAxNzIgaXNjYW5vbmljYWwgMC45OTk5OTk5OTkgLT4gMQorYm9vbDAxNzMgaXNjYW5vbmljYWwgLTAuOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMTc0IGlzY2Fub25pY2FsIDkuOTk5OTk5OTkgLT4gMQorYm9vbDAxNzUgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTkgLT4gMQorYm9vbDAxNzYgaXNjYW5vbmljYWwgOTkuOTk5OTk5OSAtPiAxCitib29sMDE3NyBpc2Nhbm9uaWNhbCAtOTkuOTk5OTk5OSAtPiAxCitib29sMDE3OCBpc2Nhbm9uaWNhbCA5OTkuOTk5OTk5IC0+IDEKK2Jvb2wwMTc5IGlzY2Fub25pY2FsIC05OTkuOTk5OTk5IC0+IDEKK2Jvb2wwMTgwIGlzY2Fub25pY2FsIDk5OTkuOTk5OTkgLT4gMQorYm9vbDAxODEgaXNjYW5vbmljYWwgLTk5OTkuOTk5OTkgLT4gMQorYm9vbDAxODIgaXNjYW5vbmljYWwgOTk5OTk5OS45OSAtPiAxCitib29sMDE4MyBpc2Nhbm9uaWNhbCAtOTk5OTk5OS45OSAtPiAxCitib29sMDE4NCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RSsxMDAgLT4gMQorYm9vbDAxODUgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFKzEwMCAtPiAxCitib29sMDE4NiBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RSs5OTAgLT4gMQorYm9vbDAxODcgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFKzk5MCAtPiAxCitib29sMDE4OCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RSs5OTEgLT4gMQorYm9vbDAxODkgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFKzk5MSAtPiAxCitib29sMDE5MCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RSs5OTIgLT4gMQorYm9vbDAxOTEgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFKzk5MiAtPiAxCitib29sMDE5MiBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RSs5OTggLT4gMQorYm9vbDAxOTMgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFKzk5OCAtPiAxCitib29sMDE5NCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RSs5OTkgLT4gMQorYm9vbDAxOTUgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFKzk5OSAtPiAxCitib29sMDE5NiBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RSsxMDAwIC0+IDEKK2Jvb2wwMTk3IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RSsxMDAwIC0+IDEKK2Jvb2wwMTk4IGlzY2Fub25pY2FsIDkuOTk5OTk5OTlFKzIwMDAgLT4gMQorYm9vbDAxOTkgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFKzIwMDAgLT4gMQorYm9vbDAyMDAgaXNjYW5vbmljYWwgSW5maW5pdHkgLT4gMQorYm9vbDAyMDEgaXNjYW5vbmljYWwgLUluZmluaXR5IC0+IDEKK2Jvb2wwMjAyIGlzY2Fub25pY2FsIE5hTiAtPiAxCitib29sMDIwMyBpc2Nhbm9uaWNhbCAtTmFOIC0+IDEKK2Jvb2wwMjA0IGlzY2Fub25pY2FsIE5hTjEyMyAtPiAxCitib29sMDIwNSBpc2Nhbm9uaWNhbCAtTmFOMTIzIC0+IDEKK2Jvb2wwMjA2IGlzY2Fub25pY2FsIHNOYU4gLT4gMQorYm9vbDAyMDcgaXNjYW5vbmljYWwgLXNOYU4gLT4gMQorYm9vbDAyMDggaXNjYW5vbmljYWwgc05hTjEyMyAtPiAxCitib29sMDIwOSBpc2Nhbm9uaWNhbCAtc05hTjEyMyAtPiAxCitib29sMDIxMCBpc2Zpbml0ZSAwRS0yMDAwIC0+IDEKK2Jvb2wwMjExIGlzZmluaXRlIC0wRS0yMDAwIC0+IDEKK2Jvb2wwMjEyIGlzZmluaXRlIDBFLTEwMDggLT4gMQorYm9vbDAyMTMgaXNmaW5pdGUgLTBFLTEwMDggLT4gMQorYm9vbDAyMTQgaXNmaW5pdGUgMEUtMTAwNyAtPiAxCitib29sMDIxNSBpc2Zpbml0ZSAtMEUtMTAwNyAtPiAxCitib29sMDIxNiBpc2Zpbml0ZSAwRS0xMDA2IC0+IDEKK2Jvb2wwMjE3IGlzZmluaXRlIC0wRS0xMDA2IC0+IDEKK2Jvb2wwMjE4IGlzZmluaXRlIDBFLTEwMDAgLT4gMQorYm9vbDAyMTkgaXNmaW5pdGUgLTBFLTEwMDAgLT4gMQorYm9vbDAyMjAgaXNmaW5pdGUgMEUtOTk5IC0+IDEKK2Jvb2wwMjIxIGlzZmluaXRlIC0wRS05OTkgLT4gMQorYm9vbDAyMjIgaXNmaW5pdGUgMEUtOTk4IC0+IDEKK2Jvb2wwMjIzIGlzZmluaXRlIC0wRS05OTggLT4gMQorYm9vbDAyMjQgaXNmaW5pdGUgMEUtMTAwIC0+IDEKK2Jvb2wwMjI1IGlzZmluaXRlIC0wRS0xMDAgLT4gMQorYm9vbDAyMjYgaXNmaW5pdGUgMC4wMDAwMDAgLT4gMQorYm9vbDAyMjcgaXNmaW5pdGUgLTAuMDAwMDAwIC0+IDEKK2Jvb2wwMjI4IGlzZmluaXRlIDAuMDAwIC0+IDEKK2Jvb2wwMjI5IGlzZmluaXRlIC0wLjAwMCAtPiAxCitib29sMDIzMCBpc2Zpbml0ZSAwLjAwIC0+IDEKK2Jvb2wwMjMxIGlzZmluaXRlIC0wLjAwIC0+IDEKK2Jvb2wwMjMyIGlzZmluaXRlIDAuMCAtPiAxCitib29sMDIzMyBpc2Zpbml0ZSAtMC4wIC0+IDEKK2Jvb2wwMjM0IGlzZmluaXRlIDAgLT4gMQorYm9vbDAyMzUgaXNmaW5pdGUgLTAgLT4gMQorYm9vbDAyMzYgaXNmaW5pdGUgMEUrMSAtPiAxCitib29sMDIzNyBpc2Zpbml0ZSAtMEUrMSAtPiAxCitib29sMDIzOCBpc2Zpbml0ZSAwRSsyIC0+IDEKK2Jvb2wwMjM5IGlzZmluaXRlIC0wRSsyIC0+IDEKK2Jvb2wwMjQwIGlzZmluaXRlIDBFKzMgLT4gMQorYm9vbDAyNDEgaXNmaW5pdGUgLTBFKzMgLT4gMQorYm9vbDAyNDIgaXNmaW5pdGUgMEUrNiAtPiAxCitib29sMDI0MyBpc2Zpbml0ZSAtMEUrNiAtPiAxCitib29sMDI0NCBpc2Zpbml0ZSAwRSsxMDAgLT4gMQorYm9vbDAyNDUgaXNmaW5pdGUgLTBFKzEwMCAtPiAxCitib29sMDI0NiBpc2Zpbml0ZSAwRSs5OTAgLT4gMQorYm9vbDAyNDcgaXNmaW5pdGUgLTBFKzk5MCAtPiAxCitib29sMDI0OCBpc2Zpbml0ZSAwRSs5OTEgLT4gMQorYm9vbDAyNDkgaXNmaW5pdGUgLTBFKzk5MSAtPiAxCitib29sMDI1MCBpc2Zpbml0ZSAwRSs5OTIgLT4gMQorYm9vbDAyNTEgaXNmaW5pdGUgLTBFKzk5MiAtPiAxCitib29sMDI1MiBpc2Zpbml0ZSAwRSs5OTggLT4gMQorYm9vbDAyNTMgaXNmaW5pdGUgLTBFKzk5OCAtPiAxCitib29sMDI1NCBpc2Zpbml0ZSAwRSs5OTkgLT4gMQorYm9vbDAyNTUgaXNmaW5pdGUgLTBFKzk5OSAtPiAxCitib29sMDI1NiBpc2Zpbml0ZSAwRSsxMDAwIC0+IDEKK2Jvb2wwMjU3IGlzZmluaXRlIC0wRSsxMDAwIC0+IDEKK2Jvb2wwMjU4IGlzZmluaXRlIDBFKzIwMDAgLT4gMQorYm9vbDAyNTkgaXNmaW5pdGUgLTBFKzIwMDAgLT4gMQorYm9vbDAyNjAgaXNmaW5pdGUgMUUtMjAwMCAtPiAxCitib29sMDI2MSBpc2Zpbml0ZSAtMUUtMjAwMCAtPiAxCitib29sMDI2MiBpc2Zpbml0ZSAxRS0xMDA4IC0+IDEKK2Jvb2wwMjYzIGlzZmluaXRlIC0xRS0xMDA4IC0+IDEKK2Jvb2wwMjY0IGlzZmluaXRlIDFFLTEwMDcgLT4gMQorYm9vbDAyNjUgaXNmaW5pdGUgLTFFLTEwMDcgLT4gMQorYm9vbDAyNjYgaXNmaW5pdGUgMUUtMTAwNiAtPiAxCitib29sMDI2NyBpc2Zpbml0ZSAtMUUtMTAwNiAtPiAxCitib29sMDI2OCBpc2Zpbml0ZSAxRS0xMDAwIC0+IDEKK2Jvb2wwMjY5IGlzZmluaXRlIC0xRS0xMDAwIC0+IDEKK2Jvb2wwMjcwIGlzZmluaXRlIDFFLTk5OSAtPiAxCitib29sMDI3MSBpc2Zpbml0ZSAtMUUtOTk5IC0+IDEKK2Jvb2wwMjcyIGlzZmluaXRlIDFFLTk5OCAtPiAxCitib29sMDI3MyBpc2Zpbml0ZSAtMUUtOTk4IC0+IDEKK2Jvb2wwMjc0IGlzZmluaXRlIDFFLTEwMCAtPiAxCitib29sMDI3NSBpc2Zpbml0ZSAtMUUtMTAwIC0+IDEKK2Jvb2wwMjc2IGlzZmluaXRlIDAuMDAwMDAxIC0+IDEKK2Jvb2wwMjc3IGlzZmluaXRlIC0wLjAwMDAwMSAtPiAxCitib29sMDI3OCBpc2Zpbml0ZSAwLjAwMSAtPiAxCitib29sMDI3OSBpc2Zpbml0ZSAtMC4wMDEgLT4gMQorYm9vbDAyODAgaXNmaW5pdGUgMC4wMSAtPiAxCitib29sMDI4MSBpc2Zpbml0ZSAtMC4wMSAtPiAxCitib29sMDI4MiBpc2Zpbml0ZSAwLjEgLT4gMQorYm9vbDAyODMgaXNmaW5pdGUgLTAuMSAtPiAxCitib29sMDI4NCBpc2Zpbml0ZSAxIC0+IDEKK2Jvb2wwMjg1IGlzZmluaXRlIC0xIC0+IDEKK2Jvb2wwMjg2IGlzZmluaXRlIDFFKzEgLT4gMQorYm9vbDAyODcgaXNmaW5pdGUgLTFFKzEgLT4gMQorYm9vbDAyODggaXNmaW5pdGUgMUUrMiAtPiAxCitib29sMDI4OSBpc2Zpbml0ZSAtMUUrMiAtPiAxCitib29sMDI5MCBpc2Zpbml0ZSAxRSszIC0+IDEKK2Jvb2wwMjkxIGlzZmluaXRlIC0xRSszIC0+IDEKK2Jvb2wwMjkyIGlzZmluaXRlIDFFKzYgLT4gMQorYm9vbDAyOTMgaXNmaW5pdGUgLTFFKzYgLT4gMQorYm9vbDAyOTQgaXNmaW5pdGUgMUUrMTAwIC0+IDEKK2Jvb2wwMjk1IGlzZmluaXRlIC0xRSsxMDAgLT4gMQorYm9vbDAyOTYgaXNmaW5pdGUgMUUrOTkwIC0+IDEKK2Jvb2wwMjk3IGlzZmluaXRlIC0xRSs5OTAgLT4gMQorYm9vbDAyOTggaXNmaW5pdGUgMUUrOTkxIC0+IDEKK2Jvb2wwMjk5IGlzZmluaXRlIC0xRSs5OTEgLT4gMQorYm9vbDAzMDAgaXNmaW5pdGUgMUUrOTkyIC0+IDEKK2Jvb2wwMzAxIGlzZmluaXRlIC0xRSs5OTIgLT4gMQorYm9vbDAzMDIgaXNmaW5pdGUgMUUrOTk4IC0+IDEKK2Jvb2wwMzAzIGlzZmluaXRlIC0xRSs5OTggLT4gMQorYm9vbDAzMDQgaXNmaW5pdGUgMUUrOTk5IC0+IDEKK2Jvb2wwMzA1IGlzZmluaXRlIC0xRSs5OTkgLT4gMQorYm9vbDAzMDYgaXNmaW5pdGUgMUUrMTAwMCAtPiAxCitib29sMDMwNyBpc2Zpbml0ZSAtMUUrMTAwMCAtPiAxCitib29sMDMwOCBpc2Zpbml0ZSAxRSsyMDAwIC0+IDEKK2Jvb2wwMzA5IGlzZmluaXRlIC0xRSsyMDAwIC0+IDEKK2Jvb2wwMzEwIGlzZmluaXRlIDlFLTIwMDAgLT4gMQorYm9vbDAzMTEgaXNmaW5pdGUgLTlFLTIwMDAgLT4gMQorYm9vbDAzMTIgaXNmaW5pdGUgOUUtMTAwOCAtPiAxCitib29sMDMxMyBpc2Zpbml0ZSAtOUUtMTAwOCAtPiAxCitib29sMDMxNCBpc2Zpbml0ZSA5RS0xMDA3IC0+IDEKK2Jvb2wwMzE1IGlzZmluaXRlIC05RS0xMDA3IC0+IDEKK2Jvb2wwMzE2IGlzZmluaXRlIDlFLTEwMDYgLT4gMQorYm9vbDAzMTcgaXNmaW5pdGUgLTlFLTEwMDYgLT4gMQorYm9vbDAzMTggaXNmaW5pdGUgOUUtMTAwMCAtPiAxCitib29sMDMxOSBpc2Zpbml0ZSAtOUUtMTAwMCAtPiAxCitib29sMDMyMCBpc2Zpbml0ZSA5RS05OTkgLT4gMQorYm9vbDAzMjEgaXNmaW5pdGUgLTlFLTk5OSAtPiAxCitib29sMDMyMiBpc2Zpbml0ZSA5RS05OTggLT4gMQorYm9vbDAzMjMgaXNmaW5pdGUgLTlFLTk5OCAtPiAxCitib29sMDMyNCBpc2Zpbml0ZSA5RS0xMDAgLT4gMQorYm9vbDAzMjUgaXNmaW5pdGUgLTlFLTEwMCAtPiAxCitib29sMDMyNiBpc2Zpbml0ZSAwLjAwMDAwOSAtPiAxCitib29sMDMyNyBpc2Zpbml0ZSAtMC4wMDAwMDkgLT4gMQorYm9vbDAzMjggaXNmaW5pdGUgMC4wMDkgLT4gMQorYm9vbDAzMjkgaXNmaW5pdGUgLTAuMDA5IC0+IDEKK2Jvb2wwMzMwIGlzZmluaXRlIDAuMDkgLT4gMQorYm9vbDAzMzEgaXNmaW5pdGUgLTAuMDkgLT4gMQorYm9vbDAzMzIgaXNmaW5pdGUgMC45IC0+IDEKK2Jvb2wwMzMzIGlzZmluaXRlIC0wLjkgLT4gMQorYm9vbDAzMzQgaXNmaW5pdGUgOSAtPiAxCitib29sMDMzNSBpc2Zpbml0ZSAtOSAtPiAxCitib29sMDMzNiBpc2Zpbml0ZSA5RSsxIC0+IDEKK2Jvb2wwMzM3IGlzZmluaXRlIC05RSsxIC0+IDEKK2Jvb2wwMzM4IGlzZmluaXRlIDlFKzIgLT4gMQorYm9vbDAzMzkgaXNmaW5pdGUgLTlFKzIgLT4gMQorYm9vbDAzNDAgaXNmaW5pdGUgOUUrMyAtPiAxCitib29sMDM0MSBpc2Zpbml0ZSAtOUUrMyAtPiAxCitib29sMDM0MiBpc2Zpbml0ZSA5RSs2IC0+IDEKK2Jvb2wwMzQzIGlzZmluaXRlIC05RSs2IC0+IDEKK2Jvb2wwMzQ0IGlzZmluaXRlIDlFKzEwMCAtPiAxCitib29sMDM0NSBpc2Zpbml0ZSAtOUUrMTAwIC0+IDEKK2Jvb2wwMzQ2IGlzZmluaXRlIDlFKzk5MCAtPiAxCitib29sMDM0NyBpc2Zpbml0ZSAtOUUrOTkwIC0+IDEKK2Jvb2wwMzQ4IGlzZmluaXRlIDlFKzk5MSAtPiAxCitib29sMDM0OSBpc2Zpbml0ZSAtOUUrOTkxIC0+IDEKK2Jvb2wwMzUwIGlzZmluaXRlIDlFKzk5MiAtPiAxCitib29sMDM1MSBpc2Zpbml0ZSAtOUUrOTkyIC0+IDEKK2Jvb2wwMzUyIGlzZmluaXRlIDlFKzk5OCAtPiAxCitib29sMDM1MyBpc2Zpbml0ZSAtOUUrOTk4IC0+IDEKK2Jvb2wwMzU0IGlzZmluaXRlIDlFKzk5OSAtPiAxCitib29sMDM1NSBpc2Zpbml0ZSAtOUUrOTk5IC0+IDEKK2Jvb2wwMzU2IGlzZmluaXRlIDlFKzEwMDAgLT4gMQorYm9vbDAzNTcgaXNmaW5pdGUgLTlFKzEwMDAgLT4gMQorYm9vbDAzNTggaXNmaW5pdGUgOUUrMjAwMCAtPiAxCitib29sMDM1OSBpc2Zpbml0ZSAtOUUrMjAwMCAtPiAxCitib29sMDM2MCBpc2Zpbml0ZSA5Ljk5OTk5OTk5RS0yMDAwIC0+IDEKK2Jvb2wwMzYxIGlzZmluaXRlIC05Ljk5OTk5OTk5RS0yMDAwIC0+IDEKK2Jvb2wwMzYyIGlzZmluaXRlIDkuOTk5OTk5OTlFLTEwMDggLT4gMQorYm9vbDAzNjMgaXNmaW5pdGUgLTkuOTk5OTk5OTlFLTEwMDggLT4gMQorYm9vbDAzNjQgaXNmaW5pdGUgOS45OTk5OTk5OUUtMTAwNyAtPiAxCitib29sMDM2NSBpc2Zpbml0ZSAtOS45OTk5OTk5OUUtMTAwNyAtPiAxCitib29sMDM2NiBpc2Zpbml0ZSA5Ljk5OTk5OTk5RS0xMDA2IC0+IDEKK2Jvb2wwMzY3IGlzZmluaXRlIC05Ljk5OTk5OTk5RS0xMDA2IC0+IDEKK2Jvb2wwMzY4IGlzZmluaXRlIDkuOTk5OTk5OTlFLTEwMDAgLT4gMQorYm9vbDAzNjkgaXNmaW5pdGUgLTkuOTk5OTk5OTlFLTEwMDAgLT4gMQorYm9vbDAzNzAgaXNmaW5pdGUgOS45OTk5OTk5OUUtOTk5IC0+IDEKK2Jvb2wwMzcxIGlzZmluaXRlIC05Ljk5OTk5OTk5RS05OTkgLT4gMQorYm9vbDAzNzIgaXNmaW5pdGUgOS45OTk5OTk5OUUtOTk4IC0+IDEKK2Jvb2wwMzczIGlzZmluaXRlIC05Ljk5OTk5OTk5RS05OTggLT4gMQorYm9vbDAzNzQgaXNmaW5pdGUgOS45OTk5OTk5OUUtMTAwIC0+IDEKK2Jvb2wwMzc1IGlzZmluaXRlIC05Ljk5OTk5OTk5RS0xMDAgLT4gMQorYm9vbDAzNzYgaXNmaW5pdGUgMC4wMDAwMDk5OTk5OTk5OSAtPiAxCitib29sMDM3NyBpc2Zpbml0ZSAtMC4wMDAwMDk5OTk5OTk5OSAtPiAxCitib29sMDM3OCBpc2Zpbml0ZSAwLjAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMzc5IGlzZmluaXRlIC0wLjAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMzgwIGlzZmluaXRlIDAuMDk5OTk5OTk5OSAtPiAxCitib29sMDM4MSBpc2Zpbml0ZSAtMC4wOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMzgyIGlzZmluaXRlIDAuOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMzgzIGlzZmluaXRlIC0wLjk5OTk5OTk5OSAtPiAxCitib29sMDM4NCBpc2Zpbml0ZSA5Ljk5OTk5OTk5IC0+IDEKK2Jvb2wwMzg1IGlzZmluaXRlIC05Ljk5OTk5OTk5IC0+IDEKK2Jvb2wwMzg2IGlzZmluaXRlIDk5Ljk5OTk5OTkgLT4gMQorYm9vbDAzODcgaXNmaW5pdGUgLTk5Ljk5OTk5OTkgLT4gMQorYm9vbDAzODggaXNmaW5pdGUgOTk5Ljk5OTk5OSAtPiAxCitib29sMDM4OSBpc2Zpbml0ZSAtOTk5Ljk5OTk5OSAtPiAxCitib29sMDM5MCBpc2Zpbml0ZSA5OTk5Ljk5OTk5IC0+IDEKK2Jvb2wwMzkxIGlzZmluaXRlIC05OTk5Ljk5OTk5IC0+IDEKK2Jvb2wwMzkyIGlzZmluaXRlIDk5OTk5OTkuOTkgLT4gMQorYm9vbDAzOTMgaXNmaW5pdGUgLTk5OTk5OTkuOTkgLT4gMQorYm9vbDAzOTQgaXNmaW5pdGUgOS45OTk5OTk5OUUrMTAwIC0+IDEKK2Jvb2wwMzk1IGlzZmluaXRlIC05Ljk5OTk5OTk5RSsxMDAgLT4gMQorYm9vbDAzOTYgaXNmaW5pdGUgOS45OTk5OTk5OUUrOTkwIC0+IDEKK2Jvb2wwMzk3IGlzZmluaXRlIC05Ljk5OTk5OTk5RSs5OTAgLT4gMQorYm9vbDAzOTggaXNmaW5pdGUgOS45OTk5OTk5OUUrOTkxIC0+IDEKK2Jvb2wwMzk5IGlzZmluaXRlIC05Ljk5OTk5OTk5RSs5OTEgLT4gMQorYm9vbDA0MDAgaXNmaW5pdGUgOS45OTk5OTk5OUUrOTkyIC0+IDEKK2Jvb2wwNDAxIGlzZmluaXRlIC05Ljk5OTk5OTk5RSs5OTIgLT4gMQorYm9vbDA0MDIgaXNmaW5pdGUgOS45OTk5OTk5OUUrOTk4IC0+IDEKK2Jvb2wwNDAzIGlzZmluaXRlIC05Ljk5OTk5OTk5RSs5OTggLT4gMQorYm9vbDA0MDQgaXNmaW5pdGUgOS45OTk5OTk5OUUrOTk5IC0+IDEKK2Jvb2wwNDA1IGlzZmluaXRlIC05Ljk5OTk5OTk5RSs5OTkgLT4gMQorYm9vbDA0MDYgaXNmaW5pdGUgOS45OTk5OTk5OUUrMTAwMCAtPiAxCitib29sMDQwNyBpc2Zpbml0ZSAtOS45OTk5OTk5OUUrMTAwMCAtPiAxCitib29sMDQwOCBpc2Zpbml0ZSA5Ljk5OTk5OTk5RSsyMDAwIC0+IDEKK2Jvb2wwNDA5IGlzZmluaXRlIC05Ljk5OTk5OTk5RSsyMDAwIC0+IDEKK2Jvb2wwNDEwIGlzZmluaXRlIEluZmluaXR5IC0+IDAKK2Jvb2wwNDExIGlzZmluaXRlIC1JbmZpbml0eSAtPiAwCitib29sMDQxMiBpc2Zpbml0ZSBOYU4gLT4gMAorYm9vbDA0MTMgaXNmaW5pdGUgLU5hTiAtPiAwCitib29sMDQxNCBpc2Zpbml0ZSBOYU4xMjMgLT4gMAorYm9vbDA0MTUgaXNmaW5pdGUgLU5hTjEyMyAtPiAwCitib29sMDQxNiBpc2Zpbml0ZSBzTmFOIC0+IDAKK2Jvb2wwNDE3IGlzZmluaXRlIC1zTmFOIC0+IDAKK2Jvb2wwNDE4IGlzZmluaXRlIHNOYU4xMjMgLT4gMAorYm9vbDA0MTkgaXNmaW5pdGUgLXNOYU4xMjMgLT4gMAorYm9vbDA0MjAgaXNpbmZpbml0ZSAwRS0yMDAwIC0+IDAKK2Jvb2wwNDIxIGlzaW5maW5pdGUgLTBFLTIwMDAgLT4gMAorYm9vbDA0MjIgaXNpbmZpbml0ZSAwRS0xMDA4IC0+IDAKK2Jvb2wwNDIzIGlzaW5maW5pdGUgLTBFLTEwMDggLT4gMAorYm9vbDA0MjQgaXNpbmZpbml0ZSAwRS0xMDA3IC0+IDAKK2Jvb2wwNDI1IGlzaW5maW5pdGUgLTBFLTEwMDcgLT4gMAorYm9vbDA0MjYgaXNpbmZpbml0ZSAwRS0xMDA2IC0+IDAKK2Jvb2wwNDI3IGlzaW5maW5pdGUgLTBFLTEwMDYgLT4gMAorYm9vbDA0MjggaXNpbmZpbml0ZSAwRS0xMDAwIC0+IDAKK2Jvb2wwNDI5IGlzaW5maW5pdGUgLTBFLTEwMDAgLT4gMAorYm9vbDA0MzAgaXNpbmZpbml0ZSAwRS05OTkgLT4gMAorYm9vbDA0MzEgaXNpbmZpbml0ZSAtMEUtOTk5IC0+IDAKK2Jvb2wwNDMyIGlzaW5maW5pdGUgMEUtOTk4IC0+IDAKK2Jvb2wwNDMzIGlzaW5maW5pdGUgLTBFLTk5OCAtPiAwCitib29sMDQzNCBpc2luZmluaXRlIDBFLTEwMCAtPiAwCitib29sMDQzNSBpc2luZmluaXRlIC0wRS0xMDAgLT4gMAorYm9vbDA0MzYgaXNpbmZpbml0ZSAwLjAwMDAwMCAtPiAwCitib29sMDQzNyBpc2luZmluaXRlIC0wLjAwMDAwMCAtPiAwCitib29sMDQzOCBpc2luZmluaXRlIDAuMDAwIC0+IDAKK2Jvb2wwNDM5IGlzaW5maW5pdGUgLTAuMDAwIC0+IDAKK2Jvb2wwNDQwIGlzaW5maW5pdGUgMC4wMCAtPiAwCitib29sMDQ0MSBpc2luZmluaXRlIC0wLjAwIC0+IDAKK2Jvb2wwNDQyIGlzaW5maW5pdGUgMC4wIC0+IDAKK2Jvb2wwNDQzIGlzaW5maW5pdGUgLTAuMCAtPiAwCitib29sMDQ0NCBpc2luZmluaXRlIDAgLT4gMAorYm9vbDA0NDUgaXNpbmZpbml0ZSAtMCAtPiAwCitib29sMDQ0NiBpc2luZmluaXRlIDBFKzEgLT4gMAorYm9vbDA0NDcgaXNpbmZpbml0ZSAtMEUrMSAtPiAwCitib29sMDQ0OCBpc2luZmluaXRlIDBFKzIgLT4gMAorYm9vbDA0NDkgaXNpbmZpbml0ZSAtMEUrMiAtPiAwCitib29sMDQ1MCBpc2luZmluaXRlIDBFKzMgLT4gMAorYm9vbDA0NTEgaXNpbmZpbml0ZSAtMEUrMyAtPiAwCitib29sMDQ1MiBpc2luZmluaXRlIDBFKzYgLT4gMAorYm9vbDA0NTMgaXNpbmZpbml0ZSAtMEUrNiAtPiAwCitib29sMDQ1NCBpc2luZmluaXRlIDBFKzEwMCAtPiAwCitib29sMDQ1NSBpc2luZmluaXRlIC0wRSsxMDAgLT4gMAorYm9vbDA0NTYgaXNpbmZpbml0ZSAwRSs5OTAgLT4gMAorYm9vbDA0NTcgaXNpbmZpbml0ZSAtMEUrOTkwIC0+IDAKK2Jvb2wwNDU4IGlzaW5maW5pdGUgMEUrOTkxIC0+IDAKK2Jvb2wwNDU5IGlzaW5maW5pdGUgLTBFKzk5MSAtPiAwCitib29sMDQ2MCBpc2luZmluaXRlIDBFKzk5MiAtPiAwCitib29sMDQ2MSBpc2luZmluaXRlIC0wRSs5OTIgLT4gMAorYm9vbDA0NjIgaXNpbmZpbml0ZSAwRSs5OTggLT4gMAorYm9vbDA0NjMgaXNpbmZpbml0ZSAtMEUrOTk4IC0+IDAKK2Jvb2wwNDY0IGlzaW5maW5pdGUgMEUrOTk5IC0+IDAKK2Jvb2wwNDY1IGlzaW5maW5pdGUgLTBFKzk5OSAtPiAwCitib29sMDQ2NiBpc2luZmluaXRlIDBFKzEwMDAgLT4gMAorYm9vbDA0NjcgaXNpbmZpbml0ZSAtMEUrMTAwMCAtPiAwCitib29sMDQ2OCBpc2luZmluaXRlIDBFKzIwMDAgLT4gMAorYm9vbDA0NjkgaXNpbmZpbml0ZSAtMEUrMjAwMCAtPiAwCitib29sMDQ3MCBpc2luZmluaXRlIDFFLTIwMDAgLT4gMAorYm9vbDA0NzEgaXNpbmZpbml0ZSAtMUUtMjAwMCAtPiAwCitib29sMDQ3MiBpc2luZmluaXRlIDFFLTEwMDggLT4gMAorYm9vbDA0NzMgaXNpbmZpbml0ZSAtMUUtMTAwOCAtPiAwCitib29sMDQ3NCBpc2luZmluaXRlIDFFLTEwMDcgLT4gMAorYm9vbDA0NzUgaXNpbmZpbml0ZSAtMUUtMTAwNyAtPiAwCitib29sMDQ3NiBpc2luZmluaXRlIDFFLTEwMDYgLT4gMAorYm9vbDA0NzcgaXNpbmZpbml0ZSAtMUUtMTAwNiAtPiAwCitib29sMDQ3OCBpc2luZmluaXRlIDFFLTEwMDAgLT4gMAorYm9vbDA0NzkgaXNpbmZpbml0ZSAtMUUtMTAwMCAtPiAwCitib29sMDQ4MCBpc2luZmluaXRlIDFFLTk5OSAtPiAwCitib29sMDQ4MSBpc2luZmluaXRlIC0xRS05OTkgLT4gMAorYm9vbDA0ODIgaXNpbmZpbml0ZSAxRS05OTggLT4gMAorYm9vbDA0ODMgaXNpbmZpbml0ZSAtMUUtOTk4IC0+IDAKK2Jvb2wwNDg0IGlzaW5maW5pdGUgMUUtMTAwIC0+IDAKK2Jvb2wwNDg1IGlzaW5maW5pdGUgLTFFLTEwMCAtPiAwCitib29sMDQ4NiBpc2luZmluaXRlIDAuMDAwMDAxIC0+IDAKK2Jvb2wwNDg3IGlzaW5maW5pdGUgLTAuMDAwMDAxIC0+IDAKK2Jvb2wwNDg4IGlzaW5maW5pdGUgMC4wMDEgLT4gMAorYm9vbDA0ODkgaXNpbmZpbml0ZSAtMC4wMDEgLT4gMAorYm9vbDA0OTAgaXNpbmZpbml0ZSAwLjAxIC0+IDAKK2Jvb2wwNDkxIGlzaW5maW5pdGUgLTAuMDEgLT4gMAorYm9vbDA0OTIgaXNpbmZpbml0ZSAwLjEgLT4gMAorYm9vbDA0OTMgaXNpbmZpbml0ZSAtMC4xIC0+IDAKK2Jvb2wwNDk0IGlzaW5maW5pdGUgMSAtPiAwCitib29sMDQ5NSBpc2luZmluaXRlIC0xIC0+IDAKK2Jvb2wwNDk2IGlzaW5maW5pdGUgMUUrMSAtPiAwCitib29sMDQ5NyBpc2luZmluaXRlIC0xRSsxIC0+IDAKK2Jvb2wwNDk4IGlzaW5maW5pdGUgMUUrMiAtPiAwCitib29sMDQ5OSBpc2luZmluaXRlIC0xRSsyIC0+IDAKK2Jvb2wwNTAwIGlzaW5maW5pdGUgMUUrMyAtPiAwCitib29sMDUwMSBpc2luZmluaXRlIC0xRSszIC0+IDAKK2Jvb2wwNTAyIGlzaW5maW5pdGUgMUUrNiAtPiAwCitib29sMDUwMyBpc2luZmluaXRlIC0xRSs2IC0+IDAKK2Jvb2wwNTA0IGlzaW5maW5pdGUgMUUrMTAwIC0+IDAKK2Jvb2wwNTA1IGlzaW5maW5pdGUgLTFFKzEwMCAtPiAwCitib29sMDUwNiBpc2luZmluaXRlIDFFKzk5MCAtPiAwCitib29sMDUwNyBpc2luZmluaXRlIC0xRSs5OTAgLT4gMAorYm9vbDA1MDggaXNpbmZpbml0ZSAxRSs5OTEgLT4gMAorYm9vbDA1MDkgaXNpbmZpbml0ZSAtMUUrOTkxIC0+IDAKK2Jvb2wwNTEwIGlzaW5maW5pdGUgMUUrOTkyIC0+IDAKK2Jvb2wwNTExIGlzaW5maW5pdGUgLTFFKzk5MiAtPiAwCitib29sMDUxMiBpc2luZmluaXRlIDFFKzk5OCAtPiAwCitib29sMDUxMyBpc2luZmluaXRlIC0xRSs5OTggLT4gMAorYm9vbDA1MTQgaXNpbmZpbml0ZSAxRSs5OTkgLT4gMAorYm9vbDA1MTUgaXNpbmZpbml0ZSAtMUUrOTk5IC0+IDAKK2Jvb2wwNTE2IGlzaW5maW5pdGUgMUUrMTAwMCAtPiAwCitib29sMDUxNyBpc2luZmluaXRlIC0xRSsxMDAwIC0+IDAKK2Jvb2wwNTE4IGlzaW5maW5pdGUgMUUrMjAwMCAtPiAwCitib29sMDUxOSBpc2luZmluaXRlIC0xRSsyMDAwIC0+IDAKK2Jvb2wwNTIwIGlzaW5maW5pdGUgOUUtMjAwMCAtPiAwCitib29sMDUyMSBpc2luZmluaXRlIC05RS0yMDAwIC0+IDAKK2Jvb2wwNTIyIGlzaW5maW5pdGUgOUUtMTAwOCAtPiAwCitib29sMDUyMyBpc2luZmluaXRlIC05RS0xMDA4IC0+IDAKK2Jvb2wwNTI0IGlzaW5maW5pdGUgOUUtMTAwNyAtPiAwCitib29sMDUyNSBpc2luZmluaXRlIC05RS0xMDA3IC0+IDAKK2Jvb2wwNTI2IGlzaW5maW5pdGUgOUUtMTAwNiAtPiAwCitib29sMDUyNyBpc2luZmluaXRlIC05RS0xMDA2IC0+IDAKK2Jvb2wwNTI4IGlzaW5maW5pdGUgOUUtMTAwMCAtPiAwCitib29sMDUyOSBpc2luZmluaXRlIC05RS0xMDAwIC0+IDAKK2Jvb2wwNTMwIGlzaW5maW5pdGUgOUUtOTk5IC0+IDAKK2Jvb2wwNTMxIGlzaW5maW5pdGUgLTlFLTk5OSAtPiAwCitib29sMDUzMiBpc2luZmluaXRlIDlFLTk5OCAtPiAwCitib29sMDUzMyBpc2luZmluaXRlIC05RS05OTggLT4gMAorYm9vbDA1MzQgaXNpbmZpbml0ZSA5RS0xMDAgLT4gMAorYm9vbDA1MzUgaXNpbmZpbml0ZSAtOUUtMTAwIC0+IDAKK2Jvb2wwNTM2IGlzaW5maW5pdGUgMC4wMDAwMDkgLT4gMAorYm9vbDA1MzcgaXNpbmZpbml0ZSAtMC4wMDAwMDkgLT4gMAorYm9vbDA1MzggaXNpbmZpbml0ZSAwLjAwOSAtPiAwCitib29sMDUzOSBpc2luZmluaXRlIC0wLjAwOSAtPiAwCitib29sMDU0MCBpc2luZmluaXRlIDAuMDkgLT4gMAorYm9vbDA1NDEgaXNpbmZpbml0ZSAtMC4wOSAtPiAwCitib29sMDU0MiBpc2luZmluaXRlIDAuOSAtPiAwCitib29sMDU0MyBpc2luZmluaXRlIC0wLjkgLT4gMAorYm9vbDA1NDQgaXNpbmZpbml0ZSA5IC0+IDAKK2Jvb2wwNTQ1IGlzaW5maW5pdGUgLTkgLT4gMAorYm9vbDA1NDYgaXNpbmZpbml0ZSA5RSsxIC0+IDAKK2Jvb2wwNTQ3IGlzaW5maW5pdGUgLTlFKzEgLT4gMAorYm9vbDA1NDggaXNpbmZpbml0ZSA5RSsyIC0+IDAKK2Jvb2wwNTQ5IGlzaW5maW5pdGUgLTlFKzIgLT4gMAorYm9vbDA1NTAgaXNpbmZpbml0ZSA5RSszIC0+IDAKK2Jvb2wwNTUxIGlzaW5maW5pdGUgLTlFKzMgLT4gMAorYm9vbDA1NTIgaXNpbmZpbml0ZSA5RSs2IC0+IDAKK2Jvb2wwNTUzIGlzaW5maW5pdGUgLTlFKzYgLT4gMAorYm9vbDA1NTQgaXNpbmZpbml0ZSA5RSsxMDAgLT4gMAorYm9vbDA1NTUgaXNpbmZpbml0ZSAtOUUrMTAwIC0+IDAKK2Jvb2wwNTU2IGlzaW5maW5pdGUgOUUrOTkwIC0+IDAKK2Jvb2wwNTU3IGlzaW5maW5pdGUgLTlFKzk5MCAtPiAwCitib29sMDU1OCBpc2luZmluaXRlIDlFKzk5MSAtPiAwCitib29sMDU1OSBpc2luZmluaXRlIC05RSs5OTEgLT4gMAorYm9vbDA1NjAgaXNpbmZpbml0ZSA5RSs5OTIgLT4gMAorYm9vbDA1NjEgaXNpbmZpbml0ZSAtOUUrOTkyIC0+IDAKK2Jvb2wwNTYyIGlzaW5maW5pdGUgOUUrOTk4IC0+IDAKK2Jvb2wwNTYzIGlzaW5maW5pdGUgLTlFKzk5OCAtPiAwCitib29sMDU2NCBpc2luZmluaXRlIDlFKzk5OSAtPiAwCitib29sMDU2NSBpc2luZmluaXRlIC05RSs5OTkgLT4gMAorYm9vbDA1NjYgaXNpbmZpbml0ZSA5RSsxMDAwIC0+IDAKK2Jvb2wwNTY3IGlzaW5maW5pdGUgLTlFKzEwMDAgLT4gMAorYm9vbDA1NjggaXNpbmZpbml0ZSA5RSsyMDAwIC0+IDAKK2Jvb2wwNTY5IGlzaW5maW5pdGUgLTlFKzIwMDAgLT4gMAorYm9vbDA1NzAgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wwNTcxIGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFLTIwMDAgLT4gMAorYm9vbDA1NzIgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RS0xMDA4IC0+IDAKK2Jvb2wwNTczIGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDA1NzQgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RS0xMDA3IC0+IDAKK2Jvb2wwNTc1IGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFLTEwMDcgLT4gMAorYm9vbDA1NzYgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wwNTc3IGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFLTEwMDYgLT4gMAorYm9vbDA1NzggaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RS0xMDAwIC0+IDAKK2Jvb2wwNTc5IGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDA1ODAgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RS05OTkgLT4gMAorYm9vbDA1ODEgaXNpbmZpbml0ZSAtOS45OTk5OTk5OUUtOTk5IC0+IDAKK2Jvb2wwNTgyIGlzaW5maW5pdGUgOS45OTk5OTk5OUUtOTk4IC0+IDAKK2Jvb2wwNTgzIGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFLTk5OCAtPiAwCitib29sMDU4NCBpc2luZmluaXRlIDkuOTk5OTk5OTlFLTEwMCAtPiAwCitib29sMDU4NSBpc2luZmluaXRlIC05Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDA1ODYgaXNpbmZpbml0ZSAwLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNTg3IGlzaW5maW5pdGUgLTAuMDAwMDA5OTk5OTk5OTkgLT4gMAorYm9vbDA1ODggaXNpbmZpbml0ZSAwLjAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNTg5IGlzaW5maW5pdGUgLTAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDA1OTAgaXNpbmZpbml0ZSAwLjA5OTk5OTk5OTkgLT4gMAorYm9vbDA1OTEgaXNpbmZpbml0ZSAtMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNTkyIGlzaW5maW5pdGUgMC45OTk5OTk5OTkgLT4gMAorYm9vbDA1OTMgaXNpbmZpbml0ZSAtMC45OTk5OTk5OTkgLT4gMAorYm9vbDA1OTQgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5IC0+IDAKK2Jvb2wwNTk1IGlzaW5maW5pdGUgLTkuOTk5OTk5OTkgLT4gMAorYm9vbDA1OTYgaXNpbmZpbml0ZSA5OS45OTk5OTk5IC0+IDAKK2Jvb2wwNTk3IGlzaW5maW5pdGUgLTk5Ljk5OTk5OTkgLT4gMAorYm9vbDA1OTggaXNpbmZpbml0ZSA5OTkuOTk5OTk5IC0+IDAKK2Jvb2wwNTk5IGlzaW5maW5pdGUgLTk5OS45OTk5OTkgLT4gMAorYm9vbDA2MDAgaXNpbmZpbml0ZSA5OTk5Ljk5OTk5IC0+IDAKK2Jvb2wwNjAxIGlzaW5maW5pdGUgLTk5OTkuOTk5OTkgLT4gMAorYm9vbDA2MDIgaXNpbmZpbml0ZSA5OTk5OTk5Ljk5IC0+IDAKK2Jvb2wwNjAzIGlzaW5maW5pdGUgLTk5OTk5OTkuOTkgLT4gMAorYm9vbDA2MDQgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RSsxMDAgLT4gMAorYm9vbDA2MDUgaXNpbmZpbml0ZSAtOS45OTk5OTk5OUUrMTAwIC0+IDAKK2Jvb2wwNjA2IGlzaW5maW5pdGUgOS45OTk5OTk5OUUrOTkwIC0+IDAKK2Jvb2wwNjA3IGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFKzk5MCAtPiAwCitib29sMDYwOCBpc2luZmluaXRlIDkuOTk5OTk5OTlFKzk5MSAtPiAwCitib29sMDYwOSBpc2luZmluaXRlIC05Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDA2MTAgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RSs5OTIgLT4gMAorYm9vbDA2MTEgaXNpbmZpbml0ZSAtOS45OTk5OTk5OUUrOTkyIC0+IDAKK2Jvb2wwNjEyIGlzaW5maW5pdGUgOS45OTk5OTk5OUUrOTk4IC0+IDAKK2Jvb2wwNjEzIGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFKzk5OCAtPiAwCitib29sMDYxNCBpc2luZmluaXRlIDkuOTk5OTk5OTlFKzk5OSAtPiAwCitib29sMDYxNSBpc2luZmluaXRlIC05Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDA2MTYgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wwNjE3IGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFKzEwMDAgLT4gMAorYm9vbDA2MTggaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RSsyMDAwIC0+IDAKK2Jvb2wwNjE5IGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDA2MjAgaXNpbmZpbml0ZSBJbmZpbml0eSAtPiAxCitib29sMDYyMSBpc2luZmluaXRlIC1JbmZpbml0eSAtPiAxCitib29sMDYyMiBpc2luZmluaXRlIE5hTiAtPiAwCitib29sMDYyMyBpc2luZmluaXRlIC1OYU4gLT4gMAorYm9vbDA2MjQgaXNpbmZpbml0ZSBOYU4xMjMgLT4gMAorYm9vbDA2MjUgaXNpbmZpbml0ZSAtTmFOMTIzIC0+IDAKK2Jvb2wwNjI2IGlzaW5maW5pdGUgc05hTiAtPiAwCitib29sMDYyNyBpc2luZmluaXRlIC1zTmFOIC0+IDAKK2Jvb2wwNjI4IGlzaW5maW5pdGUgc05hTjEyMyAtPiAwCitib29sMDYyOSBpc2luZmluaXRlIC1zTmFOMTIzIC0+IDAKK2Jvb2wwNjMwIGlzbmFuIDBFLTIwMDAgLT4gMAorYm9vbDA2MzEgaXNuYW4gLTBFLTIwMDAgLT4gMAorYm9vbDA2MzIgaXNuYW4gMEUtMTAwOCAtPiAwCitib29sMDYzMyBpc25hbiAtMEUtMTAwOCAtPiAwCitib29sMDYzNCBpc25hbiAwRS0xMDA3IC0+IDAKK2Jvb2wwNjM1IGlzbmFuIC0wRS0xMDA3IC0+IDAKK2Jvb2wwNjM2IGlzbmFuIDBFLTEwMDYgLT4gMAorYm9vbDA2MzcgaXNuYW4gLTBFLTEwMDYgLT4gMAorYm9vbDA2MzggaXNuYW4gMEUtMTAwMCAtPiAwCitib29sMDYzOSBpc25hbiAtMEUtMTAwMCAtPiAwCitib29sMDY0MCBpc25hbiAwRS05OTkgLT4gMAorYm9vbDA2NDEgaXNuYW4gLTBFLTk5OSAtPiAwCitib29sMDY0MiBpc25hbiAwRS05OTggLT4gMAorYm9vbDA2NDMgaXNuYW4gLTBFLTk5OCAtPiAwCitib29sMDY0NCBpc25hbiAwRS0xMDAgLT4gMAorYm9vbDA2NDUgaXNuYW4gLTBFLTEwMCAtPiAwCitib29sMDY0NiBpc25hbiAwLjAwMDAwMCAtPiAwCitib29sMDY0NyBpc25hbiAtMC4wMDAwMDAgLT4gMAorYm9vbDA2NDggaXNuYW4gMC4wMDAgLT4gMAorYm9vbDA2NDkgaXNuYW4gLTAuMDAwIC0+IDAKK2Jvb2wwNjUwIGlzbmFuIDAuMDAgLT4gMAorYm9vbDA2NTEgaXNuYW4gLTAuMDAgLT4gMAorYm9vbDA2NTIgaXNuYW4gMC4wIC0+IDAKK2Jvb2wwNjUzIGlzbmFuIC0wLjAgLT4gMAorYm9vbDA2NTQgaXNuYW4gMCAtPiAwCitib29sMDY1NSBpc25hbiAtMCAtPiAwCitib29sMDY1NiBpc25hbiAwRSsxIC0+IDAKK2Jvb2wwNjU3IGlzbmFuIC0wRSsxIC0+IDAKK2Jvb2wwNjU4IGlzbmFuIDBFKzIgLT4gMAorYm9vbDA2NTkgaXNuYW4gLTBFKzIgLT4gMAorYm9vbDA2NjAgaXNuYW4gMEUrMyAtPiAwCitib29sMDY2MSBpc25hbiAtMEUrMyAtPiAwCitib29sMDY2MiBpc25hbiAwRSs2IC0+IDAKK2Jvb2wwNjYzIGlzbmFuIC0wRSs2IC0+IDAKK2Jvb2wwNjY0IGlzbmFuIDBFKzEwMCAtPiAwCitib29sMDY2NSBpc25hbiAtMEUrMTAwIC0+IDAKK2Jvb2wwNjY2IGlzbmFuIDBFKzk5MCAtPiAwCitib29sMDY2NyBpc25hbiAtMEUrOTkwIC0+IDAKK2Jvb2wwNjY4IGlzbmFuIDBFKzk5MSAtPiAwCitib29sMDY2OSBpc25hbiAtMEUrOTkxIC0+IDAKK2Jvb2wwNjcwIGlzbmFuIDBFKzk5MiAtPiAwCitib29sMDY3MSBpc25hbiAtMEUrOTkyIC0+IDAKK2Jvb2wwNjcyIGlzbmFuIDBFKzk5OCAtPiAwCitib29sMDY3MyBpc25hbiAtMEUrOTk4IC0+IDAKK2Jvb2wwNjc0IGlzbmFuIDBFKzk5OSAtPiAwCitib29sMDY3NSBpc25hbiAtMEUrOTk5IC0+IDAKK2Jvb2wwNjc2IGlzbmFuIDBFKzEwMDAgLT4gMAorYm9vbDA2NzcgaXNuYW4gLTBFKzEwMDAgLT4gMAorYm9vbDA2NzggaXNuYW4gMEUrMjAwMCAtPiAwCitib29sMDY3OSBpc25hbiAtMEUrMjAwMCAtPiAwCitib29sMDY4MCBpc25hbiAxRS0yMDAwIC0+IDAKK2Jvb2wwNjgxIGlzbmFuIC0xRS0yMDAwIC0+IDAKK2Jvb2wwNjgyIGlzbmFuIDFFLTEwMDggLT4gMAorYm9vbDA2ODMgaXNuYW4gLTFFLTEwMDggLT4gMAorYm9vbDA2ODQgaXNuYW4gMUUtMTAwNyAtPiAwCitib29sMDY4NSBpc25hbiAtMUUtMTAwNyAtPiAwCitib29sMDY4NiBpc25hbiAxRS0xMDA2IC0+IDAKK2Jvb2wwNjg3IGlzbmFuIC0xRS0xMDA2IC0+IDAKK2Jvb2wwNjg4IGlzbmFuIDFFLTEwMDAgLT4gMAorYm9vbDA2ODkgaXNuYW4gLTFFLTEwMDAgLT4gMAorYm9vbDA2OTAgaXNuYW4gMUUtOTk5IC0+IDAKK2Jvb2wwNjkxIGlzbmFuIC0xRS05OTkgLT4gMAorYm9vbDA2OTIgaXNuYW4gMUUtOTk4IC0+IDAKK2Jvb2wwNjkzIGlzbmFuIC0xRS05OTggLT4gMAorYm9vbDA2OTQgaXNuYW4gMUUtMTAwIC0+IDAKK2Jvb2wwNjk1IGlzbmFuIC0xRS0xMDAgLT4gMAorYm9vbDA2OTYgaXNuYW4gMC4wMDAwMDEgLT4gMAorYm9vbDA2OTcgaXNuYW4gLTAuMDAwMDAxIC0+IDAKK2Jvb2wwNjk4IGlzbmFuIDAuMDAxIC0+IDAKK2Jvb2wwNjk5IGlzbmFuIC0wLjAwMSAtPiAwCitib29sMDcwMCBpc25hbiAwLjAxIC0+IDAKK2Jvb2wwNzAxIGlzbmFuIC0wLjAxIC0+IDAKK2Jvb2wwNzAyIGlzbmFuIDAuMSAtPiAwCitib29sMDcwMyBpc25hbiAtMC4xIC0+IDAKK2Jvb2wwNzA0IGlzbmFuIDEgLT4gMAorYm9vbDA3MDUgaXNuYW4gLTEgLT4gMAorYm9vbDA3MDYgaXNuYW4gMUUrMSAtPiAwCitib29sMDcwNyBpc25hbiAtMUUrMSAtPiAwCitib29sMDcwOCBpc25hbiAxRSsyIC0+IDAKK2Jvb2wwNzA5IGlzbmFuIC0xRSsyIC0+IDAKK2Jvb2wwNzEwIGlzbmFuIDFFKzMgLT4gMAorYm9vbDA3MTEgaXNuYW4gLTFFKzMgLT4gMAorYm9vbDA3MTIgaXNuYW4gMUUrNiAtPiAwCitib29sMDcxMyBpc25hbiAtMUUrNiAtPiAwCitib29sMDcxNCBpc25hbiAxRSsxMDAgLT4gMAorYm9vbDA3MTUgaXNuYW4gLTFFKzEwMCAtPiAwCitib29sMDcxNiBpc25hbiAxRSs5OTAgLT4gMAorYm9vbDA3MTcgaXNuYW4gLTFFKzk5MCAtPiAwCitib29sMDcxOCBpc25hbiAxRSs5OTEgLT4gMAorYm9vbDA3MTkgaXNuYW4gLTFFKzk5MSAtPiAwCitib29sMDcyMCBpc25hbiAxRSs5OTIgLT4gMAorYm9vbDA3MjEgaXNuYW4gLTFFKzk5MiAtPiAwCitib29sMDcyMiBpc25hbiAxRSs5OTggLT4gMAorYm9vbDA3MjMgaXNuYW4gLTFFKzk5OCAtPiAwCitib29sMDcyNCBpc25hbiAxRSs5OTkgLT4gMAorYm9vbDA3MjUgaXNuYW4gLTFFKzk5OSAtPiAwCitib29sMDcyNiBpc25hbiAxRSsxMDAwIC0+IDAKK2Jvb2wwNzI3IGlzbmFuIC0xRSsxMDAwIC0+IDAKK2Jvb2wwNzI4IGlzbmFuIDFFKzIwMDAgLT4gMAorYm9vbDA3MjkgaXNuYW4gLTFFKzIwMDAgLT4gMAorYm9vbDA3MzAgaXNuYW4gOUUtMjAwMCAtPiAwCitib29sMDczMSBpc25hbiAtOUUtMjAwMCAtPiAwCitib29sMDczMiBpc25hbiA5RS0xMDA4IC0+IDAKK2Jvb2wwNzMzIGlzbmFuIC05RS0xMDA4IC0+IDAKK2Jvb2wwNzM0IGlzbmFuIDlFLTEwMDcgLT4gMAorYm9vbDA3MzUgaXNuYW4gLTlFLTEwMDcgLT4gMAorYm9vbDA3MzYgaXNuYW4gOUUtMTAwNiAtPiAwCitib29sMDczNyBpc25hbiAtOUUtMTAwNiAtPiAwCitib29sMDczOCBpc25hbiA5RS0xMDAwIC0+IDAKK2Jvb2wwNzM5IGlzbmFuIC05RS0xMDAwIC0+IDAKK2Jvb2wwNzQwIGlzbmFuIDlFLTk5OSAtPiAwCitib29sMDc0MSBpc25hbiAtOUUtOTk5IC0+IDAKK2Jvb2wwNzQyIGlzbmFuIDlFLTk5OCAtPiAwCitib29sMDc0MyBpc25hbiAtOUUtOTk4IC0+IDAKK2Jvb2wwNzQ0IGlzbmFuIDlFLTEwMCAtPiAwCitib29sMDc0NSBpc25hbiAtOUUtMTAwIC0+IDAKK2Jvb2wwNzQ2IGlzbmFuIDAuMDAwMDA5IC0+IDAKK2Jvb2wwNzQ3IGlzbmFuIC0wLjAwMDAwOSAtPiAwCitib29sMDc0OCBpc25hbiAwLjAwOSAtPiAwCitib29sMDc0OSBpc25hbiAtMC4wMDkgLT4gMAorYm9vbDA3NTAgaXNuYW4gMC4wOSAtPiAwCitib29sMDc1MSBpc25hbiAtMC4wOSAtPiAwCitib29sMDc1MiBpc25hbiAwLjkgLT4gMAorYm9vbDA3NTMgaXNuYW4gLTAuOSAtPiAwCitib29sMDc1NCBpc25hbiA5IC0+IDAKK2Jvb2wwNzU1IGlzbmFuIC05IC0+IDAKK2Jvb2wwNzU2IGlzbmFuIDlFKzEgLT4gMAorYm9vbDA3NTcgaXNuYW4gLTlFKzEgLT4gMAorYm9vbDA3NTggaXNuYW4gOUUrMiAtPiAwCitib29sMDc1OSBpc25hbiAtOUUrMiAtPiAwCitib29sMDc2MCBpc25hbiA5RSszIC0+IDAKK2Jvb2wwNzYxIGlzbmFuIC05RSszIC0+IDAKK2Jvb2wwNzYyIGlzbmFuIDlFKzYgLT4gMAorYm9vbDA3NjMgaXNuYW4gLTlFKzYgLT4gMAorYm9vbDA3NjQgaXNuYW4gOUUrMTAwIC0+IDAKK2Jvb2wwNzY1IGlzbmFuIC05RSsxMDAgLT4gMAorYm9vbDA3NjYgaXNuYW4gOUUrOTkwIC0+IDAKK2Jvb2wwNzY3IGlzbmFuIC05RSs5OTAgLT4gMAorYm9vbDA3NjggaXNuYW4gOUUrOTkxIC0+IDAKK2Jvb2wwNzY5IGlzbmFuIC05RSs5OTEgLT4gMAorYm9vbDA3NzAgaXNuYW4gOUUrOTkyIC0+IDAKK2Jvb2wwNzcxIGlzbmFuIC05RSs5OTIgLT4gMAorYm9vbDA3NzIgaXNuYW4gOUUrOTk4IC0+IDAKK2Jvb2wwNzczIGlzbmFuIC05RSs5OTggLT4gMAorYm9vbDA3NzQgaXNuYW4gOUUrOTk5IC0+IDAKK2Jvb2wwNzc1IGlzbmFuIC05RSs5OTkgLT4gMAorYm9vbDA3NzYgaXNuYW4gOUUrMTAwMCAtPiAwCitib29sMDc3NyBpc25hbiAtOUUrMTAwMCAtPiAwCitib29sMDc3OCBpc25hbiA5RSsyMDAwIC0+IDAKK2Jvb2wwNzc5IGlzbmFuIC05RSsyMDAwIC0+IDAKK2Jvb2wwNzgwIGlzbmFuIDkuOTk5OTk5OTlFLTIwMDAgLT4gMAorYm9vbDA3ODEgaXNuYW4gLTkuOTk5OTk5OTlFLTIwMDAgLT4gMAorYm9vbDA3ODIgaXNuYW4gOS45OTk5OTk5OUUtMTAwOCAtPiAwCitib29sMDc4MyBpc25hbiAtOS45OTk5OTk5OUUtMTAwOCAtPiAwCitib29sMDc4NCBpc25hbiA5Ljk5OTk5OTk5RS0xMDA3IC0+IDAKK2Jvb2wwNzg1IGlzbmFuIC05Ljk5OTk5OTk5RS0xMDA3IC0+IDAKK2Jvb2wwNzg2IGlzbmFuIDkuOTk5OTk5OTlFLTEwMDYgLT4gMAorYm9vbDA3ODcgaXNuYW4gLTkuOTk5OTk5OTlFLTEwMDYgLT4gMAorYm9vbDA3ODggaXNuYW4gOS45OTk5OTk5OUUtMTAwMCAtPiAwCitib29sMDc4OSBpc25hbiAtOS45OTk5OTk5OUUtMTAwMCAtPiAwCitib29sMDc5MCBpc25hbiA5Ljk5OTk5OTk5RS05OTkgLT4gMAorYm9vbDA3OTEgaXNuYW4gLTkuOTk5OTk5OTlFLTk5OSAtPiAwCitib29sMDc5MiBpc25hbiA5Ljk5OTk5OTk5RS05OTggLT4gMAorYm9vbDA3OTMgaXNuYW4gLTkuOTk5OTk5OTlFLTk5OCAtPiAwCitib29sMDc5NCBpc25hbiA5Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDA3OTUgaXNuYW4gLTkuOTk5OTk5OTlFLTEwMCAtPiAwCitib29sMDc5NiBpc25hbiAwLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNzk3IGlzbmFuIC0wLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNzk4IGlzbmFuIDAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDA3OTkgaXNuYW4gLTAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDA4MDAgaXNuYW4gMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wwODAxIGlzbmFuIC0wLjA5OTk5OTk5OTkgLT4gMAorYm9vbDA4MDIgaXNuYW4gMC45OTk5OTk5OTkgLT4gMAorYm9vbDA4MDMgaXNuYW4gLTAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wwODA0IGlzbmFuIDkuOTk5OTk5OTkgLT4gMAorYm9vbDA4MDUgaXNuYW4gLTkuOTk5OTk5OTkgLT4gMAorYm9vbDA4MDYgaXNuYW4gOTkuOTk5OTk5OSAtPiAwCitib29sMDgwNyBpc25hbiAtOTkuOTk5OTk5OSAtPiAwCitib29sMDgwOCBpc25hbiA5OTkuOTk5OTk5IC0+IDAKK2Jvb2wwODA5IGlzbmFuIC05OTkuOTk5OTk5IC0+IDAKK2Jvb2wwODEwIGlzbmFuIDk5OTkuOTk5OTkgLT4gMAorYm9vbDA4MTEgaXNuYW4gLTk5OTkuOTk5OTkgLT4gMAorYm9vbDA4MTIgaXNuYW4gOTk5OTk5OS45OSAtPiAwCitib29sMDgxMyBpc25hbiAtOTk5OTk5OS45OSAtPiAwCitib29sMDgxNCBpc25hbiA5Ljk5OTk5OTk5RSsxMDAgLT4gMAorYm9vbDA4MTUgaXNuYW4gLTkuOTk5OTk5OTlFKzEwMCAtPiAwCitib29sMDgxNiBpc25hbiA5Ljk5OTk5OTk5RSs5OTAgLT4gMAorYm9vbDA4MTcgaXNuYW4gLTkuOTk5OTk5OTlFKzk5MCAtPiAwCitib29sMDgxOCBpc25hbiA5Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDA4MTkgaXNuYW4gLTkuOTk5OTk5OTlFKzk5MSAtPiAwCitib29sMDgyMCBpc25hbiA5Ljk5OTk5OTk5RSs5OTIgLT4gMAorYm9vbDA4MjEgaXNuYW4gLTkuOTk5OTk5OTlFKzk5MiAtPiAwCitib29sMDgyMiBpc25hbiA5Ljk5OTk5OTk5RSs5OTggLT4gMAorYm9vbDA4MjMgaXNuYW4gLTkuOTk5OTk5OTlFKzk5OCAtPiAwCitib29sMDgyNCBpc25hbiA5Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDA4MjUgaXNuYW4gLTkuOTk5OTk5OTlFKzk5OSAtPiAwCitib29sMDgyNiBpc25hbiA5Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wwODI3IGlzbmFuIC05Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wwODI4IGlzbmFuIDkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDA4MjkgaXNuYW4gLTkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDA4MzAgaXNuYW4gSW5maW5pdHkgLT4gMAorYm9vbDA4MzEgaXNuYW4gLUluZmluaXR5IC0+IDAKK2Jvb2wwODMyIGlzbmFuIE5hTiAtPiAxCitib29sMDgzMyBpc25hbiAtTmFOIC0+IDEKK2Jvb2wwODM0IGlzbmFuIE5hTjEyMyAtPiAxCitib29sMDgzNSBpc25hbiAtTmFOMTIzIC0+IDEKK2Jvb2wwODM2IGlzbmFuIHNOYU4gLT4gMQorYm9vbDA4MzcgaXNuYW4gLXNOYU4gLT4gMQorYm9vbDA4MzggaXNuYW4gc05hTjEyMyAtPiAxCitib29sMDgzOSBpc25hbiAtc05hTjEyMyAtPiAxCitib29sMDg0MCBpc25vcm1hbCAwRS0yMDAwIC0+IDAKK2Jvb2wwODQxIGlzbm9ybWFsIC0wRS0yMDAwIC0+IDAKK2Jvb2wwODQyIGlzbm9ybWFsIDBFLTEwMDggLT4gMAorYm9vbDA4NDMgaXNub3JtYWwgLTBFLTEwMDggLT4gMAorYm9vbDA4NDQgaXNub3JtYWwgMEUtMTAwNyAtPiAwCitib29sMDg0NSBpc25vcm1hbCAtMEUtMTAwNyAtPiAwCitib29sMDg0NiBpc25vcm1hbCAwRS0xMDA2IC0+IDAKK2Jvb2wwODQ3IGlzbm9ybWFsIC0wRS0xMDA2IC0+IDAKK2Jvb2wwODQ4IGlzbm9ybWFsIDBFLTEwMDAgLT4gMAorYm9vbDA4NDkgaXNub3JtYWwgLTBFLTEwMDAgLT4gMAorYm9vbDA4NTAgaXNub3JtYWwgMEUtOTk5IC0+IDAKK2Jvb2wwODUxIGlzbm9ybWFsIC0wRS05OTkgLT4gMAorYm9vbDA4NTIgaXNub3JtYWwgMEUtOTk4IC0+IDAKK2Jvb2wwODUzIGlzbm9ybWFsIC0wRS05OTggLT4gMAorYm9vbDA4NTQgaXNub3JtYWwgMEUtMTAwIC0+IDAKK2Jvb2wwODU1IGlzbm9ybWFsIC0wRS0xMDAgLT4gMAorYm9vbDA4NTYgaXNub3JtYWwgMC4wMDAwMDAgLT4gMAorYm9vbDA4NTcgaXNub3JtYWwgLTAuMDAwMDAwIC0+IDAKK2Jvb2wwODU4IGlzbm9ybWFsIDAuMDAwIC0+IDAKK2Jvb2wwODU5IGlzbm9ybWFsIC0wLjAwMCAtPiAwCitib29sMDg2MCBpc25vcm1hbCAwLjAwIC0+IDAKK2Jvb2wwODYxIGlzbm9ybWFsIC0wLjAwIC0+IDAKK2Jvb2wwODYyIGlzbm9ybWFsIDAuMCAtPiAwCitib29sMDg2MyBpc25vcm1hbCAtMC4wIC0+IDAKK2Jvb2wwODY0IGlzbm9ybWFsIDAgLT4gMAorYm9vbDA4NjUgaXNub3JtYWwgLTAgLT4gMAorYm9vbDA4NjYgaXNub3JtYWwgMEUrMSAtPiAwCitib29sMDg2NyBpc25vcm1hbCAtMEUrMSAtPiAwCitib29sMDg2OCBpc25vcm1hbCAwRSsyIC0+IDAKK2Jvb2wwODY5IGlzbm9ybWFsIC0wRSsyIC0+IDAKK2Jvb2wwODcwIGlzbm9ybWFsIDBFKzMgLT4gMAorYm9vbDA4NzEgaXNub3JtYWwgLTBFKzMgLT4gMAorYm9vbDA4NzIgaXNub3JtYWwgMEUrNiAtPiAwCitib29sMDg3MyBpc25vcm1hbCAtMEUrNiAtPiAwCitib29sMDg3NCBpc25vcm1hbCAwRSsxMDAgLT4gMAorYm9vbDA4NzUgaXNub3JtYWwgLTBFKzEwMCAtPiAwCitib29sMDg3NiBpc25vcm1hbCAwRSs5OTAgLT4gMAorYm9vbDA4NzcgaXNub3JtYWwgLTBFKzk5MCAtPiAwCitib29sMDg3OCBpc25vcm1hbCAwRSs5OTEgLT4gMAorYm9vbDA4NzkgaXNub3JtYWwgLTBFKzk5MSAtPiAwCitib29sMDg4MCBpc25vcm1hbCAwRSs5OTIgLT4gMAorYm9vbDA4ODEgaXNub3JtYWwgLTBFKzk5MiAtPiAwCitib29sMDg4MiBpc25vcm1hbCAwRSs5OTggLT4gMAorYm9vbDA4ODMgaXNub3JtYWwgLTBFKzk5OCAtPiAwCitib29sMDg4NCBpc25vcm1hbCAwRSs5OTkgLT4gMAorYm9vbDA4ODUgaXNub3JtYWwgLTBFKzk5OSAtPiAwCitib29sMDg4NiBpc25vcm1hbCAwRSsxMDAwIC0+IDAKK2Jvb2wwODg3IGlzbm9ybWFsIC0wRSsxMDAwIC0+IDAKK2Jvb2wwODg4IGlzbm9ybWFsIDBFKzIwMDAgLT4gMAorYm9vbDA4ODkgaXNub3JtYWwgLTBFKzIwMDAgLT4gMAorYm9vbDA4OTAgaXNub3JtYWwgMUUtMjAwMCAtPiAwCitib29sMDg5MSBpc25vcm1hbCAtMUUtMjAwMCAtPiAwCitib29sMDg5MiBpc25vcm1hbCAxRS0xMDA4IC0+IDAKK2Jvb2wwODkzIGlzbm9ybWFsIC0xRS0xMDA4IC0+IDAKK2Jvb2wwODk0IGlzbm9ybWFsIDFFLTEwMDcgLT4gMAorYm9vbDA4OTUgaXNub3JtYWwgLTFFLTEwMDcgLT4gMAorYm9vbDA4OTYgaXNub3JtYWwgMUUtMTAwNiAtPiAwCitib29sMDg5NyBpc25vcm1hbCAtMUUtMTAwNiAtPiAwCitib29sMDg5OCBpc25vcm1hbCAxRS0xMDAwIC0+IDAKK2Jvb2wwODk5IGlzbm9ybWFsIC0xRS0xMDAwIC0+IDAKK2Jvb2wwOTAwIGlzbm9ybWFsIDFFLTk5OSAtPiAxCitib29sMDkwMSBpc25vcm1hbCAtMUUtOTk5IC0+IDEKK2Jvb2wwOTAyIGlzbm9ybWFsIDFFLTk5OCAtPiAxCitib29sMDkwMyBpc25vcm1hbCAtMUUtOTk4IC0+IDEKK2Jvb2wwOTA0IGlzbm9ybWFsIDFFLTEwMCAtPiAxCitib29sMDkwNSBpc25vcm1hbCAtMUUtMTAwIC0+IDEKK2Jvb2wwOTA2IGlzbm9ybWFsIDAuMDAwMDAxIC0+IDEKK2Jvb2wwOTA3IGlzbm9ybWFsIC0wLjAwMDAwMSAtPiAxCitib29sMDkwOCBpc25vcm1hbCAwLjAwMSAtPiAxCitib29sMDkwOSBpc25vcm1hbCAtMC4wMDEgLT4gMQorYm9vbDA5MTAgaXNub3JtYWwgMC4wMSAtPiAxCitib29sMDkxMSBpc25vcm1hbCAtMC4wMSAtPiAxCitib29sMDkxMiBpc25vcm1hbCAwLjEgLT4gMQorYm9vbDA5MTMgaXNub3JtYWwgLTAuMSAtPiAxCitib29sMDkxNCBpc25vcm1hbCAxIC0+IDEKK2Jvb2wwOTE1IGlzbm9ybWFsIC0xIC0+IDEKK2Jvb2wwOTE2IGlzbm9ybWFsIDFFKzEgLT4gMQorYm9vbDA5MTcgaXNub3JtYWwgLTFFKzEgLT4gMQorYm9vbDA5MTggaXNub3JtYWwgMUUrMiAtPiAxCitib29sMDkxOSBpc25vcm1hbCAtMUUrMiAtPiAxCitib29sMDkyMCBpc25vcm1hbCAxRSszIC0+IDEKK2Jvb2wwOTIxIGlzbm9ybWFsIC0xRSszIC0+IDEKK2Jvb2wwOTIyIGlzbm9ybWFsIDFFKzYgLT4gMQorYm9vbDA5MjMgaXNub3JtYWwgLTFFKzYgLT4gMQorYm9vbDA5MjQgaXNub3JtYWwgMUUrMTAwIC0+IDEKK2Jvb2wwOTI1IGlzbm9ybWFsIC0xRSsxMDAgLT4gMQorYm9vbDA5MjYgaXNub3JtYWwgMUUrOTkwIC0+IDEKK2Jvb2wwOTI3IGlzbm9ybWFsIC0xRSs5OTAgLT4gMQorYm9vbDA5MjggaXNub3JtYWwgMUUrOTkxIC0+IDEKK2Jvb2wwOTI5IGlzbm9ybWFsIC0xRSs5OTEgLT4gMQorYm9vbDA5MzAgaXNub3JtYWwgMUUrOTkyIC0+IDEKK2Jvb2wwOTMxIGlzbm9ybWFsIC0xRSs5OTIgLT4gMQorYm9vbDA5MzIgaXNub3JtYWwgMUUrOTk4IC0+IDEKK2Jvb2wwOTMzIGlzbm9ybWFsIC0xRSs5OTggLT4gMQorYm9vbDA5MzQgaXNub3JtYWwgMUUrOTk5IC0+IDEKK2Jvb2wwOTM1IGlzbm9ybWFsIC0xRSs5OTkgLT4gMQorYm9vbDA5MzYgaXNub3JtYWwgMUUrMTAwMCAtPiAxCitib29sMDkzNyBpc25vcm1hbCAtMUUrMTAwMCAtPiAxCitib29sMDkzOCBpc25vcm1hbCAxRSsyMDAwIC0+IDEKK2Jvb2wwOTM5IGlzbm9ybWFsIC0xRSsyMDAwIC0+IDEKK2Jvb2wwOTQwIGlzbm9ybWFsIDlFLTIwMDAgLT4gMAorYm9vbDA5NDEgaXNub3JtYWwgLTlFLTIwMDAgLT4gMAorYm9vbDA5NDIgaXNub3JtYWwgOUUtMTAwOCAtPiAwCitib29sMDk0MyBpc25vcm1hbCAtOUUtMTAwOCAtPiAwCitib29sMDk0NCBpc25vcm1hbCA5RS0xMDA3IC0+IDAKK2Jvb2wwOTQ1IGlzbm9ybWFsIC05RS0xMDA3IC0+IDAKK2Jvb2wwOTQ2IGlzbm9ybWFsIDlFLTEwMDYgLT4gMAorYm9vbDA5NDcgaXNub3JtYWwgLTlFLTEwMDYgLT4gMAorYm9vbDA5NDggaXNub3JtYWwgOUUtMTAwMCAtPiAwCitib29sMDk0OSBpc25vcm1hbCAtOUUtMTAwMCAtPiAwCitib29sMDk1MCBpc25vcm1hbCA5RS05OTkgLT4gMQorYm9vbDA5NTEgaXNub3JtYWwgLTlFLTk5OSAtPiAxCitib29sMDk1MiBpc25vcm1hbCA5RS05OTggLT4gMQorYm9vbDA5NTMgaXNub3JtYWwgLTlFLTk5OCAtPiAxCitib29sMDk1NCBpc25vcm1hbCA5RS0xMDAgLT4gMQorYm9vbDA5NTUgaXNub3JtYWwgLTlFLTEwMCAtPiAxCitib29sMDk1NiBpc25vcm1hbCAwLjAwMDAwOSAtPiAxCitib29sMDk1NyBpc25vcm1hbCAtMC4wMDAwMDkgLT4gMQorYm9vbDA5NTggaXNub3JtYWwgMC4wMDkgLT4gMQorYm9vbDA5NTkgaXNub3JtYWwgLTAuMDA5IC0+IDEKK2Jvb2wwOTYwIGlzbm9ybWFsIDAuMDkgLT4gMQorYm9vbDA5NjEgaXNub3JtYWwgLTAuMDkgLT4gMQorYm9vbDA5NjIgaXNub3JtYWwgMC45IC0+IDEKK2Jvb2wwOTYzIGlzbm9ybWFsIC0wLjkgLT4gMQorYm9vbDA5NjQgaXNub3JtYWwgOSAtPiAxCitib29sMDk2NSBpc25vcm1hbCAtOSAtPiAxCitib29sMDk2NiBpc25vcm1hbCA5RSsxIC0+IDEKK2Jvb2wwOTY3IGlzbm9ybWFsIC05RSsxIC0+IDEKK2Jvb2wwOTY4IGlzbm9ybWFsIDlFKzIgLT4gMQorYm9vbDA5NjkgaXNub3JtYWwgLTlFKzIgLT4gMQorYm9vbDA5NzAgaXNub3JtYWwgOUUrMyAtPiAxCitib29sMDk3MSBpc25vcm1hbCAtOUUrMyAtPiAxCitib29sMDk3MiBpc25vcm1hbCA5RSs2IC0+IDEKK2Jvb2wwOTczIGlzbm9ybWFsIC05RSs2IC0+IDEKK2Jvb2wwOTc0IGlzbm9ybWFsIDlFKzEwMCAtPiAxCitib29sMDk3NSBpc25vcm1hbCAtOUUrMTAwIC0+IDEKK2Jvb2wwOTc2IGlzbm9ybWFsIDlFKzk5MCAtPiAxCitib29sMDk3NyBpc25vcm1hbCAtOUUrOTkwIC0+IDEKK2Jvb2wwOTc4IGlzbm9ybWFsIDlFKzk5MSAtPiAxCitib29sMDk3OSBpc25vcm1hbCAtOUUrOTkxIC0+IDEKK2Jvb2wwOTgwIGlzbm9ybWFsIDlFKzk5MiAtPiAxCitib29sMDk4MSBpc25vcm1hbCAtOUUrOTkyIC0+IDEKK2Jvb2wwOTgyIGlzbm9ybWFsIDlFKzk5OCAtPiAxCitib29sMDk4MyBpc25vcm1hbCAtOUUrOTk4IC0+IDEKK2Jvb2wwOTg0IGlzbm9ybWFsIDlFKzk5OSAtPiAxCitib29sMDk4NSBpc25vcm1hbCAtOUUrOTk5IC0+IDEKK2Jvb2wwOTg2IGlzbm9ybWFsIDlFKzEwMDAgLT4gMQorYm9vbDA5ODcgaXNub3JtYWwgLTlFKzEwMDAgLT4gMQorYm9vbDA5ODggaXNub3JtYWwgOUUrMjAwMCAtPiAxCitib29sMDk4OSBpc25vcm1hbCAtOUUrMjAwMCAtPiAxCitib29sMDk5MCBpc25vcm1hbCA5Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wwOTkxIGlzbm9ybWFsIC05Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wwOTkyIGlzbm9ybWFsIDkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDA5OTMgaXNub3JtYWwgLTkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDA5OTQgaXNub3JtYWwgOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMDk5NSBpc25vcm1hbCAtOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMDk5NiBpc25vcm1hbCA5Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wwOTk3IGlzbm9ybWFsIC05Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wwOTk4IGlzbm9ybWFsIDkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDA5OTkgaXNub3JtYWwgLTkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDEwMDAgaXNub3JtYWwgOS45OTk5OTk5OUUtOTk5IC0+IDEKK2Jvb2wxMDAxIGlzbm9ybWFsIC05Ljk5OTk5OTk5RS05OTkgLT4gMQorYm9vbDEwMDIgaXNub3JtYWwgOS45OTk5OTk5OUUtOTk4IC0+IDEKK2Jvb2wxMDAzIGlzbm9ybWFsIC05Ljk5OTk5OTk5RS05OTggLT4gMQorYm9vbDEwMDQgaXNub3JtYWwgOS45OTk5OTk5OUUtMTAwIC0+IDEKK2Jvb2wxMDA1IGlzbm9ybWFsIC05Ljk5OTk5OTk5RS0xMDAgLT4gMQorYm9vbDEwMDYgaXNub3JtYWwgMC4wMDAwMDk5OTk5OTk5OSAtPiAxCitib29sMTAwNyBpc25vcm1hbCAtMC4wMDAwMDk5OTk5OTk5OSAtPiAxCitib29sMTAwOCBpc25vcm1hbCAwLjAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wxMDA5IGlzbm9ybWFsIC0wLjAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wxMDEwIGlzbm9ybWFsIDAuMDk5OTk5OTk5OSAtPiAxCitib29sMTAxMSBpc25vcm1hbCAtMC4wOTk5OTk5OTk5IC0+IDEKK2Jvb2wxMDEyIGlzbm9ybWFsIDAuOTk5OTk5OTk5IC0+IDEKK2Jvb2wxMDEzIGlzbm9ybWFsIC0wLjk5OTk5OTk5OSAtPiAxCitib29sMTAxNCBpc25vcm1hbCA5Ljk5OTk5OTk5IC0+IDEKK2Jvb2wxMDE1IGlzbm9ybWFsIC05Ljk5OTk5OTk5IC0+IDEKK2Jvb2wxMDE2IGlzbm9ybWFsIDk5Ljk5OTk5OTkgLT4gMQorYm9vbDEwMTcgaXNub3JtYWwgLTk5Ljk5OTk5OTkgLT4gMQorYm9vbDEwMTggaXNub3JtYWwgOTk5Ljk5OTk5OSAtPiAxCitib29sMTAxOSBpc25vcm1hbCAtOTk5Ljk5OTk5OSAtPiAxCitib29sMTAyMCBpc25vcm1hbCA5OTk5Ljk5OTk5IC0+IDEKK2Jvb2wxMDIxIGlzbm9ybWFsIC05OTk5Ljk5OTk5IC0+IDEKK2Jvb2wxMDIyIGlzbm9ybWFsIDk5OTk5OTkuOTkgLT4gMQorYm9vbDEwMjMgaXNub3JtYWwgLTk5OTk5OTkuOTkgLT4gMQorYm9vbDEwMjQgaXNub3JtYWwgOS45OTk5OTk5OUUrMTAwIC0+IDEKK2Jvb2wxMDI1IGlzbm9ybWFsIC05Ljk5OTk5OTk5RSsxMDAgLT4gMQorYm9vbDEwMjYgaXNub3JtYWwgOS45OTk5OTk5OUUrOTkwIC0+IDEKK2Jvb2wxMDI3IGlzbm9ybWFsIC05Ljk5OTk5OTk5RSs5OTAgLT4gMQorYm9vbDEwMjggaXNub3JtYWwgOS45OTk5OTk5OUUrOTkxIC0+IDEKK2Jvb2wxMDI5IGlzbm9ybWFsIC05Ljk5OTk5OTk5RSs5OTEgLT4gMQorYm9vbDEwMzAgaXNub3JtYWwgOS45OTk5OTk5OUUrOTkyIC0+IDEKK2Jvb2wxMDMxIGlzbm9ybWFsIC05Ljk5OTk5OTk5RSs5OTIgLT4gMQorYm9vbDEwMzIgaXNub3JtYWwgOS45OTk5OTk5OUUrOTk4IC0+IDEKK2Jvb2wxMDMzIGlzbm9ybWFsIC05Ljk5OTk5OTk5RSs5OTggLT4gMQorYm9vbDEwMzQgaXNub3JtYWwgOS45OTk5OTk5OUUrOTk5IC0+IDEKK2Jvb2wxMDM1IGlzbm9ybWFsIC05Ljk5OTk5OTk5RSs5OTkgLT4gMQorYm9vbDEwMzYgaXNub3JtYWwgOS45OTk5OTk5OUUrMTAwMCAtPiAxCitib29sMTAzNyBpc25vcm1hbCAtOS45OTk5OTk5OUUrMTAwMCAtPiAxCitib29sMTAzOCBpc25vcm1hbCA5Ljk5OTk5OTk5RSsyMDAwIC0+IDEKK2Jvb2wxMDM5IGlzbm9ybWFsIC05Ljk5OTk5OTk5RSsyMDAwIC0+IDEKK2Jvb2wxMDQwIGlzbm9ybWFsIEluZmluaXR5IC0+IDAKK2Jvb2wxMDQxIGlzbm9ybWFsIC1JbmZpbml0eSAtPiAwCitib29sMTA0MiBpc25vcm1hbCBOYU4gLT4gMAorYm9vbDEwNDMgaXNub3JtYWwgLU5hTiAtPiAwCitib29sMTA0NCBpc25vcm1hbCBOYU4xMjMgLT4gMAorYm9vbDEwNDUgaXNub3JtYWwgLU5hTjEyMyAtPiAwCitib29sMTA0NiBpc25vcm1hbCBzTmFOIC0+IDAKK2Jvb2wxMDQ3IGlzbm9ybWFsIC1zTmFOIC0+IDAKK2Jvb2wxMDQ4IGlzbm9ybWFsIHNOYU4xMjMgLT4gMAorYm9vbDEwNDkgaXNub3JtYWwgLXNOYU4xMjMgLT4gMAorYm9vbDEwNTAgaXNxbmFuIDBFLTIwMDAgLT4gMAorYm9vbDEwNTEgaXNxbmFuIC0wRS0yMDAwIC0+IDAKK2Jvb2wxMDUyIGlzcW5hbiAwRS0xMDA4IC0+IDAKK2Jvb2wxMDUzIGlzcW5hbiAtMEUtMTAwOCAtPiAwCitib29sMTA1NCBpc3FuYW4gMEUtMTAwNyAtPiAwCitib29sMTA1NSBpc3FuYW4gLTBFLTEwMDcgLT4gMAorYm9vbDEwNTYgaXNxbmFuIDBFLTEwMDYgLT4gMAorYm9vbDEwNTcgaXNxbmFuIC0wRS0xMDA2IC0+IDAKK2Jvb2wxMDU4IGlzcW5hbiAwRS0xMDAwIC0+IDAKK2Jvb2wxMDU5IGlzcW5hbiAtMEUtMTAwMCAtPiAwCitib29sMTA2MCBpc3FuYW4gMEUtOTk5IC0+IDAKK2Jvb2wxMDYxIGlzcW5hbiAtMEUtOTk5IC0+IDAKK2Jvb2wxMDYyIGlzcW5hbiAwRS05OTggLT4gMAorYm9vbDEwNjMgaXNxbmFuIC0wRS05OTggLT4gMAorYm9vbDEwNjQgaXNxbmFuIDBFLTEwMCAtPiAwCitib29sMTA2NSBpc3FuYW4gLTBFLTEwMCAtPiAwCitib29sMTA2NiBpc3FuYW4gMC4wMDAwMDAgLT4gMAorYm9vbDEwNjcgaXNxbmFuIC0wLjAwMDAwMCAtPiAwCitib29sMTA2OCBpc3FuYW4gMC4wMDAgLT4gMAorYm9vbDEwNjkgaXNxbmFuIC0wLjAwMCAtPiAwCitib29sMTA3MCBpc3FuYW4gMC4wMCAtPiAwCitib29sMTA3MSBpc3FuYW4gLTAuMDAgLT4gMAorYm9vbDEwNzIgaXNxbmFuIDAuMCAtPiAwCitib29sMTA3MyBpc3FuYW4gLTAuMCAtPiAwCitib29sMTA3NCBpc3FuYW4gMCAtPiAwCitib29sMTA3NSBpc3FuYW4gLTAgLT4gMAorYm9vbDEwNzYgaXNxbmFuIDBFKzEgLT4gMAorYm9vbDEwNzcgaXNxbmFuIC0wRSsxIC0+IDAKK2Jvb2wxMDc4IGlzcW5hbiAwRSsyIC0+IDAKK2Jvb2wxMDc5IGlzcW5hbiAtMEUrMiAtPiAwCitib29sMTA4MCBpc3FuYW4gMEUrMyAtPiAwCitib29sMTA4MSBpc3FuYW4gLTBFKzMgLT4gMAorYm9vbDEwODIgaXNxbmFuIDBFKzYgLT4gMAorYm9vbDEwODMgaXNxbmFuIC0wRSs2IC0+IDAKK2Jvb2wxMDg0IGlzcW5hbiAwRSsxMDAgLT4gMAorYm9vbDEwODUgaXNxbmFuIC0wRSsxMDAgLT4gMAorYm9vbDEwODYgaXNxbmFuIDBFKzk5MCAtPiAwCitib29sMTA4NyBpc3FuYW4gLTBFKzk5MCAtPiAwCitib29sMTA4OCBpc3FuYW4gMEUrOTkxIC0+IDAKK2Jvb2wxMDg5IGlzcW5hbiAtMEUrOTkxIC0+IDAKK2Jvb2wxMDkwIGlzcW5hbiAwRSs5OTIgLT4gMAorYm9vbDEwOTEgaXNxbmFuIC0wRSs5OTIgLT4gMAorYm9vbDEwOTIgaXNxbmFuIDBFKzk5OCAtPiAwCitib29sMTA5MyBpc3FuYW4gLTBFKzk5OCAtPiAwCitib29sMTA5NCBpc3FuYW4gMEUrOTk5IC0+IDAKK2Jvb2wxMDk1IGlzcW5hbiAtMEUrOTk5IC0+IDAKK2Jvb2wxMDk2IGlzcW5hbiAwRSsxMDAwIC0+IDAKK2Jvb2wxMDk3IGlzcW5hbiAtMEUrMTAwMCAtPiAwCitib29sMTA5OCBpc3FuYW4gMEUrMjAwMCAtPiAwCitib29sMTA5OSBpc3FuYW4gLTBFKzIwMDAgLT4gMAorYm9vbDExMDAgaXNxbmFuIDFFLTIwMDAgLT4gMAorYm9vbDExMDEgaXNxbmFuIC0xRS0yMDAwIC0+IDAKK2Jvb2wxMTAyIGlzcW5hbiAxRS0xMDA4IC0+IDAKK2Jvb2wxMTAzIGlzcW5hbiAtMUUtMTAwOCAtPiAwCitib29sMTEwNCBpc3FuYW4gMUUtMTAwNyAtPiAwCitib29sMTEwNSBpc3FuYW4gLTFFLTEwMDcgLT4gMAorYm9vbDExMDYgaXNxbmFuIDFFLTEwMDYgLT4gMAorYm9vbDExMDcgaXNxbmFuIC0xRS0xMDA2IC0+IDAKK2Jvb2wxMTA4IGlzcW5hbiAxRS0xMDAwIC0+IDAKK2Jvb2wxMTA5IGlzcW5hbiAtMUUtMTAwMCAtPiAwCitib29sMTExMCBpc3FuYW4gMUUtOTk5IC0+IDAKK2Jvb2wxMTExIGlzcW5hbiAtMUUtOTk5IC0+IDAKK2Jvb2wxMTEyIGlzcW5hbiAxRS05OTggLT4gMAorYm9vbDExMTMgaXNxbmFuIC0xRS05OTggLT4gMAorYm9vbDExMTQgaXNxbmFuIDFFLTEwMCAtPiAwCitib29sMTExNSBpc3FuYW4gLTFFLTEwMCAtPiAwCitib29sMTExNiBpc3FuYW4gMC4wMDAwMDEgLT4gMAorYm9vbDExMTcgaXNxbmFuIC0wLjAwMDAwMSAtPiAwCitib29sMTExOCBpc3FuYW4gMC4wMDEgLT4gMAorYm9vbDExMTkgaXNxbmFuIC0wLjAwMSAtPiAwCitib29sMTEyMCBpc3FuYW4gMC4wMSAtPiAwCitib29sMTEyMSBpc3FuYW4gLTAuMDEgLT4gMAorYm9vbDExMjIgaXNxbmFuIDAuMSAtPiAwCitib29sMTEyMyBpc3FuYW4gLTAuMSAtPiAwCitib29sMTEyNCBpc3FuYW4gMSAtPiAwCitib29sMTEyNSBpc3FuYW4gLTEgLT4gMAorYm9vbDExMjYgaXNxbmFuIDFFKzEgLT4gMAorYm9vbDExMjcgaXNxbmFuIC0xRSsxIC0+IDAKK2Jvb2wxMTI4IGlzcW5hbiAxRSsyIC0+IDAKK2Jvb2wxMTI5IGlzcW5hbiAtMUUrMiAtPiAwCitib29sMTEzMCBpc3FuYW4gMUUrMyAtPiAwCitib29sMTEzMSBpc3FuYW4gLTFFKzMgLT4gMAorYm9vbDExMzIgaXNxbmFuIDFFKzYgLT4gMAorYm9vbDExMzMgaXNxbmFuIC0xRSs2IC0+IDAKK2Jvb2wxMTM0IGlzcW5hbiAxRSsxMDAgLT4gMAorYm9vbDExMzUgaXNxbmFuIC0xRSsxMDAgLT4gMAorYm9vbDExMzYgaXNxbmFuIDFFKzk5MCAtPiAwCitib29sMTEzNyBpc3FuYW4gLTFFKzk5MCAtPiAwCitib29sMTEzOCBpc3FuYW4gMUUrOTkxIC0+IDAKK2Jvb2wxMTM5IGlzcW5hbiAtMUUrOTkxIC0+IDAKK2Jvb2wxMTQwIGlzcW5hbiAxRSs5OTIgLT4gMAorYm9vbDExNDEgaXNxbmFuIC0xRSs5OTIgLT4gMAorYm9vbDExNDIgaXNxbmFuIDFFKzk5OCAtPiAwCitib29sMTE0MyBpc3FuYW4gLTFFKzk5OCAtPiAwCitib29sMTE0NCBpc3FuYW4gMUUrOTk5IC0+IDAKK2Jvb2wxMTQ1IGlzcW5hbiAtMUUrOTk5IC0+IDAKK2Jvb2wxMTQ2IGlzcW5hbiAxRSsxMDAwIC0+IDAKK2Jvb2wxMTQ3IGlzcW5hbiAtMUUrMTAwMCAtPiAwCitib29sMTE0OCBpc3FuYW4gMUUrMjAwMCAtPiAwCitib29sMTE0OSBpc3FuYW4gLTFFKzIwMDAgLT4gMAorYm9vbDExNTAgaXNxbmFuIDlFLTIwMDAgLT4gMAorYm9vbDExNTEgaXNxbmFuIC05RS0yMDAwIC0+IDAKK2Jvb2wxMTUyIGlzcW5hbiA5RS0xMDA4IC0+IDAKK2Jvb2wxMTUzIGlzcW5hbiAtOUUtMTAwOCAtPiAwCitib29sMTE1NCBpc3FuYW4gOUUtMTAwNyAtPiAwCitib29sMTE1NSBpc3FuYW4gLTlFLTEwMDcgLT4gMAorYm9vbDExNTYgaXNxbmFuIDlFLTEwMDYgLT4gMAorYm9vbDExNTcgaXNxbmFuIC05RS0xMDA2IC0+IDAKK2Jvb2wxMTU4IGlzcW5hbiA5RS0xMDAwIC0+IDAKK2Jvb2wxMTU5IGlzcW5hbiAtOUUtMTAwMCAtPiAwCitib29sMTE2MCBpc3FuYW4gOUUtOTk5IC0+IDAKK2Jvb2wxMTYxIGlzcW5hbiAtOUUtOTk5IC0+IDAKK2Jvb2wxMTYyIGlzcW5hbiA5RS05OTggLT4gMAorYm9vbDExNjMgaXNxbmFuIC05RS05OTggLT4gMAorYm9vbDExNjQgaXNxbmFuIDlFLTEwMCAtPiAwCitib29sMTE2NSBpc3FuYW4gLTlFLTEwMCAtPiAwCitib29sMTE2NiBpc3FuYW4gMC4wMDAwMDkgLT4gMAorYm9vbDExNjcgaXNxbmFuIC0wLjAwMDAwOSAtPiAwCitib29sMTE2OCBpc3FuYW4gMC4wMDkgLT4gMAorYm9vbDExNjkgaXNxbmFuIC0wLjAwOSAtPiAwCitib29sMTE3MCBpc3FuYW4gMC4wOSAtPiAwCitib29sMTE3MSBpc3FuYW4gLTAuMDkgLT4gMAorYm9vbDExNzIgaXNxbmFuIDAuOSAtPiAwCitib29sMTE3MyBpc3FuYW4gLTAuOSAtPiAwCitib29sMTE3NCBpc3FuYW4gOSAtPiAwCitib29sMTE3NSBpc3FuYW4gLTkgLT4gMAorYm9vbDExNzYgaXNxbmFuIDlFKzEgLT4gMAorYm9vbDExNzcgaXNxbmFuIC05RSsxIC0+IDAKK2Jvb2wxMTc4IGlzcW5hbiA5RSsyIC0+IDAKK2Jvb2wxMTc5IGlzcW5hbiAtOUUrMiAtPiAwCitib29sMTE4MCBpc3FuYW4gOUUrMyAtPiAwCitib29sMTE4MSBpc3FuYW4gLTlFKzMgLT4gMAorYm9vbDExODIgaXNxbmFuIDlFKzYgLT4gMAorYm9vbDExODMgaXNxbmFuIC05RSs2IC0+IDAKK2Jvb2wxMTg0IGlzcW5hbiA5RSsxMDAgLT4gMAorYm9vbDExODUgaXNxbmFuIC05RSsxMDAgLT4gMAorYm9vbDExODYgaXNxbmFuIDlFKzk5MCAtPiAwCitib29sMTE4NyBpc3FuYW4gLTlFKzk5MCAtPiAwCitib29sMTE4OCBpc3FuYW4gOUUrOTkxIC0+IDAKK2Jvb2wxMTg5IGlzcW5hbiAtOUUrOTkxIC0+IDAKK2Jvb2wxMTkwIGlzcW5hbiA5RSs5OTIgLT4gMAorYm9vbDExOTEgaXNxbmFuIC05RSs5OTIgLT4gMAorYm9vbDExOTIgaXNxbmFuIDlFKzk5OCAtPiAwCitib29sMTE5MyBpc3FuYW4gLTlFKzk5OCAtPiAwCitib29sMTE5NCBpc3FuYW4gOUUrOTk5IC0+IDAKK2Jvb2wxMTk1IGlzcW5hbiAtOUUrOTk5IC0+IDAKK2Jvb2wxMTk2IGlzcW5hbiA5RSsxMDAwIC0+IDAKK2Jvb2wxMTk3IGlzcW5hbiAtOUUrMTAwMCAtPiAwCitib29sMTE5OCBpc3FuYW4gOUUrMjAwMCAtPiAwCitib29sMTE5OSBpc3FuYW4gLTlFKzIwMDAgLT4gMAorYm9vbDEyMDAgaXNxbmFuIDkuOTk5OTk5OTlFLTIwMDAgLT4gMAorYm9vbDEyMDEgaXNxbmFuIC05Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wxMjAyIGlzcW5hbiA5Ljk5OTk5OTk5RS0xMDA4IC0+IDAKK2Jvb2wxMjAzIGlzcW5hbiAtOS45OTk5OTk5OUUtMTAwOCAtPiAwCitib29sMTIwNCBpc3FuYW4gOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMTIwNSBpc3FuYW4gLTkuOTk5OTk5OTlFLTEwMDcgLT4gMAorYm9vbDEyMDYgaXNxbmFuIDkuOTk5OTk5OTlFLTEwMDYgLT4gMAorYm9vbDEyMDcgaXNxbmFuIC05Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wxMjA4IGlzcW5hbiA5Ljk5OTk5OTk5RS0xMDAwIC0+IDAKK2Jvb2wxMjA5IGlzcW5hbiAtOS45OTk5OTk5OUUtMTAwMCAtPiAwCitib29sMTIxMCBpc3FuYW4gOS45OTk5OTk5OUUtOTk5IC0+IDAKK2Jvb2wxMjExIGlzcW5hbiAtOS45OTk5OTk5OUUtOTk5IC0+IDAKK2Jvb2wxMjEyIGlzcW5hbiA5Ljk5OTk5OTk5RS05OTggLT4gMAorYm9vbDEyMTMgaXNxbmFuIC05Ljk5OTk5OTk5RS05OTggLT4gMAorYm9vbDEyMTQgaXNxbmFuIDkuOTk5OTk5OTlFLTEwMCAtPiAwCitib29sMTIxNSBpc3FuYW4gLTkuOTk5OTk5OTlFLTEwMCAtPiAwCitib29sMTIxNiBpc3FuYW4gMC4wMDAwMDk5OTk5OTk5OSAtPiAwCitib29sMTIxNyBpc3FuYW4gLTAuMDAwMDA5OTk5OTk5OTkgLT4gMAorYm9vbDEyMTggaXNxbmFuIDAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDEyMTkgaXNxbmFuIC0wLjAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wxMjIwIGlzcW5hbiAwLjA5OTk5OTk5OTkgLT4gMAorYm9vbDEyMjEgaXNxbmFuIC0wLjA5OTk5OTk5OTkgLT4gMAorYm9vbDEyMjIgaXNxbmFuIDAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wxMjIzIGlzcW5hbiAtMC45OTk5OTk5OTkgLT4gMAorYm9vbDEyMjQgaXNxbmFuIDkuOTk5OTk5OTkgLT4gMAorYm9vbDEyMjUgaXNxbmFuIC05Ljk5OTk5OTk5IC0+IDAKK2Jvb2wxMjI2IGlzcW5hbiA5OS45OTk5OTk5IC0+IDAKK2Jvb2wxMjI3IGlzcW5hbiAtOTkuOTk5OTk5OSAtPiAwCitib29sMTIyOCBpc3FuYW4gOTk5Ljk5OTk5OSAtPiAwCitib29sMTIyOSBpc3FuYW4gLTk5OS45OTk5OTkgLT4gMAorYm9vbDEyMzAgaXNxbmFuIDk5OTkuOTk5OTkgLT4gMAorYm9vbDEyMzEgaXNxbmFuIC05OTk5Ljk5OTk5IC0+IDAKK2Jvb2wxMjMyIGlzcW5hbiA5OTk5OTk5Ljk5IC0+IDAKK2Jvb2wxMjMzIGlzcW5hbiAtOTk5OTk5OS45OSAtPiAwCitib29sMTIzNCBpc3FuYW4gOS45OTk5OTk5OUUrMTAwIC0+IDAKK2Jvb2wxMjM1IGlzcW5hbiAtOS45OTk5OTk5OUUrMTAwIC0+IDAKK2Jvb2wxMjM2IGlzcW5hbiA5Ljk5OTk5OTk5RSs5OTAgLT4gMAorYm9vbDEyMzcgaXNxbmFuIC05Ljk5OTk5OTk5RSs5OTAgLT4gMAorYm9vbDEyMzggaXNxbmFuIDkuOTk5OTk5OTlFKzk5MSAtPiAwCitib29sMTIzOSBpc3FuYW4gLTkuOTk5OTk5OTlFKzk5MSAtPiAwCitib29sMTI0MCBpc3FuYW4gOS45OTk5OTk5OUUrOTkyIC0+IDAKK2Jvb2wxMjQxIGlzcW5hbiAtOS45OTk5OTk5OUUrOTkyIC0+IDAKK2Jvb2wxMjQyIGlzcW5hbiA5Ljk5OTk5OTk5RSs5OTggLT4gMAorYm9vbDEyNDMgaXNxbmFuIC05Ljk5OTk5OTk5RSs5OTggLT4gMAorYm9vbDEyNDQgaXNxbmFuIDkuOTk5OTk5OTlFKzk5OSAtPiAwCitib29sMTI0NSBpc3FuYW4gLTkuOTk5OTk5OTlFKzk5OSAtPiAwCitib29sMTI0NiBpc3FuYW4gOS45OTk5OTk5OUUrMTAwMCAtPiAwCitib29sMTI0NyBpc3FuYW4gLTkuOTk5OTk5OTlFKzEwMDAgLT4gMAorYm9vbDEyNDggaXNxbmFuIDkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDEyNDkgaXNxbmFuIC05Ljk5OTk5OTk5RSsyMDAwIC0+IDAKK2Jvb2wxMjUwIGlzcW5hbiBJbmZpbml0eSAtPiAwCitib29sMTI1MSBpc3FuYW4gLUluZmluaXR5IC0+IDAKK2Jvb2wxMjUyIGlzcW5hbiBOYU4gLT4gMQorYm9vbDEyNTMgaXNxbmFuIC1OYU4gLT4gMQorYm9vbDEyNTQgaXNxbmFuIE5hTjEyMyAtPiAxCitib29sMTI1NSBpc3FuYW4gLU5hTjEyMyAtPiAxCitib29sMTI1NiBpc3FuYW4gc05hTiAtPiAwCitib29sMTI1NyBpc3FuYW4gLXNOYU4gLT4gMAorYm9vbDEyNTggaXNxbmFuIHNOYU4xMjMgLT4gMAorYm9vbDEyNTkgaXNxbmFuIC1zTmFOMTIzIC0+IDAKK2Jvb2wxMjYwIGlzc2lnbmVkIDBFLTIwMDAgLT4gMAorYm9vbDEyNjEgaXNzaWduZWQgLTBFLTIwMDAgLT4gMQorYm9vbDEyNjIgaXNzaWduZWQgMEUtMTAwOCAtPiAwCitib29sMTI2MyBpc3NpZ25lZCAtMEUtMTAwOCAtPiAxCitib29sMTI2NCBpc3NpZ25lZCAwRS0xMDA3IC0+IDAKK2Jvb2wxMjY1IGlzc2lnbmVkIC0wRS0xMDA3IC0+IDEKK2Jvb2wxMjY2IGlzc2lnbmVkIDBFLTEwMDYgLT4gMAorYm9vbDEyNjcgaXNzaWduZWQgLTBFLTEwMDYgLT4gMQorYm9vbDEyNjggaXNzaWduZWQgMEUtMTAwMCAtPiAwCitib29sMTI2OSBpc3NpZ25lZCAtMEUtMTAwMCAtPiAxCitib29sMTI3MCBpc3NpZ25lZCAwRS05OTkgLT4gMAorYm9vbDEyNzEgaXNzaWduZWQgLTBFLTk5OSAtPiAxCitib29sMTI3MiBpc3NpZ25lZCAwRS05OTggLT4gMAorYm9vbDEyNzMgaXNzaWduZWQgLTBFLTk5OCAtPiAxCitib29sMTI3NCBpc3NpZ25lZCAwRS0xMDAgLT4gMAorYm9vbDEyNzUgaXNzaWduZWQgLTBFLTEwMCAtPiAxCitib29sMTI3NiBpc3NpZ25lZCAwLjAwMDAwMCAtPiAwCitib29sMTI3NyBpc3NpZ25lZCAtMC4wMDAwMDAgLT4gMQorYm9vbDEyNzggaXNzaWduZWQgMC4wMDAgLT4gMAorYm9vbDEyNzkgaXNzaWduZWQgLTAuMDAwIC0+IDEKK2Jvb2wxMjgwIGlzc2lnbmVkIDAuMDAgLT4gMAorYm9vbDEyODEgaXNzaWduZWQgLTAuMDAgLT4gMQorYm9vbDEyODIgaXNzaWduZWQgMC4wIC0+IDAKK2Jvb2wxMjgzIGlzc2lnbmVkIC0wLjAgLT4gMQorYm9vbDEyODQgaXNzaWduZWQgMCAtPiAwCitib29sMTI4NSBpc3NpZ25lZCAtMCAtPiAxCitib29sMTI4NiBpc3NpZ25lZCAwRSsxIC0+IDAKK2Jvb2wxMjg3IGlzc2lnbmVkIC0wRSsxIC0+IDEKK2Jvb2wxMjg4IGlzc2lnbmVkIDBFKzIgLT4gMAorYm9vbDEyODkgaXNzaWduZWQgLTBFKzIgLT4gMQorYm9vbDEyOTAgaXNzaWduZWQgMEUrMyAtPiAwCitib29sMTI5MSBpc3NpZ25lZCAtMEUrMyAtPiAxCitib29sMTI5MiBpc3NpZ25lZCAwRSs2IC0+IDAKK2Jvb2wxMjkzIGlzc2lnbmVkIC0wRSs2IC0+IDEKK2Jvb2wxMjk0IGlzc2lnbmVkIDBFKzEwMCAtPiAwCitib29sMTI5NSBpc3NpZ25lZCAtMEUrMTAwIC0+IDEKK2Jvb2wxMjk2IGlzc2lnbmVkIDBFKzk5MCAtPiAwCitib29sMTI5NyBpc3NpZ25lZCAtMEUrOTkwIC0+IDEKK2Jvb2wxMjk4IGlzc2lnbmVkIDBFKzk5MSAtPiAwCitib29sMTI5OSBpc3NpZ25lZCAtMEUrOTkxIC0+IDEKK2Jvb2wxMzAwIGlzc2lnbmVkIDBFKzk5MiAtPiAwCitib29sMTMwMSBpc3NpZ25lZCAtMEUrOTkyIC0+IDEKK2Jvb2wxMzAyIGlzc2lnbmVkIDBFKzk5OCAtPiAwCitib29sMTMwMyBpc3NpZ25lZCAtMEUrOTk4IC0+IDEKK2Jvb2wxMzA0IGlzc2lnbmVkIDBFKzk5OSAtPiAwCitib29sMTMwNSBpc3NpZ25lZCAtMEUrOTk5IC0+IDEKK2Jvb2wxMzA2IGlzc2lnbmVkIDBFKzEwMDAgLT4gMAorYm9vbDEzMDcgaXNzaWduZWQgLTBFKzEwMDAgLT4gMQorYm9vbDEzMDggaXNzaWduZWQgMEUrMjAwMCAtPiAwCitib29sMTMwOSBpc3NpZ25lZCAtMEUrMjAwMCAtPiAxCitib29sMTMxMCBpc3NpZ25lZCAxRS0yMDAwIC0+IDAKK2Jvb2wxMzExIGlzc2lnbmVkIC0xRS0yMDAwIC0+IDEKK2Jvb2wxMzEyIGlzc2lnbmVkIDFFLTEwMDggLT4gMAorYm9vbDEzMTMgaXNzaWduZWQgLTFFLTEwMDggLT4gMQorYm9vbDEzMTQgaXNzaWduZWQgMUUtMTAwNyAtPiAwCitib29sMTMxNSBpc3NpZ25lZCAtMUUtMTAwNyAtPiAxCitib29sMTMxNiBpc3NpZ25lZCAxRS0xMDA2IC0+IDAKK2Jvb2wxMzE3IGlzc2lnbmVkIC0xRS0xMDA2IC0+IDEKK2Jvb2wxMzE4IGlzc2lnbmVkIDFFLTEwMDAgLT4gMAorYm9vbDEzMTkgaXNzaWduZWQgLTFFLTEwMDAgLT4gMQorYm9vbDEzMjAgaXNzaWduZWQgMUUtOTk5IC0+IDAKK2Jvb2wxMzIxIGlzc2lnbmVkIC0xRS05OTkgLT4gMQorYm9vbDEzMjIgaXNzaWduZWQgMUUtOTk4IC0+IDAKK2Jvb2wxMzIzIGlzc2lnbmVkIC0xRS05OTggLT4gMQorYm9vbDEzMjQgaXNzaWduZWQgMUUtMTAwIC0+IDAKK2Jvb2wxMzI1IGlzc2lnbmVkIC0xRS0xMDAgLT4gMQorYm9vbDEzMjYgaXNzaWduZWQgMC4wMDAwMDEgLT4gMAorYm9vbDEzMjcgaXNzaWduZWQgLTAuMDAwMDAxIC0+IDEKK2Jvb2wxMzI4IGlzc2lnbmVkIDAuMDAxIC0+IDAKK2Jvb2wxMzI5IGlzc2lnbmVkIC0wLjAwMSAtPiAxCitib29sMTMzMCBpc3NpZ25lZCAwLjAxIC0+IDAKK2Jvb2wxMzMxIGlzc2lnbmVkIC0wLjAxIC0+IDEKK2Jvb2wxMzMyIGlzc2lnbmVkIDAuMSAtPiAwCitib29sMTMzMyBpc3NpZ25lZCAtMC4xIC0+IDEKK2Jvb2wxMzM0IGlzc2lnbmVkIDEgLT4gMAorYm9vbDEzMzUgaXNzaWduZWQgLTEgLT4gMQorYm9vbDEzMzYgaXNzaWduZWQgMUUrMSAtPiAwCitib29sMTMzNyBpc3NpZ25lZCAtMUUrMSAtPiAxCitib29sMTMzOCBpc3NpZ25lZCAxRSsyIC0+IDAKK2Jvb2wxMzM5IGlzc2lnbmVkIC0xRSsyIC0+IDEKK2Jvb2wxMzQwIGlzc2lnbmVkIDFFKzMgLT4gMAorYm9vbDEzNDEgaXNzaWduZWQgLTFFKzMgLT4gMQorYm9vbDEzNDIgaXNzaWduZWQgMUUrNiAtPiAwCitib29sMTM0MyBpc3NpZ25lZCAtMUUrNiAtPiAxCitib29sMTM0NCBpc3NpZ25lZCAxRSsxMDAgLT4gMAorYm9vbDEzNDUgaXNzaWduZWQgLTFFKzEwMCAtPiAxCitib29sMTM0NiBpc3NpZ25lZCAxRSs5OTAgLT4gMAorYm9vbDEzNDcgaXNzaWduZWQgLTFFKzk5MCAtPiAxCitib29sMTM0OCBpc3NpZ25lZCAxRSs5OTEgLT4gMAorYm9vbDEzNDkgaXNzaWduZWQgLTFFKzk5MSAtPiAxCitib29sMTM1MCBpc3NpZ25lZCAxRSs5OTIgLT4gMAorYm9vbDEzNTEgaXNzaWduZWQgLTFFKzk5MiAtPiAxCitib29sMTM1MiBpc3NpZ25lZCAxRSs5OTggLT4gMAorYm9vbDEzNTMgaXNzaWduZWQgLTFFKzk5OCAtPiAxCitib29sMTM1NCBpc3NpZ25lZCAxRSs5OTkgLT4gMAorYm9vbDEzNTUgaXNzaWduZWQgLTFFKzk5OSAtPiAxCitib29sMTM1NiBpc3NpZ25lZCAxRSsxMDAwIC0+IDAKK2Jvb2wxMzU3IGlzc2lnbmVkIC0xRSsxMDAwIC0+IDEKK2Jvb2wxMzU4IGlzc2lnbmVkIDFFKzIwMDAgLT4gMAorYm9vbDEzNTkgaXNzaWduZWQgLTFFKzIwMDAgLT4gMQorYm9vbDEzNjAgaXNzaWduZWQgOUUtMjAwMCAtPiAwCitib29sMTM2MSBpc3NpZ25lZCAtOUUtMjAwMCAtPiAxCitib29sMTM2MiBpc3NpZ25lZCA5RS0xMDA4IC0+IDAKK2Jvb2wxMzYzIGlzc2lnbmVkIC05RS0xMDA4IC0+IDEKK2Jvb2wxMzY0IGlzc2lnbmVkIDlFLTEwMDcgLT4gMAorYm9vbDEzNjUgaXNzaWduZWQgLTlFLTEwMDcgLT4gMQorYm9vbDEzNjYgaXNzaWduZWQgOUUtMTAwNiAtPiAwCitib29sMTM2NyBpc3NpZ25lZCAtOUUtMTAwNiAtPiAxCitib29sMTM2OCBpc3NpZ25lZCA5RS0xMDAwIC0+IDAKK2Jvb2wxMzY5IGlzc2lnbmVkIC05RS0xMDAwIC0+IDEKK2Jvb2wxMzcwIGlzc2lnbmVkIDlFLTk5OSAtPiAwCitib29sMTM3MSBpc3NpZ25lZCAtOUUtOTk5IC0+IDEKK2Jvb2wxMzcyIGlzc2lnbmVkIDlFLTk5OCAtPiAwCitib29sMTM3MyBpc3NpZ25lZCAtOUUtOTk4IC0+IDEKK2Jvb2wxMzc0IGlzc2lnbmVkIDlFLTEwMCAtPiAwCitib29sMTM3NSBpc3NpZ25lZCAtOUUtMTAwIC0+IDEKK2Jvb2wxMzc2IGlzc2lnbmVkIDAuMDAwMDA5IC0+IDAKK2Jvb2wxMzc3IGlzc2lnbmVkIC0wLjAwMDAwOSAtPiAxCitib29sMTM3OCBpc3NpZ25lZCAwLjAwOSAtPiAwCitib29sMTM3OSBpc3NpZ25lZCAtMC4wMDkgLT4gMQorYm9vbDEzODAgaXNzaWduZWQgMC4wOSAtPiAwCitib29sMTM4MSBpc3NpZ25lZCAtMC4wOSAtPiAxCitib29sMTM4MiBpc3NpZ25lZCAwLjkgLT4gMAorYm9vbDEzODMgaXNzaWduZWQgLTAuOSAtPiAxCitib29sMTM4NCBpc3NpZ25lZCA5IC0+IDAKK2Jvb2wxMzg1IGlzc2lnbmVkIC05IC0+IDEKK2Jvb2wxMzg2IGlzc2lnbmVkIDlFKzEgLT4gMAorYm9vbDEzODcgaXNzaWduZWQgLTlFKzEgLT4gMQorYm9vbDEzODggaXNzaWduZWQgOUUrMiAtPiAwCitib29sMTM4OSBpc3NpZ25lZCAtOUUrMiAtPiAxCitib29sMTM5MCBpc3NpZ25lZCA5RSszIC0+IDAKK2Jvb2wxMzkxIGlzc2lnbmVkIC05RSszIC0+IDEKK2Jvb2wxMzkyIGlzc2lnbmVkIDlFKzYgLT4gMAorYm9vbDEzOTMgaXNzaWduZWQgLTlFKzYgLT4gMQorYm9vbDEzOTQgaXNzaWduZWQgOUUrMTAwIC0+IDAKK2Jvb2wxMzk1IGlzc2lnbmVkIC05RSsxMDAgLT4gMQorYm9vbDEzOTYgaXNzaWduZWQgOUUrOTkwIC0+IDAKK2Jvb2wxMzk3IGlzc2lnbmVkIC05RSs5OTAgLT4gMQorYm9vbDEzOTggaXNzaWduZWQgOUUrOTkxIC0+IDAKK2Jvb2wxMzk5IGlzc2lnbmVkIC05RSs5OTEgLT4gMQorYm9vbDE0MDAgaXNzaWduZWQgOUUrOTkyIC0+IDAKK2Jvb2wxNDAxIGlzc2lnbmVkIC05RSs5OTIgLT4gMQorYm9vbDE0MDIgaXNzaWduZWQgOUUrOTk4IC0+IDAKK2Jvb2wxNDAzIGlzc2lnbmVkIC05RSs5OTggLT4gMQorYm9vbDE0MDQgaXNzaWduZWQgOUUrOTk5IC0+IDAKK2Jvb2wxNDA1IGlzc2lnbmVkIC05RSs5OTkgLT4gMQorYm9vbDE0MDYgaXNzaWduZWQgOUUrMTAwMCAtPiAwCitib29sMTQwNyBpc3NpZ25lZCAtOUUrMTAwMCAtPiAxCitib29sMTQwOCBpc3NpZ25lZCA5RSsyMDAwIC0+IDAKK2Jvb2wxNDA5IGlzc2lnbmVkIC05RSsyMDAwIC0+IDEKK2Jvb2wxNDEwIGlzc2lnbmVkIDkuOTk5OTk5OTlFLTIwMDAgLT4gMAorYm9vbDE0MTEgaXNzaWduZWQgLTkuOTk5OTk5OTlFLTIwMDAgLT4gMQorYm9vbDE0MTIgaXNzaWduZWQgOS45OTk5OTk5OUUtMTAwOCAtPiAwCitib29sMTQxMyBpc3NpZ25lZCAtOS45OTk5OTk5OUUtMTAwOCAtPiAxCitib29sMTQxNCBpc3NpZ25lZCA5Ljk5OTk5OTk5RS0xMDA3IC0+IDAKK2Jvb2wxNDE1IGlzc2lnbmVkIC05Ljk5OTk5OTk5RS0xMDA3IC0+IDEKK2Jvb2wxNDE2IGlzc2lnbmVkIDkuOTk5OTk5OTlFLTEwMDYgLT4gMAorYm9vbDE0MTcgaXNzaWduZWQgLTkuOTk5OTk5OTlFLTEwMDYgLT4gMQorYm9vbDE0MTggaXNzaWduZWQgOS45OTk5OTk5OUUtMTAwMCAtPiAwCitib29sMTQxOSBpc3NpZ25lZCAtOS45OTk5OTk5OUUtMTAwMCAtPiAxCitib29sMTQyMCBpc3NpZ25lZCA5Ljk5OTk5OTk5RS05OTkgLT4gMAorYm9vbDE0MjEgaXNzaWduZWQgLTkuOTk5OTk5OTlFLTk5OSAtPiAxCitib29sMTQyMiBpc3NpZ25lZCA5Ljk5OTk5OTk5RS05OTggLT4gMAorYm9vbDE0MjMgaXNzaWduZWQgLTkuOTk5OTk5OTlFLTk5OCAtPiAxCitib29sMTQyNCBpc3NpZ25lZCA5Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDE0MjUgaXNzaWduZWQgLTkuOTk5OTk5OTlFLTEwMCAtPiAxCitib29sMTQyNiBpc3NpZ25lZCAwLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wxNDI3IGlzc2lnbmVkIC0wLjAwMDAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wxNDI4IGlzc2lnbmVkIDAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDE0MjkgaXNzaWduZWQgLTAuMDA5OTk5OTk5OTkgLT4gMQorYm9vbDE0MzAgaXNzaWduZWQgMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wxNDMxIGlzc2lnbmVkIC0wLjA5OTk5OTk5OTkgLT4gMQorYm9vbDE0MzIgaXNzaWduZWQgMC45OTk5OTk5OTkgLT4gMAorYm9vbDE0MzMgaXNzaWduZWQgLTAuOTk5OTk5OTk5IC0+IDEKK2Jvb2wxNDM0IGlzc2lnbmVkIDkuOTk5OTk5OTkgLT4gMAorYm9vbDE0MzUgaXNzaWduZWQgLTkuOTk5OTk5OTkgLT4gMQorYm9vbDE0MzYgaXNzaWduZWQgOTkuOTk5OTk5OSAtPiAwCitib29sMTQzNyBpc3NpZ25lZCAtOTkuOTk5OTk5OSAtPiAxCitib29sMTQzOCBpc3NpZ25lZCA5OTkuOTk5OTk5IC0+IDAKK2Jvb2wxNDM5IGlzc2lnbmVkIC05OTkuOTk5OTk5IC0+IDEKK2Jvb2wxNDQwIGlzc2lnbmVkIDk5OTkuOTk5OTkgLT4gMAorYm9vbDE0NDEgaXNzaWduZWQgLTk5OTkuOTk5OTkgLT4gMQorYm9vbDE0NDIgaXNzaWduZWQgOTk5OTk5OS45OSAtPiAwCitib29sMTQ0MyBpc3NpZ25lZCAtOTk5OTk5OS45OSAtPiAxCitib29sMTQ0NCBpc3NpZ25lZCA5Ljk5OTk5OTk5RSsxMDAgLT4gMAorYm9vbDE0NDUgaXNzaWduZWQgLTkuOTk5OTk5OTlFKzEwMCAtPiAxCitib29sMTQ0NiBpc3NpZ25lZCA5Ljk5OTk5OTk5RSs5OTAgLT4gMAorYm9vbDE0NDcgaXNzaWduZWQgLTkuOTk5OTk5OTlFKzk5MCAtPiAxCitib29sMTQ0OCBpc3NpZ25lZCA5Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDE0NDkgaXNzaWduZWQgLTkuOTk5OTk5OTlFKzk5MSAtPiAxCitib29sMTQ1MCBpc3NpZ25lZCA5Ljk5OTk5OTk5RSs5OTIgLT4gMAorYm9vbDE0NTEgaXNzaWduZWQgLTkuOTk5OTk5OTlFKzk5MiAtPiAxCitib29sMTQ1MiBpc3NpZ25lZCA5Ljk5OTk5OTk5RSs5OTggLT4gMAorYm9vbDE0NTMgaXNzaWduZWQgLTkuOTk5OTk5OTlFKzk5OCAtPiAxCitib29sMTQ1NCBpc3NpZ25lZCA5Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDE0NTUgaXNzaWduZWQgLTkuOTk5OTk5OTlFKzk5OSAtPiAxCitib29sMTQ1NiBpc3NpZ25lZCA5Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wxNDU3IGlzc2lnbmVkIC05Ljk5OTk5OTk5RSsxMDAwIC0+IDEKK2Jvb2wxNDU4IGlzc2lnbmVkIDkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDE0NTkgaXNzaWduZWQgLTkuOTk5OTk5OTlFKzIwMDAgLT4gMQorYm9vbDE0NjAgaXNzaWduZWQgSW5maW5pdHkgLT4gMAorYm9vbDE0NjEgaXNzaWduZWQgLUluZmluaXR5IC0+IDEKK2Jvb2wxNDYyIGlzc2lnbmVkIE5hTiAtPiAwCitib29sMTQ2MyBpc3NpZ25lZCAtTmFOIC0+IDEKK2Jvb2wxNDY0IGlzc2lnbmVkIE5hTjEyMyAtPiAwCitib29sMTQ2NSBpc3NpZ25lZCAtTmFOMTIzIC0+IDEKK2Jvb2wxNDY2IGlzc2lnbmVkIHNOYU4gLT4gMAorYm9vbDE0NjcgaXNzaWduZWQgLXNOYU4gLT4gMQorYm9vbDE0NjggaXNzaWduZWQgc05hTjEyMyAtPiAwCitib29sMTQ2OSBpc3NpZ25lZCAtc05hTjEyMyAtPiAxCitib29sMTQ3MCBpc3NuYW4gMEUtMjAwMCAtPiAwCitib29sMTQ3MSBpc3NuYW4gLTBFLTIwMDAgLT4gMAorYm9vbDE0NzIgaXNzbmFuIDBFLTEwMDggLT4gMAorYm9vbDE0NzMgaXNzbmFuIC0wRS0xMDA4IC0+IDAKK2Jvb2wxNDc0IGlzc25hbiAwRS0xMDA3IC0+IDAKK2Jvb2wxNDc1IGlzc25hbiAtMEUtMTAwNyAtPiAwCitib29sMTQ3NiBpc3NuYW4gMEUtMTAwNiAtPiAwCitib29sMTQ3NyBpc3NuYW4gLTBFLTEwMDYgLT4gMAorYm9vbDE0NzggaXNzbmFuIDBFLTEwMDAgLT4gMAorYm9vbDE0NzkgaXNzbmFuIC0wRS0xMDAwIC0+IDAKK2Jvb2wxNDgwIGlzc25hbiAwRS05OTkgLT4gMAorYm9vbDE0ODEgaXNzbmFuIC0wRS05OTkgLT4gMAorYm9vbDE0ODIgaXNzbmFuIDBFLTk5OCAtPiAwCitib29sMTQ4MyBpc3NuYW4gLTBFLTk5OCAtPiAwCitib29sMTQ4NCBpc3NuYW4gMEUtMTAwIC0+IDAKK2Jvb2wxNDg1IGlzc25hbiAtMEUtMTAwIC0+IDAKK2Jvb2wxNDg2IGlzc25hbiAwLjAwMDAwMCAtPiAwCitib29sMTQ4NyBpc3NuYW4gLTAuMDAwMDAwIC0+IDAKK2Jvb2wxNDg4IGlzc25hbiAwLjAwMCAtPiAwCitib29sMTQ4OSBpc3NuYW4gLTAuMDAwIC0+IDAKK2Jvb2wxNDkwIGlzc25hbiAwLjAwIC0+IDAKK2Jvb2wxNDkxIGlzc25hbiAtMC4wMCAtPiAwCitib29sMTQ5MiBpc3NuYW4gMC4wIC0+IDAKK2Jvb2wxNDkzIGlzc25hbiAtMC4wIC0+IDAKK2Jvb2wxNDk0IGlzc25hbiAwIC0+IDAKK2Jvb2wxNDk1IGlzc25hbiAtMCAtPiAwCitib29sMTQ5NiBpc3NuYW4gMEUrMSAtPiAwCitib29sMTQ5NyBpc3NuYW4gLTBFKzEgLT4gMAorYm9vbDE0OTggaXNzbmFuIDBFKzIgLT4gMAorYm9vbDE0OTkgaXNzbmFuIC0wRSsyIC0+IDAKK2Jvb2wxNTAwIGlzc25hbiAwRSszIC0+IDAKK2Jvb2wxNTAxIGlzc25hbiAtMEUrMyAtPiAwCitib29sMTUwMiBpc3NuYW4gMEUrNiAtPiAwCitib29sMTUwMyBpc3NuYW4gLTBFKzYgLT4gMAorYm9vbDE1MDQgaXNzbmFuIDBFKzEwMCAtPiAwCitib29sMTUwNSBpc3NuYW4gLTBFKzEwMCAtPiAwCitib29sMTUwNiBpc3NuYW4gMEUrOTkwIC0+IDAKK2Jvb2wxNTA3IGlzc25hbiAtMEUrOTkwIC0+IDAKK2Jvb2wxNTA4IGlzc25hbiAwRSs5OTEgLT4gMAorYm9vbDE1MDkgaXNzbmFuIC0wRSs5OTEgLT4gMAorYm9vbDE1MTAgaXNzbmFuIDBFKzk5MiAtPiAwCitib29sMTUxMSBpc3NuYW4gLTBFKzk5MiAtPiAwCitib29sMTUxMiBpc3NuYW4gMEUrOTk4IC0+IDAKK2Jvb2wxNTEzIGlzc25hbiAtMEUrOTk4IC0+IDAKK2Jvb2wxNTE0IGlzc25hbiAwRSs5OTkgLT4gMAorYm9vbDE1MTUgaXNzbmFuIC0wRSs5OTkgLT4gMAorYm9vbDE1MTYgaXNzbmFuIDBFKzEwMDAgLT4gMAorYm9vbDE1MTcgaXNzbmFuIC0wRSsxMDAwIC0+IDAKK2Jvb2wxNTE4IGlzc25hbiAwRSsyMDAwIC0+IDAKK2Jvb2wxNTE5IGlzc25hbiAtMEUrMjAwMCAtPiAwCitib29sMTUyMCBpc3NuYW4gMUUtMjAwMCAtPiAwCitib29sMTUyMSBpc3NuYW4gLTFFLTIwMDAgLT4gMAorYm9vbDE1MjIgaXNzbmFuIDFFLTEwMDggLT4gMAorYm9vbDE1MjMgaXNzbmFuIC0xRS0xMDA4IC0+IDAKK2Jvb2wxNTI0IGlzc25hbiAxRS0xMDA3IC0+IDAKK2Jvb2wxNTI1IGlzc25hbiAtMUUtMTAwNyAtPiAwCitib29sMTUyNiBpc3NuYW4gMUUtMTAwNiAtPiAwCitib29sMTUyNyBpc3NuYW4gLTFFLTEwMDYgLT4gMAorYm9vbDE1MjggaXNzbmFuIDFFLTEwMDAgLT4gMAorYm9vbDE1MjkgaXNzbmFuIC0xRS0xMDAwIC0+IDAKK2Jvb2wxNTMwIGlzc25hbiAxRS05OTkgLT4gMAorYm9vbDE1MzEgaXNzbmFuIC0xRS05OTkgLT4gMAorYm9vbDE1MzIgaXNzbmFuIDFFLTk5OCAtPiAwCitib29sMTUzMyBpc3NuYW4gLTFFLTk5OCAtPiAwCitib29sMTUzNCBpc3NuYW4gMUUtMTAwIC0+IDAKK2Jvb2wxNTM1IGlzc25hbiAtMUUtMTAwIC0+IDAKK2Jvb2wxNTM2IGlzc25hbiAwLjAwMDAwMSAtPiAwCitib29sMTUzNyBpc3NuYW4gLTAuMDAwMDAxIC0+IDAKK2Jvb2wxNTM4IGlzc25hbiAwLjAwMSAtPiAwCitib29sMTUzOSBpc3NuYW4gLTAuMDAxIC0+IDAKK2Jvb2wxNTQwIGlzc25hbiAwLjAxIC0+IDAKK2Jvb2wxNTQxIGlzc25hbiAtMC4wMSAtPiAwCitib29sMTU0MiBpc3NuYW4gMC4xIC0+IDAKK2Jvb2wxNTQzIGlzc25hbiAtMC4xIC0+IDAKK2Jvb2wxNTQ0IGlzc25hbiAxIC0+IDAKK2Jvb2wxNTQ1IGlzc25hbiAtMSAtPiAwCitib29sMTU0NiBpc3NuYW4gMUUrMSAtPiAwCitib29sMTU0NyBpc3NuYW4gLTFFKzEgLT4gMAorYm9vbDE1NDggaXNzbmFuIDFFKzIgLT4gMAorYm9vbDE1NDkgaXNzbmFuIC0xRSsyIC0+IDAKK2Jvb2wxNTUwIGlzc25hbiAxRSszIC0+IDAKK2Jvb2wxNTUxIGlzc25hbiAtMUUrMyAtPiAwCitib29sMTU1MiBpc3NuYW4gMUUrNiAtPiAwCitib29sMTU1MyBpc3NuYW4gLTFFKzYgLT4gMAorYm9vbDE1NTQgaXNzbmFuIDFFKzEwMCAtPiAwCitib29sMTU1NSBpc3NuYW4gLTFFKzEwMCAtPiAwCitib29sMTU1NiBpc3NuYW4gMUUrOTkwIC0+IDAKK2Jvb2wxNTU3IGlzc25hbiAtMUUrOTkwIC0+IDAKK2Jvb2wxNTU4IGlzc25hbiAxRSs5OTEgLT4gMAorYm9vbDE1NTkgaXNzbmFuIC0xRSs5OTEgLT4gMAorYm9vbDE1NjAgaXNzbmFuIDFFKzk5MiAtPiAwCitib29sMTU2MSBpc3NuYW4gLTFFKzk5MiAtPiAwCitib29sMTU2MiBpc3NuYW4gMUUrOTk4IC0+IDAKK2Jvb2wxNTYzIGlzc25hbiAtMUUrOTk4IC0+IDAKK2Jvb2wxNTY0IGlzc25hbiAxRSs5OTkgLT4gMAorYm9vbDE1NjUgaXNzbmFuIC0xRSs5OTkgLT4gMAorYm9vbDE1NjYgaXNzbmFuIDFFKzEwMDAgLT4gMAorYm9vbDE1NjcgaXNzbmFuIC0xRSsxMDAwIC0+IDAKK2Jvb2wxNTY4IGlzc25hbiAxRSsyMDAwIC0+IDAKK2Jvb2wxNTY5IGlzc25hbiAtMUUrMjAwMCAtPiAwCitib29sMTU3MCBpc3NuYW4gOUUtMjAwMCAtPiAwCitib29sMTU3MSBpc3NuYW4gLTlFLTIwMDAgLT4gMAorYm9vbDE1NzIgaXNzbmFuIDlFLTEwMDggLT4gMAorYm9vbDE1NzMgaXNzbmFuIC05RS0xMDA4IC0+IDAKK2Jvb2wxNTc0IGlzc25hbiA5RS0xMDA3IC0+IDAKK2Jvb2wxNTc1IGlzc25hbiAtOUUtMTAwNyAtPiAwCitib29sMTU3NiBpc3NuYW4gOUUtMTAwNiAtPiAwCitib29sMTU3NyBpc3NuYW4gLTlFLTEwMDYgLT4gMAorYm9vbDE1NzggaXNzbmFuIDlFLTEwMDAgLT4gMAorYm9vbDE1NzkgaXNzbmFuIC05RS0xMDAwIC0+IDAKK2Jvb2wxNTgwIGlzc25hbiA5RS05OTkgLT4gMAorYm9vbDE1ODEgaXNzbmFuIC05RS05OTkgLT4gMAorYm9vbDE1ODIgaXNzbmFuIDlFLTk5OCAtPiAwCitib29sMTU4MyBpc3NuYW4gLTlFLTk5OCAtPiAwCitib29sMTU4NCBpc3NuYW4gOUUtMTAwIC0+IDAKK2Jvb2wxNTg1IGlzc25hbiAtOUUtMTAwIC0+IDAKK2Jvb2wxNTg2IGlzc25hbiAwLjAwMDAwOSAtPiAwCitib29sMTU4NyBpc3NuYW4gLTAuMDAwMDA5IC0+IDAKK2Jvb2wxNTg4IGlzc25hbiAwLjAwOSAtPiAwCitib29sMTU4OSBpc3NuYW4gLTAuMDA5IC0+IDAKK2Jvb2wxNTkwIGlzc25hbiAwLjA5IC0+IDAKK2Jvb2wxNTkxIGlzc25hbiAtMC4wOSAtPiAwCitib29sMTU5MiBpc3NuYW4gMC45IC0+IDAKK2Jvb2wxNTkzIGlzc25hbiAtMC45IC0+IDAKK2Jvb2wxNTk0IGlzc25hbiA5IC0+IDAKK2Jvb2wxNTk1IGlzc25hbiAtOSAtPiAwCitib29sMTU5NiBpc3NuYW4gOUUrMSAtPiAwCitib29sMTU5NyBpc3NuYW4gLTlFKzEgLT4gMAorYm9vbDE1OTggaXNzbmFuIDlFKzIgLT4gMAorYm9vbDE1OTkgaXNzbmFuIC05RSsyIC0+IDAKK2Jvb2wxNjAwIGlzc25hbiA5RSszIC0+IDAKK2Jvb2wxNjAxIGlzc25hbiAtOUUrMyAtPiAwCitib29sMTYwMiBpc3NuYW4gOUUrNiAtPiAwCitib29sMTYwMyBpc3NuYW4gLTlFKzYgLT4gMAorYm9vbDE2MDQgaXNzbmFuIDlFKzEwMCAtPiAwCitib29sMTYwNSBpc3NuYW4gLTlFKzEwMCAtPiAwCitib29sMTYwNiBpc3NuYW4gOUUrOTkwIC0+IDAKK2Jvb2wxNjA3IGlzc25hbiAtOUUrOTkwIC0+IDAKK2Jvb2wxNjA4IGlzc25hbiA5RSs5OTEgLT4gMAorYm9vbDE2MDkgaXNzbmFuIC05RSs5OTEgLT4gMAorYm9vbDE2MTAgaXNzbmFuIDlFKzk5MiAtPiAwCitib29sMTYxMSBpc3NuYW4gLTlFKzk5MiAtPiAwCitib29sMTYxMiBpc3NuYW4gOUUrOTk4IC0+IDAKK2Jvb2wxNjEzIGlzc25hbiAtOUUrOTk4IC0+IDAKK2Jvb2wxNjE0IGlzc25hbiA5RSs5OTkgLT4gMAorYm9vbDE2MTUgaXNzbmFuIC05RSs5OTkgLT4gMAorYm9vbDE2MTYgaXNzbmFuIDlFKzEwMDAgLT4gMAorYm9vbDE2MTcgaXNzbmFuIC05RSsxMDAwIC0+IDAKK2Jvb2wxNjE4IGlzc25hbiA5RSsyMDAwIC0+IDAKK2Jvb2wxNjE5IGlzc25hbiAtOUUrMjAwMCAtPiAwCitib29sMTYyMCBpc3NuYW4gOS45OTk5OTk5OUUtMjAwMCAtPiAwCitib29sMTYyMSBpc3NuYW4gLTkuOTk5OTk5OTlFLTIwMDAgLT4gMAorYm9vbDE2MjIgaXNzbmFuIDkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDE2MjMgaXNzbmFuIC05Ljk5OTk5OTk5RS0xMDA4IC0+IDAKK2Jvb2wxNjI0IGlzc25hbiA5Ljk5OTk5OTk5RS0xMDA3IC0+IDAKK2Jvb2wxNjI1IGlzc25hbiAtOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMTYyNiBpc3NuYW4gOS45OTk5OTk5OUUtMTAwNiAtPiAwCitib29sMTYyNyBpc3NuYW4gLTkuOTk5OTk5OTlFLTEwMDYgLT4gMAorYm9vbDE2MjggaXNzbmFuIDkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDE2MjkgaXNzbmFuIC05Ljk5OTk5OTk5RS0xMDAwIC0+IDAKK2Jvb2wxNjMwIGlzc25hbiA5Ljk5OTk5OTk5RS05OTkgLT4gMAorYm9vbDE2MzEgaXNzbmFuIC05Ljk5OTk5OTk5RS05OTkgLT4gMAorYm9vbDE2MzIgaXNzbmFuIDkuOTk5OTk5OTlFLTk5OCAtPiAwCitib29sMTYzMyBpc3NuYW4gLTkuOTk5OTk5OTlFLTk5OCAtPiAwCitib29sMTYzNCBpc3NuYW4gOS45OTk5OTk5OUUtMTAwIC0+IDAKK2Jvb2wxNjM1IGlzc25hbiAtOS45OTk5OTk5OUUtMTAwIC0+IDAKK2Jvb2wxNjM2IGlzc25hbiAwLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wxNjM3IGlzc25hbiAtMC4wMDAwMDk5OTk5OTk5OSAtPiAwCitib29sMTYzOCBpc3NuYW4gMC4wMDk5OTk5OTk5OSAtPiAwCitib29sMTYzOSBpc3NuYW4gLTAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDE2NDAgaXNzbmFuIDAuMDk5OTk5OTk5OSAtPiAwCitib29sMTY0MSBpc3NuYW4gLTAuMDk5OTk5OTk5OSAtPiAwCitib29sMTY0MiBpc3NuYW4gMC45OTk5OTk5OTkgLT4gMAorYm9vbDE2NDMgaXNzbmFuIC0wLjk5OTk5OTk5OSAtPiAwCitib29sMTY0NCBpc3NuYW4gOS45OTk5OTk5OSAtPiAwCitib29sMTY0NSBpc3NuYW4gLTkuOTk5OTk5OTkgLT4gMAorYm9vbDE2NDYgaXNzbmFuIDk5Ljk5OTk5OTkgLT4gMAorYm9vbDE2NDcgaXNzbmFuIC05OS45OTk5OTk5IC0+IDAKK2Jvb2wxNjQ4IGlzc25hbiA5OTkuOTk5OTk5IC0+IDAKK2Jvb2wxNjQ5IGlzc25hbiAtOTk5Ljk5OTk5OSAtPiAwCitib29sMTY1MCBpc3NuYW4gOTk5OS45OTk5OSAtPiAwCitib29sMTY1MSBpc3NuYW4gLTk5OTkuOTk5OTkgLT4gMAorYm9vbDE2NTIgaXNzbmFuIDk5OTk5OTkuOTkgLT4gMAorYm9vbDE2NTMgaXNzbmFuIC05OTk5OTk5Ljk5IC0+IDAKK2Jvb2wxNjU0IGlzc25hbiA5Ljk5OTk5OTk5RSsxMDAgLT4gMAorYm9vbDE2NTUgaXNzbmFuIC05Ljk5OTk5OTk5RSsxMDAgLT4gMAorYm9vbDE2NTYgaXNzbmFuIDkuOTk5OTk5OTlFKzk5MCAtPiAwCitib29sMTY1NyBpc3NuYW4gLTkuOTk5OTk5OTlFKzk5MCAtPiAwCitib29sMTY1OCBpc3NuYW4gOS45OTk5OTk5OUUrOTkxIC0+IDAKK2Jvb2wxNjU5IGlzc25hbiAtOS45OTk5OTk5OUUrOTkxIC0+IDAKK2Jvb2wxNjYwIGlzc25hbiA5Ljk5OTk5OTk5RSs5OTIgLT4gMAorYm9vbDE2NjEgaXNzbmFuIC05Ljk5OTk5OTk5RSs5OTIgLT4gMAorYm9vbDE2NjIgaXNzbmFuIDkuOTk5OTk5OTlFKzk5OCAtPiAwCitib29sMTY2MyBpc3NuYW4gLTkuOTk5OTk5OTlFKzk5OCAtPiAwCitib29sMTY2NCBpc3NuYW4gOS45OTk5OTk5OUUrOTk5IC0+IDAKK2Jvb2wxNjY1IGlzc25hbiAtOS45OTk5OTk5OUUrOTk5IC0+IDAKK2Jvb2wxNjY2IGlzc25hbiA5Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wxNjY3IGlzc25hbiAtOS45OTk5OTk5OUUrMTAwMCAtPiAwCitib29sMTY2OCBpc3NuYW4gOS45OTk5OTk5OUUrMjAwMCAtPiAwCitib29sMTY2OSBpc3NuYW4gLTkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDE2NzAgaXNzbmFuIEluZmluaXR5IC0+IDAKK2Jvb2wxNjcxIGlzc25hbiAtSW5maW5pdHkgLT4gMAorYm9vbDE2NzIgaXNzbmFuIE5hTiAtPiAwCitib29sMTY3MyBpc3NuYW4gLU5hTiAtPiAwCitib29sMTY3NCBpc3NuYW4gTmFOMTIzIC0+IDAKK2Jvb2wxNjc1IGlzc25hbiAtTmFOMTIzIC0+IDAKK2Jvb2wxNjc2IGlzc25hbiBzTmFOIC0+IDEKK2Jvb2wxNjc3IGlzc25hbiAtc05hTiAtPiAxCitib29sMTY3OCBpc3NuYW4gc05hTjEyMyAtPiAxCitib29sMTY3OSBpc3NuYW4gLXNOYU4xMjMgLT4gMQorYm9vbDE2ODAgaXNzdWJub3JtYWwgMEUtMjAwMCAtPiAwCitib29sMTY4MSBpc3N1Ym5vcm1hbCAtMEUtMjAwMCAtPiAwCitib29sMTY4MiBpc3N1Ym5vcm1hbCAwRS0xMDA4IC0+IDAKK2Jvb2wxNjgzIGlzc3Vibm9ybWFsIC0wRS0xMDA4IC0+IDAKK2Jvb2wxNjg0IGlzc3Vibm9ybWFsIDBFLTEwMDcgLT4gMAorYm9vbDE2ODUgaXNzdWJub3JtYWwgLTBFLTEwMDcgLT4gMAorYm9vbDE2ODYgaXNzdWJub3JtYWwgMEUtMTAwNiAtPiAwCitib29sMTY4NyBpc3N1Ym5vcm1hbCAtMEUtMTAwNiAtPiAwCitib29sMTY4OCBpc3N1Ym5vcm1hbCAwRS0xMDAwIC0+IDAKK2Jvb2wxNjg5IGlzc3Vibm9ybWFsIC0wRS0xMDAwIC0+IDAKK2Jvb2wxNjkwIGlzc3Vibm9ybWFsIDBFLTk5OSAtPiAwCitib29sMTY5MSBpc3N1Ym5vcm1hbCAtMEUtOTk5IC0+IDAKK2Jvb2wxNjkyIGlzc3Vibm9ybWFsIDBFLTk5OCAtPiAwCitib29sMTY5MyBpc3N1Ym5vcm1hbCAtMEUtOTk4IC0+IDAKK2Jvb2wxNjk0IGlzc3Vibm9ybWFsIDBFLTEwMCAtPiAwCitib29sMTY5NSBpc3N1Ym5vcm1hbCAtMEUtMTAwIC0+IDAKK2Jvb2wxNjk2IGlzc3Vibm9ybWFsIDAuMDAwMDAwIC0+IDAKK2Jvb2wxNjk3IGlzc3Vibm9ybWFsIC0wLjAwMDAwMCAtPiAwCitib29sMTY5OCBpc3N1Ym5vcm1hbCAwLjAwMCAtPiAwCitib29sMTY5OSBpc3N1Ym5vcm1hbCAtMC4wMDAgLT4gMAorYm9vbDE3MDAgaXNzdWJub3JtYWwgMC4wMCAtPiAwCitib29sMTcwMSBpc3N1Ym5vcm1hbCAtMC4wMCAtPiAwCitib29sMTcwMiBpc3N1Ym5vcm1hbCAwLjAgLT4gMAorYm9vbDE3MDMgaXNzdWJub3JtYWwgLTAuMCAtPiAwCitib29sMTcwNCBpc3N1Ym5vcm1hbCAwIC0+IDAKK2Jvb2wxNzA1IGlzc3Vibm9ybWFsIC0wIC0+IDAKK2Jvb2wxNzA2IGlzc3Vibm9ybWFsIDBFKzEgLT4gMAorYm9vbDE3MDcgaXNzdWJub3JtYWwgLTBFKzEgLT4gMAorYm9vbDE3MDggaXNzdWJub3JtYWwgMEUrMiAtPiAwCitib29sMTcwOSBpc3N1Ym5vcm1hbCAtMEUrMiAtPiAwCitib29sMTcxMCBpc3N1Ym5vcm1hbCAwRSszIC0+IDAKK2Jvb2wxNzExIGlzc3Vibm9ybWFsIC0wRSszIC0+IDAKK2Jvb2wxNzEyIGlzc3Vibm9ybWFsIDBFKzYgLT4gMAorYm9vbDE3MTMgaXNzdWJub3JtYWwgLTBFKzYgLT4gMAorYm9vbDE3MTQgaXNzdWJub3JtYWwgMEUrMTAwIC0+IDAKK2Jvb2wxNzE1IGlzc3Vibm9ybWFsIC0wRSsxMDAgLT4gMAorYm9vbDE3MTYgaXNzdWJub3JtYWwgMEUrOTkwIC0+IDAKK2Jvb2wxNzE3IGlzc3Vibm9ybWFsIC0wRSs5OTAgLT4gMAorYm9vbDE3MTggaXNzdWJub3JtYWwgMEUrOTkxIC0+IDAKK2Jvb2wxNzE5IGlzc3Vibm9ybWFsIC0wRSs5OTEgLT4gMAorYm9vbDE3MjAgaXNzdWJub3JtYWwgMEUrOTkyIC0+IDAKK2Jvb2wxNzIxIGlzc3Vibm9ybWFsIC0wRSs5OTIgLT4gMAorYm9vbDE3MjIgaXNzdWJub3JtYWwgMEUrOTk4IC0+IDAKK2Jvb2wxNzIzIGlzc3Vibm9ybWFsIC0wRSs5OTggLT4gMAorYm9vbDE3MjQgaXNzdWJub3JtYWwgMEUrOTk5IC0+IDAKK2Jvb2wxNzI1IGlzc3Vibm9ybWFsIC0wRSs5OTkgLT4gMAorYm9vbDE3MjYgaXNzdWJub3JtYWwgMEUrMTAwMCAtPiAwCitib29sMTcyNyBpc3N1Ym5vcm1hbCAtMEUrMTAwMCAtPiAwCitib29sMTcyOCBpc3N1Ym5vcm1hbCAwRSsyMDAwIC0+IDAKK2Jvb2wxNzI5IGlzc3Vibm9ybWFsIC0wRSsyMDAwIC0+IDAKK2Jvb2wxNzMwIGlzc3Vibm9ybWFsIDFFLTIwMDAgLT4gMQorYm9vbDE3MzEgaXNzdWJub3JtYWwgLTFFLTIwMDAgLT4gMQorYm9vbDE3MzIgaXNzdWJub3JtYWwgMUUtMTAwOCAtPiAxCitib29sMTczMyBpc3N1Ym5vcm1hbCAtMUUtMTAwOCAtPiAxCitib29sMTczNCBpc3N1Ym5vcm1hbCAxRS0xMDA3IC0+IDEKK2Jvb2wxNzM1IGlzc3Vibm9ybWFsIC0xRS0xMDA3IC0+IDEKK2Jvb2wxNzM2IGlzc3Vibm9ybWFsIDFFLTEwMDYgLT4gMQorYm9vbDE3MzcgaXNzdWJub3JtYWwgLTFFLTEwMDYgLT4gMQorYm9vbDE3MzggaXNzdWJub3JtYWwgMUUtMTAwMCAtPiAxCitib29sMTczOSBpc3N1Ym5vcm1hbCAtMUUtMTAwMCAtPiAxCitib29sMTc0MCBpc3N1Ym5vcm1hbCAxRS05OTkgLT4gMAorYm9vbDE3NDEgaXNzdWJub3JtYWwgLTFFLTk5OSAtPiAwCitib29sMTc0MiBpc3N1Ym5vcm1hbCAxRS05OTggLT4gMAorYm9vbDE3NDMgaXNzdWJub3JtYWwgLTFFLTk5OCAtPiAwCitib29sMTc0NCBpc3N1Ym5vcm1hbCAxRS0xMDAgLT4gMAorYm9vbDE3NDUgaXNzdWJub3JtYWwgLTFFLTEwMCAtPiAwCitib29sMTc0NiBpc3N1Ym5vcm1hbCAwLjAwMDAwMSAtPiAwCitib29sMTc0NyBpc3N1Ym5vcm1hbCAtMC4wMDAwMDEgLT4gMAorYm9vbDE3NDggaXNzdWJub3JtYWwgMC4wMDEgLT4gMAorYm9vbDE3NDkgaXNzdWJub3JtYWwgLTAuMDAxIC0+IDAKK2Jvb2wxNzUwIGlzc3Vibm9ybWFsIDAuMDEgLT4gMAorYm9vbDE3NTEgaXNzdWJub3JtYWwgLTAuMDEgLT4gMAorYm9vbDE3NTIgaXNzdWJub3JtYWwgMC4xIC0+IDAKK2Jvb2wxNzUzIGlzc3Vibm9ybWFsIC0wLjEgLT4gMAorYm9vbDE3NTQgaXNzdWJub3JtYWwgMSAtPiAwCitib29sMTc1NSBpc3N1Ym5vcm1hbCAtMSAtPiAwCitib29sMTc1NiBpc3N1Ym5vcm1hbCAxRSsxIC0+IDAKK2Jvb2wxNzU3IGlzc3Vibm9ybWFsIC0xRSsxIC0+IDAKK2Jvb2wxNzU4IGlzc3Vibm9ybWFsIDFFKzIgLT4gMAorYm9vbDE3NTkgaXNzdWJub3JtYWwgLTFFKzIgLT4gMAorYm9vbDE3NjAgaXNzdWJub3JtYWwgMUUrMyAtPiAwCitib29sMTc2MSBpc3N1Ym5vcm1hbCAtMUUrMyAtPiAwCitib29sMTc2MiBpc3N1Ym5vcm1hbCAxRSs2IC0+IDAKK2Jvb2wxNzYzIGlzc3Vibm9ybWFsIC0xRSs2IC0+IDAKK2Jvb2wxNzY0IGlzc3Vibm9ybWFsIDFFKzEwMCAtPiAwCitib29sMTc2NSBpc3N1Ym5vcm1hbCAtMUUrMTAwIC0+IDAKK2Jvb2wxNzY2IGlzc3Vibm9ybWFsIDFFKzk5MCAtPiAwCitib29sMTc2NyBpc3N1Ym5vcm1hbCAtMUUrOTkwIC0+IDAKK2Jvb2wxNzY4IGlzc3Vibm9ybWFsIDFFKzk5MSAtPiAwCitib29sMTc2OSBpc3N1Ym5vcm1hbCAtMUUrOTkxIC0+IDAKK2Jvb2wxNzcwIGlzc3Vibm9ybWFsIDFFKzk5MiAtPiAwCitib29sMTc3MSBpc3N1Ym5vcm1hbCAtMUUrOTkyIC0+IDAKK2Jvb2wxNzcyIGlzc3Vibm9ybWFsIDFFKzk5OCAtPiAwCitib29sMTc3MyBpc3N1Ym5vcm1hbCAtMUUrOTk4IC0+IDAKK2Jvb2wxNzc0IGlzc3Vibm9ybWFsIDFFKzk5OSAtPiAwCitib29sMTc3NSBpc3N1Ym5vcm1hbCAtMUUrOTk5IC0+IDAKK2Jvb2wxNzc2IGlzc3Vibm9ybWFsIDFFKzEwMDAgLT4gMAorYm9vbDE3NzcgaXNzdWJub3JtYWwgLTFFKzEwMDAgLT4gMAorYm9vbDE3NzggaXNzdWJub3JtYWwgMUUrMjAwMCAtPiAwCitib29sMTc3OSBpc3N1Ym5vcm1hbCAtMUUrMjAwMCAtPiAwCitib29sMTc4MCBpc3N1Ym5vcm1hbCA5RS0yMDAwIC0+IDEKK2Jvb2wxNzgxIGlzc3Vibm9ybWFsIC05RS0yMDAwIC0+IDEKK2Jvb2wxNzgyIGlzc3Vibm9ybWFsIDlFLTEwMDggLT4gMQorYm9vbDE3ODMgaXNzdWJub3JtYWwgLTlFLTEwMDggLT4gMQorYm9vbDE3ODQgaXNzdWJub3JtYWwgOUUtMTAwNyAtPiAxCitib29sMTc4NSBpc3N1Ym5vcm1hbCAtOUUtMTAwNyAtPiAxCitib29sMTc4NiBpc3N1Ym5vcm1hbCA5RS0xMDA2IC0+IDEKK2Jvb2wxNzg3IGlzc3Vibm9ybWFsIC05RS0xMDA2IC0+IDEKK2Jvb2wxNzg4IGlzc3Vibm9ybWFsIDlFLTEwMDAgLT4gMQorYm9vbDE3ODkgaXNzdWJub3JtYWwgLTlFLTEwMDAgLT4gMQorYm9vbDE3OTAgaXNzdWJub3JtYWwgOUUtOTk5IC0+IDAKK2Jvb2wxNzkxIGlzc3Vibm9ybWFsIC05RS05OTkgLT4gMAorYm9vbDE3OTIgaXNzdWJub3JtYWwgOUUtOTk4IC0+IDAKK2Jvb2wxNzkzIGlzc3Vibm9ybWFsIC05RS05OTggLT4gMAorYm9vbDE3OTQgaXNzdWJub3JtYWwgOUUtMTAwIC0+IDAKK2Jvb2wxNzk1IGlzc3Vibm9ybWFsIC05RS0xMDAgLT4gMAorYm9vbDE3OTYgaXNzdWJub3JtYWwgMC4wMDAwMDkgLT4gMAorYm9vbDE3OTcgaXNzdWJub3JtYWwgLTAuMDAwMDA5IC0+IDAKK2Jvb2wxNzk4IGlzc3Vibm9ybWFsIDAuMDA5IC0+IDAKK2Jvb2wxNzk5IGlzc3Vibm9ybWFsIC0wLjAwOSAtPiAwCitib29sMTgwMCBpc3N1Ym5vcm1hbCAwLjA5IC0+IDAKK2Jvb2wxODAxIGlzc3Vibm9ybWFsIC0wLjA5IC0+IDAKK2Jvb2wxODAyIGlzc3Vibm9ybWFsIDAuOSAtPiAwCitib29sMTgwMyBpc3N1Ym5vcm1hbCAtMC45IC0+IDAKK2Jvb2wxODA0IGlzc3Vibm9ybWFsIDkgLT4gMAorYm9vbDE4MDUgaXNzdWJub3JtYWwgLTkgLT4gMAorYm9vbDE4MDYgaXNzdWJub3JtYWwgOUUrMSAtPiAwCitib29sMTgwNyBpc3N1Ym5vcm1hbCAtOUUrMSAtPiAwCitib29sMTgwOCBpc3N1Ym5vcm1hbCA5RSsyIC0+IDAKK2Jvb2wxODA5IGlzc3Vibm9ybWFsIC05RSsyIC0+IDAKK2Jvb2wxODEwIGlzc3Vibm9ybWFsIDlFKzMgLT4gMAorYm9vbDE4MTEgaXNzdWJub3JtYWwgLTlFKzMgLT4gMAorYm9vbDE4MTIgaXNzdWJub3JtYWwgOUUrNiAtPiAwCitib29sMTgxMyBpc3N1Ym5vcm1hbCAtOUUrNiAtPiAwCitib29sMTgxNCBpc3N1Ym5vcm1hbCA5RSsxMDAgLT4gMAorYm9vbDE4MTUgaXNzdWJub3JtYWwgLTlFKzEwMCAtPiAwCitib29sMTgxNiBpc3N1Ym5vcm1hbCA5RSs5OTAgLT4gMAorYm9vbDE4MTcgaXNzdWJub3JtYWwgLTlFKzk5MCAtPiAwCitib29sMTgxOCBpc3N1Ym5vcm1hbCA5RSs5OTEgLT4gMAorYm9vbDE4MTkgaXNzdWJub3JtYWwgLTlFKzk5MSAtPiAwCitib29sMTgyMCBpc3N1Ym5vcm1hbCA5RSs5OTIgLT4gMAorYm9vbDE4MjEgaXNzdWJub3JtYWwgLTlFKzk5MiAtPiAwCitib29sMTgyMiBpc3N1Ym5vcm1hbCA5RSs5OTggLT4gMAorYm9vbDE4MjMgaXNzdWJub3JtYWwgLTlFKzk5OCAtPiAwCitib29sMTgyNCBpc3N1Ym5vcm1hbCA5RSs5OTkgLT4gMAorYm9vbDE4MjUgaXNzdWJub3JtYWwgLTlFKzk5OSAtPiAwCitib29sMTgyNiBpc3N1Ym5vcm1hbCA5RSsxMDAwIC0+IDAKK2Jvb2wxODI3IGlzc3Vibm9ybWFsIC05RSsxMDAwIC0+IDAKK2Jvb2wxODI4IGlzc3Vibm9ybWFsIDlFKzIwMDAgLT4gMAorYm9vbDE4MjkgaXNzdWJub3JtYWwgLTlFKzIwMDAgLT4gMAorYm9vbDE4MzAgaXNzdWJub3JtYWwgOS45OTk5OTk5OUUtMjAwMCAtPiAxCitib29sMTgzMSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUtMjAwMCAtPiAxCitib29sMTgzMiBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RS0xMDA4IC0+IDEKK2Jvb2wxODMzIGlzc3Vibm9ybWFsIC05Ljk5OTk5OTk5RS0xMDA4IC0+IDEKK2Jvb2wxODM0IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFLTEwMDcgLT4gMQorYm9vbDE4MzUgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFLTEwMDcgLT4gMQorYm9vbDE4MzYgaXNzdWJub3JtYWwgOS45OTk5OTk5OUUtMTAwNiAtPiAxCitib29sMTgzNyBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUtMTAwNiAtPiAxCitib29sMTgzOCBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RS0xMDAwIC0+IDEKK2Jvb2wxODM5IGlzc3Vibm9ybWFsIC05Ljk5OTk5OTk5RS0xMDAwIC0+IDEKK2Jvb2wxODQwIGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFLTk5OSAtPiAwCitib29sMTg0MSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUtOTk5IC0+IDAKK2Jvb2wxODQyIGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFLTk5OCAtPiAwCitib29sMTg0MyBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUtOTk4IC0+IDAKK2Jvb2wxODQ0IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFLTEwMCAtPiAwCitib29sMTg0NSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUtMTAwIC0+IDAKK2Jvb2wxODQ2IGlzc3Vibm9ybWFsIDAuMDAwMDA5OTk5OTk5OTkgLT4gMAorYm9vbDE4NDcgaXNzdWJub3JtYWwgLTAuMDAwMDA5OTk5OTk5OTkgLT4gMAorYm9vbDE4NDggaXNzdWJub3JtYWwgMC4wMDk5OTk5OTk5OSAtPiAwCitib29sMTg0OSBpc3N1Ym5vcm1hbCAtMC4wMDk5OTk5OTk5OSAtPiAwCitib29sMTg1MCBpc3N1Ym5vcm1hbCAwLjA5OTk5OTk5OTkgLT4gMAorYm9vbDE4NTEgaXNzdWJub3JtYWwgLTAuMDk5OTk5OTk5OSAtPiAwCitib29sMTg1MiBpc3N1Ym5vcm1hbCAwLjk5OTk5OTk5OSAtPiAwCitib29sMTg1MyBpc3N1Ym5vcm1hbCAtMC45OTk5OTk5OTkgLT4gMAorYm9vbDE4NTQgaXNzdWJub3JtYWwgOS45OTk5OTk5OSAtPiAwCitib29sMTg1NSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OSAtPiAwCitib29sMTg1NiBpc3N1Ym5vcm1hbCA5OS45OTk5OTk5IC0+IDAKK2Jvb2wxODU3IGlzc3Vibm9ybWFsIC05OS45OTk5OTk5IC0+IDAKK2Jvb2wxODU4IGlzc3Vibm9ybWFsIDk5OS45OTk5OTkgLT4gMAorYm9vbDE4NTkgaXNzdWJub3JtYWwgLTk5OS45OTk5OTkgLT4gMAorYm9vbDE4NjAgaXNzdWJub3JtYWwgOTk5OS45OTk5OSAtPiAwCitib29sMTg2MSBpc3N1Ym5vcm1hbCAtOTk5OS45OTk5OSAtPiAwCitib29sMTg2MiBpc3N1Ym5vcm1hbCA5OTk5OTk5Ljk5IC0+IDAKK2Jvb2wxODYzIGlzc3Vibm9ybWFsIC05OTk5OTk5Ljk5IC0+IDAKK2Jvb2wxODY0IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFKzEwMCAtPiAwCitib29sMTg2NSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUrMTAwIC0+IDAKK2Jvb2wxODY2IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFKzk5MCAtPiAwCitib29sMTg2NyBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUrOTkwIC0+IDAKK2Jvb2wxODY4IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFKzk5MSAtPiAwCitib29sMTg2OSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUrOTkxIC0+IDAKK2Jvb2wxODcwIGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFKzk5MiAtPiAwCitib29sMTg3MSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUrOTkyIC0+IDAKK2Jvb2wxODcyIGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFKzk5OCAtPiAwCitib29sMTg3MyBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUrOTk4IC0+IDAKK2Jvb2wxODc0IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFKzk5OSAtPiAwCitib29sMTg3NSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUrOTk5IC0+IDAKK2Jvb2wxODc2IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFKzEwMDAgLT4gMAorYm9vbDE4NzcgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFKzEwMDAgLT4gMAorYm9vbDE4NzggaXNzdWJub3JtYWwgOS45OTk5OTk5OUUrMjAwMCAtPiAwCitib29sMTg3OSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUrMjAwMCAtPiAwCitib29sMTg4MCBpc3N1Ym5vcm1hbCBJbmZpbml0eSAtPiAwCitib29sMTg4MSBpc3N1Ym5vcm1hbCAtSW5maW5pdHkgLT4gMAorYm9vbDE4ODIgaXNzdWJub3JtYWwgTmFOIC0+IDAKK2Jvb2wxODgzIGlzc3Vibm9ybWFsIC1OYU4gLT4gMAorYm9vbDE4ODQgaXNzdWJub3JtYWwgTmFOMTIzIC0+IDAKK2Jvb2wxODg1IGlzc3Vibm9ybWFsIC1OYU4xMjMgLT4gMAorYm9vbDE4ODYgaXNzdWJub3JtYWwgc05hTiAtPiAwCitib29sMTg4NyBpc3N1Ym5vcm1hbCAtc05hTiAtPiAwCitib29sMTg4OCBpc3N1Ym5vcm1hbCBzTmFOMTIzIC0+IDAKK2Jvb2wxODg5IGlzc3Vibm9ybWFsIC1zTmFOMTIzIC0+IDAKK2Jvb2wxODkwIGlzemVybyAwRS0yMDAwIC0+IDEKK2Jvb2wxODkxIGlzemVybyAtMEUtMjAwMCAtPiAxCitib29sMTg5MiBpc3plcm8gMEUtMTAwOCAtPiAxCitib29sMTg5MyBpc3plcm8gLTBFLTEwMDggLT4gMQorYm9vbDE4OTQgaXN6ZXJvIDBFLTEwMDcgLT4gMQorYm9vbDE4OTUgaXN6ZXJvIC0wRS0xMDA3IC0+IDEKK2Jvb2wxODk2IGlzemVybyAwRS0xMDA2IC0+IDEKK2Jvb2wxODk3IGlzemVybyAtMEUtMTAwNiAtPiAxCitib29sMTg5OCBpc3plcm8gMEUtMTAwMCAtPiAxCitib29sMTg5OSBpc3plcm8gLTBFLTEwMDAgLT4gMQorYm9vbDE5MDAgaXN6ZXJvIDBFLTk5OSAtPiAxCitib29sMTkwMSBpc3plcm8gLTBFLTk5OSAtPiAxCitib29sMTkwMiBpc3plcm8gMEUtOTk4IC0+IDEKK2Jvb2wxOTAzIGlzemVybyAtMEUtOTk4IC0+IDEKK2Jvb2wxOTA0IGlzemVybyAwRS0xMDAgLT4gMQorYm9vbDE5MDUgaXN6ZXJvIC0wRS0xMDAgLT4gMQorYm9vbDE5MDYgaXN6ZXJvIDAuMDAwMDAwIC0+IDEKK2Jvb2wxOTA3IGlzemVybyAtMC4wMDAwMDAgLT4gMQorYm9vbDE5MDggaXN6ZXJvIDAuMDAwIC0+IDEKK2Jvb2wxOTA5IGlzemVybyAtMC4wMDAgLT4gMQorYm9vbDE5MTAgaXN6ZXJvIDAuMDAgLT4gMQorYm9vbDE5MTEgaXN6ZXJvIC0wLjAwIC0+IDEKK2Jvb2wxOTEyIGlzemVybyAwLjAgLT4gMQorYm9vbDE5MTMgaXN6ZXJvIC0wLjAgLT4gMQorYm9vbDE5MTQgaXN6ZXJvIDAgLT4gMQorYm9vbDE5MTUgaXN6ZXJvIC0wIC0+IDEKK2Jvb2wxOTE2IGlzemVybyAwRSsxIC0+IDEKK2Jvb2wxOTE3IGlzemVybyAtMEUrMSAtPiAxCitib29sMTkxOCBpc3plcm8gMEUrMiAtPiAxCitib29sMTkxOSBpc3plcm8gLTBFKzIgLT4gMQorYm9vbDE5MjAgaXN6ZXJvIDBFKzMgLT4gMQorYm9vbDE5MjEgaXN6ZXJvIC0wRSszIC0+IDEKK2Jvb2wxOTIyIGlzemVybyAwRSs2IC0+IDEKK2Jvb2wxOTIzIGlzemVybyAtMEUrNiAtPiAxCitib29sMTkyNCBpc3plcm8gMEUrMTAwIC0+IDEKK2Jvb2wxOTI1IGlzemVybyAtMEUrMTAwIC0+IDEKK2Jvb2wxOTI2IGlzemVybyAwRSs5OTAgLT4gMQorYm9vbDE5MjcgaXN6ZXJvIC0wRSs5OTAgLT4gMQorYm9vbDE5MjggaXN6ZXJvIDBFKzk5MSAtPiAxCitib29sMTkyOSBpc3plcm8gLTBFKzk5MSAtPiAxCitib29sMTkzMCBpc3plcm8gMEUrOTkyIC0+IDEKK2Jvb2wxOTMxIGlzemVybyAtMEUrOTkyIC0+IDEKK2Jvb2wxOTMyIGlzemVybyAwRSs5OTggLT4gMQorYm9vbDE5MzMgaXN6ZXJvIC0wRSs5OTggLT4gMQorYm9vbDE5MzQgaXN6ZXJvIDBFKzk5OSAtPiAxCitib29sMTkzNSBpc3plcm8gLTBFKzk5OSAtPiAxCitib29sMTkzNiBpc3plcm8gMEUrMTAwMCAtPiAxCitib29sMTkzNyBpc3plcm8gLTBFKzEwMDAgLT4gMQorYm9vbDE5MzggaXN6ZXJvIDBFKzIwMDAgLT4gMQorYm9vbDE5MzkgaXN6ZXJvIC0wRSsyMDAwIC0+IDEKK2Jvb2wxOTQwIGlzemVybyAxRS0yMDAwIC0+IDAKK2Jvb2wxOTQxIGlzemVybyAtMUUtMjAwMCAtPiAwCitib29sMTk0MiBpc3plcm8gMUUtMTAwOCAtPiAwCitib29sMTk0MyBpc3plcm8gLTFFLTEwMDggLT4gMAorYm9vbDE5NDQgaXN6ZXJvIDFFLTEwMDcgLT4gMAorYm9vbDE5NDUgaXN6ZXJvIC0xRS0xMDA3IC0+IDAKK2Jvb2wxOTQ2IGlzemVybyAxRS0xMDA2IC0+IDAKK2Jvb2wxOTQ3IGlzemVybyAtMUUtMTAwNiAtPiAwCitib29sMTk0OCBpc3plcm8gMUUtMTAwMCAtPiAwCitib29sMTk0OSBpc3plcm8gLTFFLTEwMDAgLT4gMAorYm9vbDE5NTAgaXN6ZXJvIDFFLTk5OSAtPiAwCitib29sMTk1MSBpc3plcm8gLTFFLTk5OSAtPiAwCitib29sMTk1MiBpc3plcm8gMUUtOTk4IC0+IDAKK2Jvb2wxOTUzIGlzemVybyAtMUUtOTk4IC0+IDAKK2Jvb2wxOTU0IGlzemVybyAxRS0xMDAgLT4gMAorYm9vbDE5NTUgaXN6ZXJvIC0xRS0xMDAgLT4gMAorYm9vbDE5NTYgaXN6ZXJvIDAuMDAwMDAxIC0+IDAKK2Jvb2wxOTU3IGlzemVybyAtMC4wMDAwMDEgLT4gMAorYm9vbDE5NTggaXN6ZXJvIDAuMDAxIC0+IDAKK2Jvb2wxOTU5IGlzemVybyAtMC4wMDEgLT4gMAorYm9vbDE5NjAgaXN6ZXJvIDAuMDEgLT4gMAorYm9vbDE5NjEgaXN6ZXJvIC0wLjAxIC0+IDAKK2Jvb2wxOTYyIGlzemVybyAwLjEgLT4gMAorYm9vbDE5NjMgaXN6ZXJvIC0wLjEgLT4gMAorYm9vbDE5NjQgaXN6ZXJvIDEgLT4gMAorYm9vbDE5NjUgaXN6ZXJvIC0xIC0+IDAKK2Jvb2wxOTY2IGlzemVybyAxRSsxIC0+IDAKK2Jvb2wxOTY3IGlzemVybyAtMUUrMSAtPiAwCitib29sMTk2OCBpc3plcm8gMUUrMiAtPiAwCitib29sMTk2OSBpc3plcm8gLTFFKzIgLT4gMAorYm9vbDE5NzAgaXN6ZXJvIDFFKzMgLT4gMAorYm9vbDE5NzEgaXN6ZXJvIC0xRSszIC0+IDAKK2Jvb2wxOTcyIGlzemVybyAxRSs2IC0+IDAKK2Jvb2wxOTczIGlzemVybyAtMUUrNiAtPiAwCitib29sMTk3NCBpc3plcm8gMUUrMTAwIC0+IDAKK2Jvb2wxOTc1IGlzemVybyAtMUUrMTAwIC0+IDAKK2Jvb2wxOTc2IGlzemVybyAxRSs5OTAgLT4gMAorYm9vbDE5NzcgaXN6ZXJvIC0xRSs5OTAgLT4gMAorYm9vbDE5NzggaXN6ZXJvIDFFKzk5MSAtPiAwCitib29sMTk3OSBpc3plcm8gLTFFKzk5MSAtPiAwCitib29sMTk4MCBpc3plcm8gMUUrOTkyIC0+IDAKK2Jvb2wxOTgxIGlzemVybyAtMUUrOTkyIC0+IDAKK2Jvb2wxOTgyIGlzemVybyAxRSs5OTggLT4gMAorYm9vbDE5ODMgaXN6ZXJvIC0xRSs5OTggLT4gMAorYm9vbDE5ODQgaXN6ZXJvIDFFKzk5OSAtPiAwCitib29sMTk4NSBpc3plcm8gLTFFKzk5OSAtPiAwCitib29sMTk4NiBpc3plcm8gMUUrMTAwMCAtPiAwCitib29sMTk4NyBpc3plcm8gLTFFKzEwMDAgLT4gMAorYm9vbDE5ODggaXN6ZXJvIDFFKzIwMDAgLT4gMAorYm9vbDE5ODkgaXN6ZXJvIC0xRSsyMDAwIC0+IDAKK2Jvb2wxOTkwIGlzemVybyA5RS0yMDAwIC0+IDAKK2Jvb2wxOTkxIGlzemVybyAtOUUtMjAwMCAtPiAwCitib29sMTk5MiBpc3plcm8gOUUtMTAwOCAtPiAwCitib29sMTk5MyBpc3plcm8gLTlFLTEwMDggLT4gMAorYm9vbDE5OTQgaXN6ZXJvIDlFLTEwMDcgLT4gMAorYm9vbDE5OTUgaXN6ZXJvIC05RS0xMDA3IC0+IDAKK2Jvb2wxOTk2IGlzemVybyA5RS0xMDA2IC0+IDAKK2Jvb2wxOTk3IGlzemVybyAtOUUtMTAwNiAtPiAwCitib29sMTk5OCBpc3plcm8gOUUtMTAwMCAtPiAwCitib29sMTk5OSBpc3plcm8gLTlFLTEwMDAgLT4gMAorYm9vbDIwMDAgaXN6ZXJvIDlFLTk5OSAtPiAwCitib29sMjAwMSBpc3plcm8gLTlFLTk5OSAtPiAwCitib29sMjAwMiBpc3plcm8gOUUtOTk4IC0+IDAKK2Jvb2wyMDAzIGlzemVybyAtOUUtOTk4IC0+IDAKK2Jvb2wyMDA0IGlzemVybyA5RS0xMDAgLT4gMAorYm9vbDIwMDUgaXN6ZXJvIC05RS0xMDAgLT4gMAorYm9vbDIwMDYgaXN6ZXJvIDAuMDAwMDA5IC0+IDAKK2Jvb2wyMDA3IGlzemVybyAtMC4wMDAwMDkgLT4gMAorYm9vbDIwMDggaXN6ZXJvIDAuMDA5IC0+IDAKK2Jvb2wyMDA5IGlzemVybyAtMC4wMDkgLT4gMAorYm9vbDIwMTAgaXN6ZXJvIDAuMDkgLT4gMAorYm9vbDIwMTEgaXN6ZXJvIC0wLjA5IC0+IDAKK2Jvb2wyMDEyIGlzemVybyAwLjkgLT4gMAorYm9vbDIwMTMgaXN6ZXJvIC0wLjkgLT4gMAorYm9vbDIwMTQgaXN6ZXJvIDkgLT4gMAorYm9vbDIwMTUgaXN6ZXJvIC05IC0+IDAKK2Jvb2wyMDE2IGlzemVybyA5RSsxIC0+IDAKK2Jvb2wyMDE3IGlzemVybyAtOUUrMSAtPiAwCitib29sMjAxOCBpc3plcm8gOUUrMiAtPiAwCitib29sMjAxOSBpc3plcm8gLTlFKzIgLT4gMAorYm9vbDIwMjAgaXN6ZXJvIDlFKzMgLT4gMAorYm9vbDIwMjEgaXN6ZXJvIC05RSszIC0+IDAKK2Jvb2wyMDIyIGlzemVybyA5RSs2IC0+IDAKK2Jvb2wyMDIzIGlzemVybyAtOUUrNiAtPiAwCitib29sMjAyNCBpc3plcm8gOUUrMTAwIC0+IDAKK2Jvb2wyMDI1IGlzemVybyAtOUUrMTAwIC0+IDAKK2Jvb2wyMDI2IGlzemVybyA5RSs5OTAgLT4gMAorYm9vbDIwMjcgaXN6ZXJvIC05RSs5OTAgLT4gMAorYm9vbDIwMjggaXN6ZXJvIDlFKzk5MSAtPiAwCitib29sMjAyOSBpc3plcm8gLTlFKzk5MSAtPiAwCitib29sMjAzMCBpc3plcm8gOUUrOTkyIC0+IDAKK2Jvb2wyMDMxIGlzemVybyAtOUUrOTkyIC0+IDAKK2Jvb2wyMDMyIGlzemVybyA5RSs5OTggLT4gMAorYm9vbDIwMzMgaXN6ZXJvIC05RSs5OTggLT4gMAorYm9vbDIwMzQgaXN6ZXJvIDlFKzk5OSAtPiAwCitib29sMjAzNSBpc3plcm8gLTlFKzk5OSAtPiAwCitib29sMjAzNiBpc3plcm8gOUUrMTAwMCAtPiAwCitib29sMjAzNyBpc3plcm8gLTlFKzEwMDAgLT4gMAorYm9vbDIwMzggaXN6ZXJvIDlFKzIwMDAgLT4gMAorYm9vbDIwMzkgaXN6ZXJvIC05RSsyMDAwIC0+IDAKK2Jvb2wyMDQwIGlzemVybyA5Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wyMDQxIGlzemVybyAtOS45OTk5OTk5OUUtMjAwMCAtPiAwCitib29sMjA0MiBpc3plcm8gOS45OTk5OTk5OUUtMTAwOCAtPiAwCitib29sMjA0MyBpc3plcm8gLTkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDIwNDQgaXN6ZXJvIDkuOTk5OTk5OTlFLTEwMDcgLT4gMAorYm9vbDIwNDUgaXN6ZXJvIC05Ljk5OTk5OTk5RS0xMDA3IC0+IDAKK2Jvb2wyMDQ2IGlzemVybyA5Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wyMDQ3IGlzemVybyAtOS45OTk5OTk5OUUtMTAwNiAtPiAwCitib29sMjA0OCBpc3plcm8gOS45OTk5OTk5OUUtMTAwMCAtPiAwCitib29sMjA0OSBpc3plcm8gLTkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDIwNTAgaXN6ZXJvIDkuOTk5OTk5OTlFLTk5OSAtPiAwCitib29sMjA1MSBpc3plcm8gLTkuOTk5OTk5OTlFLTk5OSAtPiAwCitib29sMjA1MiBpc3plcm8gOS45OTk5OTk5OUUtOTk4IC0+IDAKK2Jvb2wyMDUzIGlzemVybyAtOS45OTk5OTk5OUUtOTk4IC0+IDAKK2Jvb2wyMDU0IGlzemVybyA5Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDIwNTUgaXN6ZXJvIC05Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDIwNTYgaXN6ZXJvIDAuMDAwMDA5OTk5OTk5OTkgLT4gMAorYm9vbDIwNTcgaXN6ZXJvIC0wLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wyMDU4IGlzemVybyAwLjAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wyMDU5IGlzemVybyAtMC4wMDk5OTk5OTk5OSAtPiAwCitib29sMjA2MCBpc3plcm8gMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wyMDYxIGlzemVybyAtMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wyMDYyIGlzemVybyAwLjk5OTk5OTk5OSAtPiAwCitib29sMjA2MyBpc3plcm8gLTAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wyMDY0IGlzemVybyA5Ljk5OTk5OTk5IC0+IDAKK2Jvb2wyMDY1IGlzemVybyAtOS45OTk5OTk5OSAtPiAwCitib29sMjA2NiBpc3plcm8gOTkuOTk5OTk5OSAtPiAwCitib29sMjA2NyBpc3plcm8gLTk5Ljk5OTk5OTkgLT4gMAorYm9vbDIwNjggaXN6ZXJvIDk5OS45OTk5OTkgLT4gMAorYm9vbDIwNjkgaXN6ZXJvIC05OTkuOTk5OTk5IC0+IDAKK2Jvb2wyMDcwIGlzemVybyA5OTk5Ljk5OTk5IC0+IDAKK2Jvb2wyMDcxIGlzemVybyAtOTk5OS45OTk5OSAtPiAwCitib29sMjA3MiBpc3plcm8gOTk5OTk5OS45OSAtPiAwCitib29sMjA3MyBpc3plcm8gLTk5OTk5OTkuOTkgLT4gMAorYm9vbDIwNzQgaXN6ZXJvIDkuOTk5OTk5OTlFKzEwMCAtPiAwCitib29sMjA3NSBpc3plcm8gLTkuOTk5OTk5OTlFKzEwMCAtPiAwCitib29sMjA3NiBpc3plcm8gOS45OTk5OTk5OUUrOTkwIC0+IDAKK2Jvb2wyMDc3IGlzemVybyAtOS45OTk5OTk5OUUrOTkwIC0+IDAKK2Jvb2wyMDc4IGlzemVybyA5Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDIwNzkgaXN6ZXJvIC05Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDIwODAgaXN6ZXJvIDkuOTk5OTk5OTlFKzk5MiAtPiAwCitib29sMjA4MSBpc3plcm8gLTkuOTk5OTk5OTlFKzk5MiAtPiAwCitib29sMjA4MiBpc3plcm8gOS45OTk5OTk5OUUrOTk4IC0+IDAKK2Jvb2wyMDgzIGlzemVybyAtOS45OTk5OTk5OUUrOTk4IC0+IDAKK2Jvb2wyMDg0IGlzemVybyA5Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDIwODUgaXN6ZXJvIC05Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDIwODYgaXN6ZXJvIDkuOTk5OTk5OTlFKzEwMDAgLT4gMAorYm9vbDIwODcgaXN6ZXJvIC05Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wyMDg4IGlzemVybyA5Ljk5OTk5OTk5RSsyMDAwIC0+IDAKK2Jvb2wyMDg5IGlzemVybyAtOS45OTk5OTk5OUUrMjAwMCAtPiAwCitib29sMjA5MCBpc3plcm8gSW5maW5pdHkgLT4gMAorYm9vbDIwOTEgaXN6ZXJvIC1JbmZpbml0eSAtPiAwCitib29sMjA5MiBpc3plcm8gTmFOIC0+IDAKK2Jvb2wyMDkzIGlzemVybyAtTmFOIC0+IDAKK2Jvb2wyMDk0IGlzemVybyBOYU4xMjMgLT4gMAorYm9vbDIwOTUgaXN6ZXJvIC1OYU4xMjMgLT4gMAorYm9vbDIwOTYgaXN6ZXJvIHNOYU4gLT4gMAorYm9vbDIwOTcgaXN6ZXJvIC1zTmFOIC0+IDAKK2Jvb2wyMDk4IGlzemVybyBzTmFOMTIzIC0+IDAKK2Jvb2wyMDk5IGlzemVybyAtc05hTjEyMyAtPiAwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gVGhlIGZvbGxvd2luZyB0ZXN0cyAocHdteDAgdGhyb3VnaCBwd214NDQwKSBhcmUgZm9yIHRoZSAgICAgICAgICAgIC0tCistLSB0aHJlZS1hcmd1bWVudCB2ZXJzaW9uIG9mIHBvd2VyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBwb3coeCwgeSwgeikgOj0geCoqeSAlIHogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIE5vdGUgdGhhdCB0aGUgdGhyZWUtYXJndW1lbnQgdmVyc2lvbiBvZiBwb3dlciBpcyAqbm90KiBwYXJ0IG9mICAgICAtLQorLS0gdGhlIElCTSBHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBzcGVjaWZpY2F0aW9uLiAgUXVlc3Rpb25zICAgICAgIC0tCistLSBhYm91dCBpdCwgb3IgYWJvdXQgdGhlc2UgdGVzdGNhc2VzLCBzaG91bGQgZ28gdG8gb25lIG9mIHRoZSAgICAgICAgLS0KKy0tIFB5dGhvbiBkZWNpbWFsIGF1dGhvcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2V4dGVuZGVkOiAxCitwcmVjaXNpb246IDkKK3JvdW5kaW5nOiBkb3duCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTbWFsbCBudW1iZXJzCistLSBOb3RlIHRoYXQgcG93ZXIoMCwgMCwgbSkgaXMgYW4gZXJyb3IgZm9yIGFueSBtCitwd214MCBwb3dlciAwIC0wIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MSBwb3dlciAwIC0wIDIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MiBwb3dlciAwIC0wIDMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MyBwb3dlciAwIC0wIDQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214NCBwb3dlciAwIC0wIC0xIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDUgcG93ZXIgMCAtMCAtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXg2IHBvd2VyIDAgMCAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDcgcG93ZXIgMCAwIDIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214OCBwb3dlciAwIDAgMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXg5IHBvd2VyIDAgMCA0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDEwIHBvd2VyIDAgMCAtMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgxMSBwb3dlciAwIDAgLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MTIgcG93ZXIgMCAxIDEgLT4gMAorcHdteDEzIHBvd2VyIDAgMSAyIC0+IDAKK3B3bXgxNCBwb3dlciAwIDEgMyAtPiAwCitwd214MTUgcG93ZXIgMCAxIDQgLT4gMAorcHdteDE2IHBvd2VyIDAgMSAtMSAtPiAwCitwd214MTcgcG93ZXIgMCAxIC0yIC0+IDAKK3B3bXgxOCBwb3dlciAwIDIgMSAtPiAwCitwd214MTkgcG93ZXIgMCAyIDIgLT4gMAorcHdteDIwIHBvd2VyIDAgMiAzIC0+IDAKK3B3bXgyMSBwb3dlciAwIDIgNCAtPiAwCitwd214MjIgcG93ZXIgMCAyIC0xIC0+IDAKK3B3bXgyMyBwb3dlciAwIDIgLTIgLT4gMAorcHdteDI0IHBvd2VyIDAgMyAxIC0+IDAKK3B3bXgyNSBwb3dlciAwIDMgMiAtPiAwCitwd214MjYgcG93ZXIgMCAzIDMgLT4gMAorcHdteDI3IHBvd2VyIDAgMyA0IC0+IDAKK3B3bXgyOCBwb3dlciAwIDMgLTEgLT4gMAorcHdteDI5IHBvd2VyIDAgMyAtMiAtPiAwCitwd214MzAgcG93ZXIgMCA0IDEgLT4gMAorcHdteDMxIHBvd2VyIDAgNCAyIC0+IDAKK3B3bXgzMiBwb3dlciAwIDQgMyAtPiAwCitwd214MzMgcG93ZXIgMCA0IDQgLT4gMAorcHdteDM0IHBvd2VyIDAgNCAtMSAtPiAwCitwd214MzUgcG93ZXIgMCA0IC0yIC0+IDAKK3B3bXgzNiBwb3dlciAwIDUgMSAtPiAwCitwd214MzcgcG93ZXIgMCA1IDIgLT4gMAorcHdteDM4IHBvd2VyIDAgNSAzIC0+IDAKK3B3bXgzOSBwb3dlciAwIDUgNCAtPiAwCitwd214NDAgcG93ZXIgMCA1IC0xIC0+IDAKK3B3bXg0MSBwb3dlciAwIDUgLTIgLT4gMAorcHdteDQyIHBvd2VyIDEgLTAgMSAtPiAwCitwd214NDMgcG93ZXIgMSAtMCAyIC0+IDEKK3B3bXg0NCBwb3dlciAxIC0wIDMgLT4gMQorcHdteDQ1IHBvd2VyIDEgLTAgNCAtPiAxCitwd214NDYgcG93ZXIgMSAtMCAtMSAtPiAwCitwd214NDcgcG93ZXIgMSAtMCAtMiAtPiAxCitwd214NDggcG93ZXIgMSAwIDEgLT4gMAorcHdteDQ5IHBvd2VyIDEgMCAyIC0+IDEKK3B3bXg1MCBwb3dlciAxIDAgMyAtPiAxCitwd214NTEgcG93ZXIgMSAwIDQgLT4gMQorcHdteDUyIHBvd2VyIDEgMCAtMSAtPiAwCitwd214NTMgcG93ZXIgMSAwIC0yIC0+IDEKK3B3bXg1NCBwb3dlciAxIDEgMSAtPiAwCitwd214NTUgcG93ZXIgMSAxIDIgLT4gMQorcHdteDU2IHBvd2VyIDEgMSAzIC0+IDEKK3B3bXg1NyBwb3dlciAxIDEgNCAtPiAxCitwd214NTggcG93ZXIgMSAxIC0xIC0+IDAKK3B3bXg1OSBwb3dlciAxIDEgLTIgLT4gMQorcHdteDYwIHBvd2VyIDEgMiAxIC0+IDAKK3B3bXg2MSBwb3dlciAxIDIgMiAtPiAxCitwd214NjIgcG93ZXIgMSAyIDMgLT4gMQorcHdteDYzIHBvd2VyIDEgMiA0IC0+IDEKK3B3bXg2NCBwb3dlciAxIDIgLTEgLT4gMAorcHdteDY1IHBvd2VyIDEgMiAtMiAtPiAxCitwd214NjYgcG93ZXIgMSAzIDEgLT4gMAorcHdteDY3IHBvd2VyIDEgMyAyIC0+IDEKK3B3bXg2OCBwb3dlciAxIDMgMyAtPiAxCitwd214NjkgcG93ZXIgMSAzIDQgLT4gMQorcHdteDcwIHBvd2VyIDEgMyAtMSAtPiAwCitwd214NzEgcG93ZXIgMSAzIC0yIC0+IDEKK3B3bXg3MiBwb3dlciAxIDQgMSAtPiAwCitwd214NzMgcG93ZXIgMSA0IDIgLT4gMQorcHdteDc0IHBvd2VyIDEgNCAzIC0+IDEKK3B3bXg3NSBwb3dlciAxIDQgNCAtPiAxCitwd214NzYgcG93ZXIgMSA0IC0xIC0+IDAKK3B3bXg3NyBwb3dlciAxIDQgLTIgLT4gMQorcHdteDc4IHBvd2VyIDEgNSAxIC0+IDAKK3B3bXg3OSBwb3dlciAxIDUgMiAtPiAxCitwd214ODAgcG93ZXIgMSA1IDMgLT4gMQorcHdteDgxIHBvd2VyIDEgNSA0IC0+IDEKK3B3bXg4MiBwb3dlciAxIDUgLTEgLT4gMAorcHdteDgzIHBvd2VyIDEgNSAtMiAtPiAxCitwd214ODQgcG93ZXIgMiAtMCAxIC0+IDAKK3B3bXg4NSBwb3dlciAyIC0wIDIgLT4gMQorcHdteDg2IHBvd2VyIDIgLTAgMyAtPiAxCitwd214ODcgcG93ZXIgMiAtMCA0IC0+IDEKK3B3bXg4OCBwb3dlciAyIC0wIC0xIC0+IDAKK3B3bXg4OSBwb3dlciAyIC0wIC0yIC0+IDEKK3B3bXg5MCBwb3dlciAyIDAgMSAtPiAwCitwd214OTEgcG93ZXIgMiAwIDIgLT4gMQorcHdteDkyIHBvd2VyIDIgMCAzIC0+IDEKK3B3bXg5MyBwb3dlciAyIDAgNCAtPiAxCitwd214OTQgcG93ZXIgMiAwIC0xIC0+IDAKK3B3bXg5NSBwb3dlciAyIDAgLTIgLT4gMQorcHdteDk2IHBvd2VyIDIgMSAxIC0+IDAKK3B3bXg5NyBwb3dlciAyIDEgMiAtPiAwCitwd214OTggcG93ZXIgMiAxIDMgLT4gMgorcHdteDk5IHBvd2VyIDIgMSA0IC0+IDIKK3B3bXgxMDAgcG93ZXIgMiAxIC0xIC0+IDAKK3B3bXgxMDEgcG93ZXIgMiAxIC0yIC0+IDAKK3B3bXgxMDIgcG93ZXIgMiAyIDEgLT4gMAorcHdteDEwMyBwb3dlciAyIDIgMiAtPiAwCitwd214MTA0IHBvd2VyIDIgMiAzIC0+IDEKK3B3bXgxMDUgcG93ZXIgMiAyIDQgLT4gMAorcHdteDEwNiBwb3dlciAyIDIgLTEgLT4gMAorcHdteDEwNyBwb3dlciAyIDIgLTIgLT4gMAorcHdteDEwOCBwb3dlciAyIDMgMSAtPiAwCitwd214MTA5IHBvd2VyIDIgMyAyIC0+IDAKK3B3bXgxMTAgcG93ZXIgMiAzIDMgLT4gMgorcHdteDExMSBwb3dlciAyIDMgNCAtPiAwCitwd214MTEyIHBvd2VyIDIgMyAtMSAtPiAwCitwd214MTEzIHBvd2VyIDIgMyAtMiAtPiAwCitwd214MTE0IHBvd2VyIDIgNCAxIC0+IDAKK3B3bXgxMTUgcG93ZXIgMiA0IDIgLT4gMAorcHdteDExNiBwb3dlciAyIDQgMyAtPiAxCitwd214MTE3IHBvd2VyIDIgNCA0IC0+IDAKK3B3bXgxMTggcG93ZXIgMiA0IC0xIC0+IDAKK3B3bXgxMTkgcG93ZXIgMiA0IC0yIC0+IDAKK3B3bXgxMjAgcG93ZXIgMiA1IDEgLT4gMAorcHdteDEyMSBwb3dlciAyIDUgMiAtPiAwCitwd214MTIyIHBvd2VyIDIgNSAzIC0+IDIKK3B3bXgxMjMgcG93ZXIgMiA1IDQgLT4gMAorcHdteDEyNCBwb3dlciAyIDUgLTEgLT4gMAorcHdteDEyNSBwb3dlciAyIDUgLTIgLT4gMAorcHdteDEyNiBwb3dlciAzIC0wIDEgLT4gMAorcHdteDEyNyBwb3dlciAzIC0wIDIgLT4gMQorcHdteDEyOCBwb3dlciAzIC0wIDMgLT4gMQorcHdteDEyOSBwb3dlciAzIC0wIDQgLT4gMQorcHdteDEzMCBwb3dlciAzIC0wIC0xIC0+IDAKK3B3bXgxMzEgcG93ZXIgMyAtMCAtMiAtPiAxCitwd214MTMyIHBvd2VyIDMgMCAxIC0+IDAKK3B3bXgxMzMgcG93ZXIgMyAwIDIgLT4gMQorcHdteDEzNCBwb3dlciAzIDAgMyAtPiAxCitwd214MTM1IHBvd2VyIDMgMCA0IC0+IDEKK3B3bXgxMzYgcG93ZXIgMyAwIC0xIC0+IDAKK3B3bXgxMzcgcG93ZXIgMyAwIC0yIC0+IDEKK3B3bXgxMzggcG93ZXIgMyAxIDEgLT4gMAorcHdteDEzOSBwb3dlciAzIDEgMiAtPiAxCitwd214MTQwIHBvd2VyIDMgMSAzIC0+IDAKK3B3bXgxNDEgcG93ZXIgMyAxIDQgLT4gMworcHdteDE0MiBwb3dlciAzIDEgLTEgLT4gMAorcHdteDE0MyBwb3dlciAzIDEgLTIgLT4gMQorcHdteDE0NCBwb3dlciAzIDIgMSAtPiAwCitwd214MTQ1IHBvd2VyIDMgMiAyIC0+IDEKK3B3bXgxNDYgcG93ZXIgMyAyIDMgLT4gMAorcHdteDE0NyBwb3dlciAzIDIgNCAtPiAxCitwd214MTQ4IHBvd2VyIDMgMiAtMSAtPiAwCitwd214MTQ5IHBvd2VyIDMgMiAtMiAtPiAxCitwd214MTUwIHBvd2VyIDMgMyAxIC0+IDAKK3B3bXgxNTEgcG93ZXIgMyAzIDIgLT4gMQorcHdteDE1MiBwb3dlciAzIDMgMyAtPiAwCitwd214MTUzIHBvd2VyIDMgMyA0IC0+IDMKK3B3bXgxNTQgcG93ZXIgMyAzIC0xIC0+IDAKK3B3bXgxNTUgcG93ZXIgMyAzIC0yIC0+IDEKK3B3bXgxNTYgcG93ZXIgMyA0IDEgLT4gMAorcHdteDE1NyBwb3dlciAzIDQgMiAtPiAxCitwd214MTU4IHBvd2VyIDMgNCAzIC0+IDAKK3B3bXgxNTkgcG93ZXIgMyA0IDQgLT4gMQorcHdteDE2MCBwb3dlciAzIDQgLTEgLT4gMAorcHdteDE2MSBwb3dlciAzIDQgLTIgLT4gMQorcHdteDE2MiBwb3dlciAzIDUgMSAtPiAwCitwd214MTYzIHBvd2VyIDMgNSAyIC0+IDEKK3B3bXgxNjQgcG93ZXIgMyA1IDMgLT4gMAorcHdteDE2NSBwb3dlciAzIDUgNCAtPiAzCitwd214MTY2IHBvd2VyIDMgNSAtMSAtPiAwCitwd214MTY3IHBvd2VyIDMgNSAtMiAtPiAxCitwd214MTY4IHBvd2VyIC0wIC0wIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MTY5IHBvd2VyIC0wIC0wIDIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MTcwIHBvd2VyIC0wIC0wIDMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MTcxIHBvd2VyIC0wIC0wIDQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MTcyIHBvd2VyIC0wIC0wIC0xIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE3MyBwb3dlciAtMCAtMCAtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgxNzQgcG93ZXIgLTAgMCAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE3NSBwb3dlciAtMCAwIDIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MTc2IHBvd2VyIC0wIDAgMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgxNzcgcG93ZXIgLTAgMCA0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE3OCBwb3dlciAtMCAwIC0xIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE3OSBwb3dlciAtMCAwIC0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE4MCBwb3dlciAtMCAxIDEgLT4gLTAKK3B3bXgxODEgcG93ZXIgLTAgMSAyIC0+IC0wCitwd214MTgyIHBvd2VyIC0wIDEgMyAtPiAtMAorcHdteDE4MyBwb3dlciAtMCAxIDQgLT4gLTAKK3B3bXgxODQgcG93ZXIgLTAgMSAtMSAtPiAtMAorcHdteDE4NSBwb3dlciAtMCAxIC0yIC0+IC0wCitwd214MTg2IHBvd2VyIC0wIDIgMSAtPiAwCitwd214MTg3IHBvd2VyIC0wIDIgMiAtPiAwCitwd214MTg4IHBvd2VyIC0wIDIgMyAtPiAwCitwd214MTg5IHBvd2VyIC0wIDIgNCAtPiAwCitwd214MTkwIHBvd2VyIC0wIDIgLTEgLT4gMAorcHdteDE5MSBwb3dlciAtMCAyIC0yIC0+IDAKK3B3bXgxOTIgcG93ZXIgLTAgMyAxIC0+IC0wCitwd214MTkzIHBvd2VyIC0wIDMgMiAtPiAtMAorcHdteDE5NCBwb3dlciAtMCAzIDMgLT4gLTAKK3B3bXgxOTUgcG93ZXIgLTAgMyA0IC0+IC0wCitwd214MTk2IHBvd2VyIC0wIDMgLTEgLT4gLTAKK3B3bXgxOTcgcG93ZXIgLTAgMyAtMiAtPiAtMAorcHdteDE5OCBwb3dlciAtMCA0IDEgLT4gMAorcHdteDE5OSBwb3dlciAtMCA0IDIgLT4gMAorcHdteDIwMCBwb3dlciAtMCA0IDMgLT4gMAorcHdteDIwMSBwb3dlciAtMCA0IDQgLT4gMAorcHdteDIwMiBwb3dlciAtMCA0IC0xIC0+IDAKK3B3bXgyMDMgcG93ZXIgLTAgNCAtMiAtPiAwCitwd214MjA0IHBvd2VyIC0wIDUgMSAtPiAtMAorcHdteDIwNSBwb3dlciAtMCA1IDIgLT4gLTAKK3B3bXgyMDYgcG93ZXIgLTAgNSAzIC0+IC0wCitwd214MjA3IHBvd2VyIC0wIDUgNCAtPiAtMAorcHdteDIwOCBwb3dlciAtMCA1IC0xIC0+IC0wCitwd214MjA5IHBvd2VyIC0wIDUgLTIgLT4gLTAKK3B3bXgyMTAgcG93ZXIgLTEgLTAgMSAtPiAwCitwd214MjExIHBvd2VyIC0xIC0wIDIgLT4gMQorcHdteDIxMiBwb3dlciAtMSAtMCAzIC0+IDEKK3B3bXgyMTMgcG93ZXIgLTEgLTAgNCAtPiAxCitwd214MjE0IHBvd2VyIC0xIC0wIC0xIC0+IDAKK3B3bXgyMTUgcG93ZXIgLTEgLTAgLTIgLT4gMQorcHdteDIxNiBwb3dlciAtMSAwIDEgLT4gMAorcHdteDIxNyBwb3dlciAtMSAwIDIgLT4gMQorcHdteDIxOCBwb3dlciAtMSAwIDMgLT4gMQorcHdteDIxOSBwb3dlciAtMSAwIDQgLT4gMQorcHdteDIyMCBwb3dlciAtMSAwIC0xIC0+IDAKK3B3bXgyMjEgcG93ZXIgLTEgMCAtMiAtPiAxCitwd214MjIyIHBvd2VyIC0xIDEgMSAtPiAtMAorcHdteDIyMyBwb3dlciAtMSAxIDIgLT4gLTEKK3B3bXgyMjQgcG93ZXIgLTEgMSAzIC0+IC0xCitwd214MjI1IHBvd2VyIC0xIDEgNCAtPiAtMQorcHdteDIyNiBwb3dlciAtMSAxIC0xIC0+IC0wCitwd214MjI3IHBvd2VyIC0xIDEgLTIgLT4gLTEKK3B3bXgyMjggcG93ZXIgLTEgMiAxIC0+IDAKK3B3bXgyMjkgcG93ZXIgLTEgMiAyIC0+IDEKK3B3bXgyMzAgcG93ZXIgLTEgMiAzIC0+IDEKK3B3bXgyMzEgcG93ZXIgLTEgMiA0IC0+IDEKK3B3bXgyMzIgcG93ZXIgLTEgMiAtMSAtPiAwCitwd214MjMzIHBvd2VyIC0xIDIgLTIgLT4gMQorcHdteDIzNCBwb3dlciAtMSAzIDEgLT4gLTAKK3B3bXgyMzUgcG93ZXIgLTEgMyAyIC0+IC0xCitwd214MjM2IHBvd2VyIC0xIDMgMyAtPiAtMQorcHdteDIzNyBwb3dlciAtMSAzIDQgLT4gLTEKK3B3bXgyMzggcG93ZXIgLTEgMyAtMSAtPiAtMAorcHdteDIzOSBwb3dlciAtMSAzIC0yIC0+IC0xCitwd214MjQwIHBvd2VyIC0xIDQgMSAtPiAwCitwd214MjQxIHBvd2VyIC0xIDQgMiAtPiAxCitwd214MjQyIHBvd2VyIC0xIDQgMyAtPiAxCitwd214MjQzIHBvd2VyIC0xIDQgNCAtPiAxCitwd214MjQ0IHBvd2VyIC0xIDQgLTEgLT4gMAorcHdteDI0NSBwb3dlciAtMSA0IC0yIC0+IDEKK3B3bXgyNDYgcG93ZXIgLTEgNSAxIC0+IC0wCitwd214MjQ3IHBvd2VyIC0xIDUgMiAtPiAtMQorcHdteDI0OCBwb3dlciAtMSA1IDMgLT4gLTEKK3B3bXgyNDkgcG93ZXIgLTEgNSA0IC0+IC0xCitwd214MjUwIHBvd2VyIC0xIDUgLTEgLT4gLTAKK3B3bXgyNTEgcG93ZXIgLTEgNSAtMiAtPiAtMQorCistLSBSYW5kb21seSBjaG9zZW4gbGFyZ2VyIHZhbHVlcworcHdteDI1MiBwb3dlciAwIDQgNyAtPiAwCitwd214MjUzIHBvd2VyIC00IDUgLTkgLT4gLTcKK3B3bXgyNTQgcG93ZXIgLTUgNCAtOSAtPiA0Citwd214MjU1IHBvd2VyIC01MCAyOSAyIC0+IC0wCitwd214MjU2IHBvd2VyIC0xIDgzIDMgLT4gLTEKK3B3bXgyNTcgcG93ZXIgLTU1IDY1IC03NSAtPiAtMjUKK3B3bXgyNTggcG93ZXIgLTYxMyAxNTEgLTMwMiAtPiAtOQorcHdteDI1OSBwb3dlciA1NTEgMjMgLTM1IC0+IDMxCitwd214MjYwIHBvd2VyIDUxIDE0MiA5NDIgLT4gOQorcHdteDI2MSBwb3dlciA2ODg2IDkyMDQgLTYwOTEgLT4gNTAzNAorcHdteDI2MiBwb3dlciAzMDU3IDU4OTAgLTMgLT4gMAorcHdteDI2MyBwb3dlciA1NiA0NDM4IDUzNjUgLT4gNTIxCitwd214MjY0IHBvd2VyIDk2MjM3IDM1NjY5IC00NjY2OSAtPiAzMDcxNworcHdteDI2NSBwb3dlciA0MDAxMSAzNDM3NSAtNTc2MTEgLT4gNjI1Citwd214MjY2IHBvd2VyIDQ0MzE3IDM4NDkzIC0xMjE5NiAtPiAxMTA4MQorcHdteDI2NyBwb3dlciAtMjgyMzY4IDg5NTYzMyAtMjM1ODcwIC0+IC0yMjA5MjgKK3B3bXgyNjggcG93ZXIgNzczMjggODUyNTUzIC00MDU1MjkgLT4gMTI5MTczCitwd214MjY5IHBvd2VyIC05Mjk2NTkgODU1NzEzIDY1MDM0OCAtPiAtOTA4MDMKK3B3bXgyNzAgcG93ZXIgOTA3MDU3IDY1NzQzMDkgNDkyNDc2OCAtPiAzMDE4MjU3Citwd214MjcxIHBvd2VyIC0yODg3NzU3IDMxOTg0OTIgLTU4NjQzNTIgLT4gMzQ0MDExMworcHdteDI3MiBwb3dlciAtMjQ3MzEwIDY1NzM3MSAtNzQxNTczOSAtPiAtMTMwMTg0MAorcHdteDI3MyBwb3dlciAtODM5OTA0NiA0NTMzNDA4NyAtMjIzOTUwMjAgLT4gLTE4NTE1ODk2Citwd214Mjc0IHBvd2VyIDc5NjIxMzk3IDQ4NTAyMzYgMTQ4NjU1NSAtPiA5Mjg3MDYKK3B3bXgyNzUgcG93ZXIgOTYwMTIyNTEgMjc5NzE5MDEgNjk2MDkwMzEgLT4gNTAwMjg3MjkKK3B3bXgyNzYgcG93ZXIgLTkwNzMzNTQ4MSA3NDEyNzk4NiA1ODIzMzAwMTcgLT4gNTE1MjcxODcKK3B3bXgyNzcgcG93ZXIgLTE0MTE5Mjk2MCA4MjEwNjM4MjYgLTI2MDg3NzkyOCAtPiAxMTIzMTg1NjAKK3B3bXgyNzggcG93ZXIgLTUwMTcxMTcwMiA5MzQzNTU5OTQgODIxMzUxNDMgLT4gNjY1ODY5OTUKK3B3bXgyNzkgcG93ZXIgLTkyNTYzNTgwNzUgODkwMDkwMDEzOCAtNDY3MjIyMDMxIC0+IDk1ODAwMjQ2Citwd214MjgwIHBvd2VyIC03MDMxOTY0MjkxIDE3NTEyNTc0ODMgLTkzNTMzNDQ5OCAtPiAtNjA3NjI2NjA5Citwd214MjgxIHBvd2VyIDg0OTQzMTQ5NzEgODc0MDE5NzI1MiAxMDc1MjI0OTEgLT4gMTczNzM2NTUKK3B3bXgyODIgcG93ZXIgODgzMDYyMTY4OTAgODc0NzczNzQxNjYgLTIzNDk4MDc2IC0+IDE1MTI5NTI4Citwd214MjgzIHBvd2VyIC0zMzkzOTQzMjQ3OCA3MTcwMTk2MjM5IDIyMTMzNTgzIC0+IC0xMTAxNzAzNgorcHdteDI4NCBwb3dlciAxOTQ2NjIyMjc2NyAzMDQxMDcxMDYxNCAzMDU3NTIwNTYgLT4gMTkxNTA5NTM3Citwd214Mjg1IHBvd2VyIC04NjQ5NDI0OTQwMDggMzcwNTU4ODk5NjM4IDM0NjY4ODg1NiAtPiA1Njk1Njc2OAorcHdteDI4NiBwb3dlciAtNTI1NDA2MjI1NjAzIDM0NTcwMDIyNjg5OCAyMzcxNjM2MjEgLT4gNTY3ODk1MzQKK3B3bXgyODcgcG93ZXIgNDY0NjEyMjE1OTU1IDMxMjQ3NDYyMTY1MSAtMzI5NDg1NzAwIC0+IDE4NTM5NzUKK3B3bXgyODggcG93ZXIgLTE2NjQyODMwMzEyNDQgMzc3NDQ3NDY2OTg1NSA5MTkwMjI4NjcgLT4gLTUxNjAzNDUyMAorcHdteDI4OSBwb3dlciAtMzQ3MjQzODUwNjkxMyA3NDA3MzI3NTQ5OTk1IC00NTEyMDY4NTQgLT4gLTc0NTk0NzYxCitwd214MjkwIHBvd2VyIC00MjIzNjYyMTUyOTQ5IDY4OTEwNjkyNzkwNjkgNDk5ODQzNTAzIC0+IC04MDEzNTI5MAorcHdteDI5MSBwb3dlciAtNDQwMjIxMTkyNzY4MTYgODE2ODI2NjE3MDMyNiA1Njk2Nzk1MDkgLT4gMzc1NzM0NDc1Citwd214MjkyIHBvd2VyIC02NjE5NTg5MTIwNzkwMiAxMjUzMjY5MDU1NTg3NSAtMjQzMjYyMTI5IC0+IC0xMTMxODY4MzMKK3B3bXgyOTMgcG93ZXIgLTY5MDM5OTExMjYzMTY0IDUyNzI2NjA1ODU3NjczIDM2MDYyNTE5NiAtPiAtMjY4NjYyNzQ4Citwd214Mjk0IHBvd2VyIC0yOTkwMTAxMTY2OTkyMDggODg1MDkyNTg5MzU5MjMxIC03MzEzMTAxMjMgLT4gLTEwNDEwMzc2NQorcHdteDI5NSBwb3dlciAtMjAyNDk1Nzc2Mjk5NzU4IDUwMTE1OTEyMjk0MzE0NSAtNjg2MjM0ODcwIC0+IC0xMzU1MTE4NzgKK3B3bXgyOTYgcG93ZXIgLTU5NTQxMTQ3ODA4NzY3NiA4MzYyNjkyNzA0NzI0ODEgLTIxNDYxNDkwMSAtPiAtMTgzNDQwODE5Citwd214Mjk3IHBvd2VyIC0xMzk1NTUzODEwNTYyMjkgMTMyNDgwODUyMDAyMDUwNyAtMjI4OTQ0NzM4IC0+IC0yMTg5OTE0NzMKK3B3bXgyOTggcG93ZXIgNzg0NjM1NjI1MDc3MDU0MyAxNzk4MDQ1MDUxMDM2ODE0IC0xMDEwMjg5ODUgLT4gNzgwNTE3OQorcHdteDI5OSBwb3dlciAtNDI5ODAxNTg2MjcwOTQxNSA2MDQ5NjY5NDQ4NDQyMDkgODgwMjEyODkzIC0+IC04NzQwODY3MQorcHdteDMwMCBwb3dlciAtMzczODQ4OTc1Mzg5MTA4OTMgNzYwMjIyMDY5OTU2NTkyOTUgLTkzMDUxMjg0MiAtPiAtNjk3NzU3MTU3Citwd214MzAxIHBvd2VyIDgyMTY2NjU5MDI4MDA1NDQzIDIzMzc1NDA4MjUxNzY3NzA0IDgxNzI3MDcwMCAtPiA3NzA2OTcwMDEKK3B3bXgzMDIgcG93ZXIgOTc0MjAzMDExOTgxNjU2NDEgNzIyMTMyODI5ODM0MTY5MjQgOTQ3NTE5NzE2IC0+IDYxMDcxMTcyMQorcHdteDMwMyBwb3dlciA5MTMzODIwNDM0NTMyNDM2MDcgNDQ5NjgxNzA3MjQ4NTAwMjYyIDIxMTEzNTU0NSAtPiA3OTU0NDg5OQorcHdteDMwNCBwb3dlciAtMzEzODIzNjEzNDE4MDUyMTcxIDUzNDU3OTQwOTYxMDE0MjkzNyAtOTQzMDYyOTY4IC0+IC00NDYwMDEzNzkKK3B3bXgzMDUgcG93ZXIgLTkyODEwNjUxNjg5NDQ5NDA5MyA3NjAwMjAxNzczMzAxMTY1MDkgLTUwMDQzOTk0IC0+IC00NjAxMDU3NQorcHdteDMwNiBwb3dlciA0NjkyMTQ2NjAxNjc5NDM5Nzk2IDQ1NjUzNTQ1MTE4MDY3Njc4MDQgLTY2NzMzOTA3NSAtPiA0ODAyNzIwODEKK3B3bXgzMDcgcG93ZXIgOTcyMjI1NjYzMzUwOTE3NzkzMCA3Mjc2NTY4NzkxODYwNTA1NzkwIDc5MjY3NTMyMSAtPiAxODI4Nzk3NTIKK3B3bXgzMDggcG93ZXIgODY4OTg5OTQ4NDgzMDA2NDIyOCA0MjkwODI5NjcxMjk2MTUyNjEgLTg0NDU1NTYzNyAtPiAyNzAzNzQ1NTcKKworLS0gQWxsIGlucHV0cyBtdXN0IGJlIGludGVnZXJzCitwd214MzA5IHBvd2VyIDIuMSAzIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MzEwIHBvd2VyIDAuNCAxIDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MzExIHBvd2VyIDIgMy4xIDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MzEyIHBvd2VyIDEzIC0xLjIgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MzEzIHBvd2VyIDIgMyA1LjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFNlY29uZCBhcmd1bWVudCBtdXN0IGJlIG5vbm5lZ2F0aXZlICgtMCBpcyBva2F5KQorcHdteDMxNCBwb3dlciAyIC0zIDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MzE1IHBvd2VyIDcgLTEgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgzMTYgcG93ZXIgMCAtMiA2IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBUaGlyZCBhcmd1bWVudCBtdXN0IGJlIG5vbnplcm8KK3B3bXgzMTcgcG93ZXIgMTMgMTAwMyAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMxOCBwb3dlciAxIDAgMEUrOTg3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMxOSBwb3dlciAwIDIgLTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEludGVnZXJzIGFyZSBmaW5lLCBubyBtYXR0ZXIgaG93IHRoZXkncmUgZXhwcmVzc2VkCitwd214MzIwIHBvd2VyIDEzLjAgMTE3LjAwIDFFKzIgLT4gMzMKK3B3bXgzMjEgcG93ZXIgLTJFKzMgMS4xRSsxMCAtMTIzMjMgLT4gNDgxMQorcHdteDMyMiBwb3dlciAyMCAwRS0zMDAgMTQzIC0+IDEKK3B3bXgzMjMgcG93ZXIgLTIwIC0wRSsxMDA1IDExNzkgLT4gMQorcHdteDMyNCBwb3dlciAwRS0xMDAxIDE3IDUuNkUrNCAtPiAwCisKKy0tIE1vZHVsdXMgbXVzdCBub3QgZXhjZWVkIHByZWNpc2lvbgorcHdteDMyNSBwb3dlciAwIDEgMTIzNDU2Nzg5MCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgzMjYgcG93ZXIgMSAwIDEwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MzI3IHBvd2VyIC0yMyA1IC0xMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMyOCBwb3dlciA0MTU1NyAyMTMgLTk5OTk5OTk5OSAtPiA0NzY1MDQ1NgorcHdteDMyOSBwb3dlciAtMjEzNCAxOTkgOTk5OTk5OTk3IC0+IC05NDY5NTc5MTIKKworLS0gSHVnZSBiYXNlIHNob3VsZG4ndCBwcmVzZW50IGFueSBwcm9ibGVtcworcHdteDMzMCBwb3dlciAxLjIzRSsxMjM0NTY3OTEgMTAxMjM4OTggMTcyOTEwNjUgLT4gNTY3NDA0NQorCistLSBMYXJnZSBleHBvbmVudCwgbWF5IGJlIHNsb3cKKy0tIChpZiBzZWNvbmQgYXJndW1lbnQgaXMgMUVuIHRoZW4gZXhwZWN0IE8obikgcnVubmluZyB0aW1lKQorcHdteDMzMSBwb3dlciAxMDAwMjg4ODk2IDkuODdFKzEyMzQ3IDkzMzc5OTA4IC0+IDQzMjI0OTI0CisKKy0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24gKGFkYXB0ZWQgZnJvbSBleGFtcGxlcyBpbiBmbWEuZGVjVGVzdCkKK3B3bXg0MDAgcG93ZXIgIE5hTjIgIE5hTjMgIE5hTjUgICAtPiAgTmFOMgorcHdteDQwMSBwb3dlciAgMSAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zCitwd214NDAyIHBvd2VyICAxICAgICAxICAgICBOYU41ICAgLT4gIE5hTjUKK3B3bXg0MDMgcG93ZXIgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgorcHdteDQwNCBwb3dlciAgMSAgICAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitwd214NDA1IHBvd2VyICAxICAgICAxICAgICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KK3B3bXg0MDYgcG93ZXIgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgorcHdteDQwNyBwb3dlciAgTmFONyAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitwd214NDA4IHBvd2VyICBOYU43ICBOYU41ICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KKworLS0gSW5maW5pdGllcyBub3QgYWxsb3dlZAorcHdteDQxMCBwb3dlciBJbmYgMSAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDQxMSBwb3dlciAxIEluZiAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDQxMiBwb3dlciAxIDEgSW5mIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDQxMyBwb3dlciAtSW5mIDEgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXg0MTQgcG93ZXIgMSAtSW5mIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214NDE1IHBvd2VyIDEgMSAtSW5mIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBKdXN0IGZvciBmdW46IDE3MjkgaXMgYSBDYXJtaWNoYWVsIG51bWJlcgorcHdteDQyMCBwb3dlciAwIDE3MjggMTcyOSAtPiAwCitwd214NDIxIHBvd2VyIDEgMTcyOCAxNzI5IC0+IDEKK3B3bXg0MjIgcG93ZXIgMiAxNzI4IDE3MjkgLT4gMQorcHdteDQyMyBwb3dlciAzIDE3MjggMTcyOSAtPiAxCitwd214NDI0IHBvd2VyIDQgMTcyOCAxNzI5IC0+IDEKK3B3bXg0MjUgcG93ZXIgNSAxNzI4IDE3MjkgLT4gMQorcHdteDQyNiBwb3dlciA2IDE3MjggMTcyOSAtPiAxCitwd214NDI3IHBvd2VyIDcgMTcyOCAxNzI5IC0+IDc0MgorcHdteDQyOCBwb3dlciA4IDE3MjggMTcyOSAtPiAxCitwd214NDI5IHBvd2VyIDkgMTcyOCAxNzI5IC0+IDEKK3B3bXg0MzAgcG93ZXIgMTAgMTcyOCAxNzI5IC0+IDEKK3B3bXg0MzEgcG93ZXIgMTEgMTcyOCAxNzI5IC0+IDEKK3B3bXg0MzIgcG93ZXIgMTIgMTcyOCAxNzI5IC0+IDEKK3B3bXg0MzMgcG93ZXIgMTMgMTcyOCAxNzI5IC0+IDUzMworcHdteDQzNCBwb3dlciAxNCAxNzI4IDE3MjkgLT4gNzQyCitwd214NDM1IHBvd2VyIDE1IDE3MjggMTcyOSAtPiAxCitwd214NDM2IHBvd2VyIDE2IDE3MjggMTcyOSAtPiAxCitwd214NDM3IHBvd2VyIDE3IDE3MjggMTcyOSAtPiAxCitwd214NDM4IHBvd2VyIDE4IDE3MjggMTcyOSAtPiAxCitwd214NDM5IHBvd2VyIDE5IDE3MjggMTcyOSAtPiA0NTYKK3B3bXg0NDAgcG93ZXIgMjAgMTcyOCAxNzI5IC0+IDEKKworLS0gcGx1cyBhbmQgbWludXMgemVybyBpbiB2YXJpb3VzIHJvdW5kaW5nIG1vZGVzIChzZWUgaXNzdWUgMTExMzEpCitleHRlbmRlZDogMQorcHJlY2lzaW9uOiA5CittYXhleHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCityb3VuZGluZzogaGFsZl9ldmVuCitwbHV4MTAwMCBwbHVzIDAuMCAtPiAwLjAKK3BsdXgxMDAxIHBsdXMgLTAuMCAtPiAwLjAKK21pbngxMDAwIG1pbnVzIDAuMCAtPiAwLjAKK21pbngxMDAxIG1pbnVzIC0wLjAgLT4gMC4wCithYnN4MTAwMCBhYnMgMC4wIC0+IDAuMAorYWJzeDEwMDEgYWJzIC0wLjAgLT4gMC4wCisKK3JvdW5kaW5nOiBoYWxmX3VwCitwbHV4MTAxMCBwbHVzIDAuMCAtPiAwLjAKK21pbngxMDEwIG1pbnVzIDAuMCAtPiAwLjAKK3BsdXgxMDExIHBsdXMgLTAuMCAtPiAwLjAKK21pbngxMDExIG1pbnVzIC0wLjAgLT4gMC4wCithYnN4MTAxMCBhYnMgMC4wIC0+IDAuMAorYWJzeDEwMTEgYWJzIC0wLjAgLT4gMC4wCisKK3JvdW5kaW5nOiBjZWlsaW5nCitwbHV4MTAyMCBwbHVzIDAuMCAtPiAwLjAKK21pbngxMDIwIG1pbnVzIDAuMCAtPiAwLjAKK3BsdXgxMDIxIHBsdXMgLTAuMCAtPiAwLjAKK21pbngxMDIxIG1pbnVzIC0wLjAgLT4gMC4wCithYnN4MTAyMCBhYnMgMC4wIC0+IDAuMAorYWJzeDEwMjEgYWJzIC0wLjAgLT4gMC4wCisKK3JvdW5kaW5nOiBmbG9vcgorcGx1eDEwMzAgcGx1cyAwLjAgLT4gMC4wCittaW54MTAzMCBtaW51cyAwLjAgLT4gLTAuMAorcGx1eDEwMzEgcGx1cyAtMC4wIC0+IC0wLjAKK21pbngxMDMxIG1pbnVzIC0wLjAgLT4gMC4wCithYnN4MTAzMCBhYnMgMC4wIC0+IDAuMAorYWJzeDEwMzEgYWJzIC0wLjAgLT4gMC4wCisKK3JvdW5kaW5nOiBkb3duCitwbHV4MTA0MCBwbHVzIDAuMCAtPiAwLjAKK21pbngxMDQwIG1pbnVzIDAuMCAtPiAwLjAKK3BsdXgxMDQxIHBsdXMgLTAuMCAtPiAwLjAKK21pbngxMDQxIG1pbnVzIC0wLjAgLT4gMC4wCithYnN4MTA0MCBhYnMgMC4wIC0+IDAuMAorYWJzeDEwNDEgYWJzIC0wLjAgLT4gMC4wCisKK3JvdW5kaW5nOiB1cAorcGx1eDEwNTAgcGx1cyAwLjAgLT4gMC4wCittaW54MTA1MCBtaW51cyAwLjAgLT4gMC4wCitwbHV4MTA1MSBwbHVzIC0wLjAgLT4gMC4wCittaW54MTA1MSBtaW51cyAtMC4wIC0+IDAuMAorYWJzeDEwNTAgYWJzIDAuMCAtPiAwLjAKK2Fic3gxMDUxIGFicyAtMC4wIC0+IDAuMAorCityb3VuZGluZzogaGFsZl9kb3duCitwbHV4MTA2MCBwbHVzIDAuMCAtPiAwLjAKK21pbngxMDYwIG1pbnVzIDAuMCAtPiAwLjAKK3BsdXgxMDYxIHBsdXMgLTAuMCAtPiAwLjAKK21pbngxMDYxIG1pbnVzIC0wLjAgLT4gMC4wCithYnN4MTA2MCBhYnMgMC4wIC0+IDAuMAorYWJzeDEwNjEgYWJzIC0wLjAgLT4gMC4wCisKK3JvdW5kaW5nOiAwNXVwCitwbHV4MTA3MCBwbHVzIDAuMCAtPiAwLjAKK21pbngxMDcwIG1pbnVzIDAuMCAtPiAwLjAKK3BsdXgxMDcxIHBsdXMgLTAuMCAtPiAwLjAKK21pbngxMDcxIG1pbnVzIC0wLjAgLT4gMC4wCithYnN4MTA3MCBhYnMgMC4wIC0+IDAuMAorYWJzeDEwNzEgYWJzIC0wLjAgLT4gMC4wCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ZtYS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODE5N2VmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdApAQCAtMCwwICsxLDM0MjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZm1hLmRlY1Rlc3QgLS0gZGVjaW1hbCBmdXNlZCBtdWx0aXBseSBhZGQgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoKKy0tICAgMS4gU2FuaXR5IGNoZWNrcyBhbmQgb3RoZXIgdGhyZWUtb3BlcmFuZCB0ZXN0cyAoZXNwZWNpYWxseSB0aG9zZQorLS0gICAgICB3aGVyZSB0aGUgZnVzZWQgb3BlcmF0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSkKKy0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkKKy0tICAgMy4gQWRkaXRpb24gdGVzdHMgKGZpcnN0IG9wZXJhbmQgaXMgMSkKKy0tIFRoZSBtdWx0aXBseSBhbmQgYWRkaXRpb24gdGVzdHMgYXJlIGV4dGVuc2l2ZSBiZWNhdXNlIEZNQSBtYXkgaGF2ZQorLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkKKy0tIGFsc28gaW5oZXJlbnRseSBjaGVjayB0aGUgbGVmdC10by1yaWdodCBwcm9wZXJ0aWVzLgorCistLSBTYW5pdHkgY2hlY2tzCitmbWF4MDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDIKK2ZtYXgwMDAyIGZtYSAgMSAgIDEgICAyIC0+ICAgMworZm1heDAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3CitmbWF4MDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTAKK2ZtYXgwMDA1IGZtYSAtMSAgIDEgICAxIC0+ICAgMAorZm1heDAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxCitmbWF4MDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTEKK2ZtYXgwMDA4IGZtYSAtOSAgIDkgICA5IC0+IC03MgorZm1heDAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwCitmbWF4MDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDEKK2ZtYXgwMDEzIGZtYSAgMiAgLTIgICAzIC0+ICAtMQorZm1heDAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyCitmbWF4MDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDAKK2ZtYXgwMDE2IGZtYSAgMSAgIDEgIC0yIC0+ICAtMQorZm1heDAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxCitmbWF4MDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzIKK2ZtYXgwMDE5IGZtYSAgMyAgIDUgICA3IC0+ICAyMgorZm1heDAwMjkgZm1hICAzICAtNSAgIDcgLT4gIC04CisKKy0tIG5vbi1pbnRlZ2VyIGV4YWN0cworZm1hMDEwMCAgZm1hICAgIDI1LjIgICA2My42ICAgLTQzOCAgLT4gIDExNjQuNzIKK2ZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwCitmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44NgorZm1hMDEwMyAgZm1hICAgIDQuMjIgIDAuMDc5ICAtOTQuNiAgLT4gIC05NC4yNjY2MgorZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgKK2ZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzCitmbWEwMTA2ICBmbWEgICAgMjguMiAgICA3MjcgICA1LjQ1ICAtPiAgMjA1MDYuODUKK2ZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4CitmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzCitmbWEwMTA5ICBmbWEgICAwLjE2OSAgIC0zNDEgICA1LjYxICAtPiAgLTUyLjAxOQorZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjIKK2ZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMKK2ZtYTAxMTIgIGZtYSAgICAgMzE3ICAgNzcuMCAgIDE5LjAgIC0+ICAyNDQyOC4wCitmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4CitmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNAorZm1hMDExNSAgZm1hICAgIDcyLjcgICAgMjc0ICAgMS41NiAgLT4gIDE5OTIxLjM2CitmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4CitmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMgorZm1hMDExOCAgZm1hICAgLTMuODcgICAzLjA2ICAgNzguMCAgLT4gIDY2LjE1NzgKK2ZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0CitmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTEKKworLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoCistLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZAorLS0gW3RoaXMgaXMgYWJvdXQgMjAlIG9mIGFsbCBzaW1pbGFyICBjYXNlcyBpbiBnZW5lcmFsXQorLS0gICAgICAgICAgICAgICA4ODg1NjUyOTAgICAxNTU3Ljk2OTMwICAtODYwODcuNzU3OCAgLT4gMS4zODQzNTczNUUrMTIKK2ZtYTAyMDEgIGZtYSAgICAgODg4NTY1MjkwICAgMTU1Ny45NjkzMCAgLTg2MDg3Ljc1NzggIC0+IDEuMzg0MzU3MzZFKzEyICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgIC04NTUxOTM0Mi45ICAgIDczNTE1NTQxOSAgICAgNDIwMTA0MzEgIC0+IC02LjI4NzAwMDg0RSsxNgorZm1hMDIwNSAgZm1hICAgLTg1NTE5MzQyLjkgICAgNzM1MTU1NDE5ICAgICA0MjAxMDQzMSAgLT4gLTYuMjg3MDAwODNFKzE2IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgLTk4MDI1LjUgIC0yOTQ2MDMuNDcyICAgMTA0MTQzNDguMiAgLT4gMi44ODg5MDY2OUUrMTAKK2ZtYTAyMDggIGZtYSAgICAgIC05ODAyNS41ICAtMjk0NjAzLjQ3MiAgIDEwNDE0MzQ4LjIgIC0+IDIuODg4OTA2NzBFKzEwICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICA1OTY3NjI3LjM5ICAgODM1MjY1NDAuNiAgIDQ5ODQ5NC44MTAgIC0+IDQuOTg0NTUyNzFFKzE0CitmbWEwMjExICBmbWEgICAgNTk2NzYyNy4zOSAgIDgzNTI2NTQwLjYgICA0OTg0OTQuODEwICAtPiA0Ljk4NDU1MjcyRSsxNCAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgIDM0NTYuOTQzMyAgICA4NzQuMzk1MTggICAxOTc4NjYuNjE1ICAtPiAgMzIyMDYwMS4xOAorZm1hMDIxNiAgZm1hICAgICAzNDU2Ljk0MzMgICAgODc0LjM5NTE4ICAgMTk3ODY2LjYxNSAgLT4gIDMyMjA2MDEuMTcgICAgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgIDYyNzY5LjgyODcgICAyMDk2Ljk4OTI3ICAgIDQ4LjQyMDMxNyAgLT4gIDEzMTYyNzcwNQorZm1hMDIxOCAgZm1hICAgIDYyNzY5LjgyODcgICAyMDk2Ljk4OTI3ICAgIDQ4LjQyMDMxNyAgLT4gIDEzMTYyNzcwNiAgICAgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAtNjguODE1MDAgICA1OTk2MTExMy45ICAgICAtODk4ODg2MiAgLT4gLTQuMTM1MjEyOTFFKzkKK2ZtYTAyMTkgIGZtYSAgICAgLTY4LjgxNTAwICAgNTk5NjExMTMuOSAgICAgLTg5ODg4NjIgIC0+IC00LjEzNTIxMjkyRSs5ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAyMTI2MzQxLjAyICAgNjM0OTEuNTE1MiAgICAzMDI0Mjc0NTUgIC0+IDEuMzUzMDcwNDBFKzExCitmbWEwMjI2ICBmbWEgICAgMjEyNjM0MS4wMiAgIDYzNDkxLjUxNTIgICAgMzAyNDI3NDU1ICAtPiAxLjM1MzA3MDQxRSsxMSAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gSW5maW5pdGUgY29tYmluYXRpb25zCitmbWF4MDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2ZtYXgwODAxIGZtYSAgSW5mICAgSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwODAyIGZtYSAgSW5mICAtSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQorZm1heDA4MDQgZm1hIC1JbmYgICBJbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA4MDUgZm1hIC1JbmYgICBJbmYgIC1JbmYgICAgLT4gLUluZmluaXR5CitmbWF4MDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2ZtYXgwODA3IGZtYSAtSW5mICAtSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwODA4IGZtYSAtSW5mICAgMCAgICAgICAxICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwODA5IGZtYSAtSW5mICAgMCAgICAgTmFOICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gVHJpcGxlIE5hTiBwcm9wYWdhdGlvbgorZm1heDA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjIKK2ZtYXgwOTAxIGZtYSAgMCAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zCitmbWF4MDkwMiBmbWEgIDAgICAgIDAgICAgIE5hTjUgICAtPiAgTmFONQorLS0gZmlyc3Qgc05hTiB3aW5zIChjb25zaWRlciBxTmFOIGZyb20gZWFybGllciBzTmFOIGJlaW5nCistLSBvdmVycmlkZGVuIGJ5IGFuIHNOYU4gaW4gdGhpcmQgb3BlcmFuZCkKK2ZtYXgwOTAzIGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDkwNCBmbWEgIDAgICAgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA5MDUgZm1hICAwICAgICAwICAgICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwOTA2IGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDkwNyBmbWEgIE5hTjcgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA5MDggZm1hICBOYU43ICBOYU41ICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTVVMVElQTElDQVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK2ZtYXgyMDAwIGZtYSAyICAgICAgMiAgMEUrOTk5OTk5ICAtPiA0CitmbWF4MjAwMSBmbWEgMiAgICAgIDMgIDBFKzk5OTk5OSAgLT4gNgorZm1heDIwMDIgZm1hIDUgICAgICAxICAwRSs5OTk5OTkgIC0+IDUKK2ZtYXgyMDAzIGZtYSA1ICAgICAgMiAgMEUrOTk5OTk5ICAtPiAxMAorZm1heDIwMDQgZm1hIDEuMjAgICAyICAwRSs5OTk5OTkgIC0+IDIuNDAKK2ZtYXgyMDA1IGZtYSAxLjIwICAgMCAgMEUrOTk5OTk5ICAtPiAwLjAwCitmbWF4MjAwNiBmbWEgMS4yMCAgLTIgIDBFKzk5OTk5OSAgLT4gLTIuNDAKK2ZtYXgyMDA3IGZtYSAtMS4yMCAgMiAgMEUrOTk5OTk5ICAtPiAtMi40MAorZm1heDIwMDggZm1hIC0xLjIwICAwICAwRSs5OTk5OTkgIC0+IDAuMDAKK2ZtYXgyMDA5IGZtYSAtMS4yMCAtMiAgMEUrOTk5OTk5ICAtPiAyLjQwCitmbWF4MjAxMCBmbWEgNS4wOSA3LjEgIDBFKzk5OTk5OSAgLT4gMzYuMTM5CitmbWF4MjAxMSBmbWEgMi41ICAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMAorZm1heDIwMTIgZm1hIDIuNTAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAwCitmbWF4MjAxMyBmbWEgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODkgUm91bmRlZAorZm1heDIwMTQgZm1hIDkuOTk5OTk5OTk5IDkuOTk5OTk5OTk5ICAwRSs5OTk5OTkgIC0+IDEwMC4wMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MjAxNSBmbWEgMi41MCAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMDAKK3ByZWNpc2lvbjogNgorZm1heDIwMTYgZm1hIDIuNTAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAwCitmbWF4MjAxNyBmbWEgIDkuOTk5OTk5ICA5Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDE4IGZtYSAgOS45OTk5OTkgLTkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC0xMDAuMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDIwMTkgZm1hIC05Ljk5OTk5OSAgOS45OTk5OTkgIDBFKzk5OTk5OSAgLT4gLTEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MjAyMCBmbWEgLTkuOTk5OTk5IC05Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gMTk5OS4xMi4yMTogbmV4dCBvbmUgaXMgYSBlZGdlIGNhc2UgaWYgaW50ZXJtZWRpYXRlIGxvbmdzIGFyZSB1c2VkCitwcmVjaXNpb246IDE1CitmbWF4MjA1OSBmbWEgOTk5OTk5OTk5OTk5IDk3NjU2MjUgIDBFKzk5OTk5OSAgLT4gOS43NjU2MjQ5OTk5OTAyM0UrMTggSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCitmbWF4MjE2MCBmbWEgOTk5OTk5OTk5OTk5IDk3NjU2MjUgIDBFKzk5OTk5OSAgLT4gOTc2NTYyNDk5OTk5MDIzNDM3NQorcHJlY2lzaW9uOiA5CistLS0tLQorCistLSB6ZXJvcywgZXRjLgorZm1heDIwMjEgZm1hICAwICAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyMDIyIGZtYSAgMCAgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjAyMyBmbWEgLTAgICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDIwMjQgZm1hIC0wICAgICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyMDI1IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjAyNiBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDIwMjcgZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyMDI4IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjAzMCBmbWEgIDUuMDAgICAxRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDUwMAorZm1heDIwMzEgZm1hICAwMC4wMCAgMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAKK2ZtYXgyMDMyIGZtYSAgMDAuMDAgIDBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZm1heDIwMzMgZm1hICAwRS0zICAgMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitmbWF4MjAzNCBmbWEgLTUuMDAgICAxRS0zICAgMEUrOTk5OTk5ICAtPiAtMC4wMDUwMAorZm1heDIwMzUgZm1hIC0wMC4wMCAgMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAKK2ZtYXgyMDM2IGZtYSAtMDAuMDAgIDBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZm1heDIwMzcgZm1hIC0wRS0zICAgMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitmbWF4MjAzOCBmbWEgIDUuMDAgIC0xRS0zICAgMEUrOTk5OTk5ICAtPiAtMC4wMDUwMAorZm1heDIwMzkgZm1hICAwMC4wMCAtMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAKK2ZtYXgyMDQwIGZtYSAgMDAuMDAgLTBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZm1heDIwNDEgZm1hICAwRS0zICAtMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitmbWF4MjA0MiBmbWEgLTUuMDAgIC0xRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDUwMAorZm1heDIwNDMgZm1hIC0wMC4wMCAtMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAKK2ZtYXgyMDQ0IGZtYSAtMDAuMDAgLTBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZm1heDIwNDUgZm1hIC0wRS0zICAtMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGggbXVsdGlwbHkKK2ZtYXgyMDUwIGZtYSAxLjIwIDMgICAgICAgICAwRSs5OTk5OTkgIC0+IDMuNjAKK2ZtYXgyMDUxIGZtYSA3ICAgIDMgICAgICAgICAwRSs5OTk5OTkgIC0+IDIxCitmbWF4MjA1MiBmbWEgMC45ICAwLjggICAgICAgMEUrOTk5OTk5ICAtPiAwLjcyCitmbWF4MjA1MyBmbWEgMC45ICAtMCAgICAgICAgMEUrOTk5OTk5ICAtPiAwLjAKK2ZtYXgyMDU0IGZtYSA2NTQzMjEgNjU0MzIxICAwRSs5OTk5OTkgIC0+IDQuMjgxMzU5NzFFKzExICBJbmV4YWN0IFJvdW5kZWQKKworZm1heDIwNjAgZm1hIDEyMy40NSAxZTcgICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzkKK2ZtYXgyMDYxIGZtYSAxMjMuNDUgMWU4ICAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxMAorZm1heDIwNjIgZm1hIDEyMy40NSAxZSs5ICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzExCitmbWF4MjA2MyBmbWEgMTIzLjQ1IDFlMTAgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTIKK2ZtYXgyMDY0IGZtYSAxMjMuNDUgMWUxMSAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxMworZm1heDIwNjUgZm1hIDEyMy40NSAxZTEyICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzE0CitmbWF4MjA2NiBmbWEgMTIzLjQ1IDFlMTMgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTUKKworCistLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMKK3ByZWNpc2lvbjogOQorZm1heDIwODAgZm1hIDAuMSAxMjM0NTY3ODkgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQorZm1heDIwODEgZm1hIDAuMSAxMjM0NTY3ODkxICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorZm1heDIwODIgZm1hIDAuMSAxMjM0NTY3ODkxMiAgICAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDgzIGZtYSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzEyIEluZXhhY3QgUm91bmRlZAorZm1heDIwODQgZm1hIDAuMSAxMjM0NTY3ODkgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQorcHJlY2lzaW9uOiA4CitmbWF4MjA4NSBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA4NiBmbWEgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzEyIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA3CitmbWF4MjA4NyBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDg4IGZtYSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiA5CitmbWF4MjA5MCBmbWEgMTIzNDU2Nzg5ICAgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3OC45CitmbWF4MjA5MSBmbWEgMTIzNDU2Nzg5MSAgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA5MiBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDIwOTMgZm1hIDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OUUrMTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA5NCBmbWEgMTIzNDU2Nzg5ICAgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3OC45CitwcmVjaXNpb246IDgKK2ZtYXgyMDk1IGZtYSAxMjM0NTY3ODkxMiAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDk2IGZtYSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3OUUrMTIgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDcKK2ZtYXgyMDk3IGZtYSAxMjM0NTY3ODkxMiAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDIwOTggZm1hIDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzCittYXhleHBvbmVudDogOTk5OQorbWluZXhwb25lbnQ6IC05OTk5CitwcmVjaXNpb246IDMzCitmbWF4MjEwMSBmbWEgOSA5ICAgIDBFKzk5OTk5OSAgLT4gODEKK2ZtYXgyMTAyIGZtYSA5IDkwICAgIDBFKzk5OTk5OSAgLT4gODEwCitmbWF4MjEwMyBmbWEgOSA5MDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwCitmbWF4MjEwNCBmbWEgOSA5MDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAKK2ZtYXgyMTA1IGZtYSA5IDkwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwCitmbWF4MjEwNiBmbWEgOSA5MDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwCitmbWF4MjEwNyBmbWEgOSA5MDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAKK2ZtYXgyMTA4IGZtYSA5IDkwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwCitmbWF4MjEwOSBmbWEgOSA5MDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwCitmbWF4MjExMCBmbWEgOSA5MDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAKK2ZtYXgyMTExIGZtYSA5IDkwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwCitmbWF4MjExMiBmbWEgOSA5MDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwCitmbWF4MjExMyBmbWEgOSA5MDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAKK2ZtYXgyMTE0IGZtYSA5IDkwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwCitmbWF4MjExNSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwCitmbWF4MjExNiBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTE3IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjExOCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjExOSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTIwIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjEyMSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjEyMiBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTIzIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2FycmllcworZm1heDIxMzEgZm1hIDMgMyAgICAwRSs5OTk5OTkgIC0+IDkKK2ZtYXgyMTMyIGZtYSAzIDMwICAgIDBFKzk5OTk5OSAgLT4gOTAKK2ZtYXgyMTMzIGZtYSAzIDMwMCAgICAwRSs5OTk5OTkgIC0+IDkwMAorZm1heDIxMzQgZm1hIDMgMzAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAKK2ZtYXgyMTM1IGZtYSAzIDMwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAKK2ZtYXgyMTM2IGZtYSAzIDMwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMAorZm1heDIxMzcgZm1hIDMgMzAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAKK2ZtYXgyMTM4IGZtYSAzIDMwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAKK2ZtYXgyMTM5IGZtYSAzIDMwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMAorZm1heDIxNDAgZm1hIDMgMzAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAKK2ZtYXgyMTQxIGZtYSAzIDMwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAKK2ZtYXgyMTQyIGZtYSAzIDMwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMAorZm1heDIxNDMgZm1hIDMgMzAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ0IGZtYSAzIDMwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ1IGZtYSAzIDMwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMAorZm1heDIxNDYgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ3IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ4IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxNDkgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTUwIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTUxIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxNTIgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTUzIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworbWF4ZXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK3ByZWNpc2lvbjogOQorLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93L3VuZGVyZmxvdworZm1heDIxNzAgZm1hIDEgOWU5OTk5OTkgICAgIDBFKzk5OTk5OSAgLT4gOUUrOTk5OTk5CitmbWF4MjE3MSBmbWEgMSA5LjllOTk5OTk5ICAgMEUrOTk5OTk5ICAtPiA5LjlFKzk5OTk5OQorZm1heDIxNzIgZm1hIDEgOS45OWU5OTk5OTkgIDBFKzk5OTk5OSAgLT4gOS45OUUrOTk5OTk5CitmbWF4MjE3MyBmbWEgOWU5OTk5OTkgICAgMSAgMEUrOTk5OTk5ICAtPiA5RSs5OTk5OTkKK2ZtYXgyMTc0IGZtYSA5LjllOTk5OTk5ICAxICAwRSs5OTk5OTkgIC0+IDkuOUUrOTk5OTk5CitmbWF4MjE3NiBmbWEgOS45OWU5OTk5OTkgMSAgMEUrOTk5OTk5ICAtPiA5Ljk5RSs5OTk5OTkKK2ZtYXgyMTc3IGZtYSAxIDkuOTk5OTllOTk5OTk5ICAwRSs5OTk5OTkgIC0+IDkuOTk5OTlFKzk5OTk5OQorZm1heDIxNzggZm1hIDkuOTk5OTllOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gOS45OTk5OUUrOTk5OTk5CisKK2ZtYXgyMTgwIGZtYSAwLjEgOWUtOTk5OTk4ICAgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk5CitmbWF4MjE4MSBmbWEgMC4xIDk5ZS05OTk5OTggICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk4CitmbWF4MjE4MiBmbWEgMC4xIDk5OWUtOTk5OTk4ICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5NworCitmbWF4MjE4MyBmbWEgMC4xIDllLTk5OTk5OCAgICAgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk5CitmbWF4MjE4NCBmbWEgMC4xIDk5ZS05OTk5OTggICAgIDBFKzk5OTk5OSAgLT4gOS45RS05OTk5OTgKK2ZtYXgyMTg1IGZtYSAwLjEgOTk5ZS05OTk5OTggICAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTcKK2ZtYXgyMTg2IGZtYSAwLjEgOTk5ZS05OTk5OTcgICAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTYKK2ZtYXgyMTg3IGZtYSAwLjEgOTk5OWUtOTk5OTk3ICAgMEUrOTk5OTk5ICAtPiA5Ljk5OUUtOTk5OTk1CitmbWF4MjE4OCBmbWEgMC4xIDk5OTk5ZS05OTk5OTcgIDBFKzk5OTk5OSAgLT4gOS45OTk5RS05OTk5OTQKKworZm1heDIxOTAgZm1hIDEgOWUtOTk5OTk4ICAgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk4CitmbWF4MjE5MSBmbWEgMSA5OWUtOTk5OTk4ICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5NworZm1heDIxOTIgZm1hIDEgOTk5ZS05OTk5OTggIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2CitmbWF4MjE5MyBmbWEgOWUtOTk5OTk4ICAgMSAgMEUrOTk5OTk5ICAtPiA5RS05OTk5OTgKK2ZtYXgyMTk0IGZtYSA5OWUtOTk5OTk4ICAxICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk3CitmbWF4MjE5NSBmbWEgOTk5ZS05OTk5OTggMSAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTYKKworLS0gbG9uZyBvcGVyYW5kIHRyaWFuZ2xlCitwcmVjaXNpb246IDMzCitmbWF4MjI0NiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyODMwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMgorZm1heDIyNDcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgzICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzEKK2ZtYXgyMjQ4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCitmbWF4MjI0OSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkzICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOQorZm1heDIyNTAgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjgKK2ZtYXgyMjUxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTIwICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI3CitmbWF4MjI1MiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTEyICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNgorZm1heDIyNTMgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjUKK2ZtYXgyMjU0IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI0CitmbWF4MjI1NSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE3ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMworZm1heDIyNTYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkyICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjIKK2ZtYXgyMjU3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIxCitmbWF4MjI1OCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcyICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMAorZm1heDIyNTkgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTkKK2ZtYXgyMjYwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk3ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE4CitmbWF4MjI2MSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzcwICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNworZm1heDIyNjIgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM3ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTYKK2ZtYXgyMjYzIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTM0ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE1CitmbWF4MjI2NCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNAorZm1heDIyNjUgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5ICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTMKK2ZtYXgyMjY2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDEyICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEyCitmbWF4MjI2NyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMQorZm1heDIyNjggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAKK2ZtYXgyMjY5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4ICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA5CitmbWF4MjI3MCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkxICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgOAorZm1heDIyNzEgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDcKK2ZtYXgyMjcyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4zICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA2CitmbWF4MjI3MyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA1CitmbWF4MjI3NCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1NDNFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA0CitmbWF4MjI3NSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1NEUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMKK2ZtYXgyMjc2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDEuNDVFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyCitmbWF4MjI3NyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjVFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxCitmbWF4MjI3OCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxRSs1ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZworbWF4ZXhwb25lbnQ6IDk5OTkKK21pbmV4cG9uZW50OiAtOTk5OQorcHJlY2lzaW9uOiA5CitmbWF4MjMwMSBmbWEgOSA5ICAgIDBFKzk5OTk5OSAgLT4gODEKK2ZtYXgyMzAyIGZtYSA5IDkwICAgIDBFKzk5OTk5OSAgLT4gODEwCitmbWF4MjMwMyBmbWEgOSA5MDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwCitmbWF4MjMwNCBmbWEgOSA5MDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAKK2ZtYXgyMzA1IGZtYSA5IDkwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwCitmbWF4MjMwNiBmbWEgOSA5MDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwCitmbWF4MjMwNyBmbWEgOSA5MDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAKK2ZtYXgyMzA4IGZtYSA5IDkwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwCitmbWF4MjMwOSBmbWEgOSA5MDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSs5ICAgUm91bmRlZAorZm1heDIzMTAgZm1hIDkgOTAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEwICBSb3VuZGVkCitmbWF4MjMxMSBmbWEgOSA5MDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzExICBSb3VuZGVkCitmbWF4MjMxMiBmbWEgOSA5MDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMiAgUm91bmRlZAorZm1heDIzMTMgZm1hIDkgOTAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEzICBSb3VuZGVkCitmbWF4MjMxNCBmbWEgOSA5MDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE0ICBSb3VuZGVkCitmbWF4MjMxNSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNSAgUm91bmRlZAorZm1heDIzMTYgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE2ICBSb3VuZGVkCitmbWF4MjMxNyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE3ICBSb3VuZGVkCitmbWF4MjMxOCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxOCAgUm91bmRlZAorZm1heDIzMTkgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE5ICBSb3VuZGVkCitmbWF4MjMyMCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIwICBSb3VuZGVkCitmbWF4MjMyMSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMSAgUm91bmRlZAorZm1heDIzMjIgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIyICBSb3VuZGVkCitmbWF4MjMyMyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIzICBSb3VuZGVkCisKKy0tIGZhc3RwYXRoIGJyZWFrZXJzCitwcmVjaXNpb246ICAgMjkKK2ZtYXgyMzMwIGZtYSAxLjQ5MTgyNDY5NzY0MTI3MDMxNzgyNDg1Mjk1MjgzNzIyNCAxLjEwNTE3MDkxODA3NTY0NzYyNDgxMTcwNzgyNjQ5MDI0NjUxNDY3NTYyODYxNDU2Mjg4MzUzNzM0NTc0NzYwMyAgMEUrOTk5OTk5ICAtPiAxLjY0ODcyMTI3MDcwMDEyODE0Njg0ODY1MDc4NzggSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNTUKK2ZtYXgyMzMxIGZtYSAwLjg5NTgzNDEzNTI5NjUyODI1MDY3Njg1NDU4Mjg3NjUxMTc4MDM4NzM3MTcyODQ4OTEwNDA0MjggMC44OTU4MzQxMzUyOTY1MjgyNTA2NzY4NTQ1ODI4NzY1MTE3ODAzODczNzE3Mjg0ODkxMDQwNDI4ICAwRSs5OTk5OTkgIC0+IDAuODAyNTE4Nzk3OTYyNDc4NDgyOTg0MjU1MzgyOTkzNDA2OTk1NTg5MDk4MzY5Njc1MjIyODI5OSBJbmV4YWN0IFJvdW5kZWQKKworCistLSB0cnl6ZXJvcyBjYXNlcworcHJlY2lzaW9uOiAgIDcKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTIKK21pbmV4cG9uZW50OiAtOTIKK2ZtYXgyNTA0ICBmbWEgIDBFLTYwIDEwMDBFLTYwICAgMEUrOTk5OTk5ICAtPiAwRS05OCBDbGFtcGVkCitmbWF4MjUwNSAgZm1hICAxMDBFKzYwIDBFKzYwICAgIDBFKzk5OTk5OSAgLT4gMEUrOTIgQ2xhbXBlZAorCistLSBtaXhlZCB3aXRoIHplcm9zCittYXhleHBvbmVudDogOTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OQorcHJlY2lzaW9uOiA5CitmbWF4MjU0MSBmbWEgIDAgICAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0MiBmbWEgLTAgICAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0MyBmbWEgIDAgICAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0NCBmbWEgLTAgICAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0NSBmbWEgLTEgICAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0NiBmbWEgLTEgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0NyBmbWEgIDEgICAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0OCBmbWEgIDEgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwCisKK2ZtYXgyNTUxIGZtYSAgMC4wICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTIgZm1hIC0wLjAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU1MyBmbWEgIDAuMCAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTU0IGZtYSAtMC4wICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTUgZm1hIC0xLjAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU1NiBmbWEgLTEuMCAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTU3IGZtYSAgMS4wICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTggZm1hICAxLjAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCisKK2ZtYXgyNTYxIGZtYSAgMCAgICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjIgZm1hIC0wICAgIC0xLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU2MyBmbWEgIDAgICAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTY0IGZtYSAtMCAgICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjUgZm1hIC0xICAgICAwLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU2NiBmbWEgLTEgICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTY3IGZtYSAgMSAgICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjggZm1hICAxICAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCisKK2ZtYXgyNTcxIGZtYSAgMC4wICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTcyIGZtYSAtMC4wICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTczIGZtYSAgMC4wICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc0IGZtYSAtMC4wICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc1IGZtYSAtMS4wICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc2IGZtYSAtMS4wICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc3IGZtYSAgMS4wICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc4IGZtYSAgMS4wICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKKworCistLSBTcGVjaWFscworZm1heDI1ODAgZm1hICBJbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNTgxIGZtYSAgSW5mICAtMTAwMCAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjU4MiBmbWEgIEluZiAgLTEgICAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI1ODMgZm1hICBJbmYgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI1ODQgZm1hICBJbmYgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI1ODUgZm1hICBJbmYgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNTg2IGZtYSAgSW5mICAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjU4NyBmbWEgIEluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI1ODggZm1hIC0xMDAwICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNTg5IGZtYSAtSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjU5MCBmbWEgLTEgICAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI1OTEgZm1hIC0wICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI1OTIgZm1hICAwICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI1OTMgZm1hICAxICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNTk0IGZtYSAgMTAwMCAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjU5NSBmbWEgIEluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorCitmbWF4MjYwMCBmbWEgLUluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI2MDEgZm1hIC1JbmYgIC0xMDAwICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNjAyIGZtYSAtSW5mICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjYwMyBmbWEgLUluZiAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjYwNCBmbWEgLUluZiAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjYwNSBmbWEgLUluZiAgIDEgICAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI2MDYgZm1hIC1JbmYgICAxMDAwICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNjA3IGZtYSAtSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjYwOCBmbWEgLTEwMDAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI2MDkgZm1hIC1JbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNjEwIGZtYSAtMSAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjYxMSBmbWEgLTAgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjYxMiBmbWEgIDAgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjYxMyBmbWEgIDEgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI2MTQgZm1hICAxMDAwIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNjE1IGZtYSAgSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CisKK2ZtYXgyNjIxIGZtYSAgTmFOIC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjIgZm1hICBOYU4gLTEwMDAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyMyBmbWEgIE5hTiAtMSAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjI0IGZtYSAgTmFOIC0wICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjUgZm1hICBOYU4gIDAgICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyNiBmbWEgIE5hTiAgMSAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjI3IGZtYSAgTmFOICAxMDAwICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjggZm1hICBOYU4gIEluZiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyOSBmbWEgIE5hTiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjMwIGZtYSAtSW5mICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzEgZm1hIC0xMDAwIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzMiBmbWEgLTEgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjMzIGZtYSAtMCAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzQgZm1hICAwICAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzNSBmbWEgIDEgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjM2IGZtYSAgMTAwMCBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzcgZm1hICBJbmYgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCisKK2ZtYXgyNjQxIGZtYSAgc05hTiAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQyIGZtYSAgc05hTiAtMTAwMCAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQzIGZtYSAgc05hTiAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ0IGZtYSAgc05hTiAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ1IGZtYSAgc05hTiAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ2IGZtYSAgc05hTiAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ3IGZtYSAgc05hTiAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ4IGZtYSAgc05hTiAgTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ5IGZtYSAgc05hTiBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjUwIGZtYSAgTmFOICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjUxIGZtYSAtSW5mICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjUyIGZtYSAtMTAwMCBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjUzIGZtYSAtMSAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU0IGZtYSAtMCAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU1IGZtYSAgMCAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU2IGZtYSAgMSAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU3IGZtYSAgMTAwMCBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU4IGZtYSAgSW5mICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU5IGZtYSAgTmFOICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZm1heDI2NjEgZm1hICBOYU45IC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOOQorZm1heDI2NjIgZm1hICBOYU44ICA5OTkgICAgMEUrOTk5OTk5ICAtPiAgTmFOOAorZm1heDI2NjMgZm1hICBOYU43MSBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFONzEKK2ZtYXgyNjY0IGZtYSAgTmFONiAgTmFONSAgIDBFKzk5OTk5OSAgLT4gIE5hTjYKK2ZtYXgyNjY1IGZtYSAtSW5mICAgTmFONCAgIDBFKzk5OTk5OSAgLT4gIE5hTjQKK2ZtYXgyNjY2IGZtYSAtOTk5ICAgTmFOMzMgIDBFKzk5OTk5OSAgLT4gIE5hTjMzCitmbWF4MjY2NyBmbWEgIEluZiAgIE5hTjIgICAwRSs5OTk5OTkgIC0+ICBOYU4yCisKK2ZtYXgyNjcxIGZtYSAgc05hTjk5IC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3MiBmbWEgIHNOYU45OCAtMTEgICAgICAwRSs5OTk5OTkgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzMgZm1hICBzTmFOOTcgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjc0IGZtYSAgc05hTjE2IHNOYU45NCAgIDBFKzk5OTk5OSAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3NSBmbWEgIE5hTjk1ICBzTmFOOTMgICAwRSs5OTk5OTkgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzYgZm1hIC1JbmYgICAgc05hTjkyICAgMEUrOTk5OTk5ICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjc3IGZtYSAgMDg4ICAgIHNOYU45MSAgIDBFKzk5OTk5OSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3OCBmbWEgIEluZiAgICBzTmFOOTAgICAwRSs5OTk5OTkgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzkgZm1hICBOYU4gICAgc05hTjg5ICAgMEUrOTk5OTk5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZm1heDI2ODEgZm1hIC1OYU45IC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFOOQorZm1heDI2ODIgZm1hIC1OYU44ICA5OTkgICAgMEUrOTk5OTk5ICAtPiAtTmFOOAorZm1heDI2ODMgZm1hIC1OYU43MSBJbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFONzEKK2ZtYXgyNjg0IGZtYSAtTmFONiAtTmFONSAgIDBFKzk5OTk5OSAgLT4gLU5hTjYKK2ZtYXgyNjg1IGZtYSAtSW5mICAtTmFONCAgIDBFKzk5OTk5OSAgLT4gLU5hTjQKK2ZtYXgyNjg2IGZtYSAtOTk5ICAtTmFOMzMgIDBFKzk5OTk5OSAgLT4gLU5hTjMzCitmbWF4MjY4NyBmbWEgIEluZiAgLU5hTjIgICAwRSs5OTk5OTkgIC0+IC1OYU4yCisKK2ZtYXgyNjkxIGZtYSAtc05hTjk5IC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5MiBmbWEgLXNOYU45OCAtMTEgICAgICAwRSs5OTk5OTkgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTMgZm1hIC1zTmFOOTcgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjk0IGZtYSAtc05hTjE2IC1zTmFOOTQgIDBFKzk5OTk5OSAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5NSBmbWEgLU5hTjk1ICAtc05hTjkzICAwRSs5OTk5OTkgIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTYgZm1hIC1JbmYgICAgLXNOYU45MiAgMEUrOTk5OTk5ICAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjk3IGZtYSAgMDg4ICAgIC1zTmFOOTEgIDBFKzk5OTk5OSAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5OCBmbWEgIEluZiAgICAtc05hTjkwICAwRSs5OTk5OTkgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTkgZm1hIC1OYU4gICAgLXNOYU44OSAgMEUrOTk5OTk5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZm1heDI3MDEgZm1hIC1OYU4gIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFOCitmbWF4MjcwMiBmbWEgLU5hTiAgIDk5OSAgICAwRSs5OTk5OTkgIC0+IC1OYU4KK2ZtYXgyNzAzIGZtYSAtTmFOICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTgorZm1heDI3MDQgZm1hIC1OYU4gIC1OYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOCitmbWF4MjcwNSBmbWEgLUluZiAgLU5hTjAgICAwRSs5OTk5OTkgIC0+IC1OYU4KK2ZtYXgyNzA2IGZtYSAtOTk5ICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTgorZm1heDI3MDcgZm1hICBJbmYgIC1OYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOCisKK2ZtYXgyNzExIGZtYSAtc05hTiAgIC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTIgZm1hIC1zTmFOICAgLTExICAgICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxMyBmbWEgLXNOYU4wMCAgTmFOICAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzE0IGZtYSAtc05hTiAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTUgZm1hIC1OYU4gICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxNiBmbWEgLUluZiAgICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzE3IGZtYSAgMDg4ICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTggZm1hICBJbmYgICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxOSBmbWEgLU5hTiAgICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCittYXhleHBvbmVudDogOTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OQorZm1heDI3MzAgZm1hICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgyNzMxIGZtYSA5RSs5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4MjczMiBmbWEgKzAuMTAwIDlFLTk5OTk5OSAgMEUrOTk5OTk5ICAtPiA5LjAwRS0xMDAwMDAwIFN1Ym5vcm1hbAorZm1heDI3MzMgZm1hIDlFLTk5OTk5OSArMC4xMDAgIDBFKzk5OTk5OSAgLT4gOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwKK2ZtYXgyNzM1IGZtYSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTkgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDI3MzYgZm1hIDlFKzk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4MjczNyBmbWEgLTAuMTAwIDlFLTk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwKK2ZtYXgyNzM4IGZtYSA5RS05OTk5OTkgLTAuMTAwICAwRSs5OTk5OTkgIC0+IC05LjAwRS0xMDAwMDAwIFN1Ym5vcm1hbAorCistLSBzaWducworZm1heDI3NTEgZm1hICAxZSs3Nzc3NzcgIDFlKzQxMTExMSAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc1MiBmbWEgIDFlKzc3Nzc3NyAtMWUrNDExMTExICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzUzIGZtYSAtMWUrNzc3Nzc3ICAxZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NTQgZm1hIC0xZSs3Nzc3NzcgLTFlKzQxMTExMSAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc1NSBmbWEgIDFlLTc3Nzc3NyAgMWUtNDExMTExICAwRSs5OTk5OTkgIC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyNzU2IGZtYSAgMWUtNzc3Nzc3IC0xZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI3NTcgZm1hIC0xZS03Nzc3NzcgIDFlLTQxMTExMSAgMEUrOTk5OTk5ICAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4Mjc1OCBmbWEgLTFlLTc3Nzc3NyAtMWUtNDExMTExICAwRSs5OTk5OTkgIC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitwcmVjaXNpb246IDkKK2ZtYXgyNzYwIGZtYSAxZS02MDAwMDAgMWUtNDAwMDAxICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDEgU3Vibm9ybWFsCitmbWF4Mjc2MSBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwMiAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDAyIFN1Ym5vcm1hbAorZm1heDI3NjIgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDMgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwKK2ZtYXgyNzYzIGZtYSAxZS02MDAwMDAgMWUtNDAwMDA0ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDQgU3Vibm9ybWFsCitmbWF4Mjc2NCBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA1IFN1Ym5vcm1hbAorZm1heDI3NjUgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDYgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNiBTdWJub3JtYWwKK2ZtYXgyNzY2IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDcgU3Vibm9ybWFsCitmbWF4Mjc2NyBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwOCAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyNzY4IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA5ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI3NjkgZm1hIDFlLTYwMDAwMCAxZS00MDAwMTAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitmbWF4Mjc3MCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzcxIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDAyICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzIgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDMgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3MyBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzc0IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA1ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzUgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDYgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3NiBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNyAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzc3IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA4ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzggZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDkgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3OSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAxMCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gJ3N1Ym5vcm1hbCcgdGVzdCBlZGdlIGNvbmRpdGlvbiBhdCBoaWdoZXIgcHJlY2lzaW9ucworcHJlY2lzaW9uOiA5OQorZm1heDI3ODAgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNyBTdWJub3JtYWwKK2ZtYXgyNzgxIGZtYSAxZS02MDAwMDAgMWUtNDAwMDA4ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDggU3Vibm9ybWFsCitmbWF4Mjc4MiBmbWEgMWUtNjAwMDAwIDFlLTQwMDA5NyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDk3IFN1Ym5vcm1hbAorZm1heDI3ODMgZm1hIDFlLTYwMDAwMCAxZS00MDAwOTggIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDA5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwcmVjaXNpb246IDk5OQorZm1heDI3ODQgZm1hIDFlLTYwMDAwMCAxZS00MDA5OTcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDk5NyBTdWJub3JtYWwKK2ZtYXgyNzg1IGZtYSAxZS02MDAwMDAgMWUtNDAwOTk4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDA5OTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSB0ZXN0IHN1Ym5vcm1hbHMgcm91bmRpbmcKK3ByZWNpc2lvbjogICA1CittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitmbWF4MjgwMSBmbWEgIDEuMDAwMEUtOTk5ICAxICAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDBFLTk5OQorZm1heDI4MDIgZm1hICAxLjAwMEUtOTk5ICAgMWUtMSAgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTEwMDAgU3Vibm9ybWFsCitmbWF4MjgwMyBmbWEgIDEuMDBFLTk5OSAgICAxZS0yICAgMEUrOTk5OTk5ICAtPiAxLjAwRS0xMDAxICBTdWJub3JtYWwKK2ZtYXgyODA0IGZtYSAgMS4wRS05OTkgICAgIDFlLTMgICAwRSs5OTk5OTkgIC0+IDEuMEUtMTAwMiAgIFN1Ym5vcm1hbAorZm1heDI4MDUgZm1hICAxLjBFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyODA2IGZtYSAgMS4zRS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgwNyBmbWEgIDEuNUUtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MDggZm1hICAxLjdFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODA5IGZtYSAgMi4zRS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxMCBmbWEgIDIuNUUtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTEgZm1hICAyLjdFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gM0UtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODEyIGZtYSAgMS40OUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxMyBmbWEgIDEuNTBFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTQgZm1hICAxLjUxRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODE1IGZtYSAgMi40OUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxNiBmbWEgIDIuNTBFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTcgZm1hICAyLjUxRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gM0UtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDI4MTggZm1hICAxRS05OTkgICAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgU3Vibm9ybWFsCitmbWF4MjgxOSBmbWEgIDNFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4MjgyMCBmbWEgIDVFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4MjgyMSBmbWEgIDdFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MjIgZm1hICA5RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODIzIGZtYSAgOS45RS05OTkgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgyODI0IGZtYSAgMUUtOTk5ICAgICAgLTFlLTQgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFN1Ym5vcm1hbAorZm1heDI4MjUgZm1hICAzRS05OTkgICAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI4MjYgZm1hIC01RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI4MjcgZm1hICA3RS05OTkgICAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODI4IGZtYSAtOUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgyOSBmbWEgIDkuOUUtOTk5ICAgIC0xZS01ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MzAgZm1hICAzLjBFLTk5OSAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitmbWF4MjgzMSBmbWEgIDEuMEUtNTAxICAgICAxZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wRS0xMDAyICAgU3Vibm9ybWFsCitmbWF4MjgzMiBmbWEgIDIuMEUtNTAxICAgICAyZS01MDEgIDBFKzk5OTk5OSAgLT4gNC4wRS0xMDAyICAgU3Vibm9ybWFsCitmbWF4MjgzMyBmbWEgIDQuMEUtNTAxICAgICA0ZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42MEUtMTAwMSAgU3Vibm9ybWFsCitmbWF4MjgzNCBmbWEgMTAuMEUtNTAxICAgIDEwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTEwMDAgU3Vibm9ybWFsCitmbWF4MjgzNSBmbWEgMzAuMEUtNTAxICAgIDMwZS01MDEgIDBFKzk5OTk5OSAgLT4gOS4wMDBFLTEwMDAgU3Vibm9ybWFsCitmbWF4MjgzNiBmbWEgNDAuMEUtNTAxICAgIDQwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42MDAwRS05OTkKKworLS0gc3F1YXJlcworZm1heDI4NDAgZm1hICAxRS01MDIgICAgICAgMWUtNTAyICAwRSs5OTk5OTkgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyODQxIGZtYSAgMUUtNTAxICAgICAgIDFlLTUwMSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAyICAgICBTdWJub3JtYWwKK2ZtYXgyODQyIGZtYSAgMkUtNTAxICAgICAgIDJlLTUwMSAgMEUrOTk5OTk5ICAtPiA0RS0xMDAyICAgICBTdWJub3JtYWwKK2ZtYXgyODQzIGZtYSAgNEUtNTAxICAgICAgIDRlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjZFLTEwMDEgICBTdWJub3JtYWwKK2ZtYXgyODQ0IGZtYSAxMEUtNTAxICAgICAgMTBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjAwRS0xMDAwICBTdWJub3JtYWwKK2ZtYXgyODQ1IGZtYSAzMEUtNTAxICAgICAgMzBlLTUwMSAgMEUrOTk5OTk5ICAtPiA5LjAwRS0xMDAwICBTdWJub3JtYWwKK2ZtYXgyODQ2IGZtYSA0MEUtNTAxICAgICAgNDBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjYwMEUtOTk5CisKKy0tIGN1YmVzCitmbWF4Mjg1MCBmbWEgIDFFLTY3MCAgICAgMWUtMzM1ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI4NTEgZm1hICAxRS02NjggICAgIDFlLTMzNCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAyICAgIFN1Ym5vcm1hbAorZm1heDI4NTIgZm1hICA0RS02NjggICAgIDJlLTMzNCAgMEUrOTk5OTk5ICAtPiA4RS0xMDAyICAgIFN1Ym5vcm1hbAorZm1heDI4NTMgZm1hICA5RS02NjggICAgIDNlLTMzNCAgMEUrOTk5OTk5ICAtPiAyLjdFLTEwMDEgIFN1Ym5vcm1hbAorZm1heDI4NTQgZm1hIDE2RS02NjggICAgIDRlLTMzNCAgMEUrOTk5OTk5ICAtPiA2LjRFLTEwMDEgIFN1Ym5vcm1hbAorZm1heDI4NTUgZm1hIDI1RS02NjggICAgIDVlLTMzNCAgMEUrOTk5OTk5ICAtPiAxLjI1RS0xMDAwIFN1Ym5vcm1hbAorZm1heDI4NTYgZm1hIDEwRS02NjggICAxMDBlLTMzNCAgMEUrOTk5OTk5ICAtPiAxLjAwMEUtOTk5CisKKy0tIHRlc3QgZGVyaXZlZCBmcm9tIHJlc3VsdCBvZiAwLjA5OSAqKiA5OTkgYXQgMTUgZGlnaXRzIHdpdGggdW5saW1pdGVkIGV4cG9uZW50CitwcmVjaXNpb246IDE5CitmbWF4Mjg2MCBmbWEgIDY2MzY4NTE1NTc5OTQ1Nzg3MTZFLTUyMCA2NjM2ODUxNTU3OTk0NTc4NzE2RS01MjAgIDBFKzk5OTk5OSAgLT4gNC40MDQ3Nzk4NjAyODU1MUUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK3ByZWNpc2lvbjogMworbWF4RXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK2ZtYXgyODcwIGZtYSAxICA5Ljk5OUUrOTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDI4NzEgZm1hIDEgLTkuOTk5RSs5OTk5OTkgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4Mjg3MiBmbWEgICAgOS45OTlFKzk5OTk5OSAxICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgyODczIGZtYSAgIC05Ljk5OUUrOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworcHJlY2lzaW9uOiAgIDUKK21heGV4cG9uZW50OiA3OQorbWluZXhwb25lbnQ6IC03OQorZm1heDI4ODEgZm1hICAxLjIzNDdFLTQwICAxLjIzNDdFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjRFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDI4ODIgZm1hICAxLjIzNEUtNDAgIDEuMjM0RS00MCAgICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDI4ODMgZm1hICAxLjIzRS00MCAgIDEuMjNFLTQwICAgICAgMEUrOTk5OTk5ICAtPiAgMS41MTNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDI4ODQgZm1hICAxLjJFLTQwICAgIDEuMkUtNDAgICAgICAgMEUrOTk5OTk5ICAtPiAgMS40NEUtODAgICBTdWJub3JtYWwKK2ZtYXgyODg1IGZtYSAgMS4yRS00MCAgICAxLjJFLTQxICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNDRFLTgxICAgU3Vibm9ybWFsCitmbWF4Mjg4NiBmbWEgIDEuMkUtNDAgICAgMS4yRS00MiAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjRFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4Mjg4NyBmbWEgIDEuMkUtNDAgICAgMS4zRS00MiAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjZFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4Mjg4OCBmbWEgIDEuM0UtNDAgICAgMS4zRS00MiAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjdFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4Mjg4OSBmbWEgIDEuM0UtNDAgICAgMS4zRS00MyAgICAgICAwRSs5OTk5OTkgIC0+ICAgIDJFLTgzICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4Mjg5MCBmbWEgIDEuM0UtNDEgICAgMS4zRS00MyAgICAgICAwRSs5OTk5OTkgIC0+ICAgIDBFLTgzICAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworZm1heDI4OTEgZm1hICAxLjIzNDVFLTM5ICAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjM0RS03OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODkyIGZtYSAgMS4yMzQ1NkUtMzkgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzNEUtNzkgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjg5MyBmbWEgIDEuMjM0NUUtNDAgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mjg5NCBmbWEgIDEuMjM0NTZFLTQwICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mjg5NSBmbWEgIDEuMjM0NUUtNDEgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyRS04MSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mjg5NiBmbWEgIDEuMjM0NTZFLTQxICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyRS04MSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKK2ZtYXgyOTAwIGZtYSAgMC4zMDAwMDAwMDAwRS0xOTEgMC4zMDAwMDAwMDAwRS0xOTEgIDBFKzk5OTk5OSAgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkwMSBmbWEgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxICAwRSs5OTk5OTkgIC0+IDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MDIgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5MDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTAzIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OSAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkwNCBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5ICAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MDUgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdAorZm1heDI5MDYgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAxICAgICAgICAgICAgICAgICAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCitmbWF4MjkwNyBmbWEgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAwRSs5OTk5OTkgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkKKy0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluCitmbWF4MjkwOCBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTA5IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTkgICAgIDBFKzk5OTk5OSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MTAgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTkgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkxMSBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTkgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCitmbWF4MjkyMSAgZm1hIDEzMEUtMiAgMTIwRS0yICAwRSs5OTk5OTkgIC0+IDEuNTYwMAorZm1heDI5MjIgIGZtYSAxMzBFLTIgIDEyRS0xICAgMEUrOTk5OTk5ICAtPiAxLjU2MAorZm1heDI5MjMgIGZtYSAxMzBFLTIgIDFFMCAgICAgMEUrOTk5OTk5ICAtPiAxLjMwCisKKy0tIE51bGwgdGVzdHMKK2ZtYXgyOTkwIGZtYSAgIyAxMCAgMEUrOTk5OTk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyOTkxIGZtYSAxMCAgIyAgMEUrOTk5OTk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQURESVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZm1heDMwMDEgZm1hICAxICAgMSAgICAgICAxICAgICAgIC0+ICAyCitmbWF4MzAwMiBmbWEgIDEgICAyICAgICAgIDMgICAgICAgLT4gIDUKK2ZtYXgzMDAzIGZtYSAgMSAgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQorZm1heDMwMDQgZm1hICAxICAgJzUnICAgICAnLTMnICAgIC0+ICAyCitmbWF4MzAwNSBmbWEgIDEgICAnLTUnICAgICctMycgICAgLT4gIC04CitmbWF4MzAwNiBmbWEgIDEgICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUKK2ZtYXgzMDA3IGZtYSAgMSAgICcwLjcnICAgJzAuMycgICAtPiAgMS4wCitmbWF4MzAwOCBmbWEgIDEgICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKK2ZtYXgzMDA5IGZtYSAgMSAgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5JworZm1heDMwMTAgZm1hICAxICAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCisKK2ZtYXgzMDExIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxMiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQwJyAgJzAuNTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMTMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxNCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0OScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxNSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0OTknICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxNiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0OTk5JyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxNyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MDAwJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxOCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MDAxJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxOSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MDEnICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAyMCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzMDIxIGZtYSAgMSAgIDAgMSAtPiAxCitmbWF4MzAyMiBmbWEgIDEgICAxIDEgLT4gMgorZm1heDMwMjMgZm1hICAxICAgMiAxIC0+IDMKK2ZtYXgzMDI0IGZtYSAgMSAgIDMgMSAtPiA0CitmbWF4MzAyNSBmbWEgIDEgICA0IDEgLT4gNQorZm1heDMwMjYgZm1hICAxICAgNSAxIC0+IDYKK2ZtYXgzMDI3IGZtYSAgMSAgIDYgMSAtPiA3CitmbWF4MzAyOCBmbWEgIDEgICA3IDEgLT4gOAorZm1heDMwMjkgZm1hICAxICAgOCAxIC0+IDkKK2ZtYXgzMDMwIGZtYSAgMSAgIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2ZtYXgzMDMxIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZm1heDMwMzIgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCitmbWF4MzAzMyBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2ZtYXgzMDM0IGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJworCitmbWF4MzAzNSBmbWEgIDEgICAnNzAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAzNiBmbWEgIDEgICAnNzAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMzcgZm1hICAxICAgJzcwMDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAzOCBmbWEgIDEgICAnNzAwMDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAxRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAzOSBmbWEgIDEgICAnNzAwMDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwN0UrMTMnIFJvdW5kZWQKKworLS0gc3ltbWV0cnk6CitmbWF4MzA0MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA0MSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwNDIgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA0NCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAxRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA0NSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwN0UrMTMnIFJvdW5kZWQKKworLS0gc2FtZSwgaGlnaGVyIHByZWNpc2lvbgorcHJlY2lzaW9uOiAxNQorZm1heDMwNDYgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2ZtYXgzMDQ3IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJworZm1heDMwNDggZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJworZm1heDMwNDkgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2ZtYXgzMDUwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJworZm1heDMwNTEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJworZm1heDMwNTIgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZm1heDMwNTMgZm1hICAxICAgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJworZm1heDMwNTQgZm1hICAxICAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKK2ZtYXgzMDU1IGZtYSAgMSAgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnCitmbWF4MzA1NiBmbWEgIDEgICAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKK2ZtYXgzMDU3IGZtYSAgMSAgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCisKKy0tIHplcm8gcHJlc2VydmF0aW9uCitwcmVjaXNpb246IDYKK2ZtYXgzMDYwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEuMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDYxIGZtYSAgMSAgIDEgJzAuMDAwMScgLT4gJzEuMDAwMScKK2ZtYXgzMDYyIGZtYSAgMSAgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJworZm1heDMwNjMgZm1hICAxICAgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDY0IGZtYSAgMSAgIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMwNjUgZm1hICAxICAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitmbWF4MzA3MCBmbWEgIDEgICAxICAwICAgIC0+IDEKK2ZtYXgzMDcxIGZtYSAgMSAgIDEgMC4gICAgLT4gMQorZm1heDMwNzIgZm1hICAxICAgMSAgLjAgICAtPiAxLjAKK2ZtYXgzMDczIGZtYSAgMSAgIDEgMC4wICAgLT4gMS4wCitmbWF4MzA3NCBmbWEgIDEgICAxIDAuMDAgIC0+IDEuMDAKK2ZtYXgzMDc1IGZtYSAgMSAgICAwICAxICAgLT4gMQorZm1heDMwNzYgZm1hICAxICAgMC4gIDEgICAtPiAxCitmbWF4MzA3NyBmbWEgIDEgICAgLjAgMSAgIC0+IDEuMAorZm1heDMwNzggZm1hICAxICAgMC4wIDEgICAtPiAxLjAKK2ZtYXgzMDc5IGZtYSAgMSAgIDAuMDAgMSAgLT4gMS4wMAorCitwcmVjaXNpb246IDkKKworLS0gc29tZSBjYXJyaWVzCitmbWF4MzA4MCBmbWEgIDEgICA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5CitmbWF4MzA4MSBmbWEgIDEgICA5OTk5OTk5OTkgMSAgLT4gMS4wMDAwMDAwMEUrOSBSb3VuZGVkCitmbWF4MzA4MiBmbWEgIDEgICAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwCitmbWF4MzA4MyBmbWEgIDEgICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKK2ZtYXgzMDg0IGZtYSAgMSAgICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwCitmbWF4MzA4NSBmbWEgIDEgICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwCitmbWF4MzA4NiBmbWEgIDEgICAgICAgIDk5OTkgMSAgLT4gMTAwMDAKK2ZtYXgzMDg3IGZtYSAgMSAgICAgICAgIDk5OSAxICAtPiAxMDAwCitmbWF4MzA4OCBmbWEgIDEgICAgICAgICAgOTkgMSAgLT4gMTAwCitmbWF4MzA4OSBmbWEgIDEgICAgICAgICAgIDkgMSAgLT4gMTAKKworCistLSBtb3JlIExIUyBzd2FwcworZm1heDMwOTAgZm1hICAxICAgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitmbWF4MzA5MSBmbWEgIDEgICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JworZm1heDMwOTIgZm1hICAxICAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworZm1heDMwOTMgZm1hICAxICAgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitmbWF4MzA5NCBmbWEgIDEgICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKK2ZtYXgzMDk1IGZtYSAgMSAgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworZm1heDMwOTYgZm1hICAxICAgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitmbWF4MzA5NyBmbWEgIDEgICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JworZm1heDMwOTggZm1hICAxICAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2ZtYXgzMDk5IGZtYSAgMSAgICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2ZtYXgzMTAwIGZtYSAgMSAgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCitmbWF4MzEwMSBmbWEgIDEgICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitmbWF4MzEwMiBmbWEgIDEgICAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2ZtYXgzMTAzIGZtYSAgMSAgICctNUUtMScgICAgICAgIDAgLT4gICctMC41JworZm1heDMxMDQgZm1hICAxICAgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworZm1heDMxMDUgZm1hICAxICAgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2ZtYXgzMTA2IGZtYSAgMSAgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJworZm1heDMxMDcgZm1hICAxICAgJy01RTgnICAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAnCitmbWF4MzEwOCBmbWEgIDEgICAnLTVFOScgICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzknICAgUm91bmRlZAorZm1heDMxMDkgZm1hICAxICAgJy01RTEwJyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMCcgIFJvdW5kZWQKK2ZtYXgzMTEwIGZtYSAgMSAgICctNUUxMScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTEnICBSb3VuZGVkCitmbWF4MzExMSBmbWEgIDEgICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZm1heDMxMTMgZm1hICAxICAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2ZtYXgzMTE0IGZtYSAgMSAgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2ZtYXgzMTE2IGZtYSAgMSAgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZm1heDMxMTcgZm1hICAxICAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2ZtYXgzMTE5IGZtYSAgMSAgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCitmbWF4MzEyMCBmbWEgIDEgICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZm1heDMxMjEgZm1hICAxICAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2ZtYXgzMTIyIGZtYSAgMSAgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2ZtYXgzMTIzIGZtYSAgMSAgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2ZtYXgzMTI0IGZtYSAgMSAgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZm1heDMxMjUgZm1hICAxICAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworZm1heDMxMjYgZm1hICAxICAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitmbWF4MzEyNyBmbWEgIDEgICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZm1heDMxMjggZm1hICAxICAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2ZtYXgzMTI5IGZtYSAgMSAgIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZm1heDMxMzAgZm1hICAxICAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZm1heDMxMzEgZm1hICAxICAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2ZtYXgzMTMyIGZtYSAgMSAgIDAgICctNUU4JyAgICAgICAtPiAgJy01MDAwMDAwMDAnCitmbWF4MzEzMyBmbWEgIDEgICAwICAnLTVFOScgICAgICAgLT4gICctNS4wMDAwMDAwMEUrOScgICAgUm91bmRlZAorZm1heDMxMzQgZm1hICAxICAgMCAgJy01RTEwJyAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzEwJyAgIFJvdW5kZWQKK2ZtYXgzMTM1IGZtYSAgMSAgIDAgICctNUUxMScgICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMScgICBSb3VuZGVkCitmbWF4MzEzNiBmbWEgIDEgICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCistLSByZWxhdGVkCitmbWF4MzEzNyBmbWEgIDEgICAgMSAgJzBFLTEyJyAgICAgIC0+ICAnMS4wMDAwMDAwMCcgIFJvdW5kZWQKK2ZtYXgzMTM4IGZtYSAgMSAgIC0xICAnMEUtMTInICAgICAgLT4gICctMS4wMDAwMDAwMCcgUm91bmRlZAorZm1heDMxMzkgZm1hICAxICAgJzBFLTEyJyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAnICBSb3VuZGVkCitmbWF4MzE0MCBmbWEgIDEgICAnMEUtMTInIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAnIFJvdW5kZWQKK2ZtYXgzMTQxIGZtYSAgMSAgIDFFKzQgICAgMC4wMDAwICAgLT4gICcxMDAwMC4wMDAwJworZm1heDMxNDIgZm1hICAxICAgMUUrNCAgICAwLjAwMDAwICAtPiAgJzEwMDAwLjAwMDAnICBSb3VuZGVkCitmbWF4MzE0MyBmbWEgIDEgICAwLjAwMCAgIDFFKzUgICAgIC0+ICAnMTAwMDAwLjAwMCcKK2ZtYXgzMTQ0IGZtYSAgMSAgIDAuMDAwMCAgMUUrNSAgICAgLT4gICcxMDAwMDAuMDAwJyAgUm91bmRlZAorCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQorZm1heDMxNDYgZm1hICAxICAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJworZm1heDMxNDcgZm1hICAxICAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcKK2ZtYXgzMTQ4IGZtYSAgMSAgICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCitmbWF4MzE0OSBmbWEgIDEgICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCitmbWF4MzE1MCBmbWEgIDEgICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJworZm1heDMxNTEgZm1hICAxICAgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKK2ZtYXgzMTUyIGZtYSAgMSAgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzMTUzIGZtYSAgMSAgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzMTU0IGZtYSAgMSAgICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzMTU1IGZtYSAgMSAgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCitmbWF4MzE1NiBmbWEgIDEgICAnMycgICAgICczJyAgICAgLT4gICc2JworZm1heDMxNTcgZm1hICAxICAgJzMnICAgICAnKzMnICAgIC0+ICAnNicKK2ZtYXgzMTU4IGZtYSAgMSAgICczJyAgICAgJy0zJyAgICAtPiAgJzAnCitmbWF4MzE1OSBmbWEgIDEgICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnCitmbWF4MzE2MCBmbWEgIDEgICAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorcHJlY2lzaW9uOiAxNQorZm1heDMxNjEgZm1hICAxICAgJzFFKzEyJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTknCitmbWF4MzE2MiBmbWEgIDEgICAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzE2MyBmbWEgIDEgICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzE2NCBmbWEgIDEgICAnLTEnICAgICcxRSsxMicgLT4gJzk5OTk5OTk5OTk5OScKK2ZtYXgzMTY1IGZtYSAgMSAgICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScKK2ZtYXgzMTY2IGZtYSAgMSAgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzMTY3IGZtYSAgMSAgICcxLjExJyAgJzdFKzEyJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzMTY4IGZtYSAgMSAgICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScKKworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1ICAgICAgMTIzNDU2Nzg5MDEyMzQ1ICAgICAgMSAyMzQ1Njc4OTAxMjM0NQorZm1heDMxNzAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTYzJyAtPiAnMS4wMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTcyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZm1heDMxNzMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTYwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3NCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTc1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMxNzYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU3JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3NyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitmbWF4MzE3OCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OScKK2ZtYXgzMTc5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk4JworZm1heDMxODAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTcnCitmbWF4MzE4MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5NicKK2ZtYXgzMTgyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MScgLT4gJzAuOTk5OTk5OTk5OTk5OTk1JworZm1heDMxODMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTQnCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3ByZWNpc2lvbjogOQorcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzMjAwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKK2ZtYXgzMjAxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjA0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDYgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjA3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDkgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjEwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxMSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjEzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxNCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjE2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcKK2ZtYXgzMjE3IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDMyMjAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JworZm1heDMyMjEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjIyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjI1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjcgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjI4IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzAgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjMxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjM0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzYgZm1hICAxICAgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2NzkwJworZm1heDMyMzcgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjM4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2ZtYXgzMjQwIGZtYSAgMSAgICcxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI0MSBmbWEgIDEgICAnMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNDIgZm1hICAxICAgJzEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2ZtYXgzMjUwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKK2ZtYXgzMjUxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1MiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjU0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1NSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTYgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjU3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1OCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTkgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjYwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2MSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjYzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2NCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjY2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcKK2ZtYXgzMjY3IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2OCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gaW5wdXQgcHJlcGFyYXRpb24gdGVzdHMgKG9wZXJhbmRzIHNob3VsZCBub3QgYmUgcm91bmRlZCkKK3ByZWNpc2lvbjogMworcm91bmRpbmc6IGhhbGZfdXAKKworZm1heDMyNzAgZm1hICAxICAgJzEyMzQ1Njc4OTAwMDAwJyAgOTk5OTk5OTk5OTk5OSAtPiAgJzIuMjNFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjcxIGZtYSAgMSAgICAnOTk5OTk5OTk5OTk5OScgMTIzNDU2Nzg5MDAwMDAgLT4gICcyLjIzRSsxMycgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzMjcyIGZtYSAgMSAgICcxMkUrMycgICczNDQ0JyAgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI3MyBmbWEgIDEgICAnMTJFKzMnICAnMzQ0NicgICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNzQgZm1hICAxICAgJzEyRSszJyAgJzM0NDkuOScgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjc1IGZtYSAgMSAgICcxMkUrMycgICczNDUwLjAnIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI3NiBmbWEgIDEgICAnMTJFKzMnICAnMzQ1MC4xJyAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNzcgZm1hICAxICAgJzEyRSszJyAgJzM0NTQnICAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjc4IGZtYSAgMSAgICcxMkUrMycgICczNDU2JyAgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzMjgxIGZtYSAgMSAgICczNDQ0JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI4MiBmbWEgIDEgICAnMzQ0NicgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyODMgZm1hICAxICAgJzM0NDkuOScgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjg0IGZtYSAgMSAgICczNDUwLjAnICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI4NSBmbWEgIDEgICAnMzQ1MC4xJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyODYgZm1hICAxICAgJzM0NTQnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjg3IGZtYSAgMSAgICczNDU2JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzMjkxIGZtYSAgMSAgICczNDQ0JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI5MiBmbWEgIDEgICAnMzQ0NicgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyOTMgZm1hICAxICAgJzM0NDkuOScgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjk0IGZtYSAgMSAgICczNDUwLjAnICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI5NSBmbWEgIDEgICAnMzQ1MC4xJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyOTYgZm1hICAxICAgJzM0NTQnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjk3IGZtYSAgMSAgICczNDU2JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzMzAxIGZtYSAgMSAgICAtMSAgIDEgICAgICAtPiAgIDAKK2ZtYXgzMzAyIGZtYSAgMSAgICAgMCAgIDEgICAgICAtPiAgIDEKK2ZtYXgzMzAzIGZtYSAgMSAgICAgMSAgIDEgICAgICAtPiAgIDIKK2ZtYXgzMzA0IGZtYSAgMSAgICAxMiAgIDEgICAgICAtPiAgMTMKK2ZtYXgzMzA1IGZtYSAgMSAgICA5OCAgIDEgICAgICAtPiAgOTkKK2ZtYXgzMzA2IGZtYSAgMSAgICA5OSAgIDEgICAgICAtPiAxMDAKK2ZtYXgzMzA3IGZtYSAgMSAgIDEwMCAgIDEgICAgICAtPiAxMDEKK2ZtYXgzMzA4IGZtYSAgMSAgIDEwMSAgIDEgICAgICAtPiAxMDIKK2ZtYXgzMzA5IGZtYSAgMSAgICAtMSAgLTEgICAgICAtPiAgLTIKK2ZtYXgzMzEwIGZtYSAgMSAgICAgMCAgLTEgICAgICAtPiAgLTEKK2ZtYXgzMzExIGZtYSAgMSAgICAgMSAgLTEgICAgICAtPiAgIDAKK2ZtYXgzMzEyIGZtYSAgMSAgICAxMiAgLTEgICAgICAtPiAgMTEKK2ZtYXgzMzEzIGZtYSAgMSAgICA5OCAgLTEgICAgICAtPiAgOTcKK2ZtYXgzMzE0IGZtYSAgMSAgICA5OSAgLTEgICAgICAtPiAgOTgKK2ZtYXgzMzE1IGZtYSAgMSAgIDEwMCAgLTEgICAgICAtPiAgOTkKK2ZtYXgzMzE2IGZtYSAgMSAgIDEwMSAgLTEgICAgICAtPiAxMDAKKworZm1heDMzMjEgZm1hICAxICAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2ZtYXgzMzIyIGZtYSAgMSAgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCitmbWF4MzMyMyBmbWEgIDEgICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorZm1heDMzMjQgZm1hICAxICAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2ZtYXgzMzI1IGZtYSAgMSAgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5CitmbWF4MzMyNiBmbWEgIDEgICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorZm1heDMzMjcgZm1hICAxICAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2ZtYXgzMzI4IGZtYSAgMSAgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCitmbWF4MzMyOSBmbWEgIDEgICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorZm1heDMzMzAgZm1hICAxICAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2ZtYXgzMzMxIGZtYSAgMSAgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCitmbWF4MzMzMiBmbWEgIDEgICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorZm1heDMzMzMgZm1hICAxICAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2ZtYXgzMzM0IGZtYSAgMSAgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4CitmbWF4MzMzNSBmbWEgIDEgICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorZm1heDMzMzYgZm1hICAxICAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGZtYSAgMSAgaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKK3ByZWNpc2lvbjogOQorZm1heDMzNDAgZm1hICAxICAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZm1heDMzNDEgZm1hICAxICAgMUUrOCAgICAwICAgIC0+ICAgIDEwMDAwMDAwMAorZm1heDMzNDIgZm1hICAxICAgMUUrOSAgICAwICAgIC0+ICAgMS4wMDAwMDAwMEUrOSAgIFJvdW5kZWQKK2ZtYXgzMzQzIGZtYSAgMSAgIDFFKzEwICAgMCAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitmbWF4MzM0NCBmbWEgIDEgICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitmbWF4MzM0NSBmbWEgIDEgICAxRSs4ICAgIDEgICAgLT4gICAgMTAwMDAwMDAxCitmbWF4MzM0NiBmbWEgIDEgICAxRSs5ICAgIDEgICAgLT4gICAxLjAwMDAwMDAwRSs5ICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzM0NyBmbWEgIDEgICAxRSsxMCAgIDEgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzM0OCBmbWEgIDEgICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CitmbWF4MzM0OSBmbWEgIDEgICAxRSs4ICAgIDcgICAgLT4gICAgMTAwMDAwMDA3CitmbWF4MzM1MCBmbWEgIDEgICAxRSs5ICAgIDcgICAgLT4gICAxLjAwMDAwMDAxRSs5ICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzM1MSBmbWEgIDEgICAxRSsxMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCitwcmVjaXNpb246ICAgNworcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5MgorbWluZXhwb25lbnQ6IC05MgorZm1heDMzNjEgIGZtYSAgMSAgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2ZtYXgzMzYyICBmbWEgIDEgICAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAgIFJvdW5kZWQKK2ZtYXgzMzYzICBmbWEgIDEgICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMzY0ICBmbWEgIDEgICA5Ljk5OTk5OUUrOTIgLTkuOTk5OTk5RSs5MiAtPiAwRSs4NgorCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCityb3VuZGluZzogICAgaGFsZl9kb3duCitwcmVjaXNpb246ICAgMTAKK2ZtYXgzMzcwIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQorcHJlY2lzaW9uOiAgICAgIDYKK2ZtYXgzMzcxIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEuMDAwODJFKzggUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorcHJlY2lzaW9uOiAgIDEwCitmbWF4MzM3MiBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxMDAwODE1MTEKK3ByZWNpc2lvbjogICAgICA2CitmbWF4MzM3MyBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorcHJlY2lzaW9uOiAgIDEwCitmbWF4MzM3NCBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxMDAwODE1MTEKK3ByZWNpc2lvbjogICAgICA2CitmbWF4MzM3NSBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK3ByZWNpc2lvbjogOQorbWF4ZXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK2ZtYXgzNDAwIGZtYSAgMSAgICAgMSAgIDc3ZS03ICAgICAgIC0+ICAxLjAwMDAwNzcKK2ZtYXgzNDAxIGZtYSAgMSAgICAgMSAgIDc3ZS04ICAgICAgIC0+ICAxLjAwMDAwMDc3CitmbWF4MzQwMiBmbWEgIDEgICAgIDEgICA3N2UtOSAgICAgICAtPiAgMS4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDAzIGZtYSAgMSAgICAgMSAgIDc3ZS0xMCAgICAgIC0+ICAxLjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM0MDQgZm1hICAxICAgICAxICAgNzdlLTExICAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQwNSBmbWEgIDEgICAgIDEgICA3N2UtMTIgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDA2IGZtYSAgMSAgICAgMSAgIDc3ZS05OTkgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MDcgZm1hICAxICAgICAxICAgNzdlLTk5OTk5OSAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDEwIGZtYSAgMSAgICAxMCAgIDc3ZS03ICAgICAgIC0+ICAxMC4wMDAwMDc3CitmbWF4MzQxMSBmbWEgIDEgICAgMTAgICA3N2UtOCAgICAgICAtPiAgMTAuMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDEyIGZtYSAgMSAgICAxMCAgIDc3ZS05ICAgICAgIC0+ICAxMC4wMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM0MTMgZm1hICAxICAgIDEwICAgNzdlLTEwICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQxNCBmbWEgIDEgICAgMTAgICA3N2UtMTEgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDE1IGZtYSAgMSAgICAxMCAgIDc3ZS0xMiAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MTYgZm1hICAxICAgIDEwICAgNzdlLTk5OSAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQxNyBmbWEgIDEgICAgMTAgICA3N2UtOTk5OTk5ICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0MjAgZm1hICAxICAgIDc3ZS03ICAgICAgICAxICAgLT4gIDEuMDAwMDA3NworZm1heDM0MjEgZm1hICAxICAgIDc3ZS04ICAgICAgICAxICAgLT4gIDEuMDAwMDAwNzcKK2ZtYXgzNDIyIGZtYSAgMSAgICA3N2UtOSAgICAgICAgMSAgIC0+ICAxLjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM0MjMgZm1hICAxICAgIDc3ZS0xMCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQyNCBmbWEgIDEgICAgNzdlLTExICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDI1IGZtYSAgMSAgICA3N2UtMTIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MjYgZm1hICAxICAgIDc3ZS05OTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQyNyBmbWEgIDEgICAgNzdlLTk5OTk5OSAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0MzAgZm1hICAxICAgIDc3ZS03ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwNzcKK2ZtYXgzNDMxIGZtYSAgMSAgICA3N2UtOCAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM0MzIgZm1hICAxICAgIDc3ZS05ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQzMyBmbWEgIDEgICAgNzdlLTEwICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDM0IGZtYSAgMSAgICA3N2UtMTEgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MzUgZm1hICAxICAgIDc3ZS0xMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQzNiBmbWEgIDEgICAgNzdlLTk5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDM3IGZtYSAgMSAgICA3N2UtOTk5OTk5ICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitmbWF4MzQ0MCBmbWEgIDEgICAgIDEgICAtNzdlLTcgICAgICAgLT4gIDAuOTk5OTkyMworZm1heDM0NDEgZm1hICAxICAgICAxICAgLTc3ZS04ICAgICAgIC0+ICAwLjk5OTk5OTIzCitmbWF4MzQ0MiBmbWEgIDEgICAgIDEgICAtNzdlLTkgICAgICAgLT4gIDAuOTk5OTk5OTIzCitmbWF4MzQ0MyBmbWEgIDEgICAgIDEgICAtNzdlLTEwICAgICAgLT4gIDAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM0NDQgZm1hICAxICAgICAxICAgLTc3ZS0xMSAgICAgIC0+ICAwLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDQ1IGZtYSAgMSAgICAgMSAgIC03N2UtMTIgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDQ2IGZtYSAgMSAgICAgMSAgIC03N2UtOTk5ICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDQ3IGZtYSAgMSAgICAgMSAgIC03N2UtOTk5OTk5ICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0NTAgZm1hICAxICAgIDEwICAgLTc3ZS03ICAgICAgIC0+ICAgOS45OTk5OTIzCitmbWF4MzQ1MSBmbWEgIDEgICAgMTAgICAtNzdlLTggICAgICAgLT4gICA5Ljk5OTk5OTIzCitmbWF4MzQ1MiBmbWEgIDEgICAgMTAgICAtNzdlLTkgICAgICAgLT4gICA5Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM0NTMgZm1hICAxICAgIDEwICAgLTc3ZS0xMCAgICAgIC0+ICAgOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDU0IGZtYSAgMSAgICAxMCAgIC03N2UtMTEgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDU1IGZtYSAgMSAgICAxMCAgIC03N2UtMTIgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDU2IGZtYSAgMSAgICAxMCAgIC03N2UtOTk5ICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDU3IGZtYSAgMSAgICAxMCAgIC03N2UtOTk5OTk5ICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0NjAgZm1hICAxICAgIC03N2UtNyAgICAgICAgMSAgIC0+ICAwLjk5OTk5MjMKK2ZtYXgzNDYxIGZtYSAgMSAgICAtNzdlLTggICAgICAgIDEgICAtPiAgMC45OTk5OTkyMworZm1heDM0NjIgZm1hICAxICAgIC03N2UtOSAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTkyMworZm1heDM0NjMgZm1hICAxICAgIC03N2UtMTAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDY0IGZtYSAgMSAgICAtNzdlLTExICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ2NSBmbWEgIDEgICAgLTc3ZS0xMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ2NiBmbWEgIDEgICAgLTc3ZS05OTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ2NyBmbWEgIDEgICAgLTc3ZS05OTk5OTkgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDcwIGZtYSAgMSAgICAtNzdlLTcgICAgICAgMTAgICAtPiAgIDkuOTk5OTkyMworZm1heDM0NzEgZm1hICAxICAgIC03N2UtOCAgICAgICAxMCAgIC0+ICAgOS45OTk5OTkyMworZm1heDM0NzIgZm1hICAxICAgIC03N2UtOSAgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDczIGZtYSAgMSAgICAtNzdlLTEwICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ3NCBmbWEgIDEgICAgLTc3ZS0xMSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ3NSBmbWEgIDEgICAgLTc3ZS0xMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ3NiBmbWEgIDEgICAgLTc3ZS05OTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ3NyBmbWEgIDEgICAgLTc3ZS05OTk5OTkgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2ZtYXgzNDgwIGZtYSAgMSAgICAtMSAgICA3N2UtNyAgICAgICAtPiAgLTAuOTk5OTkyMworZm1heDM0ODEgZm1hICAxICAgIC0xICAgIDc3ZS04ICAgICAgIC0+ICAtMC45OTk5OTkyMworZm1heDM0ODIgZm1hICAxICAgIC0xICAgIDc3ZS05ICAgICAgIC0+ICAtMC45OTk5OTk5MjMKK2ZtYXgzNDgzIGZtYSAgMSAgICAtMSAgICA3N2UtMTAgICAgICAtPiAgLTAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM0ODQgZm1hICAxICAgIC0xICAgIDc3ZS0xMSAgICAgIC0+ICAtMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ4NSBmbWEgIDEgICAgLTEgICAgNzdlLTEyICAgICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0ODYgZm1hICAxICAgIC0xICAgIDc3ZS05OTkgICAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDg3IGZtYSAgMSAgICAtMSAgICA3N2UtOTk5OTk5ICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDkwIGZtYSAgMSAgIC0xMCAgICA3N2UtNyAgICAgICAtPiAgIC05Ljk5OTk5MjMKK2ZtYXgzNDkxIGZtYSAgMSAgIC0xMCAgICA3N2UtOCAgICAgICAtPiAgIC05Ljk5OTk5OTIzCitmbWF4MzQ5MiBmbWEgIDEgICAtMTAgICAgNzdlLTkgICAgICAgLT4gICAtOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDkzIGZtYSAgMSAgIC0xMCAgICA3N2UtMTAgICAgICAtPiAgIC05Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM0OTQgZm1hICAxICAgLTEwICAgIDc3ZS0xMSAgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDk1IGZtYSAgMSAgIC0xMCAgICA3N2UtMTIgICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ5NiBmbWEgIDEgICAtMTAgICAgNzdlLTk5OSAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0OTcgZm1hICAxICAgLTEwICAgIDc3ZS05OTk5OTkgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM1MDAgZm1hICAxICAgICA3N2UtNyAgICAgICAtMSAgIC0+ICAtMC45OTk5OTIzCitmbWF4MzUwMSBmbWEgIDEgICAgIDc3ZS04ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTIzCitmbWF4MzUwMiBmbWEgIDEgICAgIDc3ZS05ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTkyMworZm1heDM1MDMgZm1hICAxICAgICA3N2UtMTAgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUwNCBmbWEgIDEgICAgIDc3ZS0xMSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTA1IGZtYSAgMSAgICAgNzdlLTEyICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUwNiBmbWEgIDEgICAgIDc3ZS05OTkgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM1MDcgZm1hICAxICAgICA3N2UtOTk5OTk5ICAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM1MTAgZm1hICAxICAgICA3N2UtNyAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTkyMworZm1heDM1MTEgZm1hICAxICAgICA3N2UtOCAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5MjMKK2ZtYXgzNTEyIGZtYSAgMSAgICAgNzdlLTkgICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM1MTMgZm1hICAxICAgICA3N2UtMTAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUxNCBmbWEgIDEgICAgIDc3ZS0xMSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM1MTUgZm1hICAxICAgICA3N2UtMTIgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTE2IGZtYSAgMSAgICAgNzdlLTk5OSAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUxNyBmbWEgIDEgICAgIDc3ZS05OTk5OTkgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvbmcgb3BlcmFuZHMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK2ZtYXgzNTIxIGZtYSAgMSAgIDEyMzQ1Njc4MDAwIDAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorZm1heDM1MjIgZm1hICAxICAgMCAxMjM0NTY3ODAwMCAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitmbWF4MzUyMyBmbWEgIDEgICAxMjM0NTY3ODAwICAwIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZm1heDM1MjQgZm1hICAxICAgMCAxMjM0NTY3ODAwICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK2ZtYXgzNTI1IGZtYSAgMSAgIDEyMzQ1Njc4OTAgIDAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitmbWF4MzUyNiBmbWEgIDEgICAwIDEyMzQ1Njc4OTAgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorZm1heDM1MjcgZm1hICAxICAgMTIzNDU2Nzg5MSAgMCAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDM1MjggZm1hICAxICAgMCAxMjM0NTY3ODkxICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDM1MjkgZm1hICAxICAgMTIzNDU2Nzg5MDEgMCAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTMwIGZtYSAgMSAgIDAgMTIzNDU2Nzg5MDEgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUzMSBmbWEgIDEgICAxMjM0NTY3ODk2ICAwIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUzMiBmbWEgIDEgICAwIDEyMzQ1Njc4OTYgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTUKKy0tIHN0aWxsIGNoZWNraW5nCitmbWF4MzU0MSBmbWEgIDEgICAxMjM0NTY3ODAwMCAwIC0+IDEyMzQ1Njc4MDAwCitmbWF4MzU0MiBmbWEgIDEgICAwIDEyMzQ1Njc4MDAwIC0+IDEyMzQ1Njc4MDAwCitmbWF4MzU0MyBmbWEgIDEgICAxMjM0NTY3ODAwICAwIC0+IDEyMzQ1Njc4MDAKK2ZtYXgzNTQ0IGZtYSAgMSAgIDAgMTIzNDU2NzgwMCAgLT4gMTIzNDU2NzgwMAorZm1heDM1NDUgZm1hICAxICAgMTIzNDU2Nzg5MCAgMCAtPiAxMjM0NTY3ODkwCitmbWF4MzU0NiBmbWEgIDEgICAwIDEyMzQ1Njc4OTAgIC0+IDEyMzQ1Njc4OTAKK2ZtYXgzNTQ3IGZtYSAgMSAgIDEyMzQ1Njc4OTEgIDAgLT4gMTIzNDU2Nzg5MQorZm1heDM1NDggZm1hICAxICAgMCAxMjM0NTY3ODkxICAtPiAxMjM0NTY3ODkxCitmbWF4MzU0OSBmbWEgIDEgICAxMjM0NTY3ODkwMSAwIC0+IDEyMzQ1Njc4OTAxCitmbWF4MzU1MCBmbWEgIDEgICAwIDEyMzQ1Njc4OTAxIC0+IDEyMzQ1Njc4OTAxCitmbWF4MzU1MSBmbWEgIDEgICAxMjM0NTY3ODk2ICAwIC0+IDEyMzQ1Njc4OTYKK2ZtYXgzNTUyIGZtYSAgMSAgIDAgMTIzNDU2Nzg5NiAgLT4gMTIzNDU2Nzg5NgorCistLSB2ZXJpZnkgYSBxdWVyeQorcHJlY2lzaW9uOiAgICAxNgorbWF4RXhwb25lbnQ6ICszOTQKK21pbkV4cG9uZW50OiAtMzkzCityb3VuZGluZzogICAgIGRvd24KK2ZtYXgzNTYxIGZtYSAgMSAgIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzU2MiBmbWEgIDEgICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKKy0tIGFuZCB1c2luZyBkZWNpbWFsNjQgYm91bmRzLi4uCitwcmVjaXNpb246ICAgIDE2CittYXhFeHBvbmVudDogKzM4NAorbWluRXhwb25lbnQ6IC0zODMKK3JvdW5kaW5nOiAgICAgZG93bgorZm1heDM1NjMgZm1hICAxICAgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTY0IGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZAorCisKKy0tIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgd2l0aCBleHRyZW1lIHJvdW5kaW5nCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjAxIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MDIgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCitmbWF4MzYwMyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorZm1heDM2MDQgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworZm1heDM2MDUgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2ZtYXgzNjA2IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2ZtYXgzNjA3IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZm1heDM2MTEgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYxMiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzNjEzIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCitmbWF4MzYxNCBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCitmbWF4MzYxNSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorZm1heDM2MTYgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorZm1heDM2MTcgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzYyMSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjIyIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorZm1heDM2MjMgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2ZtYXgzNjI0IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2ZtYXgzNjI1IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCitmbWF4MzYyNiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitmbWF4MzYyNyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjMxIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MzIgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCitmbWF4MzYzMyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorZm1heDM2MzQgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworZm1heDM2MzUgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2ZtYXgzNjM2IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2ZtYXgzNjM3IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZm1heDM2NDEgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzY0MiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzNjQzIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCitmbWF4MzY0NCBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCitmbWF4MzY0NSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorZm1heDM2NDYgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorZm1heDM2NDcgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzY1MSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjUyIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorZm1heDM2NTMgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2ZtYXgzNjU0IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2ZtYXgzNjU1IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCitmbWF4MzY1NiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitmbWF4MzY1NyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbG9uZyBvcGVyYW5kIHRyaWFuZ2xlCityb3VuZGluZzogaGFsZl91cAorcHJlY2lzaW9uOiAgMzcKK2ZtYXgzNjYwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNDUzOAorcHJlY2lzaW9uOiAgMzYKK2ZtYXgzNjYxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNDU0ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDM1CitmbWF4MzY2MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzNAorZm1heDM2NjMgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM1ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzMKK2ZtYXgzNjY0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMyCitmbWF4MzY2NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzMQorZm1heDM2NjYgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE1ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzAKK2ZtYXgzNjY3IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI5CitmbWF4MzY2OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyOAorZm1heDM2NjkgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjcKK2ZtYXgzNjcwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjM0ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI2CitmbWF4MzY3MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyNQorZm1heDM2NzIgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjQKK2ZtYXgzNjczIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIzCitmbWF4MzY3NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyMgorZm1heDM2NzUgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM5ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjEKK2ZtYXgzNjc2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzY0ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIwCitmbWF4MzY3NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxOQorZm1heDM2NzggZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDI0ICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTgKK2ZtYXgzNjc5IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE3CitmbWF4MzY4MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxNgorZm1heDM2ODEgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTUKK2ZtYXgzNjgyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE0CitmbWF4MzY4MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxMworZm1heDM2ODQgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTIKK2ZtYXgzNjg1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDExCitmbWF4MzY4NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxMAorZm1heDM2ODcgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3NDE3RSsxMCAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDkKK2ZtYXgzNjg4IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzQyRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA4CitmbWF4MzY4OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNworZm1heDM2OTAgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNgorZm1heDM2OTEgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTJFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA1CitmbWF4MzY5MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNAorZm1heDM2OTMgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMworZm1heDM2OTQgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODVFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyCitmbWF4MzY5NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMQorZm1heDM2OTYgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDFFKzExICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcm91bmRpbmc6IGhhbGZfdXAKK3ByZWNpc2lvbjogICA5CisKK2ZtYXgzNzAxIGZtYSAgMSAgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCitmbWF4MzcwMiBmbWEgIDEgICAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2ZtYXgzNzAzIGZtYSAgMSAgIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorZm1heDM3MDQgZm1hICAxICAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2ZtYXgzNzEwIGZtYSAgMSAgIDBFKzMgIDAwLjAwICAtPiAwLjAwCitmbWF4MzcxMSBmbWEgIDEgICAwRSszICAwMC4wICAgLT4gMC4wCitmbWF4MzcxMiBmbWEgIDEgICAwRSszICAwMC4gICAgLT4gMAorZm1heDM3MTMgZm1hICAxICAgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2ZtYXgzNzE0IGZtYSAgMSAgIDBFKzMgIDAwLkUrMiAtPiAwRSsyCitmbWF4MzcxNSBmbWEgIDEgICAwRSszICAwMC5FKzMgLT4gMEUrMworZm1heDM3MTYgZm1hICAxICAgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2ZtYXgzNzE3IGZtYSAgMSAgIDBFKzMgIDAwLkUrNSAtPiAwRSszCitmbWF4MzcxOCBmbWEgIDEgICAwRSszICAtMDAuMCAgIC0+IDAuMAorZm1heDM3MTkgZm1hICAxICAgMEUrMyAgLTAwLiAgICAtPiAwCitmbWF4MzczMSBmbWEgIDEgICAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworZm1heDM3MjAgZm1hICAxICAgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2ZtYXgzNzIxIGZtYSAgMSAgIDAwLjAgICAwRSszICAtPiAwLjAKK2ZtYXgzNzIyIGZtYSAgMSAgIDAwLiAgICAwRSszICAtPiAwCitmbWF4MzcyMyBmbWEgIDEgICAwMC5FKzEgMEUrMyAgLT4gMEUrMQorZm1heDM3MjQgZm1hICAxICAgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2ZtYXgzNzI1IGZtYSAgMSAgIDAwLkUrMyAwRSszICAtPiAwRSszCitmbWF4MzcyNiBmbWEgIDEgICAwMC5FKzQgMEUrMyAgLT4gMEUrMworZm1heDM3MjcgZm1hICAxICAgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2ZtYXgzNzI4IGZtYSAgMSAgIC0wMC4wMCAwRSszICAtPiAwLjAwCitmbWF4MzcyOSBmbWEgIDEgICAtMDAuMCAgMEUrMyAgLT4gMC4wCitmbWF4MzczMCBmbWEgIDEgICAtMDAuICAgMEUrMyAgLT4gMAorCitmbWF4MzczMiBmbWEgIDEgICAgMCAgICAgMCAgICAgLT4gIDAKK2ZtYXgzNzMzIGZtYSAgMSAgICAwICAgIC0wICAgICAtPiAgMAorZm1heDM3MzQgZm1hICAxICAgLTAgICAgIDAgICAgIC0+ICAwCitmbWF4MzczNSBmbWEgIDEgICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQorCitmbWF4MzczNiBmbWEgIDEgICAgMSAgICAtMSAgICAgLT4gIDAKK2ZtYXgzNzM3IGZtYSAgMSAgIC0xICAgIC0xICAgICAtPiAtMgorZm1heDM3MzggZm1hICAxICAgIDEgICAgIDEgICAgIC0+ICAyCitmbWF4MzczOSBmbWEgIDEgICAtMSAgICAgMSAgICAgLT4gIDAKKworZm1heDM3NDEgZm1hICAxICAgIDAgICAgLTEgICAgIC0+IC0xCitmbWF4Mzc0MiBmbWEgIDEgICAtMCAgICAtMSAgICAgLT4gLTEKK2ZtYXgzNzQzIGZtYSAgMSAgICAwICAgICAxICAgICAtPiAgMQorZm1heDM3NDQgZm1hICAxICAgLTAgICAgIDEgICAgIC0+ICAxCitmbWF4Mzc0NSBmbWEgIDEgICAtMSAgICAgMCAgICAgLT4gLTEKK2ZtYXgzNzQ2IGZtYSAgMSAgIC0xICAgIC0wICAgICAtPiAtMQorZm1heDM3NDcgZm1hICAxICAgIDEgICAgIDAgICAgIC0+ICAxCitmbWF4Mzc0OCBmbWEgIDEgICAgMSAgICAtMCAgICAgLT4gIDEKKworZm1heDM3NTEgZm1hICAxICAgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2ZtYXgzNzUyIGZtYSAgMSAgIC0wLjAgIC0xICAgICAtPiAtMS4wCitmbWF4Mzc1MyBmbWEgIDEgICAgMC4wICAgMSAgICAgLT4gIDEuMAorZm1heDM3NTQgZm1hICAxICAgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2ZtYXgzNzU1IGZtYSAgMSAgIC0xLjAgICAwICAgICAtPiAtMS4wCitmbWF4Mzc1NiBmbWEgIDEgICAtMS4wICAtMCAgICAgLT4gLTEuMAorZm1heDM3NTcgZm1hICAxICAgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2ZtYXgzNzU4IGZtYSAgMSAgICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2ZtYXgzNzYxIGZtYSAgMSAgICAwICAgIC0xLjAgICAtPiAtMS4wCitmbWF4Mzc2MiBmbWEgIDEgICAtMCAgICAtMS4wICAgLT4gLTEuMAorZm1heDM3NjMgZm1hICAxICAgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNzY0IGZtYSAgMSAgIC0wICAgICAxLjAgICAtPiAgMS4wCitmbWF4Mzc2NSBmbWEgIDEgICAtMSAgICAgMC4wICAgLT4gLTEuMAorZm1heDM3NjYgZm1hICAxICAgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2ZtYXgzNzY3IGZtYSAgMSAgICAxICAgICAwLjAgICAtPiAgMS4wCitmbWF4Mzc2OCBmbWEgIDEgICAgMSAgICAtMC4wICAgLT4gIDEuMAorCitmbWF4Mzc3MSBmbWEgIDEgICAgMC4wICAtMS4wICAgLT4gLTEuMAorZm1heDM3NzIgZm1hICAxICAgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2ZtYXgzNzczIGZtYSAgMSAgICAwLjAgICAxLjAgICAtPiAgMS4wCitmbWF4Mzc3NCBmbWEgIDEgICAtMC4wICAgMS4wICAgLT4gIDEuMAorZm1heDM3NzUgZm1hICAxICAgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2ZtYXgzNzc2IGZtYSAgMSAgIC0xLjAgIC0wLjAgICAtPiAtMS4wCitmbWF4Mzc3NyBmbWEgIDEgICAgMS4wICAgMC4wICAgLT4gIDEuMAorZm1heDM3NzggZm1hICAxICAgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2ZtYXgzNzgwIGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzgxIGZtYSAgMSAgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2ZtYXgzNzgyIGZtYSAgMSAgIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzgzIGZtYSAgMSAgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg0IGZtYSAgMSAgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg1IGZtYSAgMSAgIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg2IGZtYSAgMSAgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg3IGZtYSAgMSAgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg4IGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg5IGZtYSAgMSAgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzkwIGZtYSAgMSAgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzkxIGZtYSAgMSAgICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzkyIGZtYSAgMSAgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzkzIGZtYSAgMSAgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzk0IGZtYSAgMSAgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitmbWF4MzgwMCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODAxIGZtYSAgMSAgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2ZtYXgzODAyIGZtYSAgMSAgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzODAzIGZtYSAgMSAgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA0IGZtYSAgMSAgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA1IGZtYSAgMSAgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA2IGZtYSAgMSAgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2ZtYXgzODA3IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA4IGZtYSAgMSAgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA5IGZtYSAgMSAgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4MTAgZm1hICAxICAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTEgZm1hICAxICAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTIgZm1hICAxICAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTMgZm1hICAxICAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTQgZm1hICAxICAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTUgZm1hICAxICAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitmbWF4MzgyMSBmbWEgIDEgICAgTmFOIC1JbmYgICAgLT4gIE5hTgorZm1heDM4MjIgZm1hICAxICAgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2ZtYXgzODIzIGZtYSAgMSAgICBOYU4gLTEgICAgICAtPiAgTmFOCitmbWF4MzgyNCBmbWEgIDEgICAgTmFOIC0wICAgICAgLT4gIE5hTgorZm1heDM4MjUgZm1hICAxICAgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2ZtYXgzODI2IGZtYSAgMSAgICBOYU4gIDEgICAgICAtPiAgTmFOCitmbWF4MzgyNyBmbWEgIDEgICAgTmFOICAxMDAwICAgLT4gIE5hTgorZm1heDM4MjggZm1hICAxICAgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2ZtYXgzODI5IGZtYSAgMSAgICBOYU4gIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzMCBmbWEgIDEgICAtSW5mICBOYU4gICAgLT4gIE5hTgorZm1heDM4MzEgZm1hICAxICAgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODMyIGZtYSAgMSAgIC0xICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzMyBmbWEgIDEgICAtMCAgICBOYU4gICAgLT4gIE5hTgorZm1heDM4MzQgZm1hICAxICAgIDAgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODM1IGZtYSAgMSAgICAxICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzNiBmbWEgIDEgICAgMTAwMCBOYU4gICAgLT4gIE5hTgorZm1heDM4MzcgZm1hICAxICAgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZm1heDM4NDEgZm1hICAxICAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0MiBmbWEgIDEgICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQzIGZtYSAgMSAgICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDQgZm1hICAxICAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0NSBmbWEgIDEgICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQ2IGZtYSAgMSAgICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDcgZm1hICAxICAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0OCBmbWEgIDEgICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQ5IGZtYSAgMSAgICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTAgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1MSBmbWEgIDEgICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODUyIGZtYSAgMSAgIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTMgZm1hICAxICAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1NCBmbWEgIDEgICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODU1IGZtYSAgMSAgICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTYgZm1hICAxICAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1NyBmbWEgIDEgICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODU4IGZtYSAgMSAgICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTkgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2ZtYXgzODYxIGZtYSAgMSAgICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZm1heDM4NjIgZm1hICAxICAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitmbWF4Mzg2MyBmbWEgIDEgICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2ZtYXgzODY0IGZtYSAgMSAgICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZm1heDM4NjUgZm1hICAxICAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitmbWF4Mzg2NiBmbWEgIDEgICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2ZtYXgzODY3IGZtYSAgMSAgIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZm1heDM4NjggZm1hICAxICAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitmbWF4Mzg2OSBmbWEgIDEgICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitmbWF4Mzg3MSBmbWEgIDEgICAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzIgZm1hICAxICAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODczIGZtYSAgMSAgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3NCBmbWEgIDEgICAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzUgZm1hICAxICAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODc2IGZtYSAgMSAgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3NyBmbWEgIDEgICAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzggZm1hICAxICAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODc5IGZtYSAgMSAgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg4MCBmbWEgIDEgICAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4ODEgZm1hICAxICAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODgyIGZtYSAgMSAgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2ZtYXgzODgzIGZtYSAgMSAgIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg4NCBmbWEgIDEgICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitmbWF4Mzg4NSBmbWEgIDEgICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdmVyZmxvdywgdW5kZXJmbG93IGFuZCBzdWJub3JtYWwgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5CitwcmVjaXNpb246IDkKK2ZtYXgzODkwIGZtYSAgMSAgIDFFKzk5OTk5OSAgICAgOUUrOTk5OTk5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mzg5MSBmbWEgIDEgICA5RSs5OTk5OTkgICAgIDFFKzk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM4OTIgZm1hICAxICAgLTEuMUUtOTk5OTk5ICAxRS05OTk5OTkgICAtPiAtMUUtMTAwMDAwMCAgICBTdWJub3JtYWwKK2ZtYXgzODkzIGZtYSAgMSAgIDFFLTk5OTk5OSAgICAtMS4xZS05OTk5OTkgLT4gLTFFLTEwMDAwMDAgICAgU3Vibm9ybWFsCitmbWF4Mzg5NCBmbWEgIDEgICAtMS4wMDAxRS05OTk5OTkgIDFFLTk5OTk5OSAgIC0+IC0xRS0xMDAwMDAzIFN1Ym5vcm1hbAorZm1heDM4OTUgZm1hICAxICAgMUUtOTk5OTk5ICAgIC0xLjAwMDFlLTk5OTk5OSAtPiAtMUUtMTAwMDAwMyBTdWJub3JtYWwKK2ZtYXgzODk2IGZtYSAgMSAgIC0xRSs5OTk5OTkgICAtOUUrOTk5OTk5ICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM4OTcgZm1hICAxICAgLTlFKzk5OTk5OSAgIC0xRSs5OTk5OTkgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mzg5OCBmbWEgIDEgICArMS4xRS05OTk5OTkgLTFFLTk5OTk5OSAgIC0+IDFFLTEwMDAwMDAgICBTdWJub3JtYWwKK2ZtYXgzODk5IGZtYSAgMSAgIC0xRS05OTk5OTkgICArMS4xZS05OTk5OTkgLT4gMUUtMTAwMDAwMCAgICBTdWJub3JtYWwKK2ZtYXgzOTAwIGZtYSAgMSAgICsxLjAwMDFFLTk5OTk5OSAtMUUtOTk5OTk5ICAgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwKK2ZtYXgzOTAxIGZtYSAgMSAgIC0xRS05OTk5OTkgICArMS4wMDAxZS05OTk5OTkgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwKK2ZtYXgzOTAyIGZtYSAgMSAgIC0xRSs5OTk5OTkgICArOUUrOTk5OTk5ICAgLT4gIDhFKzk5OTk5OQorZm1heDM5MDMgZm1hICAxICAgLTlFKzk5OTk5OSAgICsxRSs5OTk5OTkgICAtPiAtOEUrOTk5OTk5CisKK3ByZWNpc2lvbjogMworZm1heDM5MDQgZm1hICAxICAgICAgICAwIC05Ljk5OUUrOTk5OTk5ICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDM5MDUgZm1hICAxICAgICAgICAgIC05Ljk5OUUrOTk5OTk5IDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDM5MDYgZm1hICAxICAgICAgICAwICA5Ljk5OUUrOTk5OTk5ICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDM5MDcgZm1hICAxICAgICAgICAgICA5Ljk5OUUrOTk5OTk5IDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCitwcmVjaXNpb246IDMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitmbWF4MzkxMCBmbWEgIDEgICAgMS4wMEUtOTk5ICAgMCAgICAtPiAgIDEuMDBFLTk5OQorZm1heDM5MTEgZm1hICAxICAgIDAuMUUtOTk5ICAgIDAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCitmbWF4MzkxMiBmbWEgIDEgICAgMC4xMEUtOTk5ICAgMCAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwKK2ZtYXgzOTEzIGZtYSAgMSAgICAwLjEwMEUtOTk5ICAwICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzkxNCBmbWEgIDEgICAgMC4wMUUtOTk5ICAgMCAgICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCitmbWF4MzkxNSBmbWEgIDEgICAgMC45OTlFLTk5OSAgMCAgICAtPiAgIDEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5MTYgZm1hICAxICAgIDAuMDk5RS05OTkgIDAgICAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTE3IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAwICAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzkxOCBmbWEgIDEgICAgMC4wMDFFLTk5OSAgMCAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzkxOSBmbWEgIDEgICAgMC4wMDA5RS05OTkgMCAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzkyMCBmbWEgIDEgICAgMC4wMDAxRS05OTkgMCAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK2ZtYXgzOTMwIGZtYSAgMSAgIC0xLjAwRS05OTkgICAwICAgIC0+ICAtMS4wMEUtOTk5CitmbWF4MzkzMSBmbWEgIDEgICAtMC4xRS05OTkgICAgMCAgICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwKK2ZtYXgzOTMyIGZtYSAgMSAgIC0wLjEwRS05OTkgICAwICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbAorZm1heDM5MzMgZm1hICAxICAgLTAuMTAwRS05OTkgIDAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzOTM0IGZtYSAgMSAgIC0wLjAxRS05OTkgICAwICAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIE5taW4KK2ZtYXgzOTM1IGZtYSAgMSAgIC0wLjk5OUUtOTk5ICAwICAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzkzNiBmbWEgIDEgICAtMC4wOTlFLTk5OSAgMCAgICAtPiAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5MzcgZm1hICAxICAgLTAuMDA5RS05OTkgIDAgICAgLT4gIC0xRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTM4IGZtYSAgMSAgIC0wLjAwMUUtOTk5ICAwICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzOTM5IGZtYSAgMSAgIC0wLjAwMDlFLTk5OSAwICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzOTQwIGZtYSAgMSAgIC0wLjAwMDFFLTk5OSAwICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworLS0gc29tZSBub24temVybyBzdWJub3JtYWwgZm1hICAxICBzCitmbWF4Mzk1MCBmbWEgIDEgICAgMS4wMEUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDEuMTBFLTk5OQorZm1heDM5NTEgZm1hICAxICAgIDAuMUUtOTk5ICAgICAwLjFFLTk5OSAgLT4gICAyRS0xMDAwICAgIFN1Ym5vcm1hbAorZm1heDM5NTIgZm1hICAxICAgIDAuMTBFLTk5OSAgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIFN1Ym5vcm1hbAorZm1heDM5NTMgZm1hICAxICAgIDAuMTAwRS05OTkgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4Mzk1NCBmbWEgIDEgICAgMC4wMUUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDEuMUUtMTAwMCAgU3Vibm9ybWFsCitmbWF4Mzk1NSBmbWEgIDEgICAgMC45OTlFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDEuMTBFLTk5OSAgSW5leGFjdCBSb3VuZGVkCitmbWF4Mzk1NiBmbWEgIDEgICAgMC4wOTlFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDIuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTU3IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4xRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NTggZm1hICAxICAgIDAuMDAxRS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk1OSBmbWEgIDEgICAgMC4wMDA5RS05OTkgIDAuMUUtOTk5ICAtPiAgIDEuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTYwIGZtYSAgMSAgICAwLjAwMDFFLTk5OSAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworLS0gbmVnYXRpdmVzLi4uCitmbWF4Mzk2MSBmbWEgIDEgICAgMS4wMEUtOTk5ICAgLTAuMUUtOTk5ICAtPiAgIDkuMEUtMTAwMCAgU3Vibm9ybWFsCitmbWF4Mzk2MiBmbWEgIDEgICAgMC4xRS05OTkgICAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDAKK2ZtYXgzOTYzIGZtYSAgMSAgICAwLjEwRS05OTkgICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMQorZm1heDM5NjQgZm1hICAxICAgIDAuMTAwRS05OTkgIC0wLjFFLTk5OSAgLT4gICAwRS0xMDAxICAgIENsYW1wZWQKK2ZtYXgzOTY1IGZtYSAgMSAgICAwLjAxRS05OTkgICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBTdWJub3JtYWwKK2ZtYXgzOTY2IGZtYSAgMSAgICAwLjk5OUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgOS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NjcgZm1hICAxICAgIDAuMDk5RS05OTkgIC0wLjFFLTk5OSAgLT4gICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzOTY4IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NjkgZm1hICAxICAgIDAuMDAxRS05OTkgIC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk3MCBmbWEgIDEgICAgMC4wMDA5RS05OTkgLTAuMUUtOTk5ICAtPiAgIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTcxIGZtYSAgMSAgICAwLjAwMDFFLTk5OSAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBzb21lICdyZWFsJyBudW1iZXJzCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworcHJlY2lzaW9uOiA4CitmbWF4MzU2NiBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5MDZFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorcHJlY2lzaW9uOiA3CitmbWF4MzU2NyBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5MUUtMzg0IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwcmVjaXNpb246IDYKK2ZtYXgzNTY4IGZtYSAgMSAgIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTlFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorCistLSBub3cgdGhlIGNhc2Ugd2hlcmUgd2UgY2FuIGdldCB1bmRlcmZsb3cgYnV0IHRoZSByZXN1bHQgaXMgbm9ybWFsCistLSBbbm90ZSB0aGlzIGNhbid0IGhhcHBlbiBpZiB0aGUgb3BlcmFuZHMgYXJlIGFsc28gYm91bmRlZCwgYXMgd2UKKy0tIGNhbm5vdCByZXByZXNlbnQgMUUtMzk5LCBmb3IgZXhhbXBsZV0KK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKK2ZtYXgzNTcxIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgICAgICAwICAtPiAxRS0zODMKK2ZtYXgzNTcyIGZtYSAgMSAgICAgICAgIDFFLTM4NCAgICAgICAwICAtPiAxRS0zODQgICBTdWJub3JtYWwKK2ZtYXgzNTczIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgMUUtMzg0ICAtPiAxLjFFLTM4MworZm1heDM1NzQgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzg0ICAtPiAgIDlFLTM4NCBTdWJub3JtYWwKKworLS0gSGVyZSB3ZSBleHBsb3JlIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCitmbWF4MzU3NSBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2ZtYXgzNTc2IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorZm1heDM1Nzcgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzNTc4IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzU3OSBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM1ODAgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK3ByZWNpc2lvbjogICA1CittYXhleHBvbmVudDogNzkKK21pbmV4cG9uZW50OiAtNzkKKy0tIEFkZDogbGhzIGFuZCByaHMgMAorZm1heDMxMDAxIGZtYSAgMSAgICAgICAgIDEuNTI0NDRFLTgwIDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMDIgZm1hICAxICAgICAgICAgMS41MjQ0NUUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAwMyBmbWEgIDEgICAgICAgICAxLjUyNDQ2RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDA0IGZtYSAgMSAgICAgICAgIDAgMS41MjQ0NEUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMDUgZm1hICAxICAgICAgICAgMCAxLjUyNDQ1RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAwNiBmbWEgIDEgICAgICAgICAwIDEuNTI0NDZFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBBZGQ6IGxocyA+PiByaHMgYW5kIHZpY2UgdmVyc2EKK2ZtYXgzMTAxMSBmbWEgIDEgICAgICAgICAxLjUyNDQ0RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMTIgZm1hICAxICAgICAgICAgMS41MjQ0NUUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDEzIGZtYSAgMSAgICAgICAgIDEuNTI0NDZFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAxNCBmbWEgIDEgICAgICAgICAxRS0xMDAgMS41MjQ0NEUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMTUgZm1hICAxICAgICAgICAgMUUtMTAwIDEuNTI0NDVFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDE2IGZtYSAgMSAgICAgICAgIDFFLTEwMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gQWRkOiBsaHMgKyByaHMgZm1hICAxICBpdGlvbiBjYXJyaWVkIG91dAorZm1heDMxMDIxIGZtYSAgMSAgICAgICAgIDEuNTI0NDNFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAyMiBmbWEgIDEgICAgICAgICAxLjUyNDQ0RS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMjMgZm1hICAxICAgICAgICAgMS41MjQ0NUUtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDI0IGZtYSAgMSAgICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQzRS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAyNSBmbWEgIDEgICAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0NEUtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMjYgZm1hICAxICAgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDVFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKK3ByZWNpc2lvbjogICAgMTYKK21heEV4cG9uZW50OiArMzg0CittaW5FeHBvbmVudDogLTM4Mworcm91bmRpbmc6ICAgICBkb3duCisKK2ZtYXgzMTEwMCBmbWEgIDEgICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDEgZm1hICAxICAgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwMyBmbWEgIDEgICAgICsxIC0xZS0zODMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwNCBmbWEgIDEgICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDUgZm1hICAxICAgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwNiBmbWEgIDEgICAxZS0zIC0xZS0zODMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwNyBmbWEgIDEgICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDggZm1hICAxICAgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwOSBmbWEgIDEgICAxZS02IC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGNlaWxpbmcKK2ZtYXgzMTExMCBmbWEgIDEgICAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTExIGZtYSAgMSAgIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTEzIGZtYSAgMSAgICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExNCBmbWEgIDEgICAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE1IGZtYSAgMSAgIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE2IGZtYSAgMSAgIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExNyBmbWEgIDEgICAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE4IGZtYSAgMSAgIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE5IGZtYSAgMSAgIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGRvd24KK3ByZWNpc2lvbjogICAgNworbWF4RXhwb25lbnQ6ICs5NgorbWluRXhwb25lbnQ6IC05NQorZm1heDMxMTMwIGZtYSAgMSAgICAgMSAgICAgICAgICAgIC0xZS0yMDAgIC0+IDAuOTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CistLSBzdWJub3JtYWwgYm91bmRhcnkKK2ZtYXgzMTEzMSBmbWEgIDEgICAgIDEuMDAwMDAwRS05NCAgLTFlLTIwMCAgLT4gIDkuOTk5OTk5RS05NSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMzIgZm1hICAxICAgICAxLjAwMDAwMUUtOTUgIC0xZS0yMDAgIC0+ICAxLjAwMDAwMEUtOTUgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTMzIGZtYSAgMSAgICAgMS4wMDAwMDBFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OUUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzExMzQgZm1hICAxICAgICAwLjk5OTk5OUUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5OTk4RS05NiAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTEzNSBmbWEgIDEgICAgIDAuMDAxMDAwRS05NSAgLTFlLTIwMCAgLT4gIDkuOTlFLTk5ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMTM2IGZtYSAgMSAgICAgMC4wMDA5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OEUtOTkgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzExMzcgZm1hICAxICAgICAxLjAwMDAwMEUtOTUgIC0xZS0xMDEgIC0+ICA5Ljk5OTk5RS05NiAgU3Vibm9ybWFsCitmbWF4MzExMzggZm1hICAxICAgICAgICAxMDAwMEUtMTAxIC0xZS0yMDAgIC0+ICA5Ljk5OUUtOTggIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExMzkgZm1hICAxICAgICAgICAgMTAwMEUtMTAxIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNDAgZm1hICAxICAgICAgICAgIDEwMEUtMTAxIC0xZS0yMDAgIC0+ICA5LjlFLTEwMCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNDEgZm1hICAxICAgICAgICAgICAxMEUtMTAxIC0xZS0yMDAgIC0+ICA5RS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNDIgZm1hICAxICAgICAgICAgICAgMUUtMTAxIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTE0MyBmbWEgIDEgICAgICAgICAgICAwRS0xMDEgLTFlLTIwMCAgLT4gLTBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxMTQ0IGZtYSAgMSAgICAgICAgICAgIDFFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK2ZtYXgzMTE1MSBmbWEgIDEgICAgICAgIDEwMDAwRS0xMDIgLTFlLTIwMCAgLT4gIDkuOTlFLTk5ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxMTUyIGZtYSAgMSAgICAgICAgIDEwMDBFLTEwMiAtMWUtMjAwICAtPiAgOS45RS0xMDAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNTMgZm1hICAxICAgICAgICAgIDEwMEUtMTAyIC0xZS0yMDAgIC0+ICA5RS0xMDEgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxMTU0IGZtYSAgMSAgICAgICAgICAgMTBFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzExNTUgZm1hICAxICAgICAgICAgICAgMUUtMTAyIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTE1NiBmbWEgIDEgICAgICAgICAgICAwRS0xMDIgLTFlLTIwMCAgLT4gLTBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxMTU3IGZtYSAgMSAgICAgICAgICAgIDFFLTEwMyAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK2ZtYXgzMTE2MCBmbWEgIDEgICAgICAgICAgMTAwRS0xMDUgLTFlLTEwMSAgLT4gLTBFLTEwMSBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzExNjEgZm1hICAxICAgICAgICAgIDEwMEUtMTA1IC0xZS0yMDEgIC0+ICAwRS0xMDEgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQorcHJlY2lzaW9uOiAgIDE1Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworZm1heDMxMjAwIGZtYSAgMSAgIDFFMTUgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIwMSBmbWEgIDEgICAxRTE1ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTAgZm1hICAxICAgMUUxNSAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjExIGZtYSAgMSAgIDFFMTUgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxMiBmbWEgIDEgICAxRTE1ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTMgZm1hICAxICAgMUUxNSAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjE0IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxNSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTYgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjE3IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxOCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTkgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjIwIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIyMSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMjIgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjIzIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIyNCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMjUgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZAorZm1heDMxMjMwIGZtYSAgMSAgIDFFMTUgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAgIDE2CisKK2ZtYXgzMTMwMCBmbWEgIDEgICAxRTE2ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzEwIGZtYSAgMSAgIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTEgZm1hICAxICAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxMiBmbWEgIDEgICAxRTE2ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzEzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzE2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzE5IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzIyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzI1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzI4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzMCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzMxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzM0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzM3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzggZm1hICAxICAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzOSBmbWEgIDEgICAxRTE2ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCitmbWF4MzEzNDAgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM0MSBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzEzNDkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCitwcmVjaXNpb246ICAgMTUKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCitmbWF4MzE0MDAgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4yMzQ1Njc4OTAxMjM0NQorZm1heDMxNDAxIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDIgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDMgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDA0IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDUgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDYgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDA3IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTcKK2ZtYXgzMTQwOCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS04CitmbWF4MzE0MDkgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtOQorZm1heDMxNDEwIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTEwCitmbWF4MzE0MTEgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTEKK2ZtYXgzMTQxMiBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMgorZm1heDMxNDEzIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTEzCitmbWF4MzE0MTQgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTQKK2ZtYXgzMTQxNSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNQorZm1heDMxNDE2IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE2CitmbWF4MzE0MTcgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTcKK2ZtYXgzMTQxOCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xOAorZm1heDMxNDE5IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHByZWNpc2lvbiAxNi4uCitwcmVjaXNpb246ICAgMTYKK2ZtYXgzMTQyMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyMSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MjIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyNCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MjUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyNyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2ZtYXgzMTQyOCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2ZtYXgzMTQyOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2ZtYXgzMTQzMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitmbWF4MzE0MzEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZm1heDMxNDMyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2ZtYXgzMTQzMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitmbWF4MzE0MzQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZm1heDMxNDM1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2ZtYXgzMTQzNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitmbWF4MzE0MzcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZm1heDMxNDM4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2ZtYXgzMTQzOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2ZtYXgzMTQ0MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ0MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQ0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQ1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ0NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQ3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03CitmbWF4MzE0NDggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2ZtYXgzMTQ0OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZm1heDMxNDUwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZm1heDMxNDUxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZm1heDMxNDUyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZm1heDMxNDUzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMworZm1heDMxNDU0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZm1heDMxNDU1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZm1heDMxNDU2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZm1heDMxNDU3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZm1heDMxNDU4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZm1heDMxNDU5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCBFcyBvbiB0aGUgMAorZm1heDMxNDYwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDYzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDY2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDY5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ3MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NzEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDcyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ3MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NzQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDc1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2ZtYXgzMTQ3NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzMTQ3NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzMTQ3OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzMTQ3OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzMTUwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTUwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDMxNTA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzE1MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUxMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzMTUxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzE1MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTUyMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzMTUyNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUyNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDMxNTMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUzMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE1MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTM3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNTQwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1NDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU0MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTQzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE1NDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU0NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTQ2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTU1MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTUyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1NTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU1NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDMxNTU1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1NTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU1NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTU4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICB1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNTYwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1NjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU2MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTYzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE1NjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU2NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTY2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTU3MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTU3MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTU3MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTU3NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzMTU3NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTU3NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTc3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzE1ODAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU4MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTgyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1ODMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzMTU4NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTg1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1ODYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU4NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDMxNTkxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1OTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU5MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTk0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE1OTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU5NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTk3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1OTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzMTYwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNjAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE2MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTYwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDMxNjA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE2MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTYwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNjA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzE2MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE2MTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE2MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTYxNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDMxNjE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxNjE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE2MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTYxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKK3JvdW5kaW5nOiAgICBmbG9vcgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNjIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE2MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2ZtYXgzMTYyMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZm1heDMxNjIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE2MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTYyNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDMxNjI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzE2MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTYzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNjMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE2MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE2MzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE2MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTYzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDMxNjM3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzE2MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKKy0tIEJpZ0RlY2ltYWwgcHJvYmxlbSB0ZXN0Y2FzZXMgMjAwNi4wMS4yMworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCityb3VuZGluZzogIGRvd24KK3ByZWNpc2lvbjogNworZm1heDMxNjUxIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA2CitmbWF4MzE2NTIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDUKK2ZtYXgzMTY1MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMEUrNiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0CitmbWF4MzE2NTQgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMEUrNiAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworZm1heDMxNjU1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMEUrNiAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIKK2ZtYXgzMTY1NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMEUrNiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCitmbWF4MzE2NTcgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KK3ByZWNpc2lvbjogNworZm1heDMxNjYxIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA2CitmbWF4MzE2NjIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDUKK2ZtYXgzMTY2MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0CitmbWF4MzE2NjQgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMEUrNiAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworZm1heDMxNjY1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMEUrNiAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIKK2ZtYXgzMTY2NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMEUrNiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCitmbWF4MzE2NjcgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICB1cAorcHJlY2lzaW9uOiA3CitmbWF4MzE2NzEgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDYKK2ZtYXgzMTY3MiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNQorZm1heDMxNjczIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAxRSs2ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQKK2ZtYXgzMTY3NCBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAxRSs2ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzCitmbWF4MzE2NzUgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAxRSs2ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMgorZm1heDMxNjc2IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4xRSs2ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEKK2ZtYXgzMTY3NyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDJFKzYgICAgICAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2ZtYXgzMTcwMSAgZm1hICAxICAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitmbWF4MzE3MDIgIGZtYSAgMSAgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZm1heDMxNzAzICBmbWEgIDEgICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2ZtYXgzMTcwNCAgZm1hICAxICAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitmbWF4MzE3MDUgIHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTAKK2ZtYXgzMTcwNiAgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMAorZm1heDMxNzA3ICBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwCitmbWF4MzE3MDggIHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBTYW1lIGFzIGFib3ZlLCB1c2luZyBkZWNpbWFsNjQgZGVmYXVsdCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2ZtYXgzNjAwMSBmbWEgIDEgICAxICAgICAgIDEgICAgICAgLT4gIDIKK2ZtYXgzNjAwMiBmbWEgIDEgICAyICAgICAgIDMgICAgICAgLT4gIDUKK2ZtYXgzNjAwMyBmbWEgIDEgICAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2ZtYXgzNjAwNCBmbWEgIDEgICAnNScgICAgICctMycgICAgLT4gIDIKK2ZtYXgzNjAwNSBmbWEgIDEgICAnLTUnICAgICctMycgICAgLT4gIC04CitmbWF4MzYwMDYgZm1hICAxICAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CitmbWF4MzYwMDcgZm1hICAxICAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKK2ZtYXgzNjAwOCBmbWEgIDEgICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKK2ZtYXgzNjAwOSBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2ZtYXgzNjAxMCBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKKworZm1heDM2MDExIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMTIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDAnICAnMC41NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxMyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxNCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxNSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDk5JyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxNiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDk5OScgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxNyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxOCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAwMScgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxOSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAxJyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAyMCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2MDIxIGZtYSAgMSAgIDAgMSAtPiAxCitmbWF4MzYwMjIgZm1hICAxICAgMSAxIC0+IDIKK2ZtYXgzNjAyMyBmbWEgIDEgICAyIDEgLT4gMworZm1heDM2MDI0IGZtYSAgMSAgIDMgMSAtPiA0CitmbWF4MzYwMjUgZm1hICAxICAgNCAxIC0+IDUKK2ZtYXgzNjAyNiBmbWEgIDEgICA1IDEgLT4gNgorZm1heDM2MDI3IGZtYSAgMSAgIDYgMSAtPiA3CitmbWF4MzYwMjggZm1hICAxICAgNyAxIC0+IDgKK2ZtYXgzNjAyOSBmbWEgIDEgICA4IDEgLT4gOQorZm1heDM2MDMwIGZtYSAgMSAgIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2ZtYXgzNjAzMSBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2ZtYXgzNjAzMiBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2ZtYXgzNjAzMyBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2ZtYXgzNjAzNCBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworZm1heDM2MDM1IGZtYSAgMSAgICc3MCcgICAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAzNiBmbWEgIDEgICAnNzAwJyAgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMzcgZm1hICAxICAgJzcwMDAnICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDM4IGZtYSAgMSAgICc3MDAwMCcgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAzOSBmbWEgIDEgICAnNzAwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2ZtYXgzNjA0MCBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjA0MSBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwNDIgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjA0NCBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjA0NSBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCitmbWF4MzYwNDYgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2ZtYXgzNjA0NyBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2ZtYXgzNjA0OCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCitmbWF4MzYwNDkgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2ZtYXgzNjA1MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2ZtYXgzNjA1MSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2ZtYXgzNjA1MyBmbWEgIDEgICAnMTInICc3LjAwJyAtPiAnMTkuMDAnCitmbWF4MzYwNTQgZm1hICAxICAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKK2ZtYXgzNjA1NSBmbWEgIDEgICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworZm1heDM2MDU2IGZtYSAgMSAgICcxLjMnICctMi4wNycgLT4gJy0wLjc3JworZm1heDM2MDU3IGZtYSAgMSAgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCisKKy0tIGZyb20gYWJvdmUKK2ZtYXgzNjA2MSBmbWEgIDEgICAxICcwLjEnIC0+ICcxLjEnCitmbWF4MzYwNjIgZm1hICAxICAgMSAnMC4wMScgLT4gJzEuMDEnCitmbWF4MzYwNjMgZm1hICAxICAgMSAnMC4wMDEnIC0+ICcxLjAwMScKK2ZtYXgzNjA2NCBmbWEgIDEgICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCitmbWF4MzYwNjUgZm1hICAxICAgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCitmbWF4MzYwNjYgZm1hICAxICAgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScKK2ZtYXgzNjA2NyBmbWEgIDEgICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCitmbWF4MzYwNjggZm1hICAxICAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2ZtYXgzNjA3MCBmbWEgIDEgICAxICAwICAgIC0+IDEKK2ZtYXgzNjA3MSBmbWEgIDEgICAxIDAuICAgIC0+IDEKK2ZtYXgzNjA3MiBmbWEgIDEgICAxICAuMCAgIC0+IDEuMAorZm1heDM2MDczIGZtYSAgMSAgIDEgMC4wICAgLT4gMS4wCitmbWF4MzYwNzQgZm1hICAxICAgMSAwLjAwICAtPiAxLjAwCitmbWF4MzYwNzUgZm1hICAxICAgIDAgIDEgICAtPiAxCitmbWF4MzYwNzYgZm1hICAxICAgMC4gIDEgICAtPiAxCitmbWF4MzYwNzcgZm1hICAxICAgIC4wIDEgICAtPiAxLjAKK2ZtYXgzNjA3OCBmbWEgIDEgICAwLjAgMSAgIC0+IDEuMAorZm1heDM2MDc5IGZtYSAgMSAgIDAuMDAgMSAgLT4gMS4wMAorCistLSBzb21lIGNhcnJpZXMKK2ZtYXgzNjA4MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OTk5OTk5OTkKK2ZtYXgzNjA4MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBSb3VuZGVkCitmbWF4MzYwODIgZm1hICAxICAgIDk5OTk5OTk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwMDAwMDAwCitmbWF4MzYwODMgZm1hICAxICAgICAgOTk5OTk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwMDAwMAorZm1heDM2MDg0IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwCitmbWF4MzYwODUgZm1hICAxICAgICAgICAgIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwCitmbWF4MzYwODYgZm1hICAxICAgICAgICAgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAorZm1heDM2MDg3IGZtYSAgMSAgICAgICAgICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwCitmbWF4MzYwODggZm1hICAxICAgICAgICAgICAgICAgIDk5OSAxICAtPiAxMDAwCitmbWF4MzYwODkgZm1hICAxICAgICAgICAgICAgICAgICAgOSAxICAtPiAxMAorCisKKy0tIG1vcmUgTEhTIHN3YXBzCitmbWF4MzYwOTAgZm1hICAxICAgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitmbWF4MzYwOTEgZm1hICAxICAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2ZtYXgzNjA5MiBmbWEgIDEgICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitmbWF4MzYwOTMgZm1hICAxICAgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitmbWF4MzYwOTQgZm1hICAxICAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitmbWF4MzYwOTUgZm1hICAxICAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitmbWF4MzYwOTYgZm1hICAxICAgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitmbWF4MzYwOTcgZm1hICAxICAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2ZtYXgzNjA5OCBmbWEgIDEgICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZm1heDM2MDk5IGZtYSAgMSAgICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2ZtYXgzNjEwMCBmbWEgIDEgICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZm1heDM2MTAxIGZtYSAgMSAgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2ZtYXgzNjEwMiBmbWEgIDEgICAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2ZtYXgzNjEwMyBmbWEgIDEgICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2ZtYXgzNjEwNCBmbWEgIDEgICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitmbWF4MzYxMDUgZm1hICAxICAgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2ZtYXgzNjEwNiBmbWEgIDEgICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2ZtYXgzNjEwNyBmbWEgIDEgICAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCitmbWF4MzYxMDggZm1hICAxICAgJy01RTE2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZm1heDM2MTA5IGZtYSAgMSAgICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZAorZm1heDM2MTEwIGZtYSAgMSAgICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZAorZm1heDM2MTExIGZtYSAgMSAgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZm1heDM2MTEzIGZtYSAgMSAgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCitmbWF4MzYxMTQgZm1hICAxICAgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3JworZm1heDM2MTE2IGZtYSAgMSAgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZm1heDM2MTE3IGZtYSAgMSAgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCitmbWF4MzYxMTkgZm1hICAxICAgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycKK2ZtYXgzNjEyMCBmbWEgIDEgICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZm1heDM2MTIxIGZtYSAgMSAgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCitmbWF4MzYxMjIgZm1hICAxICAgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3JworZm1heDM2MTIzIGZtYSAgMSAgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2ZtYXgzNjEyNCBmbWEgIDEgICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKK2ZtYXgzNjEyNSBmbWEgIDEgICAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnCitmbWF4MzYxMjYgZm1hICAxICAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitmbWF4MzYxMjcgZm1hICAxICAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKK2ZtYXgzNjEyOCBmbWEgIDEgICAwICAnLTVFLTEnICAgICAgLT4gICctMC41JworZm1heDM2MTI5IGZtYSAgMSAgIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZm1heDM2MTMwIGZtYSAgMSAgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKK2ZtYXgzNjEzMSBmbWEgIDEgICAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJworZm1heDM2MTMyIGZtYSAgMSAgIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZm1heDM2MTMzIGZtYSAgMSAgIDAgICctNUUxNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZm1heDM2MTM0IGZtYSAgMSAgIDAgICctNUUxNycgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZAorZm1heDM2MTM1IGZtYSAgMSAgIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZAorZm1heDM2MTM2IGZtYSAgMSAgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCistLSByZWxhdGVkCitmbWF4MzYxMzcgZm1hICAxICAgIDEgICcwRS0xOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZm1heDM2MTM4IGZtYSAgMSAgIC0xICAnMEUtMTknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2ZtYXgzNjEzOSBmbWEgIDEgICAnMEUtMTknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitmbWF4MzYxNDAgZm1hICAxICAgJzBFLTE5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZm1heDM2MTQxIGZtYSAgMSAgIDFFKzExICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcKK2ZtYXgzNjE0MiBmbWEgIDEgICAxRSsxMSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkCitmbWF4MzYxNDMgZm1hICAxICAgMC4wMDAgICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJworZm1heDM2MTQ0IGZtYSAgMSAgIDAuMDAwMCAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2ZtYXgzNjE0NiBmbWEgIDEgICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCitmbWF4MzYxNDcgZm1hICAxICAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcKK2ZtYXgzNjE0OCBmbWEgIDEgICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZm1heDM2MTQ5IGZtYSAgMSAgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKK2ZtYXgzNjE1MCBmbWEgIDEgICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJworZm1heDM2MTUxIGZtYSAgMSAgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitmbWF4MzYxNTIgZm1hICAxICAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJworZm1heDM2MTUzIGZtYSAgMSAgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzNjE1NCBmbWEgIDEgICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitmbWF4MzYxNTUgZm1hICAxICAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKK2ZtYXgzNjE1NiBmbWEgIDEgICAnMycgICAgICczJyAgICAgLT4gICc2JworZm1heDM2MTU3IGZtYSAgMSAgICczJyAgICAgJyszJyAgICAtPiAgJzYnCitmbWF4MzYxNTggZm1hICAxICAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKK2ZtYXgzNjE1OSBmbWEgIDEgICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnCitmbWF4MzYxNjAgZm1hICAxICAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2ZtYXgzNjE2MSBmbWEgIDEgICAnMUUrMTMnICctMScgICAgLT4gJzk5OTk5OTk5OTk5OTknCitmbWF4MzYxNjIgZm1hICAxICAgJzFFKzEzJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzNjE2MyBmbWEgIDEgICAnMS4xMScgICcxRSsxMycgLT4gJzEwMDAwMDAwMDAwMDAxLjExJworZm1heDM2MTY0IGZtYSAgMSAgICctMScgICAgJzFFKzEzJyAtPiAnOTk5OTk5OTk5OTk5OScKK2ZtYXgzNjE2NSBmbWEgIDEgICAnN0UrMTMnICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTk5JworZm1heDM2MTY2IGZtYSAgMSAgICc3RSsxMycgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzYxNjcgZm1hICAxICAgJzEuMTEnICAnN0UrMTMnIC0+ICc3MDAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzNjE2OCBmbWEgIDEgICAnLTEnICAgICc3RSsxMycgLT4gJzY5OTk5OTk5OTk5OTk5JworCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1NgorZm1heDM2MTcwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYzJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTcxIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTcyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTczIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTc0IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTc1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTc2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU3JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTc3IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2ZtYXgzNjE3OCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKK2ZtYXgzNjE3OSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OCcKK2ZtYXgzNjE4MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NycKK2ZtYXgzNjE4MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NicKK2ZtYXgzNjE4MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NScKK2ZtYXgzNjE4MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NCcKKworLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjIwMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2ZtYXgzNjIwMSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjEyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjE1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2ZtYXgzNjIxNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjE5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MjIwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZm1heDM2MjIxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjI0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjI3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyOCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjMwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzMSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjMzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzNCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjM2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZm1heDM2MjM3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzOCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2ZtYXgzNjI0MCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNDEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjQyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2ZtYXgzNjI1MCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2ZtYXgzNjI1MSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjUzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1NCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjU2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1NyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjU5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2MCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjYyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2MyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjY1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2NiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2ZtYXgzNjI2NyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjY5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYzMDEgZm1hICAxICAgIC0xICAgMSAgICAgIC0+ICAgMAorZm1heDM2MzAyIGZtYSAgMSAgICAgMCAgIDEgICAgICAtPiAgIDEKK2ZtYXgzNjMwMyBmbWEgIDEgICAgIDEgICAxICAgICAgLT4gICAyCitmbWF4MzYzMDQgZm1hICAxICAgIDEyICAgMSAgICAgIC0+ICAxMworZm1heDM2MzA1IGZtYSAgMSAgICA5OCAgIDEgICAgICAtPiAgOTkKK2ZtYXgzNjMwNiBmbWEgIDEgICAgOTkgICAxICAgICAgLT4gMTAwCitmbWF4MzYzMDcgZm1hICAxICAgMTAwICAgMSAgICAgIC0+IDEwMQorZm1heDM2MzA4IGZtYSAgMSAgIDEwMSAgIDEgICAgICAtPiAxMDIKK2ZtYXgzNjMwOSBmbWEgIDEgICAgLTEgIC0xICAgICAgLT4gIC0yCitmbWF4MzYzMTAgZm1hICAxICAgICAwICAtMSAgICAgIC0+ICAtMQorZm1heDM2MzExIGZtYSAgMSAgICAgMSAgLTEgICAgICAtPiAgIDAKK2ZtYXgzNjMxMiBmbWEgIDEgICAgMTIgIC0xICAgICAgLT4gIDExCitmbWF4MzYzMTMgZm1hICAxICAgIDk4ICAtMSAgICAgIC0+ICA5NworZm1heDM2MzE0IGZtYSAgMSAgICA5OSAgLTEgICAgICAtPiAgOTgKK2ZtYXgzNjMxNSBmbWEgIDEgICAxMDAgIC0xICAgICAgLT4gIDk5CitmbWF4MzYzMTYgZm1hICAxICAgMTAxICAtMSAgICAgIC0+IDEwMAorCitmbWF4MzYzMjEgZm1hICAxICAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2ZtYXgzNjMyMiBmbWEgIDEgICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZm1heDM2MzIzIGZtYSAgMSAgICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCitmbWF4MzYzMjQgZm1hICAxICAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2ZtYXgzNjMyNSBmbWEgIDEgICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZm1heDM2MzI2IGZtYSAgMSAgICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCitmbWF4MzYzMjcgZm1hICAxICAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2ZtYXgzNjMyOCBmbWEgIDEgICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZm1heDM2MzI5IGZtYSAgMSAgIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCitmbWF4MzYzMzAgZm1hICAxICAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2ZtYXgzNjMzMSBmbWEgIDEgICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZm1heDM2MzMyIGZtYSAgMSAgICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCitmbWF4MzYzMzMgZm1hICAxICAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2ZtYXgzNjMzNCBmbWEgIDEgICAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZm1heDM2MzM1IGZtYSAgMSAgICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5CitmbWF4MzYzMzYgZm1hICAxICAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGZtYSAgMSAgaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKK2ZtYXgzNjM0MCBmbWEgIDEgICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCitmbWF4MzYzNDEgZm1hICAxICAgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAKK2ZtYXgzNjM0MiBmbWEgIDEgICAxRSsxNiAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQKK2ZtYXgzNjM0MyBmbWEgIDEgICAxRSsxNyAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2ZtYXgzNjM0NCBmbWEgIDEgICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitmbWF4MzYzNDUgZm1hICAxICAgMUUrMTUgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDEKK2ZtYXgzNjM0NiBmbWEgIDEgICAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MzQ3IGZtYSAgMSAgIDFFKzE3ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYzNDggZm1hICAxICAgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNworZm1heDM2MzQ5IGZtYSAgMSAgIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3CitmbWF4MzYzNTAgZm1hICAxICAgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjM1MSBmbWEgIDEgICAxRSsxNyAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgIEluZXhhY3QgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworZm1heDM2MzYxICBmbWEgIDEgICAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1CitmbWF4MzYzNjIgIGZtYSAgMSAgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCAgUm91bmRlZAorZm1heDM2MzYzICBmbWEgIDEgICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjM2NCAgZm1hICAxICAgMTIuMzQgICAgMGUtMzk4ICAtPiAxMi4zNDAwMDAwMDAwMDAwMCAgUm91bmRlZAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK2ZtYXgzNjQwMCBmbWEgIDEgICAgIDEgICA3N2UtMTQgICAgICAtPiAgMS4wMDAwMDAwMDAwMDA3NworZm1heDM2NDAxIGZtYSAgMSAgICAgMSAgIDc3ZS0xNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworZm1heDM2NDAyIGZtYSAgMSAgICAgMSAgIDc3ZS0xNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQwMyBmbWEgIDEgICAgIDEgICA3N2UtMTcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MDQgZm1hICAxICAgICAxICAgNzdlLTE4ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDA1IGZtYSAgMSAgICAgMSAgIDc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQwNiBmbWEgIDEgICAgIDEgICA3N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQxMCBmbWEgIDEgICAgMTAgICA3N2UtMTQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2ZtYXgzNjQxMSBmbWEgIDEgICAgMTAgICA3N2UtMTUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MTIgZm1hICAxICAgIDEwICAgNzdlLTE2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDEzIGZtYSAgMSAgICAxMCAgIDc3ZS0xNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQxNCBmbWEgIDEgICAgMTAgICA3N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MTUgZm1hICAxICAgIDEwICAgNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDE2IGZtYSAgMSAgICAxMCAgIDc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NDIwIGZtYSAgMSAgICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitmbWF4MzY0MjEgZm1hICAxICAgIDc3ZS0xNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3CitmbWF4MzY0MjIgZm1hICAxICAgIDc3ZS0xNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDIzIGZtYSAgMSAgICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQyNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MjUgZm1hICAxICAgIDc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDI2IGZtYSAgMSAgICA3N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NDMwIGZtYSAgMSAgICA3N2UtMTQgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3NworZm1heDM2NDMxIGZtYSAgMSAgICA3N2UtMTUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQzMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MzMgZm1hICAxICAgIDc3ZS0xNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDM0IGZtYSAgMSAgICA3N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQzNSBmbWEgIDEgICAgNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MzYgZm1hICAxICAgIDc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitmbWF4MzY0NDAgZm1hICAxICAgICAxICAgLTc3ZS0xNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NDEgZm1hICAxICAgICAxICAgLTc3ZS0xNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMworZm1heDM2NDQyIGZtYSAgMSAgICAgMSAgIC03N2UtMTYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NDMgZm1hICAxICAgICAxICAgLTc3ZS0xNyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NDQgZm1hICAxICAgICAxICAgLTc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NDUgZm1hICAxICAgICAxICAgLTc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ0NiBmbWEgIDEgICAgIDEgICAtNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY0NTAgZm1hICAxICAgIDEwICAgLTc3ZS0xNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMworZm1heDM2NDUxIGZtYSAgMSAgICAxMCAgIC03N2UtMTUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NTIgZm1hICAxICAgIDEwICAgLTc3ZS0xNiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NTMgZm1hICAxICAgIDEwICAgLTc3ZS0xNyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NTQgZm1hICAxICAgIDEwICAgLTc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ1NSBmbWEgIDEgICAgMTAgICAtNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDU2IGZtYSAgMSAgICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQ2MCBmbWEgIDEgICAgLTc3ZS0xNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ2MSBmbWEgIDEgICAgLTc3ZS0xNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NjIgZm1hICAxICAgIC03N2UtMTYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ2MyBmbWEgIDEgICAgLTc3ZS0xNyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ2NCBmbWEgIDEgICAgLTc3ZS0xOCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ2NSBmbWEgIDEgICAgLTc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDY2IGZtYSAgMSAgICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQ3MCBmbWEgIDEgICAgLTc3ZS0xNCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NzEgZm1hICAxICAgIC03N2UtMTUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ3MiBmbWEgIDEgICAgLTc3ZS0xNiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ3MyBmbWEgIDEgICAgLTc3ZS0xNyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ3NCBmbWEgIDEgICAgLTc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDc1IGZtYSAgMSAgICAtNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NzYgZm1hICAxICAgIC03N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZm1heDM2NDgwIGZtYSAgMSAgICAtMSAgICA3N2UtMTQgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ4MSBmbWEgIDEgICAgLTEgICAgNzdlLTE1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMworZm1heDM2NDgyIGZtYSAgMSAgICAtMSAgICA3N2UtMTYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworZm1heDM2NDgzIGZtYSAgMSAgICAtMSAgICA3N2UtMTcgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ4NCBmbWEgIDEgICAgLTEgICAgNzdlLTE4ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0ODUgZm1hICAxICAgIC0xICAgIDc3ZS0xOSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0ODYgZm1hICAxICAgIC0xICAgIDc3ZS05OSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQ5MCBmbWEgIDEgICAtMTAgICAgNzdlLTE0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTkyMworZm1heDM2NDkxIGZtYSAgMSAgIC0xMCAgICA3N2UtMTUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworZm1heDM2NDkyIGZtYSAgMSAgIC0xMCAgICA3N2UtMTYgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ5MyBmbWEgIDEgICAtMTAgICAgNzdlLTE3ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0OTQgZm1hICAxICAgLTEwICAgIDc3ZS0xOCAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0OTUgZm1hICAxICAgLTEwICAgIDc3ZS0xOSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0OTYgZm1hICAxICAgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjUwMCBmbWEgIDEgICAgIDc3ZS0xNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCitmbWF4MzY1MDEgZm1hICAxICAgICA3N2UtMTUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjUwMiBmbWEgIDEgICAgIDc3ZS0xNiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjUwMyBmbWEgIDEgICAgIDc3ZS0xNyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MDQgZm1hICAxICAgICA3N2UtMTggICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTA1IGZtYSAgMSAgICAgNzdlLTE5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NTA2IGZtYSAgMSAgICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY1MTAgZm1hICAxICAgICA3N2UtMTQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjUxMSBmbWEgIDEgICAgIDc3ZS0xNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjUxMiBmbWEgIDEgICAgIDc3ZS0xNiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MTMgZm1hICAxICAgICA3N2UtMTcgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTE0IGZtYSAgMSAgICAgNzdlLTE4ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NTE1IGZtYSAgMSAgICAgNzdlLTE5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NTE2IGZtYSAgMSAgICAgNzdlLTk5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvbmcgb3BlcmFuZHMKK2ZtYXgzNjUyMSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2NzgwMDAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTcgUm91bmRlZAorZm1heDM2NTIyIGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4MDAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNyBSb3VuZGVkCitmbWF4MzY1MjMgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4MDAgIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE2IFJvdW5kZWQKK2ZtYXgzNjUyNCBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODAwICAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTYgUm91bmRlZAorZm1heDM2NTI1IGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODkwICAwIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBSb3VuZGVkCitmbWF4MzY1MjYgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5MCAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IFJvdW5kZWQKK2ZtYXgzNjUyNyBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MSAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MjggZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5MSAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTI5IGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODkwMSAwIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUzMCBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODkwMSAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MzEgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4OTYgIDAgLT4gMS4wMTIzNDU2MjM0NTY3OTBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTMyIGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTYgIC0+IDEuMDEyMzQ1NjIzNDU2NzkwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gdmVyaWZ5IGEgcXVlcnkKK3JvdW5kaW5nOiAgICAgZG93bgorZm1heDM2NTYxIGZtYSAgMSAgIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1NjIgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkCistLSBhbmQgdXNpbmcgZGVjaW1hbDY0IGJvdW5kcy4uLgorcm91bmRpbmc6ICAgICBkb3duCitmbWF4MzY1NjMgZm1hICAxICAgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjU2NCBmbWEgIDEgICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcm91bmRpbmc6IGhhbGZfZXZlbgorCitmbWF4MzY3MDEgZm1hICAxICAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDAKK2ZtYXgzNjcwMiBmbWEgIDEgICAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2ZtYXgzNjcwMyBmbWEgIDEgICAwMC4wMCAwRS0zICAgLT4gMC4wMDAKK2ZtYXgzNjcwNCBmbWEgIDEgICAwRS0zICAwMC4wMCAgLT4gMC4wMDAKKworZm1heDM2NzEwIGZtYSAgMSAgIDBFKzMgIDAwLjAwICAtPiAwLjAwCitmbWF4MzY3MTEgZm1hICAxICAgMEUrMyAgMDAuMCAgIC0+IDAuMAorZm1heDM2NzEyIGZtYSAgMSAgIDBFKzMgIDAwLiAgICAtPiAwCitmbWF4MzY3MTMgZm1hICAxICAgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2ZtYXgzNjcxNCBmbWEgIDEgICAwRSszICAwMC5FKzIgLT4gMEUrMgorZm1heDM2NzE1IGZtYSAgMSAgIDBFKzMgIDAwLkUrMyAtPiAwRSszCitmbWF4MzY3MTYgZm1hICAxICAgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2ZtYXgzNjcxNyBmbWEgIDEgICAwRSszICAwMC5FKzUgLT4gMEUrMworZm1heDM2NzE4IGZtYSAgMSAgIDBFKzMgIC0wMC4wICAgLT4gMC4wCitmbWF4MzY3MTkgZm1hICAxICAgMEUrMyAgLTAwLiAgICAtPiAwCitmbWF4MzY3MzEgZm1hICAxICAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCisKK2ZtYXgzNjcyMCBmbWEgIDEgICAwMC4wMCAgMEUrMyAgLT4gMC4wMAorZm1heDM2NzIxIGZtYSAgMSAgIDAwLjAgICAwRSszICAtPiAwLjAKK2ZtYXgzNjcyMiBmbWEgIDEgICAwMC4gICAgMEUrMyAgLT4gMAorZm1heDM2NzIzIGZtYSAgMSAgIDAwLkUrMSAwRSszICAtPiAwRSsxCitmbWF4MzY3MjQgZm1hICAxICAgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2ZtYXgzNjcyNSBmbWEgIDEgICAwMC5FKzMgMEUrMyAgLT4gMEUrMworZm1heDM2NzI2IGZtYSAgMSAgIDAwLkUrNCAwRSszICAtPiAwRSszCitmbWF4MzY3MjcgZm1hICAxICAgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2ZtYXgzNjcyOCBmbWEgIDEgICAtMDAuMDAgMEUrMyAgLT4gMC4wMAorZm1heDM2NzI5IGZtYSAgMSAgIC0wMC4wICAwRSszICAtPiAwLjAKK2ZtYXgzNjczMCBmbWEgIDEgICAtMDAuICAgMEUrMyAgLT4gMAorCitmbWF4MzY3MzIgZm1hICAxICAgIDAgICAgIDAgICAgIC0+ICAwCitmbWF4MzY3MzMgZm1hICAxICAgIDAgICAgLTAgICAgIC0+ICAwCitmbWF4MzY3MzQgZm1hICAxICAgLTAgICAgIDAgICAgIC0+ICAwCitmbWF4MzY3MzUgZm1hICAxICAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UKKworZm1heDM2NzM2IGZtYSAgMSAgICAxICAgIC0xICAgICAtPiAgMAorZm1heDM2NzM3IGZtYSAgMSAgIC0xICAgIC0xICAgICAtPiAtMgorZm1heDM2NzM4IGZtYSAgMSAgICAxICAgICAxICAgICAtPiAgMgorZm1heDM2NzM5IGZtYSAgMSAgIC0xICAgICAxICAgICAtPiAgMAorCitmbWF4MzY3NDEgZm1hICAxICAgIDAgICAgLTEgICAgIC0+IC0xCitmbWF4MzY3NDIgZm1hICAxICAgLTAgICAgLTEgICAgIC0+IC0xCitmbWF4MzY3NDMgZm1hICAxICAgIDAgICAgIDEgICAgIC0+ICAxCitmbWF4MzY3NDQgZm1hICAxICAgLTAgICAgIDEgICAgIC0+ICAxCitmbWF4MzY3NDUgZm1hICAxICAgLTEgICAgIDAgICAgIC0+IC0xCitmbWF4MzY3NDYgZm1hICAxICAgLTEgICAgLTAgICAgIC0+IC0xCitmbWF4MzY3NDcgZm1hICAxICAgIDEgICAgIDAgICAgIC0+ICAxCitmbWF4MzY3NDggZm1hICAxICAgIDEgICAgLTAgICAgIC0+ICAxCisKK2ZtYXgzNjc1MSBmbWEgIDEgICAgMC4wICAtMSAgICAgLT4gLTEuMAorZm1heDM2NzUyIGZtYSAgMSAgIC0wLjAgIC0xICAgICAtPiAtMS4wCitmbWF4MzY3NTMgZm1hICAxICAgIDAuMCAgIDEgICAgIC0+ICAxLjAKK2ZtYXgzNjc1NCBmbWEgIDEgICAtMC4wICAgMSAgICAgLT4gIDEuMAorZm1heDM2NzU1IGZtYSAgMSAgIC0xLjAgICAwICAgICAtPiAtMS4wCitmbWF4MzY3NTYgZm1hICAxICAgLTEuMCAgLTAgICAgIC0+IC0xLjAKK2ZtYXgzNjc1NyBmbWEgIDEgICAgMS4wICAgMCAgICAgLT4gIDEuMAorZm1heDM2NzU4IGZtYSAgMSAgICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2ZtYXgzNjc2MSBmbWEgIDEgICAgMCAgICAtMS4wICAgLT4gLTEuMAorZm1heDM2NzYyIGZtYSAgMSAgIC0wICAgIC0xLjAgICAtPiAtMS4wCitmbWF4MzY3NjMgZm1hICAxICAgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNjc2NCBmbWEgIDEgICAtMCAgICAgMS4wICAgLT4gIDEuMAorZm1heDM2NzY1IGZtYSAgMSAgIC0xICAgICAwLjAgICAtPiAtMS4wCitmbWF4MzY3NjYgZm1hICAxICAgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2ZtYXgzNjc2NyBmbWEgIDEgICAgMSAgICAgMC4wICAgLT4gIDEuMAorZm1heDM2NzY4IGZtYSAgMSAgICAxICAgIC0wLjAgICAtPiAgMS4wCisKK2ZtYXgzNjc3MSBmbWEgIDEgICAgMC4wICAtMS4wICAgLT4gLTEuMAorZm1heDM2NzcyIGZtYSAgMSAgIC0wLjAgIC0xLjAgICAtPiAtMS4wCitmbWF4MzY3NzMgZm1hICAxICAgIDAuMCAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNjc3NCBmbWEgIDEgICAtMC4wICAgMS4wICAgLT4gIDEuMAorZm1heDM2Nzc1IGZtYSAgMSAgIC0xLjAgICAwLjAgICAtPiAtMS4wCitmbWF4MzY3NzYgZm1hICAxICAgLTEuMCAgLTAuMCAgIC0+IC0xLjAKK2ZtYXgzNjc3NyBmbWEgIDEgICAgMS4wICAgMC4wICAgLT4gIDEuMAorZm1heDM2Nzc4IGZtYSAgMSAgICAxLjAgIC0wLjAgICAtPiAgMS4wCisKKy0tIFNwZWNpYWxzCitmbWF4MzY3ODAgZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2NzgxIGZtYSAgMSAgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4MiBmbWEgIDEgICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODMgZm1hICAxICAgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZm1heDM2Nzg0IGZtYSAgMSAgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4NSBmbWEgIDEgICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODYgZm1hICAxICAgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZm1heDM2Nzg3IGZtYSAgMSAgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4OCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODkgZm1hICAxICAgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2NzkwIGZtYSAgMSAgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc5MSBmbWEgIDEgICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3OTIgZm1hICAxICAgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2NzkzIGZtYSAgMSAgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc5NCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZm1heDM2ODAwIGZtYSAgMSAgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODAxIGZtYSAgMSAgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwMiBmbWEgIDEgICAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitmbWF4MzY4MDMgZm1hICAxICAgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZm1heDM2ODA0IGZtYSAgMSAgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwNSBmbWEgIDEgICAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitmbWF4MzY4MDYgZm1hICAxICAgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZm1heDM2ODA3IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwOCBmbWEgIDEgICAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzY4MDkgZm1hICAxICAgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4MTAgZm1hICAxICAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM2ODExIGZtYSAgMSAgIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgxMiBmbWEgIDEgICAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzY4MTMgZm1hICAxICAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM2ODE0IGZtYSAgMSAgICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgxNSBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2ZtYXgzNjgyMSBmbWEgIDEgICAgTmFOIC1JbmYgICAgLT4gIE5hTgorZm1heDM2ODIyIGZtYSAgMSAgICBOYU4gLTEwMDAgICAtPiAgTmFOCitmbWF4MzY4MjMgZm1hICAxICAgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2ZtYXgzNjgyNCBmbWEgIDEgICAgTmFOIC0wICAgICAgLT4gIE5hTgorZm1heDM2ODI1IGZtYSAgMSAgICBOYU4gIDAgICAgICAtPiAgTmFOCitmbWF4MzY4MjYgZm1hICAxICAgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2ZtYXgzNjgyNyBmbWEgIDEgICAgTmFOICAxMDAwICAgLT4gIE5hTgorZm1heDM2ODI4IGZtYSAgMSAgICBOYU4gIEluZiAgICAtPiAgTmFOCitmbWF4MzY4MjkgZm1hICAxICAgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzMCBmbWEgIDEgICAtSW5mICBOYU4gICAgLT4gIE5hTgorZm1heDM2ODMxIGZtYSAgMSAgIC0xMDAwIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzIgZm1hICAxICAgLTEgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzMyBmbWEgIDEgICAtMCAgICBOYU4gICAgLT4gIE5hTgorZm1heDM2ODM0IGZtYSAgMSAgICAwICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzUgZm1hICAxICAgIDEgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzNiBmbWEgIDEgICAgMTAwMCBOYU4gICAgLT4gIE5hTgorZm1heDM2ODM3IGZtYSAgMSAgICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2ZtYXgzNjg0MSBmbWEgIDEgICAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0MiBmbWEgIDEgICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0MyBmbWEgIDEgICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0NCBmbWEgIDEgICAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0NSBmbWEgIDEgICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0NiBmbWEgIDEgICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0NyBmbWEgIDEgICAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0OCBmbWEgIDEgICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0OSBmbWEgIDEgICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1MCBmbWEgIDEgICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1MSBmbWEgIDEgICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1MiBmbWEgIDEgICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1MyBmbWEgIDEgICAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1NCBmbWEgIDEgICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1NSBmbWEgIDEgICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1NiBmbWEgIDEgICAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1NyBmbWEgIDEgICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1OCBmbWEgIDEgICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1OSBmbWEgIDEgICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZm1heDM2ODYxIGZtYSAgMSAgICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZm1heDM2ODYyIGZtYSAgMSAgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZm1heDM2ODYzIGZtYSAgMSAgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZm1heDM2ODY0IGZtYSAgMSAgICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZm1heDM2ODY1IGZtYSAgMSAgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZm1heDM2ODY2IGZtYSAgMSAgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZm1heDM2ODY3IGZtYSAgMSAgIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZm1heDM2ODY4IGZtYSAgMSAgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZm1heDM2ODY5IGZtYSAgMSAgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2ZtYXgzNjg3MSBmbWEgIDEgICAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODcyIGZtYSAgMSAgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzMgZm1hICAxICAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3NCBmbWEgIDEgICAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODc1IGZtYSAgMSAgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzYgZm1hICAxICAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3NyBmbWEgIDEgICAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODc4IGZtYSAgMSAgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzkgZm1hICAxICAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg4MCBmbWEgIDEgICAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODgxIGZtYSAgMSAgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4ODIgZm1hICAxICAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZm1heDM2ODgzIGZtYSAgMSAgIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4ODQgZm1hICAxICAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZm1heDM2ODg1IGZtYSAgMSAgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG5vdyB0aGUgY2FzZSB3aGVyZSB3ZSBjYW4gZ2V0IHVuZGVyZmxvdyBidXQgdGhlIHJlc3VsdCBpcyBub3JtYWwKKy0tIFtub3RlIHRoaXMgY2FuJ3QgaGFwcGVuIGlmIHRoZSBvcGVyYW5kcyBhcmUgYWxzbyBib3VuZGVkLCBhcyB3ZQorLS0gY2Fubm90IHJlcHJlc2VudCAxRS0zOTksIGZvciBleGFtcGxlXQorCitmbWF4MzY1NzEgZm1hICAxICAgICAgICAgMUUtMzgzICAgICAgIDAgIC0+IDFFLTM4MworZm1heDM2NTcyIGZtYSAgMSAgICAgICAgIDFFLTM4NCAgICAgICAwICAtPiAxRS0zODQgICBTdWJub3JtYWwKK2ZtYXgzNjU3MyBmbWEgIDEgICAgICAgICAxRS0zODMgIDFFLTM4NCAgLT4gMS4xRS0zODMKK2ZtYXgzNjU3NCBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zODQgIC0+ICAgOUUtMzg0IFN1Ym5vcm1hbAorCistLSBIZXJlIHdlIGV4cGxvcmUgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2ZtYXgzNjU3NSBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2ZtYXgzNjU3NiBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2ZtYXgzNjU3NyBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM2NTc4IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzY1Nzkgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzNjU4MCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZm1heDM2OTcyIGFwcGx5ICAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZm1heDM2OTczIGZtYSAgMSAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk3NCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzUgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzYgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzcgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDhFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzggZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDdFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzkgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDZFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODAgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDVFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODEgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDRFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk4MiBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgM0UrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTgzIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAyRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODQgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2OTg1IGFwcGx5ICAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2ZtYXgzNjk4NiBmbWEgIDEgICAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTg3IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODggZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTg5IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5MCBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOEUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTEgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTkyIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5MyBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTQgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTUgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTYgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTJFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTcgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitmbWF4MzYxMTAwIGZtYSAgMSAgIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDEgZm1hICAxICAgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDMgZm1hICAxICAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTA0IGZtYSAgMSAgIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDUgZm1hICAxICAgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDYgZm1hICAxICAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTA3IGZtYSAgMSAgIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDggZm1hICAxICAgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDkgZm1hICAxICAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitmbWF4MzYxMTEwIGZtYSAgMSAgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTExIGZtYSAgMSAgIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExMyBmbWEgIDEgICAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE0IGZtYSAgMSAgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE1IGZtYSAgMSAgIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExNiBmbWEgIDEgICAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE3IGZtYSAgMSAgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE4IGZtYSAgMSAgIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExOSBmbWEgIDEgICAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2ZtYXgzNjEzMDAgZm1hICAxICAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTAgZm1hICAxICAgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTEgZm1hICAxICAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTIgZm1hICAxICAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzcgZm1hICAxICAgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzggZm1hICAxICAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzkgZm1hICAxICAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2MTM0MCBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM0MSBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzYxMzQ5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzUyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzU1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzU4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzYxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzY0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzY4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzcxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzc3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzgwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzgzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzg2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzg5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzOTEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzkyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzOTQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzk1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK2ZtYXgzNjE0MjAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDIxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDI0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDI3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZm1heDM2MTQyOCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2ZtYXgzNjE0MjkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitmbWF4MzYxNDMwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2ZtYXgzNjE0MzEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZm1heDM2MTQzMiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitmbWF4MzYxNDMzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2ZtYXgzNjE0MzQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZm1heDM2MTQzNSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitmbWF4MzYxNDM2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2ZtYXgzNjE0MzcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZm1heDM2MTQzOCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitmbWF4MzYxNDM5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorZm1heDM2MTQ0MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NDIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NDUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZm1heDM2MTQ0OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZm1heDM2MTQ0OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZm1heDM2MTQ1MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2ZtYXgzNjE0NTEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitmbWF4MzYxNDUyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZm1heDM2MTQ1MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2ZtYXgzNjE0NTQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitmbWF4MzYxNDU1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZm1heDM2MTQ1NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2ZtYXgzNjE0NTcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitmbWF4MzYxNDU4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZm1heDM2MTQ1OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2ZtYXgzNjE0NjAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDYyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDY1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDY4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ3MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDcxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NzIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ3MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDc0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NzUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorZm1heDM2MTQ3NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzNjE0NzcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitmbWF4MzYxNDc4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZm1heDM2MTQ3OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzYxNTAwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTAzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzYxNTA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTA2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzYxNTExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzYxNTE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE1MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE1MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE1MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzNjE1MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDM2MTU0MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU0MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU0MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU0MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDM2MTU0NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU0NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU0NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU0NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDM2MTU1MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU1MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU1MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU1NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTU1NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU1NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU1NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU1OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE1NjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1NjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1NjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1NjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE1NjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE1NzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNTcyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTU3MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE1NzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzYxNTc1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTU3NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU3NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU3OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworcm91bmRpbmc6ICAgIGRvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE1ODAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1ODEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1ODIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1ODMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE1ODQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1ODUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1ODYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1ODcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE1OTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1OTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1OTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1OTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzNjE1OTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1OTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1OTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1OTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE2MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE2MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE2MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE2MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE2MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE2MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNjEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTYxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTYxNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTYxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE2MTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE2MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE2MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2ZtYXgzNjE2MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2ZtYXgzNjE2MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE2MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzNjE2MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzNjE2MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE2MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE2MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE2MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNjM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTYzNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTYzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDM2MTYzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDM2MTYzOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitmbWF4MzYxNzAxIGZtYSAgMSAgIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAorZm1heDM2MTcwMiBmbWEgIDEgICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2ZtYXgzNjE3MDMgZm1hICAxICAgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCitmbWF4MzYxNzA0IGZtYSAgMSAgIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAorZm1heDM2MTcwNSBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwCitmbWF4MzYxNzA2IHN1YnRyYWN0IDEzMEUtMiAgMTJFLTEgIC0+IDAuMTAKK2ZtYXgzNjE3MDcgc3VidHJhY3QgMTMwRS0yICAxRTAgICAgLT4gMC4zMAorZm1heDM2MTcwOCBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszCisKKy0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZm1heDM2MjAwMSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3CitmbWF4MzYyMDAyIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwMyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMDQgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDA1IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwNiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMDcgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDA4IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwOSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTAgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDExIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxMiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTMgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDE0IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxNSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTYgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDE3IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxOCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTkgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDIwIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAyMSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAorZm1heDM2MjAzMCBmbWEgIDEgICAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQorZm1heDM2MjAzMSBmbWEgIDEgICAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xCitmbWF4MzYyMDMyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyCitmbWF4MzYyMDMzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMworZm1heDM2MjAzNCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0CitmbWF4MzYyMDM1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1CitmbWF4MzYyMDM2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NgorZm1heDM2MjAzNyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3CitmbWF4MzYyMDM4IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4CitmbWF4MzYyMDM5IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0MCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDEgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0MyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDQgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQ1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0NiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDcgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQ4IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0OSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Cityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYyMDUwIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1MSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNTIgZm1hICAxICAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDUzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1NCBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNTUgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDU2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1NyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjAgZm1hICAxICAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDYxIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2MiBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjMgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDY0IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2NSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjYgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDY3IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQorcm91bmRpbmc6IHVwCitmbWF4MzYyMDcwIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxCitmbWF4MzYyMDcxIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3MiBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzMgZm1hICAxICAgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDc0IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3NSBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzYgZm1hICAxICAgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDc3IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3OCBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzkgZm1hICAxICAgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDgwIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4MSBmbWEgIDEgICAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODIgZm1hICAxICAgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDgzIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4NCBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODUgZm1hICAxICAgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDg2IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4NyBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODggZm1hICAxICAgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDg5IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUgeDMKK3ByZWNpc2lvbjogNQorZm1heDM2MzAwMCBmbWEgIDEgMSAgc05hTjEyMzQ1Njc4OTAgICAgIC0+ICBOYU42Nzg5MCAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjMwMDEgZm1hICAgIDEgLXNOYU4xMjM0NTEyMzQ1IDEgICAtPiAtTmFOMTIzNDUgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzYzMDAyIGZtYSAgICAgICBzTmFOMTIzNDU1NDMyMSAxIDEgLT4gIE5hTjU0MzIxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitmbWF4Mzk5OTAgZm1hICAxICAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzk5OTEgZm1hICAxICAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2luZXhhY3QuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvaW5leGFjdC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Y2VhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2luZXhhY3QuZGVjVGVzdApAQCAtMCwwICsxLDIxNSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBpbmV4YWN0LmRlY1Rlc3QgLS0gZGVjaW1hbCBpbmV4YWN0IGFuZCByb3VuZGVkIGVkZ2UgY2FzZXMgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CisKK2lueDAwMSBhZGQgMSAgICAgICAgICAxICAgICAgICAgICAgICAtPiAyCitpbngwMDIgYWRkIDEyMzQ1Njc4OSAgMCAgICAgICAgICAgICAgLT4gMTIzNDU2Nzg5CitpbngwMDMgYWRkIDEyMzQ1Njc4OSAgMC4wICAgICAgICAgICAgLT4gMTIzNDU2Nzg5IFJvdW5kZWQKK2lueDAwNCBhZGQgMTIzNDU2Nzg5ICAwLjAwICAgICAgICAgICAtPiAxMjM0NTY3ODkgUm91bmRlZAoraW54MDA1IGFkZCAxMjM0NTY3ODkgIDEgICAgICAgICAgICAgIC0+IDEyMzQ1Njc5MAoraW54MDA2IGFkZCAxMjM0NTY3ODkgIDAuMSAgICAgICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAwNyBhZGQgMTIzNDU2Nzg5ICAwLjAxICAgICAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMDggYWRkIDEyMzQ1Njc4OSAgMC4wMDEgICAgICAgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDA5IGFkZCAxMjM0NTY3ODkgIDAuMDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAxMCBhZGQgMTIzNDU2Nzg5ICAwLjAwMDAwMDAwMSAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMTEgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDAwMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCitpbngwMTIgYWRkIDEyMzQ1Njc4OSAgMC45ICAgICAgICAgICAgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAoraW54MDEzIGFkZCAxMjM0NTY3ODkgIDAuMDkgICAgICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAxNCBhZGQgMTIzNDU2Nzg5ICAwLjAwOSAgICAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMTUgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDkgICAgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDE2IGFkZCAxMjM0NTY3ODkgIDAuMDAwMDAwMDA5ICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAxNyBhZGQgMTIzNDU2Nzg5ICAwLjAwMDAwMDAwMDAwOSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCisKK2lueDAyMSBhZGQgMSAgICAgICAgICAtMSAgICAgICAgICAgICAgLT4gMAoraW54MDIyIGFkZCAxMjM0NTY3ODkgIC0wICAgICAgICAgICAgICAtPiAxMjM0NTY3ODkKK2lueDAyMyBhZGQgMTIzNDU2Nzg5ICAtMC4wICAgICAgICAgICAgLT4gMTIzNDU2Nzg5IFJvdW5kZWQKK2lueDAyNCBhZGQgMTIzNDU2Nzg5ICAtMC4wMCAgICAgICAgICAgLT4gMTIzNDU2Nzg5IFJvdW5kZWQKK2lueDAyNSBhZGQgMTIzNDU2Nzg5ICAtMSAgICAgICAgICAgICAgLT4gMTIzNDU2Nzg4CitpbngwMjYgYWRkIDEyMzQ1Njc4OSAgLTAuMSAgICAgICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAyNyBhZGQgMTIzNDU2Nzg5ICAtMC4wMSAgICAgICAgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDI4IGFkZCAxMjM0NTY3ODkgIC0wLjAwMSAgICAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMjkgYWRkIDEyMzQ1Njc4OSAgLTAuMDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAzMCBhZGQgMTIzNDU2Nzg5ICAtMC4wMDAwMDAwMDEgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDMxIGFkZCAxMjM0NTY3ODkgIC0wLjAwMDAwMDAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMzIgYWRkIDEyMzQ1Njc4OSAgLTAuOSAgICAgICAgICAgIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK2lueDAzMyBhZGQgMTIzNDU2Nzg5ICAtMC4wOSAgICAgICAgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDM0IGFkZCAxMjM0NTY3ODkgIC0wLjAwOSAgICAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMzUgYWRkIDEyMzQ1Njc4OSAgLTAuMDAwMDA5ICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAzNiBhZGQgMTIzNDU2Nzg5ICAtMC4wMDAwMDAwMDkgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDM3IGFkZCAxMjM0NTY3ODkgIC0wLjAwMDAwMDAwMDAwOSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCisKK2lueDA0MiBhZGQgIDAgICAgICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5CitpbngwNDMgYWRkICAwLjAgICAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBSb3VuZGVkCitpbngwNDQgYWRkICAwLjAwICAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBSb3VuZGVkCitpbngwNDUgYWRkICAxICAgICAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc5MAoraW54MDQ2IGFkZCAgMC4xICAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNDcgYWRkICAwLjAxICAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA0OCBhZGQgIDAuMDAxICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDQ5IGFkZCAgMC4wMDAwMDEgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNTAgYWRkICAwLjAwMDAwMDAwMSAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA1MSBhZGQgIDAuMDAwMDAwMDAwMDAxICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDUyIGFkZCAgMC45ICAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCitpbngwNTMgYWRkICAwLjA5ICAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA1NCBhZGQgIDAuMDA5ICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDU1IGFkZCAgMC4wMDAwMDkgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNTYgYWRkICAwLjAwMDAwMDAwOSAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA1NyBhZGQgIDAuMDAwMDAwMDAwMDA5ICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCitpbngwNjIgYWRkICAtMCAgICAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OQoraW54MDYzIGFkZCAgLTAuMCAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgUm91bmRlZAoraW54MDY0IGFkZCAgLTAuMDAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgUm91bmRlZAoraW54MDY1IGFkZCAgLTEgICAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODgKK2lueDA2NiBhZGQgIC0wLjEgICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDY3IGFkZCAgLTAuMDEgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNjggYWRkICAtMC4wMDEgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA2OSBhZGQgIC0wLjAwMDAwMSAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDcwIGFkZCAgLTAuMDAwMDAwMDAxICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNzEgYWRkICAtMC4wMDAwMDAwMDAwMDEgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA3MiBhZGQgIC0wLjkgICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAoraW54MDczIGFkZCAgLTAuMDkgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNzQgYWRkICAtMC4wMDkgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA3NSBhZGQgIC0wLjAwMDAwOSAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDc2IGFkZCAgLTAuMDAwMDAwMDA5ICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNzcgYWRkICAtMC4wMDAwMDAwMDAwMDkgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBib3VuZGFyaWVzCitpbngwODEgYWRkICAgIDk5OTk5OTk5OSAgICAgICAgICAgMCAgICAgLT4gOTk5OTk5OTk5CitpbngwODIgYWRkICAwLjk5OTk5OTk5OSAwLjAwMDAwMDAwMCAgICAgLT4gMC45OTk5OTk5OTkKK2lueDA4MyBhZGQgICAgOTk5OTk5OTk5ICAgICAgICAgICAxICAgICAtPiAxLjAwMDAwMDAwRSs5IFJvdW5kZWQKK2lueDA4NCBhZGQgIDAuOTk5OTk5OTk5IDAuMDAwMDAwMDAxICAgICAtPiAxLjAwMDAwMDAwICAgIFJvdW5kZWQKK2lueDA4NSBhZGQgICAgOTk5OTk5OTk5ICAgICAgICAgICAyICAgICAtPiAxLjAwMDAwMDAwRSs5IEluZXhhY3QgUm91bmRlZAoraW54MDg2IGFkZCAgMC45OTk5OTk5OTkgMC4wMDAwMDAwMDIgICAgIC0+IDEuMDAwMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitpbngwODcgYWRkICAgIDk5OTk5OTk5OSAgICAgICAgICAgMyAgICAgLT4gMS4wMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQKK2lueDA4OSBhZGQgIDAuOTk5OTk5OTk5IDAuMDAwMDAwMDAzICAgICAtPiAxLjAwMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorCistLSBtaW51cywgcGx1cywgYW5kIHN1YnRyYWN0IGFsbCBhc3N1bWVkIHRvIHdvcmsgbGlrZSBhZGQuCisKKy0tIG11bHRpcGx5CitwcmVjaXNpb246IDgKK2lueDEwMSBtdWx0aXBseSAgMTAwMCAgMTAwMCAgICAgICAgLT4gIDEwMDAwMDAKK2lueDEwMiBtdWx0aXBseSAgOTAwMCAgOTAwMCAgICAgICAgLT4gODEwMDAwMDAKK2lueDEwMyBtdWx0aXBseSAgOTk5OSAgOTk5OSAgICAgICAgLT4gOTk5ODAwMDEKK2lueDEwNCBtdWx0aXBseSAgMTAwMCAxMDAwMCAgICAgICAgLT4gMTAwMDAwMDAKK2lueDEwNSBtdWx0aXBseSAxMDAwMCAxMDAwMCAgICAgICAgLT4gMS4wMDAwMDAwRSs4IFJvdW5kZWQKK2lueDEwNiBtdWx0aXBseSAxMDAwMSAxMDAwMCAgICAgICAgLT4gMS4wMDAxMDAwRSs4IFJvdW5kZWQKK2lueDEwNyBtdWx0aXBseSAxMDAwMSAxMDAwMSAgICAgICAgLT4gMS4wMDAyMDAwRSs4IEluZXhhY3QgUm91bmRlZAoraW54MTA4IG11bHRpcGx5IDEwMTAxIDEwMDAxICAgICAgICAtPiAxLjAxMDIwMTBFKzggSW5leGFjdCBSb3VuZGVkCitpbngxMDkgbXVsdGlwbHkgMTAwMDEgMTAxMDEgICAgICAgIC0+IDEuMDEwMjAxMEUrOCBJbmV4YWN0IFJvdW5kZWQKKworLS0gZGl2aWRlCitwcmVjaXNpb246IDQKK2lueDIwMSBkaXZpZGUgIDEwMDAgIDEwMDAgICAgICAgIC0+ICAxCitpbngyMDIgZGl2aWRlICAxMDAwICAgICAxICAgICAgICAtPiAgMTAwMAoraW54MjAzIGRpdmlkZSAgMTAwMCAgICAgMiAgICAgICAgLT4gICA1MDAKK2lueDIwNCBkaXZpZGUgIDEwMDAgICAgIDMgICAgICAgIC0+ICAgMzMzLjMgIEluZXhhY3QgUm91bmRlZAoraW54MjA1IGRpdmlkZSAgMTAwMCAgICAgNCAgICAgICAgLT4gICAyNTAKK2lueDIwNiBkaXZpZGUgIDEwMDAgICAgIDUgICAgICAgIC0+ICAgMjAwCitpbngyMDcgZGl2aWRlICAxMDAwICAgICA2ICAgICAgICAtPiAgIDE2Ni43ICBJbmV4YWN0IFJvdW5kZWQKK2lueDIwOCBkaXZpZGUgIDEwMDAgICAgIDcgICAgICAgIC0+ICAgMTQyLjkgIEluZXhhY3QgUm91bmRlZAoraW54MjA5IGRpdmlkZSAgMTAwMCAgICAgOCAgICAgICAgLT4gICAxMjUKK2lueDIxMCBkaXZpZGUgIDEwMDAgICAgIDkgICAgICAgIC0+ICAgMTExLjEgIEluZXhhY3QgUm91bmRlZAoraW54MjExIGRpdmlkZSAgMTAwMCAgICAxMCAgICAgICAgLT4gICAxMDAKKworaW54MjIwIGRpdmlkZSAgICAgMSAgICAgMSAgICAgICAgLT4gICAxCitpbngyMjEgZGl2aWRlICAgICAxICAgICAyICAgICAgICAtPiAgIDAuNQoraW54MjIyIGRpdmlkZSAgICAgMSAgICAgNCAgICAgICAgLT4gICAwLjI1CitpbngyMjMgZGl2aWRlICAgICAxICAgICA4ICAgICAgICAtPiAgIDAuMTI1CitpbngyMjQgZGl2aWRlICAgICAxICAgIDE2ICAgICAgICAtPiAgIDAuMDYyNQoraW54MjI1IGRpdmlkZSAgICAgMSAgICAzMiAgICAgICAgLT4gICAwLjAzMTI1CitpbngyMjYgZGl2aWRlICAgICAxICAgIDY0ICAgICAgICAtPiAgIDAuMDE1NjMgIEluZXhhY3QgUm91bmRlZAoraW54MjI3IGRpdmlkZSAgICAgMSAgIDEyOCAgICAgICAgLT4gICAwLjAwNzgxMyBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiA1CitpbngyMzAgZGl2aWRlICAgICAxICAgICAxICAgICAgICAtPiAgIDEKK2lueDIzMSBkaXZpZGUgICAgIDEgICAgIDIgICAgICAgIC0+ICAgMC41CitpbngyMzIgZGl2aWRlICAgICAxICAgICA0ICAgICAgICAtPiAgIDAuMjUKK2lueDIzMyBkaXZpZGUgICAgIDEgICAgIDggICAgICAgIC0+ICAgMC4xMjUKK2lueDIzNCBkaXZpZGUgICAgIDEgICAgMTYgICAgICAgIC0+ICAgMC4wNjI1CitpbngyMzUgZGl2aWRlICAgICAxICAgIDMyICAgICAgICAtPiAgIDAuMDMxMjUKK2lueDIzNiBkaXZpZGUgICAgIDEgICAgNjQgICAgICAgIC0+ICAgMC4wMTU2MjUKK2lueDIzNyBkaXZpZGUgICAgIDEgICAxMjggICAgICAgIC0+ICAgMC4wMDc4MTI1CisKK3ByZWNpc2lvbjogMworaW54MjQwIGRpdmlkZSAgICAgMSAgICAgMSAgICAgICAgLT4gICAxCitpbngyNDEgZGl2aWRlICAgICAxICAgICAyICAgICAgICAtPiAgIDAuNQoraW54MjQyIGRpdmlkZSAgICAgMSAgICAgNCAgICAgICAgLT4gICAwLjI1CitpbngyNDMgZGl2aWRlICAgICAxICAgICA4ICAgICAgICAtPiAgIDAuMTI1CitpbngyNDQgZGl2aWRlICAgICAxICAgIDE2ICAgICAgICAtPiAgIDAuMDYyNQoraW54MjQ1IGRpdmlkZSAgICAgMSAgICAzMiAgICAgICAgLT4gICAwLjAzMTMgICBJbmV4YWN0IFJvdW5kZWQKK2lueDI0NiBkaXZpZGUgICAgIDEgICAgNjQgICAgICAgIC0+ICAgMC4wMTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbngyNDcgZGl2aWRlICAgICAxICAgMTI4ICAgICAgICAtPiAgIDAuMDA3ODEgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDIKK2lueDI1MCBkaXZpZGUgICAgIDEgICAgIDEgICAgICAgIC0+ICAgMQoraW54MjUxIGRpdmlkZSAgICAgMSAgICAgMiAgICAgICAgLT4gICAwLjUKK2lueDI1MiBkaXZpZGUgICAgIDEgICAgIDQgICAgICAgIC0+ICAgMC4yNQoraW54MjUzIGRpdmlkZSAgICAgMSAgICAgOCAgICAgICAgLT4gICAwLjEzICAgICBJbmV4YWN0IFJvdW5kZWQKK2lueDI1NCBkaXZpZGUgICAgIDEgICAgMTYgICAgICAgIC0+ICAgMC4wNjMgICAgSW5leGFjdCBSb3VuZGVkCitpbngyNTUgZGl2aWRlICAgICAxICAgIDMyICAgICAgICAtPiAgIDAuMDMxICAgIEluZXhhY3QgUm91bmRlZAoraW54MjU2IGRpdmlkZSAgICAgMSAgICA2NCAgICAgICAgLT4gICAwLjAxNiAgICBJbmV4YWN0IFJvdW5kZWQKK2lueDI1NyBkaXZpZGUgICAgIDEgICAxMjggICAgICAgIC0+ICAgMC4wMDc4ICAgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMQoraW54MjYwIGRpdmlkZSAgICAgMSAgICAgMSAgICAgICAgLT4gICAxCitpbngyNjEgZGl2aWRlICAgICAxICAgICAyICAgICAgICAtPiAgIDAuNQoraW54MjYyIGRpdmlkZSAgICAgMSAgICAgNCAgICAgICAgLT4gICAwLjMgICAgICBJbmV4YWN0IFJvdW5kZWQKK2lueDI2MyBkaXZpZGUgICAgIDEgICAgIDggICAgICAgIC0+ICAgMC4xICAgICAgSW5leGFjdCBSb3VuZGVkCitpbngyNjQgZGl2aWRlICAgICAxICAgIDE2ICAgICAgICAtPiAgIDAuMDYgICAgIEluZXhhY3QgUm91bmRlZAoraW54MjY1IGRpdmlkZSAgICAgMSAgICAzMiAgICAgICAgLT4gICAwLjAzICAgICBJbmV4YWN0IFJvdW5kZWQKK2lueDI2NiBkaXZpZGUgICAgIDEgICAgNjQgICAgICAgIC0+ICAgMC4wMiAgICAgSW5leGFjdCBSb3VuZGVkCitpbngyNjcgZGl2aWRlICAgICAxICAgMTI4ICAgICAgICAtPiAgIDAuMDA4ICAgIEluZXhhY3QgUm91bmRlZAorCisKKy0tIHBvd2VyCitwcmVjaXNpb246IDQKK2lueDMwMSBwb3dlciAgICAwLjUgICAgIDIgICAgICAgIC0+ICAgMC4yNQoraW54MzAyIHBvd2VyICAgIDAuNSAgICAgNCAgICAgICAgLT4gICAwLjA2MjUKK2lueDMwMyBwb3dlciAgICAwLjUgICAgIDggICAgICAgIC0+ICAgMC4wMDM5MDYgICBJbmV4YWN0IFJvdW5kZWQKK2lueDMwNCBwb3dlciAgICAwLjUgICAgMTYgICAgICAgIC0+ICAgMC4wMDAwMTUyNiBJbmV4YWN0IFJvdW5kZWQKK2lueDMwNSBwb3dlciAgICAwLjUgICAgMzIgICAgICAgIC0+ICAgMi4zMjhFLTEwICBJbmV4YWN0IFJvdW5kZWQKKworLS0gY29tcGFyZSwgZGl2aWRlSW50ZWdlciwgYW5kIHJlbWFpbmRlciBhcmUgYWx3YXlzIGV4YWN0CisKKy0tIHJlc2NhbGUKK3ByZWNpc2lvbjogNAoraW54NDAxIHJlc2NhbGUgMCAgICAgICAwICAgLT4gMAoraW54NDAyIHJlc2NhbGUgMSAgICAgICAwICAgLT4gMQoraW54NDAzIHJlc2NhbGUgMC4xICAgICsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2lueDQwNCByZXNjYWxlIDAuMSAgICArMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitpbng0MDUgcmVzY2FsZSAwLjEgICAgIDAgICAtPiAwIEluZXhhY3QgUm91bmRlZAoraW54NDA2IHJlc2NhbGUgMC4xICAgIC0xICAgLT4gMC4xCitpbng0MDcgcmVzY2FsZSAwLjEgICAgLTIgICAtPiAwLjEwCisKKy0tIGxvbmcgb3BlcmFuZHMgY2F1c2Ugcm91bmRpbmcgdG9vCitwcmVjaXNpb246IDkKK2lueDgwMSBwbHVzICAxMjM0NTY3ODkgIC0+IDEyMzQ1Njc4OQoraW54ODAyIHBsdXMgIDEyMzQ1Njc4OTAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitpbng4MDMgcGx1cyAgMTIzNDU2Nzg5MSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAoraW54ODA0IHBsdXMgIDEyMzQ1Njc4OTIgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2lueDgwNSBwbHVzICAxMjM0NTY3ODk5IC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitpbng4MDYgcGx1cyAgMTIzNDU2NzkwMCAtPiAxLjIzNDU2NzkwRSs5IFJvdW5kZWQKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9pbnZlcnQuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvaW52ZXJ0LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmN2JlNQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvaW52ZXJ0LmRlY1Rlc3QKQEAgLTAsMCArMSwxNzYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gaW52ZXJ0LmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKSwgYW5kIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2ludngwMDEgaW52ZXJ0ICAgICAgICAgICAgIDAgLT4gMTExMTExMTExCitpbnZ4MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMAoraW52eDAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMDEKK2ludngwMDQgaW52ZXJ0ICAgICAxMTExMTExMTEgLT4gICAgICAgICAwCitpbnZ4MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMQoraW52eDAwNiBpbnZlcnQgICAgIDEwMTAxMDEwMSAtPiAnMTAxMDEwMTAnCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQoraW52eDAwNyBpbnZlcnQgMDAwMDAwMDAwIC0+ICAgMTExMTExMTExCitpbnZ4MDA5IGludmVydCAxMDAwMDAwMDAgLT4gICAgMTExMTExMTEKK2ludngwMTEgaW52ZXJ0IDAwMDAwMDAwMCAtPiAgIDExMTExMTExMQoraW52eDAxMyBpbnZlcnQgMDEwMDAwMDAwIC0+ICAgMTAxMTExMTExCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5ICAgICAgICAgMTIzNDU2Nzg5CitpbnZ4MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+ICAwCitpbnZ4MDIyIGludmVydCAxMTExMTExMTExMTEgIC0+ICAwCitpbnZ4MDIzIGludmVydCAgMTExMTExMTEgICAgIC0+ICAxMDAwMDAwMDAKK2ludngwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gIDExMDAwMDAwMAoraW52eDAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAgMTExMDAwMDAwCitpbnZ4MDI3IGludmVydCAgICAgMTExMTEgICAgIC0+ICAxMTExMDAwMDAKK2ludngwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gIDExMTExMDAwMAoraW52eDAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAgMTExMTExMDAwCitpbnZ4MDMxIGludmVydCAgICAgICAgMTEgICAgIC0+ICAxMTExMTExMDAKK2ludngwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gIDExMTExMTExMAoraW52eDAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMAoraW52eDAzNCBpbnZlcnQgMTExMTExMTExMTEgICAtPiAgMAoraW52eDAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAgMAoraW52eDAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMAorCitpbnZ4MDgwIGludmVydCAwMTExMTExMTEgICAtPiAgMTAwMDAwMDAwCitpbnZ4MDgxIGludmVydCAxMDExMTExMTEgICAtPiAgIDEwMDAwMDAwCitpbnZ4MDgyIGludmVydCAxMTAxMTExMTEgICAtPiAgICAxMDAwMDAwCitpbnZ4MDgzIGludmVydCAxMTEwMTExMTEgICAtPiAgICAgMTAwMDAwCitpbnZ4MDg0IGludmVydCAxMTExMDExMTEgICAtPiAgICAgIDEwMDAwCitpbnZ4MDg1IGludmVydCAxMTExMTAxMTEgICAtPiAgICAgICAxMDAwCitpbnZ4MDg2IGludmVydCAxMTExMTEwMTEgICAtPiAgICAgICAgMTAwCitpbnZ4MDg3IGludmVydCAxMTExMTExMDEgICAtPiAgICAgICAgIDEwCitpbnZ4MDg4IGludmVydCAxMTExMTExMTAgICAtPiAgICAgICAgICAxCitpbnZ4MDg5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTAwMDAwMTAwCitpbnZ4MDkwIGludmVydCAxMDExMTExMDEgICAtPiAgIDEwMDAwMDEwCitpbnZ4MDkxIGludmVydCAxMTAxMTExMTAgICAtPiAgICAxMDAwMDAxCitpbnZ4MDkyIGludmVydCAxMTEwMTExMDEgICAtPiAgICAgMTAwMDEwCitpbnZ4MDkzIGludmVydCAxMTExMDEwMTEgICAtPiAgICAgIDEwMTAwCitpbnZ4MDk0IGludmVydCAxMTExMTAxMTEgICAtPiAgICAgICAxMDAwCitpbnZ4MDk1IGludmVydCAxMTExMDEwMTEgICAtPiAgICAgIDEwMTAwCitpbnZ4MDk2IGludmVydCAxMTEwMTExMDEgICAtPiAgICAgMTAwMDEwCitpbnZ4MDk3IGludmVydCAxMTAxMTExMTAgICAtPiAgICAxMDAwMDAxCitpbnZ4MDk4IGludmVydCAxMDExMTExMDEgICAtPiAgIDEwMDAwMDEwCitpbnZ4MDk5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTAwMDAwMTAwCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworaW52eDIyMCBpbnZlcnQgMTExMTExMTEyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyMSBpbnZlcnQgMzMzMzMzMzMzICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyMyBpbnZlcnQgNzc3Nzc3Nzc3ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyNCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyNiBpbnZlcnQgNDQ0NDQ0NDQ0ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyNyBpbnZlcnQgNjY2NjY2NjY2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyOSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIzMCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIzMiBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworaW52eDI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI0MSBpbnZlcnQgIDU2NzM2NzY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI0MiBpbnZlcnQgLTYzMTkxNzc3MiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI0NCBpbnZlcnQgIDgzNTU5MDE0OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2ludngyNTAgaW52ZXJ0ICAyMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTEgaW52ZXJ0ICAzMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTIgaW52ZXJ0ICA0MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTMgaW52ZXJ0ICA1MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTQgaW52ZXJ0ICA2MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTUgaW52ZXJ0ICA3MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTYgaW52ZXJ0ICA4MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTcgaW52ZXJ0ICA5MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2ludngyNzAgaW52ZXJ0ICAwMjEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzEgaW52ZXJ0ICAwMzAxMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzIgaW52ZXJ0ICAwNDAwMTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzMgaW52ZXJ0ICAwNTAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzQgaW52ZXJ0ICAxNjAwMDAxMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzUgaW52ZXJ0ICAxNzAwMDAwMTAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzYgaW52ZXJ0ICAxODAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzcgaW52ZXJ0ICAxOTAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitpbnZ4MjgwIGludmVydCAgMDAwMDAwMDAyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjgxIGludmVydCAgMDAwMDAwMDAzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjgyIGludmVydCAgMDAwMDAwMDA0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjgzIGludmVydCAgMDAwMDAwMDA1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjg0IGludmVydCAgMTAxMDAwMDA2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjg1IGludmVydCAgMTAwMTAwMDA3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjg2IGludmVydCAgMTAwMDEwMDA4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjg3IGludmVydCAgMTAwMDAxMDA5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQoraW52eDI4OCBpbnZlcnQgIDAwMDAyMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI4OSBpbnZlcnQgIDAwMDAzMDAwMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5MCBpbnZlcnQgIDAwMDA0MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5MSBpbnZlcnQgIDAwMDA1MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5MiBpbnZlcnQgIDEwMTA2MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5MyBpbnZlcnQgIDEwMDE3MDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5NCBpbnZlcnQgIDEwMDA4MDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5NSBpbnZlcnQgIDEwMDA5MTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2ludngyOTYgaW52ZXJ0IC0xMDAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyOTkgaW52ZXJ0ICAxMDAwMDEwMDAgIC0+ICAxMTExMDExMQorCistLSBObWF4LCBObWluLCBOdGlueQoraW52eDM0MSBpbnZlcnQgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0MiBpbnZlcnQgIDFFLTk5OSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0NCBpbnZlcnQgIDFFLTEwMDcgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0NSBpbnZlcnQgIC0xRS0xMDA3ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS05OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0NyBpbnZlcnQgIC0xRS05OTkgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0OCBpbnZlcnQgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2ludngzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjMgaW52ZXJ0ICAwLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjYgaW52ZXJ0ICA5RSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgoraW52eDc4OCBpbnZlcnQgLUluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgoraW52eDc5NCBpbnZlcnQgIEluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgoraW52eDgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg0MSBpbnZlcnQgIHNOYU4gICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworaW52eDg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODYyIGludmVydCArTmFOMiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODY1IGludmVydCAgTmFONSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODczIGludmVydCAgc05hTjEzICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODc2IGludmVydCAgTmFOMTYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODgzIGludmVydCAtc05hTjI3ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG4uZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG4uZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjAyYWYyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sbi5kZWNUZXN0CkBAIC0wLDAgKzEsNjExIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGxuLmRlY1Rlc3QgLS0gZGVjaW1hbCBuYXR1cmFsIGxvZ2FyaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gYmFzaWNzIChleGFtcGxlcyBpbiBzcGVjaWZpY2F0aW9uKQorcHJlY2lzaW9uOiA5CitsbnhzMDAxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueHMwMDIgbG4gIDEuMDAwICAgICAgICAgICAgIC0+ICAgMAorbG54czAwMyBsbiAgMi43MTgyODE4MyAgICAgICAgLT4gICAxLjAwMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbnhzMDA0IGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMzAyNTg1MDkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueHMwMDUgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCisKKy0tIGJhc2ljcworcHJlY2lzaW9uOiAgIDE2CitsbngwMDAxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAwMDIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yMC43MjMyNjU4MzY5NDY0MSAgIEluZXhhY3QgUm91bmRlZAorbG54MDAwMyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03LjI2NDQzMDIyMjkyMDg2OSAgSW5leGFjdCBSb3VuZGVkCitsbngwMDA0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIuMzAyNTg1MDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMDUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC4zNTY2NzQ5NDM5Mzg3MzI0IEluZXhhY3QgUm91bmRlZAorbG54MDAwNiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCitsbngwMDA3IGxuICAxLjAwMCAgICAgICAgICAgICAtPiAgIDAKK2xueDAwMDggbG4gIDEuNSAgICAgICAgICAgICAgIC0+ICAgMC40MDU0NjUxMDgxMDgxNjQ0IEluZXhhY3QgUm91bmRlZAorbG54MDAwOSBsbiAgMiAgICAgICAgICAgICAgICAgLT4gICAwLjY5MzE0NzE4MDU1OTk0NTMgSW5leGFjdCBSb3VuZGVkCitsbngwMDEwIGxuICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTEgbG4gIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorbG54MDAxMiBsbiAgMi43MTgyODE4Mjg0NTkwNDcgLT4gICAxLjAwMDAwMDAwMDAwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitsbngwMDEzIGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMzAyNTg1MDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTQgbG4gIDEwLjUgICAgICAgICAgICAgIC0+ICAgMi4zNTEzNzUyNTcxNjM0NzggIEluZXhhY3QgUm91bmRlZAorbG54MDAxNSBsbiAgOTk5OSAgICAgICAgICAgICAgLT4gICA5LjIxMDI0MDM2Njk3NTg0OSAgSW5leGFjdCBSb3VuZGVkCitsbngwMDE2IGxuICAxRTYgICAgICAgICAgICAgICAtPiAgMTMuODE1NTEwNTU3OTY0MjcgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTcgbG4gIDFFKzkgICAgICAgICAgICAgIC0+ICAyMC43MjMyNjU4MzY5NDY0MSAgIEluZXhhY3QgUm91bmRlZAorbG54MDAxOCBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIG5vdGFibGUgY2FzZXMKKy0tIG5lZ2F0aXZlcworbG54MDAyMSBsbiAtMUUtOSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDIyIGxuIC0wLjAwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjMgbG4gLTAuMSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyNCBsbiAtMC43ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDI1IGxuIC0xICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjYgbG4gLTEuNSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyNyBsbiAtMiAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDI5IGxuIC0xMC41ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjggbG4gLTk5OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAzMCBsbiAtMi43MTgyODE4Mjg0NTkwNDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDMxIGxuIC0yLjcxODI4MTgyODQ1OTA0NiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMzIgbG4gLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54MDAzMyBsbiAtMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMDM0IGxuIC0wRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKy0tIG90aGVyIHplcm9zCitsbngwMDQxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAwNDIgbG4gIDBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54MDA0MyBsbiAgMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5CistLSBpbmZpbml0aWVzCitsbngwMDQ1IGxuIC1JbmZpbml0eSAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwNDYgbG4gK0luZmluaXR5ICAgICAgICAgIC0+IEluZmluaXR5CistLSBvbmVzCitsbngwMDUwIGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2xueDAwNTEgbG4gIDEuMCAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDA1MiBsbiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCitsbngwMDUzIGxuICAxLjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKKworLS0gbG93ZXIgcHJlY2lzaW9uIGJhc2ljcworUHJlY2lzaW9uOiA3CitsbngwMTAxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAxMDIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yMC43MjMyNyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEwMyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03LjI2NDQzMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTA0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIuMzAyNTg1ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMDUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC4zNTY2NzQ5ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEwNiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCitsbngwMTA3IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNDA1NDY1MSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMDggbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC42OTMxNDcyICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEwOSBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAxLjAwMDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTEwIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEuMDAwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTEgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMS4wMDAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExMiBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMwMjU4NSAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTEzIGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIuMzUxMzc1ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTQgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOS4yMTAyNDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExNSBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDEzLjgxNTUxICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTE2IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMjAuNzIzMjcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTcgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorUHJlY2lzaW9uOiAyCitsbngwMTIxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAxMjIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEyMyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03LjMgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTI0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIuMyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMjUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC4zNiAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEyNiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCitsbngwMTI3IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNDEgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMjggbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC42OSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEyOSBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAxLjAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTMwIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEuMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzEgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMS4wICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzMiBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTMzIGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIuNCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzQgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOS4yICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzNSBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDE0ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTM2IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMjEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzcgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorUHJlY2lzaW9uOiAxCitsbngwMTQxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAxNDIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yRSsxICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE0MyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQ0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNDUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC40ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE0NiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCitsbngwMTQ3IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNDggbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC43ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE0OSBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTUwIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTEgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1MiBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTUzIGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTQgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1NSBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDFFKzEgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTU2IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMkUrMSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTcgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBncm91cCBsb3ctcHJlY2lzaW9uIGxuKDEpczoKK3ByZWNpc2lvbjogMQorbG54MDE2MSBsbiAgMSAtPiAwCitwcmVjaXNpb246IDIKK2xueDAxNjIgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiAzCitsbngwMTYzIGxuICAxIC0+IDAKK3ByZWNpc2lvbjogNAorbG54MDE2NCBsbiAgMSAtPiAwCitwcmVjaXNpb246IDUKK2xueDAxNjUgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiA2CitsbngwMTY2IGxuICAxIC0+IDAKK3ByZWNpc2lvbjogNworbG54MDE2NyBsbiAgMSAtPiAwCitwcmVjaXNpb246IDgKK2xueDAxNjggbG4gIDEgLT4gMAorCistLSBlZGdlLXRlc3QgbG4oMikgYW5kIGxuKDEwKSBpbiBjYXNlIG9mIGxvb2thc2lkZXMKK3ByZWNpc2lvbjogNDUKK2xueDIwMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAxMzQgIEluZXhhY3QgUm91bmRlZAorbG54MjAyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMTQ5ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ0CitsbngyMDMgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwMTMgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIwNCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMDE1ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MworbG54MjA1ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMDEgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMDYgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDIKK2xueDIwNyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjA4ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQxCitsbngyMDkgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIxMCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MAorbG54MjExICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMTIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzkKK2xueDIxMyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzYgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjE0ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM4CitsbngyMTUgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDggICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIxNiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNworbG54MjE3ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODEgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMTggIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA4ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzYKK2xueDIxOSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjggICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjIwICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIxICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM1CitsbngyMjEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIyMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNAorbG54MjIzICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjYgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMjQgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzMKK2xueDIyNSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjI2ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMyCitsbngyMjcgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIyOCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQ0ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMQorbG54MjI5ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODIgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMzAgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzAKK2xueDIzMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTggICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjMyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGV4dHJlbWUgaW5wdXQgcmFuZ2UgdmFsdWVzCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworUHJlY2lzaW9uOiAxNgorCitsbngwOTAxIGxuIDFlLTQwMCAgICAtPiAtOTIxLjAzNDAzNzE5NzYxODMgIEluZXhhY3QgUm91bmRlZAorbG54MDkwMiBsbiAxZSs0MDAgICAgLT4gIDkyMS4wMzQwMzcxOTc2MTgzICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MDMgbG4gMWUtOTk5OTk5IC0+IC0yMzAyNTgyLjc5MDQwODk1MyAgSW5leGFjdCBSb3VuZGVkCitsbngwOTA0IGxuIDFlKzk5OTk5OSAtPiAgMjMwMjU4Mi43OTA0MDg5NTMgIEluZXhhY3QgUm91bmRlZAorbG54MDkwNSBsbiAxZS0xMDAwMDEzICAgICAgICAgICAgICAgIC0+IC0yMzAyNjE1LjAyNjYwMDI1NSAgSW5leGFjdCBSb3VuZGVkCitsbngwOTA2IGxuIDJlLTEwMDAwMTMgICAgICAgICAgICAgICAgLT4gLTIzMDI2MTQuMzMzNDUzMDc0ICBJbmV4YWN0IFJvdW5kZWQKKworbG54MDkxMCBsbiA5Ljk5OTk5OWUrOTk5OTk5ICAgICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5Mzk0NiAgSW5leGFjdCBSb3VuZGVkCitsbngwOTExIGxuIDkuOTk5OTk5OWUrOTk5OTk5ICAgICAgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDM2ICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MTIgbG4gOS45OTk5OTk5OWUrOTk5OTk5ICAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTQwNDUgIEluZXhhY3QgUm91bmRlZAorbG54MDkxMyBsbiA5Ljk5OTk5OTk5OWUrOTk5OTk5ICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCitsbngwOTE0IGxuIDkuOTk5OTk5OTk5OTk5ZSs5OTk5OTkgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MTUgbG4gOS45OTk5OTk5OTk5OTk5OTllKzk5OTk5OSAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZAorbG54MDkxNiBsbiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUrOTk5OTk5IC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJhbmRvbXMKKy0tIFA9NTAsIHdpdGhpbiAwLTk5OQorUHJlY2lzaW9uOiA1MAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2xueDE1MDEgbG4gMC4wMDA5ODgwMDkwNjU3NDQ4NjM4ODYwNDYwODQ3Nzg2OTgxMjUxODg1NzAyMzc2ODk1MSAtPiAtNi45MTk4MTg2ODQ0MDMzNzg3OTk1OTQ1MTQ3ODM2OTU1NTg2MDA5NTQ4NTEzMDQzNjg5IEluZXhhY3QgUm91bmRlZAorbG54MTUwMiBsbiAxNTguMTU4NjY2MjQ2NjQ2MjMwNzAxODQ1OTUwNDUzMDQxNDU5NDk5MDA3MTQ5ODc4MjcgIC0+IDUuMDYzNTk4NzQ1ODg5NTY0NzQ1NDkwNzgwNjUwNzUwMzgyNTYwMjc1ODM5MjI4NzY4NCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDMgbG4gMC4wMDU2NTY2MTQxMjA1OTU3MTkyNTA0MDI4NTgxNDAyMTc5OTc3NTI0OTI4ODMwOTMyMSAtPiAtNS4xNzQ5Mjk3Nzc2NzYwNjMyMTAyMDQ3NTQwMzAwNDkxNTUwOTMxNjUxMzE4OTc1MjM3IEluZXhhY3QgUm91bmRlZAorbG54MTUwNCBsbiAwLjAwMDAwMDA2OTE0MjMyNTMyNjIwNDg5NjAyMDA4NDAyMDkxNjY2NTQ3OTAzMTgwNjA3IC0+IC0xNi40ODcwOTg3NzA4Nzc4MjUzMDgxMzg5NzY4MTg2ODg3NzE2MzgxNzIzMzMwMzQzNDcgSW5leGFjdCBSb3VuZGVkCitsbngxNTA1IGxuIDAuMDAwMjUzODAzNzQ2MjEyOTc2NTc1MDQ2NjE1NDA3NDkzNTUyNTEyMzE3NzAwNzA3MjMgLT4gLTguMjc4OTQ5MjQyMzAwNTAwMzIwNTI0MjE2Mjc0MTU2OTAzMzEyNDI2MDMyMTk1NDU4OSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDYgbG4gODMuMDMzNjU0MDYzODc3NDI2MjYxMTA4NTkyNTk5MTgyNDE4OTUzNDQyNjc3NTU0ODA2ICAtPiA0LjQxOTI0NTk5NjI2NDcxMzc5NzY5NDkyNDk4MTA4MTU2OTg0NjUwMzE2MDk4NDM2NjkgSW5leGFjdCBSb3VuZGVkCitsbngxNTA3IGxuIDAuMDAwMDAwMDA0MTY4NjMyMjgwOTI0ODE2NTE2Mjc3MzQ2Njg0NDA2NjM2NzgxMTg3MjkgLT4gLTE5LjI5NTY3Nzg0NTEyMjE0MTc3Mjc5MTI5NDU5OTcxNDk1MDE3NTI4NDkxNTY2NjQzMCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDggbG4gMC4wMDAwMDE0MDg0Nzg3MzE4NzgyMDU3MDE4MTIxNDI3MTk2MDUxMTA4MDUyMzQ1NzY2OSAtPiAtMTMuNDczMDAwMzQ5NTgxOTY3MTg5NjY4MzA1MzE0Mzg0OTUyMjUxNTU2ODA5NDgwMzM5IEluZXhhY3QgUm91bmRlZAorbG54MTUwOSBsbiA2Ni4xNzYxMDY1NTUxODE1MjcxMDE2MzAzNTExMjc1ODM5NDQ2ODk3NTIwNjkxMzI1MjIgIC0+IDQuMTkyMzE5NDY5NjIzMjUwNTg4MzY2NjE3MTExNjk2NjEzNzY5NDAxMzQzMTUwNDI1MiBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTAgbG4gMC4wMDAwMDAwMDAwMDAwOTg5OTA0MzQ4NzQwMzU5MDkwMDExMTYwMjAyNDU2MjI5NzkwOCAtPiAtMjkuOTQzNzUzMTY2ODc3ODQwOTg1ODIxNTA4MTEyOTE3OTkxNTA2NjU2NTQ1MTc0MTYzIEluZXhhY3QgUm91bmRlZAorbG54MTUxMSBsbiAwLjAwMDAwMDAwMDAwMzI0NjE4Mjk2NzIxNzQ3MDk3NTEwNDUzMzg4NjgzOTEyNzMzNTY5IC0+IC0yNi40NTM1NDEyODE0NDQ1ODY4MTkwMDk1NDY0MTg1Nzc1MDcxNjMzNjI1OTAxMzk0MjIgSW5leGFjdCBSb3VuZGVkCitsbngxNTEyIGxuIDcyLjY0Njk2ODgxODQ2MzU0NjQ0OTQ5OTE0NzU3OTAyMzU1NTAwODM5Mjg2MDQyMzM4NSAgLT4gNC4yODU2MTE2NjYwNjg5NjQ2ODgyODUyMTI4ODUzNDIzNTY2Mjc2NzE4MjMwNDI2NDc5IEluZXhhY3QgUm91bmRlZAorbG54MTUxMyBsbiAwLjAwMDAwMDAwMDAwMDAwMDY2NzU1NDgzMTI0NjM1NjEyNTc0MjYzMTUzODI1OTkwNTIzIC0+IC0zNC45NDI5MTAxNDI4MDI3NjkzMTkyNjI4NzUwODAzOTg4NTI0OTE1ODg3MDcxNzI0ODMgSW5leGFjdCBSb3VuZGVkCitsbngxNTE0IGxuIDYxLjAwMjkxMDQ0NzIwMjM5ODIwNDExNDkwOTQ1MTg1MTExMTQyNDY1NzY3MTkxMTAwMiAgLT4gNC4xMTA5MjE1NzUyODQzMzc3MzIzMzYzMTgyMDUxNDQ2MTc3MDY2NDM0MDM4MDk2NTI5IEluZXhhY3QgUm91bmRlZAorbG54MTUxNSBsbiA5MTcuMDY5MTc2MTEzMzE5ODA5OTkyMjc4OTM1ODQwMTA1NDQ1NDIzMTIyMzkxNzQ3NzQgIC0+IDYuODIxMTgyOTA2ODMwMzExNDEyODc1MjQ1MzY2MTk0NjQ0Njk3OTc4NzgyNjI4MjkwNyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTYgbG4gMC4wMDAwMDAwMDE3MDgyMzc5NDg4MzY3MzA4MzM1ODU0OTc0OTA3ODk3MjAwMzk2NTE5NCAtPiAtMjAuMTg3ODAzNDM2OTc2MTUwNDc3Mjk3MjQ2NjY2NzcxNjI2ODI3MDU3MTkxMDIzMDA0IEluZXhhY3QgUm91bmRlZAorbG54MTUxNyBsbiAwLjUzNzMxNzY3ODQ1MzU4MjI0NDQ1ODA5NzYxMzE1MTU5MjQ5ODk4NTY2NTQyOTEwNjQ5IC0+IC0wLjYyMTE2NTc3OTM5OTY4NDA5MjExNzM2NDEzNjI4MjM2Mjg1MTYwMDQ4MzU3MDAwOTYxIEluZXhhY3QgUm91bmRlZAorbG54MTUxOCBsbiAwLjAwMDAwMDAwMDAwMDAwMDA4OTY1MjkxMzkyODgyODA0MTYxMjk5NzU4NzA4MDMzMzczIC0+IC0zNi45NTA1ODU5NzA5ODA4NTczNzYwODEyNjUwNzMyNzYzMDM2NzA4MjAwNTY5MTYyMDYgSW5leGFjdCBSb3VuZGVkCitsbngxNTE5IGxuIDAuMDAwMDAwMDAwMDY5OTAyNDQ5MTYwMjY0Mjk5MDQ0OTgyNzg5ODI1MzAxNzAyOTU2NjggLT4gLTIzLjM4MzkyMDQyOTI0NDQ1NzU3ODM3MzUyMzUwODQyNzc4MzE0NDU4OTQ4MDQyMDc1MyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjAgbG4gNC4wMzEyNTQyOTc3MDcwMzAwMDcwNTA2MDY0NjY2NTM2NDc4MzczODAxOTg4NTQwNjE0ICAtPiAxLjM5NDA3NzU2NzY1OTI0NTE5NDU3OTU3NTI3OTY0MjEzOTE4NzEzMDIwMjQ3NjMzMDUgSW5leGFjdCBSb3VuZGVkCitsbngxNTIxIGxuIDI3MS44NDk5MTMxMTU1MTg3NTYwMTQzMjUxODgxOTU2MjM5MTY5OTMyNDYzMjM5NjQyMyAgLT4gNS42MDUyNTAxMjM5ODczODYyNTE3OTE2Njc5NzQ3MTQ2NTM5ODA4MDc3NDMxODczNDc4IEluZXhhY3QgUm91bmRlZAorbG54MTUyMiBsbiA3LjQxMTg2NzE2MjkzNzM4NjQ2NjcyMjk0NDU3NDY4NjIzMTQ0NDM4OTU0MDQ4MTg2ODkgIC0+IDIuMDAzMDgyMzg2MzcwNjM0NDYyODIzOTE0NzYzOTMxODI4OTk2MTkxNzA2MDEyMTE0MSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjMgbG4gMC4wMDAwMDAwMDAwMDAwMjAyNjMxMTQ1MjYyNTM2NDkwNTM1NzMyMTY2NDE4NjAzNDI1OCAtPiAtMzEuNTI5OTc0MTgwMDU0NDM4NzkyMDQzODU2ODc3MzE0MDQzNzk0MzIwOTUxMTM0NzU0IEluZXhhY3QgUm91bmRlZAorbG54MTUyNCBsbiAwLjAwMDAwMDAwMDAwMDA5NTYzMzk4NjUxMjYxNzU2OTUyMzk4MjUwNjI0NzM3ODA5MzQ3IC0+IC0yOS45NzgyNDgxMzA1NzY5NzI5NTMxNDEyODQxMzY5NjI2NzAwMjEzNjg4MzQ3OTI1NzkgSW5leGFjdCBSb3VuZGVkCitsbngxNTI1IGxuIDAuMDAwMDAwMDAwMDk1NTY3NzI2Njk0MDk4NTg2NTMwMjY1NTgyMjM0NjUxOTc4MDg5OTEgLT4gLTIzLjA3MTE4NTkzOTc0ODI4NTU0MTIyODIwNjE2MTQ3Mjk1NjY2MTE5Njk1Njc0MTE4NiBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjYgbG4gNi44NDQxNjQ4Mjk4MDI3MzAxMjkyMzQyMDU3MjQ4NzM3MzI2MTUyMjUwNzk0MDI2NzYxICAtPiAxLjkyMzM5NjQzOTU4MDE5NDY1OTcyNzI1ODk0NzM0MTc5NDgwMjQzNjEwMDUwODI5MDggSW5leGFjdCBSb3VuZGVkCitsbngxNTI3IGxuIDAuMDAwMDAwMDAwMDAwNzMwNTk2OTk4ODQ0Mzk5NzkzOTQ5NDU4MjIwMzU3MDQyNjQ1NzcgLT4gLTI3Ljk0NDkxNDM4ODM1MzcyNDcxODgzNjEwMTgyODY3Nzc3MTk2NzEyODUwOTYwMzE1OCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjggbG4gMC4wMDAwMDAwMDAwMDAwMDAwMjYxMDA3ODI4MDQxOTA4MjI2MzEzODA2NDc0NTQxNjc4NyAtPiAtMzguMTg0NTY2MzY3NTE2MjA3ODg1NTczNzczMzIwMTM1OTY1Nzk4NzE3MTIwNzM1MTE1IEluZXhhY3QgUm91bmRlZAorbG54MTUyOSBsbiAwLjAwMDAwMDAwMDAwMDAwMDAwMTUwMjU5NTE3MTY2Mjk0MjQzMDg4NTQ2ODA2MDgzMjgzIC0+IC00MS4wMzkzMzc5NDYyNjY2NzYxMDg1MzgxNzA4Mzc1ODAwNTE2OTk2MTgzMzQ5Mjg0MjEgSW5leGFjdCBSb3VuZGVkCitsbngxNTMwIGxuIDAuMDAwMDAwMDAwMDAwMDAwODc5MTkxNjA1NDE3MTQ1ODA3MDcxODE5Njk3MDg1MDIwOTEgLT4gLTM0LjY2NzUyODgxODgyNzY3MTUwNzUxNDMxOTc0NDA0NzQ0MDY5NjE4NzM1ODY3Njg0OCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzEgbG4gMC4wMDAwMDAwMDAwMDM5NTcyNjcyNTEyMDc4Nzc2MzI3MTg0OTU3NzcwODA2ODU4NDU5OCAtPiAtMjYuMjU1NDY3NDE2OTYxMzU3NzQxODE4NzM1Nzg3MjI2NjcxOTM4Njc4NDI0NzQ4NDMxIEluZXhhY3QgUm91bmRlZAorbG54MTUzMiBsbiAwLjAwMDAwMDAwMDAyMDE0MzM0OTAxNjY5MzY2MjE4MDE4Mzc3MjEzMTUwNzE1OTM4MzU1IC0+IC0yNC42MjgxNDY5NTU2MzUzNTkwMzUyODkxMjMwMjczMTk5NjkyMDE2OTM3MzcxNTkxMDggSW5leGFjdCBSb3VuZGVkCitsbngxNTMzIGxuIDAuMDAwMDAwMDgwOTc5MjcxMDExMDEwOTMxMTc3NTM5Mzg3NjYyNDE0NDI4OTYwMzA2MzcgLT4gLTE2LjMyOTA3MjYyODQ2OTcxNTE3ODYzNzE3ODM2NTcxMDM3MzM5ODIwMzE5MDkzNzQ1NCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzQgbG4gMC4wMDAwMDAwMDAwMDAxNzExNTgzNDE2MjYzMjg2NDM5MjAzOTY2ODExNjI0Mzk4NDE3NiAtPiAtMjkuMzk2MTg3MjkyNDM0ODk4MjI1NDUzNjI2Nzk0NDU5Mjg1MTU3MjYzMTc3NTI4MDM0IEluZXhhY3QgUm91bmRlZAorbG54MTUzNSBsbiAwLjM5MTY4MzE3NTkzODY2MzM0MDg3MzA1NDU5OTMzNzIzODY0Mjk0ODU3MDg2MTA1MDM1IC0+IC0wLjkzNzMwMTk5MDYyNzU3MjQwNDg1ODM2NjM3MzA2Nzg1MDM3MzY4NzQ2NzM3NjkzMDI5IEluZXhhY3QgUm91bmRlZAorbG54MTUzNiBsbiA3OS4zMzUwMzY3OTg5NzE1MTUwMjY1MTk2MzAxMDMzMjUzNjk3Mjk2Mzc1MTQxMjc2MTcgIC0+IDQuMzczNjc5ODU3MDI4NzgyODgyMzc3MjE0OTczNTE3MDQzMTAxMDYxNjk2MTk3Njk2NSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzcgbG4gMC4wMDAwMDAwMDAwMDAwMDA1NjAwNDk1MjEyOTkyNjEzNzQxMzYwMjExNjU5MTQ5MzYyNSAtPiAtMzUuMTE4NTA2NDYzMTgxODcwMDIwNzMwNjg1ODg0MzMzMDAwMjQxMDM5MDI4MTI3MjEzIEluZXhhY3QgUm91bmRlZAorbG54MTUzOCBsbiAwLjAwMDAwMDA2MDA2MDM1OTA3ODQzODkwOTE4ODMyNDgxMDk5NjYwNjM5NTUzNjY2MDc4IC0+IC0xNi42Mjc5MTU3OTU3NDcxMTI1NjY1MzI3MDU5NzQ4NTMxMTQ0NTQ0MDUwMTA0NzIwNDMgSW5leGFjdCBSb3VuZGVkCitsbngxNTM5IGxuIDAuMDAwMDAwMDAwODUyNDIwMjQ5Mzc0MTQ5MDYzNzEzMzM4MjY1NzQ2MzI0NTA1ODc1OTAgLT4gLTIwLjg4Mjk0MTQ2MDI2ODEwMTA4MDE4NjQ4MjIzMDY1Nzc3NDk5NzI3MzQ5NDEwNzIyMSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1NDAgbG4gMC4wMDAwMDAwMDAwMDA0MzY3MTA5OTQ5OTI2MjM1MDMxNjE3MzI0NjU1MDc3MTk1MTU2MSAtPiAtMjguNDU5NTA0NzU3Mjg1NjM5MjIxNzc2MzA1OTY4NDY5MDU4ODU0NTU4NzI2NTkzOTQ1IEluZXhhY3QgUm91bmRlZAorCistLSBQPTM0LCB3aXRoaW4gMC05OTkKK1ByZWNpc2lvbjogMzQKK2xueDEyMDEgbG4gMC4wMDg2NzMyODgwODE1OTI3MTgyOTk3NTY2ODEwMzM0Mzk0IC0+IC00Ljc0NzUwNzMxMTkyMDg0NDc1MjQ4NjkzODE4Nzk3MzcyMSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDIgbG4gMC4wMDA3MTA0MTAzNjkzNDYwMjYwNjA5NzkyMjIyNTY5ODU0IC0+IC03LjI0OTY2Nzc2OTkwMzUwMzAyMzAwNTU0OTI1MDM0NzY5NSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDMgbG4gNzg2LjgzOTg5NDUzODUxMDUxOTA2OTc1NDE0OTMzOTI3NDIgIC0+IDYuNjY4MDI0NzkwMDMxODM2MzQwNDcxODI0MTQ3MDEwNTQ2IEluZXhhY3QgUm91bmRlZAorbG54MTIwNCBsbiAwLjc3MjMwNzM2MjAyODI2ODc2NTY4OTUxOTAxNzE5NjczOTkgLT4gLTAuMjU4MzcyNjcwODUwNjg1MDg2ODc4NjgxNjIzODIxNzMyNiBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDUgbG4gMC4wMDYxMDU3OTUxNTE3MTk3NjMxMjg3MTgzOTM4NDEyMjAwIC0+IC01LjA5ODUxNjkzMzkxODc5NzM0NzA2NDQ1NDEwMzc0MjYzNSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDYgbG4gMC42MTgxMzc5NzA4MTg0MzkzNzMwMTAzOTE3NTYyNDk4NzQ1IC0+IC0wLjQ4MTA0MzU5MjY5MDMzNjUwODc0NjMzODc3NjAzNTAwMjEgSW5leGFjdCBSb3VuZGVkCitsbngxMjA3IGxuIDA5LjEzODg4MjYxMjI5MDM5OTg5MTEwNzUzMzg5MDk2NzYwICAtPiAyLjIxMjUzODEyNTUwNzk3NTU3NDUwOTU2MzAyNzY5NjAyMSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDggbG4gODAyLjAxMDU0MTcwNjMxNDM2OTY0OTcyOTIxNTgxNDcxNzQgIC0+IDYuNjg3MTIxNzUyMDUyMzQxNzM3MjM0ODMyMjAzMzUwMjE0IEluZXhhY3QgUm91bmRlZAorbG54MTIwOSBsbiA3NzguNzc0OTcxMDM4Nzc3MzcxMzUyMzAyODQ5NzMzMzA1OCAgLT4gNi42NTc3MjIxMzUxMjY5MzU0NzIwODY2MjUwMzE0MTMwMzEgSW5leGFjdCBSb3VuZGVkCitsbngxMjEwIGxuIDAuMDAyNDQ1NzI5NTg5NTM0NjUwMjUxMzU2NzY3OTM5MDYxNiAtPiAtNi4wMTM0MTE3OTk5NDAyNDUzNDUzMjEzNDgyOTAzOTg1MTcgSW5leGFjdCBSb3VuZGVkCitsbngxMjExIGxuIDAuMDAwMDUxMTI5Njk0Nzg3MjgyODMxMDMzODg2NDIxNzg2MCAtPiAtOS44ODExNDUxMTgyMzcyODE3OTgwODE1NzMxMzE3MTE2MzYgSW5leGFjdCBSb3VuZGVkCitsbngxMjEyIGxuIDAuMDAwMDI0NjgwMzUwODYwMjU1NDkyNDkzODY4NTE1NTY1OCAtPiAtMTAuNjA5NTAzMTQyNjQ4MjU2NjE4MjUzNjA5NzE0MzAyMTggSW5leGFjdCBSb3VuZGVkCitsbngxMjEzIGxuIDkuMDI3ODk4MTk5MjUzNTExNjY4MjQyOTc3NzY2NjE2MDgyICAtPiAyLjIwMDMxOTU4Mjc3ODg5OTAyOTc4NjAxNzgzMDU1NzI5MyBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTQgbG4gMC4wOTkxODEyMzk2NTQyNTA1NjMxODUwNjkyODAwOTA0MTg4IC0+IC0yLjMxMDgwNjM5ODk2NDY3MjI1ODgyMzA0MzE4MDQwMDM4NCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTUgbG4gMC4wMDAwMDAwMDAwMDcwMjM4ODEwMTQzMDI4ODExMjIzOTI0IC0+IC0yNS42ODE3MDUxOTk2MTYzNjY0NzE3NDcxNDUzODI5MDA3NSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTYgbG4gMi42MzAxMDE2NjUzNDI4MjY0OTQ3MzAzOTQ3MjkzMTMxNjcgIC0+IDAuOTY3MDIyNTAxNDY2NDM2NzQ2NTEyODI0MzAzOTc0OTU1OSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTcgbG4gMC4wMDU2ODc4OTI4NTk0MzU5NTg3NjkxNTI2MDYzMjU0NjgzIC0+IC01LjE2OTQxNTQyMjkwNDAzNzgxOTczNjYzNzM5OTQ0NTA5NiBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTggbG4gNTY3LjM0MzYwNDcxMjEwNTc4NDM5MDgxMDY1NzMwOTU1OTAgIC0+IDYuMzQwOTY1MTI0OTY0MjU4NDg2NDYzNDQ0MzYwNzg3OTcwIEluZXhhY3QgUm91bmRlZAorbG54MTIxOSBsbiAxLjE5OTI5MTI0ODEyNDY1NTk5NjYxNDYwNTc0NTY0OTcyNSAgLT4gMC4xODE3MzA3NTU3NDI1OTExODA1NzY1MDg3NzU1Njc1NjU3IEluZXhhY3QgUm91bmRlZAorbG54MTIyMCBsbiAyNS4wMjA1MDQ0ODU4MjAzMTA5ODY5NjI2NzQ3OTEzNTU1NyAgLT4gMy4yMTk2OTU2NjgxMzc2NTkxMzk1NDQxNzg5MDU0NTkzMTcgSW5leGFjdCBSb3VuZGVkCitsbngxMjIxIGxuIDAuMDAwMDAwMDAwMDAwOTkzOTU5NzAyMzU1ODc1Njk2MTMwMCAtPiAtMjcuNjM3MDc5NzI5OTY1Mzc2MzY1MDQzOTY1NTgyNTkwNTggSW5leGFjdCBSb3VuZGVkCitsbngxMjIyIGxuIDAuMDAwMDAwNzk4ODU1MTY3MDE1OTQyOTcxNjUwNjQzMDQwMyAtPiAtMTQuMDQwMDg2MTc1NDI1OTcyMzA5ODgxOTg2MTIzNzY0MTUgSW5leGFjdCBSb3VuZGVkCitsbngxMjIzIGxuIDQuNjgxNTE1ODAwMTc2MTI5MTg0ODczNzcwNjA1NTg5Nzk1ICAtPiAxLjU0MzYyMTk0NjQxNTM4MzMzODk3MjEyNDQ0NTQ0NTc0OCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjQgbG4gMTUuOTUxMjY2NjkxNjExMDMwMTEyMDY2NTg3NDkzNDU3ODEgIC0+IDIuNzY5NTM4MjQyNDc5NDgzNTM5Mjc1OTg2Mzk1NDQzNTM5IEluZXhhY3QgUm91bmRlZAorbG54MTIyNSBsbiAwLjAzMDE2MjY3ODM5MjIyMTEyMTM2NzU0NTcyNzkwNzYwNjYgLT4gLTMuNTAxMTQ5OTMzNjc3MjgzMzQxMDIzOTMyMjgxODI2MzQxIEluZXhhY3QgUm91bmRlZAorbG54MTIyNiBsbiAwMDAuMDA0MDU0NDA2NDg4MTgyMTc3MDUyODQ3NTE4NTY3NCAgLT4gLTUuNTA3OTUwOTY3NTU3MDIxNjcxNjQ3MTY1ODg5NjA4MzI0IEluZXhhY3QgUm91bmRlZAorbG54MTIyNyBsbiAyOS4wMTYxNzA5NTkzNTU5Mzc5MjA5NTkxMzc4NTEwMDM2MCAgLT4gMy4zNjc4NTMyOTM4NjI3NDU2NTE4ODg0NTAwMDQ0NzMyOTcgSW5leGFjdCBSb3VuZGVkCitsbngxMjI4IGxuIDc4LjAxODM2MTY3MzQ0NzM2NzMzMDI0ODA0MjQzMTk1MzIzICAtPiA0LjM1Njk0NDIwNTA1NTc2ODU3NTk4Nzc4MTM3NTAwMzk5MiBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjkgbG4gMC4wMDAwMDAwMDk2NTQ1MzE5MzE2OTY1MzIxMTU4NjM0ODkzIC0+IC0xOC40NTU4Mzg0MDE2MDk2NTgxNDQ2MjA5NTQ3NzM2NTAxMyBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzAgbG4gOTcuOTU0NzUyMzc3MjA1Nzk3NTI3NzA1ODcxODUwNzQ0MjggIC0+IDQuNTg0NTA1NjYxNjEyODEyNzQyMjA4NjE5MzU4MjE0NzI5IEluZXhhY3QgUm91bmRlZAorbG54MTIzMSBsbiA1MjguMDYwOTI2MjA1MDQyMzI0NjQwMjU2NDIyODQzMjM3MSAgLT4gNi4yNjkyMTE2Njc1ODkxMzgxMTMzOTY1ODM4OTQzMTU5NTYgSW5leGFjdCBSb3VuZGVkCitsbngxMjMyIGxuIDAuMDAwMDAwMjI1MDA2NDM0OTczMjk2OTY5NjY2MDQ1Mjk3MiAtPiAtMTUuMzA3MTM2ODM1MjY5NjM5OTY3MTIxNjc3MDE3Mzg3MjQgSW5leGFjdCBSb3VuZGVkCitsbngxMjMzIGxuIDQ3Ljk3MDYzNjM3NzY3OTk4NjU4NTY3MTk5MDQ5NzI1NzU0ICAtPiAzLjg3MDU4OTA4MTU4NTY2MDY5MjE5NTk4OTg1NDg0MjM3MiBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzQgbG4gMC4wMDA1Mzk0MzExMzQ0NTQxNDMyMzE4ODUzNTEzNDE0MzYxIC0+IC03LjUyNDk5NTQyODM5MzkyNTkzNDA4NzEyNjcwMjk3NDEyMSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzUgbG4gMC4wMDAwMDAwMDkwOTczMzg1NjQ5NTY3NDcxNjc0OTcyNjMzIC0+IC0xOC41MTUyODM5MzE1ODkzMTc4MzQ0NzAzNTAwNDEyNTc5MSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzYgbG4gMC4wMDAwMDAwMDAwMjM4Nzc2NDkwMjI3NTc2MTk3MzE3OTc3IC0+IC0yNC40NTgwNzgyODE4ODM4OTU2MTMzMTE1ODg3OTIwNzI2MiBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzcgbG4gMC4wMDAwMjM2NTg3MDAwMjMxOTIxNTMyMTQ1MzI2MjE4NzU4IC0+IC0xMC42NTE3Nzk2NDQ5OTgyMzMxNDk1MjQyOTI3Nzk3OTAzNCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzggbG4gNDk5LjEyNzc0NDg4NDYxMzA3MDk4MjcxNTQ1NTYxMjU5NDIgIC0+IDYuMjEyODYyMDY0NzYxNDI3OTY3NDYxMTg4MDgzNTE0Nzc0IEluZXhhY3QgUm91bmRlZAorbG54MTIzOSBsbiAwLjAwMDAwMDM5NjAxOTIzMDAyODQ3ODc2NjM3MTI0MTc2NDcgLT4gLTE0Ljc0MTgwMzA2NjE5Mjk4NTQ4MDkzNjk3NjA4MjkzMjg0IEluZXhhY3QgUm91bmRlZAorbG54MTI0MCBsbiA0MS4wODI2ODM1MDgyOTQ3NzQ1MTY2NzIyODg5MjQ5NTEzNiAgLT4gMy43MTU1ODY3MDY4ODcyNzgwMzkxNzM1ODQ4NTkyMTg5NjAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9MTYsIHdpdGhpbiAwLTk5CitQcmVjaXNpb246IDE2CitsbngxMTAxIGxuIDcuOTY0ODc1MjYxMDMzOTQ4ICAtPiAyLjA3NTA0MTI4MjM1MjI0MSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDIgbG4gMTMuNTQ1MjczOTY4NDUzOTQgIC0+IDIuNjA2MDM3NzAxODcwMjYzIEluZXhhY3QgUm91bmRlZAorbG54MTEwMyBsbiAwLjAwMDgwMjY1NTQzNDEzMzEgLT4gLTcuMTI3NTg1MDM0MzIxODE0IEluZXhhY3QgUm91bmRlZAorbG54MTEwNCBsbiAwLjAwMDAwMzA1ODIyMzMyNjEgLT4gLTEyLjY5NzY3NjQyMzAwNjI1IEluZXhhY3QgUm91bmRlZAorbG54MTEwNSBsbiAwLjAwMDQ0Nzc0OTc1MDk2NzIgLT4gLTcuNzExMjc2MDczMjEwNzY2IEluZXhhY3QgUm91bmRlZAorbG54MTEwNiBsbiA3LjYxNjI2ODYyMjQ3NDM3MSAgLT4gMi4wMzAyODY1Njc2NzUxNDggSW5leGFjdCBSb3VuZGVkCitsbngxMTA3IGxuIDUxLjU4MzI5OTI1ODA2MzgxICAtPiAzLjk0MzE5Nzk2MjMwOTU2OSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDggbG4gMC4wMDE4MTk3NDk3OTUxMjYzIC0+IC02LjMwOTA1NjI2MjU0OTM0NSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDkgbG4gMi45NTYyODI0NTcwNzI5ODQgIC0+IDEuMDgzOTMyNTUyMzM0NTc1IEluZXhhY3QgUm91bmRlZAorbG54MTExMCBsbiAwLjM4NDMzMjU1NzkxODk5MDYgLT4gLTAuOTU2MjQ3MDY0OTQwMDU1OCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTEgbG4gMC4wMDc0NDY2MzI5MjY1NjYzIC0+IC00Ljg5OTk5MzMwNDkxOTIzNyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTIgbG4gMC4wMDAzMzcyNDc4NTMyOTkzIC0+IC03Ljk5NDY5MjQyODIwNjM3OCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTMgbG4gMC4wMDg0NzkyMjYzMTY3ODA5IC0+IC00Ljc3MDEzNjA2OTU2OTI3MSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTQgbG4gNS45MjY3NTY5OTgxNTExMDIgIC0+IDEuNzc5NDc3MTgyODM0MzA1IEluZXhhY3QgUm91bmRlZAorbG54MTExNSBsbiA5LjAyNTY5OTE1MjE4MDg5NyAgLT4gMi4yMDAwNzU5Njk2MDQxMTkgSW5leGFjdCBSb3VuZGVkCitsbngxMTE2IGxuIDEuOTEwMTI0NjQzNTMzNTI2ICAtPiAwLjY0NzE2ODQ5ODMyMzgxODMgSW5leGFjdCBSb3VuZGVkCitsbngxMTE3IGxuIDAuODE1ODkyMjcxMTQxMTAyMCAtPiAtMC4yMDM0NzI5NTMzOTM5Mzg3IEluZXhhY3QgUm91bmRlZAorbG54MTExOCBsbiAwLjAwNjcwODAwMTY0NzUzMjIgLT4gLTUuMDA0NDU0MTg5NDE0MTM5IEluZXhhY3QgUm91bmRlZAorbG54MTExOSBsbiAwLjAwNDc1ODMyNDIwOTI3MTYgLT4gLTUuMzQ3ODU5NzI5NjAxMDk0IEluZXhhY3QgUm91bmRlZAorbG54MTEyMCBsbiAwLjAzODY2NDc0MTE2NDEzMzkgLT4gLTMuMjUyODI3MTc1MjYzMTEzIEluZXhhY3QgUm91bmRlZAorbG54MTEyMSBsbiAwLjAwNTAyMjY0Mjc4NDE3NjEgLT4gLTUuMjkzNzk5MDMyNzc0MTMxIEluZXhhY3QgUm91bmRlZAorbG54MTEyMiBsbiA2LjkyNzkzNzU0MTYzNzI2MSAgLT4gMS45MzU1NjIxNTU4NjY5MDYgSW5leGFjdCBSb3VuZGVkCitsbngxMTIzIGxuIDAuMDAwMDA5NTc0NTM0MzUxMyAtPiAtMTEuNTU2NDAzNjU1Nzk4MTQgSW5leGFjdCBSb3VuZGVkCitsbngxMTI0IGxuIDEuNjAyNDY1NDkyOTU2NTM4ICAtPiAwLjQ3MTU0MzM3NjMyNDM5MzYgSW5leGFjdCBSb3VuZGVkCitsbngxMTI1IGxuIDM4Ljk4NDE1NjI1MDg3NTM1ICAtPiAzLjY2MzE1NTMxMzYxMDIxMyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjYgbG4gNS4zNDMxODIwNDIyNzY3MzQgIC0+IDEuNjc1ODIxMzYzNTY4MTEyIEluZXhhY3QgUm91bmRlZAorbG54MTEyNyBsbiA1NS44OTc2MzcwMzI0NTgxNiAgLT4gNC4wMjM1MjIxMDc5MzQxMTAgSW5leGFjdCBSb3VuZGVkCitsbngxMTI4IGxuIDAuNzQ0NTI1NzgxMDI4MDg0NyAtPiAtMC4yOTUwMDc3OTg4MTAxMDMwIEluZXhhY3QgUm91bmRlZAorbG54MTEyOSBsbiAxLjYzMTQwNzMxNDk0NjA5NCAgLT4gMC40ODk0NDMwMjU3MjAxMjQ4IEluZXhhY3QgUm91bmRlZAorbG54MTEzMCBsbiAwLjAwMDU0NjI0NTE5MzI2MDIgLT4gLTcuNTEyNDQyNjExMTE2ODUyIEluZXhhY3QgUm91bmRlZAorbG54MTEzMSBsbiAwLjAwMDA4NjQxNzMyNjkzNjIgLT4gLTkuMzU2MzIyMzU5MDE3MzE3IEluZXhhY3QgUm91bmRlZAorbG54MTEzMiBsbiA1LjIyNzE2MTcxOTEzMjg0OSAgLT4gMS42NTM4Njg0Mzg0Mzk2MzcgSW5leGFjdCBSb3VuZGVkCitsbngxMTMzIGxuIDYwLjU3MDc4NDY2OTQxOTk4ICAtPiA0LjEwMzgxMjY3NTY2MjQ1MiBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzQgbG4gMC4wOTkyODY0MzI1MzMzMTYwIC0+IC0yLjMwOTc0NjM0ODM1MDMxOCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzUgbG4gMDkuNDg1NjQyNjg0NDczMjUgIC0+IDIuMjQ5Nzc5MzU5MDc0OTgzIEluZXhhY3QgUm91bmRlZAorbG54MTEzNiBsbiAwLjAwMzYxMDYwODkzNTU2MzQgLT4gLTUuNjIzODc4ODQwNjUwNzg3IEluZXhhY3QgUm91bmRlZAorbG54MTEzNyBsbiAxLjgwNTE3Njg2NTU4NzE3MiAgLT4gMC41OTA2NTg1NzM0NTkzNzA3IEluZXhhY3QgUm91bmRlZAorbG54MTEzOCBsbiA2Mi41OTM2MzI1OTY0MjI1NSAgLT4gNC4xMzY2NjM1NTcyMjA1NTkgSW5leGFjdCBSb3VuZGVkCitsbngxMTM5IGxuIDQuMzczODI4MjYxMTM3MjAxICAtPiAxLjQ3NTYzODY1NzkxMjAwMCBJbmV4YWN0IFJvdW5kZWQKK2xueDExNDAgbG4gMC45OTQ0ODM1MjQxNDg3MzggIC0+IC0wLjAwNTUzMTc0Nzc5NDkzODY5MCBJbmV4YWN0IFJvdW5kZWQKKworLS0gUD03LCB3aXRoaW4gMC05CitQcmVjaXNpb246IDcKK2xueDEwMDEgbG4gMC4wOTEyMDI1IC0+IC0yLjM5NDY3MyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDIgbG4gMC45NzI4NjI2IC0+IC0wLjAyNzUxMjQyIEluZXhhY3QgUm91bmRlZAorbG54MTAwMyBsbiAwLjM4ODYwMzIgLT4gLTAuOTQ1MTk2NSBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDQgbG4gOC43OTg2MzkgIC0+IDIuMTc0NTk3IEluZXhhY3QgUm91bmRlZAorbG54MTAwNSBsbiAyLjQ1OTEyMSAgLT4gMC44OTk4MDQwIEluZXhhY3QgUm91bmRlZAorbG54MTAwNiBsbiAyLjAxMzE5MyAgLT4gMC42OTk3MjIwIEluZXhhY3QgUm91bmRlZAorbG54MTAwNyBsbiA5LjA2NDg1NyAgLT4gMi4yMDQ0MDUgSW5leGFjdCBSb3VuZGVkCitsbngxMDA4IGxuIDUuNzk2NDE3ICAtPiAxLjc1NzI0MCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDkgbG4gMC4xMTQzNDcxIC0+IC0yLjE2ODUxNyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTAgbG4gMC41MzQxNTQyIC0+IC0wLjYyNzA3MDcgSW5leGFjdCBSb3VuZGVkCitsbngxMDExIGxuIDYuNjkzNzgxICAtPiAxLjkwMTE3OSBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTIgbG4gMC4wMDgxNzc5IC0+IC00LjgwNjMyMCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTMgbG4gOC4zMTM2MTYgIC0+IDIuMTE3ODk1IEluZXhhY3QgUm91bmRlZAorbG54MTAxNCBsbiAzLjQ4NjkyNSAgLT4gMS4yNDkwMjAgSW5leGFjdCBSb3VuZGVkCitsbngxMDE1IGxuIDAuMTgwMTQwMSAtPiAtMS43MTQwMjAgSW5leGFjdCBSb3VuZGVkCitsbngxMDE2IGxuIDAuNTIyNzE0OCAtPiAtMC42NDg3MTkzIEluZXhhY3QgUm91bmRlZAorbG54MTAxNyBsbiA3LjgxODExMSAgLT4gMi4wNTY0NDMgSW5leGFjdCBSb3VuZGVkCitsbngxMDE4IGxuIDAuMDg3MDY3MSAtPiAtMi40NDEwNzYgSW5leGFjdCBSb3VuZGVkCitsbngxMDE5IGxuIDguMTUzOTY2ICAtPiAyLjA5ODUwNCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjAgbG4gMi4wNDA5NzUgIC0+IDAuNzEzNDI3NiBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjEgbG4gMS40ODE2NDIgIC0+IDAuMzkzMTUwOSBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjIgbG4gMC4yNjEwMTIzIC0+IC0xLjM0MzE4OCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjMgbG4gMC40NjY3MjMgIC0+IC0wLjc2MjAxOTMgSW5leGFjdCBSb3VuZGVkCitsbngxMDI0IGxuIDAuMDUxODc1NiAtPiAtMi45NTg5MDcgSW5leGFjdCBSb3VuZGVkCitsbngxMDI1IGxuIDIuMDU2NDEwICAtPiAwLjcyMDk2MTcgSW5leGFjdCBSb3VuZGVkCitsbngxMDI2IGxuIDAuMTgxNTIyICAtPiAtMS43MDYzNzggSW5leGFjdCBSb3VuZGVkCitsbngxMDI3IGxuIDAuNTE1NTUxICAtPiAtMC42NjI1MTkwIEluZXhhY3QgUm91bmRlZAorbG54MTAyOCBsbiA4LjQyNTA4OSAgLT4gMi4xMzEyMTQgSW5leGFjdCBSb3VuZGVkCitsbngxMDI5IGxuIDIuMDc3MDkxICAtPiAwLjczMDk2ODQgSW5leGFjdCBSb3VuZGVkCitsbngxMDMwIGxuIDYuMjEyNzA1ICAtPiAxLjgyNjU5NiBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzEgbG4gNS43MjkzNDMgIC0+IDEuNzQ1NjAxIEluZXhhY3QgUm91bmRlZAorbG54MTAzMiBsbiA0LjgzMTI1MSAgLT4gMS41NzUxMDUgSW5leGFjdCBSb3VuZGVkCitsbngxMDMzIGxuIDIuMDI5NzYwICAtPiAwLjcwNzkxNzYgSW5leGFjdCBSb3VuZGVkCitsbngxMDM0IGxuIDguNjE1MDYwICAtPiAyLjE1MzUxMiBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzUgbG4gMC4wNjExNTExIC0+IC0yLjc5NDQwNyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzYgbG4gNS4xOTUyNjkgIC0+IDEuNjQ3NzQ4IEluZXhhY3QgUm91bmRlZAorbG54MTAzNyBsbiA5LjYxNzY4NiAgLT4gMi4yNjM2MDQgSW5leGFjdCBSb3VuZGVkCitsbngxMDM4IGxuIDAuMDA0OTM4MiAtPiAtNS4zMTA3NTQgSW5leGFjdCBSb3VuZGVkCitsbngxMDM5IGxuIDIuNzg2ODQwICAtPiAxLjAyNDkwOCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwNDAgbG4gMC4wMDkxMDczIC0+IC00LjY5ODY3OSBJbmV4YWN0IFJvdW5kZWQKKworLS0gZnJvbSBoZXJlIDMtZGlnaXQgdGVzdHMgYXJlIGJhc2VkIG9uIHJldmVyc2UgZXhwIHRlc3RzCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworbG54MDAxICBsbiAwICAgICAgICAgICAtPiAgLUluZmluaXR5CitsbngwMDIgIGxuIDAuMzY3ODc5NDQxIC0+ICAtMS4wMDAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMyAgbG4gMSAgICAgICAgICAgLT4gICAwCitsbngwMDUgIGxuIDIuNzE4MjgxODMgIC0+ICAgMS4wMDAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwNiAgbG4gMi4wMDAwMDAwMCAgLT4gICAwLjY5MzE0NzE4MSAgIEluZXhhY3QgUm91bmRlZAorbG54MDA3ICBsbiArSW5maW5pdHkgICAtPiAgIEluZmluaXR5CisKKy0tIHRpbnkgZWRnZSBjYXNlcworcHJlY2lzaW9uOiAgIDcKK2xueDAxMSAgbG4gMS4xMDUxNzEgLT4gIDAuMTAwMDAwMSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMiAgbG4gMS4wMTAwNTAgLT4gIDAuMDA5OTk5ODM1ICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMyAgbG4gMS4wMDAwMTAgLT4gIDAuMDAwMDA5OTk5OTUwICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNCAgbG4gMS4wMDAwMDEgLT4gIDkuOTk5OTk1RS03ICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNSAgbG4gMS4wMDAwMDAgLT4gIDAKKworLS0gYmFzaWMgZT0wLCBlPTEsIGU9MiwgZT00LCBlPj04IGNhc2VzCitwcmVjaXNpb246ICAgNworbG54MDQxICBsbiAyLjcxODI4MiAgICAgIC0+ICAxLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDA0MiAgbG4gMC4zNjc4Nzk0ICAgICAtPiAtMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwNDMgIGxuIDIyMDI2LjQ3ICAgICAgLT4gIDEwLjAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDQ0ICBsbiAwLjAwMDA0NTM5OTkzIC0+IC0xMC4wMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDA0NSAgbG4gMi42ODgxMTdFKzQzICAtPiAgMTAwLjAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwNDYgIGxuIDMuNzIwMDc2RS00NCAgLT4gLTEwMC4wMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDQ3ICBsbiBJbmZpbml0eSAgICAgIC0+ICBJbmZpbml0eQorbG54MDQ4ICBsbiAwRS0zODkgICAgICAgIC0+IC1JbmZpbml0eQorCistLSBtaXNjZWxsYW5lYQorcHJlY2lzaW9uOiAxNgorbG54MDU1ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MkUtMjM2ICAgICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTUgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE3CitsbngwNTYgIGxuIDIuNzE3NjU4NDg2ODg0NTcyMUUtMjM2ICAgIC0+IC01NDIuNDEwMzExMjg3NDQxNDYgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTgKK2xueDA1NyAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxMUUtMjM2ICAgLT4gLTU0Mi40MTAzMTEyODc0NDE0NTkgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOQorbG54MDU4ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjExMkUtMjM2ICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ1OTIgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCitsbngwNTkgIGxuIDIuNzE3NjU4NDg2ODg0NTcyMTExOEUtMjM2IC0+IC01NDIuNDEwMzExMjg3NDQxNDU5MTcgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gaW5wdXRzIGVuZGluZyBpbiAuLjUwMC4uLCAuLjQ5OS4uLCAuLjEwMC4uLCAuLjk5OS4uIHNlcXVlbmNlcworcHJlY2lzaW9uOiAgIDUwCitsbngxMDIgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNyAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzNzQ5OTUzODI5OTk2NDQ2MTI0ODYxNzUwRS04ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAzMAorbG54MTAzICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMyAtPiAtOC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzMzNzQ5OUUtOCAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI5CitsbngxMDQgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczMzc1MEUtOCAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyOAorbG54MTA1ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczMzc1RS04ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNworbG54MTA2ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMCAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzMzOEUtOCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI2CitsbngxMDcgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczNEUtOCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNQorbG54MTA4ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczRS04ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNAorbG54MTA5ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3OSAtPiAtOC45OTk5OTk5OTk5OTk5OTk5NTAwMDAyN0UtOCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIzCitsbngxMTAgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODggLT4gLTguOTk5OTk5OTk5OTk5OTk5ODUwMDAwM0UtOCAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMgorbG54MTExICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTkgLT4gLTguOTk5OTk5OTk5OTk5OTk3ODUwMDAwRS04ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMQorbG54MTEyICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwMCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NTAwMEUtOCAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIwCitsbngxMTMgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODUwMEUtOCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxOQorbG54MTE0ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODUwRS04ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxOAorbG54MTE1ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NUUtOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBtYXkgYmUgYSA+IDAuNXVscCBjYXNlOyBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIgaXM6CistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTguOTk5OTk5OTk5OTk5OTg3ODQ5OTk5MThFLTgKK3ByZWNpc2lvbjogICAxNworbG54MTE2ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1IC0+IC04Ljk5OTk5OTk5OTk5OTk4NzhFLTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNgorbG54MTE3ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDAgLT4gLTkuMDAwMDAwMDA0OTk5OTg4RS04ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTUKK2xueDExOCAgbG4gMC45OTk5OTk5MTAwMDAwMDQgLT4gLTkuMDAwMDAwMDA0OTk5OTlFLTggICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNAorbG54MTE5ICBsbiAwLjk5OTk5OTkxMDAwMDAwIC0+IC05LjAwMDAwMDQwNTAwMDBFLTggICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMworbG54MTIwICBsbiAwLjk5OTk5OTkxMDAwMDAgLT4gLTkuMDAwMDAwNDA1MDAwRS04ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDEyCitsbngxMjEgIGxuIDAuOTk5OTk5OTEwMDAwIC0+IC05LjAwMDAwMDQwNTAwRS04ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMQorbG54MTIyICBsbiAwLjk5OTk5OTkxMDAwIC0+IC05LjAwMDAwMDQwNTBFLTggICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMAorbG54MTIzICBsbiAwLjk5OTk5OTkxMDAgLT4gLTkuMDAwMDAwNDA1RS04ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA5CitsbngxMjQgIGxuIDAuOTk5OTk5OTEwIC0+IC05LjAwMDAwMDQxRS04ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgOAorbG54MTI1ICBsbiAwLjk5OTk5OTkxIC0+IC05LjAwMDAwMDRFLTggICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNworbG54MTI2ICBsbiAwLjk5OTk5OTkgLT4gLTEuMDAwMDAwRS03ICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE2CitsbngxMjZiIGxuIDAuOTk5OTk5OSAtPiAtMS4wMDAwMDAwNTAwMDAwMDNFLTcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDYKK2xueDEyNyAgbG4gMC45OTk5OTkgLT4gLTAuMDAwMDAxMDAwMDAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNQorbG54MTI4ICBsbiAwLjk5OTk5IC0+IC0wLjAwMDAxMDAwMCAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA0CitsbngxMjkgIGxuIDAuOTk5OSAtPiAtMC4wMDAxMDAwICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDMKK2xueDEzMCAgbG4gMC45OTkgLT4gLTAuMDAxMDAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMgorbG54MTMxICBsbiAwLjk5IC0+IC0wLjAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAxCitsbngxMzIgIGxuIDAuOSAtPiAtMC4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gY2FzZXMgbmVhciAxICAgICAgICAgICAgICAtLSAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwCitwcmVjaXNpb246ICAgIDIwCitsbng0MDEgIGxuIDIuNzE4MjgxODI4NDU4OTM2NTA0MSAtPiAwLjk5OTk5OTk5OTk5OTk2MDAwMDAwIEluZXhhY3QgUm91bmRlZAorbG54NDAyICBsbiAyLjcxODI4MTgyODQ1ODk2MzY4NjkgLT4gMC45OTk5OTk5OTk5OTk5NzAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2xueDQwMyAgbG4gMi43MTgyODE4Mjg0NTg5OTA4Njk3IC0+IDAuOTk5OTk5OTk5OTk5OTc5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitsbng0MDQgIGxuIDIuNzE4MjgxODI4NDU5MDE4MDUyNSAtPiAwLjk5OTk5OTk5OTk5OTk4OTk5OTk4IEluZXhhY3QgUm91bmRlZAorbG54NDA1ICBsbiAyLjcxODI4MTgyODQ1OTA0NTIzNTQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2xueDQwNiAgbG4gMi43MTgyODE4Mjg0NTkzMTcwNjM1IC0+IDEuMDAwMDAwMDAwMDAwMTAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitsbng0MDcgIGxuIDIuNzE4MjgxODI4NDU5NTg4ODkxNyAtPiAxLjAwMDAwMDAwMDAwMDIwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAxNAorbG54NDExICBsbiAyLjcxODI4MTgyODQ1ODkgLT4gMC45OTk5OTk5OTk5OTk5NSAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDQxMyAgbG4gMi43MTgyODE4Mjg0NTkwIC0+IDAuOTk5OTk5OTk5OTk5OTggICAgSW5leGFjdCBSb3VuZGVkCitsbng0MTYgIGxuIDIuNzE4MjgxODI4NDU5MSAtPiAxLjAwMDAwMDAwMDAwMDAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NDE3ICBsbiAyLjcxODI4MTgyODQ1OTIgLT4gMS4wMDAwMDAwMDAwMDAxICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3dzLCBpbmNsdWRpbmcgc29tZSBleHAgb3ZlcnByZWNpc2UgYm9yZGVybGluZXMKK3ByZWNpc2lvbjogICA3CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworbG54NzA5ICBsbiA5Ljk5OTk5OUUrMzg0IC0+ICA4ODYuNDk1MyAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3MTEgIGxuIDkuOTk5OTkyRSszODQgLT4gIDg4Ni40OTUzICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNgorbG54NzIyICBsbiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICA4ODYuNDk1MjYwODAyNzA3NiAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3MjQgIGxuIDkuOTk5OTk5OTk5OTk5OTE3RSszODQgLT4gIDg4Ni40OTUyNjA4MDI3MDc2ICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDcyNiAgbG4gOS45OTk5OTk5OTk5OTkxMTdFKzM4NCAtPiAgODg2LjQ5NTI2MDgwMjcwNzUgICAgIEluZXhhY3QgUm91bmRlZAorLS0gYW5kIG1vcmUuLi4KK3ByZWNpc2lvbjogICAxNQorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKK2xueDczMSAgbG4gOS45OTk5OTk5OTk5OTk5OUUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDUgICAgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IG1heSBiZSBhID4gMC41dWxwIGNhc2U7IGEgbW9yZSBwcmVjaXNlIGFuc3dlciBpczoKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzMDIuNTg1MDkyOTk0MDQ0OTUwMDE3OTkxNDU0NDIKK2xueDczMiAgbG4gOS45OTk5OTk5OTk5OTI2NkUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDQgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3MzMgIGxuIDkuOTk5OTk5OTk5OTkyNjVFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA0ICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzM0ICBsbiA5Ljk5OTk5OTk5OTk5MjY0RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNCAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93cyBmb3IgZXhwLCBpbmNsdWRpbmcgdW5kZXJmbG93LXRvLXplcm8gZWRnZSBwb2ludAorcHJlY2lzaW9uOiAgIDcKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitsbng3NTEgIGxuIDBFLTM4OSAtPiAtSW5maW5pdHkKK2xueDc1OCAgbG4gMS4wMDAwMDFFLTM4MyAtPiAtODgxLjg5MDEgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDc1OSAgbG4gOS45OTk5MUUtMzg0IC0+IC04ODEuODkwMSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDc2MCAgbG4gNC40NjA1RS0zODUgLT4gLTg4NS4wMDAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDc2MSAgbG4gMi4yMjFFLTM4NiAtPiAtODg3Ljk5OTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDc2MiAgbG4gMy4wMUUtMzg3IC0+IC04ODkuOTk4NSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDc2MyAgbG4gMS43RS0zODggLT4gLTg5Mi44NzI0ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDc2NCAgbG4gMS41RS0zODggLT4gLTg5Mi45OTc2ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDc2NSAgbG4gOUUtMzg5IC0+IC04OTMuNTA4NCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDc2NiAgbG4gMUUtMzg5IC0+IC04OTUuNzA1NiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDc3NCAgbG4gMEUtMzg5IC0+IC1JbmZpbml0eQorCistLSBzcGVjaWFsIHZhbHVlcworbG54ODIwICBsbiBJbmZpbml0eSAtPiAgIEluZmluaXR5Citsbng4MjEgIGxuIDAgICAgICAgIC0+ICAtSW5maW5pdHkKK2xueDgyMiAgbG4gTmFOICAgICAgLT4gICBOYU4KK2xueDgyMyAgbG4gc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitsbng4MjQgIGxuIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgorbG54ODI1ICBsbiAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24KK2xueDgyNiAgbG4gTmFONDU2ICAgLT4gICBOYU40NTYKK2xueDgyNyAgbG4gLU5hTjY1NCAgLT4gIC1OYU42NTQKK2xueDgyOCAgbG4gTmFOMSAgICAgLT4gICBOYU4xCisKKy0tIEludmFsaWQgb3BlcmF0aW9ucyBkdWUgdG8gcmVzdHJpY3Rpb25zCistLSBbbmV4dCB0d28gcHJvYmFibHkgc2tpcHBlZCBieSBtb3N0IHRlc3QgaGFybmVzc2VzXQorcHJlY2lzaW9uOiAxMDAwMDAwMDAKK2xueDkwMSAgbG4gMSAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0CitwcmVjaXNpb246ICA5OTk5OTk5OQorbG54OTAyICBsbiAwIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKKworcHJlY2lzaW9uOiA5CittYXhFeHBvbmVudDogICAxMDAwMDAwCittaW5FeHBvbmVudDogICAtOTk5OTk5Citsbng5MDMgIGxuIDEgICAtPiAgTmFOICAgICAgICAgIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorbG54OTA0ICBsbiAwIC0+ICAtSW5maW5pdHkKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgLTEwMDAwMDAKK2xueDkwNSAgbG4gMSAgIC0+ICBOYU4gICAgICAgICAgSW52YWxpZF9jb250ZXh0CittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogICAtOTk5OTk4Citsbng5MDYgIGxuIDAgLT4gIC1JbmZpbml0eQorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUKK3ByZWNpc2lvbjogNQorbG54OTEwICBsbiAtc05hTjEyMzQ1Njc4OTAgLT4gLU5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3QKK2xueDkwMCAgbG4gIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nMTAuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nMTAuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTAyZjBkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2cxMC5kZWNUZXN0CkBAIC0wLDAgKzEsNTUxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGxvZzEwLmRlY1Rlc3QgLS0gZGVjaW1hbCBsb2dhcml0aG0gaW4gYmFzZSAxMCAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBlbXBoYXNpc2VzIHRoZSB0ZXN0aW5nIG9mIG5vdGFibGUgY2FzZXMsIGFzIHRoZXkgd2lsbCBvZnRlbgorLS0gaGF2ZSB1bnVzdWFsIHBhdGhzIChlc3BlY2lhbGx5IHRoZSAxMCoqbiByZXN1bHRzKS4KKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gZXhhbXBsZXMgaW4gc3BlY2lmaWNhdGlvbgorcHJlY2lzaW9uOiAgIDkKK2xvZ3hzMDAwIGxvZzEwICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3hzMDAxIGxvZzEwICAwLjAwMSAgICAgICAgICAgICAtPiAtMworbG9neHMwMDIgbG9nMTAgIDEgICAgICAgICAgICAgICAgIC0+ICAwCitsb2d4czAwMyBsb2cxMCAgMiAgICAgICAgICAgICAgICAgLT4gIDAuMzAxMDI5OTk2ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsb2d4czAwNCBsb2cxMCAgMTAgICAgICAgICAgICAgICAgLT4gIDEKK2xvZ3hzMDA1IGxvZzEwICA3MCAgICAgICAgICAgICAgICAtPiAgMS44NDUwOTgwNCAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3hzMDA2IGxvZzEwICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworCistLSBiYXNpY3MgKGV4YW1wbGVzIGluIHNwZWNpZmljYXRpb24sIGV0Yy4pCitwcmVjaXNpb246ICAgMTYKK2xvZ3gwMDAwIGxvZzEwICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDAxIGxvZzEwICA3RS0xMDAwICAgICAgICAgICAtPiAtOTk5LjE1NDkwMTk1OTk4NTcgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDAyIGxvZzEwICAxLjFFLTkgICAgICAgICAgICAtPiAtOC45NTg2MDczMTQ4NDE3NzUgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDAzIGxvZzEwICAwLjAwMDcgICAgICAgICAgICAtPiAtMy4xNTQ5MDE5NTk5ODU3NDMgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA0IGxvZzEwICAwLjExICAgICAgICAgICAgICAtPiAtMC45NTg2MDczMTQ4NDE3NzUwICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA1IGxvZzEwICAwLjcgICAgICAgICAgICAgICAtPiAtMC4xNTQ5MDE5NTk5ODU3NDMyICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA2IGxvZzEwICAxICAgICAgICAgICAgICAgICAtPiAgMAorbG9neDAwMDcgbG9nMTAgIDEuNSAgICAgICAgICAgICAgIC0+ICAwLjE3NjA5MTI1OTA1NTY4MTIgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMDggbG9nMTAgIDIgICAgICAgICAgICAgICAgIC0+ICAwLjMwMTAyOTk5NTY2Mzk4MTIgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMDkgbG9nMTAgIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAwLjQzNDI5NDQ4MTkwMzI1MTggIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTAgbG9nMTAgIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAwLjQzNDI5NDQ4MTkwMzI1MTkgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTEgbG9nMTAgIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAwLjQzNDI5NDQ4MTkwMzI1MjEgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTIgbG9nMTAgIDcgICAgICAgICAgICAgICAgIC0+ICAwLjg0NTA5ODA0MDAxNDI1NjggIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTMgbG9nMTAgIDEwICAgICAgICAgICAgICAgIC0+ICAxCitsb2d4MDAxNCBsb2cxMCAgMTAuNSAgICAgICAgICAgICAgLT4gIDEuMDIxMTg5Mjk5MDY5OTM4ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxNSBsb2cxMCAgMTEgICAgICAgICAgICAgICAgLT4gIDEuMDQxMzkyNjg1MTU4MjI1ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxNiBsb2cxMCAgNzAgICAgICAgICAgICAgICAgLT4gIDEuODQ1MDk4MDQwMDE0MjU3ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxNyBsb2cxMCAgOTk5OSAgICAgICAgICAgICAgLT4gIDMuOTk5OTU2NTY4MzgwMTkyICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxOCBsb2cxMCAgMS4yMUU2ICAgICAgICAgICAgLT4gIDYuMDgyNzg1MzcwMzE2NDUwICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAxOSBsb2cxMCAgMS4xRSs5ICAgICAgICAgICAgLT4gIDkuMDQxMzkyNjg1MTU4MjI1ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAyMCBsb2cxMCAgN0UrMTAwMCAgICAgICAgICAgLT4gIDEwMDAuODQ1MDk4MDQwMDE0ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAyMSBsb2cxMCArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIG5vdGFibGUgY2FzZXMKKy0tIG5lZ2F0aXZlcworbG9neDAwMzEgbG9nMTAgLTFFLTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzIgbG9nMTAgLTAuMDAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzMgbG9nMTAgLTAuMSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzQgbG9nMTAgLTAuNyAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzUgbG9nMTAgLTEgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzYgbG9nMTAgLTEuNSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzcgbG9nMTAgLTIgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzggbG9nMTAgLTEwLjUgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwMzkgbG9nMTAgLTEwLjUgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwNDAgbG9nMTAgLTk5OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwNDEgbG9nMTAgLTEwICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG9neDAwNDIgbG9nMTAgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG9neDAwNDMgbG9nMTAgLTBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG9neDAwNDQgbG9nMTAgLTBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorLS0gb3RoZXIgemVyb3MKK2xvZ3gwMDUxIGxvZzEwICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDUyIGxvZzEwICAwRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDUzIGxvZzEwICAwRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKy0tIGluZmluaXRpZXMKK2xvZ3gwMDU1IGxvZzEwIC1JbmZpbml0eSAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDU2IGxvZzEwICtJbmZpbml0eSAgICAgICAgICAtPiBJbmZpbml0eQorLS0gb25lcworbG9neDAwNjEgbG9nMTAgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG9neDAwNjIgbG9nMTAgIDEuMCAgICAgICAgICAgICAgIC0+ICAgMAorbG9neDAwNjMgbG9nMTAgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorbG9neDAwNjQgbG9nMTAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorCistLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMAorbG9neDExMDAgbG9nMTAgMSAgICAgICAgICAgICAtPiAwCitsb2d4MTEwMSBsb2cxMCAxMCAgICAgICAgICAgIC0+IDEKK2xvZ3gxMTAyIGxvZzEwIDEwMCAgICAgICAgICAgLT4gMgorbG9neDExMDMgbG9nMTAgMTAwMCAgICAgICAgICAtPiAzCitsb2d4MTEwNCBsb2cxMCAxMDAwMCAgICAgICAgIC0+IDQKK2xvZ3gxMTA1IGxvZzEwIDEwMDAwMCAgICAgICAgLT4gNQorbG9neDExMDYgbG9nMTAgMTAwMDAwMCAgICAgICAtPiA2Citsb2d4MTEwNyBsb2cxMCAxMDAwMDAwMCAgICAgIC0+IDcKK2xvZ3gxMTA4IGxvZzEwIDEwMDAwMDAwMCAgICAgLT4gOAorbG9neDExMDkgbG9nMTAgMTAwMDAwMDAwMCAgICAtPiA5Citsb2d4MTExMCBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDEwCitsb2d4MTExMSBsb2cxMCAxMDAwMDAwMDAwMDAgIC0+IDExCitsb2d4MTExMiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDEyCitsb2d4MTExMyBsb2cxMCAwLjAwMDAwMDAwMDAxIC0+IC0xMQorbG9neDExMTQgbG9nMTAgMC4wMDAwMDAwMDAxIC0+IC0xMAorbG9neDExMTUgbG9nMTAgMC4wMDAwMDAwMDEgLT4gLTkKK2xvZ3gxMTE2IGxvZzEwIDAuMDAwMDAwMDEgLT4gLTgKK2xvZ3gxMTE3IGxvZzEwIDAuMDAwMDAwMSAtPiAtNworbG9neDExMTggbG9nMTAgMC4wMDAwMDEgLT4gLTYKK2xvZ3gxMTE5IGxvZzEwIDAuMDAwMDEgLT4gLTUKK2xvZ3gxMTIwIGxvZzEwIDAuMDAwMSAtPiAtNAorbG9neDExMjEgbG9nMTAgMC4wMDEgLT4gLTMKK2xvZ3gxMTIyIGxvZzEwIDAuMDEgLT4gLTIKK2xvZ3gxMTIzIGxvZzEwIDAuMSAtPiAtMQorbG9neDExMjQgbG9nMTAgMUUtOTkgIC0+IC05OQorbG9neDExMjUgbG9nMTAgMUUtMTAwIC0+IC0xMDAKK2xvZ3gxMTI2IGxvZzEwIDFFLTM4MyAtPiAtMzgzCisKKy0tIGNoZWNrIG5vcm1hbGx5IGV4YWN0IGNhc2VzIHJvdW5kIHByb3Blcmx5CitwcmVjaXNpb246IDEKK2xvZ3gxMTQxIGxvZzEwIDEwMDAwMDAwMDAwICAgLT4gMUUrMSAgICAgICAgIFJvdW5kZWQKK2xvZ3gxMTQyIGxvZzEwIDEwMDAwMDAwMDAwMDAgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTQzIGxvZzEwIDFFKzEwMCAgICAgICAgLT4gMUUrMiAgICAgICAgIFJvdW5kZWQKK2xvZ3gxMTQ0IGxvZzEwIDFFKzEyMyAgICAgICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTQ1IGxvZzEwIDFFKzEyNiAgICAgICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTQ2IGxvZzEwIDFFKzkxNiAgICAgICAgLT4gOUUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTQ3IGxvZzEwIDFFKzk5OSAgICAgICAgLT4gMUUrMyBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAyCitsb2d4MTE1MSBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDEwCitsb2d4MTE1MiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDEyCitsb2d4MTE1MyBsb2cxMCAxRSsxMDAgICAgICAgIC0+IDEuMEUrMiAgICAgICAgIFJvdW5kZWQKK2xvZ3gxMTU0IGxvZzEwIDFFKzEyMyAgICAgICAgLT4gMS4yRSsyIEluZXhhY3QgUm91bmRlZAorbG9neDExNTUgbG9nMTAgMUUrMTI2ICAgICAgICAtPiAxLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE1NiBsb2cxMCAxRSs5MTYgICAgICAgIC0+IDkuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTU3IGxvZzEwIDFFKzk5OSAgICAgICAgLT4gMS4wRSszIEluZXhhY3QgUm91bmRlZAorLS0gc29tZSBoYWxmLXdheSBwb2ludCByb3VuZHMsIG90aGVyIGNhc2VzLCBhbmQgbmVnYXRpdmVzCitsb2d4MTE1OCBsb2cxMCAxRSsxMjUgICAgICAgIC0+IDEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTU5IGxvZzEwIDFFKzEzNSAgICAgICAgLT4gMS40RSsyIEluZXhhY3QgUm91bmRlZAorbG9neDExNjAgbG9nMTAgMUUrMTI5ICAgICAgICAtPiAxLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2MSBsb2cxMCAxRSsxMzEgICAgICAgIC0+IDEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTYyIGxvZzEwIDFFLTEyMyAgICAgICAgLT4gLTEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTYzIGxvZzEwIDFFLTEyNiAgICAgICAgLT4gLTEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY0IGxvZzEwIDFFLTkxNiAgICAgICAgLT4gLTkuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY1IGxvZzEwIDFFLTk5OSAgICAgICAgLT4gLTEuMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY2IGxvZzEwIDFFLTEyNSAgICAgICAgLT4gLTEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY3IGxvZzEwIDFFLTEzNSAgICAgICAgLT4gLTEuNEUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY4IGxvZzEwIDFFLTEyOSAgICAgICAgLT4gLTEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTY5IGxvZzEwIDFFLTEzMSAgICAgICAgLT4gLTEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAzCitsb2d4MTE3MSBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDEwCitsb2d4MTE3MiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDEyCitsb2d4MTE3MyBsb2cxMCAxRSsxMDAgICAgICAgIC0+IDEwMAorbG9neDExNzQgbG9nMTAgMUUrMTIzICAgICAgICAtPiAxMjMKK2xvZ3gxMTc1IGxvZzEwIDFFKzEyNiAgICAgICAgLT4gMTI2Citsb2d4MTE3NiBsb2cxMCAxRSs5MTYgICAgICAgIC0+IDkxNgorbG9neDExNzcgbG9nMTAgMUUrOTk5ICAgICAgICAtPiA5OTkKKworLS0gbG9nMTAoMikgLi4gdGVzdHMgYm90aCBsbigyKSBhbmQgbG4oMTApIGNvbnN0YW50cywgdG9vCitwcmVjaXNpb246IDUwCitsb2d4MTIwMSBsb2cxMCAyICAgICAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjExIEluZXhhY3QgUm91bmRlZAorbG9neDEyMDIgbG9nMTAgMi4wMDAgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMjAzIGxvZzEwIDAuMkUxIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMTEgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ5Citsb2d4MTIwNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMSBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDgKK2xvZ3gxMjA1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NworbG9neDEyMDYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ2Citsb2d4MTIwNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNSAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDUKK2xvZ3gxMjA4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODEgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NAorbG9neDEyMDkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQzCitsb2d4MTIxMCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5OSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDIKK2xvZ3gxMjExIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxOTAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MQorbG9neDEyMTIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQwCitsb2d4MTIxMyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzkKK2xvZ3gxMjE0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjggICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzOAorbG9neDEyMTUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM3Citsb2d4MTIxNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2OCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzYKK2xvZ3gxMjE3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNQorbG9neDEyMTggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAzICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM0Citsb2d4MTIxOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzMKK2xvZ3gxMjIwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMgorbG9neDEyMjEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMxCitsb2d4MTIyMiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NSAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzAKK2xvZ3gxMjIzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOQorbG9neDEyMjQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI4Citsb2d4MTIyNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NyAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjcKK2xvZ3gxMjI2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTUgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNgorbG9neDEyMjcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5ICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI1Citsb2d4MTIyOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4OSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjQKK2xvZ3gxMjI5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3MzkgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMworbG9neDEyMzAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzc0ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIyCitsb2d4MTIzMSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjEKK2xvZ3gxMjMyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMAorbG9neDEyMzMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE5Citsb2d4MTIzNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTgKK2xvZ3gxMjM1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNworbG9neDEyMzYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE2Citsb2d4MTIzNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTUKK2xvZ3gxMjM4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNAorbG9neDEyMzkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEzCitsb2d4MTI0MCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjY0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTIKK2xvZ3gxMjQxIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMQorbG9neDEyNDIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEwCitsb2d4MTI0MyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDkKK2xvZ3gxMjQ0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgOAorbG9neDEyNDUgbG9nMTAgMiAtPiAwLjMwMTAzMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA3Citsb2d4MTI0NiBsb2cxMCAyIC0+IDAuMzAxMDMwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDYKK2xvZ3gxMjQ3IGxvZzEwIDIgLT4gMC4zMDEwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNQorbG9neDEyNDggbG9nMTAgMiAtPiAwLjMwMTAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA0Citsb2d4MTI0OSBsb2cxMCAyIC0+IDAuMzAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMKK2xvZ3gxMjUwIGxvZzEwIDIgLT4gMC4zMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMgorbG9neDEyNTEgbG9nMTAgMiAtPiAwLjMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxCitsb2d4MTI1MiBsb2cxMCAyIC0+IDAuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBNb3JlIGNsb3NlLXRvLWUsIGV0Yy4sIHRlc3RzCitwcmVjaXNpb246ICAgMzQKK2xvZ3gxMzAxIGxvZzEwIDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYxICAtPiAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNDggSW5leGFjdCBSb3VuZGVkCitsb2d4MTMwMiBsb2cxMCAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MiAgLT4gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUwIEluZXhhY3QgUm91bmRlZAorbG9neDEzMDMgbG9nMTAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjMgIC0+IDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzA0IGxvZzEwIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAtPiAtNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNzNFLTMzIEluZXhhY3QgUm91bmRlZAorbG9neDEzMDUgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+IC00LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1M0UtMzQgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMwNiBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gLTQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUxRS0zNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzA3IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAwCitsb2d4MTMwOCBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgLT4gNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTFFLTM1IEluZXhhY3QgUm91bmRlZAorbG9neDEzMDkgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+IDQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDQ5RS0zNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzEwIGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAtPiA0LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjAyOUUtMzMgSW5leGFjdCBSb3VuZGVkCistLSBsb3dlciBwCitwcmVjaXNpb246ICAgIDcKK2xvZ3gxMzIwIGxvZzEwIDAuOTk5OTk5ICAgIC0+IC00LjM0Mjk0N0UtNyAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyMSBsb2cxMCAwLjk5OTk5OTkgICAtPiAtNC4zNDI5NDVFLTggIEluZXhhY3QgUm91bmRlZAorbG9neDEzMjIgbG9nMTAgMC45OTk5OTk5OSAgLT4gLTQuMzQyOTQ1RS05ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzIzIGxvZzEwIDAuOTk5OTk5OTk5IC0+IC00LjM0Mjk0NUUtMTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyNCBsb2cxMCAxLjAwMDAwMDAwICAtPiAgMAorbG9neDEzMjUgbG9nMTAgMS4wMDAwMDAwMSAgLT4gIDQuMzQyOTQ1RS05ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzI2IGxvZzEwIDEuMDAwMDAwMSAgIC0+ICA0LjM0Mjk0NUUtOCAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyNyBsb2cxMCAxLjAwMDAwMSAgICAtPiAgNC4zNDI5NDNFLTcgIEluZXhhY3QgUm91bmRlZAorCistLSBuZWFyIDEwXjMKK3ByZWNpc2lvbjogICA5Citsb2d4MTMzMSBsb2cxMCAgOTk5Ljk5OTk5OTggIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMzMiBsb2cxMCAgOTk5Ljk5OTk5OTkgIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMzMyBsb2cxMCAxMDAwLjAwMDAwMCAgIC0+IDMKK2xvZ3gxMzM0IGxvZzEwIDEwMDAuMDAwMDAxICAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzM1IGxvZzEwIDEwMDAuMDAwMDAyICAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTYKK2xvZ3gxMzQxIGxvZzEwICA5OTkuOTk5OTk5OCAgLT4gMi45OTk5OTk5OTk5MTMxNDEgSW5leGFjdCBSb3VuZGVkCitsb2d4MTM0MiBsb2cxMCAgOTk5Ljk5OTk5OTkgIC0+IDIuOTk5OTk5OTk5OTU2NTcxIEluZXhhY3QgUm91bmRlZAorbG9neDEzNDMgbG9nMTAgMTAwMC4wMDAwMDAgICAtPiAzCitsb2d4MTM0NCBsb2cxMCAxMDAwLjAwMDAwMSAgIC0+IDMuMDAwMDAwMDAwNDM0Mjk0IEluZXhhY3QgUm91bmRlZAorbG9neDEzNDUgbG9nMTAgMTAwMC4wMDAwMDIgICAtPiAzLjAwMDAwMDAwMDg2ODU4OSBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQorbG9neDE0MDAgbG9nMTAgMTBFLTMgICAgLT4gLTIKK2xvZ3gxNDAxIGxvZzEwIDEwRS0yICAgIC0+IC0xCitsb2d4MTQwMiBsb2cxMCAxMDBFLTIgICAtPiAgMAorbG9neDE0MDMgbG9nMTAgMTAwMEUtMiAgLT4gIDEKK2xvZ3gxNDA0IGxvZzEwIDEwMDAwRS0yIC0+ICAyCitsb2d4MTQwNSBsb2cxMCAxMEUtMSAgICAtPiAgMAorbG9neDE0MDYgbG9nMTAgMTAwRS0xICAgLT4gIDEKK2xvZ3gxNDA3IGxvZzEwIDEwMDBFLTEgIC0+ICAyCitsb2d4MTQwOCBsb2cxMCAxMDAwMEUtMSAtPiAgMworbG9neDE0MDkgbG9nMTAgMTBFMCAgICAgLT4gIDEKK2xvZ3gxNDEwIGxvZzEwIDEwMEUwICAgIC0+ICAyCitsb2d4MTQxMSBsb2cxMCAxMDAwRTAgICAtPiAgMworbG9neDE0MTIgbG9nMTAgMTAwMDBFMCAgLT4gIDQKK2xvZ3gxNDEzIGxvZzEwIDEwRTEgICAgIC0+ICAyCitsb2d4MTQxNCBsb2cxMCAxMDBFMSAgICAtPiAgMworbG9neDE0MTUgbG9nMTAgMTAwMEUxICAgLT4gIDQKK2xvZ3gxNDE2IGxvZzEwIDEwMDAwRTEgIC0+ICA1Citsb2d4MTQxNyBsb2cxMCAxMEUyICAgICAtPiAgMworbG9neDE0MTggbG9nMTAgMTAwRTIgICAgLT4gIDQKK2xvZ3gxNDE5IGxvZzEwIDEwMDBFMiAgIC0+ICA1Citsb2d4MTQyMCBsb2cxMCAxMDAwMEUyICAtPiAgNgorCistLSBSYW5kb21zCistLSBQPTUwLCB3aXRoaW4gMC05OTk5CitQcmVjaXNpb246IDUwCitsb2d4MjUwMSBsb2cxMCAwLjAwMDM1NDQ4MDAxNjY3OTY4MTQxNzc1ODkxMjQ2OTkxOTEyNjU1OTYxMTYzMzQ1OTA0IC0+ICAtMy40NTA0MDgyNDI1NDExNzc1MjkwODY0MDUzMzE4MjQ3Mjc0OTQ0Njg1NTg2MTg4NTA1IEluZXhhY3QgUm91bmRlZAorbG9neDI1MDIgbG9nMTAgNzAuNjM2NDU1NzI2NDI0MzExMjI4MjU1MzM4NjM3OTM1MzMwODI2OTk1MTM2NTk3NjQ0ICAtPiAgIDEuODQ5MDI4ODk5ODQwODQ5MjA0NTc5MzA3MDI1NTMwMjMzNTU1ODE0MDk3NTcxOTI0NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTAzIGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAyMzM1NTAzNjI0NzM4MjE4ODkwNjA4MTI4MDQwNjMwNDAxNjkgLT4gLTE0LjYzMTYxOTQ1NDM0MzgzNDg1ODAyMzU3ODI5OTE0Mjg2NjU1NzcxNzkwNDIyMzY2NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTA0IGxvZzEwIDk3Ljc4MzYyODYyMTUyMzI0NDY3OTkwMTI2MDM1ODI4Njg5ODk1ODgzMjEzNTQzMzc2NCAgLT4gICAxLjk5MDI2NjE0OTMyMjQyMTk1MTc4OTc2NTc5NjQzNjI1NzE2OTA1OTI3MzQ0MDczMzAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwNSBsb2cxMCAwMDYyLjIzNzcxMzUzMTU4NTgzOTI4MDI2MTI4MTIwMjI4MDc4Mzg1OTk1NzIwMTczNDIgIC0+ICAgMS43OTQwNTM2MjkzMDg1MDY2MTk5Mjg3NjMyNzI1MDI2ODM3MDE4NDg2NTMzNTQ0MTQxIEluZXhhY3QgUm91bmRlZAorbG9neDI1MDYgbG9nMTAgNi4zNzY3NjM0NjUyMDcxMDUzNjE5OTc3NjAyODA0NzI0MTI5NjUyOTgxNzQ3ODc5NTMyICAtPiAgIDAuODA0NjAwMzA3ODk4MjU5NjE2MTUxMDAxNjM1NzYwODA3NjEzMjY4NTczNzQwOTg2NDQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwNyBsb2cxMCA2My4yOTcwODg5ODEzMTMyNzg1MjkzMDY1MzM4MTQxOTUwNjg4NTA1MzI2NjY2NTg3OTggIC0+ICAgMS44MDEzODM3MzczNzI0NDI3MDkyNDE3MTcwMTQ5MDk4NjE0NDEwODQ5MzUzODM5NjczIEluZXhhY3QgUm91bmRlZAorbG9neDI1MDggbG9nMTAgMC4wMDAwMDA3NzIzOTY5MzMxNjg4MTc5NzcxNzgyMDExMDg5ODE2NzcyMTYwMjI5OTE4NyAtPiAgLTYuMTEyMTU5NDU5MjcxODU1MDYxMzc3Mzg4NjI0MTk1MTk2NjI2NDgyNjc2MDMxMDA0NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTA5IGxvZzEwIDAuMDAwMDAwMDM5NTM1ODAzNTk3ODAxODU1MzQ4MzA1NzI0NjE5MjI1Mjc4MzEzOTUwMDIgLT4gIC03LjQwMzAwOTQyOTM4MzM4NDcxMzYyNTI1NDcwNjk5MDU0NzcyMTM1NDE3ODcxNzc1NjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxMCBsb2cxMCA3NTQuNjI5MDU4MTczNjk5ODkxNjkxODg5OTgxMTE1MjcyNzI2ODg3OTE1NDQ1NzcyMDQgIC0+ICAgMi44Nzc3MzM1MjQzNzYxMzAwMDQ3NzU4NTM0MzA0MzcxOTEyMDk5OTU4MDU3NTQ1NDE2IEluZXhhY3QgUm91bmRlZAorbG9neDI1MTEgbG9nMTAgMC4wMDAwMDA0ODM2MDM3ODQxMDI0MTQyODkzNjYwNzE0NzA1NjI4MzI4Mjg0OTE1ODMxMiAtPiAgLTYuMzE1NTEwMzA5NTMwOTM1MzQ1NzYwNDAzODM5Nzk4MDA5MTY1MDc2MDM0NjMzNDUxMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTEyIGxvZzEwIDAuMDAwMDc1MDkwMzc1ODM2NDU2MTI1NzcxOTYxMDQ1OTE2NzIwODA1NDI5MzIxNjYwODkgLT4gIC00LjEyNDQxNTcyMTk3MDAxNjYzMTQwMTIzNDQ3MDU1MzgwODgwMzA1OTI4OTYxMTEwMjYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxMyBsb2cxMCAwLjAwMDAwMDAwMDAwNzA1NDc1OTQ0NjM4OTE1MDUzNDE5ODM5MDYzNTY3ODk4MDkyMDY0IC0+IC0xMS4xNTE1MTc3OTAyNTY0NjYwNDg1NTM4MTAwMDI1MjU4NjgxOTgxNzgxNjc5NTAzNzcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxNCBsb2cxMCA5LjYyMTAzMDA0NjA0OTc2NTc5MTc0NDU0MTA5NDcwOTk2MzM0Nzk2MDkxNjUxMjA2NjEgIC0+ICAgMC45ODMyMjE1NzA5MzI2MDk3ODIwNjYzMzkyMjg3NzcxNjA3ODY4MzUxODYxNzc2ODQxMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTE1IGxvZzEwIDAuMDAwMDAwMDAwNTAxNTAzNjEzODY1NTU1Mjc0OTY2MDcyNDU5NzYxMjA4NjQ5ODU2MTEgLT4gIC05LjI5OTcyNTkzMzA3OTgyNjEwNDA0MTEwODY4MzU1NjMyMzQzOTA5MzQ5MzQ2MjkzNDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxNiBsb2cxMCAwOTguMjQ3NTQwMjk3MzE5OTQxMjU3OTc3MjM1NDUzMzM2Nzc2MDQ0OTAwNzQ4MTA3NTEgIC0+ICAgMS45OTIzMjE2ODYyODc0MzM3MDc3Nzk1Mjc4NjI5MzUxMDYwODE5MTA1Njc5NjcwNjMzIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTcgbG9nMTAgNy41MDkxOTk4MTUwMDQ2OTk0MzIwNDQxNDYzODU0MzAxNjI0NzQyNDkxMDE1NzUyOTgwICAtPiAgIDAuODc1NTkzNjYwNzgwMDU5MjQwODA3NjY0NjkxNTg3NjM0OTk3MjU0MTQwMjQxMjg3ODEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxOCBsb2cxMCAwLjAwMDAwMDAwMDAwMDc5NTQwNTcxMjczMzMwMDc1MTkzNjY4NTk2OTQyMjY4NTQyNDI1IC0+IC0xMi4wOTk0MTEyOTQxNjUxNzYwMjg4MTczMDUxMDg0NzUzMjYzMjUwMDYyNTA5MzY5NjMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxOSBsb2cxMCAwLjAwMDAwMDQyMzk1MDM0Nzk5NTU1MjE1NzgyOTA3NTE1MDc0MTM0MTU0OTE1NDkxNzAxIC0+ICAtNi4zNzI2ODUwMDM5MTI1MzgxMTM0MDY5NDUwODAyMTA4ODkzMDc1NjA0NDY0MTM1Mjk3IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjAgbG9nMTAgNTYuNjgzMzc2MzA0Njc0MzU1NDgxOTA1MDIzMTQ1MjM4Nzk5OTA5MzAxNzMyNjk0OTgyICAtPiAgIDEuNzUzNDU1NzEwNzg1MzQ4MDQzNTcwMzQyMTgyNjA3NzYwNjI1MDYzNjU4MDA5MTc1NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTIxIGxvZzEwIDQ4LjczNDAzMzgxMTQ0NDE5NTA3MDgwNzYwNjcyMTUxNzE2OTgxMDQzODA0OTU4MTIyNyAgLT4gICAxLjY4NzgzMjM2MDI3NDEwNjUxOTA5NDI2NTQ3MTAwNDk0MzM4MDgyMDgyOTE1NjQwNDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyMiBsb2cxMCAwLjAwMDc0ODMwMzEwOTMwMDQ2ODY1MDA5ODUxNzA2OTg5NDMwMjI4NTYxODgwMjIxMDYzIC0+ICAtMy4xMjU5MjI0NTAyMjA5OTc0MDgyMjIzNjY3NzEyMDE2NDQ1NTcyNDMxNzkxOTIwNjE4IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjMgbG9nMTAgMzYuNjc3MzQ4ODg1MTExNTkzMzg0MDIwODM2NzIwMzk2MjYyNDk3MTIyNzA4NTk4MzU5ICAtPiAgIDEuNTY0Mzk3OTM2NDI2MDc5NjA4Njc1NDUzMDI4MjMwMjYwNTQ3NzU2NzQ2OTM5NTQyNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI0IGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAwMDQ0OTU2Nzg1NjA0ODA0MzI4NTg4MTI0MTkxNDU4MzM3NDQgLT4gLTE2LjM0NzIwNDc0ODIzOTc0MDUxMDAxNDMyMDYzMDM2MzI0NDAxNTkxNjAyOTYxOTU2MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI1IGxvZzEwIDk1MDkuNTg1NDAxMzY1MDY0Mjc5OTM3NDE1OTEzMTk0MDEwODc0ODU5NDc3NDMwNzEwNCAgLT4gICAzLjk3ODE2MTU4Mjk5MTYzMjY3NDExMDAxNjY1MTk3MjY4MjQ0MzA5NDU0MDYzMDI2NjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyNiBsb2cxMCAwLjA3ODM0ODkxMjY4Njg5MTc3MDE0MDQ0NDU0NzkzNjA4NzE1Mjc2NjE1NzQzODE5MDk3IC0+ICAtMS4xMDU5NjcwMjYyMTk3NjQzMTQ3ODA1NTE3Mzk4NjIxMjg4ODk3NjY5ODc2OTk2MzQ4IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjcgbG9nMTAgMC4wMDAwMDAyOTU4NDUyOTg4MDcwNjEyODQ0NDQ1NDY4ODQ1NDk5OTAzMjgwMTkwNDc5NCAtPiAgLTYuNTI4OTM1MzI3NTgxNDA0MzcxMDA3NjUyNjkyMDU2NjcyMTU3MDM3NTAyNjkxNzIwNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI4IGxvZzEwIDMuMDcxMzQ5NjU0NDQ5NzYxODA5ODc5NDMzMjc4Nzc3MjE4NjE3Njk4MTAxMTkwNDI5NCAgLT4gICAwLjQ4NzMyOTI2MTAzODk2ODI4NTQ2NDI0MzQxMDI5NDkyNDY4MTAwNDMxNDE0MDcyOTk0IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjkgbG9nMTAgMzUyLjY2MzkyNjcwNzg4ODE2NDc0NDA3NDQyNzg1NDYwODAzODMzOTI3MTM2NDEzOTQzICAtPiAgIDIuNTQ3MzYxMDM4ODE5OTU2MjcxNDcwOTgzNjM5ODI0MzkzMzMyMDI4NDA3NzAwODMxNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTMwIGxvZzEwIDAuMDAzMDQ3NDMxMjUxODE4NzYyNjcyMTA1MTY1MjczNjE3NDIxODU2MTcwOTE4MDE2NTAgLT4gIC0yLjUxNjA2NjA4MzAxNjM5ODE5Njc3NzQxMjQ3NDUzMTE0OTc0NDcwNTAwNTY0MDAyMDcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzMSBsb2cxMCAwLjAwMDAwMDc2MTIwNTM1ODk0OTUyMTM2NDk5MjUwMzY0NjA0NTM4MTE3NzI5NDM3MTgzIC0+ICAtNi4xMTg0OTgxNjI5MDQ3MDUxNTMyNDQ4NDEzODYzOTUwNzc2NDk2NjUyNDgzMDE5NDE1IEluZXhhY3QgUm91bmRlZAorbG9neDI1MzIgbG9nMTAgNzY5Ljg4Nzk1OTc4NTM0MzUzMDUyOTY1Mjg2MTk1MDUzNzM1MDA3NDczMTg3NzM1ODE1ICAtPiAgIDIuODg2NDI3NTI3Nzg2MjY1MjcwOTk4NjQ5ODU4MTA2NDExNzk1MDI4ODc5ODIyMjEwMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTMzIGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAwNDEyOTc0OTQ4MDg2MTIyMjYzMDQ2MTk1NzAwMTYzMzYxODggLT4gLTE1LjM4NDA3NjI5Mjc0NTQxNTkxNzUxMDY2ODQ1NDM2MTg2ODY1OTQ2ODY2OTgwNDcxMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM0IGxvZzEwIDg2MC44ODg2NDU5NTcxNDQyNjk0MDI0Nzk0MDk2MDI1ODU1ODg3NjkwMzc0MTk2Njk3NCAgLT4gICAyLjkzNDk0Njk4MDA1NTQyNzc5MTU5MjAyNzgwOTA2NDcyODMyMzM0NDA4NTkxNTUxNzYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzNSBsb2cxMCA1ODM5LjAzMjg4MTI5OTQ3ODcyMzU5MDAxNzg1ODczNzEwNTEwOTY4OTg2ODM5NzI0NDQgIC0+ICAgMy43NjYzNDA5MjA4OTcyMzkyNTY5MjY5MTI1NTM5NDM4ODc0NzM3MTQ3OTA2MjM4NTQzIEluZXhhY3QgUm91bmRlZAorbG9neDI1MzYgbG9nMTAgMC4wMDAwMDAyODUzMjcxMDE1MTI4NDg0MDQ3MTY3MDQ5NzExMjgyMTIwMTU5ODM3Nzg0MSAtPiAgLTYuNTQ0NjU2OTc1MzUxNDAyNzY3NTg3ODg3OTg0MzIzODA2NTQ4ODQ5MDYxODE1OTQ5MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM3IGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAwMDk3MzQ0OTAwNTk5MzE2Mzg0ODM0NDU2MzE4MzU2NTE1ODEgLT4gLTE2LjAxMTY4Njc5NDAxMTI3MTEzNTk3ODYzMzg4MDg2NDI3ODY5MjI1NDI0MzEwNjkzMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM4IGxvZzEwIDUuODYxMDk0OTUyNjQzOTUyOTQ4OTI1MjMwMjQ2MzQ1MDMwMjk4MTUxMTcxNDE0NDMzMCAgLT4gICAwLjc2Nzk3ODc1NzIyNDUyNTQ5MjgxMDI4NTUyMDY3NjQ1NzMyNDkwOTI5MzYxOTUyMjc4IEluZXhhY3QgUm91bmRlZAorbG9neDI1MzkgbG9nMTAgNi42MjgyNDMyMjIxMTE1OTIzMzcyMTUxMTQ4OTkwMTM3MTc5NjExOTc3NTc2MzI3MjA2ICAtPiAgIDAuODIxMzk4NDM2MzkyMjcyMTMyMTEwMTIwNDQwMDA3ODU3NTcyNjcxNTU3MzYwNzEzNjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjU0MCBsb2cxMCAwLjAwMDAwMDAwMDAxOTk0MDcxODYyMzg2ODQ2NjI2OTU0ODE5OTIzOTIzMzQ0NDEzNDU0IC0+IC0xMC43MDAyNTkxOTQ2MzIzMzk5ODAyNjY1NTkyMjQ0NDcyMTIyNjAxMTUwMjE2Mzc2MjYgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9MzQsIHdpdGhpbiAwLTk5OTkKK1ByZWNpc2lvbjogMzQKK2xvZ3gyMjAxIGxvZzEwIDEuNTIyNTEzMjAzODg5NzE0MTc5MDg4MzI3MzI4ODY0MTgzICAtPiAwLjE4MjU2MTA2NzcwOTg4OTYyNTA0OTY2NTEzMzA0OTIxMDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwMiBsb2cxMCAwLjE3MTEyMzc3NDc2OTcxNzMxNjE1NDA4MDg4ODkzMDQwNCAgLT4gLTAuNzY2Njg5NjQ4MzU0ODQ2MjU4MjQ2MTg5ODA5Mjc2NDQwOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjAzIGxvZzEwIDAuMDAwMDAwMDk5NzQ2NzIzNjI1MTcxNDI4MzEwNDk2MzgzOCAtPiAtNy4wMDExMDEzNjA2NTI1MTgyNzQyNzE1NjkwMTAzMTIxMTUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwNCBsb2cxMCAwLjAwMDg4NTYxMDM2MjQxMjI0Nzk3Njk2NDc1NDM0Njg2MzMgLT4gLTMuMDUyNzU3MzEwNDc2MDcwODkxODMwNDkwMzI3MTM4MTkwIEluZXhhY3QgUm91bmRlZAorbG9neDIyMDUgbG9nMTAgMS45MzgyNzQ4Njg3MzgwMzI5MzA3MDk0OTgyMjEyMzY3NTggIC0+IDAuMjg3NDE1MzY0ODI1OTQ0OTUyMDIwMTUzNjE3MTcxNDU5NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjA2IGxvZzEwIDQ3OS41NjY3ODQ3ODIzODI2NzEzMDgyNjEzNDQ1MDEwMDk3ICAtPiAyLjY4MDg0OTA5NTg1MDM2MTA2ODcwOTE2NTE1NzI4NjQzNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjA3IGxvZzEwIDg4NTYuMTM2NTk5MTc4ODIwMjAyMTQxODIzMTU3MzM2ODA0ICAtPiAzLjk0NzI0NDMwNjU4NDc2NzEwMTQ4MDQ1NDI2MTk1MDU1OSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjA4IGxvZzEwIDAuMDAwMDkxMTAyNjMxODgwMTkwMzk4MjY0Mjg3MTM0NDg1OCAtPiAtNC4wNDA0NjkwNzY0MzQ5NzkzOTg0Mzg2MTc0NjQwMzM4MjYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwOSBsb2cxMCAwLjAwMDAwMDAwMDAwMTcyNzExMTI2NTA0Mjc0MTQ3MzI2MzAgLT4gLTExLjc2MjY3OTY4MzE0MDM4NzQ4OTk1MTc4MjEyNjU0OTIxIEluZXhhY3QgUm91bmRlZAorbG9neDIyMTAgbG9nMTAgNi45NjI2MDUzNzAwNzg4ODU2NDc2Mzk1MDM1NDgyMjk2OTUgIC0+IDAuODQyNzcxNzgwNzIwMDMyMjM1MjY4NjM5NjkyNTk5MjI1MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjExIGxvZzEwIDAuMzM1NDgwNDQyODk5Mjc5MzEzMjg1NTkyMzU0MTY5Mjc4MSAtPiAtMC40NzQzMzI3OTIzMDEyMTU5MTcwOTY3NjM2MDcwODQ0ODM0IEluZXhhY3QgUm91bmRlZAorbG9neDIyMTIgbG9nMTAgMi4wNzk4NjQyNTc0NzQ4NTkwMDgyNTIxNjU4MzY2NjM1MDQgIC0+IDAuMzE4MDM0OTkxNjE5ODA1OTA0NjgxMjUwNjc0MTM4ODg1NiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjEzIGxvZzEwIDI4MDUuNDc5NTI5MjkyOTM5NDk5MjIwMjc2OTg2NjIxOTg4ICAtPiAzLjQ0ODAwNzEwNDEzOTk3NDM0NDU2NTk3ODc4MDYyNDc0NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjE0IGxvZzEwIDY2LjQ1NzMxMTMzMDM0MTg3Mzc0NTU3MDI4NTM3MjEzOTQ5ICAtPiAxLjgyMjU0Mjc2NzAwNTY0NDA0MTY2MTUyMDkzNjIyMzA4NiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjE1IGxvZzEwIDAuMDAwMDAwMTIwNjUyMTI2MTc2MjY4MTczODI3NDgyMjgzNSAtPiAtNi45MTg0NjUwMjAzOTAyMTY5Njk1NjE0OTQ3NTU3NjczMTggSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxNiBsb2cxMCAwLjAwMDAwMDAwMDE4ODQ4OTE5MTYyNjQ0MDExNjA0NzIzODEgLT4gLTkuNzI0NzEzNTQ4MTE5MDY1Mzg2MDkxOTMzMDA3NTI4NjMzIEluZXhhY3QgUm91bmRlZAorbG9neDIyMTcgbG9nMTAgMC4wMDAwMDE1NDY3Mjc5NTUxNzI2MzI2NTgxMzE0NTgyNzU5IC0+IC01LjgxMDU4NjA2NTA3MDQzNTM4Mzc1NTc1OTUxNDYwODczOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjE4IGxvZzEwIDAuMDA5MDc3NjMxNjcyODA2ODU4Njc0NDYzMzkxNDEzNTk1MiAtPiAtMi4wNDIwMjc0NDI4NDM3NDU4ODQ1MDMyODA5NTQzOTAxMTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxOSBsb2cxMCAwLjAwMDAwMDAwMDAwMjQ1NDExMDY1Mjg3MTMzOTM3NDAwMzAgLT4gLTExLjYxMDEwNTg1OTM1NjM1NzEzMDkwMTE5MTU2MDY5NDc5IEluZXhhY3QgUm91bmRlZAorbG9neDIyMjAgbG9nMTAgMTQuMTI5MzY4NzkzODU4NjM0MTAwODEwODc3NTA2NDU4NTYgIC0+IDEuMTUwMTIyNzYwODk1NDY2OTg5ODQxMDU3Mzg1NzQyNjYyIEluZXhhY3QgUm91bmRlZAorbG9neDIyMjEgbG9nMTAgMC4wMDAwMDM2OTEyNDgxODMxMzkyOTIyOTIyNjQ3MjMxMzkyIC0+IC01LjQzMjgyNjc1Mzc4OTg5MjI4MzU1NjIxMTM4MDgyNDIwMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjIyIGxvZzEwIDAuMDAwMDAwMDAwNDA2NzQ3NzUyNTQyMDQyNDI3MDEzODczNCAtPiAtOS4zOTA2NzQ4MzgwNTAwNzMxMjI4NTc4NjgwMTI0NzUwNjAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyMyBsb2cxMCA3MDgwLjEyMjU2MjcwNTM5OTc0NDk2OTMxOTU4OTgwNjE5NCAgLT4gMy44NTAwNDA3NzU3NDcxMDMzMTg3MjQzMzAwNDc1NDY5MTYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyNCBsb2cxMCAyNjEuMzQ5MTQxMTM2MzY3OTIwOTE3NTUyNDc5MDI1NTcyNSAgLT4gMi40MTcyMjEwNzcyMjc1MzYzMTk2NTU2OTk1MTc1MzA4NTUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyNSBsb2cxMCAwMDMuOTk0NTU4MTQ0OTkxNTI0MDA5NDcyODM4MDA0MTQ5NCAgLT4gMC42MDE0Njg3NDcxNTMxOTg4MjYwODIzMDY2OTk3ODQ1NjkxIEluZXhhY3QgUm91bmRlZAorbG9neDIyMjYgbG9nMTAgMC4wMDAwMDAwMDAwNTgzNTQ5MTY0NTg4NDk1MjA2NzY3ODQwIC0+IC0xMC4yMzM5MjI1NDgzNDE4MjY3NzAyMzIzMTcxMzUxOTM0MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjI3IGxvZzEwIDk1NjcuOTYxODMyNjA3MjQwMjc4MzQyNzYxMDg4NDg3NDg0ICAtPiAzLjk4MDgxOTQzNDIxMTEwNzYzMTU2OTM4NjE0NzAxNjM2OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjI4IGxvZzEwIDA2LjI2NTkyOTc5MTYwMzQyOTcyNzc3MjE5ODI4ODY3MDMzICAtPiAwLjc5Njk4NTUyNDM5NjYyMjE0MDg1OTUwMjQwMTI1NzQ3MjkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyOSBsb2cxMCAwLjAwMDAwMDAwMDA1ODk4NDcwNDY1OTgwNjcyNzMyODczMTkgLT4gLTEwLjIyOTI2MDU5MDc4MjA2MjE4NzE3NzU1MjUzNTgyOTA3IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzAgbG9nMTAgNTY3LjkzODg2NDgyMzU1ODkyMDQ3Njk0NDI4NjM3MjQ5OTcgIC0+IDIuNzU0MzAxNTg5MDU4MzEzNTc2NDcyMzgwMjYyOTA3NjM4IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzEgbG9nMTAgMDM5Ljc3OTAzMjU0ODAwMzc3Nzg5MTgxNjIyNjQ4ODM0MTUgIC0+IDEuNTk5NjU0MjE2NTkyMDE5MTk5NjM5Mjg1MzA4OTk3ODg2IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzIgbG9nMTAgMC4wMDAwMDAwMDA1MTIzOTUxOTIxODk0MTYyMTQ5ODE3MjA3IC0+IC05LjI5MDM5NDk1Mzg5ODg2MjY5NDg0NzMyNzEzNzI0MjY5MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjMzIGxvZzEwIDAuMDAwMDAwMDAwMDAzODUwMDk5OTcyMzYzNjkwNDI3NjcyMyAtPiAtMTEuNDE0NTI3OTkzMzc5MjQwNTYxODY4NjczMjQ4NTQ2OTEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzNCBsb2cxMCAwLjAwMDY3MjY1MDA2NTg5Nzc3NTk4MjU2MTY1Mzc5MzU4NjQgLT4gLTMuMTcyMjEwODEwOTIyNzY4NzI1Njg3NjcxODQ5NDIxNzkyIEluZXhhY3QgUm91bmRlZAorbG9neDIyMzUgbG9nMTAgMjYwLjI0MDAyNTA0NzU5Njc1Mjg0Mjk5NDM3NzkxMjY1MDcgIC0+IDIuNDE1Mzc0MDkyMDczNzk5MjA0MjM2ODAxMzgzMDcwMDY0IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzYgbG9nMTAgMC4wMDAwMDAwMDA2MTAxOTQyMzM5Mzg1MTAyNTg1MDQyNTQ4IC0+IC05LjIxNDUzMTkwMDU2MjA0NjU1NzE5MTI2MTIyNjYzMjUwOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjM3IGxvZzEwIDAuMDAwMDAwMDAxMDg0Njg2NzUwMTM4Mjc0Njc2MDA2NjU1NyAtPiAtOC45NjQ2OTU2NjQ4ODMyODI0MDYzNTk4NzQyNDIzODcyMzYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzOCBsb2cxMCA2MC4yNDA3ODM3NTU2ODgxNDc2OTAxMDMzMzcxMTUwOTkyOCAgLT4gMS43Nzk4OTA2MTM1NjcwODQyNTMxNjgzNzMyNjY2NDg5MjIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzOSBsb2cxMCAwLjAwMTIwNTg3Mzg3MTE3NTc2NjkzMzc2MDAyNTI5ODYwOTMgLT4gLTIuOTE4Njk4MTE1MDEyNjA1OTE1NzUzNzI4MjIwODk2MDEwIEluZXhhY3QgUm91bmRlZAorbG9neDIyNDAgbG9nMTAgMjMwLjk0NTA5MzAxOTc4NDE2MDA2MTE1MDMwOTUxODU2MDAgIC0+IDIuMzYzNTA4NzM5MDU2ODIyODQ2NzQyOTQyNTk5NjI4OTY2IEluZXhhY3QgUm91bmRlZAorCistLSBQPTE2LCB3aXRoaW4gMC05OTkKK1ByZWNpc2lvbjogMTYKK2xvZ3gyMTAxIGxvZzEwIDAuMDA3MjA2NzExOTYwNTE4NCAtPiAtMi4xNDIyNjI4MzU1NzMwMzggSW5leGFjdCBSb3VuZGVkCitsb2d4MjEwMiBsb2cxMCA1MDMuNjgyODQ4MjIyNjYyNCAgLT4gMi43MDIxNTcxNjIxOTU2NTIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEwMyBsb2cxMCA2NC45NjA3NDQ0NzgyMTgxNSAgLT4gMS44MTI2NTA5OTM0NjQxNzQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEwNCBsb2cxMCA0OC43NTQwODU5NzQ2NzI0NiAgLT4gMS42ODgwMTEwMTg4NDI2MDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEwNSBsb2cxMCAwLjAzMjkwMDk4MzkyNjk1ODcgLT4gLTEuNDgyNzkxMTEzOTc1MjgwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDYgbG9nMTAgMjIzLjUzMjA0MTUwNjA2MzMgIC0+IDIuMzQ5MzM5Nzg0NTIzNDEwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDcgbG9nMTAgNzMuMTI3NjUwMDIyOTIxOTQgIC0+IDEuODY0MDgxNjE3NDc2MjY4IEluZXhhY3QgUm91bmRlZAorbG9neDIxMDggbG9nMTAgNDg3LjM3NDkzNzgzNTg1MDkgIC0+IDIuNjg3ODYzMTkyODAyMjUyIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDkgbG9nMTAgMC4wMDAwMDE5NjcxOTg3NjIxIC0+IC01LjcwNjE1MTc1NzU1NzkyNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTEwIGxvZzEwIDAuMDU3MDY4MDY2MDYwOTc4NCAtPiAtMS4yNDM2MDY4NDQ2OTc4NzMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExMSBsb2cxMCAzMy4xMDMxMTYzODc4ODk5OCAgLT4gMS41MTk4Njg4ODA5NzY3NzMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExMiBsb2cxMCAwLjA2ODczODI2OTkxODcwNzcgLT4gLTEuMTYyODAxNDAyODY4MTg1IEluZXhhY3QgUm91bmRlZAorbG9neDIxMTMgbG9nMTAgMjU4Ljk0MTYxOTM2MjY0ODQgIC0+IDIuNDEzMjAxODU5NjU0MTQ1IEluZXhhY3QgUm91bmRlZAorbG9neDIxMTQgbG9nMTAgMC4wMDA1MzA2MTAwMTM2NzM2IC0+IC0zLjI3NTIyNDU1ODI2OTcyNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE1IGxvZzEwIDY1Ljc4NDkwMzkzNDA4NTcyICAtPiAxLjgxODEyNjI0NDgyNTEwOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE2IGxvZzEwIDUwNC4yMzI4ODQyMDczNTEwICAtPiAyLjcwMjYzMTE2NTM0Njk1OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE3IGxvZzEwIDkuNDE3NDMyNzU1ODE1MDI3ICAtPiAwLjk3MzkzMjUyNzg1MjQ1MDMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExOCBsb2cxMCAwMDYuNzA1NDgzNTM1NTQ5OCAgLT4gMC44MjY0MzAxMDA0OTQ3NjQwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMTkgbG9nMTAgMC4wOTE3MDEyMjcyMzYzOTE1IC0+IC0xLjAzNzYyNDg1MjEzMzM5OSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTIwIGxvZzEwIDUuOTU5NDA0Mzg1MjQ0OTIxICAtPiAwLjc3NTIwMjg1NjE5NTM0MDEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyMSBsb2cxMCAwLjAwMDEyMDk3NTkxNDg0ODYgLT4gLTMuOTE3MzAxMDg0OTY4OTAzIEluZXhhY3QgUm91bmRlZAorbG9neDIxMjIgbG9nMTAgMC4wMDA0NzA2MTEyMTM5ODM4IC0+IC0zLjMyNzMzNzcyODQyODAzOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTIzIGxvZzEwIDAuMDA2OTcwMDQ1NzM3NzA0NiAtPiAtMi4xNTY3NjQzNzIwMzU3NzEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyNCBsb2cxMCAwLjUxNTU1ODQ1Njk4NTI2MTkgLT4gLTAuMjg3NzIyMDg0NzgwNTAyNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTI1IGxvZzEwIDg4LjA2MDA1ODg1NjA3NDE0ICAtPiAxLjk0NDc3ODk3MTM4OTkxMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTI2IGxvZzEwIDAuMDQ0ODI0MDAzODIxOTg2NiAtPiAtMS4zNDg0ODkzNTM1MDk3MDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyNyBsb2cxMCAzLjQxOTYyMjQ4NDA1OTU2NSAgLT4gMC41MzM5NzgxNjM5MTAxMTQ1IEluZXhhY3QgUm91bmRlZAorbG9neDIxMjggbG9nMTAgNS4xNzExMjMzNTM4NTg3MjEgIC0+IDAuNzEzNTg0ODk3NzE0Mjg1NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTI5IGxvZzEwIDAuMDAwMjEzMzE4ODMxOTgwNyAtPiAtMy42NzA5NzA4MDI5NDU4NzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzMCBsb2cxMCA0Ni4yMTA4NjcwMzEzNjk2NiAgLT4gMS42NjQ3NDQxMTcwNDUxNDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzMSBsb2cxMCAwLjAwMDA2MzEwNTM3MTQ0MTUgLT4gLTQuMTk5OTMzNjcyNjM5ODgwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMzIgbG9nMTAgNzguNjYwMTkxOTY4NzA2OTggIC0+IDEuODk1NzU1MDAxOTYyNDY5IEluZXhhY3QgUm91bmRlZAorbG9neDIxMzMgbG9nMTAgMC4wMDA3MTUyMjc4MzUxMTg4IC0+IC0zLjE0NTU1NTU5MjA4MjI5NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTM0IGxvZzEwIDQ1LjUyNTA5ODE5OTI4NTM2ICAtPiAxLjY1ODI1MDg5MTI1Njg5MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTM1IGxvZzEwIDAuMDAwMDcwMzIyNzc5NTc0MCAtPiAtNC4xNTI5MDM5NzE2OTcxODMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzNiBsb2cxMCAyNi4yNDQzODY0MTQyNjY2OSAgLT4gMS40MTkwMzY0MjM1NTA1OTkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzNyBsb2cxMCAwLjAwMDAwNDQ2NTQ4Mjk1MzUgLT4gLTUuMzUwMTMxNTY0MTY2ODE3IEluZXhhY3QgUm91bmRlZAorbG9neDIxMzggbG9nMTAgMC43MzYwNzAyNzMzMDYyNTI5IC0+IC0wLjEzMzA4MDcyMTE4OTM2MTEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzOSBsb2cxMCA4LjQxNzA1OTE3NjQ2OTY1NSAgLT4gMC45MjUxNjAzODA1MTEyNzc4IEluZXhhY3QgUm91bmRlZAorbG9neDIxNDAgbG9nMTAgMC4wMDAyOTI2NTcwNzY3OTY4IC0+IC0zLjUzMzY0MDk2OTY2NDgxOCBJbmV4YWN0IFJvdW5kZWQKKworLS0gUD03LCB3aXRoaW4gMC05OQorUHJlY2lzaW9uOiA3Citsb2d4MjAwMSBsb2cxMCA1Ny4yNjA4OSAgLT4gMS43NTc4NTggSW5leGFjdCBSb3VuZGVkCitsb2d4MjAwMiBsb2cxMCAwLjA1NzU0MjEgLT4gLTEuMjQwMDE0IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDMgbG9nMTAgMC41OTE4NDY1IC0+IC0wLjIyNzc5MDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAwNCBsb2cxMCAwLjAwNjg3NzYgLT4gLTIuMTYyNTYzIEluZXhhY3QgUm91bmRlZAorbG9neDIwMDUgbG9nMTAgMC4wMDY2ODMzIC0+IC0yLjE3NTAwOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDA2IGxvZzEwIDkuOTI2OTYzICAtPiAwLjk5NjgxNjQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAwNyBsb2cxMCAwLjAwNDE4NTIgLT4gLTIuMzc4Mjg0IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDggbG9nMTAgODQuMTU0MTIgIC0+IDEuOTI1MDc1IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDkgbG9nMTAgMi40NjY4NTYgIC0+IDAuMzkyMTQzOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDEwIGxvZzEwIDAuMDA1ODA0NyAtPiAtMi4yMzYyMjAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxMSBsb2cxMCA5Ljg4NTE1NCAgLT4gMC45OTQ5ODM0IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTIgbG9nMTAgMC42NjY3NjU0IC0+IC0wLjE3NjAyNjkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxMyBsb2cxMCAzNC42NTczNiAgLT4gMS41Mzk3OTUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxNCBsb2cxMCAwLjAwMjY4ODQgLT4gLTIuNTcwNTA2IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTUgbG9nMTAgMC4wNDMyNzY3IC0+IC0xLjM2Mzc0NiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDE2IGxvZzEwIDY2LjAxNDA3ICAtPiAxLjgxOTYzNyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDE3IGxvZzEwIDAuMDA3MDU3MiAtPiAtMi4xNTEzNjggSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxOCBsb2cxMCAwLjA3MzE2MTMgLT4gLTEuMTM1NzE5IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTkgbG9nMTAgOS44Mzg5ODMgIC0+IDAuOTkyOTUwMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDIwIGxvZzEwIDE1Ljg5Njk2ICAtPiAxLjIwMTMxNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDIxIGxvZzEwIDguNDU5MjQ3ICAtPiAwLjkyNzMzMTcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyMiBsb2cxMCAwLjAwMTA4NzMgLT4gLTIuOTYzNjUxIEluZXhhY3QgUm91bmRlZAorbG9neDIwMjMgbG9nMTAgMC42NDk4NjE5IC0+IC0wLjE4NzE3ODkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyNCBsb2cxMCAwLjA4NDcwMDggLT4gLTEuMDcyMTEyIEluZXhhY3QgUm91bmRlZAorbG9neDIwMjUgbG9nMTAgMC4wMDc1NDg5IC0+IC0yLjEyMjExNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI2IGxvZzEwIDUxLjExMTUyICAtPiAxLjcwODUxOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI3IGxvZzEwIDAuNzIzMzg2NiAtPiAtMC4xNDA2Mjk1IEluZXhhY3QgUm91bmRlZAorbG9neDIwMjggbG9nMTAgMi4yNTQ3MjEgIC0+IDAuMzUzMDkyOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI5IGxvZzEwIDYuNTY4NDQ0ICAtPiAwLjgxNzQ2MjUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzMCBsb2cxMCA4My43MjYzOSAgLT4gMS45MjI4NjIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzMSBsb2cxMCA2LjcyMDU4NSAgLT4gMC44Mjc0MDcxIEluZXhhY3QgUm91bmRlZAorbG9neDIwMzIgbG9nMTAgODcuOTAzNjYgIC0+IDEuOTQ0MDA3IEluZXhhY3QgUm91bmRlZAorbG9neDIwMzMgbG9nMTAgMC4wNDMzMzI0IC0+IC0xLjM2MzE4NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM0IGxvZzEwIDM0LjYzOTEyICAtPiAxLjUzOTU2NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM1IGxvZzEwIDAuODA4OTA1OSAtPiAtMC4wOTIxMDIwMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM2IGxvZzEwIDcuNzkzNDA1ICAtPiAwLjg5MTcyNzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzNyBsb2cxMCAwLjAwNDE3NTcgLT4gLTIuMzc5MjcxIEluZXhhY3QgUm91bmRlZAorbG9neDIwMzggbG9nMTAgNy4xMzU0MTcgIC0+IDAuODUzNDE5NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM5IGxvZzEwIDEyLjQ5NTcwICAtPiAxLjA5Njc2MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDQwIGxvZzEwIDYuMzU2Mjc2ICAtPiAwLjgwMzIwMjcgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tLS0tCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNwZWNpYWwgdmFsdWVzCitsb2d4ODIwICBsb2cxMCAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkKK2xvZ3g4MjEgIGxvZzEwICAgMCAgICAgICAgLT4gIC1JbmZpbml0eQorbG9neDgyMiAgbG9nMTAgICBOYU4gICAgICAtPiAgIE5hTgorbG9neDgyMyAgbG9nMTAgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2xvZ3g4MjQgIGxvZzEwICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uCitsb2d4ODI1ICBsb2cxMCAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbgorbG9neDgyNiAgbG9nMTAgICBOYU40NTYgICAtPiAgIE5hTjQ1NgorbG9neDgyNyAgbG9nMTAgICAtTmFONjU0ICAtPiAgLU5hTjY1NAorbG9neDgyOCAgbG9nMTAgICBOYU4xICAgICAtPiAgIE5hTjEKKworCistLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucworLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10KK3ByZWNpc2lvbjogMTAwMDAwMDAwCitsb2d4OTAxICBsb2cxMCAxIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK3ByZWNpc2lvbjogIDk5OTk5OTk5Citsb2d4OTAyICBsb2cxMCAwIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKKworcHJlY2lzaW9uOiA5CittYXhFeHBvbmVudDogICAxMDAwMDAwCittaW5FeHBvbmVudDogICAtOTk5OTk5Citsb2d4OTAzICBsb2cxMCAxICAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorbG9neDkwNCAgbG9nMTAgMCAtPiAgLUluZmluaXR5CittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogIC0xMDAwMDAwCitsb2d4OTA1ICBsb2cxMCAxICAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OAorbG9neDkwNiAgbG9nMTAgMCAtPiAgLUluZmluaXR5CisKKy0tIE51bGwgdGVzdAorbG9neDkwMCAgbG9nMTAgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nYi5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2diLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI3OTAwNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nYi5kZWNUZXN0CkBAIC0wLDAgKzEsMTg4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGxvZ2IuZGVjVGVzdCAtLSByZXR1cm4gaW50ZWdyYWwgYWRqdXN0ZWQgZXhwb25lbnQgYXMgcGVyIDc1NHIgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDkuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBlbXBoYXNpc2VzIHRoZSB0ZXN0aW5nIG9mIG5vdGFibGUgY2FzZXMsIGFzIHRoZXkgd2lsbCBvZnRlbgorLS0gaGF2ZSB1bnVzdWFsIHBhdGhzIChlc3BlY2lhbGx5IHRoZSAxMCoqbiByZXN1bHRzKS4KKworZXh0ZW5kZWQ6ICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CisKKy0tIGJhc2ljcyAmIGV4YW1wbGVzCitwcmVjaXNpb246ICAgOQorbG9nYngwMDEgbG9nYiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDAwMiBsb2diICAxRS05OTkgICAgICAgICAgICAtPiAtOTk5Citsb2dieDAwMyBsb2diICA5RS05OTkgICAgICAgICAgICAtPiAtOTk5Citsb2dieDAwNCBsb2diICAwLjAwMSAgICAgICAgICAgICAtPiAtMworbG9nYngwMDUgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTIKK2xvZ2J4MDA2IGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAwCitsb2dieDAwNyBsb2diICAyICAgICAgICAgICAgICAgICAtPiAgMAorbG9nYngwMDggbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDAKK2xvZ2J4MDA5IGxvZ2IgIDIuNTAgICAgICAgICAgICAgIC0+ICAwCitsb2dieDAxMCBsb2diICAxMCAgICAgICAgICAgICAgICAtPiAgMQorbG9nYngwMTEgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDEKK2xvZ2J4MDEyIGxvZ2IgIDEwMCAgICAgICAgICAgICAgIC0+ICAyCitsb2dieDAxMyBsb2diICAyNTAgICAgICAgICAgICAgICAtPiAgMgorbG9nYngwMTQgbG9nYiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIG5lZ2F0aXZlcyBhcmUgdHJlYXRlZCBhcyBwb3NpdGl2ZXMKK2xvZ2J4MDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngwMjIgbG9nYiAtMUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQorbG9nYngwMjMgbG9nYiAtOUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQorbG9nYngwMjQgbG9nYiAtMC4wMDEgICAgICAgICAgICAgLT4gLTMKK2xvZ2J4MDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwCitsb2dieDAyNiBsb2diIC0yICAgICAgICAgICAgICAgICAtPiAgMAorbG9nYngwMjcgbG9nYiAtMTAgICAgICAgICAgICAgICAgLT4gIDEKK2xvZ2J4MDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxCitsb2dieDAyOSBsb2diIC0xMDAgICAgICAgICAgICAgICAtPiAgMgorbG9nYngwMzAgbG9nYiAtMTAwMDAwMDAwICAgICAgICAgLT4gIDgKK2xvZ2J4MDMxIGxvZ2IgLUluZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSB6ZXJvcworbG9nYngxMTEgbG9nYiAgICAgICAgICAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDExMiBsb2diICAgICAgICAgLTAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTQgbG9nYiAgICAgIC0wRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDExNSBsb2diICAgICAwLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTcgbG9nYiAgICAgIDBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDExOCBsb2diICAgICAtMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2xvZ2J4MTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgKK2xvZ2J4MTIyIGxvZ2IgIC0yNjgyNjgyNjggICAgICAgIC0+IDgKK2xvZ2J4MTIzIGxvZ2IgICAxMzQxMzQxMzQgICAgICAgIC0+IDgKK2xvZ2J4MTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2xvZ2J4MTMxIGxvZ2IgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDk5OQorbG9nYngxMzIgbG9nYiAgMUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQorbG9nYngxMzMgbG9nYiAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gLTk5OQorbG9nYngxMzQgbG9nYiAgMUUtMTAwNyAgICAgICAgICAgLT4gLTEwMDcKKworbG9nYngxMzUgbG9nYiAgLTFFLTEwMDcgICAgICAgICAgLT4gLTEwMDcKK2xvZ2J4MTM2IGxvZ2IgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC05OTkKK2xvZ2J4MTM3IGxvZ2IgIC0xRS05OTkgICAgICAgICAgIC0+IC05OTkKK2xvZ2J4MTM4IGxvZ2IgIC05Ljk5OTk5OTk5RSs5OTkgIC0+ICA5OTkKKworLS0gb25lcworbG9nYngwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG9nYngwMDYyIGxvZ2IgIDEuMCAgICAgICAgICAgICAgIC0+ICAgMAorbG9nYngwMDYzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorbG9nYngwMDY0IGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorCistLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMAorbG9nYngxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwCitsb2dieDExMDEgbG9nYiAxMCAgICAgICAgICAgIC0+IDEKK2xvZ2J4MTEwMiBsb2diIDEwMCAgICAgICAgICAgLT4gMgorbG9nYngxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzCitsb2dieDExMDQgbG9nYiAxMDAwMCAgICAgICAgIC0+IDQKK2xvZ2J4MTEwNSBsb2diIDEwMDAwMCAgICAgICAgLT4gNQorbG9nYngxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2Citsb2dieDExMDcgbG9nYiAxMDAwMDAwMCAgICAgIC0+IDcKK2xvZ2J4MTEwOCBsb2diIDEwMDAwMDAwMCAgICAgLT4gOAorbG9nYngxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5Citsb2dieDExMTAgbG9nYiAxMDAwMDAwMDAwMCAgIC0+IDEwCitsb2dieDExMTEgbG9nYiAxMDAwMDAwMDAwMDAgIC0+IDExCitsb2dieDExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyCitsb2dieDExMTMgbG9nYiAwLjAwMDAwMDAwMDAxIC0+IC0xMQorbG9nYngxMTE0IGxvZ2IgMC4wMDAwMDAwMDAxIC0+IC0xMAorbG9nYngxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkKK2xvZ2J4MTExNiBsb2diIDAuMDAwMDAwMDEgLT4gLTgKK2xvZ2J4MTExNyBsb2diIDAuMDAwMDAwMSAtPiAtNworbG9nYngxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYKK2xvZ2J4MTExOSBsb2diIDAuMDAwMDEgLT4gLTUKK2xvZ2J4MTEyMCBsb2diIDAuMDAwMSAtPiAtNAorbG9nYngxMTIxIGxvZ2IgMC4wMDEgLT4gLTMKK2xvZ2J4MTEyMiBsb2diIDAuMDEgLT4gLTIKK2xvZ2J4MTEyMyBsb2diIDAuMSAtPiAtMQorbG9nYngxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQorbG9nYngxMTI1IGxvZ2IgMUUtMTAwIC0+IC0xMDAKK2xvZ2J4MTEyNiBsb2diIDFFLTM4MyAtPiAtMzgzCitsb2dieDExMjcgbG9nYiAxRS05OTkgLT4gLTk5OQorCistLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hCitsb2dieDE0MDAgbG9nYiAxMEUtMyAgICAtPiAtMgorbG9nYngxNDAxIGxvZ2IgMTBFLTIgICAgLT4gLTEKK2xvZ2J4MTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwCitsb2dieDE0MDMgbG9nYiAxMDAwRS0yICAtPiAgMQorbG9nYngxNDA0IGxvZ2IgMTAwMDBFLTIgLT4gIDIKK2xvZ2J4MTQwNSBsb2diIDEwRS0xICAgIC0+ICAwCitsb2dieDE0MDYgbG9nYiAxMDBFLTEgICAtPiAgMQorbG9nYngxNDA3IGxvZ2IgMTAwMEUtMSAgLT4gIDIKK2xvZ2J4MTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzCitsb2dieDE0MDkgbG9nYiAxMEUwICAgICAtPiAgMQorbG9nYngxNDEwIGxvZ2IgMTAwRTAgICAgLT4gIDIKK2xvZ2J4MTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzCitsb2dieDE0MTIgbG9nYiAxMDAwMEUwICAtPiAgNAorbG9nYngxNDEzIGxvZ2IgMTBFMSAgICAgLT4gIDIKK2xvZ2J4MTQxNCBsb2diIDEwMEUxICAgIC0+ICAzCitsb2dieDE0MTUgbG9nYiAxMDAwRTEgICAtPiAgNAorbG9nYngxNDE2IGxvZ2IgMTAwMDBFMSAgLT4gIDUKK2xvZ2J4MTQxNyBsb2diIDEwRTIgICAgIC0+ICAzCitsb2dieDE0MTggbG9nYiAxMDBFMiAgICAtPiAgNAorbG9nYngxNDE5IGxvZ2IgMTAwMEUyICAgLT4gIDUKK2xvZ2J4MTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2CisKKy0tIGluZXhhY3RzCitwcmVjaXNpb246IDIKK2xvZ2J4MTUwMCBsb2diIDEwMDAwRTIgICAgICAgLT4gIDYKK2xvZ2J4MTUwMSBsb2diIDFFKzk5ICAgICAgICAgLT4gIDk5Citsb2dieDE1MDIgbG9nYiAxRS05OSAgICAgICAgIC0+IC05OQorbG9nYngxNTAzIGxvZ2IgMUUrMTAwICAgICAgICAtPiAgMS4wRSsyICBSb3VuZGVkCitsb2dieDE1MDQgbG9nYiAxRSs5OTkgICAgICAgIC0+ICAxLjBFKzMgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTA1IGxvZ2IgMUUtMTAwICAgICAgICAtPiAtMS4wRSsyICBSb3VuZGVkCitsb2dieDE1MDYgbG9nYiAxRS05OTkgICAgICAgIC0+IC0xLjBFKzMgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTA3IGxvZ2IgMUUtMTExMSAgICAgICAtPiAtMS4xRSszICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUwOCBsb2diIDFFLTMzMzMgICAgICAgLT4gLTMuM0UrMyAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MDkgbG9nYiAxRS02NjY2ICAgICAgIC0+IC02LjdFKzMgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTEwIGxvZ2IgMUUrOTk5OTk5OTk5ICAtPiAgMS4wRSs5ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUxMSBsb2diIDFFLTk5OTk5OTk5OSAgLT4gLTEuMEUrOSAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEKK2xvZ2J4MTUxNyBsb2diIDFFLTExMTEgICAgICAgLT4gLTFFKzMgICAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MTggbG9nYiAxRS0zMzMzICAgICAgIC0+IC0zRSszICAgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTE5IGxvZ2IgMUUtNjY2NiAgICAgICAtPiAtN0UrMyAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOAorbG9nYngxNTIwIGxvZ2IgMUUrOTk5OTk5OTk5ICAtPiAgMS4wMDAwMDAwRSs5IEluZXhhY3QgUm91bmRlZAorbG9nYngxNTIxIGxvZ2IgMUUtOTk5OTk5OTk5ICAtPiAtMS4wMDAwMDAwRSs5IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA5Citsb2dieDE1MjMgbG9nYiAxRSs5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTkKK2xvZ2J4MTUyNCBsb2diIDFFLTk5OTk5OTk5OSAgLT4gLTk5OTk5OTk5OQorCistLSBzcGVjaWFsIHZhbHVlcworcHJlY2lzaW9uOiA5Citsb2dieDgyMCAgbG9nYiAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkKK2xvZ2J4ODIxICBsb2diICAtSW5maW5pdHkgLT4gICBJbmZpbml0eQorbG9nYng4MjIgIGxvZ2IgICAwICAgICAgICAtPiAgLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4ODIzICBsb2diICAgTmFOICAgICAgLT4gICBOYU4KK2xvZ2J4ODI0ICBsb2diICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitsb2dieDgyNSAgbG9nYiAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgorbG9nYng4MjYgIGxvZ2IgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24KK2xvZ2J4ODI3ICBsb2diICAgTmFONDU2ICAgLT4gICBOYU40NTYKK2xvZ2J4ODI4ICBsb2diICAgLU5hTjY1NCAgLT4gIC1OYU42NTQKK2xvZ2J4ODI5ICBsb2diICAgTmFOMSAgICAgLT4gICBOYU4xCisKKy0tIE51bGwgdGVzdAorbG9nYng5MDAgIGxvZ2IgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWF4LmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21heC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYjU3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21heC5kZWNUZXN0CkBAIC0wLDAgKzEsNDI0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG1heC5kZWNUZXN0IC0tIGRlY2ltYWwgbWF4aW11bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworbWF4eDAwMSBtYXggIC0yICAtMiAgLT4gLTIKK21heHgwMDIgbWF4ICAtMiAgLTEgIC0+IC0xCittYXh4MDAzIG1heCAgLTIgICAwICAtPiAgMAorbWF4eDAwNCBtYXggIC0yICAgMSAgLT4gIDEKK21heHgwMDUgbWF4ICAtMiAgIDIgIC0+ICAyCittYXh4MDA2IG1heCAgLTEgIC0yICAtPiAtMQorbWF4eDAwNyBtYXggIC0xICAtMSAgLT4gLTEKK21heHgwMDggbWF4ICAtMSAgIDAgIC0+ICAwCittYXh4MDA5IG1heCAgLTEgICAxICAtPiAgMQorbWF4eDAxMCBtYXggIC0xICAgMiAgLT4gIDIKK21heHgwMTEgbWF4ICAgMCAgLTIgIC0+ICAwCittYXh4MDEyIG1heCAgIDAgIC0xICAtPiAgMAorbWF4eDAxMyBtYXggICAwICAgMCAgLT4gIDAKK21heHgwMTQgbWF4ICAgMCAgIDEgIC0+ICAxCittYXh4MDE1IG1heCAgIDAgICAyICAtPiAgMgorbWF4eDAxNiBtYXggICAxICAtMiAgLT4gIDEKK21heHgwMTcgbWF4ICAgMSAgLTEgIC0+ICAxCittYXh4MDE4IG1heCAgIDEgICAwICAtPiAgMQorbWF4eDAxOSBtYXggICAxICAgMSAgLT4gIDEKK21heHgwMjAgbWF4ICAgMSAgIDIgIC0+ICAyCittYXh4MDIxIG1heCAgIDIgIC0yICAtPiAgMgorbWF4eDAyMiBtYXggICAyICAtMSAgLT4gIDIKK21heHgwMjMgbWF4ICAgMiAgIDAgIC0+ICAyCittYXh4MDI1IG1heCAgIDIgICAxICAtPiAgMgorbWF4eDAyNiBtYXggICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK21heHgwMzAgbWF4ICAgMCAgICAgMCAgIC0+ICAwCittYXh4MDMxIG1heCAgIDAgICAgLTAgICAtPiAgMAorbWF4eDAzMiBtYXggICAwICAgIC0wLjAgLT4gIDAKK21heHgwMzMgbWF4ICAgMCAgICAgMC4wIC0+ICAwCittYXh4MDM0IG1heCAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgorbWF4eDAzNSBtYXggIC0wICAgIC0wICAgLT4gLTAKK21heHgwMzYgbWF4ICAtMCAgICAtMC4wIC0+IC0wLjAKK21heHgwMzcgbWF4ICAtMCAgICAgMC4wIC0+ICAwLjAKK21heHgwMzggbWF4ICAgMC4wICAgMCAgIC0+ICAwCittYXh4MDM5IG1heCAgIDAuMCAgLTAgICAtPiAgMC4wCittYXh4MDQwIG1heCAgIDAuMCAgLTAuMCAtPiAgMC4wCittYXh4MDQxIG1heCAgIDAuMCAgIDAuMCAtPiAgMC4wCittYXh4MDQyIG1heCAgLTAuMCAgIDAgICAtPiAgMAorbWF4eDA0MyBtYXggIC0wLjAgIC0wICAgLT4gLTAuMAorbWF4eDA0NCBtYXggIC0wLjAgIC0wLjAgLT4gLTAuMAorbWF4eDA0NSBtYXggIC0wLjAgICAwLjAgLT4gIDAuMAorCittYXh4MDUwIG1heCAgLTBFMSAgIDBFMSAtPiAgMEUrMQorbWF4eDA1MSBtYXggIC0wRTIgICAwRTIgLT4gIDBFKzIKK21heHgwNTIgbWF4ICAtMEUyICAgMEUxIC0+ICAwRSsxCittYXh4MDUzIG1heCAgLTBFMSAgIDBFMiAtPiAgMEUrMgorbWF4eDA1NCBtYXggICAwRTEgIC0wRTEgLT4gIDBFKzEKK21heHgwNTUgbWF4ICAgMEUyICAtMEUyIC0+ICAwRSsyCittYXh4MDU2IG1heCAgIDBFMiAgLTBFMSAtPiAgMEUrMgorbWF4eDA1NyBtYXggICAwRTEgIC0wRTIgLT4gIDBFKzEKKworbWF4eDA1OCBtYXggICAwRTEgICAwRTEgLT4gIDBFKzEKK21heHgwNTkgbWF4ICAgMEUyICAgMEUyIC0+ICAwRSsyCittYXh4MDYwIG1heCAgIDBFMiAgIDBFMSAtPiAgMEUrMgorbWF4eDA2MSBtYXggICAwRTEgICAwRTIgLT4gIDBFKzIKK21heHgwNjIgbWF4ICAtMEUxICAtMEUxIC0+IC0wRSsxCittYXh4MDYzIG1heCAgLTBFMiAgLTBFMiAtPiAtMEUrMgorbWF4eDA2NCBtYXggIC0wRTIgIC0wRTEgLT4gLTBFKzEKK21heHgwNjUgbWF4ICAtMEUxICAtMEUyIC0+IC0wRSsxCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246IDkKK21heHgwOTAgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK21heHgwOTEgbWF4ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK21heHgwOTIgbWF4ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK21heHgwOTMgbWF4ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK21heHgwOTQgbWF4ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK21heHgwOTUgbWF4ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK21heHgwOTYgbWF4ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK21heHgwOTcgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK21heHgwOTggbWF4IC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK21heHgwOTkgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK21heHgxMDAgbWF4IC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK21heHgxMDEgbWF4IC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK21heHgxMDIgbWF4ICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK21heHgxMDMgbWF4ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK21heHgxMDQgbWF4ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK21heHgxMDUgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworbWF4eDEyMCBtYXggLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbWF4eDEyMSBtYXggLUluZiAgLTEwMDAgIC0+IC0xMDAwCittYXh4MTIyIG1heCAtSW5mICAtMSAgICAgLT4gLTEKK21heHgxMjMgbWF4IC1JbmYgIC0wICAgICAtPiAtMAorbWF4eDEyNCBtYXggLUluZiAgIDAgICAgIC0+ICAwCittYXh4MTI1IG1heCAtSW5mICAgMSAgICAgLT4gIDEKK21heHgxMjYgbWF4IC1JbmYgICAxMDAwICAtPiAgMTAwMAorbWF4eDEyNyBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbWF4eDEyOCBtYXggLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkKK21heHgxMjkgbWF4IC0xMDAwIC1JbmYgICAtPiAgLTEwMDAKK21heHgxMzAgbWF4IC0xICAgIC1JbmYgICAtPiAgLTEKK21heHgxMzEgbWF4IC0wICAgIC1JbmYgICAtPiAgLTAKK21heHgxMzIgbWF4ICAwICAgIC1JbmYgICAtPiAgMAorbWF4eDEzMyBtYXggIDEgICAgLUluZiAgIC0+ICAxCittYXh4MTM0IG1heCAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK21heHgxMzUgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCittYXh4MTQxIG1heCAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5CittYXh4MTQyIG1heCAgTmFOIC0xMDAwICAgLT4gLTEwMDAKK21heHgxNDMgbWF4ICBOYU4gLTEgICAgICAtPiAtMQorbWF4eDE0NCBtYXggIE5hTiAtMCAgICAgIC0+IC0wCittYXh4MTQ1IG1heCAgTmFOICAwICAgICAgLT4gIDAKK21heHgxNDYgbWF4ICBOYU4gIDEgICAgICAtPiAgMQorbWF4eDE0NyBtYXggIE5hTiAgMTAwMCAgIC0+ICAxMDAwCittYXh4MTQ4IG1heCAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CittYXh4MTQ5IG1heCAgTmFOICBOYU4gICAgLT4gIE5hTgorbWF4eDE1MCBtYXggLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorbWF4eDE1MSBtYXggLTEwMDAgTmFOICAgIC0+IC0xMDAwCittYXh4MTUyIG1heCAtMSAgICBOYU4gICAgLT4gLTEKK21heHgxNTMgbWF4IC0wICAgIE5hTiAgICAtPiAtMAorbWF4eDE1NCBtYXggIDAgICAgTmFOICAgIC0+ICAwCittYXh4MTU1IG1heCAgMSAgICBOYU4gICAgLT4gIDEKK21heHgxNTYgbWF4ICAxMDAwIE5hTiAgICAtPiAgMTAwMAorbWF4eDE1NyBtYXggIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCittYXh4MTYxIG1heCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNjIgbWF4ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE2MyBtYXggIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTY0IG1heCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNjUgbWF4ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE2NiBtYXggIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTY3IG1heCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNjggbWF4ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE2OSBtYXggIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTcwIG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNzEgbWF4IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE3MiBtYXggLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTczIG1heCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNzQgbWF4IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE3NSBtYXggIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTc2IG1heCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNzcgbWF4ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE3OCBtYXggIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTc5IG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworbWF4eDE4MSBtYXggIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkKK21heHgxODIgbWF4ICBOYU44ICAgICA5ICAgLT4gIDkKK21heHgxODMgbWF4IC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5CisKK21heHgxODQgbWF4IC1OYU4xICAgTmFOMTEgLT4gLU5hTjEKK21heHgxODUgbWF4ICBOYU4yICAgTmFOMTIgLT4gIE5hTjIKK21heHgxODYgbWF4IC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzCittYXh4MTg3IG1heCAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNAorCittYXh4MTg4IG1heCAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQorbWF4eDE4OSBtYXggLTkgICAgIC1OYU4zICAtPiAtOQorbWF4eDE5MCBtYXggIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkKKworbWF4eDE5MSBtYXggIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE5MiBtYXggIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE5MyBtYXggLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE5NCBtYXggIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE5NSBtYXggIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE5NiBtYXggLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE5NyBtYXggIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE5OCBtYXggIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE5OSBtYXggIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSByb3VuZGluZyBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK21heHgyMDEgbWF4IDEyMzQ1Njc4MDAwIDEgIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKK21heHgyMDIgbWF4IDEgMTIzNDU2NzgwMDAgIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKK21heHgyMDMgbWF4IDEyMzQ1Njc4MDAgIDEgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorbWF4eDIwNCBtYXggMSAxMjM0NTY3ODAwICAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCittYXh4MjA1IG1heCAxMjM0NTY3ODkwICAxICAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK21heHgyMDYgbWF4IDEgMTIzNDU2Nzg5MCAgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorbWF4eDIwNyBtYXggMTIzNDU2Nzg5MSAgMSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK21heHgyMDggbWF4IDEgMTIzNDU2Nzg5MSAgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCittYXh4MjA5IG1heCAxMjM0NTY3ODkwMSAxICAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK21heHgyMTAgbWF4IDEgMTIzNDU2Nzg5MDEgIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorbWF4eDIxMSBtYXggMTIzNDU2Nzg5NiAgMSAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKK21heHgyMTIgbWF4IDEgMTIzNDU2Nzg5NiAgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCittYXh4MjEzIG1heCAtMTIzNDU2Nzg5MSAgMSAtPiAxCittYXh4MjE0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxCittYXh4MjE1IG1heCAtMTIzNDU2Nzg5MDEgMSAtPiAxCittYXh4MjE2IG1heCAxIC0xMjM0NTY3ODkwMSAtPiAxCittYXh4MjE3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxCittYXh4MjE4IG1heCAxIC0xMjM0NTY3ODk2ICAtPiAxCisKK3ByZWNpc2lvbjogMTUKK21heHgyMjEgbWF4IDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwCittYXh4MjIyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAorbWF4eDIyMyBtYXggMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMAorbWF4eDIyNCBtYXggMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorbWF4eDIyNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MAorbWF4eDIyNiBtYXggMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorbWF4eDIyNyBtYXggMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQorbWF4eDIyOCBtYXggMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQorbWF4eDIyOSBtYXggMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDEKK21heHgyMzAgbWF4IDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCittYXh4MjMxIG1heCAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2CittYXh4MjMyIG1heCAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CittYXh4MjMzIG1heCAtMTIzNDU2Nzg5MSAgMSAtPiAxCittYXh4MjM0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxCittYXh4MjM1IG1heCAtMTIzNDU2Nzg5MDEgMSAtPiAxCittYXh4MjM2IG1heCAxIC0xMjM0NTY3ODkwMSAtPiAxCittYXh4MjM3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxCittYXh4MjM4IG1heCAxIC0xMjM0NTY3ODk2ICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK21heHgyODAgbWF4ICczJyAgICcyJyAgLT4gICczJworbWF4eDI4MSBtYXggJy0xMCcgJzMnICAtPiAgJzMnCittYXh4MjgyIG1heCAnMS4wJyAnMScgIC0+ICAnMScKK21heHgyODMgbWF4ICcxJyAnMS4wJyAgLT4gICcxJworbWF4eDI4NCBtYXggJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4uCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorbWF4eDMzMCBtYXggKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+ICA5RSs5OTk5OTk5OTkKK21heHgzMzEgbWF4IDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgOUUrOTk5OTk5OTk5CittYXh4MzMyIG1heCArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gIDAuMTAwCittYXh4MzMzIG1heCA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gIDAuMTAwCittYXh4MzM1IG1heCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQorbWF4eDMzNiBtYXggOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICA5RSs5OTk5OTk5OTkKK21heHgzMzcgbWF4IC0wLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgOUUtOTk5OTk5OTk5CittYXh4MzM4IG1heCA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDlFLTk5OTk5OTk5OQorCittYXh4MzM5IG1heCAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgLT4gIDFFLTQwMDAwMDAwMQorbWF4eDM0MCBtYXggMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgIC0+ICAxRS00MDAwMDAwMDAKK21heHgzNDEgbWF4IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAtPiAgMUUtNDAwMDAwMDAwCittYXh4MzQyIG1heCA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgLT4gIDAuMDEKK21heHgzNDMgbWF4IDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAgMC4xCittYXh4MzQ0IG1heCAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgLT4gIDAuMDEKK21heHgzNDUgbWF4IDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMUUrNTk5OTk5OTk5CittYXh4MzQ2IG1heCAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDFFKzU5OTk5OTk5OQorbWF4eDM0NyBtYXggMWU2MDAwMDAwMDAgMWU0MDAwMDAwMDAgICAgIC0+ICAxRSs2MDAwMDAwMDAKK21heHgzNDggbWF4IDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4CittYXh4MzQ5IG1heCA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OAorbWF4eDM1MCBtYXggMTAwICA5ZTk5OTk5OTk5OCAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgKKy0tIHNpZ25zCittYXh4MzUxIG1heCAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDFFKzc3Nzc3Nzc3NworbWF4eDM1MiBtYXggIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+ICAxRSs3Nzc3Nzc3NzcKK21heHgzNTMgbWF4IC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAgMUUrNDExMTExMTExCittYXh4MzU0IG1heCAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzQxMTExMTExMQorbWF4eDM1NSBtYXggIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+ICAxRS00MTExMTExMTEKK21heHgzNTYgbWF4ICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAgMUUtNzc3Nzc3Nzc3CittYXh4MzU3IG1heCAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gIDFFLTQxMTExMTExMQorbWF4eDM1OCBtYXggLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS03Nzc3Nzc3NzcKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCittYXh4NDAxIG1heCAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5CittYXh4NDAyIG1heCAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorbWF4eDQwMyBtYXggIDEgICAgICAxLjAgICAgIC0+ICAxCittYXh4NDA0IG1heCAgMS4wICAgIDAuMSAgICAgLT4gIDEuMAorbWF4eDQwNSBtYXggIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK21heHg0MDYgbWF4ICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAorbWF4eDQwNyBtYXggIDAuMTAgICAwICAgICAgIC0+ICAwLjEwCittYXh4NDA4IG1heCAgMCAgICAgIDAuMCAgICAgLT4gIDAKK21heHg0MDkgbWF4ICAwLjAgICAtMCAgICAgICAtPiAgMC4wCittYXh4NDEwIG1heCAgMC4wICAgLTAuMCAgICAgLT4gIDAuMAorbWF4eDQxMSBtYXggIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCittYXh4NDEyIG1heCAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAorbWF4eDQxMyBtYXggIDAgICAgIC0wLjAgICAgIC0+ICAwCittYXh4NDE0IG1heCAgMCAgICAgLTAgICAgICAgLT4gIDAKK21heHg0MTUgbWF4IC0wLjAgICAtMCAgICAgICAtPiAtMC4wCittYXh4NDE2IG1heCAtMCAgICAgLTAuMTAwICAgLT4gLTAKK21heHg0MTcgbWF4IC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK21heHg0MTggbWF4IC0wLjEwICAtMC4xICAgICAtPiAtMC4xMAorbWF4eDQxOSBtYXggLTAuMSAgIC0xLjAgICAgIC0+IC0wLjEKK21heHg0MjAgbWF4IC0xLjAgICAtMSAgICAgICAtPiAtMS4wCittYXh4NDIxIG1heCAtMSAgICAgLTEuMSAgICAgLT4gLTEKK21heHg0MjMgbWF4IC0xLjEgICAtSW5mICAgICAtPiAtMS4xCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK21heHg0MzEgbWF4ICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkKK21heHg0MzIgbWF4ICAxICAgICAgMS4xICAgICAtPiAgMS4xCittYXh4NDMzIG1heCAgMS4wICAgIDEgICAgICAgLT4gIDEKK21heHg0MzQgbWF4ICAwLjEgICAgMS4wICAgICAtPiAgMS4wCittYXh4NDM1IG1heCAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQorbWF4eDQzNiBtYXggIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwCittYXh4NDM3IG1heCAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTAKK21heHg0MzggbWF4ICAwLjAgICAgMCAgICAgICAtPiAgMAorbWF4eDQzOSBtYXggLTAgICAgICAwLjAgICAgIC0+ICAwLjAKK21heHg0NDAgbWF4IC0wLjAgICAgMC4wICAgICAtPiAgMC4wCittYXh4NDQxIG1heCAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDAKK21heHg0NDIgbWF4IC0wLjAwICAgMC4wICAgICAtPiAgMC4wCittYXh4NDQzIG1heCAtMC4wICAgIDAgICAgICAgLT4gIDAKK21heHg0NDQgbWF4IC0wICAgICAgMCAgICAgICAtPiAgMAorbWF4eDQ0NSBtYXggLTAgICAgIC0wLjAgICAgIC0+IC0wLjAKK21heHg0NDYgbWF4IC0wLjEwMCAtMCAgICAgICAtPiAtMAorbWF4eDQ0NyBtYXggLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAorbWF4eDQ0OCBtYXggLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwCittYXh4NDQ5IG1heCAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQorbWF4eDQ1MCBtYXggLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKK21heHg0NTEgbWF4IC0xLjEgICAtMSAgICAgICAtPiAtMQorbWF4eDQ1MyBtYXggLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKKy0tIGxhcmdpZXMKK21heHg0NjAgbWF4ICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMworbWF4eDQ2MSBtYXggIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCittYXh4NDYyIG1heCAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK21heHg0NjMgbWF4ICAxRSszICAtMTAwMCAgICAtPiAgMUUrMworbWF4eDQ2NCBtYXggLTEwMDAgICAxRSszICAgIC0+ICAxRSszCittYXh4NDY1IG1heCAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK21heHg0NjYgbWF4IC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMAorbWF4eDQ2NyBtYXggLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCisKKy0tIHJvdW5kaW5nIChyZXN1bHRzIHRyZWF0ZWQgYXMgdGhvdWdoIHBsdXMpCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCisKK21heHg0NzAgbWF4ICAxICAgICAgLjUgICAgIC0+ICAxCittYXh4NDcxIG1heCAgMTAgICAgIDUgICAgICAtPiAgMTAKK21heHg0NzIgbWF4ICAxMDAgICAgNTAgICAgIC0+ICAxMDAKK21heHg0NzMgbWF4ICAxMDAwICAgNTAwICAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK21heHg0NzQgbWF4ICAxMDAwMCAgNTAwMCAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK21heHg0NzUgbWF4ICA2ICAgICAgLjUgICAgIC0+ICA2CittYXh4NDc2IG1heCAgNjYgICAgIDUgICAgICAtPiAgNjYKK21heHg0NzcgbWF4ICA2NjYgICAgNTAgICAgIC0+ICA2NjYKK21heHg0NzggbWF4ICA2NjY2ICAgNTAwICAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbWF4eDQ3OSBtYXggIDY2NjY2ICA1MDAwICAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0CittYXh4NDgwIG1heCAgMzMzMzMgIDUwMDAgICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKK21heHg0ODEgbWF4ICAuNSAgICAgMSAgICAgIC0+ICAxCittYXh4NDgyIG1heCAgLjUgICAgIDEwICAgICAtPiAgMTAKK21heHg0ODMgbWF4ICAuNSAgICAgMTAwICAgIC0+ICAxMDAKK21heHg0ODQgbWF4ICAuNSAgICAgMTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK21heHg0ODUgbWF4ICAuNSAgICAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK21heHg0ODYgbWF4ICAuNSAgICAgNiAgICAgIC0+ICA2CittYXh4NDg3IG1heCAgLjUgICAgIDY2ICAgICAtPiAgNjYKK21heHg0ODggbWF4ICAuNSAgICAgNjY2ICAgIC0+ICA2NjYKK21heHg0ODkgbWF4ICAuNSAgICAgNjY2NiAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbWF4eDQ5MCBtYXggIC41ICAgICA2NjY2NiAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0CittYXh4NDkxIG1heCAgLjUgICAgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKKworLS0gb3ZlcmZsb3cgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKK21heHg1MDAgbWF4IDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbWF4eDUwMSBtYXggLTkuOTk5RSs5OTk5OTk5OTkgMCAtPiAgMAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK21heHg1MTAgbWF4ICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAxLjAwRS05OTkKK21heHg1MTEgbWF4ICAwLjFFLTk5OSAgICAgICAgMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCittYXh4NTEyIG1heCAgMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorbWF4eDUxMyBtYXggIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorbWF4eDUxNCBtYXggIDAuMDFFLTk5OSAgICAgICAwICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCittYXh4NTE1IG1heCAgMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittYXh4NTE2IG1heCAgMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittYXh4NTE3IG1heCAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittYXh4NTE4IG1heCAgMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK21heHg1MTkgbWF4ICAwLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbWF4eDUyMCBtYXggIDAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK21heHg1MzAgbWF4IC0xLjAwRS05OTkgICAgICAgMCAgLT4gICAwCittYXh4NTMxIG1heCAtMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMAorbWF4eDUzMiBtYXggLTAuMTBFLTk5OSAgICAgICAwICAtPiAgIDAKK21heHg1MzMgbWF4IC0wLjEwMEUtOTk5ICAgICAgMCAgLT4gICAwCittYXh4NTM0IG1heCAtMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMAorbWF4eDUzNSBtYXggLTAuOTk5RS05OTkgICAgICAwICAtPiAgIDAKK21heHg1MzYgbWF4IC0wLjA5OUUtOTk5ICAgICAgMCAgLT4gICAwCittYXh4NTM3IG1heCAtMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMAorbWF4eDUzOCBtYXggLTAuMDAxRS05OTkgICAgICAwICAtPiAgIDAKK21heHg1MzkgbWF4IC0wLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwCittYXh4NTQwIG1heCAtMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMAorCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK3ByZWNpc2lvbjogOQorbWF4eDU1MSBtYXggICAgICAxLjAgICAgICAgMC4xICAtPiAxLjAKK21heHg1NTIgbWF4ICAgICAgMC4xICAgICAgIDEuMCAgLT4gMS4wCittYXh4NTUzIG1heCAgICAgMTAuMCAgICAgICAwLjEgIC0+IDEwLjAKK21heHg1NTQgbWF4ICAgICAgMC4xICAgICAgMTAuMCAgLT4gMTAuMAorbWF4eDU1NSBtYXggICAgICAxMDAgICAgICAgMS4wICAtPiAxMDAKK21heHg1NTYgbWF4ICAgICAgMS4wICAgICAgIDEwMCAgLT4gMTAwCittYXh4NTU3IG1heCAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwMDAKK21heHg1NTggbWF4ICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAwMAorbWF4eDU1OSBtYXggICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAwMAorbWF4eDU2MCBtYXggICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAwMAorbWF4eDY2MSBtYXggICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwMDAKK21heHg2NjIgbWF4ICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMDAwCittYXh4NjYzIG1heCAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwMDAKK21heHg2NjQgbWF4ICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAwMAorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUKK3ByZWNpc2lvbjogNQorbWF4eDY3MCBtYXggICAgICAxMSAtc05hTjEyMzQ1Njc4OTAxIC0+IC1OYU43ODkwMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworbWF4eDkwMCBtYXggMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDkwMSBtYXggICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tYXhtYWcuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWF4bWFnLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1ZTkxMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWF4bWFnLmRlY1Rlc3QKQEAgLTAsMCArMSw0MDQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbWF4bWFnLmRlY1Rlc3QgLS0gZGVjaW1hbCBtYXhpbXVtIGJ5IG1hZ25pdHVkZSAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBzYW5pdHkgY2hlY2tzCitteGd4MDAxIG1heG1hZyAgLTIgIC0yICAtPiAtMgorbXhneDAwMiBtYXhtYWcgIC0yICAtMSAgLT4gLTIKK214Z3gwMDMgbWF4bWFnICAtMiAgIDAgIC0+IC0yCitteGd4MDA0IG1heG1hZyAgLTIgICAxICAtPiAtMgorbXhneDAwNSBtYXhtYWcgIC0yICAgMiAgLT4gIDIKK214Z3gwMDYgbWF4bWFnICAtMSAgLTIgIC0+IC0yCitteGd4MDA3IG1heG1hZyAgLTEgIC0xICAtPiAtMQorbXhneDAwOCBtYXhtYWcgIC0xICAgMCAgLT4gLTEKK214Z3gwMDkgbWF4bWFnICAtMSAgIDEgIC0+ICAxCitteGd4MDEwIG1heG1hZyAgLTEgICAyICAtPiAgMgorbXhneDAxMSBtYXhtYWcgICAwICAtMiAgLT4gLTIKK214Z3gwMTIgbWF4bWFnICAgMCAgLTEgIC0+IC0xCitteGd4MDEzIG1heG1hZyAgIDAgICAwICAtPiAgMAorbXhneDAxNCBtYXhtYWcgICAwICAgMSAgLT4gIDEKK214Z3gwMTUgbWF4bWFnICAgMCAgIDIgIC0+ICAyCitteGd4MDE2IG1heG1hZyAgIDEgIC0yICAtPiAtMgorbXhneDAxNyBtYXhtYWcgICAxICAtMSAgLT4gIDEKK214Z3gwMTggbWF4bWFnICAgMSAgIDAgIC0+ICAxCitteGd4MDE5IG1heG1hZyAgIDEgICAxICAtPiAgMQorbXhneDAyMCBtYXhtYWcgICAxICAgMiAgLT4gIDIKK214Z3gwMjEgbWF4bWFnICAgMiAgLTIgIC0+ICAyCitteGd4MDIyIG1heG1hZyAgIDIgIC0xICAtPiAgMgorbXhneDAyMyBtYXhtYWcgICAyICAgMCAgLT4gIDIKK214Z3gwMjUgbWF4bWFnICAgMiAgIDEgIC0+ICAyCitteGd4MDI2IG1heG1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworbXhneDAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDAKK214Z3gwMzEgbWF4bWFnICAgMCAgICAtMCAgIC0+ICAwCitteGd4MDMyIG1heG1hZyAgIDAgICAgLTAuMCAtPiAgMAorbXhneDAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDAKK214Z3gwMzQgbWF4bWFnICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuCitteGd4MDM1IG1heG1hZyAgLTAgICAgLTAgICAtPiAtMAorbXhneDAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMAorbXhneDAzNyBtYXhtYWcgIC0wICAgICAwLjAgLT4gIDAuMAorbXhneDAzOCBtYXhtYWcgICAwLjAgICAwICAgLT4gIDAKK214Z3gwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjAKK214Z3gwNDAgbWF4bWFnICAgMC4wICAtMC4wIC0+ICAwLjAKK214Z3gwNDEgbWF4bWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK214Z3gwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwCitteGd4MDQzIG1heG1hZyAgLTAuMCAgLTAgICAtPiAtMC4wCitteGd4MDQ0IG1heG1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCitteGd4MDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wCisKK214Z3gwNTAgbWF4bWFnICAtMEUxICAgMEUxIC0+ICAwRSsxCitteGd4MDUxIG1heG1hZyAgLTBFMiAgIDBFMiAtPiAgMEUrMgorbXhneDA1MiBtYXhtYWcgIC0wRTIgICAwRTEgLT4gIDBFKzEKK214Z3gwNTMgbWF4bWFnICAtMEUxICAgMEUyIC0+ICAwRSsyCitteGd4MDU0IG1heG1hZyAgIDBFMSAgLTBFMSAtPiAgMEUrMQorbXhneDA1NSBtYXhtYWcgICAwRTIgIC0wRTIgLT4gIDBFKzIKK214Z3gwNTYgbWF4bWFnICAgMEUyICAtMEUxIC0+ICAwRSsyCitteGd4MDU3IG1heG1hZyAgIDBFMSAgLTBFMiAtPiAgMEUrMQorCitteGd4MDU4IG1heG1hZyAgIDBFMSAgIDBFMSAtPiAgMEUrMQorbXhneDA1OSBtYXhtYWcgICAwRTIgICAwRTIgLT4gIDBFKzIKK214Z3gwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyCitteGd4MDYxIG1heG1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMgorbXhneDA2MiBtYXhtYWcgIC0wRTEgIC0wRTEgLT4gLTBFKzEKK214Z3gwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyCitteGd4MDY0IG1heG1hZyAgLTBFMiAgLTBFMSAtPiAtMEUrMQorbXhneDA2NSBtYXhtYWcgIC0wRTEgIC0wRTIgLT4gLTBFKzEKKworLS0gU3BlY2lhbHMKK3ByZWNpc2lvbjogOQorbXhneDA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorbXhneDA5MSBtYXhtYWcgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorbXhneDA5MiBtYXhtYWcgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorbXhneDA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorbXhneDA5NCBtYXhtYWcgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorbXhneDA5NSBtYXhtYWcgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorbXhneDA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorbXhneDA5NyBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDA5OCBtYXhtYWcgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwMCBtYXhtYWcgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwMSBtYXhtYWcgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwMyBtYXhtYWcgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwNCBtYXhtYWcgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitteGd4MTIwIG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitteGd4MTIyIG1heG1hZyAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitteGd4MTIzIG1heG1hZyAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitteGd4MTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitteGd4MTI1IG1heG1hZyAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitteGd4MTI2IG1heG1hZyAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitteGd4MTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitteGd4MTI4IG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTI5IG1heG1hZyAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTMxIG1heG1hZyAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTMyIG1heG1hZyAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTM0IG1heG1hZyAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTM1IG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworbXhneDE0MSBtYXhtYWcgIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQorbXhneDE0MiBtYXhtYWcgIE5hTiAtMTAwMCAgIC0+IC0xMDAwCitteGd4MTQzIG1heG1hZyAgTmFOIC0xICAgICAgLT4gLTEKK214Z3gxNDQgbWF4bWFnICBOYU4gLTAgICAgICAtPiAtMAorbXhneDE0NSBtYXhtYWcgIE5hTiAgMCAgICAgIC0+ICAwCitteGd4MTQ2IG1heG1hZyAgTmFOICAxICAgICAgLT4gIDEKK214Z3gxNDcgbWF4bWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAorbXhneDE0OCBtYXhtYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorbXhneDE0OSBtYXhtYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4KK214Z3gxNTAgbWF4bWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK214Z3gxNTEgbWF4bWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorbXhneDE1MiBtYXhtYWcgLTEgICAgTmFOICAgIC0+IC0xCitteGd4MTUzIG1heG1hZyAtMCAgICBOYU4gICAgLT4gLTAKK214Z3gxNTQgbWF4bWFnICAwICAgIE5hTiAgICAtPiAgMAorbXhneDE1NSBtYXhtYWcgIDEgICAgTmFOICAgIC0+ICAxCitteGd4MTU2IG1heG1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK214Z3gxNTcgbWF4bWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworbXhneDE2MSBtYXhtYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjMgbWF4bWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2NCBtYXhtYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjYgbWF4bWFnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2NyBtYXhtYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjkgbWF4bWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3MCBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzIgbWF4bWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3MyBtYXhtYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzUgbWF4bWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3NiBtYXhtYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzggbWF4bWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3OSBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK214Z3gxODEgbWF4bWFnICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5CitteGd4MTgyIG1heG1hZyAgTmFOOCAgICAgOSAgIC0+ICA5CitteGd4MTgzIG1heG1hZyAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQorCitteGd4MTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCitteGd4MTg1IG1heG1hZyAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCitteGd4MTg2IG1heG1hZyAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMworbXhneDE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKKworbXhneDE4OCBtYXhtYWcgLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKK214Z3gxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkKK214Z3gxOTAgbWF4bWFnICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK214Z3gxOTEgbWF4bWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTIgbWF4bWFnICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTMgbWF4bWFnIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTQgbWF4bWFnICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTUgbWF4bWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTYgbWF4bWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTcgbWF4bWFnICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTggbWF4bWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxOTkgbWF4bWFnICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcm91bmRpbmcgY2hlY2tzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5CitteGd4MjAxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitteGd4MjAyIG1heG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitteGd4MjAzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK214Z3gyMDQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorbXhneDIwNSBtYXhtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitteGd4MjA2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK214Z3gyMDcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitteGd4MjA4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorbXhneDIwOSBtYXhtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitteGd4MjEwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitteGd4MjEyIG1heG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorbXhneDIxMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEuMjM0NTY3ODlFKzkgICBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xLjIzNDU2Nzg5RSs5ICAgSW5leGFjdCBSb3VuZGVkCitteGd4MjE1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMS4yMzQ1Njc4OUUrMTAgIEluZXhhY3QgUm91bmRlZAorbXhneDIxNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEuMjM0NTY3ODlFKzEwICBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xLjIzNDU2NzkwRSs5ICAgSW5leGFjdCBSb3VuZGVkCitteGd4MjE4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMS4yMzQ1Njc5MEUrOSAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDE1CitteGd4MjIxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMAorbXhneDIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK214Z3gyMjMgbWF4bWFnIDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKK214Z3gyMjQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK214Z3gyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKK214Z3gyMjYgbWF4bWFnIDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK214Z3gyMjcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTEKK214Z3gyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK214Z3gyMjkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCitteGd4MjMwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorbXhneDIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgorbXhneDIzMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorbXhneDIzMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEyMzQ1Njc4OTEKK214Z3gyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxCitteGd4MjM1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMTIzNDU2Nzg5MDEKK214Z3gyMzYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xMjM0NTY3ODkwMQorbXhneDIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYKK214Z3gyMzggbWF4bWFnIDEgLTEyMzQ1Njc4OTYgIC0+IC0xMjM0NTY3ODk2CisKKy0tIGZyb20gZXhhbXBsZXMKK214Z3gyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJworbXhneDI4MSBtYXhtYWcgJy0xMCcgJzMnICAtPiAgJy0xMCcKK214Z3gyODIgbWF4bWFnICcxLjAnICcxJyAgLT4gICcxJworbXhneDI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnCitteGd4Mjg0IG1heG1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLi4KK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitteGd4MzMwIG1heG1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQorbXhneDMzMSBtYXhtYWcgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICA5RSs5OTk5OTk5OTkKK214Z3gzMzIgbWF4bWFnICswLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgMC4xMDAKK214Z3gzMzMgbWF4bWFnIDlFLTk5OTk5OTk5OSArMC4xMDAgICAgICAgICAgICAgICAtPiAgMC4xMDAKK214Z3gzMzUgbWF4bWFnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiAgOUUrOTk5OTk5OTk5CitteGd4MzM2IG1heG1hZyA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDlFKzk5OTk5OTk5OQorbXhneDMzNyBtYXhtYWcgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAtMC4xMDAKK214Z3gzMzggbWF4bWFnIDlFLTk5OTk5OTk5OSAtMC4xMDAgICAgICAgICAgICAgICAtPiAgLTAuMTAwCisKK214Z3gzMzkgbWF4bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAtPiAgMUUtNDAwMDAwMDAxCitteGd4MzQwIG1heG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwICAgLT4gIDFFLTQwMDAwMDAwMAorbXhneDM0MSBtYXhtYWcgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMCAgIC0+ICAxRS00MDAwMDAwMDAKK214Z3gzNDIgbWF4bWFnIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAtPiAgMC4wMQorbXhneDM0MyBtYXhtYWcgOWUtOTk5OTk5OTk4IDAuMSAgICAgICAgICAgIC0+ICAwLjEKK214Z3gzNDQgbWF4bWFnIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAtPiAgMC4wMQorbXhneDM0NSBtYXhtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDEgICAgIC0+ICAxRSs1OTk5OTk5OTkKK214Z3gzNDYgbWF4bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwICAgICAtPiAgMUUrNTk5OTk5OTk5CitteGd4MzQ3IG1heG1hZyAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgLT4gIDFFKzYwMDAwMDAwMAorbXhneDM0OCBtYXhtYWcgOWU5OTk5OTk5OTggMTAwICAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgKK214Z3gzNDkgbWF4bWFnIDllOTk5OTk5OTk4IDEwICAgICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4CitteGd4MzUwIG1heG1hZyAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OAorLS0gc2lnbnMKK214Z3gzNTEgbWF4bWFnICAxZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAgMUUrNzc3Nzc3Nzc3CitteGd4MzUyIG1heG1hZyAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gIDFFKzc3Nzc3Nzc3NworbXhneDM1MyBtYXhtYWcgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+IC0xRSs3Nzc3Nzc3NzcKK214Z3gzNTQgbWF4bWFnIC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtMUUrNzc3Nzc3Nzc3CitteGd4MzU1IG1heG1hZyAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gIDFFLTQxMTExMTExMQorbXhneDM1NiBtYXhtYWcgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS00MTExMTExMTEKK214Z3gzNTcgbWF4bWFnIC0xZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAgMUUtNDExMTExMTExCitteGd4MzU4IG1heG1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gLTFFLTQxMTExMTExMQorCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK214Z3g0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK214Z3g0MDIgbWF4bWFnICAxLjEgICAgMSAgICAgICAtPiAgMS4xCitteGd4NDAzIG1heG1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEKK214Z3g0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitteGd4NDA1IG1heG1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQorbXhneDQwNiBtYXhtYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwCitteGd4NDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK214Z3g0MDggbWF4bWFnICAwICAgICAgMC4wICAgICAtPiAgMAorbXhneDQwOSBtYXhtYWcgIDAuMCAgIC0wICAgICAgIC0+ICAwLjAKK214Z3g0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitteGd4NDExIG1heG1hZyAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDAKK214Z3g0MTIgbWF4bWFnICAwLjAgICAtMC4wMCAgICAtPiAgMC4wCitteGd4NDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDAKK214Z3g0MTQgbWF4bWFnICAwICAgICAtMCAgICAgICAtPiAgMAorbXhneDQxNSBtYXhtYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wLjAKK214Z3g0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKK214Z3g0MTcgbWF4bWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK214Z3g0MTggbWF4bWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xMAorbXhneDQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK214Z3g0MjAgbWF4bWFnIC0xLjAgICAtMSAgICAgICAtPiAtMS4wCitteGd4NDIxIG1heG1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQorbXhneDQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitteGd4NDMxIG1heG1hZyAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5CitteGd4NDMyIG1heG1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQorbXhneDQzMyBtYXhtYWcgIDEuMCAgICAxICAgICAgIC0+ICAxCitteGd4NDM0IG1heG1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAorbXhneDQzNSBtYXhtYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKK214Z3g0MzYgbWF4bWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMAorbXhneDQzNyBtYXhtYWcgIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCitteGd4NDM4IG1heG1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAKK214Z3g0MzkgbWF4bWFnIC0wICAgICAgMC4wICAgICAtPiAgMC4wCitteGd4NDQwIG1heG1hZyAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAorbXhneDQ0MSBtYXhtYWcgLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCitteGd4NDQyIG1heG1hZyAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMAorbXhneDQ0MyBtYXhtYWcgLTAuMCAgICAwICAgICAgIC0+ICAwCitteGd4NDQ0IG1heG1hZyAtMCAgICAgIDAgICAgICAgLT4gIDAKK214Z3g0NDUgbWF4bWFnIC0wICAgICAtMC4wICAgICAtPiAtMC4wCitteGd4NDQ2IG1heG1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwCitteGd4NDQ3IG1heG1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwCitteGd4NDQ4IG1heG1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK214Z3g0NDkgbWF4bWFnIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCitteGd4NDUwIG1heG1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEuMAorbXhneDQ1MSBtYXhtYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK214Z3g0NTMgbWF4bWFnIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkKKy0tIGxhcmdpZXMKK214Z3g0NjAgbWF4bWFnICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMworbXhneDQ2MSBtYXhtYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCitteGd4NDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK214Z3g0NjMgbWF4bWFnICAxRSszICAtMTAwMCAgICAtPiAgMUUrMworbXhneDQ2NCBtYXhtYWcgLTEwMDAgICAxRSszICAgIC0+ICAxRSszCitteGd4NDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK214Z3g0NjYgbWF4bWFnIC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMAorbXhneDQ2NyBtYXhtYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCisKKy0tIHJvdW5kaW5nIChyZXN1bHRzIHRyZWF0ZWQgYXMgdGhvdWdoIHBsdXMpCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCisKK214Z3g0NzAgbWF4bWFnICAxICAgICAgLjUgICAgIC0+ICAxCitteGd4NDcxIG1heG1hZyAgMTAgICAgIDUgICAgICAtPiAgMTAKK214Z3g0NzIgbWF4bWFnICAxMDAgICAgNTAgICAgIC0+ICAxMDAKK214Z3g0NzMgbWF4bWFnICAxMDAwICAgNTAwICAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK214Z3g0NzQgbWF4bWFnICAxMDAwMCAgNTAwMCAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK214Z3g0NzUgbWF4bWFnICA2ICAgICAgLjUgICAgIC0+ICA2CitteGd4NDc2IG1heG1hZyAgNjYgICAgIDUgICAgICAtPiAgNjYKK214Z3g0NzcgbWF4bWFnICA2NjYgICAgNTAgICAgIC0+ICA2NjYKK214Z3g0NzggbWF4bWFnICA2NjY2ICAgNTAwICAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbXhneDQ3OSBtYXhtYWcgIDY2NjY2ICA1MDAwICAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0CitteGd4NDgwIG1heG1hZyAgMzMzMzMgIDUwMDAgICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKK214Z3g0ODEgbWF4bWFnICAuNSAgICAgMSAgICAgIC0+ICAxCitteGd4NDgyIG1heG1hZyAgLjUgICAgIDEwICAgICAtPiAgMTAKK214Z3g0ODMgbWF4bWFnICAuNSAgICAgMTAwICAgIC0+ICAxMDAKK214Z3g0ODQgbWF4bWFnICAuNSAgICAgMTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK214Z3g0ODUgbWF4bWFnICAuNSAgICAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK214Z3g0ODYgbWF4bWFnICAuNSAgICAgNiAgICAgIC0+ICA2CitteGd4NDg3IG1heG1hZyAgLjUgICAgIDY2ICAgICAtPiAgNjYKK214Z3g0ODggbWF4bWFnICAuNSAgICAgNjY2ICAgIC0+ICA2NjYKK214Z3g0ODkgbWF4bWFnICAuNSAgICAgNjY2NiAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbXhneDQ5MCBtYXhtYWcgIC41ICAgICA2NjY2NiAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0CitteGd4NDkxIG1heG1hZyAgLjUgICAgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKKworLS0gb3ZlcmZsb3cgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKK214Z3g1MDAgbWF4bWFnIDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbXhneDUwMSBtYXhtYWcgLTkuOTk5RSs5OTk5OTk5OTkgMCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorbXhneDUxMCBtYXhtYWcgIDEuMDBFLTk5OSAgICAgICAwICAtPiAgIDEuMDBFLTk5OQorbXhneDUxMSBtYXhtYWcgIDAuMUUtOTk5ICAgICAgICAwICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwKK214Z3g1MTIgbWF4bWFnICAwLjEwRS05OTkgICAgICAgMCAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsCitteGd4NTEzIG1heG1hZyAgMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitteGd4NTE0IG1heG1hZyAgMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIE5taW4KK214Z3g1MTUgbWF4bWFnICAwLjk5OUUtOTk5ICAgICAgMCAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK214Z3g1MTYgbWF4bWFnICAwLjA5OUUtOTk5ICAgICAgMCAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK214Z3g1MTcgbWF4bWFnICAwLjAwOUUtOTk5ICAgICAgMCAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK214Z3g1MTggbWF4bWFnICAwLjAwMUUtOTk5ICAgICAgMCAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbXhneDUxOSBtYXhtYWcgIDAuMDAwOUUtOTk5ICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitteGd4NTIwIG1heG1hZyAgMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworbXhneDUzMCBtYXhtYWcgLTEuMDBFLTk5OSAgICAgICAwICAtPiAgLTEuMDBFLTk5OQorbXhneDUzMSBtYXhtYWcgLTAuMUUtOTk5ICAgICAgICAwICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwKK214Z3g1MzIgbWF4bWFnIC0wLjEwRS05OTkgICAgICAgMCAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsCitteGd4NTMzIG1heG1hZyAtMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitteGd4NTM0IG1heG1hZyAtMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIC1ObWluCitteGd4NTM1IG1heG1hZyAtMC45OTlFLTk5OSAgICAgIDAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTM2IG1heG1hZyAtMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTM3IG1heG1hZyAtMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTM4IG1heG1hZyAtMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK214Z3g1MzkgbWF4bWFnIC0wLjAwMDlFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbXhneDU0MCBtYXhtYWcgLTAuMDAwMUUtOTk5ICAgICAwICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIE51bGwgdGVzdHMKK214Z3g5MDAgbWF4bWFnIDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK214Z3g5MDEgbWF4bWFnICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWluLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbi5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZjc1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbi5kZWNUZXN0CkBAIC0wLDAgKzEsNDA3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG1pbi5kZWNUZXN0IC0tIGRlY2ltYWwgbWluaW11bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworbW5teDAwMSBtaW4gIC0yICAtMiAgLT4gLTIKK21ubXgwMDIgbWluICAtMiAgLTEgIC0+IC0yCittbm14MDAzIG1pbiAgLTIgICAwICAtPiAtMgorbW5teDAwNCBtaW4gIC0yICAgMSAgLT4gLTIKK21ubXgwMDUgbWluICAtMiAgIDIgIC0+IC0yCittbm14MDA2IG1pbiAgLTEgIC0yICAtPiAtMgorbW5teDAwNyBtaW4gIC0xICAtMSAgLT4gLTEKK21ubXgwMDggbWluICAtMSAgIDAgIC0+IC0xCittbm14MDA5IG1pbiAgLTEgICAxICAtPiAtMQorbW5teDAxMCBtaW4gIC0xICAgMiAgLT4gLTEKK21ubXgwMTEgbWluICAgMCAgLTIgIC0+IC0yCittbm14MDEyIG1pbiAgIDAgIC0xICAtPiAtMQorbW5teDAxMyBtaW4gICAwICAgMCAgLT4gIDAKK21ubXgwMTQgbWluICAgMCAgIDEgIC0+ICAwCittbm14MDE1IG1pbiAgIDAgICAyICAtPiAgMAorbW5teDAxNiBtaW4gICAxICAtMiAgLT4gLTIKK21ubXgwMTcgbWluICAgMSAgLTEgIC0+IC0xCittbm14MDE4IG1pbiAgIDEgICAwICAtPiAgMAorbW5teDAxOSBtaW4gICAxICAgMSAgLT4gIDEKK21ubXgwMjAgbWluICAgMSAgIDIgIC0+ICAxCittbm14MDIxIG1pbiAgIDIgIC0yICAtPiAtMgorbW5teDAyMiBtaW4gICAyICAtMSAgLT4gLTEKK21ubXgwMjMgbWluICAgMiAgIDAgIC0+ICAwCittbm14MDI1IG1pbiAgIDIgICAxICAtPiAgMQorbW5teDAyNiBtaW4gICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK21ubXgwMzAgbWluICAgMCAgICAgMCAgIC0+ICAwCittbm14MDMxIG1pbiAgIDAgICAgLTAgICAtPiAtMAorbW5teDAzMiBtaW4gICAwICAgIC0wLjAgLT4gLTAuMAorbW5teDAzMyBtaW4gICAwICAgICAwLjAgLT4gIDAuMAorbW5teDAzNCBtaW4gIC0wICAgICAwICAgLT4gLTAKK21ubXgwMzUgbWluICAtMCAgICAtMCAgIC0+IC0wCittbm14MDM2IG1pbiAgLTAgICAgLTAuMCAtPiAtMAorbW5teDAzNyBtaW4gIC0wICAgICAwLjAgLT4gLTAKK21ubXgwMzggbWluICAgMC4wICAgMCAgIC0+ICAwLjAKK21ubXgwMzkgbWluICAgMC4wICAtMCAgIC0+IC0wCittbm14MDQwIG1pbiAgIDAuMCAgLTAuMCAtPiAtMC4wCittbm14MDQxIG1pbiAgIDAuMCAgIDAuMCAtPiAgMC4wCittbm14MDQyIG1pbiAgLTAuMCAgIDAgICAtPiAtMC4wCittbm14MDQzIG1pbiAgLTAuMCAgLTAgICAtPiAtMAorbW5teDA0NCBtaW4gIC0wLjAgIC0wLjAgLT4gLTAuMAorbW5teDA0NSBtaW4gIC0wLjAgICAwLjAgLT4gLTAuMAorCittbm14MDQ2IG1pbiAgIDBFMSAgLTBFMSAtPiAtMEUrMQorbW5teDA0NyBtaW4gIC0wRTEgICAwRTIgLT4gLTBFKzEKK21ubXgwNDggbWluICAgMEUyICAgMEUxIC0+ICAwRSsxCittbm14MDQ5IG1pbiAgIDBFMSAgIDBFMiAtPiAgMEUrMQorbW5teDA1MCBtaW4gIC0wRTMgIC0wRTIgLT4gLTBFKzMKK21ubXgwNTEgbWluICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246IDkKK21ubXgwOTAgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK21ubXgwOTEgbWluICBJbmYgIC0xMDAwICAtPiAtMTAwMAorbW5teDA5MiBtaW4gIEluZiAgLTEgICAgIC0+IC0xCittbm14MDkzIG1pbiAgSW5mICAtMCAgICAgLT4gLTAKK21ubXgwOTQgbWluICBJbmYgICAwICAgICAtPiAgMAorbW5teDA5NSBtaW4gIEluZiAgIDEgICAgIC0+ICAxCittbm14MDk2IG1pbiAgSW5mICAgMTAwMCAgLT4gIDEwMDAKK21ubXgwOTcgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK21ubXgwOTggbWluIC0xMDAwICBJbmYgICAtPiAtMTAwMAorbW5teDA5OSBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorbW5teDEwMCBtaW4gLTEgICAgIEluZiAgIC0+IC0xCittbm14MTAxIG1pbiAtMCAgICAgSW5mICAgLT4gLTAKK21ubXgxMDIgbWluICAwICAgICBJbmYgICAtPiAgMAorbW5teDEwMyBtaW4gIDEgICAgIEluZiAgIC0+ICAxCittbm14MTA0IG1pbiAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK21ubXgxMDUgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworbW5teDEyMCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5teDEyMSBtaW4gLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorbW5teDEyMiBtaW4gLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorbW5teDEyMyBtaW4gLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorbW5teDEyNCBtaW4gLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorbW5teDEyNSBtaW4gLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorbW5teDEyNiBtaW4gLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorbW5teDEyNyBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorbW5teDEyOCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5teDEyOSBtaW4gLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5teDEzMCBtaW4gLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5teDEzMSBtaW4gLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5teDEzMiBtaW4gIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5teDEzMyBtaW4gIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5teDEzNCBtaW4gIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5teDEzNSBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK21ubXgxNDEgbWluICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5Cittbm14MTQyIG1pbiAgTmFOIC0xMDAwICAgLT4gIC0xMDAwCittbm14MTQzIG1pbiAgTmFOIC0xICAgICAgLT4gIC0xCittbm14MTQ0IG1pbiAgTmFOIC0wICAgICAgLT4gIC0wCittbm14MTQ1IG1pbiAgTmFOICAwICAgICAgLT4gIDAKK21ubXgxNDYgbWluICBOYU4gIDEgICAgICAtPiAgMQorbW5teDE0NyBtaW4gIE5hTiAgMTAwMCAgIC0+ICAxMDAwCittbm14MTQ4IG1pbiAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5Cittbm14MTQ5IG1pbiAgTmFOICBOYU4gICAgLT4gIE5hTgorbW5teDE1MCBtaW4gLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorbW5teDE1MSBtaW4gLTEwMDAgTmFOICAgIC0+IC0xMDAwCittbm14MTUyIG1pbiAtMSAgIC1OYU4gICAgLT4gLTEKK21ubXgxNTMgbWluIC0wICAgIE5hTiAgICAtPiAtMAorbW5teDE1NCBtaW4gIDAgICAtTmFOICAgIC0+ICAwCittbm14MTU1IG1pbiAgMSAgICBOYU4gICAgLT4gIDEKK21ubXgxNTYgbWluICAxMDAwIE5hTiAgICAtPiAgMTAwMAorbW5teDE1NyBtaW4gIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCittbm14MTYxIG1pbiAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNjIgbWluICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE2MyBtaW4gIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTY0IG1pbiAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNjUgbWluIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE2NiBtaW4gLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTY3IG1pbiAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNjggbWluICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE2OSBtaW4gIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTcwIG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNzEgbWluIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE3MiBtaW4gLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTczIG1pbiAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNzQgbWluIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE3NSBtaW4gIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTc2IG1pbiAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNzcgbWluICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE3OCBtaW4gIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTc5IG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworbW5teDE4MSBtaW4gIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5Cittbm14MTgyIG1pbiAtTmFOOCAgICA5OTkwICAtPiAgOTk5MAorbW5teDE4MyBtaW4gIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK21ubXgxODQgbWluICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xCittbm14MTg1IG1pbiAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjIKK21ubXgxODYgbWluIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCittbm14MTg3IG1pbiAtTmFONDQgICBOYU43ICAtPiAtTmFONDQKKworbW5teDE4OCBtaW4gLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5Cittbm14MTg5IG1pbiAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorbW5teDE5MCBtaW4gIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK21ubXgxOTEgbWluICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxOTIgbWluICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK21ubXgxOTMgbWluIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxOTQgbWluICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxOTUgbWluICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxOTYgbWluIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxOTcgbWluICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxOTggbWluICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxOTkgbWluICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcm91bmRpbmcgY2hlY2tzIC0tIGNob3NlbiBpcyByb3VuZGVkLCBvciBub3QKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK21ubXgyMDEgbWluIC0xMjM0NTY3ODAwMCAxICAtPiAtMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorbW5teDIwMiBtaW4gMSAtMTIzNDU2NzgwMDAgIC0+IC0xLjIzNDU2NzgwRSsxMCBSb3VuZGVkCittbm14MjAzIG1pbiAtMTIzNDU2NzgwMCAgMSAgLT4gLTEuMjM0NTY3ODBFKzkgUm91bmRlZAorbW5teDIwNCBtaW4gMSAtMTIzNDU2NzgwMCAgIC0+IC0xLjIzNDU2NzgwRSs5IFJvdW5kZWQKK21ubXgyMDUgbWluIC0xMjM0NTY3ODkwICAxICAtPiAtMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCittbm14MjA2IG1pbiAxIC0xMjM0NTY3ODkwICAgLT4gLTEuMjM0NTY3ODlFKzkgUm91bmRlZAorbW5teDIwNyBtaW4gLTEyMzQ1Njc4OTEgIDEgIC0+IC0xLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorbW5teDIwOCBtaW4gMSAtMTIzNDU2Nzg5MSAgIC0+IC0xLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorbW5teDIwOSBtaW4gLTEyMzQ1Njc4OTAxIDEgIC0+IC0xLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK21ubXgyMTAgbWluIDEgLTEyMzQ1Njc4OTAxICAtPiAtMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCittbm14MjExIG1pbiAtMTIzNDU2Nzg5NiAgMSAgLT4gLTEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCittbm14MjEyIG1pbiAxIC0xMjM0NTY3ODk2ICAgLT4gLTEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCittbm14MjEzIG1pbiAxMjM0NTY3ODkxICAxICAgLT4gMQorbW5teDIxNCBtaW4gMSAxMjM0NTY3ODkxICAgIC0+IDEKK21ubXgyMTUgbWluIDEyMzQ1Njc4OTAxIDEgICAtPiAxCittbm14MjE2IG1pbiAxIDEyMzQ1Njc4OTAxICAgLT4gMQorbW5teDIxNyBtaW4gMTIzNDU2Nzg5NiAgMSAgIC0+IDEKK21ubXgyMTggbWluIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKK3ByZWNpc2lvbjogMTUKK21ubXgyMjEgbWluIC0xMjM0NTY3ODAwMCAxICAtPiAtMTIzNDU2NzgwMDAKK21ubXgyMjIgbWluIDEgLTEyMzQ1Njc4MDAwICAtPiAtMTIzNDU2NzgwMDAKK21ubXgyMjMgbWluIC0xMjM0NTY3ODAwICAxICAtPiAtMTIzNDU2NzgwMAorbW5teDIyNCBtaW4gMSAtMTIzNDU2NzgwMCAgIC0+IC0xMjM0NTY3ODAwCittbm14MjI1IG1pbiAtMTIzNDU2Nzg5MCAgMSAgLT4gLTEyMzQ1Njc4OTAKK21ubXgyMjYgbWluIDEgLTEyMzQ1Njc4OTAgICAtPiAtMTIzNDU2Nzg5MAorbW5teDIyNyBtaW4gLTEyMzQ1Njc4OTEgIDEgIC0+IC0xMjM0NTY3ODkxCittbm14MjI4IG1pbiAxIC0xMjM0NTY3ODkxICAgLT4gLTEyMzQ1Njc4OTEKK21ubXgyMjkgbWluIC0xMjM0NTY3ODkwMSAxICAtPiAtMTIzNDU2Nzg5MDEKK21ubXgyMzAgbWluIDEgLTEyMzQ1Njc4OTAxICAtPiAtMTIzNDU2Nzg5MDEKK21ubXgyMzEgbWluIC0xMjM0NTY3ODk2ICAxICAtPiAtMTIzNDU2Nzg5NgorbW5teDIzMiBtaW4gMSAtMTIzNDU2Nzg5NiAgIC0+IC0xMjM0NTY3ODk2Cittbm14MjMzIG1pbiAxMjM0NTY3ODkxICAxICAgLT4gMQorbW5teDIzNCBtaW4gMSAxMjM0NTY3ODkxICAgIC0+IDEKK21ubXgyMzUgbWluIDEyMzQ1Njc4OTAxIDEgICAtPiAxCittbm14MjM2IG1pbiAxIDEyMzQ1Njc4OTAxICAgLT4gMQorbW5teDIzNyBtaW4gMTIzNDU2Nzg5NiAgMSAgIC0+IDEKK21ubXgyMzggbWluIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK21ubXgyODAgbWluICczJyAgICcyJyAgLT4gICcyJworbW5teDI4MSBtaW4gJy0xMCcgJzMnICAtPiAgJy0xMCcKK21ubXgyODIgbWluICcxLjAnICcxJyAgLT4gICcxLjAnCittbm14MjgzIG1pbiAnMScgJzEuMCcgIC0+ICAnMS4wJworbW5teDI4NCBtaW4gJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gc3Vibm9ybWFsIHJlc3VsdHMgW2lucHV0c10gbm93IGFsbG93ZWQKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Cittbm14MzMwIG1pbiAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtOUUrOTk5OTk5OTk5IC0+IC05RSs5OTk5OTk5OTkKK21ubXgzMzEgbWluIC05RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gLTlFKzk5OTk5OTk5OQorbW5teDMzMiBtaW4gLTAuMTAwIC05RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAtMC4xMDAKK21ubXgzMzMgbWluIC05RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gLTAuMTAwCittbm14MzM1IG1pbiArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtOUUrOTk5OTk5OTk5IC0+IC05RSs5OTk5OTk5OTkKK21ubXgzMzYgbWluIC05RSs5OTk5OTk5OTkgMS4yMzQ1Njc4OTAxMjM0NUUtMCAgLT4gLTlFKzk5OTk5OTk5OQorbW5teDMzNyBtaW4gKzAuMTAwIC05RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5Cittbm14MzM4IG1pbiAtOUUtOTk5OTk5OTk5IDAuMTAwICAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkKKworbW5teDMzOSBtaW4gLTFlLTU5OTk5OTk5OSAtMWUtNDAwMDAwMDAxICAgLT4gIC0xRS00MDAwMDAwMDEKK21ubXgzNDAgbWluIC0xZS01OTk5OTk5OTkgLTFlLTQwMDAwMDAwMCAgIC0+ICAtMUUtNDAwMDAwMDAwCittbm14MzQxIG1pbiAtMWUtNjAwMDAwMDAwIC0xZS00MDAwMDAwMDAgICAtPiAgLTFFLTQwMDAwMDAwMAorbW5teDM0MiBtaW4gLTllLTk5OTk5OTk5OCAtMC4wMSAgICAgICAgICAgLT4gIC0wLjAxCittbm14MzQzIG1pbiAtOWUtOTk5OTk5OTk4IC0wLjEgICAgICAgICAgICAtPiAgLTAuMQorbW5teDM0NCBtaW4gLTAuMDEgICAgICAgICAtOWUtOTk5OTk5OTk4ICAgLT4gIC0wLjAxCittbm14MzQ1IG1pbiAtMWU1OTk5OTk5OTkgIC0xZTQwMDAwMDAwMSAgICAtPiAgLTFFKzU5OTk5OTk5OQorbW5teDM0NiBtaW4gLTFlNTk5OTk5OTk5ICAtMWU0MDAwMDAwMDAgICAgLT4gIC0xRSs1OTk5OTk5OTkKK21ubXgzNDcgbWluIC0xZTYwMDAwMDAwMCAgLTFlNDAwMDAwMDAwICAgIC0+ICAtMUUrNjAwMDAwMDAwCittbm14MzQ4IG1pbiAtOWU5OTk5OTk5OTggIC0xMDAgICAgICAgICAgICAtPiAgLTlFKzk5OTk5OTk5OAorbW5teDM0OSBtaW4gLTllOTk5OTk5OTk4ICAtMTAgICAgICAgICAgICAgLT4gIC05RSs5OTk5OTk5OTgKK21ubXgzNTAgbWluIC0xMDAgICAgICAgICAgLTllOTk5OTk5OTk4ICAgIC0+ICAtOUUrOTk5OTk5OTk4CistLSBzaWducworbW5teDM1MSBtaW4gLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs3Nzc3Nzc3NzcKK21ubXgzNTIgbWluIC0xZSs3Nzc3Nzc3NzcgKzFlKzQxMTExMTExMSAtPiAtMUUrNzc3Nzc3Nzc3Cittbm14MzUzIG1pbiArMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzQxMTExMTExMQorbW5teDM1NCBtaW4gKzFlKzc3Nzc3Nzc3NyArMWUrNDExMTExMTExIC0+ICAxRSs0MTExMTExMTEKK21ubXgzNTUgbWluIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNDExMTExMTExCittbm14MzU2IG1pbiAtMWUtNzc3Nzc3Nzc3ICsxZS00MTExMTExMTEgLT4gLTFFLTc3Nzc3Nzc3NworbW5teDM1NyBtaW4gKzFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS00MTExMTExMTEKK21ubXgzNTggbWluICsxZS03Nzc3Nzc3NzcgKzFlLTQxMTExMTExMSAtPiAgMUUtNzc3Nzc3Nzc3CisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorbW5teDQwMSBtaW4gIEluZiAgICAxLjEgICAgIC0+ICAxLjEKK21ubXg0MDIgbWluICAxLjEgICAgMSAgICAgICAtPiAgMQorbW5teDQwMyBtaW4gIDEgICAgICAxLjAgICAgIC0+ICAxLjAKK21ubXg0MDQgbWluICAxLjAgICAgMC4xICAgICAtPiAgMC4xCittbm14NDA1IG1pbiAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTAKK21ubXg0MDYgbWluICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDAKK21ubXg0MDcgbWluICAwLjEwICAgMCAgICAgICAtPiAgMAorbW5teDQwOCBtaW4gIDAgICAgICAwLjAgICAgIC0+ICAwLjAKK21ubXg0MDkgbWluICAwLjAgICAtMCAgICAgICAtPiAtMAorbW5teDQxMCBtaW4gIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKK21ubXg0MTEgbWluICAwLjAwICAtMC4wICAgICAtPiAtMC4wCittbm14NDEyIG1pbiAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDAKK21ubXg0MTMgbWluICAwICAgICAtMC4wICAgICAtPiAtMC4wCittbm14NDE0IG1pbiAgMCAgICAgLTAgICAgICAgLT4gLTAKK21ubXg0MTUgbWluIC0wLjAgICAtMCAgICAgICAtPiAtMAorbW5teDQxNiBtaW4gLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAorbW5teDQxNyBtaW4gLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwCittbm14NDE4IG1pbiAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQorbW5teDQxOSBtaW4gLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK21ubXg0MjAgbWluIC0xLjAgICAtMSAgICAgICAtPiAtMQorbW5teDQyMSBtaW4gLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKK21ubXg0MjMgbWluIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorbW5teDQzMSBtaW4gIDEuMSAgICBJbmYgICAgIC0+ICAxLjEKK21ubXg0MzIgbWluICAxICAgICAgMS4xICAgICAtPiAgMQorbW5teDQzMyBtaW4gIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK21ubXg0MzQgbWluICAwLjEgICAgMS4wICAgICAtPiAgMC4xCittbm14NDM1IG1pbiAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKK21ubXg0MzYgbWluICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK21ubXg0MzcgbWluICAwICAgICAgMC4xMCAgICAtPiAgMAorbW5teDQzOCBtaW4gIDAuMCAgICAwICAgICAgIC0+ICAwLjAKK21ubXg0MzkgbWluIC0wICAgICAgMC4wICAgICAtPiAtMAorbW5teDQ0MCBtaW4gLTAuMCAgICAwLjAgICAgIC0+IC0wLjAKK21ubXg0NDEgbWluIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCittbm14NDQyIG1pbiAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK21ubXg0NDMgbWluIC0wLjAgICAgMCAgICAgICAtPiAtMC4wCittbm14NDQ0IG1pbiAtMCAgICAgIDAgICAgICAgLT4gLTAKK21ubXg0NDUgbWluIC0wICAgICAtMC4wICAgICAtPiAtMAorbW5teDQ0NiBtaW4gLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAorbW5teDQ0NyBtaW4gLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwCittbm14NDQ4IG1pbiAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQorbW5teDQ0OSBtaW4gLTEuMCAgIC0wLjEgICAgIC0+IC0xLjAKK21ubXg0NTAgbWluIC0xICAgICAtMS4wICAgICAtPiAtMQorbW5teDQ1MSBtaW4gLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK21ubXg0NTMgbWluIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkKKy0tIGxhcmdpZXMKK21ubXg0NjAgbWluICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAorbW5teDQ2MSBtaW4gIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCittbm14NDYyIG1pbiAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK21ubXg0NjMgbWluICAxRSszICAtMTAwMCAgICAtPiAtMTAwMAorbW5teDQ2NCBtaW4gLTEwMDAgICAxRSszICAgIC0+IC0xMDAwCittbm14NDY1IG1pbiAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKK21ubXg0NjYgbWluIC0xMDAwICAtMUUrMyAgICAtPiAtMUUrMworbW5teDQ2NyBtaW4gLTFFKzMgIC0xMDAwICAgIC0+IC0xRSszCisKKy0tIHJvdW5kaW5nIChyZXN1bHRzIHRyZWF0ZWQgYXMgdGhvdWdoIHBsdXMpCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCisKK21ubXg0NzAgbWluICAxICAgICAgNSAgICAgIC0+ICAxCittbm14NDcxIG1pbiAgMTAgICAgIDUwICAgICAtPiAgMTAKK21ubXg0NzIgbWluICAxMDAgICAgNTAwICAgIC0+ICAxMDAKK21ubXg0NzMgbWluICAxMDAwICAgNTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK21ubXg0NzQgbWluICAxMDAwMCAgNTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK21ubXg0NzUgbWluICA2ICAgICAgNTAgICAgIC0+ICA2Cittbm14NDc2IG1pbiAgNjYgICAgIDUwMCAgICAtPiAgNjYKK21ubXg0NzcgbWluICA2NjYgICAgNTAwMCAgIC0+ICA2NjYKK21ubXg0NzggbWluICA2NjY2ICAgNTAwMDAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbW5teDQ3OSBtaW4gIDY2NjY2ICA1MDAwMDAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0Cittbm14NDgwIG1pbiAgMzMzMzMgIDUwMDAwMCAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKK21ubXg0ODEgbWluICA3NTQwMSAgMSAgICAgIC0+ICAxCittbm14NDgyIG1pbiAgNzU0MDIgIDEwICAgICAtPiAgMTAKK21ubXg0ODMgbWluICA3NTQwMyAgMTAwICAgIC0+ICAxMDAKK21ubXg0ODQgbWluICA3NTQwNCAgMTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQKK21ubXg0ODUgbWluICA3NTQwNSAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKK21ubXg0ODYgbWluICA3NTQwNiAgNiAgICAgIC0+ICA2Cittbm14NDg3IG1pbiAgNzU0MDcgIDY2ICAgICAtPiAgNjYKK21ubXg0ODggbWluICA3NTQwOCAgNjY2ICAgIC0+ICA2NjYKK21ubXg0ODkgbWluICA3NTQwOSAgNjY2NiAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAorbW5teDQ5MCBtaW4gIDc1NDEwICA2NjY2NiAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0Cittbm14NDkxIG1pbiAgNzU0MTEgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKKworCistLSBvdmVyZmxvdyB0ZXN0cworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworbW5teDUwMCBtaW4gOS45OTlFKzk5OTk5OTk5OSAgMCAtPiAgMAorbW5teDUwMSBtaW4gLTkuOTk5RSs5OTk5OTk5OTkgMCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorbW5teDUxMCBtaW4gIDEuMDBFLTk5OSAgICAgICAwICAtPiAgIDAKK21ubXg1MTEgbWluICAwLjFFLTk5OSAgICAgICAgMCAgLT4gICAwCittbm14NTEyIG1pbiAgMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5teDUxMyBtaW4gIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDAKK21ubXg1MTQgbWluICAwLjAxRS05OTkgICAgICAgMCAgLT4gICAwCittbm14NTE1IG1pbiAgMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5teDUxNiBtaW4gIDAuMDk5RS05OTkgICAgICAwICAtPiAgIDAKK21ubXg1MTcgbWluICAwLjAwOUUtOTk5ICAgICAgMCAgLT4gICAwCittbm14NTE4IG1pbiAgMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5teDUxOSBtaW4gIDAuMDAwOUUtOTk5ICAgICAwICAtPiAgIDAKK21ubXg1MjAgbWluICAwLjAwMDFFLTk5OSAgICAgMCAgLT4gICAwCisKK21ubXg1MzAgbWluIC0xLjAwRS05OTkgICAgICAgMCAgLT4gIC0xLjAwRS05OTkKK21ubXg1MzEgbWluIC0wLjFFLTk5OSAgICAgICAgMCAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCittbm14NTMyIG1pbiAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbAorbW5teDUzMyBtaW4gLTAuMTAwRS05OTkgICAgICAwICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorbW5teDUzNCBtaW4gLTAuMDFFLTk5OSAgICAgICAwICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCittbm14NTM1IG1pbiAtMC45OTlFLTk5OSAgICAgIDAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Cittbm14NTM2IG1pbiAtMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Cittbm14NTM3IG1pbiAtMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Cittbm14NTM4IG1pbiAtMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK21ubXg1MzkgbWluIC0wLjAwMDlFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbW5teDU0MCBtaW4gLTAuMDAwMUUtOTk5ICAgICAwICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgorcHJlY2lzaW9uOiA5Cittbm14NTUxIG1pbiAgICAgIDEuMCAgICAgICAwLjEgIC0+IDAuMQorbW5teDU1MiBtaW4gICAgICAwLjEgICAgICAgMS4wICAtPiAwLjEKK21ubXg1NTMgbWluICAgICAxMC4wICAgICAgIDAuMSAgLT4gMC4xCittbm14NTU0IG1pbiAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDAuMQorbW5teDU1NSBtaW4gICAgICAxMDAgICAgICAgMS4wICAtPiAxLjAKK21ubXg1NTYgbWluICAgICAgMS4wICAgICAgIDEwMCAgLT4gMS4wCittbm14NTU3IG1pbiAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwLjAKK21ubXg1NTggbWluICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAuMAorbW5teDU1OSBtaW4gICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAuMAorbW5teDU2MCBtaW4gICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAuMAorbW5teDU2MSBtaW4gICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwLjAKK21ubXg1NjIgbWluICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMC4wCittbm14NTYzIG1pbiAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwLjAKK21ubXg1NjQgbWluICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAuMAorCistLSBOdWxsIHRlc3RzCittbm05MDAgbWluIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbW5tOTAxIG1pbiAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWlubWFnLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbm1hZy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYWMzODUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbm1hZy5kZWNUZXN0CkBAIC0wLDAgKzEsMzkwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG1pbm1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgbWluaW11bSBieSBtYWduaXR1ZGUgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworbW5neDAwMSBtaW5tYWcgIC0yICAtMiAgLT4gLTIKK21uZ3gwMDIgbWlubWFnICAtMiAgLTEgIC0+IC0xCittbmd4MDAzIG1pbm1hZyAgLTIgICAwICAtPiAgMAorbW5neDAwNCBtaW5tYWcgIC0yICAgMSAgLT4gIDEKK21uZ3gwMDUgbWlubWFnICAtMiAgIDIgIC0+IC0yCittbmd4MDA2IG1pbm1hZyAgLTEgIC0yICAtPiAtMQorbW5neDAwNyBtaW5tYWcgIC0xICAtMSAgLT4gLTEKK21uZ3gwMDggbWlubWFnICAtMSAgIDAgIC0+ICAwCittbmd4MDA5IG1pbm1hZyAgLTEgICAxICAtPiAtMQorbW5neDAxMCBtaW5tYWcgIC0xICAgMiAgLT4gLTEKK21uZ3gwMTEgbWlubWFnICAgMCAgLTIgIC0+ICAwCittbmd4MDEyIG1pbm1hZyAgIDAgIC0xICAtPiAgMAorbW5neDAxMyBtaW5tYWcgICAwICAgMCAgLT4gIDAKK21uZ3gwMTQgbWlubWFnICAgMCAgIDEgIC0+ICAwCittbmd4MDE1IG1pbm1hZyAgIDAgICAyICAtPiAgMAorbW5neDAxNiBtaW5tYWcgICAxICAtMiAgLT4gIDEKK21uZ3gwMTcgbWlubWFnICAgMSAgLTEgIC0+IC0xCittbmd4MDE4IG1pbm1hZyAgIDEgICAwICAtPiAgMAorbW5neDAxOSBtaW5tYWcgICAxICAgMSAgLT4gIDEKK21uZ3gwMjAgbWlubWFnICAgMSAgIDIgIC0+ICAxCittbmd4MDIxIG1pbm1hZyAgIDIgIC0yICAtPiAtMgorbW5neDAyMiBtaW5tYWcgICAyICAtMSAgLT4gLTEKK21uZ3gwMjMgbWlubWFnICAgMiAgIDAgIC0+ICAwCittbmd4MDI1IG1pbm1hZyAgIDIgICAxICAtPiAgMQorbW5neDAyNiBtaW5tYWcgICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK21uZ3gwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwCittbmd4MDMxIG1pbm1hZyAgIDAgICAgLTAgICAtPiAtMAorbW5neDAzMiBtaW5tYWcgICAwICAgIC0wLjAgLT4gLTAuMAorbW5neDAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMAorbW5neDAzNCBtaW5tYWcgIC0wICAgICAwICAgLT4gLTAKK21uZ3gwMzUgbWlubWFnICAtMCAgICAtMCAgIC0+IC0wCittbmd4MDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMAorbW5neDAzNyBtaW5tYWcgIC0wICAgICAwLjAgLT4gLTAKK21uZ3gwMzggbWlubWFnICAgMC4wICAgMCAgIC0+ICAwLjAKK21uZ3gwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wCittbmd4MDQwIG1pbm1hZyAgIDAuMCAgLTAuMCAtPiAtMC4wCittbmd4MDQxIG1pbm1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wCittbmd4MDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wCittbmd4MDQzIG1pbm1hZyAgLTAuMCAgLTAgICAtPiAtMAorbW5neDA0NCBtaW5tYWcgIC0wLjAgIC0wLjAgLT4gLTAuMAorbW5neDA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMAorCittbmd4MDQ2IG1pbm1hZyAgIDBFMSAgLTBFMSAtPiAtMEUrMQorbW5neDA0NyBtaW5tYWcgIC0wRTEgICAwRTIgLT4gLTBFKzEKK21uZ3gwNDggbWlubWFnICAgMEUyICAgMEUxIC0+ICAwRSsxCittbmd4MDQ5IG1pbm1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMQorbW5neDA1MCBtaW5tYWcgIC0wRTMgIC0wRTIgLT4gLTBFKzMKK21uZ3gwNTEgbWlubWFnICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246IDkKK21uZ3gwOTAgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK21uZ3gwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMAorbW5neDA5MiBtaW5tYWcgIEluZiAgLTEgICAgIC0+IC0xCittbmd4MDkzIG1pbm1hZyAgSW5mICAtMCAgICAgLT4gLTAKK21uZ3gwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMAorbW5neDA5NSBtaW5tYWcgIEluZiAgIDEgICAgIC0+ICAxCittbmd4MDk2IG1pbm1hZyAgSW5mICAgMTAwMCAgLT4gIDEwMDAKK21uZ3gwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK21uZ3gwOTggbWlubWFnIC0xMDAwICBJbmYgICAtPiAtMTAwMAorbW5neDA5OSBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorbW5neDEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xCittbmd4MTAxIG1pbm1hZyAtMCAgICAgSW5mICAgLT4gLTAKK21uZ3gxMDIgbWlubWFnICAwICAgICBJbmYgICAtPiAgMAorbW5neDEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxCittbmd4MTA0IG1pbm1hZyAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK21uZ3gxMDUgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworbW5neDEyMCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5neDEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwCittbmd4MTIyIG1pbm1hZyAtSW5mICAtMSAgICAgLT4gLTEKK21uZ3gxMjMgbWlubWFnIC1JbmYgIC0wICAgICAtPiAtMAorbW5neDEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwCittbmd4MTI1IG1pbm1hZyAtSW5mICAgMSAgICAgLT4gIDEKK21uZ3gxMjYgbWlubWFnIC1JbmYgICAxMDAwICAtPiAgMTAwMAorbW5neDEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorbW5neDEyOCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5neDEyOSBtaW5tYWcgLTEwMDAgLUluZiAgIC0+IC0xMDAwCittbmd4MTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTEKK21uZ3gxMzEgbWlubWFnIC0wICAgIC1JbmYgICAtPiAtMAorbW5neDEzMiBtaW5tYWcgIDAgICAgLUluZiAgIC0+ICAwCittbmd4MTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDEKK21uZ3gxMzQgbWlubWFnICAxMDAwIC1JbmYgICAtPiAgMTAwMAorbW5neDEzNSBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK21uZ3gxNDEgbWlubWFnICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5Cittbmd4MTQyIG1pbm1hZyAgTmFOIC0xMDAwICAgLT4gIC0xMDAwCittbmd4MTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xCittbmd4MTQ0IG1pbm1hZyAgTmFOIC0wICAgICAgLT4gIC0wCittbmd4MTQ1IG1pbm1hZyAgTmFOICAwICAgICAgLT4gIDAKK21uZ3gxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQorbW5neDE0NyBtaW5tYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwCittbmd4MTQ4IG1pbm1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5Cittbmd4MTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgorbW5neDE1MCBtaW5tYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorbW5neDE1MSBtaW5tYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwCittbmd4MTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTEKK21uZ3gxNTMgbWlubWFnIC0wICAgIE5hTiAgICAtPiAtMAorbW5neDE1NCBtaW5tYWcgIDAgICAtTmFOICAgIC0+ICAwCittbmd4MTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDEKK21uZ3gxNTYgbWlubWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMAorbW5neDE1NyBtaW5tYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCittbmd4MTYxIG1pbm1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2MyBtaW5tYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTY0IG1pbm1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2NiBtaW5tYWcgLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTY3IG1pbm1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2OSBtaW5tYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTcwIG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3MiBtaW5tYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTczIG1pbm1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3NSBtaW5tYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTc2IG1pbm1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3OCBtaW5tYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTc5IG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworbW5neDE4MSBtaW5tYWcgIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5Cittbmd4MTgyIG1pbm1hZyAtTmFOOCAgICA5OTkwICAtPiAgOTk5MAorbW5neDE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK21uZ3gxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xCittbmd4MTg1IG1pbm1hZyAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjIKK21uZ3gxODYgbWlubWFnIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCittbmd4MTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQKKworbW5neDE4OCBtaW5tYWcgLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5Cittbmd4MTg5IG1pbm1hZyAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorbW5neDE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK21uZ3gxOTEgbWlubWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTMgbWlubWFnIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTQgbWlubWFnICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTYgbWlubWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTcgbWlubWFnICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTkgbWlubWFnICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcm91bmRpbmcgY2hlY2tzIC0tIGNob3NlbiBpcyByb3VuZGVkLCBvciBub3QKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK21uZ3gyMDEgbWlubWFnIC0xMjM0NTY3ODAwMCAxICAtPiAxCittbmd4MjAyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQorbW5neDIwMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDEKK21uZ3gyMDQgbWlubWFnIDEgLTEyMzQ1Njc4MDAgICAtPiAxCittbmd4MjA1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQorbW5neDIwNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDEKK21uZ3gyMDcgbWlubWFnIC0xMjM0NTY3ODkxICAxICAtPiAxCittbmd4MjA4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQorbW5neDIwOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDEKK21uZ3gyMTAgbWlubWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAxCittbmd4MjExIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQorbW5neDIxMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDEKK21uZ3gyMTMgbWlubWFnIDEyMzQ1Njc4OTEgIDEgICAtPiAxCittbmd4MjE0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQorbW5neDIxNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDEKK21uZ3gyMTYgbWlubWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAxCittbmd4MjE3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQorbW5neDIxOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworcHJlY2lzaW9uOiAxNQorbW5neDIyMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDEKK21uZ3gyMjIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxCittbmd4MjIzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQorbW5neDIyNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDEKK21uZ3gyMjUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxCittbmd4MjI2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQorbW5neDIyNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDEKK21uZ3gyMjggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxCittbmd4MjI5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQorbW5neDIzMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDEKK21uZ3gyMzEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxCittbmd4MjMyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQorbW5neDIzMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK21uZ3gyMzQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxCittbmd4MjM1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQorbW5neDIzNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK21uZ3gyMzcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxCittbmd4MjM4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCittbmd4MjgwIG1pbm1hZyAnMycgICAnMicgIC0+ICAnMicKK21uZ3gyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJworbW5neDI4MiBtaW5tYWcgJzEuMCcgJzEnICAtPiAgJzEuMCcKK21uZ3gyODMgbWlubWFnICcxJyAnMS4wJyAgLT4gICcxLjAnCittbmd4Mjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBbaW5wdXRzXSBub3cgYWxsb3dlZAorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK21uZ3gzMzAgbWlubWFnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC05RSs5OTk5OTk5OTkgLT4gLTEuMjM0NTY3ODkwMTIzNDUKK21uZ3gzMzEgbWlubWFnIC05RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gLTEuMjM0NTY3ODkwMTIzNDUKK21uZ3gzMzIgbWlubWFnIC0wLjEwMCAtOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQorbW5neDMzMyBtaW5tYWcgLTlFLTk5OTk5OTk5OSAtMC4xMDAgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5Cittbmd4MzM1IG1pbm1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtOUUrOTk5OTk5OTk5IC0+ICAxLjIzNDU2Nzg5MDEyMzQ1Cittbmd4MzM2IG1pbm1hZyAtOUUrOTk5OTk5OTk5IDEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+ICAxLjIzNDU2Nzg5MDEyMzQ1Cittbmd4MzM3IG1pbm1hZyArMC4xMDAgLTlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkKK21uZ3gzMzggbWlubWFnIC05RS05OTk5OTk5OTkgMC4xMDAgICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQorCittbmd4MzM5IG1pbm1hZyAtMWUtNTk5OTk5OTk5IC0xZS00MDAwMDAwMDEgICAtPiAgLTFFLTU5OTk5OTk5OQorbW5neDM0MCBtaW5tYWcgLTFlLTU5OTk5OTk5OSAtMWUtNDAwMDAwMDAwICAgLT4gIC0xRS01OTk5OTk5OTkKK21uZ3gzNDEgbWlubWFnIC0xZS02MDAwMDAwMDAgLTFlLTQwMDAwMDAwMCAgIC0+ICAtMUUtNjAwMDAwMDAwCittbmd4MzQyIG1pbm1hZyAtOWUtOTk5OTk5OTk4IC0wLjAxICAgICAgICAgICAtPiAgLTlFLTk5OTk5OTk5OAorbW5neDM0MyBtaW5tYWcgLTllLTk5OTk5OTk5OCAtMC4xICAgICAgICAgICAgLT4gIC05RS05OTk5OTk5OTgKK21uZ3gzNDQgbWlubWFnIC0wLjAxICAgICAgICAgLTllLTk5OTk5OTk5OCAgIC0+ICAtOUUtOTk5OTk5OTk4Cittbmd4MzQ1IG1pbm1hZyAtMWU1OTk5OTk5OTkgIC0xZTQwMDAwMDAwMSAgICAtPiAgLTFFKzQwMDAwMDAwMQorbW5neDM0NiBtaW5tYWcgLTFlNTk5OTk5OTk5ICAtMWU0MDAwMDAwMDAgICAgLT4gIC0xRSs0MDAwMDAwMDAKK21uZ3gzNDcgbWlubWFnIC0xZTYwMDAwMDAwMCAgLTFlNDAwMDAwMDAwICAgIC0+ICAtMUUrNDAwMDAwMDAwCittbmd4MzQ4IG1pbm1hZyAtOWU5OTk5OTk5OTggIC0xMDAgICAgICAgICAgICAtPiAgLTEwMAorbW5neDM0OSBtaW5tYWcgLTllOTk5OTk5OTk4ICAtMTAgICAgICAgICAgICAgLT4gIC0xMAorbW5neDM1MCBtaW5tYWcgLTEwMCAgICAgICAgICAtOWU5OTk5OTk5OTggICAgLT4gIC0xMDAKKy0tIHNpZ25zCittbmd4MzUxIG1pbm1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzQxMTExMTExMQorbW5neDM1MiBtaW5tYWcgLTFlKzc3Nzc3Nzc3NyArMWUrNDExMTExMTExIC0+ICAxRSs0MTExMTExMTEKK21uZ3gzNTMgbWlubWFnICsxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtMUUrNDExMTExMTExCittbmd4MzU0IG1pbm1hZyArMWUrNzc3Nzc3Nzc3ICsxZSs0MTExMTExMTEgLT4gIDFFKzQxMTExMTExMQorbW5neDM1NSBtaW5tYWcgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS03Nzc3Nzc3NzcKK21uZ3gzNTYgbWlubWFnIC0xZS03Nzc3Nzc3NzcgKzFlLTQxMTExMTExMSAtPiAtMUUtNzc3Nzc3Nzc3Cittbmd4MzU3IG1pbm1hZyArMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDFFLTc3Nzc3Nzc3NworbW5neDM1OCBtaW5tYWcgKzFlLTc3Nzc3Nzc3NyArMWUtNDExMTExMTExIC0+ICAxRS03Nzc3Nzc3NzcKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCittbmd4NDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQorbW5neDQwMiBtaW5tYWcgIDEuMSAgICAxICAgICAgIC0+ICAxCittbmd4NDAzIG1pbm1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAorbW5neDQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjEKK21uZ3g0MDUgbWlubWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMAorbW5neDQwNiBtaW5tYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAorbW5neDQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwCittbmd4NDA4IG1pbm1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAuMAorbW5neDQwOSBtaW5tYWcgIDAuMCAgIC0wICAgICAgIC0+IC0wCittbmd4NDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMAorbW5neDQxMSBtaW5tYWcgIDAuMDAgIC0wLjAgICAgIC0+IC0wLjAKK21uZ3g0MTIgbWlubWFnICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAorbW5neDQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjAKK21uZ3g0MTQgbWlubWFnICAwICAgICAtMCAgICAgICAtPiAtMAorbW5neDQxNSBtaW5tYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wCittbmd4NDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAKK21uZ3g0MTcgbWlubWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAorbW5neDQxOCBtaW5tYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEKK21uZ3g0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xCittbmd4NDIwIG1pbm1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEKK21uZ3g0MjEgbWlubWFnIC0xICAgICAtMS4xICAgICAtPiAtMQorbW5neDQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorbW5neDQzMSBtaW5tYWcgIDEuMSAgICBJbmYgICAgIC0+ICAxLjEKK21uZ3g0MzIgbWlubWFnICAxICAgICAgMS4xICAgICAtPiAgMQorbW5neDQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK21uZ3g0MzQgbWlubWFnICAwLjEgICAgMS4wICAgICAtPiAgMC4xCittbmd4NDM1IG1pbm1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKK21uZ3g0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK21uZ3g0MzcgbWlubWFnICAwICAgICAgMC4xMCAgICAtPiAgMAorbW5neDQzOCBtaW5tYWcgIDAuMCAgICAwICAgICAgIC0+ICAwLjAKK21uZ3g0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMAorbW5neDQ0MCBtaW5tYWcgLTAuMCAgICAwLjAgICAgIC0+IC0wLjAKK21uZ3g0NDEgbWlubWFnIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCittbmd4NDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK21uZ3g0NDMgbWlubWFnIC0wLjAgICAgMCAgICAgICAtPiAtMC4wCittbmd4NDQ0IG1pbm1hZyAtMCAgICAgIDAgICAgICAgLT4gLTAKK21uZ3g0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMAorbW5neDQ0NiBtaW5tYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wCittbmd4NDQ3IG1pbm1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKK21uZ3g0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xCittbmd4NDQ5IG1pbm1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQorbW5neDQ1MCBtaW5tYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xCittbmd4NDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEKK21uZ3g0NTMgbWlubWFnIC1JbmYgICAtMS4xICAgICAtPiAtMS4xCistLSBsYXJnaWVzCittbmd4NDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDAKK21uZ3g0NjEgbWlubWFnICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAorbW5neDQ2MiBtaW5tYWcgIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCittbmd4NDYzIG1pbm1hZyAgMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKK21uZ3g0NjQgbWlubWFnIC0xMDAwICAgMUUrMyAgICAtPiAtMTAwMAorbW5neDQ2NSBtaW5tYWcgLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCittbmd4NDY2IG1pbm1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK21uZ3g0NjcgbWlubWFnIC0xRSszICAtMTAwMCAgICAtPiAtMUUrMworCistLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworCittbmd4NDcwIG1pbm1hZyAgMSAgICAgIDUgICAgICAtPiAgMQorbW5neDQ3MSBtaW5tYWcgIDEwICAgICA1MCAgICAgLT4gIDEwCittbmd4NDcyIG1pbm1hZyAgMTAwICAgIDUwMCAgICAtPiAgMTAwCittbmd4NDczIG1pbm1hZyAgMTAwMCAgIDUwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCittbmd4NDc0IG1pbm1hZyAgMTAwMDAgIDUwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCittbmd4NDc1IG1pbm1hZyAgNiAgICAgIDUwICAgICAtPiAgNgorbW5neDQ3NiBtaW5tYWcgIDY2ICAgICA1MDAgICAgLT4gIDY2Cittbmd4NDc3IG1pbm1hZyAgNjY2ICAgIDUwMDAgICAtPiAgNjY2Cittbmd4NDc4IG1pbm1hZyAgNjY2NiAgIDUwMDAwICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK21uZ3g0NzkgbWlubWFnICA2NjY2NiAgNTAwMDAwIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbW5neDQ4MCBtaW5tYWcgIDMzMzMzICA1MDAwMDAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0Cittbmd4NDgxIG1pbm1hZyAgNzU0MDEgIDEgICAgICAtPiAgMQorbW5neDQ4MiBtaW5tYWcgIDc1NDAyICAxMCAgICAgLT4gIDEwCittbmd4NDgzIG1pbm1hZyAgNzU0MDMgIDEwMCAgICAtPiAgMTAwCittbmd4NDg0IG1pbm1hZyAgNzU0MDQgIDEwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCittbmd4NDg1IG1pbm1hZyAgNzU0MDUgIDEwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCittbmd4NDg2IG1pbm1hZyAgNzU0MDYgIDYgICAgICAtPiAgNgorbW5neDQ4NyBtaW5tYWcgIDc1NDA3ICA2NiAgICAgLT4gIDY2Cittbmd4NDg4IG1pbm1hZyAgNzU0MDggIDY2NiAgICAtPiAgNjY2Cittbmd4NDg5IG1pbm1hZyAgNzU0MDkgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK21uZ3g0OTAgbWlubWFnICA3NTQxMCAgNjY2NjYgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbW5neDQ5MSBtaW5tYWcgIDc1NDExICAzMzMzMyAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0CisKKworLS0gb3ZlcmZsb3cgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKK21uZ3g1MDAgbWlubWFnIDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIDAKK21uZ3g1MDEgbWlubWFnIC05Ljk5OUUrOTk5OTk5OTk5IDAgLT4gIDAKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CitwcmVjaXNpb246IDMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5Cittbmd4NTEwIG1pbm1hZyAgMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5neDUxMSBtaW5tYWcgIDAuMUUtOTk5ICAgICAgICAwICAtPiAgIDAKK21uZ3g1MTIgbWlubWFnICAwLjEwRS05OTkgICAgICAgMCAgLT4gICAwCittbmd4NTEzIG1pbm1hZyAgMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUxNCBtaW5tYWcgIDAuMDFFLTk5OSAgICAgICAwICAtPiAgIDAKK21uZ3g1MTUgbWlubWFnICAwLjk5OUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTE2IG1pbm1hZyAgMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUxNyBtaW5tYWcgIDAuMDA5RS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MTggbWlubWFnICAwLjAwMUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTE5IG1pbm1hZyAgMC4wMDA5RS05OTkgICAgIDAgIC0+ICAgMAorbW5neDUyMCBtaW5tYWcgIDAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDAKKworbW5neDUzMCBtaW5tYWcgLTEuMDBFLTk5OSAgICAgICAwICAtPiAgIDAKK21uZ3g1MzEgbWlubWFnIC0wLjFFLTk5OSAgICAgICAgMCAgLT4gICAwCittbmd4NTMyIG1pbm1hZyAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5neDUzMyBtaW5tYWcgLTAuMTAwRS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MzQgbWlubWFnIC0wLjAxRS05OTkgICAgICAgMCAgLT4gICAwCittbmd4NTM1IG1pbm1hZyAtMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUzNiBtaW5tYWcgLTAuMDk5RS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MzcgbWlubWFnIC0wLjAwOUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTM4IG1pbm1hZyAtMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUzOSBtaW5tYWcgLTAuMDAwOUUtOTk5ICAgICAwICAtPiAgIDAKK21uZ3g1NDAgbWlubWFnIC0wLjAwMDFFLTk5OSAgICAgMCAgLT4gICAwCisKKworLS0gTnVsbCB0ZXN0cworbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK21uZzkwMSBtaW5tYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbnVzLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbnVzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3NDljMAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWludXMuZGVjVGVzdApAQCAtMCwwICsxLDE4MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBtaW51cy5kZWNUZXN0IC0tIGRlY2ltYWwgbmVnYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHByaW1hcmlseSB0ZXN0cyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBvcGVyYXRvci4KKy0tIFN1YnRyYWN0aW9uLCByb3VuZGluZywgYW5kIG1vcmUgb3ZlcmZsb3dzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLgorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCittaW54MDAxIG1pbnVzICcxJyAgICAgIC0+ICctMScKK21pbngwMDIgbWludXMgJy0xJyAgICAgLT4gJzEnCittaW54MDAzIG1pbnVzICcxLjAwJyAgIC0+ICctMS4wMCcKK21pbngwMDQgbWludXMgJy0xLjAwJyAgLT4gJzEuMDAnCittaW54MDA1IG1pbnVzICcwJyAgICAgIC0+ICcwJworbWlueDAwNiBtaW51cyAnMC4wMCcgICAtPiAnMC4wMCcKK21pbngwMDcgbWludXMgJzAwLjAnICAgLT4gJzAuMCcKK21pbngwMDggbWludXMgJzAwLjAwJyAgLT4gJzAuMDAnCittaW54MDA5IG1pbnVzICcwMCcgICAgIC0+ICcwJworCittaW54MDEwIG1pbnVzICctMicgICAgIC0+ICcyJworbWlueDAxMSBtaW51cyAnMicgICAgICAtPiAnLTInCittaW54MDEyIG1pbnVzICctMi4wMCcgIC0+ICcyLjAwJworbWlueDAxMyBtaW51cyAnMi4wMCcgICAtPiAnLTIuMDAnCittaW54MDE0IG1pbnVzICctMCcgICAgIC0+ICcwJworbWlueDAxNSBtaW51cyAnLTAuMDAnICAtPiAnMC4wMCcKK21pbngwMTYgbWludXMgJy0wMC4wJyAgLT4gJzAuMCcKK21pbngwMTcgbWludXMgJy0wMC4wMCcgLT4gJzAuMDAnCittaW54MDE4IG1pbnVzICctMDAnICAgIC0+ICcwJworCistLSAibGhzIiB6ZXJvcyBpbiBwbHVzIGFuZCBtaW51cyBoYXZlIGV4cG9uZW50ID0gb3BlcmFuZAorbWlueDAyMCBtaW51cyAnLTBFMycgICAtPiAnMEUrMycKK21pbngwMjEgbWludXMgJy0wRTInICAgLT4gJzBFKzInCittaW54MDIyIG1pbnVzICctMEUxJyAgIC0+ICcwRSsxJworbWlueDAyMyBtaW51cyAnLTBFMCcgICAtPiAnMCcKK21pbngwMjQgbWludXMgJyswRTAnICAgLT4gJzAnCittaW54MDI1IG1pbnVzICcrMEUxJyAgIC0+ICcwRSsxJworbWlueDAyNiBtaW51cyAnKzBFMicgICAtPiAnMEUrMicKK21pbngwMjcgbWludXMgJyswRTMnICAgLT4gJzBFKzMnCisKK21pbngwMzAgbWludXMgJy01RTMnICAgLT4gJzVFKzMnCittaW54MDMxIG1pbnVzICctNUU4JyAgIC0+ICc1RSs4JworbWlueDAzMiBtaW51cyAnLTVFMTMnICAtPiAnNUUrMTMnCittaW54MDMzIG1pbnVzICctNUUxOCcgIC0+ICc1RSsxOCcKK21pbngwMzQgbWludXMgJys1RTMnICAgLT4gJy01RSszJworbWlueDAzNSBtaW51cyAnKzVFOCcgICAtPiAnLTVFKzgnCittaW54MDM2IG1pbnVzICcrNUUxMycgIC0+ICctNUUrMTMnCittaW54MDM3IG1pbnVzICcrNUUxOCcgIC0+ICctNUUrMTgnCisKK21pbngwNTAgbWludXMgJy0yMDAwMDAwJyAtPiAnMjAwMDAwMCcKK21pbngwNTEgbWludXMgJzIwMDAwMDAnICAtPiAnLTIwMDAwMDAnCitwcmVjaXNpb246IDcKK21pbngwNTIgbWludXMgJy0yMDAwMDAwJyAtPiAnMjAwMDAwMCcKK21pbngwNTMgbWludXMgJzIwMDAwMDAnICAtPiAnLTIwMDAwMDAnCitwcmVjaXNpb246IDYKK21pbngwNTQgbWludXMgJy0yMDAwMDAwJyAtPiAnMi4wMDAwMEUrNicgUm91bmRlZAorbWlueDA1NSBtaW51cyAnMjAwMDAwMCcgIC0+ICctMi4wMDAwMEUrNicgUm91bmRlZAorcHJlY2lzaW9uOiAzCittaW54MDU2IG1pbnVzICctMjAwMDAwMCcgLT4gJzIuMDBFKzYnIFJvdW5kZWQKK21pbngwNTcgbWludXMgJzIwMDAwMDAnICAtPiAnLTIuMDBFKzYnIFJvdW5kZWQKKworLS0gbW9yZSBmaXhlZCwgcG90ZW50aWFsIExIUyBzd2Fwcy9vdmVybGF5cyBpZiBkb25lIGJ5IDAgc3VidHJhY3QgeAorcHJlY2lzaW9uOiA5CittaW54MDYwIG1pbnVzICc1NjI2N0UtMTAnICAgLT4gJy0wLjAwMDAwNTYyNjcnCittaW54MDYxIG1pbnVzICc1NjI2N0UtNScgICAgLT4gJy0wLjU2MjY3JworbWlueDA2MiBtaW51cyAnNTYyNjdFLTInICAgIC0+ICctNTYyLjY3JworbWlueDA2MyBtaW51cyAnNTYyNjdFLTEnICAgIC0+ICctNTYyNi43JworbWlueDA2NSBtaW51cyAnNTYyNjdFLTAnICAgIC0+ICctNTYyNjcnCittaW54MDY2IG1pbnVzICc1NjI2N0UrMCcgICAgLT4gJy01NjI2NycKK21pbngwNjcgbWludXMgJzU2MjY3RSsxJyAgICAtPiAnLTUuNjI2N0UrNScKK21pbngwNjggbWludXMgJzU2MjY3RSsyJyAgICAtPiAnLTUuNjI2N0UrNicKK21pbngwNjkgbWludXMgJzU2MjY3RSszJyAgICAtPiAnLTUuNjI2N0UrNycKK21pbngwNzAgbWludXMgJzU2MjY3RSs0JyAgICAtPiAnLTUuNjI2N0UrOCcKK21pbngwNzEgbWludXMgJzU2MjY3RSs1JyAgICAtPiAnLTUuNjI2N0UrOScKK21pbngwNzIgbWludXMgJzU2MjY3RSs2JyAgICAtPiAnLTUuNjI2N0UrMTAnCittaW54MDgwIG1pbnVzICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycKK21pbngwODEgbWludXMgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycKK21pbngwODIgbWludXMgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JworbWlueDA4MyBtaW51cyAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCittaW54MDg1IG1pbnVzICctNTYyNjdFLTAnICAgLT4gJzU2MjY3JworbWlueDA4NiBtaW51cyAnLTU2MjY3RSswJyAgIC0+ICc1NjI2NycKK21pbngwODcgbWludXMgJy01NjI2N0UrMScgICAtPiAnNS42MjY3RSs1JworbWlueDA4OCBtaW51cyAnLTU2MjY3RSsyJyAgIC0+ICc1LjYyNjdFKzYnCittaW54MDg5IG1pbnVzICctNTYyNjdFKzMnICAgLT4gJzUuNjI2N0UrNycKK21pbngwOTAgbWludXMgJy01NjI2N0UrNCcgICAtPiAnNS42MjY3RSs4JworbWlueDA5MSBtaW51cyAnLTU2MjY3RSs1JyAgIC0+ICc1LjYyNjdFKzknCittaW54MDkyIG1pbnVzICctNTYyNjdFKzYnICAgLT4gJzUuNjI2N0UrMTAnCisKKworLS0gb3ZlcmZsb3cgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKK21pbngxMDAgbWludXMgOS45OTlFKzk5OTk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbWlueDEwMSBtaW51cyAtOS45OTlFKzk5OTk5OTk5OSAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorbWlueDExMCBtaW51cyAgMS4wMEUtOTk5ICAgICAgICAtPiAgLTEuMDBFLTk5OQorbWlueDExMSBtaW51cyAgMC4xRS05OTkgICAgICAgICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwKK21pbngxMTIgbWludXMgIDAuMTBFLTk5OSAgICAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsCittaW54MTEzIG1pbnVzICAwLjEwMEUtOTk5ICAgICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCittaW54MTE0IG1pbnVzICAwLjAxRS05OTkgICAgICAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK21pbngxMTUgbWludXMgIDAuOTk5RS05OTkgICAgICAgLT4gIC0xLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK21pbngxMTYgbWludXMgIDAuMDk5RS05OTkgICAgICAgLT4gIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK21pbngxMTcgbWludXMgIDAuMDA5RS05OTkgICAgICAgLT4gIC0xRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK21pbngxMTggbWludXMgIDAuMDAxRS05OTkgICAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbWlueDExOSBtaW51cyAgMC4wMDA5RS05OTkgICAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCittaW54MTIwIG1pbnVzICAwLjAwMDFFLTk5OSAgICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworbWlueDEzMCBtaW51cyAtMS4wMEUtOTk5ICAgICAgICAtPiAgIDEuMDBFLTk5OQorbWlueDEzMSBtaW51cyAtMC4xRS05OTkgICAgICAgICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwKK21pbngxMzIgbWludXMgLTAuMTBFLTk5OSAgICAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsCittaW54MTMzIG1pbnVzIC0wLjEwMEUtOTk5ICAgICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCittaW54MTM0IG1pbnVzIC0wLjAxRS05OTkgICAgICAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK21pbngxMzUgbWludXMgLTAuOTk5RS05OTkgICAgICAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK21pbngxMzYgbWludXMgLTAuMDk5RS05OTkgICAgICAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK21pbngxMzcgbWludXMgLTAuMDA5RS05OTkgICAgICAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK21pbngxMzggbWludXMgLTAuMDAxRS05OTkgICAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbWlueDEzOSBtaW51cyAtMC4wMDA5RS05OTkgICAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCittaW54MTQwIG1pbnVzIC0wLjAwMDFFLTk5OSAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5CittaW54MzAxIG1pbnVzIDEyMzQ1Njc4MDAwICAtPiAtMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorbWlueDMwMiBtaW51cyAxMjM0NTY3ODAwICAgLT4gLTEuMjM0NTY3ODBFKzkgUm91bmRlZAorbWlueDMwMyBtaW51cyAxMjM0NTY3ODkwICAgLT4gLTEuMjM0NTY3ODlFKzkgUm91bmRlZAorbWlueDMwNCBtaW51cyAxMjM0NTY3ODkxICAgLT4gLTEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCittaW54MzA1IG1pbnVzIDEyMzQ1Njc4OTAxICAtPiAtMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCittaW54MzA2IG1pbnVzIDEyMzQ1Njc4OTYgICAtPiAtMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxNQorLS0gc3RpbGwgY2hlY2tpbmcKK21pbngzMjEgbWludXMgMTIzNDU2NzgwMDAgIC0+IC0xMjM0NTY3ODAwMAorbWlueDMyMiBtaW51cyAxMjM0NTY3ODAwICAgLT4gLTEyMzQ1Njc4MDAKK21pbngzMjMgbWludXMgMTIzNDU2Nzg5MCAgIC0+IC0xMjM0NTY3ODkwCittaW54MzI0IG1pbnVzIDEyMzQ1Njc4OTEgICAtPiAtMTIzNDU2Nzg5MQorbWlueDMyNSBtaW51cyAxMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxCittaW54MzI2IG1pbnVzIDEyMzQ1Njc4OTYgICAtPiAtMTIzNDU2Nzg5NgorCistLSBzcGVjaWFscworbWlueDQyMCBtaW51cyAnSW5mJyAgICAtPiAnLUluZmluaXR5JworbWlueDQyMSBtaW51cyAnLUluZicgICAtPiAnSW5maW5pdHknCittaW54NDIyIG1pbnVzICAgTmFOICAgIC0+ICBOYU4KK21pbng0MjMgbWludXMgIHNOYU4gICAgLT4gIE5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorbWlueDQyNCBtaW51cyAgIE5hTjI1NSAtPiAgTmFOMjU1CittaW54NDI1IG1pbnVzICBzTmFOMjU2IC0+ICBOYU4yNTYgSW52YWxpZF9vcGVyYXRpb24KK21pbng0MjYgbWludXMgIC1OYU4gICAgLT4gLU5hTgorbWlueDQyNyBtaW51cyAtc05hTiAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCittaW54NDI4IG1pbnVzICAtTmFOMjU1IC0+IC1OYU4yNTUKK21pbng0MjkgbWludXMgLXNOYU4yNTYgLT4gLU5hTjI1NiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCittaW54OTAwIG1pbnVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL211bHRpcGx5LmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL211bHRpcGx5LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyM2Q1YQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbXVsdGlwbHkuZGVjVGVzdApAQCAtMCwwICsxLDczMSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBtdWx0aXBseS5kZWNUZXN0IC0tIGRlY2ltYWwgbXVsdGlwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQorbXVseDAwMCBtdWx0aXBseSAyICAgICAgMiAtPiA0CittdWx4MDAxIG11bHRpcGx5IDIgICAgICAzIC0+IDYKK211bHgwMDIgbXVsdGlwbHkgNSAgICAgIDEgLT4gNQorbXVseDAwMyBtdWx0aXBseSA1ICAgICAgMiAtPiAxMAorbXVseDAwNCBtdWx0aXBseSAxLjIwICAgMiAtPiAyLjQwCittdWx4MDA1IG11bHRpcGx5IDEuMjAgICAwIC0+IDAuMDAKK211bHgwMDYgbXVsdGlwbHkgMS4yMCAgLTIgLT4gLTIuNDAKK211bHgwMDcgbXVsdGlwbHkgLTEuMjAgIDIgLT4gLTIuNDAKK211bHgwMDggbXVsdGlwbHkgLTEuMjAgIDAgLT4gLTAuMDAKK211bHgwMDkgbXVsdGlwbHkgLTEuMjAgLTIgLT4gMi40MAorbXVseDAxMCBtdWx0aXBseSA1LjA5IDcuMSAtPiAzNi4xMzkKK211bHgwMTEgbXVsdGlwbHkgMi41ICAgIDQgLT4gMTAuMAorbXVseDAxMiBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMAorbXVseDAxMyBtdWx0aXBseSAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAgLT4gMS4yMzQ1Njc4OSBSb3VuZGVkCittdWx4MDE0IG11bHRpcGx5IDkuOTk5OTk5OTk5IDkuOTk5OTk5OTk5IC0+IDEwMC4wMDAwMDAgSW5leGFjdCBSb3VuZGVkCittdWx4MDE1IG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwCitwcmVjaXNpb246IDYKK211bHgwMTYgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDAKK211bHgwMTcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKK211bHgwMTggbXVsdGlwbHkgIDkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKK211bHgwMTkgbXVsdGlwbHkgLTkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKK211bHgwMjAgbXVsdGlwbHkgLTkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gMTk5OS4xMi4yMTogbmV4dCBvbmUgaXMgYSBlZGdlIGNhc2UgaWYgaW50ZXJtZWRpYXRlIGxvbmdzIGFyZSB1c2VkCitwcmVjaXNpb246IDE1CittdWx4MDU5IG11bHRpcGx5IDk5OTk5OTk5OTk5OSA5NzY1NjI1IC0+IDkuNzY1NjI0OTk5OTkwMjNFKzE4IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMAorbXVseDE2MCBtdWx0aXBseSA5OTk5OTk5OTk5OTkgOTc2NTYyNSAtPiA5NzY1NjI0OTk5OTkwMjM0Mzc1CitwcmVjaXNpb246IDkKKy0tLS0tCisKKy0tIHplcm9zLCBldGMuCittdWx4MDIxIG11bHRpcGx5ICAwICAgICAgMCAgICAgLT4gIDAKK211bHgwMjIgbXVsdGlwbHkgIDAgICAgIC0wICAgICAtPiAtMAorbXVseDAyMyBtdWx0aXBseSAtMCAgICAgIDAgICAgIC0+IC0wCittdWx4MDI0IG11bHRpcGx5IC0wICAgICAtMCAgICAgLT4gIDAKK211bHgwMjUgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorbXVseDAyNiBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCittdWx4MDI3IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK211bHgwMjggbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorbXVseDAzMCBtdWx0aXBseSAgNS4wMCAgIDFFLTMgIC0+ICAwLjAwNTAwCittdWx4MDMxIG11bHRpcGx5ICAwMC4wMCAgMC4wMDAgLT4gIDAuMDAwMDAKK211bHgwMzIgbXVsdGlwbHkgIDAwLjAwICAwRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK211bHgwMzMgbXVsdGlwbHkgIDBFLTMgICAwMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK211bHgwMzQgbXVsdGlwbHkgLTUuMDAgICAxRS0zICAtPiAtMC4wMDUwMAorbXVseDAzNSBtdWx0aXBseSAtMDAuMDAgIDAuMDAwIC0+IC0wLjAwMDAwCittdWx4MDM2IG11bHRpcGx5IC0wMC4wMCAgMEUtMyAgLT4gLTAuMDAwMDAgICAgIC0tIHJocyBpcyAwCittdWx4MDM3IG11bHRpcGx5IC0wRS0zICAgMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwCittdWx4MDM4IG11bHRpcGx5ICA1LjAwICAtMUUtMyAgLT4gLTAuMDA1MDAKK211bHgwMzkgbXVsdGlwbHkgIDAwLjAwIC0wLjAwMCAtPiAtMC4wMDAwMAorbXVseDA0MCBtdWx0aXBseSAgMDAuMDAgLTBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMAorbXVseDA0MSBtdWx0aXBseSAgMEUtMyAgLTAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMAorbXVseDA0MiBtdWx0aXBseSAtNS4wMCAgLTFFLTMgIC0+ICAwLjAwNTAwCittdWx4MDQzIG11bHRpcGx5IC0wMC4wMCAtMC4wMDAgLT4gIDAuMDAwMDAKK211bHgwNDQgbXVsdGlwbHkgLTAwLjAwIC0wRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK211bHgwNDUgbXVsdGlwbHkgLTBFLTMgIC0wMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorbXVseDA1MCBtdWx0aXBseSAxLjIwIDMgICAgICAgIC0+IDMuNjAKK211bHgwNTEgbXVsdGlwbHkgNyAgICAzICAgICAgICAtPiAyMQorbXVseDA1MiBtdWx0aXBseSAwLjkgIDAuOCAgICAgIC0+IDAuNzIKK211bHgwNTMgbXVsdGlwbHkgMC45ICAtMCAgICAgICAtPiAtMC4wCittdWx4MDU0IG11bHRpcGx5IDY1NDMyMSA2NTQzMjEgLT4gNC4yODEzNTk3MUUrMTEgIEluZXhhY3QgUm91bmRlZAorCittdWx4MDYwIG11bHRpcGx5IDEyMy40NSAxZTcgIC0+ICAxLjIzNDVFKzkKK211bHgwNjEgbXVsdGlwbHkgMTIzLjQ1IDFlOCAgLT4gIDEuMjM0NUUrMTAKK211bHgwNjIgbXVsdGlwbHkgMTIzLjQ1IDFlKzkgLT4gIDEuMjM0NUUrMTEKK211bHgwNjMgbXVsdGlwbHkgMTIzLjQ1IDFlMTAgLT4gIDEuMjM0NUUrMTIKK211bHgwNjQgbXVsdGlwbHkgMTIzLjQ1IDFlMTEgLT4gIDEuMjM0NUUrMTMKK211bHgwNjUgbXVsdGlwbHkgMTIzLjQ1IDFlMTIgLT4gIDEuMjM0NUUrMTQKK211bHgwNjYgbXVsdGlwbHkgMTIzLjQ1IDFlMTMgLT4gIDEuMjM0NUUrMTUKKworCistLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMKK3ByZWNpc2lvbjogOQorbXVseDA4MCBtdWx0aXBseSAwLjEgMTIzNDU2Nzg5ICAgICAgICAgIC0+IDEyMzQ1Njc4LjkKK211bHgwODEgbXVsdGlwbHkgMC4xIDEyMzQ1Njc4OTEgICAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCittdWx4MDgyIG11bHRpcGx5IDAuMSAxMjM0NTY3ODkxMiAgICAgICAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK211bHgwODMgbXVsdGlwbHkgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAtPiAxLjIzNDU2Nzg5RSsxMiBJbmV4YWN0IFJvdW5kZWQKK211bHgwODQgbXVsdGlwbHkgMC4xIDEyMzQ1Njc4OSAgICAgICAgICAtPiAxMjM0NTY3OC45CitwcmVjaXNpb246IDgKK211bHgwODUgbXVsdGlwbHkgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkCittdWx4MDg2IG11bHRpcGx5IDAuMSAxMjM0NTY3ODkxMjM0NSAgICAgLT4gMS4yMzQ1Njc5RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNworbXVseDA4NyBtdWx0aXBseSAwLjEgMTIzNDU2Nzg5MTIgICAgICAgIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZAorbXVseDA4OCBtdWx0aXBseSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiA5CittdWx4MDkwIG11bHRpcGx5IDEyMzQ1Njc4OSAgICAgICAgICAwLjEgLT4gMTIzNDU2NzguOQorbXVseDA5MSBtdWx0aXBseSAxMjM0NTY3ODkxICAgICAgICAgMC4xIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK211bHgwOTIgbXVsdGlwbHkgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorbXVseDA5MyBtdWx0aXBseSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xIC0+IDEuMjM0NTY3ODlFKzEyIEluZXhhY3QgUm91bmRlZAorbXVseDA5NCBtdWx0aXBseSAxMjM0NTY3ODkgICAgICAgICAgMC4xIC0+IDEyMzQ1Njc4LjkKK3ByZWNpc2lvbjogOAorbXVseDA5NSBtdWx0aXBseSAxMjM0NTY3ODkxMiAgICAgICAgMC4xIC0+IDEuMjM0NTY3OUUrOSBJbmV4YWN0IFJvdW5kZWQKK211bHgwOTYgbXVsdGlwbHkgMTIzNDU2Nzg5MTIzNDUgICAgIDAuMSAtPiAxLjIzNDU2NzlFKzEyIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA3CittdWx4MDk3IG11bHRpcGx5IDEyMzQ1Njc4OTEyICAgICAgICAwLjEgLT4gMS4yMzQ1NjhFKzkgSW5leGFjdCBSb3VuZGVkCittdWx4MDk4IG11bHRpcGx5IDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzCittYXhleHBvbmVudDogOTk5OQorbWluZXhwb25lbnQ6IC05OTk5CitwcmVjaXNpb246IDMzCittdWx4MTAxIG11bHRpcGx5IDkgOSAgIC0+IDgxCittdWx4MTAyIG11bHRpcGx5IDkgOTAgICAtPiA4MTAKK211bHgxMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwCittdWx4MTA0IG11bHRpcGx5IDkgOTAwMCAgIC0+IDgxMDAwCittdWx4MTA1IG11bHRpcGx5IDkgOTAwMDAgICAtPiA4MTAwMDAKK211bHgxMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwCittdWx4MTA3IG11bHRpcGx5IDkgOTAwMDAwMCAgIC0+IDgxMDAwMDAwCittdWx4MTA4IG11bHRpcGx5IDkgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAKK211bHgxMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwCittdWx4MTEwIG11bHRpcGx5IDkgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwCittdWx4MTExIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAKK211bHgxMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwCittdWx4MTEzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwCittdWx4MTE0IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAKK211bHgxMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwCittdWx4MTE2IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwCittdWx4MTE3IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAKK211bHgxMTggbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTE5IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTIwIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKK211bHgxMjEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTIyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTIzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzCittdWx4MTMxIG11bHRpcGx5IDMgMyAgIC0+IDkKK211bHgxMzIgbXVsdGlwbHkgMyAzMCAgIC0+IDkwCittdWx4MTMzIG11bHRpcGx5IDMgMzAwICAgLT4gOTAwCittdWx4MTM0IG11bHRpcGx5IDMgMzAwMCAgIC0+IDkwMDAKK211bHgxMzUgbXVsdGlwbHkgMyAzMDAwMCAgIC0+IDkwMDAwCittdWx4MTM2IG11bHRpcGx5IDMgMzAwMDAwICAgLT4gOTAwMDAwCittdWx4MTM3IG11bHRpcGx5IDMgMzAwMDAwMCAgIC0+IDkwMDAwMDAKK211bHgxMzggbXVsdGlwbHkgMyAzMDAwMDAwMCAgIC0+IDkwMDAwMDAwCittdWx4MTM5IG11bHRpcGx5IDMgMzAwMDAwMDAwICAgLT4gOTAwMDAwMDAwCittdWx4MTQwIG11bHRpcGx5IDMgMzAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAKK211bHgxNDEgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwCittdWx4MTQyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwCittdWx4MTQzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAKK211bHgxNDQgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwCittdWx4MTQ1IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwCittdWx4MTQ2IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAKK211bHgxNDcgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwCittdWx4MTQ4IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTQ5IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAKK211bHgxNTAgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTUxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTUyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK211bHgxNTMgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDkKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdy91bmRlcmZsb3cKK211bHgxNzAgbXVsdGlwbHkgMSA5ZTk5OTk5OTk5OSAgICAtPiA5RSs5OTk5OTk5OTkKK211bHgxNzEgbXVsdGlwbHkgMSA5LjllOTk5OTk5OTk5ICAtPiA5LjlFKzk5OTk5OTk5OQorbXVseDE3MiBtdWx0aXBseSAxIDkuOTllOTk5OTk5OTk5IC0+IDkuOTlFKzk5OTk5OTk5OQorbXVseDE3MyBtdWx0aXBseSA5ZTk5OTk5OTk5OSAgICAxIC0+IDlFKzk5OTk5OTk5OQorbXVseDE3NCBtdWx0aXBseSA5LjllOTk5OTk5OTk5ICAxIC0+IDkuOUUrOTk5OTk5OTk5CittdWx4MTc2IG11bHRpcGx5IDkuOTllOTk5OTk5OTk5IDEgLT4gOS45OUUrOTk5OTk5OTk5CittdWx4MTc3IG11bHRpcGx5IDEgOS45OTk5OTk5OWU5OTk5OTk5OTkgLT4gOS45OTk5OTk5OUUrOTk5OTk5OTk5CittdWx4MTc4IG11bHRpcGx5IDkuOTk5OTk5OTllOTk5OTk5OTk5IDEgLT4gOS45OTk5OTk5OUUrOTk5OTk5OTk5CisKK211bHgxODAgbXVsdGlwbHkgMC4xIDllLTk5OTk5OTk5OCAgIC0+IDlFLTk5OTk5OTk5OQorbXVseDE4MSBtdWx0aXBseSAwLjEgOTllLTk5OTk5OTk5OCAgLT4gOS45RS05OTk5OTk5OTgKK211bHgxODIgbXVsdGlwbHkgMC4xIDk5OWUtOTk5OTk5OTk4IC0+IDkuOTlFLTk5OTk5OTk5NworCittdWx4MTgzIG11bHRpcGx5IDAuMSA5ZS05OTk5OTk5OTggICAgIC0+IDlFLTk5OTk5OTk5OQorbXVseDE4NCBtdWx0aXBseSAwLjEgOTllLTk5OTk5OTk5OCAgICAtPiA5LjlFLTk5OTk5OTk5OAorbXVseDE4NSBtdWx0aXBseSAwLjEgOTk5ZS05OTk5OTk5OTggICAtPiA5Ljk5RS05OTk5OTk5OTcKK211bHgxODYgbXVsdGlwbHkgMC4xIDk5OWUtOTk5OTk5OTk3ICAgLT4gOS45OUUtOTk5OTk5OTk2CittdWx4MTg3IG11bHRpcGx5IDAuMSA5OTk5ZS05OTk5OTk5OTcgIC0+IDkuOTk5RS05OTk5OTk5OTUKK211bHgxODggbXVsdGlwbHkgMC4xIDk5OTk5ZS05OTk5OTk5OTcgLT4gOS45OTk5RS05OTk5OTk5OTQKKworbXVseDE5MCBtdWx0aXBseSAxIDllLTk5OTk5OTk5OCAgIC0+IDlFLTk5OTk5OTk5OAorbXVseDE5MSBtdWx0aXBseSAxIDk5ZS05OTk5OTk5OTggIC0+IDkuOUUtOTk5OTk5OTk3CittdWx4MTkyIG11bHRpcGx5IDEgOTk5ZS05OTk5OTk5OTggLT4gOS45OUUtOTk5OTk5OTk2CittdWx4MTkzIG11bHRpcGx5IDllLTk5OTk5OTk5OCAgIDEgLT4gOUUtOTk5OTk5OTk4CittdWx4MTk0IG11bHRpcGx5IDk5ZS05OTk5OTk5OTggIDEgLT4gOS45RS05OTk5OTk5OTcKK211bHgxOTUgbXVsdGlwbHkgOTk5ZS05OTk5OTk5OTggMSAtPiA5Ljk5RS05OTk5OTk5OTYKKworbXVseDE5NiBtdWx0aXBseSAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwIC0+IDFFLTk5OTk5OTk5OQorbXVseDE5NyBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtMzk5OTk5OTk5IC0+IDFFLTk5OTk5OTk5OQorbXVseDE5OCBtdWx0aXBseSAxLjJlLTU5OTk5OTk5OSAxLjJlLTQwMDAwMDAwMCAtPiAxLjQ0RS05OTk5OTk5OTkKK211bHgxOTkgbXVsdGlwbHkgMS4yZS02MDAwMDAwMDAgMS4yZS0zOTk5OTk5OTkgLT4gMS40NEUtOTk5OTk5OTk5CisKK211bHgyMDEgbXVsdGlwbHkgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDAgLT4gMUUrOTk5OTk5OTk5CittdWx4MjAyIG11bHRpcGx5IDFlNjAwMDAwMDAwIDFlMzk5OTk5OTk5IC0+IDFFKzk5OTk5OTk5OQorbXVseDIwMyBtdWx0aXBseSAxLjJlNTk5OTk5OTk5IDEuMmU0MDAwMDAwMDAgLT4gMS40NEUrOTk5OTk5OTk5CittdWx4MjA0IG11bHRpcGx5IDEuMmU2MDAwMDAwMDAgMS4yZTM5OTk5OTk5OSAtPiAxLjQ0RSs5OTk5OTk5OTkKKworLS0gbG9uZyBvcGVyYW5kIHRyaWFuZ2xlCitwcmVjaXNpb246IDMzCittdWx4MjQ2IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgzMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzIKK211bHgyNDcgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyODMgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMQorbXVseDI0OCBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCittdWx4MjQ5IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MyAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjkKK211bHgyNTAgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOAorbXVseDI1MSBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTIwICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI3CittdWx4MjUyIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMiAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjYKK211bHgyNTMgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTEgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNQorbXVseDI1NCBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI0CittdWx4MjU1IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjMKK211bHgyNTYgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTIgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMgorbXVseDI1NyBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIxCittdWx4MjU4IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK211bHgyNTkgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOQorbXVseDI2MCBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk3ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE4CittdWx4MjYxIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM3MCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTcKK211bHgyNjIgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzcgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNgorbXVseDI2MyBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTM0ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE1CittdWx4MjY0IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MyAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTQKK211bHgyNjUgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMworbXVseDI2NiBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDEyICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEyCittdWx4MjY3IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMSAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTEKK211bHgyNjggbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMAorbXVseDI2OSBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4ICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA5CittdWx4MjcwIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDgKK211bHgyNzEgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNworbXVseDI3MiBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4zICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA2CittdWx4MjczIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNQorbXVseDI3NCBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDEuNDU0M0UrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDQKK211bHgyNzUgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxLjQ1NEUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMKK211bHgyNzYgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxLjQ1RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMgorbXVseDI3NyBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDEuNUUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDEKK211bHgyNzggbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxRSs1ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZworbWF4ZXhwb25lbnQ6IDk5OTkKK21pbmV4cG9uZW50OiAtOTk5OQorcHJlY2lzaW9uOiA5CittdWx4MzAxIG11bHRpcGx5IDkgOSAgIC0+IDgxCittdWx4MzAyIG11bHRpcGx5IDkgOTAgICAtPiA4MTAKK211bHgzMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwCittdWx4MzA0IG11bHRpcGx5IDkgOTAwMCAgIC0+IDgxMDAwCittdWx4MzA1IG11bHRpcGx5IDkgOTAwMDAgICAtPiA4MTAwMDAKK211bHgzMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwCittdWx4MzA3IG11bHRpcGx5IDkgOTAwMDAwMCAgIC0+IDgxMDAwMDAwCittdWx4MzA4IG11bHRpcGx5IDkgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAKK211bHgzMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSs5ICAgUm91bmRlZAorbXVseDMxMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSsxMCAgUm91bmRlZAorbXVseDMxMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTEgIFJvdW5kZWQKK211bHgzMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSsxMiAgUm91bmRlZAorbXVseDMxMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSsxMyAgUm91bmRlZAorbXVseDMxNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTQgIFJvdW5kZWQKK211bHgzMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSsxNSAgUm91bmRlZAorbXVseDMxNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSsxNiAgUm91bmRlZAorbXVseDMxNyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTcgIFJvdW5kZWQKK211bHgzMTggbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSsxOCAgUm91bmRlZAorbXVseDMxOSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSsxOSAgUm91bmRlZAorbXVseDMyMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMjAgIFJvdW5kZWQKK211bHgzMjEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSsyMSAgUm91bmRlZAorbXVseDMyMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwRSsyMiAgUm91bmRlZAorbXVseDMyMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMjMgIFJvdW5kZWQKKworLS0gZmFzdHBhdGggYnJlYWtlcnMKK3ByZWNpc2lvbjogICAyOQorbXVseDMzMCBtdWx0aXBseSAxLjQ5MTgyNDY5NzY0MTI3MDMxNzgyNDg1Mjk1MjgzNzIyNCAxLjEwNTE3MDkxODA3NTY0NzYyNDgxMTcwNzgyNjQ5MDI0NjUxNDY3NTYyODYxNDU2Mjg4MzUzNzM0NTc0NzYwMyAtPiAxLjY0ODcyMTI3MDcwMDEyODE0Njg0ODY1MDc4NzggSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNTUKK211bHgzMzEgbXVsdGlwbHkgMC44OTU4MzQxMzUyOTY1MjgyNTA2NzY4NTQ1ODI4NzY1MTE3ODAzODczNzE3Mjg0ODkxMDQwNDI4IDAuODk1ODM0MTM1Mjk2NTI4MjUwNjc2ODU0NTgyODc2NTExNzgwMzg3MzcxNzI4NDg5MTA0MDQyOCAtPiAwLjgwMjUxODc5Nzk2MjQ3ODQ4Mjk4NDI1NTM4Mjk5MzQwNjk5NTU4OTA5ODM2OTY3NTIyMjgyOTkgSW5leGFjdCBSb3VuZGVkCisKKworLS0gdHJ5emVyb3MgY2FzZXMKK3ByZWNpc2lvbjogICA3Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDkyCittaW5leHBvbmVudDogLTkyCittdWx4NTA0ICBtdWx0aXBseSAgMEUtNjAgMTAwMEUtNjAgIC0+IDBFLTk4IENsYW1wZWQKK211bHg1MDUgIG11bHRpcGx5ICAxMDBFKzYwIDBFKzYwICAgLT4gMEUrOTIgQ2xhbXBlZAorCistLSBtaXhlZCB3aXRoIHplcm9zCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiA5CittdWx4NTQxIG11bHRpcGx5ICAwICAgIC0xICAgICAtPiAtMAorbXVseDU0MiBtdWx0aXBseSAtMCAgICAtMSAgICAgLT4gIDAKK211bHg1NDMgbXVsdGlwbHkgIDAgICAgIDEgICAgIC0+ICAwCittdWx4NTQ0IG11bHRpcGx5IC0wICAgICAxICAgICAtPiAtMAorbXVseDU0NSBtdWx0aXBseSAtMSAgICAgMCAgICAgLT4gLTAKK211bHg1NDYgbXVsdGlwbHkgLTEgICAgLTAgICAgIC0+ICAwCittdWx4NTQ3IG11bHRpcGx5ICAxICAgICAwICAgICAtPiAgMAorbXVseDU0OCBtdWx0aXBseSAgMSAgICAtMCAgICAgLT4gLTAKKworbXVseDU1MSBtdWx0aXBseSAgMC4wICAtMSAgICAgLT4gLTAuMAorbXVseDU1MiBtdWx0aXBseSAtMC4wICAtMSAgICAgLT4gIDAuMAorbXVseDU1MyBtdWx0aXBseSAgMC4wICAgMSAgICAgLT4gIDAuMAorbXVseDU1NCBtdWx0aXBseSAtMC4wICAgMSAgICAgLT4gLTAuMAorbXVseDU1NSBtdWx0aXBseSAtMS4wICAgMCAgICAgLT4gLTAuMAorbXVseDU1NiBtdWx0aXBseSAtMS4wICAtMCAgICAgLT4gIDAuMAorbXVseDU1NyBtdWx0aXBseSAgMS4wICAgMCAgICAgLT4gIDAuMAorbXVseDU1OCBtdWx0aXBseSAgMS4wICAtMCAgICAgLT4gLTAuMAorCittdWx4NTYxIG11bHRpcGx5ICAwICAgIC0xLjAgICAtPiAtMC4wCittdWx4NTYyIG11bHRpcGx5IC0wICAgIC0xLjAgICAtPiAgMC4wCittdWx4NTYzIG11bHRpcGx5ICAwICAgICAxLjAgICAtPiAgMC4wCittdWx4NTY0IG11bHRpcGx5IC0wICAgICAxLjAgICAtPiAtMC4wCittdWx4NTY1IG11bHRpcGx5IC0xICAgICAwLjAgICAtPiAtMC4wCittdWx4NTY2IG11bHRpcGx5IC0xICAgIC0wLjAgICAtPiAgMC4wCittdWx4NTY3IG11bHRpcGx5ICAxICAgICAwLjAgICAtPiAgMC4wCittdWx4NTY4IG11bHRpcGx5ICAxICAgIC0wLjAgICAtPiAtMC4wCisKK211bHg1NzEgbXVsdGlwbHkgIDAuMCAgLTEuMCAgIC0+IC0wLjAwCittdWx4NTcyIG11bHRpcGx5IC0wLjAgIC0xLjAgICAtPiAgMC4wMAorbXVseDU3MyBtdWx0aXBseSAgMC4wICAgMS4wICAgLT4gIDAuMDAKK211bHg1NzQgbXVsdGlwbHkgLTAuMCAgIDEuMCAgIC0+IC0wLjAwCittdWx4NTc1IG11bHRpcGx5IC0xLjAgICAwLjAgICAtPiAtMC4wMAorbXVseDU3NiBtdWx0aXBseSAtMS4wICAtMC4wICAgLT4gIDAuMDAKK211bHg1NzcgbXVsdGlwbHkgIDEuMCAgIDAuMCAgIC0+ICAwLjAwCittdWx4NTc4IG11bHRpcGx5ICAxLjAgIC0wLjAgICAtPiAtMC4wMAorCisKKy0tIFNwZWNpYWxzCittdWx4NTgwIG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK211bHg1ODEgbXVsdGlwbHkgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorbXVseDU4MiBtdWx0aXBseSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CittdWx4NTgzIG11bHRpcGx5ICBJbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDU4NCBtdWx0aXBseSAgSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg1ODUgbXVsdGlwbHkgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorbXVseDU4NiBtdWx0aXBseSAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CittdWx4NTg3IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK211bHg1ODggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorbXVseDU4OSBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CittdWx4NTkwIG11bHRpcGx5IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkKK211bHg1OTEgbXVsdGlwbHkgLTAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NTkyIG11bHRpcGx5ICAwICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDU5MyBtdWx0aXBseSAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CittdWx4NTk0IG11bHRpcGx5ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK211bHg1OTUgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCittdWx4NjAwIG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK211bHg2MDEgbXVsdGlwbHkgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorbXVseDYwMiBtdWx0aXBseSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5CittdWx4NjAzIG11bHRpcGx5IC1JbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDYwNCBtdWx0aXBseSAtSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2MDUgbXVsdGlwbHkgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorbXVseDYwNiBtdWx0aXBseSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CittdWx4NjA3IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK211bHg2MDggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorbXVseDYwOSBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5CittdWx4NjEwIG11bHRpcGx5IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK211bHg2MTEgbXVsdGlwbHkgLTAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjEyIG11bHRpcGx5ICAwICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDYxMyBtdWx0aXBseSAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CittdWx4NjE0IG11bHRpcGx5ICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK211bHg2MTUgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCittdWx4NjIxIG11bHRpcGx5ICBOYU4gLUluZiAgICAtPiAgTmFOCittdWx4NjIyIG11bHRpcGx5ICBOYU4gLTEwMDAgICAtPiAgTmFOCittdWx4NjIzIG11bHRpcGx5ICBOYU4gLTEgICAgICAtPiAgTmFOCittdWx4NjI0IG11bHRpcGx5ICBOYU4gLTAgICAgICAtPiAgTmFOCittdWx4NjI1IG11bHRpcGx5ICBOYU4gIDAgICAgICAtPiAgTmFOCittdWx4NjI2IG11bHRpcGx5ICBOYU4gIDEgICAgICAtPiAgTmFOCittdWx4NjI3IG11bHRpcGx5ICBOYU4gIDEwMDAgICAtPiAgTmFOCittdWx4NjI4IG11bHRpcGx5ICBOYU4gIEluZiAgICAtPiAgTmFOCittdWx4NjI5IG11bHRpcGx5ICBOYU4gIE5hTiAgICAtPiAgTmFOCittdWx4NjMwIG11bHRpcGx5IC1JbmYgIE5hTiAgICAtPiAgTmFOCittdWx4NjMxIG11bHRpcGx5IC0xMDAwIE5hTiAgICAtPiAgTmFOCittdWx4NjMyIG11bHRpcGx5IC0xICAgIE5hTiAgICAtPiAgTmFOCittdWx4NjMzIG11bHRpcGx5IC0wICAgIE5hTiAgICAtPiAgTmFOCittdWx4NjM0IG11bHRpcGx5ICAwICAgIE5hTiAgICAtPiAgTmFOCittdWx4NjM1IG11bHRpcGx5ICAxICAgIE5hTiAgICAtPiAgTmFOCittdWx4NjM2IG11bHRpcGx5ICAxMDAwIE5hTiAgICAtPiAgTmFOCittdWx4NjM3IG11bHRpcGx5ICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK211bHg2NDEgbXVsdGlwbHkgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjQyIG11bHRpcGx5ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY0MyBtdWx0aXBseSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NDQgbXVsdGlwbHkgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjQ1IG11bHRpcGx5ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY0NiBtdWx0aXBseSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NDcgbXVsdGlwbHkgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjQ4IG11bHRpcGx5ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY0OSBtdWx0aXBseSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NTAgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjUxIG11bHRpcGx5IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY1MiBtdWx0aXBseSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NTMgbXVsdGlwbHkgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjU0IG11bHRpcGx5IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY1NSBtdWx0aXBseSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NTYgbXVsdGlwbHkgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjU3IG11bHRpcGx5ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY1OCBtdWx0aXBseSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NTkgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK211bHg2NjEgbXVsdGlwbHkgIE5hTjkgLUluZiAgIC0+ICBOYU45CittdWx4NjYyIG11bHRpcGx5ICBOYU44ICA5OTkgICAtPiAgTmFOOAorbXVseDY2MyBtdWx0aXBseSAgTmFONzEgSW5mICAgLT4gIE5hTjcxCittdWx4NjY0IG11bHRpcGx5ICBOYU42ICBOYU41ICAtPiAgTmFONgorbXVseDY2NSBtdWx0aXBseSAtSW5mICAgTmFONCAgLT4gIE5hTjQKK211bHg2NjYgbXVsdGlwbHkgLTk5OSAgIE5hTjMzIC0+ICBOYU4zMworbXVseDY2NyBtdWx0aXBseSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworbXVseDY3MSBtdWx0aXBseSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCittdWx4NjcyIG11bHRpcGx5ICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK211bHg2NzMgbXVsdGlwbHkgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY3NCBtdWx0aXBseSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCittdWx4Njc1IG11bHRpcGx5ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NzYgbXVsdGlwbHkgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY3NyBtdWx0aXBseSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCittdWx4Njc4IG11bHRpcGx5ICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NzkgbXVsdGlwbHkgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCittdWx4NjgxIG11bHRpcGx5IC1OYU45IC1JbmYgICAtPiAtTmFOOQorbXVseDY4MiBtdWx0aXBseSAtTmFOOCAgOTk5ICAgLT4gLU5hTjgKK211bHg2ODMgbXVsdGlwbHkgLU5hTjcxIEluZiAgIC0+IC1OYU43MQorbXVseDY4NCBtdWx0aXBseSAtTmFONiAtTmFONSAgLT4gLU5hTjYKK211bHg2ODUgbXVsdGlwbHkgLUluZiAgLU5hTjQgIC0+IC1OYU40CittdWx4Njg2IG11bHRpcGx5IC05OTkgIC1OYU4zMyAtPiAtTmFOMzMKK211bHg2ODcgbXVsdGlwbHkgIEluZiAgLU5hTjIgIC0+IC1OYU4yCisKK211bHg2OTEgbXVsdGlwbHkgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY5MiBtdWx0aXBseSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCittdWx4NjkzIG11bHRpcGx5IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK211bHg2OTQgbXVsdGlwbHkgLXNOYU4xNiAtc05hTjk0IC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY5NSBtdWx0aXBseSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCittdWx4Njk2IG11bHRpcGx5IC1JbmYgICAgLXNOYU45MiAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK211bHg2OTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY5OCBtdWx0aXBseSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCittdWx4Njk5IG11bHRpcGx5IC1OYU4gICAgLXNOYU44OSAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworbXVseDcwMSBtdWx0aXBseSAtTmFOICAtSW5mICAgLT4gLU5hTgorbXVseDcwMiBtdWx0aXBseSAtTmFOICAgOTk5ICAgLT4gLU5hTgorbXVseDcwMyBtdWx0aXBseSAtTmFOICAgSW5mICAgLT4gLU5hTgorbXVseDcwNCBtdWx0aXBseSAtTmFOICAtTmFOICAgLT4gLU5hTgorbXVseDcwNSBtdWx0aXBseSAtSW5mICAtTmFOMCAgLT4gLU5hTgorbXVseDcwNiBtdWx0aXBseSAtOTk5ICAtTmFOICAgLT4gLU5hTgorbXVseDcwNyBtdWx0aXBseSAgSW5mICAtTmFOICAgLT4gLU5hTgorCittdWx4NzExIG11bHRpcGx5IC1zTmFOICAgLUluZiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCittdWx4NzEyIG11bHRpcGx5IC1zTmFOICAgLTExICAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCittdWx4NzEzIG11bHRpcGx5IC1zTmFOMDAgIE5hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCittdWx4NzE0IG11bHRpcGx5IC1zTmFOICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCittdWx4NzE1IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCittdWx4NzE2IG11bHRpcGx5IC1JbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCittdWx4NzE3IG11bHRpcGx5ICAwODggICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCittdWx4NzE4IG11bHRpcGx5ICBJbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCittdWx4NzE5IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK211bHg3MzAgbXVsdGlwbHkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbXVseDczMSBtdWx0aXBseSA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCittdWx4NzMyIG11bHRpcGx5ICswLjEwMCA5RS05OTk5OTk5OTkgLT4gOS4wMEUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK211bHg3MzMgbXVsdGlwbHkgOUUtOTk5OTk5OTk5ICswLjEwMCAtPiA5LjAwRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorbXVseDczNSBtdWx0aXBseSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbXVseDczNiBtdWx0aXBseSA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbXVseDczNyBtdWx0aXBseSAtMC4xMDAgOUUtOTk5OTk5OTk5IC0+IC05LjAwRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorbXVseDczOCBtdWx0aXBseSA5RS05OTk5OTk5OTkgLTAuMTAwIC0+IC05LjAwRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorCittdWx4NzM5IG11bHRpcGx5IDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgLT4gMUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK211bHg3NDAgbXVsdGlwbHkgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAtPiAxRS05OTk5OTk5OTkKK211bHg3NDEgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMCAtPiAxRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorbXVseDc0MiBtdWx0aXBseSA5ZS05OTk5OTk5OTggMC4wMSAtPiA5RS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorbXVseDc0MyBtdWx0aXBseSA5ZS05OTk5OTk5OTggMC4xICAtPiA5RS05OTk5OTk5OTkKK211bHg3NDQgbXVsdGlwbHkgMC4wMSA5ZS05OTk5OTk5OTggLT4gOUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK211bHg3NDUgbXVsdGlwbHkgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDEgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittdWx4NzQ2IG11bHRpcGx5IDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwIC0+IDFFKzk5OTk5OTk5OQorbXVseDc0NyBtdWx0aXBseSAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NDggbXVsdGlwbHkgOWU5OTk5OTk5OTggMTAwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NDkgbXVsdGlwbHkgOWU5OTk5OTk5OTggMTAgICAtPiA5LjBFKzk5OTk5OTk5OQorbXVseDc1MCBtdWx0aXBseSAxMDAgIDllOTk5OTk5OTk4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorLS0gc2lnbnMKK211bHg3NTEgbXVsdGlwbHkgIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NTIgbXVsdGlwbHkgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NTMgbXVsdGlwbHkgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NTQgbXVsdGlwbHkgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NTUgbXVsdGlwbHkgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg3NTYgbXVsdGlwbHkgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg3NTcgbXVsdGlwbHkgLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg3NTggbXVsdGlwbHkgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitwcmVjaXNpb246IDkKK211bHg3NjAgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMSAtPiAxRS0xMDAwMDAwMDAxIFN1Ym5vcm1hbAorbXVseDc2MSBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAyIC0+IDFFLTEwMDAwMDAwMDIgU3Vibm9ybWFsCittdWx4NzYyIG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDMgLT4gMUUtMTAwMDAwMDAwMyBTdWJub3JtYWwKK211bHg3NjMgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwNCAtPiAxRS0xMDAwMDAwMDA0IFN1Ym5vcm1hbAorbXVseDc2NCBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDA1IC0+IDFFLTEwMDAwMDAwMDUgU3Vibm9ybWFsCittdWx4NzY1IG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDYgLT4gMUUtMTAwMDAwMDAwNiBTdWJub3JtYWwKK211bHg3NjYgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwNyAtPiAxRS0xMDAwMDAwMDA3IFN1Ym5vcm1hbAorbXVseDc2NyBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDA4IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbXVseDc2OCBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDA5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbXVseDc2OSBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDEwIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorbXVseDc3MCBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDAxIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc3MSBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDAyIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc3MiBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDAzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc3MyBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDA0IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc3NCBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc3NSBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDA2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc3NiBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc3NyBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc3OCBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDA5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc3OSBtdWx0aXBseSAxZSs2MDAwMDAwMDAgMWUrNDAwMDAwMDEwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSAnc3Vibm9ybWFsJyB0ZXN0IGVkZ2UgY29uZGl0aW9uIGF0IGhpZ2hlciBwcmVjaXNpb25zCitwcmVjaXNpb246IDk5CittdWx4NzgwIG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDcgLT4gMUUtMTAwMDAwMDAwNyBTdWJub3JtYWwKK211bHg3ODEgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwOCAtPiAxRS0xMDAwMDAwMDA4IFN1Ym5vcm1hbAorbXVseDc4MiBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDk3IC0+IDFFLTEwMDAwMDAwOTcgU3Vibm9ybWFsCittdWx4NzgzIG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwOTggLT4gMEUtMTAwMDAwMDA5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwcmVjaXNpb246IDk5OQorbXVseDc4NCBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwOTk3IC0+IDFFLTEwMDAwMDA5OTcgU3Vibm9ybWFsCittdWx4Nzg1IG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDA5OTggLT4gMEUtMTAwMDAwMDk5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIGZvbGxvd2luZyB0ZXN0Y2FzZXMgW3Rocm91Z2ggbXVseDgwMF0gbm90IHlldCBydW4gYWdhaW5zdCBjb2RlCitwcmVjaXNpb246IDk5OTkKK211bHg3ODYgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwOTk5NyAtPiAxRS0xMDAwMDA5OTk3IFN1Ym5vcm1hbAorbXVseDc4NyBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDA5OTk4IC0+IDBFLTEwMDAwMDk5OTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcHJlY2lzaW9uOiA5OTk5OQorbXVseDc4OCBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDk5OTk3IC0+IDFFLTEwMDAwOTk5OTcgU3Vibm9ybWFsCittdWx4Nzg5IG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwOTk5OTggLT4gMEUtMTAwMDA5OTk5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwcmVjaXNpb246IDk5OTk5OQorbXVseDc5MCBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwOTk5OTk3IC0+IDFFLTEwMDA5OTk5OTcgU3Vibm9ybWFsCittdWx4NzkxIG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDA5OTk5OTggLT4gMEUtMTAwMDk5OTk5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwcmVjaXNpb246IDk5OTk5OTkKK211bHg3OTIgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwOTk5OTk5NyAtPiAxRS0xMDA5OTk5OTk3IFN1Ym5vcm1hbAorbXVseDc5MyBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDA5OTk5OTk4IC0+IDBFLTEwMDk5OTk5OTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcHJlY2lzaW9uOiA5OTk5OTk5OQorbXVseDc5NCBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDk5OTk5OTk3IC0+IDFFLTEwOTk5OTk5OTcgU3Vibm9ybWFsCittdWx4Nzk1IG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00OTk5OTk5OTggLT4gMEUtMTA5OTk5OTk5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwcmVjaXNpb246IDk5OTk5OTk5OQorbXVseDc5NiBtdWx0aXBseSAxZS05OTk5OTk5OTkgMWUtOTk5OTk5OTk3IC0+IDFFLTE5OTk5OTk5OTYgU3Vibm9ybWFsCittdWx4Nzk3IG11bHRpcGx5IDFlLTk5OTk5OTk5OSAxZS05OTk5OTk5OTggLT4gMUUtMTk5OTk5OTk5NyBTdWJub3JtYWwKK211bHg3OTggbXVsdGlwbHkgMWUtOTk5OTk5OTk5IDFlLTk5OTk5OTk5OSAtPiAwRS0xOTk5OTk5OTk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg3OTkgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwNyAtPiAxRS0xMDAwMDAwMDA3IFN1Ym5vcm1hbAorbXVseDgwMCBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDA4IC0+IDFFLTEwMDAwMDAwMDggU3Vibm9ybWFsCisKKy0tIHRlc3Qgc3Vibm9ybWFscyByb3VuZGluZworcHJlY2lzaW9uOiAgIDUKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5Cityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK211bHg4MDEgbXVsdGlwbHkgIDEuMDAwMEUtOTk5ICAxICAgICAtPiAxLjAwMDBFLTk5OQorbXVseDgwMiBtdWx0aXBseSAgMS4wMDBFLTk5OSAgIDFlLTEgIC0+IDEuMDAwRS0xMDAwIFN1Ym5vcm1hbAorbXVseDgwMyBtdWx0aXBseSAgMS4wMEUtOTk5ICAgIDFlLTIgIC0+IDEuMDBFLTEwMDEgIFN1Ym5vcm1hbAorbXVseDgwNCBtdWx0aXBseSAgMS4wRS05OTkgICAgIDFlLTMgIC0+IDEuMEUtMTAwMiAgIFN1Ym5vcm1hbAorbXVseDgwNSBtdWx0aXBseSAgMS4wRS05OTkgICAgIDFlLTQgIC0+IDFFLTEwMDMgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCittdWx4ODA2IG11bHRpcGx5ICAxLjNFLTk5OSAgICAgMWUtNCAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MDcgbXVsdGlwbHkgIDEuNUUtOTk5ICAgICAxZS00ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgwOCBtdWx0aXBseSAgMS43RS05OTkgICAgIDFlLTQgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODA5IG11bHRpcGx5ICAyLjNFLTk5OSAgICAgMWUtNCAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MTAgbXVsdGlwbHkgIDIuNUUtOTk5ICAgICAxZS00ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgxMSBtdWx0aXBseSAgMi43RS05OTkgICAgIDFlLTQgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODEyIG11bHRpcGx5ICAxLjQ5RS05OTkgICAgMWUtNCAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MTMgbXVsdGlwbHkgIDEuNTBFLTk5OSAgICAxZS00ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgxNCBtdWx0aXBseSAgMS41MUUtOTk5ICAgIDFlLTQgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODE1IG11bHRpcGx5ICAyLjQ5RS05OTkgICAgMWUtNCAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MTYgbXVsdGlwbHkgIDIuNTBFLTk5OSAgICAxZS00ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgxNyBtdWx0aXBseSAgMi41MUUtOTk5ICAgIDFlLTQgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK211bHg4MTggbXVsdGlwbHkgIDFFLTk5OSAgICAgICAxZS00ICAtPiAxRS0xMDAzICAgICBTdWJub3JtYWwKK211bHg4MTkgbXVsdGlwbHkgIDNFLTk5OSAgICAgICAxZS01ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCittdWx4ODIwIG11bHRpcGx5ICA1RS05OTkgICAgICAgMWUtNSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbXVseDgyMSBtdWx0aXBseSAgN0UtOTk5ICAgICAgIDFlLTUgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODIyIG11bHRpcGx5ICA5RS05OTkgICAgICAgMWUtNSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MjMgbXVsdGlwbHkgIDkuOUUtOTk5ICAgICAxZS01ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCittdWx4ODI0IG11bHRpcGx5ICAxRS05OTkgICAgICAtMWUtNCAgLT4gLTFFLTEwMDMgICAgU3Vibm9ybWFsCittdWx4ODI1IG11bHRpcGx5ICAzRS05OTkgICAgICAtMWUtNSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbXVseDgyNiBtdWx0aXBseSAtNUUtOTk5ICAgICAgIDFlLTUgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg4MjcgbXVsdGlwbHkgIDdFLTk5OSAgICAgIC0xZS01ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgyOCBtdWx0aXBseSAtOUUtOTk5ICAgICAgIDFlLTUgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODI5IG11bHRpcGx5ICA5LjlFLTk5OSAgICAtMWUtNSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MzAgbXVsdGlwbHkgIDMuMEUtOTk5ICAgIC0xZS01ICAtPiAtMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK211bHg4MzEgbXVsdGlwbHkgIDEuMEUtNTAxICAgICAxZS01MDEgLT4gMS4wRS0xMDAyICAgU3Vibm9ybWFsCittdWx4ODMyIG11bHRpcGx5ICAyLjBFLTUwMSAgICAgMmUtNTAxIC0+IDQuMEUtMTAwMiAgIFN1Ym5vcm1hbAorbXVseDgzMyBtdWx0aXBseSAgNC4wRS01MDEgICAgIDRlLTUwMSAtPiAxLjYwRS0xMDAxICBTdWJub3JtYWwKK211bHg4MzQgbXVsdGlwbHkgMTAuMEUtNTAxICAgIDEwZS01MDEgLT4gMS4wMDBFLTEwMDAgU3Vibm9ybWFsCittdWx4ODM1IG11bHRpcGx5IDMwLjBFLTUwMSAgICAzMGUtNTAxIC0+IDkuMDAwRS0xMDAwIFN1Ym5vcm1hbAorbXVseDgzNiBtdWx0aXBseSA0MC4wRS01MDEgICAgNDBlLTUwMSAtPiAxLjYwMDBFLTk5OQorCistLSBzcXVhcmVzCittdWx4ODQwIG11bHRpcGx5ICAxRS01MDIgICAgICAgMWUtNTAyIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg4NDEgbXVsdGlwbHkgIDFFLTUwMSAgICAgICAxZS01MDEgLT4gMUUtMTAwMiAgICAgU3Vibm9ybWFsCittdWx4ODQyIG11bHRpcGx5ICAyRS01MDEgICAgICAgMmUtNTAxIC0+IDRFLTEwMDIgICAgIFN1Ym5vcm1hbAorbXVseDg0MyBtdWx0aXBseSAgNEUtNTAxICAgICAgIDRlLTUwMSAtPiAxLjZFLTEwMDEgICBTdWJub3JtYWwKK211bHg4NDQgbXVsdGlwbHkgMTBFLTUwMSAgICAgIDEwZS01MDEgLT4gMS4wMEUtMTAwMCAgU3Vibm9ybWFsCittdWx4ODQ1IG11bHRpcGx5IDMwRS01MDEgICAgICAzMGUtNTAxIC0+IDkuMDBFLTEwMDAgIFN1Ym5vcm1hbAorbXVseDg0NiBtdWx0aXBseSA0MEUtNTAxICAgICAgNDBlLTUwMSAtPiAxLjYwMEUtOTk5CisKKy0tIGN1YmVzCittdWx4ODUwIG11bHRpcGx5ICAxRS02NzAgICAgIDFlLTMzNSAtPiAwRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg4NTEgbXVsdGlwbHkgIDFFLTY2OCAgICAgMWUtMzM0IC0+IDFFLTEwMDIgICAgU3Vibm9ybWFsCittdWx4ODUyIG11bHRpcGx5ICA0RS02NjggICAgIDJlLTMzNCAtPiA4RS0xMDAyICAgIFN1Ym5vcm1hbAorbXVseDg1MyBtdWx0aXBseSAgOUUtNjY4ICAgICAzZS0zMzQgLT4gMi43RS0xMDAxICBTdWJub3JtYWwKK211bHg4NTQgbXVsdGlwbHkgMTZFLTY2OCAgICAgNGUtMzM0IC0+IDYuNEUtMTAwMSAgU3Vibm9ybWFsCittdWx4ODU1IG11bHRpcGx5IDI1RS02NjggICAgIDVlLTMzNCAtPiAxLjI1RS0xMDAwIFN1Ym5vcm1hbAorbXVseDg1NiBtdWx0aXBseSAxMEUtNjY4ICAgMTAwZS0zMzQgLT4gMS4wMDBFLTk5OQorCistLSB0ZXN0IGRlcml2ZWQgZnJvbSByZXN1bHQgb2YgMC4wOTkgKiogOTk5IGF0IDE1IGRpZ2l0cyB3aXRoIHVubGltaXRlZCBleHBvbmVudAorcHJlY2lzaW9uOiAxOQorbXVseDg2MCBtdWx0aXBseSAgNjYzNjg1MTU1Nzk5NDU3ODcxNkUtNTIwIDY2MzY4NTE1NTc5OTQ1Nzg3MTZFLTUyMCAtPiA0LjQwNDc3OTg2MDI4NTUxRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aAorcHJlY2lzaW9uOiAzCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorbXVseDg3MCBtdWx0aXBseSAxICA5Ljk5OUUrOTk5OTk5OTk5ICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbXVseDg3MSBtdWx0aXBseSAxIC05Ljk5OUUrOTk5OTk5OTk5ICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbXVseDg3MiBtdWx0aXBseSAgICA5Ljk5OUUrOTk5OTk5OTk5IDEgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbXVseDg3MyBtdWx0aXBseSAgIC05Ljk5OUUrOTk5OTk5OTk5IDEgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworcHJlY2lzaW9uOiAgIDUKK21heGV4cG9uZW50OiA3OQorbWluZXhwb25lbnQ6IC03OQorbXVseDg4MSBtdWx0aXBseSAgMS4yMzQ3RS00MCAgMS4yMzQ3RS00MCAgLT4gIDEuNTI0RS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK211bHg4ODIgbXVsdGlwbHkgIDEuMjM0RS00MCAgMS4yMzRFLTQwICAgIC0+ICAxLjUyM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittdWx4ODgzIG11bHRpcGx5ICAxLjIzRS00MCAgIDEuMjNFLTQwICAgICAtPiAgMS41MTNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXVseDg4NCBtdWx0aXBseSAgMS4yRS00MCAgICAxLjJFLTQwICAgICAgLT4gIDEuNDRFLTgwICAgU3Vibm9ybWFsCittdWx4ODg1IG11bHRpcGx5ICAxLjJFLTQwICAgIDEuMkUtNDEgICAgICAtPiAgMS40NEUtODEgICBTdWJub3JtYWwKK211bHg4ODYgbXVsdGlwbHkgIDEuMkUtNDAgICAgMS4yRS00MiAgICAgIC0+ICAxLjRFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CittdWx4ODg3IG11bHRpcGx5ICAxLjJFLTQwICAgIDEuM0UtNDIgICAgICAtPiAgMS42RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworbXVseDg4OCBtdWx0aXBseSAgMS4zRS00MCAgICAxLjNFLTQyICAgICAgLT4gIDEuN0UtODIgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK211bHg4ODkgbXVsdGlwbHkgIDEuM0UtNDAgICAgMS4zRS00MyAgICAgIC0+ICAgIDJFLTgzICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CittdWx4ODkwIG11bHRpcGx5ICAxLjNFLTQxICAgIDEuM0UtNDMgICAgICAtPiAgICAwRS04MyAgICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK211bHg4OTEgbXVsdGlwbHkgIDEuMjM0NUUtMzkgICAxLjIzNEUtNDAgIC0+ICAxLjUyMzRFLTc5IEluZXhhY3QgUm91bmRlZAorbXVseDg5MiBtdWx0aXBseSAgMS4yMzQ1NkUtMzkgIDEuMjM0RS00MCAgLT4gIDEuNTIzNEUtNzkgSW5leGFjdCBSb3VuZGVkCittdWx4ODkzIG11bHRpcGx5ICAxLjIzNDVFLTQwICAgMS4yMzRFLTQwICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXVseDg5NCBtdWx0aXBseSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS00MCAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK211bHg4OTUgbXVsdGlwbHkgIDEuMjM0NUUtNDEgICAxLjIzNEUtNDAgIC0+ICAxLjUyRS04MSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittdWx4ODk2IG11bHRpcGx5ICAxLjIzNDU2RS00MSAgMS4yMzRFLTQwICAtPiAgMS41MkUtODEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93CitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCittdWx4OTAwIG11bHRpcGx5ICAwLjMwMDAwMDAwMDBFLTE5MSAwLjMwMDAwMDAwMDBFLTE5MSAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQKK211bHg5MDEgbXVsdGlwbHkgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxIC0+IDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorbXVseDkwMiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCittdWx4OTAzIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK211bHg5MDQgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5ICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorbXVseDkwNSBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCistLSBwcm92ZSBvcGVyYW5kcyBhcmUgZXhhY3QKK211bHg5MDYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS0zODMKK211bHg5MDcgbXVsdGlwbHkgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkKKy0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluCittdWx4OTA4IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCittdWx4OTA5IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCittdWx4OTEwIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTkgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCittdWx4OTExIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCisKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCittdWx4MTAwMSAgbXVsdGlwbHkgMTMwRS0yICAxMjBFLTIgLT4gMS41NjAwCittdWx4MTAwMiAgbXVsdGlwbHkgMTMwRS0yICAxMkUtMSAgLT4gMS41NjAKK211bHgxMDAzICBtdWx0aXBseSAxMzBFLTIgIDFFMCAgICAtPiAxLjMwCittdWx4MTAwNCAgbXVsdGlwbHkgMUUyICAgICAxRTQgICAgLT4gMUUrNgorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUKK3ByZWNpc2lvbjogNQorbXVseDEwMTAgIG11bHRpcGx5IDExIC1zTmFOMTIzNDU2Nzg5MCAtPiAtTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK211bHg5OTAgbXVsdGlwbHkgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCittdWx4OTkxIG11bHRpcGx5ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHRtaW51cy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0bWludXMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzFjNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0bWludXMuZGVjVGVzdApAQCAtMCwwICsxLDE0OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBuZXh0bWludXMuZGVjVGVzdCAtLSBkZWNpbWFsIG5leHQgdGhhdCBpcyBsZXNzIFs3NTRyIG5leHRkb3duXSAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK25leHRtMDAxIG5leHRtaW51cyAgMC45OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5NAorbmV4dG0wMDIgbmV4dG1pbnVzICAwLjk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk1CituZXh0bTAwMyBuZXh0bWludXMgIDAuOTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTYKK25leHRtMDA0IG5leHRtaW51cyAgMC45OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5NworbmV4dG0wMDUgbmV4dG1pbnVzICAwLjk5OTk5OTk5OSAtPiAgIDAuOTk5OTk5OTk4CituZXh0bTAwNiBuZXh0bWludXMgIDEuMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTkKK25leHRtMDA3IG5leHRtaW51cyAgMS4wICAgICAgICAgLT4gICAwLjk5OTk5OTk5OQorbmV4dG0wMDggbmV4dG1pbnVzICAxICAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5CituZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMAorbmV4dG0wMTAgbmV4dG1pbnVzICAxLjAwMDAwMDAyICAtPiAgIDEuMDAwMDAwMDEKK25leHRtMDExIG5leHRtaW51cyAgMS4wMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAyCituZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMworbmV4dG0wMTMgbmV4dG1pbnVzICAxLjAwMDAwMDA1ICAtPiAgIDEuMDAwMDAwMDQKK25leHRtMDE0IG5leHRtaW51cyAgMS4wMDAwMDAwNiAgLT4gICAxLjAwMDAwMDA1CituZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwNgorbmV4dG0wMTYgbmV4dG1pbnVzICAxLjAwMDAwMDA4ICAtPiAgIDEuMDAwMDAwMDcKK25leHRtMDE3IG5leHRtaW51cyAgMS4wMDAwMDAwOSAgLT4gICAxLjAwMDAwMDA4CituZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwOQorbmV4dG0wMTkgbmV4dG1pbnVzICAxLjAwMDAwMDExICAtPiAgIDEuMDAwMDAwMTAKK25leHRtMDIwIG5leHRtaW51cyAgMS4wMDAwMDAxMiAgLT4gICAxLjAwMDAwMDExCisKK25leHRtMDIxIG5leHRtaW51cyAtMC45OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5NgorbmV4dG0wMjIgbmV4dG1pbnVzIC0wLjk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk3CituZXh0bTAyMyBuZXh0bWludXMgLTAuOTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTgKK25leHRtMDI0IG5leHRtaW51cyAtMC45OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OQorbmV4dG0wMjUgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OSAtPiAgLTEuMDAwMDAwMDAKK25leHRtMDI2IG5leHRtaW51cyAtMS4wMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAxCituZXh0bTAyNyBuZXh0bWludXMgLTEuMCAgICAgICAgIC0+ICAtMS4wMDAwMDAwMQorbmV4dG0wMjggbmV4dG1pbnVzIC0xICAgICAgICAgICAtPiAgLTEuMDAwMDAwMDEKK25leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAyCituZXh0bTAzMCBuZXh0bWludXMgLTEuMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMworbmV4dG0wMzEgbmV4dG1pbnVzIC0xLjAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDQKK25leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDA1CituZXh0bTAzMyBuZXh0bWludXMgLTEuMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwNgorbmV4dG0wMzQgbmV4dG1pbnVzIC0xLjAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDcKK25leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDA4CituZXh0bTAzNiBuZXh0bWludXMgLTEuMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwOQorbmV4dG0wMzcgbmV4dG1pbnVzIC0xLjAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMTAKK25leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDExCituZXh0bTAzOSBuZXh0bWludXMgLTEuMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAxMgorCistLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24KK25leHRtMDQxIG5leHRtaW51cyAgMS4wMDAwMDAxMDk5OCAgLT4gICAxLjAwMDAwMDEwCituZXh0bTA0MiBuZXh0bWludXMgIDEuMDAwMDAwMTA5OTkgIC0+ICAgMS4wMDAwMDAxMAorbmV4dG0wNDMgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAwICAtPiAgIDEuMDAwMDAwMTAKK25leHRtMDQ0IG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMSAgLT4gICAxLjAwMDAwMDExCituZXh0bTA0NSBuZXh0bWludXMgIDEuMDAwMDAwMTEwMDIgIC0+ICAgMS4wMDAwMDAxMQorbmV4dG0wNDYgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTEKK25leHRtMDQ3IG5leHRtaW51cyAgMS4wMDAwMDAxMTA1MiAgLT4gICAxLjAwMDAwMDExCituZXh0bTA0OCBuZXh0bWludXMgIDEuMDAwMDAwMTE1NTIgIC0+ICAgMS4wMDAwMDAxMQorbmV4dG0wNDkgbmV4dG1pbnVzIC0xLjAwMDAwMDEwOTk4ICAtPiAgLTEuMDAwMDAwMTEKK25leHRtMDUwIG5leHRtaW51cyAtMS4wMDAwMDAxMDk5OSAgLT4gIC0xLjAwMDAwMDExCituZXh0bTA1MSBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDAgIC0+ICAtMS4wMDAwMDAxMgorbmV4dG0wNTIgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAxICAtPiAgLTEuMDAwMDAwMTIKK25leHRtMDUzIG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDEyCituZXh0bTA1NCBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMgorbmV4dG0wNTUgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDUyICAtPiAgLTEuMDAwMDAwMTIKK25leHRtMDU2IG5leHRtaW51cyAtMS4wMDAwMDAxMTU1MiAgLT4gIC0xLjAwMDAwMDEyCistLSB1bHRyYS10aW55IGlucHV0cworbmV4dG0wNjAgbmV4dG1pbnVzICAxRS05OTk5OSAgICAgICAtPiAgIDBFLTM5MQorbmV4dG0wNjEgbmV4dG1pbnVzICAxRS05OTk5OTk5OTkgICAtPiAgIDBFLTM5MQorbmV4dG0wNjIgbmV4dG1pbnVzICAxRS0zOTEgICAgICAgICAtPiAgIDBFLTM5MQorbmV4dG0wNjMgbmV4dG1pbnVzIC0xRS05OTk5OSAgICAgICAtPiAgLTFFLTM5MQorbmV4dG0wNjQgbmV4dG1pbnVzIC0xRS05OTk5OTk5OTkgICAtPiAgLTFFLTM5MQorbmV4dG0wNjUgbmV4dG1pbnVzIC0xRS0zOTEgICAgICAgICAtPiAgLTJFLTM5MQorCistLSBaZXJvcworbmV4dG0xMDAgbmV4dG1pbnVzIC0wICAgICAgICAgICAtPiAtMUUtMzkxCituZXh0bTEwMSBuZXh0bWludXMgIDAgICAgICAgICAgIC0+IC0xRS0zOTEKK25leHRtMTAyIG5leHRtaW51cyAgMC4wMCAgICAgICAgLT4gLTFFLTM5MQorbmV4dG0xMDMgbmV4dG1pbnVzIC0wLjAwICAgICAgICAtPiAtMUUtMzkxCituZXh0bTEwNCBuZXh0bWludXMgIDBFLTMwMCAgICAgIC0+IC0xRS0zOTEKK25leHRtMTA1IG5leHRtaW51cyAgMEUrMzAwICAgICAgLT4gLTFFLTM5MQorbmV4dG0xMDYgbmV4dG1pbnVzICAwRSszMDAwMCAgICAtPiAtMUUtMzkxCituZXh0bTEwNyBuZXh0bWludXMgLTBFKzMwMDAwICAgIC0+IC0xRS0zOTEKKworcHJlY2lzaW9uOiA5CittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorLS0gc3BlY2lhbHMKK25leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OUUrOTk5CituZXh0bTE1MSBuZXh0bWludXMgIC1JbmYgICAgLT4gLUluZmluaXR5CituZXh0bTE1MiBuZXh0bWludXMgICBOYU4gICAgLT4gIE5hTgorbmV4dG0xNTMgbmV4dG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dG0xNTQgbmV4dG1pbnVzICAgTmFONzcgIC0+ICBOYU43NworbmV4dG0xNTUgbmV4dG1pbnVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorbmV4dG0xNTYgbmV4dG1pbnVzICAtTmFOICAgIC0+IC1OYU4KK25leHRtMTU3IG5leHRtaW51cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHRtMTU4IG5leHRtaW51cyAgLU5hTjc3ICAtPiAtTmFONzcKK25leHRtMTU5IG5leHRtaW51cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK25leHRtMTcwIG5leHRtaW51cyAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOS45OTk5OTk5OEUrOTk5CituZXh0bTE3MSBuZXh0bWludXMgIDkuOTk5OTk5OThFKzk5OSAgIC0+IDkuOTk5OTk5OTdFKzk5OQorbmV4dG0xNzIgbmV4dG1pbnVzICAxRS05OTkgICAgICAgICAgICAtPiA5Ljk5OTk5OTlFLTEwMDAKK25leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gOS45OTk5OTk5RS0xMDAwCituZXh0bTE3NCBuZXh0bWludXMgIDlFLTEwMDcgICAgICAgICAgIC0+IDhFLTEwMDcKK25leHRtMTc1IG5leHRtaW51cyAgOS45RS0xMDA2ICAgICAgICAgLT4gOS44RS0xMDA2CituZXh0bTE3NiBuZXh0bWludXMgIDkuOTk5OUUtMTAwMyAgICAgIC0+IDkuOTk5OEUtMTAwMworbmV4dG0xNzcgbmV4dG1pbnVzICA5Ljk5OTk5OTlFLTEwMDAgICAtPiA5Ljk5OTk5OThFLTEwMDAKK25leHRtMTc4IG5leHRtaW51cyAgOS45OTk5OTk4RS0xMDAwICAgLT4gOS45OTk5OTk3RS0xMDAwCituZXh0bTE3OSBuZXh0bWludXMgIDkuOTk5OTk5N0UtMTAwMCAgIC0+IDkuOTk5OTk5NkUtMTAwMAorbmV4dG0xODAgbmV4dG1pbnVzICAwRS0xMDA3ICAgICAgICAgICAtPiAtMUUtMTAwNworbmV4dG0xODEgbmV4dG1pbnVzICAxRS0xMDA3ICAgICAgICAgICAtPiAwRS0xMDA3CituZXh0bTE4MiBuZXh0bWludXMgIDJFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcKKworbmV4dG0xODMgbmV4dG1pbnVzICAtMEUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNworbmV4dG0xODQgbmV4dG1pbnVzICAtMUUtMTAwNyAgICAgICAgICAtPiAtMkUtMTAwNworbmV4dG0xODUgbmV4dG1pbnVzICAtMkUtMTAwNyAgICAgICAgICAtPiAtM0UtMTAwNworbmV4dG0xODYgbmV4dG1pbnVzICAtMTBFLTEwMDcgICAgICAgICAtPiAtMS4xRS0xMDA2CituZXh0bTE4NyBuZXh0bWludXMgIC0xMDBFLTEwMDcgICAgICAgIC0+IC0xLjAxRS0xMDA1CituZXh0bTE4OCBuZXh0bWludXMgIC0xMDAwMDBFLTEwMDcgICAgIC0+IC0xLjAwMDAxRS0xMDAyCituZXh0bTE4OSBuZXh0bWludXMgIC0xLjAwMDBFLTk5OSAgICAgIC0+IC0xLjAwMDAwMDAxRS05OTkKK25leHRtMTkwIG5leHRtaW51cyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTEuMDAwMDAwMDFFLTk5OQorbmV4dG0xOTEgbmV4dG1pbnVzICAtMUUtOTk5ICAgICAgICAgICAtPiAtMS4wMDAwMDAwMUUtOTk5CituZXh0bTE5MiBuZXh0bWludXMgIC05Ljk5OTk5OTk4RSs5OTkgIC0+IC05Ljk5OTk5OTk5RSs5OTkKK25leHRtMTkzIG5leHRtaW51cyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLUluZmluaXR5CisKKy0tIE51bGwgdGVzdHMKK25leHRtOTAwIG5leHRtaW51cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0cGx1cy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0cGx1cy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NmUzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHRwbHVzLmRlY1Rlc3QKQEAgLTAsMCArMSwxNTAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbmV4dHBsdXMuZGVjVGVzdCAtLSBkZWNpbWFsIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCituZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5NgorbmV4dHAwMDIgbmV4dHBsdXMgIDAuOTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTcKK25leHRwMDAzIG5leHRwbHVzICAwLjk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk4CituZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OQorbmV4dHAwMDUgbmV4dHBsdXMgIDAuOTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMAorbmV4dHAwMDYgbmV4dHBsdXMgIDEuMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMQorbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMQorbmV4dHAwMDggbmV4dHBsdXMgIDEgICAgICAgICAgIC0+ICAgMS4wMDAwMDAwMQorbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMgorbmV4dHAwMTAgbmV4dHBsdXMgIDEuMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMworbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwNAorbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwNQorbmV4dHAwMTMgbmV4dHBsdXMgIDEuMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwNgorbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwNworbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwOAorbmV4dHAwMTYgbmV4dHBsdXMgIDEuMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwOQorbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAxMAorbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAxMQorbmV4dHAwMTkgbmV4dHBsdXMgIDEuMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAxMgorCituZXh0cDAyMSBuZXh0cGx1cyAtMC45OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5NAorbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTUKK25leHRwMDIzIG5leHRwbHVzIC0wLjk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk2CituZXh0cDAyNCBuZXh0cGx1cyAtMC45OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5NworbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5IC0+ICAtMC45OTk5OTk5OTgKK25leHRwMDI2IG5leHRwbHVzIC0xLjAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5CituZXh0cDAyNyBuZXh0cGx1cyAtMS4wICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OQorbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTkKK25leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAKK25leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDEKK25leHRwMDMxIG5leHRwbHVzIC0xLjAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDIKK25leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDMKK25leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDQKK25leHRwMDM0IG5leHRwbHVzIC0xLjAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDUKK25leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDYKK25leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDcKK25leHRwMDM3IG5leHRwbHVzIC0xLjAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDgKK25leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDkKK25leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDExICAtPiAgLTEuMDAwMDAwMTAKK25leHRwMDQwIG5leHRwbHVzIC0xLjAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMTEKKworLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uCituZXh0cDA0MSBuZXh0cGx1cyAgMS4wMDAwMDAxMDk5OCAgLT4gICAxLjAwMDAwMDExCituZXh0cDA0MiBuZXh0cGx1cyAgMS4wMDAwMDAxMDk5OSAgLT4gICAxLjAwMDAwMDExCituZXh0cDA0MyBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMCAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0NCBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMSAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0NSBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0NiBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0NyBuZXh0cGx1cyAgMS4wMDAwMDAxMTA1MiAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0OCBuZXh0cGx1cyAgMS4wMDAwMDAxMTU1MiAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0OSBuZXh0cGx1cyAtMS4wMDAwMDAxMDk5OCAgLT4gIC0xLjAwMDAwMDEwCituZXh0cDA1MCBuZXh0cGx1cyAtMS4wMDAwMDAxMDk5OSAgLT4gIC0xLjAwMDAwMDEwCituZXh0cDA1MSBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMCAgLT4gIC0xLjAwMDAwMDEwCituZXh0cDA1MiBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMSAgLT4gIC0xLjAwMDAwMDExCituZXh0cDA1MyBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDExCituZXh0cDA1NCBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDExCituZXh0cDA1NSBuZXh0cGx1cyAtMS4wMDAwMDAxMTA1MiAgLT4gIC0xLjAwMDAwMDExCituZXh0cDA1NiBuZXh0cGx1cyAtMS4wMDAwMDAxMTU1MiAgLT4gIC0xLjAwMDAwMDExCistLSB1bHRyYS10aW55IGlucHV0cworbmV4dHAwNjAgbmV4dHBsdXMgIDFFLTk5OTk5ICAgICAgIC0+ICAgMUUtMzkxCituZXh0cDA2MSBuZXh0cGx1cyAgMUUtOTk5OTk5OTk5ICAgLT4gICAxRS0zOTEKK25leHRwMDYyIG5leHRwbHVzICAxRS0zOTEgICAgICAgICAtPiAgIDJFLTM5MQorbmV4dHAwNjMgbmV4dHBsdXMgLTFFLTk5OTk5ICAgICAgIC0+ICAtMEUtMzkxCituZXh0cDA2NCBuZXh0cGx1cyAtMUUtOTk5OTk5OTk5ICAgLT4gIC0wRS0zOTEKK25leHRwMDY1IG5leHRwbHVzIC0xRS0zOTEgICAgICAgICAtPiAgLTBFLTM5MQorCistLSBaZXJvcworbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS0zOTEKK25leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS0zOTEKK25leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtMzkxCituZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS0zOTEKK25leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS0zOTEKKworbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorLS0gc3BlY2lhbHMKK25leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQorbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTlFKzk5OQorbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTgorbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcKK25leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTgorbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcKK25leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworbmV4dHAxNzAgbmV4dHBsdXMgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IEluZmluaXR5CituZXh0cDE3MSBuZXh0cGx1cyAgOS45OTk5OTk5OEUrOTk5ICAgLT4gOS45OTk5OTk5OUUrOTk5CituZXh0cDE3MiBuZXh0cGx1cyAgMUUtOTk5ICAgICAgICAgICAgLT4gMS4wMDAwMDAwMUUtOTk5CituZXh0cDE3MyBuZXh0cGx1cyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gMS4wMDAwMDAwMUUtOTk5CituZXh0cDE3NCBuZXh0cGx1cyAgOUUtMTAwNyAgICAgICAgICAgLT4gMS4wRS0xMDA2CituZXh0cDE3NSBuZXh0cGx1cyAgOS45RS0xMDA2ICAgICAgICAgLT4gMS4wMEUtMTAwNQorbmV4dHAxNzYgbmV4dHBsdXMgIDkuOTk5OUUtMTAwMyAgICAgIC0+IDEuMDAwMDBFLTEwMDIKK25leHRwMTc3IG5leHRwbHVzICA5Ljk5OTk5OTlFLTEwMDAgICAtPiAxLjAwMDAwMDAwRS05OTkKK25leHRwMTc4IG5leHRwbHVzICA5Ljk5OTk5OThFLTEwMDAgICAtPiA5Ljk5OTk5OTlFLTEwMDAKK25leHRwMTc5IG5leHRwbHVzICA5Ljk5OTk5OTdFLTEwMDAgICAtPiA5Ljk5OTk5OThFLTEwMDAKK25leHRwMTgwIG5leHRwbHVzICAwRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3CituZXh0cDE4MSBuZXh0cGx1cyAgMUUtMTAwNyAgICAgICAgICAgLT4gMkUtMTAwNworbmV4dHAxODIgbmV4dHBsdXMgIDJFLTEwMDcgICAgICAgICAgIC0+IDNFLTEwMDcKKworbmV4dHAxODMgbmV4dHBsdXMgIC0wRS0xMDA3ICAgICAgICAgIC0+ICAxRS0xMDA3CituZXh0cDE4NCBuZXh0cGx1cyAgLTFFLTEwMDcgICAgICAgICAgLT4gLTBFLTEwMDcKK25leHRwMTg1IG5leHRwbHVzICAtMkUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNworbmV4dHAxODYgbmV4dHBsdXMgIC0xMEUtMTAwNyAgICAgICAgIC0+IC05RS0xMDA3CituZXh0cDE4NyBuZXh0cGx1cyAgLTEwMEUtMTAwNyAgICAgICAgLT4gLTkuOUUtMTAwNgorbmV4dHAxODggbmV4dHBsdXMgIC0xMDAwMDBFLTEwMDcgICAgIC0+IC05Ljk5OTlFLTEwMDMKK25leHRwMTg5IG5leHRwbHVzICAtMS4wMDAwRS05OTkgICAgICAtPiAtOS45OTk5OTk5RS0xMDAwCituZXh0cDE5MCBuZXh0cGx1cyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTkuOTk5OTk5OUUtMTAwMAorbmV4dHAxOTEgbmV4dHBsdXMgIC0xRS05OTkgICAgICAgICAgIC0+IC05Ljk5OTk5OTlFLTEwMDAKK25leHRwMTkyIG5leHRwbHVzICAtOS45OTk5OTk5OEUrOTk5ICAtPiAtOS45OTk5OTk5N0UrOTk5CituZXh0cDE5MyBuZXh0cGx1cyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLTkuOTk5OTk5OThFKzk5OQorCistLSBOdWxsIHRlc3RzCituZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0dG93YXJkLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHR0b3dhcmQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjIzODVhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0dG93YXJkLmRlY1Rlc3QKQEAgLTAsMCArMSw0MjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbmV4dHRvd2FyZC5kZWNUZXN0IC0tIGRlY2ltYWwgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MKK25leHR0MDAxIG5leHR0b3dhcmQgICAxMCAgICAxMCAgIC0+ICAxMAorbmV4dHQwMDIgbmV4dHRvd2FyZCAgLTEwICAgLTEwICAgLT4gLTEwCituZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMQorbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5CituZXh0dDAwNSBuZXh0dG93YXJkICAtMSAgICAgMTAgICAtPiAtMC45OTk5OTk5OTkKK25leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAxCituZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtMzkxICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDAwOCBuZXh0dG93YXJkICAgMCAgICAtMTAgICAtPiAtMUUtMzkxICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OUUrMzg0ICtJbmZpbml0eSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCituZXh0dDAxMCBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrMzg0IC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tLS0gbGhzPXJocworLS0gZmluaXRlcworbmV4dHQxMDEgbmV4dHRvd2FyZCAgICAgICAgICA3ICAgICAgIDcgLT4gIDcKK25leHR0MTAyIG5leHR0b3dhcmQgICAgICAgICAtNyAgICAgIC03IC0+IC03CituZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUKK25leHR0MTA0IG5leHR0b3dhcmQgICAgICAgIC03NSAgICAgLTc1IC0+IC03NQorbmV4dHQxMDUgbmV4dHRvd2FyZCAgICAgICA3LjUwICAgICA3LjUgLT4gIDcuNTAKK25leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwCituZXh0dDEwNyBuZXh0dG93YXJkICAgICAgIDcuNTAwIDcuNTAwMCAtPiAgNy41MDAKK25leHR0MTA4IG5leHR0b3dhcmQgICAgICAtNy41MDAgICAtNy41IC0+IC03LjUwMAorCistLSB6ZXJvcworbmV4dHQxMTEgbmV4dHRvd2FyZCAgICAgICAgICAwICAgICAgIDAgLT4gIDAKK25leHR0MTEyIG5leHR0b3dhcmQgICAgICAgICAtMCAgICAgIC0wIC0+IC0wCituZXh0dDExMyBuZXh0dG93YXJkICAgICAgIDBFKzQgICAgICAgMCAtPiAgMEUrNAorbmV4dHQxMTQgbmV4dHRvd2FyZCAgICAgIC0wRSs0ICAgICAgLTAgLT4gLTBFKzQKK25leHR0MTE1IG5leHR0b3dhcmQgICAgIDAuMDAwMCAwLjAwMDAwIC0+ICAwLjAwMDAKK25leHR0MTE2IG5leHR0b3dhcmQgICAgLTAuMDAwMCAgIC0wLjAwIC0+IC0wLjAwMDAKK25leHR0MTE3IG5leHR0b3dhcmQgICAgICAwRS0xNDEgICAgICAwIC0+ICAwRS0xNDEKK25leHR0MTE4IG5leHR0b3dhcmQgICAgIC0wRS0xNDEgICAtMDAwIC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK25leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4CituZXh0dDEyMiBuZXh0dG93YXJkICAtMjY4MjY4MjY4ICAgLTI2ODI2ODI2OCAtPiAgLTI2ODI2ODI2OAorbmV4dHQxMjMgbmV4dHRvd2FyZCAgIDEzNDEzNDEzNCAgICAxMzQxMzQxMzQgLT4gICAxMzQxMzQxMzQKK25leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CituZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSszODQgIDkuOTk5OTk5OTlFKzM4NCAgIC0+ICAgOS45OTk5OTk5OUUrMzg0CituZXh0dDEzMiBuZXh0dG93YXJkICAxRS0zODMgICAgICAgICAgIDFFLTM4MyAgICAgICAgICAgIC0+ICAgMUUtMzgzCituZXh0dDEzMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS0zODMgIDEuMDAwMDAwMDBFLTM4MyAgIC0+ICAgMS4wMDAwMDAwMEUtMzgzCituZXh0dDEzNCBuZXh0dG93YXJkICAxRS0zOTEgICAgICAgICAgIDFFLTM5MSAgICAgICAgICAgIC0+ICAgMUUtMzkxCisKK25leHR0MTM1IG5leHR0b3dhcmQgIC0xRS0zOTEgICAgICAgICAgLTFFLTM5MSAgICAgICAgICAgLT4gIC0xRS0zOTEKK25leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwRS0zODMgLTEuMDAwMDAwMDBFLTM4MyAgLT4gIC0xLjAwMDAwMDAwRS0zODMKK25leHR0MTM3IG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAgLT4gIC0xRS0zODMKK25leHR0MTM4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAgLT4gIC05Ljk5OTk5OTk5RSszODQKKworLS0tLS0tLSBsaHM8cmhzCituZXh0dDIwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5NSBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk2CituZXh0dDIwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk3CituZXh0dDIwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5NyBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk4CituZXh0dDIwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OCBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5CituZXh0dDIwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAKK25leHR0MjA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMQorbmV4dHQyMDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAxCituZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDEKK25leHR0MjA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMgorbmV4dHQyMTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAzCituZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDQKK25leHR0MjEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDQgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwNQorbmV4dHQyMTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA2CituZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDcKK25leHR0MjE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDcgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwOAorbmV4dHQyMTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA5CituZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTAKK25leHR0MjE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQyMTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCisKK25leHR0MjIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk1IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTQKK25leHR0MjIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk2IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTUKK25leHR0MjIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTYKK25leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk4IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTcKK25leHR0MjI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTgKK25leHR0MjI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkKK25leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkKK25leHR0MjI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkKK25leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMAorbmV4dHQyMzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxCituZXh0dDIzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAzICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDIKK25leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMworbmV4dHQyMzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA0CituZXh0dDIzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDA2ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDUKK25leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNgorbmV4dHQyMzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwOCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA3CituZXh0dDIzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDA5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDgKK25leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwOQorbmV4dHQyMzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEwCituZXh0dDI0MCBuZXh0dG93YXJkIC0xLjAwMDAwMDEyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKKworLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uCituZXh0dDI0MSBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0MjQyIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTkgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQyNDMgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCituZXh0dDI0NCBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKK25leHR0MjQ1IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgorbmV4dHQyNDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCituZXh0dDI0NyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDUyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKK25leHR0MjQ4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTE1NTIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgorbmV4dHQyNDkgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMDk5OCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEwCituZXh0dDI1MCBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTAKK25leHR0MjUxIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMAorbmV4dHQyNTIgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDI1MyBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKK25leHR0MjU0IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorbmV4dHQyNTUgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTA1MiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDI1NiBuZXh0dG93YXJkIC0xLjAwMDAwMDExNTUyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKKy0tIHVsdHJhLXRpbnkgaW5wdXRzCituZXh0dDI2MCBuZXh0dG93YXJkICAxRS05OTk5OSAgICAgICBJbmZpbml0eSAtPiAgIDFFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQyNjEgbmV4dHRvd2FyZCAgMUUtOTk5OTk5OTk5ICAgSW5maW5pdHkgLT4gICAxRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MjYyIG5leHR0b3dhcmQgIDFFLTM5MSAgICAgICAgIEluZmluaXR5IC0+ICAgMkUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDI2MyBuZXh0dG93YXJkIC0xRS05OTk5OSAgICAgICBJbmZpbml0eSAtPiAgLTBFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDI2NCBuZXh0dG93YXJkIC0xRS05OTk5OTk5OTkgICBJbmZpbml0eSAtPiAgLTBFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDI2NSBuZXh0dG93YXJkIC0xRS0zOTEgICAgICAgICBJbmZpbml0eSAtPiAgLTBFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIFplcm9zCituZXh0dDMwMCBuZXh0dG93YXJkICAwICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDEgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwMyBuZXh0dG93YXJkICAwRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDQgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwNiBuZXh0dG93YXJkIC0wLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDcgbmV4dHRvd2FyZCAtMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwOSBuZXh0dG93YXJkIC0wRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBzcGVjaWFscworbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkKK25leHR0MzUxIG5leHR0b3dhcmQgIC1JbmYgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OTlFKzM4NAorbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFOCituZXh0dDM1MyBuZXh0dG93YXJkICBzTmFOICAgIEluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQzNTQgbmV4dHRvd2FyZCAgIE5hTjc3ICBJbmZpbml0eSAtPiAgTmFONzcKK25leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCituZXh0dDM1NiBuZXh0dG93YXJkICAtTmFOICAgIEluZmluaXR5IC0+IC1OYU4KK25leHR0MzU3IG5leHR0b3dhcmQgLXNOYU4gICAgSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43NworbmV4dHQzNTkgbmV4dHRvd2FyZCAtc05hTjg4ICBJbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CituZXh0dDM3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSs5OTkgICBJbmZpbml0eSAtPiBJbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCituZXh0dDM3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk4RSs5OTkgICBJbmZpbml0eSAtPiA5Ljk5OTk5OTk5RSs5OTkKK25leHR0MzcyIG5leHR0b3dhcmQgIDFFLTk5OSAgICAgICAgICAgIEluZmluaXR5IC0+IDEuMDAwMDAwMDFFLTk5OQorbmV4dHQzNzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMEUtOTk5ICAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMUUtOTk5CituZXh0dDM3NCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OUUtOTk5ICBJbmZpbml0eSAtPiAxLjAwMDAwMDAwRS05OTkKK25leHR0Mzc1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTlFLTk5OSAgIEluZmluaXR5IC0+IDEuMDAwMDAwMDBFLTk5OQorbmV4dHQzNzYgbmV4dHRvd2FyZCAgOUUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gMS4wRS0xMDA2ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM3NyBuZXh0dG93YXJkICA5LjlFLTEwMDYgICAgICAgICBJbmZpbml0eSAtPiAxLjAwRS0xMDA1ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0Mzc4IG5leHR0b3dhcmQgIDkuOTk5OUUtMTAwMyAgICAgIEluZmluaXR5IC0+IDEuMDAwMDBFLTEwMDIgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzNzkgbmV4dHRvd2FyZCAgOS45OTk5OTk4RS0xMDAwICAgSW5maW5pdHkgLT4gOS45OTk5OTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4MCBuZXh0dG93YXJkICA5Ljk5OTk5OTdFLTEwMDAgICBJbmZpbml0eSAtPiA5Ljk5OTk5OThFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzgxIG5leHR0b3dhcmQgIDBFLTEwMDcgICAgICAgICAgIEluZmluaXR5IC0+IDFFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzODIgbmV4dHRvd2FyZCAgMUUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gMkUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4MyBuZXh0dG93YXJkICAyRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAzRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworbmV4dHQzODUgbmV4dHRvd2FyZCAgLTBFLTEwMDcgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4NiBuZXh0dG93YXJkICAtMUUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAtMEUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQzODcgbmV4dHRvd2FyZCAgLTJFLTEwMDcgICAgICAgICAgSW5maW5pdHkgLT4gLTFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4OCBuZXh0dG93YXJkICAtMTBFLTEwMDcgICAgICAgICBJbmZpbml0eSAtPiAtOUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0Mzg5IG5leHR0b3dhcmQgIC0xMDBFLTEwMDcgICAgICAgIEluZmluaXR5IC0+IC05LjlFLTEwMDYgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzOTAgbmV4dHRvd2FyZCAgLTEwMDAwMEUtMTAwNyAgICAgSW5maW5pdHkgLT4gLTkuOTk5OUUtMTAwMyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM5MSBuZXh0dG93YXJkICAtMS4wMDAwRS05OTkgICAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5RS0xMDAwICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzOTIgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDBFLTk5OSAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OUUtMTAwMCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzkzIG5leHR0b3dhcmQgIC0xRS05OTkgICAgICAgICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTlFLTEwMDAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM5NCBuZXh0dG93YXJkICAtOS45OTk5OTk5OEUrOTk5ICBJbmZpbml0eSAtPiAtOS45OTk5OTk5N0UrOTk5CituZXh0dDM5NSBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrOTk5ICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OEUrOTk5CisKKy0tLS0tLS0gbGhzPnJocworbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKK25leHR0NDAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NAorbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk1CituZXh0dDQwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTYKK25leHR0NDA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NworbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk4CituZXh0dDQwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTkKK25leHR0NDA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OQorbmV4dHQ0MDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5CituZXh0dDQwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMAorbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDEKK25leHR0NDExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAyCituZXh0dDQxMiBuZXh0dG93YXJkICAxLjAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMworbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDQKK25leHR0NDE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA1CituZXh0dDQxNSBuZXh0dG93YXJkICAxLjAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNgorbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDcKK25leHR0NDE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA4CituZXh0dDQxOCBuZXh0dG93YXJkICAxLjAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwOQorbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTAKK25leHR0NDIwIG5leHR0b3dhcmQgIDEuMDAwMDAwMTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCisKK25leHR0NDIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NgorbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk3CituZXh0dDQyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTgKK25leHR0NDI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQorbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAKK25leHR0NDI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxCituZXh0dDQyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQorbmV4dHQ0MjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDEKK25leHR0NDI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAyCituZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMworbmV4dHQ0MzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDQKK25leHR0NDMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA1CituZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNgorbmV4dHQ0MzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDcKK25leHR0NDM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA4CituZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwOQorbmV4dHQ0MzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTAKK25leHR0NDM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDExICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorCistLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24KK25leHR0NDQxIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwCituZXh0dDQ0MiBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMAorbmV4dHQ0NDMgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTAKK25leHR0NDQ0IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDQ0NSBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQ0NDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0NDQ3IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwNTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDQ0OCBuZXh0dG93YXJkICAxLjAwMDAwMDExNTUyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQ0NDkgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMDk5OCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKK25leHR0NDUwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTkgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDQ1MSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorbmV4dHQ0NTIgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKK25leHR0NDUzIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCituZXh0dDQ1NCBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorbmV4dHQ0NTUgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTA1MiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKK25leHR0NDU2IG5leHR0b3dhcmQgLTEuMDAwMDAwMTE1NTIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCistLSB1bHRyYS10aW55IGlucHV0cworbmV4dHQ0NjAgbmV4dHRvd2FyZCAgMUUtOTk5OTkgICAgICAgIC1JbmZpbml0eSAtPiAgIDBFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQ0NjEgbmV4dHRvd2FyZCAgMUUtOTk5OTk5OTk5ICAgIC1JbmZpbml0eSAtPiAgIDBFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQ0NjIgbmV4dHRvd2FyZCAgMUUtMzkxICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDBFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQ0NjMgbmV4dHRvd2FyZCAtMUUtOTk5OTkgICAgICAgIC1JbmZpbml0eSAtPiAgLTFFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NDY0IG5leHR0b3dhcmQgLTFFLTk5OTk5OTk5OSAgICAtSW5maW5pdHkgLT4gIC0xRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDQ2NSBuZXh0dG93YXJkIC0xRS0zOTEgICAgICAgICAgLUluZmluaXR5IC0+ICAtMkUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBaZXJvcworbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTAxIG5leHR0b3dhcmQgIDAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwMiBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTA0IG5leHR0b3dhcmQgIDBFLTMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwNSBuZXh0dG93YXJkICAwRSszMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTA3IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwOCBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLTAuMDAwMCAgIC0+IC0wLjAwCisKKy0tIHNwZWNpYWxzCituZXh0dDU1MCBuZXh0dG93YXJkICAgSW5mICAgICAtSW5maW5pdHkgLT4gIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQ1NTEgbmV4dHRvd2FyZCAgLUluZiAgICAgLUluZmluaXR5IC0+IC1JbmZpbml0eQorbmV4dHQ1NTIgbmV4dHRvd2FyZCAgIE5hTiAgICAgLUluZmluaXR5IC0+ICBOYU4KK25leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0NTU0IG5leHR0b3dhcmQgICBOYU43NyAgIC1JbmZpbml0eSAtPiAgTmFONzcKK25leHR0NTU1IG5leHR0b3dhcmQgIHNOYU44OCAgIC1JbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK25leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOCituZXh0dDU1NyBuZXh0dG93YXJkIC1zTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDU1OCBuZXh0dG93YXJkICAtTmFONzcgICAtSW5maW5pdHkgLT4gLU5hTjc3CituZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorbmV4dHQ1NzAgbmV4dHRvd2FyZCAgOS45OTk5OTk5OUUrOTk5ICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTk4RSs5OTkKK25leHR0NTcxIG5leHR0b3dhcmQgIDkuOTk5OTk5OThFKzk5OSAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5N0UrOTk5CituZXh0dDU3MiBuZXh0dG93YXJkICAxRS05OTkgICAgICAgICAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMEUtOTk5ICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTc0IG5leHR0b3dhcmQgIDlFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gOEUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU3NSBuZXh0dG93YXJkICA5LjlFLTEwMDYgICAgICAgICAgLUluZmluaXR5IC0+IDkuOEUtMTAwNiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzYgbmV4dHRvd2FyZCAgOS45OTk5RS0xMDAzICAgICAgIC1JbmZpbml0eSAtPiA5Ljk5OThFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTc3IG5leHR0b3dhcmQgIDkuOTk5OTk5OUUtMTAwMCAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk4RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU3OCBuZXh0dG93YXJkICA5Ljk5OTk5OThFLTEwMDAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5N0UtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk3RS0xMDAwICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTZFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTgwIG5leHR0b3dhcmQgIDBFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4MSBuZXh0dG93YXJkICAxRS0xMDA3ICAgICAgICAgICAgLUluZmluaXR5IC0+IDBFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDU4MiBuZXh0dG93YXJkICAyRS0xMDA3ICAgICAgICAgICAgLUluZmluaXR5IC0+IDFFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCituZXh0dDU4MyBuZXh0dG93YXJkICAtMEUtMTAwNyAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODQgbmV4dHRvd2FyZCAgLTFFLTEwMDcgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMkUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTg1IG5leHR0b3dhcmQgIC0yRS0xMDA3ICAgICAgICAgICAtSW5maW5pdHkgLT4gLTNFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4NiBuZXh0dG93YXJkICAtMTBFLTEwMDcgICAgICAgICAgLUluZmluaXR5IC0+IC0xLjFFLTEwMDYgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODcgbmV4dHRvd2FyZCAgLTEwMEUtMTAwNyAgICAgICAgIC1JbmZpbml0eSAtPiAtMS4wMUUtMTAwNSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTg4IG5leHR0b3dhcmQgIC0xMDAwMDBFLTEwMDcgICAgICAtSW5maW5pdHkgLT4gLTEuMDAwMDFFLTEwMDIgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4OSBuZXh0dG93YXJkICAtMS4wMDAwRS05OTkgICAgICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkKK25leHR0NTkwIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwRS05OTkgICAtSW5maW5pdHkgLT4gLTEuMDAwMDAwMDFFLTk5OQorbmV4dHQ1OTEgbmV4dHRvd2FyZCAgLTFFLTk5OSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMDAwMUUtOTk5CituZXh0dDU5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OEUrOTk5ICAgLUluZmluaXR5IC0+IC05Ljk5OTk5OTk5RSs5OTkKK25leHR0NTkzIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5RSs5OTkgICAtSW5maW5pdHkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCisKKworCistLS0tLS0tIFNwZWNpYWxzCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworbmV4dHQ3ODAgbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CituZXh0dDc4MSBuZXh0dG93YXJkIC1JbmYgIC0xMDAwICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4MiBuZXh0dG93YXJkIC1JbmYgIC0xICAgICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4MyBuZXh0dG93YXJkIC1JbmYgIC0wICAgICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4NCBuZXh0dG93YXJkIC1JbmYgICAwICAgICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4NSBuZXh0dG93YXJkIC1JbmYgICAxICAgICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4NiBuZXh0dG93YXJkIC1JbmYgICAxMDAwICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4NyBuZXh0dG93YXJkIC0xMDAwIC1JbmYgICAtPiAtMTAwMC4wMDAwMQorbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CituZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMQorbmV4dHQ3OTAgbmV4dHRvd2FyZCAtMCAgICAtSW5mICAgLT4gLTFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NzkxIG5leHR0b3dhcmQgIDAgICAgLUluZiAgIC0+IC0xRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDc5MiBuZXh0dG93YXJkICAxICAgIC1JbmYgICAtPiAgMC45OTk5OTk5OTkKK25leHR0NzkzIG5leHR0b3dhcmQgIDEwMDAgLUluZiAgIC0+ICA5OTkuOTk5OTk5CituZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OUUrMzg0CisKK25leHR0ODAwIG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODAxIG5leHR0b3dhcmQgIEluZiAgLTEwMDAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODAyIG5leHR0b3dhcmQgIEluZiAgLTEgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODAzIG5leHR0b3dhcmQgIEluZiAgLTAgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODA0IG5leHR0b3dhcmQgIEluZiAgIDAgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODA1IG5leHR0b3dhcmQgIEluZiAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODA2IG5leHR0b3dhcmQgIEluZiAgIDEwMDAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODA3IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTkKK25leHR0ODA5IG5leHR0b3dhcmQgLUluZiAgIEluZiAgIC0+IC05Ljk5OTk5OTk5RSszODQKK25leHR0ODEwIG5leHR0b3dhcmQgLTEgICAgIEluZiAgIC0+IC0wLjk5OTk5OTk5OQorbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0ODEyIG5leHR0b3dhcmQgIDAgICAgIEluZiAgIC0+ICAxRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDgxMyBuZXh0dG93YXJkICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMQorbmV4dHQ4MTQgbmV4dHRvd2FyZCAgMTAwMCAgSW5mICAgLT4gIDEwMDAuMDAwMDEKK25leHR0ODE1IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCituZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFOCituZXh0dDgyMiBuZXh0dG93YXJkICBOYU4gLTEwMDAgICAtPiAgTmFOCituZXh0dDgyMyBuZXh0dG93YXJkICBOYU4gLTEgICAgICAtPiAgTmFOCituZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFOCituZXh0dDgyNSBuZXh0dG93YXJkICBOYU4gIDAgICAgICAtPiAgTmFOCituZXh0dDgyNiBuZXh0dG93YXJkICBOYU4gIDEgICAgICAtPiAgTmFOCituZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFOCituZXh0dDgyOCBuZXh0dG93YXJkICBOYU4gIEluZiAgICAtPiAgTmFOCituZXh0dDgyOSBuZXh0dG93YXJkICBOYU4gIE5hTiAgICAtPiAgTmFOCituZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzMSBuZXh0dG93YXJkIC0xMDAwIE5hTiAgICAtPiAgTmFOCituZXh0dDgzMiBuZXh0dG93YXJkIC0xICAgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzNCBuZXh0dG93YXJkICAwICAgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzNSBuZXh0dG93YXJkICAxICAgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFOCituZXh0dDgzNyBuZXh0dG93YXJkICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK25leHR0ODQxIG5leHR0b3dhcmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0MiBuZXh0dG93YXJkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDMgbmV4dHRvd2FyZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQ0IG5leHR0b3dhcmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0NSBuZXh0dG93YXJkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDYgbmV4dHRvd2FyZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQ3IG5leHR0b3dhcmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0OCBuZXh0dG93YXJkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDkgbmV4dHRvd2FyZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODUwIG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1MSBuZXh0dG93YXJkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTIgbmV4dHRvd2FyZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODUzIG5leHR0b3dhcmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1NCBuZXh0dG93YXJkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTUgbmV4dHRvd2FyZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODU2IG5leHR0b3dhcmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1NyBuZXh0dG93YXJkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTggbmV4dHRvd2FyZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODU5IG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK25leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCituZXh0dDg2MiBuZXh0dG93YXJkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorbmV4dHQ4NjMgbmV4dHRvd2FyZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK25leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CituZXh0dDg2NSBuZXh0dG93YXJkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorbmV4dHQ4NjYgbmV4dHRvd2FyZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK25leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CituZXh0dDg2OCBuZXh0dG93YXJkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorbmV4dHQ4NjkgbmV4dHRvd2FyZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCituZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3MiBuZXh0dG93YXJkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3MyBuZXh0dG93YXJkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3NSBuZXh0dG93YXJkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3NiBuZXh0dG93YXJkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3OCBuZXh0dG93YXJkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3OSBuZXh0dG93YXJkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg4MSBuZXh0dG93YXJkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg4MiBuZXh0dG93YXJkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK25leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODg0IG5leHR0b3dhcmQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorbmV4dHQ4ODUgbmV4dHRvd2FyZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCituZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDkwMSBuZXh0dG93YXJkICMgIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvb3IuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvb3IuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWViZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9vci5kZWNUZXN0CkBAIC0wLDAgKzEsMzM0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK29yeDAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAorb3J4MDAyIG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxCitvcngwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDEKK29yeDAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQorb3J4MDA1IG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAxMTEwCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorb3J4MDA2IG9yIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK29yeDAwNyBvciAwMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwCitvcngwMDggb3IgMTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAorb3J4MDA5IG9yIDEwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAKK29yeDAxMCBvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitvcngwMTEgb3IgMDAwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMAorb3J4MDEyIG9yIDAxMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAKK29yeDAxMyBvciAwMTAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgIDEyMzQ1Njc4OSAgICAgMTIzNDU2Nzg5ICAgICAgMTIzNDU2Nzg5CitvcngwMjEgb3IgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDAyMiBvciAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDIzIG9yICAxMTExMTExMSAgICAgIDExMTExMTExICAtPiAgIDExMTExMTExCitvcngwMjUgb3IgICAxMTExMTExICAgICAgIDExMTExMTEgIC0+ICAgIDExMTExMTEKK29yeDAyNiBvciAgICAxMTExMTEgICAgICAgIDExMTExMSAgLT4gICAgIDExMTExMQorb3J4MDI3IG9yICAgICAxMTExMSAgICAgICAgIDExMTExICAtPiAgICAgIDExMTExCitvcngwMjggb3IgICAgICAxMTExICAgICAgICAgIDExMTEgIC0+ICAgICAgIDExMTEKK29yeDAyOSBvciAgICAgICAxMTEgICAgICAgICAgIDExMSAgLT4gICAgICAgIDExMQorb3J4MDMxIG9yICAgICAgICAxMSAgICAgICAgICAgIDExICAtPiAgICAgICAgIDExCitvcngwMzIgb3IgICAgICAgICAxICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgIDEKK29yeDAzMyBvciAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDM0IG9yIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwMzUgb3IgMTExMTExMTExMSAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDAzNiBvciAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMQorCitvcngwNDAgb3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDA0MSBvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDQyIG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwNDMgb3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMTEKK29yeDA0NCBvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTExMQorb3J4MDQ1IG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDExMTExCitvcngwNDYgb3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTEKK29yeDA0NyBvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQorb3J4MDQ4IG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExCitvcngwNDkgb3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDEKKworb3J4MDUwIG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTEKK29yeDA1MSBvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTExCitvcngwNTIgb3IgICAxMTExMTExMSAgMSAgLT4gIDExMTExMTExCitvcngwNTMgb3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTEKK29yeDA1NCBvciAgICAgMTExMTExICAxICAtPiAgMTExMTExCitvcngwNTUgb3IgICAgICAxMTExMSAgMSAgLT4gIDExMTExCitvcngwNTYgb3IgICAgICAgMTExMSAgMSAgLT4gIDExMTEKK29yeDA1NyBvciAgICAgICAgMTExICAxICAtPiAgMTExCitvcngwNTggb3IgICAgICAgICAxMSAgMSAgLT4gIDExCitvcngwNTkgb3IgICAgICAgICAgMSAgMSAgLT4gIDEKKworb3J4MDYwIG9yIDExMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTEKK29yeDA2MSBvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCitvcngwNjIgb3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCitvcngwNjMgb3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKK29yeDA2NCBvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCitvcngwNjUgb3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCitvcngwNjYgb3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKK29yeDA2NyBvciAgICAgICAgMTExICAwICAtPiAgMTExCitvcngwNjggb3IgICAgICAgICAxMSAgMCAgLT4gIDExCitvcngwNjkgb3IgICAgICAgICAgMSAgMCAgLT4gIDEKKworb3J4MDcwIG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDA3MSBvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwNzIgb3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTExCitvcngwNzMgb3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTEKK29yeDA3NCBvciAxICAgICAgMTExMTExICAtPiAgMTExMTExCitvcngwNzUgb3IgMSAgICAgICAxMTExMSAgLT4gIDExMTExCitvcngwNzYgb3IgMSAgICAgICAgMTExMSAgLT4gIDExMTEKK29yeDA3NyBvciAxICAgICAgICAgMTExICAtPiAgMTExCitvcngwNzggb3IgMSAgICAgICAgICAxMSAgLT4gIDExCitvcngwNzkgb3IgMSAgICAgICAgICAgMSAgLT4gIDEKKworb3J4MDgwIG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDA4MSBvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwODIgb3IgMCAgICAxMTExMTExMSAgLT4gIDExMTExMTExCitvcngwODMgb3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTEKK29yeDA4NCBvciAwICAgICAgMTExMTExICAtPiAgMTExMTExCitvcngwODUgb3IgMCAgICAgICAxMTExMSAgLT4gIDExMTExCitvcngwODYgb3IgMCAgICAgICAgMTExMSAgLT4gIDExMTEKK29yeDA4NyBvciAwICAgICAgICAgMTExICAtPiAgMTExCitvcngwODggb3IgMCAgICAgICAgICAxMSAgLT4gIDExCitvcngwODkgb3IgMCAgICAgICAgICAgMSAgLT4gIDEKKworb3J4MDkwIG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTEgb3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK29yeDA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDkzIG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK29yeDA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDk2IG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTcgb3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK29yeDA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorCitvcngxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDEwMSBvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MTAyIG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgMTExMTExMTExCitvcngxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDEwNCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorb3J4MTA1IG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgMTExMTExMTExCitvcngxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTEKK29yeDEwNyBvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTExMQorb3J4MTA4IG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTExCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworb3J4MjIwIG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjEgb3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjIzIG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjQgb3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjI2IG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjcgb3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjI5IG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMzAgb3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjMyIG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitvcngyNDAgb3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI0MSBvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNDMgb3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI0NCBvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK29yeDI1MCBvciAgMjAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTEgb3IgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjUyIG9yICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1MyBvciAgOTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTQgb3IgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjU1IG9yICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1NiBvciAgODAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTcgb3IgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjU4IG9yICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1OSBvciAgMTAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNjAgb3IgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjYxIG9yICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI2MiBvciAgMDAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNjMgb3IgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjY0IG9yICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI2NSBvciAgMDAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitvcngyNzAgb3IgIDAyMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjcxIG9yICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3MiBvciAgMDgwMDEwMDAwIDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNzMgb3IgIDA5MDAwMTAwMCAxMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjc0IG9yICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3NSBvciAgMTAwMDAwMDAwIDA3MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNzYgb3IgIDEwMDAwMDAxMCAwODAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjc3IG9yICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitvcngyODAgb3IgIDAwMTAwMDAwMiAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjgxIG9yICAwMDAwMDAwMDcgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4MiBvciAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyODMgb3IgIDAwMDAwMDAwOSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjg0IG9yICAxMDAwMDAwMDAgMDAwMTAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4NSBvciAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyODYgb3IgIDEwMDAxMDAwMCAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjg3IG9yICAxMDAwMDEwMDAgMTAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitvcngyODggb3IgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjg5IG9yICAwMDAwNzAwMDEgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5MCBvciAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTEgb3IgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjkyIG9yICAxMDAwMDAwMTAgMDAwMDIwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5MyBvciAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTQgb3IgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjk1IG9yICAxMDAwMDEwMDAgMDAwMDkwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitvcngyOTYgb3IgLTEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5NyBvciAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjk4IG9yICAxMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTkgb3IgIDEwMDAwMTAwMCAgMDAwMDExMDAwIC0+ICAxMDAwMTEwMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK29yeDMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzIgb3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzMzIG9yICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDMzNCBvciAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzUgb3IgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzM2IG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDMzNyBvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzggb3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQxIG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0MiBvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDMgb3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQ0IG9yICAxRS0xMDA3ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0NSBvciAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDYgb3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQ3IG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0OCBvciAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycworb3J4MzYxIG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNjMgb3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzY0IG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNjYgb3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzcxIG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNzMgb3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mzc0IG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNzYgb3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitvcng3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4MiBvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Nzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4NSBvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Nzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4OCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc5MSBvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc5NCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK29yeDgwMCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODAyIG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwMyBvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODA1IG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwNiBvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODA4IG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwOSBvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODExIG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgxMiBvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODE0IG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgxNSBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK29yeDgyMSBvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODIzIG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyNCBvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODI2IG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyNyBvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODI5IG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzMCBvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODMyIG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzMyBvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODM1IG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzNiBvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitvcng4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDMgb3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDYgb3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NDkgb3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTIgb3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTUgb3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTggb3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitvcng4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK29yeDg2MSBvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODYzIG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2NCBvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODY2IG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2NyBvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODY5IG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3MSBvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODczIG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3NCBvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODc2IG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3NyBvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODc5IG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg4MCBvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODgyIG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg4MyBvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODg1IG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcGx1cy5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wbHVzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlODQzYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcGx1cy5kZWNUZXN0CkBAIC0wLDAgKzEsMTk1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHBsdXMuZGVjVGVzdCAtLSBkZWNpbWFsIG1vbmFkaWMgYWRkaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgcHJpbWFyaWx5IHRlc3RzIHRoZSBleGlzdGVuY2Ugb2YgdGhlIG9wZXJhdG9yLgorLS0gQWRkaXRpb24gYW5kIHJvdW5kaW5nLCBhbmQgbW9zdCBvdmVyZmxvd3MsIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLgorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCitwbHV4MDAxIHBsdXMgJzEnICAgICAgLT4gJzEnCitwbHV4MDAyIHBsdXMgJy0xJyAgICAgLT4gJy0xJworcGx1eDAwMyBwbHVzICcxLjAwJyAgIC0+ICcxLjAwJworcGx1eDAwNCBwbHVzICctMS4wMCcgIC0+ICctMS4wMCcKK3BsdXgwMDUgcGx1cyAnMCcgICAgICAtPiAnMCcKK3BsdXgwMDYgcGx1cyAnMC4wMCcgICAtPiAnMC4wMCcKK3BsdXgwMDcgcGx1cyAnMDAuMCcgICAtPiAnMC4wJworcGx1eDAwOCBwbHVzICcwMC4wMCcgIC0+ICcwLjAwJworcGx1eDAwOSBwbHVzICcwMCcgICAgIC0+ICcwJworCitwbHV4MDEwIHBsdXMgJy0yJyAgICAgLT4gJy0yJworcGx1eDAxMSBwbHVzICcyJyAgICAgIC0+ICcyJworcGx1eDAxMiBwbHVzICctMi4wMCcgIC0+ICctMi4wMCcKK3BsdXgwMTMgcGx1cyAnMi4wMCcgICAtPiAnMi4wMCcKK3BsdXgwMTQgcGx1cyAnLTAnICAgICAtPiAnMCcKK3BsdXgwMTUgcGx1cyAnLTAuMDAnICAtPiAnMC4wMCcKK3BsdXgwMTYgcGx1cyAnLTAwLjAnICAtPiAnMC4wJworcGx1eDAxNyBwbHVzICctMDAuMDAnIC0+ICcwLjAwJworcGx1eDAxOCBwbHVzICctMDAnICAgIC0+ICcwJworCitwbHV4MDIwIHBsdXMgJy0yMDAwMDAwJyAtPiAnLTIwMDAwMDAnCitwbHV4MDIxIHBsdXMgJzIwMDAwMDAnICAtPiAnMjAwMDAwMCcKK3ByZWNpc2lvbjogNworcGx1eDAyMiBwbHVzICctMjAwMDAwMCcgLT4gJy0yMDAwMDAwJworcGx1eDAyMyBwbHVzICcyMDAwMDAwJyAgLT4gJzIwMDAwMDAnCitwcmVjaXNpb246IDYKK3BsdXgwMjQgcGx1cyAnLTIwMDAwMDAnIC0+ICctMi4wMDAwMEUrNicgUm91bmRlZAorcGx1eDAyNSBwbHVzICcyMDAwMDAwJyAgLT4gJzIuMDAwMDBFKzYnIFJvdW5kZWQKK3ByZWNpc2lvbjogMworcGx1eDAyNiBwbHVzICctMjAwMDAwMCcgLT4gJy0yLjAwRSs2JyBSb3VuZGVkCitwbHV4MDI3IHBsdXMgJzIwMDAwMDAnICAtPiAnMi4wMEUrNicgUm91bmRlZAorCistLSBtb3JlIGZpeGVkLCBwb3RlbnRpYWwgTEhTIHN3YXBzIGlmIGRvbmUgYnkgYWRkIDAKK3ByZWNpc2lvbjogOQorcGx1eDA2MCBwbHVzICc1NjI2N0UtMTAnICAgLT4gJzAuMDAwMDA1NjI2NycKK3BsdXgwNjEgcGx1cyAnNTYyNjdFLTUnICAgIC0+ICcwLjU2MjY3JworcGx1eDA2MiBwbHVzICc1NjI2N0UtMicgICAgLT4gJzU2Mi42NycKK3BsdXgwNjMgcGx1cyAnNTYyNjdFLTEnICAgIC0+ICc1NjI2LjcnCitwbHV4MDY1IHBsdXMgJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnCitwbHV4MDY2IHBsdXMgJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnCitwbHV4MDY3IHBsdXMgJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1JworcGx1eDA2OCBwbHVzICc1NjI2N0UrMicgICAgLT4gJzUuNjI2N0UrNicKK3BsdXgwNjkgcGx1cyAnNTYyNjdFKzMnICAgIC0+ICc1LjYyNjdFKzcnCitwbHV4MDcwIHBsdXMgJzU2MjY3RSs0JyAgICAtPiAnNS42MjY3RSs4JworcGx1eDA3MSBwbHVzICc1NjI2N0UrNScgICAgLT4gJzUuNjI2N0UrOScKK3BsdXgwNzIgcGx1cyAnNTYyNjdFKzYnICAgIC0+ICc1LjYyNjdFKzEwJworcGx1eDA4MCBwbHVzICctNTYyNjdFLTEwJyAgLT4gJy0wLjAwMDAwNTYyNjcnCitwbHV4MDgxIHBsdXMgJy01NjI2N0UtNScgICAtPiAnLTAuNTYyNjcnCitwbHV4MDgyIHBsdXMgJy01NjI2N0UtMicgICAtPiAnLTU2Mi42NycKK3BsdXgwODMgcGx1cyAnLTU2MjY3RS0xJyAgIC0+ICctNTYyNi43JworcGx1eDA4NSBwbHVzICctNTYyNjdFLTAnICAgLT4gJy01NjI2NycKK3BsdXgwODYgcGx1cyAnLTU2MjY3RSswJyAgIC0+ICctNTYyNjcnCitwbHV4MDg3IHBsdXMgJy01NjI2N0UrMScgICAtPiAnLTUuNjI2N0UrNScKK3BsdXgwODggcGx1cyAnLTU2MjY3RSsyJyAgIC0+ICctNS42MjY3RSs2JworcGx1eDA4OSBwbHVzICctNTYyNjdFKzMnICAgLT4gJy01LjYyNjdFKzcnCitwbHV4MDkwIHBsdXMgJy01NjI2N0UrNCcgICAtPiAnLTUuNjI2N0UrOCcKK3BsdXgwOTEgcGx1cyAnLTU2MjY3RSs1JyAgIC0+ICctNS42MjY3RSs5JworcGx1eDA5MiBwbHVzICctNTYyNjdFKzYnICAgLT4gJy01LjYyNjdFKzEwJworCistLSAibGhzIiB6ZXJvcyBpbiBwbHVzIGFuZCBtaW51cyBoYXZlIGV4cG9uZW50ID0gb3BlcmFuZAorcGx1eDEyMCBwbHVzICctMEUzJyAgIC0+ICcwRSszJworcGx1eDEyMSBwbHVzICctMEUyJyAgIC0+ICcwRSsyJworcGx1eDEyMiBwbHVzICctMEUxJyAgIC0+ICcwRSsxJworcGx1eDEyMyBwbHVzICctMEUwJyAgIC0+ICcwJworcGx1eDEyNCBwbHVzICcrMEUwJyAgIC0+ICcwJworcGx1eDEyNSBwbHVzICcrMEUxJyAgIC0+ICcwRSsxJworcGx1eDEyNiBwbHVzICcrMEUyJyAgIC0+ICcwRSsyJworcGx1eDEyNyBwbHVzICcrMEUzJyAgIC0+ICcwRSszJworCitwbHV4MTMwIHBsdXMgJy01RTMnICAgLT4gJy01RSszJworcGx1eDEzMSBwbHVzICctNUU4JyAgIC0+ICctNUUrOCcKK3BsdXgxMzIgcGx1cyAnLTVFMTMnICAtPiAnLTVFKzEzJworcGx1eDEzMyBwbHVzICctNUUxOCcgIC0+ICctNUUrMTgnCitwbHV4MTM0IHBsdXMgJys1RTMnICAgLT4gJzVFKzMnCitwbHV4MTM1IHBsdXMgJys1RTgnICAgLT4gJzVFKzgnCitwbHV4MTM2IHBsdXMgJys1RTEzJyAgLT4gJzVFKzEzJworcGx1eDEzNyBwbHVzICcrNUUxOCcgIC0+ICc1RSsxOCcKKworLS0gc3BlY2lhbHMKK3BsdXgxNTAgcGx1cyAnSW5mJyAgICAtPiAnSW5maW5pdHknCitwbHV4MTUxIHBsdXMgJy1JbmYnICAgLT4gJy1JbmZpbml0eScKK3BsdXgxNTIgcGx1cyAgIE5hTiAgICAtPiAgTmFOCitwbHV4MTUzIHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitwbHV4MTU0IHBsdXMgICBOYU43NyAgLT4gIE5hTjc3CitwbHV4MTU1IHBsdXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitwbHV4MTU2IHBsdXMgIC1OYU4gICAgLT4gLU5hTgorcGx1eDE1NyBwbHVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorcGx1eDE1OCBwbHVzICAtTmFONzcgIC0+IC1OYU43NworcGx1eDE1OSBwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdmVyZmxvdyB0ZXN0cworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworcGx1eDE2MCBwbHVzIDkuOTk5RSs5OTk5OTk5OTkgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3BsdXgxNjEgcGx1cyAtOS45OTlFKzk5OTk5OTk5OSAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcGx1eDIxMCBwbHVzICAxLjAwRS05OTkgICAgICAgIC0+ICAgMS4wMEUtOTk5CitwbHV4MjExIHBsdXMgIDAuMUUtOTk5ICAgICAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCitwbHV4MjEyIHBsdXMgIDAuMTBFLTk5OSAgICAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsCitwbHV4MjEzIHBsdXMgIDAuMTAwRS05OTkgICAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK3BsdXgyMTQgcGx1cyAgMC4wMUUtOTk5ICAgICAgICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitwbHV4MjE1IHBsdXMgIDAuOTk5RS05OTkgICAgICAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3BsdXgyMTYgcGx1cyAgMC4wOTlFLTk5OSAgICAgICAtPiAgIDEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworcGx1eDIxNyBwbHVzICAwLjAwOUUtOTk5ICAgICAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitwbHV4MjE4IHBsdXMgIDAuMDAxRS05OTkgICAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorcGx1eDIxOSBwbHVzICAwLjAwMDlFLTk5OSAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3BsdXgyMjAgcGx1cyAgMC4wMDAxRS05OTkgICAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK3BsdXgyMzAgcGx1cyAtMS4wMEUtOTk5ICAgICAgICAtPiAgLTEuMDBFLTk5OQorcGx1eDIzMSBwbHVzIC0wLjFFLTk5OSAgICAgICAgIC0+ICAtMUUtMTAwMCAgIFN1Ym5vcm1hbAorcGx1eDIzMiBwbHVzIC0wLjEwRS05OTkgICAgICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbAorcGx1eDIzMyBwbHVzIC0wLjEwMEUtOTk5ICAgICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitwbHV4MjM0IHBsdXMgLTAuMDFFLTk5OSAgICAgICAgLT4gIC0xRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorcGx1eDIzNSBwbHVzIC0wLjk5OUUtOTk5ICAgICAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitwbHV4MjM2IHBsdXMgLTAuMDk5RS05OTkgICAgICAgLT4gIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3BsdXgyMzcgcGx1cyAtMC4wMDlFLTk5OSAgICAgICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworcGx1eDIzOCBwbHVzIC0wLjAwMUUtOTk5ICAgICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3BsdXgyMzkgcGx1cyAtMC4wMDA5RS05OTkgICAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitwbHV4MjQwIHBsdXMgLTAuMDAwMUUtOTk5ICAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBzdWJub3JtYWxzIGNsYW1wZWQgdG8gMC1FdGlueQorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworcGx1eDI1MSBwbHVzIDdFLTM5OCAgICAgLT4gN0UtMzk4IFN1Ym5vcm1hbAorcGx1eDI1MiBwbHVzIDBFLTM5OCAgICAgLT4gMEUtMzk4CitwbHV4MjUzIHBsdXMgN0UtMzk5ICAgICAtPiAxRS0zOTggU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3BsdXgyNTQgcGx1cyA0RS0zOTkgICAgIC0+IDBFLTM5OCBDbGFtcGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwbHV4MjU1IHBsdXMgN0UtNDAwICAgICAtPiAwRS0zOTggQ2xhbXBlZCBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorcGx1eDI1NiBwbHVzIDdFLTQwMSAgICAgLT4gMEUtMzk4IENsYW1wZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3BsdXgyNTcgcGx1cyAwRS0zOTkgICAgIC0+IDBFLTM5OCBDbGFtcGVkCitwbHV4MjU4IHBsdXMgMEUtNDAwICAgICAtPiAwRS0zOTggQ2xhbXBlZAorcGx1eDI1OSBwbHVzIDBFLTQwMSAgICAgLT4gMEUtMzk4IENsYW1wZWQKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorcGx1eDMwMSBwbHVzIDEyMzQ1Njc4MDAwICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitwbHV4MzAyIHBsdXMgMTIzNDU2NzgwMCAgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorcGx1eDMwMyBwbHVzIDEyMzQ1Njc4OTAgICAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK3BsdXgzMDQgcGx1cyAxMjM0NTY3ODkxICAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK3BsdXgzMDUgcGx1cyAxMjM0NTY3ODkwMSAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitwbHV4MzA2IHBsdXMgMTIzNDU2Nzg5NiAgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN0aWxsIGNoZWNraW5nCitwcmVjaXNpb246IDE1CitwbHV4MzIxIHBsdXMgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitwbHV4MzIyIHBsdXMgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK3BsdXgzMjMgcGx1cyAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorcGx1eDMyNCBwbHVzIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitwbHV4MzI1IHBsdXMgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCitwbHV4MzI2IHBsdXMgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKK3ByZWNpc2lvbjogOQorCistLSBOdWxsIHRlc3RzCitwbHU5MDAgcGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlci5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlci5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjE0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Bvd2VyLmRlY1Rlc3QKQEAgLTAsMCArMSwxNjI0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHBvd2VyLmRlY1Rlc3QgLS0gZGVjaW1hbCBleHBvbmVudGlhdGlvbiBbcG93ZXIoeCwgeSldICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gSW4gYWRkaXRpb24gdG8gdGhlIHBvd2VyIG9wZXJhdG9yIHRlc3RjYXNlcyBoZXJlLCBzZWUgYWxzbyB0aGUgZmlsZQorLS0gcG93ZXJzcXJ0LmRlY1Rlc3Qgd2hpY2ggaW5jbHVkZXMgYWxsIHRoZSB0ZXN0cyBmcm9tCistLSBzcXVhcmVyb290LmRlY1Rlc3QgaW1wbGVtZW50ZWQgdXNpbmcgcG93ZXIoeCwgMC41KQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCistLSBiYXNlIGNoZWNrcy4gIE5vdGUgMCoqMCBpcyBhbiBlcnJvci4KK3Bvd3gwMDEgcG93ZXIgICAgJzAnICAnMCcgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Bvd3gwMDIgcG93ZXIgICAgJzAnICAnMScgICAgICAgICAtPiAnMCcKK3Bvd3gwMDMgcG93ZXIgICAgJzAnICAnMicgICAgICAgICAtPiAnMCcKK3Bvd3gwMDQgcG93ZXIgICAgJzEnICAnMCcgICAgICAgICAtPiAnMScKK3Bvd3gwMDUgcG93ZXIgICAgJzEnICAnMScgICAgICAgICAtPiAnMScKK3Bvd3gwMDYgcG93ZXIgICAgJzEnICAnMicgICAgICAgICAtPiAnMScKKworcG93eDAxMCBwb3dlciAgICAnMicgICcwJyAgICAgICAgIC0+ICcxJworcG93eDAxMSBwb3dlciAgICAnMicgICcxJyAgICAgICAgIC0+ICcyJworcG93eDAxMiBwb3dlciAgICAnMicgICcyJyAgICAgICAgIC0+ICc0JworcG93eDAxMyBwb3dlciAgICAnMicgICczJyAgICAgICAgIC0+ICc4JworcG93eDAxNCBwb3dlciAgICAnMicgICc0JyAgICAgICAgIC0+ICcxNicKK3Bvd3gwMTUgcG93ZXIgICAgJzInICAnNScgICAgICAgICAtPiAnMzInCitwb3d4MDE2IHBvd2VyICAgICcyJyAgJzYnICAgICAgICAgLT4gJzY0JworcG93eDAxNyBwb3dlciAgICAnMicgICc3JyAgICAgICAgIC0+ICcxMjgnCitwb3d4MDE4IHBvd2VyICAgICcyJyAgJzgnICAgICAgICAgLT4gJzI1NicKK3Bvd3gwMTkgcG93ZXIgICAgJzInICAnOScgICAgICAgICAtPiAnNTEyJworcG93eDAyMCBwb3dlciAgICAnMicgICcxMCcgICAgICAgIC0+ICcxMDI0JworcG93eDAyMSBwb3dlciAgICAnMicgICcxMScgICAgICAgIC0+ICcyMDQ4JworcG93eDAyMiBwb3dlciAgICAnMicgICcxMicgICAgICAgIC0+ICc0MDk2JworcG93eDAyMyBwb3dlciAgICAnMicgICcxNScgICAgICAgIC0+ICczMjc2OCcKK3Bvd3gwMjQgcG93ZXIgICAgJzInICAnMTYnICAgICAgICAtPiAnNjU1MzYnCitwb3d4MDI1IHBvd2VyICAgICcyJyAgJzMxJyAgICAgICAgLT4gJzIxNDc0ODM2NDgnCistLSBOQiAwIG5vdCBzdHJpcHBlZCBpbiBuZXh0Citwb3d4MDI2IHBvd2VyICAgICcyJyAgJzMyJyAgICAgICAgLT4gJzQyOTQ5NjcyOTYnCisKK3ByZWNpc2lvbjogOQorcG93eDAyNyBwb3dlciAgICAnMicgICczMScgICAgICAgIC0+ICcyLjE0NzQ4MzY1RSs5JyBJbmV4YWN0IFJvdW5kZWQKKy0tIE5CIDAgbm90IHN0cmlwcGVkIGluIG5leHQKK3Bvd3gwMjggcG93ZXIgICAgJzInICAnMzInICAgICAgICAtPiAnNC4yOTQ5NjczMEUrOScgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEwCitwb3d4MDI5IHBvd2VyICAgICcyJyAgJzMxJyAgICAgICAgLT4gJzIxNDc0ODM2NDgnCitwb3d4MDMwIHBvd2VyICAgICcyJyAgJzMyJyAgICAgICAgLT4gJzQyOTQ5NjcyOTYnCitwcmVjaXNpb246IDkKKworcG93eDAzMSBwb3dlciAgICAnMycgICcyJyAgICAgICAgIC0+IDkKK3Bvd3gwMzIgcG93ZXIgICAgJzQnICAnMicgICAgICAgICAtPiAxNgorcG93eDAzMyBwb3dlciAgICAnNScgICcyJyAgICAgICAgIC0+IDI1Citwb3d4MDM0IHBvd2VyICAgICc2JyAgJzInICAgICAgICAgLT4gMzYKK3Bvd3gwMzUgcG93ZXIgICAgJzcnICAnMicgICAgICAgICAtPiA0OQorcG93eDAzNiBwb3dlciAgICAnOCcgICcyJyAgICAgICAgIC0+IDY0Citwb3d4MDM3IHBvd2VyICAgICc5JyAgJzInICAgICAgICAgLT4gODEKK3Bvd3gwMzggcG93ZXIgICAgJzEwJyAnMicgICAgICAgICAtPiAxMDAKK3Bvd3gwMzkgcG93ZXIgICAgJzExJyAnMicgICAgICAgICAtPiAxMjEKK3Bvd3gwNDAgcG93ZXIgICAgJzEyJyAnMicgICAgICAgICAtPiAxNDQKKworcG93eDA0MSBwb3dlciAgICAnMycgICczJyAgICAgICAgIC0+IDI3Citwb3d4MDQyIHBvd2VyICAgICc0JyAgJzMnICAgICAgICAgLT4gNjQKK3Bvd3gwNDMgcG93ZXIgICAgJzUnICAnMycgICAgICAgICAtPiAxMjUKK3Bvd3gwNDQgcG93ZXIgICAgJzYnICAnMycgICAgICAgICAtPiAyMTYKK3Bvd3gwNDUgcG93ZXIgICAgJzcnICAnMycgICAgICAgICAtPiAzNDMKK3Bvd3gwNDcgcG93ZXIgICAnLTMnICAnMycgICAgICAgICAtPiAtMjcKK3Bvd3gwNDggcG93ZXIgICAnLTQnICAnMycgICAgICAgICAtPiAtNjQKK3Bvd3gwNDkgcG93ZXIgICAnLTUnICAnMycgICAgICAgICAtPiAtMTI1Citwb3d4MDUwIHBvd2VyICAgJy02JyAgJzMnICAgICAgICAgLT4gLTIxNgorcG93eDA1MSBwb3dlciAgICctNycgICczJyAgICAgICAgIC0+IC0zNDMKKworcG93eDA1MiBwb3dlciAgICcxMCcgICcwJyAgICAgICAgIC0+IDEKK3Bvd3gwNTMgcG93ZXIgICAnMTAnICAnMScgICAgICAgICAtPiAxMAorcG93eDA1NCBwb3dlciAgICcxMCcgICcyJyAgICAgICAgIC0+IDEwMAorcG93eDA1NSBwb3dlciAgICcxMCcgICczJyAgICAgICAgIC0+IDEwMDAKK3Bvd3gwNTYgcG93ZXIgICAnMTAnICAnNCcgICAgICAgICAtPiAxMDAwMAorcG93eDA1NyBwb3dlciAgICcxMCcgICc1JyAgICAgICAgIC0+IDEwMDAwMAorcG93eDA1OCBwb3dlciAgICcxMCcgICc2JyAgICAgICAgIC0+IDEwMDAwMDAKK3Bvd3gwNTkgcG93ZXIgICAnMTAnICAnNycgICAgICAgICAtPiAxMDAwMDAwMAorcG93eDA2MCBwb3dlciAgICcxMCcgICc4JyAgICAgICAgIC0+IDEwMDAwMDAwMAorcG93eDA2MSBwb3dlciAgICcxMCcgICc5JyAgICAgICAgIC0+IDEuMDAwMDAwMDBFKzkgUm91bmRlZAorcG93eDA2MiBwb3dlciAgICcxMCcgICcyMicgICAgICAgIC0+IDEuMDAwMDAwMDBFKzIyIFJvdW5kZWQKK3Bvd3gwNjMgcG93ZXIgICAnMTAnICAnNzcnICAgICAgICAtPiAxLjAwMDAwMDAwRSs3NyBSb3VuZGVkCitwb3d4MDY0IHBvd2VyICAgJzEwJyAgJzk5JyAgICAgICAgLT4gMS4wMDAwMDAwMEUrOTkgUm91bmRlZAorCitwb3d4MDcwIHBvd2VyICAnMC4zJyAgJzAnICAgICAgICAgICAtPiAnMScKK3Bvd3gwNzEgcG93ZXIgICcwLjMnICAnMScgICAgICAgICAgIC0+ICcwLjMnCitwb3d4MDcyIHBvd2VyICAnMC4zJyAgJzEuMDAnICAgICAgICAtPiAnMC4zJworcG93eDA3MyBwb3dlciAgJzAuMycgICcyLjAwJyAgICAgICAgLT4gJzAuMDknCitwb3d4MDc0IHBvd2VyICAnMC4zJyAgJzIuMDAwMDAwMDAwJyAtPiAnMC4wOScKK3Bvd3gwNzUgcG93ZXIgICc2LjAnICAnMScgICAgICAgICAgIC0+ICc2LjAnICAgICAtLSBOQiB6ZXJvcyBub3Qgc3RyaXBwZWQKK3Bvd3gwNzYgcG93ZXIgICc2LjAnICAnMicgICAgICAgICAgIC0+ICczNi4wMCcgICAtLSAuLgorcG93eDA3NyBwb3dlciAgICctMycgICcyJyAgICAgICAgICAgLT4gJzknICAgICAgIC0tIGZyb20gTmV0UmV4eCBib29rCitwb3d4MDc4IHBvd2VyICAgICc0JyAgJzMnICAgICAgICAgICAtPiAnNjQnICAgICAgLS0gLi4gKHNvcnQgb2YpCisKK3Bvd3gwODAgcG93ZXIgICAwLjEgICAgMCAgICAgICAgICAgIC0+IDEKK3Bvd3gwODEgcG93ZXIgICAwLjEgICAgMSAgICAgICAgICAgIC0+IDAuMQorcG93eDA4MiBwb3dlciAgIDAuMSAgICAyICAgICAgICAgICAgLT4gMC4wMQorcG93eDA4MyBwb3dlciAgIDAuMSAgICAzICAgICAgICAgICAgLT4gMC4wMDEKK3Bvd3gwODQgcG93ZXIgICAwLjEgICAgNCAgICAgICAgICAgIC0+IDAuMDAwMQorcG93eDA4NSBwb3dlciAgIDAuMSAgICA1ICAgICAgICAgICAgLT4gMC4wMDAwMQorcG93eDA4NiBwb3dlciAgIDAuMSAgICA2ICAgICAgICAgICAgLT4gMC4wMDAwMDEKK3Bvd3gwODcgcG93ZXIgICAwLjEgICAgNyAgICAgICAgICAgIC0+IDFFLTcKK3Bvd3gwODggcG93ZXIgICAwLjEgICAgOCAgICAgICAgICAgIC0+IDFFLTgKK3Bvd3gwODkgcG93ZXIgICAwLjEgICAgOSAgICAgICAgICAgIC0+IDFFLTkKKworcG93eDA5MCBwb3dlciAgIDEwMSAgICAyICAgICAgICAgICAgLT4gMTAyMDEKK3Bvd3gwOTEgcG93ZXIgICAxMDEgICAgMyAgICAgICAgICAgIC0+IDEwMzAzMDEKK3Bvd3gwOTIgcG93ZXIgICAxMDEgICAgNCAgICAgICAgICAgIC0+IDEwNDA2MDQwMQorcG93eDA5MyBwb3dlciAgIDEwMSAgICA1ICAgICAgICAgICAgLT4gMS4wNTEwMTAwNUUrMTAgSW5leGFjdCBSb3VuZGVkCitwb3d4MDk0IHBvd2VyICAgMTAxICAgIDYgICAgICAgICAgICAtPiAxLjA2MTUyMDE1RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gwOTUgcG93ZXIgICAxMDEgICAgNyAgICAgICAgICAgIC0+IDEuMDcyMTM1MzVFKzE0IEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSBwb3dlcnMKK3Bvd3gwOTkgcG93ZXIgICcxJyAgJy0xJyAgICAtPiAxCitwb3d4MTAwIHBvd2VyICAnMycgICctMScgICAgLT4gMC4zMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MTAxIHBvd2VyICAnMicgICctMScgICAgLT4gMC41Citwb3d4MTAyIHBvd2VyICAnMicgICctMicgICAgLT4gMC4yNQorcG93eDEwMyBwb3dlciAgJzInICAnLTQnICAgIC0+IDAuMDYyNQorcG93eDEwNCBwb3dlciAgJzInICAnLTgnICAgIC0+IDAuMDAzOTA2MjUKK3Bvd3gxMDUgcG93ZXIgICcyJyAgJy0xNicgICAtPiAwLjAwMDAxNTI1ODc4OTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MTA2IHBvd2VyICAnMicgICctMzInICAgLT4gMi4zMjgzMDY0NEUtMTAgSW5leGFjdCBSb3VuZGVkCitwb3d4MTA4IHBvd2VyICAnMicgICctNjQnICAgLT4gNS40MjEwMTA4NkUtMjAgSW5leGFjdCBSb3VuZGVkCitwb3d4MTEwIHBvd2VyICAnMTAnICAnLTgnICAgLT4gMUUtOAorcG93eDExMSBwb3dlciAgJzEwJyAgJy03JyAgIC0+IDFFLTcKK3Bvd3gxMTIgcG93ZXIgICcxMCcgICctNicgICAtPiAwLjAwMDAwMQorcG93eDExMyBwb3dlciAgJzEwJyAgJy01JyAgIC0+IDAuMDAwMDEKK3Bvd3gxMTQgcG93ZXIgICcxMCcgICctNCcgICAtPiAwLjAwMDEKK3Bvd3gxMTUgcG93ZXIgICcxMCcgICctMycgICAtPiAwLjAwMQorcG93eDExNiBwb3dlciAgJzEwJyAgJy0yJyAgIC0+IDAuMDEKK3Bvd3gxMTcgcG93ZXIgICcxMCcgICctMScgICAtPiAwLjEKK3Bvd3gxMjEgcG93ZXIgICcxMCcgICctNzcnICAtPiAnMUUtNzcnCitwb3d4MTIyIHBvd2VyICAnMTAnICAnLTIyJyAgLT4gJzFFLTIyJworCitwb3d4MTIzIHBvd2VyICAgJzInICAnLTEnICAgLT4gJzAuNScKK3Bvd3gxMjQgcG93ZXIgICAnMicgICctMicgICAtPiAnMC4yNScKK3Bvd3gxMjUgcG93ZXIgICAnMicgICctNCcgICAtPiAnMC4wNjI1JworCitwb3d4MTI2IHBvd2VyICAgJzAnICAnLTEnICAgLT4gSW5maW5pdHkKK3Bvd3gxMjcgcG93ZXIgICAnMCcgICctMicgICAtPiBJbmZpbml0eQorcG93eDEyOCBwb3dlciAgIC0wICAgJy0xJyAgIC0+IC1JbmZpbml0eQorcG93eDEyOSBwb3dlciAgIC0wICAgJy0yJyAgIC0+IEluZmluaXR5CisKKy0tICIwLjUiIHRlc3RzIGZyb20gb3JpZ2luYWwgUmV4eCBkaWFnbm9zdGljcyBbbG9vcCB1bnJvbGxlZF0KK3Bvd3gyMDAgcG93ZXIgICAwLjUgICAgMCAgICAtPiAxCitwb3d4MjAxIHBvd2VyICAgMC41ICAgIDEgICAgLT4gMC41Citwb3d4MjAyIHBvd2VyICAgMC41ICAgIDIgICAgLT4gMC4yNQorcG93eDIwMyBwb3dlciAgIDAuNSAgICAzICAgIC0+IDAuMTI1Citwb3d4MjA0IHBvd2VyICAgMC41ICAgIDQgICAgLT4gMC4wNjI1Citwb3d4MjA1IHBvd2VyICAgMC41ICAgIDUgICAgLT4gMC4wMzEyNQorcG93eDIwNiBwb3dlciAgIDAuNSAgICA2ICAgIC0+IDAuMDE1NjI1Citwb3d4MjA3IHBvd2VyICAgMC41ICAgIDcgICAgLT4gMC4wMDc4MTI1Citwb3d4MjA4IHBvd2VyICAgMC41ICAgIDggICAgLT4gMC4wMDM5MDYyNQorcG93eDIwOSBwb3dlciAgIDAuNSAgICA5ICAgIC0+IDAuMDAxOTUzMTI1Citwb3d4MjEwIHBvd2VyICAgMC41ICAgMTAgICAgLT4gMC4wMDA5NzY1NjI1CisKK3Bvd3gyMTEgcG93ZXIgMSAgMTAwMDAwMDAwICAtPiAxCitwb3d4MjEyIHBvd2VyIDEgIDk5OTk5OTk5OCAgLT4gMQorcG93eDIxMyBwb3dlciAxICA5OTk5OTk5OTkgIC0+IDEKKworCistLSBUaGUgVmllbm5hIGNhc2UuICBDaGVja3MgYm90aCBzZXR1cCBhbmQgMS9hY2Mgd29ya2luZyBwcmVjaXNpb24KKy0tIE1vZGlmaWVkIDE5OTguMTIuMTQgYXMgUkhTIG5vIGxvbmdlciByb3VuZGVkIGJlZm9yZSB1c2UgKG11c3QgZml0KQorLS0gTW9kaWZpZWQgMTk5MC4wMi4wNCBhcyBMSFMgaXMgbm93IHJvdW5kZWQgKGluc3RlYWQgb2YgdHJ1bmNhdGVkIHRvIGd1YXJkKQorLS0gICAgJzEyMzQ1Njc4OUUrMTAnICAgIC0tIGxocyAuLiByb3VuZGVkIHRvIDEuMjNFKzE4CistLSAgICAnLTEuMjMwMDBlKzInICAgICAgLS0gcmhzIC4uIFt3YXM6IC0xLjIzNDU1ZSsyLCByb3VuZHMgdG8gLTEyM10KKy0tIE1vZGlmaWVkIDIwMDIuMTAuMDYgLS0gZmluYWxseSwgbm8gaW5wdXQgcm91bmRpbmcKKy0tIFdpdGggaW5wdXQgcm91bmRpbmcsIHJlc3VsdCB3b3VsZCBiZSA4Ljc0RS0yMjI2CitwcmVjaXNpb246IDMKK21heGV4cG9uZW50OiA1MDAwCittaW5leHBvbmVudDogLTUwMDAKK3Bvd3gyMTkgcG93ZXIgJzEyMzQ1Njc4OUUrMTAnICctMS4yMzAwMGUrMicgLT4gJzUuNTRFLTIyMjYnIEluZXhhY3QgUm91bmRlZAorCistLSB6ZXJvcworbWF4ZXhwb25lbnQ6ICs5NgorbWluZXhwb25lbnQ6IC05NQorcHJlY2lzaW9uOiA3Citwb3d4MjIzIHBvd2VyICAgICAgICAgIDBFLTMwIDMgIC0+ICAwCitwb3d4MjI0IHBvd2VyICAgICAgICAgIDBFLTEwIDMgIC0+ICAwCitwb3d4MjI1IHBvd2VyICAgICAgICAgIDBFLTEgIDMgIC0+ICAwCitwb3d4MjI2IHBvd2VyICAgICAgICAgIDBFKzAgIDMgIC0+ICAwCitwb3d4MjI3IHBvd2VyICAgICAgICAgIDAgICAgIDMgIC0+ICAwCitwb3d4MjI4IHBvd2VyICAgICAgICAgIDBFKzEgIDMgIC0+ICAwCitwb3d4MjI5IHBvd2VyICAgICAgICAgIDBFKzEwIDMgIC0+ICAwCitwb3d4MjMwIHBvd2VyICAgICAgICAgIDBFKzMwIDMgIC0+ICAwCitwb3d4MjMxIHBvd2VyICAgICAzICAgIDBFLTMwICAgIC0+ICAxCitwb3d4MjMyIHBvd2VyICAgICAzICAgIDBFLTEwICAgIC0+ICAxCitwb3d4MjMzIHBvd2VyICAgICAzICAgIDBFLTEgICAgIC0+ICAxCitwb3d4MjM0IHBvd2VyICAgICAzICAgIDBFKzAgICAgIC0+ICAxCitwb3d4MjM1IHBvd2VyICAgICAzICAgIDAgICAgICAgIC0+ICAxCitwb3d4MjM2IHBvd2VyICAgICAzICAgIDBFKzEgICAgIC0+ICAxCitwb3d4MjM3IHBvd2VyICAgICAzICAgIDBFKzEwICAgIC0+ICAxCitwb3d4MjM4IHBvd2VyICAgICAzICAgIDBFKzMwICAgIC0+ICAxCitwb3d4MjM5IHBvd2VyICAgICAgICAgIDBFLTMwIC0zIC0+ICBJbmZpbml0eQorcG93eDI0MCBwb3dlciAgICAgICAgICAwRS0xMCAtMyAtPiAgSW5maW5pdHkKK3Bvd3gyNDEgcG93ZXIgICAgICAgICAgMEUtMSAgLTMgLT4gIEluZmluaXR5Citwb3d4MjQyIHBvd2VyICAgICAgICAgIDBFKzAgIC0zIC0+ICBJbmZpbml0eQorcG93eDI0MyBwb3dlciAgICAgICAgICAwICAgICAtMyAtPiAgSW5maW5pdHkKK3Bvd3gyNDQgcG93ZXIgICAgICAgICAgMEUrMSAgLTMgLT4gIEluZmluaXR5Citwb3d4MjQ1IHBvd2VyICAgICAgICAgIDBFKzEwIC0zIC0+ICBJbmZpbml0eQorcG93eDI0NiBwb3dlciAgICAgICAgICAwRSszMCAtMyAtPiAgSW5maW5pdHkKK3Bvd3gyNDcgcG93ZXIgICAgLTMgICAgMEUtMzAgICAgLT4gIDEKK3Bvd3gyNDggcG93ZXIgICAgLTMgICAgMEUtMTAgICAgLT4gIDEKK3Bvd3gyNDkgcG93ZXIgICAgLTMgICAgMEUtMSAgICAgLT4gIDEKK3Bvd3gyNTAgcG93ZXIgICAgLTMgICAgMEUrMCAgICAgLT4gIDEKK3Bvd3gyNTEgcG93ZXIgICAgLTMgICAgMCAgICAgICAgLT4gIDEKK3Bvd3gyNTIgcG93ZXIgICAgLTMgICAgMEUrMSAgICAgLT4gIDEKK3Bvd3gyNTMgcG93ZXIgICAgLTMgICAgMEUrMTAgICAgLT4gIDEKK3Bvd3gyNTQgcG93ZXIgICAgLTMgICAgMEUrMzAgICAgLT4gIDEKKworLS0gYSBmZXcgbGhzIG5lZ2F0aXZlcworcHJlY2lzaW9uOiA5CittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcG93eDI2MCBwb3dlciAgIC0xMCAgICcwJyAgICAgICAgIC0+IDEKK3Bvd3gyNjEgcG93ZXIgICAtMTAgICAnMScgICAgICAgICAtPiAtMTAKK3Bvd3gyNjIgcG93ZXIgICAtMTAgICAnMicgICAgICAgICAtPiAxMDAKK3Bvd3gyNjMgcG93ZXIgICAtMTAgICAnMycgICAgICAgICAtPiAtMTAwMAorcG93eDI2NCBwb3dlciAgIC0xMCAgICc0JyAgICAgICAgIC0+IDEwMDAwCitwb3d4MjY1IHBvd2VyICAgLTEwICAgJzUnICAgICAgICAgLT4gLTEwMDAwMAorcG93eDI2NiBwb3dlciAgIC0xMCAgICc2JyAgICAgICAgIC0+IDEwMDAwMDAKK3Bvd3gyNjcgcG93ZXIgICAtMTAgICAnNycgICAgICAgICAtPiAtMTAwMDAwMDAKK3Bvd3gyNjggcG93ZXIgICAtMTAgICAnOCcgICAgICAgICAtPiAxMDAwMDAwMDAKK3Bvd3gyNjkgcG93ZXIgICAtMTAgICAnOScgICAgICAgICAtPiAtMS4wMDAwMDAwMEUrOSBSb3VuZGVkCitwb3d4MjcwIHBvd2VyICAgLTEwICAgJzIyJyAgICAgICAgLT4gMS4wMDAwMDAwMEUrMjIgUm91bmRlZAorcG93eDI3MSBwb3dlciAgIC0xMCAgICc3NycgICAgICAgIC0+IC0xLjAwMDAwMDAwRSs3NyBSb3VuZGVkCitwb3d4MjcyIHBvd2VyICAgLTEwICAgJzk5JyAgICAgICAgLT4gLTEuMDAwMDAwMDBFKzk5IFJvdW5kZWQKKworLS0gc29tZSBtb3JlIGVkZ2UgY2FzZXMKK3ByZWNpc2lvbjogICAxNQorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3Bvd3gzOTEgcG93ZXIgIDAuMSAgIDk5OSAtPiAxRS05OTkKK3Bvd3gzOTIgcG93ZXIgIDAuMDk5IDk5OSAtPiA0LjM2MDczMjA2MkUtMTAwNCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDM5MyBwb3dlciAgMC4wOTggOTk5IC0+IDEuNzE3MzFFLTEwMDggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzOTQgcG93ZXIgIDAuMDk3IDk5OSAtPiA2RS0xMDEzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4Mzk1IHBvd2VyICAwLjA5NiA5OTkgLT4gMEUtMTAxMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4Mzk2IHBvd2VyICAwLjAxICA5OTkgLT4gMEUtMTAxMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4Mzk3IHBvd2VyICAwLjAyIDEwMDAwMDAwMCAtPiAwRS0xMDEzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gbXVsdGlwbHkgdGVzdHMgYXJlIGhlcmUgdG8gYWlkIGNoZWNraW5nIGFuZCB0ZXN0IGZvciBjb25zaXN0ZW50IGhhbmRsaW5nCistLSBvZiB1bmRlcmZsb3cKK3ByZWNpc2lvbjogNQorbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKKworLS0gc3F1YXJlcworbXVseDQwMCBtdWx0aXBseSAgMUUtNTAyICAgICAxZS01MDIgLT4gMEUtMTAwMyAgICBTdWJub3JtYWwgSW5leGFjdCBVbmRlcmZsb3cgUm91bmRlZCBDbGFtcGVkCittdWx4NDAxIG11bHRpcGx5ICAxRS01MDEgICAgIDFlLTUwMSAtPiAxRS0xMDAyICAgIFN1Ym5vcm1hbAorbXVseDQwMiBtdWx0aXBseSAgMkUtNTAxICAgICAyZS01MDEgLT4gNEUtMTAwMiAgICBTdWJub3JtYWwKK211bHg0MDMgbXVsdGlwbHkgIDRFLTUwMSAgICAgNGUtNTAxIC0+IDEuNkUtMTAwMSAgU3Vibm9ybWFsCittdWx4NDA0IG11bHRpcGx5IDEwRS01MDEgICAgMTBlLTUwMSAtPiAxLjAwRS0xMDAwIFN1Ym5vcm1hbAorbXVseDQwNSBtdWx0aXBseSAzMEUtNTAxICAgIDMwZS01MDEgLT4gOS4wMEUtMTAwMCBTdWJub3JtYWwKK211bHg0MDYgbXVsdGlwbHkgNDBFLTUwMSAgICA0MGUtNTAxIC0+IDEuNjAwRS05OTkKKworcG93eDQwMCBwb3dlciAgICAgMUUtNTAyICAgICAyICAgICAgLT4gMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4NDAxIHBvd2VyICAgICAxRS01MDEgICAgIDIgICAgICAtPiAxRS0xMDAyICAgIFN1Ym5vcm1hbAorcG93eDQwMiBwb3dlciAgICAgMkUtNTAxICAgICAyICAgICAgLT4gNEUtMTAwMiAgICBTdWJub3JtYWwKK3Bvd3g0MDMgcG93ZXIgICAgIDRFLTUwMSAgICAgMiAgICAgIC0+IDEuNkUtMTAwMSAgU3Vibm9ybWFsCitwb3d4NDA0IHBvd2VyICAgIDEwRS01MDEgICAgIDIgICAgICAtPiAxLjAwRS0xMDAwIFN1Ym5vcm1hbAorcG93eDQwNSBwb3dlciAgICAzMEUtNTAxICAgICAyICAgICAgLT4gOS4wMEUtMTAwMCBTdWJub3JtYWwKK3Bvd3g0MDYgcG93ZXIgICAgNDBFLTUwMSAgICAgMiAgICAgIC0+IDEuNjAwRS05OTkKKworLS0gY3ViZXMKK211bHg0MTAgbXVsdGlwbHkgIDFFLTY3MCAgICAgMWUtMzM1IC0+IDBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbXVseDQxMSBtdWx0aXBseSAgMUUtNjY4ICAgICAxZS0zMzQgLT4gMUUtMTAwMiAgICBTdWJub3JtYWwKK211bHg0MTIgbXVsdGlwbHkgIDRFLTY2OCAgICAgMmUtMzM0IC0+IDhFLTEwMDIgICAgU3Vibm9ybWFsCittdWx4NDEzIG11bHRpcGx5ICA5RS02NjggICAgIDNlLTMzNCAtPiAyLjdFLTEwMDEgIFN1Ym5vcm1hbAorbXVseDQxNCBtdWx0aXBseSAxNkUtNjY4ICAgICA0ZS0zMzQgLT4gNi40RS0xMDAxICBTdWJub3JtYWwKK211bHg0MTUgbXVsdGlwbHkgMjVFLTY2OCAgICAgNWUtMzM0IC0+IDEuMjVFLTEwMDAgU3Vibm9ybWFsCittdWx4NDE2IG11bHRpcGx5IDEwRS02NjggICAxMDBlLTMzNCAtPiAxLjAwMEUtOTk5CisKK3Bvd3g0MTAgcG93ZXIgICAgIDFFLTMzNSAgICAgMyAgICAgIC0+IDBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDQxMSBwb3dlciAgICAgMUUtMzM0ICAgICAzICAgICAgLT4gMUUtMTAwMiAgICBTdWJub3JtYWwKK3Bvd3g0MTIgcG93ZXIgICAgIDJFLTMzNCAgICAgMyAgICAgIC0+IDhFLTEwMDIgICAgU3Vibm9ybWFsCitwb3d4NDEzIHBvd2VyICAgICAzRS0zMzQgICAgIDMgICAgICAtPiAyLjdFLTEwMDEgIFN1Ym5vcm1hbAorcG93eDQxNCBwb3dlciAgICAgNEUtMzM0ICAgICAzICAgICAgLT4gNi40RS0xMDAxICBTdWJub3JtYWwKK3Bvd3g0MTUgcG93ZXIgICAgIDVFLTMzNCAgICAgMyAgICAgIC0+IDEuMjVFLTEwMDAgU3Vibm9ybWFsCitwb3d4NDE2IHBvd2VyICAgIDEwRS0zMzQgICAgIDMgICAgICAtPiAxLjAwMEUtOTk5CisKKy0tIG5lZ2F0aXZlIHBvd2VycywgdGVzdGluZyBzdWJub3JtYWxzCitwcmVjaXNpb246ICAgNQorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3Bvd3g0MjEgcG93ZXIgIDIuNUUtNTAxICAgICAtMiAgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjIgcG93ZXIgIDIuNUUtNTAwICAgICAtMiAgICAgICAgIC0+ICAxLjZFKzk5OQorCitwb3d4NDIzIHBvd2VyICAyLjVFKzQ5OSAgICAgLTIgICAgICAgICAtPiAgMS42RS05OTkKK3Bvd3g0MjQgcG93ZXIgIDIuNUUrNTAwICAgICAtMiAgICAgICAgIC0+ICAxLjZFLTEwMDEgU3Vibm9ybWFsCitwb3d4NDI1IHBvd2VyICAyLjVFKzUwMSAgICAgLTIgICAgICAgICAtPiAgICAyRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4NDI2IHBvd2VyICAyLjVFKzUwMiAgICAgLTIgICAgICAgICAtPiAgICAwRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworcG93eDQyNyBwb3dlciAwLjI1RSs0OTkgICAgIC0yICAgICAgICAgLT4gIDEuNkUtOTk3Citwb3d4NDI4IHBvd2VyIDAuMjVFKzUwMCAgICAgLTIgICAgICAgICAtPiAgMS42RS05OTkKK3Bvd3g0MjkgcG93ZXIgMC4yNUUrNTAxICAgICAtMiAgICAgICAgIC0+ICAxLjZFLTEwMDEgU3Vibm9ybWFsCitwb3d4NDMwIHBvd2VyIDAuMjVFKzUwMiAgICAgLTIgICAgICAgICAtPiAgICAyRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4NDMxIHBvd2VyIDAuMjVFKzUwMyAgICAgLTIgICAgICAgICAtPiAgICAwRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworcG93eDQzMiBwb3dlciAwLjA0RSs0OTkgICAgIC0yICAgICAgICAgLT4gIDYuMjVFLTk5NgorcG93eDQzMyBwb3dlciAwLjA0RSs1MDAgICAgIC0yICAgICAgICAgLT4gIDYuMjVFLTk5OAorcG93eDQzNCBwb3dlciAwLjA0RSs1MDEgICAgIC0yICAgICAgICAgLT4gIDYuMjVFLTEwMDAgU3Vibm9ybWFsCitwb3d4NDM1IHBvd2VyIDAuMDRFKzUwMiAgICAgLTIgICAgICAgICAtPiAgIDYuMkUtMTAwMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDQzNiBwb3dlciAwLjA0RSs1MDMgICAgIC0yICAgICAgICAgLT4gICAgIDFFLTEwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzcgcG93ZXIgMC4wNEUrNTA0ICAgICAtMiAgICAgICAgIC0+ICAgICAwRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworcG93eDQ0MSBwb3dlciAwLjA0RSszMzQgICAgIC0zICAgICAgICAgLT4gIDEuNTYyNUUtOTk4Citwb3d4NDQyIHBvd2VyIDAuMDRFKzMzNSAgICAgLTMgICAgICAgICAtPiAgICAxLjU2RS0xMDAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4NDQzIHBvd2VyIDAuMDRFKzMzNiAgICAgLTMgICAgICAgICAtPiAgICAgICAwRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3g0NDQgcG93ZXIgMC4yNUUrMzMzICAgICAtMyAgICAgICAgIC0+ICAgICA2LjRFLTk5OAorcG93eDQ0NSBwb3dlciAwLjI1RSszMzQgICAgIC0zICAgICAgICAgLT4gICAgIDYuNEUtMTAwMSBTdWJub3JtYWwKK3Bvd3g0NDYgcG93ZXIgMC4yNUUrMzM1ICAgICAtMyAgICAgICAgIC0+ICAgICAgIDFFLTEwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0NDcgcG93ZXIgMC4yNUUrMzM2ICAgICAtMyAgICAgICAgIC0+ICAgICAgIDBFLTEwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gY2hlY2sgc2lnbiBmb3IgY3ViZXMgIGFuZCBhIGZldyBzcXVhcmVzCitwb3d4NDQ4IHBvd2VyIC0wLjA0RSszMzQgICAgLTMgICAgICAgICAtPiAtMS41NjI1RS05OTgKK3Bvd3g0NDkgcG93ZXIgLTAuMDRFKzMzNSAgICAtMyAgICAgICAgIC0+ICAgLTEuNTZFLTEwMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0NTAgcG93ZXIgLTAuMDRFKzMzNiAgICAtMyAgICAgICAgIC0+ICAgICAgLTBFLTEwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDQ1MSBwb3dlciAtMC4yNUUrMzMzICAgIC0zICAgICAgICAgLT4gICAgLTYuNEUtOTk4Citwb3d4NDUyIHBvd2VyIC0wLjI1RSszMzQgICAgLTMgICAgICAgICAtPiAgICAtNi40RS0xMDAxIFN1Ym5vcm1hbAorcG93eDQ1MyBwb3dlciAtMC4yNUUrMzM1ICAgIC0zICAgICAgICAgLT4gICAgICAtMUUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDQ1NCBwb3dlciAtMC4yNUUrMzM2ICAgIC0zICAgICAgICAgLT4gICAgICAtMEUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4NDU1IHBvd2VyIC0wLjA0RSs0OTkgICAgLTIgICAgICAgICAtPiAgICA2LjI1RS05OTYKK3Bvd3g0NTYgcG93ZXIgLTAuMDRFKzUwMCAgICAtMiAgICAgICAgIC0+ICAgIDYuMjVFLTk5OAorcG93eDQ1NyBwb3dlciAtMC4wNEUrNTAxICAgIC0yICAgICAgICAgLT4gICAgNi4yNUUtMTAwMCBTdWJub3JtYWwKK3Bvd3g0NTggcG93ZXIgLTAuMDRFKzUwMiAgICAtMiAgICAgICAgIC0+ICAgICA2LjJFLTEwMDIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCAtMHMKK3ByZWNpc2lvbjogOQorcG93eDU2MCBwb3dlciAgMCAgMCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcG93eDU2MSBwb3dlciAgMCAtMCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcG93eDU2MiBwb3dlciAtMCAgMCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcG93eDU2MyBwb3dlciAtMCAtMCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcG93eDU2NCBwb3dlciAgMSAgMCAgICAgICAgLT4gIDEKK3Bvd3g1NjUgcG93ZXIgIDEgLTAgICAgICAgIC0+ICAxCitwb3d4NTY2IHBvd2VyIC0xICAwICAgICAgICAtPiAgMQorcG93eDU2NyBwb3dlciAtMSAtMCAgICAgICAgLT4gIDEKK3Bvd3g1NjggcG93ZXIgIDAgIDEgICAgICAgIC0+ICAwCitwb3d4NTY5IHBvd2VyICAwIC0xICAgICAgICAtPiAgSW5maW5pdHkKK3Bvd3g1NzAgcG93ZXIgLTAgIDEgICAgICAgIC0+IC0wCitwb3d4NTcxIHBvd2VyIC0wIC0xICAgICAgICAtPiAtSW5maW5pdHkKK3Bvd3g1NzIgcG93ZXIgIDAgIDIgICAgICAgIC0+ICAwCitwb3d4NTczIHBvd2VyICAwIC0yICAgICAgICAtPiAgSW5maW5pdHkKK3Bvd3g1NzQgcG93ZXIgLTAgIDIgICAgICAgIC0+ICAwCitwb3d4NTc1IHBvd2VyIC0wIC0yICAgICAgICAtPiAgSW5maW5pdHkKK3Bvd3g1NzYgcG93ZXIgIDAgIDMgICAgICAgIC0+ICAwCitwb3d4NTc3IHBvd2VyICAwIC0zICAgICAgICAtPiAgSW5maW5pdHkKK3Bvd3g1NzggcG93ZXIgLTAgIDMgICAgICAgIC0+IC0wCitwb3d4NTc5IHBvd2VyIC0wIC0zICAgICAgICAtPiAtSW5maW5pdHkKKworLS0gU3BlY2lhbHMKK3Bvd3g1ODAgcG93ZXIgIEluZiAgLUluZiAgIC0+ICAwCitwb3d4NTgxIHBvd2VyICBJbmYgIC0xMDAwICAtPiAgMAorcG93eDU4MiBwb3dlciAgSW5mICAtMSAgICAgLT4gIDAKK3Bvd3g1ODMgcG93ZXIgIEluZiAgLTAuNSAgIC0+ICAwCitwb3d4NTg0IHBvd2VyICBJbmYgIC0wICAgICAtPiAgMQorcG93eDU4NSBwb3dlciAgSW5mICAgMCAgICAgLT4gIDEKK3Bvd3g1ODYgcG93ZXIgIEluZiAgIDAuNSAgIC0+ICBJbmZpbml0eQorcG93eDU4NyBwb3dlciAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5Citwb3d4NTg4IHBvd2VyICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK3Bvd3g1ODkgcG93ZXIgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorcG93eDU5MCBwb3dlciAtMTAwMCAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g1OTEgcG93ZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NTkyIHBvd2VyIC0xICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDU5MyBwb3dlciAtMC41ICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g1OTQgcG93ZXIgLTAgICAgIEluZiAgIC0+ICAwCitwb3d4NTk1IHBvd2VyICAwICAgICBJbmYgICAtPiAgMAorcG93eDU5NiBwb3dlciAgMC41ICAgSW5mICAgLT4gIDAKK3Bvd3g1OTcgcG93ZXIgIDEgICAgIEluZiAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDU5OCBwb3dlciAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Citwb3d4NTk5IHBvd2VyICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworcG93eDYwMCBwb3dlciAtSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2MDEgcG93ZXIgLUluZiAgLTEwMDAgIC0+ICAwCitwb3d4NjAyIHBvd2VyIC1JbmYgIC0xICAgICAtPiAtMAorcG93eDYwMyBwb3dlciAtSW5mICAtMC41ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2MDQgcG93ZXIgLUluZiAgLTAgICAgIC0+ICAxCitwb3d4NjA1IHBvd2VyIC1JbmYgICAwICAgICAtPiAgMQorcG93eDYwNiBwb3dlciAtSW5mICAgMC41ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2MDcgcG93ZXIgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorcG93eDYwOCBwb3dlciAtSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Citwb3d4NjA5IHBvd2VyIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDYxMCBwb3dlciAtMTAwMCAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2MTEgcG93ZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjEyIHBvd2VyIC0xICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDYxMyBwb3dlciAtMC41ICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2MTQgcG93ZXIgLTAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorcG93eDYxNSBwb3dlciAgMCAgICAtSW5mICAgLT4gIEluZmluaXR5Citwb3d4NjE2IHBvd2VyICAwLjUgIC1JbmYgICAtPiAgSW5maW5pdHkKK3Bvd3g2MTcgcG93ZXIgIDEgICAgLUluZiAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDYxOCBwb3dlciAgMTAwMCAtSW5mICAgLT4gIDAKK3Bvd3g2MTkgcG93ZXIgIEluZiAgLUluZiAgIC0+ICAwCisKK3Bvd3g2MjEgcG93ZXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KK3Bvd3g2MjIgcG93ZXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK3Bvd3g2MjMgcG93ZXIgIE5hTiAtMSAgICAgIC0+ICBOYU4KK3Bvd3g2MjQgcG93ZXIgIE5hTiAtMC41ICAgIC0+ICBOYU4KK3Bvd3g2MjUgcG93ZXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KK3Bvd3g2MjYgcG93ZXIgIE5hTiAgMCAgICAgIC0+ICBOYU4KK3Bvd3g2MjcgcG93ZXIgIE5hTiAgMC41ICAgIC0+ICBOYU4KK3Bvd3g2MjggcG93ZXIgIE5hTiAgMSAgICAgIC0+ICBOYU4KK3Bvd3g2MjkgcG93ZXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK3Bvd3g2MzAgcG93ZXIgIE5hTiAgSW5mICAgIC0+ICBOYU4KK3Bvd3g2MzEgcG93ZXIgIE5hTiAgTmFOICAgIC0+ICBOYU4KK3Bvd3g2MzIgcG93ZXIgLUluZiAgTmFOICAgIC0+ICBOYU4KK3Bvd3g2MzMgcG93ZXIgLTEwMDAgTmFOICAgIC0+ICBOYU4KK3Bvd3g2MzQgcG93ZXIgLTEgICAgTmFOICAgIC0+ICBOYU4KK3Bvd3g2MzUgcG93ZXIgLTAgICAgTmFOICAgIC0+ICBOYU4KK3Bvd3g2MzYgcG93ZXIgIDAgICAgTmFOICAgIC0+ICBOYU4KK3Bvd3g2MzcgcG93ZXIgIDEgICAgTmFOICAgIC0+ICBOYU4KK3Bvd3g2MzggcG93ZXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KK3Bvd3g2MzkgcG93ZXIgIEluZiAgTmFOICAgIC0+ICBOYU4KKworcG93eDY0MSBwb3dlciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NDIgcG93ZXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjQzIHBvd2VyICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY0NCBwb3dlciAgc05hTiAtMC41ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NDUgcG93ZXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjQ2IHBvd2VyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY0NyBwb3dlciAgc05hTiAgMC41ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NDggcG93ZXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjQ5IHBvd2VyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY1MCBwb3dlciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NTEgcG93ZXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjUyIHBvd2VyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY1MyBwb3dlciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NTQgcG93ZXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjU1IHBvd2VyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY1NiBwb3dlciAtMC41ICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NTcgcG93ZXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjU4IHBvd2VyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY1OSBwb3dlciAgMC41ICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NjAgcG93ZXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjYxIHBvd2VyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY2MiBwb3dlciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NjMgcG93ZXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTiBwcm9wYWdhdGlvbgorcG93eDY3MCBwb3dlciAgTmFOMyAgc05hTjcgIC0+ICBOYU43ICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY3MSBwb3dlciAgc05hTjggIE5hTjYgIC0+ICBOYU44ICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY3MiBwb3dlciAgMSAgICAgc05hTjcgIC0+ICBOYU43ICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY3MyBwb3dlciAgc05hTjggIDEgICAgIC0+ICBOYU44ICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY3NCBwb3dlciAgSW5mICAgc05hTjcgIC0+ICBOYU43ICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY3NSBwb3dlciAgc05hTjggIEluZiAgIC0+ICBOYU44ICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY3NiBwb3dlciAgSW5mICAgIE5hTjkgIC0+ICBOYU45Citwb3d4Njc3IHBvd2VyICBOYU42ICAgSW5mICAgLT4gIE5hTjYKK3Bvd3g2NzggcG93ZXIgIDEgICAgICBOYU41ICAtPiAgTmFONQorcG93eDY3OSBwb3dlciAgTmFOMiAgIDEgICAgIC0+ICBOYU4yCitwb3d4NjgwIHBvd2VyICBOYU4yICAgTmFuNCAgLT4gIE5hTjIKK3Bvd3g2ODEgcG93ZXIgIE5hTiAgICBOYW40ICAtPiAgTmFOCitwb3d4NjgyIHBvd2VyICBOYU4zNDUgTmFuICAgLT4gIE5hTjM0NQorcG93eDY4MyBwb3dlciAgSW5mICAgIC1zTmFONyAtPiAtTmFONyAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2ODQgcG93ZXIgIC1zTmFOOCAgSW5mICAgLT4gLU5hTjggIEludmFsaWRfb3BlcmF0aW9uCitwb3d4Njg1IHBvd2VyICBJbmYgICAgLU5hTjkgIC0+IC1OYU45Citwb3d4Njg2IHBvd2VyICAtTmFONiAgIEluZiAgIC0+IC1OYU42Citwb3d4Njg3IHBvd2VyICAtTmFOMiAgLU5hbjQgIC0+IC1OYU4yCisKKy0tIGxvbmcgb3BlcmFuZCBhbmQgUkhTIHJhbmdlIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorcG93eDcwMSBwb3dlciAxMjM0NTY3ODAwMCAxIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKK3Bvd3g3MDIgcG93ZXIgMTIzNDU2NzgwMCAgMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK3Bvd3g3MDMgcG93ZXIgMTIzNDU2Nzg5MCAgMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK3Bvd3g3MDQgcG93ZXIgMTIzNDU2Nzg5MSAgMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorcG93eDcwNSBwb3dlciAxMjM0NTY3ODkwMSAxIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorcG93eDcwNiBwb3dlciAxMjM0NTY3ODk2ICAxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTUKKy0tIHN0aWxsIGNoZWNraW5nCitwb3d4NzQxIHBvd2VyIDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKK3Bvd3g3NDIgcG93ZXIgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCitwb3d4NzQzIHBvd2VyIDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MAorcG93eDc0NCBwb3dlciAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKK3Bvd3g3NDUgcG93ZXIgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQorcG93eDc0NiBwb3dlciAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYKKworbWF4ZXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK3ByZWNpc2lvbjogOQorCistLSBuZWFyIG91dC1vZi1yYW5nZSBlZGdlIGNhc2VzCitwb3d4MTYzIHBvd2VyICAgJzEwJyAgJzk5OTk5OScgLT4gJzEuMDAwMDAwMDBFKzk5OTk5OScgUm91bmRlZAorcG93eDE2NCBwb3dlciAgICcxMCcgICc5OTk5OTgnIC0+ICcxLjAwMDAwMDAwRSs5OTk5OTgnIFJvdW5kZWQKK3Bvd3gxNjUgcG93ZXIgICAnMTAnICAnOTk5OTk3JyAtPiAnMS4wMDAwMDAwMEUrOTk5OTk3JyBSb3VuZGVkCitwb3d4MTY2IHBvd2VyICAgJzEwJyAgJzMzMzMzMycgLT4gJzEuMDAwMDAwMDBFKzMzMzMzMycgUm91bmRlZAorcG93eDE4MyBwb3dlciAgICc3JyAgICcxMDAwMDAwJyAgLT4gMS4wOTY1MTQxOUUrODQ1MDk4IEluZXhhY3QgUm91bmRlZAorcG93eDE4NCBwb3dlciAgICc3JyAgICcxMDAwMDAxJyAgLT4gNy42NzU1OTkzNEUrODQ1MDk4IEluZXhhY3QgUm91bmRlZAorcG93eDE4NiBwb3dlciAgICc3JyAgICctMTAwMDAwMScgLT4gMS4zMDI4Mjk4NkUtODQ1MDk5IEluZXhhY3QgUm91bmRlZAorcG93eDE4NyBwb3dlciAgICc3JyAgICctMTAwMDAwMCcgLT4gOS4xMTk4MDkwMUUtODQ1MDk5IEluZXhhY3QgUm91bmRlZAorcG93eDExOCBwb3dlciAgJzEwJyAgJy0zMzMzMzMnICAgLT4gMUUtMzMzMzMzCitwb3d4MTE5IHBvd2VyICAnMTAnICAnLTk5OTk5OCcgICAtPiAxRS05OTk5OTgKK3Bvd3gxMjAgcG93ZXIgICcxMCcgICctOTk5OTk5JyAgIC0+IDFFLTk5OTk5OQorcG93eDE4MSBwb3dlciAgICc3JyAgICc5OTk5OTgnICAgLT4gMi4yMzc3ODQwNkUrODQ1MDk2IEluZXhhY3QgUm91bmRlZAorcG93eDE4MiBwb3dlciAgICc3JyAgICc5OTk5OTknICAgLT4gMS41NjY0NDg4NEUrODQ1MDk3IEluZXhhY3QgUm91bmRlZAorcG93eDE4OSBwb3dlciAgICc3JyAgICctOTk5OTk5JyAgLT4gNi4zODM4NjYzMUUtODQ1MDk4IEluZXhhY3QgUm91bmRlZAorcG93eDE5MCBwb3dlciAgICc3JyAgICctOTk5OTk4JyAgLT4gNC40Njg3MDY0MUUtODQ1MDk3IEluZXhhY3QgUm91bmRlZAorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzCitwcmVjaXNpb246IDkKKworcG93eDI3NyBwb3dlciAgOSAgICAgICAgICAgICA5OTk5OTkgLT4gMy41OTA4NDYyOUUrOTU0MjQxIEluZXhhY3QgUm91bmRlZAorcG93eDI3OCBwb3dlciAgOS45OTk5OTk5OSAgICA5OTk5OTkgLT4gOS45OTAwMDUwMUUrOTk5OTk4IEluZXhhY3QgUm91bmRlZAorcG93eDI3OSBwb3dlciAxMCAgICAgICAgICAgICA5OTk5OTkgLT4gMS4wMDAwMDAwMEUrOTk5OTk5ICAgICAgICAgUm91bmRlZAorcG93eDI4MCBwb3dlciAxMC4wMDAwMDAxICAgICA5OTk5OTkgLT4gMS4wMTAwNTAxNkUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorcG93eDI4MSBwb3dlciAxMC4wMDAwMDEgICAgICA5OTk5OTkgLT4gMS4xMDUxNzA4MEUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorcG93eDI4MiBwb3dlciAxMC4wMDAwMSAgICAgICA5OTk5OTkgLT4gMi43MTgyNzc3NUUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorcG93eDI4MyBwb3dlciAxMC4wMDAxICAgICAgICA5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4Mjg1IHBvd2VyIDExICAgICAgICAgICAgIDk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyODYgcG93ZXIgMTIgICAgICAgICAgICAgOTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDI4NyBwb3dlciA5OTkgICAgICAgICAgICA5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4Mjg4IHBvd2VyIDk5OTk5OTk5OSAgICAgIDk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyODkgcG93ZXIgOS45RTk5OTk5OTk5OSAgOTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitwb3d4MjkwIHBvd2VyIDAuNSAgICAgICAgICAgIDk5OTk5OSAtPiAyLjAyMDA2ODEyRS0zMDEwMzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjkxIHBvd2VyIDAuMSAgICAgICAgICAgIDk5OTk5OSAtPiAxRS05OTk5OTkgIC0tIHVucm91bmRlZAorcG93eDI5MiBwb3dlciAwLjA5ICAgICAgICAgICA5OTk5OTkgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MjkzIHBvd2VyIDAuMDUgICAgICAgICAgIDk5OTk5OSAtPiAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gyOTQgcG93ZXIgMC4wMSAgICAgICAgICAgOTk5OTk5IC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDI5NSBwb3dlciAwLjAwMDEgICAgICAgICA5OTk5OTkgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4Mjk3IHBvd2VyIDAuMDAwMDAwMSAgICAgIDk5OTk5OSAtPiAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gyOTggcG93ZXIgMC4wMDAwMDAwMDAxICAgOTk5OTk5IC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDI5OSBwb3dlciAxRS05OTk5OTk5OTkgICA5OTk5OTkgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK3Bvd3gzMTAgcG93ZXIgLTkgICAgICAgICAgICAgOTk5OTk5IC0+IC0zLjU5MDg0NjI5RSs5NTQyNDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzExIHBvd2VyIC0xMCAgICAgICAgICAgIDk5OTk5OSAtPiAtMS4wMDAwMDAwMEUrOTk5OTk5IFJvdW5kZWQKK3Bvd3gzMTIgcG93ZXIgLTEwLjAwMDEgICAgICAgOTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTMgcG93ZXIgLTEwLjEgICAgICAgICAgOTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTQgcG93ZXIgLTExICAgICAgICAgICAgOTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTUgcG93ZXIgLTEyICAgICAgICAgICAgOTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTYgcG93ZXIgLTk5OSAgICAgICAgICAgOTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTcgcG93ZXIgLTk5OTk5OSAgICAgICAgOTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTggcG93ZXIgLTk5OTk5OTk5OSAgICAgOTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTkgcG93ZXIgLTkuOUU5OTk5OTk5OTkgOTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcG93eDMyMCBwb3dlciAtMC41ICAgICAgICAgICA5OTk5OTkgLT4gLTIuMDIwMDY4MTJFLTMwMTAzMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjEgcG93ZXIgLTAuMSAgICAgICAgICAgOTk5OTk5IC0+IC0xRS05OTk5OTkKK3Bvd3gzMjIgcG93ZXIgLTAuMDkgICAgICAgICAgOTk5OTk5IC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzMjMgcG93ZXIgLTAuMDUgICAgICAgICAgOTk5OTk5IC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzMjQgcG93ZXIgLTAuMDEgICAgICAgICAgOTk5OTk5IC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzMjUgcG93ZXIgLTAuMDAwMSAgICAgICAgOTk5OTk5IC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzMjcgcG93ZXIgLTAuMDAwMDAwMSAgICAgOTk5OTk5IC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzMjggcG93ZXIgLTAuMDAwMDAwMDAwMSAgOTk5OTk5IC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzMjkgcG93ZXIgLTFFLTk5OTk5OTk5OSAgOTk5OTk5IC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gbm90ZSBubyB0cmltIG9mIG5leHQgcmVzdWx0Citwb3d4MzMwIHBvd2VyIC05ICAgICAgICAgICAgIDk5OTk5OCAtPiAgMy45ODk4MjkyMUUrOTU0MjQwIEluZXhhY3QgUm91bmRlZAorcG93eDMzMSBwb3dlciAtMTAgICAgICAgICAgICA5OTk5OTggLT4gIDEuMDAwMDAwMDBFKzk5OTk5OCBSb3VuZGVkCitwb3d4MzMyIHBvd2VyIC0xMC4wMDAxICAgICAgIDk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzMzIHBvd2VyIC0xMC4xICAgICAgICAgIDk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzM0IHBvd2VyIC0xMSAgICAgICAgICAgIDk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzM1IHBvd2VyIC0xMiAgICAgICAgICAgIDk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzM2IHBvd2VyIC05OTkgICAgICAgICAgIDk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzM3IHBvd2VyIC05OTk5OTkgICAgICAgIDk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzM4IHBvd2VyIC05OTk5OTk5OTkgICAgIDk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzM5IHBvd2VyIC05LjlFOTk5OTk5OTk5IDk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3Bvd3gzNDAgcG93ZXIgLTAuNSAgICAgICAgICAgOTk5OTk4IC0+ICA0LjA0MDEzNjI0RS0zMDEwMzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQxIHBvd2VyIC0wLjEgICAgICAgICAgIDk5OTk5OCAtPiAgMUUtOTk5OTk4ICAtLSBOQiBleGFjdCB1bnJvdW5kZWQKK3Bvd3gzNDIgcG93ZXIgLTAuMDkgICAgICAgICAgOTk5OTk4IC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzNDMgcG93ZXIgLTAuMDUgICAgICAgICAgOTk5OTk4IC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzNDQgcG93ZXIgLTAuMDEgICAgICAgICAgOTk5OTk4IC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzNDUgcG93ZXIgLTAuMDAwMSAgICAgICAgOTk5OTk4IC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzNDcgcG93ZXIgLTAuMDAwMDAwMSAgICAgOTk5OTk4IC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzNDggcG93ZXIgLTAuMDAwMDAwMDAwMSAgOTk5OTk4IC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzNDkgcG93ZXIgLTFFLTk5OTk5OTk5OSAgOTk5OTk4IC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gc29tZSBzdWJub3JtYWxzCitwcmVjaXNpb246IDkKKy0tIFtwcmVjaXNpb24gaXMgOSwgc28gc21hbGxlc3QgZXhwb25lbnQgaXMgLTEwMDAwMDAwMDcKK3Bvd3gzNTAgcG93ZXIgIDFlLTEgICAgICAgICAgNTAwMDAwIC0+ICAxRS01MDAwMDAKK3Bvd3gzNTEgcG93ZXIgIDFlLTIgICAgICAgICAgOTk5OTk5IC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gzNTIgcG93ZXIgIDFlLTIgICAgICAgICAgNTAwMDAwIC0+ICAxRS0xMDAwMDAwIFN1Ym5vcm1hbAorcG93eDM1MyBwb3dlciAgMWUtMiAgICAgICAgICA1MDAwMDEgLT4gIDFFLTEwMDAwMDIgU3Vibm9ybWFsCitwb3d4MzU0IHBvd2VyICAxZS0yICAgICAgICAgIDUwMDAwMiAtPiAgMUUtMTAwMDAwNCBTdWJub3JtYWwKK3Bvd3gzNTUgcG93ZXIgIDFlLTIgICAgICAgICAgNTAwMDAzIC0+ICAxRS0xMDAwMDA2IFN1Ym5vcm1hbAorcG93eDM1NiBwb3dlciAgMWUtMiAgICAgICAgICA1MDAwMDQgLT4gIDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitwb3d4MzYwIHBvd2VyICAwLjAxMDAwMSAgICAgIDUwMDAwMCAtPiAgNS4xNzE3NjA4MkUtOTk5OTc5IEluZXhhY3QgUm91bmRlZAorcG93eDM2MSBwb3dlciAgMC4wMTAwMDAwMDEgICA1MDAwMDAgLT4gIDEuMDUxMjcxMUUtMTAwMDAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDM2MiBwb3dlciAgMC4wMTAwMDAwMDEgICA1MDAwMDEgLT4gIDEuMDUxMjdFLTEwMDAwMDIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjMgcG93ZXIgIDAuMDEwMDAwMDAwOSAgNTAwMDAwIC0+ICAxLjA0NjAyNzlFLTEwMDAwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjQgcG93ZXIgIDAuMDEwMDAwMDAwMSAgNTAwMDAwIC0+ICAxLjAwNTAxMjVFLTEwMDAwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjUgcG93ZXIgIDAuMDEgICAgICAgICAgNTAwMDAwIC0+ICAxRS0xMDAwMDAwIFN1Ym5vcm1hbAorcG93eDM2NiBwb3dlciAgMC4wMDk5OTk5OTk5ICA1MDAwMDAgLT4gIDkuOTUwMTI1RS0xMDAwMDAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4MzY3IHBvd2VyICAwLjAwOTk5OTk5OTggIDUwMDAwMCAtPiAgOS45MDA0OThFLTEwMDAwMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjggcG93ZXIgIDAuMDA5OTk5OTk5NyAgNTAwMDAwIC0+ICA5Ljg1MTExOUUtMTAwMDAwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDM2OSBwb3dlciAgMC4wMDk5OTk5OTk2ICA1MDAwMDAgLT4gIDkuODAxOTg3RS0xMDAwMDAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcwIHBvd2VyICAwLjAwOSAgICAgICAgIDUwMDAwMCAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIDEvc3Vibm9ybWFsIC0+IG92ZXJmbG93Citwb3d4MzcxIHBvd2VyICAxZS0xICAgICAgICAgLTUwMDAwMCAtPiAgMUUrNTAwMDAwCitwb3d4MzcyIHBvd2VyICAxZS0yICAgICAgICAgLTk5OTk5OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczIHBvd2VyICAxZS0yICAgICAgICAgLTUwMDAwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4Mzc0IHBvd2VyICAxZS0yICAgICAgICAgLTUwMDAwMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4Mzc1IHBvd2VyICAxZS0yICAgICAgICAgLTUwMDAwMiAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4Mzc2IHBvd2VyICAxZS0yICAgICAgICAgLTUwMDAwMyAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4Mzc3IHBvd2VyICAxZS0yICAgICAgICAgLTUwMDAwNCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3Bvd3gzODEgcG93ZXIgIDAuMDEwMDAxICAgICAtNTAwMDAwIC0+ICAxLjkzMzU3NzQzRSs5OTk5NzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzgyIHBvd2VyICAwLjAxMDAwMDAwMSAgLTUwMDAwMCAtPiAgOS41MTIyOTQyN0UrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorcG93eDM4MyBwb3dlciAgMC4wMTAwMDAwMDEgIC01MDAwMDEgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzODQgcG93ZXIgIDAuMDEwMDAwMDAwOSAtNTAwMDAwIC0+ICA5LjU1OTk3NDg0RSs5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitwb3d4Mzg1IHBvd2VyICAwLjAxMDAwMDAwMDEgLTUwMDAwMCAtPiAgOS45NTAxMjQ3OUUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorcG93eDM4NiBwb3dlciAgMC4wMSAgICAgICAgIC01MDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDM4NyBwb3dlciAgMC4wMDk5OTkgICAgIC01MDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSBwb3dlciBnaXZpbmcgc3Vibm9ybWFsCitwb3d4Mzg4IHBvd2VyICAxMDAuMDAwMDAxICAgLTUwMDAwMCAtPiAgOS45NTAxMjVFLTEwMDAwMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworCistLSB0ZXN0IHNvbWUgJ2ZhbHNlIGludGVnZXInIGJvdW5kYXJpZXMKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3Bvd3g1MDEgcG93ZXIgIDEwMCAgMUUrMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgICAgIFJvdW5kZWQKK3Bvd3g1MDIgcG93ZXIgIDEwMCAgMUUrMiAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAwICAgIFJvdW5kZWQKK3Bvd3g1MDMgcG93ZXIgIDEwMCAgMUUrMyAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MDQgcG93ZXIgIDEwMCAgMUUrNCAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MDUgcG93ZXIgIDEwMCAgMUUrNSAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MDYgcG93ZXIgIDEwMCAgMUUrNiAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MDcgcG93ZXIgIDEwMCAgMUUrNyAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MDggcG93ZXIgIDEwMCAgMUUrOCAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MDkgcG93ZXIgIDEwMCAgMUUrOSAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTAgcG93ZXIgIDEwMCAgMUUrMTAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTEgcG93ZXIgIDEwMCAgMUUrMTEgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTIgcG93ZXIgIDEwMCAgMUUrMTIgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTMgcG93ZXIgIDEwMCAgMUUrMTMgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTQgcG93ZXIgIDEwMCAgMUUrMTQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTUgcG93ZXIgIDEwMCAgMUUrMTUgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTYgcG93ZXIgIDEwMCAgMUUrMTYgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTcgcG93ZXIgIDEwMCAgMUUrMTcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTggcG93ZXIgIDEwMCAgMUUrMTggIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MTkgcG93ZXIgIDEwMCAgMUUrMTkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjAgcG93ZXIgIDEwMCAgMUUrMjAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjEgcG93ZXIgIDEwMCAgMUUrMjEgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjIgcG93ZXIgIDEwMCAgMUUrMjIgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjMgcG93ZXIgIDEwMCAgMUUrMjMgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjQgcG93ZXIgIDEwMCAgMUUrMjQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjUgcG93ZXIgIDEwMCAgMUUrMjUgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjYgcG93ZXIgIDEwMCAgMUUrMjYgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjcgcG93ZXIgIDEwMCAgMUUrMjcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjggcG93ZXIgIDEwMCAgMUUrMjggIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MjkgcG93ZXIgIDEwMCAgMUUrMjkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MzAgcG93ZXIgIDEwMCAgMUUrMzAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MzEgcG93ZXIgIDEwMCAgMUUrNDAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MzIgcG93ZXIgIDEwMCAgMUUrNTAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MzMgcG93ZXIgIDEwMCAgMUUrMTAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1MzQgcG93ZXIgIDEwMCAgMUUrMzgzIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gYSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworcHJlY2lzaW9uOiAgIDUKK21heGV4cG9uZW50OiA3OQorbWluZXhwb25lbnQ6IC03OQorcG93eDc1MCBwb3dlciAgICAgMS4yMzQ3RS00MCAgMiAgICAgIC0+ICAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gTnVsbCB0ZXN0cworcG93eDkwMCBwb3dlciAgMSAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcG93eDkwMSBwb3dlciAgIyAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBCZWxvdyBoZXJlIGFyZSB0ZXN0cyB3aXRoIGEgcHJlY2lzaW9uIG9yIGNvbnRleHQgb3V0c2lkZSBvZiB0aGUgIC0tCistLSBkZWNOdW1iZXIgJ21hdGhlbWF0aWNhbCBmdW5jdGlvbnMnIHJlc3RyaWN0ZWQgcmFuZ2UuICBUaGVzZSAgICAgIC0tCistLSByZW1haW4gc3VwcG9ydGVkIGluIGRlY051bWJlciB0byBtaW5pbWl6ZSBicmVha2FnZSwgYnV0IG1heSBiZSAgIC0tCistLSBvdXRzaWRlIHRoZSByYW5nZSBvZiBvdGhlciBpbXBsZW1lbnRhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiA5Citwb3d4MTA2MyBwb3dlciAgICcxMCcgICc5OTk5OTk5OTknIC0+ICcxLjAwMDAwMDAwRSs5OTk5OTk5OTknIFJvdW5kZWQKK3Bvd3gxMDY0IHBvd2VyICAgJzEwJyAgJzk5OTk5OTk5OCcgLT4gJzEuMDAwMDAwMDBFKzk5OTk5OTk5OCcgUm91bmRlZAorcG93eDEwNjUgcG93ZXIgICAnMTAnICAnOTk5OTk5OTk3JyAtPiAnMS4wMDAwMDAwMEUrOTk5OTk5OTk3JyBSb3VuZGVkCitwb3d4MTA2NiBwb3dlciAgICcxMCcgICczMzMzMzMzMzMnIC0+ICcxLjAwMDAwMDAwRSszMzMzMzMzMzMnIFJvdW5kZWQKKy0tIG5leHQgdHdvIGFyZSBpbnRlZ2VyLW91dC1vZiByYW5nZQorcG93eDExODMgcG93ZXIgICAnNycgICAnMTAwMDAwMDAwMCcgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQKK3Bvd3gxMTg0IHBvd2VyICAgJzcnICAgJzEwMDAwMDAwMDEnICAtPiBOYU4gSW52YWxpZF9jb250ZXh0Citwb3d4MTE4NiBwb3dlciAgICc3JyAgICctMTAwMDAwMDAwMScgLT4gMS4zODI0MzYzMEUtODQ1MDk4MDQxIEluZXhhY3QgUm91bmRlZAorcG93eDExODcgcG93ZXIgICAnNycgICAnLTEwMDAwMDAwMDAnIC0+IDkuNjc3MDU0MTFFLTg0NTA5ODA0MSBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3V0LW9mLXJhbmdlIGVkZ2UgY2FzZXMKK3Bvd3gxMTE4IHBvd2VyICAnMTAnICAnLTMzMzMzMzMzMycgICAtPiAxRS0zMzMzMzMzMzMKK3Bvd3gxMTE5IHBvd2VyICAnMTAnICAnLTk5OTk5OTk5OCcgICAtPiAxRS05OTk5OTk5OTgKK3Bvd3gxMTIwIHBvd2VyICAnMTAnICAnLTk5OTk5OTk5OScgICAtPiAxRS05OTk5OTk5OTkKK3Bvd3gxMTgxIHBvd2VyICAgJzcnICAgJzk5OTk5OTk5OCcgICAtPiAyLjEwODkyMzEzRSs4NDUwOTgwMzggSW5leGFjdCBSb3VuZGVkCitwb3d4MTE4MiBwb3dlciAgICc3JyAgICc5OTk5OTk5OTknICAgLT4gMS40NzYyNDYxOUUrODQ1MDk4MDM5IEluZXhhY3QgUm91bmRlZAorcG93eDExODkgcG93ZXIgICAnNycgICAnLTk5OTk5OTk5OScgIC0+IDYuNzczOTM3ODdFLTg0NTA5ODA0MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMTkwIHBvd2VyICAgJzcnICAgJy05OTk5OTk5OTgnICAtPiA0Ljc0MTc1NjUxRS04NDUwOTgwMzkgSW5leGFjdCBSb3VuZGVkCisKKy0tIEEgKHJhcmUpIGNhc2Ugd2hlcmUgdGhlIGxhc3QgZGlnaXQgaXMgbm90IHdpdGhpbiAwLjUgVUxQIHdpdGggY2xhc3NpYyBwcmVjaXNpb24KK3ByZWNpc2lvbjogOQorcG93eDEyMTUgcG93ZXIgIi0yMTk3MTU3NS4wRSszMTQ1NDQ0MSIgIi03IiAtPiAiLTQuMDQ1NDk1MDJFLTIyMDE4MTEzOSIgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCitwb3d4MTIxNiBwb3dlciAiLTIxOTcxNTc1LjBFKzMxNDU0NDQxIiAiLTciIC0+ICItNC4wNDU0OTUwMjQ5MzI0ODkxNzg4RS0yMjAxODExMzkiIEluZXhhY3QgUm91bmRlZAorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzCitwcmVjaXNpb246IDkKK3Bvd3gxMjgwIHBvd2VyICA5ICAgICAgICAgICAgOTk5OTk5OTk5IC0+IDMuMDU1NTAwNTRFKzk1NDI0MjUwOCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMjgxIHBvd2VyIDEwICAgICAgICAgICAgOTk5OTk5OTk5IC0+IDEuMDAwMDAwMDBFKzk5OTk5OTk5OSBSb3VuZGVkCitwb3d4MTI4MiBwb3dlciAxMC4wMDAxICAgICAgIDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMjgzIHBvd2VyIDEwLjEgICAgICAgICAgOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEyODQgcG93ZXIgMTEgICAgICAgICAgICA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTI4NSBwb3dlciAxMiAgICAgICAgICAgIDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMjg2IHBvd2VyIDk5OSAgICAgICAgICAgOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEyODcgcG93ZXIgOTk5OTk5ICAgICAgICA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTI4OCBwb3dlciA5OTk5OTk5OTkgICAgIDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMjg5IHBvd2VyIDkuOUU5OTk5OTk5OTkgOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitwb3d4MTI5MCBwb3dlciAwLjUgICAgICAgICAgIDk5OTk5OTk5OSAtPiA0LjMzNTU5NTk0RS0zMDEwMjk5OTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MTI5MSBwb3dlciAwLjEgICAgICAgICAgIDk5OTk5OTk5OSAtPiAxRS05OTk5OTk5OTkgIC0tIHVucm91bmRlZAorcG93eDEyOTIgcG93ZXIgMC4wOSAgICAgICAgICA5OTk5OTk5OTkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTI5MyBwb3dlciAwLjA1ICAgICAgICAgIDk5OTk5OTk5OSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMjk0IHBvd2VyIDAuMDEgICAgICAgICAgOTk5OTk5OTk5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEyOTUgcG93ZXIgMC4wMDAxICAgICAgICA5OTk5OTk5OTkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTI5NyBwb3dlciAwLjAwMDAwMDEgICAgIDk5OTk5OTk5OSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMjk4IHBvd2VyIDAuMDAwMDAwMDAwMSAgOTk5OTk5OTk5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEyOTkgcG93ZXIgMUUtOTk5OTk5OTk5ICA5OTk5OTk5OTkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK3Bvd3gxMzEwIHBvd2VyIC05ICAgICAgICAgICAgIDk5OTk5OTk5OSAtPiAtMy4wNTU1MDA1NEUrOTU0MjQyNTA4IEluZXhhY3QgUm91bmRlZAorcG93eDEzMTEgcG93ZXIgLTEwICAgICAgICAgICAgOTk5OTk5OTk5IC0+IC0xLjAwMDAwMDAwRSs5OTk5OTk5OTkgUm91bmRlZAorcG93eDEzMTIgcG93ZXIgLTEwLjAwMDEgICAgICAgOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzEzIHBvd2VyIC0xMC4xICAgICAgICAgIDk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMxNCBwb3dlciAtMTEgICAgICAgICAgICA5OTk5OTk5OTkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzMTUgcG93ZXIgLTEyICAgICAgICAgICAgOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzE2IHBvd2VyIC05OTkgICAgICAgICAgIDk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMxNyBwb3dlciAtOTk5OTk5ICAgICAgICA5OTk5OTk5OTkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzMTggcG93ZXIgLTk5OTk5OTk5OSAgICAgOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzE5IHBvd2VyIC05LjlFOTk5OTk5OTk5IDk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3Bvd3gxMzIwIHBvd2VyIC0wLjUgICAgICAgICAgIDk5OTk5OTk5OSAtPiAtNC4zMzU1OTU5NEUtMzAxMDI5OTk2IEluZXhhY3QgUm91bmRlZAorcG93eDEzMjEgcG93ZXIgLTAuMSAgICAgICAgICAgOTk5OTk5OTk5IC0+IC0xRS05OTk5OTk5OTkKK3Bvd3gxMzIyIHBvd2VyIC0wLjA5ICAgICAgICAgIDk5OTk5OTk5OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTMyMyBwb3dlciAtMC4wNSAgICAgICAgICA5OTk5OTk5OTkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzMjQgcG93ZXIgLTAuMDEgICAgICAgICAgOTk5OTk5OTk5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMzI1IHBvd2VyIC0wLjAwMDEgICAgICAgIDk5OTk5OTk5OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTMyNyBwb3dlciAtMC4wMDAwMDAxICAgICA5OTk5OTk5OTkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzMjggcG93ZXIgLTAuMDAwMDAwMDAwMSAgOTk5OTk5OTk5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMzI5IHBvd2VyIC0xRS05OTk5OTk5OTkgIDk5OTk5OTk5OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIG5vdGUgbm8gdHJpbSBvZiBuZXh0IHJlc3VsdAorcG93eDEzMzAgcG93ZXIgLTkgICAgICAgICAgICAgOTk5OTk5OTk4IC0+ICAzLjM5NTAwMDYwRSs5NTQyNDI1MDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMzMSBwb3dlciAtMTAgICAgICAgICAgICA5OTk5OTk5OTggLT4gIDEuMDAwMDAwMDBFKzk5OTk5OTk5OCBSb3VuZGVkCitwb3d4MTMzMiBwb3dlciAtMTAuMDAwMSAgICAgICA5OTk5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzMzMgcG93ZXIgLTEwLjEgICAgICAgICAgOTk5OTk5OTk4IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzM0IHBvd2VyIC0xMSAgICAgICAgICAgIDk5OTk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMzNSBwb3dlciAtMTIgICAgICAgICAgICA5OTk5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzMzYgcG93ZXIgLTk5OSAgICAgICAgICAgOTk5OTk5OTk4IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzM3IHBvd2VyIC05OTk5OTkgICAgICAgIDk5OTk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMzOCBwb3dlciAtOTk5OTk5OTk5ICAgICA5OTk5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzMzkgcG93ZXIgLTkuOUU5OTk5OTk5OTkgOTk5OTk5OTk4IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcG93eDEzNDAgcG93ZXIgLTAuNSAgICAgICAgICAgOTk5OTk5OTk4IC0+ICA4LjY3MTE5MTg3RS0zMDEwMjk5OTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM0MSBwb3dlciAtMC4xICAgICAgICAgICA5OTk5OTk5OTggLT4gIDFFLTk5OTk5OTk5OCAgLS0gTkIgZXhhY3QgdW5yb3VuZGVkCitwb3d4MTM0MiBwb3dlciAtMC4wOSAgICAgICAgICA5OTk5OTk5OTggLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzNDMgcG93ZXIgLTAuMDUgICAgICAgICAgOTk5OTk5OTk4IC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMzQ0IHBvd2VyIC0wLjAxICAgICAgICAgIDk5OTk5OTk5OCAtPiAgMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTM0NSBwb3dlciAtMC4wMDAxICAgICAgICA5OTk5OTk5OTggLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzNDcgcG93ZXIgLTAuMDAwMDAwMSAgICAgOTk5OTk5OTk4IC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMzQ4IHBvd2VyIC0wLjAwMDAwMDAwMDEgIDk5OTk5OTk5OCAtPiAgMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTM0OSBwb3dlciAtMUUtOTk5OTk5OTk5ICA5OTk5OTk5OTggLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBzb21lIHN1Ym5vcm1hbHMKK3ByZWNpc2lvbjogOQorLS0gW3ByZWNpc2lvbiBpcyA5LCBzbyBzbWFsbGVzdCBleHBvbmVudCBpcyAtMTAwMDAwMDAwNworcG93eDEzNTAgcG93ZXIgIDFlLTEgICAgICAgICAgNTAwMDAwMDAwIC0+ICAxRS01MDAwMDAwMDAKK3Bvd3gxMzUxIHBvd2VyICAxZS0yICAgICAgICAgIDk5OTk5OTk5OSAtPiAgMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTM1MiBwb3dlciAgMWUtMiAgICAgICAgICA1MDAwMDAwMDAgLT4gIDFFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCitwb3d4MTM1MyBwb3dlciAgMWUtMiAgICAgICAgICA1MDAwMDAwMDEgLT4gIDFFLTEwMDAwMDAwMDIgU3Vibm9ybWFsCitwb3d4MTM1NCBwb3dlciAgMWUtMiAgICAgICAgICA1MDAwMDAwMDIgLT4gIDFFLTEwMDAwMDAwMDQgU3Vibm9ybWFsCitwb3d4MTM1NSBwb3dlciAgMWUtMiAgICAgICAgICA1MDAwMDAwMDMgLT4gIDFFLTEwMDAwMDAwMDYgU3Vibm9ybWFsCitwb3d4MTM1NiBwb3dlciAgMWUtMiAgICAgICAgICA1MDAwMDAwMDQgLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitwb3d4MTM2MCBwb3dlciAgMC4wMTAwMDEgICAgICA1MDAwMDAwMDAgLT4gIDQuMzQ5NDE5ODhFLTk5OTk3ODI4NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzYxIHBvd2VyICAwLjAxMDAwMDAwMSAgIDUwMDAwMDAwMCAtPiAgNS4xODQ2OTI1N0UtOTk5OTk5OTc5IEluZXhhY3QgUm91bmRlZAorcG93eDEzNjIgcG93ZXIgIDAuMDEwMDAwMDAxICAgNTAwMDAwMDAxIC0+ICA1LjE4NDY5MzA5RS05OTk5OTk5ODEgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM2MyBwb3dlciAgMC4wMTAwMDAwMDA5ICA1MDAwMDAwMDAgLT4gIDMuNDkzNDIwMDNFLTk5OTk5OTk4MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzY0IHBvd2VyICAwLjAxMDAwMDAwMDEgIDUwMDAwMDAwMCAtPiAgMS40ODQxMzE1NUUtOTk5OTk5OTk4IEluZXhhY3QgUm91bmRlZAorcG93eDEzNjUgcG93ZXIgIDAuMDEgICAgICAgICAgNTAwMDAwMDAwIC0+ICAxRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorcG93eDEzNjYgcG93ZXIgIDAuMDA5OTk5OTk5OSAgNTAwMDAwMDAwIC0+ICA2LjczNzlFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzY3IHBvd2VyICAwLjAwOTk5OTk5OTggIDUwMDAwMDAwMCAtPiAgNC41NEUtMTAwMDAwMDAwNSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDEzNjggcG93ZXIgIDAuMDA5OTk5OTk5NyAgNTAwMDAwMDAwIC0+ICAzRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM2OSBwb3dlciAgMC4wMDk5OTk5OTk2ICA1MDAwMDAwMDAgLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzNzAgcG93ZXIgIDAuMDA5ICAgICAgICAgNTAwMDAwMDAwIC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gMS9zdWJub3JtYWwgLT4gb3ZlcmZsb3cKK3Bvd3gxMzcxIHBvd2VyICAxZS0xICAgICAgICAgLTUwMDAwMDAwMCAtPiAgMUUrNTAwMDAwMDAwCitwb3d4MTM3MiBwb3dlciAgMWUtMiAgICAgICAgIC05OTk5OTk5OTkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzNzMgcG93ZXIgIDFlLTIgICAgICAgICAtNTAwMDAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzc0IHBvd2VyICAxZS0yICAgICAgICAgLTUwMDAwMDAwMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM3NSBwb3dlciAgMWUtMiAgICAgICAgIC01MDAwMDAwMDIgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzNzYgcG93ZXIgIDFlLTIgICAgICAgICAtNTAwMDAwMDAzIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzc3IHBvd2VyICAxZS0yICAgICAgICAgLTUwMDAwMDAwNCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3Bvd3gxMzgxIHBvd2VyICAwLjAxMDAwMSAgICAgLTUwMDAwMDAwMCAtPiAgMi4yOTkxNTcxOUUrOTk5OTc4Mjg2IEluZXhhY3QgUm91bmRlZAorcG93eDEzODIgcG93ZXIgIDAuMDEwMDAwMDAxICAtNTAwMDAwMDAwIC0+ICAxLjkyODc1NDY3RSs5OTk5OTk5NzggSW5leGFjdCBSb3VuZGVkCitwb3d4MTM4MyBwb3dlciAgMC4wMTAwMDAwMDEgIC01MDAwMDAwMDEgLT4gIDEuOTI4NzU0NDhFKzk5OTk5OTk4MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzg0IHBvd2VyICAwLjAxMDAwMDAwMDkgLTUwMDAwMDAwMCAtPiAgMi44NjI1MjQzOEUrOTk5OTk5OTgwIEluZXhhY3QgUm91bmRlZAorcG93eDEzODUgcG93ZXIgIDAuMDEwMDAwMDAwMSAtNTAwMDAwMDAwIC0+ICA2LjczNzk0NzE3RSs5OTk5OTk5OTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM4NiBwb3dlciAgMC4wMSAgICAgICAgIC01MDAwMDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzODcgcG93ZXIgIDAuMDA5OTk5ICAgICAtNTAwMDAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgcG93ZXIgZ2l2aW5nIHN1Ym5vcm1hbAorcG93eDEzODggcG93ZXIgIDEwMC4wMDAwMDEgICAtNTAwMDAwMDAwIC0+ICA2LjczNzlFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQmVsb3cgaGVyZSBhcmUgdGhlIHRlc3RzIHdpdGggYSBub24taW50ZWdlciByaHMsIGluY2x1ZGluZyB0aGUgICAtLQorLS0gdGVzdHMgdGhhdCBwcmV2aW91c2x5IGNhdXNlZCBJbnZhbGlkIG9wZXJhdGlvbi4gIEFuIGludGVnZXItb25seSAtLQorLS0gKG9uIHJocykgaW1wbGVtZW50YXRpb24gc2hvdWxkIGhhbmRsZSBhbGwgdGhlIHRlc3RzIGFib3ZlIGFzICAgICAtLQorLS0gc2hvd24sIGFuZCB3b3VsZCBmbGFnIG1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcyBJbnZhbGlkLiAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCitwb3d4MjAwMCBwb3dlciA3ICcxMDAwMDAwMDAwMCcgICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDIwMDEgcG93ZXIgMiAnMi4wMDAwMDEnICAgICAgICAgICAtPiA0LjAwMDAwMjc3MjU4OTY4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDAyIHBvd2VyIDIgJzIuMDAwMDAwMDAnICAgICAgICAgLT4gNAorcG93eDIwMDMgcG93ZXIgMiAnMi4wMDAwMDAwMDEnICAgICAgICAtPiA0LjAwMDAwMDAwMjc3MjU4OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDA0IHBvd2VyIDIgJzIuMDAwMDAwMDAwMScgICAgICAgLT4gNC4wMDAwMDAwMDAyNzcyNTkgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAwNSBwb3dlciAyICcyLjAwMDAwMDAwMDAxJyAgICAgIC0+IDQuMDAwMDAwMDAwMDI3NzI2IEluZXhhY3QgUm91bmRlZAorcG93eDIwMDYgcG93ZXIgMiAnMi4wMDAwMDAwMDAwMDEnICAgICAtPiA0LjAwMDAwMDAwMDAwMjc3MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDA3IHBvd2VyIDIgJzIuMDAwMDAwMDAwMDAwMScgICAgLT4gNC4wMDAwMDAwMDAwMDAyNzcgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAwOCBwb3dlciAyICcyLjAwMDAwMDAwMDAwMDAxJyAgIC0+IDQuMDAwMDAwMDAwMDAwMDI4IEluZXhhY3QgUm91bmRlZAorcG93eDIwMDkgcG93ZXIgMiAnMi4wMDAwMDAwMDAwMDAwMDEnICAtPiA0LjAwMDAwMDAwMDAwMDAwMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDEwIHBvd2VyIDIgJzIuMDAwMDAwMDAwMDAwMDAwMScgLT4gNC4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1NgorCitwb3d4MjAxMSBwb3dlciAxIDEyMzQgLT4gMQorcHJlY2lzaW9uOiA0Citwb3d4MjAxMiBwb3dlciAxIDEyMzQgLT4gMQorcHJlY2lzaW9uOiAzCitwb3d4MjAxMyBwb3dlciAxIDEyMzQgICAgIC0+IDEKK3Bvd3gyMDE0IHBvd2VyIDEgMTIuMzRlKzIgLT4gMQorcG93eDIwMTUgcG93ZXIgMSAxMi4zICAgICAtPiAxLjAwIEluZXhhY3QgUm91bmRlZAorcG93eDIwMTYgcG93ZXIgMSAxMi4wICAgICAtPiAxCitwb3d4MjAxNyBwb3dlciAxIDEuMDEgICAgIC0+IDEuMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAxOCBwb3dlciAyIDEuMDAgICAgIC0+IDIKK3Bvd3gyMDE5IHBvd2VyIDIgMi4wMCAgICAgLT4gNAorcHJlY2lzaW9uOiA5Citwb3d4MjAzMCBwb3dlciAxIDEuMDAwMSAgICAgICAgICAgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDMxIHBvd2VyIDEgMS4wMDAwMDAxICAgICAgICAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDIwMzIgcG93ZXIgMSAxLjAwMDAwMDAwMDEgICAgIC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAzMyBwb3dlciAxIDEuMDAwMDAwMDAwMDAwMSAgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNQorcG93eDIwMzQgcG93ZXIgMSAxLjAwMDEgICAgICAgICAgIC0+IDEuMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDM1IHBvd2VyIDEgMS4wMDAwMDAxICAgICAgICAtPiAxLjAwMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAzNiBwb3dlciAxIDEuMDAwMDAwMDAwMSAgICAgLT4gMS4wMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDIwMzcgcG93ZXIgMSAxLjAwMDAwMDAwMDAwMDEgIC0+IDEuMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDM4IHBvd2VyIDEgMS4wMDAwMDAwMDAwMDAxICAtPiAxLjAwMDAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCitwcmVjaXNpb246IDMKK3Bvd3gyMDM5IHBvd2VyIDEgMS4wMSAgICAgLT4gMS4wMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDQwIHBvd2VyIDEgMTIuMyAgICAgLT4gMS4wMCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworLS0gMSAqKiBhbnkgaW50ZWdlciwgaW5jbHVkaW5nIGJpZyBvbmVzLCBzaG91bGQgYmUgZXhhY3QKK3Bvd3gyMDQxIHBvd2VyIDEgMTAwMDAwMDAwMCAgIC0+IDEKK3Bvd3gyMDQyIHBvd2VyIDEgOTk5OTk5OTk5OSAgIC0+IDEKK3Bvd3gyMDQzIHBvd2VyIDEgMTIzNDU2NzgwMDAgIC0+IDEKK3Bvd3gyMDQ0IHBvd2VyIDEgMTIzNDU2NzgwMCAgIC0+IDEKK3Bvd3gyMDQ1IHBvd2VyIDEgMTIzNDU2Nzg5MCAgIC0+IDEKK3Bvd3gyMDQ2IHBvd2VyIDEgMTEyMzQ1Njc4OTEgIC0+IDEKK3Bvd3gyMDQ3IHBvd2VyIDEgMTIzNDU2Nzg5MDEgIC0+IDEKK3Bvd3gyMDQ4IHBvd2VyIDEgMTIzNDU2Nzg5NiAgIC0+IDEKK3Bvd3gyMDQ5IHBvd2VyIDEgLTEyMzQ1Njc4OTYgIC0+IDEKK3Bvd3gyMDUxIHBvd2VyIDEgMTAwMDAwMDAwMCAgIC0+IDEKK3Bvd3gyMDUyIHBvd2VyIDEgLTEwMDAwMDAwMDAgIC0+IDEKK3Bvd3gyMDUzIHBvd2VyIDEgMTIzNDU2NzgwMDAgIC0+IDEKK3Bvd3gyMDU0IHBvd2VyIDEgLTEyMzQ1Njc4OTYgIC0+IDEKK3Bvd3gyMDU1IHBvd2VyIDEgMTAwMDAwMDAwMCAgIC0+IDEKK3Bvd3gyMDU2IHBvd2VyIDEgNDMwMDAwMDAwMCAgIC0+IDEKK3Bvd3gyMDU3IHBvd2VyIDEgLTEwMDAwMDAwMDAgIC0+IDEKKy0tIG5lZ2F0aXZlcyAuLi4gYnV0IG5vdCBvdXQgb2YgcmFuZ2UgZm9yIGRlY051bWJlcgorcG93eDIwNjEgcG93ZXIgLTEgMTAwMDAwICAgLT4gMQorcG93eDIwNjIgcG93ZXIgLTEgOTk5OTk5ICAgLT4gLTEKK3Bvd3gyMDYzIHBvd2VyIC0xIDEyNzgwMDAgIC0+IDEKK3Bvd3gyMDY0IHBvd2VyIC0xIDEyNzgwMyAgIC0+IC0xCitwb3d4MjA2NSBwb3dlciAtMSAxMjc4OTAgICAtPiAxCitwb3d4MjA2NiBwb3dlciAtMSAxMTY3ODkxICAtPiAtMQorcG93eDIwNjcgcG93ZXIgLTEgMTI3ODkwMSAgLT4gLTEKK3Bvd3gyMDY4IHBvd2VyIC0xIDEyNzg5NiAgIC0+IDEKK3Bvd3gyMDY5IHBvd2VyIC0xIC0xNjc4OTcgIC0+IC0xCitwb3d4MjA3MSBwb3dlciAtMSAxMDAwMDAgICAtPiAxCitwb3d4MjA3MiBwb3dlciAtMSAtMTAwMDAxICAtPiAtMQorcG93eDIwNzMgcG93ZXIgLTEgMTI3ODAwMCAgLT4gMQorcG93eDIwNzQgcG93ZXIgLTEgLTE2Nzg5NiAgLT4gMQorcG93eDIwNzUgcG93ZXIgLTEgMTAwMDAwICAgLT4gMQorcG93eDIwNzYgcG93ZXIgLTEgLTEwMDAwOSAgLT4gLTEKKworLS0gVGhlIGFib3ZlIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBlYXJsaWVyIHZlcnNpb24gb2YgcG93ZXIuZGVjVGVzdDsKKy0tIG5vdyBzdGFydCBuZXcgdGVzdHMgZm9yIHBvd2VyKHgseSkgZm9yIG5vbi1pbnRlZ2VyIHkKK3ByZWNpc2lvbjogOQorCistLSB0ZXN0cyBmcm9tIHNwZWNpZmljYXRpb24KK3Bvd3gyMDgxIHBvd2VyIDIgICAgICAgICAgIDMgICAgLT4gICc4JworcG93eDIwODIgcG93ZXIgLTIgICAgICAgICAgMyAgICAtPiAgJy04JworcG93eDIwODMgcG93ZXIgMiAgICAgICAgICAtMyAgICAtPiAgJzAuMTI1JworcG93eDIwODQgcG93ZXIgMS43ICAgICAgICAnOCcgICAtPiAgJzY5Ljc1NzU3NDQnIEluZXhhY3QgUm91bmRlZAorcG93eDIwODUgcG93ZXIgMTAgMC4zMDEwMjk5OTYgICAtPiAgMi4wMDAwMDAwMCAgIEluZXhhY3QgUm91bmRlZAorcG93eDIwODYgcG93ZXIgSW5maW5pdHkgICAnLTEnICAtPiAgJzAnCitwb3d4MjA4NyBwb3dlciBJbmZpbml0eSAgICcwJyAgIC0+ICAnMScKK3Bvd3gyMDg4IHBvd2VyIEluZmluaXR5ICAgJzEnICAgLT4gICdJbmZpbml0eScKK3Bvd3gyMDg5IHBvd2VyIC1JbmZpbml0eSAgJy0xJyAgLT4gICctMCcKK3Bvd3gyMDkwIHBvd2VyIC1JbmZpbml0eSAgJzAnICAgLT4gICcxJworcG93eDIwOTEgcG93ZXIgLUluZmluaXR5ICAnMScgICAtPiAgJy1JbmZpbml0eScKK3Bvd3gyMDkyIHBvd2VyIC1JbmZpbml0eSAgJzInICAgLT4gICdJbmZpbml0eScKK3Bvd3gyMDkzIHBvd2VyIDAgIDAgICAgICAgICAgICAgLT4gICdOYU4nIEludmFsaWRfb3BlcmF0aW9uCisKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworLS0gYmFzaWNzCitwb3d4MjEwMCBwb3dlciAxRS03ICAgICAxRS03ICAgLT4gMC45OTk5OTgzODgxOTE3MzM5ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEwMSBwb3dlciAwLjAwMyAgICAxRS03ICAgLT4gMC45OTk5OTk0MTkwODU4Njk3ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEwMiBwb3dlciAwLjcgICAgICAxRS03ICAgLT4gMC45OTk5OTk5NjQzMzI1MDYyICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEwMyBwb3dlciAxLjIgICAgICAxRS03ICAgLT4gMS4wMDAwMDAwMTgyMzIxNTYgICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEwNCBwb3dlciA3MSAgICAgICAxRS03ICAgLT4gMS4wMDAwMDA0MjYyNjgwNzkgICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEwNSBwb3dlciA5RSs5ICAgICAxRS03ICAgLT4gMS4wMDAwMDIyOTIwNTE2NjggICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3Bvd3gyMTEwIHBvd2VyIDFFLTcgICAgIDAuMDAzICAtPiAwLjk1Mjc5NjE2NDAyMzY1MTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTExIHBvd2VyIDAuMDAzICAgIDAuMDAzICAtPiAwLjk4MjcyMzU1MDMzNjY3OTcgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTEyIHBvd2VyIDAuNyAgICAgIDAuMDAzICAtPiAwLjk5ODkzMDU0NzQ0MDYyMDcgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTEzIHBvd2VyIDEuMiAgICAgIDAuMDAzICAtPiAxLjAwMDU0NzExNDI4MjgzNCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTE0IHBvd2VyIDcxICAgICAgIDAuMDAzICAtPiAxLjAxMjg3MDE1NjI3MzU0NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTE1IHBvd2VyIDlFKzkgICAgIDAuMDAzICAtPiAxLjA3MTE4MDY3MTI3ODc4NyAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcG93eDIxMjAgcG93ZXIgMUUtNyAgICAgMC43ICAgIC0+IDAuMDAwMDEyNTg5MjU0MTE3OTQxNjcgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMjEgcG93ZXIgMC4wMDMgICAgMC43ICAgIC0+IDAuMDE3MTM4OTc2MzAyODEwMzAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMjIgcG93ZXIgMC43ICAgICAgMC43ICAgIC0+IDAuNzc5MDU1OTEyNjcwNDQ5MSAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMjMgcG93ZXIgMS4yICAgICAgMC43ICAgIC0+IDEuMTM2MTI2OTc3MTk4ODg5ICAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMjQgcG93ZXIgNzEgICAgICAgMC43ICAgIC0+IDE5Ljc2NDI3MzAwMDkzODcwICAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMjUgcG93ZXIgOUUrOSAgICAgMC43ICAgIC0+IDkyODkwMTYuOTc2ODUzNzEwICAgICAgIEluZXhhY3QgUm91bmRlZAorCitwb3d4MjEzMCBwb3dlciAxRS03ICAgICAxLjIgICAgLT4gMy45ODEwNzE3MDU1MzQ5NzNFLTkgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEzMSBwb3dlciAwLjAwMyAgICAxLjIgICAgLT4gMC4wMDA5Mzg3NDAzOTMzNTk1Njk0ICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEzMiBwb3dlciAwLjcgICAgICAxLjIgICAgLT4gMC42NTE4MDQ5NDA1NjYzODY0ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEzMyBwb3dlciAxLjIgICAgICAxLjIgICAgLT4gMS4yNDQ1NjQ3NDcyMDM5NzggICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEzNCBwb3dlciA3MSAgICAgICAxLjIgICAgLT4gMTY2LjUzNjcyNDQ2Mzg1NTIgICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjEzNSBwb3dlciA5RSs5ICAgICAxLjIgICAgLT4gODgxMjMzNTI2MTI0Ljg3OTEgICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3Bvd3gyMTQwIHBvd2VyIDFFLTcgICAgIDcxICAgICAtPiAwRS0zOTggICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCitwb3d4MjE0MSBwb3dlciAwLjAwMyAgICA3MSAgICAgLT4gNy41MDk0NjY1MTQ5Nzk3MjVFLTE4MCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjE0MiBwb3dlciAwLjcgICAgICA3MSAgICAgLT4gMS4wMDQ1MjUyMTEyNjkwNzlFLTExICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjE0MyBwb3dlciAxLjIgICAgICA3MSAgICAgLT4gNDE4NjY2Ljc0ODMxODY1MTUgICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjE0NCBwb3dlciA3MSAgICAgICA3MSAgICAgLT4gMi43NTAwNjM3MzQ4MzQ2MTZFKzEzMSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjE0NSBwb3dlciA5RSs5ICAgICA3MSAgICAgLT4gSW5maW5pdHkgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkIE92ZXJmbG93CisKK3Bvd3gyMTUwIHBvd2VyIDFFLTcgICAgIDlFKzkgICAtPiAwRS0zOTggICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCitwb3d4MjE1MSBwb3dlciAwLjAwMyAgICA5RSs5ICAgLT4gMEUtMzk4ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorcG93eDIxNTIgcG93ZXIgMC43ICAgICAgOUUrOSAgIC0+IDBFLTM5OCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKK3Bvd3gyMTUzIHBvd2VyIDEuMiAgICAgIDlFKzkgICAtPiBJbmZpbml0eSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgT3ZlcmZsb3cKK3Bvd3gyMTU0IHBvd2VyIDcxICAgICAgIDlFKzkgICAtPiBJbmZpbml0eSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgT3ZlcmZsb3cKK3Bvd3gyMTU1IHBvd2VyIDlFKzkgICAgIDlFKzkgICAtPiBJbmZpbml0eSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgT3ZlcmZsb3cKKworLS0gbnVtYmVyIGxpbmUgbWlsZXN0b25lcyB3aXRoIGxoczwxIGFuZCBsaHM+MQorCistLSBPdmVyZmxvdyBib3VuZGFyeSAoTm1heCkKK3Bvd3gyMjAyIHBvd2VyIDcxICAgICAyMDcuOTY2NjUxNTgzOTgzMjAwIC0+IEluZmluaXR5IEluZXhhY3QgUm91bmRlZCBPdmVyZmxvdworcG93eDIyMDEgcG93ZXIgNzEgICAgIDIwNy45NjY2NTE1ODM5ODMxOTkgLT4gOS45OTk5OTk5OTk5OTk5OTRFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMjA0IHBvd2VyIDAuMDAzIC0xNTIuNjAzNDQ5ODE3MDkzNTc3IC0+IEluZmluaXR5IEluZXhhY3QgUm91bmRlZCBPdmVyZmxvdworcG93eDIyMDMgcG93ZXIgMC4wMDMgLTE1Mi42MDM0NDk4MTcwOTM1NzYgLT4gOS45OTk5OTk5OTk5OTk5OTRFKzM4NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gTm1pbiBib3VuZGFyeQorcG93eDIyMTEgcG93ZXIgNzEgICAgLTIwNi44ODYzMDUzNDE5ODg0ODAgLT4gMS4wMDAwMDAwMDAwMDAwMDVFLTM4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMjEyIHBvd2VyIDcxICAgIC0yMDYuODg2MzA1MzQxOTg4NDgxIC0+IDEuMDAwMDAwMDAwMDAwMDAxRS0zODMgSW5leGFjdCBSb3VuZGVkCitwb3d4MjIxMyBwb3dlciA3MSAgICAtMjA2Ljg4NjMwNTM0MTk4ODQ4MiAtPiA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwb3d4MjIxNCBwb3dlciA3MSAgICAtMjA2Ljg4NjMwNTM0MTk4ODQ4MyAtPiA5Ljk5OTk5OTk5OTk5OTkyRS0zODQgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ljk5OTk5OTk5OTk5OTkyNDU2NTM1NzAxOTgyMAorCitwb3d4MjIxNSBwb3dlciAwLjAwMyAgMTUxLjgxMDcwNDYyMzIzODU0MyAtPiAxLjAwMDAwMDAwMDAwMDAwOUUtMzgzIEluZXhhY3QgUm91bmRlZAorcG93eDIyMTYgcG93ZXIgMC4wMDMgIDE1MS44MTA3MDQ2MjMyMzg1NDQgLT4gMS4wMDAwMDAwMDAwMDAwMDNFLTM4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMjE3IHBvd2VyIDAuMDAzICAxNTEuODEwNzA0NjIzMjM4NTQ1IC0+IDkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK3Bvd3gyMjE4IHBvd2VyIDAuMDAzICAxNTEuODEwNzA0NjIzMjM4NTQ2IC0+IDkuOTk5OTk5OTk5OTk5OTFFLTM4NCAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKKworLS0gTnRpbnkgYm91bmRhcnksIHRoZXNlIGVkZ2UgY2FzZXMgZGV0ZXJtaW5lZCB1c2luZyBoYWxmX3VwIHJvdW5kaW5nCityb3VuZGluZzogaGFsZl91cAorcG93eDIyMjEgcG93ZXIgNzEgICAgLTIxNS4xNTE1MTA0NjkyMjA0OTggLT4gMUUtMzk4ICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwb3d4MjIyMiBwb3dlciA3MSAgICAtMjE1LjE1MTUxMDQ2OTIyMDQ5OSAtPiAxRS0zOTggICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK3Bvd3gyMjIzIHBvd2VyIDcxICAgIC0yMTUuMTUxNTEwNDY5MjIwNTAwIC0+IDBFLTM5OCAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCitwb3d4MjIyNCBwb3dlciA3MSAgICAtMjE1LjE1MTUxMDQ2OTIyMDUwMSAtPiAwRS0zOTggICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorCitwb3d4MjIyNSBwb3dlciAwLjAwMyAgMTU3Ljg3NTYxMzYxODI4NTY5MSAtPiAxRS0zOTggICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK3Bvd3gyMjI2IHBvd2VyIDAuMDAzICAxNTcuODc1NjEzNjE4Mjg1NjkyIC0+IDFFLTM5OCAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorcG93eDIyMjcgcG93ZXIgMC4wMDMgIDE1Ny44NzU2MTM2MTgyODU2OTMgLT4gMEUtMzk4ICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKK3Bvd3gyMjI4IHBvd2VyIDAuMDAzICAyMjAgICAgICAgICAgICAgICAgIC0+IDBFLTM5OCAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCityb3VuZGluZzogaGFsZl9ldmVuCisKKy0tIHBvd2VyKDEwLCB5KSBhcmUgaW1wb3J0YW50IC4uLgorCistLSBJbnRlZ2VyIHBvd2VycyBhcmUgZXhhY3QsIHVubGVzcyBvdmVyL3VuZGVyZmxvdworcG93eDIzMDEgcG93ZXIgMTAgICAgIDM4NSAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MjMwMiBwb3dlciAxMCAgICAgMzg0ICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKK3Bvd3gyMzAzIHBvd2VyIDEwICAgICAgMTcgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyBSb3VuZGVkCitwb3d4MjMwNCBwb3dlciAxMCAgICAgIDE2ICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgUm91bmRlZAorcG93eDIzMDUgcG93ZXIgMTAgICAgICAxNSAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMAorcG93eDIzMDYgcG93ZXIgMTAgICAgICAxMCAgICAgLT4gMTAwMDAwMDAwMDAKK3Bvd3gyMzA3IHBvd2VyIDEwICAgICAgIDUgICAgIC0+IDEwMDAwMAorcG93eDIzMDggcG93ZXIgMTAgICAgICAgMSAgICAgLT4gMTAKK3Bvd3gyMzA5IHBvd2VyIDEwICAgICAgIDAgICAgIC0+IDEKK3Bvd3gyMzEwIHBvd2VyIDEwICAgICAgLTEgICAgIC0+IDAuMQorcG93eDIzMTEgcG93ZXIgMTAgICAgICAtNSAgICAgLT4gMC4wMDAwMQorcG93eDIzMTIgcG93ZXIgMTAgICAgICAtNiAgICAgLT4gMC4wMDAwMDEKK3Bvd3gyMzEzIHBvd2VyIDEwICAgICAgLTcgICAgIC0+IDFFLTcKK3Bvd3gyMzE0IHBvd2VyIDEwICAgICAgLTggICAgIC0+IDFFLTgKK3Bvd3gyMzE1IHBvd2VyIDEwICAgICAgLTkgICAgIC0+IDFFLTkKK3Bvd3gyMzE2IHBvd2VyIDEwICAgICAtMTAgICAgIC0+IDFFLTEwCitwb3d4MjMxNyBwb3dlciAxMCAgICAtMzgzICAgICAtPiAxRS0zODMKK3Bvd3gyMzE4IHBvd2VyIDEwICAgIC0zODQgICAgIC0+IDFFLTM4NCBTdWJub3JtYWwKK3Bvd3gyMzE5IHBvd2VyIDEwICAgIC0zODUgICAgIC0+IDFFLTM4NSBTdWJub3JtYWwKK3Bvd3gyMzIwIHBvd2VyIDEwICAgIC0zOTcgICAgIC0+IDFFLTM5NyBTdWJub3JtYWwKK3Bvd3gyMzIxIHBvd2VyIDEwICAgIC0zOTggICAgIC0+IDFFLTM5OCBTdWJub3JtYWwKK3Bvd3gyMzIyIHBvd2VyIDEwICAgIC0zOTkgICAgIC0+IDBFLTM5OCBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MjMyMyBwb3dlciAxMCAgICAtNDAwICAgICAtPiAwRS0zOTggU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBJbmRlcGVuZGVudCBzYW5pdHkgY2hlY2s6IDE5NjEgR29kZnJleSAmIFNpZGRvbnMgZm91ci1maWd1cmUgbG9ncworcG93eDIzNTEgcG93ZXIgMTAgICAwLjAwMDAgICAgLT4gMQorcG93eDIzNTIgcG93ZXIgMTAgICAwLjMwMTAgICAgLT4gMS45OTk4NjE4Njk2MzI3NDQgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM1MyBwb3dlciAxMCAgIDAuNDc3MSAgICAtPiAyLjk5OTg1MzE4MTE5MDc5MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzU0IHBvd2VyIDEwICAgMC42MDIxICAgIC0+IDQuMDAwMzY4NTEwNDYxMjUwIEluZXhhY3QgUm91bmRlZAorcG93eDIzNTUgcG93ZXIgMTAgICAwLjY5OTAgICAgLT4gNS4wMDAzNDUzNDk3Njk3ODUgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM1NiBwb3dlciAxMCAgIDAuNzc4MiAgICAtPiA2LjAwMDY3MzUzODY0MTE2NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzU3IHBvd2VyIDEwICAgMC44NDUxICAgIC0+IDcuMDAwMDMxNTkxMzA4OTY5IEluZXhhY3QgUm91bmRlZAorcG93eDIzNTggcG93ZXIgMTAgICAwLjkwMzEgICAgLT4gOC4wMDAxODQ0NDg1NTA5OTAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM1OSBwb3dlciAxMCAgIDAuOTU0MiAgICAtPiA4Ljk5OTExOTEwODcwMDUyMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzYwIHBvd2VyIDEwICAgMC45OTU2ICAgIC0+IDkuODk5MTk3NzUwODA1ODQxIEluZXhhY3QgUm91bmRlZAorcG93eDIzNjEgcG93ZXIgMTAgICAwLjk5OTYgICAgLT4gOS45OTA3OTM4OTk4NDQ2MTggSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQKK3Bvd3gyMzcxIHBvd2VyIDEwICAgMC4wMDAwICAgIC0+IDEKK3Bvd3gyMzcyIHBvd2VyIDEwICAgMC4zMDEwICAgIC0+IDIuMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDIzNzMgcG93ZXIgMTAgICAwLjQ3NzEgICAgLT4gMy4wMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM3NCBwb3dlciAxMCAgIDAuNjAyMSAgICAtPiA0LjAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzc1IHBvd2VyIDEwICAgMC42OTkwICAgIC0+IDUuMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDIzNzYgcG93ZXIgMTAgICAwLjc3ODIgICAgLT4gNi4wMDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM3NyBwb3dlciAxMCAgIDAuODQ1MSAgICAtPiA3LjAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzc4IHBvd2VyIDEwICAgMC45MDMxICAgIC0+IDguMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDIzNzkgcG93ZXIgMTAgICAwLjk1NDIgICAgLT4gOC45OTkgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM4MCBwb3dlciAxMCAgIDAuOTk1NiAgICAtPiA5Ljg5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzgxIHBvd2VyIDEwICAgMC45OTk2ICAgIC0+IDkuOTkxIEluZXhhY3QgUm91bmRlZAorCistLSAxMCoqeCB+PTIgKGludmVyc2Ugb2YgdGhlIHRlc3QgaW4gbG9nMTAuZGVjVGVzdCkKK3ByZWNpc2lvbjogNTAKK3Bvd3gyNDAxIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMTEgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0OQorcG93eDI0MDIgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0OAorcG93eDI0MDMgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDcKK3Bvd3gyNDA0IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NgorcG93eDI0MDUgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE1IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NQorcG93eDI0MDYgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODEgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDQKK3Bvd3gyNDA3IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODggLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MworcG93eDI0MDggcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk5IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MgorcG93eDI0MDkgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxOTAgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDEKK3Bvd3gyNDEwIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTkgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MAorcG93eDI0MTEgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgyIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzOQorcG93eDI0MTIgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjggLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzgKK3Bvd3gyNDEzIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzcgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNworcG93eDI0MTQgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY4IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNgorcG93eDI0MTUgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjcgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzUKK3Bvd3gyNDE2IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDMgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNAorcG93eDI0MTcgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMworcG93eDI0MTggcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzIKK3Bvd3gyNDE5IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMQorcG93eDI0MjAgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ1IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMAorcG93eDI0MjEgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjUgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjkKK3Bvd3gyNDIyIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzIgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOAorcG93eDI0MjMgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNworcG93eDI0MjQgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTUgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjYKK3Bvd3gyNDI1IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODkgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNQorcG93eDI0MjYgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg5IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNAorcG93eDI0MjcgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3MzkgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjMKK3Bvd3gyNDI4IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzQgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMgorcG93eDI0MjkgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMQorcG93eDI0MzAgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyMTQgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK3Bvd3gyNDMxIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOQorcG93eDI0MzIgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUyIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOAorcG93eDI0MzMgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODExOTUgLT4gMi4wMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTcKK3Bvd3gyNDM0IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMjAgLT4gMi4wMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNgorcG93eDI0MzUgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODEyIC0+IDIuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNQorcG93eDI0MzYgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjM5ODEgLT4gMi4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTQKK3Bvd3gyNDM3IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTggLT4gMi4wMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMworcG93eDI0MzggcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjQwIC0+IDIuMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMgorcG93eDI0MzkgcG93ZXIgMTAgMC4zMDEwMjk5OTU2NjQgLT4gMi4wMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTEKK3Bvd3gyNDQwIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYgLT4gMi4wMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMAorcG93eDI0NDEgcG93ZXIgMTAgMC4zMDEwMjk5OTU3IC0+IDIuMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgOQorcG93eDI0NDIgcG93ZXIgMTAgMC4zMDEwMjk5OTYgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDgKK3Bvd3gyNDQzIHBvd2VyIDEwIDAuMzAxMDMwMDAgLT4gMi4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNworcG93eDI0NDQgcG93ZXIgMTAgMC4zMDEwMzAwIC0+IDIuMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNgorcG93eDI0NDUgcG93ZXIgMTAgMC4zMDEwMzAgLT4gMi4wMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDUKK3Bvd3gyNDQ2IHBvd2VyIDEwIDAuMzAxMDMgLT4gMi4wMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNAorcG93eDI0NDcgcG93ZXIgMTAgMC4zMDEwIC0+IDIuMDAwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMworcG93eDI0NDggcG93ZXIgMTAgMC4zMDEgLT4gMi4wMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIKK3Bvd3gyNDQ5IHBvd2VyIDEwIDAuMzAgLT4gMi4wIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMQorcG93eDI0NTAgcG93ZXIgMTAgMC4zIC0+IDIgSW5leGFjdCBSb3VuZGVkCisKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gQ2xvc2UtdG8tZSB0ZXN0cworcHJlY2lzaW9uOiAgIDM0Citwb3d4MjUwMCBwb3dlciAxMCAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNDggICAgIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYxICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyNTAxIHBvd2VyIDEwIDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA0OSAgICAgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjEgIEluZXhhY3QgUm91bmRlZAorcG93eDI1MDIgcG93ZXIgMTAgMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUwICAgICAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjUwMyBwb3dlciAxMCAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTEgICAgIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYzICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyNTA0IHBvd2VyIDEwIDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MiAgICAgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjMgIEluZXhhY3QgUm91bmRlZAorCistLSBlKiplLCAxNi0+MzQKK3Bvd3gyNTA1IHBvd2VyIDIuNzE4MjgxODI4NDU5MDQ1IDIuNzE4MjgxODI4NDU5MDQ1IC0+ICcxNS4xNTQyNjIyNDE0NzkyNTcwNTYzMzczOTUxMzA5ODIxOScgSW5leGFjdCBSb3VuZGVkCisKKy0tIFNlcXVlbmNlIGFyb3VuZCBhbiBpbnRlZ2VyCitwb3d4MjUxMiBwb3dlciAxMCAyLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgICAgIC0+IDk5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyNTEzIHBvd2VyIDEwIDIuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgICAgLT4gOTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgIEluZXhhY3QgUm91bmRlZAorcG93eDI1MTQgcG93ZXIgMTAgMi45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiA5OTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjUxNSBwb3dlciAxMCAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAKK3Bvd3gyNTE2IHBvd2VyIDEwIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgLT4gMTAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcG93eDI1MTcgcG93ZXIgMTAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAgICAtPiAxMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjUxOCBwb3dlciAxMCAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAgIC0+IDEwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKKworLS0gcmFuZG9tbHkgZ2VuZXJhdGVkIHRlc3RzCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCistLSBQPTM0LCB3aXRoaW4gMC05OTkgLS0gcG9zaXRpdmUgYXJnMgorUHJlY2lzaW9uOiAzNAorcG93eDMyMDEgcG93ZXIgNS4zMDE1NTc3NDQxMzE5NjkyNDkxNDU5MDQ2MTEyOTA3MzUgIDM2OS4zMTc1NjQ3OTg0NDM1NTM0MjQzODEzNDY2MzgwNTc5IC0+IDMuNDI3MTY1Njc2MzQ1Njg4MjQwMDIzMTEzMzI2NjAzOTYwRSsyNjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwMiBwb3dlciAwLjAwMDAwMDAwMDA1MDY4NzU2NTU4MTkxNjU5NzM3MzgyMjUgMjEuOTM1MTQxMDI3MDQ0NjY0MzQxMjE4MjY5NjUxOTY4NzggLT4gMS40OTgxNjk4NjAwMzM0ODczMjE1NjY2NTk0OTUzNDA3ODlFLTIyNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjAzIHBvd2VyIDk3Ljg4ODc3NjgwNzIxNTE5OTE3ODU4MDA3ODEwNDk0MDQzICA1LjE1OTg5ODQ0NTI0Mjc5MzQ3MDQ3NjY3MzEwOTg5OTU1NCAtPiAxODcwNTk0MjkwNC40MzI5MDQ2NzI4MTQ0OTU1OTQyNzk4MiAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDMyMDQgcG93ZXIgNy4zODA0NDEwMTU1OTQzOTk3NDc5NzM5MjQzODA0OTM3OTkgIDE3LjkzNjE0MTczOTA0ODE4MzEzNTA3NTI1MTA5MDMzMjg4IC0+IDM3MTU3NTc5ODU4MjAwNzYuMjczMzM2MDgyNzAyNTc3Mjc0ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwNSBwb3dlciAyLjA0NTYyMzYyNzY0NzM1MDkxODgxOTIxOTE2OTg1NTA0MCAgMTA4Mi45OTk2NTI0MDc0MzA2OTc5NTgxNzU5NjY5OTYyNTQgLT4gNC4yMDg4MDY0MzUwMDY3MDQ4Njc0NDcxNTA5MDQyNzk4NTRFKzMzNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjA2IHBvd2VyIDAuMDAwMDAwMDc2MjU4Mjg3MzExMjExODkyNjE0Mjk1NTQyMyAyMC4zMDUzNDIzNzA1NTA3Mzk5Njk3NTIwMzg2NDE3MDQzMiAtPiAyLjk2NzU3NDI3ODY3NzAxMzA5MDY5NzEzMDM0OTE5ODg3N0UtMTQ1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMDcgcG93ZXIgMC4wMDAwMDAwMDAwMTk0MDkxNDcwOTA3ODE0ODU1NjYwNTM1IDE0LjcxMTY0MjEzOTQ3NzIyMjM4ODU2ODM1NDQwMjQyOTExIC0+IDIuNTY0MzkxMzk3NDY5NTU0NzM1MDM3MTU4MzQ1OTYzMjgwRS0xNTggSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwOCBwb3dlciAwLjAwMDAwMDAwMDA1MDk0MzQxODUzODI4MTg1OTY4NTM1MDQgMjAuOTcwNTE0OTgyMDQxODgyNzczNDcyMDM3MzU0MjE1OTUgLT4gMS40MjAxNTczNzI3NDgwODMwMDA5MjcxMzg2Nzg0MTcyNzJFLTIxNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjA5IHBvd2VyIDAuMDAwNTM4OTIxNzIxMjA3MzMwNzMwMTM5NTc1MDc0NTExOSA0My45Njc5ODIyNTQ4NTc0NzMxNTg1ODY3ODc1NTUzODk3MSAtPiAxLjk1Nzg1MDE4NTc4MTI5MjAwNzk3Nzg5ODYyNjEzNzI0MEUtMTQ0IEluZXhhY3QgUm91bmRlZAorcG93eDMyMTAgcG93ZXIgNDk4LjU2OTAxMDU5ODkxMzYwNTA0NDQwNzc0NDc0MTExOTggIDEyOC4xMDM4ODEzODA3MjQzMzc1ODc4ODMxMTA0NzQ1ODAzIC0+IDMuODgyMjEyOTcwOTAzODkzMTI3MDA5MTAyMjkzNTk2MjY4RSszNDUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxMSBwb3dlciAwLjAwMDAwMDA5MzU0Mjg5MTg2MzczMDM5NTQyODE5Mzg5NzUgNS43MzY5MzM0NTQ4NjMyNzg1OTc0NjAwOTE1OTY0OTYwOTkgLT4gNC43MzMyMTk2NDQ1NDA0OTYxNTI0MDM5Njc4MjM2MzUxOTVFLTQxICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjEyIHBvd2VyIDguNTgxNTg2Nzg0NzM0MTYxMzA5MTgwMzYzMTEwMTI2MzUyICAyNTIuMDIyOTQ1OTk2ODg2OTc4NDY0MzM3NDk4MTQ3NzIwOCAtPiAxLjkwNzQ2NDg0MjQ1ODY3NDYyMjM1NjE3Nzg1MDA0OTg3M0UrMjM1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMTMgcG93ZXIgMjk0LjEwMDUzMDI5NTE2MjE3MDkxNDMzMjA3OTUyNzgzMDUgIDE1NS41NDY2Mzc0MTQxNzA4NjE1OTc1MTExMDE0NjYzNzIyIC0+IDkuMjUxNzE3MDMzMjkyMDcyOTU5MTY2NzM3MjgwNzI5NzI4RSszODMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxNCBwb3dlciAwLjAwMDAwMDAwNDEyNTMzNDM2NTQzOTY4NjU4NTU3MjIwOTAgMTkuMDAxNzA5NzQ3NjA0MjU1NzYyNDc2NjIxMjUxMTA0NzIgLT4gNC43Nzk1NjYyODg1NTM4NjQ0MDU3OTA5MjEzNTM1OTM1MTJFLTE2MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjE1IHBvd2VyIDAuMDAwMDAwMDAwMDA0NjkxMjI1NzM1MjE0MTM5NTE4NDA5MiAyNC42NjA4OTUyMzE0ODcyOTI2OTA5ODc3MzIzNjYzNjg3OCAtPiA0LjIwNTEyNjg3NDA0ODU5Nzg0OTQ3NjcyMzUzODA1NzUyN0UtMjgwIEluZXhhY3QgUm91bmRlZAorcG93eDMyMTYgcG93ZXIgMC4wMDAwMDAwMDAwMDM2Nzk2Njc0Mjk2NTIwNjM5NDUwNDk0IDIyLjA5NzEzOTU2OTAwNjk0Njg5MjM0MzM1OTEyNTIzMDc4IC0+IDIuMTczMDgxODQzODM3NTM5ODE4NDcyMDcxMzE2NDIwNDA1RS0yNTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxNyBwb3dlciA5LjY1OTg4NzEwMDMwMzAzNzY1NzkzNDM3MjE0ODU2NzY4NSAgMjc3LjM3NjU2NjU0MjQzMjA4NzU5OTMwMjY0MDQ0OTIyMTYgLT4gMS42MTQ5NzQwNDMxNDU1MTkzODI3NDk3NDA2MTY2NjUwNDFFKzI3MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjE4IHBvd2VyIDAuMDAwMDA4MzIzMTMxMDY0MjIyOTIwNDM5ODk0MzA3NjQwMyAyOS4zMzEyMzIxMTc4MjEzMTQ2NjQ3MTM1OTEyODE5MDM3MiAtPiAxLjAxMzMzMDQzOTc4NjY2MDIxMDc1NzIyNjU5Nzc4NTMyOEUtMTQ5IEluZXhhY3QgUm91bmRlZAorcG93eDMyMTkgcG93ZXIgMC4wOTM4MDg0ODU5MDg2NDUwOTU0OTU2ODYzNzI1NjUzNjY0IDI2Mi42MDkxOTE4MTk5OTA1MjcyODM3Mjg2Nzg0OTc1MDEyIC0+IDEuMjYyODAyNDg1Mjg2MzAxMDY2OTY3NTU1ODIxNTA5MzQ0RS0yNzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyMCBwb3dlciA4LjE5NDkyNjk3NzU4MDkwMDE0NTY5NjMwNTkxMDIyMzMwNCAgMTg0LjM3MDUxMzM5NDU1NDYyMDIwMTI5OTU0ODUyOTcyNDggLT4gMi42OTYzNTM5MTA5MDc4MjQwMTY2OTAwMjE0OTU4Mjg1ODRFKzE2OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjIxIHBvd2VyIDcyLjM5NTk0NTk0NjUzMDg1MTYxNTIyMjg1MTE0NTY2MTIwICAxNjguNzcyMTkwOTQ4OTMyMTQwMjE1MjAzMzkzOTgzNjcyNSAtPiA3LjM3OTg1ODI5MzYzMDQ2MDA0MzM2MTU4NDQxMDc5NTAzMUUrMzEzIEluZXhhY3QgUm91bmRlZAorcG93eDMyMjIgcG93ZXIgMC4wMDAwMDAwMDAwMDAzNDM2ODU2MDEwMTQ0MTg1NDQ1NTM3IDI2LjM0MzI5ODY4OTYxMjc0OTg4OTk0NDUyNTI2MTc4OTgzIC0+IDQuNTg1Mzc5NTczNTk1ODY1Njg5NjA1NTY3NzIwMTkyNzY4RS0zMjkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyMyBwb3dlciAyMC4xODM2NTYzMzc2MjIyNjU1MDI1NDU0MjQ4OTQ5MjYyMyAgMTI3LjIwOTk3MDUyMzcwMjEzNTAxMDM2NzgwNzI3MDc3OTAgLT4gMS4wMjA5MTk2MjkzMzY5NzkzNTM2OTAyNzE3NjIyMDYwNjBFKzE2NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjI0IHBvd2VyIDAuMDAwMDAwMDU1MzcyMzk5MDc2MTUzMDI5MDEyOTI2ODEzMSA4LjE1NzU5NzU2NjEzNDc1NDYzODAxNTE5OTUwMTE2MjQwNSAtPiA2LjM0OTAzMDUxMzM5NjE0NzQ4MDk1NDQ3NDYxNTA2NzE0NUUtNjAgIEluZXhhY3QgUm91bmRlZAorcG93eDMyMjUgcG93ZXIgMC4wMDAxMDI4NzQyNjc0MjY1ODQwNjU2NjE0NjgyNjE4MDM1IDkzLjk5ODQyMzE3MzA2NjAzNzk3OTY1NDcwMjgxNzE2NDgyIC0+IDEuNDU1ODcxMTEwMjIyNzM2NTMxODU0OTkwMzk3NzY5OTQwRS0zNzUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyNiBwb3dlciA5NS45MDE5NTE1Mjc3NTU0Mzg3NjQ4OTc0NjM0MzI2NjA1MCAgMTQzLjU5OTI4NTAwMDIyMTE1MDk3Nzc3MjA3OTkzNTI0NzUgLT4gMy44ODE1NDAwMTU4NDg1MzA0MDUxODk4MzQzNjY1ODg1NjdFKzI4NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjI3IHBvd2VyIDAuMDAwMDAwMDAwMDA0MTc4Mzc0NzA1NzIzMzg3ODM2MDMzMyAxMi4xNDU5MTE2Nzc2NDk5MzUwNjgyMTMzNDc2MDk1NDQzMCAtPiA2LjE5MDk5ODU1NzQ1Njg4NTk4NTEyNDU5MjgwNzM4MzE2M0UtMTM5IEluZXhhY3QgUm91bmRlZAorcG93eDMyMjggcG93ZXIgMC41NTcyODMwNDk3MDg2NzQwNzk4NDM0OTE3MDkwMDE4NzY4IDEwMDEuOTIxODExMjYzOTE5NTIyMjMwMzMwMjQxMzQ5MTY2IC0+IDMuODcxMTQ1MTU4NTM3MTcwNDUwMDkzODMzODgxNjI1ODM4RS0yNTUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyOSBwb3dlciA1MTYuNDc1NDc1OTc3OTA5Mzk1NDc5MDgxMzg4MTMzMzIzMiAgMjkuMjM4MTI0NjMxMjYzMDkwNTc4MDA3OTM2NDUzMzYzNDMgLT4gMi4xMTA5ODYxOTI0MDg4NzgyOTQwMTI0NTAwNTI5MjkxODVFKzc5ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjMwIHBvd2VyIDAuMDAwMDgzNTg5MjA5OTQ2NDU4NDc3Njg0NzI5OTAyMDcwNiAyNy42NDI3OTk5Mjg4NDg0Mzg3NzQ1MzU5MjY1OTM0MTU4OCAtPiAxLjg5MTUzNTA5ODkwNTUwNjY4OTUxMjM3NjIyNDk0MzI5M0UtMTEzIEluZXhhY3QgUm91bmRlZAorcG93eDMyMzEgcG93ZXIgNzIuNDU4MzY1Nzc3NDg1NzE4MzgxMzk5MDAxNjUxODQ5NTUgIDE2Ni4yNTYyODkwNzM1MDMyNTQ1MDkxNjg4MDE1MTYwMDg0IC0+IDEuNzg0MDkxNTQ5MDQxNTYxNTE2OTIzMDkyNTQyOTM5MTQxRSszMDkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzMiBwb3dlciAzMDUuMTgyMzMxNzY0MzMzNTkyNDAwNzYyOTU2MzAwOTAzMiAgODMuMDEwNjUxNTk1MDg0NzI4ODQyMTkyOTAxMzYzMTk2MjMgLT4gMS43NTc0OTMxMzYxNjQzOTUyMjk2MDI0NTY3ODI3NzkxMTBFKzIwNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjMzIHBvd2VyIDcuMTA4NTI3MTAyOTUxNzEzNjAzNTQyODM1NzkxNzMzNzg2ICAxNDUuNzA1Nzg1Mjc2NjIzNjM2NTQ1MDQ2MzQyODgyMTk0OCAtPiAxLjI4NTkzNDc3NDExMzEwNDM2MjY2MzYxOTg5NjU1MDUyOEUrMTI0IEluZXhhY3QgUm91bmRlZAorcG93eDMyMzQgcG93ZXIgNi40NzEzOTM1MDMxNzU0NjQ4MjgxNDkzNjU2OTcwNDk4MjQgIDY0LjExNzQxOTM3MjYyNDU1NzI1Mjg0NzU0MTcxOTk1NzIwIC0+IDkuOTc4OTkwMzU1ODgxODAzMTk1MjgwMDI3NTMzMDExNjk5RSs1MSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzNSBwb3dlciAzOS43Mjg5ODA5NDEzODQ1OTg4NTY2MjM4MDg2NjI2ODM4NSAgMjM5Ljk2NzcyODgwMTc0NDc0MDA3ODY2NzI3Nzk3MzUxNjggLT4gNS40MjIyMTgyMDg1MTcwOTgzMzU4MzI4NDg0ODczNzUwODZFKzM4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjM2IHBvd2VyIDAuMDAwMjg2NTU5MjMzMjczNjk3MzAwMDE4MzI4NzMyOTkzMyA5MC4zNDczMzg2OTU5MDU4Mzc4NzA2NTY0MjUzMjY0MTA5NiAtPiA4LjI5MzczMzEyNjk3NjIxMjAzMzIwOTI0MzI1NzEzNjc5NkUtMzIxIEluZXhhY3QgUm91bmRlZAorcG93eDMyMzcgcG93ZXIgMC4wMDAwMDExMzQzMzg0Mzk0ODY0ODExMTk1MDc3MzU3OTM2IDEuOTI2NTY4Mjg1NTI4Mzk5NjU2Nzg5MTQwODA5Mzk5Mzk2IC0+IDMuNTE2MDU1NjM5Mzc4MzUwMTQ2ODc0MjYxMDc3NDcwMTQyRS0xMiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzOCBwb3dlciAwLjAwMDAwMDAwMzUzMjE2MTAyOTUwNjUyOTkzODQ4ODkyMjQgNy41ODM4NjE3Nzg4MjQyODQwOTI0MzQwODUyNjUyNjU1ODIgLT4gNy45NzA4OTk4MjM4MTczNjk3NjQzODE5NzYyODY1MzYyMzBFLTY1ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjM5IHBvd2VyIDY1Ny41MDI4MzAxNTY5MzUyNjc3NTQzNzcwNzU4MzQ2NjgzICA5MC41NTc3ODQ1MzgxMTk2NTExNjIwMDIwNjAyMDE3Mjc1OCAtPiAxLjUyMjUzMDg5ODU4MTU2NDIwMDY1NTE2MDY2NTcyMzI2OEUrMjU1IEluZXhhY3QgUm91bmRlZAorcG93eDMyNDAgcG93ZXIgOC40ODQ3NTYzOTgzMjU3NDg4Nzk0NTA1Nzc1MjAyNTE0NDcgIDM4OS43NDY4MjkyNDc2MjYyNDc4NTc4MjgwNTMxMjIyNDE3IC0+IDguNTk1MTQyODAzNTg3MzY4MDkzMzkyNTEwMzEwODExMjE4RSszNjEgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9MTYsIHdpdGhpbiAwLTk5IC0tIHBvc2l0aXZlIGFyZzIKK1ByZWNpc2lvbjogMTYKK3Bvd3gzMTAxIHBvd2VyIDAuMDAwMDIxNTUyNDYzOTIyMyA0OC4zNzUzMjUyMjM1NTI1MiAtPiAxLjgwNDY2MzI1NzI4NzI3N0UtMjI2IEluZXhhY3QgUm91bmRlZAorcG93eDMxMDIgcG93ZXIgMDAuODA3MDU4NTYyMjc5OTkgIDI3MDYuNzc3NTM1MTIxMzkxIC0+IDEuMDI5NjI1MDY1ODc2MTU3RS0yNTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEwMyBwb3dlciAzLjQ0NTQ0MTY3NjM4MzY4OSAgNDI4LjUxODU4OTI0NTU4MzAgLT4gMS42NTc0MDE2ODMwOTY0NTRFKzIzMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTA0IHBvd2VyIDAuMDA0MDE1ODY4OTQ5NTgyNiAxNTkuNTcyNTU1ODgxNjI0MCAtPiA0LjI1NTc0MzY2NTc2MjQ5MkUtMzgzIEluZXhhY3QgUm91bmRlZAorcG93eDMxMDUgcG93ZXIgMC4wMDAwODQxNTUzMjgxMjE1IDM4LjMyNTA0NDEzNDUzOTQ0IC0+IDYuNzM4NjUzOTAyNTEyMDUyRS0xNTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEwNiBwb3dlciAwLjczMjI2MTAyNTI1NzEzNTMgNTAyLjEyNTQ0NTc2NzQxMTggLT4gMS4xMDk5NzgxMjY5ODU5NDNFLTY4ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTA3IHBvd2VyIDEwLjc1MDUyNTMyMTQ0ODgwICA2Ny4zNDE4MDYwNDczNDc4MSAtPiAyLjg3MzAxNTAxOTQ3MDE4OUUrNjkgIEluZXhhY3QgUm91bmRlZAorcG93eDMxMDggcG93ZXIgMjYuMjA0MjU5NTI5NDU2MTcgIDEwNC42MDAyNjcxMTg2NDg4IC0+IDIuMzAxODU5MzU1Nzc3MDMwRSsxNDggSW5leGFjdCBSb3VuZGVkCitwb3d4MzEwOSBwb3dlciAwLjAwMDAwNTU3Mzc0NzM4NTAgMzEuMTYyODU4NTkwMDU0MjQgLT4gMS44ODMzNDg0NzAxMDA0NDZFLTE2NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTEwIHBvd2VyIDYxLjA2MDk2MDExMzYwNzAwICAxMC45MzYwODQzOTA4ODcyNiAtPiAzLjM4MjY4NjQ3MzAyODI0OUUrMTkgIEluZXhhY3QgUm91bmRlZAorcG93eDMxMTEgcG93ZXIgOS4zNDA4ODA4NTMyNTcxMzcgIDE3OS45MDk0OTM4MTMxNzI2IC0+IDMuODE5Mjk5Nzk1OTM3Njk2RSsxNzQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzExMiBwb3dlciAwLjAwMDAwNTA3NjczNzE3NTYgNzIuMDMzNDYzOTQxODY3NDEgLT4gNC4yMTYyMzY2OTE1Njk4NjlFLTM4MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTEzIHBvd2VyIDYuODM4NDc4ODA3ODYwNTk2ICA0Ny40OTY2NTU5MDYwMjI4NSAtPiA0LjU0NzYyMTYzMDA5OTIwM0UrMzkgIEluZXhhY3QgUm91bmRlZAorcG93eDMxMTQgcG93ZXIgMC4xMjk5MzI0MzQ2NDM5MDgxIDM5Ny43NDQwNTIzNTc2OTM4IC0+IDMuMDY1MDQ3NzA1NTUzOTgxRS0zNTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzExNSBwb3dlciAwLjAwMDM0MTgwNDcwMzQyNjQgMjAuMDA1MTY3OTE1MTIwMTggLT4gNC41NDYxODk2NjUzODA0ODdFLTcwICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTE2IHBvd2VyIDAuMDAwMTI3Njg5OTYxMTcxNSA3OC4xMjk2ODI4NzM1NTcwMyAtPiA1Ljk2MDIxNzQwNTA2Mzk5NUUtMzA1IEluZXhhY3QgUm91bmRlZAorcG93eDMxMTcgcG93ZXIgMjUuOTMxNjA1ODgxODA1MDkgIDI1Mi42MjQ1MDcxMDA0NjIwIC0+IDEuNDcyMTcxNTk3NTg5MTQ2RSszNTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzExOCBwb3dlciAzNS40NzUxNjg1Nzc2MzE3OCAgODYuMTQ3MjMwMzczNjA5MjUgLT4gMy4zMjQyOTk5MDg0ODExMjVFKzEzMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTE5IHBvd2VyIDAuMDAwMDA0ODE3MTA4NjcyMSA0My4zMTk2NTYwMzAzODY2NiAtPiA0LjU3MjMzMTUxNjYxNjIyOEUtMjMxIEluZXhhY3QgUm91bmRlZAorcG93eDMxMjAgcG93ZXIgMTcuOTc2NTI2ODEwOTc4NTEgIDE0NC40Njg0NTc2NTUwMjkyIC0+IDEuODQyNTA5OTA2MDk3ODYwRSsxODEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEyMSBwb3dlciAzLjYyMjc2NTE0MTUxODcyOSAgMzA1LjE5NDg2ODAzNDQ5NTAgLT4gNC4xMzIzMjA5Njc1Nzg3MDRFKzE3MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTIyIHBvd2VyIDAuMDA4MDk1OTAwMjQ1MzUxOSAxNDMuOTg5OTQ0NDk0NTYyNyAtPiA2LjQ3NDYyNzgxMjk0NzA0N0UtMzAyIEluZXhhY3QgUm91bmRlZAorcG93eDMxMjMgcG93ZXIgOS44NDE2OTk5MjcyNzY1NzEgIDI5OS4yNDY2NjY4ODM3MTg4IC0+IDEuNDg5MDk3NjU2MjA4NzM2RSsyOTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEyNCBwb3dlciAwLjA3ODY2NTkyMDYyMzIzNTUgMzQ3LjQ3NTA3OTY5NjI1NzAgLT4gMi4wNTc2NDgwOTY0NjkyNUUtMzg0ICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorcG93eDMxMjUgcG93ZXIgMC4wMDAwMDg0NDU5NzkyNjQ1IDUyLjQ3MzQ4NjkwNzQ1NDg3IC0+IDYuMDc2MjUxODc2NTE2OTQyRS0yNjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEyNiBwb3dlciAyNy44NjU4OTkwOTk2NzUwNCAgMTkxLjcyOTY1MzcxMDIyODMgLT4gMS4xNTcwNjQxMTI5ODkzODZFKzI3NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTI3IHBvd2VyIDAuMDAwMDQxOTkwNzkzNzIzNCA1OC40NDk1NzcwMjczMDc2NyAtPiAxLjQ5Njk1MDY3MjA3NTE2MkUtMjU2IEluZXhhY3QgUm91bmRlZAorcG93eDMxMjggcG93ZXIgMC4wMDAwNjY0OTc3NzM5MzgyIDgwLjA2NzQ5MjEzMjYxODc2IC0+IDMuNDg4NTE3NjIwMTA3ODc1RS0zMzUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEyOSBwb3dlciA1OC40OTU1NDQ4NDg4NjY1NiAgMTI1Ljg0ODA3NjgzNzM0OTkgLT4gMi40NDkwODk4NjIxNDY2NDBFKzIyMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTMwIHBvd2VyIDE1LjAyODIwMDYwMDI0NDQ5ICAyMTIuMzUyNzk4ODk3MzMzOCAtPiA4LjMwNzkxMzkzMjY4MjA2N0UrMjQ5IEluZXhhY3QgUm91bmRlZAorcG93eDMxMzEgcG93ZXIgMC4wMDAyNjUwMDg5OTQyOTkyIDMwLjkyMTczMTIzNjc4NzYxIC0+IDIuNTE3ODI3NjY0ODM2MTQ3RS0xMTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEzMiBwb3dlciAwLjAwMDczNDI5Nzc0MjY1NzggNjkuNDkxNjg4ODA3NDExMjMgLT4gMS42MDAxNjg2NjU2NzQ0NDBFLTIxOCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTMzIHBvd2VyIDAuMDA2MzgxNjA2ODY1MDYyOSAxNTAuMTQwMDA5NDE4MzgxMiAtPiAyLjcwNTA1NzI5NTc5OTAwMUUtMzMwIEluZXhhY3QgUm91bmRlZAorcG93eDMxMzQgcG93ZXIgOS45MTI5MjExMjI3Mjg3OTEgIDI5Ny44Mjc0MDEzNjMzNDExIC0+IDQuOTY3NjI0OTkzNDM4OTAwRSsyOTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEzNSBwb3dlciAxLjk4ODYwMzU2Mzk4OTI0NSAgNzY4LjQ4NjI5Njc5MjIxODIgLT4gMi42OTI4NDI0NzQ4OTk1OTZFKzIyOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTM2IHBvd2VyIDguNDE4MDE0NTE5NTE3NjkxICAxNjQuMjQzMTM1OTk4MDcyNSAtPiA5LjEwNjIxMTU4NTg4ODgzNkUrMTUxIEluZXhhY3QgUm91bmRlZAorcG93eDMxMzcgcG93ZXIgNi4wNjg4MjM2MDQ0NTA2ODYgIDEyMC4yOTU1MjEyMzY1ODM3IC0+IDEuNTk5NDMxOTE4MTA1OTgyRSs5NCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEzOCBwb3dlciA1Ni45MDA2MjczODMwMzg1MCAgNTQuOTA0NjgyOTQ2ODM2NDUgLT4gMi4zMTI4MzkxNzc5MDI0MjhFKzk2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTM5IHBvd2VyIDUuNzEwOTA1MTM5NzUwODcxICA3My40NDYwODc1Mjk2MjE1NiAtPiAzLjc3NTg3NjA1MzcwOTkyOUUrNTUgIEluZXhhY3QgUm91bmRlZAorcG93eDMxNDAgcG93ZXIgMC4wMDAwMDE3NDQ2NzYxMjAzIDEuMjIzOTgxNDkyMjI4ODk5IC0+IDguOTUyOTM2NTk1NDY1NjM1RS04ICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9Nywgd2l0aGluIDAtOSAtLSBwb3NpdGl2ZSBhcmcyCitQcmVjaXNpb246IDcKK3Bvd3gzMDAxIHBvd2VyIDguNzM4Njg5ICA1NS45NjUyMyAtPiA0Ljg3ODE4MEUrNTIgIEluZXhhY3QgUm91bmRlZAorcG93eDMwMDIgcG93ZXIgMC4wNDA0NzYzIDE0Ny40OTY1IC0+IDMuNjg5NzIyRS0yMDYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwMyBwb3dlciAwLjA2MDQyMzIgNzYuNjk3NzggLT4gMy4zMTkxODNFLTk0ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDA0IHBvd2VyIDAuMDA1ODg1NSAxMDcuNTAxOCAtPiAxLjc2ODg3NUUtMjQwIEluZXhhY3QgUm91bmRlZAorcG93eDMwMDUgcG93ZXIgMi4wNTgzMDIgIDExNzMuMDUwIC0+IDUuNzc4ODk5RSszNjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwNiBwb3dlciAwLjAwNTY5OTggODUuNzAxNTcgLT4gNC43MTY3ODNFLTE5MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDA3IHBvd2VyIDAuODE2OTI5NyAzNjkzLjUzNyAtPiA0LjQ3NTk2MkUtMzI1IEluZXhhY3QgUm91bmRlZAorcG93eDMwMDggcG93ZXIgMC4yODEwMTUzIDY1OS45NTY4IC0+IDEuNTMzMTc3RS0zNjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwOSBwb3dlciA0LjYxNzQ3OCAgMTUuNjgzMDggLT4gMi42Mjk3NDhFKzEwICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDEwIHBvd2VyIDAuMDI5NjQxOCAyNDQuMjMwMiAtPiA2LjIwNzk0OUUtMzc0IEluZXhhY3QgUm91bmRlZAorcG93eDMwMTEgcG93ZXIgMC4wMDM2NDU2IDEyNy45OTg3IC0+IDguMTIwODkxRS0zMTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxMiBwb3dlciAwLjUwMTI4MTMgNTc3LjU0MTggLT4gNi4wODg4MDJFLTE3NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDEzIHBvd2VyIDAuMDAzMzI3NSAxMTkuOTgwMCAtPiA1LjA1NTA0OUUtMjk4IEluZXhhY3QgUm91bmRlZAorcG93eDMwMTQgcG93ZXIgMC4wMDM3NjUyIDExMS43MDkyIC0+IDEuNTYwMzUxRS0yNzEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxNSBwb3dlciAwLjY0NjMyNTIgMjM5LjA1NjggLT4gNC44NjQ1NjRFLTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDE2IHBvd2VyIDQuNzg0Mzc4ICA0NzUuMDUyMSAtPiA4Ljk2NDQ2MEUrMzIyIEluZXhhY3QgUm91bmRlZAorcG93eDMwMTcgcG93ZXIgNC42MTAzMDUgIDU2My4xNzkxIC0+IDYuMjkwMjk4RSszNzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxOCBwb3dlciAwLjAxNzUxNjcgODAuNTIyMDggLT4gMy42MjM0NzJFLTE0MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDE5IHBvd2VyIDUuMjM4MzA3ICAzNTYuNzk0NCAtPiA0LjAxMTQ2MUUrMjU2IEluZXhhY3QgUm91bmRlZAorcG93eDMwMjAgcG93ZXIgMC4wMDAzNTI3IDk2LjI2MzQ3IC0+IDQuMzc3OTMyRS0zMzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyMSBwb3dlciAwLjAwMTUxNTUgMTM2LjA1MTYgLT4gMi41NzExM0UtMzg0ICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorcG93eDMwMjIgcG93ZXIgNS43NTM1NzMgIDI3My4yMzQwIC0+IDQuMzczMTg0RSsyMDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyMyBwb3dlciA3Ljc3ODY2NSAgMzMyLjc5MTcgLT4gMy4wNjA2NDBFKzI5NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDI0IHBvd2VyIDEuNDMyNDc5ICAyMDQ2LjA2NCAtPiAyLjMyNTgyOUUrMzE5IEluZXhhY3QgUm91bmRlZAorcG93eDMwMjUgcG93ZXIgNS42MTA1MTYgIDEzNi40NTYzIC0+IDEuNjA3NTAyRSsxMDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyNiBwb3dlciAwLjAwNTA2OTcgMTM3LjQ1MTMgLT4gMy41MjIzMTVFLTMxNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDI3IHBvd2VyIDUuNjc4NzM3ICA4NS4xNjI1MyAtPiAxLjcxMzkwOUUrNjQgIEluZXhhY3QgUm91bmRlZAorcG93eDMwMjggcG93ZXIgMC4wODE2MTY3IDIzNi4xOTczIC0+IDkuMjI4ODAyRS0yNTggSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyOSBwb3dlciAwLjI2MDI4MDUgNTYyLjAxNTcgLT4gMi45NDQ1NTZFLTMyOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDMwIHBvd2VyIDAuMDA4MDkzNiAyNC4yNTM2NyAtPiAxLjgzOTc1NUUtNTEgIEluZXhhY3QgUm91bmRlZAorcG93eDMwMzEgcG93ZXIgNC4wOTIwMTYgIDgyLjk0NjAzIC0+IDUuNzI0OTQ4RSs1MCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzMiBwb3dlciAwLjAwNzgyNTUgNy4yMDQxODQgLT4gNi42NzUzNDJFLTE2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDMzIHBvd2VyIDAuOTkxNzY5MyAyOTg0Ni40NCAtPiA3LjQzMDE3N0UtMTA4IEluZXhhY3QgUm91bmRlZAorcG93eDMwMzQgcG93ZXIgMS42MTAzODAgIDMwMS4yNDY3IC0+IDIuMTcwMTQyRSs2MiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzNSBwb3dlciAwLjA1ODgyMzYgMjEyLjEwOTcgLT4gMS4wMjMxOTZFLTI2MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDM2IHBvd2VyIDIuNDk4MDY5ICA1MzEuNDY0NyAtPiAyLjA1NDU2MUUrMjExIEluZXhhY3QgUm91bmRlZAorcG93eDMwMzcgcG93ZXIgOS45NjQzNDIgIDMyNi41NDM4IC0+IDEuMDg5NDUyRSszMjYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzOCBwb3dlciAwLjA4MjA2MjYgMjY4Ljg3MTggLT4gMS4xMDczNTBFLTI5MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDM5IHBvd2VyIDYuMTc2NDg2ICAzNjAuNzc3OSAtPiAxLjkxNDQ0OUUrMjg1IEluZXhhY3QgUm91bmRlZAorcG93eDMwNDAgcG93ZXIgNC4yMDYzNjMgIDE2LjE3Mjg4IC0+IDEuMjMxMzE0RSsxMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9MzQsIHdpdGhpbiAwLTk5OSAtLSBuZWdhdGl2ZSBhcmcyCitQcmVjaXNpb246IDM0Citwb3d4MzcwMSBwb3dlciAzNzYuMDkxNTI3MDAwMDEwOTQ4NjYzMzQwMjgyNzAwNzkwMiAgLTM1LjY5ODIyMzQ5OTA0MTAyMTMxNjQ5MjQzNzAxOTU4NDYzIC0+IDEuMTY1NzIyODMxMjI1NTA2NDU3ODI4NjUzNDEzMjAwMTQzRS05MiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcwMiBwb3dlciAwLjAwMDAwMDA1MDM3NDc0NDAwNzQ2MTMxOTE2NjU4NDUzMTQgLTkuNTIwMzA4MzQxNDk3OTc5MDkzMDIxODEzNTcxNDUwNTc1IC0+IDMuMDAwNDMyNDc4ODYxODgzOTUzOTc3OTcxMjI2NzcwNDEwRSs2OSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcwMyBwb3dlciAyOTAuNjg1ODczMTQ5NTMzOTc3ODMzNzk1MzQwNzkzODMwOCAgLTExOC41NDU5MDQ4NTk3Nzg5NjkzMjkyNDU1NjczNDI4MzY3IC0+IDkuMzU3OTY5MDQ3MTEzOTg5MjM4MzkyNTI3NTY1MjAwMzAyRS0yOTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcwNCBwb3dlciA0LjU5ODg2NDYwNzYyMDA1MjA2MjkwODcwMDkyODQ1NDE4MiAgLTI5OS44MzIzNjY3Njk4OTMxMTI1NzIwMjE4NTM3NDgzNzUzIC0+IDIuMDY5NjQxMjY5ODU1NDEzNTM5NTc5MTI4MTE0NDQ4NDc4RS0xOTkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcwNSBwb3dlciAyLjU1Njk1MjY3Njk4NjgzMDY0NTcwODM0OTI1NDkzODkwMyAgLTQyNS4xNzU1MzczMjUxOTQxMzgzMTQ3OTk4OTI0NzAzNTkzIC0+IDQuNDI4Nzk5Nzc3ODMzNTk4NjU0MjYwODgzODYxNTE0NjM4RS0xNzQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcwNiBwb3dlciAwLjAwMDAwMDU2NTYxOTg3NjM0MDQyMjE5ODY2NDA2MTAxMTggLTMyLjgzMzYxMzgwNjc4MzAxMzIxMjMwMDI4NzMwMDc1MzE1IC0+IDEuMzQwMjcwNjIyNDAxODI5MTQ1OTY4NDc3NjAxMDI5MjUxRSsyMDUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcwNyBwb3dlciAwMTIuNDg0MTk3ODY0MjQ1Mjk2MDc1MDgwMTQxMDM3MjEyNSAgLTIxNC4zNzM0MjkxODI4NzEyOTYyODA5ODY2NjYzMzIxOTIxIC0+IDkuMzE5ODU3NzUxMTcwNjAzMTQwNDU5MDU3NTM1OTcxMjAyRS0yMzYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcwOCBwb3dlciAwLjAwMDAwMDAwNTYwNDE1ODYxNDgwNjY5MTkxNzQzMTU1NTEgLTM3LjIxMTI5MDQ5MjEzODU4MzQxNTI4MDMzMzQzMTE2NTMzIC0+IDEuMTE4MzQ1MDEwNjUyNDU0MzEzMTg2NzAyMzQxODczMTY5RSszMDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcwOSBwb3dlciAwLjA2OTQ1NjkyMTg5NDE4MzM3NjcxOTk5OTg4MDQyMDIxNTIgLTguNjk3NTA5MDcyMzY4OTczOTMyNTAxMjM5ODE1Njc3NzMyIC0+IDExODYyODY2OTk1LjUxMDI2NDg5MDMyODM4MTc0MjkwMjcxICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxMCBwb3dlciA2LjM4MDk4NDAyNDI1OTQ1MDM5ODcyOTI0MzUyMjM1NDE0NCAgLTQ1MS4wNjM1Njk2ODg5MTkzNTYxNDU3OTg1NDg2MzY2ODI3IC0+IDguODAwMzUzMTA5Mzg3MzIyNDc0ODA5MzI1NjcwMzE0MzMwRS0zNjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxMSBwb3dlciA3ODYuMDI2NDg0MDc1NjgwOTA0ODI4ODAwNzIwNDkxNzgwMSAgLTQzLjA5OTM1Mzg0Njc4NzYyNzczMDU3MzQyMTYxNzE4NTQwIC0+IDEuNjE2MzI0MTgzMzY1NjQ0MTMzOTc5NTg1NDE5OTI1OTM0RS0xMjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxMiBwb3dlciA5Ni4wNzgzNjQyNzExMzIwNDc0NDEwMTI4Nzk0ODQ0NTEzMCAgLTE4NS4xNDE0NTcyNTQ2MzMwMDI0Mzg4OTE0NzIwMjcxODc2IC0+IDguNTg2MzIwODE1MjE4MzgzMDA0MDIzMjY0OTgwMDE4NjEwRS0zNjggSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxMyBwb3dlciAwLjAwMDAwMDAwMDIzMzIxODk3OTY4NTU4NzA2NTk3OTI0MDYgLTUuNzc5NTYxNjEzMTY0NjI4MDc2ODgwNjA5ODkzNzUzMzI3IC0+IDQuNjc4NDUwNzc1ODc2Mzg1NzkzNjE4NTcwNDgzMzQ1MDY2RSs1NSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxNCBwb3dlciAwLjcyNTQxNDY2NzIwMjQ2MDIyNDIzNjk5NDMyMzc5Njg4NTcgLTIxMTUuNTEyODkxMzk3ODI4NjE1NzEwMTMwMDkyMjQ1NjkxIC0+IDguNTM5MDgwOTU4MDQxNjg5Mjg4MjAyMTExNDAzMTAyNDk1RSsyOTQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxNSBwb3dlciAwLjAwMTczODA1NDM2NDk3MDI4NjQ3OTYxNDQwMDg1OTIxMzcgLTYuMzA3NjY4MDE3NzYxMDIyNzg4MjIwNTc4NjMzNTM4NzEzIC0+IDI1NjMwOTE0MTQ1OTA3NTY1MS4yMjc1Nzk4MDE3Njk1MDE3ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxNiBwb3dlciAwNS4yOTQ5ODc1ODk1MjI3NjkwODI2NzY0OTExNjE0MjM3OSAgLTI4Ny4zMjMzODk2NzM0MTAzNDQyOTkxOTgxMDU2MTM0MTY3IC0+IDEuMDM5MTMwMDI3ODQ3NDg5MzY0MDA5MzY4NjA4MTA0MjkxRS0yMDggSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxNyBwb3dlciAxNS42NDQwMzU5Mzg2NTkzMjYyMjAwMzQ2Mjc3OTEwNDE3OCAgLTExMC41Mjk2NjMzMzU4MDYzMjY3NDc4NjA5MDMyMDAyNDc1IC0+IDkuNzUwNTQwMjc2MDI2NTI0NTI3Mzc1MTI1OTgwMjk2MTQyRS0xMzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxOCBwb3dlciA4OS42OTYzOTAwNjc2MTU3MTA4NzYzNDk0NTA3NzM3MzUwOCAgLTE4MS4zMjA5OTE0MTM5MzU3NjY1NjA5MjY4MzM5NDIyNjI3IC0+IDguMzM1MDM0MjMyMjc3NzYyOTI0NTM5Mzk1NjMyMDI1MjgxRS0zNTUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcxOSBwb3dlciA2Ljk3NDA4NzQ4MzczMTAwNjM1OTkxNDkxNDExMDEzNTA1OCAgLTE3NC42ODE1NjI1NzQ2NzEwMzQ1MTczNjE1NTA4MTc5ODQyIC0+IDQuNTUzMDcyMjY1MTIyMDExMTc2NjQxNTkwMTA5NTY4MDMxRS0xNDggSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyMCBwb3dlciAwLjAwMzQzOTMwMjQwMTA1NTQ4MjExMzA1NTM3NzI2ODE5OTMgLTkzLjYwOTMxNTk4NDEzOTE5MjcyNTk1NDk3MTAwNDk3MzY0IC0+IDQuMDY3NDY4ODU1ODE3MTQ1NTM5NTg5OTg4MzQ5NDQ5Mzk0RSsyMzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyMSBwb3dlciA2My4zMjgzNDA3MjMwMDM3OTE1NTA1MzczNzI2MDk2NTYzMyAgLTE2OC4zOTI2Nzk5NDM1MDg4MzI0ODI1NzUxNDQ2OTU3NjE2IC0+IDQuMjA3OTA3ODM1NDYyNjQwNDcxNjE3NTE5NTAxNzQxMDk0RS0zMDQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyMiBwb3dlciAwMC4wMDIxNjA4ODE3NDIwNjI3NjM2OTAxMTI1NTkwNzc4NSAgLTcwLjEyMjc5NTYyODU1NDQyNzg0NzU3ODc0NTA4OTkxMDEzIC0+IDguMDAwNjU3MTQzMzc4MTg3MDI5NjA5MzQzNDM1MDY3MDU3RSsxODYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyMyBwb3dlciA5MzQuNTk1Nzk4MjcwMzU0NTg5MzU3MjEzNDM5MzAwNDM3NSAgLTEwMi4yMjg3NzM1NTY1ODc4MjUyNDg0MDMxNDI2MDI2NzI2IC0+IDIuMDczODEzNzY5MjA5MjU3NjE3MjQ2NTQ0NDI0ODI3MjQwRS0zMDQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyNCBwb3dlciAxMDcuOTExNjc5MjU1ODc5MzkyMTg3Mzk5NTg4NTQ0MTE3NyAgLTQ0LjExOTQxMDkyMjYwODY5Nzg2MzEzODM4MTgxNDk5MTU4IC0+IDIuMDA1NDc2NTMzNjMxMTgzMjY4OTEyNTUyMTY4NzU5NTk1RS05MCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyNSBwb3dlciAwLjAwMDAwMDAwMDAxODgwNDk4MjczODE0MjgxOTE3NjkyNjIgLTE5LjMyMTE4OTE3MTkyMjQyMDI3OTY2ODQ3NTAxNzI0MDczIC0+IDEuNzEzMTc0Mjk3MTAwOTE4ODU3MDUzMzM4Mjg2Mzg5MDM0RSsyMDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyNiBwb3dlciA2MTQuOTgyMDkwNzM2NjI0ODE0MjE2NjYzNjI1OTAyNzcyOCAgLTQuMDY5OTEzMjU3MDMwNzkxNTg2NjQ1MjUwMDM1Njk4MTIzIC0+IDQuNDYyNDMyNTcyNTc2OTM1NzUyNzEzODc2MjkzNzQ2NzE3RS0xMiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyNyBwb3dlciA3NTIuMDY1NTE3NTc2OTE4MjA5NjE2NTY1MTI3NDA0OTQyMiAgLTIyLjU5MjkyMDYwMzQ4Nzk3NDcyMDEzNTk4Mzc4MzM0MzcwIC0+IDEuMDM5ODgxNTI2Njk0NjM1MjA1MDQwMTkyNTMxNTA0MTMxRS02NSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyOCBwb3dlciA3Mi4yMDQ0NjYzMjA0NzY1OTQ0OTYxNjE3NTQ1NjA1OTAxMyAgLTE3NS40NzA1MzU2NDAxODUzOTI0MDIwODQyMzU2NjA1MDcyIC0+IDcuNTI5NTQwMTc1NzkxNTgyNDIxOTY2OTQ3ODE0NTQ5MDI4RS0zMjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzcyOSBwb3dlciA1MTguODM0NjQ4NjYwMDQwMzQwNTc2NDA1NTg0NzkzNzQxNiAgLTY1Ljg3MzIwMjY4NTkyNzYxNTg4NzU2OTYzMjE1NTg4MjMyIC0+IDEuNDIwMTg5NDI2OTkyMTcwOTM2OTU4ODkxMTgwMDczMTUxRS0xNzkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczMCBwb3dlciAzLjQ1NzE2NDM3MjAwMzk2MDU3NjQ1MzQ1ODUwMjI3MDcxNiAgLTQ0MC4zMjAxMTE4MTc3ODYxMjczODE0NTI5NzEzNDQzNjk4IC0+IDYuMTc2NDE4NTk1NzUxMjAxMjg3MTg2MjkyNjY0MjU3MzY5RS0yMzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzczMSBwb3dlciA3LjkwODM1Mjc5MzM0NDE4OTcyMDczOTQ2NzY3NTUwMzk5MSAgLTI5OC42NjQ2MTEyODk0NzE5NjgwMzk0MTUyNjY0NzQwMjU1IC0+IDUuOTM1ODU3MTIwMjI5MTQ3NjM4MTA0Njc1MDU3Njk1MTI1RS0yNjkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczMiBwb3dlciAwLjAwMDAwMDQyOTczOTk0MDM3ODg1OTUwMjc5MjYwNzUwODYgLTIyLjY2NTA0NjE3MTg1MDcxMjkzNTg4ODE3NTAxNDY4MzM5IC0+IDIuMDEyMjcwNDA1NTIwNjAwODIwNDY5NjY1MTQ1NjM2MjA0RSsxNDQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczMyBwb3dlciAwLjAwMDAwMDg1OTIxMjQwOTczMjI5NjYzNTQ4Njg3MTY0NDMgLTkuOTEzMTA5NTg2NTU4MDMwMjA0Nzg5NTIwMTkwMTgwOTA2IC0+IDEuMzU0OTU4NzYzODQzMzEwMjM3MDQ2ODE4ODMyNzU1MjE1RSs2MCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczNCBwb3dlciAxNjEuNDgwNjA4MDU2MTI1ODEwNTg4MDkwNzQ3MDk4OTkyNSAgLTcwLjcyOTA3ODM3NDM0ODE0MjYxNzE2MzExOTkwMjcxNTc4IC0+IDYuNjMyNTU1MDAzNjk4OTQ1NTQ0OTQxMzI5ODcyOTAxOTI5RS0xNTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczNSBwb3dlciAwLjAwMDAwMDAwOTA2Njk1Njg2MjQxNzM4MzI3MDU2MzE5MTggLTM2LjUzNzU5NjI0NjEzNjY1OTQwMTI3MDU4NDM5MTA2NjQwIC0+IDcuMTYxODA4NDAxMDIzNDE0NzM1NDI4MTMwMTEyOTQxNTU5RSsyOTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczNiBwb3dlciAwLjAwMDAwMDAwMDAwMjk0NDAyOTU5NzgzNjU3MDkzNDI3NTIgLTEuMjk3MzU0MjM4NzM4OTIxOTg4ODg0NDIxMTE3NzMxNTYyIC0+IDkxMTczMTA2MDU3OTI5MS43NjYxMjY3MzU4ODcyOTE3MzgwICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczNyBwb3dlciAyMS4zNzQ3NzIyMDE0NDgzMjE3MjE3NTQ2MDQyNTE0MzY5MiAgLTc2Ljk1OTQ5OTMzNjQwNTM5MjI2NDc1Njg2OTk3NDc3ODg5IC0+IDQuNDgxNzQxMjQyNDE4MDkxOTE0MDExOTYyMzk5OTEyODg1RS0xMDMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczOCBwb3dlciAwLjAwMDAwMDAwMDAxODY2NTc3OTgyMDE2MzYzNDIxNTA5MDMgLTIwLjE4Mjk2MjQwMzUwNjc4MjQ1NTY3MDQ5MTYxNzMwOTA5IC0+IDMuNDgzOTU0MDA3MTE0OTAwNDA2OTA2MzM4NTI2NTc1NjcyRSsyMTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzczOSBwb3dlciAwLjAwMDY1MjI0NjQ3OTI5NjAxOTE5ODU5OTY5NTkxMjY3OTIgLTgwLjAzNzYyNDkxNDgzNTE0Njc5ODg2NTA0MDk5MTk0NDE0IC0+IDkuMjY2NTQ4NTEzNjE0MjE1NTU3MjI4NDY3NTE3MDUzMDM1RSsyNTQgSW5leGFjdCBSb3VuZGVkCitwb3d4Mzc0MCBwb3dlciAwLjAwMDAwMDAwMzI4NTEzNDM2OTQyMDA1Njg5NjYxNjgwNTUgLTIxLjUzNDYyMTE2OTI2Mzc1NTEyMjQyNDAzMTYwMDA4MDI2IC0+IDQuODczMjAxNjc5NjY4NDU1MjQwODYxMzc2MjEzNjAxMTg5RSsxODIgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9MTYsIHdpdGhpbiAwLTk5IC0tIG5lZ2F0aXZlIGFyZzIKK1ByZWNpc2lvbjogMTYKK3Bvd3gzNjAxIHBvd2VyIDAuMDAwMDE1MTMzODc0ODQ3NCAtNDAuODQ2NTU2MTgzNjQ2ODggLT4gNy42Mjg0NzA4MjQxMzc3NTVFKzE5NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjAyIHBvd2VyIDAuMTU0Mjc3MTg0ODY1NDg2MiAtNDM1Ljg4MzAwMDk0NjY4MDAgLT4gNi4zODk4MTcxNzc4MDA3NDRFKzM1MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjAzIHBvd2VyIDQ4LjI4NDc3NzQ5MzY3MzY0ICAtMjE4LjU5MjkyMDk5MDIwNTAgLT4gOC41MzEwNDk1MzI1NzYxNTRFLTM2OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjA0IHBvd2VyIDcuOTYwNzc1ODkxNTg0OTExICAtMTIuNzgxMTM3MzIxODI1MDUgLT4gMy4wNTMyNzA4ODk3Njk0ODhFLTEyICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjA1IHBvd2VyIDAuOTQzMDM0MDY1MTg2MzA1OCAtOTAxMC40NzAwNTY5MTM3NDggLT4gMy4zMTMzNzQ2NTQ5MjM4MDdFKzIyOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjA2IHBvd2VyIDAuMDAwMDIwMjY2MTUwMTYwMiAtNjUuNTc5MTUyMDczODMzMDYgLT4gNS45OTczNzkxNzY1MzY0NjRFKzMwNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjA3IHBvd2VyIDA0LjMzMDA3NDQwNzk4MzkwICAtMjMyLjA0NzY4MzQ2NjY1ODggLT4gMi4wMDc4MjcxODMwMTA0NTZFLTE0OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjA4IHBvd2VyIDAuMDAwMDE0MTk0NDY0MzkxNCAtMTEuMzI0MDc5MjE5NTg3MTcgLT4gNy45MDI5MzQ0ODUwNzQ4NDZFKzU0ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjA5IHBvd2VyIDAuMDAwMDAyMTk3Nzc1ODI2MSAtNTMuNTM3MDYxMzgyNTMzMDcgLT4gOC4xOTU2MzE3NzIzMTc4MTVFKzMwMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjEwIHBvd2VyIDM5LjUxMjk3NjU1NDc0MTg4ICAtMTkuNDAzNzA5NzYwMTIzMjYgLT4gMS4wNDA2OTk2MDgwNzI2NTlFLTMxICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjExIHBvd2VyIDM4LjcxMjEwMjMyNDg4Nzc1ICAtNjYuNTgzNDE2MTgyMjc5MjEgLT4gMS44ODY4NTUwNjYxNDY0OTVFLTEwNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjEyIHBvd2VyIDAuMDAwMDgwNDIzNTIyOTA2MiAtNi43MTUyMDc5NDg5OTI4NTkgLT4gMy4xMzQ3NTc4NjQzODkzMzNFKzI3ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjEzIHBvd2VyIDAuMDAwMDA3MzU0NzA5MjM5OSAtMTEuMjc3MjU2ODU3MTk5MzQgLT4gNy43ODE0MjgzOTA5NTM2OTVFKzU3ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjE0IHBvd2VyIDUyLjcyMTgxMjcyNTk5MzE2ICAtMTg2LjE0MjIzMTE2MDc0MzUgLT4gMi45MTY2MDE5OTg3NDQxNzdFLTMyMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjE1IHBvd2VyIDAuMDk2OTUxOTk2MzA4MzMwNiAtMjgwLjgyMjA4NjIxNTEzNjkgLT4gMy45NTU5MDY4ODU5NzA5ODdFKzI4NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjE2IHBvd2VyIDk0LjA3MjYzMzAyMTUwMDgxICAtMTQ4LjIwMzExNDYwNzEyMzAgLT4gMy4zNjE5NTg5OTA3NTI0OTBFLTI5MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjE3IHBvd2VyIDg1LjgwMjg2OTY1MDUzNzA0ICAtOTAuMjE0NTM2OTU4MTM3NTkgLT4gMy43MTU2MDI0Mjk2NDU3OThFLTE3NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjE4IHBvd2VyIDAzLjUyNjk5ODU4MTUyMjU5ICAtNDkyLjA0MTQzNjI1MzkxOTYgLT4gNC41MDczMDkyMjAwODEwOTJFLTI3MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjE5IHBvd2VyIDAuMDUwODI3ODA4NjM5NjA2OCAtMTgxLjA4NzE3MzE1NzIxNjcgLT4gMi4wMzQ0MjgwMTMwMTc5NDlFKzIzNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjIwIHBvd2VyIDAuMzk1NTc2NzQwMzAzMTcyICAtOTE1LjU1MjQ1MDc0MzIzOTIgLT4gNS43MDY1ODUxODc0Mzc1NzhFKzM2OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjIxIHBvd2VyIDM4LjA2MTA1ODI2Nzg5MjAyICAtNDkuNzU5MTM3NTM0MzUzMzUgLT4gMi4yNzMxODg5OTE0MzE3MzhFLTc5ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjIyIHBvd2VyIDAuMDAwMzY1Njc0ODkxMDY0NiAtNzMuMjg5ODg0OTEzMTAzNTQgLT4gNy43Njg5MzY5NDA1Njg3NjNFKzI1MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjIzIHBvd2VyIDAuMDAwMDAwNjM3MzU1MTgwOSAtNTEuMzA4MjUyMzQyMDA2OTAgLT4gNy42OTc2MTgxNjc3MDE5ODVFKzMxNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjI0IHBvd2VyIDgyLjQxNzI5OTIwNjczODU2ICAtMzUuNzMzMTk2MzE2MjU2OTkgLT4gMy40MjQwNDIzNTQ1ODU1MjlFLTY5ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjI1IHBvd2VyIDAuNzg0NTgyMTQ1MzEyNzY3MCAtOTcxLjQ5ODIwMjg4OTc2NjMgLT4gMi4yODM0MTU1Mjc2NjEwODlFKzEwMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjI2IHBvd2VyIDQuODQwOTgzNjczNDMzNDk3ICAtMTgyLjM3MzA0NTIzNzA1MTUgLT4gMS4yMjA1OTE0MDc5Mjc3NzBFLTEyNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjI3IHBvd2VyIDAuMDAwMDAwNjEzNzU5MjEzOSAtMi4xMjIxMzk0NzQ0MzE0ODQgLT4gMTUyMzEyMTcwMzQ4MzkuMjkgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjI4IHBvd2VyIDAuMDAwMzY1Nzk2Mjg2Mjk4NCAtMzUuOTc5OTM3ODI0NDgwOTkgLT4gNC41MTI3MDEzMTkyNTA4MzlFKzEyMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjI5IHBvd2VyIDQwLjkzNjkzMDA0NDQzMTUwICAtMTY1LjEzNjI0MDg3OTI5OTcgLT4gNi4wNDQyNzY0MTEwNTcyMzlFLTI2NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjMwIHBvd2VyIDAuMjk0MTU1MjU4MzAyODg5OCAtMTcuNDEwNDYyNjQ5NDU4OTIgLT4gMTc4NzgzMzEwMy41MDMzNDYgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjMxIHBvd2VyIDYzLjk5MzM1MTM1MzY5OTc3ICAtNjkuOTI0MTcyMDUxNjg1NzkgLT4gNS4wOTkzNTk4MDQ4NzI1MDlFLTEyNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjMyIHBvd2VyIDAuMDAwMDY1NzkyNDQ2NzM4OCAtODkuMTQ0OTcyOTM1ODgzMTMgLT4gNi4xNDU4NzgyNjY2ODg1MjFFKzM3MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjMzIHBvd2VyIDExLjM1MDcxMjUwMzM5MTQ3ICAtMzIzLjM3MDU4NjU2MTQ1NDIgLT4gNi44NjM2MjYyNDg3NjY3NzVFLTM0MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjM0IHBvd2VyIDIzLjg4MDI0NzE4NDcwODk1ICAtMjc3LjcxMTc1MTMzMjk1MTAgLT4gMi4wMDY0NDE0MjI2MTI4MTVFLTM4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjM1IHBvd2VyIDAuMDAwMDAwOTExMTkzOTkxNCAtNTguNTE3ODI5NDY5MjkxODIgLT4gMi45NTQzNTI4ODM5OTY3NzNFKzM1MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjM2IHBvd2VyIDAuMDAwMDg3ODE3OTA0ODc4MiAtNzUuODEwNjA0MjAyMzg2NjkgLT4gMy4zMDY4Nzg0NTUyMDc1ODVFKzMwNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjM3IHBvd2VyIDA3LjM5MTkwNTY0MjczNzc5ICAtMjg3LjUwNDczMDcyNDQ2MzYgLT4gMS42OTIwODAzNTQ2NTk4MDVFLTI1MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjM4IHBvd2VyIDAuMDAwMDI5ODMxMDgxOTc5OSAtMS44NDQ3NDAzNzc3NTkzNTUgLT4gMjIyODc0NzE4LjcyMzg4ODggICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjM5IHBvd2VyIDAuMDAwMDAwNjQxMjkyOTM4NCAtMjguMjQ4NTAwNzgyMjkyOTAgLT4gOC43MzcxNjQyMzA2NjY1MjlFKzE3NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjQwIHBvd2VyIDAuMDAwMDAxMDIwMjk2NTk5OCAtNDcuMTc1NzM3MDE5NTY0OTggLT4gNC4zOTI4NDUzMDYwNDkzNDFFKzI4MiBJbmV4YWN0IFJvdW5kZWQKKworLS0gUD03LCB3aXRoaW4gMC05IC0tIG5lZ2F0aXZlIGFyZzIKK1ByZWNpc2lvbjogNworcG93eDM1MDEgcG93ZXIgMC4zMjYzMjQgIC03MS45NjUwOSAgLT4gMS4wMDA2NzNFKzM1ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTAyIHBvd2VyIDAuMDAxNzYzNSAtMC43MTg2OTY3IC0+IDk1LjI4NDE5ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUwMyBwb3dlciA4LjU2NDE1NSAgLTI1My4wODk5ICAtPiA4Ljg1MDUxMkUtMjM3IEluZXhhY3QgUm91bmRlZAorcG93eDM1MDQgcG93ZXIgOC45ODcyNzIgIC0yLjE1NTc4OSAgLT4gMC4wMDg3OTM4NTkgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTA1IHBvd2VyIDkuNjA0ODU2ICAtMTM5Ljk2MzAgIC0+IDMuMDczNDkyRS0xMzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzUwNiBwb3dlciAwLjg0NzI5MTkgLTI1MzkuMDg1ICAtPiA1LjM3MjY4NkUrMTgyIEluZXhhY3QgUm91bmRlZAorcG93eDM1MDcgcG93ZXIgNS4zMTIzMjkgIC02MC4zMjk2NSAgLT4gMS43NTMxMjFFLTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTA4IHBvd2VyIDAuMDMzODI5NCAtMTAwLjU0NDAgIC0+IDcuNDIzOTM5RSsxNDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUwOSBwb3dlciAwLjAwMTc3NzcgLTEzMC44NTgzICAtPiA3LjU2NTYyOUUrMzU5IEluZXhhY3QgUm91bmRlZAorcG93eDM1MTAgcG93ZXIgOC4wMTYxNTQgIC00MDUuNTY4OSAgLT4gMi4zOTU5NzdFLTM2NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTExIHBvd2VyIDUuMDE2NTcwICAtMzI3Ljg5MDYgIC0+IDIuMjAzNzg0RS0yMzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUxMiBwb3dlciAwLjgxNjE3NDMgLTc0NC41Mjc2ICAtPiA0Ljc4Njg5OUUrNjUgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MTMgcG93ZXIgMC4wNjY2MzQzIC0xNjQuNzMyMCAgLT4gNS45NTEyNDBFKzE5MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTE0IHBvd2VyIDAuMDgwMzk2NiAtMjAyLjI2NjYgIC0+IDIuNzE1NTEyRSsyMjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUxNSBwb3dlciAwLjAwMTQ3NTIgLTEyLjU1NTQ3ICAtPiAzLjUxODkwNUUrMzUgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MTYgcG93ZXIgOS43Mzc1NjUgIC0xNC42OTYxNSAgLT4gMi45NzU2NzJFLTE1ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTE3IHBvd2VyIDAuNjYzNDE3MiAtMTUyLjczMDggIC0+IDEuNjU0NDU4RSsyNyAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUxOCBwb3dlciAwLjAwMDkzMzcgLTMzLjMyOTM5ICAtPiA5LjU3NTAzOUUrMTAwIEluZXhhY3QgUm91bmRlZAorcG93eDM1MTkgcG93ZXIgOC42Nzk5MjIgIC0yMjQuNDE5NCAgLT4gMi4zOTI0NDZFLTIxMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTIwIHBvd2VyIDcuMzkwNDk0ICAtMTYxLjk0ODMgIC0+IDIuMDg4Mzc1RS0xNDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUyMSBwb3dlciAwLjQ2MzE0ODkgLTQxNy4xNjczICAtPiAyLjgyMTEwNkUrMTM5IEluZXhhY3QgUm91bmRlZAorcG93eDM1MjIgcG93ZXIgMC4wMDk1NDcxIC03LjY3NzQ1OCAgLT4gMy4yMzE4NTVFKzE1ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTIzIHBvd2VyIDYuNTY2MzM5ICAtMTc2LjE4NjcgIC0+IDkuOTY1NjMzRS0xNDUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUyNCBwb3dlciAyLjY5NjEyOCAgLTI2LjE1NTAxICAtPiA1LjQxOTczMUUtMTIgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MjUgcG93ZXIgMC40NDY0MzY2IC04NTIuMTg5MyAgLT4gMi45NTc3MjVFKzI5OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTI2IHBvd2VyIDAuNDc3MjAwNiAtOTIxLjQxMTEgIC0+IDEuMTE4MTA1RSsyOTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUyNyBwb3dlciA4LjkyMzY5NiAgLTM1OS4yMjExICAtPiAzLjUwMTU3M0UtMzQyIEluZXhhY3QgUm91bmRlZAorcG93eDM1MjggcG93ZXIgMC4wMDE4MDA4IC02Ni45MTI1MiAgLT4gNC40MDI3MThFKzE4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTI5IHBvd2VyIDAuMDgxMTk2NCAtOTIuODMyNzggIC0+IDEuNzAxMTExRSsxMDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUzMCBwb3dlciAwLjA3MTEyMTkgLTU4Ljk0MzQ3ICAtPiA0LjY0NDE0OEUrNjcgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MzEgcG93ZXIgNy45NTgxMjEgIC01MC42NjEyMyAgLT4gMi4zMTExNjFFLTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTMyIHBvd2VyIDYuMTA2NDY2ICAtODEuODM2MTAgIC0+IDQuOTQzMjg1RS02NSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUzMyBwb3dlciA0LjU1NzYzNCAgLTEyOS41MjY4ICAtPiA0LjczNzkxN0UtODYgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MzQgcG93ZXIgMC4wMDI3MzQ4IC05LjE4MDEzNSAgLT4gMy4zODM1MjRFKzIzICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTM1IHBvd2VyIDAuMDA4MzkyNCAtNDYuMjQwMTYgIC0+IDkuOTk2MjEyRSs5NSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUzNiBwb3dlciAyLjEzODUyMyAgLTQ3LjI1ODk3ICAtPiAyLjUwNzAwOUUtMTYgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MzcgcG93ZXIgMS42MjY3MjggIC0xNTczLjgzMCAgLT4gMi42NjgxMTdFLTMzMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTM4IHBvd2VyIDAuMDgyNjE1ICAtMTY0LjU4NDIgIC0+IDEuNzE3ODgyRSsxNzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzUzOSBwb3dlciA3LjYzNjAwMyAgLTM2My42NzYzICAtPiA4LjM2NjE3NEUtMzIyIEluZXhhY3QgUm91bmRlZAorcG93eDM1NDAgcG93ZXIgMC4wMDIxNDgxIC0xMzguMDA2NSAgLT4gMS41NjI1MDVFKzM2OCBJbmV4YWN0IFJvdW5kZWQKKworCistLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucworLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10KK3ByZWNpc2lvbjogMTAwMDAwMDAwCitwb3d4NDAwMSAgcG93ZXIgMSAxLjEgLT4gIE5hTiAgICAgICAgIEludmFsaWRfY29udGV4dAorcHJlY2lzaW9uOiAgOTk5OTk5OTkKK3Bvd3g0MDAyICBwb3dlciAxIDEuMSAtPiAgTmFOICAgICAgICAgSW52YWxpZF9jb250ZXh0CisKK3ByZWNpc2lvbjogOQorbWF4RXhwb25lbnQ6ICAgMTAwMDAwMAorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorcG93eDQwMDMgIHBvd2VyIDEgMS4xICAtPiAgTmFOICAgICAgICBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK3Bvd3g0MDA0ICBwb3dlciAxIDEuMSAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogIC0xMDAwMDAwCitwb3d4NDAwNSAgcG93ZXIgMSAxLjEgIC0+ICBOYU4gICAgICAgIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OAorcG93eDQwMDYgIHBvd2VyIDEgMS4xICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3BlcmFuZCByYW5nZSB2aW9sYXRpb25zCitwb3d4NDAwNyAgcG93ZXIgMSAgICAgICAgICAgICAxLjFFKzk5OTk5OSAgLT4gIDEKK3Bvd3g0MDA4ICBwb3dlciAxICAgICAgICAgICAgIDEuMUUrMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NDAwOSAgcG93ZXIgMS4xRSs5OTk5OTkgICAxLjEgICAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDQwMTAgIHBvd2VyIDEuMUUrMTAwMDAwMCAgMS4xICAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g0MDExICBwb3dlciAxICAgICAgICAgICAgIDEuMUUtMTk5OTk5NyAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MDEyICBwb3dlciAxICAgICAgICAgICAgIDEuMUUtMTk5OTk5OCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NDAxMyAgcG93ZXIgMS4xRS0xOTk5OTk3ICAxLjEgICAgICAgICAgLT4gIDBFLTEwMDAwMDYgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorcG93eDQwMTQgIHBvd2VyIDEuMUUtMTk5OTk5OCAgMS4xICAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gcm91bmRpbmcgbW9kZXMgLS0gcG93ZXIgaXMgc2Vuc2l0aXZlCitwcmVjaXNpb246ICAgNworbWF4RXhwb25lbnQ6IDk5CittaW5FeHBvbmVudDogLTk5CisKKy0tICAgMC43ICAqKiAzLjMgPT4gICAwLjMwODE5MzU0MDUzNDE4OTQzODIyCistLSAgIDAuNyAgKiogMy40ID0+ICAgMC4yOTczOTQ3NzYzODI3MjUzMzg1NAorLS0gIC0xLjIgICoqIDE3ICA9PiAtMjIuMTg2MTExMDY3NDA0MzY5OTIKKy0tICAtMS4zICAqKiAxNyAgPT4gLTg2LjUwNDE1OTE5MzgxMzM3OTMzCistLSAgIDAuNSAgKiogMTEgID0+ICAgMC4wMDA0ODgyODEyNQorLS0gICAzLjE1ICoqIDMgICA9PiAgMzEuMjU1ODc1CisKK3JvdW5kaW5nOiB1cAorcG93eDQxMDAgIHBvd2VyICAgICAgMC43ICAzLjMgLT4gIDAuMzA4MTkzNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTAxICBwb3dlciAgICAgIDAuNyAgMy40IC0+ICAwLjI5NzM5NDggSW5leGFjdCBSb3VuZGVkCitwb3d4NDEwMiAgcG93ZXIgICAgIC0xLjIgIDE3ICAtPiAtMjIuMTg2MTIgIEluZXhhY3QgUm91bmRlZAorcG93eDQxMDMgIHBvd2VyICAgICAtMS4zICAxNyAgLT4gLTg2LjUwNDE2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTA0ICBwb3dlciAgMTcgODEuMjcxMTUgIC0+IDkuOTk5OTc0RSs5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTA1ICBwb3dlciAgMTcgODEuMjcxMTYgIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK3Bvd3g0MTIwICBwb3dlciAgICAgIDAuNyAgMy4zIC0+ICAwLjMwODE5MzUgSW5leGFjdCBSb3VuZGVkCitwb3d4NDEyMSAgcG93ZXIgICAgICAwLjcgIDMuNCAtPiAgMC4yOTczOTQ3IEluZXhhY3QgUm91bmRlZAorcG93eDQxMjIgIHBvd2VyICAgICAtMS4yICAxNyAgLT4gLTIyLjE4NjExICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTIzICBwb3dlciAgICAgLTEuMyAgMTcgIC0+IC04Ni41MDQxNSAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDEyNCAgcG93ZXIgIDE3IDgxLjI3MTE1ICAtPiA5Ljk5OTk3M0UrOTkgSW5leGFjdCBSb3VuZGVkCitwb3d4NDEyNSAgcG93ZXIgIDE3IDgxLjI3MTE2ICAtPiA5Ljk5OTk5OUUrOTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBmbG9vcgorcG93eDQxNDAgIHBvd2VyICAgICAgMC43ICAzLjMgLT4gIDAuMzA4MTkzNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTQxICBwb3dlciAgICAgIDAuNyAgMy40IC0+ICAwLjI5NzM5NDcgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE0MiAgcG93ZXIgICAgIC0xLjIgIDE3ICAtPiAtMjIuMTg2MTIgIEluZXhhY3QgUm91bmRlZAorcG93eDQxNDMgIHBvd2VyICAgICAtMS4zICAxNyAgLT4gLTg2LjUwNDE2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTQ0ICBwb3dlciAgMTcgODEuMjcxMTUgIC0+IDkuOTk5OTczRSs5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTQ1ICBwb3dlciAgMTcgODEuMjcxMTYgIC0+IDkuOTk5OTk5RSs5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKK3Bvd3g0MTYwICBwb3dlciAgICAgIDAuNyAgMy4zIC0+ICAwLjMwODE5MzYgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE2MSAgcG93ZXIgICAgICAwLjcgIDMuNCAtPiAgMC4yOTczOTQ4IEluZXhhY3QgUm91bmRlZAorcG93eDQxNjIgIHBvd2VyICAgICAtMS4yICAxNyAgLT4gLTIyLjE4NjExICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTYzICBwb3dlciAgICAgLTEuMyAgMTcgIC0+IC04Ni41MDQxNSAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE2NCAgcG93ZXIgIDE3IDgxLjI3MTE1ICAtPiA5Ljk5OTk3NEUrOTkgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE2NSAgcG93ZXIgIDE3IDgxLjI3MTE2ICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitwb3d4NDE4MCAgcG93ZXIgICAgICAwLjcgIDMuMyAtPiAgMC4zMDgxOTM1IEluZXhhY3QgUm91bmRlZAorcG93eDQxODEgIHBvd2VyICAgICAgMC43ICAzLjQgLT4gIDAuMjk3Mzk0OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTgyICBwb3dlciAgICAgLTEuMiAgMTcgIC0+IC0yMi4xODYxMSAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE4MyAgcG93ZXIgICAgIC0xLjMgIDE3ICAtPiAtODYuNTA0MTYgIEluZXhhY3QgUm91bmRlZAorcG93eDQxODQgIHBvd2VyICAgICAgMC41ICAxMSAgLT4gIDAuMDAwNDg4MjgxMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTg1ICBwb3dlciAgICAgIDMuMTUgIDMgIC0+ICAzMS4yNTU4OCAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE4NiAgcG93ZXIgIDE3IDgxLjI3MTE1ICAtPiA5Ljk5OTk3NEUrOTkgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE4NyAgcG93ZXIgIDE3IDgxLjI3MTE2ICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK3Bvd3g0MjAwICBwb3dlciAgICAgIDAuNyAgMy4zIC0+ICAwLjMwODE5MzUgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIwMSAgcG93ZXIgICAgICAwLjcgIDMuNCAtPiAgMC4yOTczOTQ4IEluZXhhY3QgUm91bmRlZAorcG93eDQyMDIgIHBvd2VyICAgICAtMS4yICAxNyAgLT4gLTIyLjE4NjExICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjAzICBwb3dlciAgICAgLTEuMyAgMTcgIC0+IC04Ni41MDQxNiAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIwNCAgcG93ZXIgICAgICAwLjUgIDExICAtPiAgMC4wMDA0ODgyODEyIEluZXhhY3QgUm91bmRlZAorcG93eDQyMDUgIHBvd2VyICAgICAgMy4xNSAgMyAgLT4gIDMxLjI1NTg4ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjA2ICBwb3dlciAgMTcgODEuMjcxMTUgIC0+IDkuOTk5OTc0RSs5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjA3ICBwb3dlciAgMTcgODEuMjcxMTYgIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorcG93eDQyMjAgIHBvd2VyICAgICAgMC43ICAzLjMgLT4gIDAuMzA4MTkzNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjIxICBwb3dlciAgICAgIDAuNyAgMy40IC0+ICAwLjI5NzM5NDggSW5leGFjdCBSb3VuZGVkCitwb3d4NDIyMiAgcG93ZXIgICAgIC0xLjIgIDE3ICAtPiAtMjIuMTg2MTEgIEluZXhhY3QgUm91bmRlZAorcG93eDQyMjMgIHBvd2VyICAgICAtMS4zICAxNyAgLT4gLTg2LjUwNDE2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjI0ICBwb3dlciAgICAgIDAuNSAgMTEgIC0+ICAwLjAwMDQ4ODI4MTIgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIyNSAgcG93ZXIgICAgICAzLjE1ICAzICAtPiAgMzEuMjU1ODcgIEluZXhhY3QgUm91bmRlZAorcG93eDQyMjYgIHBvd2VyICAgICAtMy4xNSAgMyAgLT4gLTMxLjI1NTg3ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjI3ICBwb3dlciAgMTcgODEuMjcxMTUgIC0+IDkuOTk5OTc0RSs5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjI4ICBwb3dlciAgMTcgODEuMjcxMTYgIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworCistLSBtb3JlIHJvdW5kaW5nIHRlc3RzIGFzIHBlciBJbGFuIE5laGFtYSdzIHN1Z2dlc3Rpb25zICYgYW5hbHlzaXMKKy0tIHRoZXNlIGFyZSBsaWtlbHkgdG8gc2hvdyA+IDAuNSB1bHAgZXJyb3IgZm9yIHZlcnkgc21hbGwgcG93ZXJzCitwcmVjaXNpb246ICAgNworbWF4RXhwb25lbnQ6IDk2CittaW5FeHBvbmVudDogLTk1CisKKy0tIEZvciB4PW5leHRmcCgxKT0xLjAwLi4wMDEgKHdoZXJlIHRoZSBudW1iZXIgb2YgMHMgaXMgcHJlY2lzaW9uLTIpCistLSAgIHBvd2VyKHgseSk9eCB3aGVuIHRoZSByb3VuZGluZyBpcyB1cCAoZS5nLiwgdG93YXJkX3Bvc19pbmYgb3IKKy0tICAgY2VpbCkgZm9yIGFueSB5IGluICgwLDFdLgorcm91bmRpbmc6IGNlaWxpbmcKK3Bvd3g0MzAxICBwb3dlciAgMS4wMDAwMDEgMCAgICAgICAgICAtPiAxCistLSBUaGUgbmV4dCB0ZXN0IHNob3VsZCBiZSBza2lwcGVkIGZvciBkZWNOdW1iZXIKK3Bvd3g0MzAyICBwb3dlciAgMS4wMDAwMDEgMWUtMTAxICAgICAtPiAxLjAwMDAwMSAgIEluZXhhY3QgUm91bmRlZAorLS0gVGhlIG5leHQgdGVzdCBzaG91bGQgYmUgc2tpcHBlZCBmb3IgZGVjTnVtYmVyCitwb3d4NDMwMyAgcG93ZXIgIDEuMDAwMDAxIDFlLTk1ICAgICAgLT4gMS4wMDAwMDEgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzA0ICBwb3dlciAgMS4wMDAwMDEgMWUtMTAgICAgICAtPiAxLjAwMDAwMSAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzMDUgIHBvd2VyICAxLjAwMDAwMSAwLjEgICAgICAgIC0+IDEuMDAwMDAxICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDMwNiAgcG93ZXIgIDEuMDAwMDAxIDAuMTIzNDU2NyAgLT4gMS4wMDAwMDEgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzA3ICBwb3dlciAgMS4wMDAwMDEgMC43ICAgICAgICAtPiAxLjAwMDAwMSAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzMDggIHBvd2VyICAxLjAwMDAwMSAwLjk5OTk5OTkgIC0+IDEuMDAwMDAxICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDMwOSAgcG93ZXIgIDEuMDAwMDAxIDEuMDAwMDAwICAgLT4gMS4wMDAwMDEKKy0tICAgcG93ZXIoeCx5KT0xIHdoZW4gdGhlIHJvdW5kaW5nIGlzIGRvd24gKGUuZy4gdG93YXJkX3plcm8gb3IKKy0tICAgZmxvb3IpIGZvciBhbnkgeSBpbiBbMCwxKS4KK3JvdW5kaW5nOiBmbG9vcgorcG93eDQzMjEgIHBvd2VyICAxLjAwMDAwMSAwICAgICAgICAgIC0+IDEKK3Bvd3g0MzIyICBwb3dlciAgMS4wMDAwMDEgMWUtMTAxICAgICAtPiAxLjAwMDAwMCAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzMjMgIHBvd2VyICAxLjAwMDAwMSAxZS05NSAgICAgIC0+IDEuMDAwMDAwICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDMyNCAgcG93ZXIgIDEuMDAwMDAxIDFlLTEwICAgICAgLT4gMS4wMDAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzI1ICBwb3dlciAgMS4wMDAwMDEgMC4xICAgICAgICAtPiAxLjAwMDAwMCAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzMjYgIHBvd2VyICAxLjAwMDAwMSAwLjEyMzQ1NjcgIC0+IDEuMDAwMDAwICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDMyNyAgcG93ZXIgIDEuMDAwMDAxIDAuNyAgICAgICAgLT4gMS4wMDAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzI4ICBwb3dlciAgMS4wMDAwMDEgMC45OTk5OTk5ICAtPiAxLjAwMDAwMCAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzMjkgIHBvd2VyICAxLjAwMDAwMSAxLjAwMDAwMCAgIC0+IDEuMDAwMDAxCisKKy0tIEZvciB4PXByZXZmcCgxKT0wLjk5Li45OSAod2hlcmUgdGhlIG51bWJlciBvZiA5cyBpcyBwcmVjaXNpb24pCistLSAgIHBvd2VyKHgseSk9eCB3aGVuIHRoZSByb3VuZGluZyBpcyBkb3duIGZvciBhbnkgeSBpbiAoMCwxXS4KK3JvdW5kaW5nOiBmbG9vcgorcG93eDQzNDEgIHBvd2VyICAwLjk5OTk5OTkgMCAgICAgICAgICAtPiAxCistLSBUaGUgbmV4dCB0ZXN0IHNob3VsZCBiZSBza2lwcGVkIGZvciBkZWNOdW1iZXIKK3Bvd3g0MzQyICBwb3dlciAgMC45OTk5OTk5IDFlLTEwMSAgICAgLT4gMC45OTk5OTk5ICAgSW5leGFjdCBSb3VuZGVkCistLSBUaGUgbmV4dCB0ZXN0IHNob3VsZCBiZSBza2lwcGVkIGZvciBkZWNOdW1iZXIKK3Bvd3g0MzQzICBwb3dlciAgMC45OTk5OTk5IDFlLTk1ICAgICAgLT4gMC45OTk5OTk5ICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM0NCAgcG93ZXIgIDAuOTk5OTk5OSAxZS0xMCAgICAgIC0+IDAuOTk5OTk5OSAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzNDUgIHBvd2VyICAwLjk5OTk5OTkgMC4xICAgICAgICAtPiAwLjk5OTk5OTkgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzQ2ICBwb3dlciAgMC45OTk5OTk5IDAuMTIzNDU2NyAgLT4gMC45OTk5OTk5ICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM0NyAgcG93ZXIgIDAuOTk5OTk5OSAwLjcgICAgICAgIC0+IDAuOTk5OTk5OSAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzNDggIHBvd2VyICAwLjk5OTk5OTkgMC45OTk5OTk5ICAtPiAwLjk5OTk5OTkgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzQ5ICBwb3dlciAgMC45OTk5OTk5IDEuMDAwMDAwICAgLT4gMC45OTk5OTk5CistLSAgIHBvd2VyKHgseSk9MSB3aGVuIHRoZSByb3VuZGluZyBpcyB1cCBmb3IgYW55IHkgaW4gKDAsMV0uCityb3VuZGluZzogY2VpbGluZworcG93eDQzNjEgIHBvd2VyICAwLjk5OTk5OTkgMCAgICAgICAgICAtPiAxCitwb3d4NDM2MiAgcG93ZXIgIDAuOTk5OTk5OSAxZS0xMDEgICAgIC0+IDEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzNjMgIHBvd2VyICAwLjk5OTk5OTkgMWUtOTUgICAgICAtPiAxLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzY0ICBwb3dlciAgMC45OTk5OTk5IDFlLTEwICAgICAgLT4gMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM2NSAgcG93ZXIgIDAuOTk5OTk5OSAwLjEgICAgICAgIC0+IDEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzNjYgIHBvd2VyICAwLjk5OTk5OTkgMC4xMjM0NTY3ICAtPiAxLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzY3ICBwb3dlciAgMC45OTk5OTk5IDAuNyAgICAgICAgLT4gMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM2OCAgcG93ZXIgIDAuOTk5OTk5OSAwLjk5OTk5OTkgIC0+IDEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzNjkgIHBvd2VyICAwLjk5OTk5OTkgMS4wMDAwMDAgICAtPiAwLjk5OTk5OTkKKworLS0gRm9yIHg9bmV4dGZwKDApCistLSAgIHBvd2VyKHgseSk9MCB3aGVuIHRoZSByb3VuZGluZyBpcyBkb3duIGZvciBhbnkgeSBsYXJnZXIgdGhhbiAxLgorcm91bmRpbmc6IGZsb29yCitwb3d4NDM4MiAgcG93ZXIgIDFlLTEwMSAgICAwICAgICAgICAgIC0+IDEKK3Bvd3g0MzgzICBwb3dlciAgMWUtMTAxICAgIDAuOTk5OTk5OSAgLT4gMUUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM4NCAgcG93ZXIgIDFlLTEwMSAgICAxLjAwMDAwMCAgIC0+IDFFLTEwMSBTdWJub3JtYWwKK3Bvd3g0Mzg1ICBwb3dlciAgMWUtMTAxICAgIDEuMDAwMDAxICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3g0Mzg2ICBwb3dlciAgMWUtMTAxICAgIDIuMDAwMDAwICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcG93ZXJzcXJ0LmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Bvd2Vyc3FydC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MGI5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Bvd2Vyc3FydC5kZWNUZXN0CkBAIC0wLDAgKzEsMjk3MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBwb3dlcnNxcnQuZGVjVGVzdCAtLSBkZWNpbWFsIHNxdWFyZSByb290LCB1c2luZyBwb3dlciAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA0LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgdGFrZW4gZnJvbSBzcXVhcmVyb290LmRlY1Rlc3QgYnV0IGFyZQorLS0gZXZhbHVhdGVkIHVzaW5nIHRoZSBwb3dlciBvcGVyYXRvci4gIFRoZSBkaWZmZXJlbmNlcyBpbiByZXN1bHRzCistLSAoMTUzIG91dCBvZiAyODU2KSBmYWxsIGludG8gdGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzOgorLS0KKy0tICAgIHggICAgKiogMC41ICh4PjApIGhhcyBubyBwcmVmZXJyZWQgZXhwb25lbnQsIGFuZCBpcyBJbmV4YWN0CistLSAgICAgICAgICAgICAgICAoYW5kIGhlbmNlIGZ1bGwgcHJlY2lzaW9uKTsgYWxtb3N0IGFsbCBkaWZmZXJlbmNlcyBhcmUKKy0tICAgICAgICAgICAgICAgIGluIHRoaXMgY2F0ZWdvcnkKKy0tICAgIDAuMDAgKiogMC41IGJlY29tZXMgMCAobm90IDAuMCksIGV0Yy4KKy0tICAgLTAgICAgKiogMC41IGJlY29tZXMgMCAobmV2ZXIgLTApCistLSAgICBTb21lIGV4YWN0IHN1Ym5vcm1hbHMgYmVjb21lIGluZXhhY3QgYW5kIGhlbmNlIHVuZGVyZmxvd3MKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBiYXNpY3MKK3B3c3gwMDEgIHBvd2VyIDEgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDAwMiAgcG93ZXIgLTEgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAwMyAgcG93ZXIgMS4wMCAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDA0ICBwb3dlciAtMS4wMCAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDA1ICBwb3dlciAwICAgICAgICAwLjUgLT4gMAorcHdzeDAwNiAgcG93ZXIgMDAuMCAgICAgMC41IC0+IDAKK3B3c3gwMDcgIHBvd2VyIDAuMDAgICAgIDAuNSAtPiAwCitwd3N4MDA4ICBwb3dlciAwMC4wMCAgICAwLjUgLT4gMAorcHdzeDAwOSAgcG93ZXIgMDAuMDAwICAgMC41IC0+IDAKK3B3c3gwMTAgIHBvd2VyIDAwLjAwMDAgIDAuNSAtPiAwCitwd3N4MDExICBwb3dlciAwMCAgICAgICAwLjUgLT4gMAorCitwd3N4MDEyICBwb3dlciAtMiAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDEzICBwb3dlciAyICAgICAgICAwLjUgLT4gMS40MTQyMTM1NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMTQgIHBvd2VyIC0yLjAwICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMTUgIHBvd2VyIDIuMDAgICAgIDAuNSAtPiAxLjQxNDIxMzU2IEluZXhhY3QgUm91bmRlZAorcHdzeDAxNiAgcG93ZXIgLTAgICAgICAgMC41IC0+IDAKK3B3c3gwMTcgIHBvd2VyIC0wLjAgICAgIDAuNSAtPiAwCitwd3N4MDE4ICBwb3dlciAtMDAuMDAgICAwLjUgLT4gMAorcHdzeDAxOSAgcG93ZXIgLTAwLjAwMCAgMC41IC0+IDAKK3B3c3gwMjAgIHBvd2VyIC0wLjAwMDAgIDAuNSAtPiAwCitwd3N4MDIxICBwb3dlciAtMEUrOSAgICAwLjUgLT4gMAorcHdzeDAyMiAgcG93ZXIgLTBFKzEwICAgMC41IC0+IDAKK3B3c3gwMjMgIHBvd2VyIC0wRSsxMSAgIDAuNSAtPiAwCitwd3N4MDI0ICBwb3dlciAtMEUrMTIgICAwLjUgLT4gMAorcHdzeDAyNSAgcG93ZXIgLTAwICAgICAgMC41IC0+IDAKK3B3c3gwMjYgIHBvd2VyIDBFKzUgICAgIDAuNSAtPiAwCitwd3N4MDI3ICBwb3dlciA0LjAgICAgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMjggIHBvd2VyIDQuMDAgICAgIDAuNSAtPiAyLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitwd3N4MDMwICBwb3dlciArMC4xICAgICAgICAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMzEgIHBvd2VyIC0wLjEgICAgICAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAzMiAgcG93ZXIgKzAuMDEgICAgICAgICAgICAwLjUgLT4gMC4xMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDMzICBwb3dlciAtMC4wMSAgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMzQgIHBvd2VyICswLjAwMSAgICAgICAgICAgMC41IC0+IDAuMDMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMzUgIHBvd2VyIC0wLjAwMSAgICAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAzNiAgcG93ZXIgKzAuMDAwMDAxICAgICAgICAwLjUgLT4gMC4wMDEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMzcgIHBvd2VyIC0wLjAwMDAwMSAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAzOCAgcG93ZXIgKzAuMDAwMDAwMDAwMDAxICAwLjUgLT4gMC4wMDAwMDEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMzkgIHBvd2VyIC0wLjAwMDAwMDAwMDAwMSAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitwd3N4MDQxICBwb3dlciAxLjEgICAgICAgICAwLjUgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNDIgIHBvd2VyIDEuMTAgICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZAorcHdzeDA0MyAgcG93ZXIgMS4xMDAgICAgICAgMC41IC0+IDEuMDQ4ODA4ODUgSW5leGFjdCBSb3VuZGVkCitwd3N4MDQ0ICBwb3dlciAxLjExMCAgICAgICAwLjUgLT4gMS4wNTM1NjUzOCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNDUgIHBvd2VyIC0xLjEgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNDYgIHBvd2VyIC0xLjEwICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNDcgIHBvd2VyIC0xLjEwMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNDggIHBvd2VyIC0xLjExMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNDkgIHBvd2VyIDkuOSAgICAgICAgIDAuNSAtPiAzLjE0NjQyNjU0IEluZXhhY3QgUm91bmRlZAorcHdzeDA1MCAgcG93ZXIgOS45MCAgICAgICAgMC41IC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkCitwd3N4MDUxICBwb3dlciA5LjkwMCAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNTIgIHBvd2VyIDkuOTkwICAgICAgIDAuNSAtPiAzLjE2MDY5NjEzIEluZXhhY3QgUm91bmRlZAorcHdzeDA1MyAgcG93ZXIgLTkuOSAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA1NCAgcG93ZXIgLTkuOTAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA1NSAgcG93ZXIgLTkuOTAwICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA1NiAgcG93ZXIgLTkuOTkwICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitwd3N4MDYwICBwb3dlciAgMSAgICAgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA2MSAgcG93ZXIgIDEuMCAgICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjIgIHBvd2VyICAxLjAwICAgICAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDYzICBwb3dlciAgMTAuMCAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorcHdzeDA2NCAgcG93ZXIgIDEwLjAgICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjUgIHBvd2VyICAxMC4wICAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDY2ICBwb3dlciAgMTAuMDAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorcHdzeDA2NyAgcG93ZXIgIDEwMCAgICAgICAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjggIHBvd2VyICAxMDAuMCAgICAgICAgMC41IC0+IDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDY5ICBwb3dlciAgMTAwLjAwICAgICAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA3MCAgcG93ZXIgIDEuMTAwMEUrMyAgICAwLjUgLT4gMzMuMTY2MjQ3OSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNzEgIHBvd2VyICAxLjEwMDAwRSszICAgMC41IC0+IDMzLjE2NjI0NzkgSW5leGFjdCBSb3VuZGVkCitwd3N4MDcyICBwb3dlciAtMTAuMCAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNzMgIHBvd2VyIC0xMC4wMCAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA3NCAgcG93ZXIgLTEwMC4wICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDc1ICBwb3dlciAtMTAwLjAwICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNzYgIHBvd2VyIC0xLjEwMDBFKzMgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA3NyAgcG93ZXIgLTEuMTAwMDBFKzMgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZhbW91cyBzcXVhcmVzCitwd3N4MDgwICBwb3dlciAgICAgMSAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4MSAgcG93ZXIgICAgIDQgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODIgIHBvd2VyICAgICA5ICAgMC41IC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDgzICBwb3dlciAgICAxNiAgIDAuNSAtPiA0LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4NCAgcG93ZXIgICAgMjUgICAwLjUgLT4gNS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODUgIHBvd2VyICAgIDM2ICAgMC41IC0+IDYuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDg2ICBwb3dlciAgICA0OSAgIDAuNSAtPiA3LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4NyAgcG93ZXIgICAgNjQgICAwLjUgLT4gOC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODggIHBvd2VyICAgIDgxICAgMC41IC0+IDkuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDg5ICBwb3dlciAgIDEwMCAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA5MCAgcG93ZXIgICAxMjEgICAwLjUgLT4gMTEuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwOTEgIHBvd2VyICAgMTQ0ICAgMC41IC0+IDEyLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDkyICBwb3dlciAgIDE2OSAgIDAuNSAtPiAxMy4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA5MyAgcG93ZXIgICAyNTYgICAwLjUgLT4gMTYuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwOTQgIHBvd2VyICAxMDI0ICAgMC41IC0+IDMyLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDk1ICBwb3dlciAgNDA5NiAgIDAuNSAtPiA2NC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwMCAgcG93ZXIgICAwLjAxICAwLjUgLT4gMC4xMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTAxICBwb3dlciAgIDAuMDQgIDAuNSAtPiAwLjIwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDIgIHBvd2VyICAgMC4wOSAgMC41IC0+IDAuMzAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwMyAgcG93ZXIgICAwLjE2ICAwLjUgLT4gMC40MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTA0ICBwb3dlciAgIDAuMjUgIDAuNSAtPiAwLjUwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDUgIHBvd2VyICAgMC4zNiAgMC41IC0+IDAuNjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwNiAgcG93ZXIgICAwLjQ5ICAwLjUgLT4gMC43MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTA3ICBwb3dlciAgIDAuNjQgIDAuNSAtPiAwLjgwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDggIHBvd2VyICAgMC44MSAgMC41IC0+IDAuOTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwOSAgcG93ZXIgICAxLjAwICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMTAgIHBvd2VyICAgMS4yMSAgMC41IC0+IDEuMTAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTExICBwb3dlciAgIDEuNDQgIDAuNSAtPiAxLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDExMiAgcG93ZXIgICAxLjY5ICAwLjUgLT4gMS4zMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMTMgIHBvd2VyICAgMi41NiAgMC41IC0+IDEuNjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTE0ICBwb3dlciAgMTAuMjQgIDAuNSAtPiAzLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDExNSAgcG93ZXIgIDQwLjk2ICAwLjUgLT4gNi40MDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gUHJlY2lzaW9uIDEgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgcGx1cyBleHBvbmVudCBhZGp1c3RzXQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogICAxCitwd3N4MTIwMSAgcG93ZXIgMC4xICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDMgIHBvd2VyIDEuMEUtMSAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwNCAgcG93ZXIgMS4wMEUtMiAgMC41IC0+IDAuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwNSAgcG93ZXIgMUUtMyAgMC41IC0+IDAuMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDYgIHBvd2VyIDFFKzEgIDAuNSAtPiAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjA3ICBwb3dlciAxRSsyICAwLjUgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjA4ICBwb3dlciAxRSszICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwOSAgcG93ZXIgMC4yICAwLjUgLT4gMC40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjEwICBwb3dlciAwLjAyICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjExICBwb3dlciAyLjBFLTEgIDAuNSAtPiAwLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTIgIHBvd2VyIDIuMDBFLTIgIDAuNSAtPiAwLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTMgIHBvd2VyIDJFLTMgIDAuNSAtPiAwLjA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE0ICBwb3dlciAyRSsxICAwLjUgLT4gNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxNSAgcG93ZXIgMkUrMiAgMC41IC0+IDFFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTYgIHBvd2VyIDJFKzMgIDAuNSAtPiA0RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTggIHBvd2VyIDAuMDMgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTkgIHBvd2VyIDMuMEUtMSAgMC41IC0+IDAuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyMSAgcG93ZXIgM0UtMyAgMC41IC0+IDAuMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjIgIHBvd2VyIDNFKzEgIDAuNSAtPiA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjIzICBwb3dlciAzRSsyICAwLjUgLT4gMkUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyNCAgcG93ZXIgM0UrMyAgMC41IC0+IDVFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjUgIHBvd2VyIDAuNCAgMC41IC0+IDAuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyNiAgcG93ZXIgMC4wNCAgMC41IC0+IDAuMiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjI3ICBwb3dlciA0LjBFLTEgIDAuNSAtPiAwLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjggIHBvd2VyIDQuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjMwICBwb3dlciA0RSsxICAwLjUgLT4gNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzMSAgcG93ZXIgNEUrMiAgMC41IC0+IDJFKzEgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzMiAgcG93ZXIgNEUrMyAgMC41IC0+IDZFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzMgIHBvd2VyIDAuNSAgMC41IC0+IDAuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzNCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzNSAgcG93ZXIgNS4wRS0xICAwLjUgLT4gMC43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjM2ICBwb3dlciA1LjAwRS0yICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjM3ICBwb3dlciA1RS0zICAwLjUgLT4gMC4wNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzOCAgcG93ZXIgNUUrMSAgMC41IC0+IDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzkgIHBvd2VyIDVFKzIgIDAuNSAtPiAyRSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQwICBwb3dlciA1RSszICAwLjUgLT4gN0UrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0MSAgcG93ZXIgMC42ICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQyICBwb3dlciAwLjA2ICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQzICBwb3dlciA2LjBFLTEgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDQgIHBvd2VyIDYuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDUgIHBvd2VyIDZFLTMgIDAuNSAtPiAwLjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ2ICBwb3dlciA2RSsxICAwLjUgLT4gOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDggIHBvd2VyIDZFKzMgIDAuNSAtPiA4RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ5ICBwb3dlciAwLjcgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTEgIHBvd2VyIDcuMEUtMSAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1MiAgcG93ZXIgNy4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTQgIHBvd2VyIDdFKzEgIDAuNSAtPiA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjU1ICBwb3dlciA3RSsyICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1NiAgcG93ZXIgN0UrMyAgMC41IC0+IDhFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTcgIHBvd2VyIDAuOCAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1OCAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1OSAgcG93ZXIgOC4wRS0xICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjYwICBwb3dlciA4LjAwRS0yICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjYxICBwb3dlciA4RS0zICAwLjUgLT4gMC4wOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2MiAgcG93ZXIgOEUrMSAgMC41IC0+IDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjMgIHBvd2VyIDhFKzIgIDAuNSAtPiAzRSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjY0ICBwb3dlciA4RSszICAwLjUgLT4gOUUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2NSAgcG93ZXIgMC45ICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjY2ICBwb3dlciAwLjA5ICAwLjUgLT4gMC4zIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjcgIHBvd2VyIDkuMEUtMSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2OSAgcG93ZXIgOUUtMyAgMC41IC0+IDAuMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNzAgIHBvd2VyIDlFKzEgIDAuNSAtPiA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjcxICBwb3dlciA5RSsyICAwLjUgLT4gM0UrMSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjcyICBwb3dlciA5RSszICAwLjUgLT4gOUUrMSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFByZWNpc2lvbiAyIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIHBsdXMgZXhwb25lbnQgYWRqdXN0c10KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246ICAgMgorcHdzeDIyMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDIgIHBvd2VyIDAuMDEgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDMgIHBvd2VyIDEuMEUtMSAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDQgIHBvd2VyIDEuMDBFLTIgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDUgIHBvd2VyIDFFLTMgIDAuNSAtPiAwLjAzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIwNiAgcG93ZXIgMUUrMSAgMC41IC0+IDMuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIwNyAgcG93ZXIgMUUrMiAgMC41IC0+IDEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDggIHBvd2VyIDFFKzMgIDAuNSAtPiAzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIwOSAgcG93ZXIgMC4yICAwLjUgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxMCAgcG93ZXIgMC4wMiAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTEgIHBvd2VyIDIuMEUtMSAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTIgIHBvd2VyIDIuMDBFLTIgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjEzICBwb3dlciAyRS0zICAwLjUgLT4gMC4wNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTQgIHBvd2VyIDJFKzEgIDAuNSAtPiA0LjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTUgIHBvd2VyIDJFKzIgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxNiAgcG93ZXIgMkUrMyAgMC41IC0+IDQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjE4ICBwb3dlciAwLjAzICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxOSAgcG93ZXIgMy4wRS0xICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjEgIHBvd2VyIDNFLTMgIDAuNSAtPiAwLjA1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIyMiAgcG93ZXIgM0UrMSAgMC41IC0+IDUuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIyMyAgcG93ZXIgM0UrMiAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI0ICBwb3dlciAzRSszICAwLjUgLT4gNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjUgIHBvd2VyIDAuNCAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjYgIHBvd2VyIDAuMDQgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjcgIHBvd2VyIDQuMEUtMSAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjggIHBvd2VyIDQuMDBFLTIgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzMCAgcG93ZXIgNEUrMSAgMC41IC0+IDYuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzMSAgcG93ZXIgNEUrMiAgMC41IC0+IDIwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzIgIHBvd2VyIDRFKzMgIDAuNSAtPiA2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzMyAgcG93ZXIgMC41ICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzNCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzUgIHBvd2VyIDUuMEUtMSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzYgIHBvd2VyIDUuMDBFLTIgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM3ICBwb3dlciA1RS0zICAwLjUgLT4gMC4wNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzggIHBvd2VyIDVFKzEgIDAuNSAtPiA3LjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzkgIHBvd2VyIDVFKzIgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0MCAgcG93ZXIgNUUrMyAgMC41IC0+IDcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQxICBwb3dlciAwLjYgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQyICBwb3dlciAwLjA2ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0MyAgcG93ZXIgNi4wRS0xICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0NCAgcG93ZXIgNi4wMEUtMiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDUgIHBvd2VyIDZFLTMgIDAuNSAtPiAwLjA3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0NiAgcG93ZXIgNkUrMSAgMC41IC0+IDcuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQ4ICBwb3dlciA2RSszICAwLjUgLT4gNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDkgIHBvd2VyIDAuNyAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjUxICBwb3dlciA3LjBFLTEgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjUyICBwb3dlciA3LjAwRS0yICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjU0ICBwb3dlciA3RSsxICAwLjUgLT4gOC40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjU1ICBwb3dlciA3RSsyICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTYgIHBvd2VyIDdFKzMgIDAuNSAtPiA4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1NyAgcG93ZXIgMC44ICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1OCAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTkgIHBvd2VyIDguMEUtMSAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjAgIHBvd2VyIDguMDBFLTIgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjYxICBwb3dlciA4RS0zICAwLjUgLT4gMC4wODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjIgIHBvd2VyIDhFKzEgIDAuNSAtPiA4LjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjMgIHBvd2VyIDhFKzIgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2NCAgcG93ZXIgOEUrMyAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjY1ICBwb3dlciAwLjkgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjY2ICBwb3dlciAwLjA5ICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2NyAgcG93ZXIgOS4wRS0xICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2OSAgcG93ZXIgOUUtMyAgMC41IC0+IDAuMDk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjcwICBwb3dlciA5RSsxICAwLjUgLT4gOS41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjcxICBwb3dlciA5RSsyICAwLjUgLT4gMzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3MiAgcG93ZXIgOUUrMyAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjczICBwb3dlciAwLjEwICAwLjUgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3NCAgcG93ZXIgMC4wMTAgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzUgIHBvd2VyIDEwLjBFLTEgIDAuNSAtPiAxLjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3NiAgcG93ZXIgMTAuMDBFLTIgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjc3ICBwb3dlciAxMEUtMyAgMC41IC0+IDAuMTAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3OCAgcG93ZXIgMTBFKzEgIDAuNSAtPiAxMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjc5ICBwb3dlciAxMEUrMiAgMC41IC0+IDMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjgwICBwb3dlciAxMEUrMyAgMC41IC0+IDEuMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjgxICBwb3dlciAwLjExICAwLjUgLT4gMC4zMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4MiAgcG93ZXIgMC4wMTEgIDAuNSAtPiAwLjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjgzICBwb3dlciAxMS4wRS0xICAwLjUgLT4gMS4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjg0ICBwb3dlciAxMS4wMEUtMiAgMC41IC0+IDAuMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODUgIHBvd2VyIDExRS0zICAwLjUgLT4gMC4xMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4NiAgcG93ZXIgMTFFKzEgIDAuNSAtPiAxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4NyAgcG93ZXIgMTFFKzIgIDAuNSAtPiAzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4OCAgcG93ZXIgMTFFKzMgIDAuNSAtPiAxLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODkgIHBvd2VyIDAuMTIgIDAuNSAtPiAwLjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjkwICBwb3dlciAwLjAxMiAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTEgIHBvd2VyIDEyLjBFLTEgIDAuNSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTIgIHBvd2VyIDEyLjAwRS0yICAwLjUgLT4gMC4zNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5MyAgcG93ZXIgMTJFLTMgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjk0ICBwb3dlciAxMkUrMSAgMC41IC0+IDExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjk1ICBwb3dlciAxMkUrMiAgMC41IC0+IDM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjk2ICBwb3dlciAxMkUrMyAgMC41IC0+IDEuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5NyAgcG93ZXIgMC4xMyAgMC41IC0+IDAuMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTggIHBvd2VyIDAuMDEzICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5OSAgcG93ZXIgMTMuMEUtMSAgMC41IC0+IDEuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwMCAgcG93ZXIgMTMuMDBFLTIgIDAuNSAtPiAwLjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzAxICBwb3dlciAxM0UtMyAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDIgIHBvd2VyIDEzRSsxICAwLjUgLT4gMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDMgIHBvd2VyIDEzRSsyICAwLjUgLT4gMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDQgIHBvd2VyIDEzRSszICAwLjUgLT4gMS4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA1ICBwb3dlciAwLjE0ICAwLjUgLT4gMC4zNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwNiAgcG93ZXIgMC4wMTQgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA3ICBwb3dlciAxNC4wRS0xICAwLjUgLT4gMS4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA4ICBwb3dlciAxNC4wMEUtMiAgMC41IC0+IDAuMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDkgIHBvd2VyIDE0RS0zICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxMCAgcG93ZXIgMTRFKzEgIDAuNSAtPiAxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxMSAgcG93ZXIgMTRFKzIgIDAuNSAtPiAzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxMiAgcG93ZXIgMTRFKzMgIDAuNSAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTMgIHBvd2VyIDAuMTUgIDAuNSAtPiAwLjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE0ICBwb3dlciAwLjAxNSAgMC41IC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTUgIHBvd2VyIDE1LjBFLTEgIDAuNSAtPiAxLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTYgIHBvd2VyIDE1LjAwRS0yICAwLjUgLT4gMC4zOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxNyAgcG93ZXIgMTVFLTMgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE4ICBwb3dlciAxNUUrMSAgMC41IC0+IDEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE5ICBwb3dlciAxNUUrMiAgMC41IC0+IDM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzIwICBwb3dlciAxNUUrMyAgMC41IC0+IDEuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyMSAgcG93ZXIgMC4xNiAgMC41IC0+IDAuNDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyMiAgcG93ZXIgMC4wMTYgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzIzICBwb3dlciAxNi4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI0ICBwb3dlciAxNi4wMEUtMiAgMC41IC0+IDAuNDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyNSAgcG93ZXIgMTZFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI2ICBwb3dlciAxNkUrMSAgMC41IC0+IDEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI3ICBwb3dlciAxNkUrMiAgMC41IC0+IDQwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMjggIHBvd2VyIDE2RSszICAwLjUgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI5ICBwb3dlciAwLjE3ICAwLjUgLT4gMC40MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzMCAgcG93ZXIgMC4wMTcgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzMxICBwb3dlciAxNy4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzMyICBwb3dlciAxNy4wMEUtMiAgMC41IC0+IDAuNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzMgIHBvd2VyIDE3RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzNCAgcG93ZXIgMTdFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzNSAgcG93ZXIgMTdFKzIgIDAuNSAtPiA0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzNiAgcG93ZXIgMTdFKzMgIDAuNSAtPiAxLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzcgIHBvd2VyIDAuMTggIDAuNSAtPiAwLjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzM4ICBwb3dlciAwLjAxOCAgMC41IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzkgIHBvd2VyIDE4LjBFLTEgIDAuNSAtPiAxLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDAgIHBvd2VyIDE4LjAwRS0yICAwLjUgLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0MSAgcG93ZXIgMThFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQyICBwb3dlciAxOEUrMSAgMC41IC0+IDEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQzICBwb3dlciAxOEUrMiAgMC41IC0+IDQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQ0ICBwb3dlciAxOEUrMyAgMC41IC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0NSAgcG93ZXIgMC4xOSAgMC41IC0+IDAuNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDYgIHBvd2VyIDAuMDE5ICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0NyAgcG93ZXIgMTkuMEUtMSAgMC41IC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0OCAgcG93ZXIgMTkuMDBFLTIgIDAuNSAtPiAwLjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQ5ICBwb3dlciAxOUUtMyAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTAgIHBvd2VyIDE5RSsxICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTEgIHBvd2VyIDE5RSsyICAwLjUgLT4gNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTIgIHBvd2VyIDE5RSszICAwLjUgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzUzICBwb3dlciAwLjIwICAwLjUgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1NCAgcG93ZXIgMC4wMjAgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzU1ICBwb3dlciAyMC4wRS0xICAwLjUgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzU2ICBwb3dlciAyMC4wMEUtMiAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTcgIHBvd2VyIDIwRS0zICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1OCAgcG93ZXIgMjBFKzEgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1OSAgcG93ZXIgMjBFKzIgIDAuNSAtPiA0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2MCAgcG93ZXIgMjBFKzMgIDAuNSAtPiAxLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjEgIHBvd2VyIDAuMjEgIDAuNSAtPiAwLjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzYyICBwb3dlciAwLjAyMSAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjMgIHBvd2VyIDIxLjBFLTEgIDAuNSAtPiAxLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjQgIHBvd2VyIDIxLjAwRS0yICAwLjUgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2NSAgcG93ZXIgMjFFLTMgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzY2ICBwb3dlciAyMUUrMSAgMC41IC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzY3ICBwb3dlciAyMUUrMiAgMC41IC0+IDQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzY4ICBwb3dlciAyMUUrMyAgMC41IC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2OSAgcG93ZXIgMC4yMiAgMC41IC0+IDAuNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzAgIHBvd2VyIDAuMDIyICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3MSAgcG93ZXIgMjIuMEUtMSAgMC41IC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3MiAgcG93ZXIgMjIuMDBFLTIgIDAuNSAtPiAwLjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzczICBwb3dlciAyMkUtMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzQgIHBvd2VyIDIyRSsxICAwLjUgLT4gMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzUgIHBvd2VyIDIyRSsyICAwLjUgLT4gNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzYgIHBvd2VyIDIyRSszICAwLjUgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc3ICBwb3dlciAwLjIzICAwLjUgLT4gMC40OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3OCAgcG93ZXIgMC4wMjMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc5ICBwb3dlciAyMy4wRS0xICAwLjUgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzgwICBwb3dlciAyMy4wMEUtMiAgMC41IC0+IDAuNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODEgIHBvd2VyIDIzRS0zICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4MiAgcG93ZXIgMjNFKzEgIDAuNSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4MyAgcG93ZXIgMjNFKzIgIDAuNSAtPiA0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4NCAgcG93ZXIgMjNFKzMgIDAuNSAtPiAxLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODUgIHBvd2VyIDAuMjQgIDAuNSAtPiAwLjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzg2ICBwb3dlciAwLjAyNCAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODcgIHBvd2VyIDI0LjBFLTEgIDAuNSAtPiAxLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODggIHBvd2VyIDI0LjAwRS0yICAwLjUgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4OSAgcG93ZXIgMjRFLTMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzkwICBwb3dlciAyNEUrMSAgMC41IC0+IDE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzkxICBwb3dlciAyNEUrMiAgMC41IC0+IDQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzkyICBwb3dlciAyNEUrMyAgMC41IC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5MyAgcG93ZXIgMC4yNSAgMC41IC0+IDAuNTAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5NCAgcG93ZXIgMC4wMjUgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzk1ICBwb3dlciAyNS4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzk2ICBwb3dlciAyNS4wMEUtMiAgMC41IC0+IDAuNTAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5NyAgcG93ZXIgMjVFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzk4ICBwb3dlciAyNUUrMSAgMC41IC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzk5ICBwb3dlciAyNUUrMiAgMC41IC0+IDUwIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDAgIHBvd2VyIDI1RSszICAwLjUgLT4gMS42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDAxICBwb3dlciAwLjI2ICAwLjUgLT4gMC41MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwMiAgcG93ZXIgMC4wMjYgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDAzICBwb3dlciAyNi4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDA0ICBwb3dlciAyNi4wMEUtMiAgMC41IC0+IDAuNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDUgIHBvd2VyIDI2RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwNiAgcG93ZXIgMjZFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwNyAgcG93ZXIgMjZFKzIgIDAuNSAtPiA1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwOCAgcG93ZXIgMjZFKzMgIDAuNSAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDkgIHBvd2VyIDAuMjcgIDAuNSAtPiAwLjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDEwICBwb3dlciAwLjAyNyAgMC41IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTEgIHBvd2VyIDI3LjBFLTEgIDAuNSAtPiAxLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTIgIHBvd2VyIDI3LjAwRS0yICAwLjUgLT4gMC41MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxMyAgcG93ZXIgMjdFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDE0ICBwb3dlciAyN0UrMSAgMC41IC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDE1ICBwb3dlciAyN0UrMiAgMC41IC0+IDUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDE2ICBwb3dlciAyN0UrMyAgMC41IC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxNyAgcG93ZXIgMC4yOCAgMC41IC0+IDAuNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTggIHBvd2VyIDAuMDI4ICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxOSAgcG93ZXIgMjguMEUtMSAgMC41IC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyMCAgcG93ZXIgMjguMDBFLTIgIDAuNSAtPiAwLjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDIxICBwb3dlciAyOEUtMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjIgIHBvd2VyIDI4RSsxICAwLjUgLT4gMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjMgIHBvd2VyIDI4RSsyICAwLjUgLT4gNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjQgIHBvd2VyIDI4RSszICAwLjUgLT4gMS43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI1ICBwb3dlciAwLjI5ICAwLjUgLT4gMC41NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyNiAgcG93ZXIgMC4wMjkgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI3ICBwb3dlciAyOS4wRS0xICAwLjUgLT4gMS43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI4ICBwb3dlciAyOS4wMEUtMiAgMC41IC0+IDAuNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjkgIHBvd2VyIDI5RS0zICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzMCAgcG93ZXIgMjlFKzEgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzMSAgcG93ZXIgMjlFKzIgIDAuNSAtPiA1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzMiAgcG93ZXIgMjlFKzMgIDAuNSAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzMgIHBvd2VyIDAuMzAgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM0ICBwb3dlciAwLjAzMCAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzUgIHBvd2VyIDMwLjBFLTEgIDAuNSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzYgIHBvd2VyIDMwLjAwRS0yICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzNyAgcG93ZXIgMzBFLTMgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM4ICBwb3dlciAzMEUrMSAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM5ICBwb3dlciAzMEUrMiAgMC41IC0+IDU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQwICBwb3dlciAzMEUrMyAgMC41IC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0MSAgcG93ZXIgMC4zMSAgMC41IC0+IDAuNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDIgIHBvd2VyIDAuMDMxICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0MyAgcG93ZXIgMzEuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0NCAgcG93ZXIgMzEuMDBFLTIgIDAuNSAtPiAwLjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ1ICBwb3dlciAzMUUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDYgIHBvd2VyIDMxRSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDcgIHBvd2VyIDMxRSsyICAwLjUgLT4gNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDggIHBvd2VyIDMxRSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ5ICBwb3dlciAwLjMyICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1MCAgcG93ZXIgMC4wMzIgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDUxICBwb3dlciAzMi4wRS0xICAwLjUgLT4gMS44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDUyICBwb3dlciAzMi4wMEUtMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTMgIHBvd2VyIDMyRS0zICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1NCAgcG93ZXIgMzJFKzEgIDAuNSAtPiAxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1NSAgcG93ZXIgMzJFKzIgIDAuNSAtPiA1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1NiAgcG93ZXIgMzJFKzMgIDAuNSAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTcgIHBvd2VyIDAuMzMgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDU4ICBwb3dlciAwLjAzMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTkgIHBvd2VyIDMzLjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjAgIHBvd2VyIDMzLjAwRS0yICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2MSAgcG93ZXIgMzNFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDYyICBwb3dlciAzM0UrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDYzICBwb3dlciAzM0UrMiAgMC41IC0+IDU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDY0ICBwb3dlciAzM0UrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2NSAgcG93ZXIgMC4zNCAgMC41IC0+IDAuNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjYgIHBvd2VyIDAuMDM0ICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2NyAgcG93ZXIgMzQuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2OCAgcG93ZXIgMzQuMDBFLTIgIDAuNSAtPiAwLjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDY5ICBwb3dlciAzNEUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzAgIHBvd2VyIDM0RSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzEgIHBvd2VyIDM0RSsyICAwLjUgLT4gNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzIgIHBvd2VyIDM0RSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDczICBwb3dlciAwLjM1ICAwLjUgLT4gMC41OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3NCAgcG93ZXIgMC4wMzUgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDc1ICBwb3dlciAzNS4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDc2ICBwb3dlciAzNS4wMEUtMiAgMC41IC0+IDAuNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzcgIHBvd2VyIDM1RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3OCAgcG93ZXIgMzVFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3OSAgcG93ZXIgMzVFKzIgIDAuNSAtPiA1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4MCAgcG93ZXIgMzVFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODEgIHBvd2VyIDAuMzYgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODIgIHBvd2VyIDAuMDM2ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4MyAgcG93ZXIgMzYuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4NCAgcG93ZXIgMzYuMDBFLTIgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODUgIHBvd2VyIDM2RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4NiAgcG93ZXIgMzZFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4NyAgcG93ZXIgMzZFKzIgIDAuNSAtPiA2MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDg4ICBwb3dlciAzNkUrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4OSAgcG93ZXIgMC4zNyAgMC41IC0+IDAuNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTAgIHBvd2VyIDAuMDM3ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5MSAgcG93ZXIgMzcuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5MiAgcG93ZXIgMzcuMDBFLTIgIDAuNSAtPiAwLjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDkzICBwb3dlciAzN0UtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTQgIHBvd2VyIDM3RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTUgIHBvd2VyIDM3RSsyICAwLjUgLT4gNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTYgIHBvd2VyIDM3RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk3ICBwb3dlciAwLjM4ICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5OCAgcG93ZXIgMC4wMzggIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk5ICBwb3dlciAzOC4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTAwICBwb3dlciAzOC4wMEUtMiAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDEgIHBvd2VyIDM4RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwMiAgcG93ZXIgMzhFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwMyAgcG93ZXIgMzhFKzIgIDAuNSAtPiA2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwNCAgcG93ZXIgMzhFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDUgIHBvd2VyIDAuMzkgIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTA2ICBwb3dlciAwLjAzOSAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDcgIHBvd2VyIDM5LjBFLTEgIDAuNSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDggIHBvd2VyIDM5LjAwRS0yICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwOSAgcG93ZXIgMzlFLTMgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTEwICBwb3dlciAzOUUrMSAgMC41IC0+IDIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTExICBwb3dlciAzOUUrMiAgMC41IC0+IDYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTEyICBwb3dlciAzOUUrMyAgMC41IC0+IDIuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxMyAgcG93ZXIgMC40MCAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTQgIHBvd2VyIDAuMDQwICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTE1ICBwb3dlciA0MC4wRS0xICAwLjUgLT4gMi4wIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTYgIHBvd2VyIDQwLjAwRS0yICAwLjUgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxNyAgcG93ZXIgNDBFLTMgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTggIHBvd2VyIDQwRSsxICAwLjUgLT4gMjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxOSAgcG93ZXIgNDBFKzIgIDAuNSAtPiA2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyMCAgcG93ZXIgNDBFKzMgIDAuNSAtPiAyLjBFKzIgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyMSAgcG93ZXIgMC40MSAgMC41IC0+IDAuNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjIgIHBvd2VyIDAuMDQxICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyMyAgcG93ZXIgNDEuMEUtMSAgMC41IC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyNCAgcG93ZXIgNDEuMDBFLTIgIDAuNSAtPiAwLjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI1ICBwb3dlciA0MUUtMyAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjYgIHBvd2VyIDQxRSsxICAwLjUgLT4gMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjcgIHBvd2VyIDQxRSsyICAwLjUgLT4gNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjggIHBvd2VyIDQxRSszICAwLjUgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI5ICBwb3dlciAwLjQyICAwLjUgLT4gMC42NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzMCAgcG93ZXIgMC4wNDIgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTMxICBwb3dlciA0Mi4wRS0xICAwLjUgLT4gMi4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTMyICBwb3dlciA0Mi4wMEUtMiAgMC41IC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzMgIHBvd2VyIDQyRS0zICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzNCAgcG93ZXIgNDJFKzEgIDAuNSAtPiAyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzNSAgcG93ZXIgNDJFKzIgIDAuNSAtPiA2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzNiAgcG93ZXIgNDJFKzMgIDAuNSAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzcgIHBvd2VyIDAuNDMgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTM4ICBwb3dlciAwLjA0MyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzkgIHBvd2VyIDQzLjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDAgIHBvd2VyIDQzLjAwRS0yICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0MSAgcG93ZXIgNDNFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQyICBwb3dlciA0M0UrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQzICBwb3dlciA0M0UrMiAgMC41IC0+IDY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQ0ICBwb3dlciA0M0UrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0NSAgcG93ZXIgMC40NCAgMC41IC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDYgIHBvd2VyIDAuMDQ0ICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0NyAgcG93ZXIgNDQuMEUtMSAgMC41IC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0OCAgcG93ZXIgNDQuMDBFLTIgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQ5ICBwb3dlciA0NEUtMyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTAgIHBvd2VyIDQ0RSsxICAwLjUgLT4gMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTEgIHBvd2VyIDQ0RSsyICAwLjUgLT4gNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTIgIHBvd2VyIDQ0RSszICAwLjUgLT4gMi4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTUzICBwb3dlciAwLjQ1ICAwLjUgLT4gMC42NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1NCAgcG93ZXIgMC4wNDUgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTU1ICBwb3dlciA0NS4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTU2ICBwb3dlciA0NS4wMEUtMiAgMC41IC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTcgIHBvd2VyIDQ1RS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1OCAgcG93ZXIgNDVFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1OSAgcG93ZXIgNDVFKzIgIDAuNSAtPiA2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2MCAgcG93ZXIgNDVFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjEgIHBvd2VyIDAuNDYgIDAuNSAtPiAwLjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTYyICBwb3dlciAwLjA0NiAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjMgIHBvd2VyIDQ2LjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjQgIHBvd2VyIDQ2LjAwRS0yICAwLjUgLT4gMC42OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2NSAgcG93ZXIgNDZFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTY2ICBwb3dlciA0NkUrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTY3ICBwb3dlciA0NkUrMiAgMC41IC0+IDY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTY4ICBwb3dlciA0NkUrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2OSAgcG93ZXIgMC40NyAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzAgIHBvd2VyIDAuMDQ3ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3MSAgcG93ZXIgNDcuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3MiAgcG93ZXIgNDcuMDBFLTIgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTczICBwb3dlciA0N0UtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzQgIHBvd2VyIDQ3RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzUgIHBvd2VyIDQ3RSsyICAwLjUgLT4gNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzYgIHBvd2VyIDQ3RSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc3ICBwb3dlciAwLjQ4ICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3OCAgcG93ZXIgMC4wNDggIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc5ICBwb3dlciA0OC4wRS0xICAwLjUgLT4gMi4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTgwICBwb3dlciA0OC4wMEUtMiAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODEgIHBvd2VyIDQ4RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4MiAgcG93ZXIgNDhFKzEgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4MyAgcG93ZXIgNDhFKzIgIDAuNSAtPiA2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4NCAgcG93ZXIgNDhFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODUgIHBvd2VyIDAuNDkgIDAuNSAtPiAwLjcwIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODYgIHBvd2VyIDAuMDQ5ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4NyAgcG93ZXIgNDkuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4OCAgcG93ZXIgNDkuMDBFLTIgIDAuNSAtPiAwLjcwIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODkgIHBvd2VyIDQ5RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5MCAgcG93ZXIgNDlFKzEgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5MSAgcG93ZXIgNDlFKzIgIDAuNSAtPiA3MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTkyICBwb3dlciA0OUUrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5MyAgcG93ZXIgMC41MCAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTQgIHBvd2VyIDAuMDUwICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5NSAgcG93ZXIgNTAuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5NiAgcG93ZXIgNTAuMDBFLTIgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTk3ICBwb3dlciA1MEUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTggIHBvd2VyIDUwRSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTkgIHBvd2VyIDUwRSsyICAwLjUgLT4gNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDAgIHBvd2VyIDUwRSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjAxICBwb3dlciAwLjUxICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwMiAgcG93ZXIgMC4wNTEgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjAzICBwb3dlciA1MS4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjA0ICBwb3dlciA1MS4wMEUtMiAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDUgIHBvd2VyIDUxRS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwNiAgcG93ZXIgNTFFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwNyAgcG93ZXIgNTFFKzIgIDAuNSAtPiA3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwOCAgcG93ZXIgNTFFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDkgIHBvd2VyIDAuNTIgIDAuNSAtPiAwLjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjEwICBwb3dlciAwLjA1MiAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTEgIHBvd2VyIDUyLjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTIgIHBvd2VyIDUyLjAwRS0yICAwLjUgLT4gMC43MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxMyAgcG93ZXIgNTJFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjE0ICBwb3dlciA1MkUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjE1ICBwb3dlciA1MkUrMiAgMC41IC0+IDcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjE2ICBwb3dlciA1MkUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxNyAgcG93ZXIgMC41MyAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTggIHBvd2VyIDAuMDUzICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxOSAgcG93ZXIgNTMuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyMCAgcG93ZXIgNTMuMDBFLTIgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjIxICBwb3dlciA1M0UtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjIgIHBvd2VyIDUzRSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjMgIHBvd2VyIDUzRSsyICAwLjUgLT4gNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjQgIHBvd2VyIDUzRSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI1ICBwb3dlciAwLjU0ICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyNiAgcG93ZXIgMC4wNTQgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI3ICBwb3dlciA1NC4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI4ICBwb3dlciA1NC4wMEUtMiAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjkgIHBvd2VyIDU0RS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzMCAgcG93ZXIgNTRFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzMSAgcG93ZXIgNTRFKzIgIDAuNSAtPiA3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzMiAgcG93ZXIgNTRFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzMgIHBvd2VyIDAuNTUgIDAuNSAtPiAwLjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM0ICBwb3dlciAwLjA1NSAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzUgIHBvd2VyIDU1LjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzYgIHBvd2VyIDU1LjAwRS0yICAwLjUgLT4gMC43NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzNyAgcG93ZXIgNTVFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM4ICBwb3dlciA1NUUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM5ICBwb3dlciA1NUUrMiAgMC41IC0+IDc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQwICBwb3dlciA1NUUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0MSAgcG93ZXIgMC41NiAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDIgIHBvd2VyIDAuMDU2ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0MyAgcG93ZXIgNTYuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0NCAgcG93ZXIgNTYuMDBFLTIgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ1ICBwb3dlciA1NkUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDYgIHBvd2VyIDU2RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDcgIHBvd2VyIDU2RSsyICAwLjUgLT4gNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDggIHBvd2VyIDU2RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ5ICBwb3dlciAwLjU3ICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1MCAgcG93ZXIgMC4wNTcgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjUxICBwb3dlciA1Ny4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjUyICBwb3dlciA1Ny4wMEUtMiAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTMgIHBvd2VyIDU3RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1NCAgcG93ZXIgNTdFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1NSAgcG93ZXIgNTdFKzIgIDAuNSAtPiA3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1NiAgcG93ZXIgNTdFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTcgIHBvd2VyIDAuNTggIDAuNSAtPiAwLjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjU4ICBwb3dlciAwLjA1OCAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTkgIHBvd2VyIDU4LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjAgIHBvd2VyIDU4LjAwRS0yICAwLjUgLT4gMC43NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2MSAgcG93ZXIgNThFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjYyICBwb3dlciA1OEUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjYzICBwb3dlciA1OEUrMiAgMC41IC0+IDc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjY0ICBwb3dlciA1OEUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2NSAgcG93ZXIgMC41OSAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjYgIHBvd2VyIDAuMDU5ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2NyAgcG93ZXIgNTkuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2OCAgcG93ZXIgNTkuMDBFLTIgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjY5ICBwb3dlciA1OUUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzAgIHBvd2VyIDU5RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzEgIHBvd2VyIDU5RSsyICAwLjUgLT4gNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzIgIHBvd2VyIDU5RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjczICBwb3dlciAwLjYwICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3NCAgcG93ZXIgMC4wNjAgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjc1ICBwb3dlciA2MC4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjc2ICBwb3dlciA2MC4wMEUtMiAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzcgIHBvd2VyIDYwRS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3OCAgcG93ZXIgNjBFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3OSAgcG93ZXIgNjBFKzIgIDAuNSAtPiA3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4MCAgcG93ZXIgNjBFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODEgIHBvd2VyIDAuNjEgIDAuNSAtPiAwLjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjgyICBwb3dlciAwLjA2MSAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODMgIHBvd2VyIDYxLjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODQgIHBvd2VyIDYxLjAwRS0yICAwLjUgLT4gMC43OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4NSAgcG93ZXIgNjFFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjg2ICBwb3dlciA2MUUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjg3ICBwb3dlciA2MUUrMiAgMC41IC0+IDc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjg4ICBwb3dlciA2MUUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4OSAgcG93ZXIgMC42MiAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTAgIHBvd2VyIDAuMDYyICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5MSAgcG93ZXIgNjIuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5MiAgcG93ZXIgNjIuMDBFLTIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjkzICBwb3dlciA2MkUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTQgIHBvd2VyIDYyRSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTUgIHBvd2VyIDYyRSsyICAwLjUgLT4gNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTYgIHBvd2VyIDYyRSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk3ICBwb3dlciAwLjYzICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5OCAgcG93ZXIgMC4wNjMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk5ICBwb3dlciA2My4wRS0xICAwLjUgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzAwICBwb3dlciA2My4wMEUtMiAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDEgIHBvd2VyIDYzRS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwMiAgcG93ZXIgNjNFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwMyAgcG93ZXIgNjNFKzIgIDAuNSAtPiA3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwNCAgcG93ZXIgNjNFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDUgIHBvd2VyIDAuNjQgIDAuNSAtPiAwLjgwIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDYgIHBvd2VyIDAuMDY0ICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwNyAgcG93ZXIgNjQuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwOCAgcG93ZXIgNjQuMDBFLTIgIDAuNSAtPiAwLjgwIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDkgIHBvd2VyIDY0RS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxMCAgcG93ZXIgNjRFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxMSAgcG93ZXIgNjRFKzIgIDAuNSAtPiA4MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzEyICBwb3dlciA2NEUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxMyAgcG93ZXIgMC42NSAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTQgIHBvd2VyIDAuMDY1ICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxNSAgcG93ZXIgNjUuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxNiAgcG93ZXIgNjUuMDBFLTIgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzE3ICBwb3dlciA2NUUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTggIHBvd2VyIDY1RSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTkgIHBvd2VyIDY1RSsyICAwLjUgLT4gODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjAgIHBvd2VyIDY1RSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzIxICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyMiAgcG93ZXIgMC4wNjYgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzIzICBwb3dlciA2Ni4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzI0ICBwb3dlciA2Ni4wMEUtMiAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjUgIHBvd2VyIDY2RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyNiAgcG93ZXIgNjZFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyNyAgcG93ZXIgNjZFKzIgIDAuNSAtPiA4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyOCAgcG93ZXIgNjZFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjkgIHBvd2VyIDAuNjcgIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzMwICBwb3dlciAwLjA2NyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzEgIHBvd2VyIDY3LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzIgIHBvd2VyIDY3LjAwRS0yICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczMyAgcG93ZXIgNjdFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzM0ICBwb3dlciA2N0UrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzM1ICBwb3dlciA2N0UrMiAgMC41IC0+IDgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzM2ICBwb3dlciA2N0UrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczNyAgcG93ZXIgMC42OCAgMC41IC0+IDAuODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzggIHBvd2VyIDAuMDY4ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczOSAgcG93ZXIgNjguMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0MCAgcG93ZXIgNjguMDBFLTIgIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQxICBwb3dlciA2OEUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDIgIHBvd2VyIDY4RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDMgIHBvd2VyIDY4RSsyICAwLjUgLT4gODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDQgIHBvd2VyIDY4RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0NiAgcG93ZXIgMC4wNjkgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ3ICBwb3dlciA2OS4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ4ICBwb3dlciA2OS4wMEUtMiAgMC41IC0+IDAuODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDkgIHBvd2VyIDY5RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1MCAgcG93ZXIgNjlFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1MSAgcG93ZXIgNjlFKzIgIDAuNSAtPiA4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1MiAgcG93ZXIgNjlFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTMgIHBvd2VyIDAuNzAgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU0ICBwb3dlciAwLjA3MCAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTUgIHBvd2VyIDcwLjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTYgIHBvd2VyIDcwLjAwRS0yICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1NyAgcG93ZXIgNzBFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU4ICBwb3dlciA3MEUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU5ICBwb3dlciA3MEUrMiAgMC41IC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzYwICBwb3dlciA3MEUrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2MSAgcG93ZXIgMC43MSAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjIgIHBvd2VyIDAuMDcxICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2MyAgcG93ZXIgNzEuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2NCAgcG93ZXIgNzEuMDBFLTIgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY1ICBwb3dlciA3MUUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjYgIHBvd2VyIDcxRSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjcgIHBvd2VyIDcxRSsyICAwLjUgLT4gODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjggIHBvd2VyIDcxRSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY5ICBwb3dlciAwLjcyICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3MCAgcG93ZXIgMC4wNzIgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzcxICBwb3dlciA3Mi4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzcyICBwb3dlciA3Mi4wMEUtMiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzMgIHBvd2VyIDcyRS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3NCAgcG93ZXIgNzJFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3NSAgcG93ZXIgNzJFKzIgIDAuNSAtPiA4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3NiAgcG93ZXIgNzJFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzcgIHBvd2VyIDAuNzMgIDAuNSAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzc4ICBwb3dlciAwLjA3MyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzkgIHBvd2VyIDczLjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODAgIHBvd2VyIDczLjAwRS0yICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4MSAgcG93ZXIgNzNFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzgyICBwb3dlciA3M0UrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzgzICBwb3dlciA3M0UrMiAgMC41IC0+IDg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzg0ICBwb3dlciA3M0UrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4NSAgcG93ZXIgMC43NCAgMC41IC0+IDAuODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODYgIHBvd2VyIDAuMDc0ICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4NyAgcG93ZXIgNzQuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4OCAgcG93ZXIgNzQuMDBFLTIgIDAuNSAtPiAwLjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzg5ICBwb3dlciA3NEUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTAgIHBvd2VyIDc0RSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTEgIHBvd2VyIDc0RSsyICAwLjUgLT4gODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTIgIHBvd2VyIDc0RSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzkzICBwb3dlciAwLjc1ICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5NCAgcG93ZXIgMC4wNzUgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzk1ICBwb3dlciA3NS4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzk2ICBwb3dlciA3NS4wMEUtMiAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTcgIHBvd2VyIDc1RS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5OCAgcG93ZXIgNzVFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5OSAgcG93ZXIgNzVFKzIgIDAuNSAtPiA4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwMCAgcG93ZXIgNzVFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDEgIHBvd2VyIDAuNzYgIDAuNSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODAyICBwb3dlciAwLjA3NiAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDMgIHBvd2VyIDc2LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDQgIHBvd2VyIDc2LjAwRS0yICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwNSAgcG93ZXIgNzZFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODA2ICBwb3dlciA3NkUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODA3ICBwb3dlciA3NkUrMiAgMC41IC0+IDg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODA4ICBwb3dlciA3NkUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwOSAgcG93ZXIgMC43NyAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTAgIHBvd2VyIDAuMDc3ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxMSAgcG93ZXIgNzcuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxMiAgcG93ZXIgNzcuMDBFLTIgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODEzICBwb3dlciA3N0UtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTQgIHBvd2VyIDc3RSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTUgIHBvd2VyIDc3RSsyICAwLjUgLT4gODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTYgIHBvd2VyIDc3RSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE3ICBwb3dlciAwLjc4ICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxOCAgcG93ZXIgMC4wNzggIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE5ICBwb3dlciA3OC4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODIwICBwb3dlciA3OC4wMEUtMiAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjEgIHBvd2VyIDc4RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyMiAgcG93ZXIgNzhFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyMyAgcG93ZXIgNzhFKzIgIDAuNSAtPiA4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyNCAgcG93ZXIgNzhFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjUgIHBvd2VyIDAuNzkgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODI2ICBwb3dlciAwLjA3OSAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjcgIHBvd2VyIDc5LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjggIHBvd2VyIDc5LjAwRS0yICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyOSAgcG93ZXIgNzlFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODMwICBwb3dlciA3OUUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODMxICBwb3dlciA3OUUrMiAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODMyICBwb3dlciA3OUUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzMyAgcG93ZXIgMC44MCAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzQgIHBvd2VyIDAuMDgwICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzNSAgcG93ZXIgODAuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzNiAgcG93ZXIgODAuMDBFLTIgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODM3ICBwb3dlciA4MEUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzggIHBvd2VyIDgwRSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzkgIHBvd2VyIDgwRSsyICAwLjUgLT4gODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDAgIHBvd2VyIDgwRSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQxICBwb3dlciAwLjgxICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQyICBwb3dlciAwLjA4MSAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDMgIHBvd2VyIDgxLjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDQgIHBvd2VyIDgxLjAwRS0yICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ1ICBwb3dlciA4MUUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDYgIHBvd2VyIDgxRSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDcgIHBvd2VyIDgxRSsyICAwLjUgLT4gOTAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg0OCAgcG93ZXIgODFFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDkgIHBvd2VyIDAuODIgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODUwICBwb3dlciAwLjA4MiAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTEgIHBvd2VyIDgyLjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTIgIHBvd2VyIDgyLjAwRS0yICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1MyAgcG93ZXIgODJFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODU0ICBwb3dlciA4MkUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODU1ICBwb3dlciA4MkUrMiAgMC41IC0+IDkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODU2ICBwb3dlciA4MkUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1NyAgcG93ZXIgMC44MyAgMC41IC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTggIHBvd2VyIDAuMDgzICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1OSAgcG93ZXIgODMuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2MCAgcG93ZXIgODMuMDBFLTIgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODYxICBwb3dlciA4M0UtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjIgIHBvd2VyIDgzRSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjMgIHBvd2VyIDgzRSsyICAwLjUgLT4gOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjQgIHBvd2VyIDgzRSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY1ICBwb3dlciAwLjg0ICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2NiAgcG93ZXIgMC4wODQgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY3ICBwb3dlciA4NC4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY4ICBwb3dlciA4NC4wMEUtMiAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjkgIHBvd2VyIDg0RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3MCAgcG93ZXIgODRFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3MSAgcG93ZXIgODRFKzIgIDAuNSAtPiA5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3MiAgcG93ZXIgODRFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzMgIHBvd2VyIDAuODUgIDAuNSAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc0ICBwb3dlciAwLjA4NSAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzUgIHBvd2VyIDg1LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzYgIHBvd2VyIDg1LjAwRS0yICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3NyAgcG93ZXIgODVFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc4ICBwb3dlciA4NUUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc5ICBwb3dlciA4NUUrMiAgMC41IC0+IDkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODgwICBwb3dlciA4NUUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4MSAgcG93ZXIgMC44NiAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODIgIHBvd2VyIDAuMDg2ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4MyAgcG93ZXIgODYuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4NCAgcG93ZXIgODYuMDBFLTIgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg1ICBwb3dlciA4NkUtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODYgIHBvd2VyIDg2RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODcgIHBvd2VyIDg2RSsyICAwLjUgLT4gOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODggIHBvd2VyIDg2RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg5ICBwb3dlciAwLjg3ICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5MCAgcG93ZXIgMC4wODcgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODkxICBwb3dlciA4Ny4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODkyICBwb3dlciA4Ny4wMEUtMiAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTMgIHBvd2VyIDg3RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5NCAgcG93ZXIgODdFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5NSAgcG93ZXIgODdFKzIgIDAuNSAtPiA5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5NiAgcG93ZXIgODdFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTcgIHBvd2VyIDAuODggIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODk4ICBwb3dlciAwLjA4OCAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTkgIHBvd2VyIDg4LjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDAgIHBvd2VyIDg4LjAwRS0yICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwMSAgcG93ZXIgODhFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTAyICBwb3dlciA4OEUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTAzICBwb3dlciA4OEUrMiAgMC41IC0+IDk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTA0ICBwb3dlciA4OEUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwNSAgcG93ZXIgMC44OSAgMC41IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDYgIHBvd2VyIDAuMDg5ICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwNyAgcG93ZXIgODkuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwOCAgcG93ZXIgODkuMDBFLTIgIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTA5ICBwb3dlciA4OUUtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTAgIHBvd2VyIDg5RSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTEgIHBvd2VyIDg5RSsyICAwLjUgLT4gOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTIgIHBvd2VyIDg5RSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTEzICBwb3dlciAwLjkwICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxNCAgcG93ZXIgMC4wOTAgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTUgIHBvd2VyIDkwLjBFLTEgIDAuNSAtPiAzLjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxNiAgcG93ZXIgOTAuMDBFLTIgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTE3ICBwb3dlciA5MEUtMyAgMC41IC0+IDAuMzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxOCAgcG93ZXIgOTBFKzEgIDAuNSAtPiAzMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTE5ICBwb3dlciA5MEUrMiAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTIwICBwb3dlciA5MEUrMyAgMC41IC0+IDMuMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTIxICBwb3dlciAwLjkxICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyMiAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTIzICBwb3dlciA5MS4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTI0ICBwb3dlciA5MS4wMEUtMiAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjUgIHBvd2VyIDkxRS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyNiAgcG93ZXIgOTFFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyNyAgcG93ZXIgOTFFKzIgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyOCAgcG93ZXIgOTFFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjkgIHBvd2VyIDAuOTIgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTMwICBwb3dlciAwLjA5MiAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzEgIHBvd2VyIDkyLjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzIgIHBvd2VyIDkyLjAwRS0yICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzMyAgcG93ZXIgOTJFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTM0ICBwb3dlciA5MkUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTM1ICBwb3dlciA5MkUrMiAgMC41IC0+IDk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTM2ICBwb3dlciA5MkUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzNyAgcG93ZXIgMC45MyAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzggIHBvd2VyIDAuMDkzICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzOSAgcG93ZXIgOTMuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0MCAgcG93ZXIgOTMuMDBFLTIgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQxICBwb3dlciA5M0UtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDIgIHBvd2VyIDkzRSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDMgIHBvd2VyIDkzRSsyICAwLjUgLT4gOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDQgIHBvd2VyIDkzRSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ1ICBwb3dlciAwLjk0ICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0NiAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ3ICBwb3dlciA5NC4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ4ICBwb3dlciA5NC4wMEUtMiAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDkgIHBvd2VyIDk0RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1MCAgcG93ZXIgOTRFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1MSAgcG93ZXIgOTRFKzIgIDAuNSAtPiA5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1MiAgcG93ZXIgOTRFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTMgIHBvd2VyIDAuOTUgIDAuNSAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU0ICBwb3dlciAwLjA5NSAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTUgIHBvd2VyIDk1LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTYgIHBvd2VyIDk1LjAwRS0yICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1NyAgcG93ZXIgOTVFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU4ICBwb3dlciA5NUUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU5ICBwb3dlciA5NUUrMiAgMC41IC0+IDk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTYwICBwb3dlciA5NUUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2MSAgcG93ZXIgMC45NiAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjIgIHBvd2VyIDAuMDk2ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2MyAgcG93ZXIgOTYuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2NCAgcG93ZXIgOTYuMDBFLTIgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY1ICBwb3dlciA5NkUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjYgIHBvd2VyIDk2RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjcgIHBvd2VyIDk2RSsyICAwLjUgLT4gOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjggIHBvd2VyIDk2RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY5ICBwb3dlciAwLjk3ICAwLjUgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3MCAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTcxICBwb3dlciA5Ny4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTcyICBwb3dlciA5Ny4wMEUtMiAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzMgIHBvd2VyIDk3RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3NCAgcG93ZXIgOTdFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3NSAgcG93ZXIgOTdFKzIgIDAuNSAtPiA5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3NiAgcG93ZXIgOTdFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzcgIHBvd2VyIDAuOTggIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTc4ICBwb3dlciAwLjA5OCAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzkgIHBvd2VyIDk4LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODAgIHBvd2VyIDk4LjAwRS0yICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4MSAgcG93ZXIgOThFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTgyICBwb3dlciA5OEUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTgzICBwb3dlciA5OEUrMiAgMC41IC0+IDk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTg0ICBwb3dlciA5OEUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4NSAgcG93ZXIgMC45OSAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODYgIHBvd2VyIDAuMDk5ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4NyAgcG93ZXIgOTkuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4OCAgcG93ZXIgOTkuMDBFLTIgIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTg5ICBwb3dlciA5OUUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5OTAgIHBvd2VyIDk5RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5OTEgIHBvd2VyIDk5RSsyICAwLjUgLT4gOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5OTIgIHBvd2VyIDk5RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKKworLS0gUHJlY2lzaW9uIDMgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgZiBhbmQgZi8xMF0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246ICAgMworcHdzeDMwMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMDMgIHBvd2VyIDAuMiAgMC41IC0+IDAuNDQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA0ICBwb3dlciAwLjAyICAwLjUgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMDUgIHBvd2VyIDAuMyAgMC41IC0+IDAuNTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA2ICBwb3dlciAwLjAzICAwLjUgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMDcgIHBvd2VyIDAuNCAgMC41IC0+IDAuNjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA4ICBwb3dlciAwLjA0ICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMDkgIHBvd2VyIDAuNSAgMC41IC0+IDAuNzA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDEwICBwb3dlciAwLjA1ICAwLjUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTEgIHBvd2VyIDAuNiAgMC41IC0+IDAuNzc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDEyICBwb3dlciAwLjA2ICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTMgIHBvd2VyIDAuNyAgMC41IC0+IDAuODM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE0ICBwb3dlciAwLjA3ICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTUgIHBvd2VyIDAuOCAgMC41IC0+IDAuODk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE2ICBwb3dlciAwLjA4ICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTcgIHBvd2VyIDAuOSAgMC41IC0+IDAuOTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE4ICBwb3dlciAwLjA5ICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMTkgIHBvd2VyIDAuMTEgIDAuNSAtPiAwLjMzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyMCAgcG93ZXIgMC4wMTEgIDAuNSAtPiAwLjEwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyMSAgcG93ZXIgMC4xMiAgMC41IC0+IDAuMzQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDIyICBwb3dlciAwLjAxMiAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDIzICBwb3dlciAwLjEzICAwLjUgLT4gMC4zNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjQgIHBvd2VyIDAuMDEzICAwLjUgLT4gMC4xMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjUgIHBvd2VyIDAuMTQgIDAuNSAtPiAwLjM3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyNiAgcG93ZXIgMC4wMTQgIDAuNSAtPiAwLjExOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyNyAgcG93ZXIgMC4xNSAgMC41IC0+IDAuMzg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDI4ICBwb3dlciAwLjAxNSAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDI5ICBwb3dlciAwLjE2ICAwLjUgLT4gMC40MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzAgIHBvd2VyIDAuMDE2ICAwLjUgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzEgIHBvd2VyIDAuMTcgIDAuNSAtPiAwLjQxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzMiAgcG93ZXIgMC4wMTcgIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzMyAgcG93ZXIgMC4xOCAgMC41IC0+IDAuNDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDM0ICBwb3dlciAwLjAxOCAgMC41IC0+IDAuMTM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDM1ICBwb3dlciAwLjE5ICAwLjUgLT4gMC40MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzYgIHBvd2VyIDAuMDE5ICAwLjUgLT4gMC4xMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzcgIHBvd2VyIDAuMjEgIDAuNSAtPiAwLjQ1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzOCAgcG93ZXIgMC4wMjEgIDAuNSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzOSAgcG93ZXIgMC4yMiAgMC41IC0+IDAuNDY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQwICBwb3dlciAwLjAyMiAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQxICBwb3dlciAwLjIzICAwLjUgLT4gMC40ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDIgIHBvd2VyIDAuMDIzICAwLjUgLT4gMC4xNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDMgIHBvd2VyIDAuMjQgIDAuNSAtPiAwLjQ5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0NCAgcG93ZXIgMC4wMjQgIDAuNSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0NSAgcG93ZXIgMC4yNSAgMC41IC0+IDAuNTAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQ2ICBwb3dlciAwLjAyNSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQ3ICBwb3dlciAwLjI2ICAwLjUgLT4gMC41MTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDggIHBvd2VyIDAuMDI2ICAwLjUgLT4gMC4xNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDkgIHBvd2VyIDAuMjcgIDAuNSAtPiAwLjUyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1MCAgcG93ZXIgMC4wMjcgIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1MSAgcG93ZXIgMC4yOCAgMC41IC0+IDAuNTI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDUyICBwb3dlciAwLjAyOCAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDUzICBwb3dlciAwLjI5ICAwLjUgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTQgIHBvd2VyIDAuMDI5ICAwLjUgLT4gMC4xNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTUgIHBvd2VyIDAuMzEgIDAuNSAtPiAwLjU1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1NiAgcG93ZXIgMC4wMzEgIDAuNSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1NyAgcG93ZXIgMC4zMiAgMC41IC0+IDAuNTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDU4ICBwb3dlciAwLjAzMiAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDU5ICBwb3dlciAwLjMzICAwLjUgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjAgIHBvd2VyIDAuMDMzICAwLjUgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjEgIHBvd2VyIDAuMzQgIDAuNSAtPiAwLjU4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2MiAgcG93ZXIgMC4wMzQgIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2MyAgcG93ZXIgMC4zNSAgMC41IC0+IDAuNTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDY0ICBwb3dlciAwLjAzNSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDY1ICBwb3dlciAwLjM2ICAwLjUgLT4gMC42MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjYgIHBvd2VyIDAuMDM2ICAwLjUgLT4gMC4xOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjcgIHBvd2VyIDAuMzcgIDAuNSAtPiAwLjYwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2OCAgcG93ZXIgMC4wMzcgIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2OSAgcG93ZXIgMC4zOCAgMC41IC0+IDAuNjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDcwICBwb3dlciAwLjAzOCAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDcxICBwb3dlciAwLjM5ICAwLjUgLT4gMC42MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzIgIHBvd2VyIDAuMDM5ICAwLjUgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzMgIHBvd2VyIDAuNDEgIDAuNSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3NCAgcG93ZXIgMC4wNDEgIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3NSAgcG93ZXIgMC40MiAgMC41IC0+IDAuNjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDc2ICBwb3dlciAwLjA0MiAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDc3ICBwb3dlciAwLjQzICAwLjUgLT4gMC42NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzggIHBvd2VyIDAuMDQzICAwLjUgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzkgIHBvd2VyIDAuNDQgIDAuNSAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4MCAgcG93ZXIgMC4wNDQgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4MSAgcG93ZXIgMC40NSAgMC41IC0+IDAuNjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDgyICBwb3dlciAwLjA0NSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDgzICBwb3dlciAwLjQ2ICAwLjUgLT4gMC42NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODQgIHBvd2VyIDAuMDQ2ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODUgIHBvd2VyIDAuNDcgIDAuNSAtPiAwLjY4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4NiAgcG93ZXIgMC4wNDcgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4NyAgcG93ZXIgMC40OCAgMC41IC0+IDAuNjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDg4ICBwb3dlciAwLjA0OCAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDg5ICBwb3dlciAwLjQ5ICAwLjUgLT4gMC43MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTAgIHBvd2VyIDAuMDQ5ICAwLjUgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTEgIHBvd2VyIDAuNTEgIDAuNSAtPiAwLjcxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5MiAgcG93ZXIgMC4wNTEgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5MyAgcG93ZXIgMC41MiAgMC41IC0+IDAuNzIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDk0ICBwb3dlciAwLjA1MiAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDk1ICBwb3dlciAwLjUzICAwLjUgLT4gMC43MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTYgIHBvd2VyIDAuMDUzICAwLjUgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTcgIHBvd2VyIDAuNTQgIDAuNSAtPiAwLjczNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5OCAgcG93ZXIgMC4wNTQgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5OSAgcG93ZXIgMC41NSAgMC41IC0+IDAuNzQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTAwICBwb3dlciAwLjA1NSAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTAxICBwb3dlciAwLjU2ICAwLjUgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDIgIHBvd2VyIDAuMDU2ICAwLjUgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDMgIHBvd2VyIDAuNTcgIDAuNSAtPiAwLjc1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwNCAgcG93ZXIgMC4wNTcgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwNSAgcG93ZXIgMC41OCAgMC41IC0+IDAuNzYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTA2ICBwb3dlciAwLjA1OCAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTA3ICBwb3dlciAwLjU5ICAwLjUgLT4gMC43NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDggIHBvd2VyIDAuMDU5ICAwLjUgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDkgIHBvd2VyIDAuNjEgIDAuNSAtPiAwLjc4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExMCAgcG93ZXIgMC4wNjEgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExMSAgcG93ZXIgMC42MiAgMC41IC0+IDAuNzg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTEyICBwb3dlciAwLjA2MiAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTEzICBwb3dlciAwLjYzICAwLjUgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTQgIHBvd2VyIDAuMDYzICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTUgIHBvd2VyIDAuNjQgIDAuNSAtPiAwLjgwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExNiAgcG93ZXIgMC4wNjQgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExNyAgcG93ZXIgMC42NSAgMC41IC0+IDAuODA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTE4ICBwb3dlciAwLjA2NSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTE5ICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjAgIHBvd2VyIDAuMDY2ICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjEgIHBvd2VyIDAuNjcgIDAuNSAtPiAwLjgxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyMiAgcG93ZXIgMC4wNjcgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyMyAgcG93ZXIgMC42OCAgMC41IC0+IDAuODI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTI0ICBwb3dlciAwLjA2OCAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTI1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjYgIHBvd2VyIDAuMDY5ICAwLjUgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjcgIHBvd2VyIDAuNzEgIDAuNSAtPiAwLjg0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyOCAgcG93ZXIgMC4wNzEgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyOSAgcG93ZXIgMC43MiAgMC41IC0+IDAuODQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTMwICBwb3dlciAwLjA3MiAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTMxICBwb3dlciAwLjczICAwLjUgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzIgIHBvd2VyIDAuMDczICAwLjUgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzMgIHBvd2VyIDAuNzQgIDAuNSAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzNCAgcG93ZXIgMC4wNzQgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzNSAgcG93ZXIgMC43NSAgMC41IC0+IDAuODY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTM2ICBwb3dlciAwLjA3NSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTM3ICBwb3dlciAwLjc2ICAwLjUgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzggIHBvd2VyIDAuMDc2ICAwLjUgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzkgIHBvd2VyIDAuNzcgIDAuNSAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0MCAgcG93ZXIgMC4wNzcgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0MSAgcG93ZXIgMC43OCAgMC41IC0+IDAuODgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQyICBwb3dlciAwLjA3OCAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQzICBwb3dlciAwLjc5ICAwLjUgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDQgIHBvd2VyIDAuMDc5ICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDUgIHBvd2VyIDAuODEgIDAuNSAtPiAwLjkwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0NiAgcG93ZXIgMC4wODEgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0NyAgcG93ZXIgMC44MiAgMC41IC0+IDAuOTA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQ4ICBwb3dlciAwLjA4MiAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQ5ICBwb3dlciAwLjgzICAwLjUgLT4gMC45MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTAgIHBvd2VyIDAuMDgzICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTEgIHBvd2VyIDAuODQgIDAuNSAtPiAwLjkxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1MiAgcG93ZXIgMC4wODQgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1MyAgcG93ZXIgMC44NSAgMC41IC0+IDAuOTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTU0ICBwb3dlciAwLjA4NSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTU1ICBwb3dlciAwLjg2ICAwLjUgLT4gMC45MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTYgIHBvd2VyIDAuMDg2ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTcgIHBvd2VyIDAuODcgIDAuNSAtPiAwLjkzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1OCAgcG93ZXIgMC4wODcgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1OSAgcG93ZXIgMC44OCAgMC41IC0+IDAuOTM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTYwICBwb3dlciAwLjA4OCAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTYxICBwb3dlciAwLjg5ICAwLjUgLT4gMC45NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjIgIHBvd2VyIDAuMDg5ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjMgIHBvd2VyIDAuOTEgIDAuNSAtPiAwLjk1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2NCAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2NSAgcG93ZXIgMC45MiAgMC41IC0+IDAuOTU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTY2ICBwb3dlciAwLjA5MiAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTY3ICBwb3dlciAwLjkzICAwLjUgLT4gMC45NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjggIHBvd2VyIDAuMDkzICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjkgIHBvd2VyIDAuOTQgIDAuNSAtPiAwLjk3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3MCAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3MSAgcG93ZXIgMC45NSAgMC41IC0+IDAuOTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTcyICBwb3dlciAwLjA5NSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTczICBwb3dlciAwLjk2ICAwLjUgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzQgIHBvd2VyIDAuMDk2ICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzUgIHBvd2VyIDAuOTcgIDAuNSAtPiAwLjk4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3NiAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3NyAgcG93ZXIgMC45OCAgMC41IC0+IDAuOTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTc4ICBwb3dlciAwLjA5OCAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTc5ICBwb3dlciAwLjk5ICAwLjUgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODAgIHBvd2VyIDAuMDk5ICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODEgIHBvd2VyIDAuMTAxICAwLjUgLT4gMC4zMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODIgIHBvd2VyIDAuMDEwMSAgMC41IC0+IDAuMTAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTgzICBwb3dlciAwLjEwMiAgMC41IC0+IDAuMzE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTg0ICBwb3dlciAwLjAxMDIgIDAuNSAtPiAwLjEwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4NSAgcG93ZXIgMC4xMDMgIDAuNSAtPiAwLjMyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4NiAgcG93ZXIgMC4wMTAzICAwLjUgLT4gMC4xMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODcgIHBvd2VyIDAuMTA0ICAwLjUgLT4gMC4zMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODggIHBvd2VyIDAuMDEwNCAgMC41IC0+IDAuMTAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTg5ICBwb3dlciAwLjEwNSAgMC41IC0+IDAuMzI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTkwICBwb3dlciAwLjAxMDUgIDAuNSAtPiAwLjEwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5MSAgcG93ZXIgMC4xMDYgIDAuNSAtPiAwLjMyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5MiAgcG93ZXIgMC4wMTA2ICAwLjUgLT4gMC4xMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTMgIHBvd2VyIDAuMTA3ICAwLjUgLT4gMC4zMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTQgIHBvd2VyIDAuMDEwNyAgMC41IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTk1ICBwb3dlciAwLjEwOCAgMC41IC0+IDAuMzI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTk2ICBwb3dlciAwLjAxMDggIDAuNSAtPiAwLjEwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5NyAgcG93ZXIgMC4xMDkgIDAuNSAtPiAwLjMzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5OCAgcG93ZXIgMC4wMTA5ICAwLjUgLT4gMC4xMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTkgIHBvd2VyIDAuMTExICAwLjUgLT4gMC4zMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDAgIHBvd2VyIDAuMDExMSAgMC41IC0+IDAuMTA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjAxICBwb3dlciAwLjExMiAgMC41IC0+IDAuMzM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjAyICBwb3dlciAwLjAxMTIgIDAuNSAtPiAwLjEwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwMyAgcG93ZXIgMC4xMTMgIDAuNSAtPiAwLjMzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwNCAgcG93ZXIgMC4wMTEzICAwLjUgLT4gMC4xMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDUgIHBvd2VyIDAuMTE0ICAwLjUgLT4gMC4zMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDYgIHBvd2VyIDAuMDExNCAgMC41IC0+IDAuMTA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjA3ICBwb3dlciAwLjExNSAgMC41IC0+IDAuMzM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjA4ICBwb3dlciAwLjAxMTUgIDAuNSAtPiAwLjEwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwOSAgcG93ZXIgMC4xMTYgIDAuNSAtPiAwLjM0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxMCAgcG93ZXIgMC4wMTE2ICAwLjUgLT4gMC4xMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTEgIHBvd2VyIDAuMTE3ICAwLjUgLT4gMC4zNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTIgIHBvd2VyIDAuMDExNyAgMC41IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjEzICBwb3dlciAwLjExOCAgMC41IC0+IDAuMzQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjE0ICBwb3dlciAwLjAxMTggIDAuNSAtPiAwLjEwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxNSAgcG93ZXIgMC4xMTkgIDAuNSAtPiAwLjM0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxNiAgcG93ZXIgMC4wMTE5ICAwLjUgLT4gMC4xMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTcgIHBvd2VyIDAuMTIxICAwLjUgLT4gMC4zNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTggIHBvd2VyIDAuMDEyMSAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjE5ICBwb3dlciAwLjEyMiAgMC41IC0+IDAuMzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjIwICBwb3dlciAwLjAxMjIgIDAuNSAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyMSAgcG93ZXIgMC4xMjMgIDAuNSAtPiAwLjM1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyMiAgcG93ZXIgMC4wMTIzICAwLjUgLT4gMC4xMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjMgIHBvd2VyIDAuMTI0ICAwLjUgLT4gMC4zNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjQgIHBvd2VyIDAuMDEyNCAgMC41IC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjI1ICBwb3dlciAwLjEyNSAgMC41IC0+IDAuMzU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjI2ICBwb3dlciAwLjAxMjUgIDAuNSAtPiAwLjExMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyNyAgcG93ZXIgMC4xMjYgIDAuNSAtPiAwLjM1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyOCAgcG93ZXIgMC4wMTI2ICAwLjUgLT4gMC4xMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjkgIHBvd2VyIDAuMTI3ICAwLjUgLT4gMC4zNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzAgIHBvd2VyIDAuMDEyNyAgMC41IC0+IDAuMTEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjMxICBwb3dlciAwLjEyOCAgMC41IC0+IDAuMzU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjMyICBwb3dlciAwLjAxMjggIDAuNSAtPiAwLjExMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzMyAgcG93ZXIgMC4xMjkgIDAuNSAtPiAwLjM1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzNCAgcG93ZXIgMC4wMTI5ICAwLjUgLT4gMC4xMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzUgIHBvd2VyIDAuMTMxICAwLjUgLT4gMC4zNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzYgIHBvd2VyIDAuMDEzMSAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjM3ICBwb3dlciAwLjEzMiAgMC41IC0+IDAuMzYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjM4ICBwb3dlciAwLjAxMzIgIDAuNSAtPiAwLjExNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzOSAgcG93ZXIgMC4xMzMgIDAuNSAtPiAwLjM2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0MCAgcG93ZXIgMC4wMTMzICAwLjUgLT4gMC4xMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDEgIHBvd2VyIDAuMTM0ICAwLjUgLT4gMC4zNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDIgIHBvd2VyIDAuMDEzNCAgMC41IC0+IDAuMTE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQzICBwb3dlciAwLjEzNSAgMC41IC0+IDAuMzY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQ0ICBwb3dlciAwLjAxMzUgIDAuNSAtPiAwLjExNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0NSAgcG93ZXIgMC4xMzYgIDAuNSAtPiAwLjM2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0NiAgcG93ZXIgMC4wMTM2ICAwLjUgLT4gMC4xMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDcgIHBvd2VyIDAuMTM3ICAwLjUgLT4gMC4zNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDggIHBvd2VyIDAuMDEzNyAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQ5ICBwb3dlciAwLjEzOCAgMC41IC0+IDAuMzcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjUwICBwb3dlciAwLjAxMzggIDAuNSAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1MSAgcG93ZXIgMC4xMzkgIDAuNSAtPiAwLjM3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1MiAgcG93ZXIgMC4wMTM5ICAwLjUgLT4gMC4xMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTMgIHBvd2VyIDAuMTQxICAwLjUgLT4gMC4zNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTQgIHBvd2VyIDAuMDE0MSAgMC41IC0+IDAuMTE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjU1ICBwb3dlciAwLjE0MiAgMC41IC0+IDAuMzc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjU2ICBwb3dlciAwLjAxNDIgIDAuNSAtPiAwLjExOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1NyAgcG93ZXIgMC4xNDMgIDAuNSAtPiAwLjM3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1OCAgcG93ZXIgMC4wMTQzICAwLjUgLT4gMC4xMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTkgIHBvd2VyIDAuMTQ0ICAwLjUgLT4gMC4zNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjAgIHBvd2VyIDAuMDE0NCAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjYxICBwb3dlciAwLjE0NSAgMC41IC0+IDAuMzgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjYyICBwb3dlciAwLjAxNDUgIDAuNSAtPiAwLjEyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2MyAgcG93ZXIgMC4xNDYgIDAuNSAtPiAwLjM4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2NCAgcG93ZXIgMC4wMTQ2ICAwLjUgLT4gMC4xMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjUgIHBvd2VyIDAuMTQ3ICAwLjUgLT4gMC4zODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjYgIHBvd2VyIDAuMDE0NyAgMC41IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjY3ICBwb3dlciAwLjE0OCAgMC41IC0+IDAuMzg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjY4ICBwb3dlciAwLjAxNDggIDAuNSAtPiAwLjEyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2OSAgcG93ZXIgMC4xNDkgIDAuNSAtPiAwLjM4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3MCAgcG93ZXIgMC4wMTQ5ICAwLjUgLT4gMC4xMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzEgIHBvd2VyIDAuMTUxICAwLjUgLT4gMC4zODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzIgIHBvd2VyIDAuMDE1MSAgMC41IC0+IDAuMTIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjczICBwb3dlciAwLjE1MiAgMC41IC0+IDAuMzkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjc0ICBwb3dlciAwLjAxNTIgIDAuNSAtPiAwLjEyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3NSAgcG93ZXIgMC4xNTMgIDAuNSAtPiAwLjM5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3NiAgcG93ZXIgMC4wMTUzICAwLjUgLT4gMC4xMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzcgIHBvd2VyIDAuMTU0ICAwLjUgLT4gMC4zOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzggIHBvd2VyIDAuMDE1NCAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjc5ICBwb3dlciAwLjE1NSAgMC41IC0+IDAuMzk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjgwICBwb3dlciAwLjAxNTUgIDAuNSAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4MSAgcG93ZXIgMC4xNTYgIDAuNSAtPiAwLjM5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4MiAgcG93ZXIgMC4wMTU2ICAwLjUgLT4gMC4xMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODMgIHBvd2VyIDAuMTU3ICAwLjUgLT4gMC4zOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODQgIHBvd2VyIDAuMDE1NyAgMC41IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjg1ICBwb3dlciAwLjE1OCAgMC41IC0+IDAuMzk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjg2ICBwb3dlciAwLjAxNTggIDAuNSAtPiAwLjEyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4NyAgcG93ZXIgMC4xNTkgIDAuNSAtPiAwLjM5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4OCAgcG93ZXIgMC4wMTU5ICAwLjUgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODkgIHBvd2VyIDAuMTYxICAwLjUgLT4gMC40MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTAgIHBvd2VyIDAuMDE2MSAgMC41IC0+IDAuMTI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjkxICBwb3dlciAwLjE2MiAgMC41IC0+IDAuNDAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjkyICBwb3dlciAwLjAxNjIgIDAuNSAtPiAwLjEyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5MyAgcG93ZXIgMC4xNjMgIDAuNSAtPiAwLjQwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5NCAgcG93ZXIgMC4wMTYzICAwLjUgLT4gMC4xMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTUgIHBvd2VyIDAuMTY0ICAwLjUgLT4gMC40MDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTYgIHBvd2VyIDAuMDE2NCAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjk3ICBwb3dlciAwLjE2NSAgMC41IC0+IDAuNDA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjk4ICBwb3dlciAwLjAxNjUgIDAuNSAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5OSAgcG93ZXIgMC4xNjYgIDAuNSAtPiAwLjQwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwMCAgcG93ZXIgMC4wMTY2ICAwLjUgLT4gMC4xMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDEgIHBvd2VyIDAuMTY3ICAwLjUgLT4gMC40MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDIgIHBvd2VyIDAuMDE2NyAgMC41IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzAzICBwb3dlciAwLjE2OCAgMC41IC0+IDAuNDEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzA0ICBwb3dlciAwLjAxNjggIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwNSAgcG93ZXIgMC4xNjkgIDAuNSAtPiAwLjQxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwNiAgcG93ZXIgMC4wMTY5ICAwLjUgLT4gMC4xMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDcgIHBvd2VyIDAuMTcxICAwLjUgLT4gMC40MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDggIHBvd2VyIDAuMDE3MSAgMC41IC0+IDAuMTMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzA5ICBwb3dlciAwLjE3MiAgMC41IC0+IDAuNDE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzEwICBwb3dlciAwLjAxNzIgIDAuNSAtPiAwLjEzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxMSAgcG93ZXIgMC4xNzMgIDAuNSAtPiAwLjQxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxMiAgcG93ZXIgMC4wMTczICAwLjUgLT4gMC4xMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTMgIHBvd2VyIDAuMTc0ICAwLjUgLT4gMC40MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTQgIHBvd2VyIDAuMDE3NCAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzE1ICBwb3dlciAwLjE3NSAgMC41IC0+IDAuNDE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzE2ICBwb3dlciAwLjAxNzUgIDAuNSAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxNyAgcG93ZXIgMC4xNzYgIDAuNSAtPiAwLjQyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxOCAgcG93ZXIgMC4wMTc2ICAwLjUgLT4gMC4xMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTkgIHBvd2VyIDAuMTc3ICAwLjUgLT4gMC40MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjAgIHBvd2VyIDAuMDE3NyAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzIxICBwb3dlciAwLjE3OCAgMC41IC0+IDAuNDIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzIyICBwb3dlciAwLjAxNzggIDAuNSAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyMyAgcG93ZXIgMC4xNzkgIDAuNSAtPiAwLjQyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyNCAgcG93ZXIgMC4wMTc5ICAwLjUgLT4gMC4xMzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjUgIHBvd2VyIDAuMTgxICAwLjUgLT4gMC40MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjYgIHBvd2VyIDAuMDE4MSAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzI3ICBwb3dlciAwLjE4MiAgMC41IC0+IDAuNDI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzI4ICBwb3dlciAwLjAxODIgIDAuNSAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyOSAgcG93ZXIgMC4xODMgIDAuNSAtPiAwLjQyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzMCAgcG93ZXIgMC4wMTgzICAwLjUgLT4gMC4xMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzEgIHBvd2VyIDAuMTg0ICAwLjUgLT4gMC40MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzIgIHBvd2VyIDAuMDE4NCAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzMzICBwb3dlciAwLjE4NSAgMC41IC0+IDAuNDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzM0ICBwb3dlciAwLjAxODUgIDAuNSAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzNSAgcG93ZXIgMC4xODYgIDAuNSAtPiAwLjQzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzNiAgcG93ZXIgMC4wMTg2ICAwLjUgLT4gMC4xMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzcgIHBvd2VyIDAuMTg3ICAwLjUgLT4gMC40MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzggIHBvd2VyIDAuMDE4NyAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzM5ICBwb3dlciAwLjE4OCAgMC41IC0+IDAuNDM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQwICBwb3dlciAwLjAxODggIDAuNSAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0MSAgcG93ZXIgMC4xODkgIDAuNSAtPiAwLjQzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0MiAgcG93ZXIgMC4wMTg5ICAwLjUgLT4gMC4xMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDMgIHBvd2VyIDAuMTkxICAwLjUgLT4gMC40MzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDQgIHBvd2VyIDAuMDE5MSAgMC41IC0+IDAuMTM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQ1ICBwb3dlciAwLjE5MiAgMC41IC0+IDAuNDM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQ2ICBwb3dlciAwLjAxOTIgIDAuNSAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0NyAgcG93ZXIgMC4xOTMgIDAuNSAtPiAwLjQzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0OCAgcG93ZXIgMC4wMTkzICAwLjUgLT4gMC4xMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDkgIHBvd2VyIDAuMTk0ICAwLjUgLT4gMC40NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTAgIHBvd2VyIDAuMDE5NCAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzUxICBwb3dlciAwLjE5NSAgMC41IC0+IDAuNDQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzUyICBwb3dlciAwLjAxOTUgIDAuNSAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1MyAgcG93ZXIgMC4xOTYgIDAuNSAtPiAwLjQ0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1NCAgcG93ZXIgMC4wMTk2ICAwLjUgLT4gMC4xNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTUgIHBvd2VyIDAuMTk3ICAwLjUgLT4gMC40NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTYgIHBvd2VyIDAuMDE5NyAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzU3ICBwb3dlciAwLjE5OCAgMC41IC0+IDAuNDQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzU4ICBwb3dlciAwLjAxOTggIDAuNSAtPiAwLjE0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1OSAgcG93ZXIgMC4xOTkgIDAuNSAtPiAwLjQ0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2MCAgcG93ZXIgMC4wMTk5ICAwLjUgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjEgIHBvd2VyIDAuMjAxICAwLjUgLT4gMC40NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjIgIHBvd2VyIDAuMDIwMSAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzYzICBwb3dlciAwLjIwMiAgMC41IC0+IDAuNDQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzY0ICBwb3dlciAwLjAyMDIgIDAuNSAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2NSAgcG93ZXIgMC4yMDMgIDAuNSAtPiAwLjQ1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2NiAgcG93ZXIgMC4wMjAzICAwLjUgLT4gMC4xNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjcgIHBvd2VyIDAuMjA0ICAwLjUgLT4gMC40NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjggIHBvd2VyIDAuMDIwNCAgMC41IC0+IDAuMTQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzY5ICBwb3dlciAwLjIwNSAgMC41IC0+IDAuNDUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzcwICBwb3dlciAwLjAyMDUgIDAuNSAtPiAwLjE0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3MSAgcG93ZXIgMC4yMDYgIDAuNSAtPiAwLjQ1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3MiAgcG93ZXIgMC4wMjA2ICAwLjUgLT4gMC4xNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzMgIHBvd2VyIDAuMjA3ICAwLjUgLT4gMC40NTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzQgIHBvd2VyIDAuMDIwNyAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzc1ICBwb3dlciAwLjIwOCAgMC41IC0+IDAuNDU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzc2ICBwb3dlciAwLjAyMDggIDAuNSAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3NyAgcG93ZXIgMC4yMDkgIDAuNSAtPiAwLjQ1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3OCAgcG93ZXIgMC4wMjA5ICAwLjUgLT4gMC4xNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzkgIHBvd2VyIDAuMjExICAwLjUgLT4gMC40NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODAgIHBvd2VyIDAuMDIxMSAgMC41IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzgxICBwb3dlciAwLjIxMiAgMC41IC0+IDAuNDYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzgyICBwb3dlciAwLjAyMTIgIDAuNSAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4MyAgcG93ZXIgMC4yMTMgIDAuNSAtPiAwLjQ2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4NCAgcG93ZXIgMC4wMjEzICAwLjUgLT4gMC4xNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODUgIHBvd2VyIDAuMjE0ICAwLjUgLT4gMC40NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODYgIHBvd2VyIDAuMDIxNCAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzg3ICBwb3dlciAwLjIxNSAgMC41IC0+IDAuNDY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzg4ICBwb3dlciAwLjAyMTUgIDAuNSAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4OSAgcG93ZXIgMC4yMTYgIDAuNSAtPiAwLjQ2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5MCAgcG93ZXIgMC4wMjE2ICAwLjUgLT4gMC4xNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTEgIHBvd2VyIDAuMjE3ICAwLjUgLT4gMC40NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTIgIHBvd2VyIDAuMDIxNyAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzkzICBwb3dlciAwLjIxOCAgMC41IC0+IDAuNDY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzk0ICBwb3dlciAwLjAyMTggIDAuNSAtPiAwLjE0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5NSAgcG93ZXIgMC4yMTkgIDAuNSAtPiAwLjQ2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5NiAgcG93ZXIgMC4wMjE5ICAwLjUgLT4gMC4xNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTcgIHBvd2VyIDAuMjIxICAwLjUgLT4gMC40NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTggIHBvd2VyIDAuMDIyMSAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzk5ICBwb3dlciAwLjIyMiAgMC41IC0+IDAuNDcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDAwICBwb3dlciAwLjAyMjIgIDAuNSAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwMSAgcG93ZXIgMC4yMjMgIDAuNSAtPiAwLjQ3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwMiAgcG93ZXIgMC4wMjIzICAwLjUgLT4gMC4xNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDMgIHBvd2VyIDAuMjI0ICAwLjUgLT4gMC40NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDQgIHBvd2VyIDAuMDIyNCAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDA1ICBwb3dlciAwLjIyNSAgMC41IC0+IDAuNDc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDA2ICBwb3dlciAwLjAyMjUgIDAuNSAtPiAwLjE1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwNyAgcG93ZXIgMC4yMjYgIDAuNSAtPiAwLjQ3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwOCAgcG93ZXIgMC4wMjI2ICAwLjUgLT4gMC4xNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDkgIHBvd2VyIDAuMjI3ICAwLjUgLT4gMC40NzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTAgIHBvd2VyIDAuMDIyNyAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDExICBwb3dlciAwLjIyOCAgMC41IC0+IDAuNDc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDEyICBwb3dlciAwLjAyMjggIDAuNSAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxMyAgcG93ZXIgMC4yMjkgIDAuNSAtPiAwLjQ3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxNCAgcG93ZXIgMC4wMjI5ICAwLjUgLT4gMC4xNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTUgIHBvd2VyIDAuMjMxICAwLjUgLT4gMC40ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTYgIHBvd2VyIDAuMDIzMSAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDE3ICBwb3dlciAwLjIzMiAgMC41IC0+IDAuNDgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDE4ICBwb3dlciAwLjAyMzIgIDAuNSAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxOSAgcG93ZXIgMC4yMzMgIDAuNSAtPiAwLjQ4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyMCAgcG93ZXIgMC4wMjMzICAwLjUgLT4gMC4xNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjEgIHBvd2VyIDAuMjM0ICAwLjUgLT4gMC40ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjIgIHBvd2VyIDAuMDIzNCAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDIzICBwb3dlciAwLjIzNSAgMC41IC0+IDAuNDg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDI0ICBwb3dlciAwLjAyMzUgIDAuNSAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyNSAgcG93ZXIgMC4yMzYgIDAuNSAtPiAwLjQ4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyNiAgcG93ZXIgMC4wMjM2ICAwLjUgLT4gMC4xNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjcgIHBvd2VyIDAuMjM3ICAwLjUgLT4gMC40ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjggIHBvd2VyIDAuMDIzNyAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDI5ICBwb3dlciAwLjIzOCAgMC41IC0+IDAuNDg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDMwICBwb3dlciAwLjAyMzggIDAuNSAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzMSAgcG93ZXIgMC4yMzkgIDAuNSAtPiAwLjQ4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzMiAgcG93ZXIgMC4wMjM5ICAwLjUgLT4gMC4xNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzMgIHBvd2VyIDAuMjQxICAwLjUgLT4gMC40OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzQgIHBvd2VyIDAuMDI0MSAgMC41IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDM1ICBwb3dlciAwLjI0MiAgMC41IC0+IDAuNDkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDM2ICBwb3dlciAwLjAyNDIgIDAuNSAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzNyAgcG93ZXIgMC4yNDMgIDAuNSAtPiAwLjQ5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzOCAgcG93ZXIgMC4wMjQzICAwLjUgLT4gMC4xNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzkgIHBvd2VyIDAuMjQ0ICAwLjUgLT4gMC40OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDAgIHBvd2VyIDAuMDI0NCAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQxICBwb3dlciAwLjI0NSAgMC41IC0+IDAuNDk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQyICBwb3dlciAwLjAyNDUgIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0MyAgcG93ZXIgMC4yNDYgIDAuNSAtPiAwLjQ5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0NCAgcG93ZXIgMC4wMjQ2ICAwLjUgLT4gMC4xNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDUgIHBvd2VyIDAuMjQ3ICAwLjUgLT4gMC40OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDYgIHBvd2VyIDAuMDI0NyAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQ3ICBwb3dlciAwLjI0OCAgMC41IC0+IDAuNDk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQ4ICBwb3dlciAwLjAyNDggIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0OSAgcG93ZXIgMC4yNDkgIDAuNSAtPiAwLjQ5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1MCAgcG93ZXIgMC4wMjQ5ICAwLjUgLT4gMC4xNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTEgIHBvd2VyIDAuMjUxICAwLjUgLT4gMC41MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTIgIHBvd2VyIDAuMDI1MSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDUzICBwb3dlciAwLjI1MiAgMC41IC0+IDAuNTAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDU0ICBwb3dlciAwLjAyNTIgIDAuNSAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1NSAgcG93ZXIgMC4yNTMgIDAuNSAtPiAwLjUwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1NiAgcG93ZXIgMC4wMjUzICAwLjUgLT4gMC4xNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTcgIHBvd2VyIDAuMjU0ICAwLjUgLT4gMC41MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTggIHBvd2VyIDAuMDI1NCAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDU5ICBwb3dlciAwLjI1NSAgMC41IC0+IDAuNTA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDYwICBwb3dlciAwLjAyNTUgIDAuNSAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2MSAgcG93ZXIgMC4yNTYgIDAuNSAtPiAwLjUwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2MiAgcG93ZXIgMC4wMjU2ICAwLjUgLT4gMC4xNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjMgIHBvd2VyIDAuMjU3ICAwLjUgLT4gMC41MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjQgIHBvd2VyIDAuMDI1NyAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDY1ICBwb3dlciAwLjI1OCAgMC41IC0+IDAuNTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDY2ICBwb3dlciAwLjAyNTggIDAuNSAtPiAwLjE2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2NyAgcG93ZXIgMC4yNTkgIDAuNSAtPiAwLjUwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2OCAgcG93ZXIgMC4wMjU5ICAwLjUgLT4gMC4xNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjkgIHBvd2VyIDAuMjYxICAwLjUgLT4gMC41MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzAgIHBvd2VyIDAuMDI2MSAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDcxICBwb3dlciAwLjI2MiAgMC41IC0+IDAuNTEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDcyICBwb3dlciAwLjAyNjIgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3MyAgcG93ZXIgMC4yNjMgIDAuNSAtPiAwLjUxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3NCAgcG93ZXIgMC4wMjYzICAwLjUgLT4gMC4xNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzUgIHBvd2VyIDAuMjY0ICAwLjUgLT4gMC41MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzYgIHBvd2VyIDAuMDI2NCAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDc3ICBwb3dlciAwLjI2NSAgMC41IC0+IDAuNTE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDc4ICBwb3dlciAwLjAyNjUgIDAuNSAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3OSAgcG93ZXIgMC4yNjYgIDAuNSAtPiAwLjUxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4MCAgcG93ZXIgMC4wMjY2ICAwLjUgLT4gMC4xNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODEgIHBvd2VyIDAuMjY3ICAwLjUgLT4gMC41MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODIgIHBvd2VyIDAuMDI2NyAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDgzICBwb3dlciAwLjI2OCAgMC41IC0+IDAuNTE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDg0ICBwb3dlciAwLjAyNjggIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4NSAgcG93ZXIgMC4yNjkgIDAuNSAtPiAwLjUxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4NiAgcG93ZXIgMC4wMjY5ICAwLjUgLT4gMC4xNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODcgIHBvd2VyIDAuMjcxICAwLjUgLT4gMC41MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODggIHBvd2VyIDAuMDI3MSAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDg5ICBwb3dlciAwLjI3MiAgMC41IC0+IDAuNTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDkwICBwb3dlciAwLjAyNzIgIDAuNSAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5MSAgcG93ZXIgMC4yNzMgIDAuNSAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5MiAgcG93ZXIgMC4wMjczICAwLjUgLT4gMC4xNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTMgIHBvd2VyIDAuMjc0ICAwLjUgLT4gMC41MjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTQgIHBvd2VyIDAuMDI3NCAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDk1ICBwb3dlciAwLjI3NSAgMC41IC0+IDAuNTI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDk2ICBwb3dlciAwLjAyNzUgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5NyAgcG93ZXIgMC4yNzYgIDAuNSAtPiAwLjUyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5OCAgcG93ZXIgMC4wMjc2ICAwLjUgLT4gMC4xNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTkgIHBvd2VyIDAuMjc3ICAwLjUgLT4gMC41MjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDAgIHBvd2VyIDAuMDI3NyAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTAxICBwb3dlciAwLjI3OCAgMC41IC0+IDAuNTI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTAyICBwb3dlciAwLjAyNzggIDAuNSAtPiAwLjE2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwMyAgcG93ZXIgMC4yNzkgIDAuNSAtPiAwLjUyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwNCAgcG93ZXIgMC4wMjc5ICAwLjUgLT4gMC4xNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDUgIHBvd2VyIDAuMjgxICAwLjUgLT4gMC41MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDYgIHBvd2VyIDAuMDI4MSAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTA3ICBwb3dlciAwLjI4MiAgMC41IC0+IDAuNTMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTA4ICBwb3dlciAwLjAyODIgIDAuNSAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwOSAgcG93ZXIgMC4yODMgIDAuNSAtPiAwLjUzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxMCAgcG93ZXIgMC4wMjgzICAwLjUgLT4gMC4xNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTEgIHBvd2VyIDAuMjg0ICAwLjUgLT4gMC41MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTIgIHBvd2VyIDAuMDI4NCAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTEzICBwb3dlciAwLjI4NSAgMC41IC0+IDAuNTM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTE0ICBwb3dlciAwLjAyODUgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxNSAgcG93ZXIgMC4yODYgIDAuNSAtPiAwLjUzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxNiAgcG93ZXIgMC4wMjg2ICAwLjUgLT4gMC4xNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTcgIHBvd2VyIDAuMjg3ICAwLjUgLT4gMC41MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTggIHBvd2VyIDAuMDI4NyAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTE5ICBwb3dlciAwLjI4OCAgMC41IC0+IDAuNTM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTIwICBwb3dlciAwLjAyODggIDAuNSAtPiAwLjE3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyMSAgcG93ZXIgMC4yODkgIDAuNSAtPiAwLjUzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyMiAgcG93ZXIgMC4wMjg5ICAwLjUgLT4gMC4xNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjMgIHBvd2VyIDAuMjkxICAwLjUgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjQgIHBvd2VyIDAuMDI5MSAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTI1ICBwb3dlciAwLjI5MiAgMC41IC0+IDAuNTQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTI2ICBwb3dlciAwLjAyOTIgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyNyAgcG93ZXIgMC4yOTMgIDAuNSAtPiAwLjU0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyOCAgcG93ZXIgMC4wMjkzICAwLjUgLT4gMC4xNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjkgIHBvd2VyIDAuMjk0ICAwLjUgLT4gMC41NDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzAgIHBvd2VyIDAuMDI5NCAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTMxICBwb3dlciAwLjI5NSAgMC41IC0+IDAuNTQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTMyICBwb3dlciAwLjAyOTUgIDAuNSAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzMyAgcG93ZXIgMC4yOTYgIDAuNSAtPiAwLjU0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzNCAgcG93ZXIgMC4wMjk2ICAwLjUgLT4gMC4xNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzUgIHBvd2VyIDAuMjk3ICAwLjUgLT4gMC41NDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzYgIHBvd2VyIDAuMDI5NyAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTM3ICBwb3dlciAwLjI5OCAgMC41IC0+IDAuNTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTM4ICBwb3dlciAwLjAyOTggIDAuNSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzOSAgcG93ZXIgMC4yOTkgIDAuNSAtPiAwLjU0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0MCAgcG93ZXIgMC4wMjk5ICAwLjUgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDEgIHBvd2VyIDAuMzAxICAwLjUgLT4gMC41NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDIgIHBvd2VyIDAuMDMwMSAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQzICBwb3dlciAwLjMwMiAgMC41IC0+IDAuNTUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQ0ICBwb3dlciAwLjAzMDIgIDAuNSAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0NSAgcG93ZXIgMC4zMDMgIDAuNSAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0NiAgcG93ZXIgMC4wMzAzICAwLjUgLT4gMC4xNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDcgIHBvd2VyIDAuMzA0ICAwLjUgLT4gMC41NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDggIHBvd2VyIDAuMDMwNCAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQ5ICBwb3dlciAwLjMwNSAgMC41IC0+IDAuNTUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTUwICBwb3dlciAwLjAzMDUgIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1MSAgcG93ZXIgMC4zMDYgIDAuNSAtPiAwLjU1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1MiAgcG93ZXIgMC4wMzA2ICAwLjUgLT4gMC4xNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTMgIHBvd2VyIDAuMzA3ICAwLjUgLT4gMC41NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTQgIHBvd2VyIDAuMDMwNyAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTU1ICBwb3dlciAwLjMwOCAgMC41IC0+IDAuNTU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTU2ICBwb3dlciAwLjAzMDggIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1NyAgcG93ZXIgMC4zMDkgIDAuNSAtPiAwLjU1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1OCAgcG93ZXIgMC4wMzA5ICAwLjUgLT4gMC4xNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTkgIHBvd2VyIDAuMzExICAwLjUgLT4gMC41NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjAgIHBvd2VyIDAuMDMxMSAgMC41IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTYxICBwb3dlciAwLjMxMiAgMC41IC0+IDAuNTU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTYyICBwb3dlciAwLjAzMTIgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2MyAgcG93ZXIgMC4zMTMgIDAuNSAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2NCAgcG93ZXIgMC4wMzEzICAwLjUgLT4gMC4xNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjUgIHBvd2VyIDAuMzE0ICAwLjUgLT4gMC41NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjYgIHBvd2VyIDAuMDMxNCAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTY3ICBwb3dlciAwLjMxNSAgMC41IC0+IDAuNTYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTY4ICBwb3dlciAwLjAzMTUgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2OSAgcG93ZXIgMC4zMTYgIDAuNSAtPiAwLjU2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3MCAgcG93ZXIgMC4wMzE2ICAwLjUgLT4gMC4xNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzEgIHBvd2VyIDAuMzE3ICAwLjUgLT4gMC41NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzIgIHBvd2VyIDAuMDMxNyAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTczICBwb3dlciAwLjMxOCAgMC41IC0+IDAuNTY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTc0ICBwb3dlciAwLjAzMTggIDAuNSAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3NSAgcG93ZXIgMC4zMTkgIDAuNSAtPiAwLjU2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3NiAgcG93ZXIgMC4wMzE5ICAwLjUgLT4gMC4xNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzcgIHBvd2VyIDAuMzIxICAwLjUgLT4gMC41NjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzggIHBvd2VyIDAuMDMyMSAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTc5ICBwb3dlciAwLjMyMiAgMC41IC0+IDAuNTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTgwICBwb3dlciAwLjAzMjIgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4MSAgcG93ZXIgMC4zMjMgIDAuNSAtPiAwLjU2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4MiAgcG93ZXIgMC4wMzIzICAwLjUgLT4gMC4xODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODMgIHBvd2VyIDAuMzI0ICAwLjUgLT4gMC41NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODQgIHBvd2VyIDAuMDMyNCAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTg1ICBwb3dlciAwLjMyNSAgMC41IC0+IDAuNTcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTg2ICBwb3dlciAwLjAzMjUgIDAuNSAtPiAwLjE4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4NyAgcG93ZXIgMC4zMjYgIDAuNSAtPiAwLjU3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4OCAgcG93ZXIgMC4wMzI2ICAwLjUgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODkgIHBvd2VyIDAuMzI3ICAwLjUgLT4gMC41NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTAgIHBvd2VyIDAuMDMyNyAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTkxICBwb3dlciAwLjMyOCAgMC41IC0+IDAuNTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTkyICBwb3dlciAwLjAzMjggIDAuNSAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5MyAgcG93ZXIgMC4zMjkgIDAuNSAtPiAwLjU3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5NCAgcG93ZXIgMC4wMzI5ICAwLjUgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTUgIHBvd2VyIDAuMzMxICAwLjUgLT4gMC41NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTYgIHBvd2VyIDAuMDMzMSAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTk3ICBwb3dlciAwLjMzMiAgMC41IC0+IDAuNTc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTk4ICBwb3dlciAwLjAzMzIgIDAuNSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5OSAgcG93ZXIgMC4zMzMgIDAuNSAtPiAwLjU3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwMCAgcG93ZXIgMC4wMzMzICAwLjUgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDEgIHBvd2VyIDAuMzM0ICAwLjUgLT4gMC41NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDIgIHBvd2VyIDAuMDMzNCAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjAzICBwb3dlciAwLjMzNSAgMC41IC0+IDAuNTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjA0ICBwb3dlciAwLjAzMzUgIDAuNSAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwNSAgcG93ZXIgMC4zMzYgIDAuNSAtPiAwLjU4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwNiAgcG93ZXIgMC4wMzM2ICAwLjUgLT4gMC4xODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDcgIHBvd2VyIDAuMzM3ICAwLjUgLT4gMC41ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDggIHBvd2VyIDAuMDMzNyAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjA5ICBwb3dlciAwLjMzOCAgMC41IC0+IDAuNTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjEwICBwb3dlciAwLjAzMzggIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxMSAgcG93ZXIgMC4zMzkgIDAuNSAtPiAwLjU4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxMiAgcG93ZXIgMC4wMzM5ICAwLjUgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTMgIHBvd2VyIDAuMzQxICAwLjUgLT4gMC41ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTQgIHBvd2VyIDAuMDM0MSAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjE1ICBwb3dlciAwLjM0MiAgMC41IC0+IDAuNTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjE2ICBwb3dlciAwLjAzNDIgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxNyAgcG93ZXIgMC4zNDMgIDAuNSAtPiAwLjU4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxOCAgcG93ZXIgMC4wMzQzICAwLjUgLT4gMC4xODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTkgIHBvd2VyIDAuMzQ0ICAwLjUgLT4gMC41ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjAgIHBvd2VyIDAuMDM0NCAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjIxICBwb3dlciAwLjM0NSAgMC41IC0+IDAuNTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjIyICBwb3dlciAwLjAzNDUgIDAuNSAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyMyAgcG93ZXIgMC4zNDYgIDAuNSAtPiAwLjU4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyNCAgcG93ZXIgMC4wMzQ2ICAwLjUgLT4gMC4xODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjUgIHBvd2VyIDAuMzQ3ICAwLjUgLT4gMC41ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjYgIHBvd2VyIDAuMDM0NyAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjI3ICBwb3dlciAwLjM0OCAgMC41IC0+IDAuNTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjI4ICBwb3dlciAwLjAzNDggIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyOSAgcG93ZXIgMC4zNDkgIDAuNSAtPiAwLjU5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzMCAgcG93ZXIgMC4wMzQ5ICAwLjUgLT4gMC4xODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzEgIHBvd2VyIDAuMzUxICAwLjUgLT4gMC41OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzIgIHBvd2VyIDAuMDM1MSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjMzICBwb3dlciAwLjM1MiAgMC41IC0+IDAuNTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjM0ICBwb3dlciAwLjAzNTIgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzNSAgcG93ZXIgMC4zNTMgIDAuNSAtPiAwLjU5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzNiAgcG93ZXIgMC4wMzUzICAwLjUgLT4gMC4xODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzcgIHBvd2VyIDAuMzU0ICAwLjUgLT4gMC41OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzggIHBvd2VyIDAuMDM1NCAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjM5ICBwb3dlciAwLjM1NSAgMC41IC0+IDAuNTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQwICBwb3dlciAwLjAzNTUgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0MSAgcG93ZXIgMC4zNTYgIDAuNSAtPiAwLjU5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0MiAgcG93ZXIgMC4wMzU2ICAwLjUgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDMgIHBvd2VyIDAuMzU3ICAwLjUgLT4gMC41OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDQgIHBvd2VyIDAuMDM1NyAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQ1ICBwb3dlciAwLjM1OCAgMC41IC0+IDAuNTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQ2ICBwb3dlciAwLjAzNTggIDAuNSAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0NyAgcG93ZXIgMC4zNTkgIDAuNSAtPiAwLjU5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0OCAgcG93ZXIgMC4wMzU5ICAwLjUgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDkgIHBvd2VyIDAuMzYxICAwLjUgLT4gMC42MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTAgIHBvd2VyIDAuMDM2MSAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjUxICBwb3dlciAwLjM2MiAgMC41IC0+IDAuNjAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjUyICBwb3dlciAwLjAzNjIgIDAuNSAtPiAwLjE5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1MyAgcG93ZXIgMC4zNjMgIDAuNSAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1NCAgcG93ZXIgMC4wMzYzICAwLjUgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTUgIHBvd2VyIDAuMzY0ICAwLjUgLT4gMC42MDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTYgIHBvd2VyIDAuMDM2NCAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjU3ICBwb3dlciAwLjM2NSAgMC41IC0+IDAuNjA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjU4ICBwb3dlciAwLjAzNjUgIDAuNSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1OSAgcG93ZXIgMC4zNjYgIDAuNSAtPiAwLjYwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2MCAgcG93ZXIgMC4wMzY2ICAwLjUgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjEgIHBvd2VyIDAuMzY3ICAwLjUgLT4gMC42MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjIgIHBvd2VyIDAuMDM2NyAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjYzICBwb3dlciAwLjM2OCAgMC41IC0+IDAuNjA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjY0ICBwb3dlciAwLjAzNjggIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2NSAgcG93ZXIgMC4zNjkgIDAuNSAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2NiAgcG93ZXIgMC4wMzY5ICAwLjUgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjcgIHBvd2VyIDAuMzcxICAwLjUgLT4gMC42MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjggIHBvd2VyIDAuMDM3MSAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjY5ICBwb3dlciAwLjM3MiAgMC41IC0+IDAuNjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjcwICBwb3dlciAwLjAzNzIgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3MSAgcG93ZXIgMC4zNzMgIDAuNSAtPiAwLjYxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3MiAgcG93ZXIgMC4wMzczICAwLjUgLT4gMC4xOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzMgIHBvd2VyIDAuMzc0ICAwLjUgLT4gMC42MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzQgIHBvd2VyIDAuMDM3NCAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjc1ICBwb3dlciAwLjM3NSAgMC41IC0+IDAuNjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjc2ICBwb3dlciAwLjAzNzUgIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3NyAgcG93ZXIgMC4zNzYgIDAuNSAtPiAwLjYxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3OCAgcG93ZXIgMC4wMzc2ICAwLjUgLT4gMC4xOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzkgIHBvd2VyIDAuMzc3ICAwLjUgLT4gMC42MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODAgIHBvd2VyIDAuMDM3NyAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjgxICBwb3dlciAwLjM3OCAgMC41IC0+IDAuNjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjgyICBwb3dlciAwLjAzNzggIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4MyAgcG93ZXIgMC4zNzkgIDAuNSAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4NCAgcG93ZXIgMC4wMzc5ICAwLjUgLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODUgIHBvd2VyIDAuMzgxICAwLjUgLT4gMC42MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODYgIHBvd2VyIDAuMDM4MSAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjg3ICBwb3dlciAwLjM4MiAgMC41IC0+IDAuNjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjg4ICBwb3dlciAwLjAzODIgIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4OSAgcG93ZXIgMC4zODMgIDAuNSAtPiAwLjYxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5MCAgcG93ZXIgMC4wMzgzICAwLjUgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTEgIHBvd2VyIDAuMzg0ICAwLjUgLT4gMC42MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTIgIHBvd2VyIDAuMDM4NCAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjkzICBwb3dlciAwLjM4NSAgMC41IC0+IDAuNjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjk0ICBwb3dlciAwLjAzODUgIDAuNSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5NSAgcG93ZXIgMC4zODYgIDAuNSAtPiAwLjYyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5NiAgcG93ZXIgMC4wMzg2ICAwLjUgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTcgIHBvd2VyIDAuMzg3ICAwLjUgLT4gMC42MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTggIHBvd2VyIDAuMDM4NyAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjk5ICBwb3dlciAwLjM4OCAgMC41IC0+IDAuNjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzAwICBwb3dlciAwLjAzODggIDAuNSAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwMSAgcG93ZXIgMC4zODkgIDAuNSAtPiAwLjYyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwMiAgcG93ZXIgMC4wMzg5ICAwLjUgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDMgIHBvd2VyIDAuMzkxICAwLjUgLT4gMC42MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDQgIHBvd2VyIDAuMDM5MSAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzA1ICBwb3dlciAwLjM5MiAgMC41IC0+IDAuNjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzA2ICBwb3dlciAwLjAzOTIgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwNyAgcG93ZXIgMC4zOTMgIDAuNSAtPiAwLjYyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwOCAgcG93ZXIgMC4wMzkzICAwLjUgLT4gMC4xOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDkgIHBvd2VyIDAuMzk0ICAwLjUgLT4gMC42MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTAgIHBvd2VyIDAuMDM5NCAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzExICBwb3dlciAwLjM5NSAgMC41IC0+IDAuNjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzEyICBwb3dlciAwLjAzOTUgIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxMyAgcG93ZXIgMC4zOTYgIDAuNSAtPiAwLjYyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxNCAgcG93ZXIgMC4wMzk2ICAwLjUgLT4gMC4xOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTUgIHBvd2VyIDAuMzk3ICAwLjUgLT4gMC42MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTYgIHBvd2VyIDAuMDM5NyAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzE3ICBwb3dlciAwLjM5OCAgMC41IC0+IDAuNjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzE4ICBwb3dlciAwLjAzOTggIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxOSAgcG93ZXIgMC4zOTkgIDAuNSAtPiAwLjYzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyMCAgcG93ZXIgMC4wMzk5ICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjEgIHBvd2VyIDAuNDAxICAwLjUgLT4gMC42MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjIgIHBvd2VyIDAuMDQwMSAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzIzICBwb3dlciAwLjQwMiAgMC41IC0+IDAuNjM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzI0ICBwb3dlciAwLjA0MDIgIDAuNSAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyNSAgcG93ZXIgMC40MDMgIDAuNSAtPiAwLjYzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyNiAgcG93ZXIgMC4wNDAzICAwLjUgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjcgIHBvd2VyIDAuNDA0ICAwLjUgLT4gMC42MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjggIHBvd2VyIDAuMDQwNCAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzI5ICBwb3dlciAwLjQwNSAgMC41IC0+IDAuNjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzMwICBwb3dlciAwLjA0MDUgIDAuNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczMSAgcG93ZXIgMC40MDYgIDAuNSAtPiAwLjYzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczMiAgcG93ZXIgMC4wNDA2ICAwLjUgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzMgIHBvd2VyIDAuNDA3ICAwLjUgLT4gMC42MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzQgIHBvd2VyIDAuMDQwNyAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzM1ICBwb3dlciAwLjQwOCAgMC41IC0+IDAuNjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzM2ICBwb3dlciAwLjA0MDggIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczNyAgcG93ZXIgMC40MDkgIDAuNSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczOCAgcG93ZXIgMC4wNDA5ICAwLjUgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzkgIHBvd2VyIDAuNDExICAwLjUgLT4gMC42NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDAgIHBvd2VyIDAuMDQxMSAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQxICBwb3dlciAwLjQxMiAgMC41IC0+IDAuNjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQyICBwb3dlciAwLjA0MTIgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0MyAgcG93ZXIgMC40MTMgIDAuNSAtPiAwLjY0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0NCAgcG93ZXIgMC4wNDEzICAwLjUgLT4gMC4yMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDUgIHBvd2VyIDAuNDE0ICAwLjUgLT4gMC42NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDYgIHBvd2VyIDAuMDQxNCAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQ3ICBwb3dlciAwLjQxNSAgMC41IC0+IDAuNjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQ4ICBwb3dlciAwLjA0MTUgIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0OSAgcG93ZXIgMC40MTYgIDAuNSAtPiAwLjY0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1MCAgcG93ZXIgMC4wNDE2ICAwLjUgLT4gMC4yMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTEgIHBvd2VyIDAuNDE3ICAwLjUgLT4gMC42NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTIgIHBvd2VyIDAuMDQxNyAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzUzICBwb3dlciAwLjQxOCAgMC41IC0+IDAuNjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzU0ICBwb3dlciAwLjA0MTggIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1NSAgcG93ZXIgMC40MTkgIDAuNSAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1NiAgcG93ZXIgMC4wNDE5ICAwLjUgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTcgIHBvd2VyIDAuNDIxICAwLjUgLT4gMC42NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTggIHBvd2VyIDAuMDQyMSAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzU5ICBwb3dlciAwLjQyMiAgMC41IC0+IDAuNjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzYwICBwb3dlciAwLjA0MjIgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2MSAgcG93ZXIgMC40MjMgIDAuNSAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2MiAgcG93ZXIgMC4wNDIzICAwLjUgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjMgIHBvd2VyIDAuNDI0ICAwLjUgLT4gMC42NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjQgIHBvd2VyIDAuMDQyNCAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzY1ICBwb3dlciAwLjQyNSAgMC41IC0+IDAuNjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzY2ICBwb3dlciAwLjA0MjUgIDAuNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2NyAgcG93ZXIgMC40MjYgIDAuNSAtPiAwLjY1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2OCAgcG93ZXIgMC4wNDI2ICAwLjUgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjkgIHBvd2VyIDAuNDI3ICAwLjUgLT4gMC42NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzAgIHBvd2VyIDAuMDQyNyAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzcxICBwb3dlciAwLjQyOCAgMC41IC0+IDAuNjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzcyICBwb3dlciAwLjA0MjggIDAuNSAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3MyAgcG93ZXIgMC40MjkgIDAuNSAtPiAwLjY1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3NCAgcG93ZXIgMC4wNDI5ICAwLjUgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzUgIHBvd2VyIDAuNDMxICAwLjUgLT4gMC42NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzYgIHBvd2VyIDAuMDQzMSAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzc3ICBwb3dlciAwLjQzMiAgMC41IC0+IDAuNjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzc4ICBwb3dlciAwLjA0MzIgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3OSAgcG93ZXIgMC40MzMgIDAuNSAtPiAwLjY1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4MCAgcG93ZXIgMC4wNDMzICAwLjUgLT4gMC4yMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODEgIHBvd2VyIDAuNDM0ICAwLjUgLT4gMC42NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODIgIHBvd2VyIDAuMDQzNCAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzgzICBwb3dlciAwLjQzNSAgMC41IC0+IDAuNjYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzg0ICBwb3dlciAwLjA0MzUgIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4NSAgcG93ZXIgMC40MzYgIDAuNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4NiAgcG93ZXIgMC4wNDM2ICAwLjUgLT4gMC4yMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODcgIHBvd2VyIDAuNDM3ICAwLjUgLT4gMC42NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODggIHBvd2VyIDAuMDQzNyAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzg5ICBwb3dlciAwLjQzOCAgMC41IC0+IDAuNjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzkwICBwb3dlciAwLjA0MzggIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5MSAgcG93ZXIgMC40MzkgIDAuNSAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5MiAgcG93ZXIgMC4wNDM5ICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTMgIHBvd2VyIDAuNDQxICAwLjUgLT4gMC42NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTQgIHBvd2VyIDAuMDQ0MSAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzk1ICBwb3dlciAwLjQ0MiAgMC41IC0+IDAuNjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzk2ICBwb3dlciAwLjA0NDIgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5NyAgcG93ZXIgMC40NDMgIDAuNSAtPiAwLjY2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5OCAgcG93ZXIgMC4wNDQzICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTkgIHBvd2VyIDAuNDQ0ICAwLjUgLT4gMC42NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDAgIHBvd2VyIDAuMDQ0NCAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODAxICBwb3dlciAwLjQ0NSAgMC41IC0+IDAuNjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODAyICBwb3dlciAwLjA0NDUgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwMyAgcG93ZXIgMC40NDYgIDAuNSAtPiAwLjY2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwNCAgcG93ZXIgMC4wNDQ2ICAwLjUgLT4gMC4yMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDUgIHBvd2VyIDAuNDQ3ICAwLjUgLT4gMC42NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDYgIHBvd2VyIDAuMDQ0NyAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODA3ICBwb3dlciAwLjQ0OCAgMC41IC0+IDAuNjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODA4ICBwb3dlciAwLjA0NDggIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwOSAgcG93ZXIgMC40NDkgIDAuNSAtPiAwLjY3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxMCAgcG93ZXIgMC4wNDQ5ICAwLjUgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTEgIHBvd2VyIDAuNDUxICAwLjUgLT4gMC42NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTIgIHBvd2VyIDAuMDQ1MSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODEzICBwb3dlciAwLjQ1MiAgMC41IC0+IDAuNjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODE0ICBwb3dlciAwLjA0NTIgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxNSAgcG93ZXIgMC40NTMgIDAuNSAtPiAwLjY3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxNiAgcG93ZXIgMC4wNDUzICAwLjUgLT4gMC4yMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTcgIHBvd2VyIDAuNDU0ICAwLjUgLT4gMC42NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTggIHBvd2VyIDAuMDQ1NCAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODE5ICBwb3dlciAwLjQ1NSAgMC41IC0+IDAuNjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODIwICBwb3dlciAwLjA0NTUgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyMSAgcG93ZXIgMC40NTYgIDAuNSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyMiAgcG93ZXIgMC4wNDU2ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjMgIHBvd2VyIDAuNDU3ICAwLjUgLT4gMC42NzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjQgIHBvd2VyIDAuMDQ1NyAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODI1ICBwb3dlciAwLjQ1OCAgMC41IC0+IDAuNjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODI2ICBwb3dlciAwLjA0NTggIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyNyAgcG93ZXIgMC40NTkgIDAuNSAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyOCAgcG93ZXIgMC4wNDU5ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjkgIHBvd2VyIDAuNDYxICAwLjUgLT4gMC42NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzAgIHBvd2VyIDAuMDQ2MSAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODMxICBwb3dlciAwLjQ2MiAgMC41IC0+IDAuNjgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODMyICBwb3dlciAwLjA0NjIgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzMyAgcG93ZXIgMC40NjMgIDAuNSAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzNCAgcG93ZXIgMC4wNDYzICAwLjUgLT4gMC4yMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzUgIHBvd2VyIDAuNDY0ICAwLjUgLT4gMC42ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzYgIHBvd2VyIDAuMDQ2NCAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODM3ICBwb3dlciAwLjQ2NSAgMC41IC0+IDAuNjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODM4ICBwb3dlciAwLjA0NjUgIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzOSAgcG93ZXIgMC40NjYgIDAuNSAtPiAwLjY4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0MCAgcG93ZXIgMC4wNDY2ICAwLjUgLT4gMC4yMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDEgIHBvd2VyIDAuNDY3ICAwLjUgLT4gMC42ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDIgIHBvd2VyIDAuMDQ2NyAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQzICBwb3dlciAwLjQ2OCAgMC41IC0+IDAuNjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQ0ICBwb3dlciAwLjA0NjggIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0NSAgcG93ZXIgMC40NjkgIDAuNSAtPiAwLjY4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0NiAgcG93ZXIgMC4wNDY5ICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDcgIHBvd2VyIDAuNDcxICAwLjUgLT4gMC42ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDggIHBvd2VyIDAuMDQ3MSAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQ5ICBwb3dlciAwLjQ3MiAgMC41IC0+IDAuNjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODUwICBwb3dlciAwLjA0NzIgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1MSAgcG93ZXIgMC40NzMgIDAuNSAtPiAwLjY4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1MiAgcG93ZXIgMC4wNDczICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTMgIHBvd2VyIDAuNDc0ICAwLjUgLT4gMC42ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTQgIHBvd2VyIDAuMDQ3NCAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODU1ICBwb3dlciAwLjQ3NSAgMC41IC0+IDAuNjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODU2ICBwb3dlciAwLjA0NzUgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1NyAgcG93ZXIgMC40NzYgIDAuNSAtPiAwLjY5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1OCAgcG93ZXIgMC4wNDc2ICAwLjUgLT4gMC4yMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTkgIHBvd2VyIDAuNDc3ICAwLjUgLT4gMC42OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjAgIHBvd2VyIDAuMDQ3NyAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODYxICBwb3dlciAwLjQ3OCAgMC41IC0+IDAuNjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODYyICBwb3dlciAwLjA0NzggIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2MyAgcG93ZXIgMC40NzkgIDAuNSAtPiAwLjY5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2NCAgcG93ZXIgMC4wNDc5ICAwLjUgLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjUgIHBvd2VyIDAuNDgxICAwLjUgLT4gMC42OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjYgIHBvd2VyIDAuMDQ4MSAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODY3ICBwb3dlciAwLjQ4MiAgMC41IC0+IDAuNjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODY4ICBwb3dlciAwLjA0ODIgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2OSAgcG93ZXIgMC40ODMgIDAuNSAtPiAwLjY5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3MCAgcG93ZXIgMC4wNDgzICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzEgIHBvd2VyIDAuNDg0ICAwLjUgLT4gMC42OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzIgIHBvd2VyIDAuMDQ4NCAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODczICBwb3dlciAwLjQ4NSAgMC41IC0+IDAuNjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODc0ICBwb3dlciAwLjA0ODUgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3NSAgcG93ZXIgMC40ODYgIDAuNSAtPiAwLjY5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3NiAgcG93ZXIgMC4wNDg2ICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzcgIHBvd2VyIDAuNDg3ICAwLjUgLT4gMC42OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzggIHBvd2VyIDAuMDQ4NyAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODc5ICBwb3dlciAwLjQ4OCAgMC41IC0+IDAuNjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODgwICBwb3dlciAwLjA0ODggIDAuNSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4MSAgcG93ZXIgMC40ODkgIDAuNSAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4MiAgcG93ZXIgMC4wNDg5ICAwLjUgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODMgIHBvd2VyIDAuNDkxICAwLjUgLT4gMC43MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODQgIHBvd2VyIDAuMDQ5MSAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODg1ICBwb3dlciAwLjQ5MiAgMC41IC0+IDAuNzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODg2ICBwb3dlciAwLjA0OTIgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4NyAgcG93ZXIgMC40OTMgIDAuNSAtPiAwLjcwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4OCAgcG93ZXIgMC4wNDkzICAwLjUgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODkgIHBvd2VyIDAuNDk0ICAwLjUgLT4gMC43MDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTAgIHBvd2VyIDAuMDQ5NCAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODkxICBwb3dlciAwLjQ5NSAgMC41IC0+IDAuNzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODkyICBwb3dlciAwLjA0OTUgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5MyAgcG93ZXIgMC40OTYgIDAuNSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5NCAgcG93ZXIgMC4wNDk2ICAwLjUgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTUgIHBvd2VyIDAuNDk3ICAwLjUgLT4gMC43MDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTYgIHBvd2VyIDAuMDQ5NyAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODk3ICBwb3dlciAwLjQ5OCAgMC41IC0+IDAuNzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODk4ICBwb3dlciAwLjA0OTggIDAuNSAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5OSAgcG93ZXIgMC40OTkgIDAuNSAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwMCAgcG93ZXIgMC4wNDk5ICAwLjUgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDEgIHBvd2VyIDAuNTAxICAwLjUgLT4gMC43MDggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDIgIHBvd2VyIDAuMDUwMSAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTAzICBwb3dlciAwLjUwMiAgMC41IC0+IDAuNzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTA0ICBwb3dlciAwLjA1MDIgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwNSAgcG93ZXIgMC41MDMgIDAuNSAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwNiAgcG93ZXIgMC4wNTAzICAwLjUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDcgIHBvd2VyIDAuNTA0ICAwLjUgLT4gMC43MTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDggIHBvd2VyIDAuMDUwNCAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTA5ICBwb3dlciAwLjUwNSAgMC41IC0+IDAuNzExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTEwICBwb3dlciAwLjA1MDUgIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxMSAgcG93ZXIgMC41MDYgIDAuNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxMiAgcG93ZXIgMC4wNTA2ICAwLjUgLT4gMC4yMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTMgIHBvd2VyIDAuNTA3ICAwLjUgLT4gMC43MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTQgIHBvd2VyIDAuMDUwNyAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTE1ICBwb3dlciAwLjUwOCAgMC41IC0+IDAuNzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTE2ICBwb3dlciAwLjA1MDggIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxNyAgcG93ZXIgMC41MDkgIDAuNSAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxOCAgcG93ZXIgMC4wNTA5ICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTkgIHBvd2VyIDAuNTExICAwLjUgLT4gMC43MTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjAgIHBvd2VyIDAuMDUxMSAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTIxICBwb3dlciAwLjUxMiAgMC41IC0+IDAuNzE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTIyICBwb3dlciAwLjA1MTIgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyMyAgcG93ZXIgMC41MTMgIDAuNSAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyNCAgcG93ZXIgMC4wNTEzICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjUgIHBvd2VyIDAuNTE0ICAwLjUgLT4gMC43MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjYgIHBvd2VyIDAuMDUxNCAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTI3ICBwb3dlciAwLjUxNSAgMC41IC0+IDAuNzE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTI4ICBwb3dlciAwLjA1MTUgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyOSAgcG93ZXIgMC41MTYgIDAuNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzMCAgcG93ZXIgMC4wNTE2ICAwLjUgLT4gMC4yMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzEgIHBvd2VyIDAuNTE3ICAwLjUgLT4gMC43MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzIgIHBvd2VyIDAuMDUxNyAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTMzICBwb3dlciAwLjUxOCAgMC41IC0+IDAuNzIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTM0ICBwb3dlciAwLjA1MTggIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzNSAgcG93ZXIgMC41MTkgIDAuNSAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzNiAgcG93ZXIgMC4wNTE5ICAwLjUgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzcgIHBvd2VyIDAuNTIxICAwLjUgLT4gMC43MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzggIHBvd2VyIDAuMDUyMSAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTM5ICBwb3dlciAwLjUyMiAgMC41IC0+IDAuNzIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQwICBwb3dlciAwLjA1MjIgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0MSAgcG93ZXIgMC41MjMgIDAuNSAtPiAwLjcyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0MiAgcG93ZXIgMC4wNTIzICAwLjUgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDMgIHBvd2VyIDAuNTI0ICAwLjUgLT4gMC43MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDQgIHBvd2VyIDAuMDUyNCAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQ1ICBwb3dlciAwLjUyNSAgMC41IC0+IDAuNzI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQ2ICBwb3dlciAwLjA1MjUgIDAuNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0NyAgcG93ZXIgMC41MjYgIDAuNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0OCAgcG93ZXIgMC4wNTI2ICAwLjUgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDkgIHBvd2VyIDAuNTI3ICAwLjUgLT4gMC43MjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTAgIHBvd2VyIDAuMDUyNyAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTUxICBwb3dlciAwLjUyOCAgMC41IC0+IDAuNzI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTUyICBwb3dlciAwLjA1MjggIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1MyAgcG93ZXIgMC41MjkgIDAuNSAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1NCAgcG93ZXIgMC4wNTI5ICAwLjUgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTUgIHBvd2VyIDAuNTMxICAwLjUgLT4gMC43MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTYgIHBvd2VyIDAuMDUzMSAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTU3ICBwb3dlciAwLjUzMiAgMC41IC0+IDAuNzI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTU4ICBwb3dlciAwLjA1MzIgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1OSAgcG93ZXIgMC41MzMgIDAuNSAtPiAwLjczMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2MCAgcG93ZXIgMC4wNTMzICAwLjUgLT4gMC4yMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjEgIHBvd2VyIDAuNTM0ICAwLjUgLT4gMC43MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjIgIHBvd2VyIDAuMDUzNCAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTYzICBwb3dlciAwLjUzNSAgMC41IC0+IDAuNzMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTY0ICBwb3dlciAwLjA1MzUgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2NSAgcG93ZXIgMC41MzYgIDAuNSAtPiAwLjczMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2NiAgcG93ZXIgMC4wNTM2ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjcgIHBvd2VyIDAuNTM3ICAwLjUgLT4gMC43MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjggIHBvd2VyIDAuMDUzNyAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTY5ICBwb3dlciAwLjUzOCAgMC41IC0+IDAuNzMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTcwICBwb3dlciAwLjA1MzggIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3MSAgcG93ZXIgMC41MzkgIDAuNSAtPiAwLjczNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3MiAgcG93ZXIgMC4wNTM5ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzMgIHBvd2VyIDAuNTQxICAwLjUgLT4gMC43MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzQgIHBvd2VyIDAuMDU0MSAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTc1ICBwb3dlciAwLjU0MiAgMC41IC0+IDAuNzM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTc2ICBwb3dlciAwLjA1NDIgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3NyAgcG93ZXIgMC41NDMgIDAuNSAtPiAwLjczNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3OCAgcG93ZXIgMC4wNTQzICAwLjUgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzkgIHBvd2VyIDAuNTQ0ICAwLjUgLT4gMC43MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODAgIHBvd2VyIDAuMDU0NCAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTgxICBwb3dlciAwLjU0NSAgMC41IC0+IDAuNzM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTgyICBwb3dlciAwLjA1NDUgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4MyAgcG93ZXIgMC41NDYgIDAuNSAtPiAwLjczOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4NCAgcG93ZXIgMC4wNTQ2ICAwLjUgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODUgIHBvd2VyIDAuNTQ3ICAwLjUgLT4gMC43NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODYgIHBvd2VyIDAuMDU0NyAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTg3ICBwb3dlciAwLjU0OCAgMC41IC0+IDAuNzQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTg4ICBwb3dlciAwLjA1NDggIDAuNSAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4OSAgcG93ZXIgMC41NDkgIDAuNSAtPiAwLjc0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5MCAgcG93ZXIgMC4wNTQ5ICAwLjUgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTEgIHBvd2VyIDAuNTUxICAwLjUgLT4gMC43NDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTIgIHBvd2VyIDAuMDU1MSAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTkzICBwb3dlciAwLjU1MiAgMC41IC0+IDAuNzQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTk0ICBwb3dlciAwLjA1NTIgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5NSAgcG93ZXIgMC41NTMgIDAuNSAtPiAwLjc0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5NiAgcG93ZXIgMC4wNTUzICAwLjUgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTcgIHBvd2VyIDAuNTU0ICAwLjUgLT4gMC43NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTggIHBvd2VyIDAuMDU1NCAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTk5ICBwb3dlciAwLjU1NSAgMC41IC0+IDAuNzQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDAwICBwb3dlciAwLjA1NTUgIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwMSAgcG93ZXIgMC41NTYgIDAuNSAtPiAwLjc0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwMiAgcG93ZXIgMC4wNTU2ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDMgIHBvd2VyIDAuNTU3ICAwLjUgLT4gMC43NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDQgIHBvd2VyIDAuMDU1NyAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDA1ICBwb3dlciAwLjU1OCAgMC41IC0+IDAuNzQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDA2ICBwb3dlciAwLjA1NTggIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwNyAgcG93ZXIgMC41NTkgIDAuNSAtPiAwLjc0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwOCAgcG93ZXIgMC4wNTU5ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDkgIHBvd2VyIDAuNTYxICAwLjUgLT4gMC43NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTAgIHBvd2VyIDAuMDU2MSAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDExICBwb3dlciAwLjU2MiAgMC41IC0+IDAuNzUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDEyICBwb3dlciAwLjA1NjIgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxMyAgcG93ZXIgMC41NjMgIDAuNSAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxNCAgcG93ZXIgMC4wNTYzICAwLjUgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTUgIHBvd2VyIDAuNTY0ICAwLjUgLT4gMC43NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTYgIHBvd2VyIDAuMDU2NCAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDE3ICBwb3dlciAwLjU2NSAgMC41IC0+IDAuNzUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDE4ICBwb3dlciAwLjA1NjUgIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxOSAgcG93ZXIgMC41NjYgIDAuNSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyMCAgcG93ZXIgMC4wNTY2ICAwLjUgLT4gMC4yMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjEgIHBvd2VyIDAuNTY3ICAwLjUgLT4gMC43NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjIgIHBvd2VyIDAuMDU2NyAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDIzICBwb3dlciAwLjU2OCAgMC41IC0+IDAuNzU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDI0ICBwb3dlciAwLjA1NjggIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyNSAgcG93ZXIgMC41NjkgIDAuNSAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyNiAgcG93ZXIgMC4wNTY5ICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjcgIHBvd2VyIDAuNTcxICAwLjUgLT4gMC43NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjggIHBvd2VyIDAuMDU3MSAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDI5ICBwb3dlciAwLjU3MiAgMC41IC0+IDAuNzU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDMwICBwb3dlciAwLjA1NzIgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzMSAgcG93ZXIgMC41NzMgIDAuNSAtPiAwLjc1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzMiAgcG93ZXIgMC4wNTczICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzMgIHBvd2VyIDAuNTc0ICAwLjUgLT4gMC43NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzQgIHBvd2VyIDAuMDU3NCAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDM1ICBwb3dlciAwLjU3NSAgMC41IC0+IDAuNzU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDM2ICBwb3dlciAwLjA1NzUgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzNyAgcG93ZXIgMC41NzYgIDAuNSAtPiAwLjc1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzOCAgcG93ZXIgMC4wNTc2ICAwLjUgLT4gMC4yNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzkgIHBvd2VyIDAuNTc3ICAwLjUgLT4gMC43NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDAgIHBvd2VyIDAuMDU3NyAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQxICBwb3dlciAwLjU3OCAgMC41IC0+IDAuNzYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQyICBwb3dlciAwLjA1NzggIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0MyAgcG93ZXIgMC41NzkgIDAuNSAtPiAwLjc2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0NCAgcG93ZXIgMC4wNTc5ICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDUgIHBvd2VyIDAuNTgxICAwLjUgLT4gMC43NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDYgIHBvd2VyIDAuMDU4MSAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQ3ICBwb3dlciAwLjU4MiAgMC41IC0+IDAuNzYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQ4ICBwb3dlciAwLjA1ODIgIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0OSAgcG93ZXIgMC41ODMgIDAuNSAtPiAwLjc2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1MCAgcG93ZXIgMC4wNTgzICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTEgIHBvd2VyIDAuNTg0ICAwLjUgLT4gMC43NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTIgIHBvd2VyIDAuMDU4NCAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDUzICBwb3dlciAwLjU4NSAgMC41IC0+IDAuNzY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDU0ICBwb3dlciAwLjA1ODUgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1NSAgcG93ZXIgMC41ODYgIDAuNSAtPiAwLjc2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1NiAgcG93ZXIgMC4wNTg2ICAwLjUgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTcgIHBvd2VyIDAuNTg3ICAwLjUgLT4gMC43NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTggIHBvd2VyIDAuMDU4NyAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDU5ICBwb3dlciAwLjU4OCAgMC41IC0+IDAuNzY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDYwICBwb3dlciAwLjA1ODggIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2MSAgcG93ZXIgMC41ODkgIDAuNSAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2MiAgcG93ZXIgMC4wNTg5ICAwLjUgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjMgIHBvd2VyIDAuNTkxICAwLjUgLT4gMC43NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjQgIHBvd2VyIDAuMDU5MSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDY1ICBwb3dlciAwLjU5MiAgMC41IC0+IDAuNzY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDY2ICBwb3dlciAwLjA1OTIgIDAuNSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2NyAgcG93ZXIgMC41OTMgIDAuNSAtPiAwLjc3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2OCAgcG93ZXIgMC4wNTkzICAwLjUgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjkgIHBvd2VyIDAuNTk0ICAwLjUgLT4gMC43NzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzAgIHBvd2VyIDAuMDU5NCAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDcxICBwb3dlciAwLjU5NSAgMC41IC0+IDAuNzcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDcyICBwb3dlciAwLjA1OTUgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3MyAgcG93ZXIgMC41OTYgIDAuNSAtPiAwLjc3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3NCAgcG93ZXIgMC4wNTk2ICAwLjUgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzUgIHBvd2VyIDAuNTk3ICAwLjUgLT4gMC43NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzYgIHBvd2VyIDAuMDU5NyAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDc3ICBwb3dlciAwLjU5OCAgMC41IC0+IDAuNzczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDc4ICBwb3dlciAwLjA1OTggIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3OSAgcG93ZXIgMC41OTkgIDAuNSAtPiAwLjc3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4MCAgcG93ZXIgMC4wNTk5ICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODEgIHBvd2VyIDAuNjAxICAwLjUgLT4gMC43NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODIgIHBvd2VyIDAuMDYwMSAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDgzICBwb3dlciAwLjYwMiAgMC41IC0+IDAuNzc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDg0ICBwb3dlciAwLjA2MDIgIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4NSAgcG93ZXIgMC42MDMgIDAuNSAtPiAwLjc3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4NiAgcG93ZXIgMC4wNjAzICAwLjUgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODcgIHBvd2VyIDAuNjA0ICAwLjUgLT4gMC43NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODggIHBvd2VyIDAuMDYwNCAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDg5ICBwb3dlciAwLjYwNSAgMC41IC0+IDAuNzc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDkwICBwb3dlciAwLjA2MDUgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5MSAgcG93ZXIgMC42MDYgIDAuNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5MiAgcG93ZXIgMC4wNjA2ICAwLjUgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTMgIHBvd2VyIDAuNjA3ICAwLjUgLT4gMC43NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTQgIHBvd2VyIDAuMDYwNyAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDk1ICBwb3dlciAwLjYwOCAgMC41IC0+IDAuNzgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDk2ICBwb3dlciAwLjA2MDggIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5NyAgcG93ZXIgMC42MDkgIDAuNSAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5OCAgcG93ZXIgMC4wNjA5ICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTkgIHBvd2VyIDAuNjExICAwLjUgLT4gMC43ODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDAgIHBvd2VyIDAuMDYxMSAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTAxICBwb3dlciAwLjYxMiAgMC41IC0+IDAuNzgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTAyICBwb3dlciAwLjA2MTIgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwMyAgcG93ZXIgMC42MTMgIDAuNSAtPiAwLjc4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwNCAgcG93ZXIgMC4wNjEzICAwLjUgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDUgIHBvd2VyIDAuNjE0ICAwLjUgLT4gMC43ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDYgIHBvd2VyIDAuMDYxNCAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTA3ICBwb3dlciAwLjYxNSAgMC41IC0+IDAuNzg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTA4ICBwb3dlciAwLjA2MTUgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwOSAgcG93ZXIgMC42MTYgIDAuNSAtPiAwLjc4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExMCAgcG93ZXIgMC4wNjE2ICAwLjUgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTEgIHBvd2VyIDAuNjE3ICAwLjUgLT4gMC43ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTIgIHBvd2VyIDAuMDYxNyAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTEzICBwb3dlciAwLjYxOCAgMC41IC0+IDAuNzg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTE0ICBwb3dlciAwLjA2MTggIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExNSAgcG93ZXIgMC42MTkgIDAuNSAtPiAwLjc4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExNiAgcG93ZXIgMC4wNjE5ICAwLjUgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTcgIHBvd2VyIDAuNjIxICAwLjUgLT4gMC43ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTggIHBvd2VyIDAuMDYyMSAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTE5ICBwb3dlciAwLjYyMiAgMC41IC0+IDAuNzg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTIwICBwb3dlciAwLjA2MjIgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyMSAgcG93ZXIgMC42MjMgIDAuNSAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyMiAgcG93ZXIgMC4wNjIzICAwLjUgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjMgIHBvd2VyIDAuNjI0ICAwLjUgLT4gMC43OTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjQgIHBvd2VyIDAuMDYyNCAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTI1ICBwb3dlciAwLjYyNSAgMC41IC0+IDAuNzkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTI2ICBwb3dlciAwLjA2MjUgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyNyAgcG93ZXIgMC42MjYgIDAuNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyOCAgcG93ZXIgMC4wNjI2ICAwLjUgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjkgIHBvd2VyIDAuNjI3ICAwLjUgLT4gMC43OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzAgIHBvd2VyIDAuMDYyNyAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTMxICBwb3dlciAwLjYyOCAgMC41IC0+IDAuNzkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTMyICBwb3dlciAwLjA2MjggIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzMyAgcG93ZXIgMC42MjkgIDAuNSAtPiAwLjc5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzNCAgcG93ZXIgMC4wNjI5ICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzUgIHBvd2VyIDAuNjMxICAwLjUgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzYgIHBvd2VyIDAuMDYzMSAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTM3ICBwb3dlciAwLjYzMiAgMC41IC0+IDAuNzk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTM4ICBwb3dlciAwLjA2MzIgIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzOSAgcG93ZXIgMC42MzMgIDAuNSAtPiAwLjc5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0MCAgcG93ZXIgMC4wNjMzICAwLjUgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDEgIHBvd2VyIDAuNjM0ICAwLjUgLT4gMC43OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDIgIHBvd2VyIDAuMDYzNCAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQzICBwb3dlciAwLjYzNSAgMC41IC0+IDAuNzk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQ0ICBwb3dlciAwLjA2MzUgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0NSAgcG93ZXIgMC42MzYgIDAuNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0NiAgcG93ZXIgMC4wNjM2ICAwLjUgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDcgIHBvd2VyIDAuNjM3ICAwLjUgLT4gMC43OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDggIHBvd2VyIDAuMDYzNyAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQ5ICBwb3dlciAwLjYzOCAgMC41IC0+IDAuNzk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTUwICBwb3dlciAwLjA2MzggIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1MSAgcG93ZXIgMC42MzkgIDAuNSAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1MiAgcG93ZXIgMC4wNjM5ICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTMgIHBvd2VyIDAuNjQxICAwLjUgLT4gMC44MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTQgIHBvd2VyIDAuMDY0MSAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTU1ICBwb3dlciAwLjY0MiAgMC41IC0+IDAuODAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTU2ICBwb3dlciAwLjA2NDIgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1NyAgcG93ZXIgMC42NDMgIDAuNSAtPiAwLjgwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1OCAgcG93ZXIgMC4wNjQzICAwLjUgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTkgIHBvd2VyIDAuNjQ0ICAwLjUgLT4gMC44MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjAgIHBvd2VyIDAuMDY0NCAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTYxICBwb3dlciAwLjY0NSAgMC41IC0+IDAuODAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTYyICBwb3dlciAwLjA2NDUgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2MyAgcG93ZXIgMC42NDYgIDAuNSAtPiAwLjgwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2NCAgcG93ZXIgMC4wNjQ2ICAwLjUgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjUgIHBvd2VyIDAuNjQ3ICAwLjUgLT4gMC44MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjYgIHBvd2VyIDAuMDY0NyAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTY3ICBwb3dlciAwLjY0OCAgMC41IC0+IDAuODA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTY4ICBwb3dlciAwLjA2NDggIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2OSAgcG93ZXIgMC42NDkgIDAuNSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3MCAgcG93ZXIgMC4wNjQ5ICAwLjUgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzEgIHBvd2VyIDAuNjUxICAwLjUgLT4gMC44MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzIgIHBvd2VyIDAuMDY1MSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTczICBwb3dlciAwLjY1MiAgMC41IC0+IDAuODA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTc0ICBwb3dlciAwLjA2NTIgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3NSAgcG93ZXIgMC42NTMgIDAuNSAtPiAwLjgwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3NiAgcG93ZXIgMC4wNjUzICAwLjUgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzcgIHBvd2VyIDAuNjU0ICAwLjUgLT4gMC44MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzggIHBvd2VyIDAuMDY1NCAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTc5ICBwb3dlciAwLjY1NSAgMC41IC0+IDAuODA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTgwICBwb3dlciAwLjA2NTUgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4MSAgcG93ZXIgMC42NTYgIDAuNSAtPiAwLjgxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4MiAgcG93ZXIgMC4wNjU2ICAwLjUgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODMgIHBvd2VyIDAuNjU3ICAwLjUgLT4gMC44MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODQgIHBvd2VyIDAuMDY1NyAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTg1ICBwb3dlciAwLjY1OCAgMC41IC0+IDAuODExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTg2ICBwb3dlciAwLjA2NTggIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4NyAgcG93ZXIgMC42NTkgIDAuNSAtPiAwLjgxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4OCAgcG93ZXIgMC4wNjU5ICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODkgIHBvd2VyIDAuNjYxICAwLjUgLT4gMC44MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTAgIHBvd2VyIDAuMDY2MSAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTkxICBwb3dlciAwLjY2MiAgMC41IC0+IDAuODE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTkyICBwb3dlciAwLjA2NjIgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5MyAgcG93ZXIgMC42NjMgIDAuNSAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5NCAgcG93ZXIgMC4wNjYzICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTUgIHBvd2VyIDAuNjY0ICAwLjUgLT4gMC44MTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTYgIHBvd2VyIDAuMDY2NCAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTk3ICBwb3dlciAwLjY2NSAgMC41IC0+IDAuODE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTk4ICBwb3dlciAwLjA2NjUgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5OSAgcG93ZXIgMC42NjYgIDAuNSAtPiAwLjgxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwMCAgcG93ZXIgMC4wNjY2ICAwLjUgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDEgIHBvd2VyIDAuNjY3ICAwLjUgLT4gMC44MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDIgIHBvd2VyIDAuMDY2NyAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjAzICBwb3dlciAwLjY2OCAgMC41IC0+IDAuODE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjA0ICBwb3dlciAwLjA2NjggIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwNSAgcG93ZXIgMC42NjkgIDAuNSAtPiAwLjgxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwNiAgcG93ZXIgMC4wNjY5ICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDcgIHBvd2VyIDAuNjcxICAwLjUgLT4gMC44MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDggIHBvd2VyIDAuMDY3MSAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjA5ICBwb3dlciAwLjY3MiAgMC41IC0+IDAuODIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjEwICBwb3dlciAwLjA2NzIgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxMSAgcG93ZXIgMC42NzMgIDAuNSAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxMiAgcG93ZXIgMC4wNjczICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTMgIHBvd2VyIDAuNjc0ICAwLjUgLT4gMC44MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTQgIHBvd2VyIDAuMDY3NCAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjE1ICBwb3dlciAwLjY3NSAgMC41IC0+IDAuODIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjE2ICBwb3dlciAwLjA2NzUgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxNyAgcG93ZXIgMC42NzYgIDAuNSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxOCAgcG93ZXIgMC4wNjc2ICAwLjUgLT4gMC4yNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTkgIHBvd2VyIDAuNjc3ICAwLjUgLT4gMC44MjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjAgIHBvd2VyIDAuMDY3NyAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjIxICBwb3dlciAwLjY3OCAgMC41IC0+IDAuODIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjIyICBwb3dlciAwLjA2NzggIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyMyAgcG93ZXIgMC42NzkgIDAuNSAtPiAwLjgyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyNCAgcG93ZXIgMC4wNjc5ICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjUgIHBvd2VyIDAuNjgxICAwLjUgLT4gMC44MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjYgIHBvd2VyIDAuMDY4MSAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjI3ICBwb3dlciAwLjY4MiAgMC41IC0+IDAuODI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjI4ICBwb3dlciAwLjA2ODIgIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyOSAgcG93ZXIgMC42ODMgIDAuNSAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzMCAgcG93ZXIgMC4wNjgzICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzEgIHBvd2VyIDAuNjg0ICAwLjUgLT4gMC44MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzIgIHBvd2VyIDAuMDY4NCAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjMzICBwb3dlciAwLjY4NSAgMC41IC0+IDAuODI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjM0ICBwb3dlciAwLjA2ODUgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzNSAgcG93ZXIgMC42ODYgIDAuNSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzNiAgcG93ZXIgMC4wNjg2ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzcgIHBvd2VyIDAuNjg3ICAwLjUgLT4gMC44MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzggIHBvd2VyIDAuMDY4NyAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjM5ICBwb3dlciAwLjY4OCAgMC41IC0+IDAuODI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQwICBwb3dlciAwLjA2ODggIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0MSAgcG93ZXIgMC42ODkgIDAuNSAtPiAwLjgzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0MiAgcG93ZXIgMC4wNjg5ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDMgIHBvd2VyIDAuNjkxICAwLjUgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDQgIHBvd2VyIDAuMDY5MSAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQ1ICBwb3dlciAwLjY5MiAgMC41IC0+IDAuODMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQ2ICBwb3dlciAwLjA2OTIgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0NyAgcG93ZXIgMC42OTMgIDAuNSAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0OCAgcG93ZXIgMC4wNjkzICAwLjUgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDkgIHBvd2VyIDAuNjk0ICAwLjUgLT4gMC44MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTAgIHBvd2VyIDAuMDY5NCAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjUxICBwb3dlciAwLjY5NSAgMC41IC0+IDAuODM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjUyICBwb3dlciAwLjA2OTUgIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1MyAgcG93ZXIgMC42OTYgIDAuNSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1NCAgcG93ZXIgMC4wNjk2ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTUgIHBvd2VyIDAuNjk3ICAwLjUgLT4gMC44MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTYgIHBvd2VyIDAuMDY5NyAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjU3ICBwb3dlciAwLjY5OCAgMC41IC0+IDAuODM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjU4ICBwb3dlciAwLjA2OTggIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1OSAgcG93ZXIgMC42OTkgIDAuNSAtPiAwLjgzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2MCAgcG93ZXIgMC4wNjk5ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjEgIHBvd2VyIDAuNzAxICAwLjUgLT4gMC44MzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjIgIHBvd2VyIDAuMDcwMSAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjYzICBwb3dlciAwLjcwMiAgMC41IC0+IDAuODM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjY0ICBwb3dlciAwLjA3MDIgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2NSAgcG93ZXIgMC43MDMgIDAuNSAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2NiAgcG93ZXIgMC4wNzAzICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjcgIHBvd2VyIDAuNzA0ICAwLjUgLT4gMC44MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjggIHBvd2VyIDAuMDcwNCAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjY5ICBwb3dlciAwLjcwNSAgMC41IC0+IDAuODQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjcwICBwb3dlciAwLjA3MDUgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3MSAgcG93ZXIgMC43MDYgIDAuNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3MiAgcG93ZXIgMC4wNzA2ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzMgIHBvd2VyIDAuNzA3ICAwLjUgLT4gMC44NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzQgIHBvd2VyIDAuMDcwNyAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjc1ICBwb3dlciAwLjcwOCAgMC41IC0+IDAuODQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjc2ICBwb3dlciAwLjA3MDggIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3NyAgcG93ZXIgMC43MDkgIDAuNSAtPiAwLjg0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3OCAgcG93ZXIgMC4wNzA5ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzkgIHBvd2VyIDAuNzExICAwLjUgLT4gMC44NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODAgIHBvd2VyIDAuMDcxMSAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjgxICBwb3dlciAwLjcxMiAgMC41IC0+IDAuODQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjgyICBwb3dlciAwLjA3MTIgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4MyAgcG93ZXIgMC43MTMgIDAuNSAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4NCAgcG93ZXIgMC4wNzEzICAwLjUgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODUgIHBvd2VyIDAuNzE0ICAwLjUgLT4gMC44NDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODYgIHBvd2VyIDAuMDcxNCAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjg3ICBwb3dlciAwLjcxNSAgMC41IC0+IDAuODQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjg4ICBwb3dlciAwLjA3MTUgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4OSAgcG93ZXIgMC43MTYgIDAuNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5MCAgcG93ZXIgMC4wNzE2ICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTEgIHBvd2VyIDAuNzE3ICAwLjUgLT4gMC44NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTIgIHBvd2VyIDAuMDcxNyAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjkzICBwb3dlciAwLjcxOCAgMC41IC0+IDAuODQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjk0ICBwb3dlciAwLjA3MTggIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5NSAgcG93ZXIgMC43MTkgIDAuNSAtPiAwLjg0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5NiAgcG93ZXIgMC4wNzE5ICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTcgIHBvd2VyIDAuNzIxICAwLjUgLT4gMC44NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTggIHBvd2VyIDAuMDcyMSAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjk5ICBwb3dlciAwLjcyMiAgMC41IC0+IDAuODUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzAwICBwb3dlciAwLjA3MjIgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwMSAgcG93ZXIgMC43MjMgIDAuNSAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwMiAgcG93ZXIgMC4wNzIzICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDMgIHBvd2VyIDAuNzI0ICAwLjUgLT4gMC44NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDQgIHBvd2VyIDAuMDcyNCAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzA1ICBwb3dlciAwLjcyNSAgMC41IC0+IDAuODUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzA2ICBwb3dlciAwLjA3MjUgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwNyAgcG93ZXIgMC43MjYgIDAuNSAtPiAwLjg1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwOCAgcG93ZXIgMC4wNzI2ICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDkgIHBvd2VyIDAuNzI3ICAwLjUgLT4gMC44NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTAgIHBvd2VyIDAuMDcyNyAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzExICBwb3dlciAwLjcyOCAgMC41IC0+IDAuODUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzEyICBwb3dlciAwLjA3MjggIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxMyAgcG93ZXIgMC43MjkgIDAuNSAtPiAwLjg1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxNCAgcG93ZXIgMC4wNzI5ICAwLjUgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTUgIHBvd2VyIDAuNzMxICAwLjUgLT4gMC44NTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTYgIHBvd2VyIDAuMDczMSAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzE3ICBwb3dlciAwLjczMiAgMC41IC0+IDAuODU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzE4ICBwb3dlciAwLjA3MzIgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxOSAgcG93ZXIgMC43MzMgIDAuNSAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyMCAgcG93ZXIgMC4wNzMzICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjEgIHBvd2VyIDAuNzM0ICAwLjUgLT4gMC44NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjIgIHBvd2VyIDAuMDczNCAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzIzICBwb3dlciAwLjczNSAgMC41IC0+IDAuODU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzI0ICBwb3dlciAwLjA3MzUgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyNSAgcG93ZXIgMC43MzYgIDAuNSAtPiAwLjg1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyNiAgcG93ZXIgMC4wNzM2ICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjcgIHBvd2VyIDAuNzM3ICAwLjUgLT4gMC44NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjggIHBvd2VyIDAuMDczNyAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzI5ICBwb3dlciAwLjczOCAgMC41IC0+IDAuODU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzMwICBwb3dlciAwLjA3MzggIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzMSAgcG93ZXIgMC43MzkgIDAuNSAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzMiAgcG93ZXIgMC4wNzM5ICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzMgIHBvd2VyIDAuNzQxICAwLjUgLT4gMC44NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzQgIHBvd2VyIDAuMDc0MSAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzM1ICBwb3dlciAwLjc0MiAgMC41IC0+IDAuODYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzM2ICBwb3dlciAwLjA3NDIgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzNyAgcG93ZXIgMC43NDMgIDAuNSAtPiAwLjg2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzOCAgcG93ZXIgMC4wNzQzICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzkgIHBvd2VyIDAuNzQ0ICAwLjUgLT4gMC44NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDAgIHBvd2VyIDAuMDc0NCAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQxICBwb3dlciAwLjc0NSAgMC41IC0+IDAuODYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQyICBwb3dlciAwLjA3NDUgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0MyAgcG93ZXIgMC43NDYgIDAuNSAtPiAwLjg2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0NCAgcG93ZXIgMC4wNzQ2ICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDUgIHBvd2VyIDAuNzQ3ICAwLjUgLT4gMC44NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDYgIHBvd2VyIDAuMDc0NyAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQ3ICBwb3dlciAwLjc0OCAgMC41IC0+IDAuODY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQ4ICBwb3dlciAwLjA3NDggIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0OSAgcG93ZXIgMC43NDkgIDAuNSAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1MCAgcG93ZXIgMC4wNzQ5ICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTEgIHBvd2VyIDAuNzUxICAwLjUgLT4gMC44NjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTIgIHBvd2VyIDAuMDc1MSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzUzICBwb3dlciAwLjc1MiAgMC41IC0+IDAuODY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzU0ICBwb3dlciAwLjA3NTIgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1NSAgcG93ZXIgMC43NTMgIDAuNSAtPiAwLjg2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1NiAgcG93ZXIgMC4wNzUzICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTcgIHBvd2VyIDAuNzU0ICAwLjUgLT4gMC44NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTggIHBvd2VyIDAuMDc1NCAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzU5ICBwb3dlciAwLjc1NSAgMC41IC0+IDAuODY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzYwICBwb3dlciAwLjA3NTUgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2MSAgcG93ZXIgMC43NTYgIDAuNSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2MiAgcG93ZXIgMC4wNzU2ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjMgIHBvd2VyIDAuNzU3ICAwLjUgLT4gMC44NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjQgIHBvd2VyIDAuMDc1NyAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzY1ICBwb3dlciAwLjc1OCAgMC41IC0+IDAuODcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzY2ICBwb3dlciAwLjA3NTggIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2NyAgcG93ZXIgMC43NTkgIDAuNSAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2OCAgcG93ZXIgMC4wNzU5ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjkgIHBvd2VyIDAuNzYxICAwLjUgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzAgIHBvd2VyIDAuMDc2MSAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzcxICBwb3dlciAwLjc2MiAgMC41IC0+IDAuODczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzcyICBwb3dlciAwLjA3NjIgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3MyAgcG93ZXIgMC43NjMgIDAuNSAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3NCAgcG93ZXIgMC4wNzYzICAwLjUgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzUgIHBvd2VyIDAuNzY0ICAwLjUgLT4gMC44NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzYgIHBvd2VyIDAuMDc2NCAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzc3ICBwb3dlciAwLjc2NSAgMC41IC0+IDAuODc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzc4ICBwb3dlciAwLjA3NjUgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3OSAgcG93ZXIgMC43NjYgIDAuNSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4MCAgcG93ZXIgMC4wNzY2ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODEgIHBvd2VyIDAuNzY3ICAwLjUgLT4gMC44NzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODIgIHBvd2VyIDAuMDc2NyAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzgzICBwb3dlciAwLjc2OCAgMC41IC0+IDAuODc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzg0ICBwb3dlciAwLjA3NjggIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4NSAgcG93ZXIgMC43NjkgIDAuNSAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4NiAgcG93ZXIgMC4wNzY5ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODcgIHBvd2VyIDAuNzcxICAwLjUgLT4gMC44NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODggIHBvd2VyIDAuMDc3MSAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzg5ICBwb3dlciAwLjc3MiAgMC41IC0+IDAuODc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzkwICBwb3dlciAwLjA3NzIgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5MSAgcG93ZXIgMC43NzMgIDAuNSAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5MiAgcG93ZXIgMC4wNzczICAwLjUgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTMgIHBvd2VyIDAuNzc0ICAwLjUgLT4gMC44ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTQgIHBvd2VyIDAuMDc3NCAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzk1ICBwb3dlciAwLjc3NSAgMC41IC0+IDAuODgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzk2ICBwb3dlciAwLjA3NzUgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5NyAgcG93ZXIgMC43NzYgIDAuNSAtPiAwLjg4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5OCAgcG93ZXIgMC4wNzc2ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTkgIHBvd2VyIDAuNzc3ICAwLjUgLT4gMC44ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDAgIHBvd2VyIDAuMDc3NyAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDAxICBwb3dlciAwLjc3OCAgMC41IC0+IDAuODgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDAyICBwb3dlciAwLjA3NzggIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwMyAgcG93ZXIgMC43NzkgIDAuNSAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwNCAgcG93ZXIgMC4wNzc5ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDUgIHBvd2VyIDAuNzgxICAwLjUgLT4gMC44ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDYgIHBvd2VyIDAuMDc4MSAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDA3ICBwb3dlciAwLjc4MiAgMC41IC0+IDAuODg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDA4ICBwb3dlciAwLjA3ODIgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwOSAgcG93ZXIgMC43ODMgIDAuNSAtPiAwLjg4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxMCAgcG93ZXIgMC4wNzgzICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTEgIHBvd2VyIDAuNzg0ICAwLjUgLT4gMC44ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTIgIHBvd2VyIDAuMDc4NCAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDEzICBwb3dlciAwLjc4NSAgMC41IC0+IDAuODg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDE0ICBwb3dlciAwLjA3ODUgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxNSAgcG93ZXIgMC43ODYgIDAuNSAtPiAwLjg4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxNiAgcG93ZXIgMC4wNzg2ICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTcgIHBvd2VyIDAuNzg3ICAwLjUgLT4gMC44ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTggIHBvd2VyIDAuMDc4NyAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDE5ICBwb3dlciAwLjc4OCAgMC41IC0+IDAuODg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDIwICBwb3dlciAwLjA3ODggIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyMSAgcG93ZXIgMC43ODkgIDAuNSAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyMiAgcG93ZXIgMC4wNzg5ICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjMgIHBvd2VyIDAuNzkxICAwLjUgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjQgIHBvd2VyIDAuMDc5MSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDI1ICBwb3dlciAwLjc5MiAgMC41IC0+IDAuODkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDI2ICBwb3dlciAwLjA3OTIgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyNyAgcG93ZXIgMC43OTMgIDAuNSAtPiAwLjg5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyOCAgcG93ZXIgMC4wNzkzICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjkgIHBvd2VyIDAuNzk0ICAwLjUgLT4gMC44OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzAgIHBvd2VyIDAuMDc5NCAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDMxICBwb3dlciAwLjc5NSAgMC41IC0+IDAuODkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDMyICBwb3dlciAwLjA3OTUgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzMyAgcG93ZXIgMC43OTYgIDAuNSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzNCAgcG93ZXIgMC4wNzk2ICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzUgIHBvd2VyIDAuNzk3ICAwLjUgLT4gMC44OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzYgIHBvd2VyIDAuMDc5NyAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDM3ICBwb3dlciAwLjc5OCAgMC41IC0+IDAuODkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDM4ICBwb3dlciAwLjA3OTggIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzOSAgcG93ZXIgMC43OTkgIDAuNSAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0MCAgcG93ZXIgMC4wNzk5ICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDEgIHBvd2VyIDAuODAxICAwLjUgLT4gMC44OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDIgIHBvd2VyIDAuMDgwMSAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQzICBwb3dlciAwLjgwMiAgMC41IC0+IDAuODk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQ0ICBwb3dlciAwLjA4MDIgIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0NSAgcG93ZXIgMC44MDMgIDAuNSAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0NiAgcG93ZXIgMC4wODAzICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDcgIHBvd2VyIDAuODA0ICAwLjUgLT4gMC44OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDggIHBvd2VyIDAuMDgwNCAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQ5ICBwb3dlciAwLjgwNSAgMC41IC0+IDAuODk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDUwICBwb3dlciAwLjA4MDUgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1MSAgcG93ZXIgMC44MDYgIDAuNSAtPiAwLjg5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1MiAgcG93ZXIgMC4wODA2ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTMgIHBvd2VyIDAuODA3ICAwLjUgLT4gMC44OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTQgIHBvd2VyIDAuMDgwNyAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDU1ICBwb3dlciAwLjgwOCAgMC41IC0+IDAuODk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDU2ICBwb3dlciAwLjA4MDggIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1NyAgcG93ZXIgMC44MDkgIDAuNSAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1OCAgcG93ZXIgMC4wODA5ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTkgIHBvd2VyIDAuODExICAwLjUgLT4gMC45MDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjAgIHBvd2VyIDAuMDgxMSAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDYxICBwb3dlciAwLjgxMiAgMC41IC0+IDAuOTAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDYyICBwb3dlciAwLjA4MTIgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2MyAgcG93ZXIgMC44MTMgIDAuNSAtPiAwLjkwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2NCAgcG93ZXIgMC4wODEzICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjUgIHBvd2VyIDAuODE0ICAwLjUgLT4gMC45MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjYgIHBvd2VyIDAuMDgxNCAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDY3ICBwb3dlciAwLjgxNSAgMC41IC0+IDAuOTAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDY4ICBwb3dlciAwLjA4MTUgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2OSAgcG93ZXIgMC44MTYgIDAuNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3MCAgcG93ZXIgMC4wODE2ICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzEgIHBvd2VyIDAuODE3ICAwLjUgLT4gMC45MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzIgIHBvd2VyIDAuMDgxNyAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDczICBwb3dlciAwLjgxOCAgMC41IC0+IDAuOTA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDc0ICBwb3dlciAwLjA4MTggIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3NSAgcG93ZXIgMC44MTkgIDAuNSAtPiAwLjkwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3NiAgcG93ZXIgMC4wODE5ICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzcgIHBvd2VyIDAuODIxICAwLjUgLT4gMC45MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzggIHBvd2VyIDAuMDgyMSAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDc5ICBwb3dlciAwLjgyMiAgMC41IC0+IDAuOTA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDgwICBwb3dlciAwLjA4MjIgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4MSAgcG93ZXIgMC44MjMgIDAuNSAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4MiAgcG93ZXIgMC4wODIzICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODMgIHBvd2VyIDAuODI0ICAwLjUgLT4gMC45MDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODQgIHBvd2VyIDAuMDgyNCAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDg1ICBwb3dlciAwLjgyNSAgMC41IC0+IDAuOTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDg2ICBwb3dlciAwLjA4MjUgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4NyAgcG93ZXIgMC44MjYgIDAuNSAtPiAwLjkwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4OCAgcG93ZXIgMC4wODI2ICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODkgIHBvd2VyIDAuODI3ICAwLjUgLT4gMC45MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTAgIHBvd2VyIDAuMDgyNyAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDkxICBwb3dlciAwLjgyOCAgMC41IC0+IDAuOTEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDkyICBwb3dlciAwLjA4MjggIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5MyAgcG93ZXIgMC44MjkgIDAuNSAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5NCAgcG93ZXIgMC4wODI5ICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTUgIHBvd2VyIDAuODMxICAwLjUgLT4gMC45MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTYgIHBvd2VyIDAuMDgzMSAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDk3ICBwb3dlciAwLjgzMiAgMC41IC0+IDAuOTEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDk4ICBwb3dlciAwLjA4MzIgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5OSAgcG93ZXIgMC44MzMgIDAuNSAtPiAwLjkxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwMCAgcG93ZXIgMC4wODMzICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDEgIHBvd2VyIDAuODM0ICAwLjUgLT4gMC45MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDIgIHBvd2VyIDAuMDgzNCAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTAzICBwb3dlciAwLjgzNSAgMC41IC0+IDAuOTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTA0ICBwb3dlciAwLjA4MzUgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwNSAgcG93ZXIgMC44MzYgIDAuNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwNiAgcG93ZXIgMC4wODM2ICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDcgIHBvd2VyIDAuODM3ICAwLjUgLT4gMC45MTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDggIHBvd2VyIDAuMDgzNyAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTA5ICBwb3dlciAwLjgzOCAgMC41IC0+IDAuOTE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTEwICBwb3dlciAwLjA4MzggIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxMSAgcG93ZXIgMC44MzkgIDAuNSAtPiAwLjkxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxMiAgcG93ZXIgMC4wODM5ICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTMgIHBvd2VyIDAuODQxICAwLjUgLT4gMC45MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTQgIHBvd2VyIDAuMDg0MSAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTE1ICBwb3dlciAwLjg0MiAgMC41IC0+IDAuOTE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTE2ICBwb3dlciAwLjA4NDIgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxNyAgcG93ZXIgMC44NDMgIDAuNSAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxOCAgcG93ZXIgMC4wODQzICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTkgIHBvd2VyIDAuODQ0ICAwLjUgLT4gMC45MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjAgIHBvd2VyIDAuMDg0NCAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTIxICBwb3dlciAwLjg0NSAgMC41IC0+IDAuOTE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTIyICBwb3dlciAwLjA4NDUgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyMyAgcG93ZXIgMC44NDYgIDAuNSAtPiAwLjkyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyNCAgcG93ZXIgMC4wODQ2ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjUgIHBvd2VyIDAuODQ3ICAwLjUgLT4gMC45MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjYgIHBvd2VyIDAuMDg0NyAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTI3ICBwb3dlciAwLjg0OCAgMC41IC0+IDAuOTIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTI4ICBwb3dlciAwLjA4NDggIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyOSAgcG93ZXIgMC44NDkgIDAuNSAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzMCAgcG93ZXIgMC4wODQ5ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzEgIHBvd2VyIDAuODUxICAwLjUgLT4gMC45MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzIgIHBvd2VyIDAuMDg1MSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTMzICBwb3dlciAwLjg1MiAgMC41IC0+IDAuOTIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTM0ICBwb3dlciAwLjA4NTIgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzNSAgcG93ZXIgMC44NTMgIDAuNSAtPiAwLjkyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzNiAgcG93ZXIgMC4wODUzICAwLjUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzcgIHBvd2VyIDAuODU0ICAwLjUgLT4gMC45MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzggIHBvd2VyIDAuMDg1NCAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTM5ICBwb3dlciAwLjg1NSAgMC41IC0+IDAuOTI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQwICBwb3dlciAwLjA4NTUgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0MSAgcG93ZXIgMC44NTYgIDAuNSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0MiAgcG93ZXIgMC4wODU2ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDMgIHBvd2VyIDAuODU3ICAwLjUgLT4gMC45MjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDQgIHBvd2VyIDAuMDg1NyAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQ1ICBwb3dlciAwLjg1OCAgMC41IC0+IDAuOTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQ2ICBwb3dlciAwLjA4NTggIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0NyAgcG93ZXIgMC44NTkgIDAuNSAtPiAwLjkyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0OCAgcG93ZXIgMC4wODU5ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDkgIHBvd2VyIDAuODYxICAwLjUgLT4gMC45MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTAgIHBvd2VyIDAuMDg2MSAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTUxICBwb3dlciAwLjg2MiAgMC41IC0+IDAuOTI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTUyICBwb3dlciAwLjA4NjIgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1MyAgcG93ZXIgMC44NjMgIDAuNSAtPiAwLjkyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1NCAgcG93ZXIgMC4wODYzICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTUgIHBvd2VyIDAuODY0ICAwLjUgLT4gMC45MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTYgIHBvd2VyIDAuMDg2NCAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTU3ICBwb3dlciAwLjg2NSAgMC41IC0+IDAuOTMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTU4ICBwb3dlciAwLjA4NjUgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1OSAgcG93ZXIgMC44NjYgIDAuNSAtPiAwLjkzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2MCAgcG93ZXIgMC4wODY2ICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjEgIHBvd2VyIDAuODY3ICAwLjUgLT4gMC45MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjIgIHBvd2VyIDAuMDg2NyAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTYzICBwb3dlciAwLjg2OCAgMC41IC0+IDAuOTMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTY0ICBwb3dlciAwLjA4NjggIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2NSAgcG93ZXIgMC44NjkgIDAuNSAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2NiAgcG93ZXIgMC4wODY5ICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjcgIHBvd2VyIDAuODcxICAwLjUgLT4gMC45MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjggIHBvd2VyIDAuMDg3MSAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTY5ICBwb3dlciAwLjg3MiAgMC41IC0+IDAuOTM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTcwICBwb3dlciAwLjA4NzIgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3MSAgcG93ZXIgMC44NzMgIDAuNSAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3MiAgcG93ZXIgMC4wODczICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzMgIHBvd2VyIDAuODc0ICAwLjUgLT4gMC45MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzQgIHBvd2VyIDAuMDg3NCAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTc1ICBwb3dlciAwLjg3NSAgMC41IC0+IDAuOTM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTc2ICBwb3dlciAwLjA4NzUgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3NyAgcG93ZXIgMC44NzYgIDAuNSAtPiAwLjkzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3OCAgcG93ZXIgMC4wODc2ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzkgIHBvd2VyIDAuODc3ICAwLjUgLT4gMC45MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODAgIHBvd2VyIDAuMDg3NyAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTgxICBwb3dlciAwLjg3OCAgMC41IC0+IDAuOTM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTgyICBwb3dlciAwLjA4NzggIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4MyAgcG93ZXIgMC44NzkgIDAuNSAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4NCAgcG93ZXIgMC4wODc5ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODUgIHBvd2VyIDAuODgxICAwLjUgLT4gMC45MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODYgIHBvd2VyIDAuMDg4MSAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTg3ICBwb3dlciAwLjg4MiAgMC41IC0+IDAuOTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTg4ICBwb3dlciAwLjA4ODIgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4OSAgcG93ZXIgMC44ODMgIDAuNSAtPiAwLjk0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5MCAgcG93ZXIgMC4wODgzICAwLjUgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTEgIHBvd2VyIDAuODg0ICAwLjUgLT4gMC45NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTIgIHBvd2VyIDAuMDg4NCAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTkzICBwb3dlciAwLjg4NSAgMC41IC0+IDAuOTQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTk0ICBwb3dlciAwLjA4ODUgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5NSAgcG93ZXIgMC44ODYgIDAuNSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5NiAgcG93ZXIgMC4wODg2ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTcgIHBvd2VyIDAuODg3ICAwLjUgLT4gMC45NDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTggIHBvd2VyIDAuMDg4NyAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTk5ICBwb3dlciAwLjg4OCAgMC41IC0+IDAuOTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjAwICBwb3dlciAwLjA4ODggIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwMSAgcG93ZXIgMC44ODkgIDAuNSAtPiAwLjk0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwMiAgcG93ZXIgMC4wODg5ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDMgIHBvd2VyIDAuODkxICAwLjUgLT4gMC45NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDQgIHBvd2VyIDAuMDg5MSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjA1ICBwb3dlciAwLjg5MiAgMC41IC0+IDAuOTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjA2ICBwb3dlciAwLjA4OTIgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwNyAgcG93ZXIgMC44OTMgIDAuNSAtPiAwLjk0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwOCAgcG93ZXIgMC4wODkzICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDkgIHBvd2VyIDAuODk0ICAwLjUgLT4gMC45NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTAgIHBvd2VyIDAuMDg5NCAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjExICBwb3dlciAwLjg5NSAgMC41IC0+IDAuOTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjEyICBwb3dlciAwLjA4OTUgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxMyAgcG93ZXIgMC44OTYgIDAuNSAtPiAwLjk0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxNCAgcG93ZXIgMC4wODk2ICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTUgIHBvd2VyIDAuODk3ICAwLjUgLT4gMC45NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTYgIHBvd2VyIDAuMDg5NyAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjE3ICBwb3dlciAwLjg5OCAgMC41IC0+IDAuOTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjE4ICBwb3dlciAwLjA4OTggIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxOSAgcG93ZXIgMC44OTkgIDAuNSAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyMCAgcG93ZXIgMC4wODk5ICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjEgIHBvd2VyIDAuOTAxICAwLjUgLT4gMC45NDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjIgIHBvd2VyIDAuMDkwMSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjIzICBwb3dlciAwLjkwMiAgMC41IC0+IDAuOTUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjI0ICBwb3dlciAwLjA5MDIgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyNSAgcG93ZXIgMC45MDMgIDAuNSAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyNiAgcG93ZXIgMC4wOTAzICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjcgIHBvd2VyIDAuOTA0ICAwLjUgLT4gMC45NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjggIHBvd2VyIDAuMDkwNCAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjI5ICBwb3dlciAwLjkwNSAgMC41IC0+IDAuOTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjMwICBwb3dlciAwLjA5MDUgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzMSAgcG93ZXIgMC45MDYgIDAuNSAtPiAwLjk1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzMiAgcG93ZXIgMC4wOTA2ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzMgIHBvd2VyIDAuOTA3ICAwLjUgLT4gMC45NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzQgIHBvd2VyIDAuMDkwNyAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjM1ICBwb3dlciAwLjkwOCAgMC41IC0+IDAuOTUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjM2ICBwb3dlciAwLjA5MDggIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzNyAgcG93ZXIgMC45MDkgIDAuNSAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzOCAgcG93ZXIgMC4wOTA5ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzkgIHBvd2VyIDAuOTExICAwLjUgLT4gMC45NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDAgIHBvd2VyIDAuMDkxMSAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQxICBwb3dlciAwLjkxMiAgMC41IC0+IDAuOTU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQyICBwb3dlciAwLjA5MTIgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0MyAgcG93ZXIgMC45MTMgIDAuNSAtPiAwLjk1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0NCAgcG93ZXIgMC4wOTEzICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDUgIHBvd2VyIDAuOTE0ICAwLjUgLT4gMC45NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDYgIHBvd2VyIDAuMDkxNCAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQ3ICBwb3dlciAwLjkxNSAgMC41IC0+IDAuOTU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQ4ICBwb3dlciAwLjA5MTUgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0OSAgcG93ZXIgMC45MTYgIDAuNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1MCAgcG93ZXIgMC4wOTE2ICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTEgIHBvd2VyIDAuOTE3ICAwLjUgLT4gMC45NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTIgIHBvd2VyIDAuMDkxNyAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjUzICBwb3dlciAwLjkxOCAgMC41IC0+IDAuOTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjU0ICBwb3dlciAwLjA5MTggIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1NSAgcG93ZXIgMC45MTkgIDAuNSAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1NiAgcG93ZXIgMC4wOTE5ICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTcgIHBvd2VyIDAuOTIxICAwLjUgLT4gMC45NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTggIHBvd2VyIDAuMDkyMSAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjU5ICBwb3dlciAwLjkyMiAgMC41IC0+IDAuOTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjYwICBwb3dlciAwLjA5MjIgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2MSAgcG93ZXIgMC45MjMgIDAuNSAtPiAwLjk2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2MiAgcG93ZXIgMC4wOTIzICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjMgIHBvd2VyIDAuOTI0ICAwLjUgLT4gMC45NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjQgIHBvd2VyIDAuMDkyNCAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjY1ICBwb3dlciAwLjkyNSAgMC41IC0+IDAuOTYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjY2ICBwb3dlciAwLjA5MjUgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2NyAgcG93ZXIgMC45MjYgIDAuNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2OCAgcG93ZXIgMC4wOTI2ICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjkgIHBvd2VyIDAuOTI3ICAwLjUgLT4gMC45NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzAgIHBvd2VyIDAuMDkyNyAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjcxICBwb3dlciAwLjkyOCAgMC41IC0+IDAuOTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjcyICBwb3dlciAwLjA5MjggIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3MyAgcG93ZXIgMC45MjkgIDAuNSAtPiAwLjk2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3NCAgcG93ZXIgMC4wOTI5ICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzUgIHBvd2VyIDAuOTMxICAwLjUgLT4gMC45NjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzYgIHBvd2VyIDAuMDkzMSAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njc3ICBwb3dlciAwLjkzMiAgMC41IC0+IDAuOTY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njc4ICBwb3dlciAwLjA5MzIgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3OSAgcG93ZXIgMC45MzMgIDAuNSAtPiAwLjk2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4MCAgcG93ZXIgMC4wOTMzICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODEgIHBvd2VyIDAuOTM0ICAwLjUgLT4gMC45NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODIgIHBvd2VyIDAuMDkzNCAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjgzICBwb3dlciAwLjkzNSAgMC41IC0+IDAuOTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njg0ICBwb3dlciAwLjA5MzUgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4NSAgcG93ZXIgMC45MzYgIDAuNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4NiAgcG93ZXIgMC4wOTM2ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODcgIHBvd2VyIDAuOTM3ICAwLjUgLT4gMC45NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODggIHBvd2VyIDAuMDkzNyAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njg5ICBwb3dlciAwLjkzOCAgMC41IC0+IDAuOTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjkwICBwb3dlciAwLjA5MzggIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5MSAgcG93ZXIgMC45MzkgIDAuNSAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5MiAgcG93ZXIgMC4wOTM5ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTMgIHBvd2VyIDAuOTQxICAwLjUgLT4gMC45NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTQgIHBvd2VyIDAuMDk0MSAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njk1ICBwb3dlciAwLjk0MiAgMC41IC0+IDAuOTcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njk2ICBwb3dlciAwLjA5NDIgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5NyAgcG93ZXIgMC45NDMgIDAuNSAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5OCAgcG93ZXIgMC4wOTQzICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTkgIHBvd2VyIDAuOTQ0ICAwLjUgLT4gMC45NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDAgIHBvd2VyIDAuMDk0NCAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzAxICBwb3dlciAwLjk0NSAgMC41IC0+IDAuOTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzAyICBwb3dlciAwLjA5NDUgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwMyAgcG93ZXIgMC45NDYgIDAuNSAtPiAwLjk3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwNCAgcG93ZXIgMC4wOTQ2ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDUgIHBvd2VyIDAuOTQ3ICAwLjUgLT4gMC45NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDYgIHBvd2VyIDAuMDk0NyAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzA3ICBwb3dlciAwLjk0OCAgMC41IC0+IDAuOTc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzA4ICBwb3dlciAwLjA5NDggIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwOSAgcG93ZXIgMC45NDkgIDAuNSAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxMCAgcG93ZXIgMC4wOTQ5ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTEgIHBvd2VyIDAuOTUxICAwLjUgLT4gMC45NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTIgIHBvd2VyIDAuMDk1MSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzEzICBwb3dlciAwLjk1MiAgMC41IC0+IDAuOTc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzE0ICBwb3dlciAwLjA5NTIgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxNSAgcG93ZXIgMC45NTMgIDAuNSAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxNiAgcG93ZXIgMC4wOTUzICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTcgIHBvd2VyIDAuOTU0ICAwLjUgLT4gMC45NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTggIHBvd2VyIDAuMDk1NCAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzE5ICBwb3dlciAwLjk1NSAgMC41IC0+IDAuOTc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzIwICBwb3dlciAwLjA5NTUgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyMSAgcG93ZXIgMC45NTYgIDAuNSAtPiAwLjk3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyMiAgcG93ZXIgMC4wOTU2ICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjMgIHBvd2VyIDAuOTU3ICAwLjUgLT4gMC45NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjQgIHBvd2VyIDAuMDk1NyAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzI1ICBwb3dlciAwLjk1OCAgMC41IC0+IDAuOTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzI2ICBwb3dlciAwLjA5NTggIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyNyAgcG93ZXIgMC45NTkgIDAuNSAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyOCAgcG93ZXIgMC4wOTU5ICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjkgIHBvd2VyIDAuOTYxICAwLjUgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzAgIHBvd2VyIDAuMDk2MSAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzMxICBwb3dlciAwLjk2MiAgMC41IC0+IDAuOTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzMyICBwb3dlciAwLjA5NjIgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczMyAgcG93ZXIgMC45NjMgIDAuNSAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczNCAgcG93ZXIgMC4wOTYzICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzUgIHBvd2VyIDAuOTY0ICAwLjUgLT4gMC45ODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzYgIHBvd2VyIDAuMDk2NCAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzM3ICBwb3dlciAwLjk2NSAgMC41IC0+IDAuOTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzM4ICBwb3dlciAwLjA5NjUgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczOSAgcG93ZXIgMC45NjYgIDAuNSAtPiAwLjk4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0MCAgcG93ZXIgMC4wOTY2ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDEgIHBvd2VyIDAuOTY3ICAwLjUgLT4gMC45ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDIgIHBvd2VyIDAuMDk2NyAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQzICBwb3dlciAwLjk2OCAgMC41IC0+IDAuOTg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQ0ICBwb3dlciAwLjA5NjggIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0NSAgcG93ZXIgMC45NjkgIDAuNSAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0NiAgcG93ZXIgMC4wOTY5ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDcgIHBvd2VyIDAuOTcxICAwLjUgLT4gMC45ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDggIHBvd2VyIDAuMDk3MSAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQ5ICBwb3dlciAwLjk3MiAgMC41IC0+IDAuOTg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzUwICBwb3dlciAwLjA5NzIgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1MSAgcG93ZXIgMC45NzMgIDAuNSAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1MiAgcG93ZXIgMC4wOTczICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTMgIHBvd2VyIDAuOTc0ICAwLjUgLT4gMC45ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTQgIHBvd2VyIDAuMDk3NCAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzU1ICBwb3dlciAwLjk3NSAgMC41IC0+IDAuOTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzU2ICBwb3dlciAwLjA5NzUgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1NyAgcG93ZXIgMC45NzYgIDAuNSAtPiAwLjk4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1OCAgcG93ZXIgMC4wOTc2ICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTkgIHBvd2VyIDAuOTc3ICAwLjUgLT4gMC45ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjAgIHBvd2VyIDAuMDk3NyAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzYxICBwb3dlciAwLjk3OCAgMC41IC0+IDAuOTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzYyICBwb3dlciAwLjA5NzggIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2MyAgcG93ZXIgMC45NzkgIDAuNSAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2NCAgcG93ZXIgMC4wOTc5ICAwLjUgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjUgIHBvd2VyIDAuOTgxICAwLjUgLT4gMC45OTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjYgIHBvd2VyIDAuMDk4MSAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzY3ICBwb3dlciAwLjk4MiAgMC41IC0+IDAuOTkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzY4ICBwb3dlciAwLjA5ODIgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2OSAgcG93ZXIgMC45ODMgIDAuNSAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3MCAgcG93ZXIgMC4wOTgzICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzEgIHBvd2VyIDAuOTg0ICAwLjUgLT4gMC45OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzIgIHBvd2VyIDAuMDk4NCAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzczICBwb3dlciAwLjk4NSAgMC41IC0+IDAuOTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzc0ICBwb3dlciAwLjA5ODUgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3NSAgcG93ZXIgMC45ODYgIDAuNSAtPiAwLjk5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3NiAgcG93ZXIgMC4wOTg2ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzcgIHBvd2VyIDAuOTg3ICAwLjUgLT4gMC45OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzggIHBvd2VyIDAuMDk4NyAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzc5ICBwb3dlciAwLjk4OCAgMC41IC0+IDAuOTk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzgwICBwb3dlciAwLjA5ODggIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4MSAgcG93ZXIgMC45ODkgIDAuNSAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4MiAgcG93ZXIgMC4wOTg5ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODMgIHBvd2VyIDAuOTkxICAwLjUgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODQgIHBvd2VyIDAuMDk5MSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzg1ICBwb3dlciAwLjk5MiAgMC41IC0+IDAuOTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzg2ICBwb3dlciAwLjA5OTIgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4NyAgcG93ZXIgMC45OTMgIDAuNSAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4OCAgcG93ZXIgMC4wOTkzICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODkgIHBvd2VyIDAuOTk0ICAwLjUgLT4gMC45OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTAgIHBvd2VyIDAuMDk5NCAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzkxICBwb3dlciAwLjk5NSAgMC41IC0+IDAuOTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzkyICBwb3dlciAwLjA5OTUgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5MyAgcG93ZXIgMC45OTYgIDAuNSAtPiAwLjk5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5NCAgcG93ZXIgMC4wOTk2ICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTUgIHBvd2VyIDAuOTk3ICAwLjUgLT4gMC45OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTYgIHBvd2VyIDAuMDk5NyAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzk3ICBwb3dlciAwLjk5OCAgMC41IC0+IDAuOTk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzk4ICBwb3dlciAwLjA5OTggIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5OSAgcG93ZXIgMC45OTkgIDAuNSAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDgwMCAgcG93ZXIgMC4wOTk5ICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorCistLSBBIGdyb3VwIG9mIHByZWNpc2lvbiA0IHRlc3RzIHdoZXJlIEh1bGwgJiBBYnJoYW0gYWRqdXN0bWVudHMgYXJlCistLSBuZWVkZWQgaW4gc29tZSBjYXNlcyAoYm90aCB1cCBhbmQgZG93bikgW3NlZSBIdWxsMTk4NWJdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDQKK3B3c3g1MDAxICBwb3dlciAwLjAxMTggICAwLjUgLT4gMC4xMDg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDAyICBwb3dlciAwLjExOSAgICAwLjUgLT4gMC4zNDUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDAzICBwb3dlciAwLjAxMTkgICAwLjUgLT4gMC4xMDkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA0ICBwb3dlciAwLjEyMSAgICAwLjUgLT4gMC4zNDc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA1ICBwb3dlciAwLjAxMjEgICAwLjUgLT4gMC4xMTAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA2ICBwb3dlciAwLjEyMiAgICAwLjUgLT4gMC4zNDkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA3ICBwb3dlciAwLjAxMjIgICAwLjUgLT4gMC4xMTA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA4ICBwb3dlciAwLjEyMyAgICAwLjUgLT4gMC4zNTA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDA5ICBwb3dlciAwLjQ5NCAgICAwLjUgLT4gMC43MDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDEwICBwb3dlciAwLjA2NjkgICAwLjUgLT4gMC4yNTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDExICBwb3dlciAwLjk1NTggICAwLjUgLT4gMC45Nzc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDEyICBwb3dlciAwLjkzNDggICAwLjUgLT4gMC45NjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDEzICBwb3dlciAwLjkzNDUgICAwLjUgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDE0ICBwb3dlciAwLjA5MzQ1ICAwLjUgLT4gMC4zMDU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDE1ICBwb3dlciAwLjkzNDYgICAwLjUgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDE2ICBwb3dlciAwLjA5MzQ2ICAwLjUgLT4gMC4zMDU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g1MDE3ICBwb3dlciAwLjkzNDcgICAwLjUgLT4gMC45NjY4ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorcHJlY2lzaW9uOiA5Citwd3N4NzAwICBwb3dlciAgMCAgICAgICAgMC41IC0+ICcwJworcHdzeDcwMSAgcG93ZXIgIC0wICAgICAgIDAuNSAtPiAnMCcKK3B3c3g3MDIgIHBvd2VyICAwLjM5ICAgICAwLjUgLT4gMC42MjQ0OTk4MDAgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzAzICBwb3dlciAgMTAwICAgICAgMC41IC0+ICcxMC4wMDAwMDAwJyAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcwNCAgcG93ZXIgIDEuMDAgICAgIDAuNSAtPiAnMS4wMDAwMDAwMCcgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MDUgIHBvd2VyICA3ICAgICAgICAwLjUgLT4gJzIuNjQ1NzUxMzEnICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzA2ICBwb3dlciAgMTAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIG9uZS1vZmZzCitwcmVjaXNpb246IDkKK3B3c3g3MTEgIHBvd2VyICAwLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzEyICBwb3dlciAgMC4yICAgICAgMC41IC0+IDAuNDQ3MjEzNTk1ICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxMyAgcG93ZXIgIDAuMyAgICAgIDAuNSAtPiAwLjU0NzcyMjU1OCAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTQgIHBvd2VyICAwLjQgICAgICAwLjUgLT4gMC42MzI0NTU1MzIgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzE1ICBwb3dlciAgMC41ICAgICAgMC41IC0+IDAuNzA3MTA2NzgxICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxNiAgcG93ZXIgIDAuNiAgICAgIDAuNSAtPiAwLjc3NDU5NjY2OSAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTcgIHBvd2VyICAwLjcgICAgICAwLjUgLT4gMC44MzY2NjAwMjcgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzE4ICBwb3dlciAgMC44ICAgICAgMC41IC0+IDAuODk0NDI3MTkxICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxOSAgcG93ZXIgIDAuOSAgICAgIDAuNSAtPiAwLjk0ODY4MzI5OCAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAgICAgICAgICAgICAgICAtLSBub3RlIG5vIG5vcm1hbGl6YXRvaW4gaGVyZQorcHdzeDcyMCAgcG93ZXIgKzAuMSAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NjAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTEKK3B3c3g3MjEgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwMiAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEyCitwd3N4NzIyICBwb3dlciArMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2MDE3IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA5Citwd3N4NzIzICBwb3dlciAgMC4zOSAgICAgMC41IC0+IDAuNjI0NDk5ODAwICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNQorcHdzeDcyNCAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTc5OTgzOTg0MCBJbmV4YWN0IFJvdW5kZWQKKworLS0gZGlzY3Vzc2lvbiBjYXNlcworcHJlY2lzaW9uOiA3Citwd3N4NzMxICBwb3dlciAgICAgOSAgICAwLjUgLT4gMy4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDczMiAgcG93ZXIgICAxMDAgICAgMC41IC0+IDEwLjAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MzMgIHBvd2VyICAgMTIzICAgIDAuNSAtPiAxMS4wOTA1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzM0ICBwb3dlciAgIDE0NCAgICAwLjUgLT4gMTIuMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDczNSAgcG93ZXIgICAxNTYgICAgMC41IC0+IDEyLjQ5MDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MzYgIHBvd2VyIDEwMDAwICAgIDAuNSAtPiAxMDAuMDAwMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHZhbHVlcyBjbG9zZSB0byBvdmVyZmxvdyAoaWYgdGhlcmUgd2VyZSBpbnB1dCByb3VuZGluZykKK21heGV4cG9uZW50OiA5OQorbWluZXhwb25lbnQ6IC05OQorcHJlY2lzaW9uOiA1Citwd3N4NzYwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gOS45OTk4RSs0OSBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NjEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiA5Ljk5OTlFKzQ5IEluZXhhY3QgUm91bmRlZAorcHdzeDc2MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+IDkuOTk5OUUrNDkgSW5leGFjdCBSb3VuZGVkCitwd3N4NzYzICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NjQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiAxLjAwMDBFKzUwIEluZXhhY3QgUm91bmRlZAorcHdzeDc2NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzY2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOQorcHdzeDc3MCAgcG93ZXIgIDkuOTk5N0UrOTkgICAgMC41IC0+IDkuOTk5ODUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NzEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiA5Ljk5OTkwMDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzcyICBwb3dlciAgOS45OTk5RSs5OSAgICAwLjUgLT4gOS45OTk5NTAwMEUrNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDc3MyAgcG93ZXIgIDkuOTk5OTFFKzk5ICAgMC41IC0+IDkuOTk5OTU1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NzQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiA5Ljk5OTk3MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Nzc1ICBwb3dlciAgOS45OTk5NUUrOTkgICAwLjUgLT4gOS45OTk5NzUwMEUrNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDc3NiAgcG93ZXIgIDkuOTk5OTlFKzk5ICAgMC41IC0+IDkuOTk5OTk1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK3B3c3g3ODAgIHBvd2VyICA5Ljk5OTdFKzk5ICAgIDAuNSAtPiAnOS45OTk4NDk5OTg4NzQ5ODMxMjQ3RSs0OScgSW5leGFjdCBSb3VuZGVkCitwd3N4NzgxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gJzkuOTk5ODk5OTk5NDk5OTk0OTk5OUUrNDknIEluZXhhY3QgUm91bmRlZAorcHdzeDc4MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+ICc5Ljk5OTk0OTk5OTg3NDk5OTM3NTBFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3ODMgIHBvd2VyICA5Ljk5OTkxRSs5OSAgIDAuNSAtPiAnOS45OTk5NTQ5OTk4OTg3NDk1NDQ0RSs0OScgSW5leGFjdCBSb3VuZGVkCitwd3N4Nzg0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gJzkuOTk5OTY5OTk5OTU0OTk5ODY1MEUrNDknIEluZXhhY3QgUm91bmRlZAorcHdzeDc4NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+ICc5Ljk5OTk3NDk5OTk2ODc0OTkyMTlFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3ODYgIHBvd2VyICA5Ljk5OTk5RSs5OSAgIDAuNSAtPiAnOS45OTk5OTQ5OTk5OTg3NDk5OTk0RSs0OScgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MgW3RoZXNlIGNhbiBvbmx5IHJlc3VsdCB3aGVuIGVNYXggaXMgPCBkaWdpdHMrMV0KKy0tIEV0aW55ID0gLShFbWF4ICsgKHByZWNpc2lvbi0xKSkKKy0tIHN0YXJ0IHdpdGggc3Vibm9ybWFsIG9wZXJhbmRzIGFuZCBub3JtYWwgcmVzdWx0cworbWF4ZXhwb25lbnQ6IDkKK21pbmV4cG9uZW50OiAtOQorcHJlY2lzaW9uOiA5ICAgICAgICAgICAgICAgIC0tIEV0aW55PS0xNworcHdzeDgwMCAgcG93ZXIgIDFFLTE3ICAgIDAuNSAtPiAzLjE2MjI3NzY2RS05IEluZXhhY3QgUm91bmRlZAorcHdzeDgwMSAgcG93ZXIgMTBFLTE3ICAgIDAuNSAtPiAxLjAwMDAwMDAwRS04IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMCAgICAgICAgICAgICAgIC0tIEV0aW55PS0xOAorcHdzeDgwMiAgcG93ZXIgMTBFLTE4ICAgIDAuNSAtPiAzLjE2MjI3NzY2MEUtOSBJbmV4YWN0IFJvdW5kZWQKK3B3c3g4MDMgIHBvd2VyICAxRS0xOCAgICAwLjUgLT4gMS4wMDAwMDAwMDBFLTkgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTEgICAgICAgICAgICAgICAtLSBFdGlueT0tMTkKK3B3c3g4MDQgIHBvd2VyICAxRS0xOSAgICAwLjUgLT4gMy4xNjIyNzc2NjBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCistLSBUaGUgbmV4dCB0ZXN0IHNob3VsZCBiZSBza2lwcGVkIGZvciBkZWNOdW1iZXIKK3B3c3g4MDUgIHBvd2VyIDEwRS0xOSAgICAwLjUgLT4gMS4wMDAwMDAwMDAwRS05IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMiAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMAorcHdzeDgwNiAgcG93ZXIgMTBFLTIwICAgIDAuNSAtPiAzLjE2MjI3NzY2MDJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwd3N4ODA3ICBwb3dlciAgMUUtMjAgICAgMC41IC0+IDEuMDAwMDAwMDAwMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxMyAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMQorcHdzeDgwOCAgcG93ZXIgIDFFLTIxICAgIDAuNSAtPiAzLjE2MjI3NzY2MDJFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwd3N4ODA5ICBwb3dlciAxMEUtMjEgICAgMC41IC0+IDEuMDAwMDAwMDAwMDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE0ICAgICAgICAgICAgICAgLS0gRXRpbnk9LTIyCitwd3N4ODEwICBwb3dlciAgMUUtMjEgICAgMC41IC0+IDMuMTYyMjc3NjYwMTdFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwd3N4ODExICBwb3dlciAxMEUtMjIgICAgMC41IC0+IDMuMTYyMjc3NjYwMTdFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwd3N4ODEyICBwb3dlciAgMUUtMjIgICAgMC41IC0+IDEuMDAwMDAwMDAwMDBFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKworLS0gc3BlY2lhbCB2YWx1ZXMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5Citwd3N4ODIwICBwb3dlciAgIEluZiAgICAgMC41IC0+IEluZmluaXR5Citwd3N4ODIxICBwb3dlciAgLUluZiAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDgyMiAgcG93ZXIgICBOYU4gICAgIDAuNSAtPiBOYU4KK3B3c3g4MjMgIHBvd2VyICBzTmFOICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitwd3N4ODI0ICBwb3dlciAgc05hTjEyMyAgMC41IC0+IE5hTjEyMyBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDgyNSAgcG93ZXIgLXNOYU4zMjEgIDAuNSAtPiAtTmFOMzIxIEludmFsaWRfb3BlcmF0aW9uCitwd3N4ODI2ICBwb3dlciAgIE5hTjQ1NiAgMC41IC0+IE5hTjQ1NgorcHdzeDgyNyAgcG93ZXIgIC1OYU42NTQgIDAuNSAtPiAtTmFONjU0Citwd3N4ODI4ICBwb3dlciAgIE5hTjEgICAgMC41IC0+IE5hTjEKKworLS0gTnVsbCB0ZXN0Citwd3N4OTAwICBwb3dlciAgIyAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9xdWFudGl6ZS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9xdWFudGl6ZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjg0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3F1YW50aXplLmRlY1Rlc3QKQEAgLTAsMCArMSw5NDggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gcXVhbnRpemUuZGVjVGVzdCAtLSBkZWNpbWFsIHF1YW50aXplIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBNb3N0IG9mIHRoZSB0ZXN0cyBoZXJlIGFzc3VtZSBhICJyZWd1bGFyIHBhdHRlcm4iLCB3aGVyZSB0aGUKKy0tIHNpZ24gYW5kIGNvZWZmaWNpZW50IGFyZSArMS4KKy0tIDIwMDQuMDMuMTUgVW5kZXJmbG93IGZvciBxdWFudGl6ZSBpcyBzdXBwcmVzc2VkCistLSAyMDA1LjA2LjA4IE1vcmUgZXh0ZW5zaXZlIHRlc3RzIGZvciAnZG9lcyBub3QgZml0JworCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorCistLSBzYW5pdHkgY2hlY2tzCitxdWF4MDAxIHF1YW50aXplIDAgICAgICAgMWUwICAgLT4gMAorcXVheDAwMiBxdWFudGl6ZSAxICAgICAgIDFlMCAgIC0+IDEKK3F1YXgwMDMgcXVhbnRpemUgMC4xICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDAwNSBxdWFudGl6ZSAwLjEgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDA2IHF1YW50aXplIDAuMSAgICAgMWUwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMDcgcXVhbnRpemUgMC4xICAgIDFlLTEgICAtPiAwLjEKK3F1YXgwMDggcXVhbnRpemUgMC4xICAgIDFlLTIgICAtPiAwLjEwCitxdWF4MDA5IHF1YW50aXplIDAuMSAgICAxZS0zICAgLT4gMC4xMDAKK3F1YXgwMTAgcXVhbnRpemUgMC45ICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDAxMSBxdWFudGl6ZSAwLjkgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDEyIHF1YW50aXplIDAuOSAgICAxZSswICAgLT4gMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMTMgcXVhbnRpemUgMC45ICAgIDFlLTEgICAtPiAwLjkKK3F1YXgwMTQgcXVhbnRpemUgMC45ICAgIDFlLTIgICAtPiAwLjkwCitxdWF4MDE1IHF1YW50aXplIDAuOSAgICAxZS0zICAgLT4gMC45MDAKKy0tIG5lZ2F0aXZlcworcXVheDAyMSBxdWFudGl6ZSAtMCAgICAgIDFlMCAgIC0+IC0wCitxdWF4MDIyIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gLTEKK3F1YXgwMjMgcXVhbnRpemUgLTAuMSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMjUgcXVhbnRpemUgLTAuMSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMjYgcXVhbnRpemUgLTAuMSAgICAxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMjcgcXVhbnRpemUgLTAuMSAgIDFlLTEgICAtPiAtMC4xCitxdWF4MDI4IHF1YW50aXplIC0wLjEgICAxZS0yICAgLT4gLTAuMTAKK3F1YXgwMjkgcXVhbnRpemUgLTAuMSAgIDFlLTMgICAtPiAtMC4xMDAKK3F1YXgwMzAgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMzEgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMzIgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMzMgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45CitxdWF4MDM0IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTAKK3F1YXgwMzUgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKK3F1YXgwMzYgcXVhbnRpemUgLTAuNSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMzcgcXVhbnRpemUgLTAuNSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMzggcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMzkgcXVhbnRpemUgLTAuNSAgIDFlLTEgICAtPiAtMC41CitxdWF4MDQwIHF1YW50aXplIC0wLjUgICAxZS0yICAgLT4gLTAuNTAKK3F1YXgwNDEgcXVhbnRpemUgLTAuNSAgIDFlLTMgICAtPiAtMC41MDAKK3F1YXgwNDIgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwNDMgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwNDQgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwNDUgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45CitxdWF4MDQ2IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTAKK3F1YXgwNDcgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKKworLS0gZXhhbXBsZXMgZnJvbSBTcGVjaWZpY2F0aW9uCitxdWF4MDYwIHF1YW50aXplIDIuMTcgICAwLjAwMSAgLT4gMi4xNzAKK3F1YXgwNjEgcXVhbnRpemUgMi4xNyAgIDAuMDEgICAtPiAyLjE3CitxdWF4MDYyIHF1YW50aXplIDIuMTcgICAwLjEgICAgLT4gMi4yIEluZXhhY3QgUm91bmRlZAorcXVheDA2MyBxdWFudGl6ZSAyLjE3ICAgMWUrMCAgIC0+IDIgSW5leGFjdCBSb3VuZGVkCitxdWF4MDY0IHF1YW50aXplIDIuMTcgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwNjUgcXVhbnRpemUgLUluZiAgICBJbmYgICAtPiAtSW5maW5pdHkKK3F1YXgwNjYgcXVhbnRpemUgMiAgICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgwNjcgcXVhbnRpemUgLTAuMSAgICAxICAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwNjggcXVhbnRpemUgLTAgICAgICAxZSs1ICAgICAtPiAtMEUrNQorcXVheDA2OSBxdWFudGl6ZSArMzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDA3MCBxdWFudGl6ZSAtMzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDA3MSBxdWFudGl6ZSAyMTcgICAgMWUtMSAgIC0+IDIxNy4wCitxdWF4MDcyIHF1YW50aXplIDIxNyAgICAxZSswICAgLT4gMjE3CitxdWF4MDczIHF1YW50aXplIDIxNyAgICAxZSsxICAgLT4gMi4yRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDA3NCBxdWFudGl6ZSAyMTcgICAgMWUrMiAgIC0+IDJFKzIgSW5leGFjdCBSb3VuZGVkCisKKy0tIGdlbmVyYWwgdGVzdHMgLi4KK3F1YXgwODkgcXVhbnRpemUgMTIgICAgIDFlKzQgICAtPiAwRSs0IEluZXhhY3QgUm91bmRlZAorcXVheDA5MCBxdWFudGl6ZSAxMiAgICAgMWUrMyAgIC0+IDBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4MDkxIHF1YW50aXplIDEyICAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwOTIgcXVhbnRpemUgMTIgICAgIDFlKzEgICAtPiAxRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDA5MyBxdWFudGl6ZSAxLjIzNDUgMWUtMiAgIC0+IDEuMjMgSW5leGFjdCBSb3VuZGVkCitxdWF4MDk0IHF1YW50aXplIDEuMjM1NSAxZS0yICAgLT4gMS4yNCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwOTUgcXVhbnRpemUgMS4yMzQ1IDFlLTYgICAtPiAxLjIzNDUwMAorcXVheDA5NiBxdWFudGl6ZSA5Ljk5OTkgMWUtMiAgIC0+IDEwLjAwIEluZXhhY3QgUm91bmRlZAorcXVheDA5NyBxdWFudGl6ZSAwLjAwMDEgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkCitxdWF4MDk4IHF1YW50aXplIDAuMDAxICAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwOTkgcXVhbnRpemUgMC4wMDkgIDFlLTIgICAtPiAwLjAxIEluZXhhY3QgUm91bmRlZAorcXVheDEwMCBxdWFudGl6ZSA5MiAgICAgMWUrMiAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCisKK3F1YXgxMDEgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAgLTEKK3F1YXgxMDIgcXVhbnRpemUgLTEgICAgIDFlLTEgICAtPiAgLTEuMAorcXVheDEwMyBxdWFudGl6ZSAtMSAgICAgMWUtMiAgIC0+ICAtMS4wMAorcXVheDEwNCBxdWFudGl6ZSAgMCAgICAgIDFlMCAgIC0+ICAwCitxdWF4MTA1IHF1YW50aXplICAwICAgICAxZS0xICAgLT4gIDAuMAorcXVheDEwNiBxdWFudGl6ZSAgMCAgICAgMWUtMiAgIC0+ICAwLjAwCitxdWF4MTA3IHF1YW50aXplICAwLjAwICAgMWUwICAgLT4gIDAKK3F1YXgxMDggcXVhbnRpemUgIDAgICAgIDFlKzEgICAtPiAgMEUrMQorcXVheDEwOSBxdWFudGl6ZSAgMCAgICAgMWUrMiAgIC0+ICAwRSsyCitxdWF4MTEwIHF1YW50aXplICsxICAgICAgMWUwICAgLT4gIDEKK3F1YXgxMTEgcXVhbnRpemUgKzEgICAgIDFlLTEgICAtPiAgMS4wCitxdWF4MTEyIHF1YW50aXplICsxICAgICAxZS0yICAgLT4gIDEuMDAKKworcXVheDEyMCBxdWFudGl6ZSAgIDEuMDQgIDFlLTMgLT4gIDEuMDQwCitxdWF4MTIxIHF1YW50aXplICAgMS4wNCAgMWUtMiAtPiAgMS4wNAorcXVheDEyMiBxdWFudGl6ZSAgIDEuMDQgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMjMgcXVhbnRpemUgICAxLjA0ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorcXVheDEyNCBxdWFudGl6ZSAgIDEuMDUgIDFlLTMgLT4gIDEuMDUwCitxdWF4MTI1IHF1YW50aXplICAgMS4wNSAgMWUtMiAtPiAgMS4wNQorcXVheDEyNiBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMzEgcXVhbnRpemUgICAxLjA1ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorcXVheDEzMiBxdWFudGl6ZSAgIDEuMDYgIDFlLTMgLT4gIDEuMDYwCitxdWF4MTMzIHF1YW50aXplICAgMS4wNiAgMWUtMiAtPiAgMS4wNgorcXVheDEzNCBxdWFudGl6ZSAgIDEuMDYgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMzUgcXVhbnRpemUgICAxLjA2ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCitxdWF4MTQwIHF1YW50aXplICAgLTEwICAgIDFlLTIgIC0+ICAtMTAuMDAKK3F1YXgxNDEgcXVhbnRpemUgICArMSAgICAgMWUtMiAgLT4gIDEuMDAKK3F1YXgxNDIgcXVhbnRpemUgICArMTAgICAgMWUtMiAgLT4gIDEwLjAwCitxdWF4MTQzIHF1YW50aXplICAgMUUrMTAgIDFlLTIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgxNDQgcXVhbnRpemUgICAxRS0xMCAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkCitxdWF4MTQ1IHF1YW50aXplICAgMUUtMyAgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAorcXVheDE0NiBxdWFudGl6ZSAgIDFFLTIgICAxZS0yICAtPiAgMC4wMQorcXVheDE0NyBxdWFudGl6ZSAgIDFFLTEgICAxZS0yICAtPiAgMC4xMAorcXVheDE0OCBxdWFudGl6ZSAgIDBFLTEwICAxZS0yICAtPiAgMC4wMAorCitxdWF4MTUwIHF1YW50aXplICAgMS4wNjAwIDFlLTUgLT4gIDEuMDYwMDAKK3F1YXgxNTEgcXVhbnRpemUgICAxLjA2MDAgMWUtNCAtPiAgMS4wNjAwCitxdWF4MTUyIHF1YW50aXplICAgMS4wNjAwIDFlLTMgLT4gIDEuMDYwIFJvdW5kZWQKK3F1YXgxNTMgcXVhbnRpemUgICAxLjA2MDAgMWUtMiAtPiAgMS4wNiBSb3VuZGVkCitxdWF4MTU0IHF1YW50aXplICAgMS4wNjAwIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxNTUgcXVhbnRpemUgICAxLjA2MDAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gYmFzZSB0ZXN0cyB3aXRoIG5vbi0xIGNvZWZmaWNpZW50cworcXVheDE2MSBxdWFudGl6ZSAwICAgICAgLTllMCAgIC0+IDAKK3F1YXgxNjIgcXVhbnRpemUgMSAgICAgIC03ZTAgICAtPiAxCitxdWF4MTYzIHF1YW50aXplIDAuMSAgIC0xZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxNjUgcXVhbnRpemUgMC4xICAgIDBlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDE2NiBxdWFudGl6ZSAwLjEgICAgIDJlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCitxdWF4MTY3IHF1YW50aXplIDAuMSAgICAzZS0xICAgLT4gMC4xCitxdWF4MTY4IHF1YW50aXplIDAuMSAgIDQ0ZS0yICAgLT4gMC4xMAorcXVheDE2OSBxdWFudGl6ZSAwLjEgIDU1NWUtMyAgIC0+IDAuMTAwCitxdWF4MTcwIHF1YW50aXplIDAuOSA2NjY2ZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxNzEgcXVhbnRpemUgMC45IC03NzdlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDE3MiBxdWFudGl6ZSAwLjkgIC04OGUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCitxdWF4MTczIHF1YW50aXplIDAuOSAgIC05ZS0xICAgLT4gMC45CitxdWF4MTc0IHF1YW50aXplIDAuOSAgICAwZS0yICAgLT4gMC45MAorcXVheDE3NSBxdWFudGl6ZSAwLjkgIDEuMWUtMyAgIC0+IDAuOTAwMAorLS0gbmVnYXRpdmVzCitxdWF4MTgxIHF1YW50aXplIC0wICAgIDEuMWUwICAgLT4gLTAuMAorcXVheDE4MiBxdWFudGl6ZSAtMSAgICAgLTFlMCAgIC0+IC0xCitxdWF4MTgzIHF1YW50aXplIC0wLjEgIDExZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MTg1IHF1YW50aXplIC0wLjEgMTExZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MTg2IHF1YW50aXplIC0wLjEgICA3MWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitxdWF4MTg3IHF1YW50aXplIC0wLjEgLTkxZS0xICAgLT4gLTAuMQorcXVheDE4OCBxdWFudGl6ZSAtMC4xIC0uMWUtMiAgIC0+IC0wLjEwMAorcXVheDE4OSBxdWFudGl6ZSAtMC4xICAtMWUtMyAgIC0+IC0wLjEwMAorcXVheDE5MCBxdWFudGl6ZSAtMC45ICAgMGUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDE5MSBxdWFudGl6ZSAtMC45ICAtMGUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDE5MiBxdWFudGl6ZSAtMC45IC0xMGUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorcXVheDE5MyBxdWFudGl6ZSAtMC45IDEwMGUtMSAgIC0+IC0wLjkKK3F1YXgxOTQgcXVhbnRpemUgLTAuOSA5OTllLTIgICAtPiAtMC45MAorCistLSArdmUgZXhwb25lbnRzIC4uCitxdWF4MjAxIHF1YW50aXplICAgLTEgICAxZSswIC0+ICAtMQorcXVheDIwMiBxdWFudGl6ZSAgIC0xICAgMWUrMSAtPiAgLTBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjAzIHF1YW50aXplICAgLTEgICAxZSsyIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMDQgcXVhbnRpemUgICAgMCAgIDFlKzAgLT4gIDAKK3F1YXgyMDUgcXVhbnRpemUgICAgMCAgIDFlKzEgLT4gIDBFKzEKK3F1YXgyMDYgcXVhbnRpemUgICAgMCAgIDFlKzIgLT4gIDBFKzIKK3F1YXgyMDcgcXVhbnRpemUgICArMSAgIDFlKzAgLT4gIDEKK3F1YXgyMDggcXVhbnRpemUgICArMSAgIDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjA5IHF1YW50aXplICAgKzEgICAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitxdWF4MjIwIHF1YW50aXplICAgMS4wNCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcXVheDIyMSBxdWFudGl6ZSAgIDEuMDQgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMjIgcXVhbnRpemUgICAxLjA0IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjIzIHF1YW50aXplICAgMS4wNCAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorcXVheDIyNCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMjUgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MjI2IHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDIyNyBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMjggcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4MjI5IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDIzMCBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMzEgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjMyIHF1YW50aXplICAgMS4wNiAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcXVheDIzMyBxdWFudGl6ZSAgIDEuMDYgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMzQgcXVhbnRpemUgICAxLjA2IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjM1IHF1YW50aXplICAgMS4wNiAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCitxdWF4MjQwIHF1YW50aXplICAgLTEwICAgMWUrMSAgLT4gIC0xRSsxIFJvdW5kZWQKK3F1YXgyNDEgcXVhbnRpemUgICArMSAgICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyNDIgcXVhbnRpemUgICArMTAgICAxZSsxICAtPiAgMUUrMSBSb3VuZGVkCitxdWF4MjQzIHF1YW50aXplICAgMUUrMSAgMWUrMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcXVheDI0NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzEgIC0+ICAxLjBFKzIgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3F1YXgyNDUgcXVhbnRpemUgICAxRSszICAxZSsxICAtPiAgMS4wMEUrMyAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitxdWF4MjQ2IHF1YW50aXplICAgMUUrNCAgMWUrMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcXVheDI0NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzEgIC0+ICAxLjAwMDBFKzUgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3F1YXgyNDggcXVhbnRpemUgICAxRSs2ICAxZSsxICAtPiAgMS4wMDAwMEUrNiAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitxdWF4MjQ5IHF1YW50aXplICAgMUUrNyAgMWUrMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcXVheDI1MCBxdWFudGl6ZSAgIDFFKzggIDFlKzEgIC0+ICAxLjAwMDAwMDBFKzggIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3F1YXgyNTEgcXVhbnRpemUgICAxRSs5ICAxZSsxICAtPiAgMS4wMDAwMDAwMEUrOSAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCistLSBuZXh0IG9uZSB0cmllcyB0byBhZGQgOSB6ZXJvcworcXVheDI1MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgyNTMgcXVhbnRpemUgICAxRS0xMCAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyNTQgcXVhbnRpemUgICAxRS0yICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyNTUgcXVhbnRpemUgICAwRS0xMCAxZSsxICAtPiAgMEUrMQorcXVheDI1NiBxdWFudGl6ZSAgLTBFLTEwIDFlKzEgIC0+IC0wRSsxCitxdWF4MjU3IHF1YW50aXplICAtMEUtMSAgMWUrMSAgLT4gLTBFKzEKK3F1YXgyNTggcXVhbnRpemUgIC0wICAgICAxZSsxICAtPiAtMEUrMQorcXVheDI1OSBxdWFudGl6ZSAgLTBFKzEgIDFlKzEgIC0+IC0wRSsxCisKK3F1YXgyNjAgcXVhbnRpemUgICAtMTAgICAxZSsyICAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MjYxIHF1YW50aXplICAgKzEgICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MjYyIHF1YW50aXplICAgKzEwICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MjYzIHF1YW50aXplICAgMUUrMSAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MjY0IHF1YW50aXplICAgMUUrMiAgMWUrMiAgLT4gIDFFKzIKK3F1YXgyNjUgcXVhbnRpemUgICAxRSszICAxZSsyICAtPiAgMS4wRSszCitxdWF4MjY2IHF1YW50aXplICAgMUUrNCAgMWUrMiAgLT4gIDEuMDBFKzQKK3F1YXgyNjcgcXVhbnRpemUgICAxRSs1ICAxZSsyICAtPiAgMS4wMDBFKzUKK3F1YXgyNjggcXVhbnRpemUgICAxRSs2ICAxZSsyICAtPiAgMS4wMDAwRSs2CitxdWF4MjY5IHF1YW50aXplICAgMUUrNyAgMWUrMiAgLT4gIDEuMDAwMDBFKzcKK3F1YXgyNzAgcXVhbnRpemUgICAxRSs4ICAxZSsyICAtPiAgMS4wMDAwMDBFKzgKK3F1YXgyNzEgcXVhbnRpemUgICAxRSs5ICAxZSsyICAtPiAgMS4wMDAwMDAwRSs5CitxdWF4MjcyIHF1YW50aXplICAgMUUrMTAgMWUrMiAgLT4gIDEuMDAwMDAwMDBFKzEwCitxdWF4MjczIHF1YW50aXplICAgMUUtMTAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4Mjc0IHF1YW50aXplICAgMUUtMiAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4Mjc1IHF1YW50aXplICAgMEUtMTAgMWUrMiAgLT4gIDBFKzIKKworcXVheDI4MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyODEgcXVhbnRpemUgICArMSAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyODIgcXVhbnRpemUgICArMTAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyODMgcXVhbnRpemUgICAxRSsxICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyODQgcXVhbnRpemUgICAxRSsyICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyODUgcXVhbnRpemUgICAxRSszICAxZSszICAtPiAgMUUrMworcXVheDI4NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzMgIC0+ICAxLjBFKzQKK3F1YXgyODcgcXVhbnRpemUgICAxRSs1ICAxZSszICAtPiAgMS4wMEUrNQorcXVheDI4OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzMgIC0+ICAxLjAwMEUrNgorcXVheDI4OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzMgIC0+ICAxLjAwMDBFKzcKK3F1YXgyOTAgcXVhbnRpemUgICAxRSs4ICAxZSszICAtPiAgMS4wMDAwMEUrOAorcXVheDI5MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzMgIC0+ICAxLjAwMDAwMEUrOQorcXVheDI5MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzMgIC0+ICAxLjAwMDAwMDBFKzEwCitxdWF4MjkzIHF1YW50aXplICAgMUUtMTAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4Mjk0IHF1YW50aXplICAgMUUtMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4Mjk1IHF1YW50aXplICAgMEUtMTAgMWUrMyAgLT4gIDBFKzMKKworLS0gcm91bmQgdXAgZnJvbSBiZWxvdyBbc2lnbiB3cm9uZyBpbiBKSVQgY29tcGlsZXIgb25jZV0KK3F1YXgzMDAgcXVhbnRpemUgICAwLjAwNzggMWUtNSAtPiAgMC4wMDc4MAorcXVheDMwMSBxdWFudGl6ZSAgIDAuMDA3OCAxZS00IC0+ICAwLjAwNzgKK3F1YXgzMDIgcXVhbnRpemUgICAwLjAwNzggMWUtMyAtPiAgMC4wMDggSW5leGFjdCBSb3VuZGVkCitxdWF4MzAzIHF1YW50aXplICAgMC4wMDc4IDFlLTIgLT4gIDAuMDEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzA0IHF1YW50aXplICAgMC4wMDc4IDFlLTEgLT4gIDAuMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMDUgcXVhbnRpemUgICAwLjAwNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMDYgcXVhbnRpemUgICAwLjAwNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMDcgcXVhbnRpemUgICAwLjAwNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworcXVheDMxMCBxdWFudGl6ZSAgLTAuMDA3OCAxZS01IC0+IC0wLjAwNzgwCitxdWF4MzExIHF1YW50aXplICAtMC4wMDc4IDFlLTQgLT4gLTAuMDA3OAorcXVheDMxMiBxdWFudGl6ZSAgLTAuMDA3OCAxZS0zIC0+IC0wLjAwOCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMTMgcXVhbnRpemUgIC0wLjAwNzggMWUtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMTQgcXVhbnRpemUgIC0wLjAwNzggMWUtMSAtPiAtMC4wIEluZXhhY3QgUm91bmRlZAorcXVheDMxNSBxdWFudGl6ZSAgLTAuMDA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZAorcXVheDMxNiBxdWFudGl6ZSAgLTAuMDA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDMxNyBxdWFudGl6ZSAgLTAuMDA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitxdWF4MzIwIHF1YW50aXplICAgMC4wNzggMWUtNSAtPiAgMC4wNzgwMAorcXVheDMyMSBxdWFudGl6ZSAgIDAuMDc4IDFlLTQgLT4gIDAuMDc4MAorcXVheDMyMiBxdWFudGl6ZSAgIDAuMDc4IDFlLTMgLT4gIDAuMDc4CitxdWF4MzIzIHF1YW50aXplICAgMC4wNzggMWUtMiAtPiAgMC4wOCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMjQgcXVhbnRpemUgICAwLjA3OCAxZS0xIC0+ICAwLjEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzI1IHF1YW50aXplICAgMC4wNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMjYgcXVhbnRpemUgICAwLjA3OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDMyNyBxdWFudGl6ZSAgIDAuMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3F1YXgzMzAgcXVhbnRpemUgIC0wLjA3OCAxZS01IC0+IC0wLjA3ODAwCitxdWF4MzMxIHF1YW50aXplICAtMC4wNzggMWUtNCAtPiAtMC4wNzgwCitxdWF4MzMyIHF1YW50aXplICAtMC4wNzggMWUtMyAtPiAtMC4wNzgKK3F1YXgzMzMgcXVhbnRpemUgIC0wLjA3OCAxZS0yIC0+IC0wLjA4IEluZXhhY3QgUm91bmRlZAorcXVheDMzNCBxdWFudGl6ZSAgLTAuMDc4IDFlLTEgLT4gLTAuMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMzUgcXVhbnRpemUgIC0wLjA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZAorcXVheDMzNiBxdWFudGl6ZSAgLTAuMDc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzM3IHF1YW50aXplICAtMC4wNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworcXVheDM0MCBxdWFudGl6ZSAgIDAuNzggMWUtNSAtPiAgMC43ODAwMAorcXVheDM0MSBxdWFudGl6ZSAgIDAuNzggMWUtNCAtPiAgMC43ODAwCitxdWF4MzQyIHF1YW50aXplICAgMC43OCAxZS0zIC0+ICAwLjc4MAorcXVheDM0MyBxdWFudGl6ZSAgIDAuNzggMWUtMiAtPiAgMC43OAorcXVheDM0NCBxdWFudGl6ZSAgIDAuNzggMWUtMSAtPiAgMC44IEluZXhhY3QgUm91bmRlZAorcXVheDM0NSBxdWFudGl6ZSAgIDAuNzggIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNDYgcXVhbnRpemUgICAwLjc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzQ3IHF1YW50aXplICAgMC43OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitxdWF4MzUwIHF1YW50aXplICAtMC43OCAxZS01IC0+IC0wLjc4MDAwCitxdWF4MzUxIHF1YW50aXplICAtMC43OCAxZS00IC0+IC0wLjc4MDAKK3F1YXgzNTIgcXVhbnRpemUgIC0wLjc4IDFlLTMgLT4gLTAuNzgwCitxdWF4MzUzIHF1YW50aXplICAtMC43OCAxZS0yIC0+IC0wLjc4CitxdWF4MzU0IHF1YW50aXplICAtMC43OCAxZS0xIC0+IC0wLjggSW5leGFjdCBSb3VuZGVkCitxdWF4MzU1IHF1YW50aXplICAtMC43OCAgMWUwIC0+IC0xIEluZXhhY3QgUm91bmRlZAorcXVheDM1NiBxdWFudGl6ZSAgLTAuNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNTcgcXVhbnRpemUgIC0wLjc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3F1YXgzNjAgcXVhbnRpemUgICA3LjggMWUtNSAtPiAgNy44MDAwMAorcXVheDM2MSBxdWFudGl6ZSAgIDcuOCAxZS00IC0+ICA3LjgwMDAKK3F1YXgzNjIgcXVhbnRpemUgICA3LjggMWUtMyAtPiAgNy44MDAKK3F1YXgzNjMgcXVhbnRpemUgICA3LjggMWUtMiAtPiAgNy44MAorcXVheDM2NCBxdWFudGl6ZSAgIDcuOCAxZS0xIC0+ICA3LjgKK3F1YXgzNjUgcXVhbnRpemUgICA3LjggIDFlMCAtPiAgOCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNjYgcXVhbnRpemUgICA3LjggMWUrMSAtPiAgMUUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNjcgcXVhbnRpemUgICA3LjggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNjggcXVhbnRpemUgICA3LjggMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKKworcXVheDM3MCBxdWFudGl6ZSAgLTcuOCAxZS01IC0+IC03LjgwMDAwCitxdWF4MzcxIHF1YW50aXplICAtNy44IDFlLTQgLT4gLTcuODAwMAorcXVheDM3MiBxdWFudGl6ZSAgLTcuOCAxZS0zIC0+IC03LjgwMAorcXVheDM3MyBxdWFudGl6ZSAgLTcuOCAxZS0yIC0+IC03LjgwCitxdWF4Mzc0IHF1YW50aXplICAtNy44IDFlLTEgLT4gLTcuOAorcXVheDM3NSBxdWFudGl6ZSAgLTcuOCAgMWUwIC0+IC04IEluZXhhY3QgUm91bmRlZAorcXVheDM3NiBxdWFudGl6ZSAgLTcuOCAxZSsxIC0+IC0xRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDM3NyBxdWFudGl6ZSAgLTcuOCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDM3OCBxdWFudGl6ZSAgLTcuOCAxZSszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGluZGl2aWR1YWxzCitwcmVjaXNpb246IDkKK3F1YXgzODAgcXVhbnRpemUgICAzNTIzNjQuNTA2IDFlLTIgLT4gMzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAorcXVheDM4MSBxdWFudGl6ZSAgIDM1MjM2NDUuMDYgMWUtMiAtPiAzNTIzNjQ1LjA2CitxdWF4MzgyIHF1YW50aXplICAgMzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDM4MyBxdWFudGl6ZSAgIDM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgzODQgcXVhbnRpemUgIC0zNTIzNjQuNTA2IDFlLTIgLT4gLTM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzODUgcXVhbnRpemUgIC0zNTIzNjQ1LjA2IDFlLTIgLT4gLTM1MjM2NDUuMDYKK3F1YXgzODYgcXVhbnRpemUgIC0zNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Mzg3IHF1YW50aXplICAtMzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityb3VuZGluZzogZG93bgorcXVheDM4OSBxdWFudGl6ZSAgIDM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tID8gc2hvdWxkIHRoYXQgb25lIGluc3RlYWQgaGF2ZSBiZWVuOgorLS0gcXVheDM4OSBxdWFudGl6ZSAgIDM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdW5kaW5nOiBoYWxmX3VwCisKKy0tIGFuZCBhIGZldyBtb3JlIGZyb20gZS1tYWlsIGRpc2N1c3Npb25zCitwcmVjaXNpb246IDcKK3F1YXgzOTEgcXVhbnRpemUgIDEyLjM0NTY3ICAxZS0zIC0+IDEyLjM0NiAgIEluZXhhY3QgUm91bmRlZAorcXVheDM5MiBxdWFudGl6ZSAgMTIzLjQ1NjcgIDFlLTMgLT4gMTIzLjQ1NyAgSW5leGFjdCBSb3VuZGVkCitxdWF4MzkzIHF1YW50aXplICAxMjM0LjU2NyAgMWUtMyAtPiAxMjM0LjU2NworcXVheDM5NCBxdWFudGl6ZSAgMTIzNDUuNjcgIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Mzk1IHF1YW50aXplICAxMjM0NTYuNyAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgzOTYgcXVhbnRpemUgIDEyMzQ1NjcuICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzb21lIDk5OTkgcm91bmQtdXAgY2FzZXMKK3ByZWNpc2lvbjogOQorcXVheDQwMCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS01ICAtPiAgOS45OTkwMAorcXVheDQwMSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS00ICAtPiAgOS45OTkwCitxdWF4NDAyIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTMgIC0+ICA5Ljk5OQorcXVheDQwMyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0yICAtPiAxMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDA0IHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTEgIC0+IDEwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0MDUgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMCAgLT4gMTAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQwNiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUxICAtPiAxRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDA3IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTIgIC0+IDBFKzIgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcXVheDQxMCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS01ICAtPiAgMC45OTkwMAorcXVheDQxMSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS00ICAtPiAgMC45OTkwCitxdWF4NDEyIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTMgIC0+ICAwLjk5OQorcXVheDQxMyBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0yICAtPiAgMS4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDE0IHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTEgIC0+ICAxLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0MTUgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMCAgLT4gIDEgICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQxNiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3F1YXg0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTAKK3F1YXg0MjEgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNCAgLT4gIDAuMDk5OQorcXVheDQyMiBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0zICAtPiAgMC4xMDAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0MjQgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMSAgLT4gIDAuMSAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQyNSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcXVheDQzMCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS01ICAtPiAgMC4wMDk5OQorcXVheDQzMSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS00ICAtPiAgMC4wMTAwICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDMyIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTMgIC0+ICAwLjAxMCAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0MzMgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMiAgLT4gIDAuMDEgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQzNCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDM1IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0MzYgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitxdWF4NDQwIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTUgIC0+ICAwLjAwMTAwICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NDEgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNCAgLT4gIDAuMDAxMCAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ0MiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0zICAtPiAgMC4wMDEgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDQzIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTIgIC0+ICAwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NDQgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ0NSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDQ2IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiA4CitxdWF4NDQ5IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTIzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg0NTAgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMjIgLT4gIDkuOTk5MDAwMEUtMTUKK3F1YXg0NTEgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMjEgLT4gIDkuOTk5MDAwRS0xNQorcXVheDQ1MiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0yMCAtPiAgOS45OTkwMEUtMTUKK3F1YXg0NTMgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTkgLT4gIDkuOTk5MEUtMTUKK3F1YXg0NTQgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTggLT4gIDkuOTk5RS0xNQorcXVheDQ1NSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNyAtPiAgMS4wMDBFLTE0IEluZXhhY3QgUm91bmRlZAorcXVheDQ1NiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNiAtPiAgMS4wMEUtMTQgIEluZXhhY3QgUm91bmRlZAorcXVheDQ1NyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNSAtPiAgMS4wRS0xNCAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ1OCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNCAtPiAgMUUtMTQgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ1OSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMyAtPiAgMEUtMTMgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2MCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMiAtPiAgMEUtMTIgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2MSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMSAtPiAgMEUtMTEgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2MiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMCAtPiAgMEUtMTAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2MyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtOSAtPiAgMEUtOSAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2NCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtOCAtPiAgMEUtOCAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2NSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNyAtPiAgMEUtNyAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2NiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNiAtPiAgMC4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2NyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNSAtPiAgMC4wMDAwMCAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2OCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNCAtPiAgMC4wMDAwICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ2OSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtMyAtPiAgMC4wMDAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ3MCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtMiAtPiAgMC4wMCAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ3MSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtMSAtPiAgMC4wICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ3MiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgIDFlMCAtPiAgMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ3MyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgIDFlMSAtPiAgMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDcKK3F1YXg5MDAgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMjIgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDkwMSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0yMSAtPiAgOS45OTkwMDBFLTE1CitxdWF4OTAyIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTIwIC0+ICA5Ljk5OTAwRS0xNQorcXVheDkwMyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xOSAtPiAgOS45OTkwRS0xNQorcXVheDkwNCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xOCAtPiAgOS45OTlFLTE1CitxdWF4OTA1IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE3IC0+ICAxLjAwMEUtMTQgSW5leGFjdCBSb3VuZGVkCitxdWF4OTA2IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE2IC0+ICAxLjAwRS0xNCAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTA3IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE1IC0+ICAxLjBFLTE0ICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTA4IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE0IC0+ICAxRS0xNCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTA5IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTEzIC0+ICAwRS0xMyAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTEwIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTEyIC0+ICAwRS0xMiAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTExIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTExIC0+ICAwRS0xMSAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTEyIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTEwIC0+ICAwRS0xMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTEzIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS05IC0+ICAwRS05ICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTE0IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS04IC0+ICAwRS04ICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTE1IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS03IC0+ICAwRS03ICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTE2IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS02IC0+ICAwLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTE3IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS01IC0+ICAwLjAwMDAwICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTE4IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS00IC0+ICAwLjAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTE5IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS0zIC0+ICAwLjAwMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTIwIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS0yIC0+ICAwLjAwICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTIxIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS0xIC0+ICAwLjAgICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTIyIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAgMWUwIC0+ICAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTIzIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAgMWUxIC0+ICAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogNgorcXVheDkzMCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0yMiAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCitxdWF4OTMxIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTIxIC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg5MzIgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMjAgLT4gIDkuOTk5MDBFLTE1CitxdWF4OTMzIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE5IC0+ICA5Ljk5OTBFLTE1CitxdWF4OTM0IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE4IC0+ICA5Ljk5OUUtMTUKK3F1YXg5MzUgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTcgLT4gIDEuMDAwRS0xNCBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5MzYgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTYgLT4gIDEuMDBFLTE0ICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5MzcgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTUgLT4gIDEuMEUtMTQgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5MzggcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTQgLT4gIDFFLTE0ICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5MzkgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTMgLT4gIDBFLTEzICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDAgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTIgLT4gIDBFLTEyICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDEgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTEgLT4gIDBFLTExICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDIgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTAgLT4gIDBFLTEwICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDMgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTkgLT4gIDBFLTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDQgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTggLT4gIDBFLTggICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDUgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTcgLT4gIDBFLTcgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDYgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTYgLT4gIDAuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDcgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTUgLT4gIDAuMDAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDggcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTQgLT4gIDAuMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NDkgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTMgLT4gIDAuMDAwICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NTAgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTIgLT4gIDAuMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NTEgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTEgLT4gIDAuMCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NTIgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgICAxZTAgLT4gIDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg5NTMgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgICAxZTEgLT4gIDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAzCitxdWF4OTYwIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTIyIC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg5NjEgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMjEgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDk2MiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0yMCAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCitxdWF4OTYzIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE5IC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg5NjQgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTggLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDk2NSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNyAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCitxdWF4OTY2IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE2IC0+ICAxLjAwRS0xNCAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTY3IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE1IC0+ICAxLjBFLTE0ICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTY4IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE0IC0+ICAxRS0xNCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTY5IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTEzIC0+ICAwRS0xMyAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTcwIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTEyIC0+ICAwRS0xMiAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTcxIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTExIC0+ICAwRS0xMSAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTcyIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTEwIC0+ICAwRS0xMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTczIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS05IC0+ICAwRS05ICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTc0IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS04IC0+ICAwRS04ICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTc1IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS03IC0+ICAwRS03ICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTc2IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS02IC0+ICAwLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTc3IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS01IC0+ICAwLjAwMDAwICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTc4IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS00IC0+ICAwLjAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTc5IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS0zIC0+ICAwLjAwMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTgwIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS0yIC0+ICAwLjAwICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTgxIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS0xIC0+ICAwLjAgICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTgyIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAgMWUwIC0+ICAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTgzIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAgMWUxIC0+ICAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIEZ1bmcgTGVlJ3MgY2FzZSAmIHNpbWlsYXIKK3ByZWNpc2lvbjogMworcXVheDEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDAKK3F1YXgxMDAyIHF1YW50aXplICAwLjAwMSAgICAgICAgMC4wMDEgLT4gIDAuMDAxCitxdWF4MTAwMyBxdWFudGl6ZSAgMC4wMDEyICAgICAgIDAuMDAxIC0+ICAwLjAwMSAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4MTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4MTAwNSBxdWFudGl6ZSAgMC41MDEgICAgICAgIDAuMDAxIC0+ICAwLjUwMQorcXVheDEwMDYgcXVhbnRpemUgIDAuNTAxMiAgICAgICAwLjAwMSAtPiAgMC41MDEgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDEwMDggcXVhbnRpemUgIDAuOTk5ICAgICAgICAwLjAwMSAtPiAgMC45OTkKK3F1YXgxMDA5IHF1YW50aXplICAwLjk5OTIgICAgICAgMC4wMDEgLT4gIDAuOTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMDEwIHF1YW50aXplICAwLjk5OTggICAgICAgMC4wMDEgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDEwMTEgcXVhbnRpemUgIDEuMDAwMSAgICAgICAwLjAwMSAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCitxdWF4MTAxMiBxdWFudGl6ZSAgMS4wMDUxICAgICAgIDAuMDAxIC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXgxMDEzIHF1YW50aXplICAxLjA1NTEgICAgICAgMC4wMDEgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDEwMTQgcXVhbnRpemUgIDEuNTU1MSAgICAgICAwLjAwMSAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCitxdWF4MTAxNSBxdWFudGl6ZSAgMS45OTk5ICAgICAgIDAuMDAxIC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcyBbcmhzIGNoZWNrcyByZW1vdmVkXQorbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorcXVheDQ4MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZAorcXVheDQ4MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorcXVheDQ4MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorcXVheDQ4NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitxdWF4NDg1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDg2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKKy0tIGEgcG90ZW50aWFsIGRvdWJsZS1yb3VuZAorcXVheDQ4NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0ODggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTUKK3F1YXg0OTEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKK3F1YXg0OTIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK3F1YXg0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK3F1YXg0OTQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorcXVheDQ5NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorcXVheDQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitxdWF4NDk3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorcXVheDQ5OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gWmVyb3MKK3F1YXg1MDAgcXVhbnRpemUgICAwICAgICAxZTEgLT4gIDBFKzEKK3F1YXg1MDEgcXVhbnRpemUgICAwICAgICAxZTAgLT4gIDAKK3F1YXg1MDIgcXVhbnRpemUgICAwICAgIDFlLTEgLT4gIDAuMAorcXVheDUwMyBxdWFudGl6ZSAgIDAuMCAgMWUtMSAtPiAgMC4wCitxdWF4NTA0IHF1YW50aXplICAgMC4wICAgMWUwIC0+ICAwCitxdWF4NTA1IHF1YW50aXplICAgMC4wICAxZSsxIC0+ICAwRSsxCitxdWF4NTA2IHF1YW50aXplICAgMEUrMSAxZS0xIC0+ICAwLjAKK3F1YXg1MDcgcXVhbnRpemUgICAwRSsxICAxZTAgLT4gIDAKK3F1YXg1MDggcXVhbnRpemUgICAwRSsxIDFlKzEgLT4gIDBFKzEKK3F1YXg1MDkgcXVhbnRpemUgIC0wICAgICAxZTEgLT4gLTBFKzEKK3F1YXg1MTAgcXVhbnRpemUgIC0wICAgICAxZTAgLT4gLTAKK3F1YXg1MTEgcXVhbnRpemUgIC0wICAgIDFlLTEgLT4gLTAuMAorcXVheDUxMiBxdWFudGl6ZSAgLTAuMCAgMWUtMSAtPiAtMC4wCitxdWF4NTEzIHF1YW50aXplICAtMC4wICAgMWUwIC0+IC0wCitxdWF4NTE0IHF1YW50aXplICAtMC4wICAxZSsxIC0+IC0wRSsxCitxdWF4NTE1IHF1YW50aXplICAtMEUrMSAxZS0xIC0+IC0wLjAKK3F1YXg1MTYgcXVhbnRpemUgIC0wRSsxICAxZTAgLT4gLTAKK3F1YXg1MTcgcXVhbnRpemUgIC0wRSsxIDFlKzEgLT4gLTBFKzEKKworLS0gU3VzcGljaW91cyBSSFMgdmFsdWVzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAxNQorcXVheDUyMCBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlOTk5OTk5MDAwIC0+IDBFKzk5OTk5OTAwMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXg1MjEgcXVhbnRpemUgMTIzLjQ1NiAgICAxZTk5OTk5OTAwMCAtPiAwRSs5OTk5OTkwMDAgSW5leGFjdCBSb3VuZGVkCitxdWF4NTIyIHF1YW50aXplICAgMS4yMzQgICAgMWU5OTk5OTk5OTkgLT4gMEUrOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorcXVheDUyMyBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlOTk5OTk5OTk5IC0+IDBFKzk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3F1YXg1MjQgcXVhbnRpemUgMTIzLjQ1NiAgIDFlMTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1MjUgcXVhbnRpemUgMTIzLjQ1NiAgMWUxMjM0NTY3ODkwMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIG5leHQgZm91ciBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCitxdWF4NTI2IHF1YW50aXplICAgMS4yMzQgICAxZS05OTk5OTkwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTI3IHF1YW50aXplIDEyMy40NTYgICAxZS05OTk5OTkwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTI4IHF1YW50aXplICAgMS4yMzQgICAxZS05OTk5OTk5OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTI5IHF1YW50aXplIDEyMy40NTYgICAxZS05OTk5OTk5OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTMwIHF1YW50aXplIDEyMy40NTYgIDFlLTEwMDAwMDAwMTQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTMxIHF1YW50aXplIDEyMy40NTYgMWUtMTIzNDU2Nzg5MDMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDE1CitxdWF4NTMyIHF1YW50aXplICAgMS4yMzRFKzk5OSAgICAxZTk5OSAtPiAxRSs5OTkgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NTMzIHF1YW50aXplICAgMS4yMzRFKzk5OCAgICAxZTk5OSAtPiAwRSs5OTkgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NTM0IHF1YW50aXplICAgMS4yMzQgICAgICAgICAxZTk5OSAtPiAwRSs5OTkgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NTM1IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlMTAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1MzYgcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWU1MDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDUzNyBxdWFudGl6ZSAgIDAgICAgICAgICAgICAxZS05OTkgLT4gMEUtOTk5CistLSBuZXh0IHR3byBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCitxdWF4NTM4IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTk5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1MzkgcXVhbnRpemUgICAxLjIzNCAgICAgICAxZS0xMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU0MCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgIDFlLTUwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBbbW9yZSBiZWxvd10KKworLS0gY2hlY2sgYm91bmRzIChsaHMgbWF5YmUgb3V0IG9mIHJhbmdlIGZvciBkZXN0aW5hdGlvbiwgZXRjLikKK3ByZWNpc2lvbjogICAgIDcKK3F1YXg1NDEgcXVhbnRpemUgICAxRSs5OTkgICAxZSs5OTkgLT4gMUUrOTk5CitxdWF4NTQyIHF1YW50aXplICAgMUUrMTAwMCAgMWUrOTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU0MyBxdWFudGl6ZSAgIDFFKzk5OSAgMWUrMTAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1NDQgcXVhbnRpemUgICAxRS05OTkgICAxZS05OTkgLT4gMUUtOTk5CitxdWF4NTQ1IHF1YW50aXplICAgMUUtMTAwMCAgMWUtOTk5IC0+IDBFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg1NDYgcXVhbnRpemUgICAxRS05OTkgIDFlLTEwMDAgLT4gMS4wRS05OTkKK3F1YXg1NDcgcXVhbnRpemUgICAxRS0xMDA1ICAxZS05OTkgLT4gMEUtOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcXVheDU0OCBxdWFudGl6ZSAgIDFFLTEwMDYgIDFlLTk5OSAtPiAwRS05OTkgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NTQ5IHF1YW50aXplICAgMUUtMTAwNyAgMWUtOTk5IC0+IDBFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg1NTAgcXVhbnRpemUgICAxRS05OTggIDFlLTEwMDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uICAtLSB3b24ndCBmaXQKK3F1YXg1NTEgcXVhbnRpemUgICAxRS05OTkgIDFlLTEwMDUgLT4gMS4wMDAwMDBFLTk5OQorcXVheDU1MiBxdWFudGl6ZSAgIDFFLTEwMDAgMWUtMTAwNSAtPiAxLjAwMDAwRS0xMDAwIFN1Ym5vcm1hbAorcXVheDU1MyBxdWFudGl6ZSAgIDFFLTk5OSAgMWUtMTAwNiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1NTQgcXVhbnRpemUgICAxRS05OTkgIDFlLTEwMDcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSByZWxhdGVkIHN1Ym5vcm1hbCByb3VuZGluZworcXVheDU1NSBxdWFudGl6ZSAgIDEuNjY2NjY2RS05OTkgIDFlLTEwMDUgLT4gMS42NjY2NjZFLTk5OQorcXVheDU1NiBxdWFudGl6ZSAgIDEuNjY2NjY2RS0xMDAwIDFlLTEwMDUgLT4gMS42NjY2N0UtMTAwMCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcXVheDU1NyBxdWFudGl6ZSAgIDEuNjY2NjY2RS0xMDAxIDFlLTEwMDUgLT4gMS42NjY3RS0xMDAxICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitxdWF4NTU4IHF1YW50aXplICAgMS42NjY2NjZFLTEwMDIgMWUtMTAwNSAtPiAxLjY2N0UtMTAwMiAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcXVheDU1OSBxdWFudGl6ZSAgIDEuNjY2NjY2RS0xMDAzIDFlLTEwMDUgLT4gMS42N0UtMTAwMyAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcXVheDU2MCBxdWFudGl6ZSAgIDEuNjY2NjY2RS0xMDA0IDFlLTEwMDUgLT4gMS43RS0xMDA0ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitxdWF4NTYxIHF1YW50aXplICAgMS42NjY2NjZFLTEwMDUgMWUtMTAwNSAtPiAyRS0xMDA1ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitxdWF4NTYyIHF1YW50aXplICAgMS42NjY2NjZFLTEwMDYgMWUtMTAwNSAtPiAwRS0xMDA1ICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NTYzIHF1YW50aXplICAgMS42NjY2NjZFLTEwMDcgMWUtMTAwNSAtPiAwRS0xMDA1ICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFNwZWNpYWxzCitxdWF4NTgwIHF1YW50aXplICBJbmYgICAgLUluZiAgIC0+ICBJbmZpbml0eQorcXVheDU4MSBxdWFudGl6ZSAgSW5mICAxZS0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU4MiBxdWFudGl6ZSAgSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU4MyBxdWFudGl6ZSAgSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU4NCBxdWFudGl6ZSAgSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU4NSBxdWFudGl6ZSAgSW5mICAgMWUxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU4NiBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkKK3F1YXg1ODcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1ODggcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQorcXVheDU4OSBxdWFudGl6ZSAtMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU5MCBxdWFudGl6ZSAgMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU5MSBxdWFudGl6ZSAgMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU5MiBxdWFudGl6ZSAgMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDU5MyBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkKK3F1YXg1OTQgcXVhbnRpemUgIEluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1OTUgcXVhbnRpemUgLTAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworcXVheDYwMCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5CitxdWF4NjAxIHF1YW50aXplIC1JbmYgIDFlLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NjAyIHF1YW50aXplIC1JbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NjAzIHF1YW50aXplIC1JbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NjA0IHF1YW50aXplIC1JbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NjA1IHF1YW50aXplIC1JbmYgICAxZTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NjA2IHF1YW50aXplIC1JbmYgICAgIEluZiAgIC0+ICAtSW5maW5pdHkKK3F1YXg2MDcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2MDggcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQorcXVheDYwOSBxdWFudGl6ZSAtMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDYxMCBxdWFudGl6ZSAgMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDYxMSBxdWFudGl6ZSAgMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDYxMiBxdWFudGl6ZSAgMTAwMCAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDYxMyBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK3F1YXg2MTQgcXVhbnRpemUgLUluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2MTUgcXVhbnRpemUgLTAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworcXVheDYyMSBxdWFudGl6ZSAgTmFOICAgLUluZiAgICAtPiAgTmFOCitxdWF4NjIyIHF1YW50aXplICBOYU4gMWUtMTAwMCAgIC0+ICBOYU4KK3F1YXg2MjMgcXVhbnRpemUgIE5hTiAxZS0xICAgICAgLT4gIE5hTgorcXVheDYyNCBxdWFudGl6ZSAgTmFOICAxZTAgICAgICAtPiAgTmFOCitxdWF4NjI1IHF1YW50aXplICBOYU4gIDFlMSAgICAgIC0+ICBOYU4KK3F1YXg2MjYgcXVhbnRpemUgIE5hTiAgMWUxMDAwICAgLT4gIE5hTgorcXVheDYyNyBxdWFudGl6ZSAgTmFOICAgIEluZiAgICAtPiAgTmFOCitxdWF4NjI4IHF1YW50aXplICBOYU4gICAgTmFOICAgIC0+ICBOYU4KK3F1YXg2MjkgcXVhbnRpemUgLUluZiAgICBOYU4gICAgLT4gIE5hTgorcXVheDYzMCBxdWFudGl6ZSAtMTAwMCAgIE5hTiAgICAtPiAgTmFOCitxdWF4NjMxIHF1YW50aXplIC0xICAgICAgTmFOICAgIC0+ICBOYU4KK3F1YXg2MzIgcXVhbnRpemUgIDAgICAgICBOYU4gICAgLT4gIE5hTgorcXVheDYzMyBxdWFudGl6ZSAgMSAgICAgIE5hTiAgICAtPiAgTmFOCitxdWF4NjM0IHF1YW50aXplICAxMDAwICAgTmFOICAgIC0+ICBOYU4KK3F1YXg2MzUgcXVhbnRpemUgIEluZiAgICBOYU4gICAgLT4gIE5hTgorcXVheDYzNiBxdWFudGl6ZSAgTmFOIDFlLTAgICAgICAtPiAgTmFOCitxdWF4NjM3IHF1YW50aXplIC0wICAgICAgTmFOICAgIC0+ICBOYU4KKworcXVheDY0MSBxdWFudGl6ZSAgc05hTiAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY0MiBxdWFudGl6ZSAgc05hTiAxZS0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY0MyBxdWFudGl6ZSAgc05hTiAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY0NCBxdWFudGl6ZSAgc05hTiAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY0NSBxdWFudGl6ZSAgc05hTiAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY0NiBxdWFudGl6ZSAgc05hTiAgMWUxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY0NyBxdWFudGl6ZSAgc05hTiAgICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY0OCBxdWFudGl6ZSAgc05hTiAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY0OSBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1MCBxdWFudGl6ZSAtSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1MSBxdWFudGl6ZSAtMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1MiBxdWFudGl6ZSAtMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1MyBxdWFudGl6ZSAgMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1NCBxdWFudGl6ZSAgMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1NSBxdWFudGl6ZSAgMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1NiBxdWFudGl6ZSAgSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1NyBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1OCBxdWFudGl6ZSAgc05hTiAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY1OSBxdWFudGl6ZSAtMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitxdWF4NjYxIHF1YW50aXplICBOYU45IC1JbmYgICAtPiAgTmFOOQorcXVheDY2MiBxdWFudGl6ZSAgTmFOOCAgOTE5ICAgLT4gIE5hTjgKK3F1YXg2NjMgcXVhbnRpemUgIE5hTjcxIEluZiAgIC0+ICBOYU43MQorcXVheDY2NCBxdWFudGl6ZSAgTmFONiAgTmFONSAgLT4gIE5hTjYKK3F1YXg2NjUgcXVhbnRpemUgLUluZiAgIE5hTjQgIC0+ICBOYU40CitxdWF4NjY2IHF1YW50aXplIC05MTkgICBOYU4zMSAtPiAgTmFOMzEKK3F1YXg2NjcgcXVhbnRpemUgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK3F1YXg2NzEgcXVhbnRpemUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY3MiBxdWFudGl6ZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitxdWF4NjczIHF1YW50aXplICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NzQgcXVhbnRpemUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY3NSBxdWFudGl6ZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Njc2IHF1YW50aXplIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NzcgcXVhbnRpemUgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY3OCBxdWFudGl6ZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Njc5IHF1YW50aXplICBOYU4gICAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworcXVheDY4MSBxdWFudGl6ZSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKK3F1YXg2ODIgcXVhbnRpemUgLU5hTjggIDkxOSAgIC0+IC1OYU44CitxdWF4NjgzIHF1YW50aXplIC1OYU43MSBJbmYgICAtPiAtTmFONzEKK3F1YXg2ODQgcXVhbnRpemUgLU5hTjYgLU5hTjUgIC0+IC1OYU42CitxdWF4Njg1IHF1YW50aXplIC1JbmYgIC1OYU40ICAtPiAtTmFONAorcXVheDY4NiBxdWFudGl6ZSAtOTE5ICAtTmFOMzEgLT4gLU5hTjMxCitxdWF4Njg3IHF1YW50aXplICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCitxdWF4NjkxIHF1YW50aXplIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2OTIgcXVhbnRpemUgLXNOYU45OCAtMTEgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY5MyBxdWFudGl6ZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitxdWF4Njk0IHF1YW50aXplIC1zTmFOMTYgc05hTjk0ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2OTUgcXVhbnRpemUgLU5hTjk1IC1zTmFOOTMgIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY5NiBxdWFudGl6ZSAtSW5mICAgLXNOYU45MiAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Njk3IHF1YW50aXplICAwODggICAtc05hTjkxICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2OTggcXVhbnRpemUgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY5OSBxdWFudGl6ZSAgTmFOICAgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworcHJlY2lzaW9uOiA0CittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcXVheDcxMCBxdWFudGl6ZSAgMS4wMEUtOTk5ICAgIDFlLTk5OSAgLT4gICAxRS05OTkgICAgUm91bmRlZAorcXVheDcxMSBxdWFudGl6ZSAgMC4xRS05OTkgICAgMmUtMTAwMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCitxdWF4NzEyIHF1YW50aXplICAwLjEwRS05OTkgICAzZS0xMDAwICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwgUm91bmRlZAorcXVheDcxMyBxdWFudGl6ZSAgMC4xMDBFLTk5OSAgNGUtMTAwMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsIFJvdW5kZWQKK3F1YXg3MTQgcXVhbnRpemUgIDAuMDFFLTk5OSAgIDVlLTEwMDEgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK3F1YXg3MTUgcXVhbnRpemUgIDAuOTk5RS05OTkgICAxZS05OTkgIC0+ICAgMUUtOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcXVheDcxNiBxdWFudGl6ZSAgMC4wOTlFLTk5OSAxMGUtMTAwMCAgLT4gICAxRS0xMDAwICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorCitxdWF4NzE3IHF1YW50aXplICAwLjAwOUUtOTk5ICAxZS0xMDAxICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitxdWF4NzE4IHF1YW50aXplICAwLjAwMUUtOTk5ICAxZS0xMDAxICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3MTkgcXVhbnRpemUgIDAuMDAwOUUtOTk5IDFlLTEwMDEgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZAorcXVheDcyMCBxdWFudGl6ZSAgMC4wMDAxRS05OTkgMWUtMTAwMSAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkCisKK3F1YXg3MzAgcXVhbnRpemUgLTEuMDBFLTk5OSAgIDFlLTk5OSAgLT4gIC0xRS05OTkgICAgIFJvdW5kZWQKK3F1YXg3MzEgcXVhbnRpemUgLTAuMUUtOTk5ICAgIDFlLTk5OSAgLT4gIC0wRS05OTkgICAgIFJvdW5kZWQgSW5leGFjdAorcXVheDczMiBxdWFudGl6ZSAtMC4xMEUtOTk5ICAgMWUtOTk5ICAtPiAgLTBFLTk5OSAgICAgUm91bmRlZCBJbmV4YWN0CitxdWF4NzMzIHF1YW50aXplIC0wLjEwMEUtOTk5ICAxZS05OTkgIC0+ICAtMEUtOTk5ICAgICBSb3VuZGVkIEluZXhhY3QKK3F1YXg3MzQgcXVhbnRpemUgLTAuMDFFLTk5OSAgIDFlLTk5OSAgLT4gIC0wRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK3F1YXg3MzUgcXVhbnRpemUgLTAuOTk5RS05OTkgOTBlLTk5OSAgLT4gIC0xRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDczNiBxdWFudGl6ZSAtMC4wOTlFLTk5OSAtMWUtOTk5ICAtPiAgLTBFLTk5OSAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NzM3IHF1YW50aXplIC0wLjAwOUUtOTk5IC0xZS05OTkgIC0+ICAtMEUtOTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3MzggcXVhbnRpemUgLTAuMDAxRS05OTkgLTBlLTk5OSAgLT4gIC0wRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDczOSBxdWFudGl6ZSAtMC4wMDAxRS05OTkgMGUtOTk5ICAtPiAgLTBFLTk5OSAgICAgSW5leGFjdCBSb3VuZGVkCisKK3F1YXg3NDAgcXVhbnRpemUgLTEuMDBFLTk5OSAgIDFlLTEwMDAgLT4gIC0xLjBFLTk5OSAgIFJvdW5kZWQKK3F1YXg3NDEgcXVhbnRpemUgLTAuMUUtOTk5ICAgIDFlLTEwMDAgLT4gIC0xRS0xMDAwICAgIFN1Ym5vcm1hbAorcXVheDc0MiBxdWFudGl6ZSAtMC4xMEUtOTk5ICAgMWUtMTAwMCAtPiAgLTFFLTEwMDAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK3F1YXg3NDMgcXVhbnRpemUgLTAuMTAwRS05OTkgIDFlLTEwMDAgLT4gIC0xRS0xMDAwICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitxdWF4NzQ0IHF1YW50aXplIC0wLjAxRS05OTkgICAxZS0xMDAwIC0+ICAtMEUtMTAwMCAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitxdWF4NzQ1IHF1YW50aXplIC0wLjk5OUUtOTk5ICAxZS0xMDAwIC0+ICAtMS4wRS05OTkgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3NDYgcXVhbnRpemUgLTAuMDk5RS05OTkgIDFlLTEwMDAgLT4gIC0xRS0xMDAwICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK3F1YXg3NDcgcXVhbnRpemUgLTAuMDA5RS05OTkgIDFlLTEwMDAgLT4gIC0wRS0xMDAwICAgIEluZXhhY3QgUm91bmRlZAorcXVheDc0OCBxdWFudGl6ZSAtMC4wMDFFLTk5OSAgMWUtMTAwMCAtPiAgLTBFLTEwMDAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NzQ5IHF1YW50aXplIC0wLjAwMDFFLTk5OSAxZS0xMDAwIC0+ICAtMEUtMTAwMCAgICBJbmV4YWN0IFJvdW5kZWQKKworcXVheDc1MCBxdWFudGl6ZSAtMS4wMEUtOTk5ICAgMWUtMTAwMSAtPiAgLTEuMDBFLTk5OQorcXVheDc1MSBxdWFudGl6ZSAtMC4xRS05OTkgICAgMWUtMTAwMSAtPiAgLTEuMEUtMTAwMCAgU3Vibm9ybWFsCitxdWF4NzUyIHF1YW50aXplIC0wLjEwRS05OTkgICAxZS0xMDAxIC0+ICAtMS4wRS0xMDAwICBTdWJub3JtYWwKK3F1YXg3NTMgcXVhbnRpemUgLTAuMTAwRS05OTkgIDFlLTEwMDEgLT4gIC0xLjBFLTEwMDAgIFN1Ym5vcm1hbCBSb3VuZGVkCitxdWF4NzU0IHF1YW50aXplIC0wLjAxRS05OTkgICAxZS0xMDAxIC0+ICAtMUUtMTAwMSAgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitxdWF4NzU1IHF1YW50aXplIC0wLjk5OUUtOTk5ICAxZS0xMDAxIC0+ICAtMS4wMEUtOTk5ICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3NTYgcXVhbnRpemUgLTAuMDk5RS05OTkgIDFlLTEwMDEgLT4gIC0xLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK3F1YXg3NTcgcXVhbnRpemUgLTAuMDA5RS05OTkgIDFlLTEwMDEgLT4gIC0xRS0xMDAxICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK3F1YXg3NTggcXVhbnRpemUgLTAuMDAxRS05OTkgIDFlLTEwMDEgLT4gIC0wRS0xMDAxICAgIEluZXhhY3QgUm91bmRlZAorcXVheDc1OSBxdWFudGl6ZSAtMC4wMDAxRS05OTkgMWUtMTAwMSAtPiAgLTBFLTEwMDEgICAgSW5leGFjdCBSb3VuZGVkCisKK3F1YXg3NjAgcXVhbnRpemUgLTEuMDBFLTk5OSAgIDFlLTEwMDIgLT4gIC0xLjAwMEUtOTk5CitxdWF4NzYxIHF1YW50aXplIC0wLjFFLTk5OSAgICAxZS0xMDAyIC0+ICAtMS4wMEUtMTAwMCAgU3Vibm9ybWFsCitxdWF4NzYyIHF1YW50aXplIC0wLjEwRS05OTkgICAxZS0xMDAyIC0+ICAtMS4wMEUtMTAwMCAgU3Vibm9ybWFsCitxdWF4NzYzIHF1YW50aXplIC0wLjEwMEUtOTk5ICAxZS0xMDAyIC0+ICAtMS4wMEUtMTAwMCAgU3Vibm9ybWFsCitxdWF4NzY0IHF1YW50aXplIC0wLjAxRS05OTkgICAxZS0xMDAyIC0+ICAtMS4wRS0xMDAxICAgU3Vibm9ybWFsCitxdWF4NzY1IHF1YW50aXplIC0wLjk5OUUtOTk5ICAxZS0xMDAyIC0+ICAtOS45OUUtMTAwMCAgU3Vibm9ybWFsCitxdWF4NzY2IHF1YW50aXplIC0wLjA5OUUtOTk5ICAxZS0xMDAyIC0+ICAtOS45RS0xMDAxICAgU3Vibm9ybWFsCitxdWF4NzY3IHF1YW50aXplIC0wLjAwOUUtOTk5ICAxZS0xMDAyIC0+ICAtOUUtMTAwMiAgICAgU3Vibm9ybWFsCitxdWF4NzY4IHF1YW50aXplIC0wLjAwMUUtOTk5ICAxZS0xMDAyIC0+ICAtMUUtMTAwMiAgICAgU3Vibm9ybWFsCitxdWF4NzY5IHF1YW50aXplIC0wLjAwMDFFLTk5OSAxZS0xMDAyIC0+ICAtMEUtMTAwMiAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJocyBtdXN0IGJlIG5vIGxlc3MgdGhhbiBFdGlueQorcXVheDc3MCBxdWFudGl6ZSAtMS4wMEUtOTk5ICAgMWUtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NzcxIHF1YW50aXplIC0wLjFFLTk5OSAgICAxZS0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg3NzIgcXVhbnRpemUgLTAuMTBFLTk5OSAgIDFlLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDc3MyBxdWFudGl6ZSAtMC4xMDBFLTk5OSAgMWUtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Nzc0IHF1YW50aXplIC0wLjAxRS05OTkgICAxZS0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg3NzUgcXVhbnRpemUgLTAuOTk5RS05OTkgIDFlLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDc3NiBxdWFudGl6ZSAtMC4wOTlFLTk5OSAgMWUtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Nzc3IHF1YW50aXplIC0wLjAwOUUtOTk5ICAxZS0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg3NzggcXVhbnRpemUgLTAuMDAxRS05OTkgIDFlLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDc3OSBxdWFudGl6ZSAtMC4wMDAxRS05OTkgMWUtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NzgwIHF1YW50aXplIC0wLjAwMDFFLTk5OSAxZS0xMDA0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcHJlY2lzaW9uOiAgIDkKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CisKKy0tIHNvbWUgZXh0cmVtZXMgZGVyaXZlZCBmcm9tIFJlc2NhbGUgdGVzdGNhc2VzCitxdWF4ODAxIHF1YW50aXplICAgMCAgIDFlMTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MDIgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDAwIC0+IDBFLTEwMDAwMDAwMDAKK3F1YXg4MDMgcXVhbnRpemUgICAwICAgMWUyMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgwNCBxdWFudGl6ZSAgIDAgIDFlLTIwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODA1IHF1YW50aXplICAgMCAgIDFlMzAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MDYgcXVhbnRpemUgICAwICAxZS0zMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgwNyBxdWFudGl6ZSAgIDAgICAxZTQwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODA4IHF1YW50aXplICAgMCAgMWUtNDAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MDkgcXVhbnRpemUgICAwICAgMWU1MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgxMCBxdWFudGl6ZSAgIDAgIDFlLTUwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODExIHF1YW50aXplICAgMCAgIDFlNjAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MTIgcXVhbnRpemUgICAwICAxZS02MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgxMyBxdWFudGl6ZSAgIDAgICAxZTcwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODE0IHF1YW50aXplICAgMCAgMWUtNzAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MTUgcXVhbnRpemUgICAwICAgMWU4MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgxNiBxdWFudGl6ZSAgIDAgIDFlLTgwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODE3IHF1YW50aXplICAgMCAgIDFlOTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MTggcXVhbnRpemUgICAwICAxZS05MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgxOSBxdWFudGl6ZSAgIDAgICAxZTk5OTk5OTk5OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODIwIHF1YW50aXplICAgMCAgMWUtOTk5OTk5OTk5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MjEgcXVhbnRpemUgICAwICAgMWUxMDAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MjIgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcXVheDg0MyBxdWFudGl6ZSAgIDAgICAgMWU5OTk5OTk5OTkgLT4gMEUrOTk5OTk5OTk5CitxdWF4ODQ0IHF1YW50aXplICAgMCAgIDFlMTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4NDUgcXVhbnRpemUgICAwICAgMWUtOTk5OTk5OTk5IC0+IDBFLTk5OTk5OTk5OQorcXVheDg0NiBxdWFudGl6ZSAgIDAgIDFlLTEwMDAwMDAwMDAgLT4gMEUtMTAwMDAwMDAwMAorcXVheDg0NyBxdWFudGl6ZSAgIDAgIDFlLTEwMDAwMDAwMDEgLT4gMEUtMTAwMDAwMDAwMQorcXVheDg0OCBxdWFudGl6ZSAgIDAgIDFlLTEwMDAwMDAwMDIgLT4gMEUtMTAwMDAwMDAwMgorcXVheDg0OSBxdWFudGl6ZSAgIDAgIDFlLTEwMDAwMDAwMDMgLT4gMEUtMTAwMDAwMDAwMworcXVheDg1MCBxdWFudGl6ZSAgIDAgIDFlLTEwMDAwMDAwMDQgLT4gMEUtMTAwMDAwMDAwNAorcXVheDg1MSBxdWFudGl6ZSAgIDAgIDFlLTEwMDAwMDAwMDUgLT4gMEUtMTAwMDAwMDAwNQorcXVheDg1MiBxdWFudGl6ZSAgIDAgIDFlLTEwMDAwMDAwMDYgLT4gMEUtMTAwMDAwMDAwNgorcXVheDg1MyBxdWFudGl6ZSAgIDAgIDFlLTEwMDAwMDAwMDcgLT4gMEUtMTAwMDAwMDAwNworcXVheDg1NCBxdWFudGl6ZSAgIDAgIDFlLTEwMDAwMDAwMDggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3F1YXg4NjEgcXVhbnRpemUgICAxICAxZSsyMTQ3NDgzNjQ5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDg2MiBxdWFudGl6ZSAgIDEgIDFlKzIxNDc0ODM2NDggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODYzIHF1YW50aXplICAgMSAgMWUrMjE0NzQ4MzY0NyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4NjQgcXVhbnRpemUgICAxICAxZS0yMTQ3NDgzNjQ3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDg2NSBxdWFudGl6ZSAgIDEgIDFlLTIxNDc0ODM2NDggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODY2IHF1YW50aXplICAgMSAgMWUtMjE0NzQ4MzY0OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTW9yZSBmcm9tIEZ1bmcgTGVlCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworcXVheDEwMjEgcXVhbnRpemUgICAgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgICAgMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NAorcXVheDEwMjIgcXVhbnRpemUgNjQjOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgNjQjMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NAorcXVheDEwMjMgcXVhbnRpemUgNjQjOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgMTI4IzEuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NAorcXVheDEwMjQgcXVhbnRpemUgNjQjOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgNjQjMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NAorcXVheDEwMjUgcXVhbnRpemUgNjQjOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgNjQjMUUrMzg0ICAgLT4gNjQjOC42NjY2NjY2NjY2NjYwMDBFKzM4NAorcXVheDEwMjYgcXVhbnRpemUgNjQjOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxMjgjMUUrMzg0ICAgLT4gNjQjOUUrMzg0IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitxdWF4MTAyNyBxdWFudGl6ZSA2NCM4LjY2NjY2NjY2NjY2NjAwMEUrMzIzICA2NCMxRSszMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgxMDI4IHF1YW50aXplIDY0IzguNjY2NjY2NjY2NjY2MDAwRSszMjMgMTI4IzFFKzMxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDEwMjkgcXVhbnRpemUgNjQjOC42NjY2NjY2NkUrMyAgICAgICAgICAxMjgjMUUrMTAgICAgLT4gNjQjMEUxMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMDMwIHF1YW50aXplICAgIDguNjY2NjY2NjZFKzMgICAgICAgICAgICAgIDFFKzMgICAgIC0+IDlFKzMgSW5leGFjdCBSb3VuZGVkCisKKy0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCitxdWF4MTA0MCBxdWFudGl6ZSAtMjE0NzQ4MzY0NiAgICAgMCAtPiAtMjE0NzQ4MzY0NgorcXVheDEwNDEgcXVhbnRpemUgLTIxNDc0ODM2NDcgICAgIDAgLT4gLTIxNDc0ODM2NDcKK3F1YXgxMDQyIHF1YW50aXplIC0yMTQ3NDgzNjQ4ICAgICAwIC0+IC0yMTQ3NDgzNjQ4CitxdWF4MTA0MyBxdWFudGl6ZSAtMjE0NzQ4MzY0OSAgICAgMCAtPiAtMjE0NzQ4MzY0OQorcXVheDEwNDQgcXVhbnRpemUgIDIxNDc0ODM2NDYgICAgIDAgLT4gIDIxNDc0ODM2NDYKK3F1YXgxMDQ1IHF1YW50aXplICAyMTQ3NDgzNjQ3ICAgICAwIC0+ICAyMTQ3NDgzNjQ3CitxdWF4MTA0NiBxdWFudGl6ZSAgMjE0NzQ4MzY0OCAgICAgMCAtPiAgMjE0NzQ4MzY0OAorcXVheDEwNDcgcXVhbnRpemUgIDIxNDc0ODM2NDkgICAgIDAgLT4gIDIxNDc0ODM2NDkKK3F1YXgxMDQ4IHF1YW50aXplICA0Mjk0OTY3Mjk0ICAgICAwIC0+ICA0Mjk0OTY3Mjk0CitxdWF4MTA0OSBxdWFudGl6ZSAgNDI5NDk2NzI5NSAgICAgMCAtPiAgNDI5NDk2NzI5NQorcXVheDEwNTAgcXVhbnRpemUgIDQyOTQ5NjcyOTYgICAgIDAgLT4gIDQyOTQ5NjcyOTYKK3F1YXgxMDUxIHF1YW50aXplICA0Mjk0OTY3Mjk3ICAgICAwIC0+ICA0Mjk0OTY3Mjk3CistLSBhbmQgcG93ZXJzIG9mIHRlbiBmb3Igc2FtZQorcXVheDExMDEgcXVhbnRpemUgIDUwMDAwMDAwMDAgICAgIDAgLT4gIDUwMDAwMDAwMDAKK3F1YXgxMTAyIHF1YW50aXplICA0MDAwMDAwMDAwICAgICAwIC0+ICA0MDAwMDAwMDAwCitxdWF4MTEwMyBxdWFudGl6ZSAgMjAwMDAwMDAwMCAgICAgMCAtPiAgMjAwMDAwMDAwMAorcXVheDExMDQgcXVhbnRpemUgIDEwMDAwMDAwMDAgICAgIDAgLT4gIDEwMDAwMDAwMDAKK3F1YXgxMTA1IHF1YW50aXplICAwMTAwMDAwMDAwICAgICAwIC0+ICAxMDAwMDAwMDAKK3F1YXgxMTA2IHF1YW50aXplICAwMDEwMDAwMDAwICAgICAwIC0+ICAxMDAwMDAwMAorcXVheDExMDcgcXVhbnRpemUgIDAwMDEwMDAwMDAgICAgIDAgLT4gIDEwMDAwMDAKK3F1YXgxMTA4IHF1YW50aXplICAwMDAwMTAwMDAwICAgICAwIC0+ICAxMDAwMDAKK3F1YXgxMTA5IHF1YW50aXplICAwMDAwMDEwMDAwICAgICAwIC0+ICAxMDAwMAorcXVheDExMTAgcXVhbnRpemUgIDAwMDAwMDEwMDAgICAgIDAgLT4gIDEwMDAKK3F1YXgxMTExIHF1YW50aXplICAwMDAwMDAwMTAwICAgICAwIC0+ICAxMDAKK3F1YXgxMTEyIHF1YW50aXplICAwMDAwMDAwMDEwICAgICAwIC0+ICAxMAorcXVheDExMTMgcXVhbnRpemUgIDAwMDAwMDAwMDEgICAgIDAgLT4gIDEKK3F1YXgxMTE0IHF1YW50aXplICAwMDAwMDAwMDAwICAgICAwIC0+ICAwCistLSBhbmQgcG93ZXJzIG9mIHRlbiBmb3Igc2FtZQorcXVheDExMjEgcXVhbnRpemUgLTUwMDAwMDAwMDAgICAgIDAgLT4gLTUwMDAwMDAwMDAKK3F1YXgxMTIyIHF1YW50aXplIC00MDAwMDAwMDAwICAgICAwIC0+IC00MDAwMDAwMDAwCitxdWF4MTEyMyBxdWFudGl6ZSAtMjAwMDAwMDAwMCAgICAgMCAtPiAtMjAwMDAwMDAwMAorcXVheDExMjQgcXVhbnRpemUgLTEwMDAwMDAwMDAgICAgIDAgLT4gLTEwMDAwMDAwMDAKK3F1YXgxMTI1IHF1YW50aXplIC0wMTAwMDAwMDAwICAgICAwIC0+IC0xMDAwMDAwMDAKK3F1YXgxMTI2IHF1YW50aXplIC0wMDEwMDAwMDAwICAgICAwIC0+IC0xMDAwMDAwMAorcXVheDExMjcgcXVhbnRpemUgLTAwMDEwMDAwMDAgICAgIDAgLT4gLTEwMDAwMDAKK3F1YXgxMTI4IHF1YW50aXplIC0wMDAwMTAwMDAwICAgICAwIC0+IC0xMDAwMDAKK3F1YXgxMTI5IHF1YW50aXplIC0wMDAwMDEwMDAwICAgICAwIC0+IC0xMDAwMAorcXVheDExMzAgcXVhbnRpemUgLTAwMDAwMDEwMDAgICAgIDAgLT4gLTEwMDAKK3F1YXgxMTMxIHF1YW50aXplIC0wMDAwMDAwMTAwICAgICAwIC0+IC0xMDAKK3F1YXgxMTMyIHF1YW50aXplIC0wMDAwMDAwMDEwICAgICAwIC0+IC0xMAorcXVheDExMzMgcXVhbnRpemUgLTAwMDAwMDAwMDEgICAgIDAgLT4gLTEKK3F1YXgxMTM0IHF1YW50aXplIC0wMDAwMDAwMDAwICAgICAwIC0+IC0wCisKKy0tIFNvbWUgbWlzY2VsbGFueQorcHJlY2lzaW9uOiAgIDM0Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAyICAgICAgICAgMworLS0gICAgICAgICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK3F1YXgwYTEgcXVhbnRpemUgICAgIDguNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1RSs2MTQzICAxRSs2MTQzICAgICAgLT4gOUUrNjE0MyAgIEluZXhhY3QgUm91bmRlZAorcXVheDBhMiBxdWFudGl6ZSAxMjgjOC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTVFKzYxNDMgIDEyOCMxRSs2MTQzICAtPiA4LjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2RSs2MTQzICAgUm91bmRlZCBJbmV4YWN0CitxdWF4MGEzIHF1YW50aXplIDEyOCM4LjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NUUrNjE0NCAgMTI4IzFFKzYxNDQgIC0+IDguNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1RSs2MTQ0CisKKy0tIHBheWxvYWQgZGVjYXBpdGF0ZQorcHJlY2lzaW9uOiA1CitxdWF4NjIxMDAgcXVhbnRpemUgMTEgLXNOYU4xMjM0NTY3ODkwIC0+IC1OYU42Nzg5MCAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworcXVheDk5OCBxdWFudGl6ZSAxMCAgICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDk5OSBxdWFudGl6ZSAgIyAxZTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yYW5kb21Cb3VuZDMyLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JhbmRvbUJvdW5kMzIuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDU5YjljCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yYW5kb21Cb3VuZDMyLmRlY1Rlc3QKQEAgLTAsMCArMSwyNDQzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHJhbmRvbUJvdW5kMzIuZGVjVGVzdCAtLSBkZWNpbWFsIHRlc3RjYXNlcyAtLSBib3VuZGFyaWVzIG5lYXIgMzIgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhlc2UgdGVzdGNhc2VzIHRlc3QgY2FsY3VsYXRpb25zIGF0IHByZWNpc2lvbnMgMzEsIDMyLCBhbmQgMzMsIHRvCistLSBleGVyY2lzZSB0aGUgYm91bmRhcmllcyBhcm91bmQgMioqNQorCistLSByYW5kb21seSBnZW5lcmF0ZWQgdGVzdGNhc2VzIFsyNiBTZXAgMjAwMV0KK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgMzEKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5OQorbWluZXhwb25lbnQ6IC05OTk5CisKK2FkZHgzMDAxIGFkZCA0OTUzNzM0Njc1OTEzLjA2NTMxNDczODc0MzMyMjU3OSAwMjE4LjkzMjAxMDM5NjUzNDM3MTcwNDkzMDcxNDg2MEUrNzk3IC0+IDIuMTg5MzIwMTAzOTY1MzQzNzE3MDQ5MzA3MTQ4NjAwRSs3OTkgSW5leGFjdCBSb3VuZGVkCitjb214MzAwMSBjb21wYXJlIDQ5NTM3MzQ2NzU5MTMuMDY1MzE0NzM4NzQzMzIyNTc5IDAyMTguOTMyMDEwMzk2NTM0MzcxNzA0OTMwNzE0ODYwRSs3OTcgLT4gLTEKK2RpdngzMDAxIGRpdmlkZSA0OTUzNzM0Njc1OTEzLjA2NTMxNDczODc0MzMyMjU3OSAwMjE4LjkzMjAxMDM5NjUzNDM3MTcwNDkzMDcxNDg2MEUrNzk3IC0+IDIuMjYyNjgxNzY0NTA3OTY1MDA1Mjg0MDgwODAwNDM4RS03ODcgSW5leGFjdCBSb3VuZGVkCitkdml4MzAwMSBkaXZpZGVpbnQgNDk1MzczNDY3NTkxMy4wNjUzMTQ3Mzg3NDMzMjI1NzkgMDIxOC45MzIwMTAzOTY1MzQzNzE3MDQ5MzA3MTQ4NjBFKzc5NyAtPiAwCittdWx4MzAwMSBtdWx0aXBseSA0OTUzNzM0Njc1OTEzLjA2NTMxNDczODc0MzMyMjU3OSAwMjE4LjkzMjAxMDM5NjUzNDM3MTcwNDkzMDcxNDg2MEUrNzk3IC0+IDEuMDg0NTMxMDkxNTY4NjcyMDQxOTIzMTUxNjMyMDY2RSs4MTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwMSBwb3dlciA0OTUzNzM0Njc1OTEzLjA2NTMxNDczODc0MzMyMjU3OSAyIC0+IDI0NTM5NDg3MjM5MzQzNTIyMjQ2MTU1ODkwLjk5NDk1IEluZXhhY3QgUm91bmRlZAorcmVteDMwMDEgcmVtYWluZGVyIDQ5NTM3MzQ2NzU5MTMuMDY1MzE0NzM4NzQzMzIyNTc5IDAyMTguOTMyMDEwMzk2NTM0MzcxNzA0OTMwNzE0ODYwRSs3OTcgLT4gNDk1MzczNDY3NTkxMy4wNjUzMTQ3Mzg3NDMzMjI1NzkKK3N1YngzMDAxIHN1YnRyYWN0IDQ5NTM3MzQ2NzU5MTMuMDY1MzE0NzM4NzQzMzIyNTc5IDAyMTguOTMyMDEwMzk2NTM0MzcxNzA0OTMwNzE0ODYwRSs3OTcgLT4gLTIuMTg5MzIwMTAzOTY1MzQzNzE3MDQ5MzA3MTQ4NjAwRSs3OTkgSW5leGFjdCBSb3VuZGVkCithZGR4MzAwMiBhZGQgOTY0MS42ODQzMjMzODY5NTU4ODE1OTU0OTAzNDc5MTBFLTg0NCAtNzg4NjQ1MzIwNDcuMTIyODc0ODQ0MzA5ODA2MzY3OThFKzkzNCAtPiAtNy44ODY0NTMyMDQ3MTIyODc0ODQ0MzA5ODA2MzY3OThFKzk0NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDAyIGNvbXBhcmUgOTY0MS42ODQzMjMzODY5NTU4ODE1OTU0OTAzNDc5MTBFLTg0NCAtNzg4NjQ1MzIwNDcuMTIyODc0ODQ0MzA5ODA2MzY3OThFKzkzNCAtPiAxCitkaXZ4MzAwMiBkaXZpZGUgOTY0MS42ODQzMjMzODY5NTU4ODE1OTU0OTAzNDc5MTBFLTg0NCAtNzg4NjQ1MzIwNDcuMTIyODc0ODQ0MzA5ODA2MzY3OThFKzkzNCAtPiAtMS4yMjI1NjI4MDE0NDEwNjk2Njc4NDk0MDI3ODI3MTZFLTE3ODUgSW5leGFjdCBSb3VuZGVkCitkdml4MzAwMiBkaXZpZGVpbnQgOTY0MS42ODQzMjMzODY5NTU4ODE1OTU0OTAzNDc5MTBFLTg0NCAtNzg4NjQ1MzIwNDcuMTIyODc0ODQ0MzA5ODA2MzY3OThFKzkzNCAtPiAtMAorbXVseDMwMDIgbXVsdGlwbHkgOTY0MS42ODQzMjMzODY5NTU4ODE1OTU0OTAzNDc5MTBFLTg0NCAtNzg4NjQ1MzIwNDcuMTIyODc0ODQ0MzA5ODA2MzY3OThFKzkzNCAtPiAtNy42MDM4NjkyMjMwOTk5MjgxNDE2NTk4MzE1ODk5MDVFKzEwNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDAyIHBvd2VyIDk2NDEuNjg0MzIzMzg2OTU1ODgxNTk1NDkwMzQ3OTEwRS04NDQgLTggLT4gMS4zMzg5ODgxNTIwNjcxODAzMzc3Mzg5NTU3NTc1ODdFKzY3MjAgSW5leGFjdCBSb3VuZGVkCityZW14MzAwMiByZW1haW5kZXIgOTY0MS42ODQzMjMzODY5NTU4ODE1OTU0OTAzNDc5MTBFLTg0NCAtNzg4NjQ1MzIwNDcuMTIyODc0ODQ0MzA5ODA2MzY3OThFKzkzNCAtPiA5LjY0MTY4NDMyMzM4Njk1NTg4MTU5NTQ5MDM0NzkxMEUtODQxCitzdWJ4MzAwMiBzdWJ0cmFjdCA5NjQxLjY4NDMyMzM4Njk1NTg4MTU5NTQ5MDM0NzkxMEUtODQ0IC03ODg2NDUzMjA0Ny4xMjI4NzQ4NDQzMDk4MDYzNjc5OEUrOTM0IC0+IDcuODg2NDUzMjA0NzEyMjg3NDg0NDMwOTgwNjM2Nzk4RSs5NDQgSW5leGFjdCBSb3VuZGVkCithZGR4MzAwMyBhZGQgLTEuMDI4MDQ4NTcxNjI4MzI2ODcxMDU0OTY0MzA3Nzc0RSs1MjkgNDkyMDAwMDg2NDU2OTkuMzU1Nzc5Mzc1ODI3MTQ3MzkgLT4gLTEuMDI4MDQ4NTcxNjI4MzI2ODcxMDU0OTY0MzA3Nzc0RSs1MjkgSW5leGFjdCBSb3VuZGVkCitjb214MzAwMyBjb21wYXJlIC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IDQ5MjAwMDA4NjQ1Njk5LjM1NTc3OTM3NTgyNzE0NzM5IC0+IC0xCitkaXZ4MzAwMyBkaXZpZGUgLTEuMDI4MDQ4NTcxNjI4MzI2ODcxMDU0OTY0MzA3Nzc0RSs1MjkgNDkyMDAwMDg2NDU2OTkuMzU1Nzc5Mzc1ODI3MTQ3MzkgLT4gLTIuMDg5NTI5MjQ5OTQ2OTcxNDgyODYxODQzNjkyNDY1RSs1MTUgSW5leGFjdCBSb3VuZGVkCitkdml4MzAwMyBkaXZpZGVpbnQgLTEuMDI4MDQ4NTcxNjI4MzI2ODcxMDU0OTY0MzA3Nzc0RSs1MjkgNDkyMDAwMDg2NDU2OTkuMzU1Nzc5Mzc1ODI3MTQ3MzkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDAzIG11bHRpcGx5IC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IDQ5MjAwMDA4NjQ1Njk5LjM1NTc3OTM3NTgyNzE0NzM5IC0+IC01LjA1Nzk5OTg2MTIzMTI1NTU0OTI4MzczNzg2MTIwN0UrNTQyIEluZXhhY3QgUm91bmRlZAorcG93eDMwMDMgcG93ZXIgLTEuMDI4MDQ4NTcxNjI4MzI2ODcxMDU0OTY0MzA3Nzc0RSs1MjkgNSAtPiAtMS4xNDgzMzM4NTgyNTM3MDQyODQyMzI3ODA4MTk3MzlFKzI2NDUgSW5leGFjdCBSb3VuZGVkCityZW14MzAwMyByZW1haW5kZXIgLTEuMDI4MDQ4NTcxNjI4MzI2ODcxMDU0OTY0MzA3Nzc0RSs1MjkgNDkyMDAwMDg2NDU2OTkuMzU1Nzc5Mzc1ODI3MTQ3MzkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDAzIHN1YnRyYWN0IC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IDQ5MjAwMDA4NjQ1Njk5LjM1NTc3OTM3NTgyNzE0NzM5IC0+IC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMDQgYWRkIDQ3OTA4NC44NTYxODA4OTMwNTI1NDE3NzM1MjA1NTE5IDA4NDE1NzU3MTA1NC4yNjkxNzg0NjYwOTgzOTg5OTMxIC0+IDg0MTU4MDUwMTM5LjEyNTM1OTM1OTE1MDk0MDc2NjYyIEluZXhhY3QgUm91bmRlZAorY29teDMwMDQgY29tcGFyZSA0NzkwODQuODU2MTgwODkzMDUyNTQxNzczNTIwNTUxOSAwODQxNTc1NzEwNTQuMjY5MTc4NDY2MDk4Mzk4OTkzMSAtPiAtMQorZGl2eDMwMDQgZGl2aWRlIDQ3OTA4NC44NTYxODA4OTMwNTI1NDE3NzM1MjA1NTE5IDA4NDE1NzU3MTA1NC4yNjkxNzg0NjYwOTgzOTg5OTMxIC0+IDAuMDAwMDA1NjkyNzEyNDkzNzA5NjE3OTA1NDkzNzEwMjA3OTY5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMDQgZGl2aWRlaW50IDQ3OTA4NC44NTYxODA4OTMwNTI1NDE3NzM1MjA1NTE5IDA4NDE1NzU3MTA1NC4yNjkxNzg0NjYwOTgzOTg5OTMxIC0+IDAKK211bHgzMDA0IG11bHRpcGx5IDQ3OTA4NC44NTYxODA4OTMwNTI1NDE3NzM1MjA1NTE5IDA4NDE1NzU3MTA1NC4yNjkxNzg0NjYwOTgzOTg5OTMxIC0+IDQwMzE4NjE3ODI1MDY3ODM3LjQ3MzE3NzAwNTIzNjg3IEluZXhhY3QgUm91bmRlZAorcG93eDMwMDQgcG93ZXIgNDc5MDg0Ljg1NjE4MDg5MzA1MjU0MTc3MzUyMDU1MTkgOCAtPiAyLjc3NTIzMzU5ODAyMTIzNTk3MzU0NTkzMzA0NTgzN0UrNDUgSW5leGFjdCBSb3VuZGVkCityZW14MzAwNCByZW1haW5kZXIgNDc5MDg0Ljg1NjE4MDg5MzA1MjU0MTc3MzUyMDU1MTkgMDg0MTU3NTcxMDU0LjI2OTE3ODQ2NjA5ODM5ODk5MzEgLT4gNDc5MDg0Ljg1NjE4MDg5MzA1MjU0MTc3MzUyMDU1MTkKK3N1YngzMDA0IHN1YnRyYWN0IDQ3OTA4NC44NTYxODA4OTMwNTI1NDE3NzM1MjA1NTE5IDA4NDE1NzU3MTA1NC4yNjkxNzg0NjYwOTgzOTg5OTMxIC0+IC04NDE1NzA5MTk2OS40MTI5OTc1NzMwNDU4NTcyMTk1OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDA1IGFkZCAtMDM2Mzc1MDc4OC41NzM3ODIyMDU2NjQzNDk1NjI5MzEgLTMxNzIuMDgwOTM0NDY0MTMzNjkxOTA5OTA1OTgwMDk2IC0+IC0zNjM3NTM5NjAuNjU0NzE2NjY5Nzk4MDQxNDcyODM3MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDA1IGNvbXBhcmUgLTAzNjM3NTA3ODguNTczNzgyMjA1NjY0MzQ5NTYyOTMxIC0zMTcyLjA4MDkzNDQ2NDEzMzY5MTkwOTkwNTk4MDA5NiAtPiAtMQorZGl2eDMwMDUgZGl2aWRlIC0wMzYzNzUwNzg4LjU3Mzc4MjIwNTY2NDM0OTU2MjkzMSAtMzE3Mi4wODA5MzQ0NjQxMzM2OTE5MDk5MDU5ODAwOTYgLT4gMTE0NjcyLjYwNjQzMzc0MjAxNjcwOTYyOTUyOTA4OTAgSW5leGFjdCBSb3VuZGVkCitkdml4MzAwNSBkaXZpZGVpbnQgLTAzNjM3NTA3ODguNTczNzgyMjA1NjY0MzQ5NTYyOTMxIC0zMTcyLjA4MDkzNDQ2NDEzMzY5MTkwOTkwNTk4MDA5NiAtPiAxMTQ2NzIKK211bHgzMDA1IG11bHRpcGx5IC0wMzYzNzUwNzg4LjU3Mzc4MjIwNTY2NDM0OTU2MjkzMSAtMzE3Mi4wODA5MzQ0NjQxMzM2OTE5MDk5MDU5ODAwOTYgLT4gMTE1Mzg0Njk0MTMzMS4xODg1ODMyOTIyMzkyMzA4MTggSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwNSBwb3dlciAtMDM2Mzc1MDc4OC41NzM3ODIyMDU2NjQzNDk1NjI5MzEgLTMxNzIgLT4gMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwMDUgcmVtYWluZGVyIC0wMzYzNzUwNzg4LjU3Mzc4MjIwNTY2NDM0OTU2MjkzMSAtMzE3Mi4wODA5MzQ0NjQxMzM2OTE5MDk5MDU5ODAwOTYgLT4gLTE5MjMuNjU2OTExMDY2OTQ1NjU2ODI0MzgxNDMxNDg4CitzdWJ4MzAwNSBzdWJ0cmFjdCAtMDM2Mzc1MDc4OC41NzM3ODIyMDU2NjQzNDk1NjI5MzEgLTMxNzIuMDgwOTM0NDY0MTMzNjkxOTA5OTA1OTgwMDk2IC0+IC0zNjM3NDc2MTYuNDkyODQ3NzQxNTMwNjU3NjUzMDI1MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDA2IGFkZCAxMzgxMDI2NTUxNDIzNjY5OTE5MDEwMTkxODc4NDQ5IC04Mi42NjYxNDc3NTQ0NTM3MTI1NDk5OTM1NzgwMDczOSAtPiAxMzgxMDI2NTUxNDIzNjY5OTE5MDEwMTkxODc4MzY2IEluZXhhY3QgUm91bmRlZAorY29teDMwMDYgY29tcGFyZSAxMzgxMDI2NTUxNDIzNjY5OTE5MDEwMTkxODc4NDQ5IC04Mi42NjYxNDc3NTQ0NTM3MTI1NDk5OTM1NzgwMDczOSAtPiAxCitkaXZ4MzAwNiBkaXZpZGUgMTM4MTAyNjU1MTQyMzY2OTkxOTAxMDE5MTg3ODQ0OSAtODIuNjY2MTQ3NzU0NDUzNzEyNTQ5OTkzNTc4MDA3MzkgLT4gLTE2NzA2MDcxMjE0NjEzNTUyMzc3Mzc2NjM5NTU3LjkwIEluZXhhY3QgUm91bmRlZAorZHZpeDMwMDYgZGl2aWRlaW50IDEzODEwMjY1NTE0MjM2Njk5MTkwMTAxOTE4Nzg0NDkgLTgyLjY2NjE0Nzc1NDQ1MzcxMjU0OTk5MzU3ODAwNzM5IC0+IC0xNjcwNjA3MTIxNDYxMzU1MjM3NzM3NjYzOTU1NworbXVseDMwMDYgbXVsdGlwbHkgMTM4MTAyNjU1MTQyMzY2OTkxOTAxMDE5MTg3ODQ0OSAtODIuNjY2MTQ3NzU0NDUzNzEyNTQ5OTkzNTc4MDA3MzkgLT4gLTEuMTQxNjQxNDQ5NTI4MTI3NjU2NTYwNzcwMDU3MjI4RSszMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDA2IHBvd2VyIDEzODEwMjY1NTE0MjM2Njk5MTkwMTAxOTE4Nzg0NDkgLTgzIC0+IDIuMzA3OTc3OTA4MTA2NTY0Mjk5OTI1MTkzMDExMDUyRS0yNTAyIEluZXhhY3QgUm91bmRlZAorcmVteDMwMDYgcmVtYWluZGVyIDEzODEwMjY1NTE0MjM2Njk5MTkwMTAxOTE4Nzg0NDkgLTgyLjY2NjE0Nzc1NDQ1MzcxMjU0OTk5MzU3ODAwNzM5IC0+IDc0LjIyMTE1OTUzNTUzNjAyMDM2MDQyMTY4NzY3Mzc3CitzdWJ4MzAwNiBzdWJ0cmFjdCAxMzgxMDI2NTUxNDIzNjY5OTE5MDEwMTkxODc4NDQ5IC04Mi42NjYxNDc3NTQ0NTM3MTI1NDk5OTM1NzgwMDczOSAtPiAxMzgxMDI2NTUxNDIzNjY5OTE5MDEwMTkxODc4NTMyIEluZXhhY3QgUm91bmRlZAorYWRkeDMwMDcgYWRkIDQ2MjcuMDI2OTYwNDIzMDcyMTI3OTUzNTU2NjM1NTg1IC00NDEwNTgzMTMyOTAxLjgzMDAxNzQ3OTc0MTIzMTEzMSAtPiAtNDQxMDU4MzEyODI3NC44MDMwNTcwNTY2NjkxMDMxNzcgSW5leGFjdCBSb3VuZGVkCitjb214MzAwNyBjb21wYXJlIDQ2MjcuMDI2OTYwNDIzMDcyMTI3OTUzNTU2NjM1NTg1IC00NDEwNTgzMTMyOTAxLjgzMDAxNzQ3OTc0MTIzMTEzMSAtPiAxCitkaXZ4MzAwNyBkaXZpZGUgNDYyNy4wMjY5NjA0MjMwNzIxMjc5NTM1NTY2MzU1ODUgLTQ0MTA1ODMxMzI5MDEuODMwMDE3NDc5NzQxMjMxMTMxIC0+IC0xLjA0OTA3Mzc0Mzk5MjQwNDU3MDU2OTAwMzEyOTM0NkUtOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDA3IGRpdmlkZWludCA0NjI3LjAyNjk2MDQyMzA3MjEyNzk1MzU1NjYzNTU4NSAtNDQxMDU4MzEzMjkwMS44MzAwMTc0Nzk3NDEyMzExMzEgLT4gLTAKK211bHgzMDA3IG11bHRpcGx5IDQ2MjcuMDI2OTYwNDIzMDcyMTI3OTUzNTU2NjM1NTg1IC00NDEwNTgzMTMyOTAxLjgzMDAxNzQ3OTc0MTIzMTEzMSAtPiAtMjA0MDc4ODcwNjcxMjQwMjUuMzE1NzY4ODc1NjUxMTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwNyBwb3dlciA0NjI3LjAyNjk2MDQyMzA3MjEyNzk1MzU1NjYzNTU4NSAtNCAtPiAyLjE4MTY4NDE2NzIyMjMzNDkzNDIyMTQwNzc4MTcwMUUtMTUgSW5leGFjdCBSb3VuZGVkCityZW14MzAwNyByZW1haW5kZXIgNDYyNy4wMjY5NjA0MjMwNzIxMjc5NTM1NTY2MzU1ODUgLTQ0MTA1ODMxMzI5MDEuODMwMDE3NDc5NzQxMjMxMTMxIC0+IDQ2MjcuMDI2OTYwNDIzMDcyMTI3OTUzNTU2NjM1NTg1CitzdWJ4MzAwNyBzdWJ0cmFjdCA0NjI3LjAyNjk2MDQyMzA3MjEyNzk1MzU1NjYzNTU4NSAtNDQxMDU4MzEzMjkwMS44MzAwMTc0Nzk3NDEyMzExMzEgLT4gNDQxMDU4MzEzNzUyOC44NTY5Nzc5MDI4MTMzNTkwODUgSW5leGFjdCBSb3VuZGVkCithZGR4MzAwOCBhZGQgNzUzNTM1NzQ0OTMuODQ0ODQxNTM0ODQ5MTgyMTIwNDIgLTg2ODQxMTE2OTUwOTU4NDk5MjIyNjMwNDQxOTEyMjEgLT4gLTg2ODQxMTE2OTUwOTU4NDk5MjIxODc2OTA2MTY3MjcgSW5leGFjdCBSb3VuZGVkCitjb214MzAwOCBjb21wYXJlIDc1MzUzNTc0NDkzLjg0NDg0MTUzNDg0OTE4MjEyMDQyIC04Njg0MTExNjk1MDk1ODQ5OTIyMjYzMDQ0MTkxMjIxIC0+IDEKK2RpdngzMDA4IGRpdmlkZSA3NTM1MzU3NDQ5My44NDQ4NDE1MzQ4NDkxODIxMjA0MiAtODY4NDExMTY5NTA5NTg0OTkyMjI2MzA0NDE5MTIyMSAtPiAtOC42NzcxNzcwMjYyMjM1MzY0NzU1MzE1OTI0MzIxMThFLTIxIEluZXhhY3QgUm91bmRlZAorZHZpeDMwMDggZGl2aWRlaW50IDc1MzUzNTc0NDkzLjg0NDg0MTUzNDg0OTE4MjEyMDQyIC04Njg0MTExNjk1MDk1ODQ5OTIyMjYzMDQ0MTkxMjIxIC0+IC0wCittdWx4MzAwOCBtdWx0aXBseSA3NTM1MzU3NDQ5My44NDQ4NDE1MzQ4NDkxODIxMjA0MiAtODY4NDExMTY5NTA5NTg0OTkyMjI2MzA0NDE5MTIyMSAtPiAtNi41NDM3ODg1NzUyOTI3NDMyODE0NTY4MzA3MDExMjdFKzQxIEluZXhhY3QgUm91bmRlZAorcG93eDMwMDggcG93ZXIgNzUzNTM1NzQ0OTMuODQ0ODQxNTM0ODQ5MTgyMTIwNDIgLTkgLT4gMS4yNzY2MzA2NzAyODc5MDY5MjU1NzA2NDU0OTA3MDdFLTk4IEluZXhhY3QgUm91bmRlZAorcmVteDMwMDggcmVtYWluZGVyIDc1MzUzNTc0NDkzLjg0NDg0MTUzNDg0OTE4MjEyMDQyIC04Njg0MTExNjk1MDk1ODQ5OTIyMjYzMDQ0MTkxMjIxIC0+IDc1MzUzNTc0NDkzLjg0NDg0MTUzNDg0OTE4MjEyMDQyCitzdWJ4MzAwOCBzdWJ0cmFjdCA3NTM1MzU3NDQ5My44NDQ4NDE1MzQ4NDkxODIxMjA0MiAtODY4NDExMTY5NTA5NTg0OTkyMjI2MzA0NDE5MTIyMSAtPiA4Njg0MTExNjk1MDk1ODQ5OTIyMzM4Mzk3NzY1NzE1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMDkgYWRkIDY5MDcwNTguMjE2NDM1MzU1ODc0NzI5NTkyMzczMDExIDIuODU3MDA1NDQ2OTE3NjcwNTE1NjYyMzk4NzQxNTQ1IC0+IDY5MDcwNjEuMDczNDQwODAyNzkyNDAwMTA4MDM1NDEwIEluZXhhY3QgUm91bmRlZAorY29teDMwMDkgY29tcGFyZSA2OTA3MDU4LjIxNjQzNTM1NTg3NDcyOTU5MjM3MzAxMSAyLjg1NzAwNTQ0NjkxNzY3MDUxNTY2MjM5ODc0MTU0NSAtPiAxCitkaXZ4MzAwOSBkaXZpZGUgNjkwNzA1OC4yMTY0MzUzNTU4NzQ3Mjk1OTIzNzMwMTEgMi44NTcwMDU0NDY5MTc2NzA1MTU2NjIzOTg3NDE1NDUgLT4gMjQxNzU4Ni42NDYxNDYyODM4NTY0MzY4NjQxMjExMDQgSW5leGFjdCBSb3VuZGVkCitkdml4MzAwOSBkaXZpZGVpbnQgNjkwNzA1OC4yMTY0MzUzNTU4NzQ3Mjk1OTIzNzMwMTEgMi44NTcwMDU0NDY5MTc2NzA1MTU2NjIzOTg3NDE1NDUgLT4gMjQxNzU4NgorbXVseDMwMDkgbXVsdGlwbHkgNjkwNzA1OC4yMTY0MzUzNTU4NzQ3Mjk1OTIzNzMwMTEgMi44NTcwMDU0NDY5MTc2NzA1MTU2NjIzOTg3NDE1NDUgLT4gMTk3MzM1MDIuOTQ2NTMzMjYyMTE2MjM2OTgwMzQ3MTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwOSBwb3dlciA2OTA3MDU4LjIxNjQzNTM1NTg3NDcyOTU5MjM3MzAxMSAzIC0+IDMyOTUxODE1NjY0NjM2OTUwNTQ5NC44OTcxMzUzMjQwIEluZXhhY3QgUm91bmRlZAorcmVteDMwMDkgcmVtYWluZGVyIDY5MDcwNTguMjE2NDM1MzU1ODc0NzI5NTkyMzczMDExIDIuODU3MDA1NDQ2OTE3NjcwNTE1NjYyMzk4NzQxNTQ1IC0+IDEuODQ2MDQzNDUyNDgzNDUxMzk2NDQ5MDM0MTg5NjMwCitzdWJ4MzAwOSBzdWJ0cmFjdCA2OTA3MDU4LjIxNjQzNTM1NTg3NDcyOTU5MjM3MzAxMSAyLjg1NzAwNTQ0NjkxNzY3MDUxNTY2MjM5ODc0MTU0NSAtPiA2OTA3MDU1LjM1OTQyOTkwODk1NzA1OTA3NjcxMDYxMiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDEwIGFkZCAtMzg5NDk1MzA0MjcyNTMuMjQwMzA2ODA0Njg2NzcxOTAgNzEyMTY4MDIxLjEyNjUzODQ0NjY0NDI1NzY2MTkwNjRFLTk5MiAtPiAtMzg5NDk1MzA0MjcyNTMuMjQwMzA2ODA0Njg2NzcxOTAgSW5leGFjdCBSb3VuZGVkCitjb214MzAxMCBjb21wYXJlIC0zODk0OTUzMDQyNzI1My4yNDAzMDY4MDQ2ODY3NzE5MCA3MTIxNjgwMjEuMTI2NTM4NDQ2NjQ0MjU3NjYxOTA2NEUtOTkyIC0+IC0xCitkaXZ4MzAxMCBkaXZpZGUgLTM4OTQ5NTMwNDI3MjUzLjI0MDMwNjgwNDY4Njc3MTkwIDcxMjE2ODAyMS4xMjY1Mzg0NDY2NDQyNTc2NjE5MDY0RS05OTIgLT4gLTUuNDY5MTQ5MDMxMTAwOTk5NzAwNDg5MjIxMTIyNTA5RSs5OTYgSW5leGFjdCBSb3VuZGVkCitkdml4MzAxMCBkaXZpZGVpbnQgLTM4OTQ5NTMwNDI3MjUzLjI0MDMwNjgwNDY4Njc3MTkwIDcxMjE2ODAyMS4xMjY1Mzg0NDY2NDQyNTc2NjE5MDY0RS05OTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDEwIG11bHRpcGx5IC0zODk0OTUzMDQyNzI1My4yNDAzMDY4MDQ2ODY3NzE5MCA3MTIxNjgwMjEuMTI2NTM4NDQ2NjQ0MjU3NjYxOTA2NEUtOTkyIC0+IC0yLjc3Mzg2MTAwMDgxODQ4Mzc2OTI5MjI0MDEwOTQxN0UtOTcwIEluZXhhY3QgUm91bmRlZAorcG93eDMwMTAgcG93ZXIgLTM4OTQ5NTMwNDI3MjUzLjI0MDMwNjgwNDY4Njc3MTkwIDcgLT4gLTEuMzU5OTI2OTU5ODIzMDcxMzMyNTk5ODE3MzYzODc3RSs5NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDEwIHJlbWFpbmRlciAtMzg5NDk1MzA0MjcyNTMuMjQwMzA2ODA0Njg2NzcxOTAgNzEyMTY4MDIxLjEyNjUzODQ0NjY0NDI1NzY2MTkwNjRFLTk5MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwMTAgc3VidHJhY3QgLTM4OTQ5NTMwNDI3MjUzLjI0MDMwNjgwNDY4Njc3MTkwIDcxMjE2ODAyMS4xMjY1Mzg0NDY2NDQyNTc2NjE5MDY0RS05OTIgLT4gLTM4OTQ5NTMwNDI3MjUzLjI0MDMwNjgwNDY4Njc3MTkwIEluZXhhY3QgUm91bmRlZAorYWRkeDMwMTEgYWRkIC0wNzA4MDY5LjAyNTY2NzQ3MTk5NjM3ODA4MTQ4MjU0OSAtNTYyODQyLjQ3MDE1MjA3ODc4MzEwMTg3MzIyMDI4MDQgLT4gLTEyNzA5MTEuNDk1ODE5NTUwNzc5NDc5OTU0NzAyODI5IEluZXhhY3QgUm91bmRlZAorY29teDMwMTEgY29tcGFyZSAtMDcwODA2OS4wMjU2Njc0NzE5OTYzNzgwODE0ODI1NDkgLTU2Mjg0Mi40NzAxNTIwNzg3ODMxMDE4NzMyMjAyODA0IC0+IC0xCitkaXZ4MzAxMSBkaXZpZGUgLTA3MDgwNjkuMDI1NjY3NDcxOTk2Mzc4MDgxNDgyNTQ5IC01NjI4NDIuNDcwMTUyMDc4NzgzMTAxODczMjIwMjgwNCAtPiAxLjI1ODAyMzQ0OTIxODY2NTYwODM0OTE0NTM5NDA2OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDExIGRpdmlkZWludCAtMDcwODA2OS4wMjU2Njc0NzE5OTYzNzgwODE0ODI1NDkgLTU2Mjg0Mi40NzAxNTIwNzg3ODMxMDE4NzMyMjAyODA0IC0+IDEKK211bHgzMDExIG11bHRpcGx5IC0wNzA4MDY5LjAyNTY2NzQ3MTk5NjM3ODA4MTQ4MjU0OSAtNTYyODQyLjQ3MDE1MjA3ODc4MzEwMTg3MzIyMDI4MDQgLT4gMzk4NTMxMzE5NDQ0Ljg1NTYxMjg3MjkwODYxMTIyMDUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxMSBwb3dlciAtMDcwODA2OS4wMjU2Njc0NzE5OTYzNzgwODE0ODI1NDkgLTU2Mjg0MiAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzAxMSByZW1haW5kZXIgLTA3MDgwNjkuMDI1NjY3NDcxOTk2Mzc4MDgxNDgyNTQ5IC01NjI4NDIuNDcwMTUyMDc4NzgzMTAxODczMjIwMjgwNCAtPiAtMTQ1MjI2LjU1NTUxNTM5MzIxMzI3NjIwODI2MjI2ODYKK3N1YngzMDExIHN1YnRyYWN0IC0wNzA4MDY5LjAyNTY2NzQ3MTk5NjM3ODA4MTQ4MjU0OSAtNTYyODQyLjQ3MDE1MjA3ODc4MzEwMTg3MzIyMDI4MDQgLT4gLTE0NTIyNi41NTU1MTUzOTMyMTMyNzYyMDgyNjIyNjg2CithZGR4MzAxMiBhZGQgNDA1NTA4Ny4yNDY5OTQ2NDQ3MDk3Mjk5NDI2NzM5NzYgLTQzMTgzMTQ2OTIxODk3LjY3MzgzNDc2MTA0MDg0NTc1RSsyMTEgLT4gLTQuMzE4MzE0NjkyMTg5NzY3MzgzNDc2MTA0MDg0NTc1RSsyMjQgSW5leGFjdCBSb3VuZGVkCitjb214MzAxMiBjb21wYXJlIDQwNTUwODcuMjQ2OTk0NjQ0NzA5NzI5OTQyNjczOTc2IC00MzE4MzE0NjkyMTg5Ny42NzM4MzQ3NjEwNDA4NDU3NUUrMjExIC0+IDEKK2RpdngzMDEyIGRpdmlkZSA0MDU1MDg3LjI0Njk5NDY0NDcwOTcyOTk0MjY3Mzk3NiAtNDMxODMxNDY5MjE4OTcuNjczODM0NzYxMDQwODQ1NzVFKzIxMSAtPiAtOS4zOTA0Mzk0MDk5MTMzMDc5MDY5MjM5MDk2MzAyNDdFLTIxOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDEyIGRpdmlkZWludCA0MDU1MDg3LjI0Njk5NDY0NDcwOTcyOTk0MjY3Mzk3NiAtNDMxODMxNDY5MjE4OTcuNjczODM0NzYxMDQwODQ1NzVFKzIxMSAtPiAtMAorbXVseDMwMTIgbXVsdGlwbHkgNDA1NTA4Ny4yNDY5OTQ2NDQ3MDk3Mjk5NDI2NzM5NzYgLTQzMTgzMTQ2OTIxODk3LjY3MzgzNDc2MTA0MDg0NTc1RSsyMTEgLT4gLTEuNzUxMTE0MjgzNjgwODMzMDM5MTk3NjM3ODc0NDUzRSsyMzEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxMiBwb3dlciA0MDU1MDg3LjI0Njk5NDY0NDcwOTcyOTk0MjY3Mzk3NiAtNCAtPiAzLjY5ODI3NDg5Mzg0OTI0MTExNjE5NTc5NTUxNTMwMkUtMjcgSW5leGFjdCBSb3VuZGVkCityZW14MzAxMiByZW1haW5kZXIgNDA1NTA4Ny4yNDY5OTQ2NDQ3MDk3Mjk5NDI2NzM5NzYgLTQzMTgzMTQ2OTIxODk3LjY3MzgzNDc2MTA0MDg0NTc1RSsyMTEgLT4gNDA1NTA4Ny4yNDY5OTQ2NDQ3MDk3Mjk5NDI2NzM5NzYKK3N1YngzMDEyIHN1YnRyYWN0IDQwNTUwODcuMjQ2OTk0NjQ0NzA5NzI5OTQyNjczOTc2IC00MzE4MzE0NjkyMTg5Ny42NzM4MzQ3NjEwNDA4NDU3NUUrMjExIC0+IDQuMzE4MzE0NjkyMTg5NzY3MzgzNDc2MTA0MDg0NTc1RSsyMjQgSW5leGFjdCBSb3VuZGVkCithZGR4MzAxMyBhZGQgNDUwMjg5NTg5MjUyMC4zOTY1ODEzNDgxMTA5MDY5MDlFLTUxMiAtODE1LjkwNDczMDU5MjE4NjIzNDgyNjM1MjE4NzYwMzQgLT4gLTgxNS45MDQ3MzA1OTIxODYyMzQ4MjYzNTIxODc2MDM0IEluZXhhY3QgUm91bmRlZAorY29teDMwMTMgY29tcGFyZSA0NTAyODk1ODkyNTIwLjM5NjU4MTM0ODExMDkwNjkwOUUtNTEyIC04MTUuOTA0NzMwNTkyMTg2MjM0ODI2MzUyMTg3NjAzNCAtPiAxCitkaXZ4MzAxMyBkaXZpZGUgNDUwMjg5NTg5MjUyMC4zOTY1ODEzNDgxMTA5MDY5MDlFLTUxMiAtODE1LjkwNDczMDU5MjE4NjIzNDgyNjM1MjE4NzYwMzQgLT4gLTUuNTE4ODk5MTExMjM4MzY3ODYyMjM0Nzk4NDMzNTUxRS01MDMgSW5leGFjdCBSb3VuZGVkCitkdml4MzAxMyBkaXZpZGVpbnQgNDUwMjg5NTg5MjUyMC4zOTY1ODEzNDgxMTA5MDY5MDlFLTUxMiAtODE1LjkwNDczMDU5MjE4NjIzNDgyNjM1MjE4NzYwMzQgLT4gLTAKK211bHgzMDEzIG11bHRpcGx5IDQ1MDI4OTU4OTI1MjAuMzk2NTgxMzQ4MTEwOTA2OTA5RS01MTIgLTgxNS45MDQ3MzA1OTIxODYyMzQ4MjYzNTIxODc2MDM0IC0+IC0zLjY3MzkzNDA2MDA3MTUxNjE1NjYwNDQ1Mzc1NjU0MUUtNDk3IEluZXhhY3QgUm91bmRlZAorcG93eDMwMTMgcG93ZXIgNDUwMjg5NTg5MjUyMC4zOTY1ODEzNDgxMTA5MDY5MDlFLTUxMiAtODE2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMwMTMgcmVtYWluZGVyIDQ1MDI4OTU4OTI1MjAuMzk2NTgxMzQ4MTEwOTA2OTA5RS01MTIgLTgxNS45MDQ3MzA1OTIxODYyMzQ4MjYzNTIxODc2MDM0IC0+IDQuNTAyODk1ODkyNTIwMzk2NTgxMzQ4MTEwOTA2OTA5RS01MDAKK3N1YngzMDEzIHN1YnRyYWN0IDQ1MDI4OTU4OTI1MjAuMzk2NTgxMzQ4MTEwOTA2OTA5RS01MTIgLTgxNS45MDQ3MzA1OTIxODYyMzQ4MjYzNTIxODc2MDM0IC0+IDgxNS45MDQ3MzA1OTIxODYyMzQ4MjYzNTIxODc2MDM0IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMTQgYWRkIDQ2Ny42NzIxMjk1MDcyNjI4MTAwMjYwMjM5MTc5ODY1IC0wMi4wNzE1NTA3MzM5NTU3MzU2OTg1MjMxNjA3MzAyNSAtPiA0NjUuNjAwNTc4NzczMzA3MDc0MzI3NTAwNzU3MjU2MyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDE0IGNvbXBhcmUgNDY3LjY3MjEyOTUwNzI2MjgxMDAyNjAyMzkxNzk4NjUgLTAyLjA3MTU1MDczMzk1NTczNTY5ODUyMzE2MDczMDI1IC0+IDEKK2RpdngzMDE0IGRpdmlkZSA0NjcuNjcyMTI5NTA3MjYyODEwMDI2MDIzOTE3OTg2NSAtMDIuMDcxNTUwNzMzOTU1NzM1Njk4NTIzMTYwNzMwMjUgLT4gLTIyNS43NTk0MzgwMTAxMDI3NzA1OTk3NDk2MDQ1OTk5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMTQgZGl2aWRlaW50IDQ2Ny42NzIxMjk1MDcyNjI4MTAwMjYwMjM5MTc5ODY1IC0wMi4wNzE1NTA3MzM5NTU3MzU2OTg1MjMxNjA3MzAyNSAtPiAtMjI1CittdWx4MzAxNCBtdWx0aXBseSA0NjcuNjcyMTI5NTA3MjYyODEwMDI2MDIzOTE3OTg2NSAtMDIuMDcxNTUwNzMzOTU1NzM1Njk4NTIzMTYwNzMwMjUgLT4gLTk2OC44MDY1NDMxMzE0MTIxNTIzMDc0ODc1MDY5ODA3IEluZXhhY3QgUm91bmRlZAorcG93eDMwMTQgcG93ZXIgNDY3LjY3MjEyOTUwNzI2MjgxMDAyNjAyMzkxNzk4NjUgLTIgLT4gMC4wMDAwMDQ1NzIxMTM2OTQxOTMyMjE4MTA2MDk4MzYwODA5MzEgSW5leGFjdCBSb3VuZGVkCityZW14MzAxNCByZW1haW5kZXIgNDY3LjY3MjEyOTUwNzI2MjgxMDAyNjAyMzkxNzk4NjUgLTAyLjA3MTU1MDczMzk1NTczNTY5ODUyMzE2MDczMDI1IC0+IDEuNTczMjE0MzY3MjIyMjc3ODU4MzEyNzUzNjgwMjUKK3N1YngzMDE0IHN1YnRyYWN0IDQ2Ny42NzIxMjk1MDcyNjI4MTAwMjYwMjM5MTc5ODY1IC0wMi4wNzE1NTA3MzM5NTU3MzU2OTg1MjMxNjA3MzAyNSAtPiA0NjkuNzQzNjgwMjQxMjE4NTQ1NzI0NTQ3MDc4NzE2OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDE1IGFkZCAyLjE1Njc5NTMxMzMxMTE1MDE0Mzk0OTk5NzU1MjUwMUUtNTcxIC04Njc3MTQ3LjU4NjM4OTQwMTY4MjcxMjE4MDE0Njg1NSAtPiAtODY3NzE0Ny41ODYzODk0MDE2ODI3MTIxODAxNDY4NTUgSW5leGFjdCBSb3VuZGVkCitjb214MzAxNSBjb21wYXJlIDIuMTU2Nzk1MzEzMzExMTUwMTQzOTQ5OTk3NTUyNTAxRS01NzEgLTg2NzcxNDcuNTg2Mzg5NDAxNjgyNzEyMTgwMTQ2ODU1IC0+IDEKK2RpdngzMDE1IGRpdmlkZSAyLjE1Njc5NTMxMzMxMTE1MDE0Mzk0OTk5NzU1MjUwMUUtNTcxIC04Njc3MTQ3LjU4NjM4OTQwMTY4MjcxMjE4MDE0Njg1NSAtPiAtMi40ODU2MDQwNDQyMzAxNjM3OTk2MDQyNDM1MjkwMDVFLTU3OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDE1IGRpdmlkZWludCAyLjE1Njc5NTMxMzMxMTE1MDE0Mzk0OTk5NzU1MjUwMUUtNTcxIC04Njc3MTQ3LjU4NjM4OTQwMTY4MjcxMjE4MDE0Njg1NSAtPiAtMAorbXVseDMwMTUgbXVsdGlwbHkgMi4xNTY3OTUzMTMzMTExNTAxNDM5NDk5OTc1NTI1MDFFLTU3MSAtODY3NzE0Ny41ODYzODk0MDE2ODI3MTIxODAxNDY4NTUgLT4gLTEuODcxNDgzMTI0NzIzMzgxOTg2MjcyODM3OTQyNTc3RS01NjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxNSBwb3dlciAyLjE1Njc5NTMxMzMxMTE1MDE0Mzk0OTk5NzU1MjUwMUUtNTcxIC04Njc3MTQ4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMwMTUgcmVtYWluZGVyIDIuMTU2Nzk1MzEzMzExMTUwMTQzOTQ5OTk3NTUyNTAxRS01NzEgLTg2NzcxNDcuNTg2Mzg5NDAxNjgyNzEyMTgwMTQ2ODU1IC0+IDIuMTU2Nzk1MzEzMzExMTUwMTQzOTQ5OTk3NTUyNTAxRS01NzEKK3N1YngzMDE1IHN1YnRyYWN0IDIuMTU2Nzk1MzEzMzExMTUwMTQzOTQ5OTk3NTUyNTAxRS01NzEgLTg2NzcxNDcuNTg2Mzg5NDAxNjgyNzEyMTgwMTQ2ODU1IC0+IDg2NzcxNDcuNTg2Mzg5NDAxNjgyNzEyMTgwMTQ2ODU1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMTYgYWRkIC05NzQ5NTMuMjgwMTYzNzIwODM2ODAwMjU4NTgyMjQ1NyAtNjkzMDk1NzkzLjM2Njc1NzgwNjc4MDI2OTgxOTEyNDYgLT4gLTY5NDA3MDc0Ni42NDY5MjE1Mjc2MTcwNzAwNzc3MDY4IEluZXhhY3QgUm91bmRlZAorY29teDMwMTYgY29tcGFyZSAtOTc0OTUzLjI4MDE2MzcyMDgzNjgwMDI1ODU4MjI0NTcgLTY5MzA5NTc5My4zNjY3NTc4MDY3ODAyNjk4MTkxMjQ2IC0+IDEKK2RpdngzMDE2IGRpdmlkZSAtOTc0OTUzLjI4MDE2MzcyMDgzNjgwMDI1ODU4MjI0NTcgLTY5MzA5NTc5My4zNjY3NTc4MDY3ODAyNjk4MTkxMjQ2IC0+IDAuMDAxNDA2NjY0NTQ2OTQyMDkyOTQxOTYxMDc1NjA4NzY5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMTYgZGl2aWRlaW50IC05NzQ5NTMuMjgwMTYzNzIwODM2ODAwMjU4NTgyMjQ1NyAtNjkzMDk1NzkzLjM2Njc1NzgwNjc4MDI2OTgxOTEyNDYgLT4gMAorbXVseDMwMTYgbXVsdGlwbHkgLTk3NDk1My4yODAxNjM3MjA4MzY4MDAyNTg1ODIyNDU3IC02OTMwOTU3OTMuMzY2NzU3ODA2NzgwMjY5ODE5MTI0NiAtPiA2NzU3MzYwMTcyMTA1OTYuOTg5OTU4Nzc0OTk5MTM2MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDE2IHBvd2VyIC05NzQ5NTMuMjgwMTYzNzIwODM2ODAwMjU4NTgyMjQ1NyAtNjkzMDk1NzkzIC0+IC0wRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzAxNiByZW1haW5kZXIgLTk3NDk1My4yODAxNjM3MjA4MzY4MDAyNTg1ODIyNDU3IC02OTMwOTU3OTMuMzY2NzU3ODA2NzgwMjY5ODE5MTI0NiAtPiAtOTc0OTUzLjI4MDE2MzcyMDgzNjgwMDI1ODU4MjI0NTcKK3N1YngzMDE2IHN1YnRyYWN0IC05NzQ5NTMuMjgwMTYzNzIwODM2ODAwMjU4NTgyMjQ1NyAtNjkzMDk1NzkzLjM2Njc1NzgwNjc4MDI2OTgxOTEyNDYgLT4gNjkyMTIwODQwLjA4NjU5NDA4NTk0MzQ2OTU2MDU0MjQgSW5leGFjdCBSb3VuZGVkCithZGR4MzAxNyBhZGQgLTc2MzQ2ODAxNDAwMDk1NzE4NDYxNTU2NTQzMzk3ODEgMzAwOTYzMDk0OTUwMi4wMzU4NTI0MzM0MzQyMTQ0MTNFLTQ5MCAtPiAtNzYzNDY4MDE0MDAwOTU3MTg0NjE1NTY1NDMzOTc4MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDE3IGNvbXBhcmUgLTc2MzQ2ODAxNDAwMDk1NzE4NDYxNTU2NTQzMzk3ODEgMzAwOTYzMDk0OTUwMi4wMzU4NTI0MzM0MzQyMTQ0MTNFLTQ5MCAtPiAtMQorZGl2eDMwMTcgZGl2aWRlIC03NjM0NjgwMTQwMDA5NTcxODQ2MTU1NjU0MzM5NzgxIDMwMDk2MzA5NDk1MDIuMDM1ODUyNDMzNDM0MjE0NDEzRS00OTAgLT4gLTIuNTM2NzQ5NjEwODY5MzI2NzUzNzQxMDI0NjU5OTQ4RSs1MDggSW5leGFjdCBSb3VuZGVkCitkdml4MzAxNyBkaXZpZGVpbnQgLTc2MzQ2ODAxNDAwMDk1NzE4NDYxNTU2NTQzMzk3ODEgMzAwOTYzMDk0OTUwMi4wMzU4NTI0MzM0MzQyMTQ0MTNFLTQ5MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwMTcgbXVsdGlwbHkgLTc2MzQ2ODAxNDAwMDk1NzE4NDYxNTU2NTQzMzk3ODEgMzAwOTYzMDk0OTUwMi4wMzU4NTI0MzM0MzQyMTQ0MTNFLTQ5MCAtPiAtMi4yOTc3NTY5NjM4OTIxMzQzNzM2NTc1NDQwMjUxMDdFLTQ0NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDE3IHBvd2VyIC03NjM0NjgwMTQwMDA5NTcxODQ2MTU1NjU0MzM5NzgxIDMgLT4gLTQuNDUwMTI4MzgyMDcyMTU3MTcwMjA3NTg0ODQ3ODMxRSs5MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDE3IHJlbWFpbmRlciAtNzYzNDY4MDE0MDAwOTU3MTg0NjE1NTY1NDMzOTc4MSAzMDA5NjMwOTQ5NTAyLjAzNTg1MjQzMzQzNDIxNDQxM0UtNDkwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzAxNyBzdWJ0cmFjdCAtNzYzNDY4MDE0MDAwOTU3MTg0NjE1NTY1NDMzOTc4MSAzMDA5NjMwOTQ5NTAyLjAzNTg1MjQzMzQzNDIxNDQxM0UtNDkwIC0+IC03NjM0NjgwMTQwMDA5NTcxODQ2MTU1NjU0MzM5NzgxIEluZXhhY3QgUm91bmRlZAorYWRkeDMwMTggYWRkIDI2MjI3My4wMjIyODUxMTg2NTIzNjUwODg5ODk2NDI4RS02MjQgNzQxNzcuMjEwNzMzMzgwOTA4NDMxNDU4Mzg4MzU0ODAgLT4gNzQxNzcuMjEwNzMzMzgwOTA4NDMxNDU4Mzg4MzU0ODAgSW5leGFjdCBSb3VuZGVkCitjb214MzAxOCBjb21wYXJlIDI2MjI3My4wMjIyODUxMTg2NTIzNjUwODg5ODk2NDI4RS02MjQgNzQxNzcuMjEwNzMzMzgwOTA4NDMxNDU4Mzg4MzU0ODAgLT4gLTEKK2RpdngzMDE4IGRpdmlkZSAyNjIyNzMuMDIyMjg1MTE4NjUyMzY1MDg4OTg5NjQyOEUtNjI0IDc0MTc3LjIxMDczMzM4MDkwODQzMTQ1ODM4ODM1NDgwIC0+IDMuNTM1NzYyNzk5NTQ1Mjc0MzI5MzU4MjkyMDY1MzQzRS02MjQgSW5leGFjdCBSb3VuZGVkCitkdml4MzAxOCBkaXZpZGVpbnQgMjYyMjczLjAyMjI4NTExODY1MjM2NTA4ODk4OTY0MjhFLTYyNCA3NDE3Ny4yMTA3MzMzODA5MDg0MzE0NTgzODgzNTQ4MCAtPiAwCittdWx4MzAxOCBtdWx0aXBseSAyNjIyNzMuMDIyMjg1MTE4NjUyMzY1MDg4OTg5NjQyOEUtNjI0IDc0MTc3LjIxMDczMzM4MDkwODQzMTQ1ODM4ODM1NDgwIC0+IDEuOTQ1NDY4MTI0MzcyMzk1MzQ5MTkyNjY1MDMxNjc1RS02MTQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxOCBwb3dlciAyNjIyNzMuMDIyMjg1MTE4NjUyMzY1MDg4OTg5NjQyOEUtNjI0IDc0MTc3IC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDE4IHJlbWFpbmRlciAyNjIyNzMuMDIyMjg1MTE4NjUyMzY1MDg4OTg5NjQyOEUtNjI0IDc0MTc3LjIxMDczMzM4MDkwODQzMTQ1ODM4ODM1NDgwIC0+IDIuNjIyNzMwMjIyODUxMTg2NTIzNjUwODg5ODk2NDI4RS02MTkKK3N1YngzMDE4IHN1YnRyYWN0IDI2MjI3My4wMjIyODUxMTg2NTIzNjUwODg5ODk2NDI4RS02MjQgNzQxNzcuMjEwNzMzMzgwOTA4NDMxNDU4Mzg4MzU0ODAgLT4gLTc0MTc3LjIxMDczMzM4MDkwODQzMTQ1ODM4ODM1NDgwIEluZXhhY3QgUm91bmRlZAorYWRkeDMwMTkgYWRkIC04MDM2MDUyNzQ4ODE1OTAzMTc3NjI0NzE2NTgxNzMyIC0wNjY2NzczNTcuNDQzODgwOTU0ODg1MDk2NjE2NzU3MyAtPiAtODAzNjA1Mjc0ODgxNTkwMzE3NzYyNDc4MzI1OTA4OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDE5IGNvbXBhcmUgLTgwMzYwNTI3NDg4MTU5MDMxNzc2MjQ3MTY1ODE3MzIgLTA2NjY3NzM1Ny40NDM4ODA5NTQ4ODUwOTY2MTY3NTczIC0+IC0xCitkaXZ4MzAxOSBkaXZpZGUgLTgwMzYwNTI3NDg4MTU5MDMxNzc2MjQ3MTY1ODE3MzIgLTA2NjY3NzM1Ny40NDM4ODA5NTQ4ODUwOTY2MTY3NTczIC0+IDEyMDUyMTQ2NDIxMDM4NzM1MTczMjczMi42MjcxNDY5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMTkgZGl2aWRlaW50IC04MDM2MDUyNzQ4ODE1OTAzMTc3NjI0NzE2NTgxNzMyIC0wNjY2NzczNTcuNDQzODgwOTU0ODg1MDk2NjE2NzU3MyAtPiAxMjA1MjE0NjQyMTAzODczNTE3MzI3MzIKK211bHgzMDE5IG11bHRpcGx5IC04MDM2MDUyNzQ4ODE1OTAzMTc3NjI0NzE2NTgxNzMyIC0wNjY2NzczNTcuNDQzODgwOTU0ODg1MDk2NjE2NzU3MyAtPiA1LjM1ODIyNzYxNTcwNjgwMDcxMTAzMzI2MjEyNDU5OEUrMzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxOSBwb3dlciAtODAzNjA1Mjc0ODgxNTkwMzE3NzYyNDcxNjU4MTczMiAtNjY2NzczNTcgLT4gLTBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDE5IHJlbWFpbmRlciAtODAzNjA1Mjc0ODgxNTkwMzE3NzYyNDcxNjU4MTczMiAtMDY2Njc3MzU3LjQ0Mzg4MDk1NDg4NTA5NjYxNjc1NzMgLT4gLTQxODE2NDk5LjUwNDg5OTMwMjgyODg5Nzg5MDA1NjQKK3N1YngzMDE5IHN1YnRyYWN0IC04MDM2MDUyNzQ4ODE1OTAzMTc3NjI0NzE2NTgxNzMyIC0wNjY2NzczNTcuNDQzODgwOTU0ODg1MDk2NjE2NzU3MyAtPiAtODAzNjA1Mjc0ODgxNTkwMzE3NzYyNDY0OTkwNDM3NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDIwIGFkZCA4ODM0MjkuNTkyODAzMTQ5ODEwMzYzNzcxMzU3MDE2NkUrNzY1IC00Mzk3OC45NzI4MzcxMjkzOTE5ODExMTA0MzAzMjcyNiAtPiA4LjgzNDI5NTkyODAzMTQ5ODEwMzYzNzcxMzU3MDE2NkUrNzcwIEluZXhhY3QgUm91bmRlZAorY29teDMwMjAgY29tcGFyZSA4ODM0MjkuNTkyODAzMTQ5ODEwMzYzNzcxMzU3MDE2NkUrNzY1IC00Mzk3OC45NzI4MzcxMjkzOTE5ODExMTA0MzAzMjcyNiAtPiAxCitkaXZ4MzAyMCBkaXZpZGUgODgzNDI5LjU5MjgwMzE0OTgxMDM2Mzc3MTM1NzAxNjZFKzc2NSAtNDM5NzguOTcyODM3MTI5MzkxOTgxMTEwNDMwMzI3MjYgLT4gLTIuMDA4NzU0NDkyOTEzNzM5NjMzMjA4NjcyNDU1MDI1RSs3NjYgSW5leGFjdCBSb3VuZGVkCitkdml4MzAyMCBkaXZpZGVpbnQgODgzNDI5LjU5MjgwMzE0OTgxMDM2Mzc3MTM1NzAxNjZFKzc2NSAtNDM5NzguOTcyODM3MTI5MzkxOTgxMTEwNDMwMzI3MjYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDIwIG11bHRpcGx5IDg4MzQyOS41OTI4MDMxNDk4MTAzNjM3NzEzNTcwMTY2RSs3NjUgLTQzOTc4Ljk3MjgzNzEyOTM5MTk4MTExMDQzMDMyNzI2IC0+IC0zLjg4NTIzMjYwNjU0MDYwMDQ5MDMyMTQzODE5MTUxNkUrNzc1IEluZXhhY3QgUm91bmRlZAorcG93eDMwMjAgcG93ZXIgODgzNDI5LjU5MjgwMzE0OTgxMDM2Mzc3MTM1NzAxNjZFKzc2NSAtNDM5NzkgLT4gMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwMjAgcmVtYWluZGVyIDg4MzQyOS41OTI4MDMxNDk4MTAzNjM3NzEzNTcwMTY2RSs3NjUgLTQzOTc4Ljk3MjgzNzEyOTM5MTk4MTExMDQzMDMyNzI2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzAyMCBzdWJ0cmFjdCA4ODM0MjkuNTkyODAzMTQ5ODEwMzYzNzcxMzU3MDE2NkUrNzY1IC00Mzk3OC45NzI4MzcxMjkzOTE5ODExMTA0MzAzMjcyNiAtPiA4LjgzNDI5NTkyODAzMTQ5ODEwMzYzNzcxMzU3MDE2NkUrNzcwIEluZXhhY3QgUm91bmRlZAorYWRkeDMwMjEgYWRkIDI0NzkxMzAxMDYwLjM3OTM4MzYwNTY3Nzc1NTA2OTczIC01NjEzMzI3ODY2NDgwLjMyMjY0OTA4MDIwNTg3NzU2NCAtPiAtNTU4ODUzNjU2NTQxOS45NDMyNjU0NzQ1MjgxMjI0OTQgSW5leGFjdCBSb3VuZGVkCitjb214MzAyMSBjb21wYXJlIDI0NzkxMzAxMDYwLjM3OTM4MzYwNTY3Nzc1NTA2OTczIC01NjEzMzI3ODY2NDgwLjMyMjY0OTA4MDIwNTg3NzU2NCAtPiAxCitkaXZ4MzAyMSBkaXZpZGUgMjQ3OTEzMDEwNjAuMzc5MzgzNjA1Njc3NzU1MDY5NzMgLTU2MTMzMjc4NjY0ODAuMzIyNjQ5MDgwMjA1ODc3NTY0IC0+IC0wLjAwNDQxNjUwNjg2NTQ1ODQxNTI3NTE4MjEyMDAzODM5OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDIxIGRpdmlkZWludCAyNDc5MTMwMTA2MC4zNzkzODM2MDU2Nzc3NTUwNjk3MyAtNTYxMzMyNzg2NjQ4MC4zMjI2NDkwODAyMDU4Nzc1NjQgLT4gLTAKK211bHgzMDIxIG11bHRpcGx5IDI0NzkxMzAxMDYwLjM3OTM4MzYwNTY3Nzc1NTA2OTczIC01NjEzMzI3ODY2NDgwLjMyMjY0OTA4MDIwNTg3NzU2NCAtPiAtMTM5MTYxNzAxMDg4NTMwNzY1OTI1MTIwLjg0MDg4NTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyMSBwb3dlciAyNDc5MTMwMTA2MC4zNzkzODM2MDU2Nzc3NTUwNjk3MyAtNiAtPiA0LjMwNzI4OTcxMjM3NTY3MzAyODk5NjEyNjI0OTY1NkUtNjMgSW5leGFjdCBSb3VuZGVkCityZW14MzAyMSByZW1haW5kZXIgMjQ3OTEzMDEwNjAuMzc5MzgzNjA1Njc3NzU1MDY5NzMgLTU2MTMzMjc4NjY0ODAuMzIyNjQ5MDgwMjA1ODc3NTY0IC0+IDI0NzkxMzAxMDYwLjM3OTM4MzYwNTY3Nzc1NTA2OTczCitzdWJ4MzAyMSBzdWJ0cmFjdCAyNDc5MTMwMTA2MC4zNzkzODM2MDU2Nzc3NTUwNjk3MyAtNTYxMzMyNzg2NjQ4MC4zMjI2NDkwODAyMDU4Nzc1NjQgLT4gNTYzODExOTE2NzU0MC43MDIwMzI2ODU4ODM2MzI2MzQgSW5leGFjdCBSb3VuZGVkCithZGR4MzAyMiBhZGQgLTkzMDcxMTQ0My45NDc0NzgxNTg2MTYyOTEwNzc2MTM5IC03NDAuMzg2MDk3OTI5Mjc3NTQ3MjYyMjc5ODM0ODAzMCAtPiAtOTMwNzEyMTg0LjMzMzU3NjA4Nzg5MzgzODMzOTg5MzcgSW5leGFjdCBSb3VuZGVkCitjb214MzAyMiBjb21wYXJlIC05MzA3MTE0NDMuOTQ3NDc4MTU4NjE2MjkxMDc3NjEzOSAtNzQwLjM4NjA5NzkyOTI3NzU0NzI2MjI3OTgzNDgwMzAgLT4gLTEKK2RpdngzMDIyIGRpdmlkZSAtOTMwNzExNDQzLjk0NzQ3ODE1ODYxNjI5MTA3NzYxMzkgLTc0MC4zODYwOTc5MjkyNzc1NDcyNjIyNzk4MzQ4MDMwIC0+IDEyNTcwNjIuMjkwMjcwNTgzNTA3MTMxNjAyOTU4Nzk5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMjIgZGl2aWRlaW50IC05MzA3MTE0NDMuOTQ3NDc4MTU4NjE2MjkxMDc3NjEzOSAtNzQwLjM4NjA5NzkyOTI3NzU0NzI2MjI3OTgzNDgwMzAgLT4gMTI1NzA2MgorbXVseDMwMjIgbXVsdGlwbHkgLTkzMDcxMTQ0My45NDc0NzgxNTg2MTYyOTEwNzc2MTM5IC03NDAuMzg2MDk3OTI5Mjc3NTQ3MjYyMjc5ODM0ODAzMCAtPiA2ODkwODU4MTQyODIuMzk2ODc0NjkxMTEwMDE1NDEzMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDIyIHBvd2VyIC05MzA3MTE0NDMuOTQ3NDc4MTU4NjE2MjkxMDc3NjEzOSAtNzQwIC0+IDEuMTkzNjAzMzk0MTY1MDUxODk5OTk3MjI2OTk1MTc4RS02NjM3IEluZXhhY3QgUm91bmRlZAorcmVteDMwMjIgcmVtYWluZGVyIC05MzA3MTE0NDMuOTQ3NDc4MTU4NjE2MjkxMDc3NjEzOSAtNzQwLjM4NjA5NzkyOTI3NzU0NzI2MjI3OTgzNDgwMzAgLT4gLTIxNC45MTIzMDQ2NjY0OTk2NzUwNjM5MTY3NzEyMTQwCitzdWJ4MzAyMiBzdWJ0cmFjdCAtOTMwNzExNDQzLjk0NzQ3ODE1ODYxNjI5MTA3NzYxMzkgLTc0MC4zODYwOTc5MjkyNzc1NDcyNjIyNzk4MzQ4MDMwIC0+IC05MzA3MTA3MDMuNTYxMzgwMjI5MzM4NzQzODE1MzM0MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDIzIGFkZCAyMzU4Mjc2NDI4NzY1LjA2NDE5MTA4Mjc3MzM4NTUzOSAyMTQuMzU4OTc5NjA4MjMyODY2NTg3ODYwMjMwNDQ2OSAtPiAyMzU4Mjc2NDI4OTc5LjQyMzE3MDY5MTAwNjI1MjEyNyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDIzIGNvbXBhcmUgMjM1ODI3NjQyODc2NS4wNjQxOTEwODI3NzMzODU1MzkgMjE0LjM1ODk3OTYwODIzMjg2NjU4Nzg2MDIzMDQ0NjkgLT4gMQorZGl2eDMwMjMgZGl2aWRlIDIzNTgyNzY0Mjg3NjUuMDY0MTkxMDgyNzczMzg1NTM5IDIxNC4zNTg5Nzk2MDgyMzI4NjY1ODc4NjAyMzA0NDY5IC0+IDExMDAxNTI4NTI1LjA3MDg5NTAyMTUyNzM2NDg5NDczIEluZXhhY3QgUm91bmRlZAorZHZpeDMwMjMgZGl2aWRlaW50IDIzNTgyNzY0Mjg3NjUuMDY0MTkxMDgyNzczMzg1NTM5IDIxNC4zNTg5Nzk2MDgyMzI4NjY1ODc4NjAyMzA0NDY5IC0+IDExMDAxNTI4NTI1CittdWx4MzAyMyBtdWx0aXBseSAyMzU4Mjc2NDI4NzY1LjA2NDE5MTA4Mjc3MzM4NTUzOSAyMTQuMzU4OTc5NjA4MjMyODY2NTg3ODYwMjMwNDQ2OSAtPiA1MDU1MTc3Mjg5MDQyMjYuNjIzMzQ0MzIwOTY1OTAwMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDIzIHBvd2VyIDIzNTgyNzY0Mjg3NjUuMDY0MTkxMDgyNzczMzg1NTM5IDIxNCAtPiA1LjQzNTg1NjQ4MDc4Mjg1MDA4MDc0MTI3NjkzOTI1NkUrMjY0NyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDIzIHJlbWFpbmRlciAyMzU4Mjc2NDI4NzY1LjA2NDE5MTA4Mjc3MzM4NTUzOSAyMTQuMzU4OTc5NjA4MjMyODY2NTg3ODYwMjMwNDQ2OSAtPiAxNS4xOTY5ODQ0NzM5MDk2NDE1NjQzNTYxNTIxNzc1CitzdWJ4MzAyMyBzdWJ0cmFjdCAyMzU4Mjc2NDI4NzY1LjA2NDE5MTA4Mjc3MzM4NTUzOSAyMTQuMzU4OTc5NjA4MjMyODY2NTg3ODYwMjMwNDQ2OSAtPiAyMzU4Mjc2NDI4NTUwLjcwNTIxMTQ3NDU0MDUxODk1MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDI0IGFkZCAtMy44Njg3NDQ0NDk3OTU2NTM2NTE2MzgzMDg5MjY5ODdFKzc1MCA4MjcwLjQ3MjQ5Mjk2NTU1OTg3MjM4NDAxODMyOTQxOCAtPiAtMy44Njg3NDQ0NDk3OTU2NTM2NTE2MzgzMDg5MjY5ODdFKzc1MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDI0IGNvbXBhcmUgLTMuODY4NzQ0NDQ5Nzk1NjUzNjUxNjM4MzA4OTI2OTg3RSs3NTAgODI3MC40NzI0OTI5NjU1NTk4NzIzODQwMTgzMjk0MTggLT4gLTEKK2RpdngzMDI0IGRpdmlkZSAtMy44Njg3NDQ0NDk3OTU2NTM2NTE2MzgzMDg5MjY5ODdFKzc1MCA4MjcwLjQ3MjQ5Mjk2NTU1OTg3MjM4NDAxODMyOTQxOCAtPiAtNC42Nzc3NzkyMzU4MTI5NTkyMzMwOTI3Mzk0MzM0NTNFKzc0NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDI0IGRpdmlkZWludCAtMy44Njg3NDQ0NDk3OTU2NTM2NTE2MzgzMDg5MjY5ODdFKzc1MCA4MjcwLjQ3MjQ5Mjk2NTU1OTg3MjM4NDAxODMyOTQxOCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwMjQgbXVsdGlwbHkgLTMuODY4NzQ0NDQ5Nzk1NjUzNjUxNjM4MzA4OTI2OTg3RSs3NTAgODI3MC40NzI0OTI5NjU1NTk4NzIzODQwMTgzMjk0MTggLT4gLTMuMTk5NjM0NDU1NDM0ODEzMjk0NDI2NTA1NTI2MDYzRSs3NTQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyNCBwb3dlciAtMy44Njg3NDQ0NDk3OTU2NTM2NTE2MzgzMDg5MjY5ODdFKzc1MCA4MjcwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMwMjQgcmVtYWluZGVyIC0zLjg2ODc0NDQ0OTc5NTY1MzY1MTYzODMwODkyNjk4N0UrNzUwIDgyNzAuNDcyNDkyOTY1NTU5ODcyMzg0MDE4MzI5NDE4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzAyNCBzdWJ0cmFjdCAtMy44Njg3NDQ0NDk3OTU2NTM2NTE2MzgzMDg5MjY5ODdFKzc1MCA4MjcwLjQ3MjQ5Mjk2NTU1OTg3MjM4NDAxODMyOTQxOCAtPiAtMy44Njg3NDQ0NDk3OTU2NTM2NTE2MzgzMDg5MjY5ODdFKzc1MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDI1IGFkZCAxNDA0MjIwNjkuNTg2MzI0NjQ5MDE4MDIwNjgxNDM3NEUtNDQ3IC01NjcxOTU2NTI1ODYuMjQ1NDIxNzA2OTAwMzE4NjQ4NyAtPiAtNTY3MTk1NjUyNTg2LjI0NTQyMTcwNjkwMDMxODY0ODcgSW5leGFjdCBSb3VuZGVkCitjb214MzAyNSBjb21wYXJlIDE0MDQyMjA2OS41ODYzMjQ2NDkwMTgwMjA2ODE0Mzc0RS00NDcgLTU2NzE5NTY1MjU4Ni4yNDU0MjE3MDY5MDAzMTg2NDg3IC0+IDEKK2RpdngzMDI1IGRpdmlkZSAxNDA0MjIwNjkuNTg2MzI0NjQ5MDE4MDIwNjgxNDM3NEUtNDQ3IC01NjcxOTU2NTI1ODYuMjQ1NDIxNzA2OTAwMzE4NjQ4NyAtPiAtMi40NzU3MjU0MjExMzE4NjY4NTExOTA2NDAyMDM2MzNFLTQ1MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDI1IGRpdmlkZWludCAxNDA0MjIwNjkuNTg2MzI0NjQ5MDE4MDIwNjgxNDM3NEUtNDQ3IC01NjcxOTU2NTI1ODYuMjQ1NDIxNzA2OTAwMzE4NjQ4NyAtPiAtMAorbXVseDMwMjUgbXVsdGlwbHkgMTQwNDIyMDY5LjU4NjMyNDY0OTAxODAyMDY4MTQzNzRFLTQ0NyAtNTY3MTk1NjUyNTg2LjI0NTQyMTcwNjkwMDMxODY0ODcgLT4gLTcuOTY0Njc4NzM5NjUyNjU3NDk4NTAzNzk5NTU5OTUwRS00MjggSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyNSBwb3dlciAxNDA0MjIwNjkuNTg2MzI0NjQ5MDE4MDIwNjgxNDM3NEUtNDQ3IC02IC0+IDEuMzA0MzMwODk5NzMxOTg4Mzk1NDczNTc4NDI1ODU0RSsyNjMzIEluZXhhY3QgUm91bmRlZAorcmVteDMwMjUgcmVtYWluZGVyIDE0MDQyMjA2OS41ODYzMjQ2NDkwMTgwMjA2ODE0Mzc0RS00NDcgLTU2NzE5NTY1MjU4Ni4yNDU0MjE3MDY5MDAzMTg2NDg3IC0+IDEuNDA0MjIwNjk1ODYzMjQ2NDkwMTgwMjA2ODE0Mzc0RS00MzkKK3N1YngzMDI1IHN1YnRyYWN0IDE0MDQyMjA2OS41ODYzMjQ2NDkwMTgwMjA2ODE0Mzc0RS00NDcgLTU2NzE5NTY1MjU4Ni4yNDU0MjE3MDY5MDAzMTg2NDg3IC0+IDU2NzE5NTY1MjU4Ni4yNDU0MjE3MDY5MDAzMTg2NDg3IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMjYgYWRkIDc1OTI5MDk2NDc1LjYzNDUwNDI1MzM5NDcyNTU5NjQ2RSsxNTMgLTA5NDUyNjAxOTMuNTAzODAzNTE5NTcyNjA0MTUxMjkwRSs0NTkgLT4gLTkuNDUyNjAxOTM1MDM4MDM1MTk1NzI2MDQxNTEyOTAwRSs0NjcgSW5leGFjdCBSb3VuZGVkCitjb214MzAyNiBjb21wYXJlIDc1OTI5MDk2NDc1LjYzNDUwNDI1MzM5NDcyNTU5NjQ2RSsxNTMgLTA5NDUyNjAxOTMuNTAzODAzNTE5NTcyNjA0MTUxMjkwRSs0NTkgLT4gMQorZGl2eDMwMjYgZGl2aWRlIDc1OTI5MDk2NDc1LjYzNDUwNDI1MzM5NDcyNTU5NjQ2RSsxNTMgLTA5NDUyNjAxOTMuNTAzODAzNTE5NTcyNjA0MTUxMjkwRSs0NTkgLT4gLTguMDMyNjEzMzQ3ODg1NDY1ODA1NjEzMjY1NjA0OTczRS0zMDUgSW5leGFjdCBSb3VuZGVkCitkdml4MzAyNiBkaXZpZGVpbnQgNzU5MjkwOTY0NzUuNjM0NTA0MjUzMzk0NzI1NTk2NDZFKzE1MyAtMDk0NTI2MDE5My41MDM4MDM1MTk1NzI2MDQxNTEyOTBFKzQ1OSAtPiAtMAorbXVseDMwMjYgbXVsdGlwbHkgNzU5MjkwOTY0NzUuNjM0NTA0MjUzMzk0NzI1NTk2NDZFKzE1MyAtMDk0NTI2MDE5My41MDM4MDM1MTk1NzI2MDQxNTEyOTBFKzQ1OSAtPiAtNy4xNzcyNzUyNDI3MTI3MjM3MzMwNDE1Njk2MDY4ODJFKzYzMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDI2IHBvd2VyIDc1OTI5MDk2NDc1LjYzNDUwNDI1MzM5NDcyNTU5NjQ2RSsxNTMgLTkgLT4gMS4xOTIxMzYyOTk2NTcxNzczMjQwNTE0NzczNzU1NjFFLTE0NzUgSW5leGFjdCBSb3VuZGVkCityZW14MzAyNiByZW1haW5kZXIgNzU5MjkwOTY0NzUuNjM0NTA0MjUzMzk0NzI1NTk2NDZFKzE1MyAtMDk0NTI2MDE5My41MDM4MDM1MTk1NzI2MDQxNTEyOTBFKzQ1OSAtPiA3LjU5MjkwOTY0NzU2MzQ1MDQyNTMzOTQ3MjU1OTY0NkUrMTYzCitzdWJ4MzAyNiBzdWJ0cmFjdCA3NTkyOTA5NjQ3NS42MzQ1MDQyNTMzOTQ3MjU1OTY0NkUrMTUzIC0wOTQ1MjYwMTkzLjUwMzgwMzUxOTU3MjYwNDE1MTI5MEUrNDU5IC0+IDkuNDUyNjAxOTM1MDM4MDM1MTk1NzI2MDQxNTEyOTAwRSs0NjcgSW5leGFjdCBSb3VuZGVkCithZGR4MzAyNyBhZGQgNjMxMjMxODMwOS4xNDIwNDQ5NTMzNTc0NjA0NjM3MzIgLTU2NDEzMTc4MjMuMjAyMjc0MDgzOTgyNDg3NTU4NTE0RSs2MjggLT4gLTUuNjQxMzE3ODIzMjAyMjc0MDgzOTgyNDg3NTU4NTE0RSs2MzcgSW5leGFjdCBSb3VuZGVkCitjb214MzAyNyBjb21wYXJlIDYzMTIzMTgzMDkuMTQyMDQ0OTUzMzU3NDYwNDYzNzMyIC01NjQxMzE3ODIzLjIwMjI3NDA4Mzk4MjQ4NzU1ODUxNEUrNjI4IC0+IDEKK2RpdngzMDI3IGRpdmlkZSA2MzEyMzE4MzA5LjE0MjA0NDk1MzM1NzQ2MDQ2MzczMiAtNTY0MTMxNzgyMy4yMDIyNzQwODM5ODI0ODc1NTg1MTRFKzYyOCAtPiAtMS4xMTg5NDM5MjUzMzI0ODE5NDQ3NjU4MDk2ODI1MDJFLTYyOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDI3IGRpdmlkZWludCA2MzEyMzE4MzA5LjE0MjA0NDk1MzM1NzQ2MDQ2MzczMiAtNTY0MTMxNzgyMy4yMDIyNzQwODM5ODI0ODc1NTg1MTRFKzYyOCAtPiAtMAorbXVseDMwMjcgbXVsdGlwbHkgNjMxMjMxODMwOS4xNDIwNDQ5NTMzNTc0NjA0NjM3MzIgLTU2NDEzMTc4MjMuMjAyMjc0MDgzOTgyNDg3NTU4NTE0RSs2MjggLT4gLTMuNTYwOTc5Mzc4MzA4OTA2MDQzNzgzMDIzNzI2Nzg3RSs2NDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyNyBwb3dlciA2MzEyMzE4MzA5LjE0MjA0NDk1MzM1NzQ2MDQ2MzczMiAtNiAtPiAxLjU4MDc2MjYxMTUxMjc4NzcyMDA3NjUzMzc0NzI2NUUtNTkgSW5leGFjdCBSb3VuZGVkCityZW14MzAyNyByZW1haW5kZXIgNjMxMjMxODMwOS4xNDIwNDQ5NTMzNTc0NjA0NjM3MzIgLTU2NDEzMTc4MjMuMjAyMjc0MDgzOTgyNDg3NTU4NTE0RSs2MjggLT4gNjMxMjMxODMwOS4xNDIwNDQ5NTMzNTc0NjA0NjM3MzIKK3N1YngzMDI3IHN1YnRyYWN0IDYzMTIzMTgzMDkuMTQyMDQ0OTUzMzU3NDYwNDYzNzMyIC01NjQxMzE3ODIzLjIwMjI3NDA4Mzk4MjQ4NzU1ODUxNEUrNjI4IC0+IDUuNjQxMzE3ODIzMjAyMjc0MDgzOTgyNDg3NTU4NTE0RSs2MzcgSW5leGFjdCBSb3VuZGVkCithZGR4MzAyOCBhZGQgOTM3OTM2NTI0MjgxMDAuNTIxMDU5MjgyMzk0Njk5MzcgOTE3LjI1NzEzMTMxMDk3MzA0MzMzNjk1OTQ5MzY0MTZFLTcxMiAtPiA5Mzc5MzY1MjQyODEwMC41MjEwNTkyODIzOTQ2OTkzNyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDI4IGNvbXBhcmUgOTM3OTM2NTI0MjgxMDAuNTIxMDU5MjgyMzk0Njk5MzcgOTE3LjI1NzEzMTMxMDk3MzA0MzMzNjk1OTQ5MzY0MTZFLTcxMiAtPiAxCitkaXZ4MzAyOCBkaXZpZGUgOTM3OTM2NTI0MjgxMDAuNTIxMDU5MjgyMzk0Njk5MzcgOTE3LjI1NzEzMTMxMDk3MzA0MzMzNjk1OTQ5MzY0MTZFLTcxMiAtPiAxLjAyMjU0NDgxNTY5NDY3NDk3MjU1OTkyNDk5NzI1NkUrNzIzIEluZXhhY3QgUm91bmRlZAorZHZpeDMwMjggZGl2aWRlaW50IDkzNzkzNjUyNDI4MTAwLjUyMTA1OTI4MjM5NDY5OTM3IDkxNy4yNTcxMzEzMTA5NzMwNDMzMzY5NTk0OTM2NDE2RS03MTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDI4IG11bHRpcGx5IDkzNzkzNjUyNDI4MTAwLjUyMTA1OTI4MjM5NDY5OTM3IDkxNy4yNTcxMzEzMTA5NzMwNDMzMzY5NTk0OTM2NDE2RS03MTIgLT4gOC42MDMyODk2NTYxMzc3OTY1MjY3Njk3ODY5NjUzNDFFLTY5NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDI4IHBvd2VyIDkzNzkzNjUyNDI4MTAwLjUyMTA1OTI4MjM5NDY5OTM3IDkgLT4gNS42MTc3MzIyMDY2NjMxMzY2NTQxODcyNjM5NjQzNjVFKzEyNSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDI4IHJlbWFpbmRlciA5Mzc5MzY1MjQyODEwMC41MjEwNTkyODIzOTQ2OTkzNyA5MTcuMjU3MTMxMzEwOTczMDQzMzM2OTU5NDkzNjQxNkUtNzEyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzAyOCBzdWJ0cmFjdCA5Mzc5MzY1MjQyODEwMC41MjEwNTkyODIzOTQ2OTkzNyA5MTcuMjU3MTMxMzEwOTczMDQzMzM2OTU5NDkzNjQxNkUtNzEyIC0+IDkzNzkzNjUyNDI4MTAwLjUyMTA1OTI4MjM5NDY5OTM3IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMjkgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDI5IGNvbXBhcmUgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDEKK2RpdngzMDI5IGRpdmlkZSA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gLTQxMDM5NjguMTA2MzM2NzEwMTI2MjQxMjY2Njg1NDM0IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMjkgZGl2aWRlaW50IDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiAtNDEwMzk2OAorbXVseDMwMjkgbXVsdGlwbHkgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IC0yMzYyNzMyMDIzMjM1MTEyLjM3NTk2MDUyODMwNDk3NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDI5IHBvd2VyIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NCAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzAyOSByZW1haW5kZXIgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDI1NTEuNDU4MjQzMTYxMjU1ODg0OTMyNDkyNDY3ODQKK3N1YngzMDI5IHN1YnRyYWN0IDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTIyMjE1NC43MDgzNzgxMTUxODQwOTQzNTAwNSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDMwIGFkZCAzMjkzMjY1NTIuMDIwODM5ODAwMjI1MDgzNjU5MjA0MyAtMDI0NTEuMTAwNjUzOTcwMTA1OTE1NDYwNDEwMzQwNDEgLT4gMzI5MzI0MTAwLjkyMDE4NTgzMDExOTE2ODE5ODc5NDAgSW5leGFjdCBSb3VuZGVkCitjb214MzAzMCBjb21wYXJlIDMyOTMyNjU1Mi4wMjA4Mzk4MDAyMjUwODM2NTkyMDQzIC0wMjQ1MS4xMDA2NTM5NzAxMDU5MTU0NjA0MTAzNDA0MSAtPiAxCitkaXZ4MzAzMCBkaXZpZGUgMzI5MzI2NTUyLjAyMDgzOTgwMDIyNTA4MzY1OTIwNDMgLTAyNDUxLjEwMDY1Mzk3MDEwNTkxNTQ2MDQxMDM0MDQxIC0+IC0xMzQzNTguNjQwNjczMjkxNzE3MzczOTE4NzQyMTk3OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDMwIGRpdmlkZWludCAzMjkzMjY1NTIuMDIwODM5ODAwMjI1MDgzNjU5MjA0MyAtMDI0NTEuMTAwNjUzOTcwMTA1OTE1NDYwNDEwMzQwNDEgLT4gLTEzNDM1OAorbXVseDMwMzAgbXVsdGlwbHkgMzI5MzI2NTUyLjAyMDgzOTgwMDIyNTA4MzY1OTIwNDMgLTAyNDUxLjEwMDY1Mzk3MDEwNTkxNTQ2MDQxMDM0MDQxIC0+IC04MDcyMTI1MjcwMjguMDAwNTQwMTczNjg5MzQ3NDQzMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDMwIHBvd2VyIDMyOTMyNjU1Mi4wMjA4Mzk4MDAyMjUwODM2NTkyMDQzIC0yNDUxIC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDMwIHJlbWFpbmRlciAzMjkzMjY1NTIuMDIwODM5ODAwMjI1MDgzNjU5MjA0MyAtMDI0NTEuMTAwNjUzOTcwMTA1OTE1NDYwNDEwMzQwNDEgLT4gMTU3MC4zNTQ3MjQzMDk2MzU2NTM4NDY2ODc0OTMyMgorc3VieDMwMzAgc3VidHJhY3QgMzI5MzI2NTUyLjAyMDgzOTgwMDIyNTA4MzY1OTIwNDMgLTAyNDUxLjEwMDY1Mzk3MDEwNTkxNTQ2MDQxMDM0MDQxIC0+IDMyOTMyOTAwMy4xMjE0OTM3NzAzMzA5OTkxMTk2MTQ2IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMzEgYWRkIC05Mjk4MC42ODQzMTM3MTA5MDM1NDQzNTc2MzIxODQzOSAtMjI4MjE3ODUwNzA0NjAxOTcyMTkyNTgwMDk5NzA2NSAtPiAtMjI4MjE3ODUwNzA0NjAxOTcyMTkyNTgwMTA5MDA0NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDMxIGNvbXBhcmUgLTkyOTgwLjY4NDMxMzcxMDkwMzU0NDM1NzYzMjE4NDM5IC0yMjgyMTc4NTA3MDQ2MDE5NzIxOTI1ODAwOTk3MDY1IC0+IDEKK2RpdngzMDMxIGRpdmlkZSAtOTI5ODAuNjg0MzEzNzEwOTAzNTQ0MzU3NjMyMTg0MzkgLTIyODIxNzg1MDcwNDYwMTk3MjE5MjU4MDA5OTcwNjUgLT4gNC4wNzQyMDczNDI5NjgxOTY4NjMwNzA0OTY5OTQ0NTdFLTI2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMzEgZGl2aWRlaW50IC05Mjk4MC42ODQzMTM3MTA5MDM1NDQzNTc2MzIxODQzOSAtMjI4MjE3ODUwNzA0NjAxOTcyMTkyNTgwMDk5NzA2NSAtPiAwCittdWx4MzAzMSBtdWx0aXBseSAtOTI5ODAuNjg0MzEzNzEwOTAzNTQ0MzU3NjMyMTg0MzkgLTIyODIxNzg1MDcwNDYwMTk3MjE5MjU4MDA5OTcwNjUgLT4gMi4xMjE5ODUxOTMxMTE4MjAxNDcxNzA3MDc3MTc5MzhFKzM1IEluZXhhY3QgUm91bmRlZAorcG93eDMwMzEgcG93ZXIgLTkyOTgwLjY4NDMxMzcxMDkwMzU0NDM1NzYzMjE4NDM5IC0yIC0+IDEuMTU2NjgzNDU1MzcxOTA5NzkzODcwMjA3MTg0MzM3RS0xMCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDMxIHJlbWFpbmRlciAtOTI5ODAuNjg0MzEzNzEwOTAzNTQ0MzU3NjMyMTg0MzkgLTIyODIxNzg1MDcwNDYwMTk3MjE5MjU4MDA5OTcwNjUgLT4gLTkyOTgwLjY4NDMxMzcxMDkwMzU0NDM1NzYzMjE4NDM5CitzdWJ4MzAzMSBzdWJ0cmFjdCAtOTI5ODAuNjg0MzEzNzEwOTAzNTQ0MzU3NjMyMTg0MzkgLTIyODIxNzg1MDcwNDYwMTk3MjE5MjU4MDA5OTcwNjUgLT4gMjI4MjE3ODUwNzA0NjAxOTcyMTkyNTgwMDkwNDA4NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDMyIGFkZCAxMjEzNTgxNzc2Mi4yNzg1ODYwNjI1OTgyMjI1Njk4N0UrNzM4IDk4LjM1NjQ5MTY3ODcyMzU2MTMyMjQ5NTYxMDIxOTEwRS05MDIgLT4gMS4yMTM1ODE3NzYyMjc4NTg2MDYyNTk4MjIyNTY5ODdFKzc0OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDMyIGNvbXBhcmUgMTIxMzU4MTc3NjIuMjc4NTg2MDYyNTk4MjIyNTY5ODdFKzczOCA5OC4zNTY0OTE2Nzg3MjM1NjEzMjI0OTU2MTAyMTkxMEUtOTAyIC0+IDEKK2RpdngzMDMyIGRpdmlkZSAxMjEzNTgxNzc2Mi4yNzg1ODYwNjI1OTgyMjI1Njk4N0UrNzM4IDk4LjM1NjQ5MTY3ODcyMzU2MTMyMjQ5NTYxMDIxOTEwRS05MDIgLT4gMS4yMzM4NjAzNzQxNDk5NDU1NjE4ODY5NTUzOTg3MjRFKzE2NDggSW5leGFjdCBSb3VuZGVkCitkdml4MzAzMiBkaXZpZGVpbnQgMTIxMzU4MTc3NjIuMjc4NTg2MDYyNTk4MjIyNTY5ODdFKzczOCA5OC4zNTY0OTE2Nzg3MjM1NjEzMjI0OTU2MTAyMTkxMEUtOTAyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzAzMiBtdWx0aXBseSAxMjEzNTgxNzc2Mi4yNzg1ODYwNjI1OTgyMjI1Njk4N0UrNzM4IDk4LjM1NjQ5MTY3ODcyMzU2MTMyMjQ5NTYxMDIxOTEwRS05MDIgLT4gMS4xOTM2MzY0NTg3NTAwNTkzNDA3MzMxODg4NzYwMTVFLTE1MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDMyIHBvd2VyIDEyMTM1ODE3NzYyLjI3ODU4NjA2MjU5ODIyMjU2OTg3RSs3MzggMTAgLT4gNi45MjkzMTc1MjA1Nzc0Mzc3MjA0NTc1MTc0OTk5MzZFKzc0ODAgSW5leGFjdCBSb3VuZGVkCityZW14MzAzMiByZW1haW5kZXIgMTIxMzU4MTc3NjIuMjc4NTg2MDYyNTk4MjIyNTY5ODdFKzczOCA5OC4zNTY0OTE2Nzg3MjM1NjEzMjI0OTU2MTAyMTkxMEUtOTAyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzAzMiBzdWJ0cmFjdCAxMjEzNTgxNzc2Mi4yNzg1ODYwNjI1OTgyMjI1Njk4N0UrNzM4IDk4LjM1NjQ5MTY3ODcyMzU2MTMyMjQ5NTYxMDIxOTEwRS05MDIgLT4gMS4yMTM1ODE3NzYyMjc4NTg2MDYyNTk4MjIyNTY5ODdFKzc0OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDMzIGFkZCAzNy4yNzQ1NzU3ODc5MzUyMTE2NjgwOTczOTE0MDA4MSAtMzkyNTUwLjQ3OTAwOTUwMzU5Nzk5OTgzNTU1Njk5MTYgLT4gLTM5MjUxMy4yMDQ0MzM3MTU2NjI3ODgxNjc0NTk2MDAyIEluZXhhY3QgUm91bmRlZAorY29teDMwMzMgY29tcGFyZSAzNy4yNzQ1NzU3ODc5MzUyMTE2NjgwOTczOTE0MDA4MSAtMzkyNTUwLjQ3OTAwOTUwMzU5Nzk5OTgzNTU1Njk5MTYgLT4gMQorZGl2eDMwMzMgZGl2aWRlIDM3LjI3NDU3NTc4NzkzNTIxMTY2ODA5NzM5MTQwMDgxIC0zOTI1NTAuNDc5MDA5NTAzNTk3OTk5ODM1NTU2OTkxNiAtPiAtMC4wMDAwOTQ5NTQ4NjAwMjcxNDI2NDY0MTE3NzIxMTA2MjE5OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDMzIGRpdmlkZWludCAzNy4yNzQ1NzU3ODc5MzUyMTE2NjgwOTczOTE0MDA4MSAtMzkyNTUwLjQ3OTAwOTUwMzU5Nzk5OTgzNTU1Njk5MTYgLT4gLTAKK211bHgzMDMzIG11bHRpcGx5IDM3LjI3NDU3NTc4NzkzNTIxMTY2ODA5NzM5MTQwMDgxIC0zOTI1NTAuNDc5MDA5NTAzNTk3OTk5ODM1NTU2OTkxNiAtPiAtMTQ2MzIxNTIuNTgwNDMwMDEyMzQ1MTgwOTU5OTcxNDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzMyBwb3dlciAzNy4yNzQ1NzU3ODc5MzUyMTE2NjgwOTczOTE0MDA4MSAtMzkyNTUwIC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDMzIHJlbWFpbmRlciAzNy4yNzQ1NzU3ODc5MzUyMTE2NjgwOTczOTE0MDA4MSAtMzkyNTUwLjQ3OTAwOTUwMzU5Nzk5OTgzNTU1Njk5MTYgLT4gMzcuMjc0NTc1Nzg3OTM1MjExNjY4MDk3MzkxNDAwODEKK3N1YngzMDMzIHN1YnRyYWN0IDM3LjI3NDU3NTc4NzkzNTIxMTY2ODA5NzM5MTQwMDgxIC0zOTI1NTAuNDc5MDA5NTAzNTk3OTk5ODM1NTU2OTkxNiAtPiAzOTI1ODcuNzUzNTg1MjkxNTMzMjExNTAzNjU0MzgzMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDM0IGFkZCAtMjc4Ny45ODA1OTAzMDQxOTk4Nzg3NTUyNjUyNzM3MDMgNzExNzYzMTE3OTMwNTMxOTIwODIxMDM4NzU2NTMyNCAtPiA3MTE3NjMxMTc5MzA1MzE5MjA4MjEwMzg3NTYyNTM2IEluZXhhY3QgUm91bmRlZAorY29teDMwMzQgY29tcGFyZSAtMjc4Ny45ODA1OTAzMDQxOTk4Nzg3NTUyNjUyNzM3MDMgNzExNzYzMTE3OTMwNTMxOTIwODIxMDM4NzU2NTMyNCAtPiAtMQorZGl2eDMwMzQgZGl2aWRlIC0yNzg3Ljk4MDU5MDMwNDE5OTg3ODc1NTI2NTI3MzcwMyA3MTE3NjMxMTc5MzA1MzE5MjA4MjEwMzg3NTY1MzI0IC0+IC0zLjkxNzAwNjI2MjQzNTA2MzA5MzQ3NTE0MDI1MDg3MEUtMjggSW5leGFjdCBSb3VuZGVkCitkdml4MzAzNCBkaXZpZGVpbnQgLTI3ODcuOTgwNTkwMzA0MTk5ODc4NzU1MjY1MjczNzAzIDcxMTc2MzExNzkzMDUzMTkyMDgyMTAzODc1NjUzMjQgLT4gLTAKK211bHgzMDM0IG11bHRpcGx5IC0yNzg3Ljk4MDU5MDMwNDE5OTg3ODc1NTI2NTI3MzcwMyA3MTE3NjMxMTc5MzA1MzE5MjA4MjEwMzg3NTY1MzI0IC0+IC0xLjk4NDM4MTc1NzY4NDcyMjIxNzgwMTQxMDMwNTcxNEUrMzQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzNCBwb3dlciAtMjc4Ny45ODA1OTAzMDQxOTk4Nzg3NTUyNjUyNzM3MDMgNyAtPiAtMTMwOTI2Njk5OTIzMzA5OTIyMDEyNzEzOS40NDAwODIgSW5leGFjdCBSb3VuZGVkCityZW14MzAzNCByZW1haW5kZXIgLTI3ODcuOTgwNTkwMzA0MTk5ODc4NzU1MjY1MjczNzAzIDcxMTc2MzExNzkzMDUzMTkyMDgyMTAzODc1NjUzMjQgLT4gLTI3ODcuOTgwNTkwMzA0MTk5ODc4NzU1MjY1MjczNzAzCitzdWJ4MzAzNCBzdWJ0cmFjdCAtMjc4Ny45ODA1OTAzMDQxOTk4Nzg3NTUyNjUyNzM3MDMgNzExNzYzMTE3OTMwNTMxOTIwODIxMDM4NzU2NTMyNCAtPiAtNzExNzYzMTE3OTMwNTMxOTIwODIxMDM4NzU2ODExMiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDM1IGFkZCAtOTg5MDYzMy44NTQ2MDk0MzQ5NDM1NTk4MzE5MTEyNzZFKzk3MSAtMTkzOTk4NTcyOS40MzY4Mjc3NzcwNTU2OTkzNjEyMzcgLT4gLTkuODkwNjMzODU0NjA5NDM0OTQzNTU5ODMxOTExMjc2RSs5NzcgSW5leGFjdCBSb3VuZGVkCitjb214MzAzNSBjb21wYXJlIC05ODkwNjMzLjg1NDYwOTQzNDk0MzU1OTgzMTkxMTI3NkUrOTcxIC0xOTM5OTg1NzI5LjQzNjgyNzc3NzA1NTY5OTM2MTIzNyAtPiAtMQorZGl2eDMwMzUgZGl2aWRlIC05ODkwNjMzLjg1NDYwOTQzNDk0MzU1OTgzMTkxMTI3NkUrOTcxIC0xOTM5OTg1NzI5LjQzNjgyNzc3NzA1NTY5OTM2MTIzNyAtPiA1LjA5ODMwMjM3NjQyMDM5NjI2MDQwNDgyMTE1ODE1OEUrOTY4IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMzUgZGl2aWRlaW50IC05ODkwNjMzLjg1NDYwOTQzNDk0MzU1OTgzMTkxMTI3NkUrOTcxIC0xOTM5OTg1NzI5LjQzNjgyNzc3NzA1NTY5OTM2MTIzNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwMzUgbXVsdGlwbHkgLTk4OTA2MzMuODU0NjA5NDM0OTQzNTU5ODMxOTExMjc2RSs5NzEgLTE5Mzk5ODU3MjkuNDM2ODI3Nzc3MDU1Njk5MzYxMjM3IC0+IDEuOTE4NzY4ODUzMzAyNzA2ODI1OTY0MDg3NzAyMzA3RSs5ODcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzNSBwb3dlciAtOTg5MDYzMy44NTQ2MDk0MzQ5NDM1NTk4MzE5MTEyNzZFKzk3MSAtMiAtPiAxLjAyMjIzNzM2MjY2NzU5Mjg2Nzc2ODUxMTQ4NzgxNEUtMTk1NiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDM1IHJlbWFpbmRlciAtOTg5MDYzMy44NTQ2MDk0MzQ5NDM1NTk4MzE5MTEyNzZFKzk3MSAtMTkzOTk4NTcyOS40MzY4Mjc3NzcwNTU2OTkzNjEyMzcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDM1IHN1YnRyYWN0IC05ODkwNjMzLjg1NDYwOTQzNDk0MzU1OTgzMTkxMTI3NkUrOTcxIC0xOTM5OTg1NzI5LjQzNjgyNzc3NzA1NTY5OTM2MTIzNyAtPiAtOS44OTA2MzM4NTQ2MDk0MzQ5NDM1NTk4MzE5MTEyNzZFKzk3NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDM2IGFkZCAzOTQ0NTcwMzIzLjMzMTEyMTc1MDY2MTkyMDQ3NTE5MSAtMTczNjA3MjIuMjg4NzgxNDU2NDEzOTQ5NjI0ODQzNjYgLT4gMzkyNzIwOTYwMS4wNDIzNDAyOTQyNDc5NzA4NTAzNDcgSW5leGFjdCBSb3VuZGVkCitjb214MzAzNiBjb21wYXJlIDM5NDQ1NzAzMjMuMzMxMTIxNzUwNjYxOTIwNDc1MTkxIC0xNzM2MDcyMi4yODg3ODE0NTY0MTM5NDk2MjQ4NDM2NiAtPiAxCitkaXZ4MzAzNiBkaXZpZGUgMzk0NDU3MDMyMy4zMzExMjE3NTA2NjE5MjA0NzUxOTEgLTE3MzYwNzIyLjI4ODc4MTQ1NjQxMzk0OTYyNDg0MzY2IC0+IC0yMjcuMjEyMzM5MzA5MTgzNzcwNjgyNzcwODE5NjEwMSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDM2IGRpdmlkZWludCAzOTQ0NTcwMzIzLjMzMTEyMTc1MDY2MTkyMDQ3NTE5MSAtMTczNjA3MjIuMjg4NzgxNDU2NDEzOTQ5NjI0ODQzNjYgLT4gLTIyNworbXVseDMwMzYgbXVsdGlwbHkgMzk0NDU3MDMyMy4zMzExMjE3NTA2NjE5MjA0NzUxOTEgLTE3MzYwNzIyLjI4ODc4MTQ1NjQxMzk0OTYyNDg0MzY2IC0+IC02ODQ4MDU4OTkzMTkyMDQ4MS41NjAyMDA0MzIxMzc2NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDM2IHBvd2VyIDM5NDQ1NzAzMjMuMzMxMTIxNzUwNjYxOTIwNDc1MTkxIC0xNzM2MDcyMiAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzAzNiByZW1haW5kZXIgMzk0NDU3MDMyMy4zMzExMjE3NTA2NjE5MjA0NzUxOTEgLTE3MzYwNzIyLjI4ODc4MTQ1NjQxMzk0OTYyNDg0MzY2IC0+IDM2ODYzNjMuNzc3NzMxMTQ0Njk1MzU1NjM1NjgwMTgKK3N1YngzMDM2IHN1YnRyYWN0IDM5NDQ1NzAzMjMuMzMxMTIxNzUwNjYxOTIwNDc1MTkxIC0xNzM2MDcyMi4yODg3ODE0NTY0MTM5NDk2MjQ4NDM2NiAtPiAzOTYxOTMxMDQ1LjYxOTkwMzIwNzA3NTg3MDEwMDAzNSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDM3IGFkZCAxOTU0NC4xNDAxODUwMzQyNzAyOTAwMjU1Mjg3MjcwNyAxNzg2Njk3NzYyLjg4NTE3ODk5NDE4MjEzMzgzOTU0NiAtPiAxNzg2NzE3MzA3LjAyNTM2NDAyODQ1MjQyMzg2NTA3NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDM3IGNvbXBhcmUgMTk1NDQuMTQwMTg1MDM0MjcwMjkwMDI1NTI4NzI3MDcgMTc4NjY5Nzc2Mi44ODUxNzg5OTQxODIxMzM4Mzk1NDYgLT4gLTEKK2RpdngzMDM3IGRpdmlkZSAxOTU0NC4xNDAxODUwMzQyNzAyOTAwMjU1Mjg3MjcwNyAxNzg2Njk3NzYyLjg4NTE3ODk5NDE4MjEzMzgzOTU0NiAtPiAwLjAwMDAxMDkzODY5NDA0ODMyODY3NzU5MjM0MzU5ODcxOTkxIEluZXhhY3QgUm91bmRlZAorZHZpeDMwMzcgZGl2aWRlaW50IDE5NTQ0LjE0MDE4NTAzNDI3MDI5MDAyNTUyODcyNzA3IDE3ODY2OTc3NjIuODg1MTc4OTk0MTgyMTMzODM5NTQ2IC0+IDAKK211bHgzMDM3IG11bHRpcGx5IDE5NTQ0LjE0MDE4NTAzNDI3MDI5MDAyNTUyODcyNzA3IDE3ODY2OTc3NjIuODg1MTc4OTk0MTgyMTMzODM5NTQ2IC0+IDM0OTE5NDcxNTQ2MTE1LjA1ODk3MTYzNDk2MTYyMjkwIEluZXhhY3QgUm91bmRlZAorcG93eDMwMzcgcG93ZXIgMTk1NDQuMTQwMTg1MDM0MjcwMjkwMDI1NTI4NzI3MDcgMiAtPiAzODE5NzM0MTUuNTcyMjcxNDAwOTI5ODgwMjU1Nzk0MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDM3IHJlbWFpbmRlciAxOTU0NC4xNDAxODUwMzQyNzAyOTAwMjU1Mjg3MjcwNyAxNzg2Njk3NzYyLjg4NTE3ODk5NDE4MjEzMzgzOTU0NiAtPiAxOTU0NC4xNDAxODUwMzQyNzAyOTAwMjU1Mjg3MjcwNworc3VieDMwMzcgc3VidHJhY3QgMTk1NDQuMTQwMTg1MDM0MjcwMjkwMDI1NTI4NzI3MDcgMTc4NjY5Nzc2Mi44ODUxNzg5OTQxODIxMzM4Mzk1NDYgLT4gLTE3ODY2NzgyMTguNzQ0OTkzOTU5OTExODQzODE0MDE3IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMzggYWRkIC0wNS43NTQ4NTk1NzkzNzYxNzc1Nzk4MzUxMzY2Mjk4MSA1NTY0NDc2ODc1Ljk4OTY0MDQzMTE3MzY5NDM3MjA4MyAtPiA1NTY0NDc2ODcwLjIzNDc4MDg1MTc5NzUxNjc5MjI0OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDM4IGNvbXBhcmUgLTA1Ljc1NDg1OTU3OTM3NjE3NzU3OTgzNTEzNjYyOTgxIDU1NjQ0NzY4NzUuOTg5NjQwNDMxMTczNjk0MzcyMDgzIC0+IC0xCitkaXZ4MzAzOCBkaXZpZGUgLTA1Ljc1NDg1OTU3OTM3NjE3NzU3OTgzNTEzNjYyOTgxIDU1NjQ0NzY4NzUuOTg5NjQwNDMxMTczNjk0MzcyMDgzIC0+IC0xLjAzNDIxMzk0NDU2ODI3MTMyNDg0MTYwODgyNTEzNkUtOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDM4IGRpdmlkZWludCAtMDUuNzU0ODU5NTc5Mzc2MTc3NTc5ODM1MTM2NjI5ODEgNTU2NDQ3Njg3NS45ODk2NDA0MzExNzM2OTQzNzIwODMgLT4gLTAKK211bHgzMDM4IG11bHRpcGx5IC0wNS43NTQ4NTk1NzkzNzYxNzc1Nzk4MzUxMzY2Mjk4MSA1NTY0NDc2ODc1Ljk4OTY0MDQzMTE3MzY5NDM3MjA4MyAtPiAtMzIwMjI3ODMwNTQuMDA2MjA4Nzg0MzYzOTg5OTAxMzUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzOCBwb3dlciAtMDUuNzU0ODU5NTc5Mzc2MTc3NTc5ODM1MTM2NjI5ODEgNiAtPiAzNjMyNS4yMzExODIyMzYxMTQyMTMwMzIzODkwODQ3MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDM4IHJlbWFpbmRlciAtMDUuNzU0ODU5NTc5Mzc2MTc3NTc5ODM1MTM2NjI5ODEgNTU2NDQ3Njg3NS45ODk2NDA0MzExNzM2OTQzNzIwODMgLT4gLTUuNzU0ODU5NTc5Mzc2MTc3NTc5ODM1MTM2NjI5ODEKK3N1YngzMDM4IHN1YnRyYWN0IC0wNS43NTQ4NTk1NzkzNzYxNzc1Nzk4MzUxMzY2Mjk4MSA1NTY0NDc2ODc1Ljk4OTY0MDQzMTE3MzY5NDM3MjA4MyAtPiAtNTU2NDQ3Njg4MS43NDQ1MDAwMTA1NDk4NzE5NTE5MTggSW5leGFjdCBSb3VuZGVkCithZGR4MzAzOSBhZGQgLTQyMDg4MjAuODk4NzE4MDY5MTk0MDA4NTI2MzAyNzQ2IDYyNjg4Ny43NTUzNzc0NzA1Njc4MjAxMTEyODQ1NDYyRSsyMDYgLT4gNi4yNjg4Nzc1NTM3NzQ3MDU2NzgyMDExMTI4NDU0NjJFKzIxMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDM5IGNvbXBhcmUgLTQyMDg4MjAuODk4NzE4MDY5MTk0MDA4NTI2MzAyNzQ2IDYyNjg4Ny43NTUzNzc0NzA1Njc4MjAxMTEyODQ1NDYyRSsyMDYgLT4gLTEKK2RpdngzMDM5IGRpdmlkZSAtNDIwODgyMC44OTg3MTgwNjkxOTQwMDg1MjYzMDI3NDYgNjI2ODg3Ljc1NTM3NzQ3MDU2NzgyMDExMTI4NDU0NjJFKzIwNiAtPiAtNi43MTM4MzQ5MTMyMTE1MjcxODQ5MDc0MjE4NTY0MzRFLTIwNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDM5IGRpdmlkZWludCAtNDIwODgyMC44OTg3MTgwNjkxOTQwMDg1MjYzMDI3NDYgNjI2ODg3Ljc1NTM3NzQ3MDU2NzgyMDExMTI4NDU0NjJFKzIwNiAtPiAtMAorbXVseDMwMzkgbXVsdGlwbHkgLTQyMDg4MjAuODk4NzE4MDY5MTk0MDA4NTI2MzAyNzQ2IDYyNjg4Ny43NTUzNzc0NzA1Njc4MjAxMTEyODQ1NDYyRSsyMDYgLT4gLTIuNjM4NDU4Mjg1OTgzMTU4Nzg5NDU4OTI1MTcwMjY3RSsyMTggSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzOSBwb3dlciAtNDIwODgyMC44OTg3MTgwNjkxOTQwMDg1MjYzMDI3NDYgNiAtPiA1LjU1ODU2NDc4MzI5MTI2MDM1OTE0MjIyMzMzNzk5NEUrMzkgSW5leGFjdCBSb3VuZGVkCityZW14MzAzOSByZW1haW5kZXIgLTQyMDg4MjAuODk4NzE4MDY5MTk0MDA4NTI2MzAyNzQ2IDYyNjg4Ny43NTUzNzc0NzA1Njc4MjAxMTEyODQ1NDYyRSsyMDYgLT4gLTQyMDg4MjAuODk4NzE4MDY5MTk0MDA4NTI2MzAyNzQ2CitzdWJ4MzAzOSBzdWJ0cmFjdCAtNDIwODgyMC44OTg3MTgwNjkxOTQwMDg1MjYzMDI3NDYgNjI2ODg3Ljc1NTM3NzQ3MDU2NzgyMDExMTI4NDU0NjJFKzIwNiAtPiAtNi4yNjg4Nzc1NTM3NzQ3MDU2NzgyMDExMTI4NDU0NjJFKzIxMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDQwIGFkZCAtNzAwNzcxOTU0NzgwNjYuMzA4OTY5NzkwODU4MjEyNjlFKzU0OSA0NjA3LjE2MzI0ODU1NDE1NTQ4MzY4MTQzMDAxMzA3MyAtPiAtNy4wMDc3MTk1NDc4MDY2MzA4OTY5NzkwODU4MjEyNjlFKzU2MiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDQwIGNvbXBhcmUgLTcwMDc3MTk1NDc4MDY2LjMwODk2OTc5MDg1ODIxMjY5RSs1NDkgNDYwNy4xNjMyNDg1NTQxNTU0ODM2ODE0MzAwMTMwNzMgLT4gLTEKK2RpdngzMDQwIGRpdmlkZSAtNzAwNzcxOTU0NzgwNjYuMzA4OTY5NzkwODU4MjEyNjlFKzU0OSA0NjA3LjE2MzI0ODU1NDE1NTQ4MzY4MTQzMDAxMzA3MyAtPiAtMS41MjEwNDg2NzM0OTg5OTc2MjczNjAyMzAwNzgzMDZFKzU1OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDQwIGRpdmlkZWludCAtNzAwNzcxOTU0NzgwNjYuMzA4OTY5NzkwODU4MjEyNjlFKzU0OSA0NjA3LjE2MzI0ODU1NDE1NTQ4MzY4MTQzMDAxMzA3MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNDAgbXVsdGlwbHkgLTcwMDc3MTk1NDc4MDY2LjMwODk2OTc5MDg1ODIxMjY5RSs1NDkgNDYwNy4xNjMyNDg1NTQxNTU0ODM2ODE0MzAwMTMwNzMgLT4gLTMuMjI4NTcwNzk1NjgyOTI1NTA5NDc4MTkxMzk3ODc4RSs1NjYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA0MCBwb3dlciAtNzAwNzcxOTU0NzgwNjYuMzA4OTY5NzkwODU4MjEyNjlFKzU0OSA0NjA3IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDQwIHJlbWFpbmRlciAtNzAwNzcxOTU0NzgwNjYuMzA4OTY5NzkwODU4MjEyNjlFKzU0OSA0NjA3LjE2MzI0ODU1NDE1NTQ4MzY4MTQzMDAxMzA3MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwNDAgc3VidHJhY3QgLTcwMDc3MTk1NDc4MDY2LjMwODk2OTc5MDg1ODIxMjY5RSs1NDkgNDYwNy4xNjMyNDg1NTQxNTU0ODM2ODE0MzAwMTMwNzMgLT4gLTcuMDA3NzE5NTQ3ODA2NjMwODk2OTc5MDg1ODIxMjY5RSs1NjIgSW5leGFjdCBSb3VuZGVkCithZGR4MzA0MSBhZGQgLTQ0Mjk0MS43NTQxODExNTI3OTQwOTE4MjQ0MzgzNDU0IC0wNjgxMjY3NjguMDU2MzU1OTgxOTE1NjM3OTE1MTAxNiAtPiAtNjg1Njk3MDkuODEwNTM3MTM0NzA5NzI5NzM5NTM5OTUgSW5leGFjdCBSb3VuZGVkCitjb214MzA0MSBjb21wYXJlIC00NDI5NDEuNzU0MTgxMTUyNzk0MDkxODI0NDM4MzQ1NCAtMDY4MTI2NzY4LjA1NjM1NTk4MTkxNTYzNzkxNTEwMTYgLT4gMQorZGl2eDMwNDEgZGl2aWRlIC00NDI5NDEuNzU0MTgxMTUyNzk0MDkxODI0NDM4MzQ1NCAtMDY4MTI2NzY4LjA1NjM1NTk4MTkxNTYzNzkxNTEwMTYgLT4gMC4wMDY1MDE3Mjg1Njg5MzQwNDIxNDM5MTMxMTE3Njg1NTcgSW5leGFjdCBSb3VuZGVkCitkdml4MzA0MSBkaXZpZGVpbnQgLTQ0Mjk0MS43NTQxODExNTI3OTQwOTE4MjQ0MzgzNDU0IC0wNjgxMjY3NjguMDU2MzU1OTgxOTE1NjM3OTE1MTAxNiAtPiAwCittdWx4MzA0MSBtdWx0aXBseSAtNDQyOTQxLjc1NDE4MTE1Mjc5NDA5MTgyNDQzODM0NTQgLTA2ODEyNjc2OC4wNTYzNTU5ODE5MTU2Mzc5MTUxMDE2IC0+IDMwMTc2MTkwMTQ5NTc0Ljg0Mzg2Mzk1OTQ3NTkzOTcwIEluZXhhY3QgUm91bmRlZAorcG93eDMwNDEgcG93ZXIgLTQ0Mjk0MS43NTQxODExNTI3OTQwOTE4MjQ0MzgzNDU0IC02ODEyNjc2OCAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzA0MSByZW1haW5kZXIgLTQ0Mjk0MS43NTQxODExNTI3OTQwOTE4MjQ0MzgzNDU0IC0wNjgxMjY3NjguMDU2MzU1OTgxOTE1NjM3OTE1MTAxNiAtPiAtNDQyOTQxLjc1NDE4MTE1Mjc5NDA5MTgyNDQzODM0NTQKK3N1YngzMDQxIHN1YnRyYWN0IC00NDI5NDEuNzU0MTgxMTUyNzk0MDkxODI0NDM4MzQ1NCAtMDY4MTI2NzY4LjA1NjM1NTk4MTkxNTYzNzkxNTEwMTYgLT4gNjc2ODM4MjYuMzAyMTc0ODI5MTIxNTQ2MDkwNjYzMjUgSW5leGFjdCBSb3VuZGVkCithZGR4MzA0MiBhZGQgLTA0MDcyNjc3ODcxMS44Njc3NjE1NjE2NzExNjc2MTU5IDI5OTY5MS45NDMwMzQ1MjU5MTc0NjE0OTk3MDY0OTE2IC0+IC00MDcyNjQ3OTAxOS45MjQ3MjcwMzU3NTM3MDYxMTYxOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDQyIGNvbXBhcmUgLTA0MDcyNjc3ODcxMS44Njc3NjE1NjE2NzExNjc2MTU5IDI5OTY5MS45NDMwMzQ1MjU5MTc0NjE0OTk3MDY0OTE2IC0+IC0xCitkaXZ4MzA0MiBkaXZpZGUgLTA0MDcyNjc3ODcxMS44Njc3NjE1NjE2NzExNjc2MTU5IDI5OTY5MS45NDMwMzQ1MjU5MTc0NjE0OTk3MDY0OTE2IC0+IC0xMzU4OTUuNDc0MTk3NTY5MDg3MjU0ODIzMzExMTg4OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDQyIGRpdmlkZWludCAtMDQwNzI2Nzc4NzExLjg2Nzc2MTU2MTY3MTE2NzYxNTkgMjk5NjkxLjk0MzAzNDUyNTkxNzQ2MTQ5OTcwNjQ5MTYgLT4gLTEzNTg5NQorbXVseDMwNDIgbXVsdGlwbHkgLTA0MDcyNjc3ODcxMS44Njc3NjE1NjE2NzExNjc2MTU5IDI5OTY5MS45NDMwMzQ1MjU5MTc0NjE0OTk3MDY0OTE2IC0+IC0xMjIwNTQ4NzQ0NTY5NjgxNi4wMjE3NTY2NTYyMjI0MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDQyIHBvd2VyIC0wNDA3MjY3Nzg3MTEuODY3NzYxNTYxNjcxMTY3NjE1OSAyOTk2OTIgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzA0MiByZW1haW5kZXIgLTA0MDcyNjc3ODcxMS44Njc3NjE1NjE2NzExNjc2MTU5IDI5OTY5MS45NDMwMzQ1MjU5MTc0NjE0OTk3MDY0OTE2IC0+IC0xNDIxMTMuMTkwODYyMDA4MjQwNjY1MDAyMjI0MDE4MAorc3VieDMwNDIgc3VidHJhY3QgLTA0MDcyNjc3ODcxMS44Njc3NjE1NjE2NzExNjc2MTU5IDI5OTY5MS45NDMwMzQ1MjU5MTc0NjE0OTk3MDY0OTE2IC0+IC00MDcyNzA3ODQwMy44MTA3OTYwODc1ODg2MjkxMTU2MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDQzIGFkZCAtMTkzNDE5NzUyMC43MzgzNjY5MTIxNzkxNDMwODU5NTUgMy44MTA3NTE0MjI1MTUxNzg0MDAyOTM2OTMzNzE1MTkgLT4gLTE5MzQxOTc1MTYuOTI3NjE1NDg5NjYzOTY0Njg1NjYxIEluZXhhY3QgUm91bmRlZAorY29teDMwNDMgY29tcGFyZSAtMTkzNDE5NzUyMC43MzgzNjY5MTIxNzkxNDMwODU5NTUgMy44MTA3NTE0MjI1MTUxNzg0MDAyOTM2OTMzNzE1MTkgLT4gLTEKK2RpdngzMDQzIGRpdmlkZSAtMTkzNDE5NzUyMC43MzgzNjY5MTIxNzkxNDMwODU5NTUgMy44MTA3NTE0MjI1MTUxNzg0MDAyOTM2OTMzNzE1MTkgLT4gLTUwNzU2MzI4Ny43MzEyNTY2MDcxNTM3MjMzNjk3NDczIEluZXhhY3QgUm91bmRlZAorZHZpeDMwNDMgZGl2aWRlaW50IC0xOTM0MTk3NTIwLjczODM2NjkxMjE3OTE0MzA4NTk1NSAzLjgxMDc1MTQyMjUxNTE3ODQwMDI5MzY5MzM3MTUxOSAtPiAtNTA3NTYzMjg3CittdWx4MzA0MyBtdWx0aXBseSAtMTkzNDE5NzUyMC43MzgzNjY5MTIxNzkxNDMwODU5NTUgMy44MTA3NTE0MjI1MTUxNzg0MDAyOTM2OTMzNzE1MTkgLT4gLTczNzA3NDU5NTMuNTc5MDYyOTg1MTMwNDM4MzA5MDIzIEluZXhhY3QgUm91bmRlZAorcG93eDMwNDMgcG93ZXIgLTE5MzQxOTc1MjAuNzM4MzY2OTEyMTc5MTQzMDg1OTU1IDQgLT4gMS4zOTk1OTc5MjIyNzU0MDA5NDc0OTc4NTU1Mzk0NzVFKzM3IEluZXhhY3QgUm91bmRlZAorcmVteDMwNDMgcmVtYWluZGVyIC0xOTM0MTk3NTIwLjczODM2NjkxMjE3OTE0MzA4NTk1NSAzLjgxMDc1MTQyMjUxNTE3ODQwMDI5MzY5MzM3MTUxOSAtPiAtMi43ODY2MzcxNTU5MzQ2NzQzMTI5MzY3MDQxNzcwNDcKK3N1YngzMDQzIHN1YnRyYWN0IC0xOTM0MTk3NTIwLjczODM2NjkxMjE3OTE0MzA4NTk1NSAzLjgxMDc1MTQyMjUxNTE3ODQwMDI5MzY5MzM3MTUxOSAtPiAtMTkzNDE5NzUyNC41NDkxMTgzMzQ2OTQzMjE0ODYyNDkgSW5leGFjdCBSb3VuZGVkCithZGR4MzA0NCBhZGQgODEzMjYyLjc3MjM1MzM4MzMwMzg4Mjk1NTk2NDY4MzAgLTMwMzI4NDgyMjcxNi44MjgyMTc4MTMxMTE4MTg1OTA3IC0+IC0zMDMyODQwMDk0NTQuMDU1ODY0NDI5ODA3OTM1NjM0NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDQ0IGNvbXBhcmUgODEzMjYyLjc3MjM1MzM4MzMwMzg4Mjk1NTk2NDY4MzAgLTMwMzI4NDgyMjcxNi44MjgyMTc4MTMxMTE4MTg1OTA3IC0+IDEKK2RpdngzMDQ0IGRpdmlkZSA4MTMyNjIuNzcyMzUzMzgzMzAzODgyOTU1OTY0NjgzMCAtMzAzMjg0ODIyNzE2LjgyODIxNzgxMzExMTgxODU5MDcgLT4gLTAuMDAwMDAyNjgxNTE0OTA0MjY3NzcwMjk0MjEzMzgxNDg1MTA4IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNDQgZGl2aWRlaW50IDgxMzI2Mi43NzIzNTMzODMzMDM4ODI5NTU5NjQ2ODMwIC0zMDMyODQ4MjI3MTYuODI4MjE3ODEzMTExODE4NTkwNyAtPiAtMAorbXVseDMwNDQgbXVsdGlwbHkgODEzMjYyLjc3MjM1MzM4MzMwMzg4Mjk1NTk2NDY4MzAgLTMwMzI4NDgyMjcxNi44MjgyMTc4MTMxMTE4MTg1OTA3IC0+IC0yNDY2NTAyNTU3MzUzOTIwODAuMTM1NzQwNDI4MDQzMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDQ0IHBvd2VyIDgxMzI2Mi43NzIzNTMzODMzMDM4ODI5NTU5NjQ2ODMwIC0zIC0+IDEuODU5MTE5NTY4MzEwOTk3NjA1NTQ1OTE0ODk1MTMzRS0xOCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDQ0IHJlbWFpbmRlciA4MTMyNjIuNzcyMzUzMzgzMzAzODgyOTU1OTY0NjgzMCAtMzAzMjg0ODIyNzE2LjgyODIxNzgxMzExMTgxODU5MDcgLT4gODEzMjYyLjc3MjM1MzM4MzMwMzg4Mjk1NTk2NDY4MzAKK3N1YngzMDQ0IHN1YnRyYWN0IDgxMzI2Mi43NzIzNTMzODMzMDM4ODI5NTU5NjQ2ODMwIC0zMDMyODQ4MjI3MTYuODI4MjE3ODEzMTExODE4NTkwNyAtPiAzMDMyODU2MzU5NzkuNjAwNTcxMTk2NDE1NzAxNTQ2NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDQ1IGFkZCAzNjEwNTk1NDg4NC45NDYyMTQzNDk3OTM2NTU4OTMxMSA3NDU1NTgyMDUuNzY5MjM5NzQ4MTMxMzAwNTY1OTUyM0UtOTUyIC0+IDM2MTA1OTU0ODg0Ljk0NjIxNDM0OTc5MzY1NTg5MzExIEluZXhhY3QgUm91bmRlZAorY29teDMwNDUgY29tcGFyZSAzNjEwNTk1NDg4NC45NDYyMTQzNDk3OTM2NTU4OTMxMSA3NDU1NTgyMDUuNzY5MjM5NzQ4MTMxMzAwNTY1OTUyM0UtOTUyIC0+IDEKK2RpdngzMDQ1IGRpdmlkZSAzNjEwNTk1NDg4NC45NDYyMTQzNDk3OTM2NTU4OTMxMSA3NDU1NTgyMDUuNzY5MjM5NzQ4MTMxMzAwNTY1OTUyM0UtOTUyIC0+IDQuODQyODA4MzI4Nzg2ODA1ODIxNDExNjc0MzAyNjg2RSs5NTMgSW5leGFjdCBSb3VuZGVkCitkdml4MzA0NSBkaXZpZGVpbnQgMzYxMDU5NTQ4ODQuOTQ2MjE0MzQ5NzkzNjU1ODkzMTEgNzQ1NTU4MjA1Ljc2OTIzOTc0ODEzMTMwMDU2NTk1MjNFLTk1MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNDUgbXVsdGlwbHkgMzYxMDU5NTQ4ODQuOTQ2MjE0MzQ5NzkzNjU1ODkzMTEgNzQ1NTU4MjA1Ljc2OTIzOTc0ODEzMTMwMDU2NTk1MjNFLTk1MiAtPiAyLjY5MTkwOTA5NDE2MDU2MTY3MzM5MTM1Mjc0Mzg2OUUtOTMzIEluZXhhY3QgUm91bmRlZAorcG93eDMwNDUgcG93ZXIgMzYxMDU5NTQ4ODQuOTQ2MjE0MzQ5NzkzNjU1ODkzMTEgNyAtPiA3Ljk5OTI5NzQ0OTcxMzMwMTcxOTU4MjczMjQ0NzM4NkUrNzMgSW5leGFjdCBSb3VuZGVkCityZW14MzA0NSByZW1haW5kZXIgMzYxMDU5NTQ4ODQuOTQ2MjE0MzQ5NzkzNjU1ODkzMTEgNzQ1NTU4MjA1Ljc2OTIzOTc0ODEzMTMwMDU2NTk1MjNFLTk1MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwNDUgc3VidHJhY3QgMzYxMDU5NTQ4ODQuOTQ2MjE0MzQ5NzkzNjU1ODkzMTEgNzQ1NTU4MjA1Ljc2OTIzOTc0ODEzMTMwMDU2NTk1MjNFLTk1MiAtPiAzNjEwNTk1NDg4NC45NDYyMTQzNDk3OTM2NTU4OTMxMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDQ2IGFkZCAtMDc1NTM3MTc3NTM4LjE4MTQ1MTY2MjE5NjIxODU0OTAgMjY5ODA3NzUyNTUuNTE1NDI4NTY0ODMxMjI0ODQ4OTggLT4gLTQ4NTU2NDAyMjgyLjY2NjAyMzA5NzM2NDk5MzcwMDAyCitjb214MzA0NiBjb21wYXJlIC0wNzU1MzcxNzc1MzguMTgxNDUxNjYyMTk2MjE4NTQ5MCAyNjk4MDc3NTI1NS41MTU0Mjg1NjQ4MzEyMjQ4NDg5OCAtPiAtMQorZGl2eDMwNDYgZGl2aWRlIC0wNzU1MzcxNzc1MzguMTgxNDUxNjYyMTk2MjE4NTQ5MCAyNjk4MDc3NTI1NS41MTU0Mjg1NjQ4MzEyMjQ4NDg5OCAtPiAtMi43OTk2NjY2ODIwMjkwODk5NTYyNjkwMTg1NDE2NDkgSW5leGFjdCBSb3VuZGVkCitkdml4MzA0NiBkaXZpZGVpbnQgLTA3NTUzNzE3NzUzOC4xODE0NTE2NjIxOTYyMTg1NDkwIDI2OTgwNzc1MjU1LjUxNTQyODU2NDgzMTIyNDg0ODk4IC0+IC0yCittdWx4MzA0NiBtdWx0aXBseSAtMDc1NTM3MTc3NTM4LjE4MTQ1MTY2MjE5NjIxODU0OTAgMjY5ODA3NzUyNTUuNTE1NDI4NTY0ODMxMjI0ODQ4OTggLT4gLTIwMzgwNTE2MTA1OTM2NDE5NDc3MTcuMjY4NjUyMTc1IEluZXhhY3QgUm91bmRlZAorcG93eDMwNDYgcG93ZXIgLTA3NTUzNzE3NzUzOC4xODE0NTE2NjIxOTYyMTg1NDkwIDMgLT4gLTQuMzEwMDQ5NTE4OTg3OTg4MDg0NTk1MjY0NjE3NzI3RSszMiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDQ2IHJlbWFpbmRlciAtMDc1NTM3MTc3NTM4LjE4MTQ1MTY2MjE5NjIxODU0OTAgMjY5ODA3NzUyNTUuNTE1NDI4NTY0ODMxMjI0ODQ4OTggLT4gLTIxNTc1NjI3MDI3LjE1MDU5NDUzMjUzMzc2ODg1MTA0CitzdWJ4MzA0NiBzdWJ0cmFjdCAtMDc1NTM3MTc3NTM4LjE4MTQ1MTY2MjE5NjIxODU0OTAgMjY5ODA3NzUyNTUuNTE1NDI4NTY0ODMxMjI0ODQ4OTggLT4gLTEwMjUxNzk1Mjc5My42OTY4ODAyMjcwMjc0NDMzOTgwIEluZXhhY3QgUm91bmRlZAorYWRkeDMwNDcgYWRkIC00MjIzNzY1LjQxNTMxOTU2NDg5ODg0MDA0MDY5NzY0NyAtMjU5MDU5MDMwNTQ5NzQ1NDE4NTQ1NTQ1OTE0OTkxOEUtMjE1IC0+IC00MjIzNzY1LjQxNTMxOTU2NDg5ODg0MDA0MDY5NzY0NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDQ3IGNvbXBhcmUgLTQyMjM3NjUuNDE1MzE5NTY0ODk4ODQwMDQwNjk3NjQ3IC0yNTkwNTkwMzA1NDk3NDU0MTg1NDU1NDU5MTQ5OTE4RS0yMTUgLT4gLTEKK2RpdngzMDQ3IGRpdmlkZSAtNDIyMzc2NS40MTUzMTk1NjQ4OTg4NDAwNDA2OTc2NDcgLTI1OTA1OTAzMDU0OTc0NTQxODU0NTU0NTkxNDk5MThFLTIxNSAtPiAxLjYzMDQyNTg1NTU4ODM0NzM1NjU3MDA3NjkwOTA1M0UrMTkxIEluZXhhY3QgUm91bmRlZAorZHZpeDMwNDcgZGl2aWRlaW50IC00MjIzNzY1LjQxNTMxOTU2NDg5ODg0MDA0MDY5NzY0NyAtMjU5MDU5MDMwNTQ5NzQ1NDE4NTQ1NTQ1OTE0OTkxOEUtMjE1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzA0NyBtdWx0aXBseSAtNDIyMzc2NS40MTUzMTk1NjQ4OTg4NDAwNDA2OTc2NDcgLTI1OTA1OTAzMDU0OTc0NTQxODU0NTU0NTkxNDk5MThFLTIxNSAtPiAxLjA5NDIwNDU3Mzc2MjIyOTMwODc5ODYwNDg0NTM5NUUtMTc4IEluZXhhY3QgUm91bmRlZAorcG93eDMwNDcgcG93ZXIgLTQyMjM3NjUuNDE1MzE5NTY0ODk4ODQwMDQwNjk3NjQ3IC0zIC0+IC0xLjMyNzA5MDc3NTg2MzYxNjkzOTMwOTU2OTc5MTEzOEUtMjAgSW5leGFjdCBSb3VuZGVkCityZW14MzA0NyByZW1haW5kZXIgLTQyMjM3NjUuNDE1MzE5NTY0ODk4ODQwMDQwNjk3NjQ3IC0yNTkwNTkwMzA1NDk3NDU0MTg1NDU1NDU5MTQ5OTE4RS0yMTUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDQ3IHN1YnRyYWN0IC00MjIzNzY1LjQxNTMxOTU2NDg5ODg0MDA0MDY5NzY0NyAtMjU5MDU5MDMwNTQ5NzQ1NDE4NTQ1NTQ1OTE0OTkxOEUtMjE1IC0+IC00MjIzNzY1LjQxNTMxOTU2NDg5ODg0MDA0MDY5NzY0NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDQ4IGFkZCAtNjQ2OC45MDM3Mzg1MjI5NTEyNTkwNjMwOTk5NDYxOTUgLTc4NzcuMzI0MzE0MjczNjk0MzEyMTY0NDA3Nzk0OTM5RSsyNjcgLT4gLTcuODc3MzI0MzE0MjczNjk0MzEyMTY0NDA3Nzk0OTM5RSsyNzAgSW5leGFjdCBSb3VuZGVkCitjb214MzA0OCBjb21wYXJlIC02NDY4LjkwMzczODUyMjk1MTI1OTA2MzA5OTk0NjE5NSAtNzg3Ny4zMjQzMTQyNzM2OTQzMTIxNjQ0MDc3OTQ5MzlFKzI2NyAtPiAxCitkaXZ4MzA0OCBkaXZpZGUgLTY0NjguOTAzNzM4NTIyOTUxMjU5MDYzMDk5OTQ2MTk1IC03ODc3LjMyNDMxNDI3MzY5NDMxMjE2NDQwNzc5NDkzOUUrMjY3IC0+IDguMjEyMDU3MTQwNzc0NzA2ODc0NjY2MzA3MjQ2NjI4RS0yNjggSW5leGFjdCBSb3VuZGVkCitkdml4MzA0OCBkaXZpZGVpbnQgLTY0NjguOTAzNzM4NTIyOTUxMjU5MDYzMDk5OTQ2MTk1IC03ODc3LjMyNDMxNDI3MzY5NDMxMjE2NDQwNzc5NDkzOUUrMjY3IC0+IDAKK211bHgzMDQ4IG11bHRpcGx5IC02NDY4LjkwMzczODUyMjk1MTI1OTA2MzA5OTk0NjE5NSAtNzg3Ny4zMjQzMTQyNzM2OTQzMTIxNjQ0MDc3OTQ5MzlFKzI2NyAtPiA1LjA5NTc2NTI3MDYxNjI4NDQ1NTkyMjc0NzUzMDY3NkUrMjc0IEluZXhhY3QgUm91bmRlZAorcG93eDMwNDggcG93ZXIgLTY0NjguOTAzNzM4NTIyOTUxMjU5MDYzMDk5OTQ2MTk1IC04IC0+IDMuMjYxMDI3NzI0OTgyMDg5Mjk4MDMwMzYyMzY3NjE2RS0zMSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDQ4IHJlbWFpbmRlciAtNjQ2OC45MDM3Mzg1MjI5NTEyNTkwNjMwOTk5NDYxOTUgLTc4NzcuMzI0MzE0MjczNjk0MzEyMTY0NDA3Nzk0OTM5RSsyNjcgLT4gLTY0NjguOTAzNzM4NTIyOTUxMjU5MDYzMDk5OTQ2MTk1CitzdWJ4MzA0OCBzdWJ0cmFjdCAtNjQ2OC45MDM3Mzg1MjI5NTEyNTkwNjMwOTk5NDYxOTUgLTc4NzcuMzI0MzE0MjczNjk0MzEyMTY0NDA3Nzk0OTM5RSsyNjcgLT4gNy44NzczMjQzMTQyNzM2OTQzMTIxNjQ0MDc3OTQ5MzlFKzI3MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDQ5IGFkZCAtOTU2NzIyMS4xODM2NjMyMzY4MTcyMzkyNTQ3ODMzNzJFLTIwMyAxNjUwLjE5ODk2MTI1NjA2MTE2NTM2MjMxOTQ3MTI2NCAtPiAxNjUwLjE5ODk2MTI1NjA2MTE2NTM2MjMxOTQ3MTI2NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDQ5IGNvbXBhcmUgLTk1NjcyMjEuMTgzNjYzMjM2ODE3MjM5MjU0NzgzMzcyRS0yMDMgMTY1MC4xOTg5NjEyNTYwNjExNjUzNjIzMTk0NzEyNjQgLT4gLTEKK2RpdngzMDQ5IGRpdmlkZSAtOTU2NzIyMS4xODM2NjMyMzY4MTcyMzkyNTQ3ODMzNzJFLTIwMyAxNjUwLjE5ODk2MTI1NjA2MTE2NTM2MjMxOTQ3MTI2NCAtPiAtNS43OTc2MTY3NzczMDEyNTA3MTE5ODU3Mjk3NzY5NTdFLTIwMCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDQ5IGRpdmlkZWludCAtOTU2NzIyMS4xODM2NjMyMzY4MTcyMzkyNTQ3ODMzNzJFLTIwMyAxNjUwLjE5ODk2MTI1NjA2MTE2NTM2MjMxOTQ3MTI2NCAtPiAtMAorbXVseDMwNDkgbXVsdGlwbHkgLTk1NjcyMjEuMTgzNjYzMjM2ODE3MjM5MjU0NzgzMzcyRS0yMDMgMTY1MC4xOTg5NjEyNTYwNjExNjUzNjIzMTk0NzEyNjQgLT4gLTEuNTc4NzgxODQ1OTM4ODA1NzM3NTI3MzA0MzAzOTc2RS0xOTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA0OSBwb3dlciAtOTU2NzIyMS4xODM2NjMyMzY4MTcyMzkyNTQ3ODMzNzJFLTIwMyAxNjUwIC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDQ5IHJlbWFpbmRlciAtOTU2NzIyMS4xODM2NjMyMzY4MTcyMzkyNTQ3ODMzNzJFLTIwMyAxNjUwLjE5ODk2MTI1NjA2MTE2NTM2MjMxOTQ3MTI2NCAtPiAtOS41NjcyMjExODM2NjMyMzY4MTcyMzkyNTQ3ODMzNzJFLTE5Nworc3VieDMwNDkgc3VidHJhY3QgLTk1NjcyMjEuMTgzNjYzMjM2ODE3MjM5MjU0NzgzMzcyRS0yMDMgMTY1MC4xOTg5NjEyNTYwNjExNjUzNjIzMTk0NzEyNjQgLT4gLTE2NTAuMTk4OTYxMjU2MDYxMTY1MzYyMzE5NDcxMjY0IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNTAgYWRkIDg4MTIzMDYwOTg3NzAuMjAwNzUyMTM5MTQyMDMzNTY5RS00MjggMjY3OTAuMTczODAxNjM5NzUxODY5NzI3MjA0MjcwMzBFKzU2OCAtPiAyLjY3OTAxNzM4MDE2Mzk3NTE4Njk3MjcyMDQyNzAzMEUrNTcyIEluZXhhY3QgUm91bmRlZAorY29teDMwNTAgY29tcGFyZSA4ODEyMzA2MDk4NzcwLjIwMDc1MjEzOTE0MjAzMzU2OUUtNDI4IDI2NzkwLjE3MzgwMTYzOTc1MTg2OTcyNzIwNDI3MDMwRSs1NjggLT4gLTEKK2RpdngzMDUwIGRpdmlkZSA4ODEyMzA2MDk4NzcwLjIwMDc1MjEzOTE0MjAzMzU2OUUtNDI4IDI2NzkwLjE3MzgwMTYzOTc1MTg2OTcyNzIwNDI3MDMwRSs1NjggLT4gMy4yODkzNzk5NjU5NjAwNjU1NzM0NDQxNDA3NDk2MzVFLTk4OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDUwIGRpdmlkZWludCA4ODEyMzA2MDk4NzcwLjIwMDc1MjEzOTE0MjAzMzU2OUUtNDI4IDI2NzkwLjE3MzgwMTYzOTc1MTg2OTcyNzIwNDI3MDMwRSs1NjggLT4gMAorbXVseDMwNTAgbXVsdGlwbHkgODgxMjMwNjA5ODc3MC4yMDA3NTIxMzkxNDIwMzM1NjlFLTQyOCAyNjc5MC4xNzM4MDE2Mzk3NTE4Njk3MjcyMDQyNzAzMEUrNTY4IC0+IDIuMzYwODMyMTE5NzkzMDM2Mzk4MTI3NjUyMTg3NzMyRSsxNTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA1MCBwb3dlciA4ODEyMzA2MDk4NzcwLjIwMDc1MjEzOTE0MjAzMzU2OUUtNDI4IDMgLT4gNi44NDMzNDk1Mjc0NzY5NjcyNzQxMjkwNDM5NDk5NjlFLTEyNDYgSW5leGFjdCBSb3VuZGVkCityZW14MzA1MCByZW1haW5kZXIgODgxMjMwNjA5ODc3MC4yMDA3NTIxMzkxNDIwMzM1NjlFLTQyOCAyNjc5MC4xNzM4MDE2Mzk3NTE4Njk3MjcyMDQyNzAzMEUrNTY4IC0+IDguODEyMzA2MDk4NzcwMjAwNzUyMTM5MTQyMDMzNTY5RS00MTYKK3N1YngzMDUwIHN1YnRyYWN0IDg4MTIzMDYwOTg3NzAuMjAwNzUyMTM5MTQyMDMzNTY5RS00MjggMjY3OTAuMTczODAxNjM5NzUxODY5NzI3MjA0MjcwMzBFKzU2OCAtPiAtMi42NzkwMTczODAxNjM5NzUxODY5NzI3MjA0MjcwMzBFKzU3MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDUxIGFkZCA4MDEwODAzMy4xMjcyNDgzODcxODczNjkyMjUwMDkwNCAtNzA2MjA3MjU1MDkyLjc2NDUxOTIzMTAwNzg4OTI4NjkgLT4gLTcwNjEyNzE0NzA1OS42MzcyNzA4NDM4MjA1MjAwNjE5IEluZXhhY3QgUm91bmRlZAorY29teDMwNTEgY29tcGFyZSA4MDEwODAzMy4xMjcyNDgzODcxODczNjkyMjUwMDkwNCAtNzA2MjA3MjU1MDkyLjc2NDUxOTIzMTAwNzg4OTI4NjkgLT4gMQorZGl2eDMwNTEgZGl2aWRlIDgwMTA4MDMzLjEyNzI0ODM4NzE4NzM2OTIyNTAwOTA0IC03MDYyMDcyNTUwOTIuNzY0NTE5MjMxMDA3ODg5Mjg2OSAtPiAtMC4wMDAxMTM0MzQxNjkwMDU3MDYwMTA1MzI1Mzk3ODYzOTk2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNTEgZGl2aWRlaW50IDgwMTA4MDMzLjEyNzI0ODM4NzE4NzM2OTIyNTAwOTA0IC03MDYyMDcyNTUwOTIuNzY0NTE5MjMxMDA3ODg5Mjg2OSAtPiAtMAorbXVseDMwNTEgbXVsdGlwbHkgODAxMDgwMzMuMTI3MjQ4Mzg3MTg3MzY5MjI1MDA5MDQgLTcwNjIwNzI1NTA5Mi43NjQ1MTkyMzEwMDc4ODkyODY5IC0+IC01NjU3Mjg3NDE4NTY3NDMzMjM5OC4zNjAwNDExNDM3MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDUxIHBvd2VyIDgwMTA4MDMzLjEyNzI0ODM4NzE4NzM2OTIyNTAwOTA0IC03IC0+IDQuNzIzNTM5MTQ1MDQyMzM2NDgzMDA4Njc0MDYwMzI0RS01NiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDUxIHJlbWFpbmRlciA4MDEwODAzMy4xMjcyNDgzODcxODczNjkyMjUwMDkwNCAtNzA2MjA3MjU1MDkyLjc2NDUxOTIzMTAwNzg4OTI4NjkgLT4gODAxMDgwMzMuMTI3MjQ4Mzg3MTg3MzY5MjI1MDA5MDQKK3N1YngzMDUxIHN1YnRyYWN0IDgwMTA4MDMzLjEyNzI0ODM4NzE4NzM2OTIyNTAwOTA0IC03MDYyMDcyNTUwOTIuNzY0NTE5MjMxMDA3ODg5Mjg2OSAtPiA3MDYyODczNjMxMjUuODkxNzY3NjE4MTk1MjU4NTExOSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDUyIGFkZCAtMzc5NDI4NDYyODIuNzYxMDE2NjM3ODkwNTkwMDM1MDUgLTUuNjQ5NDU2MDUzOTQyODUwMzUxMzEzODY5OTgzMTk3IC0+IC0zNzk0Mjg0NjI4OC40MTA0NzI2OTE4MzM0NDAzODYzNiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDUyIGNvbXBhcmUgLTM3OTQyODQ2MjgyLjc2MTAxNjYzNzg5MDU5MDAzNTA1IC01LjY0OTQ1NjA1Mzk0Mjg1MDM1MTMxMzg2OTk4MzE5NyAtPiAtMQorZGl2eDMwNTIgZGl2aWRlIC0zNzk0Mjg0NjI4Mi43NjEwMTY2Mzc4OTA1OTAwMzUwNSAtNS42NDk0NTYwNTM5NDI4NTAzNTEzMTM4Njk5ODMxOTcgLT4gNjcxNjE5NDYwNy4xMzkyMjQ3MzUwMzI1NjYzMjg5NjAgSW5leGFjdCBSb3VuZGVkCitkdml4MzA1MiBkaXZpZGVpbnQgLTM3OTQyODQ2MjgyLjc2MTAxNjYzNzg5MDU5MDAzNTA1IC01LjY0OTQ1NjA1Mzk0Mjg1MDM1MTMxMzg2OTk4MzE5NyAtPiA2NzE2MTk0NjA3CittdWx4MzA1MiBtdWx0aXBseSAtMzc5NDI4NDYyODIuNzYxMDE2NjM3ODkwNTkwMDM1MDUgLTUuNjQ5NDU2MDUzOTQyODUwMzUxMzEzODY5OTgzMTk3IC0+IDIxNDM1NjQ0MjYzNS45NjcyMDA5NDQ5MTQwOTMzMzY2IEluZXhhY3QgUm91bmRlZAorcG93eDMwNTIgcG93ZXIgLTM3OTQyODQ2MjgyLjc2MTAxNjYzNzg5MDU5MDAzNTA1IC02IC0+IDMuMzUxMzU1OTg2MzgyNjQ2MDQ2NzczMDA4NzUzODg1RS02NCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDUyIHJlbWFpbmRlciAtMzc5NDI4NDYyODIuNzYxMDE2NjM3ODkwNTkwMDM1MDUgLTUuNjQ5NDU2MDUzOTQyODUwMzUxMzEzODY5OTgzMTk3IC0+IC0wLjc4NjU0NDAyMjE4ODMyMTA4OTYwMzEyNzk4MTQyMQorc3VieDMwNTIgc3VidHJhY3QgLTM3OTQyODQ2MjgyLjc2MTAxNjYzNzg5MDU5MDAzNTA1IC01LjY0OTQ1NjA1Mzk0Mjg1MDM1MTMxMzg2OTk4MzE5NyAtPiAtMzc5NDI4NDYyNzcuMTExNTYwNTgzOTQ3NzM5NjgzNzQgSW5leGFjdCBSb3VuZGVkCithZGR4MzA1MyBhZGQgOTI2NTk2MzIxMTUzMDUuMTM3MzU0Mzc3Mjg0NDU1NDEgNjQ4MzQzOC4zMTc4NjI4NTE2NzY0NjgwOTQyNjE0MTBFLTEzOSAtPiA5MjY1OTYzMjExNTMwNS4xMzczNTQzNzcyODQ0NTU0MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDUzIGNvbXBhcmUgOTI2NTk2MzIxMTUzMDUuMTM3MzU0Mzc3Mjg0NDU1NDEgNjQ4MzQzOC4zMTc4NjI4NTE2NzY0NjgwOTQyNjE0MTBFLTEzOSAtPiAxCitkaXZ4MzA1MyBkaXZpZGUgOTI2NTk2MzIxMTUzMDUuMTM3MzU0Mzc3Mjg0NDU1NDEgNjQ4MzQzOC4zMTc4NjI4NTE2NzY0NjgwOTQyNjE0MTBFLTEzOSAtPiAxLjQyOTE3NDI2NzkxOTEzNTcxMDQxMDUyOTIxMTc5MUUrMTQ2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNTMgZGl2aWRlaW50IDkyNjU5NjMyMTE1MzA1LjEzNzM1NDM3NzI4NDQ1NTQxIDY0ODM0MzguMzE3ODYyODUxNjc2NDY4MDk0MjYxNDEwRS0xMzkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDUzIG11bHRpcGx5IDkyNjU5NjMyMTE1MzA1LjEzNzM1NDM3NzI4NDQ1NTQxIDY0ODM0MzguMzE3ODYyODUxNjc2NDY4MDk0MjYxNDEwRS0xMzkgLT4gNi4wMDc1MzAwOTM3NTQ0NDYwODU4MTkyNTU5ODc4NzhFLTExOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDUzIHBvd2VyIDkyNjU5NjMyMTE1MzA1LjEzNzM1NDM3NzI4NDQ1NTQxIDYgLT4gNi4zMjkxMjE0NTE5NTM0NjE1NDY2OTYwNTE1NjMzMjNFKzgzIEluZXhhY3QgUm91bmRlZAorcmVteDMwNTMgcmVtYWluZGVyIDkyNjU5NjMyMTE1MzA1LjEzNzM1NDM3NzI4NDQ1NTQxIDY0ODM0MzguMzE3ODYyODUxNjc2NDY4MDk0MjYxNDEwRS0xMzkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDUzIHN1YnRyYWN0IDkyNjU5NjMyMTE1MzA1LjEzNzM1NDM3NzI4NDQ1NTQxIDY0ODM0MzguMzE3ODYyODUxNjc2NDY4MDk0MjYxNDEwRS0xMzkgLT4gOTI2NTk2MzIxMTUzMDUuMTM3MzU0Mzc3Mjg0NDU1NDEgSW5leGFjdCBSb3VuZGVkCithZGR4MzA1NCBhZGQgMjgzODk0OC41ODk4Mzc1OTU0OTQxNTIxNTA2NDcxOTQgNTY5NTQ3MDI2MjQ3LjU0Njk1NjM3MDE0MTU3MTU5NjAgLT4gNTY5NTQ5ODY1MTk2LjEzNjc5Mzk2NTYzNTcyMzc0NjYgSW5leGFjdCBSb3VuZGVkCitjb214MzA1NCBjb21wYXJlIDI4Mzg5NDguNTg5ODM3NTk1NDk0MTUyMTUwNjQ3MTk0IDU2OTU0NzAyNjI0Ny41NDY5NTYzNzAxNDE1NzE1OTYwIC0+IC0xCitkaXZ4MzA1NCBkaXZpZGUgMjgzODk0OC41ODk4Mzc1OTU0OTQxNTIxNTA2NDcxOTQgNTY5NTQ3MDI2MjQ3LjU0Njk1NjM3MDE0MTU3MTU5NjAgLT4gMC4wMDAwMDQ5ODQ1NzI3NTUxOTgwNTc0ODE5MDcyODEwODA0MDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzA1NCBkaXZpZGVpbnQgMjgzODk0OC41ODk4Mzc1OTU0OTQxNTIxNTA2NDcxOTQgNTY5NTQ3MDI2MjQ3LjU0Njk1NjM3MDE0MTU3MTU5NjAgLT4gMAorbXVseDMwNTQgbXVsdGlwbHkgMjgzODk0OC41ODk4Mzc1OTU0OTQxNTIxNTA2NDcxOTQgNTY5NTQ3MDI2MjQ3LjU0Njk1NjM3MDE0MTU3MTU5NjAgLT4gMTYxNjkxNDcyNzAxMTY2OTQxOS4zOTA5NTk5ODQyNzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA1NCBwb3dlciAyODM4OTQ4LjU4OTgzNzU5NTQ5NDE1MjE1MDY0NzE5NCA2IC0+IDUuMjM1MzQzMzM0OTg2MDU5NzUzMDk2ODg0MDgwNjczRSszOCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDU0IHJlbWFpbmRlciAyODM4OTQ4LjU4OTgzNzU5NTQ5NDE1MjE1MDY0NzE5NCA1Njk1NDcwMjYyNDcuNTQ2OTU2MzcwMTQxNTcxNTk2MCAtPiAyODM4OTQ4LjU4OTgzNzU5NTQ5NDE1MjE1MDY0NzE5NAorc3VieDMwNTQgc3VidHJhY3QgMjgzODk0OC41ODk4Mzc1OTU0OTQxNTIxNTA2NDcxOTQgNTY5NTQ3MDI2MjQ3LjU0Njk1NjM3MDE0MTU3MTU5NjAgLT4gLTU2OTU0NDE4NzI5OC45NTcxMTg3NzQ2NDc0MTk0NDU0IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNTUgYWRkIDUyNDk5NTIwNDUyMy42MDUzMzA3OTQxNzc1Nzk0Mjg3RSs2OTQgMTU4OTYwMDg3OTY4OTUxNzEwMDUyNzI5MzAyODU1MyAtPiA1LjI0OTk1MjA0NTIzNjA1MzMwNzk0MTc3NTc5NDI4N0UrNzA1IEluZXhhY3QgUm91bmRlZAorY29teDMwNTUgY29tcGFyZSA1MjQ5OTUyMDQ1MjMuNjA1MzMwNzk0MTc3NTc5NDI4N0UrNjk0IDE1ODk2MDA4Nzk2ODk1MTcxMDA1MjcyOTMwMjg1NTMgLT4gMQorZGl2eDMwNTUgZGl2aWRlIDUyNDk5NTIwNDUyMy42MDUzMzA3OTQxNzc1Nzk0Mjg3RSs2OTQgMTU4OTYwMDg3OTY4OTUxNzEwMDUyNzI5MzAyODU1MyAtPiAzLjMwMjY4NTY2OTI4NjY3MDcwODU1NDc1MzEzOTIzM0UrNjc1IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNTUgZGl2aWRlaW50IDUyNDk5NTIwNDUyMy42MDUzMzA3OTQxNzc1Nzk0Mjg3RSs2OTQgMTU4OTYwMDg3OTY4OTUxNzEwMDUyNzI5MzAyODU1MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNTUgbXVsdGlwbHkgNTI0OTk1MjA0NTIzLjYwNTMzMDc5NDE3NzU3OTQyODdFKzY5NCAxNTg5NjAwODc5Njg5NTE3MTAwNTI3MjkzMDI4NTUzIC0+IDguMzQ1MzI4Mzg5NDM1MDA5ODEyOTMzNTk5ODg5NDQ3RSs3MzUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA1NSBwb3dlciA1MjQ5OTUyMDQ1MjMuNjA1MzMwNzk0MTc3NTc5NDI4N0UrNjk0IDIgLT4gMi43NTYxOTk2NDc3Mjc4MjE5MTE4NTcxNjAyMzA4NDlFKzE0MTEgSW5leGFjdCBSb3VuZGVkCityZW14MzA1NSByZW1haW5kZXIgNTI0OTk1MjA0NTIzLjYwNTMzMDc5NDE3NzU3OTQyODdFKzY5NCAxNTg5NjAwODc5Njg5NTE3MTAwNTI3MjkzMDI4NTUzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA1NSBzdWJ0cmFjdCA1MjQ5OTUyMDQ1MjMuNjA1MzMwNzk0MTc3NTc5NDI4N0UrNjk0IDE1ODk2MDA4Nzk2ODk1MTcxMDA1MjcyOTMwMjg1NTMgLT4gNS4yNDk5NTIwNDUyMzYwNTMzMDc5NDE3NzU3OTQyODdFKzcwNSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDU2IGFkZCAtNTcxMzE1NzM2Nzc0NTIuMTU0NDk5MjE3MjUwOTcyOTAgNDY2OTY4MTQzMDczNi4zMjY4NTg1MDg3MTU2NDM3NjkgLT4gLTUyNDYxODkyMjQ2NzE1LjgyNzY0MDcwODUzNTMyOTEzIEluZXhhY3QgUm91bmRlZAorY29teDMwNTYgY29tcGFyZSAtNTcxMzE1NzM2Nzc0NTIuMTU0NDk5MjE3MjUwOTcyOTAgNDY2OTY4MTQzMDczNi4zMjY4NTg1MDg3MTU2NDM3NjkgLT4gLTEKK2RpdngzMDU2IGRpdmlkZSAtNTcxMzE1NzM2Nzc0NTIuMTU0NDk5MjE3MjUwOTcyOTAgNDY2OTY4MTQzMDczNi4zMjY4NTg1MDg3MTU2NDM3NjkgLT4gLTEyLjIzNDU3NjI4MjEwMDU3NzMzNjQzNTc1MTQzNjk0IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNTYgZGl2aWRlaW50IC01NzEzMTU3MzY3NzQ1Mi4xNTQ0OTkyMTcyNTA5NzI5MCA0NjY5NjgxNDMwNzM2LjMyNjg1ODUwODcxNTY0Mzc2OSAtPiAtMTIKK211bHgzMDU2IG11bHRpcGx5IC01NzEzMTU3MzY3NzQ1Mi4xNTQ0OTkyMTcyNTA5NzI5MCA0NjY5NjgxNDMwNzM2LjMyNjg1ODUwODcxNTY0Mzc2OSAtPiAtMjY2Nzg2MjQ4NzEwMzQyNjQ3NzQ2MDYzMzIyLjA1NDQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA1NiBwb3dlciAtNTcxMzE1NzM2Nzc0NTIuMTU0NDk5MjE3MjUwOTcyOTAgNSAtPiAtNi4wODY2ODY1MDM3NTI2NzkzNzU0MzAwMTk1MDM2NzlFKzY4IEluZXhhY3QgUm91bmRlZAorcmVteDMwNTYgcmVtYWluZGVyIC01NzEzMTU3MzY3NzQ1Mi4xNTQ0OTkyMTcyNTA5NzI5MCA0NjY5NjgxNDMwNzM2LjMyNjg1ODUwODcxNTY0Mzc2OSAtPiAtMTA5NTM5NjUwODYxNi4yMzIxOTcxMTI2NjMyNDc2NzIKK3N1YngzMDU2IHN1YnRyYWN0IC01NzEzMTU3MzY3NzQ1Mi4xNTQ0OTkyMTcyNTA5NzI5MCA0NjY5NjgxNDMwNzM2LjMyNjg1ODUwODcxNTY0Mzc2OSAtPiAtNjE4MDEyNTUxMDgxODguNDgxMzU3NzI1OTY2NjE2NjcgSW5leGFjdCBSb3VuZGVkCithZGR4MzA1NyBhZGQgOTA3OTQ4MjYuNTU1MjgwMTg3ODE4MzA0NjMzODM0MTEgLTUuNDcxNTAyMjcwMzUxMjMxMTEwMDI3NjQ3MjE2MTI4IC0+IDkwNzk0ODIxLjA4Mzc3NzkxNzQ2NzA3MzUyMzgwNjQ2IEluZXhhY3QgUm91bmRlZAorY29teDMwNTcgY29tcGFyZSA5MDc5NDgyNi41NTUyODAxODc4MTgzMDQ2MzM4MzQxMSAtNS40NzE1MDIyNzAzNTEyMzExMTAwMjc2NDcyMTYxMjggLT4gMQorZGl2eDMwNTcgZGl2aWRlIDkwNzk0ODI2LjU1NTI4MDE4NzgxODMwNDYzMzgzNDExIC01LjQ3MTUwMjI3MDM1MTIzMTExMDAyNzY0NzIxNjEyOCAtPiAtMTY1OTQxMzEuMjAzNjUwNTQ5Mjg0MjgzMTMyMzIyNDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzA1NyBkaXZpZGVpbnQgOTA3OTQ4MjYuNTU1MjgwMTg3ODE4MzA0NjMzODM0MTEgLTUuNDcxNTAyMjcwMzUxMjMxMTEwMDI3NjQ3MjE2MTI4IC0+IC0xNjU5NDEzMQorbXVseDMwNTcgbXVsdGlwbHkgOTA3OTQ4MjYuNTU1MjgwMTg3ODE4MzA0NjMzODM0MTEgLTUuNDcxNTAyMjcwMzUxMjMxMTEwMDI3NjQ3MjE2MTI4IC0+IC00OTY3ODQwOTkuNjMzMzYxNzk1ODQ5NjU4OTEyNDk2NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDU3IHBvd2VyIDkwNzk0ODI2LjU1NTI4MDE4NzgxODMwNDYzMzgzNDExIC01IC0+IDEuNjIwNjY5NTkwNTMyODU2NTIzNTY1NzQyOTUzOTk3RS00MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDU3IHJlbWFpbmRlciA5MDc5NDgyNi41NTUyODAxODc4MTgzMDQ2MzM4MzQxMSAtNS40NzE1MDIyNzAzNTEyMzExMTAwMjc2NDcyMTYxMjggLT4gMS4xMTQyNzQ0NDI3NjcyMzA0NDIzMDc4OTY2NTUyMzIKK3N1YngzMDU3IHN1YnRyYWN0IDkwNzk0ODI2LjU1NTI4MDE4NzgxODMwNDYzMzgzNDExIC01LjQ3MTUwMjI3MDM1MTIzMTExMDAyNzY0NzIxNjEyOCAtPiA5MDc5NDgzMi4wMjY3ODI0NTgxNjk1MzU3NDM4NjE3NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDU4IGFkZCA1ODUwODc5NDcyOS4zNTE5MTE2MDg0MDk4MDQ4OTEzOCAtNDcwNjA4NjcuMjQ5ODgyNzk2ODA4MjQzOTc0NDc1NTEgLT4gNTg0NjE3MzM4NjIuMTAyMDI4ODExNjAxNTYwOTE2OTAgSW5leGFjdCBSb3VuZGVkCitjb214MzA1OCBjb21wYXJlIDU4NTA4Nzk0NzI5LjM1MTkxMTYwODQwOTgwNDg5MTM4IC00NzA2MDg2Ny4yNDk4ODI3OTY4MDgyNDM5NzQ0NzU1MSAtPiAxCitkaXZ4MzA1OCBkaXZpZGUgNTg1MDg3OTQ3MjkuMzUxOTExNjA4NDA5ODA0ODkxMzggLTQ3MDYwODY3LjI0OTg4Mjc5NjgwODI0Mzk3NDQ3NTUxIC0+IC0xMjQzLjI1Nzg5NDQ3NzAyMTY3ODgwOTMzNzg3NTMwNCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDU4IGRpdmlkZWludCA1ODUwODc5NDcyOS4zNTE5MTE2MDg0MDk4MDQ4OTEzOCAtNDcwNjA4NjcuMjQ5ODgyNzk2ODA4MjQzOTc0NDc1NTEgLT4gLTEyNDMKK211bHgzMDU4IG11bHRpcGx5IDU4NTA4Nzk0NzI5LjM1MTkxMTYwODQwOTgwNDg5MTM4IC00NzA2MDg2Ny4yNDk4ODI3OTY4MDgyNDM5NzQ0NzU1MSAtPiAtMjc1MzQ3NDYyMTcwODY3MjU3My4yNDkwMjk2NDM5NjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA1OCBwb3dlciA1ODUwODc5NDcyOS4zNTE5MTE2MDg0MDk4MDQ4OTEzOCAtNDcwNjA4NjcgLT4gMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwNTggcmVtYWluZGVyIDU4NTA4Nzk0NzI5LjM1MTkxMTYwODQwOTgwNDg5MTM4IC00NzA2MDg2Ny4yNDk4ODI3OTY4MDgyNDM5NzQ0NzU1MSAtPiAxMjEzNjczNy43NDc1OTUxNzU3NjI1NDQ2MTgzMjEwNworc3VieDMwNTggc3VidHJhY3QgNTg1MDg3OTQ3MjkuMzUxOTExNjA4NDA5ODA0ODkxMzggLTQ3MDYwODY3LjI0OTg4Mjc5NjgwODI0Mzk3NDQ3NTUxIC0+IDU4NTU1ODU1NTk2LjYwMTc5NDQwNTIxODA0ODg2NTg2IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNTkgYWRkIC03NDYxMDQuMDc2ODA3ODQ3NDQyNjQ2NDIxOTQxNjMzMkUrMDA2IDk1OTU0MTguMzAwNjEzNzU0NTU2NjcxODUyODAxNjY3RSszODUgLT4gOS41OTU0MTgzMDA2MTM3NTQ1NTY2NzE4NTI4MDE2NjdFKzM5MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDU5IGNvbXBhcmUgLTc0NjEwNC4wNzY4MDc4NDc0NDI2NDY0MjE5NDE2MzMyRSswMDYgOTU5NTQxOC4zMDA2MTM3NTQ1NTY2NzE4NTI4MDE2NjdFKzM4NSAtPiAtMQorZGl2eDMwNTkgZGl2aWRlIC03NDYxMDQuMDc2ODA3ODQ3NDQyNjQ2NDIxOTQxNjMzMkUrMDA2IDk1OTU0MTguMzAwNjEzNzU0NTU2NjcxODUyODAxNjY3RSszODUgLT4gLTcuNzc1NjI4NDY1OTMyNzg5NzAwNTQ3ODcyNTExNzQ1RS0zODEgSW5leGFjdCBSb3VuZGVkCitkdml4MzA1OSBkaXZpZGVpbnQgLTc0NjEwNC4wNzY4MDc4NDc0NDI2NDY0MjE5NDE2MzMyRSswMDYgOTU5NTQxOC4zMDA2MTM3NTQ1NTY2NzE4NTI4MDE2NjdFKzM4NSAtPiAtMAorbXVseDMwNTkgbXVsdGlwbHkgLTc0NjEwNC4wNzY4MDc4NDc0NDI2NDY0MjE5NDE2MzMyRSswMDYgOTU5NTQxOC4zMDA2MTM3NTQ1NTY2NzE4NTI4MDE2NjdFKzM4NSAtPiAtNy4xNTkxODA3MTI3NjQ1NDk3MTE2Njk5Mzk5NDcwODRFKzQwMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDU5IHBvd2VyIC03NDYxMDQuMDc2ODA3ODQ3NDQyNjQ2NDIxOTQxNjMzMkUrMDA2IDEwIC0+IDUuMzQ1NTcxMzQ2MzAyNTgyODgyODA1MDM1OTk2Njk2RSsxMTggSW5leGFjdCBSb3VuZGVkCityZW14MzA1OSByZW1haW5kZXIgLTc0NjEwNC4wNzY4MDc4NDc0NDI2NDY0MjE5NDE2MzMyRSswMDYgOTU5NTQxOC4zMDA2MTM3NTQ1NTY2NzE4NTI4MDE2NjdFKzM4NSAtPiAtNzQ2MTA0MDc2ODA3Ljg0NzQ0MjY0NjQyMTk0MTYzMzIKK3N1YngzMDU5IHN1YnRyYWN0IC03NDYxMDQuMDc2ODA3ODQ3NDQyNjQ2NDIxOTQxNjMzMkUrMDA2IDk1OTU0MTguMzAwNjEzNzU0NTU2NjcxODUyODAxNjY3RSszODUgLT4gLTkuNTk1NDE4MzAwNjEzNzU0NTU2NjcxODUyODAxNjY3RSszOTEgSW5leGFjdCBSb3VuZGVkCithZGR4MzA2MCBhZGQgNTUuOTk0Mjc2MzI2ODgzODc0MDA0MDM3ODk2NTk0NTlFKzExOSAtOS4xNzA1MzA0NTA4ODE2MTI4NTM5OTg0ODkzNDAxMjcgLT4gNS41OTk0Mjc2MzI2ODgzODc0MDA0MDM3ODk2NTk0NTlFKzEyMCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDYwIGNvbXBhcmUgNTUuOTk0Mjc2MzI2ODgzODc0MDA0MDM3ODk2NTk0NTlFKzExOSAtOS4xNzA1MzA0NTA4ODE2MTI4NTM5OTg0ODkzNDAxMjcgLT4gMQorZGl2eDMwNjAgZGl2aWRlIDU1Ljk5NDI3NjMyNjg4Mzg3NDAwNDAzNzg5NjU5NDU5RSsxMTkgLTkuMTcwNTMwNDUwODgxNjEyODUzOTk4NDg5MzQwMTI3IC0+IC02LjEwNTg5Mjg1MTc1OTgyODE3NjY1NTY4NTExMTQ5MUUrMTE5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNjAgZGl2aWRlaW50IDU1Ljk5NDI3NjMyNjg4Mzg3NDAwNDAzNzg5NjU5NDU5RSsxMTkgLTkuMTcwNTMwNDUwODgxNjEyODUzOTk4NDg5MzQwMTI3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzA2MCBtdWx0aXBseSA1NS45OTQyNzYzMjY4ODM4NzQwMDQwMzc4OTY1OTQ1OUUrMTE5IC05LjE3MDUzMDQ1MDg4MTYxMjg1Mzk5ODQ4OTM0MDEyNyAtPiAtNS4xMzQ5NzIxNjEzMDc2Nzk5MzkyODExNzA5NDQ1NTZFKzEyMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDYwIHBvd2VyIDU1Ljk5NDI3NjMyNjg4Mzg3NDAwNDAzNzg5NjU5NDU5RSsxMTkgLTkgLT4gMS44NDgwMjI1ODQ3NjQzODQwNzc2NzIwNDEwNTYzOTZFLTEwODcgSW5leGFjdCBSb3VuZGVkCityZW14MzA2MCByZW1haW5kZXIgNTUuOTk0Mjc2MzI2ODgzODc0MDA0MDM3ODk2NTk0NTlFKzExOSAtOS4xNzA1MzA0NTA4ODE2MTI4NTM5OTg0ODkzNDAxMjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDYwIHN1YnRyYWN0IDU1Ljk5NDI3NjMyNjg4Mzg3NDAwNDAzNzg5NjU5NDU5RSsxMTkgLTkuMTcwNTMwNDUwODgxNjEyODUzOTk4NDg5MzQwMTI3IC0+IDUuNTk5NDI3NjMyNjg4Mzg3NDAwNDAzNzg5NjU5NDU5RSsxMjAgSW5leGFjdCBSb3VuZGVkCithZGR4MzA2MSBhZGQgLTQxMjE0MjY1NjI4LjgzODAxMjQxNDY3MzE3MjcwNTk1IDEwMTUzMzYzMjM3OTgzODk5MDMzNjE5NzgyNzEzNTQgLT4gMTAxNTMzNjMyMzc5ODM4OTkwMzMyMDc2NDAwNTcyNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDYxIGNvbXBhcmUgLTQxMjE0MjY1NjI4LjgzODAxMjQxNDY3MzE3MjcwNTk1IDEwMTUzMzYzMjM3OTgzODk5MDMzNjE5NzgyNzEzNTQgLT4gLTEKK2RpdngzMDYxIGRpdmlkZSAtNDEyMTQyNjU2MjguODM4MDEyNDE0NjczMTcyNzA1OTUgMTAxNTMzNjMyMzc5ODM4OTkwMzM2MTk3ODI3MTM1NCAtPiAtNC4wNTkxNzM3NTk3NTAzNDIyNDc2MjA3MDYzODQwMjdFLTIwIEluZXhhY3QgUm91bmRlZAorZHZpeDMwNjEgZGl2aWRlaW50IC00MTIxNDI2NTYyOC44MzgwMTI0MTQ2NzMxNzI3MDU5NSAxMDE1MzM2MzIzNzk4Mzg5OTAzMzYxOTc4MjcxMzU0IC0+IC0wCittdWx4MzA2MSBtdWx0aXBseSAtNDEyMTQyNjU2MjguODM4MDEyNDE0NjczMTcyNzA1OTUgMTAxNTMzNjMyMzc5ODM4OTkwMzM2MTk3ODI3MTM1NCAtPiAtNC4xODQ2MzQwOTUxNjM0NzIzODQwMjg1NDkzNzgzOTJFKzQwIEluZXhhY3QgUm91bmRlZAorcG93eDMwNjEgcG93ZXIgLTQxMjE0MjY1NjI4LjgzODAxMjQxNDY3MzE3MjcwNTk1IDEgLT4gLTQxMjE0MjY1NjI4LjgzODAxMjQxNDY3MzE3MjcwNTk1CityZW14MzA2MSByZW1haW5kZXIgLTQxMjE0MjY1NjI4LjgzODAxMjQxNDY3MzE3MjcwNTk1IDEwMTUzMzYzMjM3OTgzODk5MDMzNjE5NzgyNzEzNTQgLT4gLTQxMjE0MjY1NjI4LjgzODAxMjQxNDY3MzE3MjcwNTk1CitzdWJ4MzA2MSBzdWJ0cmFjdCAtNDEyMTQyNjU2MjguODM4MDEyNDE0NjczMTcyNzA1OTUgMTAxNTMzNjMyMzc5ODM4OTkwMzM2MTk3ODI3MTM1NCAtPiAtMTAxNTMzNjMyMzc5ODM4OTkwMzQwMzE5MjUzNjk4MyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDYyIGFkZCA4OTkzNy4zOTc0OTIwMTA5NTU3MDM1NzU1NzQzMDgyMiA4MjM1MTU1NDIxMDA5My42MDg3OTQ3NjAyNzgwMDMzMSAtPiA4MjM1MTU1NDMwMDAzMS4wMDYyODY3NzEyMzM3MDY4OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDYyIGNvbXBhcmUgODk5MzcuMzk3NDkyMDEwOTU1NzAzNTc1NTc0MzA4MjIgODIzNTE1NTQyMTAwOTMuNjA4Nzk0NzYwMjc4MDAzMzEgLT4gLTEKK2RpdngzMDYyIGRpdmlkZSA4OTkzNy4zOTc0OTIwMTA5NTU3MDM1NzU1NzQzMDgyMiA4MjM1MTU1NDIxMDA5My42MDg3OTQ3NjAyNzgwMDMzMSAtPiAxLjA5MjExNTM2MjY2MjkxMzQxNTU5MjkzMDk4MjEyOUUtOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDYyIGRpdmlkZWludCA4OTkzNy4zOTc0OTIwMTA5NTU3MDM1NzU1NzQzMDgyMiA4MjM1MTU1NDIxMDA5My42MDg3OTQ3NjAyNzgwMDMzMSAtPiAwCittdWx4MzA2MiBtdWx0aXBseSA4OTkzNy4zOTc0OTIwMTA5NTU3MDM1NzU1NzQzMDgyMiA4MjM1MTU1NDIxMDA5My42MDg3OTQ3NjAyNzgwMDMzMSAtPiA3NDA2NDg0NDY1MDc4MDc3MTkxLjkyMDAxNTc5MzY2MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDYyIHBvd2VyIDg5OTM3LjM5NzQ5MjAxMDk1NTcwMzU3NTU3NDMwODIyIDggLT4gNC4yODA3NzYyNjc3MjM5MTMwNDMwNTAxMDA5MzQyOTFFKzM5IEluZXhhY3QgUm91bmRlZAorcmVteDMwNjIgcmVtYWluZGVyIDg5OTM3LjM5NzQ5MjAxMDk1NTcwMzU3NTU3NDMwODIyIDgyMzUxNTU0MjEwMDkzLjYwODc5NDc2MDI3ODAwMzMxIC0+IDg5OTM3LjM5NzQ5MjAxMDk1NTcwMzU3NTU3NDMwODIyCitzdWJ4MzA2MiBzdWJ0cmFjdCA4OTkzNy4zOTc0OTIwMTA5NTU3MDM1NzU1NzQzMDgyMiA4MjM1MTU1NDIxMDA5My42MDg3OTQ3NjAyNzgwMDMzMSAtPiAtODIzNTE1NTQxMjAxNTYuMjExMzAyNzQ5MzIyMjk5NzMgSW5leGFjdCBSb3VuZGVkCithZGR4MzA2MyBhZGQgMDE3MTI2NjEuNjQ2NzcwODIxNTYyODQxMjU0ODY5NDNFKzM1OSA1NzkzMi43ODQzNTUyOTQ4MzI0MTU1MjA0MjExNTgzN0UtMDM3IC0+IDEuNzEyNjYxNjQ2NzcwODIxNTYyODQxMjU0ODY5NDMwRSszNjUgSW5leGFjdCBSb3VuZGVkCitjb214MzA2MyBjb21wYXJlIDAxNzEyNjYxLjY0Njc3MDgyMTU2Mjg0MTI1NDg2OTQzRSszNTkgNTc5MzIuNzg0MzU1Mjk0ODMyNDE1NTIwNDIxMTU4MzdFLTAzNyAtPiAxCitkaXZ4MzA2MyBkaXZpZGUgMDE3MTI2NjEuNjQ2NzcwODIxNTYyODQxMjU0ODY5NDNFKzM1OSA1NzkzMi43ODQzNTUyOTQ4MzI0MTU1MjA0MjExNTgzN0UtMDM3IC0+IDIuOTU2MjkwOTI1NDc1NDE0MTg1OTYwOTk5Nzg4ODQ4RSszOTcgSW5leGFjdCBSb3VuZGVkCitkdml4MzA2MyBkaXZpZGVpbnQgMDE3MTI2NjEuNjQ2NzcwODIxNTYyODQxMjU0ODY5NDNFKzM1OSA1NzkzMi43ODQzNTUyOTQ4MzI0MTU1MjA0MjExNTgzN0UtMDM3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzA2MyBtdWx0aXBseSAwMTcxMjY2MS42NDY3NzA4MjE1NjI4NDEyNTQ4Njk0M0UrMzU5IDU3OTMyLjc4NDM1NTI5NDgzMjQxNTUyMDQyMTE1ODM3RS0wMzcgLT4gOS45MjE5MjU3ODU1OTU4MTM1ODc2NTUzMTIzMDc5MzBFKzMzMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDYzIHBvd2VyIDAxNzEyNjYxLjY0Njc3MDgyMTU2Mjg0MTI1NDg2OTQzRSszNTkgNiAtPiAyLjUyMzY1MTgwMzMyMzA0NzcxMTczNTUwMTk0NDk1OUUrMjE5MSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDYzIHJlbWFpbmRlciAwMTcxMjY2MS42NDY3NzA4MjE1NjI4NDEyNTQ4Njk0M0UrMzU5IDU3OTMyLjc4NDM1NTI5NDgzMjQxNTUyMDQyMTE1ODM3RS0wMzcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDYzIHN1YnRyYWN0IDAxNzEyNjYxLjY0Njc3MDgyMTU2Mjg0MTI1NDg2OTQzRSszNTkgNTc5MzIuNzg0MzU1Mjk0ODMyNDE1NTIwNDIxMTU4MzdFLTAzNyAtPiAxLjcxMjY2MTY0Njc3MDgyMTU2Mjg0MTI1NDg2OTQzMEUrMzY1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNjQgYWRkIC0yNjQ3NTkzMzA2LjUyODYxNzY5MTM3MzQ3MDA1OTIxMyAtNjU1NTMxNTU4NzA5LjQ1ODIxNjg5MzAxOTEwMTQ0NjEgLT4gLTY1ODE3OTE1MjAxNS45ODY4MzQ1ODQzOTI1NzE1MDUzIEluZXhhY3QgUm91bmRlZAorY29teDMwNjQgY29tcGFyZSAtMjY0NzU5MzMwNi41Mjg2MTc2OTEzNzM0NzAwNTkyMTMgLTY1NTUzMTU1ODcwOS40NTgyMTY4OTMwMTkxMDE0NDYxIC0+IDEKK2RpdngzMDY0IGRpdmlkZSAtMjY0NzU5MzMwNi41Mjg2MTc2OTEzNzM0NzAwNTkyMTMgLTY1NTUzMTU1ODcwOS40NTgyMTY4OTMwMTkxMDE0NDYxIC0+IDAuMDA0MDM4ODQ5NDk3NTYwMzAzMTU4NjM5MTkyODk1NTQ0IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNjQgZGl2aWRlaW50IC0yNjQ3NTkzMzA2LjUyODYxNzY5MTM3MzQ3MDA1OTIxMyAtNjU1NTMxNTU4NzA5LjQ1ODIxNjg5MzAxOTEwMTQ0NjEgLT4gMAorbXVseDMwNjQgbXVsdGlwbHkgLTI2NDc1OTMzMDYuNTI4NjE3NjkxMzczNDcwMDU5MjEzIC02NTU1MzE1NTg3MDkuNDU4MjE2ODkzMDE5MTAxNDQ2MSAtPiAxNzM1NTgwOTY3MDU3NDMzMTUzMTIwLjA5OTY0MzY0MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDY0IHBvd2VyIC0yNjQ3NTkzMzA2LjUyODYxNzY5MTM3MzQ3MDA1OTIxMyAtNyAtPiAtMS4wOTY1ODE5MTQwMDU5MDI1ODM0MTM4MTAyMDE1NzFFLTY2IEluZXhhY3QgUm91bmRlZAorcmVteDMwNjQgcmVtYWluZGVyIC0yNjQ3NTkzMzA2LjUyODYxNzY5MTM3MzQ3MDA1OTIxMyAtNjU1NTMxNTU4NzA5LjQ1ODIxNjg5MzAxOTEwMTQ0NjEgLT4gLTI2NDc1OTMzMDYuNTI4NjE3NjkxMzczNDcwMDU5MjEzCitzdWJ4MzA2NCBzdWJ0cmFjdCAtMjY0NzU5MzMwNi41Mjg2MTc2OTEzNzM0NzAwNTkyMTMgLTY1NTUzMTU1ODcwOS40NTgyMTY4OTMwMTkxMDE0NDYxIC0+IDY1Mjg4Mzk2NTQwMi45Mjk1OTkyMDE2NDU2MzEzODY5IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNjUgYWRkIDI5MDQwNzg2OTA2NjU3NjUxMTY2MDMyNTMwOTk2NjhFLTMyOSAtNzEuNDU1ODY2MTkxNzYwOTE1OTkyNjQ3MTcwNDc4ODVFKzc4NyAtPiAtNy4xNDU1ODY2MTkxNzYwOTE1OTkyNjQ3MTcwNDc4ODVFKzc4OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDY1IGNvbXBhcmUgMjkwNDA3ODY5MDY2NTc2NTExNjYwMzI1MzA5OTY2OEUtMzI5IC03MS40NTU4NjYxOTE3NjA5MTU5OTI2NDcxNzA0Nzg4NUUrNzg3IC0+IDEKK2RpdngzMDY1IGRpdmlkZSAyOTA0MDc4NjkwNjY1NzY1MTE2NjAzMjUzMDk5NjY4RS0zMjkgLTcxLjQ1NTg2NjE5MTc2MDkxNTk5MjY0NzE3MDQ3ODg1RSs3ODcgLT4gLTQuMDY0MTU3MTQ0MDM2NzEyMzI1MDg0NDcyMDIyMzE2RS0xMDg4IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNjUgZGl2aWRlaW50IDI5MDQwNzg2OTA2NjU3NjUxMTY2MDMyNTMwOTk2NjhFLTMyOSAtNzEuNDU1ODY2MTkxNzYwOTE1OTkyNjQ3MTcwNDc4ODVFKzc4NyAtPiAtMAorbXVseDMwNjUgbXVsdGlwbHkgMjkwNDA3ODY5MDY2NTc2NTExNjYwMzI1MzA5OTY2OEUtMzI5IC03MS40NTU4NjYxOTE3NjA5MTU5OTI2NDcxNzA0Nzg4NUUrNzg3IC0+IC0yLjA3NTEzNDU4MzMwNTU3MTUyNzk2MjcxMDAxNzI2MkUrNDkwIEluZXhhY3QgUm91bmRlZAorcG93eDMwNjUgcG93ZXIgMjkwNDA3ODY5MDY2NTc2NTExNjYwMzI1MzA5OTY2OEUtMzI5IC03IC0+IDUuNzQwMzg5MjA4ODQyODk1NTYxMjUwMTI4NDA3ODAzRSsyMDg5IEluZXhhY3QgUm91bmRlZAorcmVteDMwNjUgcmVtYWluZGVyIDI5MDQwNzg2OTA2NjU3NjUxMTY2MDMyNTMwOTk2NjhFLTMyOSAtNzEuNDU1ODY2MTkxNzYwOTE1OTkyNjQ3MTcwNDc4ODVFKzc4NyAtPiAyLjkwNDA3ODY5MDY2NTc2NTExNjYwMzI1MzA5OTY2OEUtMjk5CitzdWJ4MzA2NSBzdWJ0cmFjdCAyOTA0MDc4NjkwNjY1NzY1MTE2NjAzMjUzMDk5NjY4RS0zMjkgLTcxLjQ1NTg2NjE5MTc2MDkxNTk5MjY0NzE3MDQ3ODg1RSs3ODcgLT4gNy4xNDU1ODY2MTkxNzYwOTE1OTkyNjQ3MTcwNDc4ODVFKzc4OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDY2IGFkZCAyMjA5NDMzODk3Mi4zOTEwOTcyNjUyMjQ3Nzk5OTUxNSAtNDA5ODQ2NTQ5MzcxLjM5MDA4MDUwMzk2Njg0MTcyMDNFLTQ5OSAtPiAyMjA5NDMzODk3Mi4zOTEwOTcyNjUyMjQ3Nzk5OTUxNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDY2IGNvbXBhcmUgMjIwOTQzMzg5NzIuMzkxMDk3MjY1MjI0Nzc5OTk1MTUgLTQwOTg0NjU0OTM3MS4zOTAwODA1MDM5NjY4NDE3MjAzRS00OTkgLT4gMQorZGl2eDMwNjYgZGl2aWRlIDIyMDk0MzM4OTcyLjM5MTA5NzI2NTIyNDc3OTk5NTE1IC00MDk4NDY1NDkzNzEuMzkwMDgwNTAzOTY2ODQxNzIwM0UtNDk5IC0+IC01LjM5MDg4MDgwODAxOTE3NDE5NDAxMDIyNDczNjk2NUUrNDk3IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNjYgZGl2aWRlaW50IDIyMDk0MzM4OTcyLjM5MTA5NzI2NTIyNDc3OTk5NTE1IC00MDk4NDY1NDkzNzEuMzkwMDgwNTAzOTY2ODQxNzIwM0UtNDk5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzA2NiBtdWx0aXBseSAyMjA5NDMzODk3Mi4zOTEwOTcyNjUyMjQ3Nzk5OTUxNSAtNDA5ODQ2NTQ5MzcxLjM5MDA4MDUwMzk2Njg0MTcyMDNFLTQ5OSAtPiAtOS4wNTUyODg1ODg0NzYzMTU4MjIxMTM5NzU0MjY3MzBFLTQ3OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDY2IHBvd2VyIDIyMDk0MzM4OTcyLjM5MTA5NzI2NTIyNDc3OTk5NTE1IC00IC0+IDQuMTk2MzkxMDIyMzU0MTIyNjg2NzI1MzE1MjA5OTY3RS00MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDY2IHJlbWFpbmRlciAyMjA5NDMzODk3Mi4zOTEwOTcyNjUyMjQ3Nzk5OTUxNSAtNDA5ODQ2NTQ5MzcxLjM5MDA4MDUwMzk2Njg0MTcyMDNFLTQ5OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwNjYgc3VidHJhY3QgMjIwOTQzMzg5NzIuMzkxMDk3MjY1MjI0Nzc5OTk1MTUgLTQwOTg0NjU0OTM3MS4zOTAwODA1MDM5NjY4NDE3MjAzRS00OTkgLT4gMjIwOTQzMzg5NzIuMzkxMDk3MjY1MjI0Nzc5OTk1MTUgSW5leGFjdCBSb3VuZGVkCithZGR4MzA2NyBhZGQgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTMzNzQ5ODg1ODE2MDc1ODYwNjExNzMyNDgzMDU5MjMgSW5leGFjdCBSb3VuZGVkCitjb214MzA2NyBjb21wYXJlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC0xCitkaXZ4MzA2NyBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk3LjgxMzEwOTc3MDM4IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNjcgZGl2aWRlaW50IC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5NworbXVseDMwNjcgbXVsdGlwbHkgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTIuNzc3NDA5NTYzODI1NTEyMjAyNzkzMzM2MTMyMzEwRSs0MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDY3IHBvd2VyIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDggLT4gMS42ODMzNjU2NTcyMzg4NzgwNTc2MjA2MzQyMDcyNjdFKzI0NCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDY3IHJlbWFpbmRlciAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNjY5MTM5NzAxNjguNjIwNDYyNTcxNzU1NjYzODQyNDMKK3N1YngzMDY3IHN1YnRyYWN0IC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC0zMzc0OTg4NTgxNjA3NTg2MDYxMzM3ODM2MDk2MTczIEluZXhhY3QgUm91bmRlZAorYWRkeDMwNjggYWRkIC04NDE3MjU1ODE2MDY2MS4zNTg2MzgzMTAyOTM1MjMyMyAtMTEyNzEuNTg5MTY2MDA5MzExNTU5MzcyOTE5MDQ4OTAgLT4gLTg0MTcyNTU4MTcxOTMyLjk0NzgwNDMxOTYwNTA4MjYwIEluZXhhY3QgUm91bmRlZAorY29teDMwNjggY29tcGFyZSAtODQxNzI1NTgxNjA2NjEuMzU4NjM4MzEwMjkzNTIzMjMgLTExMjcxLjU4OTE2NjAwOTMxMTU1OTM3MjkxOTA0ODkwIC0+IC0xCitkaXZ4MzA2OCBkaXZpZGUgLTg0MTcyNTU4MTYwNjYxLjM1ODYzODMxMDI5MzUyMzIzIC0xMTI3MS41ODkxNjYwMDkzMTE1NTkzNzI5MTkwNDg5MCAtPiA3NDY3Njc0NDI2LjQ2Nzk4NjczNjQ1OTY3ODM0NzU4NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDY4IGRpdmlkZWludCAtODQxNzI1NTgxNjA2NjEuMzU4NjM4MzEwMjkzNTIzMjMgLTExMjcxLjU4OTE2NjAwOTMxMTU1OTM3MjkxOTA0ODkwIC0+IDc0Njc2NzQ0MjYKK211bHgzMDY4IG11bHRpcGx5IC04NDE3MjU1ODE2MDY2MS4zNTg2MzgzMTAyOTM1MjMyMyAtMTEyNzEuNTg5MTY2MDA5MzExNTU5MzcyOTE5MDQ4OTAgLT4gOTQ4NzU4NDk0NjM4OTk5MjM1LjE5NTMwMjI5NzA3NTUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA2OCBwb3dlciAtODQxNzI1NTgxNjA2NjEuMzU4NjM4MzEwMjkzNTIzMjMgLTExMjcyIC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDY4IHJlbWFpbmRlciAtODQxNzI1NTgxNjA2NjEuMzU4NjM4MzEwMjkzNTIzMjMgLTExMjcxLjU4OTE2NjAwOTMxMTU1OTM3MjkxOTA0ODkwIC0+IC01Mjc0Ljk1NDIyODUxNDk2NTM0NDc5MTIyNjU2ODYwCitzdWJ4MzA2OCBzdWJ0cmFjdCAtODQxNzI1NTgxNjA2NjEuMzU4NjM4MzEwMjkzNTIzMjMgLTExMjcxLjU4OTE2NjAwOTMxMTU1OTM3MjkxOTA0ODkwIC0+IC04NDE3MjU1ODE0OTM4OS43Njk0NzIzMDA5ODE5NjM4NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDY5IGFkZCAtNzAwNDY5MzIzMjQ2MTQuOTA1OTYzOTYyMzc1MDg1NDFFLTU2OCAzMy42MzE2Mzk2NDAwNDYwODg2NTgzNjU3NzI5NzY5OEUtOTE4IC0+IC03LjAwNDY5MzIzMjQ2MTQ5MDU5NjM5NjIzNzUwODU0MUUtNTU1IEluZXhhY3QgUm91bmRlZAorY29teDMwNjkgY29tcGFyZSAtNzAwNDY5MzIzMjQ2MTQuOTA1OTYzOTYyMzc1MDg1NDFFLTU2OCAzMy42MzE2Mzk2NDAwNDYwODg2NTgzNjU3NzI5NzY5OEUtOTE4IC0+IC0xCitkaXZ4MzA2OSBkaXZpZGUgLTcwMDQ2OTMyMzI0NjE0LjkwNTk2Mzk2MjM3NTA4NTQxRS01NjggMzMuNjMxNjM5NjQwMDQ2MDg4NjU4MzY1NzcyOTc2OThFLTkxOCAtPiAtMi4wODI3Njg4NzY5OTU0NjM0ODc5MjY5MjAwNzIzNTlFKzM2MiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDY5IGRpdmlkZWludCAtNzAwNDY5MzIzMjQ2MTQuOTA1OTYzOTYyMzc1MDg1NDFFLTU2OCAzMy42MzE2Mzk2NDAwNDYwODg2NTgzNjU3NzI5NzY5OEUtOTE4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzA2OSBtdWx0aXBseSAtNzAwNDY5MzIzMjQ2MTQuOTA1OTYzOTYyMzc1MDg1NDFFLTU2OCAzMy42MzE2Mzk2NDAwNDYwODg2NTgzNjU3NzI5NzY5OEUtOTE4IC0+IC0yLjM1NTc5MzE4NTgzMjE0NDM4ODI4NTk0OTAyMTczOEUtMTQ3MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDY5IHBvd2VyIC03MDA0NjkzMjMyNDYxNC45MDU5NjM5NjIzNzUwODU0MUUtNTY4IDMgLT4gLTMuNDM2OTAzNjc4MzAyNjM5Njc3MjgwNTA4NDA5ODI5RS0xNjYzIEluZXhhY3QgUm91bmRlZAorcmVteDMwNjkgcmVtYWluZGVyIC03MDA0NjkzMjMyNDYxNC45MDU5NjM5NjIzNzUwODU0MUUtNTY4IDMzLjYzMTYzOTY0MDA0NjA4ODY1ODM2NTc3Mjk3Njk4RS05MTggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDY5IHN1YnRyYWN0IC03MDA0NjkzMjMyNDYxNC45MDU5NjM5NjIzNzUwODU0MUUtNTY4IDMzLjYzMTYzOTY0MDA0NjA4ODY1ODM2NTc3Mjk3Njk4RS05MTggLT4gLTcuMDA0NjkzMjMyNDYxNDkwNTk2Mzk2MjM3NTA4NTQxRS01NTUgSW5leGFjdCBSb3VuZGVkCithZGR4MzA3MCBhZGQgMDAwNDEyNTM4NDQwNy4wNTM3ODI2NjAxMTU2ODA4ODYgLTM5MTQyOTA4NC41ODQ3MzIxNDAyNTE0Mzg1NjAzMjIzRS02NDggLT4gNDEyNTM4NDQwNy4wNTM3ODI2NjAxMTU2ODA4ODYwMDAgSW5leGFjdCBSb3VuZGVkCitjb214MzA3MCBjb21wYXJlIDAwMDQxMjUzODQ0MDcuMDUzNzgyNjYwMTE1NjgwODg2IC0zOTE0MjkwODQuNTg0NzMyMTQwMjUxNDM4NTYwMzIyM0UtNjQ4IC0+IDEKK2RpdngzMDcwIGRpdmlkZSAwMDA0MTI1Mzg0NDA3LjA1Mzc4MjY2MDExNTY4MDg4NiAtMzkxNDI5MDg0LjU4NDczMjE0MDI1MTQzODU2MDMyMjNFLTY0OCAtPiAtMS4wNTM5Mjg5NDEyODcxMzI3MTcyNTA1NDA5NTU0NTdFKzY0OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDcwIGRpdmlkZWludCAwMDA0MTI1Mzg0NDA3LjA1Mzc4MjY2MDExNTY4MDg4NiAtMzkxNDI5MDg0LjU4NDczMjE0MDI1MTQzODU2MDMyMjNFLTY0OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNzAgbXVsdGlwbHkgMDAwNDEyNTM4NDQwNy4wNTM3ODI2NjAxMTU2ODA4ODYgLTM5MTQyOTA4NC41ODQ3MzIxNDAyNTE0Mzg1NjAzMjIzRS02NDggLT4gLTEuNjE0Nzk1NDQyMDEzMTkwMTM5MDgwNjM0NDQ5MjczRS02MzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA3MCBwb3dlciAwMDA0MTI1Mzg0NDA3LjA1Mzc4MjY2MDExNTY4MDg4NiAtNCAtPiAzLjQ1MjU2ODU0MTU5NzQ1MDEwNjI2NjU1NTc4MzM2MkUtMzkgSW5leGFjdCBSb3VuZGVkCityZW14MzA3MCByZW1haW5kZXIgMDAwNDEyNTM4NDQwNy4wNTM3ODI2NjAxMTU2ODA4ODYgLTM5MTQyOTA4NC41ODQ3MzIxNDAyNTE0Mzg1NjAzMjIzRS02NDggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDcwIHN1YnRyYWN0IDAwMDQxMjUzODQ0MDcuMDUzNzgyNjYwMTE1NjgwODg2IC0zOTE0MjkwODQuNTg0NzMyMTQwMjUxNDM4NTYwMzIyM0UtNjQ4IC0+IDQxMjUzODQ0MDcuMDUzNzgyNjYwMTE1NjgwODg2MDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDMwNzEgYWRkIC0zMTgyMzEzMS4xNTY5MTU4MzM5MzgyMDYyODQ4MDk5N0UtNDQwIDkyOTEzLjkxNTgyOTQ3MjM3MjAwMjg2NDI3MDMwMDI4RSs3NzEgLT4gOS4yOTEzOTE1ODI5NDcyMzcyMDAyODY0MjcwMzAwMjhFKzc3NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDcxIGNvbXBhcmUgLTMxODIzMTMxLjE1NjkxNTgzMzkzODIwNjI4NDgwOTk3RS00NDAgOTI5MTMuOTE1ODI5NDcyMzcyMDAyODY0MjcwMzAwMjhFKzc3MSAtPiAtMQorZGl2eDMwNzEgZGl2aWRlIC0zMTgyMzEzMS4xNTY5MTU4MzM5MzgyMDYyODQ4MDk5N0UtNDQwIDkyOTEzLjkxNTgyOTQ3MjM3MjAwMjg2NDI3MDMwMDI4RSs3NzEgLT4gLTMuNDI1MDEyMzc1NDY4MjUxNDQ3MTk0NDAwODQxNjU4RS0xMjA5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNzEgZGl2aWRlaW50IC0zMTgyMzEzMS4xNTY5MTU4MzM5MzgyMDYyODQ4MDk5N0UtNDQwIDkyOTEzLjkxNTgyOTQ3MjM3MjAwMjg2NDI3MDMwMDI4RSs3NzEgLT4gLTAKK211bHgzMDcxIG11bHRpcGx5IC0zMTgyMzEzMS4xNTY5MTU4MzM5MzgyMDYyODQ4MDk5N0UtNDQwIDkyOTEzLjkxNTgyOTQ3MjM3MjAwMjg2NDI3MDMwMDI4RSs3NzEgLT4gLTIuOTU2ODExNzI5NzQzOTM3NTQxOTczODQ1MDI5ODE2RSszNDMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA3MSBwb3dlciAtMzE4MjMxMzEuMTU2OTE1ODMzOTM4MjA2Mjg0ODA5OTdFLTQ0MCA5IC0+IC0zLjM0NzIzNDgwMzQ4NzU3NTg3MDMyMTMzODMwODY1NUUtMzg5MyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDcxIHJlbWFpbmRlciAtMzE4MjMxMzEuMTU2OTE1ODMzOTM4MjA2Mjg0ODA5OTdFLTQ0MCA5MjkxMy45MTU4Mjk0NzIzNzIwMDI4NjQyNzAzMDAyOEUrNzcxIC0+IC0zLjE4MjMxMzExNTY5MTU4MzM5MzgyMDYyODQ4MDk5N0UtNDMzCitzdWJ4MzA3MSBzdWJ0cmFjdCAtMzE4MjMxMzEuMTU2OTE1ODMzOTM4MjA2Mjg0ODA5OTdFLTQ0MCA5MjkxMy45MTU4Mjk0NzIzNzIwMDI4NjQyNzAzMDAyOEUrNzcxIC0+IC05LjI5MTM5MTU4Mjk0NzIzNzIwMDI4NjQyNzAzMDAyOEUrNzc1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNzIgYWRkIDU1NTczODY3ODg4LjkxNTc1MzMwNTYzNjk4MTI4MTUwIDU5OS41MjMxNjE0NzM2MjMyMTg4MzU0MzkzMjEyMjM0IC0+IDU1NTczODY4NDg4LjQzODkxNDc3OTI2MDIwMDExNjk0IEluZXhhY3QgUm91bmRlZAorY29teDMwNzIgY29tcGFyZSA1NTU3Mzg2Nzg4OC45MTU3NTMzMDU2MzY5ODEyODE1MCA1OTkuNTIzMTYxNDczNjIzMjE4ODM1NDM5MzIxMjIzNCAtPiAxCitkaXZ4MzA3MiBkaXZpZGUgNTU1NzM4Njc4ODguOTE1NzUzMzA1NjM2OTgxMjgxNTAgNTk5LjUyMzE2MTQ3MzYyMzIxODgzNTQzOTMyMTIyMzQgLT4gOTI2OTY3ODIuMTQzMTg3OTY3NjMwOTgzMzU0OTg2NTcgSW5leGFjdCBSb3VuZGVkCitkdml4MzA3MiBkaXZpZGVpbnQgNTU1NzM4Njc4ODguOTE1NzUzMzA1NjM2OTgxMjgxNTAgNTk5LjUyMzE2MTQ3MzYyMzIxODgzNTQzOTMyMTIyMzQgLT4gOTI2OTY3ODIKK211bHgzMDcyIG11bHRpcGx5IDU1NTczODY3ODg4LjkxNTc1MzMwNTYzNjk4MTI4MTUwIDU5OS41MjMxNjE0NzM2MjMyMTg4MzU0MzkzMjEyMjM0IC0+IDMzMzE3ODIwOTcyMDgwLjI0MzQ3NzE3NTQyMjIxNDc3IEluZXhhY3QgUm91bmRlZAorcG93eDMwNzIgcG93ZXIgNTU1NzM4Njc4ODguOTE1NzUzMzA1NjM2OTgxMjgxNTAgNjAwIC0+IDguMzYzMjQwNjcxMDcwMTM2Mjc4MjIxOTY1NjE2OTczRSs2NDQ2IEluZXhhY3QgUm91bmRlZAorcmVteDMwNzIgcmVtYWluZGVyIDU1NTczODY3ODg4LjkxNTc1MzMwNTYzNjk4MTI4MTUwIDU5OS41MjMxNjE0NzM2MjMyMTg4MzU0MzkzMjEyMjM0IC0+IDg1Ljg0NDUwMzAzOTEwOTk2ODY0NzgyNjUxNjkwMTIKK3N1YngzMDcyIHN1YnRyYWN0IDU1NTczODY3ODg4LjkxNTc1MzMwNTYzNjk4MTI4MTUwIDU5OS41MjMxNjE0NzM2MjMyMTg4MzU0MzkzMjEyMjM0IC0+IDU1NTczODY3Mjg5LjM5MjU5MTgzMjAxMzc2MjQ0NjA2IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNzMgYWRkIC01NDQ3NzI3NDQ4NDMxNjgwODc4Njk5NTU1NzE0Nzk2RS04MDAgNTQ4NzIwNy4xNDI2ODcwMDE2MDcwMjY2NjU1MTUzNDlFLTM2MiAtPiA1LjQ4NzIwNzE0MjY4NzAwMTYwNzAyNjY2NTUxNTM0OUUtMzU2IEluZXhhY3QgUm91bmRlZAorY29teDMwNzMgY29tcGFyZSAtNTQ0NzcyNzQ0ODQzMTY4MDg3ODY5OTU1NTcxNDc5NkUtODAwIDU0ODcyMDcuMTQyNjg3MDAxNjA3MDI2NjY1NTE1MzQ5RS0zNjIgLT4gLTEKK2RpdngzMDczIGRpdmlkZSAtNTQ0NzcyNzQ0ODQzMTY4MDg3ODY5OTU1NTcxNDc5NkUtODAwIDU0ODcyMDcuMTQyNjg3MDAxNjA3MDI2NjY1NTE1MzQ5RS0zNjIgLT4gLTkuOTI4MDUxMzg3MTEwNTg3MzI3ODg5MDA5MzYzMDY5RS00MTUgSW5leGFjdCBSb3VuZGVkCitkdml4MzA3MyBkaXZpZGVpbnQgLTU0NDc3Mjc0NDg0MzE2ODA4Nzg2OTk1NTU3MTQ3OTZFLTgwMCA1NDg3MjA3LjE0MjY4NzAwMTYwNzAyNjY2NTUxNTM0OUUtMzYyIC0+IC0wCittdWx4MzA3MyBtdWx0aXBseSAtNTQ0NzcyNzQ0ODQzMTY4MDg3ODY5OTU1NTcxNDc5NkUtODAwIDU0ODcyMDcuMTQyNjg3MDAxNjA3MDI2NjY1NTE1MzQ5RS0zNjIgLT4gLTIuOTg5MjgwODk2NjQ0NjM1MzUyODM4MDg3ODY0MzczRS0xMTI1IEluZXhhY3QgUm91bmRlZAorcG93eDMwNzMgcG93ZXIgLTU0NDc3Mjc0NDg0MzE2ODA4Nzg2OTk1NTU3MTQ3OTZFLTgwMCA1IC0+IC00Ljc5ODE4MzU1MzI3ODU0MzA2NTIwNDgzMzMwMDcyNUUtMzg0NyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDczIHJlbWFpbmRlciAtNTQ0NzcyNzQ0ODQzMTY4MDg3ODY5OTU1NTcxNDc5NkUtODAwIDU0ODcyMDcuMTQyNjg3MDAxNjA3MDI2NjY1NTE1MzQ5RS0zNjIgLT4gLTUuNDQ3NzI3NDQ4NDMxNjgwODc4Njk5NTU1NzE0Nzk2RS03NzAKK3N1YngzMDczIHN1YnRyYWN0IC01NDQ3NzI3NDQ4NDMxNjgwODc4Njk5NTU1NzE0Nzk2RS04MDAgNTQ4NzIwNy4xNDI2ODcwMDE2MDcwMjY2NjU1MTUzNDlFLTM2MiAtPiAtNS40ODcyMDcxNDI2ODcwMDE2MDcwMjY2NjU1MTUzNDlFLTM1NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDc0IGFkZCAwNDE4MzQ5NDA0ODM0LjU0NzExMDIzOTU0MjI5MDEzNCAwOTgxOTkxNS45MjQwNTI4ODA2NjYwNjEyNDU1NDg0MSAtPiA0MTgzNTkyMjQ3NTAuNDcxMTYzMTIwMjA4MzUxMzc5NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDc0IGNvbXBhcmUgMDQxODM0OTQwNDgzNC41NDcxMTAyMzk1NDIyOTAxMzQgMDk4MTk5MTUuOTI0MDUyODgwNjY2MDYxMjQ1NTQ4NDEgLT4gMQorZGl2eDMwNzQgZGl2aWRlIDA0MTgzNDk0MDQ4MzQuNTQ3MTEwMjM5NTQyMjkwMTM0IDA5ODE5OTE1LjkyNDA1Mjg4MDY2NjA2MTI0NTU0ODQxIC0+IDQyNjAyLjEzNzEzMzM1ODAzNTEzODc0MzM5MzA5MTMyIEluZXhhY3QgUm91bmRlZAorZHZpeDMwNzQgZGl2aWRlaW50IDA0MTgzNDk0MDQ4MzQuNTQ3MTEwMjM5NTQyMjkwMTM0IDA5ODE5OTE1LjkyNDA1Mjg4MDY2NjA2MTI0NTU0ODQxIC0+IDQyNjAyCittdWx4MzA3NCBtdWx0aXBseSAwNDE4MzQ5NDA0ODM0LjU0NzExMDIzOTU0MjI5MDEzNCAwOTgxOTkxNS45MjQwNTI4ODA2NjYwNjEyNDU1NDg0MSAtPiA0MTA4MTU1OTgyMzUyODE0MzQ4LjM0MzQ0MTI5OTA4MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDc0IHBvd2VyIDA0MTgzNDk0MDQ4MzQuNTQ3MTEwMjM5NTQyMjkwMTM0IDk4MTk5MTYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzA3NCByZW1haW5kZXIgMDQxODM0OTQwNDgzNC41NDcxMTAyMzk1NDIyOTAxMzQgMDk4MTk5MTUuOTI0MDUyODgwNjY2MDYxMjQ1NTQ4NDEgLT4gMTM0NjYzOC4wNDYyODgxMDQwMDExMDcyODA2MzcxOAorc3VieDMwNzQgc3VidHJhY3QgMDQxODM0OTQwNDgzNC41NDcxMTAyMzk1NDIyOTAxMzQgMDk4MTk5MTUuOTI0MDUyODgwNjY2MDYxMjQ1NTQ4NDEgLT4gNDE4MzM5NTg0OTE4LjYyMzA1NzM1ODg3NjIyODg4ODUgSW5leGFjdCBSb3VuZGVkCithZGR4MzA3NSBhZGQgLTI2MjAyMS43NTY1MTk0NzM3Mzk2NDQ4MDE0Mjg2NDM2IC03OTgzOTkyNjAwMDk0ODM2MzA0Mzg3MzI0MTYyMDQyRSszOTAgLT4gLTcuOTgzOTkyNjAwMDk0ODM2MzA0Mzg3MzI0MTYyMDQyRSs0MjAgSW5leGFjdCBSb3VuZGVkCitjb214MzA3NSBjb21wYXJlIC0yNjIwMjEuNzU2NTE5NDczNzM5NjQ0ODAxNDI4NjQzNiAtNzk4Mzk5MjYwMDA5NDgzNjMwNDM4NzMyNDE2MjA0MkUrMzkwIC0+IDEKK2RpdngzMDc1IGRpdmlkZSAtMjYyMDIxLjc1NjUxOTQ3MzczOTY0NDgwMTQyODY0MzYgLTc5ODM5OTI2MDAwOTQ4MzYzMDQzODczMjQxNjIwNDJFKzM5MCAtPiAzLjI4MTgzODY2OTQ5NDI3NDg5NjE4MDM3NjMyODQzM0UtNDE2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNzUgZGl2aWRlaW50IC0yNjIwMjEuNzU2NTE5NDczNzM5NjQ0ODAxNDI4NjQzNiAtNzk4Mzk5MjYwMDA5NDgzNjMwNDM4NzMyNDE2MjA0MkUrMzkwIC0+IDAKK211bHgzMDc1IG11bHRpcGx5IC0yNjIwMjEuNzU2NTE5NDczNzM5NjQ0ODAxNDI4NjQzNiAtNzk4Mzk5MjYwMDA5NDgzNjMwNDM4NzMyNDE2MjA0MkUrMzkwIC0+IDIuMDkxOTc5NzY1MTE1MzI5MjY4Mjc1ODAzMzg1NTM0RSs0MjYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA3NSBwb3dlciAtMjYyMDIxLjc1NjUxOTQ3MzczOTY0NDgwMTQyODY0MzYgLTggLT4gNC41MDA5MTg3MjEwMzMwMzMwMzI3MDY3ODIzMDQxOTVFLTQ0IEluZXhhY3QgUm91bmRlZAorcmVteDMwNzUgcmVtYWluZGVyIC0yNjIwMjEuNzU2NTE5NDczNzM5NjQ0ODAxNDI4NjQzNiAtNzk4Mzk5MjYwMDA5NDgzNjMwNDM4NzMyNDE2MjA0MkUrMzkwIC0+IC0yNjIwMjEuNzU2NTE5NDczNzM5NjQ0ODAxNDI4NjQzNgorc3VieDMwNzUgc3VidHJhY3QgLTI2MjAyMS43NTY1MTk0NzM3Mzk2NDQ4MDE0Mjg2NDM2IC03OTgzOTkyNjAwMDk0ODM2MzA0Mzg3MzI0MTYyMDQyRSszOTAgLT4gNy45ODM5OTI2MDAwOTQ4MzYzMDQzODczMjQxNjIwNDJFKzQyMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDc2IGFkZCA0ODY5NjA1MDYzMS40MjU2NTM4MDMwMTIwNDU5MjM5MkUtNTA1IC0zMzg2ODc1MjMzOS44NTA1NzI2NzYwOTk2NzgwNjE4N0UrODIxIC0+IC0zLjM4Njg3NTIzMzk4NTA1NzI2NzYwOTk2NzgwNjE4N0UrODMxIEluZXhhY3QgUm91bmRlZAorY29teDMwNzYgY29tcGFyZSA0ODY5NjA1MDYzMS40MjU2NTM4MDMwMTIwNDU5MjM5MkUtNTA1IC0zMzg2ODc1MjMzOS44NTA1NzI2NzYwOTk2NzgwNjE4N0UrODIxIC0+IDEKK2RpdngzMDc2IGRpdmlkZSA0ODY5NjA1MDYzMS40MjU2NTM4MDMwMTIwNDU5MjM5MkUtNTA1IC0zMzg2ODc1MjMzOS44NTA1NzI2NzYwOTk2NzgwNjE4N0UrODIxIC0+IC0xLjQzNzc4Njk2NDg5Mjk3NjU4MjAwOTk1MjE3MjQyMEUtMTMyNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDc2IGRpdmlkZWludCA0ODY5NjA1MDYzMS40MjU2NTM4MDMwMTIwNDU5MjM5MkUtNTA1IC0zMzg2ODc1MjMzOS44NTA1NzI2NzYwOTk2NzgwNjE4N0UrODIxIC0+IC0wCittdWx4MzA3NiBtdWx0aXBseSA0ODY5NjA1MDYzMS40MjU2NTM4MDMwMTIwNDU5MjM5MkUtNTA1IC0zMzg2ODc1MjMzOS44NTA1NzI2NzYwOTk2NzgwNjE4N0UrODIxIC0+IC0xLjY0OTI3NDQ3ODc2NDU3OTU2OTI0NjQyNTYxMTYyOUUrMzM3IEluZXhhY3QgUm91bmRlZAorcG93eDMwNzYgcG93ZXIgNDg2OTYwNTA2MzEuNDI1NjUzODAzMDEyMDQ1OTIzOTJFLTUwNSAtMyAtPiA4LjY2MDAxNzY4ODc3Mzc1OTQ2MzAyMDM0MDc3ODg1M0UrMTQ4MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDc2IHJlbWFpbmRlciA0ODY5NjA1MDYzMS40MjU2NTM4MDMwMTIwNDU5MjM5MkUtNTA1IC0zMzg2ODc1MjMzOS44NTA1NzI2NzYwOTk2NzgwNjE4N0UrODIxIC0+IDQuODY5NjA1MDYzMTQyNTY1MzgwMzAxMjA0NTkyMzkyRS00OTUKK3N1YngzMDc2IHN1YnRyYWN0IDQ4Njk2MDUwNjMxLjQyNTY1MzgwMzAxMjA0NTkyMzkyRS01MDUgLTMzODY4NzUyMzM5Ljg1MDU3MjY3NjA5OTY3ODA2MTg3RSs4MjEgLT4gMy4zODY4NzUyMzM5ODUwNTcyNjc2MDk5Njc4MDYxODdFKzgzMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDc3IGFkZCA5NTMxNjk5OS4xOTQ0MDE0NDM1NjQ3MTEyNjY4MDcwOCAtNjA3OTEuMzM4MDUwNTc0MDI4NDU4ODU5NzgzOTA0MzUgLT4gOTUyNTYyMDcuODU2MzUwODY5NTM2MjUyNDA3MDIzMTggSW5leGFjdCBSb3VuZGVkCitjb214MzA3NyBjb21wYXJlIDk1MzE2OTk5LjE5NDQwMTQ0MzU2NDcxMTI2NjgwNzA4IC02MDc5MS4zMzgwNTA1NzQwMjg0NTg4NTk3ODM5MDQzNSAtPiAxCitkaXZ4MzA3NyBkaXZpZGUgOTUzMTY5OTkuMTk0NDAxNDQzNTY0NzExMjY2ODA3MDggLTYwNzkxLjMzODA1MDU3NDAyODQ1ODg1OTc4MzkwNDM1IC0+IC0xNTY3LjkzNzE4MDcwNjY0MTg1Njg3MDI4NjEyMjYyMyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDc3IGRpdmlkZWludCA5NTMxNjk5OS4xOTQ0MDE0NDM1NjQ3MTEyNjY4MDcwOCAtNjA3OTEuMzM4MDUwNTc0MDI4NDU4ODU5NzgzOTA0MzUgLT4gLTE1NjcKK211bHgzMDc3IG11bHRpcGx5IDk1MzE2OTk5LjE5NDQwMTQ0MzU2NDcxMTI2NjgwNzA4IC02MDc5MS4zMzgwNTA1NzQwMjg0NTg4NTk3ODM5MDQzNSAtPiAtNTc5NDQ0NzkxOTk5My4xNTA0OTMzMDEwNjExOTU3MTQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA3NyBwb3dlciA5NTMxNjk5OS4xOTQ0MDE0NDM1NjQ3MTEyNjY4MDcwOCAtNjA3OTEgLT4gMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwNzcgcmVtYWluZGVyIDk1MzE2OTk5LjE5NDQwMTQ0MzU2NDcxMTI2NjgwNzA4IC02MDc5MS4zMzgwNTA1NzQwMjg0NTg4NTk3ODM5MDQzNSAtPiA1Njk3Mi40NjkxNTE5NDA5Njk2Nzc5ODU0Mjg5NjM1NQorc3VieDMwNzcgc3VidHJhY3QgOTUzMTY5OTkuMTk0NDAxNDQzNTY0NzExMjY2ODA3MDggLTYwNzkxLjMzODA1MDU3NDAyODQ1ODg1OTc4MzkwNDM1IC0+IDk1Mzc3NzkwLjUzMjQ1MjAxNzU5MzE3MDEyNjU5MDk4IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNzggYWRkIC01MzI2NzAyMjk2NDAyNzA4MjM0NzIyMjE1MjI0OTc5RS0xMzYgODAzMjQ1OS40NTA5OTg4MjAyMDU5MTY1Mzg1NDMyNTggLT4gODAzMjQ1OS40NTA5OTg4MjAyMDU5MTY1Mzg1NDMyNTggSW5leGFjdCBSb3VuZGVkCitjb214MzA3OCBjb21wYXJlIC01MzI2NzAyMjk2NDAyNzA4MjM0NzIyMjE1MjI0OTc5RS0xMzYgODAzMjQ1OS40NTA5OTg4MjAyMDU5MTY1Mzg1NDMyNTggLT4gLTEKK2RpdngzMDc4IGRpdmlkZSAtNTMyNjcwMjI5NjQwMjcwODIzNDcyMjIxNTIyNDk3OUUtMTM2IDgwMzI0NTkuNDUwOTk4ODIwMjA1OTE2NTM4NTQzMjU4IC0+IC02LjYzMTQ3MTEzMTQ3MzExNzQ4NzgzOTI0MzU4Mjg3M0UtMTEzIEluZXhhY3QgUm91bmRlZAorZHZpeDMwNzggZGl2aWRlaW50IC01MzI2NzAyMjk2NDAyNzA4MjM0NzIyMjE1MjI0OTc5RS0xMzYgODAzMjQ1OS40NTA5OTg4MjAyMDU5MTY1Mzg1NDMyNTggLT4gLTAKK211bHgzMDc4IG11bHRpcGx5IC01MzI2NzAyMjk2NDAyNzA4MjM0NzIyMjE1MjI0OTc5RS0xMzYgODAzMjQ1OS40NTA5OTg4MjAyMDU5MTY1Mzg1NDMyNTggLT4gLTQuMjc4NjUyMDIwMzM5NzA1MjY1MDEzNjMyNzU3MzQ5RS05OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDc4IHBvd2VyIC01MzI2NzAyMjk2NDAyNzA4MjM0NzIyMjE1MjI0OTc5RS0xMzYgODAzMjQ1OSAtPiAtMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwNzggcmVtYWluZGVyIC01MzI2NzAyMjk2NDAyNzA4MjM0NzIyMjE1MjI0OTc5RS0xMzYgODAzMjQ1OS40NTA5OTg4MjAyMDU5MTY1Mzg1NDMyNTggLT4gLTUuMzI2NzAyMjk2NDAyNzA4MjM0NzIyMjE1MjI0OTc5RS0xMDYKK3N1YngzMDc4IHN1YnRyYWN0IC01MzI2NzAyMjk2NDAyNzA4MjM0NzIyMjE1MjI0OTc5RS0xMzYgODAzMjQ1OS40NTA5OTg4MjAyMDU5MTY1Mzg1NDMyNTggLT4gLTgwMzI0NTkuNDUwOTk4ODIwMjA1OTE2NTM4NTQzMjU4IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNzkgYWRkIDY3LjE4NzUwNjg0MDc5NTAxNTc1MzM1NDgyNjE1NzgwRS0yODEgNzM0LjExNjg4NDE2ODM0Mzg0MTAzMTQ4NDMwMTE1NDFFLTg1NCAtPiA2LjcxODc1MDY4NDA3OTUwMTU3NTMzNTQ4MjYxNTc4MEUtMjgwIEluZXhhY3QgUm91bmRlZAorY29teDMwNzkgY29tcGFyZSA2Ny4xODc1MDY4NDA3OTUwMTU3NTMzNTQ4MjYxNTc4MEUtMjgxIDczNC4xMTY4ODQxNjgzNDM4NDEwMzE0ODQzMDExNTQxRS04NTQgLT4gMQorZGl2eDMwNzkgZGl2aWRlIDY3LjE4NzUwNjg0MDc5NTAxNTc1MzM1NDgyNjE1NzgwRS0yODEgNzM0LjExNjg4NDE2ODM0Mzg0MTAzMTQ4NDMwMTE1NDFFLTg1NCAtPiA5LjE1MjE1Mzg3MjE4NzQ2MDU5ODk1ODYxNjU5MjQ0MkUrNTcxIEluZXhhY3QgUm91bmRlZAorZHZpeDMwNzkgZGl2aWRlaW50IDY3LjE4NzUwNjg0MDc5NTAxNTc1MzM1NDgyNjE1NzgwRS0yODEgNzM0LjExNjg4NDE2ODM0Mzg0MTAzMTQ4NDMwMTE1NDFFLTg1NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNzkgbXVsdGlwbHkgNjcuMTg3NTA2ODQwNzk1MDE1NzUzMzU0ODI2MTU3ODBFLTI4MSA3MzQuMTE2ODg0MTY4MzQzODQxMDMxNDg0MzAxMTU0MUUtODU0IC0+IDQuOTMyMzQ4MzE3NzAwMzcyNDAxODQ5MjMxNzY3MDA3RS0xMTMxIEluZXhhY3QgUm91bmRlZAorcG93eDMwNzkgcG93ZXIgNjcuMTg3NTA2ODQwNzk1MDE1NzUzMzU0ODI2MTU3ODBFLTI4MSA3IC0+IDYuMTgwNDQ0MDcxMDIzMTExMzAwODE3NTE4NDA5NTUwRS0xOTU1IEluZXhhY3QgUm91bmRlZAorcmVteDMwNzkgcmVtYWluZGVyIDY3LjE4NzUwNjg0MDc5NTAxNTc1MzM1NDgyNjE1NzgwRS0yODEgNzM0LjExNjg4NDE2ODM0Mzg0MTAzMTQ4NDMwMTE1NDFFLTg1NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwNzkgc3VidHJhY3QgNjcuMTg3NTA2ODQwNzk1MDE1NzUzMzU0ODI2MTU3ODBFLTI4MSA3MzQuMTE2ODg0MTY4MzQzODQxMDMxNDg0MzAxMTU0MUUtODU0IC0+IDYuNzE4NzUwNjg0MDc5NTAxNTc1MzM1NDgyNjE1NzgwRS0yODAgSW5leGFjdCBSb3VuZGVkCithZGR4MzA4MCBhZGQgLTg3MzkyOTkzNzIxMTQuMDkyNDgyOTE0MTM5MjgxNjY5IDUwNzYxMDA3NC43MzQzNTc3MDI5MzQ1MDc3Mzg1ODM4IC0+IC04NzM4NzkxNzYyMDM5LjM1ODEyNTIxMTIwNDc3MzkzMCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDgwIGNvbXBhcmUgLTg3MzkyOTkzNzIxMTQuMDkyNDgyOTE0MTM5MjgxNjY5IDUwNzYxMDA3NC43MzQzNTc3MDI5MzQ1MDc3Mzg1ODM4IC0+IC0xCitkaXZ4MzA4MCBkaXZpZGUgLTg3MzkyOTkzNzIxMTQuMDkyNDgyOTE0MTM5MjgxNjY5IDUwNzYxMDA3NC43MzQzNTc3MDI5MzQ1MDc3Mzg1ODM4IC0+IC0xNzIxNi41NjAxMjU3NzY3MzczMTYxMjEzMDA2ODEzMCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDgwIGRpdmlkZWludCAtODczOTI5OTM3MjExNC4wOTI0ODI5MTQxMzkyODE2NjkgNTA3NjEwMDc0LjczNDM1NzcwMjkzNDUwNzczODU4MzggLT4gLTE3MjE2CittdWx4MzA4MCBtdWx0aXBseSAtODczOTI5OTM3MjExNC4wOTI0ODI5MTQxMzkyODE2NjkgNTA3NjEwMDc0LjczNDM1NzcwMjkzNDUwNzczODU4MzggLT4gLTQ0MzYxNTY0MDc0MDQ3NTk4MzM4NTcuNTgwNzA3MDI0IEluZXhhY3QgUm91bmRlZAorcG93eDMwODAgcG93ZXIgLTg3MzkyOTkzNzIxMTQuMDkyNDgyOTE0MTM5MjgxNjY5IDUwNzYxMDA3NSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzA4MCByZW1haW5kZXIgLTg3MzkyOTkzNzIxMTQuMDkyNDgyOTE0MTM5MjgxNjY5IDUwNzYxMDA3NC43MzQzNTc3MDI5MzQ1MDc3Mzg1ODM4IC0+IC0yODQzMjU0ODcuMzkwMjY5MTkzNjU0MDU0MjEwMjk5Mgorc3VieDMwODAgc3VidHJhY3QgLTg3MzkyOTkzNzIxMTQuMDkyNDgyOTE0MTM5MjgxNjY5IDUwNzYxMDA3NC43MzQzNTc3MDI5MzQ1MDc3Mzg1ODM4IC0+IC04NzM5ODA2OTgyMTg4LjgyNjg0MDYxNzA3Mzc4OTQwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDgxIGFkZCAyNDU0LjAwMjA3ODQ2ODkyODY2NTAwODIxNzcyNzczMSA1ODM1NDYwMzkuNjIzMzg0Mjg2OTExOTk1MDk4MjAwOUUtMTQ3IC0+IDI0NTQuMDAyMDc4NDY4OTI4NjY1MDA4MjE3NzI3NzMxIEluZXhhY3QgUm91bmRlZAorY29teDMwODEgY29tcGFyZSAyNDU0LjAwMjA3ODQ2ODkyODY2NTAwODIxNzcyNzczMSA1ODM1NDYwMzkuNjIzMzg0Mjg2OTExOTk1MDk4MjAwOUUtMTQ3IC0+IDEKK2RpdngzMDgxIGRpdmlkZSAyNDU0LjAwMjA3ODQ2ODkyODY2NTAwODIxNzcyNzczMSA1ODM1NDYwMzkuNjIzMzg0Mjg2OTExOTk1MDk4MjAwOUUtMTQ3IC0+IDQuMjA1MzI3Mjc4MTIzMTEyNjExMDA2NjUyNTMzNjE4RSsxNDEgSW5leGFjdCBSb3VuZGVkCitkdml4MzA4MSBkaXZpZGVpbnQgMjQ1NC4wMDIwNzg0Njg5Mjg2NjUwMDgyMTc3Mjc3MzEgNTgzNTQ2MDM5LjYyMzM4NDI4NjkxMTk5NTA5ODIwMDlFLTE0NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwODEgbXVsdGlwbHkgMjQ1NC4wMDIwNzg0Njg5Mjg2NjUwMDgyMTc3Mjc3MzEgNTgzNTQ2MDM5LjYyMzM4NDI4NjkxMTk5NTA5ODIwMDlFLTE0NyAtPiAxLjQzMjAyMzE5NDExODA5Njg0MjgwNjAxMDI5MzAyN0UtMTM1IEluZXhhY3QgUm91bmRlZAorcG93eDMwODEgcG93ZXIgMjQ1NC4wMDIwNzg0Njg5Mjg2NjUwMDgyMTc3Mjc3MzEgNiAtPiAyMTgzOTg0NTI3OTIyOTM4NTM3ODYuOTI2MzA1NDQyMCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDgxIHJlbWFpbmRlciAyNDU0LjAwMjA3ODQ2ODkyODY2NTAwODIxNzcyNzczMSA1ODM1NDYwMzkuNjIzMzg0Mjg2OTExOTk1MDk4MjAwOUUtMTQ3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA4MSBzdWJ0cmFjdCAyNDU0LjAwMjA3ODQ2ODkyODY2NTAwODIxNzcyNzczMSA1ODM1NDYwMzkuNjIzMzg0Mjg2OTExOTk1MDk4MjAwOUUtMTQ3IC0+IDI0NTQuMDAyMDc4NDY4OTI4NjY1MDA4MjE3NzI3NzMxIEluZXhhY3QgUm91bmRlZAorYWRkeDMwODIgYWRkIDc2NDU3OC41MjA0ODQ5OTM2OTEyMDY2MDMzMTc3NDI5IDY0NjAzLjEzNTcxMjU5MTY0ODEyNjA5NDM2ODMyNTA2IC0+IDgyOTE4MS42NTYxOTc1ODUzMzkzMzI2OTc2ODYwNjgwIEluZXhhY3QgUm91bmRlZAorY29teDMwODIgY29tcGFyZSA3NjQ1NzguNTIwNDg0OTkzNjkxMjA2NjAzMzE3NzQyOSA2NDYwMy4xMzU3MTI1OTE2NDgxMjYwOTQzNjgzMjUwNiAtPiAxCitkaXZ4MzA4MiBkaXZpZGUgNzY0NTc4LjUyMDQ4NDk5MzY5MTIwNjYwMzMxNzc0MjkgNjQ2MDMuMTM1NzEyNTkxNjQ4MTI2MDk0MzY4MzI1MDYgLT4gMTEuODM1MDA2MzM2MDE1NTM1Nzg4NTExMjQyODE0MTcgSW5leGFjdCBSb3VuZGVkCitkdml4MzA4MiBkaXZpZGVpbnQgNzY0NTc4LjUyMDQ4NDk5MzY5MTIwNjYwMzMxNzc0MjkgNjQ2MDMuMTM1NzEyNTkxNjQ4MTI2MDk0MzY4MzI1MDYgLT4gMTEKK211bHgzMDgyIG11bHRpcGx5IDc2NDU3OC41MjA0ODQ5OTM2OTEyMDY2MDMzMTc3NDI5IDY0NjAzLjEzNTcxMjU5MTY0ODEyNjA5NDM2ODMyNTA2IC0+IDQ5Mzk0MTY5OTIxLjgyNDU4MDk0MTM4MDk2NjI4OTU3IEluZXhhY3QgUm91bmRlZAorcG93eDMwODIgcG93ZXIgNzY0NTc4LjUyMDQ4NDk5MzY5MTIwNjYwMzMxNzc0MjkgNjQ2MDMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzA4MiByZW1haW5kZXIgNzY0NTc4LjUyMDQ4NDk5MzY5MTIwNjYwMzMxNzc0MjkgNjQ2MDMuMTM1NzEyNTkxNjQ4MTI2MDk0MzY4MzI1MDYgLT4gNTM5NDQuMDI3NjQ2NDg1NTYxODE5NTY1MjY2MTY3MjQKK3N1YngzMDgyIHN1YnRyYWN0IDc2NDU3OC41MjA0ODQ5OTM2OTEyMDY2MDMzMTc3NDI5IDY0NjAzLjEzNTcxMjU5MTY0ODEyNjA5NDM2ODMyNTA2IC0+IDY5OTk3NS4zODQ3NzI0MDIwNDMwODA1MDg5NDk0MTc4IEluZXhhY3QgUm91bmRlZAorYWRkeDMwODMgYWRkIDA3OTIwMy43MzMwMTAzNzc3NzE2OTAzNTE4MzY3NTYwIDg0NjM4ODkzNDM0Ny42MzI0MDM2MTMyOTU5NjY0NzA1IC0+IDg0NjM4OTAxMzU1MS4zNjU0MTM5OTEwNjc2NTY4MjIzIEluZXhhY3QgUm91bmRlZAorY29teDMwODMgY29tcGFyZSAwNzkyMDMuNzMzMDEwMzc3NzcxNjkwMzUxODM2NzU2MCA4NDYzODg5MzQzNDcuNjMyNDAzNjEzMjk1OTY2NDcwNSAtPiAtMQorZGl2eDMwODMgZGl2aWRlIDA3OTIwMy43MzMwMTAzNzc3NzE2OTAzNTE4MzY3NTYwIDg0NjM4ODkzNDM0Ny42MzI0MDM2MTMyOTU5NjY0NzA1IC0+IDkuMzU3ODQxMjcwODYwMzM5ODU4MTQ2NDcxODc2MDQ0RS04IEluZXhhY3QgUm91bmRlZAorZHZpeDMwODMgZGl2aWRlaW50IDA3OTIwMy43MzMwMTAzNzc3NzE2OTAzNTE4MzY3NTYwIDg0NjM4ODkzNDM0Ny42MzI0MDM2MTMyOTU5NjY0NzA1IC0+IDAKK211bHgzMDgzIG11bHRpcGx5IDA3OTIwMy43MzMwMTAzNzc3NzE2OTAzNTE4MzY3NTYwIDg0NjM4ODkzNDM0Ny42MzI0MDM2MTMyOTU5NjY0NzA1IC0+IDY3MDM3MTYzMTc5MDA4MDM3LjE5OTgzNTY0Nzg5MjAzIEluZXhhY3QgUm91bmRlZAorcG93eDMwODMgcG93ZXIgMDc5MjAzLjczMzAxMDM3Nzc3MTY5MDM1MTgzNjc1NjAgOCAtPiAxLjU0ODY5MjU0OTUwMzM1Njc4ODExNTY4Mjk5Njc1NkUrMzkgSW5leGFjdCBSb3VuZGVkCityZW14MzA4MyByZW1haW5kZXIgMDc5MjAzLjczMzAxMDM3Nzc3MTY5MDM1MTgzNjc1NjAgODQ2Mzg4OTM0MzQ3LjYzMjQwMzYxMzI5NTk2NjQ3MDUgLT4gNzkyMDMuNzMzMDEwMzc3NzcxNjkwMzUxODM2NzU2MAorc3VieDMwODMgc3VidHJhY3QgMDc5MjAzLjczMzAxMDM3Nzc3MTY5MDM1MTgzNjc1NjAgODQ2Mzg4OTM0MzQ3LjYzMjQwMzYxMzI5NTk2NjQ3MDUgLT4gLTg0NjM4ODg1NTE0My44OTkzOTMyMzU1MjQyNzYxMTg3IEluZXhhY3QgUm91bmRlZAorYWRkeDMwODQgYWRkIC00Mjc4LjU4MTUxNDY4ODY2OTI0OTI0NzAwNzEyNzg5OUUtMzI5IDUuNDc0OTczOTkyOTUzOTAyNjMxODkwMjA4MzYwODI5IC0+IDUuNDc0OTczOTkyOTUzOTAyNjMxODkwMjA4MzYwODI5IEluZXhhY3QgUm91bmRlZAorY29teDMwODQgY29tcGFyZSAtNDI3OC41ODE1MTQ2ODg2NjkyNDkyNDcwMDcxMjc4OTlFLTMyOSA1LjQ3NDk3Mzk5Mjk1MzkwMjYzMTg5MDIwODM2MDgyOSAtPiAtMQorZGl2eDMwODQgZGl2aWRlIC00Mjc4LjU4MTUxNDY4ODY2OTI0OTI0NzAwNzEyNzg5OUUtMzI5IDUuNDc0OTczOTkyOTUzOTAyNjMxODkwMjA4MzYwODI5IC0+IC03LjgxNDc5Nzg3ODg0ODQ2OTI4MjAzMzg5Njk2OTUzMkUtMzI3IEluZXhhY3QgUm91bmRlZAorZHZpeDMwODQgZGl2aWRlaW50IC00Mjc4LjU4MTUxNDY4ODY2OTI0OTI0NzAwNzEyNzg5OUUtMzI5IDUuNDc0OTczOTkyOTUzOTAyNjMxODkwMjA4MzYwODI5IC0+IC0wCittdWx4MzA4NCBtdWx0aXBseSAtNDI3OC41ODE1MTQ2ODg2NjkyNDkyNDcwMDcxMjc4OTlFLTMyOSA1LjQ3NDk3Mzk5Mjk1MzkwMjYzMTg5MDIwODM2MDgyOSAtPiAtMi4zNDI1MTIyNTE5NjUzNzgwMjg0MzM1ODQ1Mzg4NzBFLTMyNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDg0IHBvd2VyIC00Mjc4LjU4MTUxNDY4ODY2OTI0OTI0NzAwNzEyNzg5OUUtMzI5IDUgLT4gLTEuNDMzODM0NTg3ODAxNzcxMjQ0MTA0Njc2NjgyOTg2RS0xNjI3IEluZXhhY3QgUm91bmRlZAorcmVteDMwODQgcmVtYWluZGVyIC00Mjc4LjU4MTUxNDY4ODY2OTI0OTI0NzAwNzEyNzg5OUUtMzI5IDUuNDc0OTczOTkyOTUzOTAyNjMxODkwMjA4MzYwODI5IC0+IC00LjI3ODU4MTUxNDY4ODY2OTI0OTI0NzAwNzEyNzg5OUUtMzI2CitzdWJ4MzA4NCBzdWJ0cmFjdCAtNDI3OC41ODE1MTQ2ODg2NjkyNDkyNDcwMDcxMjc4OTlFLTMyOSA1LjQ3NDk3Mzk5Mjk1MzkwMjYzMTg5MDIwODM2MDgyOSAtPiAtNS40NzQ5NzM5OTI5NTM5MDI2MzE4OTAyMDgzNjA4MjkgSW5leGFjdCBSb3VuZGVkCithZGR4MzA4NSBhZGQgNjA4NjcwMTkuODE3NjQ3OTg4NDU0Njg0NDUxOTY4NjlFKzY1MSA2LjE0OTYxMjU2NTQwNDA4MDUwMTE1NzA5Mzg1MTg5NUUrODE3IC0+IDYuMTQ5NjEyNTY1NDA0MDgwNTAxMTU3MDkzODUxODk1RSs4MTcgSW5leGFjdCBSb3VuZGVkCitjb214MzA4NSBjb21wYXJlIDYwODY3MDE5LjgxNzY0Nzk4ODQ1NDY4NDQ1MTk2ODY5RSs2NTEgNi4xNDk2MTI1NjU0MDQwODA1MDExNTcwOTM4NTE4OTVFKzgxNyAtPiAtMQorZGl2eDMwODUgZGl2aWRlIDYwODY3MDE5LjgxNzY0Nzk4ODQ1NDY4NDQ1MTk2ODY5RSs2NTEgNi4xNDk2MTI1NjU0MDQwODA1MDExNTcwOTM4NTE4OTVFKzgxNyAtPiA5Ljg5NzY5OTkyMzQxNzYxNzkyMDk5NjE4NzQyMDk2OEUtMTYwIEluZXhhY3QgUm91bmRlZAorZHZpeDMwODUgZGl2aWRlaW50IDYwODY3MDE5LjgxNzY0Nzk4ODQ1NDY4NDQ1MTk2ODY5RSs2NTEgNi4xNDk2MTI1NjU0MDQwODA1MDExNTcwOTM4NTE4OTVFKzgxNyAtPiAwCittdWx4MzA4NSBtdWx0aXBseSA2MDg2NzAxOS44MTc2NDc5ODg0NTQ2ODQ0NTE5Njg2OUUrNjUxIDYuMTQ5NjEyNTY1NDA0MDgwNTAxMTU3MDkzODUxODk1RSs4MTcgLT4gMy43NDMwODU4OTg4OTMwNzI1NDQxOTc1NjQwMTM0OTdFKzE0NzYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA4NSBwb3dlciA2MDg2NzAxOS44MTc2NDc5ODg0NTQ2ODQ0NTE5Njg2OUUrNjUxIDYgLT4gNS4wODUwMTQ4OTczODg4NzE3MzY3Njc2MDIwODY2NDZFKzM5NTIgSW5leGFjdCBSb3VuZGVkCityZW14MzA4NSByZW1haW5kZXIgNjA4NjcwMTkuODE3NjQ3OTg4NDU0Njg0NDUxOTY4NjlFKzY1MSA2LjE0OTYxMjU2NTQwNDA4MDUwMTE1NzA5Mzg1MTg5NUUrODE3IC0+IDYuMDg2NzAxOTgxNzY0Nzk4ODQ1NDY4NDQ1MTk2ODY5RSs2NTgKK3N1YngzMDg1IHN1YnRyYWN0IDYwODY3MDE5LjgxNzY0Nzk4ODQ1NDY4NDQ1MTk2ODY5RSs2NTEgNi4xNDk2MTI1NjU0MDQwODA1MDExNTcwOTM4NTE4OTVFKzgxNyAtPiAtNi4xNDk2MTI1NjU0MDQwODA1MDExNTcwOTM4NTE4OTVFKzgxNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDg2IGFkZCAxODU1NDQxNzczODIxNy42MjIxODU5MDk2NTgwMzYwNUUtMzgyIC0wODk0NTA1OTA5NTI5LjA1MjM3ODQ3NDYxODQzNTc4MkUrNTI3IC0+IC04Ljk0NTA1OTA5NTI5MDUyMzc4NDc0NjE4NDM1NzgyMEUrNTM4IEluZXhhY3QgUm91bmRlZAorY29teDMwODYgY29tcGFyZSAxODU1NDQxNzczODIxNy42MjIxODU5MDk2NTgwMzYwNUUtMzgyIC0wODk0NTA1OTA5NTI5LjA1MjM3ODQ3NDYxODQzNTc4MkUrNTI3IC0+IDEKK2RpdngzMDg2IGRpdmlkZSAxODU1NDQxNzczODIxNy42MjIxODU5MDk2NTgwMzYwNUUtMzgyIC0wODk0NTA1OTA5NTI5LjA1MjM3ODQ3NDYxODQzNTc4MkUrNTI3IC0+IC0yLjA3NDI2NDQxMTI4NjcwOTIyODY3NDg0MTY3Mjk1NEUtOTA4IEluZXhhY3QgUm91bmRlZAorZHZpeDMwODYgZGl2aWRlaW50IDE4NTU0NDE3NzM4MjE3LjYyMjE4NTkwOTY1ODAzNjA1RS0zODIgLTA4OTQ1MDU5MDk1MjkuMDUyMzc4NDc0NjE4NDM1NzgyRSs1MjcgLT4gLTAKK211bHgzMDg2IG11bHRpcGx5IDE4NTU0NDE3NzM4MjE3LjYyMjE4NTkwOTY1ODAzNjA1RS0zODIgLTA4OTQ1MDU5MDk1MjkuMDUyMzc4NDc0NjE4NDM1NzgyRSs1MjcgLT4gLTEuNjU5NzAzNjMxNDcwNjMzNzAwODg0MTM2ODg3NjE0RSsxNzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA4NiBwb3dlciAxODU1NDQxNzczODIxNy42MjIxODU5MDk2NTgwMzYwNUUtMzgyIC05IC0+IDMuODM2ODQyOTk4Mjk1NTMxODk5MDgyNjg4NzIxNTMxRSszMzE4IEluZXhhY3QgUm91bmRlZAorcmVteDMwODYgcmVtYWluZGVyIDE4NTU0NDE3NzM4MjE3LjYyMjE4NTkwOTY1ODAzNjA1RS0zODIgLTA4OTQ1MDU5MDk1MjkuMDUyMzc4NDc0NjE4NDM1NzgyRSs1MjcgLT4gMS44NTU0NDE3NzM4MjE3NjIyMTg1OTA5NjU4MDM2MDVFLTM2OQorc3VieDMwODYgc3VidHJhY3QgMTg1NTQ0MTc3MzgyMTcuNjIyMTg1OTA5NjU4MDM2MDVFLTM4MiAtMDg5NDUwNTkwOTUyOS4wNTIzNzg0NzQ2MTg0MzU3ODJFKzUyNyAtPiA4Ljk0NTA1OTA5NTI5MDUyMzc4NDc0NjE4NDM1NzgyMEUrNTM4IEluZXhhY3QgUm91bmRlZAorYWRkeDMwODcgYWRkIDY5MDczMzU1NTE3MTQ0LjM2MzU2Njg4NjQyMjEzODM5IDk5Nzc4NDc4MjUzNS42MTA0NjM0ODIzNjI3MzI3MDMzRSsxMTYgLT4gOS45Nzc4NDc4MjUzNTYxMDQ2MzQ4MjM2MjczMjcwMzNFKzEyNyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDg3IGNvbXBhcmUgNjkwNzMzNTU1MTcxNDQuMzYzNTY2ODg2NDIyMTM4MzkgOTk3Nzg0NzgyNTM1LjYxMDQ2MzQ4MjM2MjczMjcwMzNFKzExNiAtPiAtMQorZGl2eDMwODcgZGl2aWRlIDY5MDczMzU1NTE3MTQ0LjM2MzU2Njg4NjQyMjEzODM5IDk5Nzc4NDc4MjUzNS42MTA0NjM0ODIzNjI3MzI3MDMzRSsxMTYgLT4gNi45MjI2NzA3NzI5MTA4MDczODgzOTUzODQ4NjY4ODRFLTExNSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDg3IGRpdmlkZWludCA2OTA3MzM1NTUxNzE0NC4zNjM1NjY4ODY0MjIxMzgzOSA5OTc3ODQ3ODI1MzUuNjEwNDYzNDgyMzYyNzMyNzAzM0UrMTE2IC0+IDAKK211bHgzMDg3IG11bHRpcGx5IDY5MDczMzU1NTE3MTQ0LjM2MzU2Njg4NjQyMjEzODM5IDk5Nzc4NDc4MjUzNS42MTA0NjM0ODIzNjI3MzI3MDMzRSsxMTYgLT4gNi44OTIwMzQzMDEzNjc4Nzk4MDI2OTM0MjIwNjY0MjVFKzE0MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDg3IHBvd2VyIDY5MDczMzU1NTE3MTQ0LjM2MzU2Njg4NjQyMjEzODM5IDEwIC0+IDIuNDcyMzI0ODkwODQxMzM0MzAyNjI4NDM1NDYxNTE2RSsxMzggSW5leGFjdCBSb3VuZGVkCityZW14MzA4NyByZW1haW5kZXIgNjkwNzMzNTU1MTcxNDQuMzYzNTY2ODg2NDIyMTM4MzkgOTk3Nzg0NzgyNTM1LjYxMDQ2MzQ4MjM2MjczMjcwMzNFKzExNiAtPiA2OTA3MzM1NTUxNzE0NC4zNjM1NjY4ODY0MjIxMzgzOQorc3VieDMwODcgc3VidHJhY3QgNjkwNzMzNTU1MTcxNDQuMzYzNTY2ODg2NDIyMTM4MzkgOTk3Nzg0NzgyNTM1LjYxMDQ2MzQ4MjM2MjczMjcwMzNFKzExNiAtPiAtOS45Nzc4NDc4MjUzNTYxMDQ2MzQ4MjM2MjczMjcwMzNFKzEyNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDg4IGFkZCA0NTAyODIyNTkwNzIuODY1NzA5OTM1OTEwNDI3NzQ3NyAtMTc5MTMwNzk2NTMxNDMwOTE3NTQ3NzkxMTM2OTgyNCAtPiAtMTc5MTMwNzk2NTMxNDMwOTE3NTAyNzYyOTExMDc1MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDg4IGNvbXBhcmUgNDUwMjgyMjU5MDcyLjg2NTcwOTkzNTkxMDQyNzc0NzcgLTE3OTEzMDc5NjUzMTQzMDkxNzU0Nzc5MTEzNjk4MjQgLT4gMQorZGl2eDMwODggZGl2aWRlIDQ1MDI4MjI1OTA3Mi44NjU3MDk5MzU5MTA0Mjc3NDc3IC0xNzkxMzA3OTY1MzE0MzA5MTc1NDc3OTExMzY5ODI0IC0+IC0yLjUxMzcwNjU2NDA5NjM1MDcxNDIxMzc3MTAwNjQ4M0UtMTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzA4OCBkaXZpZGVpbnQgNDUwMjgyMjU5MDcyLjg2NTcwOTkzNTkxMDQyNzc0NzcgLTE3OTEzMDc5NjUzMTQzMDkxNzU0Nzc5MTEzNjk4MjQgLT4gLTAKK211bHgzMDg4IG11bHRpcGx5IDQ1MDI4MjI1OTA3Mi44NjU3MDk5MzU5MTA0Mjc3NDc3IC0xNzkxMzA3OTY1MzE0MzA5MTc1NDc3OTExMzY5ODI0IC0+IC04LjA2NTk0MTk3MzE2OTQ1NzA3MTY1MDk5Njg2MTY3N0UrNDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA4OCBwb3dlciA0NTAyODIyNTkwNzIuODY1NzA5OTM1OTEwNDI3NzQ3NyAtMiAtPiA0LjkzMjA4MjQ0MjE5NDU0NDY3MTYzMzU3MDM0ODgzOEUtMjQgSW5leGFjdCBSb3VuZGVkCityZW14MzA4OCByZW1haW5kZXIgNDUwMjgyMjU5MDcyLjg2NTcwOTkzNTkxMDQyNzc0NzcgLTE3OTEzMDc5NjUzMTQzMDkxNzU0Nzc5MTEzNjk4MjQgLT4gNDUwMjgyMjU5MDcyLjg2NTcwOTkzNTkxMDQyNzc0NzcKK3N1YngzMDg4IHN1YnRyYWN0IDQ1MDI4MjI1OTA3Mi44NjU3MDk5MzU5MTA0Mjc3NDc3IC0xNzkxMzA3OTY1MzE0MzA5MTc1NDc3OTExMzY5ODI0IC0+IDE3OTEzMDc5NjUzMTQzMDkxNzU5MjgxOTM2Mjg4OTcgSW5leGFjdCBSb3VuZGVkCithZGR4MzA4OSBhZGQgOTU0Njc4NDExLjc4MzgxNDkyNjY0NTUxNzc4NTAwMzcgMTQyOTg4LjcwOTYyMDQyNTQ1MjkyODQzMzQyNzg3OTQgLT4gOTU0ODIxNDAwLjQ5MzQzNTM1MjA5ODQ0NjIxODQzMTYgSW5leGFjdCBSb3VuZGVkCitjb214MzA4OSBjb21wYXJlIDk1NDY3ODQxMS43ODM4MTQ5MjY2NDU1MTc3ODUwMDM3IDE0Mjk4OC43MDk2MjA0MjU0NTI5Mjg0MzM0Mjc4Nzk0IC0+IDEKK2RpdngzMDg5IGRpdmlkZSA5NTQ2Nzg0MTEuNzgzODE0OTI2NjQ1NTE3Nzg1MDAzNyAxNDI5ODguNzA5NjIwNDI1NDUyOTI4NDMzNDI3ODc5NCAtPiA2Njc2LjU5OTk1MTk2ODgxMTU4OTMzNTQyNzc3MDA0NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDg5IGRpdmlkZWludCA5NTQ2Nzg0MTEuNzgzODE0OTI2NjQ1NTE3Nzg1MDAzNyAxNDI5ODguNzA5NjIwNDI1NDUyOTI4NDMzNDI3ODc5NCAtPiA2Njc2CittdWx4MzA4OSBtdWx0aXBseSA5NTQ2Nzg0MTEuNzgzODE0OTI2NjQ1NTE3Nzg1MDAzNyAxNDI5ODguNzA5NjIwNDI1NDUyOTI4NDMzNDI3ODc5NCAtPiAxMzY1MDgyMzQyMDM0NDQuODY5NDg3OTQzMTQxMjM3NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDg5IHBvd2VyIDk1NDY3ODQxMS43ODM4MTQ5MjY2NDU1MTc3ODUwMDM3IDE0Mjk4OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDg5IHJlbWFpbmRlciA5NTQ2Nzg0MTEuNzgzODE0OTI2NjQ1NTE3Nzg1MDAzNyAxNDI5ODguNzA5NjIwNDI1NDUyOTI4NDMzNDI3ODc5NCAtPiA4NTc4Ni4zNTc4NTQ2MDI4OTUyOTYyMjA0ODA4MjU2CitzdWJ4MzA4OSBzdWJ0cmFjdCA5NTQ2Nzg0MTEuNzgzODE0OTI2NjQ1NTE3Nzg1MDAzNyAxNDI5ODguNzA5NjIwNDI1NDUyOTI4NDMzNDI3ODc5NCAtPiA5NTQ1MzU0MjMuMDc0MTk0NTAxMTkyNTg5MzUxNTc1OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDkwIGFkZCAtOTI0NDUzMDk3Ni4yMjA4MTIxMjcxNTU4NTIzODk4MDdFKzU1NyA1NDEwODkuNDcxNTQ0Njg1ODg5NjYxOTA3ODYyNzk0MSAtPiAtOS4yNDQ1MzA5NzYyMjA4MTIxMjcxNTU4NTIzODk4MDdFKzU2NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDkwIGNvbXBhcmUgLTkyNDQ1MzA5NzYuMjIwODEyMTI3MTU1ODUyMzg5ODA3RSs1NTcgNTQxMDg5LjQ3MTU0NDY4NTg4OTY2MTkwNzg2Mjc5NDEgLT4gLTEKK2RpdngzMDkwIGRpdmlkZSAtOTI0NDUzMDk3Ni4yMjA4MTIxMjcxNTU4NTIzODk4MDdFKzU1NyA1NDEwODkuNDcxNTQ0Njg1ODg5NjYxOTA3ODYyNzk0MSAtPiAtMS43MDg1MDMyMDczOTU1OTEwMDIzNzA2NDk4NDg3NTdFKzU2MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDkwIGRpdmlkZWludCAtOTI0NDUzMDk3Ni4yMjA4MTIxMjcxNTU4NTIzODk4MDdFKzU1NyA1NDEwODkuNDcxNTQ0Njg1ODg5NjYxOTA3ODYyNzk0MSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwOTAgbXVsdGlwbHkgLTkyNDQ1MzA5NzYuMjIwODEyMTI3MTU1ODUyMzg5ODA3RSs1NTcgNTQxMDg5LjQ3MTU0NDY4NTg4OTY2MTkwNzg2Mjc5NDEgLT4gLTUuMDAyMTE4MzgwNjAxNzk4MzkyMzYzMDQzNTU4OTQxRSs1NzIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA5MCBwb3dlciAtOTI0NDUzMDk3Ni4yMjA4MTIxMjcxNTU4NTIzODk4MDdFKzU1NyA1NDEwODkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMwOTAgcmVtYWluZGVyIC05MjQ0NTMwOTc2LjIyMDgxMjEyNzE1NTg1MjM4OTgwN0UrNTU3IDU0MTA4OS40NzE1NDQ2ODU4ODk2NjE5MDc4NjI3OTQxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA5MCBzdWJ0cmFjdCAtOTI0NDUzMDk3Ni4yMjA4MTIxMjcxNTU4NTIzODk4MDdFKzU1NyA1NDEwODkuNDcxNTQ0Njg1ODg5NjYxOTA3ODYyNzk0MSAtPiAtOS4yNDQ1MzA5NzYyMjA4MTIxMjcxNTU4NTIzODk4MDdFKzU2NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDkxIGFkZCAtNzU0OTIwMjQuMjA5OTAxOTcwMDU5NzQyNDE5NzU0NDkgLTE0NzYwNDIxMzExMzQ4LjM1MjY5MDQ0NjMzMDAwOTI3IC0+IC0xNDc2MDQ5NjgwMzM3Mi41NjI1OTI0MTYzODk3NTE2OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDkxIGNvbXBhcmUgLTc1NDkyMDI0LjIwOTkwMTk3MDA1OTc0MjQxOTc1NDQ5IC0xNDc2MDQyMTMxMTM0OC4zNTI2OTA0NDYzMzAwMDkyNyAtPiAxCitkaXZ4MzA5MSBkaXZpZGUgLTc1NDkyMDI0LjIwOTkwMTk3MDA1OTc0MjQxOTc1NDQ5IC0xNDc2MDQyMTMxMTM0OC4zNTI2OTA0NDYzMzAwMDkyNyAtPiAwLjAwMDAwNTExNDQ4OTc5NzkyMDY2ODgzNjI3ODM0NDYzNTEwOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDkxIGRpdmlkZWludCAtNzU0OTIwMjQuMjA5OTAxOTcwMDU5NzQyNDE5NzU0NDkgLTE0NzYwNDIxMzExMzQ4LjM1MjY5MDQ0NjMzMDAwOTI3IC0+IDAKK211bHgzMDkxIG11bHRpcGx5IC03NTQ5MjAyNC4yMDk5MDE5NzAwNTk3NDI0MTk3NTQ0OSAtMTQ3NjA0MjEzMTEzNDguMzUyNjkwNDQ2MzMwMDA5MjcgLT4gMTExNDI5NDA4Mjk4NDY2MjgyNTgzMS40NjQ3ODc0ODcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA5MSBwb3dlciAtNzU0OTIwMjQuMjA5OTAxOTcwMDU5NzQyNDE5NzU0NDkgLTEgLT4gLTEuMzI0NjQzMjQ2MDQ2MTYyMDgyMzQ4OTcwNzM1NTc2RS04IEluZXhhY3QgUm91bmRlZAorcmVteDMwOTEgcmVtYWluZGVyIC03NTQ5MjAyNC4yMDk5MDE5NzAwNTk3NDI0MTk3NTQ0OSAtMTQ3NjA0MjEzMTEzNDguMzUyNjkwNDQ2MzMwMDA5MjcgLT4gLTc1NDkyMDI0LjIwOTkwMTk3MDA1OTc0MjQxOTc1NDQ5CitzdWJ4MzA5MSBzdWJ0cmFjdCAtNzU0OTIwMjQuMjA5OTAxOTcwMDU5NzQyNDE5NzU0NDkgLTE0NzYwNDIxMzExMzQ4LjM1MjY5MDQ0NjMzMDAwOTI3IC0+IDE0NzYwMzQ1ODE5MzI0LjE0Mjc4ODQ3NjI3MDI2Njg1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwOTIgYWRkIDMxNzc0Ny42OTcyMjE1NzE1NDM0MTg2NTk2MTc4MDM2RS00NTIgMjQ3NTk3NjMuMzMxNDQ4MjQ2MTM1OTEyMjgwOTczMzBFKzA5MiAtPiAyLjQ3NTk3NjMzMzE0NDgyNDYxMzU5MTIyODA5NzMzMEUrOTkgSW5leGFjdCBSb3VuZGVkCitjb214MzA5MiBjb21wYXJlIDMxNzc0Ny42OTcyMjE1NzE1NDM0MTg2NTk2MTc4MDM2RS00NTIgMjQ3NTk3NjMuMzMxNDQ4MjQ2MTM1OTEyMjgwOTczMzBFKzA5MiAtPiAtMQorZGl2eDMwOTIgZGl2aWRlIDMxNzc0Ny42OTcyMjE1NzE1NDM0MTg2NTk2MTc4MDM2RS00NTIgMjQ3NTk3NjMuMzMxNDQ4MjQ2MTM1OTEyMjgwOTczMzBFKzA5MiAtPiAxLjI4MzMyMjgzNzAwNzg1MjI0NzU5NDIxNjE1MTYzNEUtNTQ2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwOTIgZGl2aWRlaW50IDMxNzc0Ny42OTcyMjE1NzE1NDM0MTg2NTk2MTc4MDM2RS00NTIgMjQ3NTk3NjMuMzMxNDQ4MjQ2MTM1OTEyMjgwOTczMzBFKzA5MiAtPiAwCittdWx4MzA5MiBtdWx0aXBseSAzMTc3NDcuNjk3MjIxNTcxNTQzNDE4NjU5NjE3ODAzNkUtNDUyIDI0NzU5NzYzLjMzMTQ0ODI0NjEzNTkxMjI4MDk3MzMwRSswOTIgLT4gNy44NjczNTc3ODIzMTg3ODY4NjA0MDQ5OTc2NDc1MTNFLTM0OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDkyIHBvd2VyIDMxNzc0Ny42OTcyMjE1NzE1NDM0MTg2NTk2MTc4MDM2RS00NTIgMiAtPiAxLjAwOTYzNTk5MDg5NjExNTA0MzMzMTIzMTQ5NjIwOUUtODkzIEluZXhhY3QgUm91bmRlZAorcmVteDMwOTIgcmVtYWluZGVyIDMxNzc0Ny42OTcyMjE1NzE1NDM0MTg2NTk2MTc4MDM2RS00NTIgMjQ3NTk3NjMuMzMxNDQ4MjQ2MTM1OTEyMjgwOTczMzBFKzA5MiAtPiAzLjE3NzQ3Njk3MjIxNTcxNTQzNDE4NjU5NjE3ODAzNkUtNDQ3CitzdWJ4MzA5MiBzdWJ0cmFjdCAzMTc3NDcuNjk3MjIxNTcxNTQzNDE4NjU5NjE3ODAzNkUtNDUyIDI0NzU5NzYzLjMzMTQ0ODI0NjEzNTkxMjI4MDk3MzMwRSswOTIgLT4gLTIuNDc1OTc2MzMzMTQ0ODI0NjEzNTkxMjI4MDk3MzMwRSs5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDkzIGFkZCAtOC4xNTMzMzQ0MzAzNTg2NDcxMzQzMzQ1NDUzNTM0MjcgLTkuNzE3ODcyMDI1ODE0NTk2NTQ4NDYyODU0ODUzNTIyIC0+IC0xNy44NzEyMDY0NTYxNzMyNDM2ODI3OTc0MDAyMDY5NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDkzIGNvbXBhcmUgLTguMTUzMzM0NDMwMzU4NjQ3MTM0MzM0NTQ1MzUzNDI3IC05LjcxNzg3MjAyNTgxNDU5NjU0ODQ2Mjg1NDg1MzUyMiAtPiAxCitkaXZ4MzA5MyBkaXZpZGUgLTguMTUzMzM0NDMwMzU4NjQ3MTM0MzM0NTQ1MzUzNDI3IC05LjcxNzg3MjAyNTgxNDU5NjU0ODQ2Mjg1NDg1MzUyMiAtPiAwLjgzOTAwNDA5NTYxODg4NTk5NzIwNDQzNDQ1MzIwMTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzA5MyBkaXZpZGVpbnQgLTguMTUzMzM0NDMwMzU4NjQ3MTM0MzM0NTQ1MzUzNDI3IC05LjcxNzg3MjAyNTgxNDU5NjU0ODQ2Mjg1NDg1MzUyMiAtPiAwCittdWx4MzA5MyBtdWx0aXBseSAtOC4xNTMzMzQ0MzAzNTg2NDcxMzQzMzQ1NDUzNTM0MjcgLTkuNzE3ODcyMDI1ODE0NTk2NTQ4NDYyODU0ODUzNTIyIC0+IDc5LjIzMzA2MDU3Nzg5MzI4NTc4OTAyOTYwNjA1MjIyIEluZXhhY3QgUm91bmRlZAorcG93eDMwOTMgcG93ZXIgLTguMTUzMzM0NDMwMzU4NjQ3MTM0MzM0NTQ1MzUzNDI3IC0xMCAtPiA3LjcwMjc3ODk2Njg3NjcyNzA1NjYzNTk1MjgwMTE2MkUtMTAgSW5leGFjdCBSb3VuZGVkCityZW14MzA5MyByZW1haW5kZXIgLTguMTUzMzM0NDMwMzU4NjQ3MTM0MzM0NTQ1MzUzNDI3IC05LjcxNzg3MjAyNTgxNDU5NjU0ODQ2Mjg1NDg1MzUyMiAtPiAtOC4xNTMzMzQ0MzAzNTg2NDcxMzQzMzQ1NDUzNTM0MjcKK3N1YngzMDkzIHN1YnRyYWN0IC04LjE1MzMzNDQzMDM1ODY0NzEzNDMzNDU0NTM1MzQyNyAtOS43MTc4NzIwMjU4MTQ1OTY1NDg0NjI4NTQ4NTM1MjIgLT4gMS41NjQ1Mzc1OTU0NTU5NDk0MTQxMjgzMDk1MDAwOTUKK2FkZHgzMDk0IGFkZCA3LjI2NzM0NTE5NzQ5Mjk2NzMzMjMyMDQ1NjA2Mjk2MUUtNDc4IDUwNTQwMTU0ODE4MzMuMjYzNTQxMTg5OTE2MjA4MDY1IC0+IDUwNTQwMTU0ODE4MzMuMjYzNTQxMTg5OTE2MjA4MDY1IEluZXhhY3QgUm91bmRlZAorY29teDMwOTQgY29tcGFyZSA3LjI2NzM0NTE5NzQ5Mjk2NzMzMjMyMDQ1NjA2Mjk2MUUtNDc4IDUwNTQwMTU0ODE4MzMuMjYzNTQxMTg5OTE2MjA4MDY1IC0+IC0xCitkaXZ4MzA5NCBkaXZpZGUgNy4yNjczNDUxOTc0OTI5NjczMzIzMjA0NTYwNjI5NjFFLTQ3OCA1MDU0MDE1NDgxODMzLjI2MzU0MTE4OTkxNjIwODA2NSAtPiAxLjQzNzkzNDg5MDMwOTYwNjU5NDg5NTI5OTU1ODY1NEUtNDkwIEluZXhhY3QgUm91bmRlZAorZHZpeDMwOTQgZGl2aWRlaW50IDcuMjY3MzQ1MTk3NDkyOTY3MzMyMzIwNDU2MDYyOTYxRS00NzggNTA1NDAxNTQ4MTgzMy4yNjM1NDExODk5MTYyMDgwNjUgLT4gMAorbXVseDMwOTQgbXVsdGlwbHkgNy4yNjczNDUxOTc0OTI5NjczMzIzMjA0NTYwNjI5NjFFLTQ3OCA1MDU0MDE1NDgxODMzLjI2MzU0MTE4OTkxNjIwODA2NSAtPiAzLjY3MjkyNzUxMzk5NTYwNzMwODA0ODczNzc1MTk3MkUtNDY1IEluZXhhY3QgUm91bmRlZAorcG93eDMwOTQgcG93ZXIgNy4yNjczNDUxOTc0OTI5NjczMzIzMjA0NTYwNjI5NjFFLTQ3OCA1IC0+IDIuMDI3MTE3NjE2ODQ2NjY4NTY4MTA4MDk2NTgzODk3RS0yMzg2IEluZXhhY3QgUm91bmRlZAorcmVteDMwOTQgcmVtYWluZGVyIDcuMjY3MzQ1MTk3NDkyOTY3MzMyMzIwNDU2MDYyOTYxRS00NzggNTA1NDAxNTQ4MTgzMy4yNjM1NDExODk5MTYyMDgwNjUgLT4gNy4yNjczNDUxOTc0OTI5NjczMzIzMjA0NTYwNjI5NjFFLTQ3OAorc3VieDMwOTQgc3VidHJhY3QgNy4yNjczNDUxOTc0OTI5NjczMzIzMjA0NTYwNjI5NjFFLTQ3OCA1MDU0MDE1NDgxODMzLjI2MzU0MTE4OTkxNjIwODA2NSAtPiAtNTA1NDAxNTQ4MTgzMy4yNjM1NDExODk5MTYyMDgwNjUgSW5leGFjdCBSb3VuZGVkCithZGR4MzA5NSBhZGQgLTEyMjMzNTQwMjkuODYyNTY3MDU0MjMwOTEyMjcxMTcxIDgxMzU3NzQyMjM0MDEzMjI3ODU0NzUwMTQ4NTU2MjUgLT4gODEzNTc3NDIyMzQwMTMyMjc4NTQ3Mzc5MTUwMTU5NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDk1IGNvbXBhcmUgLTEyMjMzNTQwMjkuODYyNTY3MDU0MjMwOTEyMjcxMTcxIDgxMzU3NzQyMjM0MDEzMjI3ODU0NzUwMTQ4NTU2MjUgLT4gLTEKK2RpdngzMDk1IGRpdmlkZSAtMTIyMzM1NDAyOS44NjI1NjcwNTQyMzA5MTIyNzExNzEgODEzNTc3NDIyMzQwMTMyMjc4NTQ3NTAxNDg1NTYyNSAtPiAtMS41MDM2NzI1NDA4OTIwMjAzMzc2ODgyNzc1NTM2OTJFLTIyIEluZXhhY3QgUm91bmRlZAorZHZpeDMwOTUgZGl2aWRlaW50IC0xMjIzMzU0MDI5Ljg2MjU2NzA1NDIzMDkxMjI3MTE3MSA4MTM1Nzc0MjIzNDAxMzIyNzg1NDc1MDE0ODU1NjI1IC0+IC0wCittdWx4MzA5NSBtdWx0aXBseSAtMTIyMzM1NDAyOS44NjI1NjcwNTQyMzA5MTIyNzExNzEgODEzNTc3NDIyMzQwMTMyMjc4NTQ3NTAxNDg1NTYyNSAtPiAtOS45NTI5MzIxODIyNTAwMDUxMTkzMDc0MjkwNjA4OTRFKzM5IEluZXhhY3QgUm91bmRlZAorcG93eDMwOTUgcG93ZXIgLTEyMjMzNTQwMjkuODYyNTY3MDU0MjMwOTEyMjcxMTcxIDggLT4gNS4wMTY2ODk4ODcxOTI4MzA2NjY4NDgwNjg4NDEyMjdFKzcyIEluZXhhY3QgUm91bmRlZAorcmVteDMwOTUgcmVtYWluZGVyIC0xMjIzMzU0MDI5Ljg2MjU2NzA1NDIzMDkxMjI3MTE3MSA4MTM1Nzc0MjIzNDAxMzIyNzg1NDc1MDE0ODU1NjI1IC0+IC0xMjIzMzU0MDI5Ljg2MjU2NzA1NDIzMDkxMjI3MTE3MQorc3VieDMwOTUgc3VidHJhY3QgLTEyMjMzNTQwMjkuODYyNTY3MDU0MjMwOTEyMjcxMTcxIDgxMzU3NzQyMjM0MDEzMjI3ODU0NzUwMTQ4NTU2MjUgLT4gLTgxMzU3NzQyMjM0MDEzMjI3ODU0NzYyMzgyMDk2NTUgSW5leGFjdCBSb3VuZGVkCithZGR4MzA5NiBhZGQgMjg1Mzk3NjQ0MTExLjU2NTU2Nzk5NjEyMTEzNDk5ODJFKzY0NSAtMjQ3OTQ5OTQyNzYxMzE1NzUxOTM1OTYyNzI4MDcwNCAtPiAyLjg1Mzk3NjQ0MTExNTY1NTY3OTk2MTIxMTM0OTk4MkUrNjU2IEluZXhhY3QgUm91bmRlZAorY29teDMwOTYgY29tcGFyZSAyODUzOTc2NDQxMTEuNTY1NTY3OTk2MTIxMTM0OTk4MkUrNjQ1IC0yNDc5NDk5NDI3NjEzMTU3NTE5MzU5NjI3MjgwNzA0IC0+IDEKK2RpdngzMDk2IGRpdmlkZSAyODUzOTc2NDQxMTEuNTY1NTY3OTk2MTIxMTM0OTk4MkUrNjQ1IC0yNDc5NDk5NDI3NjEzMTU3NTE5MzU5NjI3MjgwNzA0IC0+IC0xLjE1MTAyOTI4MDA3NjQ5NTYyNjQyMTEzNDczMzEyMkUrNjI2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwOTYgZGl2aWRlaW50IDI4NTM5NzY0NDExMS41NjU1Njc5OTYxMjExMzQ5OTgyRSs2NDUgLTI0Nzk0OTk0Mjc2MTMxNTc1MTkzNTk2MjcyODA3MDQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDk2IG11bHRpcGx5IDI4NTM5NzY0NDExMS41NjU1Njc5OTYxMjExMzQ5OTgyRSs2NDUgLTI0Nzk0OTk0Mjc2MTMxNTc1MTkzNTk2MjcyODA3MDQgLT4gLTcuMDc2NDMyOTUyMTY3NzA0NjE0MTM4NDExNzQwMDAxRSs2ODYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA5NiBwb3dlciAyODUzOTc2NDQxMTEuNTY1NTY3OTk2MTIxMTM0OTk4MkUrNjQ1IC0yIC0+IDEuMjI3NzE5NzIyMDg3ODYwNDAxMjMzMDMwNDc5NDUxRS0xMzEzIEluZXhhY3QgUm91bmRlZAorcmVteDMwOTYgcmVtYWluZGVyIDI4NTM5NzY0NDExMS41NjU1Njc5OTYxMjExMzQ5OTgyRSs2NDUgLTI0Nzk0OTk0Mjc2MTMxNTc1MTkzNTk2MjcyODA3MDQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDk2IHN1YnRyYWN0IDI4NTM5NzY0NDExMS41NjU1Njc5OTYxMjExMzQ5OTgyRSs2NDUgLTI0Nzk0OTk0Mjc2MTMxNTc1MTkzNTk2MjcyODA3MDQgLT4gMi44NTM5NzY0NDExMTU2NTU2Nzk5NjEyMTEzNDk5ODJFKzY1NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDk3IGFkZCAtNDY3MzExMi42NjM0NDIzNjYyOTM4MTIzNDY2NTM0MjkgLTM0MjkuOTk4NDAzMTQyNTQ2MDAxNDM4MjM4NDYwOTU4IC0+IC00Njc2NTQyLjY2MTg0NTUwODgzOTgxMzc4NDg5MTg5MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDk3IGNvbXBhcmUgLTQ2NzMxMTIuNjYzNDQyMzY2MjkzODEyMzQ2NjUzNDI5IC0zNDI5Ljk5ODQwMzE0MjU0NjAwMTQzODIzODQ2MDk1OCAtPiAtMQorZGl2eDMwOTcgZGl2aWRlIC00NjczMTEyLjY2MzQ0MjM2NjI5MzgxMjM0NjY1MzQyOSAtMzQyOS45OTg0MDMxNDI1NDYwMDE0MzgyMzg0NjA5NTggLT4gMTM2Mi40MjQxNTEzMjM0Nzc1MDUwNjQ2ODY1ODk3MTYgSW5leGFjdCBSb3VuZGVkCitkdml4MzA5NyBkaXZpZGVpbnQgLTQ2NzMxMTIuNjYzNDQyMzY2MjkzODEyMzQ2NjUzNDI5IC0zNDI5Ljk5ODQwMzE0MjU0NjAwMTQzODIzODQ2MDk1OCAtPiAxMzYyCittdWx4MzA5NyBtdWx0aXBseSAtNDY3MzExMi42NjM0NDIzNjYyOTM4MTIzNDY2NTM0MjkgLTM0MjkuOTk4NDAzMTQyNTQ2MDAxNDM4MjM4NDYwOTU4IC0+IDE2MDI4NzY4OTczLjMxMjUyNjM5NDc2MTQ4MzcxMzYxIEluZXhhY3QgUm91bmRlZAorcG93eDMwOTcgcG93ZXIgLTQ2NzMxMTIuNjYzNDQyMzY2MjkzODEyMzQ2NjUzNDI5IC0zNDMwIC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDk3IHJlbWFpbmRlciAtNDY3MzExMi42NjM0NDIzNjYyOTM4MTIzNDY2NTM0MjkgLTM0MjkuOTk4NDAzMTQyNTQ2MDAxNDM4MjM4NDYwOTU4IC0+IC0xNDU0LjgzODM2MjIxODYzOTg1MzQ2NTg2OTYwNDIwNAorc3VieDMwOTcgc3VidHJhY3QgLTQ2NzMxMTIuNjYzNDQyMzY2MjkzODEyMzQ2NjUzNDI5IC0zNDI5Ljk5ODQwMzE0MjU0NjAwMTQzODIzODQ2MDk1OCAtPiAtNDY2OTY4Mi42NjUwMzkyMjM3NDc4MTA5MDg0MTQ5NjggSW5leGFjdCBSb3VuZGVkCithZGR4MzA5OCBhZGQgODguOTY0OTI0Nzk2ODEyNzgwNzk4NjE0NTYwNTExMDMgMzg2OTM5LjQ2MjEwMDY1MTQ3NTE4ODkwOTY1MTA5MjNFKzEzOSAtPiAzLjg2OTM5NDYyMTAwNjUxNDc1MTg4OTA5NjUxMDkyM0UrMTQ0IEluZXhhY3QgUm91bmRlZAorY29teDMwOTggY29tcGFyZSA4OC45NjQ5MjQ3OTY4MTI3ODA3OTg2MTQ1NjA1MTEwMyAzODY5MzkuNDYyMTAwNjUxNDc1MTg4OTA5NjUxMDkyM0UrMTM5IC0+IC0xCitkaXZ4MzA5OCBkaXZpZGUgODguOTY0OTI0Nzk2ODEyNzgwNzk4NjE0NTYwNTExMDMgMzg2OTM5LjQ2MjEwMDY1MTQ3NTE4ODkwOTY1MTA5MjNFKzEzOSAtPiAyLjI5OTE5NDkyNjA5NTk4NTY0NzgyMTM4NTkzNzYxOEUtMTQzIEluZXhhY3QgUm91bmRlZAorZHZpeDMwOTggZGl2aWRlaW50IDg4Ljk2NDkyNDc5NjgxMjc4MDc5ODYxNDU2MDUxMTAzIDM4NjkzOS40NjIxMDA2NTE0NzUxODg5MDk2NTEwOTIzRSsxMzkgLT4gMAorbXVseDMwOTggbXVsdGlwbHkgODguOTY0OTI0Nzk2ODEyNzgwNzk4NjE0NTYwNTExMDMgMzg2OTM5LjQ2MjEwMDY1MTQ3NTE4ODkwOTY1MTA5MjNFKzEzOSAtPiAzLjQ0MjQwNDAxNDY3MDM2NDc2Mzc4MDk0NjI5Nzg1NkUrMTQ2IEluZXhhY3QgUm91bmRlZAorcG93eDMwOTggcG93ZXIgODguOTY0OTI0Nzk2ODEyNzgwNzk4NjE0NTYwNTExMDMgNCAtPiA2MjY0MzM5MS43MzA3ODI5MDIyNjQ3NDc1ODg1ODk3MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDk4IHJlbWFpbmRlciA4OC45NjQ5MjQ3OTY4MTI3ODA3OTg2MTQ1NjA1MTEwMyAzODY5MzkuNDYyMTAwNjUxNDc1MTg4OTA5NjUxMDkyM0UrMTM5IC0+IDg4Ljk2NDkyNDc5NjgxMjc4MDc5ODYxNDU2MDUxMTAzCitzdWJ4MzA5OCBzdWJ0cmFjdCA4OC45NjQ5MjQ3OTY4MTI3ODA3OTg2MTQ1NjA1MTEwMyAzODY5MzkuNDYyMTAwNjUxNDc1MTg4OTA5NjUxMDkyM0UrMTM5IC0+IC0zLjg2OTM5NDYyMTAwNjUxNDc1MTg4OTA5NjUxMDkyM0UrMTQ0IEluZXhhY3QgUm91bmRlZAorYWRkeDMwOTkgYWRkIDA2NDMyNjg0Ni40Mjg2NDM3MzA0Nzg4MDY5NDQ0MzI2RS05NDIgOTIuMjM2NDk5NDIwMTA4NjIwODcxNDkwMTUwOTEzNTAgLT4gOTIuMjM2NDk5NDIwMTA4NjIwODcxNDkwMTUwOTEzNTAgSW5leGFjdCBSb3VuZGVkCitjb214MzA5OSBjb21wYXJlIDA2NDMyNjg0Ni40Mjg2NDM3MzA0Nzg4MDY5NDQ0MzI2RS05NDIgOTIuMjM2NDk5NDIwMTA4NjIwODcxNDkwMTUwOTEzNTAgLT4gLTEKK2RpdngzMDk5IGRpdmlkZSAwNjQzMjY4NDYuNDI4NjQzNzMwNDc4ODA2OTQ0NDMyNkUtOTQyIDkyLjIzNjQ5OTQyMDEwODYyMDg3MTQ5MDE1MDkxMzUwIC0+IDYuOTc0MTIwNTMwNzA4MjMwMjI5MzQ0MzQ5NTMxNzE5RS05MzcgSW5leGFjdCBSb3VuZGVkCitkdml4MzA5OSBkaXZpZGVpbnQgMDY0MzI2ODQ2LjQyODY0MzczMDQ3ODgwNjk0NDQzMjZFLTk0MiA5Mi4yMzY0OTk0MjAxMDg2MjA4NzE0OTAxNTA5MTM1MCAtPiAwCittdWx4MzA5OSBtdWx0aXBseSAwNjQzMjY4NDYuNDI4NjQzNzMwNDc4ODA2OTQ0NDMyNkUtOTQyIDkyLjIzNjQ5OTQyMDEwODYyMDg3MTQ5MDE1MDkxMzUwIC0+IDUuOTMzMjgzMTMzMzEzMDEzNzU1ODE0NDA1NDM2MzQyRS05MzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA5OSBwb3dlciAwNjQzMjY4NDYuNDI4NjQzNzMwNDc4ODA2OTQ0NDMyNkUtOTQyIDkyIC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDk5IHJlbWFpbmRlciAwNjQzMjY4NDYuNDI4NjQzNzMwNDc4ODA2OTQ0NDMyNkUtOTQyIDkyLjIzNjQ5OTQyMDEwODYyMDg3MTQ5MDE1MDkxMzUwIC0+IDYuNDMyNjg0NjQyODY0MzczMDQ3ODgwNjk0NDQzMjZFLTkzNQorc3VieDMwOTkgc3VidHJhY3QgMDY0MzI2ODQ2LjQyODY0MzczMDQ3ODgwNjk0NDQzMjZFLTk0MiA5Mi4yMzY0OTk0MjAxMDg2MjA4NzE0OTAxNTA5MTM1MCAtPiAtOTIuMjM2NDk5NDIwMTA4NjIwODcxNDkwMTUwOTEzNTAgSW5leGFjdCBSb3VuZGVkCithZGR4MzEwMCBhZGQgNTA0NTA3LjAwNDM5NDkzMjQ0MzMxNzA0MDU2OTkzNjAgNjA1Mzg3LjcxNzU1MjI5NTUzNDQ2NTkzMTEwNzIwOTkgLT4gMTEwOTg5NC43MjE5NDcyMjc5Nzc3ODI5NzE2NzcxNDYgSW5leGFjdCBSb3VuZGVkCitjb214MzEwMCBjb21wYXJlIDUwNDUwNy4wMDQzOTQ5MzI0NDMzMTcwNDA1Njk5MzYwIDYwNTM4Ny43MTc1NTIyOTU1MzQ0NjU5MzExMDcyMDk5IC0+IC0xCitkaXZ4MzEwMCBkaXZpZGUgNTA0NTA3LjAwNDM5NDkzMjQ0MzMxNzA0MDU2OTkzNjAgNjA1Mzg3LjcxNzU1MjI5NTUzNDQ2NTkzMTEwNzIwOTkgLT4gMC44MzMzNjE4MTA1Njc4NzE4ODk1MjE2MDY3NDYzODMyIEluZXhhY3QgUm91bmRlZAorZHZpeDMxMDAgZGl2aWRlaW50IDUwNDUwNy4wMDQzOTQ5MzI0NDMzMTcwNDA1Njk5MzYwIDYwNTM4Ny43MTc1NTIyOTU1MzQ0NjU5MzExMDcyMDk5IC0+IDAKK211bHgzMTAwIG11bHRpcGx5IDUwNDUwNy4wMDQzOTQ5MzI0NDMzMTcwNDA1Njk5MzYwIDYwNTM4Ny43MTc1NTIyOTU1MzQ0NjU5MzExMDcyMDk5IC0+IDMwNTQyMjM0Mzg3OS43OTQwODM4NjMwNDAxNjU2NTg1IEluZXhhY3QgUm91bmRlZAorcG93eDMxMDAgcG93ZXIgNTA0NTA3LjAwNDM5NDkzMjQ0MzMxNzA0MDU2OTkzNjAgNjA1Mzg4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMxMDAgcmVtYWluZGVyIDUwNDUwNy4wMDQzOTQ5MzI0NDMzMTcwNDA1Njk5MzYwIDYwNTM4Ny43MTc1NTIyOTU1MzQ0NjU5MzExMDcyMDk5IC0+IDUwNDUwNy4wMDQzOTQ5MzI0NDMzMTcwNDA1Njk5MzYwCitzdWJ4MzEwMCBzdWJ0cmFjdCA1MDQ1MDcuMDA0Mzk0OTMyNDQzMzE3MDQwNTY5OTM2MCA2MDUzODcuNzE3NTUyMjk1NTM0NDY1OTMxMTA3MjA5OSAtPiAtMTAwODgwLjcxMzE1NzM2MzA5MTE0ODg5MDUzNzI3MzkKKworLS0gcmFuZG9tbHkgZ2VuZXJhdGVkIHRlc3RjYXNlcyBbMjYgU2VwIDIwMDFdCitwcmVjaXNpb246IDMyCityb3VuZGluZzogaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OTkKKworYWRkeDMyMDEgYWRkIDEuNTI4MzU1MDE2MzgzOTc4OTMxOTE0MjQzMDI1MzY0NCAtMS42NTc4MTU4NDg0ODIyOTY5NTIwNDA1MjkxMzc5NDkyIC0+IC0wLjEyOTQ2MDgzMjA5ODMxODAyMDEyNjI4NjExMjU4NDgKK2NvbXgzMjAxIGNvbXBhcmUgMS41MjgzNTUwMTYzODM5Nzg5MzE5MTQyNDMwMjUzNjQ0IC0xLjY1NzgxNTg0ODQ4MjI5Njk1MjA0MDUyOTEzNzk0OTIgLT4gMQorZGl2eDMyMDEgZGl2aWRlIDEuNTI4MzU1MDE2MzgzOTc4OTMxOTE0MjQzMDI1MzY0NCAtMS42NTc4MTU4NDg0ODIyOTY5NTIwNDA1MjkxMzc5NDkyIC0+IC0wLjkyMTkwODc5ODEyMzI0MzEzNjMwMjgyOTgwMTEwMjgwIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMDEgZGl2aWRlaW50IDEuNTI4MzU1MDE2MzgzOTc4OTMxOTE0MjQzMDI1MzY0NCAtMS42NTc4MTU4NDg0ODIyOTY5NTIwNDA1MjkxMzc5NDkyIC0+IC0wCittdWx4MzIwMSBtdWx0aXBseSAxLjUyODM1NTAxNjM4Mzk3ODkzMTkxNDI0MzAyNTM2NDQgLTEuNjU3ODE1ODQ4NDgyMjk2OTUyMDQwNTI5MTM3OTQ5MiAtPiAtMi41MzM3MzExNjgyNjg3ODA4OTI2NjMzOTEwNzYxNjE0IEluZXhhY3QgUm91bmRlZAorcG93eDMyMDEgcG93ZXIgMS41MjgzNTUwMTYzODM5Nzg5MzE5MTQyNDMwMjUzNjQ0IC0yIC0+IDAuNDI4MTA2MTg5MTY1ODQ5MjQ0NTE0NjY2OTE2MDMxMjggSW5leGFjdCBSb3VuZGVkCityZW14MzIwMSByZW1haW5kZXIgMS41MjgzNTUwMTYzODM5Nzg5MzE5MTQyNDMwMjUzNjQ0IC0xLjY1NzgxNTg0ODQ4MjI5Njk1MjA0MDUyOTEzNzk0OTIgLT4gMS41MjgzNTUwMTYzODM5Nzg5MzE5MTQyNDMwMjUzNjQ0CitzdWJ4MzIwMSBzdWJ0cmFjdCAxLjUyODM1NTAxNjM4Mzk3ODkzMTkxNDI0MzAyNTM2NDQgLTEuNjU3ODE1ODQ4NDgyMjk2OTUyMDQwNTI5MTM3OTQ5MiAtPiAzLjE4NjE3MDg2NDg2NjI3NTg4Mzk1NDc3MjE2MzMxMzYKK2FkZHgzMjAyIGFkZCAtNjIyOTAzMDMwNjA1LjI4Njc1MDM5Mzc4MzY1MDczMjYgNjUxOTM4ODYwNy4xMzMxODU1NzA0NDcxMzI4Nzk1ODIxIC0+IC02MTYzODM2NDE5OTguMTUzNTY0ODIzMzM2NTE3ODUzMDIgSW5leGFjdCBSb3VuZGVkCitjb214MzIwMiBjb21wYXJlIC02MjI5MDMwMzA2MDUuMjg2NzUwMzkzNzgzNjUwNzMyNiA2NTE5Mzg4NjA3LjEzMzE4NTU3MDQ0NzEzMjg3OTU4MjEgLT4gLTEKK2RpdngzMjAyIGRpdmlkZSAtNjIyOTAzMDMwNjA1LjI4Njc1MDM5Mzc4MzY1MDczMjYgNjUxOTM4ODYwNy4xMzMxODU1NzA0NDcxMzI4Nzk1ODIxIC0+IC05NS41NDYyMzQxODU3ODUxMTA0OTE2NzY4OTQxNTM1MTAgSW5leGFjdCBSb3VuZGVkCitkdml4MzIwMiBkaXZpZGVpbnQgLTYyMjkwMzAzMDYwNS4yODY3NTAzOTM3ODM2NTA3MzI2IDY1MTkzODg2MDcuMTMzMTg1NTcwNDQ3MTMyODc5NTgyMSAtPiAtOTUKK211bHgzMjAyIG11bHRpcGx5IC02MjI5MDMwMzA2MDUuMjg2NzUwMzkzNzgzNjUwNzMyNiA2NTE5Mzg4NjA3LjEzMzE4NTU3MDQ0NzEzMjg3OTU4MjEgLT4gLTQwNjA5NDY5MjEwNzY4NDA0NDk5NDkuNjk4ODgyODQ4NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjAyIHBvd2VyIC02MjI5MDMwMzA2MDUuMjg2NzUwMzkzNzgzNjUwNzMyNiA3IC0+IC0zLjYzODY3MzY1OTc3MDI0MDQzNTI4MTMzMDgwNjQzMDBFKzgyIEluZXhhY3QgUm91bmRlZAorcmVteDMyMDIgcmVtYWluZGVyIC02MjI5MDMwMzA2MDUuMjg2NzUwMzkzNzgzNjUwNzMyNiA2NTE5Mzg4NjA3LjEzMzE4NTU3MDQ0NzEzMjg3OTU4MjEgLT4gLTM1NjExMTI5MjcuNjM0MTIxMjAxMzA2MDI3MTcyMzAwNQorc3VieDMyMDIgc3VidHJhY3QgLTYyMjkwMzAzMDYwNS4yODY3NTAzOTM3ODM2NTA3MzI2IDY1MTkzODg2MDcuMTMzMTg1NTcwNDQ3MTMyODc5NTgyMSAtPiAtNjI5NDIyNDE5MjEyLjQxOTkzNTk2NDIzMDc4MzYxMjE4IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMDMgYWRkIC01Njc1OTE1LjI0NjU0NTc0ODc2MzIyNTAyNDUyMDkwNTQgNzM5MTM5MDk4ODAuMzgxMzY3ODk1MjA1MDg2MDI3NDE2IC0+IDczOTA4MjMzOTY1LjEzNDgyMjE0NjQ0MTg2MTAwMjg5NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjAzIGNvbXBhcmUgLTU2NzU5MTUuMjQ2NTQ1NzQ4NzYzMjI1MDI0NTIwOTA1NCA3MzkxMzkwOTg4MC4zODEzNjc4OTUyMDUwODYwMjc0MTYgLT4gLTEKK2RpdngzMjAzIGRpdmlkZSAtNTY3NTkxNS4yNDY1NDU3NDg3NjMyMjUwMjQ1MjA5MDU0IDczOTEzOTA5ODgwLjM4MTM2Nzg5NTIwNTA4NjAyNzQxNiAtPiAtMC4wMDAwNzY3OTA4OTQzNzYwNTY4Mjc1NTIzODgwNTQ2NTcwODIgSW5leGFjdCBSb3VuZGVkCitkdml4MzIwMyBkaXZpZGVpbnQgLTU2NzU5MTUuMjQ2NTQ1NzQ4NzYzMjI1MDI0NTIwOTA1NCA3MzkxMzkwOTg4MC4zODEzNjc4OTUyMDUwODYwMjc0MTYgLT4gLTAKK211bHgzMjAzIG11bHRpcGx5IC01Njc1OTE1LjI0NjU0NTc0ODc2MzIyNTAyNDUyMDkwNTQgNzM5MTM5MDk4ODAuMzgxMzY3ODk1MjA1MDg2MDI3NDE2IC0+IC00MTk1MjkwODgwMjE4NjUwNjcuMjMzMDczNTI5NzM1ODkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwMyBwb3dlciAtNTY3NTkxNS4yNDY1NDU3NDg3NjMyMjUwMjQ1MjA5MDU0IDcgLT4gLTEuODk3ODAzODA2MDIwNzc3NzIzMTM4OTIzNDcyMTkwOEUrNDcgSW5leGFjdCBSb3VuZGVkCityZW14MzIwMyByZW1haW5kZXIgLTU2NzU5MTUuMjQ2NTQ1NzQ4NzYzMjI1MDI0NTIwOTA1NCA3MzkxMzkwOTg4MC4zODEzNjc4OTUyMDUwODYwMjc0MTYgLT4gLTU2NzU5MTUuMjQ2NTQ1NzQ4NzYzMjI1MDI0NTIwOTA1NAorc3VieDMyMDMgc3VidHJhY3QgLTU2NzU5MTUuMjQ2NTQ1NzQ4NzYzMjI1MDI0NTIwOTA1NCA3MzkxMzkwOTg4MC4zODEzNjc4OTUyMDUwODYwMjc0MTYgLT4gLTczOTE5NTg1Nzk1LjYyNzkxMzY0Mzk2ODMxMTA1MTkzNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjA0IGFkZCA5Ny42NDczMjExNzI1NTUxNDQ5MDA2ODU2MDUzMTg2MzUgNC44NjIwOTExNTg3NTQ3NTQ4NzUxMjA5ODQxNTcwODg1IC0+IDEwMi41MDk0MTIzMzEzMDk4OTk3NzU4MDY1ODk0NzU3MiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjA0IGNvbXBhcmUgOTcuNjQ3MzIxMTcyNTU1MTQ0OTAwNjg1NjA1MzE4NjM1IDQuODYyMDkxMTU4NzU0NzU0ODc1MTIwOTg0MTU3MDg4NSAtPiAxCitkaXZ4MzIwNCBkaXZpZGUgOTcuNjQ3MzIxMTcyNTU1MTQ0OTAwNjg1NjA1MzE4NjM1IDQuODYyMDkxMTU4NzU0NzU0ODc1MTIwOTg0MTU3MDg4NSAtPiAyMC4wODMzOTk5MTY2NjU0NjYzNzQ3NDE3MDg5NDk2MjEgSW5leGFjdCBSb3VuZGVkCitkdml4MzIwNCBkaXZpZGVpbnQgOTcuNjQ3MzIxMTcyNTU1MTQ0OTAwNjg1NjA1MzE4NjM1IDQuODYyMDkxMTU4NzU0NzU0ODc1MTIwOTg0MTU3MDg4NSAtPiAyMAorbXVseDMyMDQgbXVsdGlwbHkgOTcuNjQ3MzIxMTcyNTU1MTQ0OTAwNjg1NjA1MzE4NjM1IDQuODYyMDkxMTU4NzU0NzU0ODc1MTIwOTg0MTU3MDg4NSAtPiA0NzQuNzcwMTc2OTQ5MTY2MzUzOTg2NTIyNzYwNDIxNzUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwNCBwb3dlciA5Ny42NDczMjExNzI1NTUxNDQ5MDA2ODU2MDUzMTg2MzUgNSAtPiA4ODc3NzI0NTc4Ljc5MzUzMTI5MzkyMzE4Mjg3MTk4NDIgSW5leGFjdCBSb3VuZGVkCityZW14MzIwNCByZW1haW5kZXIgOTcuNjQ3MzIxMTcyNTU1MTQ0OTAwNjg1NjA1MzE4NjM1IDQuODYyMDkxMTU4NzU0NzU0ODc1MTIwOTg0MTU3MDg4NSAtPiAwLjQwNTQ5Nzk5NzQ2MDA0NzM5ODI2NTkyMjE3Njg2NTAKK3N1YngzMjA0IHN1YnRyYWN0IDk3LjY0NzMyMTE3MjU1NTE0NDkwMDY4NTYwNTMxODYzNSA0Ljg2MjA5MTE1ODc1NDc1NDg3NTEyMDk4NDE1NzA4ODUgLT4gOTIuNzg1MjMwMDEzODAwMzkwMDI1NTY0NjIxMTYxNTQ3IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMDUgYWRkIC05NzE3MjUzMjY3MDI0LjUzODA2NTE0MzU0MzU2MDM1NTIgLTI2NjkuMjUzOTY5NTE5MzgyMDQyNDAwMjAxMzQ4ODQ4MEUrMzYzIC0+IC0yLjY2OTI1Mzk2OTUxOTM4MjA0MjQwMDIwMTM0ODg0ODBFKzM2NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjA1IGNvbXBhcmUgLTk3MTcyNTMyNjcwMjQuNTM4MDY1MTQzNTQzNTYwMzU1MiAtMjY2OS4yNTM5Njk1MTkzODIwNDI0MDAyMDEzNDg4NDgwRSszNjMgLT4gMQorZGl2eDMyMDUgZGl2aWRlIC05NzE3MjUzMjY3MDI0LjUzODA2NTE0MzU0MzU2MDM1NTIgLTI2NjkuMjUzOTY5NTE5MzgyMDQyNDAwMjAxMzQ4ODQ4MEUrMzYzIC0+IDMuNjQwNDM3ODgxODkwMzQ2MjY5NTYzMzMzNzYzMTA5OEUtMzU0IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMDUgZGl2aWRlaW50IC05NzE3MjUzMjY3MDI0LjUzODA2NTE0MzU0MzU2MDM1NTIgLTI2NjkuMjUzOTY5NTE5MzgyMDQyNDAwMjAxMzQ4ODQ4MEUrMzYzIC0+IDAKK211bHgzMjA1IG11bHRpcGx5IC05NzE3MjUzMjY3MDI0LjUzODA2NTE0MzU0MzU2MDM1NTIgLTI2NjkuMjUzOTY5NTE5MzgyMDQyNDAwMjAxMzQ4ODQ4MEUrMzYzIC0+IDIuNTkzNzgxNjg1NTgzMDQzMTg5OTEyMzIxNzkxMjE0NEUrMzc5IEluZXhhY3QgUm91bmRlZAorcG93eDMyMDUgcG93ZXIgLTk3MTcyNTMyNjcwMjQuNTM4MDY1MTQzNTQzNTYwMzU1MiAtMyAtPiAtMS4wODk4NTY3ODgwMDg1MzM3NzgwMDQxMzI4NjYxMzMwRS0zOSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjA1IHJlbWFpbmRlciAtOTcxNzI1MzI2NzAyNC41MzgwNjUxNDM1NDM1NjAzNTUyIC0yNjY5LjI1Mzk2OTUxOTM4MjA0MjQwMDIwMTM0ODg0ODBFKzM2MyAtPiAtOTcxNzI1MzI2NzAyNC41MzgwNjUxNDM1NDM1NjAzNTUyCitzdWJ4MzIwNSBzdWJ0cmFjdCAtOTcxNzI1MzI2NzAyNC41MzgwNjUxNDM1NDM1NjAzNTUyIC0yNjY5LjI1Mzk2OTUxOTM4MjA0MjQwMDIwMTM0ODg0ODBFKzM2MyAtPiAyLjY2OTI1Mzk2OTUxOTM4MjA0MjQwMDIwMTM0ODg0ODBFKzM2NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjA2IGFkZCAtNC4wODE3MzkxNzE3MTkwMTI4NTA2MDgzMDAxNzAyMzM1RS03NjcgMTI3NzIuODA3MTA1OTIwNzEyNjYwOTkxMDMzNjg5MjA2IC0+IDEyNzcyLjgwNzEwNTkyMDcxMjY2MDk5MTAzMzY4OTIwNiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjA2IGNvbXBhcmUgLTQuMDgxNzM5MTcxNzE5MDEyODUwNjA4MzAwMTcwMjMzNUUtNzY3IDEyNzcyLjgwNzEwNTkyMDcxMjY2MDk5MTAzMzY4OTIwNiAtPiAtMQorZGl2eDMyMDYgZGl2aWRlIC00LjA4MTczOTE3MTcxOTAxMjg1MDYwODMwMDE3MDIzMzVFLTc2NyAxMjc3Mi44MDcxMDU5MjA3MTI2NjA5OTEwMzM2ODkyMDYgLT4gLTMuMTk1NjQ3NzA1MjE1MDU5MzE3NTIwNjc2OTg5MTQzNEUtNzcxIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMDYgZGl2aWRlaW50IC00LjA4MTczOTE3MTcxOTAxMjg1MDYwODMwMDE3MDIzMzVFLTc2NyAxMjc3Mi44MDcxMDU5MjA3MTI2NjA5OTEwMzM2ODkyMDYgLT4gLTAKK211bHgzMjA2IG11bHRpcGx5IC00LjA4MTczOTE3MTcxOTAxMjg1MDYwODMwMDE3MDIzMzVFLTc2NyAxMjc3Mi44MDcxMDU5MjA3MTI2NjA5OTEwMzM2ODkyMDYgLT4gLTUuMjEzNTI2NzA5NzA0NzUzMTMzNjEwMDc1MDExMDMxNEUtNzYzIEluZXhhY3QgUm91bmRlZAorcG93eDMyMDYgcG93ZXIgLTQuMDgxNzM5MTcxNzE5MDEyODUwNjA4MzAwMTcwMjMzNUUtNzY3IDEyNzczIC0+IC0wRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzIwNiByZW1haW5kZXIgLTQuMDgxNzM5MTcxNzE5MDEyODUwNjA4MzAwMTcwMjMzNUUtNzY3IDEyNzcyLjgwNzEwNTkyMDcxMjY2MDk5MTAzMzY4OTIwNiAtPiAtNC4wODE3MzkxNzE3MTkwMTI4NTA2MDgzMDAxNzAyMzM1RS03NjcKK3N1YngzMjA2IHN1YnRyYWN0IC00LjA4MTczOTE3MTcxOTAxMjg1MDYwODMwMDE3MDIzMzVFLTc2NyAxMjc3Mi44MDcxMDU5MjA3MTI2NjA5OTEwMzM2ODkyMDYgLT4gLTEyNzcyLjgwNzEwNTkyMDcxMjY2MDk5MTAzMzY4OTIwNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjA3IGFkZCA2ODYyNTMyMjY1NTkzNDE0Njg0NTAwMzAyODkyODY0NyAtNTkuNjM0MTY5OTQ0ODQwMjgwMTU5NzgyNDg4MDk4NzAwIC0+IDY4NjI1MzIyNjU1OTM0MTQ2ODQ1MDAzMDI4OTI4NTg3IEluZXhhY3QgUm91bmRlZAorY29teDMyMDcgY29tcGFyZSA2ODYyNTMyMjY1NTkzNDE0Njg0NTAwMzAyODkyODY0NyAtNTkuNjM0MTY5OTQ0ODQwMjgwMTU5NzgyNDg4MDk4NzAwIC0+IDEKK2RpdngzMjA3IGRpdmlkZSA2ODYyNTMyMjY1NTkzNDE0Njg0NTAwMzAyODkyODY0NyAtNTkuNjM0MTY5OTQ0ODQwMjgwMTU5NzgyNDg4MDk4NzAwIC0+IC0xMTUwNzcxODI2Mjc2OTU0OTQ2ODQ0MzIyOTg4MTkyLjUgSW5leGFjdCBSb3VuZGVkCitkdml4MzIwNyBkaXZpZGVpbnQgNjg2MjUzMjI2NTU5MzQxNDY4NDUwMDMwMjg5Mjg2NDcgLTU5LjYzNDE2OTk0NDg0MDI4MDE1OTc4MjQ4ODA5ODcwMCAtPiAtMTE1MDc3MTgyNjI3Njk1NDk0Njg0NDMyMjk4ODE5MgorbXVseDMyMDcgbXVsdGlwbHkgNjg2MjUzMjI2NTU5MzQxNDY4NDUwMDMwMjg5Mjg2NDcgLTU5LjYzNDE2OTk0NDg0MDI4MDE1OTc4MjQ4ODA5ODcwMCAtPiAtNC4wOTI0MTQxNTM3ODM0NzQ4NTAxMTQwMTUxOTk3Nzc4RSszMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjA3IHBvd2VyIDY4NjI1MzIyNjU1OTM0MTQ2ODQ1MDAzMDI4OTI4NjQ3IC02MCAtPiA2LjQ3MDQ3MzExMTE5NDMzNzAxNzE3MTExMzE5NDI2MDNFLTE5MTEgSW5leGFjdCBSb3VuZGVkCityZW14MzIwNyByZW1haW5kZXIgNjg2MjUzMjI2NTU5MzQxNDY4NDUwMDMwMjg5Mjg2NDcgLTU5LjYzNDE2OTk0NDg0MDI4MDE1OTc4MjQ4ODA5ODcwMCAtPiAyOC4yMDEyNTQwMDQ4OTcyNTc1NTI5MzkzNjk0NDk2MDAKK3N1YngzMjA3IHN1YnRyYWN0IDY4NjI1MzIyNjU1OTM0MTQ2ODQ1MDAzMDI4OTI4NjQ3IC01OS42MzQxNjk5NDQ4NDAyODAxNTk3ODI0ODgwOTg3MDAgLT4gNjg2MjUzMjI2NTU5MzQxNDY4NDUwMDMwMjg5Mjg3MDcgSW5leGFjdCBSb3VuZGVkCithZGR4MzIwOCBhZGQgNzMyNTE1Ljc2NTMyMDQ5MjkwODE1NjY1ODU2NzI3NjQxIC05MjEzNDQ3OTgzNTgyMS4zMTk2MTk4MjcwMjM3Mjk4MjkgLT4gLTkyMTM0NDc5MTAzMzA1LjU1NDI5OTMzNDExNTU3MzE3MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjA4IGNvbXBhcmUgNzMyNTE1Ljc2NTMyMDQ5MjkwODE1NjY1ODU2NzI3NjQxIC05MjEzNDQ3OTgzNTgyMS4zMTk2MTk4MjcwMjM3Mjk4MjkgLT4gMQorZGl2eDMyMDggZGl2aWRlIDczMjUxNS43NjUzMjA0OTI5MDgxNTY2NTg1NjcyNzY0MSAtOTIxMzQ0Nzk4MzU4MjEuMzE5NjE5ODI3MDIzNzI5ODI5IC0+IC03Ljk1MDUwNjMzMTg5NDM4NDY2NTU1OTM4ODc5OTE5MTRFLTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzIwOCBkaXZpZGVpbnQgNzMyNTE1Ljc2NTMyMDQ5MjkwODE1NjY1ODU2NzI3NjQxIC05MjEzNDQ3OTgzNTgyMS4zMTk2MTk4MjcwMjM3Mjk4MjkgLT4gLTAKK211bHgzMjA4IG11bHRpcGx5IDczMjUxNS43NjUzMjA0OTI5MDgxNTY2NTg1NjcyNzY0MSAtOTIxMzQ0Nzk4MzU4MjEuMzE5NjE5ODI3MDIzNzI5ODI5IC0+IC02NzQ4OTk1OTAwOTM0MjE3NTcyOC43MTA0OTQzNTYzMjIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwOCBwb3dlciA3MzI1MTUuNzY1MzIwNDkyOTA4MTU2NjU4NTY3Mjc2NDEgLTkgLT4gMS42NDY4MjQxMDUwNDQzNDcxMzU5MzU4MDE2NTg1ODc3RS01MyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjA4IHJlbWFpbmRlciA3MzI1MTUuNzY1MzIwNDkyOTA4MTU2NjU4NTY3Mjc2NDEgLTkyMTM0NDc5ODM1ODIxLjMxOTYxOTgyNzAyMzcyOTgyOSAtPiA3MzI1MTUuNzY1MzIwNDkyOTA4MTU2NjU4NTY3Mjc2NDEKK3N1YngzMjA4IHN1YnRyYWN0IDczMjUxNS43NjUzMjA0OTI5MDgxNTY2NTg1NjcyNzY0MSAtOTIxMzQ0Nzk4MzU4MjEuMzE5NjE5ODI3MDIzNzI5ODI5IC0+IDkyMTM0NDgwNTY4MzM3LjA4NDk0MDMxOTkzMTg4NjQ4OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjA5IGFkZCAtMzAuNDU4MDExOTQyOTc4MzM4NDIxNjc2NDU0Nzc4NzMzIC01MDIzMzcyMDI0NTk3NjY1MTAyMzM2NDMwNDEwNDAzRSs4MzEgLT4gLTUuMDIzMzcyMDI0NTk3NjY1MTAyMzM2NDMwNDEwNDAzMEUrODYxIEluZXhhY3QgUm91bmRlZAorY29teDMyMDkgY29tcGFyZSAtMzAuNDU4MDExOTQyOTc4MzM4NDIxNjc2NDU0Nzc4NzMzIC01MDIzMzcyMDI0NTk3NjY1MTAyMzM2NDMwNDEwNDAzRSs4MzEgLT4gMQorZGl2eDMyMDkgZGl2aWRlIC0zMC40NTgwMTE5NDI5NzgzMzg0MjE2NzY0NTQ3Nzg3MzMgLTUwMjMzNzIwMjQ1OTc2NjUxMDIzMzY0MzA0MTA0MDNFKzgzMSAtPiA2LjA2MzI2MDI1NTAzMTE0MTA4MjE0ODMwMDEzMDUwMTBFLTg2MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjA5IGRpdmlkZWludCAtMzAuNDU4MDExOTQyOTc4MzM4NDIxNjc2NDU0Nzc4NzMzIC01MDIzMzcyMDI0NTk3NjY1MTAyMzM2NDMwNDEwNDAzRSs4MzEgLT4gMAorbXVseDMyMDkgbXVsdGlwbHkgLTMwLjQ1ODAxMTk0Mjk3ODMzODQyMTY3NjQ1NDc3ODczMyAtNTAyMzM3MjAyNDU5NzY2NTEwMjMzNjQzMDQxMDQwM0UrODMxIC0+IDEuNTMwMDE5MjUxMTkyMTg5NTkyOTAzMTgxODYzODk2MUUrODYzIEluZXhhY3QgUm91bmRlZAorcG93eDMyMDkgcG93ZXIgLTMwLjQ1ODAxMTk0Mjk3ODMzODQyMTY3NjQ1NDc3ODczMyAtNSAtPiAtMy44MTQ5Nzk3NDgxNDA1MTM2MDQyNDg3NjQzMjUzMTA5RS04IEluZXhhY3QgUm91bmRlZAorcmVteDMyMDkgcmVtYWluZGVyIC0zMC40NTgwMTE5NDI5NzgzMzg0MjE2NzY0NTQ3Nzg3MzMgLTUwMjMzNzIwMjQ1OTc2NjUxMDIzMzY0MzA0MTA0MDNFKzgzMSAtPiAtMzAuNDU4MDExOTQyOTc4MzM4NDIxNjc2NDU0Nzc4NzMzCitzdWJ4MzIwOSBzdWJ0cmFjdCAtMzAuNDU4MDExOTQyOTc4MzM4NDIxNjc2NDU0Nzc4NzMzIC01MDIzMzcyMDI0NTk3NjY1MTAyMzM2NDMwNDEwNDAzRSs4MzEgLT4gNS4wMjMzNzIwMjQ1OTc2NjUxMDIzMzY0MzA0MTA0MDMwRSs4NjEgSW5leGFjdCBSb3VuZGVkCithZGR4MzIxMCBhZGQgLTg5NjQwLjA5NDE0OTQxNDY0NDY2MDQ4MDI4NjQzMDQ2MiAtNTg3MDM0MTk3NTguODAwODg5OTAzMjI3NTA5MjE1NDc0IC0+IC01ODcwMzUwOTM5OC44OTUwMzkzMTc4NzIxNjk2OTU3NjAgSW5leGFjdCBSb3VuZGVkCitjb214MzIxMCBjb21wYXJlIC04OTY0MC4wOTQxNDk0MTQ2NDQ2NjA0ODAyODY0MzA0NjIgLTU4NzAzNDE5NzU4LjgwMDg4OTkwMzIyNzUwOTIxNTQ3NCAtPiAxCitkaXZ4MzIxMCBkaXZpZGUgLTg5NjQwLjA5NDE0OTQxNDY0NDY2MDQ4MDI4NjQzMDQ2MiAtNTg3MDM0MTk3NTguODAwODg5OTAzMjI3NTA5MjE1NDc0IC0+IDAuMDAwMDAxNTI2OTk5NTI2MDUzNjAyNTIzNzE2NzE5OTk3MDIzOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjEwIGRpdmlkZWludCAtODk2NDAuMDk0MTQ5NDE0NjQ0NjYwNDgwMjg2NDMwNDYyIC01ODcwMzQxOTc1OC44MDA4ODk5MDMyMjc1MDkyMTU0NzQgLT4gMAorbXVseDMyMTAgbXVsdGlwbHkgLTg5NjQwLjA5NDE0OTQxNDY0NDY2MDQ4MDI4NjQzMDQ2MiAtNTg3MDM0MTk3NTguODAwODg5OTAzMjI3NTA5MjE1NDc0IC0+IDUyNjIxODAwNzQwNzE1MTkuNzAxODI1MjE3MTU3OTc1MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjEwIHBvd2VyIC04OTY0MC4wOTQxNDk0MTQ2NDQ2NjA0ODAyODY0MzA0NjIgLTYgLT4gMS45Mjc0NjM1NTkxMTY1NDA1ODg4NzI0NTk1MTY1NzQxRS0zMCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjEwIHJlbWFpbmRlciAtODk2NDAuMDk0MTQ5NDE0NjQ0NjYwNDgwMjg2NDMwNDYyIC01ODcwMzQxOTc1OC44MDA4ODk5MDMyMjc1MDkyMTU0NzQgLT4gLTg5NjQwLjA5NDE0OTQxNDY0NDY2MDQ4MDI4NjQzMDQ2Mgorc3VieDMyMTAgc3VidHJhY3QgLTg5NjQwLjA5NDE0OTQxNDY0NDY2MDQ4MDI4NjQzMDQ2MiAtNTg3MDM0MTk3NTguODAwODg5OTAzMjI3NTA5MjE1NDc0IC0+IDU4NzAzMzMwMTE4LjcwNjc0MDQ4ODU4Mjg0ODczNTE4OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjExIGFkZCA0NTg2NTMuMTU2Nzg3MDA4MTgxMDA1MjkxNzcxNDI1OSAxODM1MzEwNjIzOC41MTYyMzUxMTYwODA0NDk4MTQwNTNFLTAzOCAtPiA0NTg2NTMuMTU2Nzg3MDA4MTgxMDA1MjkxNzcxNDI1OTAgSW5leGFjdCBSb3VuZGVkCitjb214MzIxMSBjb21wYXJlIDQ1ODY1My4xNTY3ODcwMDgxODEwMDUyOTE3NzE0MjU5IDE4MzUzMTA2MjM4LjUxNjIzNTExNjA4MDQ0OTgxNDA1M0UtMDM4IC0+IDEKK2RpdngzMjExIGRpdmlkZSA0NTg2NTMuMTU2Nzg3MDA4MTgxMDA1MjkxNzcxNDI1OSAxODM1MzEwNjIzOC41MTYyMzUxMTYwODA0NDk4MTQwNTNFLTAzOCAtPiAyLjQ5OTA0OTIxMTc1OTQxNjAyMTU2NDEzMTE3NjA0OThFKzMzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMTEgZGl2aWRlaW50IDQ1ODY1My4xNTY3ODcwMDgxODEwMDUyOTE3NzE0MjU5IDE4MzUzMTA2MjM4LjUxNjIzNTExNjA4MDQ0OTgxNDA1M0UtMDM4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzIxMSBtdWx0aXBseSA0NTg2NTMuMTU2Nzg3MDA4MTgxMDA1MjkxNzcxNDI1OSAxODM1MzEwNjIzOC41MTYyMzUxMTYwODA0NDk4MTQwNTNFLTAzOCAtPiA4LjQxNzcxMDExMzE0MjgwNDc0OTc5OTg1OTQzNzk1OTNFLTIzIEluZXhhY3QgUm91bmRlZAorcG93eDMyMTEgcG93ZXIgNDU4NjUzLjE1Njc4NzAwODE4MTAwNTI5MTc3MTQyNTkgMiAtPiAyMTAzNjI3MTgyMzAuNjg3OTA4NjUxMTc0NTI0Mjk5OTAgSW5leGFjdCBSb3VuZGVkCityZW14MzIxMSByZW1haW5kZXIgNDU4NjUzLjE1Njc4NzAwODE4MTAwNTI5MTc3MTQyNTkgMTgzNTMxMDYyMzguNTE2MjM1MTE2MDgwNDQ5ODE0MDUzRS0wMzggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjExIHN1YnRyYWN0IDQ1ODY1My4xNTY3ODcwMDgxODEwMDUyOTE3NzE0MjU5IDE4MzUzMTA2MjM4LjUxNjIzNTExNjA4MDQ0OTgxNDA1M0UtMDM4IC0+IDQ1ODY1My4xNTY3ODcwMDgxODEwMDUyOTE3NzE0MjU5MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjEyIGFkZCA5MTMzOTEuNDI3NDQyMjQ0NTgyMTYxNzQ5Njc4NTM3MjIgLTIxMDUxNjM4LjgxNjQzMjgxNzM5MzIwMjI2MjcxMDYzMEUrNDMyIC0+IC0yLjEwNTE2Mzg4MTY0MzI4MTczOTMyMDIyNjI3MTA2MzBFKzQzOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjEyIGNvbXBhcmUgOTEzMzkxLjQyNzQ0MjI0NDU4MjE2MTc0OTY3ODUzNzIyIC0yMTA1MTYzOC44MTY0MzI4MTczOTMyMDIyNjI3MTA2MzBFKzQzMiAtPiAxCitkaXZ4MzIxMiBkaXZpZGUgOTEzMzkxLjQyNzQ0MjI0NDU4MjE2MTc0OTY3ODUzNzIyIC0yMTA1MTYzOC44MTY0MzI4MTczOTMyMDIyNjI3MTA2MzBFKzQzMiAtPiAtNC4zMzg4MTM4ODI0MTAyMTUxMTI3MjczMjU5MDkyNjEzRS00MzQgSW5leGFjdCBSb3VuZGVkCitkdml4MzIxMiBkaXZpZGVpbnQgOTEzMzkxLjQyNzQ0MjI0NDU4MjE2MTc0OTY3ODUzNzIyIC0yMTA1MTYzOC44MTY0MzI4MTczOTMyMDIyNjI3MTA2MzBFKzQzMiAtPiAtMAorbXVseDMyMTIgbXVsdGlwbHkgOTEzMzkxLjQyNzQ0MjI0NDU4MjE2MTc0OTY3ODUzNzIyIC0yMTA1MTYzOC44MTY0MzI4MTczOTMyMDIyNjI3MTA2MzBFKzQzMiAtPiAtMS45MjI4Mzg2NDI4NTQwMTM1MzQwNjAwODM2NzA3MjcwRSs0NDUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxMiBwb3dlciA5MTMzOTEuNDI3NDQyMjQ0NTgyMTYxNzQ5Njc4NTM3MjIgLTIgLT4gMS4xOTg2MzI3NDM5OTcxNTMyNDcwMjk3MzAwMTI4MDc0RS0xMiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjEyIHJlbWFpbmRlciA5MTMzOTEuNDI3NDQyMjQ0NTgyMTYxNzQ5Njc4NTM3MjIgLTIxMDUxNjM4LjgxNjQzMjgxNzM5MzIwMjI2MjcxMDYzMEUrNDMyIC0+IDkxMzM5MS40Mjc0NDIyNDQ1ODIxNjE3NDk2Nzg1MzcyMgorc3VieDMyMTIgc3VidHJhY3QgOTEzMzkxLjQyNzQ0MjI0NDU4MjE2MTc0OTY3ODUzNzIyIC0yMTA1MTYzOC44MTY0MzI4MTczOTMyMDIyNjI3MTA2MzBFKzQzMiAtPiAyLjEwNTE2Mzg4MTY0MzI4MTczOTMyMDIyNjI3MTA2MzBFKzQzOSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjEzIGFkZCAtOTE3NTkxNDU2ODI5LjEyMTA5MDI3NDg0Mzk5NTM2NTY3IC0yODg5MjE3NzcyNjg1ODAyNjk1NTUxMzQzODg0MzM3MUUrNzA4IC0+IC0yLjg4OTIxNzc3MjY4NTgwMjY5NTU1MTM0Mzg4NDMzNzFFKzczOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjEzIGNvbXBhcmUgLTkxNzU5MTQ1NjgyOS4xMjEwOTAyNzQ4NDM5OTUzNjU2NyAtMjg4OTIxNzc3MjY4NTgwMjY5NTU1MTM0Mzg4NDMzNzFFKzcwOCAtPiAxCitkaXZ4MzIxMyBkaXZpZGUgLTkxNzU5MTQ1NjgyOS4xMjEwOTAyNzQ4NDM5OTUzNjU2NyAtMjg4OTIxNzc3MjY4NTgwMjY5NTU1MTM0Mzg4NDMzNzFFKzcwOCAtPiAzLjE3NTkxNjU1OTUwNTc2NzQxOTY2NDQ5MjcxMDY0NDdFLTcyOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjEzIGRpdmlkZWludCAtOTE3NTkxNDU2ODI5LjEyMTA5MDI3NDg0Mzk5NTM2NTY3IC0yODg5MjE3NzcyNjg1ODAyNjk1NTUxMzQzODg0MzM3MUUrNzA4IC0+IDAKK211bHgzMjEzIG11bHRpcGx5IC05MTc1OTE0NTY4MjkuMTIxMDkwMjc0ODQzOTk1MzY1NjcgLTI4ODkyMTc3NzI2ODU4MDI2OTU1NTEzNDM4ODQzMzcxRSs3MDggLT4gMi42NTExMjE1NDUxMzUzNTQxMTU2NzAzOTE0NzIxNzI1RSs3NTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxMyBwb3dlciAtOTE3NTkxNDU2ODI5LjEyMTA5MDI3NDg0Mzk5NTM2NTY3IC0zIC0+IC0xLjI5NDM1MDU1OTE4NTM3MzkyNDAwMDM0NTMzNDE5MTFFLTM2IEluZXhhY3QgUm91bmRlZAorcmVteDMyMTMgcmVtYWluZGVyIC05MTc1OTE0NTY4MjkuMTIxMDkwMjc0ODQzOTk1MzY1NjcgLTI4ODkyMTc3NzI2ODU4MDI2OTU1NTEzNDM4ODQzMzcxRSs3MDggLT4gLTkxNzU5MTQ1NjgyOS4xMjEwOTAyNzQ4NDM5OTUzNjU2Nworc3VieDMyMTMgc3VidHJhY3QgLTkxNzU5MTQ1NjgyOS4xMjEwOTAyNzQ4NDM5OTUzNjU2NyAtMjg4OTIxNzc3MjY4NTgwMjY5NTU1MTM0Mzg4NDMzNzFFKzcwOCAtPiAyLjg4OTIxNzc3MjY4NTgwMjY5NTU1MTM0Mzg4NDMzNzFFKzczOSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjE0IGFkZCAzNDkzODQxMDg0MDY0NS45MTMzOTk2OTkyMTkyMjgyMTggMzAuODE4MjIwMzkzMjQyNDAyODQ2MDc3NzU1NDgwNTQ4IC0+IDM0OTM4NDEwODQwNjc2LjczMTYyMDA5MjQ2MTYzMTA2NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjE0IGNvbXBhcmUgMzQ5Mzg0MTA4NDA2NDUuOTEzMzk5Njk5MjE5MjI4MjE4IDMwLjgxODIyMDM5MzI0MjQwMjg0NjA3Nzc1NTQ4MDU0OCAtPiAxCitkaXZ4MzIxNCBkaXZpZGUgMzQ5Mzg0MTA4NDA2NDUuOTEzMzk5Njk5MjE5MjI4MjE4IDMwLjgxODIyMDM5MzI0MjQwMjg0NjA3Nzc1NTQ4MDU0OCAtPiAxMTMzNjkzMzI3OTk5Ljc4Nzk1MDMyNjAwOTg2NjY5NjYgSW5leGFjdCBSb3VuZGVkCitkdml4MzIxNCBkaXZpZGVpbnQgMzQ5Mzg0MTA4NDA2NDUuOTEzMzk5Njk5MjE5MjI4MjE4IDMwLjgxODIyMDM5MzI0MjQwMjg0NjA3Nzc1NTQ4MDU0OCAtPiAxMTMzNjkzMzI3OTk5CittdWx4MzIxNCBtdWx0aXBseSAzNDkzODQxMDg0MDY0NS45MTMzOTk2OTkyMTkyMjgyMTggMzAuODE4MjIwMzkzMjQyNDAyODQ2MDc3NzU1NDgwNTQ4IC0+IDEwNzY3Mzk2NDU0NzY2NzUuMzMxODUxOTI4OTEyODk2MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjE0IHBvd2VyIDM0OTM4NDEwODQwNjQ1LjkxMzM5OTY5OTIxOTIyODIxOCAzMSAtPiA2Ljk1NjYwODU5NTg3OTg3MzI3ODY1MDk5MDk2ODMyNjdFKzQxOSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjE0IHJlbWFpbmRlciAzNDkzODQxMDg0MDY0NS45MTMzOTk2OTkyMTkyMjgyMTggMzAuODE4MjIwMzkzMjQyNDAyODQ2MDc3NzU1NDgwNTQ4IC0+IDI0LjI4MzIyNjgwNTg5OTI3MzU1MTM3NjM3MTczNjU0OAorc3VieDMyMTQgc3VidHJhY3QgMzQ5Mzg0MTA4NDA2NDUuOTEzMzk5Njk5MjE5MjI4MjE4IDMwLjgxODIyMDM5MzI0MjQwMjg0NjA3Nzc1NTQ4MDU0OCAtPiAzNDkzODQxMDg0MDYxNS4wOTUxNzkzMDU5NzY4MjUzNzIgSW5leGFjdCBSb3VuZGVkCithZGR4MzIxNSBhZGQgNjAzNC43Mzc0NDExMDIyNTk4MDgxNzQ1MDA2NzY5MDIzRS01MTcgMjk3NzE4MzM0MjgwNTQ3MDkwNzc4NTA1ODg5MDQ2NTMgLT4gMjk3NzE4MzM0MjgwNTQ3MDkwNzc4NTA1ODg5MDQ2NTMgSW5leGFjdCBSb3VuZGVkCitjb214MzIxNSBjb21wYXJlIDYwMzQuNzM3NDQxMTAyMjU5ODA4MTc0NTAwNjc2OTAyM0UtNTE3IDI5NzcxODMzNDI4MDU0NzA5MDc3ODUwNTg4OTA0NjUzIC0+IC0xCitkaXZ4MzIxNSBkaXZpZGUgNjAzNC43Mzc0NDExMDIyNTk4MDgxNzQ1MDA2NzY5MDIzRS01MTcgMjk3NzE4MzM0MjgwNTQ3MDkwNzc4NTA1ODg5MDQ2NTMgLT4gMi4wMjY5OTU1NjgwMzc2NjgzNTI2MDk5NDQ0NTIzNjkxRS01NDUgSW5leGFjdCBSb3VuZGVkCitkdml4MzIxNSBkaXZpZGVpbnQgNjAzNC43Mzc0NDExMDIyNTk4MDgxNzQ1MDA2NzY5MDIzRS01MTcgMjk3NzE4MzM0MjgwNTQ3MDkwNzc4NTA1ODg5MDQ2NTMgLT4gMAorbXVseDMyMTUgbXVsdGlwbHkgNjAzNC43Mzc0NDExMDIyNTk4MDgxNzQ1MDA2NzY5MDIzRS01MTcgMjk3NzE4MzM0MjgwNTQ3MDkwNzc4NTA1ODg5MDQ2NTMgLT4gMS43OTY2NTE5Nzg3ODU0MTU5NDY0MzgyMzU5NDExNjQyRS00ODIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxNSBwb3dlciA2MDM0LjczNzQ0MTEwMjI1OTgwODE3NDUwMDY3NjkwMjNFLTUxNyAzIC0+IDIuMTk3NzM0MDU5NzMwMTg0MDY4MTUyODUwNzY0MDAzMkUtMTU0MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjE1IHJlbWFpbmRlciA2MDM0LjczNzQ0MTEwMjI1OTgwODE3NDUwMDY3NjkwMjNFLTUxNyAyOTc3MTgzMzQyODA1NDcwOTA3Nzg1MDU4ODkwNDY1MyAtPiA2LjAzNDczNzQ0MTEwMjI1OTgwODE3NDUwMDY3NjkwMjNFLTUxNAorc3VieDMyMTUgc3VidHJhY3QgNjAzNC43Mzc0NDExMDIyNTk4MDgxNzQ1MDA2NzY5MDIzRS01MTcgMjk3NzE4MzM0MjgwNTQ3MDkwNzc4NTA1ODg5MDQ2NTMgLT4gLTI5NzcxODMzNDI4MDU0NzA5MDc3ODUwNTg4OTA0NjUzIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMTYgYWRkIC01NTY1NzQ3NjcxNzM0LjE2ODYwMDk3MDU1NzQ1MDMxNTIgLTQ5MC4zMDg5OTQ5NDg4MTA3MTI4Mjc4NzQ4NzAzMDMwMyAtPiAtNTU2NTc0NzY3MjIyNC40Nzc1OTU5MTkzNjgxNjMxNDMxIEluZXhhY3QgUm91bmRlZAorY29teDMyMTYgY29tcGFyZSAtNTU2NTc0NzY3MTczNC4xNjg2MDA5NzA1NTc0NTAzMTUyIC00OTAuMzA4OTk0OTQ4ODEwNzEyODI3ODc0ODcwMzAzMDMgLT4gLTEKK2RpdngzMjE2IGRpdmlkZSAtNTU2NTc0NzY3MTczNC4xNjg2MDA5NzA1NTc0NTAzMTUyIC00OTAuMzA4OTk0OTQ4ODEwNzEyODI3ODc0ODcwMzAzMDMgLT4gMTEzNTE1MTA0MzMuMzY1MDc0ODcxNTc0NTE5NzU2MjQ1IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMTYgZGl2aWRlaW50IC01NTY1NzQ3NjcxNzM0LjE2ODYwMDk3MDU1NzQ1MDMxNTIgLTQ5MC4zMDg5OTQ5NDg4MTA3MTI4Mjc4NzQ4NzAzMDMwMyAtPiAxMTM1MTUxMDQzMworbXVseDMyMTYgbXVsdGlwbHkgLTU1NjU3NDc2NzE3MzQuMTY4NjAwOTcwNTU3NDUwMzE1MiAtNDkwLjMwODk5NDk0ODgxMDcxMjgyNzg3NDg3MDMwMzAzIC0+IDI3Mjg5MzYxNDcwNjY2NjMuNDU4MDA2NDQyODYzOTc0NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjE2IHBvd2VyIC01NTY1NzQ3NjcxNzM0LjE2ODYwMDk3MDU1NzQ1MDMxNTIgLTQ5MCAtPiA0LjkzNzE3NDUyOTc2MTk1MjYxMTM5OTE3Mjg5NTMxOTdFLTYyNDYgSW5leGFjdCBSb3VuZGVkCityZW14MzIxNiByZW1haW5kZXIgLTU1NjU3NDc2NzE3MzQuMTY4NjAwOTcwNTU3NDUwMzE1MiAtNDkwLjMwODk5NDk0ODgxMDcxMjgyNzg3NDg3MDMwMzAzIC0+IC0xNzguOTk5NDkzMzYyNzY4OTI2ODUxODMzMDgzNDg4MDEKK3N1YngzMjE2IHN1YnRyYWN0IC01NTY1NzQ3NjcxNzM0LjE2ODYwMDk3MDU1NzQ1MDMxNTIgLTQ5MC4zMDg5OTQ5NDg4MTA3MTI4Mjc4NzQ4NzAzMDMwMyAtPiAtNTU2NTc0NzY3MTI0My44NTk2MDYwMjE3NDY3Mzc0ODczIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMTcgYWRkIDMxOTU0NTUxMS44OTIwMzQ5NTU0NjY4OTI3MzU2NDcyOEUrMDM2IC0yOTU1OTQzNTMzOTQzMzIxODk5MTUwMzEwMTkyMDYxIC0+IDMuMTk1NDU1MTE4OTIwMzE5OTk1MjMzNTg3OTIzMjUzOEUrNDQgSW5leGFjdCBSb3VuZGVkCitjb214MzIxNyBjb21wYXJlIDMxOTU0NTUxMS44OTIwMzQ5NTU0NjY4OTI3MzU2NDcyOEUrMDM2IC0yOTU1OTQzNTMzOTQzMzIxODk5MTUwMzEwMTkyMDYxIC0+IDEKK2RpdngzMjE3IGRpdmlkZSAzMTk1NDU1MTEuODkyMDM0OTU1NDY2ODkyNzM1NjQ3MjhFKzAzNiAtMjk1NTk0MzUzMzk0MzMyMTg5OTE1MDMxMDE5MjA2MSAtPiAtMTA4MTAyNzExNzgxNDIyLjY4NjYzMDg0ODU5OTAyOTMxIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMTcgZGl2aWRlaW50IDMxOTU0NTUxMS44OTIwMzQ5NTU0NjY4OTI3MzU2NDcyOEUrMDM2IC0yOTU1OTQzNTMzOTQzMzIxODk5MTUwMzEwMTkyMDYxIC0+IC0xMDgxMDI3MTE3ODE0MjIKK211bHgzMjE3IG11bHRpcGx5IDMxOTU0NTUxMS44OTIwMzQ5NTU0NjY4OTI3MzU2NDcyOEUrMDM2IC0yOTU1OTQzNTMzOTQzMzIxODk5MTUwMzEwMTkyMDYxIC0+IC05LjQ0NTU4NDg5Njc3ODY5NTk5OTY1MjU3MDIxOTcxMzlFKzc0IEluZXhhY3QgUm91bmRlZAorcG93eDMyMTcgcG93ZXIgMzE5NTQ1NTExLjg5MjAzNDk1NTQ2Njg5MjczNTY0NzI4RSswMzYgLTMgLT4gMy4wNjQ3OTc4NDQ4OTQ2Mjk0NDU3OTg1MjIzOTUzNDcyRS0xMzQgSW5leGFjdCBSb3VuZGVkCityZW14MzIxNyByZW1haW5kZXIgMzE5NTQ1NTExLjg5MjAzNDk1NTQ2Njg5MjczNTY0NzI4RSswMzYgLTI5NTU5NDM1MzM5NDMzMjE4OTkxNTAzMTAxOTIwNjEgLT4gMjAyOTY0MjAxNzEyMjMxNjcyMTUzMTcyODMwOTI1OAorc3VieDMyMTcgc3VidHJhY3QgMzE5NTQ1NTExLjg5MjAzNDk1NTQ2Njg5MjczNTY0NzI4RSswMzYgLTI5NTU5NDM1MzM5NDMzMjE4OTkxNTAzMTAxOTIwNjEgLT4gMy4xOTU0NTUxMTg5MjAzNzkxMTQxMDQyNjY3ODk2OTE4RSs0NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjE4IGFkZCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODcxNjM2MDM1Nzk0MCAtPiAtNDI2ODI3NjQuNjc2NjUxNDY1MDg5MzA3NDMwMzI1MTA0IFJvdW5kZWQKK2NvbXgzMjE4IGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3MTYzNjAzNTc5NDAgLT4gLTEKK2RpdngzMjE4IGRpdmlkZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODcxNjM2MDM1Nzk0MCAtPiA2LjMyMDQzODA4MDczMTg2NTU0NzU0NTkwNDc0MTAxNjAgSW5leGFjdCBSb3VuZGVkCitkdml4MzIxOCBkaXZpZGVpbnQgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3MTYzNjAzNTc5NDAgLT4gNgorbXVseDMyMTggbXVsdGlwbHkgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3MTYzNjAzNTc5NDAgLT4gMjE0ODcxMTU2ODgyMTMzLjM0NDM3NDE3NTM0ODczMDk4IEluZXhhY3QgUm91bmRlZAorcG93eDMyMTggcG93ZXIgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjMwIC0+IDBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjE4IHJlbWFpbmRlciAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODcxNjM2MDM1Nzk0MCAtPiAtMTg2ODM1NS44MzM2OTE5NDcwMjMyMDU5NzgwNzQ1NDYwCitzdWJ4MzIxOCBzdWJ0cmFjdCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODcxNjM2MDM1Nzk0MCAtPiAtMzEwMjE1MDUuMDA3MjM0NDU5OTI3NTY0MTU4MjUzNTE2IFJvdW5kZWQKK2FkZHgzMjE5IGFkZCA4LjYwMjE5MDUwMDE3OTg1Nzg2NTkyNzU4ODAwMTgyMjFFLTM3NCAtMzk1MDUyODUzNDQ5NDMuNzI5NjgxODM1Mzc3NTMwOTA4IC0+IC0zOTUwNTI4NTM0NDk0My43Mjk2ODE4MzUzNzc1MzA5MDggSW5leGFjdCBSb3VuZGVkCitjb214MzIxOSBjb21wYXJlIDguNjAyMTkwNTAwMTc5ODU3ODY1OTI3NTg4MDAxODIyMUUtMzc0IC0zOTUwNTI4NTM0NDk0My43Mjk2ODE4MzUzNzc1MzA5MDggLT4gMQorZGl2eDMyMTkgZGl2aWRlIDguNjAyMTkwNTAwMTc5ODU3ODY1OTI3NTg4MDAxODIyMUUtMzc0IC0zOTUwNTI4NTM0NDk0My43Mjk2ODE4MzUzNzc1MzA5MDggLT4gLTIuMTc3NDc4Mzg2NzcwMDUwMjAwMjUxMTQ4Njg4NTI3MkUtMzg3IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMTkgZGl2aWRlaW50IDguNjAyMTkwNTAwMTc5ODU3ODY1OTI3NTg4MDAxODIyMUUtMzc0IC0zOTUwNTI4NTM0NDk0My43Mjk2ODE4MzUzNzc1MzA5MDggLT4gLTAKK211bHgzMjE5IG11bHRpcGx5IDguNjAyMTkwNTAwMTc5ODU3ODY1OTI3NTg4MDAxODIyMUUtMzc0IC0zOTUwNTI4NTM0NDk0My43Mjk2ODE4MzUzNzc1MzA5MDggLT4gLTMuMzk4MzE5OTAzMDExNjk1MTA4MTg2NTQzMDM2MjA1M0UtMzYwIEluZXhhY3QgUm91bmRlZAorcG93eDMyMTkgcG93ZXIgOC42MDIxOTA1MDAxNzk4NTc4NjU5Mjc1ODgwMDE4MjIxRS0zNzQgLTQgLT4gMS44MjYyNjQ5MTU1ODIwNDMzMTI2MjQwNzU0MTIzMjU3RSsxNDkyIEluZXhhY3QgUm91bmRlZAorcmVteDMyMTkgcmVtYWluZGVyIDguNjAyMTkwNTAwMTc5ODU3ODY1OTI3NTg4MDAxODIyMUUtMzc0IC0zOTUwNTI4NTM0NDk0My43Mjk2ODE4MzUzNzc1MzA5MDggLT4gOC42MDIxOTA1MDAxNzk4NTc4NjU5Mjc1ODgwMDE4MjIxRS0zNzQKK3N1YngzMjE5IHN1YnRyYWN0IDguNjAyMTkwNTAwMTc5ODU3ODY1OTI3NTg4MDAxODIyMUUtMzc0IC0zOTUwNTI4NTM0NDk0My43Mjk2ODE4MzUzNzc1MzA5MDggLT4gMzk1MDUyODUzNDQ5NDMuNzI5NjgxODM1Mzc3NTMwOTA4IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMjAgYWRkIC01NDg2MzE2NS4xNTIxNzQxMDk3MjAzMTI4ODc4MDUwMTcgNzM2LjEzOTg0NzY1NjAxNjkxNDExMDUzMjgyNTY2MjggLT4gLTU0ODYyNDI5LjAxMjMyNjQ1MzcwMzM5ODc3NzI3MjE5MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjIwIGNvbXBhcmUgLTU0ODYzMTY1LjE1MjE3NDEwOTcyMDMxMjg4NzgwNTAxNyA3MzYuMTM5ODQ3NjU2MDE2OTE0MTEwNTMyODI1NjYyOCAtPiAtMQorZGl2eDMyMjAgZGl2aWRlIC01NDg2MzE2NS4xNTIxNzQxMDk3MjAzMTI4ODc4MDUwMTcgNzM2LjEzOTg0NzY1NjAxNjkxNDExMDUzMjgyNTY2MjggLT4gLTc0NTI4LjE4MjgyNjc2NDM4NDA4ODYwMjgxMzE0Mjg0NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjIwIGRpdmlkZWludCAtNTQ4NjMxNjUuMTUyMTc0MTA5NzIwMzEyODg3ODA1MDE3IDczNi4xMzk4NDc2NTYwMTY5MTQxMTA1MzI4MjU2NjI4IC0+IC03NDUyOAorbXVseDMyMjAgbXVsdGlwbHkgLTU0ODYzMTY1LjE1MjE3NDEwOTcyMDMxMjg4NzgwNTAxNyA3MzYuMTM5ODQ3NjU2MDE2OTE0MTEwNTMyODI1NjYyOCAtPiAtNDAzODY5NjIwMzcuMDQ4MzQ1MTQ4MzM4MTIyNTM5NDA1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMjAgcG93ZXIgLTU0ODYzMTY1LjE1MjE3NDEwOTcyMDMxMjg4NzgwNTAxNyA3MzYgLT4gMS4yOTAzNjQzOTgxNjc5MTExNjI1MzcwMTc0NTczNjM5RSs1Njk2IEluZXhhY3QgUm91bmRlZAorcmVteDMyMjAgcmVtYWluZGVyIC01NDg2MzE2NS4xNTIxNzQxMDk3MjAzMTI4ODc4MDUwMTcgNzM2LjEzOTg0NzY1NjAxNjkxNDExMDUzMjgyNTY2MjggLT4gLTEzNC41ODYwNjY0ODExNDU0ODMwOTczNzQwMTk4NDE2CitzdWJ4MzIyMCBzdWJ0cmFjdCAtNTQ4NjMxNjUuMTUyMTc0MTA5NzIwMzEyODg3ODA1MDE3IDczNi4xMzk4NDc2NTYwMTY5MTQxMTA1MzI4MjU2NjI4IC0+IC01NDg2MzkwMS4yOTIwMjE3NjU3MzcyMjY5OTgzMzc4NDMgSW5leGFjdCBSb3VuZGVkCithZGR4MzIyMSBhZGQgLTMyNjM3NDM0NjQ1MTc4NTEwMTI1MzE3MDg4MTAzMDcgMjQ1NzIwNi4yNDcxMjQ4MzgyMTM2MjczNjQzMjA4MTA5IC0+IC0zMjYzNzQzNDY0NTE3ODUxMDEyNTMxNzA2MzUzMTAwLjggSW5leGFjdCBSb3VuZGVkCitjb214MzIyMSBjb21wYXJlIC0zMjYzNzQzNDY0NTE3ODUxMDEyNTMxNzA4ODEwMzA3IDI0NTcyMDYuMjQ3MTI0ODM4MjEzNjI3MzY0MzIwODEwOSAtPiAtMQorZGl2eDMyMjEgZGl2aWRlIC0zMjYzNzQzNDY0NTE3ODUxMDEyNTMxNzA4ODEwMzA3IDI0NTcyMDYuMjQ3MTI0ODM4MjEzNjI3MzY0MzIwODEwOSAtPiAtMTMyODIzMzQyMjk1MjA3Njk3NTA1NTA4Mi41NzY4MDgyIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMjEgZGl2aWRlaW50IC0zMjYzNzQzNDY0NTE3ODUxMDEyNTMxNzA4ODEwMzA3IDI0NTcyMDYuMjQ3MTI0ODM4MjEzNjI3MzY0MzIwODEwOSAtPiAtMTMyODIzMzQyMjk1MjA3Njk3NTA1NTA4MgorbXVseDMyMjEgbXVsdGlwbHkgLTMyNjM3NDM0NjQ1MTc4NTEwMTI1MzE3MDg4MTAzMDcgMjQ1NzIwNi4yNDcxMjQ4MzgyMTM2MjczNjQzMjA4MTA5IC0+IC04LjAxOTY5MDgzMDAyNjEyNjI1NDg1NjU4MzgwMzE5NDNFKzM2IEluZXhhY3QgUm91bmRlZAorcG93eDMyMjEgcG93ZXIgLTMyNjM3NDM0NjQ1MTc4NTEwMTI1MzE3MDg4MTAzMDcgMjQ1NzIwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjIxIHJlbWFpbmRlciAtMzI2Mzc0MzQ2NDUxNzg1MTAxMjUzMTcwODgxMDMwNyAyNDU3MjA2LjI0NzEyNDgzODIxMzYyNzM2NDMyMDgxMDkgLT4gLTE0MTczMzYuNzU3MzM5ODM2NjA2Mjk5NDUzNTk0MDA2Mgorc3VieDMyMjEgc3VidHJhY3QgLTMyNjM3NDM0NjQ1MTc4NTEwMTI1MzE3MDg4MTAzMDcgMjQ1NzIwNi4yNDcxMjQ4MzgyMTM2MjczNjQzMjA4MTA5IC0+IC0zMjYzNzQzNDY0NTE3ODUxMDEyNTMxNzExMjY3NTEzLjIgSW5leGFjdCBSb3VuZGVkCithZGR4MzIyMiBhZGQgMjg1NjU4Njc0NC4wNTQ4NjM3Nzk3MjkxMTUxMTU0OTAyRS04OTUgOTUzNTQ1NjM3NjQ2LjU3Njk0ODM1ODYwMzM5NTgyODIxRSswODAgLT4gOS41MzU0NTYzNzY0NjU3Njk0ODM1ODYwMzM5NTgyODIxRSs5MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjIyIGNvbXBhcmUgMjg1NjU4Njc0NC4wNTQ4NjM3Nzk3MjkxMTUxMTU0OTAyRS04OTUgOTUzNTQ1NjM3NjQ2LjU3Njk0ODM1ODYwMzM5NTgyODIxRSswODAgLT4gLTEKK2RpdngzMjIyIGRpdmlkZSAyODU2NTg2NzQ0LjA1NDg2Mzc3OTcyOTExNTExNTQ5MDJFLTg5NSA5NTM1NDU2Mzc2NDYuNTc2OTQ4MzU4NjAzMzk1ODI4MjFFKzA4MCAtPiAyLjk5NTc1MjUxNzAwMDc5ODAwMDg3MTI4Mjg5NjgzMDBFLTk3OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjIyIGRpdmlkZWludCAyODU2NTg2NzQ0LjA1NDg2Mzc3OTcyOTExNTExNTQ5MDJFLTg5NSA5NTM1NDU2Mzc2NDYuNTc2OTQ4MzU4NjAzMzk1ODI4MjFFKzA4MCAtPiAwCittdWx4MzIyMiBtdWx0aXBseSAyODU2NTg2NzQ0LjA1NDg2Mzc3OTcyOTExNTExNTQ5MDJFLTg5NSA5NTM1NDU2Mzc2NDYuNTc2OTQ4MzU4NjAzMzk1ODI4MjFFKzA4MCAtPiAyLjcyMzg4NTgyODM1MjU1NDE4NTQ4MjY1OTQzNDM5NTRFLTc5NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjIyIHBvd2VyIDI4NTY1ODY3NDQuMDU0ODYzNzc5NzI5MTE1MTE1NDkwMkUtODk1IDEwIC0+IDMuNjE4MDQ2Njc1MzMwNzA3MjI1NjgwNzU5Mzk4ODMzNkUtODg1NiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjIyIHJlbWFpbmRlciAyODU2NTg2NzQ0LjA1NDg2Mzc3OTcyOTExNTExNTQ5MDJFLTg5NSA5NTM1NDU2Mzc2NDYuNTc2OTQ4MzU4NjAzMzk1ODI4MjFFKzA4MCAtPiAyLjg1NjU4Njc0NDA1NDg2Mzc3OTcyOTExNTExNTQ5MDJFLTg4Ngorc3VieDMyMjIgc3VidHJhY3QgMjg1NjU4Njc0NC4wNTQ4NjM3Nzk3MjkxMTUxMTU0OTAyRS04OTUgOTUzNTQ1NjM3NjQ2LjU3Njk0ODM1ODYwMzM5NTgyODIxRSswODAgLT4gLTkuNTM1NDU2Mzc2NDY1NzY5NDgzNTg2MDMzOTU4MjgyMUUrOTEgSW5leGFjdCBSb3VuZGVkCithZGR4MzIyMyBhZGQgNTYyNDE1NzIzMy4zNDMzNjYxMDA5MjAzNTI5OTM3NjI1IDYyNjA5ODQwOTI2NS45MzczODU4Njc1MDA5MDE2MDYzOCAtPiA2MzE3MjI1NjY0OTkuMjgwNzUxOTY4NDIxMjU0NjAwMTQgSW5leGFjdCBSb3VuZGVkCitjb214MzIyMyBjb21wYXJlIDU2MjQxNTcyMzMuMzQzMzY2MTAwOTIwMzUyOTkzNzYyNSA2MjYwOTg0MDkyNjUuOTM3Mzg1ODY3NTAwOTAxNjA2MzggLT4gLTEKK2RpdngzMjIzIGRpdmlkZSA1NjI0MTU3MjMzLjM0MzM2NjEwMDkyMDM1Mjk5Mzc2MjUgNjI2MDk4NDA5MjY1LjkzNzM4NTg2NzUwMDkwMTYwNjM4IC0+IDAuMDA4OTgyODY0NTk0NjIwNzU4MDQ5Mjc1MjU0NDIxODMxNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjIzIGRpdmlkZWludCA1NjI0MTU3MjMzLjM0MzM2NjEwMDkyMDM1Mjk5Mzc2MjUgNjI2MDk4NDA5MjY1LjkzNzM4NTg2NzUwMDkwMTYwNjM4IC0+IDAKK211bHgzMjIzIG11bHRpcGx5IDU2MjQxNTcyMzMuMzQzMzY2MTAwOTIwMzUyOTkzNzYyNSA2MjYwOTg0MDkyNjUuOTM3Mzg1ODY3NTAwOTAxNjA2MzggLT4gMzUyMTI3NTg5NzI1Nzc5NjkzODgzMy44OTc1MDM3OTA5IEluZXhhY3QgUm91bmRlZAorcG93eDMyMjMgcG93ZXIgNTYyNDE1NzIzMy4zNDMzNjYxMDA5MjAzNTI5OTM3NjI1IDYgLT4gMy4xNjQ3ODg3MTk2MzAzMjYyNTQwMTU4MzI4NDU5MDMwRSs1OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjIzIHJlbWFpbmRlciA1NjI0MTU3MjMzLjM0MzM2NjEwMDkyMDM1Mjk5Mzc2MjUgNjI2MDk4NDA5MjY1LjkzNzM4NTg2NzUwMDkwMTYwNjM4IC0+IDU2MjQxNTcyMzMuMzQzMzY2MTAwOTIwMzUyOTkzNzYyNQorc3VieDMyMjMgc3VidHJhY3QgNTYyNDE1NzIzMy4zNDMzNjYxMDA5MjAzNTI5OTM3NjI1IDYyNjA5ODQwOTI2NS45MzczODU4Njc1MDA5MDE2MDYzOCAtPiAtNjIwNDc0MjUyMDMyLjU5NDAxOTc2NjU4MDU0ODYxMjYyIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMjQgYWRkIC0yMTM0OTkzNjIuOTE0NzY5OTg3MDE4MzQwNjcwOTI2MTEgNDE5MjcyNDM4LjAyNTU1NzU3Njk5ODYzMDIyNjQzNDQ0IC0+IDIwNTc3MzA3NS4xMTA3ODc1ODk5ODAyODk1NTU1MDgzMworY29teDMyMjQgY29tcGFyZSAtMjEzNDk5MzYyLjkxNDc2OTk4NzAxODM0MDY3MDkyNjExIDQxOTI3MjQzOC4wMjU1NTc1NzY5OTg2MzAyMjY0MzQ0NCAtPiAtMQorZGl2eDMyMjQgZGl2aWRlIC0yMTM0OTkzNjIuOTE0NzY5OTg3MDE4MzQwNjcwOTI2MTEgNDE5MjcyNDM4LjAyNTU1NzU3Njk5ODYzMDIyNjQzNDQ0IC0+IC0wLjUwOTIxMzkyMjg2MTY2ODU1Nzc5ODI4MDYxMTQ3Nzg2IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMjQgZGl2aWRlaW50IC0yMTM0OTkzNjIuOTE0NzY5OTg3MDE4MzQwNjcwOTI2MTEgNDE5MjcyNDM4LjAyNTU1NzU3Njk5ODYzMDIyNjQzNDQ0IC0+IC0wCittdWx4MzIyNCBtdWx0aXBseSAtMjEzNDk5MzYyLjkxNDc2OTk4NzAxODM0MDY3MDkyNjExIDQxOTI3MjQzOC4wMjU1NTc1NzY5OTg2MzAyMjY0MzQ0NCAtPiAtODk1MTQzOTg0MDYxNzg5MjUuMDczMjYwNzc2NDEwNjcyIEluZXhhY3QgUm91bmRlZAorcG93eDMyMjQgcG93ZXIgLTIxMzQ5OTM2Mi45MTQ3Njk5ODcwMTgzNDA2NzA5MjYxMSA0MTkyNzI0MzggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzIyNCByZW1haW5kZXIgLTIxMzQ5OTM2Mi45MTQ3Njk5ODcwMTgzNDA2NzA5MjYxMSA0MTkyNzI0MzguMDI1NTU3NTc2OTk4NjMwMjI2NDM0NDQgLT4gLTIxMzQ5OTM2Mi45MTQ3Njk5ODcwMTgzNDA2NzA5MjYxMQorc3VieDMyMjQgc3VidHJhY3QgLTIxMzQ5OTM2Mi45MTQ3Njk5ODcwMTgzNDA2NzA5MjYxMSA0MTkyNzI0MzguMDI1NTU3NTc2OTk4NjMwMjI2NDM0NDQgLT4gLTYzMjc3MTgwMC45NDAzMjc1NjQwMTY5NzA4OTczNjA1NQorYWRkeDMyMjUgYWRkIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMzAyNzQuMzkyMzU2NjE0MTAxMjM4MzE2ODQ1NDAxNTE4IEluZXhhY3QgUm91bmRlZAorY29teDMyMjUgY29tcGFyZSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDEKK2RpdngzMjI1IGRpdmlkZSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDYzMDAuMTI1MjE3ODgzNzY1NTM1OTgzMTUyNzE3MzgzMiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjI1IGRpdmlkZWludCAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDYzMDAKK211bHgzMjI1IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgzIEluZXhhY3QgUm91bmRlZAorcG93eDMyMjUgcG93ZXIgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDUgLT4gMjU0MTE2MzA0ODE1NDc0NjQxMjgzODMuMjIwMzY4MjA4IEluZXhhY3QgUm91bmRlZAorcmVteDMyMjUgcmVtYWluZGVyIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMC42MDE2MjE5NjYyNTE5MTE1MzczNzY2OTcwMTE5MTAwCitzdWJ4MzIyNSBzdWJ0cmFjdCAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDMwMjY0Ljc4MzE1NDY2NjkwMzA2MzYzNzY1ODEzOTU5MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjI2IGFkZCA0Ny41MjU2NzY0NTkzNTE1MDU2ODIwMDUzNTk2OTk2ODBFKzcwNCAtNTg2MzE5NDM1MDg0MzY2NTczODMzNjk3NjA5NzAyMTAgLT4gNC43NTI1Njc2NDU5MzUxNTA1NjgyMDA1MzU5Njk5NjgwRSs3MDUgSW5leGFjdCBSb3VuZGVkCitjb214MzIyNiBjb21wYXJlIDQ3LjUyNTY3NjQ1OTM1MTUwNTY4MjAwNTM1OTY5OTY4MEUrNzA0IC01ODYzMTk0MzUwODQzNjY1NzM4MzM2OTc2MDk3MDIxMCAtPiAxCitkaXZ4MzIyNiBkaXZpZGUgNDcuNTI1Njc2NDU5MzUxNTA1NjgyMDA1MzU5Njk5NjgwRSs3MDQgLTU4NjMxOTQzNTA4NDM2NjU3MzgzMzY5NzYwOTcwMjEwIC0+IC04LjEwNTc2NTE1Mzg1NTU4NTQ1MjA5OTQ0MzgwMzg1MzdFKzY3MyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjI2IGRpdmlkZWludCA0Ny41MjU2NzY0NTkzNTE1MDU2ODIwMDUzNTk2OTk2ODBFKzcwNCAtNTg2MzE5NDM1MDg0MzY2NTczODMzNjk3NjA5NzAyMTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjI2IG11bHRpcGx5IDQ3LjUyNTY3NjQ1OTM1MTUwNTY4MjAwNTM1OTY5OTY4MEUrNzA0IC01ODYzMTk0MzUwODQzNjY1NzM4MzM2OTc2MDk3MDIxMCAtPiAtMi43ODY1MjI3NzczNjQ5MzUzNzY5ODc2OTc1MzY2NTA2RSs3MzcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyNiBwb3dlciA0Ny41MjU2NzY0NTkzNTE1MDU2ODIwMDUzNTk2OTk2ODBFKzcwNCAtNiAtPiA4LjY3ODIxMDAzOTM5NDEyMjY1MzUxNTAzODU0NzU0NjRFLTQyMzUgSW5leGFjdCBSb3VuZGVkCityZW14MzIyNiByZW1haW5kZXIgNDcuNTI1Njc2NDU5MzUxNTA1NjgyMDA1MzU5Njk5NjgwRSs3MDQgLTU4NjMxOTQzNTA4NDM2NjU3MzgzMzY5NzYwOTcwMjEwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzIyNiBzdWJ0cmFjdCA0Ny41MjU2NzY0NTkzNTE1MDU2ODIwMDUzNTk2OTk2ODBFKzcwNCAtNTg2MzE5NDM1MDg0MzY2NTczODMzNjk3NjA5NzAyMTAgLT4gNC43NTI1Njc2NDU5MzUxNTA1NjgyMDA1MzU5Njk5NjgwRSs3MDUgSW5leGFjdCBSb3VuZGVkCithZGR4MzIyNyBhZGQgLTc0Mzk2ODYyMjczODAwLjYyNTY3OTEzMDc3MjkzNTU1MCAtMTE1NjE2NjA1LjUyODI2OTgxMjg0MTgzOTkyMDEzMTU3IC0+IC03NDM5Njk3Nzg5MDQwNi4xNTM5NDg5NDM2MTQ3NzU0NzAgSW5leGFjdCBSb3VuZGVkCitjb214MzIyNyBjb21wYXJlIC03NDM5Njg2MjI3MzgwMC42MjU2NzkxMzA3NzI5MzU1NTAgLTExNTYxNjYwNS41MjgyNjk4MTI4NDE4Mzk5MjAxMzE1NyAtPiAtMQorZGl2eDMyMjcgZGl2aWRlIC03NDM5Njg2MjI3MzgwMC42MjU2NzkxMzA3NzI5MzU1NTAgLTExNTYxNjYwNS41MjgyNjk4MTI4NDE4Mzk5MjAxMzE1NyAtPiA2NDM0NzkuMDM5NDg0NTk3MTY0MjQ3NzgwMDU2MTMxMTIgSW5leGFjdCBSb3VuZGVkCitkdml4MzIyNyBkaXZpZGVpbnQgLTc0Mzk2ODYyMjczODAwLjYyNTY3OTEzMDc3MjkzNTU1MCAtMTE1NjE2NjA1LjUyODI2OTgxMjg0MTgzOTkyMDEzMTU3IC0+IDY0MzQ3OQorbXVseDMyMjcgbXVsdGlwbHkgLTc0Mzk2ODYyMjczODAwLjYyNTY3OTEzMDc3MjkzNTU1MCAtMTE1NjE2NjA1LjUyODI2OTgxMjg0MTgzOTkyMDEzMTU3IC0+IDg2MDE1MTI2NzgwNTEwMjUyOTcyOTcuNzE2OTY1NDQ2NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjI3IHBvd2VyIC03NDM5Njg2MjI3MzgwMC42MjU2NzkxMzA3NzI5MzU1NTAgLTExNTYxNjYwNiAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzIyNyByZW1haW5kZXIgLTc0Mzk2ODYyMjczODAwLjYyNTY3OTEzMDc3MjkzNTU1MCAtMTE1NjE2NjA1LjUyODI2OTgxMjg0MTgzOTkyMDEzMTU3IC0+IC00NTY1MDc1LjA5NDc4MTQ3NjQ2Mjk2OTIwNzQ2Nzk3CitzdWJ4MzIyNyBzdWJ0cmFjdCAtNzQzOTY4NjIyNzM4MDAuNjI1Njc5MTMwNzcyOTM1NTUwIC0xMTU2MTY2MDUuNTI4MjY5ODEyODQxODM5OTIwMTMxNTcgLT4gLTc0Mzk2NzQ2NjU3MTk1LjA5NzQwOTMxNzkzMTA5NTYzMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjI4IGFkZCA2NzU4NTU2MC41NjI1NjEyMjk0OTc3MjA5NTU3MDU5NzkgODI2Ljk2MjkwMjg4NjA4NTY2NzM3MTc3NTAzNDUxNjEzIC0+IDY3NTg2Mzg3LjUyNTQ2NDExNTU4MzM4ODMyNzQ4MTAxNCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjI4IGNvbXBhcmUgNjc1ODU1NjAuNTYyNTYxMjI5NDk3NzIwOTU1NzA1OTc5IDgyNi45NjI5MDI4ODYwODU2NjczNzE3NzUwMzQ1MTYxMyAtPiAxCitkaXZ4MzIyOCBkaXZpZGUgNjc1ODU1NjAuNTYyNTYxMjI5NDk3NzIwOTU1NzA1OTc5IDgyNi45NjI5MDI4ODYwODU2NjczNzE3NzUwMzQ1MTYxMyAtPiA4MTcyNy40Mzk0MzczNTQyNDg3ODk4NTI3MTU1ODY1MTAgSW5leGFjdCBSb3VuZGVkCitkdml4MzIyOCBkaXZpZGVpbnQgNjc1ODU1NjAuNTYyNTYxMjI5NDk3NzIwOTU1NzA1OTc5IDgyNi45NjI5MDI4ODYwODU2NjczNzE3NzUwMzQ1MTYxMyAtPiA4MTcyNworbXVseDMyMjggbXVsdGlwbHkgNjc1ODU1NjAuNTYyNTYxMjI5NDk3NzIwOTU1NzA1OTc5IDgyNi45NjI5MDI4ODYwODU2NjczNzE3NzUwMzQ1MTYxMyAtPiA1NTg5MDc1MTM1NS45OTg5ODM0MzM4OTU5MTAyOTU1OTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyOCBwb3dlciA2NzU4NTU2MC41NjI1NjEyMjk0OTc3MjA5NTU3MDU5NzkgODI3IC0+IDEuOTQ2MjIwNDU4MzM1MjE5MTEwODc4MTE5Nzc4ODI1NUUrNjQ3NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjI4IHJlbWFpbmRlciA2NzU4NTU2MC41NjI1NjEyMjk0OTc3MjA5NTU3MDU5NzkgODI2Ljk2MjkwMjg4NjA4NTY2NzM3MTc3NTAzNDUxNjEzIC0+IDM2My4zOTgzOTAxMDYxNjA0Mjc4OTc0NjAwNzkyNDM0OQorc3VieDMyMjggc3VidHJhY3QgNjc1ODU1NjAuNTYyNTYxMjI5NDk3NzIwOTU1NzA1OTc5IDgyNi45NjI5MDI4ODYwODU2NjczNzE3NzUwMzQ1MTYxMyAtPiA2NzU4NDczMy41OTk2NTgzNDM0MTIwNTM1ODM5MzA5NDQgSW5leGFjdCBSb3VuZGVkCithZGR4MzIyOSBhZGQgNjg3NzM4Njg2OC45NDk4MDUxODYwNzQyMjk4NzM1MTU2RS0yMzIgMzkwLjMxNTQyODk4NjA2NDM1MDkzOTM3Njk3NTQ1NTEgLT4gMzkwLjMxNTQyODk4NjA2NDM1MDkzOTM3Njk3NTQ1NTEwIEluZXhhY3QgUm91bmRlZAorY29teDMyMjkgY29tcGFyZSA2ODc3Mzg2ODY4Ljk0OTgwNTE4NjA3NDIyOTg3MzUxNTZFLTIzMiAzOTAuMzE1NDI4OTg2MDY0MzUwOTM5Mzc2OTc1NDU1MSAtPiAtMQorZGl2eDMyMjkgZGl2aWRlIDY4NzczODY4NjguOTQ5ODA1MTg2MDc0MjI5ODczNTE1NkUtMjMyIDM5MC4zMTU0Mjg5ODYwNjQzNTA5MzkzNzY5NzU0NTUxIC0+IDEuNzYyMDA3NDMyNTA1NDAzODE3NDU3MTU2NDQwOTg3MUUtMjI1IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMjkgZGl2aWRlaW50IDY4NzczODY4NjguOTQ5ODA1MTg2MDc0MjI5ODczNTE1NkUtMjMyIDM5MC4zMTU0Mjg5ODYwNjQzNTA5MzkzNzY5NzU0NTUxIC0+IDAKK211bHgzMjI5IG11bHRpcGx5IDY4NzczODY4NjguOTQ5ODA1MTg2MDc0MjI5ODczNTE1NkUtMjMyIDM5MC4zMTU0Mjg5ODYwNjQzNTA5MzkzNzY5NzU0NTUxIC0+IDIuNjg0MzUwMjA2MDU3MjY5MTQwODA5MTY2MzgyMjczMkUtMjIwIEluZXhhY3QgUm91bmRlZAorcG93eDMyMjkgcG93ZXIgNjg3NzM4Njg2OC45NDk4MDUxODYwNzQyMjk4NzM1MTU2RS0yMzIgMzkwIC0+IDBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjI5IHJlbWFpbmRlciA2ODc3Mzg2ODY4Ljk0OTgwNTE4NjA3NDIyOTg3MzUxNTZFLTIzMiAzOTAuMzE1NDI4OTg2MDY0MzUwOTM5Mzc2OTc1NDU1MSAtPiA2Ljg3NzM4Njg2ODk0OTgwNTE4NjA3NDIyOTg3MzUxNTZFLTIyMworc3VieDMyMjkgc3VidHJhY3QgNjg3NzM4Njg2OC45NDk4MDUxODYwNzQyMjk4NzM1MTU2RS0yMzIgMzkwLjMxNTQyODk4NjA2NDM1MDkzOTM3Njk3NTQ1NTEgLT4gLTM5MC4zMTU0Mjg5ODYwNjQzNTA5MzkzNzY5NzU0NTUxMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjMwIGFkZCAtMTY0NzMzNS4yMDExNDQ2MDkyNTYxMzQ5MjU4Mzg5MzcgLTE4NjY1NDgyMzc4Mi41MDQ1OTgwMjIzNTAyNDIzMDg1NiAtPiAtMTg2NjU2NDcxMTE3LjcwNTc0MjYzMTYwNjM3NzIzNDQwIEluZXhhY3QgUm91bmRlZAorY29teDMyMzAgY29tcGFyZSAtMTY0NzMzNS4yMDExNDQ2MDkyNTYxMzQ5MjU4Mzg5MzcgLTE4NjY1NDgyMzc4Mi41MDQ1OTgwMjIzNTAyNDIzMDg1NiAtPiAxCitkaXZ4MzIzMCBkaXZpZGUgLTE2NDczMzUuMjAxMTQ0NjA5MjU2MTM0OTI1ODM4OTM3IC0xODY2NTQ4MjM3ODIuNTA0NTk4MDIyMzUwMjQyMzA4NTYgLT4gMC4wMDAwMDg4MjU1Njk5MzU3ODc2MjMzNDU4NjYwMzMxMTQ2NTgzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMzAgZGl2aWRlaW50IC0xNjQ3MzM1LjIwMTE0NDYwOTI1NjEzNDkyNTgzODkzNyAtMTg2NjU0ODIzNzgyLjUwNDU5ODAyMjM1MDI0MjMwODU2IC0+IDAKK211bHgzMjMwIG11bHRpcGx5IC0xNjQ3MzM1LjIwMTE0NDYwOTI1NjEzNDkyNTgzODkzNyAtMTg2NjU0ODIzNzgyLjUwNDU5ODAyMjM1MDI0MjMwODU2IC0+IDMwNzQ4MzA2MTY4MDM2MzgwNy40ODc3NTYxOTMzMzI4NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjMwIHBvd2VyIC0xNjQ3MzM1LjIwMTE0NDYwOTI1NjEzNDkyNTgzODkzNyAtMiAtPiAzLjY4NDk4NzY5OTA0Mzk1MDIxNTI3ODQzODkyMzc4OTFFLTEzIEluZXhhY3QgUm91bmRlZAorcmVteDMyMzAgcmVtYWluZGVyIC0xNjQ3MzM1LjIwMTE0NDYwOTI1NjEzNDkyNTgzODkzNyAtMTg2NjU0ODIzNzgyLjUwNDU5ODAyMjM1MDI0MjMwODU2IC0+IC0xNjQ3MzM1LjIwMTE0NDYwOTI1NjEzNDkyNTgzODkzNworc3VieDMyMzAgc3VidHJhY3QgLTE2NDczMzUuMjAxMTQ0NjA5MjU2MTM0OTI1ODM4OTM3IC0xODY2NTQ4MjM3ODIuNTA0NTk4MDIyMzUwMjQyMzA4NTYgLT4gMTg2NjUzMTc2NDQ3LjMwMzQ1MzQxMzA5NDEwNzM4MjcyIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMzEgYWRkIDQxNDA3ODE4MTQwOTQ4Ljg2NjYzMDkyMzkzNDEzODE1NSAtNTE1Ni43NjI0NTM0MDAwMzExMzQyMzEwMTA2NjcxNjI3RS05NjMgLT4gNDE0MDc4MTgxNDA5NDguODY2NjMwOTIzOTM0MTM4MTU1IEluZXhhY3QgUm91bmRlZAorY29teDMyMzEgY29tcGFyZSA0MTQwNzgxODE0MDk0OC44NjY2MzA5MjM5MzQxMzgxNTUgLTUxNTYuNzYyNDUzNDAwMDMxMTM0MjMxMDEwNjY3MTYyN0UtOTYzIC0+IDEKK2RpdngzMjMxIGRpdmlkZSA0MTQwNzgxODE0MDk0OC44NjY2MzA5MjM5MzQxMzgxNTUgLTUxNTYuNzYyNDUzNDAwMDMxMTM0MjMxMDEwNjY3MTYyN0UtOTYzIC0+IC04LjAyOTgwOTExMjgxNzkyMDQwNzY3OTY1MDc2OTc1MTdFKzk3MiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjMxIGRpdmlkZWludCA0MTQwNzgxODE0MDk0OC44NjY2MzA5MjM5MzQxMzgxNTUgLTUxNTYuNzYyNDUzNDAwMDMxMTM0MjMxMDEwNjY3MTYyN0UtOTYzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzIzMSBtdWx0aXBseSA0MTQwNzgxODE0MDk0OC44NjY2MzA5MjM5MzQxMzgxNTUgLTUxNTYuNzYyNDUzNDAwMDMxMTM0MjMxMDEwNjY3MTYyN0UtOTYzIC0+IC0yLjEzNTMwMjgxODY2NDYxNzkzNjkyMjA4MzQ2OTExNTZFLTk0NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjMxIHBvd2VyIDQxNDA3ODE4MTQwOTQ4Ljg2NjYzMDkyMzkzNDEzODE1NSAtNSAtPiA4LjIxNDYzNDg1NTY2NDg1NDc1MjU2OTM1MjgwMDQwODFFLTY5IEluZXhhY3QgUm91bmRlZAorcmVteDMyMzEgcmVtYWluZGVyIDQxNDA3ODE4MTQwOTQ4Ljg2NjYzMDkyMzkzNDEzODE1NSAtNTE1Ni43NjI0NTM0MDAwMzExMzQyMzEwMTA2NjcxNjI3RS05NjMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjMxIHN1YnRyYWN0IDQxNDA3ODE4MTQwOTQ4Ljg2NjYzMDkyMzkzNDEzODE1NSAtNTE1Ni43NjI0NTM0MDAwMzExMzQyMzEwMTA2NjcxNjI3RS05NjMgLT4gNDE0MDc4MTgxNDA5NDguODY2NjMwOTIzOTM0MTM4MTU1IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMzIgYWRkIC02LjY1NDc0MjQwMTI1MTY4MzQ2NjIwMTE3MDYxNjUyOTcgLTU3NDQ1NDU4NTU4MC4wNjIxNTk3NDEzOTg4NDc0NjQ0MSAtPiAtNTc0NDU0NTg1NTg2LjcxNjkwMjE0MjY1MDUzMDkzMDYxIEluZXhhY3QgUm91bmRlZAorY29teDMyMzIgY29tcGFyZSAtNi42NTQ3NDI0MDEyNTE2ODM0NjYyMDExNzA2MTY1Mjk3IC01NzQ0NTQ1ODU1ODAuMDYyMTU5NzQxMzk4ODQ3NDY0NDEgLT4gMQorZGl2eDMyMzIgZGl2aWRlIC02LjY1NDc0MjQwMTI1MTY4MzQ2NjIwMTE3MDYxNjUyOTcgLTU3NDQ1NDU4NTU4MC4wNjIxNTk3NDEzOTg4NDc0NjQ0MSAtPiAxLjE1ODQ0NTM0NDIwOTc1Njg3NDU0MTE1NjgwMzcwNzhFLTExIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMzIgZGl2aWRlaW50IC02LjY1NDc0MjQwMTI1MTY4MzQ2NjIwMTE3MDYxNjUyOTcgLTU3NDQ1NDU4NTU4MC4wNjIxNTk3NDEzOTg4NDc0NjQ0MSAtPiAwCittdWx4MzIzMiBtdWx0aXBseSAtNi42NTQ3NDI0MDEyNTE2ODM0NjYyMDExNzA2MTY1Mjk3IC01NzQ0NTQ1ODU1ODAuMDYyMTU5NzQxMzk4ODQ3NDY0NDEgLT4gMzgyMjg0NzI4ODI1My4xMDM1NTU5MjA2NjkxNTMyODI2IEluZXhhY3QgUm91bmRlZAorcG93eDMyMzIgcG93ZXIgLTYuNjU0NzQyNDAxMjUxNjgzNDY2MjAxMTcwNjE2NTI5NyAtNiAtPiAwLjAwMDAxMTUxMzYzNjI4MzM4ODc5MTQ4ODEyODIzOTIzMjkwNiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjMyIHJlbWFpbmRlciAtNi42NTQ3NDI0MDEyNTE2ODM0NjYyMDExNzA2MTY1Mjk3IC01NzQ0NTQ1ODU1ODAuMDYyMTU5NzQxMzk4ODQ3NDY0NDEgLT4gLTYuNjU0NzQyNDAxMjUxNjgzNDY2MjAxMTcwNjE2NTI5Nworc3VieDMyMzIgc3VidHJhY3QgLTYuNjU0NzQyNDAxMjUxNjgzNDY2MjAxMTcwNjE2NTI5NyAtNTc0NDU0NTg1NTgwLjA2MjE1OTc0MTM5ODg0NzQ2NDQxIC0+IDU3NDQ1NDU4NTU3My40MDc0MTczNDAxNDcxNjM5OTgyMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjMzIGFkZCAtMjc2MjcuNzU4NzQ1MzgxMjY3NzgwODg1MDY3NDQ3NjcxIC0yMzM4NTk3MjE4OTQ0MS43MDk1ODY0MzM3NTgxMTEwNjIgLT4gLTIzMzg1OTcyMjE3MDY5LjQ2ODMzMTgxNTAyNTg5MTk0NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjMzIGNvbXBhcmUgLTI3NjI3Ljc1ODc0NTM4MTI2Nzc4MDg4NTA2NzQ0NzY3MSAtMjMzODU5NzIxODk0NDEuNzA5NTg2NDMzNzU4MTExMDYyIC0+IDEKK2RpdngzMjMzIGRpdmlkZSAtMjc2MjcuNzU4NzQ1MzgxMjY3NzgwODg1MDY3NDQ3NjcxIC0yMzM4NTk3MjE4OTQ0MS43MDk1ODY0MzM3NTgxMTEwNjIgLT4gMS4xODEzODE2NjQyNTQ4OTIwMTk0NzA5ODk4MTExNjI0RS05IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMzMgZGl2aWRlaW50IC0yNzYyNy43NTg3NDUzODEyNjc3ODA4ODUwNjc0NDc2NzEgLTIzMzg1OTcyMTg5NDQxLjcwOTU4NjQzMzc1ODExMTA2MiAtPiAwCittdWx4MzIzMyBtdWx0aXBseSAtMjc2MjcuNzU4NzQ1MzgxMjY3NzgwODg1MDY3NDQ3NjcxIC0yMzM4NTk3MjE4OTQ0MS43MDk1ODY0MzM3NTgxMTEwNjIgLT4gNjQ2MTAxOTk3Njc2MDkxMzA2LjQxNDg1MzkzNjc4NjU1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMzMgcG93ZXIgLTI3NjI3Ljc1ODc0NTM4MTI2Nzc4MDg4NTA2NzQ0NzY3MSAtMiAtPiAxLjMxMDExMjgwMDk1NjA4MTI1MjkxOTg1MjE5MjIyNjlFLTkgSW5leGFjdCBSb3VuZGVkCityZW14MzIzMyByZW1haW5kZXIgLTI3NjI3Ljc1ODc0NTM4MTI2Nzc4MDg4NTA2NzQ0NzY3MSAtMjMzODU5NzIxODk0NDEuNzA5NTg2NDMzNzU4MTExMDYyIC0+IC0yNzYyNy43NTg3NDUzODEyNjc3ODA4ODUwNjc0NDc2NzEKK3N1YngzMjMzIHN1YnRyYWN0IC0yNzYyNy43NTg3NDUzODEyNjc3ODA4ODUwNjc0NDc2NzEgLTIzMzg1OTcyMTg5NDQxLjcwOTU4NjQzMzc1ODExMTA2MiAtPiAyMzM4NTk3MjE2MTgxMy45NTA4NDEwNTI0OTAzMzAxNzcgSW5leGFjdCBSb3VuZGVkCithZGR4MzIzNCBhZGQgMjA5ODE5Ljc0Mzc5MDk5OTE0NzUyOTYzNzExOTQ0MzA3RS0yMjggLTQ0MDIzMC42NzAwOTg5NTMyNDY3ODMxMzcwMzIwMjY2RS05NjAgLT4gMi4wOTgxOTc0Mzc5MDk5OTE0NzUyOTYzNzExOTQ0MzA3RS0yMjMgSW5leGFjdCBSb3VuZGVkCitjb214MzIzNCBjb21wYXJlIDIwOTgxOS43NDM3OTA5OTkxNDc1Mjk2MzcxMTk0NDMwN0UtMjI4IC00NDAyMzAuNjcwMDk4OTUzMjQ2NzgzMTM3MDMyMDI2NkUtOTYwIC0+IDEKK2RpdngzMjM0IGRpdmlkZSAyMDk4MTkuNzQzNzkwOTk5MTQ3NTI5NjM3MTE5NDQzMDdFLTIyOCAtNDQwMjMwLjY3MDA5ODk1MzI0Njc4MzEzNzAzMjAyNjZFLTk2MCAtPiAtNC43NjYxMzE4OTQ5ODY3MDYwNTk1NTQ1NzY1MDUzMTg3RSs3MzEgSW5leGFjdCBSb3VuZGVkCitkdml4MzIzNCBkaXZpZGVpbnQgMjA5ODE5Ljc0Mzc5MDk5OTE0NzUyOTYzNzExOTQ0MzA3RS0yMjggLTQ0MDIzMC42NzAwOTg5NTMyNDY3ODMxMzcwMzIwMjY2RS05NjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjM0IG11bHRpcGx5IDIwOTgxOS43NDM3OTA5OTkxNDc1Mjk2MzcxMTk0NDMwN0UtMjI4IC00NDAyMzAuNjcwMDk4OTUzMjQ2NzgzMTM3MDMyMDI2NkUtOTYwIC0+IC05LjIzNjkwODY0MDkxMDIyMzk1NzM3MjYzMTY1OTM2NDhFLTExNzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzNCBwb3dlciAyMDk4MTkuNzQzNzkwOTk5MTQ3NTI5NjM3MTE5NDQzMDdFLTIyOCAtNCAtPiA1LjE1OTU4Mjg0OTQxMTE2OTA5MTA2NTA5MTk3NzY3MDVFKzg5MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjM0IHJlbWFpbmRlciAyMDk4MTkuNzQzNzkwOTk5MTQ3NTI5NjM3MTE5NDQzMDdFLTIyOCAtNDQwMjMwLjY3MDA5ODk1MzI0Njc4MzEzNzAzMjAyNjZFLTk2MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyMzQgc3VidHJhY3QgMjA5ODE5Ljc0Mzc5MDk5OTE0NzUyOTYzNzExOTQ0MzA3RS0yMjggLTQ0MDIzMC42NzAwOTg5NTMyNDY3ODMxMzcwMzIwMjY2RS05NjAgLT4gMi4wOTgxOTc0Mzc5MDk5OTE0NzUyOTYzNzExOTQ0MzA3RS0yMjMgSW5leGFjdCBSb3VuZGVkCithZGR4MzIzNSBhZGQgMi4zNDg4NDU3NjAwNDE1NDc0MjcwMjU5MzMwODY1MTg0IDkxODI0MzQuNjY2MDIxMjQ4MjUwMDM3NjIyMDUwODYwNUUtNjEyIC0+IDIuMzQ4ODQ1NzYwMDQxNTQ3NDI3MDI1OTMzMDg2NTE4NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjM1IGNvbXBhcmUgMi4zNDg4NDU3NjAwNDE1NDc0MjcwMjU5MzMwODY1MTg0IDkxODI0MzQuNjY2MDIxMjQ4MjUwMDM3NjIyMDUwODYwNUUtNjEyIC0+IDEKK2RpdngzMjM1IGRpdmlkZSAyLjM0ODg0NTc2MDA0MTU0NzQyNzAyNTkzMzA4NjUxODQgOTE4MjQzNC42NjYwMjEyNDgyNTAwMzc2MjIwNTA4NjA1RS02MTIgLT4gMi41NTc5NzcxMDAyNzA4NDAyNzUzNDEyMjY2NTc0OTQxRSs2MDUgSW5leGFjdCBSb3VuZGVkCitkdml4MzIzNSBkaXZpZGVpbnQgMi4zNDg4NDU3NjAwNDE1NDc0MjcwMjU5MzMwODY1MTg0IDkxODI0MzQuNjY2MDIxMjQ4MjUwMDM3NjIyMDUwODYwNUUtNjEyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzIzNSBtdWx0aXBseSAyLjM0ODg0NTc2MDA0MTU0NzQyNzAyNTkzMzA4NjUxODQgOTE4MjQzNC42NjYwMjEyNDgyNTAwMzc2MjIwNTA4NjA1RS02MTIgLT4gMi4xNTY4MTIyNzMyMTQyNTMxNTU2MjE1MjA0NDU5NDA3RS02MDUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzNSBwb3dlciAyLjM0ODg0NTc2MDA0MTU0NzQyNzAyNTkzMzA4NjUxODQgOSAtPiAyMTc2LjE1ODM0NDYxNDc1MTE1NzkxMTMwMjI2MjIyNTUgSW5leGFjdCBSb3VuZGVkCityZW14MzIzNSByZW1haW5kZXIgMi4zNDg4NDU3NjAwNDE1NDc0MjcwMjU5MzMwODY1MTg0IDkxODI0MzQuNjY2MDIxMjQ4MjUwMDM3NjIyMDUwODYwNUUtNjEyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzIzNSBzdWJ0cmFjdCAyLjM0ODg0NTc2MDA0MTU0NzQyNzAyNTkzMzA4NjUxODQgOTE4MjQzNC42NjYwMjEyNDgyNTAwMzc2MjIwNTA4NjA1RS02MTIgLT4gMi4zNDg4NDU3NjAwNDE1NDc0MjcwMjU5MzMwODY1MTg0IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMzYgYWRkIC01MTA3NTg2MzAwMTk3Ljk3MDM5NDEwMzQ0MDQ1NTc0MDkgNTY2MDkuMDU0ODYwNTUwNTc4Mzg2NzgwMzk0OTY2ODZFLTc2OCAtPiAtNTEwNzU4NjMwMDE5Ny45NzAzOTQxMDM0NDA0NTU3NDA5IEluZXhhY3QgUm91bmRlZAorY29teDMyMzYgY29tcGFyZSAtNTEwNzU4NjMwMDE5Ny45NzAzOTQxMDM0NDA0NTU3NDA5IDU2NjA5LjA1NDg2MDU1MDU3ODM4Njc4MDM5NDk2Njg2RS03NjggLT4gLTEKK2RpdngzMjM2IGRpdmlkZSAtNTEwNzU4NjMwMDE5Ny45NzAzOTQxMDM0NDA0NTU3NDA5IDU2NjA5LjA1NDg2MDU1MDU3ODM4Njc4MDM5NDk2Njg2RS03NjggLT4gLTkuMDIyNTYwNjM1ODkwOTg3Nzg1NTMyNjM1NzQwMjI0MkUrNzc1IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMzYgZGl2aWRlaW50IC01MTA3NTg2MzAwMTk3Ljk3MDM5NDEwMzQ0MDQ1NTc0MDkgNTY2MDkuMDU0ODYwNTUwNTc4Mzg2NzgwMzk0OTY2ODZFLTc2OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyMzYgbXVsdGlwbHkgLTUxMDc1ODYzMDAxOTcuOTcwMzk0MTAzNDQwNDU1NzQwOSA1NjYwOS4wNTQ4NjA1NTA1NzgzODY3ODAzOTQ5NjY4NkUtNzY4IC0+IC0yLjg5MTM1NjMzMDcyOTAzNDYxNTI1OTYyMTI1OTM1MzJFLTc1MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjM2IHBvd2VyIC01MTA3NTg2MzAwMTk3Ljk3MDM5NDEwMzQ0MDQ1NTc0MDkgNiAtPiAxLjc3NTM5MjA4OTQxODgwMjIxMjU5MTk1NTk1NjUwMjlFKzc2IEluZXhhY3QgUm91bmRlZAorcmVteDMyMzYgcmVtYWluZGVyIC01MTA3NTg2MzAwMTk3Ljk3MDM5NDEwMzQ0MDQ1NTc0MDkgNTY2MDkuMDU0ODYwNTUwNTc4Mzg2NzgwMzk0OTY2ODZFLTc2OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyMzYgc3VidHJhY3QgLTUxMDc1ODYzMDAxOTcuOTcwMzk0MTAzNDQwNDU1NzQwOSA1NjYwOS4wNTQ4NjA1NTA1NzgzODY3ODAzOTQ5NjY4NkUtNzY4IC0+IC01MTA3NTg2MzAwMTk3Ljk3MDM5NDEwMzQ0MDQ1NTc0MDkgSW5leGFjdCBSb3VuZGVkCithZGR4MzIzNyBhZGQgLTcwNDU0MDcwMDk1ODY5LjcwNzE3ODcxMjEyNjAxMzkwIC02MjAwMTc4LjM3MDI0OTI2MDAwOTE2ODg4ODM5MjQwNiAtPiAtNzA0NTQwNzYyOTYwNDguMDc3NDI3OTcyMTM1MTgyNzg4IEluZXhhY3QgUm91bmRlZAorY29teDMyMzcgY29tcGFyZSAtNzA0NTQwNzAwOTU4NjkuNzA3MTc4NzEyMTI2MDEzOTAgLTYyMDAxNzguMzcwMjQ5MjYwMDA5MTY4ODg4MzkyNDA2IC0+IC0xCitkaXZ4MzIzNyBkaXZpZGUgLTcwNDU0MDcwMDk1ODY5LjcwNzE3ODcxMjEyNjAxMzkwIC02MjAwMTc4LjM3MDI0OTI2MDAwOTE2ODg4ODM5MjQwNiAtPiAxMTM2MzIzMi43Nzk1NDk0MjI0OTA1NDg5OTc1MTcxOTQgSW5leGFjdCBSb3VuZGVkCitkdml4MzIzNyBkaXZpZGVpbnQgLTcwNDU0MDcwMDk1ODY5LjcwNzE3ODcxMjEyNjAxMzkwIC02MjAwMTc4LjM3MDI0OTI2MDAwOTE2ODg4ODM5MjQwNiAtPiAxMTM2MzIzMgorbXVseDMyMzcgbXVsdGlwbHkgLTcwNDU0MDcwMDk1ODY5LjcwNzE3ODcxMjEyNjAxMzkwIC02MjAwMTc4LjM3MDI0OTI2MDAwOTE2ODg4ODM5MjQwNiAtPiA0MzY4Mjc4MDE1MDQ0MzY1NjY5NDUuNzY2NjM2ODc5MjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzNyBwb3dlciAtNzA0NTQwNzAwOTU4NjkuNzA3MTc4NzEyMTI2MDEzOTAgLTYyMDAxNzggLT4gMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyMzcgcmVtYWluZGVyIC03MDQ1NDA3MDA5NTg2OS43MDcxNzg3MTIxMjYwMTM5MCAtNjIwMDE3OC4zNzAyNDkyNjAwMDkxNjg4ODgzOTI0MDYgLT4gLTQ4MzMzNDUuNDY3ODY2MjAzOTIwMDI4ODgzNTgzODA4CitzdWJ4MzIzNyBzdWJ0cmFjdCAtNzA0NTQwNzAwOTU4NjkuNzA3MTc4NzEyMTI2MDEzOTAgLTYyMDAxNzguMzcwMjQ5MjYwMDA5MTY4ODg4MzkyNDA2IC0+IC03MDQ1NDA2Mzg5NTY5MS4zMzY5Mjk0NTIxMTY4NDUwMTIgSW5leGFjdCBSb3VuZGVkCithZGR4MzIzOCBhZGQgMjkxMTkuMjIwNjIxNTExMDQ2NTU4NzU3OTAwNjQ1MjI4IDM1MTc2MTIuODgxMDc2MTQ3MDAxODY3NjMxMTg2MzAxMEUtMjIyIC0+IDI5MTE5LjIyMDYyMTUxMTA0NjU1ODc1NzkwMDY0NTIyOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjM4IGNvbXBhcmUgMjkxMTkuMjIwNjIxNTExMDQ2NTU4NzU3OTAwNjQ1MjI4IDM1MTc2MTIuODgxMDc2MTQ3MDAxODY3NjMxMTg2MzAxMEUtMjIyIC0+IDEKK2RpdngzMjM4IGRpdmlkZSAyOTExOS4yMjA2MjE1MTEwNDY1NTg3NTc5MDA2NDUyMjggMzUxNzYxMi44ODEwNzYxNDcwMDE4Njc2MzExODYzMDEwRS0yMjIgLT4gOC4yNzgxMTk3MzgwMDg5Njg0MDYzMjM5NzUyMzM3NDY3RSsyMTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzIzOCBkaXZpZGVpbnQgMjkxMTkuMjIwNjIxNTExMDQ2NTU4NzU3OTAwNjQ1MjI4IDM1MTc2MTIuODgxMDc2MTQ3MDAxODY3NjMxMTg2MzAxMEUtMjIyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzIzOCBtdWx0aXBseSAyOTExOS4yMjA2MjE1MTEwNDY1NTg3NTc5MDA2NDUyMjggMzUxNzYxMi44ODEwNzYxNDcwMDE4Njc2MzExODYzMDEwRS0yMjIgLT4gMS4wMjQzMDE0NTU0NTEyNTQyNDQwNTkyNzY4MDg4NjAwRS0yMTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzOCBwb3dlciAyOTExOS4yMjA2MjE1MTEwNDY1NTg3NTc5MDA2NDUyMjggNCAtPiA3MTg5ODM2MDUzMjg0MTc0NjEuMzI4MzU5ODQyMTcyNTUgSW5leGFjdCBSb3VuZGVkCityZW14MzIzOCByZW1haW5kZXIgMjkxMTkuMjIwNjIxNTExMDQ2NTU4NzU3OTAwNjQ1MjI4IDM1MTc2MTIuODgxMDc2MTQ3MDAxODY3NjMxMTg2MzAxMEUtMjIyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzIzOCBzdWJ0cmFjdCAyOTExOS4yMjA2MjE1MTEwNDY1NTg3NTc5MDA2NDUyMjggMzUxNzYxMi44ODEwNzYxNDcwMDE4Njc2MzExODYzMDEwRS0yMjIgLT4gMjkxMTkuMjIwNjIxNTExMDQ2NTU4NzU3OTAwNjQ1MjI4IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMzkgYWRkIC01MTY4LjIyMTQxMTEwOTExMzI5MTM3NzYwNDIyMTQ1MjUgLTU2OTAyNzQuMDk3MTE3MzQ3NjUyNzEyMzU2ODYyNzcyMCAtPiAtNTY5NTQ0Mi4zMTg1Mjg0NTY3NjYwMDM3MzQ0NjY5OTM1IEluZXhhY3QgUm91bmRlZAorY29teDMyMzkgY29tcGFyZSAtNTE2OC4yMjE0MTExMDkxMTMyOTEzNzc2MDQyMjE0NTI1IC01NjkwMjc0LjA5NzExNzM0NzY1MjcxMjM1Njg2Mjc3MjAgLT4gMQorZGl2eDMyMzkgZGl2aWRlIC01MTY4LjIyMTQxMTEwOTExMzI5MTM3NzYwNDIyMTQ1MjUgLTU2OTAyNzQuMDk3MTE3MzQ3NjUyNzEyMzU2ODYyNzcyMCAtPiAwLjAwMDkwODI1NTI2NTU0NjM5OTE1NTgwNTM5MzE2NzE0NDUxIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMzkgZGl2aWRlaW50IC01MTY4LjIyMTQxMTEwOTExMzI5MTM3NzYwNDIyMTQ1MjUgLTU2OTAyNzQuMDk3MTE3MzQ3NjUyNzEyMzU2ODYyNzcyMCAtPiAwCittdWx4MzIzOSBtdWx0aXBseSAtNTE2OC4yMjE0MTExMDkxMTMyOTEzNzc2MDQyMjE0NTI1IC01NjkwMjc0LjA5NzExNzM0NzY1MjcxMjM1Njg2Mjc3MjAgLT4gMjk0MDg1OTY0MjMuODAxNDU0MDUzODU1NzkzODk4MzIzIEluZXhhY3QgUm91bmRlZAorcG93eDMyMzkgcG93ZXIgLTUxNjguMjIxNDExMTA5MTEzMjkxMzc3NjA0MjIxNDUyNSAtNTY5MDI3NCAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzIzOSByZW1haW5kZXIgLTUxNjguMjIxNDExMTA5MTEzMjkxMzc3NjA0MjIxNDUyNSAtNTY5MDI3NC4wOTcxMTczNDc2NTI3MTIzNTY4NjI3NzIwIC0+IC01MTY4LjIyMTQxMTEwOTExMzI5MTM3NzYwNDIyMTQ1MjUKK3N1YngzMjM5IHN1YnRyYWN0IC01MTY4LjIyMTQxMTEwOTExMzI5MTM3NzYwNDIyMTQ1MjUgLTU2OTAyNzQuMDk3MTE3MzQ3NjUyNzEyMzU2ODYyNzcyMCAtPiA1Njg1MTA1Ljg3NTcwNjIzODUzOTQyMDk3OTI1ODU1MDUgSW5leGFjdCBSb3VuZGVkCithZGR4MzI0MCBhZGQgMzM3ODMuMDYwODU3MTk3MDY3MzkxNDYyMTQ0NTE3OTY0IC0yMDcwLjA4MDY5NTk0NjUwODgxOTg1MDgzMjI4MTU0MDYgLT4gMzE3MTIuOTgwMTYxMjUwNTU4NTcxNjExMzEyMjM2NDIzIEluZXhhY3QgUm91bmRlZAorY29teDMyNDAgY29tcGFyZSAzMzc4My4wNjA4NTcxOTcwNjczOTE0NjIxNDQ1MTc5NjQgLTIwNzAuMDgwNjk1OTQ2NTA4ODE5ODUwODMyMjgxNTQwNiAtPiAxCitkaXZ4MzI0MCBkaXZpZGUgMzM3ODMuMDYwODU3MTk3MDY3MzkxNDYyMTQ0NTE3OTY0IC0yMDcwLjA4MDY5NTk0NjUwODgxOTg1MDgzMjI4MTU0MDYgLT4gLTE2LjMxOTY4MzA1NTUxOTg5Mjg4MTM5NDM1ODQ0OTIyMCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjQwIGRpdmlkZWludCAzMzc4My4wNjA4NTcxOTcwNjczOTE0NjIxNDQ1MTc5NjQgLTIwNzAuMDgwNjk1OTQ2NTA4ODE5ODUwODMyMjgxNTQwNiAtPiAtMTYKK211bHgzMjQwIG11bHRpcGx5IDMzNzgzLjA2MDg1NzE5NzA2NzM5MTQ2MjE0NDUxNzk2NCAtMjA3MC4wODA2OTU5NDY1MDg4MTk4NTA4MzIyODE1NDA2IC0+IC02OTkzMzY2Mi4xMzA0Njk3NjYwODA1NzQyMzU4NDM0NDggSW5leGFjdCBSb3VuZGVkCitwb3d4MzI0MCBwb3dlciAzMzc4My4wNjA4NTcxOTcwNjczOTE0NjIxNDQ1MTc5NjQgLTIwNzAgLT4gMy45MTgxMzM2MDAxODAzMDA4NTk3MjkzODE4OTg0NDA2RS05Mzc1IEluZXhhY3QgUm91bmRlZAorcmVteDMyNDAgcmVtYWluZGVyIDMzNzgzLjA2MDg1NzE5NzA2NzM5MTQ2MjE0NDUxNzk2NCAtMjA3MC4wODA2OTU5NDY1MDg4MTk4NTA4MzIyODE1NDA2IC0+IDY2MS43Njk3MjIwNTI5MjYyNzM4NDg4MjgwMTMzMTQ0CitzdWJ4MzI0MCBzdWJ0cmFjdCAzMzc4My4wNjA4NTcxOTcwNjczOTE0NjIxNDQ1MTc5NjQgLTIwNzAuMDgwNjk1OTQ2NTA4ODE5ODUwODMyMjgxNTQwNiAtPiAzNTg1My4xNDE1NTMxNDM1NzYyMTEzMTI5NzY3OTk1MDUgSW5leGFjdCBSb3VuZGVkCithZGR4MzI0MSBhZGQgNDIyMDc0MzUwOTEwNTAuODQwMjk2MzUzODc0NzMzMTY5RS05MDUgNzMzMzA2MzMwNzguODI4MjE2MDE4NTM2MzI2NzQzMzI1RSs5NzYgLT4gNy4zMzMwNjMzMDc4ODI4MjE2MDE4NTM2MzI2NzQzMzI1RSs5ODYgSW5leGFjdCBSb3VuZGVkCitjb214MzI0MSBjb21wYXJlIDQyMjA3NDM1MDkxMDUwLjg0MDI5NjM1Mzg3NDczMzE2OUUtOTA1IDczMzMwNjMzMDc4LjgyODIxNjAxODUzNjMyNjc0MzMyNUUrOTc2IC0+IC0xCitkaXZ4MzI0MSBkaXZpZGUgNDIyMDc0MzUwOTEwNTAuODQwMjk2MzUzODc0NzMzMTY5RS05MDUgNzMzMzA2MzMwNzguODI4MjE2MDE4NTM2MzI2NzQzMzI1RSs5NzYgLT4gNS43NTU3NzEyNjc2MDY0MjA2NjM2MTc4MjQ3NTU0MDU2RS0xODc5IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNDEgZGl2aWRlaW50IDQyMjA3NDM1MDkxMDUwLjg0MDI5NjM1Mzg3NDczMzE2OUUtOTA1IDczMzMwNjMzMDc4LjgyODIxNjAxODUzNjMyNjc0MzMyNUUrOTc2IC0+IDAKK211bHgzMjQxIG11bHRpcGx5IDQyMjA3NDM1MDkxMDUwLjg0MDI5NjM1Mzg3NDczMzE2OUUtOTA1IDczMzMwNjMzMDc4LjgyODIxNjAxODUzNjMyNjc0MzMyNUUrOTc2IC0+IDMuMDk1MDk3OTM1ODYwMzA3NTY1MDU5MjQzMzM5ODkzOUUrOTUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI0MSBwb3dlciA0MjIwNzQzNTA5MTA1MC44NDAyOTYzNTM4NzQ3MzMxNjlFLTkwNSA3IC0+IDIuMzg2Mjg3Mjk0MDYxNTI4MzU5OTU3MzA4Mjk2NjY0MkUtNjI0MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjQxIHJlbWFpbmRlciA0MjIwNzQzNTA5MTA1MC44NDAyOTYzNTM4NzQ3MzMxNjlFLTkwNSA3MzMzMDYzMzA3OC44MjgyMTYwMTg1MzYzMjY3NDMzMjVFKzk3NiAtPiA0LjIyMDc0MzUwOTEwNTA4NDAyOTYzNTM4NzQ3MzMxNjlFLTg5Mgorc3VieDMyNDEgc3VidHJhY3QgNDIyMDc0MzUwOTEwNTAuODQwMjk2MzUzODc0NzMzMTY5RS05MDUgNzMzMzA2MzMwNzguODI4MjE2MDE4NTM2MzI2NzQzMzI1RSs5NzYgLT4gLTcuMzMzMDYzMzA3ODgyODIxNjAxODUzNjMyNjc0MzMyNUUrOTg2IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNDIgYWRkIC03MTgwMC44MDY3MDA4Njg3ODQ4NDEwNDU0MDY2Nzk2NDEgLTM5NjE3NDU2OTY0MjUwNjk3OTAyNTE5MTUwNTI2NzAxIC0+IC0zOTYxNzQ1Njk2NDI1MDY5NzkwMjUxOTE1MDU5ODUwMiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjQyIGNvbXBhcmUgLTcxODAwLjgwNjcwMDg2ODc4NDg0MTA0NTQwNjY3OTY0MSAtMzk2MTc0NTY5NjQyNTA2OTc5MDI1MTkxNTA1MjY3MDEgLT4gMQorZGl2eDMyNDIgZGl2aWRlIC03MTgwMC44MDY3MDA4Njg3ODQ4NDEwNDU0MDY2Nzk2NDEgLTM5NjE3NDU2OTY0MjUwNjk3OTAyNTE5MTUwNTI2NzAxIC0+IDEuODEyMzUyNzQwNTAxNzIyMDE3ODU3OTA0OTk2NDEyNkUtMjcgSW5leGFjdCBSb3VuZGVkCitkdml4MzI0MiBkaXZpZGVpbnQgLTcxODAwLjgwNjcwMDg2ODc4NDg0MTA0NTQwNjY3OTY0MSAtMzk2MTc0NTY5NjQyNTA2OTc5MDI1MTkxNTA1MjY3MDEgLT4gMAorbXVseDMyNDIgbXVsdGlwbHkgLTcxODAwLjgwNjcwMDg2ODc4NDg0MTA0NTQwNjY3OTY0MSAtMzk2MTc0NTY5NjQyNTA2OTc5MDI1MTkxNTA1MjY3MDEgLT4gMi44NDQ1NjUzNjk0NzAxNTIyMTY0OTAxODI3NTI0NTM4RSszNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjQyIHBvd2VyIC03MTgwMC44MDY3MDA4Njg3ODQ4NDEwNDU0MDY2Nzk2NDEgLTQgLT4gMy43NjI1NTM2ODUwODk1NDgwODgyMTc4NTk5NDI4Nzc0RS0yMCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjQyIHJlbWFpbmRlciAtNzE4MDAuODA2NzAwODY4Nzg0ODQxMDQ1NDA2Njc5NjQxIC0zOTYxNzQ1Njk2NDI1MDY5NzkwMjUxOTE1MDUyNjcwMSAtPiAtNzE4MDAuODA2NzAwODY4Nzg0ODQxMDQ1NDA2Njc5NjQxCitzdWJ4MzI0MiBzdWJ0cmFjdCAtNzE4MDAuODA2NzAwODY4Nzg0ODQxMDQ1NDA2Njc5NjQxIC0zOTYxNzQ1Njk2NDI1MDY5NzkwMjUxOTE1MDUyNjcwMSAtPiAzOTYxNzQ1Njk2NDI1MDY5NzkwMjUxOTE1MDQ1NDkwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjQzIGFkZCA1MzYyNzQ4MDgwMS42MzE1MDQ4OTIzMTAwMTYwNjIxNjAgMzI4MjU5LjU2OTQ3NjYxMDQ5MzEzMzExOTgzMTA5NTAzIC0+IDUzNjI3ODA5MDYxLjIwMDk4MTUwMjgwMzE0OTE4MTk5MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjQzIGNvbXBhcmUgNTM2Mjc0ODA4MDEuNjMxNTA0ODkyMzEwMDE2MDYyMTYwIDMyODI1OS41Njk0NzY2MTA0OTMxMzMxMTk4MzEwOTUwMyAtPiAxCitkaXZ4MzI0MyBkaXZpZGUgNTM2Mjc0ODA4MDEuNjMxNTA0ODkyMzEwMDE2MDYyMTYwIDMyODI1OS41Njk0NzY2MTA0OTMxMzMxMTk4MzEwOTUwMyAtPiAxNjMzNjkuMTMxNTkwMzk3MTc5MDE1MDA0NjUxMDk4MzkgSW5leGFjdCBSb3VuZGVkCitkdml4MzI0MyBkaXZpZGVpbnQgNTM2Mjc0ODA4MDEuNjMxNTA0ODkyMzEwMDE2MDYyMTYwIDMyODI1OS41Njk0NzY2MTA0OTMxMzMxMTk4MzEwOTUwMyAtPiAxNjMzNjkKK211bHgzMjQzIG11bHRpcGx5IDUzNjI3NDgwODAxLjYzMTUwNDg5MjMxMDAxNjA2MjE2MCAzMjgyNTkuNTY5NDc2NjEwNDkzMTMzMTE5ODMxMDk1MDMgLT4gMTc2MDM3MzM3NjAwNTg3NTIuMzYzMTIzNTg1MjI0MzY5IEluZXhhY3QgUm91bmRlZAorcG93eDMyNDMgcG93ZXIgNTM2Mjc0ODA4MDEuNjMxNTA0ODkyMzEwMDE2MDYyMTYwIDMyODI2MCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjQzIHJlbWFpbmRlciA1MzYyNzQ4MDgwMS42MzE1MDQ4OTIzMTAwMTYwNjIxNjAgMzI4MjU5LjU2OTQ3NjYxMDQ5MzEzMzExOTgzMTA5NTAzIC0+IDQzMTk1LjgwNzEyNTIzOTY0NTM2MjM3NTk5NjA0MzkzCitzdWJ4MzI0MyBzdWJ0cmFjdCA1MzYyNzQ4MDgwMS42MzE1MDQ4OTIzMTAwMTYwNjIxNjAgMzI4MjU5LjU2OTQ3NjYxMDQ5MzEzMzExOTgzMTA5NTAzIC0+IDUzNjI3MTUyNTQyLjA2MjAyODI4MTgxNjg4Mjk0MjMyOSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjQ0IGFkZCAtNTA1MjYwMTU5OC41NTU5MzcxMzM4NDI4MzY4NDM4NzI4IC05Nzg1NTM3Mi4yMjQzMjE2NjQ3ODUzMTQ3ODI1NTYwNjQgLT4gLTUxNTA0NTY5NzAuNzgwMjU4Nzk4NjI4MTUxNjI2NDI4OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjQ0IGNvbXBhcmUgLTUwNTI2MDE1OTguNTU1OTM3MTMzODQyODM2ODQzODcyOCAtOTc4NTUzNzIuMjI0MzIxNjY0Nzg1MzE0NzgyNTU2MDY0IC0+IC0xCitkaXZ4MzI0NCBkaXZpZGUgLTUwNTI2MDE1OTguNTU1OTM3MTMzODQyODM2ODQzODcyOCAtOTc4NTUzNzIuMjI0MzIxNjY0Nzg1MzE0NzgyNTU2MDY0IC0+IDUxLjYzMzM1OTM1MTczMjQzMjI4Mzg3OTI3NDE5Mjk0NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjQ0IGRpdmlkZWludCAtNTA1MjYwMTU5OC41NTU5MzcxMzM4NDI4MzY4NDM4NzI4IC05Nzg1NTM3Mi4yMjQzMjE2NjQ3ODUzMTQ3ODI1NTYwNjQgLT4gNTEKK211bHgzMjQ0IG11bHRpcGx5IC01MDUyNjAxNTk4LjU1NTkzNzEzMzg0MjgzNjg0Mzg3MjggLTk3ODU1MzcyLjIyNDMyMTY2NDc4NTMxNDc4MjU1NjA2NCAtPiA0OTQ0MjQyMTAxMjc4OTM4OTMuMTI1ODE1MTI5NTQ3ODcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI0NCBwb3dlciAtNTA1MjYwMTU5OC41NTU5MzcxMzM4NDI4MzY4NDM4NzI4IC05Nzg1NTM3MiAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzI0NCByZW1haW5kZXIgLTUwNTI2MDE1OTguNTU1OTM3MTMzODQyODM2ODQzODcyOCAtOTc4NTUzNzIuMjI0MzIxNjY0Nzg1MzE0NzgyNTU2MDY0IC0+IC02MTk3NzYxNS4xMTU1MzIyMjk3OTE3ODI5MzM1MTM1MzYKK3N1YngzMjQ0IHN1YnRyYWN0IC01MDUyNjAxNTk4LjU1NTkzNzEzMzg0MjgzNjg0Mzg3MjggLTk3ODU1MzcyLjIyNDMyMTY2NDc4NTMxNDc4MjU1NjA2NCAtPiAtNDk1NDc0NjIyNi4zMzE2MTU0NjkwNTc1MjIwNjEzMTY3IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNDUgYWRkIDQyMDgxMzQzMjA3MzMuNzA2OTc0Mjk4ODIyODA2ODE5MUUrMTQ2IDQyNzA4NjkuMTc2MDE0OTQ3NzU5ODkyMDk2MDYyODM5MkUrNDcxIC0+IDQuMjcwODY5MTc2MDE0OTQ3NzU5ODkyMDk2MDYyODM5MkUrNDc3IEluZXhhY3QgUm91bmRlZAorY29teDMyNDUgY29tcGFyZSA0MjA4MTM0MzIwNzMzLjcwNjk3NDI5ODgyMjgwNjgxOTFFKzE0NiA0MjcwODY5LjE3NjAxNDk0Nzc1OTg5MjA5NjA2MjgzOTJFKzQ3MSAtPiAtMQorZGl2eDMyNDUgZGl2aWRlIDQyMDgxMzQzMjA3MzMuNzA2OTc0Mjk4ODIyODA2ODE5MUUrMTQ2IDQyNzA4NjkuMTc2MDE0OTQ3NzU5ODkyMDk2MDYyODM5MkUrNDcxIC0+IDkuODUzMTA5ODY0MzAyMTk1MTA0ODc0NDA3ODAyNzI4M0UtMzIwIEluZXhhY3QgUm91bmRlZAorZHZpeDMyNDUgZGl2aWRlaW50IDQyMDgxMzQzMjA3MzMuNzA2OTc0Mjk4ODIyODA2ODE5MUUrMTQ2IDQyNzA4NjkuMTc2MDE0OTQ3NzU5ODkyMDk2MDYyODM5MkUrNDcxIC0+IDAKK211bHgzMjQ1IG11bHRpcGx5IDQyMDgxMzQzMjA3MzMuNzA2OTc0Mjk4ODIyODA2ODE5MUUrMTQ2IDQyNzA4NjkuMTc2MDE0OTQ3NzU5ODkyMDk2MDYyODM5MkUrNDcxIC0+IDEuNzk3MjM5MTE1ODk1MjE4OTAwMjE2OTA4Mjc1MzE4M0UrNjM2IEluZXhhY3QgUm91bmRlZAorcG93eDMyNDUgcG93ZXIgNDIwODEzNDMyMDczMy43MDY5NzQyOTg4MjI4MDY4MTkxRSsxNDYgNCAtPiAzLjEzNTg3MjM0Mzk4MzA4NzIxMjcxMjk4MjE5NjM4NTdFKzYzNCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjQ1IHJlbWFpbmRlciA0MjA4MTM0MzIwNzMzLjcwNjk3NDI5ODgyMjgwNjgxOTFFKzE0NiA0MjcwODY5LjE3NjAxNDk0Nzc1OTg5MjA5NjA2MjgzOTJFKzQ3MSAtPiA0LjIwODEzNDMyMDczMzcwNjk3NDI5ODgyMjgwNjgxOTFFKzE1OAorc3VieDMyNDUgc3VidHJhY3QgNDIwODEzNDMyMDczMy43MDY5NzQyOTg4MjI4MDY4MTkxRSsxNDYgNDI3MDg2OS4xNzYwMTQ5NDc3NTk4OTIwOTYwNjI4MzkyRSs0NzEgLT4gLTQuMjcwODY5MTc2MDE0OTQ3NzU5ODkyMDk2MDYyODM5MkUrNDc3IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNDYgYWRkIC04LjUwNzcwMDk2NTc5NDI1ODE1MTU1OTA0NzExODkwODRFKzMwOCA5NjUyMTQ1MTU1LjM3NDIxNzA0Nzg0MjExNDA0MjM3NkUtMjUwIC0+IC04LjUwNzcwMDk2NTc5NDI1ODE1MTU1OTA0NzExODkwODRFKzMwOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjQ2IGNvbXBhcmUgLTguNTA3NzAwOTY1Nzk0MjU4MTUxNTU5MDQ3MTE4OTA4NEUrMzA4IDk2NTIxNDUxNTUuMzc0MjE3MDQ3ODQyMTE0MDQyMzc2RS0yNTAgLT4gLTEKK2RpdngzMjQ2IGRpdmlkZSAtOC41MDc3MDA5NjU3OTQyNTgxNTE1NTkwNDcxMTg5MDg0RSszMDggOTY1MjE0NTE1NS4zNzQyMTcwNDc4NDIxMTQwNDIzNzZFLTI1MCAtPiAtOC44MTQzMTEwNDU3MjM2MDg5OTc4MDcwNDE5MDQ3OTcwRSs1NDggSW5leGFjdCBSb3VuZGVkCitkdml4MzI0NiBkaXZpZGVpbnQgLTguNTA3NzAwOTY1Nzk0MjU4MTUxNTU5MDQ3MTE4OTA4NEUrMzA4IDk2NTIxNDUxNTUuMzc0MjE3MDQ3ODQyMTE0MDQyMzc2RS0yNTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjQ2IG11bHRpcGx5IC04LjUwNzcwMDk2NTc5NDI1ODE1MTU1OTA0NzExODkwODRFKzMwOCA5NjUyMTQ1MTU1LjM3NDIxNzA0Nzg0MjExNDA0MjM3NkUtMjUwIC0+IC04LjIxMTc1NjQ2NjAzNjM1OTYyODM3MzI5NDIwOTE4NTJFKzY4IEluZXhhY3QgUm91bmRlZAorcG93eDMyNDYgcG93ZXIgLTguNTA3NzAwOTY1Nzk0MjU4MTUxNTU5MDQ3MTE4OTA4NEUrMzA4IDEwIC0+IDEuOTg2NjUzNjgxMjU3MzIwNzg2ODM1MDY0MDc2MDY3OEUrMzA4OSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjQ2IHJlbWFpbmRlciAtOC41MDc3MDA5NjU3OTQyNTgxNTE1NTkwNDcxMTg5MDg0RSszMDggOTY1MjE0NTE1NS4zNzQyMTcwNDc4NDIxMTQwNDIzNzZFLTI1MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyNDYgc3VidHJhY3QgLTguNTA3NzAwOTY1Nzk0MjU4MTUxNTU5MDQ3MTE4OTA4NEUrMzA4IDk2NTIxNDUxNTUuMzc0MjE3MDQ3ODQyMTE0MDQyMzc2RS0yNTAgLT4gLTguNTA3NzAwOTY1Nzk0MjU4MTUxNTU5MDQ3MTE4OTA4NEUrMzA4IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNDcgYWRkIC05NTA0Ljk3MDMwMzIyODY5NjA3OTA5MDQxODEwNzgwNjNFKzYxOSAtODYuMjQ1OTU2OTQ5MDQ5MTg2NTMzNDY5MjA2NDg1MDAzIC0+IC05LjUwNDk3MDMwMzIyODY5NjA3OTA5MDQxODEwNzgwNjNFKzYyMiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjQ3IGNvbXBhcmUgLTk1MDQuOTcwMzAzMjI4Njk2MDc5MDkwNDE4MTA3ODA2M0UrNjE5IC04Ni4yNDU5NTY5NDkwNDkxODY1MzM0NjkyMDY0ODUwMDMgLT4gLTEKK2RpdngzMjQ3IGRpdmlkZSAtOTUwNC45NzAzMDMyMjg2OTYwNzkwOTA0MTgxMDc4MDYzRSs2MTkgLTg2LjI0NTk1Njk0OTA0OTE4NjUzMzQ2OTIwNjQ4NTAwMyAtPiAxLjEwMjA3NzIwMzMyMjU3MDcxMjUzOTEyMTI1MTk0MjFFKzYyMSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjQ3IGRpdmlkZWludCAtOTUwNC45NzAzMDMyMjg2OTYwNzkwOTA0MTgxMDc4MDYzRSs2MTkgLTg2LjI0NTk1Njk0OTA0OTE4NjUzMzQ2OTIwNjQ4NTAwMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyNDcgbXVsdGlwbHkgLTk1MDQuOTcwMzAzMjI4Njk2MDc5MDkwNDE4MTA3ODA2M0UrNjE5IC04Ni4yNDU5NTY5NDkwNDkxODY1MzM0NjkyMDY0ODUwMDMgLT4gOC4xOTc2NTI1OTU3NDI1MzExNDI3ODU4MDg3MTE3NjU1RSs2MjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI0NyBwb3dlciAtOTUwNC45NzAzMDMyMjg2OTYwNzkwOTA0MTgxMDc4MDYzRSs2MTkgLTg2IC0+IDBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjQ3IHJlbWFpbmRlciAtOTUwNC45NzAzMDMyMjg2OTYwNzkwOTA0MTgxMDc4MDYzRSs2MTkgLTg2LjI0NTk1Njk0OTA0OTE4NjUzMzQ2OTIwNjQ4NTAwMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyNDcgc3VidHJhY3QgLTk1MDQuOTcwMzAzMjI4Njk2MDc5MDkwNDE4MTA3ODA2M0UrNjE5IC04Ni4yNDU5NTY5NDkwNDkxODY1MzM0NjkyMDY0ODUwMDMgLT4gLTkuNTA0OTcwMzAzMjI4Njk2MDc5MDkwNDE4MTA3ODA2M0UrNjIyIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNDggYWRkIC00NDAyMjA5MTYuNjY3MTY3NDMwMjY4OTY5MzExOTQ3NDkgLTEwMjcyNS4wMTU5NDM3Nzg3MTU2MDU2NDgyNDM1ODc3NSAtPiAtNDQwMzIzNjQxLjY4MzExMTIwODk4NDU3NDk2MDE5MTA4IEluZXhhY3QgUm91bmRlZAorY29teDMyNDggY29tcGFyZSAtNDQwMjIwOTE2LjY2NzE2NzQzMDI2ODk2OTMxMTk0NzQ5IC0xMDI3MjUuMDE1OTQzNzc4NzE1NjA1NjQ4MjQzNTg3NzUgLT4gLTEKK2RpdngzMjQ4IGRpdmlkZSAtNDQwMjIwOTE2LjY2NzE2NzQzMDI2ODk2OTMxMTk0NzQ5IC0xMDI3MjUuMDE1OTQzNzc4NzE1NjA1NjQ4MjQzNTg3NzUgLT4gNDI4NS40MzA1MDIyMjY0NDczMjY5NzcwMjQ2MTI2MjM0IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNDggZGl2aWRlaW50IC00NDAyMjA5MTYuNjY3MTY3NDMwMjY4OTY5MzExOTQ3NDkgLTEwMjcyNS4wMTU5NDM3Nzg3MTU2MDU2NDgyNDM1ODc3NSAtPiA0Mjg1CittdWx4MzI0OCBtdWx0aXBseSAtNDQwMjIwOTE2LjY2NzE2NzQzMDI2ODk2OTMxMTk0NzQ5IC0xMDI3MjUuMDE1OTQzNzc4NzE1NjA1NjQ4MjQzNTg3NzUgLT4gNDUyMjE3MDA2ODM0MTkuNjU1NTk2NzcxNzExNjAzNTA1IEluZXhhY3QgUm91bmRlZAorcG93eDMyNDggcG93ZXIgLTQ0MDIyMDkxNi42NjcxNjc0MzAyNjg5NjkzMTE5NDc0OSAtMTAyNzI1IC0+IC0wRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzI0OCByZW1haW5kZXIgLTQ0MDIyMDkxNi42NjcxNjc0MzAyNjg5NjkzMTE5NDc0OSAtMTAyNzI1LjAxNTk0Mzc3ODcxNTYwNTY0ODI0MzU4Nzc1IC0+IC00NDIyMy4zNDgwNzU2MzM4OTg3NjY1ODgxNzM5ODEyNQorc3VieDMyNDggc3VidHJhY3QgLTQ0MDIyMDkxNi42NjcxNjc0MzAyNjg5NjkzMTE5NDc0OSAtMTAyNzI1LjAxNTk0Mzc3ODcxNTYwNTY0ODI0MzU4Nzc1IC0+IC00NDAxMTgxOTEuNjUxMjIzNjUxNTUzMzYzNjYzNzAzOTAgSW5leGFjdCBSb3VuZGVkCithZGR4MzI0OSBhZGQgLTQ2LjI1MDczNTA4NjAwNjM1MDUxNzk0MzQ2NDc1ODAxOSAxNDY1NjM1NzU1NTE3NC4yNjMyOTUyNjYwNzQ5MDgwMjQgLT4gMTQ2NTYzNTc1NTUxMjguMDEyNTYwMTgwMDY4NTU3NTA2IEluZXhhY3QgUm91bmRlZAorY29teDMyNDkgY29tcGFyZSAtNDYuMjUwNzM1MDg2MDA2MzUwNTE3OTQzNDY0NzU4MDE5IDE0NjU2MzU3NTU1MTc0LjI2MzI5NTI2NjA3NDkwODAyNCAtPiAtMQorZGl2eDMyNDkgZGl2aWRlIC00Ni4yNTA3MzUwODYwMDYzNTA1MTc5NDM0NjQ3NTgwMTkgMTQ2NTYzNTc1NTUxNzQuMjYzMjk1MjY2MDc0OTA4MDI0IC0+IC0zLjE1NTY3NzMxNjk1MjMzMTM5MzIyMDc3MjU1MjI4NjZFLTEyIEluZXhhY3QgUm91bmRlZAorZHZpeDMyNDkgZGl2aWRlaW50IC00Ni4yNTA3MzUwODYwMDYzNTA1MTc5NDM0NjQ3NTgwMTkgMTQ2NTYzNTc1NTUxNzQuMjYzMjk1MjY2MDc0OTA4MDI0IC0+IC0wCittdWx4MzI0OSBtdWx0aXBseSAtNDYuMjUwNzM1MDg2MDA2MzUwNTE3OTQzNDY0NzU4MDE5IDE0NjU2MzU3NTU1MTc0LjI2MzI5NTI2NjA3NDkwODAyNCAtPiAtNjc3ODY3MzEwNjEwMTUyLjU1NTY5NjIwNDU5Nzg4NTMwIEluZXhhY3QgUm91bmRlZAorcG93eDMyNDkgcG93ZXIgLTQ2LjI1MDczNTA4NjAwNjM1MDUxNzk0MzQ2NDc1ODAxOSAxIC0+IC00Ni4yNTA3MzUwODYwMDYzNTA1MTc5NDM0NjQ3NTgwMTkKK3JlbXgzMjQ5IHJlbWFpbmRlciAtNDYuMjUwNzM1MDg2MDA2MzUwNTE3OTQzNDY0NzU4MDE5IDE0NjU2MzU3NTU1MTc0LjI2MzI5NTI2NjA3NDkwODAyNCAtPiAtNDYuMjUwNzM1MDg2MDA2MzUwNTE3OTQzNDY0NzU4MDE5CitzdWJ4MzI0OSBzdWJ0cmFjdCAtNDYuMjUwNzM1MDg2MDA2MzUwNTE3OTQzNDY0NzU4MDE5IDE0NjU2MzU3NTU1MTc0LjI2MzI5NTI2NjA3NDkwODAyNCAtPiAtMTQ2NTYzNTc1NTUyMjAuNTE0MDMwMzUyMDgxMjU4NTQyIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNTAgYWRkIC02MTY0MTEyMTI5OTM5MS4zMTY0MjA2NDcxMDI2OTk2MjdFKzc2MyAtOTE4OTY0Njk4NjMuNDYxMDA2OTAzNTkwMDA0MTg4MTg3RSs0NzQgLT4gLTYuMTY0MTEyMTI5OTM5MTMxNjQyMDY0NzEwMjY5OTYyN0UrNzc2IEluZXhhY3QgUm91bmRlZAorY29teDMyNTAgY29tcGFyZSAtNjE2NDExMjEyOTkzOTEuMzE2NDIwNjQ3MTAyNjk5NjI3RSs3NjMgLTkxODk2NDY5ODYzLjQ2MTAwNjkwMzU5MDAwNDE4ODE4N0UrNDc0IC0+IC0xCitkaXZ4MzI1MCBkaXZpZGUgLTYxNjQxMTIxMjk5MzkxLjMxNjQyMDY0NzEwMjY5OTYyN0UrNzYzIC05MTg5NjQ2OTg2My40NjEwMDY5MDM1OTAwMDQxODgxODdFKzQ3NCAtPiA2LjcwNzY3MDIwNjU4OTc4MTk2MDQ3MTY5NDY4NTI1ODFFKzI5MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjUwIGRpdmlkZWludCAtNjE2NDExMjEyOTkzOTEuMzE2NDIwNjQ3MTAyNjk5NjI3RSs3NjMgLTkxODk2NDY5ODYzLjQ2MTAwNjkwMzU5MDAwNDE4ODE4N0UrNDc0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI1MCBtdWx0aXBseSAtNjE2NDExMjEyOTkzOTEuMzE2NDIwNjQ3MTAyNjk5NjI3RSs3NjMgLTkxODk2NDY5ODYzLjQ2MTAwNjkwMzU5MDAwNDE4ODE4N0UrNDc0IC0+IDUuNjY0NjAxNDQ1ODM5NDU4NDkyMTU3OTQxNzUwNDkzOUUrMTI2MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjUwIHBvd2VyIC02MTY0MTEyMTI5OTM5MS4zMTY0MjA2NDcxMDI2OTk2MjdFKzc2MyAtOSAtPiAtNy43ODMzMjYxMTc5OTc1NTMyNTA4NzQ4MTUwNzA4NjA1RS02OTkyIEluZXhhY3QgUm91bmRlZAorcmVteDMyNTAgcmVtYWluZGVyIC02MTY0MTEyMTI5OTM5MS4zMTY0MjA2NDcxMDI2OTk2MjdFKzc2MyAtOTE4OTY0Njk4NjMuNDYxMDA2OTAzNTkwMDA0MTg4MTg3RSs0NzQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjUwIHN1YnRyYWN0IC02MTY0MTEyMTI5OTM5MS4zMTY0MjA2NDcxMDI2OTk2MjdFKzc2MyAtOTE4OTY0Njk4NjMuNDYxMDA2OTAzNTkwMDA0MTg4MTg3RSs0NzQgLT4gLTYuMTY0MTEyMTI5OTM5MTMxNjQyMDY0NzEwMjY5OTYyN0UrNzc2IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNTEgYWRkIDk2NjY4NDE5ODAyNzQ5LjU1NTczODAxMDIzOTA4NzQ0OUUtODM4IC0xOTQ5ODczMjEzMTM2NTgyNDkyMTYzOTQ2NzA0NDkyN0UtNTQyIC0+IC0xLjk0OTg3MzIxMzEzNjU4MjQ5MjE2Mzk0NjcwNDQ5MjdFLTUxMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjUxIGNvbXBhcmUgOTY2Njg0MTk4MDI3NDkuNTU1NzM4MDEwMjM5MDg3NDQ5RS04MzggLTE5NDk4NzMyMTMxMzY1ODI0OTIxNjM5NDY3MDQ0OTI3RS01NDIgLT4gMQorZGl2eDMyNTEgZGl2aWRlIDk2NjY4NDE5ODAyNzQ5LjU1NTczODAxMDIzOTA4NzQ0OUUtODM4IC0xOTQ5ODczMjEzMTM2NTgyNDkyMTYzOTQ2NzA0NDkyN0UtNTQyIC0+IC00Ljk1NzY3NzIwNDQxOTI1MTQ3MTU0NTMyMTU5MzM3MDRFLTMxNCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjUxIGRpdmlkZWludCA5NjY2ODQxOTgwMjc0OS41NTU3MzgwMTAyMzkwODc0NDlFLTgzOCAtMTk0OTg3MzIxMzEzNjU4MjQ5MjE2Mzk0NjcwNDQ5MjdFLTU0MiAtPiAtMAorbXVseDMyNTEgbXVsdGlwbHkgOTY2Njg0MTk4MDI3NDkuNTU1NzM4MDEwMjM5MDg3NDQ5RS04MzggLTE5NDk4NzMyMTMxMzY1ODI0OTIxNjM5NDY3MDQ0OTI3RS01NDIgLT4gLTEuODg0OTExNjIzMjk2MjMzMTYxNzE0MDY3NjI3NDYxMUUtMTMzNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjUxIHBvd2VyIDk2NjY4NDE5ODAyNzQ5LjU1NTczODAxMDIzOTA4NzQ0OUUtODM4IC0yIC0+IDEuMDcwMTE1NzYyNTI2ODg5NjMyMzYxMTYzMzM1MDAwM0UrMTY0OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjUxIHJlbWFpbmRlciA5NjY2ODQxOTgwMjc0OS41NTU3MzgwMTAyMzkwODc0NDlFLTgzOCAtMTk0OTg3MzIxMzEzNjU4MjQ5MjE2Mzk0NjcwNDQ5MjdFLTU0MiAtPiA5LjY2Njg0MTk4MDI3NDk1NTU3MzgwMTAyMzkwODc0NDlFLTgyNQorc3VieDMyNTEgc3VidHJhY3QgOTY2Njg0MTk4MDI3NDkuNTU1NzM4MDEwMjM5MDg3NDQ5RS04MzggLTE5NDk4NzMyMTMxMzY1ODI0OTIxNjM5NDY3MDQ0OTI3RS01NDIgLT4gMS45NDk4NzMyMTMxMzY1ODI0OTIxNjM5NDY3MDQ0OTI3RS01MTEgSW5leGFjdCBSb3VuZGVkCithZGR4MzI1MiBhZGQgLTg1MzQ1NDM5MTExOTc5OTU5MDYwMzEyNDU3MTk1MTlFKzEyNCAxNjQ4NzExNzA1MDAzMS41OTQ4ODY1NDE2NTA4OTc5NzQgLT4gLTguNTM0NTQzOTExMTk3OTk1OTA2MDMxMjQ1NzE5NTE5MEUrMTU0IEluZXhhY3QgUm91bmRlZAorY29teDMyNTIgY29tcGFyZSAtODUzNDU0MzkxMTE5Nzk5NTkwNjAzMTI0NTcxOTUxOUUrMTI0IDE2NDg3MTE3MDUwMDMxLjU5NDg4NjU0MTY1MDg5Nzk3NCAtPiAtMQorZGl2eDMyNTIgZGl2aWRlIC04NTM0NTQzOTExMTk3OTk1OTA2MDMxMjQ1NzE5NTE5RSsxMjQgMTY0ODcxMTcwNTAwMzEuNTk0ODg2NTQxNjUwODk3OTc0IC0+IC01LjE3NjQ5MjU4MjIzODEwNjIyODc5NTk1MjMzNzEzMTZFKzE0MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjUyIGRpdmlkZWludCAtODUzNDU0MzkxMTE5Nzk5NTkwNjAzMTI0NTcxOTUxOUUrMTI0IDE2NDg3MTE3MDUwMDMxLjU5NDg4NjU0MTY1MDg5Nzk3NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyNTIgbXVsdGlwbHkgLTg1MzQ1NDM5MTExOTc5OTU5MDYwMzEyNDU3MTk1MTlFKzEyNCAxNjQ4NzExNzA1MDAzMS41OTQ4ODY1NDE2NTA4OTc5NzQgLT4gLTEuNDA3MTAwMjQ0MzI1NTU4MTIxNzQ3MTY5ODczMTI0MEUrMTY4IEluZXhhY3QgUm91bmRlZAorcG93eDMyNTIgcG93ZXIgLTg1MzQ1NDM5MTExOTc5OTU5MDYwMzEyNDU3MTk1MTlFKzEyNCAyIC0+IDcuMjgzODQzOTc3MjE2Njc4NTQyOTQ4Mjk5NTA0MTMzN0UrMzA5IEluZXhhY3QgUm91bmRlZAorcmVteDMyNTIgcmVtYWluZGVyIC04NTM0NTQzOTExMTk3OTk1OTA2MDMxMjQ1NzE5NTE5RSsxMjQgMTY0ODcxMTcwNTAwMzEuNTk0ODg2NTQxNjUwODk3OTc0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzI1MiBzdWJ0cmFjdCAtODUzNDU0MzkxMTE5Nzk5NTkwNjAzMTI0NTcxOTUxOUUrMTI0IDE2NDg3MTE3MDUwMDMxLjU5NDg4NjU0MTY1MDg5Nzk3NCAtPiAtOC41MzQ1NDM5MTExOTc5OTU5MDYwMzEyNDU3MTk1MTkwRSsxNTQgSW5leGFjdCBSb3VuZGVkCithZGR4MzI1MyBhZGQgLTYyNjYzNDA0Nzc3LjM1MjUwODk3OTU4Mjg0NjkzMTA1MCA5LjI1NzA5Mzg4MzcyMzkxMzQwNTI1ODkxODQ5MTcxODZFKzkxNiAtPiA5LjI1NzA5Mzg4MzcyMzkxMzQwNTI1ODkxODQ5MTcxODZFKzkxNiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjUzIGNvbXBhcmUgLTYyNjYzNDA0Nzc3LjM1MjUwODk3OTU4Mjg0NjkzMTA1MCA5LjI1NzA5Mzg4MzcyMzkxMzQwNTI1ODkxODQ5MTcxODZFKzkxNiAtPiAtMQorZGl2eDMyNTMgZGl2aWRlIC02MjY2MzQwNDc3Ny4zNTI1MDg5Nzk1ODI4NDY5MzEwNTAgOS4yNTcwOTM4ODM3MjM5MTM0MDUyNTg5MTg0OTE3MTg2RSs5MTYgLT4gLTYuNzY5MjMwNzcyMDM4NDE0MjU5MjU5NzEyNDk1Njk1MUUtOTA3IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNTMgZGl2aWRlaW50IC02MjY2MzQwNDc3Ny4zNTI1MDg5Nzk1ODI4NDY5MzEwNTAgOS4yNTcwOTM4ODM3MjM5MTM0MDUyNTg5MTg0OTE3MTg2RSs5MTYgLT4gLTAKK211bHgzMjUzIG11bHRpcGx5IC02MjY2MzQwNDc3Ny4zNTI1MDg5Nzk1ODI4NDY5MzEwNTAgOS4yNTcwOTM4ODM3MjM5MTM0MDUyNTg5MTg0OTE3MTg2RSs5MTYgLT4gLTUuODAwODEwMjEwOTc3NDU3NjY1NDcwOTAxODAxMjg3NkUrOTI3IEluZXhhY3QgUm91bmRlZAorcG93eDMyNTMgcG93ZXIgLTYyNjYzNDA0Nzc3LjM1MjUwODk3OTU4Mjg0NjkzMTA1MCA5IC0+IC0xLjQ4OTc5Mjg4MTQxMzMwNTk2MTU2NzA0NjI3NTM4MjVFKzk3IEluZXhhY3QgUm91bmRlZAorcmVteDMyNTMgcmVtYWluZGVyIC02MjY2MzQwNDc3Ny4zNTI1MDg5Nzk1ODI4NDY5MzEwNTAgOS4yNTcwOTM4ODM3MjM5MTM0MDUyNTg5MTg0OTE3MTg2RSs5MTYgLT4gLTYyNjYzNDA0Nzc3LjM1MjUwODk3OTU4Mjg0NjkzMTA1MAorc3VieDMyNTMgc3VidHJhY3QgLTYyNjYzNDA0Nzc3LjM1MjUwODk3OTU4Mjg0NjkzMTA1MCA5LjI1NzA5Mzg4MzcyMzkxMzQwNTI1ODkxODQ5MTcxODZFKzkxNiAtPiAtOS4yNTcwOTM4ODM3MjM5MTM0MDUyNTg5MTg0OTE3MTg2RSs5MTYgSW5leGFjdCBSb3VuZGVkCithZGR4MzI1NCBhZGQgMS43NDQ2MDEyMTQ0NzQ1NjA5OTI3NTQ1MjkzMjAxNzJFLTgyNyAtMTcuMzUzNjY5NTA0MjUzNDE5NDg5NDk0MDMwNjUxNTA3RS02MzEgLT4gLTEuNzM1MzY2OTUwNDI1MzQxOTQ4OTQ5NDAzMDY1MTUwN0UtNjMwIEluZXhhY3QgUm91bmRlZAorY29teDMyNTQgY29tcGFyZSAxLjc0NDYwMTIxNDQ3NDU2MDk5Mjc1NDUyOTMyMDE3MkUtODI3IC0xNy4zNTM2Njk1MDQyNTM0MTk0ODk0OTQwMzA2NTE1MDdFLTYzMSAtPiAxCitkaXZ4MzI1NCBkaXZpZGUgMS43NDQ2MDEyMTQ0NzQ1NjA5OTI3NTQ1MjkzMjAxNzJFLTgyNyAtMTcuMzUzNjY5NTA0MjUzNDE5NDg5NDk0MDMwNjUxNTA3RS02MzEgLT4gLTEuMDA1MzIxMjE2OTYwNDU2NTIzMDQ5NzExNzk2NjAwNEUtMTk3IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNTQgZGl2aWRlaW50IDEuNzQ0NjAxMjE0NDc0NTYwOTkyNzU0NTI5MzIwMTcyRS04MjcgLTE3LjM1MzY2OTUwNDI1MzQxOTQ4OTQ5NDAzMDY1MTUwN0UtNjMxIC0+IC0wCittdWx4MzI1NCBtdWx0aXBseSAxLjc0NDYwMTIxNDQ3NDU2MDk5Mjc1NDUyOTMyMDE3MkUtODI3IC0xNy4zNTM2Njk1MDQyNTM0MTk0ODk0OTQwMzA2NTE1MDdFLTYzMSAtPiAtMy4wMjc1MjMyODkyNzEwNjY4NDMyODk1MDQ5NTQ2MjMzRS0xNDU3IEluZXhhY3QgUm91bmRlZAorcG93eDMyNTQgcG93ZXIgMS43NDQ2MDEyMTQ0NzQ1NjA5OTI3NTQ1MjkzMjAxNzJFLTgyNyAtMiAtPiAzLjI4NTU0NjgwOTk2MTUyODIzOTQ5OTI1NDI1MTU5ODBFKzE2NTMgSW5leGFjdCBSb3VuZGVkCityZW14MzI1NCByZW1haW5kZXIgMS43NDQ2MDEyMTQ0NzQ1NjA5OTI3NTQ1MjkzMjAxNzJFLTgyNyAtMTcuMzUzNjY5NTA0MjUzNDE5NDg5NDk0MDMwNjUxNTA3RS02MzEgLT4gMS43NDQ2MDEyMTQ0NzQ1NjA5OTI3NTQ1MjkzMjAxNzJFLTgyNworc3VieDMyNTQgc3VidHJhY3QgMS43NDQ2MDEyMTQ0NzQ1NjA5OTI3NTQ1MjkzMjAxNzJFLTgyNyAtMTcuMzUzNjY5NTA0MjUzNDE5NDg5NDk0MDMwNjUxNTA3RS02MzEgLT4gMS43MzUzNjY5NTA0MjUzNDE5NDg5NDk0MDMwNjUxNTA3RS02MzAgSW5leGFjdCBSb3VuZGVkCithZGR4MzI1NSBhZGQgMDM2NzE5MTU0OTAzNjcwMjIyNDgyNzczNDg1MzQ3MSA0NDEwMzIwNjYyNDE1MjY2NTMzNzYzMTQzODM3NzQyRSs3MjEgLT4gNC40MTAzMjA2NjI0MTUyNjY1MzM3NjMxNDM4Mzc3NDIwRSs3NTEgSW5leGFjdCBSb3VuZGVkCitjb214MzI1NSBjb21wYXJlIDAzNjcxOTE1NDkwMzY3MDIyMjQ4Mjc3MzQ4NTM0NzEgNDQxMDMyMDY2MjQxNTI2NjUzMzc2MzE0MzgzNzc0MkUrNzIxIC0+IC0xCitkaXZ4MzI1NSBkaXZpZGUgMDM2NzE5MTU0OTAzNjcwMjIyNDgyNzczNDg1MzQ3MSA0NDEwMzIwNjYyNDE1MjY2NTMzNzYzMTQzODM3NzQyRSs3MjEgLT4gOC4zMjU3MzM1OTQ5NzIwNjE5MDkzOTYzOTE3OTQyNTI1RS03MjMgSW5leGFjdCBSb3VuZGVkCitkdml4MzI1NSBkaXZpZGVpbnQgMDM2NzE5MTU0OTAzNjcwMjIyNDgyNzczNDg1MzQ3MSA0NDEwMzIwNjYyNDE1MjY2NTMzNzYzMTQzODM3NzQyRSs3MjEgLT4gMAorbXVseDMyNTUgbXVsdGlwbHkgMDM2NzE5MTU0OTAzNjcwMjIyNDgyNzczNDg1MzQ3MSA0NDEwMzIwNjYyNDE1MjY2NTMzNzYzMTQzODM3NzQyRSs3MjEgLT4gMS42MTk0MzI0NzU3ODA4MzYzODAyOTQ3MTkyMDU0OTY2RSs3ODEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI1NSBwb3dlciAwMzY3MTkxNTQ5MDM2NzAyMjI0ODI3NzM0ODUzNDcxIDQgLT4gMS44MTc5MDMwMTE5MzU0MzE4MTgyNDkzNzAzMjY5MjU4RSsxMTggSW5leGFjdCBSb3VuZGVkCityZW14MzI1NSByZW1haW5kZXIgMDM2NzE5MTU0OTAzNjcwMjIyNDgyNzczNDg1MzQ3MSA0NDEwMzIwNjYyNDE1MjY2NTMzNzYzMTQzODM3NzQyRSs3MjEgLT4gMzY3MTkxNTQ5MDM2NzAyMjI0ODI3NzM0ODUzNDcxCitzdWJ4MzI1NSBzdWJ0cmFjdCAwMzY3MTkxNTQ5MDM2NzAyMjI0ODI3NzM0ODUzNDcxIDQ0MTAzMjA2NjI0MTUyNjY1MzM3NjMxNDM4Mzc3NDJFKzcyMSAtPiAtNC40MTAzMjA2NjI0MTUyNjY1MzM3NjMxNDM4Mzc3NDIwRSs3NTEgSW5leGFjdCBSb3VuZGVkCithZGR4MzI1NiBhZGQgMDk3NzA0MTE2LjQ0OTI1NjY3MjE5NjU3MTAzNjUwNzMgLTk2NzM2LjQwMDkzOTgwOTQzMzU1NjA2NzUwNDI4OTE0NSAtPiA5NzYwNzM4MC4wNDgzMTY4NjI3NjMwMTQ5NjkwMDMwMTEgSW5leGFjdCBSb3VuZGVkCitjb214MzI1NiBjb21wYXJlIDA5NzcwNDExNi40NDkyNTY2NzIxOTY1NzEwMzY1MDczIC05NjczNi40MDA5Mzk4MDk0MzM1NTYwNjc1MDQyODkxNDUgLT4gMQorZGl2eDMyNTYgZGl2aWRlIDA5NzcwNDExNi40NDkyNTY2NzIxOTY1NzEwMzY1MDczIC05NjczNi40MDA5Mzk4MDk0MzM1NTYwNjc1MDQyODkxNDUgLT4gLTEwMTAuMDAzNjMzNTg2MTc1NzI1MjMyNDU5MjU3MTg3NCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjU2IGRpdmlkZWludCAwOTc3MDQxMTYuNDQ5MjU2NjcyMTk2NTcxMDM2NTA3MyAtOTY3MzYuNDAwOTM5ODA5NDMzNTU2MDY3NTA0Mjg5MTQ1IC0+IC0xMDEwCittdWx4MzI1NiBtdWx0aXBseSAwOTc3MDQxMTYuNDQ5MjU2NjcyMTk2NTcxMDM2NTA3MyAtOTY3MzYuNDAwOTM5ODA5NDMzNTU2MDY3NTA0Mjg5MTQ1IC0+IC05NDUxNTQ0NTgyMzA1LjEyMzQ4MDU0ODM0NDk3NzIyNTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI1NiBwb3dlciAwOTc3MDQxMTYuNDQ5MjU2NjcyMTk2NTcxMDM2NTA3MyAtOTY3MzYgLT4gMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyNTYgcmVtYWluZGVyIDA5NzcwNDExNi40NDkyNTY2NzIxOTY1NzEwMzY1MDczIC05NjczNi40MDA5Mzk4MDk0MzM1NTYwNjc1MDQyODkxNDUgLT4gMzUxLjUwMDA0OTE0NDMwNDk0Mjg1NzE3NTI2MzU1MAorc3VieDMyNTYgc3VidHJhY3QgMDk3NzA0MTE2LjQ0OTI1NjY3MjE5NjU3MTAzNjUwNzMgLTk2NzM2LjQwMDkzOTgwOTQzMzU1NjA2NzUwNDI4OTE0NSAtPiA5NzgwMDg1Mi44NTAxOTY0ODE2MzAxMjcxMDQwMTE1ODkgSW5leGFjdCBSb3VuZGVkCithZGR4MzI1NyBhZGQgMTk1MzMyOTguMTQ3MTUwMTU4OTMxOTU4NzMzODA3ODc4IDgwLjE0MTY2ODMzODM1MDcwODQ3NjYzNzM3NzY0NzAyNUUtNjQxIC0+IDE5NTMzMjk4LjE0NzE1MDE1ODkzMTk1ODczMzgwNzg3OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjU3IGNvbXBhcmUgMTk1MzMyOTguMTQ3MTUwMTU4OTMxOTU4NzMzODA3ODc4IDgwLjE0MTY2ODMzODM1MDcwODQ3NjYzNzM3NzY0NzAyNUUtNjQxIC0+IDEKK2RpdngzMjU3IGRpdmlkZSAxOTUzMzI5OC4xNDcxNTAxNTg5MzE5NTg3MzM4MDc4NzggODAuMTQxNjY4MzM4MzUwNzA4NDc2NjM3Mzc3NjQ3MDI1RS02NDEgLT4gMi40MzczNDYwODM3NzI4NDg1Mzk1NjcyODgyMzk1MTcxRSs2NDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzI1NyBkaXZpZGVpbnQgMTk1MzMyOTguMTQ3MTUwMTU4OTMxOTU4NzMzODA3ODc4IDgwLjE0MTY2ODMzODM1MDcwODQ3NjYzNzM3NzY0NzAyNUUtNjQxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI1NyBtdWx0aXBseSAxOTUzMzI5OC4xNDcxNTAxNTg5MzE5NTg3MzM4MDc4NzggODAuMTQxNjY4MzM4MzUwNzA4NDc2NjM3Mzc3NjQ3MDI1RS02NDEgLT4gMS41NjU0MzExMDE2NjMwMjg0NTAyNDU5MTU4OTcxMjcyRS02MzIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI1NyBwb3dlciAxOTUzMzI5OC4xNDcxNTAxNTg5MzE5NTg3MzM4MDc4NzggOCAtPiAyLjExOTM1OTUwNDc2MzgyMzA0Mjc1MzAwNjM2NTQ2MTNFKzU4IEluZXhhY3QgUm91bmRlZAorcmVteDMyNTcgcmVtYWluZGVyIDE5NTMzMjk4LjE0NzE1MDE1ODkzMTk1ODczMzgwNzg3OCA4MC4xNDE2NjgzMzgzNTA3MDg0NzY2MzczNzc2NDcwMjVFLTY0MSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyNTcgc3VidHJhY3QgMTk1MzMyOTguMTQ3MTUwMTU4OTMxOTU4NzMzODA3ODc4IDgwLjE0MTY2ODMzODM1MDcwODQ3NjYzNzM3NzY0NzAyNUUtNjQxIC0+IDE5NTMzMjk4LjE0NzE1MDE1ODkzMTk1ODczMzgwNzg3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjU4IGFkZCAtMjM3NjUwMDMyMjEyMjAxNzc0MzA3OTcwMjg5OTczNzggLTE1MjAzMzY5NTY5LjM3MzQxMTUwNjM3OTA5Njg3MTIyNEUtOTQ1IC0+IC0yMzc2NTAwMzIyMTIyMDE3NzQzMDc5NzAyODk5NzM3OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjU4IGNvbXBhcmUgLTIzNzY1MDAzMjIxMjIwMTc3NDMwNzk3MDI4OTk3Mzc4IC0xNTIwMzM2OTU2OS4zNzM0MTE1MDYzNzkwOTY4NzEyMjRFLTk0NSAtPiAtMQorZGl2eDMyNTggZGl2aWRlIC0yMzc2NTAwMzIyMTIyMDE3NzQzMDc5NzAyODk5NzM3OCAtMTUyMDMzNjk1NjkuMzczNDExNTA2Mzc5MDk2ODcxMjI0RS05NDUgLT4gMS41NjMxNDA1MzM2MDIwOTMwMDY0ODI0MTM1NjY5NTQxRSs5NjYgSW5leGFjdCBSb3VuZGVkCitkdml4MzI1OCBkaXZpZGVpbnQgLTIzNzY1MDAzMjIxMjIwMTc3NDMwNzk3MDI4OTk3Mzc4IC0xNTIwMzM2OTU2OS4zNzM0MTE1MDYzNzkwOTY4NzEyMjRFLTk0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyNTggbXVsdGlwbHkgLTIzNzY1MDAzMjIxMjIwMTc3NDMwNzk3MDI4OTk3Mzc4IC0xNTIwMzM2OTU2OS4zNzM0MTE1MDYzNzkwOTY4NzEyMjRFLTk0NSAtPiAzLjYxMzA4MTI2Nzg5NTU5OTQ2MjUyMTAwMDcwMDUyMTZFLTkwNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjU4IHBvd2VyIC0yMzc2NTAwMzIyMTIyMDE3NzQzMDc5NzAyODk5NzM3OCAtMiAtPiAxLjc3MDYxNTQzMTg0ODM0ODExOTAzNjQ5NzkyMDk0MzZFLTYzIEluZXhhY3QgUm91bmRlZAorcmVteDMyNTggcmVtYWluZGVyIC0yMzc2NTAwMzIyMTIyMDE3NzQzMDc5NzAyODk5NzM3OCAtMTUyMDMzNjk1NjkuMzczNDExNTA2Mzc5MDk2ODcxMjI0RS05NDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjU4IHN1YnRyYWN0IC0yMzc2NTAwMzIyMTIyMDE3NzQzMDc5NzAyODk5NzM3OCAtMTUyMDMzNjk1NjkuMzczNDExNTA2Mzc5MDk2ODcxMjI0RS05NDUgLT4gLTIzNzY1MDAzMjIxMjIwMTc3NDMwNzk3MDI4OTk3Mzc4IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNTkgYWRkIDEyOTI1NS40MTkzNzkzMjQzMzM1OTE5MzMzODkxMDU1MkUrOTMyIC0yODEyNTM5NTMuMzg5OTAzODI3OTk1MDg4NzM1NjAzMjAgLT4gMS4yOTI1NTQxOTM3OTMyNDMzMzU5MTkzMzM4OTEwNTUyRSs5MzcgSW5leGFjdCBSb3VuZGVkCitjb214MzI1OSBjb21wYXJlIDEyOTI1NS40MTkzNzkzMjQzMzM1OTE5MzMzODkxMDU1MkUrOTMyIC0yODEyNTM5NTMuMzg5OTAzODI3OTk1MDg4NzM1NjAzMjAgLT4gMQorZGl2eDMyNTkgZGl2aWRlIDEyOTI1NS40MTkzNzkzMjQzMzM1OTE5MzMzODkxMDU1MkUrOTMyIC0yODEyNTM5NTMuMzg5OTAzODI3OTk1MDg4NzM1NjAzMjAgLT4gLTQuNTk1NjgzNjQ1MzgyODIxMzA1MDIyMzI2MDU1MTA2NEUrOTI4IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNTkgZGl2aWRlaW50IDEyOTI1NS40MTkzNzkzMjQzMzM1OTE5MzMzODkxMDU1MkUrOTMyIC0yODEyNTM5NTMuMzg5OTAzODI3OTk1MDg4NzM1NjAzMjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjU5IG11bHRpcGx5IDEyOTI1NS40MTkzNzkzMjQzMzM1OTE5MzMzODkxMDU1MkUrOTMyIC0yODEyNTM5NTMuMzg5OTAzODI3OTk1MDg4NzM1NjAzMjAgLT4gLTMuNjM1MzU5NzY5NzUwNDk1ODA5NjkzMTA4ODc4MDM2N0UrOTQ1IEluZXhhY3QgUm91bmRlZAorcG93eDMyNTkgcG93ZXIgMTI5MjU1LjQxOTM3OTMyNDMzMzU5MTkzMzM4OTEwNTUyRSs5MzIgLTI4MTI1Mzk1MyAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzI1OSByZW1haW5kZXIgMTI5MjU1LjQxOTM3OTMyNDMzMzU5MTkzMzM4OTEwNTUyRSs5MzIgLTI4MTI1Mzk1My4zODk5MDM4Mjc5OTUwODg3MzU2MDMyMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyNTkgc3VidHJhY3QgMTI5MjU1LjQxOTM3OTMyNDMzMzU5MTkzMzM4OTEwNTUyRSs5MzIgLTI4MTI1Mzk1My4zODk5MDM4Mjc5OTUwODg3MzU2MDMyMCAtPiAxLjI5MjU1NDE5Mzc5MzI0MzMzNTkxOTMzMzg5MTA1NTJFKzkzNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjYwIGFkZCAtODY4NjMuMjc2MjQ5NDY2MDA4Mjg5MjE0NzYyOTgwODM4IDUzMS41MDYwMjY1MjczMjA4ODIwODM5NzY1NTQ4NDQ3NiAtPiAtODYzMzEuNzcwMjIyOTM4Njg3NDA3MTMwNzg2NDI1OTkzIEluZXhhY3QgUm91bmRlZAorY29teDMyNjAgY29tcGFyZSAtODY4NjMuMjc2MjQ5NDY2MDA4Mjg5MjE0NzYyOTgwODM4IDUzMS41MDYwMjY1MjczMjA4ODIwODM5NzY1NTQ4NDQ3NiAtPiAtMQorZGl2eDMyNjAgZGl2aWRlIC04Njg2My4yNzYyNDk0NjYwMDgyODkyMTQ3NjI5ODA4MzggNTMxLjUwNjAyNjUyNzMyMDg4MjA4Mzk3NjU1NDg0NDc2IC0+IC0xNjMuNDI4NTgyMDE4MTU4OTE0MDg0NzU5MDIyMjk2NDkgSW5leGFjdCBSb3VuZGVkCitkdml4MzI2MCBkaXZpZGVpbnQgLTg2ODYzLjI3NjI0OTQ2NjAwODI4OTIxNDc2Mjk4MDgzOCA1MzEuNTA2MDI2NTI3MzIwODgyMDgzOTc2NTU0ODQ0NzYgLT4gLTE2MworbXVseDMyNjAgbXVsdGlwbHkgLTg2ODYzLjI3NjI0OTQ2NjAwODI4OTIxNDc2Mjk4MDgzOCA1MzEuNTA2MDI2NTI3MzIwODgyMDgzOTc2NTU0ODQ0NzYgLT4gLTQ2MTY4MzU0LjgxMDQ5ODY4MjE0MDQ1NjE0MzUzNDUyNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjYwIHBvd2VyIC04Njg2My4yNzYyNDk0NjYwMDgyODkyMTQ3NjI5ODA4MzggNTMyIC0+IDIuODg5NzU3OTE4NDE3MzgzOTUxOTg1OTcxMDIxNzUxMEUrMjYyNyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjYwIHJlbWFpbmRlciAtODY4NjMuMjc2MjQ5NDY2MDA4Mjg5MjE0NzYyOTgwODM4IDUzMS41MDYwMjY1MjczMjA4ODIwODM5NzY1NTQ4NDQ3NiAtPiAtMjI3Ljc5MzkyNTUxMjcwNDUwOTUyNjU4NDU0MTE0MjEyCitzdWJ4MzI2MCBzdWJ0cmFjdCAtODY4NjMuMjc2MjQ5NDY2MDA4Mjg5MjE0NzYyOTgwODM4IDUzMS41MDYwMjY1MjczMjA4ODIwODM5NzY1NTQ4NDQ3NiAtPiAtODczOTQuNzgyMjc1OTkzMzI5MTcxMjk4NzM5NTM1NjgzIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNjEgYWRkIC00MDcwNy4xNjkwMDY3NzExMTE4NTU1NzM1MjQxNTcwODMgLTY4Nzk1NTIxNDIxMzIxODUzMzMzMjc0NDExODI3NzQ5IC0+IC02ODc5NTUyMTQyMTMyMTg1MzMzMzI3NDQxMTg2ODQ1NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjYxIGNvbXBhcmUgLTQwNzA3LjE2OTAwNjc3MTExMTg1NTU3MzUyNDE1NzA4MyAtNjg3OTU1MjE0MjEzMjE4NTMzMzMyNzQ0MTE4Mjc3NDkgLT4gMQorZGl2eDMyNjEgZGl2aWRlIC00MDcwNy4xNjkwMDY3NzExMTE4NTU1NzM1MjQxNTcwODMgLTY4Nzk1NTIxNDIxMzIxODUzMzMzMjc0NDExODI3NzQ5IC0+IDUuOTE3MTI0ODYwMTMwMDIzNjY5NDM4NjE4NTUxMzEzOUUtMjggSW5leGFjdCBSb3VuZGVkCitkdml4MzI2MSBkaXZpZGVpbnQgLTQwNzA3LjE2OTAwNjc3MTExMTg1NTU3MzUyNDE1NzA4MyAtNjg3OTU1MjE0MjEzMjE4NTMzMzMyNzQ0MTE4Mjc3NDkgLT4gMAorbXVseDMyNjEgbXVsdGlwbHkgLTQwNzA3LjE2OTAwNjc3MTExMTg1NTU3MzUyNDE1NzA4MyAtNjg3OTU1MjE0MjEzMjE4NTMzMzMyNzQ0MTE4Mjc3NDkgLT4gMi44MDA0NzA5MTc0MDY2OTEwNTc3MzcwODk1NDk5NTc1RSszNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjYxIHBvd2VyIC00MDcwNy4xNjkwMDY3NzExMTE4NTU1NzM1MjQxNTcwODMgLTcgLT4gLTUuMzk4ODgwMjkxNTg5NzU5NTcyMjQ0MDM5Mjg4NDA1MUUtMzMgSW5leGFjdCBSb3VuZGVkCityZW14MzI2MSByZW1haW5kZXIgLTQwNzA3LjE2OTAwNjc3MTExMTg1NTU3MzUyNDE1NzA4MyAtNjg3OTU1MjE0MjEzMjE4NTMzMzMyNzQ0MTE4Mjc3NDkgLT4gLTQwNzA3LjE2OTAwNjc3MTExMTg1NTU3MzUyNDE1NzA4Mworc3VieDMyNjEgc3VidHJhY3QgLTQwNzA3LjE2OTAwNjc3MTExMTg1NTU3MzUyNDE1NzA4MyAtNjg3OTU1MjE0MjEzMjE4NTMzMzMyNzQ0MTE4Mjc3NDkgLT4gNjg3OTU1MjE0MjEzMjE4NTMzMzMyNzQ0MTE3ODcwNDIgSW5leGFjdCBSb3VuZGVkCithZGR4MzI2MiBhZGQgLTkwODM4NzUyNTY4NjczLjcyODYzMDQ5NDY1ODc3ODAwM0UrMDk1IC03MzguMDEzNzAzMDEyMTc2MDY1Nzc1MzMxMDc5ODE0MzEgLT4gLTkuMDgzODc1MjU2ODY3MzcyODYzMDQ5NDY1ODc3ODAwM0UrMTA4IEluZXhhY3QgUm91bmRlZAorY29teDMyNjIgY29tcGFyZSAtOTA4Mzg3NTI1Njg2NzMuNzI4NjMwNDk0NjU4Nzc4MDAzRSswOTUgLTczOC4wMTM3MDMwMTIxNzYwNjU3NzUzMzEwNzk4MTQzMSAtPiAtMQorZGl2eDMyNjIgZGl2aWRlIC05MDgzODc1MjU2ODY3My43Mjg2MzA0OTQ2NTg3NzgwMDNFKzA5NSAtNzM4LjAxMzcwMzAxMjE3NjA2NTc3NTMzMTA3OTgxNDMxIC0+IDEuMjMwODU0NTUxODU4ODQzMDg3NTI2ODU1Mzg1MTQyNEUrMTA2IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNjIgZGl2aWRlaW50IC05MDgzODc1MjU2ODY3My43Mjg2MzA0OTQ2NTg3NzgwMDNFKzA5NSAtNzM4LjAxMzcwMzAxMjE3NjA2NTc3NTMzMTA3OTgxNDMxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI2MiBtdWx0aXBseSAtOTA4Mzg3NTI1Njg2NzMuNzI4NjMwNDk0NjU4Nzc4MDAzRSswOTUgLTczOC4wMTM3MDMwMTIxNzYwNjU3NzUzMzEwNzk4MTQzMSAtPiA2LjcwNDAyNDQxNjAyMTM3MTg4OTE2MzM2NzgyNDgxMjdFKzExMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjYyIHBvd2VyIC05MDgzODc1MjU2ODY3My43Mjg2MzA0OTQ2NTg3NzgwMDNFKzA5NSAtNzM4IC0+IDBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjYyIHJlbWFpbmRlciAtOTA4Mzg3NTI1Njg2NzMuNzI4NjMwNDk0NjU4Nzc4MDAzRSswOTUgLTczOC4wMTM3MDMwMTIxNzYwNjU3NzUzMzEwNzk4MTQzMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyNjIgc3VidHJhY3QgLTkwODM4NzUyNTY4NjczLjcyODYzMDQ5NDY1ODc3ODAwM0UrMDk1IC03MzguMDEzNzAzMDEyMTc2MDY1Nzc1MzMxMDc5ODE0MzEgLT4gLTkuMDgzODc1MjU2ODY3MzcyODYzMDQ5NDY1ODc3ODAwM0UrMTA4IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNjMgYWRkIC00MjQ1MzYwOTY3NTkzLjkyMDY3NzE1NTU4Mzk3MTgxNThFLTY4MiAtMy4xMTk2MDYyMzkwNDI1MzAyMDcxMDMyMDM1MDgwNTcgLT4gLTMuMTE5NjA2MjM5MDQyNTMwMjA3MTAzMjAzNTA4MDU3MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjYzIGNvbXBhcmUgLTQyNDUzNjA5Njc1OTMuOTIwNjc3MTU1NTgzOTcxODE1OEUtNjgyIC0zLjExOTYwNjIzOTA0MjUzMDIwNzEwMzIwMzUwODA1NyAtPiAxCitkaXZ4MzI2MyBkaXZpZGUgLTQyNDUzNjA5Njc1OTMuOTIwNjc3MTU1NTgzOTcxODE1OEUtNjgyIC0zLjExOTYwNjIzOTA0MjUzMDIwNzEwMzIwMzUwODA1NyAtPiAxLjM2MDg2NDM2NjI5ODAwNjYzNTY0MzcyMzYwODE5NjlFLTY3MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjYzIGRpdmlkZWludCAtNDI0NTM2MDk2NzU5My45MjA2NzcxNTU1ODM5NzE4MTU4RS02ODIgLTMuMTE5NjA2MjM5MDQyNTMwMjA3MTAzMjAzNTA4MDU3IC0+IDAKK211bHgzMjYzIG11bHRpcGx5IC00MjQ1MzYwOTY3NTkzLjkyMDY3NzE1NTU4Mzk3MTgxNThFLTY4MiAtMy4xMTk2MDYyMzkwNDI1MzAyMDcxMDMyMDM1MDgwNTcgLT4gMS4zMjQzODU0NTYxNDkzNjI3ODQ0MTA1MjkwNDE1MzMwRS02NjkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI2MyBwb3dlciAtNDI0NTM2MDk2NzU5My45MjA2NzcxNTU1ODM5NzE4MTU4RS02ODIgLTMgLT4gLTEuMzA2OTQxNDUwNDkzMzI1MzI4ODA0MjgyMDQyOTg5NEUrMjAwOCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjYzIHJlbWFpbmRlciAtNDI0NTM2MDk2NzU5My45MjA2NzcxNTU1ODM5NzE4MTU4RS02ODIgLTMuMTE5NjA2MjM5MDQyNTMwMjA3MTAzMjAzNTA4MDU3IC0+IC00LjI0NTM2MDk2NzU5MzkyMDY3NzE1NTU4Mzk3MTgxNThFLTY3MAorc3VieDMyNjMgc3VidHJhY3QgLTQyNDUzNjA5Njc1OTMuOTIwNjc3MTU1NTgzOTcxODE1OEUtNjgyIC0zLjExOTYwNjIzOTA0MjUzMDIwNzEwMzIwMzUwODA1NyAtPiAzLjExOTYwNjIzOTA0MjUzMDIwNzEwMzIwMzUwODA1NzAgSW5leGFjdCBSb3VuZGVkCithZGR4MzI2NCBhZGQgLTM0MjIxNDU0MDU3NzQuMDgwMDIxMzAwMDU0NzYxMjI0MEUtMDIzIC02MDgxMC45NjQ2NTY0MDk2NTA4MzkwMTEzMjE3MDYzMTAgLT4gLTYwODEwLjk2NDY1NjQwOTY4NTA2MDQ2NTM3OTQ0NzExMCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjY0IGNvbXBhcmUgLTM0MjIxNDU0MDU3NzQuMDgwMDIxMzAwMDU0NzYxMjI0MEUtMDIzIC02MDgxMC45NjQ2NTY0MDk2NTA4MzkwMTEzMjE3MDYzMTAgLT4gMQorZGl2eDMyNjQgZGl2aWRlIC0zNDIyMTQ1NDA1Nzc0LjA4MDAyMTMwMDA1NDc2MTIyNDBFLTAyMyAtNjA4MTAuOTY0NjU2NDA5NjUwODM5MDExMzIxNzA2MzEwIC0+IDUuNjI3NTEzNzYzNTI4Nzg4Mjg3NTkxNDEyNDc0MjY1MEUtMTYgSW5leGFjdCBSb3VuZGVkCitkdml4MzI2NCBkaXZpZGVpbnQgLTM0MjIxNDU0MDU3NzQuMDgwMDIxMzAwMDU0NzYxMjI0MEUtMDIzIC02MDgxMC45NjQ2NTY0MDk2NTA4MzkwMTEzMjE3MDYzMTAgLT4gMAorbXVseDMyNjQgbXVsdGlwbHkgLTM0MjIxNDU0MDU3NzQuMDgwMDIxMzAwMDU0NzYxMjI0MEUtMDIzIC02MDgxMC45NjQ2NTY0MDk2NTA4MzkwMTEzMjE3MDYzMTAgLT4gMC4wMDAwMDIwODEwMzk2MzMxOTYyMjI0MzIzMjg4NzQ0OTEwNjA3IEluZXhhY3QgUm91bmRlZAorcG93eDMyNjQgcG93ZXIgLTM0MjIxNDU0MDU3NzQuMDgwMDIxMzAwMDU0NzYxMjI0MEUtMDIzIC02MDgxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzI2NCByZW1haW5kZXIgLTM0MjIxNDU0MDU3NzQuMDgwMDIxMzAwMDU0NzYxMjI0MEUtMDIzIC02MDgxMC45NjQ2NTY0MDk2NTA4MzkwMTEzMjE3MDYzMTAgLT4gLTMuNDIyMTQ1NDA1Nzc0MDgwMDIxMzAwMDU0NzYxMjI0MEUtMTEKK3N1YngzMjY0IHN1YnRyYWN0IC0zNDIyMTQ1NDA1Nzc0LjA4MDAyMTMwMDA1NDc2MTIyNDBFLTAyMyAtNjA4MTAuOTY0NjU2NDA5NjUwODM5MDExMzIxNzA2MzEwIC0+IDYwODEwLjk2NDY1NjQwOTYxNjYxNzU1NzI2Mzk2NTUxMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjY1IGFkZCAtMjQ1MjE4MTEuMDc2NDk0ODU3OTY1OTgzODc2Mjc0NzhFLTY2MSAtOTQ4NjA4NDYxMzM0MDQ4MTU0MTA4MTYyMzQwMDA2OTQgLT4gLTk0ODYwODQ2MTMzNDA0ODE1NDEwODE2MjM0MDAwNjk0IEluZXhhY3QgUm91bmRlZAorY29teDMyNjUgY29tcGFyZSAtMjQ1MjE4MTEuMDc2NDk0ODU3OTY1OTgzODc2Mjc0NzhFLTY2MSAtOTQ4NjA4NDYxMzM0MDQ4MTU0MTA4MTYyMzQwMDA2OTQgLT4gMQorZGl2eDMyNjUgZGl2aWRlIC0yNDUyMTgxMS4wNzY0OTQ4NTc5NjU5ODM4NzYyNzQ3OEUtNjYxIC05NDg2MDg0NjEzMzQwNDgxNTQxMDgxNjIzNDAwMDY5NCAtPiAyLjU4NTAyOTc2NDc1NzY2NTc4MTk0ODM5ODg4NDU5MDRFLTY4NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjY1IGRpdmlkZWludCAtMjQ1MjE4MTEuMDc2NDk0ODU3OTY1OTgzODc2Mjc0NzhFLTY2MSAtOTQ4NjA4NDYxMzM0MDQ4MTU0MTA4MTYyMzQwMDA2OTQgLT4gMAorbXVseDMyNjUgbXVsdGlwbHkgLTI0NTIxODExLjA3NjQ5NDg1Nzk2NTk4Mzg3NjI3NDc4RS02NjEgLTk0ODYwODQ2MTMzNDA0ODE1NDEwODE2MjM0MDAwNjk0IC0+IDIuMzI2MTU5NzQ3NDM5ODAwNjIxNTAxNzc1MTc4NTEwNEUtNjIyIEluZXhhY3QgUm91bmRlZAorcG93eDMyNjUgcG93ZXIgLTI0NTIxODExLjA3NjQ5NDg1Nzk2NTk4Mzg3NjI3NDc4RS02NjEgLTkgLT4gLTMuMTE5MDg0MzU1OTk0OTE4NDYxODU5MDI2NDI0NjU4NkUrNTg4MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjY1IHJlbWFpbmRlciAtMjQ1MjE4MTEuMDc2NDk0ODU3OTY1OTgzODc2Mjc0NzhFLTY2MSAtOTQ4NjA4NDYxMzM0MDQ4MTU0MTA4MTYyMzQwMDA2OTQgLT4gLTIuNDUyMTgxMTA3NjQ5NDg1Nzk2NTk4Mzg3NjI3NDc4RS02NTQKK3N1YngzMjY1IHN1YnRyYWN0IC0yNDUyMTgxMS4wNzY0OTQ4NTc5NjU5ODM4NzYyNzQ3OEUtNjYxIC05NDg2MDg0NjEzMzQwNDgxNTQxMDgxNjIzNDAwMDY5NCAtPiA5NDg2MDg0NjEzMzQwNDgxNTQxMDgxNjIzNDAwMDY5NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjY2IGFkZCAtNTA0MjUyOTkzNzQ5OC44OTQ0NDkyMjQ4NTM4OTUxNDM4IDM4OTE5MDQ2NzQuNDU0OTE3MDk2ODgwNzE0NTYxMjU0OSAtPiAtNTAzODYzODAzMjgyNC40Mzk1MzIxMjc5NzMxODA1ODI1IEluZXhhY3QgUm91bmRlZAorY29teDMyNjYgY29tcGFyZSAtNTA0MjUyOTkzNzQ5OC44OTQ0NDkyMjQ4NTM4OTUxNDM4IDM4OTE5MDQ2NzQuNDU0OTE3MDk2ODgwNzE0NTYxMjU0OSAtPiAtMQorZGl2eDMyNjYgZGl2aWRlIC01MDQyNTI5OTM3NDk4Ljg5NDQ0OTIyNDg1Mzg5NTE0MzggMzg5MTkwNDY3NC40NTQ5MTcwOTY4ODA3MTQ1NjEyNTQ5IC0+IC0xMjk1LjY0NTc5Nzk1NDk4OTQzNTEzNzgxMjc0MTMyODMgSW5leGFjdCBSb3VuZGVkCitkdml4MzI2NiBkaXZpZGVpbnQgLTUwNDI1Mjk5Mzc0OTguODk0NDQ5MjI0ODUzODk1MTQzOCAzODkxOTA0Njc0LjQ1NDkxNzA5Njg4MDcxNDU2MTI1NDkgLT4gLTEyOTUKK211bHgzMjY2IG11bHRpcGx5IC01MDQyNTI5OTM3NDk4Ljg5NDQ0OTIyNDg1Mzg5NTE0MzggMzg5MTkwNDY3NC40NTQ5MTcwOTY4ODA3MTQ1NjEyNTQ5IC0+IC0xOTYyNTA0NTgzNDgzMDgwODI1Njg3MS45NTI2NTkwNDggSW5leGFjdCBSb3VuZGVkCitwb3d4MzI2NiBwb3dlciAtNTA0MjUyOTkzNzQ5OC44OTQ0NDkyMjQ4NTM4OTUxNDM4IDQgLT4gNi40NjUzNzgyOTkxODAwMDA5NDkyNTgwMTgwOTYwODM5RSs1MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjY2IHJlbWFpbmRlciAtNTA0MjUyOTkzNzQ5OC44OTQ0NDkyMjQ4NTM4OTUxNDM4IDM4OTE5MDQ2NzQuNDU0OTE3MDk2ODgwNzE0NTYxMjU0OSAtPiAtMjUxMzM4NDA3OS43NzY4MDg3NjQzMjg1MzgzMTg3MDQ1CitzdWJ4MzI2NiBzdWJ0cmFjdCAtNTA0MjUyOTkzNzQ5OC44OTQ0NDkyMjQ4NTM4OTUxNDM4IDM4OTE5MDQ2NzQuNDU0OTE3MDk2ODgwNzE0NTYxMjU0OSAtPiAtNTA0NjQyMTg0MjE3My4zNDkzNjYzMjE3MzQ2MDk3MDUxIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNjcgYWRkIC01MzU4MjQxNjMuNTQ1MzE3NDc2NDYyOTM2OTM4Njg2NTFFLTY2NSAyNzMyOTg4LjU4OTEzNjM2MzkzMjUwMDgyMDYwOTk3MTIgLT4gMjczMjk4OC41ODkxMzYzNjM5MzI1MDA4MjA2MDk5NzEyIEluZXhhY3QgUm91bmRlZAorY29teDMyNjcgY29tcGFyZSAtNTM1ODI0MTYzLjU0NTMxNzQ3NjQ2MjkzNjkzODY4NjUxRS02NjUgMjczMjk4OC41ODkxMzYzNjM5MzI1MDA4MjA2MDk5NzEyIC0+IC0xCitkaXZ4MzI2NyBkaXZpZGUgLTUzNTgyNDE2My41NDUzMTc0NzY0NjI5MzY5Mzg2ODY1MUUtNjY1IDI3MzI5ODguNTg5MTM2MzYzOTMyNTAwODIwNjA5OTcxMiAtPiAtMS45NjA1Nzk1ODU1Njg3NzkxMjQ2NjExNjgzMzI4MzQ2RS02NjMgSW5leGFjdCBSb3VuZGVkCitkdml4MzI2NyBkaXZpZGVpbnQgLTUzNTgyNDE2My41NDUzMTc0NzY0NjI5MzY5Mzg2ODY1MUUtNjY1IDI3MzI5ODguNTg5MTM2MzYzOTMyNTAwODIwNjA5OTcxMiAtPiAtMAorbXVseDMyNjcgbXVsdGlwbHkgLTUzNTgyNDE2My41NDUzMTc0NzY0NjI5MzY5Mzg2ODY1MUUtNjY1IDI3MzI5ODguNTg5MTM2MzYzOTMyNTAwODIwNjA5OTcxMiAtPiAtMS40NjQ0MDEzMjQ3NTI4ODk1Mzc2MjU0ODUwNzA1NTk3RS02NTAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI2NyBwb3dlciAtNTM1ODI0MTYzLjU0NTMxNzQ3NjQ2MjkzNjkzODY4NjUxRS02NjUgMjczMjk4OSAtPiAtMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyNjcgcmVtYWluZGVyIC01MzU4MjQxNjMuNTQ1MzE3NDc2NDYyOTM2OTM4Njg2NTFFLTY2NSAyNzMyOTg4LjU4OTEzNjM2MzkzMjUwMDgyMDYwOTk3MTIgLT4gLTUuMzU4MjQxNjM1NDUzMTc0NzY0NjI5MzY5Mzg2ODY1MUUtNjU3CitzdWJ4MzI2NyBzdWJ0cmFjdCAtNTM1ODI0MTYzLjU0NTMxNzQ3NjQ2MjkzNjkzODY4NjUxRS02NjUgMjczMjk4OC41ODkxMzYzNjM5MzI1MDA4MjA2MDk5NzEyIC0+IC0yNzMyOTg4LjU4OTEzNjM2MzkzMjUwMDgyMDYwOTk3MTIgSW5leGFjdCBSb3VuZGVkCithZGR4MzI2OCBhZGQgMjQwMzIuNzAyMDA4NTUzMDg0MjUyOTI1MTQwODU4MTM0RS01MDkgNTI4NjQ4NTQuODk5NDIwNjMyMzc1NTg5MjA2NzA0MDY4IC0+IDUyODY0ODU0Ljg5OTQyMDYzMjM3NTU4OTIwNjcwNDA2OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjY4IGNvbXBhcmUgMjQwMzIuNzAyMDA4NTUzMDg0MjUyOTI1MTQwODU4MTM0RS01MDkgNTI4NjQ4NTQuODk5NDIwNjMyMzc1NTg5MjA2NzA0MDY4IC0+IC0xCitkaXZ4MzI2OCBkaXZpZGUgMjQwMzIuNzAyMDA4NTUzMDg0MjUyOTI1MTQwODU4MTM0RS01MDkgNTI4NjQ4NTQuODk5NDIwNjMyMzc1NTg5MjA2NzA0MDY4IC0+IDQuNTQ2MDY0MTIwMzQ1NTY5NzkxNzU3MzQzMTk2MTUxMUUtNTEzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyNjggZGl2aWRlaW50IDI0MDMyLjcwMjAwODU1MzA4NDI1MjkyNTE0MDg1ODEzNEUtNTA5IDUyODY0ODU0Ljg5OTQyMDYzMjM3NTU4OTIwNjcwNDA2OCAtPiAwCittdWx4MzI2OCBtdWx0aXBseSAyNDAzMi43MDIwMDg1NTMwODQyNTI5MjUxNDA4NTgxMzRFLTUwOSA1Mjg2NDg1NC44OTk0MjA2MzIzNzU1ODkyMDY3MDQwNjggLT4gMS4yNzA0ODUzMDQ1MjMxNzM1ODg1MDc0OTQ1NzEwNTc2RS00OTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI2OCBwb3dlciAyNDAzMi43MDIwMDg1NTMwODQyNTI5MjUxNDA4NTgxMzRFLTUwOSA1Mjg2NDg1NSAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzI2OCByZW1haW5kZXIgMjQwMzIuNzAyMDA4NTUzMDg0MjUyOTI1MTQwODU4MTM0RS01MDkgNTI4NjQ4NTQuODk5NDIwNjMyMzc1NTg5MjA2NzA0MDY4IC0+IDIuNDAzMjcwMjAwODU1MzA4NDI1MjkyNTE0MDg1ODEzNEUtNTA1CitzdWJ4MzI2OCBzdWJ0cmFjdCAyNDAzMi43MDIwMDg1NTMwODQyNTI5MjUxNDA4NTgxMzRFLTUwOSA1Mjg2NDg1NC44OTk0MjA2MzIzNzU1ODkyMDY3MDQwNjggLT4gLTUyODY0ODU0Ljg5OTQyMDYzMjM3NTU4OTIwNjcwNDA2OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjY5IGFkZCA3MTU1MzIyMDI1OS45Mzg5NTA2OTgwMzA1MTk5MDY3MjdFLTQ5NiA3NTQuNDQyMjA0MTc0MTUzMjU0NDQ5NDM1NjYwMTYwNjIgLT4gNzU0LjQ0MjIwNDE3NDE1MzI1NDQ0OTQzNTY2MDE2MDYyIEluZXhhY3QgUm91bmRlZAorY29teDMyNjkgY29tcGFyZSA3MTU1MzIyMDI1OS45Mzg5NTA2OTgwMzA1MTk5MDY3MjdFLTQ5NiA3NTQuNDQyMjA0MTc0MTUzMjU0NDQ5NDM1NjYwMTYwNjIgLT4gLTEKK2RpdngzMjY5IGRpdmlkZSA3MTU1MzIyMDI1OS45Mzg5NTA2OTgwMzA1MTk5MDY3MjdFLTQ5NiA3NTQuNDQyMjA0MTc0MTUzMjU0NDQ5NDM1NjYwMTYwNjIgLT4gOS40ODQyNTQ3MDY4NjE3ODc5Nzk0MjE4MDUwMDA4MzUzRS00ODkgSW5leGFjdCBSb3VuZGVkCitkdml4MzI2OSBkaXZpZGVpbnQgNzE1NTMyMjAyNTkuOTM4OTUwNjk4MDMwNTE5OTA2NzI3RS00OTYgNzU0LjQ0MjIwNDE3NDE1MzI1NDQ0OTQzNTY2MDE2MDYyIC0+IDAKK211bHgzMjY5IG11bHRpcGx5IDcxNTUzMjIwMjU5LjkzODk1MDY5ODAzMDUxOTkwNjcyN0UtNDk2IDc1NC40NDIyMDQxNzQxNTMyNTQ0NDk0MzU2NjAxNjA2MiAtPiA1LjM5ODI3NjkyMDg2NjcwMjEwNDQ2NzUxNDY3ODcyNDhFLTQ4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjY5IHBvd2VyIDcxNTUzMjIwMjU5LjkzODk1MDY5ODAzMDUxOTkwNjcyN0UtNDk2IDc1NCAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzI2OSByZW1haW5kZXIgNzE1NTMyMjAyNTkuOTM4OTUwNjk4MDMwNTE5OTA2NzI3RS00OTYgNzU0LjQ0MjIwNDE3NDE1MzI1NDQ0OTQzNTY2MDE2MDYyIC0+IDcuMTU1MzIyMDI1OTkzODk1MDY5ODAzMDUxOTkwNjcyN0UtNDg2CitzdWJ4MzI2OSBzdWJ0cmFjdCA3MTU1MzIyMDI1OS45Mzg5NTA2OTgwMzA1MTk5MDY3MjdFLTQ5NiA3NTQuNDQyMjA0MTc0MTUzMjU0NDQ5NDM1NjYwMTYwNjIgLT4gLTc1NC40NDIyMDQxNzQxNTMyNTQ0NDk0MzU2NjAxNjA2MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjcwIGFkZCAzNTU3Mi45NjAyODQ3OTU5NjI2OTc3NDA5NTM5MzI1MDggNTIwLjM5NTA2MzY0Njg3NTk0MDgyNzI1NzU0ODc4OTEwRS03MzEgLT4gMzU1NzIuOTYwMjg0Nzk1OTYyNjk3NzQwOTUzOTMyNTA4IEluZXhhY3QgUm91bmRlZAorY29teDMyNzAgY29tcGFyZSAzNTU3Mi45NjAyODQ3OTU5NjI2OTc3NDA5NTM5MzI1MDggNTIwLjM5NTA2MzY0Njg3NTk0MDgyNzI1NzU0ODc4OTEwRS03MzEgLT4gMQorZGl2eDMyNzAgZGl2aWRlIDM1NTcyLjk2MDI4NDc5NTk2MjY5Nzc0MDk1MzkzMjUwOCA1MjAuMzk1MDYzNjQ2ODc1OTQwODI3MjU3NTQ4Nzg5MTBFLTczMSAtPiA2LjgzNTc2MDUxNTM4Njk1NTY1MDQ4NjkwNjE0Njk4NTJFKzczMiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjcwIGRpdmlkZWludCAzNTU3Mi45NjAyODQ3OTU5NjI2OTc3NDA5NTM5MzI1MDggNTIwLjM5NTA2MzY0Njg3NTk0MDgyNzI1NzU0ODc4OTEwRS03MzEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjcwIG11bHRpcGx5IDM1NTcyLjk2MDI4NDc5NTk2MjY5Nzc0MDk1MzkzMjUwOCA1MjAuMzk1MDYzNjQ2ODc1OTQwODI3MjU3NTQ4Nzg5MTBFLTczMSAtPiAxLjg1MTE5OTI5MzE1MTQxODUxMDI0NzQ2MDk2ODYwNjZFLTcyNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjcwIHBvd2VyIDM1NTcyLjk2MDI4NDc5NTk2MjY5Nzc0MDk1MzkzMjUwOCA1IC0+IDU2OTYzOTQyMjQ3OTg1NDA0MzM3NDAxLjE0OTM1MzE2OSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjcwIHJlbWFpbmRlciAzNTU3Mi45NjAyODQ3OTU5NjI2OTc3NDA5NTM5MzI1MDggNTIwLjM5NTA2MzY0Njg3NTk0MDgyNzI1NzU0ODc4OTEwRS03MzEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjcwIHN1YnRyYWN0IDM1NTcyLjk2MDI4NDc5NTk2MjY5Nzc0MDk1MzkzMjUwOCA1MjAuMzk1MDYzNjQ2ODc1OTQwODI3MjU3NTQ4Nzg5MTBFLTczMSAtPiAzNTU3Mi45NjAyODQ3OTU5NjI2OTc3NDA5NTM5MzI1MDggSW5leGFjdCBSb3VuZGVkCithZGR4MzI3MSBhZGQgNTMwMzU0MDUwMTgxMjM3NjA1OTgzMzQ4OTU0MTMwNTdFKzgxOCAtOTU1ODQ2NDI0NzI0MC40NDc2NzkwMDQyOTExMzc5MTUxIC0+IDUuMzAzNTQwNTAxODEyMzc2MDU5ODMzNDg5NTQxMzA1N0UrODQ5IEluZXhhY3QgUm91bmRlZAorY29teDMyNzEgY29tcGFyZSA1MzAzNTQwNTAxODEyMzc2MDU5ODMzNDg5NTQxMzA1N0UrODE4IC05NTU4NDY0MjQ3MjQwLjQ0NzY3OTAwNDI5MTEzNzkxNTEgLT4gMQorZGl2eDMyNzEgZGl2aWRlIDUzMDM1NDA1MDE4MTIzNzYwNTk4MzM0ODk1NDEzMDU3RSs4MTggLTk1NTg0NjQyNDcyNDAuNDQ3Njc5MDA0MjkxMTM3OTE1MSAtPiAtNS41NDg1Mjc4NDM2MjY2ODAyNDcwMjAyNDg3MjMzMjg1RSs4MzYgSW5leGFjdCBSb3VuZGVkCitkdml4MzI3MSBkaXZpZGVpbnQgNTMwMzU0MDUwMTgxMjM3NjA1OTgzMzQ4OTU0MTMwNTdFKzgxOCAtOTU1ODQ2NDI0NzI0MC40NDc2NzkwMDQyOTExMzc5MTUxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI3MSBtdWx0aXBseSA1MzAzNTQwNTAxODEyMzc2MDU5ODMzNDg5NTQxMzA1N0UrODE4IC05NTU4NDY0MjQ3MjQwLjQ0NzY3OTAwNDI5MTEzNzkxNTEgLT4gLTUuMDY5MzcwMjI3MDM2NTI1OTI3NDIwMzE4MTg5NDYxM0UrODYyIEluZXhhY3QgUm91bmRlZAorcG93eDMyNzEgcG93ZXIgNTMwMzU0MDUwMTgxMjM3NjA1OTgzMzQ4OTU0MTMwNTdFKzgxOCAtMTAgLT4gNS42Nzk5MDUzOTM1NDI3MjY3OTQ0NDU1ODQ4MTM1NjE4RS04NDk4IEluZXhhY3QgUm91bmRlZAorcmVteDMyNzEgcmVtYWluZGVyIDUzMDM1NDA1MDE4MTIzNzYwNTk4MzM0ODk1NDEzMDU3RSs4MTggLTk1NTg0NjQyNDcyNDAuNDQ3Njc5MDA0MjkxMTM3OTE1MSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyNzEgc3VidHJhY3QgNTMwMzU0MDUwMTgxMjM3NjA1OTgzMzQ4OTU0MTMwNTdFKzgxOCAtOTU1ODQ2NDI0NzI0MC40NDc2NzkwMDQyOTExMzc5MTUxIC0+IDUuMzAzNTQwNTAxODEyMzc2MDU5ODMzNDg5NTQxMzA1N0UrODQ5IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNzIgYWRkIDk1LjQ5MDc1MTEyNzI0OTk0NTg4NjgyODI1NzMxMjExOCA5ODcuMDE0OTgzMTYzMDczNjU3MTQxNjc0MTA2OTAxOTJFKzEzMyAtPiA5Ljg3MDE0OTgzMTYzMDczNjU3MTQxNjc0MTA2OTAxOTJFKzEzNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjcyIGNvbXBhcmUgOTUuNDkwNzUxMTI3MjQ5OTQ1ODg2ODI4MjU3MzEyMTE4IDk4Ny4wMTQ5ODMxNjMwNzM2NTcxNDE2NzQxMDY5MDE5MkUrMTMzIC0+IC0xCitkaXZ4MzI3MiBkaXZpZGUgOTUuNDkwNzUxMTI3MjQ5OTQ1ODg2ODI4MjU3MzEyMTE4IDk4Ny4wMTQ5ODMxNjMwNzM2NTcxNDE2NzQxMDY5MDE5MkUrMTMzIC0+IDkuNjc0NzAxMjcxNjI5MzM0MTkyNzU2NjUxNTkxNTAxNkUtMTM1IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNzIgZGl2aWRlaW50IDk1LjQ5MDc1MTEyNzI0OTk0NTg4NjgyODI1NzMxMjExOCA5ODcuMDE0OTgzMTYzMDczNjU3MTQxNjc0MTA2OTAxOTJFKzEzMyAtPiAwCittdWx4MzI3MiBtdWx0aXBseSA5NS40OTA3NTExMjcyNDk5NDU4ODY4MjgyNTczMTIxMTggOTg3LjAxNDk4MzE2MzA3MzY1NzE0MTY3NDEwNjkwMTkyRSsxMzMgLT4gOS40MjUwODAyMTE2MDkxODYyMTg1NzY0ODAwMjI3MDA0RSsxMzcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI3MiBwb3dlciA5NS40OTA3NTExMjcyNDk5NDU4ODY4MjgyNTczMTIxMTggMTAgLT4gNjMwMzk1NDg2NDYxODY4NjQxNjIuODQ3NDkxNTM0MzM3IEluZXhhY3QgUm91bmRlZAorcmVteDMyNzIgcmVtYWluZGVyIDk1LjQ5MDc1MTEyNzI0OTk0NTg4NjgyODI1NzMxMjExOCA5ODcuMDE0OTgzMTYzMDczNjU3MTQxNjc0MTA2OTAxOTJFKzEzMyAtPiA5NS40OTA3NTExMjcyNDk5NDU4ODY4MjgyNTczMTIxMTgKK3N1YngzMjcyIHN1YnRyYWN0IDk1LjQ5MDc1MTEyNzI0OTk0NTg4NjgyODI1NzMxMjExOCA5ODcuMDE0OTgzMTYzMDczNjU3MTQxNjc0MTA2OTAxOTJFKzEzMyAtPiAtOS44NzAxNDk4MzE2MzA3MzY1NzE0MTY3NDEwNjkwMTkyRSsxMzUgSW5leGFjdCBSb3VuZGVkCithZGR4MzI3MyBhZGQgNjk0MzQ4NTAyODcuNDYwNzg4NTUwOTM2NzMwMjk2MTUzIC0zNTExOTEzNjU0OTAxNTA0NDI0MTU2OTgyNzU0MjI2NCAtPiAtMzUxMTkxMzY1NDkwMTUwNDQyNDE1MDAzOTI2OTE5NzcgSW5leGFjdCBSb3VuZGVkCitjb214MzI3MyBjb21wYXJlIDY5NDM0ODUwMjg3LjQ2MDc4ODU1MDkzNjczMDI5NjE1MyAtMzUxMTkxMzY1NDkwMTUwNDQyNDE1Njk4Mjc1NDIyNjQgLT4gMQorZGl2eDMyNzMgZGl2aWRlIDY5NDM0ODUwMjg3LjQ2MDc4ODU1MDkzNjczMDI5NjE1MyAtMzUxMTkxMzY1NDkwMTUwNDQyNDE1Njk4Mjc1NDIyNjQgLT4gLTEuOTc3MTIyOTMzODMyNzI3MzY0NDEyOTM5NDczNDI5OUUtMjEgSW5leGFjdCBSb3VuZGVkCitkdml4MzI3MyBkaXZpZGVpbnQgNjk0MzQ4NTAyODcuNDYwNzg4NTUwOTM2NzMwMjk2MTUzIC0zNTExOTEzNjU0OTAxNTA0NDI0MTU2OTgyNzU0MjI2NCAtPiAtMAorbXVseDMyNzMgbXVsdGlwbHkgNjk0MzQ4NTAyODcuNDYwNzg4NTUwOTM2NzMwMjk2MTUzIC0zNTExOTEzNjU0OTAxNTA0NDI0MTU2OTgyNzU0MjI2NCAtPiAtMi40Mzg0OTE5ODg1MDU3NTE5MzAyNjQ2NTIyNDI1OTgwRSs0MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjczIHBvd2VyIDY5NDM0ODUwMjg3LjQ2MDc4ODU1MDkzNjczMDI5NjE1MyAtNCAtPiA0LjMwMjE5Mzk2MDU4NDIwMzg5OTUzNzA0NDM3NDM4NDRFLTQ0IEluZXhhY3QgUm91bmRlZAorcmVteDMyNzMgcmVtYWluZGVyIDY5NDM0ODUwMjg3LjQ2MDc4ODU1MDkzNjczMDI5NjE1MyAtMzUxMTkxMzY1NDkwMTUwNDQyNDE1Njk4Mjc1NDIyNjQgLT4gNjk0MzQ4NTAyODcuNDYwNzg4NTUwOTM2NzMwMjk2MTUzCitzdWJ4MzI3MyBzdWJ0cmFjdCA2OTQzNDg1MDI4Ny40NjA3ODg1NTA5MzY3MzAyOTYxNTMgLTM1MTE5MTM2NTQ5MDE1MDQ0MjQxNTY5ODI3NTQyMjY0IC0+IDM1MTE5MTM2NTQ5MDE1MDQ0MjQxNjM5MjYyMzkyNTUxIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNzQgYWRkIC0zOTIuMjI3Mzk5MjQ2MjE5NjU2MjE3MzkwOTg3MjU0MDcgLTY1NTUxMjc0Ljk4NzE2MDk5ODE5NTI4MjEwOTYxMjEzNiAtPiAtNjU1NTE2NjcuMjE0NTYwMjQ0NDE0OTM4MzI3MDAzMTIzIEluZXhhY3QgUm91bmRlZAorY29teDMyNzQgY29tcGFyZSAtMzkyLjIyNzM5OTI0NjIxOTY1NjIxNzM5MDk4NzI1NDA3IC02NTU1MTI3NC45ODcxNjA5OTgxOTUyODIxMDk2MTIxMzYgLT4gMQorZGl2eDMyNzQgZGl2aWRlIC0zOTIuMjI3Mzk5MjQ2MjE5NjU2MjE3MzkwOTg3MjU0MDcgLTY1NTUxMjc0Ljk4NzE2MDk5ODE5NTI4MjEwOTYxMjEzNiAtPiAwLjAwMDAwNTk4MzUyMDUyMzc4OTA4MDk0NDk2ODQzMTcyNDUwMzMgSW5leGFjdCBSb3VuZGVkCitkdml4MzI3NCBkaXZpZGVpbnQgLTM5Mi4yMjczOTkyNDYyMTk2NTYyMTczOTA5ODcyNTQwNyAtNjU1NTEyNzQuOTg3MTYwOTk4MTk1MjgyMTA5NjEyMTM2IC0+IDAKK211bHgzMjc0IG11bHRpcGx5IC0zOTIuMjI3Mzk5MjQ2MjE5NjU2MjE3MzkwOTg3MjU0MDcgLTY1NTUxMjc0Ljk4NzE2MDk5ODE5NTI4MjEwOTYxMjEzNiAtPiAyNTcxMTAwNjEwNS40ODc5MjkxMDgzMjk2Mzc3MDE4ODIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI3NCBwb3dlciAtMzkyLjIyNzM5OTI0NjIxOTY1NjIxNzM5MDk4NzI1NDA3IC02NTU1MTI3NSAtPiAtMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyNzQgcmVtYWluZGVyIC0zOTIuMjI3Mzk5MjQ2MjE5NjU2MjE3MzkwOTg3MjU0MDcgLTY1NTUxMjc0Ljk4NzE2MDk5ODE5NTI4MjEwOTYxMjEzNiAtPiAtMzkyLjIyNzM5OTI0NjIxOTY1NjIxNzM5MDk4NzI1NDA3CitzdWJ4MzI3NCBzdWJ0cmFjdCAtMzkyLjIyNzM5OTI0NjIxOTY1NjIxNzM5MDk4NzI1NDA3IC02NTU1MTI3NC45ODcxNjA5OTgxOTUyODIxMDk2MTIxMzYgLT4gNjU1NTA4ODIuNzU5NzYxNzUxOTc1NjI1ODkyMjIxMTQ5IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNzUgYWRkIDY0MTMyNjUuNDQyMzU2MTE5MTc5Mjk3MjA4NTUzOTQ1NyAyNDUxNC4yMjI3MDQ3MTQxMzkzNTAwMjYxNjU3MjExNDYgLT4gNjQzNzc3OS42NjUwNjA4MzMzMTg2NDcyMzQ3MTk2NjY4IEluZXhhY3QgUm91bmRlZAorY29teDMyNzUgY29tcGFyZSA2NDEzMjY1LjQ0MjM1NjExOTE3OTI5NzIwODU1Mzk0NTcgMjQ1MTQuMjIyNzA0NzE0MTM5MzUwMDI2MTY1NzIxMTQ2IC0+IDEKK2RpdngzMjc1IGRpdmlkZSA2NDEzMjY1LjQ0MjM1NjExOTE3OTI5NzIwODU1Mzk0NTcgMjQ1MTQuMjIyNzA0NzE0MTM5MzUwMDI2MTY1NzIxMTQ2IC0+IDI2MS42MTQwNjQ2MDI3MDI0MTQ5ODc1Nzg2ODY4MTg4MyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjc1IGRpdmlkZWludCA2NDEzMjY1LjQ0MjM1NjExOTE3OTI5NzIwODU1Mzk0NTcgMjQ1MTQuMjIyNzA0NzE0MTM5MzUwMDI2MTY1NzIxMTQ2IC0+IDI2MQorbXVseDMyNzUgbXVsdGlwbHkgNjQxMzI2NS40NDIzNTYxMTkxNzkyOTcyMDg1NTM5NDU3IDI0NTE0LjIyMjcwNDcxNDEzOTM1MDAyNjE2NTcyMTE0NiAtPiAxNTcyMTYyMTczMTguMzY0OTQ1MjUzMDA2OTQ1ODMxMzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzI3NSBwb3dlciA2NDEzMjY1LjQ0MjM1NjExOTE3OTI5NzIwODU1Mzk0NTcgMjQ1MTQgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzI3NSByZW1haW5kZXIgNjQxMzI2NS40NDIzNTYxMTkxNzkyOTcyMDg1NTM5NDU3IDI0NTE0LjIyMjcwNDcxNDEzOTM1MDAyNjE2NTcyMTE0NiAtPiAxNTA1My4zMTY0MjU3Mjg4MDg5NDAzNzkzMDA3MjY1OTQKK3N1YngzMjc1IHN1YnRyYWN0IDY0MTMyNjUuNDQyMzU2MTE5MTc5Mjk3MjA4NTUzOTQ1NyAyNDUxNC4yMjI3MDQ3MTQxMzkzNTAwMjYxNjU3MjExNDYgLT4gNjM4ODc1MS4yMTk2NTE0MDUwMzk5NDcxODIzODgyMjQ2IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNzYgYWRkIC02Ljk2Njc3MDYzODkxMjIxMDc3NjAwNDYxODQwNjQwNTdFKzQ4NyAzMi40MDU4MTA3MDM5NzE1MzgyNzg0MTk2MjU1MjcyMzQgLT4gLTYuOTY2NzcwNjM4OTEyMjEwNzc2MDA0NjE4NDA2NDA1N0UrNDg3IEluZXhhY3QgUm91bmRlZAorY29teDMyNzYgY29tcGFyZSAtNi45NjY3NzA2Mzg5MTIyMTA3NzYwMDQ2MTg0MDY0MDU3RSs0ODcgMzIuNDA1ODEwNzAzOTcxNTM4Mjc4NDE5NjI1NTI3MjM0IC0+IC0xCitkaXZ4MzI3NiBkaXZpZGUgLTYuOTY2NzcwNjM4OTEyMjEwNzc2MDA0NjE4NDA2NDA1N0UrNDg3IDMyLjQwNTgxMDcwMzk3MTUzODI3ODQxOTYyNTUyNzIzNCAtPiAtMi4xNDk4NTIyOTExNjg5OTk3MzQxMzQ3MjkzNDE5NzYxRSs0ODYgSW5leGFjdCBSb3VuZGVkCitkdml4MzI3NiBkaXZpZGVpbnQgLTYuOTY2NzcwNjM4OTEyMjEwNzc2MDA0NjE4NDA2NDA1N0UrNDg3IDMyLjQwNTgxMDcwMzk3MTUzODI3ODQxOTYyNTUyNzIzNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyNzYgbXVsdGlwbHkgLTYuOTY2NzcwNjM4OTEyMjEwNzc2MDA0NjE4NDA2NDA1N0UrNDg3IDMyLjQwNTgxMDcwMzk3MTUzODI3ODQxOTYyNTUyNzIzNCAtPiAtMi4yNTc2Mzg1MDU0MjU3NTk1MjU5NTExNTU2MjU4NDcwRSs0ODkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI3NiBwb3dlciAtNi45NjY3NzA2Mzg5MTIyMTA3NzYwMDQ2MTg0MDY0MDU3RSs0ODcgMzIgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzI3NiByZW1haW5kZXIgLTYuOTY2NzcwNjM4OTEyMjEwNzc2MDA0NjE4NDA2NDA1N0UrNDg3IDMyLjQwNTgxMDcwMzk3MTUzODI3ODQxOTYyNTUyNzIzNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyNzYgc3VidHJhY3QgLTYuOTY2NzcwNjM4OTEyMjEwNzc2MDA0NjE4NDA2NDA1N0UrNDg3IDMyLjQwNTgxMDcwMzk3MTUzODI3ODQxOTYyNTUyNzIzNCAtPiAtNi45NjY3NzA2Mzg5MTIyMTA3NzYwMDQ2MTg0MDY0MDU3RSs0ODcgSW5leGFjdCBSb3VuZGVkCithZGR4MzI3NyBhZGQgMzc4MjA0NzE2NjMzLjQwMDI0MTAwNjAyODk2MDU3NjE1IC0wMzAwMjE4NzE0Mzc4LjMyMjIzMTI2OTYwNjIxNjUxNiAtPiA3Nzk4NjAwMjI1NS4wNzgwMDk3MzY0MjI3NDQwNjAxNQorY29teDMyNzcgY29tcGFyZSAzNzgyMDQ3MTY2MzMuNDAwMjQxMDA2MDI4OTYwNTc2MTUgLTAzMDAyMTg3MTQzNzguMzIyMjMxMjY5NjA2MjE2NTE2IC0+IDEKK2RpdngzMjc3IGRpdmlkZSAzNzgyMDQ3MTY2MzMuNDAwMjQxMDA2MDI4OTYwNTc2MTUgLTAzMDAyMTg3MTQzNzguMzIyMjMxMjY5NjA2MjE2NTE2IC0+IC0xLjI1OTc2Mzk2MDQ3MzE3NTMyODQ1OTk3NDg4MjA4NzYgSW5leGFjdCBSb3VuZGVkCitkdml4MzI3NyBkaXZpZGVpbnQgMzc4MjA0NzE2NjMzLjQwMDI0MTAwNjAyODk2MDU3NjE1IC0wMzAwMjE4NzE0Mzc4LjMyMjIzMTI2OTYwNjIxNjUxNiAtPiAtMQorbXVseDMyNzcgbXVsdGlwbHkgMzc4MjA0NzE2NjMzLjQwMDI0MTAwNjAyODk2MDU3NjE1IC0wMzAwMjE4NzE0Mzc4LjMyMjIzMTI2OTYwNjIxNjUxNiAtPiAtMTEzNTQ0MTMzNzk5NDk3MDgyMDc1NTU3LjIxMTgwNDMwIEluZXhhY3QgUm91bmRlZAorcG93eDMyNzcgcG93ZXIgMzc4MjA0NzE2NjMzLjQwMDI0MTAwNjAyODk2MDU3NjE1IC0zIC0+IDEuODQ4NDk4ODIxMjQwMTg4Njg4NzU2Mjc3OTk5NjczN0UtMzUgSW5leGFjdCBSb3VuZGVkCityZW14MzI3NyByZW1haW5kZXIgMzc4MjA0NzE2NjMzLjQwMDI0MTAwNjAyODk2MDU3NjE1IC0wMzAwMjE4NzE0Mzc4LjMyMjIzMTI2OTYwNjIxNjUxNiAtPiA3Nzk4NjAwMjI1NS4wNzgwMDk3MzY0MjI3NDQwNjAxNQorc3VieDMyNzcgc3VidHJhY3QgMzc4MjA0NzE2NjMzLjQwMDI0MTAwNjAyODk2MDU3NjE1IC0wMzAwMjE4NzE0Mzc4LjMyMjIzMTI2OTYwNjIxNjUxNiAtPiA2Nzg0MjM0MzEwMTEuNzIyNDcyMjc1NjM1MTc3MDkyMTUKK2FkZHgzMjc4IGFkZCAtNDQyMzQuNTEyMDEyNDU3MTQ4MDI3Njg1MjgyOTY5MjM1RSs1MDEgMjEzMjU3Mi40NTcxOTg3OTA4Mzc1MDAyMTAwODk0OTI3IC0+IC00LjQyMzQ1MTIwMTI0NTcxNDgwMjc2ODUyODI5NjkyMzVFKzUwNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjc4IGNvbXBhcmUgLTQ0MjM0LjUxMjAxMjQ1NzE0ODAyNzY4NTI4Mjk2OTIzNUUrNTAxIDIxMzI1NzIuNDU3MTk4NzkwODM3NTAwMjEwMDg5NDkyNyAtPiAtMQorZGl2eDMyNzggZGl2aWRlIC00NDIzNC41MTIwMTI0NTcxNDgwMjc2ODUyODI5NjkyMzVFKzUwMSAyMTMyNTcyLjQ1NzE5ODc5MDgzNzUwMDIxMDA4OTQ5MjcgLT4gLTIuMDc0MjMyNTQ3NzkxNjM0NzE5MzE4MTYwMzk2MzI1N0UrNDk5IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNzggZGl2aWRlaW50IC00NDIzNC41MTIwMTI0NTcxNDgwMjc2ODUyODI5NjkyMzVFKzUwMSAyMTMyNTcyLjQ1NzE5ODc5MDgzNzUwMDIxMDA4OTQ5MjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjc4IG11bHRpcGx5IC00NDIzNC41MTIwMTI0NTcxNDgwMjc2ODUyODI5NjkyMzVFKzUwMSAyMTMyNTcyLjQ1NzE5ODc5MDgzNzUwMDIxMDA4OTQ5MjcgLT4gLTkuNDMzMzMwMTk3NTM5NTE3MDQ2NTk4Mjk2ODAxOTkxNUUrNTExIEluZXhhY3QgUm91bmRlZAorcG93eDMyNzggcG93ZXIgLTQ0MjM0LjUxMjAxMjQ1NzE0ODAyNzY4NTI4Mjk2OTIzNUUrNTAxIDIxMzI1NzIgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzI3OCByZW1haW5kZXIgLTQ0MjM0LjUxMjAxMjQ1NzE0ODAyNzY4NTI4Mjk2OTIzNUUrNTAxIDIxMzI1NzIuNDU3MTk4NzkwODM3NTAwMjEwMDg5NDkyNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyNzggc3VidHJhY3QgLTQ0MjM0LjUxMjAxMjQ1NzE0ODAyNzY4NTI4Mjk2OTIzNUUrNTAxIDIxMzI1NzIuNDU3MTk4NzkwODM3NTAwMjEwMDg5NDkyNyAtPiAtNC40MjM0NTEyMDEyNDU3MTQ4MDI3Njg1MjgyOTY5MjM1RSs1MDUgSW5leGFjdCBSb3VuZGVkCithZGR4MzI3OSBhZGQgLTM1NTQuNTg5NTk3NDk2ODc0MTQ2NTY1NDAyMjc3MjEwMEUtMDczIDk3NTIuMDQyODc0NjcyMjQ5NzYyMTkzNjk5ODUzMzg0OEUrNTE2IC0+IDkuNzUyMDQyODc0NjcyMjQ5NzYyMTkzNjk5ODUzMzg0OEUrNTE5IEluZXhhY3QgUm91bmRlZAorY29teDMyNzkgY29tcGFyZSAtMzU1NC41ODk1OTc0OTY4NzQxNDY1NjU0MDIyNzcyMTAwRS0wNzMgOTc1Mi4wNDI4NzQ2NzIyNDk3NjIxOTM2OTk4NTMzODQ4RSs1MTYgLT4gLTEKK2RpdngzMjc5IGRpdmlkZSAtMzU1NC41ODk1OTc0OTY4NzQxNDY1NjU0MDIyNzcyMTAwRS0wNzMgOTc1Mi4wNDI4NzQ2NzIyNDk3NjIxOTM2OTk4NTMzODQ4RSs1MTYgLT4gLTMuNjQ0OTY5MjA2MTIyNzEwMDU3Mjc2ODMzMDkxMjE2MkUtNTkwIEluZXhhY3QgUm91bmRlZAorZHZpeDMyNzkgZGl2aWRlaW50IC0zNTU0LjU4OTU5NzQ5Njg3NDE0NjU2NTQwMjI3NzIxMDBFLTA3MyA5NzUyLjA0Mjg3NDY3MjI0OTc2MjE5MzY5OTg1MzM4NDhFKzUxNiAtPiAtMAorbXVseDMyNzkgbXVsdGlwbHkgLTM1NTQuNTg5NTk3NDk2ODc0MTQ2NTY1NDAyMjc3MjEwMEUtMDczIDk3NTIuMDQyODc0NjcyMjQ5NzYyMTkzNjk5ODUzMzg0OEUrNTE2IC0+IC0zLjQ2NjQ1MTAxNTY2NTM0OTE3Njk5MDE0MzU3NzcwNjBFKzQ1MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjc5IHBvd2VyIC0zNTU0LjU4OTU5NzQ5Njg3NDE0NjU2NTQwMjI3NzIxMDBFLTA3MyAxMCAtPiAzLjIyMDI4NzU3MTYwMTkyNjY5MzMyMTUzODc0NTYxOTdFLTY5NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjc5IHJlbWFpbmRlciAtMzU1NC41ODk1OTc0OTY4NzQxNDY1NjU0MDIyNzcyMTAwRS0wNzMgOTc1Mi4wNDI4NzQ2NzIyNDk3NjIxOTM2OTk4NTMzODQ4RSs1MTYgLT4gLTMuNTU0NTg5NTk3NDk2ODc0MTQ2NTY1NDAyMjc3MjEwMEUtNzAKK3N1YngzMjc5IHN1YnRyYWN0IC0zNTU0LjU4OTU5NzQ5Njg3NDE0NjU2NTQwMjI3NzIxMDBFLTA3MyA5NzUyLjA0Mjg3NDY3MjI0OTc2MjE5MzY5OTg1MzM4NDhFKzUxNiAtPiAtOS43NTIwNDI4NzQ2NzIyNDk3NjIxOTM2OTk4NTMzODQ4RSs1MTkgSW5leGFjdCBSb3VuZGVkCithZGR4MzI4MCBhZGQgNzUwMTg3Njg1LjYzNjMyNjA4OTIzMzk3MjM0MzkxNjY4IDQ2MzMxOTQyNTI4NjMuNjczMDYyNTk3MjY2OTI0NjAyNSAtPiA0NjMzOTQ0NDQwNTQ5LjMwOTM4ODY4NjUwMDg5Njk0NjQgSW5leGFjdCBSb3VuZGVkCitjb214MzI4MCBjb21wYXJlIDc1MDE4NzY4NS42MzYzMjYwODkyMzM5NzIzNDM5MTY2OCA0NjMzMTk0MjUyODYzLjY3MzA2MjU5NzI2NjkyNDYwMjUgLT4gLTEKK2RpdngzMjgwIGRpdmlkZSA3NTAxODc2ODUuNjM2MzI2MDg5MjMzOTcyMzQzOTE2NjggNDYzMzE5NDI1Mjg2My42NzMwNjI1OTcyNjY5MjQ2MDI1IC0+IDAuMDAwMTYxOTE1ODcxNTc2NjQ1NDE0NjM4NzE4MDczODI3NTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzI4MCBkaXZpZGVpbnQgNzUwMTg3Njg1LjYzNjMyNjA4OTIzMzk3MjM0MzkxNjY4IDQ2MzMxOTQyNTI4NjMuNjczMDYyNTk3MjY2OTI0NjAyNSAtPiAwCittdWx4MzI4MCBtdWx0aXBseSA3NTAxODc2ODUuNjM2MzI2MDg5MjMzOTcyMzQzOTE2NjggNDYzMzE5NDI1Mjg2My42NzMwNjI1OTcyNjY5MjQ2MDI1IC0+IDM0NzU3NjUyNzM2NTkzMjU4OTUwMTIuNzYxMjEwNzU1NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjgwIHBvd2VyIDc1MDE4NzY4NS42MzYzMjYwODkyMzM5NzIzNDM5MTY2OCA1IC0+IDIuMzc2MDE3NjA2ODgyOTUyOTc0NTE1MjE4ODc5ODU1N0UrNDQgSW5leGFjdCBSb3VuZGVkCityZW14MzI4MCByZW1haW5kZXIgNzUwMTg3Njg1LjYzNjMyNjA4OTIzMzk3MjM0MzkxNjY4IDQ2MzMxOTQyNTI4NjMuNjczMDYyNTk3MjY2OTI0NjAyNSAtPiA3NTAxODc2ODUuNjM2MzI2MDg5MjMzOTcyMzQzOTE2NjgKK3N1YngzMjgwIHN1YnRyYWN0IDc1MDE4NzY4NS42MzYzMjYwODkyMzM5NzIzNDM5MTY2OCA0NjMzMTk0MjUyODYzLjY3MzA2MjU5NzI2NjkyNDYwMjUgLT4gLTQ2MzI0NDQwNjUxNzguMDM2NzM2NTA4MDMyOTUyMjU4NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjgxIGFkZCAzMDE5MDAzNDI0Mjg1My4yNTExNjU5NTE0NTc1ODkzODZFLTAyOCA4MDM4ODg1Njc2LjMyMDQyMzgzMjI5NzYwODc3OTk3NTFFKzAxOCAtPiA4MDM4ODg1Njc2MzIwNDIzODMyMjk3NjA4Nzc5Ljk3NTEgSW5leGFjdCBSb3VuZGVkCitjb214MzI4MSBjb21wYXJlIDMwMTkwMDM0MjQyODUzLjI1MTE2NTk1MTQ1NzU4OTM4NkUtMDI4IDgwMzg4ODU2NzYuMzIwNDIzODMyMjk3NjA4Nzc5OTc1MUUrMDE4IC0+IC0xCitkaXZ4MzI4MSBkaXZpZGUgMzAxOTAwMzQyNDI4NTMuMjUxMTY1OTUxNDU3NTg5Mzg2RS0wMjggODAzODg4NTY3Ni4zMjA0MjM4MzIyOTc2MDg3Nzk5NzUxRSswMTggLT4gMy43NTU0OTk4ODYyMzE5ODA3Mjk1OTAzMzQ4OTYwMjgwRS00MyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjgxIGRpdmlkZWludCAzMDE5MDAzNDI0Mjg1My4yNTExNjU5NTE0NTc1ODkzODZFLTAyOCA4MDM4ODg1Njc2LjMyMDQyMzgzMjI5NzYwODc3OTk3NTFFKzAxOCAtPiAwCittdWx4MzI4MSBtdWx0aXBseSAzMDE5MDAzNDI0Mjg1My4yNTExNjU5NTE0NTc1ODkzODZFLTAyOCA4MDM4ODg1Njc2LjMyMDQyMzgzMjI5NzYwODc3OTk3NTFFKzAxOCAtPiAyNDI2OTQyMzM4NDI0OS42MTEyNjM3Mjg4NTQ3OTM3MzEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI4MSBwb3dlciAzMDE5MDAzNDI0Mjg1My4yNTExNjU5NTE0NTc1ODkzODZFLTAyOCA4IC0+IDYuOTAwOTQ5NDMwNTYxMjU4OTU3ODMzMjY5MDY5MjExM0UtMTE3IEluZXhhY3QgUm91bmRlZAorcmVteDMyODEgcmVtYWluZGVyIDMwMTkwMDM0MjQyODUzLjI1MTE2NTk1MTQ1NzU4OTM4NkUtMDI4IDgwMzg4ODU2NzYuMzIwNDIzODMyMjk3NjA4Nzc5OTc1MUUrMDE4IC0+IDMuMDE5MDAzNDI0Mjg1MzI1MTE2NTk1MTQ1NzU4OTM4NkUtMTUKK3N1YngzMjgxIHN1YnRyYWN0IDMwMTkwMDM0MjQyODUzLjI1MTE2NTk1MTQ1NzU4OTM4NkUtMDI4IDgwMzg4ODU2NzYuMzIwNDIzODMyMjk3NjA4Nzc5OTc1MUUrMDE4IC0+IC04MDM4ODg1Njc2MzIwNDIzODMyMjk3NjA4Nzc5Ljk3NTEgSW5leGFjdCBSb3VuZGVkCithZGR4MzI4MiBhZGQgNjUuNTM3OTQyNjc2Nzc0NzE1OTUzNDAwNzY4ODAzNTM5IDEyNTk0NjkxNzI2MC44NzUzNjUwNjE5NzE5MTc4MjE5OCAtPiAxMjU5NDY5MTczMjYuNDEzMzA3NzM4NzQ2NjMzNzc1MzggSW5leGFjdCBSb3VuZGVkCitjb214MzI4MiBjb21wYXJlIDY1LjUzNzk0MjY3Njc3NDcxNTk1MzQwMDc2ODgwMzUzOSAxMjU5NDY5MTcyNjAuODc1MzY1MDYxOTcxOTE3ODIxOTggLT4gLTEKK2RpdngzMjgyIGRpdmlkZSA2NS41Mzc5NDI2NzY3NzQ3MTU5NTM0MDA3Njg4MDM1MzkgMTI1OTQ2OTE3MjYwLjg3NTM2NTA2MTk3MTkxNzgyMTk4IC0+IDUuMjAzNjE2MjYxNjg0Njg5NDkyMDM4OTQxNDczNTg3OEUtMTAgSW5leGFjdCBSb3VuZGVkCitkdml4MzI4MiBkaXZpZGVpbnQgNjUuNTM3OTQyNjc2Nzc0NzE1OTUzNDAwNzY4ODAzNTM5IDEyNTk0NjkxNzI2MC44NzUzNjUwNjE5NzE5MTc4MjE5OCAtPiAwCittdWx4MzI4MiBtdWx0aXBseSA2NS41Mzc5NDI2NzY3NzQ3MTU5NTM0MDA3Njg4MDM1MzkgMTI1OTQ2OTE3MjYwLjg3NTM2NTA2MTk3MTkxNzgyMTk4IC0+IDgyNTQzMDE4NDM3NTkuNzM3Njk5MDk1NzM1NTQxMTM3MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjgyIHBvd2VyIDY1LjUzNzk0MjY3Njc3NDcxNTk1MzQwMDc2ODgwMzUzOSAxIC0+IDY1LjUzNzk0MjY3Njc3NDcxNTk1MzQwMDc2ODgwMzUzOQorcmVteDMyODIgcmVtYWluZGVyIDY1LjUzNzk0MjY3Njc3NDcxNTk1MzQwMDc2ODgwMzUzOSAxMjU5NDY5MTcyNjAuODc1MzY1MDYxOTcxOTE3ODIxOTggLT4gNjUuNTM3OTQyNjc2Nzc0NzE1OTUzNDAwNzY4ODAzNTM5CitzdWJ4MzI4MiBzdWJ0cmFjdCA2NS41Mzc5NDI2NzY3NzQ3MTU5NTM0MDA3Njg4MDM1MzkgMTI1OTQ2OTE3MjYwLjg3NTM2NTA2MTk3MTkxNzgyMTk4IC0+IC0xMjU5NDY5MTcxOTUuMzM3NDIyMzg1MTk3MjAxODY4NTggSW5leGFjdCBSb3VuZGVkCithZGR4MzI4MyBhZGQgODAxNTI3MjM0ODY3Ny41NDg5Mzk0MTgzODgxODEzNzAwIDk0OS4yMzAyNzExMTQ5OTc3OTI1ODI4NDg3NzkyMDAyMiAtPiA4MDE1MjcyMzQ5NjI2Ljc3OTIxMDUzMzM4NTk3Mzk1MjggSW5leGFjdCBSb3VuZGVkCitjb214MzI4MyBjb21wYXJlIDgwMTUyNzIzNDg2NzcuNTQ4OTM5NDE4Mzg4MTgxMzcwMCA5NDkuMjMwMjcxMTE0OTk3NzkyNTgyODQ4Nzc5MjAwMjIgLT4gMQorZGl2eDMyODMgZGl2aWRlIDgwMTUyNzIzNDg2NzcuNTQ4OTM5NDE4Mzg4MTgxMzcwMCA5NDkuMjMwMjcxMTE0OTk3NzkyNTgyODQ4Nzc5MjAwMjIgLT4gODQ0Mzk3MDQzOC41NTYwMTA3OTc4NzkwMDg0NDMwMTEwIEluZXhhY3QgUm91bmRlZAorZHZpeDMyODMgZGl2aWRlaW50IDgwMTUyNzIzNDg2NzcuNTQ4OTM5NDE4Mzg4MTgxMzcwMCA5NDkuMjMwMjcxMTE0OTk3NzkyNTgyODQ4Nzc5MjAwMjIgLT4gODQ0Mzk3MDQzOAorbXVseDMyODMgbXVsdGlwbHkgODAxNTI3MjM0ODY3Ny41NDg5Mzk0MTgzODgxODEzNzAwIDk0OS4yMzAyNzExMTQ5OTc3OTI1ODI4NDg3NzkyMDAyMiAtPiA3NjA4MzM5MTQ0NTk1NzM0Ljg5ODQyODE0MzE0NzE3NDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI4MyBwb3dlciA4MDE1MjcyMzQ4Njc3LjU0ODkzOTQxODM4ODE4MTM3MDAgOTQ5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMyODMgcmVtYWluZGVyIDgwMTUyNzIzNDg2NzcuNTQ4OTM5NDE4Mzg4MTgxMzcwMCA5NDkuMjMwMjcxMTE0OTk3NzkyNTgyODQ4Nzc5MjAwMjIgLT4gNTI3Ljc4MjI4MDQxMzU1NzQyMzk3ODk1MzAzNjkwMzY0CitzdWJ4MzI4MyBzdWJ0cmFjdCA4MDE1MjcyMzQ4Njc3LjU0ODkzOTQxODM4ODE4MTM3MDAgOTQ5LjIzMDI3MTExNDk5Nzc5MjU4Mjg0ODc3OTIwMDIyIC0+IDgwMTUyNzIzNDc3MjguMzE4NjY4MzAzMzkwMzg4Nzg3MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjg0IGFkZCAtMzI1OTUzMzM5ODIuNjcwNjg2MjIxMjA0NTE4MDQyMjUgNjkxMzAuMDUyMjMzNjQ5ODA4NzUwMTEzMTQxNTAyNDY1RS04NjIgLT4gLTMyNTk1MzMzOTgyLjY3MDY4NjIyMTIwNDUxODA0MjI1MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjg0IGNvbXBhcmUgLTMyNTk1MzMzOTgyLjY3MDY4NjIyMTIwNDUxODA0MjI1IDY5MTMwLjA1MjIzMzY0OTgwODc1MDExMzE0MTUwMjQ2NUUtODYyIC0+IC0xCitkaXZ4MzI4NCBkaXZpZGUgLTMyNTk1MzMzOTgyLjY3MDY4NjIyMTIwNDUxODA0MjI1IDY5MTMwLjA1MjIzMzY0OTgwODc1MDExMzE0MTUwMjQ2NUUtODYyIC0+IC00LjcxNTA3NDQwMzg5MzU1NzQ1NzQ2ODE2MDk0NTc3MjdFKzg2NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjg0IGRpdmlkZWludCAtMzI1OTUzMzM5ODIuNjcwNjg2MjIxMjA0NTE4MDQyMjUgNjkxMzAuMDUyMjMzNjQ5ODA4NzUwMTEzMTQxNTAyNDY1RS04NjIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjg0IG11bHRpcGx5IC0zMjU5NTMzMzk4Mi42NzA2ODYyMjEyMDQ1MTgwNDIyNSA2OTEzMC4wNTIyMzM2NDk4MDg3NTAxMTMxNDE1MDI0NjVFLTg2MiAtPiAtMi4yNTMzMTcxNDA3OTUyODUxODg1NDQ2MjEzNjk3NzE1RS04NDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI4NCBwb3dlciAtMzI1OTUzMzM5ODIuNjcwNjg2MjIxMjA0NTE4MDQyMjUgNyAtPiAtMy45MDkyMDE0MTQ4MDMxNzM5NjY2NTI1NjA2MDkzMzA2RSs3MyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjg0IHJlbWFpbmRlciAtMzI1OTUzMzM5ODIuNjcwNjg2MjIxMjA0NTE4MDQyMjUgNjkxMzAuMDUyMjMzNjQ5ODA4NzUwMTEzMTQxNTAyNDY1RS04NjIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjg0IHN1YnRyYWN0IC0zMjU5NTMzMzk4Mi42NzA2ODYyMjEyMDQ1MTgwNDIyNSA2OTEzMC4wNTIyMzM2NDk4MDg3NTAxMTMxNDE1MDI0NjVFLTg2MiAtPiAtMzI1OTUzMzM5ODIuNjcwNjg2MjIxMjA0NTE4MDQyMjUwIEluZXhhY3QgUm91bmRlZAorYWRkeDMyODUgYWRkIC0xNzU0NDE4OTAxNzE0NS43MTAxMTc2MzMwMjE4MDA0MjZFLTUzNyAyOTIxNzgwMDAuMDY0NTA4MDQ2MTgyOTk1MjAwOTQ4NDMgLT4gMjkyMTc4MDAwLjA2NDUwODA0NjE4Mjk5NTIwMDk0ODQzIEluZXhhY3QgUm91bmRlZAorY29teDMyODUgY29tcGFyZSAtMTc1NDQxODkwMTcxNDUuNzEwMTE3NjMzMDIxODAwNDI2RS01MzcgMjkyMTc4MDAwLjA2NDUwODA0NjE4Mjk5NTIwMDk0ODQzIC0+IC0xCitkaXZ4MzI4NSBkaXZpZGUgLTE3NTQ0MTg5MDE3MTQ1LjcxMDExNzYzMzAyMTgwMDQyNkUtNTM3IDI5MjE3ODAwMC4wNjQ1MDgwNDYxODI5OTUyMDA5NDg0MyAtPiAtNi4wMDQ2MjM1NTU5MzkyNzE1MzM0NjY4Mjc3MDI2ODk2RS01MzMgSW5leGFjdCBSb3VuZGVkCitkdml4MzI4NSBkaXZpZGVpbnQgLTE3NTQ0MTg5MDE3MTQ1LjcxMDExNzYzMzAyMTgwMDQyNkUtNTM3IDI5MjE3ODAwMC4wNjQ1MDgwNDYxODI5OTUyMDA5NDg0MyAtPiAtMAorbXVseDMyODUgbXVsdGlwbHkgLTE3NTQ0MTg5MDE3MTQ1LjcxMDExNzYzMzAyMTgwMDQyNkUtNTM3IDI5MjE3ODAwMC4wNjQ1MDgwNDYxODI5OTUyMDA5NDg0MyAtPiAtNS4xMjYwMjYwNTk3ODMzNDA2NDYxMTEwMTM2OTUyNDU2RS01MTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI4NSBwb3dlciAtMTc1NDQxODkwMTcxNDUuNzEwMTE3NjMzMDIxODAwNDI2RS01MzcgMjkyMTc4MDAwIC0+IDBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjg1IHJlbWFpbmRlciAtMTc1NDQxODkwMTcxNDUuNzEwMTE3NjMzMDIxODAwNDI2RS01MzcgMjkyMTc4MDAwLjA2NDUwODA0NjE4Mjk5NTIwMDk0ODQzIC0+IC0xLjc1NDQxODkwMTcxNDU3MTAxMTc2MzMwMjE4MDA0MjZFLTUyNAorc3VieDMyODUgc3VidHJhY3QgLTE3NTQ0MTg5MDE3MTQ1LjcxMDExNzYzMzAyMTgwMDQyNkUtNTM3IDI5MjE3ODAwMC4wNjQ1MDgwNDYxODI5OTUyMDA5NDg0MyAtPiAtMjkyMTc4MDAwLjA2NDUwODA0NjE4Mjk5NTIwMDk0ODQzIEluZXhhY3QgUm91bmRlZAorYWRkeDMyODYgYWRkIC01MDY2NTAuOTkzOTU2NDk5MDcxMzkyMDQwNTI0NDE2MzAgMTEuMDE4NDI3NTAyMDMxNjUwMTQ4OTYyMDY3MzY3MTU4IC0+IC01MDY2MzkuOTc1NTI4OTk3MDM5NzQxODkxNTYyMzQ4OTMgSW5leGFjdCBSb3VuZGVkCitjb214MzI4NiBjb21wYXJlIC01MDY2NTAuOTkzOTU2NDk5MDcxMzkyMDQwNTI0NDE2MzAgMTEuMDE4NDI3NTAyMDMxNjUwMTQ4OTYyMDY3MzY3MTU4IC0+IC0xCitkaXZ4MzI4NiBkaXZpZGUgLTUwNjY1MC45OTM5NTY0OTkwNzEzOTIwNDA1MjQ0MTYzMCAxMS4wMTg0Mjc1MDIwMzE2NTAxNDg5NjIwNjczNjcxNTggLT4gLTQ1OTgyLjE1MDcwNzM1NjMyOTAyNzY5ODcxNzE4OTEwNCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjg2IGRpdmlkZWludCAtNTA2NjUwLjk5Mzk1NjQ5OTA3MTM5MjA0MDUyNDQxNjMwIDExLjAxODQyNzUwMjAzMTY1MDE0ODk2MjA2NzM2NzE1OCAtPiAtNDU5ODIKK211bHgzMjg2IG11bHRpcGx5IC01MDY2NTAuOTkzOTU2NDk5MDcxMzkyMDQwNTI0NDE2MzAgMTEuMDE4NDI3NTAyMDMxNjUwMTQ4OTYyMDY3MzY3MTU4IC0+IC01NTgyNDk3LjI0NTc0MTk2MDczOTI5NDAyMzQyNzEyMjIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI4NiBwb3dlciAtNTA2NjUwLjk5Mzk1NjQ5OTA3MTM5MjA0MDUyNDQxNjMwIDExIC0+IC01LjY0Njc0MTI2Nzg4MDk4ODUzMzMzMTM4MTgwNzg4MjlFKzYyIEluZXhhY3QgUm91bmRlZAorcmVteDMyODYgcmVtYWluZGVyIC01MDY2NTAuOTkzOTU2NDk5MDcxMzkyMDQwNTI0NDE2MzAgMTEuMDE4NDI3NTAyMDMxNjUwMTQ4OTYyMDY3MzY3MTU4IC0+IC0xLjY2MDU1ODA3OTczNDI0MjQ2Njc0MjczOTY0MDg0NAorc3VieDMyODYgc3VidHJhY3QgLTUwNjY1MC45OTM5NTY0OTkwNzEzOTIwNDA1MjQ0MTYzMCAxMS4wMTg0Mjc1MDIwMzE2NTAxNDg5NjIwNjczNjcxNTggLT4gLTUwNjY2Mi4wMTIzODQwMDExMDMwNDIxODk0ODY0ODM2NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjg3IGFkZCA0ODQ2ODM1MTU5LjU5MjIzNzIzMDc2NTYwMDA3NjkzOTVFLTI0MSAtODQuMDAxODkzMDQwODY1ODY0NTkwMTIyMzMwODAwNzY4IC0+IC04NC4wMDE4OTMwNDA4NjU4NjQ1OTAxMjIzMzA4MDA3NjggSW5leGFjdCBSb3VuZGVkCitjb214MzI4NyBjb21wYXJlIDQ4NDY4MzUxNTkuNTkyMjM3MjMwNzY1NjAwMDc2OTM5NUUtMjQxIC04NC4wMDE4OTMwNDA4NjU4NjQ1OTAxMjIzMzA4MDA3NjggLT4gMQorZGl2eDMyODcgZGl2aWRlIDQ4NDY4MzUxNTkuNTkyMjM3MjMwNzY1NjAwMDc2OTM5NUUtMjQxIC04NC4wMDE4OTMwNDA4NjU4NjQ1OTAxMjIzMzA4MDA3NjggLT4gLTUuNzY5OTExODI0NzY2MDM1NzgxNDY0MTgxMzI2MDUyNEUtMjM0IEluZXhhY3QgUm91bmRlZAorZHZpeDMyODcgZGl2aWRlaW50IDQ4NDY4MzUxNTkuNTkyMjM3MjMwNzY1NjAwMDc2OTM5NUUtMjQxIC04NC4wMDE4OTMwNDA4NjU4NjQ1OTAxMjIzMzA4MDA3NjggLT4gLTAKK211bHgzMjg3IG11bHRpcGx5IDQ4NDY4MzUxNTkuNTkyMjM3MjMwNzY1NjAwMDc2OTM5NUUtMjQxIC04NC4wMDE4OTMwNDA4NjU4NjQ1OTAxMjIzMzA4MDA3NjggLT4gLTQuMDcxNDMzMjg2NjI3NzUxNDQ4MTE5Mjg1NjkyNTc3NUUtMjMwIEluZXhhY3QgUm91bmRlZAorcG93eDMyODcgcG93ZXIgNDg0NjgzNTE1OS41OTIyMzcyMzA3NjU2MDAwNzY5Mzk1RS0yNDEgLTg0IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMyODcgcmVtYWluZGVyIDQ4NDY4MzUxNTkuNTkyMjM3MjMwNzY1NjAwMDc2OTM5NUUtMjQxIC04NC4wMDE4OTMwNDA4NjU4NjQ1OTAxMjIzMzA4MDA3NjggLT4gNC44NDY4MzUxNTk1OTIyMzcyMzA3NjU2MDAwNzY5Mzk1RS0yMzIKK3N1YngzMjg3IHN1YnRyYWN0IDQ4NDY4MzUxNTkuNTkyMjM3MjMwNzY1NjAwMDc2OTM5NUUtMjQxIC04NC4wMDE4OTMwNDA4NjU4NjQ1OTAxMjIzMzA4MDA3NjggLT4gODQuMDAxODkzMDQwODY1ODY0NTkwMTIyMzMwODAwNzY4IEluZXhhY3QgUm91bmRlZAorYWRkeDMyODggYWRkIC0zNS4wMjkzMTEwMTM4MjIyNTkzNTgxMTY1NTYxNjQ5MDggLTM5OTQzMDg4NzguMTk5NDY0NTMxMzQxNDUzNDIwOTEyNyAtPiAtMzk5NDMwODkxMy4yMjg3NzU1NDUxNjM3MTI3NzkwMjkzIEluZXhhY3QgUm91bmRlZAorY29teDMyODggY29tcGFyZSAtMzUuMDI5MzExMDEzODIyMjU5MzU4MTE2NTU2MTY0OTA4IC0zOTk0MzA4ODc4LjE5OTQ2NDUzMTM0MTQ1MzQyMDkxMjcgLT4gMQorZGl2eDMyODggZGl2aWRlIC0zNS4wMjkzMTEwMTM4MjIyNTkzNTgxMTY1NTYxNjQ5MDggLTM5OTQzMDg4NzguMTk5NDY0NTMxMzQxNDUzNDIwOTEyNyAtPiA4Ljc2OTgwNTI2MDkzMjMwMDQ1NDM1MzgxNjMwNjE3NzRFLTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzI4OCBkaXZpZGVpbnQgLTM1LjAyOTMxMTAxMzgyMjI1OTM1ODExNjU1NjE2NDkwOCAtMzk5NDMwODg3OC4xOTk0NjQ1MzEzNDE0NTM0MjA5MTI3IC0+IDAKK211bHgzMjg4IG11bHRpcGx5IC0zNS4wMjkzMTEwMTM4MjIyNTkzNTgxMTY1NTYxNjQ5MDggLTM5OTQzMDg4NzguMTk5NDY0NTMxMzQxNDUzNDIwOTEyNyAtPiAxMzk5MTc4ODc5NzkuNzIwNTM2MzcyNzI5NjExMjA2MzkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI4OCBwb3dlciAtMzUuMDI5MzExMDEzODIyMjU5MzU4MTE2NTU2MTY0OTA4IC00IC0+IDYuNjQxNjEzODA0MDUyMjEyNDY5MzQ5NTE3ODIxODA5NkUtNyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjg4IHJlbWFpbmRlciAtMzUuMDI5MzExMDEzODIyMjU5MzU4MTE2NTU2MTY0OTA4IC0zOTk0MzA4ODc4LjE5OTQ2NDUzMTM0MTQ1MzQyMDkxMjcgLT4gLTM1LjAyOTMxMTAxMzgyMjI1OTM1ODExNjU1NjE2NDkwOAorc3VieDMyODggc3VidHJhY3QgLTM1LjAyOTMxMTAxMzgyMjI1OTM1ODExNjU1NjE2NDkwOCAtMzk5NDMwODg3OC4xOTk0NjQ1MzEzNDE0NTM0MjA5MTI3IC0+IDM5OTQzMDg4NDMuMTcwMTUzNTE3NTE5MTk0MDYyNzk2MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjg5IGFkZCA3NjA2NjYzNzUwLjY3MzUyNjUyMzMwNDQ0MjA4ODcwMThFKzE2NiAtNTQ5MTgxNDYzOS40NDg0NTY1NDE4Mjg0Njg2MTI3NTUyRSszNjUgLT4gLTUuNDkxODE0NjM5NDQ4NDU2NTQxODI4NDY4NjEyNzU1MkUrMzc0IEluZXhhY3QgUm91bmRlZAorY29teDMyODkgY29tcGFyZSA3NjA2NjYzNzUwLjY3MzUyNjUyMzMwNDQ0MjA4ODcwMThFKzE2NiAtNTQ5MTgxNDYzOS40NDg0NTY1NDE4Mjg0Njg2MTI3NTUyRSszNjUgLT4gMQorZGl2eDMyODkgZGl2aWRlIDc2MDY2NjM3NTAuNjczNTI2NTIzMzA0NDQyMDg4NzAxOEUrMTY2IC01NDkxODE0NjM5LjQ0ODQ1NjU0MTgyODQ2ODYxMjc1NTJFKzM2NSAtPiAtMS4zODUwOTExMzEwODY5NDg3ODk1OTQ3NzMzMDkwMjA0RS0xOTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzI4OSBkaXZpZGVpbnQgNzYwNjY2Mzc1MC42NzM1MjY1MjMzMDQ0NDIwODg3MDE4RSsxNjYgLTU0OTE4MTQ2MzkuNDQ4NDU2NTQxODI4NDY4NjEyNzU1MkUrMzY1IC0+IC0wCittdWx4MzI4OSBtdWx0aXBseSA3NjA2NjYzNzUwLjY3MzUyNjUyMzMwNDQ0MjA4ODcwMThFKzE2NiAtNTQ5MTgxNDYzOS40NDg0NTY1NDE4Mjg0Njg2MTI3NTUyRSszNjUgLT4gLTQuMTc3NDM4NzM0MzMxMDc3NzE5MDkxNzEyODAwNjU4OUUrNTUwIEluZXhhY3QgUm91bmRlZAorcG93eDMyODkgcG93ZXIgNzYwNjY2Mzc1MC42NzM1MjY1MjMzMDQ0NDIwODg3MDE4RSsxNjYgLTUgLT4gMy45MjY3MTA2OTc4ODg3MzQ2MzczOTU3MzE0ODE4MTc4RS04ODAgSW5leGFjdCBSb3VuZGVkCityZW14MzI4OSByZW1haW5kZXIgNzYwNjY2Mzc1MC42NzM1MjY1MjMzMDQ0NDIwODg3MDE4RSsxNjYgLTU0OTE4MTQ2MzkuNDQ4NDU2NTQxODI4NDY4NjEyNzU1MkUrMzY1IC0+IDcuNjA2NjYzNzUwNjczNTI2NTIzMzA0NDQyMDg4NzAxOEUrMTc1CitzdWJ4MzI4OSBzdWJ0cmFjdCA3NjA2NjYzNzUwLjY3MzUyNjUyMzMwNDQ0MjA4ODcwMThFKzE2NiAtNTQ5MTgxNDYzOS40NDg0NTY1NDE4Mjg0Njg2MTI3NTUyRSszNjUgLT4gNS40OTE4MTQ2Mzk0NDg0NTY1NDE4Mjg0Njg2MTI3NTUyRSszNzQgSW5leGFjdCBSb3VuZGVkCithZGR4MzI5MCBhZGQgLTI1Njc3LjgyOTY2MDgzMTc0MTI3NDIwNzMyNjY5NzA1MkUtMTYzIC05NDEzNTM5NTEyNDE5MzA0ODU2MDE3MjcwNTA4MjAyOUUtODYyIC0+IC0yLjU2Nzc4Mjk2NjA4MzE3NDEyNzQyMDczMjY2OTcwNTJFLTE1OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjkwIGNvbXBhcmUgLTI1Njc3LjgyOTY2MDgzMTc0MTI3NDIwNzMyNjY5NzA1MkUtMTYzIC05NDEzNTM5NTEyNDE5MzA0ODU2MDE3MjcwNTA4MjAyOUUtODYyIC0+IC0xCitkaXZ4MzI5MCBkaXZpZGUgLTI1Njc3LjgyOTY2MDgzMTc0MTI3NDIwNzMyNjY5NzA1MkUtMTYzIC05NDEzNTM5NTEyNDE5MzA0ODU2MDE3MjcwNTA4MjAyOUUtODYyIC0+IDIuNzI3NzU1MDE5OTg1MzAwOTcwODQ5MzE2NzI5OTgzOEUrNjcxIEluZXhhY3QgUm91bmRlZAorZHZpeDMyOTAgZGl2aWRlaW50IC0yNTY3Ny44Mjk2NjA4MzE3NDEyNzQyMDczMjY2OTcwNTJFLTE2MyAtOTQxMzUzOTUxMjQxOTMwNDg1NjAxNzI3MDUwODIwMjlFLTg2MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyOTAgbXVsdGlwbHkgLTI1Njc3LjgyOTY2MDgzMTc0MTI3NDIwNzMyNjY5NzA1MkUtMTYzIC05NDEzNTM5NTEyNDE5MzA0ODU2MDE3MjcwNTA4MjAyOUUtODYyIC0+IDIuNDE3MTkyNjQxMDU0MTE5OTM5MzcyODI5NDc2MjU1OUUtOTg5IEluZXhhY3QgUm91bmRlZAorcG93eDMyOTAgcG93ZXIgLTI1Njc3LjgyOTY2MDgzMTc0MTI3NDIwNzMyNjY5NzA1MkUtMTYzIC05IC0+IC0yLjA2MDUxMjE0MjA2ODI3NjQ4OTc4NjcyMjE5OTIxNzRFKzE0MjcgSW5leGFjdCBSb3VuZGVkCityZW14MzI5MCByZW1haW5kZXIgLTI1Njc3LjgyOTY2MDgzMTc0MTI3NDIwNzMyNjY5NzA1MkUtMTYzIC05NDEzNTM5NTEyNDE5MzA0ODU2MDE3MjcwNTA4MjAyOUUtODYyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzI5MCBzdWJ0cmFjdCAtMjU2NzcuODI5NjYwODMxNzQxMjc0MjA3MzI2Njk3MDUyRS0xNjMgLTk0MTM1Mzk1MTI0MTkzMDQ4NTYwMTcyNzA1MDgyMDI5RS04NjIgLT4gLTIuNTY3NzgyOTY2MDgzMTc0MTI3NDIwNzMyNjY5NzA1MkUtMTU5IEluZXhhY3QgUm91bmRlZAorYWRkeDMyOTEgYWRkIDk3MjcxNTc2MDk0LjQ1NjQwNjcyOTY3MTcyOTIyNDgyNyAtMS41NDEyNTYzODM3NTQwODEwNzkzNjk3OTU1MDYzMjk1RSs1NTQgLT4gLTEuNTQxMjU2MzgzNzU0MDgxMDc5MzY5Nzk1NTA2MzI5NUUrNTU0IEluZXhhY3QgUm91bmRlZAorY29teDMyOTEgY29tcGFyZSA5NzI3MTU3NjA5NC40NTY0MDY3Mjk2NzE3MjkyMjQ4MjcgLTEuNTQxMjU2MzgzNzU0MDgxMDc5MzY5Nzk1NTA2MzI5NUUrNTU0IC0+IDEKK2RpdngzMjkxIGRpdmlkZSA5NzI3MTU3NjA5NC40NTY0MDY3Mjk2NzE3MjkyMjQ4MjcgLTEuNTQxMjU2MzgzNzU0MDgxMDc5MzY5Nzk1NTA2MzI5NUUrNTU0IC0+IC02LjMxMTE4NzIzMTM4OTA2NDYxNDQ0NzM2NTI2NDUwMzBFLTU0NCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjkxIGRpdmlkZWludCA5NzI3MTU3NjA5NC40NTY0MDY3Mjk2NzE3MjkyMjQ4MjcgLTEuNTQxMjU2MzgzNzU0MDgxMDc5MzY5Nzk1NTA2MzI5NUUrNTU0IC0+IC0wCittdWx4MzI5MSBtdWx0aXBseSA5NzI3MTU3NjA5NC40NTY0MDY3Mjk2NzE3MjkyMjQ4MjcgLTEuNTQxMjU2MzgzNzU0MDgxMDc5MzY5Nzk1NTA2MzI5NUUrNTU0IC0+IC0xLjQ5OTIwNDM3NjEzNDAxODAyODgwNjU5NTkzMDAwOTBFKzU2NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjkxIHBvd2VyIDk3MjcxNTc2MDk0LjQ1NjQwNjcyOTY3MTcyOTIyNDgyNyAtMiAtPiAxLjA1Njg4NTg3NjU4NTIwNzMxODEzNTIzMDk0MDEzNDNFLTIyIEluZXhhY3QgUm91bmRlZAorcmVteDMyOTEgcmVtYWluZGVyIDk3MjcxNTc2MDk0LjQ1NjQwNjcyOTY3MTcyOTIyNDgyNyAtMS41NDEyNTYzODM3NTQwODEwNzkzNjk3OTU1MDYzMjk1RSs1NTQgLT4gOTcyNzE1NzYwOTQuNDU2NDA2NzI5NjcxNzI5MjI0ODI3CitzdWJ4MzI5MSBzdWJ0cmFjdCA5NzI3MTU3NjA5NC40NTY0MDY3Mjk2NzE3MjkyMjQ4MjcgLTEuNTQxMjU2MzgzNzU0MDgxMDc5MzY5Nzk1NTA2MzI5NUUrNTU0IC0+IDEuNTQxMjU2MzgzNzU0MDgxMDc5MzY5Nzk1NTA2MzI5NUUrNTU0IEluZXhhY3QgUm91bmRlZAorYWRkeDMyOTIgYWRkIDQxMTM5Nzg5ODk0LjQwMTgyNjkxNTc1NzM5MTc3NzU2MyAtMS44NzI5OTIwMzA1NjcxMDU3OTU3MTU2MTU5NjkwODIzRS0wMjAgLT4gNDExMzk3ODk4OTQuNDAxODI2OTE1NzU3MzkxNzc3NTQ0IEluZXhhY3QgUm91bmRlZAorY29teDMyOTIgY29tcGFyZSA0MTEzOTc4OTg5NC40MDE4MjY5MTU3NTczOTE3Nzc1NjMgLTEuODcyOTkyMDMwNTY3MTA1Nzk1NzE1NjE1OTY5MDgyM0UtMDIwIC0+IDEKK2RpdngzMjkyIGRpdmlkZSA0MTEzOTc4OTg5NC40MDE4MjY5MTU3NTczOTE3Nzc1NjMgLTEuODcyOTkyMDMwNTY3MTA1Nzk1NzE1NjE1OTY5MDgyM0UtMDIwIC0+IC0yMTk2NDc0MzY5NTExNjI1Mzg5Mjg5NTA2NDYxNTUxLjAgSW5leGFjdCBSb3VuZGVkCitkdml4MzI5MiBkaXZpZGVpbnQgNDExMzk3ODk4OTQuNDAxODI2OTE1NzU3MzkxNzc3NTYzIC0xLjg3Mjk5MjAzMDU2NzEwNTc5NTcxNTYxNTk2OTA4MjNFLTAyMCAtPiAtMjE5NjQ3NDM2OTUxMTYyNTM4OTI4OTUwNjQ2MTU1MQorbXVseDMyOTIgbXVsdGlwbHkgNDExMzk3ODk4OTQuNDAxODI2OTE1NzU3MzkxNzc3NTYzIC0xLjg3Mjk5MjAzMDU2NzEwNTc5NTcxNTYxNTk2OTA4MjNFLTAyMCAtPiAtNy43MDU0NDk4NjExNDE5Nzc2NzE0MjkxMDgwOTI4NjAxRS0xMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjkyIHBvd2VyIDQxMTM5Nzg5ODk0LjQwMTgyNjkxNTc1NzM5MTc3NzU2MyAtMiAtPiA1LjkwODQ4MTI0NDI3NDEwOTE1NTA4OTE0NTEwNjk5MTlFLTIyIEluZXhhY3QgUm91bmRlZAorcmVteDMyOTIgcmVtYWluZGVyIDQxMTM5Nzg5ODk0LjQwMTgyNjkxNTc1NzM5MTc3NzU2MyAtMS44NzI5OTIwMzA1NjcxMDU3OTU3MTU2MTU5NjkwODIzRS0wMjAgLT4gNi45ODE0MTAyMjY0MDU0NDAxODkzNTEwMjk1MzUyN0UtMjIKK3N1YngzMjkyIHN1YnRyYWN0IDQxMTM5Nzg5ODk0LjQwMTgyNjkxNTc1NzM5MTc3NzU2MyAtMS44NzI5OTIwMzA1NjcxMDU3OTU3MTU2MTU5NjkwODIzRS0wMjAgLT4gNDExMzk3ODk4OTQuNDAxODI2OTE1NzU3MzkxNzc3NTgyIEluZXhhY3QgUm91bmRlZAorYWRkeDMyOTMgYWRkIC04MzMxMDgzMTI4NzI0MS43Nzc1OTg2OTY4NTM0OTgxNDkgLTU0Nzk5ODI1MDMzLjc5NzEwMDQxODE2Mjk4NTEwMzUxOUUtMzMwIC0+IC04MzMxMDgzMTI4NzI0MS43Nzc1OTg2OTY4NTM0OTgxNDkgSW5leGFjdCBSb3VuZGVkCitjb214MzI5MyBjb21wYXJlIC04MzMxMDgzMTI4NzI0MS43Nzc1OTg2OTY4NTM0OTgxNDkgLTU0Nzk5ODI1MDMzLjc5NzEwMDQxODE2Mjk4NTEwMzUxOUUtMzMwIC0+IC0xCitkaXZ4MzI5MyBkaXZpZGUgLTgzMzEwODMxMjg3MjQxLjc3NzU5ODY5Njg1MzQ5ODE0OSAtNTQ3OTk4MjUwMzMuNzk3MTAwNDE4MTYyOTg1MTAzNTE5RS0zMzAgLT4gMS41MjAyNzU0OTc4ODQ1NDM4NjM2NjA1MTcwODU3NDc4RSszMzMgSW5leGFjdCBSb3VuZGVkCitkdml4MzI5MyBkaXZpZGVpbnQgLTgzMzEwODMxMjg3MjQxLjc3NzU5ODY5Njg1MzQ5ODE0OSAtNTQ3OTk4MjUwMzMuNzk3MTAwNDE4MTYyOTg1MTAzNTE5RS0zMzAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjkzIG11bHRpcGx5IC04MzMxMDgzMTI4NzI0MS43Nzc1OTg2OTY4NTM0OTgxNDkgLTU0Nzk5ODI1MDMzLjc5NzEwMDQxODE2Mjk4NTEwMzUxOUUtMzMwIC0+IDQuNTY1NDE4OTc3OTYxMDM4Njc2MDMzMDUyNzgzOTU4OEUtMzA2IEluZXhhY3QgUm91bmRlZAorcG93eDMyOTMgcG93ZXIgLTgzMzEwODMxMjg3MjQxLjc3NzU5ODY5Njg1MzQ5ODE0OSAtNSAtPiAtMi40OTE2ODIyNjA2NjgyNjI0ODI3OTAwNTgxNzI4Mzg3RS03MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjkzIHJlbWFpbmRlciAtODMzMTA4MzEyODcyNDEuNzc3NTk4Njk2ODUzNDk4MTQ5IC01NDc5OTgyNTAzMy43OTcxMDA0MTgxNjI5ODUxMDM1MTlFLTMzMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyOTMgc3VidHJhY3QgLTgzMzEwODMxMjg3MjQxLjc3NzU5ODY5Njg1MzQ5ODE0OSAtNTQ3OTk4MjUwMzMuNzk3MTAwNDE4MTYyOTg1MTAzNTE5RS0zMzAgLT4gLTgzMzEwODMxMjg3MjQxLjc3NzU5ODY5Njg1MzQ5ODE0OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjk0IGFkZCA0NTA2NjUzNDYxLjQ0MTQ5NzQyMzM2NzgzMzE3NzExNjkgLTc0OTU1NDcwLjk3NzY1MzAzODAxMDAzMTQ1NzE4MTk1N0UtODg3IC0+IDQ1MDY2NTM0NjEuNDQxNDk3NDIzMzY3ODMzMTc3MTE2OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjk0IGNvbXBhcmUgNDUwNjY1MzQ2MS40NDE0OTc0MjMzNjc4MzMxNzcxMTY5IC03NDk1NTQ3MC45Nzc2NTMwMzgwMTAwMzE0NTcxODE5NTdFLTg4NyAtPiAxCitkaXZ4MzI5NCBkaXZpZGUgNDUwNjY1MzQ2MS40NDE0OTc0MjMzNjc4MzMxNzcxMTY5IC03NDk1NTQ3MC45Nzc2NTMwMzgwMTAwMzE0NTcxODE5NTdFLTg4NyAtPiAtNi4wMTI0NDA5OTAxNzgxNDkwMDU0NDM4MjIwMDQ4NjI5RSs4ODggSW5leGFjdCBSb3VuZGVkCitkdml4MzI5NCBkaXZpZGVpbnQgNDUwNjY1MzQ2MS40NDE0OTc0MjMzNjc4MzMxNzcxMTY5IC03NDk1NTQ3MC45Nzc2NTMwMzgwMTAwMzE0NTcxODE5NTdFLTg4NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyOTQgbXVsdGlwbHkgNDUwNjY1MzQ2MS40NDE0OTc0MjMzNjc4MzMxNzcxMTY5IC03NDk1NTQ3MC45Nzc2NTMwMzgwMTAwMzE0NTcxODE5NTdFLTg4NyAtPiAtMy4zNzc5ODMzMjczNTQxNzc2NDcwOTAyOTAzNTEyOTQ5RS04NzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI5NCBwb3dlciA0NTA2NjUzNDYxLjQ0MTQ5NzQyMzM2NzgzMzE3NzExNjkgLTcgLT4gMi42NDg2MjcyOTExNDg2NDYxMTAyNzM1NDEyNDYzMTg5RS02OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjk0IHJlbWFpbmRlciA0NTA2NjUzNDYxLjQ0MTQ5NzQyMzM2NzgzMzE3NzExNjkgLTc0OTU1NDcwLjk3NzY1MzAzODAxMDAzMTQ1NzE4MTk1N0UtODg3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzI5NCBzdWJ0cmFjdCA0NTA2NjUzNDYxLjQ0MTQ5NzQyMzM2NzgzMzE3NzExNjkgLTc0OTU1NDcwLjk3NzY1MzAzODAxMDAzMTQ1NzE4MTk1N0UtODg3IC0+IDQ1MDY2NTM0NjEuNDQxNDk3NDIzMzY3ODMzMTc3MTE2OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjk1IGFkZCAyMzc3Ny44NTc5NTExMTQ5Njc2ODQ3Njc2MDk0MDE2MjYgNzIwNzYwLjAzODk3MTQ0MTU3MDEyMzAxMzg1MjI3NTI4IC0+IDc0NDUzNy44OTY5MjI1NTY1Mzc4MDc3ODE0NjE2NzY5MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjk1IGNvbXBhcmUgMjM3NzcuODU3OTUxMTE0OTY3Njg0NzY3NjA5NDAxNjI2IDcyMDc2MC4wMzg5NzE0NDE1NzAxMjMwMTM4NTIyNzUyOCAtPiAtMQorZGl2eDMyOTUgZGl2aWRlIDIzNzc3Ljg1Nzk1MTExNDk2NzY4NDc2NzYwOTQwMTYyNiA3MjA3NjAuMDM4OTcxNDQxNTcwMTIzMDEzODUyMjc1MjggLT4gMC4wMzI5ODk5NzgxNjk0OTg4MDgyNzUzMDgwMzkwMzQ3OTUgSW5leGFjdCBSb3VuZGVkCitkdml4MzI5NSBkaXZpZGVpbnQgMjM3NzcuODU3OTUxMTE0OTY3Njg0NzY3NjA5NDAxNjI2IDcyMDc2MC4wMzg5NzE0NDE1NzAxMjMwMTM4NTIyNzUyOCAtPiAwCittdWx4MzI5NSBtdWx0aXBseSAyMzc3Ny44NTc5NTExMTQ5Njc2ODQ3Njc2MDk0MDE2MjYgNzIwNzYwLjAzODk3MTQ0MTU3MDEyMzAxMzg1MjI3NTI4IC0+IDE3MTM4MTI5ODIzLjUwMzAyNTkxMzAzNDk4NzUzNzA5NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjk1IHBvd2VyIDIzNzc3Ljg1Nzk1MTExNDk2NzY4NDc2NzYwOTQwMTYyNiA3MjA3NjAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzI5NSByZW1haW5kZXIgMjM3NzcuODU3OTUxMTE0OTY3Njg0NzY3NjA5NDAxNjI2IDcyMDc2MC4wMzg5NzE0NDE1NzAxMjMwMTM4NTIyNzUyOCAtPiAyMzc3Ny44NTc5NTExMTQ5Njc2ODQ3Njc2MDk0MDE2MjYKK3N1YngzMjk1IHN1YnRyYWN0IDIzNzc3Ljg1Nzk1MTExNDk2NzY4NDc2NzYwOTQwMTYyNiA3MjA3NjAuMDM4OTcxNDQxNTcwMTIzMDEzODUyMjc1MjggLT4gLTY5Njk4Mi4xODEwMjAzMjY2MDI0MzgyNDYyNDI4NzM2NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjk2IGFkZCAtMjEzMzc4NTMzMjM5ODA4NTgwNTUyOTI0Njk2MTE5NDggNjA4MDI3Mjg0MC4zMDcxNDkwNDQ1MjU2Nzg2OTgyMTAwRSs1MzIgLT4gNi4wODAyNzI4NDAzMDcxNDkwNDQ1MjU2Nzg2OTgyMTAwRSs1NDEgSW5leGFjdCBSb3VuZGVkCitjb214MzI5NiBjb21wYXJlIC0yMTMzNzg1MzMyMzk4MDg1ODA1NTI5MjQ2OTYxMTk0OCA2MDgwMjcyODQwLjMwNzE0OTA0NDUyNTY3ODY5ODIxMDBFKzUzMiAtPiAtMQorZGl2eDMyOTYgZGl2aWRlIC0yMTMzNzg1MzMyMzk4MDg1ODA1NTI5MjQ2OTYxMTk0OCA2MDgwMjcyODQwLjMwNzE0OTA0NDUyNTY3ODY5ODIxMDBFKzUzMiAtPiAtMy41MDkzNTc4NjY3Mjc0MDIwMTIzNzg4NTE0MDY5ODg1RS01MTEgSW5leGFjdCBSb3VuZGVkCitkdml4MzI5NiBkaXZpZGVpbnQgLTIxMzM3ODUzMzIzOTgwODU4MDU1MjkyNDY5NjExOTQ4IDYwODAyNzI4NDAuMzA3MTQ5MDQ0NTI1Njc4Njk4MjEwMEUrNTMyIC0+IC0wCittdWx4MzI5NiBtdWx0aXBseSAtMjEzMzc4NTMzMjM5ODA4NTgwNTUyOTI0Njk2MTE5NDggNjA4MDI3Mjg0MC4zMDcxNDkwNDQ1MjU2Nzg2OTgyMTAwRSs1MzIgLT4gLTEuMjk3Mzk5NzAwMzYyNTg0MzMxNzQxNzk4MTkwMjE5OEUrNTczIEluZXhhY3QgUm91bmRlZAorcG93eDMyOTYgcG93ZXIgLTIxMzM3ODUzMzIzOTgwODU4MDU1MjkyNDY5NjExOTQ4IDYgLT4gOS40Mzg1Mjk4MzIxMzA0OTcwMzA2MTgwNjUyMDk3ODc0RSsxODcgSW5leGFjdCBSb3VuZGVkCityZW14MzI5NiByZW1haW5kZXIgLTIxMzM3ODUzMzIzOTgwODU4MDU1MjkyNDY5NjExOTQ4IDYwODAyNzI4NDAuMzA3MTQ5MDQ0NTI1Njc4Njk4MjEwMEUrNTMyIC0+IC0yMTMzNzg1MzMyMzk4MDg1ODA1NTI5MjQ2OTYxMTk0OAorc3VieDMyOTYgc3VidHJhY3QgLTIxMzM3ODUzMzIzOTgwODU4MDU1MjkyNDY5NjExOTQ4IDYwODAyNzI4NDAuMzA3MTQ5MDQ0NTI1Njc4Njk4MjEwMEUrNTMyIC0+IC02LjA4MDI3Mjg0MDMwNzE0OTA0NDUyNTY3ODY5ODIxMDBFKzU0MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjk3IGFkZCAtODE4NDA5MjM4LjA0MjM4OTM0Mzk4NDk3NDM4NTY5NDcgNzU2LjM5MTU2MjY1OTcyNzUzMjU5MjY3MDY5MTU4NzYwIC0+IC04MTg0MDg0ODEuNjUwODI2Njg0MjU3NDQxNzkzMDI0MDEgSW5leGFjdCBSb3VuZGVkCitjb214MzI5NyBjb21wYXJlIC04MTg0MDkyMzguMDQyMzg5MzQzOTg0OTc0Mzg1Njk0NyA3NTYuMzkxNTYyNjU5NzI3NTMyNTkyNjcwNjkxNTg3NjAgLT4gLTEKK2RpdngzMjk3IGRpdmlkZSAtODE4NDA5MjM4LjA0MjM4OTM0Mzk4NDk3NDM4NTY5NDcgNzU2LjM5MTU2MjY1OTcyNzUzMjU5MjY3MDY5MTU4NzYwIC0+IC0xMDgxOTkxLjQ5NTQ2OTA3NTI2NzY0OTQxMjk0OTM0MDMgSW5leGFjdCBSb3VuZGVkCitkdml4MzI5NyBkaXZpZGVpbnQgLTgxODQwOTIzOC4wNDIzODkzNDM5ODQ5NzQzODU2OTQ3IDc1Ni4zOTE1NjI2NTk3Mjc1MzI1OTI2NzA2OTE1ODc2MCAtPiAtMTA4MTk5MQorbXVseDMyOTcgbXVsdGlwbHkgLTgxODQwOTIzOC4wNDIzODkzNDM5ODQ5NzQzODU2OTQ3IDc1Ni4zOTE1NjI2NTk3Mjc1MzI1OTI2NzA2OTE1ODc2MCAtPiAtNjE5MDM3ODQyNDU4LjAzOTgwNTM3MzcwMzI4MjUyODE3IEluZXhhY3QgUm91bmRlZAorcG93eDMyOTcgcG93ZXIgLTgxODQwOTIzOC4wNDIzODkzNDM5ODQ5NzQzODU2OTQ3IDc1NiAtPiAxLjYwNTg4ODM5NDYzNzMyMzI3NTA5OTU1NDM1NzM0NjFFKzY3MzggSW5leGFjdCBSb3VuZGVkCityZW14MzI5NyByZW1haW5kZXIgLTgxODQwOTIzOC4wNDIzODkzNDM5ODQ5NzQzODU2OTQ3IDc1Ni4zOTE1NjI2NTk3Mjc1MzI1OTI2NzA2OTE1ODc2MCAtPiAtMzc0Ljc2ODYyODA5MTI2NzQ5ODAzMTQzMzE0MTA4ODQwCitzdWJ4MzI5NyBzdWJ0cmFjdCAtODE4NDA5MjM4LjA0MjM4OTM0Mzk4NDk3NDM4NTY5NDcgNzU2LjM5MTU2MjY1OTcyNzUzMjU5MjY3MDY5MTU4NzYwIC0+IC04MTg0MDk5OTQuNDMzOTUyMDAzNzEyNTA2OTc4MzY1MzkgSW5leGFjdCBSb3VuZGVkCithZGR4MzI5OCBhZGQgNDc1NjczODAzODQ5NDMuODcwMTM2MDAyODYxNTUwNDYgNjUuMDg0NzA5Mzc0OTA4Mjc1ODI2OTQyMDc2NDgwMzI2IC0+IDQ3NTY3MzgwMzg1MDA4Ljk1NDg0NTM3Nzc2OTgyNjI4NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjk4IGNvbXBhcmUgNDc1NjczODAzODQ5NDMuODcwMTM2MDAyODYxNTUwNDYgNjUuMDg0NzA5Mzc0OTA4Mjc1ODI2OTQyMDc2NDgwMzI2IC0+IDEKK2RpdngzMjk4IGRpdmlkZSA0NzU2NzM4MDM4NDk0My44NzAxMzYwMDI4NjE1NTA0NiA2NS4wODQ3MDkzNzQ5MDgyNzU4MjY5NDIwNzY0ODAzMjYgLT4gNzMwODUzMzg4NDgwLjg2MjQ3NjkwNDc0MzAzNDkzOTcyIEluZXhhY3QgUm91bmRlZAorZHZpeDMyOTggZGl2aWRlaW50IDQ3NTY3MzgwMzg0OTQzLjg3MDEzNjAwMjg2MTU1MDQ2IDY1LjA4NDcwOTM3NDkwODI3NTgyNjk0MjA3NjQ4MDMyNiAtPiA3MzA4NTMzODg0ODAKK211bHgzMjk4IG11bHRpcGx5IDQ3NTY3MzgwMzg0OTQzLjg3MDEzNjAwMjg2MTU1MDQ2IDY1LjA4NDcwOTM3NDkwODI3NTgyNjk0MjA3NjQ4MDMyNiAtPiAzMDk1OTA5MTI4MDc5Nzg0LjMzNDg1OTE0NzI5OTk0NjggSW5leGFjdCBSb3VuZGVkCitwb3d4MzI5OCBwb3dlciA0NzU2NzM4MDM4NDk0My44NzAxMzYwMDI4NjE1NTA0NiA2NSAtPiAxLjA1OTQ5ODI4NzY3NjMyMTQzMDEwNDI0Mzc0ODI2MzRFKzg4OSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjk4IHJlbWFpbmRlciA0NzU2NzM4MDM4NDk0My44NzAxMzYwMDI4NjE1NTA0NiA2NS4wODQ3MDkzNzQ5MDgyNzU4MjY5NDIwNzY0ODAzMjYgLT4gNTYuMTM0MDU4Njg3NzcwODc4MTI2NDMwODQ0OTU1NTIwCitzdWJ4MzI5OCBzdWJ0cmFjdCA0NzU2NzM4MDM4NDk0My44NzAxMzYwMDI4NjE1NTA0NiA2NS4wODQ3MDkzNzQ5MDgyNzU4MjY5NDIwNzY0ODAzMjYgLT4gNDc1NjczODAzODQ4NzguNzg1NDI2NjI3OTUzMjc0NjMzIEluZXhhY3QgUm91bmRlZAorYWRkeDMyOTkgYWRkIC0yOTY2MTU1NDQuMDU4OTc5ODQ1NDUxMjcxMTUyOTAyNTEgLTU0MTYxMTUuNDMxNTA1MzUzNjAxNDAxNjQ1MDk3MzI2NCAtPiAtMzAyMDMxNjU5LjQ5MDQ4NTE5OTA1MjY3Mjc5Nzk5OTg0IEluZXhhY3QgUm91bmRlZAorY29teDMyOTkgY29tcGFyZSAtMjk2NjE1NTQ0LjA1ODk3OTg0NTQ1MTI3MTE1MjkwMjUxIC01NDE2MTE1LjQzMTUwNTM1MzYwMTQwMTY0NTA5NzMyNjQgLT4gLTEKK2RpdngzMjk5IGRpdmlkZSAtMjk2NjE1NTQ0LjA1ODk3OTg0NTQ1MTI3MTE1MjkwMjUxIC01NDE2MTE1LjQzMTUwNTM1MzYwMTQwMTY0NTA5NzMyNjQgLT4gNTQuNzY1MzY2MDI4NDk2NjY0NTMwNjg4MjU5MjcyNTkxIEluZXhhY3QgUm91bmRlZAorZHZpeDMyOTkgZGl2aWRlaW50IC0yOTY2MTU1NDQuMDU4OTc5ODQ1NDUxMjcxMTUyOTAyNTEgLTU0MTYxMTUuNDMxNTA1MzUzNjAxNDAxNjQ1MDk3MzI2NCAtPiA1NAorbXVseDMyOTkgbXVsdGlwbHkgLTI5NjYxNTU0NC4wNTg5Nzk4NDU0NTEyNzExNTI5MDI1MSAtNTQxNjExNS40MzE1MDUzNTM2MDE0MDE2NDUwOTczMjY0IC0+IDE2MDY1MDQwMjU0MDIxOTYuODQ4NDg4NTM4NjUwMTQ3OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjk5IHBvd2VyIC0yOTY2MTU1NDQuMDU4OTc5ODQ1NDUxMjcxMTUyOTAyNTEgLTU0MTYxMTUgLT4gLTBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjk5IHJlbWFpbmRlciAtMjk2NjE1NTQ0LjA1ODk3OTg0NTQ1MTI3MTE1MjkwMjUxIC01NDE2MTE1LjQzMTUwNTM1MzYwMTQwMTY0NTA5NzMyNjQgLT4gLTQxNDUzMTAuNzU3NjkwNzUwOTc1NTgyMzE3NjQ2ODg0NAorc3VieDMyOTkgc3VidHJhY3QgLTI5NjYxNTU0NC4wNTg5Nzk4NDU0NTEyNzExNTI5MDI1MSAtNTQxNjExNS40MzE1MDUzNTM2MDE0MDE2NDUwOTczMjY0IC0+IC0yOTExOTk0MjguNjI3NDc0NDkxODQ5ODY5NTA3ODA1MTggSW5leGFjdCBSb3VuZGVkCithZGR4MzMwMCBhZGQgNjEzOTE3MDU5MTQuMDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3MzkgLTY3NTk4MjA4NzcyMS45MTg1NjQ1NjEyNTI0MjI5NzM0NiAtPiA2LjEzOTE3MDU5MTQwNDY3MDcxODA2NTIxODUyNDc1ODRFKzc0OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMzAwIGNvbXBhcmUgNjEzOTE3MDU5MTQuMDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3MzkgLTY3NTk4MjA4NzcyMS45MTg1NjQ1NjEyNTI0MjI5NzM0NiAtPiAxCitkaXZ4MzMwMCBkaXZpZGUgNjEzOTE3MDU5MTQuMDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3MzkgLTY3NTk4MjA4NzcyMS45MTg1NjQ1NjEyNTI0MjI5NzM0NiAtPiAtOS4wODE4NTM5NDY4OTA2MjQ4NTkzNjk5NzAwMDQwMDY4RSs3MzcgSW5leGFjdCBSb3VuZGVkCitkdml4MzMwMCBkaXZpZGVpbnQgNjEzOTE3MDU5MTQuMDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3MzkgLTY3NTk4MjA4NzcyMS45MTg1NjQ1NjEyNTI0MjI5NzM0NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMzMDAgbXVsdGlwbHkgNjEzOTE3MDU5MTQuMDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3MzkgLTY3NTk4MjA4NzcyMS45MTg1NjQ1NjEyNTI0MjI5NzM0NiAtPiAtNC4xNDk5NjkzNTMyNTg3MzQ3OTQ0ODkwMzAwMTc2MjkwRSs3NjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzMwMCBwb3dlciA2MTM5MTcwNTkxNC4wNDY3MDcxODA2NTIxODUyNDc1ODRFKzczOSAtNyAtPiAzLjA0MjUxMDUyOTEyMTA5NDc0NzM0MjA5OTk4OTAxMjRFLTUyNDkgSW5leGFjdCBSb3VuZGVkCityZW14MzMwMCByZW1haW5kZXIgNjEzOTE3MDU5MTQuMDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3MzkgLTY3NTk4MjA4NzcyMS45MTg1NjQ1NjEyNTI0MjI5NzM0NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMzMDAgc3VidHJhY3QgNjEzOTE3MDU5MTQuMDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3MzkgLTY3NTk4MjA4NzcyMS45MTg1NjQ1NjEyNTI0MjI5NzM0NiAtPiA2LjEzOTE3MDU5MTQwNDY3MDcxODA2NTIxODUyNDc1ODRFKzc0OSBJbmV4YWN0IFJvdW5kZWQKKworLS0gcmFuZG9tbHkgZ2VuZXJhdGVkIHRlc3RjYXNlcyBbMjYgU2VwIDIwMDFdCitwcmVjaXNpb246IDMzCityb3VuZGluZzogaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OTkKKworYWRkeDM0MDEgYWRkIDA0Mi42NjgwNTY4MzA0ODU1NzE0Mjg4NzcyMTI5NDQ0MTggLTAxMzY0MTEyMzc0NjM5LjQ5NDExMjQwMTY0NTUzMjEwNzEgLT4gLTEzNjQxMTIzNzQ1OTYuODI2MDU1NTcxMTU5OTYwNjc4MjIgSW5leGFjdCBSb3VuZGVkCitjb214MzQwMSBjb21wYXJlIDA0Mi42NjgwNTY4MzA0ODU1NzE0Mjg4NzcyMTI5NDQ0MTggLTAxMzY0MTEyMzc0NjM5LjQ5NDExMjQwMTY0NTUzMjEwNzEgLT4gMQorZGl2eDM0MDEgZGl2aWRlIDA0Mi42NjgwNTY4MzA0ODU1NzE0Mjg4NzcyMTI5NDQ0MTggLTAxMzY0MTEyMzc0NjM5LjQ5NDExMjQwMTY0NTUzMjEwNzEgLT4gLTMuMTI3ODk4OTYzNzMxNzY5NjMxNjA4MTExNTA1OTM4NjdFLTExIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MDEgZGl2aWRlaW50IDA0Mi42NjgwNTY4MzA0ODU1NzE0Mjg4NzcyMTI5NDQ0MTggLTAxMzY0MTEyMzc0NjM5LjQ5NDExMjQwMTY0NTUzMjEwNzEgLT4gLTAKK211bHgzNDAxIG11bHRpcGx5IDA0Mi42NjgwNTY4MzA0ODU1NzE0Mjg4NzcyMTI5NDQ0MTggLTAxMzY0MTEyMzc0NjM5LjQ5NDExMjQwMTY0NTUzMjEwNzEgLT4gLTU4MjA0MDI0MzI0Mjg2LjU1OTU0NTMwNjYwNjUyMzQ5MjMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQwMSBwb3dlciAwNDIuNjY4MDU2ODMwNDg1NTcxNDI4ODc3MjEyOTQ0NDE4IC0xIC0+IDAuMDIzNDM2NzM2Mzg1MDg2OTc0NDUyMzQxNzIyNzE0ODkwOSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDAxIHJlbWFpbmRlciAwNDIuNjY4MDU2ODMwNDg1NTcxNDI4ODc3MjEyOTQ0NDE4IC0wMTM2NDExMjM3NDYzOS40OTQxMTI0MDE2NDU1MzIxMDcxIC0+IDQyLjY2ODA1NjgzMDQ4NTU3MTQyODg3NzIxMjk0NDQxOAorc3VieDM0MDEgc3VidHJhY3QgMDQyLjY2ODA1NjgzMDQ4NTU3MTQyODg3NzIxMjk0NDQxOCAtMDEzNjQxMTIzNzQ2MzkuNDk0MTEyNDAxNjQ1NTMyMTA3MSAtPiAxMzY0MTEyMzc0NjgyLjE2MjE2OTIzMjEzMTEwMzUzNTk4IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MDIgYWRkIC0zMjcuMTc5NDI2MzQxNjUzMjU2MzYzNTMxODA5MjI3MzQ0RSs0NTMgNzU5MDY3NDU3LjEwNzUxODY2MzQ0NDg5OTM1Njc2MDc5MyAtPiAtMy4yNzE3OTQyNjM0MTY1MzI1NjM2MzUzMTgwOTIyNzM0NEUrNDU1IEluZXhhY3QgUm91bmRlZAorY29teDM0MDIgY29tcGFyZSAtMzI3LjE3OTQyNjM0MTY1MzI1NjM2MzUzMTgwOTIyNzM0NEUrNDUzIDc1OTA2NzQ1Ny4xMDc1MTg2NjM0NDQ4OTkzNTY3NjA3OTMgLT4gLTEKK2RpdngzNDAyIGRpdmlkZSAtMzI3LjE3OTQyNjM0MTY1MzI1NjM2MzUzMTgwOTIyNzM0NEUrNDUzIDc1OTA2NzQ1Ny4xMDc1MTg2NjM0NDQ4OTkzNTY3NjA3OTMgLT4gLTQuMzEwMjgxMjk2ODQ4MDMwODMyNTU3MDQ2ODA2MTE1ODlFKzQ0NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDAyIGRpdmlkZWludCAtMzI3LjE3OTQyNjM0MTY1MzI1NjM2MzUzMTgwOTIyNzM0NEUrNDUzIDc1OTA2NzQ1Ny4xMDc1MTg2NjM0NDQ4OTkzNTY3NjA3OTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDAyIG11bHRpcGx5IC0zMjcuMTc5NDI2MzQxNjUzMjU2MzYzNTMxODA5MjI3MzQ0RSs0NTMgNzU5MDY3NDU3LjEwNzUxODY2MzQ0NDg5OTM1Njc2MDc5MyAtPiAtMi40ODM1MTI1NTE3MTA1NTQ0NTExMDU1ODYxMzYyNzM3OUUrNDY0IEluZXhhY3QgUm91bmRlZAorcG93eDM0MDIgcG93ZXIgLTMyNy4xNzk0MjYzNDE2NTMyNTYzNjM1MzE4MDkyMjczNDRFKzQ1MyA3NTkwNjc0NTcgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDM0MDIgcmVtYWluZGVyIC0zMjcuMTc5NDI2MzQxNjUzMjU2MzYzNTMxODA5MjI3MzQ0RSs0NTMgNzU5MDY3NDU3LjEwNzUxODY2MzQ0NDg5OTM1Njc2MDc5MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0MDIgc3VidHJhY3QgLTMyNy4xNzk0MjYzNDE2NTMyNTYzNjM1MzE4MDkyMjczNDRFKzQ1MyA3NTkwNjc0NTcuMTA3NTE4NjYzNDQ0ODk5MzU2NzYwNzkzIC0+IC0zLjI3MTc5NDI2MzQxNjUzMjU2MzYzNTMxODA5MjI3MzQ0RSs0NTUgSW5leGFjdCBSb3VuZGVkCithZGR4MzQwMyBhZGQgODE3MjEuNTgwMzA5NjE4NTQyMjc4NzcwMjUzODQ5MzQ3MSA5MDAwOTk0NzMuMjQ1ODA5NjI4MDc2NzkwNzU3MjE3MzI4IC0+IDkwMDE4MTE5NC44MjYxMTkyNDY2MTkwNjk1Mjc0NzExNzcgSW5leGFjdCBSb3VuZGVkCitjb214MzQwMyBjb21wYXJlIDgxNzIxLjU4MDMwOTYxODU0MjI3ODc3MDI1Mzg0OTM0NzEgOTAwMDk5NDczLjI0NTgwOTYyODA3Njc5MDc1NzIxNzMyOCAtPiAtMQorZGl2eDM0MDMgZGl2aWRlIDgxNzIxLjU4MDMwOTYxODU0MjI3ODc3MDI1Mzg0OTM0NzEgOTAwMDk5NDczLjI0NTgwOTYyODA3Njc5MDc1NzIxNzMyOCAtPiAwLjAwMDA5MDc5MTcyMTA2OTM2NzkyMjA2MTA1MTEzMTk4MTI4MjYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQwMyBkaXZpZGVpbnQgODE3MjEuNTgwMzA5NjE4NTQyMjc4NzcwMjUzODQ5MzQ3MSA5MDAwOTk0NzMuMjQ1ODA5NjI4MDc2NzkwNzU3MjE3MzI4IC0+IDAKK211bHgzNDAzIG11bHRpcGx5IDgxNzIxLjU4MDMwOTYxODU0MjI3ODc3MDI1Mzg0OTM0NzEgOTAwMDk5NDczLjI0NTgwOTYyODA3Njc5MDc1NzIxNzMyOCAtPiA3MzU1NzU1MTM4OTUwMi43Nzc5OTc5MDQyNDUzMTAyOTI2IEluZXhhY3QgUm91bmRlZAorcG93eDM0MDMgcG93ZXIgODE3MjEuNTgwMzA5NjE4NTQyMjc4NzcwMjUzODQ5MzQ3MSA5MDAwOTk0NzMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQwMyByZW1haW5kZXIgODE3MjEuNTgwMzA5NjE4NTQyMjc4NzcwMjUzODQ5MzQ3MSA5MDAwOTk0NzMuMjQ1ODA5NjI4MDc2NzkwNzU3MjE3MzI4IC0+IDgxNzIxLjU4MDMwOTYxODU0MjI3ODc3MDI1Mzg0OTM0NzEKK3N1YngzNDAzIHN1YnRyYWN0IDgxNzIxLjU4MDMwOTYxODU0MjI3ODc3MDI1Mzg0OTM0NzEgOTAwMDk5NDczLjI0NTgwOTYyODA3Njc5MDc1NzIxNzMyOCAtPiAtOTAwMDE3NzUxLjY2NTUwMDAwOTUzNDUxMTk4Njk2MzQ3OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDA0IGFkZCAzOTkxLjU2NzM0NjM1MTgzNDAzODE0NjM2MzU0MzkyMTYzRS04MDcgNzIuMzIzOTgyMjI1NTg3MTMwNTczMTMxNDU2NTA2OTEzMiAtPiA3Mi4zMjM5ODIyMjU1ODcxMzA1NzMxMzE0NTY1MDY5MTMyIEluZXhhY3QgUm91bmRlZAorY29teDM0MDQgY29tcGFyZSAzOTkxLjU2NzM0NjM1MTgzNDAzODE0NjM2MzU0MzkyMTYzRS04MDcgNzIuMzIzOTgyMjI1NTg3MTMwNTczMTMxNDU2NTA2OTEzMiAtPiAtMQorZGl2eDM0MDQgZGl2aWRlIDM5OTEuNTY3MzQ2MzUxODM0MDM4MTQ2MzYzNTQzOTIxNjNFLTgwNyA3Mi4zMjM5ODIyMjU1ODcxMzA1NzMxMzE0NTY1MDY5MTMyIC0+IDUuNTE5MDA5MzU2OTUzOTA2NjQ5ODQ1OTgyNDgxMTUyOTBFLTgwNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDA0IGRpdmlkZWludCAzOTkxLjU2NzM0NjM1MTgzNDAzODE0NjM2MzU0MzkyMTYzRS04MDcgNzIuMzIzOTgyMjI1NTg3MTMwNTczMTMxNDU2NTA2OTEzMiAtPiAwCittdWx4MzQwNCBtdWx0aXBseSAzOTkxLjU2NzM0NjM1MTgzNDAzODE0NjM2MzU0MzkyMTYzRS04MDcgNzIuMzIzOTgyMjI1NTg3MTMwNTczMTMxNDU2NTA2OTEzMiAtPiAyLjg4Njg2MDQ1ODA5Nzg0MDM0Nzk0ODAzOTI4MTc3ODU0RS04MDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQwNCBwb3dlciAzOTkxLjU2NzM0NjM1MTgzNDAzODE0NjM2MzU0MzkyMTYzRS04MDcgNzIgLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0MDQgcmVtYWluZGVyIDM5OTEuNTY3MzQ2MzUxODM0MDM4MTQ2MzYzNTQzOTIxNjNFLTgwNyA3Mi4zMjM5ODIyMjU1ODcxMzA1NzMxMzE0NTY1MDY5MTMyIC0+IDMuOTkxNTY3MzQ2MzUxODM0MDM4MTQ2MzYzNTQzOTIxNjNFLTgwNAorc3VieDM0MDQgc3VidHJhY3QgMzk5MS41NjczNDYzNTE4MzQwMzgxNDYzNjM1NDM5MjE2M0UtODA3IDcyLjMyMzk4MjIyNTU4NzEzMDU3MzEzMTQ1NjUwNjkxMzIgLT4gLTcyLjMyMzk4MjIyNTU4NzEzMDU3MzEzMTQ1NjUwNjkxMzIgSW5leGFjdCBSb3VuZGVkCithZGR4MzQwNSBhZGQgLTY2LjMzOTMzMDg1OTU5NTc3MjY0NTY0MTY5NzkxNjMzMDYgNS4wODQ4NjU3MzA1MDQ1OTIxMzg2NDY4NDU4OTY2MjU1OSAtPiAtNjEuMjU0NDY1MTI5MDkxMTgwNTA2OTk0ODUyMDE5NzA1MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDA1IGNvbXBhcmUgLTY2LjMzOTMzMDg1OTU5NTc3MjY0NTY0MTY5NzkxNjMzMDYgNS4wODQ4NjU3MzA1MDQ1OTIxMzg2NDY4NDU4OTY2MjU1OSAtPiAtMQorZGl2eDM0MDUgZGl2aWRlIC02Ni4zMzkzMzA4NTk1OTU3NzI2NDU2NDE2OTc5MTYzMzA2IDUuMDg0ODY1NzMwNTA0NTkyMTM4NjQ2ODQ1ODk2NjI1NTkgLT4gLTEzLjA0NjQyNzI1NjAwNzkyNzY2OTQ3NDk5MjQ5MTU4NTAgSW5leGFjdCBSb3VuZGVkCitkdml4MzQwNSBkaXZpZGVpbnQgLTY2LjMzOTMzMDg1OTU5NTc3MjY0NTY0MTY5NzkxNjMzMDYgNS4wODQ4NjU3MzA1MDQ1OTIxMzg2NDY4NDU4OTY2MjU1OSAtPiAtMTMKK211bHgzNDA1IG11bHRpcGx5IC02Ni4zMzkzMzA4NTk1OTU3NzI2NDU2NDE2OTc5MTYzMzA2IDUuMDg0ODY1NzMwNTA0NTkyMTM4NjQ2ODQ1ODk2NjI1NTkgLT4gLTMzNy4zMjY1OTAwNzI1NjQyOTA4MTM1MzkwMzYyODAyMDUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQwNSBwb3dlciAtNjYuMzM5MzMwODU5NTk1NzcyNjQ1NjQxNjk3OTE2MzMwNiA1IC0+IC0xMjg0ODU4ODg4LjI3Mjg1ODIyMjU5MTg0ODk2NjY3OTkwIEluZXhhY3QgUm91bmRlZAorcmVteDM0MDUgcmVtYWluZGVyIC02Ni4zMzkzMzA4NTk1OTU3NzI2NDU2NDE2OTc5MTYzMzA2IDUuMDg0ODY1NzMwNTA0NTkyMTM4NjQ2ODQ1ODk2NjI1NTkgLT4gLTAuMjM2MDc2MzYzMDM2MDc0ODQzMjMyNzAxMjYwMTk3OTMKK3N1YngzNDA1IHN1YnRyYWN0IC02Ni4zMzkzMzA4NTk1OTU3NzI2NDU2NDE2OTc5MTYzMzA2IDUuMDg0ODY1NzMwNTA0NTkyMTM4NjQ2ODQ1ODk2NjI1NTkgLT4gLTcxLjQyNDE5NjU5MDEwMDM2NDc4NDI4ODU0MzgxMjk1NjIgSW5leGFjdCBSb3VuZGVkCithZGR4MzQwNiBhZGQgLTM5MzYwNi44NzM3MDM1Njc3NTMyNTUwOTcwOTUyMDgxMTJFKzExMSAtMjEyNDMzOTU1MC44Njg5MTA5MzIwMDc1ODA5NTY2MDU1NyAtPiAtMy45MzYwNjg3MzcwMzU2Nzc1MzI1NTA5NzA5NTIwODExMkUrMTE2IEluZXhhY3QgUm91bmRlZAorY29teDM0MDYgY29tcGFyZSAtMzkzNjA2Ljg3MzcwMzU2Nzc1MzI1NTA5NzA5NTIwODExMkUrMTExIC0yMTI0MzM5NTUwLjg2ODkxMDkzMjAwNzU4MDk1NjYwNTU3IC0+IC0xCitkaXZ4MzQwNiBkaXZpZGUgLTM5MzYwNi44NzM3MDM1Njc3NTMyNTUwOTcwOTUyMDgxMTJFKzExMSAtMjEyNDMzOTU1MC44Njg5MTA5MzIwMDc1ODA5NTY2MDU1NyAtPiAxLjg1Mjg0MzUwMzk2MTM3MDc1MDEwNDI4NzM2NTY0NzM3RSsxMDcgSW5leGFjdCBSb3VuZGVkCitkdml4MzQwNiBkaXZpZGVpbnQgLTM5MzYwNi44NzM3MDM1Njc3NTMyNTUwOTcwOTUyMDgxMTJFKzExMSAtMjEyNDMzOTU1MC44Njg5MTA5MzIwMDc1ODA5NTY2MDU1NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0MDYgbXVsdGlwbHkgLTM5MzYwNi44NzM3MDM1Njc3NTMyNTUwOTcwOTUyMDgxMTJFKzExMSAtMjEyNDMzOTU1MC44Njg5MTA5MzIwMDc1ODA5NTY2MDU1NyAtPiA4LjM2MTU0NjQ5MzAyMzUzMjY5ODE4ODAxMjYzMjc1OTQxRSsxMjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQwNiBwb3dlciAtMzkzNjA2Ljg3MzcwMzU2Nzc1MzI1NTA5NzA5NTIwODExMkUrMTExIC0yIC0+IDYuNDU0Njc5MDQxMjMxMDM1NjA1Mjg5MTk3NDc2ODg0NDNFLTIzNCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDA2IHJlbWFpbmRlciAtMzkzNjA2Ljg3MzcwMzU2Nzc1MzI1NTA5NzA5NTIwODExMkUrMTExIC0yMTI0MzM5NTUwLjg2ODkxMDkzMjAwNzU4MDk1NjYwNTU3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQwNiBzdWJ0cmFjdCAtMzkzNjA2Ljg3MzcwMzU2Nzc1MzI1NTA5NzA5NTIwODExMkUrMTExIC0yMTI0MzM5NTUwLjg2ODkxMDkzMjAwNzU4MDk1NjYwNTU3IC0+IC0zLjkzNjA2ODczNzAzNTY3NzUzMjU1MDk3MDk1MjA4MTEyRSsxMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MzQwNyBhZGQgLTAxOTEzMzU5OC42MDk4MTI1MjQ2MjIxNTA0MjE1ODQzNDYgLTg1ODQzOTg0Ni42MjgzNjc3MzQ2NDI2MjI5MjIwMzAwNTEgLT4gLTg3NzU3MzQ0NS4yMzgxODAyNTkyNjQ3NzMzNDM2MTQzOTcKK2NvbXgzNDA3IGNvbXBhcmUgLTAxOTEzMzU5OC42MDk4MTI1MjQ2MjIxNTA0MjE1ODQzNDYgLTg1ODQzOTg0Ni42MjgzNjc3MzQ2NDI2MjI5MjIwMzAwNTEgLT4gMQorZGl2eDM0MDcgZGl2aWRlIC0wMTkxMzM1OTguNjA5ODEyNTI0NjIyMTUwNDIxNTg0MzQ2IC04NTg0Mzk4NDYuNjI4MzY3NzM0NjQyNjIyOTIyMDMwMDUxIC0+IDAuMDIyMjg4ODA1MzA3NjMxMjU2NTc5NzQ2MDY1MDMxMTA3MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDA3IGRpdmlkZWludCAtMDE5MTMzNTk4LjYwOTgxMjUyNDYyMjE1MDQyMTU4NDM0NiAtODU4NDM5ODQ2LjYyODM2NzczNDY0MjYyMjkyMjAzMDA1MSAtPiAwCittdWx4MzQwNyBtdWx0aXBseSAtMDE5MTMzNTk4LjYwOTgxMjUyNDYyMjE1MDQyMTU4NDM0NiAtODU4NDM5ODQ2LjYyODM2NzczNDY0MjYyMjkyMjAzMDA1MSAtPiAxNjQyNTA0MzQ1NjA1NjIxMy43Mzk1MTkxNTE0MDI5Mjg4IEluZXhhY3QgUm91bmRlZAorcG93eDM0MDcgcG93ZXIgLTAxOTEzMzU5OC42MDk4MTI1MjQ2MjIxNTA0MjE1ODQzNDYgLTg1ODQzOTg0NyAtPiAtMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0MDcgcmVtYWluZGVyIC0wMTkxMzM1OTguNjA5ODEyNTI0NjIyMTUwNDIxNTg0MzQ2IC04NTg0Mzk4NDYuNjI4MzY3NzM0NjQyNjIyOTIyMDMwMDUxIC0+IC0xOTEzMzU5OC42MDk4MTI1MjQ2MjIxNTA0MjE1ODQzNDYKK3N1YngzNDA3IHN1YnRyYWN0IC0wMTkxMzM1OTguNjA5ODEyNTI0NjIyMTUwNDIxNTg0MzQ2IC04NTg0Mzk4NDYuNjI4MzY3NzM0NjQyNjIyOTIyMDMwMDUxIC0+IDgzOTMwNjI0OC4wMTg1NTUyMTAwMjA0NzI1MDA0NDU3MDUKK2FkZHgzNDA4IGFkZCA0NjUuMzUxOTgyMTU5MDQ2NTI1NzYyNzE1NTQ5NzYxODE0IDI0MDQ0NC45NzU5NDQ2NjY5MjQ2NTc2MjkxNzI4NDQ3ODAgLT4gMjQwOTEwLjMyNzkyNjgyNTk3MTE4MzM5MTg4ODM5NDU0MiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDA4IGNvbXBhcmUgNDY1LjM1MTk4MjE1OTA0NjUyNTc2MjcxNTU0OTc2MTgxNCAyNDA0NDQuOTc1OTQ0NjY2OTI0NjU3NjI5MTcyODQ0NzgwIC0+IC0xCitkaXZ4MzQwOCBkaXZpZGUgNDY1LjM1MTk4MjE1OTA0NjUyNTc2MjcxNTU0OTc2MTgxNCAyNDA0NDQuOTc1OTQ0NjY2OTI0NjU3NjI5MTcyODQ0NzgwIC0+IDAuMDAxOTM1Mzc4MjcyNDMzMjYxMjI3ODI5NzQxMzI4MjkwOTUgSW5leGFjdCBSb3VuZGVkCitkdml4MzQwOCBkaXZpZGVpbnQgNDY1LjM1MTk4MjE1OTA0NjUyNTc2MjcxNTU0OTc2MTgxNCAyNDA0NDQuOTc1OTQ0NjY2OTI0NjU3NjI5MTcyODQ0NzgwIC0+IDAKK211bHgzNDA4IG11bHRpcGx5IDQ2NS4zNTE5ODIxNTkwNDY1MjU3NjI3MTU1NDk3NjE4MTQgMjQwNDQ0Ljk3NTk0NDY2NjkyNDY1NzYyOTE3Mjg0NDc4MCAtPiAxMTE4OTE1NDYuMTU2MDM1MDEzNzgwMzcxMzk1NjY4Njc0IEluZXhhY3QgUm91bmRlZAorcG93eDM0MDggcG93ZXIgNDY1LjM1MTk4MjE1OTA0NjUyNTc2MjcxNTU0OTc2MTgxNCAyNDA0NDUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQwOCByZW1haW5kZXIgNDY1LjM1MTk4MjE1OTA0NjUyNTc2MjcxNTU0OTc2MTgxNCAyNDA0NDQuOTc1OTQ0NjY2OTI0NjU3NjI5MTcyODQ0NzgwIC0+IDQ2NS4zNTE5ODIxNTkwNDY1MjU3NjI3MTU1NDk3NjE4MTQKK3N1YngzNDA4IHN1YnRyYWN0IDQ2NS4zNTE5ODIxNTkwNDY1MjU3NjI3MTU1NDk3NjE4MTQgMjQwNDQ0Ljk3NTk0NDY2NjkyNDY1NzYyOTE3Mjg0NDc4MCAtPiAtMjM5OTc5LjYyMzk2MjUwNzg3ODEzMTg2NjQ1NzI5NTAxOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDA5IGFkZCAyODA2Njk1NTAwNDc4My4xMDc2ODI0MjIyODczMzg0ODI4IDU3MTY5OTk2OS4yMjA3NTM1MzU3NTg1MDQ5MDc1NjEwMTZFLTcxOCAtPiAyODA2Njk1NTAwNDc4My4xMDc2ODI0MjIyODczMzg0ODI4IEluZXhhY3QgUm91bmRlZAorY29teDM0MDkgY29tcGFyZSAyODA2Njk1NTAwNDc4My4xMDc2ODI0MjIyODczMzg0ODI4IDU3MTY5OTk2OS4yMjA3NTM1MzU3NTg1MDQ5MDc1NjEwMTZFLTcxOCAtPiAxCitkaXZ4MzQwOSBkaXZpZGUgMjgwNjY5NTUwMDQ3ODMuMTA3NjgyNDIyMjg3MzM4NDgyOCA1NzE2OTk5NjkuMjIwNzUzNTM1NzU4NTA0OTA3NTYxMDE2RS03MTggLT4gNC45MDkzODU0MzIxOTQzMjM5MDAxMzY1Njk2ODEyMzgxNUUrNzIyIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MDkgZGl2aWRlaW50IDI4MDY2OTU1MDA0NzgzLjEwNzY4MjQyMjI4NzMzODQ4MjggNTcxNjk5OTY5LjIyMDc1MzUzNTc1ODUwNDkwNzU2MTAxNkUtNzE4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQwOSBtdWx0aXBseSAyODA2Njk1NTAwNDc4My4xMDc2ODI0MjIyODczMzg0ODI4IDU3MTY5OTk2OS4yMjA3NTM1MzU3NTg1MDQ5MDc1NjEwMTZFLTcxOCAtPiAxLjYwNDU4NzczMTIzNTQ3NzcwNjkwNDUyMTk1NTY5MjIzRS02OTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQwOSBwb3dlciAyODA2Njk1NTAwNDc4My4xMDc2ODI0MjIyODczMzg0ODI4IDYgLT4gNC44ODg0NTY4OTkzODk1MTU4MzAyMDE3MTMyNTU2ODIxOEUrODAgSW5leGFjdCBSb3VuZGVkCityZW14MzQwOSByZW1haW5kZXIgMjgwNjY5NTUwMDQ3ODMuMTA3NjgyNDIyMjg3MzM4NDgyOCA1NzE2OTk5NjkuMjIwNzUzNTM1NzU4NTA0OTA3NTYxMDE2RS03MTggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDA5IHN1YnRyYWN0IDI4MDY2OTU1MDA0NzgzLjEwNzY4MjQyMjI4NzMzODQ4MjggNTcxNjk5OTY5LjIyMDc1MzUzNTc1ODUwNDkwNzU2MTAxNkUtNzE4IC0+IDI4MDY2OTU1MDA0NzgzLjEwNzY4MjQyMjI4NzMzODQ4MjggSW5leGFjdCBSb3VuZGVkCithZGR4MzQxMCBhZGQgMjgyNzUyMzY5MjczOTIuNDk2MDkwMjgyNDEwNTI0NjA0NyAyODIxMjAzOC40ODI1MjQzMTI3MDk2NjEzMTU4NDE5MjcwRSs0MjIgLT4gMi44MjEyMDM4NDgyNTI0MzEyNzA5NjYxMzE1ODQxOTI3MEUrNDI5IEluZXhhY3QgUm91bmRlZAorY29teDM0MTAgY29tcGFyZSAyODI3NTIzNjkyNzM5Mi40OTYwOTAyODI0MTA1MjQ2MDQ3IDI4MjEyMDM4LjQ4MjUyNDMxMjcwOTY2MTMxNTg0MTkyNzBFKzQyMiAtPiAtMQorZGl2eDM0MTAgZGl2aWRlIDI4Mjc1MjM2OTI3MzkyLjQ5NjA5MDI4MjQxMDUyNDYwNDcgMjgyMTIwMzguNDgyNTI0MzEyNzA5NjYxMzE1ODQxOTI3MEUrNDIyIC0+IDEuMDAyMjQwMTIzMzA0MzU5Mjc0Njc1NTkyMDM2ODg4NjFFLTQxNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDEwIGRpdmlkZWludCAyODI3NTIzNjkyNzM5Mi40OTYwOTAyODI0MTA1MjQ2MDQ3IDI4MjEyMDM4LjQ4MjUyNDMxMjcwOTY2MTMxNTg0MTkyNzBFKzQyMiAtPiAwCittdWx4MzQxMCBtdWx0aXBseSAyODI3NTIzNjkyNzM5Mi40OTYwOTAyODI0MTA1MjQ2MDQ3IDI4MjEyMDM4LjQ4MjUyNDMxMjcwOTY2MTMxNTg0MTkyNzBFKzQyMiAtPiA3Ljk3NzAyMDcyMjk4MDg5NjA1NzA2Nzk4NzcwMDEzNTYxRSs0NDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQxMCBwb3dlciAyODI3NTIzNjkyNzM5Mi40OTYwOTAyODI0MTA1MjQ2MDQ3IDMgLT4gMi4yNjA1NzQxNTU0NjYyMjE2MTM0NzMyMjA2MTI4MTUxNkUrNDAgSW5leGFjdCBSb3VuZGVkCityZW14MzQxMCByZW1haW5kZXIgMjgyNzUyMzY5MjczOTIuNDk2MDkwMjgyNDEwNTI0NjA0NyAyODIxMjAzOC40ODI1MjQzMTI3MDk2NjEzMTU4NDE5MjcwRSs0MjIgLT4gMjgyNzUyMzY5MjczOTIuNDk2MDkwMjgyNDEwNTI0NjA0Nworc3VieDM0MTAgc3VidHJhY3QgMjgyNzUyMzY5MjczOTIuNDk2MDkwMjgyNDEwNTI0NjA0NyAyODIxMjAzOC40ODI1MjQzMTI3MDk2NjEzMTU4NDE5MjcwRSs0MjIgLT4gLTIuODIxMjAzODQ4MjUyNDMxMjcwOTY2MTMxNTg0MTkyNzBFKzQyOSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDExIGFkZCAxMTc5MS44NjQ0MjExODc0NjMwMjM0MjcxODAxNzg5OTk2IC04LjQ1NDU3Mjc1OTMwMzYzODYwOTgyMjYxMzQzMTU5NzQxIC0+IDExNzgzLjQwOTg0ODQyODE1OTM4NDgxNzM1NzU2NTU2ODAgSW5leGFjdCBSb3VuZGVkCitjb214MzQxMSBjb21wYXJlIDExNzkxLjg2NDQyMTE4NzQ2MzAyMzQyNzE4MDE3ODk5OTYgLTguNDU0NTcyNzU5MzAzNjM4NjA5ODIyNjEzNDMxNTk3NDEgLT4gMQorZGl2eDM0MTEgZGl2aWRlIDExNzkxLjg2NDQyMTE4NzQ2MzAyMzQyNzE4MDE3ODk5OTYgLTguNDU0NTcyNzU5MzAzNjM4NjA5ODIyNjEzNDMxNTk3NDEgLT4gLTEzOTQuNzMyMTQ3NTQ4MzY0MTg3MzEzMzU3NjE4NTgxNTEgSW5leGFjdCBSb3VuZGVkCitkdml4MzQxMSBkaXZpZGVpbnQgMTE3OTEuODY0NDIxMTg3NDYzMDIzNDI3MTgwMTc4OTk5NiAtOC40NTQ1NzI3NTkzMDM2Mzg2MDk4MjI2MTM0MzE1OTc0MSAtPiAtMTM5NAorbXVseDM0MTEgbXVsdGlwbHkgMTE3OTEuODY0NDIxMTg3NDYzMDIzNDI3MTgwMTc4OTk5NiAtOC40NTQ1NzI3NTkzMDM2Mzg2MDk4MjI2MTM0MzE1OTc0MSAtPiAtOTk2OTUuMTc1NzE2NzczMjkyNjMwMjUzMzEzODE4NjcxNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDExIHBvd2VyIDExNzkxLjg2NDQyMTE4NzQ2MzAyMzQyNzE4MDE3ODk5OTYgLTggLT4gMi42NzUxMDA5OTMxODcyMzUxNjU2NTMzMjkyODI1MzcxMUUtMzMgSW5leGFjdCBSb3VuZGVkCityZW14MzQxMSByZW1haW5kZXIgMTE3OTEuODY0NDIxMTg3NDYzMDIzNDI3MTgwMTc4OTk5NiAtOC40NTQ1NzI3NTkzMDM2Mzg2MDk4MjI2MTM0MzE1OTc0MSAtPiA2LjE4OTk5NDcxODE5MDgwMTMzNDQ1NzA1NTM1MjgxMDQ2CitzdWJ4MzQxMSBzdWJ0cmFjdCAxMTc5MS44NjQ0MjExODc0NjMwMjM0MjcxODAxNzg5OTk2IC04LjQ1NDU3Mjc1OTMwMzYzODYwOTgyMjYxMzQzMTU5NzQxIC0+IDExODAwLjMxODk5Mzk0Njc2NjY2MjAzNzAwMjc5MjQzMTIgSW5leGFjdCBSb3VuZGVkCithZGR4MzQxMiBhZGQgNDQuNzA4NTM0MDczOTU4MTY2ODk3NTUwMjM0Mjc4NzU3OCAtOTMzNy4wNTQwODEzMzAyMzkyMDY0MDQ4NTU1NjY0NzkzNyAtPiAtOTI5Mi4zNDU1NDcyNTYyODEwMzk1MDczMDUzMzIyMDA2MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDEyIGNvbXBhcmUgNDQuNzA4NTM0MDczOTU4MTY2ODk3NTUwMjM0Mjc4NzU3OCAtOTMzNy4wNTQwODEzMzAyMzkyMDY0MDQ4NTU1NjY0NzkzNyAtPiAxCitkaXZ4MzQxMiBkaXZpZGUgNDQuNzA4NTM0MDczOTU4MTY2ODk3NTUwMjM0Mjc4NzU3OCAtOTMzNy4wNTQwODEzMzAyMzkyMDY0MDQ4NTU1NjY0NzkzNyAtPiAtMC4wMDQ3ODgyOTEyMTk1MzUxMjI4MTUyNzI0MjYzMTc3NTYxMyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDEyIGRpdmlkZWludCA0NC43MDg1MzQwNzM5NTgxNjY4OTc1NTAyMzQyNzg3NTc4IC05MzM3LjA1NDA4MTMzMDIzOTIwNjQwNDg1NTU2NjQ3OTM3IC0+IC0wCittdWx4MzQxMiBtdWx0aXBseSA0NC43MDg1MzQwNzM5NTgxNjY4OTc1NTAyMzQyNzg3NTc4IC05MzM3LjA1NDA4MTMzMDIzOTIwNjQwNDg1NTU2NjQ3OTM3IC0+IC00MTc0NDYuMDAwNTQ1NTQzMTY4ODY2MTU4OTEzMDc3NDE5IEluZXhhY3QgUm91bmRlZAorcG93eDM0MTIgcG93ZXIgNDQuNzA4NTM0MDczOTU4MTY2ODk3NTUwMjM0Mjc4NzU3OCAtOTMzNyAtPiAwRS0xMDAzMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzQxMiByZW1haW5kZXIgNDQuNzA4NTM0MDczOTU4MTY2ODk3NTUwMjM0Mjc4NzU3OCAtOTMzNy4wNTQwODEzMzAyMzkyMDY0MDQ4NTU1NjY0NzkzNyAtPiA0NC43MDg1MzQwNzM5NTgxNjY4OTc1NTAyMzQyNzg3NTc4CitzdWJ4MzQxMiBzdWJ0cmFjdCA0NC43MDg1MzQwNzM5NTgxNjY4OTc1NTAyMzQyNzg3NTc4IC05MzM3LjA1NDA4MTMzMDIzOTIwNjQwNDg1NTU2NjQ3OTM3IC0+IDkzODEuNzYyNjE1NDA0MTk3MzczMzAyNDA1ODAwNzU4MTMgSW5leGFjdCBSb3VuZGVkCithZGR4MzQxMyBhZGQgOTMzNTQ1Mjc0Mjg4MDQuNTQ1ODA1MzI5NTU4MTk2NTg2N0UrNTc2IC04NTY1MjU5MDk4NTIuMzE4NzkwMzIxMzAwOTQxNjE1MzE0IC0+IDkuMzM1NDUyNzQyODgwNDU0NTgwNTMyOTU1ODE5NjU4NjdFKzU4OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDEzIGNvbXBhcmUgOTMzNTQ1Mjc0Mjg4MDQuNTQ1ODA1MzI5NTU4MTk2NTg2N0UrNTc2IC04NTY1MjU5MDk4NTIuMzE4NzkwMzIxMzAwOTQxNjE1MzE0IC0+IDEKK2RpdngzNDEzIGRpdmlkZSA5MzM1NDUyNzQyODgwNC41NDU4MDUzMjk1NTgxOTY1ODY3RSs1NzYgLTg1NjUyNTkwOTg1Mi4zMTg3OTAzMjEzMDA5NDE2MTUzMTQgLT4gLTEuMDg5OTIwNjQ3NTI0ODQ0MDAzNTMyMzEwNTYyNzE2MTRFKzU3OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDEzIGRpdmlkZWludCA5MzM1NDUyNzQyODgwNC41NDU4MDUzMjk1NTgxOTY1ODY3RSs1NzYgLTg1NjUyNTkwOTg1Mi4zMTg3OTAzMjEzMDA5NDE2MTUzMTQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDEzIG11bHRpcGx5IDkzMzU0NTI3NDI4ODA0LjU0NTgwNTMyOTU1ODE5NjU4NjdFKzU3NiAtODU2NTI1OTA5ODUyLjMxODc5MDMyMTMwMDk0MTYxNTMxNCAtPiAtNy45OTYwNTcxNTQ0NzkwMDY0MjY4Mzc3NDM2MDczMTI1NEUrNjAxIEluZXhhY3QgUm91bmRlZAorcG93eDM0MTMgcG93ZXIgOTMzNTQ1Mjc0Mjg4MDQuNTQ1ODA1MzI5NTU4MTk2NTg2N0UrNTc2IC05IC0+IDEuODU2ODcwMTU2OTE3NjM0MDY0NDgwMDU1MjEyMjE1MThFLTUzMTAgSW5leGFjdCBSb3VuZGVkCityZW14MzQxMyByZW1haW5kZXIgOTMzNTQ1Mjc0Mjg4MDQuNTQ1ODA1MzI5NTU4MTk2NTg2N0UrNTc2IC04NTY1MjU5MDk4NTIuMzE4NzkwMzIxMzAwOTQxNjE1MzE0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQxMyBzdWJ0cmFjdCA5MzM1NDUyNzQyODgwNC41NDU4MDUzMjk1NTgxOTY1ODY3RSs1NzYgLTg1NjUyNTkwOTg1Mi4zMTg3OTAzMjEzMDA5NDE2MTUzMTQgLT4gOS4zMzU0NTI3NDI4ODA0NTQ1ODA1MzI5NTU4MTk2NTg2N0UrNTg5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MTQgYWRkIC0zNjczOTk0MTU3OTg4MDQ1MDMxNzc5NTAwNDA0NDM0ODIgLTU0ODQ1NjgzLjk2OTE3NzYzOTcyODU1MDY3MTI4MTI3NTQgLT4gLTM2NzM5OTQxNTc5ODgwNDUwMzE3Nzk1MDA5NTI4OTE2NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDE0IGNvbXBhcmUgLTM2NzM5OTQxNTc5ODgwNDUwMzE3Nzk1MDA0MDQ0MzQ4MiAtNTQ4NDU2ODMuOTY5MTc3NjM5NzI4NTUwNjcxMjgxMjc1NCAtPiAtMQorZGl2eDM0MTQgZGl2aWRlIC0zNjczOTk0MTU3OTg4MDQ1MDMxNzc5NTAwNDA0NDM0ODIgLTU0ODQ1NjgzLjk2OTE3NzYzOTcyODU1MDY3MTI4MTI3NTQgLT4gNjY5ODc4NDQ2NTk4MDUyOTE0MDA3MjE3NC4zMDQ3NDc2OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDE0IGRpdmlkZWludCAtMzY3Mzk5NDE1Nzk4ODA0NTAzMTc3OTUwMDQwNDQzNDgyIC01NDg0NTY4My45NjkxNzc2Mzk3Mjg1NTA2NzEyODEyNzU0IC0+IDY2OTg3ODQ0NjU5ODA1MjkxNDAwNzIxNzQKK211bHgzNDE0IG11bHRpcGx5IC0zNjczOTk0MTU3OTg4MDQ1MDMxNzc5NTAwNDA0NDM0ODIgLTU0ODQ1NjgzLjk2OTE3NzYzOTcyODU1MDY3MTI4MTI3NTQgLT4gMi4wMTUwMjcyMjQ5MzYxNzIyMjAxODA0MDc4OTI5MTQxNEUrNDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQxNCBwb3dlciAtMzY3Mzk5NDE1Nzk4ODA0NTAzMTc3OTUwMDQwNDQzNDgyIC01NDg0NTY4NCAtPiAwRS0xMDAzMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzQxNCByZW1haW5kZXIgLTM2NzM5OTQxNTc5ODgwNDUwMzE3Nzk1MDA0MDQ0MzQ4MiAtNTQ4NDU2ODMuOTY5MTc3NjM5NzI4NTUwNjcxMjgxMjc1NCAtPiAtMTY3MTQwOTUuNjU0OTY1NzE4OTE3Nzg1Nzg5MjI5MjgwNAorc3VieDM0MTQgc3VidHJhY3QgLTM2NzM5OTQxNTc5ODgwNDUwMzE3Nzk1MDA0MDQ0MzQ4MiAtNTQ4NDU2ODMuOTY5MTc3NjM5NzI4NTUwNjcxMjgxMjc1NCAtPiAtMzY3Mzk5NDE1Nzk4ODA0NTAzMTc3OTQ5OTg1NTk3Nzk4IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MTUgYWRkIC0yLjg3MTU1OTE5NzgxMDI0MTA4NTAzNjcwMTc1NDQzNzQwIDg5NTI5NzMwMTMwLjY0Mjc4ODEzMzI3NzY3OTcxOTM4MDcgLT4gODk1Mjk3MzAxMjcuNzcxMjI4OTM1NDY3NDM4NjM0MzQ0MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDE1IGNvbXBhcmUgLTIuODcxNTU5MTk3ODEwMjQxMDg1MDM2NzAxNzU0NDM3NDAgODk1Mjk3MzAxMzAuNjQyNzg4MTMzMjc3Njc5NzE5MzgwNyAtPiAtMQorZGl2eDM0MTUgZGl2aWRlIC0yLjg3MTU1OTE5NzgxMDI0MTA4NTAzNjcwMTc1NDQzNzQwIDg5NTI5NzMwMTMwLjY0Mjc4ODEzMzI3NzY3OTcxOTM4MDcgLT4gLTMuMjA3MzgwNjAyNjQ0NTQwMTMxNzQ4MzU5Mjg3NTQ0MzBFLTExIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MTUgZGl2aWRlaW50IC0yLjg3MTU1OTE5NzgxMDI0MTA4NTAzNjcwMTc1NDQzNzQwIDg5NTI5NzMwMTMwLjY0Mjc4ODEzMzI3NzY3OTcxOTM4MDcgLT4gLTAKK211bHgzNDE1IG11bHRpcGx5IC0yLjg3MTU1OTE5NzgxMDI0MTA4NTAzNjcwMTc1NDQzNzQwIDg5NTI5NzMwMTMwLjY0Mjc4ODEzMzI3NzY3OTcxOTM4MDcgLT4gLTI1NzA4OTkyMDAzNC4xMTU5NzU0Njk5MzEwODU1Mjc2NDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQxNSBwb3dlciAtMi44NzE1NTkxOTc4MTAyNDEwODUwMzY3MDE3NTQ0Mzc0MCA5IC0+IC0xMzI3NS43Nzc0NjgzMjUxMzU0NTI3MzEwODIwODg1NzM3IEluZXhhY3QgUm91bmRlZAorcmVteDM0MTUgcmVtYWluZGVyIC0yLjg3MTU1OTE5NzgxMDI0MTA4NTAzNjcwMTc1NDQzNzQwIDg5NTI5NzMwMTMwLjY0Mjc4ODEzMzI3NzY3OTcxOTM4MDcgLT4gLTIuODcxNTU5MTk3ODEwMjQxMDg1MDM2NzAxNzU0NDM3NDAKK3N1YngzNDE1IHN1YnRyYWN0IC0yLjg3MTU1OTE5NzgxMDI0MTA4NTAzNjcwMTc1NDQzNzQwIDg5NTI5NzMwMTMwLjY0Mjc4ODEzMzI3NzY3OTcxOTM4MDcgLT4gLTg5NTI5NzMwMTMzLjUxNDM0NzMzMTA4NzkyMDgwNDQxNzQgSW5leGFjdCBSb3VuZGVkCithZGR4MzQxNiBhZGQgLTAxMC42OTM5MzQzMzgxNzk0Nzk2NTIxNzgwNTcyNzkyMDRFKzE4OCAyNjQ4NC44ODg3NzMxOTczMTUzNzQ1NjY2NTE0MjYwNjg0IC0+IC0xLjA2OTM5MzQzMzgxNzk0Nzk2NTIxNzgwNTcyNzkyMDQwRSsxODkgSW5leGFjdCBSb3VuZGVkCitjb214MzQxNiBjb21wYXJlIC0wMTAuNjkzOTM0MzM4MTc5NDc5NjUyMTc4MDU3Mjc5MjA0RSsxODggMjY0ODQuODg4NzczMTk3MzE1Mzc0NTY2NjUxNDI2MDY4NCAtPiAtMQorZGl2eDM0MTYgZGl2aWRlIC0wMTAuNjkzOTM0MzM4MTc5NDc5NjUyMTc4MDU3Mjc5MjA0RSsxODggMjY0ODQuODg4NzczMTk3MzE1Mzc0NTY2NjUxNDI2MDY4NCAtPiAtNC4wMzc3NDkzODU5ODI1OTU0NzU3NTcwNzUwMzA4NzYzOEUrMTg0IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MTYgZGl2aWRlaW50IC0wMTAuNjkzOTM0MzM4MTc5NDc5NjUyMTc4MDU3Mjc5MjA0RSsxODggMjY0ODQuODg4NzczMTk3MzE1Mzc0NTY2NjUxNDI2MDY4NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0MTYgbXVsdGlwbHkgLTAxMC42OTM5MzQzMzgxNzk0Nzk2NTIxNzgwNTcyNzkyMDRFKzE4OCAyNjQ4NC44ODg3NzMxOTczMTUzNzQ1NjY2NTE0MjYwNjg0IC0+IC0yLjgzMjI3NjYxNDk0NTU4OTYzNTU4NDgxNjMzODgwNjQ3RSsxOTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQxNiBwb3dlciAtMDEwLjY5MzkzNDMzODE3OTQ3OTY1MjE3ODA1NzI3OTIwNEUrMTg4IDI2NDg1IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDE2IHJlbWFpbmRlciAtMDEwLjY5MzkzNDMzODE3OTQ3OTY1MjE3ODA1NzI3OTIwNEUrMTg4IDI2NDg0Ljg4ODc3MzE5NzMxNTM3NDU2NjY1MTQyNjA2ODQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDE2IHN1YnRyYWN0IC0wMTAuNjkzOTM0MzM4MTc5NDc5NjUyMTc4MDU3Mjc5MjA0RSsxODggMjY0ODQuODg4NzczMTk3MzE1Mzc0NTY2NjUxNDI2MDY4NCAtPiAtMS4wNjkzOTM0MzM4MTc5NDc5NjUyMTc4MDU3Mjc5MjA0MEUrMTg5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MTcgYWRkIDYxMTY1NTU2OTU2OC44MzI2OTg5MTI3NjIwNzU4ODkxODYgMDEwMTgyNzQzMjE5LjQ3NTgzOTAzMDUwNTk2NjAxNjk4MiAtPiA2MjE4MzgzMTI3ODguMzA4NTM3OTQzMjY4MDQxOTA2MTY4Citjb214MzQxNyBjb21wYXJlIDYxMTY1NTU2OTU2OC44MzI2OTg5MTI3NjIwNzU4ODkxODYgMDEwMTgyNzQzMjE5LjQ3NTgzOTAzMDUwNTk2NjAxNjk4MiAtPiAxCitkaXZ4MzQxNyBkaXZpZGUgNjExNjU1NTY5NTY4LjgzMjY5ODkxMjc2MjA3NTg4OTE4NiAwMTAxODI3NDMyMTkuNDc1ODM5MDMwNTA1OTY2MDE2OTgyIC0+IDYwLjA2Nzg1NzU4ODYwNzQzNjcwODE4MzY0MzY4MTI5NTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzQxNyBkaXZpZGVpbnQgNjExNjU1NTY5NTY4LjgzMjY5ODkxMjc2MjA3NTg4OTE4NiAwMTAxODI3NDMyMTkuNDc1ODM5MDMwNTA1OTY2MDE2OTgyIC0+IDYwCittdWx4MzQxNyBtdWx0aXBseSA2MTE2NTU1Njk1NjguODMyNjk4OTEyNzYyMDc1ODg5MTg2IDAxMDE4Mjc0MzIxOS40NzU4MzkwMzA1MDU5NjYwMTY5ODIgLT4gNjIyODMzMTYwMzY4MTY2MzUxMTgyNi42MDQ1MDI4MDM1MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDE3IHBvd2VyIDYxMTY1NTU2OTU2OC44MzI2OTg5MTI3NjIwNzU4ODkxODYgMSAtPiA2MTE2NTU1Njk1NjguODMyNjk4OTEyNzYyMDc1ODg5MTg2CityZW14MzQxNyByZW1haW5kZXIgNjExNjU1NTY5NTY4LjgzMjY5ODkxMjc2MjA3NTg4OTE4NiAwMTAxODI3NDMyMTkuNDc1ODM5MDMwNTA1OTY2MDE2OTgyIC0+IDY5MDk3NjQwMC4yODIzNTcwODI0MDQxMTQ4NzAyNjYKK3N1YngzNDE3IHN1YnRyYWN0IDYxMTY1NTU2OTU2OC44MzI2OTg5MTI3NjIwNzU4ODkxODYgMDEwMTgyNzQzMjE5LjQ3NTgzOTAzMDUwNTk2NjAxNjk4MiAtPiA2MDE0NzI4MjYzNDkuMzU2ODU5ODgyMjU2MTA5ODcyMjA0CithZGR4MzQxOCBhZGQgMzQ1Nzk0Ny4zOTA2Mjg2MzY3NDg4MjY3MjUxODMwNDQ0MiAtMDEuOTk5NTIxODg2ODkwODg0OTA1Njg2NjU0OTgxMTQyNSAtPiAzNDU3OTQ1LjM5MTEwNjc0OTg1Nzk0MTgxOTQ5NjM4OTQ0IEluZXhhY3QgUm91bmRlZAorY29teDM0MTggY29tcGFyZSAzNDU3OTQ3LjM5MDYyODYzNjc0ODgyNjcyNTE4MzA0NDQyIC0wMS45OTk1MjE4ODY4OTA4ODQ5MDU2ODY2NTQ5ODExNDI1IC0+IDEKK2RpdngzNDE4IGRpdmlkZSAzNDU3OTQ3LjM5MDYyODYzNjc0ODgyNjcyNTE4MzA0NDQyIC0wMS45OTk1MjE4ODY4OTA4ODQ5MDU2ODY2NTQ5ODExNDI1IC0+IC0xNzI5Mzg3LjExNjYzOTkxODUyNDI2NDI4MjYzMjMwNDc1IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MTggZGl2aWRlaW50IDM0NTc5NDcuMzkwNjI4NjM2NzQ4ODI2NzI1MTgzMDQ0NDIgLTAxLjk5OTUyMTg4Njg5MDg4NDkwNTY4NjY1NDk4MTE0MjUgLT4gLTE3MjkzODcKK211bHgzNDE4IG11bHRpcGx5IDM0NTc5NDcuMzkwNjI4NjM2NzQ4ODI2NzI1MTgzMDQ0NDIgLTAxLjk5OTUyMTg4Njg5MDg4NDkwNTY4NjY1NDk4MTE0MjUgLT4gLTY5MTQyNDEuNDkxMjc5MTgzNjEyNTkyNTI5NTY1NzY2NTQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQxOCBwb3dlciAzNDU3OTQ3LjM5MDYyODYzNjc0ODgyNjcyNTE4MzA0NDQyIC0yIC0+IDguMzYzMDIxOTUyMjk3MDE5MTMzNzY4MDIzNzM2NTk1MjZFLTE0IEluZXhhY3QgUm91bmRlZAorcmVteDM0MTggcmVtYWluZGVyIDM0NTc5NDcuMzkwNjI4NjM2NzQ4ODI2NzI1MTgzMDQ0NDIgLTAxLjk5OTUyMTg4Njg5MDg4NDkwNTY4NjY1NDk4MTE0MjUgLT4gMC4yMzMyMjQwNjk5NzQ0MzU5OTc5ODUxNzEzMzUzNTI1CitzdWJ4MzQxOCBzdWJ0cmFjdCAzNDU3OTQ3LjM5MDYyODYzNjc0ODgyNjcyNTE4MzA0NDQyIC0wMS45OTk1MjE4ODY4OTA4ODQ5MDU2ODY2NTQ5ODExNDI1IC0+IDM0NTc5NDkuMzkwMTUwNTIzNjM5NzExNjMwODY5Njk5NDAgSW5leGFjdCBSb3VuZGVkCithZGR4MzQxOSBhZGQgLTUzMzA4NjY2OTYwNTM1LjczOTMzOTEyODkzNjQ1OTE1MTMgLTY1MjcuMDA1NDc2Mjk0NzU1Nzg2OTQ1MjE0MzY3NjQ1OTZFLTQ0MiAtPiAtNTMzMDg2NjY5NjA1MzUuNzM5MzM5MTI4OTM2NDU5MTUxMyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDE5IGNvbXBhcmUgLTUzMzA4NjY2OTYwNTM1LjczOTMzOTEyODkzNjQ1OTE1MTMgLTY1MjcuMDA1NDc2Mjk0NzU1Nzg2OTQ1MjE0MzY3NjQ1OTZFLTQ0MiAtPiAtMQorZGl2eDM0MTkgZGl2aWRlIC01MzMwODY2Njk2MDUzNS43MzkzMzkxMjg5MzY0NTkxNTEzIC02NTI3LjAwNTQ3NjI5NDc1NTc4Njk0NTIxNDM2NzY0NTk2RS00NDIgLT4gOC4xNjc0MDAzNzI4MjczMTg3MDg4MzEzNjcxNDQ0MTIwNEUrNDUxIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MTkgZGl2aWRlaW50IC01MzMwODY2Njk2MDUzNS43MzkzMzkxMjg5MzY0NTkxNTEzIC02NTI3LjAwNTQ3NjI5NDc1NTc4Njk0NTIxNDM2NzY0NTk2RS00NDIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDE5IG11bHRpcGx5IC01MzMwODY2Njk2MDUzNS43MzkzMzkxMjg5MzY0NTkxNTEzIC02NTI3LjAwNTQ3NjI5NDc1NTc4Njk0NTIxNDM2NzY0NTk2RS00NDIgLT4gMy40Nzk0NTk2MTE4NTM5MDA4NDY0MTE1NjI1MDEwMDA4NUUtNDI1IEluZXhhY3QgUm91bmRlZAorcG93eDM0MTkgcG93ZXIgLTUzMzA4NjY2OTYwNTM1LjczOTMzOTEyODkzNjQ1OTE1MTMgLTcgLT4gLTguMTczNjM1MDIzODA0OTcwMzMzNDIzODA0OTg5ODg5NThFLTk3IEluZXhhY3QgUm91bmRlZAorcmVteDM0MTkgcmVtYWluZGVyIC01MzMwODY2Njk2MDUzNS43MzkzMzkxMjg5MzY0NTkxNTEzIC02NTI3LjAwNTQ3NjI5NDc1NTc4Njk0NTIxNDM2NzY0NTk2RS00NDIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDE5IHN1YnRyYWN0IC01MzMwODY2Njk2MDUzNS43MzkzMzkxMjg5MzY0NTkxNTEzIC02NTI3LjAwNTQ3NjI5NDc1NTc4Njk0NTIxNDM2NzY0NTk2RS00NDIgLT4gLTUzMzA4NjY2OTYwNTM1LjczOTMzOTEyODkzNjQ1OTE1MTMgSW5leGFjdCBSb3VuZGVkCithZGR4MzQyMCBhZGQgLTU1NjgwNTcuMTc4NzAxMzk1NDk0NzgyNzc5ODA1NDAwMzQgLTQwNzkwNjQ0My4xNDEzNDIxNzU3NDA0NzE4NDk3MjM2MzggLT4gLTQxMzQ3NDUwMC4zMjAwNDM1NzEyMzUyNTQ2Mjk1MjkwMzggSW5leGFjdCBSb3VuZGVkCitjb214MzQyMCBjb21wYXJlIC01NTY4MDU3LjE3ODcwMTM5NTQ5NDc4Mjc3OTgwNTQwMDM0IC00MDc5MDY0NDMuMTQxMzQyMTc1NzQwNDcxODQ5NzIzNjM4IC0+IDEKK2RpdngzNDIwIGRpdmlkZSAtNTU2ODA1Ny4xNzg3MDEzOTU0OTQ3ODI3Nzk4MDU0MDAzNCAtNDA3OTA2NDQzLjE0MTM0MjE3NTc0MDQ3MTg0OTcyMzYzOCAtPiAwLjAxMzY1MDMyOTA3MDExOTcwOTQ5NTM0MjkwMTgwMTMxNDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQyMCBkaXZpZGVpbnQgLTU1NjgwNTcuMTc4NzAxMzk1NDk0NzgyNzc5ODA1NDAwMzQgLTQwNzkwNjQ0My4xNDEzNDIxNzU3NDA0NzE4NDk3MjM2MzggLT4gMAorbXVseDM0MjAgbXVsdGlwbHkgLTU1NjgwNTcuMTc4NzAxMzk1NDk0NzgyNzc5ODA1NDAwMzQgLTQwNzkwNjQ0My4xNDEzNDIxNzU3NDA0NzE4NDk3MjM2MzggLT4gMjI3MTI0NjM5ODk3MTcwMi45MTE2OTgwNzcyODEzMjA4OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDIwIHBvd2VyIC01NTY4MDU3LjE3ODcwMTM5NTQ5NDc4Mjc3OTgwNTQwMDM0IC00MDc5MDY0NDMgLT4gLTBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDIwIHJlbWFpbmRlciAtNTU2ODA1Ny4xNzg3MDEzOTU0OTQ3ODI3Nzk4MDU0MDAzNCAtNDA3OTA2NDQzLjE0MTM0MjE3NTc0MDQ3MTg0OTcyMzYzOCAtPiAtNTU2ODA1Ny4xNzg3MDEzOTU0OTQ3ODI3Nzk4MDU0MDAzNAorc3VieDM0MjAgc3VidHJhY3QgLTU1NjgwNTcuMTc4NzAxMzk1NDk0NzgyNzc5ODA1NDAwMzQgLTQwNzkwNjQ0My4xNDEzNDIxNzU3NDA0NzE4NDk3MjM2MzggLT4gNDAyMzM4Mzg1Ljk2MjY0MDc4MDI0NTY4OTA2OTkxODIzOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDIxIGFkZCA5ODA0Mzg1MjczLjQ5NTMzNTI0NDE2NDE1MTg5OTkwODU3IDg0LjE0MzM5Mjk3NDM1NDQ2NTk1NTM5NjQ4MDQ2NDY1NjkgLT4gOTgwNDM4NTM1Ny42Mzg3MjgyMTg1MTg2MTc4NTUzMDUwNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDIxIGNvbXBhcmUgOTgwNDM4NTI3My40OTUzMzUyNDQxNjQxNTE4OTk5MDg1NyA4NC4xNDMzOTI5NzQzNTQ0NjU5NTUzOTY0ODA0NjQ2NTY5IC0+IDEKK2RpdngzNDIxIGRpdmlkZSA5ODA0Mzg1MjczLjQ5NTMzNTI0NDE2NDE1MTg5OTkwODU3IDg0LjE0MzM5Mjk3NDM1NDQ2NTk1NTM5NjQ4MDQ2NDY1NjkgLT4gMTE2NTE5OTY1LjgyMTcxOTk3NzQwMjM5ODE5MDU1ODQzOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDIxIGRpdmlkZWludCA5ODA0Mzg1MjczLjQ5NTMzNTI0NDE2NDE1MTg5OTkwODU3IDg0LjE0MzM5Mjk3NDM1NDQ2NTk1NTM5NjQ4MDQ2NDY1NjkgLT4gMTE2NTE5OTY1CittdWx4MzQyMSBtdWx0aXBseSA5ODA0Mzg1MjczLjQ5NTMzNTI0NDE2NDE1MTg5OTkwODU3IDg0LjE0MzM5Mjk3NDM1NDQ2NTk1NTM5NjQ4MDQ2NDY1NjkgLT4gODI0OTc0MjQyOTM5LjY5MTc4MDc5ODYyMTE4MDkwMTcxNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDIxIHBvd2VyIDk4MDQzODUyNzMuNDk1MzM1MjQ0MTY0MTUxODk5OTA4NTcgODQgLT4gMS45MDI0NDAxMDc3OTY5MjczOTAzNzA4MDQxODUwNzkwOUUrODM5IEluZXhhY3QgUm91bmRlZAorcmVteDM0MjEgcmVtYWluZGVyIDk4MDQzODUyNzMuNDk1MzM1MjQ0MTY0MTUxODk5OTA4NTcgODQuMTQzMzkyOTc0MzU0NDY1OTU1Mzk2NDgwNDY0NjU2OSAtPiA2OS4xNDIzMDY5NzM0NDc2NjI0MzUwNDM1NjQyNzQ5OTE1CitzdWJ4MzQyMSBzdWJ0cmFjdCA5ODA0Mzg1MjczLjQ5NTMzNTI0NDE2NDE1MTg5OTkwODU3IDg0LjE0MzM5Mjk3NDM1NDQ2NTk1NTM5NjQ4MDQ2NDY1NjkgLT4gOTgwNDM4NTE4OS4zNTE5NDIyNjk4MDk2ODU5NDQ1MTIwOSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDIyIGFkZCAtNTIzNDkxMDk4NjU5Mi4xODgwMTcyNzA0NjU4MDAxNDI3M0UtNTQ3IC01ODc0MjIwNzE1ODkyLjkxNDQwMDY5MjEwNTEyNTE1MTU0IC0+IC01ODc0MjIwNzE1ODkyLjkxNDQwMDY5MjEwNTEyNTE1MTU0IEluZXhhY3QgUm91bmRlZAorY29teDM0MjIgY29tcGFyZSAtNTIzNDkxMDk4NjU5Mi4xODgwMTcyNzA0NjU4MDAxNDI3M0UtNTQ3IC01ODc0MjIwNzE1ODkyLjkxNDQwMDY5MjEwNTEyNTE1MTU0IC0+IDEKK2RpdngzNDIyIGRpdmlkZSAtNTIzNDkxMDk4NjU5Mi4xODgwMTcyNzA0NjU4MDAxNDI3M0UtNTQ3IC01ODc0MjIwNzE1ODkyLjkxNDQwMDY5MjEwNTEyNTE1MTU0IC0+IDguOTExNjY4ODY2MDE0NzcwMjE3NTc0Mzk4MjY5MDM3NzZFLTU0OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDIyIGRpdmlkZWludCAtNTIzNDkxMDk4NjU5Mi4xODgwMTcyNzA0NjU4MDAxNDI3M0UtNTQ3IC01ODc0MjIwNzE1ODkyLjkxNDQwMDY5MjEwNTEyNTE1MTU0IC0+IDAKK211bHgzNDIyIG11bHRpcGx5IC01MjM0OTEwOTg2NTkyLjE4ODAxNzI3MDQ2NTgwMDE0MjczRS01NDcgLTU4NzQyMjA3MTU4OTIuOTE0NDAwNjkyMTA1MTI1MTUxNTQgLT4gMy4wNzUxMDIyNTYzMjk1MjQ1NTE0NDk0NDI4MjkyNTU4M0UtNTIyIEluZXhhY3QgUm91bmRlZAorcG93eDM0MjIgcG93ZXIgLTUyMzQ5MTA5ODY1OTIuMTg4MDE3MjcwNDY1ODAwMTQyNzNFLTU0NyAtNiAtPiA0Ljg1ODk2OTcwNzAzMTE3MTQ5MjM1OTM1MDM3MjcxMDg0RSszMjA1IEluZXhhY3QgUm91bmRlZAorcmVteDM0MjIgcmVtYWluZGVyIC01MjM0OTEwOTg2NTkyLjE4ODAxNzI3MDQ2NTgwMDE0MjczRS01NDcgLTU4NzQyMjA3MTU4OTIuOTE0NDAwNjkyMTA1MTI1MTUxNTQgLT4gLTUuMjM0OTEwOTg2NTkyMTg4MDE3MjcwNDY1ODAwMTQyNzNFLTUzNQorc3VieDM0MjIgc3VidHJhY3QgLTUyMzQ5MTA5ODY1OTIuMTg4MDE3MjcwNDY1ODAwMTQyNzNFLTU0NyAtNTg3NDIyMDcxNTg5Mi45MTQ0MDA2OTIxMDUxMjUxNTE1NCAtPiA1ODc0MjIwNzE1ODkyLjkxNDQwMDY5MjEwNTEyNTE1MTU0IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MjMgYWRkIDY5ODQxNjU2MDE1MTk1NTI4NTkyOTc0NzYzMzc4Njg2N0UtNDk1IDUxNzU0NjgxLjY3ODQ4NzI2Mjg5MzMyMTg5ODUyMTY5MTZFLTI2NiAtPiA1LjE3NTQ2ODE2Nzg0ODcyNjI4OTMzMjE4OTg1MjE2OTE2RS0yNTkgSW5leGFjdCBSb3VuZGVkCitjb214MzQyMyBjb21wYXJlIDY5ODQxNjU2MDE1MTk1NTI4NTkyOTc0NzYzMzc4Njg2N0UtNDk1IDUxNzU0NjgxLjY3ODQ4NzI2Mjg5MzMyMTg5ODUyMTY5MTZFLTI2NiAtPiAtMQorZGl2eDM0MjMgZGl2aWRlIDY5ODQxNjU2MDE1MTk1NTI4NTkyOTc0NzYzMzc4Njg2N0UtNDk1IDUxNzU0NjgxLjY3ODQ4NzI2Mjg5MzMyMTg5ODUyMTY5MTZFLTI2NiAtPiAxLjM0OTQ3NTEzNDQyNDkxOTcxNDg4MzYzMjUwMzk4OTA4RS0yMDQgSW5leGFjdCBSb3VuZGVkCitkdml4MzQyMyBkaXZpZGVpbnQgNjk4NDE2NTYwMTUxOTU1Mjg1OTI5NzQ3NjMzNzg2ODY3RS00OTUgNTE3NTQ2ODEuNjc4NDg3MjYyODkzMzIxODk4NTIxNjkxNkUtMjY2IC0+IDAKK211bHgzNDIzIG11bHRpcGx5IDY5ODQxNjU2MDE1MTk1NTI4NTkyOTc0NzYzMzc4Njg2N0UtNDk1IDUxNzU0NjgxLjY3ODQ4NzI2Mjg5MzMyMTg5ODUyMTY5MTZFLTI2NiAtPiAzLjYxNDYzMjY3NDk2NDg0OTc2MDY0MjcxMzA1Njc5Nzk2RS03MjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQyMyBwb3dlciA2OTg0MTY1NjAxNTE5NTUyODU5Mjk3NDc2MzM3ODY4NjdFLTQ5NSA1IC0+IDEuNjYxNzc2NjEwMDcxODk0MzA3NjEzOTY5Nzk3ODc0MTNFLTIzMTEgSW5leGFjdCBSb3VuZGVkCityZW14MzQyMyByZW1haW5kZXIgNjk4NDE2NTYwMTUxOTU1Mjg1OTI5NzQ3NjMzNzg2ODY3RS00OTUgNTE3NTQ2ODEuNjc4NDg3MjYyODkzMzIxODk4NTIxNjkxNkUtMjY2IC0+IDYuOTg0MTY1NjAxNTE5NTUyODU5Mjk3NDc2MzM3ODY4NjdFLTQ2Mworc3VieDM0MjMgc3VidHJhY3QgNjk4NDE2NTYwMTUxOTU1Mjg1OTI5NzQ3NjMzNzg2ODY3RS00OTUgNTE3NTQ2ODEuNjc4NDg3MjYyODkzMzIxODk4NTIxNjkxNkUtMjY2IC0+IC01LjE3NTQ2ODE2Nzg0ODcyNjI4OTMzMjE4OTg1MjE2OTE2RS0yNTkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQyNCBhZGQgMTA3NjM1LjQ5NzczNTMxNjUxNTA4MDcyMDMzMDUzNjAyNyAtMzk3MjA3NS44Mzk4OTUxMjY2ODM2MjYwOTYwOTAwNjQyNUUtNjA1IC0+IDEwNzYzNS40OTc3MzUzMTY1MTUwODA3MjAzMzA1MzYwMjcgSW5leGFjdCBSb3VuZGVkCitjb214MzQyNCBjb21wYXJlIDEwNzYzNS40OTc3MzUzMTY1MTUwODA3MjAzMzA1MzYwMjcgLTM5NzIwNzUuODM5ODk1MTI2NjgzNjI2MDk2MDkwMDY0MjVFLTYwNSAtPiAxCitkaXZ4MzQyNCBkaXZpZGUgMTA3NjM1LjQ5NzczNTMxNjUxNTA4MDcyMDMzMDUzNjAyNyAtMzk3MjA3NS44Mzk4OTUxMjY2ODM2MjYwOTYwOTAwNjQyNUUtNjA1IC0+IC0yLjcwOTgwNDY5ODQ0NTk5ODg4NDQzMzA5NTcxMjM1NTk3RSs2MDMgSW5leGFjdCBSb3VuZGVkCitkdml4MzQyNCBkaXZpZGVpbnQgMTA3NjM1LjQ5NzczNTMxNjUxNTA4MDcyMDMzMDUzNjAyNyAtMzk3MjA3NS44Mzk4OTUxMjY2ODM2MjYwOTYwOTAwNjQyNUUtNjA1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQyNCBtdWx0aXBseSAxMDc2MzUuNDk3NzM1MzE2NTE1MDgwNzIwMzMwNTM2MDI3IC0zOTcyMDc1LjgzOTg5NTEyNjY4MzYyNjA5NjA5MDA2NDI1RS02MDUgLT4gLTQuMjc1MzYzNjAwNjk1MzczNTI2OTgwNjY0MDgwMjE3NzNFLTU5NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDI0IHBvd2VyIDEwNzYzNS40OTc3MzUzMTY1MTUwODA3MjAzMzA1MzYwMjcgLTQgLT4gNy40NTAzNzExMTUwMjkxMDQ4NzgwMzQzMjgwNjMzNDcxNEUtMjEgSW5leGFjdCBSb3VuZGVkCityZW14MzQyNCByZW1haW5kZXIgMTA3NjM1LjQ5NzczNTMxNjUxNTA4MDcyMDMzMDUzNjAyNyAtMzk3MjA3NS44Mzk4OTUxMjY2ODM2MjYwOTYwOTAwNjQyNUUtNjA1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQyNCBzdWJ0cmFjdCAxMDc2MzUuNDk3NzM1MzE2NTE1MDgwNzIwMzMwNTM2MDI3IC0zOTcyMDc1LjgzOTg5NTEyNjY4MzYyNjA5NjA5MDA2NDI1RS02MDUgLT4gMTA3NjM1LjQ5NzczNTMxNjUxNTA4MDcyMDMzMDUzNjAyNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDI1IGFkZCAtMzIxNzQyOTEzNDU2ODYuNTM3MTQ0NjYxNjY3MDk2MTgwNyA3OTUxODg2Mzc1OTM4NS41OTI1MDUyNzQ3ODY3MDk5MDkxRSs0MDggLT4gNy45NTE4ODYzNzU5Mzg1NTkyNTA1Mjc0Nzg2NzA5OTA5MUUrNDIxIEluZXhhY3QgUm91bmRlZAorY29teDM0MjUgY29tcGFyZSAtMzIxNzQyOTEzNDU2ODYuNTM3MTQ0NjYxNjY3MDk2MTgwNyA3OTUxODg2Mzc1OTM4NS41OTI1MDUyNzQ3ODY3MDk5MDkxRSs0MDggLT4gLTEKK2RpdngzNDI1IGRpdmlkZSAtMzIxNzQyOTEzNDU2ODYuNTM3MTQ0NjYxNjY3MDk2MTgwNyA3OTUxODg2Mzc1OTM4NS41OTI1MDUyNzQ3ODY3MDk5MDkxRSs0MDggLT4gLTQuMDQ2MTIwNjA4OTQ2NTgwMDc3MTU2MjE4MDc4ODEwNzZFLTQwOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDI1IGRpdmlkZWludCAtMzIxNzQyOTEzNDU2ODYuNTM3MTQ0NjYxNjY3MDk2MTgwNyA3OTUxODg2Mzc1OTM4NS41OTI1MDUyNzQ3ODY3MDk5MDkxRSs0MDggLT4gLTAKK211bHgzNDI1IG11bHRpcGx5IC0zMjE3NDI5MTM0NTY4Ni41MzcxNDQ2NjE2NjcwOTYxODA3IDc5NTE4ODYzNzU5Mzg1LjU5MjUwNTI3NDc4NjcwOTkwOTFFKzQwOCAtPiAtMi41NTg0NjMwOTAwNzI0MjY2ODUxMzIyNjgxNDA0MzU5M0UrNDM1IEluZXhhY3QgUm91bmRlZAorcG93eDM0MjUgcG93ZXIgLTMyMTc0MjkxMzQ1Njg2LjUzNzE0NDY2MTY2NzA5NjE4MDcgOCAtPiAxLjE0ODM0Mzc3NjU2MTA5MTQzMjEwMDU4NjkwNTkwNjY2RSsxMDggSW5leGFjdCBSb3VuZGVkCityZW14MzQyNSByZW1haW5kZXIgLTMyMTc0MjkxMzQ1Njg2LjUzNzE0NDY2MTY2NzA5NjE4MDcgNzk1MTg4NjM3NTkzODUuNTkyNTA1Mjc0Nzg2NzA5OTA5MUUrNDA4IC0+IC0zMjE3NDI5MTM0NTY4Ni41MzcxNDQ2NjE2NjcwOTYxODA3CitzdWJ4MzQyNSBzdWJ0cmFjdCAtMzIxNzQyOTEzNDU2ODYuNTM3MTQ0NjYxNjY3MDk2MTgwNyA3OTUxODg2Mzc1OTM4NS41OTI1MDUyNzQ3ODY3MDk5MDkxRSs0MDggLT4gLTcuOTUxODg2Mzc1OTM4NTU5MjUwNTI3NDc4NjcwOTkwOTFFKzQyMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDI2IGFkZCAtODE1MTczMDQ5NC41MzE5MDUyMzYyMDg5OTQxMDU0NDA5OUUrNjg4IC05MzE3My4wNjMxNDc0NTI3MTQyMzA3NjQ0MjM5OTE5NDgwRSs5MDAgLT4gLTkuMzE3MzA2MzE0NzQ1MjcxNDIzMDc2NDQyMzk5MTk0ODBFKzkwNCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDI2IGNvbXBhcmUgLTgxNTE3MzA0OTQuNTMxOTA1MjM2MjA4OTk0MTA1NDQwOTlFKzY4OCAtOTMxNzMuMDYzMTQ3NDUyNzE0MjMwNzY0NDIzOTkxOTQ4MEUrOTAwIC0+IDEKK2RpdngzNDI2IGRpdmlkZSAtODE1MTczMDQ5NC41MzE5MDUyMzYyMDg5OTQxMDU0NDA5OUUrNjg4IC05MzE3My4wNjMxNDc0NTI3MTQyMzA3NjQ0MjM5OTE5NDgwRSs5MDAgLT4gOC43NDkwMjA2MDY1NTc5NjcxNzA0MzY3ODQ0MTg4NDI4M0UtMjA4IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MjYgZGl2aWRlaW50IC04MTUxNzMwNDk0LjUzMTkwNTIzNjIwODk5NDEwNTQ0MDk5RSs2ODggLTkzMTczLjA2MzE0NzQ1MjcxNDIzMDc2NDQyMzk5MTk0ODBFKzkwMCAtPiAwCittdWx4MzQyNiBtdWx0aXBseSAtODE1MTczMDQ5NC41MzE5MDUyMzYyMDg5OTQxMDU0NDA5OUUrNjg4IC05MzE3My4wNjMxNDc0NTI3MTQyMzA3NjQ0MjM5OTE5NDgwRSs5MDAgLT4gNy41OTUyMTcwMDEyODAzNzE0OTE3OTc1MTQ2NzczMDk2MkUrMTYwMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDI2IHBvd2VyIC04MTUxNzMwNDk0LjUzMTkwNTIzNjIwODk5NDEwNTQ0MDk5RSs2ODggLTkgLT4gLTYuMjkxNDYzNTI3NzQ4NDI0NDgzNzUyNzUyODIxODM3MDBFLTYyODIgSW5leGFjdCBSb3VuZGVkCityZW14MzQyNiByZW1haW5kZXIgLTgxNTE3MzA0OTQuNTMxOTA1MjM2MjA4OTk0MTA1NDQwOTlFKzY4OCAtOTMxNzMuMDYzMTQ3NDUyNzE0MjMwNzY0NDIzOTkxOTQ4MEUrOTAwIC0+IC04LjE1MTczMDQ5NDUzMTkwNTIzNjIwODk5NDEwNTQ0MDk5RSs2OTcKK3N1YngzNDI2IHN1YnRyYWN0IC04MTUxNzMwNDk0LjUzMTkwNTIzNjIwODk5NDEwNTQ0MDk5RSs2ODggLTkzMTczLjA2MzE0NzQ1MjcxNDIzMDc2NDQyMzk5MTk0ODBFKzkwMCAtPiA5LjMxNzMwNjMxNDc0NTI3MTQyMzA3NjQ0MjM5OTE5NDgwRSs5MDQgSW5leGFjdCBSb3VuZGVkCithZGR4MzQyNyBhZGQgMS4zMzY0OTgwMTM0NTk3NjE5OTcwODM0MTc5OTUwNTIyMCAtNTY2MjMuMDUzMDAzOTUyODk2OTgyNTQ4MDc1NTE1OTU2MkUrNDU5IC0+IC01LjY2MjMwNTMwMDM5NTI4OTY5ODI1NDgwNzU1MTU5NTYyRSs0NjMgSW5leGFjdCBSb3VuZGVkCitjb214MzQyNyBjb21wYXJlIDEuMzM2NDk4MDEzNDU5NzYxOTk3MDgzNDE3OTk1MDUyMjAgLTU2NjIzLjA1MzAwMzk1Mjg5Njk4MjU0ODA3NTUxNTk1NjJFKzQ1OSAtPiAxCitkaXZ4MzQyNyBkaXZpZGUgMS4zMzY0OTgwMTM0NTk3NjE5OTcwODM0MTc5OTUwNTIyMCAtNTY2MjMuMDUzMDAzOTUyODk2OTgyNTQ4MDc1NTE1OTU2MkUrNDU5IC0+IC0yLjM2MDM0MjU1MDUyNzAwOTAwMzk1Nzg3MTMxMzM0NjA4RS00NjQgSW5leGFjdCBSb3VuZGVkCitkdml4MzQyNyBkaXZpZGVpbnQgMS4zMzY0OTgwMTM0NTk3NjE5OTcwODM0MTc5OTUwNTIyMCAtNTY2MjMuMDUzMDAzOTUyODk2OTgyNTQ4MDc1NTE1OTU2MkUrNDU5IC0+IC0wCittdWx4MzQyNyBtdWx0aXBseSAxLjMzNjQ5ODAxMzQ1OTc2MTk5NzA4MzQxNzk5NTA1MjIwIC01NjYyMy4wNTMwMDM5NTI4OTY5ODI1NDgwNzU1MTU5NTYyRSs0NTkgLT4gLTcuNTY3NjU5Nzg1NTgwOTg1NTg5MjgyNjgxMjk3MDAwNTJFKzQ2MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDI3IHBvd2VyIDEuMzM2NDk4MDEzNDU5NzYxOTk3MDgzNDE3OTk1MDUyMjAgLTYgLT4gMC4xNzU0NjQ4MzU5MTIyODQ5MDAxODAzMDUwMjg5NjUxODggSW5leGFjdCBSb3VuZGVkCityZW14MzQyNyByZW1haW5kZXIgMS4zMzY0OTgwMTM0NTk3NjE5OTcwODM0MTc5OTUwNTIyMCAtNTY2MjMuMDUzMDAzOTUyODk2OTgyNTQ4MDc1NTE1OTU2MkUrNDU5IC0+IDEuMzM2NDk4MDEzNDU5NzYxOTk3MDgzNDE3OTk1MDUyMjAKK3N1YngzNDI3IHN1YnRyYWN0IDEuMzM2NDk4MDEzNDU5NzYxOTk3MDgzNDE3OTk1MDUyMjAgLTU2NjIzLjA1MzAwMzk1Mjg5Njk4MjU0ODA3NTUxNTk1NjJFKzQ1OSAtPiA1LjY2MjMwNTMwMDM5NTI4OTY5ODI1NDgwNzU1MTU5NTYyRSs0NjMgSW5leGFjdCBSb3VuZGVkCithZGR4MzQyOCBhZGQgNjc3NjIyMzgxNjI3ODguNjU1MTA2MTQ3NjAxODE4NTE5NiAtNjE0MC43NTgzNzk1OTI0ODEwMDM1Mjc4ODg1MzgwOTM3NkUtODIyIC0+IDY3NzYyMjM4MTYyNzg4LjY1NTEwNjE0NzYwMTgxODUxOTYgSW5leGFjdCBSb3VuZGVkCitjb214MzQyOCBjb21wYXJlIDY3NzYyMjM4MTYyNzg4LjY1NTEwNjE0NzYwMTgxODUxOTYgLTYxNDAuNzU4Mzc5NTkyNDgxMDAzNTI3ODg4NTM4MDkzNzZFLTgyMiAtPiAxCitkaXZ4MzQyOCBkaXZpZGUgNjc3NjIyMzgxNjI3ODguNjU1MTA2MTQ3NjAxODE4NTE5NiAtNjE0MC43NTgzNzk1OTI0ODEwMDM1Mjc4ODg1MzgwOTM3NkUtODIyIC0+IC0xLjEwMzQ4MzIxNzc3Mjk0MTU3MDE0OTQxOTUxODcwNDA5RSs4MzIgSW5leGFjdCBSb3VuZGVkCitkdml4MzQyOCBkaXZpZGVpbnQgNjc3NjIyMzgxNjI3ODguNjU1MTA2MTQ3NjAxODE4NTE5NiAtNjE0MC43NTgzNzk1OTI0ODEwMDM1Mjc4ODg1MzgwOTM3NkUtODIyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQyOCBtdWx0aXBseSA2Nzc2MjIzODE2Mjc4OC42NTUxMDYxNDc2MDE4MTg1MTk2IC02MTQwLjc1ODM3OTU5MjQ4MTAwMzUyNzg4ODUzODA5Mzc2RS04MjIgLT4gLTQuMTYxMTE1MzE4MTgwODU4Mzg3MTcyMDE4Mjg3NzM4NTdFLTgwNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDI4IHBvd2VyIDY3NzYyMjM4MTYyNzg4LjY1NTEwNjE0NzYwMTgxODUxOTYgLTYgLT4gMS4wMzI5MzYzMTcwODAwNjUwOTA3NDk3Mjc2NDY3MDI4MUUtODMgSW5leGFjdCBSb3VuZGVkCityZW14MzQyOCByZW1haW5kZXIgNjc3NjIyMzgxNjI3ODguNjU1MTA2MTQ3NjAxODE4NTE5NiAtNjE0MC43NTgzNzk1OTI0ODEwMDM1Mjc4ODg1MzgwOTM3NkUtODIyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQyOCBzdWJ0cmFjdCA2Nzc2MjIzODE2Mjc4OC42NTUxMDYxNDc2MDE4MTg1MTk2IC02MTQwLjc1ODM3OTU5MjQ4MTAwMzUyNzg4ODUzODA5Mzc2RS04MjIgLT4gNjc3NjIyMzgxNjI3ODguNjU1MTA2MTQ3NjAxODE4NTE5NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDI5IGFkZCA0Mjg2NTYyLjc2NTY4ODY2NzUxNTc3MzA2MDU2NDk4MjcxIDYyODYuNzcyOTE1Nzg0OTc1ODAwMTU1NTc5NzkzNDk4OTNFKzgyMCAtPiA2LjI4Njc3MjkxNTc4NDk3NTgwMDE1NTU3OTc5MzQ5ODkzRSs4MjMgSW5leGFjdCBSb3VuZGVkCitjb214MzQyOSBjb21wYXJlIDQyODY1NjIuNzY1Njg4NjY3NTE1NzczMDYwNTY0OTgyNzEgNjI4Ni43NzI5MTU3ODQ5NzU4MDAxNTU1Nzk3OTM0OTg5M0UrODIwIC0+IC0xCitkaXZ4MzQyOSBkaXZpZGUgNDI4NjU2Mi43NjU2ODg2Njc1MTU3NzMwNjA1NjQ5ODI3MSA2Mjg2Ljc3MjkxNTc4NDk3NTgwMDE1NTU3OTc5MzQ5ODkzRSs4MjAgLT4gNi44MTgzODMzMzEzMzY2MDAyNTc0MDY4MTQ1OTM0OTM3MkUtODE4IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MjkgZGl2aWRlaW50IDQyODY1NjIuNzY1Njg4NjY3NTE1NzczMDYwNTY0OTgyNzEgNjI4Ni43NzI5MTU3ODQ5NzU4MDAxNTU1Nzk3OTM0OTg5M0UrODIwIC0+IDAKK211bHgzNDI5IG11bHRpcGx5IDQyODY1NjIuNzY1Njg4NjY3NTE1NzczMDYwNTY0OTgyNzEgNjI4Ni43NzI5MTU3ODQ5NzU4MDAxNTU1Nzk3OTM0OTg5M0UrODIwIC0+IDIuNjk0ODY0NjY5NzE0Mzg1NDI5NzUxNTk4OTMzMDYyMTlFKzgzMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDI5IHBvd2VyIDQyODY1NjIuNzY1Njg4NjY3NTE1NzczMDYwNTY0OTgyNzEgNiAtPiA2LjIwMzc2MTkzMDY0NDEyMDgxMDU4MTgxODgxODA1MTA4RSszOSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDI5IHJlbWFpbmRlciA0Mjg2NTYyLjc2NTY4ODY2NzUxNTc3MzA2MDU2NDk4MjcxIDYyODYuNzcyOTE1Nzg0OTc1ODAwMTU1NTc5NzkzNDk4OTNFKzgyMCAtPiA0Mjg2NTYyLjc2NTY4ODY2NzUxNTc3MzA2MDU2NDk4MjcxCitzdWJ4MzQyOSBzdWJ0cmFjdCA0Mjg2NTYyLjc2NTY4ODY2NzUxNTc3MzA2MDU2NDk4MjcxIDYyODYuNzcyOTE1Nzg0OTc1ODAwMTU1NTc5NzkzNDk4OTNFKzgyMCAtPiAtNi4yODY3NzI5MTU3ODQ5NzU4MDAxNTU1Nzk3OTM0OTg5M0UrODIzIEluZXhhY3QgUm91bmRlZAorYWRkeDM0MzAgYWRkIC03NjU3ODIuODI3NDMyNjQyNjk3MzA1NjQ0MDk2MzY1NTY2IDY3LjE2MzQzNjg0NTk1NzY4MzQ2OTI3NTgxMTQ2MTg2NTIgLT4gLTc2NTcxNS42NjM5OTU3OTY3Mzk2MjIxNzQ4MjA1NTQxMDQgSW5leGFjdCBSb3VuZGVkCitjb214MzQzMCBjb21wYXJlIC03NjU3ODIuODI3NDMyNjQyNjk3MzA1NjQ0MDk2MzY1NTY2IDY3LjE2MzQzNjg0NTk1NzY4MzQ2OTI3NTgxMTQ2MTg2NTIgLT4gLTEKK2RpdngzNDMwIGRpdmlkZSAtNzY1NzgyLjgyNzQzMjY0MjY5NzMwNTY0NDA5NjM2NTU2NiA2Ny4xNjM0MzY4NDU5NTc2ODM0NjkyNzU4MTE0NjE4NjUyIC0+IC0xMTQwMS43ODE0MzYzNjM5NDc4Nzc0NzYxNjk3NjUwODY3IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MzAgZGl2aWRlaW50IC03NjU3ODIuODI3NDMyNjQyNjk3MzA1NjQ0MDk2MzY1NTY2IDY3LjE2MzQzNjg0NTk1NzY4MzQ2OTI3NTgxMTQ2MTg2NTIgLT4gLTExNDAxCittdWx4MzQzMCBtdWx0aXBseSAtNzY1NzgyLjgyNzQzMjY0MjY5NzMwNTY0NDA5NjM2NTU2NiA2Ny4xNjM0MzY4NDU5NTc2ODM0NjkyNzU4MTE0NjE4NjUyIC0+IC01MTQzMjYwNi41Njc5OTEyMDg4NDY4MjU2MTIyMzE1OTQ0IEluZXhhY3QgUm91bmRlZAorcG93eDM0MzAgcG93ZXIgLTc2NTc4Mi44Mjc0MzI2NDI2OTczMDU2NDQwOTYzNjU1NjYgNjcgLT4gLTEuNzE4MjEyMDA3NzA3NDk3NzM1OTU0NzM1OTQxMzY1ODJFKzM5NCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDMwIHJlbWFpbmRlciAtNzY1NzgyLjgyNzQzMjY0MjY5NzMwNTY0NDA5NjM2NTU2NiA2Ny4xNjM0MzY4NDU5NTc2ODM0NjkyNzU4MTE0NjE4NjUyIC0+IC01Mi40ODM5NTE4NzkxNDgwNzI0MzA1Njk4ODg4NDA4NTQ4CitzdWJ4MzQzMCBzdWJ0cmFjdCAtNzY1NzgyLjgyNzQzMjY0MjY5NzMwNTY0NDA5NjM2NTU2NiA2Ny4xNjM0MzY4NDU5NTc2ODM0NjkyNzU4MTE0NjE4NjUyIC0+IC03NjU4NDkuOTkwODY5NDg4NjU0OTg5MTEzMzcyMTc3MDI4IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MzEgYWRkIDQ2LjI4MzU5MzE5MTYxMDYyNTI3NTY0NjU3MjQyMTEyNzYgNTkuMjk4OTIzNzgzNDA5MzExODMzMjgyNjYxNzk1Nzc5MSAtPiAxMDUuNTgyNTE2OTc1MDE5OTM3MTA4OTI5MjM0MjE2OTA3IEluZXhhY3QgUm91bmRlZAorY29teDM0MzEgY29tcGFyZSA0Ni4yODM1OTMxOTE2MTA2MjUyNzU2NDY1NzI0MjExMjc2IDU5LjI5ODkyMzc4MzQwOTMxMTgzMzI4MjY2MTc5NTc3OTEgLT4gLTEKK2RpdngzNDMxIGRpdmlkZSA0Ni4yODM1OTMxOTE2MTA2MjUyNzU2NDY1NzI0MjExMjc2IDU5LjI5ODkyMzc4MzQwOTMxMTgzMzI4MjY2MTc5NTc3OTEgLT4gMC43ODA1MTMyMDcyOTk3MjI5NzU4ODI0MTY5OTUxNDA3MDEgSW5leGFjdCBSb3VuZGVkCitkdml4MzQzMSBkaXZpZGVpbnQgNDYuMjgzNTkzMTkxNjEwNjI1Mjc1NjQ2NTcyNDIxMTI3NiA1OS4yOTg5MjM3ODM0MDkzMTE4MzMyODI2NjE3OTU3NzkxIC0+IDAKK211bHgzNDMxIG11bHRpcGx5IDQ2LjI4MzU5MzE5MTYxMDYyNTI3NTY0NjU3MjQyMTEyNzYgNTkuMjk4OTIzNzgzNDA5MzExODMzMjgyNjYxNzk1Nzc5MSAtPiAyNzQ0LjU2NzI2NTA5MTY0MDYwNTYxMzcwNjUzMjg2NjE0IEluZXhhY3QgUm91bmRlZAorcG93eDM0MzEgcG93ZXIgNDYuMjgzNTkzMTkxNjEwNjI1Mjc1NjQ2NTcyNDIxMTI3NiA1OSAtPiAxLjgyMDUyNjQ1NzgwNjAxMDAyNjcxMDA3OTQzOTIzOTkzRSs5OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDMxIHJlbWFpbmRlciA0Ni4yODM1OTMxOTE2MTA2MjUyNzU2NDY1NzI0MjExMjc2IDU5LjI5ODkyMzc4MzQwOTMxMTgzMzI4MjY2MTc5NTc3OTEgLT4gNDYuMjgzNTkzMTkxNjEwNjI1Mjc1NjQ2NTcyNDIxMTI3Ngorc3VieDM0MzEgc3VidHJhY3QgNDYuMjgzNTkzMTkxNjEwNjI1Mjc1NjQ2NTcyNDIxMTI3NiA1OS4yOTg5MjM3ODM0MDkzMTE4MzMyODI2NjE3OTU3NzkxIC0+IC0xMy4wMTUzMzA1OTE3OTg2ODY1NTc2MzYwODkzNzQ2NTE1CithZGR4MzQzMiBhZGQgLTMwMjk1NTUuODIyOTg4NDAyMzQwMjk0NzQ0NTk2OTQ2NDQgODU3NTM1ODQ0NjU1MDA0NzM3MzczMDg5NjAxMTI4NTMyIC0+IDg1NzUzNTg0NDY1NTAwNDczNzM3MzA4OTU5ODA5ODk3NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDMyIGNvbXBhcmUgLTMwMjk1NTUuODIyOTg4NDAyMzQwMjk0NzQ0NTk2OTQ2NDQgODU3NTM1ODQ0NjU1MDA0NzM3MzczMDg5NjAxMTI4NTMyIC0+IC0xCitkaXZ4MzQzMiBkaXZpZGUgLTMwMjk1NTUuODIyOTg4NDAyMzQwMjk0NzQ0NTk2OTQ2NDQgODU3NTM1ODQ0NjU1MDA0NzM3MzczMDg5NjAxMTI4NTMyIC0+IC0zLjUzMjg2MjAyNzcxNzU5NzA0NTAyMTI2ODExMzIzOTM3RS0yNyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDMyIGRpdmlkZWludCAtMzAyOTU1NS44MjI5ODg0MDIzNDAyOTQ3NDQ1OTY5NDY0NCA4NTc1MzU4NDQ2NTUwMDQ3MzczNzMwODk2MDExMjg1MzIgLT4gLTAKK211bHgzNDMyIG11bHRpcGx5IC0zMDI5NTU1LjgyMjk4ODQwMjM0MDI5NDc0NDU5Njk0NjQ0IDg1NzUzNTg0NDY1NTAwNDczNzM3MzA4OTYwMTEyODUzMiAtPiAtMi41OTc5NTI3MTE1OTU4NDc2MTkyODk4NjE4MTkyNTcyMUUrMzkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQzMiBwb3dlciAtMzAyOTU1NS44MjI5ODg0MDIzNDAyOTQ3NDQ1OTY5NDY0NCA5IC0+IC0yLjE0OTg2MjI0NzkwNDMxMzAyNTYxMzQwMTAwNzQ2MzYwRSs1OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDMyIHJlbWFpbmRlciAtMzAyOTU1NS44MjI5ODg0MDIzNDAyOTQ3NDQ1OTY5NDY0NCA4NTc1MzU4NDQ2NTUwMDQ3MzczNzMwODk2MDExMjg1MzIgLT4gLTMwMjk1NTUuODIyOTg4NDAyMzQwMjk0NzQ0NTk2OTQ2NDQKK3N1YngzNDMyIHN1YnRyYWN0IC0zMDI5NTU1LjgyMjk4ODQwMjM0MDI5NDc0NDU5Njk0NjQ0IDg1NzUzNTg0NDY1NTAwNDczNzM3MzA4OTYwMTEyODUzMiAtPiAtODU3NTM1ODQ0NjU1MDA0NzM3MzczMDg5NjA0MTU4MDg4IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MzMgYWRkIC0wMTM4NDY2Nzg5NTIzLjEwNjk0MTc2NTQzNzAwNTAxOTQ1RS05NDggNDgxMDI2OTc5OTE4ODgyNDg3MzgzNjU0MzY3OTI0NjE5IC0+IDQ4MTAyNjk3OTkxODg4MjQ4NzM4MzY1NDM2NzkyNDYxOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDMzIGNvbXBhcmUgLTAxMzg0NjY3ODk1MjMuMTA2OTQxNzY1NDM3MDA1MDE5NDVFLTk0OCA0ODEwMjY5Nzk5MTg4ODI0ODczODM2NTQzNjc5MjQ2MTkgLT4gLTEKK2RpdngzNDMzIGRpdmlkZSAtMDEzODQ2Njc4OTUyMy4xMDY5NDE3NjU0MzcwMDUwMTk0NUUtOTQ4IDQ4MTAyNjk3OTkxODg4MjQ4NzM4MzY1NDM2NzkyNDYxOSAtPiAtMi44Nzg1NjU5NzAzODM5NzIwNzc5Nzc3NzgxMTE5OTgwNEUtOTcwIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MzMgZGl2aWRlaW50IC0wMTM4NDY2Nzg5NTIzLjEwNjk0MTc2NTQzNzAwNTAxOTQ1RS05NDggNDgxMDI2OTc5OTE4ODgyNDg3MzgzNjU0MzY3OTI0NjE5IC0+IC0wCittdWx4MzQzMyBtdWx0aXBseSAtMDEzODQ2Njc4OTUyMy4xMDY5NDE3NjU0MzcwMDUwMTk0NUUtOTQ4IDQ4MTAyNjk3OTkxODg4MjQ4NzM4MzY1NDM2NzkyNDYxOSAtPiAtNi42NjA2MjYxNTgzMzYzNjkwODY4Mzc4NTI4MzY4NzQxNkUtOTA1IEluZXhhY3QgUm91bmRlZAorcG93eDM0MzMgcG93ZXIgLTAxMzg0NjY3ODk1MjMuMTA2OTQxNzY1NDM3MDA1MDE5NDVFLTk0OCA1IC0+IC01LjA5MDEyMTA5MDkyNjM3NTI1ODQzNjM2MDU2NzQ2NjY3RS00Njg1IEluZXhhY3QgUm91bmRlZAorcmVteDM0MzMgcmVtYWluZGVyIC0wMTM4NDY2Nzg5NTIzLjEwNjk0MTc2NTQzNzAwNTAxOTQ1RS05NDggNDgxMDI2OTc5OTE4ODgyNDg3MzgzNjU0MzY3OTI0NjE5IC0+IC0xLjM4NDY2Nzg5NTIzMTA2OTQxNzY1NDM3MDA1MDE5NDVFLTkzNworc3VieDM0MzMgc3VidHJhY3QgLTAxMzg0NjY3ODk1MjMuMTA2OTQxNzY1NDM3MDA1MDE5NDVFLTk0OCA0ODEwMjY5Nzk5MTg4ODI0ODczODM2NTQzNjc5MjQ2MTkgLT4gLTQ4MTAyNjk3OTkxODg4MjQ4NzM4MzY1NDM2NzkyNDYxOSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDM0IGFkZCAtOTU5MzU2NjQ2Ni45NjY5MDU3NTcxNDI0NDQ0MjEwOTg3MCAtODc2MzIwMzQzNDcuNDg0NTQ3Nzk2MTk3Njc3NjgzMzc3MEUrNzY5IC0+IC04Ljc2MzIwMzQzNDc0ODQ1NDc3OTYxOTc2Nzc2ODMzNzcwRSs3NzkgSW5leGFjdCBSb3VuZGVkCitjb214MzQzNCBjb21wYXJlIC05NTkzNTY2NDY2Ljk2NjkwNTc1NzE0MjQ0NDQyMTA5ODcwIC04NzYzMjAzNDM0Ny40ODQ1NDc3OTYxOTc2Nzc2ODMzNzcwRSs3NjkgLT4gMQorZGl2eDM0MzQgZGl2aWRlIC05NTkzNTY2NDY2Ljk2NjkwNTc1NzE0MjQ0NDQyMTA5ODcwIC04NzYzMjAzNDM0Ny40ODQ1NDc3OTYxOTc2Nzc2ODMzNzcwRSs3NjkgLT4gMS4wOTQ3NTU2NDkzOTI1MzEzNDA3MDczMDI5OTg2Mzc2NUUtNzcwIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MzQgZGl2aWRlaW50IC05NTkzNTY2NDY2Ljk2NjkwNTc1NzE0MjQ0NDQyMTA5ODcwIC04NzYzMjAzNDM0Ny40ODQ1NDc3OTYxOTc2Nzc2ODMzNzcwRSs3NjkgLT4gMAorbXVseDM0MzQgbXVsdGlwbHkgLTk1OTM1NjY0NjYuOTY2OTA1NzU3MTQyNDQ0NDIxMDk4NzAgLTg3NjMyMDM0MzQ3LjQ4NDU0Nzc5NjE5NzY3NzY4MzM3NzBFKzc2OSAtPiA4LjQwNzAzNzQ2MTQ4MTE5ODY3NzExNDYzNDg1MDY1MzM2RSs3ODkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQzNCBwb3dlciAtOTU5MzU2NjQ2Ni45NjY5MDU3NTcxNDI0NDQ0MjEwOTg3MCAtOSAtPiAtMS40NTI3MTA5MTg0MTg4Mjk2MDAxMDk2NDQyMTA2Njc0NUUtOTAgSW5leGFjdCBSb3VuZGVkCityZW14MzQzNCByZW1haW5kZXIgLTk1OTM1NjY0NjYuOTY2OTA1NzU3MTQyNDQ0NDIxMDk4NzAgLTg3NjMyMDM0MzQ3LjQ4NDU0Nzc5NjE5NzY3NzY4MzM3NzBFKzc2OSAtPiAtOTU5MzU2NjQ2Ni45NjY5MDU3NTcxNDI0NDQ0MjEwOTg3MAorc3VieDM0MzQgc3VidHJhY3QgLTk1OTM1NjY0NjYuOTY2OTA1NzU3MTQyNDQ0NDIxMDk4NzAgLTg3NjMyMDM0MzQ3LjQ4NDU0Nzc5NjE5NzY3NzY4MzM3NzBFKzc2OSAtPiA4Ljc2MzIwMzQzNDc0ODQ1NDc3OTYxOTc2Nzc2ODMzNzcwRSs3NzkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQzNSBhZGQgLTMxODkuMzA3NjU0Nzc2NzA1MjY4MjMxMDYxMDAyNDE4NjNFLTg5OCA1NjU2ODg4ODkuMzU1MjQxOTQ2MTU0ODk0MzExMjUzMjAyRS00NjYgLT4gNS42NTY4ODg4OTM1NTI0MTk0NjE1NDg5NDMxMTI1MzIwMkUtNDU4IEluZXhhY3QgUm91bmRlZAorY29teDM0MzUgY29tcGFyZSAtMzE4OS4zMDc2NTQ3NzY3MDUyNjgyMzEwNjEwMDI0MTg2M0UtODk4IDU2NTY4ODg4OS4zNTUyNDE5NDYxNTQ4OTQzMTEyNTMyMDJFLTQ2NiAtPiAtMQorZGl2eDM0MzUgZGl2aWRlIC0zMTg5LjMwNzY1NDc3NjcwNTI2ODIzMTA2MTAwMjQxODYzRS04OTggNTY1Njg4ODg5LjM1NTI0MTk0NjE1NDg5NDMxMTI1MzIwMkUtNDY2IC0+IC01LjYzNzkxODE0Njg2NjU1NDg2NjEyNTY5OTcwNjI5MTI4RS00MzggSW5leGFjdCBSb3VuZGVkCitkdml4MzQzNSBkaXZpZGVpbnQgLTMxODkuMzA3NjU0Nzc2NzA1MjY4MjMxMDYxMDAyNDE4NjNFLTg5OCA1NjU2ODg4ODkuMzU1MjQxOTQ2MTU0ODk0MzExMjUzMjAyRS00NjYgLT4gLTAKK211bHgzNDM1IG11bHRpcGx5IC0zMTg5LjMwNzY1NDc3NjcwNTI2ODIzMTA2MTAwMjQxODYzRS04OTggNTY1Njg4ODg5LjM1NTI0MTk0NjE1NDg5NDMxMTI1MzIwMkUtNDY2IC0+IC0xLjgwNDE1NTkwNTA0MjgwNTgwNDQzNTY1NDQ4MTI2NTQ4RS0xMzUyIEluZXhhY3QgUm91bmRlZAorcG93eDM0MzUgcG93ZXIgLTMxODkuMzA3NjU0Nzc2NzA1MjY4MjMxMDYxMDAyNDE4NjNFLTg5OCA2IC0+IDEuMDUyMzk0MzEwMjc2ODM5MDQ1MTQzMTE1MjcyMjg3MzZFLTUzNjcgSW5leGFjdCBSb3VuZGVkCityZW14MzQzNSByZW1haW5kZXIgLTMxODkuMzA3NjU0Nzc2NzA1MjY4MjMxMDYxMDAyNDE4NjNFLTg5OCA1NjU2ODg4ODkuMzU1MjQxOTQ2MTU0ODk0MzExMjUzMjAyRS00NjYgLT4gLTMuMTg5MzA3NjU0Nzc2NzA1MjY4MjMxMDYxMDAyNDE4NjNFLTg5NQorc3VieDM0MzUgc3VidHJhY3QgLTMxODkuMzA3NjU0Nzc2NzA1MjY4MjMxMDYxMDAyNDE4NjNFLTg5OCA1NjU2ODg4ODkuMzU1MjQxOTQ2MTU0ODk0MzExMjUzMjAyRS00NjYgLT4gLTUuNjU2ODg4ODkzNTUyNDE5NDYxNTQ4OTQzMTEyNTMyMDJFLTQ1OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDM2IGFkZCAtMTcwODQ1NTIzOTUuNjcxNDgzNDY4MDA4ODE1MDU0Mzk2NSAtNjMxOTI1ODAyNjcyLjY4NTAzNDM3OTE5NzMyODM3MDgxMkUrNTI3IC0+IC02LjMxOTI1ODAyNjcyNjg1MDM0Mzc5MTk3MzI4MzcwODEyRSs1MzggSW5leGFjdCBSb3VuZGVkCitjb214MzQzNiBjb21wYXJlIC0xNzA4NDU1MjM5NS42NzE0ODM0NjgwMDg4MTUwNTQzOTY1IC02MzE5MjU4MDI2NzIuNjg1MDM0Mzc5MTk3MzI4MzcwODEyRSs1MjcgLT4gMQorZGl2eDM0MzYgZGl2aWRlIC0xNzA4NDU1MjM5NS42NzE0ODM0NjgwMDg4MTUwNTQzOTY1IC02MzE5MjU4MDI2NzIuNjg1MDM0Mzc5MTk3MzI4MzcwODEyRSs1MjcgLT4gMi43MDM1NjkzNjI2MzkzNDYyMjA1MDM0MTMyODUxOTUzNEUtNTI5IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MzYgZGl2aWRlaW50IC0xNzA4NDU1MjM5NS42NzE0ODM0NjgwMDg4MTUwNTQzOTY1IC02MzE5MjU4MDI2NzIuNjg1MDM0Mzc5MTk3MzI4MzcwODEyRSs1MjcgLT4gMAorbXVseDM0MzYgbXVsdGlwbHkgLTE3MDg0NTUyMzk1LjY3MTQ4MzQ2ODAwODgxNTA1NDM5NjUgLTYzMTkyNTgwMjY3Mi42ODUwMzQzNzkxOTczMjgzNzA4MTJFKzUyNyAtPiAxLjA3OTYxNjk0ODU5MzgyNDYyMzQ2ODY2ODE3MzA2NzY5RSs1NDkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQzNiBwb3dlciAtMTcwODQ1NTIzOTUuNjcxNDgzNDY4MDA4ODE1MDU0Mzk2NSAtNiAtPiA0LjAyMTQxMDE0OTc3MTc3OTg0MTIzMDExODY4Mzg3NjIyRS02MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDM2IHJlbWFpbmRlciAtMTcwODQ1NTIzOTUuNjcxNDgzNDY4MDA4ODE1MDU0Mzk2NSAtNjMxOTI1ODAyNjcyLjY4NTAzNDM3OTE5NzMyODM3MDgxMkUrNTI3IC0+IC0xNzA4NDU1MjM5NS42NzE0ODM0NjgwMDg4MTUwNTQzOTY1CitzdWJ4MzQzNiBzdWJ0cmFjdCAtMTcwODQ1NTIzOTUuNjcxNDgzNDY4MDA4ODE1MDU0Mzk2NSAtNjMxOTI1ODAyNjcyLjY4NTAzNDM3OTE5NzMyODM3MDgxMkUrNTI3IC0+IDYuMzE5MjU4MDI2NzI2ODUwMzQzNzkxOTczMjgzNzA4MTJFKzUzOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDM3IGFkZCAwMzQ5NTY4MzAuMzQ5ODIzMzA2ODE1OTExODg3NDY5NzYwIC02MTYwMDgxNi4wNjcyMjc0MTI2OTY2MDQyOTU2NzgxNjY1RS02NjcgLT4gMzQ5NTY4MzAuMzQ5ODIzMzA2ODE1OTExODg3NDY5NzYwMCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDM3IGNvbXBhcmUgMDM0OTU2ODMwLjM0OTgyMzMwNjgxNTkxMTg4NzQ2OTc2MCAtNjE2MDA4MTYuMDY3MjI3NDEyNjk2NjA0Mjk1Njc4MTY2NUUtNjY3IC0+IDEKK2RpdngzNDM3IGRpdmlkZSAwMzQ5NTY4MzAuMzQ5ODIzMzA2ODE1OTExODg3NDY5NzYwIC02MTYwMDgxNi4wNjcyMjc0MTI2OTY2MDQyOTU2NzgxNjY1RS02NjcgLT4gLTUuNjc0NzM0OTQzNzE3ODc3Mzc2MDcxNjk5Nzk2MDIzNDNFKzY2NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDM3IGRpdmlkZWludCAwMzQ5NTY4MzAuMzQ5ODIzMzA2ODE1OTExODg3NDY5NzYwIC02MTYwMDgxNi4wNjcyMjc0MTI2OTY2MDQyOTU2NzgxNjY1RS02NjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDM3IG11bHRpcGx5IDAzNDk1NjgzMC4zNDk4MjMzMDY4MTU5MTE4ODc0Njk3NjAgLTYxNjAwODE2LjA2NzIyNzQxMjY5NjYwNDI5NTY3ODE2NjVFLTY2NyAtPiAtMi4xNTMzNjkyNzY2NzI3Mzg0MTYxNzEyODc4MTE3MzI5M0UtNjUyIEluZXhhY3QgUm91bmRlZAorcG93eDM0MzcgcG93ZXIgMDM0OTU2ODMwLjM0OTgyMzMwNjgxNTkxMTg4NzQ2OTc2MCAtNiAtPiA1LjQ4MDM0MjcyNTY2MDk4NDkzNDYyMTY5NDMxNzYyNTk3RS00NiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDM3IHJlbWFpbmRlciAwMzQ5NTY4MzAuMzQ5ODIzMzA2ODE1OTExODg3NDY5NzYwIC02MTYwMDgxNi4wNjcyMjc0MTI2OTY2MDQyOTU2NzgxNjY1RS02NjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDM3IHN1YnRyYWN0IDAzNDk1NjgzMC4zNDk4MjMzMDY4MTU5MTE4ODc0Njk3NjAgLTYxNjAwODE2LjA2NzIyNzQxMjY5NjYwNDI5NTY3ODE2NjVFLTY2NyAtPiAzNDk1NjgzMC4zNDk4MjMzMDY4MTU5MTE4ODc0Njk3NjAwIEluZXhhY3QgUm91bmRlZAorYWRkeDM0MzggYWRkIC03NjMuNDQwMDY3NzgxMjU2NjMyNjk1NzkxOTgxODkzNjA4IDE5LjkyNjM4MTEzNTA2MTEwMDc4MzMyMjA2MjA3NDU0MTMgLT4gLTc0My41MTM2ODY2NDYxOTU1MzE5MTI0Njk5MTk4MTkwNjcgSW5leGFjdCBSb3VuZGVkCitjb214MzQzOCBjb21wYXJlIC03NjMuNDQwMDY3NzgxMjU2NjMyNjk1NzkxOTgxODkzNjA4IDE5LjkyNjM4MTEzNTA2MTEwMDc4MzMyMjA2MjA3NDU0MTMgLT4gLTEKK2RpdngzNDM4IGRpdmlkZSAtNzYzLjQ0MDA2Nzc4MTI1NjYzMjY5NTc5MTk4MTg5MzYwOCAxOS45MjYzODExMzUwNjExMDA3ODMzMjIwNjIwNzQ1NDEzIC0+IC0zOC4zMTMwMzE0ODM1NzIyNzY2ODA3NzAzNTg1NDM1Njg4IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MzggZGl2aWRlaW50IC03NjMuNDQwMDY3NzgxMjU2NjMyNjk1NzkxOTgxODkzNjA4IDE5LjkyNjM4MTEzNTA2MTEwMDc4MzMyMjA2MjA3NDU0MTMgLT4gLTM4CittdWx4MzQzOCBtdWx0aXBseSAtNzYzLjQ0MDA2Nzc4MTI1NjYzMjY5NTc5MTk4MTg5MzYwOCAxOS45MjYzODExMzUwNjExMDA3ODMzMjIwNjIwNzQ1NDEzIC0+IC0xNTIxMi41OTc3NjQzODYyMDAyNTg1MDM5MzY0ODY4ODgzIEluZXhhY3QgUm91bmRlZAorcG93eDM0MzggcG93ZXIgLTc2My40NDAwNjc3ODEyNTY2MzI2OTU3OTE5ODE4OTM2MDggMjAgLT4gNC41MjM3NTQwNzcyNzMzNjc2OTU1MjQ4MTY2MTI1MDkyNEUrNTcgSW5leGFjdCBSb3VuZGVkCityZW14MzQzOCByZW1haW5kZXIgLTc2My40NDAwNjc3ODEyNTY2MzI2OTU3OTE5ODE4OTM2MDggMTkuOTI2MzgxMTM1MDYxMTAwNzgzMzIyMDYyMDc0NTQxMyAtPiAtNi4yMzc1ODQ2NDg5MzQ4MDI5Mjk1NTM2MjMwNjEwMzg2CitzdWJ4MzQzOCBzdWJ0cmFjdCAtNzYzLjQ0MDA2Nzc4MTI1NjYzMjY5NTc5MTk4MTg5MzYwOCAxOS45MjYzODExMzUwNjExMDA3ODMzMjIwNjIwNzQ1NDEzIC0+IC03ODMuMzY2NDQ4OTE2MzE3NzMzNDc5MTE0MDQzOTY4MTQ5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MzkgYWRkIC01MTA0NzIwMjc4Njg0NDA2Njc2ODQ1NzUxNDc1NTY2NTRFKzc4OSA4MzQ4NzIzNzg1NTA4MDE4ODk5ODM5MjcxNDg1ODc5MDkgLT4gLTUuMTA0NzIwMjc4Njg0NDA2Njc2ODQ1NzUxNDc1NTY2NTRFKzgyMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDM5IGNvbXBhcmUgLTUxMDQ3MjAyNzg2ODQ0MDY2NzY4NDU3NTE0NzU1NjY1NEUrNzg5IDgzNDg3MjM3ODU1MDgwMTg4OTk4MzkyNzE0ODU4NzkwOSAtPiAtMQorZGl2eDM0MzkgZGl2aWRlIC01MTA0NzIwMjc4Njg0NDA2Njc2ODQ1NzUxNDc1NTY2NTRFKzc4OSA4MzQ4NzIzNzg1NTA4MDE4ODk5ODM5MjcxNDg1ODc5MDkgLT4gLTYuMTE0MzcxOTgwNDc2MDM3NTQxMDc1MjY4NzQwNzE3MzdFKzc4OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDM5IGRpdmlkZWludCAtNTEwNDcyMDI3ODY4NDQwNjY3Njg0NTc1MTQ3NTU2NjU0RSs3ODkgODM0ODcyMzc4NTUwODAxODg5OTgzOTI3MTQ4NTg3OTA5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQzOSBtdWx0aXBseSAtNTEwNDcyMDI3ODY4NDQwNjY3Njg0NTc1MTQ3NTU2NjU0RSs3ODkgODM0ODcyMzc4NTUwODAxODg5OTgzOTI3MTQ4NTg3OTA5IC0+IC00LjI2MTc4OTk2MDkwMTc2Mjg5MTE1NTk0MDU3NDE5ODkyRSs4NTQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQzOSBwb3dlciAtNTEwNDcyMDI3ODY4NDQwNjY3Njg0NTc1MTQ3NTU2NjU0RSs3ODkgOCAtPiA0LjYxMDc5MjY2NjE5NTIyMTQ3MjYyNjAwNzU1Mjc0MTgyRSs2NTczIEluZXhhY3QgUm91bmRlZAorcmVteDM0MzkgcmVtYWluZGVyIC01MTA0NzIwMjc4Njg0NDA2Njc2ODQ1NzUxNDc1NTY2NTRFKzc4OSA4MzQ4NzIzNzg1NTA4MDE4ODk5ODM5MjcxNDg1ODc5MDkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDM5IHN1YnRyYWN0IC01MTA0NzIwMjc4Njg0NDA2Njc2ODQ1NzUxNDc1NTY2NTRFKzc4OSA4MzQ4NzIzNzg1NTA4MDE4ODk5ODM5MjcxNDg1ODc5MDkgLT4gLTUuMTA0NzIwMjc4Njg0NDA2Njc2ODQ1NzUxNDc1NTY2NTRFKzgyMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDQwIGFkZCAwNzAzMDQ3NjEuNTYwNTE3MDg2Njc2OTkzNTAzMDM0ODI4RS0wOTQgLTE3NzczLjc0NDY5NTk3NzEwNzcxMDQwNTc4NDUyNzM5OTJFLTc2MSAtPiA3LjAzMDQ3NjE1NjA1MTcwODY2NzY5OTM1MDMwMzQ4MjgwRS04NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDQwIGNvbXBhcmUgMDcwMzA0NzYxLjU2MDUxNzA4NjY3Njk5MzUwMzAzNDgyOEUtMDk0IC0xNzc3My43NDQ2OTU5NzcxMDc3MTA0MDU3ODQ1MjczOTkyRS03NjEgLT4gMQorZGl2eDM0NDAgZGl2aWRlIDA3MDMwNDc2MS41NjA1MTcwODY2NzY5OTM1MDMwMzQ4MjhFLTA5NCAtMTc3NzMuNzQ0Njk1OTc3MTA3NzEwNDA1Nzg0NTI3Mzk5MkUtNzYxIC0+IC0zLjk1NTU0MDE5NDk5NTAyNTM3NzQzODgzNDgzNDAyNjA4RSs2NzAgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ0MCBkaXZpZGVpbnQgMDcwMzA0NzYxLjU2MDUxNzA4NjY3Njk5MzUwMzAzNDgyOEUtMDk0IC0xNzc3My43NDQ2OTU5NzcxMDc3MTA0MDU3ODQ1MjczOTkyRS03NjEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDQwIG11bHRpcGx5IDA3MDMwNDc2MS41NjA1MTcwODY2NzY5OTM1MDMwMzQ4MjhFLTA5NCAtMTc3NzMuNzQ0Njk1OTc3MTA3NzEwNDA1Nzg0NTI3Mzk5MkUtNzYxIC0+IC0xLjI0OTU3ODg4Mjg4ODE3NTgxNTM4MTA4OTkxNDUzNzMyRS04NDMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ0MCBwb3dlciAwNzAzMDQ3NjEuNTYwNTE3MDg2Njc2OTkzNTAzMDM0ODI4RS0wOTQgLTIgLT4gMi4wMjMxNjEzNTQyNzYzMTQ4ODQ3OTkwMjkxOTk1OTYyN0UrMTcyIEluZXhhY3QgUm91bmRlZAorcmVteDM0NDAgcmVtYWluZGVyIDA3MDMwNDc2MS41NjA1MTcwODY2NzY5OTM1MDMwMzQ4MjhFLTA5NCAtMTc3NzMuNzQ0Njk1OTc3MTA3NzEwNDA1Nzg0NTI3Mzk5MkUtNzYxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ0MCBzdWJ0cmFjdCAwNzAzMDQ3NjEuNTYwNTE3MDg2Njc2OTkzNTAzMDM0ODI4RS0wOTQgLTE3NzczLjc0NDY5NTk3NzEwNzcxMDQwNTc4NDUyNzM5OTJFLTc2MSAtPiA3LjAzMDQ3NjE1NjA1MTcwODY2NzY5OTM1MDMwMzQ4MjgwRS04NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDQxIGFkZCAtMDk3MDcyNTY5NzY2Mi4yNzYwNTQ1NDMzNjIzMTE5NTQ2MyAtNDU0MS40MTg5NzU0NjY5NzE4NzE1NzkxMzg4NjQzMzQ3NCAtPiAtOTcwNzI1NzAyMjAzLjY5NTAzMDAxMDMzNDE4MzUzMzc2OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDQxIGNvbXBhcmUgLTA5NzA3MjU2OTc2NjIuMjc2MDU0NTQzMzYyMzExOTU0NjMgLTQ1NDEuNDE4OTc1NDY2OTcxODcxNTc5MTM4ODY0MzM0NzQgLT4gLTEKK2RpdngzNDQxIGRpdmlkZSAtMDk3MDcyNTY5NzY2Mi4yNzYwNTQ1NDMzNjIzMTE5NTQ2MyAtNDU0MS40MTg5NzU0NjY5NzE4NzE1NzkxMzg4NjQzMzQ3NCAtPiAyMTM3NDk0MjUuNjU0NDQ3ODExNjk4ODg0MDA3NTUzNjE0IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NDEgZGl2aWRlaW50IC0wOTcwNzI1Njk3NjYyLjI3NjA1NDU0MzM2MjMxMTk1NDYzIC00NTQxLjQxODk3NTQ2Njk3MTg3MTU3OTEzODg2NDMzNDc0IC0+IDIxMzc0OTQyNQorbXVseDM0NDEgbXVsdGlwbHkgLTA5NzA3MjU2OTc2NjIuMjc2MDU0NTQzMzYyMzExOTU0NjMgLTQ1NDEuNDE4OTc1NDY2OTcxODcxNTc5MTM4ODY0MzM0NzQgLT4gNDQwODQ3MjEwMzMzNjg3NS4yMTE2MTg2Nzg5MTcyNDM5MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDQxIHBvd2VyIC0wOTcwNzI1Njk3NjYyLjI3NjA1NDU0MzM2MjMxMTk1NDYzIC00NTQxIC0+IC0wRS0xMDAzMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzQ0MSByZW1haW5kZXIgLTA5NzA3MjU2OTc2NjIuMjc2MDU0NTQzMzYyMzExOTU0NjMgLTQ1NDEuNDE4OTc1NDY2OTcxODcxNTc5MTM4ODY0MzM0NzQgLT4gLTI5NzIuMTIxNzEwNTAyMTQ3NTM3NzA3OTI2MzE3NDc1NTAKK3N1YngzNDQxIHN1YnRyYWN0IC0wOTcwNzI1Njk3NjYyLjI3NjA1NDU0MzM2MjMxMTk1NDYzIC00NTQxLjQxODk3NTQ2Njk3MTg3MTU3OTEzODg2NDMzNDc0IC0+IC05NzA3MjU2OTMxMjAuODU3MDc5MDc2MzkwNDQwMzc1NDkxIEluZXhhY3QgUm91bmRlZAorYWRkeDM0NDIgYWRkIC04MDgxNzgyMzg2MzE4NDQyNjgzMTYxMTEyNTk1NTg2NzUgLTU5ODQwMC4yNjUxMDg2NDQ1MTQyMTEyNDQ5ODA0MjY1MjAgLT4gLTgwODE3ODIzODYzMTg0NDI2ODMxNjExMTI2MDE1NzA3NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDQyIGNvbXBhcmUgLTgwODE3ODIzODYzMTg0NDI2ODMxNjExMTI1OTU1ODY3NSAtNTk4NDAwLjI2NTEwODY0NDUxNDIxMTI0NDk4MDQyNjUyMCAtPiAtMQorZGl2eDM0NDIgZGl2aWRlIC04MDgxNzgyMzg2MzE4NDQyNjgzMTYxMTEyNTk1NTg2NzUgLTU5ODQwMC4yNjUxMDg2NDQ1MTQyMTEyNDQ5ODA0MjY1MjAgLT4gMTM1MDU2NDY0MDAxNTg0NzYzNTE3ODk0NTg4NC45NzgzNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDQyIGRpdmlkZWludCAtODA4MTc4MjM4NjMxODQ0MjY4MzE2MTExMjU5NTU4Njc1IC01OTg0MDAuMjY1MTA4NjQ0NTE0MjExMjQ0OTgwNDI2NTIwIC0+IDEzNTA1NjQ2NDAwMTU4NDc2MzUxNzg5NDU4ODQKK211bHgzNDQyIG11bHRpcGx5IC04MDgxNzgyMzg2MzE4NDQyNjgzMTYxMTEyNTk1NTg2NzUgLTU5ODQwMC4yNjUxMDg2NDQ1MTQyMTEyNDQ5ODA0MjY1MjAgLT4gNC44MzYxNDA3MjI1MjMzMjk3OTczMTM0ODQyMzE0NTIwOEUrMzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ0MiBwb3dlciAtODA4MTc4MjM4NjMxODQ0MjY4MzE2MTExMjU5NTU4Njc1IC01OTg0MDAgLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0NDIgcmVtYWluZGVyIC04MDgxNzgyMzg2MzE4NDQyNjgzMTYxMTEyNTk1NTg2NzUgLTU5ODQwMC4yNjUxMDg2NDQ1MTQyMTEyNDQ5ODA0MjY1MjAgLT4gLTU4NTQ1Mi4wOTc3NjQ1MzY1NzA5NTY4MTM2ODE1NTYzMjAKK3N1YngzNDQyIHN1YnRyYWN0IC04MDgxNzgyMzg2MzE4NDQyNjgzMTYxMTEyNTk1NTg2NzUgLTU5ODQwMC4yNjUxMDg2NDQ1MTQyMTEyNDQ5ODA0MjY1MjAgLT4gLTgwODE3ODIzODYzMTg0NDI2ODMxNjExMTI1ODk2MDI3NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDQzIGFkZCAtOS45MDgyNjU5NTA2OTA1MzU2NDMxMTM3MTc2NjMxNTIwMCAtMDMxLjYyNTkxNjc4MTMwNzg0Nzg2NDg3MjMyOTgwNjY0NiAtPiAtNDEuNTM0MTgyNzMxOTk4MzgzNTA3OTg2MDQ3NDY5Nzk4MCBSb3VuZGVkCitjb214MzQ0MyBjb21wYXJlIC05LjkwODI2NTk1MDY5MDUzNTY0MzExMzcxNzY2MzE1MjAwIC0wMzEuNjI1OTE2NzgxMzA3ODQ3ODY0ODcyMzI5ODA2NjQ2IC0+IDEKK2RpdngzNDQzIGRpdmlkZSAtOS45MDgyNjU5NTA2OTA1MzU2NDMxMTM3MTc2NjMxNTIwMCAtMDMxLjYyNTkxNjc4MTMwNzg0Nzg2NDg3MjMyOTgwNjY0NiAtPiAwLjMxMzI5NTc3MDAyMzIzMzIxODYzOTIxMzE0MDU5OTg1NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDQzIGRpdmlkZWludCAtOS45MDgyNjU5NTA2OTA1MzU2NDMxMTM3MTc2NjMxNTIwMCAtMDMxLjYyNTkxNjc4MTMwNzg0Nzg2NDg3MjMyOTgwNjY0NiAtPiAwCittdWx4MzQ0MyBtdWx0aXBseSAtOS45MDgyNjU5NTA2OTA1MzU2NDMxMTM3MTc2NjMxNTIwMCAtMDMxLjYyNTkxNjc4MTMwNzg0Nzg2NDg3MjMyOTgwNjY0NiAtPiAzMTMuMzU3OTk0NDAzNjA0OTY4MjUwOTM2MDM2OTc4MDg2IEluZXhhY3QgUm91bmRlZAorcG93eDM0NDMgcG93ZXIgLTkuOTA4MjY1OTUwNjkwNTM1NjQzMTEzNzE3NjYzMTUyMDAgLTMyIC0+IDEuMzQyOTk2OTgyNTkwMzgwMDMwMTE0Mzk1NjgwMDQ2MjVFLTMyIEluZXhhY3QgUm91bmRlZAorcmVteDM0NDMgcmVtYWluZGVyIC05LjkwODI2NTk1MDY5MDUzNTY0MzExMzcxNzY2MzE1MjAwIC0wMzEuNjI1OTE2NzgxMzA3ODQ3ODY0ODcyMzI5ODA2NjQ2IC0+IC05LjkwODI2NTk1MDY5MDUzNTY0MzExMzcxNzY2MzE1MjAwCitzdWJ4MzQ0MyBzdWJ0cmFjdCAtOS45MDgyNjU5NTA2OTA1MzU2NDMxMTM3MTc2NjMxNTIwMCAtMDMxLjYyNTkxNjc4MTMwNzg0Nzg2NDg3MjMyOTgwNjY0NiAtPiAyMS43MTc2NTA4MzA2MTczMTIyMjE3NTg2MTIxNDM0OTQwIFJvdW5kZWQKK2FkZHgzNDQ0IGFkZCAtMTk2OTI1LjQ2OTg5MTg5NzcxOTE2MDY5ODQ4Mzc1MjkwNyAtNDEyNjguOTk3NTQ0NDUzMzc5NDA2NzcyMzk1ODczOTc3OCAtPiAtMjM4MTk0LjQ2NzQzNjM1MTA5ODU2NzQ3MDg3OTYyNjg4NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDQ0IGNvbXBhcmUgLTE5NjkyNS40Njk4OTE4OTc3MTkxNjA2OTg0ODM3NTI5MDcgLTQxMjY4Ljk5NzU0NDQ1MzM3OTQwNjc3MjM5NTg3Mzk3NzggLT4gLTEKK2RpdngzNDQ0IGRpdmlkZSAtMTk2OTI1LjQ2OTg5MTg5NzcxOTE2MDY5ODQ4Mzc1MjkwNyAtNDEyNjguOTk3NTQ0NDUzMzc5NDA2NzcyMzk1ODczOTc3OCAtPiA0Ljc3MTc1MzE3MDg4Mjc0NzE1MjI2NTUzNTE2ODIwNTg5IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NDQgZGl2aWRlaW50IC0xOTY5MjUuNDY5ODkxODk3NzE5MTYwNjk4NDgzNzUyOTA3IC00MTI2OC45OTc1NDQ0NTMzNzk0MDY3NzIzOTU4NzM5Nzc4IC0+IDQKK211bHgzNDQ0IG11bHRpcGx5IC0xOTY5MjUuNDY5ODkxODk3NzE5MTYwNjk4NDgzNzUyOTA3IC00MTI2OC45OTc1NDQ0NTMzNzk0MDY3NzIzOTU4NzM5Nzc4IC0+IDgxMjY5MTY3MzMuNDA5MDU0ODcwMjYwMDMxMzU5ODc0NzIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ0NCBwb3dlciAtMTk2OTI1LjQ2OTg5MTg5NzcxOTE2MDY5ODQ4Mzc1MjkwNyAtNDEyNjkgLT4gLTBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDQ0IHJlbWFpbmRlciAtMTk2OTI1LjQ2OTg5MTg5NzcxOTE2MDY5ODQ4Mzc1MjkwNyAtNDEyNjguOTk3NTQ0NDUzMzc5NDA2NzcyMzk1ODczOTc3OCAtPiAtMzE4NDkuNDc5NzE0MDg0MjAxNTMzNjA4OTAwMjU2OTk1OAorc3VieDM0NDQgc3VidHJhY3QgLTE5NjkyNS40Njk4OTE4OTc3MTkxNjA2OTg0ODM3NTI5MDcgLTQxMjY4Ljk5NzU0NDQ1MzM3OTQwNjc3MjM5NTg3Mzk3NzggLT4gLTE1NTY1Ni40NzIzNDc0NDQzMzk3NTM5MjYwODc4Nzg5MjkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ0NSBhZGQgNDIxMDcxMTM1MjEyMTUyMjI1MTYyMDg2MDA1ODI0MzEwIDEzMzUzMjAzMzAuMDg5NjQzNTQ4NDU3OTY1MTAxNDUyNDZFLTYwNCAtPiA0MjEwNzExMzUyMTIxNTIyMjUxNjIwODYwMDU4MjQzMTAgSW5leGFjdCBSb3VuZGVkCitjb214MzQ0NSBjb21wYXJlIDQyMTA3MTEzNTIxMjE1MjIyNTE2MjA4NjAwNTgyNDMxMCAxMzM1MzIwMzMwLjA4OTY0MzU0ODQ1Nzk2NTEwMTQ1MjQ2RS02MDQgLT4gMQorZGl2eDM0NDUgZGl2aWRlIDQyMTA3MTEzNTIxMjE1MjIyNTE2MjA4NjAwNTgyNDMxMCAxMzM1MzIwMzMwLjA4OTY0MzU0ODQ1Nzk2NTEwMTQ1MjQ2RS02MDQgLT4gMy4xNTMzMzQyNjUzNzM0OTc0NDI4MTg2MDAwNTQ5NzMwNEUrNjI3IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NDUgZGl2aWRlaW50IDQyMTA3MTEzNTIxMjE1MjIyNTE2MjA4NjAwNTgyNDMxMCAxMzM1MzIwMzMwLjA4OTY0MzU0ODQ1Nzk2NTEwMTQ1MjQ2RS02MDQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDQ1IG11bHRpcGx5IDQyMTA3MTEzNTIxMjE1MjIyNTE2MjA4NjAwNTgyNDMxMCAxMzM1MzIwMzMwLjA4OTY0MzU0ODQ1Nzk2NTEwMTQ1MjQ2RS02MDQgLT4gNS42MjI2NDg0NzI2MjcxMjA0MDAyNzMxMTkzMjEyMTQ2MEUtNTYzIEluZXhhY3QgUm91bmRlZAorcG93eDM0NDUgcG93ZXIgNDIxMDcxMTM1MjEyMTUyMjI1MTYyMDg2MDA1ODI0MzEwIDEgLT4gNDIxMDcxMTM1MjEyMTUyMjI1MTYyMDg2MDA1ODI0MzEwCityZW14MzQ0NSByZW1haW5kZXIgNDIxMDcxMTM1MjEyMTUyMjI1MTYyMDg2MDA1ODI0MzEwIDEzMzUzMjAzMzAuMDg5NjQzNTQ4NDU3OTY1MTAxNDUyNDZFLTYwNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0NDUgc3VidHJhY3QgNDIxMDcxMTM1MjEyMTUyMjI1MTYyMDg2MDA1ODI0MzEwIDEzMzUzMjAzMzAuMDg5NjQzNTQ4NDU3OTY1MTAxNDUyNDZFLTYwNCAtPiA0MjEwNzExMzUyMTIxNTIyMjUxNjIwODYwMDU4MjQzMTAgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ0NiBhZGQgMTI0OTQ0MS40NjQyMTUxNDI4MjMwMTE4Mjc3MjI0NzIyNyAtMDI4OTg0OC43MTIwODkxMjI4MTk3NjM3NDcwNTE4MDgzNkUtNjc2IC0+IDEyNDk0NDEuNDY0MjE1MTQyODIzMDExODI3NzIyNDcyMjcgSW5leGFjdCBSb3VuZGVkCitjb214MzQ0NiBjb21wYXJlIDEyNDk0NDEuNDY0MjE1MTQyODIzMDExODI3NzIyNDcyMjcgLTAyODk4NDguNzEyMDg5MTIyODE5NzYzNzQ3MDUxODA4MzZFLTY3NiAtPiAxCitkaXZ4MzQ0NiBkaXZpZGUgMTI0OTQ0MS40NjQyMTUxNDI4MjMwMTE4Mjc3MjI0NzIyNyAtMDI4OTg0OC43MTIwODkxMjI4MTk3NjM3NDcwNTE4MDgzNkUtNjc2IC0+IC00LjMxMDY2NzY0MTc4MzI4OTkyNDQwNjM1Mzg3MjU1ODE2RSs2NzYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ0NiBkaXZpZGVpbnQgMTI0OTQ0MS40NjQyMTUxNDI4MjMwMTE4Mjc3MjI0NzIyNyAtMDI4OTg0OC43MTIwODkxMjI4MTk3NjM3NDcwNTE4MDgzNkUtNjc2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ0NiBtdWx0aXBseSAxMjQ5NDQxLjQ2NDIxNTE0MjgyMzAxMTgyNzcyMjQ3MjI3IC0wMjg5ODQ4LjcxMjA4OTEyMjgxOTc2Mzc0NzA1MTgwODM2RS02NzYgLT4gLTMuNjIxNDg5OTkyMzM1MDY5ODQ1NjY2MjA2MTE3MDAzNDlFLTY2NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDQ2IHBvd2VyIDEyNDk0NDEuNDY0MjE1MTQyODIzMDExODI3NzIyNDcyMjcgLTMgLT4gNS4xMjY4Njk0MjU3MjE5MTI4MjM0ODQxNTAyNDkzMjMyMkUtMTkgSW5leGFjdCBSb3VuZGVkCityZW14MzQ0NiByZW1haW5kZXIgMTI0OTQ0MS40NjQyMTUxNDI4MjMwMTE4Mjc3MjI0NzIyNyAtMDI4OTg0OC43MTIwODkxMjI4MTk3NjM3NDcwNTE4MDgzNkUtNjc2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ0NiBzdWJ0cmFjdCAxMjQ5NDQxLjQ2NDIxNTE0MjgyMzAxMTgyNzcyMjQ3MjI3IC0wMjg5ODQ4LjcxMjA4OTEyMjgxOTc2Mzc0NzA1MTgwODM2RS02NzYgLT4gMTI0OTQ0MS40NjQyMTUxNDI4MjMwMTE4Mjc3MjI0NzIyNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDQ3IGFkZCA3NDgxNTAwMC40NzE2ODc1NTU4MzU4OTM3Mjc5MDUyOTAzIC02OTA0MjU0MDE3MDgxNjc2MjIxOTQyNDE5MTUxOTUwMDFFKzg5MSAtPiAtNi45MDQyNTQwMTcwODE2NzYyMjE5NDI0MTkxNTE5NTAwMUUrOTIzIEluZXhhY3QgUm91bmRlZAorY29teDM0NDcgY29tcGFyZSA3NDgxNTAwMC40NzE2ODc1NTU4MzU4OTM3Mjc5MDUyOTAzIC02OTA0MjU0MDE3MDgxNjc2MjIxOTQyNDE5MTUxOTUwMDFFKzg5MSAtPiAxCitkaXZ4MzQ0NyBkaXZpZGUgNzQ4MTUwMDAuNDcxNjg3NTU1ODM1ODkzNzI3OTA1MjkwMyAtNjkwNDI1NDAxNzA4MTY3NjIyMTk0MjQxOTE1MTk1MDAxRSs4OTEgLT4gLTEuMDgzNjA3Mjk5MDE1Nzg0NTUxMDk5NjgzODgzMDkwNzlFLTkxNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDQ3IGRpdmlkZWludCA3NDgxNTAwMC40NzE2ODc1NTU4MzU4OTM3Mjc5MDUyOTAzIC02OTA0MjU0MDE3MDgxNjc2MjIxOTQyNDE5MTUxOTUwMDFFKzg5MSAtPiAtMAorbXVseDM0NDcgbXVsdGlwbHkgNzQ4MTUwMDAuNDcxNjg3NTU1ODM1ODkzNzI3OTA1MjkwMyAtNjkwNDI1NDAxNzA4MTY3NjIyMTk0MjQxOTE1MTk1MDAxRSs4OTEgLT4gLTUuMTY1NDE3Njc1NDQ2MTYzMDg3MzIwMjg4MTAwMjYyNzVFKzkzMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDQ3IHBvd2VyIDc0ODE1MDAwLjQ3MTY4NzU1NTgzNTg5MzcyNzkwNTI5MDMgLTcgLT4gNy42MjIxODAzMjI1MjY4MzgxNTUzNzkwNjk3MjQzOTk4NUUtNTYgSW5leGFjdCBSb3VuZGVkCityZW14MzQ0NyByZW1haW5kZXIgNzQ4MTUwMDAuNDcxNjg3NTU1ODM1ODkzNzI3OTA1MjkwMyAtNjkwNDI1NDAxNzA4MTY3NjIyMTk0MjQxOTE1MTk1MDAxRSs4OTEgLT4gNzQ4MTUwMDAuNDcxNjg3NTU1ODM1ODkzNzI3OTA1MjkwMworc3VieDM0NDcgc3VidHJhY3QgNzQ4MTUwMDAuNDcxNjg3NTU1ODM1ODkzNzI3OTA1MjkwMyAtNjkwNDI1NDAxNzA4MTY3NjIyMTk0MjQxOTE1MTk1MDAxRSs4OTEgLT4gNi45MDQyNTQwMTcwODE2NzYyMjE5NDI0MTkxNTE5NTAwMUUrOTIzIEluZXhhY3QgUm91bmRlZAorYWRkeDM0NDggYWRkIC0xNjgzOTkzLjUxMjEwMjQxNTU1NjY4NzkwNTU2NzU5MDIxIC03MjM5NDM4NDkyNzM0NC44NDAyNTg1MjI4MjY3NDkzMzc0IC0+IC03MjM5NDM4NjYxMTMzOC4zNTIzNjA5MzgzODM0MzcyNDMwIEluZXhhY3QgUm91bmRlZAorY29teDM0NDggY29tcGFyZSAtMTY4Mzk5My41MTIxMDI0MTU1NTY2ODc5MDU1Njc1OTAyMSAtNzIzOTQzODQ5MjczNDQuODQwMjU4NTIyODI2NzQ5MzM3NCAtPiAxCitkaXZ4MzQ0OCBkaXZpZGUgLTE2ODM5OTMuNTEyMTAyNDE1NTU2Njg3OTA1NTY3NTkwMjEgLTcyMzk0Mzg0OTI3MzQ0Ljg0MDI1ODUyMjgyNjc0OTMzNzQgLT4gMi4zMjYxMzgyOTYyMTI0NDExMzI4NDMwMTAwNDE1ODc5NEUtOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDQ4IGRpdmlkZWludCAtMTY4Mzk5My41MTIxMDI0MTU1NTY2ODc5MDU1Njc1OTAyMSAtNzIzOTQzODQ5MjczNDQuODQwMjU4NTIyODI2NzQ5MzM3NCAtPiAwCittdWx4MzQ0OCBtdWx0aXBseSAtMTY4Mzk5My41MTIxMDI0MTU1NTY2ODc5MDU1Njc1OTAyMSAtNzIzOTQzODQ5MjczNDQuODQwMjU4NTIyODI2NzQ5MzM3NCAtPiAxMjE5MTE2NzQ1MzAyOTM2MTM2MTUuNDQxMzg0ODIyMzgxIEluZXhhY3QgUm91bmRlZAorcG93eDM0NDggcG93ZXIgLTE2ODM5OTMuNTEyMTAyNDE1NTU2Njg3OTA1NTY3NTkwMjEgLTcgLT4gLTIuNjAzODU2ODM1MDk5NTY4ODkwMDA2NzYxMTM4NjAyOTJFLTQ0IEluZXhhY3QgUm91bmRlZAorcmVteDM0NDggcmVtYWluZGVyIC0xNjgzOTkzLjUxMjEwMjQxNTU1NjY4NzkwNTU2NzU5MDIxIC03MjM5NDM4NDkyNzM0NC44NDAyNTg1MjI4MjY3NDkzMzc0IC0+IC0xNjgzOTkzLjUxMjEwMjQxNTU1NjY4NzkwNTU2NzU5MDIxCitzdWJ4MzQ0OCBzdWJ0cmFjdCAtMTY4Mzk5My41MTIxMDI0MTU1NTY2ODc5MDU1Njc1OTAyMSAtNzIzOTQzODQ5MjczNDQuODQwMjU4NTIyODI2NzQ5MzM3NCAtPiA3MjM5NDM4MzI0MzM1MS4zMjgxNTYxMDcyNzAwNjE0MzE4IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NDkgYWRkIC03NjMuMTQ4NTMwOTc0NzQxNzY2MTcxNzU2OTcwNDQ4MTU4IDUxNzM3MC44MDg5NTY5NTc2MDE0NzM2NDIyNzI2NjQ2NDcgLT4gNTE2NjA3LjY2MDQyNTk4Mjg1OTcwNzQ3MDUxNTY5NDE5OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDQ5IGNvbXBhcmUgLTc2My4xNDg1MzA5NzQ3NDE3NjYxNzE3NTY5NzA0NDgxNTggNTE3MzcwLjgwODk1Njk1NzYwMTQ3MzY0MjI3MjY2NDY0NyAtPiAtMQorZGl2eDM0NDkgZGl2aWRlIC03NjMuMTQ4NTMwOTc0NzQxNzY2MTcxNzU2OTcwNDQ4MTU4IDUxNzM3MC44MDg5NTY5NTc2MDE0NzM2NDIyNzI2NjQ2NDcgLT4gLTAuMDAxNDc1MDUxMzkwMTQ5NTE5NDYzODExNTU1MjUxNzM4NjcgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ0OSBkaXZpZGVpbnQgLTc2My4xNDg1MzA5NzQ3NDE3NjYxNzE3NTY5NzA0NDgxNTggNTE3MzcwLjgwODk1Njk1NzYwMTQ3MzY0MjI3MjY2NDY0NyAtPiAtMAorbXVseDM0NDkgbXVsdGlwbHkgLTc2My4xNDg1MzA5NzQ3NDE3NjYxNzE3NTY5NzA0NDgxNTggNTE3MzcwLjgwODk1Njk1NzYwMTQ3MzY0MjI3MjY2NDY0NyAtPiAtMzk0ODMwNzcyLjgyNDcxNTk2MjkyNTM1MTQ0NzMyMjE4NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDQ5IHBvd2VyIC03NjMuMTQ4NTMwOTc0NzQxNzY2MTcxNzU2OTcwNDQ4MTU4IDUxNzM3MSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQ0OSByZW1haW5kZXIgLTc2My4xNDg1MzA5NzQ3NDE3NjYxNzE3NTY5NzA0NDgxNTggNTE3MzcwLjgwODk1Njk1NzYwMTQ3MzY0MjI3MjY2NDY0NyAtPiAtNzYzLjE0ODUzMDk3NDc0MTc2NjE3MTc1Njk3MDQ0ODE1OAorc3VieDM0NDkgc3VidHJhY3QgLTc2My4xNDg1MzA5NzQ3NDE3NjYxNzE3NTY5NzA0NDgxNTggNTE3MzcwLjgwODk1Njk1NzYwMTQ3MzY0MjI3MjY2NDY0NyAtPiAtNTE4MTMzLjk1NzQ4NzkzMjM0MzIzOTgxNDAyOTYzNTA5NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDUwIGFkZCAtNzcuNTg0MTMzODgxMjMxMjUyMzQ2MDU5MTIyNjE3ODc1NCAtOTI3NTQwNDIyLjY0MTAyNTA1MDk2ODgzMDE1NDU3ODE1MUUrNTI0IC0+IC05LjI3NTQwNDIyNjQxMDI1MDUwOTY4ODMwMTU0NTc4MTUxRSs1MzIgSW5leGFjdCBSb3VuZGVkCitjb214MzQ1MCBjb21wYXJlIC03Ny41ODQxMzM4ODEyMzEyNTIzNDYwNTkxMjI2MTc4NzU0IC05Mjc1NDA0MjIuNjQxMDI1MDUwOTY4ODMwMTU0NTc4MTUxRSs1MjQgLT4gMQorZGl2eDM0NTAgZGl2aWRlIC03Ny41ODQxMzM4ODEyMzEyNTIzNDYwNTkxMjI2MTc4NzU0IC05Mjc1NDA0MjIuNjQxMDI1MDUwOTY4ODMwMTU0NTc4MTUxRSs1MjQgLT4gOC4zNjQ1MDE2NDE5MTQ3MTc2OTk3ODQxNTc1ODM0MjIzN0UtNTMyIEluZXhhY3QgUm91bmRlZAorZHZpeDM0NTAgZGl2aWRlaW50IC03Ny41ODQxMzM4ODEyMzEyNTIzNDYwNTkxMjI2MTc4NzU0IC05Mjc1NDA0MjIuNjQxMDI1MDUwOTY4ODMwMTU0NTc4MTUxRSs1MjQgLT4gMAorbXVseDM0NTAgbXVsdGlwbHkgLTc3LjU4NDEzMzg4MTIzMTI1MjM0NjA1OTEyMjYxNzg3NTQgLTkyNzU0MDQyMi42NDEwMjUwNTA5Njg4MzAxNTQ1NzgxNTFFKzUyNCAtPiA3LjE5NjI0MjAzMzA0MzUxMDcwNTYyNDA5NzQ2NDc1OTQzRSs1MzQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ1MCBwb3dlciAtNzcuNTg0MTMzODgxMjMxMjUyMzQ2MDU5MTIyNjE3ODc1NCAtOSAtPiAtOS44MTg0Njg1Njg3MzkzODU0OTQ2NjM0MTY5Mzk5NzgyOUUtMTggSW5leGFjdCBSb3VuZGVkCityZW14MzQ1MCByZW1haW5kZXIgLTc3LjU4NDEzMzg4MTIzMTI1MjM0NjA1OTEyMjYxNzg3NTQgLTkyNzU0MDQyMi42NDEwMjUwNTA5Njg4MzAxNTQ1NzgxNTFFKzUyNCAtPiAtNzcuNTg0MTMzODgxMjMxMjUyMzQ2MDU5MTIyNjE3ODc1NAorc3VieDM0NTAgc3VidHJhY3QgLTc3LjU4NDEzMzg4MTIzMTI1MjM0NjA1OTEyMjYxNzg3NTQgLTkyNzU0MDQyMi42NDEwMjUwNTA5Njg4MzAxNTQ1NzgxNTFFKzUyNCAtPiA5LjI3NTQwNDIyNjQxMDI1MDUwOTY4ODMwMTU0NTc4MTUxRSs1MzIgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ1MSBhZGQgNTE3NjI5NTMwOS44OTk0Mzc0NjIzNjEwMjIwOTgzNzgxMyAtMTI5NzMzLjEwMzYyODc5NzQ3NzE2NzkwODY5ODU2NTQ2NSAtPiA1MTc2MTY1NTc2Ljc5NTgwODY2NDg4Mzg1NDE4OTY3OTU2IEluZXhhY3QgUm91bmRlZAorY29teDM0NTEgY29tcGFyZSA1MTc2Mjk1MzA5Ljg5OTQzNzQ2MjM2MTAyMjA5ODM3ODEzIC0xMjk3MzMuMTAzNjI4Nzk3NDc3MTY3OTA4Njk4NTY1NDY1IC0+IDEKK2RpdngzNDUxIGRpdmlkZSA1MTc2Mjk1MzA5Ljg5OTQzNzQ2MjM2MTAyMjA5ODM3ODEzIC0xMjk3MzMuMTAzNjI4Nzk3NDc3MTY3OTA4Njk4NTY1NDY1IC0+IC0zOTg5OS41NzIwMDY3NzM2ODU1NDQ0MDg5NDMyNTI0MDk0IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NTEgZGl2aWRlaW50IDUxNzYyOTUzMDkuODk5NDM3NDYyMzYxMDIyMDk4Mzc4MTMgLTEyOTczMy4xMDM2Mjg3OTc0NzcxNjc5MDg2OTg1NjU0NjUgLT4gLTM5ODk5CittdWx4MzQ1MSBtdWx0aXBseSA1MTc2Mjk1MzA5Ljg5OTQzNzQ2MjM2MTAyMjA5ODM3ODEzIC0xMjk3MzMuMTAzNjI4Nzk3NDc3MTY3OTA4Njk4NTY1NDY1IC0+IC02NzE1MzY4NTU4NTI0NDIuMDcxODg3Mzg1NTEyMDAxNzk0IEluZXhhY3QgUm91bmRlZAorcG93eDM0NTEgcG93ZXIgNTE3NjI5NTMwOS44OTk0Mzc0NjIzNjEwMjIwOTgzNzgxMyAtMTI5NzMzIC0+IDBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDUxIHJlbWFpbmRlciA1MTc2Mjk1MzA5Ljg5OTQzNzQ2MjM2MTAyMjA5ODM3ODEzIC0xMjk3MzMuMTAzNjI4Nzk3NDc3MTY3OTA4Njk4NTY1NDY1IC0+IDc0MjA4LjIxNDA0NjkyMDgzODYzMjkzNDMxNDY0MTk2NQorc3VieDM0NTEgc3VidHJhY3QgNTE3NjI5NTMwOS44OTk0Mzc0NjIzNjEwMjIwOTgzNzgxMyAtMTI5NzMzLjEwMzYyODc5NzQ3NzE2NzkwODY5ODU2NTQ2NSAtPiA1MTc2NDI1MDQzLjAwMzA2NjI1OTgzODE5MDAwNzA3NjcwIEluZXhhY3QgUm91bmRlZAorYWRkeDM0NTIgYWRkIDQ0NzE2MzQ4NDExNjYuOTAxOTcyMjkyODY1MzAzMDczMjZFKzE3MiAzMTUxMTEwNDM5Ny44NjcxNzI3MDAzMjAxODkwODI1ODc5RS05NTUgLT4gNC40NzE2MzQ4NDExNjY5MDE5NzIyOTI4NjUzMDMwNzMyNkUrMTg0IEluZXhhY3QgUm91bmRlZAorY29teDM0NTIgY29tcGFyZSA0NDcxNjM0ODQxMTY2LjkwMTk3MjI5Mjg2NTMwMzA3MzI2RSsxNzIgMzE1MTExMDQzOTcuODY3MTcyNzAwMzIwMTg5MDgyNTg3OUUtOTU1IC0+IDEKK2RpdngzNDUyIGRpdmlkZSA0NDcxNjM0ODQxMTY2LjkwMTk3MjI5Mjg2NTMwMzA3MzI2RSsxNzIgMzE1MTExMDQzOTcuODY3MTcyNzAwMzIwMTg5MDgyNTg3OUUtOTU1IC0+IDEuNDE5MDY2MzY2MTYzMTQ5ODc3MDU1MzY3MzcwMjU5MzJFKzExMjkgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ1MiBkaXZpZGVpbnQgNDQ3MTYzNDg0MTE2Ni45MDE5NzIyOTI4NjUzMDMwNzMyNkUrMTcyIDMxNTExMTA0Mzk3Ljg2NzE3MjcwMDMyMDE4OTA4MjU4NzlFLTk1NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NTIgbXVsdGlwbHkgNDQ3MTYzNDg0MTE2Ni45MDE5NzIyOTI4NjUzMDMwNzMyNkUrMTcyIDMxNTExMTA0Mzk3Ljg2NzE3MjcwMDMyMDE4OTA4MjU4NzlFLTk1NSAtPiAxLjQwOTA2MTUyMzA5MTUwNDQxMDEwMDQ2MjIyMjE0ODEwRS03NjAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ1MiBwb3dlciA0NDcxNjM0ODQxMTY2LjkwMTk3MjI5Mjg2NTMwMzA3MzI2RSsxNzIgMyAtPiA4Ljk0MTI2NTU2Mzg5NjczNDk4Mzg2Mzk3NTY5MjQ5NTE2RSs1NTMgSW5leGFjdCBSb3VuZGVkCityZW14MzQ1MiByZW1haW5kZXIgNDQ3MTYzNDg0MTE2Ni45MDE5NzIyOTI4NjUzMDMwNzMyNkUrMTcyIDMxNTExMTA0Mzk3Ljg2NzE3MjcwMDMyMDE4OTA4MjU4NzlFLTk1NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0NTIgc3VidHJhY3QgNDQ3MTYzNDg0MTE2Ni45MDE5NzIyOTI4NjUzMDMwNzMyNkUrMTcyIDMxNTExMTA0Mzk3Ljg2NzE3MjcwMDMyMDE4OTA4MjU4NzlFLTk1NSAtPiA0LjQ3MTYzNDg0MTE2NjkwMTk3MjI5Mjg2NTMwMzA3MzI2RSsxODQgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ1MyBhZGQgLTgxODkxMzAuMTU5NDUyMzEwNDk2NzAyODU3MjY3NzQzMTcgMi41NzkxMjQwMjg3MTQwNDMyNTgzMTY3MDkyMzg2NDkzNkUtMzY2IC0+IC04MTg5MTMwLjE1OTQ1MjMxMDQ5NjcwMjg1NzI2Nzc0MzE3IEluZXhhY3QgUm91bmRlZAorY29teDM0NTMgY29tcGFyZSAtODE4OTEzMC4xNTk0NTIzMTA0OTY3MDI4NTcyNjc3NDMxNyAyLjU3OTEyNDAyODcxNDA0MzI1ODMxNjcwOTIzODY0OTM2RS0zNjYgLT4gLTEKK2RpdngzNDUzIGRpdmlkZSAtODE4OTEzMC4xNTk0NTIzMTA0OTY3MDI4NTcyNjc3NDMxNyAyLjU3OTEyNDAyODcxNDA0MzI1ODMxNjcwOTIzODY0OTM2RS0zNjYgLT4gLTMuMTc1MTU5NDk5MjI1NTY3NzgzNDM1MjYwOTk4MzAwOTNFKzM3MiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDUzIGRpdmlkZWludCAtODE4OTEzMC4xNTk0NTIzMTA0OTY3MDI4NTcyNjc3NDMxNyAyLjU3OTEyNDAyODcxNDA0MzI1ODMxNjcwOTIzODY0OTM2RS0zNjYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDUzIG11bHRpcGx5IC04MTg5MTMwLjE1OTQ1MjMxMDQ5NjcwMjg1NzI2Nzc0MzE3IDIuNTc5MTI0MDI4NzE0MDQzMjU4MzE2NzA5MjM4NjQ5MzZFLTM2NiAtPiAtMi4xMTIwNzgyMzY4NTEwMzE4NTAzOTk3OTE0NDE2MTg0OEUtMzU5IEluZXhhY3QgUm91bmRlZAorcG93eDM0NTMgcG93ZXIgLTgxODkxMzAuMTU5NDUyMzEwNDk2NzAyODU3MjY3NzQzMTcgMyAtPiAtNTQ5MTc4MjQxMDU0ODc1OTgyNzMxLjAwMDkzNzg3NTg4NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDUzIHJlbWFpbmRlciAtODE4OTEzMC4xNTk0NTIzMTA0OTY3MDI4NTcyNjc3NDMxNyAyLjU3OTEyNDAyODcxNDA0MzI1ODMxNjcwOTIzODY0OTM2RS0zNjYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDUzIHN1YnRyYWN0IC04MTg5MTMwLjE1OTQ1MjMxMDQ5NjcwMjg1NzI2Nzc0MzE3IDIuNTc5MTI0MDI4NzE0MDQzMjU4MzE2NzA5MjM4NjQ5MzZFLTM2NiAtPiAtODE4OTEzMC4xNTk0NTIzMTA0OTY3MDI4NTcyNjc3NDMxNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDU0IGFkZCAtMjU0MzQ2MjMyOTgxMzUzMjkzMzkyODg4Nzg1NjQzMjQ1IC03NjQuNDE2OTAyNDg2MTUyMDkzNzU4Mjg3OTI5Njc4NDQ1IC0+IC0yNTQzNDYyMzI5ODEzNTMyOTMzOTI4ODg3ODU2NDQwMDkgSW5leGFjdCBSb3VuZGVkCitjb214MzQ1NCBjb21wYXJlIC0yNTQzNDYyMzI5ODEzNTMyOTMzOTI4ODg3ODU2NDMyNDUgLTc2NC40MTY5MDI0ODYxNTIwOTM3NTgyODc5Mjk2Nzg0NDUgLT4gLTEKK2RpdngzNDU0IGRpdmlkZSAtMjU0MzQ2MjMyOTgxMzUzMjkzMzkyODg4Nzg1NjQzMjQ1IC03NjQuNDE2OTAyNDg2MTUyMDkzNzU4Mjg3OTI5Njc4NDQ1IC0+IDMzMjczMjM1MDgzMzg1Nzg4OTIwNDQwNjM1NjkwMC42NjUgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ1NCBkaXZpZGVpbnQgLTI1NDM0NjIzMjk4MTM1MzI5MzM5Mjg4ODc4NTY0MzI0NSAtNzY0LjQxNjkwMjQ4NjE1MjA5Mzc1ODI4NzkyOTY3ODQ0NSAtPiAzMzI3MzIzNTA4MzM4NTc4ODkyMDQ0MDYzNTY5MDAKK211bHgzNDU0IG11bHRpcGx5IC0yNTQzNDYyMzI5ODEzNTMyOTMzOTI4ODg3ODU2NDMyNDUgLTc2NC40MTY5MDI0ODYxNTIwOTM3NTgyODc5Mjk2Nzg0NDUgLT4gMS45NDQyNjU1OTU3NDYyNzI2MjAwNjMwNzMyNjMzNjI4OUUrMzUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ1NCBwb3dlciAtMjU0MzQ2MjMyOTgxMzUzMjkzMzkyODg4Nzg1NjQzMjQ1IC03NjQgLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0NTQgcmVtYWluZGVyIC0yNTQzNDYyMzI5ODEzNTMyOTMzOTI4ODg3ODU2NDMyNDUgLTc2NC40MTY5MDI0ODYxNTIwOTM3NTgyODc5Mjk2Nzg0NDUgLT4gLTUwOC4yOTkzMjM5NjI1Mzg2MTA1ODA2NjkwOTI5Nzk1MDAKK3N1YngzNDU0IHN1YnRyYWN0IC0yNTQzNDYyMzI5ODEzNTMyOTMzOTI4ODg3ODU2NDMyNDUgLTc2NC40MTY5MDI0ODYxNTIwOTM3NTgyODc5Mjk2Nzg0NDUgLT4gLTI1NDM0NjIzMjk4MTM1MzI5MzM5Mjg4ODc4NTY0MjQ4MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDU1IGFkZCAtMjg3NS4zNjc0NTQ5OTU0NDE3Nzk2NDgwNDI3NzMyOTcyNiAtMTMxODcuODQ5MjA0NTA1NDgwMjIwNTY5MTI0ODI2NzYzOCAtPiAtMTYwNjMuMjE2NjU5NTAwOTIyMDAwMjE3MTY3NjAwMDYxMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDU1IGNvbXBhcmUgLTI4NzUuMzY3NDU0OTk1NDQxNzc5NjQ4MDQyNzczMjk3MjYgLTEzMTg3Ljg0OTIwNDUwNTQ4MDIyMDU2OTEyNDgyNjc2MzggLT4gMQorZGl2eDM0NTUgZGl2aWRlIC0yODc1LjM2NzQ1NDk5NTQ0MTc3OTY0ODA0Mjc3MzI5NzI2IC0xMzE4Ny44NDkyMDQ1MDU0ODAyMjA1NjkxMjQ4MjY3NjM4IC0+IDAuMjE4MDMxNTY5MDkxMTIyNTIwMzkxNTk5NTQxNTc1NjE1IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NTUgZGl2aWRlaW50IC0yODc1LjM2NzQ1NDk5NTQ0MTc3OTY0ODA0Mjc3MzI5NzI2IC0xMzE4Ny44NDkyMDQ1MDU0ODAyMjA1NjkxMjQ4MjY3NjM4IC0+IDAKK211bHgzNDU1IG11bHRpcGx5IC0yODc1LjM2NzQ1NDk5NTQ0MTc3OTY0ODA0Mjc3MzI5NzI2IC0xMzE4Ny44NDkyMDQ1MDU0ODAyMjA1NjkxMjQ4MjY3NjM4IC0+IDM3OTE5OTEyLjQwNDAyMjU4NDA3MjcyODE2MzMwMjQ2NjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ1NSBwb3dlciAtMjg3NS4zNjc0NTQ5OTU0NDE3Nzk2NDgwNDI3NzMyOTcyNiAtMTMxODggLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0NTUgcmVtYWluZGVyIC0yODc1LjM2NzQ1NDk5NTQ0MTc3OTY0ODA0Mjc3MzI5NzI2IC0xMzE4Ny44NDkyMDQ1MDU0ODAyMjA1NjkxMjQ4MjY3NjM4IC0+IC0yODc1LjM2NzQ1NDk5NTQ0MTc3OTY0ODA0Mjc3MzI5NzI2CitzdWJ4MzQ1NSBzdWJ0cmFjdCAtMjg3NS4zNjc0NTQ5OTU0NDE3Nzk2NDgwNDI3NzMyOTcyNiAtMTMxODcuODQ5MjA0NTA1NDgwMjIwNTY5MTI0ODI2NzYzOCAtPiAxMDMxMi40ODE3NDk1MTAwMzg0NDA5MjEwODIwNTM0NjY1IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NTYgYWRkIC03LjI2OTI3NTcwOTg0MjE5OTQ0NjkzNjAyMTQwMjIzMTAzIDAxNjA4ODMwMjE1NDEuMzIyNzUyODY3NjkxMTAwMDM5NzFFLTQzOCAtPiAtNy4yNjkyNzU3MDk4NDIxOTk0NDY5MzYwMjE0MDIyMzEwMyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDU2IGNvbXBhcmUgLTcuMjY5Mjc1NzA5ODQyMTk5NDQ2OTM2MDIxNDAyMjMxMDMgMDE2MDg4MzAyMTU0MS4zMjI3NTI4Njc2OTExMDAwMzk3MUUtNDM4IC0+IC0xCitkaXZ4MzQ1NiBkaXZpZGUgLTcuMjY5Mjc1NzA5ODQyMTk5NDQ2OTM2MDIxNDAyMjMxMDMgMDE2MDg4MzAyMTU0MS4zMjI3NTI4Njc2OTExMDAwMzk3MUUtNDM4IC0+IC00LjUxODM2MTAwNTUzMDM5OTE3NTc0NTU3MjM1Mjc1MTczRSs0MjcgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ1NiBkaXZpZGVpbnQgLTcuMjY5Mjc1NzA5ODQyMTk5NDQ2OTM2MDIxNDAyMjMxMDMgMDE2MDg4MzAyMTU0MS4zMjI3NTI4Njc2OTExMDAwMzk3MUUtNDM4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ1NiBtdWx0aXBseSAtNy4yNjkyNzU3MDk4NDIxOTk0NDY5MzYwMjE0MDIyMzEwMyAwMTYwODgzMDIxNTQxLjMyMjc1Mjg2NzY5MTEwMDAzOTcxRS00MzggLT4gLTEuMTY5NTAzMDQwNjE2MzU2ODE4OTEzNjE1MDQ0NDI0NzlFLTQyNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDU2IHBvd2VyIC03LjI2OTI3NTcwOTg0MjE5OTQ0NjkzNjAyMTQwMjIzMTAzIDIgLT4gNTIuODQyMzY5MzQ1NzAxODEyNjQ1MTk5ODA5NjIxMTAzNiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDU2IHJlbWFpbmRlciAtNy4yNjkyNzU3MDk4NDIxOTk0NDY5MzYwMjE0MDIyMzEwMyAwMTYwODgzMDIxNTQxLjMyMjc1Mjg2NzY5MTEwMDAzOTcxRS00MzggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDU2IHN1YnRyYWN0IC03LjI2OTI3NTcwOTg0MjE5OTQ0NjkzNjAyMTQwMjIzMTAzIDAxNjA4ODMwMjE1NDEuMzIyNzUyODY3NjkxMTAwMDM5NzFFLTQzOCAtPiAtNy4yNjkyNzU3MDk4NDIxOTk0NDY5MzYwMjE0MDIyMzEwMyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDU3IGFkZCAtMjg1NjcxNTEuNjg2ODc2Mjc1MjI0MTA1NjU0MDAyODUxNUUrNDk4IC00NDcwLjE1NDU1MTM3NTQ2NDI3NjQ1MjkwMjEwOTg5Njc1IC0+IC0yLjg1NjcxNTE2ODY4NzYyNzUyMjQxMDU2NTQwMDI4NTE1RSs1MDUgSW5leGFjdCBSb3VuZGVkCitjb214MzQ1NyBjb21wYXJlIC0yODU2NzE1MS42ODY4NzYyNzUyMjQxMDU2NTQwMDI4NTE1RSs0OTggLTQ0NzAuMTU0NTUxMzc1NDY0Mjc2NDUyOTAyMTA5ODk2NzUgLT4gLTEKK2RpdngzNDU3IGRpdmlkZSAtMjg1NjcxNTEuNjg2ODc2Mjc1MjI0MTA1NjU0MDAyODUxNUUrNDk4IC00NDcwLjE1NDU1MTM3NTQ2NDI3NjQ1MjkwMjEwOTg5Njc1IC0+IDYuMzkwNjQwNzE2OTA0NTU5MTk3OTI3MDc1ODkwNTQxMDZFKzUwMSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDU3IGRpdmlkZWludCAtMjg1NjcxNTEuNjg2ODc2Mjc1MjI0MTA1NjU0MDAyODUxNUUrNDk4IC00NDcwLjE1NDU1MTM3NTQ2NDI3NjQ1MjkwMjEwOTg5Njc1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ1NyBtdWx0aXBseSAtMjg1NjcxNTEuNjg2ODc2Mjc1MjI0MTA1NjU0MDAyODUxNUUrNDk4IC00NDcwLjE1NDU1MTM3NTQ2NDI3NjQ1MjkwMjEwOTg5Njc1IC0+IDEuMjc2OTk1ODMxMzI5MjMyNTM2MDUzOTc3MzY3OTcwMDBFKzUwOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDU3IHBvd2VyIC0yODU2NzE1MS42ODY4NzYyNzUyMjQxMDU2NTQwMDI4NTE1RSs0OTggLTQ0NzAgLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0NTcgcmVtYWluZGVyIC0yODU2NzE1MS42ODY4NzYyNzUyMjQxMDU2NTQwMDI4NTE1RSs0OTggLTQ0NzAuMTU0NTUxMzc1NDY0Mjc2NDUyOTAyMTA5ODk2NzUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDU3IHN1YnRyYWN0IC0yODU2NzE1MS42ODY4NzYyNzUyMjQxMDU2NTQwMDI4NTE1RSs0OTggLTQ0NzAuMTU0NTUxMzc1NDY0Mjc2NDUyOTAyMTA5ODk2NzUgLT4gLTIuODU2NzE1MTY4Njg3NjI3NTIyNDEwNTY1NDAwMjg1MTVFKzUwNSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDU4IGFkZCA3MTkxNzUzLjc5OTc0MTM2NDQ3MjU3NDY4MjgyMDczNzE4IDgxLjM4Nzg0MjYxNzYwMzg0ODc5NDgzNzU3NzczODQ0MjkgLT4gNzE5MTgzNS4xODc1ODM5ODIwNzY0MjM0Nzc2NTgzMTQ5MiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDU4IGNvbXBhcmUgNzE5MTc1My43OTk3NDEzNjQ0NzI1NzQ2ODI4MjA3MzcxOCA4MS4zODc4NDI2MTc2MDM4NDg3OTQ4Mzc1Nzc3Mzg0NDI5IC0+IDEKK2RpdngzNDU4IGRpdmlkZSA3MTkxNzUzLjc5OTc0MTM2NDQ3MjU3NDY4MjgyMDczNzE4IDgxLjM4Nzg0MjYxNzYwMzg0ODc5NDgzNzU3NzczODQ0MjkgLT4gODgzNjMuOTgxMjU4NjE4ODE4NjczMzkzNTU2OTg3NDEwMCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDU4IGRpdmlkZWludCA3MTkxNzUzLjc5OTc0MTM2NDQ3MjU3NDY4MjgyMDczNzE4IDgxLjM4Nzg0MjYxNzYwMzg0ODc5NDgzNzU3NzczODQ0MjkgLT4gODgzNjMKK211bHgzNDU4IG11bHRpcGx5IDcxOTE3NTMuNzk5NzQxMzY0NDcyNTc0NjgyODIwNzM3MTggODEuMzg3ODQyNjE3NjAzODQ4Nzk0ODM3NTc3NzM4NDQyOSAtPiA1ODUzMjEzMjYuMzk3OTA0NjM4ODYzNDg1ODkxNTI0NTU1IEluZXhhY3QgUm91bmRlZAorcG93eDM0NTggcG93ZXIgNzE5MTc1My43OTk3NDEzNjQ0NzI1NzQ2ODI4MjA3MzcxOCA4MSAtPiAyLjUzMjkwOTgzMTM4NTYxNDgyNjEyNTU3NDA0MTQ4NzYwRSs1NTUgSW5leGFjdCBSb3VuZGVkCityZW14MzQ1OCByZW1haW5kZXIgNzE5MTc1My43OTk3NDEzNjQ0NzI1NzQ2ODI4MjA3MzcxOCA4MS4zODc4NDI2MTc2MDM4NDg3OTQ4Mzc1Nzc3Mzg0NDI5IC0+IDc5Ljg2MjUyMjAzNTU4MTUxNjQ0OTkzOTAzNTE1MDAyNzMKK3N1YngzNDU4IHN1YnRyYWN0IDcxOTE3NTMuNzk5NzQxMzY0NDcyNTc0NjgyODIwNzM3MTggODEuMzg3ODQyNjE3NjAzODQ4Nzk0ODM3NTc3NzM4NDQyOSAtPiA3MTkxNjcyLjQxMTg5ODc0Njg2ODcyNTg4Nzk4MzE1OTQ0IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NTkgYWRkIDUwMjk3NTgwNC4wNjk4NjQ1MzYxMDQ2MjE3MDA0MDQ3NzAgNjg0Ljc5MDAyODQzMjA3NDUyNzk2MDI2OTUxNTIyNzI0MyAtPiA1MDI5NzY0ODguODU5ODkyOTY4MTc5MTQ5NjYwNjc0Mjg1IEluZXhhY3QgUm91bmRlZAorY29teDM0NTkgY29tcGFyZSA1MDI5NzU4MDQuMDY5ODY0NTM2MTA0NjIxNzAwNDA0NzcwIDY4NC43OTAwMjg0MzIwNzQ1Mjc5NjAyNjk1MTUyMjcyNDMgLT4gMQorZGl2eDM0NTkgZGl2aWRlIDUwMjk3NTgwNC4wNjk4NjQ1MzYxMDQ2MjE3MDA0MDQ3NzAgNjg0Ljc5MDAyODQzMjA3NDUyNzk2MDI2OTUxNTIyNzI0MyAtPiA3MzQ0OTYuMzkwNDA2NzA2MzIzODk5ODAxNjQxMjc4OTMzIEluZXhhY3QgUm91bmRlZAorZHZpeDM0NTkgZGl2aWRlaW50IDUwMjk3NTgwNC4wNjk4NjQ1MzYxMDQ2MjE3MDA0MDQ3NzAgNjg0Ljc5MDAyODQzMjA3NDUyNzk2MDI2OTUxNTIyNzI0MyAtPiA3MzQ0OTYKK211bHgzNDU5IG11bHRpcGx5IDUwMjk3NTgwNC4wNjk4NjQ1MzYxMDQ2MjE3MDA0MDQ3NzAgNjg0Ljc5MDAyODQzMjA3NDUyNzk2MDI2OTUxNTIyNzI0MyAtPiAzNDQ0MzI4MTUxNjkuNjQ4MDgyNzU0MjE0NjMxMDg2MjcwIEluZXhhY3QgUm91bmRlZAorcG93eDM0NTkgcG93ZXIgNTAyOTc1ODA0LjA2OTg2NDUzNjEwNDYyMTcwMDQwNDc3MCA2ODUgLT4gMy42Mjg3NjcxNjU3MzYyMzU1Mjc2MTczOTE3NzU5MjY3N0UrNTk2MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDU5IHJlbWFpbmRlciA1MDI5NzU4MDQuMDY5ODY0NTM2MTA0NjIxNzAwNDA0NzcwIDY4NC43OTAwMjg0MzIwNzQ1Mjc5NjAyNjk1MTUyMjcyNDMgLT4gMjY3LjM0NjYxOTUyMzYxNTkxNTU4MjU0ODQyMDkyNTQ3Mgorc3VieDM0NTkgc3VidHJhY3QgNTAyOTc1ODA0LjA2OTg2NDUzNjEwNDYyMTcwMDQwNDc3MCA2ODQuNzkwMDI4NDMyMDc0NTI3OTYwMjY5NTE1MjI3MjQzIC0+IDUwMjk3NTExOS4yNzk4MzYxMDQwMzAwOTM3NDAxMzUyNTUgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ2MCBhZGQgMTUwNTM2OC40MjA2MzczMTg2MTU5MDQ2MDQ1MzY1OTU3MCAtNDY1MjQyLjY3ODQzOTk1MTQ2Mjc2NzYzMDAyMjgxOTEwNSAtPiAxMDQwMTI1Ljc0MjE5NzM2NzE1MzEzNjk3NDUxMzc3NjYwIEluZXhhY3QgUm91bmRlZAorY29teDM0NjAgY29tcGFyZSAxNTA1MzY4LjQyMDYzNzMxODYxNTkwNDYwNDUzNjU5NTcwIC00NjUyNDIuNjc4NDM5OTUxNDYyNzY3NjMwMDIyODE5MTA1IC0+IDEKK2RpdngzNDYwIGRpdmlkZSAxNTA1MzY4LjQyMDYzNzMxODYxNTkwNDYwNDUzNjU5NTcwIC00NjUyNDIuNjc4NDM5OTUxNDYyNzY3NjMwMDIyODE5MTA1IC0+IC0zLjIzNTY2Mjc4NTAzMzE5OTQ3MDU5MjEzMDAxNDA1MDY1IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NjAgZGl2aWRlaW50IDE1MDUzNjguNDIwNjM3MzE4NjE1OTA0NjA0NTM2NTk1NzAgLTQ2NTI0Mi42Nzg0Mzk5NTE0NjI3Njc2MzAwMjI4MTkxMDUgLT4gLTMKK211bHgzNDYwIG11bHRpcGx5IDE1MDUzNjguNDIwNjM3MzE4NjE1OTA0NjA0NTM2NTk1NzAgLTQ2NTI0Mi42Nzg0Mzk5NTE0NjI3Njc2MzAwMjI4MTkxMDUgLT4gLTcwMDM2MTYzNjA1Ni4yMjU2MTgyNjYyOTY4OTkwNDg3NjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ2MCBwb3dlciAxNTA1MzY4LjQyMDYzNzMxODYxNTkwNDYwNDUzNjU5NTcwIC00NjUyNDMgLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0NjAgcmVtYWluZGVyIDE1MDUzNjguNDIwNjM3MzE4NjE1OTA0NjA0NTM2NTk1NzAgLTQ2NTI0Mi42Nzg0Mzk5NTE0NjI3Njc2MzAwMjI4MTkxMDUgLT4gMTA5NjQwLjM4NTMxNzQ2NDIyNzYwMTcxNDQ2ODEzODM4NQorc3VieDM0NjAgc3VidHJhY3QgMTUwNTM2OC40MjA2MzczMTg2MTU5MDQ2MDQ1MzY1OTU3MCAtNDY1MjQyLjY3ODQzOTk1MTQ2Mjc2NzYzMDAyMjgxOTEwNSAtPiAxOTcwNjExLjA5OTA3NzI3MDA3ODY3MjIzNDU1OTQxNDgxIEluZXhhY3QgUm91bmRlZAorYWRkeDM0NjEgYWRkIDY5MjI1MDIzLjI4NTAxNDI3ODQwNjM0MTYxMzcxNDQ4MjkgODU4NDA1MC4wNjY0ODE5MTc5ODgzNDgxOTk5NTMyNTY5MyAtPiA3NzgwOTA3My4zNTE0OTYxOTYzOTQ2ODk4MTM2Njc3Mzk4IEluZXhhY3QgUm91bmRlZAorY29teDM0NjEgY29tcGFyZSA2OTIyNTAyMy4yODUwMTQyNzg0MDYzNDE2MTM3MTQ0ODI5IDg1ODQwNTAuMDY2NDgxOTE3OTg4MzQ4MTk5OTUzMjU2OTMgLT4gMQorZGl2eDM0NjEgZGl2aWRlIDY5MjI1MDIzLjI4NTAxNDI3ODQwNjM0MTYxMzcxNDQ4MjkgODU4NDA1MC4wNjY0ODE5MTc5ODgzNDgxOTk5NTMyNTY5MyAtPiA4LjA2NDM3Nzg1NzY0MDUwNDMxMjk1NjUyNDExMTYzMzgyIEluZXhhY3QgUm91bmRlZAorZHZpeDM0NjEgZGl2aWRlaW50IDY5MjI1MDIzLjI4NTAxNDI3ODQwNjM0MTYxMzcxNDQ4MjkgODU4NDA1MC4wNjY0ODE5MTc5ODgzNDgxOTk5NTMyNTY5MyAtPiA4CittdWx4MzQ2MSBtdWx0aXBseSA2OTIyNTAyMy4yODUwMTQyNzg0MDYzNDE2MTM3MTQ0ODI5IDg1ODQwNTAuMDY2NDgxOTE3OTg4MzQ4MTk5OTUzMjU2OTMgLT4gNTk0MjMxMDY1NzMxOTM5LjEzNzMyOTc3MDQ4NTQ5NzI2MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDYxIHBvd2VyIDY5MjI1MDIzLjI4NTAxNDI3ODQwNjM0MTYxMzcxNDQ4MjkgODU4NDA1MCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDYxIHJlbWFpbmRlciA2OTIyNTAyMy4yODUwMTQyNzg0MDYzNDE2MTM3MTQ0ODI5IDg1ODQwNTAuMDY2NDgxOTE3OTg4MzQ4MTk5OTUzMjU2OTMgLT4gNTUyNjIyLjc1MzE1ODkzNDQ5OTU1NjAxNDA4ODQyNzQ2CitzdWJ4MzQ2MSBzdWJ0cmFjdCA2OTIyNTAyMy4yODUwMTQyNzg0MDYzNDE2MTM3MTQ0ODI5IDg1ODQwNTAuMDY2NDgxOTE3OTg4MzQ4MTk5OTUzMjU2OTMgLT4gNjA2NDA5NzMuMjE4NTMyMzYwNDE3OTkzNDEzNzYxMjI2MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDYyIGFkZCAtNTU2Njk1MDE4NTMuNzc1MTAwNjg0MTk0MDQ3MTMzOTMxMEUrNjE0IDA2MTQwMDUzOC4xODYwNDQ2OTMyMzM4MTY1NjY5NzcxODkgLT4gLTUuNTY2OTUwMTg1Mzc3NTEwMDY4NDE5NDA0NzEzMzkzMTBFKzYyNCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDYyIGNvbXBhcmUgLTU1NjY5NTAxODUzLjc3NTEwMDY4NDE5NDA0NzEzMzkzMTBFKzYxNCAwNjE0MDA1MzguMTg2MDQ0NjkzMjMzODE2NTY2OTc3MTg5IC0+IC0xCitkaXZ4MzQ2MiBkaXZpZGUgLTU1NjY5NTAxODUzLjc3NTEwMDY4NDE5NDA0NzEzMzkzMTBFKzYxNCAwNjE0MDA1MzguMTg2MDQ0NjkzMjMzODE2NTY2OTc3MTg5IC0+IC05LjA2NjYxNDY0MTg5Mzc4MDU5MDY3NzkyNTU0MzAwNjc2RSs2MTYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ2MiBkaXZpZGVpbnQgLTU1NjY5NTAxODUzLjc3NTEwMDY4NDE5NDA0NzEzMzkzMTBFKzYxNCAwNjE0MDA1MzguMTg2MDQ0NjkzMjMzODE2NTY2OTc3MTg5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ2MiBtdWx0aXBseSAtNTU2Njk1MDE4NTMuNzc1MTAwNjg0MTk0MDQ3MTMzOTMxMEUrNjE0IDA2MTQwMDUzOC4xODYwNDQ2OTMyMzM4MTY1NjY5NzcxODkgLT4gLTMuNDE4MTM3Mzc0MzcwODAzOTA3ODc4NjUzODk3MDM1NjVFKzYzMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDYyIHBvd2VyIC01NTY2OTUwMTg1My43NzUxMDA2ODQxOTQwNDcxMzM5MzEwRSs2MTQgNjE0MDA1MzggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQ2MiByZW1haW5kZXIgLTU1NjY5NTAxODUzLjc3NTEwMDY4NDE5NDA0NzEzMzkzMTBFKzYxNCAwNjE0MDA1MzguMTg2MDQ0NjkzMjMzODE2NTY2OTc3MTg5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ2MiBzdWJ0cmFjdCAtNTU2Njk1MDE4NTMuNzc1MTAwNjg0MTk0MDQ3MTMzOTMxMEUrNjE0IDA2MTQwMDUzOC4xODYwNDQ2OTMyMzM4MTY1NjY5NzcxODkgLT4gLTUuNTY2OTUwMTg1Mzc3NTEwMDY4NDE5NDA0NzEzMzkzMTBFKzYyNCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDYzIGFkZCAtNTI3NTY2LjUyMTI3Mzk5MjQyNDY0OTM0NjgzNzMzNzYwMkUtNDA4IC04MzQ2NjIuNTk5OTgzOTUzMzQ1NzE4NTIzODA3MTIzOTcyIC0+IC04MzQ2NjIuNTk5OTgzOTUzMzQ1NzE4NTIzODA3MTIzOTcyIEluZXhhY3QgUm91bmRlZAorY29teDM0NjMgY29tcGFyZSAtNTI3NTY2LjUyMTI3Mzk5MjQyNDY0OTM0NjgzNzMzNzYwMkUtNDA4IC04MzQ2NjIuNTk5OTgzOTUzMzQ1NzE4NTIzODA3MTIzOTcyIC0+IDEKK2RpdngzNDYzIGRpdmlkZSAtNTI3NTY2LjUyMTI3Mzk5MjQyNDY0OTM0NjgzNzMzNzYwMkUtNDA4IC04MzQ2NjIuNTk5OTgzOTUzMzQ1NzE4NTIzODA3MTIzOTcyIC0+IDYuMzIwNzE1OTU0OTc1NTIwMTU2NTY5MDk4OTIzMzkyMjZFLTQwOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDYzIGRpdmlkZWludCAtNTI3NTY2LjUyMTI3Mzk5MjQyNDY0OTM0NjgzNzMzNzYwMkUtNDA4IC04MzQ2NjIuNTk5OTgzOTUzMzQ1NzE4NTIzODA3MTIzOTcyIC0+IDAKK211bHgzNDYzIG11bHRpcGx5IC01Mjc1NjYuNTIxMjczOTkyNDI0NjQ5MzQ2ODM3MzM3NjAyRS00MDggLTgzNDY2Mi41OTk5ODM5NTMzNDU3MTg1MjM4MDcxMjM5NzIgLT4gNC40MDM0MDA0NDMxMTA0MDE1MTk2MDc2MzEwODAxOTk1N0UtMzk3IEluZXhhY3QgUm91bmRlZAorcG93eDM0NjMgcG93ZXIgLTUyNzU2Ni41MjEyNzM5OTI0MjQ2NDkzNDY4MzczMzc2MDJFLTQwOCAtODM0NjYzIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDYzIHJlbWFpbmRlciAtNTI3NTY2LjUyMTI3Mzk5MjQyNDY0OTM0NjgzNzMzNzYwMkUtNDA4IC04MzQ2NjIuNTk5OTgzOTUzMzQ1NzE4NTIzODA3MTIzOTcyIC0+IC01LjI3NTY2NTIxMjczOTkyNDI0NjQ5MzQ2ODM3MzM3NjAyRS00MDMKK3N1YngzNDYzIHN1YnRyYWN0IC01Mjc1NjYuNTIxMjczOTkyNDI0NjQ5MzQ2ODM3MzM3NjAyRS00MDggLTgzNDY2Mi41OTk5ODM5NTMzNDU3MTg1MjM4MDcxMjM5NzIgLT4gODM0NjYyLjU5OTk4Mzk1MzM0NTcxODUyMzgwNzEyMzk3MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDY0IGFkZCA2OTA2NTUxMC4wNDU5NjUzNjk5NDE4MDgzNDU1MzM1MzY2IDY5NDg0ODY0Mzg0ODIxMjUyMDA4Njk2MDg4NjgxODE1N0UtODUzIC0+IDY5MDY1NTEwLjA0NTk2NTM2OTk0MTgwODM0NTUzMzUzNjYgSW5leGFjdCBSb3VuZGVkCitjb214MzQ2NCBjb21wYXJlIDY5MDY1NTEwLjA0NTk2NTM2OTk0MTgwODM0NTUzMzUzNjYgNjk0ODQ4NjQzODQ4MjEyNTIwMDg2OTYwODg2ODE4MTU3RS04NTMgLT4gMQorZGl2eDM0NjQgZGl2aWRlIDY5MDY1NTEwLjA0NTk2NTM2OTk0MTgwODM0NTUzMzUzNjYgNjk0ODQ4NjQzODQ4MjEyNTIwMDg2OTYwODg2ODE4MTU3RS04NTMgLT4gOS45Mzk2NDgxMDI4NTM5NjY0Njg4OTgzMDkxOTQ5MjY4M0UrODI3IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NjQgZGl2aWRlaW50IDY5MDY1NTEwLjA0NTk2NTM2OTk0MTgwODM0NTUzMzUzNjYgNjk0ODQ4NjQzODQ4MjEyNTIwMDg2OTYwODg2ODE4MTU3RS04NTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDY0IG11bHRpcGx5IDY5MDY1NTEwLjA0NTk2NTM2OTk0MTgwODM0NTUzMzUzNjYgNjk0ODQ4NjQzODQ4MjEyNTIwMDg2OTYwODg2ODE4MTU3RS04NTMgLT4gNC43OTkwMDc1OTkyMTI0MTM1MjU2MjM4MTE4MTMzMjcyMEUtODEzIEluZXhhY3QgUm91bmRlZAorcG93eDM0NjQgcG93ZXIgNjkwNjU1MTAuMDQ1OTY1MzY5OTQxODA4MzQ1NTMzNTM2NiA3IC0+IDcuNDk1OTgyNDk3NjM0MTY0ODM4MjQ5MTkxMTg5NzM1NjdFKzU0IEluZXhhY3QgUm91bmRlZAorcmVteDM0NjQgcmVtYWluZGVyIDY5MDY1NTEwLjA0NTk2NTM2OTk0MTgwODM0NTUzMzUzNjYgNjk0ODQ4NjQzODQ4MjEyNTIwMDg2OTYwODg2ODE4MTU3RS04NTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDY0IHN1YnRyYWN0IDY5MDY1NTEwLjA0NTk2NTM2OTk0MTgwODM0NTUzMzUzNjYgNjk0ODQ4NjQzODQ4MjEyNTIwMDg2OTYwODg2ODE4MTU3RS04NTMgLT4gNjkwNjU1MTAuMDQ1OTY1MzY5OTQxODA4MzQ1NTMzNTM2NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDY1IGFkZCAtMjkyMTk4Mi44MjQxMTI4NTUwNTIyOTEyMjg5MDA0MTg0MSAtNzI5OTQuNjUyMzg0MDI5ODAxNzQ3MTk2MjU2OTc3ODgwM0UtNzYzIC0+IC0yOTIxOTgyLjgyNDExMjg1NTA1MjI5MTIyODkwMDQxODQxIEluZXhhY3QgUm91bmRlZAorY29teDM0NjUgY29tcGFyZSAtMjkyMTk4Mi44MjQxMTI4NTUwNTIyOTEyMjg5MDA0MTg0MSAtNzI5OTQuNjUyMzg0MDI5ODAxNzQ3MTk2MjU2OTc3ODgwM0UtNzYzIC0+IC0xCitkaXZ4MzQ2NSBkaXZpZGUgLTI5MjE5ODIuODI0MTEyODU1MDUyMjkxMjI4OTAwNDE4NDEgLTcyOTk0LjY1MjM4NDAyOTgwMTc0NzE5NjI1Njk3Nzg4MDNFLTc2MyAtPiA0LjAwMzAwOTQzNzkyNDQ0NjYzNDY3NzMyMDI5NTAxNzE2RSs3NjQgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ2NSBkaXZpZGVpbnQgLTI5MjE5ODIuODI0MTEyODU1MDUyMjkxMjI4OTAwNDE4NDEgLTcyOTk0LjY1MjM4NDAyOTgwMTc0NzE5NjI1Njk3Nzg4MDNFLTc2MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NjUgbXVsdGlwbHkgLTI5MjE5ODIuODI0MTEyODU1MDUyMjkxMjI4OTAwNDE4NDEgLTcyOTk0LjY1MjM4NDAyOTgwMTc0NzE5NjI1Njk3Nzg4MDNFLTc2MyAtPiAyLjEzMjg5MTIwNTE4MjIzNTQ3OTIxMjEyNDEyNjQyNDExRS03NTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ2NSBwb3dlciAtMjkyMTk4Mi44MjQxMTI4NTUwNTIyOTEyMjg5MDA0MTg0MSAtNyAtPiAtNS40OTg2NTM5NDg3MDYzMTI0ODQ3OTY2ODc4MjE1NDEzMUUtNDYgSW5leGFjdCBSb3VuZGVkCityZW14MzQ2NSByZW1haW5kZXIgLTI5MjE5ODIuODI0MTEyODU1MDUyMjkxMjI4OTAwNDE4NDEgLTcyOTk0LjY1MjM4NDAyOTgwMTc0NzE5NjI1Njk3Nzg4MDNFLTc2MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0NjUgc3VidHJhY3QgLTI5MjE5ODIuODI0MTEyODU1MDUyMjkxMjI4OTAwNDE4NDEgLTcyOTk0LjY1MjM4NDAyOTgwMTc0NzE5NjI1Njk3Nzg4MDNFLTc2MyAtPiAtMjkyMTk4Mi44MjQxMTI4NTUwNTIyOTEyMjg5MDA0MTg0MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDY2IGFkZCA0LjUxMTE3NDU5NDY2NDkxNDUxNDAxODM1NzU2NTkzNzkzIDM4NzMzODUuMTk5ODE4MTE2NDAwNjMxNDQzMzgwODcyMzAgLT4gMzg3MzM4OS43MTA5OTI3MTEwNjU1NDU5NTczOTkyMjk4NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDY2IGNvbXBhcmUgNC41MTExNzQ1OTQ2NjQ5MTQ1MTQwMTgzNTc1NjU5Mzc5MyAzODczMzg1LjE5OTgxODExNjQwMDYzMTQ0MzM4MDg3MjMwIC0+IC0xCitkaXZ4MzQ2NiBkaXZpZGUgNC41MTExNzQ1OTQ2NjQ5MTQ1MTQwMTgzNTc1NjU5Mzc5MyAzODczMzg1LjE5OTgxODExNjQwMDYzMTQ0MzM4MDg3MjMwIC0+IDAuMDAwMDAxMTY0NjU5NDI4ODgzMjI3NzY3NTMwNjI1ODAxMDYzNTEgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ2NiBkaXZpZGVpbnQgNC41MTExNzQ1OTQ2NjQ5MTQ1MTQwMTgzNTc1NjU5Mzc5MyAzODczMzg1LjE5OTgxODExNjQwMDYzMTQ0MzM4MDg3MjMwIC0+IDAKK211bHgzNDY2IG11bHRpcGx5IDQuNTExMTc0NTk0NjY0OTE0NTE0MDE4MzU3NTY1OTM3OTMgMzg3MzM4NS4xOTk4MTgxMTY0MDA2MzE0NDMzODA4NzIzMCAtPiAxNzQ3MzUxNi45MDg3NzA1NzAxNjUyMDYyNTQ2MTY0NzA1IEluZXhhY3QgUm91bmRlZAorcG93eDM0NjYgcG93ZXIgNC41MTExNzQ1OTQ2NjQ5MTQ1MTQwMTgzNTc1NjU5Mzc5MyAzODczMzg1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDM0NjYgcmVtYWluZGVyIDQuNTExMTc0NTk0NjY0OTE0NTE0MDE4MzU3NTY1OTM3OTMgMzg3MzM4NS4xOTk4MTgxMTY0MDA2MzE0NDMzODA4NzIzMCAtPiA0LjUxMTE3NDU5NDY2NDkxNDUxNDAxODM1NzU2NTkzNzkzCitzdWJ4MzQ2NiBzdWJ0cmFjdCA0LjUxMTE3NDU5NDY2NDkxNDUxNDAxODM1NzU2NTkzNzkzIDM4NzMzODUuMTk5ODE4MTE2NDAwNjMxNDQzMzgwODcyMzAgLT4gLTM4NzMzODAuNjg4NjQzNTIxNzM1NzE2OTI5MzYyNTE0NzMgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ2NyBhZGQgNDk1NTM3NjM0NzQ2OTguODExODY2MTc1ODgxMTA5MTEyMCAzNi4xNzEzODYxMjkzODk2MjE2NTkzODQwODE3OTUwNzgxRSs0MTAgLT4gMy42MTcxMzg2MTI5Mzg5NjIxNjU5Mzg0MDgxNzk1MDc4MUUrNDExIEluZXhhY3QgUm91bmRlZAorY29teDM0NjcgY29tcGFyZSA0OTU1Mzc2MzQ3NDY5OC44MTE4NjYxNzU4ODExMDkxMTIwIDM2LjE3MTM4NjEyOTM4OTYyMTY1OTM4NDA4MTc5NTA3ODFFKzQxMCAtPiAtMQorZGl2eDM0NjcgZGl2aWRlIDQ5NTUzNzYzNDc0Njk4LjgxMTg2NjE3NTg4MTEwOTExMjAgMzYuMTcxMzg2MTI5Mzg5NjIxNjU5Mzg0MDgxNzk1MDc4MUUrNDEwIC0+IDEuMzY5OTcxMzcxNzc1NDM0MTYxOTA4MTE4Mjc2ODUyMzFFLTM5OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDY3IGRpdmlkZWludCA0OTU1Mzc2MzQ3NDY5OC44MTE4NjYxNzU4ODExMDkxMTIwIDM2LjE3MTM4NjEyOTM4OTYyMTY1OTM4NDA4MTc5NTA3ODFFKzQxMCAtPiAwCittdWx4MzQ2NyBtdWx0aXBseSA0OTU1Mzc2MzQ3NDY5OC44MTE4NjYxNzU4ODExMDkxMTIwIDM2LjE3MTM4NjEyOTM4OTYyMTY1OTM4NDA4MTc5NTA3ODFFKzQxMCAtPiAxLjc5MjQyODMxMjgwNzc3NDY2NTU0MjcxMzMyNDI1NzM1RSs0MjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ2NyBwb3dlciA0OTU1Mzc2MzQ3NDY5OC44MTE4NjYxNzU4ODExMDkxMTIwIDQgLT4gNi4wMjk4NTA5MTA5OTczMDIzNjYzNTk1NDgwMTQ3NDgwMkUrNTQgSW5leGFjdCBSb3VuZGVkCityZW14MzQ2NyByZW1haW5kZXIgNDk1NTM3NjM0NzQ2OTguODExODY2MTc1ODgxMTA5MTEyMCAzNi4xNzEzODYxMjkzODk2MjE2NTkzODQwODE3OTUwNzgxRSs0MTAgLT4gNDk1NTM3NjM0NzQ2OTguODExODY2MTc1ODgxMTA5MTEyMAorc3VieDM0Njcgc3VidHJhY3QgNDk1NTM3NjM0NzQ2OTguODExODY2MTc1ODgxMTA5MTEyMCAzNi4xNzEzODYxMjkzODk2MjE2NTkzODQwODE3OTUwNzgxRSs0MTAgLT4gLTMuNjE3MTM4NjEyOTM4OTYyMTY1OTM4NDA4MTc5NTA3ODFFKzQxMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDY4IGFkZCA3NTU5ODU1ODMzNDQuMzc5OTUxNTA2MDcxNDk5MTcwNzQ5RSs5NTYgNzQ2OTIxMDk1NTY5OTcxNDc3MzczNjQzNDg3Mjg1NzgwIC0+IDcuNTU5ODU1ODMzNDQzNzk5NTE1MDYwNzE0OTkxNzA3NDlFKzk2NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDY4IGNvbXBhcmUgNzU1OTg1NTgzMzQ0LjM3OTk1MTUwNjA3MTQ5OTE3MDc0OUUrOTU2IDc0NjkyMTA5NTU2OTk3MTQ3NzM3MzY0MzQ4NzI4NTc4MCAtPiAxCitkaXZ4MzQ2OCBkaXZpZGUgNzU1OTg1NTgzMzQ0LjM3OTk1MTUwNjA3MTQ5OTE3MDc0OUUrOTU2IDc0NjkyMTA5NTU2OTk3MTQ3NzM3MzY0MzQ4NzI4NTc4MCAtPiAxLjAxMjEzNTgwMzY3MjEyODczMDI1NjcxOTE2NzU4NjY5RSs5MzUgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ2OCBkaXZpZGVpbnQgNzU1OTg1NTgzMzQ0LjM3OTk1MTUwNjA3MTQ5OTE3MDc0OUUrOTU2IDc0NjkyMTA5NTU2OTk3MTQ3NzM3MzY0MzQ4NzI4NTc4MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NjggbXVsdGlwbHkgNzU1OTg1NTgzMzQ0LjM3OTk1MTUwNjA3MTQ5OTE3MDc0OUUrOTU2IDc0NjkyMTA5NTU2OTk3MTQ3NzM3MzY0MzQ4NzI4NTc4MCAtPiA1LjY0NjYxNTgwMTQ2Njg4MjU1Mjg2OTMzNzUzNjE2NTgwRSsxMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDM0NjggcG93ZXIgNzU1OTg1NTgzMzQ0LjM3OTk1MTUwNjA3MTQ5OTE3MDc0OUUrOTU2IDcgLT4gMS40MTEyMTk1ODUxNjU0NzcyNTY3NzE0Mjk4MTM3NTQ2OUUrNjc3NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDY4IHJlbWFpbmRlciA3NTU5ODU1ODMzNDQuMzc5OTUxNTA2MDcxNDk5MTcwNzQ5RSs5NTYgNzQ2OTIxMDk1NTY5OTcxNDc3MzczNjQzNDg3Mjg1NzgwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ2OCBzdWJ0cmFjdCA3NTU5ODU1ODMzNDQuMzc5OTUxNTA2MDcxNDk5MTcwNzQ5RSs5NTYgNzQ2OTIxMDk1NTY5OTcxNDc3MzczNjQzNDg3Mjg1NzgwIC0+IDcuNTU5ODU1ODMzNDQzNzk5NTE1MDYwNzE0OTkxNzA3NDlFKzk2NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDY5IGFkZCAtMjAxMDE2Njg1NDEuNzQ3MjI2MDQ5NzU5NDIzMDEwNTQ1NiAtMzk1NTYyMTQ4LjM0NTAwMzkzMTE2MTUzMjEwMTEwOTk2NCAtPiAtMjA0OTcyMzA2OTAuMDkyMjI5OTgwOTIwOTU1MTExNjU1NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDY5IGNvbXBhcmUgLTIwMTAxNjY4NTQxLjc0NzIyNjA0OTc1OTQyMzAxMDU0NTYgLTM5NTU2MjE0OC4zNDUwMDM5MzExNjE1MzIxMDExMDk5NjQgLT4gLTEKK2RpdngzNDY5IGRpdmlkZSAtMjAxMDE2Njg1NDEuNzQ3MjI2MDQ5NzU5NDIzMDEwNTQ1NiAtMzk1NTYyMTQ4LjM0NTAwMzkzMTE2MTUzMjEwMTEwOTk2NCAtPiA1MC44MTc5Nzc5NzM1MDEyMDUzNjYxNDQ3ODczNjY2ODE2IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NjkgZGl2aWRlaW50IC0yMDEwMTY2ODU0MS43NDcyMjYwNDk3NTk0MjMwMTA1NDU2IC0zOTU1NjIxNDguMzQ1MDAzOTMxMTYxNTMyMTAxMTA5OTY0IC0+IDUwCittdWx4MzQ2OSBtdWx0aXBseSAtMjAxMDE2Njg1NDEuNzQ3MjI2MDQ5NzU5NDIzMDEwNTQ1NiAtMzk1NTYyMTQ4LjM0NTAwMzkzMTE2MTUzMjEwMTEwOTk2NCAtPiA3OTUxNDU5MTkzNjkyNzE1MDc5LjA5MzI4NzYwMDE2OTE0IEluZXhhY3QgUm91bmRlZAorcG93eDM0NjkgcG93ZXIgLTIwMTAxNjY4NTQxLjc0NzIyNjA0OTc1OTQyMzAxMDU0NTYgLTM5NTU2MjE0OCAtPiAwRS0xMDAzMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzQ2OSByZW1haW5kZXIgLTIwMTAxNjY4NTQxLjc0NzIyNjA0OTc1OTQyMzAxMDU0NTYgLTM5NTU2MjE0OC4zNDUwMDM5MzExNjE1MzIxMDExMDk5NjQgLT4gLTMyMzU2MTEyNC40OTcwMjk0OTE2ODI4MTc5NTUwNDc0MDAKK3N1YngzNDY5IHN1YnRyYWN0IC0yMDEwMTY2ODU0MS43NDcyMjYwNDk3NTk0MjMwMTA1NDU2IC0zOTU1NjIxNDguMzQ1MDAzOTMxMTYxNTMyMTAxMTA5OTY0IC0+IC0xOTcwNjEwNjM5My40MDIyMjIxMTg1OTc4OTA5MDk0MzU2IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NzAgYWRkIDU1ODM5MDMuMTgwNzIxMDA3MTYwNzIwMTEyNjQ2Njg2MzEgNDYwODY4OTE0Njk0LjA4ODM4NzA2NzQ1MTMxMjUwMDcyMyAtPiA0NjA4NzQ0OTg1OTcuMjY5MTA4MDc0NjEyMDMyNjEzMzcwIEluZXhhY3QgUm91bmRlZAorY29teDM0NzAgY29tcGFyZSA1NTgzOTAzLjE4MDcyMTAwNzE2MDcyMDExMjY0NjY4NjMxIDQ2MDg2ODkxNDY5NC4wODgzODcwNjc0NTEzMTI1MDA3MjMgLT4gLTEKK2RpdngzNDcwIGRpdmlkZSA1NTgzOTAzLjE4MDcyMTAwNzE2MDcyMDExMjY0NjY4NjMxIDQ2MDg2ODkxNDY5NC4wODgzODcwNjc0NTEzMTI1MDA3MjMgLT4gMC4wMDAwMTIxMTYwMzM0Mzc0NjMzMjQwMTY4MDY4NDA1NDY3MzA3IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NzAgZGl2aWRlaW50IDU1ODM5MDMuMTgwNzIxMDA3MTYwNzIwMTEyNjQ2Njg2MzEgNDYwODY4OTE0Njk0LjA4ODM4NzA2NzQ1MTMxMjUwMDcyMyAtPiAwCittdWx4MzQ3MCBtdWx0aXBseSA1NTgzOTAzLjE4MDcyMTAwNzE2MDcyMDExMjY0NjY4NjMxIDQ2MDg2ODkxNDY5NC4wODgzODcwNjc0NTEzMTI1MDA3MjMgLT4gMjU3MzQ0NzM5ODY1NTc1ODY1OS4zOTQ3NTY3MjkwNTIyNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDcwIHBvd2VyIDU1ODM5MDMuMTgwNzIxMDA3MTYwNzIwMTEyNjQ2Njg2MzEgNSAtPiA1LjQyODYxOTQzNTg5NDE4NjAzMjk4NjcwNDU0NzAyOTAxRSszMyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDcwIHJlbWFpbmRlciA1NTgzOTAzLjE4MDcyMTAwNzE2MDcyMDExMjY0NjY4NjMxIDQ2MDg2ODkxNDY5NC4wODgzODcwNjc0NTEzMTI1MDA3MjMgLT4gNTU4MzkwMy4xODA3MjEwMDcxNjA3MjAxMTI2NDY2ODYzMQorc3VieDM0NzAgc3VidHJhY3QgNTU4MzkwMy4xODA3MjEwMDcxNjA3MjAxMTI2NDY2ODYzMSA0NjA4Njg5MTQ2OTQuMDg4Mzg3MDY3NDUxMzEyNTAwNzIzIC0+IC00NjA4NjMzMzA3OTAuOTA3NjY2MDYwMjkwNTkyMzg4MDc2IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NzEgYWRkIC05NTU2MzgzOTc5NzUyNDA2ODUwMTc5OTI0MzYxMTYyNTdFKzAyMCAtNTA4NTgwLjE0ODk1ODc2OTEwNDUxMTc1MTk3NTcyMDQ3MEUrNjYyIC0+IC01LjA4NTgwMTQ4OTU4NzY5MTA0NTExNzUxOTc1NzIwNDcwRSs2NjcgSW5leGFjdCBSb3VuZGVkCitjb214MzQ3MSBjb21wYXJlIC05NTU2MzgzOTc5NzUyNDA2ODUwMTc5OTI0MzYxMTYyNTdFKzAyMCAtNTA4NTgwLjE0ODk1ODc2OTEwNDUxMTc1MTk3NTcyMDQ3MEUrNjYyIC0+IDEKK2RpdngzNDcxIGRpdmlkZSAtOTU1NjM4Mzk3OTc1MjQwNjg1MDE3OTkyNDM2MTE2MjU3RSswMjAgLTUwODU4MC4xNDg5NTg3NjkxMDQ1MTE3NTE5NzU3MjA0NzBFKzY2MiAtPiAxLjg3OTAzMjA0NjI0MDM5NDc2NDA4MTkxMjY0NTY0NTY4RS02MTUgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ3MSBkaXZpZGVpbnQgLTk1NTYzODM5Nzk3NTI0MDY4NTAxNzk5MjQzNjExNjI1N0UrMDIwIC01MDg1ODAuMTQ4OTU4NzY5MTA0NTExNzUxOTc1NzIwNDcwRSs2NjIgLT4gMAorbXVseDM0NzEgbXVsdGlwbHkgLTk1NTYzODM5Nzk3NTI0MDY4NTAxNzk5MjQzNjExNjI1N0UrMDIwIC01MDg1ODAuMTQ4OTU4NzY5MTA0NTExNzUxOTc1NzIwNDcwRSs2NjIgLT4gNC44NjAxODcxODc5Mjk2NzM3ODk4NTgzODczOTgyMDEwOEUrNzIwIEluZXhhY3QgUm91bmRlZAorcG93eDM0NzEgcG93ZXIgLTk1NTYzODM5Nzk3NTI0MDY4NTAxNzk5MjQzNjExNjI1N0UrMDIwIC01IC0+IC0xLjI1NDY3NzMwNDIwMzA0MTg5MTYxNzY4NDA4NDYyNDE0RS0yNjUgSW5leGFjdCBSb3VuZGVkCityZW14MzQ3MSByZW1haW5kZXIgLTk1NTYzODM5Nzk3NTI0MDY4NTAxNzk5MjQzNjExNjI1N0UrMDIwIC01MDg1ODAuMTQ4OTU4NzY5MTA0NTExNzUxOTc1NzIwNDcwRSs2NjIgLT4gLTkuNTU2MzgzOTc5NzUyNDA2ODUwMTc5OTI0MzYxMTYyNTdFKzUyCitzdWJ4MzQ3MSBzdWJ0cmFjdCAtOTU1NjM4Mzk3OTc1MjQwNjg1MDE3OTkyNDM2MTE2MjU3RSswMjAgLTUwODU4MC4xNDg5NTg3NjkxMDQ1MTE3NTE5NzU3MjA0NzBFKzY2MiAtPiA1LjA4NTgwMTQ4OTU4NzY5MTA0NTExNzUxOTc1NzIwNDcwRSs2NjcgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ3MiBhZGQgLTEzNjI0Mzc5NjA5ODAyMDk4MzgxNDExNTU4NDQwMjQwN0UrNzk2IDY1ODkxMDgwODMuOTk3NTAzMTE2NTE1ODEwMzI0NDczOTAgLT4gLTEuMzYyNDM3OTYwOTgwMjA5ODM4MTQxMTU1ODQ0MDI0MDdFKzgyOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDcyIGNvbXBhcmUgLTEzNjI0Mzc5NjA5ODAyMDk4MzgxNDExNTU4NDQwMjQwN0UrNzk2IDY1ODkxMDgwODMuOTk3NTAzMTE2NTE1ODEwMzI0NDczOTAgLT4gLTEKK2RpdngzNDcyIGRpdmlkZSAtMTM2MjQzNzk2MDk4MDIwOTgzODE0MTE1NTg0NDAyNDA3RSs3OTYgNjU4OTEwODA4My45OTc1MDMxMTY1MTU4MTAzMjQ0NzM5MCAtPiAtMi4wNjc3MTIyNjYzODI1NTYwMDYzNDkzOTM3MTM2NTkyMEUrODE4IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NzIgZGl2aWRlaW50IC0xMzYyNDM3OTYwOTgwMjA5ODM4MTQxMTU1ODQ0MDI0MDdFKzc5NiA2NTg5MTA4MDgzLjk5NzUwMzExNjUxNTgxMDMyNDQ3MzkwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ3MiBtdWx0aXBseSAtMTM2MjQzNzk2MDk4MDIwOTgzODE0MTE1NTg0NDAyNDA3RSs3OTYgNjU4OTEwODA4My45OTc1MDMxMTY1MTU4MTAzMjQ0NzM5MCAtPiAtOC45NzcyNTA5ODI2Mzk3NzUzNTk2NjkyMTY5NjE0MzAxMUUrODM3IEluZXhhY3QgUm91bmRlZAorcG93eDM0NzIgcG93ZXIgLTEzNjI0Mzc5NjA5ODAyMDk4MzgxNDExNTU4NDQwMjQwN0UrNzk2IDcgLT4gLTguNzEzOTkxODU1NTE3NDIxOTk3NTI4MzIyODY5ODQwMDVFKzU3OTYgSW5leGFjdCBSb3VuZGVkCityZW14MzQ3MiByZW1haW5kZXIgLTEzNjI0Mzc5NjA5ODAyMDk4MzgxNDExNTU4NDQwMjQwN0UrNzk2IDY1ODkxMDgwODMuOTk3NTAzMTE2NTE1ODEwMzI0NDczOTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDcyIHN1YnRyYWN0IC0xMzYyNDM3OTYwOTgwMjA5ODM4MTQxMTU1ODQ0MDI0MDdFKzc5NiA2NTg5MTA4MDgzLjk5NzUwMzExNjUxNTgxMDMyNDQ3MzkwIC0+IC0xLjM2MjQzNzk2MDk4MDIwOTgzODE0MTE1NTg0NDAyNDA3RSs4MjggSW5leGFjdCBSb3VuZGVkCithZGR4MzQ3MyBhZGQgLTgwODQ5OC40ODI3MTgzMDQ1OTgyMTMwOTI5Mzc1NDM5MzRFKzUyMSA0ODAwNS4xNDY1MDk3OTE0MzU1MDk2MzAxNDgzNzg4OTA1IC0+IC04LjA4NDk4NDgyNzE4MzA0NTk4MjEzMDkyOTM3NTQzOTM0RSs1MjYgSW5leGFjdCBSb3VuZGVkCitjb214MzQ3MyBjb21wYXJlIC04MDg0OTguNDgyNzE4MzA0NTk4MjEzMDkyOTM3NTQzOTM0RSs1MjEgNDgwMDUuMTQ2NTA5NzkxNDM1NTA5NjMwMTQ4Mzc4ODkwNSAtPiAtMQorZGl2eDM0NzMgZGl2aWRlIC04MDg0OTguNDgyNzE4MzA0NTk4MjEzMDkyOTM3NTQzOTM0RSs1MjEgNDgwMDUuMTQ2NTA5NzkxNDM1NTA5NjMwMTQ4Mzc4ODkwNSAtPiAtMS42ODQxOTEyNjE3NzEwNjQ2ODU2NTM5NzAxNzEwNzczNkUrNTIyIEluZXhhY3QgUm91bmRlZAorZHZpeDM0NzMgZGl2aWRlaW50IC04MDg0OTguNDgyNzE4MzA0NTk4MjEzMDkyOTM3NTQzOTM0RSs1MjEgNDgwMDUuMTQ2NTA5NzkxNDM1NTA5NjMwMTQ4Mzc4ODkwNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NzMgbXVsdGlwbHkgLTgwODQ5OC40ODI3MTgzMDQ1OTgyMTMwOTI5Mzc1NDM5MzRFKzUyMSA0ODAwNS4xNDY1MDk3OTE0MzU1MDk2MzAxNDgzNzg4OTA1IC0+IC0zLjg4MTIwODgxMTU4MzYyOTEyMjIwMTMyNjkxODAzNTM5RSs1MzEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ3MyBwb3dlciAtODA4NDk4LjQ4MjcxODMwNDU5ODIxMzA5MjkzNzU0MzkzNEUrNTIxIDQ4MDA1IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDczIHJlbWFpbmRlciAtODA4NDk4LjQ4MjcxODMwNDU5ODIxMzA5MjkzNzU0MzkzNEUrNTIxIDQ4MDA1LjE0NjUwOTc5MTQzNTUwOTYzMDE0ODM3ODg5MDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDczIHN1YnRyYWN0IC04MDg0OTguNDgyNzE4MzA0NTk4MjEzMDkyOTM3NTQzOTM0RSs1MjEgNDgwMDUuMTQ2NTA5NzkxNDM1NTA5NjMwMTQ4Mzc4ODkwNSAtPiAtOC4wODQ5ODQ4MjcxODMwNDU5ODIxMzA5MjkzNzU0MzkzNEUrNTI2IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NzQgYWRkIC04MTIuMjY2MzQwNTU0MjgxMzA1OTg1NTI0ODEzMDc0MjExRSszOTYgLTMxOTUuNjMxMTE1NTkxMTQwMDE1OTQyNTc0NDg5NzA4MTJFKzk4NiAtPiAtMy4xOTU2MzExMTU1OTExNDAwMTU5NDI1NzQ0ODk3MDgxMkUrOTg5IEluZXhhY3QgUm91bmRlZAorY29teDM0NzQgY29tcGFyZSAtODEyLjI2NjM0MDU1NDI4MTMwNTk4NTUyNDgxMzA3NDIxMUUrMzk2IC0zMTk1LjYzMTExNTU5MTE0MDAxNTk0MjU3NDQ4OTcwODEyRSs5ODYgLT4gMQorZGl2eDM0NzQgZGl2aWRlIC04MTIuMjY2MzQwNTU0MjgxMzA1OTg1NTI0ODEzMDc0MjExRSszOTYgLTMxOTUuNjMxMTE1NTkxMTQwMDE1OTQyNTc0NDg5NzA4MTJFKzk4NiAtPiAyLjU0MTgwMjU3NzI0Nzc5NzIxNDQ4NDg0NzgxMDU2MDQwRS01OTEgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ3NCBkaXZpZGVpbnQgLTgxMi4yNjYzNDA1NTQyODEzMDU5ODU1MjQ4MTMwNzQyMTFFKzM5NiAtMzE5NS42MzExMTU1OTExNDAwMTU5NDI1NzQ0ODk3MDgxMkUrOTg2IC0+IDAKK211bHgzNDc0IG11bHRpcGx5IC04MTIuMjY2MzQwNTU0MjgxMzA1OTg1NTI0ODEzMDc0MjExRSszOTYgLTMxOTUuNjMxMTE1NTkxMTQwMDE1OTQyNTc0NDg5NzA4MTJFKzk4NiAtPiAyLjU5NTcwMzU5MjAyMjYxMDgyNTM3NTA1MzMyMzI1NDA0RSsxMzg4IEluZXhhY3QgUm91bmRlZAorcG93eDM0NzQgcG93ZXIgLTgxMi4yNjYzNDA1NTQyODEzMDU5ODU1MjQ4MTMwNzQyMTFFKzM5NiAtMyAtPiAtMS44NjU5Njk4ODAzMDkxNDYxNjIxNjc0MTgwODIxNjQ2OUUtMTE5NyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDc0IHJlbWFpbmRlciAtODEyLjI2NjM0MDU1NDI4MTMwNTk4NTUyNDgxMzA3NDIxMUUrMzk2IC0zMTk1LjYzMTExNTU5MTE0MDAxNTk0MjU3NDQ4OTcwODEyRSs5ODYgLT4gLTguMTIyNjYzNDA1NTQyODEzMDU5ODU1MjQ4MTMwNzQyMTFFKzM5OAorc3VieDM0NzQgc3VidHJhY3QgLTgxMi4yNjYzNDA1NTQyODEzMDU5ODU1MjQ4MTMwNzQyMTFFKzM5NiAtMzE5NS42MzExMTU1OTExNDAwMTU5NDI1NzQ0ODk3MDgxMkUrOTg2IC0+IDMuMTk1NjMxMTE1NTkxMTQwMDE1OTQyNTc0NDg5NzA4MTJFKzk4OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDc1IGFkZCAtOTI5ODg5LjcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM0IC0yODAzMDAxOTA3NzQuMDU3NTk1NjcxMDc5MjY0ODQxMzQ5IC0+IC05LjI5ODg5NzIwOTA1MTgzMzk3Njc4ODY2NjQ4MjE3NzkzRSsxMzkgSW5leGFjdCBSb3VuZGVkCitjb214MzQ3NSBjb21wYXJlIC05Mjk4ODkuNzIwOTA1MTgzMzk3Njc4ODY2NjQ4MjE3NzkzRSsxMzQgLTI4MDMwMDE5MDc3NC4wNTc1OTU2NzEwNzkyNjQ4NDEzNDkgLT4gLTEKK2RpdngzNDc1IGRpdmlkZSAtOTI5ODg5LjcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM0IC0yODAzMDAxOTA3NzQuMDU3NTk1NjcxMDc5MjY0ODQxMzQ5IC0+IDMuMzE3NDc4MDE2NDY5NjQzOTkzMzE1NTY5NzEwNTUxOTdFKzEyOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDc1IGRpdmlkZWludCAtOTI5ODg5LjcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM0IC0yODAzMDAxOTA3NzQuMDU3NTk1NjcxMDc5MjY0ODQxMzQ5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ3NSBtdWx0aXBseSAtOTI5ODg5LjcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM0IC0yODAzMDAxOTA3NzQuMDU3NTk1NjcxMDc5MjY0ODQxMzQ5IC0+IDIuNjA2NDgyNjYxNjg1NTgwNzk5NTczNDkwNzQ2MDk5MjBFKzE1MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDc1IHBvd2VyIC05Mjk4ODkuNzIwOTA1MTgzMzk3Njc4ODY2NjQ4MjE3NzkzRSsxMzQgLTMgLT4gLTEuMjQzNjcxNDMzNzAzMDAxODk1MTg3Nzg1MDU4MzAxODFFLTQyMCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDc1IHJlbWFpbmRlciAtOTI5ODg5LjcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM0IC0yODAzMDAxOTA3NzQuMDU3NTk1NjcxMDc5MjY0ODQxMzQ5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ3NSBzdWJ0cmFjdCAtOTI5ODg5LjcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM0IC0yODAzMDAxOTA3NzQuMDU3NTk1NjcxMDc5MjY0ODQxMzQ5IC0+IC05LjI5ODg5NzIwOTA1MTgzMzk3Njc4ODY2NjQ4MjE3NzkzRSsxMzkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ3NiBhZGQgODM5NDYuMDE1NzgwMTk1MzYzNjI1NTA3ODk5NjE4NTU0MCA0OTI2NzAzNzMuMjM1MzkxNjY1NzU4NzAxNTAwMzE0NDczIC0+IDQ5Mjc1NDMxOS4yNTExNzE4NjExMjIzMjcwMDgyMTQwOTIgSW5leGFjdCBSb3VuZGVkCitjb214MzQ3NiBjb21wYXJlIDgzOTQ2LjAxNTc4MDE5NTM2MzYyNTUwNzg5OTYxODU1NDAgNDkyNjcwMzczLjIzNTM5MTY2NTc1ODcwMTUwMDMxNDQ3MyAtPiAtMQorZGl2eDM0NzYgZGl2aWRlIDgzOTQ2LjAxNTc4MDE5NTM2MzYyNTUwNzg5OTYxODU1NDAgNDkyNjcwMzczLjIzNTM5MTY2NTc1ODcwMTUwMDMxNDQ3MyAtPiAwLjAwMDE3MDM4OTgxOTExNzYzMzQ4NTY5NTg5MDA0MTE4NTc4MiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDc2IGRpdmlkZWludCA4Mzk0Ni4wMTU3ODAxOTUzNjM2MjU1MDc4OTk2MTg1NTQwIDQ5MjY3MDM3My4yMzUzOTE2NjU3NTg3MDE1MDAzMTQ0NzMgLT4gMAorbXVseDM0NzYgbXVsdGlwbHkgODM5NDYuMDE1NzgwMTk1MzYzNjI1NTA3ODk5NjE4NTU0MCA0OTI2NzAzNzMuMjM1MzkxNjY1NzU4NzAxNTAwMzE0NDczIC0+IDQxMzU3NzE0OTI2MDUyLjkyODI5ODU1NjAzODAwNjQ2NDkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ3NiBwb3dlciA4Mzk0Ni4wMTU3ODAxOTUzNjM2MjU1MDc4OTk2MTg1NTQwIDQ5MjY3MDM3MyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDc2IHJlbWFpbmRlciA4Mzk0Ni4wMTU3ODAxOTUzNjM2MjU1MDc4OTk2MTg1NTQwIDQ5MjY3MDM3My4yMzUzOTE2NjU3NTg3MDE1MDAzMTQ0NzMgLT4gODM5NDYuMDE1NzgwMTk1MzYzNjI1NTA3ODk5NjE4NTU0MAorc3VieDM0NzYgc3VidHJhY3QgODM5NDYuMDE1NzgwMTk1MzYzNjI1NTA3ODk5NjE4NTU0MCA0OTI2NzAzNzMuMjM1MzkxNjY1NzU4NzAxNTAwMzE0NDczIC0+IC00OTI1ODY0MjcuMjE5NjExNDcwMzk1MDc1OTkyNDE0ODU0IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NzcgYWRkIDc4MTI3NTgxMTM4MTcuOTkxMzU4NTE4MjUyMjMxMjI1MDggMzAzNzQ5Mi4zNjcxNjMwMTQ0MzMwOTU3MTkxODAwMjEyM0UtMTU3IC0+IDc4MTI3NTgxMTM4MTcuOTkxMzU4NTE4MjUyMjMxMjI1MDggSW5leGFjdCBSb3VuZGVkCitjb214MzQ3NyBjb21wYXJlIDc4MTI3NTgxMTM4MTcuOTkxMzU4NTE4MjUyMjMxMjI1MDggMzAzNzQ5Mi4zNjcxNjMwMTQ0MzMwOTU3MTkxODAwMjEyM0UtMTU3IC0+IDEKK2RpdngzNDc3IGRpdmlkZSA3ODEyNzU4MTEzODE3Ljk5MTM1ODUxODI1MjIzMTIyNTA4IDMwMzc0OTIuMzY3MTYzMDE0NDMzMDk1NzE5MTgwMDIxMjNFLTE1NyAtPiAyLjU3MjEwNzkwMDAxNTkwMTcxODA5NTEyODcxODU3MzgxRSsxNjMgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ3NyBkaXZpZGVpbnQgNzgxMjc1ODExMzgxNy45OTEzNTg1MTgyNTIyMzEyMjUwOCAzMDM3NDkyLjM2NzE2MzAxNDQzMzA5NTcxOTE4MDAyMTIzRS0xNTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDc3IG11bHRpcGx5IDc4MTI3NTgxMTM4MTcuOTkxMzU4NTE4MjUyMjMxMjI1MDggMzAzNzQ5Mi4zNjcxNjMwMTQ0MzMwOTU3MTkxODAwMjEyM0UtMTU3IC0+IDIuMzczMTE5MzEzNzIxMzA1ODMxMzYwOTE3MTcwOTM5MzVFLTEzOCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDc3IHBvd2VyIDc4MTI3NTgxMTM4MTcuOTkxMzU4NTE4MjUyMjMxMjI1MDggMyAtPiA0Ljc2ODg0NDIxODE2MjQ2ODk2MDkwNDE0MzE0OTM0MjUzRSszOCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDc3IHJlbWFpbmRlciA3ODEyNzU4MTEzODE3Ljk5MTM1ODUxODI1MjIzMTIyNTA4IDMwMzc0OTIuMzY3MTYzMDE0NDMzMDk1NzE5MTgwMDIxMjNFLTE1NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0Nzcgc3VidHJhY3QgNzgxMjc1ODExMzgxNy45OTEzNTg1MTgyNTIyMzEyMjUwOCAzMDM3NDkyLjM2NzE2MzAxNDQzMzA5NTcxOTE4MDAyMTIzRS0xNTcgLT4gNzgxMjc1ODExMzgxNy45OTEzNTg1MTgyNTIyMzEyMjUwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDc4IGFkZCA0ODkxOTE3NDcuMTQ4Njc0MzI2NzU3NzY3MzU2NjI2MDE2IDAxMTM2OTQyLjExODIyNzc1ODAwOTMwMjc3Njg0OTA1NDUgLT4gNDkwMzI4Njg5LjI2NjkwMjA4NDc2NzA3MDEzMzQ3NTA3MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDc4IGNvbXBhcmUgNDg5MTkxNzQ3LjE0ODY3NDMyNjc1Nzc2NzM1NjYyNjAxNiAwMTEzNjk0Mi4xMTgyMjc3NTgwMDkzMDI3NzY4NDkwNTQ1IC0+IDEKK2RpdngzNDc4IGRpdmlkZSA0ODkxOTE3NDcuMTQ4Njc0MzI2NzU3NzY3MzU2NjI2MDE2IDAxMTM2OTQyLjExODIyNzc1ODAwOTMwMjc3Njg0OTA1NDUgLT4gNDMwLjI2OTcwMjY1NzUyNTIyMzEyNDE0ODI1ODY0MTM1OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDc4IGRpdmlkZWludCA0ODkxOTE3NDcuMTQ4Njc0MzI2NzU3NzY3MzU2NjI2MDE2IDAxMTM2OTQyLjExODIyNzc1ODAwOTMwMjc3Njg0OTA1NDUgLT4gNDMwCittdWx4MzQ3OCBtdWx0aXBseSA0ODkxOTE3NDcuMTQ4Njc0MzI2NzU3NzY3MzU2NjI2MDE2IDAxMTM2OTQyLjExODIyNzc1ODAwOTMwMjc3Njg0OTA1NDUgLT4gNTU2MTgyNzAxMjIyNzUxLjU4ODQ1NDEyOTUxODgzMDU1MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDc4IHBvd2VyIDQ4OTE5MTc0Ny4xNDg2NzQzMjY3NTc3NjczNTY2MjYwMTYgMTEzNjk0MiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDc4IHJlbWFpbmRlciA0ODkxOTE3NDcuMTQ4Njc0MzI2NzU3NzY3MzU2NjI2MDE2IDAxMTM2OTQyLjExODIyNzc1ODAwOTMwMjc3Njg0OTA1NDUgLT4gMzA2NjM2LjMxMDczODM4Mjc1NzU3MzMxMTUzMjU4MTAKK3N1YngzNDc4IHN1YnRyYWN0IDQ4OTE5MTc0Ny4xNDg2NzQzMjY3NTc3NjczNTY2MjYwMTYgMDExMzY5NDIuMTE4MjI3NzU4MDA5MzAyNzc2ODQ5MDU0NSAtPiA0ODgwNTQ4MDUuMDMwNDQ2NTY4NzQ4NDY0NTc5Nzc2OTYyIEluZXhhY3QgUm91bmRlZAorYWRkeDM0NzkgYWRkIC01OTkzNjk1NDAuMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyODkgLTM4Mjg4MzgzMjA1LjY3NDk0Mzk1ODg3MDc5NTU1ODUyMDkgLT4gLTUuOTkzNjk1NDAzNzMxNzQ0ODIzMzU4NjU1Njc5Mzc4NTNFKzI5NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDc5IGNvbXBhcmUgLTU5OTM2OTU0MC4zNzMxNzQ0ODIzMzU4NjU1Njc5Mzc4NTNFKzI4OSAtMzgyODgzODMyMDUuNjc0OTQzOTU4ODcwNzk1NTU4NTIwOSAtPiAtMQorZGl2eDM0NzkgZGl2aWRlIC01OTkzNjk1NDAuMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyODkgLTM4Mjg4MzgzMjA1LjY3NDk0Mzk1ODg3MDc5NTU1ODUyMDkgLT4gMS41NjU0MDgzMzA2NTA4OTY4NDEzMjY4ODE0MzczNzU4NkUrMjg3IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NzkgZGl2aWRlaW50IC01OTkzNjk1NDAuMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyODkgLTM4Mjg4MzgzMjA1LjY3NDk0Mzk1ODg3MDc5NTU1ODUyMDkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDc5IG11bHRpcGx5IC01OTkzNjk1NDAuMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyODkgLTM4Mjg4MzgzMjA1LjY3NDk0Mzk1ODg3MDc5NTU1ODUyMDkgLT4gMi4yOTQ4ODkwNjQzNjE3MzY0MTMyNDA5MTYzODk2MzcxNUUrMzA4IEluZXhhY3QgUm91bmRlZAorcG93eDM0NzkgcG93ZXIgLTU5OTM2OTU0MC4zNzMxNzQ0ODIzMzU4NjU1Njc5Mzc4NTNFKzI4OSAtNCAtPiA3Ljc0ODU2NTgwNjQ2MjkxMzY2MjcwMzI5MTY1NTQwOTU4RS0xMTkyIEluZXhhY3QgUm91bmRlZAorcmVteDM0NzkgcmVtYWluZGVyIC01OTkzNjk1NDAuMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyODkgLTM4Mjg4MzgzMjA1LjY3NDk0Mzk1ODg3MDc5NTU1ODUyMDkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDc5IHN1YnRyYWN0IC01OTkzNjk1NDAuMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyODkgLTM4Mjg4MzgzMjA1LjY3NDk0Mzk1ODg3MDc5NTU1ODUyMDkgLT4gLTUuOTkzNjk1NDAzNzMxNzQ0ODIzMzU4NjU1Njc5Mzc4NTNFKzI5NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDgwIGFkZCAtMzM3Njg4Mzg3MC44NTk2MTY5MjE0ODAyMjUyMTk2MDEzOSAtNjUyNDc0ODk0NDkuNzMzNDU4OTczMTE3MTk4MDQwODI4NCAtPiAtNjg2MjQzNzMzMjAuNTkzMDc1ODk0NTk3NDIzMjYwNDI5OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDgwIGNvbXBhcmUgLTMzNzY4ODM4NzAuODU5NjE2OTIxNDgwMjI1MjE5NjAxMzkgLTY1MjQ3NDg5NDQ5LjczMzQ1ODk3MzExNzE5ODA0MDgyODQgLT4gMQorZGl2eDM0ODAgZGl2aWRlIC0zMzc2ODgzODcwLjg1OTYxNjkyMTQ4MDIyNTIxOTYwMTM5IC02NTI0NzQ4OTQ0OS43MzM0NTg5NzMxMTcxOTgwNDA4Mjg0IC0+IDAuMDUxNzU1MDAwODMzNTc0NzgxMzU5NjMzMjQwNDY2NDczMSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDgwIGRpdmlkZWludCAtMzM3Njg4Mzg3MC44NTk2MTY5MjE0ODAyMjUyMTk2MDEzOSAtNjUyNDc0ODk0NDkuNzMzNDU4OTczMTE3MTk4MDQwODI4NCAtPiAwCittdWx4MzQ4MCBtdWx0aXBseSAtMzM3Njg4Mzg3MC44NTk2MTY5MjE0ODAyMjUyMTk2MDEzOSAtNjUyNDc0ODk0NDkuNzMzNDU4OTczMTE3MTk4MDQwODI4NCAtPiAyMjAzMzMxOTQ3MzY4ODc5Mzk0MjAuNzE5NTc5OTA2MjU3IEluZXhhY3QgUm91bmRlZAorcG93eDM0ODAgcG93ZXIgLTMzNzY4ODM4NzAuODU5NjE2OTIxNDgwMjI1MjE5NjAxMzkgLTcgLT4gLTEuOTk3MDQxNjM3MTgzNjExNTMxMjU3MzU3NTYxNzkyODBFLTY3IEluZXhhY3QgUm91bmRlZAorcmVteDM0ODAgcmVtYWluZGVyIC0zMzc2ODgzODcwLjg1OTYxNjkyMTQ4MDIyNTIxOTYwMTM5IC02NTI0NzQ4OTQ0OS43MzM0NTg5NzMxMTcxOTgwNDA4Mjg0IC0+IC0zMzc2ODgzODcwLjg1OTYxNjkyMTQ4MDIyNTIxOTYwMTM5CitzdWJ4MzQ4MCBzdWJ0cmFjdCAtMzM3Njg4Mzg3MC44NTk2MTY5MjE0ODAyMjUyMTk2MDEzOSAtNjUyNDc0ODk0NDkuNzMzNDU4OTczMTE3MTk4MDQwODI4NCAtPiA2MTg3MDYwNTU3OC44NzM4NDIwNTE2MzY5NzI4MjEyMjcwIEluZXhhY3QgUm91bmRlZAorYWRkeDM0ODEgYWRkIDU4LjY3NzY3ODAzNzAwMDgzNjQ1OTA2MjE3NzI0MjEwMjUgMDEuNTkyNTUxODg2NjUyOTA0NDQ5NDMwOTIyOTk3NTE2MCAtPiA2MC4yNzAyMjk5MjM2NTM3NDA5MDg0OTMxMDAyMzk2MTg1Citjb214MzQ4MSBjb21wYXJlIDU4LjY3NzY3ODAzNzAwMDgzNjQ1OTA2MjE3NzI0MjEwMjUgMDEuNTkyNTUxODg2NjUyOTA0NDQ5NDMwOTIyOTk3NTE2MCAtPiAxCitkaXZ4MzQ4MSBkaXZpZGUgNTguNjc3Njc4MDM3MDAwODM2NDU5MDYyMTc3MjQyMTAyNSAwMS41OTI1NTE4ODY2NTI5MDQ0NDk0MzA5MjI5OTc1MTYwIC0+IDM2Ljg0NTA2NTE2MTYyODYwNDg0Mzc0OTg1NzY2MTM2MjIgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ4MSBkaXZpZGVpbnQgNTguNjc3Njc4MDM3MDAwODM2NDU5MDYyMTc3MjQyMTAyNSAwMS41OTI1NTE4ODY2NTI5MDQ0NDk0MzA5MjI5OTc1MTYwIC0+IDM2CittdWx4MzQ4MSBtdWx0aXBseSA1OC42Nzc2NzgwMzcwMDA4MzY0NTkwNjIxNzcyNDIxMDI1IDAxLjU5MjU1MTg4NjY1MjkwNDQ0OTQzMDkyMjk5NzUxNjAgLT4gOTMuNDQ3MjQ2ODYyMjM3Mzc2OTU5MDkwMDI1ODA2MDAyOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDgxIHBvd2VyIDU4LjY3NzY3ODAzNzAwMDgzNjQ1OTA2MjE3NzI0MjEwMjUgMiAtPiAzNDQzLjA2OTg5OTgxMzkzMDMzNjMyMDA4MzEzNTA1MjMwIEluZXhhY3QgUm91bmRlZAorcmVteDM0ODEgcmVtYWluZGVyIDU4LjY3NzY3ODAzNzAwMDgzNjQ1OTA2MjE3NzI0MjEwMjUgMDEuNTkyNTUxODg2NjUyOTA0NDQ5NDMwOTIyOTk3NTE2MCAtPiAxLjM0NTgxMDExNzQ5NjI3NjI3OTU0ODk0OTMzMTUyNjUKK3N1YngzNDgxIHN1YnRyYWN0IDU4LjY3NzY3ODAzNzAwMDgzNjQ1OTA2MjE3NzI0MjEwMjUgMDEuNTkyNTUxODg2NjUyOTA0NDQ5NDMwOTIyOTk3NTE2MCAtPiA1Ny4wODUxMjYxNTAzNDc5MzIwMDk2MzEyNTQyNDQ1ODY1CithZGR4MzQ4MiBhZGQgNDA5OTYxNjMzOS45NjI0OTQ5OTU1MjgwODU3NTcxNzU3OSAyOTAuNzk1MTg3MzYxMDcyNDg5ODE2NzkxNTI1MTM5ODk1IC0+IDQwOTk2MTY2MzAuNzU3NjgyMzU2NjAwNTc1NTczOTY3MzIgSW5leGFjdCBSb3VuZGVkCitjb214MzQ4MiBjb21wYXJlIDQwOTk2MTYzMzkuOTYyNDk0OTk1NTI4MDg1NzU3MTc1NzkgMjkwLjc5NTE4NzM2MTA3MjQ4OTgxNjc5MTUyNTEzOTg5NSAtPiAxCitkaXZ4MzQ4MiBkaXZpZGUgNDA5OTYxNjMzOS45NjI0OTQ5OTU1MjgwODU3NTcxNzU3OSAyOTAuNzk1MTg3MzYxMDcyNDg5ODE2NzkxNTI1MTM5ODk1IC0+IDE0MDk3OTUxLjEyODk5MjA3ODgxMzQyMDkwMDIzOTA4MzQgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ4MiBkaXZpZGVpbnQgNDA5OTYxNjMzOS45NjI0OTQ5OTU1MjgwODU3NTcxNzU3OSAyOTAuNzk1MTg3MzYxMDcyNDg5ODE2NzkxNTI1MTM5ODk1IC0+IDE0MDk3OTUxCittdWx4MzQ4MiBtdWx0aXBseSA0MDk5NjE2MzM5Ljk2MjQ5NDk5NTUyODA4NTc1NzE3NTc5IDI5MC43OTUxODczNjEwNzI0ODk4MTY3OTE1MjUxMzk4OTUgLT4gMTE5MjE0ODcwMTY4Ny45MDc5ODQzNzUwMTM5NzkwMDE3NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDgyIHBvd2VyIDQwOTk2MTYzMzkuOTYyNDk0OTk1NTI4MDg1NzU3MTc1NzkgMjkxIC0+IDIuMDMzNjQ3NTc4Nzc4MDA0OTc0MDk3NjU5Nzk4NzcyNThFKzI3OTcgSW5leGFjdCBSb3VuZGVkCityZW14MzQ4MiByZW1haW5kZXIgNDA5OTYxNjMzOS45NjI0OTQ5OTU1MjgwODU3NTcxNzU3OSAyOTAuNzk1MTg3MzYxMDcyNDg5ODE2NzkxNTI1MTM5ODk1IC0+IDM3LjUxMDI3NTcyNjY0Mjk1OTg1ODUzODI4MjE0NDg1NQorc3VieDM0ODIgc3VidHJhY3QgNDA5OTYxNjMzOS45NjI0OTQ5OTU1MjgwODU3NTcxNzU3OSAyOTAuNzk1MTg3MzYxMDcyNDg5ODE2NzkxNTI1MTM5ODk1IC0+IDQwOTk2MTYwNDkuMTY3MzA3NjM0NDU1NTk1OTQwMzg0MjYgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ4MyBhZGQgODU4NzA3NzcuMjI4MjgzMzE0MTcwOTk3MDcxMzczOTEwOCAtMjE0MDM5Mjg2MTE1My42OTQwMTM0NjM5ODQ3ODExMzcxNSAtPiAtMjE0MDMwNjk5MDM3Ni40NjU3MzAxNDk4MTM3ODQwNjU3OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDgzIGNvbXBhcmUgODU4NzA3NzcuMjI4MjgzMzE0MTcwOTk3MDcxMzczOTEwOCAtMjE0MDM5Mjg2MTE1My42OTQwMTM0NjM5ODQ3ODExMzcxNSAtPiAxCitkaXZ4MzQ4MyBkaXZpZGUgODU4NzA3NzcuMjI4MjgzMzE0MTcwOTk3MDcxMzczOTEwOCAtMjE0MDM5Mjg2MTE1My42OTQwMTM0NjM5ODQ3ODExMzcxNSAtPiAtMC4wMDAwNDAxMTkxNjYzMzkzOTcxODUzMDkyNzQ4MjYzMjMzMTI4IEluZXhhY3QgUm91bmRlZAorZHZpeDM0ODMgZGl2aWRlaW50IDg1ODcwNzc3LjIyODI4MzMxNDE3MDk5NzA3MTM3MzkxMDggLTIxNDAzOTI4NjExNTMuNjk0MDEzNDYzOTg0NzgxMTM3MTUgLT4gLTAKK211bHgzNDgzIG11bHRpcGx5IDg1ODcwNzc3LjIyODI4MzMxNDE3MDk5NzA3MTM3MzkxMDggLTIxNDAzOTI4NjExNTMuNjk0MDEzNDYzOTg0NzgxMTM3MTUgLT4gLTE4Mzc5NzE5ODU2MTEzNjc5NzMyOC41MDg4NzgyNTQ4NDggSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ4MyBwb3dlciA4NTg3MDc3Ny4yMjgyODMzMTQxNzA5OTcwNzEzNzM5MTA4IC0yIC0+IDEuMzU2MTU0NjM0NDg3MDc1NzM0MjQ1Nzg3ODU5NzMyNjlFLTE2IEluZXhhY3QgUm91bmRlZAorcmVteDM0ODMgcmVtYWluZGVyIDg1ODcwNzc3LjIyODI4MzMxNDE3MDk5NzA3MTM3MzkxMDggLTIxNDAzOTI4NjExNTMuNjk0MDEzNDYzOTg0NzgxMTM3MTUgLT4gODU4NzA3NzcuMjI4MjgzMzE0MTcwOTk3MDcxMzczOTEwOAorc3VieDM0ODMgc3VidHJhY3QgODU4NzA3NzcuMjI4MjgzMzE0MTcwOTk3MDcxMzczOTEwOCAtMjE0MDM5Mjg2MTE1My42OTQwMTM0NjM5ODQ3ODExMzcxNSAtPiAyMTQwNDc4NzMxOTMwLjkyMjI5Njc3ODE1NTc3ODIwODUyIEluZXhhY3QgUm91bmRlZAorYWRkeDM0ODQgYWRkIDIwOTAwLjk2OTM3NjE1NTUxNjU3NDIwMTAzMzk5Mjk3NzkgLTM4Ljc1NDYxNDc2NDk1MjM3OTM0NjMyNjA5NDAyODk1ODUgLT4gMjA4NjIuMjE0NzYxMzkwNTY0MTk0ODU0NzA3ODk4OTQ4OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDg0IGNvbXBhcmUgMjA5MDAuOTY5Mzc2MTU1NTE2NTc0MjAxMDMzOTkyOTc3OSAtMzguNzU0NjE0NzY0OTUyMzc5MzQ2MzI2MDk0MDI4OTU4NSAtPiAxCitkaXZ4MzQ4NCBkaXZpZGUgMjA5MDAuOTY5Mzc2MTU1NTE2NTc0MjAxMDMzOTkyOTc3OSAtMzguNzU0NjE0NzY0OTUyMzc5MzQ2MzI2MDk0MDI4OTU4NSAtPiAtNTM5LjMxNTYyNzM4ODM4NjQzMDE4ODYyNzQxMjYzOTc2NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDg0IGRpdmlkZWludCAyMDkwMC45NjkzNzYxNTU1MTY1NzQyMDEwMzM5OTI5Nzc5IC0zOC43NTQ2MTQ3NjQ5NTIzNzkzNDYzMjYwOTQwMjg5NTg1IC0+IC01MzkKK211bHgzNDg0IG11bHRpcGx5IDIwOTAwLjk2OTM3NjE1NTUxNjU3NDIwMTAzMzk5Mjk3NzkgLTM4Ljc1NDYxNDc2NDk1MjM3OTM0NjMyNjA5NDAyODk1ODUgLT4gLTgxMDAwOS4wMTYzODY5NzQxMDM3Mzg2MjI3OTM2NzA1NjYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ4NCBwb3dlciAyMDkwMC45NjkzNzYxNTU1MTY1NzQyMDEwMzM5OTI5Nzc5IC0zOSAtPiAzLjI2MjE5MDE0NzAxNTI2MzM1Mjk2MDQ0NDM5OTg5NjY1RS0xNjkgSW5leGFjdCBSb3VuZGVkCityZW14MzQ4NCByZW1haW5kZXIgMjA5MDAuOTY5Mzc2MTU1NTE2NTc0MjAxMDMzOTkyOTc3OSAtMzguNzU0NjE0NzY0OTUyMzc5MzQ2MzI2MDk0MDI4OTU4NSAtPiAxMi4yMzIwMTc4NDYxODQxMDY1MzEyNjkzMTEzNjkyNjg1CitzdWJ4MzQ4NCBzdWJ0cmFjdCAyMDkwMC45NjkzNzYxNTU1MTY1NzQyMDEwMzM5OTI5Nzc5IC0zOC43NTQ2MTQ3NjQ5NTIzNzkzNDYzMjYwOTQwMjg5NTg1IC0+IDIwOTM5LjcyMzk5MDkyMDQ2ODk1MzU0NzM2MDA4NzAwNjkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ4NSBhZGQgNDQ4LjgyNzU5NjE1NTU4NzkxMDk0NzUxMTE3MDMxOTQ1NiAzNzkxMzAxNTMuMzgyNzk0MDQyNjUyOTc0NTk2Mjg2MDYyIC0+IDM3OTEzMDYwMi4yMTAzOTAxOTgyNDA4ODU1NDM3OTcyMzIgSW5leGFjdCBSb3VuZGVkCitjb214MzQ4NSBjb21wYXJlIDQ0OC44Mjc1OTYxNTU1ODc5MTA5NDc1MTExNzAzMTk0NTYgMzc5MTMwMTUzLjM4Mjc5NDA0MjY1Mjk3NDU5NjI4NjA2MiAtPiAtMQorZGl2eDM0ODUgZGl2aWRlIDQ0OC44Mjc1OTYxNTU1ODc5MTA5NDc1MTExNzAzMTk0NTYgMzc5MTMwMTUzLjM4Mjc5NDA0MjY1Mjk3NDU5NjI4NjA2MiAtPiAwLjAwMDAwMTE4MzgzNTEzNDU4NjE1MDYxMzk0MTQwODk1NTk2OTc5IEluZXhhY3QgUm91bmRlZAorZHZpeDM0ODUgZGl2aWRlaW50IDQ0OC44Mjc1OTYxNTU1ODc5MTA5NDc1MTExNzAzMTk0NTYgMzc5MTMwMTUzLjM4Mjc5NDA0MjY1Mjk3NDU5NjI4NjA2MiAtPiAwCittdWx4MzQ4NSBtdWx0aXBseSA0NDguODI3NTk2MTU1NTg3OTEwOTQ3NTExMTcwMzE5NDU2IDM3OTEzMDE1My4zODI3OTQwNDI2NTI5NzQ1OTYyODYwNjIgLT4gMTcwMTY0MDc1MzcyLjg5ODc4NjQ2OTA5NDQ2MDY5MjA5NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDg1IHBvd2VyIDQ0OC44Mjc1OTYxNTU1ODc5MTA5NDc1MTExNzAzMTk0NTYgMzc5MTMwMTUzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDM0ODUgcmVtYWluZGVyIDQ0OC44Mjc1OTYxNTU1ODc5MTA5NDc1MTExNzAzMTk0NTYgMzc5MTMwMTUzLjM4Mjc5NDA0MjY1Mjk3NDU5NjI4NjA2MiAtPiA0NDguODI3NTk2MTU1NTg3OTEwOTQ3NTExMTcwMzE5NDU2CitzdWJ4MzQ4NSBzdWJ0cmFjdCA0NDguODI3NTk2MTU1NTg3OTEwOTQ3NTExMTcwMzE5NDU2IDM3OTEzMDE1My4zODI3OTQwNDI2NTI5NzQ1OTYyODYwNjIgLT4gLTM3OTEyOTcwNC41NTUxOTc4ODcwNjUwNjM2NDg3NzQ4OTIgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ4NiBhZGQgOTguNDEzNDgwNzkyMTAwMjgxNzM1NzAwMDE0MDQ4MjAzOSAzNDA0NzI1NTQzLjc3MDMyOTQ1NDQ0NjU0MzUxNTQ2Nzc5IC0+IDM0MDQ3MjU2NDIuMTgzODEwMjQ2NTQ2ODI1MjUxMTY3ODAgSW5leGFjdCBSb3VuZGVkCitjb214MzQ4NiBjb21wYXJlIDk4LjQxMzQ4MDc5MjEwMDI4MTczNTcwMDAxNDA0ODIwMzkgMzQwNDcyNTU0My43NzAzMjk0NTQ0NDY1NDM1MTU0Njc3OSAtPiAtMQorZGl2eDM0ODYgZGl2aWRlIDk4LjQxMzQ4MDc5MjEwMDI4MTczNTcwMDAxNDA0ODIwMzkgMzQwNDcyNTU0My43NzAzMjk0NTQ0NDY1NDM1MTU0Njc3OSAtPiAyLjg5MDQ5NjczODMzOTcwODYzNDIwMjAxOTc5MjkxNTIzRS04IEluZXhhY3QgUm91bmRlZAorZHZpeDM0ODYgZGl2aWRlaW50IDk4LjQxMzQ4MDc5MjEwMDI4MTczNTcwMDAxNDA0ODIwMzkgMzQwNDcyNTU0My43NzAzMjk0NTQ0NDY1NDM1MTU0Njc3OSAtPiAwCittdWx4MzQ4NiBtdWx0aXBseSA5OC40MTM0ODA3OTIxMDAyODE3MzU3MDAwMTQwNDgyMDM5IDM0MDQ3MjU1NDMuNzcwMzI5NDU0NDQ2NTQzNTE1NDY3NzkgLT4gMzM1MDcwODkxOTA0LjIxNDUwNDgxMTc5ODIxMjA0MDQxMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDg2IHBvd2VyIDk4LjQxMzQ4MDc5MjEwMDI4MTczNTcwMDAxNDA0ODIwMzkgMyAtPiA5NTMxNTUuNTQzMzg0NzM5NjY3OTY1MDU1ODM5ODk0NjgyIEluZXhhY3QgUm91bmRlZAorcmVteDM0ODYgcmVtYWluZGVyIDk4LjQxMzQ4MDc5MjEwMDI4MTczNTcwMDAxNDA0ODIwMzkgMzQwNDcyNTU0My43NzAzMjk0NTQ0NDY1NDM1MTU0Njc3OSAtPiA5OC40MTM0ODA3OTIxMDAyODE3MzU3MDAwMTQwNDgyMDM5CitzdWJ4MzQ4NiBzdWJ0cmFjdCA5OC40MTM0ODA3OTIxMDAyODE3MzU3MDAwMTQwNDgyMDM5IDM0MDQ3MjU1NDMuNzcwMzI5NDU0NDQ2NTQzNTE1NDY3NzkgLT4gLTM0MDQ3MjU0NDUuMzU2ODQ4NjYyMzQ2MjYxNzc5NzY3NzggSW5leGFjdCBSb3VuZGVkCithZGR4MzQ4NyBhZGQgNTQ1NzQ2NDMzLjY0OTM1OTczNDEzNjQ3NjcxODE3NjMzMEUtNzg3IC01MTQ5OTU3MDk5NzA5LjEyODMwMDcyODAyMDQzNTYwNjUwRS00MzcgLT4gLTUuMTQ5OTU3MDk5NzA5MTI4MzAwNzI4MDIwNDM1NjA2NTBFLTQyNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDg3IGNvbXBhcmUgNTQ1NzQ2NDMzLjY0OTM1OTczNDEzNjQ3NjcxODE3NjMzMEUtNzg3IC01MTQ5OTU3MDk5NzA5LjEyODMwMDcyODAyMDQzNTYwNjUwRS00MzcgLT4gMQorZGl2eDM0ODcgZGl2aWRlIDU0NTc0NjQzMy42NDkzNTk3MzQxMzY0NzY3MTgxNzYzMzBFLTc4NyAtNTE0OTk1NzA5OTcwOS4xMjgzMDA3MjgwMjA0MzU2MDY1MEUtNDM3IC0+IC0xLjA1OTcxMDY0MDQ2Mzc1MDExMDg2ODUwNzIyNzUyNjE0RS0zNTQgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ4NyBkaXZpZGVpbnQgNTQ1NzQ2NDMzLjY0OTM1OTczNDEzNjQ3NjcxODE3NjMzMEUtNzg3IC01MTQ5OTU3MDk5NzA5LjEyODMwMDcyODAyMDQzNTYwNjUwRS00MzcgLT4gLTAKK211bHgzNDg3IG11bHRpcGx5IDU0NTc0NjQzMy42NDkzNTk3MzQxMzY0NzY3MTgxNzYzMzBFLTc4NyAtNTE0OTk1NzA5OTcwOS4xMjgzMDA3MjgwMjA0MzU2MDY1MEUtNDM3IC0+IC0yLjgxMDU3MDcyMDYxMzQ1Njg4MDc0MzA0ODczMDMzMzE3RS0xMjAzIEluZXhhY3QgUm91bmRlZAorcG93eDM0ODcgcG93ZXIgNTQ1NzQ2NDMzLjY0OTM1OTczNDEzNjQ3NjcxODE3NjMzMEUtNzg3IC01IC0+IDIuMDY1NTk2NDAwOTI2NjcxNjY5NzYxODY4MDEzNDg2NjJFKzM4OTEgSW5leGFjdCBSb3VuZGVkCityZW14MzQ4NyByZW1haW5kZXIgNTQ1NzQ2NDMzLjY0OTM1OTczNDEzNjQ3NjcxODE3NjMzMEUtNzg3IC01MTQ5OTU3MDk5NzA5LjEyODMwMDcyODAyMDQzNTYwNjUwRS00MzcgLT4gNS40NTc0NjQzMzY0OTM1OTczNDEzNjQ3NjcxODE3NjMzMEUtNzc5CitzdWJ4MzQ4NyBzdWJ0cmFjdCA1NDU3NDY0MzMuNjQ5MzU5NzM0MTM2NDc2NzE4MTc2MzMwRS03ODcgLTUxNDk5NTcwOTk3MDkuMTI4MzAwNzI4MDIwNDM1NjA2NTBFLTQzNyAtPiA1LjE0OTk1NzA5OTcwOTEyODMwMDcyODAyMDQzNTYwNjUwRS00MjUgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ4OCBhZGQgNzQxMzA0NTEzNTQ3LjI3MzgyMDUyNTgwMTYwODIzMTczNyAwMzk2LjIyODIzMTI4MjcyNTg0OTI4MDE5MzIzMTg2MzU1RS04MzAgLT4gNzQxMzA0NTEzNTQ3LjI3MzgyMDUyNTgwMTYwODIzMTczNyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDg4IGNvbXBhcmUgNzQxMzA0NTEzNTQ3LjI3MzgyMDUyNTgwMTYwODIzMTczNyAwMzk2LjIyODIzMTI4MjcyNTg0OTI4MDE5MzIzMTg2MzU1RS04MzAgLT4gMQorZGl2eDM0ODggZGl2aWRlIDc0MTMwNDUxMzU0Ny4yNzM4MjA1MjU4MDE2MDgyMzE3MzcgMDM5Ni4yMjgyMzEyODI3MjU4NDkyODAxOTMyMzE4NjM1NUUtODMwIC0+IDEuODcwOTAyODE1NjUxMDE2MTI2MjMzOTgxNzQ3Mjc2NTNFKzgzOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDg4IGRpdmlkZWludCA3NDEzMDQ1MTM1NDcuMjczODIwNTI1ODAxNjA4MjMxNzM3IDAzOTYuMjI4MjMxMjgyNzI1ODQ5MjgwMTkzMjMxODYzNTVFLTgzMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0ODggbXVsdGlwbHkgNzQxMzA0NTEzNTQ3LjI3MzgyMDUyNTgwMTYwODIzMTczNyAwMzk2LjIyODIzMTI4MjcyNTg0OTI4MDE5MzIzMTg2MzU1RS04MzAgLT4gMi45MzcyNTc3NjI0NDczNzc4ODk0NzQ0MzM2MTA3NjA5NUUtODE2IEluZXhhY3QgUm91bmRlZAorcG93eDM0ODggcG93ZXIgNzQxMzA0NTEzNTQ3LjI3MzgyMDUyNTgwMTYwODIzMTczNyA0IC0+IDMuMDE5ODU4Mzg2NTI4OTIwNzM5MDMxOTQ4NDY2Njg3MTJFKzQ3IEluZXhhY3QgUm91bmRlZAorcmVteDM0ODggcmVtYWluZGVyIDc0MTMwNDUxMzU0Ny4yNzM4MjA1MjU4MDE2MDgyMzE3MzcgMDM5Ni4yMjgyMzEyODI3MjU4NDkyODAxOTMyMzE4NjM1NUUtODMwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ4OCBzdWJ0cmFjdCA3NDEzMDQ1MTM1NDcuMjczODIwNTI1ODAxNjA4MjMxNzM3IDAzOTYuMjI4MjMxMjgyNzI1ODQ5MjgwMTkzMjMxODYzNTVFLTgzMCAtPiA3NDEzMDQ1MTM1NDcuMjczODIwNTI1ODAxNjA4MjMxNzM3IEluZXhhY3QgUm91bmRlZAorYWRkeDM0ODkgYWRkIC03MDYuMTQ1MDA1MDk0MjkyMzE1NjEzOTA3MjU0MjQwNTUzIDQ3MzkuODI0ODYxOTU3Mzk3NTgzMDg3MzU5NDYzMzIyMzQgLT4gNDAzMy42Nzk4NTY4NjMxMDUyNjc0NzM0NTIyMDkwODE3OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDg5IGNvbXBhcmUgLTcwNi4xNDUwMDUwOTQyOTIzMTU2MTM5MDcyNTQyNDA1NTMgNDczOS44MjQ4NjE5NTczOTc1ODMwODczNTk0NjMzMjIzNCAtPiAtMQorZGl2eDM0ODkgZGl2aWRlIC03MDYuMTQ1MDA1MDk0MjkyMzE1NjEzOTA3MjU0MjQwNTUzIDQ3MzkuODI0ODYxOTU3Mzk3NTgzMDg3MzU5NDYzMzIyMzQgLT4gLTAuMTQ4OTgxMjQ0MTcyNTI3NjcxOTA3NTM0MTE3NzcxNjI2IEluZXhhY3QgUm91bmRlZAorZHZpeDM0ODkgZGl2aWRlaW50IC03MDYuMTQ1MDA1MDk0MjkyMzE1NjEzOTA3MjU0MjQwNTUzIDQ3MzkuODI0ODYxOTU3Mzk3NTgzMDg3MzU5NDYzMzIyMzQgLT4gLTAKK211bHgzNDg5IG11bHRpcGx5IC03MDYuMTQ1MDA1MDk0MjkyMzE1NjEzOTA3MjU0MjQwNTUzIDQ3MzkuODI0ODYxOTU3Mzk3NTgzMDg3MzU5NDYzMzIyMzQgLT4gLTMzNDcwMDMuNjUxMjkyOTU5ODg3OTM0NTQyNjc5NzM0NjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ4OSBwb3dlciAtNzA2LjE0NTAwNTA5NDI5MjMxNTYxMzkwNzI1NDI0MDU1MyA0NzQwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDM0ODkgcmVtYWluZGVyIC03MDYuMTQ1MDA1MDk0MjkyMzE1NjEzOTA3MjU0MjQwNTUzIDQ3MzkuODI0ODYxOTU3Mzk3NTgzMDg3MzU5NDYzMzIyMzQgLT4gLTcwNi4xNDUwMDUwOTQyOTIzMTU2MTM5MDcyNTQyNDA1NTMKK3N1YngzNDg5IHN1YnRyYWN0IC03MDYuMTQ1MDA1MDk0MjkyMzE1NjEzOTA3MjU0MjQwNTUzIDQ3MzkuODI0ODYxOTU3Mzk3NTgzMDg3MzU5NDYzMzIyMzQgLT4gLTU0NDUuOTY5ODY3MDUxNjg5ODk4NzAxMjY2NzE3NTYyODkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ5MCBhZGQgLTc2OTkyNTc4Ni44MjMwOTkwODMyMjg3OTUxODc5NzU4OTMgLTMxMjAxLjk5ODA0Njk3NjAyMzk4NzAwNjc4MjA1OTQ3OTAgLT4gLTc2OTk1Njk4OC44MjExNDYwNTkyNTI3ODIxOTQ3NTc5NTIgSW5leGFjdCBSb3VuZGVkCitjb214MzQ5MCBjb21wYXJlIC03Njk5MjU3ODYuODIzMDk5MDgzMjI4Nzk1MTg3OTc1ODkzIC0zMTIwMS45OTgwNDY5NzYwMjM5ODcwMDY3ODIwNTk0NzkwIC0+IC0xCitkaXZ4MzQ5MCBkaXZpZGUgLTc2OTkyNTc4Ni44MjMwOTkwODMyMjg3OTUxODc5NzU4OTMgLTMxMjAxLjk5ODA0Njk3NjAyMzk4NzAwNjc4MjA1OTQ3OTAgLT4gMjQ2NzUuNTI4MzMxOTk3ODY5ODkzMjI5MjAyODY1MDgwMyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDkwIGRpdmlkZWludCAtNzY5OTI1Nzg2LjgyMzA5OTA4MzIyODc5NTE4Nzk3NTg5MyAtMzEyMDEuOTk4MDQ2OTc2MDIzOTg3MDA2NzgyMDU5NDc5MCAtPiAyNDY3NQorbXVseDM0OTAgbXVsdGlwbHkgLTc2OTkyNTc4Ni44MjMwOTkwODMyMjg3OTUxODc5NzU4OTMgLTMxMjAxLjk5ODA0Njk3NjAyMzk4NzAwNjc4MjA1OTQ3OTAgLT4gMjQwMjMyMjI4OTY3NzAuODE2MTc4NzIzNjczNzM5NTQ3NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDkwIHBvd2VyIC03Njk5MjU3ODYuODIzMDk5MDgzMjI4Nzk1MTg3OTc1ODkzIC0zMTIwMiAtPiAwRS0xMDAzMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzQ5MCByZW1haW5kZXIgLTc2OTkyNTc4Ni44MjMwOTkwODMyMjg3OTUxODc5NzU4OTMgLTMxMjAxLjk5ODA0Njk3NjAyMzk4NzAwNjc4MjA1OTQ3OTAgLT4gLTE2NDg1LjAxMzk2NTY5MTM0OTQwMjg0MDY1ODI0ODY3NTAKK3N1YngzNDkwIHN1YnRyYWN0IC03Njk5MjU3ODYuODIzMDk5MDgzMjI4Nzk1MTg3OTc1ODkzIC0zMTIwMS45OTgwNDY5NzYwMjM5ODcwMDY3ODIwNTk0NzkwIC0+IC03Njk4OTQ1ODQuODI1MDUyMTA3MjA0ODA4MTgxMTkzODM0IEluZXhhY3QgUm91bmRlZAorYWRkeDM0OTEgYWRkIDg0NDM4NjEwNTQ2MDQ5LjcyNTY1MDc0MTkyODk2OTI4NTdFKzkwNiAwNTI2MDQyNDA3NjY3MzY0NjE4OTg4NDQxMTE3OTAzMTEgLT4gOC40NDM4NjEwNTQ2MDQ5NzI1NjUwNzQxOTI4OTY5Mjg1N0UrOTE5IEluZXhhY3QgUm91bmRlZAorY29teDM0OTEgY29tcGFyZSA4NDQzODYxMDU0NjA0OS43MjU2NTA3NDE5Mjg5NjkyODU3RSs5MDYgMDUyNjA0MjQwNzY2NzM2NDYxODk4ODQ0MTExNzkwMzExIC0+IDEKK2RpdngzNDkxIGRpdmlkZSA4NDQzODYxMDU0NjA0OS43MjU2NTA3NDE5Mjg5NjkyODU3RSs5MDYgMDUyNjA0MjQwNzY2NzM2NDYxODk4ODQ0MTExNzkwMzExIC0+IDEuNjA1MTY3MzY1MTI3MDE5Nzg2OTU1NTkwMDMzNDE5MjJFKzg4OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDkxIGRpdmlkZWludCA4NDQzODYxMDU0NjA0OS43MjU2NTA3NDE5Mjg5NjkyODU3RSs5MDYgMDUyNjA0MjQwNzY2NzM2NDYxODk4ODQ0MTExNzkwMzExIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ5MSBtdWx0aXBseSA4NDQzODYxMDU0NjA0OS43MjU2NTA3NDE5Mjg5NjkyODU3RSs5MDYgMDUyNjA0MjQwNzY2NzM2NDYxODk4ODQ0MTExNzkwMzExIC0+IDQuNDQxODI4OTk5MTczMDkyMzE3Nzk4Mzc2NjgyMTA2MTBFKzk1MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDkxIHBvd2VyIDg0NDM4NjEwNTQ2MDQ5LjcyNTY1MDc0MTkyODk2OTI4NTdFKzkwNiA1IC0+IDQuMjkyNDUxNDQ3MTk2ODkyODMyNDczNDI4NjY5ODgyMTNFKzQ1OTkgSW5leGFjdCBSb3VuZGVkCityZW14MzQ5MSByZW1haW5kZXIgODQ0Mzg2MTA1NDYwNDkuNzI1NjUwNzQxOTI4OTY5Mjg1N0UrOTA2IDA1MjYwNDI0MDc2NjczNjQ2MTg5ODg0NDExMTc5MDMxMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0OTEgc3VidHJhY3QgODQ0Mzg2MTA1NDYwNDkuNzI1NjUwNzQxOTI4OTY5Mjg1N0UrOTA2IDA1MjYwNDI0MDc2NjczNjQ2MTg5ODg0NDExMTc5MDMxMSAtPiA4LjQ0Mzg2MTA1NDYwNDk3MjU2NTA3NDE5Mjg5NjkyODU3RSs5MTkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ5MiBhZGQgNTQ5NzYwLjkxMTMwNDcyNTc5NTE2NDU4OTYxOTI4NjUxNCAxNjUuMTYwMDg5NjE1NjA0OTI0MjA3NzU0ODgzOTUzNDg0IC0+IDU0OTkyNi4wNzEzOTQzNDE0MDAwODg3OTczNzQxNzA0NjcgSW5leGFjdCBSb3VuZGVkCitjb214MzQ5MiBjb21wYXJlIDU0OTc2MC45MTEzMDQ3MjU3OTUxNjQ1ODk2MTkyODY1MTQgMTY1LjE2MDA4OTYxNTYwNDkyNDIwNzc1NDg4Mzk1MzQ4NCAtPiAxCitkaXZ4MzQ5MiBkaXZpZGUgNTQ5NzYwLjkxMTMwNDcyNTc5NTE2NDU4OTYxOTI4NjUxNCAxNjUuMTYwMDg5NjE1NjA0OTI0MjA3NzU0ODgzOTUzNDg0IC0+IDMzMjguNjU0NzE2NjcwNjIxMDc1OTgzOTU3MTQzNDgwODkgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ5MiBkaXZpZGVpbnQgNTQ5NzYwLjkxMTMwNDcyNTc5NTE2NDU4OTYxOTI4NjUxNCAxNjUuMTYwMDg5NjE1NjA0OTI0MjA3NzU0ODgzOTUzNDg0IC0+IDMzMjgKK211bHgzNDkyIG11bHRpcGx5IDU0OTc2MC45MTEzMDQ3MjU3OTUxNjQ1ODk2MTkyODY1MTQgMTY1LjE2MDA4OTYxNTYwNDkyNDIwNzc1NDg4Mzk1MzQ4NCAtPiA5MDc5ODU2MS4zNzgyNDUxNDI1ODYxMTEzNjk0NzMyNDg0IEluZXhhY3QgUm91bmRlZAorcG93eDM0OTIgcG93ZXIgNTQ5NzYwLjkxMTMwNDcyNTc5NTE2NDU4OTYxOTI4NjUxNCAxNjUgLT4gMS4zNDQ4ODkyNTQ0MjM4NjU0NDAyODg3NTYwMzM0NzY1NEUrOTQ3IEluZXhhY3QgUm91bmRlZAorcmVteDM0OTIgcmVtYWluZGVyIDU0OTc2MC45MTEzMDQ3MjU3OTUxNjQ1ODk2MTkyODY1MTQgMTY1LjE2MDA4OTYxNTYwNDkyNDIwNzc1NDg4Mzk1MzQ4NCAtPiAxMDguMTMzMDYzOTkyNjA3NDAxMTgxMzY1NDg5MzE5MjQ4CitzdWJ4MzQ5MiBzdWJ0cmFjdCA1NDk3NjAuOTExMzA0NzI1Nzk1MTY0NTg5NjE5Mjg2NTE0IDE2NS4xNjAwODk2MTU2MDQ5MjQyMDc3NTQ4ODM5NTM0ODQgLT4gNTQ5NTk1Ljc1MTIxNTExMDE5MDI0MDM4MTg2NDQwMjU2MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDkzIGFkZCAzNjUwNTE0LjE4NjQ5NzM3OTU2ODU1ODI4OTM5NjYyNzk0IDA4MDg2NzIxLjQwMzY4ODY5NDgyNDgyNzQ4MzQ3MzU2MjkgLT4gMTE3MzcyMzUuNTkwMTg2MDc0MzkzMzg1NzcyODcwMTkwOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDkzIGNvbXBhcmUgMzY1MDUxNC4xODY0OTczNzk1Njg1NTgyODkzOTY2Mjc5NCAwODA4NjcyMS40MDM2ODg2OTQ4MjQ4Mjc0ODM0NzM1NjI5IC0+IC0xCitkaXZ4MzQ5MyBkaXZpZGUgMzY1MDUxNC4xODY0OTczNzk1Njg1NTgyODkzOTY2Mjc5NCAwODA4NjcyMS40MDM2ODg2OTQ4MjQ4Mjc0ODM0NzM1NjI5IC0+IDAuNDUxNDIwNzkyNzEyMzg3MjUwODY1NDIzMjA4MjM0MjkxIEluZXhhY3QgUm91bmRlZAorZHZpeDM0OTMgZGl2aWRlaW50IDM2NTA1MTQuMTg2NDk3Mzc5NTY4NTU4Mjg5Mzk2NjI3OTQgMDgwODY3MjEuNDAzNjg4Njk0ODI0ODI3NDgzNDczNTYyOSAtPiAwCittdWx4MzQ5MyBtdWx0aXBseSAzNjUwNTE0LjE4NjQ5NzM3OTU2ODU1ODI4OTM5NjYyNzk0IDA4MDg2NzIxLjQwMzY4ODY5NDgyNDgyNzQ4MzQ3MzU2MjkgLT4gMjk1MjA2OTEyMDY0MTcuNTgzMTg4Njc1MjgwODc0NTQyMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDkzIHBvd2VyIDM2NTA1MTQuMTg2NDk3Mzc5NTY4NTU4Mjg5Mzk2NjI3OTQgODA4NjcyMSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDkzIHJlbWFpbmRlciAzNjUwNTE0LjE4NjQ5NzM3OTU2ODU1ODI4OTM5NjYyNzk0IDA4MDg2NzIxLjQwMzY4ODY5NDgyNDgyNzQ4MzQ3MzU2MjkgLT4gMzY1MDUxNC4xODY0OTczNzk1Njg1NTgyODkzOTY2Mjc5NAorc3VieDM0OTMgc3VidHJhY3QgMzY1MDUxNC4xODY0OTczNzk1Njg1NTgyODkzOTY2Mjc5NCAwODA4NjcyMS40MDM2ODg2OTQ4MjQ4Mjc0ODM0NzM1NjI5IC0+IC00NDM2MjA3LjIxNzE5MTMxNTI1NjI2OTE5NDA3NjkzNDk2CithZGR4MzQ5NCBhZGQgNTUwNjc3MjM4ODE5NTAuMTM0Njk1ODE3OTYwNDA5OTU5NCAtOC45MDQ4MTQ4MTY4NzE4MjkzMTQzMTA1NDc4NTE5MjA4MyAtPiA1NTA2NzcyMzg4MTk0MS4yMjk4ODEwMDEwODg1ODA2NDUxIEluZXhhY3QgUm91bmRlZAorY29teDM0OTQgY29tcGFyZSA1NTA2NzcyMzg4MTk1MC4xMzQ2OTU4MTc5NjA0MDk5NTk0IC04LjkwNDgxNDgxNjg3MTgyOTMxNDMxMDU0Nzg1MTkyMDgzIC0+IDEKK2RpdngzNDk0IGRpdmlkZSA1NTA2NzcyMzg4MTk1MC4xMzQ2OTU4MTc5NjA0MDk5NTk0IC04LjkwNDgxNDgxNjg3MTgyOTMxNDMxMDU0Nzg1MTkyMDgzIC0+IC02MTg0MDM5MTk4MzkxLjE5ODUzMDg4NDE5NDg0MTE3MDU0IEluZXhhY3QgUm91bmRlZAorZHZpeDM0OTQgZGl2aWRlaW50IDU1MDY3NzIzODgxOTUwLjEzNDY5NTgxNzk2MDQwOTk1OTQgLTguOTA0ODE0ODE2ODcxODI5MzE0MzEwNTQ3ODUxOTIwODMgLT4gLTYxODQwMzkxOTgzOTEKK211bHgzNDk0IG11bHRpcGx5IDU1MDY3NzIzODgxOTUwLjEzNDY5NTgxNzk2MDQwOTk1OTQgLTguOTA0ODE0ODE2ODcxODI5MzE0MzEwNTQ3ODUxOTIwODMgLT4gLTQ5MDM2Nzg4MzU1NTM5Ni4yNTAzNjUxNTg1OTMzNzMyNzkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ5NCBwb3dlciA1NTA2NzcyMzg4MTk1MC4xMzQ2OTU4MTc5NjA0MDk5NTk0IC05IC0+IDIuMTQ3NDYzODY1Mzg1MjkyNzAxNzM3ODg0NTc4ODcxMjFFLTEyNCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDk0IHJlbWFpbmRlciA1NTA2NzcyMzg4MTk1MC4xMzQ2OTU4MTc5NjA0MDk5NTk0IC04LjkwNDgxNDgxNjg3MTgyOTMxNDMxMDU0Nzg1MTkyMDgzIC0+IDEuNzY3ODgwNzU5MTg0ODg2OTMwODYzNDc3MjA0NjE1NDcKK3N1YngzNDk0IHN1YnRyYWN0IDU1MDY3NzIzODgxOTUwLjEzNDY5NTgxNzk2MDQwOTk1OTQgLTguOTA0ODE0ODE2ODcxODI5MzE0MzEwNTQ3ODUxOTIwODMgLT4gNTUwNjc3MjM4ODE5NTkuMDM5NTEwNjM0ODMyMjM5MjczNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDk1IGFkZCA4NjgyNTExMjMuNDEzOTkyNjUzMzYyODYwNjM3NTQxMDYwRSswMTkgNTU3OTY2NTA0NS4zNzg1ODMwODU0MTE1NDg1ODU2NzY1NkUrMTMxIC0+IDUuNTc5NjY1MDQ1Mzc4NTgzMDg1NDExNTQ4NTg1Njc2NTZFKzE0MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDk1IGNvbXBhcmUgODY4MjUxMTIzLjQxMzk5MjY1MzM2Mjg2MDYzNzU0MTA2MEUrMDE5IDU1Nzk2NjUwNDUuMzc4NTgzMDg1NDExNTQ4NTg1Njc2NTZFKzEzMSAtPiAtMQorZGl2eDM0OTUgZGl2aWRlIDg2ODI1MTEyMy40MTM5OTI2NTMzNjI4NjA2Mzc1NDEwNjBFKzAxOSA1NTc5NjY1MDQ1LjM3ODU4MzA4NTQxMTU0ODU4NTY3NjU2RSsxMzEgLT4gMS41NTYwOTkwMDY1NzU5MDcwNjE1NTI1MTkwMjcyNTAyN0UtMTEzIEluZXhhY3QgUm91bmRlZAorZHZpeDM0OTUgZGl2aWRlaW50IDg2ODI1MTEyMy40MTM5OTI2NTMzNjI4NjA2Mzc1NDEwNjBFKzAxOSA1NTc5NjY1MDQ1LjM3ODU4MzA4NTQxMTU0ODU4NTY3NjU2RSsxMzEgLT4gMAorbXVseDM0OTUgbXVsdGlwbHkgODY4MjUxMTIzLjQxMzk5MjY1MzM2Mjg2MDYzNzU0MTA2MEUrMDE5IDU1Nzk2NjUwNDUuMzc4NTgzMDg1NDExNTQ4NTg1Njc2NTZFKzEzMSAtPiA0Ljg0NDU1MDQ0MzkyMzc0MTA2MTA2OTY2Nzc5MzIyNDgzRSsxNjggSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ5NSBwb3dlciA4NjgyNTExMjMuNDEzOTkyNjUzMzYyODYwNjM3NTQxMDYwRSswMTkgNiAtPiA0LjI4NDIyMzU0MzA0MjkxODg0ODAyNjkwNzMzODUzMjI3RSsxNjcgSW5leGFjdCBSb3VuZGVkCityZW14MzQ5NSByZW1haW5kZXIgODY4MjUxMTIzLjQxMzk5MjY1MzM2Mjg2MDYzNzU0MTA2MEUrMDE5IDU1Nzk2NjUwNDUuMzc4NTgzMDg1NDExNTQ4NTg1Njc2NTZFKzEzMSAtPiA4NjgyNTExMjM0MTM5OTI2NTMzNjI4NjA2Mzc1LjQxMDYwCitzdWJ4MzQ5NSBzdWJ0cmFjdCA4NjgyNTExMjMuNDEzOTkyNjUzMzYyODYwNjM3NTQxMDYwRSswMTkgNTU3OTY2NTA0NS4zNzg1ODMwODU0MTE1NDg1ODU2NzY1NkUrMTMxIC0+IC01LjU3OTY2NTA0NTM3ODU4MzA4NTQxMTU0ODU4NTY3NjU2RSsxNDAgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ5NiBhZGQgLTY0Ni40NjQ0MzE1NzQwMTQ0MDc1MzYwMDQ5OTAwNTkwNjkgLTc5OC42Nzk1NjAwMjA0MTQ1MjM4NDEzMjE3MjQ2NDk1OTRFLTAzNyAtPiAtNjQ2LjQ2NDQzMTU3NDAxNDQwNzUzNjAwNDk5MDA1OTA2OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDk2IGNvbXBhcmUgLTY0Ni40NjQ0MzE1NzQwMTQ0MDc1MzYwMDQ5OTAwNTkwNjkgLTc5OC42Nzk1NjAwMjA0MTQ1MjM4NDEzMjE3MjQ2NDk1OTRFLTAzNyAtPiAtMQorZGl2eDM0OTYgZGl2aWRlIC02NDYuNDY0NDMxNTc0MDE0NDA3NTM2MDA0OTkwMDU5MDY5IC03OTguNjc5NTYwMDIwNDE0NTIzODQxMzIxNzI0NjQ5NTk0RS0wMzcgLT4gOC4wOTQxNjUyMTg4NzA2Mzg4NjYxMzUyNzIyODM1MzU0M0UrMzYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ5NiBkaXZpZGVpbnQgLTY0Ni40NjQ0MzE1NzQwMTQ0MDc1MzYwMDQ5OTAwNTkwNjkgLTc5OC42Nzk1NjAwMjA0MTQ1MjM4NDEzMjE3MjQ2NDk1OTRFLTAzNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0OTYgbXVsdGlwbHkgLTY0Ni40NjQ0MzE1NzQwMTQ0MDc1MzYwMDQ5OTAwNTkwNjkgLTc5OC42Nzk1NjAwMjA0MTQ1MjM4NDEzMjE3MjQ2NDk1OTRFLTAzNyAtPiA1LjE2MzE3OTI3Nzc4MzgxMTk3OTk1NDUxMzYzNDM5NjI2RS0zMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDk2IHBvd2VyIC02NDYuNDY0NDMxNTc0MDE0NDA3NTM2MDA0OTkwMDU5MDY5IC04IC0+IDMuMjc4MjU2NDE1Njk4NjA4NjE3NzQ3MDA1NDgwMzU2OTFFLTIzIEluZXhhY3QgUm91bmRlZAorcmVteDM0OTYgcmVtYWluZGVyIC02NDYuNDY0NDMxNTc0MDE0NDA3NTM2MDA0OTkwMDU5MDY5IC03OTguNjc5NTYwMDIwNDE0NTIzODQxMzIxNzI0NjQ5NTk0RS0wMzcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDk2IHN1YnRyYWN0IC02NDYuNDY0NDMxNTc0MDE0NDA3NTM2MDA0OTkwMDU5MDY5IC03OTguNjc5NTYwMDIwNDE0NTIzODQxMzIxNzI0NjQ5NTk0RS0wMzcgLT4gLTY0Ni40NjQ0MzE1NzQwMTQ0MDc1MzYwMDQ5OTAwNTkwNjkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ5NyBhZGQgMzU0LjU0NjY3OTk3NTIxOTc1MzU5ODU1ODI3MzQyMTU1NiAtNzAzOS40NjM4NjgxMjIzOTAxNTE0NDU4MTc2MTc1MjkyN0UtNDQ4IC0+IDM1NC41NDY2Nzk5NzUyMTk3NTM1OTg1NTgyNzM0MjE1NTYgSW5leGFjdCBSb3VuZGVkCitjb214MzQ5NyBjb21wYXJlIDM1NC41NDY2Nzk5NzUyMTk3NTM1OTg1NTgyNzM0MjE1NTYgLTcwMzkuNDYzODY4MTIyMzkwMTUxNDQ1ODE3NjE3NTI5MjdFLTQ0OCAtPiAxCitkaXZ4MzQ5NyBkaXZpZGUgMzU0LjU0NjY3OTk3NTIxOTc1MzU5ODU1ODI3MzQyMTU1NiAtNzAzOS40NjM4NjgxMjIzOTAxNTE0NDU4MTc2MTc1MjkyN0UtNDQ4IC0+IC01LjAzNjU1Nzk5MTAyNDc3MTkyNTc5NDE0NTIzMzUyMDI4RSs0NDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ5NyBkaXZpZGVpbnQgMzU0LjU0NjY3OTk3NTIxOTc1MzU5ODU1ODI3MzQyMTU1NiAtNzAzOS40NjM4NjgxMjIzOTAxNTE0NDU4MTc2MTc1MjkyN0UtNDQ4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ5NyBtdWx0aXBseSAzNTQuNTQ2Njc5OTc1MjE5NzUzNTk4NTU4MjczNDIxNTU2IC03MDM5LjQ2Mzg2ODEyMjM5MDE1MTQ0NTgxNzYxNzUyOTI3RS00NDggLT4gLTIuNDk1ODE4NTQzMjQ4MzExNjEyNjczNjkyOTIwNzE0MDhFLTQ0MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDk3IHBvd2VyIDM1NC41NDY2Nzk5NzUyMTk3NTM1OTg1NTgyNzM0MjE1NTYgLTcgLT4gMS40MTk5OTI0NjM2NTg3NTYxNzI5ODI3MDQxNDMwNDIzM0UtMTggSW5leGFjdCBSb3VuZGVkCityZW14MzQ5NyByZW1haW5kZXIgMzU0LjU0NjY3OTk3NTIxOTc1MzU5ODU1ODI3MzQyMTU1NiAtNzAzOS40NjM4NjgxMjIzOTAxNTE0NDU4MTc2MTc1MjkyN0UtNDQ4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ5NyBzdWJ0cmFjdCAzNTQuNTQ2Njc5OTc1MjE5NzUzNTk4NTU4MjczNDIxNTU2IC03MDM5LjQ2Mzg2ODEyMjM5MDE1MTQ0NTgxNzYxNzUyOTI3RS00NDggLT4gMzU0LjU0NjY3OTk3NTIxOTc1MzU5ODU1ODI3MzQyMTU1NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDk4IGFkZCA5MTkzNjA4NzkxNzQzNS41OTc0ODg5NDk1Mjc4MjE1ODc0IC02NzA4MDgyMzM0NC44OTAzMzkyNTg0MzI3MTM2MDgyNDg2RS03NTcgLT4gOTE5MzYwODc5MTc0MzUuNTk3NDg4OTQ5NTI3ODIxNTg3NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDk4IGNvbXBhcmUgOTE5MzYwODc5MTc0MzUuNTk3NDg4OTQ5NTI3ODIxNTg3NCAtNjcwODA4MjMzNDQuODkwMzM5MjU4NDMyNzEzNjA4MjQ4NkUtNzU3IC0+IDEKK2RpdngzNDk4IGRpdmlkZSA5MTkzNjA4NzkxNzQzNS41OTc0ODg5NDk1Mjc4MjE1ODc0IC02NzA4MDgyMzM0NC44OTAzMzkyNTg0MzI3MTM2MDgyNDg2RS03NTcgLT4gLTEuMzcwNTI3MTI0MzQzMDMzNjY1NjkzMDQ2ODg5OTM3ODNFKzc2MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDk4IGRpdmlkZWludCA5MTkzNjA4NzkxNzQzNS41OTc0ODg5NDk1Mjc4MjE1ODc0IC02NzA4MDgyMzM0NC44OTAzMzkyNTg0MzI3MTM2MDgyNDg2RS03NTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDk4IG11bHRpcGx5IDkxOTM2MDg3OTE3NDM1LjU5NzQ4ODk0OTUyNzgyMTU4NzQgLTY3MDgwODIzMzQ0Ljg5MDMzOTI1ODQzMjcxMzYwODI0ODZFLTc1NyAtPiAtNi4xNjcxNDg0NzI2MDk4MDQ0ODA5OTI5Mjc2MzkzOTQyM0UtNzMzIEluZXhhY3QgUm91bmRlZAorcG93eDM0OTggcG93ZXIgOTE5MzYwODc5MTc0MzUuNTk3NDg4OTQ5NTI3ODIxNTg3NCAtNyAtPiAxLjgwMTM0ODk5OTM5MDM1NzA4NzE5NjU5MDY1MDgyNjMwRS05OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDk4IHJlbWFpbmRlciA5MTkzNjA4NzkxNzQzNS41OTc0ODg5NDk1Mjc4MjE1ODc0IC02NzA4MDgyMzM0NC44OTAzMzkyNTg0MzI3MTM2MDgyNDg2RS03NTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDk4IHN1YnRyYWN0IDkxOTM2MDg3OTE3NDM1LjU5NzQ4ODk0OTUyNzgyMTU4NzQgLTY3MDgwODIzMzQ0Ljg5MDMzOTI1ODQzMjcxMzYwODI0ODZFLTc1NyAtPiA5MTkzNjA4NzkxNzQzNS41OTc0ODg5NDk1Mjc4MjE1ODc0IEluZXhhY3QgUm91bmRlZAorYWRkeDM0OTkgYWRkIC0wNzM0NS42NDIyNTE4NTI4NTU2MTM2NTIxNDE3MjU5ODExRS02MDAgNDExODgzMjUuNzA0MTM2MjYwODkzNDk1NzU4NDU4MzM4MUUtNzYzIC0+IC03LjM0NTY0MjI1MTg1Mjg1NTYxMzY1MjE0MTcyNTk4MTEwRS01OTcgSW5leGFjdCBSb3VuZGVkCitjb214MzQ5OSBjb21wYXJlIC0wNzM0NS42NDIyNTE4NTI4NTU2MTM2NTIxNDE3MjU5ODExRS02MDAgNDExODgzMjUuNzA0MTM2MjYwODkzNDk1NzU4NDU4MzM4MUUtNzYzIC0+IC0xCitkaXZ4MzQ5OSBkaXZpZGUgLTA3MzQ1LjY0MjI1MTg1Mjg1NTYxMzY1MjE0MTcyNTk4MTFFLTYwMCA0MTE4ODMyNS43MDQxMzYyNjA4OTM0OTU3NTg0NTgzMzgxRS03NjMgLT4gLTEuNzgzNDI4MjIyOTkxNjM4NDIyNDcxODQzMDM4NzgwMjJFKzE1OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDk5IGRpdmlkZWludCAtMDczNDUuNjQyMjUxODUyODU1NjEzNjUyMTQxNzI1OTgxMUUtNjAwIDQxMTg4MzI1LjcwNDEzNjI2MDg5MzQ5NTc1ODQ1ODMzODFFLTc2MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0OTkgbXVsdGlwbHkgLTA3MzQ1LjY0MjI1MTg1Mjg1NTYxMzY1MjE0MTcyNTk4MTFFLTYwMCA0MTE4ODMyNS43MDQxMzYyNjA4OTM0OTU3NTg0NTgzMzgxRS03NjMgLT4gLTMuMDI1NTQ3MDU1NzUzODAzMzgyNzQxMjY4Njc2NTU2NzZFLTEzNTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ5OSBwb3dlciAtMDczNDUuNjQyMjUxODUyODU1NjEzNjUyMTQxNzI1OTgxMUUtNjAwIDQgLT4gMi45MTE1MTU0MTU1MjIxNzU4MjA4MjkzNzIzNjI1NTk5NkUtMjM4NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDk5IHJlbWFpbmRlciAtMDczNDUuNjQyMjUxODUyODU1NjEzNjUyMTQxNzI1OTgxMUUtNjAwIDQxMTg4MzI1LjcwNDEzNjI2MDg5MzQ5NTc1ODQ1ODMzODFFLTc2MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0OTkgc3VidHJhY3QgLTA3MzQ1LjY0MjI1MTg1Mjg1NTYxMzY1MjE0MTcyNTk4MTFFLTYwMCA0MTE4ODMyNS43MDQxMzYyNjA4OTM0OTU3NTg0NTgzMzgxRS03NjMgLT4gLTcuMzQ1NjQyMjUxODUyODU1NjEzNjUyMTQxNzI1OTgxMTBFLTU5NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNTAwIGFkZCAtMjUzMjgwNzI0LjkzOTQ1ODAyMTU4ODE2Nzk2NTAzODE4NCA2MTY5ODguNDI2NDI1OTA4ODcyMzk4MTcwODk2Mzc1NjM0RSszOTYgLT4gNi4xNjk4ODQyNjQyNTkwODg3MjM5ODE3MDg5NjM3NTYzNEUrNDAxIEluZXhhY3QgUm91bmRlZAorY29teDM1MDAgY29tcGFyZSAtMjUzMjgwNzI0LjkzOTQ1ODAyMTU4ODE2Nzk2NTAzODE4NCA2MTY5ODguNDI2NDI1OTA4ODcyMzk4MTcwODk2Mzc1NjM0RSszOTYgLT4gLTEKK2RpdngzNTAwIGRpdmlkZSAtMjUzMjgwNzI0LjkzOTQ1ODAyMTU4ODE2Nzk2NTAzODE4NCA2MTY5ODguNDI2NDI1OTA4ODcyMzk4MTcwODk2Mzc1NjM0RSszOTYgLT4gLTQuMTA1MTEzMDYzNTczMzc3NTMzNTE2NTU1MTE4NjYxNzBFLTM5NCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNTAwIGRpdmlkZWludCAtMjUzMjgwNzI0LjkzOTQ1ODAyMTU4ODE2Nzk2NTAzODE4NCA2MTY5ODguNDI2NDI1OTA4ODcyMzk4MTcwODk2Mzc1NjM0RSszOTYgLT4gLTAKK211bHgzNTAwIG11bHRpcGx5IC0yNTMyODA3MjQuOTM5NDU4MDIxNTg4MTY3OTY1MDM4MTg0IDYxNjk4OC40MjY0MjU5MDg4NzIzOTgxNzA4OTYzNzU2MzRFKzM5NiAtPiAtMS41NjI3MTI3NTkyNDQwOTY1Nzk5MTkxMzYyMDUyMjMxNUUrNDEwIEluZXhhY3QgUm91bmRlZAorcG93eDM1MDAgcG93ZXIgLTI1MzI4MDcyNC45Mzk0NTgwMjE1ODgxNjc5NjUwMzgxODQgNiAtPiAyLjY0MDA1NDIwMjIxNDA2ODA4NzgyMjg0NDU5Nzk0NDI0RSs1MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNTAwIHJlbWFpbmRlciAtMjUzMjgwNzI0LjkzOTQ1ODAyMTU4ODE2Nzk2NTAzODE4NCA2MTY5ODguNDI2NDI1OTA4ODcyMzk4MTcwODk2Mzc1NjM0RSszOTYgLT4gLTI1MzI4MDcyNC45Mzk0NTgwMjE1ODgxNjc5NjUwMzgxODQKK3N1YngzNTAwIHN1YnRyYWN0IC0yNTMyODA3MjQuOTM5NDU4MDIxNTg4MTY3OTY1MDM4MTg0IDYxNjk4OC40MjY0MjU5MDg4NzIzOTgxNzA4OTYzNzU2MzRFKzM5NiAtPiAtNi4xNjk4ODQyNjQyNTkwODg3MjM5ODE3MDg5NjM3NTYzNEUrNDAxIEluZXhhY3QgUm91bmRlZApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yYW5kb21zLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JhbmRvbXMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQ0MjhlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yYW5kb21zLmRlY1Rlc3QKQEAgLTAsMCArMSw0MDMwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHJhbmRvbXMuZGVjVGVzdCAtLSBkZWNpbWFsIHJhbmRvbSB0ZXN0Y2FzZXMgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKKworLS0gUmFuZG9tbHkgZ2VuZXJhdGVkIHRlc3RjYXNlcyBbMzEgRGVjIDIwMDAsIHdpdGggcmVzdWx0cyBkZWZpbmVkIGZvcgorLS0gYWxsIGNhc2VzIFsyNyBPY3QgMjAwMV0sIGFuZCBubyB0cmltL2ZpbmlzaCBbOSBKdW4gMjAwMl0KK3hhZGQwMDEgYWRkIDkwNS42NzQwMiAtMjAyODk2NjExLkUtNzgwNDcyNjIwIC0+IDkwNS42NzQwMjAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDAxIGNvbXBhcmUgOTA1LjY3NDAyIC0yMDI4OTY2MTEuRS03ODA0NzI2MjAgLT4gMQoreGRpdjAwMSBkaXZpZGUgOTA1LjY3NDAyIC0yMDI4OTY2MTEuRS03ODA0NzI2MjAgLT4gLTQuNDYzNzIxNzdFKzc4MDQ3MjYxNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMDEgZGl2aWRlaW50IDkwNS42NzQwMiAtMjAyODk2NjExLkUtNzgwNDcyNjIwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDAxIG11bHRpcGx5IDkwNS42NzQwMiAtMjAyODk2NjExLkUtNzgwNDcyNjIwIC0+IC0xLjgzNzU4MTg5RS03ODA0NzI2MDkgSW5leGFjdCBSb3VuZGVkCit4cG93MDAxIHBvd2VyIDkwNS42NzQwMiAtMiAtPiAwLjAwMDAwMTIxOTE0NzMwIEluZXhhY3QgUm91bmRlZAoreHJlbTAwMSByZW1haW5kZXIgOTA1LjY3NDAyIC0yMDI4OTY2MTEuRS03ODA0NzI2MjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwMDEgc3VidHJhY3QgOTA1LjY3NDAyIC0yMDI4OTY2MTEuRS03ODA0NzI2MjAgLT4gOTA1LjY3NDAyMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMDIgYWRkIDM5MTUxMzQuNyAtNTk3MTY0OTA3LiAtPiAtNTkzMjQ5NzcyIEluZXhhY3QgUm91bmRlZAoreGNvbTAwMiBjb21wYXJlIDM5MTUxMzQuNyAtNTk3MTY0OTA3LiAtPiAxCit4ZGl2MDAyIGRpdmlkZSAzOTE1MTM0LjcgLTU5NzE2NDkwNy4gLT4gLTAuMDA2NTU2MjAzNTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDAyIGRpdmlkZWludCAzOTE1MTM0LjcgLTU5NzE2NDkwNy4gLT4gLTAKK3htdWwwMDIgbXVsdGlwbHkgMzkxNTEzNC43IC01OTcxNjQ5MDcuIC0+IC0yLjMzNzk4MTA1RSsxNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMDIgcG93ZXIgMzkxNTEzNC43IC01OTcxNjQ5MDcgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDAyIHJlbWFpbmRlciAzOTE1MTM0LjcgLTU5NzE2NDkwNy4gLT4gMzkxNTEzNC43Cit4c3ViMDAyIHN1YnRyYWN0IDM5MTUxMzQuNyAtNTk3MTY0OTA3LiAtPiA2MDEwODAwNDIgSW5leGFjdCBSb3VuZGVkCit4YWRkMDAzIGFkZCAzMDk3NTkyNjEgNjI2NjMuNDg3IC0+IDMwOTgyMTkyNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMDMgY29tcGFyZSAzMDk3NTkyNjEgNjI2NjMuNDg3IC0+IDEKK3hkaXYwMDMgZGl2aWRlIDMwOTc1OTI2MSA2MjY2My40ODcgLT4gNDk0My4yMTc3NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMDMgZGl2aWRlaW50IDMwOTc1OTI2MSA2MjY2My40ODcgLT4gNDk0MworeG11bDAwMyBtdWx0aXBseSAzMDk3NTkyNjEgNjI2NjMuNDg3IC0+IDEuOTQxMDU5NTRFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzAwMyBwb3dlciAzMDk3NTkyNjEgNjI2NjMgLT4gMS4xMzY3OTE5OUUrNTMyMDczIEluZXhhY3QgUm91bmRlZAoreHJlbTAwMyByZW1haW5kZXIgMzA5NzU5MjYxIDYyNjYzLjQ4NyAtPiAxMzY0NC43NTkKK3hzdWIwMDMgc3VidHJhY3QgMzA5NzU5MjYxIDYyNjYzLjQ4NyAtPiAzMDk2OTY1OTggSW5leGFjdCBSb3VuZGVkCit4YWRkMDA0IGFkZCAzLjkzNTkxODg4RS0yMzY1OTU2MjYgNzI0MjM3NS4wMCAtPiA3MjQyMzc1LjAwIEluZXhhY3QgUm91bmRlZAoreGNvbTAwNCBjb21wYXJlIDMuOTM1OTE4ODhFLTIzNjU5NTYyNiA3MjQyMzc1LjAwIC0+IC0xCit4ZGl2MDA0IGRpdmlkZSAzLjkzNTkxODg4RS0yMzY1OTU2MjYgNzI0MjM3NS4wMCAtPiA1LjQzNDU2OTMwRS0yMzY1OTU2MzMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDA0IGRpdmlkZWludCAzLjkzNTkxODg4RS0yMzY1OTU2MjYgNzI0MjM3NS4wMCAtPiAwCit4bXVsMDA0IG11bHRpcGx5IDMuOTM1OTE4ODhFLTIzNjU5NTYyNiA3MjQyMzc1LjAwIC0+IDIuODUwNTQwMDVFLTIzNjU5NTYxOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMDQgcG93ZXIgMy45MzU5MTg4OEUtMjM2NTk1NjI2IDcyNDIzNzUgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDA0IHJlbWFpbmRlciAzLjkzNTkxODg4RS0yMzY1OTU2MjYgNzI0MjM3NS4wMCAtPiAzLjkzNTkxODg4RS0yMzY1OTU2MjYKK3hzdWIwMDQgc3VidHJhY3QgMy45MzU5MTg4OEUtMjM2NTk1NjI2IDcyNDIzNzUuMDAgLT4gLTcyNDIzNzUuMDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDA1IGFkZCAzMjM5MDIuNzE0IC02MDg2NjkuNjA3RS02NTcwNjA1NjggLT4gMzIzOTAyLjcxNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMDUgY29tcGFyZSAzMjM5MDIuNzE0IC02MDg2NjkuNjA3RS02NTcwNjA1NjggLT4gMQoreGRpdjAwNSBkaXZpZGUgMzIzOTAyLjcxNCAtNjA4NjY5LjYwN0UtNjU3MDYwNTY4IC0+IC01LjMyMTQ4NjU3RSs2NTcwNjA1NjcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDA1IGRpdmlkZWludCAzMjM5MDIuNzE0IC02MDg2NjkuNjA3RS02NTcwNjA1NjggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwMDUgbXVsdGlwbHkgMzIzOTAyLjcxNCAtNjA4NjY5LjYwN0UtNjU3MDYwNTY4IC0+IC0xLjk3MTQ5NzM4RS02NTcwNjA1NTcgSW5leGFjdCBSb3VuZGVkCit4cG93MDA1IHBvd2VyIDMyMzkwMi43MTQgLTYgLT4gOC42NTk4OTIwNEUtMzQgSW5leGFjdCBSb3VuZGVkCit4cmVtMDA1IHJlbWFpbmRlciAzMjM5MDIuNzE0IC02MDg2NjkuNjA3RS02NTcwNjA1NjggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwMDUgc3VidHJhY3QgMzIzOTAyLjcxNCAtNjA4NjY5LjYwN0UtNjU3MDYwNTY4IC0+IDMyMzkwMi43MTQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDA2IGFkZCA1LjExOTcwMDkyIC04ODA3LjIyMDM2IC0+IC04ODAyLjEwMDY2IEluZXhhY3QgUm91bmRlZAoreGNvbTAwNiBjb21wYXJlIDUuMTE5NzAwOTIgLTg4MDcuMjIwMzYgLT4gMQoreGRpdjAwNiBkaXZpZGUgNS4xMTk3MDA5MiAtODgwNy4yMjAzNiAtPiAtMC4wMDA1ODEzMDcyMzYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDA2IGRpdmlkZWludCA1LjExOTcwMDkyIC04ODA3LjIyMDM2IC0+IC0wCit4bXVsMDA2IG11bHRpcGx5IDUuMTE5NzAwOTIgLTg4MDcuMjIwMzYgLT4gLTQ1MDkwLjMzNDIgSW5leGFjdCBSb3VuZGVkCit4cG93MDA2IHBvd2VyIDUuMTE5NzAwOTIgLTg4MDcgLT4gNC44MTgxOTI2MkUtNjI0NyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMDYgcmVtYWluZGVyIDUuMTE5NzAwOTIgLTg4MDcuMjIwMzYgLT4gNS4xMTk3MDA5MgoreHN1YjAwNiBzdWJ0cmFjdCA1LjExOTcwMDkyIC04ODA3LjIyMDM2IC0+IDg4MTIuMzQwMDYgSW5leGFjdCBSb3VuZGVkCit4YWRkMDA3IGFkZCAtNy45OTg3NDUxNiA0NTYxLjgzNzU4IC0+IDQ1NTMuODM4ODMgSW5leGFjdCBSb3VuZGVkCit4Y29tMDA3IGNvbXBhcmUgLTcuOTk4NzQ1MTYgNDU2MS44Mzc1OCAtPiAtMQoreGRpdjAwNyBkaXZpZGUgLTcuOTk4NzQ1MTYgNDU2MS44Mzc1OCAtPiAtMC4wMDE3NTM0MDQyMCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMDcgZGl2aWRlaW50IC03Ljk5ODc0NTE2IDQ1NjEuODM3NTggLT4gLTAKK3htdWwwMDcgbXVsdGlwbHkgLTcuOTk4NzQ1MTYgNDU2MS44Mzc1OCAtPiAtMzY0ODguOTc2MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMDcgcG93ZXIgLTcuOTk4NzQ1MTYgNDU2MiAtPiAzLjg1MjM2MTk5RSs0MTE5IEluZXhhY3QgUm91bmRlZAoreHJlbTAwNyByZW1haW5kZXIgLTcuOTk4NzQ1MTYgNDU2MS44Mzc1OCAtPiAtNy45OTg3NDUxNgoreHN1YjAwNyBzdWJ0cmFjdCAtNy45OTg3NDUxNiA0NTYxLjgzNzU4IC0+IC00NTY5LjgzNjMzIEluZXhhY3QgUm91bmRlZAoreGFkZDAwOCBhZGQgMjk3ODAyODc4IC05MjcyMDYuMzI0IC0+IDI5Njg3NTY3MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMDggY29tcGFyZSAyOTc4MDI4NzggLTkyNzIwNi4zMjQgLT4gMQoreGRpdjAwOCBkaXZpZGUgMjk3ODAyODc4IC05MjcyMDYuMzI0IC0+IC0zMjEuMTgyOTY3IEluZXhhY3QgUm91bmRlZAoreGR2aTAwOCBkaXZpZGVpbnQgMjk3ODAyODc4IC05MjcyMDYuMzI0IC0+IC0zMjEKK3htdWwwMDggbXVsdGlwbHkgMjk3ODAyODc4IC05MjcyMDYuMzI0IC0+IC0yLjc2MTI0NzEyRSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMDggcG93ZXIgMjk3ODAyODc4IC05MjcyMDYgLT4gMS45NDYwMjgxMEUtNzg1NzA3OCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMDggcmVtYWluZGVyIDI5NzgwMjg3OCAtOTI3MjA2LjMyNCAtPiAxNjk2NDcuOTk2Cit4c3ViMDA4IHN1YnRyYWN0IDI5NzgwMjg3OCAtOTI3MjA2LjMyNCAtPiAyOTg3MzAwODQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDA5IGFkZCAtNzY2LjY1MTgyNCAzMTMwMC4zNjE5IC0+IDMwNTMzLjcxMDEgSW5leGFjdCBSb3VuZGVkCit4Y29tMDA5IGNvbXBhcmUgLTc2Ni42NTE4MjQgMzEzMDAuMzYxOSAtPiAtMQoreGRpdjAwOSBkaXZpZGUgLTc2Ni42NTE4MjQgMzEzMDAuMzYxOSAtPiAtMC4wMjQ0OTMzODUzIEluZXhhY3QgUm91bmRlZAoreGR2aTAwOSBkaXZpZGVpbnQgLTc2Ni42NTE4MjQgMzEzMDAuMzYxOSAtPiAtMAoreG11bDAwOSBtdWx0aXBseSAtNzY2LjY1MTgyNCAzMTMwMC4zNjE5IC0+IC0yMzk5NjQ3OS41IEluZXhhY3QgUm91bmRlZAoreHBvdzAwOSBwb3dlciAtNzY2LjY1MTgyNCAzMTMwMCAtPiA4LjM3MTg5MDExRSs5MDI4NyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMDkgcmVtYWluZGVyIC03NjYuNjUxODI0IDMxMzAwLjM2MTkgLT4gLTc2Ni42NTE4MjQKK3hzdWIwMDkgc3VidHJhY3QgLTc2Ni42NTE4MjQgMzEzMDAuMzYxOSAtPiAtMzIwNjcuMDEzNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMTAgYWRkIC01Njc0Ni44Njg5RSs5MzQ5ODE5NDIgNDcxMDAyNTIxLiAtPiAtNS42NzQ2ODY4OUUrOTM0OTgxOTQ2IEluZXhhY3QgUm91bmRlZAoreGNvbTAxMCBjb21wYXJlIC01Njc0Ni44Njg5RSs5MzQ5ODE5NDIgNDcxMDAyNTIxLiAtPiAtMQoreGRpdjAxMCBkaXZpZGUgLTU2NzQ2Ljg2ODlFKzkzNDk4MTk0MiA0NzEwMDI1MjEuIC0+IC0xLjIwNDgxMDMwRSs5MzQ5ODE5MzggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDEwIGRpdmlkZWludCAtNTY3NDYuODY4OUUrOTM0OTgxOTQyIDQ3MTAwMjUyMS4gLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwMTAgbXVsdGlwbHkgLTU2NzQ2Ljg2ODlFKzkzNDk4MTk0MiA0NzEwMDI1MjEuIC0+IC0yLjY3Mjc5MTgzRSs5MzQ5ODE5NTUgSW5leGFjdCBSb3VuZGVkCit4cG93MDEwIHBvd2VyIC01Njc0Ni44Njg5RSs5MzQ5ODE5NDIgNDcxMDAyNTIxIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMTAgcmVtYWluZGVyIC01Njc0Ni44Njg5RSs5MzQ5ODE5NDIgNDcxMDAyNTIxLiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjAxMCBzdWJ0cmFjdCAtNTY3NDYuODY4OUUrOTM0OTgxOTQyIDQ3MTAwMjUyMS4gLT4gLTUuNjc0Njg2ODlFKzkzNDk4MTk0NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMTEgYWRkIDQ1NjQxNzE2MCAtNDEzNDYuMTAyNCAtPiA0NTYzNzU4MTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDExIGNvbXBhcmUgNDU2NDE3MTYwIC00MTM0Ni4xMDI0IC0+IDEKK3hkaXYwMTEgZGl2aWRlIDQ1NjQxNzE2MCAtNDEzNDYuMTAyNCAtPiAtMTEwMzguOTQwNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMTEgZGl2aWRlaW50IDQ1NjQxNzE2MCAtNDEzNDYuMTAyNCAtPiAtMTEwMzgKK3htdWwwMTEgbXVsdGlwbHkgNDU2NDE3MTYwIC00MTM0Ni4xMDI0IC0+IC0xLjg4NzEwNzA2RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMTEgcG93ZXIgNDU2NDE3MTYwIC00MTM0NiAtPiAxLjA0NzY2ODYzRS0zNTgwMzAgSW5leGFjdCBSb3VuZGVkCit4cmVtMDExIHJlbWFpbmRlciA0NTY0MTcxNjAgLTQxMzQ2LjEwMjQgLT4gMzg4ODEuNzA4OAoreHN1YjAxMSBzdWJ0cmFjdCA0NTY0MTcxNjAgLTQxMzQ2LjEwMjQgLT4gNDU2NDU4NTA2IEluZXhhY3QgUm91bmRlZAoreGFkZDAxMiBhZGQgMTAyODk1LjcyMiAtMi42MjIxNDgyNiAtPiAxMDI4OTMuMTAwIEluZXhhY3QgUm91bmRlZAoreGNvbTAxMiBjb21wYXJlIDEwMjg5NS43MjIgLTIuNjIyMTQ4MjYgLT4gMQoreGRpdjAxMiBkaXZpZGUgMTAyODk1LjcyMiAtMi42MjIxNDgyNiAtPiAtMzkyNDEuMDAwOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMTIgZGl2aWRlaW50IDEwMjg5NS43MjIgLTIuNjIyMTQ4MjYgLT4gLTM5MjQxCit4bXVsMDEyIG11bHRpcGx5IDEwMjg5NS43MjIgLTIuNjIyMTQ4MjYgLT4gLTI2OTgwNy44MzggSW5leGFjdCBSb3VuZGVkCit4cG93MDEyIHBvd2VyIDEwMjg5NS43MjIgLTMgLT4gOS4xNzkyNjc4NkUtMTYgSW5leGFjdCBSb3VuZGVkCit4cmVtMDEyIHJlbWFpbmRlciAxMDI4OTUuNzIyIC0yLjYyMjE0ODI2IC0+IDAuMDAyMTI5MzQKK3hzdWIwMTIgc3VidHJhY3QgMTAyODk1LjcyMiAtMi42MjIxNDgyNiAtPiAxMDI4OTguMzQ0IEluZXhhY3QgUm91bmRlZAoreGFkZDAxMyBhZGQgNjEuMzAzMzMzMUUrMTU3NjQ0MTQxIC01Njc3NDAuOTE4RS04OTM0Mzk0NTYgLT4gNi4xMzAzMzMzMUUrMTU3NjQ0MTQyIEluZXhhY3QgUm91bmRlZAoreGNvbTAxMyBjb21wYXJlIDYxLjMwMzMzMzFFKzE1NzY0NDE0MSAtNTY3NzQwLjkxOEUtODkzNDM5NDU2IC0+IDEKK3hkaXYwMTMgZGl2aWRlIDYxLjMwMzMzMzFFKzE1NzY0NDE0MSAtNTY3NzQwLjkxOEUtODkzNDM5NDU2IC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hkdmkwMTMgZGl2aWRlaW50IDYxLjMwMzMzMzFFKzE1NzY0NDE0MSAtNTY3NzQwLjkxOEUtODkzNDM5NDU2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDEzIG11bHRpcGx5IDYxLjMwMzMzMzFFKzE1NzY0NDE0MSAtNTY3NzQwLjkxOEUtODkzNDM5NDU2IC0+IC0zLjQ4MDQ0MTA2RS03MzU3OTUzMDggSW5leGFjdCBSb3VuZGVkCit4cG93MDEzIHBvd2VyIDYxLjMwMzMzMzFFKzE1NzY0NDE0MSAtNiAtPiAxLjg4NDA2MzIyRS05NDU4NjQ4NTcgSW5leGFjdCBSb3VuZGVkCit4cmVtMDEzIHJlbWFpbmRlciA2MS4zMDMzMzMxRSsxNTc2NDQxNDEgLTU2Nzc0MC45MThFLTg5MzQzOTQ1NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjAxMyBzdWJ0cmFjdCA2MS4zMDMzMzMxRSsxNTc2NDQxNDEgLTU2Nzc0MC45MThFLTg5MzQzOTQ1NiAtPiA2LjEzMDMzMzMxRSsxNTc2NDQxNDIgSW5leGFjdCBSb3VuZGVkCit4YWRkMDE0IGFkZCA4MDIyMy4zODk3IDczOTIxLjAzODNFLTQ2Nzc3MjY3NSAtPiA4MDIyMy4zODk3IEluZXhhY3QgUm91bmRlZAoreGNvbTAxNCBjb21wYXJlIDgwMjIzLjM4OTcgNzM5MjEuMDM4M0UtNDY3NzcyNjc1IC0+IDEKK3hkaXYwMTQgZGl2aWRlIDgwMjIzLjM4OTcgNzM5MjEuMDM4M0UtNDY3NzcyNjc1IC0+IDEuMDg1MjU3ODlFKzQ2Nzc3MjY3NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMTQgZGl2aWRlaW50IDgwMjIzLjM4OTcgNzM5MjEuMDM4M0UtNDY3NzcyNjc1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDE0IG11bHRpcGx5IDgwMjIzLjM4OTcgNzM5MjEuMDM4M0UtNDY3NzcyNjc1IC0+IDUuOTMwMTk2MjZFLTQ2Nzc3MjY2NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMTQgcG93ZXIgODAyMjMuMzg5NyA3IC0+IDIuMTM4NDg5MTlFKzM0IEluZXhhY3QgUm91bmRlZAoreHJlbTAxNCByZW1haW5kZXIgODAyMjMuMzg5NyA3MzkyMS4wMzgzRS00Njc3NzI2NzUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwMTQgc3VidHJhY3QgODAyMjMuMzg5NyA3MzkyMS4wMzgzRS00Njc3NzI2NzUgLT4gODAyMjMuMzg5NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMTUgYWRkIC02NTQ2NDUuOTU0IC05LjEyNTM1NzUyIC0+IC02NTQ2NTUuMDc5IEluZXhhY3QgUm91bmRlZAoreGNvbTAxNSBjb21wYXJlIC02NTQ2NDUuOTU0IC05LjEyNTM1NzUyIC0+IC0xCit4ZGl2MDE1IGRpdmlkZSAtNjU0NjQ1Ljk1NCAtOS4xMjUzNTc1MiAtPiA3MTczOS4yMTE2IEluZXhhY3QgUm91bmRlZAoreGR2aTAxNSBkaXZpZGVpbnQgLTY1NDY0NS45NTQgLTkuMTI1MzU3NTIgLT4gNzE3MzkKK3htdWwwMTUgbXVsdGlwbHkgLTY1NDY0NS45NTQgLTkuMTI1MzU3NTIgLT4gNTk3Mzg3OC4zOCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMTUgcG93ZXIgLTY1NDY0NS45NTQgLTkgLT4gLTQuNTI4MzY2OTBFLTUzIEluZXhhY3QgUm91bmRlZAoreHJlbTAxNSByZW1haW5kZXIgLTY1NDY0NS45NTQgLTkuMTI1MzU3NTIgLT4gLTEuOTMwODcyNzIKK3hzdWIwMTUgc3VidHJhY3QgLTY1NDY0NS45NTQgLTkuMTI1MzU3NTIgLT4gLTY1NDYzNi44MjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMDE2IGFkZCA2My4xOTE3NzcyRS03MDYwMTQ2MzQgLTcuNTYyNTMyNTdFLTEzODU3OTIzNCAtPiAtNy41NjI1MzI1N0UtMTM4NTc5MjM0IEluZXhhY3QgUm91bmRlZAoreGNvbTAxNiBjb21wYXJlIDYzLjE5MTc3NzJFLTcwNjAxNDYzNCAtNy41NjI1MzI1N0UtMTM4NTc5MjM0IC0+IDEKK3hkaXYwMTYgZGl2aWRlIDYzLjE5MTc3NzJFLTcwNjAxNDYzNCAtNy41NjI1MzI1N0UtMTM4NTc5MjM0IC0+IC04LjM1NTkwMTQ5RS01Njc0MzU0MDAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDE2IGRpdmlkZWludCA2My4xOTE3NzcyRS03MDYwMTQ2MzQgLTcuNTYyNTMyNTdFLTEzODU3OTIzNCAtPiAtMAoreG11bDAxNiBtdWx0aXBseSA2My4xOTE3NzcyRS03MDYwMTQ2MzQgLTcuNTYyNTMyNTdFLTEzODU3OTIzNCAtPiAtNC43Nzg4OTg3M0UtODQ0NTkzODY2IEluZXhhY3QgUm91bmRlZAoreHBvdzAxNiBwb3dlciA2My4xOTE3NzcyRS03MDYwMTQ2MzQgLTggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMDE2IHJlbWFpbmRlciA2My4xOTE3NzcyRS03MDYwMTQ2MzQgLTcuNTYyNTMyNTdFLTEzODU3OTIzNCAtPiA2LjMxOTE3NzcyRS03MDYwMTQ2MzMKK3hzdWIwMTYgc3VidHJhY3QgNjMuMTkxNzc3MkUtNzA2MDE0NjM0IC03LjU2MjUzMjU3RS0xMzg1NzkyMzQgLT4gNy41NjI1MzI1N0UtMTM4NTc5MjM0IEluZXhhY3QgUm91bmRlZAoreGFkZDAxNyBhZGQgLTM5Njc0LjcxOTAgMjQ5MDYwNy43OCAtPiAyNDUwOTMzLjA2IEluZXhhY3QgUm91bmRlZAoreGNvbTAxNyBjb21wYXJlIC0zOTY3NC43MTkwIDI0OTA2MDcuNzggLT4gLTEKK3hkaXYwMTcgZGl2aWRlIC0zOTY3NC43MTkwIDI0OTA2MDcuNzggLT4gLTAuMDE1OTI5NzMzOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMTcgZGl2aWRlaW50IC0zOTY3NC43MTkwIDI0OTA2MDcuNzggLT4gLTAKK3htdWwwMTcgbXVsdGlwbHkgLTM5Njc0LjcxOTAgMjQ5MDYwNy43OCAtPiAtOS44ODE0MTYzOEUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MDE3IHBvd2VyIC0zOTY3NC43MTkwIDI0OTA2MDggLT4gMi41NTAzMjMyOUUrMTE0NTMwOTUgSW5leGFjdCBSb3VuZGVkCit4cmVtMDE3IHJlbWFpbmRlciAtMzk2NzQuNzE5MCAyNDkwNjA3Ljc4IC0+IC0zOTY3NC43MTkwCit4c3ViMDE3IHN1YnRyYWN0IC0zOTY3NC43MTkwIDI0OTA2MDcuNzggLT4gLTI1MzAyODIuNTAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDE4IGFkZCAtMzM2NC41OTczN0UtNjAwMzYzNjgxIDg5NjQ4Ny40NTEgLT4gODk2NDg3LjQ1MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMTggY29tcGFyZSAtMzM2NC41OTczN0UtNjAwMzYzNjgxIDg5NjQ4Ny40NTEgLT4gLTEKK3hkaXYwMTggZGl2aWRlIC0zMzY0LjU5NzM3RS02MDAzNjM2ODEgODk2NDg3LjQ1MSAtPiAtMy43NTMwODkyMEUtNjAwMzYzNjg0IEluZXhhY3QgUm91bmRlZAoreGR2aTAxOCBkaXZpZGVpbnQgLTMzNjQuNTk3MzdFLTYwMDM2MzY4MSA4OTY0ODcuNDUxIC0+IC0wCit4bXVsMDE4IG11bHRpcGx5IC0zMzY0LjU5NzM3RS02MDAzNjM2ODEgODk2NDg3LjQ1MSAtPiAtMy4wMTYzMTkzMkUtNjAwMzYzNjcyIEluZXhhY3QgUm91bmRlZAoreHBvdzAxOCBwb3dlciAtMzM2NC41OTczN0UtNjAwMzYzNjgxIDg5NjQ4NyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDE4IHJlbWFpbmRlciAtMzM2NC41OTczN0UtNjAwMzYzNjgxIDg5NjQ4Ny40NTEgLT4gLTMuMzY0NTk3MzdFLTYwMDM2MzY3OAoreHN1YjAxOCBzdWJ0cmFjdCAtMzM2NC41OTczN0UtNjAwMzYzNjgxIDg5NjQ4Ny40NTEgLT4gLTg5NjQ4Ny40NTEgSW5leGFjdCBSb3VuZGVkCit4YWRkMDE5IGFkZCAtNjQxMzguMDU3OCAzMTc1OTAxMS4zRSs2OTc0ODgzNDIgLT4gMy4xNzU5MDExM0UrNjk3NDg4MzQ5IEluZXhhY3QgUm91bmRlZAoreGNvbTAxOSBjb21wYXJlIC02NDEzOC4wNTc4IDMxNzU5MDExLjNFKzY5NzQ4ODM0MiAtPiAtMQoreGRpdjAxOSBkaXZpZGUgLTY0MTM4LjA1NzggMzE3NTkwMTEuM0UrNjk3NDg4MzQyIC0+IC0yLjAxOTUyMzEzRS02OTc0ODgzNDUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDE5IGRpdmlkZWludCAtNjQxMzguMDU3OCAzMTc1OTAxMS4zRSs2OTc0ODgzNDIgLT4gLTAKK3htdWwwMTkgbXVsdGlwbHkgLTY0MTM4LjA1NzggMzE3NTkwMTEuM0UrNjk3NDg4MzQyIC0+IC0yLjAzNjk2MTMwRSs2OTc0ODgzNTQgSW5leGFjdCBSb3VuZGVkCit4cG93MDE5IHBvd2VyIC02NDEzOC4wNTc4IDMgLT4gLTIuNjM4NDQxMTZFKzE0IEluZXhhY3QgUm91bmRlZAoreHJlbTAxOSByZW1haW5kZXIgLTY0MTM4LjA1NzggMzE3NTkwMTEuM0UrNjk3NDg4MzQyIC0+IC02NDEzOC4wNTc4Cit4c3ViMDE5IHN1YnRyYWN0IC02NDEzOC4wNTc4IDMxNzU5MDExLjNFKzY5NzQ4ODM0MiAtPiAtMy4xNzU5MDExM0UrNjk3NDg4MzQ5IEluZXhhY3QgUm91bmRlZAoreGFkZDAyMCBhZGQgNjEzOTkuODUyNyAtNjQzNDQ0ODQuNSAtPiAtNjQyODMwODQuNiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMjAgY29tcGFyZSA2MTM5OS44NTI3IC02NDM0NDQ4NC41IC0+IDEKK3hkaXYwMjAgZGl2aWRlIDYxMzk5Ljg1MjcgLTY0MzQ0NDg0LjUgLT4gLTAuMDAwOTU0MjM2NDU0IEluZXhhY3QgUm91bmRlZAoreGR2aTAyMCBkaXZpZGVpbnQgNjEzOTkuODUyNyAtNjQzNDQ0ODQuNSAtPiAtMAoreG11bDAyMCBtdWx0aXBseSA2MTM5OS44NTI3IC02NDM0NDQ4NC41IC0+IC0zLjk1MDc0MTg3RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMjAgcG93ZXIgNjEzOTkuODUyNyAtNjQzNDQ0ODUgLT4gMS4yNzM3ODg0MkUtMzA4MDkyMTYxIEluZXhhY3QgUm91bmRlZAoreHJlbTAyMCByZW1haW5kZXIgNjEzOTkuODUyNyAtNjQzNDQ0ODQuNSAtPiA2MTM5OS44NTI3Cit4c3ViMDIwIHN1YnRyYWN0IDYxMzk5Ljg1MjcgLTY0MzQ0NDg0LjUgLT4gNjQ0MDU4ODQuNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMjEgYWRkIC03MjI5NjAuMjA0IC0yNjE1NDU5OS44IC0+IC0yNjg3NzU2MC4wIEluZXhhY3QgUm91bmRlZAoreGNvbTAyMSBjb21wYXJlIC03MjI5NjAuMjA0IC0yNjE1NDU5OS44IC0+IDEKK3hkaXYwMjEgZGl2aWRlIC03MjI5NjAuMjA0IC0yNjE1NDU5OS44IC0+IDAuMDI3NjQxNzk5NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMjEgZGl2aWRlaW50IC03MjI5NjAuMjA0IC0yNjE1NDU5OS44IC0+IDAKK3htdWwwMjEgbXVsdGlwbHkgLTcyMjk2MC4yMDQgLTI2MTU0NTk5LjggLT4gMS44OTA4NzM0OEUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MDIxIHBvd2VyIC03MjI5NjAuMjA0IC0yNjE1NDYwMCAtPiA1LjM0MjM2MTM5RS0xNTMyNDI3OTQgSW5leGFjdCBSb3VuZGVkCit4cmVtMDIxIHJlbWFpbmRlciAtNzIyOTYwLjIwNCAtMjYxNTQ1OTkuOCAtPiAtNzIyOTYwLjIwNAoreHN1YjAyMSBzdWJ0cmFjdCAtNzIyOTYwLjIwNCAtMjYxNTQ1OTkuOCAtPiAyNTQzMTYzOS42IEluZXhhY3QgUm91bmRlZAoreGFkZDAyMiBhZGQgOS40NzEwOTk1OUUrMjMwNTY1MDkzIDczMzU0NzIzLjIgLT4gOS40NzEwOTk1OUUrMjMwNTY1MDkzIEluZXhhY3QgUm91bmRlZAoreGNvbTAyMiBjb21wYXJlIDkuNDcxMDk5NTlFKzIzMDU2NTA5MyA3MzM1NDcyMy4yIC0+IDEKK3hkaXYwMjIgZGl2aWRlIDkuNDcxMDk5NTlFKzIzMDU2NTA5MyA3MzM1NDcyMy4yIC0+IDEuMjkxMTM2OThFKzIzMDU2NTA4NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMjIgZGl2aWRlaW50IDkuNDcxMDk5NTlFKzIzMDU2NTA5MyA3MzM1NDcyMy4yIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDIyIG11bHRpcGx5IDkuNDcxMDk5NTlFKzIzMDU2NTA5MyA3MzM1NDcyMy4yIC0+IDYuOTQ3NDk4ODlFKzIzMDU2NTEwMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMjIgcG93ZXIgOS40NzEwOTk1OUUrMjMwNTY1MDkzIDczMzU0NzIzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTAyMiByZW1haW5kZXIgOS40NzEwOTk1OUUrMjMwNTY1MDkzIDczMzU0NzIzLjIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwMjIgc3VidHJhY3QgOS40NzEwOTk1OUUrMjMwNTY1MDkzIDczMzU0NzIzLjIgLT4gOS40NzEwOTk1OUUrMjMwNTY1MDkzIEluZXhhY3QgUm91bmRlZAoreGFkZDAyMyBhZGQgNDMuNzQ1NjI0NSA1NDc0NDE5NTYuIC0+IDU0NzQ0MjAwMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMjMgY29tcGFyZSA0My43NDU2MjQ1IDU0NzQ0MTk1Ni4gLT4gLTEKK3hkaXYwMjMgZGl2aWRlIDQzLjc0NTYyNDUgNTQ3NDQxOTU2LiAtPiA3Ljk5MDkxNTU3RS04IEluZXhhY3QgUm91bmRlZAoreGR2aTAyMyBkaXZpZGVpbnQgNDMuNzQ1NjI0NSA1NDc0NDE5NTYuIC0+IDAKK3htdWwwMjMgbXVsdGlwbHkgNDMuNzQ1NjI0NSA1NDc0NDE5NTYuIC0+IDIuMzk0ODE5MDJFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzAyMyBwb3dlciA0My43NDU2MjQ1IDU0NzQ0MTk1NiAtPiAyLjkxNzQyMzkxRSs4OTgzMTY0NTggSW5leGFjdCBSb3VuZGVkCit4cmVtMDIzIHJlbWFpbmRlciA0My43NDU2MjQ1IDU0NzQ0MTk1Ni4gLT4gNDMuNzQ1NjI0NQoreHN1YjAyMyBzdWJ0cmFjdCA0My43NDU2MjQ1IDU0NzQ0MTk1Ni4gLT4gLTU0NzQ0MTkxMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMjQgYWRkIC03MzE1MDU0MkUtMjQyMDE3MzkwIC04LjE1ODY5OTU0IC0+IC04LjE1ODY5OTU0IEluZXhhY3QgUm91bmRlZAoreGNvbTAyNCBjb21wYXJlIC03MzE1MDU0MkUtMjQyMDE3MzkwIC04LjE1ODY5OTU0IC0+IDEKK3hkaXYwMjQgZGl2aWRlIC03MzE1MDU0MkUtMjQyMDE3MzkwIC04LjE1ODY5OTU0IC0+IDguOTY1OTU2MTFFLTI0MjAxNzM4NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMjQgZGl2aWRlaW50IC03MzE1MDU0MkUtMjQyMDE3MzkwIC04LjE1ODY5OTU0IC0+IDAKK3htdWwwMjQgbXVsdGlwbHkgLTczMTUwNTQyRS0yNDIwMTczOTAgLTguMTU4Njk5NTQgLT4gNS45NjgxMzI5M0UtMjQyMDE3MzgyIEluZXhhY3QgUm91bmRlZAoreHBvdzAyNCBwb3dlciAtNzMxNTA1NDJFLTI0MjAxNzM5MCAtOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMjQgcmVtYWluZGVyIC03MzE1MDU0MkUtMjQyMDE3MzkwIC04LjE1ODY5OTU0IC0+IC03LjMxNTA1NDJFLTI0MjAxNzM4MworeHN1YjAyNCBzdWJ0cmFjdCAtNzMxNTA1NDJFLTI0MjAxNzM5MCAtOC4xNTg2OTk1NCAtPiA4LjE1ODY5OTU0IEluZXhhY3QgUm91bmRlZAoreGFkZDAyNSBhZGQgMjAxNS42MjEwOUUrMjk5ODk3NTk2IC0xMTc4ODkxNi4xIC0+IDIuMDE1NjIxMDlFKzI5OTg5NzU5OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMjUgY29tcGFyZSAyMDE1LjYyMTA5RSsyOTk4OTc1OTYgLTExNzg4OTE2LjEgLT4gMQoreGRpdjAyNSBkaXZpZGUgMjAxNS42MjEwOUUrMjk5ODk3NTk2IC0xMTc4ODkxNi4xIC0+IC0xLjcwOTc1OTQ3RSsyOTk4OTc1OTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDI1IGRpdmlkZWludCAyMDE1LjYyMTA5RSsyOTk4OTc1OTYgLTExNzg4OTE2LjEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwMjUgbXVsdGlwbHkgMjAxNS42MjEwOUUrMjk5ODk3NTk2IC0xMTc4ODkxNi4xIC0+IC0yLjM3NjE5ODc5RSsyOTk4OTc2MDYgSW5leGFjdCBSb3VuZGVkCit4cG93MDI1IHBvd2VyIDIwMTUuNjIxMDlFKzI5OTg5NzU5NiAtMTE3ODg5MTYgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDI1IHJlbWFpbmRlciAyMDE1LjYyMTA5RSsyOTk4OTc1OTYgLTExNzg4OTE2LjEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwMjUgc3VidHJhY3QgMjAxNS42MjEwOUUrMjk5ODk3NTk2IC0xMTc4ODkxNi4xIC0+IDIuMDE1NjIxMDlFKzI5OTg5NzU5OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMjYgYWRkIDI5LjQ5ODExNCAtMjY0ODY0NTEgLT4gLTI2NDg2NDIxLjUgSW5leGFjdCBSb3VuZGVkCit4Y29tMDI2IGNvbXBhcmUgMjkuNDk4MTE0IC0yNjQ4NjQ1MSAtPiAxCit4ZGl2MDI2IGRpdmlkZSAyOS40OTgxMTQgLTI2NDg2NDUxIC0+IC0wLjAwMDAwMTExMzcwNTgwIEluZXhhY3QgUm91bmRlZAoreGR2aTAyNiBkaXZpZGVpbnQgMjkuNDk4MTE0IC0yNjQ4NjQ1MSAtPiAtMAoreG11bDAyNiBtdWx0aXBseSAyOS40OTgxMTQgLTI2NDg2NDUxIC0+IC03ODEzMDAzNTEgSW5leGFjdCBSb3VuZGVkCit4cG93MDI2IHBvd2VyIDI5LjQ5ODExNCAtMjY0ODY0NTEgLT4gNC4yMjI1MjUxM0UtMzg5Mjk2MzQgSW5leGFjdCBSb3VuZGVkCit4cmVtMDI2IHJlbWFpbmRlciAyOS40OTgxMTQgLTI2NDg2NDUxIC0+IDI5LjQ5ODExNAoreHN1YjAyNiBzdWJ0cmFjdCAyOS40OTgxMTQgLTI2NDg2NDUxIC0+IDI2NDg2NDgwLjUgSW5leGFjdCBSb3VuZGVkCit4YWRkMDI3IGFkZCAyNDQzNzUwNDMuRSsxMzA4NDA4NzggLTkuNDQ1MjIwMjkgLT4gMi40NDM3NTA0M0UrMTMwODQwODg2IEluZXhhY3QgUm91bmRlZAoreGNvbTAyNyBjb21wYXJlIDI0NDM3NTA0My5FKzEzMDg0MDg3OCAtOS40NDUyMjAyOSAtPiAxCit4ZGl2MDI3IGRpdmlkZSAyNDQzNzUwNDMuRSsxMzA4NDA4NzggLTkuNDQ1MjIwMjkgLT4gLTIuNTg3Mjg3OTFFKzEzMDg0MDg4NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMjcgZGl2aWRlaW50IDI0NDM3NTA0My5FKzEzMDg0MDg3OCAtOS40NDUyMjAyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDAyNyBtdWx0aXBseSAyNDQzNzUwNDMuRSsxMzA4NDA4NzggLTkuNDQ1MjIwMjkgLT4gLTIuMzA4MTc2MTFFKzEzMDg0MDg4NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMjcgcG93ZXIgMjQ0Mzc1MDQzLkUrMTMwODQwODc4IC05IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTAyNyByZW1haW5kZXIgMjQ0Mzc1MDQzLkUrMTMwODQwODc4IC05LjQ0NTIyMDI5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDI3IHN1YnRyYWN0IDI0NDM3NTA0My5FKzEzMDg0MDg3OCAtOS40NDUyMjAyOSAtPiAyLjQ0Mzc1MDQzRSsxMzA4NDA4ODYgSW5leGFjdCBSb3VuZGVkCit4YWRkMDI4IGFkZCAtMzQ5Mzg4Ljc1OSAtMTk2MjE1Ljc3NiAtPiAtNTQ1NjA0LjUzNQoreGNvbTAyOCBjb21wYXJlIC0zNDkzODguNzU5IC0xOTYyMTUuNzc2IC0+IC0xCit4ZGl2MDI4IGRpdmlkZSAtMzQ5Mzg4Ljc1OSAtMTk2MjE1Ljc3NiAtPiAxLjc4MDYzNTQxIEluZXhhY3QgUm91bmRlZAoreGR2aTAyOCBkaXZpZGVpbnQgLTM0OTM4OC43NTkgLTE5NjIxNS43NzYgLT4gMQoreG11bDAyOCBtdWx0aXBseSAtMzQ5Mzg4Ljc1OSAtMTk2MjE1Ljc3NiAtPiA2Ljg1NTU1ODY1RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMjggcG93ZXIgLTM0OTM4OC43NTkgLTE5NjIxNiAtPiAxLjI0NTUxNzUyRS0xMDg3Njg2IEluZXhhY3QgUm91bmRlZAoreHJlbTAyOCByZW1haW5kZXIgLTM0OTM4OC43NTkgLTE5NjIxNS43NzYgLT4gLTE1MzE3Mi45ODMKK3hzdWIwMjggc3VidHJhY3QgLTM0OTM4OC43NTkgLTE5NjIxNS43NzYgLT4gLTE1MzE3Mi45ODMKK3hhZGQwMjkgYWRkIC03MDkwNTExMi40IC05MTM1Mzk2OC44IC0+IC0xNjIyNTkwODEgSW5leGFjdCBSb3VuZGVkCit4Y29tMDI5IGNvbXBhcmUgLTcwOTA1MTEyLjQgLTkxMzUzOTY4LjggLT4gMQoreGRpdjAyOSBkaXZpZGUgLTcwOTA1MTEyLjQgLTkxMzUzOTY4LjggLT4gMC43NzYxNTc5ODYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDI5IGRpdmlkZWludCAtNzA5MDUxMTIuNCAtOTEzNTM5NjguOCAtPiAwCit4bXVsMDI5IG11bHRpcGx5IC03MDkwNTExMi40IC05MTM1Mzk2OC44IC0+IDYuNDc3NDYzNDNFKzE1IEluZXhhY3QgUm91bmRlZAoreHBvdzAyOSBwb3dlciAtNzA5MDUxMTIuNCAtOTEzNTM5NjkgLT4gLTMuMDU5NDQ3NDFFLTcxNzE5MDU1NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMjkgcmVtYWluZGVyIC03MDkwNTExMi40IC05MTM1Mzk2OC44IC0+IC03MDkwNTExMi40Cit4c3ViMDI5IHN1YnRyYWN0IC03MDkwNTExMi40IC05MTM1Mzk2OC44IC0+IDIwNDQ4ODU2LjQKK3hhZGQwMzAgYWRkIC0yMjUwOTQuMjggLTg4Ljc3MjM1NDIgLT4gLTIyNTE4My4wNTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMDMwIGNvbXBhcmUgLTIyNTA5NC4yOCAtODguNzcyMzU0MiAtPiAtMQoreGRpdjAzMCBkaXZpZGUgLTIyNTA5NC4yOCAtODguNzcyMzU0MiAtPiAyNTM1LjYzNDkxIEluZXhhY3QgUm91bmRlZAoreGR2aTAzMCBkaXZpZGVpbnQgLTIyNTA5NC4yOCAtODguNzcyMzU0MiAtPiAyNTM1Cit4bXVsMDMwIG11bHRpcGx5IC0yMjUwOTQuMjggLTg4Ljc3MjM1NDIgLT4gMTk5ODIxNDkuMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMzAgcG93ZXIgLTIyNTA5NC4yOCAtODkgLT4gLTQuMzYwNzY5NjVFLTQ3NyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMzAgcmVtYWluZGVyIC0yMjUwOTQuMjggLTg4Ljc3MjM1NDIgLT4gLTU2LjM2MjEwMzAKK3hzdWIwMzAgc3VidHJhY3QgLTIyNTA5NC4yOCAtODguNzcyMzU0MiAtPiAtMjI1MDA1LjUwOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMzEgYWRkIDUwLjQ0NDIzNDAgODIuNzk1MjE2OUUrODgwMTIwNzU5IC0+IDguMjc5NTIxNjlFKzg4MDEyMDc2MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMzEgY29tcGFyZSA1MC40NDQyMzQwIDgyLjc5NTIxNjlFKzg4MDEyMDc1OSAtPiAtMQoreGRpdjAzMSBkaXZpZGUgNTAuNDQ0MjM0MCA4Mi43OTUyMTY5RSs4ODAxMjA3NTkgLT4gNi4wOTI2NTA3NUUtODgwMTIwNzYwIEluZXhhY3QgUm91bmRlZAoreGR2aTAzMSBkaXZpZGVpbnQgNTAuNDQ0MjM0MCA4Mi43OTUyMTY5RSs4ODAxMjA3NTkgLT4gMAoreG11bDAzMSBtdWx0aXBseSA1MC40NDQyMzQwIDgyLjc5NTIxNjlFKzg4MDEyMDc1OSAtPiA0LjE3NjU0MTMwRSs4ODAxMjA3NjIgSW5leGFjdCBSb3VuZGVkCit4cG93MDMxIHBvd2VyIDUwLjQ0NDIzNDAgOCAtPiA0LjE5MjY4NTE4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMzEgcmVtYWluZGVyIDUwLjQ0NDIzNDAgODIuNzk1MjE2OUUrODgwMTIwNzU5IC0+IDUwLjQ0NDIzNDAKK3hzdWIwMzEgc3VidHJhY3QgNTAuNDQ0MjM0MCA4Mi43OTUyMTY5RSs4ODAxMjA3NTkgLT4gLTguMjc5NTIxNjlFKzg4MDEyMDc2MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMzIgYWRkIC0zMjMxMS45MDM3IDguMzYzNzk0NDkgLT4gLTMyMzAzLjUzOTkgSW5leGFjdCBSb3VuZGVkCit4Y29tMDMyIGNvbXBhcmUgLTMyMzExLjkwMzcgOC4zNjM3OTQ0OSAtPiAtMQoreGRpdjAzMiBkaXZpZGUgLTMyMzExLjkwMzcgOC4zNjM3OTQ0OSAtPiAtMzg2My4zMDY3NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzIgZGl2aWRlaW50IC0zMjMxMS45MDM3IDguMzYzNzk0NDkgLT4gLTM4NjMKK3htdWwwMzIgbXVsdGlwbHkgLTMyMzExLjkwMzcgOC4zNjM3OTQ0OSAtPiAtMjcwMjUwLjEyMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMzIgcG93ZXIgLTMyMzExLjkwMzcgOCAtPiAxLjE4ODIyOTYwRSszNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMzIgcmVtYWluZGVyIC0zMjMxMS45MDM3IDguMzYzNzk0NDkgLT4gLTIuNTY1NTg1MTMKK3hzdWIwMzIgc3VidHJhY3QgLTMyMzExLjkwMzcgOC4zNjM3OTQ0OSAtPiAtMzIzMjAuMjY3NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMzMgYWRkIDYxNTM5NjE1Ni5FKzU0OTg5NTI5MSAtMjk1MzAyNDcuNCAtPiA2LjE1Mzk2MTU2RSs1NDk4OTUyOTkgSW5leGFjdCBSb3VuZGVkCit4Y29tMDMzIGNvbXBhcmUgNjE1Mzk2MTU2LkUrNTQ5ODk1MjkxIC0yOTUzMDI0Ny40IC0+IDEKK3hkaXYwMzMgZGl2aWRlIDYxNTM5NjE1Ni5FKzU0OTg5NTI5MSAtMjk1MzAyNDcuNCAtPiAtMi4wODM5NTE5MUUrNTQ5ODk1MjkyIEluZXhhY3QgUm91bmRlZAoreGR2aTAzMyBkaXZpZGVpbnQgNjE1Mzk2MTU2LkUrNTQ5ODk1MjkxIC0yOTUzMDI0Ny40IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDMzIG11bHRpcGx5IDYxNTM5NjE1Ni5FKzU0OTg5NTI5MSAtMjk1MzAyNDcuNCAtPiAtMS44MTcyODAwN0UrNTQ5ODk1MzA3IEluZXhhY3QgUm91bmRlZAoreHBvdzAzMyBwb3dlciA2MTUzOTYxNTYuRSs1NDk4OTUyOTEgLTI5NTMwMjQ3IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTAzMyByZW1haW5kZXIgNjE1Mzk2MTU2LkUrNTQ5ODk1MjkxIC0yOTUzMDI0Ny40IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDMzIHN1YnRyYWN0IDYxNTM5NjE1Ni5FKzU0OTg5NTI5MSAtMjk1MzAyNDcuNCAtPiA2LjE1Mzk2MTU2RSs1NDk4OTUyOTkgSW5leGFjdCBSb3VuZGVkCit4YWRkMDM0IGFkZCA1OTIuMTQyMTczRS00MTk5NDE0MTYgLTMuNDYwNzkxMDlFLTg0NDAxMTg0NSAtPiA1LjkyMTQyMTczRS00MTk5NDE0MTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDM0IGNvbXBhcmUgNTkyLjE0MjE3M0UtNDE5OTQxNDE2IC0zLjQ2MDc5MTA5RS04NDQwMTE4NDUgLT4gMQoreGRpdjAzNCBkaXZpZGUgNTkyLjE0MjE3M0UtNDE5OTQxNDE2IC0zLjQ2MDc5MTA5RS04NDQwMTE4NDUgLT4gLTEuNzExMDAyMzZFKzQyNDA3MDQzMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzQgZGl2aWRlaW50IDU5Mi4xNDIxNzNFLTQxOTk0MTQxNiAtMy40NjA3OTEwOUUtODQ0MDExODQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDM0IG11bHRpcGx5IDU5Mi4xNDIxNzNFLTQxOTk0MTQxNiAtMy40NjA3OTEwOUUtODQ0MDExODQ1IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hwb3cwMzQgcG93ZXIgNTkyLjE0MjE3M0UtNDE5OTQxNDE2IC0zIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTAzNCByZW1haW5kZXIgNTkyLjE0MjE3M0UtNDE5OTQxNDE2IC0zLjQ2MDc5MTA5RS04NDQwMTE4NDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwMzQgc3VidHJhY3QgNTkyLjE0MjE3M0UtNDE5OTQxNDE2IC0zLjQ2MDc5MTA5RS04NDQwMTE4NDUgLT4gNS45MjE0MjE3M0UtNDE5OTQxNDE0IEluZXhhY3QgUm91bmRlZAoreGFkZDAzNSBhZGQgODQ5LjUxNTk5M0UtODc4NDQ2NDczIC0xMDM5LjA4Nzc4IC0+IC0xMDM5LjA4Nzc4IEluZXhhY3QgUm91bmRlZAoreGNvbTAzNSBjb21wYXJlIDg0OS41MTU5OTNFLTg3ODQ0NjQ3MyAtMTAzOS4wODc3OCAtPiAxCit4ZGl2MDM1IGRpdmlkZSA4NDkuNTE1OTkzRS04Nzg0NDY0NzMgLTEwMzkuMDg3NzggLT4gLTguMTc1NTk0MTFFLTg3ODQ0NjQ3NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzUgZGl2aWRlaW50IDg0OS41MTU5OTNFLTg3ODQ0NjQ3MyAtMTAzOS4wODc3OCAtPiAtMAoreG11bDAzNSBtdWx0aXBseSA4NDkuNTE1OTkzRS04Nzg0NDY0NzMgLTEwMzkuMDg3NzggLT4gLTguODI3MjE2ODdFLTg3ODQ0NjQ2OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMzUgcG93ZXIgODQ5LjUxNTk5M0UtODc4NDQ2NDczIC0xMDM5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTAzNSByZW1haW5kZXIgODQ5LjUxNTk5M0UtODc4NDQ2NDczIC0xMDM5LjA4Nzc4IC0+IDguNDk1MTU5OTNFLTg3ODQ0NjQ3MQoreHN1YjAzNSBzdWJ0cmFjdCA4NDkuNTE1OTkzRS04Nzg0NDY0NzMgLTEwMzkuMDg3NzggLT4gMTAzOS4wODc3OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMzYgYWRkIDIxMzM2MTc4OSAtNTk5LjY0NDg1MSAtPiAyMTMzNjExODkgSW5leGFjdCBSb3VuZGVkCit4Y29tMDM2IGNvbXBhcmUgMjEzMzYxNzg5IC01OTkuNjQ0ODUxIC0+IDEKK3hkaXYwMzYgZGl2aWRlIDIxMzM2MTc4OSAtNTk5LjY0NDg1MSAtPiAtMzU1ODEzLjU5MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzYgZGl2aWRlaW50IDIxMzM2MTc4OSAtNTk5LjY0NDg1MSAtPiAtMzU1ODEzCit4bXVsMDM2IG11bHRpcGx5IDIxMzM2MTc4OSAtNTk5LjY0NDg1MSAtPiAtMS4yNzk0MTI5OEUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MDM2IHBvd2VyIDIxMzM2MTc4OSAtNjAwIC0+IDMuMzg4NTQ2ODRFLTQ5OTggSW5leGFjdCBSb3VuZGVkCit4cmVtMDM2IHJlbWFpbmRlciAyMTMzNjE3ODkgLTU5OS42NDQ4NTEgLT4gMzU1LjYzMTEzNworeHN1YjAzNiBzdWJ0cmFjdCAyMTMzNjE3ODkgLTU5OS42NDQ4NTEgLT4gMjEzMzYyMzg5IEluZXhhY3QgUm91bmRlZAoreGFkZDAzNyBhZGQgLTc5NTUyMjU1NS4gLTI5OC4wMzc3MDIgLT4gLTc5NTUyMjg1MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMzcgY29tcGFyZSAtNzk1NTIyNTU1LiAtMjk4LjAzNzcwMiAtPiAtMQoreGRpdjAzNyBkaXZpZGUgLTc5NTUyMjU1NS4gLTI5OC4wMzc3MDIgLT4gMjY2OTIwMS4wOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzcgZGl2aWRlaW50IC03OTU1MjI1NTUuIC0yOTguMDM3NzAyIC0+IDI2NjkyMDEKK3htdWwwMzcgbXVsdGlwbHkgLTc5NTUyMjU1NS4gLTI5OC4wMzc3MDIgLT4gMi4zNzA5NTcxNEUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MDM3IHBvd2VyIC03OTU1MjI1NTUuIC0yOTggLT4gNC4wMzIzMjcxMkUtMjY1MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMzcgcmVtYWluZGVyIC03OTU1MjI1NTUuIC0yOTguMDM3NzAyIC0+IC0yMi43ODM4OTgKK3hzdWIwMzcgc3VidHJhY3QgLTc5NTUyMjU1NS4gLTI5OC4wMzc3MDIgLT4gLTc5NTUyMjI1NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMzggYWRkIC01MDEyNjA2NTEuIC04NzYxODkzLjBFLTY4OTI4MTQ3OSAtPiAtNTAxMjYwNjUxIEluZXhhY3QgUm91bmRlZAoreGNvbTAzOCBjb21wYXJlIC01MDEyNjA2NTEuIC04NzYxODkzLjBFLTY4OTI4MTQ3OSAtPiAtMQoreGRpdjAzOCBkaXZpZGUgLTUwMTI2MDY1MS4gLTg3NjE4OTMuMEUtNjg5MjgxNDc5IC0+IDUuNzIwOTE3MjhFKzY4OTI4MTQ4MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzggZGl2aWRlaW50IC01MDEyNjA2NTEuIC04NzYxODkzLjBFLTY4OTI4MTQ3OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDAzOCBtdWx0aXBseSAtNTAxMjYwNjUxLiAtODc2MTg5My4wRS02ODkyODE0NzkgLT4gNC4zOTE5OTIxOUUtNjg5MjgxNDY0IEluZXhhY3QgUm91bmRlZAoreHBvdzAzOCBwb3dlciAtNTAxMjYwNjUxLiAtOSAtPiAtNS4wMDUyNjk2MUUtNzkgSW5leGFjdCBSb3VuZGVkCit4cmVtMDM4IHJlbWFpbmRlciAtNTAxMjYwNjUxLiAtODc2MTg5My4wRS02ODkyODE0NzkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwMzggc3VidHJhY3QgLTUwMTI2MDY1MS4gLTg3NjE4OTMuMEUtNjg5MjgxNDc5IC0+IC01MDEyNjA2NTEgSW5leGFjdCBSb3VuZGVkCit4YWRkMDM5IGFkZCAtMS43MDc4MTEwNUUtODQ4ODg5MDIzIDM2NTA0NzY5LjQgLT4gMzY1MDQ3NjkuNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMzkgY29tcGFyZSAtMS43MDc4MTEwNUUtODQ4ODg5MDIzIDM2NTA0NzY5LjQgLT4gLTEKK3hkaXYwMzkgZGl2aWRlIC0xLjcwNzgxMTA1RS04NDg4ODkwMjMgMzY1MDQ3NjkuNCAtPiAtNC42NzgzMjMwN0UtODQ4ODg5MDMxIEluZXhhY3QgUm91bmRlZAoreGR2aTAzOSBkaXZpZGVpbnQgLTEuNzA3ODExMDVFLTg0ODg4OTAyMyAzNjUwNDc2OS40IC0+IC0wCit4bXVsMDM5IG11bHRpcGx5IC0xLjcwNzgxMTA1RS04NDg4ODkwMjMgMzY1MDQ3NjkuNCAtPiAtNi4yMzQzMjQ4NkUtODQ4ODg5MDE2IEluZXhhY3QgUm91bmRlZAoreHBvdzAzOSBwb3dlciAtMS43MDc4MTEwNUUtODQ4ODg5MDIzIDM2NTA0NzY5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wMzkgcmVtYWluZGVyIC0xLjcwNzgxMTA1RS04NDg4ODkwMjMgMzY1MDQ3NjkuNCAtPiAtMS43MDc4MTEwNUUtODQ4ODg5MDIzCit4c3ViMDM5IHN1YnRyYWN0IC0xLjcwNzgxMTA1RS04NDg4ODkwMjMgMzY1MDQ3NjkuNCAtPiAtMzY1MDQ3NjkuNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNDAgYWRkIC01MjkwLjU0OTg0RS00OTA2MjY2NzYgODQyNTM1MjU0IC0+IDg0MjUzNTI1NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNDAgY29tcGFyZSAtNTI5MC41NDk4NEUtNDkwNjI2Njc2IDg0MjUzNTI1NCAtPiAtMQoreGRpdjA0MCBkaXZpZGUgLTUyOTAuNTQ5ODRFLTQ5MDYyNjY3NiA4NDI1MzUyNTQgLT4gLTYuMjc5MzIxNjJFLTQ5MDYyNjY4MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNDAgZGl2aWRlaW50IC01MjkwLjU0OTg0RS00OTA2MjY2NzYgODQyNTM1MjU0IC0+IC0wCit4bXVsMDQwIG11bHRpcGx5IC01MjkwLjU0OTg0RS00OTA2MjY2NzYgODQyNTM1MjU0IC0+IC00LjQ1NzQ3NDc1RS00OTA2MjY2NjQgSW5leGFjdCBSb3VuZGVkCit4cG93MDQwIHBvd2VyIC01MjkwLjU0OTg0RS00OTA2MjY2NzYgODQyNTM1MjU0IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA0MCByZW1haW5kZXIgLTUyOTAuNTQ5ODRFLTQ5MDYyNjY3NiA4NDI1MzUyNTQgLT4gLTUuMjkwNTQ5ODRFLTQ5MDYyNjY3MworeHN1YjA0MCBzdWJ0cmFjdCAtNTI5MC41NDk4NEUtNDkwNjI2Njc2IDg0MjUzNTI1NCAtPiAtODQyNTM1MjU0IEluZXhhY3QgUm91bmRlZAoreGFkZDA0MSBhZGQgNjA4LjMxODI1RSs1MzUyNjgxMjAgLTU5NjA5LjA5OTMgLT4gNi4wODMxODI1MEUrNTM1MjY4MTIyIEluZXhhY3QgUm91bmRlZAoreGNvbTA0MSBjb21wYXJlIDYwOC4zMTgyNUUrNTM1MjY4MTIwIC01OTYwOS4wOTkzIC0+IDEKK3hkaXYwNDEgZGl2aWRlIDYwOC4zMTgyNUUrNTM1MjY4MTIwIC01OTYwOS4wOTkzIC0+IC0xLjAyMDUxMjQwRSs1MzUyNjgxMTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDQxIGRpdmlkZWludCA2MDguMzE4MjVFKzUzNTI2ODEyMCAtNTk2MDkuMDk5MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA0MSBtdWx0aXBseSA2MDguMzE4MjVFKzUzNTI2ODEyMCAtNTk2MDkuMDk5MyAtPiAtMy42MjYxMzAzMEUrNTM1MjY4MTI3IEluZXhhY3QgUm91bmRlZAoreHBvdzA0MSBwb3dlciA2MDguMzE4MjVFKzUzNTI2ODEyMCAtNTk2MDkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDQxIHJlbWFpbmRlciA2MDguMzE4MjVFKzUzNTI2ODEyMCAtNTk2MDkuMDk5MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA0MSBzdWJ0cmFjdCA2MDguMzE4MjVFKzUzNTI2ODEyMCAtNTk2MDkuMDk5MyAtPiA2LjA4MzE4MjUwRSs1MzUyNjgxMjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMDQyIGFkZCAtNDYyOTAzNS4zMSAtMTY3Ljg4NDM5OCAtPiAtNDYyOTIwMy4xOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNDIgY29tcGFyZSAtNDYyOTAzNS4zMSAtMTY3Ljg4NDM5OCAtPiAtMQoreGRpdjA0MiBkaXZpZGUgLTQ2MjkwMzUuMzEgLTE2Ny44ODQzOTggLT4gMjc1NzIuNzU0NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNDIgZGl2aWRlaW50IC00NjI5MDM1LjMxIC0xNjcuODg0Mzk4IC0+IDI3NTcyCit4bXVsMDQyIG11bHRpcGx5IC00NjI5MDM1LjMxIC0xNjcuODg0Mzk4IC0+IDc3NzE0MjgwNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNDIgcG93ZXIgLTQ2MjkwMzUuMzEgLTE2OCAtPiAxLjU3NjE0ODMxRS0xMTIwIEluZXhhY3QgUm91bmRlZAoreHJlbTA0MiByZW1haW5kZXIgLTQ2MjkwMzUuMzEgLTE2Ny44ODQzOTggLT4gLTEyNi42ODgzNDQKK3hzdWIwNDIgc3VidHJhY3QgLTQ2MjkwMzUuMzEgLTE2Ny44ODQzOTggLT4gLTQ2Mjg4NjcuNDMgSW5leGFjdCBSb3VuZGVkCit4YWRkMDQzIGFkZCAtNjY1MjczNzguIC03MDY0MDAyNjguIC0+IC03NzI5Mjc2NDYKK3hjb20wNDMgY29tcGFyZSAtNjY1MjczNzguIC03MDY0MDAyNjguIC0+IDEKK3hkaXYwNDMgZGl2aWRlIC02NjUyNzM3OC4gLTcwNjQwMDI2OC4gLT4gMC4wOTQxNzgwMTkyIEluZXhhY3QgUm91bmRlZAoreGR2aTA0MyBkaXZpZGVpbnQgLTY2NTI3Mzc4LiAtNzA2NDAwMjY4LiAtPiAwCit4bXVsMDQzIG11bHRpcGx5IC02NjUyNzM3OC4gLTcwNjQwMDI2OC4gLT4gNC42OTk0OTU3NkUrMTYgSW5leGFjdCBSb3VuZGVkCit4cG93MDQzIHBvd2VyIC02NjUyNzM3OC4gLTcwNjQwMDI2OCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wNDMgcmVtYWluZGVyIC02NjUyNzM3OC4gLTcwNjQwMDI2OC4gLT4gLTY2NTI3Mzc4Cit4c3ViMDQzIHN1YnRyYWN0IC02NjUyNzM3OC4gLTcwNjQwMDI2OC4gLT4gNjM5ODcyODkwCit4YWRkMDQ0IGFkZCAtMjUxMDQ5Ny41MyAzNzI4ODI0NjIuIC0+IDM3MDM3MTk2NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNDQgY29tcGFyZSAtMjUxMDQ5Ny41MyAzNzI4ODI0NjIuIC0+IC0xCit4ZGl2MDQ0IGRpdmlkZSAtMjUxMDQ5Ny41MyAzNzI4ODI0NjIuIC0+IC0wLjAwNjczMjY3Nzk1IEluZXhhY3QgUm91bmRlZAoreGR2aTA0NCBkaXZpZGVpbnQgLTI1MTA0OTcuNTMgMzcyODgyNDYyLiAtPiAtMAoreG11bDA0NCBtdWx0aXBseSAtMjUxMDQ5Ny41MyAzNzI4ODI0NjIuIC0+IC05LjM2MTIwNTAwRSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNDQgcG93ZXIgLTI1MTA0OTcuNTMgMzcyODgyNDYyIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTA0NCByZW1haW5kZXIgLTI1MTA0OTcuNTMgMzcyODgyNDYyLiAtPiAtMjUxMDQ5Ny41MworeHN1YjA0NCBzdWJ0cmFjdCAtMjUxMDQ5Ny41MyAzNzI4ODI0NjIuIC0+IC0zNzUzOTI5NjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDQ1IGFkZCAxMzYuMjU1MzkzRSs1MzMyOTk2MSAtNTM0OTQuNzIwMUUrNzIwMDU4MDYwIC0+IC01LjM0OTQ3MjAxRSs3MjAwNTgwNjQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDQ1IGNvbXBhcmUgMTM2LjI1NTM5M0UrNTMzMjk5NjEgLTUzNDk0LjcyMDFFKzcyMDA1ODA2MCAtPiAxCit4ZGl2MDQ1IGRpdmlkZSAxMzYuMjU1MzkzRSs1MzMyOTk2MSAtNTM0OTQuNzIwMUUrNzIwMDU4MDYwIC0+IC0yLjU0NzA4MTE1RS02NjY3MjgxMDIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDQ1IGRpdmlkZWludCAxMzYuMjU1MzkzRSs1MzMyOTk2MSAtNTM0OTQuNzIwMUUrNzIwMDU4MDYwIC0+IC0wCit4bXVsMDQ1IG11bHRpcGx5IDEzNi4yNTUzOTNFKzUzMzI5OTYxIC01MzQ5NC43MjAxRSs3MjAwNTgwNjAgLT4gLTcuMjg4OTQ0MTFFKzc3MzM4ODAyNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNDUgcG93ZXIgMTM2LjI1NTM5M0UrNTMzMjk5NjEgLTUgLT4gMi4xMjkyNzM3M0UtMjY2NjQ5ODE2IEluZXhhY3QgUm91bmRlZAoreHJlbTA0NSByZW1haW5kZXIgMTM2LjI1NTM5M0UrNTMzMjk5NjEgLTUzNDk0LjcyMDFFKzcyMDA1ODA2MCAtPiAxLjM2MjU1MzkzRSs1MzMyOTk2MworeHN1YjA0NSBzdWJ0cmFjdCAxMzYuMjU1MzkzRSs1MzMyOTk2MSAtNTM0OTQuNzIwMUUrNzIwMDU4MDYwIC0+IDUuMzQ5NDcyMDFFKzcyMDA1ODA2NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNDYgYWRkIC04NzY2NzMuMTAwIC02MTUwLjkyMjY2IC0+IC04ODI4MjQuMDIzIEluZXhhY3QgUm91bmRlZAoreGNvbTA0NiBjb21wYXJlIC04NzY2NzMuMTAwIC02MTUwLjkyMjY2IC0+IC0xCit4ZGl2MDQ2IGRpdmlkZSAtODc2NjczLjEwMCAtNjE1MC45MjI2NiAtPiAxNDIuNTI3MDg5IEluZXhhY3QgUm91bmRlZAoreGR2aTA0NiBkaXZpZGVpbnQgLTg3NjY3My4xMDAgLTYxNTAuOTIyNjYgLT4gMTQyCit4bXVsMDQ2IG11bHRpcGx5IC04NzY2NzMuMTAwIC02MTUwLjkyMjY2IC0+IDUuMzkyMzQ4NDRFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93MDQ2IHBvd2VyIC04NzY2NzMuMTAwIC02MTUxIC0+IC00LjAzMTExNzc0RS0zNjU1NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNDYgcmVtYWluZGVyIC04NzY2NzMuMTAwIC02MTUwLjkyMjY2IC0+IC0zMjQyLjA4MjI4Cit4c3ViMDQ2IHN1YnRyYWN0IC04NzY2NzMuMTAwIC02MTUwLjkyMjY2IC0+IC04NzA1MjIuMTc3IEluZXhhY3QgUm91bmRlZAoreGFkZDA0NyBhZGQgLTIuNDUxNTE3OTdFKzkxMTMwNjExNyAyNzIzNTc3MSAtPiAtMi40NTE1MTc5N0UrOTExMzA2MTE3IEluZXhhY3QgUm91bmRlZAoreGNvbTA0NyBjb21wYXJlIC0yLjQ1MTUxNzk3RSs5MTEzMDYxMTcgMjcyMzU3NzEgLT4gLTEKK3hkaXYwNDcgZGl2aWRlIC0yLjQ1MTUxNzk3RSs5MTEzMDYxMTcgMjcyMzU3NzEgLT4gLTkuMDAxMDk2MjhFKzkxMTMwNjEwOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNDcgZGl2aWRlaW50IC0yLjQ1MTUxNzk3RSs5MTEzMDYxMTcgMjcyMzU3NzEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwNDcgbXVsdGlwbHkgLTIuNDUxNTE3OTdFKzkxMTMwNjExNyAyNzIzNTc3MSAtPiAtNi42NzY4OTgyMEUrOTExMzA2MTI0IEluZXhhY3QgUm91bmRlZAoreHBvdzA0NyBwb3dlciAtMi40NTE1MTc5N0UrOTExMzA2MTE3IDI3MjM1NzcxIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNDcgcmVtYWluZGVyIC0yLjQ1MTUxNzk3RSs5MTEzMDYxMTcgMjcyMzU3NzEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwNDcgc3VidHJhY3QgLTIuNDUxNTE3OTdFKzkxMTMwNjExNyAyNzIzNTc3MSAtPiAtMi40NTE1MTc5N0UrOTExMzA2MTE3IEluZXhhY3QgUm91bmRlZAoreGFkZDA0OCBhZGQgLTkuMTUxMTc1NTEgLTQuOTUxMDA3MzNFLTMxNDUxMTMyNiAtPiAtOS4xNTExNzU1MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNDggY29tcGFyZSAtOS4xNTExNzU1MSAtNC45NTEwMDczM0UtMzE0NTExMzI2IC0+IC0xCit4ZGl2MDQ4IGRpdmlkZSAtOS4xNTExNzU1MSAtNC45NTEwMDczM0UtMzE0NTExMzI2IC0+IDEuODQ4MzQ2MThFKzMxNDUxMTMyNiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNDggZGl2aWRlaW50IC05LjE1MTE3NTUxIC00Ljk1MTAwNzMzRS0zMTQ1MTEzMjYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwNDggbXVsdGlwbHkgLTkuMTUxMTc1NTEgLTQuOTUxMDA3MzNFLTMxNDUxMTMyNiAtPiA0LjUzMDc1MzcwRS0zMTQ1MTEzMjUgSW5leGFjdCBSb3VuZGVkCit4cG93MDQ4IHBvd2VyIC05LjE1MTE3NTUxIC01IC0+IC0wLjAwMDAxNTU4MTcyNjUgSW5leGFjdCBSb3VuZGVkCit4cmVtMDQ4IHJlbWFpbmRlciAtOS4xNTExNzU1MSAtNC45NTEwMDczM0UtMzE0NTExMzI2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDQ4IHN1YnRyYWN0IC05LjE1MTE3NTUxIC00Ljk1MTAwNzMzRS0zMTQ1MTEzMjYgLT4gLTkuMTUxMTc1NTEgSW5leGFjdCBSb3VuZGVkCit4YWRkMDQ5IGFkZCAzLjYxODkwNDUzRS05ODU2MDYxMjggMzA2NjQ0MTYuIC0+IDMwNjY0NDE2LjAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDQ5IGNvbXBhcmUgMy42MTg5MDQ1M0UtOTg1NjA2MTI4IDMwNjY0NDE2LiAtPiAtMQoreGRpdjA0OSBkaXZpZGUgMy42MTg5MDQ1M0UtOTg1NjA2MTI4IDMwNjY0NDE2LiAtPiAxLjE4MDE2NDE4RS05ODU2MDYxMzUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDQ5IGRpdmlkZWludCAzLjYxODkwNDUzRS05ODU2MDYxMjggMzA2NjQ0MTYuIC0+IDAKK3htdWwwNDkgbXVsdGlwbHkgMy42MTg5MDQ1M0UtOTg1NjA2MTI4IDMwNjY0NDE2LiAtPiAxLjEwOTcxNTk0RS05ODU2MDYxMjAgSW5leGFjdCBSb3VuZGVkCit4cG93MDQ5IHBvd2VyIDMuNjE4OTA0NTNFLTk4NTYwNjEyOCAzMDY2NDQxNiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wNDkgcmVtYWluZGVyIDMuNjE4OTA0NTNFLTk4NTYwNjEyOCAzMDY2NDQxNi4gLT4gMy42MTg5MDQ1M0UtOTg1NjA2MTI4Cit4c3ViMDQ5IHN1YnRyYWN0IDMuNjE4OTA0NTNFLTk4NTYwNjEyOCAzMDY2NDQxNi4gLT4gLTMwNjY0NDE2LjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDUwIGFkZCAtMjU3Njc0NjAyRSsyMTY3MjMzODIgLTcwODIwOTU5LjQgLT4gLTIuNTc2NzQ2MDJFKzIxNjcyMzM5MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNTAgY29tcGFyZSAtMjU3Njc0NjAyRSsyMTY3MjMzODIgLTcwODIwOTU5LjQgLT4gLTEKK3hkaXYwNTAgZGl2aWRlIC0yNTc2NzQ2MDJFKzIxNjcyMzM4MiAtNzA4MjA5NTkuNCAtPiAzLjYzODM5NDY4RSsyMTY3MjMzODIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDUwIGRpdmlkZWludCAtMjU3Njc0NjAyRSsyMTY3MjMzODIgLTcwODIwOTU5LjQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwNTAgbXVsdGlwbHkgLTI1NzY3NDYwMkUrMjE2NzIzMzgyIC03MDgyMDk1OS40IC0+IDEuODI0ODc2MjVFKzIxNjcyMzM5OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNTAgcG93ZXIgLTI1NzY3NDYwMkUrMjE2NzIzMzgyIC03MDgyMDk1OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDUwIHJlbWFpbmRlciAtMjU3Njc0NjAyRSsyMTY3MjMzODIgLTcwODIwOTU5LjQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwNTAgc3VidHJhY3QgLTI1NzY3NDYwMkUrMjE2NzIzMzgyIC03MDgyMDk1OS40IC0+IC0yLjU3Njc0NjAyRSsyMTY3MjMzOTAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDUxIGFkZCAyMTg2OTkuMjA2IDU1Njk0NDI0MS4gLT4gNTU3MTYyOTQwIEluZXhhY3QgUm91bmRlZAoreGNvbTA1MSBjb21wYXJlIDIxODY5OS4yMDYgNTU2OTQ0MjQxLiAtPiAtMQoreGRpdjA1MSBkaXZpZGUgMjE4Njk5LjIwNiA1NTY5NDQyNDEuIC0+IDAuMDAwMzkyNjc3MDIyIEluZXhhY3QgUm91bmRlZAoreGR2aTA1MSBkaXZpZGVpbnQgMjE4Njk5LjIwNiA1NTY5NDQyNDEuIC0+IDAKK3htdWwwNTEgbXVsdGlwbHkgMjE4Njk5LjIwNiA1NTY5NDQyNDEuIC0+IDEuMjE4MDMyNjNFKzE0IEluZXhhY3QgUm91bmRlZAoreHBvdzA1MSBwb3dlciAyMTg2OTkuMjA2IDU1Njk0NDI0MSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNTEgcmVtYWluZGVyIDIxODY5OS4yMDYgNTU2OTQ0MjQxLiAtPiAyMTg2OTkuMjA2Cit4c3ViMDUxIHN1YnRyYWN0IDIxODY5OS4yMDYgNTU2OTQ0MjQxLiAtPiAtNTU2NzI1NTQyIEluZXhhY3QgUm91bmRlZAoreGFkZDA1MiBhZGQgMTA2MjExNzE2LiAtMzQ1Njc5My43NCAtPiAxMDI3NTQ5MjIgSW5leGFjdCBSb3VuZGVkCit4Y29tMDUyIGNvbXBhcmUgMTA2MjExNzE2LiAtMzQ1Njc5My43NCAtPiAxCit4ZGl2MDUyIGRpdmlkZSAxMDYyMTE3MTYuIC0zNDU2NzkzLjc0IC0+IC0zMC43MjU1MDAwIEluZXhhY3QgUm91bmRlZAoreGR2aTA1MiBkaXZpZGVpbnQgMTA2MjExNzE2LiAtMzQ1Njc5My43NCAtPiAtMzAKK3htdWwwNTIgbXVsdGlwbHkgMTA2MjExNzE2LiAtMzQ1Njc5My43NCAtPiAtMy42NzE1MTk5NUUrMTQgSW5leGFjdCBSb3VuZGVkCit4cG93MDUyIHBvd2VyIDEwNjIxMTcxNi4gLTM0NTY3OTQgLT4gMi4wNzIyNTU4MUUtMjc3NDQ4MjUgSW5leGFjdCBSb3VuZGVkCit4cmVtMDUyIHJlbWFpbmRlciAxMDYyMTE3MTYuIC0zNDU2NzkzLjc0IC0+IDI1MDc5MDMuODAKK3hzdWIwNTIgc3VidHJhY3QgMTA2MjExNzE2LiAtMzQ1Njc5My43NCAtPiAxMDk2Njg1MTAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDUzIGFkZCAxLjI1MDE4MDc4IDM5OTg1Ni43NjNFLTcyNjgxNjc0MCAtPiAxLjI1MDE4MDc4IEluZXhhY3QgUm91bmRlZAoreGNvbTA1MyBjb21wYXJlIDEuMjUwMTgwNzggMzk5ODU2Ljc2M0UtNzI2ODE2NzQwIC0+IDEKK3hkaXYwNTMgZGl2aWRlIDEuMjUwMTgwNzggMzk5ODU2Ljc2M0UtNzI2ODE2NzQwIC0+IDMuMTI2NTcxNTVFKzcyNjgxNjczNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNTMgZGl2aWRlaW50IDEuMjUwMTgwNzggMzk5ODU2Ljc2M0UtNzI2ODE2NzQwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDUzIG11bHRpcGx5IDEuMjUwMTgwNzggMzk5ODU2Ljc2M0UtNzI2ODE2NzQwIC0+IDQuOTk4OTMyNDBFLTcyNjgxNjczNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNTMgcG93ZXIgMS4yNTAxODA3OCA0IC0+IDIuNDQyODE4OTAgSW5leGFjdCBSb3VuZGVkCit4cmVtMDUzIHJlbWFpbmRlciAxLjI1MDE4MDc4IDM5OTg1Ni43NjNFLTcyNjgxNjc0MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA1MyBzdWJ0cmFjdCAxLjI1MDE4MDc4IDM5OTg1Ni43NjNFLTcyNjgxNjc0MCAtPiAxLjI1MDE4MDc4IEluZXhhY3QgUm91bmRlZAoreGFkZDA1NCBhZGQgMzY0Ljk5ODExIC00NjIyMi4wNTA1IC0+IC00NTg1Ny4wNTI0IEluZXhhY3QgUm91bmRlZAoreGNvbTA1NCBjb21wYXJlIDM2NC45OTgxMSAtNDYyMjIuMDUwNSAtPiAxCit4ZGl2MDU0IGRpdmlkZSAzNjQuOTk4MTEgLTQ2MjIyLjA1MDUgLT4gLTAuMDA3ODk2NjIzMDYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDU0IGRpdmlkZWludCAzNjQuOTk4MTEgLTQ2MjIyLjA1MDUgLT4gLTAKK3htdWwwNTQgbXVsdGlwbHkgMzY0Ljk5ODExIC00NjIyMi4wNTA1IC0+IC0xNjg3MDk2MS4xIEluZXhhY3QgUm91bmRlZAoreHBvdzA1NCBwb3dlciAzNjQuOTk4MTEgLTQ2MjIyIC0+IDYuMzU1NzA4NTZFLTExODQzNSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNTQgcmVtYWluZGVyIDM2NC45OTgxMSAtNDYyMjIuMDUwNSAtPiAzNjQuOTk4MTEKK3hzdWIwNTQgc3VidHJhY3QgMzY0Ljk5ODExIC00NjIyMi4wNTA1IC0+IDQ2NTg3LjA0ODYgSW5leGFjdCBSb3VuZGVkCit4YWRkMDU1IGFkZCAtMzkyMjE3NTc2LiAtOTU4MzY0MDk2IC0+IC0xLjM1MDU4MTY3RSs5IEluZXhhY3QgUm91bmRlZAoreGNvbTA1NSBjb21wYXJlIC0zOTIyMTc1NzYuIC05NTgzNjQwOTYgLT4gMQoreGRpdjA1NSBkaXZpZGUgLTM5MjIxNzU3Ni4gLTk1ODM2NDA5NiAtPiAwLjQwOTI1NzM3NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNTUgZGl2aWRlaW50IC0zOTIyMTc1NzYuIC05NTgzNjQwOTYgLT4gMAoreG11bDA1NSBtdWx0aXBseSAtMzkyMjE3NTc2LiAtOTU4MzY0MDk2IC0+IDMuNzU4ODcyNDNFKzE3IEluZXhhY3QgUm91bmRlZAoreHBvdzA1NSBwb3dlciAtMzkyMjE3NTc2LiAtOTU4MzY0MDk2IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA1NSByZW1haW5kZXIgLTM5MjIxNzU3Ni4gLTk1ODM2NDA5NiAtPiAtMzkyMjE3NTc2Cit4c3ViMDU1IHN1YnRyYWN0IC0zOTIyMTc1NzYuIC05NTgzNjQwOTYgLT4gNTY2MTQ2NTIwCit4YWRkMDU2IGFkZCAxNjk2MDEyODUgNzE0NTI2LjYzOSAtPiAxNzAzMTU4MTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMDU2IGNvbXBhcmUgMTY5NjAxMjg1IDcxNDUyNi42MzkgLT4gMQoreGRpdjA1NiBkaXZpZGUgMTY5NjAxMjg1IDcxNDUyNi42MzkgLT4gMjM3LjM2MTczOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNTYgZGl2aWRlaW50IDE2OTYwMTI4NSA3MTQ1MjYuNjM5IC0+IDIzNworeG11bDA1NiBtdWx0aXBseSAxNjk2MDEyODUgNzE0NTI2LjYzOSAtPiAxLjIxMTg0NjM2RSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNTYgcG93ZXIgMTY5NjAxMjg1IDcxNDUyNyAtPiAyLjA2MDUyNDQ0RSs1ODgwMTQ5IEluZXhhY3QgUm91bmRlZAoreHJlbTA1NiByZW1haW5kZXIgMTY5NjAxMjg1IDcxNDUyNi42MzkgLT4gMjU4NDcxLjU1NworeHN1YjA1NiBzdWJ0cmFjdCAxNjk2MDEyODUgNzE0NTI2LjYzOSAtPiAxNjg4ODY3NTggSW5leGFjdCBSb3VuZGVkCit4YWRkMDU3IGFkZCAtNjc0LjA5NDU1MkUrNTg2OTQ0MzE5IDYzNTQuMjY2OEUrNTg5NjU3MjY2IC0+IDYuMzU0MjY2ODBFKzU4OTY1NzI2OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNTcgY29tcGFyZSAtNjc0LjA5NDU1MkUrNTg2OTQ0MzE5IDYzNTQuMjY2OEUrNTg5NjU3MjY2IC0+IC0xCit4ZGl2MDU3IGRpdmlkZSAtNjc0LjA5NDU1MkUrNTg2OTQ0MzE5IDYzNTQuMjY2OEUrNTg5NjU3MjY2IC0+IC0xLjA2MDg1MzQwRS0yNzEyOTQ4IEluZXhhY3QgUm91bmRlZAoreGR2aTA1NyBkaXZpZGVpbnQgLTY3NC4wOTQ1NTJFKzU4Njk0NDMxOSA2MzU0LjI2NjhFKzU4OTY1NzI2NiAtPiAtMAoreG11bDA1NyBtdWx0aXBseSAtNjc0LjA5NDU1MkUrNTg2OTQ0MzE5IDYzNTQuMjY2OEUrNTg5NjU3MjY2IC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hwb3cwNTcgcG93ZXIgLTY3NC4wOTQ1NTJFKzU4Njk0NDMxOSA2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTA1NyByZW1haW5kZXIgLTY3NC4wOTQ1NTJFKzU4Njk0NDMxOSA2MzU0LjI2NjhFKzU4OTY1NzI2NiAtPiAtNi43NDA5NDU1MkUrNTg2OTQ0MzIxCit4c3ViMDU3IHN1YnRyYWN0IC02NzQuMDk0NTUyRSs1ODY5NDQzMTkgNjM1NC4yNjY4RSs1ODk2NTcyNjYgLT4gLTYuMzU0MjY2ODBFKzU4OTY1NzI2OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNTggYWRkIDE1MTc5NTE2M0UtMzcxNzI3MTgyIC00ODguMDk3ODhFLTczODg1MjI0NSAtPiAxLjUxNzk1MTYzRS0zNzE3MjcxNzQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDU4IGNvbXBhcmUgMTUxNzk1MTYzRS0zNzE3MjcxODIgLTQ4OC4wOTc4OEUtNzM4ODUyMjQ1IC0+IDEKK3hkaXYwNTggZGl2aWRlIDE1MTc5NTE2M0UtMzcxNzI3MTgyIC00ODguMDk3ODhFLTczODg1MjI0NSAtPiAtMy4xMDk5MzI4NUUrMzY3MTI1MDY4IEluZXhhY3QgUm91bmRlZAoreGR2aTA1OCBkaXZpZGVpbnQgMTUxNzk1MTYzRS0zNzE3MjcxODIgLTQ4OC4wOTc4OEUtNzM4ODUyMjQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDU4IG11bHRpcGx5IDE1MTc5NTE2M0UtMzcxNzI3MTgyIC00ODguMDk3ODhFLTczODg1MjI0NSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cG93MDU4IHBvd2VyIDE1MTc5NTE2M0UtMzcxNzI3MTgyIC01IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTA1OCByZW1haW5kZXIgMTUxNzk1MTYzRS0zNzE3MjcxODIgLTQ4OC4wOTc4OEUtNzM4ODUyMjQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDU4IHN1YnRyYWN0IDE1MTc5NTE2M0UtMzcxNzI3MTgyIC00ODguMDk3ODhFLTczODg1MjI0NSAtPiAxLjUxNzk1MTYzRS0zNzE3MjcxNzQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDU5IGFkZCAtNzQ2LjI5MzM4NiA5Mjc3NDkuNjQ3IC0+IDkyNzAwMy4zNTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDU5IGNvbXBhcmUgLTc0Ni4yOTMzODYgOTI3NzQ5LjY0NyAtPiAtMQoreGRpdjA1OSBkaXZpZGUgLTc0Ni4yOTMzODYgOTI3NzQ5LjY0NyAtPiAtMC4wMDA4MDQ0MTI0NzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDU5IGRpdmlkZWludCAtNzQ2LjI5MzM4NiA5Mjc3NDkuNjQ3IC0+IC0wCit4bXVsMDU5IG11bHRpcGx5IC03NDYuMjkzMzg2IDkyNzc0OS42NDcgLT4gLTY5MjM3MzQyNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNTkgcG93ZXIgLTc0Ni4yOTMzODYgOTI3NzUwIC0+IDcuNDkyNzg3NDFFKzI2NjUzNDEgSW5leGFjdCBSb3VuZGVkCit4cmVtMDU5IHJlbWFpbmRlciAtNzQ2LjI5MzM4NiA5Mjc3NDkuNjQ3IC0+IC03NDYuMjkzMzg2Cit4c3ViMDU5IHN1YnRyYWN0IC03NDYuMjkzMzg2IDkyNzc0OS42NDcgLT4gLTkyODQ5NS45NDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDYwIGFkZCA4ODg5NDY0NzFFKzI0MTMzMTU5MiAtMjM1NzM5LjU5NSAtPiA4Ljg4OTQ2NDcxRSsyNDEzMzE2MDAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDYwIGNvbXBhcmUgODg4OTQ2NDcxRSsyNDEzMzE1OTIgLTIzNTczOS41OTUgLT4gMQoreGRpdjA2MCBkaXZpZGUgODg4OTQ2NDcxRSsyNDEzMzE1OTIgLTIzNTczOS41OTUgLT4gLTMuNzcwODgzMTdFKzI0MTMzMTU5NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNjAgZGl2aWRlaW50IDg4ODk0NjQ3MUUrMjQxMzMxNTkyIC0yMzU3MzkuNTk1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDYwIG11bHRpcGx5IDg4ODk0NjQ3MUUrMjQxMzMxNTkyIC0yMzU3MzkuNTk1IC0+IC0yLjA5NTU5ODgxRSsyNDEzMzE2MDYgSW5leGFjdCBSb3VuZGVkCit4cG93MDYwIHBvd2VyIDg4ODk0NjQ3MUUrMjQxMzMxNTkyIC0yMzU3NDAgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDYwIHJlbWFpbmRlciA4ODg5NDY0NzFFKzI0MTMzMTU5MiAtMjM1NzM5LjU5NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA2MCBzdWJ0cmFjdCA4ODg5NDY0NzFFKzI0MTMzMTU5MiAtMjM1NzM5LjU5NSAtPiA4Ljg4OTQ2NDcxRSsyNDEzMzE2MDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDYxIGFkZCA2LjY0Mzc3MjQ5IDc5MTYxLjEwNzBFKzYxOTQ1Mzc3NiAtPiA3LjkxNjExMDcwRSs2MTk0NTM3ODAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDYxIGNvbXBhcmUgNi42NDM3NzI0OSA3OTE2MS4xMDcwRSs2MTk0NTM3NzYgLT4gLTEKK3hkaXYwNjEgZGl2aWRlIDYuNjQzNzcyNDkgNzkxNjEuMTA3MEUrNjE5NDUzNzc2IC0+IDguMzkyNzIzMDdFLTYxOTQ1Mzc4MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNjEgZGl2aWRlaW50IDYuNjQzNzcyNDkgNzkxNjEuMTA3MEUrNjE5NDUzNzc2IC0+IDAKK3htdWwwNjEgbXVsdGlwbHkgNi42NDM3NzI0OSA3OTE2MS4xMDcwRSs2MTk0NTM3NzYgLT4gNS4yNTkyODM4NUUrNjE5NDUzNzgxIEluZXhhY3QgUm91bmRlZAoreHBvdzA2MSBwb3dlciA2LjY0Mzc3MjQ5IDggLT4gMzc5NTkyOC40NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNjEgcmVtYWluZGVyIDYuNjQzNzcyNDkgNzkxNjEuMTA3MEUrNjE5NDUzNzc2IC0+IDYuNjQzNzcyNDkKK3hzdWIwNjEgc3VidHJhY3QgNi42NDM3NzI0OSA3OTE2MS4xMDcwRSs2MTk0NTM3NzYgLT4gLTcuOTE2MTEwNzBFKzYxOTQ1Mzc4MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNjIgYWRkIDMxNDYuNjY1NzFFLTMxMzM3MzM2NiA4OC41MjgyMDEwIC0+IDg4LjUyODIwMTAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDYyIGNvbXBhcmUgMzE0Ni42NjU3MUUtMzEzMzczMzY2IDg4LjUyODIwMTAgLT4gLTEKK3hkaXYwNjIgZGl2aWRlIDMxNDYuNjY1NzFFLTMxMzM3MzM2NiA4OC41MjgyMDEwIC0+IDMuNTU0NDIxODRFLTMxMzM3MzM2NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNjIgZGl2aWRlaW50IDMxNDYuNjY1NzFFLTMxMzM3MzM2NiA4OC41MjgyMDEwIC0+IDAKK3htdWwwNjIgbXVsdGlwbHkgMzE0Ni42NjU3MUUtMzEzMzczMzY2IDg4LjUyODIwMTAgLT4gMi43ODU2ODY1NEUtMzEzMzczMzYxIEluZXhhY3QgUm91bmRlZAoreHBvdzA2MiBwb3dlciAzMTQ2LjY2NTcxRS0zMTMzNzMzNjYgODkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDYyIHJlbWFpbmRlciAzMTQ2LjY2NTcxRS0zMTMzNzMzNjYgODguNTI4MjAxMCAtPiAzLjE0NjY2NTcxRS0zMTMzNzMzNjMKK3hzdWIwNjIgc3VidHJhY3QgMzE0Ni42NjU3MUUtMzEzMzczMzY2IDg4LjUyODIwMTAgLT4gLTg4LjUyODIwMTAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDYzIGFkZCA2LjQ0NjkzMDk3IC04NzE5NS44NzExIC0+IC04NzE4OS40MjQyIEluZXhhY3QgUm91bmRlZAoreGNvbTA2MyBjb21wYXJlIDYuNDQ2OTMwOTcgLTg3MTk1Ljg3MTEgLT4gMQoreGRpdjA2MyBkaXZpZGUgNi40NDY5MzA5NyAtODcxOTUuODcxMSAtPiAtMC4wMDAwNzM5MzYxOTU1IEluZXhhY3QgUm91bmRlZAoreGR2aTA2MyBkaXZpZGVpbnQgNi40NDY5MzA5NyAtODcxOTUuODcxMSAtPiAtMAoreG11bDA2MyBtdWx0aXBseSA2LjQ0NjkzMDk3IC04NzE5NS44NzExIC0+IC01NjIxNDUuNzYyIEluZXhhY3QgUm91bmRlZAoreHBvdzA2MyBwb3dlciA2LjQ0NjkzMDk3IC04NzE5NiAtPiA0LjUwODgxNzMwRS03MDU3MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNjMgcmVtYWluZGVyIDYuNDQ2OTMwOTcgLTg3MTk1Ljg3MTEgLT4gNi40NDY5MzA5NworeHN1YjA2MyBzdWJ0cmFjdCA2LjQ0NjkzMDk3IC04NzE5NS44NzExIC0+IDg3MjAyLjMxODAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDY0IGFkZCAtMjExMzEzMi41NkUrNTc3OTU3ODQwIDk4MTEyNTgyMSAtPiAtMi4xMTMxMzI1NkUrNTc3OTU3ODQ2IEluZXhhY3QgUm91bmRlZAoreGNvbTA2NCBjb21wYXJlIC0yMTEzMTMyLjU2RSs1Nzc5NTc4NDAgOTgxMTI1ODIxIC0+IC0xCit4ZGl2MDY0IGRpdmlkZSAtMjExMzEzMi41NkUrNTc3OTU3ODQwIDk4MTEyNTgyMSAtPiAtMi4xNTM3ODM0NUUrNTc3OTU3ODM3IEluZXhhY3QgUm91bmRlZAoreGR2aTA2NCBkaXZpZGVpbnQgLTIxMTMxMzIuNTZFKzU3Nzk1Nzg0MCA5ODExMjU4MjEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwNjQgbXVsdGlwbHkgLTIxMTMxMzIuNTZFKzU3Nzk1Nzg0MCA5ODExMjU4MjEgLT4gLTIuMDczMjQ4OTJFKzU3Nzk1Nzg1NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNjQgcG93ZXIgLTIxMTMxMzIuNTZFKzU3Nzk1Nzg0MCA5ODExMjU4MjEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTA2NCByZW1haW5kZXIgLTIxMTMxMzIuNTZFKzU3Nzk1Nzg0MCA5ODExMjU4MjEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwNjQgc3VidHJhY3QgLTIxMTMxMzIuNTZFKzU3Nzk1Nzg0MCA5ODExMjU4MjEgLT4gLTIuMTEzMTMyNTZFKzU3Nzk1Nzg0NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNjUgYWRkIC03NzAxLjQyODE0IDcyNjY3LjUxODEgLT4gNjQ5NjYuMDkwMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNjUgY29tcGFyZSAtNzcwMS40MjgxNCA3MjY2Ny41MTgxIC0+IC0xCit4ZGl2MDY1IGRpdmlkZSAtNzcwMS40MjgxNCA3MjY2Ny41MTgxIC0+IC0wLjEwNTk4MTcxNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNjUgZGl2aWRlaW50IC03NzAxLjQyODE0IDcyNjY3LjUxODEgLT4gLTAKK3htdWwwNjUgbXVsdGlwbHkgLTc3MDEuNDI4MTQgNzI2NjcuNTE4MSAtPiAtNTU5NjQzNjY5IEluZXhhY3QgUm91bmRlZAoreHBvdzA2NSBwb3dlciAtNzcwMS40MjgxNCA3MjY2OCAtPiAyLjI5NTQzODM3RSsyODI0MjkgSW5leGFjdCBSb3VuZGVkCit4cmVtMDY1IHJlbWFpbmRlciAtNzcwMS40MjgxNCA3MjY2Ny41MTgxIC0+IC03NzAxLjQyODE0Cit4c3ViMDY1IHN1YnRyYWN0IC03NzAxLjQyODE0IDcyNjY3LjUxODEgLT4gLTgwMzY4Ljk0NjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMDY2IGFkZCAtODUxLjc1NDc4OSAtNTgyNjU5LjE0OSAtPiAtNTgzNTEwLjkwNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNjYgY29tcGFyZSAtODUxLjc1NDc4OSAtNTgyNjU5LjE0OSAtPiAxCit4ZGl2MDY2IGRpdmlkZSAtODUxLjc1NDc4OSAtNTgyNjU5LjE0OSAtPiAwLjAwMTQ2MTg0MDU4IEluZXhhY3QgUm91bmRlZAoreGR2aTA2NiBkaXZpZGVpbnQgLTg1MS43NTQ3ODkgLTU4MjY1OS4xNDkgLT4gMAoreG11bDA2NiBtdWx0aXBseSAtODUxLjc1NDc4OSAtNTgyNjU5LjE0OSAtPiA0OTYyODI3MjEgSW5leGFjdCBSb3VuZGVkCit4cG93MDY2IHBvd2VyIC04NTEuNzU0Nzg5IC01ODI2NTkgLT4gLTYuODM1MzI1OTNFLTE3MDczNzUgSW5leGFjdCBSb3VuZGVkCit4cmVtMDY2IHJlbWFpbmRlciAtODUxLjc1NDc4OSAtNTgyNjU5LjE0OSAtPiAtODUxLjc1NDc4OQoreHN1YjA2NiBzdWJ0cmFjdCAtODUxLjc1NDc4OSAtNTgyNjU5LjE0OSAtPiA1ODE4MDcuMzk0IEluZXhhY3QgUm91bmRlZAoreGFkZDA2NyBhZGQgLTUuMDE5OTI5NDMgNzg1Mi4xNjUzMSAtPiA3ODQ3LjE0NTM4IEluZXhhY3QgUm91bmRlZAoreGNvbTA2NyBjb21wYXJlIC01LjAxOTkyOTQzIDc4NTIuMTY1MzEgLT4gLTEKK3hkaXYwNjcgZGl2aWRlIC01LjAxOTkyOTQzIDc4NTIuMTY1MzEgLT4gLTAuMDAwNjM5MzA1MTEzIEluZXhhY3QgUm91bmRlZAoreGR2aTA2NyBkaXZpZGVpbnQgLTUuMDE5OTI5NDMgNzg1Mi4xNjUzMSAtPiAtMAoreG11bDA2NyBtdWx0aXBseSAtNS4wMTk5Mjk0MyA3ODUyLjE2NTMxIC0+IC0zOTQxNy4zMTU3IEluZXhhY3QgUm91bmRlZAoreHBvdzA2NyBwb3dlciAtNS4wMTk5Mjk0MyA3ODUyIC0+IDcuNTQ0ODE0NDhFKzU1MDEgSW5leGFjdCBSb3VuZGVkCit4cmVtMDY3IHJlbWFpbmRlciAtNS4wMTk5Mjk0MyA3ODUyLjE2NTMxIC0+IC01LjAxOTkyOTQzCit4c3ViMDY3IHN1YnRyYWN0IC01LjAxOTkyOTQzIDc4NTIuMTY1MzEgLT4gLTc4NTcuMTg1MjQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDY4IGFkZCAtMTIzOTMyNTcuMiA3NjgwMzY4OUUrOTQ5MTI1NzcwIC0+IDcuNjgwMzY4OTBFKzk0OTEyNTc3NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNjggY29tcGFyZSAtMTIzOTMyNTcuMiA3NjgwMzY4OUUrOTQ5MTI1NzcwIC0+IC0xCit4ZGl2MDY4IGRpdmlkZSAtMTIzOTMyNTcuMiA3NjgwMzY4OUUrOTQ5MTI1NzcwIC0+IC0xLjYxMzYyNzg2RS05NDkxMjU3NzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDY4IGRpdmlkZWludCAtMTIzOTMyNTcuMiA3NjgwMzY4OUUrOTQ5MTI1NzcwIC0+IC0wCit4bXVsMDY4IG11bHRpcGx5IC0xMjM5MzI1Ny4yIDc2ODAzNjg5RSs5NDkxMjU3NzAgLT4gLTkuNTE4NDc4NzJFKzk0OTEyNTc4NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNjggcG93ZXIgLTEyMzkzMjU3LjIgOCAtPiA1LjU2NTIzNzQ5RSs1NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNjggcmVtYWluZGVyIC0xMjM5MzI1Ny4yIDc2ODAzNjg5RSs5NDkxMjU3NzAgLT4gLTEyMzkzMjU3LjIKK3hzdWIwNjggc3VidHJhY3QgLTEyMzkzMjU3LjIgNzY4MDM2ODlFKzk0OTEyNTc3MCAtPiAtNy42ODAzNjg5MEUrOTQ5MTI1Nzc3IEluZXhhY3QgUm91bmRlZAoreGFkZDA2OSBhZGQgLTc1NDc3MTYzNC5FKzcxNjU1NTAyNiAtMjkyMzM2LjMxMSAtPiAtNy41NDc3MTYzNEUrNzE2NTU1MDM0IEluZXhhY3QgUm91bmRlZAoreGNvbTA2OSBjb21wYXJlIC03NTQ3NzE2MzQuRSs3MTY1NTUwMjYgLTI5MjMzNi4zMTEgLT4gLTEKK3hkaXYwNjkgZGl2aWRlIC03NTQ3NzE2MzQuRSs3MTY1NTUwMjYgLTI5MjMzNi4zMTEgLT4gMi41ODE4NjA3MEUrNzE2NTU1MDI5IEluZXhhY3QgUm91bmRlZAoreGR2aTA2OSBkaXZpZGVpbnQgLTc1NDc3MTYzNC5FKzcxNjU1NTAyNiAtMjkyMzM2LjMxMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA2OSBtdWx0aXBseSAtNzU0NzcxNjM0LkUrNzE2NTU1MDI2IC0yOTIzMzYuMzExIC0+IDIuMjA2NDcxNTVFKzcxNjU1NTA0MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNjkgcG93ZXIgLTc1NDc3MTYzNC5FKzcxNjU1NTAyNiAtMjkyMzM2IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA2OSByZW1haW5kZXIgLTc1NDc3MTYzNC5FKzcxNjU1NTAyNiAtMjkyMzM2LjMxMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA2OSBzdWJ0cmFjdCAtNzU0NzcxNjM0LkUrNzE2NTU1MDI2IC0yOTIzMzYuMzExIC0+IC03LjU0NzcxNjM0RSs3MTY1NTUwMzQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDcwIGFkZCAtOTE1MDA2LjE3MUUrNjE0NTQ4NjUyIC0zMTQwODY5NjUuIC0+IC05LjE1MDA2MTcxRSs2MTQ1NDg2NTcgSW5leGFjdCBSb3VuZGVkCit4Y29tMDcwIGNvbXBhcmUgLTkxNTAwNi4xNzFFKzYxNDU0ODY1MiAtMzE0MDg2OTY1LiAtPiAtMQoreGRpdjA3MCBkaXZpZGUgLTkxNTAwNi4xNzFFKzYxNDU0ODY1MiAtMzE0MDg2OTY1LiAtPiAyLjkxMzIyNTU1RSs2MTQ1NDg2NDkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDcwIGRpdmlkZWludCAtOTE1MDA2LjE3MUUrNjE0NTQ4NjUyIC0zMTQwODY5NjUuIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDcwIG11bHRpcGx5IC05MTUwMDYuMTcxRSs2MTQ1NDg2NTIgLTMxNDA4Njk2NS4gLT4gMi44NzM5MTUxMUUrNjE0NTQ4NjY2IEluZXhhY3QgUm91bmRlZAoreHBvdzA3MCBwb3dlciAtOTE1MDA2LjE3MUUrNjE0NTQ4NjUyIC0zMTQwODY5NjUgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA3MCByZW1haW5kZXIgLTkxNTAwNi4xNzFFKzYxNDU0ODY1MiAtMzE0MDg2OTY1LiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA3MCBzdWJ0cmFjdCAtOTE1MDA2LjE3MUUrNjE0NTQ4NjUyIC0zMTQwODY5NjUuIC0+IC05LjE1MDA2MTcxRSs2MTQ1NDg2NTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMDcxIGFkZCAtMjk2NTkwMDM1IC00ODE3MzQ1MjkgLT4gLTc3ODMyNDU2NAoreGNvbTA3MSBjb21wYXJlIC0yOTY1OTAwMzUgLTQ4MTczNDUyOSAtPiAxCit4ZGl2MDcxIGRpdmlkZSAtMjk2NTkwMDM1IC00ODE3MzQ1MjkgLT4gMC42MTU2NzExMTYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDcxIGRpdmlkZWludCAtMjk2NTkwMDM1IC00ODE3MzQ1MjkgLT4gMAoreG11bDA3MSBtdWx0aXBseSAtMjk2NTkwMDM1IC00ODE3MzQ1MjkgLT4gMS40Mjg3NzY2MUUrMTcgSW5leGFjdCBSb3VuZGVkCit4cG93MDcxIHBvd2VyIC0yOTY1OTAwMzUgLTQ4MTczNDUyOSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDcxIHJlbWFpbmRlciAtMjk2NTkwMDM1IC00ODE3MzQ1MjkgLT4gLTI5NjU5MDAzNQoreHN1YjA3MSBzdWJ0cmFjdCAtMjk2NTkwMDM1IC00ODE3MzQ1MjkgLT4gMTg1MTQ0NDk0Cit4YWRkMDcyIGFkZCA4LjI3ODIyNjA1IDkyNDE1NTcuMTkgLT4gOTI0MTU2NS40NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNzIgY29tcGFyZSA4LjI3ODIyNjA1IDkyNDE1NTcuMTkgLT4gLTEKK3hkaXYwNzIgZGl2aWRlIDguMjc4MjI2MDUgOTI0MTU1Ny4xOSAtPiA4Ljk1NzYwOTUwRS03IEluZXhhY3QgUm91bmRlZAoreGR2aTA3MiBkaXZpZGVpbnQgOC4yNzgyMjYwNSA5MjQxNTU3LjE5IC0+IDAKK3htdWwwNzIgbXVsdGlwbHkgOC4yNzgyMjYwNSA5MjQxNTU3LjE5IC0+IDc2NTAzNjk5LjUgSW5leGFjdCBSb3VuZGVkCit4cG93MDcyIHBvd2VyIDguMjc4MjI2MDUgOTI0MTU1NyAtPiA1LjEwMjE5OTY5RSs4NDgzMTY5IEluZXhhY3QgUm91bmRlZAoreHJlbTA3MiByZW1haW5kZXIgOC4yNzgyMjYwNSA5MjQxNTU3LjE5IC0+IDguMjc4MjI2MDUKK3hzdWIwNzIgc3VidHJhY3QgOC4yNzgyMjYwNSA5MjQxNTU3LjE5IC0+IC05MjQxNTQ4LjkxIEluZXhhY3QgUm91bmRlZAoreGFkZDA3MyBhZGQgLTEuNDM1ODEwOTggNzI4NjMxMy41NCAtPiA3Mjg2MzEyLjEwIEluZXhhY3QgUm91bmRlZAoreGNvbTA3MyBjb21wYXJlIC0xLjQzNTgxMDk4IDcyODYzMTMuNTQgLT4gLTEKK3hkaXYwNzMgZGl2aWRlIC0xLjQzNTgxMDk4IDcyODYzMTMuNTQgLT4gLTEuOTcwNTU4ODdFLTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDczIGRpdmlkZWludCAtMS40MzU4MTA5OCA3Mjg2MzEzLjU0IC0+IC0wCit4bXVsMDczIG11bHRpcGx5IC0xLjQzNTgxMDk4IDcyODYzMTMuNTQgLT4gLTEwNDYxNzY5LjAgSW5leGFjdCBSb3VuZGVkCit4cG93MDczIHBvd2VyIC0xLjQzNTgxMDk4IDcyODYzMTQgLT4gMS4wOTM4OTc0MUUrMTE0NDY2MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNzMgcmVtYWluZGVyIC0xLjQzNTgxMDk4IDcyODYzMTMuNTQgLT4gLTEuNDM1ODEwOTgKK3hzdWIwNzMgc3VidHJhY3QgLTEuNDM1ODEwOTggNzI4NjMxMy41NCAtPiAtNzI4NjMxNC45OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNzQgYWRkIC02OTkwMzYxOTMuIDc1OTI2My41MDlFKzUzMzU0MzYyNSAtPiA3LjU5MjYzNTA5RSs1MzM1NDM2MzAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDc0IGNvbXBhcmUgLTY5OTAzNjE5My4gNzU5MjYzLjUwOUUrNTMzNTQzNjI1IC0+IC0xCit4ZGl2MDc0IGRpdmlkZSAtNjk5MDM2MTkzLiA3NTkyNjMuNTA5RSs1MzM1NDM2MjUgLT4gLTkuMjA2NzY2NjJFLTUzMzU0MzYyMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNzQgZGl2aWRlaW50IC02OTkwMzYxOTMuIDc1OTI2My41MDlFKzUzMzU0MzYyNSAtPiAtMAoreG11bDA3NCBtdWx0aXBseSAtNjk5MDM2MTkzLiA3NTkyNjMuNTA5RSs1MzM1NDM2MjUgLT4gLTUuMzA3NTI2NzNFKzUzMzU0MzYzOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNzQgcG93ZXIgLTY5OTAzNjE5My4gOCAtPiA1LjcwMTYwNzI0RSs3MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNzQgcmVtYWluZGVyIC02OTkwMzYxOTMuIDc1OTI2My41MDlFKzUzMzU0MzYyNSAtPiAtNjk5MDM2MTkzCit4c3ViMDc0IHN1YnRyYWN0IC02OTkwMzYxOTMuIDc1OTI2My41MDlFKzUzMzU0MzYyNSAtPiAtNy41OTI2MzUwOUUrNTMzNTQzNjMwIEluZXhhY3QgUm91bmRlZAoreGFkZDA3NSBhZGQgLTgzLjcyNzM2MTVFLTMwNTI4MTk1NyAtMjg3Nzc5NTkzLkUrNDU4Nzc3Nzc0IC0+IC0yLjg3Nzc5NTkzRSs0NTg3Nzc3ODIgSW5leGFjdCBSb3VuZGVkCit4Y29tMDc1IGNvbXBhcmUgLTgzLjcyNzM2MTVFLTMwNTI4MTk1NyAtMjg3Nzc5NTkzLkUrNDU4Nzc3Nzc0IC0+IDEKK3hkaXYwNzUgZGl2aWRlIC04My43MjczNjE1RS0zMDUyODE5NTcgLTI4Nzc3OTU5My5FKzQ1ODc3Nzc3NCAtPiAyLjkwOTQyNjY0RS03NjQwNTk3MzggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDc1IGRpdmlkZWludCAtODMuNzI3MzYxNUUtMzA1MjgxOTU3IC0yODc3Nzk1OTMuRSs0NTg3Nzc3NzQgLT4gMAoreG11bDA3NSBtdWx0aXBseSAtODMuNzI3MzYxNUUtMzA1MjgxOTU3IC0yODc3Nzk1OTMuRSs0NTg3Nzc3NzQgLT4gMi40MDk1MDI2MEUrMTUzNDk1ODI3IEluZXhhY3QgUm91bmRlZAoreHBvdzA3NSBwb3dlciAtODMuNzI3MzYxNUUtMzA1MjgxOTU3IC0zIC0+IC0xLjcwMzcxODI4RSs5MTU4NDU4NjUgSW5leGFjdCBSb3VuZGVkCit4cmVtMDc1IHJlbWFpbmRlciAtODMuNzI3MzYxNUUtMzA1MjgxOTU3IC0yODc3Nzk1OTMuRSs0NTg3Nzc3NzQgLT4gLTguMzcyNzM2MTVFLTMwNTI4MTk1NgoreHN1YjA3NSBzdWJ0cmFjdCAtODMuNzI3MzYxNUUtMzA1MjgxOTU3IC0yODc3Nzk1OTMuRSs0NTg3Nzc3NzQgLT4gMi44Nzc3OTU5M0UrNDU4Nzc3NzgyIEluZXhhY3QgUm91bmRlZAoreGFkZDA3NiBhZGQgOC40ODUwMzIyNCA2NTIyLjAzMzE2IC0+IDY1MzAuNTE4MTkgSW5leGFjdCBSb3VuZGVkCit4Y29tMDc2IGNvbXBhcmUgOC40ODUwMzIyNCA2NTIyLjAzMzE2IC0+IC0xCit4ZGl2MDc2IGRpdmlkZSA4LjQ4NTAzMjI0IDY1MjIuMDMzMTYgLT4gMC4wMDEzMDA5Nzk2MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNzYgZGl2aWRlaW50IDguNDg1MDMyMjQgNjUyMi4wMzMxNiAtPiAwCit4bXVsMDc2IG11bHRpcGx5IDguNDg1MDMyMjQgNjUyMi4wMzMxNiAtPiA1NTMzOS42NjE2IEluZXhhY3QgUm91bmRlZAoreHBvdzA3NiBwb3dlciA4LjQ4NTAzMjI0IDY1MjIgLT4gNC43NjU0NzU0MkUrNjA1NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNzYgcmVtYWluZGVyIDguNDg1MDMyMjQgNjUyMi4wMzMxNiAtPiA4LjQ4NTAzMjI0Cit4c3ViMDc2IHN1YnRyYWN0IDguNDg1MDMyMjQgNjUyMi4wMzMxNiAtPiAtNjUxMy41NDgxMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNzcgYWRkIDUyNzkxNjA5MSAtODA5LjA1NDA3MCAtPiA1Mjc5MTUyODIgSW5leGFjdCBSb3VuZGVkCit4Y29tMDc3IGNvbXBhcmUgNTI3OTE2MDkxIC04MDkuMDU0MDcwIC0+IDEKK3hkaXYwNzcgZGl2aWRlIDUyNzkxNjA5MSAtODA5LjA1NDA3MCAtPiAtNjUyNTEwLjI3MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNzcgZGl2aWRlaW50IDUyNzkxNjA5MSAtODA5LjA1NDA3MCAtPiAtNjUyNTEwCit4bXVsMDc3IG11bHRpcGx5IDUyNzkxNjA5MSAtODA5LjA1NDA3MCAtPiAtNC4yNzExMjY2MkUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MDc3IHBvd2VyIDUyNzkxNjA5MSAtODA5IC0+IDIuNzg2MDk2OTdFLTcwNTcgSW5leGFjdCBSb3VuZGVkCit4cmVtMDc3IHJlbWFpbmRlciA1Mjc5MTYwOTEgLTgwOS4wNTQwNzAgLT4gMjE5Ljc4NDMwMAoreHN1YjA3NyBzdWJ0cmFjdCA1Mjc5MTYwOTEgLTgwOS4wNTQwNzAgLT4gNTI3OTE2OTAwIEluZXhhY3QgUm91bmRlZAoreGFkZDA3OCBhZGQgMzg1NzA1OC42MCA1NzkyOTk3LjU4RSs4ODEwNzc0MDkgLT4gNS43OTI5OTc1OEUrODgxMDc3NDE1IEluZXhhY3QgUm91bmRlZAoreGNvbTA3OCBjb21wYXJlIDM4NTcwNTguNjAgNTc5Mjk5Ny41OEUrODgxMDc3NDA5IC0+IC0xCit4ZGl2MDc4IGRpdmlkZSAzODU3MDU4LjYwIDU3OTI5OTcuNThFKzg4MTA3NzQwOSAtPiA2LjY1ODEzOTUwRS04ODEwNzc0MTAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDc4IGRpdmlkZWludCAzODU3MDU4LjYwIDU3OTI5OTcuNThFKzg4MTA3NzQwOSAtPiAwCit4bXVsMDc4IG11bHRpcGx5IDM4NTcwNTguNjAgNTc5Mjk5Ny41OEUrODgxMDc3NDA5IC0+IDIuMjM0MzkzMTFFKzg4MTA3NzQyMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNzggcG93ZXIgMzg1NzA1OC42MCA2IC0+IDMuMjkyNTg4MjRFKzM5IEluZXhhY3QgUm91bmRlZAoreHJlbTA3OCByZW1haW5kZXIgMzg1NzA1OC42MCA1NzkyOTk3LjU4RSs4ODEwNzc0MDkgLT4gMzg1NzA1OC42MAoreHN1YjA3OCBzdWJ0cmFjdCAzODU3MDU4LjYwIDU3OTI5OTcuNThFKzg4MTA3NzQwOSAtPiAtNS43OTI5OTc1OEUrODgxMDc3NDE1IEluZXhhY3QgUm91bmRlZAoreGFkZDA3OSBhZGQgLTY2NTg3MzYzLkUrNTU2NTM4MTczIC01NTE5MDI0MDJFKzM1NzMwOTE0NiAtPiAtNi42NTg3MzYzMEUrNTU2NTM4MTgwIEluZXhhY3QgUm91bmRlZAoreGNvbTA3OSBjb21wYXJlIC02NjU4NzM2My5FKzU1NjUzODE3MyAtNTUxOTAyNDAyRSszNTczMDkxNDYgLT4gLTEKK3hkaXYwNzkgZGl2aWRlIC02NjU4NzM2My5FKzU1NjUzODE3MyAtNTUxOTAyNDAyRSszNTczMDkxNDYgLT4gMS4yMDY1MDYxM0UrMTk5MjI5MDI2IEluZXhhY3QgUm91bmRlZAoreGR2aTA3OSBkaXZpZGVpbnQgLTY2NTg3MzYzLkUrNTU2NTM4MTczIC01NTE5MDI0MDJFKzM1NzMwOTE0NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA3OSBtdWx0aXBseSAtNjY1ODczNjMuRSs1NTY1MzgxNzMgLTU1MTkwMjQwMkUrMzU3MzA5MTQ2IC0+IDMuNjc0OTcyNTZFKzkxMzg0NzMzNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNzkgcG93ZXIgLTY2NTg3MzYzLkUrNTU2NTM4MTczIC02IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA3OSByZW1haW5kZXIgLTY2NTg3MzYzLkUrNTU2NTM4MTczIC01NTE5MDI0MDJFKzM1NzMwOTE0NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA3OSBzdWJ0cmFjdCAtNjY1ODczNjMuRSs1NTY1MzgxNzMgLTU1MTkwMjQwMkUrMzU3MzA5MTQ2IC0+IC02LjY1ODczNjMwRSs1NTY1MzgxODAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDgwIGFkZCAtNTgwLjUwMjk1NSAzODEyNTUyMS43IC0+IDM4MTI0OTQxLjIgSW5leGFjdCBSb3VuZGVkCit4Y29tMDgwIGNvbXBhcmUgLTU4MC41MDI5NTUgMzgxMjU1MjEuNyAtPiAtMQoreGRpdjA4MCBkaXZpZGUgLTU4MC41MDI5NTUgMzgxMjU1MjEuNyAtPiAtMC4wMDAwMTUyMjYwOTg3IEluZXhhY3QgUm91bmRlZAoreGR2aTA4MCBkaXZpZGVpbnQgLTU4MC41MDI5NTUgMzgxMjU1MjEuNyAtPiAtMAoreG11bDA4MCBtdWx0aXBseSAtNTgwLjUwMjk1NSAzODEyNTUyMS43IC0+IC0yLjIxMzE5NzgwRSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwODAgcG93ZXIgLTU4MC41MDI5NTUgMzgxMjU1MjIgLT4gNi4wNzI2MjA3OEUrMTA1MzcxNDg2IEluZXhhY3QgUm91bmRlZAoreHJlbTA4MCByZW1haW5kZXIgLTU4MC41MDI5NTUgMzgxMjU1MjEuNyAtPiAtNTgwLjUwMjk1NQoreHN1YjA4MCBzdWJ0cmFjdCAtNTgwLjUwMjk1NSAzODEyNTUyMS43IC0+IC0zODEyNjEwMi4yIEluZXhhY3QgUm91bmRlZAoreGFkZDA4MSBhZGQgLTk2MjczNjMuMDAgLTgwNjE2ODg1RS03NDk4OTEzOTQgLT4gLTk2MjczNjMuMDAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDgxIGNvbXBhcmUgLTk2MjczNjMuMDAgLTgwNjE2ODg1RS03NDk4OTEzOTQgLT4gLTEKK3hkaXYwODEgZGl2aWRlIC05NjI3MzYzLjAwIC04MDYxNjg4NUUtNzQ5ODkxMzk0IC0+IDEuMTk0MjExNzNFKzc0OTg5MTM5MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwODEgZGl2aWRlaW50IC05NjI3MzYzLjAwIC04MDYxNjg4NUUtNzQ5ODkxMzk0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDgxIG11bHRpcGx5IC05NjI3MzYzLjAwIC04MDYxNjg4NUUtNzQ5ODkxMzk0IC0+IDcuNzYxMjgwMTZFLTc0OTg5MTM4MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwODEgcG93ZXIgLTk2MjczNjMuMDAgLTggLT4gMS4zNTUwMDYwMUUtNTYgSW5leGFjdCBSb3VuZGVkCit4cmVtMDgxIHJlbWFpbmRlciAtOTYyNzM2My4wMCAtODA2MTY4ODVFLTc0OTg5MTM5NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA4MSBzdWJ0cmFjdCAtOTYyNzM2My4wMCAtODA2MTY4ODVFLTc0OTg5MTM5NCAtPiAtOTYyNzM2My4wMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwODIgYWRkIC01MjYuNTk0ODU1RSs4MDMxMTAxMDcgLTY0LjU0NTE2MzkgLT4gLTUuMjY1OTQ4NTVFKzgwMzExMDEwOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wODIgY29tcGFyZSAtNTI2LjU5NDg1NUUrODAzMTEwMTA3IC02NC41NDUxNjM5IC0+IC0xCit4ZGl2MDgyIGRpdmlkZSAtNTI2LjU5NDg1NUUrODAzMTEwMTA3IC02NC41NDUxNjM5IC0+IDguMTU4NTQ4NThFKzgwMzExMDEwNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwODIgZGl2aWRlaW50IC01MjYuNTk0ODU1RSs4MDMxMTAxMDcgLTY0LjU0NTE2MzkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwODIgbXVsdGlwbHkgLTUyNi41OTQ4NTVFKzgwMzExMDEwNyAtNjQuNTQ1MTYzOSAtPiAzLjM5ODkxNTEyRSs4MDMxMTAxMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MDgyIHBvd2VyIC01MjYuNTk0ODU1RSs4MDMxMTAxMDcgLTY1IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wODIgcmVtYWluZGVyIC01MjYuNTk0ODU1RSs4MDMxMTAxMDcgLTY0LjU0NTE2MzkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwODIgc3VidHJhY3QgLTUyNi41OTQ4NTVFKzgwMzExMDEwNyAtNjQuNTQ1MTYzOSAtPiAtNS4yNjU5NDg1NUUrODAzMTEwMTA5IEluZXhhY3QgUm91bmRlZAoreGFkZDA4MyBhZGQgLTgzNzguNTU0OTkgNzYwLjEzMTI1NyAtPiAtNzYxOC40MjM3MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20wODMgY29tcGFyZSAtODM3OC41NTQ5OSA3NjAuMTMxMjU3IC0+IC0xCit4ZGl2MDgzIGRpdmlkZSAtODM3OC41NTQ5OSA3NjAuMTMxMjU3IC0+IC0xMS4wMjI1MTA4IEluZXhhY3QgUm91bmRlZAoreGR2aTA4MyBkaXZpZGVpbnQgLTgzNzguNTU0OTkgNzYwLjEzMTI1NyAtPiAtMTEKK3htdWwwODMgbXVsdGlwbHkgLTgzNzguNTU0OTkgNzYwLjEzMTI1NyAtPiAtNjM2ODgwMS41NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwODMgcG93ZXIgLTgzNzguNTU0OTkgNzYwIC0+IDQuMDYwMDc5MjhFKzI5ODEgSW5leGFjdCBSb3VuZGVkCit4cmVtMDgzIHJlbWFpbmRlciAtODM3OC41NTQ5OSA3NjAuMTMxMjU3IC0+IC0xNy4xMTExNjMKK3hzdWIwODMgc3VidHJhY3QgLTgzNzguNTU0OTkgNzYwLjEzMTI1NyAtPiAtOTEzOC42ODYyNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwODQgYWRkIC03MTcuNjk3NzE4IDk4NDMwNDQxMyAtPiA5ODQzMDM2OTUgSW5leGFjdCBSb3VuZGVkCit4Y29tMDg0IGNvbXBhcmUgLTcxNy42OTc3MTggOTg0MzA0NDEzIC0+IC0xCit4ZGl2MDg0IGRpdmlkZSAtNzE3LjY5NzcxOCA5ODQzMDQ0MTMgLT4gLTcuMjkxNDIwMzBFLTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDg0IGRpdmlkZWludCAtNzE3LjY5NzcxOCA5ODQzMDQ0MTMgLT4gLTAKK3htdWwwODQgbXVsdGlwbHkgLTcxNy42OTc3MTggOTg0MzA0NDEzIC0+IC03LjA2NDMzMDMxRSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwODQgcG93ZXIgLTcxNy42OTc3MTggOTg0MzA0NDEzIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wODQgcmVtYWluZGVyIC03MTcuNjk3NzE4IDk4NDMwNDQxMyAtPiAtNzE3LjY5NzcxOAoreHN1YjA4NCBzdWJ0cmFjdCAtNzE3LjY5NzcxOCA5ODQzMDQ0MTMgLT4gLTk4NDMwNTEzMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwODUgYWRkIC03Njc2MjI0My40RS03NDExMDAwOTQgLTI3My43MDY2NzQgLT4gLTI3My43MDY2NzQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDg1IGNvbXBhcmUgLTc2NzYyMjQzLjRFLTc0MTEwMDA5NCAtMjczLjcwNjY3NCAtPiAxCit4ZGl2MDg1IGRpdmlkZSAtNzY3NjIyNDMuNEUtNzQxMTAwMDk0IC0yNzMuNzA2Njc0IC0+IDIuODA0NTQ0MDlFLTc0MTEwMDA4OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwODUgZGl2aWRlaW50IC03Njc2MjI0My40RS03NDExMDAwOTQgLTI3My43MDY2NzQgLT4gMAoreG11bDA4NSBtdWx0aXBseSAtNzY3NjIyNDMuNEUtNzQxMTAwMDk0IC0yNzMuNzA2Njc0IC0+IDIuMTAxMDMzODNFLTc0MTEwMDA4NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwODUgcG93ZXIgLTc2NzYyMjQzLjRFLTc0MTEwMDA5NCAtMjc0IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTA4NSByZW1haW5kZXIgLTc2NzYyMjQzLjRFLTc0MTEwMDA5NCAtMjczLjcwNjY3NCAtPiAtNy42NzYyMjQzNEUtNzQxMTAwMDg3Cit4c3ViMDg1IHN1YnRyYWN0IC03Njc2MjI0My40RS03NDExMDAwOTQgLTI3My43MDY2NzQgLT4gMjczLjcwNjY3NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwODYgYWRkIC03MDEuNTE4MzU0RSs3ODYyNzQ5MTggODgyMjc1MC42OEUrMjQzMDUyMTA3IC0+IC03LjAxNTE4MzU0RSs3ODYyNzQ5MjAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDg2IGNvbXBhcmUgLTcwMS41MTgzNTRFKzc4NjI3NDkxOCA4ODIyNzUwLjY4RSsyNDMwNTIxMDcgLT4gLTEKK3hkaXYwODYgZGl2aWRlIC03MDEuNTE4MzU0RSs3ODYyNzQ5MTggODgyMjc1MC42OEUrMjQzMDUyMTA3IC0+IC03Ljk1MTI0MzA5RSs1NDMyMjI4MDYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDg2IGRpdmlkZWludCAtNzAxLjUxODM1NEUrNzg2Mjc0OTE4IDg4MjI3NTAuNjhFKzI0MzA1MjEwNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA4NiBtdWx0aXBseSAtNzAxLjUxODM1NEUrNzg2Mjc0OTE4IDg4MjI3NTAuNjhFKzI0MzA1MjEwNyAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4cG93MDg2IHBvd2VyIC03MDEuNTE4MzU0RSs3ODYyNzQ5MTggOSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMDg2IHJlbWFpbmRlciAtNzAxLjUxODM1NEUrNzg2Mjc0OTE4IDg4MjI3NTAuNjhFKzI0MzA1MjEwNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA4NiBzdWJ0cmFjdCAtNzAxLjUxODM1NEUrNzg2Mjc0OTE4IDg4MjI3NTAuNjhFKzI0MzA1MjEwNyAtPiAtNy4wMTUxODM1NEUrNzg2Mjc0OTIwIEluZXhhY3QgUm91bmRlZAoreGFkZDA4NyBhZGQgLTM1OTg2Njg0NS4gLTQuNTc0MzQxMTcgLT4gLTM1OTg2Njg1MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wODcgY29tcGFyZSAtMzU5ODY2ODQ1LiAtNC41NzQzNDExNyAtPiAtMQoreGRpdjA4NyBkaXZpZGUgLTM1OTg2Njg0NS4gLTQuNTc0MzQxMTcgLT4gNzg2NzA3NDguOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwODcgZGl2aWRlaW50IC0zNTk4NjY4NDUuIC00LjU3NDM0MTE3IC0+IDc4NjcwNzQ4Cit4bXVsMDg3IG11bHRpcGx5IC0zNTk4NjY4NDUuIC00LjU3NDM0MTE3IC0+IDEuNjQ2MTUzNzJFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93MDg3IHBvd2VyIC0zNTk4NjY4NDUuIC01IC0+IC0xLjY1Njg3OTA5RS00MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wODcgcmVtYWluZGVyIC0zNTk4NjY4NDUuIC00LjU3NDM0MTE3IC0+IC0zLjU0ODkwNDg0Cit4c3ViMDg3IHN1YnRyYWN0IC0zNTk4NjY4NDUuIC00LjU3NDM0MTE3IC0+IC0zNTk4NjY4NDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDg4IGFkZCA3Nzk5MzQ1MzYuIC03NjU2MjY0NS43IC0+IDcwMzM3MTg5MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wODggY29tcGFyZSA3Nzk5MzQ1MzYuIC03NjU2MjY0NS43IC0+IDEKK3hkaXYwODggZGl2aWRlIDc3OTkzNDUzNi4gLTc2NTYyNjQ1LjcgLT4gLTEwLjE4Njg4MDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDg4IGRpdmlkZWludCA3Nzk5MzQ1MzYuIC03NjU2MjY0NS43IC0+IC0xMAoreG11bDA4OCBtdWx0aXBseSA3Nzk5MzQ1MzYuIC03NjU2MjY0NS43IC0+IC01Ljk3MTM4NTE1RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwODggcG93ZXIgNzc5OTM0NTM2LiAtNzY1NjI2NDYgLT4gMy4zNjczOTA2M0UtNjgwNzk5NTAxIEluZXhhY3QgUm91bmRlZAoreHJlbTA4OCByZW1haW5kZXIgNzc5OTM0NTM2LiAtNzY1NjI2NDUuNyAtPiAxNDMwODA3OS4wCit4c3ViMDg4IHN1YnRyYWN0IDc3OTkzNDUzNi4gLTc2NTYyNjQ1LjcgLT4gODU2NDk3MTgyIEluZXhhY3QgUm91bmRlZAoreGFkZDA4OSBhZGQgLTQ4MjAuOTU0NTEgMzUxNjIzNC45OUUrMzAzMzAzMTc2IC0+IDMuNTE2MjM0OTlFKzMwMzMwMzE4MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wODkgY29tcGFyZSAtNDgyMC45NTQ1MSAzNTE2MjM0Ljk5RSszMDMzMDMxNzYgLT4gLTEKK3hkaXYwODkgZGl2aWRlIC00ODIwLjk1NDUxIDM1MTYyMzQuOTlFKzMwMzMwMzE3NiAtPiAtMS4zNzEwNTU4NEUtMzAzMzAzMTc5IEluZXhhY3QgUm91bmRlZAoreGR2aTA4OSBkaXZpZGVpbnQgLTQ4MjAuOTU0NTEgMzUxNjIzNC45OUUrMzAzMzAzMTc2IC0+IC0wCit4bXVsMDg5IG11bHRpcGx5IC00ODIwLjk1NDUxIDM1MTYyMzQuOTlFKzMwMzMwMzE3NiAtPiAtMS42OTUxNjA4OUUrMzAzMzAzMTg2IEluZXhhY3QgUm91bmRlZAoreHBvdzA4OSBwb3dlciAtNDgyMC45NTQ1MSA0IC0+IDUuNDAxNzIwODJFKzE0IEluZXhhY3QgUm91bmRlZAoreHJlbTA4OSByZW1haW5kZXIgLTQ4MjAuOTU0NTEgMzUxNjIzNC45OUUrMzAzMzAzMTc2IC0+IC00ODIwLjk1NDUxCit4c3ViMDg5IHN1YnRyYWN0IC00ODIwLjk1NDUxIDM1MTYyMzQuOTlFKzMwMzMwMzE3NiAtPiAtMy41MTYyMzQ5OUUrMzAzMzAzMTgyIEluZXhhY3QgUm91bmRlZAoreGFkZDA5MCBhZGQgNjkzNTU5NzYuOSAtOS41NzgzODU2MkUrNzU4ODA0OTg0IC0+IC05LjU3ODM4NTYyRSs3NTg4MDQ5ODQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDkwIGNvbXBhcmUgNjkzNTU5NzYuOSAtOS41NzgzODU2MkUrNzU4ODA0OTg0IC0+IDEKK3hkaXYwOTAgZGl2aWRlIDY5MzU1OTc2LjkgLTkuNTc4Mzg1NjJFKzc1ODgwNDk4NCAtPiAtNy4yNDA4ODM3NkUtNzU4ODA0OTc4IEluZXhhY3QgUm91bmRlZAoreGR2aTA5MCBkaXZpZGVpbnQgNjkzNTU5NzYuOSAtOS41NzgzODU2MkUrNzU4ODA0OTg0IC0+IC0wCit4bXVsMDkwIG11bHRpcGx5IDY5MzU1OTc2LjkgLTkuNTc4Mzg1NjJFKzc1ODgwNDk4NCAtPiAtNi42NDMxODI5MkUrNzU4ODA0OTkyIEluZXhhY3QgUm91bmRlZAoreHBvdzA5MCBwb3dlciA2OTM1NTk3Ni45IC0xMCAtPiAzLjg4Mjk0MzQ2RS03OSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wOTAgcmVtYWluZGVyIDY5MzU1OTc2LjkgLTkuNTc4Mzg1NjJFKzc1ODgwNDk4NCAtPiA2OTM1NTk3Ni45Cit4c3ViMDkwIHN1YnRyYWN0IDY5MzU1OTc2LjkgLTkuNTc4Mzg1NjJFKzc1ODgwNDk4NCAtPiA5LjU3ODM4NTYyRSs3NTg4MDQ5ODQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDkxIGFkZCAtMTI2NzIwOTMuMSA4NTY5Ljc4MjU1RS0zODI4NjYwMjUgLT4gLTEyNjcyMDkzLjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMDkxIGNvbXBhcmUgLTEyNjcyMDkzLjEgODU2OS43ODI1NUUtMzgyODY2MDI1IC0+IC0xCit4ZGl2MDkxIGRpdmlkZSAtMTI2NzIwOTMuMSA4NTY5Ljc4MjU1RS0zODI4NjYwMjUgLT4gLTEuNDc4Njk0ODJFKzM4Mjg2NjAyOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwOTEgZGl2aWRlaW50IC0xMjY3MjA5My4xIDg1NjkuNzgyNTVFLTM4Mjg2NjAyNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA5MSBtdWx0aXBseSAtMTI2NzIwOTMuMSA4NTY5Ljc4MjU1RS0zODI4NjYwMjUgLT4gLTEuMDg1OTcwODJFLTM4Mjg2NjAxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwOTEgcG93ZXIgLTEyNjcyMDkzLjEgOSAtPiAtOC40MjYyNjY1OEUrNjMgSW5leGFjdCBSb3VuZGVkCit4cmVtMDkxIHJlbWFpbmRlciAtMTI2NzIwOTMuMSA4NTY5Ljc4MjU1RS0zODI4NjYwMjUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwOTEgc3VidHJhY3QgLTEyNjcyMDkzLjEgODU2OS43ODI1NUUtMzgyODY2MDI1IC0+IC0xMjY3MjA5My4xIEluZXhhY3QgUm91bmRlZAoreGFkZDA5MiBhZGQgLTU5MTA3NTAuMiA2NjE1MDM4M0UtNjYyNDU5MjQxIC0+IC01OTEwNzUwLjIwIEluZXhhY3QgUm91bmRlZAoreGNvbTA5MiBjb21wYXJlIC01OTEwNzUwLjIgNjYxNTAzODNFLTY2MjQ1OTI0MSAtPiAtMQoreGRpdjA5MiBkaXZpZGUgLTU5MTA3NTAuMiA2NjE1MDM4M0UtNjYyNDU5MjQxIC0+IC04LjkzNTMyMjcyRSs2NjI0NTkyMzkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDkyIGRpdmlkZWludCAtNTkxMDc1MC4yIDY2MTUwMzgzRS02NjI0NTkyNDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwOTIgbXVsdGlwbHkgLTU5MTA3NTAuMiA2NjE1MDM4M0UtNjYyNDU5MjQxIC0+IC0zLjkwOTk4MzkwRS02NjI0NTkyMjcgSW5leGFjdCBSb3VuZGVkCit4cG93MDkyIHBvd2VyIC01OTEwNzUwLjIgNyAtPiAtMi41MjA1NjY5NkUrNDcgSW5leGFjdCBSb3VuZGVkCit4cmVtMDkyIHJlbWFpbmRlciAtNTkxMDc1MC4yIDY2MTUwMzgzRS02NjI0NTkyNDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwOTIgc3VidHJhY3QgLTU5MTA3NTAuMiA2NjE1MDM4M0UtNjYyNDU5MjQxIC0+IC01OTEwNzUwLjIwIEluZXhhY3QgUm91bmRlZAoreGFkZDA5MyBhZGQgLTUzMjU3NzI2OC5FLTE2MzgwNjYyOSAtMjQwNjUwMzk4RS02NTAxMTA1NTggLT4gLTUuMzI1NzcyNjhFLTE2MzgwNjYyMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wOTMgY29tcGFyZSAtNTMyNTc3MjY4LkUtMTYzODA2NjI5IC0yNDA2NTAzOThFLTY1MDExMDU1OCAtPiAtMQoreGRpdjA5MyBkaXZpZGUgLTUzMjU3NzI2OC5FLTE2MzgwNjYyOSAtMjQwNjUwMzk4RS02NTAxMTA1NTggLT4gMi4yMTMwNzQ1NEUrNDg2MzAzOTI5IEluZXhhY3QgUm91bmRlZAoreGR2aTA5MyBkaXZpZGVpbnQgLTUzMjU3NzI2OC5FLTE2MzgwNjYyOSAtMjQwNjUwMzk4RS02NTAxMTA1NTggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwOTMgbXVsdGlwbHkgLTUzMjU3NzI2OC5FLTE2MzgwNjYyOSAtMjQwNjUwMzk4RS02NTAxMTA1NTggLT4gMS4yODE2NDkzMkUtODEzOTE3MTcwIEluZXhhY3QgUm91bmRlZAoreHBvdzA5MyBwb3dlciAtNTMyNTc3MjY4LkUtMTYzODA2NjI5IC0yIC0+IDMuNTI1NjEzODlFKzMyNzYxMzI0MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wOTMgcmVtYWluZGVyIC01MzI1NzcyNjguRS0xNjM4MDY2MjkgLTI0MDY1MDM5OEUtNjUwMTEwNTU4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDkzIHN1YnRyYWN0IC01MzI1NzcyNjguRS0xNjM4MDY2MjkgLTI0MDY1MDM5OEUtNjUwMTEwNTU4IC0+IC01LjMyNTc3MjY4RS0xNjM4MDY2MjEgSW5leGFjdCBSb3VuZGVkCit4YWRkMDk0IGFkZCAtNjcxLjUwNzE5OEUtOTA4NTg3ODkwIDMwNTc0MjkuMzJFLTU1NTIzMDYyMyAtPiAzLjA1NzQyOTMyRS01NTUyMzA2MTcgSW5leGFjdCBSb3VuZGVkCit4Y29tMDk0IGNvbXBhcmUgLTY3MS41MDcxOThFLTkwODU4Nzg5MCAzMDU3NDI5LjMyRS01NTUyMzA2MjMgLT4gLTEKK3hkaXYwOTQgZGl2aWRlIC02NzEuNTA3MTk4RS05MDg1ODc4OTAgMzA1NzQyOS4zMkUtNTU1MjMwNjIzIC0+IC0yLjE5NjMxMzA3RS0zNTMzNTcyNzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDk0IGRpdmlkZWludCAtNjcxLjUwNzE5OEUtOTA4NTg3ODkwIDMwNTc0MjkuMzJFLTU1NTIzMDYyMyAtPiAtMAoreG11bDA5NCBtdWx0aXBseSAtNjcxLjUwNzE5OEUtOTA4NTg3ODkwIDMwNTc0MjkuMzJFLTU1NTIzMDYyMyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cG93MDk0IHBvd2VyIC02NzEuNTA3MTk4RS05MDg1ODc4OTAgMyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDk0IHJlbWFpbmRlciAtNjcxLjUwNzE5OEUtOTA4NTg3ODkwIDMwNTc0MjkuMzJFLTU1NTIzMDYyMyAtPiAtNi43MTUwNzE5OEUtOTA4NTg3ODg4Cit4c3ViMDk0IHN1YnRyYWN0IC02NzEuNTA3MTk4RS05MDg1ODc4OTAgMzA1NzQyOS4zMkUtNTU1MjMwNjIzIC0+IC0zLjA1NzQyOTMyRS01NTUyMzA2MTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMDk1IGFkZCAtMjk0Ljk5NDM1MkUrMzQ2NDUyMDI3IC02MDYxODUzLjAgLT4gLTIuOTQ5OTQzNTJFKzM0NjQ1MjAyOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wOTUgY29tcGFyZSAtMjk0Ljk5NDM1MkUrMzQ2NDUyMDI3IC02MDYxODUzLjAgLT4gLTEKK3hkaXYwOTUgZGl2aWRlIC0yOTQuOTk0MzUyRSszNDY0NTIwMjcgLTYwNjE4NTMuMCAtPiA0Ljg2NjQwNTU3RSszNDY0NTIwMjIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDk1IGRpdmlkZWludCAtMjk0Ljk5NDM1MkUrMzQ2NDUyMDI3IC02MDYxODUzLjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwOTUgbXVsdGlwbHkgLTI5NC45OTQzNTJFKzM0NjQ1MjAyNyAtNjA2MTg1My4wIC0+IDEuNzg4MjEyNDBFKzM0NjQ1MjAzNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwOTUgcG93ZXIgLTI5NC45OTQzNTJFKzM0NjQ1MjAyNyAtNjA2MTg1MyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDk1IHJlbWFpbmRlciAtMjk0Ljk5NDM1MkUrMzQ2NDUyMDI3IC02MDYxODUzLjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwOTUgc3VidHJhY3QgLTI5NC45OTQzNTJFKzM0NjQ1MjAyNyAtNjA2MTg1My4wIC0+IC0yLjk0OTk0MzUyRSszNDY0NTIwMjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMDk2IGFkZCAzMjk1NzkxMTQgMTQ2NzgwNTQ4LiAtPiA0NzYzNTk2NjIKK3hjb20wOTYgY29tcGFyZSAzMjk1NzkxMTQgMTQ2NzgwNTQ4LiAtPiAxCit4ZGl2MDk2IGRpdmlkZSAzMjk1NzkxMTQgMTQ2NzgwNTQ4LiAtPiAyLjI0NTM4Njg2IEluZXhhY3QgUm91bmRlZAoreGR2aTA5NiBkaXZpZGVpbnQgMzI5NTc5MTE0IDE0Njc4MDU0OC4gLT4gMgoreG11bDA5NiBtdWx0aXBseSAzMjk1NzkxMTQgMTQ2NzgwNTQ4LiAtPiA0LjgzNzU4MDMwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwOTYgcG93ZXIgMzI5NTc5MTE0IDE0Njc4MDU0OCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wOTYgcmVtYWluZGVyIDMyOTU3OTExNCAxNDY3ODA1NDguIC0+IDM2MDE4MDE4Cit4c3ViMDk2IHN1YnRyYWN0IDMyOTU3OTExNCAxNDY3ODA1NDguIC0+IDE4Mjc5ODU2NgoreGFkZDA5NyBhZGQgLTc4OTkwNC42ODZFLTIxNzIyNTAwMCAtMTk5MS4wNzE4MUUtODQwODAwNTkgLT4gLTEuOTkxMDcxODFFLTg0MDgwMDU2IEluZXhhY3QgUm91bmRlZAoreGNvbTA5NyBjb21wYXJlIC03ODk5MDQuNjg2RS0yMTcyMjUwMDAgLTE5OTEuMDcxODFFLTg0MDgwMDU5IC0+IDEKK3hkaXYwOTcgZGl2aWRlIC03ODk5MDQuNjg2RS0yMTcyMjUwMDAgLTE5OTEuMDcxODFFLTg0MDgwMDU5IC0+IDMuOTY3MjMzNTRFLTEzMzE0NDkzOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwOTcgZGl2aWRlaW50IC03ODk5MDQuNjg2RS0yMTcyMjUwMDAgLTE5OTEuMDcxODFFLTg0MDgwMDU5IC0+IDAKK3htdWwwOTcgbXVsdGlwbHkgLTc4OTkwNC42ODZFLTIxNzIyNTAwMCAtMTk5MS4wNzE4MUUtODQwODAwNTkgLT4gMS41NzI3NTY5NUUtMzAxMzA1MDUwIEluZXhhY3QgUm91bmRlZAoreHBvdzA5NyBwb3dlciAtNzg5OTA0LjY4NkUtMjE3MjI1MDAwIC0yIC0+IDEuNjAyNjk0MDNFKzQzNDQ0OTk4OCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wOTcgcmVtYWluZGVyIC03ODk5MDQuNjg2RS0yMTcyMjUwMDAgLTE5OTEuMDcxODFFLTg0MDgwMDU5IC0+IC03Ljg5OTA0Njg2RS0yMTcyMjQ5OTUKK3hzdWIwOTcgc3VidHJhY3QgLTc4OTkwNC42ODZFLTIxNzIyNTAwMCAtMTk5MS4wNzE4MUUtODQwODAwNTkgLT4gMS45OTEwNzE4MUUtODQwODAwNTYgSW5leGFjdCBSb3VuZGVkCit4YWRkMDk4IGFkZCA1OTg5My4zNTQ0IC00MDg1OTU4NjggLT4gLTQwODUzNTk3NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wOTggY29tcGFyZSA1OTg5My4zNTQ0IC00MDg1OTU4NjggLT4gMQoreGRpdjA5OCBkaXZpZGUgNTk4OTMuMzU0NCAtNDA4NTk1ODY4IC0+IC0wLjAwMDE0NjU4MzM1OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwOTggZGl2aWRlaW50IDU5ODkzLjM1NDQgLTQwODU5NTg2OCAtPiAtMAoreG11bDA5OCBtdWx0aXBseSA1OTg5My4zNTQ0IC00MDg1OTU4NjggLT4gLTIuNDQ3MjE3NzFFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzA5OCBwb3dlciA1OTg5My4zNTQ0IC00MDg1OTU4NjggLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDk4IHJlbWFpbmRlciA1OTg5My4zNTQ0IC00MDg1OTU4NjggLT4gNTk4OTMuMzU0NAoreHN1YjA5OCBzdWJ0cmFjdCA1OTg5My4zNTQ0IC00MDg1OTU4NjggLT4gNDA4NjU1NzYxIEluZXhhY3QgUm91bmRlZAoreGFkZDA5OSBhZGQgMTI5Ljg3ODYxMyAtNTQ2NTIuNzI4OEUtOTYzNTY0OTQwIC0+IDEyOS44Nzg2MTMgSW5leGFjdCBSb3VuZGVkCit4Y29tMDk5IGNvbXBhcmUgMTI5Ljg3ODYxMyAtNTQ2NTIuNzI4OEUtOTYzNTY0OTQwIC0+IDEKK3hkaXYwOTkgZGl2aWRlIDEyOS44Nzg2MTMgLTU0NjUyLjcyODhFLTk2MzU2NDk0MCAtPiAtMi4zNzY0MzQxOEUrOTYzNTY0OTM3IEluZXhhY3QgUm91bmRlZAoreGR2aTA5OSBkaXZpZGVpbnQgMTI5Ljg3ODYxMyAtNTQ2NTIuNzI4OEUtOTYzNTY0OTQwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDk5IG11bHRpcGx5IDEyOS44Nzg2MTMgLTU0NjUyLjcyODhFLTk2MzU2NDk0MCAtPiAtNy4wOTgyMjA2MUUtOTYzNTY0OTM0IEluZXhhY3QgUm91bmRlZAoreHBvdzA5OSBwb3dlciAxMjkuODc4NjEzIC01IC0+IDIuNzA1OTAwMjlFLTExIEluZXhhY3QgUm91bmRlZAoreHJlbTA5OSByZW1haW5kZXIgMTI5Ljg3ODYxMyAtNTQ2NTIuNzI4OEUtOTYzNTY0OTQwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDk5IHN1YnRyYWN0IDEyOS44Nzg2MTMgLTU0NjUyLjcyODhFLTk2MzU2NDk0MCAtPiAxMjkuODc4NjEzIEluZXhhY3QgUm91bmRlZAoreGFkZDEwMCBhZGQgOTg2Ni45OTIwOCA3MDg3NTY1MDEuIC0+IDcwODc2NjM2OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMDAgY29tcGFyZSA5ODY2Ljk5MjA4IDcwODc1NjUwMS4gLT4gLTEKK3hkaXYxMDAgZGl2aWRlIDk4NjYuOTkyMDggNzA4NzU2NTAxLiAtPiAwLjAwMDAxMzkyMTU1NDMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTAwIGRpdmlkZWludCA5ODY2Ljk5MjA4IDcwODc1NjUwMS4gLT4gMAoreG11bDEwMCBtdWx0aXBseSA5ODY2Ljk5MjA4IDcwODc1NjUwMS4gLT4gNi45OTMyOTQ3OEUrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93MTAwIHBvd2VyIDk4NjYuOTkyMDggNzA4NzU2NTAxIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTEwMCByZW1haW5kZXIgOTg2Ni45OTIwOCA3MDg3NTY1MDEuIC0+IDk4NjYuOTkyMDgKK3hzdWIxMDAgc3VidHJhY3QgOTg2Ni45OTIwOCA3MDg3NTY1MDEuIC0+IC03MDg3NDY2MzQgSW5leGFjdCBSb3VuZGVkCit4YWRkMTAxIGFkZCAtNzg4MTAuNjI5NyAtMzk5ODg0LjY4IC0+IC00Nzg2OTUuMzEwIEluZXhhY3QgUm91bmRlZAoreGNvbTEwMSBjb21wYXJlIC03ODgxMC42Mjk3IC0zOTk4ODQuNjggLT4gMQoreGRpdjEwMSBkaXZpZGUgLTc4ODEwLjYyOTcgLTM5OTg4NC42OCAtPiAwLjE5NzA4MzM5MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMDEgZGl2aWRlaW50IC03ODgxMC42Mjk3IC0zOTk4ODQuNjggLT4gMAoreG11bDEwMSBtdWx0aXBseSAtNzg4MTAuNjI5NyAtMzk5ODg0LjY4IC0+IDMuMTUxNTE2MzRFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzEwMSBwb3dlciAtNzg4MTAuNjI5NyAtMzk5ODg1IC0+IC0xLjU0MjUyNDA4RS0xOTU4MDcxIEluZXhhY3QgUm91bmRlZAoreHJlbTEwMSByZW1haW5kZXIgLTc4ODEwLjYyOTcgLTM5OTg4NC42OCAtPiAtNzg4MTAuNjI5NworeHN1YjEwMSBzdWJ0cmFjdCAtNzg4MTAuNjI5NyAtMzk5ODg0LjY4IC0+IDMyMTA3NC4wNTAgSW5leGFjdCBSb3VuZGVkCit4YWRkMTAyIGFkZCA0MDkxODk3NjEgLTc3MS40NzE0NjAgLT4gNDA5MTg4OTkwIEluZXhhY3QgUm91bmRlZAoreGNvbTEwMiBjb21wYXJlIDQwOTE4OTc2MSAtNzcxLjQ3MTQ2MCAtPiAxCit4ZGl2MTAyIGRpdmlkZSA0MDkxODk3NjEgLTc3MS40NzE0NjAgLT4gLTUzMDQwMS42ODMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTAyIGRpdmlkZWludCA0MDkxODk3NjEgLTc3MS40NzE0NjAgLT4gLTUzMDQwMQoreG11bDEwMiBtdWx0aXBseSA0MDkxODk3NjEgLTc3MS40NzE0NjAgLT4gLTMuMTU2NzgyMjJFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzEwMiBwb3dlciA0MDkxODk3NjEgLTc3MSAtPiAxLjYwNjk4NDE0RS02NjQwIEluZXhhY3QgUm91bmRlZAoreHJlbTEwMiByZW1haW5kZXIgNDA5MTg5NzYxIC03NzEuNDcxNDYwIC0+IDUyNy4xNDQ1NDAKK3hzdWIxMDIgc3VidHJhY3QgNDA5MTg5NzYxIC03NzEuNDcxNDYwIC0+IDQwOTE5MDUzMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMDMgYWRkIC0xLjY4NzQ4ODM4IDQ2MC40NjkyNCAtPiA0NTguNzgxNzUyIEluZXhhY3QgUm91bmRlZAoreGNvbTEwMyBjb21wYXJlIC0xLjY4NzQ4ODM4IDQ2MC40NjkyNCAtPiAtMQoreGRpdjEwMyBkaXZpZGUgLTEuNjg3NDg4MzggNDYwLjQ2OTI0IC0+IC0wLjAwMzY2NDcxNDY3IEluZXhhY3QgUm91bmRlZAoreGR2aTEwMyBkaXZpZGVpbnQgLTEuNjg3NDg4MzggNDYwLjQ2OTI0IC0+IC0wCit4bXVsMTAzIG11bHRpcGx5IC0xLjY4NzQ4ODM4IDQ2MC40NjkyNCAtPiAtNzc3LjAzNjQ5MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMDMgcG93ZXIgLTEuNjg3NDg4MzggNDYwIC0+IDMuMzk0NDA2NDhFKzEwNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMDMgcmVtYWluZGVyIC0xLjY4NzQ4ODM4IDQ2MC40NjkyNCAtPiAtMS42ODc0ODgzOAoreHN1YjEwMyBzdWJ0cmFjdCAtMS42ODc0ODgzOCA0NjAuNDY5MjQgLT4gLTQ2Mi4xNTY3MjggSW5leGFjdCBSb3VuZGVkCit4YWRkMTA0IGFkZCA1NTM1MjcyOTYuIC03OTI0LjQwMTg1IC0+IDU1MzUxOTM3MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMDQgY29tcGFyZSA1NTM1MjcyOTYuIC03OTI0LjQwMTg1IC0+IDEKK3hkaXYxMDQgZGl2aWRlIDU1MzUyNzI5Ni4gLTc5MjQuNDAxODUgLT4gLTY5ODUwLjk4NzcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTA0IGRpdmlkZWludCA1NTM1MjcyOTYuIC03OTI0LjQwMTg1IC0+IC02OTg1MAoreG11bDEwNCBtdWx0aXBseSA1NTM1MjcyOTYuIC03OTI0LjQwMTg1IC0+IC00LjM4NjM3MjczRSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMDQgcG93ZXIgNTUzNTI3Mjk2LiAtNzkyNCAtPiAyLjMyMzk3MjE0RS02OTI4MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMDQgcmVtYWluZGVyIDU1MzUyNzI5Ni4gLTc5MjQuNDAxODUgLT4gNzgyNi43Nzc1MAoreHN1YjEwNCBzdWJ0cmFjdCA1NTM1MjcyOTYuIC03OTI0LjQwMTg1IC0+IDU1MzUzNTIyMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMDUgYWRkIC0zOC43NDY1MjA3IDY0OTM2LjI5NDIgLT4gNjQ4OTcuNTQ3NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMDUgY29tcGFyZSAtMzguNzQ2NTIwNyA2NDkzNi4yOTQyIC0+IC0xCit4ZGl2MTA1IGRpdmlkZSAtMzguNzQ2NTIwNyA2NDkzNi4yOTQyIC0+IC0wLjAwMDU5NjY4NTEyMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMDUgZGl2aWRlaW50IC0zOC43NDY1MjA3IDY0OTM2LjI5NDIgLT4gLTAKK3htdWwxMDUgbXVsdGlwbHkgLTM4Ljc0NjUyMDcgNjQ5MzYuMjk0MiAtPiAtMjUxNjA1NS40NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMDUgcG93ZXIgLTM4Ljc0NjUyMDcgNjQ5MzYgLT4gMy4wMTUwMDc2MkUrMTAzMTMzIEluZXhhY3QgUm91bmRlZAoreHJlbTEwNSByZW1haW5kZXIgLTM4Ljc0NjUyMDcgNjQ5MzYuMjk0MiAtPiAtMzguNzQ2NTIwNworeHN1YjEwNSBzdWJ0cmFjdCAtMzguNzQ2NTIwNyA2NDkzNi4yOTQyIC0+IC02NDk3NS4wNDA3IEluZXhhY3QgUm91bmRlZAoreGFkZDEwNiBhZGQgLTIwMTA3NS4yNDggODQ1LjY2MzkyOCAtPiAtMjAwMjI5LjU4NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMDYgY29tcGFyZSAtMjAxMDc1LjI0OCA4NDUuNjYzOTI4IC0+IC0xCit4ZGl2MTA2IGRpdmlkZSAtMjAxMDc1LjI0OCA4NDUuNjYzOTI4IC0+IC0yMzcuNzcyMDUzIEluZXhhY3QgUm91bmRlZAoreGR2aTEwNiBkaXZpZGVpbnQgLTIwMTA3NS4yNDggODQ1LjY2MzkyOCAtPiAtMjM3Cit4bXVsMTA2IG11bHRpcGx5IC0yMDEwNzUuMjQ4IDg0NS42NjM5MjggLT4gLTE3MDA0MjA4NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMDYgcG93ZXIgLTIwMTA3NS4yNDggODQ2IC0+IDQuMzc5MTE3NjdFKzQ0ODYgSW5leGFjdCBSb3VuZGVkCit4cmVtMTA2IHJlbWFpbmRlciAtMjAxMDc1LjI0OCA4NDUuNjYzOTI4IC0+IC02NTIuODk3MDY0Cit4c3ViMTA2IHN1YnRyYWN0IC0yMDEwNzUuMjQ4IDg0NS42NjM5MjggLT4gLTIwMTkyMC45MTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTA3IGFkZCA5MTA0OC40NTU5IDc1OTUzNjA5LjMgLT4gNzYwNDQ2NTcuOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMDcgY29tcGFyZSA5MTA0OC40NTU5IDc1OTUzNjA5LjMgLT4gLTEKK3hkaXYxMDcgZGl2aWRlIDkxMDQ4LjQ1NTkgNzU5NTM2MDkuMyAtPiAwLjAwMTE5ODczNzcxIEluZXhhY3QgUm91bmRlZAoreGR2aTEwNyBkaXZpZGVpbnQgOTEwNDguNDU1OSA3NTk1MzYwOS4zIC0+IDAKK3htdWwxMDcgbXVsdGlwbHkgOTEwNDguNDU1OSA3NTk1MzYwOS4zIC0+IDYuOTE1NDU4ODVFKzEyIEluZXhhY3QgUm91bmRlZAoreHBvdzEwNyBwb3dlciA5MTA0OC40NTU5IDc1OTUzNjA5IC0+IDYuOTQ0Njc3NDZFKzM3NjY3NDY1MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMDcgcmVtYWluZGVyIDkxMDQ4LjQ1NTkgNzU5NTM2MDkuMyAtPiA5MTA0OC40NTU5Cit4c3ViMTA3IHN1YnRyYWN0IDkxMDQ4LjQ1NTkgNzU5NTM2MDkuMyAtPiAtNzU4NjI1NjAuOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMDggYWRkIDY4OTgyNzMuODZFLTI1MjA5NzQ2MCAxNS4zNDU2MTk2IC0+IDE1LjM0NTYxOTYgSW5leGFjdCBSb3VuZGVkCit4Y29tMTA4IGNvbXBhcmUgNjg5ODI3My44NkUtMjUyMDk3NDYwIDE1LjM0NTYxOTYgLT4gLTEKK3hkaXYxMDggZGl2aWRlIDY4OTgyNzMuODZFLTI1MjA5NzQ2MCAxNS4zNDU2MTk2IC0+IDQuNDk1MjcyMjlFLTI1MjA5NzQ1NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMDggZGl2aWRlaW50IDY4OTgyNzMuODZFLTI1MjA5NzQ2MCAxNS4zNDU2MTk2IC0+IDAKK3htdWwxMDggbXVsdGlwbHkgNjg5ODI3My44NkUtMjUyMDk3NDYwIDE1LjM0NTYxOTYgLT4gMS4wNTg1ODI4N0UtMjUyMDk3NDUyIEluZXhhY3QgUm91bmRlZAoreHBvdzEwOCBwb3dlciA2ODk4MjczLjg2RS0yNTIwOTc0NjAgMTUgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTA4IHJlbWFpbmRlciA2ODk4MjczLjg2RS0yNTIwOTc0NjAgMTUuMzQ1NjE5NiAtPiA2Ljg5ODI3Mzg2RS0yNTIwOTc0NTQKK3hzdWIxMDggc3VidHJhY3QgNjg5ODI3My44NkUtMjUyMDk3NDYwIDE1LjM0NTYxOTYgLT4gLTE1LjM0NTYxOTYgSW5leGFjdCBSb3VuZGVkCit4YWRkMTA5IGFkZCA4OC40MzcwMzQzIC05ODA3MDkxMDVFLTg2OTg5OTI4OSAtPiA4OC40MzcwMzQzIEluZXhhY3QgUm91bmRlZAoreGNvbTEwOSBjb21wYXJlIDg4LjQzNzAzNDMgLTk4MDcwOTEwNUUtODY5ODk5Mjg5IC0+IDEKK3hkaXYxMDkgZGl2aWRlIDg4LjQzNzAzNDMgLTk4MDcwOTEwNUUtODY5ODk5Mjg5IC0+IC05LjAxNzY2MjIwRSs4Njk4OTkyODEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTA5IGRpdmlkZWludCA4OC40MzcwMzQzIC05ODA3MDkxMDVFLTg2OTg5OTI4OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDEwOSBtdWx0aXBseSA4OC40MzcwMzQzIC05ODA3MDkxMDVFLTg2OTg5OTI4OSAtPiAtOC42NzMxMDA0OEUtODY5ODk5Mjc5IEluZXhhY3QgUm91bmRlZAoreHBvdzEwOSBwb3dlciA4OC40MzcwMzQzIC0xMCAtPiAzLjQxNzEwNDc5RS0yMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMDkgcmVtYWluZGVyIDg4LjQzNzAzNDMgLTk4MDcwOTEwNUUtODY5ODk5Mjg5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTA5IHN1YnRyYWN0IDg4LjQzNzAzNDMgLTk4MDcwOTEwNUUtODY5ODk5Mjg5IC0+IDg4LjQzNzAzNDMgSW5leGFjdCBSb3VuZGVkCit4YWRkMTEwIGFkZCAtMTc2NDMuMzkgMi4wMzUyNTY4RSszMDQ4NzEzMzEgLT4gMi4wMzUyNTY4MEUrMzA0ODcxMzMxIEluZXhhY3QgUm91bmRlZAoreGNvbTExMCBjb21wYXJlIC0xNzY0My4zOSAyLjAzNTI1NjhFKzMwNDg3MTMzMSAtPiAtMQoreGRpdjExMCBkaXZpZGUgLTE3NjQzLjM5IDIuMDM1MjU2OEUrMzA0ODcxMzMxIC0+IC04LjY2ODg3NjU4RS0zMDQ4NzEzMjggSW5leGFjdCBSb3VuZGVkCit4ZHZpMTEwIGRpdmlkZWludCAtMTc2NDMuMzkgMi4wMzUyNTY4RSszMDQ4NzEzMzEgLT4gLTAKK3htdWwxMTAgbXVsdGlwbHkgLTE3NjQzLjM5IDIuMDM1MjU2OEUrMzA0ODcxMzMxIC0+IC0zLjU5MDg4Mjk1RSszMDQ4NzEzMzUgSW5leGFjdCBSb3VuZGVkCit4cG93MTEwIHBvd2VyIC0xNzY0My4zOSAyIC0+IDMxMTI4OTIxMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMTAgcmVtYWluZGVyIC0xNzY0My4zOSAyLjAzNTI1NjhFKzMwNDg3MTMzMSAtPiAtMTc2NDMuMzkKK3hzdWIxMTAgc3VidHJhY3QgLTE3NjQzLjM5IDIuMDM1MjU2OEUrMzA0ODcxMzMxIC0+IC0yLjAzNTI1NjgwRSszMDQ4NzEzMzEgSW5leGFjdCBSb3VuZGVkCit4YWRkMTExIGFkZCA0NTg5Nzg1LjE2IDc0NTkuMDQyMzcgLT4gNDU5NzI0NC4yMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMTEgY29tcGFyZSA0NTg5Nzg1LjE2IDc0NTkuMDQyMzcgLT4gMQoreGRpdjExMSBkaXZpZGUgNDU4OTc4NS4xNiA3NDU5LjA0MjM3IC0+IDYxNS4zMzE2OTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTExIGRpdmlkZWludCA0NTg5Nzg1LjE2IDc0NTkuMDQyMzcgLT4gNjE1Cit4bXVsMTExIG11bHRpcGx5IDQ1ODk3ODUuMTYgNzQ1OS4wNDIzNyAtPiAzLjQyMzU0MDIwRSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMTEgcG93ZXIgNDU4OTc4NS4xNiA3NDU5IC0+IDIuMDM3OTUyNThFKzQ5NjkwIEluZXhhY3QgUm91bmRlZAoreHJlbTExMSByZW1haW5kZXIgNDU4OTc4NS4xNiA3NDU5LjA0MjM3IC0+IDI0NzQuMTAyNDUKK3hzdWIxMTEgc3VidHJhY3QgNDU4OTc4NS4xNiA3NDU5LjA0MjM3IC0+IDQ1ODIzMjYuMTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTEyIGFkZCAtNTEuMTYzMjA5MEUtNzUzOTY4MDgyIDguOTYyMDc0NzFFLTU4NTc5Nzg4NyAtPiA4Ljk2MjA3NDcxRS01ODU3OTc4ODcgSW5leGFjdCBSb3VuZGVkCit4Y29tMTEyIGNvbXBhcmUgLTUxLjE2MzIwOTBFLTc1Mzk2ODA4MiA4Ljk2MjA3NDcxRS01ODU3OTc4ODcgLT4gLTEKK3hkaXYxMTIgZGl2aWRlIC01MS4xNjMyMDkwRS03NTM5NjgwODIgOC45NjIwNzQ3MUUtNTg1Nzk3ODg3IC0+IC01LjcwODg1NzY4RS0xNjgxNzAxOTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTEyIGRpdmlkZWludCAtNTEuMTYzMjA5MEUtNzUzOTY4MDgyIDguOTYyMDc0NzFFLTU4NTc5Nzg4NyAtPiAtMAoreG11bDExMiBtdWx0aXBseSAtNTEuMTYzMjA5MEUtNzUzOTY4MDgyIDguOTYyMDc0NzFFLTU4NTc5Nzg4NyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cG93MTEyIHBvd2VyIC01MS4xNjMyMDkwRS03NTM5NjgwODIgOSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTEyIHJlbWFpbmRlciAtNTEuMTYzMjA5MEUtNzUzOTY4MDgyIDguOTYyMDc0NzFFLTU4NTc5Nzg4NyAtPiAtNS4xMTYzMjA5MEUtNzUzOTY4MDgxCit4c3ViMTEyIHN1YnRyYWN0IC01MS4xNjMyMDkwRS03NTM5NjgwODIgOC45NjIwNzQ3MUUtNTg1Nzk3ODg3IC0+IC04Ljk2MjA3NDcxRS01ODU3OTc4ODcgSW5leGFjdCBSb3VuZGVkCit4YWRkMTEzIGFkZCA5ODIuMjE3ODE3IDcyMjQ5MDkuNEUtNDUyNDM4MTYgLT4gOTgyLjIxNzgxNyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMTMgY29tcGFyZSA5ODIuMjE3ODE3IDcyMjQ5MDkuNEUtNDUyNDM4MTYgLT4gMQoreGRpdjExMyBkaXZpZGUgOTgyLjIxNzgxNyA3MjI0OTA5LjRFLTQ1MjQzODE2IC0+IDEuMzU5NDg4MDdFKzQ1MjQzODEyIEluZXhhY3QgUm91bmRlZAoreGR2aTExMyBkaXZpZGVpbnQgOTgyLjIxNzgxNyA3MjI0OTA5LjRFLTQ1MjQzODE2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTEzIG11bHRpcGx5IDk4Mi4yMTc4MTcgNzIyNDkwOS40RS00NTI0MzgxNiAtPiA3LjA5NjQzNDc0RS00NTI0MzgwNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMTMgcG93ZXIgOTgyLjIxNzgxNyA3IC0+IDguODE5NzE3MDlFKzIwIEluZXhhY3QgUm91bmRlZAoreHJlbTExMyByZW1haW5kZXIgOTgyLjIxNzgxNyA3MjI0OTA5LjRFLTQ1MjQzODE2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTEzIHN1YnRyYWN0IDk4Mi4yMTc4MTcgNzIyNDkwOS40RS00NTI0MzgxNiAtPiA5ODIuMjE3ODE3IEluZXhhY3QgUm91bmRlZAoreGFkZDExNCBhZGQgNTAzNzEyMDU2LiAtNTc0OTA3MDMuNUUrOTI0ODkwMTgzIC0+IC01Ljc0OTA3MDM1RSs5MjQ4OTAxOTAgSW5leGFjdCBSb3VuZGVkCit4Y29tMTE0IGNvbXBhcmUgNTAzNzEyMDU2LiAtNTc0OTA3MDMuNUUrOTI0ODkwMTgzIC0+IDEKK3hkaXYxMTQgZGl2aWRlIDUwMzcxMjA1Ni4gLTU3NDkwNzAzLjVFKzkyNDg5MDE4MyAtPiAtOC43NjE2MjYyM0UtOTI0ODkwMTgzIEluZXhhY3QgUm91bmRlZAoreGR2aTExNCBkaXZpZGVpbnQgNTAzNzEyMDU2LiAtNTc0OTA3MDMuNUUrOTI0ODkwMTgzIC0+IC0wCit4bXVsMTE0IG11bHRpcGx5IDUwMzcxMjA1Ni4gLTU3NDkwNzAzLjVFKzkyNDg5MDE4MyAtPiAtMi44OTU4NzYwNUUrOTI0ODkwMTk5IEluZXhhY3QgUm91bmRlZAoreHBvdzExNCBwb3dlciA1MDM3MTIwNTYuIC02IC0+IDYuMTIyMTc3NjRFLTUzIEluZXhhY3QgUm91bmRlZAoreHJlbTExNCByZW1haW5kZXIgNTAzNzEyMDU2LiAtNTc0OTA3MDMuNUUrOTI0ODkwMTgzIC0+IDUwMzcxMjA1NgoreHN1YjExNCBzdWJ0cmFjdCA1MDM3MTIwNTYuIC01NzQ5MDcwMy41RSs5MjQ4OTAxODMgLT4gNS43NDkwNzAzNUUrOTI0ODkwMTkwIEluZXhhY3QgUm91bmRlZAoreGFkZDExNSBhZGQgODgzLjg0OTIyMyAyNDkyNTkxNzEgLT4gMjQ5MjYwMDU1IEluZXhhY3QgUm91bmRlZAoreGNvbTExNSBjb21wYXJlIDg4My44NDkyMjMgMjQ5MjU5MTcxIC0+IC0xCit4ZGl2MTE1IGRpdmlkZSA4ODMuODQ5MjIzIDI0OTI1OTE3MSAtPiAwLjAwMDAwMzU0NTkwNDUzIEluZXhhY3QgUm91bmRlZAoreGR2aTExNSBkaXZpZGVpbnQgODgzLjg0OTIyMyAyNDkyNTkxNzEgLT4gMAoreG11bDExNSBtdWx0aXBseSA4ODMuODQ5MjIzIDI0OTI1OTE3MSAtPiAyLjIwMzA3NTI1RSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMTUgcG93ZXIgODgzLjg0OTIyMyAyNDkyNTkxNzEgLT4gNS4xNTY0Mjg0NEUrNzM0NDExNzgzIEluZXhhY3QgUm91bmRlZAoreHJlbTExNSByZW1haW5kZXIgODgzLjg0OTIyMyAyNDkyNTkxNzEgLT4gODgzLjg0OTIyMworeHN1YjExNSBzdWJ0cmFjdCA4ODMuODQ5MjIzIDI0OTI1OTE3MSAtPiAtMjQ5MjU4Mjg3IEluZXhhY3QgUm91bmRlZAoreGFkZDExNiBhZGQgMjQ1LjA5Mjg1M0UrODcyNjQyODc0IDgyODE5NS4xNTJFKzQxOTc3MTUzMiAtPiAyLjQ1MDkyODUzRSs4NzI2NDI4NzYgSW5leGFjdCBSb3VuZGVkCit4Y29tMTE2IGNvbXBhcmUgMjQ1LjA5Mjg1M0UrODcyNjQyODc0IDgyODE5NS4xNTJFKzQxOTc3MTUzMiAtPiAxCit4ZGl2MTE2IGRpdmlkZSAyNDUuMDkyODUzRSs4NzI2NDI4NzQgODI4MTk1LjE1MkUrNDE5NzcxNTMyIC0+IDIuOTU5MzYxMTJFKzQ1Mjg3MTMzOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMTYgZGl2aWRlaW50IDI0NS4wOTI4NTNFKzg3MjY0Mjg3NCA4MjgxOTUuMTUyRSs0MTk3NzE1MzIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxMTYgbXVsdGlwbHkgMjQ1LjA5Mjg1M0UrODcyNjQyODc0IDgyODE5NS4xNTJFKzQxOTc3MTUzMiAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hwb3cxMTYgcG93ZXIgMjQ1LjA5Mjg1M0UrODcyNjQyODc0IDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMTE2IHJlbWFpbmRlciAyNDUuMDkyODUzRSs4NzI2NDI4NzQgODI4MTk1LjE1MkUrNDE5NzcxNTMyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTE2IHN1YnRyYWN0IDI0NS4wOTI4NTNFKzg3MjY0Mjg3NCA4MjgxOTUuMTUyRSs0MTk3NzE1MzIgLT4gMi40NTA5Mjg1M0UrODcyNjQyODc2IEluZXhhY3QgUm91bmRlZAoreGFkZDExNyBhZGQgLTgzNjU4NjM4LjZFKzcyODU1MTkyOCAyOTUyNDc4LjQyIC0+IC04LjM2NTg2Mzg2RSs3Mjg1NTE5MzUgSW5leGFjdCBSb3VuZGVkCit4Y29tMTE3IGNvbXBhcmUgLTgzNjU4NjM4LjZFKzcyODU1MTkyOCAyOTUyNDc4LjQyIC0+IC0xCit4ZGl2MTE3IGRpdmlkZSAtODM2NTg2MzguNkUrNzI4NTUxOTI4IDI5NTI0NzguNDIgLT4gLTIuODMzNTA1NTFFKzcyODU1MTkyOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMTcgZGl2aWRlaW50IC04MzY1ODYzOC42RSs3Mjg1NTE5MjggMjk1MjQ3OC40MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDExNyBtdWx0aXBseSAtODM2NTg2MzguNkUrNzI4NTUxOTI4IDI5NTI0NzguNDIgLT4gLTIuNDcwMDAzMjVFKzcyODU1MTk0MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMTcgcG93ZXIgLTgzNjU4NjM4LjZFKzcyODU1MTkyOCAyOTUyNDc4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTExNyByZW1haW5kZXIgLTgzNjU4NjM4LjZFKzcyODU1MTkyOCAyOTUyNDc4LjQyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTE3IHN1YnRyYWN0IC04MzY1ODYzOC42RSs3Mjg1NTE5MjggMjk1MjQ3OC40MiAtPiAtOC4zNjU4NjM4NkUrNzI4NTUxOTM1IEluZXhhY3QgUm91bmRlZAoreGFkZDExOCBhZGQgLTYyOTE3ODAuOTcgMjY5OTY3LjM5NEUtMjIwMDA4MTcgLT4gLTYyOTE3ODAuOTcgSW5leGFjdCBSb3VuZGVkCit4Y29tMTE4IGNvbXBhcmUgLTYyOTE3ODAuOTcgMjY5OTY3LjM5NEUtMjIwMDA4MTcgLT4gLTEKK3hkaXYxMTggZGl2aWRlIC02MjkxNzgwLjk3IDI2OTk2Ny4zOTRFLTIyMDAwODE3IC0+IC0yLjMzMDU3MDY5RSsyMjAwMDgxOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMTggZGl2aWRlaW50IC02MjkxNzgwLjk3IDI2OTk2Ny4zOTRFLTIyMDAwODE3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTE4IG11bHRpcGx5IC02MjkxNzgwLjk3IDI2OTk2Ny4zOTRFLTIyMDAwODE3IC0+IC0xLjY5ODU3NTcxRS0yMjAwMDgwNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMTggcG93ZXIgLTYyOTE3ODAuOTcgMyAtPiAtMi40OTA2OTYzNkUrMjAgSW5leGFjdCBSb3VuZGVkCit4cmVtMTE4IHJlbWFpbmRlciAtNjI5MTc4MC45NyAyNjk5NjcuMzk0RS0yMjAwMDgxNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjExOCBzdWJ0cmFjdCAtNjI5MTc4MC45NyAyNjk5NjcuMzk0RS0yMjAwMDgxNyAtPiAtNjI5MTc4MC45NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMTkgYWRkIDk3ODU3MTM0OC5FKzIyMjM4MjU0NyA2MDA2LjE5MzcwIC0+IDkuNzg1NzEzNDhFKzIyMjM4MjU1NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMTkgY29tcGFyZSA5Nzg1NzEzNDguRSsyMjIzODI1NDcgNjAwNi4xOTM3MCAtPiAxCit4ZGl2MTE5IGRpdmlkZSA5Nzg1NzEzNDguRSsyMjIzODI1NDcgNjAwNi4xOTM3MCAtPiAxLjYyOTI3MDM4RSsyMjIzODI1NTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTE5IGRpdmlkZWludCA5Nzg1NzEzNDguRSsyMjIzODI1NDcgNjAwNi4xOTM3MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDExOSBtdWx0aXBseSA5Nzg1NzEzNDguRSsyMjIzODI1NDcgNjAwNi4xOTM3MCAtPiA1Ljg3NzQ4OTA3RSsyMjIzODI1NTkgSW5leGFjdCBSb3VuZGVkCit4cG93MTE5IHBvd2VyIDk3ODU3MTM0OC5FKzIyMjM4MjU0NyA2MDA2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTExOSByZW1haW5kZXIgOTc4NTcxMzQ4LkUrMjIyMzgyNTQ3IDYwMDYuMTkzNzAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxMTkgc3VidHJhY3QgOTc4NTcxMzQ4LkUrMjIyMzgyNTQ3IDYwMDYuMTkzNzAgLT4gOS43ODU3MTM0OEUrMjIyMzgyNTU1IEluZXhhY3QgUm91bmRlZAoreGFkZDEyMCBhZGQgMTQyMzkwMjkuIC0zNjUyNy4yMjIxIC0+IDE0MjAyNTAxLjggSW5leGFjdCBSb3VuZGVkCit4Y29tMTIwIGNvbXBhcmUgMTQyMzkwMjkuIC0zNjUyNy4yMjIxIC0+IDEKK3hkaXYxMjAgZGl2aWRlIDE0MjM5MDI5LiAtMzY1MjcuMjIyMSAtPiAtMzg5LjgxOTY1MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMjAgZGl2aWRlaW50IDE0MjM5MDI5LiAtMzY1MjcuMjIyMSAtPiAtMzg5Cit4bXVsMTIwIG11bHRpcGx5IDE0MjM5MDI5LiAtMzY1MjcuMjIyMSAtPiAtNS4yMDExMjE3NUUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MTIwIHBvd2VyIDE0MjM5MDI5LiAtMzY1MjcgLT4gNi42NDI5MjczMUUtMjYxMjk2IEluZXhhY3QgUm91bmRlZAoreHJlbTEyMCByZW1haW5kZXIgMTQyMzkwMjkuIC0zNjUyNy4yMjIxIC0+IDI5OTM5LjYwMzEKK3hzdWIxMjAgc3VidHJhY3QgMTQyMzkwMjkuIC0zNjUyNy4yMjIxIC0+IDE0Mjc1NTU2LjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTIxIGFkZCA3MjMzMy4yNjU0RS01NDQ0MjU1NDggLTY5MC42NjQ4MzZFKzY2MjE1NTEyMCAtPiAtNi45MDY2NDgzNkUrNjYyMTU1MTIyIEluZXhhY3QgUm91bmRlZAoreGNvbTEyMSBjb21wYXJlIDcyMzMzLjI2NTRFLTU0NDQyNTU0OCAtNjkwLjY2NDgzNkUrNjYyMTU1MTIwIC0+IDEKK3hkaXYxMjEgZGl2aWRlIDcyMzMzLjI2NTRFLTU0NDQyNTU0OCAtNjkwLjY2NDgzNkUrNjYyMTU1MTIwIC0+IC0wRS0xMDAwMDAwMDA3IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKK3hkdmkxMjEgZGl2aWRlaW50IDcyMzMzLjI2NTRFLTU0NDQyNTU0OCAtNjkwLjY2NDgzNkUrNjYyMTU1MTIwIC0+IC0wCit4bXVsMTIxIG11bHRpcGx5IDcyMzMzLjI2NTRFLTU0NDQyNTU0OCAtNjkwLjY2NDgzNkUrNjYyMTU1MTIwIC0+IC00Ljk5NTgwNDI5RSsxMTc3Mjk1NzkgSW5leGFjdCBSb3VuZGVkCit4cG93MTIxIHBvd2VyIDcyMzMzLjI2NTRFLTU0NDQyNTU0OCAtNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMjEgcmVtYWluZGVyIDcyMzMzLjI2NTRFLTU0NDQyNTU0OCAtNjkwLjY2NDgzNkUrNjYyMTU1MTIwIC0+IDcuMjMzMzI2NTRFLTU0NDQyNTU0NAoreHN1YjEyMSBzdWJ0cmFjdCA3MjMzMy4yNjU0RS01NDQ0MjU1NDggLTY5MC42NjQ4MzZFKzY2MjE1NTEyMCAtPiA2LjkwNjY0ODM2RSs2NjIxNTUxMjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTIyIGFkZCAtMzc3MjEuMTU2N0UtMTE1Nzg3MzQxIC04Mjg5NDk4NjRFLTc2MjUxNzQ3IC0+IC04LjI4OTQ5ODY0RS03NjI1MTczOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMjIgY29tcGFyZSAtMzc3MjEuMTU2N0UtMTE1Nzg3MzQxIC04Mjg5NDk4NjRFLTc2MjUxNzQ3IC0+IDEKK3hkaXYxMjIgZGl2aWRlIC0zNzcyMS4xNTY3RS0xMTU3ODczNDEgLTgyODk0OTg2NEUtNzYyNTE3NDcgLT4gNC41NTA0NzUwNUUtMzk1MzU1OTkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTIyIGRpdmlkZWludCAtMzc3MjEuMTU2N0UtMTE1Nzg3MzQxIC04Mjg5NDk4NjRFLTc2MjUxNzQ3IC0+IDAKK3htdWwxMjIgbXVsdGlwbHkgLTM3NzIxLjE1NjdFLTExNTc4NzM0MSAtODI4OTQ5ODY0RS03NjI1MTc0NyAtPiAzLjEyNjg5NDc3RS0xOTIwMzkwNzUgSW5leGFjdCBSb3VuZGVkCit4cG93MTIyIHBvd2VyIC0zNzcyMS4xNTY3RS0xMTU3ODczNDEgLTggLT4gMi40Mzk2MDc2NUUrOTI2Mjk4NjkxIEluZXhhY3QgUm91bmRlZAoreHJlbTEyMiByZW1haW5kZXIgLTM3NzIxLjE1NjdFLTExNTc4NzM0MSAtODI4OTQ5ODY0RS03NjI1MTc0NyAtPiAtMy43NzIxMTU2N0UtMTE1Nzg3MzM3Cit4c3ViMTIyIHN1YnRyYWN0IC0zNzcyMS4xNTY3RS0xMTU3ODczNDEgLTgyODk0OTg2NEUtNzYyNTE3NDcgLT4gOC4yODk0OTg2NEUtNzYyNTE3MzkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTIzIGFkZCAtMjA3ODg1Mi44M0UtNjQ3MDgwMDg5IC0xMTk3Nzk4NTguRSs3MzQ2NjU0NjEgLT4gLTEuMTk3Nzk4NThFKzczNDY2NTQ2OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMjMgY29tcGFyZSAtMjA3ODg1Mi44M0UtNjQ3MDgwMDg5IC0xMTk3Nzk4NTguRSs3MzQ2NjU0NjEgLT4gMQoreGRpdjEyMyBkaXZpZGUgLTIwNzg4NTIuODNFLTY0NzA4MDA4OSAtMTE5Nzc5ODU4LkUrNzM0NjY1NDYxIC0+IDBFLTEwMDAwMDAwMDcgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAoreGR2aTEyMyBkaXZpZGVpbnQgLTIwNzg4NTIuODNFLTY0NzA4MDA4OSAtMTE5Nzc5ODU4LkUrNzM0NjY1NDYxIC0+IDAKK3htdWwxMjMgbXVsdGlwbHkgLTIwNzg4NTIuODNFLTY0NzA4MDA4OSAtMTE5Nzc5ODU4LkUrNzM0NjY1NDYxIC0+IDIuNDkwMDQ2OTdFKzg3NTg1Mzg2IEluZXhhY3QgUm91bmRlZAoreHBvdzEyMyBwb3dlciAtMjA3ODg1Mi44M0UtNjQ3MDgwMDg5IC0xIC0+IC00LjgxMDM0NTMzRSs2NDcwODAwODIgSW5leGFjdCBSb3VuZGVkCit4cmVtMTIzIHJlbWFpbmRlciAtMjA3ODg1Mi44M0UtNjQ3MDgwMDg5IC0xMTk3Nzk4NTguRSs3MzQ2NjU0NjEgLT4gLTIuMDc4ODUyODNFLTY0NzA4MDA4MworeHN1YjEyMyBzdWJ0cmFjdCAtMjA3ODg1Mi44M0UtNjQ3MDgwMDg5IC0xMTk3Nzk4NTguRSs3MzQ2NjU0NjEgLT4gMS4xOTc3OTg1OEUrNzM0NjY1NDY5IEluZXhhY3QgUm91bmRlZAoreGFkZDEyNCBhZGQgLTc5MTQ1LjM2MjUgLTc3MTguNTczMDcgLT4gLTg2ODYzLjkzNTYgSW5leGFjdCBSb3VuZGVkCit4Y29tMTI0IGNvbXBhcmUgLTc5MTQ1LjM2MjUgLTc3MTguNTczMDcgLT4gLTEKK3hkaXYxMjQgZGl2aWRlIC03OTE0NS4zNjI1IC03NzE4LjU3MzA3IC0+IDEwLjI1Mzg4NTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTI0IGRpdmlkZWludCAtNzkxNDUuMzYyNSAtNzcxOC41NzMwNyAtPiAxMAoreG11bDEyNCBtdWx0aXBseSAtNzkxNDUuMzYyNSAtNzcxOC41NzMwNyAtPiA2MTA4ODkyNjQgSW5leGFjdCBSb3VuZGVkCit4cG93MTI0IHBvd2VyIC03OTE0NS4zNjI1IC03NzE5IC0+IC0xLjEzMTgxOTQxRS0zNzgxMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMjQgcmVtYWluZGVyIC03OTE0NS4zNjI1IC03NzE4LjU3MzA3IC0+IC0xOTU5LjYzMTgwCit4c3ViMTI0IHN1YnRyYWN0IC03OTE0NS4zNjI1IC03NzE4LjU3MzA3IC0+IC03MTQyNi43ODk0IEluZXhhY3QgUm91bmRlZAoreGFkZDEyNSBhZGQgMjEwMzg5MC40OUUrOTU5MjQ3MjM3IDIwMDI0LjMwMTcgLT4gMi4xMDM4OTA0OUUrOTU5MjQ3MjQzIEluZXhhY3QgUm91bmRlZAoreGNvbTEyNSBjb21wYXJlIDIxMDM4OTAuNDlFKzk1OTI0NzIzNyAyMDAyNC4zMDE3IC0+IDEKK3hkaXYxMjUgZGl2aWRlIDIxMDM4OTAuNDlFKzk1OTI0NzIzNyAyMDAyNC4zMDE3IC0+IDEuMDUwNjY4NTlFKzk1OTI0NzIzOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMjUgZGl2aWRlaW50IDIxMDM4OTAuNDlFKzk1OTI0NzIzNyAyMDAyNC4zMDE3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTI1IG11bHRpcGx5IDIxMDM4OTAuNDlFKzk1OTI0NzIzNyAyMDAyNC4zMDE3IC0+IDQuMjEyODkzNzlFKzk1OTI0NzI0NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMjUgcG93ZXIgMjEwMzg5MC40OUUrOTU5MjQ3MjM3IDIwMDI0IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTEyNSByZW1haW5kZXIgMjEwMzg5MC40OUUrOTU5MjQ3MjM3IDIwMDI0LjMwMTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxMjUgc3VidHJhY3QgMjEwMzg5MC40OUUrOTU5MjQ3MjM3IDIwMDI0LjMwMTcgLT4gMi4xMDM4OTA0OUUrOTU5MjQ3MjQzIEluZXhhY3QgUm91bmRlZAoreGFkZDEyNiBhZGQgOTExMjQ5NTU3IDc5ODEwODA0LjkgLT4gOTkxMDYwMzYyIEluZXhhY3QgUm91bmRlZAoreGNvbTEyNiBjb21wYXJlIDkxMTI0OTU1NyA3OTgxMDgwNC45IC0+IDEKK3hkaXYxMjYgZGl2aWRlIDkxMTI0OTU1NyA3OTgxMDgwNC45IC0+IDExLjQxNzYyMTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTI2IGRpdmlkZWludCA5MTEyNDk1NTcgNzk4MTA4MDQuOSAtPiAxMQoreG11bDEyNiBtdWx0aXBseSA5MTEyNDk1NTcgNzk4MTA4MDQuOSAtPiA3LjI3Mjc1NjA2RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMjYgcG93ZXIgOTExMjQ5NTU3IDc5ODEwODA1IC0+IDYuNzc1OTU3NDFFKzcxNTA3NTg2NyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMjYgcmVtYWluZGVyIDkxMTI0OTU1NyA3OTgxMDgwNC45IC0+IDMzMzMwNzAzLjEKK3hzdWIxMjYgc3VidHJhY3QgOTExMjQ5NTU3IDc5ODEwODA0LjkgLT4gODMxNDM4NzUyIEluZXhhY3QgUm91bmRlZAoreGFkZDEyNyBhZGQgMzQxMTM0Ljk5NCAzLjM3NDg2MjkyIC0+IDM0MTEzOC4zNjkgSW5leGFjdCBSb3VuZGVkCit4Y29tMTI3IGNvbXBhcmUgMzQxMTM0Ljk5NCAzLjM3NDg2MjkyIC0+IDEKK3hkaXYxMjcgZGl2aWRlIDM0MTEzNC45OTQgMy4zNzQ4NjI5MiAtPiAxMDEwODEuMTQxIEluZXhhY3QgUm91bmRlZAoreGR2aTEyNyBkaXZpZGVpbnQgMzQxMTM0Ljk5NCAzLjM3NDg2MjkyIC0+IDEwMTA4MQoreG11bDEyNyBtdWx0aXBseSAzNDExMzQuOTk0IDMuMzc0ODYyOTIgLT4gMTE1MTI4My44NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMjcgcG93ZXIgMzQxMTM0Ljk5NCAzIC0+IDMuOTY5ODkzMTRFKzE2IEluZXhhY3QgUm91bmRlZAoreHJlbTEyNyByZW1haW5kZXIgMzQxMTM0Ljk5NCAzLjM3NDg2MjkyIC0+IDAuNDc1MTgzNDgKK3hzdWIxMjcgc3VidHJhY3QgMzQxMTM0Ljk5NCAzLjM3NDg2MjkyIC0+IDM0MTEzMS42MTkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTI4IGFkZCAyNDQuMjM2MzQgNTEyNzA2MTkwRS0zNDE0NTk4MzYgLT4gMjQ0LjIzNjM0MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMjggY29tcGFyZSAyNDQuMjM2MzQgNTEyNzA2MTkwRS0zNDE0NTk4MzYgLT4gMQoreGRpdjEyOCBkaXZpZGUgMjQ0LjIzNjM0IDUxMjcwNjE5MEUtMzQxNDU5ODM2IC0+IDQuNzYzNjcwNTlFKzM0MTQ1OTgyOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMjggZGl2aWRlaW50IDI0NC4yMzYzNCA1MTI3MDYxOTBFLTM0MTQ1OTgzNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDEyOCBtdWx0aXBseSAyNDQuMjM2MzQgNTEyNzA2MTkwRS0zNDE0NTk4MzYgLT4gMS4yNTIyMTQ4M0UtMzQxNDU5ODI1IEluZXhhY3QgUm91bmRlZAoreHBvdzEyOCBwb3dlciAyNDQuMjM2MzQgNSAtPiA4LjY5MDYzMzEyRSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMjggcmVtYWluZGVyIDI0NC4yMzYzNCA1MTI3MDYxOTBFLTM0MTQ1OTgzNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjEyOCBzdWJ0cmFjdCAyNDQuMjM2MzQgNTEyNzA2MTkwRS0zNDE0NTk4MzYgLT4gMjQ0LjIzNjM0MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMjkgYWRkIC05LjIyNzgzODQ5RSsxNzE1ODU5NTQgLTk5LjA5NDY4MDAgLT4gLTkuMjI3ODM4NDlFKzE3MTU4NTk1NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMjkgY29tcGFyZSAtOS4yMjc4Mzg0OUUrMTcxNTg1OTU0IC05OS4wOTQ2ODAwIC0+IC0xCit4ZGl2MTI5IGRpdmlkZSAtOS4yMjc4Mzg0OUUrMTcxNTg1OTU0IC05OS4wOTQ2ODAwIC0+IDkuMzEyMTQzMThFKzE3MTU4NTk1MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMjkgZGl2aWRlaW50IC05LjIyNzgzODQ5RSsxNzE1ODU5NTQgLTk5LjA5NDY4MDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxMjkgbXVsdGlwbHkgLTkuMjI3ODM4NDlFKzE3MTU4NTk1NCAtOTkuMDk0NjgwMCAtPiA5LjE0NDI5NzAyRSsxNzE1ODU5NTYgSW5leGFjdCBSb3VuZGVkCit4cG93MTI5IHBvd2VyIC05LjIyNzgzODQ5RSsxNzE1ODU5NTQgLTk5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xMjkgcmVtYWluZGVyIC05LjIyNzgzODQ5RSsxNzE1ODU5NTQgLTk5LjA5NDY4MDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxMjkgc3VidHJhY3QgLTkuMjI3ODM4NDlFKzE3MTU4NTk1NCAtOTkuMDk0NjgwMCAtPiAtOS4yMjc4Mzg0OUUrMTcxNTg1OTU0IEluZXhhY3QgUm91bmRlZAoreGFkZDEzMCBhZGQgNjk5NjMxLjg5MyAtMjI2LjQyMzk1OCAtPiA2OTk0MDUuNDY5IEluZXhhY3QgUm91bmRlZAoreGNvbTEzMCBjb21wYXJlIDY5OTYzMS44OTMgLTIyNi40MjM5NTggLT4gMQoreGRpdjEzMCBkaXZpZGUgNjk5NjMxLjg5MyAtMjI2LjQyMzk1OCAtPiAtMzA4OS45MTk5MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMzAgZGl2aWRlaW50IDY5OTYzMS44OTMgLTIyNi40MjM5NTggLT4gLTMwODkKK3htdWwxMzAgbXVsdGlwbHkgNjk5NjMxLjg5MyAtMjI2LjQyMzk1OCAtPiAtMTU4NDEzNDIyIEluZXhhY3QgUm91bmRlZAoreHBvdzEzMCBwb3dlciA2OTk2MzEuODkzIC0yMjYgLT4gMS4xNDY3NTUxMUUtMTMyMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMzAgcmVtYWluZGVyIDY5OTYzMS44OTMgLTIyNi40MjM5NTggLT4gMjA4LjI4NjczOAoreHN1YjEzMCBzdWJ0cmFjdCA2OTk2MzEuODkzIC0yMjYuNDIzOTU4IC0+IDY5OTg1OC4zMTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMTMxIGFkZCAtMjQ5MzUwMTM5LkUtNTcxNzkzNjczIDc3NTczMjQyOC4gLT4gNzc1NzMyNDI4IEluZXhhY3QgUm91bmRlZAoreGNvbTEzMSBjb21wYXJlIC0yNDkzNTAxMzkuRS01NzE3OTM2NzMgNzc1NzMyNDI4LiAtPiAtMQoreGRpdjEzMSBkaXZpZGUgLTI0OTM1MDEzOS5FLTU3MTc5MzY3MyA3NzU3MzI0MjguIC0+IC0zLjIxNDM4MzM0RS01NzE3OTM2NzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTMxIGRpdmlkZWludCAtMjQ5MzUwMTM5LkUtNTcxNzkzNjczIDc3NTczMjQyOC4gLT4gLTAKK3htdWwxMzEgbXVsdGlwbHkgLTI0OTM1MDEzOS5FLTU3MTc5MzY3MyA3NzU3MzI0MjguIC0+IC0xLjkzNDI4OTg5RS01NzE3OTM2NTYgSW5leGFjdCBSb3VuZGVkCit4cG93MTMxIHBvd2VyIC0yNDkzNTAxMzkuRS01NzE3OTM2NzMgNzc1NzMyNDI4IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTEzMSByZW1haW5kZXIgLTI0OTM1MDEzOS5FLTU3MTc5MzY3MyA3NzU3MzI0MjguIC0+IC0yLjQ5MzUwMTM5RS01NzE3OTM2NjUKK3hzdWIxMzEgc3VidHJhY3QgLTI0OTM1MDEzOS5FLTU3MTc5MzY3MyA3NzU3MzI0MjguIC0+IC03NzU3MzI0MjggSW5leGFjdCBSb3VuZGVkCit4YWRkMTMyIGFkZCA1LjExNjI5MDIwIC00ODAuNTMxOTQgLT4gLTQ3NS40MTU2NTAgSW5leGFjdCBSb3VuZGVkCit4Y29tMTMyIGNvbXBhcmUgNS4xMTYyOTAyMCAtNDgwLjUzMTk0IC0+IDEKK3hkaXYxMzIgZGl2aWRlIDUuMTE2MjkwMjAgLTQ4MC41MzE5NCAtPiAtMC4wMTA2NDcxMzg3IEluZXhhY3QgUm91bmRlZAoreGR2aTEzMiBkaXZpZGVpbnQgNS4xMTYyOTAyMCAtNDgwLjUzMTk0IC0+IC0wCit4bXVsMTMyIG11bHRpcGx5IDUuMTE2MjkwMjAgLTQ4MC41MzE5NCAtPiAtMjQ1OC41NDA4NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMzIgcG93ZXIgNS4xMTYyOTAyMCAtNDgxIC0+IDkuODMwMjE5NTFFLTM0MiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMzIgcmVtYWluZGVyIDUuMTE2MjkwMjAgLTQ4MC41MzE5NCAtPiA1LjExNjI5MDIwCit4c3ViMTMyIHN1YnRyYWN0IDUuMTE2MjkwMjAgLTQ4MC41MzE5NCAtPiA0ODUuNjQ4MjMwIEluZXhhY3QgUm91bmRlZAoreGFkZDEzMyBhZGQgLTguMjMzNTI2NzNFLTQ0NjcyMzE0NyAtNTMwNzEwLjg2NiAtPiAtNTMwNzEwLjg2NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMzMgY29tcGFyZSAtOC4yMzM1MjY3M0UtNDQ2NzIzMTQ3IC01MzA3MTAuODY2IC0+IDEKK3hkaXYxMzMgZGl2aWRlIC04LjIzMzUyNjczRS00NDY3MjMxNDcgLTUzMDcxMC44NjYgLT4gMS41NTE0MTQ3NkUtNDQ2NzIzMTUyIEluZXhhY3QgUm91bmRlZAoreGR2aTEzMyBkaXZpZGVpbnQgLTguMjMzNTI2NzNFLTQ0NjcyMzE0NyAtNTMwNzEwLjg2NiAtPiAwCit4bXVsMTMzIG11bHRpcGx5IC04LjIzMzUyNjczRS00NDY3MjMxNDcgLTUzMDcxMC44NjYgLT4gNC4zNjk2MjIxMEUtNDQ2NzIzMTQxIEluZXhhY3QgUm91bmRlZAoreHBvdzEzMyBwb3dlciAtOC4yMzM1MjY3M0UtNDQ2NzIzMTQ3IC01MzA3MTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTEzMyByZW1haW5kZXIgLTguMjMzNTI2NzNFLTQ0NjcyMzE0NyAtNTMwNzEwLjg2NiAtPiAtOC4yMzM1MjY3M0UtNDQ2NzIzMTQ3Cit4c3ViMTMzIHN1YnRyYWN0IC04LjIzMzUyNjczRS00NDY3MjMxNDcgLTUzMDcxMC44NjYgLT4gNTMwNzEwLjg2NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMzQgYWRkIDcuMDU5ODYwOCAtOTU5MDguMzUgLT4gLTk1OTAxLjI5MDEgSW5leGFjdCBSb3VuZGVkCit4Y29tMTM0IGNvbXBhcmUgNy4wNTk4NjA4IC05NTkwOC4zNSAtPiAxCit4ZGl2MTM0IGRpdmlkZSA3LjA1OTg2MDggLTk1OTA4LjM1IC0+IC0wLjAwMDA3MzYxMDQ5MTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTM0IGRpdmlkZWludCA3LjA1OTg2MDggLTk1OTA4LjM1IC0+IC0wCit4bXVsMTM0IG11bHRpcGx5IDcuMDU5ODYwOCAtOTU5MDguMzUgLT4gLTY3NzA5OS42MDEgSW5leGFjdCBSb3VuZGVkCit4cG93MTM0IHBvd2VyIDcuMDU5ODYwOCAtOTU5MDggLT4gNC41NzA3Mzg3N0UtODE0MDcgSW5leGFjdCBSb3VuZGVkCit4cmVtMTM0IHJlbWFpbmRlciA3LjA1OTg2MDggLTk1OTA4LjM1IC0+IDcuMDU5ODYwOAoreHN1YjEzNCBzdWJ0cmFjdCA3LjA1OTg2MDggLTk1OTA4LjM1IC0+IDk1OTE1LjQwOTkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTM1IGFkZCAtNy45MTE4OTg0NUUrMjA3MjAyNzA2IDE1MzIuNzE4NDdFKzUwOTk0NDMzNSAtPiAxLjUzMjcxODQ3RSs1MDk5NDQzMzggSW5leGFjdCBSb3VuZGVkCit4Y29tMTM1IGNvbXBhcmUgLTcuOTExODk4NDVFKzIwNzIwMjcwNiAxNTMyLjcxODQ3RSs1MDk5NDQzMzUgLT4gLTEKK3hkaXYxMzUgZGl2aWRlIC03LjkxMTg5ODQ1RSsyMDcyMDI3MDYgMTUzMi43MTg0N0UrNTA5OTQ0MzM1IC0+IC01LjE2MjAwMzcyRS0zMDI3NDE2MzIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTM1IGRpdmlkZWludCAtNy45MTE4OTg0NUUrMjA3MjAyNzA2IDE1MzIuNzE4NDdFKzUwOTk0NDMzNSAtPiAtMAoreG11bDEzNSBtdWx0aXBseSAtNy45MTE4OTg0NUUrMjA3MjAyNzA2IDE1MzIuNzE4NDdFKzUwOTk0NDMzNSAtPiAtMS4yMTI2NzEyOUUrNzE3MTQ3MDQ1IEluZXhhY3QgUm91bmRlZAoreHBvdzEzNSBwb3dlciAtNy45MTE4OTg0NUUrMjA3MjAyNzA2IDIgLT4gNi4yNTk4MTM3MUUrNDE0NDA1NDEzIEluZXhhY3QgUm91bmRlZAoreHJlbTEzNSByZW1haW5kZXIgLTcuOTExODk4NDVFKzIwNzIwMjcwNiAxNTMyLjcxODQ3RSs1MDk5NDQzMzUgLT4gLTcuOTExODk4NDVFKzIwNzIwMjcwNgoreHN1YjEzNSBzdWJ0cmFjdCAtNy45MTE4OTg0NUUrMjA3MjAyNzA2IDE1MzIuNzE4NDdFKzUwOTk0NDMzNSAtPiAtMS41MzI3MTg0N0UrNTA5OTQ0MzM4IEluZXhhY3QgUm91bmRlZAoreGFkZDEzNiBhZGQgMjA4ODM5MzcwLkUtMjE1MTQ3NDMyIC03NS45NDIwNTU5IC0+IC03NS45NDIwNTU5IEluZXhhY3QgUm91bmRlZAoreGNvbTEzNiBjb21wYXJlIDIwODgzOTM3MC5FLTIxNTE0NzQzMiAtNzUuOTQyMDU1OSAtPiAxCit4ZGl2MTM2IGRpdmlkZSAyMDg4MzkzNzAuRS0yMTUxNDc0MzIgLTc1Ljk0MjA1NTkgLT4gLTIuNzQ5OTgzMTBFLTIxNTE0NzQyNiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMzYgZGl2aWRlaW50IDIwODgzOTM3MC5FLTIxNTE0NzQzMiAtNzUuOTQyMDU1OSAtPiAtMAoreG11bDEzNiBtdWx0aXBseSAyMDg4MzkzNzAuRS0yMTUxNDc0MzIgLTc1Ljk0MjA1NTkgLT4gLTEuNTg1OTY5MTFFLTIxNTE0NzQyMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMzYgcG93ZXIgMjA4ODM5MzcwLkUtMjE1MTQ3NDMyIC03NiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMzYgcmVtYWluZGVyIDIwODgzOTM3MC5FLTIxNTE0NzQzMiAtNzUuOTQyMDU1OSAtPiAyLjA4ODM5MzcwRS0yMTUxNDc0MjQKK3hzdWIxMzYgc3VidHJhY3QgMjA4ODM5MzcwLkUtMjE1MTQ3NDMyIC03NS45NDIwNTU5IC0+IDc1Ljk0MjA1NTkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTM3IGFkZCA0MjcuNzU0MjQ0RS0zNTMzMjgzNjkgNDcwNS4wNzk2IC0+IDQ3MDUuMDc5NjAgSW5leGFjdCBSb3VuZGVkCit4Y29tMTM3IGNvbXBhcmUgNDI3Ljc1NDI0NEUtMzUzMzI4MzY5IDQ3MDUuMDc5NiAtPiAtMQoreGRpdjEzNyBkaXZpZGUgNDI3Ljc1NDI0NEUtMzUzMzI4MzY5IDQ3MDUuMDc5NiAtPiA5LjA5MTMyODUzRS0zNTMzMjgzNzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTM3IGRpdmlkZWludCA0MjcuNzU0MjQ0RS0zNTMzMjgzNjkgNDcwNS4wNzk2IC0+IDAKK3htdWwxMzcgbXVsdGlwbHkgNDI3Ljc1NDI0NEUtMzUzMzI4MzY5IDQ3MDUuMDc5NiAtPiAyLjAxMjYxNzc3RS0zNTMzMjgzNjMgSW5leGFjdCBSb3VuZGVkCit4cG93MTM3IHBvd2VyIDQyNy43NTQyNDRFLTM1MzMyODM2OSA0NzA1IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTEzNyByZW1haW5kZXIgNDI3Ljc1NDI0NEUtMzUzMzI4MzY5IDQ3MDUuMDc5NiAtPiA0LjI3NzU0MjQ0RS0zNTMzMjgzNjcKK3hzdWIxMzcgc3VidHJhY3QgNDI3Ljc1NDI0NEUtMzUzMzI4MzY5IDQ3MDUuMDc5NiAtPiAtNDcwNS4wNzk2MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMzggYWRkIDQ0OTExLjA4OSAtOTUuMTczMzYwNUUtMzEzMDgxODQ4IC0+IDQ0OTExLjA4OTAgSW5leGFjdCBSb3VuZGVkCit4Y29tMTM4IGNvbXBhcmUgNDQ5MTEuMDg5IC05NS4xNzMzNjA1RS0zMTMwODE4NDggLT4gMQoreGRpdjEzOCBkaXZpZGUgNDQ5MTEuMDg5IC05NS4xNzMzNjA1RS0zMTMwODE4NDggLT4gLTQuNzE4ODcxODNFKzMxMzA4MTg1MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMzggZGl2aWRlaW50IDQ0OTExLjA4OSAtOTUuMTczMzYwNUUtMzEzMDgxODQ4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTM4IG11bHRpcGx5IDQ0OTExLjA4OSAtOTUuMTczMzYwNUUtMzEzMDgxODQ4IC0+IC00LjI3NDMzOTI2RS0zMTMwODE4NDIgSW5leGFjdCBSb3VuZGVkCit4cG93MTM4IHBvd2VyIDQ0OTExLjA4OSAtMTAgLT4gMi45OTU0NjQyNUUtNDcgSW5leGFjdCBSb3VuZGVkCit4cmVtMTM4IHJlbWFpbmRlciA0NDkxMS4wODkgLTk1LjE3MzM2MDVFLTMxMzA4MTg0OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjEzOCBzdWJ0cmFjdCA0NDkxMS4wODkgLTk1LjE3MzM2MDVFLTMxMzA4MTg0OCAtPiA0NDkxMS4wODkwIEluZXhhY3QgUm91bmRlZAoreGFkZDEzOSBhZGQgNDUyMzcxODIxLiAtNDEwOTcwOS4xOSAtPiA0NDgyNjIxMTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMTM5IGNvbXBhcmUgNDUyMzcxODIxLiAtNDEwOTcwOS4xOSAtPiAxCit4ZGl2MTM5IGRpdmlkZSA0NTIzNzE4MjEuIC00MTA5NzA5LjE5IC0+IC0xMTAuMDczOTI1IEluZXhhY3QgUm91bmRlZAoreGR2aTEzOSBkaXZpZGVpbnQgNDUyMzcxODIxLiAtNDEwOTcwOS4xOSAtPiAtMTEwCit4bXVsMTM5IG11bHRpcGx5IDQ1MjM3MTgyMS4gLTQxMDk3MDkuMTkgLT4gLTEuODU5MTE2NjNFKzE1IEluZXhhY3QgUm91bmRlZAoreHBvdzEzOSBwb3dlciA0NTIzNzE4MjEuIC00MTA5NzA5IC0+IDEuMTU1Mjg4MDdFLTM1NTcxNTY4IEluZXhhY3QgUm91bmRlZAoreHJlbTEzOSByZW1haW5kZXIgNDUyMzcxODIxLiAtNDEwOTcwOS4xOSAtPiAzMDM4MTAuMTAKK3hzdWIxMzkgc3VidHJhY3QgNDUyMzcxODIxLiAtNDEwOTcwOS4xOSAtPiA0NTY0ODE1MzAgSW5leGFjdCBSb3VuZGVkCit4YWRkMTQwIGFkZCA5NDAwNy40MzkyIC05NDY3NzI1LjVFKzY4MTg5ODIzNCAtPiAtOS40Njc3MjU1MEUrNjgxODk4MjQwIEluZXhhY3QgUm91bmRlZAoreGNvbTE0MCBjb21wYXJlIDk0MDA3LjQzOTIgLTk0Njc3MjUuNUUrNjgxODk4MjM0IC0+IDEKK3hkaXYxNDAgZGl2aWRlIDk0MDA3LjQzOTIgLTk0Njc3MjUuNUUrNjgxODk4MjM0IC0+IC05LjkyOTI1MjcyRS02ODE4OTgyMzcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTQwIGRpdmlkZWludCA5NDAwNy40MzkyIC05NDY3NzI1LjVFKzY4MTg5ODIzNCAtPiAtMAoreG11bDE0MCBtdWx0aXBseSA5NDAwNy40MzkyIC05NDY3NzI1LjVFKzY4MTg5ODIzNCAtPiAtOC45MDAzNjYyOUUrNjgxODk4MjQ1IEluZXhhY3QgUm91bmRlZAoreHBvdzE0MCBwb3dlciA5NDAwNy40MzkyIC05IC0+IDEuNzQzOTczOTdFLTQ1IEluZXhhY3QgUm91bmRlZAoreHJlbTE0MCByZW1haW5kZXIgOTQwMDcuNDM5MiAtOTQ2NzcyNS41RSs2ODE4OTgyMzQgLT4gOTQwMDcuNDM5MgoreHN1YjE0MCBzdWJ0cmFjdCA5NDAwNy40MzkyIC05NDY3NzI1LjVFKzY4MTg5ODIzNCAtPiA5LjQ2NzcyNTUwRSs2ODE4OTgyNDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMTQxIGFkZCA5OTE0NzU1NC4wRS03NTE0MTA1ODYgMzgzMTMuNjQyMyAtPiAzODMxMy42NDIzIEluZXhhY3QgUm91bmRlZAoreGNvbTE0MSBjb21wYXJlIDk5MTQ3NTU0LjBFLTc1MTQxMDU4NiAzODMxMy42NDIzIC0+IC0xCit4ZGl2MTQxIGRpdmlkZSA5OTE0NzU1NC4wRS03NTE0MTA1ODYgMzgzMTMuNjQyMyAtPiAyLjU4Nzc4NzIyRS03NTE0MTA1ODMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTQxIGRpdmlkZWludCA5OTE0NzU1NC4wRS03NTE0MTA1ODYgMzgzMTMuNjQyMyAtPiAwCit4bXVsMTQxIG11bHRpcGx5IDk5MTQ3NTU0LjBFLTc1MTQxMDU4NiAzODMxMy42NDIzIC0+IDMuNzk4NzAzOTJFLTc1MTQxMDU3NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNDEgcG93ZXIgOTkxNDc1NTQuMEUtNzUxNDEwNTg2IDM4MzE0IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE0MSByZW1haW5kZXIgOTkxNDc1NTQuMEUtNzUxNDEwNTg2IDM4MzEzLjY0MjMgLT4gOS45MTQ3NTU0MEUtNzUxNDEwNTc5Cit4c3ViMTQxIHN1YnRyYWN0IDk5MTQ3NTU0LjBFLTc1MTQxMDU4NiAzODMxMy42NDIzIC0+IC0zODMxMy42NDIzIEluZXhhY3QgUm91bmRlZAoreGFkZDE0MiBhZGQgLTc5MTkuMzAyNTQgLTY2OS42MDc4NTQgLT4gLTg1ODguOTEwMzkgSW5leGFjdCBSb3VuZGVkCit4Y29tMTQyIGNvbXBhcmUgLTc5MTkuMzAyNTQgLTY2OS42MDc4NTQgLT4gLTEKK3hkaXYxNDIgZGl2aWRlIC03OTE5LjMwMjU0IC02NjkuNjA3ODU0IC0+IDExLjgyNjc3NjcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTQyIGRpdmlkZWludCAtNzkxOS4zMDI1NCAtNjY5LjYwNzg1NCAtPiAxMQoreG11bDE0MiBtdWx0aXBseSAtNzkxOS4zMDI1NCAtNjY5LjYwNzg1NCAtPiA1MzAyODI3LjE4IEluZXhhY3QgUm91bmRlZAoreHBvdzE0MiBwb3dlciAtNzkxOS4zMDI1NCAtNjcwIC0+IDcuNTgxNDc3MjRFLTI2MTMgSW5leGFjdCBSb3VuZGVkCit4cmVtMTQyIHJlbWFpbmRlciAtNzkxOS4zMDI1NCAtNjY5LjYwNzg1NCAtPiAtNTUzLjYxNjE0NgoreHN1YjE0MiBzdWJ0cmFjdCAtNzkxOS4zMDI1NCAtNjY5LjYwNzg1NCAtPiAtNzI0OS42OTQ2OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNDMgYWRkIDQ2MS41ODI4MEUrMTM2MTEwODIxIDcxMDY2NjA1Mi5FLTM4Mzc1NDIzMSAtPiA0LjYxNTgyODAwRSsxMzYxMTA4MjMgSW5leGFjdCBSb3VuZGVkCit4Y29tMTQzIGNvbXBhcmUgNDYxLjU4MjgwRSsxMzYxMTA4MjEgNzEwNjY2MDUyLkUtMzgzNzU0MjMxIC0+IDEKK3hkaXYxNDMgZGl2aWRlIDQ2MS41ODI4MEUrMTM2MTEwODIxIDcxMDY2NjA1Mi5FLTM4Mzc1NDIzMSAtPiA2LjQ5NTA3MzE2RSs1MTk4NjUwNDUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTQzIGRpdmlkZWludCA0NjEuNTgyODBFKzEzNjExMDgyMSA3MTA2NjYwNTIuRS0zODM3NTQyMzEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxNDMgbXVsdGlwbHkgNDYxLjU4MjgwRSsxMzYxMTA4MjEgNzEwNjY2MDUyLkUtMzgzNzU0MjMxIC0+IDMuMjgwMzEyMjZFLTI0NzY0MzM5OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNDMgcG93ZXIgNDYxLjU4MjgwRSsxMzYxMTA4MjEgNyAtPiA0LjQ2NDIzNzgxRSs5NTI3NzU3NjUgSW5leGFjdCBSb3VuZGVkCit4cmVtMTQzIHJlbWFpbmRlciA0NjEuNTgyODBFKzEzNjExMDgyMSA3MTA2NjYwNTIuRS0zODM3NTQyMzEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxNDMgc3VidHJhY3QgNDYxLjU4MjgwRSsxMzYxMTA4MjEgNzEwNjY2MDUyLkUtMzgzNzU0MjMxIC0+IDQuNjE1ODI4MDBFKzEzNjExMDgyMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNDQgYWRkIDM0NTU3NTUuNDdFLTExMjQ2NTUwNiA3NzEuNjc0MzA2IC0+IDc3MS42NzQzMDYgSW5leGFjdCBSb3VuZGVkCit4Y29tMTQ0IGNvbXBhcmUgMzQ1NTc1NS40N0UtMTEyNDY1NTA2IDc3MS42NzQzMDYgLT4gLTEKK3hkaXYxNDQgZGl2aWRlIDM0NTU3NTUuNDdFLTExMjQ2NTUwNiA3NzEuNjc0MzA2IC0+IDQuNDc4MjU2NDlFLTExMjQ2NTUwMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNDQgZGl2aWRlaW50IDM0NTU3NTUuNDdFLTExMjQ2NTUwNiA3NzEuNjc0MzA2IC0+IDAKK3htdWwxNDQgbXVsdGlwbHkgMzQ1NTc1NS40N0UtMTEyNDY1NTA2IDc3MS42NzQzMDYgLT4gMi42NjY3MTc3MEUtMTEyNDY1NDk3IEluZXhhY3QgUm91bmRlZAoreHBvdzE0NCBwb3dlciAzNDU1NzU1LjQ3RS0xMTI0NjU1MDYgNzcyIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE0NCByZW1haW5kZXIgMzQ1NTc1NS40N0UtMTEyNDY1NTA2IDc3MS42NzQzMDYgLT4gMy40NTU3NTU0N0UtMTEyNDY1NTAwCit4c3ViMTQ0IHN1YnRyYWN0IDM0NTU3NTUuNDdFLTExMjQ2NTUwNiA3NzEuNjc0MzA2IC0+IC03NzEuNjc0MzA2IEluZXhhY3QgUm91bmRlZAoreGFkZDE0NSBhZGQgLTQ3NzA2Nzc1Ny5FLTk2MTY4NDk0MCA3LjcwMTIyNjA4RS03NDEwNzIyNDUgLT4gNy43MDEyMjYwOEUtNzQxMDcyMjQ1IEluZXhhY3QgUm91bmRlZAoreGNvbTE0NSBjb21wYXJlIC00NzcwNjc3NTcuRS05NjE2ODQ5NDAgNy43MDEyMjYwOEUtNzQxMDcyMjQ1IC0+IC0xCit4ZGl2MTQ1IGRpdmlkZSAtNDc3MDY3NzU3LkUtOTYxNjg0OTQwIDcuNzAxMjI2MDhFLTc0MTA3MjI0NSAtPiAtNi4xOTQ2OTg3N0UtMjIwNjEyNjg4IEluZXhhY3QgUm91bmRlZAoreGR2aTE0NSBkaXZpZGVpbnQgLTQ3NzA2Nzc1Ny5FLTk2MTY4NDk0MCA3LjcwMTIyNjA4RS03NDEwNzIyNDUgLT4gLTAKK3htdWwxNDUgbXVsdGlwbHkgLTQ3NzA2Nzc1Ny5FLTk2MTY4NDk0MCA3LjcwMTIyNjA4RS03NDEwNzIyNDUgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzE0NSBwb3dlciAtNDc3MDY3NzU3LkUtOTYxNjg0OTQwIDggLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTQ1IHJlbWFpbmRlciAtNDc3MDY3NzU3LkUtOTYxNjg0OTQwIDcuNzAxMjI2MDhFLTc0MTA3MjI0NSAtPiAtNC43NzA2Nzc1N0UtOTYxNjg0OTMyCit4c3ViMTQ1IHN1YnRyYWN0IC00NzcwNjc3NTcuRS05NjE2ODQ5NDAgNy43MDEyMjYwOEUtNzQxMDcyMjQ1IC0+IC03LjcwMTIyNjA4RS03NDEwNzIyNDUgSW5leGFjdCBSb3VuZGVkCit4YWRkMTQ2IGFkZCA3NjQ4Mi4zNTIgODIzNzgwNi44IC0+IDgzMTQyODkuMTUgSW5leGFjdCBSb3VuZGVkCit4Y29tMTQ2IGNvbXBhcmUgNzY0ODIuMzUyIDgyMzc4MDYuOCAtPiAtMQoreGRpdjE0NiBkaXZpZGUgNzY0ODIuMzUyIDgyMzc4MDYuOCAtPiAwLjAwOTI4NDMwOTk5IEluZXhhY3QgUm91bmRlZAoreGR2aTE0NiBkaXZpZGVpbnQgNzY0ODIuMzUyIDgyMzc4MDYuOCAtPiAwCit4bXVsMTQ2IG11bHRpcGx5IDc2NDgyLjM1MiA4MjM3ODA2LjggLT4gNi4zMDA0NjgzOUUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MTQ2IHBvd2VyIDc2NDgyLjM1MiA4MjM3ODA3IC0+IDguNDQyMTY1NTlFKzQwMjI5ODM0IEluZXhhY3QgUm91bmRlZAoreHJlbTE0NiByZW1haW5kZXIgNzY0ODIuMzUyIDgyMzc4MDYuOCAtPiA3NjQ4Mi4zNTIKK3hzdWIxNDYgc3VidHJhY3QgNzY0ODIuMzUyIDgyMzc4MDYuOCAtPiAtODE2MTMyNC40NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNDcgYWRkIDEuMjE1MDUxNjRFLTU2NTU1NjUwNCA5LjI2MTQ2NTczIC0+IDkuMjYxNDY1NzMgSW5leGFjdCBSb3VuZGVkCit4Y29tMTQ3IGNvbXBhcmUgMS4yMTUwNTE2NEUtNTY1NTU2NTA0IDkuMjYxNDY1NzMgLT4gLTEKK3hkaXYxNDcgZGl2aWRlIDEuMjE1MDUxNjRFLTU2NTU1NjUwNCA5LjI2MTQ2NTczIC0+IDEuMzExOTQzMTRFLTU2NTU1NjUwNSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNDcgZGl2aWRlaW50IDEuMjE1MDUxNjRFLTU2NTU1NjUwNCA5LjI2MTQ2NTczIC0+IDAKK3htdWwxNDcgbXVsdGlwbHkgMS4yMTUwNTE2NEUtNTY1NTU2NTA0IDkuMjYxNDY1NzMgLT4gMS4xMjUzMTU5MUUtNTY1NTU2NTAzIEluZXhhY3QgUm91bmRlZAoreHBvdzE0NyBwb3dlciAxLjIxNTA1MTY0RS01NjU1NTY1MDQgOSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xNDcgcmVtYWluZGVyIDEuMjE1MDUxNjRFLTU2NTU1NjUwNCA5LjI2MTQ2NTczIC0+IDEuMjE1MDUxNjRFLTU2NTU1NjUwNAoreHN1YjE0NyBzdWJ0cmFjdCAxLjIxNTA1MTY0RS01NjU1NTY1MDQgOS4yNjE0NjU3MyAtPiAtOS4yNjE0NjU3MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNDggYWRkIC04MzAzMDYwLjI1RS0xNjk4OTQ4ODMgOTAxNTYxLjk4NSAtPiA5MDE1NjEuOTg1IEluZXhhY3QgUm91bmRlZAoreGNvbTE0OCBjb21wYXJlIC04MzAzMDYwLjI1RS0xNjk4OTQ4ODMgOTAxNTYxLjk4NSAtPiAtMQoreGRpdjE0OCBkaXZpZGUgLTgzMDMwNjAuMjVFLTE2OTg5NDg4MyA5MDE1NjEuOTg1IC0+IC05LjIwOTYzODgxRS0xNjk4OTQ4ODMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTQ4IGRpdmlkZWludCAtODMwMzA2MC4yNUUtMTY5ODk0ODgzIDkwMTU2MS45ODUgLT4gLTAKK3htdWwxNDggbXVsdGlwbHkgLTgzMDMwNjAuMjVFLTE2OTg5NDg4MyA5MDE1NjEuOTg1IC0+IC03LjQ4NTcyMzQ4RS0xNjk4OTQ4NzEgSW5leGFjdCBSb3VuZGVkCit4cG93MTQ4IHBvd2VyIC04MzAzMDYwLjI1RS0xNjk4OTQ4ODMgOTAxNTYyIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE0OCByZW1haW5kZXIgLTgzMDMwNjAuMjVFLTE2OTg5NDg4MyA5MDE1NjEuOTg1IC0+IC04LjMwMzA2MDI1RS0xNjk4OTQ4NzcKK3hzdWIxNDggc3VidHJhY3QgLTgzMDMwNjAuMjVFLTE2OTg5NDg4MyA5MDE1NjEuOTg1IC0+IC05MDE1NjEuOTg1IEluZXhhY3QgUm91bmRlZAoreGFkZDE0OSBhZGQgLTU5MjQ2NC45MiA3MTQ0NTUxMC43IC0+IDcwODUzMDQ1LjggSW5leGFjdCBSb3VuZGVkCit4Y29tMTQ5IGNvbXBhcmUgLTU5MjQ2NC45MiA3MTQ0NTUxMC43IC0+IC0xCit4ZGl2MTQ5IGRpdmlkZSAtNTkyNDY0LjkyIDcxNDQ1NTEwLjcgLT4gLTAuMDA4MjkyNTQyMzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTQ5IGRpdmlkZWludCAtNTkyNDY0LjkyIDcxNDQ1NTEwLjcgLT4gLTAKK3htdWwxNDkgbXVsdGlwbHkgLTU5MjQ2NC45MiA3MTQ0NTUxMC43IC0+IC00LjIzMjg5NTg4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNDkgcG93ZXIgLTU5MjQ2NC45MiA3MTQ0NTUxMSAtPiAtMS41ODI2OTEwOEUrNDEyNDMwODMyIEluZXhhY3QgUm91bmRlZAoreHJlbTE0OSByZW1haW5kZXIgLTU5MjQ2NC45MiA3MTQ0NTUxMC43IC0+IC01OTI0NjQuOTIKK3hzdWIxNDkgc3VidHJhY3QgLTU5MjQ2NC45MiA3MTQ0NTUxMC43IC0+IC03MjAzNzk3NS42IEluZXhhY3QgUm91bmRlZAoreGFkZDE1MCBhZGQgLTczNzc0LjQxNjUgLTM5LjgyNDMwMjcgLT4gLTczODE0LjI0MDggSW5leGFjdCBSb3VuZGVkCit4Y29tMTUwIGNvbXBhcmUgLTczNzc0LjQxNjUgLTM5LjgyNDMwMjcgLT4gLTEKK3hkaXYxNTAgZGl2aWRlIC03Mzc3NC40MTY1IC0zOS44MjQzMDI3IC0+IDE4NTIuNDk3MzggSW5leGFjdCBSb3VuZGVkCit4ZHZpMTUwIGRpdmlkZWludCAtNzM3NzQuNDE2NSAtMzkuODI0MzAyNyAtPiAxODUyCit4bXVsMTUwIG11bHRpcGx5IC03Mzc3NC40MTY1IC0zOS44MjQzMDI3IC0+IDI5MzgwMTQuNjkgSW5leGFjdCBSb3VuZGVkCit4cG93MTUwIHBvd2VyIC03Mzc3NC40MTY1IC00MCAtPiAxLjkyMjA2NzY1RS0xOTUgSW5leGFjdCBSb3VuZGVkCit4cmVtMTUwIHJlbWFpbmRlciAtNzM3NzQuNDE2NSAtMzkuODI0MzAyNyAtPiAtMTkuODA3ODk5NgoreHN1YjE1MCBzdWJ0cmFjdCAtNzM3NzQuNDE2NSAtMzkuODI0MzAyNyAtPiAtNzM3MzQuNTkyMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNTEgYWRkIC01MjQ3MjQ3MTUuIC01NTc2My43OTM3IC0+IC01MjQ3ODA0NzkgSW5leGFjdCBSb3VuZGVkCit4Y29tMTUxIGNvbXBhcmUgLTUyNDcyNDcxNS4gLTU1NzYzLjc5MzcgLT4gLTEKK3hkaXYxNTEgZGl2aWRlIC01MjQ3MjQ3MTUuIC01NTc2My43OTM3IC0+IDk0MDkuNzc0MzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTUxIGRpdmlkZWludCAtNTI0NzI0NzE1LiAtNTU3NjMuNzkzNyAtPiA5NDA5Cit4bXVsMTUxIG11bHRpcGx5IC01MjQ3MjQ3MTUuIC01NTc2My43OTM3IC0+IDIuOTI2MDY0MDhFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzE1MSBwb3dlciAtNTI0NzI0NzE1LiAtNTU3NjQgLT4gNS40Nzg5ODM1MUUtNDg2MjU5IEluZXhhY3QgUm91bmRlZAoreHJlbTE1MSByZW1haW5kZXIgLTUyNDcyNDcxNS4gLTU1NzYzLjc5MzcgLT4gLTQzMTgwLjA3NjcKK3hzdWIxNTEgc3VidHJhY3QgLTUyNDcyNDcxNS4gLTU1NzYzLjc5MzcgLT4gLTUyNDY2ODk1MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNTIgYWRkIDcuNTM4MDA0MjcgNzg0ODczNzY4RS05OTgxMTQ2IC0+IDcuNTM4MDA0MjcgSW5leGFjdCBSb3VuZGVkCit4Y29tMTUyIGNvbXBhcmUgNy41MzgwMDQyNyA3ODQ4NzM3NjhFLTk5ODExNDYgLT4gMQoreGRpdjE1MiBkaXZpZGUgNy41MzgwMDQyNyA3ODQ4NzM3NjhFLTk5ODExNDYgLT4gOS42MDQwOTc2MEUrOTk4MTEzNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNTIgZGl2aWRlaW50IDcuNTM4MDA0MjcgNzg0ODczNzY4RS05OTgxMTQ2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTUyIG11bHRpcGx5IDcuNTM4MDA0MjcgNzg0ODczNzY4RS05OTgxMTQ2IC0+IDUuOTE2MzgxODFFLTk5ODExMzcgSW5leGFjdCBSb3VuZGVkCit4cG93MTUyIHBvd2VyIDcuNTM4MDA0MjcgOCAtPiAxMDQyNDM5OS4yIEluZXhhY3QgUm91bmRlZAoreHJlbTE1MiByZW1haW5kZXIgNy41MzgwMDQyNyA3ODQ4NzM3NjhFLTk5ODExNDYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxNTIgc3VidHJhY3QgNy41MzgwMDQyNyA3ODQ4NzM3NjhFLTk5ODExNDYgLT4gNy41MzgwMDQyNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNTMgYWRkIDM3LjYwMjc0NTIgNy4yMjQ1NDIzMyAtPiA0NC44MjcyODc1IEluZXhhY3QgUm91bmRlZAoreGNvbTE1MyBjb21wYXJlIDM3LjYwMjc0NTIgNy4yMjQ1NDIzMyAtPiAxCit4ZGl2MTUzIGRpdmlkZSAzNy42MDI3NDUyIDcuMjI0NTQyMzMgLT4gNS4yMDQ4NjE5MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNTMgZGl2aWRlaW50IDM3LjYwMjc0NTIgNy4yMjQ1NDIzMyAtPiA1Cit4bXVsMTUzIG11bHRpcGx5IDM3LjYwMjc0NTIgNy4yMjQ1NDIzMyAtPiAyNzEuNjYyNjI0IEluZXhhY3QgUm91bmRlZAoreHBvdzE1MyBwb3dlciAzNy42MDI3NDUyIDcgLT4gMS4wNjMwMDg4MUUrMTEgSW5leGFjdCBSb3VuZGVkCit4cmVtMTUzIHJlbWFpbmRlciAzNy42MDI3NDUyIDcuMjI0NTQyMzMgLT4gMS40ODAwMzM1NQoreHN1YjE1MyBzdWJ0cmFjdCAzNy42MDI3NDUyIDcuMjI0NTQyMzMgLT4gMzAuMzc4MjAyOSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNTQgYWRkIDI0NDc2NjAuMzkgLTM2OTgxLjQyNTMgLT4gMjQxMDY3OC45NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNTQgY29tcGFyZSAyNDQ3NjYwLjM5IC0zNjk4MS40MjUzIC0+IDEKK3hkaXYxNTQgZGl2aWRlIDI0NDc2NjAuMzkgLTM2OTgxLjQyNTMgLT4gLTY2LjE4NjIxMDIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTU0IGRpdmlkZWludCAyNDQ3NjYwLjM5IC0zNjk4MS40MjUzIC0+IC02NgoreG11bDE1NCBtdWx0aXBseSAyNDQ3NjYwLjM5IC0zNjk4MS40MjUzIC0+IC05LjA1MTc5Njk5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNTQgcG93ZXIgMjQ0NzY2MC4zOSAtMzY5ODEgLT4gMy45MjA2NjA2NEUtMjM2MjYzIEluZXhhY3QgUm91bmRlZAoreHJlbTE1NCByZW1haW5kZXIgMjQ0NzY2MC4zOSAtMzY5ODEuNDI1MyAtPiA2ODg2LjMyMDIKK3hzdWIxNTQgc3VidHJhY3QgMjQ0NzY2MC4zOSAtMzY5ODEuNDI1MyAtPiAyNDg0NjQxLjgyIEluZXhhY3QgUm91bmRlZAoreGFkZDE1NSBhZGQgMjE2MC4zNjQxOSAxNDE4LjMzNTc0RSs2NTYyNjUzODIgLT4gMS40MTgzMzU3NEUrNjU2MjY1Mzg1IEluZXhhY3QgUm91bmRlZAoreGNvbTE1NSBjb21wYXJlIDIxNjAuMzY0MTkgMTQxOC4zMzU3NEUrNjU2MjY1MzgyIC0+IC0xCit4ZGl2MTU1IGRpdmlkZSAyMTYwLjM2NDE5IDE0MTguMzM1NzRFKzY1NjI2NTM4MiAtPiAxLjUyMzE2ODQxRS02NTYyNjUzODIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTU1IGRpdmlkZWludCAyMTYwLjM2NDE5IDE0MTguMzM1NzRFKzY1NjI2NTM4MiAtPiAwCit4bXVsMTU1IG11bHRpcGx5IDIxNjAuMzY0MTkgMTQxOC4zMzU3NEUrNjU2MjY1MzgyIC0+IDMuMDY0MTIxNzRFKzY1NjI2NTM4OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNTUgcG93ZXIgMjE2MC4zNjQxOSAxIC0+IDIxNjAuMzY0MTkKK3hyZW0xNTUgcmVtYWluZGVyIDIxNjAuMzY0MTkgMTQxOC4zMzU3NEUrNjU2MjY1MzgyIC0+IDIxNjAuMzY0MTkKK3hzdWIxNTUgc3VidHJhY3QgMjE2MC4zNjQxOSAxNDE4LjMzNTc0RSs2NTYyNjUzODIgLT4gLTEuNDE4MzM1NzRFKzY1NjI2NTM4NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNTYgYWRkIDg5MjYuNDQ5MzkgNTQuOTQzMDAyNyAtPiA4OTgxLjM5MjM5IEluZXhhY3QgUm91bmRlZAoreGNvbTE1NiBjb21wYXJlIDg5MjYuNDQ5MzkgNTQuOTQzMDAyNyAtPiAxCit4ZGl2MTU2IGRpdmlkZSA4OTI2LjQ0OTM5IDU0Ljk0MzAwMjcgLT4gMTYyLjQ2NzQ0NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNTYgZGl2aWRlaW50IDg5MjYuNDQ5MzkgNTQuOTQzMDAyNyAtPiAxNjIKK3htdWwxNTYgbXVsdGlwbHkgODkyNi40NDkzOSA1NC45NDMwMDI3IC0+IDQ5MDQ0NS45MzMgSW5leGFjdCBSb3VuZGVkCit4cG93MTU2IHBvd2VyIDg5MjYuNDQ5MzkgNTUgLT4gMS45Mzc4OTg3N0UrMjE3IEluZXhhY3QgUm91bmRlZAoreHJlbTE1NiByZW1haW5kZXIgODkyNi40NDkzOSA1NC45NDMwMDI3IC0+IDI1LjY4Mjk1MjYKK3hzdWIxNTYgc3VidHJhY3QgODkyNi40NDkzOSA1NC45NDMwMDI3IC0+IDg4NzEuNTA2MzkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTU3IGFkZCA4NjE1ODgwMjkgLTQxNjU3Mzk4RSs3Nzk1NTkyNSAtPiAtNC4xNjU3Mzk4MEUrNzc5NTU5MzIgSW5leGFjdCBSb3VuZGVkCit4Y29tMTU3IGNvbXBhcmUgODYxNTg4MDI5IC00MTY1NzM5OEUrNzc5NTU5MjUgLT4gMQoreGRpdjE1NyBkaXZpZGUgODYxNTg4MDI5IC00MTY1NzM5OEUrNzc5NTU5MjUgLT4gLTIuMDY4MjcxMzVFLTc3OTU1OTI0IEluZXhhY3QgUm91bmRlZAoreGR2aTE1NyBkaXZpZGVpbnQgODYxNTg4MDI5IC00MTY1NzM5OEUrNzc5NTU5MjUgLT4gLTAKK3htdWwxNTcgbXVsdGlwbHkgODYxNTg4MDI5IC00MTY1NzM5OEUrNzc5NTU5MjUgLT4gLTMuNTg5MTUxNTRFKzc3OTU1OTQxIEluZXhhY3QgUm91bmRlZAoreHBvdzE1NyBwb3dlciA4NjE1ODgwMjkgLTQgLT4gMS44MTQ2ODU1M0UtMzYgSW5leGFjdCBSb3VuZGVkCit4cmVtMTU3IHJlbWFpbmRlciA4NjE1ODgwMjkgLTQxNjU3Mzk4RSs3Nzk1NTkyNSAtPiA4NjE1ODgwMjkKK3hzdWIxNTcgc3VidHJhY3QgODYxNTg4MDI5IC00MTY1NzM5OEUrNzc5NTU5MjUgLT4gNC4xNjU3Mzk4MEUrNzc5NTU5MzIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTU4IGFkZCAtMzQuNTI1MzA2MiA1Mi42NzIyMDE5IC0+IDE4LjE0Njg5NTcKK3hjb20xNTggY29tcGFyZSAtMzQuNTI1MzA2MiA1Mi42NzIyMDE5IC0+IC0xCit4ZGl2MTU4IGRpdmlkZSAtMzQuNTI1MzA2MiA1Mi42NzIyMDE5IC0+IC0wLjY1NTQ3NDg5OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNTggZGl2aWRlaW50IC0zNC41MjUzMDYyIDUyLjY3MjIwMTkgLT4gLTAKK3htdWwxNTggbXVsdGlwbHkgLTM0LjUyNTMwNjIgNTIuNjcyMjAxOSAtPiAtMTgxOC41MjM5MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNTggcG93ZXIgLTM0LjUyNTMwNjIgNTMgLT4gLTMuMzIxMTU4MjFFKzgxIEluZXhhY3QgUm91bmRlZAoreHJlbTE1OCByZW1haW5kZXIgLTM0LjUyNTMwNjIgNTIuNjcyMjAxOSAtPiAtMzQuNTI1MzA2MgoreHN1YjE1OCBzdWJ0cmFjdCAtMzQuNTI1MzA2MiA1Mi42NzIyMDE5IC0+IC04Ny4xOTc1MDgxCit4YWRkMTU5IGFkZCAtMTg4NjE2NDcuIDk5Nzk0NTg2LjcgLT4gODA5MzI5MzkuNworeGNvbTE1OSBjb21wYXJlIC0xODg2MTY0Ny4gOTk3OTQ1ODYuNyAtPiAtMQoreGRpdjE1OSBkaXZpZGUgLTE4ODYxNjQ3LiA5OTc5NDU4Ni43IC0+IC0wLjE4OTAwNDcxMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNTkgZGl2aWRlaW50IC0xODg2MTY0Ny4gOTk3OTQ1ODYuNyAtPiAtMAoreG11bDE1OSBtdWx0aXBseSAtMTg4NjE2NDcuIDk5Nzk0NTg2LjcgLT4gLTEuODgyMjkwMjdFKzE1IEluZXhhY3QgUm91bmRlZAoreHBvdzE1OSBwb3dlciAtMTg4NjE2NDcuIDk5Nzk0NTg3IC0+IC00LjI4OTU3NDU5RSs3MjYwNjM0NjIgSW5leGFjdCBSb3VuZGVkCit4cmVtMTU5IHJlbWFpbmRlciAtMTg4NjE2NDcuIDk5Nzk0NTg2LjcgLT4gLTE4ODYxNjQ3LjAKK3hzdWIxNTkgc3VidHJhY3QgLTE4ODYxNjQ3LiA5OTc5NDU4Ni43IC0+IC0xMTg2NTYyMzQgSW5leGFjdCBSb3VuZGVkCit4YWRkMTYwIGFkZCAzMjIxOTIuNDA3IDQ2MS42NzA0NCAtPiAzMjI2NTQuMDc3IEluZXhhY3QgUm91bmRlZAoreGNvbTE2MCBjb21wYXJlIDMyMjE5Mi40MDcgNDYxLjY3MDQ0IC0+IDEKK3hkaXYxNjAgZGl2aWRlIDMyMjE5Mi40MDcgNDYxLjY3MDQ0IC0+IDY5Ny44ODM5ODYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTYwIGRpdmlkZWludCAzMjIxOTIuNDA3IDQ2MS42NzA0NCAtPiA2OTcKK3htdWwxNjAgbXVsdGlwbHkgMzIyMTkyLjQwNyA0NjEuNjcwNDQgLT4gMTQ4NzQ2NzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzE2MCBwb3dlciAzMjIxOTIuNDA3IDQ2MiAtPiA1LjYxMzk1ODczRSsyNTQ0IEluZXhhY3QgUm91bmRlZAoreHJlbTE2MCByZW1haW5kZXIgMzIyMTkyLjQwNyA0NjEuNjcwNDQgLT4gNDA4LjExMDMyCit4c3ViMTYwIHN1YnRyYWN0IDMyMjE5Mi40MDcgNDYxLjY3MDQ0IC0+IDMyMTczMC43MzcgSW5leGFjdCBSb3VuZGVkCit4YWRkMTYxIGFkZCAtODk2Mjk4NTE4RSs2MTQxMjMxNCA3ODg3My44MDQ5IC0+IC04Ljk2Mjk4NTE4RSs2MTQxMjMyMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNjEgY29tcGFyZSAtODk2Mjk4NTE4RSs2MTQxMjMxNCA3ODg3My44MDQ5IC0+IC0xCit4ZGl2MTYxIGRpdmlkZSAtODk2Mjk4NTE4RSs2MTQxMjMxNCA3ODg3My44MDQ5IC0+IC0xLjEzNjM3MDMzRSs2MTQxMjMxOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNjEgZGl2aWRlaW50IC04OTYyOTg1MThFKzYxNDEyMzE0IDc4ODczLjgwNDkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxNjEgbXVsdGlwbHkgLTg5NjI5ODUxOEUrNjE0MTIzMTQgNzg4NzMuODA0OSAtPiAtNy4wNjk0NDc0NEUrNjE0MTIzMjcgSW5leGFjdCBSb3VuZGVkCit4cG93MTYxIHBvd2VyIC04OTYyOTg1MThFKzYxNDEyMzE0IDc4ODc0IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTE2MSByZW1haW5kZXIgLTg5NjI5ODUxOEUrNjE0MTIzMTQgNzg4NzMuODA0OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjE2MSBzdWJ0cmFjdCAtODk2Mjk4NTE4RSs2MTQxMjMxNCA3ODg3My44MDQ5IC0+IC04Ljk2Mjk4NTE4RSs2MTQxMjMyMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNjIgYWRkIDI5My43NzM3MzIgNDc5ODk5MDUyRSs3ODk5NTAxNzcgLT4gNC43OTg5OTA1MkUrNzg5OTUwMTg1IEluZXhhY3QgUm91bmRlZAoreGNvbTE2MiBjb21wYXJlIDI5My43NzM3MzIgNDc5ODk5MDUyRSs3ODk5NTAxNzcgLT4gLTEKK3hkaXYxNjIgZGl2aWRlIDI5My43NzM3MzIgNDc5ODk5MDUyRSs3ODk5NTAxNzcgLT4gNi4xMjE1NzM1MEUtNzg5OTUwMTg0IEluZXhhY3QgUm91bmRlZAoreGR2aTE2MiBkaXZpZGVpbnQgMjkzLjc3MzczMiA0Nzk4OTkwNTJFKzc4OTk1MDE3NyAtPiAwCit4bXVsMTYyIG11bHRpcGx5IDI5My43NzM3MzIgNDc5ODk5MDUyRSs3ODk5NTAxNzcgLT4gMS40MDk4MTczNUUrNzg5OTUwMTg4IEluZXhhY3QgUm91bmRlZAoreHBvdzE2MiBwb3dlciAyOTMuNzczNzMyIDUgLT4gMi4xODgwODgwOUUrMTIgSW5leGFjdCBSb3VuZGVkCit4cmVtMTYyIHJlbWFpbmRlciAyOTMuNzczNzMyIDQ3OTg5OTA1MkUrNzg5OTUwMTc3IC0+IDI5My43NzM3MzIKK3hzdWIxNjIgc3VidHJhY3QgMjkzLjc3MzczMiA0Nzk4OTkwNTJFKzc4OTk1MDE3NyAtPiAtNC43OTg5OTA1MkUrNzg5OTUwMTg1IEluZXhhY3QgUm91bmRlZAoreGFkZDE2MyBhZGQgLTEwMzUxOTM2MiA1MTg5Nzk1NS4zIC0+IC01MTYyMTQwNi43Cit4Y29tMTYzIGNvbXBhcmUgLTEwMzUxOTM2MiA1MTg5Nzk1NS4zIC0+IC0xCit4ZGl2MTYzIGRpdmlkZSAtMTAzNTE5MzYyIDUxODk3OTU1LjMgLT4gLTEuOTk0NjcxMzAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTYzIGRpdmlkZWludCAtMTAzNTE5MzYyIDUxODk3OTU1LjMgLT4gLTEKK3htdWwxNjMgbXVsdGlwbHkgLTEwMzUxOTM2MiA1MTg5Nzk1NS4zIC0+IC01LjM3MjQ0MzIyRSsxNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNjMgcG93ZXIgLTEwMzUxOTM2MiA1MTg5Nzk1NSAtPiAtNC4yODg1ODIyOUUrNDE1OTYzMjI5IEluZXhhY3QgUm91bmRlZAoreHJlbTE2MyByZW1haW5kZXIgLTEwMzUxOTM2MiA1MTg5Nzk1NS4zIC0+IC01MTYyMTQwNi43Cit4c3ViMTYzIHN1YnRyYWN0IC0xMDM1MTkzNjIgNTE4OTc5NTUuMyAtPiAtMTU1NDE3MzE3IEluZXhhY3QgUm91bmRlZAoreGFkZDE2NCBhZGQgMzczODAuNzgwMiAtMjc3NzE5Nzg4LiAtPiAtMjc3NjgyNDA3IEluZXhhY3QgUm91bmRlZAoreGNvbTE2NCBjb21wYXJlIDM3MzgwLjc4MDIgLTI3NzcxOTc4OC4gLT4gMQoreGRpdjE2NCBkaXZpZGUgMzczODAuNzgwMiAtMjc3NzE5Nzg4LiAtPiAtMC4wMDAxMzQ1OTg5MDggSW5leGFjdCBSb3VuZGVkCit4ZHZpMTY0IGRpdmlkZWludCAzNzM4MC43ODAyIC0yNzc3MTk3ODguIC0+IC0wCit4bXVsMTY0IG11bHRpcGx5IDM3MzgwLjc4MDIgLTI3NzcxOTc4OC4gLT4gLTEuMDM4MTM4MjRFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzE2NCBwb3dlciAzNzM4MC43ODAyIC0yNzc3MTk3ODggLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTY0IHJlbWFpbmRlciAzNzM4MC43ODAyIC0yNzc3MTk3ODguIC0+IDM3MzgwLjc4MDIKK3hzdWIxNjQgc3VidHJhY3QgMzczODAuNzgwMiAtMjc3NzE5Nzg4LiAtPiAyNzc3NTcxNjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTY1IGFkZCAzMjAxMzM4NDQuIC05Nzc1MTc0NzcgLT4gLTY1NzM4MzYzMworeGNvbTE2NSBjb21wYXJlIDMyMDEzMzg0NC4gLTk3NzUxNzQ3NyAtPiAxCit4ZGl2MTY1IGRpdmlkZSAzMjAxMzM4NDQuIC05Nzc1MTc0NzcgLT4gLTAuMzI3NDk2Nzk4IEluZXhhY3QgUm91bmRlZAoreGR2aTE2NSBkaXZpZGVpbnQgMzIwMTMzODQ0LiAtOTc3NTE3NDc3IC0+IC0wCit4bXVsMTY1IG11bHRpcGx5IDMyMDEzMzg0NC4gLTk3NzUxNzQ3NyAtPiAtMy4xMjkzNjQyN0UrMTcgSW5leGFjdCBSb3VuZGVkCit4cG93MTY1IHBvd2VyIDMyMDEzMzg0NC4gLTk3NzUxNzQ3NyAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xNjUgcmVtYWluZGVyIDMyMDEzMzg0NC4gLTk3NzUxNzQ3NyAtPiAzMjAxMzM4NDQKK3hzdWIxNjUgc3VidHJhY3QgMzIwMTMzODQ0LiAtOTc3NTE3NDc3IC0+IDEuMjk3NjUxMzJFKzkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTY2IGFkZCA3MjE3NzY3MDFFKzkzMzY0NjE2MSAtNTY4OTI3OS42NEUrNjY5OTAzNjQ1IC0+IDcuMjE3NzY3MDFFKzkzMzY0NjE2OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNjYgY29tcGFyZSA3MjE3NzY3MDFFKzkzMzY0NjE2MSAtNTY4OTI3OS42NEUrNjY5OTAzNjQ1IC0+IDEKK3hkaXYxNjYgZGl2aWRlIDcyMTc3NjcwMUUrOTMzNjQ2MTYxIC01Njg5Mjc5LjY0RSs2Njk5MDM2NDUgLT4gLTEuMjY4NjYwOTdFKzI2Mzc0MjUxOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNjYgZGl2aWRlaW50IDcyMTc3NjcwMUUrOTMzNjQ2MTYxIC01Njg5Mjc5LjY0RSs2Njk5MDM2NDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxNjYgbXVsdGlwbHkgNzIxNzc2NzAxRSs5MzM2NDYxNjEgLTU2ODkyNzkuNjRFKzY2OTkwMzY0NSAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4cG93MTY2IHBvd2VyIDcyMTc3NjcwMUUrOTMzNjQ2MTYxIC02IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE2NiByZW1haW5kZXIgNzIxNzc2NzAxRSs5MzM2NDYxNjEgLTU2ODkyNzkuNjRFKzY2OTkwMzY0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjE2NiBzdWJ0cmFjdCA3MjE3NzY3MDFFKzkzMzY0NjE2MSAtNTY4OTI3OS42NEUrNjY5OTAzNjQ1IC0+IDcuMjE3NzY3MDFFKzkzMzY0NjE2OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNjcgYWRkIC01NDA5LjAwNDgyIC0yLjE2MTQ5Mzg2IC0+IC01NDExLjE2NjMxIEluZXhhY3QgUm91bmRlZAoreGNvbTE2NyBjb21wYXJlIC01NDA5LjAwNDgyIC0yLjE2MTQ5Mzg2IC0+IC0xCit4ZGl2MTY3IGRpdmlkZSAtNTQwOS4wMDQ4MiAtMi4xNjE0OTM4NiAtPiAyNTAyLjQzODIxIEluZXhhY3QgUm91bmRlZAoreGR2aTE2NyBkaXZpZGVpbnQgLTU0MDkuMDA0ODIgLTIuMTYxNDkzODYgLT4gMjUwMgoreG11bDE2NyBtdWx0aXBseSAtNTQwOS4wMDQ4MiAtMi4xNjE0OTM4NiAtPiAxMTY5MS41MzA3IEluZXhhY3QgUm91bmRlZAoreHBvdzE2NyBwb3dlciAtNTQwOS4wMDQ4MiAtMiAtPiAzLjQxNzk0NjUyRS04IEluZXhhY3QgUm91bmRlZAoreHJlbTE2NyByZW1haW5kZXIgLTU0MDkuMDA0ODIgLTIuMTYxNDkzODYgLT4gLTAuOTQ3MTgyMjgKK3hzdWIxNjcgc3VidHJhY3QgLTU0MDkuMDA0ODIgLTIuMTYxNDkzODYgLT4gLTU0MDYuODQzMzMgSW5leGFjdCBSb3VuZGVkCit4YWRkMTY4IGFkZCAtOTU3OTYwLjM2NyAzMjIuODU4MTcwIC0+IC05NTc2MzcuNTA5IEluZXhhY3QgUm91bmRlZAoreGNvbTE2OCBjb21wYXJlIC05NTc5NjAuMzY3IDMyMi44NTgxNzAgLT4gLTEKK3hkaXYxNjggZGl2aWRlIC05NTc5NjAuMzY3IDMyMi44NTgxNzAgLT4gLTI5NjcuMTI0NDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTY4IGRpdmlkZWludCAtOTU3OTYwLjM2NyAzMjIuODU4MTcwIC0+IC0yOTY3Cit4bXVsMTY4IG11bHRpcGx5IC05NTc5NjAuMzY3IDMyMi44NTgxNzAgLT4gLTMwOTI4NTMzMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNjggcG93ZXIgLTk1Nzk2MC4zNjcgMzIzIC0+IC05LjQ0NjE3NDYwRSsxOTMxIEluZXhhY3QgUm91bmRlZAoreHJlbTE2OCByZW1haW5kZXIgLTk1Nzk2MC4zNjcgMzIyLjg1ODE3MCAtPiAtNDAuMTc2NjEwCit4c3ViMTY4IHN1YnRyYWN0IC05NTc5NjAuMzY3IDMyMi44NTgxNzAgLT4gLTk1ODI4My4yMjUgSW5leGFjdCBSb3VuZGVkCit4YWRkMTY5IGFkZCAtMTE4MTcuODc1NEUrNjEzODkzNDQyIC0zLjg0NzM1MDgyRSs4ODgzMzMyNDkgLT4gLTMuODQ3MzUwODJFKzg4ODMzMzI0OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNjkgY29tcGFyZSAtMTE4MTcuODc1NEUrNjEzODkzNDQyIC0zLjg0NzM1MDgyRSs4ODgzMzMyNDkgLT4gMQoreGRpdjE2OSBkaXZpZGUgLTExODE3Ljg3NTRFKzYxMzg5MzQ0MiAtMy44NDczNTA4MkUrODg4MzMzMjQ5IC0+IDMuMDcxNjkxNjVFLTI3NDQzOTgwNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNjkgZGl2aWRlaW50IC0xMTgxNy44NzU0RSs2MTM4OTM0NDIgLTMuODQ3MzUwODJFKzg4ODMzMzI0OSAtPiAwCit4bXVsMTY5IG11bHRpcGx5IC0xMTgxNy44NzU0RSs2MTM4OTM0NDIgLTMuODQ3MzUwODJFKzg4ODMzMzI0OSAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hwb3cxNjkgcG93ZXIgLTExODE3Ljg3NTRFKzYxMzg5MzQ0MiAtNCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xNjkgcmVtYWluZGVyIC0xMTgxNy44NzU0RSs2MTM4OTM0NDIgLTMuODQ3MzUwODJFKzg4ODMzMzI0OSAtPiAtMS4xODE3ODc1NEUrNjEzODkzNDQ2Cit4c3ViMTY5IHN1YnRyYWN0IC0xMTgxNy44NzU0RSs2MTM4OTM0NDIgLTMuODQ3MzUwODJFKzg4ODMzMzI0OSAtPiAzLjg0NzM1MDgyRSs4ODgzMzMyNDkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTcwIGFkZCA4NDAyNTgyMDMgNTgzNjMuOTgwRS05MDY1ODQ3MjMgLT4gODQwMjU4MjAzIEluZXhhY3QgUm91bmRlZAoreGNvbTE3MCBjb21wYXJlIDg0MDI1ODIwMyA1ODM2My45ODBFLTkwNjU4NDcyMyAtPiAxCit4ZGl2MTcwIGRpdmlkZSA4NDAyNTgyMDMgNTgzNjMuOTgwRS05MDY1ODQ3MjMgLT4gMS40Mzk2ODYyNkUrOTA2NTg0NzI3IEluZXhhY3QgUm91bmRlZAoreGR2aTE3MCBkaXZpZGVpbnQgODQwMjU4MjAzIDU4MzYzLjk4MEUtOTA2NTg0NzIzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTcwIG11bHRpcGx5IDg0MDI1ODIwMyA1ODM2My45ODBFLTkwNjU4NDcyMyAtPiA0LjkwNDA4MTMwRS05MDY1ODQ3MTAgSW5leGFjdCBSb3VuZGVkCit4cG93MTcwIHBvd2VyIDg0MDI1ODIwMyA2IC0+IDMuNTE5NDY0MzFFKzUzIEluZXhhY3QgUm91bmRlZAoreHJlbTE3MCByZW1haW5kZXIgODQwMjU4MjAzIDU4MzYzLjk4MEUtOTA2NTg0NzIzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTcwIHN1YnRyYWN0IDg0MDI1ODIwMyA1ODM2My45ODBFLTkwNjU4NDcyMyAtPiA4NDAyNTgyMDMgSW5leGFjdCBSb3VuZGVkCit4YWRkMTcxIGFkZCAtMjA1ODQyMDk2LiAtMTkxMzQyLjcyMSAtPiAtMjA2MDMzNDM5IEluZXhhY3QgUm91bmRlZAoreGNvbTE3MSBjb21wYXJlIC0yMDU4NDIwOTYuIC0xOTEzNDIuNzIxIC0+IC0xCit4ZGl2MTcxIGRpdmlkZSAtMjA1ODQyMDk2LiAtMTkxMzQyLjcyMSAtPiAxMDc1Ljc3Njk5IEluZXhhY3QgUm91bmRlZAoreGR2aTE3MSBkaXZpZGVpbnQgLTIwNTg0MjA5Ni4gLTE5MTM0Mi43MjEgLT4gMTA3NQoreG11bDE3MSBtdWx0aXBseSAtMjA1ODQyMDk2LiAtMTkxMzQyLjcyMSAtPiAzLjkzODYzODY3RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNzEgcG93ZXIgLTIwNTg0MjA5Ni4gLTE5MTM0MyAtPiAtMi42Njk1NTU1M0UtMTU5MDczNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNzEgcmVtYWluZGVyIC0yMDU4NDIwOTYuIC0xOTEzNDIuNzIxIC0+IC0xNDg2NzAuOTI1Cit4c3ViMTcxIHN1YnRyYWN0IC0yMDU4NDIwOTYuIC0xOTEzNDIuNzIxIC0+IC0yMDU2NTA3NTMgSW5leGFjdCBSb3VuZGVkCit4YWRkMTcyIGFkZCA0MjUwMTEyNC4gODg0LjkzODQ5OEUrMTIzMzQxNDgwIC0+IDguODQ5Mzg0OThFKzEyMzM0MTQ4MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNzIgY29tcGFyZSA0MjUwMTEyNC4gODg0LjkzODQ5OEUrMTIzMzQxNDgwIC0+IC0xCit4ZGl2MTcyIGRpdmlkZSA0MjUwMTEyNC4gODg0LjkzODQ5OEUrMTIzMzQxNDgwIC0+IDQuODAyNzIwNjVFLTEyMzM0MTQ3NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNzIgZGl2aWRlaW50IDQyNTAxMTI0LiA4ODQuOTM4NDk4RSsxMjMzNDE0ODAgLT4gMAoreG11bDE3MiBtdWx0aXBseSA0MjUwMTEyNC4gODg0LjkzODQ5OEUrMTIzMzQxNDgwIC0+IDMuNzYxMDg4MDhFKzEyMzM0MTQ5MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNzIgcG93ZXIgNDI1MDExMjQuIDkgLT4gNC41MjQ4NDUzNkUrNjggSW5leGFjdCBSb3VuZGVkCit4cmVtMTcyIHJlbWFpbmRlciA0MjUwMTEyNC4gODg0LjkzODQ5OEUrMTIzMzQxNDgwIC0+IDQyNTAxMTI0Cit4c3ViMTcyIHN1YnRyYWN0IDQyNTAxMTI0LiA4ODQuOTM4NDk4RSsxMjMzNDE0ODAgLT4gLTguODQ5Mzg0OThFKzEyMzM0MTQ4MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNzMgYWRkIC01NzgwOTQ1Mi4gLTYyMDM4MDc0NiAtPiAtNjc4MTkwMTk4Cit4Y29tMTczIGNvbXBhcmUgLTU3ODA5NDUyLiAtNjIwMzgwNzQ2IC0+IDEKK3hkaXYxNzMgZGl2aWRlIC01NzgwOTQ1Mi4gLTYyMDM4MDc0NiAtPiAwLjA5MzE4MzgyNjggSW5leGFjdCBSb3VuZGVkCit4ZHZpMTczIGRpdmlkZWludCAtNTc4MDk0NTIuIC02MjAzODA3NDYgLT4gMAoreG11bDE3MyBtdWx0aXBseSAtNTc4MDk0NTIuIC02MjAzODA3NDYgLT4gMy41ODYzODcxMEUrMTYgSW5leGFjdCBSb3VuZGVkCit4cG93MTczIHBvd2VyIC01NzgwOTQ1Mi4gLTYyMDM4MDc0NiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xNzMgcmVtYWluZGVyIC01NzgwOTQ1Mi4gLTYyMDM4MDc0NiAtPiAtNTc4MDk0NTIKK3hzdWIxNzMgc3VidHJhY3QgLTU3ODA5NDUyLiAtNjIwMzgwNzQ2IC0+IDU2MjU3MTI5NAoreGFkZDE3NCBhZGQgLTgwMjIzNzAuMzEgOTg1ODU4MS42IC0+IDE4MzYyMTEuMjkKK3hjb20xNzQgY29tcGFyZSAtODAyMjM3MC4zMSA5ODU4NTgxLjYgLT4gLTEKK3hkaXYxNzQgZGl2aWRlIC04MDIyMzcwLjMxIDk4NTg1ODEuNiAtPiAtMC44MTM3NDQ4ODEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTc0IGRpdmlkZWludCAtODAyMjM3MC4zMSA5ODU4NTgxLjYgLT4gLTAKK3htdWwxNzQgbXVsdGlwbHkgLTgwMjIzNzAuMzEgOTg1ODU4MS42IC0+IC03LjkwODkxOTIzRSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNzQgcG93ZXIgLTgwMjIzNzAuMzEgOTg1ODU4MiAtPiAyLjM0NDU4MjQ5RSs2ODA2NjYzNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNzQgcmVtYWluZGVyIC04MDIyMzcwLjMxIDk4NTg1ODEuNiAtPiAtODAyMjM3MC4zMQoreHN1YjE3NCBzdWJ0cmFjdCAtODAyMjM3MC4zMSA5ODU4NTgxLjYgLT4gLTE3ODgwOTUxLjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTc1IGFkZCAyLjQ5MDY1MDYwRSs1OTIxMzkxNDEgLTU0MzIuNzIwMTRFLTQxOTk2NTM1NyAtPiAyLjQ5MDY1MDYwRSs1OTIxMzkxNDEgSW5leGFjdCBSb3VuZGVkCit4Y29tMTc1IGNvbXBhcmUgMi40OTA2NTA2MEUrNTkyMTM5MTQxIC01NDMyLjcyMDE0RS00MTk5NjUzNTcgLT4gMQoreGRpdjE3NSBkaXZpZGUgMi40OTA2NTA2MEUrNTkyMTM5MTQxIC01NDMyLjcyMDE0RS00MTk5NjUzNTcgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAoreGR2aTE3NSBkaXZpZGVpbnQgMi40OTA2NTA2MEUrNTkyMTM5MTQxIC01NDMyLjcyMDE0RS00MTk5NjUzNTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxNzUgbXVsdGlwbHkgMi40OTA2NTA2MEUrNTkyMTM5MTQxIC01NDMyLjcyMDE0RS00MTk5NjUzNTcgLT4gLTEuMzUzMTAwNzdFKzE3MjE3Mzc4OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNzUgcG93ZXIgMi40OTA2NTA2MEUrNTkyMTM5MTQxIC01IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE3NSByZW1haW5kZXIgMi40OTA2NTA2MEUrNTkyMTM5MTQxIC01NDMyLjcyMDE0RS00MTk5NjUzNTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxNzUgc3VidHJhY3QgMi40OTA2NTA2MEUrNTkyMTM5MTQxIC01NDMyLjcyMDE0RS00MTk5NjUzNTcgLT4gMi40OTA2NTA2MEUrNTkyMTM5MTQxIEluZXhhY3QgUm91bmRlZAoreGFkZDE3NiBhZGQgLTY5NzI3MzcxNUUtMjQyODI0ODcwIC0zLjgxNzU3NTA2IC0+IC0zLjgxNzU3NTA2IEluZXhhY3QgUm91bmRlZAoreGNvbTE3NiBjb21wYXJlIC02OTcyNzM3MTVFLTI0MjgyNDg3MCAtMy44MTc1NzUwNiAtPiAxCit4ZGl2MTc2IGRpdmlkZSAtNjk3MjczNzE1RS0yNDI4MjQ4NzAgLTMuODE3NTc1MDYgLT4gMS44MjY0ODMzMUUtMjQyODI0ODYyIEluZXhhY3QgUm91bmRlZAoreGR2aTE3NiBkaXZpZGVpbnQgLTY5NzI3MzcxNUUtMjQyODI0ODcwIC0zLjgxNzU3NTA2IC0+IDAKK3htdWwxNzYgbXVsdGlwbHkgLTY5NzI3MzcxNUUtMjQyODI0ODcwIC0zLjgxNzU3NTA2IC0+IDIuNjYxODk0NzRFLTI0MjgyNDg2MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNzYgcG93ZXIgLTY5NzI3MzcxNUUtMjQyODI0ODcwIC00IC0+IDQuMjMwNDUyNTFFKzk3MTI5OTQ0NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNzYgcmVtYWluZGVyIC02OTcyNzM3MTVFLTI0MjgyNDg3MCAtMy44MTc1NzUwNiAtPiAtNi45NzI3MzcxNUUtMjQyODI0ODYyCit4c3ViMTc2IHN1YnRyYWN0IC02OTcyNzM3MTVFLTI0MjgyNDg3MCAtMy44MTc1NzUwNiAtPiAzLjgxNzU3NTA2IEluZXhhY3QgUm91bmRlZAoreGFkZDE3NyBhZGQgLTcuNDIyMDQ0MDNFLTMxNTcxNjI4MCAtODE1NjExMS42N0UrMjgzMjYxNjM2IC0+IC04LjE1NjExMTY3RSsyODMyNjE2NDIgSW5leGFjdCBSb3VuZGVkCit4Y29tMTc3IGNvbXBhcmUgLTcuNDIyMDQ0MDNFLTMxNTcxNjI4MCAtODE1NjExMS42N0UrMjgzMjYxNjM2IC0+IDEKK3hkaXYxNzcgZGl2aWRlIC03LjQyMjA0NDAzRS0zMTU3MTYyODAgLTgxNTYxMTEuNjdFKzI4MzI2MTYzNiAtPiA5LjA5OTk3ODQzRS01OTg5Nzc5MjMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTc3IGRpdmlkZWludCAtNy40MjIwNDQwM0UtMzE1NzE2MjgwIC04MTU2MTExLjY3RSsyODMyNjE2MzYgLT4gMAoreG11bDE3NyBtdWx0aXBseSAtNy40MjIwNDQwM0UtMzE1NzE2MjgwIC04MTU2MTExLjY3RSsyODMyNjE2MzYgLT4gNi4wNTM1MDE5OUUtMzI0NTQ2MzcgSW5leGFjdCBSb3VuZGVkCit4cG93MTc3IHBvd2VyIC03LjQyMjA0NDAzRS0zMTU3MTYyODAgLTggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMTc3IHJlbWFpbmRlciAtNy40MjIwNDQwM0UtMzE1NzE2MjgwIC04MTU2MTExLjY3RSsyODMyNjE2MzYgLT4gLTcuNDIyMDQ0MDNFLTMxNTcxNjI4MAoreHN1YjE3NyBzdWJ0cmFjdCAtNy40MjIwNDQwM0UtMzE1NzE2MjgwIC04MTU2MTExLjY3RSsyODMyNjE2MzYgLT4gOC4xNTYxMTE2N0UrMjgzMjYxNjQyIEluZXhhY3QgUm91bmRlZAoreGFkZDE3OCBhZGQgNzM4MDYzODkyIDg5OTAwNDY3LjggLT4gODI3OTY0MzYwIEluZXhhY3QgUm91bmRlZAoreGNvbTE3OCBjb21wYXJlIDczODA2Mzg5MiA4OTkwMDQ2Ny44IC0+IDEKK3hkaXYxNzggZGl2aWRlIDczODA2Mzg5MiA4OTkwMDQ2Ny44IC0+IDguMjA5Nzg5MjMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTc4IGRpdmlkZWludCA3MzgwNjM4OTIgODk5MDA0NjcuOCAtPiA4Cit4bXVsMTc4IG11bHRpcGx5IDczODA2Mzg5MiA4OTkwMDQ2Ny44IC0+IDYuNjM1MjI4OTJFKzE2IEluZXhhY3QgUm91bmRlZAoreHBvdzE3OCBwb3dlciA3MzgwNjM4OTIgODk5MDA0NjggLT4gMS41MzE2NjcyM0UrNzk3MjQ1Nzk3IEluZXhhY3QgUm91bmRlZAoreHJlbTE3OCByZW1haW5kZXIgNzM4MDYzODkyIDg5OTAwNDY3LjggLT4gMTg4NjAxNDkuNgoreHN1YjE3OCBzdWJ0cmFjdCA3MzgwNjM4OTIgODk5MDA0NjcuOCAtPiA2NDgxNjM0MjQgSW5leGFjdCBSb3VuZGVkCit4YWRkMTc5IGFkZCAtNjMwMzA5MzY2IC04ODQ3ODMuMzM4RS0yMTU5NTQxMCAtPiAtNjMwMzA5MzY2IEluZXhhY3QgUm91bmRlZAoreGNvbTE3OSBjb21wYXJlIC02MzAzMDkzNjYgLTg4NDc4My4zMzhFLTIxNTk1NDEwIC0+IC0xCit4ZGl2MTc5IGRpdmlkZSAtNjMwMzA5MzY2IC04ODQ3ODMuMzM4RS0yMTU5NTQxMCAtPiA3LjEyMzg4Mzc3RSsyMTU5NTQxMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNzkgZGl2aWRlaW50IC02MzAzMDkzNjYgLTg4NDc4My4zMzhFLTIxNTk1NDEwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTc5IG11bHRpcGx5IC02MzAzMDkzNjYgLTg4NDc4My4zMzhFLTIxNTk1NDEwIC0+IDUuNTc2ODcyMjVFLTIxNTk1Mzk2IEluZXhhY3QgUm91bmRlZAoreHBvdzE3OSBwb3dlciAtNjMwMzA5MzY2IC05IC0+IC02LjM2ODE5MjEwRS04MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNzkgcmVtYWluZGVyIC02MzAzMDkzNjYgLTg4NDc4My4zMzhFLTIxNTk1NDEwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTc5IHN1YnRyYWN0IC02MzAzMDkzNjYgLTg4NDc4My4zMzhFLTIxNTk1NDEwIC0+IC02MzAzMDkzNjYgSW5leGFjdCBSb3VuZGVkCit4YWRkMTgwIGFkZCA2MTMuMjA3Nzc0IC0zMDA3Ljc4NjA4IC0+IC0yMzk0LjU3ODMxIEluZXhhY3QgUm91bmRlZAoreGNvbTE4MCBjb21wYXJlIDYxMy4yMDc3NzQgLTMwMDcuNzg2MDggLT4gMQoreGRpdjE4MCBkaXZpZGUgNjEzLjIwNzc3NCAtMzAwNy43ODYwOCAtPiAtMC4yMDM4NzM0NjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTgwIGRpdmlkZWludCA2MTMuMjA3Nzc0IC0zMDA3Ljc4NjA4IC0+IC0wCit4bXVsMTgwIG11bHRpcGx5IDYxMy4yMDc3NzQgLTMwMDcuNzg2MDggLT4gLTE4NDQzOTcuODEgSW5leGFjdCBSb3VuZGVkCit4cG93MTgwIHBvd2VyIDYxMy4yMDc3NzQgLTMwMDggLT4gNy41MTkzOTE2MEUtODM4NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xODAgcmVtYWluZGVyIDYxMy4yMDc3NzQgLTMwMDcuNzg2MDggLT4gNjEzLjIwNzc3NAoreHN1YjE4MCBzdWJ0cmFjdCA2MTMuMjA3Nzc0IC0zMDA3Ljc4NjA4IC0+IDM2MjAuOTkzODUgSW5leGFjdCBSb3VuZGVkCit4YWRkMTgxIGFkZCAtOTMwMDYyMjIuMyAtMy4wODk2NDYxOSAtPiAtOTMwMDYyMjUuNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xODEgY29tcGFyZSAtOTMwMDYyMjIuMyAtMy4wODk2NDYxOSAtPiAtMQoreGRpdjE4MSBkaXZpZGUgLTkzMDA2MjIyLjMgLTMuMDg5NjQ2MTkgLT4gMzAxMDI1NDcuOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxODEgZGl2aWRlaW50IC05MzAwNjIyMi4zIC0zLjA4OTY0NjE5IC0+IDMwMTAyNTQ3Cit4bXVsMTgxIG11bHRpcGx5IC05MzAwNjIyMi4zIC0zLjA4OTY0NjE5IC0+IDI4NzM1NjMyMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxODEgcG93ZXIgLTkzMDA2MjIyLjMgLTMgLT4gLTEuMjQyOTc5NTZFLTI0IEluZXhhY3QgUm91bmRlZAoreHJlbTE4MSByZW1haW5kZXIgLTkzMDA2MjIyLjMgLTMuMDg5NjQ2MTkgLT4gLTIuNjUyMTU0MDcKK3hzdWIxODEgc3VidHJhY3QgLTkzMDA2MjIyLjMgLTMuMDg5NjQ2MTkgLT4gLTkzMDA2MjE5LjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTgyIGFkZCAtMTgxMTYuMDYyMSAzNDA5Ni4zMDZFLTI3MDM0NzA5MiAtPiAtMTgxMTYuMDYyMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xODIgY29tcGFyZSAtMTgxMTYuMDYyMSAzNDA5Ni4zMDZFLTI3MDM0NzA5MiAtPiAtMQoreGRpdjE4MiBkaXZpZGUgLTE4MTE2LjA2MjEgMzQwOTYuMzA2RS0yNzAzNDcwOTIgLT4gLTUuMzEzMjAzNzVFKzI3MDM0NzA5MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxODIgZGl2aWRlaW50IC0xODExNi4wNjIxIDM0MDk2LjMwNkUtMjcwMzQ3MDkyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTgyIG11bHRpcGx5IC0xODExNi4wNjIxIDM0MDk2LjMwNkUtMjcwMzQ3MDkyIC0+IC02LjE3NjkwNzk3RS0yNzAzNDcwODQgSW5leGFjdCBSb3VuZGVkCit4cG93MTgyIHBvd2VyIC0xODExNi4wNjIxIDMgLT4gLTUuOTQ1NTQxMzNFKzEyIEluZXhhY3QgUm91bmRlZAoreHJlbTE4MiByZW1haW5kZXIgLTE4MTE2LjA2MjEgMzQwOTYuMzA2RS0yNzAzNDcwOTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxODIgc3VidHJhY3QgLTE4MTE2LjA2MjEgMzQwOTYuMzA2RS0yNzAzNDcwOTIgLT4gLTE4MTE2LjA2MjEgSW5leGFjdCBSb3VuZGVkCit4YWRkMTgzIGFkZCAxOTI3MjM4Ni45IC00MTA0NDIzNzkuIC0+IC0zOTExNjk5OTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMTgzIGNvbXBhcmUgMTkyNzIzODYuOSAtNDEwNDQyMzc5LiAtPiAxCit4ZGl2MTgzIGRpdmlkZSAxOTI3MjM4Ni45IC00MTA0NDIzNzkuIC0+IC0wLjA0Njk1NTE1ODQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTgzIGRpdmlkZWludCAxOTI3MjM4Ni45IC00MTA0NDIzNzkuIC0+IC0wCit4bXVsMTgzIG11bHRpcGx5IDE5MjcyMzg2LjkgLTQxMDQ0MjM3OS4gLT4gLTcuOTEwMjA0MzNFKzE1IEluZXhhY3QgUm91bmRlZAoreHBvdzE4MyBwb3dlciAxOTI3MjM4Ni45IC00MTA0NDIzNzkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTgzIHJlbWFpbmRlciAxOTI3MjM4Ni45IC00MTA0NDIzNzkuIC0+IDE5MjcyMzg2LjkKK3hzdWIxODMgc3VidHJhY3QgMTkyNzIzODYuOSAtNDEwNDQyMzc5LiAtPiA0Mjk3MTQ3NjYgSW5leGFjdCBSb3VuZGVkCit4YWRkMTg0IGFkZCA0MTgwLjMwODIxIC0xLjY0Mzk1NDNFLTYyNDc1OTEwNCAtPiA0MTgwLjMwODIxIEluZXhhY3QgUm91bmRlZAoreGNvbTE4NCBjb21wYXJlIDQxODAuMzA4MjEgLTEuNjQzOTU0M0UtNjI0NzU5MTA0IC0+IDEKK3hkaXYxODQgZGl2aWRlIDQxODAuMzA4MjEgLTEuNjQzOTU0M0UtNjI0NzU5MTA0IC0+IC0yLjU0MjgzNzI0RSs2MjQ3NTkxMDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTg0IGRpdmlkZWludCA0MTgwLjMwODIxIC0xLjY0Mzk1NDNFLTYyNDc1OTEwNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDE4NCBtdWx0aXBseSA0MTgwLjMwODIxIC0xLjY0Mzk1NDNFLTYyNDc1OTEwNCAtPiAtNi44NzIyMzU2NkUtNjI0NzU5MTAxIEluZXhhY3QgUm91bmRlZAoreHBvdzE4NCBwb3dlciA0MTgwLjMwODIxIC0yIC0+IDUuNzIyNDY4MjhFLTggSW5leGFjdCBSb3VuZGVkCit4cmVtMTg0IHJlbWFpbmRlciA0MTgwLjMwODIxIC0xLjY0Mzk1NDNFLTYyNDc1OTEwNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjE4NCBzdWJ0cmFjdCA0MTgwLjMwODIxIC0xLjY0Mzk1NDNFLTYyNDc1OTEwNCAtPiA0MTgwLjMwODIxIEluZXhhY3QgUm91bmRlZAoreGFkZDE4NSBhZGQgNTcxLjUzNjcyNSAzODkuODk5MjIwIC0+IDk2MS40MzU5NDUKK3hjb20xODUgY29tcGFyZSA1NzEuNTM2NzI1IDM4OS44OTkyMjAgLT4gMQoreGRpdjE4NSBkaXZpZGUgNTcxLjUzNjcyNSAzODkuODk5MjIwIC0+IDEuNDY1ODU3NTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTg1IGRpdmlkZWludCA1NzEuNTM2NzI1IDM4OS44OTkyMjAgLT4gMQoreG11bDE4NSBtdWx0aXBseSA1NzEuNTM2NzI1IDM4OS44OTkyMjAgLT4gMjIyODQxLjcyMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxODUgcG93ZXIgNTcxLjUzNjcyNSAzOTAgLT4gMS43NjY5MTM3M0UrMTA3NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xODUgcmVtYWluZGVyIDU3MS41MzY3MjUgMzg5Ljg5OTIyMCAtPiAxODEuNjM3NTA1Cit4c3ViMTg1IHN1YnRyYWN0IDU3MS41MzY3MjUgMzg5Ljg5OTIyMCAtPiAxODEuNjM3NTA1Cit4YWRkMTg2IGFkZCAtNjIyMDA3MzA2LkUrMTU5OTI0ODg2IC0xMjYuOTcxNzQ1IC0+IC02LjIyMDA3MzA2RSsxNTk5MjQ4OTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMTg2IGNvbXBhcmUgLTYyMjAwNzMwNi5FKzE1OTkyNDg4NiAtMTI2Ljk3MTc0NSAtPiAtMQoreGRpdjE4NiBkaXZpZGUgLTYyMjAwNzMwNi5FKzE1OTkyNDg4NiAtMTI2Ljk3MTc0NSAtPiA0Ljg5ODc4NTIxRSsxNTk5MjQ4OTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTg2IGRpdmlkZWludCAtNjIyMDA3MzA2LkUrMTU5OTI0ODg2IC0xMjYuOTcxNzQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTg2IG11bHRpcGx5IC02MjIwMDczMDYuRSsxNTk5MjQ4ODYgLTEyNi45NzE3NDUgLT4gNy44OTc3MzUzMEUrMTU5OTI0ODk2IEluZXhhY3QgUm91bmRlZAoreHBvdzE4NiBwb3dlciAtNjIyMDA3MzA2LkUrMTU5OTI0ODg2IC0xMjcgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE4NiByZW1haW5kZXIgLTYyMjAwNzMwNi5FKzE1OTkyNDg4NiAtMTI2Ljk3MTc0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjE4NiBzdWJ0cmFjdCAtNjIyMDA3MzA2LkUrMTU5OTI0ODg2IC0xMjYuOTcxNzQ1IC0+IC02LjIyMDA3MzA2RSsxNTk5MjQ4OTQgSW5leGFjdCBSb3VuZGVkCit4YWRkMTg3IGFkZCAtMjkuMzU2NTUxRS0yODI4MTYxMzkgMzcxNDE3NDhFLTkwMzM5NzgyMSAtPiAtMi45MzU2NTUxMEUtMjgyODE2MTM4IEluZXhhY3QgUm91bmRlZAoreGNvbTE4NyBjb21wYXJlIC0yOS4zNTY1NTFFLTI4MjgxNjEzOSAzNzE0MTc0OEUtOTAzMzk3ODIxIC0+IC0xCit4ZGl2MTg3IGRpdmlkZSAtMjkuMzU2NTUxRS0yODI4MTYxMzkgMzcxNDE3NDhFLTkwMzM5NzgyMSAtPiAtNy45MDM5MjI4M0UrNjIwNTgxNjc1IEluZXhhY3QgUm91bmRlZAoreGR2aTE4NyBkaXZpZGVpbnQgLTI5LjM1NjU1MUUtMjgyODE2MTM5IDM3MTQxNzQ4RS05MDMzOTc4MjEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxODcgbXVsdGlwbHkgLTI5LjM1NjU1MUUtMjgyODE2MTM5IDM3MTQxNzQ4RS05MDMzOTc4MjEgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzE4NyBwb3dlciAtMjkuMzU2NTUxRS0yODI4MTYxMzkgNCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xODcgcmVtYWluZGVyIC0yOS4zNTY1NTFFLTI4MjgxNjEzOSAzNzE0MTc0OEUtOTAzMzk3ODIxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTg3IHN1YnRyYWN0IC0yOS4zNTY1NTFFLTI4MjgxNjEzOSAzNzE0MTc0OEUtOTAzMzk3ODIxIC0+IC0yLjkzNTY1NTEwRS0yODI4MTYxMzggSW5leGFjdCBSb3VuZGVkCit4YWRkMTg4IGFkZCA5MjQyNzQ0Mi40IDY3NDMzNDg5OC4gLT4gNzY2NzYyMzQwIEluZXhhY3QgUm91bmRlZAoreGNvbTE4OCBjb21wYXJlIDkyNDI3NDQyLjQgNjc0MzM0ODk4LiAtPiAtMQoreGRpdjE4OCBkaXZpZGUgOTI0Mjc0NDIuNCA2NzQzMzQ4OTguIC0+IDAuMTM3MDY0NTk5IEluZXhhY3QgUm91bmRlZAoreGR2aTE4OCBkaXZpZGVpbnQgOTI0Mjc0NDIuNCA2NzQzMzQ4OTguIC0+IDAKK3htdWwxODggbXVsdGlwbHkgOTI0Mjc0NDIuNCA2NzQzMzQ4OTguIC0+IDYuMjMyNzA0OTlFKzE2IEluZXhhY3QgUm91bmRlZAoreHBvdzE4OCBwb3dlciA5MjQyNzQ0Mi40IDY3NDMzNDg5OCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xODggcmVtYWluZGVyIDkyNDI3NDQyLjQgNjc0MzM0ODk4LiAtPiA5MjQyNzQ0Mi40Cit4c3ViMTg4IHN1YnRyYWN0IDkyNDI3NDQyLjQgNjc0MzM0ODk4LiAtPiAtNTgxOTA3NDU2IEluZXhhY3QgUm91bmRlZAoreGFkZDE4OSBhZGQgNDQ2NTE4OTUuNyAtOTEwNTA4LjQzOCAtPiA0Mzc0MTM4Ny4zIEluZXhhY3QgUm91bmRlZAoreGNvbTE4OSBjb21wYXJlIDQ0NjUxODk1LjcgLTkxMDUwOC40MzggLT4gMQoreGRpdjE4OSBkaXZpZGUgNDQ2NTE4OTUuNyAtOTEwNTA4LjQzOCAtPiAtNDkuMDQwNjE3MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxODkgZGl2aWRlaW50IDQ0NjUxODk1LjcgLTkxMDUwOC40MzggLT4gLTQ5Cit4bXVsMTg5IG11bHRpcGx5IDQ0NjUxODk1LjcgLTkxMDUwOC40MzggLT4gLTQuMDY1NTkyNzhFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzE4OSBwb3dlciA0NDY1MTg5NS43IC05MTA1MDggLT4gMy43MjI2NDI3N0UtNjk2NTI0MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xODkgcmVtYWluZGVyIDQ0NjUxODk1LjcgLTkxMDUwOC40MzggLT4gMzY5ODIuMjM4Cit4c3ViMTg5IHN1YnRyYWN0IDQ0NjUxODk1LjcgLTkxMDUwOC40MzggLT4gNDU1NjI0MDQuMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxOTAgYWRkIDY0Nzg5Nzg3Mi5FKzM3NDAyMTc5MCAtNDY3LjQyMzAyOSAtPiA2LjQ3ODk3ODcyRSszNzQwMjE3OTggSW5leGFjdCBSb3VuZGVkCit4Y29tMTkwIGNvbXBhcmUgNjQ3ODk3ODcyLkUrMzc0MDIxNzkwIC00NjcuNDIzMDI5IC0+IDEKK3hkaXYxOTAgZGl2aWRlIDY0Nzg5Nzg3Mi5FKzM3NDAyMTc5MCAtNDY3LjQyMzAyOSAtPiAtMS4zODYxMDYwMUUrMzc0MDIxNzk2IEluZXhhY3QgUm91bmRlZAoreGR2aTE5MCBkaXZpZGVpbnQgNjQ3ODk3ODcyLkUrMzc0MDIxNzkwIC00NjcuNDIzMDI5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTkwIG11bHRpcGx5IDY0Nzg5Nzg3Mi5FKzM3NDAyMTc5MCAtNDY3LjQyMzAyOSAtPiAtMy4wMjg0MjM4NkUrMzc0MDIxODAxIEluZXhhY3QgUm91bmRlZAoreHBvdzE5MCBwb3dlciA2NDc4OTc4NzIuRSszNzQwMjE3OTAgLTQ2NyAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xOTAgcmVtYWluZGVyIDY0Nzg5Nzg3Mi5FKzM3NDAyMTc5MCAtNDY3LjQyMzAyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjE5MCBzdWJ0cmFjdCA2NDc4OTc4NzIuRSszNzQwMjE3OTAgLTQ2Ny40MjMwMjkgLT4gNi40Nzg5Nzg3MkUrMzc0MDIxNzk4IEluZXhhY3QgUm91bmRlZAoreGFkZDE5MSBhZGQgMjUuMjU5MjE0OSA1OS4wNDM2OTgxIC0+IDg0LjMwMjkxMzAKK3hjb20xOTEgY29tcGFyZSAyNS4yNTkyMTQ5IDU5LjA0MzY5ODEgLT4gLTEKK3hkaXYxOTEgZGl2aWRlIDI1LjI1OTIxNDkgNTkuMDQzNjk4MSAtPiAwLjQyNzgwNTQzNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxOTEgZGl2aWRlaW50IDI1LjI1OTIxNDkgNTkuMDQzNjk4MSAtPiAwCit4bXVsMTkxIG11bHRpcGx5IDI1LjI1OTIxNDkgNTkuMDQzNjk4MSAtPiAxNDkxLjM5NzQ2IEluZXhhY3QgUm91bmRlZAoreHBvdzE5MSBwb3dlciAyNS4yNTkyMTQ5IDU5IC0+IDUuNTMwNTg0MzVFKzgyIEluZXhhY3QgUm91bmRlZAoreHJlbTE5MSByZW1haW5kZXIgMjUuMjU5MjE0OSA1OS4wNDM2OTgxIC0+IDI1LjI1OTIxNDkKK3hzdWIxOTEgc3VidHJhY3QgMjUuMjU5MjE0OSA1OS4wNDM2OTgxIC0+IC0zMy43ODQ0ODMyCit4YWRkMTkyIGFkZCAtNi44NTA4MzUgLTEyNzMuNDgyNDAgLT4gLTEyODAuMzMzMjQgSW5leGFjdCBSb3VuZGVkCit4Y29tMTkyIGNvbXBhcmUgLTYuODUwODM1IC0xMjczLjQ4MjQwIC0+IDEKK3hkaXYxOTIgZGl2aWRlIC02Ljg1MDgzNSAtMTI3My40ODI0MCAtPiAwLjAwNTM3OTYwNzEzIEluZXhhY3QgUm91bmRlZAoreGR2aTE5MiBkaXZpZGVpbnQgLTYuODUwODM1IC0xMjczLjQ4MjQwIC0+IDAKK3htdWwxOTIgbXVsdGlwbHkgLTYuODUwODM1IC0xMjczLjQ4MjQwIC0+IDg3MjQuNDE3ODAgSW5leGFjdCBSb3VuZGVkCit4cG93MTkyIHBvd2VyIC02Ljg1MDgzNSAtMTI3MyAtPiAtMS4yNTQ2MjY3OEUtMTA2NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xOTIgcmVtYWluZGVyIC02Ljg1MDgzNSAtMTI3My40ODI0MCAtPiAtNi44NTA4MzUKK3hzdWIxOTIgc3VidHJhY3QgLTYuODUwODM1IC0xMjczLjQ4MjQwIC0+IDEyNjYuNjMxNTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMTkzIGFkZCAxNzQuMjcyMzI1IDU2MzguMTYyMjkgLT4gNTgxMi40MzQ2MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xOTMgY29tcGFyZSAxNzQuMjcyMzI1IDU2MzguMTYyMjkgLT4gLTEKK3hkaXYxOTMgZGl2aWRlIDE3NC4yNzIzMjUgNTYzOC4xNjIyOSAtPiAwLjAzMDkwOTQxOTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMTkzIGRpdmlkZWludCAxNzQuMjcyMzI1IDU2MzguMTYyMjkgLT4gMAoreG11bDE5MyBtdWx0aXBseSAxNzQuMjcyMzI1IDU2MzguMTYyMjkgLT4gOTgyNTc1LjY1MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxOTMgcG93ZXIgMTc0LjI3MjMyNSA1NjM4IC0+IDEuMTExMzc3MjRFKzEyNjM2IEluZXhhY3QgUm91bmRlZAoreHJlbTE5MyByZW1haW5kZXIgMTc0LjI3MjMyNSA1NjM4LjE2MjI5IC0+IDE3NC4yNzIzMjUKK3hzdWIxOTMgc3VidHJhY3QgMTc0LjI3MjMyNSA1NjM4LjE2MjI5IC0+IC01NDYzLjg4OTk3IEluZXhhY3QgUm91bmRlZAoreGFkZDE5NCBhZGQgMzQ1NTYyOS43NiAtOC4yNzMzMjMyMiAtPiAzNDU1NjIxLjQ5IEluZXhhY3QgUm91bmRlZAoreGNvbTE5NCBjb21wYXJlIDM0NTU2MjkuNzYgLTguMjczMzIzMjIgLT4gMQoreGRpdjE5NCBkaXZpZGUgMzQ1NTYyOS43NiAtOC4yNzMzMjMyMiAtPiAtNDE3NjgzLjM5OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxOTQgZGl2aWRlaW50IDM0NTU2MjkuNzYgLTguMjczMzIzMjIgLT4gLTQxNzY4MworeG11bDE5NCBtdWx0aXBseSAzNDU1NjI5Ljc2IC04LjI3MzMyMzIyIC0+IC0yODU4OTU0MS45IEluZXhhY3QgUm91bmRlZAoreHBvdzE5NCBwb3dlciAzNDU1NjI5Ljc2IC04IC0+IDQuOTE3OTMwMTVFLTUzIEluZXhhY3QgUm91bmRlZAoreHJlbTE5NCByZW1haW5kZXIgMzQ1NTYyOS43NiAtOC4yNzMzMjMyMiAtPiAzLjI5NzUwMDc0Cit4c3ViMTk0IHN1YnRyYWN0IDM0NTU2MjkuNzYgLTguMjczMzIzMjIgLT4gMzQ1NTYzOC4wMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxOTUgYWRkIC05MjQzMzc3MjNFLTY0MDc3MTIzNSA4NjYzOTM3Ny4xIC0+IDg2NjM5Mzc3LjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMTk1IGNvbXBhcmUgLTkyNDMzNzcyM0UtNjQwNzcxMjM1IDg2NjM5Mzc3LjEgLT4gLTEKK3hkaXYxOTUgZGl2aWRlIC05MjQzMzc3MjNFLTY0MDc3MTIzNSA4NjYzOTM3Ny4xIC0+IC0xLjA2Njg3OTQ3RS02NDA3NzEyMzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTk1IGRpdmlkZWludCAtOTI0MzM3NzIzRS02NDA3NzEyMzUgODY2MzkzNzcuMSAtPiAtMAoreG11bDE5NSBtdWx0aXBseSAtOTI0MzM3NzIzRS02NDA3NzEyMzUgODY2MzkzNzcuMSAtPiAtOC4wMDg0MDQ0NkUtNjQwNzcxMjE5IEluZXhhY3QgUm91bmRlZAoreHBvdzE5NSBwb3dlciAtOTI0MzM3NzIzRS02NDA3NzEyMzUgODY2MzkzNzcgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE5NSByZW1haW5kZXIgLTkyNDMzNzcyM0UtNjQwNzcxMjM1IDg2NjM5Mzc3LjEgLT4gLTkuMjQzMzc3MjNFLTY0MDc3MTIyNworeHN1YjE5NSBzdWJ0cmFjdCAtOTI0MzM3NzIzRS02NDA3NzEyMzUgODY2MzkzNzcuMSAtPiAtODY2MzkzNzcuMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxOTYgYWRkIC02MjAyMzY5MzIuRSs2NTY4MjM5NjkgMzM2NDcyMi43MyAtPiAtNi4yMDIzNjkzMkUrNjU2ODIzOTc3IEluZXhhY3QgUm91bmRlZAoreGNvbTE5NiBjb21wYXJlIC02MjAyMzY5MzIuRSs2NTY4MjM5NjkgMzM2NDcyMi43MyAtPiAtMQoreGRpdjE5NiBkaXZpZGUgLTYyMDIzNjkzMi5FKzY1NjgyMzk2OSAzMzY0NzIyLjczIC0+IC0xLjg0MzM1MjI4RSs2NTY4MjM5NzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTk2IGRpdmlkZWludCAtNjIwMjM2OTMyLkUrNjU2ODIzOTY5IDMzNjQ3MjIuNzMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxOTYgbXVsdGlwbHkgLTYyMDIzNjkzMi5FKzY1NjgyMzk2OSAzMzY0NzIyLjczIC0+IC0yLjA4NjkyNTMwRSs2NTY4MjM5ODQgSW5leGFjdCBSb3VuZGVkCit4cG93MTk2IHBvd2VyIC02MjAyMzY5MzIuRSs2NTY4MjM5NjkgMzM2NDcyMyAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMTk2IHJlbWFpbmRlciAtNjIwMjM2OTMyLkUrNjU2ODIzOTY5IDMzNjQ3MjIuNzMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxOTYgc3VidHJhY3QgLTYyMDIzNjkzMi5FKzY1NjgyMzk2OSAzMzY0NzIyLjczIC0+IC02LjIwMjM2OTMyRSs2NTY4MjM5NzcgSW5leGFjdCBSb3VuZGVkCit4YWRkMTk3IGFkZCA5LjEwMDI1MDc5IDcwMjc3Nzg4MkUtODE5MjIzNCAtPiA5LjEwMDI1MDc5IEluZXhhY3QgUm91bmRlZAoreGNvbTE5NyBjb21wYXJlIDkuMTAwMjUwNzkgNzAyNzc3ODgyRS04MTkyMjM0IC0+IDEKK3hkaXYxOTcgZGl2aWRlIDkuMTAwMjUwNzkgNzAyNzc3ODgyRS04MTkyMjM0IC0+IDEuMjk0ODk3MTVFKzgxOTIyMjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTk3IGRpdmlkZWludCA5LjEwMDI1MDc5IDcwMjc3Nzg4MkUtODE5MjIzNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDE5NyBtdWx0aXBseSA5LjEwMDI1MDc5IDcwMjc3Nzg4MkUtODE5MjIzNCAtPiA2LjM5NTQ1NDk4RS04MTkyMjI1IEluZXhhY3QgUm91bmRlZAoreHBvdzE5NyBwb3dlciA5LjEwMDI1MDc5IDcgLT4gNTE2ODYwNy4xOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xOTcgcmVtYWluZGVyIDkuMTAwMjUwNzkgNzAyNzc3ODgyRS04MTkyMjM0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTk3IHN1YnRyYWN0IDkuMTAwMjUwNzkgNzAyNzc3ODgyRS04MTkyMjM0IC0+IDkuMTAwMjUwNzkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTk4IGFkZCAtMTg4NTc1MzkuOSA4MTMwMTMxMjkuIC0+IDc5NDE1NTU4OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xOTggY29tcGFyZSAtMTg4NTc1MzkuOSA4MTMwMTMxMjkuIC0+IC0xCit4ZGl2MTk4IGRpdmlkZSAtMTg4NTc1MzkuOSA4MTMwMTMxMjkuIC0+IC0wLjAyMzE5NDYzMTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTk4IGRpdmlkZWludCAtMTg4NTc1MzkuOSA4MTMwMTMxMjkuIC0+IC0wCit4bXVsMTk4IG11bHRpcGx5IC0xODg1NzUzOS45IDgxMzAxMzEyOS4gLT4gLTEuNTMzMTQyNzVFKzE2IEluZXhhY3QgUm91bmRlZAoreHBvdzE5OCBwb3dlciAtMTg4NTc1MzkuOSA4MTMwMTMxMjkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTE5OCByZW1haW5kZXIgLTE4ODU3NTM5LjkgODEzMDEzMTI5LiAtPiAtMTg4NTc1MzkuOQoreHN1YjE5OCBzdWJ0cmFjdCAtMTg4NTc1MzkuOSA4MTMwMTMxMjkuIC0+IC04MzE4NzA2NjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTk5IGFkZCAtOC4yOTUzMDMyNyAzMjQzNDE5LjU3RSszNTY4ODMzMiAtPiAzLjI0MzQxOTU3RSszNTY4ODMzOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xOTkgY29tcGFyZSAtOC4yOTUzMDMyNyAzMjQzNDE5LjU3RSszNTY4ODMzMiAtPiAtMQoreGRpdjE5OSBkaXZpZGUgLTguMjk1MzAzMjcgMzI0MzQxOS41N0UrMzU2ODgzMzIgLT4gLTIuNTU3NTc5NDZFLTM1Njg4MzM4IEluZXhhY3QgUm91bmRlZAoreGR2aTE5OSBkaXZpZGVpbnQgLTguMjk1MzAzMjcgMzI0MzQxOS41N0UrMzU2ODgzMzIgLT4gLTAKK3htdWwxOTkgbXVsdGlwbHkgLTguMjk1MzAzMjcgMzI0MzQxOS41N0UrMzU2ODgzMzIgLT4gLTIuNjkwNTE0OTBFKzM1Njg4MzM5IEluZXhhY3QgUm91bmRlZAoreHBvdzE5OSBwb3dlciAtOC4yOTUzMDMyNyAzIC0+IC01NzAuODE2ODc2IEluZXhhY3QgUm91bmRlZAoreHJlbTE5OSByZW1haW5kZXIgLTguMjk1MzAzMjcgMzI0MzQxOS41N0UrMzU2ODgzMzIgLT4gLTguMjk1MzAzMjcKK3hzdWIxOTkgc3VidHJhY3QgLTguMjk1MzAzMjcgMzI0MzQxOS41N0UrMzU2ODgzMzIgLT4gLTMuMjQzNDE5NTdFKzM1Njg4MzM4IEluZXhhY3QgUm91bmRlZAoreGFkZDIwMCBhZGQgLTU3MTAxNjgzLjUgNzYzNTUxMzQxRSs5OTE0OTE3MTIgLT4gNy42MzU1MTM0MUUrOTkxNDkxNzIwIEluZXhhY3QgUm91bmRlZAoreGNvbTIwMCBjb21wYXJlIC01NzEwMTY4My41IDc2MzU1MTM0MUUrOTkxNDkxNzEyIC0+IC0xCit4ZGl2MjAwIGRpdmlkZSAtNTcxMDE2ODMuNSA3NjM1NTEzNDFFKzk5MTQ5MTcxMiAtPiAtNy40Nzg0MzQwNUUtOTkxNDkxNzE0IEluZXhhY3QgUm91bmRlZAoreGR2aTIwMCBkaXZpZGVpbnQgLTU3MTAxNjgzLjUgNzYzNTUxMzQxRSs5OTE0OTE3MTIgLT4gLTAKK3htdWwyMDAgbXVsdGlwbHkgLTU3MTAxNjgzLjUgNzYzNTUxMzQxRSs5OTE0OTE3MTIgLT4gLTQuMzYwMDA2NzBFKzk5MTQ5MTcyOCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMDAgcG93ZXIgLTU3MTAxNjgzLjUgOCAtPiAxLjEzMDI5MzY4RSs2MiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMDAgcmVtYWluZGVyIC01NzEwMTY4My41IDc2MzU1MTM0MUUrOTkxNDkxNzEyIC0+IC01NzEwMTY4My41Cit4c3ViMjAwIHN1YnRyYWN0IC01NzEwMTY4My41IDc2MzU1MTM0MUUrOTkxNDkxNzEyIC0+IC03LjYzNTUxMzQxRSs5OTE0OTE3MjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjAxIGFkZCAtNjAzMzI2Ljc0MCAxNzEwLjk1MTgzIC0+IC02MDE2MTUuNzg4IEluZXhhY3QgUm91bmRlZAoreGNvbTIwMSBjb21wYXJlIC02MDMzMjYuNzQwIDE3MTAuOTUxODMgLT4gLTEKK3hkaXYyMDEgZGl2aWRlIC02MDMzMjYuNzQwIDE3MTAuOTUxODMgLT4gLTM1Mi42MjYzNzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjAxIGRpdmlkZWludCAtNjAzMzI2Ljc0MCAxNzEwLjk1MTgzIC0+IC0zNTIKK3htdWwyMDEgbXVsdGlwbHkgLTYwMzMyNi43NDAgMTcxMC45NTE4MyAtPiAtMS4wMzIyNjI5OUUrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMDEgcG93ZXIgLTYwMzMyNi43NDAgMTcxMSAtPiAtMy4zNTMxNTk3NkUrOTg5MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMDEgcmVtYWluZGVyIC02MDMzMjYuNzQwIDE3MTAuOTUxODMgLT4gLTEwNzEuNjk1ODQKK3hzdWIyMDEgc3VidHJhY3QgLTYwMzMyNi43NDAgMTcxMC45NTE4MyAtPiAtNjA1MDM3LjY5MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMDIgYWRkIC00ODE0Mjc2My4zIC05NDM0MzQxMTQgLT4gLTk5MTU3Njg3NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMDIgY29tcGFyZSAtNDgxNDI3NjMuMyAtOTQzNDM0MTE0IC0+IDEKK3hkaXYyMDIgZGl2aWRlIC00ODE0Mjc2My4zIC05NDM0MzQxMTQgLT4gMC4wNTEwMjkyNzk3IEluZXhhY3QgUm91bmRlZAoreGR2aTIwMiBkaXZpZGVpbnQgLTQ4MTQyNzYzLjMgLTk0MzQzNDExNCAtPiAwCit4bXVsMjAyIG11bHRpcGx5IC00ODE0Mjc2My4zIC05NDM0MzQxMTQgLT4gNC41NDE5NTI1MkUrMTYgSW5leGFjdCBSb3VuZGVkCit4cG93MjAyIHBvd2VyIC00ODE0Mjc2My4zIC05NDM0MzQxMTQgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjAyIHJlbWFpbmRlciAtNDgxNDI3NjMuMyAtOTQzNDM0MTE0IC0+IC00ODE0Mjc2My4zCit4c3ViMjAyIHN1YnRyYWN0IC00ODE0Mjc2My4zIC05NDM0MzQxMTQgLT4gODk1MjkxMzUxIEluZXhhY3QgUm91bmRlZAoreGFkZDIwMyBhZGQgLTIwNC41ODY3NjcgLTIzNS41MzE4NDcgLT4gLTQ0MC4xMTg2MTQKK3hjb20yMDMgY29tcGFyZSAtMjA0LjU4Njc2NyAtMjM1LjUzMTg0NyAtPiAxCit4ZGl2MjAzIGRpdmlkZSAtMjA0LjU4Njc2NyAtMjM1LjUzMTg0NyAtPiAwLjg2ODYxNjE1NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMDMgZGl2aWRlaW50IC0yMDQuNTg2NzY3IC0yMzUuNTMxODQ3IC0+IDAKK3htdWwyMDMgbXVsdGlwbHkgLTIwNC41ODY3NjcgLTIzNS41MzE4NDcgLT4gNDgxODYuNjk5MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMDMgcG93ZXIgLTIwNC41ODY3NjcgLTIzNiAtPiA0LjI5NDM4MjIyRS01NDYgSW5leGFjdCBSb3VuZGVkCit4cmVtMjAzIHJlbWFpbmRlciAtMjA0LjU4Njc2NyAtMjM1LjUzMTg0NyAtPiAtMjA0LjU4Njc2NworeHN1YjIwMyBzdWJ0cmFjdCAtMjA0LjU4Njc2NyAtMjM1LjUzMTg0NyAtPiAzMC45NDUwODAKK3hhZGQyMDQgYWRkIC03MC4zODA1NTgxIDgzMDEzNy45MTMgLT4gODMwMDY3LjUzMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMDQgY29tcGFyZSAtNzAuMzgwNTU4MSA4MzAxMzcuOTEzIC0+IC0xCit4ZGl2MjA0IGRpdmlkZSAtNzAuMzgwNTU4MSA4MzAxMzcuOTEzIC0+IC0wLjAwMDA4NDc4MTc2NTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMjA0IGRpdmlkZWludCAtNzAuMzgwNTU4MSA4MzAxMzcuOTEzIC0+IC0wCit4bXVsMjA0IG11bHRpcGx5IC03MC4zODA1NTgxIDgzMDEzNy45MTMgLT4gLTU4NDI1NTY5LjYgSW5leGFjdCBSb3VuZGVkCit4cG93MjA0IHBvd2VyIC03MC4zODA1NTgxIDgzMDEzOCAtPiA0Ljk1MTY1ODQxRSsxNTMzNjQwIEluZXhhY3QgUm91bmRlZAoreHJlbTIwNCByZW1haW5kZXIgLTcwLjM4MDU1ODEgODMwMTM3LjkxMyAtPiAtNzAuMzgwNTU4MQoreHN1YjIwNCBzdWJ0cmFjdCAtNzAuMzgwNTU4MSA4MzAxMzcuOTEzIC0+IC04MzAyMDguMjk0IEluZXhhY3QgUm91bmRlZAoreGFkZDIwNSBhZGQgLTg4MTguNDc2MDYgLTYwNzY2LjQ1NzEgLT4gLTY5NTg0LjkzMzIgSW5leGFjdCBSb3VuZGVkCit4Y29tMjA1IGNvbXBhcmUgLTg4MTguNDc2MDYgLTYwNzY2LjQ1NzEgLT4gMQoreGRpdjIwNSBkaXZpZGUgLTg4MTguNDc2MDYgLTYwNzY2LjQ1NzEgLT4gMC4xNDUxMjA3ODcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjA1IGRpdmlkZWludCAtODgxOC40NzYwNiAtNjA3NjYuNDU3MSAtPiAwCit4bXVsMjA1IG11bHRpcGx5IC04ODE4LjQ3NjA2IC02MDc2Ni40NTcxIC0+IDUzNTg2NzU0NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMDUgcG93ZXIgLTg4MTguNDc2MDYgLTYwNzY2IC0+IDEuNjQ0ODc3NTVFLTIzOTc0NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMDUgcmVtYWluZGVyIC04ODE4LjQ3NjA2IC02MDc2Ni40NTcxIC0+IC04ODE4LjQ3NjA2Cit4c3ViMjA1IHN1YnRyYWN0IC04ODE4LjQ3NjA2IC02MDc2Ni40NTcxIC0+IDUxOTQ3Ljk4MTAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjA2IGFkZCAzNzA2MDkyOS4zRS0xNjg0Mzk1MDkgLTc5NTc2NzE3LjEgLT4gLTc5NTc2NzE3LjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMjA2IGNvbXBhcmUgMzcwNjA5MjkuM0UtMTY4NDM5NTA5IC03OTU3NjcxNy4xIC0+IDEKK3hkaXYyMDYgZGl2aWRlIDM3MDYwOTI5LjNFLTE2ODQzOTUwOSAtNzk1NzY3MTcuMSAtPiAtNC42NTcyNTc4OEUtMTY4NDM5NTEwIEluZXhhY3QgUm91bmRlZAoreGR2aTIwNiBkaXZpZGVpbnQgMzcwNjA5MjkuM0UtMTY4NDM5NTA5IC03OTU3NjcxNy4xIC0+IC0wCit4bXVsMjA2IG11bHRpcGx5IDM3MDYwOTI5LjNFLTE2ODQzOTUwOSAtNzk1NzY3MTcuMSAtPiAtMi45NDkxODcwOUUtMTY4NDM5NDk0IEluZXhhY3QgUm91bmRlZAoreHBvdzIwNiBwb3dlciAzNzA2MDkyOS4zRS0xNjg0Mzk1MDkgLTc5NTc2NzE3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTIwNiByZW1haW5kZXIgMzcwNjA5MjkuM0UtMTY4NDM5NTA5IC03OTU3NjcxNy4xIC0+IDMuNzA2MDkyOTNFLTE2ODQzOTUwMgoreHN1YjIwNiBzdWJ0cmFjdCAzNzA2MDkyOS4zRS0xNjg0Mzk1MDkgLTc5NTc2NzE3LjEgLT4gNzk1NzY3MTcuMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMDcgYWRkIC02NTYyODUzMTAuIC0xMDcyMjE0NjIuIC0+IC03NjM1MDY3NzIKK3hjb20yMDcgY29tcGFyZSAtNjU2Mjg1MzEwLiAtMTA3MjIxNDYyLiAtPiAtMQoreGRpdjIwNyBkaXZpZGUgLTY1NjI4NTMxMC4gLTEwNzIyMTQ2Mi4gLT4gNi4xMjA4MzkwNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMDcgZGl2aWRlaW50IC02NTYyODUzMTAuIC0xMDcyMjE0NjIuIC0+IDYKK3htdWwyMDcgbXVsdGlwbHkgLTY1NjI4NTMxMC4gLTEwNzIyMTQ2Mi4gLT4gNy4wMzY3ODcwNEUrMTYgSW5leGFjdCBSb3VuZGVkCit4cG93MjA3IHBvd2VyIC02NTYyODUzMTAuIC0xMDcyMjE0NjIgLT4gOC4wNTMzODA4MEUtOTQ1MzgxNTY5IEluZXhhY3QgUm91bmRlZAoreHJlbTIwNyByZW1haW5kZXIgLTY1NjI4NTMxMC4gLTEwNzIyMTQ2Mi4gLT4gLTEyOTU2NTM4Cit4c3ViMjA3IHN1YnRyYWN0IC02NTYyODUzMTAuIC0xMDcyMjE0NjIuIC0+IC01NDkwNjM4NDgKK3hhZGQyMDggYWRkIDY1MzM5Ny4xMjUgNzE5NS4zMDk5MCAtPiA2NjA1OTIuNDM1IEluZXhhY3QgUm91bmRlZAoreGNvbTIwOCBjb21wYXJlIDY1MzM5Ny4xMjUgNzE5NS4zMDk5MCAtPiAxCit4ZGl2MjA4IGRpdmlkZSA2NTMzOTcuMTI1IDcxOTUuMzA5OTAgLT4gOTAuODA4NzUzOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMDggZGl2aWRlaW50IDY1MzM5Ny4xMjUgNzE5NS4zMDk5MCAtPiA5MAoreG11bDIwOCBtdWx0aXBseSA2NTMzOTcuMTI1IDcxOTUuMzA5OTAgLT4gNC43MDEzOTQ4MEUrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMDggcG93ZXIgNjUzMzk3LjEyNSA3MTk1IC0+IDEuNTg1MjI5ODNFKzQxODQwIEluZXhhY3QgUm91bmRlZAoreHJlbTIwOCByZW1haW5kZXIgNjUzMzk3LjEyNSA3MTk1LjMwOTkwIC0+IDU4MTkuMjM0MDAKK3hzdWIyMDggc3VidHJhY3QgNjUzMzk3LjEyNSA3MTk1LjMwOTkwIC0+IDY0NjIwMS44MTUgSW5leGFjdCBSb3VuZGVkCit4YWRkMjA5IGFkZCA1NjIyMTkxMC4wRSs4NTc5MDkzNzQgLTU4LjcyNDc5MjkgLT4gNS42MjIxOTEwMEUrODU3OTA5MzgxIEluZXhhY3QgUm91bmRlZAoreGNvbTIwOSBjb21wYXJlIDU2MjIxOTEwLjBFKzg1NzkwOTM3NCAtNTguNzI0NzkyOSAtPiAxCit4ZGl2MjA5IGRpdmlkZSA1NjIyMTkxMC4wRSs4NTc5MDkzNzQgLTU4LjcyNDc5MjkgLT4gLTkuNTczNzk0NTFFKzg1NzkwOTM3OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMDkgZGl2aWRlaW50IDU2MjIxOTEwLjBFKzg1NzkwOTM3NCAtNTguNzI0NzkyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDIwOSBtdWx0aXBseSA1NjIyMTkxMC4wRSs4NTc5MDkzNzQgLTU4LjcyNDc5MjkgLT4gLTMuMzAxNjIwMDJFKzg1NzkwOTM4MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMDkgcG93ZXIgNTYyMjE5MTAuMEUrODU3OTA5Mzc0IC01OSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yMDkgcmVtYWluZGVyIDU2MjIxOTEwLjBFKzg1NzkwOTM3NCAtNTguNzI0NzkyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjIwOSBzdWJ0cmFjdCA1NjIyMTkxMC4wRSs4NTc5MDkzNzQgLTU4LjcyNDc5MjkgLT4gNS42MjIxOTEwMEUrODU3OTA5MzgxIEluZXhhY3QgUm91bmRlZAoreGFkZDIxMCBhZGQgODA5ODYyODU5RSs2NDM3Njk5NzQgLTUuMDY3ODQwMTYgLT4gOC4wOTg2Mjg1OUUrNjQzNzY5OTgyIEluZXhhY3QgUm91bmRlZAoreGNvbTIxMCBjb21wYXJlIDgwOTg2Mjg1OUUrNjQzNzY5OTc0IC01LjA2Nzg0MDE2IC0+IDEKK3hkaXYyMTAgZGl2aWRlIDgwOTg2Mjg1OUUrNjQzNzY5OTc0IC01LjA2Nzg0MDE2IC0+IC0xLjU5ODA0MzQxRSs2NDM3Njk5ODIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjEwIGRpdmlkZWludCA4MDk4NjI4NTlFKzY0Mzc2OTk3NCAtNS4wNjc4NDAxNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDIxMCBtdWx0aXBseSA4MDk4NjI4NTlFKzY0Mzc2OTk3NCAtNS4wNjc4NDAxNiAtPiAtNC4xMDQyNTU1MkUrNjQzNzY5OTgzIEluZXhhY3QgUm91bmRlZAoreHBvdzIxMCBwb3dlciA4MDk4NjI4NTlFKzY0Mzc2OTk3NCAtNSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yMTAgcmVtYWluZGVyIDgwOTg2Mjg1OUUrNjQzNzY5OTc0IC01LjA2Nzg0MDE2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjEwIHN1YnRyYWN0IDgwOTg2Mjg1OUUrNjQzNzY5OTc0IC01LjA2Nzg0MDE2IC0+IDguMDk4NjI4NTlFKzY0Mzc2OTk4MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTEgYWRkIC02MjAxMS40NTYzRS0xMTc1NjMyNDAgLTU3LjE3MzE1ODZFKzExNTY1NzIwNCAtPiAtNS43MTczMTU4NkUrMTE1NjU3MjA1IEluZXhhY3QgUm91bmRlZAoreGNvbTIxMSBjb21wYXJlIC02MjAxMS40NTYzRS0xMTc1NjMyNDAgLTU3LjE3MzE1ODZFKzExNTY1NzIwNCAtPiAxCit4ZGl2MjExIGRpdmlkZSAtNjIwMTEuNDU2M0UtMTE3NTYzMjQwIC01Ny4xNzMxNTg2RSsxMTU2NTcyMDQgLT4gMS4wODQ2MjUzNEUtMjMzMjIwNDQxIEluZXhhY3QgUm91bmRlZAoreGR2aTIxMSBkaXZpZGVpbnQgLTYyMDExLjQ1NjNFLTExNzU2MzI0MCAtNTcuMTczMTU4NkUrMTE1NjU3MjA0IC0+IDAKK3htdWwyMTEgbXVsdGlwbHkgLTYyMDExLjQ1NjNFLTExNzU2MzI0MCAtNTcuMTczMTU4NkUrMTE1NjU3MjA0IC0+IDMuNTQ1MzkwODNFLTE5MDYwMzAgSW5leGFjdCBSb3VuZGVkCit4cG93MjExIHBvd2VyIC02MjAxMS40NTYzRS0xMTc1NjMyNDAgLTYgLT4gMS43NTg2MDU0NkUrNzA1Mzc5NDExIEluZXhhY3QgUm91bmRlZAoreHJlbTIxMSByZW1haW5kZXIgLTYyMDExLjQ1NjNFLTExNzU2MzI0MCAtNTcuMTczMTU4NkUrMTE1NjU3MjA0IC0+IC02LjIwMTE0NTYzRS0xMTc1NjMyMzYKK3hzdWIyMTEgc3VidHJhY3QgLTYyMDExLjQ1NjNFLTExNzU2MzI0MCAtNTcuMTczMTU4NkUrMTE1NjU3MjA0IC0+IDUuNzE3MzE1ODZFKzExNTY1NzIwNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTIgYWRkIDMxNS4zMzM1MSA5MTU4OC44MzdFLTUzNjAyMDE0OSAtPiAzMTUuMzMzNTEwIEluZXhhY3QgUm91bmRlZAoreGNvbTIxMiBjb21wYXJlIDMxNS4zMzM1MSA5MTU4OC44MzdFLTUzNjAyMDE0OSAtPiAxCit4ZGl2MjEyIGRpdmlkZSAzMTUuMzMzNTEgOTE1ODguODM3RS01MzYwMjAxNDkgLT4gMy40NDI5MjUxNUUrNTM2MDIwMTQ2IEluZXhhY3QgUm91bmRlZAoreGR2aTIxMiBkaXZpZGVpbnQgMzE1LjMzMzUxIDkxNTg4LjgzN0UtNTM2MDIwMTQ5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjEyIG11bHRpcGx5IDMxNS4zMzM1MSA5MTU4OC44MzdFLTUzNjAyMDE0OSAtPiAyLjg4ODEwMjk0RS01MzYwMjAxNDIgSW5leGFjdCBSb3VuZGVkCit4cG93MjEyIHBvd2VyIDMxNS4zMzM1MSA5IC0+IDMuMDgyNjk5MDJFKzIyIEluZXhhY3QgUm91bmRlZAoreHJlbTIxMiByZW1haW5kZXIgMzE1LjMzMzUxIDkxNTg4LjgzN0UtNTM2MDIwMTQ5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjEyIHN1YnRyYWN0IDMxNS4zMzM1MSA5MTU4OC44MzdFLTUzNjAyMDE0OSAtPiAzMTUuMzMzNTEwIEluZXhhY3QgUm91bmRlZAoreGFkZDIxMyBhZGQgNzM5Ljk0NDcxMCAyMDI5NDkuMTc1IC0+IDIwMzY4OS4xMjAgSW5leGFjdCBSb3VuZGVkCit4Y29tMjEzIGNvbXBhcmUgNzM5Ljk0NDcxMCAyMDI5NDkuMTc1IC0+IC0xCit4ZGl2MjEzIGRpdmlkZSA3MzkuOTQ0NzEwIDIwMjk0OS4xNzUgLT4gMC4wMDM2NDU5NjA2NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMTMgZGl2aWRlaW50IDczOS45NDQ3MTAgMjAyOTQ5LjE3NSAtPiAwCit4bXVsMjEzIG11bHRpcGx5IDczOS45NDQ3MTAgMjAyOTQ5LjE3NSAtPiAxNTAxNzExNjggSW5leGFjdCBSb3VuZGVkCit4cG93MjEzIHBvd2VyIDczOS45NDQ3MTAgMjAyOTQ5IC0+IDEuMzI2MTE3MjlFKzU4MjMwMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMTMgcmVtYWluZGVyIDczOS45NDQ3MTAgMjAyOTQ5LjE3NSAtPiA3MzkuOTQ0NzEwCit4c3ViMjEzIHN1YnRyYWN0IDczOS45NDQ3MTAgMjAyOTQ5LjE3NSAtPiAtMjAyMjA5LjIzMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTQgYWRkIDg3Njg2LjgwMTYgNDIwNDg5MC40MCAtPiA0MjkyNTc3LjIwIEluZXhhY3QgUm91bmRlZAoreGNvbTIxNCBjb21wYXJlIDg3Njg2LjgwMTYgNDIwNDg5MC40MCAtPiAtMQoreGRpdjIxNCBkaXZpZGUgODc2ODYuODAxNiA0MjA0ODkwLjQwIC0+IDAuMDIwODUzNTI4NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMTQgZGl2aWRlaW50IDg3Njg2LjgwMTYgNDIwNDg5MC40MCAtPiAwCit4bXVsMjE0IG11bHRpcGx5IDg3Njg2LjgwMTYgNDIwNDg5MC40MCAtPiAzLjY4NzEzMzkwRSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMTQgcG93ZXIgODc2ODYuODAxNiA0MjA0ODkwIC0+IDUuMTQ4NDY5ODFFKzIwNzg0NDk0IEluZXhhY3QgUm91bmRlZAoreHJlbTIxNCByZW1haW5kZXIgODc2ODYuODAxNiA0MjA0ODkwLjQwIC0+IDg3Njg2LjgwMTYKK3hzdWIyMTQgc3VidHJhY3QgODc2ODYuODAxNiA0MjA0ODkwLjQwIC0+IC00MTE3MjAzLjYwIEluZXhhY3QgUm91bmRlZAoreGFkZDIxNSBhZGQgOTg3MTI2NzIxLkUtNzI1Nzk0ODM0IDQ4NzQxNjYuMjMgLT4gNDg3NDE2Ni4yMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMTUgY29tcGFyZSA5ODcxMjY3MjEuRS03MjU3OTQ4MzQgNDg3NDE2Ni4yMyAtPiAtMQoreGRpdjIxNSBkaXZpZGUgOTg3MTI2NzIxLkUtNzI1Nzk0ODM0IDQ4NzQxNjYuMjMgLT4gMi4wMjUyMjE3MEUtNzI1Nzk0ODMyIEluZXhhY3QgUm91bmRlZAoreGR2aTIxNSBkaXZpZGVpbnQgOTg3MTI2NzIxLkUtNzI1Nzk0ODM0IDQ4NzQxNjYuMjMgLT4gMAoreG11bDIxNSBtdWx0aXBseSA5ODcxMjY3MjEuRS03MjU3OTQ4MzQgNDg3NDE2Ni4yMyAtPiA0LjgxMTQxOTczRS03MjU3OTQ4MTkgSW5leGFjdCBSb3VuZGVkCit4cG93MjE1IHBvd2VyIDk4NzEyNjcyMS5FLTcyNTc5NDgzNCA0ODc0MTY2IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTIxNSByZW1haW5kZXIgOTg3MTI2NzIxLkUtNzI1Nzk0ODM0IDQ4NzQxNjYuMjMgLT4gOS44NzEyNjcyMUUtNzI1Nzk0ODI2Cit4c3ViMjE1IHN1YnRyYWN0IDk4NzEyNjcyMS5FLTcyNTc5NDgzNCA0ODc0MTY2LjIzIC0+IC00ODc0MTY2LjIzIEluZXhhY3QgUm91bmRlZAoreGFkZDIxNiBhZGQgNzI4MTQ4NzI2LkUtNjYxNjk1OTM4IDMyNzk4LjUyMDIgLT4gMzI3OTguNTIwMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMTYgY29tcGFyZSA3MjgxNDg3MjYuRS02NjE2OTU5MzggMzI3OTguNTIwMiAtPiAtMQoreGRpdjIxNiBkaXZpZGUgNzI4MTQ4NzI2LkUtNjYxNjk1OTM4IDMyNzk4LjUyMDIgLT4gMi4yMjAwNjU3OUUtNjYxNjk1OTM0IEluZXhhY3QgUm91bmRlZAoreGR2aTIxNiBkaXZpZGVpbnQgNzI4MTQ4NzI2LkUtNjYxNjk1OTM4IDMyNzk4LjUyMDIgLT4gMAoreG11bDIxNiBtdWx0aXBseSA3MjgxNDg3MjYuRS02NjE2OTU5MzggMzI3OTguNTIwMiAtPiAyLjM4ODIyMDA3RS02NjE2OTU5MjUgSW5leGFjdCBSb3VuZGVkCit4cG93MjE2IHBvd2VyIDcyODE0ODcyNi5FLTY2MTY5NTkzOCAzMjc5OSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yMTYgcmVtYWluZGVyIDcyODE0ODcyNi5FLTY2MTY5NTkzOCAzMjc5OC41MjAyIC0+IDcuMjgxNDg3MjZFLTY2MTY5NTkzMAoreHN1YjIxNiBzdWJ0cmFjdCA3MjgxNDg3MjYuRS02NjE2OTU5MzggMzI3OTguNTIwMiAtPiAtMzI3OTguNTIwMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTcgYWRkIDc0MjgyMTkuOTcgNjY3LjMyNjc2MCAtPiA3NDI4ODg3LjMwIEluZXhhY3QgUm91bmRlZAoreGNvbTIxNyBjb21wYXJlIDc0MjgyMTkuOTcgNjY3LjMyNjc2MCAtPiAxCit4ZGl2MjE3IGRpdmlkZSA3NDI4MjE5Ljk3IDY2Ny4zMjY3NjAgLT4gMTExMzEuMzA4NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMTcgZGl2aWRlaW50IDc0MjgyMTkuOTcgNjY3LjMyNjc2MCAtPiAxMTEzMQoreG11bDIxNyBtdWx0aXBseSA3NDI4MjE5Ljk3IDY2Ny4zMjY3NjAgLT4gNC45NTcwNDk5N0UrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMTcgcG93ZXIgNzQyODIxOS45NyA2NjcgLT4gNy41ODgwODUwOUUrNDU4MiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMTcgcmVtYWluZGVyIDc0MjgyMTkuOTcgNjY3LjMyNjc2MCAtPiAyMDUuODA0NDQwCit4c3ViMjE3IHN1YnRyYWN0IDc0MjgyMTkuOTcgNjY3LjMyNjc2MCAtPiA3NDI3NTUyLjY0IEluZXhhY3QgUm91bmRlZAoreGFkZDIxOCBhZGQgLTcyOTEuMTkyMTIgMjA5LjY0OTY2RS01ODg1MjY0NzYgLT4gLTcyOTEuMTkyMTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMjE4IGNvbXBhcmUgLTcyOTEuMTkyMTIgMjA5LjY0OTY2RS01ODg1MjY0NzYgLT4gLTEKK3hkaXYyMTggZGl2aWRlIC03MjkxLjE5MjEyIDIwOS42NDk2NkUtNTg4NTI2NDc2IC0+IC0zLjQ3Nzc5ODIxRSs1ODg1MjY0NzcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjE4IGRpdmlkZWludCAtNzI5MS4xOTIxMiAyMDkuNjQ5NjZFLTU4ODUyNjQ3NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDIxOCBtdWx0aXBseSAtNzI5MS4xOTIxMiAyMDkuNjQ5NjZFLTU4ODUyNjQ3NiAtPiAtMS41Mjg1OTU5NUUtNTg4NTI2NDcwIEluZXhhY3QgUm91bmRlZAoreHBvdzIxOCBwb3dlciAtNzI5MS4xOTIxMiAyIC0+IDUzMTYxNDgyLjUgSW5leGFjdCBSb3VuZGVkCit4cmVtMjE4IHJlbWFpbmRlciAtNzI5MS4xOTIxMiAyMDkuNjQ5NjZFLTU4ODUyNjQ3NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjIxOCBzdWJ0cmFjdCAtNzI5MS4xOTIxMiAyMDkuNjQ5NjZFLTU4ODUyNjQ3NiAtPiAtNzI5MS4xOTIxMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTkgYWRkIC0zNTguMjQ1NTAgLTQ0NDcuNzg2NzVFKzYwMTQwMjUwOSAtPiAtNC40NDc3ODY3NUUrNjAxNDAyNTEyIEluZXhhY3QgUm91bmRlZAoreGNvbTIxOSBjb21wYXJlIC0zNTguMjQ1NTAgLTQ0NDcuNzg2NzVFKzYwMTQwMjUwOSAtPiAxCit4ZGl2MjE5IGRpdmlkZSAtMzU4LjI0NTUwIC00NDQ3Ljc4Njc1RSs2MDE0MDI1MDkgLT4gOC4wNTQ0NjY2NEUtNjAxNDAyNTExIEluZXhhY3QgUm91bmRlZAoreGR2aTIxOSBkaXZpZGVpbnQgLTM1OC4yNDU1MCAtNDQ0Ny43ODY3NUUrNjAxNDAyNTA5IC0+IDAKK3htdWwyMTkgbXVsdGlwbHkgLTM1OC4yNDU1MCAtNDQ0Ny43ODY3NUUrNjAxNDAyNTA5IC0+IDEuNTkzMzk5NTlFKzYwMTQwMjUxNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMTkgcG93ZXIgLTM1OC4yNDU1MCAtNCAtPiA2LjA3MTIzNDc0RS0xMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMTkgcmVtYWluZGVyIC0zNTguMjQ1NTAgLTQ0NDcuNzg2NzVFKzYwMTQwMjUwOSAtPiAtMzU4LjI0NTUwCit4c3ViMjE5IHN1YnRyYWN0IC0zNTguMjQ1NTAgLTQ0NDcuNzg2NzVFKzYwMTQwMjUwOSAtPiA0LjQ0Nzc4Njc1RSs2MDE0MDI1MTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMjIwIGFkZCAxMTguNjIxODI2IC0yLjcyMDEwMDM4IC0+IDExNS45MDE3MjYgSW5leGFjdCBSb3VuZGVkCit4Y29tMjIwIGNvbXBhcmUgMTE4LjYyMTgyNiAtMi43MjAxMDAzOCAtPiAxCit4ZGl2MjIwIGRpdmlkZSAxMTguNjIxODI2IC0yLjcyMDEwMDM4IC0+IC00My42MDkzNTYxIEluZXhhY3QgUm91bmRlZAoreGR2aTIyMCBkaXZpZGVpbnQgMTE4LjYyMTgyNiAtMi43MjAxMDAzOCAtPiAtNDMKK3htdWwyMjAgbXVsdGlwbHkgMTE4LjYyMTgyNiAtMi43MjAxMDAzOCAtPiAtMzIyLjY2MzI3NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjAgcG93ZXIgMTE4LjYyMTgyNiAtMyAtPiA1Ljk5MTA5NDcxRS03IEluZXhhY3QgUm91bmRlZAoreHJlbTIyMCByZW1haW5kZXIgMTE4LjYyMTgyNiAtMi43MjAxMDAzOCAtPiAxLjY1NzUwOTY2Cit4c3ViMjIwIHN1YnRyYWN0IDExOC42MjE4MjYgLTIuNzIwMTAwMzggLT4gMTIxLjM0MTkyNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMjEgYWRkIDgwNzE5NjEuOTQgLTEzNTUzMzc0MC5FLTEwMjQ1MTU0MyAtPiA4MDcxOTYxLjk0IEluZXhhY3QgUm91bmRlZAoreGNvbTIyMSBjb21wYXJlIDgwNzE5NjEuOTQgLTEzNTUzMzc0MC5FLTEwMjQ1MTU0MyAtPiAxCit4ZGl2MjIxIGRpdmlkZSA4MDcxOTYxLjk0IC0xMzU1MzM3NDAuRS0xMDI0NTE1NDMgLT4gLTUuOTU1Njg0NTBFKzEwMjQ1MTU0MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMjEgZGl2aWRlaW50IDgwNzE5NjEuOTQgLTEzNTUzMzc0MC5FLTEwMjQ1MTU0MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDIyMSBtdWx0aXBseSA4MDcxOTYxLjk0IC0xMzU1MzM3NDAuRS0xMDI0NTE1NDMgLT4gLTEuMDk0MDIzMTlFLTEwMjQ1MTUyOCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjEgcG93ZXIgODA3MTk2MS45NCAtMSAtPiAxLjIzODg1NjE5RS03IEluZXhhY3QgUm91bmRlZAoreHJlbTIyMSByZW1haW5kZXIgODA3MTk2MS45NCAtMTM1NTMzNzQwLkUtMTAyNDUxNTQzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjIxIHN1YnRyYWN0IDgwNzE5NjEuOTQgLTEzNTUzMzc0MC5FLTEwMjQ1MTU0MyAtPiA4MDcxOTYxLjk0IEluZXhhY3QgUm91bmRlZAoreGFkZDIyMiBhZGQgNjQyNjI1MjguNUUrODEyMTE4NjgyIC04NjkyLjk0NDQ3RS03MzIxODY5NDcgLT4gNi40MjYyNTI4NUUrODEyMTE4Njg5IEluZXhhY3QgUm91bmRlZAoreGNvbTIyMiBjb21wYXJlIDY0MjYyNTI4LjVFKzgxMjExODY4MiAtODY5Mi45NDQ0N0UtNzMyMTg2OTQ3IC0+IDEKK3hkaXYyMjIgZGl2aWRlIDY0MjYyNTI4LjVFKzgxMjExODY4MiAtODY5Mi45NDQ0N0UtNzMyMTg2OTQ3IC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hkdmkyMjIgZGl2aWRlaW50IDY0MjYyNTI4LjVFKzgxMjExODY4MiAtODY5Mi45NDQ0N0UtNzMyMTg2OTQ3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjIyIG11bHRpcGx5IDY0MjYyNTI4LjVFKzgxMjExODY4MiAtODY5Mi45NDQ0N0UtNzMyMTg2OTQ3IC0+IC01LjU4NjMwNTkyRSs3OTkzMTc0NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjIgcG93ZXIgNjQyNjI1MjguNUUrODEyMTE4NjgyIC05IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTIyMiByZW1haW5kZXIgNjQyNjI1MjguNUUrODEyMTE4NjgyIC04NjkyLjk0NDQ3RS03MzIxODY5NDcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyMjIgc3VidHJhY3QgNjQyNjI1MjguNUUrODEyMTE4NjgyIC04NjkyLjk0NDQ3RS03MzIxODY5NDcgLT4gNi40MjYyNTI4NUUrODEyMTE4Njg5IEluZXhhY3QgUm91bmRlZAoreGFkZDIyMyBhZGQgLTM1NTQ0LjQwMjkgLTU2NzgzMC4xMzAgLT4gLTYwMzM3NC41MzMgSW5leGFjdCBSb3VuZGVkCit4Y29tMjIzIGNvbXBhcmUgLTM1NTQ0LjQwMjkgLTU2NzgzMC4xMzAgLT4gMQoreGRpdjIyMyBkaXZpZGUgLTM1NTQ0LjQwMjkgLTU2NzgzMC4xMzAgLT4gMC4wNjI1OTY4OTQ4IEluZXhhY3QgUm91bmRlZAoreGR2aTIyMyBkaXZpZGVpbnQgLTM1NTQ0LjQwMjkgLTU2NzgzMC4xMzAgLT4gMAoreG11bDIyMyBtdWx0aXBseSAtMzU1NDQuNDAyOSAtNTY3ODMwLjEzMCAtPiAyLjAxODMxODI5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjMgcG93ZXIgLTM1NTQ0LjQwMjkgLTU2NzgzMCAtPiAzLjc3MDY5MzY4RS0yNTg0MDY1IEluZXhhY3QgUm91bmRlZAoreHJlbTIyMyByZW1haW5kZXIgLTM1NTQ0LjQwMjkgLTU2NzgzMC4xMzAgLT4gLTM1NTQ0LjQwMjkKK3hzdWIyMjMgc3VidHJhY3QgLTM1NTQ0LjQwMjkgLTU2NzgzMC4xMzAgLT4gNTMyMjg1LjcyNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMjQgYWRkIC03LjE2NTEzMDQ3RSs1OTI5NzEwMyA4Nzc2Ny44MjExIC0+IC03LjE2NTEzMDQ3RSs1OTI5NzEwMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMjQgY29tcGFyZSAtNy4xNjUxMzA0N0UrNTkyOTcxMDMgODc3NjcuODIxMSAtPiAtMQoreGRpdjIyNCBkaXZpZGUgLTcuMTY1MTMwNDdFKzU5Mjk3MTAzIDg3NzY3LjgyMTEgLT4gLTguMTYzNzMyODhFKzU5Mjk3MDk4IEluZXhhY3QgUm91bmRlZAoreGR2aTIyNCBkaXZpZGVpbnQgLTcuMTY1MTMwNDdFKzU5Mjk3MTAzIDg3NzY3LjgyMTEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyMjQgbXVsdGlwbHkgLTcuMTY1MTMwNDdFKzU5Mjk3MTAzIDg3NzY3LjgyMTEgLT4gLTYuMjg4Njc4ODlFKzU5Mjk3MTA4IEluZXhhY3QgUm91bmRlZAoreHBvdzIyNCBwb3dlciAtNy4xNjUxMzA0N0UrNTkyOTcxMDMgODc3NjggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMjI0IHJlbWFpbmRlciAtNy4xNjUxMzA0N0UrNTkyOTcxMDMgODc3NjcuODIxMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjIyNCBzdWJ0cmFjdCAtNy4xNjUxMzA0N0UrNTkyOTcxMDMgODc3NjcuODIxMSAtPiAtNy4xNjUxMzA0N0UrNTkyOTcxMDMgSW5leGFjdCBSb3VuZGVkCit4YWRkMjI1IGFkZCAtNTA5LjQ4MzM5NSAtMTQ3MjQyOTE1LiAtPiAtMTQ3MjQzNDI0IEluZXhhY3QgUm91bmRlZAoreGNvbTIyNSBjb21wYXJlIC01MDkuNDgzMzk1IC0xNDcyNDI5MTUuIC0+IDEKK3hkaXYyMjUgZGl2aWRlIC01MDkuNDgzMzk1IC0xNDcyNDI5MTUuIC0+IDAuMDAwMDAzNDYwMTU1NTkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjI1IGRpdmlkZWludCAtNTA5LjQ4MzM5NSAtMTQ3MjQyOTE1LiAtPiAwCit4bXVsMjI1IG11bHRpcGx5IC01MDkuNDgzMzk1IC0xNDcyNDI5MTUuIC0+IDcuNTAxNzgyMDJFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzIyNSBwb3dlciAtNTA5LjQ4MzM5NSAtMTQ3MjQyOTE1IC0+IC0zLjEwNzYwNTE5RS0zOTg2MDU3MTggSW5leGFjdCBSb3VuZGVkCit4cmVtMjI1IHJlbWFpbmRlciAtNTA5LjQ4MzM5NSAtMTQ3MjQyOTE1LiAtPiAtNTA5LjQ4MzM5NQoreHN1YjIyNSBzdWJ0cmFjdCAtNTA5LjQ4MzM5NSAtMTQ3MjQyOTE1LiAtPiAxNDcyNDI0MDYgSW5leGFjdCBSb3VuZGVkCit4YWRkMjI2IGFkZCAtNzkxOTA0Ny4yOEUrOTU2MDQxNjI5IC0zNjc2NjczMjkgLT4gLTcuOTE5MDQ3MjhFKzk1NjA0MTYzNSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMjYgY29tcGFyZSAtNzkxOTA0Ny4yOEUrOTU2MDQxNjI5IC0zNjc2NjczMjkgLT4gLTEKK3hkaXYyMjYgZGl2aWRlIC03OTE5MDQ3LjI4RSs5NTYwNDE2MjkgLTM2NzY2NzMyOSAtPiAyLjE1Mzg2MjExRSs5NTYwNDE2MjcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjI2IGRpdmlkZWludCAtNzkxOTA0Ny4yOEUrOTU2MDQxNjI5IC0zNjc2NjczMjkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyMjYgbXVsdGlwbHkgLTc5MTkwNDcuMjhFKzk1NjA0MTYyOSAtMzY3NjY3MzI5IC0+IDIuOTExNTc0OTZFKzk1NjA0MTY0NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjYgcG93ZXIgLTc5MTkwNDcuMjhFKzk1NjA0MTYyOSAtMzY3NjY3MzI5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yMjYgcmVtYWluZGVyIC03OTE5MDQ3LjI4RSs5NTYwNDE2MjkgLTM2NzY2NzMyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjIyNiBzdWJ0cmFjdCAtNzkxOTA0Ny4yOEUrOTU2MDQxNjI5IC0zNjc2NjczMjkgLT4gLTcuOTE5MDQ3MjhFKzk1NjA0MTYzNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMjcgYWRkIDg5NTYxMjYzMC4gLTM2LjQxMDQwNDAgLT4gODk1NjEyNTk0IEluZXhhY3QgUm91bmRlZAoreGNvbTIyNyBjb21wYXJlIDg5NTYxMjYzMC4gLTM2LjQxMDQwNDAgLT4gMQoreGRpdjIyNyBkaXZpZGUgODk1NjEyNjMwLiAtMzYuNDEwNDA0MCAtPiAtMjQ1OTc3MTIuMCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMjcgZGl2aWRlaW50IDg5NTYxMjYzMC4gLTM2LjQxMDQwNDAgLT4gLTI0NTk3NzExCit4bXVsMjI3IG11bHRpcGx5IDg5NTYxMjYzMC4gLTM2LjQxMDQwNDAgLT4gLTMuMjYwOTYxNzdFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzIyNyBwb3dlciA4OTU2MTI2MzAuIC0zNiAtPiA1LjI5MjY0MTMwRS0zMjMgSW5leGFjdCBSb3VuZGVkCit4cmVtMjI3IHJlbWFpbmRlciA4OTU2MTI2MzAuIC0zNi40MTA0MDQwIC0+IDM1LjAxNDc1NjAKK3hzdWIyMjcgc3VidHJhY3QgODk1NjEyNjMwLiAtMzYuNDEwNDA0MCAtPiA4OTU2MTI2NjYgSW5leGFjdCBSb3VuZGVkCit4YWRkMjI4IGFkZCAyNTQ1NS40OTczIDI5NTUuMDAwMDZFKzUyODE5NjIxOCAtPiAyLjk1NTAwMDA2RSs1MjgxOTYyMjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMjI4IGNvbXBhcmUgMjU0NTUuNDk3MyAyOTU1LjAwMDA2RSs1MjgxOTYyMTggLT4gLTEKK3hkaXYyMjggZGl2aWRlIDI1NDU1LjQ5NzMgMjk1NS4wMDAwNkUrNTI4MTk2MjE4IC0+IDguNjE0MzgxMzFFLTUyODE5NjIxOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMjggZGl2aWRlaW50IDI1NDU1LjQ5NzMgMjk1NS4wMDAwNkUrNTI4MTk2MjE4IC0+IDAKK3htdWwyMjggbXVsdGlwbHkgMjU0NTUuNDk3MyAyOTU1LjAwMDA2RSs1MjgxOTYyMTggLT4gNy41MjIwOTk2MEUrNTI4MTk2MjI1IEluZXhhY3QgUm91bmRlZAoreHBvdzIyOCBwb3dlciAyNTQ1NS40OTczIDMgLT4gMS42NDk0NzEyOEUrMTMgSW5leGFjdCBSb3VuZGVkCit4cmVtMjI4IHJlbWFpbmRlciAyNTQ1NS40OTczIDI5NTUuMDAwMDZFKzUyODE5NjIxOCAtPiAyNTQ1NS40OTczCit4c3ViMjI4IHN1YnRyYWN0IDI1NDU1LjQ5NzMgMjk1NS4wMDAwNkUrNTI4MTk2MjE4IC0+IC0yLjk1NTAwMDA2RSs1MjgxOTYyMjEgSW5leGFjdCBSb3VuZGVkCit4YWRkMjI5IGFkZCAtMTEyLjI5NDE0NEUrMjczNDE0MTcyIC03MTQ0ODAwNy43IC0+IC0xLjEyMjk0MTQ0RSsyNzM0MTQxNzQgSW5leGFjdCBSb3VuZGVkCit4Y29tMjI5IGNvbXBhcmUgLTExMi4yOTQxNDRFKzI3MzQxNDE3MiAtNzE0NDgwMDcuNyAtPiAtMQoreGRpdjIyOSBkaXZpZGUgLTExMi4yOTQxNDRFKzI3MzQxNDE3MiAtNzE0NDgwMDcuNyAtPiAxLjU3MTY5MDM1RSsyNzM0MTQxNjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjI5IGRpdmlkZWludCAtMTEyLjI5NDE0NEUrMjczNDE0MTcyIC03MTQ0ODAwNy43IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjI5IG11bHRpcGx5IC0xMTIuMjk0MTQ0RSsyNzM0MTQxNzIgLTcxNDQ4MDA3LjcgLT4gOC4wMjMxOTI4N0UrMjczNDE0MTgxIEluZXhhY3QgUm91bmRlZAoreHBvdzIyOSBwb3dlciAtMTEyLjI5NDE0NEUrMjczNDE0MTcyIC03MTQ0ODAwOCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yMjkgcmVtYWluZGVyIC0xMTIuMjk0MTQ0RSsyNzM0MTQxNzIgLTcxNDQ4MDA3LjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyMjkgc3VidHJhY3QgLTExMi4yOTQxNDRFKzI3MzQxNDE3MiAtNzE0NDgwMDcuNyAtPiAtMS4xMjI5NDE0NEUrMjczNDE0MTc0IEluZXhhY3QgUm91bmRlZAoreGFkZDIzMCBhZGQgNjI4NzEuMjIwMiAyNDg0LjAzODJFKzIxMTY2MjU1NyAtPiAyLjQ4NDAzODIwRSsyMTE2NjI1NjAgSW5leGFjdCBSb3VuZGVkCit4Y29tMjMwIGNvbXBhcmUgNjI4NzEuMjIwMiAyNDg0LjAzODJFKzIxMTY2MjU1NyAtPiAtMQoreGRpdjIzMCBkaXZpZGUgNjI4NzEuMjIwMiAyNDg0LjAzODJFKzIxMTY2MjU1NyAtPiAyLjUzMTAwODU5RS0yMTE2NjI1NTYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjMwIGRpdmlkZWludCA2Mjg3MS4yMjAyIDI0ODQuMDM4MkUrMjExNjYyNTU3IC0+IDAKK3htdWwyMzAgbXVsdGlwbHkgNjI4NzEuMjIwMiAyNDg0LjAzODJFKzIxMTY2MjU1NyAtPiAxLjU2MTc0NTEzRSsyMTE2NjI1NjUgSW5leGFjdCBSb3VuZGVkCit4cG93MjMwIHBvd2VyIDYyODcxLjIyMDIgMiAtPiAzLjk1Mjc5MDMzRSs5IEluZXhhY3QgUm91bmRlZAoreHJlbTIzMCByZW1haW5kZXIgNjI4NzEuMjIwMiAyNDg0LjAzODJFKzIxMTY2MjU1NyAtPiA2Mjg3MS4yMjAyCit4c3ViMjMwIHN1YnRyYWN0IDYyODcxLjIyMDIgMjQ4NC4wMzgyRSsyMTE2NjI1NTcgLT4gLTIuNDg0MDM4MjBFKzIxMTY2MjU2MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMzEgYWRkIDcxLjkyODE1NzUgLTk4MTAwMTIuNSAtPiAtOTgwOTk0MC41NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMzEgY29tcGFyZSA3MS45MjgxNTc1IC05ODEwMDEyLjUgLT4gMQoreGRpdjIzMSBkaXZpZGUgNzEuOTI4MTU3NSAtOTgxMDAxMi41IC0+IC0wLjAwMDAwNzMzMjExNjgwIEluZXhhY3QgUm91bmRlZAoreGR2aTIzMSBkaXZpZGVpbnQgNzEuOTI4MTU3NSAtOTgxMDAxMi41IC0+IC0wCit4bXVsMjMxIG11bHRpcGx5IDcxLjkyODE1NzUgLTk4MTAwMTIuNSAtPiAtNzA1NjE2MTI0IEluZXhhY3QgUm91bmRlZAoreHBvdzIzMSBwb3dlciA3MS45MjgxNTc1IC05ODEwMDEzIC0+IDIuMDAzNjM3OThFLTE4MjE2MjAzIEluZXhhY3QgUm91bmRlZAoreHJlbTIzMSByZW1haW5kZXIgNzEuOTI4MTU3NSAtOTgxMDAxMi41IC0+IDcxLjkyODE1NzUKK3hzdWIyMzEgc3VidHJhY3QgNzEuOTI4MTU3NSAtOTgxMDAxMi41IC0+IDk4MTAwODQuNDMgSW5leGFjdCBSb3VuZGVkCit4YWRkMjMyIGFkZCAtNjM4ODAyMi4gLTg4LjA0Mjk2NyAtPiAtNjM4ODExMC4wNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMzIgY29tcGFyZSAtNjM4ODAyMi4gLTg4LjA0Mjk2NyAtPiAtMQoreGRpdjIzMiBkaXZpZGUgLTYzODgwMjIuIC04OC4wNDI5NjcgLT4gNzI1NTUuNzMyOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMzIgZGl2aWRlaW50IC02Mzg4MDIyLiAtODguMDQyOTY3IC0+IDcyNTU1Cit4bXVsMjMyIG11bHRpcGx5IC02Mzg4MDIyLiAtODguMDQyOTY3IC0+IDU2MjQyMDQxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMzIgcG93ZXIgLTYzODgwMjIuIC04OCAtPiAxLjM0MjAxMjM4RS01OTkgSW5leGFjdCBSb3VuZGVkCit4cmVtMjMyIHJlbWFpbmRlciAtNjM4ODAyMi4gLTg4LjA0Mjk2NyAtPiAtNjQuNTI5MzE1Cit4c3ViMjMyIHN1YnRyYWN0IC02Mzg4MDIyLiAtODguMDQyOTY3IC0+IC02Mzg3OTMzLjk2IEluZXhhY3QgUm91bmRlZAoreGFkZDIzMyBhZGQgMzcyNTY3NDQ1LiA5Ni4wOTkyMTQxIC0+IDM3MjU2NzU0MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMzMgY29tcGFyZSAzNzI1Njc0NDUuIDk2LjA5OTIxNDEgLT4gMQoreGRpdjIzMyBkaXZpZGUgMzcyNTY3NDQ1LiA5Ni4wOTkyMTQxIC0+IDM4NzY5MDQuMTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMjMzIGRpdmlkZWludCAzNzI1Njc0NDUuIDk2LjA5OTIxNDEgLT4gMzg3NjkwNAoreG11bDIzMyBtdWx0aXBseSAzNzI1Njc0NDUuIDk2LjA5OTIxNDEgLT4gMy41ODAzNDM4N0UrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MjMzIHBvd2VyIDM3MjU2NzQ0NS4gOTYgLT4gNi44NDk2ODcxNUUrODIyIEluZXhhY3QgUm91bmRlZAoreHJlbTIzMyByZW1haW5kZXIgMzcyNTY3NDQ1LiA5Ni4wOTkyMTQxIC0+IDE3LjQ1ODg1MzYKK3hzdWIyMzMgc3VidHJhY3QgMzcyNTY3NDQ1LiA5Ni4wOTkyMTQxIC0+IDM3MjU2NzM0OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMzQgYWRkIDgwMi4xNTY1MTcgLTE3NDQwOTMxMC5FLTI1NTMzODAyMCAtPiA4MDIuMTU2NTE3IEluZXhhY3QgUm91bmRlZAoreGNvbTIzNCBjb21wYXJlIDgwMi4xNTY1MTcgLTE3NDQwOTMxMC5FLTI1NTMzODAyMCAtPiAxCit4ZGl2MjM0IGRpdmlkZSA4MDIuMTU2NTE3IC0xNzQ0MDkzMTAuRS0yNTUzMzgwMjAgLT4gLTQuNTk5Mjc1NzlFKzI1NTMzODAxNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMzQgZGl2aWRlaW50IDgwMi4xNTY1MTcgLTE3NDQwOTMxMC5FLTI1NTMzODAyMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDIzNCBtdWx0aXBseSA4MDIuMTU2NTE3IC0xNzQ0MDkzMTAuRS0yNTUzMzgwMjAgLT4gLTEuMzk5MDM1NjVFLTI1NTMzODAwOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMzQgcG93ZXIgODAyLjE1NjUxNyAtMiAtPiAwLjAwMDAwMTU1NDExMDA1IEluZXhhY3QgUm91bmRlZAoreHJlbTIzNCByZW1haW5kZXIgODAyLjE1NjUxNyAtMTc0NDA5MzEwLkUtMjU1MzM4MDIwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjM0IHN1YnRyYWN0IDgwMi4xNTY1MTcgLTE3NDQwOTMxMC5FLTI1NTMzODAyMCAtPiA4MDIuMTU2NTE3IEluZXhhY3QgUm91bmRlZAoreGFkZDIzNSBhZGQgLTMuNjUyMDc1NDEgNzQ1MDE5ODIuMCAtPiA3NDUwMTk3OC4zIEluZXhhY3QgUm91bmRlZAoreGNvbTIzNSBjb21wYXJlIC0zLjY1MjA3NTQxIDc0NTAxOTgyLjAgLT4gLTEKK3hkaXYyMzUgZGl2aWRlIC0zLjY1MjA3NTQxIDc0NTAxOTgyLjAgLT4gLTQuOTAxOTg0MjNFLTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMjM1IGRpdmlkZWludCAtMy42NTIwNzU0MSA3NDUwMTk4Mi4wIC0+IC0wCit4bXVsMjM1IG11bHRpcGx5IC0zLjY1MjA3NTQxIDc0NTAxOTgyLjAgLT4gLTI3MjA4Njg1NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMzUgcG93ZXIgLTMuNjUyMDc1NDEgNzQ1MDE5ODIgLT4gMi4xMDMzOTQ1MkUrNDE5MTAzMjUgSW5leGFjdCBSb3VuZGVkCit4cmVtMjM1IHJlbWFpbmRlciAtMy42NTIwNzU0MSA3NDUwMTk4Mi4wIC0+IC0zLjY1MjA3NTQxCit4c3ViMjM1IHN1YnRyYWN0IC0zLjY1MjA3NTQxIDc0NTAxOTgyLjAgLT4gLTc0NTAxOTg1LjcgSW5leGFjdCBSb3VuZGVkCit4YWRkMjM2IGFkZCAtNTI5Ny43Njk4MSAtODU5LjcxOTQwNCAtPiAtNjE1Ny40ODkyMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMzYgY29tcGFyZSAtNTI5Ny43Njk4MSAtODU5LjcxOTQwNCAtPiAtMQoreGRpdjIzNiBkaXZpZGUgLTUyOTcuNzY5ODEgLTg1OS43MTk0MDQgLT4gNi4xNjIyMDgwMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMzYgZGl2aWRlaW50IC01Mjk3Ljc2OTgxIC04NTkuNzE5NDA0IC0+IDYKK3htdWwyMzYgbXVsdGlwbHkgLTUyOTcuNzY5ODEgLTg1OS43MTk0MDQgLT4gNDU1NDU5NS41MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMzYgcG93ZXIgLTUyOTcuNzY5ODEgLTg2MCAtPiAxLjkwNTIzMTA4RS0zMjAzIEluZXhhY3QgUm91bmRlZAoreHJlbTIzNiByZW1haW5kZXIgLTUyOTcuNzY5ODEgLTg1OS43MTk0MDQgLT4gLTEzOS40NTMzODYKK3hzdWIyMzYgc3VidHJhY3QgLTUyOTcuNzY5ODEgLTg1OS43MTk0MDQgLT4gLTQ0MzguMDUwNDEgSW5leGFjdCBSb3VuZGVkCit4YWRkMjM3IGFkZCAtNjg0MTcyLjU5MiA3NjYuNDQ4NTk3RSsyODgzNjE5NTkgLT4gNy42NjQ0ODU5N0UrMjg4MzYxOTYxIEluZXhhY3QgUm91bmRlZAoreGNvbTIzNyBjb21wYXJlIC02ODQxNzIuNTkyIDc2Ni40NDg1OTdFKzI4ODM2MTk1OSAtPiAtMQoreGRpdjIzNyBkaXZpZGUgLTY4NDE3Mi41OTIgNzY2LjQ0ODU5N0UrMjg4MzYxOTU5IC0+IC04LjkyNjUyOTM4RS0yODgzNjE5NTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjM3IGRpdmlkZWludCAtNjg0MTcyLjU5MiA3NjYuNDQ4NTk3RSsyODgzNjE5NTkgLT4gLTAKK3htdWwyMzcgbXVsdGlwbHkgLTY4NDE3Mi41OTIgNzY2LjQ0ODU5N0UrMjg4MzYxOTU5IC0+IC01LjI0MzgzMTIzRSsyODgzNjE5NjcgSW5leGFjdCBSb3VuZGVkCit4cG93MjM3IHBvd2VyIC02ODQxNzIuNTkyIDggLT4gNC44MDA5MzAwNUUrNDYgSW5leGFjdCBSb3VuZGVkCit4cmVtMjM3IHJlbWFpbmRlciAtNjg0MTcyLjU5MiA3NjYuNDQ4NTk3RSsyODgzNjE5NTkgLT4gLTY4NDE3Mi41OTIKK3hzdWIyMzcgc3VidHJhY3QgLTY4NDE3Mi41OTIgNzY2LjQ0ODU5N0UrMjg4MzYxOTU5IC0+IC03LjY2NDQ4NTk3RSsyODgzNjE5NjEgSW5leGFjdCBSb3VuZGVkCit4YWRkMjM4IGFkZCA2MjY5MTkuMjE5IDU3NDY5Ljg3MjdFKzEzMTg4NjEwIC0+IDUuNzQ2OTg3MjdFKzEzMTg4NjE0IEluZXhhY3QgUm91bmRlZAoreGNvbTIzOCBjb21wYXJlIDYyNjkxOS4yMTkgNTc0NjkuODcyN0UrMTMxODg2MTAgLT4gLTEKK3hkaXYyMzggZGl2aWRlIDYyNjkxOS4yMTkgNTc0NjkuODcyN0UrMTMxODg2MTAgLT4gMS4wOTA4NjU4NkUtMTMxODg2MDkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjM4IGRpdmlkZWludCA2MjY5MTkuMjE5IDU3NDY5Ljg3MjdFKzEzMTg4NjEwIC0+IDAKK3htdWwyMzggbXVsdGlwbHkgNjI2OTE5LjIxOSA1NzQ2OS44NzI3RSsxMzE4ODYxMCAtPiAzLjYwMjg5Njc3RSsxMzE4ODYyMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMzggcG93ZXIgNjI2OTE5LjIxOSA2IC0+IDYuMDcxMTI5NTlFKzM0IEluZXhhY3QgUm91bmRlZAoreHJlbTIzOCByZW1haW5kZXIgNjI2OTE5LjIxOSA1NzQ2OS44NzI3RSsxMzE4ODYxMCAtPiA2MjY5MTkuMjE5Cit4c3ViMjM4IHN1YnRyYWN0IDYyNjkxOS4yMTkgNTc0NjkuODcyN0UrMTMxODg2MTAgLT4gLTUuNzQ2OTg3MjdFKzEzMTg4NjE0IEluZXhhY3QgUm91bmRlZAoreGFkZDIzOSBhZGQgLTc3NDgwLjU4NDAgODkzMjY1LjU5NEUrMjg3OTgyNTUyIC0+IDguOTMyNjU1OTRFKzI4Nzk4MjU1NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMzkgY29tcGFyZSAtNzc0ODAuNTg0MCA4OTMyNjUuNTk0RSsyODc5ODI1NTIgLT4gLTEKK3hkaXYyMzkgZGl2aWRlIC03NzQ4MC41ODQwIDg5MzI2NS41OTRFKzI4Nzk4MjU1MiAtPiAtOC42NzM4NTc0MkUtMjg3OTgyNTU0IEluZXhhY3QgUm91bmRlZAoreGR2aTIzOSBkaXZpZGVpbnQgLTc3NDgwLjU4NDAgODkzMjY1LjU5NEUrMjg3OTgyNTUyIC0+IC0wCit4bXVsMjM5IG11bHRpcGx5IC03NzQ4MC41ODQwIDg5MzI2NS41OTRFKzI4Nzk4MjU1MiAtPiAtNi45MjEwNzM5OUUrMjg3OTgyNTYyIEluZXhhY3QgUm91bmRlZAoreHBvdzIzOSBwb3dlciAtNzc0ODAuNTg0MCA5IC0+IC0xLjAwNjMxOTY5RSs0NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMzkgcmVtYWluZGVyIC03NzQ4MC41ODQwIDg5MzI2NS41OTRFKzI4Nzk4MjU1MiAtPiAtNzc0ODAuNTg0MAoreHN1YjIzOSBzdWJ0cmFjdCAtNzc0ODAuNTg0MCA4OTMyNjUuNTk0RSsyODc5ODI1NTIgLT4gLTguOTMyNjU1OTRFKzI4Nzk4MjU1NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNDAgYWRkIC03MTc3NjIwLjI5IDc3ODYzNDMuODMgLT4gNjA4NzIzLjU0Cit4Y29tMjQwIGNvbXBhcmUgLTcxNzc2MjAuMjkgNzc4NjM0My44MyAtPiAtMQoreGRpdjI0MCBkaXZpZGUgLTcxNzc2MjAuMjkgNzc4NjM0My44MyAtPiAtMC45MjE4MjE2NDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjQwIGRpdmlkZWludCAtNzE3NzYyMC4yOSA3Nzg2MzQzLjgzIC0+IC0wCit4bXVsMjQwIG11bHRpcGx5IC03MTc3NjIwLjI5IDc3ODYzNDMuODMgLT4gLTUuNTg4NzQxOTVFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzI0MCBwb3dlciAtNzE3NzYyMC4yOSA3Nzg2MzQ0IC0+IDIuOTYwMzcwNzRFKzUzMzgzMDIyIEluZXhhY3QgUm91bmRlZAoreHJlbTI0MCByZW1haW5kZXIgLTcxNzc2MjAuMjkgNzc4NjM0My44MyAtPiAtNzE3NzYyMC4yOQoreHN1YjI0MCBzdWJ0cmFjdCAtNzE3NzYyMC4yOSA3Nzg2MzQzLjgzIC0+IC0xNDk2Mzk2NC4xIEluZXhhY3QgUm91bmRlZAoreGFkZDI0MSBhZGQgOS42MjI0MTMwIDQuNTAzNTUxMTIgLT4gMTQuMTI1OTY0MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNDEgY29tcGFyZSA5LjYyMjQxMzAgNC41MDM1NTExMiAtPiAxCit4ZGl2MjQxIGRpdmlkZSA5LjYyMjQxMzAgNC41MDM1NTExMiAtPiAyLjEzNjYyNzkxIEluZXhhY3QgUm91bmRlZAoreGR2aTI0MSBkaXZpZGVpbnQgOS42MjI0MTMwIDQuNTAzNTUxMTIgLT4gMgoreG11bDI0MSBtdWx0aXBseSA5LjYyMjQxMzAgNC41MDM1NTExMiAtPiA0My4zMzUwMjg4IEluZXhhY3QgUm91bmRlZAoreHBvdzI0MSBwb3dlciA5LjYyMjQxMzAgNSAtPiA4MjQ5My41NDQ4IEluZXhhY3QgUm91bmRlZAoreHJlbTI0MSByZW1haW5kZXIgOS42MjI0MTMwIDQuNTAzNTUxMTIgLT4gMC42MTUzMTA3NgoreHN1YjI0MSBzdWJ0cmFjdCA5LjYyMjQxMzAgNC41MDM1NTExMiAtPiA1LjExODg2MTg4Cit4YWRkMjQyIGFkZCAtNjYuNjMzNzM0N0UtNTk3NDEwMDg2IC04MTg4MTI4ODUgLT4gLTgxODgxMjg4NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNDIgY29tcGFyZSAtNjYuNjMzNzM0N0UtNTk3NDEwMDg2IC04MTg4MTI4ODUgLT4gMQoreGRpdjI0MiBkaXZpZGUgLTY2LjYzMzczNDdFLTU5NzQxMDA4NiAtODE4ODEyODg1IC0+IDguMTM3ODQ2MzhFLTU5NzQxMDA5NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNDIgZGl2aWRlaW50IC02Ni42MzM3MzQ3RS01OTc0MTAwODYgLTgxODgxMjg4NSAtPiAwCit4bXVsMjQyIG11bHRpcGx5IC02Ni42MzM3MzQ3RS01OTc0MTAwODYgLTgxODgxMjg4NSAtPiA1LjQ1NjA1NjA1RS01OTc0MTAwNzYgSW5leGFjdCBSb3VuZGVkCit4cG93MjQyIHBvd2VyIC02Ni42MzM3MzQ3RS01OTc0MTAwODYgLTgxODgxMjg4NSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMjQyIHJlbWFpbmRlciAtNjYuNjMzNzM0N0UtNTk3NDEwMDg2IC04MTg4MTI4ODUgLT4gLTYuNjYzMzczNDdFLTU5NzQxMDA4NQoreHN1YjI0MiBzdWJ0cmFjdCAtNjYuNjMzNzM0N0UtNTk3NDEwMDg2IC04MTg4MTI4ODUgLT4gODE4ODEyODg1IEluZXhhY3QgUm91bmRlZAoreGFkZDI0MyBhZGQgNjU1ODc1NTMuNyA2MDA1NzQuNzM2IC0+IDY2MTg4MTI4LjQgSW5leGFjdCBSb3VuZGVkCit4Y29tMjQzIGNvbXBhcmUgNjU1ODc1NTMuNyA2MDA1NzQuNzM2IC0+IDEKK3hkaXYyNDMgZGl2aWRlIDY1NTg3NTUzLjcgNjAwNTc0LjczNiAtPiAxMDkuMjA3OTgwIEluZXhhY3QgUm91bmRlZAoreGR2aTI0MyBkaXZpZGVpbnQgNjU1ODc1NTMuNyA2MDA1NzQuNzM2IC0+IDEwOQoreG11bDI0MyBtdWx0aXBseSA2NTU4NzU1My43IDYwMDU3NC43MzYgLT4gMy45MzkwMjI3N0UrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MjQzIHBvd2VyIDY1NTg3NTUzLjcgNjAwNTc1IC0+IDMuNDA0MDQ4MTdFKzQ2OTQ1ODcgSW5leGFjdCBSb3VuZGVkCit4cmVtMjQzIHJlbWFpbmRlciA2NTU4NzU1My43IDYwMDU3NC43MzYgLT4gMTI0OTA3LjQ3NgoreHN1YjI0MyBzdWJ0cmFjdCA2NTU4NzU1My43IDYwMDU3NC43MzYgLT4gNjQ5ODY5NzkuMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNDQgYWRkIC0zMjQwMS45MzkgLTU4NTIwMDIxNy4gLT4gLTU4NTIzMjYxOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNDQgY29tcGFyZSAtMzI0MDEuOTM5IC01ODUyMDAyMTcuIC0+IDEKK3hkaXYyNDQgZGl2aWRlIC0zMjQwMS45MzkgLTU4NTIwMDIxNy4gLT4gMC4wMDAwNTUzNjg5Nzk4IEluZXhhY3QgUm91bmRlZAoreGR2aTI0NCBkaXZpZGVpbnQgLTMyNDAxLjkzOSAtNTg1MjAwMjE3LiAtPiAwCit4bXVsMjQ0IG11bHRpcGx5IC0zMjQwMS45MzkgLTU4NTIwMDIxNy4gLT4gMS44OTYxNjIxN0UrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MjQ0IHBvd2VyIC0zMjQwMS45MzkgLTU4NTIwMDIxNyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjQ0IHJlbWFpbmRlciAtMzI0MDEuOTM5IC01ODUyMDAyMTcuIC0+IC0zMjQwMS45MzkKK3hzdWIyNDQgc3VidHJhY3QgLTMyNDAxLjkzOSAtNTg1MjAwMjE3LiAtPiA1ODUxNjc4MTUgSW5leGFjdCBSb3VuZGVkCit4YWRkMjQ1IGFkZCA2OTU3My45ODggLTkuNzcwMDM0NjVFKzc0MDkzMzY2OCAtPiAtOS43NzAwMzQ2NUUrNzQwOTMzNjY4IEluZXhhY3QgUm91bmRlZAoreGNvbTI0NSBjb21wYXJlIDY5NTczLjk4OCAtOS43NzAwMzQ2NUUrNzQwOTMzNjY4IC0+IDEKK3hkaXYyNDUgZGl2aWRlIDY5NTczLjk4OCAtOS43NzAwMzQ2NUUrNzQwOTMzNjY4IC0+IC03LjEyMTE2MDgyRS03NDA5MzM2NjUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjQ1IGRpdmlkZWludCA2OTU3My45ODggLTkuNzcwMDM0NjVFKzc0MDkzMzY2OCAtPiAtMAoreG11bDI0NSBtdWx0aXBseSA2OTU3My45ODggLTkuNzcwMDM0NjVFKzc0MDkzMzY2OCAtPiAtNi43OTc0MDI3M0UrNzQwOTMzNjczIEluZXhhY3QgUm91bmRlZAoreHBvdzI0NSBwb3dlciA2OTU3My45ODggLTEwIC0+IDMuNzYyOTcyMjlFLTQ5IEluZXhhY3QgUm91bmRlZAoreHJlbTI0NSByZW1haW5kZXIgNjk1NzMuOTg4IC05Ljc3MDAzNDY1RSs3NDA5MzM2NjggLT4gNjk1NzMuOTg4Cit4c3ViMjQ1IHN1YnRyYWN0IDY5NTczLjk4OCAtOS43NzAwMzQ2NUUrNzQwOTMzNjY4IC0+IDkuNzcwMDM0NjVFKzc0MDkzMzY2OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNDYgYWRkIDIzNjIuMDYyNTEgLTQzMzE0OTU0Ni5FLTE1MjY0MzYyOSAtPiAyMzYyLjA2MjUxIEluZXhhY3QgUm91bmRlZAoreGNvbTI0NiBjb21wYXJlIDIzNjIuMDYyNTEgLTQzMzE0OTU0Ni5FLTE1MjY0MzYyOSAtPiAxCit4ZGl2MjQ2IGRpdmlkZSAyMzYyLjA2MjUxIC00MzMxNDk1NDYuRS0xNTI2NDM2MjkgLT4gLTUuNDUzMjI2MzNFKzE1MjY0MzYyMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNDYgZGl2aWRlaW50IDIzNjIuMDYyNTEgLTQzMzE0OTU0Ni5FLTE1MjY0MzYyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI0NiBtdWx0aXBseSAyMzYyLjA2MjUxIC00MzMxNDk1NDYuRS0xNTI2NDM2MjkgLT4gLTEuMDIzMTI2MzBFLTE1MjY0MzYxNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNDYgcG93ZXIgMjM2Mi4wNjI1MSAtNCAtPiAzLjIxMjQzNTc3RS0xNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNDYgcmVtYWluZGVyIDIzNjIuMDYyNTEgLTQzMzE0OTU0Ni5FLTE1MjY0MzYyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI0NiBzdWJ0cmFjdCAyMzYyLjA2MjUxIC00MzMxNDk1NDYuRS0xNTI2NDM2MjkgLT4gMjM2Mi4wNjI1MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNDcgYWRkIC02MTUuMjM0ODhFKzI0OTk1MzQ1MiAtMjE0Mzc0ODMuNyAtPiAtNi4xNTIzNDg4MEUrMjQ5OTUzNDU0IEluZXhhY3QgUm91bmRlZAoreGNvbTI0NyBjb21wYXJlIC02MTUuMjM0ODhFKzI0OTk1MzQ1MiAtMjE0Mzc0ODMuNyAtPiAtMQoreGRpdjI0NyBkaXZpZGUgLTYxNS4yMzQ4OEUrMjQ5OTUzNDUyIC0yMTQzNzQ4My43IC0+IDIuODY5OTAyNTBFKzI0OTk1MzQ0NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNDcgZGl2aWRlaW50IC02MTUuMjM0ODhFKzI0OTk1MzQ1MiAtMjE0Mzc0ODMuNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI0NyBtdWx0aXBseSAtNjE1LjIzNDg4RSsyNDk5NTM0NTIgLTIxNDM3NDgzLjcgLT4gMS4zMTg5MDg3N0UrMjQ5OTUzNDYyIEluZXhhY3QgUm91bmRlZAoreHBvdzI0NyBwb3dlciAtNjE1LjIzNDg4RSsyNDk5NTM0NTIgLTIxNDM3NDg0IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTI0NyByZW1haW5kZXIgLTYxNS4yMzQ4OEUrMjQ5OTUzNDUyIC0yMTQzNzQ4My43IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjQ3IHN1YnRyYWN0IC02MTUuMjM0ODhFKzI0OTk1MzQ1MiAtMjE0Mzc0ODMuNyAtPiAtNi4xNTIzNDg4MEUrMjQ5OTUzNDU0IEluZXhhY3QgUm91bmRlZAoreGFkZDI0OCBhZGQgMjE2NzQxMDgyLiAyNTAyOTAyNDQgLT4gNDY3MDMxMzI2Cit4Y29tMjQ4IGNvbXBhcmUgMjE2NzQxMDgyLiAyNTAyOTAyNDQgLT4gLTEKK3hkaXYyNDggZGl2aWRlIDIxNjc0MTA4Mi4gMjUwMjkwMjQ0IC0+IDAuODY1OTU4OTcwIEluZXhhY3QgUm91bmRlZAoreGR2aTI0OCBkaXZpZGVpbnQgMjE2NzQxMDgyLiAyNTAyOTAyNDQgLT4gMAoreG11bDI0OCBtdWx0aXBseSAyMTY3NDEwODIuIDI1MDI5MDI0NCAtPiA1LjQyNDgxNzgzRSsxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNDggcG93ZXIgMjE2NzQxMDgyLiAyNTAyOTAyNDQgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMjQ4IHJlbWFpbmRlciAyMTY3NDEwODIuIDI1MDI5MDI0NCAtPiAyMTY3NDEwODIKK3hzdWIyNDggc3VidHJhY3QgMjE2NzQxMDgyLiAyNTAyOTAyNDQgLT4gLTMzNTQ5MTYyCit4YWRkMjQ5IGFkZCAtNjM2NDcyMC40OSA1NTM5MjQ1LjY0IC0+IC04MjU0NzQuODUKK3hjb20yNDkgY29tcGFyZSAtNjM2NDcyMC40OSA1NTM5MjQ1LjY0IC0+IC0xCit4ZGl2MjQ5IGRpdmlkZSAtNjM2NDcyMC40OSA1NTM5MjQ1LjY0IC0+IC0xLjE0OTAyMjk3IEluZXhhY3QgUm91bmRlZAoreGR2aTI0OSBkaXZpZGVpbnQgLTYzNjQ3MjAuNDkgNTUzOTI0NS42NCAtPiAtMQoreG11bDI0OSBtdWx0aXBseSAtNjM2NDcyMC40OSA1NTM5MjQ1LjY0IC0+IC0zLjUyNTU3NTAyRSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNDkgcG93ZXIgLTYzNjQ3MjAuNDkgNTUzOTI0NiAtPiAyLjk2ODk0NjQxRSszNzY4NzgwNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNDkgcmVtYWluZGVyIC02MzY0NzIwLjQ5IDU1MzkyNDUuNjQgLT4gLTgyNTQ3NC44NQoreHN1YjI0OSBzdWJ0cmFjdCAtNjM2NDcyMC40OSA1NTM5MjQ1LjY0IC0+IC0xMTkwMzk2Ni4xIEluZXhhY3QgUm91bmRlZAoreGFkZDI1MCBhZGQgLTgxNDU5OS40NzUgLTE0LjU0MzExOTEgLT4gLTgxNDYxNC4wMTggSW5leGFjdCBSb3VuZGVkCit4Y29tMjUwIGNvbXBhcmUgLTgxNDU5OS40NzUgLTE0LjU0MzExOTEgLT4gLTEKK3hkaXYyNTAgZGl2aWRlIC04MTQ1OTkuNDc1IC0xNC41NDMxMTkxIC0+IDU2MDEyLjcwNzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjUwIGRpdmlkZWludCAtODE0NTk5LjQ3NSAtMTQuNTQzMTE5MSAtPiA1NjAxMgoreG11bDI1MCBtdWx0aXBseSAtODE0NTk5LjQ3NSAtMTQuNTQzMTE5MSAtPiAxMTg0NjgxNy4yIEluZXhhY3QgUm91bmRlZAoreHBvdzI1MCBwb3dlciAtODE0NTk5LjQ3NSAtMTUgLT4gLTIuMTY2ODk2MjJFLTg5IEluZXhhY3QgUm91bmRlZAoreHJlbTI1MCByZW1haW5kZXIgLTgxNDU5OS40NzUgLTE0LjU0MzExOTEgLT4gLTEwLjI4Nzk3MDgKK3hzdWIyNTAgc3VidHJhY3QgLTgxNDU5OS40NzUgLTE0LjU0MzExOTEgLT4gLTgxNDU4NC45MzIgSW5leGFjdCBSb3VuZGVkCit4YWRkMjUxIGFkZCAtODc3NDk4Ljc1NSA1MDc0MDg3MjRFLTE2ODYyODEwNiAtPiAtODc3NDk4Ljc1NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNTEgY29tcGFyZSAtODc3NDk4Ljc1NSA1MDc0MDg3MjRFLTE2ODYyODEwNiAtPiAtMQoreGRpdjI1MSBkaXZpZGUgLTg3NzQ5OC43NTUgNTA3NDA4NzI0RS0xNjg2MjgxMDYgLT4gLTEuNzI5MzcyNjJFKzE2ODYyODEwMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNTEgZGl2aWRlaW50IC04Nzc0OTguNzU1IDUwNzQwODcyNEUtMTY4NjI4MTA2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjUxIG11bHRpcGx5IC04Nzc0OTguNzU1IDUwNzQwODcyNEUtMTY4NjI4MTA2IC0+IC00LjQ1MjUwNTI0RS0xNjg2MjgwOTIgSW5leGFjdCBSb3VuZGVkCit4cG93MjUxIHBvd2VyIC04Nzc0OTguNzU1IDUgLT4gLTUuMjAyNzQ1MDVFKzI5IEluZXhhY3QgUm91bmRlZAoreHJlbTI1MSByZW1haW5kZXIgLTg3NzQ5OC43NTUgNTA3NDA4NzI0RS0xNjg2MjgxMDYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyNTEgc3VidHJhY3QgLTg3NzQ5OC43NTUgNTA3NDA4NzI0RS0xNjg2MjgxMDYgLT4gLTg3NzQ5OC43NTUgSW5leGFjdCBSb3VuZGVkCit4YWRkMjUyIGFkZCAxMDYzNDQ0Ni41RSs0NzU3ODM4NjEgNTAuNzIxMzA1NkUrMTc4MDc4MDkgLT4gMS4wNjM0NDQ2NUUrNDc1NzgzODY4IEluZXhhY3QgUm91bmRlZAoreGNvbTI1MiBjb21wYXJlIDEwNjM0NDQ2LjVFKzQ3NTc4Mzg2MSA1MC43MjEzMDU2RSsxNzgwNzgwOSAtPiAxCit4ZGl2MjUyIGRpdmlkZSAxMDYzNDQ0Ni41RSs0NzU3ODM4NjEgNTAuNzIxMzA1NkUrMTc4MDc4MDkgLT4gMi4wOTY2NDI4OUUrNDU3OTc2MDU3IEluZXhhY3QgUm91bmRlZAoreGR2aTI1MiBkaXZpZGVpbnQgMTA2MzQ0NDYuNUUrNDc1NzgzODYxIDUwLjcyMTMwNTZFKzE3ODA3ODA5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjUyIG11bHRpcGx5IDEwNjM0NDQ2LjVFKzQ3NTc4Mzg2MSA1MC43MjEzMDU2RSsxNzgwNzgwOSAtPiA1LjM5MzkzMDExRSs0OTM1OTE2NzggSW5leGFjdCBSb3VuZGVkCit4cG93MjUyIHBvd2VyIDEwNjM0NDQ2LjVFKzQ3NTc4Mzg2MSA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTI1MiByZW1haW5kZXIgMTA2MzQ0NDYuNUUrNDc1NzgzODYxIDUwLjcyMTMwNTZFKzE3ODA3ODA5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjUyIHN1YnRyYWN0IDEwNjM0NDQ2LjVFKzQ3NTc4Mzg2MSA1MC43MjEzMDU2RSsxNzgwNzgwOSAtPiAxLjA2MzQ0NDY1RSs0NzU3ODM4NjggSW5leGFjdCBSb3VuZGVkCit4YWRkMjUzIGFkZCAtMTYyNzI2LjI1N0UtNTk3Mjg1OTE4IC00MzkxLjU0Nzk5IC0+IC00MzkxLjU0Nzk5IEluZXhhY3QgUm91bmRlZAoreGNvbTI1MyBjb21wYXJlIC0xNjI3MjYuMjU3RS01OTcyODU5MTggLTQzOTEuNTQ3OTkgLT4gMQoreGRpdjI1MyBkaXZpZGUgLTE2MjcyNi4yNTdFLTU5NzI4NTkxOCAtNDM5MS41NDc5OSAtPiAzLjcwNTQ0MTg1RS01OTcyODU5MTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjUzIGRpdmlkZWludCAtMTYyNzI2LjI1N0UtNTk3Mjg1OTE4IC00MzkxLjU0Nzk5IC0+IDAKK3htdWwyNTMgbXVsdGlwbHkgLTE2MjcyNi4yNTdFLTU5NzI4NTkxOCAtNDM5MS41NDc5OSAtPiA3LjE0NjIwMTY3RS01OTcyODU5MTAgSW5leGFjdCBSb3VuZGVkCit4cG93MjUzIHBvd2VyIC0xNjI3MjYuMjU3RS01OTcyODU5MTggLTQzOTIgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMjUzIHJlbWFpbmRlciAtMTYyNzI2LjI1N0UtNTk3Mjg1OTE4IC00MzkxLjU0Nzk5IC0+IC0xLjYyNzI2MjU3RS01OTcyODU5MTMKK3hzdWIyNTMgc3VidHJhY3QgLTE2MjcyNi4yNTdFLTU5NzI4NTkxOCAtNDM5MS41NDc5OSAtPiA0MzkxLjU0Nzk5IEluZXhhY3QgUm91bmRlZAoreGFkZDI1NCBhZGQgNzAwMzU0NTg2LkUtOTk4NTY3MDcgNzE5OC4wNDkzRSs0MzYyNTAyOTkgLT4gNy4xOTgwNDkzMEUrNDM2MjUwMzAyIEluZXhhY3QgUm91bmRlZAoreGNvbTI1NCBjb21wYXJlIDcwMDM1NDU4Ni5FLTk5ODU2NzA3IDcxOTguMDQ5M0UrNDM2MjUwMjk5IC0+IC0xCit4ZGl2MjU0IGRpdmlkZSA3MDAzNTQ1ODYuRS05OTg1NjcwNyA3MTk4LjA0OTNFKzQzNjI1MDI5OSAtPiA5LjcyOTc4MzEyRS01MzYxMDcwMDIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjU0IGRpdmlkZWludCA3MDAzNTQ1ODYuRS05OTg1NjcwNyA3MTk4LjA0OTNFKzQzNjI1MDI5OSAtPiAwCit4bXVsMjU0IG11bHRpcGx5IDcwMDM1NDU4Ni5FLTk5ODU2NzA3IDcxOTguMDQ5M0UrNDM2MjUwMjk5IC0+IDUuMDQxMTg2ODRFKzMzNjM5MzYwNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNTQgcG93ZXIgNzAwMzU0NTg2LkUtOTk4NTY3MDcgNyAtPiA4LjI2NDY3NjEwRS02OTg5OTY4ODggSW5leGFjdCBSb3VuZGVkCit4cmVtMjU0IHJlbWFpbmRlciA3MDAzNTQ1ODYuRS05OTg1NjcwNyA3MTk4LjA0OTNFKzQzNjI1MDI5OSAtPiA3LjAwMzU0NTg2RS05OTg1NjY5OQoreHN1YjI1NCBzdWJ0cmFjdCA3MDAzNTQ1ODYuRS05OTg1NjcwNyA3MTk4LjA0OTNFKzQzNjI1MDI5OSAtPiAtNy4xOTgwNDkzMEUrNDM2MjUwMzAyIEluZXhhY3QgUm91bmRlZAoreGFkZDI1NSBhZGQgMzk2MTc2NjNFLTQ2MzcwNDY2NCAtODk1LjI5MDM0NiAtPiAtODk1LjI5MDM0NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNTUgY29tcGFyZSAzOTYxNzY2M0UtNDYzNzA0NjY0IC04OTUuMjkwMzQ2IC0+IDEKK3hkaXYyNTUgZGl2aWRlIDM5NjE3NjYzRS00NjM3MDQ2NjQgLTg5NS4yOTAzNDYgLT4gLTQuNDI1MTE4OThFLTQ2MzcwNDY2MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNTUgZGl2aWRlaW50IDM5NjE3NjYzRS00NjM3MDQ2NjQgLTg5NS4yOTAzNDYgLT4gLTAKK3htdWwyNTUgbXVsdGlwbHkgMzk2MTc2NjNFLTQ2MzcwNDY2NCAtODk1LjI5MDM0NiAtPiAtMy41NDY5MzExMkUtNDYzNzA0NjU0IEluZXhhY3QgUm91bmRlZAoreHBvdzI1NSBwb3dlciAzOTYxNzY2M0UtNDYzNzA0NjY0IC04OTUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMjU1IHJlbWFpbmRlciAzOTYxNzY2M0UtNDYzNzA0NjY0IC04OTUuMjkwMzQ2IC0+IDMuOTYxNzY2M0UtNDYzNzA0NjU3Cit4c3ViMjU1IHN1YnRyYWN0IDM5NjE3NjYzRS00NjM3MDQ2NjQgLTg5NS4yOTAzNDYgLT4gODk1LjI5MDM0NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNTYgYWRkIDUzNTA4ODIuNTkgLTM2MzI5ODI5IC0+IC0zMDk3ODk0Ni40IEluZXhhY3QgUm91bmRlZAoreGNvbTI1NiBjb21wYXJlIDUzNTA4ODIuNTkgLTM2MzI5ODI5IC0+IDEKK3hkaXYyNTYgZGl2aWRlIDUzNTA4ODIuNTkgLTM2MzI5ODI5IC0+IC0wLjE0NzI4NjIwNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNTYgZGl2aWRlaW50IDUzNTA4ODIuNTkgLTM2MzI5ODI5IC0+IC0wCit4bXVsMjU2IG11bHRpcGx5IDUzNTA4ODIuNTkgLTM2MzI5ODI5IC0+IC0xLjk0Mzk2NjQ5RSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNTYgcG93ZXIgNTM1MDg4Mi41OSAtMzYzMjk4MjkgLT4gOS43NzAwNjEwN0UtMjQ0NDQyNTQ2IEluZXhhY3QgUm91bmRlZAoreHJlbTI1NiByZW1haW5kZXIgNTM1MDg4Mi41OSAtMzYzMjk4MjkgLT4gNTM1MDg4Mi41OQoreHN1YjI1NiBzdWJ0cmFjdCA1MzUwODgyLjU5IC0zNjMyOTgyOSAtPiA0MTY4MDcxMS42IEluZXhhY3QgUm91bmRlZAoreGFkZDI1NyBhZGQgOTE5NjYuNDA4NEUrMjEwMzgyOTUyIDE2Njc0MC40NkUtNDIwMDEzOTAgLT4gOS4xOTY2NDA4NEUrMjEwMzgyOTU2IEluZXhhY3QgUm91bmRlZAoreGNvbTI1NyBjb21wYXJlIDkxOTY2LjQwODRFKzIxMDM4Mjk1MiAxNjY3NDAuNDZFLTQyMDAxMzkwIC0+IDEKK3hkaXYyNTcgZGl2aWRlIDkxOTY2LjQwODRFKzIxMDM4Mjk1MiAxNjY3NDAuNDZFLTQyMDAxMzkwIC0+IDUuNTE1NTQyNDRFKzI1MjM4NDM0MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNTcgZGl2aWRlaW50IDkxOTY2LjQwODRFKzIxMDM4Mjk1MiAxNjY3NDAuNDZFLTQyMDAxMzkwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjU3IG11bHRpcGx5IDkxOTY2LjQwODRFKzIxMDM4Mjk1MiAxNjY3NDAuNDZFLTQyMDAxMzkwIC0+IDEuNTMzNDUyMTJFKzE2ODM4MTU3MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNTcgcG93ZXIgOTE5NjYuNDA4NEUrMjEwMzgyOTUyIDIgLT4gOC40NTc4MjAyN0UrNDIwNzY1OTEzIEluZXhhY3QgUm91bmRlZAoreHJlbTI1NyByZW1haW5kZXIgOTE5NjYuNDA4NEUrMjEwMzgyOTUyIDE2Njc0MC40NkUtNDIwMDEzOTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyNTcgc3VidHJhY3QgOTE5NjYuNDA4NEUrMjEwMzgyOTUyIDE2Njc0MC40NkUtNDIwMDEzOTAgLT4gOS4xOTY2NDA4NEUrMjEwMzgyOTU2IEluZXhhY3QgUm91bmRlZAoreGFkZDI1OCBhZGQgMjMxODk5MDMxLkUtNDgxNzU5MDc2IDcyNi4zMzcxMDAgLT4gNzI2LjMzNzEwMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNTggY29tcGFyZSAyMzE4OTkwMzEuRS00ODE3NTkwNzYgNzI2LjMzNzEwMCAtPiAtMQoreGRpdjI1OCBkaXZpZGUgMjMxODk5MDMxLkUtNDgxNzU5MDc2IDcyNi4zMzcxMDAgLT4gMy4xOTI3MTkwN0UtNDgxNzU5MDcxIEluZXhhY3QgUm91bmRlZAoreGR2aTI1OCBkaXZpZGVpbnQgMjMxODk5MDMxLkUtNDgxNzU5MDc2IDcyNi4zMzcxMDAgLT4gMAoreG11bDI1OCBtdWx0aXBseSAyMzE4OTkwMzEuRS00ODE3NTkwNzYgNzI2LjMzNzEwMCAtPiAxLjY4NDM2ODcwRS00ODE3NTkwNjUgSW5leGFjdCBSb3VuZGVkCit4cG93MjU4IHBvd2VyIDIzMTg5OTAzMS5FLTQ4MTc1OTA3NiA3MjYgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjU4IHJlbWFpbmRlciAyMzE4OTkwMzEuRS00ODE3NTkwNzYgNzI2LjMzNzEwMCAtPiAyLjMxODk5MDMxRS00ODE3NTkwNjgKK3hzdWIyNTggc3VidHJhY3QgMjMxODk5MDMxLkUtNDgxNzU5MDc2IDcyNi4zMzcxMDAgLT4gLTcyNi4zMzcxMDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjU5IGFkZCAtOTYxMTMxMi4zMyAyMjEwOTczNS45IC0+IDEyNDk4NDIzLjYgSW5leGFjdCBSb3VuZGVkCit4Y29tMjU5IGNvbXBhcmUgLTk2MTEzMTIuMzMgMjIxMDk3MzUuOSAtPiAtMQoreGRpdjI1OSBkaXZpZGUgLTk2MTEzMTIuMzMgMjIxMDk3MzUuOSAtPiAtMC40MzQ3MDk1MDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjU5IGRpdmlkZWludCAtOTYxMTMxMi4zMyAyMjEwOTczNS45IC0+IC0wCit4bXVsMjU5IG11bHRpcGx5IC05NjExMzEyLjMzIDIyMTA5NzM1LjkgLT4gLTIuMTI1MDM1NzdFKzE0IEluZXhhY3QgUm91bmRlZAoreHBvdzI1OSBwb3dlciAtOTYxMTMxMi4zMyAyMjEwOTczNiAtPiA2Ljc0NTMwODI4RSsxNTQzODc0ODEgSW5leGFjdCBSb3VuZGVkCit4cmVtMjU5IHJlbWFpbmRlciAtOTYxMTMxMi4zMyAyMjEwOTczNS45IC0+IC05NjExMzEyLjMzCit4c3ViMjU5IHN1YnRyYWN0IC05NjExMzEyLjMzIDIyMTA5NzM1LjkgLT4gLTMxNzIxMDQ4LjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMjYwIGFkZCAtNTYwNDkzOC4xNUUtMzY4MTI1NDIgNzM1OTM3NTc3LiAtPiA3MzU5Mzc1NzcgSW5leGFjdCBSb3VuZGVkCit4Y29tMjYwIGNvbXBhcmUgLTU2MDQ5MzguMTVFLTM2ODEyNTQyIDczNTkzNzU3Ny4gLT4gLTEKK3hkaXYyNjAgZGl2aWRlIC01NjA0OTM4LjE1RS0zNjgxMjU0MiA3MzU5Mzc1NzcuIC0+IC03LjYxNjA1MTA0RS0zNjgxMjU0NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNjAgZGl2aWRlaW50IC01NjA0OTM4LjE1RS0zNjgxMjU0MiA3MzU5Mzc1NzcuIC0+IC0wCit4bXVsMjYwIG11bHRpcGx5IC01NjA0OTM4LjE1RS0zNjgxMjU0MiA3MzU5Mzc1NzcuIC0+IC00LjEyNDg4NDYwRS0zNjgxMjUyNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNjAgcG93ZXIgLTU2MDQ5MzguMTVFLTM2ODEyNTQyIDczNTkzNzU3NyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjYwIHJlbWFpbmRlciAtNTYwNDkzOC4xNUUtMzY4MTI1NDIgNzM1OTM3NTc3LiAtPiAtNS42MDQ5MzgxNUUtMzY4MTI1MzYKK3hzdWIyNjAgc3VidHJhY3QgLTU2MDQ5MzguMTVFLTM2ODEyNTQyIDczNTkzNzU3Ny4gLT4gLTczNTkzNzU3NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNjEgYWRkIDY5Mzg4MTQxMy4gMjYwNTQ3MjI0RS00ODAyODE0MTggLT4gNjkzODgxNDEzIEluZXhhY3QgUm91bmRlZAoreGNvbTI2MSBjb21wYXJlIDY5Mzg4MTQxMy4gMjYwNTQ3MjI0RS00ODAyODE0MTggLT4gMQoreGRpdjI2MSBkaXZpZGUgNjkzODgxNDEzLiAyNjA1NDcyMjRFLTQ4MDI4MTQxOCAtPiAyLjY2MzE2OTQ3RSs0ODAyODE0MTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMjYxIGRpdmlkZWludCA2OTM4ODE0MTMuIDI2MDU0NzIyNEUtNDgwMjgxNDE4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjYxIG11bHRpcGx5IDY5Mzg4MTQxMy4gMjYwNTQ3MjI0RS00ODAyODE0MTggLT4gMS44MDc4ODg3NkUtNDgwMjgxNDAxIEluZXhhY3QgUm91bmRlZAoreHBvdzI2MSBwb3dlciA2OTM4ODE0MTMuIDMgLT4gMy4zNDA4NDA2NkUrMjYgSW5leGFjdCBSb3VuZGVkCit4cmVtMjYxIHJlbWFpbmRlciA2OTM4ODE0MTMuIDI2MDU0NzIyNEUtNDgwMjgxNDE4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjYxIHN1YnRyYWN0IDY5Mzg4MTQxMy4gMjYwNTQ3MjI0RS00ODAyODE0MTggLT4gNjkzODgxNDEzIEluZXhhY3QgUm91bmRlZAoreGFkZDI2MiBhZGQgLTM0ODY1LjczNzhFLTM2ODc2ODAyNCAyMjk3MTE3Ljg4IC0+IDIyOTcxMTcuODggSW5leGFjdCBSb3VuZGVkCit4Y29tMjYyIGNvbXBhcmUgLTM0ODY1LjczNzhFLTM2ODc2ODAyNCAyMjk3MTE3Ljg4IC0+IC0xCit4ZGl2MjYyIGRpdmlkZSAtMzQ4NjUuNzM3OEUtMzY4NzY4MDI0IDIyOTcxMTcuODggLT4gLTEuNTE3ODAzNjBFLTM2ODc2ODAyNiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNjIgZGl2aWRlaW50IC0zNDg2NS43Mzc4RS0zNjg3NjgwMjQgMjI5NzExNy44OCAtPiAtMAoreG11bDI2MiBtdWx0aXBseSAtMzQ4NjUuNzM3OEUtMzY4NzY4MDI0IDIyOTcxMTcuODggLT4gLTguMDA5MDcwOTdFLTM2ODc2ODAxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNjIgcG93ZXIgLTM0ODY1LjczNzhFLTM2ODc2ODAyNCAyMjk3MTE4IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTI2MiByZW1haW5kZXIgLTM0ODY1LjczNzhFLTM2ODc2ODAyNCAyMjk3MTE3Ljg4IC0+IC0zLjQ4NjU3Mzc4RS0zNjg3NjgwMjAKK3hzdWIyNjIgc3VidHJhY3QgLTM0ODY1LjczNzhFLTM2ODc2ODAyNCAyMjk3MTE3Ljg4IC0+IC0yMjk3MTE3Ljg4IEluZXhhY3QgUm91bmRlZAoreGFkZDI2MyBhZGQgMTEyMy4zMjQ1NiA3Ljg2NzQ3OTE4RSs5MzA4ODg3OTYgLT4gNy44Njc0NzkxOEUrOTMwODg4Nzk2IEluZXhhY3QgUm91bmRlZAoreGNvbTI2MyBjb21wYXJlIDExMjMuMzI0NTYgNy44Njc0NzkxOEUrOTMwODg4Nzk2IC0+IC0xCit4ZGl2MjYzIGRpdmlkZSAxMTIzLjMyNDU2IDcuODY3NDc5MThFKzkzMDg4ODc5NiAtPiAxLjQyNzgwNzQ4RS05MzA4ODg3OTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjYzIGRpdmlkZWludCAxMTIzLjMyNDU2IDcuODY3NDc5MThFKzkzMDg4ODc5NiAtPiAwCit4bXVsMjYzIG11bHRpcGx5IDExMjMuMzI0NTYgNy44Njc0NzkxOEUrOTMwODg4Nzk2IC0+IDguODM3NzMyNTlFKzkzMDg4ODc5OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNjMgcG93ZXIgMTEyMy4zMjQ1NiA4IC0+IDIuNTM1Mzc0MDFFKzI0IEluZXhhY3QgUm91bmRlZAoreHJlbTI2MyByZW1haW5kZXIgMTEyMy4zMjQ1NiA3Ljg2NzQ3OTE4RSs5MzA4ODg3OTYgLT4gMTEyMy4zMjQ1NgoreHN1YjI2MyBzdWJ0cmFjdCAxMTIzLjMyNDU2IDcuODY3NDc5MThFKzkzMDg4ODc5NiAtPiAtNy44Njc0NzkxOEUrOTMwODg4Nzk2IEluZXhhY3QgUm91bmRlZAoreGFkZDI2NCBhZGQgNTYuNjYwNzQ2NUUrNDY3ODEyNTY1IDkwOTU1MjUxMkUrNzY0NTE2MjAwIC0+IDkuMDk1NTI1MTJFKzc2NDUxNjIwOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNjQgY29tcGFyZSA1Ni42NjA3NDY1RSs0Njc4MTI1NjUgOTA5NTUyNTEyRSs3NjQ1MTYyMDAgLT4gLTEKK3hkaXYyNjQgZGl2aWRlIDU2LjY2MDc0NjVFKzQ2NzgxMjU2NSA5MDk1NTI1MTJFKzc2NDUxNjIwMCAtPiA2LjIyOTUxODk5RS0yOTY3MDM2NDMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjY0IGRpdmlkZWludCA1Ni42NjA3NDY1RSs0Njc4MTI1NjUgOTA5NTUyNTEyRSs3NjQ1MTYyMDAgLT4gMAoreG11bDI2NCBtdWx0aXBseSA1Ni42NjA3NDY1RSs0Njc4MTI1NjUgOTA5NTUyNTEyRSs3NjQ1MTYyMDAgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4cG93MjY0IHBvd2VyIDU2LjY2MDc0NjVFKzQ2NzgxMjU2NSA5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTI2NCByZW1haW5kZXIgNTYuNjYwNzQ2NUUrNDY3ODEyNTY1IDkwOTU1MjUxMkUrNzY0NTE2MjAwIC0+IDUuNjY2MDc0NjVFKzQ2NzgxMjU2NgoreHN1YjI2NCBzdWJ0cmFjdCA1Ni42NjA3NDY1RSs0Njc4MTI1NjUgOTA5NTUyNTEyRSs3NjQ1MTYyMDAgLT4gLTkuMDk1NTI1MTJFKzc2NDUxNjIwOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNjUgYWRkIC0xLjg1NzcxODQwRSszNjU1NTI1NDAgLTczMDI4MzM5LjcgLT4gLTEuODU3NzE4NDBFKzM2NTU1MjU0MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNjUgY29tcGFyZSAtMS44NTc3MTg0MEUrMzY1NTUyNTQwIC03MzAyODMzOS43IC0+IC0xCit4ZGl2MjY1IGRpdmlkZSAtMS44NTc3MTg0MEUrMzY1NTUyNTQwIC03MzAyODMzOS43IC0+IDIuNTQzODMyMTdFKzM2NTU1MjUzMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNjUgZGl2aWRlaW50IC0xLjg1NzcxODQwRSszNjU1NTI1NDAgLTczMDI4MzM5LjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyNjUgbXVsdGlwbHkgLTEuODU3NzE4NDBFKzM2NTU1MjU0MCAtNzMwMjgzMzkuNyAtPiAxLjM1NjY2MDkwRSszNjU1NTI1NDggSW5leGFjdCBSb3VuZGVkCit4cG93MjY1IHBvd2VyIC0xLjg1NzcxODQwRSszNjU1NTI1NDAgLTczMDI4MzQwIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTI2NSByZW1haW5kZXIgLTEuODU3NzE4NDBFKzM2NTU1MjU0MCAtNzMwMjgzMzkuNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI2NSBzdWJ0cmFjdCAtMS44NTc3MTg0MEUrMzY1NTUyNTQwIC03MzAyODMzOS43IC0+IC0xLjg1NzcxODQwRSszNjU1NTI1NDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjY2IGFkZCAzNC4xOTM1NTI1IC00MDc2Ny42NDUwIC0+IC00MDczMy40NTE0IEluZXhhY3QgUm91bmRlZAoreGNvbTI2NiBjb21wYXJlIDM0LjE5MzU1MjUgLTQwNzY3LjY0NTAgLT4gMQoreGRpdjI2NiBkaXZpZGUgMzQuMTkzNTUyNSAtNDA3NjcuNjQ1MCAtPiAtMC4wMDA4Mzg3NDI0MDIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjY2IGRpdmlkZWludCAzNC4xOTM1NTI1IC00MDc2Ny42NDUwIC0+IC0wCit4bXVsMjY2IG11bHRpcGx5IDM0LjE5MzU1MjUgLTQwNzY3LjY0NTAgLT4gLTEzOTM5OTAuNjEgSW5leGFjdCBSb3VuZGVkCit4cG93MjY2IHBvd2VyIDM0LjE5MzU1MjUgLTQwNzY4IC0+IDEuNDUxNzQyMTBFLTYyNTM2IEluZXhhY3QgUm91bmRlZAoreHJlbTI2NiByZW1haW5kZXIgMzQuMTkzNTUyNSAtNDA3NjcuNjQ1MCAtPiAzNC4xOTM1NTI1Cit4c3ViMjY2IHN1YnRyYWN0IDM0LjE5MzU1MjUgLTQwNzY3LjY0NTAgLT4gNDA4MDEuODM4NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNjcgYWRkIDI2LjAwMDkxNjhFKzc1MTYxODI5NCAtMzA0MDE5LjkyOSAtPiAyLjYwMDA5MTY4RSs3NTE2MTgyOTUgSW5leGFjdCBSb3VuZGVkCit4Y29tMjY3IGNvbXBhcmUgMjYuMDAwOTE2OEUrNzUxNjE4Mjk0IC0zMDQwMTkuOTI5IC0+IDEKK3hkaXYyNjcgZGl2aWRlIDI2LjAwMDkxNjhFKzc1MTYxODI5NCAtMzA0MDE5LjkyOSAtPiAtOC41NTIzNzI1MEUrNzUxNjE4Mjg5IEluZXhhY3QgUm91bmRlZAoreGR2aTI2NyBkaXZpZGVpbnQgMjYuMDAwOTE2OEUrNzUxNjE4Mjk0IC0zMDQwMTkuOTI5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjY3IG11bHRpcGx5IDI2LjAwMDkxNjhFKzc1MTYxODI5NCAtMzA0MDE5LjkyOSAtPiAtNy45MDQ3OTY4OEUrNzUxNjE4MzAwIEluZXhhY3QgUm91bmRlZAoreHBvdzI2NyBwb3dlciAyNi4wMDA5MTY4RSs3NTE2MTgyOTQgLTMwNDAyMCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yNjcgcmVtYWluZGVyIDI2LjAwMDkxNjhFKzc1MTYxODI5NCAtMzA0MDE5LjkyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI2NyBzdWJ0cmFjdCAyNi4wMDA5MTY4RSs3NTE2MTgyOTQgLTMwNDAxOS45MjkgLT4gMi42MDAwOTE2OEUrNzUxNjE4Mjk1IEluZXhhY3QgUm91bmRlZAoreGFkZDI2OCBhZGQgLTU4LjQ4NTMwNzJFKzU4ODU0MDA1NSAtNDY0Ny4zMjA1IC0+IC01Ljg0ODUzMDcyRSs1ODg1NDAwNTYgSW5leGFjdCBSb3VuZGVkCit4Y29tMjY4IGNvbXBhcmUgLTU4LjQ4NTMwNzJFKzU4ODU0MDA1NSAtNDY0Ny4zMjA1IC0+IC0xCit4ZGl2MjY4IGRpdmlkZSAtNTguNDg1MzA3MkUrNTg4NTQwMDU1IC00NjQ3LjMyMDUgLT4gMS4yNTg0NzM3MkUrNTg4NTQwMDUzIEluZXhhY3QgUm91bmRlZAoreGR2aTI2OCBkaXZpZGVpbnQgLTU4LjQ4NTMwNzJFKzU4ODU0MDA1NSAtNDY0Ny4zMjA1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjY4IG11bHRpcGx5IC01OC40ODUzMDcyRSs1ODg1NDAwNTUgLTQ2NDcuMzIwNSAtPiAyLjcxNzk5OTY3RSs1ODg1NDAwNjAgSW5leGFjdCBSb3VuZGVkCit4cG93MjY4IHBvd2VyIC01OC40ODUzMDcyRSs1ODg1NDAwNTUgLTQ2NDcgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTI2OCByZW1haW5kZXIgLTU4LjQ4NTMwNzJFKzU4ODU0MDA1NSAtNDY0Ny4zMjA1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjY4IHN1YnRyYWN0IC01OC40ODUzMDcyRSs1ODg1NDAwNTUgLTQ2NDcuMzIwNSAtPiAtNS44NDg1MzA3MkUrNTg4NTQwMDU2IEluZXhhY3QgUm91bmRlZAoreGFkZDI2OSBhZGQgNTEuMDI1MTAxIC00NDY3NjkxLjU3IC0+IC00NDY3NjQwLjU0IEluZXhhY3QgUm91bmRlZAoreGNvbTI2OSBjb21wYXJlIDUxLjAyNTEwMSAtNDQ2NzY5MS41NyAtPiAxCit4ZGl2MjY5IGRpdmlkZSA1MS4wMjUxMDEgLTQ0Njc2OTEuNTcgLT4gLTAuMDAwMDExNDIwOTA5NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNjkgZGl2aWRlaW50IDUxLjAyNTEwMSAtNDQ2NzY5MS41NyAtPiAtMAoreG11bDI2OSBtdWx0aXBseSA1MS4wMjUxMDEgLTQ0Njc2OTEuNTcgLT4gLTIyNzk2NDQxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNjkgcG93ZXIgNTEuMDI1MTAxIC00NDY3NjkyIC0+IDQuNDk0NjI1ODlFLTc2Mjk4NTMgSW5leGFjdCBSb3VuZGVkCit4cmVtMjY5IHJlbWFpbmRlciA1MS4wMjUxMDEgLTQ0Njc2OTEuNTcgLT4gNTEuMDI1MTAxCit4c3ViMjY5IHN1YnRyYWN0IDUxLjAyNTEwMSAtNDQ2NzY5MS41NyAtPiA0NDY3NzQyLjYwIEluZXhhY3QgUm91bmRlZAoreGFkZDI3MCBhZGQgLTIyMTQuNzY1ODIgMzc5Nzg1MzcyRSsyMjMxMTc1NzIgLT4gMy43OTc4NTM3MkUrMjIzMTE3NTgwIEluZXhhY3QgUm91bmRlZAoreGNvbTI3MCBjb21wYXJlIC0yMjE0Ljc2NTgyIDM3OTc4NTM3MkUrMjIzMTE3NTcyIC0+IC0xCit4ZGl2MjcwIGRpdmlkZSAtMjIxNC43NjU4MiAzNzk3ODUzNzJFKzIyMzExNzU3MiAtPiAtNS44MzE2MjQ4N0UtMjIzMTE3NTc4IEluZXhhY3QgUm91bmRlZAoreGR2aTI3MCBkaXZpZGVpbnQgLTIyMTQuNzY1ODIgMzc5Nzg1MzcyRSsyMjMxMTc1NzIgLT4gLTAKK3htdWwyNzAgbXVsdGlwbHkgLTIyMTQuNzY1ODIgMzc5Nzg1MzcyRSsyMjMxMTc1NzIgLT4gLTguNDExMzU2NjFFKzIyMzExNzU4MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNzAgcG93ZXIgLTIyMTQuNzY1ODIgNCAtPiAyLjQwNjA4NjU4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNzAgcmVtYWluZGVyIC0yMjE0Ljc2NTgyIDM3OTc4NTM3MkUrMjIzMTE3NTcyIC0+IC0yMjE0Ljc2NTgyCit4c3ViMjcwIHN1YnRyYWN0IC0yMjE0Ljc2NTgyIDM3OTc4NTM3MkUrMjIzMTE3NTcyIC0+IC0zLjc5Nzg1MzcyRSsyMjMxMTc1ODAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjcxIGFkZCAtMjU2NC43NTIwN0UtODQxNDQzOTI5IC02NTM0OTgxODcgLT4gLTY1MzQ5ODE4NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNzEgY29tcGFyZSAtMjU2NC43NTIwN0UtODQxNDQzOTI5IC02NTM0OTgxODcgLT4gMQoreGRpdjI3MSBkaXZpZGUgLTI1NjQuNzUyMDdFLTg0MTQ0MzkyOSAtNjUzNDk4MTg3IC0+IDMuOTI0NjUwNjNFLTg0MTQ0MzkzNSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNzEgZGl2aWRlaW50IC0yNTY0Ljc1MjA3RS04NDE0NDM5MjkgLTY1MzQ5ODE4NyAtPiAwCit4bXVsMjcxIG11bHRpcGx5IC0yNTY0Ljc1MjA3RS04NDE0NDM5MjkgLTY1MzQ5ODE4NyAtPiAxLjY3NjA2MDgzRS04NDE0NDM5MTcgSW5leGFjdCBSb3VuZGVkCit4cG93MjcxIHBvd2VyIC0yNTY0Ljc1MjA3RS04NDE0NDM5MjkgLTY1MzQ5ODE4NyAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMjcxIHJlbWFpbmRlciAtMjU2NC43NTIwN0UtODQxNDQzOTI5IC02NTM0OTgxODcgLT4gLTIuNTY0NzUyMDdFLTg0MTQ0MzkyNgoreHN1YjI3MSBzdWJ0cmFjdCAtMjU2NC43NTIwN0UtODQxNDQzOTI5IC02NTM0OTgxODcgLT4gNjUzNDk4MTg3IEluZXhhY3QgUm91bmRlZAoreGFkZDI3MiBhZGQgNTEzMTE1NTI5LiAyNzc3NTA3NS42RSsyMTcxMzMzNTIgLT4gMi43Nzc1MDc1NkUrMjE3MTMzMzU5IEluZXhhY3QgUm91bmRlZAoreGNvbTI3MiBjb21wYXJlIDUxMzExNTUyOS4gMjc3NzUwNzUuNkUrMjE3MTMzMzUyIC0+IC0xCit4ZGl2MjcyIGRpdmlkZSA1MTMxMTU1MjkuIDI3Nzc1MDc1LjZFKzIxNzEzMzM1MiAtPiAxLjg0NzM5NTYyRS0yMTcxMzMzNTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjcyIGRpdmlkZWludCA1MTMxMTU1MjkuIDI3Nzc1MDc1LjZFKzIxNzEzMzM1MiAtPiAwCit4bXVsMjcyIG11bHRpcGx5IDUxMzExNTUyOS4gMjc3NzUwNzUuNkUrMjE3MTMzMzUyIC0+IDEuNDI1MTgyMjZFKzIxNzEzMzM2OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNzIgcG93ZXIgNTEzMTE1NTI5LiAzIC0+IDEuMzUwOTY5MjhFKzI2IEluZXhhY3QgUm91bmRlZAoreHJlbTI3MiByZW1haW5kZXIgNTEzMTE1NTI5LiAyNzc3NTA3NS42RSsyMTcxMzMzNTIgLT4gNTEzMTE1NTI5Cit4c3ViMjcyIHN1YnRyYWN0IDUxMzExNTUyOS4gMjc3NzUwNzUuNkUrMjE3MTMzMzUyIC0+IC0yLjc3NzUwNzU2RSsyMTcxMzMzNTkgSW5leGFjdCBSb3VuZGVkCit4YWRkMjczIGFkZCAtMjQ3MTU3LjIwOCAtNTMyOTkwLjQ1MyAtPiAtNzgwMTQ3LjY2MQoreGNvbTI3MyBjb21wYXJlIC0yNDcxNTcuMjA4IC01MzI5OTAuNDUzIC0+IDEKK3hkaXYyNzMgZGl2aWRlIC0yNDcxNTcuMjA4IC01MzI5OTAuNDUzIC0+IDAuNDYzNzE3ODkwIEluZXhhY3QgUm91bmRlZAoreGR2aTI3MyBkaXZpZGVpbnQgLTI0NzE1Ny4yMDggLTUzMjk5MC40NTMgLT4gMAoreG11bDI3MyBtdWx0aXBseSAtMjQ3MTU3LjIwOCAtNTMyOTkwLjQ1MyAtPiAxLjMxNzMyNDMyRSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNzMgcG93ZXIgLTI0NzE1Ny4yMDggLTUzMjk5MCAtPiAxLjQ4MzE0MDMzRS0yODc0NDAxIEluZXhhY3QgUm91bmRlZAoreHJlbTI3MyByZW1haW5kZXIgLTI0NzE1Ny4yMDggLTUzMjk5MC40NTMgLT4gLTI0NzE1Ny4yMDgKK3hzdWIyNzMgc3VidHJhY3QgLTI0NzE1Ny4yMDggLTUzMjk5MC40NTMgLT4gMjg1ODMzLjI0NQoreGFkZDI3NCBhZGQgNDAuMjQ5MDc2NEUtMzM5NDgyMjUzIDc2MjYuODU0NDJFKzU5NDI2NDU0MCAtPiA3LjYyNjg1NDQyRSs1OTQyNjQ1NDMgSW5leGFjdCBSb3VuZGVkCit4Y29tMjc0IGNvbXBhcmUgNDAuMjQ5MDc2NEUtMzM5NDgyMjUzIDc2MjYuODU0NDJFKzU5NDI2NDU0MCAtPiAtMQoreGRpdjI3NCBkaXZpZGUgNDAuMjQ5MDc2NEUtMzM5NDgyMjUzIDc2MjYuODU0NDJFKzU5NDI2NDU0MCAtPiA1LjI3NzI4Mzk1RS05MzM3NDY3OTYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjc0IGRpdmlkZWludCA0MC4yNDkwNzY0RS0zMzk0ODIyNTMgNzYyNi44NTQ0MkUrNTk0MjY0NTQwIC0+IDAKK3htdWwyNzQgbXVsdGlwbHkgNDAuMjQ5MDc2NEUtMzM5NDgyMjUzIDc2MjYuODU0NDJFKzU5NDI2NDU0MCAtPiAzLjA2OTczODQ2RSsyNTQ3ODIyOTIgSW5leGFjdCBSb3VuZGVkCit4cG93Mjc0IHBvd2VyIDQwLjI0OTA3NjRFLTMzOTQ4MjI1MyA4IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTI3NCByZW1haW5kZXIgNDAuMjQ5MDc2NEUtMzM5NDgyMjUzIDc2MjYuODU0NDJFKzU5NDI2NDU0MCAtPiA0LjAyNDkwNzY0RS0zMzk0ODIyNTIKK3hzdWIyNzQgc3VidHJhY3QgNDAuMjQ5MDc2NEUtMzM5NDgyMjUzIDc2MjYuODU0NDJFKzU5NDI2NDU0MCAtPiAtNy42MjY4NTQ0MkUrNTk0MjY0NTQzIEluZXhhY3QgUm91bmRlZAoreGFkZDI3NSBhZGQgLTExNTYwMDguOCAtODg3MDM4Mi4zNiAtPiAtMTAwMjYzOTEuMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNzUgY29tcGFyZSAtMTE1NjAwOC44IC04ODcwMzgyLjM2IC0+IDEKK3hkaXYyNzUgZGl2aWRlIC0xMTU2MDA4LjggLTg4NzAzODIuMzYgLT4gMC4xMzAzMjIzMTkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjc1IGRpdmlkZWludCAtMTE1NjAwOC44IC04ODcwMzgyLjM2IC0+IDAKK3htdWwyNzUgbXVsdGlwbHkgLTExNTYwMDguOCAtODg3MDM4Mi4zNiAtPiAxLjAyNTQyNDAxRSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNzUgcG93ZXIgLTExNTYwMDguOCAtODg3MDM4MiAtPiA0LjMyNDk0OTk2RS01Mzc4MDc4MiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNzUgcmVtYWluZGVyIC0xMTU2MDA4LjggLTg4NzAzODIuMzYgLT4gLTExNTYwMDguODAKK3hzdWIyNzUgc3VidHJhY3QgLTExNTYwMDguOCAtODg3MDM4Mi4zNiAtPiA3NzE0MzczLjU2Cit4YWRkMjc2IGFkZCA4ODAwOTc5MjguIC01MjQ1NTAxMS4xRSsyMDQ1MzgyMTggLT4gLTUuMjQ1NTAxMTFFKzIwNDUzODIyNSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNzYgY29tcGFyZSA4ODAwOTc5MjguIC01MjQ1NTAxMS4xRSsyMDQ1MzgyMTggLT4gMQoreGRpdjI3NiBkaXZpZGUgODgwMDk3OTI4LiAtNTI0NTUwMTEuMUUrMjA0NTM4MjE4IC0+IC0xLjY3NzgxNDc4RS0yMDQ1MzgyMTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjc2IGRpdmlkZWludCA4ODAwOTc5MjguIC01MjQ1NTAxMS4xRSsyMDQ1MzgyMTggLT4gLTAKK3htdWwyNzYgbXVsdGlwbHkgODgwMDk3OTI4LiAtNTI0NTUwMTEuMUUrMjA0NTM4MjE4IC0+IC00LjYxNjU1NDY2RSsyMDQ1MzgyMzQgSW5leGFjdCBSb3VuZGVkCit4cG93Mjc2IHBvd2VyIDg4MDA5NzkyOC4gLTUgLT4gMS44OTM4NDc1MUUtNDUgSW5leGFjdCBSb3VuZGVkCit4cmVtMjc2IHJlbWFpbmRlciA4ODAwOTc5MjguIC01MjQ1NTAxMS4xRSsyMDQ1MzgyMTggLT4gODgwMDk3OTI4Cit4c3ViMjc2IHN1YnRyYWN0IDg4MDA5NzkyOC4gLTUyNDU1MDExLjFFKzIwNDUzODIxOCAtPiA1LjI0NTUwMTExRSsyMDQ1MzgyMjUgSW5leGFjdCBSb3VuZGVkCit4YWRkMjc3IGFkZCA1Nzk2LjI1MjQgMzQ0NTgzMjkuN0UrODMyMTI5NDI2IC0+IDMuNDQ1ODMyOTdFKzgzMjEyOTQzMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNzcgY29tcGFyZSA1Nzk2LjI1MjQgMzQ0NTgzMjkuN0UrODMyMTI5NDI2IC0+IC0xCit4ZGl2Mjc3IGRpdmlkZSA1Nzk2LjI1MjQgMzQ0NTgzMjkuN0UrODMyMTI5NDI2IC0+IDEuNjgyMTA0ODZFLTgzMjEyOTQzMCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNzcgZGl2aWRlaW50IDU3OTYuMjUyNCAzNDQ1ODMyOS43RSs4MzIxMjk0MjYgLT4gMAoreG11bDI3NyBtdWx0aXBseSA1Nzk2LjI1MjQgMzQ0NTgzMjkuN0UrODMyMTI5NDI2IC0+IDEuOTk3MjkxNzZFKzgzMjEyOTQzNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNzcgcG93ZXIgNTc5Ni4yNTI0IDMgLT4gMS45NDczNDAzN0UrMTEgSW5leGFjdCBSb3VuZGVkCit4cmVtMjc3IHJlbWFpbmRlciA1Nzk2LjI1MjQgMzQ0NTgzMjkuN0UrODMyMTI5NDI2IC0+IDU3OTYuMjUyNAoreHN1YjI3NyBzdWJ0cmFjdCA1Nzk2LjI1MjQgMzQ0NTgzMjkuN0UrODMyMTI5NDI2IC0+IC0zLjQ0NTgzMjk3RSs4MzIxMjk0MzMgSW5leGFjdCBSb3VuZGVkCit4YWRkMjc4IGFkZCAyNy4xMDAwOTIzRS0yMTgwMzIyMjMgLTQ1LjAxOTgzNDEgLT4gLTQ1LjAxOTgzNDEgSW5leGFjdCBSb3VuZGVkCit4Y29tMjc4IGNvbXBhcmUgMjcuMTAwMDkyM0UtMjE4MDMyMjIzIC00NS4wMTk4MzQxIC0+IDEKK3hkaXYyNzggZGl2aWRlIDI3LjEwMDA5MjNFLTIxODAzMjIyMyAtNDUuMDE5ODM0MSAtPiAtNi4wMTk1ODk1NUUtMjE4MDMyMjI0IEluZXhhY3QgUm91bmRlZAoreGR2aTI3OCBkaXZpZGVpbnQgMjcuMTAwMDkyM0UtMjE4MDMyMjIzIC00NS4wMTk4MzQxIC0+IC0wCit4bXVsMjc4IG11bHRpcGx5IDI3LjEwMDA5MjNFLTIxODAzMjIyMyAtNDUuMDE5ODM0MSAtPiAtMS4yMjAwNDE2NkUtMjE4MDMyMjIwIEluZXhhY3QgUm91bmRlZAoreHBvdzI3OCBwb3dlciAyNy4xMDAwOTIzRS0yMTgwMzIyMjMgLTQ1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTI3OCByZW1haW5kZXIgMjcuMTAwMDkyM0UtMjE4MDMyMjIzIC00NS4wMTk4MzQxIC0+IDIuNzEwMDA5MjNFLTIxODAzMjIyMgoreHN1YjI3OCBzdWJ0cmFjdCAyNy4xMDAwOTIzRS0yMTgwMzIyMjMgLTQ1LjAxOTgzNDEgLT4gNDUuMDE5ODM0MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNzkgYWRkIDQyNjQzNDc3LjggMjYxMTg0NjVFLTczMDM5MDU0OSAtPiA0MjY0MzQ3Ny44IEluZXhhY3QgUm91bmRlZAoreGNvbTI3OSBjb21wYXJlIDQyNjQzNDc3LjggMjYxMTg0NjVFLTczMDM5MDU0OSAtPiAxCit4ZGl2Mjc5IGRpdmlkZSA0MjY0MzQ3Ny44IDI2MTE4NDY1RS03MzAzOTA1NDkgLT4gMS42MzI2OTQ2NEUrNzMwMzkwNTQ5IEluZXhhY3QgUm91bmRlZAoreGR2aTI3OSBkaXZpZGVpbnQgNDI2NDM0NzcuOCAyNjExODQ2NUUtNzMwMzkwNTQ5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjc5IG11bHRpcGx5IDQyNjQzNDc3LjggMjYxMTg0NjVFLTczMDM5MDU0OSAtPiAxLjExMzc4MjE4RS03MzAzOTA1MzQgSW5leGFjdCBSb3VuZGVkCit4cG93Mjc5IHBvd2VyIDQyNjQzNDc3LjggMyAtPiA3Ljc1NDU3MjMwRSsyMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNzkgcmVtYWluZGVyIDQyNjQzNDc3LjggMjYxMTg0NjVFLTczMDM5MDU0OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI3OSBzdWJ0cmFjdCA0MjY0MzQ3Ny44IDI2MTE4NDY1RS03MzAzOTA1NDkgLT4gNDI2NDM0NzcuOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyODAgYWRkIC0zMTkxOC45MTc2RS0xNjMwMzE2NTcgLTIxLjU0MjI4MjRFLTgwNzMxNzI1OCAtPiAtMy4xOTE4OTE3NkUtMTYzMDMxNjUzIEluZXhhY3QgUm91bmRlZAoreGNvbTI4MCBjb21wYXJlIC0zMTkxOC45MTc2RS0xNjMwMzE2NTcgLTIxLjU0MjI4MjRFLTgwNzMxNzI1OCAtPiAtMQoreGRpdjI4MCBkaXZpZGUgLTMxOTE4LjkxNzZFLTE2MzAzMTY1NyAtMjEuNTQyMjgyNEUtODA3MzE3MjU4IC0+IDEuNDgxNjg2OTBFKzY0NDI4NTYwNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyODAgZGl2aWRlaW50IC0zMTkxOC45MTc2RS0xNjMwMzE2NTcgLTIxLjU0MjI4MjRFLTgwNzMxNzI1OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI4MCBtdWx0aXBseSAtMzE5MTguOTE3NkUtMTYzMDMxNjU3IC0yMS41NDIyODI0RS04MDczMTcyNTggLT4gNi44NzYwNjMzN0UtOTcwMzQ4OTEwIEluZXhhY3QgUm91bmRlZAoreHBvdzI4MCBwb3dlciAtMzE5MTguOTE3NkUtMTYzMDMxNjU3IC0yIC0+IDkuODE1MzAyNTBFKzMyNjA2MzMwNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yODAgcmVtYWluZGVyIC0zMTkxOC45MTc2RS0xNjMwMzE2NTcgLTIxLjU0MjI4MjRFLTgwNzMxNzI1OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI4MCBzdWJ0cmFjdCAtMzE5MTguOTE3NkUtMTYzMDMxNjU3IC0yMS41NDIyODI0RS04MDczMTcyNTggLT4gLTMuMTkxODkxNzZFLTE2MzAzMTY1MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyODEgYWRkIDg0MjI0ODQxLjAgMi42MjU0ODI1NUUrNjQ3MDg3NjA4IC0+IDIuNjI1NDgyNTVFKzY0NzA4NzYwOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yODEgY29tcGFyZSA4NDIyNDg0MS4wIDIuNjI1NDgyNTVFKzY0NzA4NzYwOCAtPiAtMQoreGRpdjI4MSBkaXZpZGUgODQyMjQ4NDEuMCAyLjYyNTQ4MjU1RSs2NDcwODc2MDggLT4gMy4yMDc5NzU2NUUtNjQ3MDg3NjAxIEluZXhhY3QgUm91bmRlZAoreGR2aTI4MSBkaXZpZGVpbnQgODQyMjQ4NDEuMCAyLjYyNTQ4MjU1RSs2NDcwODc2MDggLT4gMAoreG11bDI4MSBtdWx0aXBseSA4NDIyNDg0MS4wIDIuNjI1NDgyNTVFKzY0NzA4NzYwOCAtPiAyLjIxMTMwODUwRSs2NDcwODc2MTYgSW5leGFjdCBSb3VuZGVkCit4cG93MjgxIHBvd2VyIDg0MjI0ODQxLjAgMyAtPiA1Ljk3NDc2MTg1RSsyMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yODEgcmVtYWluZGVyIDg0MjI0ODQxLjAgMi42MjU0ODI1NUUrNjQ3MDg3NjA4IC0+IDg0MjI0ODQxLjAKK3hzdWIyODEgc3VidHJhY3QgODQyMjQ4NDEuMCAyLjYyNTQ4MjU1RSs2NDcwODc2MDggLT4gLTIuNjI1NDgyNTVFKzY0NzA4NzYwOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyODIgYWRkIC02NDQxMzY5OC45IC02Njc0LjEwNTVFLTcwMTA0Nzg1MiAtPiAtNjQ0MTM2OTguOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yODIgY29tcGFyZSAtNjQ0MTM2OTguOSAtNjY3NC4xMDU1RS03MDEwNDc4NTIgLT4gLTEKK3hkaXYyODIgZGl2aWRlIC02NDQxMzY5OC45IC02Njc0LjEwNTVFLTcwMTA0Nzg1MiAtPiA5LjY1MTI4NTY5RSs3MDEwNDc4NTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjgyIGRpdmlkZWludCAtNjQ0MTM2OTguOSAtNjY3NC4xMDU1RS03MDEwNDc4NTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyODIgbXVsdGlwbHkgLTY0NDEzNjk4LjkgLTY2NzQuMTA1NUUtNzAxMDQ3ODUyIC0+IDQuMjk5MDM4MjJFLTcwMTA0Nzg0MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyODIgcG93ZXIgLTY0NDEzNjk4LjkgLTcgLT4gLTIuMTczNDYzMzhFLTU1IEluZXhhY3QgUm91bmRlZAoreHJlbTI4MiByZW1haW5kZXIgLTY0NDEzNjk4LjkgLTY2NzQuMTA1NUUtNzAxMDQ3ODUyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjgyIHN1YnRyYWN0IC02NDQxMzY5OC45IC02Njc0LjEwNTVFLTcwMTA0Nzg1MiAtPiAtNjQ0MTM2OTguOSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyODMgYWRkIC02Mi41MDU5MjA4IDkuNTc5NTc3OUUtODk4MzUwMDEyIC0+IC02Mi41MDU5MjA4IEluZXhhY3QgUm91bmRlZAoreGNvbTI4MyBjb21wYXJlIC02Mi41MDU5MjA4IDkuNTc5NTc3OUUtODk4MzUwMDEyIC0+IC0xCit4ZGl2MjgzIGRpdmlkZSAtNjIuNTA1OTIwOCA5LjU3OTU3NzlFLTg5ODM1MDAxMiAtPiAtNi41MjQ5MTM4OEUrODk4MzUwMDEyIEluZXhhY3QgUm91bmRlZAoreGR2aTI4MyBkaXZpZGVpbnQgLTYyLjUwNTkyMDggOS41Nzk1Nzc5RS04OTgzNTAwMTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyODMgbXVsdGlwbHkgLTYyLjUwNTkyMDggOS41Nzk1Nzc5RS04OTgzNTAwMTIgLT4gLTUuOTg3ODAzMzhFLTg5ODM1MDAxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyODMgcG93ZXIgLTYyLjUwNTkyMDggMTAgLT4gOS4xMDM1NjY1OUUrMTcgSW5leGFjdCBSb3VuZGVkCit4cmVtMjgzIHJlbWFpbmRlciAtNjIuNTA1OTIwOCA5LjU3OTU3NzlFLTg5ODM1MDAxMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI4MyBzdWJ0cmFjdCAtNjIuNTA1OTIwOCA5LjU3OTU3NzlFLTg5ODM1MDAxMiAtPiAtNjIuNTA1OTIwOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyODQgYWRkIDkwOTA5NTAuODAgNDM2LjQwMDkzMiAtPiA5MDkxMzg3LjIwIEluZXhhY3QgUm91bmRlZAoreGNvbTI4NCBjb21wYXJlIDkwOTA5NTAuODAgNDM2LjQwMDkzMiAtPiAxCit4ZGl2Mjg0IGRpdmlkZSA5MDkwOTUwLjgwIDQzNi40MDA5MzIgLT4gMjA4MzEuNjQ4NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyODQgZGl2aWRlaW50IDkwOTA5NTAuODAgNDM2LjQwMDkzMiAtPiAyMDgzMQoreG11bDI4NCBtdWx0aXBseSA5MDkwOTUwLjgwIDQzNi40MDA5MzIgLT4gMy45NjcyOTk0MEUrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyODQgcG93ZXIgOTA5MDk1MC44MCA0MzYgLT4gOC45ODc4OTU1N0UrMzAzMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yODQgcmVtYWluZGVyIDkwOTA5NTAuODAgNDM2LjQwMDkzMiAtPiAyODIuOTg1NTA4Cit4c3ViMjg0IHN1YnRyYWN0IDkwOTA5NTAuODAgNDM2LjQwMDkzMiAtPiA5MDkwNTE0LjQwIEluZXhhY3QgUm91bmRlZAoreGFkZDI4NSBhZGQgLTg5ODMzODI1LjdFKzMyOTIwNTM5MyAtNzc5NDMwLjE5NCAtPiAtOC45ODMzODI1N0UrMzI5MjA1NDAwIEluZXhhY3QgUm91bmRlZAoreGNvbTI4NSBjb21wYXJlIC04OTgzMzgyNS43RSszMjkyMDUzOTMgLTc3OTQzMC4xOTQgLT4gLTEKK3hkaXYyODUgZGl2aWRlIC04OTgzMzgyNS43RSszMjkyMDUzOTMgLTc3OTQzMC4xOTQgLT4gMS4xNTI1NTc2OEUrMzI5MjA1Mzk1IEluZXhhY3QgUm91bmRlZAoreGR2aTI4NSBkaXZpZGVpbnQgLTg5ODMzODI1LjdFKzMyOTIwNTM5MyAtNzc5NDMwLjE5NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI4NSBtdWx0aXBseSAtODk4MzM4MjUuN0UrMzI5MjA1MzkzIC03Nzk0MzAuMTk0IC0+IDcuMDAxOTE5NjJFKzMyOTIwNTQwNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyODUgcG93ZXIgLTg5ODMzODI1LjdFKzMyOTIwNTM5MyAtNzc5NDMwIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTI4NSByZW1haW5kZXIgLTg5ODMzODI1LjdFKzMyOTIwNTM5MyAtNzc5NDMwLjE5NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI4NSBzdWJ0cmFjdCAtODk4MzM4MjUuN0UrMzI5MjA1MzkzIC03Nzk0MzAuMTk0IC0+IC04Ljk4MzM4MjU3RSszMjkyMDU0MDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjg2IGFkZCAtNzE0NTYyLjAxOUUrNzUwMjA1Njg4IDcwNDA3OTc2NCAtPiAtNy4xNDU2MjAxOUUrNzUwMjA1NjkzIEluZXhhY3QgUm91bmRlZAoreGNvbTI4NiBjb21wYXJlIC03MTQ1NjIuMDE5RSs3NTAyMDU2ODggNzA0MDc5NzY0IC0+IC0xCit4ZGl2Mjg2IGRpdmlkZSAtNzE0NTYyLjAxOUUrNzUwMjA1Njg4IDcwNDA3OTc2NCAtPiAtMS4wMTQ4ODc4OEUrNzUwMjA1Njg1IEluZXhhY3QgUm91bmRlZAoreGR2aTI4NiBkaXZpZGVpbnQgLTcxNDU2Mi4wMTlFKzc1MDIwNTY4OCA3MDQwNzk3NjQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyODYgbXVsdGlwbHkgLTcxNDU2Mi4wMTlFKzc1MDIwNTY4OCA3MDQwNzk3NjQgLT4gLTUuMDMxMDg2NThFKzc1MDIwNTcwMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyODYgcG93ZXIgLTcxNDU2Mi4wMTlFKzc1MDIwNTY4OCA3MDQwNzk3NjQgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMjg2IHJlbWFpbmRlciAtNzE0NTYyLjAxOUUrNzUwMjA1Njg4IDcwNDA3OTc2NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI4NiBzdWJ0cmFjdCAtNzE0NTYyLjAxOUUrNzUwMjA1Njg4IDcwNDA3OTc2NCAtPiAtNy4xNDU2MjAxOUUrNzUwMjA1NjkzIEluZXhhY3QgUm91bmRlZAoreGFkZDI4NyBhZGQgLTU4NDUzNzY3MC4gMzExMzkuNzczN0UtMTQ2Njg3NTYwIC0+IC01ODQ1Mzc2NzAgSW5leGFjdCBSb3VuZGVkCit4Y29tMjg3IGNvbXBhcmUgLTU4NDUzNzY3MC4gMzExMzkuNzczN0UtMTQ2Njg3NTYwIC0+IC0xCit4ZGl2Mjg3IGRpdmlkZSAtNTg0NTM3NjcwLiAzMTEzOS43NzM3RS0xNDY2ODc1NjAgLT4gLTEuODc3MTQxNjhFKzE0NjY4NzU2NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyODcgZGl2aWRlaW50IC01ODQ1Mzc2NzAuIDMxMTM5Ljc3MzdFLTE0NjY4NzU2MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI4NyBtdWx0aXBseSAtNTg0NTM3NjcwLiAzMTEzOS43NzM3RS0xNDY2ODc1NjAgLT4gLTEuODIwMjM3MDhFLTE0NjY4NzU0NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyODcgcG93ZXIgLTU4NDUzNzY3MC4gMyAtPiAtMS45OTcyNzMzN0UrMjYgSW5leGFjdCBSb3VuZGVkCit4cmVtMjg3IHJlbWFpbmRlciAtNTg0NTM3NjcwLiAzMTEzOS43NzM3RS0xNDY2ODc1NjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyODcgc3VidHJhY3QgLTU4NDUzNzY3MC4gMzExMzkuNzczN0UtMTQ2Njg3NTYwIC0+IC01ODQ1Mzc2NzAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjg4IGFkZCAtNC4xODA3NDY1MEUtODU4NzQ2ODc5IDU3MTAzNS4yNzdFLTI3OTQwOTE2NSAtPiA1LjcxMDM1Mjc3RS0yNzk0MDkxNjAgSW5leGFjdCBSb3VuZGVkCit4Y29tMjg4IGNvbXBhcmUgLTQuMTgwNzQ2NTBFLTg1ODc0Njg3OSA1NzEwMzUuMjc3RS0yNzk0MDkxNjUgLT4gLTEKK3hkaXYyODggZGl2aWRlIC00LjE4MDc0NjUwRS04NTg3NDY4NzkgNTcxMDM1LjI3N0UtMjc5NDA5MTY1IC0+IC03LjMyMTM0NTQwRS01NzkzMzc3MjAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjg4IGRpdmlkZWludCAtNC4xODA3NDY1MEUtODU4NzQ2ODc5IDU3MTAzNS4yNzdFLTI3OTQwOTE2NSAtPiAtMAoreG11bDI4OCBtdWx0aXBseSAtNC4xODA3NDY1MEUtODU4NzQ2ODc5IDU3MTAzNS4yNzdFLTI3OTQwOTE2NSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cG93Mjg4IHBvd2VyIC00LjE4MDc0NjUwRS04NTg3NDY4NzkgNiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yODggcmVtYWluZGVyIC00LjE4MDc0NjUwRS04NTg3NDY4NzkgNTcxMDM1LjI3N0UtMjc5NDA5MTY1IC0+IC00LjE4MDc0NjUwRS04NTg3NDY4NzkKK3hzdWIyODggc3VidHJhY3QgLTQuMTgwNzQ2NTBFLTg1ODc0Njg3OSA1NzEwMzUuMjc3RS0yNzk0MDkxNjUgLT4gLTUuNzEwMzUyNzdFLTI3OTQwOTE2MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyODkgYWRkIDUuMTUzMDk2MzUgLTY5NTY0OS4yMTlFKzQ1MTk0ODE4MyAtPiAtNi45NTY0OTIxOUUrNDUxOTQ4MTg4IEluZXhhY3QgUm91bmRlZAoreGNvbTI4OSBjb21wYXJlIDUuMTUzMDk2MzUgLTY5NTY0OS4yMTlFKzQ1MTk0ODE4MyAtPiAxCit4ZGl2Mjg5IGRpdmlkZSA1LjE1MzA5NjM1IC02OTU2NDkuMjE5RSs0NTE5NDgxODMgLT4gLTcuNDA3NjA3NDdFLTQ1MTk0ODE4OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyODkgZGl2aWRlaW50IDUuMTUzMDk2MzUgLTY5NTY0OS4yMTlFKzQ1MTk0ODE4MyAtPiAtMAoreG11bDI4OSBtdWx0aXBseSA1LjE1MzA5NjM1IC02OTU2NDkuMjE5RSs0NTE5NDgxODMgLT4gLTMuNTg0NzQ3NDVFKzQ1MTk0ODE4OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyODkgcG93ZXIgNS4xNTMwOTYzNSAtNyAtPiAwLjAwMDAxMDM2Mzg3NDkgSW5leGFjdCBSb3VuZGVkCit4cmVtMjg5IHJlbWFpbmRlciA1LjE1MzA5NjM1IC02OTU2NDkuMjE5RSs0NTE5NDgxODMgLT4gNS4xNTMwOTYzNQoreHN1YjI4OSBzdWJ0cmFjdCA1LjE1MzA5NjM1IC02OTU2NDkuMjE5RSs0NTE5NDgxODMgLT4gNi45NTY0OTIxOUUrNDUxOTQ4MTg4IEluZXhhY3QgUm91bmRlZAoreGFkZDI5MCBhZGQgLTk0MDAzMDE1My5FKzgzNzk3NjU3IC00LjExNTEwMTkzIC0+IC05LjQwMDMwMTUzRSs4Mzc5NzY2NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yOTAgY29tcGFyZSAtOTQwMDMwMTUzLkUrODM3OTc2NTcgLTQuMTE1MTAxOTMgLT4gLTEKK3hkaXYyOTAgZGl2aWRlIC05NDAwMzAxNTMuRSs4Mzc5NzY1NyAtNC4xMTUxMDE5MyAtPiAyLjI4NDM0MjMzRSs4Mzc5NzY2NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyOTAgZGl2aWRlaW50IC05NDAwMzAxNTMuRSs4Mzc5NzY1NyAtNC4xMTUxMDE5MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI5MCBtdWx0aXBseSAtOTQwMDMwMTUzLkUrODM3OTc2NTcgLTQuMTE1MTAxOTMgLT4gMy44NjgzMTk5MEUrODM3OTc2NjYgSW5leGFjdCBSb3VuZGVkCit4cG93MjkwIHBvd2VyIC05NDAwMzAxNTMuRSs4Mzc5NzY1NyAtNCAtPiAxLjI4MDY1NzEwRS0zMzUxOTA2NjQgSW5leGFjdCBSb3VuZGVkCit4cmVtMjkwIHJlbWFpbmRlciAtOTQwMDMwMTUzLkUrODM3OTc2NTcgLTQuMTE1MTAxOTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyOTAgc3VidHJhY3QgLTk0MDAzMDE1My5FKzgzNzk3NjU3IC00LjExNTEwMTkzIC0+IC05LjQwMDMwMTUzRSs4Mzc5NzY2NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyOTEgYWRkIDg5MDg4Ljk2ODNFKzU4NzczOTI5MCAxLjMxOTMyMTEwIC0+IDguOTA4ODk2ODNFKzU4NzczOTI5NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yOTEgY29tcGFyZSA4OTA4OC45NjgzRSs1ODc3MzkyOTAgMS4zMTkzMjExMCAtPiAxCit4ZGl2MjkxIGRpdmlkZSA4OTA4OC45NjgzRSs1ODc3MzkyOTAgMS4zMTkzMjExMCAtPiA2Ljc1MjYzNzI3RSs1ODc3MzkyOTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjkxIGRpdmlkZWludCA4OTA4OC45NjgzRSs1ODc3MzkyOTAgMS4zMTkzMjExMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI5MSBtdWx0aXBseSA4OTA4OC45NjgzRSs1ODc3MzkyOTAgMS4zMTkzMjExMCAtPiAxLjE3NTM2OTU2RSs1ODc3MzkyOTUgSW5leGFjdCBSb3VuZGVkCit4cG93MjkxIHBvd2VyIDg5MDg4Ljk2ODNFKzU4NzczOTI5MCAxIC0+IDguOTA4ODk2ODNFKzU4NzczOTI5NAoreHJlbTI5MSByZW1haW5kZXIgODkwODguOTY4M0UrNTg3NzM5MjkwIDEuMzE5MzIxMTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyOTEgc3VidHJhY3QgODkwODguOTY4M0UrNTg3NzM5MjkwIDEuMzE5MzIxMTAgLT4gOC45MDg4OTY4M0UrNTg3NzM5Mjk0IEluZXhhY3QgUm91bmRlZAoreGFkZDI5MiBhZGQgMzMzNjc1MCA2LjQ3OTYxMTI2IC0+IDMzMzY3NTYuNDggSW5leGFjdCBSb3VuZGVkCit4Y29tMjkyIGNvbXBhcmUgMzMzNjc1MCA2LjQ3OTYxMTI2IC0+IDEKK3hkaXYyOTIgZGl2aWRlIDMzMzY3NTAgNi40Nzk2MTEyNiAtPiA1MTQ5NjEuNDQ4IEluZXhhY3QgUm91bmRlZAoreGR2aTI5MiBkaXZpZGVpbnQgMzMzNjc1MCA2LjQ3OTYxMTI2IC0+IDUxNDk2MQoreG11bDI5MiBtdWx0aXBseSAzMzM2NzUwIDYuNDc5NjExMjYgLT4gMjE2MjA4NDIuOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyOTIgcG93ZXIgMzMzNjc1MCA2IC0+IDEuMzgwMTk5OTdFKzM5IEluZXhhY3QgUm91bmRlZAoreHJlbTI5MiByZW1haW5kZXIgMzMzNjc1MCA2LjQ3OTYxMTI2IC0+IDIuOTA1OTM5MTQKK3hzdWIyOTIgc3VidHJhY3QgMzMzNjc1MCA2LjQ3OTYxMTI2IC0+IDMzMzY3NDMuNTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMjkzIGFkZCA5MDQ2NTQ2MjIuIDY5MjA2NTI3MC5FKzMyOTA4MTkxNSAtPiA2LjkyMDY1MjcwRSszMjkwODE5MjMgSW5leGFjdCBSb3VuZGVkCit4Y29tMjkzIGNvbXBhcmUgOTA0NjU0NjIyLiA2OTIwNjUyNzAuRSszMjkwODE5MTUgLT4gLTEKK3hkaXYyOTMgZGl2aWRlIDkwNDY1NDYyMi4gNjkyMDY1MjcwLkUrMzI5MDgxOTE1IC0+IDEuMzA3MTgxMDdFLTMyOTA4MTkxNSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyOTMgZGl2aWRlaW50IDkwNDY1NDYyMi4gNjkyMDY1MjcwLkUrMzI5MDgxOTE1IC0+IDAKK3htdWwyOTMgbXVsdGlwbHkgOTA0NjU0NjIyLiA2OTIwNjUyNzAuRSszMjkwODE5MTUgLT4gNi4yNjA4MDA0NUUrMzI5MDgxOTMyIEluZXhhY3QgUm91bmRlZAoreHBvdzI5MyBwb3dlciA5MDQ2NTQ2MjIuIDcgLT4gNC45NTg4MzQ4NUUrNjIgSW5leGFjdCBSb3VuZGVkCit4cmVtMjkzIHJlbWFpbmRlciA5MDQ2NTQ2MjIuIDY5MjA2NTI3MC5FKzMyOTA4MTkxNSAtPiA5MDQ2NTQ2MjIKK3hzdWIyOTMgc3VidHJhY3QgOTA0NjU0NjIyLiA2OTIwNjUyNzAuRSszMjkwODE5MTUgLT4gLTYuOTIwNjUyNzBFKzMyOTA4MTkyMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyOTQgYWRkIDMwNDgwNDM4MCAtNDY4MS4yMzY5OCAtPiAzMDQ3OTk2OTkgSW5leGFjdCBSb3VuZGVkCit4Y29tMjk0IGNvbXBhcmUgMzA0ODA0MzgwIC00NjgxLjIzNjk4IC0+IDEKK3hkaXYyOTQgZGl2aWRlIDMwNDgwNDM4MCAtNDY4MS4yMzY5OCAtPiAtNjUxMTEuOTMxMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyOTQgZGl2aWRlaW50IDMwNDgwNDM4MCAtNDY4MS4yMzY5OCAtPiAtNjUxMTEKK3htdWwyOTQgbXVsdGlwbHkgMzA0ODA0MzgwIC00NjgxLjIzNjk4IC0+IC0xLjQyNjg2MTU0RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyOTQgcG93ZXIgMzA0ODA0MzgwIC00NjgxIC0+IDEuOTgwMzcxMDJFLTM5NzE0IEluZXhhY3QgUm91bmRlZAoreHJlbTI5NCByZW1haW5kZXIgMzA0ODA0MzgwIC00NjgxLjIzNjk4IC0+IDQzNTguOTk1MjIKK3hzdWIyOTQgc3VidHJhY3QgMzA0ODA0MzgwIC00NjgxLjIzNjk4IC0+IDMwNDgwOTA2MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyOTUgYWRkIDY3NC41NTU2OSAtODI5ODEuMjY4NEUrODUyODkwNzUyIC0+IC04LjI5ODEyNjg0RSs4NTI4OTA3NTYgSW5leGFjdCBSb3VuZGVkCit4Y29tMjk1IGNvbXBhcmUgNjc0LjU1NTY5IC04Mjk4MS4yNjg0RSs4NTI4OTA3NTIgLT4gMQoreGRpdjI5NSBkaXZpZGUgNjc0LjU1NTY5IC04Mjk4MS4yNjg0RSs4NTI4OTA3NTIgLT4gLTguMTI5MDExNTZFLTg1Mjg5MDc1NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyOTUgZGl2aWRlaW50IDY3NC41NTU2OSAtODI5ODEuMjY4NEUrODUyODkwNzUyIC0+IC0wCit4bXVsMjk1IG11bHRpcGx5IDY3NC41NTU2OSAtODI5ODEuMjY4NEUrODUyODkwNzUyIC0+IC01LjU5NzU0ODY4RSs4NTI4OTA3NTkgSW5leGFjdCBSb3VuZGVkCit4cG93Mjk1IHBvd2VyIDY3NC41NTU2OSAtOCAtPiAyLjMzMjY5MjY1RS0yMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yOTUgcmVtYWluZGVyIDY3NC41NTU2OSAtODI5ODEuMjY4NEUrODUyODkwNzUyIC0+IDY3NC41NTU2OQoreHN1YjI5NSBzdWJ0cmFjdCA2NzQuNTU1NjkgLTgyOTgxLjI2ODRFKzg1Mjg5MDc1MiAtPiA4LjI5ODEyNjg0RSs4NTI4OTA3NTYgSW5leGFjdCBSb3VuZGVkCit4YWRkMjk2IGFkZCAtNTExMS41MTAyNUUtMTA4MDA2MDk2IDU0NDg4NzAuNEUrMjc5MjEyMjU1IC0+IDUuNDQ4ODcwNDBFKzI3OTIxMjI2MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yOTYgY29tcGFyZSAtNTExMS41MTAyNUUtMTA4MDA2MDk2IDU0NDg4NzAuNEUrMjc5MjEyMjU1IC0+IC0xCit4ZGl2Mjk2IGRpdmlkZSAtNTExMS41MTAyNUUtMTA4MDA2MDk2IDU0NDg4NzAuNEUrMjc5MjEyMjU1IC0+IC05LjM4MDg2MjIyRS0zODcyMTgzNTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjk2IGRpdmlkZWludCAtNTExMS41MTAyNUUtMTA4MDA2MDk2IDU0NDg4NzAuNEUrMjc5MjEyMjU1IC0+IC0wCit4bXVsMjk2IG11bHRpcGx5IC01MTExLjUxMDI1RS0xMDgwMDYwOTYgNTQ0ODg3MC40RSsyNzkyMTIyNTUgLT4gLTIuNzg1MTk1NjlFKzE3MTIwNjE2OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyOTYgcG93ZXIgLTUxMTEuNTEwMjVFLTEwODAwNjA5NiA1IC0+IC0zLjQ4OTM2MzIzRS01NDAwMzA0NjIgSW5leGFjdCBSb3VuZGVkCit4cmVtMjk2IHJlbWFpbmRlciAtNTExMS41MTAyNUUtMTA4MDA2MDk2IDU0NDg4NzAuNEUrMjc5MjEyMjU1IC0+IC01LjExMTUxMDI1RS0xMDgwMDYwOTMKK3hzdWIyOTYgc3VidHJhY3QgLTUxMTEuNTEwMjVFLTEwODAwNjA5NiA1NDQ4ODcwLjRFKzI3OTIxMjI1NSAtPiAtNS40NDg4NzA0MEUrMjc5MjEyMjYxIEluZXhhY3QgUm91bmRlZAoreGFkZDI5NyBhZGQgLTI2MjMuNDUwNjggLTQ2NjQ2MzkzOC4gLT4gLTQ2NjQ2NjU2MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yOTcgY29tcGFyZSAtMjYyMy40NTA2OCAtNDY2NDYzOTM4LiAtPiAxCit4ZGl2Mjk3IGRpdmlkZSAtMjYyMy40NTA2OCAtNDY2NDYzOTM4LiAtPiAwLjAwMDAwNTYyNDEyMzI1IEluZXhhY3QgUm91bmRlZAoreGR2aTI5NyBkaXZpZGVpbnQgLTI2MjMuNDUwNjggLTQ2NjQ2MzkzOC4gLT4gMAoreG11bDI5NyBtdWx0aXBseSAtMjYyMy40NTA2OCAtNDY2NDYzOTM4LiAtPiAxLjIyMzc0NTE0RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyOTcgcG93ZXIgLTI2MjMuNDUwNjggLTQ2NjQ2MzkzOCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yOTcgcmVtYWluZGVyIC0yNjIzLjQ1MDY4IC00NjY0NjM5MzguIC0+IC0yNjIzLjQ1MDY4Cit4c3ViMjk3IHN1YnRyYWN0IC0yNjIzLjQ1MDY4IC00NjY0NjM5MzguIC0+IDQ2NjQ2MTMxNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyOTggYWRkIDI5OTM1MC40MzUgMzM3My4zMzU1MSAtPiAzMDI3MjMuNzcxIEluZXhhY3QgUm91bmRlZAoreGNvbTI5OCBjb21wYXJlIDI5OTM1MC40MzUgMzM3My4zMzU1MSAtPiAxCit4ZGl2Mjk4IGRpdmlkZSAyOTkzNTAuNDM1IDMzNzMuMzM1NTEgLT4gODguNzQwMTkwMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyOTggZGl2aWRlaW50IDI5OTM1MC40MzUgMzM3My4zMzU1MSAtPiA4OAoreG11bDI5OCBtdWx0aXBseSAyOTkzNTAuNDM1IDMzNzMuMzM1NTEgLT4gMS4wMDk4MDk0NUUrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyOTggcG93ZXIgMjk5MzUwLjQzNSAzMzczIC0+IDEuNDI4MTczNzBFKzE4NDcxIEluZXhhY3QgUm91bmRlZAoreHJlbTI5OCByZW1haW5kZXIgMjk5MzUwLjQzNSAzMzczLjMzNTUxIC0+IDI0OTYuOTEwMTIKK3hzdWIyOTggc3VidHJhY3QgMjk5MzUwLjQzNSAzMzczLjMzNTUxIC0+IDI5NTk3Ny4wOTkgSW5leGFjdCBSb3VuZGVkCit4YWRkMjk5IGFkZCAtNjU4OTk0Ny44MCAtMjQ0OC43NTkzM0UtNTkxNTQ5NzM0IC0+IC02NTg5OTQ3LjgwIEluZXhhY3QgUm91bmRlZAoreGNvbTI5OSBjb21wYXJlIC02NTg5OTQ3LjgwIC0yNDQ4Ljc1OTMzRS01OTE1NDk3MzQgLT4gLTEKK3hkaXYyOTkgZGl2aWRlIC02NTg5OTQ3LjgwIC0yNDQ4Ljc1OTMzRS01OTE1NDk3MzQgLT4gMi42OTExMzczOUUrNTkxNTQ5NzM3IEluZXhhY3QgUm91bmRlZAoreGR2aTI5OSBkaXZpZGVpbnQgLTY1ODk5NDcuODAgLTI0NDguNzU5MzNFLTU5MTU0OTczNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI5OSBtdWx0aXBseSAtNjU4OTk0Ny44MCAtMjQ0OC43NTkzM0UtNTkxNTQ5NzM0IC0+IDEuNjEzNzE5NjJFLTU5MTU0OTcyNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyOTkgcG93ZXIgLTY1ODk5NDcuODAgLTIgLT4gMi4zMDI2OTMwNUUtMTQgSW5leGFjdCBSb3VuZGVkCit4cmVtMjk5IHJlbWFpbmRlciAtNjU4OTk0Ny44MCAtMjQ0OC43NTkzM0UtNTkxNTQ5NzM0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjk5IHN1YnRyYWN0IC02NTg5OTQ3LjgwIC0yNDQ4Ljc1OTMzRS01OTE1NDk3MzQgLT4gLTY1ODk5NDcuODAgSW5leGFjdCBSb3VuZGVkCit4YWRkMzAwIGFkZCAzNzc0LjUzNThFLTQ5MTA5MDUyMCAxNzMuMDYwMDkwIC0+IDE3My4wNjAwOTAgSW5leGFjdCBSb3VuZGVkCit4Y29tMzAwIGNvbXBhcmUgMzc3NC41MzU4RS00OTEwOTA1MjAgMTczLjA2MDA5MCAtPiAtMQoreGRpdjMwMCBkaXZpZGUgMzc3NC41MzU4RS00OTEwOTA1MjAgMTczLjA2MDA5MCAtPiAyLjE4MTA1NTAzRS00OTEwOTA1MTkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzAwIGRpdmlkZWludCAzNzc0LjUzNThFLTQ5MTA5MDUyMCAxNzMuMDYwMDkwIC0+IDAKK3htdWwzMDAgbXVsdGlwbHkgMzc3NC41MzU4RS00OTEwOTA1MjAgMTczLjA2MDA5MCAtPiA2LjUzMjIxNTA1RS00OTEwOTA1MTUgSW5leGFjdCBSb3VuZGVkCit4cG93MzAwIHBvd2VyIDM3NzQuNTM1OEUtNDkxMDkwNTIwIDE3MyAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zMDAgcmVtYWluZGVyIDM3NzQuNTM1OEUtNDkxMDkwNTIwIDE3My4wNjAwOTAgLT4gMy43NzQ1MzU4RS00OTEwOTA1MTcKK3hzdWIzMDAgc3VidHJhY3QgMzc3NC41MzU4RS00OTEwOTA1MjAgMTczLjA2MDA5MCAtPiAtMTczLjA2MDA5MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMDEgYWRkIC0xMy42NzgzNjkwIC00NTMuNjEwMTE3IC0+IC00NjcuMjg4NDg2IFJvdW5kZWQKK3hjb20zMDEgY29tcGFyZSAtMTMuNjc4MzY5MCAtNDUzLjYxMDExNyAtPiAxCit4ZGl2MzAxIGRpdmlkZSAtMTMuNjc4MzY5MCAtNDUzLjYxMDExNyAtPiAwLjAzMDE1NDQ2MTkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzAxIGRpdmlkZWludCAtMTMuNjc4MzY5MCAtNDUzLjYxMDExNyAtPiAwCit4bXVsMzAxIG11bHRpcGx5IC0xMy42NzgzNjkwIC00NTMuNjEwMTE3IC0+IDYyMDQuNjQ2NTYgSW5leGFjdCBSb3VuZGVkCit4cG93MzAxIHBvd2VyIC0xMy42NzgzNjkwIC00NTQgLT4gMS43Mzk0ODUzNUUtNTE2IEluZXhhY3QgUm91bmRlZAoreHJlbTMwMSByZW1haW5kZXIgLTEzLjY3ODM2OTAgLTQ1My42MTAxMTcgLT4gLTEzLjY3ODM2OTAKK3hzdWIzMDEgc3VidHJhY3QgLTEzLjY3ODM2OTAgLTQ1My42MTAxMTcgLT4gNDM5LjkzMTc0OCBSb3VuZGVkCit4YWRkMzAyIGFkZCAtOTkwMTAwOTI3LkUtNjE1MjQ0NjM0IDIyMzgwMS40MjFFKzI0NzYzMjYxOCAtPiAyLjIzODAxNDIxRSsyNDc2MzI2MjMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzAyIGNvbXBhcmUgLTk5MDEwMDkyNy5FLTYxNTI0NDYzNCAyMjM4MDEuNDIxRSsyNDc2MzI2MTggLT4gLTEKK3hkaXYzMDIgZGl2aWRlIC05OTAxMDA5MjcuRS02MTUyNDQ2MzQgMjIzODAxLjQyMUUrMjQ3NjMyNjE4IC0+IC00LjQyNDAxNTM3RS04NjI4NzcyNDkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzAyIGRpdmlkZWludCAtOTkwMTAwOTI3LkUtNjE1MjQ0NjM0IDIyMzgwMS40MjFFKzI0NzYzMjYxOCAtPiAtMAoreG11bDMwMiBtdWx0aXBseSAtOTkwMTAwOTI3LkUtNjE1MjQ0NjM0IDIyMzgwMS40MjFFKzI0NzYzMjYxOCAtPiAtMi4yMTU4NTk5NEUtMzY3NjEyMDAyIEluZXhhY3QgUm91bmRlZAoreHBvdzMwMiBwb3dlciAtOTkwMTAwOTI3LkUtNjE1MjQ0NjM0IDIgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzAyIHJlbWFpbmRlciAtOTkwMTAwOTI3LkUtNjE1MjQ0NjM0IDIyMzgwMS40MjFFKzI0NzYzMjYxOCAtPiAtOS45MDEwMDkyN0UtNjE1MjQ0NjI2Cit4c3ViMzAyIHN1YnRyYWN0IC05OTAxMDA5MjcuRS02MTUyNDQ2MzQgMjIzODAxLjQyMUUrMjQ3NjMyNjE4IC0+IC0yLjIzODAxNDIxRSsyNDc2MzI2MjMgSW5leGFjdCBSb3VuZGVkCit4YWRkMzAzIGFkZCAxMjc1LjEwMjkyIC02Njc5NjUzNTMgLT4gLTY2Nzk2NDA3OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMDMgY29tcGFyZSAxMjc1LjEwMjkyIC02Njc5NjUzNTMgLT4gMQoreGRpdjMwMyBkaXZpZGUgMTI3NS4xMDI5MiAtNjY3OTY1MzUzIC0+IC0wLjAwMDAwMTkwODkzNTcyIEluZXhhY3QgUm91bmRlZAoreGR2aTMwMyBkaXZpZGVpbnQgMTI3NS4xMDI5MiAtNjY3OTY1MzUzIC0+IC0wCit4bXVsMzAzIG11bHRpcGx5IDEyNzUuMTAyOTIgLTY2Nzk2NTM1MyAtPiAtOC41MTcyNDU3MkUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MzAzIHBvd2VyIDEyNzUuMTAyOTIgLTY2Nzk2NTM1MyAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zMDMgcmVtYWluZGVyIDEyNzUuMTAyOTIgLTY2Nzk2NTM1MyAtPiAxMjc1LjEwMjkyCit4c3ViMzAzIHN1YnRyYWN0IDEyNzUuMTAyOTIgLTY2Nzk2NTM1MyAtPiA2Njc5NjY2MjggSW5leGFjdCBSb3VuZGVkCit4YWRkMzA0IGFkZCAtOC43NjM3NTQ4MEUtNTk2NzkyMTk3IDk5Mi4wNzczNjEgLT4gOTkyLjA3NzM2MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMDQgY29tcGFyZSAtOC43NjM3NTQ4MEUtNTk2NzkyMTk3IDk5Mi4wNzczNjEgLT4gLTEKK3hkaXYzMDQgZGl2aWRlIC04Ljc2Mzc1NDgwRS01OTY3OTIxOTcgOTkyLjA3NzM2MSAtPiAtOC44MzM3NDEzNEUtNTk2NzkyMjAwIEluZXhhY3QgUm91bmRlZAoreGR2aTMwNCBkaXZpZGVpbnQgLTguNzYzNzU0ODBFLTU5Njc5MjE5NyA5OTIuMDc3MzYxIC0+IC0wCit4bXVsMzA0IG11bHRpcGx5IC04Ljc2Mzc1NDgwRS01OTY3OTIxOTcgOTkyLjA3NzM2MSAtPiAtOC42OTQzMjI3M0UtNTk2NzkyMTk0IEluZXhhY3QgUm91bmRlZAoreHBvdzMwNCBwb3dlciAtOC43NjM3NTQ4MEUtNTk2NzkyMTk3IDk5MiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zMDQgcmVtYWluZGVyIC04Ljc2Mzc1NDgwRS01OTY3OTIxOTcgOTkyLjA3NzM2MSAtPiAtOC43NjM3NTQ4MEUtNTk2NzkyMTk3Cit4c3ViMzA0IHN1YnRyYWN0IC04Ljc2Mzc1NDgwRS01OTY3OTIxOTcgOTkyLjA3NzM2MSAtPiAtOTkyLjA3NzM2MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMDUgYWRkIDk1My45NzY5MzVFKzM4NTQ0NDcyMCA5NjUwMy4zMzc4IC0+IDkuNTM5NzY5MzVFKzM4NTQ0NDcyMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMDUgY29tcGFyZSA5NTMuOTc2OTM1RSszODU0NDQ3MjAgOTY1MDMuMzM3OCAtPiAxCit4ZGl2MzA1IGRpdmlkZSA5NTMuOTc2OTM1RSszODU0NDQ3MjAgOTY1MDMuMzM3OCAtPiA5Ljg4NTQyOTQyRSszODU0NDQ3MTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzA1IGRpdmlkZWludCA5NTMuOTc2OTM1RSszODU0NDQ3MjAgOTY1MDMuMzM3OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMwNSBtdWx0aXBseSA5NTMuOTc2OTM1RSszODU0NDQ3MjAgOTY1MDMuMzM3OCAtPiA5LjIwNjE5NTg0RSszODU0NDQ3MjcgSW5leGFjdCBSb3VuZGVkCit4cG93MzA1IHBvd2VyIDk1My45NzY5MzVFKzM4NTQ0NDcyMCA5NjUwMyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMDUgcmVtYWluZGVyIDk1My45NzY5MzVFKzM4NTQ0NDcyMCA5NjUwMy4zMzc4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzA1IHN1YnRyYWN0IDk1My45NzY5MzVFKzM4NTQ0NDcyMCA5NjUwMy4zMzc4IC0+IDkuNTM5NzY5MzVFKzM4NTQ0NDcyMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMDYgYWRkIDIxMzU3NzE1MiAtOTg2NzEwMDczRSszMTkwMDA0NiAtPiAtOS44NjcxMDA3M0UrMzE5MDAwNTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMzA2IGNvbXBhcmUgMjEzNTc3MTUyIC05ODY3MTAwNzNFKzMxOTAwMDQ2IC0+IDEKK3hkaXYzMDYgZGl2aWRlIDIxMzU3NzE1MiAtOTg2NzEwMDczRSszMTkwMDA0NiAtPiAtMi4xNjQ1MzgwN0UtMzE5MDAwNDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzA2IGRpdmlkZWludCAyMTM1NzcxNTIgLTk4NjcxMDA3M0UrMzE5MDAwNDYgLT4gLTAKK3htdWwzMDYgbXVsdGlwbHkgMjEzNTc3MTUyIC05ODY3MTAwNzNFKzMxOTAwMDQ2IC0+IC0yLjEwNzM4NzI3RSszMTkwMDA2MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMDYgcG93ZXIgMjEzNTc3MTUyIC0xMCAtPiA1LjA2MzUxNDg3RS04NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMDYgcmVtYWluZGVyIDIxMzU3NzE1MiAtOTg2NzEwMDczRSszMTkwMDA0NiAtPiAyMTM1NzcxNTIKK3hzdWIzMDYgc3VidHJhY3QgMjEzNTc3MTUyIC05ODY3MTAwNzNFKzMxOTAwMDQ2IC0+IDkuODY3MTAwNzNFKzMxOTAwMDU0IEluZXhhY3QgUm91bmRlZAoreGFkZDMwNyBhZGQgOTEzOTMuOTM5OEUtMzIzNDM5MjI4IC0xMzUuNzAxMDAwIC0+IC0xMzUuNzAxMDAwIEluZXhhY3QgUm91bmRlZAoreGNvbTMwNyBjb21wYXJlIDkxMzkzLjkzOThFLTMyMzQzOTIyOCAtMTM1LjcwMTAwMCAtPiAxCit4ZGl2MzA3IGRpdmlkZSA5MTM5My45Mzk4RS0zMjM0MzkyMjggLTEzNS43MDEwMDAgLT4gLTYuNzM0OTQ5NjJFLTMyMzQzOTIyNiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMDcgZGl2aWRlaW50IDkxMzkzLjkzOThFLTMyMzQzOTIyOCAtMTM1LjcwMTAwMCAtPiAtMAoreG11bDMwNyBtdWx0aXBseSA5MTM5My45Mzk4RS0zMjM0MzkyMjggLTEzNS43MDEwMDAgLT4gLTEuMjQwMjI0OTBFLTMyMzQzOTIyMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMDcgcG93ZXIgOTEzOTMuOTM5OEUtMzIzNDM5MjI4IC0xMzYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzA3IHJlbWFpbmRlciA5MTM5My45Mzk4RS0zMjM0MzkyMjggLTEzNS43MDEwMDAgLT4gOS4xMzkzOTM5OEUtMzIzNDM5MjI0Cit4c3ViMzA3IHN1YnRyYWN0IDkxMzkzLjkzOThFLTMyMzQzOTIyOCAtMTM1LjcwMTAwMCAtPiAxMzUuNzAxMDAwIEluZXhhY3QgUm91bmRlZAoreGFkZDMwOCBhZGQgLTM5Ni41MDM1NTcgNDU3NTcyNjQuRS0yNTQzNjM3ODggLT4gLTM5Ni41MDM1NTcgSW5leGFjdCBSb3VuZGVkCit4Y29tMzA4IGNvbXBhcmUgLTM5Ni41MDM1NTcgNDU3NTcyNjQuRS0yNTQzNjM3ODggLT4gLTEKK3hkaXYzMDggZGl2aWRlIC0zOTYuNTAzNTU3IDQ1NzU3MjY0LkUtMjU0MzYzNzg4IC0+IC04LjY2NTM2ODU2RSsyNTQzNjM3ODIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzA4IGRpdmlkZWludCAtMzk2LjUwMzU1NyA0NTc1NzI2NC5FLTI1NDM2Mzc4OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMwOCBtdWx0aXBseSAtMzk2LjUwMzU1NyA0NTc1NzI2NC5FLTI1NDM2Mzc4OCAtPiAtMS44MTQyOTE3OUUtMjU0MzYzNzc4IEluZXhhY3QgUm91bmRlZAoreHBvdzMwOCBwb3dlciAtMzk2LjUwMzU1NyA1IC0+IC05LjgwMDIxMTI4RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMDggcmVtYWluZGVyIC0zOTYuNTAzNTU3IDQ1NzU3MjY0LkUtMjU0MzYzNzg4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzA4IHN1YnRyYWN0IC0zOTYuNTAzNTU3IDQ1NzU3MjY0LkUtMjU0MzYzNzg4IC0+IC0zOTYuNTAzNTU3IEluZXhhY3QgUm91bmRlZAoreGFkZDMwOSBhZGQgNTk4MDc4NDYuMSAxLjUzMzQ1MjU0IC0+IDU5ODA3ODQ3LjYgSW5leGFjdCBSb3VuZGVkCit4Y29tMzA5IGNvbXBhcmUgNTk4MDc4NDYuMSAxLjUzMzQ1MjU0IC0+IDEKK3hkaXYzMDkgZGl2aWRlIDU5ODA3ODQ2LjEgMS41MzM0NTI1NCAtPiAzOTAwMjA4NC45IEluZXhhY3QgUm91bmRlZAoreGR2aTMwOSBkaXZpZGVpbnQgNTk4MDc4NDYuMSAxLjUzMzQ1MjU0IC0+IDM5MDAyMDg0Cit4bXVsMzA5IG11bHRpcGx5IDU5ODA3ODQ2LjEgMS41MzM0NTI1NCAtPiA5MTcxMjQ5My41IEluZXhhY3QgUm91bmRlZAoreHBvdzMwOSBwb3dlciA1OTgwNzg0Ni4xIDIgLT4gMy41NzY5Nzg0NkUrMTUgSW5leGFjdCBSb3VuZGVkCit4cmVtMzA5IHJlbWFpbmRlciA1OTgwNzg0Ni4xIDEuNTMzNDUyNTQgLT4gMS4zMjQ5MDY2NAoreHN1YjMwOSBzdWJ0cmFjdCA1OTgwNzg0Ni4xIDEuNTMzNDUyNTQgLT4gNTk4MDc4NDQuNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMTAgYWRkIC04MDQ2MTU4LjQ1IDguMzYzNTM5NyAtPiAtODA0NjE1MC4wOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMTAgY29tcGFyZSAtODA0NjE1OC40NSA4LjM2MzUzOTcgLT4gLTEKK3hkaXYzMTAgZGl2aWRlIC04MDQ2MTU4LjQ1IDguMzYzNTM5NyAtPiAtOTYyMDUxLjgwMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMTAgZGl2aWRlaW50IC04MDQ2MTU4LjQ1IDguMzYzNTM5NyAtPiAtOTYyMDUxCit4bXVsMzEwIG11bHRpcGx5IC04MDQ2MTU4LjQ1IDguMzYzNTM5NyAtPiAtNjcyOTQzNjUuNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMTAgcG93ZXIgLTgwNDYxNTguNDUgOCAtPiAxLjc1Njc0NDY3RSs1NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMTAgcmVtYWluZGVyIC04MDQ2MTU4LjQ1IDguMzYzNTM5NyAtPiAtNi43MTgwNzUzCit4c3ViMzEwIHN1YnRyYWN0IC04MDQ2MTU4LjQ1IDguMzYzNTM5NyAtPiAtODA0NjE2Ni44MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMTEgYWRkIDU1LjExMjMzODFFKzUwNjI3MjUwIC05NC4wMzU1MDQ3RS0xNjI1NDAzMTYgLT4gNS41MTEyMzM4MUUrNTA2MjcyNTEgSW5leGFjdCBSb3VuZGVkCit4Y29tMzExIGNvbXBhcmUgNTUuMTEyMzM4MUUrNTA2MjcyNTAgLTk0LjAzNTUwNDdFLTE2MjU0MDMxNiAtPiAxCit4ZGl2MzExIGRpdmlkZSA1NS4xMTIzMzgxRSs1MDYyNzI1MCAtOTQuMDM1NTA0N0UtMTYyNTQwMzE2IC0+IC01Ljg2MDgwMTAxRSsyMTMxNjc1NjUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzExIGRpdmlkZWludCA1NS4xMTIzMzgxRSs1MDYyNzI1MCAtOTQuMDM1NTA0N0UtMTYyNTQwMzE2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzExIG11bHRpcGx5IDU1LjExMjMzODFFKzUwNjI3MjUwIC05NC4wMzU1MDQ3RS0xNjI1NDAzMTYgLT4gLTUuMTgyNTE2NTNFLTExMTkxMzA2MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMTEgcG93ZXIgNTUuMTEyMzM4MUUrNTA2MjcyNTAgLTkgLT4gMi4xMzE4Njg4MUUtNDU1NjQ1MjY2IEluZXhhY3QgUm91bmRlZAoreHJlbTMxMSByZW1haW5kZXIgNTUuMTEyMzM4MUUrNTA2MjcyNTAgLTk0LjAzNTUwNDdFLTE2MjU0MDMxNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMxMSBzdWJ0cmFjdCA1NS4xMTIzMzgxRSs1MDYyNzI1MCAtOTQuMDM1NTA0N0UtMTYyNTQwMzE2IC0+IDUuNTExMjMzODFFKzUwNjI3MjUxIEluZXhhY3QgUm91bmRlZAoreGFkZDMxMiBhZGQgLTk0OC4wMzgwNTQgMzU4MC44NDUxMCAtPiAyNjMyLjgwNzA1IEluZXhhY3QgUm91bmRlZAoreGNvbTMxMiBjb21wYXJlIC05NDguMDM4MDU0IDM1ODAuODQ1MTAgLT4gLTEKK3hkaXYzMTIgZGl2aWRlIC05NDguMDM4MDU0IDM1ODAuODQ1MTAgLT4gLTAuMjY0NzUyNjAxIEluZXhhY3QgUm91bmRlZAoreGR2aTMxMiBkaXZpZGVpbnQgLTk0OC4wMzgwNTQgMzU4MC44NDUxMCAtPiAtMAoreG11bDMxMiBtdWx0aXBseSAtOTQ4LjAzODA1NCAzNTgwLjg0NTEwIC0+IC0zMzk0Nzc3LjQyIEluZXhhY3QgUm91bmRlZAoreHBvdzMxMiBwb3dlciAtOTQ4LjAzODA1NCAzNTgxIC0+IC0xLjAzMDU4Mjg4RSsxMDY2MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMTIgcmVtYWluZGVyIC05NDguMDM4MDU0IDM1ODAuODQ1MTAgLT4gLTk0OC4wMzgwNTQKK3hzdWIzMTIgc3VidHJhY3QgLTk0OC4wMzgwNTQgMzU4MC44NDUxMCAtPiAtNDUyOC44ODMxNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMTMgYWRkIC02MDI2LjQyNzUyIC0xNC4yMjg2NDA2RS0zMzQ5MjEzNjQgLT4gLTYwMjYuNDI3NTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMzEzIGNvbXBhcmUgLTYwMjYuNDI3NTIgLTE0LjIyODY0MDZFLTMzNDkyMTM2NCAtPiAtMQoreGRpdjMxMyBkaXZpZGUgLTYwMjYuNDI3NTIgLTE0LjIyODY0MDZFLTMzNDkyMTM2NCAtPiA0LjIzNTQyMDQ0RSszMzQ5MjEzNjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzEzIGRpdmlkZWludCAtNjAyNi40Mjc1MiAtMTQuMjI4NjQwNkUtMzM0OTIxMzY0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzEzIG11bHRpcGx5IC02MDI2LjQyNzUyIC0xNC4yMjg2NDA2RS0zMzQ5MjEzNjQgLT4gOC41NzQ3ODcxM0UtMzM0OTIxMzYwIEluZXhhY3QgUm91bmRlZAoreHBvdzMxMyBwb3dlciAtNjAyNi40Mjc1MiAtMSAtPiAtMC4wMDAxNjU5MzU3ODggSW5leGFjdCBSb3VuZGVkCit4cmVtMzEzIHJlbWFpbmRlciAtNjAyNi40Mjc1MiAtMTQuMjI4NjQwNkUtMzM0OTIxMzY0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzEzIHN1YnRyYWN0IC02MDI2LjQyNzUyIC0xNC4yMjg2NDA2RS0zMzQ5MjEzNjQgLT4gLTYwMjYuNDI3NTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzE0IGFkZCA3OTU1MS41MDE0IC01MzguMTg2MjI5IC0+IDc5MDEzLjMxNTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMzE0IGNvbXBhcmUgNzk1NTEuNTAxNCAtNTM4LjE4NjIyOSAtPiAxCit4ZGl2MzE0IGRpdmlkZSA3OTU1MS41MDE0IC01MzguMTg2MjI5IC0+IC0xNDcuODE0MDc4IEluZXhhY3QgUm91bmRlZAoreGR2aTMxNCBkaXZpZGVpbnQgNzk1NTEuNTAxNCAtNTM4LjE4NjIyOSAtPiAtMTQ3Cit4bXVsMzE0IG11bHRpcGx5IDc5NTUxLjUwMTQgLTUzOC4xODYyMjkgLT4gLTQyODEzNTIyLjUgSW5leGFjdCBSb3VuZGVkCit4cG93MzE0IHBvd2VyIDc5NTUxLjUwMTQgLTUzOCAtPiAyLjgyNTk5Mzg5RS0yNjM3IEluZXhhY3QgUm91bmRlZAoreHJlbTMxNCByZW1haW5kZXIgNzk1NTEuNTAxNCAtNTM4LjE4NjIyOSAtPiA0MzguMTI1NzM3Cit4c3ViMzE0IHN1YnRyYWN0IDc5NTUxLjUwMTQgLTUzOC4xODYyMjkgLT4gODAwODkuNjg3NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMTUgYWRkIDQyNzA2MDU2LkUrNjIzNTc4MjkyIC02OTAuMzI3NzQ1IC0+IDQuMjcwNjA1NjBFKzYyMzU3ODI5OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMTUgY29tcGFyZSA0MjcwNjA1Ni5FKzYyMzU3ODI5MiAtNjkwLjMyNzc0NSAtPiAxCit4ZGl2MzE1IGRpdmlkZSA0MjcwNjA1Ni5FKzYyMzU3ODI5MiAtNjkwLjMyNzc0NSAtPiAtNi4xODYzNDUwMUUrNjIzNTc4Mjk2IEluZXhhY3QgUm91bmRlZAoreGR2aTMxNSBkaXZpZGVpbnQgNDI3MDYwNTYuRSs2MjM1NzgyOTIgLTY5MC4zMjc3NDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMTUgbXVsdGlwbHkgNDI3MDYwNTYuRSs2MjM1NzgyOTIgLTY5MC4zMjc3NDUgLT4gLTIuOTQ4MTE3NTNFKzYyMzU3ODMwMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMTUgcG93ZXIgNDI3MDYwNTYuRSs2MjM1NzgyOTIgLTY5MCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zMTUgcmVtYWluZGVyIDQyNzA2MDU2LkUrNjIzNTc4MjkyIC02OTAuMzI3NzQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzE1IHN1YnRyYWN0IDQyNzA2MDU2LkUrNjIzNTc4MjkyIC02OTAuMzI3NzQ1IC0+IDQuMjcwNjA1NjBFKzYyMzU3ODI5OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMTYgYWRkIDI0NTQxMzYuMDhFKzUwMjM3NDA3NyA4NTYyNjguNzk1RS0zNTY2NjQ5MzQgLT4gMi40NTQxMzYwOEUrNTAyMzc0MDgzIEluZXhhY3QgUm91bmRlZAoreGNvbTMxNiBjb21wYXJlIDI0NTQxMzYuMDhFKzUwMjM3NDA3NyA4NTYyNjguNzk1RS0zNTY2NjQ5MzQgLT4gMQoreGRpdjMxNiBkaXZpZGUgMjQ1NDEzNi4wOEUrNTAyMzc0MDc3IDg1NjI2OC43OTVFLTM1NjY2NDkzNCAtPiAyLjg2NjA4MTQyRSs4NTkwMzkwMTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzE2IGRpdmlkZWludCAyNDU0MTM2LjA4RSs1MDIzNzQwNzcgODU2MjY4Ljc5NUUtMzU2NjY0OTM0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzE2IG11bHRpcGx5IDI0NTQxMzYuMDhFKzUwMjM3NDA3NyA4NTYyNjguNzk1RS0zNTY2NjQ5MzQgLT4gMi4xMDE0MDAxNEUrMTQ1NzA5MTU1IEluZXhhY3QgUm91bmRlZAoreHBvdzMxNiBwb3dlciAyNDU0MTM2LjA4RSs1MDIzNzQwNzcgOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMTYgcmVtYWluZGVyIDI0NTQxMzYuMDhFKzUwMjM3NDA3NyA4NTYyNjguNzk1RS0zNTY2NjQ5MzQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMTYgc3VidHJhY3QgMjQ1NDEzNi4wOEUrNTAyMzc0MDc3IDg1NjI2OC43OTVFLTM1NjY2NDkzNCAtPiAyLjQ1NDEzNjA4RSs1MDIzNzQwODMgSW5leGFjdCBSb3VuZGVkCit4YWRkMzE3IGFkZCAtMzI2NDIwNC41NCAtNDI3MDQuNTAxIC0+IC0zMzA2OTA5LjA0IEluZXhhY3QgUm91bmRlZAoreGNvbTMxNyBjb21wYXJlIC0zMjY0MjA0LjU0IC00MjcwNC41MDEgLT4gLTEKK3hkaXYzMTcgZGl2aWRlIC0zMjY0MjA0LjU0IC00MjcwNC41MDEgLT4gNzYuNDM3MDE0MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMTcgZGl2aWRlaW50IC0zMjY0MjA0LjU0IC00MjcwNC41MDEgLT4gNzYKK3htdWwzMTcgbXVsdGlwbHkgLTMyNjQyMDQuNTQgLTQyNzA0LjUwMSAtPiAxLjM5Mzk2MjI2RSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMTcgcG93ZXIgLTMyNjQyMDQuNTQgLTQyNzA1IC0+IC0xLjM3MjkzNDEwRS0yNzgxNzEgSW5leGFjdCBSb3VuZGVkCit4cmVtMzE3IHJlbWFpbmRlciAtMzI2NDIwNC41NCAtNDI3MDQuNTAxIC0+IC0xODY2Mi40NjQKK3hzdWIzMTcgc3VidHJhY3QgLTMyNjQyMDQuNTQgLTQyNzA0LjUwMSAtPiAtMzIyMTUwMC4wNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMTggYWRkIDEuMjEyNjU0OTIgNDQxMDIuNjA3MyAtPiA0NDEwMy44MjAwIEluZXhhY3QgUm91bmRlZAoreGNvbTMxOCBjb21wYXJlIDEuMjEyNjU0OTIgNDQxMDIuNjA3MyAtPiAtMQoreGRpdjMxOCBkaXZpZGUgMS4yMTI2NTQ5MiA0NDEwMi42MDczIC0+IDAuMDAwMDI3NDk2MjE4MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMTggZGl2aWRlaW50IDEuMjEyNjU0OTIgNDQxMDIuNjA3MyAtPiAwCit4bXVsMzE4IG11bHRpcGx5IDEuMjEyNjU0OTIgNDQxMDIuNjA3MyAtPiA1MzQ4MS4yNDM3IEluZXhhY3QgUm91bmRlZAoreHBvdzMxOCBwb3dlciAxLjIxMjY1NDkyIDQ0MTAzIC0+IDEuMTU2NjI1NzNFKzM2OTMgSW5leGFjdCBSb3VuZGVkCit4cmVtMzE4IHJlbWFpbmRlciAxLjIxMjY1NDkyIDQ0MTAyLjYwNzMgLT4gMS4yMTI2NTQ5MgoreHN1YjMxOCBzdWJ0cmFjdCAxLjIxMjY1NDkyIDQ0MTAyLjYwNzMgLT4gLTQ0MTAxLjM5NDYgSW5leGFjdCBSb3VuZGVkCit4YWRkMzE5IGFkZCAtMTkuMDU0NzExRSs5NzU1MTQ2NTIgLTIyMTQ0LjA4MjIgLT4gLTEuOTA1NDcxMTBFKzk3NTUxNDY1MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMTkgY29tcGFyZSAtMTkuMDU0NzExRSs5NzU1MTQ2NTIgLTIyMTQ0LjA4MjIgLT4gLTEKK3hkaXYzMTkgZGl2aWRlIC0xOS4wNTQ3MTFFKzk3NTUxNDY1MiAtMjIxNDQuMDgyMiAtPiA4LjYwNDg3NzI5RSs5NzU1MTQ2NDggSW5leGFjdCBSb3VuZGVkCit4ZHZpMzE5IGRpdmlkZWludCAtMTkuMDU0NzExRSs5NzU1MTQ2NTIgLTIyMTQ0LjA4MjIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMTkgbXVsdGlwbHkgLTE5LjA1NDcxMUUrOTc1NTE0NjUyIC0yMjE0NC4wODIyIC0+IDQuMjE5NDkwODdFKzk3NTUxNDY1NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMTkgcG93ZXIgLTE5LjA1NDcxMUUrOTc1NTE0NjUyIC0yMjE0NCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zMTkgcmVtYWluZGVyIC0xOS4wNTQ3MTFFKzk3NTUxNDY1MiAtMjIxNDQuMDgyMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMxOSBzdWJ0cmFjdCAtMTkuMDU0NzExRSs5NzU1MTQ2NTIgLTIyMTQ0LjA4MjIgLT4gLTEuOTA1NDcxMTBFKzk3NTUxNDY1MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMjAgYWRkIDc0NS43ODQ1MiAtMTkyMi4wMDY3MEUrMzc1OTIzMzAyIC0+IC0xLjkyMjAwNjcwRSszNzU5MjMzMDUgSW5leGFjdCBSb3VuZGVkCit4Y29tMzIwIGNvbXBhcmUgNzQ1Ljc4NDUyIC0xOTIyLjAwNjcwRSszNzU5MjMzMDIgLT4gMQoreGRpdjMyMCBkaXZpZGUgNzQ1Ljc4NDUyIC0xOTIyLjAwNjcwRSszNzU5MjMzMDIgLT4gLTMuODgwMjM4OTJFLTM3NTkyMzMwMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMjAgZGl2aWRlaW50IDc0NS43ODQ1MiAtMTkyMi4wMDY3MEUrMzc1OTIzMzAyIC0+IC0wCit4bXVsMzIwIG11bHRpcGx5IDc0NS43ODQ1MiAtMTkyMi4wMDY3MEUrMzc1OTIzMzAyIC0+IC0xLjQzMzQwMjg0RSszNzU5MjMzMDggSW5leGFjdCBSb3VuZGVkCit4cG93MzIwIHBvd2VyIDc0NS43ODQ1MiAtMiAtPiAwLjAwMDAwMTc5NzkzMjA0IEluZXhhY3QgUm91bmRlZAoreHJlbTMyMCByZW1haW5kZXIgNzQ1Ljc4NDUyIC0xOTIyLjAwNjcwRSszNzU5MjMzMDIgLT4gNzQ1Ljc4NDUyCit4c3ViMzIwIHN1YnRyYWN0IDc0NS43ODQ1MiAtMTkyMi4wMDY3MEUrMzc1OTIzMzAyIC0+IDEuOTIyMDA2NzBFKzM3NTkyMzMwNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMjEgYWRkIC05NjM3MTc4MzYgLTgyMzk4OTMwOCAtPiAtMS43ODc3MDcxNEUrOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMjEgY29tcGFyZSAtOTYzNzE3ODM2IC04MjM5ODkzMDggLT4gLTEKK3hkaXYzMjEgZGl2aWRlIC05NjM3MTc4MzYgLTgyMzk4OTMwOCAtPiAxLjE2OTU3NTY2IEluZXhhY3QgUm91bmRlZAoreGR2aTMyMSBkaXZpZGVpbnQgLTk2MzcxNzgzNiAtODIzOTg5MzA4IC0+IDEKK3htdWwzMjEgbXVsdGlwbHkgLTk2MzcxNzgzNiAtODIzOTg5MzA4IC0+IDcuOTQwOTMxOTNFKzE3IEluZXhhY3QgUm91bmRlZAoreHBvdzMyMSBwb3dlciAtOTYzNzE3ODM2IC04MjM5ODkzMDggLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzIxIHJlbWFpbmRlciAtOTYzNzE3ODM2IC04MjM5ODkzMDggLT4gLTEzOTcyODUyOAoreHN1YjMyMSBzdWJ0cmFjdCAtOTYzNzE3ODM2IC04MjM5ODkzMDggLT4gLTEzOTcyODUyOAoreGFkZDMyMiBhZGQgODIuNDE4NTI5MUUtMzIxOTE5MzAzIC0yMTU3NDc3MzcuRS05OTUxNDc0MDAgLT4gOC4yNDE4NTI5MUUtMzIxOTE5MzAyIEluZXhhY3QgUm91bmRlZAoreGNvbTMyMiBjb21wYXJlIDgyLjQxODUyOTFFLTMyMTkxOTMwMyAtMjE1NzQ3NzM3LkUtOTk1MTQ3NDAwIC0+IDEKK3hkaXYzMjIgZGl2aWRlIDgyLjQxODUyOTFFLTMyMTkxOTMwMyAtMjE1NzQ3NzM3LkUtOTk1MTQ3NDAwIC0+IC0zLjgyMDEzNDEyRSs2NzMyMjgwOTAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzIyIGRpdmlkZWludCA4Mi40MTg1MjkxRS0zMjE5MTkzMDMgLTIxNTc0NzczNy5FLTk5NTE0NzQwMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMyMiBtdWx0aXBseSA4Mi40MTg1MjkxRS0zMjE5MTkzMDMgLTIxNTc0NzczNy5FLTk5NTE0NzQwMCAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cG93MzIyIHBvd2VyIDgyLjQxODUyOTFFLTMyMTkxOTMwMyAtMiAtPiAxLjQ3MjE0Mzk2RSs2NDM4Mzg2MDIgSW5leGFjdCBSb3VuZGVkCit4cmVtMzIyIHJlbWFpbmRlciA4Mi40MTg1MjkxRS0zMjE5MTkzMDMgLTIxNTc0NzczNy5FLTk5NTE0NzQwMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMyMiBzdWJ0cmFjdCA4Mi40MTg1MjkxRS0zMjE5MTkzMDMgLTIxNTc0NzczNy5FLTk5NTE0NzQwMCAtPiA4LjI0MTg1MjkxRS0zMjE5MTkzMDIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzIzIGFkZCAtODA4MzI4LjYwN0UtNzkwODEwMzQyIDUzMDc1LjcwODIgLT4gNTMwNzUuNzA4MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMjMgY29tcGFyZSAtODA4MzI4LjYwN0UtNzkwODEwMzQyIDUzMDc1LjcwODIgLT4gLTEKK3hkaXYzMjMgZGl2aWRlIC04MDgzMjguNjA3RS03OTA4MTAzNDIgNTMwNzUuNzA4MiAtPiAtMS41MjI5NzI4MUUtNzkwODEwMzQxIEluZXhhY3QgUm91bmRlZAoreGR2aTMyMyBkaXZpZGVpbnQgLTgwODMyOC42MDdFLTc5MDgxMDM0MiA1MzA3NS43MDgyIC0+IC0wCit4bXVsMzIzIG11bHRpcGx5IC04MDgzMjguNjA3RS03OTA4MTAzNDIgNTMwNzUuNzA4MiAtPiAtNC4yOTAyNjEzM0UtNzkwODEwMzMyIEluZXhhY3QgUm91bmRlZAoreHBvdzMyMyBwb3dlciAtODA4MzI4LjYwN0UtNzkwODEwMzQyIDUzMDc2IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTMyMyByZW1haW5kZXIgLTgwODMyOC42MDdFLTc5MDgxMDM0MiA1MzA3NS43MDgyIC0+IC04LjA4MzI4NjA3RS03OTA4MTAzMzcKK3hzdWIzMjMgc3VidHJhY3QgLTgwODMyOC42MDdFLTc5MDgxMDM0MiA1MzA3NS43MDgyIC0+IC01MzA3NS43MDgyIEluZXhhY3QgUm91bmRlZAoreGFkZDMyNCBhZGQgNzAwNTkyLjcyMCAtNjk4NDg1LjA4NSAtPiAyMTA3LjYzNQoreGNvbTMyNCBjb21wYXJlIDcwMDU5Mi43MjAgLTY5ODQ4NS4wODUgLT4gMQoreGRpdjMyNCBkaXZpZGUgNzAwNTkyLjcyMCAtNjk4NDg1LjA4NSAtPiAtMS4wMDMwMTc0NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMjQgZGl2aWRlaW50IDcwMDU5Mi43MjAgLTY5ODQ4NS4wODUgLT4gLTEKK3htdWwzMjQgbXVsdGlwbHkgNzAwNTkyLjcyMCAtNjk4NDg1LjA4NSAtPiAtNC44OTM1MzU2NkUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MzI0IHBvd2VyIDcwMDU5Mi43MjAgLTY5ODQ4NSAtPiA4LjgzNjkwMDAwRS00MDgyOTcxIEluZXhhY3QgUm91bmRlZAoreHJlbTMyNCByZW1haW5kZXIgNzAwNTkyLjcyMCAtNjk4NDg1LjA4NSAtPiAyMTA3LjYzNQoreHN1YjMyNCBzdWJ0cmFjdCA3MDA1OTIuNzIwIC02OTg0ODUuMDg1IC0+IDEzOTkwNzcuODEgSW5leGFjdCBSb3VuZGVkCit4YWRkMzI1IGFkZCAtODAyNzM5MjguMCA2NjEzNDYuMjM5IC0+IC03OTYxMjU4MS44IEluZXhhY3QgUm91bmRlZAoreGNvbTMyNSBjb21wYXJlIC04MDI3MzkyOC4wIDY2MTM0Ni4yMzkgLT4gLTEKK3hkaXYzMjUgZGl2aWRlIC04MDI3MzkyOC4wIDY2MTM0Ni4yMzkgLT4gLTEyMS4zNzk1NzkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzI1IGRpdmlkZWludCAtODAyNzM5MjguMCA2NjEzNDYuMjM5IC0+IC0xMjEKK3htdWwzMjUgbXVsdGlwbHkgLTgwMjczOTI4LjAgNjYxMzQ2LjIzOSAtPiAtNS4zMDg4ODYwNEUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MzI1IHBvd2VyIC04MDI3MzkyOC4wIDY2MTM0NiAtPiA1LjQ1NjY0ODU2RSs1MjI3NjU4IEluZXhhY3QgUm91bmRlZAoreHJlbTMyNSByZW1haW5kZXIgLTgwMjczOTI4LjAgNjYxMzQ2LjIzOSAtPiAtMjUxMDMzLjA4MQoreHN1YjMyNSBzdWJ0cmFjdCAtODAyNzM5MjguMCA2NjEzNDYuMjM5IC0+IC04MDkzNTI3NC4yIEluZXhhY3QgUm91bmRlZAoreGFkZDMyNiBhZGQgLTI0MDE4MjUxLjBFKzgxOTc4Njc2NCA1OTE0MS45NjAwRS0xNjcxNjUwNjUgLT4gLTIuNDAxODI1MTBFKzgxOTc4Njc3MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMjYgY29tcGFyZSAtMjQwMTgyNTEuMEUrODE5Nzg2NzY0IDU5MTQxLjk2MDBFLTE2NzE2NTA2NSAtPiAtMQoreGRpdjMyNiBkaXZpZGUgLTI0MDE4MjUxLjBFKzgxOTc4Njc2NCA1OTE0MS45NjAwRS0xNjcxNjUwNjUgLT4gLTQuMDYxMTE4NTRFKzk4Njk1MTgzMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMjYgZGl2aWRlaW50IC0yNDAxODI1MS4wRSs4MTk3ODY3NjQgNTkxNDEuOTYwMEUtMTY3MTY1MDY1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzI2IG11bHRpcGx5IC0yNDAxODI1MS4wRSs4MTk3ODY3NjQgNTkxNDEuOTYwMEUtMTY3MTY1MDY1IC0+IC0xLjQyMDQ4NjQ0RSs2NTI2MjE3MTEgSW5leGFjdCBSb3VuZGVkCit4cG93MzI2IHBvd2VyIC0yNDAxODI1MS4wRSs4MTk3ODY3NjQgNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMjYgcmVtYWluZGVyIC0yNDAxODI1MS4wRSs4MTk3ODY3NjQgNTkxNDEuOTYwMEUtMTY3MTY1MDY1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzI2IHN1YnRyYWN0IC0yNDAxODI1MS4wRSs4MTk3ODY3NjQgNTkxNDEuOTYwMEUtMTY3MTY1MDY1IC0+IC0yLjQwMTgyNTEwRSs4MTk3ODY3NzEgSW5leGFjdCBSb3VuZGVkCit4YWRkMzI3IGFkZCAyNTEyOTUzLjMgLTM3NjkxNzAuMzVFLTk5MzYyMTY0NSAtPiAyNTEyOTUzLjMwIEluZXhhY3QgUm91bmRlZAoreGNvbTMyNyBjb21wYXJlIDI1MTI5NTMuMyAtMzc2OTE3MC4zNUUtOTkzNjIxNjQ1IC0+IDEKK3hkaXYzMjcgZGl2aWRlIDI1MTI5NTMuMyAtMzc2OTE3MC4zNUUtOTkzNjIxNjQ1IC0+IC02LjY2NzEyNTgzRSs5OTM2MjE2NDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzI3IGRpdmlkZWludCAyNTEyOTUzLjMgLTM3NjkxNzAuMzVFLTk5MzYyMTY0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMyNyBtdWx0aXBseSAyNTEyOTUzLjMgLTM3NjkxNzAuMzVFLTk5MzYyMTY0NSAtPiAtOS40NzE3NDkwN0UtOTkzNjIxNjMzIEluZXhhY3QgUm91bmRlZAoreHBvdzMyNyBwb3dlciAyNTEyOTUzLjMgLTQgLT4gMi41MDc2MjM0OEUtMjYgSW5leGFjdCBSb3VuZGVkCit4cmVtMzI3IHJlbWFpbmRlciAyNTEyOTUzLjMgLTM3NjkxNzAuMzVFLTk5MzYyMTY0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMyNyBzdWJ0cmFjdCAyNTEyOTUzLjMgLTM3NjkxNzAuMzVFLTk5MzYyMTY0NSAtPiAyNTEyOTUzLjMwIEluZXhhY3QgUm91bmRlZAoreGFkZDMyOCBhZGQgLTY4Mi43OTYzNzAgNzExMzEuMDIyNCAtPiA3MDQ0OC4yMjYwIEluZXhhY3QgUm91bmRlZAoreGNvbTMyOCBjb21wYXJlIC02ODIuNzk2MzcwIDcxMTMxLjAyMjQgLT4gLTEKK3hkaXYzMjggZGl2aWRlIC02ODIuNzk2MzcwIDcxMTMxLjAyMjQgLT4gLTAuMDA5NTk5MTM2MTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzI4IGRpdmlkZWludCAtNjgyLjc5NjM3MCA3MTEzMS4wMjI0IC0+IC0wCit4bXVsMzI4IG11bHRpcGx5IC02ODIuNzk2MzcwIDcxMTMxLjAyMjQgLT4gLTQ4NTY4MDAzLjkgSW5leGFjdCBSb3VuZGVkCit4cG93MzI4IHBvd2VyIC02ODIuNzk2MzcwIDcxMTMxIC0+IC05LjI4MTE0NzQxRSsyMDE2MDUgSW5leGFjdCBSb3VuZGVkCit4cmVtMzI4IHJlbWFpbmRlciAtNjgyLjc5NjM3MCA3MTEzMS4wMjI0IC0+IC02ODIuNzk2MzcwCit4c3ViMzI4IHN1YnRyYWN0IC02ODIuNzk2MzcwIDcxMTMxLjAyMjQgLT4gLTcxODEzLjgxODggSW5leGFjdCBSb3VuZGVkCit4YWRkMzI5IGFkZCA4OS45OTk3NDkwIC00OTkzLjY5ODMxIC0+IC00OTAzLjY5ODU2IEluZXhhY3QgUm91bmRlZAoreGNvbTMyOSBjb21wYXJlIDg5Ljk5OTc0OTAgLTQ5OTMuNjk4MzEgLT4gMQoreGRpdjMyOSBkaXZpZGUgODkuOTk5NzQ5MCAtNDk5My42OTgzMSAtPiAtMC4wMTgwMjI2NjQ0IEluZXhhY3QgUm91bmRlZAoreGR2aTMyOSBkaXZpZGVpbnQgODkuOTk5NzQ5MCAtNDk5My42OTgzMSAtPiAtMAoreG11bDMyOSBtdWx0aXBseSA4OS45OTk3NDkwIC00OTkzLjY5ODMxIC0+IC00NDk0MzEuNTk0IEluZXhhY3QgUm91bmRlZAoreHBvdzMyOSBwb3dlciA4OS45OTk3NDkwIC00OTk0IC0+IDMuMzAzMzY1MjVFLTk3NjAgSW5leGFjdCBSb3VuZGVkCit4cmVtMzI5IHJlbWFpbmRlciA4OS45OTk3NDkwIC00OTkzLjY5ODMxIC0+IDg5Ljk5OTc0OTAKK3hzdWIzMjkgc3VidHJhY3QgODkuOTk5NzQ5MCAtNDk5My42OTgzMSAtPiA1MDgzLjY5ODA2IEluZXhhY3QgUm91bmRlZAoreGFkZDMzMCBhZGQgNzY1NjMzNTQuNkUtMTEyMzM4ODM2IDI3ODI3MS41ODVFLTUxMTQ4MTA5NSAtPiA3LjY1NjMzNTQ2RS0xMTIzMzg4MjkgSW5leGFjdCBSb3VuZGVkCit4Y29tMzMwIGNvbXBhcmUgNzY1NjMzNTQuNkUtMTEyMzM4ODM2IDI3ODI3MS41ODVFLTUxMTQ4MTA5NSAtPiAxCit4ZGl2MzMwIGRpdmlkZSA3NjU2MzM1NC42RS0xMTIzMzg4MzYgMjc4MjcxLjU4NUUtNTExNDgxMDk1IC0+IDIuNzUxMzg5NjBFKzM5OTE0MjI2MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMzAgZGl2aWRlaW50IDc2NTYzMzU0LjZFLTExMjMzODgzNiAyNzgyNzEuNTg1RS01MTE0ODEwOTUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMzAgbXVsdGlwbHkgNzY1NjMzNTQuNkUtMTEyMzM4ODM2IDI3ODI3MS41ODVFLTUxMTQ4MTA5NSAtPiAyLjEzMDU0MDYwRS02MjM4MTk5MTggSW5leGFjdCBSb3VuZGVkCit4cG93MzMwIHBvd2VyIDc2NTYzMzU0LjZFLTExMjMzODgzNiAzIC0+IDQuNDg4MTAzNDdFLTMzNzAxNjQ4NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMzAgcmVtYWluZGVyIDc2NTYzMzU0LjZFLTExMjMzODgzNiAyNzgyNzEuNTg1RS01MTE0ODEwOTUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMzAgc3VidHJhY3QgNzY1NjMzNTQuNkUtMTEyMzM4ODM2IDI3ODI3MS41ODVFLTUxMTQ4MTA5NSAtPiA3LjY1NjMzNTQ2RS0xMTIzMzg4MjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMzMxIGFkZCAtOTMyNDk5LjAxMCA4NzMuMzc3NzAxRS01MDIxOTA0NTIgLT4gLTkzMjQ5OS4wMTAgSW5leGFjdCBSb3VuZGVkCit4Y29tMzMxIGNvbXBhcmUgLTkzMjQ5OS4wMTAgODczLjM3NzcwMUUtNTAyMTkwNDUyIC0+IC0xCit4ZGl2MzMxIGRpdmlkZSAtOTMyNDk5LjAxMCA4NzMuMzc3NzAxRS01MDIxOTA0NTIgLT4gLTEuMDY3NjkyNzJFKzUwMjE5MDQ1NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMzEgZGl2aWRlaW50IC05MzI0OTkuMDEwIDg3My4zNzc3MDFFLTUwMjE5MDQ1MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMzMSBtdWx0aXBseSAtOTMyNDk5LjAxMCA4NzMuMzc3NzAxRS01MDIxOTA0NTIgLT4gLTguMTQ0MjM4NDJFLTUwMjE5MDQ0NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMzEgcG93ZXIgLTkzMjQ5OS4wMTAgOSAtPiAtNS4zMzEzMjgxNUUrNTMgSW5leGFjdCBSb3VuZGVkCit4cmVtMzMxIHJlbWFpbmRlciAtOTMyNDk5LjAxMCA4NzMuMzc3NzAxRS01MDIxOTA0NTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMzEgc3VidHJhY3QgLTkzMjQ5OS4wMTAgODczLjM3NzcwMUUtNTAyMTkwNDUyIC0+IC05MzI0OTkuMDEwIEluZXhhY3QgUm91bmRlZAoreGFkZDMzMiBhZGQgLTc3MzU5MTguMjFFKzc5OTUxNDc5NyAtNzc0OC43ODAyMyAtPiAtNy43MzU5MTgyMUUrNzk5NTE0ODAzIEluZXhhY3QgUm91bmRlZAoreGNvbTMzMiBjb21wYXJlIC03NzM1OTE4LjIxRSs3OTk1MTQ3OTcgLTc3NDguNzgwMjMgLT4gLTEKK3hkaXYzMzIgZGl2aWRlIC03NzM1OTE4LjIxRSs3OTk1MTQ3OTcgLTc3NDguNzgwMjMgLT4gOS45ODM0MDEyM0UrNzk5NTE0Nzk5IEluZXhhY3QgUm91bmRlZAoreGR2aTMzMiBkaXZpZGVpbnQgLTc3MzU5MTguMjFFKzc5OTUxNDc5NyAtNzc0OC43ODAyMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMzMiBtdWx0aXBseSAtNzczNTkxOC4yMUUrNzk5NTE0Nzk3IC03NzQ4Ljc4MDIzIC0+IDUuOTk0MzkzMDFFKzc5OTUxNDgwNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMzIgcG93ZXIgLTc3MzU5MTguMjFFKzc5OTUxNDc5NyAtNzc0OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzMyIHJlbWFpbmRlciAtNzczNTkxOC4yMUUrNzk5NTE0Nzk3IC03NzQ4Ljc4MDIzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzMyIHN1YnRyYWN0IC03NzM1OTE4LjIxRSs3OTk1MTQ3OTcgLTc3NDguNzgwMjMgLT4gLTcuNzM1OTE4MjFFKzc5OTUxNDgwMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMzMgYWRkIC0zNzA4NzgwLjc1RSs0NDUyMzI3ODcgOTgwLjAwNjU2N0UtNzgwNzI4NjIzIC0+IC0zLjcwODc4MDc1RSs0NDUyMzI3OTMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzMzIGNvbXBhcmUgLTM3MDg3ODAuNzVFKzQ0NTIzMjc4NyA5ODAuMDA2NTY3RS03ODA3Mjg2MjMgLT4gLTEKK3hkaXYzMzMgZGl2aWRlIC0zNzA4NzgwLjc1RSs0NDUyMzI3ODcgOTgwLjAwNjU2N0UtNzgwNzI4NjIzIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hkdmkzMzMgZGl2aWRlaW50IC0zNzA4NzgwLjc1RSs0NDUyMzI3ODcgOTgwLjAwNjU2N0UtNzgwNzI4NjIzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzMzIG11bHRpcGx5IC0zNzA4NzgwLjc1RSs0NDUyMzI3ODcgOTgwLjAwNjU2N0UtNzgwNzI4NjIzIC0+IC0zLjYzNDYyOTQ5RS0zMzU0OTU4MjcgSW5leGFjdCBSb3VuZGVkCit4cG93MzMzIHBvd2VyIC0zNzA4NzgwLjc1RSs0NDUyMzI3ODcgMTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzMzIHJlbWFpbmRlciAtMzcwODc4MC43NUUrNDQ1MjMyNzg3IDk4MC4wMDY1NjdFLTc4MDcyODYyMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMzMyBzdWJ0cmFjdCAtMzcwODc4MC43NUUrNDQ1MjMyNzg3IDk4MC4wMDY1NjdFLTc4MDcyODYyMyAtPiAtMy43MDg3ODA3NUUrNDQ1MjMyNzkzIEluZXhhY3QgUm91bmRlZAoreGFkZDMzNCBhZGQgLTUyMDUxMjQuNDRFLTE0MDU4ODY2MSAtNDk1Mzk0MDI5LkUtNjIwODU2MzEzIC0+IC01LjIwNTEyNDQ0RS0xNDA1ODg2NTUgSW5leGFjdCBSb3VuZGVkCit4Y29tMzM0IGNvbXBhcmUgLTUyMDUxMjQuNDRFLTE0MDU4ODY2MSAtNDk1Mzk0MDI5LkUtNjIwODU2MzEzIC0+IC0xCit4ZGl2MzM0IGRpdmlkZSAtNTIwNTEyNC40NEUtMTQwNTg4NjYxIC00OTUzOTQwMjkuRS02MjA4NTYzMTMgLT4gMS4wNTA3MDM5MUUrNDgwMjY3NjUwIEluZXhhY3QgUm91bmRlZAoreGR2aTMzNCBkaXZpZGVpbnQgLTUyMDUxMjQuNDRFLTE0MDU4ODY2MSAtNDk1Mzk0MDI5LkUtNjIwODU2MzEzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzM0IG11bHRpcGx5IC01MjA1MTI0LjQ0RS0xNDA1ODg2NjEgLTQ5NTM5NDAyOS5FLTYyMDg1NjMxMyAtPiAyLjU3ODU4NzU3RS03NjE0NDQ5NTkgSW5leGFjdCBSb3VuZGVkCit4cG93MzM0IHBvd2VyIC01MjA1MTI0LjQ0RS0xNDA1ODg2NjEgLTUgLT4gLTIuNjE3MjQ1MjNFKzcwMjk0MzI3MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMzQgcmVtYWluZGVyIC01MjA1MTI0LjQ0RS0xNDA1ODg2NjEgLTQ5NTM5NDAyOS5FLTYyMDg1NjMxMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMzNCBzdWJ0cmFjdCAtNTIwNTEyNC40NEUtMTQwNTg4NjYxIC00OTUzOTQwMjkuRS02MjA4NTYzMTMgLT4gLTUuMjA1MTI0NDRFLTE0MDU4ODY1NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMzUgYWRkIC04ODY4LjcyMDc0IDU1OTIzOTkuOTMgLT4gNTU4MzUzMS4yMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMzUgY29tcGFyZSAtODg2OC43MjA3NCA1NTkyMzk5LjkzIC0+IC0xCit4ZGl2MzM1IGRpdmlkZSAtODg2OC43MjA3NCA1NTkyMzk5LjkzIC0+IC0wLjAwMTU4NTg1MjM4IEluZXhhY3QgUm91bmRlZAoreGR2aTMzNSBkaXZpZGVpbnQgLTg4NjguNzIwNzQgNTU5MjM5OS45MyAtPiAtMAoreG11bDMzNSBtdWx0aXBseSAtODg2OC43MjA3NCA1NTkyMzk5LjkzIC0+IC00Ljk1OTc0MzMyRSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMzUgcG93ZXIgLTg4NjguNzIwNzQgNTU5MjQwMCAtPiA1LjU1MDc0MTQyRSsyMjA3ODAxNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMzUgcmVtYWluZGVyIC04ODY4LjcyMDc0IDU1OTIzOTkuOTMgLT4gLTg4NjguNzIwNzQKK3hzdWIzMzUgc3VidHJhY3QgLTg4NjguNzIwNzQgNTU5MjM5OS45MyAtPiAtNTYwMTI2OC42NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMzYgYWRkIC03NC43ODUyMDM3RS0xNzUyMDU4MDkgNC4xNDMxNjU0MiAtPiA0LjE0MzE2NTQyIEluZXhhY3QgUm91bmRlZAoreGNvbTMzNiBjb21wYXJlIC03NC43ODUyMDM3RS0xNzUyMDU4MDkgNC4xNDMxNjU0MiAtPiAtMQoreGRpdjMzNiBkaXZpZGUgLTc0Ljc4NTIwMzdFLTE3NTIwNTgwOSA0LjE0MzE2NTQyIC0+IC0xLjgwNTAyNTc3RS0xNzUyMDU4MDggSW5leGFjdCBSb3VuZGVkCit4ZHZpMzM2IGRpdmlkZWludCAtNzQuNzg1MjAzN0UtMTc1MjA1ODA5IDQuMTQzMTY1NDIgLT4gLTAKK3htdWwzMzYgbXVsdGlwbHkgLTc0Ljc4NTIwMzdFLTE3NTIwNTgwOSA0LjE0MzE2NTQyIC0+IC0zLjA5ODQ3NDcwRS0xNzUyMDU4MDcgSW5leGFjdCBSb3VuZGVkCit4cG93MzM2IHBvd2VyIC03NC43ODUyMDM3RS0xNzUyMDU4MDkgNCAtPiAzLjEyNzk3MTA0RS03MDA4MjMyMjkgSW5leGFjdCBSb3VuZGVkCit4cmVtMzM2IHJlbWFpbmRlciAtNzQuNzg1MjAzN0UtMTc1MjA1ODA5IDQuMTQzMTY1NDIgLT4gLTcuNDc4NTIwMzdFLTE3NTIwNTgwOAoreHN1YjMzNiBzdWJ0cmFjdCAtNzQuNzg1MjAzN0UtMTc1MjA1ODA5IDQuMTQzMTY1NDIgLT4gLTQuMTQzMTY1NDIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzM3IGFkZCA4NDE5Ni4xMDkxRSsyNDI2Mjg3NDggOC4wNzUyMzAzNkUtMjg4MjMxNDY3IC0+IDguNDE5NjEwOTFFKzI0MjYyODc1MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMzcgY29tcGFyZSA4NDE5Ni4xMDkxRSsyNDI2Mjg3NDggOC4wNzUyMzAzNkUtMjg4MjMxNDY3IC0+IDEKK3hkaXYzMzcgZGl2aWRlIDg0MTk2LjEwOTFFKzI0MjYyODc0OCA4LjA3NTIzMDM2RS0yODgyMzE0NjcgLT4gMS4wNDI2NDY1M0UrNTMwODYwMjE5IEluZXhhY3QgUm91bmRlZAoreGR2aTMzNyBkaXZpZGVpbnQgODQxOTYuMTA5MUUrMjQyNjI4NzQ4IDguMDc1MjMwMzZFLTI4ODIzMTQ2NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMzNyBtdWx0aXBseSA4NDE5Ni4xMDkxRSsyNDI2Mjg3NDggOC4wNzUyMzAzNkUtMjg4MjMxNDY3IC0+IDYuNzk5MDI5NzZFLTQ1NjAyNzE0IEluZXhhY3QgUm91bmRlZAoreHBvdzMzNyBwb3dlciA4NDE5Ni4xMDkxRSsyNDI2Mjg3NDggOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMzcgcmVtYWluZGVyIDg0MTk2LjEwOTFFKzI0MjYyODc0OCA4LjA3NTIzMDM2RS0yODgyMzE0NjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMzcgc3VidHJhY3QgODQxOTYuMTA5MUUrMjQyNjI4NzQ4IDguMDc1MjMwMzZFLTI4ODIzMTQ2NyAtPiA4LjQxOTYxMDkxRSsyNDI2Mjg3NTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzM4IGFkZCAzODY2MDEwMy4xIC02NjcxLjczMDg1RSs5MDA5OTg0NzcgLT4gLTYuNjcxNzMwODVFKzkwMDk5ODQ4MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMzggY29tcGFyZSAzODY2MDEwMy4xIC02NjcxLjczMDg1RSs5MDA5OTg0NzcgLT4gMQoreGRpdjMzOCBkaXZpZGUgMzg2NjAxMDMuMSAtNjY3MS43MzA4NUUrOTAwOTk4NDc3IC0+IC01Ljc5NDYxMzcyRS05MDA5OTg0NzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzM4IGRpdmlkZWludCAzODY2MDEwMy4xIC02NjcxLjczMDg1RSs5MDA5OTg0NzcgLT4gLTAKK3htdWwzMzggbXVsdGlwbHkgMzg2NjAxMDMuMSAtNjY3MS43MzA4NUUrOTAwOTk4NDc3IC0+IC0yLjU3OTI5ODAzRSs5MDA5OTg0ODggSW5leGFjdCBSb3VuZGVkCit4cG93MzM4IHBvd2VyIDM4NjYwMTAzLjEgLTcgLT4gNy43NDc0NTI5MEUtNTQgSW5leGFjdCBSb3VuZGVkCit4cmVtMzM4IHJlbWFpbmRlciAzODY2MDEwMy4xIC02NjcxLjczMDg1RSs5MDA5OTg0NzcgLT4gMzg2NjAxMDMuMQoreHN1YjMzOCBzdWJ0cmFjdCAzODY2MDEwMy4xIC02NjcxLjczMDg1RSs5MDA5OTg0NzcgLT4gNi42NzE3MzA4NUUrOTAwOTk4NDgwIEluZXhhY3QgUm91bmRlZAoreGFkZDMzOSBhZGQgLTUyLjI2NTk0NjAgLTI5NjQwNDE5OUUrMzcyMDUwNDc2IC0+IC0yLjk2NDA0MTk5RSszNzIwNTA0ODQgSW5leGFjdCBSb3VuZGVkCit4Y29tMzM5IGNvbXBhcmUgLTUyLjI2NTk0NjAgLTI5NjQwNDE5OUUrMzcyMDUwNDc2IC0+IDEKK3hkaXYzMzkgZGl2aWRlIC01Mi4yNjU5NDYwIC0yOTY0MDQxOTlFKzM3MjA1MDQ3NiAtPiAxLjc2MzMzMzUyRS0zNzIwNTA0ODMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzM5IGRpdmlkZWludCAtNTIuMjY1OTQ2MCAtMjk2NDA0MTk5RSszNzIwNTA0NzYgLT4gMAoreG11bDMzOSBtdWx0aXBseSAtNTIuMjY1OTQ2MCAtMjk2NDA0MTk5RSszNzIwNTA0NzYgLT4gMS41NDkxODQ1OUUrMzcyMDUwNDg2IEluZXhhY3QgUm91bmRlZAoreHBvdzMzOSBwb3dlciAtNTIuMjY1OTQ2MCAtMyAtPiAtMC4wMDAwMDcwMDM5NTgzMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMzkgcmVtYWluZGVyIC01Mi4yNjU5NDYwIC0yOTY0MDQxOTlFKzM3MjA1MDQ3NiAtPiAtNTIuMjY1OTQ2MAoreHN1YjMzOSBzdWJ0cmFjdCAtNTIuMjY1OTQ2MCAtMjk2NDA0MTk5RSszNzIwNTA0NzYgLT4gMi45NjQwNDE5OUUrMzcyMDUwNDg0IEluZXhhY3QgUm91bmRlZAoreGFkZDM0MCBhZGQgNi4wNjYyNTAxMyAtMjc2LjM1OTE4NiAtPiAtMjcwLjI5MjkzNiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNDAgY29tcGFyZSA2LjA2NjI1MDEzIC0yNzYuMzU5MTg2IC0+IDEKK3hkaXYzNDAgZGl2aWRlIDYuMDY2MjUwMTMgLTI3Ni4zNTkxODYgLT4gLTAuMDIxOTUwNjAwNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNDAgZGl2aWRlaW50IDYuMDY2MjUwMTMgLTI3Ni4zNTkxODYgLT4gLTAKK3htdWwzNDAgbXVsdGlwbHkgNi4wNjYyNTAxMyAtMjc2LjM1OTE4NiAtPiAtMTY3Ni40NjM5NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNDAgcG93ZXIgNi4wNjYyNTAxMyAtMjc2IC0+IDguMjAzMzkxNDlFLTIxNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNDAgcmVtYWluZGVyIDYuMDY2MjUwMTMgLTI3Ni4zNTkxODYgLT4gNi4wNjYyNTAxMworeHN1YjM0MCBzdWJ0cmFjdCA2LjA2NjI1MDEzIC0yNzYuMzU5MTg2IC0+IDI4Mi40MjU0MzYgSW5leGFjdCBSb3VuZGVkCit4YWRkMzQxIGFkZCAtNjI5NzE2MTcuNUUtMjQxNDQ0NzQ0IDQ2MjY2Nzk5LjMgLT4gNDYyNjY3OTkuMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNDEgY29tcGFyZSAtNjI5NzE2MTcuNUUtMjQxNDQ0NzQ0IDQ2MjY2Nzk5LjMgLT4gLTEKK3hkaXYzNDEgZGl2aWRlIC02Mjk3MTYxNy41RS0yNDE0NDQ3NDQgNDYyNjY3OTkuMyAtPiAtMS4zNjEwNTQxMUUtMjQxNDQ0NzQ0IEluZXhhY3QgUm91bmRlZAoreGR2aTM0MSBkaXZpZGVpbnQgLTYyOTcxNjE3LjVFLTI0MTQ0NDc0NCA0NjI2Njc5OS4zIC0+IC0wCit4bXVsMzQxIG11bHRpcGx5IC02Mjk3MTYxNy41RS0yNDE0NDQ3NDQgNDYyNjY3OTkuMyAtPiAtMi45MTM0OTUxOUUtMjQxNDQ0NzI5IEluZXhhY3QgUm91bmRlZAoreHBvdzM0MSBwb3dlciAtNjI5NzE2MTcuNUUtMjQxNDQ0NzQ0IDQ2MjY2Nzk5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zNDEgcmVtYWluZGVyIC02Mjk3MTYxNy41RS0yNDE0NDQ3NDQgNDYyNjY3OTkuMyAtPiAtNi4yOTcxNjE3NUUtMjQxNDQ0NzM3Cit4c3ViMzQxIHN1YnRyYWN0IC02Mjk3MTYxNy41RS0yNDE0NDQ3NDQgNDYyNjY3OTkuMyAtPiAtNDYyNjY3OTkuMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNDIgYWRkIC01LjM2OTE3ODAwIC0zMTExMjQ1OTMuRS05NzYwNjY0OTEgLT4gLTUuMzY5MTc4MDAgSW5leGFjdCBSb3VuZGVkCit4Y29tMzQyIGNvbXBhcmUgLTUuMzY5MTc4MDAgLTMxMTEyNDU5My5FLTk3NjA2NjQ5MSAtPiAtMQoreGRpdjM0MiBkaXZpZGUgLTUuMzY5MTc4MDAgLTMxMTEyNDU5My5FLTk3NjA2NjQ5MSAtPiAxLjcyNTczMjQzRSs5NzYwNjY0ODMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzQyIGRpdmlkZWludCAtNS4zNjkxNzgwMCAtMzExMTI0NTkzLkUtOTc2MDY2NDkxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzQyIG11bHRpcGx5IC01LjM2OTE3ODAwIC0zMTExMjQ1OTMuRS05NzYwNjY0OTEgLT4gMS42NzA0ODMzMkUtOTc2MDY2NDgyIEluZXhhY3QgUm91bmRlZAoreHBvdzM0MiBwb3dlciAtNS4zNjkxNzgwMCAtMyAtPiAtMC4wMDY0NjA2NTU2NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNDIgcmVtYWluZGVyIC01LjM2OTE3ODAwIC0zMTExMjQ1OTMuRS05NzYwNjY0OTEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNDIgc3VidHJhY3QgLTUuMzY5MTc4MDAgLTMxMTEyNDU5My5FLTk3NjA2NjQ5MSAtPiAtNS4zNjkxNzgwMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNDMgYWRkIDI0Njc5MTUuMDEgLTkyLjU1NTgzMjIgLT4gMjQ2NzgyMi40NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNDMgY29tcGFyZSAyNDY3OTE1LjAxIC05Mi41NTU4MzIyIC0+IDEKK3hkaXYzNDMgZGl2aWRlIDI0Njc5MTUuMDEgLTkyLjU1NTgzMjIgLT4gLTI2NjY0LjA2ODEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzQzIGRpdmlkZWludCAyNDY3OTE1LjAxIC05Mi41NTU4MzIyIC0+IC0yNjY2NAoreG11bDM0MyBtdWx0aXBseSAyNDY3OTE1LjAxIC05Mi41NTU4MzIyIC0+IC0yMjg0MTk5MjggSW5leGFjdCBSb3VuZGVkCit4cG93MzQzIHBvd2VyIDI0Njc5MTUuMDEgLTkzIC0+IDMuMjYwNTU0NDRFLTU5NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNDMgcmVtYWluZGVyIDI0Njc5MTUuMDEgLTkyLjU1NTgzMjIgLT4gNi4zMDAyMTkyCit4c3ViMzQzIHN1YnRyYWN0IDI0Njc5MTUuMDEgLTkyLjU1NTgzMjIgLT4gMjQ2ODAwNy41NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNDQgYWRkIDE4Ny4yMzI2NzEgLTg0MC40NjkzNDcgLT4gLTY1My4yMzY2NzYKK3hjb20zNDQgY29tcGFyZSAxODcuMjMyNjcxIC04NDAuNDY5MzQ3IC0+IDEKK3hkaXYzNDQgZGl2aWRlIDE4Ny4yMzI2NzEgLTg0MC40NjkzNDcgLT4gLTAuMjIyNzcxNTY0IEluZXhhY3QgUm91bmRlZAoreGR2aTM0NCBkaXZpZGVpbnQgMTg3LjIzMjY3MSAtODQwLjQ2OTM0NyAtPiAtMAoreG11bDM0NCBtdWx0aXBseSAxODcuMjMyNjcxIC04NDAuNDY5MzQ3IC0+IC0xNTczNjMuMzIxIEluZXhhY3QgUm91bmRlZAoreHBvdzM0NCBwb3dlciAxODcuMjMyNjcxIC04NDAgLT4gMS41ODI4MDg2MkUtMTkwOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNDQgcmVtYWluZGVyIDE4Ny4yMzI2NzEgLTg0MC40NjkzNDcgLT4gMTg3LjIzMjY3MQoreHN1YjM0NCBzdWJ0cmFjdCAxODcuMjMyNjcxIC04NDAuNDY5MzQ3IC0+IDEwMjcuNzAyMDIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzQ1IGFkZCA4MTIzMy42ODIzIC01MTkyLjIxNjY2RSszMDkzMTUwOTMgLT4gLTUuMTkyMjE2NjZFKzMwOTMxNTA5NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNDUgY29tcGFyZSA4MTIzMy42ODIzIC01MTkyLjIxNjY2RSszMDkzMTUwOTMgLT4gMQoreGRpdjM0NSBkaXZpZGUgODEyMzMuNjgyMyAtNTE5Mi4yMTY2NkUrMzA5MzE1MDkzIC0+IC0xLjU2NDUyNzk4RS0zMDkzMTUwOTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzQ1IGRpdmlkZWludCA4MTIzMy42ODIzIC01MTkyLjIxNjY2RSszMDkzMTUwOTMgLT4gLTAKK3htdWwzNDUgbXVsdGlwbHkgODEyMzMuNjgyMyAtNTE5Mi4yMTY2NkUrMzA5MzE1MDkzIC0+IC00LjIxNzgyODc5RSszMDkzMTUxMDEgSW5leGFjdCBSb3VuZGVkCit4cG93MzQ1IHBvd2VyIDgxMjMzLjY4MjMgLTUgLT4gMi44MjY5NTc2M0UtMjUgSW5leGFjdCBSb3VuZGVkCit4cmVtMzQ1IHJlbWFpbmRlciA4MTIzMy42ODIzIC01MTkyLjIxNjY2RSszMDkzMTUwOTMgLT4gODEyMzMuNjgyMworeHN1YjM0NSBzdWJ0cmFjdCA4MTIzMy42ODIzIC01MTkyLjIxNjY2RSszMDkzMTUwOTMgLT4gNS4xOTIyMTY2NkUrMzA5MzE1MDk2IEluZXhhY3QgUm91bmRlZAoreGFkZDM0NiBhZGQgLTg1NC41ODYxMTMgLTc5Ljg3MTU3NjJFLTg1MzA2NTEwMyAtPiAtODU0LjU4NjExMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNDYgY29tcGFyZSAtODU0LjU4NjExMyAtNzkuODcxNTc2MkUtODUzMDY1MTAzIC0+IC0xCit4ZGl2MzQ2IGRpdmlkZSAtODU0LjU4NjExMyAtNzkuODcxNTc2MkUtODUzMDY1MTAzIC0+IDEuMDY5OTUwMjNFKzg1MzA2NTEwNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNDYgZGl2aWRlaW50IC04NTQuNTg2MTEzIC03OS44NzE1NzYyRS04NTMwNjUxMDMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzNDYgbXVsdGlwbHkgLTg1NC41ODYxMTMgLTc5Ljg3MTU3NjJFLTg1MzA2NTEwMyAtPiA2LjgyNTcxMzk4RS04NTMwNjUwOTkgSW5leGFjdCBSb3VuZGVkCit4cG93MzQ2IHBvd2VyIC04NTQuNTg2MTEzIC04IC0+IDMuNTE1MjI2NzlFLTI0IEluZXhhY3QgUm91bmRlZAoreHJlbTM0NiByZW1haW5kZXIgLTg1NC41ODYxMTMgLTc5Ljg3MTU3NjJFLTg1MzA2NTEwMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjM0NiBzdWJ0cmFjdCAtODU0LjU4NjExMyAtNzkuODcxNTc2MkUtODUzMDY1MTAzIC0+IC04NTQuNTg2MTEzIEluZXhhY3QgUm91bmRlZAoreGFkZDM0NyBhZGQgNzg4NzI2NjUuMyAxNzIuMTAyMTE5IC0+IDc4ODcyODM3LjQgSW5leGFjdCBSb3VuZGVkCit4Y29tMzQ3IGNvbXBhcmUgNzg4NzI2NjUuMyAxNzIuMTAyMTE5IC0+IDEKK3hkaXYzNDcgZGl2aWRlIDc4ODcyNjY1LjMgMTcyLjEwMjExOSAtPiA0NTgyODkuOTE0IEluZXhhY3QgUm91bmRlZAoreGR2aTM0NyBkaXZpZGVpbnQgNzg4NzI2NjUuMyAxNzIuMTAyMTE5IC0+IDQ1ODI4OQoreG11bDM0NyBtdWx0aXBseSA3ODg3MjY2NS4zIDE3Mi4xMDIxMTkgLT4gMS4zNTc0MTUyOEUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MzQ3IHBvd2VyIDc4ODcyNjY1LjMgMTcyIC0+IDEuODY3OTMxMzdFKzEzNTggSW5leGFjdCBSb3VuZGVkCit4cmVtMzQ3IHJlbWFpbmRlciA3ODg3MjY2NS4zIDE3Mi4xMDIxMTkgLT4gMTU3LjI4NTYwOQoreHN1YjM0NyBzdWJ0cmFjdCA3ODg3MjY2NS4zIDE3Mi4xMDIxMTkgLT4gNzg4NzI0OTMuMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNDggYWRkIDMyODI2OC4xRS00MzYzMTU2MTcgLTIwNC41MjIyNDUgLT4gLTIwNC41MjIyNDUgSW5leGFjdCBSb3VuZGVkCit4Y29tMzQ4IGNvbXBhcmUgMzI4MjY4LjFFLTQzNjMxNTYxNyAtMjA0LjUyMjI0NSAtPiAxCit4ZGl2MzQ4IGRpdmlkZSAzMjgyNjguMUUtNDM2MzE1NjE3IC0yMDQuNTIyMjQ1IC0+IC0xLjYwNTA0ODM5RS00MzYzMTU2MTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzQ4IGRpdmlkZWludCAzMjgyNjguMUUtNDM2MzE1NjE3IC0yMDQuNTIyMjQ1IC0+IC0wCit4bXVsMzQ4IG11bHRpcGx5IDMyODI2OC4xRS00MzYzMTU2MTcgLTIwNC41MjIyNDUgLT4gLTYuNzEzODEyODhFLTQzNjMxNTYxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNDggcG93ZXIgMzI4MjY4LjFFLTQzNjMxNTYxNyAtMjA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTM0OCByZW1haW5kZXIgMzI4MjY4LjFFLTQzNjMxNTYxNyAtMjA0LjUyMjI0NSAtPiAzLjI4MjY4MUUtNDM2MzE1NjEyCit4c3ViMzQ4IHN1YnRyYWN0IDMyODI2OC4xRS00MzYzMTU2MTcgLTIwNC41MjIyNDUgLT4gMjA0LjUyMjI0NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNDkgYWRkIC00MDM3OTExLjAyRSs2NDEzNjc2NDUgMjkuNTcxMzAxMCAtPiAtNC4wMzc5MTEwMkUrNjQxMzY3NjUxIEluZXhhY3QgUm91bmRlZAoreGNvbTM0OSBjb21wYXJlIC00MDM3OTExLjAyRSs2NDEzNjc2NDUgMjkuNTcxMzAxMCAtPiAtMQoreGRpdjM0OSBkaXZpZGUgLTQwMzc5MTEuMDJFKzY0MTM2NzY0NSAyOS41NzEzMDEwIC0+IC0xLjM2NTQ4MzA1RSs2NDEzNjc2NTAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzQ5IGRpdmlkZWludCAtNDAzNzkxMS4wMkUrNjQxMzY3NjQ1IDI5LjU3MTMwMTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzNDkgbXVsdGlwbHkgLTQwMzc5MTEuMDJFKzY0MTM2NzY0NSAyOS41NzEzMDEwIC0+IC0xLjE5NDA2MjgyRSs2NDEzNjc2NTMgSW5leGFjdCBSb3VuZGVkCit4cG93MzQ5IHBvd2VyIC00MDM3OTExLjAyRSs2NDEzNjc2NDUgMzAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzQ5IHJlbWFpbmRlciAtNDAzNzkxMS4wMkUrNjQxMzY3NjQ1IDI5LjU3MTMwMTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNDkgc3VidHJhY3QgLTQwMzc5MTEuMDJFKzY0MTM2NzY0NSAyOS41NzEzMDEwIC0+IC00LjAzNzkxMTAyRSs2NDEzNjc2NTEgSW5leGFjdCBSb3VuZGVkCit4YWRkMzUwIGFkZCAtNjg4NzU1NTYxLkUtOTUzMDE2OTkgOTc4LjI3NTMxMkUrOTEzODEyNjA5IC0+IDkuNzgyNzUzMTJFKzkxMzgxMjYxMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNTAgY29tcGFyZSAtNjg4NzU1NTYxLkUtOTUzMDE2OTkgOTc4LjI3NTMxMkUrOTEzODEyNjA5IC0+IC0xCit4ZGl2MzUwIGRpdmlkZSAtNjg4NzU1NTYxLkUtOTUzMDE2OTkgOTc4LjI3NTMxMkUrOTEzODEyNjA5IC0+IC0wRS0xMDAwMDAwMDA3IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKK3hkdmkzNTAgZGl2aWRlaW50IC02ODg3NTU1NjEuRS05NTMwMTY5OSA5NzguMjc1MzEyRSs5MTM4MTI2MDkgLT4gLTAKK3htdWwzNTAgbXVsdGlwbHkgLTY4ODc1NTU2MS5FLTk1MzAxNjk5IDk3OC4yNzUzMTJFKzkxMzgxMjYwOSAtPiAtNi43Mzc5MjU2MUUrODE4NTEwOTIxIEluZXhhY3QgUm91bmRlZAoreHBvdzM1MCBwb3dlciAtNjg4NzU1NTYxLkUtOTUzMDE2OTkgMTAgLT4gMi40MDI0MzI0NEUtOTUzMDE2OTAyIEluZXhhY3QgUm91bmRlZAoreHJlbTM1MCByZW1haW5kZXIgLTY4ODc1NTU2MS5FLTk1MzAxNjk5IDk3OC4yNzUzMTJFKzkxMzgxMjYwOSAtPiAtNi44ODc1NTU2MUUtOTUzMDE2OTEKK3hzdWIzNTAgc3VidHJhY3QgLTY4ODc1NTU2MS5FLTk1MzAxNjk5IDk3OC4yNzUzMTJFKzkxMzgxMjYwOSAtPiAtOS43ODI3NTMxMkUrOTEzODEyNjExIEluZXhhY3QgUm91bmRlZAoreGFkZDM1MSBhZGQgLTUuNDczNDU1MDIgNTk4MTguNzU4MCAtPiA1OTgxMy4yODQ1IEluZXhhY3QgUm91bmRlZAoreGNvbTM1MSBjb21wYXJlIC01LjQ3MzQ1NTAyIDU5ODE4Ljc1ODAgLT4gLTEKK3hkaXYzNTEgZGl2aWRlIC01LjQ3MzQ1NTAyIDU5ODE4Ljc1ODAgLT4gLTAuMDAwMDkxNTAwNjQ2MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNTEgZGl2aWRlaW50IC01LjQ3MzQ1NTAyIDU5ODE4Ljc1ODAgLT4gLTAKK3htdWwzNTEgbXVsdGlwbHkgLTUuNDczNDU1MDIgNTk4MTguNzU4MCAtPiAtMzI3NDE1LjI4MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNTEgcG93ZXIgLTUuNDczNDU1MDIgNTk4MTkgLT4gLTEuMTY5MTQxNDZFKzQ0MTYyIEluZXhhY3QgUm91bmRlZAoreHJlbTM1MSByZW1haW5kZXIgLTUuNDczNDU1MDIgNTk4MTguNzU4MCAtPiAtNS40NzM0NTUwMgoreHN1YjM1MSBzdWJ0cmFjdCAtNS40NzM0NTUwMiA1OTgxOC43NTgwIC0+IC01OTgyNC4yMzE1IEluZXhhY3QgUm91bmRlZAoreGFkZDM1MiBhZGQgNTYzODkxNjIwRS0zNjEzNTQ1NjcgLTg0NTkwMDM2Mi4gLT4gLTg0NTkwMDM2MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNTIgY29tcGFyZSA1NjM4OTE2MjBFLTM2MTM1NDU2NyAtODQ1OTAwMzYyLiAtPiAxCit4ZGl2MzUyIGRpdmlkZSA1NjM4OTE2MjBFLTM2MTM1NDU2NyAtODQ1OTAwMzYyLiAtPiAtNi42NjYxNzA2OUUtMzYxMzU0NTY4IEluZXhhY3QgUm91bmRlZAoreGR2aTM1MiBkaXZpZGVpbnQgNTYzODkxNjIwRS0zNjEzNTQ1NjcgLTg0NTkwMDM2Mi4gLT4gLTAKK3htdWwzNTIgbXVsdGlwbHkgNTYzODkxNjIwRS0zNjEzNTQ1NjcgLTg0NTkwMDM2Mi4gLT4gLTQuNzY5OTYxMjVFLTM2MTM1NDU1MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNTIgcG93ZXIgNTYzODkxNjIwRS0zNjEzNTQ1NjcgLTg0NTkwMDM2MiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNTIgcmVtYWluZGVyIDU2Mzg5MTYyMEUtMzYxMzU0NTY3IC04NDU5MDAzNjIuIC0+IDUuNjM4OTE2MjBFLTM2MTM1NDU1OQoreHN1YjM1MiBzdWJ0cmFjdCA1NjM4OTE2MjBFLTM2MTM1NDU2NyAtODQ1OTAwMzYyLiAtPiA4NDU5MDAzNjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzUzIGFkZCAtNjkuNzIzMTI4NiA4NTc3My43NTA0IC0+IDg1NzA0LjAyNzMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzUzIGNvbXBhcmUgLTY5LjcyMzEyODYgODU3NzMuNzUwNCAtPiAtMQoreGRpdjM1MyBkaXZpZGUgLTY5LjcyMzEyODYgODU3NzMuNzUwNCAtPiAtMC4wMDA4MTI4NzI1NjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzUzIGRpdmlkZWludCAtNjkuNzIzMTI4NiA4NTc3My43NTA0IC0+IC0wCit4bXVsMzUzIG11bHRpcGx5IC02OS43MjMxMjg2IDg1NzczLjc1MDQgLT4gLTU5ODA0MTQuMjMgSW5leGFjdCBSb3VuZGVkCit4cG93MzUzIHBvd2VyIC02OS43MjMxMjg2IDg1Nzc0IC0+IDYuNDE3MTQyNjFFKzE1ODExMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNTMgcmVtYWluZGVyIC02OS43MjMxMjg2IDg1NzczLjc1MDQgLT4gLTY5LjcyMzEyODYKK3hzdWIzNTMgc3VidHJhY3QgLTY5LjcyMzEyODYgODU3NzMuNzUwNCAtPiAtODU4NDMuNDczNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNTQgYWRkIDUxMjUuNTExODggNzM4MTQ2MzguNEUtNTAwOTM0NzQxIC0+IDUxMjUuNTExODggSW5leGFjdCBSb3VuZGVkCit4Y29tMzU0IGNvbXBhcmUgNTEyNS41MTE4OCA3MzgxNDYzOC40RS01MDA5MzQ3NDEgLT4gMQoreGRpdjM1NCBkaXZpZGUgNTEyNS41MTE4OCA3MzgxNDYzOC40RS01MDA5MzQ3NDEgLT4gNi45NDM3NjA3NEUrNTAwOTM0NzM2IEluZXhhY3QgUm91bmRlZAoreGR2aTM1NCBkaXZpZGVpbnQgNTEyNS41MTE4OCA3MzgxNDYzOC40RS01MDA5MzQ3NDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzNTQgbXVsdGlwbHkgNTEyNS41MTE4OCA3MzgxNDYzOC40RS01MDA5MzQ3NDEgLT4gMy43ODMzNzgwNkUtNTAwOTM0NzMwIEluZXhhY3QgUm91bmRlZAoreHBvdzM1NCBwb3dlciA1MTI1LjUxMTg4IDcgLT4gOS4yOTMxMDIxNkUrMjUgSW5leGFjdCBSb3VuZGVkCit4cmVtMzU0IHJlbWFpbmRlciA1MTI1LjUxMTg4IDczODE0NjM4LjRFLTUwMDkzNDc0MSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjM1NCBzdWJ0cmFjdCA1MTI1LjUxMTg4IDczODE0NjM4LjRFLTUwMDkzNDc0MSAtPiA1MTI1LjUxMTg4IEluZXhhY3QgUm91bmRlZAoreGFkZDM1NSBhZGQgLTU0LjYyNTQwOTYgLTMzMjkyMTg5OS4gLT4gLTMzMjkyMTk1NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNTUgY29tcGFyZSAtNTQuNjI1NDA5NiAtMzMyOTIxODk5LiAtPiAxCit4ZGl2MzU1IGRpdmlkZSAtNTQuNjI1NDA5NiAtMzMyOTIxODk5LiAtPiAxLjY0MDc4NzUyRS03IEluZXhhY3QgUm91bmRlZAoreGR2aTM1NSBkaXZpZGVpbnQgLTU0LjYyNTQwOTYgLTMzMjkyMTg5OS4gLT4gMAoreG11bDM1NSBtdWx0aXBseSAtNTQuNjI1NDA5NiAtMzMyOTIxODk5LiAtPiAxLjgxODU5OTUxRSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNTUgcG93ZXIgLTU0LjYyNTQwOTYgLTMzMjkyMTg5OSAtPiAtMS4wMTQ4MjU2OUUtNTc4NDE2NzQ1IEluZXhhY3QgUm91bmRlZAoreHJlbTM1NSByZW1haW5kZXIgLTU0LjYyNTQwOTYgLTMzMjkyMTg5OS4gLT4gLTU0LjYyNTQwOTYKK3hzdWIzNTUgc3VidHJhY3QgLTU0LjYyNTQwOTYgLTMzMjkyMTg5OS4gLT4gMzMyOTIxODQ0IEluZXhhY3QgUm91bmRlZAoreGFkZDM1NiBhZGQgLTkuMDQ3NzgwOTVFLTU5MTg3NDA3OSA4NzE5LjQwMjg2IC0+IDg3MTkuNDAyODYgSW5leGFjdCBSb3VuZGVkCit4Y29tMzU2IGNvbXBhcmUgLTkuMDQ3NzgwOTVFLTU5MTg3NDA3OSA4NzE5LjQwMjg2IC0+IC0xCit4ZGl2MzU2IGRpdmlkZSAtOS4wNDc3ODA5NUUtNTkxODc0MDc5IDg3MTkuNDAyODYgLT4gLTEuMDM3NjYwNjJFLTU5MTg3NDA4MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNTYgZGl2aWRlaW50IC05LjA0Nzc4MDk1RS01OTE4NzQwNzkgODcxOS40MDI4NiAtPiAtMAoreG11bDM1NiBtdWx0aXBseSAtOS4wNDc3ODA5NUUtNTkxODc0MDc5IDg3MTkuNDAyODYgLT4gLTcuODg5MTI0NzFFLTU5MTg3NDA3NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNTYgcG93ZXIgLTkuMDQ3NzgwOTVFLTU5MTg3NDA3OSA4NzE5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zNTYgcmVtYWluZGVyIC05LjA0Nzc4MDk1RS01OTE4NzQwNzkgODcxOS40MDI4NiAtPiAtOS4wNDc3ODA5NUUtNTkxODc0MDc5Cit4c3ViMzU2IHN1YnRyYWN0IC05LjA0Nzc4MDk1RS01OTE4NzQwNzkgODcxOS40MDI4NiAtPiAtODcxOS40MDI4NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNTcgYWRkIC0yMTAwNi4xNzMzRSs4ODQ2ODQ0MzEgLTQ4ODcyLjkxNzUgLT4gLTIuMTAwNjE3MzNFKzg4NDY4NDQzNSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNTcgY29tcGFyZSAtMjEwMDYuMTczM0UrODg0Njg0NDMxIC00ODg3Mi45MTc1IC0+IC0xCit4ZGl2MzU3IGRpdmlkZSAtMjEwMDYuMTczM0UrODg0Njg0NDMxIC00ODg3Mi45MTc1IC0+IDQuMjk4MTIxNDFFKzg4NDY4NDQzMCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNTcgZGl2aWRlaW50IC0yMTAwNi4xNzMzRSs4ODQ2ODQ0MzEgLTQ4ODcyLjkxNzUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzNTcgbXVsdGlwbHkgLTIxMDA2LjE3MzNFKzg4NDY4NDQzMSAtNDg4NzIuOTE3NSAtPiAxLjAyNjYzMjk3RSs4ODQ2ODQ0NDAgSW5leGFjdCBSb3VuZGVkCit4cG93MzU3IHBvd2VyIC0yMTAwNi4xNzMzRSs4ODQ2ODQ0MzEgLTQ4ODczIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zNTcgcmVtYWluZGVyIC0yMTAwNi4xNzMzRSs4ODQ2ODQ0MzEgLTQ4ODcyLjkxNzUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNTcgc3VidHJhY3QgLTIxMDA2LjE3MzNFKzg4NDY4NDQzMSAtNDg4NzIuOTE3NSAtPiAtMi4xMDA2MTczM0UrODg0Njg0NDM1IEluZXhhY3QgUm91bmRlZAoreGFkZDM1OCBhZGQgLTE1NDY3ODMgLTUxOTM1MzcwLjQgLT4gLTUzNDgyMTUzLjQKK3hjb20zNTggY29tcGFyZSAtMTU0Njc4MyAtNTE5MzUzNzAuNCAtPiAxCit4ZGl2MzU4IGRpdmlkZSAtMTU0Njc4MyAtNTE5MzUzNzAuNCAtPiAwLjAyOTc4Mjg0MzMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzU4IGRpdmlkZWludCAtMTU0Njc4MyAtNTE5MzUzNzAuNCAtPiAwCit4bXVsMzU4IG11bHRpcGx5IC0xNTQ2NzgzIC01MTkzNTM3MC40IC0+IDguMDMzMjc0ODBFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzM1OCBwb3dlciAtMTU0Njc4MyAtNTE5MzUzNzAgLT4gMy4zNjAyMjQ2MUUtMzIxNDUwMzA2IEluZXhhY3QgUm91bmRlZAoreHJlbTM1OCByZW1haW5kZXIgLTE1NDY3ODMgLTUxOTM1MzcwLjQgLT4gLTE1NDY3ODMuMAoreHN1YjM1OCBzdWJ0cmFjdCAtMTU0Njc4MyAtNTE5MzUzNzAuNCAtPiA1MDM4ODU4Ny40Cit4YWRkMzU5IGFkZCA2MTMwMjQ4Ni44IDIwNS40OTA0MTcgLT4gNjEzMDI2OTIuMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNTkgY29tcGFyZSA2MTMwMjQ4Ni44IDIwNS40OTA0MTcgLT4gMQoreGRpdjM1OSBkaXZpZGUgNjEzMDI0ODYuOCAyMDUuNDkwNDE3IC0+IDI5ODMyMi44NTAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzU5IGRpdmlkZWludCA2MTMwMjQ4Ni44IDIwNS40OTA0MTcgLT4gMjk4MzIyCit4bXVsMzU5IG11bHRpcGx5IDYxMzAyNDg2LjggMjA1LjQ5MDQxNyAtPiAxLjI1OTcwNzM2RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNTkgcG93ZXIgNjEzMDI0ODYuOCAyMDUgLT4gMi43MTAyNDc1NUUrMTU5NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNTkgcmVtYWluZGVyIDYxMzAyNDg2LjggMjA1LjQ5MDQxNyAtPiAxNzQuNjE5NzI2Cit4c3ViMzU5IHN1YnRyYWN0IDYxMzAyNDg2LjggMjA1LjQ5MDQxNyAtPiA2MTMwMjI4MS4zIEluZXhhY3QgUm91bmRlZAoreGFkZDM2MCBhZGQgLTMxODE4MDEwOS4gLTU0MDA4NzQ0LjZFLTE3MDkzMTAwMiAtPiAtMzE4MTgwMTA5IEluZXhhY3QgUm91bmRlZAoreGNvbTM2MCBjb21wYXJlIC0zMTgxODAxMDkuIC01NDAwODc0NC42RS0xNzA5MzEwMDIgLT4gLTEKK3hkaXYzNjAgZGl2aWRlIC0zMTgxODAxMDkuIC01NDAwODc0NC42RS0xNzA5MzEwMDIgLT4gNS44OTEyNzAyM0UrMTcwOTMxMDAyIEluZXhhY3QgUm91bmRlZAoreGR2aTM2MCBkaXZpZGVpbnQgLTMxODE4MDEwOS4gLTU0MDA4NzQ0LjZFLTE3MDkzMTAwMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDM2MCBtdWx0aXBseSAtMzE4MTgwMTA5LiAtNTQwMDg3NDQuNkUtMTcwOTMxMDAyIC0+IDEuNzE4NDUwODJFLTE3MDkzMDk4NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNjAgcG93ZXIgLTMxODE4MDEwOS4gLTUgLT4gLTMuMDY2NDQyODBFLTQzIEluZXhhY3QgUm91bmRlZAoreHJlbTM2MCByZW1haW5kZXIgLTMxODE4MDEwOS4gLTU0MDA4NzQ0LjZFLTE3MDkzMTAwMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjM2MCBzdWJ0cmFjdCAtMzE4MTgwMTA5LiAtNTQwMDg3NDQuNkUtMTcwOTMxMDAyIC0+IC0zMTgxODAxMDkgSW5leGFjdCBSb3VuZGVkCit4YWRkMzYxIGFkZCAtMjg0ODYxMzcuMUUrOTAxNDQxNzE0IC00MjQ1NC45NDAgLT4gLTIuODQ4NjEzNzFFKzkwMTQ0MTcyMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNjEgY29tcGFyZSAtMjg0ODYxMzcuMUUrOTAxNDQxNzE0IC00MjQ1NC45NDAgLT4gLTEKK3hkaXYzNjEgZGl2aWRlIC0yODQ4NjEzNy4xRSs5MDE0NDE3MTQgLTQyNDU0Ljk0MCAtPiA2LjcwOTczNDM5RSs5MDE0NDE3MTYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzYxIGRpdmlkZWludCAtMjg0ODYxMzcuMUUrOTAxNDQxNzE0IC00MjQ1NC45NDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzNjEgbXVsdGlwbHkgLTI4NDg2MTM3LjFFKzkwMTQ0MTcxNCAtNDI0NTQuOTQwIC0+IDEuMjA5Mzc3MjRFKzkwMTQ0MTcyNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNjEgcG93ZXIgLTI4NDg2MTM3LjFFKzkwMTQ0MTcxNCAtNDI0NTUgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTM2MSByZW1haW5kZXIgLTI4NDg2MTM3LjFFKzkwMTQ0MTcxNCAtNDI0NTQuOTQwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzYxIHN1YnRyYWN0IC0yODQ4NjEzNy4xRSs5MDE0NDE3MTQgLTQyNDU0Ljk0MCAtPiAtMi44NDg2MTM3MUUrOTAxNDQxNzIxIEluZXhhY3QgUm91bmRlZAoreGFkZDM2MiBhZGQgLTU0NjM5ODMyOC4gLTI3LjkxNDk3MTIgLT4gLTU0NjM5ODM1NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNjIgY29tcGFyZSAtNTQ2Mzk4MzI4LiAtMjcuOTE0OTcxMiAtPiAtMQoreGRpdjM2MiBkaXZpZGUgLTU0NjM5ODMyOC4gLTI3LjkxNDk3MTIgLT4gMTk1NzM2NjYuMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNjIgZGl2aWRlaW50IC01NDYzOTgzMjguIC0yNy45MTQ5NzEyIC0+IDE5NTczNjY2Cit4bXVsMzYyIG11bHRpcGx5IC01NDYzOTgzMjguIC0yNy45MTQ5NzEyIC0+IDEuNTI1MjY5MzZFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzM2MiBwb3dlciAtNTQ2Mzk4MzI4LiAtMjggLT4gMi4yMzczNzAzMkUtMjQ1IEluZXhhY3QgUm91bmRlZAoreHJlbTM2MiByZW1haW5kZXIgLTU0NjM5ODMyOC4gLTI3LjkxNDk3MTIgLT4gLTUuMzMxNTgwOAoreHN1YjM2MiBzdWJ0cmFjdCAtNTQ2Mzk4MzI4LiAtMjcuOTE0OTcxMiAtPiAtNTQ2Mzk4MzAwIEluZXhhY3QgUm91bmRlZAoreGFkZDM2MyBhZGQgNTQwMjA2Ni4xRS0yODQ5NzgyMTYgNjIyLjc1MTEyOCAtPiA2MjIuNzUxMTI4IEluZXhhY3QgUm91bmRlZAoreGNvbTM2MyBjb21wYXJlIDU0MDIwNjYuMUUtMjg0OTc4MjE2IDYyMi43NTExMjggLT4gLTEKK3hkaXYzNjMgZGl2aWRlIDU0MDIwNjYuMUUtMjg0OTc4MjE2IDYyMi43NTExMjggLT4gOC42NzQ1MTgzN0UtMjg0OTc4MjEzIEluZXhhY3QgUm91bmRlZAoreGR2aTM2MyBkaXZpZGVpbnQgNTQwMjA2Ni4xRS0yODQ5NzgyMTYgNjIyLjc1MTEyOCAtPiAwCit4bXVsMzYzIG11bHRpcGx5IDU0MDIwNjYuMUUtMjg0OTc4MjE2IDYyMi43NTExMjggLT4gMy4zNjQxNDI3NkUtMjg0OTc4MjA3IEluZXhhY3QgUm91bmRlZAoreHBvdzM2MyBwb3dlciA1NDAyMDY2LjFFLTI4NDk3ODIxNiA2MjMgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzYzIHJlbWFpbmRlciA1NDAyMDY2LjFFLTI4NDk3ODIxNiA2MjIuNzUxMTI4IC0+IDUuNDAyMDY2MUUtMjg0OTc4MjEwCit4c3ViMzYzIHN1YnRyYWN0IDU0MDIwNjYuMUUtMjg0OTc4MjE2IDYyMi43NTExMjggLT4gLTYyMi43NTExMjggSW5leGFjdCBSb3VuZGVkCit4YWRkMzY0IGFkZCAxODg0NTYyMCAzMTI5LjQzNzUzIC0+IDE4ODQ4NzQ5LjQgSW5leGFjdCBSb3VuZGVkCit4Y29tMzY0IGNvbXBhcmUgMTg4NDU2MjAgMzEyOS40Mzc1MyAtPiAxCit4ZGl2MzY0IGRpdmlkZSAxODg0NTYyMCAzMTI5LjQzNzUzIC0+IDYwMjIuMDQ3MDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzY0IGRpdmlkZWludCAxODg0NTYyMCAzMTI5LjQzNzUzIC0+IDYwMjIKK3htdWwzNjQgbXVsdGlwbHkgMTg4NDU2MjAgMzEyOS40Mzc1MyAtPiA1Ljg5NzYxOTA1RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNjQgcG93ZXIgMTg4NDU2MjAgMzEyOSAtPiAxLjM1OTY3NDQzRSsyMjc2NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNjQgcmVtYWluZGVyIDE4ODQ1NjIwIDMxMjkuNDM3NTMgLT4gMTQ3LjE5NDM0Cit4c3ViMzY0IHN1YnRyYWN0IDE4ODQ1NjIwIDMxMjkuNDM3NTMgLT4gMTg4NDI0OTAuNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNjUgYWRkIDUwNzA3LjE0MTJFKzkxMjQ3NTY3MCAtMTk4MDk4LjE4NkUrNzAxNDA3NTI0IC0+IDUuMDcwNzE0MTJFKzkxMjQ3NTY3NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNjUgY29tcGFyZSA1MDcwNy4xNDEyRSs5MTI0NzU2NzAgLTE5ODA5OC4xODZFKzcwMTQwNzUyNCAtPiAxCit4ZGl2MzY1IGRpdmlkZSA1MDcwNy4xNDEyRSs5MTI0NzU2NzAgLTE5ODA5OC4xODZFKzcwMTQwNzUyNCAtPiAtMi41NTk2OTc0MEUrMjExMDY4MTQ1IEluZXhhY3QgUm91bmRlZAoreGR2aTM2NSBkaXZpZGVpbnQgNTA3MDcuMTQxMkUrOTEyNDc1NjcwIC0xOTgwOTguMTg2RSs3MDE0MDc1MjQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzNjUgbXVsdGlwbHkgNTA3MDcuMTQxMkUrOTEyNDc1NjcwIC0xOTgwOTguMTg2RSs3MDE0MDc1MjQgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAoreHBvdzM2NSBwb3dlciA1MDcwNy4xNDEyRSs5MTI0NzU2NzAgLTIgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzY1IHJlbWFpbmRlciA1MDcwNy4xNDEyRSs5MTI0NzU2NzAgLTE5ODA5OC4xODZFKzcwMTQwNzUyNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjM2NSBzdWJ0cmFjdCA1MDcwNy4xNDEyRSs5MTI0NzU2NzAgLTE5ODA5OC4xODZFKzcwMTQwNzUyNCAtPiA1LjA3MDcxNDEyRSs5MTI0NzU2NzQgSW5leGFjdCBSb3VuZGVkCit4YWRkMzY2IGFkZCA1NS44MjQ1MDA2RSs5Mjg4ODU5OTEgOTkxNzA4NDMuOUUtNDc0MDIxNjcgLT4gNS41ODI0NTAwNkUrOTI4ODg1OTkyIEluZXhhY3QgUm91bmRlZAoreGNvbTM2NiBjb21wYXJlIDU1LjgyNDUwMDZFKzkyODg4NTk5MSA5OTE3MDg0My45RS00NzQwMjE2NyAtPiAxCit4ZGl2MzY2IGRpdmlkZSA1NS44MjQ1MDA2RSs5Mjg4ODU5OTEgOTkxNzA4NDMuOUUtNDc0MDIxNjcgLT4gNS42MjkxMjQyOUUrOTc2Mjg4MTUxIEluZXhhY3QgUm91bmRlZAoreGR2aTM2NiBkaXZpZGVpbnQgNTUuODI0NTAwNkUrOTI4ODg1OTkxIDk5MTcwODQzLjlFLTQ3NDAyMTY3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzY2IG11bHRpcGx5IDU1LjgyNDUwMDZFKzkyODg4NTk5MSA5OTE3MDg0My45RS00NzQwMjE2NyAtPiA1LjUzNjE2MjgzRSs4ODE0ODM4MzMgSW5leGFjdCBSb3VuZGVkCit4cG93MzY2IHBvd2VyIDU1LjgyNDUwMDZFKzkyODg4NTk5MSAxMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNjYgcmVtYWluZGVyIDU1LjgyNDUwMDZFKzkyODg4NTk5MSA5OTE3MDg0My45RS00NzQwMjE2NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjM2NiBzdWJ0cmFjdCA1NS44MjQ1MDA2RSs5Mjg4ODU5OTEgOTkxNzA4NDMuOUUtNDc0MDIxNjcgLT4gNS41ODI0NTAwNkUrOTI4ODg1OTkyIEluZXhhY3QgUm91bmRlZAoreGFkZDM2NyBhZGQgMTMuODAwMzg4M0UtMzg2MjI0OTIxIC04NDEyNjQ4MS45RS0yOTYzNzgzNDEgLT4gLTguNDEyNjQ4MTlFLTI5NjM3ODMzNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNjcgY29tcGFyZSAxMy44MDAzODgzRS0zODYyMjQ5MjEgLTg0MTI2NDgxLjlFLTI5NjM3ODM0MSAtPiAxCit4ZGl2MzY3IGRpdmlkZSAxMy44MDAzODgzRS0zODYyMjQ5MjEgLTg0MTI2NDgxLjlFLTI5NjM3ODM0MSAtPiAtMS42NDA0MzMzMUUtODk4NDY1ODcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzY3IGRpdmlkZWludCAxMy44MDAzODgzRS0zODYyMjQ5MjEgLTg0MTI2NDgxLjlFLTI5NjM3ODM0MSAtPiAtMAoreG11bDM2NyBtdWx0aXBseSAxMy44MDAzODgzRS0zODYyMjQ5MjEgLTg0MTI2NDgxLjlFLTI5NjM3ODM0MSAtPiAtMS4xNjA5NzgxMkUtNjgyNjAzMjUzIEluZXhhY3QgUm91bmRlZAoreHBvdzM2NyBwb3dlciAxMy44MDAzODgzRS0zODYyMjQ5MjEgLTggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzY3IHJlbWFpbmRlciAxMy44MDAzODgzRS0zODYyMjQ5MjEgLTg0MTI2NDgxLjlFLTI5NjM3ODM0MSAtPiAxLjM4MDAzODgzRS0zODYyMjQ5MjAKK3hzdWIzNjcgc3VidHJhY3QgMTMuODAwMzg4M0UtMzg2MjI0OTIxIC04NDEyNjQ4MS45RS0yOTYzNzgzNDEgLT4gOC40MTI2NDgxOUUtMjk2Mzc4MzM0IEluZXhhY3QgUm91bmRlZAoreGFkZDM2OCBhZGQgOTgyMC45MDQ1NyA0NjY3MS41OTE1IC0+IDU2NDkyLjQ5NjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMzY4IGNvbXBhcmUgOTgyMC45MDQ1NyA0NjY3MS41OTE1IC0+IC0xCit4ZGl2MzY4IGRpdmlkZSA5ODIwLjkwNDU3IDQ2NjcxLjU5MTUgLT4gMC4yMTA0MjU3NDggSW5leGFjdCBSb3VuZGVkCit4ZHZpMzY4IGRpdmlkZWludCA5ODIwLjkwNDU3IDQ2NjcxLjU5MTUgLT4gMAoreG11bDM2OCBtdWx0aXBseSA5ODIwLjkwNDU3IDQ2NjcxLjU5MTUgLT4gNDU4MzU3MjQ2IEluZXhhY3QgUm91bmRlZAoreHBvdzM2OCBwb3dlciA5ODIwLjkwNDU3IDQ2NjcyIC0+IDQuOTQ3NTMwNzBFKzE4NjMyMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNjggcmVtYWluZGVyIDk4MjAuOTA0NTcgNDY2NzEuNTkxNSAtPiA5ODIwLjkwNDU3Cit4c3ViMzY4IHN1YnRyYWN0IDk4MjAuOTA0NTcgNDY2NzEuNTkxNSAtPiAtMzY4NTAuNjg2OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNjkgYWRkIDcuMjI0MzYwMDZFKzgzMTk0OTE1MyAtMTExNjg4MzBFKzMyMjMzMTA0NSAtPiA3LjIyNDM2MDA2RSs4MzE5NDkxNTMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzY5IGNvbXBhcmUgNy4yMjQzNjAwNkUrODMxOTQ5MTUzIC0xMTE2ODgzMEUrMzIyMzMxMDQ1IC0+IDEKK3hkaXYzNjkgZGl2aWRlIDcuMjI0MzYwMDZFKzgzMTk0OTE1MyAtMTExNjg4MzBFKzMyMjMzMTA0NSAtPiAtNi40NjgzMjMwNkUrNTA5NjE4MTAxIEluZXhhY3QgUm91bmRlZAoreGR2aTM2OSBkaXZpZGVpbnQgNy4yMjQzNjAwNkUrODMxOTQ5MTUzIC0xMTE2ODgzMEUrMzIyMzMxMDQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzY5IG11bHRpcGx5IDcuMjI0MzYwMDZFKzgzMTk0OTE1MyAtMTExNjg4MzBFKzMyMjMzMTA0NSAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4cG93MzY5IHBvd2VyIDcuMjI0MzYwMDZFKzgzMTk0OTE1MyAtMSAtPiAxLjM4NDIwNTY1RS04MzE5NDkxNTQgSW5leGFjdCBSb3VuZGVkCit4cmVtMzY5IHJlbWFpbmRlciA3LjIyNDM2MDA2RSs4MzE5NDkxNTMgLTExMTY4ODMwRSszMjIzMzEwNDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNjkgc3VidHJhY3QgNy4yMjQzNjAwNkUrODMxOTQ5MTUzIC0xMTE2ODgzMEUrMzIyMzMxMDQ1IC0+IDcuMjI0MzYwMDZFKzgzMTk0OTE1MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNzAgYWRkIDQ3MjY0ODkwMCAtMjA3Ljc4NDE1MyAtPiA0NzI2NDg2OTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMzcwIGNvbXBhcmUgNDcyNjQ4OTAwIC0yMDcuNzg0MTUzIC0+IDEKK3hkaXYzNzAgZGl2aWRlIDQ3MjY0ODkwMCAtMjA3Ljc4NDE1MyAtPiAtMjI3NDcxMS4wMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNzAgZGl2aWRlaW50IDQ3MjY0ODkwMCAtMjA3Ljc4NDE1MyAtPiAtMjI3NDcxMQoreG11bDM3MCBtdWx0aXBseSA0NzI2NDg5MDAgLTIwNy43ODQxNTMgLT4gLTkuODIwODk1MTRFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzM3MCBwb3dlciA0NzI2NDg5MDAgLTIwOCAtPiA0Ljk2NTQ3MTQ1RS0xODA1IEluZXhhY3QgUm91bmRlZAoreHJlbTM3MCByZW1haW5kZXIgNDcyNjQ4OTAwIC0yMDcuNzg0MTUzIC0+IDEuNTQ1MjE3Cit4c3ViMzcwIHN1YnRyYWN0IDQ3MjY0ODkwMCAtMjA3Ljc4NDE1MyAtPiA0NzI2NDkxMDggSW5leGFjdCBSb3VuZGVkCit4YWRkMzcxIGFkZCAtODc1NC40OTMwNiAtODE4LjE2NTE1M0UrNjMxNDc1NDU3IC0+IC04LjE4MTY1MTUzRSs2MzE0NzU0NTkgSW5leGFjdCBSb3VuZGVkCit4Y29tMzcxIGNvbXBhcmUgLTg3NTQuNDkzMDYgLTgxOC4xNjUxNTNFKzYzMTQ3NTQ1NyAtPiAxCit4ZGl2MzcxIGRpdmlkZSAtODc1NC40OTMwNiAtODE4LjE2NTE1M0UrNjMxNDc1NDU3IC0+IDEuMDcwMDE1MzlFLTYzMTQ3NTQ1NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNzEgZGl2aWRlaW50IC04NzU0LjQ5MzA2IC04MTguMTY1MTUzRSs2MzE0NzU0NTcgLT4gMAoreG11bDM3MSBtdWx0aXBseSAtODc1NC40OTMwNiAtODE4LjE2NTE1M0UrNjMxNDc1NDU3IC0+IDcuMTYyNjIxMTVFKzYzMTQ3NTQ2MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNzEgcG93ZXIgLTg3NTQuNDkzMDYgLTggLT4gMi44OTgzNTc2N0UtMzIgSW5leGFjdCBSb3VuZGVkCit4cmVtMzcxIHJlbWFpbmRlciAtODc1NC40OTMwNiAtODE4LjE2NTE1M0UrNjMxNDc1NDU3IC0+IC04NzU0LjQ5MzA2Cit4c3ViMzcxIHN1YnRyYWN0IC04NzU0LjQ5MzA2IC04MTguMTY1MTUzRSs2MzE0NzU0NTcgLT4gOC4xODE2NTE1M0UrNjMxNDc1NDU5IEluZXhhY3QgUm91bmRlZAoreGFkZDM3MiBhZGQgOTg3NTA4NjQgMTkxMzgwLjU1MSAtPiA5ODk0MjI0NC42IEluZXhhY3QgUm91bmRlZAoreGNvbTM3MiBjb21wYXJlIDk4NzUwODY0IDE5MTM4MC41NTEgLT4gMQoreGRpdjM3MiBkaXZpZGUgOTg3NTA4NjQgMTkxMzgwLjU1MSAtPiA1MTUuOTkyMTYxIEluZXhhY3QgUm91bmRlZAoreGR2aTM3MiBkaXZpZGVpbnQgOTg3NTA4NjQgMTkxMzgwLjU1MSAtPiA1MTUKK3htdWwzNzIgbXVsdGlwbHkgOTg3NTA4NjQgMTkxMzgwLjU1MSAtPiAxLjg4OTg5OTQ4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNzIgcG93ZXIgOTg3NTA4NjQgMTkxMzgxIC0+IDEuNzA5MDg4MDlFKzE1MzAwMDMgSW5leGFjdCBSb3VuZGVkCit4cmVtMzcyIHJlbWFpbmRlciA5ODc1MDg2NCAxOTEzODAuNTUxIC0+IDE4OTg4MC4yMzUKK3hzdWIzNzIgc3VidHJhY3QgOTg3NTA4NjQgMTkxMzgwLjU1MSAtPiA5ODU1OTQ4My40IEluZXhhY3QgUm91bmRlZAoreGFkZDM3MyBhZGQgNzI1MjkyNTYxLiAtNzY4OTYzNjA2LkUrMzQwNzYyOTg2IC0+IC03LjY4OTYzNjA2RSszNDA3NjI5OTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMzczIGNvbXBhcmUgNzI1MjkyNTYxLiAtNzY4OTYzNjA2LkUrMzQwNzYyOTg2IC0+IDEKK3hkaXYzNzMgZGl2aWRlIDcyNTI5MjU2MS4gLTc2ODk2MzYwNi5FKzM0MDc2Mjk4NiAtPiAtOS40MzIwNzkxN0UtMzQwNzYyOTg3IEluZXhhY3QgUm91bmRlZAoreGR2aTM3MyBkaXZpZGVpbnQgNzI1MjkyNTYxLiAtNzY4OTYzNjA2LkUrMzQwNzYyOTg2IC0+IC0wCit4bXVsMzczIG11bHRpcGx5IDcyNTI5MjU2MS4gLTc2ODk2MzYwNi5FKzM0MDc2Mjk4NiAtPiAtNS41NzcyMzU4M0UrMzQwNzYzMDAzIEluZXhhY3QgUm91bmRlZAoreHBvdzM3MyBwb3dlciA3MjUyOTI1NjEuIC04IC0+IDEuMzA1ODUyNzdFLTcxIEluZXhhY3QgUm91bmRlZAoreHJlbTM3MyByZW1haW5kZXIgNzI1MjkyNTYxLiAtNzY4OTYzNjA2LkUrMzQwNzYyOTg2IC0+IDcyNTI5MjU2MQoreHN1YjM3MyBzdWJ0cmFjdCA3MjUyOTI1NjEuIC03Njg5NjM2MDYuRSszNDA3NjI5ODYgLT4gNy42ODk2MzYwNkUrMzQwNzYyOTk0IEluZXhhY3QgUm91bmRlZAoreGFkZDM3NCBhZGQgMTg2Mi44MDQ0NSA2NDgyNTQ0ODMuIC0+IDY0ODI1NjM0NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNzQgY29tcGFyZSAxODYyLjgwNDQ1IDY0ODI1NDQ4My4gLT4gLTEKK3hkaXYzNzQgZGl2aWRlIDE4NjIuODA0NDUgNjQ4MjU0NDgzLiAtPiAwLjAwMDAwMjg3MzU2OTcyIEluZXhhY3QgUm91bmRlZAoreGR2aTM3NCBkaXZpZGVpbnQgMTg2Mi44MDQ0NSA2NDgyNTQ0ODMuIC0+IDAKK3htdWwzNzQgbXVsdGlwbHkgMTg2Mi44MDQ0NSA2NDgyNTQ0ODMuIC0+IDEuMjA3NTcxMzRFKzEyIEluZXhhY3QgUm91bmRlZAoreHBvdzM3NCBwb3dlciAxODYyLjgwNDQ1IDY0ODI1NDQ4MyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNzQgcmVtYWluZGVyIDE4NjIuODA0NDUgNjQ4MjU0NDgzLiAtPiAxODYyLjgwNDQ1Cit4c3ViMzc0IHN1YnRyYWN0IDE4NjIuODA0NDUgNjQ4MjU0NDgzLiAtPiAtNjQ4MjUyNjIwIEluZXhhY3QgUm91bmRlZAoreGFkZDM3NSBhZGQgLTU1NDkzMjAuMSAtOTM1ODA2ODQuMSAtPiAtOTkxMzAwMDQuMgoreGNvbTM3NSBjb21wYXJlIC01NTQ5MzIwLjEgLTkzNTgwNjg0LjEgLT4gMQoreGRpdjM3NSBkaXZpZGUgLTU1NDkzMjAuMSAtOTM1ODA2ODQuMSAtPiAwLjA1OTI5OTg0NTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzc1IGRpdmlkZWludCAtNTU0OTMyMC4xIC05MzU4MDY4NC4xIC0+IDAKK3htdWwzNzUgbXVsdGlwbHkgLTU1NDkzMjAuMSAtOTM1ODA2ODQuMSAtPiA1LjE5MzA5MTcxRSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNzUgcG93ZXIgLTU1NDkzMjAuMSAtOTM1ODA2ODQgLT4gNC4yMDY2MjA3OUUtNjMxMTMwNTcyIEluZXhhY3QgUm91bmRlZAoreHJlbTM3NSByZW1haW5kZXIgLTU1NDkzMjAuMSAtOTM1ODA2ODQuMSAtPiAtNTU0OTMyMC4xCit4c3ViMzc1IHN1YnRyYWN0IC01NTQ5MzIwLjEgLTkzNTgwNjg0LjEgLT4gODgwMzEzNjQuMAoreGFkZDM3NiBhZGQgLTE0Njc3MDUzLjEgLTI1Nzg0LjczNTggLT4gLTE0NzAyODM3LjggSW5leGFjdCBSb3VuZGVkCit4Y29tMzc2IGNvbXBhcmUgLTE0Njc3MDUzLjEgLTI1Nzg0LjczNTggLT4gLTEKK3hkaXYzNzYgZGl2aWRlIC0xNDY3NzA1My4xIC0yNTc4NC43MzU4IC0+IDU2OS4yMTQ3OTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzc2IGRpdmlkZWludCAtMTQ2NzcwNTMuMSAtMjU3ODQuNzM1OCAtPiA1NjkKK3htdWwzNzYgbXVsdGlwbHkgLTE0Njc3MDUzLjEgLTI1Nzg0LjczNTggLT4gMy43ODQ0MzkzN0UrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93Mzc2IHBvd2VyIC0xNDY3NzA1My4xIC0yNTc4NSAtPiAtMS42NDc2MDgzMUUtMTg0NzkyIEluZXhhY3QgUm91bmRlZAoreHJlbTM3NiByZW1haW5kZXIgLTE0Njc3MDUzLjEgLTI1Nzg0LjczNTggLT4gLTU1MzguNDI5OAoreHN1YjM3NiBzdWJ0cmFjdCAtMTQ2NzcwNTMuMSAtMjU3ODQuNzM1OCAtPiAtMTQ2NTEyNjguNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNzcgYWRkIDU0NzQwMi4zMDhFKzU3MTY4NzYxNyAtNzgzNTc5Ny4wMUUrNTAwMDY3MzY0IC0+IDUuNDc0MDIzMDhFKzU3MTY4NzYyMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNzcgY29tcGFyZSA1NDc0MDIuMzA4RSs1NzE2ODc2MTcgLTc4MzU3OTcuMDFFKzUwMDA2NzM2NCAtPiAxCit4ZGl2Mzc3IGRpdmlkZSA1NDc0MDIuMzA4RSs1NzE2ODc2MTcgLTc4MzU3OTcuMDFFKzUwMDA2NzM2NCAtPiAtNi45ODU5MTc0MkUrNzE2MjAyNTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzc3IGRpdmlkZWludCA1NDc0MDIuMzA4RSs1NzE2ODc2MTcgLTc4MzU3OTcuMDFFKzUwMDA2NzM2NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDM3NyBtdWx0aXBseSA1NDc0MDIuMzA4RSs1NzE2ODc2MTcgLTc4MzU3OTcuMDFFKzUwMDA2NzM2NCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4cG93Mzc3IHBvd2VyIDU0NzQwMi4zMDhFKzU3MTY4NzYxNyAtOCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zNzcgcmVtYWluZGVyIDU0NzQwMi4zMDhFKzU3MTY4NzYxNyAtNzgzNTc5Ny4wMUUrNTAwMDY3MzY0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzc3IHN1YnRyYWN0IDU0NzQwMi4zMDhFKzU3MTY4NzYxNyAtNzgzNTc5Ny4wMUUrNTAwMDY3MzY0IC0+IDUuNDc0MDIzMDhFKzU3MTY4NzYyMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNzggYWRkIC00MTMxNzM4LjA5IDc1NzkuMDc1NjYgLT4gLTQxMjQxNTkuMDEgSW5leGFjdCBSb3VuZGVkCit4Y29tMzc4IGNvbXBhcmUgLTQxMzE3MzguMDkgNzU3OS4wNzU2NiAtPiAtMQoreGRpdjM3OCBkaXZpZGUgLTQxMzE3MzguMDkgNzU3OS4wNzU2NiAtPiAtNTQ1LjE1MDY1OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNzggZGl2aWRlaW50IC00MTMxNzM4LjA5IDc1NzkuMDc1NjYgLT4gLTU0NQoreG11bDM3OCBtdWx0aXBseSAtNDEzMTczOC4wOSA3NTc5LjA3NTY2IC0+IC0zLjEzMTQ3NTU2RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNzggcG93ZXIgLTQxMzE3MzguMDkgNzU3OSAtPiAtNC42ODEzMjc5NEUrNTAxNDMgSW5leGFjdCBSb3VuZGVkCit4cmVtMzc4IHJlbWFpbmRlciAtNDEzMTczOC4wOSA3NTc5LjA3NTY2IC0+IC0xMTQxLjg1NTMwCit4c3ViMzc4IHN1YnRyYWN0IC00MTMxNzM4LjA5IDc1NzkuMDc1NjYgLT4gLTQxMzkzMTcuMTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMzc5IGFkZCA1MDQ1NDQuNjQ4IC03Njc4Ljk2MTMzRS02NjIxNDMyNjggLT4gNTA0NTQ0LjY0OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNzkgY29tcGFyZSA1MDQ1NDQuNjQ4IC03Njc4Ljk2MTMzRS02NjIxNDMyNjggLT4gMQoreGRpdjM3OSBkaXZpZGUgNTA0NTQ0LjY0OCAtNzY3OC45NjEzM0UtNjYyMTQzMjY4IC0+IC02LjU3MDQ4MDM5RSs2NjIxNDMyNjkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzc5IGRpdmlkZWludCA1MDQ1NDQuNjQ4IC03Njc4Ljk2MTMzRS02NjIxNDMyNjggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzNzkgbXVsdGlwbHkgNTA0NTQ0LjY0OCAtNzY3OC45NjEzM0UtNjYyMTQzMjY4IC0+IC0zLjg3NDM3ODg0RS02NjIxNDMyNTkgSW5leGFjdCBSb3VuZGVkCit4cG93Mzc5IHBvd2VyIDUwNDU0NC42NDggLTggLT4gMi4zODEyNDAwMUUtNDYgSW5leGFjdCBSb3VuZGVkCit4cmVtMzc5IHJlbWFpbmRlciA1MDQ1NDQuNjQ4IC03Njc4Ljk2MTMzRS02NjIxNDMyNjggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNzkgc3VidHJhY3QgNTA0NTQ0LjY0OCAtNzY3OC45NjEzM0UtNjYyMTQzMjY4IC0+IDUwNDU0NC42NDggSW5leGFjdCBSb3VuZGVkCit4YWRkMzgwIGFkZCA4Mjk4OTgyNDEgODkxMi45OTExNEUrOTI5MjI4MTQ5IC0+IDguOTEyOTkxMTRFKzkyOTIyODE1MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zODAgY29tcGFyZSA4Mjk4OTgyNDEgODkxMi45OTExNEUrOTI5MjI4MTQ5IC0+IC0xCit4ZGl2MzgwIGRpdmlkZSA4Mjk4OTgyNDEgODkxMi45OTExNEUrOTI5MjI4MTQ5IC0+IDkuMzExMTA4MTFFLTkyOTIyODE0NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzODAgZGl2aWRlaW50IDgyOTg5ODI0MSA4OTEyLjk5MTE0RSs5MjkyMjgxNDkgLT4gMAoreG11bDM4MCBtdWx0aXBseSA4Mjk4OTgyNDEgODkxMi45OTExNEUrOTI5MjI4MTQ5IC0+IDcuMzk2ODc1NjdFKzkyOTIyODE2MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czODAgcG93ZXIgODI5ODk4MjQxIDkgLT4gMS44NjczNDA4NEUrODAgSW5leGFjdCBSb3VuZGVkCit4cmVtMzgwIHJlbWFpbmRlciA4Mjk4OTgyNDEgODkxMi45OTExNEUrOTI5MjI4MTQ5IC0+IDgyOTg5ODI0MQoreHN1YjM4MCBzdWJ0cmFjdCA4Mjk4OTgyNDEgODkxMi45OTExNEUrOTI5MjI4MTQ5IC0+IC04LjkxMjk5MTE0RSs5MjkyMjgxNTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzgxIGFkZCA1My42ODkxNjkxIC0xMS4yMzcxMTQwIC0+IDQyLjQ1MjA1NTEKK3hjb20zODEgY29tcGFyZSA1My42ODkxNjkxIC0xMS4yMzcxMTQwIC0+IDEKK3hkaXYzODEgZGl2aWRlIDUzLjY4OTE2OTEgLTExLjIzNzExNDAgLT4gLTQuNzc3ODQzMjMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzgxIGRpdmlkZWludCA1My42ODkxNjkxIC0xMS4yMzcxMTQwIC0+IC00Cit4bXVsMzgxIG11bHRpcGx5IDUzLjY4OTE2OTEgLTExLjIzNzExNDAgLT4gLTYwMy4zMTEzMTQgSW5leGFjdCBSb3VuZGVkCit4cG93MzgxIHBvd2VyIDUzLjY4OTE2OTEgLTExIC0+IDkuMzU5MzY3MjVFLTIwIEluZXhhY3QgUm91bmRlZAoreHJlbTM4MSByZW1haW5kZXIgNTMuNjg5MTY5MSAtMTEuMjM3MTE0MCAtPiA4Ljc0MDcxMzEKK3hzdWIzODEgc3VidHJhY3QgNTMuNjg5MTY5MSAtMTEuMjM3MTE0MCAtPiA2NC45MjYyODMxCit4YWRkMzgyIGFkZCAtOTM5NTE4MjMuNCAtMjUzMTcuODY0NSAtPiAtOTM5NzcxNDEuMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zODIgY29tcGFyZSAtOTM5NTE4MjMuNCAtMjUzMTcuODY0NSAtPiAtMQoreGRpdjM4MiBkaXZpZGUgLTkzOTUxODIzLjQgLTI1MzE3Ljg2NDUgLT4gMzcxMC44OTA1MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzODIgZGl2aWRlaW50IC05Mzk1MTgyMy40IC0yNTMxNy44NjQ1IC0+IDM3MTAKK3htdWwzODIgbXVsdGlwbHkgLTkzOTUxODIzLjQgLTI1MzE3Ljg2NDUgLT4gMi4zNzg2NTk1M0UrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93MzgyIHBvd2VyIC05Mzk1MTgyMy40IC0yNTMxOCAtPiA5LjY3ODU3NzE0RS0yMDE4NTkgSW5leGFjdCBSb3VuZGVkCit4cmVtMzgyIHJlbWFpbmRlciAtOTM5NTE4MjMuNCAtMjUzMTcuODY0NSAtPiAtMjI1NDYuMTA1MAoreHN1YjM4MiBzdWJ0cmFjdCAtOTM5NTE4MjMuNCAtMjUzMTcuODY0NSAtPiAtOTM5MjY1MDUuNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzODMgYWRkIDQ0NjkxOS4xMjMgOTUxMzM4NDkwLiAtPiA5NTE3ODU0MDkgSW5leGFjdCBSb3VuZGVkCit4Y29tMzgzIGNvbXBhcmUgNDQ2OTE5LjEyMyA5NTEzMzg0OTAuIC0+IC0xCit4ZGl2MzgzIGRpdmlkZSA0NDY5MTkuMTIzIDk1MTMzODQ5MC4gLT4gMC4wMDA0Njk3NzkyOTMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzgzIGRpdmlkZWludCA0NDY5MTkuMTIzIDk1MTMzODQ5MC4gLT4gMAoreG11bDM4MyBtdWx0aXBseSA0NDY5MTkuMTIzIDk1MTMzODQ5MC4gLT4gNC4yNTE3MTM2NEUrMTQgSW5leGFjdCBSb3VuZGVkCit4cG93MzgzIHBvd2VyIDQ0NjkxOS4xMjMgOTUxMzM4NDkwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTM4MyByZW1haW5kZXIgNDQ2OTE5LjEyMyA5NTEzMzg0OTAuIC0+IDQ0NjkxOS4xMjMKK3hzdWIzODMgc3VidHJhY3QgNDQ2OTE5LjEyMyA5NTEzMzg0OTAuIC0+IC05NTA4OTE1NzEgSW5leGFjdCBSb3VuZGVkCit4YWRkMzg0IGFkZCAtOC4wMTc4Nzc0OCAtODguMzA3Njg1MiAtPiAtOTYuMzI1NTYyNyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zODQgY29tcGFyZSAtOC4wMTc4Nzc0OCAtODguMzA3Njg1MiAtPiAxCit4ZGl2Mzg0IGRpdmlkZSAtOC4wMTc4Nzc0OCAtODguMzA3Njg1MiAtPiAwLjA5MDc5NDc4NzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzg0IGRpdmlkZWludCAtOC4wMTc4Nzc0OCAtODguMzA3Njg1MiAtPiAwCit4bXVsMzg0IG11bHRpcGx5IC04LjAxNzg3NzQ4IC04OC4zMDc2ODUyIC0+IDcwOC4wNDAyMDAgSW5leGFjdCBSb3VuZGVkCit4cG93Mzg0IHBvd2VyIC04LjAxNzg3NzQ4IC04OCAtPiAyLjc3MTg2MDg4RS04MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zODQgcmVtYWluZGVyIC04LjAxNzg3NzQ4IC04OC4zMDc2ODUyIC0+IC04LjAxNzg3NzQ4Cit4c3ViMzg0IHN1YnRyYWN0IC04LjAxNzg3NzQ4IC04OC4zMDc2ODUyIC0+IDgwLjI4OTgwNzcgSW5leGFjdCBSb3VuZGVkCit4YWRkMzg1IGFkZCA1MTc0NTgxMzkgLTk5OTczMS41NDggLT4gNTE2NDU4NDA3IEluZXhhY3QgUm91bmRlZAoreGNvbTM4NSBjb21wYXJlIDUxNzQ1ODEzOSAtOTk5NzMxLjU0OCAtPiAxCit4ZGl2Mzg1IGRpdmlkZSA1MTc0NTgxMzkgLTk5OTczMS41NDggLT4gLTUxNy41OTcwODkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzg1IGRpdmlkZWludCA1MTc0NTgxMzkgLTk5OTczMS41NDggLT4gLTUxNworeG11bDM4NSBtdWx0aXBseSA1MTc0NTgxMzkgLTk5OTczMS41NDggLT4gLTUuMTczMTkyMjZFKzE0IEluZXhhY3QgUm91bmRlZAoreHBvdzM4NSBwb3dlciA1MTc0NTgxMzkgLTk5OTczMiAtPiAxLjI0ODIxMzQ2RS04NzExNTQwIEluZXhhY3QgUm91bmRlZAoreHJlbTM4NSByZW1haW5kZXIgNTE3NDU4MTM5IC05OTk3MzEuNTQ4IC0+IDU5NjkyOC42ODQKK3hzdWIzODUgc3VidHJhY3QgNTE3NDU4MTM5IC05OTk3MzEuNTQ4IC0+IDUxODQ1Nzg3MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzODYgYWRkIC00MDU1NDM0NDAgLTQwMTMuMTgyOTUgLT4gLTQwNTU0NzQ1MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zODYgY29tcGFyZSAtNDA1NTQzNDQwIC00MDEzLjE4Mjk1IC0+IC0xCit4ZGl2Mzg2IGRpdmlkZSAtNDA1NTQzNDQwIC00MDEzLjE4Mjk1IC0+IDEwMTA1Mi44MTYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzg2IGRpdmlkZWludCAtNDA1NTQzNDQwIC00MDEzLjE4Mjk1IC0+IDEwMTA1MgoreG11bDM4NiBtdWx0aXBseSAtNDA1NTQzNDQwIC00MDEzLjE4Mjk1IC0+IDEuNjI3NTIwMDJFKzEyIEluZXhhY3QgUm91bmRlZAoreHBvdzM4NiBwb3dlciAtNDA1NTQzNDQwIC00MDEzIC0+IC04LjgzMDYxOTMyRS0zNDU0NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zODYgcmVtYWluZGVyIC00MDU1NDM0NDAgLTQwMTMuMTgyOTUgLT4gLTMyNzYuNTM2NjAKK3hzdWIzODYgc3VidHJhY3QgLTQwNTU0MzQ0MCAtNDAxMy4xODI5NSAtPiAtNDA1NTM5NDI3IEluZXhhY3QgUm91bmRlZAoreGFkZDM4NyBhZGQgLTQ5MjQ1MjUwLjFFKzY4Mjc2MDgyNSAtODQ4Nzc2LjYzNyAtPiAtNC45MjQ1MjUwMUUrNjgyNzYwODMyIEluZXhhY3QgUm91bmRlZAoreGNvbTM4NyBjb21wYXJlIC00OTI0NTI1MC4xRSs2ODI3NjA4MjUgLTg0ODc3Ni42MzcgLT4gLTEKK3hkaXYzODcgZGl2aWRlIC00OTI0NTI1MC4xRSs2ODI3NjA4MjUgLTg0ODc3Ni42MzcgLT4gNS44MDE5MDkyNEUrNjgyNzYwODI2IEluZXhhY3QgUm91bmRlZAoreGR2aTM4NyBkaXZpZGVpbnQgLTQ5MjQ1MjUwLjFFKzY4Mjc2MDgyNSAtODQ4Nzc2LjYzNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDM4NyBtdWx0aXBseSAtNDkyNDUyNTAuMUUrNjgyNzYwODI1IC04NDg3NzYuNjM3IC0+IDQuMTc5ODIxNzhFKzY4Mjc2MDgzOCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czODcgcG93ZXIgLTQ5MjQ1MjUwLjFFKzY4Mjc2MDgyNSAtODQ4Nzc3IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zODcgcmVtYWluZGVyIC00OTI0NTI1MC4xRSs2ODI3NjA4MjUgLTg0ODc3Ni42MzcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzODcgc3VidHJhY3QgLTQ5MjQ1MjUwLjFFKzY4Mjc2MDgyNSAtODQ4Nzc2LjYzNyAtPiAtNC45MjQ1MjUwMUUrNjgyNzYwODMyIEluZXhhY3QgUm91bmRlZAoreGFkZDM4OCBhZGQgLTE1MTE0NDQ1NSAtMTcwMzcxLjI5IC0+IC0xNTEzMTQ4MjYgSW5leGFjdCBSb3VuZGVkCit4Y29tMzg4IGNvbXBhcmUgLTE1MTE0NDQ1NSAtMTcwMzcxLjI5IC0+IC0xCit4ZGl2Mzg4IGRpdmlkZSAtMTUxMTQ0NDU1IC0xNzAzNzEuMjkgLT4gODg3LjE0NzQ0NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzODggZGl2aWRlaW50IC0xNTExNDQ0NTUgLTE3MDM3MS4yOSAtPiA4ODcKK3htdWwzODggbXVsdGlwbHkgLTE1MTE0NDQ1NSAtMTcwMzcxLjI5IC0+IDIuNTc1MDY3NThFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzM4OCBwb3dlciAtMTUxMTQ0NDU1IC0xNzAzNzEgLT4gLTUuODY0OTYzNjlFLTEzOTM1MzIgSW5leGFjdCBSb3VuZGVkCit4cmVtMzg4IHJlbWFpbmRlciAtMTUxMTQ0NDU1IC0xNzAzNzEuMjkgLT4gLTI1MTIwLjc3Cit4c3ViMzg4IHN1YnRyYWN0IC0xNTExNDQ0NTUgLTE3MDM3MS4yOSAtPiAtMTUwOTc0MDg0IEluZXhhY3QgUm91bmRlZAoreGFkZDM4OSBhZGQgLTcyOTIzNjc0Ni5FKzY2MjczNzA2NyA5LjEwODIzNjAyIC0+IC03LjI5MjM2NzQ2RSs2NjI3MzcwNzUgSW5leGFjdCBSb3VuZGVkCit4Y29tMzg5IGNvbXBhcmUgLTcyOTIzNjc0Ni5FKzY2MjczNzA2NyA5LjEwODIzNjAyIC0+IC0xCit4ZGl2Mzg5IGRpdmlkZSAtNzI5MjM2NzQ2LkUrNjYyNzM3MDY3IDkuMTA4MjM2MDIgLT4gLTguMDA2MzQ0NDJFKzY2MjczNzA3NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzODkgZGl2aWRlaW50IC03MjkyMzY3NDYuRSs2NjI3MzcwNjcgOS4xMDgyMzYwMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDM4OSBtdWx0aXBseSAtNzI5MjM2NzQ2LkUrNjYyNzM3MDY3IDkuMTA4MjM2MDIgLT4gLTYuNjQyMDYwNDBFKzY2MjczNzA3NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czODkgcG93ZXIgLTcyOTIzNjc0Ni5FKzY2MjczNzA2NyA5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zODkgcmVtYWluZGVyIC03MjkyMzY3NDYuRSs2NjI3MzcwNjcgOS4xMDgyMzYwMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjM4OSBzdWJ0cmFjdCAtNzI5MjM2NzQ2LkUrNjYyNzM3MDY3IDkuMTA4MjM2MDIgLT4gLTcuMjkyMzY3NDZFKzY2MjczNzA3NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzOTAgYWRkIDUzNC4zOTQ3MjkgLTIzNjk4MzkuMzcgLT4gLTIzNjkzMDQuOTggSW5leGFjdCBSb3VuZGVkCit4Y29tMzkwIGNvbXBhcmUgNTM0LjM5NDcyOSAtMjM2OTgzOS4zNyAtPiAxCit4ZGl2MzkwIGRpdmlkZSA1MzQuMzk0NzI5IC0yMzY5ODM5LjM3IC0+IC0wLjAwMDIyNTQ5ODI5MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzOTAgZGl2aWRlaW50IDUzNC4zOTQ3MjkgLTIzNjk4MzkuMzcgLT4gLTAKK3htdWwzOTAgbXVsdGlwbHkgNTM0LjM5NDcyOSAtMjM2OTgzOS4zNyAtPiAtMS4yNjY0Mjk2N0UrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czOTAgcG93ZXIgNTM0LjM5NDcyOSAtMjM2OTgzOSAtPiA3LjEyNTIyODk2RS02NDY0NTk1IEluZXhhY3QgUm91bmRlZAoreHJlbTM5MCByZW1haW5kZXIgNTM0LjM5NDcyOSAtMjM2OTgzOS4zNyAtPiA1MzQuMzk0NzI5Cit4c3ViMzkwIHN1YnRyYWN0IDUzNC4zOTQ3MjkgLTIzNjk4MzkuMzcgLT4gMjM3MDM3My43NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzOTEgYWRkIDg5MTAwLjE3OTcgMjI0LjM3MDMwOSAtPiA4OTMyNC41NTAwIEluZXhhY3QgUm91bmRlZAoreGNvbTM5MSBjb21wYXJlIDg5MTAwLjE3OTcgMjI0LjM3MDMwOSAtPiAxCit4ZGl2MzkxIGRpdmlkZSA4OTEwMC4xNzk3IDIyNC4zNzAzMDkgLT4gMzk3LjExMjE2NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzOTEgZGl2aWRlaW50IDg5MTAwLjE3OTcgMjI0LjM3MDMwOSAtPiAzOTcKK3htdWwzOTEgbXVsdGlwbHkgODkxMDAuMTc5NyAyMjQuMzcwMzA5IC0+IDE5OTkxNDM0LjkgSW5leGFjdCBSb3VuZGVkCit4cG93MzkxIHBvd2VyIDg5MTAwLjE3OTcgMjI0IC0+IDUuOTI2NTQ5MzZFKzExMDggSW5leGFjdCBSb3VuZGVkCit4cmVtMzkxIHJlbWFpbmRlciA4OTEwMC4xNzk3IDIyNC4zNzAzMDkgLT4gMjUuMTY3MDI3Cit4c3ViMzkxIHN1YnRyYWN0IDg5MTAwLjE3OTcgMjI0LjM3MDMwOSAtPiA4ODg3NS44MDk0IEluZXhhY3QgUm91bmRlZAoreGFkZDM5MiBhZGQgLTgyMTM3Ny43NzcgMzguNTUyODIxIC0+IC04MjEzMzkuMjI0IEluZXhhY3QgUm91bmRlZAoreGNvbTM5MiBjb21wYXJlIC04MjEzNzcuNzc3IDM4LjU1MjgyMSAtPiAtMQoreGRpdjM5MiBkaXZpZGUgLTgyMTM3Ny43NzcgMzguNTUyODIxIC0+IC0yMTMwNS4yNTc1IEluZXhhY3QgUm91bmRlZAoreGR2aTM5MiBkaXZpZGVpbnQgLTgyMTM3Ny43NzcgMzguNTUyODIxIC0+IC0yMTMwNQoreG11bDM5MiBtdWx0aXBseSAtODIxMzc3Ljc3NyAzOC41NTI4MjEgLT4gLTMxNjY2NDMwLjQgSW5leGFjdCBSb3VuZGVkCit4cG93MzkyIHBvd2VyIC04MjEzNzcuNzc3IDM5IC0+IC00LjY0NzAyNDgyRSsyMzAgSW5leGFjdCBSb3VuZGVkCit4cmVtMzkyIHJlbWFpbmRlciAtODIxMzc3Ljc3NyAzOC41NTI4MjEgLT4gLTkuOTI1NTk1Cit4c3ViMzkyIHN1YnRyYWN0IC04MjEzNzcuNzc3IDM4LjU1MjgyMSAtPiAtODIxNDE2LjMzMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzOTMgYWRkIC0zOTI2NDAuNzgyIC0yNTcxNjE5LjVFKzExMzIzNzg2NSAtPiAtMi41NzE2MTk1MEUrMTEzMjM3ODcxIEluZXhhY3QgUm91bmRlZAoreGNvbTM5MyBjb21wYXJlIC0zOTI2NDAuNzgyIC0yNTcxNjE5LjVFKzExMzIzNzg2NSAtPiAxCit4ZGl2MzkzIGRpdmlkZSAtMzkyNjQwLjc4MiAtMjU3MTYxOS41RSsxMTMyMzc4NjUgLT4gMS41MjY4MjMwMUUtMTEzMjM3ODY2IEluZXhhY3QgUm91bmRlZAoreGR2aTM5MyBkaXZpZGVpbnQgLTM5MjY0MC43ODIgLTI1NzE2MTkuNUUrMTEzMjM3ODY1IC0+IDAKK3htdWwzOTMgbXVsdGlwbHkgLTM5MjY0MC43ODIgLTI1NzE2MTkuNUUrMTEzMjM3ODY1IC0+IDEuMDA5NzIyNjlFKzExMzIzNzg3NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czOTMgcG93ZXIgLTM5MjY0MC43ODIgLTMgLT4gLTEuNjUyMDE0MjJFLTE3IEluZXhhY3QgUm91bmRlZAoreHJlbTM5MyByZW1haW5kZXIgLTM5MjY0MC43ODIgLTI1NzE2MTkuNUUrMTEzMjM3ODY1IC0+IC0zOTI2NDAuNzgyCit4c3ViMzkzIHN1YnRyYWN0IC0zOTI2NDAuNzgyIC0yNTcxNjE5LjVFKzExMzIzNzg2NSAtPiAyLjU3MTYxOTUwRSsxMTMyMzc4NzEgSW5leGFjdCBSb3VuZGVkCit4YWRkMzk0IGFkZCAtNjUxMzk3LjcxMiAtNzIzLjU5NjczIC0+IC02NTIxMjEuMzA5IEluZXhhY3QgUm91bmRlZAoreGNvbTM5NCBjb21wYXJlIC02NTEzOTcuNzEyIC03MjMuNTk2NzMgLT4gLTEKK3hkaXYzOTQgZGl2aWRlIC02NTEzOTcuNzEyIC03MjMuNTk2NzMgLT4gOTAwLjIyMjAyMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzOTQgZGl2aWRlaW50IC02NTEzOTcuNzEyIC03MjMuNTk2NzMgLT4gOTAwCit4bXVsMzk0IG11bHRpcGx5IC02NTEzOTcuNzEyIC03MjMuNTk2NzMgLT4gNDcxMzQ5MjU0IEluZXhhY3QgUm91bmRlZAoreHBvdzM5NCBwb3dlciAtNjUxMzk3LjcxMiAtNzI0IC0+IDUuOTYxMTU0MTVFLTQyMTAgSW5leGFjdCBSb3VuZGVkCit4cmVtMzk0IHJlbWFpbmRlciAtNjUxMzk3LjcxMiAtNzIzLjU5NjczIC0+IC0xNjAuNjU1MDAKK3hzdWIzOTQgc3VidHJhY3QgLTY1MTM5Ny43MTIgLTcyMy41OTY3MyAtPiAtNjUwNjc0LjExNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzOTUgYWRkIDg2LjY4OTA4OTIgOTQwMzgwODY0IC0+IDk0MDM4MDk1MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zOTUgY29tcGFyZSA4Ni42ODkwODkyIDk0MDM4MDg2NCAtPiAtMQoreGRpdjM5NSBkaXZpZGUgODYuNjg5MDg5MiA5NDAzODA4NjQgLT4gOS4yMTg1MDg0M0UtOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzOTUgZGl2aWRlaW50IDg2LjY4OTA4OTIgOTQwMzgwODY0IC0+IDAKK3htdWwzOTUgbXVsdGlwbHkgODYuNjg5MDg5MiA5NDAzODA4NjQgLT4gOC4xNTIwNzYwNkUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93Mzk1IHBvd2VyIDg2LjY4OTA4OTIgOTQwMzgwODY0IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTM5NSByZW1haW5kZXIgODYuNjg5MDg5MiA5NDAzODA4NjQgLT4gODYuNjg5MDg5MgoreHN1YjM5NSBzdWJ0cmFjdCA4Ni42ODkwODkyIDk0MDM4MDg2NCAtPiAtOTQwMzgwNzc3IEluZXhhY3QgUm91bmRlZAoreGFkZDM5NiBhZGQgNDg4MC4wNjQ0MkUtMzgyMjIyNjIxIC0xMTU2MjcyMzlFLTkxMjgzNDAzMSAtPiA0Ljg4MDA2NDQyRS0zODIyMjI2MTggSW5leGFjdCBSb3VuZGVkCit4Y29tMzk2IGNvbXBhcmUgNDg4MC4wNjQ0MkUtMzgyMjIyNjIxIC0xMTU2MjcyMzlFLTkxMjgzNDAzMSAtPiAxCit4ZGl2Mzk2IGRpdmlkZSA0ODgwLjA2NDQyRS0zODIyMjI2MjEgLTExNTYyNzIzOUUtOTEyODM0MDMxIC0+IC00LjIyMDUxNDUzRSs1MzA2MTE0MDUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzk2IGRpdmlkZWludCA0ODgwLjA2NDQyRS0zODIyMjI2MjEgLTExNTYyNzIzOUUtOTEyODM0MDMxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzk2IG11bHRpcGx5IDQ4ODAuMDY0NDJFLTM4MjIyMjYyMSAtMTE1NjI3MjM5RS05MTI4MzQwMzEgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzM5NiBwb3dlciA0ODgwLjA2NDQyRS0zODIyMjI2MjEgLTEgLT4gMi4wNDkxNTMyOEUrMzgyMjIyNjE3IEluZXhhY3QgUm91bmRlZAoreHJlbTM5NiByZW1haW5kZXIgNDg4MC4wNjQ0MkUtMzgyMjIyNjIxIC0xMTU2MjcyMzlFLTkxMjgzNDAzMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjM5NiBzdWJ0cmFjdCA0ODgwLjA2NDQyRS0zODIyMjI2MjEgLTExNTYyNzIzOUUtOTEyODM0MDMxIC0+IDQuODgwMDY0NDJFLTM4MjIyMjYxOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzOTcgYWRkIDE3MzM5ODI2NUUtNTMyMzgzMTU4IDM0NjIuNTE0NTBFKzgwOTg2OTE1IC0+IDMuNDYyNTE0NTBFKzgwOTg2OTE4IEluZXhhY3QgUm91bmRlZAoreGNvbTM5NyBjb21wYXJlIDE3MzM5ODI2NUUtNTMyMzgzMTU4IDM0NjIuNTE0NTBFKzgwOTg2OTE1IC0+IC0xCit4ZGl2Mzk3IGRpdmlkZSAxNzMzOTgyNjVFLTUzMjM4MzE1OCAzNDYyLjUxNDUwRSs4MDk4NjkxNSAtPiA1LjAwNzg3MTE2RS02MTMzNzAwNjkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzk3IGRpdmlkZWludCAxNzMzOTgyNjVFLTUzMjM4MzE1OCAzNDYyLjUxNDUwRSs4MDk4NjkxNSAtPiAwCit4bXVsMzk3IG11bHRpcGx5IDE3MzM5ODI2NUUtNTMyMzgzMTU4IDM0NjIuNTE0NTBFKzgwOTg2OTE1IC0+IDYuMDAzOTQwMDdFLTQ1MTM5NjIzMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czOTcgcG93ZXIgMTczMzk4MjY1RS01MzIzODMxNTggMyAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zOTcgcmVtYWluZGVyIDE3MzM5ODI2NUUtNTMyMzgzMTU4IDM0NjIuNTE0NTBFKzgwOTg2OTE1IC0+IDEuNzMzOTgyNjVFLTUzMjM4MzE1MAoreHN1YjM5NyBzdWJ0cmFjdCAxNzMzOTgyNjVFLTUzMjM4MzE1OCAzNDYyLjUxNDUwRSs4MDk4NjkxNSAtPiAtMy40NjI1MTQ1MEUrODA5ODY5MTggSW5leGFjdCBSb3VuZGVkCit4YWRkMzk4IGFkZCAtMTUyMjE3Ni43OCAtNjYzMTA2MS43NyAtPiAtODE1MzIzOC41NQoreGNvbTM5OCBjb21wYXJlIC0xNTIyMTc2Ljc4IC02NjMxMDYxLjc3IC0+IDEKK3hkaXYzOTggZGl2aWRlIC0xNTIyMTc2Ljc4IC02NjMxMDYxLjc3IC0+IDAuMjI5NTUyNDk2IEluZXhhY3QgUm91bmRlZAoreGR2aTM5OCBkaXZpZGVpbnQgLTE1MjIxNzYuNzggLTY2MzEwNjEuNzcgLT4gMAoreG11bDM5OCBtdWx0aXBseSAtMTUyMjE3Ni43OCAtNjYzMTA2MS43NyAtPiAxLjAwOTM2NDgzRSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czOTggcG93ZXIgLTE1MjIxNzYuNzggLTY2MzEwNjIgLT4gNC41NDI2ODg1NEUtNDA5OTYzMTAgSW5leGFjdCBSb3VuZGVkCit4cmVtMzk4IHJlbWFpbmRlciAtMTUyMjE3Ni43OCAtNjYzMTA2MS43NyAtPiAtMTUyMjE3Ni43OAoreHN1YjM5OCBzdWJ0cmFjdCAtMTUyMjE3Ni43OCAtNjYzMTA2MS43NyAtPiA1MTA4ODg0Ljk5Cit4YWRkMzk5IGFkZCA1MzguMTA0NTMgNTIyOTM0MzEwIC0+IDUyMjkzNDg0OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zOTkgY29tcGFyZSA1MzguMTA0NTMgNTIyOTM0MzEwIC0+IC0xCit4ZGl2Mzk5IGRpdmlkZSA1MzguMTA0NTMgNTIyOTM0MzEwIC0+IDAuMDAwMDAxMDI5MDA5ODAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzk5IGRpdmlkZWludCA1MzguMTA0NTMgNTIyOTM0MzEwIC0+IDAKK3htdWwzOTkgbXVsdGlwbHkgNTM4LjEwNDUzIDUyMjkzNDMxMCAtPiAyLjgxMzkzMzIxRSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czOTkgcG93ZXIgNTM4LjEwNDUzIDUyMjkzNDMxMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zOTkgcmVtYWluZGVyIDUzOC4xMDQ1MyA1MjI5MzQzMTAgLT4gNTM4LjEwNDUzCit4c3ViMzk5IHN1YnRyYWN0IDUzOC4xMDQ1MyA1MjI5MzQzMTAgLT4gLTUyMjkzMzc3MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MDAgYWRkIDg4MDI0My40NDRFLTc1MDk0MDk3NyAtMzU0LjYwMTU3OEUtMjA0OTQzNzQwIC0+IC0zLjU0NjAxNTc4RS0yMDQ5NDM3MzggSW5leGFjdCBSb3VuZGVkCit4Y29tNDAwIGNvbXBhcmUgODgwMjQzLjQ0NEUtNzUwOTQwOTc3IC0zNTQuNjAxNTc4RS0yMDQ5NDM3NDAgLT4gMQoreGRpdjQwMCBkaXZpZGUgODgwMjQzLjQ0NEUtNzUwOTQwOTc3IC0zNTQuNjAxNTc4RS0yMDQ5NDM3NDAgLT4gLTIuNDgyMzQ0OTdFLTU0NTk5NzIzNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MDAgZGl2aWRlaW50IDg4MDI0My40NDRFLTc1MDk0MDk3NyAtMzU0LjYwMTU3OEUtMjA0OTQzNzQwIC0+IC0wCit4bXVsNDAwIG11bHRpcGx5IDg4MDI0My40NDRFLTc1MDk0MDk3NyAtMzU0LjYwMTU3OEUtMjA0OTQzNzQwIC0+IC0zLjEyMTM1NzE0RS05NTU4ODQ3MDkgSW5leGFjdCBSb3VuZGVkCit4cG93NDAwIHBvd2VyIDg4MDI0My40NDRFLTc1MDk0MDk3NyAtNCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MDAgcmVtYWluZGVyIDg4MDI0My40NDRFLTc1MDk0MDk3NyAtMzU0LjYwMTU3OEUtMjA0OTQzNzQwIC0+IDguODAyNDM0NDRFLTc1MDk0MDk3MgoreHN1YjQwMCBzdWJ0cmFjdCA4ODAyNDMuNDQ0RS03NTA5NDA5NzcgLTM1NC42MDE1NzhFLTIwNDk0Mzc0MCAtPiAzLjU0NjAxNTc4RS0yMDQ5NDM3MzggSW5leGFjdCBSb3VuZGVkCit4YWRkNDAxIGFkZCA5NjgzNzAuNzgwIDY2NzcyNjguNzMgLT4gNzY0NTYzOS41MSBSb3VuZGVkCit4Y29tNDAxIGNvbXBhcmUgOTY4MzcwLjc4MCA2Njc3MjY4LjczIC0+IC0xCit4ZGl2NDAxIGRpdmlkZSA5NjgzNzAuNzgwIDY2NzcyNjguNzMgLT4gMC4xNDUwMjQ5ODIgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDAxIGRpdmlkZWludCA5NjgzNzAuNzgwIDY2NzcyNjguNzMgLT4gMAoreG11bDQwMSBtdWx0aXBseSA5NjgzNzAuNzgwIDY2NzcyNjguNzMgLT4gNi40NjYwNzE5M0UrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93NDAxIHBvd2VyIDk2ODM3MC43ODAgNjY3NzI2OSAtPiAzLjI5OTkwOTMxRSszOTk3MDQxMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MDEgcmVtYWluZGVyIDk2ODM3MC43ODAgNjY3NzI2OC43MyAtPiA5NjgzNzAuNzgwCit4c3ViNDAxIHN1YnRyYWN0IDk2ODM3MC43ODAgNjY3NzI2OC43MyAtPiAtNTcwODg5Ny45NSBSb3VuZGVkCit4YWRkNDAyIGFkZCAtOTcuNzQ3NDk0NSAzMTI0ODI0MS41IC0+IDMxMjQ4MTQzLjggSW5leGFjdCBSb3VuZGVkCit4Y29tNDAyIGNvbXBhcmUgLTk3Ljc0NzQ5NDUgMzEyNDgyNDEuNSAtPiAtMQoreGRpdjQwMiBkaXZpZGUgLTk3Ljc0NzQ5NDUgMzEyNDgyNDEuNSAtPiAtMC4wMDAwMDMxMjgwOTU4NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MDIgZGl2aWRlaW50IC05Ny43NDc0OTQ1IDMxMjQ4MjQxLjUgLT4gLTAKK3htdWw0MDIgbXVsdGlwbHkgLTk3Ljc0NzQ5NDUgMzEyNDgyNDEuNSAtPiAtMy4wNTQ0MzczMUUrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MDIgcG93ZXIgLTk3Ljc0NzQ5NDUgMzEyNDgyNDIgLT4gMi45MDcxNDI1N0UrNjIxODczMDIgSW5leGFjdCBSb3VuZGVkCit4cmVtNDAyIHJlbWFpbmRlciAtOTcuNzQ3NDk0NSAzMTI0ODI0MS41IC0+IC05Ny43NDc0OTQ1Cit4c3ViNDAyIHN1YnRyYWN0IC05Ny43NDc0OTQ1IDMxMjQ4MjQxLjUgLT4gLTMxMjQ4MzM5LjIgSW5leGFjdCBSb3VuZGVkCit4YWRkNDAzIGFkZCAtMTg3NTgyNzg2LkUrMzY5OTE2OTUyIDk1Nzg0MDQzNUUrNzQ0MzY1NTY3IC0+IDkuNTc4NDA0MzVFKzc0NDM2NTU3NSBJbmV4YWN0IFJvdW5kZWQKK3hjb200MDMgY29tcGFyZSAtMTg3NTgyNzg2LkUrMzY5OTE2OTUyIDk1Nzg0MDQzNUUrNzQ0MzY1NTY3IC0+IC0xCit4ZGl2NDAzIGRpdmlkZSAtMTg3NTgyNzg2LkUrMzY5OTE2OTUyIDk1Nzg0MDQzNUUrNzQ0MzY1NTY3IC0+IC0xLjk1ODM5Mjg1RS0zNzQ0NDg2MTYgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDAzIGRpdmlkZWludCAtMTg3NTgyNzg2LkUrMzY5OTE2OTUyIDk1Nzg0MDQzNUUrNzQ0MzY1NTY3IC0+IC0wCit4bXVsNDAzIG11bHRpcGx5IC0xODc1ODI3ODYuRSszNjk5MTY5NTIgOTU3ODQwNDM1RSs3NDQzNjU1NjcgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAoreHBvdzQwMyBwb3dlciAtMTg3NTgyNzg2LkUrMzY5OTE2OTUyIDEwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQwMyByZW1haW5kZXIgLTE4NzU4Mjc4Ni5FKzM2OTkxNjk1MiA5NTc4NDA0MzVFKzc0NDM2NTU2NyAtPiAtMS44NzU4Mjc4NkUrMzY5OTE2OTYwCit4c3ViNDAzIHN1YnRyYWN0IC0xODc1ODI3ODYuRSszNjk5MTY5NTIgOTU3ODQwNDM1RSs3NDQzNjU1NjcgLT4gLTkuNTc4NDA0MzVFKzc0NDM2NTU3NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MDQgYWRkIC0zMjgwMjYxNDQuIC0xMjU0OTk3MzUuIC0+IC00NTM1MjU4NzkKK3hjb200MDQgY29tcGFyZSAtMzI4MDI2MTQ0LiAtMTI1NDk5NzM1LiAtPiAtMQoreGRpdjQwNCBkaXZpZGUgLTMyODAyNjE0NC4gLTEyNTQ5OTczNS4gLT4gMi42MTM3NTk2NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MDQgZGl2aWRlaW50IC0zMjgwMjYxNDQuIC0xMjU0OTk3MzUuIC0+IDIKK3htdWw0MDQgbXVsdGlwbHkgLTMyODAyNjE0NC4gLTEyNTQ5OTczNS4gLT4gNC4xMTY3MTk0MUUrMTYgSW5leGFjdCBSb3VuZGVkCit4cG93NDA0IHBvd2VyIC0zMjgwMjYxNDQuIC0xMjU0OTk3MzUgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQwNCByZW1haW5kZXIgLTMyODAyNjE0NC4gLTEyNTQ5OTczNS4gLT4gLTc3MDI2Njc0Cit4c3ViNDA0IHN1YnRyYWN0IC0zMjgwMjYxNDQuIC0xMjU0OTk3MzUuIC0+IC0yMDI1MjY0MDkKK3hhZGQ0MDUgYWRkIC05OTQyNDE1MC4yRS01MjM2NjIxMDIgMzcxMi4zNTAzMCAtPiAzNzEyLjM1MDMwIEluZXhhY3QgUm91bmRlZAoreGNvbTQwNSBjb21wYXJlIC05OTQyNDE1MC4yRS01MjM2NjIxMDIgMzcxMi4zNTAzMCAtPiAtMQoreGRpdjQwNSBkaXZpZGUgLTk5NDI0MTUwLjJFLTUyMzY2MjEwMiAzNzEyLjM1MDMwIC0+IC0yLjY3ODE5OTU4RS01MjM2NjIwOTggSW5leGFjdCBSb3VuZGVkCit4ZHZpNDA1IGRpdmlkZWludCAtOTk0MjQxNTAuMkUtNTIzNjYyMTAyIDM3MTIuMzUwMzAgLT4gLTAKK3htdWw0MDUgbXVsdGlwbHkgLTk5NDI0MTUwLjJFLTUyMzY2MjEwMiAzNzEyLjM1MDMwIC0+IC0zLjY5MDk3Mjc0RS01MjM2NjIwOTEgSW5leGFjdCBSb3VuZGVkCit4cG93NDA1IHBvd2VyIC05OTQyNDE1MC4yRS01MjM2NjIxMDIgMzcxMiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00MDUgcmVtYWluZGVyIC05OTQyNDE1MC4yRS01MjM2NjIxMDIgMzcxMi4zNTAzMCAtPiAtOS45NDI0MTUwMkUtNTIzNjYyMDk1Cit4c3ViNDA1IHN1YnRyYWN0IC05OTQyNDE1MC4yRS01MjM2NjIxMDIgMzcxMi4zNTAzMCAtPiAtMzcxMi4zNTAzMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MDYgYWRkIDE0ODM4LjA3MTggOTQ4OTg5My4yOEUrODMwNjMxMjY2IC0+IDkuNDg5ODkzMjhFKzgzMDYzMTI3MiBJbmV4YWN0IFJvdW5kZWQKK3hjb200MDYgY29tcGFyZSAxNDgzOC4wNzE4IDk0ODk4OTMuMjhFKzgzMDYzMTI2NiAtPiAtMQoreGRpdjQwNiBkaXZpZGUgMTQ4MzguMDcxOCA5NDg5ODkzLjI4RSs4MzA2MzEyNjYgLT4gMS41NjM1NjU3MkUtODMwNjMxMjY5IEluZXhhY3QgUm91bmRlZAoreGR2aTQwNiBkaXZpZGVpbnQgMTQ4MzguMDcxOCA5NDg5ODkzLjI4RSs4MzA2MzEyNjYgLT4gMAoreG11bDQwNiBtdWx0aXBseSAxNDgzOC4wNzE4IDk0ODk4OTMuMjhFKzgzMDYzMTI2NiAtPiAxLjQwODExNzE4RSs4MzA2MzEyNzcgSW5leGFjdCBSb3VuZGVkCit4cG93NDA2IHBvd2VyIDE0ODM4LjA3MTggOSAtPiAzLjQ4NjU2MDU3RSszNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MDYgcmVtYWluZGVyIDE0ODM4LjA3MTggOTQ4OTg5My4yOEUrODMwNjMxMjY2IC0+IDE0ODM4LjA3MTgKK3hzdWI0MDYgc3VidHJhY3QgMTQ4MzguMDcxOCA5NDg5ODkzLjI4RSs4MzA2MzEyNjYgLT4gLTkuNDg5ODkzMjhFKzgzMDYzMTI3MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MDcgYWRkIDcxMjA3NDcyLjggLTMxODM1LjA4MDkgLT4gNzExNzU2MzcuNyBJbmV4YWN0IFJvdW5kZWQKK3hjb200MDcgY29tcGFyZSA3MTIwNzQ3Mi44IC0zMTgzNS4wODA5IC0+IDEKK3hkaXY0MDcgZGl2aWRlIDcxMjA3NDcyLjggLTMxODM1LjA4MDkgLT4gLTIyMzYuNzYxMTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDA3IGRpdmlkZWludCA3MTIwNzQ3Mi44IC0zMTgzNS4wODA5IC0+IC0yMjM2Cit4bXVsNDA3IG11bHRpcGx5IDcxMjA3NDcyLjggLTMxODM1LjA4MDkgLT4gLTIuMjY2ODk1NjZFKzEyIEluZXhhY3QgUm91bmRlZAoreHBvdzQwNyBwb3dlciA3MTIwNzQ3Mi44IC0zMTgzNSAtPiA3LjA1MzMzOTUzRS0yNDk5ODYgSW5leGFjdCBSb3VuZGVkCit4cmVtNDA3IHJlbWFpbmRlciA3MTIwNzQ3Mi44IC0zMTgzNS4wODA5IC0+IDI0MjMxLjkwNzYKK3hzdWI0MDcgc3VidHJhY3QgNzEyMDc0NzIuOCAtMzE4MzUuMDgwOSAtPiA3MTIzOTMwNy45IEluZXhhY3QgUm91bmRlZAoreGFkZDQwOCBhZGQgLTIwNDQwLjQzOTQgLTQ0LjQwNjQzMjhFKzUxMTA4NTgwNiAtPiAtNC40NDA2NDMyOEUrNTExMDg1ODA3IEluZXhhY3QgUm91bmRlZAoreGNvbTQwOCBjb21wYXJlIC0yMDQ0MC40Mzk0IC00NC40MDY0MzI4RSs1MTEwODU4MDYgLT4gMQoreGRpdjQwOCBkaXZpZGUgLTIwNDQwLjQzOTQgLTQ0LjQwNjQzMjhFKzUxMTA4NTgwNiAtPiA0LjYwMzAzNTY3RS01MTEwODU4MDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDA4IGRpdmlkZWludCAtMjA0NDAuNDM5NCAtNDQuNDA2NDMyOEUrNTExMDg1ODA2IC0+IDAKK3htdWw0MDggbXVsdGlwbHkgLTIwNDQwLjQzOTQgLTQ0LjQwNjQzMjhFKzUxMTA4NTgwNiAtPiA5LjA3Njg2OTk5RSs1MTEwODU4MTEgSW5leGFjdCBSb3VuZGVkCit4cG93NDA4IHBvd2VyIC0yMDQ0MC40Mzk0IC00IC0+IDUuNzI4NDc1OTBFLTE4IEluZXhhY3QgUm91bmRlZAoreHJlbTQwOCByZW1haW5kZXIgLTIwNDQwLjQzOTQgLTQ0LjQwNjQzMjhFKzUxMTA4NTgwNiAtPiAtMjA0NDAuNDM5NAoreHN1YjQwOCBzdWJ0cmFjdCAtMjA0NDAuNDM5NCAtNDQuNDA2NDMyOEUrNTExMDg1ODA2IC0+IDQuNDQwNjQzMjhFKzUxMTA4NTgwNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MDkgYWRkIC01NC4zNjg0MTcxRS04MDcyMTAxOTIgMS4wNDU5Mjk3M0UtOTg0MDQxODA3IC0+IC01LjQzNjg0MTcxRS04MDcyMTAxOTEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDA5IGNvbXBhcmUgLTU0LjM2ODQxNzFFLTgwNzIxMDE5MiAxLjA0NTkyOTczRS05ODQwNDE4MDcgLT4gLTEKK3hkaXY0MDkgZGl2aWRlIC01NC4zNjg0MTcxRS04MDcyMTAxOTIgMS4wNDU5Mjk3M0UtOTg0MDQxODA3IC0+IC01LjE5ODA5NDYzRSsxNzY4MzE2MTYgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDA5IGRpdmlkZWludCAtNTQuMzY4NDE3MUUtODA3MjEwMTkyIDEuMDQ1OTI5NzNFLTk4NDA0MTgwNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQwOSBtdWx0aXBseSAtNTQuMzY4NDE3MUUtODA3MjEwMTkyIDEuMDQ1OTI5NzNFLTk4NDA0MTgwNyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cG93NDA5IHBvd2VyIC01NC4zNjg0MTcxRS04MDcyMTAxOTIgMSAtPiAtNS40MzY4NDE3MUUtODA3MjEwMTkxCit4cmVtNDA5IHJlbWFpbmRlciAtNTQuMzY4NDE3MUUtODA3MjEwMTkyIDEuMDQ1OTI5NzNFLTk4NDA0MTgwNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQwOSBzdWJ0cmFjdCAtNTQuMzY4NDE3MUUtODA3MjEwMTkyIDEuMDQ1OTI5NzNFLTk4NDA0MTgwNyAtPiAtNS40MzY4NDE3MUUtODA3MjEwMTkxIEluZXhhY3QgUm91bmRlZAoreGFkZDQxMCBhZGQgNTQzMTAwNjAuNUUrOTQ4MTU5NzM5IDI3NDMyMDcwMS5FKzIwNTg4MDQ4NCAtPiA1LjQzMTAwNjA1RSs5NDgxNTk3NDYgSW5leGFjdCBSb3VuZGVkCit4Y29tNDEwIGNvbXBhcmUgNTQzMTAwNjAuNUUrOTQ4MTU5NzM5IDI3NDMyMDcwMS5FKzIwNTg4MDQ4NCAtPiAxCit4ZGl2NDEwIGRpdmlkZSA1NDMxMDA2MC41RSs5NDgxNTk3MzkgMjc0MzIwNzAxLkUrMjA1ODgwNDg0IC0+IDEuOTc5ODAxNzVFKzc0MjI3OTI1NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MTAgZGl2aWRlaW50IDU0MzEwMDYwLjVFKzk0ODE1OTczOSAyNzQzMjA3MDEuRSsyMDU4ODA0ODQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0MTAgbXVsdGlwbHkgNTQzMTAwNjAuNUUrOTQ4MTU5NzM5IDI3NDMyMDcwMS5FKzIwNTg4MDQ4NCAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hwb3c0MTAgcG93ZXIgNTQzMTAwNjAuNUUrOTQ4MTU5NzM5IDMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtNDEwIHJlbWFpbmRlciA1NDMxMDA2MC41RSs5NDgxNTk3MzkgMjc0MzIwNzAxLkUrMjA1ODgwNDg0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDEwIHN1YnRyYWN0IDU0MzEwMDYwLjVFKzk0ODE1OTczOSAyNzQzMjA3MDEuRSsyMDU4ODA0ODQgLT4gNS40MzEwMDYwNUUrOTQ4MTU5NzQ2IEluZXhhY3QgUm91bmRlZAoreGFkZDQxMSBhZGQgLTY1Ny4xODY3MDIgNDI2ODQ0LjM5IC0+IDQyNjE4Ny4yMDMgSW5leGFjdCBSb3VuZGVkCit4Y29tNDExIGNvbXBhcmUgLTY1Ny4xODY3MDIgNDI2ODQ0LjM5IC0+IC0xCit4ZGl2NDExIGRpdmlkZSAtNjU3LjE4NjcwMiA0MjY4NDQuMzkgLT4gLTAuMDAxNTM5NjQwMDEgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDExIGRpdmlkZWludCAtNjU3LjE4NjcwMiA0MjY4NDQuMzkgLT4gLTAKK3htdWw0MTEgbXVsdGlwbHkgLTY1Ny4xODY3MDIgNDI2ODQ0LjM5IC0+IC0yODA1MTY0NTcgSW5leGFjdCBSb3VuZGVkCit4cG93NDExIHBvd2VyIC02NTcuMTg2NzAyIDQyNjg0NCAtPiAzLjUwMDAwNTc1RSsxMjAyNzEzIEluZXhhY3QgUm91bmRlZAoreHJlbTQxMSByZW1haW5kZXIgLTY1Ny4xODY3MDIgNDI2ODQ0LjM5IC0+IC02NTcuMTg2NzAyCit4c3ViNDExIHN1YnRyYWN0IC02NTcuMTg2NzAyIDQyNjg0NC4zOSAtPiAtNDI3NTAxLjU3NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MTIgYWRkIC00MTU5MzA3Ny4wIC02ODg2MDcuNTY0IC0+IC00MjI4MTY4NC42IEluZXhhY3QgUm91bmRlZAoreGNvbTQxMiBjb21wYXJlIC00MTU5MzA3Ny4wIC02ODg2MDcuNTY0IC0+IC0xCit4ZGl2NDEyIGRpdmlkZSAtNDE1OTMwNzcuMCAtNjg4NjA3LjU2NCAtPiA2MC40MDE3MTM4IEluZXhhY3QgUm91bmRlZAoreGR2aTQxMiBkaXZpZGVpbnQgLTQxNTkzMDc3LjAgLTY4ODYwNy41NjQgLT4gNjAKK3htdWw0MTIgbXVsdGlwbHkgLTQxNTkzMDc3LjAgLTY4ODYwNy41NjQgLT4gMi44NjQxMzA3NEUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93NDEyIHBvd2VyIC00MTU5MzA3Ny4wIC02ODg2MDggLT4gMS40MjE1MDc1MEUtNTI0NjUxOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MTIgcmVtYWluZGVyIC00MTU5MzA3Ny4wIC02ODg2MDcuNTY0IC0+IC0yNzY2MjMuMTYwCit4c3ViNDEyIHN1YnRyYWN0IC00MTU5MzA3Ny4wIC02ODg2MDcuNTY0IC0+IC00MDkwNDQ2OS40IEluZXhhY3QgUm91bmRlZAoreGFkZDQxMyBhZGQgLTU3ODYuMzgxMzIgMTkwNTU2NjUyLkUrMTc3MDQ1ODc3IC0+IDEuOTA1NTY2NTJFKzE3NzA0NTg4NSBJbmV4YWN0IFJvdW5kZWQKK3hjb200MTMgY29tcGFyZSAtNTc4Ni4zODEzMiAxOTA1NTY2NTIuRSsxNzcwNDU4NzcgLT4gLTEKK3hkaXY0MTMgZGl2aWRlIC01Nzg2LjM4MTMyIDE5MDU1NjY1Mi5FKzE3NzA0NTg3NyAtPiAtMy4wMzY1Njc0OEUtMTc3MDQ1ODgyIEluZXhhY3QgUm91bmRlZAoreGR2aTQxMyBkaXZpZGVpbnQgLTU3ODYuMzgxMzIgMTkwNTU2NjUyLkUrMTc3MDQ1ODc3IC0+IC0wCit4bXVsNDEzIG11bHRpcGx5IC01Nzg2LjM4MTMyIDE5MDU1NjY1Mi5FKzE3NzA0NTg3NyAtPiAtMS4xMDI2MzM0NUUrMTc3MDQ1ODg5IEluZXhhY3QgUm91bmRlZAoreHBvdzQxMyBwb3dlciAtNTc4Ni4zODEzMiAyIC0+IDMzNDgyMjA4LjggSW5leGFjdCBSb3VuZGVkCit4cmVtNDEzIHJlbWFpbmRlciAtNTc4Ni4zODEzMiAxOTA1NTY2NTIuRSsxNzcwNDU4NzcgLT4gLTU3ODYuMzgxMzIKK3hzdWI0MTMgc3VidHJhY3QgLTU3ODYuMzgxMzIgMTkwNTU2NjUyLkUrMTc3MDQ1ODc3IC0+IC0xLjkwNTU2NjUyRSsxNzcwNDU4ODUgSW5leGFjdCBSb3VuZGVkCit4YWRkNDE0IGFkZCA3Mzc2MjIuOTc0IC0yNDE1NjA2OTNFKzI0OTUwNjU2NSAtPiAtMi40MTU2MDY5M0UrMjQ5NTA2NTczIEluZXhhY3QgUm91bmRlZAoreGNvbTQxNCBjb21wYXJlIDczNzYyMi45NzQgLTI0MTU2MDY5M0UrMjQ5NTA2NTY1IC0+IDEKK3hkaXY0MTQgZGl2aWRlIDczNzYyMi45NzQgLTI0MTU2MDY5M0UrMjQ5NTA2NTY1IC0+IC0zLjA1MzU3MjAyRS0yNDk1MDY1NjggSW5leGFjdCBSb3VuZGVkCit4ZHZpNDE0IGRpdmlkZWludCA3Mzc2MjIuOTc0IC0yNDE1NjA2OTNFKzI0OTUwNjU2NSAtPiAtMAoreG11bDQxNCBtdWx0aXBseSA3Mzc2MjIuOTc0IC0yNDE1NjA2OTNFKzI0OTUwNjU2NSAtPiAtMS43ODE4MDcxN0UrMjQ5NTA2NTc5IEluZXhhY3QgUm91bmRlZAoreHBvdzQxNCBwb3dlciA3Mzc2MjIuOTc0IC0yIC0+IDEuODM3OTM5MTZFLTEyIEluZXhhY3QgUm91bmRlZAoreHJlbTQxNCByZW1haW5kZXIgNzM3NjIyLjk3NCAtMjQxNTYwNjkzRSsyNDk1MDY1NjUgLT4gNzM3NjIyLjk3NAoreHN1YjQxNCBzdWJ0cmFjdCA3Mzc2MjIuOTc0IC0yNDE1NjA2OTNFKzI0OTUwNjU2NSAtPiAyLjQxNTYwNjkzRSsyNDk1MDY1NzMgSW5leGFjdCBSb3VuZGVkCit4YWRkNDE1IGFkZCA1NjE1MzczLjUyIC03LjI3NTgzODA4RS05NDk3ODEwNDggLT4gNTYxNTM3My41MiBJbmV4YWN0IFJvdW5kZWQKK3hjb200MTUgY29tcGFyZSA1NjE1MzczLjUyIC03LjI3NTgzODA4RS05NDk3ODEwNDggLT4gMQoreGRpdjQxNSBkaXZpZGUgNTYxNTM3My41MiAtNy4yNzU4MzgwOEUtOTQ5NzgxMDQ4IC0+IC03LjcxNzgzNzM5RSs5NDk3ODEwNTMgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDE1IGRpdmlkZWludCA1NjE1MzczLjUyIC03LjI3NTgzODA4RS05NDk3ODEwNDggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0MTUgbXVsdGlwbHkgNTYxNTM3My41MiAtNy4yNzU4MzgwOEUtOTQ5NzgxMDQ4IC0+IC00LjA4NTY1NDg1RS05NDk3ODEwNDEgSW5leGFjdCBSb3VuZGVkCit4cG93NDE1IHBvd2VyIDU2MTUzNzMuNTIgLTcgLT4gNS42ODAwMTQ2MEUtNDggSW5leGFjdCBSb3VuZGVkCit4cmVtNDE1IHJlbWFpbmRlciA1NjE1MzczLjUyIC03LjI3NTgzODA4RS05NDk3ODEwNDggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0MTUgc3VidHJhY3QgNTYxNTM3My41MiAtNy4yNzU4MzgwOEUtOTQ5NzgxMDQ4IC0+IDU2MTUzNzMuNTIgSW5leGFjdCBSb3VuZGVkCit4YWRkNDE2IGFkZCA2NDQxMzYuMTc5IC04MzU3MDguMTAzIC0+IC0xOTE1NzEuOTI0Cit4Y29tNDE2IGNvbXBhcmUgNjQ0MTM2LjE3OSAtODM1NzA4LjEwMyAtPiAxCit4ZGl2NDE2IGRpdmlkZSA2NDQxMzYuMTc5IC04MzU3MDguMTAzIC0+IC0wLjc3MDc2Njk0MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MTYgZGl2aWRlaW50IDY0NDEzNi4xNzkgLTgzNTcwOC4xMDMgLT4gLTAKK3htdWw0MTYgbXVsdGlwbHkgNjQ0MTM2LjE3OSAtODM1NzA4LjEwMyAtPiAtNS4zODMwOTgyNEUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93NDE2IHBvd2VyIDY0NDEzNi4xNzkgLTgzNTcwOCAtPiA3LjQxOTM2ODU4RS00ODU0NjEwIEluZXhhY3QgUm91bmRlZAoreHJlbTQxNiByZW1haW5kZXIgNjQ0MTM2LjE3OSAtODM1NzA4LjEwMyAtPiA2NDQxMzYuMTc5Cit4c3ViNDE2IHN1YnRyYWN0IDY0NDEzNi4xNzkgLTgzNTcwOC4xMDMgLT4gMTQ3OTg0NC4yOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MTcgYWRkIC0zMDcuNDE5NTIxRSs0NjY4NjE4NDMgLTczODY4OTk3Ni5FLTE5OTAzMjcxMSAtPiAtMy4wNzQxOTUyMUUrNDY2ODYxODQ1IEluZXhhY3QgUm91bmRlZAoreGNvbTQxNyBjb21wYXJlIC0zMDcuNDE5NTIxRSs0NjY4NjE4NDMgLTczODY4OTk3Ni5FLTE5OTAzMjcxMSAtPiAtMQoreGRpdjQxNyBkaXZpZGUgLTMwNy40MTk1MjFFKzQ2Njg2MTg0MyAtNzM4Njg5OTc2LkUtMTk5MDMyNzExIC0+IDQuMTYxNjg1MjlFKzY2NTg5NDU0NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MTcgZGl2aWRlaW50IC0zMDcuNDE5NTIxRSs0NjY4NjE4NDMgLTczODY4OTk3Ni5FLTE5OTAzMjcxMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQxNyBtdWx0aXBseSAtMzA3LjQxOTUyMUUrNDY2ODYxODQzIC03Mzg2ODk5NzYuRS0xOTkwMzI3MTEgLT4gMi4yNzA4NzcxOUUrMjY3ODI5MTQzIEluZXhhY3QgUm91bmRlZAoreHBvdzQxNyBwb3dlciAtMzA3LjQxOTUyMUUrNDY2ODYxODQzIC03IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00MTcgcmVtYWluZGVyIC0zMDcuNDE5NTIxRSs0NjY4NjE4NDMgLTczODY4OTk3Ni5FLTE5OTAzMjcxMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQxNyBzdWJ0cmFjdCAtMzA3LjQxOTUyMUUrNDY2ODYxODQzIC03Mzg2ODk5NzYuRS0xOTkwMzI3MTEgLT4gLTMuMDc0MTk1MjFFKzQ2Njg2MTg0NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MTggYWRkIC02MTk2NDIuMTMwIC0yMjY3NDA1MzcuRS05MDI1OTAxNTMgLT4gLTYxOTY0Mi4xMzAgSW5leGFjdCBSb3VuZGVkCit4Y29tNDE4IGNvbXBhcmUgLTYxOTY0Mi4xMzAgLTIyNjc0MDUzNy5FLTkwMjU5MDE1MyAtPiAtMQoreGRpdjQxOCBkaXZpZGUgLTYxOTY0Mi4xMzAgLTIyNjc0MDUzNy5FLTkwMjU5MDE1MyAtPiAyLjczMjgyNDY2RSs5MDI1OTAxNTAgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDE4IGRpdmlkZWludCAtNjE5NjQyLjEzMCAtMjI2NzQwNTM3LkUtOTAyNTkwMTUzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDE4IG11bHRpcGx5IC02MTk2NDIuMTMwIC0yMjY3NDA1MzcuRS05MDI1OTAxNTMgLT4gMS40MDQ5Nzk4OUUtOTAyNTkwMTM5IEluZXhhY3QgUm91bmRlZAoreHBvdzQxOCBwb3dlciAtNjE5NjQyLjEzMCAtMiAtPiAyLjYwNDQ2MjU5RS0xMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MTggcmVtYWluZGVyIC02MTk2NDIuMTMwIC0yMjY3NDA1MzcuRS05MDI1OTAxNTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0MTggc3VidHJhY3QgLTYxOTY0Mi4xMzAgLTIyNjc0MDUzNy5FLTkwMjU5MDE1MyAtPiAtNjE5NjQyLjEzMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MTkgYWRkIC0zMTA2OC43NTQ5IC0zLjQxNDk1MDQyRSs4NjAwMTM3OSAtPiAtMy40MTQ5NTA0MkUrODYwMDEzNzkgSW5leGFjdCBSb3VuZGVkCit4Y29tNDE5IGNvbXBhcmUgLTMxMDY4Ljc1NDkgLTMuNDE0OTUwNDJFKzg2MDAxMzc5IC0+IDEKK3hkaXY0MTkgZGl2aWRlIC0zMTA2OC43NTQ5IC0zLjQxNDk1MDQyRSs4NjAwMTM3OSAtPiA5LjA5Nzg2NDEyRS04NjAwMTM3NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MTkgZGl2aWRlaW50IC0zMTA2OC43NTQ5IC0zLjQxNDk1MDQyRSs4NjAwMTM3OSAtPiAwCit4bXVsNDE5IG11bHRpcGx5IC0zMTA2OC43NTQ5IC0zLjQxNDk1MDQyRSs4NjAwMTM3OSAtPiAxLjA2MDk4MjU4RSs4NjAwMTM4NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MTkgcG93ZXIgLTMxMDY4Ljc1NDkgLTMgLT4gLTMuMzM0NDgyNThFLTE0IEluZXhhY3QgUm91bmRlZAoreHJlbTQxOSByZW1haW5kZXIgLTMxMDY4Ljc1NDkgLTMuNDE0OTUwNDJFKzg2MDAxMzc5IC0+IC0zMTA2OC43NTQ5Cit4c3ViNDE5IHN1YnRyYWN0IC0zMTA2OC43NTQ5IC0zLjQxNDk1MDQyRSs4NjAwMTM3OSAtPiAzLjQxNDk1MDQyRSs4NjAwMTM3OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MjAgYWRkIC02ODk1MTE3My4gLTIxMTgwNDk3Ny5FLTk3MzE4MTI2IC0+IC02ODk1MTE3My4wIEluZXhhY3QgUm91bmRlZAoreGNvbTQyMCBjb21wYXJlIC02ODk1MTE3My4gLTIxMTgwNDk3Ny5FLTk3MzE4MTI2IC0+IC0xCit4ZGl2NDIwIGRpdmlkZSAtNjg5NTExNzMuIC0yMTE4MDQ5NzcuRS05NzMxODEyNiAtPiAzLjI1NTQwODU0RSs5NzMxODEyNSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MjAgZGl2aWRlaW50IC02ODk1MTE3My4gLTIxMTgwNDk3Ny5FLTk3MzE4MTI2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDIwIG11bHRpcGx5IC02ODk1MTE3My4gLTIxMTgwNDk3Ny5FLTk3MzE4MTI2IC0+IDEuNDYwNDIwMTZFLTk3MzE4MTEwIEluZXhhY3QgUm91bmRlZAoreHBvdzQyMCBwb3dlciAtNjg5NTExNzMuIC0yIC0+IDIuMTAzMzc0ODhFLTE2IEluZXhhY3QgUm91bmRlZAoreHJlbTQyMCByZW1haW5kZXIgLTY4OTUxMTczLiAtMjExODA0OTc3LkUtOTczMTgxMjYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0MjAgc3VidHJhY3QgLTY4OTUxMTczLiAtMjExODA0OTc3LkUtOTczMTgxMjYgLT4gLTY4OTUxMTczLjAgSW5leGFjdCBSb3VuZGVkCit4YWRkNDIxIGFkZCAtNC4wOTQ5MjU3MUUtMzAxNzQ5NDkwIDQzNC4yMDE5OUUtNzQ5MzkwOTUyIC0+IC00LjA5NDkyNTcxRS0zMDE3NDk0OTAgSW5leGFjdCBSb3VuZGVkCit4Y29tNDIxIGNvbXBhcmUgLTQuMDk0OTI1NzFFLTMwMTc0OTQ5MCA0MzQuMjAxOTlFLTc0OTM5MDk1MiAtPiAtMQoreGRpdjQyMSBkaXZpZGUgLTQuMDk0OTI1NzFFLTMwMTc0OTQ5MCA0MzQuMjAxOTlFLTc0OTM5MDk1MiAtPiAtOS40MzA5MjM0MUUrNDQ3NjQxNDU5IEluZXhhY3QgUm91bmRlZAoreGR2aTQyMSBkaXZpZGVpbnQgLTQuMDk0OTI1NzFFLTMwMTc0OTQ5MCA0MzQuMjAxOTlFLTc0OTM5MDk1MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQyMSBtdWx0aXBseSAtNC4wOTQ5MjU3MUUtMzAxNzQ5NDkwIDQzNC4yMDE5OUUtNzQ5MzkwOTUyIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hwb3c0MjEgcG93ZXIgLTQuMDk0OTI1NzFFLTMwMTc0OTQ5MCA0IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQyMSByZW1haW5kZXIgLTQuMDk0OTI1NzFFLTMwMTc0OTQ5MCA0MzQuMjAxOTlFLTc0OTM5MDk1MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQyMSBzdWJ0cmFjdCAtNC4wOTQ5MjU3MUUtMzAxNzQ5NDkwIDQzNC4yMDE5OUUtNzQ5MzkwOTUyIC0+IC00LjA5NDkyNTcxRS0zMDE3NDk0OTAgSW5leGFjdCBSb3VuZGVkCit4YWRkNDIyIGFkZCAzODk4LjAzMTg4IC04MjU3Mi42MTUgLT4gLTc4Njc0LjU4MzEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDIyIGNvbXBhcmUgMzg5OC4wMzE4OCAtODI1NzIuNjE1IC0+IDEKK3hkaXY0MjIgZGl2aWRlIDM4OTguMDMxODggLTgyNTcyLjYxNSAtPiAtMC4wNDcyMDczMjAyIEluZXhhY3QgUm91bmRlZAoreGR2aTQyMiBkaXZpZGVpbnQgMzg5OC4wMzE4OCAtODI1NzIuNjE1IC0+IC0wCit4bXVsNDIyIG11bHRpcGx5IDM4OTguMDMxODggLTgyNTcyLjYxNSAtPiAtMzIxODcwNjg2IEluZXhhY3QgUm91bmRlZAoreHBvdzQyMiBwb3dlciAzODk4LjAzMTg4IC04MjU3MyAtPiAxLjMzMDEwNzM3RS0yOTY1MDcgSW5leGFjdCBSb3VuZGVkCit4cmVtNDIyIHJlbWFpbmRlciAzODk4LjAzMTg4IC04MjU3Mi42MTUgLT4gMzg5OC4wMzE4OAoreHN1YjQyMiBzdWJ0cmFjdCAzODk4LjAzMTg4IC04MjU3Mi42MTUgLT4gODY0NzAuNjQ2OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MjMgYWRkIC0xLjc2MTkzNTYgLTI1NDYuNjQwNDMgLT4gLTI1NDguNDAyMzcgSW5leGFjdCBSb3VuZGVkCit4Y29tNDIzIGNvbXBhcmUgLTEuNzYxOTM1NiAtMjU0Ni42NDA0MyAtPiAxCit4ZGl2NDIzIGRpdmlkZSAtMS43NjE5MzU2IC0yNTQ2LjY0MDQzIC0+IDAuMDAwNjkxODY2NjU3IEluZXhhY3QgUm91bmRlZAoreGR2aTQyMyBkaXZpZGVpbnQgLTEuNzYxOTM1NiAtMjU0Ni42NDA0MyAtPiAwCit4bXVsNDIzIG11bHRpcGx5IC0xLjc2MTkzNTYgLTI1NDYuNjQwNDMgLT4gNDQ4Ny4wMTY0MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MjMgcG93ZXIgLTEuNzYxOTM1NiAtMjU0NyAtPiAtMi45MDY2NDU1N0UtNjI3IEluZXhhY3QgUm91bmRlZAoreHJlbTQyMyByZW1haW5kZXIgLTEuNzYxOTM1NiAtMjU0Ni42NDA0MyAtPiAtMS43NjE5MzU2Cit4c3ViNDIzIHN1YnRyYWN0IC0xLjc2MTkzNTYgLTI1NDYuNjQwNDMgLT4gMjU0NC44Nzg0OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MjQgYWRkIDU5NzE0LjE5NjggMjk3MzQzODguNkUtNTY0NTI1NTI1IC0+IDU5NzE0LjE5NjggSW5leGFjdCBSb3VuZGVkCit4Y29tNDI0IGNvbXBhcmUgNTk3MTQuMTk2OCAyOTczNDM4OC42RS01NjQ1MjU1MjUgLT4gMQoreGRpdjQyNCBkaXZpZGUgNTk3MTQuMTk2OCAyOTczNDM4OC42RS01NjQ1MjU1MjUgLT4gMi4wMDgyNTM3M0UrNTY0NTI1NTIyIEluZXhhY3QgUm91bmRlZAoreGR2aTQyNCBkaXZpZGVpbnQgNTk3MTQuMTk2OCAyOTczNDM4OC42RS01NjQ1MjU1MjUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0MjQgbXVsdGlwbHkgNTk3MTQuMTk2OCAyOTczNDM4OC42RS01NjQ1MjU1MjUgLT4gMS43NzU1NjUxM0UtNTY0NTI1NTEzIEluZXhhY3QgUm91bmRlZAoreHBvdzQyNCBwb3dlciA1OTcxNC4xOTY4IDMgLT4gMi4xMjkyODAwNUUrMTQgSW5leGFjdCBSb3VuZGVkCit4cmVtNDI0IHJlbWFpbmRlciA1OTcxNC4xOTY4IDI5NzM0Mzg4LjZFLTU2NDUyNTUyNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQyNCBzdWJ0cmFjdCA1OTcxNC4xOTY4IDI5NzM0Mzg4LjZFLTU2NDUyNTUyNSAtPiA1OTcxNC4xOTY4IEluZXhhY3QgUm91bmRlZAoreGFkZDQyNSBhZGQgNi44ODg5MTEzNkUtOTM1NDY3Mzk1IC03ODUwNDkuNTYyRS03NDE2NzE0NDIgLT4gLTcuODUwNDk1NjJFLTc0MTY3MTQzNyBJbmV4YWN0IFJvdW5kZWQKK3hjb200MjUgY29tcGFyZSA2Ljg4ODkxMTM2RS05MzU0NjczOTUgLTc4NTA0OS41NjJFLTc0MTY3MTQ0MiAtPiAxCit4ZGl2NDI1IGRpdmlkZSA2Ljg4ODkxMTM2RS05MzU0NjczOTUgLTc4NTA0OS41NjJFLTc0MTY3MTQ0MiAtPiAtOC43NzUxMjkyM0UtMTkzNzk1OTU5IEluZXhhY3QgUm91bmRlZAoreGR2aTQyNSBkaXZpZGVpbnQgNi44ODg5MTEzNkUtOTM1NDY3Mzk1IC03ODUwNDkuNTYyRS03NDE2NzE0NDIgLT4gLTAKK3htdWw0MjUgbXVsdGlwbHkgNi44ODg5MTEzNkUtOTM1NDY3Mzk1IC03ODUwNDkuNTYyRS03NDE2NzE0NDIgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzQyNSBwb3dlciA2Ljg4ODkxMTM2RS05MzU0NjczOTUgLTggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtNDI1IHJlbWFpbmRlciA2Ljg4ODkxMTM2RS05MzU0NjczOTUgLTc4NTA0OS41NjJFLTc0MTY3MTQ0MiAtPiA2Ljg4ODkxMTM2RS05MzU0NjczOTUKK3hzdWI0MjUgc3VidHJhY3QgNi44ODg5MTEzNkUtOTM1NDY3Mzk1IC03ODUwNDkuNTYyRS03NDE2NzE0NDIgLT4gNy44NTA0OTU2MkUtNzQxNjcxNDM3IEluZXhhY3QgUm91bmRlZAoreGFkZDQyNiBhZGQgOTc1NTY2MjUxIC01MTkuODU4NTMwIC0+IDk3NTU2NTczMSBJbmV4YWN0IFJvdW5kZWQKK3hjb200MjYgY29tcGFyZSA5NzU1NjYyNTEgLTUxOS44NTg1MzAgLT4gMQoreGRpdjQyNiBkaXZpZGUgOTc1NTY2MjUxIC01MTkuODU4NTMwIC0+IC0xODc2NTk5LjQ5IEluZXhhY3QgUm91bmRlZAoreGR2aTQyNiBkaXZpZGVpbnQgOTc1NTY2MjUxIC01MTkuODU4NTMwIC0+IC0xODc2NTk5Cit4bXVsNDI2IG11bHRpcGx5IDk3NTU2NjI1MSAtNTE5Ljg1ODUzMCAtPiAtNS4wNzE1NjQzN0UrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93NDI2IHBvd2VyIDk3NTU2NjI1MSAtNTIwIC0+IDMuODU5MDUzMDBFLTQ2NzUgSW5leGFjdCBSb3VuZGVkCit4cmVtNDI2IHJlbWFpbmRlciA5NzU1NjYyNTEgLTUxOS44NTg1MzAgLT4gMjUzLjQ2MDUzMAoreHN1YjQyNiBzdWJ0cmFjdCA5NzU1NjYyNTEgLTUxOS44NTg1MzAgLT4gOTc1NTY2NzcxIEluZXhhY3QgUm91bmRlZAoreGFkZDQyNyBhZGQgMzA3NDAxOTU0IC0yMzE0ODE1ODIuIC0+IDc1OTIwMzcyCit4Y29tNDI3IGNvbXBhcmUgMzA3NDAxOTU0IC0yMzE0ODE1ODIuIC0+IDEKK3hkaXY0MjcgZGl2aWRlIDMwNzQwMTk1NCAtMjMxNDgxNTgyLiAtPiAtMS4zMjc5NzU4NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MjcgZGl2aWRlaW50IDMwNzQwMTk1NCAtMjMxNDgxNTgyLiAtPiAtMQoreG11bDQyNyBtdWx0aXBseSAzMDc0MDE5NTQgLTIzMTQ4MTU4Mi4gLT4gLTcuMTE1Nzg5MDZFKzE2IEluZXhhY3QgUm91bmRlZAoreHBvdzQyNyBwb3dlciAzMDc0MDE5NTQgLTIzMTQ4MTU4MiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00MjcgcmVtYWluZGVyIDMwNzQwMTk1NCAtMjMxNDgxNTgyLiAtPiA3NTkyMDM3MgoreHN1YjQyNyBzdWJ0cmFjdCAzMDc0MDE5NTQgLTIzMTQ4MTU4Mi4gLT4gNTM4ODgzNTM2Cit4YWRkNDI4IGFkZCAyMjM3NjQ1LjQ4RSs5OTI5NDczODggLTYwNjE4MDU1LjNFLTg1NzMxNjcwNiAtPiAyLjIzNzY0NTQ4RSs5OTI5NDczOTQgSW5leGFjdCBSb3VuZGVkCit4Y29tNDI4IGNvbXBhcmUgMjIzNzY0NS40OEUrOTkyOTQ3Mzg4IC02MDYxODA1NS4zRS04NTczMTY3MDYgLT4gMQoreGRpdjQyOCBkaXZpZGUgMjIzNzY0NS40OEUrOTkyOTQ3Mzg4IC02MDYxODA1NS4zRS04NTczMTY3MDYgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAoreGR2aTQyOCBkaXZpZGVpbnQgMjIzNzY0NS40OEUrOTkyOTQ3Mzg4IC02MDYxODA1NS4zRS04NTczMTY3MDYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0MjggbXVsdGlwbHkgMjIzNzY0NS40OEUrOTkyOTQ3Mzg4IC02MDYxODA1NS4zRS04NTczMTY3MDYgLT4gLTEuMzU2NDE3MTdFKzEzNTYzMDY5NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MjggcG93ZXIgMjIzNzY0NS40OEUrOTkyOTQ3Mzg4IC02IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQyOCByZW1haW5kZXIgMjIzNzY0NS40OEUrOTkyOTQ3Mzg4IC02MDYxODA1NS4zRS04NTczMTY3MDYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0Mjggc3VidHJhY3QgMjIzNzY0NS40OEUrOTkyOTQ3Mzg4IC02MDYxODA1NS4zRS04NTczMTY3MDYgLT4gMi4yMzc2NDU0OEUrOTkyOTQ3Mzk0IEluZXhhY3QgUm91bmRlZAoreGFkZDQyOSBhZGQgLTQwMzkwMy44NTEgMzUuNTA0OTY4N0UtNzIwOTUxNTUgLT4gLTQwMzkwMy44NTEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDI5IGNvbXBhcmUgLTQwMzkwMy44NTEgMzUuNTA0OTY4N0UtNzIwOTUxNTUgLT4gLTEKK3hkaXY0MjkgZGl2aWRlIC00MDM5MDMuODUxIDM1LjUwNDk2ODdFLTcyMDk1MTU1IC0+IC0xLjEzNzU5ODEwRSs3MjA5NTE1OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MjkgZGl2aWRlaW50IC00MDM5MDMuODUxIDM1LjUwNDk2ODdFLTcyMDk1MTU1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDI5IG11bHRpcGx5IC00MDM5MDMuODUxIDM1LjUwNDk2ODdFLTcyMDk1MTU1IC0+IC0xLjQzNDA1OTM2RS03MjA5NTE0OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MjkgcG93ZXIgLTQwMzkwMy44NTEgNCAtPiAyLjY2MTQxMTE3RSsyMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MjkgcmVtYWluZGVyIC00MDM5MDMuODUxIDM1LjUwNDk2ODdFLTcyMDk1MTU1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDI5IHN1YnRyYWN0IC00MDM5MDMuODUxIDM1LjUwNDk2ODdFLTcyMDk1MTU1IC0+IC00MDM5MDMuODUxIEluZXhhY3QgUm91bmRlZAoreGFkZDQzMCBhZGQgNi40ODY3NDk3OSAtNjIxNzMyLjUzMkUrNDIyNTc1ODAwIC0+IC02LjIxNzMyNTMyRSs0MjI1NzU4MDUgSW5leGFjdCBSb3VuZGVkCit4Y29tNDMwIGNvbXBhcmUgNi40ODY3NDk3OSAtNjIxNzMyLjUzMkUrNDIyNTc1ODAwIC0+IDEKK3hkaXY0MzAgZGl2aWRlIDYuNDg2NzQ5NzkgLTYyMTczMi41MzJFKzQyMjU3NTgwMCAtPiAtMS4wNDMzMzQ0N0UtNDIyNTc1ODA1IEluZXhhY3QgUm91bmRlZAoreGR2aTQzMCBkaXZpZGVpbnQgNi40ODY3NDk3OSAtNjIxNzMyLjUzMkUrNDIyNTc1ODAwIC0+IC0wCit4bXVsNDMwIG11bHRpcGx5IDYuNDg2NzQ5NzkgLTYyMTczMi41MzJFKzQyMjU3NTgwMCAtPiAtNC4wMzMwMjMzN0UrNDIyNTc1ODA2IEluZXhhY3QgUm91bmRlZAoreHBvdzQzMCBwb3dlciA2LjQ4Njc0OTc5IC02IC0+IDAuMDAwMDEzNDIyNjE0NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MzAgcmVtYWluZGVyIDYuNDg2NzQ5NzkgLTYyMTczMi41MzJFKzQyMjU3NTgwMCAtPiA2LjQ4Njc0OTc5Cit4c3ViNDMwIHN1YnRyYWN0IDYuNDg2NzQ5NzkgLTYyMTczMi41MzJFKzQyMjU3NTgwMCAtPiA2LjIxNzMyNTMyRSs0MjI1NzU4MDUgSW5leGFjdCBSb3VuZGVkCit4YWRkNDMxIGFkZCAtMzE0MDEuOTQxOCAzNi4zOTYwNjc5IC0+IC0zMTM2NS41NDU3IEluZXhhY3QgUm91bmRlZAoreGNvbTQzMSBjb21wYXJlIC0zMTQwMS45NDE4IDM2LjM5NjA2NzkgLT4gLTEKK3hkaXY0MzEgZGl2aWRlIC0zMTQwMS45NDE4IDM2LjM5NjA2NzkgLT4gLTg2Mi43ODM5MTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDMxIGRpdmlkZWludCAtMzE0MDEuOTQxOCAzNi4zOTYwNjc5IC0+IC04NjIKK3htdWw0MzEgbXVsdGlwbHkgLTMxNDAxLjk0MTggMzYuMzk2MDY3OSAtPiAtMTE0MjkwNy4yMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MzEgcG93ZXIgLTMxNDAxLjk0MTggMzYgLT4gNy43NzAyMzUwNUUrMTYxIEluZXhhY3QgUm91bmRlZAoreHJlbTQzMSByZW1haW5kZXIgLTMxNDAxLjk0MTggMzYuMzk2MDY3OSAtPiAtMjguNTMxMjcwMgoreHN1YjQzMSBzdWJ0cmFjdCAtMzE0MDEuOTQxOCAzNi4zOTYwNjc5IC0+IC0zMTQzOC4zMzc5IEluZXhhY3QgUm91bmRlZAoreGFkZDQzMiBhZGQgMzEzNDUzMjEuMSA1MS41NDgyMTkxIC0+IDMxMzQ1MzcyLjYgSW5leGFjdCBSb3VuZGVkCit4Y29tNDMyIGNvbXBhcmUgMzEzNDUzMjEuMSA1MS41NDgyMTkxIC0+IDEKK3hkaXY0MzIgZGl2aWRlIDMxMzQ1MzIxLjEgNTEuNTQ4MjE5MSAtPiA2MDgwNzcuNjczIEluZXhhY3QgUm91bmRlZAoreGR2aTQzMiBkaXZpZGVpbnQgMzEzNDUzMjEuMSA1MS41NDgyMTkxIC0+IDYwODA3NworeG11bDQzMiBtdWx0aXBseSAzMTM0NTMyMS4xIDUxLjU0ODIxOTEgLT4gMS42MTU3OTU0OEUrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MzIgcG93ZXIgMzEzNDUzMjEuMSA1MiAtPiA2LjMyMzg1MDU5RSszODkgSW5leGFjdCBSb3VuZGVkCit4cmVtNDMyIHJlbWFpbmRlciAzMTM0NTMyMS4xIDUxLjU0ODIxOTEgLT4gMzQuNjc0MzI5MworeHN1YjQzMiBzdWJ0cmFjdCAzMTM0NTMyMS4xIDUxLjU0ODIxOTEgLT4gMzEzNDUyNjkuNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MzMgYWRkIC02NC4xNzI4NDQgLTI4NTA2MjI3LjJFLTc2Nzk2NTgwMCAtPiAtNjQuMTcyODQ0MCBJbmV4YWN0IFJvdW5kZWQKK3hjb200MzMgY29tcGFyZSAtNjQuMTcyODQ0IC0yODUwNjIyNy4yRS03Njc5NjU4MDAgLT4gLTEKK3hkaXY0MzMgZGl2aWRlIC02NC4xNzI4NDQgLTI4NTA2MjI3LjJFLTc2Nzk2NTgwMCAtPiAyLjI1MTE4Njg2RSs3Njc5NjU3OTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDMzIGRpdmlkZWludCAtNjQuMTcyODQ0IC0yODUwNjIyNy4yRS03Njc5NjU4MDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0MzMgbXVsdGlwbHkgLTY0LjE3Mjg0NCAtMjg1MDYyMjcuMkUtNzY3OTY1ODAwIC0+IDEuODI5MzI1NjdFLTc2Nzk2NTc5MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MzMgcG93ZXIgLTY0LjE3Mjg0NCAtMyAtPiAtMC4wMDAwMDM3ODM5NTY1NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MzMgcmVtYWluZGVyIC02NC4xNzI4NDQgLTI4NTA2MjI3LjJFLTc2Nzk2NTgwMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQzMyBzdWJ0cmFjdCAtNjQuMTcyODQ0IC0yODUwNjIyNy4yRS03Njc5NjU4MDAgLT4gLTY0LjE3Mjg0NDAgSW5leGFjdCBSb3VuZGVkCit4YWRkNDM0IGFkZCA3MDQzNy4xNTUxIC02MjkxNi4xMjMzIC0+IDc1MjEuMDMxOAoreGNvbTQzNCBjb21wYXJlIDcwNDM3LjE1NTEgLTYyOTE2LjEyMzMgLT4gMQoreGRpdjQzNCBkaXZpZGUgNzA0MzcuMTU1MSAtNjI5MTYuMTIzMyAtPiAtMS4xMTk1NDA2MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MzQgZGl2aWRlaW50IDcwNDM3LjE1NTEgLTYyOTE2LjEyMzMgLT4gLTEKK3htdWw0MzQgbXVsdGlwbHkgNzA0MzcuMTU1MSAtNjI5MTYuMTIzMyAtPiAtNC40MzE2MzI3NEUrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MzQgcG93ZXIgNzA0MzcuMTU1MSAtNjI5MTYgLT4gNS4wMjk0NTA2MEUtMzA1MDA1IEluZXhhY3QgUm91bmRlZAoreHJlbTQzNCByZW1haW5kZXIgNzA0MzcuMTU1MSAtNjI5MTYuMTIzMyAtPiA3NTIxLjAzMTgKK3hzdWI0MzQgc3VidHJhY3QgNzA0MzcuMTU1MSAtNjI5MTYuMTIzMyAtPiAxMzMzNTMuMjc4IEluZXhhY3QgUm91bmRlZAoreGFkZDQzNSBhZGQgOTE2MjYwMTY0IC01OC40MDE3MzI1IC0+IDkxNjI2MDEwNiBJbmV4YWN0IFJvdW5kZWQKK3hjb200MzUgY29tcGFyZSA5MTYyNjAxNjQgLTU4LjQwMTczMjUgLT4gMQoreGRpdjQzNSBkaXZpZGUgOTE2MjYwMTY0IC01OC40MDE3MzI1IC0+IC0xNTY4ODkyMC45IEluZXhhY3QgUm91bmRlZAoreGR2aTQzNSBkaXZpZGVpbnQgOTE2MjYwMTY0IC01OC40MDE3MzI1IC0+IC0xNTY4ODkyMAoreG11bDQzNSBtdWx0aXBseSA5MTYyNjAxNjQgLTU4LjQwMTczMjUgLT4gLTUuMzUxMTE4MTBFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzQzNSBwb3dlciA5MTYyNjAxNjQgLTU4IC0+IDEuNTk1NTQ1ODdFLTUyMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MzUgcmVtYWluZGVyIDkxNjI2MDE2NCAtNTguNDAxNzMyNSAtPiA1NC45NDYxMDAwCit4c3ViNDM1IHN1YnRyYWN0IDkxNjI2MDE2NCAtNTguNDAxNzMyNSAtPiA5MTYyNjAyMjIgSW5leGFjdCBSb3VuZGVkCit4YWRkNDM2IGFkZCAxOTg4OTA4NS4zRS00NjgxNjQ4MCAxNTgxNjgzLjk0IC0+IDE1ODE2ODMuOTQgSW5leGFjdCBSb3VuZGVkCit4Y29tNDM2IGNvbXBhcmUgMTk4ODkwODUuM0UtNDY4MTY0ODAgMTU4MTY4My45NCAtPiAtMQoreGRpdjQzNiBkaXZpZGUgMTk4ODkwODUuM0UtNDY4MTY0ODAgMTU4MTY4My45NCAtPiAxLjI1NzQ2MjY4RS00NjgxNjQ3OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MzYgZGl2aWRlaW50IDE5ODg5MDg1LjNFLTQ2ODE2NDgwIDE1ODE2ODMuOTQgLT4gMAoreG11bDQzNiBtdWx0aXBseSAxOTg4OTA4NS4zRS00NjgxNjQ4MCAxNTgxNjgzLjk0IC0+IDMuMTQ1ODI0NjhFLTQ2ODE2NDY3IEluZXhhY3QgUm91bmRlZAoreHBvdzQzNiBwb3dlciAxOTg4OTA4NS4zRS00NjgxNjQ4MCAxNTgxNjg0IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQzNiByZW1haW5kZXIgMTk4ODkwODUuM0UtNDY4MTY0ODAgMTU4MTY4My45NCAtPiAxLjk4ODkwODUzRS00NjgxNjQ3MworeHN1YjQzNiBzdWJ0cmFjdCAxOTg4OTA4NS4zRS00NjgxNjQ4MCAxNTgxNjgzLjk0IC0+IC0xNTgxNjgzLjk0IEluZXhhY3QgUm91bmRlZAoreGFkZDQzNyBhZGQgLTU2MzEyLjMzODMgNzg5LjQ2NjA2NCAtPiAtNTU1MjIuODcyMiBJbmV4YWN0IFJvdW5kZWQKK3hjb200MzcgY29tcGFyZSAtNTYzMTIuMzM4MyA3ODkuNDY2MDY0IC0+IC0xCit4ZGl2NDM3IGRpdmlkZSAtNTYzMTIuMzM4MyA3ODkuNDY2MDY0IC0+IC03MS4zMjk2NTAzIEluZXhhY3QgUm91bmRlZAoreGR2aTQzNyBkaXZpZGVpbnQgLTU2MzEyLjMzODMgNzg5LjQ2NjA2NCAtPiAtNzEKK3htdWw0MzcgbXVsdGlwbHkgLTU2MzEyLjMzODMgNzg5LjQ2NjA2NCAtPiAtNDQ0NTY2ODAuMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MzcgcG93ZXIgLTU2MzEyLjMzODMgNzg5IC0+IC0xLjY4MzQ4NzI0RSszNzQ4IEluZXhhY3QgUm91bmRlZAoreHJlbTQzNyByZW1haW5kZXIgLTU2MzEyLjMzODMgNzg5LjQ2NjA2NCAtPiAtMjYwLjI0Nzc1NgoreHN1YjQzNyBzdWJ0cmFjdCAtNTYzMTIuMzM4MyA3ODkuNDY2MDY0IC0+IC01NzEwMS44MDQ0IEluZXhhY3QgUm91bmRlZAoreGFkZDQzOCBhZGQgMTgzNDQyLjg0OSAtOTI1ODc2MTA2IC0+IC05MjU2OTI2NjMgSW5leGFjdCBSb3VuZGVkCit4Y29tNDM4IGNvbXBhcmUgMTgzNDQyLjg0OSAtOTI1ODc2MTA2IC0+IDEKK3hkaXY0MzggZGl2aWRlIDE4MzQ0Mi44NDkgLTkyNTg3NjEwNiAtPiAtMC4wMDAxOTgxMjg5MzcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDM4IGRpdmlkZWludCAxODM0NDIuODQ5IC05MjU4NzYxMDYgLT4gLTAKK3htdWw0MzggbXVsdGlwbHkgMTgzNDQyLjg0OSAtOTI1ODc2MTA2IC0+IC0xLjY5ODQ1MzUxRSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MzggcG93ZXIgMTgzNDQyLjg0OSAtOTI1ODc2MTA2IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQzOCByZW1haW5kZXIgMTgzNDQyLjg0OSAtOTI1ODc2MTA2IC0+IDE4MzQ0Mi44NDkKK3hzdWI0Mzggc3VidHJhY3QgMTgzNDQyLjg0OSAtOTI1ODc2MTA2IC0+IDkyNjA1OTU0OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MzkgYWRkIDk3MTExMy42NTVFLTY5NTU0MDI0OSAtNDE5MzUxMTIwRS05Nzc3NDM4MjMgLT4gOS43MTExMzY1NUUtNjk1NTQwMjQ0IEluZXhhY3QgUm91bmRlZAoreGNvbTQzOSBjb21wYXJlIDk3MTExMy42NTVFLTY5NTU0MDI0OSAtNDE5MzUxMTIwRS05Nzc3NDM4MjMgLT4gMQoreGRpdjQzOSBkaXZpZGUgOTcxMTEzLjY1NUUtNjk1NTQwMjQ5IC00MTkzNTExMjBFLTk3Nzc0MzgyMyAtPiAtMi4zMTU3NTMxMEUrMjgyMjAzNTcxIEluZXhhY3QgUm91bmRlZAoreGR2aTQzOSBkaXZpZGVpbnQgOTcxMTEzLjY1NUUtNjk1NTQwMjQ5IC00MTkzNTExMjBFLTk3Nzc0MzgyMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQzOSBtdWx0aXBseSA5NzExMTMuNjU1RS02OTU1NDAyNDkgLTQxOTM1MTEyMEUtOTc3NzQzODIzIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hwb3c0MzkgcG93ZXIgOTcxMTEzLjY1NUUtNjk1NTQwMjQ5IC00IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQzOSByZW1haW5kZXIgOTcxMTEzLjY1NUUtNjk1NTQwMjQ5IC00MTkzNTExMjBFLTk3Nzc0MzgyMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQzOSBzdWJ0cmFjdCA5NzExMTMuNjU1RS02OTU1NDAyNDkgLTQxOTM1MTEyMEUtOTc3NzQzODIzIC0+IDkuNzExMTM2NTVFLTY5NTU0MDI0NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NDAgYWRkIDg1OTY1ODU1MS4gNzIzMzguMjA1NCAtPiA4NTk3MzA4ODkgSW5leGFjdCBSb3VuZGVkCit4Y29tNDQwIGNvbXBhcmUgODU5NjU4NTUxLiA3MjMzOC4yMDU0IC0+IDEKK3hkaXY0NDAgZGl2aWRlIDg1OTY1ODU1MS4gNzIzMzguMjA1NCAtPiAxMTg4My44ODAwIEluZXhhY3QgUm91bmRlZAoreGR2aTQ0MCBkaXZpZGVpbnQgODU5NjU4NTUxLiA3MjMzOC4yMDU0IC0+IDExODgzCit4bXVsNDQwIG11bHRpcGx5IDg1OTY1ODU1MS4gNzIzMzguMjA1NCAtPiA2LjIxODYxNTY4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NDAgcG93ZXIgODU5NjU4NTUxLiA3MjMzOCAtPiAxLjg3NjIwNDUwRSs2NDYyOTEgSW5leGFjdCBSb3VuZGVkCit4cmVtNDQwIHJlbWFpbmRlciA4NTk2NTg1NTEuIDcyMzM4LjIwNTQgLT4gNjM2NTYuMjMxOAoreHN1YjQ0MCBzdWJ0cmFjdCA4NTk2NTg1NTEuIDcyMzM4LjIwNTQgLT4gODU5NTg2MjEzIEluZXhhY3QgUm91bmRlZAoreGFkZDQ0MSBhZGQgLTMuODY0NDY2MzBFKzQyNjgxNjA2OCAtNjY0LjUzNDczNyAtPiAtMy44NjQ0NjYzMEUrNDI2ODE2MDY4IEluZXhhY3QgUm91bmRlZAoreGNvbTQ0MSBjb21wYXJlIC0zLjg2NDQ2NjMwRSs0MjY4MTYwNjggLTY2NC41MzQ3MzcgLT4gLTEKK3hkaXY0NDEgZGl2aWRlIC0zLjg2NDQ2NjMwRSs0MjY4MTYwNjggLTY2NC41MzQ3MzcgLT4gNS44MTUyOTYxNUUrNDI2ODE2MDY1IEluZXhhY3QgUm91bmRlZAoreGR2aTQ0MSBkaXZpZGVpbnQgLTMuODY0NDY2MzBFKzQyNjgxNjA2OCAtNjY0LjUzNDczNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ0MSBtdWx0aXBseSAtMy44NjQ0NjYzMEUrNDI2ODE2MDY4IC02NjQuNTM0NzM3IC0+IDIuNTY4MDcyMTBFKzQyNjgxNjA3MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NDEgcG93ZXIgLTMuODY0NDY2MzBFKzQyNjgxNjA2OCAtNjY1IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00NDEgcmVtYWluZGVyIC0zLjg2NDQ2NjMwRSs0MjY4MTYwNjggLTY2NC41MzQ3MzcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0NDEgc3VidHJhY3QgLTMuODY0NDY2MzBFKzQyNjgxNjA2OCAtNjY0LjUzNDczNyAtPiAtMy44NjQ0NjYzMEUrNDI2ODE2MDY4IEluZXhhY3QgUm91bmRlZAoreGFkZDQ0MiBhZGQgLTk2OS44ODE4MTggMzExNzAuODU1NSAtPiAzMDIwMC45NzM3IEluZXhhY3QgUm91bmRlZAoreGNvbTQ0MiBjb21wYXJlIC05NjkuODgxODE4IDMxMTcwLjg1NTUgLT4gLTEKK3hkaXY0NDIgZGl2aWRlIC05NjkuODgxODE4IDMxMTcwLjg1NTUgLT4gLTAuMDMxMTE1MDIwOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NDIgZGl2aWRlaW50IC05NjkuODgxODE4IDMxMTcwLjg1NTUgLT4gLTAKK3htdWw0NDIgbXVsdGlwbHkgLTk2OS44ODE4MTggMzExNzAuODU1NSAtPiAtMzAyMzIwNDYuMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NDIgcG93ZXIgLTk2OS44ODE4MTggMzExNzEgLT4gLTEuMDI4NjU4OTRFKzkzMDk5IEluZXhhY3QgUm91bmRlZAoreHJlbTQ0MiByZW1haW5kZXIgLTk2OS44ODE4MTggMzExNzAuODU1NSAtPiAtOTY5Ljg4MTgxOAoreHN1YjQ0MiBzdWJ0cmFjdCAtOTY5Ljg4MTgxOCAzMTE3MC44NTU1IC0+IC0zMjE0MC43MzczIEluZXhhY3QgUm91bmRlZAoreGFkZDQ0MyBhZGQgNzk4MDUzNy4yNyA4NS40MDQwNTEyIC0+IDc5ODA2MjIuNjcgSW5leGFjdCBSb3VuZGVkCit4Y29tNDQzIGNvbXBhcmUgNzk4MDUzNy4yNyA4NS40MDQwNTEyIC0+IDEKK3hkaXY0NDMgZGl2aWRlIDc5ODA1MzcuMjcgODUuNDA0MDUxMiAtPiA5MzQ0NC40ODE0IEluZXhhY3QgUm91bmRlZAoreGR2aTQ0MyBkaXZpZGVpbnQgNzk4MDUzNy4yNyA4NS40MDQwNTEyIC0+IDkzNDQ0Cit4bXVsNDQzIG11bHRpcGx5IDc5ODA1MzcuMjcgODUuNDA0MDUxMiAtPiA2ODE1NzAyMTQgSW5leGFjdCBSb3VuZGVkCit4cG93NDQzIHBvd2VyIDc5ODA1MzcuMjcgODUgLT4gNC43MDY4NTc2M0UrNTg2IEluZXhhY3QgUm91bmRlZAoreHJlbTQ0MyByZW1haW5kZXIgNzk4MDUzNy4yNyA4NS40MDQwNTEyIC0+IDQxLjEwOTY2NzIKK3hzdWI0NDMgc3VidHJhY3QgNzk4MDUzNy4yNyA4NS40MDQwNTEyIC0+IDc5ODA0NTEuODcgSW5leGFjdCBSb3VuZGVkCit4YWRkNDQ0IGFkZCAtMTE0NjA5OTE2LiA3NTI1LjE0OTgxIC0+IC0xMTQ2MDIzOTEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDQ0IGNvbXBhcmUgLTExNDYwOTkxNi4gNzUyNS4xNDk4MSAtPiAtMQoreGRpdjQ0NCBkaXZpZGUgLTExNDYwOTkxNi4gNzUyNS4xNDk4MSAtPiAtMTUyMzAuMjUwNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NDQgZGl2aWRlaW50IC0xMTQ2MDk5MTYuIDc1MjUuMTQ5ODEgLT4gLTE1MjMwCit4bXVsNDQ0IG11bHRpcGx5IC0xMTQ2MDk5MTYuIDc1MjUuMTQ5ODEgLT4gLTguNjI0NTY3ODhFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzQ0NCBwb3dlciAtMTE0NjA5OTE2LiA3NTI1IC0+IC00LjQzNjIwNDQ1RSs2MDY0NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NDQgcmVtYWluZGVyIC0xMTQ2MDk5MTYuIDc1MjUuMTQ5ODEgLT4gLTE4ODQuMzkzNzAKK3hzdWI0NDQgc3VidHJhY3QgLTExNDYwOTkxNi4gNzUyNS4xNDk4MSAtPiAtMTE0NjE3NDQxIEluZXhhY3QgUm91bmRlZAoreGFkZDQ0NSBhZGQgOC40MzQwNDY4MkUtNTAwNTcyNTY4IDQ3NDUyNjcxOSAtPiA0NzQ1MjY3MTkgSW5leGFjdCBSb3VuZGVkCit4Y29tNDQ1IGNvbXBhcmUgOC40MzQwNDY4MkUtNTAwNTcyNTY4IDQ3NDUyNjcxOSAtPiAtMQoreGRpdjQ0NSBkaXZpZGUgOC40MzQwNDY4MkUtNTAwNTcyNTY4IDQ3NDUyNjcxOSAtPiAxLjc3NzM1OTczRS01MDA1NzI1NzYgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDQ1IGRpdmlkZWludCA4LjQzNDA0NjgyRS01MDA1NzI1NjggNDc0NTI2NzE5IC0+IDAKK3htdWw0NDUgbXVsdGlwbHkgOC40MzQwNDY4MkUtNTAwNTcyNTY4IDQ3NDUyNjcxOSAtPiA0LjAwMjE4MDU3RS01MDA1NzI1NTkgSW5leGFjdCBSb3VuZGVkCit4cG93NDQ1IHBvd2VyIDguNDM0MDQ2ODJFLTUwMDU3MjU2OCA0NzQ1MjY3MTkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDQ1IHJlbWFpbmRlciA4LjQzNDA0NjgyRS01MDA1NzI1NjggNDc0NTI2NzE5IC0+IDguNDM0MDQ2ODJFLTUwMDU3MjU2OAoreHN1YjQ0NSBzdWJ0cmFjdCA4LjQzNDA0NjgyRS01MDA1NzI1NjggNDc0NTI2NzE5IC0+IC00NzQ1MjY3MTkgSW5leGFjdCBSb3VuZGVkCit4YWRkNDQ2IGFkZCAxODgwMDY0MzMgMjI2MC4xNzAzN0UtOTc4MTkyNTI1IC0+IDE4ODAwNjQzMyBJbmV4YWN0IFJvdW5kZWQKK3hjb200NDYgY29tcGFyZSAxODgwMDY0MzMgMjI2MC4xNzAzN0UtOTc4MTkyNTI1IC0+IDEKK3hkaXY0NDYgZGl2aWRlIDE4ODAwNjQzMyAyMjYwLjE3MDM3RS05NzgxOTI1MjUgLT4gOC4zMTgyNDE2NUUrOTc4MTkyNTI5IEluZXhhY3QgUm91bmRlZAoreGR2aTQ0NiBkaXZpZGVpbnQgMTg4MDA2NDMzIDIyNjAuMTcwMzdFLTk3ODE5MjUyNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ0NiBtdWx0aXBseSAxODgwMDY0MzMgMjI2MC4xNzAzN0UtOTc4MTkyNTI1IC0+IDQuMjQ5MjY1NjlFLTk3ODE5MjUxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NDYgcG93ZXIgMTg4MDA2NDMzIDIgLT4gMy41MzQ2NDE4OEUrMTYgSW5leGFjdCBSb3VuZGVkCit4cmVtNDQ2IHJlbWFpbmRlciAxODgwMDY0MzMgMjI2MC4xNzAzN0UtOTc4MTkyNTI1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDQ2IHN1YnRyYWN0IDE4ODAwNjQzMyAyMjYwLjE3MDM3RS05NzgxOTI1MjUgLT4gMTg4MDA2NDMzIEluZXhhY3QgUm91bmRlZAoreGFkZDQ0NyBhZGQgLTkuOTU4MzYzMTIgLTg2NjQ2NjcwMyAtPiAtODY2NDY2NzEzIEluZXhhY3QgUm91bmRlZAoreGNvbTQ0NyBjb21wYXJlIC05Ljk1ODM2MzEyIC04NjY0NjY3MDMgLT4gMQoreGRpdjQ0NyBkaXZpZGUgLTkuOTU4MzYzMTIgLTg2NjQ2NjcwMyAtPiAxLjE0OTMwNzA3RS04IEluZXhhY3QgUm91bmRlZAoreGR2aTQ0NyBkaXZpZGVpbnQgLTkuOTU4MzYzMTIgLTg2NjQ2NjcwMyAtPiAwCit4bXVsNDQ3IG11bHRpcGx5IC05Ljk1ODM2MzEyIC04NjY0NjY3MDMgLT4gOC42Mjg1OTAwNkUrOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NDcgcG93ZXIgLTkuOTU4MzYzMTIgLTg2NjQ2NjcwMyAtPiAtNi43MTc0NDM2OUUtODY0ODk2NjMwIEluZXhhY3QgUm91bmRlZAoreHJlbTQ0NyByZW1haW5kZXIgLTkuOTU4MzYzMTIgLTg2NjQ2NjcwMyAtPiAtOS45NTgzNjMxMgoreHN1YjQ0NyBzdWJ0cmFjdCAtOS45NTgzNjMxMiAtODY2NDY2NzAzIC0+IDg2NjQ2NjY5MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NDggYWRkIDgwOTE5MzM5LjJFLTk2NzIzMTU4NiAyMTkuODI0MjY2IC0+IDIxOS44MjQyNjYgSW5leGFjdCBSb3VuZGVkCit4Y29tNDQ4IGNvbXBhcmUgODA5MTkzMzkuMkUtOTY3MjMxNTg2IDIxOS44MjQyNjYgLT4gLTEKK3hkaXY0NDggZGl2aWRlIDgwOTE5MzM5LjJFLTk2NzIzMTU4NiAyMTkuODI0MjY2IC0+IDMuNjgxMDkyMjBFLTk2NzIzMTU4MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NDggZGl2aWRlaW50IDgwOTE5MzM5LjJFLTk2NzIzMTU4NiAyMTkuODI0MjY2IC0+IDAKK3htdWw0NDggbXVsdGlwbHkgODA5MTkzMzkuMkUtOTY3MjMxNTg2IDIxOS44MjQyNjYgLT4gMS43Nzg4MDM0M0UtOTY3MjMxNTc2IEluZXhhY3QgUm91bmRlZAoreHBvdzQ0OCBwb3dlciA4MDkxOTMzOS4yRS05NjcyMzE1ODYgMjIwIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ0OCByZW1haW5kZXIgODA5MTkzMzkuMkUtOTY3MjMxNTg2IDIxOS44MjQyNjYgLT4gOC4wOTE5MzM5MkUtOTY3MjMxNTc5Cit4c3ViNDQ4IHN1YnRyYWN0IDgwOTE5MzM5LjJFLTk2NzIzMTU4NiAyMTkuODI0MjY2IC0+IC0yMTkuODI0MjY2IEluZXhhY3QgUm91bmRlZAoreGFkZDQ0OSBhZGQgMTU5NTc5LjQ0NCAtODk4MjcuNTIyOSAtPiA2OTc1MS45MjExCit4Y29tNDQ5IGNvbXBhcmUgMTU5NTc5LjQ0NCAtODk4MjcuNTIyOSAtPiAxCit4ZGl2NDQ5IGRpdmlkZSAxNTk1NzkuNDQ0IC04OTgyNy41MjI5IC0+IC0xLjc3NjUwOTQ2IEluZXhhY3QgUm91bmRlZAoreGR2aTQ0OSBkaXZpZGVpbnQgMTU5NTc5LjQ0NCAtODk4MjcuNTIyOSAtPiAtMQoreG11bDQ0OSBtdWx0aXBseSAxNTk1NzkuNDQ0IC04OTgyNy41MjI5IC0+IC0xLjQzMzQ2MjYyRSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NDkgcG93ZXIgMTU5NTc5LjQ0NCAtODk4MjggLT4gOS42OTk1NTg1MEUtNDY3Mzc0IEluZXhhY3QgUm91bmRlZAoreHJlbTQ0OSByZW1haW5kZXIgMTU5NTc5LjQ0NCAtODk4MjcuNTIyOSAtPiA2OTc1MS45MjExCit4c3ViNDQ5IHN1YnRyYWN0IDE1OTU3OS40NDQgLTg5ODI3LjUyMjkgLT4gMjQ5NDA2Ljk2NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NTAgYWRkIC00LjU0MDAwMTUzIDY5NjYzMzMuNzQgLT4gNjk2NjMyOS4yMCBJbmV4YWN0IFJvdW5kZWQKK3hjb200NTAgY29tcGFyZSAtNC41NDAwMDE1MyA2OTY2MzMzLjc0IC0+IC0xCit4ZGl2NDUwIGRpdmlkZSAtNC41NDAwMDE1MyA2OTY2MzMzLjc0IC0+IC02LjUxNzA2MDA1RS03IEluZXhhY3QgUm91bmRlZAoreGR2aTQ1MCBkaXZpZGVpbnQgLTQuNTQwMDAxNTMgNjk2NjMzMy43NCAtPiAtMAoreG11bDQ1MCBtdWx0aXBseSAtNC41NDAwMDE1MyA2OTY2MzMzLjc0IC0+IC0zMTYyNzE2NS44IEluZXhhY3QgUm91bmRlZAoreHBvdzQ1MCBwb3dlciAtNC41NDAwMDE1MyA2OTY2MzM0IC0+IDMuNTI1Njg5MTNFKzQ1NzcyNzEgSW5leGFjdCBSb3VuZGVkCit4cmVtNDUwIHJlbWFpbmRlciAtNC41NDAwMDE1MyA2OTY2MzMzLjc0IC0+IC00LjU0MDAwMTUzCit4c3ViNDUwIHN1YnRyYWN0IC00LjU0MDAwMTUzIDY5NjYzMzMuNzQgLT4gLTY5NjYzMzguMjggSW5leGFjdCBSb3VuZGVkCit4YWRkNDUxIGFkZCAyODcwMTUzOC43RS0zOTEwMTU2NDkgLTkyMDk5OTE5Mi4gLT4gLTkyMDk5OTE5MiBJbmV4YWN0IFJvdW5kZWQKK3hjb200NTEgY29tcGFyZSAyODcwMTUzOC43RS0zOTEwMTU2NDkgLTkyMDk5OTE5Mi4gLT4gMQoreGRpdjQ1MSBkaXZpZGUgMjg3MDE1MzguN0UtMzkxMDE1NjQ5IC05MjA5OTkxOTIuIC0+IC0zLjExNjM0Nzg3RS0zOTEwMTU2NTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDUxIGRpdmlkZWludCAyODcwMTUzOC43RS0zOTEwMTU2NDkgLTkyMDk5OTE5Mi4gLT4gLTAKK3htdWw0NTEgbXVsdGlwbHkgMjg3MDE1MzguN0UtMzkxMDE1NjQ5IC05MjA5OTkxOTIuIC0+IC0yLjY0MzQwOTQwRS0zOTEwMTU2MzMgSW5leGFjdCBSb3VuZGVkCit4cG93NDUxIHBvd2VyIDI4NzAxNTM4LjdFLTM5MTAxNTY0OSAtOTIwOTk5MTkyIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQ1MSByZW1haW5kZXIgMjg3MDE1MzguN0UtMzkxMDE1NjQ5IC05MjA5OTkxOTIuIC0+IDIuODcwMTUzODdFLTM5MTAxNTY0MgoreHN1YjQ1MSBzdWJ0cmFjdCAyODcwMTUzOC43RS0zOTEwMTU2NDkgLTkyMDk5OTE5Mi4gLT4gOTIwOTk5MTkyIEluZXhhY3QgUm91bmRlZAoreGFkZDQ1MiBhZGQgLTM2MTM4MjU3NS4gLTc5NzYuMTUyODZFKzg5ODQ5MTE2OSAtPiAtNy45NzYxNTI4NkUrODk4NDkxMTcyIEluZXhhY3QgUm91bmRlZAoreGNvbTQ1MiBjb21wYXJlIC0zNjEzODI1NzUuIC03OTc2LjE1Mjg2RSs4OTg0OTExNjkgLT4gMQoreGRpdjQ1MiBkaXZpZGUgLTM2MTM4MjU3NS4gLTc5NzYuMTUyODZFKzg5ODQ5MTE2OSAtPiA0LjUzMDc4Nzk4RS04OTg0OTExNjUgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDUyIGRpdmlkZWludCAtMzYxMzgyNTc1LiAtNzk3Ni4xNTI4NkUrODk4NDkxMTY5IC0+IDAKK3htdWw0NTIgbXVsdGlwbHkgLTM2MTM4MjU3NS4gLTc5NzYuMTUyODZFKzg5ODQ5MTE2OSAtPiAyLjg4MjQ0MjY2RSs4OTg0OTExODEgSW5leGFjdCBSb3VuZGVkCit4cG93NDUyIHBvd2VyIC0zNjEzODI1NzUuIC04IC0+IDMuNDM3NjU1MzdFLTY5IEluZXhhY3QgUm91bmRlZAoreHJlbTQ1MiByZW1haW5kZXIgLTM2MTM4MjU3NS4gLTc5NzYuMTUyODZFKzg5ODQ5MTE2OSAtPiAtMzYxMzgyNTc1Cit4c3ViNDUyIHN1YnRyYWN0IC0zNjEzODI1NzUuIC03OTc2LjE1Mjg2RSs4OTg0OTExNjkgLT4gNy45NzYxNTI4NkUrODk4NDkxMTcyIEluZXhhY3QgUm91bmRlZAoreGFkZDQ1MyBhZGQgNzAyMTgwNS42MSAxMjIyOTUyLjgzIC0+IDgyNDQ3NTguNDQKK3hjb200NTMgY29tcGFyZSA3MDIxODA1LjYxIDEyMjI5NTIuODMgLT4gMQoreGRpdjQ1MyBkaXZpZGUgNzAyMTgwNS42MSAxMjIyOTUyLjgzIC0+IDUuNzQxNjgxNDggSW5leGFjdCBSb3VuZGVkCit4ZHZpNDUzIGRpdmlkZWludCA3MDIxODA1LjYxIDEyMjI5NTIuODMgLT4gNQoreG11bDQ1MyBtdWx0aXBseSA3MDIxODA1LjYxIDEyMjI5NTIuODMgLT4gOC41ODczMzcwNEUrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93NDUzIHBvd2VyIDcwMjE4MDUuNjEgMTIyMjk1MyAtPiAxLjI2NTQwNTUzRSs4MzcyODg1IEluZXhhY3QgUm91bmRlZAoreHJlbTQ1MyByZW1haW5kZXIgNzAyMTgwNS42MSAxMjIyOTUyLjgzIC0+IDkwNzA0MS40NgoreHN1YjQ1MyBzdWJ0cmFjdCA3MDIxODA1LjYxIDEyMjI5NTIuODMgLT4gNTc5ODg1Mi43OAoreGFkZDQ1NCBhZGQgLTQwLjQ4MTE2NjcgLTc5NjU1LjU2MzUgLT4gLTc5Njk2LjA0NDcgSW5leGFjdCBSb3VuZGVkCit4Y29tNDU0IGNvbXBhcmUgLTQwLjQ4MTE2NjcgLTc5NjU1LjU2MzUgLT4gMQoreGRpdjQ1NCBkaXZpZGUgLTQwLjQ4MTE2NjcgLTc5NjU1LjU2MzUgLT4gMC4wMDA1MDgyMDI2MjggSW5leGFjdCBSb3VuZGVkCit4ZHZpNDU0IGRpdmlkZWludCAtNDAuNDgxMTY2NyAtNzk2NTUuNTYzNSAtPiAwCit4bXVsNDU0IG11bHRpcGx5IC00MC40ODExNjY3IC03OTY1NS41NjM1IC0+IDMyMjQ1NTAuMTQgSW5leGFjdCBSb3VuZGVkCit4cG93NDU0IHBvd2VyIC00MC40ODExNjY3IC03OTY1NiAtPiA0LjUwMTc0Mjc1RS0xMjgwMjggSW5leGFjdCBSb3VuZGVkCit4cmVtNDU0IHJlbWFpbmRlciAtNDAuNDgxMTY2NyAtNzk2NTUuNTYzNSAtPiAtNDAuNDgxMTY2NworeHN1YjQ1NCBzdWJ0cmFjdCAtNDAuNDgxMTY2NyAtNzk2NTUuNTYzNSAtPiA3OTYxNS4wODIzIEluZXhhY3QgUm91bmRlZAoreGFkZDQ1NSBhZGQgLTg3NTU2NzQuMzhFKzExNzE2ODE3NyAxNDguOTAzNDA0IC0+IC04Ljc1NTY3NDM4RSsxMTcxNjgxODMgSW5leGFjdCBSb3VuZGVkCit4Y29tNDU1IGNvbXBhcmUgLTg3NTU2NzQuMzhFKzExNzE2ODE3NyAxNDguOTAzNDA0IC0+IC0xCit4ZGl2NDU1IGRpdmlkZSAtODc1NTY3NC4zOEUrMTE3MTY4MTc3IDE0OC45MDM0MDQgLT4gLTUuODgwMTAzNTdFKzExNzE2ODE4MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NTUgZGl2aWRlaW50IC04NzU1Njc0LjM4RSsxMTcxNjgxNzcgMTQ4LjkwMzQwNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ1NSBtdWx0aXBseSAtODc1NTY3NC4zOEUrMTE3MTY4MTc3IDE0OC45MDM0MDQgLT4gLTEuMzAzNzQ5NzJFKzExNzE2ODE4NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NTUgcG93ZXIgLTg3NTU2NzQuMzhFKzExNzE2ODE3NyAxNDkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQ1NSByZW1haW5kZXIgLTg3NTU2NzQuMzhFKzExNzE2ODE3NyAxNDguOTAzNDA0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDU1IHN1YnRyYWN0IC04NzU1Njc0LjM4RSsxMTcxNjgxNzcgMTQ4LjkwMzQwNCAtPiAtOC43NTU2NzQzOEUrMTE3MTY4MTgzIEluZXhhY3QgUm91bmRlZAoreGFkZDQ1NiBhZGQgMzQuNTMyOTc4MUUrMzgyODI5MzkyIC00NS4yMTc3MzA5IC0+IDMuNDUzMjk3ODFFKzM4MjgyOTM5MyBJbmV4YWN0IFJvdW5kZWQKK3hjb200NTYgY29tcGFyZSAzNC41MzI5NzgxRSszODI4MjkzOTIgLTQ1LjIxNzczMDkgLT4gMQoreGRpdjQ1NiBkaXZpZGUgMzQuNTMyOTc4MUUrMzgyODI5MzkyIC00NS4yMTc3MzA5IC0+IC03LjYzNzA0MzU3RSszODI4MjkzOTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDU2IGRpdmlkZWludCAzNC41MzI5NzgxRSszODI4MjkzOTIgLTQ1LjIxNzczMDkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0NTYgbXVsdGlwbHkgMzQuNTMyOTc4MUUrMzgyODI5MzkyIC00NS4yMTc3MzA5IC0+IC0xLjU2MTUwMjkxRSszODI4MjkzOTUgSW5leGFjdCBSb3VuZGVkCit4cG93NDU2IHBvd2VyIDM0LjUzMjk3ODFFKzM4MjgyOTM5MiAtNDUgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDU2IHJlbWFpbmRlciAzNC41MzI5NzgxRSszODI4MjkzOTIgLTQ1LjIxNzczMDkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0NTYgc3VidHJhY3QgMzQuNTMyOTc4MUUrMzgyODI5MzkyIC00NS4yMTc3MzA5IC0+IDMuNDUzMjk3ODFFKzM4MjgyOTM5MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NTcgYWRkIC0zNzk1ODQ3Ni4wIDU4NDM2Ny45MzUgLT4gLTM3Mzc0MTA4LjEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDU3IGNvbXBhcmUgLTM3OTU4NDc2LjAgNTg0MzY3LjkzNSAtPiAtMQoreGRpdjQ1NyBkaXZpZGUgLTM3OTU4NDc2LjAgNTg0MzY3LjkzNSAtPiAtNjQuOTU2NDY2MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NTcgZGl2aWRlaW50IC0zNzk1ODQ3Ni4wIDU4NDM2Ny45MzUgLT4gLTY0Cit4bXVsNDU3IG11bHRpcGx5IC0zNzk1ODQ3Ni4wIDU4NDM2Ny45MzUgLT4gLTIuMjE4MTcxNjJFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzQ1NyBwb3dlciAtMzc5NTg0NzYuMCA1ODQzNjggLT4gMy4yMDUzODI2OEUrNDQyOTEwNSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NTcgcmVtYWluZGVyIC0zNzk1ODQ3Ni4wIDU4NDM2Ny45MzUgLT4gLTU1ODkyOC4xNjAKK3hzdWI0NTcgc3VidHJhY3QgLTM3OTU4NDc2LjAgNTg0MzY3LjkzNSAtPiAtMzg1NDI4NDMuOSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NTggYWRkIDQ5NTIzMy41NTNFLTQxNDE1MjIxNSA2MjM1Mjc1OS4yIC0+IDYyMzUyNzU5LjIgSW5leGFjdCBSb3VuZGVkCit4Y29tNDU4IGNvbXBhcmUgNDk1MjMzLjU1M0UtNDE0MTUyMjE1IDYyMzUyNzU5LjIgLT4gLTEKK3hkaXY0NTggZGl2aWRlIDQ5NTIzMy41NTNFLTQxNDE1MjIxNSA2MjM1Mjc1OS4yIC0+IDcuOTQyNDQ4MDlFLTQxNDE1MjIxOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NTggZGl2aWRlaW50IDQ5NTIzMy41NTNFLTQxNDE1MjIxNSA2MjM1Mjc1OS4yIC0+IDAKK3htdWw0NTggbXVsdGlwbHkgNDk1MjMzLjU1M0UtNDE0MTUyMjE1IDYyMzUyNzU5LjIgLT4gMy4wODc5MTc4NUUtNDE0MTUyMjAyIEluZXhhY3QgUm91bmRlZAoreHBvdzQ1OCBwb3dlciA0OTUyMzMuNTUzRS00MTQxNTIyMTUgNjIzNTI3NTkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDU4IHJlbWFpbmRlciA0OTUyMzMuNTUzRS00MTQxNTIyMTUgNjIzNTI3NTkuMiAtPiA0Ljk1MjMzNTUzRS00MTQxNTIyMTAKK3hzdWI0NTggc3VidHJhY3QgNDk1MjMzLjU1M0UtNDE0MTUyMjE1IDYyMzUyNzU5LjIgLT4gLTYyMzUyNzU5LjIgSW5leGFjdCBSb3VuZGVkCit4YWRkNDU5IGFkZCAtNTAyMzQzMDYwIC05NjgyOC45OTQgLT4gLTUwMjQzOTg4OSBJbmV4YWN0IFJvdW5kZWQKK3hjb200NTkgY29tcGFyZSAtNTAyMzQzMDYwIC05NjgyOC45OTQgLT4gLTEKK3hkaXY0NTkgZGl2aWRlIC01MDIzNDMwNjAgLTk2ODI4Ljk5NCAtPiA1MTg3Ljk0MDUwIEluZXhhY3QgUm91bmRlZAoreGR2aTQ1OSBkaXZpZGVpbnQgLTUwMjM0MzA2MCAtOTY4MjguOTk0IC0+IDUxODcKK3htdWw0NTkgbXVsdGlwbHkgLTUwMjM0MzA2MCAtOTY4MjguOTk0IC0+IDQuODY0MTM3MzFFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzQ1OSBwb3dlciAtNTAyMzQzMDYwIC05NjgyOSAtPiAtNi43ODYwMjExOUUtODQyNTEwIEluZXhhY3QgUm91bmRlZAoreHJlbTQ1OSByZW1haW5kZXIgLTUwMjM0MzA2MCAtOTY4MjguOTk0IC0+IC05MTA2OC4xMjIKK3hzdWI0NTkgc3VidHJhY3QgLTUwMjM0MzA2MCAtOTY4MjguOTk0IC0+IC01MDIyNDYyMzEgSW5leGFjdCBSb3VuZGVkCit4YWRkNDYwIGFkZCAtMjIuNDM5NjM5RSs5MTYzNjI4NzggLTM5LjQwMzc2ODEgLT4gLTIuMjQzOTYzOTBFKzkxNjM2Mjg3OSBJbmV4YWN0IFJvdW5kZWQKK3hjb200NjAgY29tcGFyZSAtMjIuNDM5NjM5RSs5MTYzNjI4NzggLTM5LjQwMzc2ODEgLT4gLTEKK3hkaXY0NjAgZGl2aWRlIC0yMi40Mzk2MzlFKzkxNjM2Mjg3OCAtMzkuNDAzNzY4MSAtPiA1LjY5NDc5NTIxRSs5MTYzNjI4NzcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDYwIGRpdmlkZWludCAtMjIuNDM5NjM5RSs5MTYzNjI4NzggLTM5LjQwMzc2ODEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0NjAgbXVsdGlwbHkgLTIyLjQzOTYzOUUrOTE2MzYyODc4IC0zOS40MDM3NjgxIC0+IDguODQyMDYzMzFFKzkxNjM2Mjg4MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NjAgcG93ZXIgLTIyLjQzOTYzOUUrOTE2MzYyODc4IC0zOSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDYwIHJlbWFpbmRlciAtMjIuNDM5NjM5RSs5MTYzNjI4NzggLTM5LjQwMzc2ODEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0NjAgc3VidHJhY3QgLTIyLjQzOTYzOUUrOTE2MzYyODc4IC0zOS40MDM3NjgxIC0+IC0yLjI0Mzk2MzkwRSs5MTYzNjI4NzkgSW5leGFjdCBSb3VuZGVkCit4YWRkNDYxIGFkZCA3MTgxODAuNTg3RS05NTc0NzM3MjIgMS42NjIyMzQ0MyAtPiAxLjY2MjIzNDQzIEluZXhhY3QgUm91bmRlZAoreGNvbTQ2MSBjb21wYXJlIDcxODE4MC41ODdFLTk1NzQ3MzcyMiAxLjY2MjIzNDQzIC0+IC0xCit4ZGl2NDYxIGRpdmlkZSA3MTgxODAuNTg3RS05NTc0NzM3MjIgMS42NjIyMzQ0MyAtPiA0LjMyMDU3MzQwRS05NTc0NzM3MTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDYxIGRpdmlkZWludCA3MTgxODAuNTg3RS05NTc0NzM3MjIgMS42NjIyMzQ0MyAtPiAwCit4bXVsNDYxIG11bHRpcGx5IDcxODE4MC41ODdFLTk1NzQ3MzcyMiAxLjY2MjIzNDQzIC0+IDEuMTkzNzg0NTBFLTk1NzQ3MzcxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NjEgcG93ZXIgNzE4MTgwLjU4N0UtOTU3NDczNzIyIDIgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDYxIHJlbWFpbmRlciA3MTgxODAuNTg3RS05NTc0NzM3MjIgMS42NjIyMzQ0MyAtPiA3LjE4MTgwNTg3RS05NTc0NzM3MTcKK3hzdWI0NjEgc3VidHJhY3QgNzE4MTgwLjU4N0UtOTU3NDczNzIyIDEuNjYyMjM0NDMgLT4gLTEuNjYyMjM0NDMgSW5leGFjdCBSb3VuZGVkCit4YWRkNDYyIGFkZCAtNTE1OTIuMjY5OCAtNzEzODg1Ljc0MSAtPiAtNzY1NDc4LjAxMSBJbmV4YWN0IFJvdW5kZWQKK3hjb200NjIgY29tcGFyZSAtNTE1OTIuMjY5OCAtNzEzODg1Ljc0MSAtPiAxCit4ZGl2NDYyIGRpdmlkZSAtNTE1OTIuMjY5OCAtNzEzODg1Ljc0MSAtPiAwLjA3MjI2OTY0NjAgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDYyIGRpdmlkZWludCAtNTE1OTIuMjY5OCAtNzEzODg1Ljc0MSAtPiAwCit4bXVsNDYyIG11bHRpcGx5IC01MTU5Mi4yNjk4IC03MTM4ODUuNzQxIC0+IDMuNjgzMDk4NThFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzQ2MiBwb3dlciAtNTE1OTIuMjY5OCAtNzEzODg2IC0+IDYuMzg1NzY5MjBFLTMzNjQyNDkgSW5leGFjdCBSb3VuZGVkCit4cmVtNDYyIHJlbWFpbmRlciAtNTE1OTIuMjY5OCAtNzEzODg1Ljc0MSAtPiAtNTE1OTIuMjY5OAoreHN1YjQ2MiBzdWJ0cmFjdCAtNTE1OTIuMjY5OCAtNzEzODg1Ljc0MSAtPiA2NjIyOTMuNDcxIEluZXhhY3QgUm91bmRlZAoreGFkZDQ2MyBhZGQgNTEuMjI3OTg0OEUrODA0Mzk3NDUgMjA3LjU1OTI1RSs4NjUxNjUwNzAgLT4gMi4wNzU1OTI1MEUrODY1MTY1MDcyIEluZXhhY3QgUm91bmRlZAoreGNvbTQ2MyBjb21wYXJlIDUxLjIyNzk4NDhFKzgwNDM5NzQ1IDIwNy41NTkyNUUrODY1MTY1MDcwIC0+IC0xCit4ZGl2NDYzIGRpdmlkZSA1MS4yMjc5ODQ4RSs4MDQzOTc0NSAyMDcuNTU5MjVFKzg2NTE2NTA3MCAtPiAyLjQ2ODExMzc5RS03ODQ3MjUzMjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDYzIGRpdmlkZWludCA1MS4yMjc5ODQ4RSs4MDQzOTc0NSAyMDcuNTU5MjVFKzg2NTE2NTA3MCAtPiAwCit4bXVsNDYzIG11bHRpcGx5IDUxLjIyNzk4NDhFKzgwNDM5NzQ1IDIwNy41NTkyNUUrODY1MTY1MDcwIC0+IDEuMDYzMjg0MjFFKzk0NTYwNDgxOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NjMgcG93ZXIgNTEuMjI3OTg0OEUrODA0Mzk3NDUgMiAtPiAyLjYyNDMwNjQzRSsxNjA4Nzk0OTMgSW5leGFjdCBSb3VuZGVkCit4cmVtNDYzIHJlbWFpbmRlciA1MS4yMjc5ODQ4RSs4MDQzOTc0NSAyMDcuNTU5MjVFKzg2NTE2NTA3MCAtPiA1LjEyMjc5ODQ4RSs4MDQzOTc0NgoreHN1YjQ2MyBzdWJ0cmFjdCA1MS4yMjc5ODQ4RSs4MDQzOTc0NSAyMDcuNTU5MjVFKzg2NTE2NTA3MCAtPiAtMi4wNzU1OTI1MEUrODY1MTY1MDcyIEluZXhhY3QgUm91bmRlZAoreGFkZDQ2NCBhZGQgLTU5ODMuMjM0NjggLTM5Ljk1NDQ1MTMgLT4gLTYwMjMuMTg5MTMgSW5leGFjdCBSb3VuZGVkCit4Y29tNDY0IGNvbXBhcmUgLTU5ODMuMjM0NjggLTM5Ljk1NDQ1MTMgLT4gLTEKK3hkaXY0NjQgZGl2aWRlIC01OTgzLjIzNDY4IC0zOS45NTQ0NTEzIC0+IDE0OS43NTEzOTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDY0IGRpdmlkZWludCAtNTk4My4yMzQ2OCAtMzkuOTU0NDUxMyAtPiAxNDkKK3htdWw0NjQgbXVsdGlwbHkgLTU5ODMuMjM0NjggLTM5Ljk1NDQ1MTMgLT4gMjM5MDU2Ljg1OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NjQgcG93ZXIgLTU5ODMuMjM0NjggLTQwIC0+IDguMzY2NzgyOTFFLTE1MiBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NjQgcmVtYWluZGVyIC01OTgzLjIzNDY4IC0zOS45NTQ0NTEzIC0+IC0zMC4wMjE0MzYzCit4c3ViNDY0IHN1YnRyYWN0IC01OTgzLjIzNDY4IC0zOS45NTQ0NTEzIC0+IC01OTQzLjI4MDIzIEluZXhhY3QgUm91bmRlZAoreGFkZDQ2NSBhZGQgOTIxNjM5MzMyLkUtOTE3NTQyOTYzIDI4NzMyNS44OTEgLT4gMjg3MzI1Ljg5MSBJbmV4YWN0IFJvdW5kZWQKK3hjb200NjUgY29tcGFyZSA5MjE2MzkzMzIuRS05MTc1NDI5NjMgMjg3MzI1Ljg5MSAtPiAtMQoreGRpdjQ2NSBkaXZpZGUgOTIxNjM5MzMyLkUtOTE3NTQyOTYzIDI4NzMyNS44OTEgLT4gMy4yMDc2NDQ1NkUtOTE3NTQyOTYwIEluZXhhY3QgUm91bmRlZAoreGR2aTQ2NSBkaXZpZGVpbnQgOTIxNjM5MzMyLkUtOTE3NTQyOTYzIDI4NzMyNS44OTEgLT4gMAoreG11bDQ2NSBtdWx0aXBseSA5MjE2MzkzMzIuRS05MTc1NDI5NjMgMjg3MzI1Ljg5MSAtPiAyLjY0ODEwODQyRS05MTc1NDI5NDkgSW5leGFjdCBSb3VuZGVkCit4cG93NDY1IHBvd2VyIDkyMTYzOTMzMi5FLTkxNzU0Mjk2MyAyODczMjYgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDY1IHJlbWFpbmRlciA5MjE2MzkzMzIuRS05MTc1NDI5NjMgMjg3MzI1Ljg5MSAtPiA5LjIxNjM5MzMyRS05MTc1NDI5NTUKK3hzdWI0NjUgc3VidHJhY3QgOTIxNjM5MzMyLkUtOTE3NTQyOTYzIDI4NzMyNS44OTEgLT4gLTI4NzMyNS44OTEgSW5leGFjdCBSb3VuZGVkCit4YWRkNDY2IGFkZCA5MTA5NTkxNi44RS03ODczMTI5NjkgLTU4NjQzLjQxOEUrNTgxODk4ODAgLT4gLTUuODY0MzQxODBFKzU4MTg5ODg0IEluZXhhY3QgUm91bmRlZAoreGNvbTQ2NiBjb21wYXJlIDkxMDk1OTE2LjhFLTc4NzMxMjk2OSAtNTg2NDMuNDE4RSs1ODE4OTg4MCAtPiAxCit4ZGl2NDY2IGRpdmlkZSA5MTA5NTkxNi44RS03ODczMTI5NjkgLTU4NjQzLjQxOEUrNTgxODk4ODAgLT4gLTEuNTUzMzg2ODlFLTg0NTUwMjg0NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NjYgZGl2aWRlaW50IDkxMDk1OTE2LjhFLTc4NzMxMjk2OSAtNTg2NDMuNDE4RSs1ODE4OTg4MCAtPiAtMAoreG11bDQ2NiBtdWx0aXBseSA5MTA5NTkxNi44RS03ODczMTI5NjkgLTU4NjQzLjQxOEUrNTgxODk4ODAgLT4gLTUuMzQyMTc1OTNFLTcyOTEyMzA3NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NjYgcG93ZXIgOTEwOTU5MTYuOEUtNzg3MzEyOTY5IC02IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQ2NiByZW1haW5kZXIgOTEwOTU5MTYuOEUtNzg3MzEyOTY5IC01ODY0My40MThFKzU4MTg5ODgwIC0+IDkuMTA5NTkxNjhFLTc4NzMxMjk2MgoreHN1YjQ2NiBzdWJ0cmFjdCA5MTA5NTkxNi44RS03ODczMTI5NjkgLTU4NjQzLjQxOEUrNTgxODk4ODAgLT4gNS44NjQzNDE4MEUrNTgxODk4ODQgSW5leGFjdCBSb3VuZGVkCit4YWRkNDY3IGFkZCAtNjQxMC41NTU1IC0yMzQ5NjQyNTkgLT4gLTIzNDk3MDY3MCBJbmV4YWN0IFJvdW5kZWQKK3hjb200NjcgY29tcGFyZSAtNjQxMC41NTU1IC0yMzQ5NjQyNTkgLT4gMQoreGRpdjQ2NyBkaXZpZGUgLTY0MTAuNTU1NSAtMjM0OTY0MjU5IC0+IDAuMDAwMDI3MjgzMTA5MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NjcgZGl2aWRlaW50IC02NDEwLjU1NTUgLTIzNDk2NDI1OSAtPiAwCit4bXVsNDY3IG11bHRpcGx5IC02NDEwLjU1NTUgLTIzNDk2NDI1OSAtPiAxLjUwNjI1MTQyRSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NjcgcG93ZXIgLTY0MTAuNTU1NSAtMjM0OTY0MjU5IC0+IC0xLjI3MDY0NDY3RS04OTQ0ODQ0MTkgSW5leGFjdCBSb3VuZGVkCit4cmVtNDY3IHJlbWFpbmRlciAtNjQxMC41NTU1IC0yMzQ5NjQyNTkgLT4gLTY0MTAuNTU1NQoreHN1YjQ2NyBzdWJ0cmFjdCAtNjQxMC41NTU1IC0yMzQ5NjQyNTkgLT4gMjM0OTU3ODQ4IEluZXhhY3QgUm91bmRlZAoreGFkZDQ2OCBhZGQgLTUuMzI3MTE2MDYgLTg0NDcyODYuMjEgLT4gLTg0NDcyOTEuNTQgSW5leGFjdCBSb3VuZGVkCit4Y29tNDY4IGNvbXBhcmUgLTUuMzI3MTE2MDYgLTg0NDcyODYuMjEgLT4gMQoreGRpdjQ2OCBkaXZpZGUgLTUuMzI3MTE2MDYgLTg0NDcyODYuMjEgLT4gNi4zMDYzMDQ2OEUtNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NjggZGl2aWRlaW50IC01LjMyNzExNjA2IC04NDQ3Mjg2LjIxIC0+IDAKK3htdWw0NjggbXVsdGlwbHkgLTUuMzI3MTE2MDYgLTg0NDcyODYuMjEgLT4gNDQ5OTk2NzQuMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NjggcG93ZXIgLTUuMzI3MTE2MDYgLTg0NDcyODYgLT4gOS4wOTEzODcyOEUtNjEzNjg4OCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NjggcmVtYWluZGVyIC01LjMyNzExNjA2IC04NDQ3Mjg2LjIxIC0+IC01LjMyNzExNjA2Cit4c3ViNDY4IHN1YnRyYWN0IC01LjMyNzExNjA2IC04NDQ3Mjg2LjIxIC0+IDg0NDcyODAuODggSW5leGFjdCBSb3VuZGVkCit4YWRkNDY5IGFkZCAtODIyNzIxNzEuOCAtNzc2LjIzODU4N0UtMzcyNjkwNDE2IC0+IC04MjI3MjE3MS44IEluZXhhY3QgUm91bmRlZAoreGNvbTQ2OSBjb21wYXJlIC04MjI3MjE3MS44IC03NzYuMjM4NTg3RS0zNzI2OTA0MTYgLT4gLTEKK3hkaXY0NjkgZGl2aWRlIC04MjI3MjE3MS44IC03NzYuMjM4NTg3RS0zNzI2OTA0MTYgLT4gMS4wNTk4ODI1M0UrMzcyNjkwNDIxIEluZXhhY3QgUm91bmRlZAoreGR2aTQ2OSBkaXZpZGVpbnQgLTgyMjcyMTcxLjggLTc3Ni4yMzg1ODdFLTM3MjY5MDQxNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ2OSBtdWx0aXBseSAtODIyNzIxNzEuOCAtNzc2LjIzODU4N0UtMzcyNjkwNDE2IC0+IDYuMzg2MjgzNDRFLTM3MjY5MDQwNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NjkgcG93ZXIgLTgyMjcyMTcxLjggLTggLT4gNC43NjQwNDk5NEUtNjQgSW5leGFjdCBSb3VuZGVkCit4cmVtNDY5IHJlbWFpbmRlciAtODIyNzIxNzEuOCAtNzc2LjIzODU4N0UtMzcyNjkwNDE2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDY5IHN1YnRyYWN0IC04MjI3MjE3MS44IC03NzYuMjM4NTg3RS0zNzI2OTA0MTYgLT4gLTgyMjcyMTcxLjggSW5leGFjdCBSb3VuZGVkCit4YWRkNDcwIGFkZCA0MTI0MTEyNDQuRS03NzQzMzkyNjQgODY2NDUyLjQ2NSAtPiA4NjY0NTIuNDY1IEluZXhhY3QgUm91bmRlZAoreGNvbTQ3MCBjb21wYXJlIDQxMjQxMTI0NC5FLTc3NDMzOTI2NCA4NjY0NTIuNDY1IC0+IC0xCit4ZGl2NDcwIGRpdmlkZSA0MTI0MTEyNDQuRS03NzQzMzkyNjQgODY2NDUyLjQ2NSAtPiA0Ljc1OTc2NzY4RS03NzQzMzkyNjIgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDcwIGRpdmlkZWludCA0MTI0MTEyNDQuRS03NzQzMzkyNjQgODY2NDUyLjQ2NSAtPiAwCit4bXVsNDcwIG11bHRpcGx5IDQxMjQxMTI0NC5FLTc3NDMzOTI2NCA4NjY0NTIuNDY1IC0+IDMuNTczMzQ3MzlFLTc3NDMzOTI1MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NzAgcG93ZXIgNDEyNDExMjQ0LkUtNzc0MzM5MjY0IDg2NjQ1MiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00NzAgcmVtYWluZGVyIDQxMjQxMTI0NC5FLTc3NDMzOTI2NCA4NjY0NTIuNDY1IC0+IDQuMTI0MTEyNDRFLTc3NDMzOTI1NgoreHN1YjQ3MCBzdWJ0cmFjdCA0MTI0MTEyNDQuRS03NzQzMzkyNjQgODY2NDUyLjQ2NSAtPiAtODY2NDUyLjQ2NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NzEgYWRkIC0xMDMuNDc0NTk4IC0zLjAxNjYwNjYxRS00NDY2NjEyNTcgLT4gLTEwMy40NzQ1OTggSW5leGFjdCBSb3VuZGVkCit4Y29tNDcxIGNvbXBhcmUgLTEwMy40NzQ1OTggLTMuMDE2NjA2NjFFLTQ0NjY2MTI1NyAtPiAtMQoreGRpdjQ3MSBkaXZpZGUgLTEwMy40NzQ1OTggLTMuMDE2NjA2NjFFLTQ0NjY2MTI1NyAtPiAzLjQzMDE2NTQ2RSs0NDY2NjEyNTggSW5leGFjdCBSb3VuZGVkCit4ZHZpNDcxIGRpdmlkZWludCAtMTAzLjQ3NDU5OCAtMy4wMTY2MDY2MUUtNDQ2NjYxMjU3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDcxIG11bHRpcGx5IC0xMDMuNDc0NTk4IC0zLjAxNjYwNjYxRS00NDY2NjEyNTcgLT4gMy4xMjE0MjE1NkUtNDQ2NjYxMjU1IEluZXhhY3QgUm91bmRlZAoreHBvdzQ3MSBwb3dlciAtMTAzLjQ3NDU5OCAtMyAtPiAtOS4wMjYwNzEyM0UtNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NzEgcmVtYWluZGVyIC0xMDMuNDc0NTk4IC0zLjAxNjYwNjYxRS00NDY2NjEyNTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0NzEgc3VidHJhY3QgLTEwMy40NzQ1OTggLTMuMDE2NjA2NjFFLTQ0NjY2MTI1NyAtPiAtMTAzLjQ3NDU5OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NzIgYWRkIC0zMTAyNy44MzIzIC00NzUzNzgxODYuIC0+IC00NzU0MDkyMTQgSW5leGFjdCBSb3VuZGVkCit4Y29tNDcyIGNvbXBhcmUgLTMxMDI3LjgzMjMgLTQ3NTM3ODE4Ni4gLT4gMQoreGRpdjQ3MiBkaXZpZGUgLTMxMDI3LjgzMjMgLTQ3NTM3ODE4Ni4gLT4gMC4wMDAwNjUyNjk3ODU2IEluZXhhY3QgUm91bmRlZAoreGR2aTQ3MiBkaXZpZGVpbnQgLTMxMDI3LjgzMjMgLTQ3NTM3ODE4Ni4gLT4gMAoreG11bDQ3MiBtdWx0aXBseSAtMzEwMjcuODMyMyAtNDc1Mzc4MTg2LiAtPiAxLjQ3NDk5NTQ2RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NzIgcG93ZXIgLTMxMDI3LjgzMjMgLTQ3NTM3ODE4NiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00NzIgcmVtYWluZGVyIC0zMTAyNy44MzIzIC00NzUzNzgxODYuIC0+IC0zMTAyNy44MzIzCit4c3ViNDcyIHN1YnRyYWN0IC0zMTAyNy44MzIzIC00NzUzNzgxODYuIC0+IDQ3NTM0NzE1OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NzMgYWRkIC0xMTk5MzM5LjcyIC01LjczMDY4MzkyRSs1Mzc3NDYzMiAtPiAtNS43MzA2ODM5MkUrNTM3NzQ2MzIgSW5leGFjdCBSb3VuZGVkCit4Y29tNDczIGNvbXBhcmUgLTExOTkzMzkuNzIgLTUuNzMwNjgzOTJFKzUzNzc0NjMyIC0+IDEKK3hkaXY0NzMgZGl2aWRlIC0xMTk5MzM5LjcyIC01LjczMDY4MzkyRSs1Mzc3NDYzMiAtPiAyLjA5MjgzODcyRS01Mzc3NDYyNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NzMgZGl2aWRlaW50IC0xMTk5MzM5LjcyIC01LjczMDY4MzkyRSs1Mzc3NDYzMiAtPiAwCit4bXVsNDczIG11bHRpcGx5IC0xMTk5MzM5LjcyIC01LjczMDY4MzkyRSs1Mzc3NDYzMiAtPiA2Ljg3MzAzNjg1RSs1Mzc3NDYzOCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NzMgcG93ZXIgLTExOTkzMzkuNzIgLTYgLT4gMy4zNjAwNTc0MUUtMzcgSW5leGFjdCBSb3VuZGVkCit4cmVtNDczIHJlbWFpbmRlciAtMTE5OTMzOS43MiAtNS43MzA2ODM5MkUrNTM3NzQ2MzIgLT4gLTExOTkzMzkuNzIKK3hzdWI0NzMgc3VidHJhY3QgLTExOTkzMzkuNzIgLTUuNzMwNjgzOTJFKzUzNzc0NjMyIC0+IDUuNzMwNjgzOTJFKzUzNzc0NjMyIEluZXhhY3QgUm91bmRlZAoreGFkZDQ3NCBhZGQgLTczMjkwOC45MzBFKzM2NDM0NTQzMyAtMzQ4NjE0Ni4yNiAtPiAtNy4zMjkwODkzMEUrMzY0MzQ1NDM4IEluZXhhY3QgUm91bmRlZAoreGNvbTQ3NCBjb21wYXJlIC03MzI5MDguOTMwRSszNjQzNDU0MzMgLTM0ODYxNDYuMjYgLT4gLTEKK3hkaXY0NzQgZGl2aWRlIC03MzI5MDguOTMwRSszNjQzNDU0MzMgLTM0ODYxNDYuMjYgLT4gMi4xMDIzNDcwNUUrMzY0MzQ1NDMyIEluZXhhY3QgUm91bmRlZAoreGR2aTQ3NCBkaXZpZGVpbnQgLTczMjkwOC45MzBFKzM2NDM0NTQzMyAtMzQ4NjE0Ni4yNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ3NCBtdWx0aXBseSAtNzMyOTA4LjkzMEUrMzY0MzQ1NDMzIC0zNDg2MTQ2LjI2IC0+IDIuNTU1MDI3NzNFKzM2NDM0NTQ0NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NzQgcG93ZXIgLTczMjkwOC45MzBFKzM2NDM0NTQzMyAtMzQ4NjE0NiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00NzQgcmVtYWluZGVyIC03MzI5MDguOTMwRSszNjQzNDU0MzMgLTM0ODYxNDYuMjYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0NzQgc3VidHJhY3QgLTczMjkwOC45MzBFKzM2NDM0NTQzMyAtMzQ4NjE0Ni4yNiAtPiAtNy4zMjkwODkzMEUrMzY0MzQ1NDM4IEluZXhhY3QgUm91bmRlZAoreGFkZDQ3NSBhZGQgLTIzNzYxNTAuODMgLTQ2Nzc3NTgzLjMgLT4gLTQ5MTUzNzM0LjEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDc1IGNvbXBhcmUgLTIzNzYxNTAuODMgLTQ2Nzc3NTgzLjMgLT4gMQoreGRpdjQ3NSBkaXZpZGUgLTIzNzYxNTAuODMgLTQ2Nzc3NTgzLjMgLT4gMC4wNTA3OTY3ODQ3IEluZXhhY3QgUm91bmRlZAoreGR2aTQ3NSBkaXZpZGVpbnQgLTIzNzYxNTAuODMgLTQ2Nzc3NTgzLjMgLT4gMAoreG11bDQ3NSBtdWx0aXBseSAtMjM3NjE1MC44MyAtNDY3Nzc1ODMuMyAtPiAxLjExMTUwNTkzRSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NzUgcG93ZXIgLTIzNzYxNTAuODMgLTQ2Nzc3NTgzIC0+IC0zLjUxODg2MTkzRS0yOTgyNDc5NzYgSW5leGFjdCBSb3VuZGVkCit4cmVtNDc1IHJlbWFpbmRlciAtMjM3NjE1MC44MyAtNDY3Nzc1ODMuMyAtPiAtMjM3NjE1MC44MworeHN1YjQ3NSBzdWJ0cmFjdCAtMjM3NjE1MC44MyAtNDY3Nzc1ODMuMyAtPiA0NDQwMTQzMi41IEluZXhhY3QgUm91bmRlZAoreGFkZDQ3NiBhZGQgNi4zNjY0MjExIC0xNDA4NTQ5MDguIC0+IC0xNDA4NTQ5MDIgSW5leGFjdCBSb3VuZGVkCit4Y29tNDc2IGNvbXBhcmUgNi4zNjY0MjExIC0xNDA4NTQ5MDguIC0+IDEKK3hkaXY0NzYgZGl2aWRlIDYuMzY2NDIxMSAtMTQwODU0OTA4LiAtPiAtNC41MTk4NDMyOEUtOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NzYgZGl2aWRlaW50IDYuMzY2NDIxMSAtMTQwODU0OTA4LiAtPiAtMAoreG11bDQ3NiBtdWx0aXBseSA2LjM2NjQyMTEgLTE0MDg1NDkwOC4gLT4gLTg5Njc0MTY1OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NzYgcG93ZXIgNi4zNjY0MjExIC0xNDA4NTQ5MDggLT4gNy4yNTQzMjgwM0UtMTEzMjMyNjA4IEluZXhhY3QgUm91bmRlZAoreHJlbTQ3NiByZW1haW5kZXIgNi4zNjY0MjExIC0xNDA4NTQ5MDguIC0+IDYuMzY2NDIxMQoreHN1YjQ3NiBzdWJ0cmFjdCA2LjM2NjQyMTEgLTE0MDg1NDkwOC4gLT4gMTQwODU0OTE0IEluZXhhY3QgUm91bmRlZAoreGFkZDQ3NyBhZGQgLTE1Ljc5MTUyMiAxOTAyLjMwMjEwRSs5MDc0MTg0NCAtPiAxLjkwMjMwMjEwRSs5MDc0MTg0NyBJbmV4YWN0IFJvdW5kZWQKK3hjb200NzcgY29tcGFyZSAtMTUuNzkxNTIyIDE5MDIuMzAyMTBFKzkwNzQxODQ0IC0+IC0xCit4ZGl2NDc3IGRpdmlkZSAtMTUuNzkxNTIyIDE5MDIuMzAyMTBFKzkwNzQxODQ0IC0+IC04LjMwMTI2OTI5RS05MDc0MTg0NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NzcgZGl2aWRlaW50IC0xNS43OTE1MjIgMTkwMi4zMDIxMEUrOTA3NDE4NDQgLT4gLTAKK3htdWw0NzcgbXVsdGlwbHkgLTE1Ljc5MTUyMiAxOTAyLjMwMjEwRSs5MDc0MTg0NCAtPiAtMy4wMDQwMjQ1NUUrOTA3NDE4NDggSW5leGFjdCBSb3VuZGVkCit4cG93NDc3IHBvd2VyIC0xNS43OTE1MjIgMiAtPiAyNDkuMzcyMTY3IEluZXhhY3QgUm91bmRlZAoreHJlbTQ3NyByZW1haW5kZXIgLTE1Ljc5MTUyMiAxOTAyLjMwMjEwRSs5MDc0MTg0NCAtPiAtMTUuNzkxNTIyCit4c3ViNDc3IHN1YnRyYWN0IC0xNS43OTE1MjIgMTkwMi4zMDIxMEUrOTA3NDE4NDQgLT4gLTEuOTAyMzAyMTBFKzkwNzQxODQ3IEluZXhhY3QgUm91bmRlZAoreGFkZDQ3OCBhZGQgMTUzNTYuMTUwNUUrMzczOTUwNDI5IDIuODgwMjA0MDAgLT4gMS41MzU2MTUwNUUrMzczOTUwNDMzIEluZXhhY3QgUm91bmRlZAoreGNvbTQ3OCBjb21wYXJlIDE1MzU2LjE1MDVFKzM3Mzk1MDQyOSAyLjg4MDIwNDAwIC0+IDEKK3hkaXY0NzggZGl2aWRlIDE1MzU2LjE1MDVFKzM3Mzk1MDQyOSAyLjg4MDIwNDAwIC0+IDUuMzMxNjE5MDVFKzM3Mzk1MDQzMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NzggZGl2aWRlaW50IDE1MzU2LjE1MDVFKzM3Mzk1MDQyOSAyLjg4MDIwNDAwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDc4IG11bHRpcGx5IDE1MzU2LjE1MDVFKzM3Mzk1MDQyOSAyLjg4MDIwNDAwIC0+IDQuNDIyODg0NjFFKzM3Mzk1MDQzMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NzggcG93ZXIgMTUzNTYuMTUwNUUrMzczOTUwNDI5IDMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtNDc4IHJlbWFpbmRlciAxNTM1Ni4xNTA1RSszNzM5NTA0MjkgMi44ODAyMDQwMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ3OCBzdWJ0cmFjdCAxNTM1Ni4xNTA1RSszNzM5NTA0MjkgMi44ODAyMDQwMCAtPiAxLjUzNTYxNTA1RSszNzM5NTA0MzMgSW5leGFjdCBSb3VuZGVkCit4YWRkNDc5IGFkZCAtMy4xMjAwMTMyNkUrMzE4ODg0NzYyIDk1NjcuMjE1OTUgLT4gLTMuMTIwMDEzMjZFKzMxODg4NDc2MiBJbmV4YWN0IFJvdW5kZWQKK3hjb200NzkgY29tcGFyZSAtMy4xMjAwMTMyNkUrMzE4ODg0NzYyIDk1NjcuMjE1OTUgLT4gLTEKK3hkaXY0NzkgZGl2aWRlIC0zLjEyMDAxMzI2RSszMTg4ODQ3NjIgOTU2Ny4yMTU5NSAtPiAtMy4yNjExNTA2NkUrMzE4ODg0NzU4IEluZXhhY3QgUm91bmRlZAoreGR2aTQ3OSBkaXZpZGVpbnQgLTMuMTIwMDEzMjZFKzMxODg4NDc2MiA5NTY3LjIxNTk1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDc5IG11bHRpcGx5IC0zLjEyMDAxMzI2RSszMTg4ODQ3NjIgOTU2Ny4yMTU5NSAtPiAtMi45ODQ5ODQwNkUrMzE4ODg0NzY2IEluZXhhY3QgUm91bmRlZAoreHBvdzQ3OSBwb3dlciAtMy4xMjAwMTMyNkUrMzE4ODg0NzYyIDk1NjcgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQ3OSByZW1haW5kZXIgLTMuMTIwMDEzMjZFKzMxODg4NDc2MiA5NTY3LjIxNTk1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDc5IHN1YnRyYWN0IC0zLjEyMDAxMzI2RSszMTg4ODQ3NjIgOTU2Ny4yMTU5NSAtPiAtMy4xMjAwMTMyNkUrMzE4ODg0NzYyIEluZXhhY3QgUm91bmRlZAoreGFkZDQ4MCBhZGQgNDk0MzYuNjUyOCA3NTEuOTE5NTE3IC0+IDUwMTg4LjU3MjMgSW5leGFjdCBSb3VuZGVkCit4Y29tNDgwIGNvbXBhcmUgNDk0MzYuNjUyOCA3NTEuOTE5NTE3IC0+IDEKK3hkaXY0ODAgZGl2aWRlIDQ5NDM2LjY1MjggNzUxLjkxOTUxNyAtPiA2NS43NDcyNjY0IEluZXhhY3QgUm91bmRlZAoreGR2aTQ4MCBkaXZpZGVpbnQgNDk0MzYuNjUyOCA3NTEuOTE5NTE3IC0+IDY1Cit4bXVsNDgwIG11bHRpcGx5IDQ5NDM2LjY1MjggNzUxLjkxOTUxNyAtPiAzNzE3MjM4NC4xIEluZXhhY3QgUm91bmRlZAoreHBvdzQ4MCBwb3dlciA0OTQzNi42NTI4IDc1MiAtPiA4LjQxMTg1NzE4RSszNTI5IEluZXhhY3QgUm91bmRlZAoreHJlbTQ4MCByZW1haW5kZXIgNDk0MzYuNjUyOCA3NTEuOTE5NTE3IC0+IDU2MS44ODQxOTUKK3hzdWI0ODAgc3VidHJhY3QgNDk0MzYuNjUyOCA3NTEuOTE5NTE3IC0+IDQ4Njg0LjczMzMgSW5leGFjdCBSb3VuZGVkCit4YWRkNDgxIGFkZCA1NTIuNjY5NDUzIDguMzcyNTc2MEUrMTYyMjM1MjYgLT4gOC4zNzI1NzYwMEUrMTYyMjM1MjYgSW5leGFjdCBSb3VuZGVkCit4Y29tNDgxIGNvbXBhcmUgNTUyLjY2OTQ1MyA4LjM3MjU3NjBFKzE2MjIzNTI2IC0+IC0xCit4ZGl2NDgxIGRpdmlkZSA1NTIuNjY5NDUzIDguMzcyNTc2MEUrMTYyMjM1MjYgLT4gNi42MDA5NDg3OEUtMTYyMjM1MjUgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDgxIGRpdmlkZWludCA1NTIuNjY5NDUzIDguMzcyNTc2MEUrMTYyMjM1MjYgLT4gMAoreG11bDQ4MSBtdWx0aXBseSA1NTIuNjY5NDUzIDguMzcyNTc2MEUrMTYyMjM1MjYgLT4gNC42MjcyNjcwMEUrMTYyMjM1MjkgSW5leGFjdCBSb3VuZGVkCit4cG93NDgxIHBvd2VyIDU1Mi42Njk0NTMgOCAtPiA4LjcwNDA5NjMyRSsyMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00ODEgcmVtYWluZGVyIDU1Mi42Njk0NTMgOC4zNzI1NzYwRSsxNjIyMzUyNiAtPiA1NTIuNjY5NDUzCit4c3ViNDgxIHN1YnRyYWN0IDU1Mi42Njk0NTMgOC4zNzI1NzYwRSsxNjIyMzUyNiAtPiAtOC4zNzI1NzYwMEUrMTYyMjM1MjYgSW5leGFjdCBSb3VuZGVkCit4YWRkNDgyIGFkZCAtMzI2NjMwMyA0NTM3NDEuNTIwIC0+IC0yODEyNTYxLjQ4IFJvdW5kZWQKK3hjb200ODIgY29tcGFyZSAtMzI2NjMwMyA0NTM3NDEuNTIwIC0+IC0xCit4ZGl2NDgyIGRpdmlkZSAtMzI2NjMwMyA0NTM3NDEuNTIwIC0+IC03LjE5ODU5ODQ0IEluZXhhY3QgUm91bmRlZAoreGR2aTQ4MiBkaXZpZGVpbnQgLTMyNjYzMDMgNDUzNzQxLjUyMCAtPiAtNworeG11bDQ4MiBtdWx0aXBseSAtMzI2NjMwMyA0NTM3NDEuNTIwIC0+IC0xLjQ4MjA1NzI5RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0ODIgcG93ZXIgLTMyNjYzMDMgNDUzNzQyIC0+IDEuMDI0OTczMTVFKzI5NTU3MDEgSW5leGFjdCBSb3VuZGVkCit4cmVtNDgyIHJlbWFpbmRlciAtMzI2NjMwMyA0NTM3NDEuNTIwIC0+IC05MDExMi4zNjAKK3hzdWI0ODIgc3VidHJhY3QgLTMyNjYzMDMgNDUzNzQxLjUyMCAtPiAtMzcyMDA0NC41MiBSb3VuZGVkCit4YWRkNDgzIGFkZCAxMjMwMjc1Ny40IDU0MjkyMi40ODdFKzQxNDQ0MzM1MyAtPiA1LjQyOTIyNDg3RSs0MTQ0NDMzNTggSW5leGFjdCBSb3VuZGVkCit4Y29tNDgzIGNvbXBhcmUgMTIzMDI3NTcuNCA1NDI5MjIuNDg3RSs0MTQ0NDMzNTMgLT4gLTEKK3hkaXY0ODMgZGl2aWRlIDEyMzAyNzU3LjQgNTQyOTIyLjQ4N0UrNDE0NDQzMzUzIC0+IDIuMjY2MDI0NjVFLTQxNDQ0MzM1MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0ODMgZGl2aWRlaW50IDEyMzAyNzU3LjQgNTQyOTIyLjQ4N0UrNDE0NDQzMzUzIC0+IDAKK3htdWw0ODMgbXVsdGlwbHkgMTIzMDI3NTcuNCA1NDI5MjIuNDg3RSs0MTQ0NDMzNTMgLT4gNi42Nzk0NDM2NEUrNDE0NDQzMzY1IEluZXhhY3QgUm91bmRlZAoreHBvdzQ4MyBwb3dlciAxMjMwMjc1Ny40IDUgLT4gMi44MTg0NjI3NkUrMzUgSW5leGFjdCBSb3VuZGVkCit4cmVtNDgzIHJlbWFpbmRlciAxMjMwMjc1Ny40IDU0MjkyMi40ODdFKzQxNDQ0MzM1MyAtPiAxMjMwMjc1Ny40Cit4c3ViNDgzIHN1YnRyYWN0IDEyMzAyNzU3LjQgNTQyOTIyLjQ4N0UrNDE0NDQzMzUzIC0+IC01LjQyOTIyNDg3RSs0MTQ0NDMzNTggSW5leGFjdCBSb3VuZGVkCit4YWRkNDg0IGFkZCAtNTY3MDc1Ny43OUUtNzg0NzU0OTg0IDEyODE0NC41MDMgLT4gMTI4MTQ0LjUwMyBJbmV4YWN0IFJvdW5kZWQKK3hjb200ODQgY29tcGFyZSAtNTY3MDc1Ny43OUUtNzg0NzU0OTg0IDEyODE0NC41MDMgLT4gLTEKK3hkaXY0ODQgZGl2aWRlIC01NjcwNzU3Ljc5RS03ODQ3NTQ5ODQgMTI4MTQ0LjUwMyAtPiAtNC40MjUyODM2OUUtNzg0NzU0OTgzIEluZXhhY3QgUm91bmRlZAoreGR2aTQ4NCBkaXZpZGVpbnQgLTU2NzA3NTcuNzlFLTc4NDc1NDk4NCAxMjgxNDQuNTAzIC0+IC0wCit4bXVsNDg0IG11bHRpcGx5IC01NjcwNzU3Ljc5RS03ODQ3NTQ5ODQgMTI4MTQ0LjUwMyAtPiAtNy4yNjY3NjQzOUUtNzg0NzU0OTczIEluZXhhY3QgUm91bmRlZAoreHBvdzQ4NCBwb3dlciAtNTY3MDc1Ny43OUUtNzg0NzU0OTg0IDEyODE0NSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDg0IHJlbWFpbmRlciAtNTY3MDc1Ny43OUUtNzg0NzU0OTg0IDEyODE0NC41MDMgLT4gLTUuNjcwNzU3NzlFLTc4NDc1NDk3OAoreHN1YjQ4NCBzdWJ0cmFjdCAtNTY3MDc1Ny43OUUtNzg0NzU0OTg0IDEyODE0NC41MDMgLT4gLTEyODE0NC41MDMgSW5leGFjdCBSb3VuZGVkCit4YWRkNDg1IGFkZCAyMi43NzIxOTY4RSs4NDI1MzA2OTggNTIyMy43MDQ2MiAtPiAyLjI3NzIxOTY4RSs4NDI1MzA2OTkgSW5leGFjdCBSb3VuZGVkCit4Y29tNDg1IGNvbXBhcmUgMjIuNzcyMTk2OEUrODQyNTMwNjk4IDUyMjMuNzA0NjIgLT4gMQoreGRpdjQ4NSBkaXZpZGUgMjIuNzcyMTk2OEUrODQyNTMwNjk4IDUyMjMuNzA0NjIgLT4gNC4zNTkzOTU5NkUrODQyNTMwNjk1IEluZXhhY3QgUm91bmRlZAoreGR2aTQ4NSBkaXZpZGVpbnQgMjIuNzcyMTk2OEUrODQyNTMwNjk4IDUyMjMuNzA0NjIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0ODUgbXVsdGlwbHkgMjIuNzcyMTk2OEUrODQyNTMwNjk4IDUyMjMuNzA0NjIgLT4gMS4xODk1NTIzMEUrODQyNTMwNzAzIEluZXhhY3QgUm91bmRlZAoreHBvdzQ4NSBwb3dlciAyMi43NzIxOTY4RSs4NDI1MzA2OTggNTIyNCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00ODUgcmVtYWluZGVyIDIyLjc3MjE5NjhFKzg0MjUzMDY5OCA1MjIzLjcwNDYyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDg1IHN1YnRyYWN0IDIyLjc3MjE5NjhFKzg0MjUzMDY5OCA1MjIzLjcwNDYyIC0+IDIuMjc3MjE5NjhFKzg0MjUzMDY5OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0ODYgYWRkIDg4LjUxNTgxOTlFLTk4MDE2NDM1NyAzMjU4NDYxMTYgLT4gMzI1ODQ2MTE2IEluZXhhY3QgUm91bmRlZAoreGNvbTQ4NiBjb21wYXJlIDg4LjUxNTgxOTlFLTk4MDE2NDM1NyAzMjU4NDYxMTYgLT4gLTEKK3hkaXY0ODYgZGl2aWRlIDg4LjUxNTgxOTlFLTk4MDE2NDM1NyAzMjU4NDYxMTYgLT4gMi43MTY0OTE0OEUtOTgwMTY0MzY0IEluZXhhY3QgUm91bmRlZAoreGR2aTQ4NiBkaXZpZGVpbnQgODguNTE1ODE5OUUtOTgwMTY0MzU3IDMyNTg0NjExNiAtPiAwCit4bXVsNDg2IG11bHRpcGx5IDg4LjUxNTgxOTlFLTk4MDE2NDM1NyAzMjU4NDYxMTYgLT4gMi44ODQyNTM2MUUtOTgwMTY0MzQ3IEluZXhhY3QgUm91bmRlZAoreHBvdzQ4NiBwb3dlciA4OC41MTU4MTk5RS05ODAxNjQzNTcgMzI1ODQ2MTE2IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ4NiByZW1haW5kZXIgODguNTE1ODE5OUUtOTgwMTY0MzU3IDMyNTg0NjExNiAtPiA4Ljg1MTU4MTk5RS05ODAxNjQzNTYKK3hzdWI0ODYgc3VidHJhY3QgODguNTE1ODE5OUUtOTgwMTY0MzU3IDMyNTg0NjExNiAtPiAtMzI1ODQ2MTE2IEluZXhhY3QgUm91bmRlZAoreGFkZDQ4NyBhZGQgLTIyODgxLjA0MDggNS42MzY2MTU2MiAtPiAtMjI4NzUuNDA0MiBJbmV4YWN0IFJvdW5kZWQKK3hjb200ODcgY29tcGFyZSAtMjI4ODEuMDQwOCA1LjYzNjYxNTYyIC0+IC0xCit4ZGl2NDg3IGRpdmlkZSAtMjI4ODEuMDQwOCA1LjYzNjYxNTYyIC0+IC00MDU5LjM1ODAyIEluZXhhY3QgUm91bmRlZAoreGR2aTQ4NyBkaXZpZGVpbnQgLTIyODgxLjA0MDggNS42MzY2MTU2MiAtPiAtNDA1OQoreG11bDQ4NyBtdWx0aXBseSAtMjI4ODEuMDQwOCA1LjYzNjYxNTYyIC0+IC0xMjg5NzEuNjMyIEluZXhhY3QgUm91bmRlZAoreHBvdzQ4NyBwb3dlciAtMjI4ODEuMDQwOCA2IC0+IDEuNDM1MDA5MDlFKzI2IEluZXhhY3QgUm91bmRlZAoreHJlbTQ4NyByZW1haW5kZXIgLTIyODgxLjA0MDggNS42MzY2MTU2MiAtPiAtMi4wMTc5OTg0MgoreHN1YjQ4NyBzdWJ0cmFjdCAtMjI4ODEuMDQwOCA1LjYzNjYxNTYyIC0+IC0yMjg4Ni42Nzc0IEluZXhhY3QgUm91bmRlZAoreGFkZDQ4OCBhZGQgLTcxNTcuNTc0NDkgLTc2LjQ0NTU1MTlFLTg1NjQ3MDQ3IC0+IC03MTU3LjU3NDQ5IEluZXhhY3QgUm91bmRlZAoreGNvbTQ4OCBjb21wYXJlIC03MTU3LjU3NDQ5IC03Ni40NDU1NTE5RS04NTY0NzA0NyAtPiAtMQoreGRpdjQ4OCBkaXZpZGUgLTcxNTcuNTc0NDkgLTc2LjQ0NTU1MTlFLTg1NjQ3MDQ3IC0+IDkuMzYyOTcwNTJFKzg1NjQ3MDQ4IEluZXhhY3QgUm91bmRlZAoreGR2aTQ4OCBkaXZpZGVpbnQgLTcxNTcuNTc0NDkgLTc2LjQ0NTU1MTlFLTg1NjQ3MDQ3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDg4IG11bHRpcGx5IC03MTU3LjU3NDQ5IC03Ni40NDU1NTE5RS04NTY0NzA0NyAtPiA1LjQ3MTY0NzMyRS04NTY0NzA0MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0ODggcG93ZXIgLTcxNTcuNTc0NDkgLTggLT4gMS40NTE2ODcwMEUtMzEgSW5leGFjdCBSb3VuZGVkCit4cmVtNDg4IHJlbWFpbmRlciAtNzE1Ny41NzQ0OSAtNzYuNDQ1NTUxOUUtODU2NDcwNDcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0ODggc3VidHJhY3QgLTcxNTcuNTc0NDkgLTc2LjQ0NTU1MTlFLTg1NjQ3MDQ3IC0+IC03MTU3LjU3NDQ5IEluZXhhY3QgUm91bmRlZAoreGFkZDQ4OSBhZGQgLTUwMzExMy44MDEgLTk3MTUxNDkuODJFLTYxMjE4NDQyMiAtPiAtNTAzMTEzLjgwMSBJbmV4YWN0IFJvdW5kZWQKK3hjb200ODkgY29tcGFyZSAtNTAzMTEzLjgwMSAtOTcxNTE0OS44MkUtNjEyMTg0NDIyIC0+IC0xCit4ZGl2NDg5IGRpdmlkZSAtNTAzMTEzLjgwMSAtOTcxNTE0OS44MkUtNjEyMTg0NDIyIC0+IDUuMTc4NjUyMDFFKzYxMjE4NDQyMCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0ODkgZGl2aWRlaW50IC01MDMxMTMuODAxIC05NzE1MTQ5LjgyRS02MTIxODQ0MjIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0ODkgbXVsdGlwbHkgLTUwMzExMy44MDEgLTk3MTUxNDkuODJFLTYxMjE4NDQyMiAtPiA0Ljg4NzgyNTk1RS02MTIxODQ0MTAgSW5leGFjdCBSb3VuZGVkCit4cG93NDg5IHBvd2VyIC01MDMxMTMuODAxIC0xMCAtPiA5LjYyMzYwMjg3RS01OCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00ODkgcmVtYWluZGVyIC01MDMxMTMuODAxIC05NzE1MTQ5LjgyRS02MTIxODQ0MjIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0ODkgc3VidHJhY3QgLTUwMzExMy44MDEgLTk3MTUxNDkuODJFLTYxMjE4NDQyMiAtPiAtNTAzMTEzLjgwMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0OTAgYWRkIC0zMDY2OTYyLjQxIC01NS4zMDk2ODc5IC0+IC0zMDY3MDE3LjcyIEluZXhhY3QgUm91bmRlZAoreGNvbTQ5MCBjb21wYXJlIC0zMDY2OTYyLjQxIC01NS4zMDk2ODc5IC0+IC0xCit4ZGl2NDkwIGRpdmlkZSAtMzA2Njk2Mi40MSAtNTUuMzA5Njg3OSAtPiA1NTQ1MC43MjcxIEluZXhhY3QgUm91bmRlZAoreGR2aTQ5MCBkaXZpZGVpbnQgLTMwNjY5NjIuNDEgLTU1LjMwOTY4NzkgLT4gNTU0NTAKK3htdWw0OTAgbXVsdGlwbHkgLTMwNjY5NjIuNDEgLTU1LjMwOTY4NzkgLT4gMTY5NjMyNzM0IEluZXhhY3QgUm91bmRlZAoreHBvdzQ5MCBwb3dlciAtMzA2Njk2Mi40MSAtNTUgLT4gLTEuNzAyMjk2MDBFLTM1NyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00OTAgcmVtYWluZGVyIC0zMDY2OTYyLjQxIC01NS4zMDk2ODc5IC0+IC00MC4yMTU5NDUwCit4c3ViNDkwIHN1YnRyYWN0IC0zMDY2OTYyLjQxIC01NS4zMDk2ODc5IC0+IC0zMDY2OTA3LjEwIEluZXhhY3QgUm91bmRlZAoreGFkZDQ5MSBhZGQgLTUzMzExLjU3MzhFKzE1NjYwODkzNiAtNy40NTg5MDY2NiAtPiAtNS4zMzExNTczOEUrMTU2NjA4OTQwIEluZXhhY3QgUm91bmRlZAoreGNvbTQ5MSBjb21wYXJlIC01MzMxMS41NzM4RSsxNTY2MDg5MzYgLTcuNDU4OTA2NjYgLT4gLTEKK3hkaXY0OTEgZGl2aWRlIC01MzMxMS41NzM4RSsxNTY2MDg5MzYgLTcuNDU4OTA2NjYgLT4gNy4xNDczNzEwOUUrMTU2NjA4OTM5IEluZXhhY3QgUm91bmRlZAoreGR2aTQ5MSBkaXZpZGVpbnQgLTUzMzExLjU3MzhFKzE1NjYwODkzNiAtNy40NTg5MDY2NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ5MSBtdWx0aXBseSAtNTMzMTEuNTczOEUrMTU2NjA4OTM2IC03LjQ1ODkwNjY2IC0+IDMuOTc2NDYwNTNFKzE1NjYwODk0MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0OTEgcG93ZXIgLTUzMzExLjU3MzhFKzE1NjYwODkzNiAtNyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDkxIHJlbWFpbmRlciAtNTMzMTEuNTczOEUrMTU2NjA4OTM2IC03LjQ1ODkwNjY2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDkxIHN1YnRyYWN0IC01MzMxMS41NzM4RSsxNTY2MDg5MzYgLTcuNDU4OTA2NjYgLT4gLTUuMzMxMTU3MzhFKzE1NjYwODk0MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0OTIgYWRkIDk5ODg5MDA2OC4gLTkyLjA1Nzg3OSAtPiA5OTg4ODk5NzYgSW5leGFjdCBSb3VuZGVkCit4Y29tNDkyIGNvbXBhcmUgOTk4ODkwMDY4LiAtOTIuMDU3ODc5IC0+IDEKK3hkaXY0OTIgZGl2aWRlIDk5ODg5MDA2OC4gLTkyLjA1Nzg3OSAtPiAtMTA4NTA2NzQuNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0OTIgZGl2aWRlaW50IDk5ODg5MDA2OC4gLTkyLjA1Nzg3OSAtPiAtMTA4NTA2NzQKK3htdWw0OTIgbXVsdGlwbHkgOTk4ODkwMDY4LiAtOTIuMDU3ODc5IC0+IC05LjE5NTU3MDEwRSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0OTIgcG93ZXIgOTk4ODkwMDY4LiAtOTIgLT4gMS4xMDc1NzIyNUUtODI4IEluZXhhY3QgUm91bmRlZAoreHJlbTQ5MiByZW1haW5kZXIgOTk4ODkwMDY4LiAtOTIuMDU3ODc5IC0+IDMzLjgzOTU1NAoreHN1YjQ5MiBzdWJ0cmFjdCA5OTg4OTAwNjguIC05Mi4wNTc4NzkgLT4gOTk4ODkwMTYwIEluZXhhY3QgUm91bmRlZAoreGFkZDQ5MyBhZGQgMTIyLjQ5NTU5MSAtNDA3ODM2MDI4LiAtPiAtNDA3ODM1OTA2IEluZXhhY3QgUm91bmRlZAoreGNvbTQ5MyBjb21wYXJlIDEyMi40OTU1OTEgLTQwNzgzNjAyOC4gLT4gMQoreGRpdjQ5MyBkaXZpZGUgMTIyLjQ5NTU5MSAtNDA3ODM2MDI4LiAtPiAtMy4wMDM1NTAwMkUtNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0OTMgZGl2aWRlaW50IDEyMi40OTU1OTEgLTQwNzgzNjAyOC4gLT4gLTAKK3htdWw0OTMgbXVsdGlwbHkgMTIyLjQ5NTU5MSAtNDA3ODM2MDI4LiAtPiAtNC45OTU4MTE1M0UrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93NDkzIHBvd2VyIDEyMi40OTU1OTEgLTQwNzgzNjAyOCAtPiA0LjgyNDYzNzczRS04NTE2MTA3NTQgSW5leGFjdCBSb3VuZGVkCit4cmVtNDkzIHJlbWFpbmRlciAxMjIuNDk1NTkxIC00MDc4MzYwMjguIC0+IDEyMi40OTU1OTEKK3hzdWI0OTMgc3VidHJhY3QgMTIyLjQ5NTU5MSAtNDA3ODM2MDI4LiAtPiA0MDc4MzYxNTAgSW5leGFjdCBSb3VuZGVkCit4YWRkNDk0IGFkZCAxODcwOTguNDg4IDYyMjAuMDU1ODRFLTIzNjU0MTI0OSAtPiAxODcwOTguNDg4IEluZXhhY3QgUm91bmRlZAoreGNvbTQ5NCBjb21wYXJlIDE4NzA5OC40ODggNjIyMC4wNTU4NEUtMjM2NTQxMjQ5IC0+IDEKK3hkaXY0OTQgZGl2aWRlIDE4NzA5OC40ODggNjIyMC4wNTU4NEUtMjM2NTQxMjQ5IC0+IDMuMDA3OTg3MjdFKzIzNjU0MTI1MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0OTQgZGl2aWRlaW50IDE4NzA5OC40ODggNjIyMC4wNTU4NEUtMjM2NTQxMjQ5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDk0IG11bHRpcGx5IDE4NzA5OC40ODggNjIyMC4wNTU4NEUtMjM2NTQxMjQ5IC0+IDEuMTYzNzYzMDRFLTIzNjU0MTI0MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0OTQgcG93ZXIgMTg3MDk4LjQ4OCA2IC0+IDQuMjg5NjQ4MTFFKzMxIEluZXhhY3QgUm91bmRlZAoreHJlbTQ5NCByZW1haW5kZXIgMTg3MDk4LjQ4OCA2MjIwLjA1NTg0RS0yMzY1NDEyNDkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0OTQgc3VidHJhY3QgMTg3MDk4LjQ4OCA2MjIwLjA1NTg0RS0yMzY1NDEyNDkgLT4gMTg3MDk4LjQ4OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0OTUgYWRkIDQ4MTk4OTkuMjFFKzQzMjk4MjU1MCAtNzI3NDQxOTE3IC0+IDQuODE5ODk5MjFFKzQzMjk4MjU1NiBJbmV4YWN0IFJvdW5kZWQKK3hjb200OTUgY29tcGFyZSA0ODE5ODk5LjIxRSs0MzI5ODI1NTAgLTcyNzQ0MTkxNyAtPiAxCit4ZGl2NDk1IGRpdmlkZSA0ODE5ODk5LjIxRSs0MzI5ODI1NTAgLTcyNzQ0MTkxNyAtPiAtNi42MjU4MjAwMUUrNDMyOTgyNTQ3IEluZXhhY3QgUm91bmRlZAoreGR2aTQ5NSBkaXZpZGVpbnQgNDgxOTg5OS4yMUUrNDMyOTgyNTUwIC03Mjc0NDE5MTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0OTUgbXVsdGlwbHkgNDgxOTg5OS4yMUUrNDMyOTgyNTUwIC03Mjc0NDE5MTcgLT4gLTMuNTA2MTk2NzJFKzQzMjk4MjU2NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0OTUgcG93ZXIgNDgxOTg5OS4yMUUrNDMyOTgyNTUwIC03Mjc0NDE5MTcgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDk1IHJlbWFpbmRlciA0ODE5ODk5LjIxRSs0MzI5ODI1NTAgLTcyNzQ0MTkxNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ5NSBzdWJ0cmFjdCA0ODE5ODk5LjIxRSs0MzI5ODI1NTAgLTcyNzQ0MTkxNyAtPiA0LjgxOTg5OTIxRSs0MzI5ODI1NTYgSW5leGFjdCBSb3VuZGVkCit4YWRkNDk2IGFkZCA1NzcwLjAxMDIwRSs1MDc0NTk3NTIgLTQyMDgzMzkuMzNFLTEyOTc2NjY4MCAtPiA1Ljc3MDAxMDIwRSs1MDc0NTk3NTUgSW5leGFjdCBSb3VuZGVkCit4Y29tNDk2IGNvbXBhcmUgNTc3MC4wMTAyMEUrNTA3NDU5NzUyIC00MjA4MzM5LjMzRS0xMjk3NjY2ODAgLT4gMQoreGRpdjQ5NiBkaXZpZGUgNTc3MC4wMTAyMEUrNTA3NDU5NzUyIC00MjA4MzM5LjMzRS0xMjk3NjY2ODAgLT4gLTEuMzcxMDg5NThFKzYzNzIyNjQyOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0OTYgZGl2aWRlaW50IDU3NzAuMDEwMjBFKzUwNzQ1OTc1MiAtNDIwODMzOS4zM0UtMTI5NzY2NjgwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDk2IG11bHRpcGx5IDU3NzAuMDEwMjBFKzUwNzQ1OTc1MiAtNDIwODMzOS4zM0UtMTI5NzY2NjgwIC0+IC0yLjQyODIxNjA5RSszNzc2OTMwODIgSW5leGFjdCBSb3VuZGVkCit4cG93NDk2IHBvd2VyIDU3NzAuMDEwMjBFKzUwNzQ1OTc1MiAtNCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00OTYgcmVtYWluZGVyIDU3NzAuMDEwMjBFKzUwNzQ1OTc1MiAtNDIwODMzOS4zM0UtMTI5NzY2NjgwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDk2IHN1YnRyYWN0IDU3NzAuMDEwMjBFKzUwNzQ1OTc1MiAtNDIwODMzOS4zM0UtMTI5NzY2NjgwIC0+IDUuNzcwMDEwMjBFKzUwNzQ1OTc1NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0OTcgYWRkIC0yODYuMzcxMzIwIDcxMDMxOTE1MiAtPiA3MTAzMTg4NjYgSW5leGFjdCBSb3VuZGVkCit4Y29tNDk3IGNvbXBhcmUgLTI4Ni4zNzEzMjAgNzEwMzE5MTUyIC0+IC0xCit4ZGl2NDk3IGRpdmlkZSAtMjg2LjM3MTMyMCA3MTAzMTkxNTIgLT4gLTQuMDMxNTg2NjRFLTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDk3IGRpdmlkZWludCAtMjg2LjM3MTMyMCA3MTAzMTkxNTIgLT4gLTAKK3htdWw0OTcgbXVsdGlwbHkgLTI4Ni4zNzEzMjAgNzEwMzE5MTUyIC0+IC0yLjAzNDE1MDMzRSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0OTcgcG93ZXIgLTI4Ni4zNzEzMjAgNzEwMzE5MTUyIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQ5NyByZW1haW5kZXIgLTI4Ni4zNzEzMjAgNzEwMzE5MTUyIC0+IC0yODYuMzcxMzIwCit4c3ViNDk3IHN1YnRyYWN0IC0yODYuMzcxMzIwIDcxMDMxOTE1MiAtPiAtNzEwMzE5NDM4IEluZXhhY3QgUm91bmRlZAoreGFkZDQ5OCBhZGQgLTcuMjc0MDM1MzYgLTQ4MTQ2OTY1NkUtODM1MTgzNzAwIC0+IC03LjI3NDAzNTM2IEluZXhhY3QgUm91bmRlZAoreGNvbTQ5OCBjb21wYXJlIC03LjI3NDAzNTM2IC00ODE0Njk2NTZFLTgzNTE4MzcwMCAtPiAtMQoreGRpdjQ5OCBkaXZpZGUgLTcuMjc0MDM1MzYgLTQ4MTQ2OTY1NkUtODM1MTgzNzAwIC0+IDEuNTEwNzk4MzBFKzgzNTE4MzY5MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0OTggZGl2aWRlaW50IC03LjI3NDAzNTM2IC00ODE0Njk2NTZFLTgzNTE4MzcwMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ5OCBtdWx0aXBseSAtNy4yNzQwMzUzNiAtNDgxNDY5NjU2RS04MzUxODM3MDAgLT4gMy41MDIyMjczMEUtODM1MTgzNjkxIEluZXhhY3QgUm91bmRlZAoreHBvdzQ5OCBwb3dlciAtNy4yNzQwMzUzNiAtNSAtPiAtMC4wMDAwNDkxMDQ2ODg1IEluZXhhY3QgUm91bmRlZAoreHJlbTQ5OCByZW1haW5kZXIgLTcuMjc0MDM1MzYgLTQ4MTQ2OTY1NkUtODM1MTgzNzAwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDk4IHN1YnRyYWN0IC03LjI3NDAzNTM2IC00ODE0Njk2NTZFLTgzNTE4MzcwMCAtPiAtNy4yNzQwMzUzNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0OTkgYWRkIC02MTU3Ljc0MjkyIC05NDA3NTI4Ni4yRSs5MjU1NTg3NyAtPiAtOS40MDc1Mjg2MkUrOTI1NTU4ODQgSW5leGFjdCBSb3VuZGVkCit4Y29tNDk5IGNvbXBhcmUgLTYxNTcuNzQyOTIgLTk0MDc1Mjg2LjJFKzkyNTU1ODc3IC0+IDEKK3hkaXY0OTkgZGl2aWRlIC02MTU3Ljc0MjkyIC05NDA3NTI4Ni4yRSs5MjU1NTg3NyAtPiA2LjU0NTU0NzkwRS05MjU1NTg4MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0OTkgZGl2aWRlaW50IC02MTU3Ljc0MjkyIC05NDA3NTI4Ni4yRSs5MjU1NTg3NyAtPiAwCit4bXVsNDk5IG11bHRpcGx5IC02MTU3Ljc0MjkyIC05NDA3NTI4Ni4yRSs5MjU1NTg3NyAtPiA1Ljc5MjkxNDI4RSs5MjU1NTg4OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0OTkgcG93ZXIgLTYxNTcuNzQyOTIgLTkgLT4gLTcuODU2MDgyMThFLTM1IEluZXhhY3QgUm91bmRlZAoreHJlbTQ5OSByZW1haW5kZXIgLTYxNTcuNzQyOTIgLTk0MDc1Mjg2LjJFKzkyNTU1ODc3IC0+IC02MTU3Ljc0MjkyCit4c3ViNDk5IHN1YnRyYWN0IC02MTU3Ljc0MjkyIC05NDA3NTI4Ni4yRSs5MjU1NTg3NyAtPiA5LjQwNzUyODYyRSs5MjU1NTg4NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ1MDAgYWRkIC01MjU0NDUwODcuRSsyMzE1MjkxNjcgMTg4MjI3NDYwIC0+IC01LjI1NDQ1MDg3RSsyMzE1MjkxNzUgSW5leGFjdCBSb3VuZGVkCit4Y29tNTAwIGNvbXBhcmUgLTUyNTQ0NTA4Ny5FKzIzMTUyOTE2NyAxODgyMjc0NjAgLT4gLTEKK3hkaXY1MDAgZGl2aWRlIC01MjU0NDUwODcuRSsyMzE1MjkxNjcgMTg4MjI3NDYwIC0+IC0yLjc5MTU0MzIxRSsyMzE1MjkxNjcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNTAwIGRpdmlkZWludCAtNTI1NDQ1MDg3LkUrMjMxNTI5MTY3IDE4ODIyNzQ2MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDUwMCBtdWx0aXBseSAtNTI1NDQ1MDg3LkUrMjMxNTI5MTY3IDE4ODIyNzQ2MCAtPiAtOS44OTAzMTk0MUUrMjMxNTI5MTgzIEluZXhhY3QgUm91bmRlZAoreHBvdzUwMCBwb3dlciAtNTI1NDQ1MDg3LkUrMjMxNTI5MTY3IDE4ODIyNzQ2MCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW01MDAgcmVtYWluZGVyIC01MjU0NDUwODcuRSsyMzE1MjkxNjcgMTg4MjI3NDYwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNTAwIHN1YnRyYWN0IC01MjU0NDUwODcuRSsyMzE1MjkxNjcgMTg4MjI3NDYwIC0+IC01LjI1NDQ1MDg3RSsyMzE1MjkxNzUgSW5leGFjdCBSb3VuZGVkCisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmVkdWNlLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JlZHVjZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Yzg1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JlZHVjZS5kZWNUZXN0CkBAIC0wLDAgKzEsMjM0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHJlZHVjZS5kZWNUZXN0IC0tIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDMsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFtUaGlzIHVzZWQgdG8gYmUgY2FsbGVkIG5vcm1hbGl6ZS5dCisKK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKKworcmVkeDAwMSByZWR1Y2UgJzEnICAgICAgLT4gJzEnCityZWR4MDAyIHJlZHVjZSAnLTEnICAgICAtPiAnLTEnCityZWR4MDAzIHJlZHVjZSAnMS4wMCcgICAtPiAnMScKK3JlZHgwMDQgcmVkdWNlICctMS4wMCcgIC0+ICctMScKK3JlZHgwMDUgcmVkdWNlICcwJyAgICAgIC0+ICcwJworcmVkeDAwNiByZWR1Y2UgJzAuMDAnICAgLT4gJzAnCityZWR4MDA3IHJlZHVjZSAnMDAuMCcgICAtPiAnMCcKK3JlZHgwMDggcmVkdWNlICcwMC4wMCcgIC0+ICcwJworcmVkeDAwOSByZWR1Y2UgJzAwJyAgICAgLT4gJzAnCityZWR4MDEwIHJlZHVjZSAnMEUrMScgICAtPiAnMCcKK3JlZHgwMTEgcmVkdWNlICcwRSs1JyAgIC0+ICcwJworCityZWR4MDEyIHJlZHVjZSAnLTInICAgICAtPiAnLTInCityZWR4MDEzIHJlZHVjZSAnMicgICAgICAtPiAnMicKK3JlZHgwMTQgcmVkdWNlICctMi4wMCcgIC0+ICctMicKK3JlZHgwMTUgcmVkdWNlICcyLjAwJyAgIC0+ICcyJworcmVkeDAxNiByZWR1Y2UgJy0wJyAgICAgLT4gJy0wJworcmVkeDAxNyByZWR1Y2UgJy0wLjAwJyAgLT4gJy0wJworcmVkeDAxOCByZWR1Y2UgJy0wMC4wJyAgLT4gJy0wJworcmVkeDAxOSByZWR1Y2UgJy0wMC4wMCcgLT4gJy0wJworcmVkeDAyMCByZWR1Y2UgJy0wMCcgICAgLT4gJy0wJworcmVkeDAyMSByZWR1Y2UgJy0wRSs1JyAgIC0+ICctMCcKK3JlZHgwMjIgcmVkdWNlICctMEUrMScgIC0+ICctMCcKKworcmVkeDAzMCByZWR1Y2UgJyswLjEnICAgICAgICAgICAgLT4gJzAuMScKK3JlZHgwMzEgcmVkdWNlICctMC4xJyAgICAgICAgICAgIC0+ICctMC4xJworcmVkeDAzMiByZWR1Y2UgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCityZWR4MDMzIHJlZHVjZSAnLTAuMDEnICAgICAgICAgICAtPiAnLTAuMDEnCityZWR4MDM0IHJlZHVjZSAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCityZWR4MDM1IHJlZHVjZSAnLTAuMDAxJyAgICAgICAgICAtPiAnLTAuMDAxJworcmVkeDAzNiByZWR1Y2UgJyswLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJworcmVkeDAzNyByZWR1Y2UgJy0wLjAwMDAwMScgICAgICAgLT4gJy0wLjAwMDAwMScKK3JlZHgwMzggcmVkdWNlICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKK3JlZHgwMzkgcmVkdWNlICctMC4wMDAwMDAwMDAwMDEnIC0+ICctMUUtMTInCisKK3JlZHgwNDEgcmVkdWNlIDEuMSAgICAgICAgLT4gMS4xCityZWR4MDQyIHJlZHVjZSAxLjEwICAgICAgIC0+IDEuMQorcmVkeDA0MyByZWR1Y2UgMS4xMDAgICAgICAtPiAxLjEKK3JlZHgwNDQgcmVkdWNlIDEuMTEwICAgICAgLT4gMS4xMQorcmVkeDA0NSByZWR1Y2UgLTEuMSAgICAgICAtPiAtMS4xCityZWR4MDQ2IHJlZHVjZSAtMS4xMCAgICAgIC0+IC0xLjEKK3JlZHgwNDcgcmVkdWNlIC0xLjEwMCAgICAgLT4gLTEuMQorcmVkeDA0OCByZWR1Y2UgLTEuMTEwICAgICAtPiAtMS4xMQorcmVkeDA0OSByZWR1Y2UgOS45ICAgICAgICAtPiA5LjkKK3JlZHgwNTAgcmVkdWNlIDkuOTAgICAgICAgLT4gOS45CityZWR4MDUxIHJlZHVjZSA5LjkwMCAgICAgIC0+IDkuOQorcmVkeDA1MiByZWR1Y2UgOS45OTAgICAgICAtPiA5Ljk5CityZWR4MDUzIHJlZHVjZSAtOS45ICAgICAgIC0+IC05LjkKK3JlZHgwNTQgcmVkdWNlIC05LjkwICAgICAgLT4gLTkuOQorcmVkeDA1NSByZWR1Y2UgLTkuOTAwICAgICAtPiAtOS45CityZWR4MDU2IHJlZHVjZSAtOS45OTAgICAgIC0+IC05Ljk5CisKKy0tIHNvbWUgdHJhaWxpbmcgZnJhY3Rpb25hbCB6ZXJvcyB3aXRoIHplcm9zIGluIHVuaXRzCityZWR4MDYwIHJlZHVjZSAgMTAuMCAgICAgICAgLT4gMUUrMQorcmVkeDA2MSByZWR1Y2UgIDEwLjAwICAgICAgIC0+IDFFKzEKK3JlZHgwNjIgcmVkdWNlICAxMDAuMCAgICAgICAtPiAxRSsyCityZWR4MDYzIHJlZHVjZSAgMTAwLjAwICAgICAgLT4gMUUrMgorcmVkeDA2NCByZWR1Y2UgIDEuMTAwMEUrMyAgIC0+IDEuMUUrMworcmVkeDA2NSByZWR1Y2UgIDEuMTAwMDBFKzMgIC0+IDEuMUUrMworcmVkeDA2NiByZWR1Y2UgLTEwLjAgICAgICAgIC0+IC0xRSsxCityZWR4MDY3IHJlZHVjZSAtMTAuMDAgICAgICAgLT4gLTFFKzEKK3JlZHgwNjggcmVkdWNlIC0xMDAuMCAgICAgICAtPiAtMUUrMgorcmVkeDA2OSByZWR1Y2UgLTEwMC4wMCAgICAgIC0+IC0xRSsyCityZWR4MDcwIHJlZHVjZSAtMS4xMDAwRSszICAgLT4gLTEuMUUrMworcmVkeDA3MSByZWR1Y2UgLTEuMTAwMDBFKzMgIC0+IC0xLjFFKzMKKworLS0gc29tZSBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIHdpdGggcG9zaXRpdmUgZXhwb25lbnQKK3JlZHgwODAgcmVkdWNlICAxMEUrMSAgICAgICAtPiAxRSsyCityZWR4MDgxIHJlZHVjZSAgMTAwRSsxICAgICAgLT4gMUUrMworcmVkeDA4MiByZWR1Y2UgIDEuMEUrMiAgICAgIC0+IDFFKzIKK3JlZHgwODMgcmVkdWNlICAxLjBFKzMgICAgICAtPiAxRSszCityZWR4MDg0IHJlZHVjZSAgMS4xRSszICAgICAgLT4gMS4xRSszCityZWR4MDg1IHJlZHVjZSAgMS4wMEUrMyAgICAgLT4gMUUrMworcmVkeDA4NiByZWR1Y2UgIDEuMTBFKzMgICAgIC0+IDEuMUUrMworcmVkeDA4NyByZWR1Y2UgLTEwRSsxICAgICAgIC0+IC0xRSsyCityZWR4MDg4IHJlZHVjZSAtMTAwRSsxICAgICAgLT4gLTFFKzMKK3JlZHgwODkgcmVkdWNlIC0xLjBFKzIgICAgICAtPiAtMUUrMgorcmVkeDA5MCByZWR1Y2UgLTEuMEUrMyAgICAgIC0+IC0xRSszCityZWR4MDkxIHJlZHVjZSAtMS4xRSszICAgICAgLT4gLTEuMUUrMworcmVkeDA5MiByZWR1Y2UgLTEuMDBFKzMgICAgIC0+IC0xRSszCityZWR4MDkzIHJlZHVjZSAtMS4xMEUrMyAgICAgLT4gLTEuMUUrMworCistLSBzb21lIHNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zLCB3ZXJlIHdlIHRvIGJlIHRyaW1taW5nCityZWR4MTAwIHJlZHVjZSAgMTEgICAgICAgICAgLT4gMTEKK3JlZHgxMDEgcmVkdWNlICAxMCAgICAgICAgICAtPiAxRSsxCityZWR4MTAyIHJlZHVjZSAgMTAuICAgICAgICAgLT4gMUUrMQorcmVkeDEwMyByZWR1Y2UgIDEuMUUrMSAgICAgIC0+IDExCityZWR4MTA0IHJlZHVjZSAgMS4wRSsxICAgICAgLT4gMUUrMQorcmVkeDEwNSByZWR1Y2UgIDEuMTBFKzIgICAgIC0+IDEuMUUrMgorcmVkeDEwNiByZWR1Y2UgIDEuMDBFKzIgICAgIC0+IDFFKzIKK3JlZHgxMDcgcmVkdWNlICAxLjEwMEUrMyAgICAtPiAxLjFFKzMKK3JlZHgxMDggcmVkdWNlICAxLjAwMEUrMyAgICAtPiAxRSszCityZWR4MTA5IHJlZHVjZSAgMS4wMDAwMDBFKzYgLT4gMUUrNgorcmVkeDExMCByZWR1Y2UgLTExICAgICAgICAgIC0+IC0xMQorcmVkeDExMSByZWR1Y2UgLTEwICAgICAgICAgIC0+IC0xRSsxCityZWR4MTEyIHJlZHVjZSAtMTAuICAgICAgICAgLT4gLTFFKzEKK3JlZHgxMTMgcmVkdWNlIC0xLjFFKzEgICAgICAtPiAtMTEKK3JlZHgxMTQgcmVkdWNlIC0xLjBFKzEgICAgICAtPiAtMUUrMQorcmVkeDExNSByZWR1Y2UgLTEuMTBFKzIgICAgIC0+IC0xLjFFKzIKK3JlZHgxMTYgcmVkdWNlIC0xLjAwRSsyICAgICAtPiAtMUUrMgorcmVkeDExNyByZWR1Y2UgLTEuMTAwRSszICAgIC0+IC0xLjFFKzMKK3JlZHgxMTggcmVkdWNlIC0xLjAwMEUrMyAgICAtPiAtMUUrMworcmVkeDExOSByZWR1Y2UgLTEuMDAwMDBFKzUgIC0+IC0xRSs1CityZWR4MTIwIHJlZHVjZSAtMS4wMDAwMDBFKzYgLT4gLTFFKzYKK3JlZHgxMjEgcmVkdWNlIC0xMC4wMDAwMEUrNiAtPiAtMUUrNworcmVkeDEyMiByZWR1Y2UgLTEwMC4wMDAwRSs2IC0+IC0xRSs4CityZWR4MTIzIHJlZHVjZSAtMTAwMC4wMDBFKzYgLT4gLTFFKzkKK3JlZHgxMjQgcmVkdWNlIC0xMDAwMC4wMEUrNiAtPiAtMUUrMTAKK3JlZHgxMjUgcmVkdWNlIC0xMDAwMDAuMEUrNiAtPiAtMUUrMTEKK3JlZHgxMjYgcmVkdWNlIC0xMDAwMDAwLkUrNiAtPiAtMUUrMTIKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorcmVkeDE0MCByZWR1Y2UgJzIuMScgICAgIC0+ICAnMi4xJworcmVkeDE0MSByZWR1Y2UgJy0yLjAnICAgIC0+ICAnLTInCityZWR4MTQyIHJlZHVjZSAnMS4yMDAnICAgLT4gICcxLjInCityZWR4MTQzIHJlZHVjZSAnLTEyMCcgICAgLT4gICctMS4yRSsyJworcmVkeDE0NCByZWR1Y2UgJzEyMC4wMCcgIC0+ICAnMS4yRSsyJworcmVkeDE0NSByZWR1Y2UgJzAuMDAnICAgIC0+ICAnMCcKKworLS0gb3ZlcmZsb3cgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKK3JlZHgxNjAgcmVkdWNlIDkuOTk5RSs5OTk5OTk5OTkgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3JlZHgxNjEgcmVkdWNlIC05Ljk5OUUrOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CitwcmVjaXNpb246IDMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CityZWR4MjEwIHJlZHVjZSAgMS4wMEUtOTk5ICAgICAgICAtPiAgIDFFLTk5OQorcmVkeDIxMSByZWR1Y2UgIDAuMUUtOTk5ICAgICAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCityZWR4MjEyIHJlZHVjZSAgMC4xMEUtOTk5ICAgICAgICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwKK3JlZHgyMTMgcmVkdWNlICAwLjEwMEUtOTk5ICAgICAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbCBSb3VuZGVkCityZWR4MjE0IHJlZHVjZSAgMC4wMUUtOTk5ICAgICAgICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCityZWR4MjE1IHJlZHVjZSAgMC45OTlFLTk5OSAgICAgICAtPiAgIDFFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworcmVkeDIxNiByZWR1Y2UgIDAuMDk5RS05OTkgICAgICAgLT4gICAxRS0xMDAwICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3JlZHgyMTcgcmVkdWNlICAwLjAwOUUtOTk5ICAgICAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CityZWR4MjE4IHJlZHVjZSAgMC4wMDFFLTk5OSAgICAgICAtPiAgIDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCityZWR4MjE5IHJlZHVjZSAgMC4wMDA5RS05OTkgICAgICAtPiAgIDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCityZWR4MjIwIHJlZHVjZSAgMC4wMDAxRS05OTkgICAgICAtPiAgIDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JlZHgyMzAgcmVkdWNlIC0xLjAwRS05OTkgICAgICAgIC0+ICAtMUUtOTk5CityZWR4MjMxIHJlZHVjZSAtMC4xRS05OTkgICAgICAgICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwKK3JlZHgyMzIgcmVkdWNlIC0wLjEwRS05OTkgICAgICAgIC0+ICAtMUUtMTAwMCAgIFN1Ym5vcm1hbAorcmVkeDIzMyByZWR1Y2UgLTAuMTAwRS05OTkgICAgICAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsIFJvdW5kZWQKK3JlZHgyMzQgcmVkdWNlIC0wLjAxRS05OTkgICAgICAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK3JlZHgyMzUgcmVkdWNlIC0wLjk5OUUtOTk5ICAgICAgIC0+ICAtMUUtOTk5ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CityZWR4MjM2IHJlZHVjZSAtMC4wOTlFLTk5OSAgICAgICAtPiAgLTFFLTEwMDAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworcmVkeDIzNyByZWR1Y2UgLTAuMDA5RS05OTkgICAgICAgLT4gIC0xRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3JlZHgyMzggcmVkdWNlIC0wLjAwMUUtOTk5ICAgICAgIC0+ICAtMCAgICAgICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3JlZHgyMzkgcmVkdWNlIC0wLjAwMDlFLTk5OSAgICAgIC0+ICAtMCAgICAgICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3JlZHgyNDAgcmVkdWNlIC0wLjAwMDFFLTk5OSAgICAgIC0+ICAtMCAgICAgICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworLS0gbW9yZSByZXNoYXBpbmcKK3ByZWNpc2lvbjogOQorcmVkeDI2MCByZWR1Y2UgJzU2MjYwRS0xMCcgICAtPiAnMC4wMDAwMDU2MjYnCityZWR4MjYxIHJlZHVjZSAnNTYyNjBFLTUnICAgIC0+ICcwLjU2MjYnCityZWR4MjYyIHJlZHVjZSAnNTYyNjBFLTInICAgIC0+ICc1NjIuNicKK3JlZHgyNjMgcmVkdWNlICc1NjI2MEUtMScgICAgLT4gJzU2MjYnCityZWR4MjY1IHJlZHVjZSAnNTYyNjBFLTAnICAgIC0+ICc1LjYyNkUrNCcKK3JlZHgyNjYgcmVkdWNlICc1NjI2MEUrMCcgICAgLT4gJzUuNjI2RSs0JworcmVkeDI2NyByZWR1Y2UgJzU2MjYwRSsxJyAgICAtPiAnNS42MjZFKzUnCityZWR4MjY4IHJlZHVjZSAnNTYyNjBFKzInICAgIC0+ICc1LjYyNkUrNicKK3JlZHgyNjkgcmVkdWNlICc1NjI2MEUrMycgICAgLT4gJzUuNjI2RSs3JworcmVkeDI3MCByZWR1Y2UgJzU2MjYwRSs0JyAgICAtPiAnNS42MjZFKzgnCityZWR4MjcxIHJlZHVjZSAnNTYyNjBFKzUnICAgIC0+ICc1LjYyNkUrOScKK3JlZHgyNzIgcmVkdWNlICc1NjI2MEUrNicgICAgLT4gJzUuNjI2RSsxMCcKK3JlZHgyODAgcmVkdWNlICctNTYyNjBFLTEwJyAgLT4gJy0wLjAwMDAwNTYyNicKK3JlZHgyODEgcmVkdWNlICctNTYyNjBFLTUnICAgLT4gJy0wLjU2MjYnCityZWR4MjgyIHJlZHVjZSAnLTU2MjYwRS0yJyAgIC0+ICctNTYyLjYnCityZWR4MjgzIHJlZHVjZSAnLTU2MjYwRS0xJyAgIC0+ICctNTYyNicKK3JlZHgyODUgcmVkdWNlICctNTYyNjBFLTAnICAgLT4gJy01LjYyNkUrNCcKK3JlZHgyODYgcmVkdWNlICctNTYyNjBFKzAnICAgLT4gJy01LjYyNkUrNCcKK3JlZHgyODcgcmVkdWNlICctNTYyNjBFKzEnICAgLT4gJy01LjYyNkUrNScKK3JlZHgyODggcmVkdWNlICctNTYyNjBFKzInICAgLT4gJy01LjYyNkUrNicKK3JlZHgyODkgcmVkdWNlICctNTYyNjBFKzMnICAgLT4gJy01LjYyNkUrNycKK3JlZHgyOTAgcmVkdWNlICctNTYyNjBFKzQnICAgLT4gJy01LjYyNkUrOCcKK3JlZHgyOTEgcmVkdWNlICctNTYyNjBFKzUnICAgLT4gJy01LjYyNkUrOScKK3JlZHgyOTIgcmVkdWNlICctNTYyNjBFKzYnICAgLT4gJy01LjYyNkUrMTAnCisKKy0tIEZMIHRlc3QKK3ByZWNpc2lvbjogNDAKK3JlZHgyOTUgcmVkdWNlIDk4OTIzNDU2NzMuMDEyMzQ1Njc4MDAwMDAwMDAwMCAtPiA5ODkyMzQ1NjczLjAxMjM0NTY3OAorCistLSBzcGVjaWFscworcmVkeDgyMCByZWR1Y2UgJ0luZicgICAgLT4gJ0luZmluaXR5JworcmVkeDgyMSByZWR1Y2UgJy1JbmYnICAgLT4gJy1JbmZpbml0eScKK3JlZHg4MjIgcmVkdWNlICAgTmFOICAgIC0+ICBOYU4KK3JlZHg4MjMgcmVkdWNlICBzTmFOICAgIC0+ICBOYU4gICAgSW52YWxpZF9vcGVyYXRpb24KK3JlZHg4MjQgcmVkdWNlICAgTmFOMTAxIC0+ICBOYU4xMDEKK3JlZHg4MjUgcmVkdWNlICBzTmFOMDEwIC0+ICBOYU4xMCAgSW52YWxpZF9vcGVyYXRpb24KK3JlZHg4MjcgcmVkdWNlICAtTmFOICAgIC0+IC1OYU4KK3JlZHg4MjggcmVkdWNlIC1zTmFOICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KK3JlZHg4MjkgcmVkdWNlICAtTmFOMTAxIC0+IC1OYU4xMDEKK3JlZHg4MzAgcmVkdWNlIC1zTmFOMDEwIC0+IC1OYU4xMCAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlCitwcmVjaXNpb246IDUKK3JlZHg2MjEwMCByZWR1Y2UgIHNOYU4xMjM0NTY3ODkwIC0+IE5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3QKK3JlZHg5MDAgcmVkdWNlICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yZW1haW5kZXIuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmVtYWluZGVyLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExMDYxYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmVtYWluZGVyLmRlY1Rlc3QKQEAgLTAsMCArMSw2NDAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gcmVtYWluZGVyLmRlY1Rlc3QgLS0gZGVjaW1hbCByZW1haW5kZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK3JlbXgwMDEgcmVtYWluZGVyICAxICAgICAxICAgIC0+ICAwCityZW14MDAyIHJlbWFpbmRlciAgMiAgICAgMSAgICAtPiAgMAorcmVteDAwMyByZW1haW5kZXIgIDEgICAgIDIgICAgLT4gIDEKK3JlbXgwMDQgcmVtYWluZGVyICAyICAgICAyICAgIC0+ICAwCityZW14MDA1IHJlbWFpbmRlciAgMCAgICAgMSAgICAtPiAgMAorcmVteDAwNiByZW1haW5kZXIgIDAgICAgIDIgICAgLT4gIDAKK3JlbXgwMDcgcmVtYWluZGVyICAxICAgICAzICAgIC0+ICAxCityZW14MDA4IHJlbWFpbmRlciAgMiAgICAgMyAgICAtPiAgMgorcmVteDAwOSByZW1haW5kZXIgIDMgICAgIDMgICAgLT4gIDAKKworcmVteDAxMCByZW1haW5kZXIgIDIuNCAgIDEgICAgLT4gIDAuNAorcmVteDAxMSByZW1haW5kZXIgIDIuNCAgIC0xICAgLT4gIDAuNAorcmVteDAxMiByZW1haW5kZXIgIC0yLjQgIDEgICAgLT4gIC0wLjQKK3JlbXgwMTMgcmVtYWluZGVyICAtMi40ICAtMSAgIC0+ICAtMC40CityZW14MDE0IHJlbWFpbmRlciAgMi40MCAgMSAgICAtPiAgMC40MAorcmVteDAxNSByZW1haW5kZXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwCityZW14MDE2IHJlbWFpbmRlciAgMi40ICAgMiAgICAtPiAgMC40CityZW14MDE3IHJlbWFpbmRlciAgMi40MDAgMiAgICAtPiAgMC40MDAKK3JlbXgwMTggcmVtYWluZGVyICAyLiAgICAyICAgIC0+ICAwCityZW14MDE5IHJlbWFpbmRlciAgMjAgICAgMjAgICAtPiAgMAorCityZW14MDIwIHJlbWFpbmRlciAgMTg3ICAgMTg3ICAgIC0+ICAwCityZW14MDIxIHJlbWFpbmRlciAgNSAgICAgMiAgICAgIC0+ICAxCityZW14MDIyIHJlbWFpbmRlciAgNSAgICAgMi4wICAgIC0+ICAxLjAKK3JlbXgwMjMgcmVtYWluZGVyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwCityZW14MDI0IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorcmVteDAyNSByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKKworcmVteDAzMCByZW1haW5kZXIgIDEgICAgIDIgICAgICAtPiAgMQorcmVteDAzMSByZW1haW5kZXIgIDEgICAgIDQgICAgICAtPiAgMQorcmVteDAzMiByZW1haW5kZXIgIDEgICAgIDggICAgICAtPiAgMQorCityZW14MDMzIHJlbWFpbmRlciAgMSAgICAgMTYgICAgIC0+ICAxCityZW14MDM0IHJlbWFpbmRlciAgMSAgICAgMzIgICAgIC0+ICAxCityZW14MDM1IHJlbWFpbmRlciAgMSAgICAgNjQgICAgIC0+ICAxCityZW14MDQwIHJlbWFpbmRlciAgMSAgICAtMiAgICAgIC0+ICAxCityZW14MDQxIHJlbWFpbmRlciAgMSAgICAtNCAgICAgIC0+ICAxCityZW14MDQyIHJlbWFpbmRlciAgMSAgICAtOCAgICAgIC0+ICAxCityZW14MDQzIHJlbWFpbmRlciAgMSAgICAtMTYgICAgIC0+ICAxCityZW14MDQ0IHJlbWFpbmRlciAgMSAgICAtMzIgICAgIC0+ICAxCityZW14MDQ1IHJlbWFpbmRlciAgMSAgICAtNjQgICAgIC0+ICAxCityZW14MDUwIHJlbWFpbmRlciAtMSAgICAgMiAgICAgIC0+ICAtMQorcmVteDA1MSByZW1haW5kZXIgLTEgICAgIDQgICAgICAtPiAgLTEKK3JlbXgwNTIgcmVtYWluZGVyIC0xICAgICA4ICAgICAgLT4gIC0xCityZW14MDUzIHJlbWFpbmRlciAtMSAgICAgMTYgICAgIC0+ICAtMQorcmVteDA1NCByZW1haW5kZXIgLTEgICAgIDMyICAgICAtPiAgLTEKK3JlbXgwNTUgcmVtYWluZGVyIC0xICAgICA2NCAgICAgLT4gIC0xCityZW14MDYwIHJlbWFpbmRlciAtMSAgICAtMiAgICAgIC0+ICAtMQorcmVteDA2MSByZW1haW5kZXIgLTEgICAgLTQgICAgICAtPiAgLTEKK3JlbXgwNjIgcmVtYWluZGVyIC0xICAgIC04ICAgICAgLT4gIC0xCityZW14MDYzIHJlbWFpbmRlciAtMSAgICAtMTYgICAgIC0+ICAtMQorcmVteDA2NCByZW1haW5kZXIgLTEgICAgLTMyICAgICAtPiAgLTEKK3JlbXgwNjUgcmVtYWluZGVyIC0xICAgIC02NCAgICAgLT4gIC0xCisKK3JlbXgwNjYgcmVtYWluZGVyICA5OTk5OTk5OTkgICAgIDEgIC0+IDAKK3JlbXgwNjcgcmVtYWluZGVyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNAorcmVteDA2OCByZW1haW5kZXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gMC41CityZW14MDY5IHJlbWFpbmRlciAgOTk5OTk5OTk5LjkgICAxICAtPiAwLjkKK3JlbXgwNzAgcmVtYWluZGVyICA5OTk5OTk5OTkuOTk5IDEgIC0+IDAuOTk5CitwcmVjaXNpb246IDYKK3JlbXgwNzEgcmVtYWluZGVyICA5OTk5OTk5OTkgICAgIDEgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14MDcyIHJlbWFpbmRlciAgOTk5OTk5OTkgICAgICAxICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDA3MyByZW1haW5kZXIgIDk5OTk5OTkgICAgICAgMSAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXgwNzQgcmVtYWluZGVyICA5OTk5OTkgICAgICAgIDEgIC0+IDAKK3JlbXgwNzUgcmVtYWluZGVyICA5OTk5OSAgICAgICAgIDEgIC0+IDAKK3JlbXgwNzYgcmVtYWluZGVyICA5OTk5ICAgICAgICAgIDEgIC0+IDAKK3JlbXgwNzcgcmVtYWluZGVyICA5OTkgICAgICAgICAgIDEgIC0+IDAKK3JlbXgwNzggcmVtYWluZGVyICA5OSAgICAgICAgICAgIDEgIC0+IDAKK3JlbXgwNzkgcmVtYWluZGVyICA5ICAgICAgICAgICAgIDEgIC0+IDAKKworcHJlY2lzaW9uOiA5CityZW14MDgwIHJlbWFpbmRlciAgMC4gICAgICAgICAgICAxICAtPiAwCityZW14MDgxIHJlbWFpbmRlciAgLjAgICAgICAgICAgICAxICAtPiAwLjAKK3JlbXgwODIgcmVtYWluZGVyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDAKK3JlbXgwODMgcmVtYWluZGVyICAwLjAwRSs5ICAgICAgIDEgIC0+IDAKK3JlbXgwODQgcmVtYWluZGVyICAwLjAwRSszICAgICAgIDEgIC0+IDAKK3JlbXgwODUgcmVtYWluZGVyICAwLjAwRSsyICAgICAgIDEgIC0+IDAKK3JlbXgwODYgcmVtYWluZGVyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMAorcmVteDA4NyByZW1haW5kZXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMAorcmVteDA4OCByZW1haW5kZXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMAorcmVteDA4OSByZW1haW5kZXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDAKK3JlbXgwOTAgcmVtYWluZGVyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMAorcmVteDA5MSByZW1haW5kZXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMAorcmVteDA5MiByZW1haW5kZXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDAKK3JlbXgwOTMgcmVtYWluZGVyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcKK3JlbXgwOTQgcmVtYWluZGVyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgKK3JlbXgwOTUgcmVtYWluZGVyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0CisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDAKK3ByZWNpc2lvbjogOQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3JlbXgxMDEgcmVtYWluZGVyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCityZW14MTAyIHJlbWFpbmRlciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorcmVteDEwMyByZW1haW5kZXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JlbXgxMDQgcmVtYWluZGVyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCityZW14MTA1IHJlbWFpbmRlciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorcmVteDEwNiByZW1haW5kZXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKy0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dAorLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3IKKy0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldCityZW14MTA3IHJlbWFpbmRlciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTA4IHJlbWFpbmRlciAgMC4wMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTA5IHJlbWFpbmRlciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTEwIHJlbWFpbmRlciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTExIHJlbWFpbmRlciAgMSAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTEyIHJlbWFpbmRlciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTEzIHJlbWFpbmRlciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTE0IHJlbWFpbmRlciAxRSsxMDAwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTE1IHJlbWFpbmRlciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTE2IHJlbWFpbmRlciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTE5IHJlbWFpbmRlciAgMC4xICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTIwIHJlbWFpbmRlciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTIxIHJlbWFpbmRlciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTIyIHJlbWFpbmRlciAxMCAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTIzIHJlbWFpbmRlciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTI0IHJlbWFpbmRlciAxRSsxMDAwIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgemVyb3Mgb24gbGVmdAorcmVteDEzMCByZW1haW5kZXIgIDAgICAgICAxICAgLT4gIDAKK3JlbXgxMzEgcmVtYWluZGVyICAwICAgICAtMSAgIC0+ICAwCityZW14MTMyIHJlbWFpbmRlciAgMC4wICAgIDEgICAtPiAgMC4wCityZW14MTMzIHJlbWFpbmRlciAgMC4wICAgLTEgICAtPiAgMC4wCityZW14MTM0IHJlbWFpbmRlciAtMCAgICAgIDEgICAtPiAtMAorcmVteDEzNSByZW1haW5kZXIgLTAgICAgIC0xICAgLT4gLTAKK3JlbXgxMzYgcmVtYWluZGVyIC0wLjAgICAgMSAgIC0+IC0wLjAKK3JlbXgxMzcgcmVtYWluZGVyIC0wLjAgICAtMSAgIC0+IC0wLjAKKworLS0gMC41ZXJzCityZW14MTQzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQorcmVteDE0NCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK3JlbXgxNDUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MAorcmVteDE0NiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorcmVteDE0NyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCityZW14MTQ4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK3JlbXgxNDkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworLS0gc3RlYWRpZXMKK3JlbXgxNTAgcmVtYWluZGVyICAxICAxICAgLT4gMAorcmVteDE1MSByZW1haW5kZXIgIDEgIDIgICAtPiAxCityZW14MTUyIHJlbWFpbmRlciAgMSAgMyAgIC0+IDEKK3JlbXgxNTMgcmVtYWluZGVyICAxICA0ICAgLT4gMQorcmVteDE1NCByZW1haW5kZXIgIDEgIDUgICAtPiAxCityZW14MTU1IHJlbWFpbmRlciAgMSAgNiAgIC0+IDEKK3JlbXgxNTYgcmVtYWluZGVyICAxICA3ICAgLT4gMQorcmVteDE1NyByZW1haW5kZXIgIDEgIDggICAtPiAxCityZW14MTU4IHJlbWFpbmRlciAgMSAgOSAgIC0+IDEKK3JlbXgxNTkgcmVtYWluZGVyICAxICAxMCAgLT4gMQorcmVteDE2MCByZW1haW5kZXIgIDEgIDEgICAtPiAwCityZW14MTYxIHJlbWFpbmRlciAgMiAgMSAgIC0+IDAKK3JlbXgxNjIgcmVtYWluZGVyICAzICAxICAgLT4gMAorcmVteDE2MyByZW1haW5kZXIgIDQgIDEgICAtPiAwCityZW14MTY0IHJlbWFpbmRlciAgNSAgMSAgIC0+IDAKK3JlbXgxNjUgcmVtYWluZGVyICA2ICAxICAgLT4gMAorcmVteDE2NiByZW1haW5kZXIgIDcgIDEgICAtPiAwCityZW14MTY3IHJlbWFpbmRlciAgOCAgMSAgIC0+IDAKK3JlbXgxNjggcmVtYWluZGVyICA5ICAxICAgLT4gMAorcmVteDE2OSByZW1haW5kZXIgIDEwIDEgICAtPiAwCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyCityZW14MTcxIHJlbWFpbmRlciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwCityZW14MTcyIHJlbWFpbmRlciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCityZW14MTczIHJlbWFpbmRlciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwCityZW14MTc0IHJlbWFpbmRlciAgIDAuNTIgMS4wMjAgLT4gIDAuNTIwCityZW14MTc1IHJlbWFpbmRlciAgIDAuNiAgMS4wMjAgLT4gIDAuNjAwCisKKworLS0gTW9yZSBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMAorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3JlbXgyMDEgcmVtYWluZGVyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JlbXgyMDIgcmVtYWluZGVyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JlbXgyMDMgcmVtYWluZGVyICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JlbXgyMDQgcmVtYWluZGVyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDIwNSByZW1haW5kZXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MjA2IHJlbWFpbmRlciAgMC4xICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXgyMDcgcmVtYWluZGVyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDIwOCByZW1haW5kZXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MjA5IHJlbWFpbmRlciAxMCAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXgyMTAgcmVtYWluZGVyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDIxMSByZW1haW5kZXIgMUUrMTAwMCAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyCityZW14MjMxIHJlbWFpbmRlciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwCityZW14MjMyIHJlbWFpbmRlciAgLTAuNTAgMS4wMjAgLT4gLTAuNTAwCityZW14MjMzIHJlbWFpbmRlciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCityZW14MjM0IHJlbWFpbmRlciAgLTAuNTIgMS4wMjAgLT4gLTAuNTIwCityZW14MjM1IHJlbWFpbmRlciAgLTAuNiAgMS4wMjAgLT4gLTAuNjAwCisKKy0tIGhpZ2ggWHMKK3JlbXgyNDAgcmVtYWluZGVyICAxRSsyICAxLjAwICAtPiAgMC4wMAorCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3JlbXgyNzAgcmVtYWluZGVyIDEgMWU5OTk5OTk5OTkgICAgLT4gMQorcmVteDI3MSByZW1haW5kZXIgMSAwLjllOTk5OTk5OTk5ICAtPiAxCityZW14MjcyIHJlbWFpbmRlciAxIDAuOTllOTk5OTk5OTk5IC0+IDEKK3JlbXgyNzMgcmVtYWluZGVyIDEgMC45OTk5OTk5OTllOTk5OTk5OTk5IC0+IDEKK3JlbXgyNzQgcmVtYWluZGVyIDllOTk5OTk5OTk5ICAgICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXgyNzUgcmVtYWluZGVyIDkuOWU5OTk5OTk5OTkgICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXgyNzYgcmVtYWluZGVyIDkuOTllOTk5OTk5OTk5ICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXgyNzcgcmVtYWluZGVyIDkuOTk5OTk5OTllOTk5OTk5OTk5IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworcmVteDI4MCByZW1haW5kZXIgMC4xIDllLTk5OTk5OTk5OSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDI4MSByZW1haW5kZXIgMC4xIDk5ZS05OTk5OTk5OTkgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDI4MiByZW1haW5kZXIgMC4xIDk5OWUtOTk5OTk5OTk5ICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCityZW14MjgzIHJlbWFpbmRlciAwLjEgOWUtOTk5OTk5OTk4ICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Mjg0IHJlbWFpbmRlciAwLjEgOTllLTk5OTk5OTk5OCAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Mjg1IHJlbWFpbmRlciAwLjEgOTk5ZS05OTk5OTk5OTggICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Mjg2IHJlbWFpbmRlciAwLjEgOTk5ZS05OTk5OTk5OTcgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Mjg3IHJlbWFpbmRlciAwLjEgOTk5OWUtOTk5OTk5OTk3ICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Mjg4IHJlbWFpbmRlciAwLjEgOTk5OTllLTk5OTk5OTk5NyAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIHJlbXgzeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK3JlbXgzMDEgcmVtYWluZGVyICAgMSAgICAzICAgICAtPiAgMQorcmVteDMwMiByZW1haW5kZXIgICA1ICAgIDUgICAgIC0+ICAwCityZW14MzAzIHJlbWFpbmRlciAgIDEzICAgMTAgICAgLT4gIDMKK3JlbXgzMDQgcmVtYWluZGVyICAgMTMgICA1MCAgICAtPiAgMTMKK3JlbXgzMDUgcmVtYWluZGVyICAgMTMgICAxMDAgICAtPiAgMTMKK3JlbXgzMDYgcmVtYWluZGVyICAgMTMgICAxMDAwICAtPiAgMTMKK3JlbXgzMDcgcmVtYWluZGVyICAgLjEzICAgIDEgICAtPiAgMC4xMworcmVteDMwOCByZW1haW5kZXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMworcmVteDMwOSByZW1haW5kZXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMKK3JlbXgzMTAgcmVtYWluZGVyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMKK3JlbXgzMTEgcmVtYWluZGVyICAgMTAuMzMgIDEgICAtPiAgMC4zMworcmVteDMxMiByZW1haW5kZXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzCityZW14MzEzIHJlbWFpbmRlciAgIDEwMy4zICAxICAgLT4gIDAuMworcmVteDMxNCByZW1haW5kZXIgICAxMzMgICAxMCAgIC0+ICAzCityZW14MzE1IHJlbWFpbmRlciAgIDEwMzMgIDEwICAgLT4gIDMKK3JlbXgzMTYgcmVtYWluZGVyICAgMTAzMyAgNTAgICAtPiAgMzMKK3JlbXgzMTcgcmVtYWluZGVyICAgMTAxLjAgIDMgICAtPiAgMi4wCityZW14MzE4IHJlbWFpbmRlciAgIDEwMi4wICAzICAgLT4gIDAuMAorcmVteDMxOSByZW1haW5kZXIgICAxMDMuMCAgMyAgIC0+ICAxLjAKK3JlbXgzMjAgcmVtYWluZGVyICAgMi40MCAgIDEgICAtPiAgMC40MAorcmVteDMyMSByZW1haW5kZXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMAorcmVteDMyMiByZW1haW5kZXIgICAyLjQgICAgMSAgIC0+ICAwLjQKK3JlbXgzMjMgcmVtYWluZGVyICAgMi40ICAgIDIgICAtPiAgMC40CityZW14MzI0IHJlbWFpbmRlciAgIDIuNDAwICAyICAgLT4gIDAuNDAwCityZW14MzI1IHJlbWFpbmRlciAgIDEgICAwLjMgICAgLT4gIDAuMQorcmVteDMyNiByZW1haW5kZXIgICAxICAgMC4zMCAgIC0+ICAwLjEwCityZW14MzI3IHJlbWFpbmRlciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwCityZW14MzI4IHJlbWFpbmRlciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMAorcmVteDMyOSByZW1haW5kZXIgICAxLjAgICAgMC4zIC0+ICAwLjEKK3JlbXgzMzAgcmVtYWluZGVyICAgMS4wMCAgIDAuMyAtPiAgMC4xMAorcmVteDMzMSByZW1haW5kZXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMAorcmVteDMzMiByZW1haW5kZXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDAKK3JlbXgzMzMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41CityZW14MzM0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQorcmVteDMzNSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCityZW14MzM2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCityZW14MzM3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK3JlbXgzMzggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MAorcmVteDMzOSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCityZW14MzQwIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgMC41MDAwMDAwCityZW14MzQxIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAKK3JlbXgzNDIgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwCityZW14MzQzIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAgIFJvdW5kZWQKK3JlbXgzNDQgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAgIFJvdW5kZWQKK3JlbXgzNDUgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5ICAgIC0+ICAxRS03CityZW14MzQ2IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKK3JlbXgzNDcgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKK3JlbXgzNDggcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5ICAgIC0+ICAxRS0xMAorcmVteDM0OSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQorcmVteDM1MCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTIKKworcmVteDM1MSByZW1haW5kZXIgICAwLjAzICA3ICAtPiAgMC4wMworcmVteDM1MiByZW1haW5kZXIgICA1ICAgMiAgICAtPiAgMQorcmVteDM1MyByZW1haW5kZXIgICA0LjEgICAyICAgIC0+ICAwLjEKK3JlbXgzNTQgcmVtYWluZGVyICAgNC4wMSAgIDIgICAgLT4gIDAuMDEKK3JlbXgzNTUgcmVtYWluZGVyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQorcmVteDM1NiByZW1haW5kZXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKK3JlbXgzNTcgcmVtYWluZGVyICAgNC4wMDAwMSAgIDIgICAgLT4gIDAuMDAwMDEKK3JlbXgzNTggcmVtYWluZGVyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQorcmVteDM1OSByZW1haW5kZXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03CisKK3JlbXgzNjAgcmVtYWluZGVyICAgMS4yICAgMC43MzQ1IC0+ICAwLjQ2NTUKK3JlbXgzNjEgcmVtYWluZGVyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKK3JlbXgzNjIgcmVtYWluZGVyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKK3JlbXgzNjMgcmVtYWluZGVyICAgMC44ICAgMC4zICAgIC0+ICAwLjIKK3JlbXgzNjQgcmVtYWluZGVyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAorcmVteDM2NSByZW1haW5kZXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCityZW14MzY2IHJlbWFpbmRlciAgIDIuNDAwICAgMiAgICAtPiAgMC40MDAKKworcHJlY2lzaW9uOiA2CityZW14MzcxIHJlbWFpbmRlciAgIDIuNDAwICAyICAgICAgICAtPiAgMC40MDAKK3ByZWNpc2lvbjogMworLS0gbG9uZyBvcGVyYW5kLCByb3VuZGVkLCBjYXNlCityZW14MzcyIHJlbWFpbmRlciAgIDEyMzQ1Njc4OTAwMDAwIDEyZSsxMiAtPiAzLjQ2RSsxMSBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgMTIwMDAwMDAwMDAwMDAKKworcHJlY2lzaW9uOiA1CityZW14MzgxIHJlbWFpbmRlciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCityZW14MzgyIHJlbWFpbmRlciAxMjM0NSAgMS4wMDAxICAgIC0+ICAwLjc2NTcKK3JlbXgzODMgcmVtYWluZGVyIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDAuNjY4CityZW14Mzg0IHJlbWFpbmRlciAxMjM0NSAgMS4wMSAgICAgIC0+ICAwLjc4CityZW14Mzg1IHJlbWFpbmRlciAxMjM0NSAgMS4xICAgICAgIC0+ICAwLjgKK3JlbXgzODYgcmVtYWluZGVyIDEyMzU1ICA0ICAgICAgICAgLT4gIDMKK3JlbXgzODcgcmVtYWluZGVyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKK3JlbXgzODggcmVtYWluZGVyIDEyMzU1ICA0LjAwMDEgICAgLT4gIDIuNjkxMgorcmVteDM4OSByZW1haW5kZXIgMTIzNDUgIDQuMDAwMSAgICAtPiAgMC42OTE0CityZW14MzkwIHJlbWFpbmRlciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKK3JlbXgzOTEgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDQuNzMKK3JlbXgzOTIgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDIuNDY5CityZW14MzkzIHJlbWFpbmRlciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKK3JlbXgzOTQgcmVtYWluZGVyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKK3JlbXgzOTUgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDQuNzUzMgorcmVteDM5NiByZW1haW5kZXIgMTIzNDUgIDUuMDAxICAgICAtPiAgMi41MzIKK3JlbXgzOTcgcmVtYWluZGVyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKK3JlbXgzOTggcmVtYWluZGVyIDEyMzQ1ICA1LjEgICAgICAgLT4gIDMuMAorCitwcmVjaXNpb246IDkKKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCityZW14NDAxIHJlbWFpbmRlciAgIDAuNSAgICAgICAgIDEgICAtPiAgMC41CityZW14NDAyIHJlbWFpbmRlciAgIDAuNTUgICAgICAgIDEgICAtPiAgMC41NQorcmVteDQwMyByZW1haW5kZXIgICAwLjU1NSAgICAgICAxICAgLT4gIDAuNTU1CityZW14NDA0IHJlbWFpbmRlciAgIDAuNTU1NSAgICAgIDEgICAtPiAgMC41NTU1CityZW14NDA1IHJlbWFpbmRlciAgIDAuNTU1NTUgICAgIDEgICAtPiAgMC41NTU1NQorcmVteDQwNiByZW1haW5kZXIgICAwLjU1NTU1NSAgICAxICAgLT4gIDAuNTU1NTU1CityZW14NDA3IHJlbWFpbmRlciAgIDAuNTU1NTU1NSAgIDEgICAtPiAgMC41NTU1NTU1CityZW14NDA4IHJlbWFpbmRlciAgIDAuNTU1NTU1NTUgIDEgICAtPiAgMC41NTU1NTU1NQorcmVteDQwOSByZW1haW5kZXIgICAwLjU1NTU1NTU1NSAxICAgLT4gIDAuNTU1NTU1NTU1CisKKy0tIHplcm8gc2lnbnMKK3JlbXg2NTAgcmVtYWluZGVyICAxICAxIC0+ICAwCityZW14NjUxIHJlbWFpbmRlciAtMSAgMSAtPiAtMAorcmVteDY1MiByZW1haW5kZXIgIDEgLTEgLT4gIDAKK3JlbXg2NTMgcmVtYWluZGVyIC0xIC0xIC0+IC0wCityZW14NjU0IHJlbWFpbmRlciAgMCAgMSAtPiAgMAorcmVteDY1NSByZW1haW5kZXIgLTAgIDEgLT4gLTAKK3JlbXg2NTYgcmVtYWluZGVyICAwIC0xIC0+ICAwCityZW14NjU3IHJlbWFpbmRlciAtMCAtMSAtPiAtMAorcmVteDY1OCByZW1haW5kZXIgIDAuMDAgIDEgIC0+ICAwLjAwCityZW14NjU5IHJlbWFpbmRlciAtMC4wMCAgMSAgLT4gLTAuMDAKKworLS0gU3BlY2lhbHMKK3JlbXg2ODAgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14NjgxIHJlbWFpbmRlciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDY4MiByZW1haW5kZXIgIEluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg2ODMgcmVtYWluZGVyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14Njg0IHJlbWFpbmRlciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDY4NSByZW1haW5kZXIgIEluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg2ODYgcmVtYWluZGVyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14Njg3IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDY4OCByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCityZW14Njg5IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDY5MSByZW1haW5kZXIgLTEgICAgIEluZiAgIC0+IC0xCityZW14NjkyIHJlbWFpbmRlciAgMCAgICAgSW5mICAgLT4gIDAKK3JlbXg2OTMgcmVtYWluZGVyIC0wICAgICBJbmYgICAtPiAtMAorcmVteDY5NCByZW1haW5kZXIgIDEgICAgIEluZiAgIC0+ICAxCityZW14Njk1IHJlbWFpbmRlciAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK3JlbXg2OTYgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3JlbXg3MDAgcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14NzAxIHJlbWFpbmRlciAtSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDcwMiByZW1haW5kZXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3MDMgcmVtYWluZGVyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14NzA0IHJlbWFpbmRlciAtSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDcwNSByZW1haW5kZXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3MDYgcmVtYWluZGVyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14NzA3IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDcwOCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3MDkgcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorcmVteDcxMCByZW1haW5kZXIgLTEgICAgLUluZiAgIC0+IC0xCityZW14NzExIHJlbWFpbmRlciAtMCAgICAtSW5mICAgLT4gLTAKK3JlbXg3MTIgcmVtYWluZGVyICAwICAgIC1JbmYgICAtPiAgMAorcmVteDcxMyByZW1haW5kZXIgIDEgICAgLUluZiAgIC0+ICAxCityZW14NzE0IHJlbWFpbmRlciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK3JlbXg3MTUgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3JlbXg3MjEgcmVtYWluZGVyICBOYU4gLUluZiAgICAtPiAgTmFOCityZW14NzIyIHJlbWFpbmRlciAgTmFOIC0xMDAwICAgLT4gIE5hTgorcmVteDcyMyByZW1haW5kZXIgIE5hTiAtMSAgICAgIC0+ICBOYU4KK3JlbXg3MjQgcmVtYWluZGVyICBOYU4gLTAgICAgICAtPiAgTmFOCityZW14NzI1IHJlbWFpbmRlciAtTmFOICAwICAgICAgLT4gLU5hTgorcmVteDcyNiByZW1haW5kZXIgIE5hTiAgMSAgICAgIC0+ICBOYU4KK3JlbXg3MjcgcmVtYWluZGVyICBOYU4gIDEwMDAgICAtPiAgTmFOCityZW14NzI4IHJlbWFpbmRlciAgTmFOICBJbmYgICAgLT4gIE5hTgorcmVteDcyOSByZW1haW5kZXIgIE5hTiAtTmFOICAgIC0+ICBOYU4KK3JlbXg3MzAgcmVtYWluZGVyIC1JbmYgIE5hTiAgICAtPiAgTmFOCityZW14NzMxIHJlbWFpbmRlciAtMTAwMCBOYU4gICAgLT4gIE5hTgorcmVteDczMiByZW1haW5kZXIgLTEgICAgTmFOICAgIC0+ICBOYU4KK3JlbXg3MzMgcmVtYWluZGVyIC0wICAgLU5hTiAgICAtPiAtTmFOCityZW14NzM0IHJlbWFpbmRlciAgMCAgICBOYU4gICAgLT4gIE5hTgorcmVteDczNSByZW1haW5kZXIgIDEgICAtTmFOICAgIC0+IC1OYU4KK3JlbXg3MzYgcmVtYWluZGVyICAxMDAwIE5hTiAgICAtPiAgTmFOCityZW14NzM3IHJlbWFpbmRlciAgSW5mICBOYU4gICAgLT4gIE5hTgorCityZW14NzQxIHJlbWFpbmRlciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NDIgcmVtYWluZGVyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc0MyByZW1haW5kZXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzQ0IHJlbWFpbmRlciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NDUgcmVtYWluZGVyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc0NiByZW1haW5kZXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzQ3IHJlbWFpbmRlciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NDkgcmVtYWluZGVyICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc1MCByZW1haW5kZXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzUxIHJlbWFpbmRlciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NTIgcmVtYWluZGVyIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc1MyByZW1haW5kZXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzU0IHJlbWFpbmRlciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NTUgcmVtYWluZGVyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc1NiByZW1haW5kZXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzU3IHJlbWFpbmRlciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NTggcmVtYWluZGVyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc1OSByZW1haW5kZXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCityZW14NzYwIHJlbWFpbmRlciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQorcmVteDc2MSByZW1haW5kZXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NjIgcmVtYWluZGVyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCityZW14NzYzIHJlbWFpbmRlciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc2NCByZW1haW5kZXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExCityZW14NzY1IHJlbWFpbmRlciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorcmVteDc2NiByZW1haW5kZXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzCityZW14NzY3IHJlbWFpbmRlciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQKK3JlbXg3NjggcmVtYWluZGVyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorcmVteDc2OSByZW1haW5kZXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2CisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3JlbXg3NzAgcmVtYWluZGVyIDEgMWU5OTk5OTk5OTkgICAgLT4gMQorcmVteDc3MSByZW1haW5kZXIgMSAwLjllOTk5OTk5OTk5ICAtPiAxCityZW14NzcyIHJlbWFpbmRlciAxIDAuOTllOTk5OTk5OTk5IC0+IDEKK3JlbXg3NzMgcmVtYWluZGVyIDEgMC45OTk5OTk5OTllOTk5OTk5OTk5IC0+IDEKK3JlbXg3NzQgcmVtYWluZGVyIDllOTk5OTk5OTk5ICAgICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXg3NzUgcmVtYWluZGVyIDkuOWU5OTk5OTk5OTkgICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXg3NzYgcmVtYWluZGVyIDkuOTllOTk5OTk5OTk5ICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXg3NzcgcmVtYWluZGVyIDkuOTk5OTk5OTllOTk5OTk5OTk5IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorcmVteDgwMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK3JlbXg4MDIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxCityZW14ODAzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAorcmVteDgwNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK3JlbXg4MDUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCityZW14ODA2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorcmVteDgwNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK3JlbXg4MDggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCityZW14ODA5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorcmVteDgxMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK3JlbXg4MTEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2CityZW14ODEyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitwcmVjaXNpb246IDE1CityZW14ODIxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorcmVteDgyMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKK3JlbXg4MjMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCityZW14ODI0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorcmVteDgyNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKK3JlbXg4MjYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCityZW14ODI3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQorcmVteDgyOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKK3JlbXg4MjkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCityZW14ODMwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorcmVteDgzMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYKK3JlbXg4MzIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIHdvcnJpZXMgZnJvbSBkaXZpZGVpbnQKK3ByZWNpc2lvbjogOAorcmVteDg0MCByZW1haW5kZXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14ODQxIHJlbWFpbmRlciAgMTAwMDAwMDAwLjQgICAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXg4NDIgcmVtYWluZGVyICAxMDAwMDAwMDAuNSAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDg0MyByZW1haW5kZXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14ODQ0IHJlbWFpbmRlciAgMTAwMDAwMDAwLjk5OSAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3ByZWNpc2lvbjogNgorcmVteDg1MCByZW1haW5kZXIgIDEwMDAwMDAwMyAgICAgNSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14ODUxIHJlbWFpbmRlciAgMTAwMDAwMDMgICAgICA1ICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXg4NTIgcmVtYWluZGVyICAxMDAwMDAzICAgICAgIDUgIC0+ICAzCityZW14ODUzIHJlbWFpbmRlciAgMTAwMDAzICAgICAgICA1ICAtPiAgMworcmVteDg1NCByZW1haW5kZXIgIDEwMDAzICAgICAgICAgNSAgLT4gIDMKK3JlbXg4NTUgcmVtYWluZGVyICAxMDAzICAgICAgICAgIDUgIC0+ICAzCityZW14ODU2IHJlbWFpbmRlciAgMTAzICAgICAgICAgICA1ICAtPiAgMworcmVteDg1NyByZW1haW5kZXIgIDEzICAgICAgICAgICAgNSAgLT4gIDMKK3JlbXg4NTggcmVtYWluZGVyICAxICAgICAgICAgICAgIDUgIC0+ICAxCisKKy0tIFZsYWRpbWlyJ3MgY2FzZXMKK3JlbXg4NjAgcmVtYWluZGVyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg2MSByZW1haW5kZXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODYyIHJlbWFpbmRlciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4NjMgcmVtYWluZGVyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg2NCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODcwIHJlbWFpbmRlciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4NzEgcmVtYWluZGVyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg3MiByZW1haW5kZXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODczIHJlbWFpbmRlciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4NzQgcmVtYWluZGVyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg3NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODc2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4NzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorcmVteDg3OCByZW1haW5kZXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCityZW14ODc5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzAKK3JlbXg4ODAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMAorcmVteDg4MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwCityZW14ODgyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzAKK3JlbXg4ODMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMAorcmVteDg4NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwCityZW14ODg1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDAKK3JlbXg4ODYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMAorCityZW14ODg5IHJlbWFpbmRlciAxMjNlMSAgIDIwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4OTAgcmVtYWluZGVyIDEyM2UxICAgIDIwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg5MSByZW1haW5kZXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODkyIHJlbWFpbmRlciAxMjNlMSAgICAgIDIwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4OTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDIwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg5NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODk1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDIwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4OTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDIwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg5NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCityZW14ODk5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDIwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDIwMDAwMDAgLT4gMTIzMAorcmVteDkwMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCityZW14OTAyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDIwMDAwIC0+IDEyMzAKK3JlbXg5MDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDIwMDAgLT4gMTIzMAorcmVteDkwNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCityZW14OTA1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDIwIC0+ICAgMTAKK3JlbXg5MDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDIgLT4gICAgMAorCityZW14OTA5IHJlbWFpbmRlciAxMjNlMSAgIDUwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MTAgcmVtYWluZGVyIDEyM2UxICAgIDUwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkxMSByZW1haW5kZXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTEyIHJlbWFpbmRlciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDUwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkxNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTE1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDUwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkxNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCityZW14OTE5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MjAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDUwMDAwMDAgLT4gMTIzMAorcmVteDkyMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCityZW14OTIyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzAKK3JlbXg5MjMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDUwMDAgLT4gMTIzMAorcmVteDkyNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCityZW14OTI1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAgMzAKK3JlbXg5MjYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDUgLT4gICAgMAorCityZW14OTI5IHJlbWFpbmRlciAxMjNlMSAgIDkwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MzAgcmVtYWluZGVyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkzMSByZW1haW5kZXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTMyIHJlbWFpbmRlciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkzNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTM1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkzNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwCityZW14OTM5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzAKK3JlbXg5NDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMAorcmVteDk0MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwCityZW14OTQyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzAKK3JlbXg5NDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMAorcmVteDk0NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwCityZW14OTQ1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAgNjAKK3JlbXg5NDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAgNgorCityZW14OTUwIHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5NTEgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5NTIgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTUzIHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5NTQgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5NTUgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTU2IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5NTcgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5NTggcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTU5IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKKworcmVteDk2MCByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCityZW14OTYxIHJlbWFpbmRlciAxMjNlMSAgIDE5OTk5OTk5OTk5OTk5OTk5MCAtPiAxMjMwCityZW14OTYyIHJlbWFpbmRlciAxMjNlMSAgIDE5OTk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorcmVteDk2MyByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OTk5MCAtPiAxMjMwCityZW14OTY0IHJlbWFpbmRlciAxMjNlMSAgIDE5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCityZW14OTY1IHJlbWFpbmRlciAxMjNlMSAgIDE5OTk5OTk5OTk5OTk5OTk5OTk5OTAgLT4gMTIzMAorcmVteDk2NiByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCityZW14OTY3IHJlbWFpbmRlciAxMjNlMSAgIDE5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MCAtPiAxMjMwCityZW14OTY4IHJlbWFpbmRlciAxMjNlMSAgIDE5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorcmVteDk2OSByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MCAtPiAxMjMwCisKK3JlbXg5NzAgcmVtYWluZGVyIDFlMSAgIDEwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCityZW14OTcxIHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAKK3JlbXg5NzIgcmVtYWluZGVyIDFlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAKK3JlbXg5NzMgcmVtYWluZGVyIDFlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCityZW14OTc0IHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAKK3JlbXg5NzUgcmVtYWluZGVyIDFlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAKK3JlbXg5NzYgcmVtYWluZGVyIDFlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCityZW14OTc3IHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAKK3JlbXg5NzggcmVtYWluZGVyIDFlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAKK3JlbXg5NzkgcmVtYWluZGVyIDFlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCisKK3JlbXg5ODAgcmVtYWluZGVyIDEyM2UxIDEwMDBFOTk5OTk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5CisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorcHJlY2lzaW9uOiA5CittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcmVteDk5MCByZW1haW5kZXIgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IDEuMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityZW14OTkxIHJlbWFpbmRlciA5RSs5OTk5OTk5OTkgKzAuMjM0NTY3ODkwMTIzNDVFLTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXg5OTIgcmVtYWluZGVyICswLjEwMCA5RSs5OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAwLjEwMAorcmVteDk5MyByZW1haW5kZXIgOUUtOTk5OTk5OTk5ICs5LjEwMCAgICAgICAgICAgICAgIC0+IDlFLTk5OTk5OTk5OQorcmVteDk5NSByZW1haW5kZXIgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xLjIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcmVteDk5NiByZW1haW5kZXIgOUUrOTk5OTk5OTk5IC0wLjgzNDU2Nzg5MDEyMzQ1RS0wIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14OTk3IHJlbWFpbmRlciAtMC4xMDAgOUUrOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTAuMTAwCityZW14OTk4IHJlbWFpbmRlciA5RS05OTk5OTk5OTkgLTkuMTAwICAgICAgICAgICAgICAgLT4gOUUtOTk5OTk5OTk5CisKKy0tIE51bGwgdGVzdHMKK3JlbXgxMDAwIHJlbWFpbmRlciAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXgxMDAxIHJlbWFpbmRlciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yZW1haW5kZXJOZWFyLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JlbWFpbmRlck5lYXIuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzY4YjllCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yZW1haW5kZXJOZWFyLmRlY1Rlc3QKQEAgLTAsMCArMSw1NzIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gcmVtYWluZGVyTmVhci5kZWNUZXN0IC0tIGRlY2ltYWwgcmVtYWluZGVyLW5lYXIgKElFRUUgcmVtYWluZGVyKSAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCitybW54MDAxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDEgICAgLT4gIDAKK3JtbngwMDIgcmVtYWluZGVybmVhciAgMiAgICAgMSAgICAtPiAgMAorcm1ueDAwMyByZW1haW5kZXJuZWFyICAxICAgICAyICAgIC0+ICAxCitybW54MDA0IHJlbWFpbmRlcm5lYXIgIDIgICAgIDIgICAgLT4gIDAKK3JtbngwMDUgcmVtYWluZGVybmVhciAgMCAgICAgMSAgICAtPiAgMAorcm1ueDAwNiByZW1haW5kZXJuZWFyICAwICAgICAyICAgIC0+ICAwCitybW54MDA3IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMgICAgLT4gIDEKK3JtbngwMDggcmVtYWluZGVybmVhciAgMiAgICAgMyAgICAtPiAtMQorcm1ueDAwOSByZW1haW5kZXJuZWFyICAzICAgICAzICAgIC0+ICAwCisKK3JtbngwMTAgcmVtYWluZGVybmVhciAgMi40ICAgMSAgICAtPiAgMC40CitybW54MDExIHJlbWFpbmRlcm5lYXIgIDIuNCAgIC0xICAgLT4gIDAuNAorcm1ueDAxMiByZW1haW5kZXJuZWFyICAtMi40ICAxICAgIC0+ICAtMC40CitybW54MDEzIHJlbWFpbmRlcm5lYXIgIC0yLjQgIC0xICAgLT4gIC0wLjQKK3JtbngwMTQgcmVtYWluZGVybmVhciAgMi40MCAgMSAgICAtPiAgMC40MAorcm1ueDAxNSByZW1haW5kZXJuZWFyICAyLjQwMCAxICAgIC0+ICAwLjQwMAorcm1ueDAxNiByZW1haW5kZXJuZWFyICAyLjQgICAyICAgIC0+ICAwLjQKK3JtbngwMTcgcmVtYWluZGVybmVhciAgMi40MDAgMiAgICAtPiAgMC40MDAKK3JtbngwMTggcmVtYWluZGVybmVhciAgMi4gICAgMiAgICAtPiAgMAorcm1ueDAxOSByZW1haW5kZXJuZWFyICAyMCAgICAyMCAgIC0+ICAwCisKK3JtbngwMjAgcmVtYWluZGVybmVhciAgMTg3ICAgMTg3ICAgIC0+ICAwCitybW54MDIxIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIgICAgICAtPiAgMQorcm1ueDAyMiByZW1haW5kZXJuZWFyICA1ICAgICAyLjAgICAgLT4gIDEuMAorcm1ueDAyMyByZW1haW5kZXJuZWFyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwCitybW54MDI0IHJlbWFpbmRlcm5lYXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKK3JtbngwMjUgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorCitybW54MDMwIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgICAtPiAgMQorcm1ueDAzMSByZW1haW5kZXJuZWFyICAxICAgICA0ICAgICAgLT4gIDEKK3JtbngwMzIgcmVtYWluZGVybmVhciAgMSAgICAgOCAgICAgIC0+ICAxCitybW54MDMzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDE2ICAgICAtPiAgMQorcm1ueDAzNCByZW1haW5kZXJuZWFyICAxICAgICAzMiAgICAgLT4gIDEKK3JtbngwMzUgcmVtYWluZGVybmVhciAgMSAgICAgNjQgICAgIC0+ICAxCitybW54MDQwIHJlbWFpbmRlcm5lYXIgIDEgICAgLTIgICAgICAtPiAgMQorcm1ueDA0MSByZW1haW5kZXJuZWFyICAxICAgIC00ICAgICAgLT4gIDEKK3JtbngwNDIgcmVtYWluZGVybmVhciAgMSAgICAtOCAgICAgIC0+ICAxCitybW54MDQzIHJlbWFpbmRlcm5lYXIgIDEgICAgLTE2ICAgICAtPiAgMQorcm1ueDA0NCByZW1haW5kZXJuZWFyICAxICAgIC0zMiAgICAgLT4gIDEKK3JtbngwNDUgcmVtYWluZGVybmVhciAgMSAgICAtNjQgICAgIC0+ICAxCitybW54MDUwIHJlbWFpbmRlcm5lYXIgLTEgICAgIDIgICAgICAtPiAgLTEKK3JtbngwNTEgcmVtYWluZGVybmVhciAtMSAgICAgNCAgICAgIC0+ICAtMQorcm1ueDA1MiByZW1haW5kZXJuZWFyIC0xICAgICA4ICAgICAgLT4gIC0xCitybW54MDUzIHJlbWFpbmRlcm5lYXIgLTEgICAgIDE2ICAgICAtPiAgLTEKK3JtbngwNTQgcmVtYWluZGVybmVhciAtMSAgICAgMzIgICAgIC0+ICAtMQorcm1ueDA1NSByZW1haW5kZXJuZWFyIC0xICAgICA2NCAgICAgLT4gIC0xCitybW54MDYwIHJlbWFpbmRlcm5lYXIgLTEgICAgLTIgICAgICAtPiAgLTEKK3JtbngwNjEgcmVtYWluZGVybmVhciAtMSAgICAtNCAgICAgIC0+ICAtMQorcm1ueDA2MiByZW1haW5kZXJuZWFyIC0xICAgIC04ICAgICAgLT4gIC0xCitybW54MDYzIHJlbWFpbmRlcm5lYXIgLTEgICAgLTE2ICAgICAtPiAgLTEKK3JtbngwNjQgcmVtYWluZGVybmVhciAtMSAgICAtMzIgICAgIC0+ICAtMQorcm1ueDA2NSByZW1haW5kZXJuZWFyIC0xICAgIC02NCAgICAgLT4gIC0xCisKK3JtbngwNjYgcmVtYWluZGVybmVhciAgOTk5OTk5OTk3ICAgICAxICAtPiAwCitybW54MDY3IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5Ny40ICAgMSAgLT4gMC40CitybW54MDY4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5Ny41ICAgMSAgLT4gLTAuNQorcm1ueDA2OSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTcuOSAgIDEgIC0+IC0wLjEKK3JtbngwNzAgcmVtYWluZGVybmVhciAgOTk5OTk5OTk3Ljk5OSAxICAtPiAtMC4wMDEKKworcm1ueDA3MSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTggICAgIDEgIC0+IDAKK3JtbngwNzIgcmVtYWluZGVybmVhciAgOTk5OTk5OTk4LjQgICAxICAtPiAwLjQKK3JtbngwNzMgcmVtYWluZGVybmVhciAgOTk5OTk5OTk4LjUgICAxICAtPiAwLjUKK3JtbngwNzQgcmVtYWluZGVybmVhciAgOTk5OTk5OTk4LjkgICAxICAtPiAtMC4xCitybW54MDc1IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OC45OTkgMSAgLT4gLTAuMDAxCisKK3JtbngwNzYgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCitybW54MDc3IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40CitybW54MDc4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngwNzkgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjkgICAxICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDA4MCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOTk5IDEgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKK3ByZWNpc2lvbjogNgorcm1ueDA4MSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkgICAgIDEgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54MDgyIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5ICAgICAgMSAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngwODMgcmVtYWluZGVybmVhciAgOTk5OTk5OSAgICAgICAxICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDA4NCByZW1haW5kZXJuZWFyICA5OTk5OTkgICAgICAgIDEgIC0+IDAKK3JtbngwODUgcmVtYWluZGVybmVhciAgOTk5OTkgICAgICAgICAxICAtPiAwCitybW54MDg2IHJlbWFpbmRlcm5lYXIgIDk5OTkgICAgICAgICAgMSAgLT4gMAorcm1ueDA4NyByZW1haW5kZXJuZWFyICA5OTkgICAgICAgICAgIDEgIC0+IDAKK3JtbngwODggcmVtYWluZGVybmVhciAgOTkgICAgICAgICAgICAxICAtPiAwCitybW54MDg5IHJlbWFpbmRlcm5lYXIgIDkgICAgICAgICAgICAgMSAgLT4gMAorCitwcmVjaXNpb246IDkKK3JtbngwOTAgcmVtYWluZGVybmVhciAgMC4gICAgICAgICAgICAxICAtPiAwCitybW54MDkxIHJlbWFpbmRlcm5lYXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wCitybW54MDkyIHJlbWFpbmRlcm5lYXIgIDAuMDAgICAgICAgICAgMSAgLT4gMC4wMAorcm1ueDA5MyByZW1haW5kZXJuZWFyICAwLjAwRSs5ICAgICAgIDEgIC0+IDAKK3JtbngwOTQgcmVtYWluZGVybmVhciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NAorCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCitwcmVjaXNpb246IDkKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitybW54MTAxIHJlbWFpbmRlcm5lYXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JtbngxMDIgcmVtYWluZGVybmVhciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorcm1ueDEwMyByZW1haW5kZXJuZWFyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitybW54MTA0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JtbngxMDUgcmVtYWluZGVybmVhciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorcm1ueDEwNiByZW1haW5kZXJuZWFyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLAorLS0gYnV0IElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCistLSByZW1haW5kZXJuZWFyLW5lYXIsIGFueXdheV0KK3JtbngxMDcgcmVtYWluZGVybmVhciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTA4IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDEwOSByZW1haW5kZXJuZWFyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMTAgcmVtYWluZGVybmVhciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTExIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDExMiByZW1haW5kZXJuZWFyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMTMgcmVtYWluZGVybmVhciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTE0IHJlbWFpbmRlcm5lYXIgMUUrMTAwMCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDExNSByZW1haW5kZXJuZWFyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMTYgcmVtYWluZGVybmVhciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTE5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDEyMCByZW1haW5kZXJuZWFyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMjEgcmVtYWluZGVybmVhciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTIyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDEyMyByZW1haW5kZXJuZWFyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMjQgcmVtYWluZGVybmVhciAxRSsxMDAwIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgemVyb3Mgb24gbGVmdAorcm1ueDEzMCByZW1haW5kZXJuZWFyICAwICAgICAgMSAgIC0+ICAwCitybW54MTMxIHJlbWFpbmRlcm5lYXIgIDAgICAgIC0xICAgLT4gIDAKK3JtbngxMzIgcmVtYWluZGVybmVhciAgMC4wICAgIDEgICAtPiAgMC4wCitybW54MTMzIHJlbWFpbmRlcm5lYXIgIDAuMCAgIC0xICAgLT4gIDAuMAorcm1ueDEzNCByZW1haW5kZXJuZWFyIC0wICAgICAgMSAgIC0+IC0wCitybW54MTM1IHJlbWFpbmRlcm5lYXIgLTAgICAgIC0xICAgLT4gLTAKK3JtbngxMzYgcmVtYWluZGVybmVhciAtMC4wICAgIDEgICAtPiAtMC4wCitybW54MTM3IHJlbWFpbmRlcm5lYXIgLTAuMCAgIC0xICAgLT4gLTAuMAorCistLSAwLjVlcnMKK3JtbXgxNDMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQorcm1teDE0NCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41CitybW14MTQ1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitybW14MTQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorcm1teDE0NyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAorcm1teDE0OCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MAorcm1teDE0OSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcgorcm1ueDE1MCByZW1haW5kZXJuZWFyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKK3JtbngxNTEgcmVtYWluZGVybmVhciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCitybW54MTUyIHJlbWFpbmRlcm5lYXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMAorcm1ueDE1MyByZW1haW5kZXJuZWFyICAgMC41MiAxLjAyMCAtPiAtMC41MDAKK3JtbngxNTQgcmVtYWluZGVybmVhciAgIDAuNiAgMS4wMjAgLT4gLTAuNDIwCitybW54MTU1IHJlbWFpbmRlcm5lYXIgICAwLjQ5IDEgICAgIC0+ICAwLjQ5CitybW54MTU2IHJlbWFpbmRlcm5lYXIgICAwLjUwIDEgICAgIC0+ICAwLjUwCitybW54MTU3IHJlbWFpbmRlcm5lYXIgICAxLjUwIDEgICAgIC0+IC0wLjUwCitybW54MTU4IHJlbWFpbmRlcm5lYXIgICAyLjUwIDEgICAgIC0+ICAwLjUwCitybW54MTU5IHJlbWFpbmRlcm5lYXIgICA5LjUwIDEgICAgIC0+IC0wLjUwCitybW54MTYwIHJlbWFpbmRlcm5lYXIgICAwLjUxIDEgICAgIC0+IC0wLjQ5CisKKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCitybW54MTYxIHJlbWFpbmRlcm5lYXIgICAwLjQgICAgICAgICAxICAgLT4gIDAuNAorcm1ueDE2MiByZW1haW5kZXJuZWFyICAgMC40NSAgICAgICAgMSAgIC0+ICAwLjQ1CitybW54MTYzIHJlbWFpbmRlcm5lYXIgICAwLjQ1NSAgICAgICAxICAgLT4gIDAuNDU1CitybW54MTY0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTUgICAgICAxICAgLT4gIDAuNDU1NQorcm1ueDE2NSByZW1haW5kZXJuZWFyICAgMC40NTU1NSAgICAgMSAgIC0+ICAwLjQ1NTU1CitybW54MTY2IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NSAgICAxICAgLT4gIDAuNDU1NTU1CitybW54MTY3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTUgICAxICAgLT4gIDAuNDU1NTU1NQorcm1ueDE2OCByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NSAgMSAgIC0+ICAwLjQ1NTU1NTU1CitybW54MTY5IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTU1CistLSB3aXRoIHNwaWxsLi4uCitybW54MTcxIHJlbWFpbmRlcm5lYXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQorcm1ueDE3MiByZW1haW5kZXJuZWFyICAgMC41NSAgICAgICAgMSAgIC0+IC0wLjQ1CitybW54MTczIHJlbWFpbmRlcm5lYXIgICAwLjU1NSAgICAgICAxICAgLT4gLTAuNDQ1CitybW54MTc0IHJlbWFpbmRlcm5lYXIgICAwLjU1NTUgICAgICAxICAgLT4gLTAuNDQ0NQorcm1ueDE3NSByZW1haW5kZXJuZWFyICAgMC41NTU1NSAgICAgMSAgIC0+IC0wLjQ0NDQ1CitybW54MTc2IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NSAgICAxICAgLT4gLTAuNDQ0NDQ1CitybW54MTc3IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTUgICAxICAgLT4gLTAuNDQ0NDQ0NQorcm1ueDE3OCByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1NSAgMSAgIC0+IC0wLjQ0NDQ0NDQ1CitybW54MTc5IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1NSAxICAgLT4gLTAuNDQ0NDQ0NDQ1CisKKy0tIHByb2dyZXNzaW9uCitybW54MTgwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCitybW54MTgxIHJlbWFpbmRlcm5lYXIgIDEgIDIgICAtPiAxCitybW54MTgyIHJlbWFpbmRlcm5lYXIgIDEgIDMgICAtPiAxCitybW54MTgzIHJlbWFpbmRlcm5lYXIgIDEgIDQgICAtPiAxCitybW54MTg0IHJlbWFpbmRlcm5lYXIgIDEgIDUgICAtPiAxCitybW54MTg1IHJlbWFpbmRlcm5lYXIgIDEgIDYgICAtPiAxCitybW54MTg2IHJlbWFpbmRlcm5lYXIgIDEgIDcgICAtPiAxCitybW54MTg3IHJlbWFpbmRlcm5lYXIgIDEgIDggICAtPiAxCitybW54MTg4IHJlbWFpbmRlcm5lYXIgIDEgIDkgICAtPiAxCitybW54MTg5IHJlbWFpbmRlcm5lYXIgIDEgIDEwICAtPiAxCitybW54MTkwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCitybW54MTkxIHJlbWFpbmRlcm5lYXIgIDIgIDEgICAtPiAwCitybW54MTkyIHJlbWFpbmRlcm5lYXIgIDMgIDEgICAtPiAwCitybW54MTkzIHJlbWFpbmRlcm5lYXIgIDQgIDEgICAtPiAwCitybW54MTk0IHJlbWFpbmRlcm5lYXIgIDUgIDEgICAtPiAwCitybW54MTk1IHJlbWFpbmRlcm5lYXIgIDYgIDEgICAtPiAwCitybW54MTk2IHJlbWFpbmRlcm5lYXIgIDcgIDEgICAtPiAwCitybW54MTk3IHJlbWFpbmRlcm5lYXIgIDggIDEgICAtPiAwCitybW54MTk4IHJlbWFpbmRlcm5lYXIgIDkgIDEgICAtPiAwCitybW54MTk5IHJlbWFpbmRlcm5lYXIgIDEwIDEgICAtPiAwCisKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDAKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitybW54MjAxIHJlbWFpbmRlcm5lYXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorcm1ueDIwMiByZW1haW5kZXJuZWFyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JtbngyMDMgcmVtYWluZGVybmVhciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitybW54MjA0IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MjA1IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MjA2IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MjA3IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MjA4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MjA5IHJlbWFpbmRlcm5lYXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MjEwIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MjExIHJlbWFpbmRlcm5lYXIgMUUrMTAwMCAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHRlc3RzIGZyb20gdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24KK3JtbngyMjEgcmVtYWluZGVybmVhciAyLjEgICAgIDMgICAtPiAtMC45CitybW54MjIyIHJlbWFpbmRlcm5lYXIgIDEwICAgICA2ICAgLT4gLTIKK3JtbngyMjMgcmVtYWluZGVybmVhciAgMTAgICAgIDMgICAtPiAgMQorcm1ueDIyNCByZW1haW5kZXJuZWFyIC0xMCAgICAgMyAgIC0+IC0xCitybW54MjI1IHJlbWFpbmRlcm5lYXIgIDEwLjIgICAxICAgLT4gMC4yCitybW54MjI2IHJlbWFpbmRlcm5lYXIgIDEwICAgICAwLjMgLT4gMC4xCitybW54MjI3IHJlbWFpbmRlcm5lYXIgICAzLjYgICAxLjMgLT4gLTAuMworCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCitybW54MjMxIHJlbWFpbmRlcm5lYXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMAorcm1ueDIzMiByZW1haW5kZXJuZWFyICAgMC41MCAxLjAyMCAtPiAgMC41MDAKK3JtbngyMzMgcmVtYWluZGVybmVhciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwCitybW54MjM0IHJlbWFpbmRlcm5lYXIgICAwLjUyIDEuMDIwIC0+IC0wLjUwMAorcm1ueDIzNSByZW1haW5kZXJuZWFyICAgMC42ICAxLjAyMCAtPiAtMC40MjAKKworLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93CittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcm1ueDI3MCByZW1haW5kZXJuZWFyIDEgMWU5OTk5OTk5OTkgICAgLT4gMQorcm1ueDI3MSByZW1haW5kZXJuZWFyIDEgMC45ZTk5OTk5OTk5OSAgLT4gMQorcm1ueDI3MiByZW1haW5kZXJuZWFyIDEgMC45OWU5OTk5OTk5OTkgLT4gMQorcm1ueDI3MyByZW1haW5kZXJuZWFyIDEgMC45OTk5OTk5OTllOTk5OTk5OTk5IC0+IDEKK3JtbngyNzQgcmVtYWluZGVybmVhciA5ZTk5OTk5OTk5OSAgICAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54Mjc1IHJlbWFpbmRlcm5lYXIgOS45ZTk5OTk5OTk5OSAgICAgICAgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDI3NiByZW1haW5kZXJuZWFyIDkuOTllOTk5OTk5OTk5ICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngyNzcgcmVtYWluZGVybmVhciA5Ljk5OTk5OTk5ZTk5OTk5OTk5OSAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKK3JtbngyODAgcmVtYWluZGVybmVhciAwLjEgOWUtOTk5OTk5OTk5ICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54MjgxIHJlbWFpbmRlcm5lYXIgMC4xIDk5ZS05OTk5OTk5OTkgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDI4MiByZW1haW5kZXJuZWFyIDAuMSA5OTllLTk5OTk5OTk5OSAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworcm1ueDI4MyByZW1haW5kZXJuZWFyIDAuMSA5ZS05OTk5OTk5OTggICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngyODQgcmVtYWluZGVybmVhciAwLjEgOTllLTk5OTk5OTk5OCAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54Mjg1IHJlbWFpbmRlcm5lYXIgMC4xIDk5OWUtOTk5OTk5OTk4ICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDI4NiByZW1haW5kZXJuZWFyIDAuMSA5OTllLTk5OTk5OTk5NyAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngyODcgcmVtYWluZGVybmVhciAwLjEgOTk5OWUtOTk5OTk5OTk3ICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54Mjg4IHJlbWFpbmRlcm5lYXIgMC4xIDk5OTk5ZS05OTk5OTk5OTcgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBybW54M3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsCitybW54MzAxIHJlbWFpbmRlcm5lYXIgICAxICAgIDMgICAgIC0+ICAxCitybW54MzAyIHJlbWFpbmRlcm5lYXIgICA1ICAgIDUgICAgIC0+ICAwCitybW54MzAzIHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwICAgIC0+ICAzCitybW54MzA0IHJlbWFpbmRlcm5lYXIgICAxMyAgIDUwICAgIC0+ICAxMworcm1ueDMwNSByZW1haW5kZXJuZWFyICAgMTMgICAxMDAgICAtPiAgMTMKK3JtbngzMDYgcmVtYWluZGVybmVhciAgIDEzICAgMTAwMCAgLT4gIDEzCitybW54MzA3IHJlbWFpbmRlcm5lYXIgICAuMTMgICAgMSAgIC0+ICAwLjEzCitybW54MzA4IHJlbWFpbmRlcm5lYXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMworcm1ueDMwOSByZW1haW5kZXJuZWFyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzCitybW54MzEwIHJlbWFpbmRlcm5lYXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMworcm1ueDMxMSByZW1haW5kZXJuZWFyICAgMTAuMzMgIDEgICAtPiAgMC4zMworcm1ueDMxMiByZW1haW5kZXJuZWFyICAgMTAuMzMgMTAgICAtPiAgMC4zMworcm1ueDMxMyByZW1haW5kZXJuZWFyICAgMTAzLjMgIDEgICAtPiAgMC4zCitybW54MzE0IHJlbWFpbmRlcm5lYXIgICAxMzMgICAxMCAgIC0+ICAzCitybW54MzE1IHJlbWFpbmRlcm5lYXIgICAxMDMzICAxMCAgIC0+ICAzCitybW54MzE2IHJlbWFpbmRlcm5lYXIgICAxMDMzICA1MCAgIC0+IC0xNworcm1ueDMxNyByZW1haW5kZXJuZWFyICAgMTAxLjAgIDMgICAtPiAtMS4wCitybW54MzE4IHJlbWFpbmRlcm5lYXIgICAxMDIuMCAgMyAgIC0+ICAwLjAKK3JtbngzMTkgcmVtYWluZGVybmVhciAgIDEwMy4wICAzICAgLT4gIDEuMAorcm1ueDMyMCByZW1haW5kZXJuZWFyICAgMi40MCAgIDEgICAtPiAgMC40MAorcm1ueDMyMSByZW1haW5kZXJuZWFyICAgMi40MDAgIDEgICAtPiAgMC40MDAKK3JtbngzMjIgcmVtYWluZGVybmVhciAgIDIuNCAgICAxICAgLT4gIDAuNAorcm1ueDMyMyByZW1haW5kZXJuZWFyICAgMi40ICAgIDIgICAtPiAgMC40CitybW54MzI0IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMAorcm1ueDMyNSByZW1haW5kZXJuZWFyICAgMSAgIDAuMyAgICAtPiAgMC4xCitybW54MzI2IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMCAgIC0+ICAwLjEwCitybW54MzI3IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMAorcm1ueDMyOCByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwCitybW54MzI5IHJlbWFpbmRlcm5lYXIgICAxLjAgICAgMC4zIC0+ICAwLjEKK3JtbngzMzAgcmVtYWluZGVybmVhciAgIDEuMDAgICAwLjMgLT4gIDAuMTAKK3JtbngzMzEgcmVtYWluZGVybmVhciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwCitybW54MzMyIHJlbWFpbmRlcm5lYXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDAKK3JtbngzMzMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQorcm1ueDMzNCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41CitybW54MzM1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitybW54MzM2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorcm1ueDMzNyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAorcm1ueDMzOCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MAorcm1ueDMzOSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworcm1ueDM0MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAtMUUtNworcm1ueDM0MSByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgLTFFLTgKK3JtbngzNDIgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAtMUUtOQorcm1ueDM0MyByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAtMUUtMTAKK3JtbngzNDQgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIC0xRS0xMQorcm1ueDM0NSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5ICAgIC0+ICAxRS03CitybW54MzQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04CitybW54MzQ3IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQorcm1ueDM0OCByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5ICAgIC0+ICAxRS0xMAorcm1ueDM0OSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTEKKworcm1ueDM1MCByZW1haW5kZXJuZWFyICAgMC4wMyAgNyAgLT4gIDAuMDMKK3JtbngzNTEgcmVtYWluZGVybmVhciAgIDUgICAyICAgIC0+ICAxCitybW54MzUyIHJlbWFpbmRlcm5lYXIgICA0LjEgICAyICAgIC0+ICAwLjEKK3JtbngzNTMgcmVtYWluZGVybmVhciAgIDQuMDEgICAyICAgIC0+ICAwLjAxCitybW54MzU0IHJlbWFpbmRlcm5lYXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxCitybW54MzU1IHJlbWFpbmRlcm5lYXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKK3JtbngzNTYgcmVtYWluZGVybmVhciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxCitybW54MzU3IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxCitybW54MzU4IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03CisKK3JtbngzNjAgcmVtYWluZGVybmVhciAgIDEuMiAgIDAuNzM0NSAtPiAtMC4yNjkwCitybW54MzYxIHJlbWFpbmRlcm5lYXIgICAwLjggICAxMiAgICAgLT4gIDAuOAorcm1ueDM2MiByZW1haW5kZXJuZWFyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKK3JtbngzNjMgcmVtYWluZGVybmVhciAgIDAuOCAgIDAuMyAgICAtPiAtMC4xCitybW54MzY0IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEyICAgLT4gIDAuODAwCitybW54MzY1IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCitybW54MzY2IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwCisKK3ByZWNpc2lvbjogNgorcm1ueDM3MSByZW1haW5kZXJuZWFyICAgMi40MDAgIDIgICAgICAgIC0+ICAwLjQwMAorcHJlY2lzaW9uOiAzCitybW54MzcyIHJlbWFpbmRlcm5lYXIgICAxMjM0NTY3ODkwMDAwMCAxMmUrMTIgLT4gMy40NkUrMTEgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogNQorcm1ueDM4MSByZW1haW5kZXJuZWFyIDEyMzQ1ICAxICAgICAgICAgLT4gIDAKK3JtbngzODIgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDAxICAgIC0+IC0wLjIzNDQKK3JtbngzODMgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDEgICAgIC0+IC0wLjMzMworcm1ueDM4NCByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAxICAgICAgLT4gLTAuMjMKK3JtbngzODUgcmVtYWluZGVybmVhciAxMjM0NSAgMS4xICAgICAgIC0+IC0wLjMKK3JtbngzODYgcmVtYWluZGVybmVhciAxMjM1NSAgNCAgICAgICAgIC0+IC0xCitybW54Mzg3IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQgICAgICAgICAtPiAgMQorcm1ueDM4OCByZW1haW5kZXJuZWFyIDEyMzU1ICA0LjAwMDEgICAgLT4gLTEuMzA4OQorcm1ueDM4OSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNAorcm1ueDM5MCByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjkgICAgICAgLT4gIDEuOQorcm1ueDM5MSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gLTAuMjYKK3JtbngzOTIgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQorcm1ueDM5MyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDAuMjQ2OQorcm1ueDM5NCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKK3JtbngzOTUgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDAxICAgIC0+IC0wLjI0NjkKK3JtbngzOTYgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDEgICAgIC0+IC0yLjQ2OQorcm1ueDM5NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKK3JtbngzOTggcmVtYWluZGVybmVhciAxMjM0NSAgNS4xICAgICAgIC0+IC0yLjEKKworcHJlY2lzaW9uOiA5CistLSBzb21lIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMgW3NvbWUgc2ltaWxhciBhYm92ZV0KK3Jtbng0MDEgcmVtYWluZGVybmVhciAgIDAuNCAgICAgICAgIDEgICAtPiAgMC40CitybW54NDAyIHJlbWFpbmRlcm5lYXIgICAwLjQ1ICAgICAgICAxICAgLT4gIDAuNDUKK3Jtbng0MDMgcmVtYWluZGVybmVhciAgIDAuNDU1ICAgICAgIDEgICAtPiAgMC40NTUKK3Jtbng0MDQgcmVtYWluZGVybmVhciAgIDAuNDU1NSAgICAgIDEgICAtPiAgMC40NTU1CitybW54NDA1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1ICAgICAxICAgLT4gIDAuNDU1NTUKK3Jtbng0MDYgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1ICAgIDEgICAtPiAgMC40NTU1NTUKK3Jtbng0MDcgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NSAgIDEgICAtPiAgMC40NTU1NTU1CitybW54NDA4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1ICAxICAgLT4gIDAuNDU1NTU1NTUKK3Jtbng0MDkgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU1NTU1NTUKKworLS0gc29tZSB0cmlja3kgTEhTcworcm1ueDQyMCByZW1haW5kZXJuZWFyICAgOTk5OTk5OTkuOTk5OTk5OTk5ICAgMUUrOCAgIC0+IC0xRS05CitybW54NDIxIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45OTk5OTk5OTkgICAxRSs5ICAgLT4gLTFFLTkKK3ByZWNpc2lvbjogOQorcm1ueDQzMCByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NTU1NTU1NQorcHJlY2lzaW9uOiA4CitybW54NDMxIHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTYgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDcKK3Jtbng0MzIgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU1NTU2ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNgorcm1ueDQzMyByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NTU1NiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA1CitybW54NDM0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTYgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQKK3Jtbng0MzUgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU2ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworcm1ueDQzNiByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyCitybW54NDM3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDYgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEKK3Jtbng0MzggcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC41ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gZWFybHkgdGVzdHM7IGZyb20gdGV4dCBkZXNjcmlwdGlvbnMKK3ByZWNpc2lvbjogOQorcm1ueDYwMSByZW1haW5kZXJuZWFyICAxMCAgIDYgIC0+IC0yCitybW54NjAyIHJlbWFpbmRlcm5lYXIgLTEwICAgNiAgLT4gMgorcm1ueDYwMyByZW1haW5kZXJuZWFyICAxMSAgIDMgIC0+IC0xCitybW54NjA0IHJlbWFpbmRlcm5lYXIgIDExICAgNSAgLT4gMQorcm1ueDYwNSByZW1haW5kZXJuZWFyICAgNy43IDggIC0+IC0wLjMKK3Jtbng2MDYgcmVtYWluZGVybmVhciAgMzEuNSAzICAtPiAxLjUgICAgLS0gaT0xMAorcm1ueDYwNyByZW1haW5kZXJuZWFyICAzNC41IDMgIC0+IC0xLjUgICAtLSBpPTExCisKKy0tIHplcm8gc2lnbnMKK3Jtbng2NTAgcmVtYWluZGVybmVhciAgMSAgMSAtPiAgMAorcm1ueDY1MSByZW1haW5kZXJuZWFyIC0xICAxIC0+IC0wCitybW54NjUyIHJlbWFpbmRlcm5lYXIgIDEgLTEgLT4gIDAKK3Jtbng2NTMgcmVtYWluZGVybmVhciAtMSAtMSAtPiAtMAorcm1ueDY1NCByZW1haW5kZXJuZWFyICAwICAxIC0+ICAwCitybW54NjU1IHJlbWFpbmRlcm5lYXIgLTAgIDEgLT4gLTAKK3Jtbng2NTYgcmVtYWluZGVybmVhciAgMCAtMSAtPiAgMAorcm1ueDY1NyByZW1haW5kZXJuZWFyIC0wIC0xIC0+IC0wCitybW54NjU4IHJlbWFpbmRlcm5lYXIgIDAuMDAgIDEgIC0+ICAwLjAwCitybW54NjU5IHJlbWFpbmRlcm5lYXIgLTAuMDAgIDEgIC0+IC0wLjAwCisKKy0tIFNwZWNpYWxzCitybW54NjgwIHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng2ODEgcmVtYWluZGVybmVhciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54NjgzIHJlbWFpbmRlcm5lYXIgIEluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng2ODQgcmVtYWluZGVybmVhciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54Njg2IHJlbWFpbmRlcm5lYXIgIEluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng2ODcgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorcm1ueDY4OSByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54NjkxIHJlbWFpbmRlcm5lYXIgLTEgICAgIEluZiAgIC0+IC0xCitybW54NjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwCitybW54NjkzIHJlbWFpbmRlcm5lYXIgLTAgICAgIEluZiAgIC0+IC0wCitybW54Njk0IHJlbWFpbmRlcm5lYXIgIDEgICAgIEluZiAgIC0+ICAxCitybW54Njk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitybW54Njk2IHJlbWFpbmRlcm5lYXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcm1ueDcwMCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54NzAxIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3MDIgcmVtYWluZGVybmVhciAtSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDcwMyByZW1haW5kZXJuZWFyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54NzA0IHJlbWFpbmRlcm5lYXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3MDUgcmVtYWluZGVybmVhciAtSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDcwNiByZW1haW5kZXJuZWFyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54NzA3IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3MDggcmVtYWluZGVybmVhciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDcwOSByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorcm1ueDcxMCByZW1haW5kZXJuZWFyIC0xICAgIC1JbmYgICAtPiAtMQorcm1ueDcxMSByZW1haW5kZXJuZWFyIC0wICAgIC1JbmYgICAtPiAtMAorcm1ueDcxMiByZW1haW5kZXJuZWFyICAwICAgIC1JbmYgICAtPiAgMAorcm1ueDcxMyByZW1haW5kZXJuZWFyICAxICAgIC1JbmYgICAtPiAgMQorcm1ueDcxNCByZW1haW5kZXJuZWFyICAxMDAwIC1JbmYgICAtPiAgMTAwMAorcm1ueDcxNSByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3Jtbng3MjEgcmVtYWluZGVybmVhciAgTmFOIC1JbmYgICAgLT4gIE5hTgorcm1ueDcyMiByZW1haW5kZXJuZWFyICBOYU4gLTEwMDAgICAtPiAgTmFOCitybW54NzIzIHJlbWFpbmRlcm5lYXIgIE5hTiAtMSAgICAgIC0+ICBOYU4KK3Jtbng3MjQgcmVtYWluZGVybmVhciAgTmFOIC0wICAgICAgLT4gIE5hTgorcm1ueDcyNSByZW1haW5kZXJuZWFyICBOYU4gIDAgICAgICAtPiAgTmFOCitybW54NzI2IHJlbWFpbmRlcm5lYXIgIE5hTiAgMSAgICAgIC0+ICBOYU4KK3Jtbng3MjcgcmVtYWluZGVybmVhciAgTmFOICAxMDAwICAgLT4gIE5hTgorcm1ueDcyOCByZW1haW5kZXJuZWFyICBOYU4gIEluZiAgICAtPiAgTmFOCitybW54NzI5IHJlbWFpbmRlcm5lYXIgIE5hTiAgTmFOICAgIC0+ICBOYU4KK3Jtbng3MzAgcmVtYWluZGVybmVhciAtSW5mICBOYU4gICAgLT4gIE5hTgorcm1ueDczMSByZW1haW5kZXJuZWFyIC0xMDAwIE5hTiAgICAtPiAgTmFOCitybW54NzMyIHJlbWFpbmRlcm5lYXIgLTEgICAtTmFOICAgIC0+IC1OYU4KK3Jtbng3MzMgcmVtYWluZGVybmVhciAtMCAgICBOYU4gICAgLT4gIE5hTgorcm1ueDczNCByZW1haW5kZXJuZWFyICAwICAgIE5hTiAgICAtPiAgTmFOCitybW54NzM1IHJlbWFpbmRlcm5lYXIgIDEgICAgTmFOICAgIC0+ICBOYU4KK3Jtbng3MzYgcmVtYWluZGVybmVhciAgMTAwMCBOYU4gICAgLT4gIE5hTgorcm1ueDczNyByZW1haW5kZXJuZWFyICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK3Jtbng3NDEgcmVtYWluZGVybmVhciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NDMgcmVtYWluZGVybmVhciAtc05hTiAtMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NDQgcmVtYWluZGVybmVhciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NDYgcmVtYWluZGVybmVhciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NDcgcmVtYWluZGVybmVhciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTAgcmVtYWluZGVybmVhciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTEgcmVtYWluZGVybmVhciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTMgcmVtYWluZGVybmVhciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTQgcmVtYWluZGVybmVhciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTUgcmVtYWluZGVybmVhciAtMCAgIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTYgcmVtYWluZGVybmVhciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTcgcmVtYWluZGVybmVhciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NTkgcmVtYWluZGVybmVhciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NjAgcmVtYWluZGVybmVhciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnaW5nIE5hTnMKK3Jtbng3NjEgcmVtYWluZGVybmVhciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQorcm1ueDc2MiByZW1haW5kZXJuZWFyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitybW54NzYzIHJlbWFpbmRlcm5lYXIgIE5hTjMgLXNOYU45ICAgLT4gLU5hTjkgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NjQgcmVtYWluZGVybmVhciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDc2NSByZW1haW5kZXJuZWFyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQorcm1ueDc2NiByZW1haW5kZXJuZWFyICBOYU42ICAgTmFOMTIgIC0+ICBOYU42CitybW54NzY3IHJlbWFpbmRlcm5lYXIgIEluZiAgIC1OYU4xMyAgLT4gLU5hTjEzCitybW54NzY4IHJlbWFpbmRlcm5lYXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0CitybW54NzY5IHJlbWFpbmRlcm5lYXIgICAgMCAgICBOYU4xNSAgLT4gIE5hTjE1CitybW54NzcwIHJlbWFpbmRlcm5lYXIgLU5hTjE2ICAgLTAgICAgLT4gLU5hTjE2CisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3Jtbng3ODAgcmVtYWluZGVybmVhciAxIDFlOTk5OTk5OTk5ICAgIC0+IDEKK3Jtbng3ODEgcmVtYWluZGVybmVhciAxIDAuOWU5OTk5OTk5OTkgIC0+IDEKK3Jtbng3ODIgcmVtYWluZGVybmVhciAxIDAuOTllOTk5OTk5OTk5IC0+IDEKK3Jtbng3ODMgcmVtYWluZGVybmVhciAxIDAuOTk5OTk5OTk5ZTk5OTk5OTk5OSAtPiAxCitybW54Nzg0IHJlbWFpbmRlcm5lYXIgOWU5OTk5OTk5OTkgICAgICAgICAgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDc4NSByZW1haW5kZXJuZWFyIDkuOWU5OTk5OTk5OTkgICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3Jtbng3ODYgcmVtYWluZGVybmVhciA5Ljk5ZTk5OTk5OTk5OSAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54Nzg3IHJlbWFpbmRlcm5lYXIgOS45OTk5OTk5OWU5OTk5OTk5OTkgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorcHJlY2lzaW9uOiA5CittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcm1ueDc5MCByZW1haW5kZXJuZWFyICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiAxLjIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm1ueDc5MSByZW1haW5kZXJuZWFyIDlFKzk5OTk5OTk5OSArMC4yMzQ1Njc4OTAxMjM0NUUtMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDc5MiByZW1haW5kZXJuZWFyICswLjEwMCA5RSs5OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAwLjEwMAorcm1ueDc5MyByZW1haW5kZXJuZWFyIDlFLTk5OTk5OTk5OSArOS4xMDAgICAgICAgICAgICAgICAtPiA5RS05OTk5OTk5OTkKK3Jtbng3OTUgcmVtYWluZGVybmVhciAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTEuMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitybW54Nzk2IHJlbWFpbmRlcm5lYXIgOUUrOTk5OTk5OTk5IC0wLjgzNDU2Nzg5MDEyMzQ1RS0wIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54Nzk3IHJlbWFpbmRlcm5lYXIgLTAuMTAwIDlFKzk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC0wLjEwMAorcm1ueDc5OCByZW1haW5kZXJuZWFyIDlFLTk5OTk5OTk5OSAtOS4xMDAgICAgICAgICAgICAgICAtPiA5RS05OTk5OTk5OTkKKworLS0gbG9uZyBvcGVyYW5kcyBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK3Jtbng4MDEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorcm1ueDgwMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitybW54ODAzIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKK3Jtbng4MDQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorcm1ueDgwNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitybW54ODA2IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKK3Jtbng4MDcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQorcm1ueDgwOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitybW54ODA5IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKK3Jtbng4MTAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorcm1ueDgxMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorcm1ueDgxMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKK3ByZWNpc2lvbjogMTUKK3Jtbng4NDEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorcm1ueDg0MiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitybW54ODQzIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKK3Jtbng4NDQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorcm1ueDg0NSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitybW54ODQ2IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKK3Jtbng4NDcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQorcm1ueDg0OCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitybW54ODQ5IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKK3Jtbng4NTAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorcm1ueDg1MSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorcm1ueDg1MiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIE51bGwgdGVzdHMKK3Jtbng5MDAgcmVtYWluZGVybmVhciAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng5MDEgcmVtYWluZGVybmVhciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmVzY2FsZS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yZXNjYWxlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkOTM4YgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmVzY2FsZS5kZWNUZXN0CkBAIC0wLDAgKzEsNzY0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHJlc2NhbGUuZGVjVGVzdCAtLSBkZWNpbWFsIHJlc2NhbGUgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gW29ic29sZXRlXSAgIFF1YW50aXplLmRlY1Rlc3QgaGFzIHRoZSBpbXByb3ZlZCB2ZXJzaW9uCisKKy0tIDIwMDQuMDMuMTUgVW5kZXJmbG93IGZvciBxdWFudGl6ZSBpcyBzdXBwcmVzc2VkCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CisKKy0tIHNhbml0eSBjaGVja3MKKworcmVzeDAwMSByZXNjYWxlIDAgICAgICAgMCAgIC0+IDAKK3Jlc3gwMDIgcmVzY2FsZSAxICAgICAgIDAgICAtPiAxCityZXN4MDAzIHJlc2NhbGUgMC4xICAgICsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwMDUgcmVzY2FsZSAwLjEgICAgKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDAwNiByZXNjYWxlIDAuMSAgICAgMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCityZXN4MDA3IHJlc2NhbGUgMC4xICAgIC0xICAgLT4gMC4xCityZXN4MDA4IHJlc2NhbGUgMC4xICAgIC0yICAgLT4gMC4xMAorcmVzeDAwOSByZXNjYWxlIDAuMSAgICAtMyAgIC0+IDAuMTAwCityZXN4MDEwIHJlc2NhbGUgMC45ICAgICsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwMTEgcmVzY2FsZSAwLjkgICAgKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDAxMiByZXNjYWxlIDAuOSAgICArMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCityZXN4MDEzIHJlc2NhbGUgMC45ICAgIC0xICAgLT4gMC45CityZXN4MDE0IHJlc2NhbGUgMC45ICAgIC0yICAgLT4gMC45MAorcmVzeDAxNSByZXNjYWxlIDAuOSAgICAtMyAgIC0+IDAuOTAwCistLSBuZWdhdGl2ZXMKK3Jlc3gwMjEgcmVzY2FsZSAtMCAgICAgIDAgICAtPiAtMAorcmVzeDAyMiByZXNjYWxlIC0xICAgICAgMCAgIC0+IC0xCityZXN4MDIzIHJlc2NhbGUgLTAuMSAgICsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MDI1IHJlc2NhbGUgLTAuMSAgICsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MDI2IHJlc2NhbGUgLTAuMSAgICAwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCityZXN4MDI3IHJlc2NhbGUgLTAuMSAgIC0xICAgLT4gLTAuMQorcmVzeDAyOCByZXNjYWxlIC0wLjEgICAtMiAgIC0+IC0wLjEwCityZXN4MDI5IHJlc2NhbGUgLTAuMSAgIC0zICAgLT4gLTAuMTAwCityZXN4MDMwIHJlc2NhbGUgLTAuOSAgICsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MDMxIHJlc2NhbGUgLTAuOSAgICsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MDMyIHJlc2NhbGUgLTAuOSAgICswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCityZXN4MDMzIHJlc2NhbGUgLTAuOSAgIC0xICAgLT4gLTAuOQorcmVzeDAzNCByZXNjYWxlIC0wLjkgICAtMiAgIC0+IC0wLjkwCityZXN4MDM1IHJlc2NhbGUgLTAuOSAgIC0zICAgLT4gLTAuOTAwCityZXN4MDM2IHJlc2NhbGUgLTAuNSAgICsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MDM3IHJlc2NhbGUgLTAuNSAgICsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MDM4IHJlc2NhbGUgLTAuNSAgICswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCityZXN4MDM5IHJlc2NhbGUgLTAuNSAgIC0xICAgLT4gLTAuNQorcmVzeDA0MCByZXNjYWxlIC0wLjUgICAtMiAgIC0+IC0wLjUwCityZXN4MDQxIHJlc2NhbGUgLTAuNSAgIC0zICAgLT4gLTAuNTAwCityZXN4MDQyIHJlc2NhbGUgLTAuOSAgICsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MDQzIHJlc2NhbGUgLTAuOSAgICsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MDQ0IHJlc2NhbGUgLTAuOSAgICswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCityZXN4MDQ1IHJlc2NhbGUgLTAuOSAgIC0xICAgLT4gLTAuOQorcmVzeDA0NiByZXNjYWxlIC0wLjkgICAtMiAgIC0+IC0wLjkwCityZXN4MDQ3IHJlc2NhbGUgLTAuOSAgIC0zICAgLT4gLTAuOTAwCisKKy0tIGV4YW1wbGVzIGZyb20gU3BlY2lmaWNhdGlvbgorcmVzeDA2MCByZXNjYWxlIDIuMTcgICAtMyAgIC0+IDIuMTcwCityZXN4MDYxIHJlc2NhbGUgMi4xNyAgIC0yICAgLT4gMi4xNworcmVzeDA2MiByZXNjYWxlIDIuMTcgICAtMSAgIC0+IDIuMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwNjMgcmVzY2FsZSAyLjE3ICAgIDAgICAtPiAyIEluZXhhY3QgUm91bmRlZAorcmVzeDA2NCByZXNjYWxlIDIuMTcgICArMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MDY1IHJlc2NhbGUgMiAgICAgIEluZiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4MDY2IHJlc2NhbGUgLTAuMSAgICAwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCityZXN4MDY3IHJlc2NhbGUgLTAgICAgICA1ICAgLT4gLTBFKzUKK3Jlc3gwNjggcmVzY2FsZSArMzUyMzY0NTAuNiAtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3gwNjkgcmVzY2FsZSAtMzUyMzY0NTAuNiAtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3gwNzAgcmVzY2FsZSAyMTcgICAgLTEgICAtPiAyMTcuMAorcmVzeDA3MSByZXNjYWxlIDIxNyAgICAgMCAgIC0+IDIxNworcmVzeDA3MiByZXNjYWxlIDIxNyAgICArMSAgIC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwNzMgcmVzY2FsZSAyMTcgICAgKzIgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZAorCistLSBnZW5lcmFsIHRlc3RzIC4uCityZXN4MDg5IHJlc2NhbGUgMTIgICAgICs0ICAgLT4gMEUrNCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwOTAgcmVzY2FsZSAxMiAgICAgKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZAorcmVzeDA5MSByZXNjYWxlIDEyICAgICArMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MDkyIHJlc2NhbGUgMTIgICAgICsxICAgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwOTMgcmVzY2FsZSAxLjIzNDUgLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZAorcmVzeDA5NCByZXNjYWxlIDEuMjM1NSAtMiAgIC0+IDEuMjQgSW5leGFjdCBSb3VuZGVkCityZXN4MDk1IHJlc2NhbGUgMS4yMzQ1IC02ICAgLT4gMS4yMzQ1MDAKK3Jlc3gwOTYgcmVzY2FsZSA5Ljk5OTkgLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwOTcgcmVzY2FsZSAwLjAwMDEgLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZAorcmVzeDA5OCByZXNjYWxlIDAuMDAxICAtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkCityZXN4MDk5IHJlc2NhbGUgMC4wMDkgIC0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gxMDAgcmVzY2FsZSA5MiAgICAgKzIgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZAorCityZXN4MTAxIHJlc2NhbGUgLTEgICAgICAwICAgLT4gIC0xCityZXN4MTAyIHJlc2NhbGUgLTEgICAgIC0xICAgLT4gIC0xLjAKK3Jlc3gxMDMgcmVzY2FsZSAtMSAgICAgLTIgICAtPiAgLTEuMDAKK3Jlc3gxMDQgcmVzY2FsZSAgMCAgICAgIDAgICAtPiAgMAorcmVzeDEwNSByZXNjYWxlICAwICAgICAtMSAgIC0+ICAwLjAKK3Jlc3gxMDYgcmVzY2FsZSAgMCAgICAgLTIgICAtPiAgMC4wMAorcmVzeDEwNyByZXNjYWxlICAwLjAwICAgMCAgIC0+ICAwCityZXN4MTA4IHJlc2NhbGUgIDAgICAgICsxICAgLT4gIDBFKzEKK3Jlc3gxMDkgcmVzY2FsZSAgMCAgICAgKzIgICAtPiAgMEUrMgorcmVzeDExMCByZXNjYWxlICsxICAgICAgMCAgIC0+ICAxCityZXN4MTExIHJlc2NhbGUgKzEgICAgIC0xICAgLT4gIDEuMAorcmVzeDExMiByZXNjYWxlICsxICAgICAtMiAgIC0+ICAxLjAwCisKK3Jlc3gxMjAgcmVzY2FsZSAgIDEuMDQgIC0zIC0+ICAxLjA0MAorcmVzeDEyMSByZXNjYWxlICAgMS4wNCAgLTIgLT4gIDEuMDQKK3Jlc3gxMjIgcmVzY2FsZSAgIDEuMDQgIC0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkCityZXN4MTIzIHJlc2NhbGUgICAxLjA0ICAgMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gxMjQgcmVzY2FsZSAgIDEuMDUgIC0zIC0+ICAxLjA1MAorcmVzeDEyNSByZXNjYWxlICAgMS4wNSAgLTIgLT4gIDEuMDUKK3Jlc3gxMjYgcmVzY2FsZSAgIDEuMDUgIC0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCityZXN4MTI3IHJlc2NhbGUgICAxLjA1ICAgMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gxMjggcmVzY2FsZSAgIDEuMDUgIC0zIC0+ICAxLjA1MAorcmVzeDEyOSByZXNjYWxlICAgMS4wNSAgLTIgLT4gIDEuMDUKK3Jlc3gxMzAgcmVzY2FsZSAgIDEuMDUgIC0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCityZXN4MTMxIHJlc2NhbGUgICAxLjA1ICAgMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gxMzIgcmVzY2FsZSAgIDEuMDYgIC0zIC0+ICAxLjA2MAorcmVzeDEzMyByZXNjYWxlICAgMS4wNiAgLTIgLT4gIDEuMDYKK3Jlc3gxMzQgcmVzY2FsZSAgIDEuMDYgIC0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCityZXN4MTM1IHJlc2NhbGUgICAxLjA2ICAgMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDE0MCByZXNjYWxlICAgLTEwICAgIC0yICAtPiAgLTEwLjAwCityZXN4MTQxIHJlc2NhbGUgICArMSAgICAgLTIgIC0+ICAxLjAwCityZXN4MTQyIHJlc2NhbGUgICArMTAgICAgLTIgIC0+ICAxMC4wMAorcmVzeDE0MyByZXNjYWxlICAgMUUrMTAgIC0yICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4MTQ0IHJlc2NhbGUgICAxRS0xMCAgLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAorcmVzeDE0NSByZXNjYWxlICAgMUUtMyAgIC0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gxNDYgcmVzY2FsZSAgIDFFLTIgICAtMiAgLT4gIDAuMDEKK3Jlc3gxNDcgcmVzY2FsZSAgIDFFLTEgICAtMiAgLT4gIDAuMTAKK3Jlc3gxNDggcmVzY2FsZSAgIDBFLTEwICAtMiAgLT4gIDAuMDAKKworcmVzeDE1MCByZXNjYWxlICAgMS4wNjAwIC01IC0+ICAxLjA2MDAwCityZXN4MTUxIHJlc2NhbGUgICAxLjA2MDAgLTQgLT4gIDEuMDYwMAorcmVzeDE1MiByZXNjYWxlICAgMS4wNjAwIC0zIC0+ICAxLjA2MCBSb3VuZGVkCityZXN4MTUzIHJlc2NhbGUgICAxLjA2MDAgLTIgLT4gIDEuMDYgUm91bmRlZAorcmVzeDE1NCByZXNjYWxlICAgMS4wNjAwIC0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCityZXN4MTU1IHJlc2NhbGUgICAxLjA2MDAgIDAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKKy0tICt2ZSBleHBvbmVudHMgLi4KK3Jlc3gyMDEgcmVzY2FsZSAgIC0xICAgKzAgLT4gIC0xCityZXN4MjAyIHJlc2NhbGUgICAtMSAgICsxIC0+ICAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMDMgcmVzY2FsZSAgIC0xICAgKzIgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDIwNCByZXNjYWxlICAgIDAgICArMCAtPiAgMAorcmVzeDIwNSByZXNjYWxlICAgIDAgICArMSAtPiAgMEUrMQorcmVzeDIwNiByZXNjYWxlICAgIDAgICArMiAtPiAgMEUrMgorcmVzeDIwNyByZXNjYWxlICAgKzEgICArMCAtPiAgMQorcmVzeDIwOCByZXNjYWxlICAgKzEgICArMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMDkgcmVzY2FsZSAgICsxICAgKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3gyMjAgcmVzY2FsZSAgIDEuMDQgKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCityZXN4MjIxIHJlc2NhbGUgICAxLjA0ICsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDIyMiByZXNjYWxlICAgMS4wNCArMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMjMgcmVzY2FsZSAgIDEuMDQgKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCityZXN4MjI0IHJlc2NhbGUgICAxLjA1ICszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcmVzeDIyNSByZXNjYWxlICAgMS4wNSArMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMjYgcmVzY2FsZSAgIDEuMDUgKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MjI3IHJlc2NhbGUgICAxLjA1ICswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorcmVzeDIyOCByZXNjYWxlICAgMS4wNSArMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMjkgcmVzY2FsZSAgIDEuMDUgKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MjMwIHJlc2NhbGUgICAxLjA1ICsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDIzMSByZXNjYWxlICAgMS4wNSArMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMzIgcmVzY2FsZSAgIDEuMDYgKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCityZXN4MjMzIHJlc2NhbGUgICAxLjA2ICsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDIzNCByZXNjYWxlICAgMS4wNiArMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMzUgcmVzY2FsZSAgIDEuMDYgKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3gyNDAgcmVzY2FsZSAgIC0xMCAgICsxICAtPiAgLTFFKzEgUm91bmRlZAorcmVzeDI0MSByZXNjYWxlICAgKzEgICAgKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDI0MiByZXNjYWxlICAgKzEwICAgKzEgIC0+ICAxRSsxIFJvdW5kZWQKK3Jlc3gyNDMgcmVzY2FsZSAgIDFFKzEgICsxICAtPiAgMUUrMSAgICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCityZXN4MjQ0IHJlc2NhbGUgICAxRSsyICArMSAgLT4gIDEuMEUrMiAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcmVzeDI0NSByZXNjYWxlICAgMUUrMyAgKzEgIC0+ICAxLjAwRSszICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3Jlc3gyNDYgcmVzY2FsZSAgIDFFKzQgICsxICAtPiAgMS4wMDBFKzQgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCityZXN4MjQ3IHJlc2NhbGUgICAxRSs1ICArMSAgLT4gIDEuMDAwMEUrNSAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcmVzeDI0OCByZXNjYWxlICAgMUUrNiAgKzEgIC0+ICAxLjAwMDAwRSs2ICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3Jlc3gyNDkgcmVzY2FsZSAgIDFFKzcgICsxICAtPiAgMS4wMDAwMDBFKzcgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCityZXN4MjUwIHJlc2NhbGUgICAxRSs4ICArMSAgLT4gIDEuMDAwMDAwMEUrOCAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcmVzeDI1MSByZXNjYWxlICAgMUUrOSAgKzEgIC0+ICAxLjAwMDAwMDAwRSs5IC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKKy0tIG5leHQgb25lIHRyaWVzIHRvIGFkZCA5IHplcm9zCityZXN4MjUyIHJlc2NhbGUgICAxRSsxMCArMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDI1MyByZXNjYWxlICAgMUUtMTAgKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDI1NCByZXNjYWxlICAgMUUtMiAgKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDI1NSByZXNjYWxlICAgMEUtMTAgKzEgIC0+ICAwRSsxCityZXN4MjU2IHJlc2NhbGUgIC0wRS0xMCArMSAgLT4gLTBFKzEKK3Jlc3gyNTcgcmVzY2FsZSAgLTBFLTEgICsxICAtPiAtMEUrMQorcmVzeDI1OCByZXNjYWxlICAtMCAgICAgKzEgIC0+IC0wRSsxCityZXN4MjU5IHJlc2NhbGUgIC0wRSsxICArMSAgLT4gLTBFKzEKKworcmVzeDI2MCByZXNjYWxlICAgLTEwICAgKzIgIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyNjEgcmVzY2FsZSAgICsxICAgICsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyNjIgcmVzY2FsZSAgICsxMCAgICsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyNjMgcmVzY2FsZSAgIDFFKzEgICsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyNjQgcmVzY2FsZSAgIDFFKzIgICsyICAtPiAgMUUrMgorcmVzeDI2NSByZXNjYWxlICAgMUUrMyAgKzIgIC0+ICAxLjBFKzMKK3Jlc3gyNjYgcmVzY2FsZSAgIDFFKzQgICsyICAtPiAgMS4wMEUrNAorcmVzeDI2NyByZXNjYWxlICAgMUUrNSAgKzIgIC0+ICAxLjAwMEUrNQorcmVzeDI2OCByZXNjYWxlICAgMUUrNiAgKzIgIC0+ICAxLjAwMDBFKzYKK3Jlc3gyNjkgcmVzY2FsZSAgIDFFKzcgICsyICAtPiAgMS4wMDAwMEUrNworcmVzeDI3MCByZXNjYWxlICAgMUUrOCAgKzIgIC0+ICAxLjAwMDAwMEUrOAorcmVzeDI3MSByZXNjYWxlICAgMUUrOSAgKzIgIC0+ICAxLjAwMDAwMDBFKzkKK3Jlc3gyNzIgcmVzY2FsZSAgIDFFKzEwICsyICAtPiAgMS4wMDAwMDAwMEUrMTAKK3Jlc3gyNzMgcmVzY2FsZSAgIDFFLTEwICsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyNzQgcmVzY2FsZSAgIDFFLTIgICsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyNzUgcmVzY2FsZSAgIDBFLTEwICsyICAtPiAgMEUrMgorCityZXN4MjgwIHJlc2NhbGUgICAtMTAgICArMyAgLT4gIC0wRSszIEluZXhhY3QgUm91bmRlZAorcmVzeDI4MSByZXNjYWxlICAgKzEgICAgKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcmVzeDI4MiByZXNjYWxlICAgKzEwICAgKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcmVzeDI4MyByZXNjYWxlICAgMUUrMSAgKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcmVzeDI4NCByZXNjYWxlICAgMUUrMiAgKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcmVzeDI4NSByZXNjYWxlICAgMUUrMyAgKzMgIC0+ICAxRSszCityZXN4Mjg2IHJlc2NhbGUgICAxRSs0ICArMyAgLT4gIDEuMEUrNAorcmVzeDI4NyByZXNjYWxlICAgMUUrNSAgKzMgIC0+ICAxLjAwRSs1CityZXN4Mjg4IHJlc2NhbGUgICAxRSs2ICArMyAgLT4gIDEuMDAwRSs2CityZXN4Mjg5IHJlc2NhbGUgICAxRSs3ICArMyAgLT4gIDEuMDAwMEUrNworcmVzeDI5MCByZXNjYWxlICAgMUUrOCAgKzMgIC0+ICAxLjAwMDAwRSs4CityZXN4MjkxIHJlc2NhbGUgICAxRSs5ICArMyAgLT4gIDEuMDAwMDAwRSs5CityZXN4MjkyIHJlc2NhbGUgICAxRSsxMCArMyAgLT4gIDEuMDAwMDAwMEUrMTAKK3Jlc3gyOTMgcmVzY2FsZSAgIDFFLTEwICszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyOTQgcmVzY2FsZSAgIDFFLTIgICszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyOTUgcmVzY2FsZSAgIDBFLTEwICszICAtPiAgMEUrMworCistLSByb3VuZCB1cCBmcm9tIGJlbG93IFtzaWduIHdyb25nIGluIEpJVCBjb21waWxlciBvbmNlXQorcmVzeDMwMCByZXNjYWxlICAgMC4wMDc4IC01IC0+ICAwLjAwNzgwCityZXN4MzAxIHJlc2NhbGUgICAwLjAwNzggLTQgLT4gIDAuMDA3OAorcmVzeDMwMiByZXNjYWxlICAgMC4wMDc4IC0zIC0+ICAwLjAwOCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMDMgcmVzY2FsZSAgIDAuMDA3OCAtMiAtPiAgMC4wMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMDQgcmVzY2FsZSAgIDAuMDA3OCAtMSAtPiAgMC4wIEluZXhhY3QgUm91bmRlZAorcmVzeDMwNSByZXNjYWxlICAgMC4wMDc4ICAwIC0+ICAwIEluZXhhY3QgUm91bmRlZAorcmVzeDMwNiByZXNjYWxlICAgMC4wMDc4ICsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDMwNyByZXNjYWxlICAgMC4wMDc4ICsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCityZXN4MzEwIHJlc2NhbGUgIC0wLjAwNzggLTUgLT4gLTAuMDA3ODAKK3Jlc3gzMTEgcmVzY2FsZSAgLTAuMDA3OCAtNCAtPiAtMC4wMDc4CityZXN4MzEyIHJlc2NhbGUgIC0wLjAwNzggLTMgLT4gLTAuMDA4IEluZXhhY3QgUm91bmRlZAorcmVzeDMxMyByZXNjYWxlICAtMC4wMDc4IC0yIC0+IC0wLjAxIEluZXhhY3QgUm91bmRlZAorcmVzeDMxNCByZXNjYWxlICAtMC4wMDc4IC0xIC0+IC0wLjAgSW5leGFjdCBSb3VuZGVkCityZXN4MzE1IHJlc2NhbGUgIC0wLjAwNzggIDAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCityZXN4MzE2IHJlc2NhbGUgIC0wLjAwNzggKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MzE3IHJlc2NhbGUgIC0wLjAwNzggKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3gzMjAgcmVzY2FsZSAgIDAuMDc4IC01IC0+ICAwLjA3ODAwCityZXN4MzIxIHJlc2NhbGUgICAwLjA3OCAtNCAtPiAgMC4wNzgwCityZXN4MzIyIHJlc2NhbGUgICAwLjA3OCAtMyAtPiAgMC4wNzgKK3Jlc3gzMjMgcmVzY2FsZSAgIDAuMDc4IC0yIC0+ICAwLjA4IEluZXhhY3QgUm91bmRlZAorcmVzeDMyNCByZXNjYWxlICAgMC4wNzggLTEgLT4gIDAuMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMjUgcmVzY2FsZSAgIDAuMDc4ICAwIC0+ICAwIEluZXhhY3QgUm91bmRlZAorcmVzeDMyNiByZXNjYWxlICAgMC4wNzggKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MzI3IHJlc2NhbGUgICAwLjA3OCArMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDMzMCByZXNjYWxlICAtMC4wNzggLTUgLT4gLTAuMDc4MDAKK3Jlc3gzMzEgcmVzY2FsZSAgLTAuMDc4IC00IC0+IC0wLjA3ODAKK3Jlc3gzMzIgcmVzY2FsZSAgLTAuMDc4IC0zIC0+IC0wLjA3OAorcmVzeDMzMyByZXNjYWxlICAtMC4wNzggLTIgLT4gLTAuMDggSW5leGFjdCBSb3VuZGVkCityZXN4MzM0IHJlc2NhbGUgIC0wLjA3OCAtMSAtPiAtMC4xIEluZXhhY3QgUm91bmRlZAorcmVzeDMzNSByZXNjYWxlICAtMC4wNzggIDAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCityZXN4MzM2IHJlc2NhbGUgIC0wLjA3OCArMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMzcgcmVzY2FsZSAgLTAuMDc4ICsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCityZXN4MzQwIHJlc2NhbGUgICAwLjc4IC01IC0+ICAwLjc4MDAwCityZXN4MzQxIHJlc2NhbGUgICAwLjc4IC00IC0+ICAwLjc4MDAKK3Jlc3gzNDIgcmVzY2FsZSAgIDAuNzggLTMgLT4gIDAuNzgwCityZXN4MzQzIHJlc2NhbGUgICAwLjc4IC0yIC0+ICAwLjc4CityZXN4MzQ0IHJlc2NhbGUgICAwLjc4IC0xIC0+ICAwLjggSW5leGFjdCBSb3VuZGVkCityZXN4MzQ1IHJlc2NhbGUgICAwLjc4ICAwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorcmVzeDM0NiByZXNjYWxlICAgMC43OCArMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzNDcgcmVzY2FsZSAgIDAuNzggKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3gzNTAgcmVzY2FsZSAgLTAuNzggLTUgLT4gLTAuNzgwMDAKK3Jlc3gzNTEgcmVzY2FsZSAgLTAuNzggLTQgLT4gLTAuNzgwMAorcmVzeDM1MiByZXNjYWxlICAtMC43OCAtMyAtPiAtMC43ODAKK3Jlc3gzNTMgcmVzY2FsZSAgLTAuNzggLTIgLT4gLTAuNzgKK3Jlc3gzNTQgcmVzY2FsZSAgLTAuNzggLTEgLT4gLTAuOCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzNTUgcmVzY2FsZSAgLTAuNzggIDAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCityZXN4MzU2IHJlc2NhbGUgIC0wLjc4ICsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDM1NyByZXNjYWxlICAtMC43OCArMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDM2MCByZXNjYWxlICAgNy44IC01IC0+ICA3LjgwMDAwCityZXN4MzYxIHJlc2NhbGUgICA3LjggLTQgLT4gIDcuODAwMAorcmVzeDM2MiByZXNjYWxlICAgNy44IC0zIC0+ICA3LjgwMAorcmVzeDM2MyByZXNjYWxlICAgNy44IC0yIC0+ICA3LjgwCityZXN4MzY0IHJlc2NhbGUgICA3LjggLTEgLT4gIDcuOAorcmVzeDM2NSByZXNjYWxlICAgNy44ICAwIC0+ICA4IEluZXhhY3QgUm91bmRlZAorcmVzeDM2NiByZXNjYWxlICAgNy44ICsxIC0+ICAxRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDM2NyByZXNjYWxlICAgNy44ICsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDM2OCByZXNjYWxlICAgNy44ICszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorCityZXN4MzcwIHJlc2NhbGUgIC03LjggLTUgLT4gLTcuODAwMDAKK3Jlc3gzNzEgcmVzY2FsZSAgLTcuOCAtNCAtPiAtNy44MDAwCityZXN4MzcyIHJlc2NhbGUgIC03LjggLTMgLT4gLTcuODAwCityZXN4MzczIHJlc2NhbGUgIC03LjggLTIgLT4gLTcuODAKK3Jlc3gzNzQgcmVzY2FsZSAgLTcuOCAtMSAtPiAtNy44CityZXN4Mzc1IHJlc2NhbGUgIC03LjggIDAgLT4gLTggSW5leGFjdCBSb3VuZGVkCityZXN4Mzc2IHJlc2NhbGUgIC03LjggKzEgLT4gLTFFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4Mzc3IHJlc2NhbGUgIC03LjggKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4Mzc4IHJlc2NhbGUgIC03LjggKzMgLT4gLTBFKzMgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgaW5kaXZpZHVhbHMKK3ByZWNpc2lvbjogOQorcmVzeDM4MCByZXNjYWxlICAgMzUyMzY0LjUwNiAtMiAtPiAzNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkCityZXN4MzgxIHJlc2NhbGUgICAzNTIzNjQ1LjA2IC0yIC0+IDM1MjM2NDUuMDYKK3Jlc3gzODIgcmVzY2FsZSAgIDM1MjM2NDUwLjYgLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4MzgzIHJlc2NhbGUgICAzNTIzNjQ1MDYgIC0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDM4NCByZXNjYWxlICAtMzUyMzY0LjUwNiAtMiAtPiAtMzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAorcmVzeDM4NSByZXNjYWxlICAtMzUyMzY0NS4wNiAtMiAtPiAtMzUyMzY0NS4wNgorcmVzeDM4NiByZXNjYWxlICAtMzUyMzY0NTAuNiAtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3gzODcgcmVzY2FsZSAgLTM1MjM2NDUwNiAgLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3JvdW5kaW5nOiBkb3duCityZXN4Mzg5IHJlc2NhbGUgICAzNTIzNjQ1MC42IC0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gPyBzaG91bGQgdGhhdCBvbmUgaW5zdGVhZCBoYXZlIGJlZW46CistLSByZXN4Mzg5IHJlc2NhbGUgICAzNTIzNjQ1MC42IC0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm91bmRpbmc6IGhhbGZfdXAKKworLS0gYW5kIGEgZmV3IG1vcmUgZnJvbSBlLW1haWwgZGlzY3Vzc2lvbnMKK3ByZWNpc2lvbjogNworcmVzeDM5MSByZXNjYWxlICAxMi4zNDU2NyAgLTMgLT4gMTIuMzQ2ICAgSW5leGFjdCBSb3VuZGVkCityZXN4MzkyIHJlc2NhbGUgIDEyMy40NTY3ICAtMyAtPiAxMjMuNDU3ICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzOTMgcmVzY2FsZSAgMTIzNC41NjcgIC0zIC0+IDEyMzQuNTY3CityZXN4Mzk0IHJlc2NhbGUgIDEyMzQ1LjY3ICAtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3gzOTUgcmVzY2FsZSAgMTIzNDU2LjcgIC0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDM5NiByZXNjYWxlICAxMjM0NTY3LiAgLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHNvbWUgOTk5OSByb3VuZC11cCBjYXNlcworcHJlY2lzaW9uOiA5CityZXN4NDAwIHJlc2NhbGUgICA5Ljk5OSAgICAgICAgLTUgIC0+ICA5Ljk5OTAwCityZXN4NDAxIHJlc2NhbGUgICA5Ljk5OSAgICAgICAgLTQgIC0+ICA5Ljk5OTAKK3Jlc3g0MDIgcmVzY2FsZSAgIDkuOTk5ICAgICAgICAtMyAgLT4gIDkuOTk5CityZXN4NDAzIHJlc2NhbGUgICA5Ljk5OSAgICAgICAgLTIgIC0+IDEwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MDQgcmVzY2FsZSAgIDkuOTk5ICAgICAgICAtMSAgLT4gMTAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQwNSByZXNjYWxlICAgOS45OTkgICAgICAgICAwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDA2IHJlc2NhbGUgICA5Ljk5OSAgICAgICAgIDEgIC0+IDFFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MDcgcmVzY2FsZSAgIDkuOTk5ICAgICAgICAgMiAgLT4gMEUrMiAgICAgIEluZXhhY3QgUm91bmRlZAorCityZXN4NDEwIHJlc2NhbGUgICAwLjk5OSAgICAgICAgLTUgIC0+ICAwLjk5OTAwCityZXN4NDExIHJlc2NhbGUgICAwLjk5OSAgICAgICAgLTQgIC0+ICAwLjk5OTAKK3Jlc3g0MTIgcmVzY2FsZSAgIDAuOTk5ICAgICAgICAtMyAgLT4gIDAuOTk5CityZXN4NDEzIHJlc2NhbGUgICAwLjk5OSAgICAgICAgLTIgIC0+ICAxLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MTQgcmVzY2FsZSAgIDAuOTk5ICAgICAgICAtMSAgLT4gIDEuMCAgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQxNSByZXNjYWxlICAgMC45OTkgICAgICAgICAwICAtPiAgMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDE2IHJlc2NhbGUgICAwLjk5OSAgICAgICAgIDEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDQyMCByZXNjYWxlICAgMC4wOTk5ICAgICAgIC01ICAtPiAgMC4wOTk5MAorcmVzeDQyMSByZXNjYWxlICAgMC4wOTk5ICAgICAgIC00ICAtPiAgMC4wOTk5CityZXN4NDIyIHJlc2NhbGUgICAwLjA5OTkgICAgICAgLTMgIC0+ICAwLjEwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MjMgcmVzY2FsZSAgIDAuMDk5OSAgICAgICAtMiAgLT4gIDAuMTAgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQyNCByZXNjYWxlICAgMC4wOTk5ICAgICAgIC0xICAtPiAgMC4xICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDI1IHJlc2NhbGUgICAwLjA5OTkgICAgICAgIDAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MjYgcmVzY2FsZSAgIDAuMDk5OSAgICAgICAgMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCityZXN4NDMwIHJlc2NhbGUgICAwLjAwOTk5ICAgICAgLTUgIC0+ICAwLjAwOTk5CityZXN4NDMxIHJlc2NhbGUgICAwLjAwOTk5ICAgICAgLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MzIgcmVzY2FsZSAgIDAuMDA5OTkgICAgICAtMyAgLT4gIDAuMDEwICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQzMyByZXNjYWxlICAgMC4wMDk5OSAgICAgIC0yICAtPiAgMC4wMSAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDM0IHJlc2NhbGUgICAwLjAwOTk5ICAgICAgLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MzUgcmVzY2FsZSAgIDAuMDA5OTkgICAgICAgMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQzNiByZXNjYWxlICAgMC4wMDk5OSAgICAgICAxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3g0NDAgcmVzY2FsZSAgIDAuMDAwOTk5ICAgICAtNSAgLT4gIDAuMDAxMDAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQ0MSByZXNjYWxlICAgMC4wMDA5OTkgICAgIC00ICAtPiAgMC4wMDEwICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDQyIHJlc2NhbGUgICAwLjAwMDk5OSAgICAgLTMgIC0+ICAwLjAwMSAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NDMgcmVzY2FsZSAgIDAuMDAwOTk5ICAgICAtMiAgLT4gIDAuMDAgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQ0NCByZXNjYWxlICAgMC4wMDA5OTkgICAgIC0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDQ1IHJlc2NhbGUgICAwLjAwMDk5OSAgICAgIDAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NDYgcmVzY2FsZSAgIDAuMDAwOTk5ICAgICAgMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDgKK3Jlc3g0NDkgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMjMgLT4gIE5hTiAgICAgIEludmFsaWRfb3BlcmF0aW9uCityZXN4NDUwIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTIyIC0+ICA5Ljk5OTAwMDBFLTE1CityZXN4NDUxIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTIxIC0+ICA5Ljk5OTAwMEUtMTUKK3Jlc3g0NTIgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMjAgLT4gIDkuOTk5MDBFLTE1CityZXN4NDUzIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTE5IC0+ICA5Ljk5OTBFLTE1CityZXN4NDU0IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTE4IC0+ICA5Ljk5OUUtMTUKK3Jlc3g0NTUgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMTcgLT4gIDEuMDAwRS0xNCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NTYgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMTYgLT4gIDEuMDBFLTE0ICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NTcgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMTUgLT4gIDEuMEUtMTQgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NTggcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMTQgLT4gIDFFLTE0ICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NTkgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMTMgLT4gIDBFLTEzICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjAgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMTIgLT4gIDBFLTEyICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjEgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMTEgLT4gIDBFLTExICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjIgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAtMTAgLT4gIDBFLTEwICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjMgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgLTkgLT4gIDBFLTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjQgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgLTggLT4gIDBFLTggICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjUgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgLTcgLT4gIDBFLTcgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjYgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgLTYgLT4gIDAuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjcgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgLTUgLT4gIDAuMDAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjggcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgLTQgLT4gIDAuMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NjkgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgLTMgLT4gIDAuMDAwICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NzAgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgLTIgLT4gIDAuMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NzEgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgLTEgLT4gIDAuMCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NzIgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgIDAgLT4gIDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NzMgcmVzY2FsZSAgIDkuOTk5RS0xNSAgICAgIDEgLT4gIDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gW2FkZGl0aW9uYWwgdGVzdHMgZm9yICJkb24ndCBmaXQiIGVkZ2UgY2FzZXMgYXJlIGluCistLSBxdWFudGl6ZS5kZWNUZXN0LiAgSGVyZSdzIGEgY3JpdGljYWwgb25lLl0KK3ByZWNpc2lvbjogMworcmVzeDQ4MCByZXNjYWxlICAgMC45OTk5ICAgICAgICAtMyAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCisKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcyBbcmhzIGNoZWNrcyByZW1vdmVkXQorbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorcmVzeDQ4MSByZXNjYWxlIDEyMzQ1Njc4MDAwICszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZAorcmVzeDQ4MiByZXNjYWxlIDEyMzQ1Njc4MDAgICsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorcmVzeDQ4MyByZXNjYWxlIDEyMzQ1Njc4OTAgICsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorcmVzeDQ4NCByZXNjYWxlIDEyMzQ1Njc4OTEgICsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCityZXN4NDg1IHJlc2NhbGUgMTIzNDU2Nzg5MDEgKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCityZXN4NDg2IHJlc2NhbGUgMTIzNDU2Nzg5NiAgKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKKy0tIGEgcG90ZW50aWFsIGRvdWJsZS1yb3VuZAorcmVzeDQ4NyByZXNjYWxlIDEyMzQuOTg3NjQzIC00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0ODggcmVzY2FsZSAxMjM0Ljk4NzY0NyAtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTUKK3Jlc3g0OTEgcmVzY2FsZSAxMjM0NTY3ODAwMCArMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKK3Jlc3g0OTIgcmVzY2FsZSAxMjM0NTY3ODAwICArMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK3Jlc3g0OTMgcmVzY2FsZSAxMjM0NTY3ODkwICArMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK3Jlc3g0OTQgcmVzY2FsZSAxMjM0NTY3ODkxICArMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorcmVzeDQ5NSByZXNjYWxlIDEyMzQ1Njc4OTAxICsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorcmVzeDQ5NiByZXNjYWxlIDEyMzQ1Njc4OTYgICsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCityZXN4NDk3IHJlc2NhbGUgMTIzNC45ODc2NDMgLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorcmVzeDQ5OCByZXNjYWxlIDEyMzQuOTg3NjQ3IC00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gWmVyb3MKK3Jlc3g1MDAgcmVzY2FsZSAgIDAgICAgIDEgLT4gIDBFKzEKK3Jlc3g1MDEgcmVzY2FsZSAgIDAgICAgIDAgLT4gIDAKK3Jlc3g1MDIgcmVzY2FsZSAgIDAgICAgLTEgLT4gIDAuMAorcmVzeDUwMyByZXNjYWxlICAgMC4wICAtMSAtPiAgMC4wCityZXN4NTA0IHJlc2NhbGUgICAwLjAgICAwIC0+ICAwCityZXN4NTA1IHJlc2NhbGUgICAwLjAgICsxIC0+ICAwRSsxCityZXN4NTA2IHJlc2NhbGUgICAwRSsxIC0xIC0+ICAwLjAKK3Jlc3g1MDcgcmVzY2FsZSAgIDBFKzEgIDAgLT4gIDAKK3Jlc3g1MDggcmVzY2FsZSAgIDBFKzEgKzEgLT4gIDBFKzEKK3Jlc3g1MDkgcmVzY2FsZSAgLTAgICAgIDEgLT4gLTBFKzEKK3Jlc3g1MTAgcmVzY2FsZSAgLTAgICAgIDAgLT4gLTAKK3Jlc3g1MTEgcmVzY2FsZSAgLTAgICAgLTEgLT4gLTAuMAorcmVzeDUxMiByZXNjYWxlICAtMC4wICAtMSAtPiAtMC4wCityZXN4NTEzIHJlc2NhbGUgIC0wLjAgICAwIC0+IC0wCityZXN4NTE0IHJlc2NhbGUgIC0wLjAgICsxIC0+IC0wRSsxCityZXN4NTE1IHJlc2NhbGUgIC0wRSsxIC0xIC0+IC0wLjAKK3Jlc3g1MTYgcmVzY2FsZSAgLTBFKzEgIDAgLT4gLTAKK3Jlc3g1MTcgcmVzY2FsZSAgLTBFKzEgKzEgLT4gLTBFKzEKKworLS0gU3VzcGljaW91cyBSSFMgdmFsdWVzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAxNQorcmVzeDUyMCByZXNjYWxlICAgMS4yMzQgICAgOTk5OTk5RSszIC0+IDBFKzk5OTk5OTAwMCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1MjEgcmVzY2FsZSAxMjMuNDU2ICAgIDk5OTk5OUUrMyAtPiAwRSs5OTk5OTkwMDAgSW5leGFjdCBSb3VuZGVkCityZXN4NTIyIHJlc2NhbGUgICAxLjIzNCAgICA5OTk5OTk5OTkgLT4gMEUrOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorcmVzeDUyMyByZXNjYWxlIDEyMy40NTYgICAgOTk5OTk5OTk5IC0+IDBFKzk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1MjQgcmVzY2FsZSAxMjMuNDU2ICAgMTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1MjUgcmVzY2FsZSAxMjMuNDU2ICAxMjM0NTY3ODkwMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIG5leHQgZm91ciBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCityZXN4NTI2IHJlc2NhbGUgICAxLjIzNCAgIC05OTk5OTlFKzMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTI3IHJlc2NhbGUgMTIzLjQ1NiAgIC05OTk5OTlFKzMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTI4IHJlc2NhbGUgICAxLjIzNCAgIC05OTk5OTk5OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTI5IHJlc2NhbGUgMTIzLjQ1NiAgIC05OTk5OTk5OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTMwIHJlc2NhbGUgMTIzLjQ1NiAgLTEwMDAwMDAwMTQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTMxIHJlc2NhbGUgMTIzLjQ1NiAtMTIzNDU2Nzg5MDMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDE1CityZXN4NTMyIHJlc2NhbGUgICAxLjIzNEUrOTk5ICAgIDk5OSAtPiAxRSs5OTkgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NTMzIHJlc2NhbGUgICAxLjIzNEUrOTk4ICAgIDk5OSAtPiAwRSs5OTkgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NTM0IHJlc2NhbGUgICAxLjIzNCAgICAgICAgIDk5OSAtPiAwRSs5OTkgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NTM1IHJlc2NhbGUgICAxLjIzNCAgICAgICAgMTAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1MzYgcmVzY2FsZSAgIDEuMjM0ICAgICAgICA1MDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDUzNyByZXNjYWxlICAgMCAgICAgICAgICAgIC05OTkgLT4gMEUtOTk5CistLSBuZXh0IHR3byBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCityZXN4NTM4IHJlc2NhbGUgICAxLjIzNCAgICAgICAgLTk5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1MzkgcmVzY2FsZSAgIDEuMjM0ICAgICAgIC0xMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU0MCByZXNjYWxlICAgMS4yMzQgICAgICAgLTUwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBbbW9yZSBiZWxvd10KKworLS0gY2hlY2sgYm91bmRzIChsaHMgbWF5YmUgb3V0IG9mIHJhbmdlIGZvciBkZXN0aW5hdGlvbiwgZXRjLikKK3ByZWNpc2lvbjogICAgIDcKK3Jlc3g1NDEgcmVzY2FsZSAgIDFFKzk5OSAgICs5OTkgLT4gMUUrOTk5CityZXN4NTQyIHJlc2NhbGUgICAxRSsxMDAwICArOTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU0MyByZXNjYWxlICAgMUUrOTk5ICArMTAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1NDQgcmVzY2FsZSAgIDFFLTk5OSAgIC05OTkgLT4gMUUtOTk5CityZXN4NTQ1IHJlc2NhbGUgICAxRS0xMDAwICAtOTk5IC0+IDBFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1NDYgcmVzY2FsZSAgIDFFLTk5OSAgLTEwMDAgLT4gMS4wRS05OTkKK3Jlc3g1NDcgcmVzY2FsZSAgIDFFLTEwMDUgIC05OTkgLT4gMEUtOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDU0OCByZXNjYWxlICAgMUUtMTAwNiAgLTk5OSAtPiAwRS05OTkgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NTQ5IHJlc2NhbGUgICAxRS0xMDA3ICAtOTk5IC0+IDBFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1NTAgcmVzY2FsZSAgIDFFLTk5OCAgLTEwMDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uICAtLSB3b24ndCBmaXQKK3Jlc3g1NTEgcmVzY2FsZSAgIDFFLTk5OSAgLTEwMDUgLT4gMS4wMDAwMDBFLTk5OQorcmVzeDU1MiByZXNjYWxlICAgMUUtMTAwMCAtMTAwNSAtPiAxLjAwMDAwRS0xMDAwIFN1Ym5vcm1hbAorcmVzeDU1MyByZXNjYWxlICAgMUUtOTk5ICAtMTAwNiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1NTQgcmVzY2FsZSAgIDFFLTk5OSAgLTEwMDcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSByZWxhdGVkIHN1Ym5vcm1hbCByb3VuZGluZworcmVzeDU1NSByZXNjYWxlICAgMS42NjY2NjZFLTk5OSAgLTEwMDUgLT4gMS42NjY2NjZFLTk5OQorcmVzeDU1NiByZXNjYWxlICAgMS42NjY2NjZFLTEwMDAgLTEwMDUgLT4gMS42NjY2N0UtMTAwMCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcmVzeDU1NyByZXNjYWxlICAgMS42NjY2NjZFLTEwMDEgLTEwMDUgLT4gMS42NjY3RS0xMDAxICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCityZXN4NTU4IHJlc2NhbGUgICAxLjY2NjY2NkUtMTAwMiAtMTAwNSAtPiAxLjY2N0UtMTAwMiAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcmVzeDU1OSByZXNjYWxlICAgMS42NjY2NjZFLTEwMDMgLTEwMDUgLT4gMS42N0UtMTAwMyAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcmVzeDU2MCByZXNjYWxlICAgMS42NjY2NjZFLTEwMDQgLTEwMDUgLT4gMS43RS0xMDA0ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCityZXN4NTYxIHJlc2NhbGUgICAxLjY2NjY2NkUtMTAwNSAtMTAwNSAtPiAyRS0xMDA1ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCityZXN4NTYyIHJlc2NhbGUgICAxLjY2NjY2NkUtMTAwNiAtMTAwNSAtPiAwRS0xMDA1ICAgSW5leGFjdCBSb3VuZGVkCityZXN4NTYzIHJlc2NhbGUgICAxLjY2NjY2NkUtMTAwNyAtMTAwNSAtPiAwRS0xMDA1ICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGZyYWN0aW9uYWwgUkhTLCBzb21lIGdvb2QgYW5kIHNvbWUgYmFkCitwcmVjaXNpb246IDkKK3Jlc3g1NjQgcmVzY2FsZSAgIDIyMiArMi4wICAgICAgICAgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDU2NSByZXNjYWxlICAgMjIyICsyLjAwMDAwMDAwICAgIC0+IDJFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4NTY2IHJlc2NhbGUgICAyMjIgKzIuMDAxMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTY3IHJlc2NhbGUgICAyMjIgKzIuMDAwMDAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTY4IHJlc2NhbGUgICAyMjIgKzIuMDAwMDAwMDAxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTY5IHJlc2NhbGUgICAyMjIgKzIuMDAwMDAwMDAwMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTcwIHJlc2NhbGUgICAyMjIgKzIuMDAwMDAwMDAwMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTcxIHJlc2NhbGUgICAyMjIgKzIuOTk5OTk5OTk5OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTcyIHJlc2NhbGUgICAyMjIgLTIuMDAwMDAwMDAgICAgLT4gMjIyLjAwCityZXN4NTczIHJlc2NhbGUgICAyMjIgLTIuMDAxMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTc0IHJlc2NhbGUgICAyMjIgLTIuMDAwMDAwMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTc1IHJlc2NhbGUgICAyMjIgLTIuMDAwMDAwMDAwMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTc2IHJlc2NhbGUgICAyMjIgLTIuOTk5OTk5OTk5OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFNwZWNpYWxzCityZXN4NTgwIHJlc2NhbGUgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorcmVzeDU4MSByZXNjYWxlICBJbmYgIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU4MiByZXNjYWxlICBJbmYgIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU4MyByZXNjYWxlICBJbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU4NCByZXNjYWxlICBJbmYgICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU4NSByZXNjYWxlICBJbmYgICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU4NiByZXNjYWxlICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK3Jlc3g1ODcgcmVzY2FsZSAtMTAwMCAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1ODggcmVzY2FsZSAtSW5mICAgSW5mICAgLT4gIC1JbmZpbml0eQorcmVzeDU4OSByZXNjYWxlIC0xICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU5MCByZXNjYWxlICAwICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU5MSByZXNjYWxlICAxICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU5MiByZXNjYWxlICAxMDAwICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU5MyByZXNjYWxlICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK3Jlc3g1OTQgcmVzY2FsZSAgSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1OTUgcmVzY2FsZSAtMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworcmVzeDYwMCByZXNjYWxlIC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5CityZXN4NjAxIHJlc2NhbGUgLUluZiAgLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZXN4NjAyIHJlc2NhbGUgLUluZiAgLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZXN4NjAzIHJlc2NhbGUgLUluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZXN4NjA0IHJlc2NhbGUgLUluZiAgIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZXN4NjA1IHJlc2NhbGUgLUluZiAgIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZXN4NjA2IHJlc2NhbGUgLUluZiAgIEluZiAgIC0+ICAtSW5maW5pdHkKK3Jlc3g2MDcgcmVzY2FsZSAtMTAwMCAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2MDggcmVzY2FsZSAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQorcmVzeDYwOSByZXNjYWxlIC0xICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDYxMCByZXNjYWxlICAwICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDYxMSByZXNjYWxlICAxICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDYxMiByZXNjYWxlICAxMDAwIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDYxMyByZXNjYWxlICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK3Jlc3g2MTQgcmVzY2FsZSAtSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2MTUgcmVzY2FsZSAtMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworcmVzeDYyMSByZXNjYWxlICBOYU4gLUluZiAgICAtPiAgTmFOCityZXN4NjIyIHJlc2NhbGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK3Jlc3g2MjMgcmVzY2FsZSAgTmFOIC0xICAgICAgLT4gIE5hTgorcmVzeDYyNCByZXNjYWxlICBOYU4gIDAgICAgICAtPiAgTmFOCityZXN4NjI1IHJlc2NhbGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK3Jlc3g2MjYgcmVzY2FsZSAgTmFOICAxMDAwICAgLT4gIE5hTgorcmVzeDYyNyByZXNjYWxlICBOYU4gIEluZiAgICAtPiAgTmFOCityZXN4NjI4IHJlc2NhbGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK3Jlc3g2MjkgcmVzY2FsZSAtSW5mICBOYU4gICAgLT4gIE5hTgorcmVzeDYzMCByZXNjYWxlIC0xMDAwIE5hTiAgICAtPiAgTmFOCityZXN4NjMxIHJlc2NhbGUgLTEgICAgTmFOICAgIC0+ICBOYU4KK3Jlc3g2MzIgcmVzY2FsZSAgMCAgICBOYU4gICAgLT4gIE5hTgorcmVzeDYzMyByZXNjYWxlICAxICAgLU5hTiAgICAtPiAtTmFOCityZXN4NjM0IHJlc2NhbGUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK3Jlc3g2MzUgcmVzY2FsZSAgSW5mICBOYU4gICAgLT4gIE5hTgorcmVzeDYzNiByZXNjYWxlICBOYU4gLTAgICAgICAtPiAgTmFOCityZXN4NjM3IHJlc2NhbGUgLTAgICAgTmFOICAgIC0+ICBOYU4KKworcmVzeDY0MSByZXNjYWxlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY0MiByZXNjYWxlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY0MyByZXNjYWxlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY0NCByZXNjYWxlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY0NSByZXNjYWxlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY0NiByZXNjYWxlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY0NyByZXNjYWxlIC1zTmFOICBOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY0OCByZXNjYWxlICBzTmFOIC1zTmFOICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY0OSByZXNjYWxlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1MCByZXNjYWxlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1MSByZXNjYWxlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1MiByZXNjYWxlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1MyByZXNjYWxlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1NCByZXNjYWxlICAxICAgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1NSByZXNjYWxlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1NiByZXNjYWxlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1NyByZXNjYWxlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1OCByZXNjYWxlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY1OSByZXNjYWxlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCityZXN4NjYxIHJlc2NhbGUgIE5hTjkgLUluZiAgIC0+ICBOYU45CityZXN4NjYyIHJlc2NhbGUgIE5hTjgxIDkxOSAgIC0+ICBOYU44MQorcmVzeDY2MyByZXNjYWxlICBOYU43MiBJbmYgICAtPiAgTmFONzIKK3Jlc3g2NjQgcmVzY2FsZSAtTmFONjYgTmFONSAgLT4gLU5hTjY2CityZXN4NjY1IHJlc2NhbGUgLUluZiAgIE5hTjQgIC0+ICBOYU40CityZXN4NjY2IHJlc2NhbGUgLTkxOSAgIE5hTjMyIC0+ICBOYU4zMgorcmVzeDY2NyByZXNjYWxlICBJbmYgICBOYU4yICAtPiAgTmFOMgorCityZXN4NjcxIHJlc2NhbGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY3MiByZXNjYWxlIC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NzMgcmVzY2FsZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCityZXN4Njc0IHJlc2NhbGUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY3NSByZXNjYWxlICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NzYgcmVzY2FsZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCityZXN4Njc3IHJlc2NhbGUgIDA4OCAgIC1zTmFOOTEgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY3OCByZXNjYWxlICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NzkgcmVzY2FsZSAgTmFOICAgIHNOYU44NyAgLT4gIE5hTjg3IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworcHJlY2lzaW9uOiA0CittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcmVzeDcxMCByZXNjYWxlICAxLjAwRS05OTkgICAgLTk5OSAgLT4gICAxRS05OTkgICAgUm91bmRlZAorcmVzeDcxMSByZXNjYWxlICAwLjFFLTk5OSAgICAtMTAwMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCityZXN4NzEyIHJlc2NhbGUgIDAuMTBFLTk5OSAgIC0xMDAwICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwgUm91bmRlZAorcmVzeDcxMyByZXNjYWxlICAwLjEwMEUtOTk5ICAtMTAwMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsIFJvdW5kZWQKK3Jlc3g3MTQgcmVzY2FsZSAgMC4wMUUtOTk5ICAgLTEwMDEgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK3Jlc3g3MTUgcmVzY2FsZSAgMC45OTlFLTk5OSAgIC05OTkgIC0+ICAgMUUtOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDcxNiByZXNjYWxlICAwLjA5OUUtOTk5ICAtMTAwMCAgLT4gICAxRS0xMDAwICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorCityZXN4NzE3IHJlc2NhbGUgIDAuMDA5RS05OTkgIC0xMDAxICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCityZXN4NzE4IHJlc2NhbGUgIDAuMDAxRS05OTkgIC0xMDAxICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3MTkgcmVzY2FsZSAgMC4wMDA5RS05OTkgLTEwMDEgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZAorcmVzeDcyMCByZXNjYWxlICAwLjAwMDFFLTk5OSAtMTAwMSAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3g3MzAgcmVzY2FsZSAtMS4wMEUtOTk5ICAgLTk5OSAgLT4gIC0xRS05OTkgICAgIFJvdW5kZWQKK3Jlc3g3MzEgcmVzY2FsZSAtMC4xRS05OTkgICAgLTk5OSAgLT4gIC0wRS05OTkgICAgIFJvdW5kZWQgSW5leGFjdAorcmVzeDczMiByZXNjYWxlIC0wLjEwRS05OTkgICAtOTk5ICAtPiAgLTBFLTk5OSAgICAgUm91bmRlZCBJbmV4YWN0CityZXN4NzMzIHJlc2NhbGUgLTAuMTAwRS05OTkgIC05OTkgIC0+ICAtMEUtOTk5ICAgICBSb3VuZGVkIEluZXhhY3QKK3Jlc3g3MzQgcmVzY2FsZSAtMC4wMUUtOTk5ICAgLTk5OSAgLT4gIC0wRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK3Jlc3g3MzUgcmVzY2FsZSAtMC45OTlFLTk5OSAgLTk5OSAgLT4gIC0xRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDczNiByZXNjYWxlIC0wLjA5OUUtOTk5ICAtOTk5ICAtPiAgLTBFLTk5OSAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NzM3IHJlc2NhbGUgLTAuMDA5RS05OTkgIC05OTkgIC0+ICAtMEUtOTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3MzggcmVzY2FsZSAtMC4wMDFFLTk5OSAgLTk5OSAgLT4gIC0wRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDczOSByZXNjYWxlIC0wLjAwMDFFLTk5OSAtOTk5ICAtPiAgLTBFLTk5OSAgICAgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3g3NDAgcmVzY2FsZSAtMS4wMEUtOTk5ICAgLTEwMDAgLT4gIC0xLjBFLTk5OSAgIFJvdW5kZWQKK3Jlc3g3NDEgcmVzY2FsZSAtMC4xRS05OTkgICAgLTEwMDAgLT4gIC0xRS0xMDAwICAgIFN1Ym5vcm1hbAorcmVzeDc0MiByZXNjYWxlIC0wLjEwRS05OTkgICAtMTAwMCAtPiAgLTFFLTEwMDAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK3Jlc3g3NDMgcmVzY2FsZSAtMC4xMDBFLTk5OSAgLTEwMDAgLT4gIC0xRS0xMDAwICAgIFN1Ym5vcm1hbCBSb3VuZGVkCityZXN4NzQ0IHJlc2NhbGUgLTAuMDFFLTk5OSAgIC0xMDAwIC0+ICAtMEUtMTAwMCAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCityZXN4NzQ1IHJlc2NhbGUgLTAuOTk5RS05OTkgIC0xMDAwIC0+ICAtMS4wRS05OTkgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3NDYgcmVzY2FsZSAtMC4wOTlFLTk5OSAgLTEwMDAgLT4gIC0xRS0xMDAwICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK3Jlc3g3NDcgcmVzY2FsZSAtMC4wMDlFLTk5OSAgLTEwMDAgLT4gIC0wRS0xMDAwICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDc0OCByZXNjYWxlIC0wLjAwMUUtOTk5ICAtMTAwMCAtPiAgLTBFLTEwMDAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NzQ5IHJlc2NhbGUgLTAuMDAwMUUtOTk5IC0xMDAwIC0+ICAtMEUtMTAwMCAgICBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDc1MCByZXNjYWxlIC0xLjAwRS05OTkgICAtMTAwMSAtPiAgLTEuMDBFLTk5OQorcmVzeDc1MSByZXNjYWxlIC0wLjFFLTk5OSAgICAtMTAwMSAtPiAgLTEuMEUtMTAwMCAgU3Vibm9ybWFsCityZXN4NzUyIHJlc2NhbGUgLTAuMTBFLTk5OSAgIC0xMDAxIC0+ICAtMS4wRS0xMDAwICBTdWJub3JtYWwKK3Jlc3g3NTMgcmVzY2FsZSAtMC4xMDBFLTk5OSAgLTEwMDEgLT4gIC0xLjBFLTEwMDAgIFN1Ym5vcm1hbCBSb3VuZGVkCityZXN4NzU0IHJlc2NhbGUgLTAuMDFFLTk5OSAgIC0xMDAxIC0+ICAtMUUtMTAwMSAgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCityZXN4NzU1IHJlc2NhbGUgLTAuOTk5RS05OTkgIC0xMDAxIC0+ICAtMS4wMEUtOTk5ICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3NTYgcmVzY2FsZSAtMC4wOTlFLTk5OSAgLTEwMDEgLT4gIC0xLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK3Jlc3g3NTcgcmVzY2FsZSAtMC4wMDlFLTk5OSAgLTEwMDEgLT4gIC0xRS0xMDAxICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK3Jlc3g3NTggcmVzY2FsZSAtMC4wMDFFLTk5OSAgLTEwMDEgLT4gIC0wRS0xMDAxICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDc1OSByZXNjYWxlIC0wLjAwMDFFLTk5OSAtMTAwMSAtPiAgLTBFLTEwMDEgICAgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3g3NjAgcmVzY2FsZSAtMS4wMEUtOTk5ICAgLTEwMDIgLT4gIC0xLjAwMEUtOTk5CityZXN4NzYxIHJlc2NhbGUgLTAuMUUtOTk5ICAgIC0xMDAyIC0+ICAtMS4wMEUtMTAwMCAgU3Vibm9ybWFsCityZXN4NzYyIHJlc2NhbGUgLTAuMTBFLTk5OSAgIC0xMDAyIC0+ICAtMS4wMEUtMTAwMCAgU3Vibm9ybWFsCityZXN4NzYzIHJlc2NhbGUgLTAuMTAwRS05OTkgIC0xMDAyIC0+ICAtMS4wMEUtMTAwMCAgU3Vibm9ybWFsCityZXN4NzY0IHJlc2NhbGUgLTAuMDFFLTk5OSAgIC0xMDAyIC0+ICAtMS4wRS0xMDAxICAgU3Vibm9ybWFsCityZXN4NzY1IHJlc2NhbGUgLTAuOTk5RS05OTkgIC0xMDAyIC0+ICAtOS45OUUtMTAwMCAgU3Vibm9ybWFsCityZXN4NzY2IHJlc2NhbGUgLTAuMDk5RS05OTkgIC0xMDAyIC0+ICAtOS45RS0xMDAxICAgU3Vibm9ybWFsCityZXN4NzY3IHJlc2NhbGUgLTAuMDA5RS05OTkgIC0xMDAyIC0+ICAtOUUtMTAwMiAgICAgU3Vibm9ybWFsCityZXN4NzY4IHJlc2NhbGUgLTAuMDAxRS05OTkgIC0xMDAyIC0+ICAtMUUtMTAwMiAgICAgU3Vibm9ybWFsCityZXN4NzY5IHJlc2NhbGUgLTAuMDAwMUUtOTk5IC0xMDAyIC0+ICAtMEUtMTAwMiAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJocyBtdXN0IGJlIG5vIGxlc3MgdGhhbiBFdGlueQorcmVzeDc3MCByZXNjYWxlIC0xLjAwRS05OTkgICAtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NzcxIHJlc2NhbGUgLTAuMUUtOTk5ICAgIC0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g3NzIgcmVzY2FsZSAtMC4xMEUtOTk5ICAgLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDc3MyByZXNjYWxlIC0wLjEwMEUtOTk5ICAtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4Nzc0IHJlc2NhbGUgLTAuMDFFLTk5OSAgIC0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g3NzUgcmVzY2FsZSAtMC45OTlFLTk5OSAgLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDc3NiByZXNjYWxlIC0wLjA5OUUtOTk5ICAtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4Nzc3IHJlc2NhbGUgLTAuMDA5RS05OTkgIC0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g3NzggcmVzY2FsZSAtMC4wMDFFLTk5OSAgLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDc3OSByZXNjYWxlIC0wLjAwMDFFLTk5OSAtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3ByZWNpc2lvbjogICA5CittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorCistLSBnZXRJbnQgd29ycmllcworcmVzeDgwMSByZXNjYWxlICAgMCAgIDEwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODAyIHJlc2NhbGUgICAwICAtMTAwMDAwMDAwMCAtPiAwRS0xMDAwMDAwMDAwCityZXN4ODAzIHJlc2NhbGUgICAwICAgMjAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MDQgcmVzY2FsZSAgIDAgIC0yMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgwNSByZXNjYWxlICAgMCAgIDMwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODA2IHJlc2NhbGUgICAwICAtMzAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MDcgcmVzY2FsZSAgIDAgICA0MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgwOCByZXNjYWxlICAgMCAgLTQwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODA5IHJlc2NhbGUgICAwICAgNTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MTAgcmVzY2FsZSAgIDAgIC01MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgxMSByZXNjYWxlICAgMCAgIDYwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODEyIHJlc2NhbGUgICAwICAtNjAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MTMgcmVzY2FsZSAgIDAgICA3MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgxNCByZXNjYWxlICAgMCAgLTcwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODE1IHJlc2NhbGUgICAwICAgODAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MTYgcmVzY2FsZSAgIDAgIC04MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgxNyByZXNjYWxlICAgMCAgIDkwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODE4IHJlc2NhbGUgICAwICAtOTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MTkgcmVzY2FsZSAgIDAgICA5OTk5OTk5OTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgyMCByZXNjYWxlICAgMCAgLTk5OTk5OTk5OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODIxIHJlc2NhbGUgICAwICAgMTAwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODIyIHJlc2NhbGUgICAwICAtMTAwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3Jlc3g4MzEgcmVzY2FsZSAgIDEgICAwRS0xICAgICAgIC0+IDEKK3Jlc3g4MzIgcmVzY2FsZSAgIDEgICAwRS0yICAgICAgIC0+IDEKK3Jlc3g4MzMgcmVzY2FsZSAgIDEgICAwRS0zICAgICAgIC0+IDEKK3Jlc3g4MzQgcmVzY2FsZSAgIDEgICAwRS00ICAgICAgIC0+IDEKK3Jlc3g4MzUgcmVzY2FsZSAgIDEgICAwRS0xMDAgICAgIC0+IDEKK3Jlc3g4MzYgcmVzY2FsZSAgIDEgICAwRS0xMDAwMDAgIC0+IDEKK3Jlc3g4MzcgcmVzY2FsZSAgIDEgICAwRSsxMDAgICAgIC0+IDEKK3Jlc3g4MzggcmVzY2FsZSAgIDEgICAwRSsxMDAwMDAgIC0+IDEKKworcmVzeDg0MSByZXNjYWxlICAgMCAgIDVFLTEwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODQyIHJlc2NhbGUgICAwICAgNUUtMTAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4NDMgcmVzY2FsZSAgIDAgICAgOTk5OTk5OTk5IC0+IDBFKzk5OTk5OTk5OQorcmVzeDg0NCByZXNjYWxlICAgMCAgIDEwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODQ1IHJlc2NhbGUgICAwICAgLTk5OTk5OTk5OSAtPiAwRS05OTk5OTk5OTkKK3Jlc3g4NDYgcmVzY2FsZSAgIDAgIC0xMDAwMDAwMDAwIC0+IDBFLTEwMDAwMDAwMDAKK3Jlc3g4NDcgcmVzY2FsZSAgIDAgIC0xMDAwMDAwMDAxIC0+IDBFLTEwMDAwMDAwMDEKK3Jlc3g4NDggcmVzY2FsZSAgIDAgIC0xMDAwMDAwMDAyIC0+IDBFLTEwMDAwMDAwMDIKK3Jlc3g4NDkgcmVzY2FsZSAgIDAgIC0xMDAwMDAwMDAzIC0+IDBFLTEwMDAwMDAwMDMKK3Jlc3g4NTAgcmVzY2FsZSAgIDAgIC0xMDAwMDAwMDA0IC0+IDBFLTEwMDAwMDAwMDQKK3Jlc3g4NTEgcmVzY2FsZSAgIDAgIC0xMDAwMDAwMDA1IC0+IDBFLTEwMDAwMDAwMDUKK3Jlc3g4NTIgcmVzY2FsZSAgIDAgIC0xMDAwMDAwMDA2IC0+IDBFLTEwMDAwMDAwMDYKK3Jlc3g4NTMgcmVzY2FsZSAgIDAgIC0xMDAwMDAwMDA3IC0+IDBFLTEwMDAwMDAwMDcKK3Jlc3g4NTQgcmVzY2FsZSAgIDAgIC0xMDAwMDAwMDA4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityZXN4ODYxIHJlc2NhbGUgICAxICArMjE0NzQ4MzY0OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4NjIgcmVzY2FsZSAgIDEgICsyMTQ3NDgzNjQ4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDg2MyByZXNjYWxlICAgMSAgKzIxNDc0ODM2NDcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODY0IHJlc2NhbGUgICAxICAtMjE0NzQ4MzY0NyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4NjUgcmVzY2FsZSAgIDEgIC0yMTQ3NDgzNjQ4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDg2NiByZXNjYWxlICAgMSAgLTIxNDc0ODM2NDkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK3JlczkwMCByZXNjYWxlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzOTAxIHJlc2NhbGUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JvdGF0ZS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yb3RhdGUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWFkZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yb3RhdGUuZGVjVGVzdApAQCAtMCwwICsxLDI0NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSByb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaworcm90eDAwMSByb3RhdGUgICAgICAgICAgMCAgICAwICAtPiAgMAorcm90eDAwMiByb3RhdGUgICAgICAgICAgMCAgICAyICAtPiAgMAorcm90eDAwMyByb3RhdGUgICAgICAgICAgMSAgICAyICAtPiAgMTAwCityb3R4MDA0IHJvdGF0ZSAgICAgICAgIDM0ICAgIDggIC0+ICA0MDAwMDAwMDMKK3JvdHgwMDUgcm90YXRlICAgICAgICAgIDEgICAgOSAgLT4gIDEKK3JvdHgwMDYgcm90YXRlICAgICAgICAgIDEgICAtMSAgLT4gIDEwMDAwMDAwMAorcm90eDAwNyByb3RhdGUgIDEyMzQ1Njc4OSAgIC0xICAtPiAgOTEyMzQ1Njc4Cityb3R4MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgLTggIC0+ICAyMzQ1Njc4OTEKK3JvdHgwMDkgcm90YXRlICAxMjM0NTY3ODkgICAtOSAgLT4gIDEyMzQ1Njc4OQorcm90eDAxMCByb3RhdGUgICAgICAgICAgMCAgIC0yICAtPiAgMAorCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyCityb3R4MDExIHJvdGF0ZSAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDEyIHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDEzIHJvdGF0ZSAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE0IHJvdGF0ZSAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE1IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE3IHJvdGF0ZSAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDE4IHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCityb3R4MDIwIHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDIxIHJvdGF0ZSAgICAgICAgMSAgICAtMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDIyIHJvdGF0ZSAgICAgICAgMSAgICAgMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4MDIzIHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZ1bGwgcGF0dGVybgorcm90eDAzMCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtOSAgIC0+IDEyMzQ1Njc4OQorcm90eDAzMSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtOCAgIC0+IDIzNDU2Nzg5MQorcm90eDAzMiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNyAgIC0+IDM0NTY3ODkxMgorcm90eDAzMyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNiAgIC0+IDQ1Njc4OTEyMworcm90eDAzNCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNSAgIC0+IDU2Nzg5MTIzNAorcm90eDAzNSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNCAgIC0+IDY3ODkxMjM0NQorcm90eDAzNiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMyAgIC0+IDc4OTEyMzQ1Ngorcm90eDAzNyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMiAgIC0+IDg5MTIzNDU2Nworcm90eDAzOCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMSAgIC0+IDkxMjM0NTY3OAorcm90eDAzOSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OQorcm90eDA0MCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OQorcm90eDA0MSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MQorcm90eDA0MiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMiAgIC0+IDM0NTY3ODkxMgorcm90eDA0MyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMyAgIC0+IDQ1Njc4OTEyMworcm90eDA0NCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNCAgIC0+IDU2Nzg5MTIzNAorcm90eDA0NSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNSAgIC0+IDY3ODkxMjM0NQorcm90eDA0NiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNiAgIC0+IDc4OTEyMzQ1Ngorcm90eDA0NyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNyAgIC0+IDg5MTIzNDU2Nworcm90eDA0OCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArOCAgIC0+IDkxMjM0NTY3OAorcm90eDA0OSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArOSAgIC0+IDEyMzQ1Njc4OQorCistLSB6ZXJvcworcm90eDA2MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTAKK3JvdHgwNjEgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwCityb3R4MDYyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMAorcm90eDA2MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDAKK3JvdHgwNjQgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwCityb3R4MDY1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMAorcm90eDA2NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTAKK3JvdHgwNjcgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwCityb3R4MDY4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMAorcm90eDA2OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDAKK3JvdHgwNzAgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwCityb3R4MDcxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMAorCistLSBObWF4LCBObWluLCBOdGlueQorcm90eDE0MSByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IDkuOTk5OTk5OTlFKzk5OQorcm90eDE0MiByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IDkuOTk5OTk5OTlFKzk5OQorcm90eDE0MyByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDEgIC0+IDkuOTk5OTk5OTlFKzk5OQorcm90eDE0NCByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IDkuOTk5OTk5OTlFKzk5OQorcm90eDE0NSByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDBFLTk5MQorcm90eDE0NiByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgLTggIC0+IDEuMEUtOTk4Cityb3R4MTQ3IHJvdGF0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gMS4wRS05OTgKK3JvdHgxNDggcm90YXRlICAxRS05OTkgICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTEKK3JvdHgxNTEgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAxLjAwMDAwMDBFLTEwMDAKK3JvdHgxNTIgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAxRS0xMDA3Cityb3R4MTUzIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMUUtMTAwNworcm90eDE1NCByb3RhdGUgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDEuMDAwMDAwMEUtMTAwMAorcm90eDE1NSByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDkuMDAwMDAwMEUtMTAwMAorcm90eDE1NiByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDlFLTEwMDcKK3JvdHgxNTcgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiA5RS0xMDA3Cityb3R4MTU4IHJvdGF0ZSAgOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gOS4wMDAwMDAwRS0xMDAwCityb3R4MTYwIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMEUtOTk5Cityb3R4MTYxIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gMS4wRS0xMDA2Cityb3R4MTYyIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gMS4wRS0xMDA2Cityb3R4MTYzIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTk5CistLSAgbmVnYXRpdmVzCityb3R4MTcxIHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gLTkuOTk5OTk5OTlFKzk5OQorcm90eDE3MiByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IC05Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNzMgcm90YXRlIC05Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiAtOS45OTk5OTk5OUUrOTk5Cityb3R4MTc0IHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gLTkuOTk5OTk5OTlFKzk5OQorcm90eDE3NSByb3RhdGUgLTFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwRS05OTEKK3JvdHgxNzYgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgIC04ICAtPiAtMS4wRS05OTgKK3JvdHgxNzcgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgICAxICAtPiAtMS4wRS05OTgKK3JvdHgxNzggcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTkxCityb3R4MTgxIHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTEuMDAwMDAwMEUtMTAwMAorcm90eDE4MiByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC0xRS0xMDA3Cityb3R4MTgzIHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTFFLTEwMDcKK3JvdHgxODQgcm90YXRlIC0xLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtMS4wMDAwMDAwRS0xMDAwCityb3R4MTg1IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTkuMDAwMDAwMEUtMTAwMAorcm90eDE4NiByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC05RS0xMDA3Cityb3R4MTg3IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTlFLTEwMDcKK3JvdHgxODggcm90YXRlIC05LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtOS4wMDAwMDAwRS0xMDAwCityb3R4MTkwIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDBFLTk5OQorcm90eDE5MSByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IC0xLjBFLTEwMDYKK3JvdHgxOTIgcm90YXRlIC0xRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAtMS4wRS0xMDA2Cityb3R4MTkzIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5OQorCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCityb3R4MjAxIHJvdGF0ZSAgICAgICAgIC0wICAgIDAgIC0+ICAtMAorcm90eDIwMiByb3RhdGUgICAgICAgICAtMCAgICAyICAtPiAgLTAKK3JvdHgyMDMgcm90YXRlICAgICAgICAgLTEgICAgMiAgLT4gIC0xMDAKK3JvdHgyMDQgcm90YXRlICAgICAgICAgLTEgICAgOCAgLT4gIC0xMDAwMDAwMDAKK3JvdHgyMDUgcm90YXRlICAgICAgICAgLTEgICAgOSAgLT4gIC0xCityb3R4MjA2IHJvdGF0ZSAgICAgICAgIC0xICAgLTEgIC0+ICAtMTAwMDAwMDAwCityb3R4MjA3IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTEgIC0+ICAtOTEyMzQ1Njc4Cityb3R4MjA4IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTggIC0+ICAtMjM0NTY3ODkxCityb3R4MjA5IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTkgIC0+ICAtMTIzNDU2Nzg5Cityb3R4MjEwIHJvdGF0ZSAgICAgICAgIC0wICAgLTIgIC0+ICAtMAorCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAorcm90eDc4MSByb3RhdGUgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorcm90eDc4MiByb3RhdGUgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorcm90eDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorcm90eDc4NCByb3RhdGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorcm90eDc4NSByb3RhdGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorcm90eDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQorcm90eDc4NyByb3RhdGUgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc4OCByb3RhdGUgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5MCByb3RhdGUgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5MSByb3RhdGUgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5MyByb3RhdGUgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDc5NCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityb3R4ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODAxIHJvdGF0ZSAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK3JvdHg4MDIgcm90YXRlICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQorcm90eDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5Cityb3R4ODA0IHJvdGF0ZSAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK3JvdHg4MDUgcm90YXRlICBJbmYgICAxICAgICAtPiBJbmZpbml0eQorcm90eDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5Cityb3R4ODA3IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODA4IHJvdGF0ZSAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODEwIHJvdGF0ZSAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODExIHJvdGF0ZSAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODEzIHJvdGF0ZSAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODE0IHJvdGF0ZSAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3JvdHg4MjEgcm90YXRlICBOYU4gLUluZiAgICAtPiAgTmFOCityb3R4ODIyIHJvdGF0ZSAgTmFOIC0xMDAwICAgLT4gIE5hTgorcm90eDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK3JvdHg4MjQgcm90YXRlICBOYU4gLTAgICAgICAtPiAgTmFOCityb3R4ODI1IHJvdGF0ZSAgTmFOICAwICAgICAgLT4gIE5hTgorcm90eDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK3JvdHg4Mjcgcm90YXRlICBOYU4gIDEwMDAgICAtPiAgTmFOCityb3R4ODI4IHJvdGF0ZSAgTmFOICBJbmYgICAgLT4gIE5hTgorcm90eDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzAgcm90YXRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCityb3R4ODMxIHJvdGF0ZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorcm90eDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzMgcm90YXRlIC0wICAgIE5hTiAgICAtPiAgTmFOCityb3R4ODM0IHJvdGF0ZSAgMCAgICBOYU4gICAgLT4gIE5hTgorcm90eDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzYgcm90YXRlICAxMDAwIE5hTiAgICAtPiAgTmFOCityb3R4ODM3IHJvdGF0ZSAgSW5mICBOYU4gICAgLT4gIE5hTgorCisKKworcm90eDg0MSByb3RhdGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDMgcm90YXRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0NCByb3RhdGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDYgcm90YXRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0NyByb3RhdGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDkgcm90YXRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1MCByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTIgcm90YXRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1MyByb3RhdGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTUgcm90YXRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1NiByb3RhdGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTggcm90YXRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1OSByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK3JvdHg4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorcm90eDg2MiByb3RhdGUgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCityb3R4ODYzIHJvdGF0ZSAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK3JvdHg4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorcm90eDg2NSByb3RhdGUgIE5hTjUgICArTmFONiAgIC0+ICBOYU41Cityb3R4ODY2IHJvdGF0ZSAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK3JvdHg4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorcm90eDg2OCByb3RhdGUgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45Cityb3R4ODY5IHJvdGF0ZSAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCityb3R4ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3MiByb3RhdGUgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NzMgcm90YXRlICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3NSByb3RhdGUgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NzYgcm90YXRlICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3OCByb3RhdGUgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4Nzkgcm90YXRlICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg4MSByb3RhdGUgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4ODIgcm90YXRlIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK3JvdHg4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODg0IHJvdGF0ZSAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCityb3R4ODg1IHJvdGF0ZSAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUKK3ByZWNpc2lvbjogNQorcm90eDg4NiByb3RhdGUgIDExIC1zTmFOMTIzNDU2Nzg5MCAtPiAtTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JvdW5kaW5nLmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JvdW5kaW5nLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmMTMyNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcm91bmRpbmcuZGVjVGVzdApAQCAtMCwwICsxLDEzMDMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gcm91bmRpbmcuZGVjVGVzdCAtLSBkZWNpbWFsIHJvdW5kaW5nIG1vZGVzIHRlc3RjYXNlcyAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGVzZSB0ZXN0cyByZXF1aXJlIHRoYXQgaW1wbGVtZW50YXRpb25zIHRha2UgYWNjb3VudCBvZiByZXNpZHVlcyBpbgorLS0gb3JkZXIgdG8gZ2V0IGNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZSByb3VuZGluZyBtb2Rlcy4gIFJhdGhlciB0aGFuCistLSBzaW5nbGUgcm91bmRpbmcgdGVzdHMgd2UgdGhlcmVmb3JlIG5lZWQgdGVzdHMgZm9yIG1vc3Qgb3BlcmF0b3JzLgorLS0gW1dlIGRvIGFzc3VtZSBhZGQvbWludXMvcGx1cy9zdWJ0cmFjdCBhcmUgY29tbW9uIHBhdGhzLCBob3dldmVyLCBhcworLS0gaXMgcm91bmRpbmcgb2YgbmVnYXRpdmVzIChpZiB0aGUgbGF0dGVyIHdvcmtzIGZvciBhZGRpdGlvbiwgYXNzdW1lIGl0CistLSB3b3JrcyBmb3IgdGhlIG90aGVycywgdG9vKS5dCistLQorLS0gUm91bmQtZm9yLXJlcm91bmQgKDA1VVApIGlzIHRlc3RlZCBhcyBhIHNlcGFyYXRlIGJsb2NrLCBtb3N0bHkgZm9yCistLSAnaGlzdG9yaWNhbCcgcmVhc29ucy4KKy0tCistLSBVbmRlcmZsb3cgU3Vibm9ybWFsIGFuZCBvdmVyZmxvdyBiZWhhdmlvdXJzIGFyZSB0ZXN0ZWQgdW5kZXIgdGhlCistLSBpbmRpdmlkdWFsIG9wZXJhdG9ycy4KKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA1ICAgICAgICAgICAtLSBmb3IgZWFzaWVyIHZpc3VhbCBpbnNwZWN0aW9uCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorCistLSBBZGRpdGlvbiBvcGVyYXRvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcm91bmRpbmc6IGRvd24KKworcmFkeDEwMCAgYWRkIDEyMzQ1IC0wLjEgICAgICAgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityYWR4MTAxICBhZGQgMTIzNDUgLTAuMDEgICAgICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMDIgIGFkZCAxMjM0NSAtMC4wMDEgICAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmFkeDEwMyAgYWRkIDEyMzQ1IC0wLjAwMDAxICAgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityYWR4MTA0ICBhZGQgMTIzNDUgLTAuMDAwMDAxICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMDUgIGFkZCAxMjM0NSAtMC4wMDAwMDAxIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmFkeDEwNiAgYWRkIDEyMzQ1ICAwICAgICAgICAgLT4gMTIzNDUKK3JhZHgxMDcgIGFkZCAxMjM0NSAgMC4wMDAwMDAxIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDEwOCAgYWRkIDEyMzQ1ICAwLjAwMDAwMSAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTA5ICBhZGQgMTIzNDUgIDAuMDAwMDEgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMTAgIGFkZCAxMjM0NSAgMC4wMDAxICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDExMSAgYWRkIDEyMzQ1ICAwLjAwMSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTEyICBhZGQgMTIzNDUgIDAuMDEgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMTMgIGFkZCAxMjM0NSAgMC4xICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityYWR4MTE1ICBhZGQgMTIzNDYgIDAuNDk5OTkgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMTYgIGFkZCAxMjM0NiAgMC41ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDExNyAgYWRkIDEyMzQ2ICAwLjUwMDAxICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3JhZHgxMjAgIGFkZCAxMjM0NSAgMC40ICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDEyMSAgYWRkIDEyMzQ1ICAwLjQ5ICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTIyICBhZGQgMTIzNDUgIDAuNDk5ICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMjMgIGFkZCAxMjM0NSAgMC40OTk5OSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDEyNCAgYWRkIDEyMzQ1ICAwLjUgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTI1ICBhZGQgMTIzNDUgIDAuNTAwMDEgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMjYgIGFkZCAxMjM0NSAgMC41MDAxICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDEyNyAgYWRkIDEyMzQ1ICAwLjUwMSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTI4ICBhZGQgMTIzNDUgIDAuNTEgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMjkgIGFkZCAxMjM0NSAgMC42ICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCisKK3JhZHgxNDAgIGFkZCAxMjM0NSAtMC4xICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE0MSAgYWRkIDEyMzQ1IC0wLjAxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTQyICBhZGQgMTIzNDUgLTAuMDAxICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNDMgIGFkZCAxMjM0NSAtMC4wMDAwMSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE0NCAgYWRkIDEyMzQ1IC0wLjAwMDAwMSAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTQ1ICBhZGQgMTIzNDUgLTAuMDAwMDAwMSAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNDYgIGFkZCAxMjM0NSAgMCAgICAgICAgIC0+IDEyMzQ1CityYWR4MTQ3ICBhZGQgMTIzNDUgIDAuMDAwMDAwMSAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNDggIGFkZCAxMjM0NSAgMC4wMDAwMDEgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE0OSAgYWRkIDEyMzQ1ICAwLjAwMDAxICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTUwICBhZGQgMTIzNDUgIDAuMDAwMSAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNTEgIGFkZCAxMjM0NSAgMC4wMDEgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE1MiAgYWRkIDEyMzQ1ICAwLjAxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTUzICBhZGQgMTIzNDUgIDAuMSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDE1NSAgYWRkIDEyMzQ2ICAwLjQ5OTk5ICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTU2ICBhZGQgMTIzNDYgIDAuNSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNTcgIGFkZCAxMjM0NiAgMC41MDAwMSAgIC0+IDEyMzQ3IEluZXhhY3QgUm91bmRlZAorCityYWR4MTYwICBhZGQgMTIzNDUgIDAuNCAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNjEgIGFkZCAxMjM0NSAgMC40OSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE2MiAgYWRkIDEyMzQ1ICAwLjQ5OSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTYzICBhZGQgMTIzNDUgIDAuNDk5OTkgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNjQgIGFkZCAxMjM0NSAgMC41ICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE2NSAgYWRkIDEyMzQ1ICAwLjUwMDAxICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTY2ICBhZGQgMTIzNDUgIDAuNTAwMSAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNjcgIGFkZCAxMjM0NSAgMC41MDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDE2OCAgYWRkIDEyMzQ1ICAwLjUxICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTY5ICBhZGQgMTIzNDUgIDAuNiAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorCityYWR4MTcwICBhZGQgMTIzNDUgLTAuMSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNzEgIGFkZCAxMjM0NSAtMC4wMSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE3MiAgYWRkIDEyMzQ1IC0wLjAwMSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTczICBhZGQgMTIzNDUgLTAuMDAwMDEgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNzQgIGFkZCAxMjM0NSAtMC4wMDAwMDEgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE3NSAgYWRkIDEyMzQ1IC0wLjAwMDAwMDEgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTc2ICBhZGQgMTIzNDUgIDAgICAgICAgICAtPiAxMjM0NQorcmFkeDE3NyAgYWRkIDEyMzQ1ICAwLjAwMDAwMDEgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTc4ICBhZGQgMTIzNDUgIDAuMDAwMDAxICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNzkgIGFkZCAxMjM0NSAgMC4wMDAwMSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE4MCAgYWRkIDEyMzQ1ICAwLjAwMDEgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTgxICBhZGQgMTIzNDUgIDAuMDAxICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxODIgIGFkZCAxMjM0NSAgMC4wMSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE4MyAgYWRkIDEyMzQ1ICAwLjEgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JhZHgxODUgIGFkZCAxMjM0NiAgMC40OTk5OSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDE4NiAgYWRkIDEyMzQ2ICAwLjUgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTg3ICBhZGQgMTIzNDYgIDAuNTAwMDEgICAtPiAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDE5MCAgYWRkIDEyMzQ1ICAwLjQgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTkxICBhZGQgMTIzNDUgIDAuNDkgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxOTIgIGFkZCAxMjM0NSAgMC40OTkgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE5MyAgYWRkIDEyMzQ1ICAwLjQ5OTk5ICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTk0ICBhZGQgMTIzNDUgIDAuNSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxOTUgIGFkZCAxMjM0NSAgMC41MDAwMSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDE5NiAgYWRkIDEyMzQ1ICAwLjUwMDEgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTk3ICBhZGQgMTIzNDUgIDAuNTAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxOTggIGFkZCAxMjM0NSAgMC41MSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDE5OSAgYWRkIDEyMzQ1ICAwLjYgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCisKK3JhZHgyMDAgIGFkZCAxMjM0NSAtMC4xICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIwMSAgYWRkIDEyMzQ1IC0wLjAxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjAyICBhZGQgMTIzNDUgLTAuMDAxICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMDMgIGFkZCAxMjM0NSAtMC4wMDAwMSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIwNCAgYWRkIDEyMzQ1IC0wLjAwMDAwMSAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjA1ICBhZGQgMTIzNDUgLTAuMDAwMDAwMSAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMDYgIGFkZCAxMjM0NSAgMCAgICAgICAgIC0+IDEyMzQ1CityYWR4MjA3ICBhZGQgMTIzNDUgIDAuMDAwMDAwMSAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMDggIGFkZCAxMjM0NSAgMC4wMDAwMDEgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIwOSAgYWRkIDEyMzQ1ICAwLjAwMDAxICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjEwICBhZGQgMTIzNDUgIDAuMDAwMSAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMTEgIGFkZCAxMjM0NSAgMC4wMDEgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIxMiAgYWRkIDEyMzQ1ICAwLjAxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjEzICBhZGQgMTIzNDUgIDAuMSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDIxNSAgYWRkIDEyMzQ2ICAwLjQ5OTk5ICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjE2ICBhZGQgMTIzNDYgIDAuNSAgICAgICAtPiAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMTcgIGFkZCAxMjM0NiAgMC41MDAwMSAgIC0+IDEyMzQ3IEluZXhhY3QgUm91bmRlZAorCityYWR4MjIwICBhZGQgMTIzNDUgIDAuNCAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMjEgIGFkZCAxMjM0NSAgMC40OSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIyMiAgYWRkIDEyMzQ1ICAwLjQ5OSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjIzICBhZGQgMTIzNDUgIDAuNDk5OTkgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMjQgIGFkZCAxMjM0NSAgMC41ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDIyNSAgYWRkIDEyMzQ1ICAwLjUwMDAxICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjI2ICBhZGQgMTIzNDUgIDAuNTAwMSAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMjcgIGFkZCAxMjM0NSAgMC41MDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDIyOCAgYWRkIDEyMzQ1ICAwLjUxICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjI5ICBhZGQgMTIzNDUgIDAuNiAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IHVwCisKK3JhZHgyMzAgIGFkZCAxMjM0NSAtMC4xICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIzMSAgYWRkIDEyMzQ1IC0wLjAxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjMyICBhZGQgMTIzNDUgLTAuMDAxICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMzMgIGFkZCAxMjM0NSAtMC4wMDAwMSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIzNCAgYWRkIDEyMzQ1IC0wLjAwMDAwMSAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjM1ICBhZGQgMTIzNDUgLTAuMDAwMDAwMSAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMzYgIGFkZCAxMjM0NSAgMCAgICAgICAgIC0+IDEyMzQ1CityYWR4MjM3ICBhZGQgMTIzNDUgIDAuMDAwMDAwMSAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMzggIGFkZCAxMjM0NSAgMC4wMDAwMDEgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDIzOSAgYWRkIDEyMzQ1ICAwLjAwMDAxICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjQwICBhZGQgMTIzNDUgIDAuMDAwMSAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyNDEgIGFkZCAxMjM0NSAgMC4wMDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDI0MiAgYWRkIDEyMzQ1ICAwLjAxICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjQzICBhZGQgMTIzNDUgIDAuMSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDI0NSAgYWRkIDEyMzQ2ICAwLjQ5OTk5ICAgLT4gMTIzNDcgSW5leGFjdCBSb3VuZGVkCityYWR4MjQ2ICBhZGQgMTIzNDYgIDAuNSAgICAgICAtPiAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyNDcgIGFkZCAxMjM0NiAgMC41MDAwMSAgIC0+IDEyMzQ3IEluZXhhY3QgUm91bmRlZAorCityYWR4MjUwICBhZGQgMTIzNDUgIDAuNCAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyNTEgIGFkZCAxMjM0NSAgMC40OSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDI1MiAgYWRkIDEyMzQ1ICAwLjQ5OSAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjUzICBhZGQgMTIzNDUgIDAuNDk5OTkgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyNTQgIGFkZCAxMjM0NSAgMC41ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDI1NSAgYWRkIDEyMzQ1ICAwLjUwMDAxICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjU2ICBhZGQgMTIzNDUgIDAuNTAwMSAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyNTcgIGFkZCAxMjM0NSAgMC41MDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDI1OCAgYWRkIDEyMzQ1ICAwLjUxICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjU5ICBhZGQgMTIzNDUgIDAuNiAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGZsb29yCisKK3JhZHgzMDAgIGFkZCAxMjM0NSAtMC4xICAgICAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmFkeDMwMSAgYWRkIDEyMzQ1IC0wLjAxICAgICAgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityYWR4MzAyICBhZGQgMTIzNDUgLTAuMDAxICAgICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMDMgIGFkZCAxMjM0NSAtMC4wMDAwMSAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmFkeDMwNCAgYWRkIDEyMzQ1IC0wLjAwMDAwMSAgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityYWR4MzA1ICBhZGQgMTIzNDUgLTAuMDAwMDAwMSAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMDYgIGFkZCAxMjM0NSAgMCAgICAgICAgIC0+IDEyMzQ1CityYWR4MzA3ICBhZGQgMTIzNDUgIDAuMDAwMDAwMSAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMDggIGFkZCAxMjM0NSAgMC4wMDAwMDEgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMwOSAgYWRkIDEyMzQ1ICAwLjAwMDAxICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzEwICBhZGQgMTIzNDUgIDAuMDAwMSAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMTEgIGFkZCAxMjM0NSAgMC4wMDEgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMxMiAgYWRkIDEyMzQ1ICAwLjAxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzEzICBhZGQgMTIzNDUgIDAuMSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDMxNSAgYWRkIDEyMzQ2ICAwLjQ5OTk5ICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzE2ICBhZGQgMTIzNDYgIDAuNSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMTcgIGFkZCAxMjM0NiAgMC41MDAwMSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorCityYWR4MzIwICBhZGQgMTIzNDUgIDAuNCAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMjEgIGFkZCAxMjM0NSAgMC40OSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMyMiAgYWRkIDEyMzQ1ICAwLjQ5OSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzIzICBhZGQgMTIzNDUgIDAuNDk5OTkgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMjQgIGFkZCAxMjM0NSAgMC41ICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMyNSAgYWRkIDEyMzQ1ICAwLjUwMDAxICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzI2ICBhZGQgMTIzNDUgIDAuNTAwMSAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMjcgIGFkZCAxMjM0NSAgMC41MDEgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMyOCAgYWRkIDEyMzQ1ICAwLjUxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzI5ICBhZGQgMTIzNDUgIDAuNiAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKKworcmFkeDMzMCAgYWRkIDEyMzQ1IC0wLjEgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzMxICBhZGQgMTIzNDUgLTAuMDEgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMzIgIGFkZCAxMjM0NSAtMC4wMDEgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMzMyAgYWRkIDEyMzQ1IC0wLjAwMDAxICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzM0ICBhZGQgMTIzNDUgLTAuMDAwMDAxICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMzUgIGFkZCAxMjM0NSAtMC4wMDAwMDAxIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMzNiAgYWRkIDEyMzQ1ICAwICAgICAgICAgLT4gMTIzNDUKK3JhZHgzMzcgIGFkZCAxMjM0NSAgMC4wMDAwMDAxIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDMzOCAgYWRkIDEyMzQ1ICAwLjAwMDAwMSAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzM5ICBhZGQgMTIzNDUgIDAuMDAwMDEgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNDAgIGFkZCAxMjM0NSAgMC4wMDAxICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDM0MSAgYWRkIDEyMzQ1ICAwLjAwMSAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzQyICBhZGQgMTIzNDUgIDAuMDEgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNDMgIGFkZCAxMjM0NSAgMC4xICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorCityYWR4MzQ1ICBhZGQgMTIzNDYgIDAuNDk5OTkgICAtPiAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNDYgIGFkZCAxMjM0NiAgMC41ICAgICAgIC0+IDEyMzQ3IEluZXhhY3QgUm91bmRlZAorcmFkeDM0NyAgYWRkIDEyMzQ2ICAwLjUwMDAxICAgLT4gMTIzNDcgSW5leGFjdCBSb3VuZGVkCisKK3JhZHgzNTAgIGFkZCAxMjM0NSAgMC40ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDM1MSAgYWRkIDEyMzQ1ICAwLjQ5ICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzUyICBhZGQgMTIzNDUgIDAuNDk5ICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNTMgIGFkZCAxMjM0NSAgMC40OTk5OSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDM1NCAgYWRkIDEyMzQ1ICAwLjUgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzU1ICBhZGQgMTIzNDUgIDAuNTAwMDEgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNTYgIGFkZCAxMjM0NSAgMC41MDAxICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDM1NyAgYWRkIDEyMzQ1ICAwLjUwMSAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzU4ICBhZGQgMTIzNDUgIDAuNTEgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNTkgIGFkZCAxMjM0NSAgMC42ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZXMuLi4KKworcm91bmRpbmc6IGRvd24KKworcnN1eDEwMCAgYWRkIC0xMjM0NSAtMC4xICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMDEgIGFkZCAtMTIzNDUgLTAuMDEgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTAyICBhZGQgLTEyMzQ1IC0wLjAwMSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDEwMyAgYWRkIC0xMjM0NSAtMC4wMDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMDQgIGFkZCAtMTIzNDUgLTAuMDAwMDAxICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTA1ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMDEgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDEwNiAgYWRkIC0xMjM0NSAgMCAgICAgICAgIC0+IC0xMjM0NQorcnN1eDEwNyAgYWRkIC0xMjM0NSAgMC4wMDAwMDAxIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMDggIGFkZCAtMTIzNDUgIDAuMDAwMDAxICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTA5ICBhZGQgLTEyMzQ1ICAwLjAwMDAxICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDExMCAgYWRkIC0xMjM0NSAgMC4wMDAxICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMTEgIGFkZCAtMTIzNDUgIDAuMDAxICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTEyICBhZGQgLTEyMzQ1ICAwLjAxICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDExMyAgYWRkIC0xMjM0NSAgMC4xICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKKworcnN1eDExNSAgYWRkIC0xMjM0NiAgMC40OTk5OSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMTYgIGFkZCAtMTIzNDYgIDAuNSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTE3ICBhZGQgLTEyMzQ2ICAwLjUwMDAxICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityc3V4MTIwICBhZGQgLTEyMzQ1ICAwLjQgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDEyMSAgYWRkIC0xMjM0NSAgMC40OSAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMjIgIGFkZCAtMTIzNDUgIDAuNDk5ICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTIzICBhZGQgLTEyMzQ1ICAwLjQ5OTk5ICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDEyNCAgYWRkIC0xMjM0NSAgMC41ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMjUgIGFkZCAtMTIzNDUgIDAuNTAwMDEgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTI2ICBhZGQgLTEyMzQ1ICAwLjUwMDEgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDEyNyAgYWRkIC0xMjM0NSAgMC41MDEgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMjggIGFkZCAtMTIzNDUgIDAuNTEgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTI5ICBhZGQgLTEyMzQ1ICAwLjYgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCisKK3JzdXgxNDAgIGFkZCAtMTIzNDUgLTAuMSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTQxICBhZGQgLTEyMzQ1IC0wLjAxICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE0MiAgYWRkIC0xMjM0NSAtMC4wMDEgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNDMgIGFkZCAtMTIzNDUgLTAuMDAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTQ0ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMSAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE0NSAgYWRkIC0xMjM0NSAtMC4wMDAwMDAxIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNDYgIGFkZCAtMTIzNDUgIDAgICAgICAgICAtPiAtMTIzNDUKK3JzdXgxNDcgIGFkZCAtMTIzNDUgIDAuMDAwMDAwMSAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTQ4ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMSAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE0OSAgYWRkIC0xMjM0NSAgMC4wMDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNTAgIGFkZCAtMTIzNDUgIDAuMDAwMSAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTUxICBhZGQgLTEyMzQ1ICAwLjAwMSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE1MiAgYWRkIC0xMjM0NSAgMC4wMSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNTMgIGFkZCAtMTIzNDUgIDAuMSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgxNTUgIGFkZCAtMTIzNDYgIDAuNDk5OTkgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MTU2ICBhZGQgLTEyMzQ2ICAwLjUgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE1NyAgYWRkIC0xMjM0NiAgMC41MDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcnN1eDE2MCAgYWRkIC0xMjM0NSAgMC40ICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNjEgIGFkZCAtMTIzNDUgIDAuNDkgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTYyICBhZGQgLTEyMzQ1ICAwLjQ5OSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE2MyAgYWRkIC0xMjM0NSAgMC40OTk5OSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNjQgIGFkZCAtMTIzNDUgIDAuNSAgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTY1ICBhZGQgLTEyMzQ1ICAwLjUwMDAxICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDE2NiAgYWRkIC0xMjM0NSAgMC41MDAxICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNjcgIGFkZCAtMTIzNDUgIDAuNTAxICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTY4ICBhZGQgLTEyMzQ1ICAwLjUxICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDE2OSAgYWRkIC0xMjM0NSAgMC42ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorCityc3V4MTcwICBhZGQgLTEyMzQ1IC0wLjEgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE3MSAgYWRkIC0xMjM0NSAtMC4wMSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNzIgIGFkZCAtMTIzNDUgLTAuMDAxICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTczICBhZGQgLTEyMzQ1IC0wLjAwMDAxICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE3NCAgYWRkIC0xMjM0NSAtMC4wMDAwMDEgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNzUgIGFkZCAtMTIzNDUgLTAuMDAwMDAwMSAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTc2ICBhZGQgLTEyMzQ1ICAwICAgICAgICAgLT4gLTEyMzQ1Cityc3V4MTc3ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMDEgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE3OCAgYWRkIC0xMjM0NSAgMC4wMDAwMDEgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNzkgIGFkZCAtMTIzNDUgIDAuMDAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTgwICBhZGQgLTEyMzQ1ICAwLjAwMDEgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE4MSAgYWRkIC0xMjM0NSAgMC4wMDEgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxODIgIGFkZCAtMTIzNDUgIDAuMDEgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTgzICBhZGQgLTEyMzQ1ICAwLjEgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityc3V4MTg1ICBhZGQgLTEyMzQ2ICAwLjQ5OTk5ICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDE4NiAgYWRkIC0xMjM0NiAgMC41ICAgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxODcgIGFkZCAtMTIzNDYgIDAuNTAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgxOTAgIGFkZCAtMTIzNDUgIDAuNCAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTkxICBhZGQgLTEyMzQ1ICAwLjQ5ICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE5MiAgYWRkIC0xMjM0NSAgMC40OTkgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxOTMgIGFkZCAtMTIzNDUgIDAuNDk5OTkgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTk0ICBhZGQgLTEyMzQ1ICAwLjUgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDE5NSAgYWRkIC0xMjM0NSAgMC41MDAwMSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxOTYgIGFkZCAtMTIzNDUgIDAuNTAwMSAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTk3ICBhZGQgLTEyMzQ1ICAwLjUwMSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDE5OCAgYWRkIC0xMjM0NSAgMC41MSAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxOTkgIGFkZCAtMTIzNDUgIDAuNiAgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCisKK3JzdXgyMDAgIGFkZCAtMTIzNDUgLTAuMSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjAxICBhZGQgLTEyMzQ1IC0wLjAxICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIwMiAgYWRkIC0xMjM0NSAtMC4wMDEgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMDMgIGFkZCAtMTIzNDUgLTAuMDAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjA0ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMSAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIwNSAgYWRkIC0xMjM0NSAtMC4wMDAwMDAxIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMDYgIGFkZCAtMTIzNDUgIDAgICAgICAgICAtPiAtMTIzNDUKK3JzdXgyMDcgIGFkZCAtMTIzNDUgIDAuMDAwMDAwMSAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjA4ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMSAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIwOSAgYWRkIC0xMjM0NSAgMC4wMDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMTAgIGFkZCAtMTIzNDUgIDAuMDAwMSAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjExICBhZGQgLTEyMzQ1ICAwLjAwMSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIxMiAgYWRkIC0xMjM0NSAgMC4wMSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMTMgIGFkZCAtMTIzNDUgIDAuMSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgyMTUgIGFkZCAtMTIzNDYgIDAuNDk5OTkgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MjE2ICBhZGQgLTEyMzQ2ICAwLjUgICAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDIxNyAgYWRkIC0xMjM0NiAgMC41MDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcnN1eDIyMCAgYWRkIC0xMjM0NSAgMC40ICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMjEgIGFkZCAtMTIzNDUgIDAuNDkgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjIyICBhZGQgLTEyMzQ1ICAwLjQ5OSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIyMyAgYWRkIC0xMjM0NSAgMC40OTk5OSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMjQgIGFkZCAtMTIzNDUgIDAuNSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjI1ICBhZGQgLTEyMzQ1ICAwLjUwMDAxICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDIyNiAgYWRkIC0xMjM0NSAgMC41MDAxICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMjcgIGFkZCAtMTIzNDUgIDAuNTAxICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MjI4ICBhZGQgLTEyMzQ1ICAwLjUxICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDIyOSAgYWRkIC0xMjM0NSAgMC42ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IHVwCisKK3JzdXgyMzAgIGFkZCAtMTIzNDUgLTAuMSAgICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MjMxICBhZGQgLTEyMzQ1IC0wLjAxICAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDIzMiAgYWRkIC0xMjM0NSAtMC4wMDEgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMzMgIGFkZCAtMTIzNDUgLTAuMDAwMDEgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MjM0ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMSAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDIzNSAgYWRkIC0xMjM0NSAtMC4wMDAwMDAxIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMzYgIGFkZCAtMTIzNDUgIDAgICAgICAgICAtPiAtMTIzNDUKK3JzdXgyMzcgIGFkZCAtMTIzNDUgIDAuMDAwMDAwMSAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjM4ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMSAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIzOSAgYWRkIC0xMjM0NSAgMC4wMDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNDAgIGFkZCAtMTIzNDUgIDAuMDAwMSAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjQxICBhZGQgLTEyMzQ1ICAwLjAwMSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDI0MiAgYWRkIC0xMjM0NSAgMC4wMSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNDMgIGFkZCAtMTIzNDUgIDAuMSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgyNDUgIGFkZCAtMTIzNDYgIDAuNDk5OTkgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MjQ2ICBhZGQgLTEyMzQ2ICAwLjUgICAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDI0NyAgYWRkIC0xMjM0NiAgMC41MDAwMSAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworcnN1eDI1MCAgYWRkIC0xMjM0NSAgMC40ICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNTEgIGFkZCAtMTIzNDUgIDAuNDkgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjUyICBhZGQgLTEyMzQ1ICAwLjQ5OSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDI1MyAgYWRkIC0xMjM0NSAgMC40OTk5OSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNTQgIGFkZCAtMTIzNDUgIDAuNSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjU1ICBhZGQgLTEyMzQ1ICAwLjUwMDAxICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDI1NiAgYWRkIC0xMjM0NSAgMC41MDAxICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNTcgIGFkZCAtMTIzNDUgIDAuNTAxICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjU4ICBhZGQgLTEyMzQ1ICAwLjUxICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDI1OSAgYWRkIC0xMjM0NSAgMC42ICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGZsb29yCisKK3JzdXgzMDAgIGFkZCAtMTIzNDUgLTAuMSAgICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MzAxICBhZGQgLTEyMzQ1IC0wLjAxICAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDMwMiAgYWRkIC0xMjM0NSAtMC4wMDEgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMDMgIGFkZCAtMTIzNDUgLTAuMDAwMDEgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MzA0ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMSAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDMwNSAgYWRkIC0xMjM0NSAtMC4wMDAwMDAxIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMDYgIGFkZCAtMTIzNDUgIDAgICAgICAgICAtPiAtMTIzNDUKK3JzdXgzMDcgIGFkZCAtMTIzNDUgIDAuMDAwMDAwMSAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzA4ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMSAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMwOSAgYWRkIC0xMjM0NSAgMC4wMDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMTAgIGFkZCAtMTIzNDUgIDAuMDAwMSAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzExICBhZGQgLTEyMzQ1ICAwLjAwMSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMxMiAgYWRkIC0xMjM0NSAgMC4wMSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMTMgIGFkZCAtMTIzNDUgIDAuMSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgzMTUgIGFkZCAtMTIzNDYgIDAuNDk5OTkgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MzE2ICBhZGQgLTEyMzQ2ICAwLjUgICAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDMxNyAgYWRkIC0xMjM0NiAgMC41MDAwMSAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworcnN1eDMyMCAgYWRkIC0xMjM0NSAgMC40ICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMjEgIGFkZCAtMTIzNDUgIDAuNDkgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzIyICBhZGQgLTEyMzQ1ICAwLjQ5OSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMyMyAgYWRkIC0xMjM0NSAgMC40OTk5OSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMjQgIGFkZCAtMTIzNDUgIDAuNSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzI1ICBhZGQgLTEyMzQ1ICAwLjUwMDAxICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMyNiAgYWRkIC0xMjM0NSAgMC41MDAxICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMjcgIGFkZCAtMTIzNDUgIDAuNTAxICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzI4ICBhZGQgLTEyMzQ1ICAwLjUxICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMyOSAgYWRkIC0xMjM0NSAgMC42ICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKKworcnN1eDMzMCAgYWRkIC0xMjM0NSAtMC4xICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMzEgIGFkZCAtMTIzNDUgLTAuMDEgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzMyICBhZGQgLTEyMzQ1IC0wLjAwMSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMzMyAgYWRkIC0xMjM0NSAtMC4wMDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMzQgIGFkZCAtMTIzNDUgLTAuMDAwMDAxICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzM1ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMDEgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMzNiAgYWRkIC0xMjM0NSAgMCAgICAgICAgIC0+IC0xMjM0NQorcnN1eDMzNyAgYWRkIC0xMjM0NSAgMC4wMDAwMDAxIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMzggIGFkZCAtMTIzNDUgIDAuMDAwMDAxICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzM5ICBhZGQgLTEyMzQ1ICAwLjAwMDAxICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDM0MCAgYWRkIC0xMjM0NSAgMC4wMDAxICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNDEgIGFkZCAtMTIzNDUgIDAuMDAxICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzQyICBhZGQgLTEyMzQ1ICAwLjAxICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDM0MyAgYWRkIC0xMjM0NSAgMC4xICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKKworcnN1eDM0NSAgYWRkIC0xMjM0NiAgMC40OTk5OSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNDYgIGFkZCAtMTIzNDYgIDAuNSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzQ3ICBhZGQgLTEyMzQ2ICAwLjUwMDAxICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityc3V4MzUwICBhZGQgLTEyMzQ1ICAwLjQgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDM1MSAgYWRkIC0xMjM0NSAgMC40OSAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNTIgIGFkZCAtMTIzNDUgIDAuNDk5ICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzUzICBhZGQgLTEyMzQ1ICAwLjQ5OTk5ICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDM1NCAgYWRkIC0xMjM0NSAgMC41ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNTUgIGFkZCAtMTIzNDUgIDAuNTAwMDEgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzU2ICBhZGQgLTEyMzQ1ICAwLjUwMDEgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDM1NyAgYWRkIC0xMjM0NSAgMC41MDEgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNTggIGFkZCAtMTIzNDUgIDAuNTEgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzU5ICBhZGQgLTEyMzQ1ICAwLjYgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorCistLSBDaGVjayBjYW5jZWxsYXRpb24gc3VidHJhY3Rpb25zCistLSAoVGhlIElFRUUgODU0ICdjdXJpb3VzIHJ1bGUnIGluICQ2LjMpCisKK3JvdW5kaW5nOiBkb3duCityemV4MDAxICBhZGQgIDAgICAgMCAgICAtPiAgMAorcnpleDAwMiAgYWRkICAwICAgLTAgICAgLT4gIDAKK3J6ZXgwMDMgIGFkZCAtMCAgICAwICAgIC0+ICAwCityemV4MDA0ICBhZGQgLTAgICAtMCAgICAtPiAtMAorcnpleDAwNSAgYWRkICAxICAgLTEgICAgLT4gIDAKK3J6ZXgwMDYgIGFkZCAtMSAgICAxICAgIC0+ICAwCityemV4MDA3ICBhZGQgIDEuNSAtMS41ICAtPiAgMC4wCityemV4MDA4ICBhZGQgLTEuNSAgMS41ICAtPiAgMC4wCityemV4MDA5ICBhZGQgIDIgICAtMiAgICAtPiAgMAorcnpleDAxMCAgYWRkIC0yICAgIDIgICAgLT4gIDAKKworcm91bmRpbmc6IHVwCityemV4MDExICBhZGQgIDAgICAgMCAgICAtPiAgMAorcnpleDAxMiAgYWRkICAwICAgLTAgICAgLT4gIDAKK3J6ZXgwMTMgIGFkZCAtMCAgICAwICAgIC0+ICAwCityemV4MDE0ICBhZGQgLTAgICAtMCAgICAtPiAtMAorcnpleDAxNSAgYWRkICAxICAgLTEgICAgLT4gIDAKK3J6ZXgwMTYgIGFkZCAtMSAgICAxICAgIC0+ICAwCityemV4MDE3ICBhZGQgIDEuNSAtMS41ICAtPiAgMC4wCityemV4MDE4ICBhZGQgLTEuNSAgMS41ICAtPiAgMC4wCityemV4MDE5ICBhZGQgIDIgICAtMiAgICAtPiAgMAorcnpleDAyMCAgYWRkIC0yICAgIDIgICAgLT4gIDAKKworcm91bmRpbmc6IGhhbGZfdXAKK3J6ZXgwMjEgIGFkZCAgMCAgICAwICAgIC0+ICAwCityemV4MDIyICBhZGQgIDAgICAtMCAgICAtPiAgMAorcnpleDAyMyAgYWRkIC0wICAgIDAgICAgLT4gIDAKK3J6ZXgwMjQgIGFkZCAtMCAgIC0wICAgIC0+IC0wCityemV4MDI1ICBhZGQgIDEgICAtMSAgICAtPiAgMAorcnpleDAyNiAgYWRkIC0xICAgIDEgICAgLT4gIDAKK3J6ZXgwMjcgIGFkZCAgMS41IC0xLjUgIC0+ICAwLjAKK3J6ZXgwMjggIGFkZCAtMS41ICAxLjUgIC0+ICAwLjAKK3J6ZXgwMjkgIGFkZCAgMiAgIC0yICAgIC0+ICAwCityemV4MDMwICBhZGQgLTIgICAgMiAgICAtPiAgMAorCityb3VuZGluZzogaGFsZl9kb3duCityemV4MDMxICBhZGQgIDAgICAgMCAgICAtPiAgMAorcnpleDAzMiAgYWRkICAwICAgLTAgICAgLT4gIDAKK3J6ZXgwMzMgIGFkZCAtMCAgICAwICAgIC0+ICAwCityemV4MDM0ICBhZGQgLTAgICAtMCAgICAtPiAtMAorcnpleDAzNSAgYWRkICAxICAgLTEgICAgLT4gIDAKK3J6ZXgwMzYgIGFkZCAtMSAgICAxICAgIC0+ICAwCityemV4MDM3ICBhZGQgIDEuNSAtMS41ICAtPiAgMC4wCityemV4MDM4ICBhZGQgLTEuNSAgMS41ICAtPiAgMC4wCityemV4MDM5ICBhZGQgIDIgICAtMiAgICAtPiAgMAorcnpleDA0MCAgYWRkIC0yICAgIDIgICAgLT4gIDAKKworcm91bmRpbmc6IGhhbGZfZXZlbgorcnpleDA0MSAgYWRkICAwICAgIDAgICAgLT4gIDAKK3J6ZXgwNDIgIGFkZCAgMCAgIC0wICAgIC0+ICAwCityemV4MDQzICBhZGQgLTAgICAgMCAgICAtPiAgMAorcnpleDA0NCAgYWRkIC0wICAgLTAgICAgLT4gLTAKK3J6ZXgwNDUgIGFkZCAgMSAgIC0xICAgIC0+ICAwCityemV4MDQ2ICBhZGQgLTEgICAgMSAgICAtPiAgMAorcnpleDA0NyAgYWRkICAxLjUgLTEuNSAgLT4gIDAuMAorcnpleDA0OCAgYWRkIC0xLjUgIDEuNSAgLT4gIDAuMAorcnpleDA0OSAgYWRkICAyICAgLTIgICAgLT4gIDAKK3J6ZXgwNTAgIGFkZCAtMiAgICAyICAgIC0+ICAwCisKK3JvdW5kaW5nOiBmbG9vcgorcnpleDA1MSAgYWRkICAwICAgIDAgICAgLT4gIDAKK3J6ZXgwNTIgIGFkZCAgMCAgIC0wICAgIC0+IC0wICAgIC0tIGhlcmUgYXJlIHR3byAnY3VyaW91cycKK3J6ZXgwNTMgIGFkZCAtMCAgICAwICAgIC0+IC0wICAgIC0tCityemV4MDU0ICBhZGQgLTAgICAtMCAgICAtPiAtMAorcnpleDA1NSAgYWRkICAxICAgLTEgICAgLT4gLTAgICAgLS0gaGVyZSBhcmUgdGhlIHJlc3QKK3J6ZXgwNTYgIGFkZCAtMSAgICAxICAgIC0+IC0wICAgIC0tIC4uCityemV4MDU3ICBhZGQgIDEuNSAtMS41ICAtPiAtMC4wICAtLSAuLgorcnpleDA1OCAgYWRkIC0xLjUgIDEuNSAgLT4gLTAuMCAgLS0gLi4KK3J6ZXgwNTkgIGFkZCAgMiAgIC0yICAgIC0+IC0wICAgIC0tIC4uCityemV4MDYwICBhZGQgLTIgICAgMiAgICAtPiAtMCAgICAtLSAuLgorCityb3VuZGluZzogY2VpbGluZworcnpleDA2MSAgYWRkICAwICAgIDAgICAgLT4gIDAKK3J6ZXgwNjIgIGFkZCAgMCAgIC0wICAgIC0+ICAwCityemV4MDYzICBhZGQgLTAgICAgMCAgICAtPiAgMAorcnpleDA2NCAgYWRkIC0wICAgLTAgICAgLT4gLTAKK3J6ZXgwNjUgIGFkZCAgMSAgIC0xICAgIC0+ICAwCityemV4MDY2ICBhZGQgLTEgICAgMSAgICAtPiAgMAorcnpleDA2NyAgYWRkICAxLjUgLTEuNSAgLT4gIDAuMAorcnpleDA2OCAgYWRkIC0xLjUgIDEuNSAgLT4gIDAuMAorcnpleDA2OSAgYWRkICAyICAgLTIgICAgLT4gIDAKK3J6ZXgwNzAgIGFkZCAtMiAgICAyICAgIC0+ICAwCisKKworLS0gRGl2aXNpb24gb3BlcmF0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcm91bmRpbmc6IGRvd24KK3JkdngxMDEgIGRpdmlkZSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcmR2eDEwMiAgZGl2aWRlIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQzIEluZXhhY3QgUm91bmRlZAorcmR2eDEwMyAgZGl2aWRlIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzMyIEluZXhhY3QgUm91bmRlZAorcmR2eDEwNCAgZGl2aWRlIDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyMjIyIEluZXhhY3QgUm91bmRlZAorcmR2eDEwNSAgZGl2aWRlIDEyMzQ1ICAxLjEgICAgICAgLT4gIDExMjIyIEluZXhhY3QgUm91bmRlZAorcmR2eDEwNiAgZGl2aWRlIDEyMzU1ICA0ICAgICAgICAgLT4gICAzMDg4LjcgSW5leGFjdCBSb3VuZGVkCityZHZ4MTA3ICBkaXZpZGUgMTIzNDUgIDQgICAgICAgICAtPiAgIDMwODYuMiBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMDggIGRpdmlkZSAxMjM1NSAgNC4wMDAxICAgIC0+ICAgMzA4OC42IEluZXhhY3QgUm91bmRlZAorcmR2eDEwOSAgZGl2aWRlIDEyMzQ1ICA0LjAwMDEgICAgLT4gICAzMDg2LjEgSW5leGFjdCBSb3VuZGVkCityZHZ4MTEwICBkaXZpZGUgMTIzNDUgIDQuOSAgICAgICAtPiAgIDI1MTkuMyBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMTEgIGRpdmlkZSAxMjM0NSAgNC45OSAgICAgIC0+ICAgMjQ3My45IEluZXhhY3QgUm91bmRlZAorcmR2eDExMiAgZGl2aWRlIDEyMzQ1ICA0Ljk5OSAgICAgLT4gICAyNDY5LjQgSW5leGFjdCBSb3VuZGVkCityZHZ4MTEzICBkaXZpZGUgMTIzNDUgIDQuOTk5OSAgICAtPiAgIDI0NjkuMCBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMTQgIGRpdmlkZSAxMjM0NSAgNSAgICAgICAgIC0+ICAgMjQ2OQorcmR2eDExNSAgZGl2aWRlIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDI0NjguOSBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMTYgIGRpdmlkZSAxMjM0NSAgNS4wMDEgICAgIC0+ICAyNDY4LjUgSW5leGFjdCBSb3VuZGVkCityZHZ4MTE3ICBkaXZpZGUgMTIzNDUgIDUuMDEgICAgICAtPiAgMjQ2NC4wIEluZXhhY3QgUm91bmRlZAorcmR2eDExOCAgZGl2aWRlIDEyMzQ1ICA1LjEgICAgICAgLT4gIDI0MjAuNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorcmR2eDIwMSAgZGl2aWRlIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CityZHZ4MjAyICBkaXZpZGUgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDQgSW5leGFjdCBSb3VuZGVkCityZHZ4MjAzICBkaXZpZGUgMTIzNDUgIDEuMDAxICAgICAtPiAgMTIzMzMgSW5leGFjdCBSb3VuZGVkCityZHZ4MjA0ICBkaXZpZGUgMTIzNDUgIDEuMDEgICAgICAtPiAgMTIyMjMgSW5leGFjdCBSb3VuZGVkCityZHZ4MjA1ICBkaXZpZGUgMTIzNDUgIDEuMSAgICAgICAtPiAgMTEyMjMgSW5leGFjdCBSb3VuZGVkCityZHZ4MjA2ICBkaXZpZGUgMTIzNTUgIDQgICAgICAgICAtPiAgIDMwODguNyBJbmV4YWN0IFJvdW5kZWQKK3JkdngyMDcgIGRpdmlkZSAxMjM0NSAgNCAgICAgICAgIC0+ICAgMzA4Ni4yIEluZXhhY3QgUm91bmRlZAorcmR2eDIwOCAgZGl2aWRlIDEyMzU1ICA0LjAwMDEgICAgLT4gICAzMDg4LjcgSW5leGFjdCBSb3VuZGVkCityZHZ4MjA5ICBkaXZpZGUgMTIzNDUgIDQuMDAwMSAgICAtPiAgIDMwODYuMiBJbmV4YWN0IFJvdW5kZWQKK3JkdngyMTAgIGRpdmlkZSAxMjM0NSAgNC45ICAgICAgIC0+ICAgMjUxOS40IEluZXhhY3QgUm91bmRlZAorcmR2eDIxMSAgZGl2aWRlIDEyMzQ1ICA0Ljk5ICAgICAgLT4gICAyNDczLjkgSW5leGFjdCBSb3VuZGVkCityZHZ4MjEyICBkaXZpZGUgMTIzNDUgIDQuOTk5ICAgICAtPiAgIDI0NjkuNSBJbmV4YWN0IFJvdW5kZWQKK3JkdngyMTMgIGRpdmlkZSAxMjM0NSAgNC45OTk5ICAgIC0+ICAgMjQ2OS4wIEluZXhhY3QgUm91bmRlZAorcmR2eDIxNCAgZGl2aWRlIDEyMzQ1ICA1ICAgICAgICAgLT4gICAyNDY5CityZHZ4MjE1ICBkaXZpZGUgMTIzNDUgIDUuMDAwMSAgICAtPiAgMjQ2OS4wIEluZXhhY3QgUm91bmRlZAorcmR2eDIxNiAgZGl2aWRlIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDI0NjguNSBJbmV4YWN0IFJvdW5kZWQKK3JkdngyMTcgIGRpdmlkZSAxMjM0NSAgNS4wMSAgICAgIC0+ICAyNDY0LjEgSW5leGFjdCBSb3VuZGVkCityZHZ4MjE4ICBkaXZpZGUgMTIzNDUgIDUuMSAgICAgICAtPiAgMjQyMC42IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCityZHZ4MzAxICBkaXZpZGUgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3JkdngzMDIgIGRpdmlkZSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMDMgIGRpdmlkZSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjMzMyBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMDQgIGRpdmlkZSAxMjM0NSAgMS4wMSAgICAgIC0+ICAxMjIyMyBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMDUgIGRpdmlkZSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMTIyMyBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMDYgIGRpdmlkZSAxMjM1NSAgNCAgICAgICAgIC0+ICAgMzA4OC44IEluZXhhY3QgUm91bmRlZAorcmR2eDMwNyAgZGl2aWRlIDEyMzQ1ICA0ICAgICAgICAgLT4gICAzMDg2LjIgSW5leGFjdCBSb3VuZGVkCityZHZ4MzA4ICBkaXZpZGUgMTIzNTUgIDQuMDAwMSAgICAtPiAgIDMwODguNyBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMDkgIGRpdmlkZSAxMjM0NSAgNC4wMDAxICAgIC0+ICAgMzA4Ni4yIEluZXhhY3QgUm91bmRlZAorcmR2eDMxMCAgZGl2aWRlIDEyMzQ1ICA0LjkgICAgICAgLT4gICAyNTE5LjQgSW5leGFjdCBSb3VuZGVkCityZHZ4MzExICBkaXZpZGUgMTIzNDUgIDQuOTkgICAgICAtPiAgIDI0NzMuOSBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMTIgIGRpdmlkZSAxMjM0NSAgNC45OTkgICAgIC0+ICAgMjQ2OS41IEluZXhhY3QgUm91bmRlZAorcmR2eDMxMyAgZGl2aWRlIDEyMzQ1ICA0Ljk5OTkgICAgLT4gICAyNDY5LjAgSW5leGFjdCBSb3VuZGVkCityZHZ4MzE0ICBkaXZpZGUgMTIzNDUgIDUgICAgICAgICAtPiAgIDI0NjkKK3JkdngzMTUgIGRpdmlkZSAxMjM0NSAgNS4wMDAxICAgIC0+ICAyNDY5LjAgSW5leGFjdCBSb3VuZGVkCityZHZ4MzE2ICBkaXZpZGUgMTIzNDUgIDUuMDAxICAgICAtPiAgMjQ2OC41IEluZXhhY3QgUm91bmRlZAorcmR2eDMxNyAgZGl2aWRlIDEyMzQ1ICA1LjAxICAgICAgLT4gIDI0NjQuMSBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMTggIGRpdmlkZSAxMjM0NSAgNS4xICAgICAgIC0+ICAyNDIwLjYgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCityZHZ4NDAxICBkaXZpZGUgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3Jkdng0MDIgIGRpdmlkZSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MDMgIGRpdmlkZSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjMzMyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MDQgIGRpdmlkZSAxMjM0NSAgMS4wMSAgICAgIC0+ICAxMjIyMyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MDUgIGRpdmlkZSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMTIyMyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MDYgIGRpdmlkZSAxMjM1NSAgNCAgICAgICAgIC0+ICAgMzA4OC44IEluZXhhY3QgUm91bmRlZAorcmR2eDQwNyAgZGl2aWRlIDEyMzQ1ICA0ICAgICAgICAgLT4gICAzMDg2LjMgSW5leGFjdCBSb3VuZGVkCityZHZ4NDA4ICBkaXZpZGUgMTIzNTUgIDQuMDAwMSAgICAtPiAgIDMwODguNyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MDkgIGRpdmlkZSAxMjM0NSAgNC4wMDAxICAgIC0+ICAgMzA4Ni4yIEluZXhhY3QgUm91bmRlZAorcmR2eDQxMCAgZGl2aWRlIDEyMzQ1ICA0LjkgICAgICAgLT4gICAyNTE5LjQgSW5leGFjdCBSb3VuZGVkCityZHZ4NDExICBkaXZpZGUgMTIzNDUgIDQuOTkgICAgICAtPiAgIDI0NzMuOSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MTIgIGRpdmlkZSAxMjM0NSAgNC45OTkgICAgIC0+ICAgMjQ2OS41IEluZXhhY3QgUm91bmRlZAorcmR2eDQxMyAgZGl2aWRlIDEyMzQ1ICA0Ljk5OTkgICAgLT4gICAyNDY5LjAgSW5leGFjdCBSb3VuZGVkCityZHZ4NDE0ICBkaXZpZGUgMTIzNDUgIDUgICAgICAgICAtPiAgIDI0NjkKK3Jkdng0MTUgIGRpdmlkZSAxMjM0NSAgNS4wMDAxICAgIC0+ICAyNDY5LjAgSW5leGFjdCBSb3VuZGVkCityZHZ4NDE2ICBkaXZpZGUgMTIzNDUgIDUuMDAxICAgICAtPiAgMjQ2OC41IEluZXhhY3QgUm91bmRlZAorcmR2eDQxNyAgZGl2aWRlIDEyMzQ1ICA1LjAxICAgICAgLT4gIDI0NjQuMSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MTggIGRpdmlkZSAxMjM0NSAgNS4xICAgICAgIC0+ICAyNDIwLjYgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiB1cAorcmR2eDUwMSAgZGl2aWRlIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CityZHZ4NTAyICBkaXZpZGUgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDQgSW5leGFjdCBSb3VuZGVkCityZHZ4NTAzICBkaXZpZGUgMTIzNDUgIDEuMDAxICAgICAtPiAgMTIzMzMgSW5leGFjdCBSb3VuZGVkCityZHZ4NTA0ICBkaXZpZGUgMTIzNDUgIDEuMDEgICAgICAtPiAgMTIyMjMgSW5leGFjdCBSb3VuZGVkCityZHZ4NTA1ICBkaXZpZGUgMTIzNDUgIDEuMSAgICAgICAtPiAgMTEyMjMgSW5leGFjdCBSb3VuZGVkCityZHZ4NTA2ICBkaXZpZGUgMTIzNTUgIDQgICAgICAgICAtPiAgIDMwODguOCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng1MDcgIGRpdmlkZSAxMjM0NSAgNCAgICAgICAgIC0+ICAgMzA4Ni4zIEluZXhhY3QgUm91bmRlZAorcmR2eDUwOCAgZGl2aWRlIDEyMzU1ICA0LjAwMDEgICAgLT4gICAzMDg4LjcgSW5leGFjdCBSb3VuZGVkCityZHZ4NTA5ICBkaXZpZGUgMTIzNDUgIDQuMDAwMSAgICAtPiAgIDMwODYuMiBJbmV4YWN0IFJvdW5kZWQKK3Jkdng1MTAgIGRpdmlkZSAxMjM0NSAgNC45ICAgICAgIC0+ICAgMjUxOS40IEluZXhhY3QgUm91bmRlZAorcmR2eDUxMSAgZGl2aWRlIDEyMzQ1ICA0Ljk5ICAgICAgLT4gICAyNDc0LjAgSW5leGFjdCBSb3VuZGVkCityZHZ4NTEyICBkaXZpZGUgMTIzNDUgIDQuOTk5ICAgICAtPiAgIDI0NjkuNSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng1MTMgIGRpdmlkZSAxMjM0NSAgNC45OTk5ICAgIC0+ICAgMjQ2OS4xIEluZXhhY3QgUm91bmRlZAorcmR2eDUxNCAgZGl2aWRlIDEyMzQ1ICA1ICAgICAgICAgLT4gICAyNDY5CityZHZ4NTE1ICBkaXZpZGUgMTIzNDUgIDUuMDAwMSAgICAtPiAgMjQ2OS4wIEluZXhhY3QgUm91bmRlZAorcmR2eDUxNiAgZGl2aWRlIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDI0NjguNiBJbmV4YWN0IFJvdW5kZWQKK3Jkdng1MTcgIGRpdmlkZSAxMjM0NSAgNS4wMSAgICAgIC0+ICAyNDY0LjEgSW5leGFjdCBSb3VuZGVkCityZHZ4NTE4ICBkaXZpZGUgMTIzNDUgIDUuMSAgICAgICAtPiAgMjQyMC42IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZmxvb3IKK3Jkdng2MDEgIGRpdmlkZSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcmR2eDYwMiAgZGl2aWRlIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQzIEluZXhhY3QgUm91bmRlZAorcmR2eDYwMyAgZGl2aWRlIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzMyIEluZXhhY3QgUm91bmRlZAorcmR2eDYwNCAgZGl2aWRlIDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyMjIyIEluZXhhY3QgUm91bmRlZAorcmR2eDYwNSAgZGl2aWRlIDEyMzQ1ICAxLjEgICAgICAgLT4gIDExMjIyIEluZXhhY3QgUm91bmRlZAorcmR2eDYwNiAgZGl2aWRlIDEyMzU1ICA0ICAgICAgICAgLT4gICAzMDg4LjcgSW5leGFjdCBSb3VuZGVkCityZHZ4NjA3ICBkaXZpZGUgMTIzNDUgIDQgICAgICAgICAtPiAgIDMwODYuMiBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MDggIGRpdmlkZSAxMjM1NSAgNC4wMDAxICAgIC0+ICAgMzA4OC42IEluZXhhY3QgUm91bmRlZAorcmR2eDYwOSAgZGl2aWRlIDEyMzQ1ICA0LjAwMDEgICAgLT4gICAzMDg2LjEgSW5leGFjdCBSb3VuZGVkCityZHZ4NjEwICBkaXZpZGUgMTIzNDUgIDQuOSAgICAgICAtPiAgIDI1MTkuMyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MTEgIGRpdmlkZSAxMjM0NSAgNC45OSAgICAgIC0+ICAgMjQ3My45IEluZXhhY3QgUm91bmRlZAorcmR2eDYxMiAgZGl2aWRlIDEyMzQ1ICA0Ljk5OSAgICAgLT4gICAyNDY5LjQgSW5leGFjdCBSb3VuZGVkCityZHZ4NjEzICBkaXZpZGUgMTIzNDUgIDQuOTk5OSAgICAtPiAgIDI0NjkuMCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MTQgIGRpdmlkZSAxMjM0NSAgNSAgICAgICAgIC0+ICAgMjQ2OQorcmR2eDYxNSAgZGl2aWRlIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDI0NjguOSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MTYgIGRpdmlkZSAxMjM0NSAgNS4wMDEgICAgIC0+ICAyNDY4LjUgSW5leGFjdCBSb3VuZGVkCityZHZ4NjE3ICBkaXZpZGUgMTIzNDUgIDUuMDEgICAgICAtPiAgMjQ2NC4wIEluZXhhY3QgUm91bmRlZAorcmR2eDYxOCAgZGl2aWRlIDEyMzQ1ICA1LjEgICAgICAgLT4gIDI0MjAuNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKK3Jkdng3MDEgIGRpdmlkZSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcmR2eDcwMiAgZGl2aWRlIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmR2eDcwMyAgZGl2aWRlIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzMzIEluZXhhY3QgUm91bmRlZAorcmR2eDcwNCAgZGl2aWRlIDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyMjIzIEluZXhhY3QgUm91bmRlZAorcmR2eDcwNSAgZGl2aWRlIDEyMzQ1ICAxLjEgICAgICAgLT4gIDExMjIzIEluZXhhY3QgUm91bmRlZAorcmR2eDcwNiAgZGl2aWRlIDEyMzU1ICA0ICAgICAgICAgLT4gICAzMDg4LjggSW5leGFjdCBSb3VuZGVkCityZHZ4NzA3ICBkaXZpZGUgMTIzNDUgIDQgICAgICAgICAtPiAgIDMwODYuMyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MDggIGRpdmlkZSAxMjM1NSAgNC4wMDAxICAgIC0+ICAgMzA4OC43IEluZXhhY3QgUm91bmRlZAorcmR2eDcwOSAgZGl2aWRlIDEyMzQ1ICA0LjAwMDEgICAgLT4gICAzMDg2LjIgSW5leGFjdCBSb3VuZGVkCityZHZ4NzEwICBkaXZpZGUgMTIzNDUgIDQuOSAgICAgICAtPiAgIDI1MTkuNCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MTEgIGRpdmlkZSAxMjM0NSAgNC45OSAgICAgIC0+ICAgMjQ3NC4wIEluZXhhY3QgUm91bmRlZAorcmR2eDcxMiAgZGl2aWRlIDEyMzQ1ICA0Ljk5OSAgICAgLT4gICAyNDY5LjUgSW5leGFjdCBSb3VuZGVkCityZHZ4NzEzICBkaXZpZGUgMTIzNDUgIDQuOTk5OSAgICAtPiAgIDI0NjkuMSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MTQgIGRpdmlkZSAxMjM0NSAgNSAgICAgICAgIC0+ICAgMjQ2OQorcmR2eDcxNSAgZGl2aWRlIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDI0NjkuMCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MTYgIGRpdmlkZSAxMjM0NSAgNS4wMDEgICAgIC0+ICAyNDY4LjYgSW5leGFjdCBSb3VuZGVkCityZHZ4NzE3ICBkaXZpZGUgMTIzNDUgIDUuMDEgICAgICAtPiAgMjQ2NC4xIEluZXhhY3QgUm91bmRlZAorcmR2eDcxOCAgZGl2aWRlIDEyMzQ1ICA1LjEgICAgICAgLT4gIDI0MjAuNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gW2RpdmlkZUludGVnZXIgYW5kIHJlbWFpbmRlciB1bmFmZmVjdGVkXQorCistLSBNdWx0aXBsaWNhdGlvbiBvcGVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityb3VuZGluZzogZG93bgorcm11eDEwMSAgbXVsdGlwbHkgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3JtdXgxMDIgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcm11eDEwMyAgbXVsdGlwbHkgMTIzNDUgIDEuMDAxICAgICAtPiAgMTIzNTcgSW5leGFjdCBSb3VuZGVkCitybXV4MTA0ICBtdWx0aXBseSAxMjM0NSAgMS4wMSAgICAgIC0+ICAxMjQ2OCBJbmV4YWN0IFJvdW5kZWQKK3JtdXgxMDUgIG11bHRpcGx5IDEyMzQ1ICAxLjEgICAgICAgLT4gIDEzNTc5IEluZXhhY3QgUm91bmRlZAorcm11eDEwNiAgbXVsdGlwbHkgMTIzNDUgIDQgICAgICAgICAtPiAgNDkzODAKK3JtdXgxMDcgIG11bHRpcGx5IDEyMzQ1ICA0LjAwMDEgICAgLT4gIDQ5MzgxIEluZXhhY3QgUm91bmRlZAorcm11eDEwOCAgbXVsdGlwbHkgMTIzNDUgIDQuOSAgICAgICAtPiAgNjA0OTAgSW5leGFjdCBSb3VuZGVkCitybXV4MTA5ICBtdWx0aXBseSAxMjM0NSAgNC45OSAgICAgIC0+ICA2MTYwMSBJbmV4YWN0IFJvdW5kZWQKK3JtdXgxMTAgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDYxNzEyIEluZXhhY3QgUm91bmRlZAorcm11eDExMSAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5OSAgICAtPiAgNjE3MjMgSW5leGFjdCBSb3VuZGVkCitybXV4MTEyICBtdWx0aXBseSAxMjM0NSAgNSAgICAgICAgIC0+ICA2MTcyNQorcm11eDExMyAgbXVsdGlwbHkgMTIzNDUgIDUuMDAwMSAgICAtPiAgNjE3MjYgSW5leGFjdCBSb3VuZGVkCitybXV4MTE0ICBtdWx0aXBseSAxMjM0NSAgNS4wMDEgICAgIC0+ICA2MTczNyBJbmV4YWN0IFJvdW5kZWQKK3JtdXgxMTUgIG11bHRpcGx5IDEyMzQ1ICA1LjAxICAgICAgLT4gIDYxODQ4IEluZXhhY3QgUm91bmRlZAorcm11eDExNiAgbXVsdGlwbHkgMTIzNDUgIDEyICAgICAgICAtPiAgMS40ODE0RSs1IFJvdW5kZWQKK3JtdXgxMTcgIG11bHRpcGx5IDEyMzQ1ICAxMyAgICAgICAgLT4gIDEuNjA0OEUrNSBJbmV4YWN0IFJvdW5kZWQKK3JtdXgxMTggIG11bHRpcGx5IDEyMzU1ICAxMiAgICAgICAgLT4gIDEuNDgyNkUrNSBSb3VuZGVkCitybXV4MTE5ICBtdWx0aXBseSAxMjM1NSAgMTMgICAgICAgIC0+ICAxLjYwNjFFKzUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK3JtdXgyMDEgIG11bHRpcGx5IDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CitybXV4MjAyICBtdWx0aXBseSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JtdXgyMDMgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzU3IEluZXhhY3QgUm91bmRlZAorcm11eDIwNCAgbXVsdGlwbHkgMTIzNDUgIDEuMDEgICAgICAtPiAgMTI0NjggSW5leGFjdCBSb3VuZGVkCitybXV4MjA1ICBtdWx0aXBseSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMzU3OSBJbmV4YWN0IFJvdW5kZWQKK3JtdXgyMDYgIG11bHRpcGx5IDEyMzQ1ICA0ICAgICAgICAgLT4gIDQ5MzgwCitybXV4MjA3ICBtdWx0aXBseSAxMjM0NSAgNC4wMDAxICAgIC0+ICA0OTM4MSBJbmV4YWN0IFJvdW5kZWQKK3JtdXgyMDggIG11bHRpcGx5IDEyMzQ1ICA0LjkgICAgICAgLT4gIDYwNDkwIEluZXhhY3QgUm91bmRlZAorcm11eDIwOSAgbXVsdGlwbHkgMTIzNDUgIDQuOTkgICAgICAtPiAgNjE2MDIgSW5leGFjdCBSb3VuZGVkCitybXV4MjEwICBtdWx0aXBseSAxMjM0NSAgNC45OTkgICAgIC0+ICA2MTcxMyBJbmV4YWN0IFJvdW5kZWQKK3JtdXgyMTEgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDYxNzI0IEluZXhhY3QgUm91bmRlZAorcm11eDIxMiAgbXVsdGlwbHkgMTIzNDUgIDUgICAgICAgICAtPiAgNjE3MjUKK3JtdXgyMTMgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMDEgICAgLT4gIDYxNzI2IEluZXhhY3QgUm91bmRlZAorcm11eDIxNCAgbXVsdGlwbHkgMTIzNDUgIDUuMDAxICAgICAtPiAgNjE3MzcgSW5leGFjdCBSb3VuZGVkCitybXV4MjE1ICBtdWx0aXBseSAxMjM0NSAgNS4wMSAgICAgIC0+ICA2MTg0OCBJbmV4YWN0IFJvdW5kZWQKK3JtdXgyMTYgIG11bHRpcGx5IDEyMzQ1ICAxMiAgICAgICAgLT4gIDEuNDgxNEUrNSBSb3VuZGVkCitybXV4MjE3ICBtdWx0aXBseSAxMjM0NSAgMTMgICAgICAgIC0+ICAxLjYwNDhFKzUgSW5leGFjdCBSb3VuZGVkCitybXV4MjE4ICBtdWx0aXBseSAxMjM1NSAgMTIgICAgICAgIC0+ICAxLjQ4MjZFKzUgUm91bmRlZAorcm11eDIxOSAgbXVsdGlwbHkgMTIzNTUgIDEzICAgICAgICAtPiAgMS42MDYxRSs1IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitybXV4MzAxICBtdWx0aXBseSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcm11eDMwMiAgbXVsdGlwbHkgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDYgSW5leGFjdCBSb3VuZGVkCitybXV4MzAzICBtdWx0aXBseSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjM1NyBJbmV4YWN0IFJvdW5kZWQKK3JtdXgzMDQgIG11bHRpcGx5IDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyNDY4IEluZXhhY3QgUm91bmRlZAorcm11eDMwNSAgbXVsdGlwbHkgMTIzNDUgIDEuMSAgICAgICAtPiAgMTM1ODAgSW5leGFjdCBSb3VuZGVkCitybXV4MzA2ICBtdWx0aXBseSAxMjM0NSAgNCAgICAgICAgIC0+ICA0OTM4MAorcm11eDMwNyAgbXVsdGlwbHkgMTIzNDUgIDQuMDAwMSAgICAtPiAgNDkzODEgSW5leGFjdCBSb3VuZGVkCitybXV4MzA4ICBtdWx0aXBseSAxMjM0NSAgNC45ICAgICAgIC0+ICA2MDQ5MCBJbmV4YWN0IFJvdW5kZWQKK3JtdXgzMDkgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDYxNjAyIEluZXhhY3QgUm91bmRlZAorcm11eDMxMCAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5ICAgICAtPiAgNjE3MTMgSW5leGFjdCBSb3VuZGVkCitybXV4MzExICBtdWx0aXBseSAxMjM0NSAgNC45OTk5ICAgIC0+ICA2MTcyNCBJbmV4YWN0IFJvdW5kZWQKK3JtdXgzMTIgIG11bHRpcGx5IDEyMzQ1ICA1ICAgICAgICAgLT4gIDYxNzI1CitybXV4MzEzICBtdWx0aXBseSAxMjM0NSAgNS4wMDAxICAgIC0+ICA2MTcyNiBJbmV4YWN0IFJvdW5kZWQKK3JtdXgzMTQgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMSAgICAgLT4gIDYxNzM3IEluZXhhY3QgUm91bmRlZAorcm11eDMxNSAgbXVsdGlwbHkgMTIzNDUgIDUuMDEgICAgICAtPiAgNjE4NDggSW5leGFjdCBSb3VuZGVkCitybXV4MzE2ICBtdWx0aXBseSAxMjM0NSAgMTIgICAgICAgIC0+ICAxLjQ4MTRFKzUgUm91bmRlZAorcm11eDMxNyAgbXVsdGlwbHkgMTIzNDUgIDEzICAgICAgICAtPiAgMS42MDQ4RSs1IEluZXhhY3QgUm91bmRlZAorcm11eDMxOCAgbXVsdGlwbHkgMTIzNTUgIDEyICAgICAgICAtPiAgMS40ODI2RSs1IFJvdW5kZWQKK3JtdXgzMTkgIG11bHRpcGx5IDEyMzU1ICAxMyAgICAgICAgLT4gIDEuNjA2MkUrNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK3JtdXg0MDEgIG11bHRpcGx5IDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CitybXV4NDAyICBtdWx0aXBseSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JtdXg0MDMgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzU3IEluZXhhY3QgUm91bmRlZAorcm11eDQwNCAgbXVsdGlwbHkgMTIzNDUgIDEuMDEgICAgICAtPiAgMTI0NjggSW5leGFjdCBSb3VuZGVkCitybXV4NDA1ICBtdWx0aXBseSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMzU4MCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg0MDYgIG11bHRpcGx5IDEyMzQ1ICA0ICAgICAgICAgLT4gIDQ5MzgwCitybXV4NDA3ICBtdWx0aXBseSAxMjM0NSAgNC4wMDAxICAgIC0+ICA0OTM4MSBJbmV4YWN0IFJvdW5kZWQKK3JtdXg0MDggIG11bHRpcGx5IDEyMzQ1ICA0LjkgICAgICAgLT4gIDYwNDkxIEluZXhhY3QgUm91bmRlZAorcm11eDQwOSAgbXVsdGlwbHkgMTIzNDUgIDQuOTkgICAgICAtPiAgNjE2MDIgSW5leGFjdCBSb3VuZGVkCitybXV4NDEwICBtdWx0aXBseSAxMjM0NSAgNC45OTkgICAgIC0+ICA2MTcxMyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg0MTEgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDYxNzI0IEluZXhhY3QgUm91bmRlZAorcm11eDQxMiAgbXVsdGlwbHkgMTIzNDUgIDUgICAgICAgICAtPiAgNjE3MjUKK3JtdXg0MTMgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMDEgICAgLT4gIDYxNzI2IEluZXhhY3QgUm91bmRlZAorcm11eDQxNCAgbXVsdGlwbHkgMTIzNDUgIDUuMDAxICAgICAtPiAgNjE3MzcgSW5leGFjdCBSb3VuZGVkCitybXV4NDE1ICBtdWx0aXBseSAxMjM0NSAgNS4wMSAgICAgIC0+ICA2MTg0OCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg0MTYgIG11bHRpcGx5IDEyMzQ1ICAxMiAgICAgICAgLT4gIDEuNDgxNEUrNSBSb3VuZGVkCitybXV4NDE3ICBtdWx0aXBseSAxMjM0NSAgMTMgICAgICAgIC0+ICAxLjYwNDlFKzUgSW5leGFjdCBSb3VuZGVkCitybXV4NDE4ICBtdWx0aXBseSAxMjM1NSAgMTIgICAgICAgIC0+ICAxLjQ4MjZFKzUgUm91bmRlZAorcm11eDQxOSAgbXVsdGlwbHkgMTIzNTUgIDEzICAgICAgICAtPiAgMS42MDYyRSs1IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogdXAKK3JtdXg1MDEgIG11bHRpcGx5IDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CitybXV4NTAyICBtdWx0aXBseSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg1MDMgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzU4IEluZXhhY3QgUm91bmRlZAorcm11eDUwNCAgbXVsdGlwbHkgMTIzNDUgIDEuMDEgICAgICAtPiAgMTI0NjkgSW5leGFjdCBSb3VuZGVkCitybXV4NTA1ICBtdWx0aXBseSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMzU4MCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg1MDYgIG11bHRpcGx5IDEyMzQ1ICA0ICAgICAgICAgLT4gIDQ5MzgwCitybXV4NTA3ICBtdWx0aXBseSAxMjM0NSAgNC4wMDAxICAgIC0+ICA0OTM4MiBJbmV4YWN0IFJvdW5kZWQKK3JtdXg1MDggIG11bHRpcGx5IDEyMzQ1ICA0LjkgICAgICAgLT4gIDYwNDkxIEluZXhhY3QgUm91bmRlZAorcm11eDUwOSAgbXVsdGlwbHkgMTIzNDUgIDQuOTkgICAgICAtPiAgNjE2MDIgSW5leGFjdCBSb3VuZGVkCitybXV4NTEwICBtdWx0aXBseSAxMjM0NSAgNC45OTkgICAgIC0+ICA2MTcxMyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg1MTEgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDYxNzI0IEluZXhhY3QgUm91bmRlZAorcm11eDUxMiAgbXVsdGlwbHkgMTIzNDUgIDUgICAgICAgICAtPiAgNjE3MjUKK3JtdXg1MTMgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMDEgICAgLT4gIDYxNzI3IEluZXhhY3QgUm91bmRlZAorcm11eDUxNCAgbXVsdGlwbHkgMTIzNDUgIDUuMDAxICAgICAtPiAgNjE3MzggSW5leGFjdCBSb3VuZGVkCitybXV4NTE1ICBtdWx0aXBseSAxMjM0NSAgNS4wMSAgICAgIC0+ICA2MTg0OSBJbmV4YWN0IFJvdW5kZWQKK3JtdXg1MTYgIG11bHRpcGx5IDEyMzQ1ICAxMiAgICAgICAgLT4gIDEuNDgxNEUrNSBSb3VuZGVkCitybXV4NTE3ICBtdWx0aXBseSAxMjM0NSAgMTMgICAgICAgIC0+ICAxLjYwNDlFKzUgSW5leGFjdCBSb3VuZGVkCitybXV4NTE4ICBtdWx0aXBseSAxMjM1NSAgMTIgICAgICAgIC0+ICAxLjQ4MjZFKzUgUm91bmRlZAorcm11eDUxOSAgbXVsdGlwbHkgMTIzNTUgIDEzICAgICAgICAtPiAgMS42MDYyRSs1IEluZXhhY3QgUm91bmRlZAorLS0gW3JtdXg1MTYgJiBybXV4NTE4XSBjYW4gc3VycHJpc2UKKworcm91bmRpbmc6IGZsb29yCitybXV4NjAxICBtdWx0aXBseSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcm11eDYwMiAgbXVsdGlwbHkgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDYgSW5leGFjdCBSb3VuZGVkCitybXV4NjAzICBtdWx0aXBseSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjM1NyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg2MDQgIG11bHRpcGx5IDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyNDY4IEluZXhhY3QgUm91bmRlZAorcm11eDYwNSAgbXVsdGlwbHkgMTIzNDUgIDEuMSAgICAgICAtPiAgMTM1NzkgSW5leGFjdCBSb3VuZGVkCitybXV4NjA2ICBtdWx0aXBseSAxMjM0NSAgNCAgICAgICAgIC0+ICA0OTM4MAorcm11eDYwNyAgbXVsdGlwbHkgMTIzNDUgIDQuMDAwMSAgICAtPiAgNDkzODEgSW5leGFjdCBSb3VuZGVkCitybXV4NjA4ICBtdWx0aXBseSAxMjM0NSAgNC45ICAgICAgIC0+ICA2MDQ5MCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg2MDkgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDYxNjAxIEluZXhhY3QgUm91bmRlZAorcm11eDYxMCAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5ICAgICAtPiAgNjE3MTIgSW5leGFjdCBSb3VuZGVkCitybXV4NjExICBtdWx0aXBseSAxMjM0NSAgNC45OTk5ICAgIC0+ICA2MTcyMyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg2MTIgIG11bHRpcGx5IDEyMzQ1ICA1ICAgICAgICAgLT4gIDYxNzI1CitybXV4NjEzICBtdWx0aXBseSAxMjM0NSAgNS4wMDAxICAgIC0+ICA2MTcyNiBJbmV4YWN0IFJvdW5kZWQKK3JtdXg2MTQgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMSAgICAgLT4gIDYxNzM3IEluZXhhY3QgUm91bmRlZAorcm11eDYxNSAgbXVsdGlwbHkgMTIzNDUgIDUuMDEgICAgICAtPiAgNjE4NDggSW5leGFjdCBSb3VuZGVkCitybXV4NjE2ICBtdWx0aXBseSAxMjM0NSAgMTIgICAgICAgIC0+ICAxLjQ4MTRFKzUgUm91bmRlZAorcm11eDYxNyAgbXVsdGlwbHkgMTIzNDUgIDEzICAgICAgICAtPiAgMS42MDQ4RSs1IEluZXhhY3QgUm91bmRlZAorcm11eDYxOCAgbXVsdGlwbHkgMTIzNTUgIDEyICAgICAgICAtPiAgMS40ODI2RSs1IFJvdW5kZWQKK3JtdXg2MTkgIG11bHRpcGx5IDEyMzU1ICAxMyAgICAgICAgLT4gIDEuNjA2MUUrNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKK3JtdXg3MDEgIG11bHRpcGx5IDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CitybXV4NzAyICBtdWx0aXBseSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg3MDMgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzU4IEluZXhhY3QgUm91bmRlZAorcm11eDcwNCAgbXVsdGlwbHkgMTIzNDUgIDEuMDEgICAgICAtPiAgMTI0NjkgSW5leGFjdCBSb3VuZGVkCitybXV4NzA1ICBtdWx0aXBseSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMzU4MCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg3MDYgIG11bHRpcGx5IDEyMzQ1ICA0ICAgICAgICAgLT4gIDQ5MzgwCitybXV4NzA3ICBtdWx0aXBseSAxMjM0NSAgNC4wMDAxICAgIC0+ICA0OTM4MiBJbmV4YWN0IFJvdW5kZWQKK3JtdXg3MDggIG11bHRpcGx5IDEyMzQ1ICA0LjkgICAgICAgLT4gIDYwNDkxIEluZXhhY3QgUm91bmRlZAorcm11eDcwOSAgbXVsdGlwbHkgMTIzNDUgIDQuOTkgICAgICAtPiAgNjE2MDIgSW5leGFjdCBSb3VuZGVkCitybXV4NzEwICBtdWx0aXBseSAxMjM0NSAgNC45OTkgICAgIC0+ICA2MTcxMyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg3MTEgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDYxNzI0IEluZXhhY3QgUm91bmRlZAorcm11eDcxMiAgbXVsdGlwbHkgMTIzNDUgIDUgICAgICAgICAtPiAgNjE3MjUKK3JtdXg3MTMgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMDEgICAgLT4gIDYxNzI3IEluZXhhY3QgUm91bmRlZAorcm11eDcxNCAgbXVsdGlwbHkgMTIzNDUgIDUuMDAxICAgICAtPiAgNjE3MzggSW5leGFjdCBSb3VuZGVkCitybXV4NzE1ICBtdWx0aXBseSAxMjM0NSAgNS4wMSAgICAgIC0+ICA2MTg0OSBJbmV4YWN0IFJvdW5kZWQKK3JtdXg3MTYgIG11bHRpcGx5IDEyMzQ1ICAxMiAgICAgICAgLT4gIDEuNDgxNEUrNSBSb3VuZGVkCitybXV4NzE3ICBtdWx0aXBseSAxMjM0NSAgMTMgICAgICAgIC0+ICAxLjYwNDlFKzUgSW5leGFjdCBSb3VuZGVkCitybXV4NzE4ICBtdWx0aXBseSAxMjM1NSAgMTIgICAgICAgIC0+ICAxLjQ4MjZFKzUgUm91bmRlZAorcm11eDcxOSAgbXVsdGlwbHkgMTIzNTUgIDEzICAgICAgICAtPiAgMS42MDYyRSs1IEluZXhhY3QgUm91bmRlZAorCistLSBQb3dlciBvcGVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityb3VuZGluZzogZG93bgorcnBveDEwMSAgcG93ZXIgMTIzNDUgIC01ICAgICAgICAtPiAgMy40ODc3RS0yMSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gxMDIgIHBvd2VyIDEyMzQ1ICAtNCAgICAgICAgLT4gIDQuMzA1NkUtMTcgSW5leGFjdCBSb3VuZGVkCitycG94MTAzICBwb3dlciAxMjM0NSAgLTMgICAgICAgIC0+ICA1LjMxNTJFLTEzIEluZXhhY3QgUm91bmRlZAorcnBveDEwNCAgcG93ZXIgMTIzNDUgIC0yICAgICAgICAtPiAgNi41NjE3RS05IEluZXhhY3QgUm91bmRlZAorcnBveDEwNSAgcG93ZXIgMTIzNDUgIC0xICAgICAgICAtPiAgMC4wMDAwODEwMDQgSW5leGFjdCBSb3VuZGVkCitycG94MTA2ICBwb3dlciAxMjM0NSAgMCAgICAgICAgIC0+ICAxCitycG94MTA3ICBwb3dlciAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcnBveDEwOCAgcG93ZXIgMTIzNDUgIDIgICAgICAgICAtPiAgMS41MjM5RSs4IEluZXhhY3QgUm91bmRlZAorcnBveDEwOSAgcG93ZXIgMTIzNDUgIDMgICAgICAgICAtPiAgMS44ODEzRSsxMiBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gxMTAgIHBvd2VyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDIuMzIyNUUrMTYgSW5leGFjdCBSb3VuZGVkCitycG94MTExICBwb3dlciAxMjM0NSAgNSAgICAgICAgIC0+ICAyLjg2NzFFKzIwIEluZXhhY3QgUm91bmRlZAorcnBveDExMiAgcG93ZXIgICA0MTUgIDIgICAgICAgICAtPiAgMS43MjIyRSs1IEluZXhhY3QgUm91bmRlZAorcnBveDExMyAgcG93ZXIgICAgNzUgIDMgICAgICAgICAtPiAgNC4yMTg3RSs1IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCitycG94MjAxICBwb3dlciAxMjM0NSAgLTUgICAgICAgIC0+ICAzLjQ4NzdFLTIxIEluZXhhY3QgUm91bmRlZAorcnBveDIwMiAgcG93ZXIgMTIzNDUgIC00ICAgICAgICAtPiAgNC4zMDU2RS0xNyBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gyMDMgIHBvd2VyIDEyMzQ1ICAtMyAgICAgICAgLT4gIDUuMzE1M0UtMTMgSW5leGFjdCBSb3VuZGVkCitycG94MjA0ICBwb3dlciAxMjM0NSAgLTIgICAgICAgIC0+ICA2LjU2MTdFLTkgSW5leGFjdCBSb3VuZGVkCitycG94MjA1ICBwb3dlciAxMjM0NSAgLTEgICAgICAgIC0+ICAwLjAwMDA4MTAwNCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gyMDYgIHBvd2VyIDEyMzQ1ICAwICAgICAgICAgLT4gIDEKK3Jwb3gyMDcgIHBvd2VyIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CitycG94MjA4ICBwb3dlciAxMjM0NSAgMiAgICAgICAgIC0+ICAxLjUyNDBFKzggSW5leGFjdCBSb3VuZGVkCitycG94MjA5ICBwb3dlciAxMjM0NSAgMyAgICAgICAgIC0+ICAxLjg4MTRFKzEyIEluZXhhY3QgUm91bmRlZAorcnBveDIxMCAgcG93ZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMi4zMjI1RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gyMTEgIHBvd2VyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDIuODY3MkUrMjAgSW5leGFjdCBSb3VuZGVkCitycG94MjEyICBwb3dlciAgIDQxNSAgMiAgICAgICAgIC0+ICAxLjcyMjJFKzUgSW5leGFjdCBSb3VuZGVkCitycG94MjEzICBwb3dlciAgICA3NSAgMyAgICAgICAgIC0+ICA0LjIxODdFKzUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK3Jwb3gzMDEgIHBvd2VyIDEyMzQ1ICAtNSAgICAgICAgLT4gIDMuNDg3N0UtMjEgSW5leGFjdCBSb3VuZGVkCitycG94MzAyICBwb3dlciAxMjM0NSAgLTQgICAgICAgIC0+ICA0LjMwNTZFLTE3IEluZXhhY3QgUm91bmRlZAorcnBveDMwMyAgcG93ZXIgMTIzNDUgIC0zICAgICAgICAtPiAgNS4zMTUzRS0xMyBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gzMDQgIHBvd2VyIDEyMzQ1ICAtMiAgICAgICAgLT4gIDYuNTYxN0UtOSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gzMDUgIHBvd2VyIDEyMzQ1ICAtMSAgICAgICAgLT4gIDAuMDAwMDgxMDA0IEluZXhhY3QgUm91bmRlZAorcnBveDMwNiAgcG93ZXIgMTIzNDUgIDAgICAgICAgICAtPiAgMQorcnBveDMwNyAgcG93ZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3Jwb3gzMDggIHBvd2VyIDEyMzQ1ICAyICAgICAgICAgLT4gIDEuNTI0MEUrOCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gzMDkgIHBvd2VyIDEyMzQ1ICAzICAgICAgICAgLT4gIDEuODgxNEUrMTIgSW5leGFjdCBSb3VuZGVkCitycG94MzEwICBwb3dlciAxMjM0NSAgNCAgICAgICAgIC0+ICAyLjMyMjVFKzE2IEluZXhhY3QgUm91bmRlZAorcnBveDMxMSAgcG93ZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMi44NjcyRSsyMCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gzMTIgIHBvd2VyICAgNDE1ICAyICAgICAgICAgLT4gIDEuNzIyMkUrNSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gzMTMgIHBvd2VyICAgIDc1ICAzICAgICAgICAgLT4gIDQuMjE4OEUrNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK3Jwb3g0MDEgIHBvd2VyIDEyMzQ1ICAtNSAgICAgICAgLT4gIDMuNDg3N0UtMjEgSW5leGFjdCBSb3VuZGVkCitycG94NDAyICBwb3dlciAxMjM0NSAgLTQgICAgICAgIC0+ICA0LjMwNTZFLTE3IEluZXhhY3QgUm91bmRlZAorcnBveDQwMyAgcG93ZXIgMTIzNDUgIC0zICAgICAgICAtPiAgNS4zMTUzRS0xMyBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g0MDQgIHBvd2VyIDEyMzQ1ICAtMiAgICAgICAgLT4gIDYuNTYxN0UtOSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g0MDUgIHBvd2VyIDEyMzQ1ICAtMSAgICAgICAgLT4gIDAuMDAwMDgxMDA0IEluZXhhY3QgUm91bmRlZAorcnBveDQwNiAgcG93ZXIgMTIzNDUgIDAgICAgICAgICAtPiAgMQorcnBveDQwNyAgcG93ZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3Jwb3g0MDggIHBvd2VyIDEyMzQ1ICAyICAgICAgICAgLT4gIDEuNTI0MEUrOCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g0MDkgIHBvd2VyIDEyMzQ1ICAzICAgICAgICAgLT4gIDEuODgxNEUrMTIgSW5leGFjdCBSb3VuZGVkCitycG94NDEwICBwb3dlciAxMjM0NSAgNCAgICAgICAgIC0+ICAyLjMyMjVFKzE2IEluZXhhY3QgUm91bmRlZAorcnBveDQxMSAgcG93ZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMi44NjcyRSsyMCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g0MTIgIHBvd2VyICAgNDE1ICAyICAgICAgICAgLT4gIDEuNzIyM0UrNSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g0MTMgIHBvd2VyICAgIDc1ICAzICAgICAgICAgLT4gIDQuMjE4OEUrNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IHVwCitycG94NTAxICBwb3dlciAxMjM0NSAgLTUgICAgICAgIC0+ICAzLjQ4NzhFLTIxIEluZXhhY3QgUm91bmRlZAorcnBveDUwMiAgcG93ZXIgMTIzNDUgIC00ICAgICAgICAtPiAgNC4zMDU3RS0xNyBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g1MDMgIHBvd2VyIDEyMzQ1ICAtMyAgICAgICAgLT4gIDUuMzE1M0UtMTMgSW5leGFjdCBSb3VuZGVkCitycG94NTA0ICBwb3dlciAxMjM0NSAgLTIgICAgICAgIC0+ICA2LjU2MThFLTkgSW5leGFjdCBSb3VuZGVkCitycG94NTA1ICBwb3dlciAxMjM0NSAgLTEgICAgICAgIC0+ICAwLjAwMDA4MTAwNSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g1MDYgIHBvd2VyIDEyMzQ1ICAwICAgICAgICAgLT4gIDEKK3Jwb3g1MDcgIHBvd2VyIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CitycG94NTA4ICBwb3dlciAxMjM0NSAgMiAgICAgICAgIC0+ICAxLjUyNDBFKzggSW5leGFjdCBSb3VuZGVkCitycG94NTA5ICBwb3dlciAxMjM0NSAgMyAgICAgICAgIC0+ICAxLjg4MTRFKzEyIEluZXhhY3QgUm91bmRlZAorcnBveDUxMCAgcG93ZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMi4zMjI2RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g1MTEgIHBvd2VyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDIuODY3MkUrMjAgSW5leGFjdCBSb3VuZGVkCitycG94NTEyICBwb3dlciAgIDQxNSAgMiAgICAgICAgIC0+ICAxLjcyMjNFKzUgSW5leGFjdCBSb3VuZGVkCitycG94NTEzICBwb3dlciAgICA3NSAgMyAgICAgICAgIC0+ICA0LjIxODhFKzUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBmbG9vcgorcnBveDYwMSAgcG93ZXIgMTIzNDUgIC01ICAgICAgICAtPiAgMy40ODc3RS0yMSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g2MDIgIHBvd2VyIDEyMzQ1ICAtNCAgICAgICAgLT4gIDQuMzA1NkUtMTcgSW5leGFjdCBSb3VuZGVkCitycG94NjAzICBwb3dlciAxMjM0NSAgLTMgICAgICAgIC0+ICA1LjMxNTJFLTEzIEluZXhhY3QgUm91bmRlZAorcnBveDYwNCAgcG93ZXIgMTIzNDUgIC0yICAgICAgICAtPiAgNi41NjE3RS05IEluZXhhY3QgUm91bmRlZAorcnBveDYwNSAgcG93ZXIgMTIzNDUgIC0xICAgICAgICAtPiAgMC4wMDAwODEwMDQgSW5leGFjdCBSb3VuZGVkCitycG94NjA2ICBwb3dlciAxMjM0NSAgMCAgICAgICAgIC0+ICAxCitycG94NjA3ICBwb3dlciAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcnBveDYwOCAgcG93ZXIgMTIzNDUgIDIgICAgICAgICAtPiAgMS41MjM5RSs4IEluZXhhY3QgUm91bmRlZAorcnBveDYwOSAgcG93ZXIgMTIzNDUgIDMgICAgICAgICAtPiAgMS44ODEzRSsxMiBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g2MTAgIHBvd2VyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDIuMzIyNUUrMTYgSW5leGFjdCBSb3VuZGVkCitycG94NjExICBwb3dlciAxMjM0NSAgNSAgICAgICAgIC0+ICAyLjg2NzFFKzIwIEluZXhhY3QgUm91bmRlZAorcnBveDYxMiAgcG93ZXIgICA0MTUgIDIgICAgICAgICAtPiAgMS43MjIyRSs1IEluZXhhY3QgUm91bmRlZAorcnBveDYxMyAgcG93ZXIgICAgNzUgIDMgICAgICAgICAtPiAgNC4yMTg3RSs1IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogY2VpbGluZworcnBveDcwMSAgcG93ZXIgMTIzNDUgIC01ICAgICAgICAtPiAgMy40ODc4RS0yMSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g3MDIgIHBvd2VyIDEyMzQ1ICAtNCAgICAgICAgLT4gIDQuMzA1N0UtMTcgSW5leGFjdCBSb3VuZGVkCitycG94NzAzICBwb3dlciAxMjM0NSAgLTMgICAgICAgIC0+ICA1LjMxNTNFLTEzIEluZXhhY3QgUm91bmRlZAorcnBveDcwNCAgcG93ZXIgMTIzNDUgIC0yICAgICAgICAtPiAgNi41NjE4RS05IEluZXhhY3QgUm91bmRlZAorcnBveDcwNSAgcG93ZXIgMTIzNDUgIC0xICAgICAgICAtPiAgMC4wMDAwODEwMDUgSW5leGFjdCBSb3VuZGVkCitycG94NzA2ICBwb3dlciAxMjM0NSAgMCAgICAgICAgIC0+ICAxCitycG94NzA3ICBwb3dlciAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcnBveDcwOCAgcG93ZXIgMTIzNDUgIDIgICAgICAgICAtPiAgMS41MjQwRSs4IEluZXhhY3QgUm91bmRlZAorcnBveDcwOSAgcG93ZXIgMTIzNDUgIDMgICAgICAgICAtPiAgMS44ODE0RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g3MTAgIHBvd2VyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDIuMzIyNkUrMTYgSW5leGFjdCBSb3VuZGVkCitycG94NzExICBwb3dlciAxMjM0NSAgNSAgICAgICAgIC0+ICAyLjg2NzJFKzIwIEluZXhhY3QgUm91bmRlZAorcnBveDcxMiAgcG93ZXIgICA0MTUgIDIgICAgICAgICAtPiAgMS43MjIzRSs1IEluZXhhY3QgUm91bmRlZAorcnBveDcxMyAgcG93ZXIgICAgNzUgIDMgICAgICAgICAtPiAgNC4yMTg4RSs1IEluZXhhY3QgUm91bmRlZAorCistLSBVbmRlcmZsb3cgU3Vibm9ybWFsIGFuZCBvdmVyZmxvdyB2YWx1ZXMgdmFyeSB3aXRoIHJvdW5kaW5nIG1vZGUgYW5kIHNpZ24KK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Cityb3VuZGluZzogZG93bgorcm92eDEwMCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIDkuOTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDEwMSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTkuOTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDEwMiAgZGl2aWRlICAgICAxRS05ICA5RSs5OTk5OTk5OTkgLT4gIDBFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcm92eDEwNCAgZGl2aWRlICAgIC0xRS05ICA5RSs5OTk5OTk5OTkgLT4gLTBFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCityb3VuZGluZzogdXAKK3JvdngxMTAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxMTEgIG11bHRpcGx5ICAtMTAgICAgOUUrOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxMTIgIGRpdmlkZSAgICAgMUUtOSAgOUUrOTk5OTk5OTk5IC0+ICAxRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCityb3Z4MTE0ICBkaXZpZGUgICAgLTFFLTkgIDlFKzk5OTk5OTk5OSAtPiAtMUUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogY2VpbGluZworcm92eDEyMCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDEyMSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTkuOTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDEyMiAgZGl2aWRlICAgICAxRS05ICA5RSs5OTk5OTk5OTkgLT4gIDFFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3JvdngxMjQgIGRpdmlkZSAgICAtMUUtOSAgOUUrOTk5OTk5OTk5IC0+IC0wRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworcm91bmRpbmc6IGZsb29yCityb3Z4MTMwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOS45OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MTMxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MTMyICBkaXZpZGUgICAgIDFFLTkgIDlFKzk5OTk5OTk5OSAtPiAgMEUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityb3Z4MTM0ICBkaXZpZGUgICAgLTFFLTkgIDlFKzk5OTk5OTk5OSAtPiAtMUUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorcm92eDE0MCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDE0MSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDE0MiAgZGl2aWRlICAgICAxRS05ICA5RSs5OTk5OTk5OTkgLT4gIDBFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcm92eDE0NCAgZGl2aWRlICAgIC0xRS05ICA5RSs5OTk5OTk5OTkgLT4gLTBFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCityb3VuZGluZzogaGFsZl9ldmVuCityb3Z4MTUwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MTUxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MTUyICBkaXZpZGUgICAgIDFFLTkgIDlFKzk5OTk5OTk5OSAtPiAgMEUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityb3Z4MTU0ICBkaXZpZGUgICAgLTFFLTkgIDlFKzk5OTk5OTk5OSAtPiAtMEUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK3JvdngxNjAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxNjEgIG11bHRpcGx5ICAtMTAgICAgOUUrOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxNjIgIGRpdmlkZSAgICAgMUUtOSAgOUUrOTk5OTk5OTk5IC0+ICAwRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JvdngxNjQgIGRpdmlkZSAgICAtMUUtOSAgOUUrOTk5OTk5OTk5IC0+IC0wRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gY2hlY2sgbWF4aW11bSBmaW5pdGUgdmFsdWUgb3ZlciBhIHJhbmdlIG9mIHByZWNpc2lvbnMKK3JvdW5kaW5nOiBkb3duCitwcmVjaXNpb246IDEKK3JvdngyMDAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICA5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjAxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyCityb3Z4MjEwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOS45RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjExICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMKK3JvdngyMjAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICA5Ljk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjIxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0Cityb3Z4MjMwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOS45OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngyMzEgIG11bHRpcGx5ICAtMTAgICAgOUUrOTk5OTk5OTk5IC0+IC05Ljk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA1Cityb3Z4MjQwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOS45OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjQxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDYKK3JvdngyNTAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICA5Ljk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjUxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA3Cityb3Z4MjYwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOS45OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngyNjEgIG11bHRpcGx5ICAtMTAgICAgOUUrOTk5OTk5OTk5IC0+IC05Ljk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA4Cityb3Z4MjcwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOS45OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjcxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDkKK3JvdngyODAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjgxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMAorcm92eDI5MCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIDkuOTk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjkxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45OTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gcmVwcmlzZSByb3VuZGluZyBtb2RlIGVmZmVjdCAodXNpbmcgbXVsdGlwbGllcyBzbyBwcmVjaXNpb24gZGlyZWN0aXZlIHVzZWQpCitwcmVjaXNpb246IDkKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK3JvdW5kaW5nOiBoYWxmX3VwCitybWV4NDAwIG11bHRpcGx5IC05Ljk5OUUrOTk5OTk5OTk5IDEwIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JtZXg0MDEgbXVsdGlwbHkgIDkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorcm1leDQwMiBtdWx0aXBseSAtOS45OTlFKzk5OTk5OTk5OSAxMCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitybWV4NDAzIG11bHRpcGx5ICA5Ljk5OUUrOTk5OTk5OTk5IDEwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK3JtZXg0MDQgbXVsdGlwbHkgLTkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm1leDQwNSBtdWx0aXBseSAgOS45OTlFKzk5OTk5OTk5OSAxMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK3JtZXg0MDYgbXVsdGlwbHkgLTkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm1leDQwNyBtdWx0aXBseSAgOS45OTlFKzk5OTk5OTk5OSAxMCAtPiAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK3JtZXg0MDggbXVsdGlwbHkgLTkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JtZXg0MDkgbXVsdGlwbHkgIDkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCitybWV4NDEwIG11bHRpcGx5IC05Ljk5OUUrOTk5OTk5OTk5IDEwIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JtZXg0MTEgbXVsdGlwbHkgIDkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK3JtZXg0MTIgbXVsdGlwbHkgLTkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JtZXg0MTMgbXVsdGlwbHkgIDkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0tLS0gUm91bmQtZm9yLXJlcm91bmQgLS0tLS0KK3JvdW5kaW5nOiAgICAwNXVwCitwcmVjaXNpb246ICAgNSAgICAgICAgICAgLS0gZm9yIGVhc2llciB2aXN1YWwgaW5zcGVjdGlvbgorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKKworLS0gYmFzaWMgcm91bmRpbmc7IHJlYWxseSBpcyBqdXN0IDAgYW5kIDUgdXAKK3IwNXVwMDAxIGFkZCAxMjM0MCAgMC4wMDEgICAgIC0+IDEyMzQxIEluZXhhY3QgUm91bmRlZAorcjA1dXAwMDIgYWRkIDEyMzQxICAwLjAwMSAgICAgLT4gMTIzNDEgSW5leGFjdCBSb3VuZGVkCityMDV1cDAwMyBhZGQgMTIzNDIgIDAuMDAxICAgICAtPiAxMjM0MiBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDA0IGFkZCAxMjM0MyAgMC4wMDEgICAgIC0+IDEyMzQzIEluZXhhY3QgUm91bmRlZAorcjA1dXAwMDUgYWRkIDEyMzQ0ICAwLjAwMSAgICAgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMDV1cDAwNiBhZGQgMTIzNDUgIDAuMDAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDA3IGFkZCAxMjM0NiAgMC4wMDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjA1dXAwMDggYWRkIDEyMzQ3ICAwLjAwMSAgICAgLT4gMTIzNDcgSW5leGFjdCBSb3VuZGVkCityMDV1cDAwOSBhZGQgMTIzNDggIDAuMDAxICAgICAtPiAxMjM0OCBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDEwIGFkZCAxMjM0OSAgMC4wMDEgICAgIC0+IDEyMzQ5IEluZXhhY3QgUm91bmRlZAorCityMDV1cDAxMSBhZGQgMTIzNDAgIDAuMDAwICAgICAtPiAxMjM0MCBSb3VuZGVkCityMDV1cDAxMiBhZGQgMTIzNDEgIDAuMDAwICAgICAtPiAxMjM0MSBSb3VuZGVkCityMDV1cDAxMyBhZGQgMTIzNDIgIDAuMDAwICAgICAtPiAxMjM0MiBSb3VuZGVkCityMDV1cDAxNCBhZGQgMTIzNDMgIDAuMDAwICAgICAtPiAxMjM0MyBSb3VuZGVkCityMDV1cDAxNSBhZGQgMTIzNDQgIDAuMDAwICAgICAtPiAxMjM0NCBSb3VuZGVkCityMDV1cDAxNiBhZGQgMTIzNDUgIDAuMDAwICAgICAtPiAxMjM0NSBSb3VuZGVkCityMDV1cDAxNyBhZGQgMTIzNDYgIDAuMDAwICAgICAtPiAxMjM0NiBSb3VuZGVkCityMDV1cDAxOCBhZGQgMTIzNDcgIDAuMDAwICAgICAtPiAxMjM0NyBSb3VuZGVkCityMDV1cDAxOSBhZGQgMTIzNDggIDAuMDAwICAgICAtPiAxMjM0OCBSb3VuZGVkCityMDV1cDAyMCBhZGQgMTIzNDkgIDAuMDAwICAgICAtPiAxMjM0OSBSb3VuZGVkCisKK3IwNXVwMDIxIGFkZCAxMjM0MCAgMC45MDEgICAgIC0+IDEyMzQxIEluZXhhY3QgUm91bmRlZAorcjA1dXAwMjIgYWRkIDEyMzQxICAwLjkwMSAgICAgLT4gMTIzNDEgSW5leGFjdCBSb3VuZGVkCityMDV1cDAyMyBhZGQgMTIzNDIgIDAuOTAxICAgICAtPiAxMjM0MiBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDI0IGFkZCAxMjM0MyAgMC45MDEgICAgIC0+IDEyMzQzIEluZXhhY3QgUm91bmRlZAorcjA1dXAwMjUgYWRkIDEyMzQ0ICAwLjkwMSAgICAgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMDV1cDAyNiBhZGQgMTIzNDUgIDAuOTAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDI3IGFkZCAxMjM0NiAgMC45MDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjA1dXAwMjggYWRkIDEyMzQ3ICAwLjkwMSAgICAgLT4gMTIzNDcgSW5leGFjdCBSb3VuZGVkCityMDV1cDAyOSBhZGQgMTIzNDggIDAuOTAxICAgICAtPiAxMjM0OCBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDMwIGFkZCAxMjM0OSAgMC45MDEgICAgIC0+IDEyMzQ5IEluZXhhY3QgUm91bmRlZAorCityMDV1cDAzMSBhZGQgLTEyMzQwICAtMC4wMDEgICAgIC0+IC0xMjM0MSBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDMyIGFkZCAtMTIzNDEgIC0wLjAwMSAgICAgLT4gLTEyMzQxIEluZXhhY3QgUm91bmRlZAorcjA1dXAwMzMgYWRkIC0xMjM0MiAgLTAuMDAxICAgICAtPiAtMTIzNDIgSW5leGFjdCBSb3VuZGVkCityMDV1cDAzNCBhZGQgLTEyMzQzICAtMC4wMDEgICAgIC0+IC0xMjM0MyBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDM1IGFkZCAtMTIzNDQgIC0wLjAwMSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjA1dXAwMzYgYWRkIC0xMjM0NSAgLTAuMDAxICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMDV1cDAzNyBhZGQgLTEyMzQ2ICAtMC4wMDEgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDM4IGFkZCAtMTIzNDcgIC0wLjAwMSAgICAgLT4gLTEyMzQ3IEluZXhhY3QgUm91bmRlZAorcjA1dXAwMzkgYWRkIC0xMjM0OCAgLTAuMDAxICAgICAtPiAtMTIzNDggSW5leGFjdCBSb3VuZGVkCityMDV1cDA0MCBhZGQgLTEyMzQ5ICAtMC4wMDEgICAgIC0+IC0xMjM0OSBJbmV4YWN0IFJvdW5kZWQKKworcjA1dXAwNDEgYWRkIC0xMjM0MCAgIDAuMDAxICAgICAtPiAtMTIzMzkgSW5leGFjdCBSb3VuZGVkCityMDV1cDA0MiBhZGQgLTEyMzQxICAgMC4wMDEgICAgIC0+IC0xMjM0MSBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDQzIGFkZCAtMTIzNDIgICAwLjAwMSAgICAgLT4gLTEyMzQxIEluZXhhY3QgUm91bmRlZAorcjA1dXAwNDQgYWRkIC0xMjM0MyAgIDAuMDAxICAgICAtPiAtMTIzNDIgSW5leGFjdCBSb3VuZGVkCityMDV1cDA0NSBhZGQgLTEyMzQ0ICAgMC4wMDEgICAgIC0+IC0xMjM0MyBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDQ2IGFkZCAtMTIzNDUgICAwLjAwMSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjA1dXAwNDcgYWRkIC0xMjM0NiAgIDAuMDAxICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMDV1cDA0OCBhZGQgLTEyMzQ3ICAgMC4wMDEgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDQ5IGFkZCAtMTIzNDggICAwLjAwMSAgICAgLT4gLTEyMzQ3IEluZXhhY3QgUm91bmRlZAorcjA1dXAwNTAgYWRkIC0xMjM0OSAgIDAuMDAxICAgICAtPiAtMTIzNDggSW5leGFjdCBSb3VuZGVkCisKKy0tIEFkZGl0aW9uIG9wZXJhdG9ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBbVGhlIGZpcnN0IGZldyBvZiB0aGVzZSBjaGVjayBuZWdhdGl2ZSByZXNpZHVlIHBvc3NpYmlsaXRpZXM7IHRoZXNlCistLSBjYXNlcyBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBuZWdhdGl2ZSByZXNpZHVlIGluIGZhc3RwYXRoc10KKworcjBhZHgxMDAgIGFkZCAxMjM0NSAtMC4xICAgICAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMDEgIGFkZCAxMjM0NSAtMC4wMSAgICAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMDIgIGFkZCAxMjM0NSAtMC4wMDEgICAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMDMgIGFkZCAxMjM0NSAtMC4wMDAwMSAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMDQgIGFkZCAxMjM0NSAtMC4wMDAwMDEgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMDUgIGFkZCAxMjM0NSAtMC4wMDAwMDAxIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMDYgIGFkZCAxMjM0NSAgMCAgICAgICAgIC0+IDEyMzQ1CityMGFkeDEwNyAgYWRkIDEyMzQ1ICAwLjAwMDAwMDEgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMGFkeDEwOCAgYWRkIDEyMzQ1ICAwLjAwMDAwMSAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMGFkeDEwOSAgYWRkIDEyMzQ1ICAwLjAwMDAxICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMGFkeDExMCAgYWRkIDEyMzQ1ICAwLjAwMDEgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMGFkeDExMSAgYWRkIDEyMzQ1ICAwLjAwMSAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMGFkeDExMiAgYWRkIDEyMzQ1ICAwLjAxICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMGFkeDExMyAgYWRkIDEyMzQ1ICAwLjEgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3IwYWR4MTE1ICBhZGQgMTIzNDYgIDAuNDk5OTkgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTE2ICBhZGQgMTIzNDYgIDAuNSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTE3ICBhZGQgMTIzNDYgIDAuNTAwMDEgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworcjBhZHgxMjAgIGFkZCAxMjM0NSAgMC40ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMjEgIGFkZCAxMjM0NSAgMC40OSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMjIgIGFkZCAxMjM0NSAgMC40OTkgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMjMgIGFkZCAxMjM0NSAgMC40OTk5OSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMjQgIGFkZCAxMjM0NSAgMC41ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMjUgIGFkZCAxMjM0NSAgMC41MDAwMSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMjYgIGFkZCAxMjM0NSAgMC41MDAxICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMjcgIGFkZCAxMjM0NSAgMC41MDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMjggIGFkZCAxMjM0NSAgMC41MSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMjkgIGFkZCAxMjM0NSAgMC42ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZXMuLi4KKworcjBzdXgxMDAgIGFkZCAtMTIzNDUgLTAuMSAgICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMHN1eDEwMSAgYWRkIC0xMjM0NSAtMC4wMSAgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTAyICBhZGQgLTEyMzQ1IC0wLjAwMSAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMDMgIGFkZCAtMTIzNDUgLTAuMDAwMDEgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMHN1eDEwNCAgYWRkIC0xMjM0NSAtMC4wMDAwMDEgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTA1ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMDEgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMDYgIGFkZCAtMTIzNDUgIDAgICAgICAgICAtPiAtMTIzNDUKK3Iwc3V4MTA3ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMDEgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMDggIGFkZCAtMTIzNDUgIDAuMDAwMDAxICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDEwOSAgYWRkIC0xMjM0NSAgMC4wMDAwMSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTEwICBhZGQgLTEyMzQ1ICAwLjAwMDEgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMTEgIGFkZCAtMTIzNDUgIDAuMDAxICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDExMiAgYWRkIC0xMjM0NSAgMC4wMSAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTEzICBhZGQgLTEyMzQ1ICAwLjEgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorCityMHN1eDExNSAgYWRkIC0xMjM0NiAgMC40OTk5OSAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTE2ICBhZGQgLTEyMzQ2ICAwLjUgICAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMTcgIGFkZCAtMTIzNDYgIDAuNTAwMDEgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3Iwc3V4MTIwICBhZGQgLTEyMzQ1ICAwLjQgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMjEgIGFkZCAtMTIzNDUgIDAuNDkgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDEyMiAgYWRkIC0xMjM0NSAgMC40OTkgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTIzICBhZGQgLTEyMzQ1ICAwLjQ5OTk5ICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMjQgIGFkZCAtMTIzNDUgIDAuNSAgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDEyNSAgYWRkIC0xMjM0NSAgMC41MDAwMSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTI2ICBhZGQgLTEyMzQ1ICAwLjUwMDEgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMjcgIGFkZCAtMTIzNDUgIDAuNTAxICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDEyOCAgYWRkIC0xMjM0NSAgMC41MSAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTI5ICBhZGQgLTEyMzQ1ICAwLjYgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorCistLSBDaGVjayBjYW5jZWxsYXRpb24gc3VidHJhY3Rpb25zCistLSAoVGhlIElFRUUgODU0ICdjdXJpb3VzIHJ1bGUnIGluICQ2LjMpCisKK3IwemV4MDAxICBhZGQgIDAgICAgMCAgICAtPiAgMAorcjB6ZXgwMDIgIGFkZCAgMCAgIC0wICAgIC0+ICAwCityMHpleDAwMyAgYWRkIC0wICAgIDAgICAgLT4gIDAKK3IwemV4MDA0ICBhZGQgLTAgICAtMCAgICAtPiAtMAorcjB6ZXgwMDUgIGFkZCAgMSAgIC0xICAgIC0+ICAwCityMHpleDAwNiAgYWRkIC0xICAgIDEgICAgLT4gIDAKK3IwemV4MDA3ICBhZGQgIDEuNSAtMS41ICAtPiAgMC4wCityMHpleDAwOCAgYWRkIC0xLjUgIDEuNSAgLT4gIDAuMAorcjB6ZXgwMDkgIGFkZCAgMiAgIC0yICAgIC0+ICAwCityMHpleDAxMCAgYWRkIC0yICAgIDIgICAgLT4gIDAKKworCistLSBEaXZpc2lvbiBvcGVyYXRvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityMGR2eDEwMSAgZGl2aWRlIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CityMGR2eDEwMiAgZGl2aWRlIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQzIEluZXhhY3QgUm91bmRlZAorcjBkdngxMDMgIGRpdmlkZSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjMzMiBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTA0ICBkaXZpZGUgMTIzNDUgIDEuMDEgICAgICAtPiAgMTIyMjIgSW5leGFjdCBSb3VuZGVkCityMGR2eDEwNSAgZGl2aWRlIDEyMzQ1ICAxLjEgICAgICAgLT4gIDExMjIyIEluZXhhY3QgUm91bmRlZAorcjBkdngxMDYgIGRpdmlkZSAxMjM1NSAgNCAgICAgICAgIC0+ICAgMzA4OC43IEluZXhhY3QgUm91bmRlZAorcjBkdngxMDcgIGRpdmlkZSAxMjM0NSAgNCAgICAgICAgIC0+ICAgMzA4Ni4yIEluZXhhY3QgUm91bmRlZAorcjBkdngxMDggIGRpdmlkZSAxMjM1NSAgNC4wMDAxICAgIC0+ICAgMzA4OC42IEluZXhhY3QgUm91bmRlZAorcjBkdngxMDkgIGRpdmlkZSAxMjM0NSAgNC4wMDAxICAgIC0+ICAgMzA4Ni4xIEluZXhhY3QgUm91bmRlZAorcjBkdngxMTAgIGRpdmlkZSAxMjM0NSAgNC45ICAgICAgIC0+ICAgMjUxOS4zIEluZXhhY3QgUm91bmRlZAorcjBkdngxMTEgIGRpdmlkZSAxMjM0NSAgNC45OSAgICAgIC0+ICAgMjQ3My45IEluZXhhY3QgUm91bmRlZAorcjBkdngxMTIgIGRpdmlkZSAxMjM0NSAgNC45OTkgICAgIC0+ICAgMjQ2OS40IEluZXhhY3QgUm91bmRlZAorcjBkdngxMTMgIGRpdmlkZSAxMjM0NSAgNC45OTk5ICAgIC0+ICAgMjQ2OS4xIEluZXhhY3QgUm91bmRlZAorcjBkdngxMTQgIGRpdmlkZSAxMjM0NSAgNSAgICAgICAgIC0+ICAgMjQ2OQorcjBkdngxMTUgIGRpdmlkZSAxMjM0NSAgNS4wMDAxICAgIC0+ICAyNDY4LjkgSW5leGFjdCBSb3VuZGVkCityMGR2eDExNiAgZGl2aWRlIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDI0NjguNiBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTE3ICBkaXZpZGUgMTIzNDUgIDUuMDEgICAgICAtPiAgMjQ2NC4xIEluZXhhY3QgUm91bmRlZAorcjBkdngxMTggIGRpdmlkZSAxMjM0NSAgNS4xICAgICAgIC0+ICAyNDIwLjYgSW5leGFjdCBSb3VuZGVkCisKKy0tIFtkaXZpZGVJbnRlZ2VyIGFuZCByZW1haW5kZXIgdW5hZmZlY3RlZF0KKworLS0gTXVsdGlwbGljYXRpb24gb3BlcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcjBtdXgxMDEgIG11bHRpcGx5IDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CityMG11eDEwMiAgbXVsdGlwbHkgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMG11eDEwMyAgbXVsdGlwbHkgMTIzNDUgIDEuMDAxICAgICAtPiAgMTIzNTcgSW5leGFjdCBSb3VuZGVkCityMG11eDEwNCAgbXVsdGlwbHkgMTIzNDUgIDEuMDEgICAgICAtPiAgMTI0NjggSW5leGFjdCBSb3VuZGVkCityMG11eDEwNSAgbXVsdGlwbHkgMTIzNDUgIDEuMSAgICAgICAtPiAgMTM1NzkgSW5leGFjdCBSb3VuZGVkCityMG11eDEwNiAgbXVsdGlwbHkgMTIzNDUgIDQgICAgICAgICAtPiAgNDkzODAKK3IwbXV4MTA3ICBtdWx0aXBseSAxMjM0NSAgNC4wMDAxICAgIC0+ICA0OTM4MSBJbmV4YWN0IFJvdW5kZWQKK3IwbXV4MTA4ICBtdWx0aXBseSAxMjM0NSAgNC45ICAgICAgIC0+ICA2MDQ5MSBJbmV4YWN0IFJvdW5kZWQKK3IwbXV4MTA5ICBtdWx0aXBseSAxMjM0NSAgNC45OSAgICAgIC0+ICA2MTYwMSBJbmV4YWN0IFJvdW5kZWQKK3IwbXV4MTEwICBtdWx0aXBseSAxMjM0NSAgNC45OTkgICAgIC0+ICA2MTcxMiBJbmV4YWN0IFJvdW5kZWQKK3IwbXV4MTExICBtdWx0aXBseSAxMjM0NSAgNC45OTk5ICAgIC0+ICA2MTcyMyBJbmV4YWN0IFJvdW5kZWQKK3IwbXV4MTEyICBtdWx0aXBseSAxMjM0NSAgNSAgICAgICAgIC0+ICA2MTcyNQorcjBtdXgxMTMgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMDEgICAgLT4gIDYxNzI2IEluZXhhY3QgUm91bmRlZAorcjBtdXgxMTQgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMSAgICAgLT4gIDYxNzM3IEluZXhhY3QgUm91bmRlZAorcjBtdXgxMTUgIG11bHRpcGx5IDEyMzQ1ICA1LjAxICAgICAgLT4gIDYxODQ4IEluZXhhY3QgUm91bmRlZAorcjBtdXgxMTYgIG11bHRpcGx5IDEyMzQ1ICAxMiAgICAgICAgLT4gIDEuNDgxNEUrNSBSb3VuZGVkCityMG11eDExNyAgbXVsdGlwbHkgMTIzNDUgIDEzICAgICAgICAtPiAgMS42MDQ4RSs1IEluZXhhY3QgUm91bmRlZAorcjBtdXgxMTggIG11bHRpcGx5IDEyMzU1ICAxMiAgICAgICAgLT4gIDEuNDgyNkUrNSBSb3VuZGVkCityMG11eDExOSAgbXVsdGlwbHkgMTIzNTUgIDEzICAgICAgICAtPiAgMS42MDYxRSs1IEluZXhhY3QgUm91bmRlZAorCisKKy0tIFBvd2VyIG9wZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3IwcG94MTAxICBwb3dlciAxMjM0NSAgLTUgICAgICAgIC0+ICAzLjQ4NzdFLTIxIEluZXhhY3QgUm91bmRlZAorcjBwb3gxMDIgIHBvd2VyIDEyMzQ1ICAtNCAgICAgICAgLT4gIDQuMzA1NkUtMTcgSW5leGFjdCBSb3VuZGVkCityMHBveDEwMyAgcG93ZXIgMTIzNDUgIC0zICAgICAgICAtPiAgNS4zMTUyRS0xMyBJbmV4YWN0IFJvdW5kZWQKK3IwcG94MTA0ICBwb3dlciAxMjM0NSAgLTIgICAgICAgIC0+ICA2LjU2MTdFLTkgSW5leGFjdCBSb3VuZGVkCityMHBveDEwNSAgcG93ZXIgMTIzNDUgIC0xICAgICAgICAtPiAgMC4wMDAwODEwMDQgSW5leGFjdCBSb3VuZGVkCityMHBveDEwNiAgcG93ZXIgMTIzNDUgIDAgICAgICAgICAtPiAgMQorcjBwb3gxMDcgIHBvd2VyIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CityMHBveDEwOCAgcG93ZXIgMTIzNDUgIDIgICAgICAgICAtPiAgMS41MjM5RSs4IEluZXhhY3QgUm91bmRlZAorcjBwb3gxMDkgIHBvd2VyIDEyMzQ1ICAzICAgICAgICAgLT4gIDEuODgxM0UrMTIgSW5leGFjdCBSb3VuZGVkCityMHBveDExMCAgcG93ZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMi4zMjI2RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3IwcG94MTExICBwb3dlciAxMjM0NSAgNSAgICAgICAgIC0+ICAyLjg2NzFFKzIwIEluZXhhY3QgUm91bmRlZAorcjBwb3gxMTIgIHBvd2VyICAgNDE1ICAyICAgICAgICAgLT4gIDEuNzIyMkUrNSBJbmV4YWN0IFJvdW5kZWQKK3IwcG94MTEzICBwb3dlciAgICA3NSAgMyAgICAgICAgIC0+ICA0LjIxODdFKzUgSW5leGFjdCBSb3VuZGVkCisKKworLS0gVW5kZXJmbG93IFN1Ym5vcm1hbCBhbmQgb3ZlcmZsb3cgdmFsdWVzIHZhcnkgd2l0aCByb3VuZGluZyBtb2RlIGFuZCBzaWduCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorLS0gW3JvdW5kIGRvd24gZ2l2ZXMgTm1heCBvbiBmaXJzdCB0d28gYW5kIC4wRS4uLiBvbiB0aGUgbmV4dCB0d29dCityMG92eDEwMCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIDkuOTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcjBvdngxMDEgIG11bHRpcGx5ICAtMTAgICAgOUUrOTk5OTk5OTk5IC0+IC05Ljk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Iwb3Z4MTAyICBkaXZpZGUgICAgIDFFLTkgIDlFKzk5OTk5OTk5OSAtPiAgMUUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcjBvdngxMDQgIGRpdmlkZSAgICAtMUUtOSAgOUUrOTk5OTk5OTk5IC0+IC0xRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJlcHJpc2Ugcm91bmRpbmcgbW9kZSBlZmZlY3QgKHVzaW5nIG11bHRpcGxpZXMgc28gcHJlY2lzaW9uIGRpcmVjdGl2ZSB1c2VkKQorcHJlY2lzaW9uOiA5CittYXhleHBvbmVudDogOTk5OTk5OTk5CityMG1leDQxMiBtdWx0aXBseSAtOS45OTlFKzk5OTk5OTk5OSAxMCAtPiAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcjBtZXg0MTMgbXVsdGlwbHkgIDkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zYW1lcXVhbnR1bS5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zYW1lcXVhbnR1bS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YjEzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NhbWVxdWFudHVtLmRlY1Rlc3QKQEAgLTAsMCArMSwzODkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gc2FtZXF1YW50dW0uZGVjVGVzdCAtLSBjaGVjayBxdWFudHVtcyBtYXRjaCAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCitzYW1xMDAxIHNhbWVxdWFudHVtICAwICAgICAgMCAgICAgIC0+ICAxCitzYW1xMDAyIHNhbWVxdWFudHVtICAwICAgICAgMSAgICAgIC0+ICAxCitzYW1xMDAzIHNhbWVxdWFudHVtICAxICAgICAgMCAgICAgIC0+ICAxCitzYW1xMDA0IHNhbWVxdWFudHVtICAxICAgICAgMSAgICAgIC0+ICAxCisKK3NhbXEwMTEgc2FtZXF1YW50dW0gIDEwICAgICAxRSsxICAgLT4gMAorc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxCitzYW1xMDEzIHNhbWVxdWFudHVtICAxMDAgICAgMTBFKzEgIC0+IDAKK3NhbXEwMTQgc2FtZXF1YW50dW0gIDEwMCAgICAxRSsyICAgLT4gMAorc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwCitzYW1xMDE2IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMSAgIC0+IDEKK3NhbXEwMTcgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0wICAgLT4gMAorc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxCitzYW1xMDE5IHNhbWVxdWFudHVtICA5OTlFLTEgOTkuOSAgIC0+IDEKK3NhbXEwMjAgc2FtZXF1YW50dW0gIDExMUUtMSAyMi4yICAgLT4gMQorc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxCisKKy0tIHplcm9zCitzYW1xMDMwIHNhbWVxdWFudHVtICAwLjAgICAgMS4xICAgIC0+IDEKK3NhbXEwMzEgc2FtZXF1YW50dW0gIDAuMCAgICAxLjExICAgLT4gMAorc2FtcTAzMiBzYW1lcXVhbnR1bSAgMC4wICAgIDAgICAgICAtPiAwCitzYW1xMDMzIHNhbWVxdWFudHVtICAwLjAgICAgMC4wICAgIC0+IDEKK3NhbXEwMzQgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAwICAgLT4gMAorc2FtcTAzNSBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzAgICAtPiAwCitzYW1xMDM2IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMSAgIC0+IDEKK3NhbXEwMzcgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsyICAgLT4gMAorc2FtcTAzOCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE2ICAtPiAwCitzYW1xMDM5IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTcgIC0+IDEKK3NhbXEwNDAgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xOCAgLT4gMAorc2FtcTA0MSBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTUgLT4gMAorc2FtcTA0MiBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTYgLT4gMQorc2FtcTA0MyBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTcgLT4gMAorc2FtcTA0NCBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTYgLT4gMQorc2FtcTA0NSBzYW1lcXVhbnR1bSAgMEUtMTcgLTAuMEUtMTcgLT4gMAorc2FtcTA0NiBzYW1lcXVhbnR1bSAgMEUtMTcgLTAuMEUtMTYgLT4gMQorc2FtcTA0NyBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTcgLT4gMAorc2FtcTA0OCBzYW1lcXVhbnR1bSAtMEUtMTcgLTAuMEUtMTYgLT4gMQorc2FtcTA0OSBzYW1lcXVhbnR1bSAtMEUtMTcgLTAuMEUtMTcgLT4gMAorCistLSBObWF4LCBObWluLCBOdGlueQorc2FtcTA1MSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OUUrOTk5ICAgIDkuOTk5OTk5OTlFKzk5OSAgLT4gMQorc2FtcTA1MiBzYW1lcXVhbnR1bSAgMUUtOTk5ICAgICAgICAgICAgIDFFLTk5OSAgICAgICAgICAgLT4gMQorc2FtcTA1MyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMEUtOTk5ICAgIDEuMDAwMDAwMDBFLTk5OSAgLT4gMQorc2FtcTA1NCBzYW1lcXVhbnR1bSAgMUUtMTAwNyAgICAgICAgICAgIDFFLTEwMDcgICAgICAgICAgLT4gMQorc2FtcTA1NSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OUUrOTk5ICAgIDkuOTk5OTk5OTlFKzk5OSAgLT4gMQorc2FtcTA1NiBzYW1lcXVhbnR1bSAgMUUtOTk5ICAgICAgICAgICAgIDFFLTk5OSAgICAgICAgICAgLT4gMQorc2FtcTA1NyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMEUtOTk5ICAgIDEuMDAwMDAwMDBFLTk5OSAgLT4gMQorc2FtcTA1OCBzYW1lcXVhbnR1bSAgMUUtMTAwNyAgICAgICAgICAgIDFFLTEwMDcgICAgICAgICAgLT4gMQorCitzYW1xMDYxIHNhbWVxdWFudHVtICAtMUUtMTAwNyAgICAgICAgICAgLTFFLTEwMDcgICAgICAgICAtPiAxCitzYW1xMDYyIHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMEUtOTk5ICAgLTEuMDAwMDAwMDBFLTk5OSAtPiAxCitzYW1xMDYzIHNhbWVxdWFudHVtICAtMUUtOTk5ICAgICAgICAgICAgLTFFLTk5OSAgICAgICAgICAtPiAxCitzYW1xMDY0IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OUUrOTk5ICAgLTkuOTk5OTk5OTlFKzk5OSAtPiAxCitzYW1xMDY1IHNhbWVxdWFudHVtICAtMUUtMTAwNyAgICAgICAgICAgLTFFLTEwMDcgICAgICAgICAtPiAxCitzYW1xMDY2IHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMEUtOTk5ICAgLTEuMDAwMDAwMDBFLTk5OSAtPiAxCitzYW1xMDY3IHNhbWVxdWFudHVtICAtMUUtOTk5ICAgICAgICAgICAgLTFFLTk5OSAgICAgICAgICAtPiAxCitzYW1xMDY4IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OUUrOTk5ICAgLTkuOTk5OTk5OTlFKzk5OSAtPiAxCisKK3NhbXEwNzEgc2FtZXF1YW50dW0gIC00RS0xMDA3ICAgICAgICAgICAtMUUtMTAwNyAgICAgICAgIC0+IDEKK3NhbXEwNzIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwRS05OTkgICAtMS4wMDAwNDAwMEUtOTk5IC0+IDEKK3NhbXEwNzMgc2FtZXF1YW50dW0gIC00RS05OTkgICAgICAgICAgICAtMUUtOTk5ICAgICAgICAgIC0+IDEKK3NhbXEwNzQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5RSs5OTkgICAtOS45OTk0OTk5OUUrOTk5IC0+IDEKK3NhbXEwNzUgc2FtZXF1YW50dW0gIC00RS0xMDA3ICAgICAgICAgICAtMUUtMTAwNyAgICAgICAgIC0+IDEKK3NhbXEwNzYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwRS05OTkgICAtMS4wMDQwMDAwMEUtOTk5IC0+IDEKK3NhbXEwNzcgc2FtZXF1YW50dW0gIC00RS05OTkgICAgICAgICAgICAtMUUtOTk5ICAgICAgICAgIC0+IDEKK3NhbXEwNzggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5RSs5OTkgICAtOS45NDk5OTk5OUUrOTk5IC0+IDEKKworc2FtcTA4MSBzYW1lcXVhbnR1bSAgLTRFLTEwMDYgICAgICAgICAgIC0xRS0xMDA3ICAgICAgICAgLT4gMAorc2FtcTA4MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDBFLTk5OSAgIC0xLjAwMDA0MDAwRS05OTYgLT4gMAorc2FtcTA4MyBzYW1lcXVhbnR1bSAgLTRFLTk5NiAgICAgICAgICAgIC0xRS05OTkgICAgICAgICAgLT4gMAorc2FtcTA4NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTlFKzk5OSAgIC05Ljk5OTQ5OTk5RSs5OTYgLT4gMAorc2FtcTA4NSBzYW1lcXVhbnR1bSAgLTRFLTEwMDYgICAgICAgICAgIC0xRS0xMDA3ICAgICAgICAgLT4gMAorc2FtcTA4NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDBFLTk5OSAgIC0xLjAwNDAwMDAwRS05OTYgLT4gMAorc2FtcTA4NyBzYW1lcXVhbnR1bSAgLTRFLTk5NiAgICAgICAgICAgIC0xRS05OTkgICAgICAgICAgLT4gMAorc2FtcTA4OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTlFKzk5OSAgIC05Ljk0OTk5OTk5RSs5OTYgLT4gMAorCistLSBzcGVjaWFscyAmIGNvbWJpbmF0aW9ucworc2FtcTAxMTAgc2FtZXF1YW50dW0gIC1JbmYgICAgLUluZiAgIC0+IDEKK3NhbXEwMTExIHNhbWVxdWFudHVtICAtSW5mICAgICBJbmYgICAtPiAxCitzYW1xMDExMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgTmFOICAgLT4gMAorc2FtcTAxMTMgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFKzMgIC0+IDAKK3NhbXEwMTE0IHNhbWVxdWFudHVtICAtSW5mICAgIC03ICAgICAtPiAwCitzYW1xMDExNSBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UtMyAgLT4gMAorc2FtcTAxMTYgc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFLTMgIC0+IDAKK3NhbXEwMTE3IHNhbWVxdWFudHVtICAtSW5mICAgIC0wICAgICAtPiAwCitzYW1xMDExOCBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUrMyAgLT4gMAorc2FtcTAxMTkgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFLTMgIC0+IDAKK3NhbXEwMTIwIHNhbWVxdWFudHVtICAtSW5mICAgICAwICAgICAtPiAwCitzYW1xMDEyMSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUrMyAgLT4gMAorc2FtcTAxMjIgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFLTMgIC0+IDAKK3NhbXEwMTIzIHNhbWVxdWFudHVtICAtSW5mICAgICA3ICAgICAtPiAwCitzYW1xMDEyNCBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UrMyAgLT4gMAorc2FtcTAxMjUgc2FtZXF1YW50dW0gIC1JbmYgICAgIHNOYU4gIC0+IDAKKworc2FtcTAyMTAgc2FtZXF1YW50dW0gICBJbmYgICAgLUluZiAgIC0+IDEKK3NhbXEwMjExIHNhbWVxdWFudHVtICAgSW5mICAgICBJbmYgICAtPiAxCitzYW1xMDIxMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgTmFOICAgLT4gMAorc2FtcTAyMTMgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFKzMgIC0+IDAKK3NhbXEwMjE0IHNhbWVxdWFudHVtICAgSW5mICAgIC03ICAgICAtPiAwCitzYW1xMDIxNSBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UtMyAgLT4gMAorc2FtcTAyMTYgc2FtZXF1YW50dW0gICBJbmYgICAgLTBFLTMgIC0+IDAKK3NhbXEwMjE3IHNhbWVxdWFudHVtICAgSW5mICAgIC0wICAgICAtPiAwCitzYW1xMDIxOCBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUrMyAgLT4gMAorc2FtcTAyMTkgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFLTMgIC0+IDAKK3NhbXEwMjIwIHNhbWVxdWFudHVtICAgSW5mICAgICAwICAgICAtPiAwCitzYW1xMDIyMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUrMyAgLT4gMAorc2FtcTAyMjIgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFLTMgIC0+IDAKK3NhbXEwMjIzIHNhbWVxdWFudHVtICAgSW5mICAgICA3ICAgICAtPiAwCitzYW1xMDIyNCBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UrMyAgLT4gMAorc2FtcTAyMjUgc2FtZXF1YW50dW0gICBJbmYgICAgIHNOYU4gIC0+IDAKKworc2FtcTAzMTAgc2FtZXF1YW50dW0gICBOYU4gICAgLUluZiAgIC0+IDAKK3NhbXEwMzExIHNhbWVxdWFudHVtICAgTmFOICAgICBJbmYgICAtPiAwCitzYW1xMDMxMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgTmFOICAgLT4gMQorc2FtcTAzMTMgc2FtZXF1YW50dW0gICBOYU4gICAgLTdFKzMgIC0+IDAKK3NhbXEwMzE0IHNhbWVxdWFudHVtICAgTmFOICAgIC03ICAgICAtPiAwCitzYW1xMDMxNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UtMyAgLT4gMAorc2FtcTAzMTYgc2FtZXF1YW50dW0gICBOYU4gICAgLTBFLTMgIC0+IDAKK3NhbXEwMzE3IHNhbWVxdWFudHVtICAgTmFOICAgIC0wICAgICAtPiAwCitzYW1xMDMxOCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUrMyAgLT4gMAorc2FtcTAzMTkgc2FtZXF1YW50dW0gICBOYU4gICAgIDBFLTMgIC0+IDAKK3NhbXEwMzIwIHNhbWVxdWFudHVtICAgTmFOICAgICAwICAgICAtPiAwCitzYW1xMDMyMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUrMyAgLT4gMAorc2FtcTAzMjIgc2FtZXF1YW50dW0gICBOYU4gICAgIDdFLTMgIC0+IDAKK3NhbXEwMzIzIHNhbWVxdWFudHVtICAgTmFOICAgICA3ICAgICAtPiAwCitzYW1xMDMyNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UrMyAgLT4gMAorc2FtcTAzMjUgc2FtZXF1YW50dW0gICBOYU4gICAgIHNOYU4gIC0+IDEKKworc2FtcTA0MTAgc2FtZXF1YW50dW0gIC03RSszICAgIC1JbmYgICAtPiAwCitzYW1xMDQxMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIEluZiAgIC0+IDAKK3NhbXEwNDEyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgTmFOICAgLT4gMAorc2FtcTA0MTMgc2FtZXF1YW50dW0gIC03RSszICAgIC03RSszICAtPiAxCitzYW1xMDQxNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTcgICAgIC0+IDAKK3NhbXEwNDE1IHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UtMyAgLT4gMAorc2FtcTA0MTYgc2FtZXF1YW50dW0gIC03RSszICAgIC0wRS0zICAtPiAwCitzYW1xMDQxNyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTAgICAgIC0+IDAKK3NhbXEwNDE4IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUrMyAgLT4gMQorc2FtcTA0MTkgc2FtZXF1YW50dW0gIC03RSszICAgICAwRS0zICAtPiAwCitzYW1xMDQyMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDAgICAgIC0+IDAKK3NhbXEwNDIxIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUrMyAgLT4gMQorc2FtcTA0MjIgc2FtZXF1YW50dW0gIC03RSszICAgICA3RS0zICAtPiAwCitzYW1xMDQyMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDcgICAgIC0+IDAKK3NhbXEwNDI0IHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UrMyAgLT4gMQorc2FtcTA0MjUgc2FtZXF1YW50dW0gIC03RSszICAgICBzTmFOICAtPiAwCisKK3NhbXEwNTEwIHNhbWVxdWFudHVtICAtNyAgICAgIC1JbmYgICAtPiAwCitzYW1xMDUxMSBzYW1lcXVhbnR1bSAgLTcgICAgICAgSW5mICAgLT4gMAorc2FtcTA1MTIgc2FtZXF1YW50dW0gIC03ICAgICAgIE5hTiAgIC0+IDAKK3NhbXEwNTEzIHNhbWVxdWFudHVtICAtNyAgICAgIC03RSszICAtPiAwCitzYW1xMDUxNCBzYW1lcXVhbnR1bSAgLTcgICAgICAtNyAgICAgLT4gMQorc2FtcTA1MTUgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFLTMgIC0+IDAKK3NhbXEwNTE2IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRS0zICAtPiAwCitzYW1xMDUxNyBzYW1lcXVhbnR1bSAgLTcgICAgICAtMCAgICAgLT4gMQorc2FtcTA1MTggc2FtZXF1YW50dW0gIC03ICAgICAgLTBFKzMgIC0+IDAKK3NhbXEwNTE5IHNhbWVxdWFudHVtICAtNyAgICAgICAwRS0zICAtPiAwCitzYW1xMDUyMCBzYW1lcXVhbnR1bSAgLTcgICAgICAgMCAgICAgLT4gMQorc2FtcTA1MjEgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFKzMgIC0+IDAKK3NhbXEwNTIyIHNhbWVxdWFudHVtICAtNyAgICAgICA3RS0zICAtPiAwCitzYW1xMDUyMyBzYW1lcXVhbnR1bSAgLTcgICAgICAgNyAgICAgLT4gMQorc2FtcTA1MjQgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFKzMgIC0+IDAKK3NhbXEwNTI1IHNhbWVxdWFudHVtICAtNyAgICAgICBzTmFOICAtPiAwCisKK3NhbXEwNjEwIHNhbWVxdWFudHVtICAtN0UtMyAgICAtSW5mICAgLT4gMAorc2FtcTA2MTEgc2FtZXF1YW50dW0gIC03RS0zICAgICBJbmYgICAtPiAwCitzYW1xMDYxMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIE5hTiAgIC0+IDAKK3NhbXEwNjEzIHNhbWVxdWFudHVtICAtN0UtMyAgICAtN0UrMyAgLT4gMAorc2FtcTA2MTQgc2FtZXF1YW50dW0gIC03RS0zICAgIC03ICAgICAtPiAwCitzYW1xMDYxNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFLTMgIC0+IDEKK3NhbXEwNjE2IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMEUtMyAgLT4gMQorc2FtcTA2MTcgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wICAgICAtPiAwCitzYW1xMDYxOCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFKzMgIC0+IDAKK3NhbXEwNjE5IHNhbWVxdWFudHVtICAtN0UtMyAgICAgMEUtMyAgLT4gMQorc2FtcTA2MjAgc2FtZXF1YW50dW0gIC03RS0zICAgICAwICAgICAtPiAwCitzYW1xMDYyMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFKzMgIC0+IDAKK3NhbXEwNjIyIHNhbWVxdWFudHVtICAtN0UtMyAgICAgN0UtMyAgLT4gMQorc2FtcTA2MjMgc2FtZXF1YW50dW0gIC03RS0zICAgICA3ICAgICAtPiAwCitzYW1xMDYyNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFKzMgIC0+IDAKK3NhbXEwNjI1IHNhbWVxdWFudHVtICAtN0UtMyAgICAgc05hTiAgLT4gMAorCitzYW1xMDcxMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLUluZiAgIC0+IDAKK3NhbXEwNzExIHNhbWVxdWFudHVtICAtMEUtMyAgICAgSW5mICAgLT4gMAorc2FtcTA3MTIgc2FtZXF1YW50dW0gIC0wRS0zICAgICBOYU4gICAtPiAwCitzYW1xMDcxMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFKzMgIC0+IDAKK3NhbXEwNzE0IHNhbWVxdWFudHVtICAtMEUtMyAgICAtNyAgICAgLT4gMAorc2FtcTA3MTUgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RS0zICAtPiAxCitzYW1xMDcxNiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFLTMgIC0+IDEKK3NhbXEwNzE3IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMCAgICAgLT4gMAorc2FtcTA3MTggc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRSszICAtPiAwCitzYW1xMDcxOSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFLTMgIC0+IDEKK3NhbXEwNzIwIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMCAgICAgLT4gMAorc2FtcTA3MjEgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRSszICAtPiAwCitzYW1xMDcyMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFLTMgIC0+IDEKK3NhbXEwNzIzIHNhbWVxdWFudHVtICAtMEUtMyAgICAgNyAgICAgLT4gMAorc2FtcTA3MjQgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RSszICAtPiAwCitzYW1xMDcyNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIHNOYU4gIC0+IDAKKworc2FtcTA4MTAgc2FtZXF1YW50dW0gIC0wICAgICAgLUluZiAgIC0+IDAKK3NhbXEwODExIHNhbWVxdWFudHVtICAtMCAgICAgICBJbmYgICAtPiAwCitzYW1xMDgxMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgTmFOICAgLT4gMAorc2FtcTA4MTMgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFKzMgIC0+IDAKK3NhbXEwODE0IHNhbWVxdWFudHVtICAtMCAgICAgIC03ICAgICAtPiAxCitzYW1xMDgxNSBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UtMyAgLT4gMAorc2FtcTA4MTYgc2FtZXF1YW50dW0gIC0wICAgICAgLTBFLTMgIC0+IDAKK3NhbXEwODE3IHNhbWVxdWFudHVtICAtMCAgICAgIC0wICAgICAtPiAxCitzYW1xMDgxOCBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUrMyAgLT4gMAorc2FtcTA4MTkgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFLTMgIC0+IDAKK3NhbXEwODIwIHNhbWVxdWFudHVtICAtMCAgICAgICAwICAgICAtPiAxCitzYW1xMDgyMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUrMyAgLT4gMAorc2FtcTA4MjIgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFLTMgIC0+IDAKK3NhbXEwODIzIHNhbWVxdWFudHVtICAtMCAgICAgICA3ICAgICAtPiAxCitzYW1xMDgyNCBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UrMyAgLT4gMAorc2FtcTA4MjUgc2FtZXF1YW50dW0gIC0wICAgICAgIHNOYU4gIC0+IDAKKworc2FtcTA5MTAgc2FtZXF1YW50dW0gIC0wRSszICAgIC1JbmYgICAtPiAwCitzYW1xMDkxMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIEluZiAgIC0+IDAKK3NhbXEwOTEyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgTmFOICAgLT4gMAorc2FtcTA5MTMgc2FtZXF1YW50dW0gIC0wRSszICAgIC03RSszICAtPiAxCitzYW1xMDkxNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTcgICAgIC0+IDAKK3NhbXEwOTE1IHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UtMyAgLT4gMAorc2FtcTA5MTYgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wRS0zICAtPiAwCitzYW1xMDkxNyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTAgICAgIC0+IDAKK3NhbXEwOTE4IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUrMyAgLT4gMQorc2FtcTA5MTkgc2FtZXF1YW50dW0gIC0wRSszICAgICAwRS0zICAtPiAwCitzYW1xMDkyMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDAgICAgIC0+IDAKK3NhbXEwOTIxIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUrMyAgLT4gMQorc2FtcTA5MjIgc2FtZXF1YW50dW0gIC0wRSszICAgICA3RS0zICAtPiAwCitzYW1xMDkyMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDcgICAgIC0+IDAKK3NhbXEwOTI0IHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UrMyAgLT4gMQorc2FtcTA5MjUgc2FtZXF1YW50dW0gIC0wRSszICAgICBzTmFOICAtPiAwCisKK3NhbXExMTEwIHNhbWVxdWFudHVtICAwRS0zICAgIC1JbmYgICAtPiAwCitzYW1xMTExMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgSW5mICAgLT4gMAorc2FtcTExMTIgc2FtZXF1YW50dW0gIDBFLTMgICAgIE5hTiAgIC0+IDAKK3NhbXExMTEzIHNhbWVxdWFudHVtICAwRS0zICAgIC03RSszICAtPiAwCitzYW1xMTExNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtNyAgICAgLT4gMAorc2FtcTExMTUgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFLTMgIC0+IDEKK3NhbXExMTE2IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRS0zICAtPiAxCitzYW1xMTExNyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMCAgICAgLT4gMAorc2FtcTExMTggc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFKzMgIC0+IDAKK3NhbXExMTE5IHNhbWVxdWFudHVtICAwRS0zICAgICAwRS0zICAtPiAxCitzYW1xMTEyMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMCAgICAgLT4gMAorc2FtcTExMjEgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFKzMgIC0+IDAKK3NhbXExMTIyIHNhbWVxdWFudHVtICAwRS0zICAgICA3RS0zICAtPiAxCitzYW1xMTEyMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAgNyAgICAgLT4gMAorc2FtcTExMjQgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFKzMgIC0+IDAKK3NhbXExMTI1IHNhbWVxdWFudHVtICAwRS0zICAgICBzTmFOICAtPiAwCisKK3NhbXExMjEwIHNhbWVxdWFudHVtICAwICAgICAgIC1JbmYgICAtPiAwCitzYW1xMTIxMSBzYW1lcXVhbnR1bSAgMCAgICAgICAgSW5mICAgLT4gMAorc2FtcTEyMTIgc2FtZXF1YW50dW0gIDAgICAgICAgIE5hTiAgIC0+IDAKK3NhbXExMjEzIHNhbWVxdWFudHVtICAwICAgICAgIC03RSszICAtPiAwCitzYW1xMTIxNCBzYW1lcXVhbnR1bSAgMCAgICAgICAtNyAgICAgLT4gMQorc2FtcTEyMTUgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFLTMgIC0+IDAKK3NhbXExMjE2IHNhbWVxdWFudHVtICAwICAgICAgIC0wRS0zICAtPiAwCitzYW1xMTIxNyBzYW1lcXVhbnR1bSAgMCAgICAgICAtMCAgICAgLT4gMQorc2FtcTEyMTggc2FtZXF1YW50dW0gIDAgICAgICAgLTBFKzMgIC0+IDAKK3NhbXExMjE5IHNhbWVxdWFudHVtICAwICAgICAgICAwRS0zICAtPiAwCitzYW1xMTIyMCBzYW1lcXVhbnR1bSAgMCAgICAgICAgMCAgICAgLT4gMQorc2FtcTEyMjEgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFKzMgIC0+IDAKK3NhbXExMjIyIHNhbWVxdWFudHVtICAwICAgICAgICA3RS0zICAtPiAwCitzYW1xMTIyMyBzYW1lcXVhbnR1bSAgMCAgICAgICAgNyAgICAgLT4gMQorc2FtcTEyMjQgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFKzMgIC0+IDAKK3NhbXExMjI1IHNhbWVxdWFudHVtICAwICAgICAgICBzTmFOICAtPiAwCisKK3NhbXExMzEwIHNhbWVxdWFudHVtICAwRSszICAgIC1JbmYgICAtPiAwCitzYW1xMTMxMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgSW5mICAgLT4gMAorc2FtcTEzMTIgc2FtZXF1YW50dW0gIDBFKzMgICAgIE5hTiAgIC0+IDAKK3NhbXExMzEzIHNhbWVxdWFudHVtICAwRSszICAgIC03RSszICAtPiAxCitzYW1xMTMxNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtNyAgICAgLT4gMAorc2FtcTEzMTUgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFLTMgIC0+IDAKK3NhbXExMzE2IHNhbWVxdWFudHVtICAwRSszICAgIC0wRS0zICAtPiAwCitzYW1xMTMxNyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMCAgICAgLT4gMAorc2FtcTEzMTggc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFKzMgIC0+IDEKK3NhbXExMzE5IHNhbWVxdWFudHVtICAwRSszICAgICAwRS0zICAtPiAwCitzYW1xMTMyMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMCAgICAgLT4gMAorc2FtcTEzMjEgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFKzMgIC0+IDEKK3NhbXExMzIyIHNhbWVxdWFudHVtICAwRSszICAgICA3RS0zICAtPiAwCitzYW1xMTMyMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAgNyAgICAgLT4gMAorc2FtcTEzMjQgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFKzMgIC0+IDEKK3NhbXExMzI1IHNhbWVxdWFudHVtICAwRSszICAgICBzTmFOICAtPiAwCisKK3NhbXExNDEwIHNhbWVxdWFudHVtICA3RS0zICAgIC1JbmYgICAtPiAwCitzYW1xMTQxMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgSW5mICAgLT4gMAorc2FtcTE0MTIgc2FtZXF1YW50dW0gIDdFLTMgICAgIE5hTiAgIC0+IDAKK3NhbXExNDEzIHNhbWVxdWFudHVtICA3RS0zICAgIC03RSszICAtPiAwCitzYW1xMTQxNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtNyAgICAgLT4gMAorc2FtcTE0MTUgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFLTMgIC0+IDEKK3NhbXExNDE2IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRS0zICAtPiAxCitzYW1xMTQxNyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMCAgICAgLT4gMAorc2FtcTE0MTggc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFKzMgIC0+IDAKK3NhbXExNDE5IHNhbWVxdWFudHVtICA3RS0zICAgICAwRS0zICAtPiAxCitzYW1xMTQyMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMCAgICAgLT4gMAorc2FtcTE0MjEgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFKzMgIC0+IDAKK3NhbXExNDIyIHNhbWVxdWFudHVtICA3RS0zICAgICA3RS0zICAtPiAxCitzYW1xMTQyMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAgNyAgICAgLT4gMAorc2FtcTE0MjQgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFKzMgIC0+IDAKK3NhbXExNDI1IHNhbWVxdWFudHVtICA3RS0zICAgICBzTmFOICAtPiAwCisKK3NhbXExNTEwIHNhbWVxdWFudHVtICA3ICAgICAgLUluZiAgIC0+IDAKK3NhbXExNTExIHNhbWVxdWFudHVtICA3ICAgICAgIEluZiAgIC0+IDAKK3NhbXExNTEyIHNhbWVxdWFudHVtICA3ICAgICAgIE5hTiAgIC0+IDAKK3NhbXExNTEzIHNhbWVxdWFudHVtICA3ICAgICAgLTdFKzMgIC0+IDAKK3NhbXExNTE0IHNhbWVxdWFudHVtICA3ICAgICAgLTcgICAgIC0+IDEKK3NhbXExNTE1IHNhbWVxdWFudHVtICA3ICAgICAgLTdFLTMgIC0+IDAKK3NhbXExNTE2IHNhbWVxdWFudHVtICA3ICAgICAgLTBFLTMgIC0+IDAKK3NhbXExNTE3IHNhbWVxdWFudHVtICA3ICAgICAgLTAgICAgIC0+IDEKK3NhbXExNTE4IHNhbWVxdWFudHVtICA3ICAgICAgLTBFKzMgIC0+IDAKK3NhbXExNTE5IHNhbWVxdWFudHVtICA3ICAgICAgIDBFLTMgIC0+IDAKK3NhbXExNTIwIHNhbWVxdWFudHVtICA3ICAgICAgIDAgICAgIC0+IDEKK3NhbXExNTIxIHNhbWVxdWFudHVtICA3ICAgICAgIDBFKzMgIC0+IDAKK3NhbXExNTIyIHNhbWVxdWFudHVtICA3ICAgICAgIDdFLTMgIC0+IDAKK3NhbXExNTIzIHNhbWVxdWFudHVtICA3ICAgICAgIDcgICAgIC0+IDEKK3NhbXExNTI0IHNhbWVxdWFudHVtICA3ICAgICAgIDdFKzMgIC0+IDAKK3NhbXExNTI1IHNhbWVxdWFudHVtICA3ICAgICAgIHNOYU4gIC0+IDAKKworc2FtcTE2MTAgc2FtZXF1YW50dW0gIDdFKzMgICAgLUluZiAgIC0+IDAKK3NhbXExNjExIHNhbWVxdWFudHVtICA3RSszICAgICBJbmYgICAtPiAwCitzYW1xMTYxMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgTmFOICAgLT4gMAorc2FtcTE2MTMgc2FtZXF1YW50dW0gIDdFKzMgICAgLTdFKzMgIC0+IDEKK3NhbXExNjE0IHNhbWVxdWFudHVtICA3RSszICAgIC03ICAgICAtPiAwCitzYW1xMTYxNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UtMyAgLT4gMAorc2FtcTE2MTYgc2FtZXF1YW50dW0gIDdFKzMgICAgLTBFLTMgIC0+IDAKK3NhbXExNjE3IHNhbWVxdWFudHVtICA3RSszICAgIC0wICAgICAtPiAwCitzYW1xMTYxOCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUrMyAgLT4gMQorc2FtcTE2MTkgc2FtZXF1YW50dW0gIDdFKzMgICAgIDBFLTMgIC0+IDAKK3NhbXExNjIwIHNhbWVxdWFudHVtICA3RSszICAgICAwICAgICAtPiAwCitzYW1xMTYyMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUrMyAgLT4gMQorc2FtcTE2MjIgc2FtZXF1YW50dW0gIDdFKzMgICAgIDdFLTMgIC0+IDAKK3NhbXExNjIzIHNhbWVxdWFudHVtICA3RSszICAgICA3ICAgICAtPiAwCitzYW1xMTYyNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UrMyAgLT4gMQorc2FtcTE2MjUgc2FtZXF1YW50dW0gIDdFKzMgICAgIHNOYU4gIC0+IDAKKworc2FtcTE3MTAgc2FtZXF1YW50dW0gIHNOYU4gICAgLUluZiAgIC0+IDAKK3NhbXExNzExIHNhbWVxdWFudHVtICBzTmFOICAgICBJbmYgICAtPiAwCitzYW1xMTcxMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgTmFOICAgLT4gMQorc2FtcTE3MTMgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFKzMgIC0+IDAKK3NhbXExNzE0IHNhbWVxdWFudHVtICBzTmFOICAgIC03ICAgICAtPiAwCitzYW1xMTcxNSBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UtMyAgLT4gMAorc2FtcTE3MTYgc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFLTMgIC0+IDAKK3NhbXExNzE3IHNhbWVxdWFudHVtICBzTmFOICAgIC0wICAgICAtPiAwCitzYW1xMTcxOCBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUrMyAgLT4gMAorc2FtcTE3MTkgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFLTMgIC0+IDAKK3NhbXExNzIwIHNhbWVxdWFudHVtICBzTmFOICAgICAwICAgICAtPiAwCitzYW1xMTcyMSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUrMyAgLT4gMAorc2FtcTE3MjIgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFLTMgIC0+IDAKK3NhbXExNzIzIHNhbWVxdWFudHVtICBzTmFOICAgICA3ICAgICAtPiAwCitzYW1xMTcyNCBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UrMyAgLT4gMAorc2FtcTE3MjUgc2FtZXF1YW50dW0gIHNOYU4gICAgIHNOYU4gIC0+IDEKKy0tIG5vaXN5IE5hTnMKK3NhbXExNzMwIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFOMyAtPiAxCitzYW1xMTczMSBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjQgLT4gMQorc2FtcTE3MzIgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU4zIC0+IDEKK3NhbXExNzMzIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFONCAtPiAxCitzYW1xMTczNCBzYW1lcXVhbnR1bSAgc05hTjMgICAgIDMgICAgLT4gMAorc2FtcTE3MzUgc2FtZXF1YW50dW0gICBOYU4zICAgICAzICAgIC0+IDAKK3NhbXExNzM2IHNhbWVxdWFudHVtICAgICAgNCAgICBzTmFONCAtPiAwCitzYW1xMTczNyBzYW1lcXVhbnR1bSAgICAgIDMgICAgIE5hTjMgLT4gMAorc2FtcTE3Mzggc2FtZXF1YW50dW0gICAgSW5mICAgIHNOYU40IC0+IDAKK3NhbXExNzM5IHNhbWVxdWFudHVtICAgLUluZiAgICAgTmFOMyAtPiAwCisKKworCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NjYWxlYi5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zY2FsZWIuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE2NWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zY2FsZWIuZGVjVGVzdApAQCAtMCwwICsxLDIwOSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBzY2FsZWIuZGVjVGVzdCAtLSBzY2FsZSBhIG51bWJlciBieSBwb3dlcnMgb2YgMTAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIE1heCB8cmhzfCBpcyAyKig5OTkrOSkgPSAyMDE2CisKKy0tIFNhbml0eSBjaGVja3MKK3NjYngwMDEgc2NhbGViICAgICAgIDcuNTAgICAxMCAtPiA3LjUwRSsxMAorc2NieDAwMiBzY2FsZWIgICAgICAgNy41MCAgICAzIC0+IDcuNTBFKzMKK3NjYngwMDMgc2NhbGViICAgICAgIDcuNTAgICAgMiAtPiA3NTAKK3NjYngwMDQgc2NhbGViICAgICAgIDcuNTAgICAgMSAtPiA3NS4wCitzY2J4MDA1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgLT4gNy41MAorc2NieDAwNiBzY2FsZWIgICAgICAgNy41MCAgIC0xIC0+IDAuNzUwCitzY2J4MDA3IHNjYWxlYiAgICAgICA3LjUwICAgLTIgLT4gMC4wNzUwCitzY2J4MDA4IHNjYWxlYiAgICAgICA3LjUwICAtMTAgLT4gNy41MEUtMTAKK3NjYngwMDkgc2NhbGViICAgICAgLTcuNTAgICAgMyAtPiAtNy41MEUrMworc2NieDAxMCBzY2FsZWIgICAgICAtNy41MCAgICAyIC0+IC03NTAKK3NjYngwMTEgc2NhbGViICAgICAgLTcuNTAgICAgMSAtPiAtNzUuMAorc2NieDAxMiBzY2FsZWIgICAgICAtNy41MCAgICAwIC0+IC03LjUwCitzY2J4MDEzIHNjYWxlYiAgICAgIC03LjUwICAgLTEgLT4gLTAuNzUwCisKKy0tIEluZmluaXRpZXMKK3NjYngwMTQgc2NhbGViICBJbmZpbml0eSAgIDEgLT4gSW5maW5pdHkKK3NjYngwMTUgc2NhbGViICAtSW5maW5pdHkgIDIgLT4gLUluZmluaXR5CitzY2J4MDE2IHNjYWxlYiAgSW5maW5pdHkgIC0xIC0+IEluZmluaXR5CitzY2J4MDE3IHNjYWxlYiAgLUluZmluaXR5IC0yIC0+IC1JbmZpbml0eQorCistLSBOZXh0IHR3byBhcmUgc29tZXdoYXQgdW5kZWZpbmVkIGluIDc1NHI7IHRyZWF0IGFzIG5vbi1pbnRlZ2VyCitzY2J4MDE4IHNjYWxlYiAgMTAgIEluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcyBhcmUgdW5kZWZpbmVkIGluIDc1NHI7IGFzc3VtZSB1c3VhbCBwcm9jZXNzaW5nCistLSBOYU5zLCAwIHBheWxvYWQKK3NjYngwMjEgc2NhbGViICAgICAgICAgTmFOICAxIC0+IE5hTgorc2NieDAyMiBzY2FsZWIgICAgICAgIC1OYU4gLTEgLT4gLU5hTgorc2NieDAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDI0IHNjYWxlYiAgICAgICAtc05hTiAgMSAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDI1IHNjYWxlYiAgICA0ICAgIE5hTiAgICAtPiBOYU4KK3NjYngwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4KK3NjYngwMjcgc2NhbGViICAgIDQgICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAyOCBzY2FsZWIgIEluZiAgLXNOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBub24taW50ZWdlciBSSFMKK3NjYngwMzAgc2NhbGViICAxLjIzICAgIDEgICAgLT4gIDEyLjMKK3NjYngwMzEgc2NhbGViICAxLjIzICAgIDEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzMiBzY2FsZWIgIDEuMjMgICAgMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDMzIHNjYWxlYiAgMS4yMyAgICAxLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMzQgc2NhbGViICAxLjIzICAgIDAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzNSBzY2FsZWIgIDEuMjMgICAgMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDM2IHNjYWxlYiAgMS4yMyAgICAwLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDM3IHNjYWxlYiAgMS4yMyAgIC0xICAgIC0+ICAwLjEyMworc2NieDAzOCBzY2FsZWIgIDEuMjMgICAtMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDM5IHNjYWxlYiAgMS4yMyAgIC0xLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwNDAgc2NhbGViICAxLjIzICAgLTEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDA0MSBzY2FsZWIgIDEuMjMgICAtMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQyIHNjYWxlYiAgMS4yMyAgIC0wLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwNDMgc2NhbGViICAxLjIzICAgLTAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwNDQgc2NhbGViICAxLjIzICAgIDAuMSAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwNDUgc2NhbGViICAxLjIzICAgIDFFKzEgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwNDYgc2NhbGViICAxLjIzICAgIDEuMTIzNEUrNiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwNDcgc2NhbGViICAxLjIzICAgIDEuMTIzRSs0ICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCitzY2J4MTIwIHNjYWxlYiAgMS4yMyAgICAyMDE1ICAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzY2J4MTIxIHNjYWxlYiAgMS4yMyAgICAyMDE2ICAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzY2J4MTIyIHNjYWxlYiAgMS4yMyAgICAyMDE3ICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MTIzIHNjYWxlYiAgMS4yMyAgICAyMDE4ICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MTI0IHNjYWxlYiAgMS4yMyAgIC0yMDE1ICAgICAgICAtPiAgMEUtMTAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitzY2J4MTI1IHNjYWxlYiAgMS4yMyAgIC0yMDE2ICAgICAgICAtPiAgMEUtMTAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitzY2J4MTI2IHNjYWxlYiAgMS4yMyAgIC0yMDE3ICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MTI3IHNjYWxlYiAgMS4yMyAgIC0yMDE4ICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK3NjYng4NjEgc2NhbGViICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xCitzY2J4ODYyIHNjYWxlYiAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMgorc2NieDg2MyBzY2FsZWIgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK3NjYng4NjQgc2NhbGViICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40CitzY2J4ODY1IHNjYWxlYiAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQorc2NieDg2NiBzY2FsZWIgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitzY2J4ODY3IHNjYWxlYiAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODEKK3NjYng4Njggc2NhbGViICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQorc2NieDg2OSBzY2FsZWIgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorc2NieDg3MSBzY2FsZWIgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg3MiBzY2FsZWIgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg3MyBzY2FsZWIgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg3NCBzY2FsZWIgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg3NSBzY2FsZWIgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg3NiBzY2FsZWIgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg3NyBzY2FsZWIgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg3OCBzY2FsZWIgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg3OSBzY2FsZWIgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg4MCBzY2FsZWIgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbgorc2NieDg4MSBzY2FsZWIgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmaW5pdGVzCitzY2J4MDUxIHNjYWxlYiAgICAgICAgICA3ICAgLTIgIC0+IDAuMDcKK3NjYngwNTIgc2NhbGViICAgICAgICAgLTcgICAtMiAgLT4gLTAuMDcKK3NjYngwNTMgc2NhbGViICAgICAgICAgNzUgICAtMiAgLT4gMC43NQorc2NieDA1NCBzY2FsZWIgICAgICAgIC03NSAgIC0yICAtPiAtMC43NQorc2NieDA1NSBzY2FsZWIgICAgICAgNy41MCAgIC0yICAtPiAwLjA3NTAKK3NjYngwNTYgc2NhbGViICAgICAgLTcuNTAgICAtMiAgLT4gLTAuMDc1MAorc2NieDA1NyBzY2FsZWIgICAgICAgNy41MDAgIC0yICAtPiAwLjA3NTAwCitzY2J4MDU4IHNjYWxlYiAgICAgIC03LjUwMCAgLTIgIC0+IC0wLjA3NTAwCitzY2J4MDYxIHNjYWxlYiAgICAgICAgICA3ICAgLTEgIC0+IDAuNworc2NieDA2MiBzY2FsZWIgICAgICAgICAtNyAgIC0xICAtPiAtMC43CitzY2J4MDYzIHNjYWxlYiAgICAgICAgIDc1ICAgLTEgIC0+IDcuNQorc2NieDA2NCBzY2FsZWIgICAgICAgIC03NSAgIC0xICAtPiAtNy41CitzY2J4MDY1IHNjYWxlYiAgICAgICA3LjUwICAgLTEgIC0+IDAuNzUwCitzY2J4MDY2IHNjYWxlYiAgICAgIC03LjUwICAgLTEgIC0+IC0wLjc1MAorc2NieDA2NyBzY2FsZWIgICAgICAgNy41MDAgIC0xICAtPiAwLjc1MDAKK3NjYngwNjggc2NhbGViICAgICAgLTcuNTAwICAtMSAgLT4gLTAuNzUwMAorc2NieDA3MSBzY2FsZWIgICAgICAgICAgNyAgICAwICAtPiA3CitzY2J4MDcyIHNjYWxlYiAgICAgICAgIC03ICAgIDAgIC0+IC03CitzY2J4MDczIHNjYWxlYiAgICAgICAgIDc1ICAgIDAgIC0+IDc1CitzY2J4MDc0IHNjYWxlYiAgICAgICAgLTc1ICAgIDAgIC0+IC03NQorc2NieDA3NSBzY2FsZWIgICAgICAgNy41MCAgICAwICAtPiA3LjUwCitzY2J4MDc2IHNjYWxlYiAgICAgIC03LjUwICAgIDAgIC0+IC03LjUwCitzY2J4MDc3IHNjYWxlYiAgICAgICA3LjUwMCAgIDAgIC0+IDcuNTAwCitzY2J4MDc4IHNjYWxlYiAgICAgIC03LjUwMCAgIDAgIC0+IC03LjUwMAorc2NieDA4MSBzY2FsZWIgICAgICAgICAgNyAgICAxICAtPiA3RSsxCitzY2J4MDgyIHNjYWxlYiAgICAgICAgIC03ICAgIDEgIC0+IC03RSsxCitzY2J4MDgzIHNjYWxlYiAgICAgICAgIDc1ICAgIDEgIC0+IDcuNUUrMgorc2NieDA4NCBzY2FsZWIgICAgICAgIC03NSAgICAxICAtPiAtNy41RSsyCitzY2J4MDg1IHNjYWxlYiAgICAgICA3LjUwICAgIDEgIC0+IDc1LjAKK3NjYngwODYgc2NhbGViICAgICAgLTcuNTAgICAgMSAgLT4gLTc1LjAKK3NjYngwODcgc2NhbGViICAgICAgIDcuNTAwICAgMSAgLT4gNzUuMDAKK3NjYngwODggc2NhbGViICAgICAgLTcuNTAwICAgMSAgLT4gLTc1LjAwCitzY2J4MDkxIHNjYWxlYiAgICAgICAgICA3ICAgIDIgIC0+IDdFKzIKK3NjYngwOTIgc2NhbGViICAgICAgICAgLTcgICAgMiAgLT4gLTdFKzIKK3NjYngwOTMgc2NhbGViICAgICAgICAgNzUgICAgMiAgLT4gNy41RSszCitzY2J4MDk0IHNjYWxlYiAgICAgICAgLTc1ICAgIDIgIC0+IC03LjVFKzMKK3NjYngwOTUgc2NhbGViICAgICAgIDcuNTAgICAgMiAgLT4gNzUwCitzY2J4MDk2IHNjYWxlYiAgICAgIC03LjUwICAgIDIgIC0+IC03NTAKK3NjYngwOTcgc2NhbGViICAgICAgIDcuNTAwICAgMiAgLT4gNzUwLjAKK3NjYngwOTggc2NhbGViICAgICAgLTcuNTAwICAgMiAgLT4gLTc1MC4wCisKKy0tIHplcm9zCitzY2J4MTExIHNjYWxlYiAgICAgICAgICAwICAxIC0+IDBFKzEKK3NjYngxMTIgc2NhbGViICAgICAgICAgLTAgIDIgLT4gLTBFKzIKK3NjYngxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNworc2NieDExNCBzY2FsZWIgICAgICAtMEUrNCAgNCAtPiAtMEUrOAorc2NieDExNSBzY2FsZWIgICAgIDAuMDAwMCAgNSAtPiAwRSsxCitzY2J4MTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyCitzY2J4MTE3IHNjYWxlYiAgICAgIDBFLTE0MSA3IC0+IDBFLTEzNAorc2NieDExOCBzY2FsZWIgICAgIC0wRS0xNDEgOCAtPiAtMEUtMTMzCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitzY2J4MTMyIHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICs5OTkgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzY2J4MTMzIHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICArMTAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDEzNCBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgKzEgIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NjYngxMzUgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgICAwICAtPiA5Ljk5OTk5OTk5RSs5OTkKK3NjYngxMzYgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgIC0xICAtPiA5Ljk5OTk5OTk5RSs5OTgKK3NjYngxMzcgc2NhbGViICAxRS05OTkgICAgICAgICAgICsxICAtPiAxRS05OTgKK3NjYngxMzggc2NhbGViICAxRS05OTkgICAgICAgICAgIC0wICAtPiAxRS05OTkKK3NjYngxMzkgc2NhbGViICAxRS05OTkgICAgICAgICAgIC0xICAtPiAxRS0xMDAwICAgICAgICAgU3Vibm9ybWFsCitzY2J4MTQwIHNjYWxlYiAgMS4wMDAwMDAwMEUtOTk5ICArMSAgLT4gMS4wMDAwMDAwMEUtOTk4CitzY2J4MTQxIHNjYWxlYiAgMS4wMDAwMDAwMEUtOTk5ICAgMCAgLT4gMS4wMDAwMDAwMEUtOTk5CitzY2J4MTQyIHNjYWxlYiAgMS4wMDAwMDAwMEUtOTk5ICAtMSAgLT4gMS4wMDAwMDAwRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitzY2J4MTQzIHNjYWxlYiAgMUUtMTAwNyAgICAgICAgICArMSAgLT4gMUUtMTAwNiAgICAgICAgIFN1Ym5vcm1hbAorc2NieDE0NCBzY2FsZWIgIDFFLTEwMDcgICAgICAgICAgLTAgIC0+IDFFLTEwMDcgICAgICAgICBTdWJub3JtYWwKK3NjYngxNDUgc2NhbGViICAxRS0xMDA3ICAgICAgICAgIC0xICAtPiAwRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitzY2J4MTUwIHNjYWxlYiAgLTFFLTEwMDcgICAgICAgICArMSAgLT4gLTFFLTEwMDYgICAgICAgIFN1Ym5vcm1hbAorc2NieDE1MSBzY2FsZWIgIC0xRS0xMDA3ICAgICAgICAgLTAgIC0+IC0xRS0xMDA3ICAgICAgICBTdWJub3JtYWwKK3NjYngxNTIgc2NhbGViICAtMUUtMTAwNyAgICAgICAgIC0xICAtPiAtMEUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorc2NieDE1MyBzY2FsZWIgIC0xLjAwMDAwMDAwRS05OTkgKzEgIC0+IC0xLjAwMDAwMDAwRS05OTgKK3NjYngxNTQgc2NhbGViICAtMS4wMDAwMDAwMEUtOTk5ICswICAtPiAtMS4wMDAwMDAwMEUtOTk5CitzY2J4MTU1IHNjYWxlYiAgLTEuMDAwMDAwMDBFLTk5OSAtMSAgLT4gLTEuMDAwMDAwMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorc2NieDE1NiBzY2FsZWIgIC0xRS05OTkgICAgICAgICAgKzEgIC0+IC0xRS05OTgKK3NjYngxNTcgc2NhbGViICAtMUUtOTk5ICAgICAgICAgIC0wICAtPiAtMUUtOTk5CitzY2J4MTU4IHNjYWxlYiAgLTFFLTk5OSAgICAgICAgICAtMSAgLT4gLTFFLTEwMDAgICAgICAgICBTdWJub3JtYWwKK3NjYngxNTkgc2NhbGViICAtOS45OTk5OTk5OUUrOTk5ICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDE2MCBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgKzAgIC0+IC05Ljk5OTk5OTk5RSs5OTkKK3NjYngxNjEgc2NhbGViICAtOS45OTk5OTk5OUUrOTk5IC0xICAtPiAtOS45OTk5OTk5OUUrOTk4CitzY2J4MTYyIHNjYWxlYiAgLTlFKzk5OSAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NjYngxNjMgc2NhbGViICAtMUUrOTk5ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBLcmFoIGV4YW1wbGVzCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbkV4cG9uZW50OiAtOTk5OTk5OTk5CistLSBpbnRlZ2VyIG92ZXJmbG93IGluIDMuNjEgb3IgZWFybGllcgorc2NieDE2NCBzY2FsZWIgIDFFLTk5OTk5OTk5OSAgLTEyMDAwMDAwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gb3V0IG9mIHJhbmdlCitzY2J4MTY1IHNjYWxlYiAgLTFFLTk5OTk5OTk5OSAgKzEyMDAwMDAwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zaGlmdC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zaGlmdC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODM4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NoaWZ0LmRlY1Rlc3QKQEAgLTAsMCArMSwyNTAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gc2hpZnQuZGVjVGVzdCAtLSBzaGlmdCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sKK3NoaXgwMDEgc2hpZnQgICAgICAgICAgMCAgICAwICAtPiAgMAorc2hpeDAwMiBzaGlmdCAgICAgICAgICAwICAgIDIgIC0+ICAwCitzaGl4MDAzIHNoaWZ0ICAgICAgICAgIDEgICAgMiAgLT4gIDEwMAorc2hpeDAwNCBzaGlmdCAgICAgICAgICAxICAgIDggIC0+ICAxMDAwMDAwMDAKK3NoaXgwMDUgc2hpZnQgICAgICAgICAgMSAgICA5ICAtPiAgMAorc2hpeDAwNiBzaGlmdCAgICAgICAgICAxICAgLTEgIC0+ICAwCitzaGl4MDA3IHNoaWZ0ICAxMjM0NTY3ODkgICAtMSAgLT4gIDEyMzQ1Njc4CitzaGl4MDA4IHNoaWZ0ICAxMjM0NTY3ODkgICAtOCAgLT4gIDEKK3NoaXgwMDkgc2hpZnQgIDEyMzQ1Njc4OSAgIC05ICAtPiAgMAorc2hpeDAxMCBzaGlmdCAgICAgICAgICAwICAgLTIgIC0+ICAwCisKKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXIKK3NoaXgwMTEgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxMiBzaGlmdCAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDEzIHNoaWZ0ICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMTQgc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxNSBzaGlmdCAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDE2IHNoaWZ0ICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMTcgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxOCBzaGlmdCAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCitzaGl4MDIwIHNoaWZ0ICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMjEgc2hpZnQgICAgICAgIDEgICAgLTEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAyMiBzaGlmdCAgICAgICAgMSAgICAgMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDIzIHNoaWZ0ICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gZnVsbCBzaGlmdGluZyBwYXR0ZXJuCitzaGl4MDMwIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTkgICAtPiAwCitzaGl4MDMxIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTggICAtPiAxCitzaGl4MDMyIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTcgICAtPiAxMgorc2hpeDAzMyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC02ICAgLT4gMTIzCitzaGl4MDM0IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTUgICAtPiAxMjM0CitzaGl4MDM1IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTQgICAtPiAxMjM0NQorc2hpeDAzNiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0zICAgLT4gMTIzNDU2CitzaGl4MDM3IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTIgICAtPiAxMjM0NTY3CitzaGl4MDM4IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTEgICAtPiAxMjM0NTY3OAorc2hpeDAzOSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5CitzaGl4MDQwIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkKK3NoaXgwNDEgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MAorc2hpeDA0MiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAwCitzaGl4MDQzIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzMgICAtPiA0NTY3ODkwMDAKK3NoaXgwNDQgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNCAgIC0+IDU2Nzg5MDAwMAorc2hpeDA0NSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs1ICAgLT4gNjc4OTAwMDAwCitzaGl4MDQ2IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzYgICAtPiA3ODkwMDAwMDAKK3NoaXgwNDcgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNyAgIC0+IDg5MDAwMDAwMAorc2hpeDA0OCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs4ICAgLT4gOTAwMDAwMDAwCitzaGl4MDQ5IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzkgICAtPiAwCisKKy0tIGZyb20gZXhhbXBsZXMKK3NoaXgwNTEgc2hpZnQgMzQgICAgICAgIDggICAtPiAgJzQwMDAwMDAwMCcKK3NoaXgwNTIgc2hpZnQgMTIgICAgICAgIDkgICAtPiAgJzAnCitzaGl4MDUzIHNoaWZ0IDEyMzQ1Njc4OSAtMiAgLT4gICcxMjM0NTY3Jworc2hpeDA1NCBzaGlmdCAxMjM0NTY3ODkgMCAgIC0+ICAnMTIzNDU2Nzg5Jworc2hpeDA1NSBzaGlmdCAxMjM0NTY3ODkgKzIgIC0+ICAnMzQ1Njc4OTAwJworCistLSB6ZXJvcworc2hpeDA2MCBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRS0xMAorc2hpeDA2MSBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMAorc2hpeDA2MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMAorc2hpeDA2MyBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gICAwLjAwMAorc2hpeDA2NCBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMAorc2hpeDA2NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMAorc2hpeDA2NiBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRS0xMAorc2hpeDA2NyBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMAorc2hpeDA2OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMAorc2hpeDA2OSBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gIC0wLjAwMAorc2hpeDA3MCBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMAorc2hpeDA3MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMAorCistLSBObWF4LCBObWluLCBOdGlueQorc2hpeDE0MSBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gOS45OTk5OTk5RSs5OTgKK3NoaXgxNDIgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IDlFKzk5MQorc2hpeDE0MyBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gOS45OTk5OTk5MEUrOTk5CitzaGl4MTQ0IHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiA5LjAwMDAwMDAwRSs5OTkKK3NoaXgxNDUgc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IDBFLTk5OQorc2hpeDE0NiBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gMEUtOTk5CitzaGl4MTQ3IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgICAxICAtPiAxLjBFLTk5OAorc2hpeDE0OCBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTkxCitzaGl4MTUxIHNoaWZ0ICAxLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAxLjAwMDAwMDBFLTEwMDAKK3NoaXgxNTIgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDFFLTEwMDcKK3NoaXgxNTMgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IDBFLTEwMDcKK3NoaXgxNTQgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDBFLTEwMDcKK3NoaXgxNTUgc2hpZnQgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDkuMDAwMDAwMEUtMTAwMAorc2hpeDE1NiBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gOUUtMTAwNworc2hpeDE1NyBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMEUtMTAwNworc2hpeDE1OCBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gMEUtMTAwNworc2hpeDE2MCBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gMEUtMTAwNworc2hpeDE2MSBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gMEUtMTAwNworc2hpeDE2MiBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gMS4wRS0xMDA2CitzaGl4MTYzIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTkKKy0tICBuZWdhdGl2ZXMKK3NoaXgxNzEgc2hpZnQgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IC05Ljk5OTk5OTlFKzk5OAorc2hpeDE3MiBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAtOCAgLT4gLTlFKzk5MQorc2hpeDE3MyBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gLTkuOTk5OTk5OTBFKzk5OQorc2hpeDE3NCBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gLTkuMDAwMDAwMDBFKzk5OQorc2hpeDE3NSBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAtMSAgLT4gLTBFLTk5OQorc2hpeDE3NiBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gLTBFLTk5OQorc2hpeDE3NyBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtOTk4CitzaGl4MTc4IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTkxCitzaGl4MTgxIHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAtMS4wMDAwMDAwRS0xMDAwCitzaGl4MTgyIHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtMUUtMTAwNworc2hpeDE4MyBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTBFLTEwMDcKK3NoaXgxODQgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IC0wRS0xMDA3CitzaGl4MTg1IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAtOS4wMDAwMDAwRS0xMDAwCitzaGl4MTg2IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtOUUtMTAwNworc2hpeDE4NyBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTBFLTEwMDcKK3NoaXgxODggc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IC0wRS0xMDA3CitzaGl4MTkwIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgIC0xICAtPiAtMEUtMTAwNworc2hpeDE5MSBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gLTBFLTEwMDcKK3NoaXgxOTIgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTEwMDYKK3NoaXgxOTMgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTkKKworLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQorc2hpeDIwMSBzaGlmdCAgICAgICAgIC0wICAgIDAgIC0+ICAtMAorc2hpeDIwMiBzaGlmdCAgICAgICAgIC0wICAgIDIgIC0+ICAtMAorc2hpeDIwMyBzaGlmdCAgICAgICAgIC0xICAgIDIgIC0+ICAtMTAwCitzaGl4MjA0IHNoaWZ0ICAgICAgICAgLTEgICAgOCAgLT4gIC0xMDAwMDAwMDAKK3NoaXgyMDUgc2hpZnQgICAgICAgICAtMSAgICA5ICAtPiAgLTAKK3NoaXgyMDYgc2hpZnQgICAgICAgICAtMSAgIC0xICAtPiAgLTAKK3NoaXgyMDcgc2hpZnQgLTEyMzQ1Njc4OSAgIC0xICAtPiAgLTEyMzQ1Njc4CitzaGl4MjA4IHNoaWZ0IC0xMjM0NTY3ODkgICAtOCAgLT4gIC0xCitzaGl4MjA5IHNoaWZ0IC0xMjM0NTY3ODkgICAtOSAgLT4gIC0wCitzaGl4MjEwIHNoaWZ0ICAgICAgICAgLTAgICAtMiAgLT4gIC0wCitzaGl4MjExIHNoaWZ0ICAgICAgICAgLTAgICAtMCAgLT4gIC0wCisKKworLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKK3NoaXg3ODEgc2hpZnQgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorc2hpeDc4MiBzaGlmdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitzaGl4NzgzIHNoaWZ0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK3NoaXg3ODQgc2hpZnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorc2hpeDc4NSBzaGlmdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitzaGl4Nzg2IHNoaWZ0IC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKK3NoaXg3ODcgc2hpZnQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc4OCBzaGlmdCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4Nzg5IHNoaWZ0IC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg3OTAgc2hpZnQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc5MSBzaGlmdCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4NzkyIHNoaWZ0ICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg3OTMgc2hpZnQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc5NCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3NoaXg4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgwMSBzaGlmdCAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK3NoaXg4MDIgc2hpZnQgIEluZiAgLTEgICAgIC0+IEluZmluaXR5CitzaGl4ODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQorc2hpeDgwNCBzaGlmdCAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK3NoaXg4MDUgc2hpZnQgIEluZiAgIDEgICAgIC0+IEluZmluaXR5CitzaGl4ODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQorc2hpeDgwNyBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODA4IHNoaWZ0IC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgxMCBzaGlmdCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODExIHNoaWZ0IC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgxMyBzaGlmdCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODE0IHNoaWZ0ICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitzaGl4ODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFOCitzaGl4ODIyIHNoaWZ0ICBOYU4gLTEwMDAgICAtPiAgTmFOCitzaGl4ODIzIHNoaWZ0ICBOYU4gLTEgICAgICAtPiAgTmFOCitzaGl4ODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFOCitzaGl4ODI1IHNoaWZ0ICBOYU4gIDAgICAgICAtPiAgTmFOCitzaGl4ODI2IHNoaWZ0ICBOYU4gIDEgICAgICAtPiAgTmFOCitzaGl4ODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFOCitzaGl4ODI4IHNoaWZ0ICBOYU4gIEluZiAgICAtPiAgTmFOCitzaGl4ODI5IHNoaWZ0ICBOYU4gIE5hTiAgICAtPiAgTmFOCitzaGl4ODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFOCitzaGl4ODMxIHNoaWZ0IC0xMDAwIE5hTiAgICAtPiAgTmFOCitzaGl4ODMyIHNoaWZ0IC0xICAgIE5hTiAgICAtPiAgTmFOCitzaGl4ODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFOCitzaGl4ODM0IHNoaWZ0ICAwICAgIE5hTiAgICAtPiAgTmFOCitzaGl4ODM1IHNoaWZ0ICAxICAgIE5hTiAgICAtPiAgTmFOCitzaGl4ODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFOCitzaGl4ODM3IHNoaWZ0ICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK3NoaXg4NDEgc2hpZnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQyIHNoaWZ0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0MyBzaGlmdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDQgc2hpZnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQ1IHNoaWZ0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0NiBzaGlmdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDcgc2hpZnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQ4IHNoaWZ0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0OSBzaGlmdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTAgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODUxIHNoaWZ0IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1MiBzaGlmdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTMgc2hpZnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODU0IHNoaWZ0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1NSBzaGlmdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTYgc2hpZnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODU3IHNoaWZ0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1OCBzaGlmdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTkgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK3NoaXg4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitzaGl4ODYyIHNoaWZ0ICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorc2hpeDg2MyBzaGlmdCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK3NoaXg4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitzaGl4ODY1IHNoaWZ0ICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorc2hpeDg2NiBzaGlmdCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK3NoaXg4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitzaGl4ODY4IHNoaWZ0ICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorc2hpeDg2OSBzaGlmdCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitzaGl4ODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODcyIHNoaWZ0ICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODczIHNoaWZ0ICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc1IHNoaWZ0ICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc2IHNoaWZ0ICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc4IHNoaWZ0IC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc5IHNoaWZ0ICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODgxIHNoaWZ0ICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODgyIHNoaWZ0IC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK3NoaXg4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4ODQgc2hpZnQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorc2hpeDg4NSBzaGlmdCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zcXVhcmVyb290LmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NxdWFyZXJvb3QuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTBlNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zcXVhcmVyb290LmRlY1Rlc3QKQEAgLTAsMCArMSwzODM0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHNxdWFyZXJvb3QuZGVjVGVzdCAtLSBkZWNpbWFsIHNxdWFyZSByb290ICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDMsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gYmFzaWNzCitzcXR4MDAxIHNxdWFyZXJvb3QgMSAgICAgICAtPiAxCitzcXR4MDAyIHNxdWFyZXJvb3QgLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwMDMgc3F1YXJlcm9vdCAxLjAwICAgIC0+IDEuMAorc3F0eDAwNCBzcXVhcmVyb290IC0xLjAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDA1IHNxdWFyZXJvb3QgMCAgICAgICAtPiAwCitzcXR4MDA2IHNxdWFyZXJvb3QgMDAuMCAgICAtPiAwLjAKK3NxdHgwMDcgc3F1YXJlcm9vdCAwLjAwICAgIC0+IDAuMAorc3F0eDAwOCBzcXVhcmVyb290IDAwLjAwICAgLT4gMC4wCitzcXR4MDA5IHNxdWFyZXJvb3QgMDAuMDAwICAtPiAwLjAwCitzcXR4MDEwIHNxdWFyZXJvb3QgMDAuMDAwMCAtPiAwLjAwCitzcXR4MDExIHNxdWFyZXJvb3QgMDAgICAgICAtPiAwCisKK3NxdHgwMTIgc3F1YXJlcm9vdCAtMiAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDAxMyBzcXVhcmVyb290IDIgICAgICAgLT4gMS40MTQyMTM1NiBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwMTQgc3F1YXJlcm9vdCAtMi4wMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDAxNSBzcXVhcmVyb290IDIuMDAgICAgLT4gMS40MTQyMTM1NiBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwMTYgc3F1YXJlcm9vdCAtMCAgICAgIC0+IC0wCitzcXR4MDE3IHNxdWFyZXJvb3QgLTAuMCAgICAtPiAtMC4wCitzcXR4MDE4IHNxdWFyZXJvb3QgLTAwLjAwICAtPiAtMC4wCitzcXR4MDE5IHNxdWFyZXJvb3QgLTAwLjAwMCAtPiAtMC4wMAorc3F0eDAyMCBzcXVhcmVyb290IC0wLjAwMDAgLT4gLTAuMDAKK3NxdHgwMjEgc3F1YXJlcm9vdCAtMEUrOSAgIC0+IC0wRSs0CitzcXR4MDIyIHNxdWFyZXJvb3QgLTBFKzEwICAtPiAtMEUrNQorc3F0eDAyMyBzcXVhcmVyb290IC0wRSsxMSAgLT4gLTBFKzUKK3NxdHgwMjQgc3F1YXJlcm9vdCAtMEUrMTIgIC0+IC0wRSs2CitzcXR4MDI1IHNxdWFyZXJvb3QgLTAwICAgICAtPiAtMAorc3F0eDAyNiBzcXVhcmVyb290IDBFKzUgICAgLT4gMEUrMgorc3F0eDAyNyBzcXVhcmVyb290IDQuMCAgICAgLT4gMi4wCitzcXR4MDI4IHNxdWFyZXJvb3QgNC4wMCAgICAtPiAyLjAKKworc3F0eDAzMCBzcXVhcmVyb290ICswLjEgICAgICAgICAgICAtPiAwLjMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwMzEgc3F1YXJlcm9vdCAtMC4xICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDMyIHNxdWFyZXJvb3QgKzAuMDEgICAgICAgICAgIC0+IDAuMQorc3F0eDAzMyBzcXVhcmVyb290IC0wLjAxICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwMzQgc3F1YXJlcm9vdCArMC4wMDEgICAgICAgICAgLT4gMC4wMzE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorc3F0eDAzNSBzcXVhcmVyb290IC0wLjAwMSAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwMzYgc3F1YXJlcm9vdCArMC4wMDAwMDEgICAgICAgLT4gMC4wMDEKK3NxdHgwMzcgc3F1YXJlcm9vdCAtMC4wMDAwMDEgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDM4IHNxdWFyZXJvb3QgKzAuMDAwMDAwMDAwMDAxIC0+IDAuMDAwMDAxCitzcXR4MDM5IHNxdWFyZXJvb3QgLTAuMDAwMDAwMDAwMDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitzcXR4MDQxIHNxdWFyZXJvb3QgMS4xICAgICAgICAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZAorc3F0eDA0MiBzcXVhcmVyb290IDEuMTAgICAgICAgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwNDMgc3F1YXJlcm9vdCAxLjEwMCAgICAgIC0+IDEuMDQ4ODA4ODUgSW5leGFjdCBSb3VuZGVkCitzcXR4MDQ0IHNxdWFyZXJvb3QgMS4xMTAgICAgICAtPiAxLjA1MzU2NTM4IEluZXhhY3QgUm91bmRlZAorc3F0eDA0NSBzcXVhcmVyb290IC0xLjEgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDQ2IHNxdWFyZXJvb3QgLTEuMTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwNDcgc3F1YXJlcm9vdCAtMS4xMDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDA0OCBzcXVhcmVyb290IC0xLjExMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDQ5IHNxdWFyZXJvb3QgOS45ICAgICAgICAtPiAzLjE0NjQyNjU0IEluZXhhY3QgUm91bmRlZAorc3F0eDA1MCBzcXVhcmVyb290IDkuOTAgICAgICAgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwNTEgc3F1YXJlcm9vdCA5LjkwMCAgICAgIC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkCitzcXR4MDUyIHNxdWFyZXJvb3QgOS45OTAgICAgICAtPiAzLjE2MDY5NjEzIEluZXhhY3QgUm91bmRlZAorc3F0eDA1MyBzcXVhcmVyb290IC05LjkgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDU0IHNxdWFyZXJvb3QgLTkuOTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwNTUgc3F1YXJlcm9vdCAtOS45MDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDA1NiBzcXVhcmVyb290IC05Ljk5MCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3NxdHgwNjAgc3F1YXJlcm9vdCAgMSAgICAgICAgICAgLT4gMQorc3F0eDA2MSBzcXVhcmVyb290ICAxLjAgICAgICAgICAtPiAxLjAKK3NxdHgwNjIgc3F1YXJlcm9vdCAgMS4wMCAgICAgICAgLT4gMS4wCitzcXR4MDYzIHNxdWFyZXJvb3QgIDEwLjAgICAgICAgIC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitzcXR4MDY0IHNxdWFyZXJvb3QgIDEwLjAgICAgICAgIC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitzcXR4MDY1IHNxdWFyZXJvb3QgIDEwLjAgICAgICAgIC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitzcXR4MDY2IHNxdWFyZXJvb3QgIDEwLjAwICAgICAgIC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitzcXR4MDY3IHNxdWFyZXJvb3QgIDEwMCAgICAgICAgIC0+IDEwCitzcXR4MDY4IHNxdWFyZXJvb3QgIDEwMC4wICAgICAgIC0+IDEwLjAKK3NxdHgwNjkgc3F1YXJlcm9vdCAgMTAwLjAwICAgICAgLT4gMTAuMAorc3F0eDA3MCBzcXVhcmVyb290ICAxLjEwMDBFKzMgICAtPiAzMy4xNjYyNDc5IEluZXhhY3QgUm91bmRlZAorc3F0eDA3MSBzcXVhcmVyb290ICAxLjEwMDAwRSszICAtPiAzMy4xNjYyNDc5IEluZXhhY3QgUm91bmRlZAorc3F0eDA3MiBzcXVhcmVyb290IC0xMC4wICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwNzMgc3F1YXJlcm9vdCAtMTAuMDAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDc0IHNxdWFyZXJvb3QgLTEwMC4wICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDA3NSBzcXVhcmVyb290IC0xMDAuMDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwNzYgc3F1YXJlcm9vdCAtMS4xMDAwRSszICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDc3IHNxdWFyZXJvb3QgLTEuMTAwMDBFKzMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDA3OCBzcXVhcmVyb290ICAxLjAwMCAgICAgICAtPiAxLjAwCitzcXR4MDc5IHNxdWFyZXJvb3QgIDEuMDAwMCAgICAgIC0+IDEuMDAKKworLS0gZmFtb3VzIHNxdWFyZXMKK3NxdHgwODAgc3F1YXJlcm9vdCAgICAgMSAgLT4gMQorc3F0eDA4MSBzcXVhcmVyb290ICAgICA0ICAtPiAyCitzcXR4MDgyIHNxdWFyZXJvb3QgICAgIDkgIC0+IDMKK3NxdHgwODMgc3F1YXJlcm9vdCAgICAxNiAgLT4gNAorc3F0eDA4NCBzcXVhcmVyb290ICAgIDI1ICAtPiA1CitzcXR4MDg1IHNxdWFyZXJvb3QgICAgMzYgIC0+IDYKK3NxdHgwODYgc3F1YXJlcm9vdCAgICA0OSAgLT4gNworc3F0eDA4NyBzcXVhcmVyb290ICAgIDY0ICAtPiA4CitzcXR4MDg4IHNxdWFyZXJvb3QgICAgODEgIC0+IDkKK3NxdHgwODkgc3F1YXJlcm9vdCAgIDEwMCAgLT4gMTAKK3NxdHgwOTAgc3F1YXJlcm9vdCAgIDEyMSAgLT4gMTEKK3NxdHgwOTEgc3F1YXJlcm9vdCAgIDE0NCAgLT4gMTIKK3NxdHgwOTIgc3F1YXJlcm9vdCAgIDE2OSAgLT4gMTMKK3NxdHgwOTMgc3F1YXJlcm9vdCAgIDI1NiAgLT4gMTYKK3NxdHgwOTQgc3F1YXJlcm9vdCAgMTAyNCAgLT4gMzIKK3NxdHgwOTUgc3F1YXJlcm9vdCAgNDA5NiAgLT4gNjQKK3NxdHgxMDAgc3F1YXJlcm9vdCAgIDAuMDEgLT4gMC4xCitzcXR4MTAxIHNxdWFyZXJvb3QgICAwLjA0IC0+IDAuMgorc3F0eDEwMiBzcXVhcmVyb290ICAgMC4wOSAtPiAwLjMKK3NxdHgxMDMgc3F1YXJlcm9vdCAgIDAuMTYgLT4gMC40CitzcXR4MTA0IHNxdWFyZXJvb3QgICAwLjI1IC0+IDAuNQorc3F0eDEwNSBzcXVhcmVyb290ICAgMC4zNiAtPiAwLjYKK3NxdHgxMDYgc3F1YXJlcm9vdCAgIDAuNDkgLT4gMC43CitzcXR4MTA3IHNxdWFyZXJvb3QgICAwLjY0IC0+IDAuOAorc3F0eDEwOCBzcXVhcmVyb290ICAgMC44MSAtPiAwLjkKK3NxdHgxMDkgc3F1YXJlcm9vdCAgIDEuMDAgLT4gMS4wCitzcXR4MTEwIHNxdWFyZXJvb3QgICAxLjIxIC0+IDEuMQorc3F0eDExMSBzcXVhcmVyb290ICAgMS40NCAtPiAxLjIKK3NxdHgxMTIgc3F1YXJlcm9vdCAgIDEuNjkgLT4gMS4zCitzcXR4MTEzIHNxdWFyZXJvb3QgICAyLjU2IC0+IDEuNgorc3F0eDExNCBzcXVhcmVyb290ICAxMC4yNCAtPiAzLjIKK3NxdHgxMTUgc3F1YXJlcm9vdCAgNDAuOTYgLT4gNi40CisKKy0tIFByZWNpc2lvbiAxIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIHBsdXMgZXhwb25lbnQgYWRqdXN0c10KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246ICAgMQorc3F0eDEyMDEgc3F1YXJlcm9vdCAwLjEgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjAyIHNxdWFyZXJvb3QgMC4wMSAtPiAwLjEKK3NxdHgxMjAzIHNxdWFyZXJvb3QgMS4wRS0xIC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIwNCBzcXVhcmVyb290IDEuMDBFLTIgLT4gMC4xICBSb3VuZGVkCitzcXR4MTIwNSBzcXVhcmVyb290IDFFLTMgLT4gMC4wMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIwNiBzcXVhcmVyb290IDFFKzEgLT4gMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIwNyBzcXVhcmVyb290IDFFKzIgLT4gMUUrMQorc3F0eDEyMDggc3F1YXJlcm9vdCAxRSszIC0+IDNFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMDkgc3F1YXJlcm9vdCAwLjIgLT4gMC40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjEwIHNxdWFyZXJvb3QgMC4wMiAtPiAwLjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMTEgc3F1YXJlcm9vdCAyLjBFLTEgLT4gMC40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjEyIHNxdWFyZXJvb3QgMi4wMEUtMiAtPiAwLjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMTMgc3F1YXJlcm9vdCAyRS0zIC0+IDAuMDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMTQgc3F1YXJlcm9vdCAyRSsxIC0+IDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMTUgc3F1YXJlcm9vdCAyRSsyIC0+IDFFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMTYgc3F1YXJlcm9vdCAyRSszIC0+IDRFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMTcgc3F1YXJlcm9vdCAwLjMgLT4gMC41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjE4IHNxdWFyZXJvb3QgMC4wMyAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMTkgc3F1YXJlcm9vdCAzLjBFLTEgLT4gMC41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjIwIHNxdWFyZXJvb3QgMy4wMEUtMiAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMjEgc3F1YXJlcm9vdCAzRS0zIC0+IDAuMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMjIgc3F1YXJlcm9vdCAzRSsxIC0+IDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMjMgc3F1YXJlcm9vdCAzRSsyIC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMjQgc3F1YXJlcm9vdCAzRSszIC0+IDVFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMjUgc3F1YXJlcm9vdCAwLjQgLT4gMC42ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjI2IHNxdWFyZXJvb3QgMC4wNCAtPiAwLjIKK3NxdHgxMjI3IHNxdWFyZXJvb3QgNC4wRS0xIC0+IDAuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIyOCBzcXVhcmVyb290IDQuMDBFLTIgLT4gMC4yICBSb3VuZGVkCitzcXR4MTIyOSBzcXVhcmVyb290IDRFLTMgLT4gMC4wNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIzMCBzcXVhcmVyb290IDRFKzEgLT4gNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIzMSBzcXVhcmVyb290IDRFKzIgLT4gMkUrMQorc3F0eDEyMzIgc3F1YXJlcm9vdCA0RSszIC0+IDZFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMzMgc3F1YXJlcm9vdCAwLjUgLT4gMC43ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjM0IHNxdWFyZXJvb3QgMC4wNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMzUgc3F1YXJlcm9vdCA1LjBFLTEgLT4gMC43ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjM2IHNxdWFyZXJvb3QgNS4wMEUtMiAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMzcgc3F1YXJlcm9vdCA1RS0zIC0+IDAuMDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMzggc3F1YXJlcm9vdCA1RSsxIC0+IDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMzkgc3F1YXJlcm9vdCA1RSsyIC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNDAgc3F1YXJlcm9vdCA1RSszIC0+IDdFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNDEgc3F1YXJlcm9vdCAwLjYgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQyIHNxdWFyZXJvb3QgMC4wNiAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNDMgc3F1YXJlcm9vdCA2LjBFLTEgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQ0IHNxdWFyZXJvb3QgNi4wMEUtMiAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNDUgc3F1YXJlcm9vdCA2RS0zIC0+IDAuMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNDYgc3F1YXJlcm9vdCA2RSsxIC0+IDggIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNDcgc3F1YXJlcm9vdCA2RSsyIC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNDggc3F1YXJlcm9vdCA2RSszIC0+IDhFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNDkgc3F1YXJlcm9vdCAwLjcgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjUwIHNxdWFyZXJvb3QgMC4wNyAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNTEgc3F1YXJlcm9vdCA3LjBFLTEgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjUyIHNxdWFyZXJvb3QgNy4wMEUtMiAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNTMgc3F1YXJlcm9vdCA3RS0zIC0+IDAuMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNTQgc3F1YXJlcm9vdCA3RSsxIC0+IDggIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNTUgc3F1YXJlcm9vdCA3RSsyIC0+IDNFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNTYgc3F1YXJlcm9vdCA3RSszIC0+IDhFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNTcgc3F1YXJlcm9vdCAwLjggLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjU4IHNxdWFyZXJvb3QgMC4wOCAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNTkgc3F1YXJlcm9vdCA4LjBFLTEgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjYwIHNxdWFyZXJvb3QgOC4wMEUtMiAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNjEgc3F1YXJlcm9vdCA4RS0zIC0+IDAuMDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNjIgc3F1YXJlcm9vdCA4RSsxIC0+IDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNjMgc3F1YXJlcm9vdCA4RSsyIC0+IDNFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNjQgc3F1YXJlcm9vdCA4RSszIC0+IDlFKzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNjUgc3F1YXJlcm9vdCAwLjkgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjY2IHNxdWFyZXJvb3QgMC4wOSAtPiAwLjMKK3NxdHgxMjY3IHNxdWFyZXJvb3QgOS4wRS0xIC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI2OCBzcXVhcmVyb290IDkuMDBFLTIgLT4gMC4zICBSb3VuZGVkCitzcXR4MTI2OSBzcXVhcmVyb290IDlFLTMgLT4gMC4wOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI3MCBzcXVhcmVyb290IDlFKzEgLT4gOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI3MSBzcXVhcmVyb290IDlFKzIgLT4gM0UrMQorc3F0eDEyNzIgc3F1YXJlcm9vdCA5RSszIC0+IDlFKzEgIEluZXhhY3QgUm91bmRlZAorCistLSBQcmVjaXNpb24gMiBzcXVhcmVyb290IHRlc3RzIFtleGhhdXN0aXZlLCBwbHVzIGV4cG9uZW50IGFkanVzdHNdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDIKK3NxdHgyMjAxIHNxdWFyZXJvb3QgMC4xIC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMDIgc3F1YXJlcm9vdCAwLjAxIC0+IDAuMQorc3F0eDIyMDMgc3F1YXJlcm9vdCAxLjBFLTEgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIwNCBzcXVhcmVyb290IDEuMDBFLTIgLT4gMC4xMAorc3F0eDIyMDUgc3F1YXJlcm9vdCAxRS0zIC0+IDAuMDMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjA2IHNxdWFyZXJvb3QgMUUrMSAtPiAzLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMDcgc3F1YXJlcm9vdCAxRSsyIC0+IDFFKzEKK3NxdHgyMjA4IHNxdWFyZXJvb3QgMUUrMyAtPiAzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIwOSBzcXVhcmVyb290IDAuMiAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjEwIHNxdWFyZXJvb3QgMC4wMiAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjExIHNxdWFyZXJvb3QgMi4wRS0xIC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMTIgc3F1YXJlcm9vdCAyLjAwRS0yIC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMTMgc3F1YXJlcm9vdCAyRS0zIC0+IDAuMDQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjE0IHNxdWFyZXJvb3QgMkUrMSAtPiA0LjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMTUgc3F1YXJlcm9vdCAyRSsyIC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjE2IHNxdWFyZXJvb3QgMkUrMyAtPiA0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIxNyBzcXVhcmVyb290IDAuMyAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjE4IHNxdWFyZXJvb3QgMC4wMyAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjE5IHNxdWFyZXJvb3QgMy4wRS0xIC0+IDAuNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMjAgc3F1YXJlcm9vdCAzLjAwRS0yIC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMjEgc3F1YXJlcm9vdCAzRS0zIC0+IDAuMDU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjIyIHNxdWFyZXJvb3QgM0UrMSAtPiA1LjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMjMgc3F1YXJlcm9vdCAzRSsyIC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjI0IHNxdWFyZXJvb3QgM0UrMyAtPiA1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIyNSBzcXVhcmVyb290IDAuNCAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjI2IHNxdWFyZXJvb3QgMC4wNCAtPiAwLjIKK3NxdHgyMjI3IHNxdWFyZXJvb3QgNC4wRS0xIC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMjggc3F1YXJlcm9vdCA0LjAwRS0yIC0+IDAuMjAKK3NxdHgyMjI5IHNxdWFyZXJvb3QgNEUtMyAtPiAwLjA2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIzMCBzcXVhcmVyb290IDRFKzEgLT4gNi4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjMxIHNxdWFyZXJvb3QgNEUrMiAtPiAyRSsxCitzcXR4MjIzMiBzcXVhcmVyb290IDRFKzMgLT4gNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMzMgc3F1YXJlcm9vdCAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIzNCBzcXVhcmVyb290IDAuMDUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIzNSBzcXVhcmVyb290IDUuMEUtMSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjM2IHNxdWFyZXJvb3QgNS4wMEUtMiAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjM3IHNxdWFyZXJvb3QgNUUtMyAtPiAwLjA3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIzOCBzcXVhcmVyb290IDVFKzEgLT4gNy4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjM5IHNxdWFyZXJvb3QgNUUrMiAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI0MCBzcXVhcmVyb290IDVFKzMgLT4gNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNDEgc3F1YXJlcm9vdCAwLjYgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI0MiBzcXVhcmVyb290IDAuMDYgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI0MyBzcXVhcmVyb290IDYuMEUtMSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjQ0IHNxdWFyZXJvb3QgNi4wMEUtMiAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjQ1IHNxdWFyZXJvb3QgNkUtMyAtPiAwLjA3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI0NiBzcXVhcmVyb290IDZFKzEgLT4gNy43ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjQ3IHNxdWFyZXJvb3QgNkUrMiAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI0OCBzcXVhcmVyb290IDZFKzMgLT4gNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNDkgc3F1YXJlcm9vdCAwLjcgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI1MCBzcXVhcmVyb290IDAuMDcgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI1MSBzcXVhcmVyb290IDcuMEUtMSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjUyIHNxdWFyZXJvb3QgNy4wMEUtMiAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjUzIHNxdWFyZXJvb3QgN0UtMyAtPiAwLjA4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI1NCBzcXVhcmVyb290IDdFKzEgLT4gOC40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjU1IHNxdWFyZXJvb3QgN0UrMiAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI1NiBzcXVhcmVyb290IDdFKzMgLT4gODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNTcgc3F1YXJlcm9vdCAwLjggLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI1OCBzcXVhcmVyb290IDAuMDggLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI1OSBzcXVhcmVyb290IDguMEUtMSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjYwIHNxdWFyZXJvb3QgOC4wMEUtMiAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjYxIHNxdWFyZXJvb3QgOEUtMyAtPiAwLjA4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI2MiBzcXVhcmVyb290IDhFKzEgLT4gOC45ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjYzIHNxdWFyZXJvb3QgOEUrMiAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI2NCBzcXVhcmVyb290IDhFKzMgLT4gODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNjUgc3F1YXJlcm9vdCAwLjkgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI2NiBzcXVhcmVyb290IDAuMDkgLT4gMC4zCitzcXR4MjI2NyBzcXVhcmVyb290IDkuMEUtMSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjY4IHNxdWFyZXJvb3QgOS4wMEUtMiAtPiAwLjMwCitzcXR4MjI2OSBzcXVhcmVyb290IDlFLTMgLT4gMC4wOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNzAgc3F1YXJlcm9vdCA5RSsxIC0+IDkuNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI3MSBzcXVhcmVyb290IDlFKzIgLT4gM0UrMQorc3F0eDIyNzIgc3F1YXJlcm9vdCA5RSszIC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjczIHNxdWFyZXJvb3QgMC4xMCAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjc0IHNxdWFyZXJvb3QgMC4wMTAgLT4gMC4xMAorc3F0eDIyNzUgc3F1YXJlcm9vdCAxMC4wRS0xIC0+IDEuMAorc3F0eDIyNzYgc3F1YXJlcm9vdCAxMC4wMEUtMiAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjc3IHNxdWFyZXJvb3QgMTBFLTMgLT4gMC4xMAorc3F0eDIyNzggc3F1YXJlcm9vdCAxMEUrMSAtPiAxMAorc3F0eDIyNzkgc3F1YXJlcm9vdCAxMEUrMiAtPiAzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI4MCBzcXVhcmVyb290IDEwRSszIC0+IDEuMEUrMgorc3F0eDIyODEgc3F1YXJlcm9vdCAwLjExIC0+IDAuMzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyODIgc3F1YXJlcm9vdCAwLjAxMSAtPiAwLjEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjgzIHNxdWFyZXJvb3QgMTEuMEUtMSAtPiAxLjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyODQgc3F1YXJlcm9vdCAxMS4wMEUtMiAtPiAwLjMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjg1IHNxdWFyZXJvb3QgMTFFLTMgLT4gMC4xMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI4NiBzcXVhcmVyb290IDExRSsxIC0+IDEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjg3IHNxdWFyZXJvb3QgMTFFKzIgLT4gMzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyODggc3F1YXJlcm9vdCAxMUUrMyAtPiAxLjBFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyODkgc3F1YXJlcm9vdCAwLjEyIC0+IDAuMzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyOTAgc3F1YXJlcm9vdCAwLjAxMiAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjkxIHNxdWFyZXJvb3QgMTIuMEUtMSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyOTIgc3F1YXJlcm9vdCAxMi4wMEUtMiAtPiAwLjM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjkzIHNxdWFyZXJvb3QgMTJFLTMgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI5NCBzcXVhcmVyb290IDEyRSsxIC0+IDExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjk1IHNxdWFyZXJvb3QgMTJFKzIgLT4gMzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyOTYgc3F1YXJlcm9vdCAxMkUrMyAtPiAxLjFFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyOTcgc3F1YXJlcm9vdCAwLjEzIC0+IDAuMzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyOTggc3F1YXJlcm9vdCAwLjAxMyAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjk5IHNxdWFyZXJvb3QgMTMuMEUtMSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMDAgc3F1YXJlcm9vdCAxMy4wMEUtMiAtPiAwLjM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzAxIHNxdWFyZXJvb3QgMTNFLTMgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMwMiBzcXVhcmVyb290IDEzRSsxIC0+IDExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzAzIHNxdWFyZXJvb3QgMTNFKzIgLT4gMzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMDQgc3F1YXJlcm9vdCAxM0UrMyAtPiAxLjFFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMDUgc3F1YXJlcm9vdCAwLjE0IC0+IDAuMzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMDYgc3F1YXJlcm9vdCAwLjAxNCAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzA3IHNxdWFyZXJvb3QgMTQuMEUtMSAtPiAxLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMDggc3F1YXJlcm9vdCAxNC4wMEUtMiAtPiAwLjM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzA5IHNxdWFyZXJvb3QgMTRFLTMgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMxMCBzcXVhcmVyb290IDE0RSsxIC0+IDEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzExIHNxdWFyZXJvb3QgMTRFKzIgLT4gMzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMTIgc3F1YXJlcm9vdCAxNEUrMyAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMTMgc3F1YXJlcm9vdCAwLjE1IC0+IDAuMzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMTQgc3F1YXJlcm9vdCAwLjAxNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzE1IHNxdWFyZXJvb3QgMTUuMEUtMSAtPiAxLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMTYgc3F1YXJlcm9vdCAxNS4wMEUtMiAtPiAwLjM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzE3IHNxdWFyZXJvb3QgMTVFLTMgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMxOCBzcXVhcmVyb290IDE1RSsxIC0+IDEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzE5IHNxdWFyZXJvb3QgMTVFKzIgLT4gMzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMjAgc3F1YXJlcm9vdCAxNUUrMyAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMjEgc3F1YXJlcm9vdCAwLjE2IC0+IDAuNAorc3F0eDIzMjIgc3F1YXJlcm9vdCAwLjAxNiAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzIzIHNxdWFyZXJvb3QgMTYuMEUtMSAtPiAxLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMjQgc3F1YXJlcm9vdCAxNi4wMEUtMiAtPiAwLjQwCitzcXR4MjMyNSBzcXVhcmVyb290IDE2RS0zIC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMjYgc3F1YXJlcm9vdCAxNkUrMSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMyNyBzcXVhcmVyb290IDE2RSsyIC0+IDRFKzEKK3NxdHgyMzI4IHNxdWFyZXJvb3QgMTZFKzMgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzI5IHNxdWFyZXJvb3QgMC4xNyAtPiAwLjQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzMwIHNxdWFyZXJvb3QgMC4wMTcgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMzMSBzcXVhcmVyb290IDE3LjBFLTEgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzMyIHNxdWFyZXJvb3QgMTcuMDBFLTIgLT4gMC40MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMzMyBzcXVhcmVyb290IDE3RS0zIC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMzQgc3F1YXJlcm9vdCAxN0UrMSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMzNSBzcXVhcmVyb290IDE3RSsyIC0+IDQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzM2IHNxdWFyZXJvb3QgMTdFKzMgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzM3IHNxdWFyZXJvb3QgMC4xOCAtPiAwLjQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzM4IHNxdWFyZXJvb3QgMC4wMTggLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMzOSBzcXVhcmVyb290IDE4LjBFLTEgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzQwIHNxdWFyZXJvb3QgMTguMDBFLTIgLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM0MSBzcXVhcmVyb290IDE4RS0zIC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNDIgc3F1YXJlcm9vdCAxOEUrMSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM0MyBzcXVhcmVyb290IDE4RSsyIC0+IDQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzQ0IHNxdWFyZXJvb3QgMThFKzMgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzQ1IHNxdWFyZXJvb3QgMC4xOSAtPiAwLjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzQ2IHNxdWFyZXJvb3QgMC4wMTkgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM0NyBzcXVhcmVyb290IDE5LjBFLTEgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzQ4IHNxdWFyZXJvb3QgMTkuMDBFLTIgLT4gMC40NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM0OSBzcXVhcmVyb290IDE5RS0zIC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNTAgc3F1YXJlcm9vdCAxOUUrMSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM1MSBzcXVhcmVyb290IDE5RSsyIC0+IDQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzUyIHNxdWFyZXJvb3QgMTlFKzMgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzUzIHNxdWFyZXJvb3QgMC4yMCAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzU0IHNxdWFyZXJvb3QgMC4wMjAgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM1NSBzcXVhcmVyb290IDIwLjBFLTEgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzU2IHNxdWFyZXJvb3QgMjAuMDBFLTIgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM1NyBzcXVhcmVyb290IDIwRS0zIC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNTggc3F1YXJlcm9vdCAyMEUrMSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM1OSBzcXVhcmVyb290IDIwRSsyIC0+IDQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzYwIHNxdWFyZXJvb3QgMjBFKzMgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzYxIHNxdWFyZXJvb3QgMC4yMSAtPiAwLjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzYyIHNxdWFyZXJvb3QgMC4wMjEgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM2MyBzcXVhcmVyb290IDIxLjBFLTEgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzY0IHNxdWFyZXJvb3QgMjEuMDBFLTIgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM2NSBzcXVhcmVyb290IDIxRS0zIC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNjYgc3F1YXJlcm9vdCAyMUUrMSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM2NyBzcXVhcmVyb290IDIxRSsyIC0+IDQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzY4IHNxdWFyZXJvb3QgMjFFKzMgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzY5IHNxdWFyZXJvb3QgMC4yMiAtPiAwLjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzcwIHNxdWFyZXJvb3QgMC4wMjIgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM3MSBzcXVhcmVyb290IDIyLjBFLTEgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzcyIHNxdWFyZXJvb3QgMjIuMDBFLTIgLT4gMC40NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM3MyBzcXVhcmVyb290IDIyRS0zIC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNzQgc3F1YXJlcm9vdCAyMkUrMSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM3NSBzcXVhcmVyb290IDIyRSsyIC0+IDQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzc2IHNxdWFyZXJvb3QgMjJFKzMgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzc3IHNxdWFyZXJvb3QgMC4yMyAtPiAwLjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzc4IHNxdWFyZXJvb3QgMC4wMjMgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM3OSBzcXVhcmVyb290IDIzLjBFLTEgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzgwIHNxdWFyZXJvb3QgMjMuMDBFLTIgLT4gMC40OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM4MSBzcXVhcmVyb290IDIzRS0zIC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzODIgc3F1YXJlcm9vdCAyM0UrMSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM4MyBzcXVhcmVyb290IDIzRSsyIC0+IDQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzg0IHNxdWFyZXJvb3QgMjNFKzMgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzg1IHNxdWFyZXJvb3QgMC4yNCAtPiAwLjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzg2IHNxdWFyZXJvb3QgMC4wMjQgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM4NyBzcXVhcmVyb290IDI0LjBFLTEgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzg4IHNxdWFyZXJvb3QgMjQuMDBFLTIgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM4OSBzcXVhcmVyb290IDI0RS0zIC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzOTAgc3F1YXJlcm9vdCAyNEUrMSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM5MSBzcXVhcmVyb290IDI0RSsyIC0+IDQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzkyIHNxdWFyZXJvb3QgMjRFKzMgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzkzIHNxdWFyZXJvb3QgMC4yNSAtPiAwLjUKK3NxdHgyMzk0IHNxdWFyZXJvb3QgMC4wMjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM5NSBzcXVhcmVyb290IDI1LjBFLTEgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzk2IHNxdWFyZXJvb3QgMjUuMDBFLTIgLT4gMC41MAorc3F0eDIzOTcgc3F1YXJlcm9vdCAyNUUtMyAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzk4IHNxdWFyZXJvb3QgMjVFKzEgLT4gMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzOTkgc3F1YXJlcm9vdCAyNUUrMiAtPiA1RSsxCitzcXR4MjQwMCBzcXVhcmVyb290IDI1RSszIC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQwMSBzcXVhcmVyb290IDAuMjYgLT4gMC41MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQwMiBzcXVhcmVyb290IDAuMDI2IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MDMgc3F1YXJlcm9vdCAyNi4wRS0xIC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQwNCBzcXVhcmVyb290IDI2LjAwRS0yIC0+IDAuNTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MDUgc3F1YXJlcm9vdCAyNkUtMyAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDA2IHNxdWFyZXJvb3QgMjZFKzEgLT4gMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MDcgc3F1YXJlcm9vdCAyNkUrMiAtPiA1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQwOCBzcXVhcmVyb290IDI2RSszIC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQwOSBzcXVhcmVyb290IDAuMjcgLT4gMC41MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQxMCBzcXVhcmVyb290IDAuMDI3IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MTEgc3F1YXJlcm9vdCAyNy4wRS0xIC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQxMiBzcXVhcmVyb290IDI3LjAwRS0yIC0+IDAuNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MTMgc3F1YXJlcm9vdCAyN0UtMyAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDE0IHNxdWFyZXJvb3QgMjdFKzEgLT4gMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MTUgc3F1YXJlcm9vdCAyN0UrMiAtPiA1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQxNiBzcXVhcmVyb290IDI3RSszIC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQxNyBzcXVhcmVyb290IDAuMjggLT4gMC41MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQxOCBzcXVhcmVyb290IDAuMDI4IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MTkgc3F1YXJlcm9vdCAyOC4wRS0xIC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQyMCBzcXVhcmVyb290IDI4LjAwRS0yIC0+IDAuNTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MjEgc3F1YXJlcm9vdCAyOEUtMyAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDIyIHNxdWFyZXJvb3QgMjhFKzEgLT4gMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MjMgc3F1YXJlcm9vdCAyOEUrMiAtPiA1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQyNCBzcXVhcmVyb290IDI4RSszIC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQyNSBzcXVhcmVyb290IDAuMjkgLT4gMC41NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQyNiBzcXVhcmVyb290IDAuMDI5IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Mjcgc3F1YXJlcm9vdCAyOS4wRS0xIC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQyOCBzcXVhcmVyb290IDI5LjAwRS0yIC0+IDAuNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Mjkgc3F1YXJlcm9vdCAyOUUtMyAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDMwIHNxdWFyZXJvb3QgMjlFKzEgLT4gMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MzEgc3F1YXJlcm9vdCAyOUUrMiAtPiA1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQzMiBzcXVhcmVyb290IDI5RSszIC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQzMyBzcXVhcmVyb290IDAuMzAgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQzNCBzcXVhcmVyb290IDAuMDMwIC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MzUgc3F1YXJlcm9vdCAzMC4wRS0xIC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQzNiBzcXVhcmVyb290IDMwLjAwRS0yIC0+IDAuNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Mzcgc3F1YXJlcm9vdCAzMEUtMyAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDM4IHNxdWFyZXJvb3QgMzBFKzEgLT4gMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Mzkgc3F1YXJlcm9vdCAzMEUrMiAtPiA1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ0MCBzcXVhcmVyb290IDMwRSszIC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ0MSBzcXVhcmVyb290IDAuMzEgLT4gMC41NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ0MiBzcXVhcmVyb290IDAuMDMxIC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NDMgc3F1YXJlcm9vdCAzMS4wRS0xIC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ0NCBzcXVhcmVyb290IDMxLjAwRS0yIC0+IDAuNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NDUgc3F1YXJlcm9vdCAzMUUtMyAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDQ2IHNxdWFyZXJvb3QgMzFFKzEgLT4gMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NDcgc3F1YXJlcm9vdCAzMUUrMiAtPiA1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ0OCBzcXVhcmVyb290IDMxRSszIC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ0OSBzcXVhcmVyb290IDAuMzIgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ1MCBzcXVhcmVyb290IDAuMDMyIC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NTEgc3F1YXJlcm9vdCAzMi4wRS0xIC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ1MiBzcXVhcmVyb290IDMyLjAwRS0yIC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NTMgc3F1YXJlcm9vdCAzMkUtMyAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDU0IHNxdWFyZXJvb3QgMzJFKzEgLT4gMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NTUgc3F1YXJlcm9vdCAzMkUrMiAtPiA1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ1NiBzcXVhcmVyb290IDMyRSszIC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ1NyBzcXVhcmVyb290IDAuMzMgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ1OCBzcXVhcmVyb290IDAuMDMzIC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NTkgc3F1YXJlcm9vdCAzMy4wRS0xIC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ2MCBzcXVhcmVyb290IDMzLjAwRS0yIC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NjEgc3F1YXJlcm9vdCAzM0UtMyAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDYyIHNxdWFyZXJvb3QgMzNFKzEgLT4gMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NjMgc3F1YXJlcm9vdCAzM0UrMiAtPiA1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ2NCBzcXVhcmVyb290IDMzRSszIC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ2NSBzcXVhcmVyb290IDAuMzQgLT4gMC41OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ2NiBzcXVhcmVyb290IDAuMDM0IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Njcgc3F1YXJlcm9vdCAzNC4wRS0xIC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ2OCBzcXVhcmVyb290IDM0LjAwRS0yIC0+IDAuNTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Njkgc3F1YXJlcm9vdCAzNEUtMyAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDcwIHNxdWFyZXJvb3QgMzRFKzEgLT4gMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NzEgc3F1YXJlcm9vdCAzNEUrMiAtPiA1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ3MiBzcXVhcmVyb290IDM0RSszIC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ3MyBzcXVhcmVyb290IDAuMzUgLT4gMC41OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ3NCBzcXVhcmVyb290IDAuMDM1IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NzUgc3F1YXJlcm9vdCAzNS4wRS0xIC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ3NiBzcXVhcmVyb290IDM1LjAwRS0yIC0+IDAuNTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Nzcgc3F1YXJlcm9vdCAzNUUtMyAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDc4IHNxdWFyZXJvb3QgMzVFKzEgLT4gMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Nzkgc3F1YXJlcm9vdCAzNUUrMiAtPiA1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ4MCBzcXVhcmVyb290IDM1RSszIC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ4MSBzcXVhcmVyb290IDAuMzYgLT4gMC42CitzcXR4MjQ4MiBzcXVhcmVyb290IDAuMDM2IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0ODMgc3F1YXJlcm9vdCAzNi4wRS0xIC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ4NCBzcXVhcmVyb290IDM2LjAwRS0yIC0+IDAuNjAKK3NxdHgyNDg1IHNxdWFyZXJvb3QgMzZFLTMgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ4NiBzcXVhcmVyb290IDM2RSsxIC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDg3IHNxdWFyZXJvb3QgMzZFKzIgLT4gNkUrMQorc3F0eDI0ODggc3F1YXJlcm9vdCAzNkUrMyAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0ODkgc3F1YXJlcm9vdCAwLjM3IC0+IDAuNjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0OTAgc3F1YXJlcm9vdCAwLjAzNyAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDkxIHNxdWFyZXJvb3QgMzcuMEUtMSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0OTIgc3F1YXJlcm9vdCAzNy4wMEUtMiAtPiAwLjYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDkzIHNxdWFyZXJvb3QgMzdFLTMgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ5NCBzcXVhcmVyb290IDM3RSsxIC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDk1IHNxdWFyZXJvb3QgMzdFKzIgLT4gNjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0OTYgc3F1YXJlcm9vdCAzN0UrMyAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0OTcgc3F1YXJlcm9vdCAwLjM4IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0OTggc3F1YXJlcm9vdCAwLjAzOCAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDk5IHNxdWFyZXJvb3QgMzguMEUtMSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MDAgc3F1YXJlcm9vdCAzOC4wMEUtMiAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTAxIHNxdWFyZXJvb3QgMzhFLTMgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUwMiBzcXVhcmVyb290IDM4RSsxIC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTAzIHNxdWFyZXJvb3QgMzhFKzIgLT4gNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MDQgc3F1YXJlcm9vdCAzOEUrMyAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MDUgc3F1YXJlcm9vdCAwLjM5IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MDYgc3F1YXJlcm9vdCAwLjAzOSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTA3IHNxdWFyZXJvb3QgMzkuMEUtMSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MDggc3F1YXJlcm9vdCAzOS4wMEUtMiAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTA5IHNxdWFyZXJvb3QgMzlFLTMgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUxMCBzcXVhcmVyb290IDM5RSsxIC0+IDIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTExIHNxdWFyZXJvb3QgMzlFKzIgLT4gNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MTIgc3F1YXJlcm9vdCAzOUUrMyAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MTMgc3F1YXJlcm9vdCAwLjQwIC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MTQgc3F1YXJlcm9vdCAwLjA0MCAtPiAwLjIwCitzcXR4MjUxNSBzcXVhcmVyb290IDQwLjBFLTEgLT4gMi4wCitzcXR4MjUxNiBzcXVhcmVyb290IDQwLjAwRS0yIC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MTcgc3F1YXJlcm9vdCA0MEUtMyAtPiAwLjIwCitzcXR4MjUxOCBzcXVhcmVyb290IDQwRSsxIC0+IDIwCitzcXR4MjUxOSBzcXVhcmVyb290IDQwRSsyIC0+IDYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTIwIHNxdWFyZXJvb3QgNDBFKzMgLT4gMi4wRSsyCitzcXR4MjUyMSBzcXVhcmVyb290IDAuNDEgLT4gMC42NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUyMiBzcXVhcmVyb290IDAuMDQxIC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MjMgc3F1YXJlcm9vdCA0MS4wRS0xIC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUyNCBzcXVhcmVyb290IDQxLjAwRS0yIC0+IDAuNjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MjUgc3F1YXJlcm9vdCA0MUUtMyAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTI2IHNxdWFyZXJvb3QgNDFFKzEgLT4gMjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Mjcgc3F1YXJlcm9vdCA0MUUrMiAtPiA2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUyOCBzcXVhcmVyb290IDQxRSszIC0+IDIuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUyOSBzcXVhcmVyb290IDAuNDIgLT4gMC42NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUzMCBzcXVhcmVyb290IDAuMDQyIC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MzEgc3F1YXJlcm9vdCA0Mi4wRS0xIC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUzMiBzcXVhcmVyb290IDQyLjAwRS0yIC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MzMgc3F1YXJlcm9vdCA0MkUtMyAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTM0IHNxdWFyZXJvb3QgNDJFKzEgLT4gMjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MzUgc3F1YXJlcm9vdCA0MkUrMiAtPiA2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUzNiBzcXVhcmVyb290IDQyRSszIC0+IDIuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUzNyBzcXVhcmVyb290IDAuNDMgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUzOCBzcXVhcmVyb290IDAuMDQzIC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Mzkgc3F1YXJlcm9vdCA0My4wRS0xIC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU0MCBzcXVhcmVyb290IDQzLjAwRS0yIC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NDEgc3F1YXJlcm9vdCA0M0UtMyAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTQyIHNxdWFyZXJvb3QgNDNFKzEgLT4gMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NDMgc3F1YXJlcm9vdCA0M0UrMiAtPiA2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU0NCBzcXVhcmVyb290IDQzRSszIC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU0NSBzcXVhcmVyb290IDAuNDQgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU0NiBzcXVhcmVyb290IDAuMDQ0IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NDcgc3F1YXJlcm9vdCA0NC4wRS0xIC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU0OCBzcXVhcmVyb290IDQ0LjAwRS0yIC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NDkgc3F1YXJlcm9vdCA0NEUtMyAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTUwIHNxdWFyZXJvb3QgNDRFKzEgLT4gMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NTEgc3F1YXJlcm9vdCA0NEUrMiAtPiA2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU1MiBzcXVhcmVyb290IDQ0RSszIC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU1MyBzcXVhcmVyb290IDAuNDUgLT4gMC42NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU1NCBzcXVhcmVyb290IDAuMDQ1IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NTUgc3F1YXJlcm9vdCA0NS4wRS0xIC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU1NiBzcXVhcmVyb290IDQ1LjAwRS0yIC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NTcgc3F1YXJlcm9vdCA0NUUtMyAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTU4IHNxdWFyZXJvb3QgNDVFKzEgLT4gMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NTkgc3F1YXJlcm9vdCA0NUUrMiAtPiA2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU2MCBzcXVhcmVyb290IDQ1RSszIC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU2MSBzcXVhcmVyb290IDAuNDYgLT4gMC42OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU2MiBzcXVhcmVyb290IDAuMDQ2IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NjMgc3F1YXJlcm9vdCA0Ni4wRS0xIC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU2NCBzcXVhcmVyb290IDQ2LjAwRS0yIC0+IDAuNjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NjUgc3F1YXJlcm9vdCA0NkUtMyAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTY2IHNxdWFyZXJvb3QgNDZFKzEgLT4gMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Njcgc3F1YXJlcm9vdCA0NkUrMiAtPiA2OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU2OCBzcXVhcmVyb290IDQ2RSszIC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU2OSBzcXVhcmVyb290IDAuNDcgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU3MCBzcXVhcmVyb290IDAuMDQ3IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NzEgc3F1YXJlcm9vdCA0Ny4wRS0xIC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU3MiBzcXVhcmVyb290IDQ3LjAwRS0yIC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NzMgc3F1YXJlcm9vdCA0N0UtMyAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTc0IHNxdWFyZXJvb3QgNDdFKzEgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NzUgc3F1YXJlcm9vdCA0N0UrMiAtPiA2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU3NiBzcXVhcmVyb290IDQ3RSszIC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU3NyBzcXVhcmVyb290IDAuNDggLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU3OCBzcXVhcmVyb290IDAuMDQ4IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Nzkgc3F1YXJlcm9vdCA0OC4wRS0xIC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU4MCBzcXVhcmVyb290IDQ4LjAwRS0yIC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1ODEgc3F1YXJlcm9vdCA0OEUtMyAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTgyIHNxdWFyZXJvb3QgNDhFKzEgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1ODMgc3F1YXJlcm9vdCA0OEUrMiAtPiA2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU4NCBzcXVhcmVyb290IDQ4RSszIC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU4NSBzcXVhcmVyb290IDAuNDkgLT4gMC43CitzcXR4MjU4NiBzcXVhcmVyb290IDAuMDQ5IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1ODcgc3F1YXJlcm9vdCA0OS4wRS0xIC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU4OCBzcXVhcmVyb290IDQ5LjAwRS0yIC0+IDAuNzAKK3NxdHgyNTg5IHNxdWFyZXJvb3QgNDlFLTMgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU5MCBzcXVhcmVyb290IDQ5RSsxIC0+IDIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTkxIHNxdWFyZXJvb3QgNDlFKzIgLT4gN0UrMQorc3F0eDI1OTIgc3F1YXJlcm9vdCA0OUUrMyAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1OTMgc3F1YXJlcm9vdCAwLjUwIC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1OTQgc3F1YXJlcm9vdCAwLjA1MCAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTk1IHNxdWFyZXJvb3QgNTAuMEUtMSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1OTYgc3F1YXJlcm9vdCA1MC4wMEUtMiAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTk3IHNxdWFyZXJvb3QgNTBFLTMgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU5OCBzcXVhcmVyb290IDUwRSsxIC0+IDIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTk5IHNxdWFyZXJvb3QgNTBFKzIgLT4gNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MDAgc3F1YXJlcm9vdCA1MEUrMyAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MDEgc3F1YXJlcm9vdCAwLjUxIC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MDIgc3F1YXJlcm9vdCAwLjA1MSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjAzIHNxdWFyZXJvb3QgNTEuMEUtMSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MDQgc3F1YXJlcm9vdCA1MS4wMEUtMiAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjA1IHNxdWFyZXJvb3QgNTFFLTMgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYwNiBzcXVhcmVyb290IDUxRSsxIC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjA3IHNxdWFyZXJvb3QgNTFFKzIgLT4gNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MDggc3F1YXJlcm9vdCA1MUUrMyAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MDkgc3F1YXJlcm9vdCAwLjUyIC0+IDAuNzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MTAgc3F1YXJlcm9vdCAwLjA1MiAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjExIHNxdWFyZXJvb3QgNTIuMEUtMSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MTIgc3F1YXJlcm9vdCA1Mi4wMEUtMiAtPiAwLjcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjEzIHNxdWFyZXJvb3QgNTJFLTMgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYxNCBzcXVhcmVyb290IDUyRSsxIC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjE1IHNxdWFyZXJvb3QgNTJFKzIgLT4gNzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MTYgc3F1YXJlcm9vdCA1MkUrMyAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MTcgc3F1YXJlcm9vdCAwLjUzIC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MTggc3F1YXJlcm9vdCAwLjA1MyAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjE5IHNxdWFyZXJvb3QgNTMuMEUtMSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MjAgc3F1YXJlcm9vdCA1My4wMEUtMiAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjIxIHNxdWFyZXJvb3QgNTNFLTMgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYyMiBzcXVhcmVyb290IDUzRSsxIC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjIzIHNxdWFyZXJvb3QgNTNFKzIgLT4gNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MjQgc3F1YXJlcm9vdCA1M0UrMyAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MjUgc3F1YXJlcm9vdCAwLjU0IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MjYgc3F1YXJlcm9vdCAwLjA1NCAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjI3IHNxdWFyZXJvb3QgNTQuMEUtMSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2Mjggc3F1YXJlcm9vdCA1NC4wMEUtMiAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjI5IHNxdWFyZXJvb3QgNTRFLTMgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYzMCBzcXVhcmVyb290IDU0RSsxIC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjMxIHNxdWFyZXJvb3QgNTRFKzIgLT4gNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MzIgc3F1YXJlcm9vdCA1NEUrMyAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MzMgc3F1YXJlcm9vdCAwLjU1IC0+IDAuNzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MzQgc3F1YXJlcm9vdCAwLjA1NSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjM1IHNxdWFyZXJvb3QgNTUuMEUtMSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MzYgc3F1YXJlcm9vdCA1NS4wMEUtMiAtPiAwLjc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjM3IHNxdWFyZXJvb3QgNTVFLTMgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYzOCBzcXVhcmVyb290IDU1RSsxIC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjM5IHNxdWFyZXJvb3QgNTVFKzIgLT4gNzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NDAgc3F1YXJlcm9vdCA1NUUrMyAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NDEgc3F1YXJlcm9vdCAwLjU2IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NDIgc3F1YXJlcm9vdCAwLjA1NiAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjQzIHNxdWFyZXJvb3QgNTYuMEUtMSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NDQgc3F1YXJlcm9vdCA1Ni4wMEUtMiAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjQ1IHNxdWFyZXJvb3QgNTZFLTMgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY0NiBzcXVhcmVyb290IDU2RSsxIC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjQ3IHNxdWFyZXJvb3QgNTZFKzIgLT4gNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NDggc3F1YXJlcm9vdCA1NkUrMyAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NDkgc3F1YXJlcm9vdCAwLjU3IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NTAgc3F1YXJlcm9vdCAwLjA1NyAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjUxIHNxdWFyZXJvb3QgNTcuMEUtMSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NTIgc3F1YXJlcm9vdCA1Ny4wMEUtMiAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjUzIHNxdWFyZXJvb3QgNTdFLTMgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY1NCBzcXVhcmVyb290IDU3RSsxIC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjU1IHNxdWFyZXJvb3QgNTdFKzIgLT4gNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NTYgc3F1YXJlcm9vdCA1N0UrMyAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NTcgc3F1YXJlcm9vdCAwLjU4IC0+IDAuNzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NTggc3F1YXJlcm9vdCAwLjA1OCAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjU5IHNxdWFyZXJvb3QgNTguMEUtMSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NjAgc3F1YXJlcm9vdCA1OC4wMEUtMiAtPiAwLjc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjYxIHNxdWFyZXJvb3QgNThFLTMgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY2MiBzcXVhcmVyb290IDU4RSsxIC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjYzIHNxdWFyZXJvb3QgNThFKzIgLT4gNzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NjQgc3F1YXJlcm9vdCA1OEUrMyAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NjUgc3F1YXJlcm9vdCAwLjU5IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NjYgc3F1YXJlcm9vdCAwLjA1OSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjY3IHNxdWFyZXJvb3QgNTkuMEUtMSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2Njggc3F1YXJlcm9vdCA1OS4wMEUtMiAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjY5IHNxdWFyZXJvb3QgNTlFLTMgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY3MCBzcXVhcmVyb290IDU5RSsxIC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjcxIHNxdWFyZXJvb3QgNTlFKzIgLT4gNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NzIgc3F1YXJlcm9vdCA1OUUrMyAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NzMgc3F1YXJlcm9vdCAwLjYwIC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NzQgc3F1YXJlcm9vdCAwLjA2MCAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjc1IHNxdWFyZXJvb3QgNjAuMEUtMSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NzYgc3F1YXJlcm9vdCA2MC4wMEUtMiAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjc3IHNxdWFyZXJvb3QgNjBFLTMgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY3OCBzcXVhcmVyb290IDYwRSsxIC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjc5IHNxdWFyZXJvb3QgNjBFKzIgLT4gNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2ODAgc3F1YXJlcm9vdCA2MEUrMyAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2ODEgc3F1YXJlcm9vdCAwLjYxIC0+IDAuNzggIEluZXhhY3QgUm91bmRlZAorc3F0eDI2ODIgc3F1YXJlcm9vdCAwLjA2MSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjgzIHNxdWFyZXJvb3QgNjEuMEUtMSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2ODQgc3F1YXJlcm9vdCA2MS4wMEUtMiAtPiAwLjc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjg1IHNxdWFyZXJvb3QgNjFFLTMgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY4NiBzcXVhcmVyb290IDYxRSsxIC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjg3IHNxdWFyZXJvb3QgNjFFKzIgLT4gNzggIEluZXhhY3QgUm91bmRlZAorc3F0eDI2ODggc3F1YXJlcm9vdCA2MUUrMyAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2ODkgc3F1YXJlcm9vdCAwLjYyIC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2OTAgc3F1YXJlcm9vdCAwLjA2MiAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjkxIHNxdWFyZXJvb3QgNjIuMEUtMSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2OTIgc3F1YXJlcm9vdCA2Mi4wMEUtMiAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjkzIHNxdWFyZXJvb3QgNjJFLTMgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY5NCBzcXVhcmVyb290IDYyRSsxIC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjk1IHNxdWFyZXJvb3QgNjJFKzIgLT4gNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2OTYgc3F1YXJlcm9vdCA2MkUrMyAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2OTcgc3F1YXJlcm9vdCAwLjYzIC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2OTggc3F1YXJlcm9vdCAwLjA2MyAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjk5IHNxdWFyZXJvb3QgNjMuMEUtMSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MDAgc3F1YXJlcm9vdCA2My4wMEUtMiAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzAxIHNxdWFyZXJvb3QgNjNFLTMgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcwMiBzcXVhcmVyb290IDYzRSsxIC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzAzIHNxdWFyZXJvb3QgNjNFKzIgLT4gNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MDQgc3F1YXJlcm9vdCA2M0UrMyAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MDUgc3F1YXJlcm9vdCAwLjY0IC0+IDAuOAorc3F0eDI3MDYgc3F1YXJlcm9vdCAwLjA2NCAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzA3IHNxdWFyZXJvb3QgNjQuMEUtMSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MDggc3F1YXJlcm9vdCA2NC4wMEUtMiAtPiAwLjgwCitzcXR4MjcwOSBzcXVhcmVyb290IDY0RS0zIC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MTAgc3F1YXJlcm9vdCA2NEUrMSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcxMSBzcXVhcmVyb290IDY0RSsyIC0+IDhFKzEKK3NxdHgyNzEyIHNxdWFyZXJvb3QgNjRFKzMgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzEzIHNxdWFyZXJvb3QgMC42NSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzE0IHNxdWFyZXJvb3QgMC4wNjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcxNSBzcXVhcmVyb290IDY1LjBFLTEgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzE2IHNxdWFyZXJvb3QgNjUuMDBFLTIgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcxNyBzcXVhcmVyb290IDY1RS0zIC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MTggc3F1YXJlcm9vdCA2NUUrMSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcxOSBzcXVhcmVyb290IDY1RSsyIC0+IDgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzIwIHNxdWFyZXJvb3QgNjVFKzMgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzIxIHNxdWFyZXJvb3QgMC42NiAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzIyIHNxdWFyZXJvb3QgMC4wNjYgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcyMyBzcXVhcmVyb290IDY2LjBFLTEgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzI0IHNxdWFyZXJvb3QgNjYuMDBFLTIgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcyNSBzcXVhcmVyb290IDY2RS0zIC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MjYgc3F1YXJlcm9vdCA2NkUrMSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcyNyBzcXVhcmVyb290IDY2RSsyIC0+IDgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzI4IHNxdWFyZXJvb3QgNjZFKzMgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzI5IHNxdWFyZXJvb3QgMC42NyAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzMwIHNxdWFyZXJvb3QgMC4wNjcgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjczMSBzcXVhcmVyb290IDY3LjBFLTEgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzMyIHNxdWFyZXJvb3QgNjcuMDBFLTIgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjczMyBzcXVhcmVyb290IDY3RS0zIC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MzQgc3F1YXJlcm9vdCA2N0UrMSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjczNSBzcXVhcmVyb290IDY3RSsyIC0+IDgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzM2IHNxdWFyZXJvb3QgNjdFKzMgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzM3IHNxdWFyZXJvb3QgMC42OCAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzM4IHNxdWFyZXJvb3QgMC4wNjggLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjczOSBzcXVhcmVyb290IDY4LjBFLTEgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzQwIHNxdWFyZXJvb3QgNjguMDBFLTIgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc0MSBzcXVhcmVyb290IDY4RS0zIC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NDIgc3F1YXJlcm9vdCA2OEUrMSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc0MyBzcXVhcmVyb290IDY4RSsyIC0+IDgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzQ0IHNxdWFyZXJvb3QgNjhFKzMgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzQ1IHNxdWFyZXJvb3QgMC42OSAtPiAwLjgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzQ2IHNxdWFyZXJvb3QgMC4wNjkgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc0NyBzcXVhcmVyb290IDY5LjBFLTEgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzQ4IHNxdWFyZXJvb3QgNjkuMDBFLTIgLT4gMC44MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc0OSBzcXVhcmVyb290IDY5RS0zIC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NTAgc3F1YXJlcm9vdCA2OUUrMSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc1MSBzcXVhcmVyb290IDY5RSsyIC0+IDgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzUyIHNxdWFyZXJvb3QgNjlFKzMgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzUzIHNxdWFyZXJvb3QgMC43MCAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzU0IHNxdWFyZXJvb3QgMC4wNzAgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc1NSBzcXVhcmVyb290IDcwLjBFLTEgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzU2IHNxdWFyZXJvb3QgNzAuMDBFLTIgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc1NyBzcXVhcmVyb290IDcwRS0zIC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NTggc3F1YXJlcm9vdCA3MEUrMSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc1OSBzcXVhcmVyb290IDcwRSsyIC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzYwIHNxdWFyZXJvb3QgNzBFKzMgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzYxIHNxdWFyZXJvb3QgMC43MSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzYyIHNxdWFyZXJvb3QgMC4wNzEgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc2MyBzcXVhcmVyb290IDcxLjBFLTEgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzY0IHNxdWFyZXJvb3QgNzEuMDBFLTIgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc2NSBzcXVhcmVyb290IDcxRS0zIC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NjYgc3F1YXJlcm9vdCA3MUUrMSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc2NyBzcXVhcmVyb290IDcxRSsyIC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzY4IHNxdWFyZXJvb3QgNzFFKzMgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzY5IHNxdWFyZXJvb3QgMC43MiAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzcwIHNxdWFyZXJvb3QgMC4wNzIgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc3MSBzcXVhcmVyb290IDcyLjBFLTEgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzcyIHNxdWFyZXJvb3QgNzIuMDBFLTIgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc3MyBzcXVhcmVyb290IDcyRS0zIC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NzQgc3F1YXJlcm9vdCA3MkUrMSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc3NSBzcXVhcmVyb290IDcyRSsyIC0+IDg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzc2IHNxdWFyZXJvb3QgNzJFKzMgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzc3IHNxdWFyZXJvb3QgMC43MyAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzc4IHNxdWFyZXJvb3QgMC4wNzMgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc3OSBzcXVhcmVyb290IDczLjBFLTEgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzgwIHNxdWFyZXJvb3QgNzMuMDBFLTIgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc4MSBzcXVhcmVyb290IDczRS0zIC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3ODIgc3F1YXJlcm9vdCA3M0UrMSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc4MyBzcXVhcmVyb290IDczRSsyIC0+IDg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzg0IHNxdWFyZXJvb3QgNzNFKzMgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzg1IHNxdWFyZXJvb3QgMC43NCAtPiAwLjg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzg2IHNxdWFyZXJvb3QgMC4wNzQgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc4NyBzcXVhcmVyb290IDc0LjBFLTEgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzg4IHNxdWFyZXJvb3QgNzQuMDBFLTIgLT4gMC44NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc4OSBzcXVhcmVyb290IDc0RS0zIC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3OTAgc3F1YXJlcm9vdCA3NEUrMSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc5MSBzcXVhcmVyb290IDc0RSsyIC0+IDg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzkyIHNxdWFyZXJvb3QgNzRFKzMgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzkzIHNxdWFyZXJvb3QgMC43NSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzk0IHNxdWFyZXJvb3QgMC4wNzUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc5NSBzcXVhcmVyb290IDc1LjBFLTEgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzk2IHNxdWFyZXJvb3QgNzUuMDBFLTIgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc5NyBzcXVhcmVyb290IDc1RS0zIC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3OTggc3F1YXJlcm9vdCA3NUUrMSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc5OSBzcXVhcmVyb290IDc1RSsyIC0+IDg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODAwIHNxdWFyZXJvb3QgNzVFKzMgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODAxIHNxdWFyZXJvb3QgMC43NiAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODAyIHNxdWFyZXJvb3QgMC4wNzYgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgwMyBzcXVhcmVyb290IDc2LjBFLTEgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODA0IHNxdWFyZXJvb3QgNzYuMDBFLTIgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgwNSBzcXVhcmVyb290IDc2RS0zIC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MDYgc3F1YXJlcm9vdCA3NkUrMSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgwNyBzcXVhcmVyb290IDc2RSsyIC0+IDg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODA4IHNxdWFyZXJvb3QgNzZFKzMgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODA5IHNxdWFyZXJvb3QgMC43NyAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODEwIHNxdWFyZXJvb3QgMC4wNzcgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgxMSBzcXVhcmVyb290IDc3LjBFLTEgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODEyIHNxdWFyZXJvb3QgNzcuMDBFLTIgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgxMyBzcXVhcmVyb290IDc3RS0zIC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MTQgc3F1YXJlcm9vdCA3N0UrMSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgxNSBzcXVhcmVyb290IDc3RSsyIC0+IDg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODE2IHNxdWFyZXJvb3QgNzdFKzMgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODE3IHNxdWFyZXJvb3QgMC43OCAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODE4IHNxdWFyZXJvb3QgMC4wNzggLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgxOSBzcXVhcmVyb290IDc4LjBFLTEgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODIwIHNxdWFyZXJvb3QgNzguMDBFLTIgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgyMSBzcXVhcmVyb290IDc4RS0zIC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MjIgc3F1YXJlcm9vdCA3OEUrMSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgyMyBzcXVhcmVyb290IDc4RSsyIC0+IDg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODI0IHNxdWFyZXJvb3QgNzhFKzMgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODI1IHNxdWFyZXJvb3QgMC43OSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODI2IHNxdWFyZXJvb3QgMC4wNzkgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgyNyBzcXVhcmVyb290IDc5LjBFLTEgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODI4IHNxdWFyZXJvb3QgNzkuMDBFLTIgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgyOSBzcXVhcmVyb290IDc5RS0zIC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MzAgc3F1YXJlcm9vdCA3OUUrMSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgzMSBzcXVhcmVyb290IDc5RSsyIC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODMyIHNxdWFyZXJvb3QgNzlFKzMgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODMzIHNxdWFyZXJvb3QgMC44MCAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODM0IHNxdWFyZXJvb3QgMC4wODAgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgzNSBzcXVhcmVyb290IDgwLjBFLTEgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODM2IHNxdWFyZXJvb3QgODAuMDBFLTIgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgzNyBzcXVhcmVyb290IDgwRS0zIC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Mzggc3F1YXJlcm9vdCA4MEUrMSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgzOSBzcXVhcmVyb290IDgwRSsyIC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODQwIHNxdWFyZXJvb3QgODBFKzMgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODQxIHNxdWFyZXJvb3QgMC44MSAtPiAwLjkKK3NxdHgyODQyIHNxdWFyZXJvb3QgMC4wODEgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg0MyBzcXVhcmVyb290IDgxLjBFLTEgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODQ0IHNxdWFyZXJvb3QgODEuMDBFLTIgLT4gMC45MAorc3F0eDI4NDUgc3F1YXJlcm9vdCA4MUUtMyAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODQ2IHNxdWFyZXJvb3QgODFFKzEgLT4gMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NDcgc3F1YXJlcm9vdCA4MUUrMiAtPiA5RSsxCitzcXR4Mjg0OCBzcXVhcmVyb290IDgxRSszIC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg0OSBzcXVhcmVyb290IDAuODIgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg1MCBzcXVhcmVyb290IDAuMDgyIC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NTEgc3F1YXJlcm9vdCA4Mi4wRS0xIC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg1MiBzcXVhcmVyb290IDgyLjAwRS0yIC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NTMgc3F1YXJlcm9vdCA4MkUtMyAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODU0IHNxdWFyZXJvb3QgODJFKzEgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NTUgc3F1YXJlcm9vdCA4MkUrMiAtPiA5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg1NiBzcXVhcmVyb290IDgyRSszIC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg1NyBzcXVhcmVyb290IDAuODMgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg1OCBzcXVhcmVyb290IDAuMDgzIC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NTkgc3F1YXJlcm9vdCA4My4wRS0xIC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg2MCBzcXVhcmVyb290IDgzLjAwRS0yIC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NjEgc3F1YXJlcm9vdCA4M0UtMyAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODYyIHNxdWFyZXJvb3QgODNFKzEgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NjMgc3F1YXJlcm9vdCA4M0UrMiAtPiA5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg2NCBzcXVhcmVyb290IDgzRSszIC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg2NSBzcXVhcmVyb290IDAuODQgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg2NiBzcXVhcmVyb290IDAuMDg0IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Njcgc3F1YXJlcm9vdCA4NC4wRS0xIC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg2OCBzcXVhcmVyb290IDg0LjAwRS0yIC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Njkgc3F1YXJlcm9vdCA4NEUtMyAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODcwIHNxdWFyZXJvb3QgODRFKzEgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NzEgc3F1YXJlcm9vdCA4NEUrMiAtPiA5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg3MiBzcXVhcmVyb290IDg0RSszIC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg3MyBzcXVhcmVyb290IDAuODUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg3NCBzcXVhcmVyb290IDAuMDg1IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NzUgc3F1YXJlcm9vdCA4NS4wRS0xIC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg3NiBzcXVhcmVyb290IDg1LjAwRS0yIC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Nzcgc3F1YXJlcm9vdCA4NUUtMyAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODc4IHNxdWFyZXJvb3QgODVFKzEgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Nzkgc3F1YXJlcm9vdCA4NUUrMiAtPiA5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg4MCBzcXVhcmVyb290IDg1RSszIC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg4MSBzcXVhcmVyb290IDAuODYgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg4MiBzcXVhcmVyb290IDAuMDg2IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4ODMgc3F1YXJlcm9vdCA4Ni4wRS0xIC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg4NCBzcXVhcmVyb290IDg2LjAwRS0yIC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4ODUgc3F1YXJlcm9vdCA4NkUtMyAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODg2IHNxdWFyZXJvb3QgODZFKzEgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4ODcgc3F1YXJlcm9vdCA4NkUrMiAtPiA5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg4OCBzcXVhcmVyb290IDg2RSszIC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg4OSBzcXVhcmVyb290IDAuODcgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg5MCBzcXVhcmVyb290IDAuMDg3IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4OTEgc3F1YXJlcm9vdCA4Ny4wRS0xIC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg5MiBzcXVhcmVyb290IDg3LjAwRS0yIC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4OTMgc3F1YXJlcm9vdCA4N0UtMyAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODk0IHNxdWFyZXJvb3QgODdFKzEgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4OTUgc3F1YXJlcm9vdCA4N0UrMiAtPiA5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg5NiBzcXVhcmVyb290IDg3RSszIC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg5NyBzcXVhcmVyb290IDAuODggLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg5OCBzcXVhcmVyb290IDAuMDg4IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4OTkgc3F1YXJlcm9vdCA4OC4wRS0xIC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkwMCBzcXVhcmVyb290IDg4LjAwRS0yIC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MDEgc3F1YXJlcm9vdCA4OEUtMyAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTAyIHNxdWFyZXJvb3QgODhFKzEgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MDMgc3F1YXJlcm9vdCA4OEUrMiAtPiA5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkwNCBzcXVhcmVyb290IDg4RSszIC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkwNSBzcXVhcmVyb290IDAuODkgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkwNiBzcXVhcmVyb290IDAuMDg5IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MDcgc3F1YXJlcm9vdCA4OS4wRS0xIC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkwOCBzcXVhcmVyb290IDg5LjAwRS0yIC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MDkgc3F1YXJlcm9vdCA4OUUtMyAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTEwIHNxdWFyZXJvb3QgODlFKzEgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MTEgc3F1YXJlcm9vdCA4OUUrMiAtPiA5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkxMiBzcXVhcmVyb290IDg5RSszIC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkxMyBzcXVhcmVyb290IDAuOTAgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkxNCBzcXVhcmVyb290IDAuMDkwIC0+IDAuMzAKK3NxdHgyOTE1IHNxdWFyZXJvb3QgOTAuMEUtMSAtPiAzLjAKK3NxdHgyOTE2IHNxdWFyZXJvb3QgOTAuMDBFLTIgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkxNyBzcXVhcmVyb290IDkwRS0zIC0+IDAuMzAKK3NxdHgyOTE4IHNxdWFyZXJvb3QgOTBFKzEgLT4gMzAKK3NxdHgyOTE5IHNxdWFyZXJvb3QgOTBFKzIgLT4gOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MjAgc3F1YXJlcm9vdCA5MEUrMyAtPiAzLjBFKzIKK3NxdHgyOTIxIHNxdWFyZXJvb3QgMC45MSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTIyIHNxdWFyZXJvb3QgMC4wOTEgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkyMyBzcXVhcmVyb290IDkxLjBFLTEgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTI0IHNxdWFyZXJvb3QgOTEuMDBFLTIgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkyNSBzcXVhcmVyb290IDkxRS0zIC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MjYgc3F1YXJlcm9vdCA5MUUrMSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkyNyBzcXVhcmVyb290IDkxRSsyIC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTI4IHNxdWFyZXJvb3QgOTFFKzMgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTI5IHNxdWFyZXJvb3QgMC45MiAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTMwIHNxdWFyZXJvb3QgMC4wOTIgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkzMSBzcXVhcmVyb290IDkyLjBFLTEgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTMyIHNxdWFyZXJvb3QgOTIuMDBFLTIgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkzMyBzcXVhcmVyb290IDkyRS0zIC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MzQgc3F1YXJlcm9vdCA5MkUrMSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkzNSBzcXVhcmVyb290IDkyRSsyIC0+IDk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTM2IHNxdWFyZXJvb3QgOTJFKzMgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTM3IHNxdWFyZXJvb3QgMC45MyAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTM4IHNxdWFyZXJvb3QgMC4wOTMgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkzOSBzcXVhcmVyb290IDkzLjBFLTEgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTQwIHNxdWFyZXJvb3QgOTMuMDBFLTIgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk0MSBzcXVhcmVyb290IDkzRS0zIC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NDIgc3F1YXJlcm9vdCA5M0UrMSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk0MyBzcXVhcmVyb290IDkzRSsyIC0+IDk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTQ0IHNxdWFyZXJvb3QgOTNFKzMgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTQ1IHNxdWFyZXJvb3QgMC45NCAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTQ2IHNxdWFyZXJvb3QgMC4wOTQgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk0NyBzcXVhcmVyb290IDk0LjBFLTEgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTQ4IHNxdWFyZXJvb3QgOTQuMDBFLTIgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk0OSBzcXVhcmVyb290IDk0RS0zIC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NTAgc3F1YXJlcm9vdCA5NEUrMSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk1MSBzcXVhcmVyb290IDk0RSsyIC0+IDk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTUyIHNxdWFyZXJvb3QgOTRFKzMgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTUzIHNxdWFyZXJvb3QgMC45NSAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTU0IHNxdWFyZXJvb3QgMC4wOTUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk1NSBzcXVhcmVyb290IDk1LjBFLTEgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTU2IHNxdWFyZXJvb3QgOTUuMDBFLTIgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk1NyBzcXVhcmVyb290IDk1RS0zIC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NTggc3F1YXJlcm9vdCA5NUUrMSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk1OSBzcXVhcmVyb290IDk1RSsyIC0+IDk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTYwIHNxdWFyZXJvb3QgOTVFKzMgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTYxIHNxdWFyZXJvb3QgMC45NiAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTYyIHNxdWFyZXJvb3QgMC4wOTYgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk2MyBzcXVhcmVyb290IDk2LjBFLTEgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTY0IHNxdWFyZXJvb3QgOTYuMDBFLTIgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk2NSBzcXVhcmVyb290IDk2RS0zIC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NjYgc3F1YXJlcm9vdCA5NkUrMSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk2NyBzcXVhcmVyb290IDk2RSsyIC0+IDk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTY4IHNxdWFyZXJvb3QgOTZFKzMgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTY5IHNxdWFyZXJvb3QgMC45NyAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTcwIHNxdWFyZXJvb3QgMC4wOTcgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk3MSBzcXVhcmVyb290IDk3LjBFLTEgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTcyIHNxdWFyZXJvb3QgOTcuMDBFLTIgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk3MyBzcXVhcmVyb290IDk3RS0zIC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NzQgc3F1YXJlcm9vdCA5N0UrMSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk3NSBzcXVhcmVyb290IDk3RSsyIC0+IDk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTc2IHNxdWFyZXJvb3QgOTdFKzMgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTc3IHNxdWFyZXJvb3QgMC45OCAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTc4IHNxdWFyZXJvb3QgMC4wOTggLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk3OSBzcXVhcmVyb290IDk4LjBFLTEgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTgwIHNxdWFyZXJvb3QgOTguMDBFLTIgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk4MSBzcXVhcmVyb290IDk4RS0zIC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5ODIgc3F1YXJlcm9vdCA5OEUrMSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk4MyBzcXVhcmVyb290IDk4RSsyIC0+IDk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTg0IHNxdWFyZXJvb3QgOThFKzMgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTg1IHNxdWFyZXJvb3QgMC45OSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTg2IHNxdWFyZXJvb3QgMC4wOTkgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk4NyBzcXVhcmVyb290IDk5LjBFLTEgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTg4IHNxdWFyZXJvb3QgOTkuMDBFLTIgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk4OSBzcXVhcmVyb290IDk5RS0zIC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5OTAgc3F1YXJlcm9vdCA5OUUrMSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk5MSBzcXVhcmVyb290IDk5RSsyIC0+IDk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTkyIHNxdWFyZXJvb3QgOTlFKzMgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKKworLS0gUHJlY2lzaW9uIDMgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgZiBhbmQgZi8xMF0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246ICAgMworc3F0eDMwMDEgc3F1YXJlcm9vdCAwLjEgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMDIgc3F1YXJlcm9vdCAwLjAxIC0+IDAuMQorc3F0eDMwMDMgc3F1YXJlcm9vdCAwLjIgLT4gMC40NDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMDQgc3F1YXJlcm9vdCAwLjAyIC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDA1IHNxdWFyZXJvb3QgMC4zIC0+IDAuNTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDA2IHNxdWFyZXJvb3QgMC4wMyAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAwNyBzcXVhcmVyb290IDAuNCAtPiAwLjYzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAwOCBzcXVhcmVyb290IDAuMDQgLT4gMC4yCitzcXR4MzAwOSBzcXVhcmVyb290IDAuNSAtPiAwLjcwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAxMCBzcXVhcmVyb290IDAuMDUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMTEgc3F1YXJlcm9vdCAwLjYgLT4gMC43NzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMTIgc3F1YXJlcm9vdCAwLjA2IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDEzIHNxdWFyZXJvb3QgMC43IC0+IDAuODM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDE0IHNxdWFyZXJvb3QgMC4wNyAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAxNSBzcXVhcmVyb290IDAuOCAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAxNiBzcXVhcmVyb290IDAuMDggLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMTcgc3F1YXJlcm9vdCAwLjkgLT4gMC45NDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMTggc3F1YXJlcm9vdCAwLjA5IC0+IDAuMworc3F0eDMwMTkgc3F1YXJlcm9vdCAwLjExIC0+IDAuMzMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDIwIHNxdWFyZXJvb3QgMC4wMTEgLT4gMC4xMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMjEgc3F1YXJlcm9vdCAwLjEyIC0+IDAuMzQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDIyIHNxdWFyZXJvb3QgMC4wMTIgLT4gMC4xMTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMjMgc3F1YXJlcm9vdCAwLjEzIC0+IDAuMzYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDI0IHNxdWFyZXJvb3QgMC4wMTMgLT4gMC4xMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMjUgc3F1YXJlcm9vdCAwLjE0IC0+IDAuMzc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDI2IHNxdWFyZXJvb3QgMC4wMTQgLT4gMC4xMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMjcgc3F1YXJlcm9vdCAwLjE1IC0+IDAuMzg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDI4IHNxdWFyZXJvb3QgMC4wMTUgLT4gMC4xMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMjkgc3F1YXJlcm9vdCAwLjE2IC0+IDAuNAorc3F0eDMwMzAgc3F1YXJlcm9vdCAwLjAxNiAtPiAwLjEyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAzMSBzcXVhcmVyb290IDAuMTcgLT4gMC40MTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMzIgc3F1YXJlcm9vdCAwLjAxNyAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAzMyBzcXVhcmVyb290IDAuMTggLT4gMC40MjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMzQgc3F1YXJlcm9vdCAwLjAxOCAtPiAwLjEzNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAzNSBzcXVhcmVyb290IDAuMTkgLT4gMC40MzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMzYgc3F1YXJlcm9vdCAwLjAxOSAtPiAwLjEzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAzNyBzcXVhcmVyb290IDAuMjEgLT4gMC40NTggIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMzggc3F1YXJlcm9vdCAwLjAyMSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAzOSBzcXVhcmVyb290IDAuMjIgLT4gMC40NjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNDAgc3F1YXJlcm9vdCAwLjAyMiAtPiAwLjE0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA0MSBzcXVhcmVyb290IDAuMjMgLT4gMC40ODAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNDIgc3F1YXJlcm9vdCAwLjAyMyAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA0MyBzcXVhcmVyb290IDAuMjQgLT4gMC40OTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNDQgc3F1YXJlcm9vdCAwLjAyNCAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA0NSBzcXVhcmVyb290IDAuMjUgLT4gMC41CitzcXR4MzA0NiBzcXVhcmVyb290IDAuMDI1IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDQ3IHNxdWFyZXJvb3QgMC4yNiAtPiAwLjUxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA0OCBzcXVhcmVyb290IDAuMDI2IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDQ5IHNxdWFyZXJvb3QgMC4yNyAtPiAwLjUyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1MCBzcXVhcmVyb290IDAuMDI3IC0+IDAuMTY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDUxIHNxdWFyZXJvb3QgMC4yOCAtPiAwLjUyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1MiBzcXVhcmVyb290IDAuMDI4IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDUzIHNxdWFyZXJvb3QgMC4yOSAtPiAwLjUzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1NCBzcXVhcmVyb290IDAuMDI5IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDU1IHNxdWFyZXJvb3QgMC4zMSAtPiAwLjU1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1NiBzcXVhcmVyb290IDAuMDMxIC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDU3IHNxdWFyZXJvb3QgMC4zMiAtPiAwLjU2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1OCBzcXVhcmVyb290IDAuMDMyIC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDU5IHNxdWFyZXJvb3QgMC4zMyAtPiAwLjU3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA2MCBzcXVhcmVyb290IDAuMDMzIC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDYxIHNxdWFyZXJvb3QgMC4zNCAtPiAwLjU4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA2MiBzcXVhcmVyb290IDAuMDM0IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDYzIHNxdWFyZXJvb3QgMC4zNSAtPiAwLjU5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA2NCBzcXVhcmVyb290IDAuMDM1IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDY1IHNxdWFyZXJvb3QgMC4zNiAtPiAwLjYKK3NxdHgzMDY2IHNxdWFyZXJvb3QgMC4wMzYgLT4gMC4xOTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNjcgc3F1YXJlcm9vdCAwLjM3IC0+IDAuNjA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDY4IHNxdWFyZXJvb3QgMC4wMzcgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNjkgc3F1YXJlcm9vdCAwLjM4IC0+IDAuNjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDcwIHNxdWFyZXJvb3QgMC4wMzggLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNzEgc3F1YXJlcm9vdCAwLjM5IC0+IDAuNjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDcyIHNxdWFyZXJvb3QgMC4wMzkgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNzMgc3F1YXJlcm9vdCAwLjQxIC0+IDAuNjQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDc0IHNxdWFyZXJvb3QgMC4wNDEgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNzUgc3F1YXJlcm9vdCAwLjQyIC0+IDAuNjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDc2IHNxdWFyZXJvb3QgMC4wNDIgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNzcgc3F1YXJlcm9vdCAwLjQzIC0+IDAuNjU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDc4IHNxdWFyZXJvb3QgMC4wNDMgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNzkgc3F1YXJlcm9vdCAwLjQ0IC0+IDAuNjYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDgwIHNxdWFyZXJvb3QgMC4wNDQgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwODEgc3F1YXJlcm9vdCAwLjQ1IC0+IDAuNjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDgyIHNxdWFyZXJvb3QgMC4wNDUgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwODMgc3F1YXJlcm9vdCAwLjQ2IC0+IDAuNjc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDg0IHNxdWFyZXJvb3QgMC4wNDYgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwODUgc3F1YXJlcm9vdCAwLjQ3IC0+IDAuNjg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDg2IHNxdWFyZXJvb3QgMC4wNDcgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwODcgc3F1YXJlcm9vdCAwLjQ4IC0+IDAuNjkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDg4IHNxdWFyZXJvb3QgMC4wNDggLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwODkgc3F1YXJlcm9vdCAwLjQ5IC0+IDAuNworc3F0eDMwOTAgc3F1YXJlcm9vdCAwLjA0OSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA5MSBzcXVhcmVyb290IDAuNTEgLT4gMC43MTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwOTIgc3F1YXJlcm9vdCAwLjA1MSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA5MyBzcXVhcmVyb290IDAuNTIgLT4gMC43MjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwOTQgc3F1YXJlcm9vdCAwLjA1MiAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA5NSBzcXVhcmVyb290IDAuNTMgLT4gMC43MjggIEluZXhhY3QgUm91bmRlZAorc3F0eDMwOTYgc3F1YXJlcm9vdCAwLjA1MyAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA5NyBzcXVhcmVyb290IDAuNTQgLT4gMC43MzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwOTggc3F1YXJlcm9vdCAwLjA1NCAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA5OSBzcXVhcmVyb290IDAuNTUgLT4gMC43NDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDAgc3F1YXJlcm9vdCAwLjA1NSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEwMSBzcXVhcmVyb290IDAuNTYgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDIgc3F1YXJlcm9vdCAwLjA1NiAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEwMyBzcXVhcmVyb290IDAuNTcgLT4gMC43NTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDQgc3F1YXJlcm9vdCAwLjA1NyAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEwNSBzcXVhcmVyb290IDAuNTggLT4gMC43NjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDYgc3F1YXJlcm9vdCAwLjA1OCAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEwNyBzcXVhcmVyb290IDAuNTkgLT4gMC43NjggIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDggc3F1YXJlcm9vdCAwLjA1OSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEwOSBzcXVhcmVyb290IDAuNjEgLT4gMC43ODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMTAgc3F1YXJlcm9vdCAwLjA2MSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzExMSBzcXVhcmVyb290IDAuNjIgLT4gMC43ODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMTIgc3F1YXJlcm9vdCAwLjA2MiAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzExMyBzcXVhcmVyb290IDAuNjMgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMTQgc3F1YXJlcm9vdCAwLjA2MyAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzExNSBzcXVhcmVyb290IDAuNjQgLT4gMC44CitzcXR4MzExNiBzcXVhcmVyb290IDAuMDY0IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTE3IHNxdWFyZXJvb3QgMC42NSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzExOCBzcXVhcmVyb290IDAuMDY1IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTE5IHNxdWFyZXJvb3QgMC42NiAtPiAwLjgxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyMCBzcXVhcmVyb290IDAuMDY2IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTIxIHNxdWFyZXJvb3QgMC42NyAtPiAwLjgxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyMiBzcXVhcmVyb290IDAuMDY3IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTIzIHNxdWFyZXJvb3QgMC42OCAtPiAwLjgyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyNCBzcXVhcmVyb290IDAuMDY4IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTI1IHNxdWFyZXJvb3QgMC42OSAtPiAwLjgzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyNiBzcXVhcmVyb290IDAuMDY5IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTI3IHNxdWFyZXJvb3QgMC43MSAtPiAwLjg0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyOCBzcXVhcmVyb290IDAuMDcxIC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTI5IHNxdWFyZXJvb3QgMC43MiAtPiAwLjg0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzMCBzcXVhcmVyb290IDAuMDcyIC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTMxIHNxdWFyZXJvb3QgMC43MyAtPiAwLjg1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzMiBzcXVhcmVyb290IDAuMDczIC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTMzIHNxdWFyZXJvb3QgMC43NCAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzNCBzcXVhcmVyb290IDAuMDc0IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTM1IHNxdWFyZXJvb3QgMC43NSAtPiAwLjg2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzNiBzcXVhcmVyb290IDAuMDc1IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTM3IHNxdWFyZXJvb3QgMC43NiAtPiAwLjg3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzOCBzcXVhcmVyb290IDAuMDc2IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTM5IHNxdWFyZXJvb3QgMC43NyAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE0MCBzcXVhcmVyb290IDAuMDc3IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTQxIHNxdWFyZXJvb3QgMC43OCAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE0MiBzcXVhcmVyb290IDAuMDc4IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTQzIHNxdWFyZXJvb3QgMC43OSAtPiAwLjg4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE0NCBzcXVhcmVyb290IDAuMDc5IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTQ1IHNxdWFyZXJvb3QgMC44MSAtPiAwLjkKK3NxdHgzMTQ2IHNxdWFyZXJvb3QgMC4wODEgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNDcgc3F1YXJlcm9vdCAwLjgyIC0+IDAuOTA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTQ4IHNxdWFyZXJvb3QgMC4wODIgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNDkgc3F1YXJlcm9vdCAwLjgzIC0+IDAuOTExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTUwIHNxdWFyZXJvb3QgMC4wODMgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNTEgc3F1YXJlcm9vdCAwLjg0IC0+IDAuOTE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTUyIHNxdWFyZXJvb3QgMC4wODQgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNTMgc3F1YXJlcm9vdCAwLjg1IC0+IDAuOTIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTU0IHNxdWFyZXJvb3QgMC4wODUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNTUgc3F1YXJlcm9vdCAwLjg2IC0+IDAuOTI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTU2IHNxdWFyZXJvb3QgMC4wODYgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNTcgc3F1YXJlcm9vdCAwLjg3IC0+IDAuOTMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTU4IHNxdWFyZXJvb3QgMC4wODcgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNTkgc3F1YXJlcm9vdCAwLjg4IC0+IDAuOTM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTYwIHNxdWFyZXJvb3QgMC4wODggLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNjEgc3F1YXJlcm9vdCAwLjg5IC0+IDAuOTQzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTYyIHNxdWFyZXJvb3QgMC4wODkgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNjMgc3F1YXJlcm9vdCAwLjkxIC0+IDAuOTU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTY0IHNxdWFyZXJvb3QgMC4wOTEgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNjUgc3F1YXJlcm9vdCAwLjkyIC0+IDAuOTU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTY2IHNxdWFyZXJvb3QgMC4wOTIgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNjcgc3F1YXJlcm9vdCAwLjkzIC0+IDAuOTY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTY4IHNxdWFyZXJvb3QgMC4wOTMgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNjkgc3F1YXJlcm9vdCAwLjk0IC0+IDAuOTcwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTcwIHNxdWFyZXJvb3QgMC4wOTQgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNzEgc3F1YXJlcm9vdCAwLjk1IC0+IDAuOTc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTcyIHNxdWFyZXJvb3QgMC4wOTUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNzMgc3F1YXJlcm9vdCAwLjk2IC0+IDAuOTgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTc0IHNxdWFyZXJvb3QgMC4wOTYgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNzUgc3F1YXJlcm9vdCAwLjk3IC0+IDAuOTg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTc2IHNxdWFyZXJvb3QgMC4wOTcgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNzcgc3F1YXJlcm9vdCAwLjk4IC0+IDAuOTkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTc4IHNxdWFyZXJvb3QgMC4wOTggLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNzkgc3F1YXJlcm9vdCAwLjk5IC0+IDAuOTk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTgwIHNxdWFyZXJvb3QgMC4wOTkgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxODEgc3F1YXJlcm9vdCAwLjEwMSAtPiAwLjMxOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE4MiBzcXVhcmVyb290IDAuMDEwMSAtPiAwLjEwMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE4MyBzcXVhcmVyb290IDAuMTAyIC0+IDAuMzE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTg0IHNxdWFyZXJvb3QgMC4wMTAyIC0+IDAuMTAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTg1IHNxdWFyZXJvb3QgMC4xMDMgLT4gMC4zMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxODYgc3F1YXJlcm9vdCAwLjAxMDMgLT4gMC4xMDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxODcgc3F1YXJlcm9vdCAwLjEwNCAtPiAwLjMyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE4OCBzcXVhcmVyb290IDAuMDEwNCAtPiAwLjEwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE4OSBzcXVhcmVyb290IDAuMTA1IC0+IDAuMzI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTkwIHNxdWFyZXJvb3QgMC4wMTA1IC0+IDAuMTAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTkxIHNxdWFyZXJvb3QgMC4xMDYgLT4gMC4zMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxOTIgc3F1YXJlcm9vdCAwLjAxMDYgLT4gMC4xMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxOTMgc3F1YXJlcm9vdCAwLjEwNyAtPiAwLjMyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE5NCBzcXVhcmVyb290IDAuMDEwNyAtPiAwLjEwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE5NSBzcXVhcmVyb290IDAuMTA4IC0+IDAuMzI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTk2IHNxdWFyZXJvb3QgMC4wMTA4IC0+IDAuMTA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTk3IHNxdWFyZXJvb3QgMC4xMDkgLT4gMC4zMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxOTggc3F1YXJlcm9vdCAwLjAxMDkgLT4gMC4xMDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxOTkgc3F1YXJlcm9vdCAwLjExMSAtPiAwLjMzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIwMCBzcXVhcmVyb290IDAuMDExMSAtPiAwLjEwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIwMSBzcXVhcmVyb290IDAuMTEyIC0+IDAuMzM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjAyIHNxdWFyZXJvb3QgMC4wMTEyIC0+IDAuMTA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjAzIHNxdWFyZXJvb3QgMC4xMTMgLT4gMC4zMzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMDQgc3F1YXJlcm9vdCAwLjAxMTMgLT4gMC4xMDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMDUgc3F1YXJlcm9vdCAwLjExNCAtPiAwLjMzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIwNiBzcXVhcmVyb290IDAuMDExNCAtPiAwLjEwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIwNyBzcXVhcmVyb290IDAuMTE1IC0+IDAuMzM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjA4IHNxdWFyZXJvb3QgMC4wMTE1IC0+IDAuMTA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjA5IHNxdWFyZXJvb3QgMC4xMTYgLT4gMC4zNDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMTAgc3F1YXJlcm9vdCAwLjAxMTYgLT4gMC4xMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMTEgc3F1YXJlcm9vdCAwLjExNyAtPiAwLjM0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIxMiBzcXVhcmVyb290IDAuMDExNyAtPiAwLjEwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIxMyBzcXVhcmVyb290IDAuMTE4IC0+IDAuMzQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjE0IHNxdWFyZXJvb3QgMC4wMTE4IC0+IDAuMTA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjE1IHNxdWFyZXJvb3QgMC4xMTkgLT4gMC4zNDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMTYgc3F1YXJlcm9vdCAwLjAxMTkgLT4gMC4xMDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMTcgc3F1YXJlcm9vdCAwLjEyMSAtPiAwLjM0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIxOCBzcXVhcmVyb290IDAuMDEyMSAtPiAwLjExCitzcXR4MzIxOSBzcXVhcmVyb290IDAuMTIyIC0+IDAuMzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjIwIHNxdWFyZXJvb3QgMC4wMTIyIC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjIxIHNxdWFyZXJvb3QgMC4xMjMgLT4gMC4zNTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMjIgc3F1YXJlcm9vdCAwLjAxMjMgLT4gMC4xMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMjMgc3F1YXJlcm9vdCAwLjEyNCAtPiAwLjM1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIyNCBzcXVhcmVyb290IDAuMDEyNCAtPiAwLjExMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIyNSBzcXVhcmVyb290IDAuMTI1IC0+IDAuMzU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjI2IHNxdWFyZXJvb3QgMC4wMTI1IC0+IDAuMTEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjI3IHNxdWFyZXJvb3QgMC4xMjYgLT4gMC4zNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMjggc3F1YXJlcm9vdCAwLjAxMjYgLT4gMC4xMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMjkgc3F1YXJlcm9vdCAwLjEyNyAtPiAwLjM1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIzMCBzcXVhcmVyb290IDAuMDEyNyAtPiAwLjExMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIzMSBzcXVhcmVyb290IDAuMTI4IC0+IDAuMzU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjMyIHNxdWFyZXJvb3QgMC4wMTI4IC0+IDAuMTEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjMzIHNxdWFyZXJvb3QgMC4xMjkgLT4gMC4zNTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMzQgc3F1YXJlcm9vdCAwLjAxMjkgLT4gMC4xMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMzUgc3F1YXJlcm9vdCAwLjEzMSAtPiAwLjM2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIzNiBzcXVhcmVyb290IDAuMDEzMSAtPiAwLjExNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIzNyBzcXVhcmVyb290IDAuMTMyIC0+IDAuMzYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjM4IHNxdWFyZXJvb3QgMC4wMTMyIC0+IDAuMTE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjM5IHNxdWFyZXJvb3QgMC4xMzMgLT4gMC4zNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNDAgc3F1YXJlcm9vdCAwLjAxMzMgLT4gMC4xMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNDEgc3F1YXJlcm9vdCAwLjEzNCAtPiAwLjM2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI0MiBzcXVhcmVyb290IDAuMDEzNCAtPiAwLjExNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI0MyBzcXVhcmVyb290IDAuMTM1IC0+IDAuMzY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjQ0IHNxdWFyZXJvb3QgMC4wMTM1IC0+IDAuMTE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjQ1IHNxdWFyZXJvb3QgMC4xMzYgLT4gMC4zNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNDYgc3F1YXJlcm9vdCAwLjAxMzYgLT4gMC4xMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNDcgc3F1YXJlcm9vdCAwLjEzNyAtPiAwLjM3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI0OCBzcXVhcmVyb290IDAuMDEzNyAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI0OSBzcXVhcmVyb290IDAuMTM4IC0+IDAuMzcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjUwIHNxdWFyZXJvb3QgMC4wMTM4IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjUxIHNxdWFyZXJvb3QgMC4xMzkgLT4gMC4zNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNTIgc3F1YXJlcm9vdCAwLjAxMzkgLT4gMC4xMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNTMgc3F1YXJlcm9vdCAwLjE0MSAtPiAwLjM3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI1NCBzcXVhcmVyb290IDAuMDE0MSAtPiAwLjExOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI1NSBzcXVhcmVyb290IDAuMTQyIC0+IDAuMzc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjU2IHNxdWFyZXJvb3QgMC4wMTQyIC0+IDAuMTE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjU3IHNxdWFyZXJvb3QgMC4xNDMgLT4gMC4zNzggIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNTggc3F1YXJlcm9vdCAwLjAxNDMgLT4gMC4xMjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNTkgc3F1YXJlcm9vdCAwLjE0NCAtPiAwLjM3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI2MCBzcXVhcmVyb290IDAuMDE0NCAtPiAwLjEyCitzcXR4MzI2MSBzcXVhcmVyb290IDAuMTQ1IC0+IDAuMzgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjYyIHNxdWFyZXJvb3QgMC4wMTQ1IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjYzIHNxdWFyZXJvb3QgMC4xNDYgLT4gMC4zODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNjQgc3F1YXJlcm9vdCAwLjAxNDYgLT4gMC4xMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNjUgc3F1YXJlcm9vdCAwLjE0NyAtPiAwLjM4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI2NiBzcXVhcmVyb290IDAuMDE0NyAtPiAwLjEyMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI2NyBzcXVhcmVyb290IDAuMTQ4IC0+IDAuMzg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjY4IHNxdWFyZXJvb3QgMC4wMTQ4IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjY5IHNxdWFyZXJvb3QgMC4xNDkgLT4gMC4zODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNzAgc3F1YXJlcm9vdCAwLjAxNDkgLT4gMC4xMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNzEgc3F1YXJlcm9vdCAwLjE1MSAtPiAwLjM4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI3MiBzcXVhcmVyb290IDAuMDE1MSAtPiAwLjEyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI3MyBzcXVhcmVyb290IDAuMTUyIC0+IDAuMzkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjc0IHNxdWFyZXJvb3QgMC4wMTUyIC0+IDAuMTIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjc1IHNxdWFyZXJvb3QgMC4xNTMgLT4gMC4zOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNzYgc3F1YXJlcm9vdCAwLjAxNTMgLT4gMC4xMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNzcgc3F1YXJlcm9vdCAwLjE1NCAtPiAwLjM5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI3OCBzcXVhcmVyb290IDAuMDE1NCAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI3OSBzcXVhcmVyb290IDAuMTU1IC0+IDAuMzk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjgwIHNxdWFyZXJvb3QgMC4wMTU1IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjgxIHNxdWFyZXJvb3QgMC4xNTYgLT4gMC4zOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyODIgc3F1YXJlcm9vdCAwLjAxNTYgLT4gMC4xMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyODMgc3F1YXJlcm9vdCAwLjE1NyAtPiAwLjM5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI4NCBzcXVhcmVyb290IDAuMDE1NyAtPiAwLjEyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI4NSBzcXVhcmVyb290IDAuMTU4IC0+IDAuMzk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjg2IHNxdWFyZXJvb3QgMC4wMTU4IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjg3IHNxdWFyZXJvb3QgMC4xNTkgLT4gMC4zOTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyODggc3F1YXJlcm9vdCAwLjAxNTkgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyODkgc3F1YXJlcm9vdCAwLjE2MSAtPiAwLjQwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI5MCBzcXVhcmVyb290IDAuMDE2MSAtPiAwLjEyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI5MSBzcXVhcmVyb290IDAuMTYyIC0+IDAuNDAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjkyIHNxdWFyZXJvb3QgMC4wMTYyIC0+IDAuMTI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjkzIHNxdWFyZXJvb3QgMC4xNjMgLT4gMC40MDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyOTQgc3F1YXJlcm9vdCAwLjAxNjMgLT4gMC4xMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDMyOTUgc3F1YXJlcm9vdCAwLjE2NCAtPiAwLjQwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI5NiBzcXVhcmVyb290IDAuMDE2NCAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI5NyBzcXVhcmVyb290IDAuMTY1IC0+IDAuNDA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjk4IHNxdWFyZXJvb3QgMC4wMTY1IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjk5IHNxdWFyZXJvb3QgMC4xNjYgLT4gMC40MDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMDAgc3F1YXJlcm9vdCAwLjAxNjYgLT4gMC4xMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMDEgc3F1YXJlcm9vdCAwLjE2NyAtPiAwLjQwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMwMiBzcXVhcmVyb290IDAuMDE2NyAtPiAwLjEyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMwMyBzcXVhcmVyb290IDAuMTY4IC0+IDAuNDEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzA0IHNxdWFyZXJvb3QgMC4wMTY4IC0+IDAuMTMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzA1IHNxdWFyZXJvb3QgMC4xNjkgLT4gMC40MTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMDYgc3F1YXJlcm9vdCAwLjAxNjkgLT4gMC4xMworc3F0eDMzMDcgc3F1YXJlcm9vdCAwLjE3MSAtPiAwLjQxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMwOCBzcXVhcmVyb290IDAuMDE3MSAtPiAwLjEzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMwOSBzcXVhcmVyb290IDAuMTcyIC0+IDAuNDE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzEwIHNxdWFyZXJvb3QgMC4wMTcyIC0+IDAuMTMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzExIHNxdWFyZXJvb3QgMC4xNzMgLT4gMC40MTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMTIgc3F1YXJlcm9vdCAwLjAxNzMgLT4gMC4xMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMTMgc3F1YXJlcm9vdCAwLjE3NCAtPiAwLjQxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMxNCBzcXVhcmVyb290IDAuMDE3NCAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMxNSBzcXVhcmVyb290IDAuMTc1IC0+IDAuNDE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzE2IHNxdWFyZXJvb3QgMC4wMTc1IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzE3IHNxdWFyZXJvb3QgMC4xNzYgLT4gMC40MjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMTggc3F1YXJlcm9vdCAwLjAxNzYgLT4gMC4xMzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMTkgc3F1YXJlcm9vdCAwLjE3NyAtPiAwLjQyMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMyMCBzcXVhcmVyb290IDAuMDE3NyAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMyMSBzcXVhcmVyb290IDAuMTc4IC0+IDAuNDIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzIyIHNxdWFyZXJvb3QgMC4wMTc4IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzIzIHNxdWFyZXJvb3QgMC4xNzkgLT4gMC40MjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMjQgc3F1YXJlcm9vdCAwLjAxNzkgLT4gMC4xMzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMjUgc3F1YXJlcm9vdCAwLjE4MSAtPiAwLjQyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMyNiBzcXVhcmVyb290IDAuMDE4MSAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMyNyBzcXVhcmVyb290IDAuMTgyIC0+IDAuNDI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzI4IHNxdWFyZXJvb3QgMC4wMTgyIC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzI5IHNxdWFyZXJvb3QgMC4xODMgLT4gMC40MjggIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMzAgc3F1YXJlcm9vdCAwLjAxODMgLT4gMC4xMzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMzEgc3F1YXJlcm9vdCAwLjE4NCAtPiAwLjQyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMzMiBzcXVhcmVyb290IDAuMDE4NCAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMzMyBzcXVhcmVyb290IDAuMTg1IC0+IDAuNDMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzM0IHNxdWFyZXJvb3QgMC4wMTg1IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzM1IHNxdWFyZXJvb3QgMC4xODYgLT4gMC40MzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMzYgc3F1YXJlcm9vdCAwLjAxODYgLT4gMC4xMzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMzcgc3F1YXJlcm9vdCAwLjE4NyAtPiAwLjQzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMzOCBzcXVhcmVyb290IDAuMDE4NyAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMzOSBzcXVhcmVyb290IDAuMTg4IC0+IDAuNDM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzQwIHNxdWFyZXJvb3QgMC4wMTg4IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzQxIHNxdWFyZXJvb3QgMC4xODkgLT4gMC40MzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNDIgc3F1YXJlcm9vdCAwLjAxODkgLT4gMC4xMzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNDMgc3F1YXJlcm9vdCAwLjE5MSAtPiAwLjQzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM0NCBzcXVhcmVyb290IDAuMDE5MSAtPiAwLjEzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM0NSBzcXVhcmVyb290IDAuMTkyIC0+IDAuNDM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzQ2IHNxdWFyZXJvb3QgMC4wMTkyIC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzQ3IHNxdWFyZXJvb3QgMC4xOTMgLT4gMC40MzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNDggc3F1YXJlcm9vdCAwLjAxOTMgLT4gMC4xMzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNDkgc3F1YXJlcm9vdCAwLjE5NCAtPiAwLjQ0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM1MCBzcXVhcmVyb290IDAuMDE5NCAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM1MSBzcXVhcmVyb290IDAuMTk1IC0+IDAuNDQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzUyIHNxdWFyZXJvb3QgMC4wMTk1IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzUzIHNxdWFyZXJvb3QgMC4xOTYgLT4gMC40NDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNTQgc3F1YXJlcm9vdCAwLjAxOTYgLT4gMC4xNAorc3F0eDMzNTUgc3F1YXJlcm9vdCAwLjE5NyAtPiAwLjQ0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM1NiBzcXVhcmVyb290IDAuMDE5NyAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM1NyBzcXVhcmVyb290IDAuMTk4IC0+IDAuNDQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzU4IHNxdWFyZXJvb3QgMC4wMTk4IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzU5IHNxdWFyZXJvb3QgMC4xOTkgLT4gMC40NDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNjAgc3F1YXJlcm9vdCAwLjAxOTkgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNjEgc3F1YXJlcm9vdCAwLjIwMSAtPiAwLjQ0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM2MiBzcXVhcmVyb290IDAuMDIwMSAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM2MyBzcXVhcmVyb290IDAuMjAyIC0+IDAuNDQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzY0IHNxdWFyZXJvb3QgMC4wMjAyIC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzY1IHNxdWFyZXJvb3QgMC4yMDMgLT4gMC40NTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNjYgc3F1YXJlcm9vdCAwLjAyMDMgLT4gMC4xNDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNjcgc3F1YXJlcm9vdCAwLjIwNCAtPiAwLjQ1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM2OCBzcXVhcmVyb290IDAuMDIwNCAtPiAwLjE0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM2OSBzcXVhcmVyb290IDAuMjA1IC0+IDAuNDUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzcwIHNxdWFyZXJvb3QgMC4wMjA1IC0+IDAuMTQzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzcxIHNxdWFyZXJvb3QgMC4yMDYgLT4gMC40NTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNzIgc3F1YXJlcm9vdCAwLjAyMDYgLT4gMC4xNDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNzMgc3F1YXJlcm9vdCAwLjIwNyAtPiAwLjQ1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM3NCBzcXVhcmVyb290IDAuMDIwNyAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM3NSBzcXVhcmVyb290IDAuMjA4IC0+IDAuNDU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzc2IHNxdWFyZXJvb3QgMC4wMjA4IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzc3IHNxdWFyZXJvb3QgMC4yMDkgLT4gMC40NTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNzggc3F1YXJlcm9vdCAwLjAyMDkgLT4gMC4xNDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNzkgc3F1YXJlcm9vdCAwLjIxMSAtPiAwLjQ1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM4MCBzcXVhcmVyb290IDAuMDIxMSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM4MSBzcXVhcmVyb290IDAuMjEyIC0+IDAuNDYwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzgyIHNxdWFyZXJvb3QgMC4wMjEyIC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzgzIHNxdWFyZXJvb3QgMC4yMTMgLT4gMC40NjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzODQgc3F1YXJlcm9vdCAwLjAyMTMgLT4gMC4xNDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzODUgc3F1YXJlcm9vdCAwLjIxNCAtPiAwLjQ2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM4NiBzcXVhcmVyb290IDAuMDIxNCAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM4NyBzcXVhcmVyb290IDAuMjE1IC0+IDAuNDY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzg4IHNxdWFyZXJvb3QgMC4wMjE1IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzg5IHNxdWFyZXJvb3QgMC4yMTYgLT4gMC40NjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzOTAgc3F1YXJlcm9vdCAwLjAyMTYgLT4gMC4xNDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzOTEgc3F1YXJlcm9vdCAwLjIxNyAtPiAwLjQ2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM5MiBzcXVhcmVyb290IDAuMDIxNyAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM5MyBzcXVhcmVyb290IDAuMjE4IC0+IDAuNDY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzk0IHNxdWFyZXJvb3QgMC4wMjE4IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzk1IHNxdWFyZXJvb3QgMC4yMTkgLT4gMC40NjggIEluZXhhY3QgUm91bmRlZAorc3F0eDMzOTYgc3F1YXJlcm9vdCAwLjAyMTkgLT4gMC4xNDggIEluZXhhY3QgUm91bmRlZAorc3F0eDMzOTcgc3F1YXJlcm9vdCAwLjIyMSAtPiAwLjQ3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM5OCBzcXVhcmVyb290IDAuMDIyMSAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM5OSBzcXVhcmVyb290IDAuMjIyIC0+IDAuNDcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDAwIHNxdWFyZXJvb3QgMC4wMjIyIC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDAxIHNxdWFyZXJvb3QgMC4yMjMgLT4gMC40NzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MDIgc3F1YXJlcm9vdCAwLjAyMjMgLT4gMC4xNDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MDMgc3F1YXJlcm9vdCAwLjIyNCAtPiAwLjQ3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQwNCBzcXVhcmVyb290IDAuMDIyNCAtPiAwLjE1MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQwNSBzcXVhcmVyb290IDAuMjI1IC0+IDAuNDc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDA2IHNxdWFyZXJvb3QgMC4wMjI1IC0+IDAuMTUKK3NxdHgzNDA3IHNxdWFyZXJvb3QgMC4yMjYgLT4gMC40NzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MDggc3F1YXJlcm9vdCAwLjAyMjYgLT4gMC4xNTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MDkgc3F1YXJlcm9vdCAwLjIyNyAtPiAwLjQ3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQxMCBzcXVhcmVyb290IDAuMDIyNyAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQxMSBzcXVhcmVyb290IDAuMjI4IC0+IDAuNDc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDEyIHNxdWFyZXJvb3QgMC4wMjI4IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDEzIHNxdWFyZXJvb3QgMC4yMjkgLT4gMC40NzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MTQgc3F1YXJlcm9vdCAwLjAyMjkgLT4gMC4xNTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MTUgc3F1YXJlcm9vdCAwLjIzMSAtPiAwLjQ4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQxNiBzcXVhcmVyb290IDAuMDIzMSAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQxNyBzcXVhcmVyb290IDAuMjMyIC0+IDAuNDgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDE4IHNxdWFyZXJvb3QgMC4wMjMyIC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDE5IHNxdWFyZXJvb3QgMC4yMzMgLT4gMC40ODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MjAgc3F1YXJlcm9vdCAwLjAyMzMgLT4gMC4xNTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MjEgc3F1YXJlcm9vdCAwLjIzNCAtPiAwLjQ4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQyMiBzcXVhcmVyb290IDAuMDIzNCAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQyMyBzcXVhcmVyb290IDAuMjM1IC0+IDAuNDg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDI0IHNxdWFyZXJvb3QgMC4wMjM1IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDI1IHNxdWFyZXJvb3QgMC4yMzYgLT4gMC40ODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MjYgc3F1YXJlcm9vdCAwLjAyMzYgLT4gMC4xNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0Mjcgc3F1YXJlcm9vdCAwLjIzNyAtPiAwLjQ4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQyOCBzcXVhcmVyb290IDAuMDIzNyAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQyOSBzcXVhcmVyb290IDAuMjM4IC0+IDAuNDg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDMwIHNxdWFyZXJvb3QgMC4wMjM4IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDMxIHNxdWFyZXJvb3QgMC4yMzkgLT4gMC40ODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MzIgc3F1YXJlcm9vdCAwLjAyMzkgLT4gMC4xNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MzMgc3F1YXJlcm9vdCAwLjI0MSAtPiAwLjQ5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQzNCBzcXVhcmVyb290IDAuMDI0MSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQzNSBzcXVhcmVyb290IDAuMjQyIC0+IDAuNDkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDM2IHNxdWFyZXJvb3QgMC4wMjQyIC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDM3IHNxdWFyZXJvb3QgMC4yNDMgLT4gMC40OTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0Mzggc3F1YXJlcm9vdCAwLjAyNDMgLT4gMC4xNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0Mzkgc3F1YXJlcm9vdCAwLjI0NCAtPiAwLjQ5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ0MCBzcXVhcmVyb290IDAuMDI0NCAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ0MSBzcXVhcmVyb290IDAuMjQ1IC0+IDAuNDk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDQyIHNxdWFyZXJvb3QgMC4wMjQ1IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDQzIHNxdWFyZXJvb3QgMC4yNDYgLT4gMC40OTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NDQgc3F1YXJlcm9vdCAwLjAyNDYgLT4gMC4xNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NDUgc3F1YXJlcm9vdCAwLjI0NyAtPiAwLjQ5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ0NiBzcXVhcmVyb290IDAuMDI0NyAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ0NyBzcXVhcmVyb290IDAuMjQ4IC0+IDAuNDk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDQ4IHNxdWFyZXJvb3QgMC4wMjQ4IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDQ5IHNxdWFyZXJvb3QgMC4yNDkgLT4gMC40OTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NTAgc3F1YXJlcm9vdCAwLjAyNDkgLT4gMC4xNTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NTEgc3F1YXJlcm9vdCAwLjI1MSAtPiAwLjUwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ1MiBzcXVhcmVyb290IDAuMDI1MSAtPiAwLjE1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ1MyBzcXVhcmVyb290IDAuMjUyIC0+IDAuNTAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDU0IHNxdWFyZXJvb3QgMC4wMjUyIC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDU1IHNxdWFyZXJvb3QgMC4yNTMgLT4gMC41MDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NTYgc3F1YXJlcm9vdCAwLjAyNTMgLT4gMC4xNTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NTcgc3F1YXJlcm9vdCAwLjI1NCAtPiAwLjUwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ1OCBzcXVhcmVyb290IDAuMDI1NCAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ1OSBzcXVhcmVyb290IDAuMjU1IC0+IDAuNTA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDYwIHNxdWFyZXJvb3QgMC4wMjU1IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDYxIHNxdWFyZXJvb3QgMC4yNTYgLT4gMC41MDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NjIgc3F1YXJlcm9vdCAwLjAyNTYgLT4gMC4xNgorc3F0eDM0NjMgc3F1YXJlcm9vdCAwLjI1NyAtPiAwLjUwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ2NCBzcXVhcmVyb290IDAuMDI1NyAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ2NSBzcXVhcmVyb290IDAuMjU4IC0+IDAuNTA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDY2IHNxdWFyZXJvb3QgMC4wMjU4IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDY3IHNxdWFyZXJvb3QgMC4yNTkgLT4gMC41MDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0Njggc3F1YXJlcm9vdCAwLjAyNTkgLT4gMC4xNjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0Njkgc3F1YXJlcm9vdCAwLjI2MSAtPiAwLjUxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ3MCBzcXVhcmVyb290IDAuMDI2MSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ3MSBzcXVhcmVyb290IDAuMjYyIC0+IDAuNTEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDcyIHNxdWFyZXJvb3QgMC4wMjYyIC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDczIHNxdWFyZXJvb3QgMC4yNjMgLT4gMC41MTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NzQgc3F1YXJlcm9vdCAwLjAyNjMgLT4gMC4xNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NzUgc3F1YXJlcm9vdCAwLjI2NCAtPiAwLjUxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ3NiBzcXVhcmVyb290IDAuMDI2NCAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ3NyBzcXVhcmVyb290IDAuMjY1IC0+IDAuNTE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDc4IHNxdWFyZXJvb3QgMC4wMjY1IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDc5IHNxdWFyZXJvb3QgMC4yNjYgLT4gMC41MTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0ODAgc3F1YXJlcm9vdCAwLjAyNjYgLT4gMC4xNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0ODEgc3F1YXJlcm9vdCAwLjI2NyAtPiAwLjUxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ4MiBzcXVhcmVyb290IDAuMDI2NyAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ4MyBzcXVhcmVyb290IDAuMjY4IC0+IDAuNTE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDg0IHNxdWFyZXJvb3QgMC4wMjY4IC0+IDAuMTY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDg1IHNxdWFyZXJvb3QgMC4yNjkgLT4gMC41MTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0ODYgc3F1YXJlcm9vdCAwLjAyNjkgLT4gMC4xNjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0ODcgc3F1YXJlcm9vdCAwLjI3MSAtPiAwLjUyMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ4OCBzcXVhcmVyb290IDAuMDI3MSAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ4OSBzcXVhcmVyb290IDAuMjcyIC0+IDAuNTIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDkwIHNxdWFyZXJvb3QgMC4wMjcyIC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDkxIHNxdWFyZXJvb3QgMC4yNzMgLT4gMC41MjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0OTIgc3F1YXJlcm9vdCAwLjAyNzMgLT4gMC4xNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0OTMgc3F1YXJlcm9vdCAwLjI3NCAtPiAwLjUyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ5NCBzcXVhcmVyb290IDAuMDI3NCAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ5NSBzcXVhcmVyb290IDAuMjc1IC0+IDAuNTI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDk2IHNxdWFyZXJvb3QgMC4wMjc1IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDk3IHNxdWFyZXJvb3QgMC4yNzYgLT4gMC41MjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0OTggc3F1YXJlcm9vdCAwLjAyNzYgLT4gMC4xNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0OTkgc3F1YXJlcm9vdCAwLjI3NyAtPiAwLjUyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUwMCBzcXVhcmVyb290IDAuMDI3NyAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUwMSBzcXVhcmVyb290IDAuMjc4IC0+IDAuNTI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTAyIHNxdWFyZXJvb3QgMC4wMjc4IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTAzIHNxdWFyZXJvb3QgMC4yNzkgLT4gMC41MjggIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MDQgc3F1YXJlcm9vdCAwLjAyNzkgLT4gMC4xNjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MDUgc3F1YXJlcm9vdCAwLjI4MSAtPiAwLjUzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUwNiBzcXVhcmVyb290IDAuMDI4MSAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUwNyBzcXVhcmVyb290IDAuMjgyIC0+IDAuNTMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTA4IHNxdWFyZXJvb3QgMC4wMjgyIC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTA5IHNxdWFyZXJvb3QgMC4yODMgLT4gMC41MzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MTAgc3F1YXJlcm9vdCAwLjAyODMgLT4gMC4xNjggIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MTEgc3F1YXJlcm9vdCAwLjI4NCAtPiAwLjUzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUxMiBzcXVhcmVyb290IDAuMDI4NCAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUxMyBzcXVhcmVyb290IDAuMjg1IC0+IDAuNTM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTE0IHNxdWFyZXJvb3QgMC4wMjg1IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTE1IHNxdWFyZXJvb3QgMC4yODYgLT4gMC41MzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MTYgc3F1YXJlcm9vdCAwLjAyODYgLT4gMC4xNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MTcgc3F1YXJlcm9vdCAwLjI4NyAtPiAwLjUzNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUxOCBzcXVhcmVyb290IDAuMDI4NyAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUxOSBzcXVhcmVyb290IDAuMjg4IC0+IDAuNTM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTIwIHNxdWFyZXJvb3QgMC4wMjg4IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTIxIHNxdWFyZXJvb3QgMC4yODkgLT4gMC41MzggIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MjIgc3F1YXJlcm9vdCAwLjAyODkgLT4gMC4xNworc3F0eDM1MjMgc3F1YXJlcm9vdCAwLjI5MSAtPiAwLjUzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUyNCBzcXVhcmVyb290IDAuMDI5MSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUyNSBzcXVhcmVyb290IDAuMjkyIC0+IDAuNTQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTI2IHNxdWFyZXJvb3QgMC4wMjkyIC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTI3IHNxdWFyZXJvb3QgMC4yOTMgLT4gMC41NDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1Mjggc3F1YXJlcm9vdCAwLjAyOTMgLT4gMC4xNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1Mjkgc3F1YXJlcm9vdCAwLjI5NCAtPiAwLjU0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUzMCBzcXVhcmVyb290IDAuMDI5NCAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUzMSBzcXVhcmVyb290IDAuMjk1IC0+IDAuNTQzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTMyIHNxdWFyZXJvb3QgMC4wMjk1IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTMzIHNxdWFyZXJvb3QgMC4yOTYgLT4gMC41NDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MzQgc3F1YXJlcm9vdCAwLjAyOTYgLT4gMC4xNzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MzUgc3F1YXJlcm9vdCAwLjI5NyAtPiAwLjU0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUzNiBzcXVhcmVyb290IDAuMDI5NyAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUzNyBzcXVhcmVyb290IDAuMjk4IC0+IDAuNTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTM4IHNxdWFyZXJvb3QgMC4wMjk4IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTM5IHNxdWFyZXJvb3QgMC4yOTkgLT4gMC41NDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NDAgc3F1YXJlcm9vdCAwLjAyOTkgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NDEgc3F1YXJlcm9vdCAwLjMwMSAtPiAwLjU0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU0MiBzcXVhcmVyb290IDAuMDMwMSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU0MyBzcXVhcmVyb290IDAuMzAyIC0+IDAuNTUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTQ0IHNxdWFyZXJvb3QgMC4wMzAyIC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTQ1IHNxdWFyZXJvb3QgMC4zMDMgLT4gMC41NTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NDYgc3F1YXJlcm9vdCAwLjAzMDMgLT4gMC4xNzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NDcgc3F1YXJlcm9vdCAwLjMwNCAtPiAwLjU1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU0OCBzcXVhcmVyb290IDAuMDMwNCAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU0OSBzcXVhcmVyb290IDAuMzA1IC0+IDAuNTUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTUwIHNxdWFyZXJvb3QgMC4wMzA1IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTUxIHNxdWFyZXJvb3QgMC4zMDYgLT4gMC41NTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NTIgc3F1YXJlcm9vdCAwLjAzMDYgLT4gMC4xNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NTMgc3F1YXJlcm9vdCAwLjMwNyAtPiAwLjU1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU1NCBzcXVhcmVyb290IDAuMDMwNyAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU1NSBzcXVhcmVyb290IDAuMzA4IC0+IDAuNTU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTU2IHNxdWFyZXJvb3QgMC4wMzA4IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTU3IHNxdWFyZXJvb3QgMC4zMDkgLT4gMC41NTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NTggc3F1YXJlcm9vdCAwLjAzMDkgLT4gMC4xNzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NTkgc3F1YXJlcm9vdCAwLjMxMSAtPiAwLjU1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU2MCBzcXVhcmVyb290IDAuMDMxMSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU2MSBzcXVhcmVyb290IDAuMzEyIC0+IDAuNTU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTYyIHNxdWFyZXJvb3QgMC4wMzEyIC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTYzIHNxdWFyZXJvb3QgMC4zMTMgLT4gMC41NTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NjQgc3F1YXJlcm9vdCAwLjAzMTMgLT4gMC4xNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NjUgc3F1YXJlcm9vdCAwLjMxNCAtPiAwLjU2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU2NiBzcXVhcmVyb290IDAuMDMxNCAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU2NyBzcXVhcmVyb290IDAuMzE1IC0+IDAuNTYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTY4IHNxdWFyZXJvb3QgMC4wMzE1IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTY5IHNxdWFyZXJvb3QgMC4zMTYgLT4gMC41NjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NzAgc3F1YXJlcm9vdCAwLjAzMTYgLT4gMC4xNzggIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NzEgc3F1YXJlcm9vdCAwLjMxNyAtPiAwLjU2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU3MiBzcXVhcmVyb290IDAuMDMxNyAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU3MyBzcXVhcmVyb290IDAuMzE4IC0+IDAuNTY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTc0IHNxdWFyZXJvb3QgMC4wMzE4IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTc1IHNxdWFyZXJvb3QgMC4zMTkgLT4gMC41NjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NzYgc3F1YXJlcm9vdCAwLjAzMTkgLT4gMC4xNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1Nzcgc3F1YXJlcm9vdCAwLjMyMSAtPiAwLjU2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU3OCBzcXVhcmVyb290IDAuMDMyMSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU3OSBzcXVhcmVyb290IDAuMzIyIC0+IDAuNTY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTgwIHNxdWFyZXJvb3QgMC4wMzIyIC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTgxIHNxdWFyZXJvb3QgMC4zMjMgLT4gMC41NjggIEluZXhhY3QgUm91bmRlZAorc3F0eDM1ODIgc3F1YXJlcm9vdCAwLjAzMjMgLT4gMC4xODAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1ODMgc3F1YXJlcm9vdCAwLjMyNCAtPiAwLjU2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU4NCBzcXVhcmVyb290IDAuMDMyNCAtPiAwLjE4CitzcXR4MzU4NSBzcXVhcmVyb290IDAuMzI1IC0+IDAuNTcwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTg2IHNxdWFyZXJvb3QgMC4wMzI1IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTg3IHNxdWFyZXJvb3QgMC4zMjYgLT4gMC41NzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1ODggc3F1YXJlcm9vdCAwLjAzMjYgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1ODkgc3F1YXJlcm9vdCAwLjMyNyAtPiAwLjU3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU5MCBzcXVhcmVyb290IDAuMDMyNyAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU5MSBzcXVhcmVyb290IDAuMzI4IC0+IDAuNTczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTkyIHNxdWFyZXJvb3QgMC4wMzI4IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTkzIHNxdWFyZXJvb3QgMC4zMjkgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1OTQgc3F1YXJlcm9vdCAwLjAzMjkgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1OTUgc3F1YXJlcm9vdCAwLjMzMSAtPiAwLjU3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU5NiBzcXVhcmVyb290IDAuMDMzMSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU5NyBzcXVhcmVyb290IDAuMzMyIC0+IDAuNTc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTk4IHNxdWFyZXJvb3QgMC4wMzMyIC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTk5IHNxdWFyZXJvb3QgMC4zMzMgLT4gMC41NzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MDAgc3F1YXJlcm9vdCAwLjAzMzMgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MDEgc3F1YXJlcm9vdCAwLjMzNCAtPiAwLjU3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYwMiBzcXVhcmVyb290IDAuMDMzNCAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYwMyBzcXVhcmVyb290IDAuMzM1IC0+IDAuNTc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjA0IHNxdWFyZXJvb3QgMC4wMzM1IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjA1IHNxdWFyZXJvb3QgMC4zMzYgLT4gMC41ODAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MDYgc3F1YXJlcm9vdCAwLjAzMzYgLT4gMC4xODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MDcgc3F1YXJlcm9vdCAwLjMzNyAtPiAwLjU4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYwOCBzcXVhcmVyb290IDAuMDMzNyAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYwOSBzcXVhcmVyb290IDAuMzM4IC0+IDAuNTgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjEwIHNxdWFyZXJvb3QgMC4wMzM4IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjExIHNxdWFyZXJvb3QgMC4zMzkgLT4gMC41ODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MTIgc3F1YXJlcm9vdCAwLjAzMzkgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MTMgc3F1YXJlcm9vdCAwLjM0MSAtPiAwLjU4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYxNCBzcXVhcmVyb290IDAuMDM0MSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYxNSBzcXVhcmVyb290IDAuMzQyIC0+IDAuNTg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjE2IHNxdWFyZXJvb3QgMC4wMzQyIC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjE3IHNxdWFyZXJvb3QgMC4zNDMgLT4gMC41ODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MTggc3F1YXJlcm9vdCAwLjAzNDMgLT4gMC4xODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MTkgc3F1YXJlcm9vdCAwLjM0NCAtPiAwLjU4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYyMCBzcXVhcmVyb290IDAuMDM0NCAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYyMSBzcXVhcmVyb290IDAuMzQ1IC0+IDAuNTg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjIyIHNxdWFyZXJvb3QgMC4wMzQ1IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjIzIHNxdWFyZXJvb3QgMC4zNDYgLT4gMC41ODggIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MjQgc3F1YXJlcm9vdCAwLjAzNDYgLT4gMC4xODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MjUgc3F1YXJlcm9vdCAwLjM0NyAtPiAwLjU4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYyNiBzcXVhcmVyb290IDAuMDM0NyAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYyNyBzcXVhcmVyb290IDAuMzQ4IC0+IDAuNTkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjI4IHNxdWFyZXJvb3QgMC4wMzQ4IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjI5IHNxdWFyZXJvb3QgMC4zNDkgLT4gMC41OTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MzAgc3F1YXJlcm9vdCAwLjAzNDkgLT4gMC4xODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MzEgc3F1YXJlcm9vdCAwLjM1MSAtPiAwLjU5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYzMiBzcXVhcmVyb290IDAuMDM1MSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYzMyBzcXVhcmVyb290IDAuMzUyIC0+IDAuNTkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjM0IHNxdWFyZXJvb3QgMC4wMzUyIC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjM1IHNxdWFyZXJvb3QgMC4zNTMgLT4gMC41OTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MzYgc3F1YXJlcm9vdCAwLjAzNTMgLT4gMC4xODggIEluZXhhY3QgUm91bmRlZAorc3F0eDM2Mzcgc3F1YXJlcm9vdCAwLjM1NCAtPiAwLjU5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYzOCBzcXVhcmVyb290IDAuMDM1NCAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYzOSBzcXVhcmVyb290IDAuMzU1IC0+IDAuNTk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjQwIHNxdWFyZXJvb3QgMC4wMzU1IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjQxIHNxdWFyZXJvb3QgMC4zNTYgLT4gMC41OTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NDIgc3F1YXJlcm9vdCAwLjAzNTYgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NDMgc3F1YXJlcm9vdCAwLjM1NyAtPiAwLjU5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY0NCBzcXVhcmVyb290IDAuMDM1NyAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY0NSBzcXVhcmVyb290IDAuMzU4IC0+IDAuNTk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjQ2IHNxdWFyZXJvb3QgMC4wMzU4IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjQ3IHNxdWFyZXJvb3QgMC4zNTkgLT4gMC41OTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NDggc3F1YXJlcm9vdCAwLjAzNTkgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NDkgc3F1YXJlcm9vdCAwLjM2MSAtPiAwLjYwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY1MCBzcXVhcmVyb290IDAuMDM2MSAtPiAwLjE5CitzcXR4MzY1MSBzcXVhcmVyb290IDAuMzYyIC0+IDAuNjAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjUyIHNxdWFyZXJvb3QgMC4wMzYyIC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjUzIHNxdWFyZXJvb3QgMC4zNjMgLT4gMC42MDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NTQgc3F1YXJlcm9vdCAwLjAzNjMgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NTUgc3F1YXJlcm9vdCAwLjM2NCAtPiAwLjYwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY1NiBzcXVhcmVyb290IDAuMDM2NCAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY1NyBzcXVhcmVyb290IDAuMzY1IC0+IDAuNjA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjU4IHNxdWFyZXJvb3QgMC4wMzY1IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjU5IHNxdWFyZXJvb3QgMC4zNjYgLT4gMC42MDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NjAgc3F1YXJlcm9vdCAwLjAzNjYgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NjEgc3F1YXJlcm9vdCAwLjM2NyAtPiAwLjYwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY2MiBzcXVhcmVyb290IDAuMDM2NyAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY2MyBzcXVhcmVyb290IDAuMzY4IC0+IDAuNjA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjY0IHNxdWFyZXJvb3QgMC4wMzY4IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjY1IHNxdWFyZXJvb3QgMC4zNjkgLT4gMC42MDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NjYgc3F1YXJlcm9vdCAwLjAzNjkgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2Njcgc3F1YXJlcm9vdCAwLjM3MSAtPiAwLjYwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY2OCBzcXVhcmVyb290IDAuMDM3MSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY2OSBzcXVhcmVyb290IDAuMzcyIC0+IDAuNjEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjcwIHNxdWFyZXJvb3QgMC4wMzcyIC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjcxIHNxdWFyZXJvb3QgMC4zNzMgLT4gMC42MTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NzIgc3F1YXJlcm9vdCAwLjAzNzMgLT4gMC4xOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NzMgc3F1YXJlcm9vdCAwLjM3NCAtPiAwLjYxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY3NCBzcXVhcmVyb290IDAuMDM3NCAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY3NSBzcXVhcmVyb290IDAuMzc1IC0+IDAuNjEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjc2IHNxdWFyZXJvb3QgMC4wMzc1IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjc3IHNxdWFyZXJvb3QgMC4zNzYgLT4gMC42MTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2Nzggc3F1YXJlcm9vdCAwLjAzNzYgLT4gMC4xOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2Nzkgc3F1YXJlcm9vdCAwLjM3NyAtPiAwLjYxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY4MCBzcXVhcmVyb290IDAuMDM3NyAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY4MSBzcXVhcmVyb290IDAuMzc4IC0+IDAuNjE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjgyIHNxdWFyZXJvb3QgMC4wMzc4IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjgzIHNxdWFyZXJvb3QgMC4zNzkgLT4gMC42MTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2ODQgc3F1YXJlcm9vdCAwLjAzNzkgLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2ODUgc3F1YXJlcm9vdCAwLjM4MSAtPiAwLjYxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY4NiBzcXVhcmVyb290IDAuMDM4MSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY4NyBzcXVhcmVyb290IDAuMzgyIC0+IDAuNjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjg4IHNxdWFyZXJvb3QgMC4wMzgyIC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjg5IHNxdWFyZXJvb3QgMC4zODMgLT4gMC42MTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2OTAgc3F1YXJlcm9vdCAwLjAzODMgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2OTEgc3F1YXJlcm9vdCAwLjM4NCAtPiAwLjYyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY5MiBzcXVhcmVyb290IDAuMDM4NCAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY5MyBzcXVhcmVyb290IDAuMzg1IC0+IDAuNjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjk0IHNxdWFyZXJvb3QgMC4wMzg1IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjk1IHNxdWFyZXJvb3QgMC4zODYgLT4gMC42MjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2OTYgc3F1YXJlcm9vdCAwLjAzODYgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2OTcgc3F1YXJlcm9vdCAwLjM4NyAtPiAwLjYyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY5OCBzcXVhcmVyb290IDAuMDM4NyAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY5OSBzcXVhcmVyb290IDAuMzg4IC0+IDAuNjIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzAwIHNxdWFyZXJvb3QgMC4wMzg4IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzAxIHNxdWFyZXJvb3QgMC4zODkgLT4gMC42MjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MDIgc3F1YXJlcm9vdCAwLjAzODkgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MDMgc3F1YXJlcm9vdCAwLjM5MSAtPiAwLjYyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcwNCBzcXVhcmVyb290IDAuMDM5MSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcwNSBzcXVhcmVyb290IDAuMzkyIC0+IDAuNjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzA2IHNxdWFyZXJvb3QgMC4wMzkyIC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzA3IHNxdWFyZXJvb3QgMC4zOTMgLT4gMC42MjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MDggc3F1YXJlcm9vdCAwLjAzOTMgLT4gMC4xOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MDkgc3F1YXJlcm9vdCAwLjM5NCAtPiAwLjYyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcxMCBzcXVhcmVyb290IDAuMDM5NCAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcxMSBzcXVhcmVyb290IDAuMzk1IC0+IDAuNjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzEyIHNxdWFyZXJvb3QgMC4wMzk1IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzEzIHNxdWFyZXJvb3QgMC4zOTYgLT4gMC42MjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MTQgc3F1YXJlcm9vdCAwLjAzOTYgLT4gMC4xOTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MTUgc3F1YXJlcm9vdCAwLjM5NyAtPiAwLjYzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcxNiBzcXVhcmVyb290IDAuMDM5NyAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcxNyBzcXVhcmVyb290IDAuMzk4IC0+IDAuNjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzE4IHNxdWFyZXJvb3QgMC4wMzk4IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzE5IHNxdWFyZXJvb3QgMC4zOTkgLT4gMC42MzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MjAgc3F1YXJlcm9vdCAwLjAzOTkgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MjEgc3F1YXJlcm9vdCAwLjQwMSAtPiAwLjYzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcyMiBzcXVhcmVyb290IDAuMDQwMSAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcyMyBzcXVhcmVyb290IDAuNDAyIC0+IDAuNjM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzI0IHNxdWFyZXJvb3QgMC4wNDAyIC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzI1IHNxdWFyZXJvb3QgMC40MDMgLT4gMC42MzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MjYgc3F1YXJlcm9vdCAwLjA0MDMgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3Mjcgc3F1YXJlcm9vdCAwLjQwNCAtPiAwLjYzNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcyOCBzcXVhcmVyb290IDAuMDQwNCAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcyOSBzcXVhcmVyb290IDAuNDA1IC0+IDAuNjM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzMwIHNxdWFyZXJvb3QgMC4wNDA1IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzMxIHNxdWFyZXJvb3QgMC40MDYgLT4gMC42MzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MzIgc3F1YXJlcm9vdCAwLjA0MDYgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MzMgc3F1YXJlcm9vdCAwLjQwNyAtPiAwLjYzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzczNCBzcXVhcmVyb290IDAuMDQwNyAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzczNSBzcXVhcmVyb290IDAuNDA4IC0+IDAuNjM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzM2IHNxdWFyZXJvb3QgMC4wNDA4IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzM3IHNxdWFyZXJvb3QgMC40MDkgLT4gMC42NDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3Mzggc3F1YXJlcm9vdCAwLjA0MDkgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3Mzkgc3F1YXJlcm9vdCAwLjQxMSAtPiAwLjY0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc0MCBzcXVhcmVyb290IDAuMDQxMSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc0MSBzcXVhcmVyb290IDAuNDEyIC0+IDAuNjQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzQyIHNxdWFyZXJvb3QgMC4wNDEyIC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzQzIHNxdWFyZXJvb3QgMC40MTMgLT4gMC42NDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NDQgc3F1YXJlcm9vdCAwLjA0MTMgLT4gMC4yMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NDUgc3F1YXJlcm9vdCAwLjQxNCAtPiAwLjY0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc0NiBzcXVhcmVyb290IDAuMDQxNCAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc0NyBzcXVhcmVyb290IDAuNDE1IC0+IDAuNjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzQ4IHNxdWFyZXJvb3QgMC4wNDE1IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzQ5IHNxdWFyZXJvb3QgMC40MTYgLT4gMC42NDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NTAgc3F1YXJlcm9vdCAwLjA0MTYgLT4gMC4yMDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NTEgc3F1YXJlcm9vdCAwLjQxNyAtPiAwLjY0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc1MiBzcXVhcmVyb290IDAuMDQxNyAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc1MyBzcXVhcmVyb290IDAuNDE4IC0+IDAuNjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzU0IHNxdWFyZXJvb3QgMC4wNDE4IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzU1IHNxdWFyZXJvb3QgMC40MTkgLT4gMC42NDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NTYgc3F1YXJlcm9vdCAwLjA0MTkgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NTcgc3F1YXJlcm9vdCAwLjQyMSAtPiAwLjY0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc1OCBzcXVhcmVyb290IDAuMDQyMSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc1OSBzcXVhcmVyb290IDAuNDIyIC0+IDAuNjUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzYwIHNxdWFyZXJvb3QgMC4wNDIyIC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzYxIHNxdWFyZXJvb3QgMC40MjMgLT4gMC42NTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NjIgc3F1YXJlcm9vdCAwLjA0MjMgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NjMgc3F1YXJlcm9vdCAwLjQyNCAtPiAwLjY1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc2NCBzcXVhcmVyb290IDAuMDQyNCAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc2NSBzcXVhcmVyb290IDAuNDI1IC0+IDAuNjUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzY2IHNxdWFyZXJvb3QgMC4wNDI1IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzY3IHNxdWFyZXJvb3QgMC40MjYgLT4gMC42NTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3Njggc3F1YXJlcm9vdCAwLjA0MjYgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3Njkgc3F1YXJlcm9vdCAwLjQyNyAtPiAwLjY1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc3MCBzcXVhcmVyb290IDAuMDQyNyAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc3MSBzcXVhcmVyb290IDAuNDI4IC0+IDAuNjU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzcyIHNxdWFyZXJvb3QgMC4wNDI4IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzczIHNxdWFyZXJvb3QgMC40MjkgLT4gMC42NTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NzQgc3F1YXJlcm9vdCAwLjA0MjkgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NzUgc3F1YXJlcm9vdCAwLjQzMSAtPiAwLjY1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc3NiBzcXVhcmVyb290IDAuMDQzMSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc3NyBzcXVhcmVyb290IDAuNDMyIC0+IDAuNjU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzc4IHNxdWFyZXJvb3QgMC4wNDMyIC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzc5IHNxdWFyZXJvb3QgMC40MzMgLT4gMC42NTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM3ODAgc3F1YXJlcm9vdCAwLjA0MzMgLT4gMC4yMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDM3ODEgc3F1YXJlcm9vdCAwLjQzNCAtPiAwLjY1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc4MiBzcXVhcmVyb290IDAuMDQzNCAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc4MyBzcXVhcmVyb290IDAuNDM1IC0+IDAuNjYwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzg0IHNxdWFyZXJvb3QgMC4wNDM1IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzg1IHNxdWFyZXJvb3QgMC40MzYgLT4gMC42NjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3ODYgc3F1YXJlcm9vdCAwLjA0MzYgLT4gMC4yMDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3ODcgc3F1YXJlcm9vdCAwLjQzNyAtPiAwLjY2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc4OCBzcXVhcmVyb290IDAuMDQzNyAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc4OSBzcXVhcmVyb290IDAuNDM4IC0+IDAuNjYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzkwIHNxdWFyZXJvb3QgMC4wNDM4IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzkxIHNxdWFyZXJvb3QgMC40MzkgLT4gMC42NjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3OTIgc3F1YXJlcm9vdCAwLjA0MzkgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3OTMgc3F1YXJlcm9vdCAwLjQ0MSAtPiAwLjY2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc5NCBzcXVhcmVyb290IDAuMDQ0MSAtPiAwLjIxCitzcXR4Mzc5NSBzcXVhcmVyb290IDAuNDQyIC0+IDAuNjY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzk2IHNxdWFyZXJvb3QgMC4wNDQyIC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzk3IHNxdWFyZXJvb3QgMC40NDMgLT4gMC42NjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3OTggc3F1YXJlcm9vdCAwLjA0NDMgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3OTkgc3F1YXJlcm9vdCAwLjQ0NCAtPiAwLjY2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgwMCBzcXVhcmVyb290IDAuMDQ0NCAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgwMSBzcXVhcmVyb290IDAuNDQ1IC0+IDAuNjY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODAyIHNxdWFyZXJvb3QgMC4wNDQ1IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODAzIHNxdWFyZXJvb3QgMC40NDYgLT4gMC42NjggIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MDQgc3F1YXJlcm9vdCAwLjA0NDYgLT4gMC4yMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MDUgc3F1YXJlcm9vdCAwLjQ0NyAtPiAwLjY2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgwNiBzcXVhcmVyb290IDAuMDQ0NyAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgwNyBzcXVhcmVyb290IDAuNDQ4IC0+IDAuNjY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODA4IHNxdWFyZXJvb3QgMC4wNDQ4IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODA5IHNxdWFyZXJvb3QgMC40NDkgLT4gMC42NzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MTAgc3F1YXJlcm9vdCAwLjA0NDkgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MTEgc3F1YXJlcm9vdCAwLjQ1MSAtPiAwLjY3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgxMiBzcXVhcmVyb290IDAuMDQ1MSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgxMyBzcXVhcmVyb290IDAuNDUyIC0+IDAuNjcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODE0IHNxdWFyZXJvb3QgMC4wNDUyIC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODE1IHNxdWFyZXJvb3QgMC40NTMgLT4gMC42NzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MTYgc3F1YXJlcm9vdCAwLjA0NTMgLT4gMC4yMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MTcgc3F1YXJlcm9vdCAwLjQ1NCAtPiAwLjY3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgxOCBzcXVhcmVyb290IDAuMDQ1NCAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgxOSBzcXVhcmVyb290IDAuNDU1IC0+IDAuNjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODIwIHNxdWFyZXJvb3QgMC4wNDU1IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODIxIHNxdWFyZXJvb3QgMC40NTYgLT4gMC42NzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MjIgc3F1YXJlcm9vdCAwLjA0NTYgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MjMgc3F1YXJlcm9vdCAwLjQ1NyAtPiAwLjY3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgyNCBzcXVhcmVyb290IDAuMDQ1NyAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgyNSBzcXVhcmVyb290IDAuNDU4IC0+IDAuNjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODI2IHNxdWFyZXJvb3QgMC4wNDU4IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODI3IHNxdWFyZXJvb3QgMC40NTkgLT4gMC42NzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4Mjggc3F1YXJlcm9vdCAwLjA0NTkgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4Mjkgc3F1YXJlcm9vdCAwLjQ2MSAtPiAwLjY3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgzMCBzcXVhcmVyb290IDAuMDQ2MSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgzMSBzcXVhcmVyb290IDAuNDYyIC0+IDAuNjgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODMyIHNxdWFyZXJvb3QgMC4wNDYyIC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODMzIHNxdWFyZXJvb3QgMC40NjMgLT4gMC42ODAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MzQgc3F1YXJlcm9vdCAwLjA0NjMgLT4gMC4yMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MzUgc3F1YXJlcm9vdCAwLjQ2NCAtPiAwLjY4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgzNiBzcXVhcmVyb290IDAuMDQ2NCAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgzNyBzcXVhcmVyb290IDAuNDY1IC0+IDAuNjgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODM4IHNxdWFyZXJvb3QgMC4wNDY1IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODM5IHNxdWFyZXJvb3QgMC40NjYgLT4gMC42ODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NDAgc3F1YXJlcm9vdCAwLjA0NjYgLT4gMC4yMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NDEgc3F1YXJlcm9vdCAwLjQ2NyAtPiAwLjY4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg0MiBzcXVhcmVyb290IDAuMDQ2NyAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg0MyBzcXVhcmVyb290IDAuNDY4IC0+IDAuNjg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODQ0IHNxdWFyZXJvb3QgMC4wNDY4IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODQ1IHNxdWFyZXJvb3QgMC40NjkgLT4gMC42ODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NDYgc3F1YXJlcm9vdCAwLjA0NjkgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NDcgc3F1YXJlcm9vdCAwLjQ3MSAtPiAwLjY4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg0OCBzcXVhcmVyb290IDAuMDQ3MSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg0OSBzcXVhcmVyb290IDAuNDcyIC0+IDAuNjg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODUwIHNxdWFyZXJvb3QgMC4wNDcyIC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODUxIHNxdWFyZXJvb3QgMC40NzMgLT4gMC42ODggIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NTIgc3F1YXJlcm9vdCAwLjA0NzMgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NTMgc3F1YXJlcm9vdCAwLjQ3NCAtPiAwLjY4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg1NCBzcXVhcmVyb290IDAuMDQ3NCAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg1NSBzcXVhcmVyb290IDAuNDc1IC0+IDAuNjg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODU2IHNxdWFyZXJvb3QgMC4wNDc1IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODU3IHNxdWFyZXJvb3QgMC40NzYgLT4gMC42OTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NTggc3F1YXJlcm9vdCAwLjA0NzYgLT4gMC4yMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NTkgc3F1YXJlcm9vdCAwLjQ3NyAtPiAwLjY5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg2MCBzcXVhcmVyb290IDAuMDQ3NyAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg2MSBzcXVhcmVyb290IDAuNDc4IC0+IDAuNjkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODYyIHNxdWFyZXJvb3QgMC4wNDc4IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODYzIHNxdWFyZXJvb3QgMC40NzkgLT4gMC42OTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NjQgc3F1YXJlcm9vdCAwLjA0NzkgLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NjUgc3F1YXJlcm9vdCAwLjQ4MSAtPiAwLjY5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg2NiBzcXVhcmVyb290IDAuMDQ4MSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg2NyBzcXVhcmVyb290IDAuNDgyIC0+IDAuNjk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODY4IHNxdWFyZXJvb3QgMC4wNDgyIC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODY5IHNxdWFyZXJvb3QgMC40ODMgLT4gMC42OTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NzAgc3F1YXJlcm9vdCAwLjA0ODMgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NzEgc3F1YXJlcm9vdCAwLjQ4NCAtPiAwLjY5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg3MiBzcXVhcmVyb290IDAuMDQ4NCAtPiAwLjIyCitzcXR4Mzg3MyBzcXVhcmVyb290IDAuNDg1IC0+IDAuNjk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODc0IHNxdWFyZXJvb3QgMC4wNDg1IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODc1IHNxdWFyZXJvb3QgMC40ODYgLT4gMC42OTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NzYgc3F1YXJlcm9vdCAwLjA0ODYgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4Nzcgc3F1YXJlcm9vdCAwLjQ4NyAtPiAwLjY5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg3OCBzcXVhcmVyb290IDAuMDQ4NyAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg3OSBzcXVhcmVyb290IDAuNDg4IC0+IDAuNjk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODgwIHNxdWFyZXJvb3QgMC4wNDg4IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODgxIHNxdWFyZXJvb3QgMC40ODkgLT4gMC42OTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4ODIgc3F1YXJlcm9vdCAwLjA0ODkgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4ODMgc3F1YXJlcm9vdCAwLjQ5MSAtPiAwLjcwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg4NCBzcXVhcmVyb290IDAuMDQ5MSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg4NSBzcXVhcmVyb290IDAuNDkyIC0+IDAuNzAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODg2IHNxdWFyZXJvb3QgMC4wNDkyIC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODg3IHNxdWFyZXJvb3QgMC40OTMgLT4gMC43MDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4ODggc3F1YXJlcm9vdCAwLjA0OTMgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4ODkgc3F1YXJlcm9vdCAwLjQ5NCAtPiAwLjcwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg5MCBzcXVhcmVyb290IDAuMDQ5NCAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg5MSBzcXVhcmVyb290IDAuNDk1IC0+IDAuNzA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODkyIHNxdWFyZXJvb3QgMC4wNDk1IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODkzIHNxdWFyZXJvb3QgMC40OTYgLT4gMC43MDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4OTQgc3F1YXJlcm9vdCAwLjA0OTYgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4OTUgc3F1YXJlcm9vdCAwLjQ5NyAtPiAwLjcwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg5NiBzcXVhcmVyb290IDAuMDQ5NyAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg5NyBzcXVhcmVyb290IDAuNDk4IC0+IDAuNzA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODk4IHNxdWFyZXJvb3QgMC4wNDk4IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODk5IHNxdWFyZXJvb3QgMC40OTkgLT4gMC43MDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MDAgc3F1YXJlcm9vdCAwLjA0OTkgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MDEgc3F1YXJlcm9vdCAwLjUwMSAtPiAwLjcwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkwMiBzcXVhcmVyb290IDAuMDUwMSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkwMyBzcXVhcmVyb290IDAuNTAyIC0+IDAuNzA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTA0IHNxdWFyZXJvb3QgMC4wNTAyIC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTA1IHNxdWFyZXJvb3QgMC41MDMgLT4gMC43MDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MDYgc3F1YXJlcm9vdCAwLjA1MDMgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MDcgc3F1YXJlcm9vdCAwLjUwNCAtPiAwLjcxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkwOCBzcXVhcmVyb290IDAuMDUwNCAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkwOSBzcXVhcmVyb290IDAuNTA1IC0+IDAuNzExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTEwIHNxdWFyZXJvb3QgMC4wNTA1IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTExIHNxdWFyZXJvb3QgMC41MDYgLT4gMC43MTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MTIgc3F1YXJlcm9vdCAwLjA1MDYgLT4gMC4yMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MTMgc3F1YXJlcm9vdCAwLjUwNyAtPiAwLjcxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkxNCBzcXVhcmVyb290IDAuMDUwNyAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkxNSBzcXVhcmVyb290IDAuNTA4IC0+IDAuNzEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTE2IHNxdWFyZXJvb3QgMC4wNTA4IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTE3IHNxdWFyZXJvb3QgMC41MDkgLT4gMC43MTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MTggc3F1YXJlcm9vdCAwLjA1MDkgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MTkgc3F1YXJlcm9vdCAwLjUxMSAtPiAwLjcxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkyMCBzcXVhcmVyb290IDAuMDUxMSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkyMSBzcXVhcmVyb290IDAuNTEyIC0+IDAuNzE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTIyIHNxdWFyZXJvb3QgMC4wNTEyIC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTIzIHNxdWFyZXJvb3QgMC41MTMgLT4gMC43MTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MjQgc3F1YXJlcm9vdCAwLjA1MTMgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MjUgc3F1YXJlcm9vdCAwLjUxNCAtPiAwLjcxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkyNiBzcXVhcmVyb290IDAuMDUxNCAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkyNyBzcXVhcmVyb290IDAuNTE1IC0+IDAuNzE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTI4IHNxdWFyZXJvb3QgMC4wNTE1IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTI5IHNxdWFyZXJvb3QgMC41MTYgLT4gMC43MTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MzAgc3F1YXJlcm9vdCAwLjA1MTYgLT4gMC4yMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MzEgc3F1YXJlcm9vdCAwLjUxNyAtPiAwLjcxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkzMiBzcXVhcmVyb290IDAuMDUxNyAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkzMyBzcXVhcmVyb290IDAuNTE4IC0+IDAuNzIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTM0IHNxdWFyZXJvb3QgMC4wNTE4IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTM1IHNxdWFyZXJvb3QgMC41MTkgLT4gMC43MjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MzYgc3F1YXJlcm9vdCAwLjA1MTkgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDM5Mzcgc3F1YXJlcm9vdCAwLjUyMSAtPiAwLjcyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkzOCBzcXVhcmVyb290IDAuMDUyMSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkzOSBzcXVhcmVyb290IDAuNTIyIC0+IDAuNzIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTQwIHNxdWFyZXJvb3QgMC4wNTIyIC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTQxIHNxdWFyZXJvb3QgMC41MjMgLT4gMC43MjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NDIgc3F1YXJlcm9vdCAwLjA1MjMgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NDMgc3F1YXJlcm9vdCAwLjUyNCAtPiAwLjcyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk0NCBzcXVhcmVyb290IDAuMDUyNCAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk0NSBzcXVhcmVyb290IDAuNTI1IC0+IDAuNzI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTQ2IHNxdWFyZXJvb3QgMC4wNTI1IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTQ3IHNxdWFyZXJvb3QgMC41MjYgLT4gMC43MjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NDggc3F1YXJlcm9vdCAwLjA1MjYgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NDkgc3F1YXJlcm9vdCAwLjUyNyAtPiAwLjcyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk1MCBzcXVhcmVyb290IDAuMDUyNyAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk1MSBzcXVhcmVyb290IDAuNTI4IC0+IDAuNzI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTUyIHNxdWFyZXJvb3QgMC4wNTI4IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTUzIHNxdWFyZXJvb3QgMC41MjkgLT4gMC43MjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NTQgc3F1YXJlcm9vdCAwLjA1MjkgLT4gMC4yMworc3F0eDM5NTUgc3F1YXJlcm9vdCAwLjUzMSAtPiAwLjcyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk1NiBzcXVhcmVyb290IDAuMDUzMSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk1NyBzcXVhcmVyb290IDAuNTMyIC0+IDAuNzI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTU4IHNxdWFyZXJvb3QgMC4wNTMyIC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTU5IHNxdWFyZXJvb3QgMC41MzMgLT4gMC43MzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NjAgc3F1YXJlcm9vdCAwLjA1MzMgLT4gMC4yMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NjEgc3F1YXJlcm9vdCAwLjUzNCAtPiAwLjczMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk2MiBzcXVhcmVyb290IDAuMDUzNCAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk2MyBzcXVhcmVyb290IDAuNTM1IC0+IDAuNzMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTY0IHNxdWFyZXJvb3QgMC4wNTM1IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTY1IHNxdWFyZXJvb3QgMC41MzYgLT4gMC43MzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NjYgc3F1YXJlcm9vdCAwLjA1MzYgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5Njcgc3F1YXJlcm9vdCAwLjUzNyAtPiAwLjczMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk2OCBzcXVhcmVyb290IDAuMDUzNyAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk2OSBzcXVhcmVyb290IDAuNTM4IC0+IDAuNzMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTcwIHNxdWFyZXJvb3QgMC4wNTM4IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTcxIHNxdWFyZXJvb3QgMC41MzkgLT4gMC43MzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NzIgc3F1YXJlcm9vdCAwLjA1MzkgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NzMgc3F1YXJlcm9vdCAwLjU0MSAtPiAwLjczNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk3NCBzcXVhcmVyb290IDAuMDU0MSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk3NSBzcXVhcmVyb290IDAuNTQyIC0+IDAuNzM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTc2IHNxdWFyZXJvb3QgMC4wNTQyIC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTc3IHNxdWFyZXJvb3QgMC41NDMgLT4gMC43MzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5Nzggc3F1YXJlcm9vdCAwLjA1NDMgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5Nzkgc3F1YXJlcm9vdCAwLjU0NCAtPiAwLjczOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk4MCBzcXVhcmVyb290IDAuMDU0NCAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk4MSBzcXVhcmVyb290IDAuNTQ1IC0+IDAuNzM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTgyIHNxdWFyZXJvb3QgMC4wNTQ1IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTgzIHNxdWFyZXJvb3QgMC41NDYgLT4gMC43MzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5ODQgc3F1YXJlcm9vdCAwLjA1NDYgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5ODUgc3F1YXJlcm9vdCAwLjU0NyAtPiAwLjc0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk4NiBzcXVhcmVyb290IDAuMDU0NyAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk4NyBzcXVhcmVyb290IDAuNTQ4IC0+IDAuNzQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTg4IHNxdWFyZXJvb3QgMC4wNTQ4IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTg5IHNxdWFyZXJvb3QgMC41NDkgLT4gMC43NDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5OTAgc3F1YXJlcm9vdCAwLjA1NDkgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5OTEgc3F1YXJlcm9vdCAwLjU1MSAtPiAwLjc0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk5MiBzcXVhcmVyb290IDAuMDU1MSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk5MyBzcXVhcmVyb290IDAuNTUyIC0+IDAuNzQzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTk0IHNxdWFyZXJvb3QgMC4wNTUyIC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTk1IHNxdWFyZXJvb3QgMC41NTMgLT4gMC43NDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5OTYgc3F1YXJlcm9vdCAwLjA1NTMgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5OTcgc3F1YXJlcm9vdCAwLjU1NCAtPiAwLjc0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk5OCBzcXVhcmVyb290IDAuMDU1NCAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk5OSBzcXVhcmVyb290IDAuNTU1IC0+IDAuNzQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDAwIHNxdWFyZXJvb3QgMC4wNTU1IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDAxIHNxdWFyZXJvb3QgMC41NTYgLT4gMC43NDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMDIgc3F1YXJlcm9vdCAwLjA1NTYgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMDMgc3F1YXJlcm9vdCAwLjU1NyAtPiAwLjc0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAwNCBzcXVhcmVyb290IDAuMDU1NyAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAwNSBzcXVhcmVyb290IDAuNTU4IC0+IDAuNzQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDA2IHNxdWFyZXJvb3QgMC4wNTU4IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDA3IHNxdWFyZXJvb3QgMC41NTkgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMDggc3F1YXJlcm9vdCAwLjA1NTkgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMDkgc3F1YXJlcm9vdCAwLjU2MSAtPiAwLjc0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAxMCBzcXVhcmVyb290IDAuMDU2MSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAxMSBzcXVhcmVyb290IDAuNTYyIC0+IDAuNzUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDEyIHNxdWFyZXJvb3QgMC4wNTYyIC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDEzIHNxdWFyZXJvb3QgMC41NjMgLT4gMC43NTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMTQgc3F1YXJlcm9vdCAwLjA1NjMgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMTUgc3F1YXJlcm9vdCAwLjU2NCAtPiAwLjc1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAxNiBzcXVhcmVyb290IDAuMDU2NCAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAxNyBzcXVhcmVyb290IDAuNTY1IC0+IDAuNzUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDE4IHNxdWFyZXJvb3QgMC4wNTY1IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDE5IHNxdWFyZXJvb3QgMC41NjYgLT4gMC43NTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMjAgc3F1YXJlcm9vdCAwLjA1NjYgLT4gMC4yMzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMjEgc3F1YXJlcm9vdCAwLjU2NyAtPiAwLjc1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAyMiBzcXVhcmVyb290IDAuMDU2NyAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAyMyBzcXVhcmVyb290IDAuNTY4IC0+IDAuNzU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDI0IHNxdWFyZXJvb3QgMC4wNTY4IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDI1IHNxdWFyZXJvb3QgMC41NjkgLT4gMC43NTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMjYgc3F1YXJlcm9vdCAwLjA1NjkgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMjcgc3F1YXJlcm9vdCAwLjU3MSAtPiAwLjc1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAyOCBzcXVhcmVyb290IDAuMDU3MSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAyOSBzcXVhcmVyb290IDAuNTcyIC0+IDAuNzU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDMwIHNxdWFyZXJvb3QgMC4wNTcyIC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDMxIHNxdWFyZXJvb3QgMC41NzMgLT4gMC43NTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMzIgc3F1YXJlcm9vdCAwLjA1NzMgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMzMgc3F1YXJlcm9vdCAwLjU3NCAtPiAwLjc1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAzNCBzcXVhcmVyb290IDAuMDU3NCAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAzNSBzcXVhcmVyb290IDAuNTc1IC0+IDAuNzU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDM2IHNxdWFyZXJvb3QgMC4wNTc1IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDM3IHNxdWFyZXJvb3QgMC41NzYgLT4gMC43NTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMzggc3F1YXJlcm9vdCAwLjA1NzYgLT4gMC4yNAorc3F0eDQwMzkgc3F1YXJlcm9vdCAwLjU3NyAtPiAwLjc2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA0MCBzcXVhcmVyb290IDAuMDU3NyAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA0MSBzcXVhcmVyb290IDAuNTc4IC0+IDAuNzYwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDQyIHNxdWFyZXJvb3QgMC4wNTc4IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDQzIHNxdWFyZXJvb3QgMC41NzkgLT4gMC43NjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNDQgc3F1YXJlcm9vdCAwLjA1NzkgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNDUgc3F1YXJlcm9vdCAwLjU4MSAtPiAwLjc2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA0NiBzcXVhcmVyb290IDAuMDU4MSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA0NyBzcXVhcmVyb290IDAuNTgyIC0+IDAuNzYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDQ4IHNxdWFyZXJvb3QgMC4wNTgyIC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDQ5IHNxdWFyZXJvb3QgMC41ODMgLT4gMC43NjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNTAgc3F1YXJlcm9vdCAwLjA1ODMgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNTEgc3F1YXJlcm9vdCAwLjU4NCAtPiAwLjc2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA1MiBzcXVhcmVyb290IDAuMDU4NCAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA1MyBzcXVhcmVyb290IDAuNTg1IC0+IDAuNzY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDU0IHNxdWFyZXJvb3QgMC4wNTg1IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDU1IHNxdWFyZXJvb3QgMC41ODYgLT4gMC43NjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNTYgc3F1YXJlcm9vdCAwLjA1ODYgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNTcgc3F1YXJlcm9vdCAwLjU4NyAtPiAwLjc2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA1OCBzcXVhcmVyb290IDAuMDU4NyAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA1OSBzcXVhcmVyb290IDAuNTg4IC0+IDAuNzY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDYwIHNxdWFyZXJvb3QgMC4wNTg4IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDYxIHNxdWFyZXJvb3QgMC41ODkgLT4gMC43NjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNjIgc3F1YXJlcm9vdCAwLjA1ODkgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNjMgc3F1YXJlcm9vdCAwLjU5MSAtPiAwLjc2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA2NCBzcXVhcmVyb290IDAuMDU5MSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA2NSBzcXVhcmVyb290IDAuNTkyIC0+IDAuNzY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDY2IHNxdWFyZXJvb3QgMC4wNTkyIC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDY3IHNxdWFyZXJvb3QgMC41OTMgLT4gMC43NzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNjggc3F1YXJlcm9vdCAwLjA1OTMgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNjkgc3F1YXJlcm9vdCAwLjU5NCAtPiAwLjc3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA3MCBzcXVhcmVyb290IDAuMDU5NCAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA3MSBzcXVhcmVyb290IDAuNTk1IC0+IDAuNzcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDcyIHNxdWFyZXJvb3QgMC4wNTk1IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDczIHNxdWFyZXJvb3QgMC41OTYgLT4gMC43NzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNzQgc3F1YXJlcm9vdCAwLjA1OTYgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNzUgc3F1YXJlcm9vdCAwLjU5NyAtPiAwLjc3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA3NiBzcXVhcmVyb290IDAuMDU5NyAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA3NyBzcXVhcmVyb290IDAuNTk4IC0+IDAuNzczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDc4IHNxdWFyZXJvb3QgMC4wNTk4IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDc5IHNxdWFyZXJvb3QgMC41OTkgLT4gMC43NzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwODAgc3F1YXJlcm9vdCAwLjA1OTkgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwODEgc3F1YXJlcm9vdCAwLjYwMSAtPiAwLjc3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA4MiBzcXVhcmVyb290IDAuMDYwMSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA4MyBzcXVhcmVyb290IDAuNjAyIC0+IDAuNzc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDg0IHNxdWFyZXJvb3QgMC4wNjAyIC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDg1IHNxdWFyZXJvb3QgMC42MDMgLT4gMC43NzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwODYgc3F1YXJlcm9vdCAwLjA2MDMgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwODcgc3F1YXJlcm9vdCAwLjYwNCAtPiAwLjc3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA4OCBzcXVhcmVyb290IDAuMDYwNCAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA4OSBzcXVhcmVyb290IDAuNjA1IC0+IDAuNzc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDkwIHNxdWFyZXJvb3QgMC4wNjA1IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDkxIHNxdWFyZXJvb3QgMC42MDYgLT4gMC43NzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQwOTIgc3F1YXJlcm9vdCAwLjA2MDYgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwOTMgc3F1YXJlcm9vdCAwLjYwNyAtPiAwLjc3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA5NCBzcXVhcmVyb290IDAuMDYwNyAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA5NSBzcXVhcmVyb290IDAuNjA4IC0+IDAuNzgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDk2IHNxdWFyZXJvb3QgMC4wNjA4IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDk3IHNxdWFyZXJvb3QgMC42MDkgLT4gMC43ODAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwOTggc3F1YXJlcm9vdCAwLjA2MDkgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwOTkgc3F1YXJlcm9vdCAwLjYxMSAtPiAwLjc4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEwMCBzcXVhcmVyb290IDAuMDYxMSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEwMSBzcXVhcmVyb290IDAuNjEyIC0+IDAuNzgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTAyIHNxdWFyZXJvb3QgMC4wNjEyIC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTAzIHNxdWFyZXJvb3QgMC42MTMgLT4gMC43ODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMDQgc3F1YXJlcm9vdCAwLjA2MTMgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMDUgc3F1YXJlcm9vdCAwLjYxNCAtPiAwLjc4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEwNiBzcXVhcmVyb290IDAuMDYxNCAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEwNyBzcXVhcmVyb290IDAuNjE1IC0+IDAuNzg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTA4IHNxdWFyZXJvb3QgMC4wNjE1IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTA5IHNxdWFyZXJvb3QgMC42MTYgLT4gMC43ODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMTAgc3F1YXJlcm9vdCAwLjA2MTYgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMTEgc3F1YXJlcm9vdCAwLjYxNyAtPiAwLjc4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDExMiBzcXVhcmVyb290IDAuMDYxNyAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDExMyBzcXVhcmVyb290IDAuNjE4IC0+IDAuNzg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTE0IHNxdWFyZXJvb3QgMC4wNjE4IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTE1IHNxdWFyZXJvb3QgMC42MTkgLT4gMC43ODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMTYgc3F1YXJlcm9vdCAwLjA2MTkgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMTcgc3F1YXJlcm9vdCAwLjYyMSAtPiAwLjc4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDExOCBzcXVhcmVyb290IDAuMDYyMSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDExOSBzcXVhcmVyb290IDAuNjIyIC0+IDAuNzg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTIwIHNxdWFyZXJvb3QgMC4wNjIyIC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTIxIHNxdWFyZXJvb3QgMC42MjMgLT4gMC43ODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMjIgc3F1YXJlcm9vdCAwLjA2MjMgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMjMgc3F1YXJlcm9vdCAwLjYyNCAtPiAwLjc5MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEyNCBzcXVhcmVyb290IDAuMDYyNCAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEyNSBzcXVhcmVyb290IDAuNjI1IC0+IDAuNzkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTI2IHNxdWFyZXJvb3QgMC4wNjI1IC0+IDAuMjUKK3NxdHg0MTI3IHNxdWFyZXJvb3QgMC42MjYgLT4gMC43OTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMjggc3F1YXJlcm9vdCAwLjA2MjYgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMjkgc3F1YXJlcm9vdCAwLjYyNyAtPiAwLjc5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEzMCBzcXVhcmVyb290IDAuMDYyNyAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEzMSBzcXVhcmVyb290IDAuNjI4IC0+IDAuNzkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTMyIHNxdWFyZXJvb3QgMC4wNjI4IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTMzIHNxdWFyZXJvb3QgMC42MjkgLT4gMC43OTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMzQgc3F1YXJlcm9vdCAwLjA2MjkgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMzUgc3F1YXJlcm9vdCAwLjYzMSAtPiAwLjc5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEzNiBzcXVhcmVyb290IDAuMDYzMSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEzNyBzcXVhcmVyb290IDAuNjMyIC0+IDAuNzk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTM4IHNxdWFyZXJvb3QgMC4wNjMyIC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTM5IHNxdWFyZXJvb3QgMC42MzMgLT4gMC43OTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNDAgc3F1YXJlcm9vdCAwLjA2MzMgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNDEgc3F1YXJlcm9vdCAwLjYzNCAtPiAwLjc5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE0MiBzcXVhcmVyb290IDAuMDYzNCAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE0MyBzcXVhcmVyb290IDAuNjM1IC0+IDAuNzk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTQ0IHNxdWFyZXJvb3QgMC4wNjM1IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTQ1IHNxdWFyZXJvb3QgMC42MzYgLT4gMC43OTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNDYgc3F1YXJlcm9vdCAwLjA2MzYgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNDcgc3F1YXJlcm9vdCAwLjYzNyAtPiAwLjc5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE0OCBzcXVhcmVyb290IDAuMDYzNyAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE0OSBzcXVhcmVyb290IDAuNjM4IC0+IDAuNzk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTUwIHNxdWFyZXJvb3QgMC4wNjM4IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTUxIHNxdWFyZXJvb3QgMC42MzkgLT4gMC43OTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNTIgc3F1YXJlcm9vdCAwLjA2MzkgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNTMgc3F1YXJlcm9vdCAwLjY0MSAtPiAwLjgwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE1NCBzcXVhcmVyb290IDAuMDY0MSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE1NSBzcXVhcmVyb290IDAuNjQyIC0+IDAuODAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTU2IHNxdWFyZXJvb3QgMC4wNjQyIC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTU3IHNxdWFyZXJvb3QgMC42NDMgLT4gMC44MDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNTggc3F1YXJlcm9vdCAwLjA2NDMgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNTkgc3F1YXJlcm9vdCAwLjY0NCAtPiAwLjgwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE2MCBzcXVhcmVyb290IDAuMDY0NCAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE2MSBzcXVhcmVyb290IDAuNjQ1IC0+IDAuODAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTYyIHNxdWFyZXJvb3QgMC4wNjQ1IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTYzIHNxdWFyZXJvb3QgMC42NDYgLT4gMC44MDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNjQgc3F1YXJlcm9vdCAwLjA2NDYgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNjUgc3F1YXJlcm9vdCAwLjY0NyAtPiAwLjgwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE2NiBzcXVhcmVyb290IDAuMDY0NyAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE2NyBzcXVhcmVyb290IDAuNjQ4IC0+IDAuODA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTY4IHNxdWFyZXJvb3QgMC4wNjQ4IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTY5IHNxdWFyZXJvb3QgMC42NDkgLT4gMC44MDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNzAgc3F1YXJlcm9vdCAwLjA2NDkgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNzEgc3F1YXJlcm9vdCAwLjY1MSAtPiAwLjgwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE3MiBzcXVhcmVyb290IDAuMDY1MSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE3MyBzcXVhcmVyb290IDAuNjUyIC0+IDAuODA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTc0IHNxdWFyZXJvb3QgMC4wNjUyIC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTc1IHNxdWFyZXJvb3QgMC42NTMgLT4gMC44MDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNzYgc3F1YXJlcm9vdCAwLjA2NTMgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNzcgc3F1YXJlcm9vdCAwLjY1NCAtPiAwLjgwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE3OCBzcXVhcmVyb290IDAuMDY1NCAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE3OSBzcXVhcmVyb290IDAuNjU1IC0+IDAuODA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTgwIHNxdWFyZXJvb3QgMC4wNjU1IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTgxIHNxdWFyZXJvb3QgMC42NTYgLT4gMC44MTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxODIgc3F1YXJlcm9vdCAwLjA2NTYgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxODMgc3F1YXJlcm9vdCAwLjY1NyAtPiAwLjgxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE4NCBzcXVhcmVyb290IDAuMDY1NyAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE4NSBzcXVhcmVyb290IDAuNjU4IC0+IDAuODExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTg2IHNxdWFyZXJvb3QgMC4wNjU4IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTg3IHNxdWFyZXJvb3QgMC42NTkgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxODggc3F1YXJlcm9vdCAwLjA2NTkgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxODkgc3F1YXJlcm9vdCAwLjY2MSAtPiAwLjgxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE5MCBzcXVhcmVyb290IDAuMDY2MSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE5MSBzcXVhcmVyb290IDAuNjYyIC0+IDAuODE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTkyIHNxdWFyZXJvb3QgMC4wNjYyIC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTkzIHNxdWFyZXJvb3QgMC42NjMgLT4gMC44MTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxOTQgc3F1YXJlcm9vdCAwLjA2NjMgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxOTUgc3F1YXJlcm9vdCAwLjY2NCAtPiAwLjgxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE5NiBzcXVhcmVyb290IDAuMDY2NCAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE5NyBzcXVhcmVyb290IDAuNjY1IC0+IDAuODE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTk4IHNxdWFyZXJvb3QgMC4wNjY1IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTk5IHNxdWFyZXJvb3QgMC42NjYgLT4gMC44MTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMDAgc3F1YXJlcm9vdCAwLjA2NjYgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMDEgc3F1YXJlcm9vdCAwLjY2NyAtPiAwLjgxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIwMiBzcXVhcmVyb290IDAuMDY2NyAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIwMyBzcXVhcmVyb290IDAuNjY4IC0+IDAuODE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjA0IHNxdWFyZXJvb3QgMC4wNjY4IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjA1IHNxdWFyZXJvb3QgMC42NjkgLT4gMC44MTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMDYgc3F1YXJlcm9vdCAwLjA2NjkgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMDcgc3F1YXJlcm9vdCAwLjY3MSAtPiAwLjgxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIwOCBzcXVhcmVyb290IDAuMDY3MSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIwOSBzcXVhcmVyb290IDAuNjcyIC0+IDAuODIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjEwIHNxdWFyZXJvb3QgMC4wNjcyIC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjExIHNxdWFyZXJvb3QgMC42NzMgLT4gMC44MjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMTIgc3F1YXJlcm9vdCAwLjA2NzMgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMTMgc3F1YXJlcm9vdCAwLjY3NCAtPiAwLjgyMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIxNCBzcXVhcmVyb290IDAuMDY3NCAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIxNSBzcXVhcmVyb290IDAuNjc1IC0+IDAuODIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjE2IHNxdWFyZXJvb3QgMC4wNjc1IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjE3IHNxdWFyZXJvb3QgMC42NzYgLT4gMC44MjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMTggc3F1YXJlcm9vdCAwLjA2NzYgLT4gMC4yNgorc3F0eDQyMTkgc3F1YXJlcm9vdCAwLjY3NyAtPiAwLjgyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIyMCBzcXVhcmVyb290IDAuMDY3NyAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIyMSBzcXVhcmVyb290IDAuNjc4IC0+IDAuODIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjIyIHNxdWFyZXJvb3QgMC4wNjc4IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjIzIHNxdWFyZXJvb3QgMC42NzkgLT4gMC44MjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMjQgc3F1YXJlcm9vdCAwLjA2NzkgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMjUgc3F1YXJlcm9vdCAwLjY4MSAtPiAwLjgyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIyNiBzcXVhcmVyb290IDAuMDY4MSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIyNyBzcXVhcmVyb290IDAuNjgyIC0+IDAuODI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjI4IHNxdWFyZXJvb3QgMC4wNjgyIC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjI5IHNxdWFyZXJvb3QgMC42ODMgLT4gMC44MjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMzAgc3F1YXJlcm9vdCAwLjA2ODMgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMzEgc3F1YXJlcm9vdCAwLjY4NCAtPiAwLjgyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIzMiBzcXVhcmVyb290IDAuMDY4NCAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIzMyBzcXVhcmVyb290IDAuNjg1IC0+IDAuODI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjM0IHNxdWFyZXJvb3QgMC4wNjg1IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjM1IHNxdWFyZXJvb3QgMC42ODYgLT4gMC44MjggIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMzYgc3F1YXJlcm9vdCAwLjA2ODYgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMzcgc3F1YXJlcm9vdCAwLjY4NyAtPiAwLjgyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIzOCBzcXVhcmVyb290IDAuMDY4NyAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIzOSBzcXVhcmVyb290IDAuNjg4IC0+IDAuODI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjQwIHNxdWFyZXJvb3QgMC4wNjg4IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjQxIHNxdWFyZXJvb3QgMC42ODkgLT4gMC44MzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNDIgc3F1YXJlcm9vdCAwLjA2ODkgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNDMgc3F1YXJlcm9vdCAwLjY5MSAtPiAwLjgzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI0NCBzcXVhcmVyb290IDAuMDY5MSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI0NSBzcXVhcmVyb290IDAuNjkyIC0+IDAuODMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjQ2IHNxdWFyZXJvb3QgMC4wNjkyIC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjQ3IHNxdWFyZXJvb3QgMC42OTMgLT4gMC44MzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNDggc3F1YXJlcm9vdCAwLjA2OTMgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNDkgc3F1YXJlcm9vdCAwLjY5NCAtPiAwLjgzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI1MCBzcXVhcmVyb290IDAuMDY5NCAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI1MSBzcXVhcmVyb290IDAuNjk1IC0+IDAuODM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjUyIHNxdWFyZXJvb3QgMC4wNjk1IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjUzIHNxdWFyZXJvb3QgMC42OTYgLT4gMC44MzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNTQgc3F1YXJlcm9vdCAwLjA2OTYgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNTUgc3F1YXJlcm9vdCAwLjY5NyAtPiAwLjgzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI1NiBzcXVhcmVyb290IDAuMDY5NyAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI1NyBzcXVhcmVyb290IDAuNjk4IC0+IDAuODM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjU4IHNxdWFyZXJvb3QgMC4wNjk4IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjU5IHNxdWFyZXJvb3QgMC42OTkgLT4gMC44MzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNjAgc3F1YXJlcm9vdCAwLjA2OTkgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNjEgc3F1YXJlcm9vdCAwLjcwMSAtPiAwLjgzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI2MiBzcXVhcmVyb290IDAuMDcwMSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI2MyBzcXVhcmVyb290IDAuNzAyIC0+IDAuODM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjY0IHNxdWFyZXJvb3QgMC4wNzAyIC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjY1IHNxdWFyZXJvb3QgMC43MDMgLT4gMC44MzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNjYgc3F1YXJlcm9vdCAwLjA3MDMgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNjcgc3F1YXJlcm9vdCAwLjcwNCAtPiAwLjgzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI2OCBzcXVhcmVyb290IDAuMDcwNCAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI2OSBzcXVhcmVyb290IDAuNzA1IC0+IDAuODQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjcwIHNxdWFyZXJvb3QgMC4wNzA1IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjcxIHNxdWFyZXJvb3QgMC43MDYgLT4gMC44NDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNzIgc3F1YXJlcm9vdCAwLjA3MDYgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNzMgc3F1YXJlcm9vdCAwLjcwNyAtPiAwLjg0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI3NCBzcXVhcmVyb290IDAuMDcwNyAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI3NSBzcXVhcmVyb290IDAuNzA4IC0+IDAuODQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjc2IHNxdWFyZXJvb3QgMC4wNzA4IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjc3IHNxdWFyZXJvb3QgMC43MDkgLT4gMC44NDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNzggc3F1YXJlcm9vdCAwLjA3MDkgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNzkgc3F1YXJlcm9vdCAwLjcxMSAtPiAwLjg0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI4MCBzcXVhcmVyb290IDAuMDcxMSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI4MSBzcXVhcmVyb290IDAuNzEyIC0+IDAuODQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjgyIHNxdWFyZXJvb3QgMC4wNzEyIC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjgzIHNxdWFyZXJvb3QgMC43MTMgLT4gMC44NDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyODQgc3F1YXJlcm9vdCAwLjA3MTMgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyODUgc3F1YXJlcm9vdCAwLjcxNCAtPiAwLjg0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI4NiBzcXVhcmVyb290IDAuMDcxNCAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI4NyBzcXVhcmVyb290IDAuNzE1IC0+IDAuODQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjg4IHNxdWFyZXJvb3QgMC4wNzE1IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjg5IHNxdWFyZXJvb3QgMC43MTYgLT4gMC44NDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyOTAgc3F1YXJlcm9vdCAwLjA3MTYgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAorc3F0eDQyOTEgc3F1YXJlcm9vdCAwLjcxNyAtPiAwLjg0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI5MiBzcXVhcmVyb290IDAuMDcxNyAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI5MyBzcXVhcmVyb290IDAuNzE4IC0+IDAuODQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjk0IHNxdWFyZXJvb3QgMC4wNzE4IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjk1IHNxdWFyZXJvb3QgMC43MTkgLT4gMC44NDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQyOTYgc3F1YXJlcm9vdCAwLjA3MTkgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAorc3F0eDQyOTcgc3F1YXJlcm9vdCAwLjcyMSAtPiAwLjg0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI5OCBzcXVhcmVyb290IDAuMDcyMSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI5OSBzcXVhcmVyb290IDAuNzIyIC0+IDAuODUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzAwIHNxdWFyZXJvb3QgMC4wNzIyIC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzAxIHNxdWFyZXJvb3QgMC43MjMgLT4gMC44NTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMDIgc3F1YXJlcm9vdCAwLjA3MjMgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMDMgc3F1YXJlcm9vdCAwLjcyNCAtPiAwLjg1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMwNCBzcXVhcmVyb290IDAuMDcyNCAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMwNSBzcXVhcmVyb290IDAuNzI1IC0+IDAuODUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzA2IHNxdWFyZXJvb3QgMC4wNzI1IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzA3IHNxdWFyZXJvb3QgMC43MjYgLT4gMC44NTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMDggc3F1YXJlcm9vdCAwLjA3MjYgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMDkgc3F1YXJlcm9vdCAwLjcyNyAtPiAwLjg1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMxMCBzcXVhcmVyb290IDAuMDcyNyAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMxMSBzcXVhcmVyb290IDAuNzI4IC0+IDAuODUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzEyIHNxdWFyZXJvb3QgMC4wNzI4IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzEzIHNxdWFyZXJvb3QgMC43MjkgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMTQgc3F1YXJlcm9vdCAwLjA3MjkgLT4gMC4yNworc3F0eDQzMTUgc3F1YXJlcm9vdCAwLjczMSAtPiAwLjg1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMxNiBzcXVhcmVyb290IDAuMDczMSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMxNyBzcXVhcmVyb290IDAuNzMyIC0+IDAuODU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzE4IHNxdWFyZXJvb3QgMC4wNzMyIC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzE5IHNxdWFyZXJvb3QgMC43MzMgLT4gMC44NTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMjAgc3F1YXJlcm9vdCAwLjA3MzMgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMjEgc3F1YXJlcm9vdCAwLjczNCAtPiAwLjg1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMyMiBzcXVhcmVyb290IDAuMDczNCAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMyMyBzcXVhcmVyb290IDAuNzM1IC0+IDAuODU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzI0IHNxdWFyZXJvb3QgMC4wNzM1IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzI1IHNxdWFyZXJvb3QgMC43MzYgLT4gMC44NTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMjYgc3F1YXJlcm9vdCAwLjA3MzYgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMjcgc3F1YXJlcm9vdCAwLjczNyAtPiAwLjg1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMyOCBzcXVhcmVyb290IDAuMDczNyAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMyOSBzcXVhcmVyb290IDAuNzM4IC0+IDAuODU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzMwIHNxdWFyZXJvb3QgMC4wNzM4IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzMxIHNxdWFyZXJvb3QgMC43MzkgLT4gMC44NjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMzIgc3F1YXJlcm9vdCAwLjA3MzkgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMzMgc3F1YXJlcm9vdCAwLjc0MSAtPiAwLjg2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMzNCBzcXVhcmVyb290IDAuMDc0MSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMzNSBzcXVhcmVyb290IDAuNzQyIC0+IDAuODYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzM2IHNxdWFyZXJvb3QgMC4wNzQyIC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzM3IHNxdWFyZXJvb3QgMC43NDMgLT4gMC44NjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMzggc3F1YXJlcm9vdCAwLjA3NDMgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMzkgc3F1YXJlcm9vdCAwLjc0NCAtPiAwLjg2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM0MCBzcXVhcmVyb290IDAuMDc0NCAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM0MSBzcXVhcmVyb290IDAuNzQ1IC0+IDAuODYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzQyIHNxdWFyZXJvb3QgMC4wNzQ1IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzQzIHNxdWFyZXJvb3QgMC43NDYgLT4gMC44NjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNDQgc3F1YXJlcm9vdCAwLjA3NDYgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNDUgc3F1YXJlcm9vdCAwLjc0NyAtPiAwLjg2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM0NiBzcXVhcmVyb290IDAuMDc0NyAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM0NyBzcXVhcmVyb290IDAuNzQ4IC0+IDAuODY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzQ4IHNxdWFyZXJvb3QgMC4wNzQ4IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzQ5IHNxdWFyZXJvb3QgMC43NDkgLT4gMC44NjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNTAgc3F1YXJlcm9vdCAwLjA3NDkgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNTEgc3F1YXJlcm9vdCAwLjc1MSAtPiAwLjg2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM1MiBzcXVhcmVyb290IDAuMDc1MSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM1MyBzcXVhcmVyb290IDAuNzUyIC0+IDAuODY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzU0IHNxdWFyZXJvb3QgMC4wNzUyIC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzU1IHNxdWFyZXJvb3QgMC43NTMgLT4gMC44NjggIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNTYgc3F1YXJlcm9vdCAwLjA3NTMgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNTcgc3F1YXJlcm9vdCAwLjc1NCAtPiAwLjg2OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM1OCBzcXVhcmVyb290IDAuMDc1NCAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM1OSBzcXVhcmVyb290IDAuNzU1IC0+IDAuODY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzYwIHNxdWFyZXJvb3QgMC4wNzU1IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzYxIHNxdWFyZXJvb3QgMC43NTYgLT4gMC44NjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNjIgc3F1YXJlcm9vdCAwLjA3NTYgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNjMgc3F1YXJlcm9vdCAwLjc1NyAtPiAwLjg3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM2NCBzcXVhcmVyb290IDAuMDc1NyAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM2NSBzcXVhcmVyb290IDAuNzU4IC0+IDAuODcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzY2IHNxdWFyZXJvb3QgMC4wNzU4IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzY3IHNxdWFyZXJvb3QgMC43NTkgLT4gMC44NzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNjggc3F1YXJlcm9vdCAwLjA3NTkgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNjkgc3F1YXJlcm9vdCAwLjc2MSAtPiAwLjg3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM3MCBzcXVhcmVyb290IDAuMDc2MSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM3MSBzcXVhcmVyb290IDAuNzYyIC0+IDAuODczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzcyIHNxdWFyZXJvb3QgMC4wNzYyIC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzczIHNxdWFyZXJvb3QgMC43NjMgLT4gMC44NzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNzQgc3F1YXJlcm9vdCAwLjA3NjMgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNzUgc3F1YXJlcm9vdCAwLjc2NCAtPiAwLjg3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM3NiBzcXVhcmVyb290IDAuMDc2NCAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM3NyBzcXVhcmVyb290IDAuNzY1IC0+IDAuODc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzc4IHNxdWFyZXJvb3QgMC4wNzY1IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzc5IHNxdWFyZXJvb3QgMC43NjYgLT4gMC44NzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzODAgc3F1YXJlcm9vdCAwLjA3NjYgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzODEgc3F1YXJlcm9vdCAwLjc2NyAtPiAwLjg3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM4MiBzcXVhcmVyb290IDAuMDc2NyAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM4MyBzcXVhcmVyb290IDAuNzY4IC0+IDAuODc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzg0IHNxdWFyZXJvb3QgMC4wNzY4IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzg1IHNxdWFyZXJvb3QgMC43NjkgLT4gMC44NzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzODYgc3F1YXJlcm9vdCAwLjA3NjkgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzODcgc3F1YXJlcm9vdCAwLjc3MSAtPiAwLjg3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM4OCBzcXVhcmVyb290IDAuMDc3MSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM4OSBzcXVhcmVyb290IDAuNzcyIC0+IDAuODc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzkwIHNxdWFyZXJvb3QgMC4wNzcyIC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzkxIHNxdWFyZXJvb3QgMC43NzMgLT4gMC44NzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzOTIgc3F1YXJlcm9vdCAwLjA3NzMgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQzOTMgc3F1YXJlcm9vdCAwLjc3NCAtPiAwLjg4MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM5NCBzcXVhcmVyb290IDAuMDc3NCAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM5NSBzcXVhcmVyb290IDAuNzc1IC0+IDAuODgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzk2IHNxdWFyZXJvb3QgMC4wNzc1IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzk3IHNxdWFyZXJvb3QgMC43NzYgLT4gMC44ODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzOTggc3F1YXJlcm9vdCAwLjA3NzYgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzOTkgc3F1YXJlcm9vdCAwLjc3NyAtPiAwLjg4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQwMCBzcXVhcmVyb290IDAuMDc3NyAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQwMSBzcXVhcmVyb290IDAuNzc4IC0+IDAuODgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDAyIHNxdWFyZXJvb3QgMC4wNzc4IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDAzIHNxdWFyZXJvb3QgMC43NzkgLT4gMC44ODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MDQgc3F1YXJlcm9vdCAwLjA3NzkgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MDUgc3F1YXJlcm9vdCAwLjc4MSAtPiAwLjg4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQwNiBzcXVhcmVyb290IDAuMDc4MSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQwNyBzcXVhcmVyb290IDAuNzgyIC0+IDAuODg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDA4IHNxdWFyZXJvb3QgMC4wNzgyIC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDA5IHNxdWFyZXJvb3QgMC43ODMgLT4gMC44ODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MTAgc3F1YXJlcm9vdCAwLjA3ODMgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MTEgc3F1YXJlcm9vdCAwLjc4NCAtPiAwLjg4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQxMiBzcXVhcmVyb290IDAuMDc4NCAtPiAwLjI4CitzcXR4NDQxMyBzcXVhcmVyb290IDAuNzg1IC0+IDAuODg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDE0IHNxdWFyZXJvb3QgMC4wNzg1IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDE1IHNxdWFyZXJvb3QgMC43ODYgLT4gMC44ODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MTYgc3F1YXJlcm9vdCAwLjA3ODYgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MTcgc3F1YXJlcm9vdCAwLjc4NyAtPiAwLjg4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQxOCBzcXVhcmVyb290IDAuMDc4NyAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQxOSBzcXVhcmVyb290IDAuNzg4IC0+IDAuODg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDIwIHNxdWFyZXJvb3QgMC4wNzg4IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDIxIHNxdWFyZXJvb3QgMC43ODkgLT4gMC44ODggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MjIgc3F1YXJlcm9vdCAwLjA3ODkgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MjMgc3F1YXJlcm9vdCAwLjc5MSAtPiAwLjg4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQyNCBzcXVhcmVyb290IDAuMDc5MSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQyNSBzcXVhcmVyb290IDAuNzkyIC0+IDAuODkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDI2IHNxdWFyZXJvb3QgMC4wNzkyIC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDI3IHNxdWFyZXJvb3QgMC43OTMgLT4gMC44OTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0Mjggc3F1YXJlcm9vdCAwLjA3OTMgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0Mjkgc3F1YXJlcm9vdCAwLjc5NCAtPiAwLjg5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQzMCBzcXVhcmVyb290IDAuMDc5NCAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQzMSBzcXVhcmVyb290IDAuNzk1IC0+IDAuODkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDMyIHNxdWFyZXJvb3QgMC4wNzk1IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDMzIHNxdWFyZXJvb3QgMC43OTYgLT4gMC44OTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MzQgc3F1YXJlcm9vdCAwLjA3OTYgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MzUgc3F1YXJlcm9vdCAwLjc5NyAtPiAwLjg5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQzNiBzcXVhcmVyb290IDAuMDc5NyAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQzNyBzcXVhcmVyb290IDAuNzk4IC0+IDAuODkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDM4IHNxdWFyZXJvb3QgMC4wNzk4IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDM5IHNxdWFyZXJvb3QgMC43OTkgLT4gMC44OTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NDAgc3F1YXJlcm9vdCAwLjA3OTkgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NDEgc3F1YXJlcm9vdCAwLjgwMSAtPiAwLjg5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ0MiBzcXVhcmVyb290IDAuMDgwMSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ0MyBzcXVhcmVyb290IDAuODAyIC0+IDAuODk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDQ0IHNxdWFyZXJvb3QgMC4wODAyIC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDQ1IHNxdWFyZXJvb3QgMC44MDMgLT4gMC44OTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NDYgc3F1YXJlcm9vdCAwLjA4MDMgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NDcgc3F1YXJlcm9vdCAwLjgwNCAtPiAwLjg5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ0OCBzcXVhcmVyb290IDAuMDgwNCAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ0OSBzcXVhcmVyb290IDAuODA1IC0+IDAuODk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDUwIHNxdWFyZXJvb3QgMC4wODA1IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDUxIHNxdWFyZXJvb3QgMC44MDYgLT4gMC44OTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NTIgc3F1YXJlcm9vdCAwLjA4MDYgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NTMgc3F1YXJlcm9vdCAwLjgwNyAtPiAwLjg5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ1NCBzcXVhcmVyb290IDAuMDgwNyAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ1NSBzcXVhcmVyb290IDAuODA4IC0+IDAuODk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDU2IHNxdWFyZXJvb3QgMC4wODA4IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDU3IHNxdWFyZXJvb3QgMC44MDkgLT4gMC44OTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NTggc3F1YXJlcm9vdCAwLjA4MDkgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NTkgc3F1YXJlcm9vdCAwLjgxMSAtPiAwLjkwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ2MCBzcXVhcmVyb290IDAuMDgxMSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ2MSBzcXVhcmVyb290IDAuODEyIC0+IDAuOTAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDYyIHNxdWFyZXJvb3QgMC4wODEyIC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDYzIHNxdWFyZXJvb3QgMC44MTMgLT4gMC45MDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NjQgc3F1YXJlcm9vdCAwLjA4MTMgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NjUgc3F1YXJlcm9vdCAwLjgxNCAtPiAwLjkwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ2NiBzcXVhcmVyb290IDAuMDgxNCAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ2NyBzcXVhcmVyb290IDAuODE1IC0+IDAuOTAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDY4IHNxdWFyZXJvb3QgMC4wODE1IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDY5IHNxdWFyZXJvb3QgMC44MTYgLT4gMC45MDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NzAgc3F1YXJlcm9vdCAwLjA4MTYgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NzEgc3F1YXJlcm9vdCAwLjgxNyAtPiAwLjkwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ3MiBzcXVhcmVyb290IDAuMDgxNyAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ3MyBzcXVhcmVyb290IDAuODE4IC0+IDAuOTA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDc0IHNxdWFyZXJvb3QgMC4wODE4IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDc1IHNxdWFyZXJvb3QgMC44MTkgLT4gMC45MDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NzYgc3F1YXJlcm9vdCAwLjA4MTkgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0Nzcgc3F1YXJlcm9vdCAwLjgyMSAtPiAwLjkwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ3OCBzcXVhcmVyb290IDAuMDgyMSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ3OSBzcXVhcmVyb290IDAuODIyIC0+IDAuOTA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDgwIHNxdWFyZXJvb3QgMC4wODIyIC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDgxIHNxdWFyZXJvb3QgMC44MjMgLT4gMC45MDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0ODIgc3F1YXJlcm9vdCAwLjA4MjMgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0ODMgc3F1YXJlcm9vdCAwLjgyNCAtPiAwLjkwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ4NCBzcXVhcmVyb290IDAuMDgyNCAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ4NSBzcXVhcmVyb290IDAuODI1IC0+IDAuOTA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDg2IHNxdWFyZXJvb3QgMC4wODI1IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDg3IHNxdWFyZXJvb3QgMC44MjYgLT4gMC45MDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0ODggc3F1YXJlcm9vdCAwLjA4MjYgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0ODkgc3F1YXJlcm9vdCAwLjgyNyAtPiAwLjkwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ5MCBzcXVhcmVyb290IDAuMDgyNyAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ5MSBzcXVhcmVyb290IDAuODI4IC0+IDAuOTEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDkyIHNxdWFyZXJvb3QgMC4wODI4IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDkzIHNxdWFyZXJvb3QgMC44MjkgLT4gMC45MTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0OTQgc3F1YXJlcm9vdCAwLjA4MjkgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0OTUgc3F1YXJlcm9vdCAwLjgzMSAtPiAwLjkxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ5NiBzcXVhcmVyb290IDAuMDgzMSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ5NyBzcXVhcmVyb290IDAuODMyIC0+IDAuOTEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDk4IHNxdWFyZXJvb3QgMC4wODMyIC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDk5IHNxdWFyZXJvb3QgMC44MzMgLT4gMC45MTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MDAgc3F1YXJlcm9vdCAwLjA4MzMgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MDEgc3F1YXJlcm9vdCAwLjgzNCAtPiAwLjkxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUwMiBzcXVhcmVyb290IDAuMDgzNCAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUwMyBzcXVhcmVyb290IDAuODM1IC0+IDAuOTE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTA0IHNxdWFyZXJvb3QgMC4wODM1IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTA1IHNxdWFyZXJvb3QgMC44MzYgLT4gMC45MTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MDYgc3F1YXJlcm9vdCAwLjA4MzYgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MDcgc3F1YXJlcm9vdCAwLjgzNyAtPiAwLjkxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUwOCBzcXVhcmVyb290IDAuMDgzNyAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUwOSBzcXVhcmVyb290IDAuODM4IC0+IDAuOTE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTEwIHNxdWFyZXJvb3QgMC4wODM4IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTExIHNxdWFyZXJvb3QgMC44MzkgLT4gMC45MTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MTIgc3F1YXJlcm9vdCAwLjA4MzkgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MTMgc3F1YXJlcm9vdCAwLjg0MSAtPiAwLjkxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUxNCBzcXVhcmVyb290IDAuMDg0MSAtPiAwLjI5CitzcXR4NDUxNSBzcXVhcmVyb290IDAuODQyIC0+IDAuOTE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTE2IHNxdWFyZXJvb3QgMC4wODQyIC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTE3IHNxdWFyZXJvb3QgMC44NDMgLT4gMC45MTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MTggc3F1YXJlcm9vdCAwLjA4NDMgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MTkgc3F1YXJlcm9vdCAwLjg0NCAtPiAwLjkxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUyMCBzcXVhcmVyb290IDAuMDg0NCAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUyMSBzcXVhcmVyb290IDAuODQ1IC0+IDAuOTE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTIyIHNxdWFyZXJvb3QgMC4wODQ1IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTIzIHNxdWFyZXJvb3QgMC44NDYgLT4gMC45MjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MjQgc3F1YXJlcm9vdCAwLjA4NDYgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MjUgc3F1YXJlcm9vdCAwLjg0NyAtPiAwLjkyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUyNiBzcXVhcmVyb290IDAuMDg0NyAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUyNyBzcXVhcmVyb290IDAuODQ4IC0+IDAuOTIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTI4IHNxdWFyZXJvb3QgMC4wODQ4IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTI5IHNxdWFyZXJvb3QgMC44NDkgLT4gMC45MjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MzAgc3F1YXJlcm9vdCAwLjA4NDkgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MzEgc3F1YXJlcm9vdCAwLjg1MSAtPiAwLjkyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUzMiBzcXVhcmVyb290IDAuMDg1MSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUzMyBzcXVhcmVyb290IDAuODUyIC0+IDAuOTIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTM0IHNxdWFyZXJvb3QgMC4wODUyIC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTM1IHNxdWFyZXJvb3QgMC44NTMgLT4gMC45MjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MzYgc3F1YXJlcm9vdCAwLjA4NTMgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1Mzcgc3F1YXJlcm9vdCAwLjg1NCAtPiAwLjkyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUzOCBzcXVhcmVyb290IDAuMDg1NCAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUzOSBzcXVhcmVyb290IDAuODU1IC0+IDAuOTI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTQwIHNxdWFyZXJvb3QgMC4wODU1IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTQxIHNxdWFyZXJvb3QgMC44NTYgLT4gMC45MjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NDIgc3F1YXJlcm9vdCAwLjA4NTYgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NDMgc3F1YXJlcm9vdCAwLjg1NyAtPiAwLjkyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU0NCBzcXVhcmVyb290IDAuMDg1NyAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU0NSBzcXVhcmVyb290IDAuODU4IC0+IDAuOTI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTQ2IHNxdWFyZXJvb3QgMC4wODU4IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTQ3IHNxdWFyZXJvb3QgMC44NTkgLT4gMC45MjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NDggc3F1YXJlcm9vdCAwLjA4NTkgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NDkgc3F1YXJlcm9vdCAwLjg2MSAtPiAwLjkyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU1MCBzcXVhcmVyb290IDAuMDg2MSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU1MSBzcXVhcmVyb290IDAuODYyIC0+IDAuOTI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTUyIHNxdWFyZXJvb3QgMC4wODYyIC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTUzIHNxdWFyZXJvb3QgMC44NjMgLT4gMC45MjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NTQgc3F1YXJlcm9vdCAwLjA4NjMgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NTUgc3F1YXJlcm9vdCAwLjg2NCAtPiAwLjkzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU1NiBzcXVhcmVyb290IDAuMDg2NCAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU1NyBzcXVhcmVyb290IDAuODY1IC0+IDAuOTMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTU4IHNxdWFyZXJvb3QgMC4wODY1IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTU5IHNxdWFyZXJvb3QgMC44NjYgLT4gMC45MzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NjAgc3F1YXJlcm9vdCAwLjA4NjYgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NjEgc3F1YXJlcm9vdCAwLjg2NyAtPiAwLjkzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU2MiBzcXVhcmVyb290IDAuMDg2NyAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU2MyBzcXVhcmVyb290IDAuODY4IC0+IDAuOTMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTY0IHNxdWFyZXJvb3QgMC4wODY4IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTY1IHNxdWFyZXJvb3QgMC44NjkgLT4gMC45MzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NjYgc3F1YXJlcm9vdCAwLjA4NjkgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1Njcgc3F1YXJlcm9vdCAwLjg3MSAtPiAwLjkzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU2OCBzcXVhcmVyb290IDAuMDg3MSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU2OSBzcXVhcmVyb290IDAuODcyIC0+IDAuOTM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTcwIHNxdWFyZXJvb3QgMC4wODcyIC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTcxIHNxdWFyZXJvb3QgMC44NzMgLT4gMC45MzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NzIgc3F1YXJlcm9vdCAwLjA4NzMgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NzMgc3F1YXJlcm9vdCAwLjg3NCAtPiAwLjkzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU3NCBzcXVhcmVyb290IDAuMDg3NCAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU3NSBzcXVhcmVyb290IDAuODc1IC0+IDAuOTM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTc2IHNxdWFyZXJvb3QgMC4wODc1IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTc3IHNxdWFyZXJvb3QgMC44NzYgLT4gMC45MzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1Nzggc3F1YXJlcm9vdCAwLjA4NzYgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1Nzkgc3F1YXJlcm9vdCAwLjg3NyAtPiAwLjkzNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU4MCBzcXVhcmVyb290IDAuMDg3NyAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU4MSBzcXVhcmVyb290IDAuODc4IC0+IDAuOTM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTgyIHNxdWFyZXJvb3QgMC4wODc4IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTgzIHNxdWFyZXJvb3QgMC44NzkgLT4gMC45MzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1ODQgc3F1YXJlcm9vdCAwLjA4NzkgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1ODUgc3F1YXJlcm9vdCAwLjg4MSAtPiAwLjkzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU4NiBzcXVhcmVyb290IDAuMDg4MSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU4NyBzcXVhcmVyb290IDAuODgyIC0+IDAuOTM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTg4IHNxdWFyZXJvb3QgMC4wODgyIC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTg5IHNxdWFyZXJvb3QgMC44ODMgLT4gMC45NDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1OTAgc3F1YXJlcm9vdCAwLjA4ODMgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1OTEgc3F1YXJlcm9vdCAwLjg4NCAtPiAwLjk0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU5MiBzcXVhcmVyb290IDAuMDg4NCAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU5MyBzcXVhcmVyb290IDAuODg1IC0+IDAuOTQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTk0IHNxdWFyZXJvb3QgMC4wODg1IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTk1IHNxdWFyZXJvb3QgMC44ODYgLT4gMC45NDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1OTYgc3F1YXJlcm9vdCAwLjA4ODYgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1OTcgc3F1YXJlcm9vdCAwLjg4NyAtPiAwLjk0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU5OCBzcXVhcmVyb290IDAuMDg4NyAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU5OSBzcXVhcmVyb290IDAuODg4IC0+IDAuOTQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjAwIHNxdWFyZXJvb3QgMC4wODg4IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjAxIHNxdWFyZXJvb3QgMC44ODkgLT4gMC45NDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MDIgc3F1YXJlcm9vdCAwLjA4ODkgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MDMgc3F1YXJlcm9vdCAwLjg5MSAtPiAwLjk0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYwNCBzcXVhcmVyb290IDAuMDg5MSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYwNSBzcXVhcmVyb290IDAuODkyIC0+IDAuOTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjA2IHNxdWFyZXJvb3QgMC4wODkyIC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjA3IHNxdWFyZXJvb3QgMC44OTMgLT4gMC45NDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MDggc3F1YXJlcm9vdCAwLjA4OTMgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MDkgc3F1YXJlcm9vdCAwLjg5NCAtPiAwLjk0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYxMCBzcXVhcmVyb290IDAuMDg5NCAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYxMSBzcXVhcmVyb290IDAuODk1IC0+IDAuOTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjEyIHNxdWFyZXJvb3QgMC4wODk1IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjEzIHNxdWFyZXJvb3QgMC44OTYgLT4gMC45NDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MTQgc3F1YXJlcm9vdCAwLjA4OTYgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MTUgc3F1YXJlcm9vdCAwLjg5NyAtPiAwLjk0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYxNiBzcXVhcmVyb290IDAuMDg5NyAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYxNyBzcXVhcmVyb290IDAuODk4IC0+IDAuOTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjE4IHNxdWFyZXJvb3QgMC4wODk4IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjE5IHNxdWFyZXJvb3QgMC44OTkgLT4gMC45NDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MjAgc3F1YXJlcm9vdCAwLjA4OTkgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MjEgc3F1YXJlcm9vdCAwLjkwMSAtPiAwLjk0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYyMiBzcXVhcmVyb290IDAuMDkwMSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYyMyBzcXVhcmVyb290IDAuOTAyIC0+IDAuOTUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjI0IHNxdWFyZXJvb3QgMC4wOTAyIC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjI1IHNxdWFyZXJvb3QgMC45MDMgLT4gMC45NTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MjYgc3F1YXJlcm9vdCAwLjA5MDMgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2Mjcgc3F1YXJlcm9vdCAwLjkwNCAtPiAwLjk1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYyOCBzcXVhcmVyb290IDAuMDkwNCAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYyOSBzcXVhcmVyb290IDAuOTA1IC0+IDAuOTUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjMwIHNxdWFyZXJvb3QgMC4wOTA1IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjMxIHNxdWFyZXJvb3QgMC45MDYgLT4gMC45NTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MzIgc3F1YXJlcm9vdCAwLjA5MDYgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MzMgc3F1YXJlcm9vdCAwLjkwNyAtPiAwLjk1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYzNCBzcXVhcmVyb290IDAuMDkwNyAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYzNSBzcXVhcmVyb290IDAuOTA4IC0+IDAuOTUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjM2IHNxdWFyZXJvb3QgMC4wOTA4IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjM3IHNxdWFyZXJvb3QgMC45MDkgLT4gMC45NTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2Mzggc3F1YXJlcm9vdCAwLjA5MDkgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2Mzkgc3F1YXJlcm9vdCAwLjkxMSAtPiAwLjk1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY0MCBzcXVhcmVyb290IDAuMDkxMSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY0MSBzcXVhcmVyb290IDAuOTEyIC0+IDAuOTU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjQyIHNxdWFyZXJvb3QgMC4wOTEyIC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjQzIHNxdWFyZXJvb3QgMC45MTMgLT4gMC45NTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NDQgc3F1YXJlcm9vdCAwLjA5MTMgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NDUgc3F1YXJlcm9vdCAwLjkxNCAtPiAwLjk1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY0NiBzcXVhcmVyb290IDAuMDkxNCAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY0NyBzcXVhcmVyb290IDAuOTE1IC0+IDAuOTU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjQ4IHNxdWFyZXJvb3QgMC4wOTE1IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjQ5IHNxdWFyZXJvb3QgMC45MTYgLT4gMC45NTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NTAgc3F1YXJlcm9vdCAwLjA5MTYgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NTEgc3F1YXJlcm9vdCAwLjkxNyAtPiAwLjk1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY1MiBzcXVhcmVyb290IDAuMDkxNyAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY1MyBzcXVhcmVyb290IDAuOTE4IC0+IDAuOTU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjU0IHNxdWFyZXJvb3QgMC4wOTE4IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjU1IHNxdWFyZXJvb3QgMC45MTkgLT4gMC45NTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NTYgc3F1YXJlcm9vdCAwLjA5MTkgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NTcgc3F1YXJlcm9vdCAwLjkyMSAtPiAwLjk2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY1OCBzcXVhcmVyb290IDAuMDkyMSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY1OSBzcXVhcmVyb290IDAuOTIyIC0+IDAuOTYwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjYwIHNxdWFyZXJvb3QgMC4wOTIyIC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjYxIHNxdWFyZXJvb3QgMC45MjMgLT4gMC45NjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NjIgc3F1YXJlcm9vdCAwLjA5MjMgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NjMgc3F1YXJlcm9vdCAwLjkyNCAtPiAwLjk2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY2NCBzcXVhcmVyb290IDAuMDkyNCAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY2NSBzcXVhcmVyb290IDAuOTI1IC0+IDAuOTYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjY2IHNxdWFyZXJvb3QgMC4wOTI1IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjY3IHNxdWFyZXJvb3QgMC45MjYgLT4gMC45NjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2Njggc3F1YXJlcm9vdCAwLjA5MjYgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2Njkgc3F1YXJlcm9vdCAwLjkyNyAtPiAwLjk2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY3MCBzcXVhcmVyb290IDAuMDkyNyAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY3MSBzcXVhcmVyb290IDAuOTI4IC0+IDAuOTYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjcyIHNxdWFyZXJvb3QgMC4wOTI4IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjczIHNxdWFyZXJvb3QgMC45MjkgLT4gMC45NjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NzQgc3F1YXJlcm9vdCAwLjA5MjkgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NzUgc3F1YXJlcm9vdCAwLjkzMSAtPiAwLjk2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY3NiBzcXVhcmVyb290IDAuMDkzMSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY3NyBzcXVhcmVyb290IDAuOTMyIC0+IDAuOTY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njc4IHNxdWFyZXJvb3QgMC4wOTMyIC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njc5IHNxdWFyZXJvb3QgMC45MzMgLT4gMC45NjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2ODAgc3F1YXJlcm9vdCAwLjA5MzMgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2ODEgc3F1YXJlcm9vdCAwLjkzNCAtPiAwLjk2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY4MiBzcXVhcmVyb290IDAuMDkzNCAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY4MyBzcXVhcmVyb290IDAuOTM1IC0+IDAuOTY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njg0IHNxdWFyZXJvb3QgMC4wOTM1IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njg1IHNxdWFyZXJvb3QgMC45MzYgLT4gMC45NjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2ODYgc3F1YXJlcm9vdCAwLjA5MzYgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2ODcgc3F1YXJlcm9vdCAwLjkzNyAtPiAwLjk2OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY4OCBzcXVhcmVyb290IDAuMDkzNyAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY4OSBzcXVhcmVyb290IDAuOTM4IC0+IDAuOTY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjkwIHNxdWFyZXJvb3QgMC4wOTM4IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjkxIHNxdWFyZXJvb3QgMC45MzkgLT4gMC45NjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2OTIgc3F1YXJlcm9vdCAwLjA5MzkgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2OTMgc3F1YXJlcm9vdCAwLjk0MSAtPiAwLjk3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY5NCBzcXVhcmVyb290IDAuMDk0MSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY5NSBzcXVhcmVyb290IDAuOTQyIC0+IDAuOTcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njk2IHNxdWFyZXJvb3QgMC4wOTQyIC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njk3IHNxdWFyZXJvb3QgMC45NDMgLT4gMC45NzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2OTggc3F1YXJlcm9vdCAwLjA5NDMgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2OTkgc3F1YXJlcm9vdCAwLjk0NCAtPiAwLjk3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcwMCBzcXVhcmVyb290IDAuMDk0NCAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcwMSBzcXVhcmVyb290IDAuOTQ1IC0+IDAuOTcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzAyIHNxdWFyZXJvb3QgMC4wOTQ1IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzAzIHNxdWFyZXJvb3QgMC45NDYgLT4gMC45NzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MDQgc3F1YXJlcm9vdCAwLjA5NDYgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MDUgc3F1YXJlcm9vdCAwLjk0NyAtPiAwLjk3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcwNiBzcXVhcmVyb290IDAuMDk0NyAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcwNyBzcXVhcmVyb290IDAuOTQ4IC0+IDAuOTc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzA4IHNxdWFyZXJvb3QgMC4wOTQ4IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzA5IHNxdWFyZXJvb3QgMC45NDkgLT4gMC45NzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MTAgc3F1YXJlcm9vdCAwLjA5NDkgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MTEgc3F1YXJlcm9vdCAwLjk1MSAtPiAwLjk3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcxMiBzcXVhcmVyb290IDAuMDk1MSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcxMyBzcXVhcmVyb290IDAuOTUyIC0+IDAuOTc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzE0IHNxdWFyZXJvb3QgMC4wOTUyIC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzE1IHNxdWFyZXJvb3QgMC45NTMgLT4gMC45NzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MTYgc3F1YXJlcm9vdCAwLjA5NTMgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MTcgc3F1YXJlcm9vdCAwLjk1NCAtPiAwLjk3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcxOCBzcXVhcmVyb290IDAuMDk1NCAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcxOSBzcXVhcmVyb290IDAuOTU1IC0+IDAuOTc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzIwIHNxdWFyZXJvb3QgMC4wOTU1IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzIxIHNxdWFyZXJvb3QgMC45NTYgLT4gMC45NzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MjIgc3F1YXJlcm9vdCAwLjA5NTYgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MjMgc3F1YXJlcm9vdCAwLjk1NyAtPiAwLjk3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcyNCBzcXVhcmVyb290IDAuMDk1NyAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcyNSBzcXVhcmVyb290IDAuOTU4IC0+IDAuOTc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzI2IHNxdWFyZXJvb3QgMC4wOTU4IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzI3IHNxdWFyZXJvb3QgMC45NTkgLT4gMC45NzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3Mjggc3F1YXJlcm9vdCAwLjA5NTkgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3Mjkgc3F1YXJlcm9vdCAwLjk2MSAtPiAwLjk4MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDczMCBzcXVhcmVyb290IDAuMDk2MSAtPiAwLjMxCitzcXR4NDczMSBzcXVhcmVyb290IDAuOTYyIC0+IDAuOTgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzMyIHNxdWFyZXJvb3QgMC4wOTYyIC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzMzIHNxdWFyZXJvb3QgMC45NjMgLT4gMC45ODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MzQgc3F1YXJlcm9vdCAwLjA5NjMgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MzUgc3F1YXJlcm9vdCAwLjk2NCAtPiAwLjk4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDczNiBzcXVhcmVyb290IDAuMDk2NCAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDczNyBzcXVhcmVyb290IDAuOTY1IC0+IDAuOTgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzM4IHNxdWFyZXJvb3QgMC4wOTY1IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzM5IHNxdWFyZXJvb3QgMC45NjYgLT4gMC45ODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NDAgc3F1YXJlcm9vdCAwLjA5NjYgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NDEgc3F1YXJlcm9vdCAwLjk2NyAtPiAwLjk4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc0MiBzcXVhcmVyb290IDAuMDk2NyAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc0MyBzcXVhcmVyb290IDAuOTY4IC0+IDAuOTg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzQ0IHNxdWFyZXJvb3QgMC4wOTY4IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzQ1IHNxdWFyZXJvb3QgMC45NjkgLT4gMC45ODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NDYgc3F1YXJlcm9vdCAwLjA5NjkgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NDcgc3F1YXJlcm9vdCAwLjk3MSAtPiAwLjk4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc0OCBzcXVhcmVyb290IDAuMDk3MSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc0OSBzcXVhcmVyb290IDAuOTcyIC0+IDAuOTg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzUwIHNxdWFyZXJvb3QgMC4wOTcyIC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzUxIHNxdWFyZXJvb3QgMC45NzMgLT4gMC45ODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NTIgc3F1YXJlcm9vdCAwLjA5NzMgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NTMgc3F1YXJlcm9vdCAwLjk3NCAtPiAwLjk4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc1NCBzcXVhcmVyb290IDAuMDk3NCAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc1NSBzcXVhcmVyb290IDAuOTc1IC0+IDAuOTg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzU2IHNxdWFyZXJvb3QgMC4wOTc1IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzU3IHNxdWFyZXJvb3QgMC45NzYgLT4gMC45ODggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NTggc3F1YXJlcm9vdCAwLjA5NzYgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NTkgc3F1YXJlcm9vdCAwLjk3NyAtPiAwLjk4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc2MCBzcXVhcmVyb290IDAuMDk3NyAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc2MSBzcXVhcmVyb290IDAuOTc4IC0+IDAuOTg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzYyIHNxdWFyZXJvb3QgMC4wOTc4IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzYzIHNxdWFyZXJvb3QgMC45NzkgLT4gMC45ODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NjQgc3F1YXJlcm9vdCAwLjA5NzkgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NjUgc3F1YXJlcm9vdCAwLjk4MSAtPiAwLjk5MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc2NiBzcXVhcmVyb290IDAuMDk4MSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc2NyBzcXVhcmVyb290IDAuOTgyIC0+IDAuOTkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzY4IHNxdWFyZXJvb3QgMC4wOTgyIC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzY5IHNxdWFyZXJvb3QgMC45ODMgLT4gMC45OTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NzAgc3F1YXJlcm9vdCAwLjA5ODMgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NzEgc3F1YXJlcm9vdCAwLjk4NCAtPiAwLjk5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc3MiBzcXVhcmVyb290IDAuMDk4NCAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc3MyBzcXVhcmVyb290IDAuOTg1IC0+IDAuOTkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzc0IHNxdWFyZXJvb3QgMC4wOTg1IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzc1IHNxdWFyZXJvb3QgMC45ODYgLT4gMC45OTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NzYgc3F1YXJlcm9vdCAwLjA5ODYgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3Nzcgc3F1YXJlcm9vdCAwLjk4NyAtPiAwLjk5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc3OCBzcXVhcmVyb290IDAuMDk4NyAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc3OSBzcXVhcmVyb290IDAuOTg4IC0+IDAuOTk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzgwIHNxdWFyZXJvb3QgMC4wOTg4IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzgxIHNxdWFyZXJvb3QgMC45ODkgLT4gMC45OTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3ODIgc3F1YXJlcm9vdCAwLjA5ODkgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3ODMgc3F1YXJlcm9vdCAwLjk5MSAtPiAwLjk5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc4NCBzcXVhcmVyb290IDAuMDk5MSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc4NSBzcXVhcmVyb290IDAuOTkyIC0+IDAuOTk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzg2IHNxdWFyZXJvb3QgMC4wOTkyIC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzg3IHNxdWFyZXJvb3QgMC45OTMgLT4gMC45OTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3ODggc3F1YXJlcm9vdCAwLjA5OTMgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3ODkgc3F1YXJlcm9vdCAwLjk5NCAtPiAwLjk5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc5MCBzcXVhcmVyb290IDAuMDk5NCAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc5MSBzcXVhcmVyb290IDAuOTk1IC0+IDAuOTk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzkyIHNxdWFyZXJvb3QgMC4wOTk1IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzkzIHNxdWFyZXJvb3QgMC45OTYgLT4gMC45OTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3OTQgc3F1YXJlcm9vdCAwLjA5OTYgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3OTUgc3F1YXJlcm9vdCAwLjk5NyAtPiAwLjk5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc5NiBzcXVhcmVyb290IDAuMDk5NyAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc5NyBzcXVhcmVyb290IDAuOTk4IC0+IDAuOTk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzk4IHNxdWFyZXJvb3QgMC4wOTk4IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzk5IHNxdWFyZXJvb3QgMC45OTkgLT4gMC45OTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ4MDAgc3F1YXJlcm9vdCAwLjA5OTkgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorCistLSBBIGdyb3VwIG9mIHByZWNpc2lvbiA0IHRlc3RzIHdoZXJlIEh1bGwgJiBBYnJoYW0gYWRqdXN0bWVudHMgYXJlCistLSBuZWVkZWQgaW4gc29tZSBjYXNlcyAoYm90aCB1cCBhbmQgZG93bikgW3NlZSBIdWxsMTk4NWJdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDQKK3NxdHg1MDAxIHNxdWFyZXJvb3QgMC4wMTE4ICAtPiAwLjEwODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMDIgc3F1YXJlcm9vdCAwLjExOSAgIC0+IDAuMzQ1MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NTAwMyBzcXVhcmVyb290IDAuMDExOSAgLT4gMC4xMDkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDA0IHNxdWFyZXJvb3QgMC4xMjEgICAtPiAwLjM0NzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMDUgc3F1YXJlcm9vdCAwLjAxMjEgIC0+IDAuMTEKK3NxdHg1MDA2IHNxdWFyZXJvb3QgMC4xMjIgICAtPiAwLjM0OTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMDcgc3F1YXJlcm9vdCAwLjAxMjIgIC0+IDAuMTEwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NTAwOCBzcXVhcmVyb290IDAuMTIzICAgLT4gMC4zNTA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDA5IHNxdWFyZXJvb3QgMC40OTQgICAtPiAwLjcwMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMTAgc3F1YXJlcm9vdCAwLjA2NjkgIC0+IDAuMjU4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NTAxMSBzcXVhcmVyb290IDAuOTU1OCAgLT4gMC45Nzc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDEyIHNxdWFyZXJvb3QgMC45MzQ4ICAtPiAwLjk2NjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMTMgc3F1YXJlcm9vdCAwLjkzNDUgIC0+IDAuOTY2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NTAxNCBzcXVhcmVyb290IDAuMDkzNDUgLT4gMC4zMDU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDE1IHNxdWFyZXJvb3QgMC45MzQ2ICAtPiAwLjk2NjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMTYgc3F1YXJlcm9vdCAwLjA5MzQ2IC0+IDAuMzA1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NTAxNyBzcXVhcmVyb290IDAuOTM0NyAgLT4gMC45NjY4ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorcHJlY2lzaW9uOiA5CitzcXR4NzAwIHNxdWFyZXJvb3QgIDAgICAgICAgLT4gJzAnCitzcXR4NzAxIHNxdWFyZXJvb3QgIC0wICAgICAgLT4gJy0wJworc3F0eDcwMiBzcXVhcmVyb290ICAwLjM5ICAgIC0+IDAuNjI0NDk5ODAwICAgIEluZXhhY3QgUm91bmRlZAorc3F0eDcwMyBzcXVhcmVyb290ICAxMDAgICAgIC0+ICcxMCcKK3NxdHg3MDQgc3F1YXJlcm9vdCAgMS4wMCAgICAtPiAnMS4wJworc3F0eDcwNSBzcXVhcmVyb290ICA3ICAgICAgIC0+ICcyLjY0NTc1MTMxJyAgIEluZXhhY3QgUm91bmRlZAorc3F0eDcwNiBzcXVhcmVyb290ICAxMCAgICAgIC0+IDMuMTYyMjc3NjYgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIG9uZS1vZmZzCitwcmVjaXNpb246IDkKK3NxdHg3MTEgc3F1YXJlcm9vdCAgMC4xICAgICAtPiAwLjMxNjIyNzc2NiAgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MTIgc3F1YXJlcm9vdCAgMC4yICAgICAtPiAwLjQ0NzIxMzU5NSAgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MTMgc3F1YXJlcm9vdCAgMC4zICAgICAtPiAwLjU0NzcyMjU1OCAgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MTQgc3F1YXJlcm9vdCAgMC40ICAgICAtPiAwLjYzMjQ1NTUzMiAgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MTUgc3F1YXJlcm9vdCAgMC41ICAgICAtPiAwLjcwNzEwNjc4MSAgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MTYgc3F1YXJlcm9vdCAgMC42ICAgICAtPiAwLjc3NDU5NjY2OSAgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MTcgc3F1YXJlcm9vdCAgMC43ICAgICAtPiAwLjgzNjY2MDAyNyAgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MTggc3F1YXJlcm9vdCAgMC44ICAgICAtPiAwLjg5NDQyNzE5MSAgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MTkgc3F1YXJlcm9vdCAgMC45ICAgICAtPiAwLjk0ODY4MzI5OCAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAgICAgICAgICAgICAgICAtLSBub3RlIG5vIG5vcm1hbGl6YXRvaW4gaGVyZQorc3F0eDcyMCBzcXVhcmVyb290ICswLjEgICAgIC0+IDAuMzE2MjI3NzY2MCAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMQorc3F0eDcyMSBzcXVhcmVyb290ICswLjEgICAgIC0+IDAuMzE2MjI3NzY2MDIgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMgorc3F0eDcyMiBzcXVhcmVyb290ICswLjEgICAgIC0+IDAuMzE2MjI3NzY2MDE3IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA5CitzcXR4NzIzIHNxdWFyZXJvb3QgIDAuMzkgICAgLT4gMC42MjQ0OTk4MDAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE1CitzcXR4NzI0IHNxdWFyZXJvb3QgIDAuMzkgICAgLT4gMC42MjQ0OTk3OTk4Mzk4NDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGRpc2N1c3Npb24gY2FzZXMKK3ByZWNpc2lvbjogNworc3F0eDczMSBzcXVhcmVyb290ICAgICA5ICAgLT4gICAzCitzcXR4NzMyIHNxdWFyZXJvb3QgICAxMDAgICAtPiAgMTAKK3NxdHg3MzMgc3F1YXJlcm9vdCAgIDEyMyAgIC0+ICAxMS4wOTA1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzM0IHNxdWFyZXJvb3QgICAxNDQgICAtPiAgMTIKK3NxdHg3MzUgc3F1YXJlcm9vdCAgIDE1NiAgIC0+ICAxMi40OTAwMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzM2IHNxdWFyZXJvb3QgMTAwMDAgICAtPiAxMDAKKworLS0gdmFsdWVzIGNsb3NlIHRvIG92ZXJmbG93IChpZiB0aGVyZSB3ZXJlIGlucHV0IHJvdW5kaW5nKQorbWF4ZXhwb25lbnQ6IDk5CittaW5leHBvbmVudDogLTk5CitwcmVjaXNpb246IDUKK3NxdHg3NjAgc3F1YXJlcm9vdCAgOS45OTk3RSs5OSAgIC0+IDkuOTk5OEUrNDkgSW5leGFjdCBSb3VuZGVkCitzcXR4NzYxIHNxdWFyZXJvb3QgIDkuOTk5OEUrOTkgICAtPiA5Ljk5OTlFKzQ5IEluZXhhY3QgUm91bmRlZAorc3F0eDc2MiBzcXVhcmVyb290ICA5Ljk5OTlFKzk5ICAgLT4gOS45OTk5RSs0OSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NjMgc3F1YXJlcm9vdCAgOS45OTk5MUUrOTkgIC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzY0IHNxdWFyZXJvb3QgIDkuOTk5OTRFKzk5ICAtPiAxLjAwMDBFKzUwIEluZXhhY3QgUm91bmRlZAorc3F0eDc2NSBzcXVhcmVyb290ICA5Ljk5OTk1RSs5OSAgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NjYgc3F1YXJlcm9vdCAgOS45OTk5OUUrOTkgIC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDkKK3NxdHg3NzAgc3F1YXJlcm9vdCAgOS45OTk3RSs5OSAgIC0+IDkuOTk5ODUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NzEgc3F1YXJlcm9vdCAgOS45OTk4RSs5OSAgIC0+IDkuOTk5OTAwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NzIgc3F1YXJlcm9vdCAgOS45OTk5RSs5OSAgIC0+IDkuOTk5OTUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NzMgc3F1YXJlcm9vdCAgOS45OTk5MUUrOTkgIC0+IDkuOTk5OTU1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NzQgc3F1YXJlcm9vdCAgOS45OTk5NEUrOTkgIC0+IDkuOTk5OTcwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NzUgc3F1YXJlcm9vdCAgOS45OTk5NUUrOTkgIC0+IDkuOTk5OTc1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NzYgc3F1YXJlcm9vdCAgOS45OTk5OUUrOTkgIC0+IDkuOTk5OTk1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK3NxdHg3ODAgc3F1YXJlcm9vdCAgOS45OTk3RSs5OSAgIC0+ICc5Ljk5OTg0OTk5ODg3NDk4MzEyNDdFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3ODEgc3F1YXJlcm9vdCAgOS45OTk4RSs5OSAgIC0+ICc5Ljk5OTg5OTk5OTQ5OTk5NDk5OTlFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3ODIgc3F1YXJlcm9vdCAgOS45OTk5RSs5OSAgIC0+ICc5Ljk5OTk0OTk5OTg3NDk5OTM3NTBFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3ODMgc3F1YXJlcm9vdCAgOS45OTk5MUUrOTkgIC0+ICc5Ljk5OTk1NDk5OTg5ODc0OTU0NDRFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3ODQgc3F1YXJlcm9vdCAgOS45OTk5NEUrOTkgIC0+ICc5Ljk5OTk2OTk5OTk1NDk5OTg2NTBFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3ODUgc3F1YXJlcm9vdCAgOS45OTk5NUUrOTkgIC0+ICc5Ljk5OTk3NDk5OTk2ODc0OTkyMTlFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3ODYgc3F1YXJlcm9vdCAgOS45OTk5OUUrOTkgIC0+ICc5Ljk5OTk5NDk5OTk5ODc0OTk5OTRFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93cyBbdGhlc2UgY2FuIG9ubHkgcmVzdWx0IHdoZW4gZU1heCBpcyA8IGRpZ2l0cysxXQorLS0gRXRpbnkgPSAtKEVtYXggKyAocHJlY2lzaW9uLTEpKQorLS0gc3RhcnQgd2l0aCBzdWJub3JtYWwgb3BlcmFuZHMgYW5kIG5vcm1hbCByZXN1bHRzCittYXhleHBvbmVudDogOQorbWluZXhwb25lbnQ6IC05CitwcmVjaXNpb246IDkgICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE3CitzcXR4ODAwIHNxdWFyZXJvb3QgIDFFLTE3ICAgLT4gMy4xNjIyNzc2NkUtOSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MDEgc3F1YXJlcm9vdCAxMEUtMTcgICAtPiAxLjBFLTgKK3ByZWNpc2lvbjogMTAgICAgICAgICAgICAgICAtLSBFdGlueT0tMTgKK3NxdHg4MDIgc3F1YXJlcm9vdCAxMEUtMTggICAtPiAzLjE2MjI3NzY2MEUtOSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MDMgc3F1YXJlcm9vdCAgMUUtMTggICAtPiAxRS05CisKK3ByZWNpc2lvbjogMTEgICAgICAgICAgICAgICAtLSBFdGlueT0tMTkKK3NxdHg4MDQgc3F1YXJlcm9vdCAgMUUtMTkgICAtPiAzLjE2MjI3NzY2MEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MDUgc3F1YXJlcm9vdCAxMEUtMTkgICAtPiAxLjBFLTkgICAgICAgICAgICAtLSBleGFjdAorcHJlY2lzaW9uOiAxMiAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMAorc3F0eDgwNiBzcXVhcmVyb290IDEwRS0yMCAgIC0+IDMuMTYyMjc3NjYwMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MDcgc3F1YXJlcm9vdCAgMUUtMjAgICAtPiAxRS0xMCBTdWJub3JtYWwgICAtLSBleGFjdCBTdWJub3JtYWwgY2FzZQorCitwcmVjaXNpb246IDEzICAgICAgICAgICAgICAgLS0gRXRpbnk9LTIxCitzcXR4ODA4IHNxdWFyZXJvb3QgIDFFLTIxICAgLT4gMy4xNjIyNzc2NjAyRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgwOSBzcXVhcmVyb290IDEwRS0yMSAgIC0+IDEuMEUtMTAgU3Vibm9ybWFsIC0tIGV4YWN0IFN1Ym5vcm1hbCBjYXNlCitwcmVjaXNpb246IDE0ICAgICAgICAgICAgICAgLS0gRXRpbnk9LTIyCitzcXR4ODEwIHNxdWFyZXJvb3QgIDFFLTIxICAgLT4gMy4xNjIyNzc2NjAxN0UtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MTEgc3F1YXJlcm9vdCAxMEUtMjIgICAtPiAzLjE2MjI3NzY2MDE3RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgxMiBzcXVhcmVyb290ICAxRS0yMiAgIC0+IDFFLTExIFN1Ym5vcm1hbCAgIC0tIGV4YWN0IFN1Ym5vcm1hbCBjYXNlCisKKy0tIE5vdCBlbm91Z2ggZGlnaXRzPworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorc3F0eDgxNSBzcXVhcmVyb290IDEuMDAwMDAwMDAwMTAwMDAwMEUtNzggIC0+IDEuMDAwMDAwMDAwMDUwMDAwRS0zOSBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1NgorCistLSBzcGVjaWFsIHZhbHVlcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3NxdHg4MjAgc3F1YXJlcm9vdCAgIEluZiAgICAtPiBJbmZpbml0eQorc3F0eDgyMSBzcXVhcmVyb290ICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDgyMiBzcXVhcmVyb290ICAgTmFOICAgIC0+IE5hTgorc3F0eDgyMyBzcXVhcmVyb290ICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworc3F0eDgyNCBzcXVhcmVyb290ICBzTmFOMTIzIC0+ICBOYU4xMjMgSW52YWxpZF9vcGVyYXRpb24KK3NxdHg4MjUgc3F1YXJlcm9vdCAtc05hTjMyMSAtPiAtTmFOMzIxIEludmFsaWRfb3BlcmF0aW9uCitzcXR4ODI2IHNxdWFyZXJvb3QgICBOYU40NTYgLT4gIE5hTjQ1Ngorc3F0eDgyNyBzcXVhcmVyb290ICAtTmFONjU0IC0+IC1OYU42NTQKK3NxdHg4Mjggc3F1YXJlcm9vdCAgIE5hTjEgICAtPiAgTmFOMQorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUKK3ByZWNpc2lvbjogNQorc3F0eDg0MCBzcXVhcmVyb290IC1zTmFOMTIzNDU2Nzg5MCAtPiAtTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0KKy0tIFNwZWNpYWwgdGhhbmtzIHRvIE1hcmsgRGlja2luc29uIGZvciB0ZXN0cyBpbiB0aGUgcmFuZ2UgODAwMC04OTk5LgorLS0KKy0tIEV4dHJhIHRlc3RzIGZvciB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24sIGRlYWxpbmcgd2l0aCBhIHZhcmlldHkgb2YKKy0tIGNvcm5lciBjYXNlcy4gIEluIHBhcnRpY3VsYXIsIHRoZXNlIHRlc3RzIGNvbmNlbnRyYXRlIG9uCistLSAgICgxKSBjYXNlcyB3aGVyZSB0aGUgaW5wdXQgcHJlY2lzaW9uIGV4Y2VlZHMgdGhlIGNvbnRleHQgcHJlY2lzaW9uLCBhbmQKKy0tICAgKDIpIGNhc2VzIHdoZXJlIHRoZSBpbnB1dCBleHBvbmVudCBpcyBvdXRzaWRlIHRoZSBjdXJyZW50IGNvbnRleHQsCistLSAgICAgICBhbmQgaW4gcGFydGljdWxhciB3aGVuIHRoZSByZXN1bHQgaXMgc3Vibm9ybWFsCistLQorLS0gbWF4ZXhwb25lbnQgYW5kIG1pbmV4cG9uZW50IGFyZSBzZXQgdG8gOSBhbmQgLTkgZm9yIG1vc3Qgb2YgdGhlc2UKKy0tIGNhc2VzOyBvbmx5IHRoZSBwcmVjaXNpb24gY2hhbmdlcy4gIFRoZSByb3VuZGluZyBhbHNvIGRvZXMgbm90CistLSBjaGFuZ2UsIGJlY2F1c2UgaXQgaXMgaWdub3JlZCBmb3IgdGhpcyBvcGVyYXRpb24uCittYXhleHBvbmVudDogOQorbWluZXhwb25lbnQ6IC05CisKKy0tIGV4YWN0IHJlc3VsdHMsIGlucHV0IHByZWNpc2lvbiA+IGNvbnRleHQgcHJlY2lzaW9uCitwcmVjaXNpb246IDEKK3NxdHg4MDAwIHNxdWFyZXJvb3QgMCAtPiAwCitzcXR4ODAwMSBzcXVhcmVyb290IDEgLT4gMQorc3F0eDgwMDIgc3F1YXJlcm9vdCA0IC0+IDIKK3NxdHg4MDAzIHNxdWFyZXJvb3QgOSAtPiAzCitzcXR4ODAwNCBzcXVhcmVyb290IDE2IC0+IDQKK3NxdHg4MDA1IHNxdWFyZXJvb3QgMjUgLT4gNQorc3F0eDgwMDYgc3F1YXJlcm9vdCAzNiAtPiA2CitzcXR4ODAwNyBzcXVhcmVyb290IDQ5IC0+IDcKK3NxdHg4MDA4IHNxdWFyZXJvb3QgNjQgLT4gOAorc3F0eDgwMDkgc3F1YXJlcm9vdCA4MSAtPiA5CitzcXR4ODAxMCBzcXVhcmVyb290IDEwMCAtPiAxRSsxIFJvdW5kZWQKK3NxdHg4MDExIHNxdWFyZXJvb3QgMTIxIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMgorc3F0eDgwMTIgc3F1YXJlcm9vdCAwIC0+IDAKK3NxdHg4MDEzIHNxdWFyZXJvb3QgMSAtPiAxCitzcXR4ODAxNCBzcXVhcmVyb290IDQgLT4gMgorc3F0eDgwMTUgc3F1YXJlcm9vdCA5IC0+IDMKK3NxdHg4MDE2IHNxdWFyZXJvb3QgMTYgLT4gNAorc3F0eDgwMTcgc3F1YXJlcm9vdCAyNSAtPiA1CitzcXR4ODAxOCBzcXVhcmVyb290IDM2IC0+IDYKK3NxdHg4MDE5IHNxdWFyZXJvb3QgNDkgLT4gNworc3F0eDgwMjAgc3F1YXJlcm9vdCA2NCAtPiA4CitzcXR4ODAyMSBzcXVhcmVyb290IDgxIC0+IDkKK3NxdHg4MDIyIHNxdWFyZXJvb3QgMTAwIC0+IDEwCitzcXR4ODAyMyBzcXVhcmVyb290IDEyMSAtPiAxMQorc3F0eDgwMjQgc3F1YXJlcm9vdCAxNDQgLT4gMTIKK3NxdHg4MDI1IHNxdWFyZXJvb3QgMTY5IC0+IDEzCitzcXR4ODAyNiBzcXVhcmVyb290IDE5NiAtPiAxNAorc3F0eDgwMjcgc3F1YXJlcm9vdCAyMjUgLT4gMTUKK3NxdHg4MDI4IHNxdWFyZXJvb3QgMjU2IC0+IDE2CitzcXR4ODAyOSBzcXVhcmVyb290IDI4OSAtPiAxNworc3F0eDgwMzAgc3F1YXJlcm9vdCAzMjQgLT4gMTgKK3NxdHg4MDMxIHNxdWFyZXJvb3QgMzYxIC0+IDE5CitzcXR4ODAzMiBzcXVhcmVyb290IDQwMCAtPiAyMAorc3F0eDgwMzMgc3F1YXJlcm9vdCA0NDEgLT4gMjEKK3NxdHg4MDM0IHNxdWFyZXJvb3QgNDg0IC0+IDIyCitzcXR4ODAzNSBzcXVhcmVyb290IDUyOSAtPiAyMworc3F0eDgwMzYgc3F1YXJlcm9vdCA1NzYgLT4gMjQKK3NxdHg4MDM3IHNxdWFyZXJvb3QgNjI1IC0+IDI1CitzcXR4ODAzOCBzcXVhcmVyb290IDY3NiAtPiAyNgorc3F0eDgwMzkgc3F1YXJlcm9vdCA3MjkgLT4gMjcKK3NxdHg4MDQwIHNxdWFyZXJvb3QgNzg0IC0+IDI4CitzcXR4ODA0MSBzcXVhcmVyb290IDg0MSAtPiAyOQorc3F0eDgwNDIgc3F1YXJlcm9vdCA5MDAgLT4gMzAKK3NxdHg4MDQzIHNxdWFyZXJvb3QgOTYxIC0+IDMxCitzcXR4ODA0NCBzcXVhcmVyb290IDEwMjQgLT4gMzIKK3NxdHg4MDQ1IHNxdWFyZXJvb3QgMTA4OSAtPiAzMworc3F0eDgwNDYgc3F1YXJlcm9vdCAxMTU2IC0+IDM0CitzcXR4ODA0NyBzcXVhcmVyb290IDEyMjUgLT4gMzUKK3NxdHg4MDQ4IHNxdWFyZXJvb3QgMTI5NiAtPiAzNgorc3F0eDgwNDkgc3F1YXJlcm9vdCAxMzY5IC0+IDM3CitzcXR4ODA1MCBzcXVhcmVyb290IDE0NDQgLT4gMzgKK3NxdHg4MDUxIHNxdWFyZXJvb3QgMTUyMSAtPiAzOQorc3F0eDgwNTIgc3F1YXJlcm9vdCAxNjAwIC0+IDQwCitzcXR4ODA1MyBzcXVhcmVyb290IDE2ODEgLT4gNDEKK3NxdHg4MDU0IHNxdWFyZXJvb3QgMTc2NCAtPiA0Mgorc3F0eDgwNTUgc3F1YXJlcm9vdCAxODQ5IC0+IDQzCitzcXR4ODA1NiBzcXVhcmVyb290IDE5MzYgLT4gNDQKK3NxdHg4MDU3IHNxdWFyZXJvb3QgMjAyNSAtPiA0NQorc3F0eDgwNTggc3F1YXJlcm9vdCAyMTE2IC0+IDQ2CitzcXR4ODA1OSBzcXVhcmVyb290IDIyMDkgLT4gNDcKK3NxdHg4MDYwIHNxdWFyZXJvb3QgMjMwNCAtPiA0OAorc3F0eDgwNjEgc3F1YXJlcm9vdCAyNDAxIC0+IDQ5CitzcXR4ODA2MiBzcXVhcmVyb290IDI1MDAgLT4gNTAKK3NxdHg4MDYzIHNxdWFyZXJvb3QgMjYwMSAtPiA1MQorc3F0eDgwNjQgc3F1YXJlcm9vdCAyNzA0IC0+IDUyCitzcXR4ODA2NSBzcXVhcmVyb290IDI4MDkgLT4gNTMKK3NxdHg4MDY2IHNxdWFyZXJvb3QgMjkxNiAtPiA1NAorc3F0eDgwNjcgc3F1YXJlcm9vdCAzMDI1IC0+IDU1CitzcXR4ODA2OCBzcXVhcmVyb290IDMxMzYgLT4gNTYKK3NxdHg4MDY5IHNxdWFyZXJvb3QgMzI0OSAtPiA1Nworc3F0eDgwNzAgc3F1YXJlcm9vdCAzMzY0IC0+IDU4CitzcXR4ODA3MSBzcXVhcmVyb290IDM0ODEgLT4gNTkKK3NxdHg4MDcyIHNxdWFyZXJvb3QgMzYwMCAtPiA2MAorc3F0eDgwNzMgc3F1YXJlcm9vdCAzNzIxIC0+IDYxCitzcXR4ODA3NCBzcXVhcmVyb290IDM4NDQgLT4gNjIKK3NxdHg4MDc1IHNxdWFyZXJvb3QgMzk2OSAtPiA2Mworc3F0eDgwNzYgc3F1YXJlcm9vdCA0MDk2IC0+IDY0CitzcXR4ODA3NyBzcXVhcmVyb290IDQyMjUgLT4gNjUKK3NxdHg4MDc4IHNxdWFyZXJvb3QgNDM1NiAtPiA2Ngorc3F0eDgwNzkgc3F1YXJlcm9vdCA0NDg5IC0+IDY3CitzcXR4ODA4MCBzcXVhcmVyb290IDQ2MjQgLT4gNjgKK3NxdHg4MDgxIHNxdWFyZXJvb3QgNDc2MSAtPiA2OQorc3F0eDgwODIgc3F1YXJlcm9vdCA0OTAwIC0+IDcwCitzcXR4ODA4MyBzcXVhcmVyb290IDUwNDEgLT4gNzEKK3NxdHg4MDg0IHNxdWFyZXJvb3QgNTE4NCAtPiA3Mgorc3F0eDgwODUgc3F1YXJlcm9vdCA1MzI5IC0+IDczCitzcXR4ODA4NiBzcXVhcmVyb290IDU0NzYgLT4gNzQKK3NxdHg4MDg3IHNxdWFyZXJvb3QgNTYyNSAtPiA3NQorc3F0eDgwODggc3F1YXJlcm9vdCA1Nzc2IC0+IDc2CitzcXR4ODA4OSBzcXVhcmVyb290IDU5MjkgLT4gNzcKK3NxdHg4MDkwIHNxdWFyZXJvb3QgNjA4NCAtPiA3OAorc3F0eDgwOTEgc3F1YXJlcm9vdCA2MjQxIC0+IDc5CitzcXR4ODA5MiBzcXVhcmVyb290IDY0MDAgLT4gODAKK3NxdHg4MDkzIHNxdWFyZXJvb3QgNjU2MSAtPiA4MQorc3F0eDgwOTQgc3F1YXJlcm9vdCA2NzI0IC0+IDgyCitzcXR4ODA5NSBzcXVhcmVyb290IDY4ODkgLT4gODMKK3NxdHg4MDk2IHNxdWFyZXJvb3QgNzA1NiAtPiA4NAorc3F0eDgwOTcgc3F1YXJlcm9vdCA3MjI1IC0+IDg1CitzcXR4ODA5OCBzcXVhcmVyb290IDczOTYgLT4gODYKK3NxdHg4MDk5IHNxdWFyZXJvb3QgNzU2OSAtPiA4Nworc3F0eDgxMDAgc3F1YXJlcm9vdCA3NzQ0IC0+IDg4CitzcXR4ODEwMSBzcXVhcmVyb290IDc5MjEgLT4gODkKK3NxdHg4MTAyIHNxdWFyZXJvb3QgODEwMCAtPiA5MAorc3F0eDgxMDMgc3F1YXJlcm9vdCA4MjgxIC0+IDkxCitzcXR4ODEwNCBzcXVhcmVyb290IDg0NjQgLT4gOTIKK3NxdHg4MTA1IHNxdWFyZXJvb3QgODY0OSAtPiA5Mworc3F0eDgxMDYgc3F1YXJlcm9vdCA4ODM2IC0+IDk0CitzcXR4ODEwNyBzcXVhcmVyb290IDkwMjUgLT4gOTUKK3NxdHg4MTA4IHNxdWFyZXJvb3QgOTIxNiAtPiA5Ngorc3F0eDgxMDkgc3F1YXJlcm9vdCA5NDA5IC0+IDk3CitzcXR4ODExMCBzcXVhcmVyb290IDk2MDQgLT4gOTgKK3NxdHg4MTExIHNxdWFyZXJvb3QgOTgwMSAtPiA5OQorc3F0eDgxMTIgc3F1YXJlcm9vdCAxMDAwMCAtPiAxLjBFKzIgUm91bmRlZAorc3F0eDgxMTMgc3F1YXJlcm9vdCAxMDIwMSAtPiAxLjBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMworc3F0eDgxMTQgc3F1YXJlcm9vdCA4NDEgLT4gMjkKK3NxdHg4MTE1IHNxdWFyZXJvb3QgMTYwMCAtPiA0MAorc3F0eDgxMTYgc3F1YXJlcm9vdCAyMjA5IC0+IDQ3CitzcXR4ODExNyBzcXVhcmVyb290IDk2MDQgLT4gOTgKK3NxdHg4MTE4IHNxdWFyZXJvb3QgMjEzMTYgLT4gMTQ2CitzcXR4ODExOSBzcXVhcmVyb290IDUyNDQxIC0+IDIyOQorc3F0eDgxMjAgc3F1YXJlcm9vdCA2ODY0NCAtPiAyNjIKK3NxdHg4MTIxIHNxdWFyZXJvb3QgNjk2OTYgLT4gMjY0CitzcXR4ODEyMiBzcXVhcmVyb290IDcwMjI1IC0+IDI2NQorc3F0eDgxMjMgc3F1YXJlcm9vdCA3NjcyOSAtPiAyNzcKK3NxdHg4MTI0IHNxdWFyZXJvb3QgMTMwMzIxIC0+IDM2MQorc3F0eDgxMjUgc3F1YXJlcm9vdCAxNzEzOTYgLT4gNDE0CitzcXR4ODEyNiBzcXVhcmVyb290IDI3MDQwMCAtPiA1MjAKK3NxdHg4MTI3IHNxdWFyZXJvb3QgMjc5ODQxIC0+IDUyOQorc3F0eDgxMjggc3F1YXJlcm9vdCA0MDcwNDQgLT4gNjM4CitzcXR4ODEyOSBzcXVhcmVyb290IDQwODMyMSAtPiA2MzkKK3NxdHg4MTMwIHNxdWFyZXJvb3QgNDgwMjQ5IC0+IDY5Mworc3F0eDgxMzEgc3F1YXJlcm9vdCA1MTY5NjEgLT4gNzE5CitzcXR4ODEzMiBzcXVhcmVyb290IDY5MjIyNCAtPiA4MzIKK3NxdHg4MTMzIHNxdWFyZXJvb3QgODI5OTIxIC0+IDkxMQorCistLSBzZWxlY3Rpb24gb2YgcmFuZG9tIGV4YWN0IHJlc3VsdHMKK3ByZWNpc2lvbjogNgorc3F0eDgxMzQgc3F1YXJlcm9vdCAyLjI1RS0xMiAtPiAwLjAwMDAwMTUKK3NxdHg4MTM1IHNxdWFyZXJvb3QgOC40MUUtMTQgLT4gMi45RS03CitzcXR4ODEzNiBzcXVhcmVyb290IDYuMjQxRS0xNSAtPiA3LjlFLTgKK3NxdHg4MTM3IHNxdWFyZXJvb3QgNS4wNDFFKzEzIC0+IDcuMUUrNgorc3F0eDgxMzggc3F1YXJlcm9vdCA0NzYxIC0+IDY5CitzcXR4ODEzOSBzcXVhcmVyb290IDEuMzY5RSsxNyAtPiAzLjdFKzgKK3NxdHg4MTQwIHNxdWFyZXJvb3QgMC4wMDAwMjExNiAtPiAwLjAwNDYKK3NxdHg4MTQxIHNxdWFyZXJvb3QgNy4yOUUrNCAtPiAyLjdFKzIKK3NxdHg4MTQyIHNxdWFyZXJvb3QgNC42MjRFLTEzIC0+IDYuOEUtNworc3F0eDgxNDMgc3F1YXJlcm9vdCAzLjk2OUUrNSAtPiA2LjNFKzIKK3NxdHg4MTQ0IHNxdWFyZXJvb3QgMy43MzMyMUUtMTEgLT4gMC4wMDAwMDYxMQorc3F0eDgxNDUgc3F1YXJlcm9vdCA1LjYxMDAxRSsxNyAtPiA3LjQ5RSs4CitzcXR4ODE0NiBzcXVhcmVyb290IDIuMzA0MDBFLTExIC0+IDAuMDAwMDA0ODAKK3NxdHg4MTQ3IHNxdWFyZXJvb3QgNC4zMDMzNkUrMTcgLT4gNi41NkUrOAorc3F0eDgxNDggc3F1YXJlcm9vdCAwLjA1NzEyMSAtPiAwLjIzOQorc3F0eDgxNDkgc3F1YXJlcm9vdCA3LjIyNUUrMTcgLT4gOC41RSs4CitzcXR4ODE1MCBzcXVhcmVyb290IDMuMTQ3MjFFKzEzIC0+IDUuNjFFKzYKK3NxdHg4MTUxIHNxdWFyZXJvb3QgNC42MTA0MUUrMTcgLT4gNi43OUUrOAorc3F0eDgxNTIgc3F1YXJlcm9vdCAxLjM5ODc2RS0xNSAtPiAzLjc0RS04CitzcXR4ODE1MyBzcXVhcmVyb290IDYuMTkzNjlFLTkgLT4gMC4wMDAwNzg3CitzcXR4ODE1NCBzcXVhcmVyb290IDEuNjIwNTI5RS0xMCAtPiAwLjAwMDAxMjczCitzcXR4ODE1NSBzcXVhcmVyb290IDExNzcuMTc2MSAtPiAzNC4zMQorc3F0eDgxNTYgc3F1YXJlcm9vdCA2NzA0MzM0NCAtPiA4MTg4CitzcXR4ODE1NyBzcXVhcmVyb290IDQuODRFKzYgLT4gMi4yRSszCitzcXR4ODE1OCBzcXVhcmVyb290IDEuMjM5MDRFKzExIC0+IDMuNTJFKzUKK3NxdHg4MTU5IHNxdWFyZXJvb3QgMzI2MDQxMDAgLT4gNTcxMAorc3F0eDgxNjAgc3F1YXJlcm9vdCAyLjk3NTcwMjVFLTExIC0+IDAuMDAwMDA1NDU1CitzcXR4ODE2MSBzcXVhcmVyb290IDYuMzc2MDIyNUUtOSAtPiAwLjAwMDA3OTg1CitzcXR4ODE2MiBzcXVhcmVyb290IDQuNTE5ODcyOUUtMTEgLT4gMC4wMDAwMDY3MjMKK3NxdHg4MTYzIHNxdWFyZXJvb3QgMS40NzQ1NjAwRS0xMSAtPiAwLjAwMDAwMzg0MAorc3F0eDgxNjQgc3F1YXJlcm9vdCAxODk2NDI4My4wNCAtPiA0MzU0LjgKK3NxdHg4MTY1IHNxdWFyZXJvb3QgMy4zMDg4OTU1MjlFKzEzIC0+IDUuNzUyM0UrNgorc3F0eDgxNjYgc3F1YXJlcm9vdCAwLjAwMjg1OTA0MDkgLT4gMC4wNTM0Nworc3F0eDgxNjcgc3F1YXJlcm9vdCAzNTcyLjIxMzgyNCAtPiA1OS43NjgKK3NxdHg4MTY4IHNxdWFyZXJvb3QgNC4yNzQwMjEzNzZFKzE1IC0+IDYuNTM3NkUrNworc3F0eDgxNjkgc3F1YXJlcm9vdCA0NDU1NDc2LjY0IC0+IDIxMTAuOAorc3F0eDgxNzAgc3F1YXJlcm9vdCAzOC40NCAtPiA2LjIKK3NxdHg4MTcxIHNxdWFyZXJvb3QgNjguNTU4NDAwIC0+IDguMjgwCitzcXR4ODE3MiBzcXVhcmVyb290IDcxNTQwMjAwOSAtPiAyNjc0Nworc3F0eDgxNzMgc3F1YXJlcm9vdCA5My4zNzM1NjkgLT4gOS42NjMKK3NxdHg4MTc0IHNxdWFyZXJvb3QgMi42MjE0NDAwMDAwMEUrMTUgLT4gNS4xMjAwMEUrNworc3F0eDgxNzUgc3F1YXJlcm9vdCA3LjQ4MjI1MDAwMDAwRSsxNSAtPiA4LjY1MDAwRSs3CitzcXR4ODE3NiBzcXVhcmVyb290IDMuMzg3MjQwMDAwMDBFLTkgLT4gMC4wMDAwNTgyMDAwCitzcXR4ODE3NyBzcXVhcmVyb290IDUuNjQwMDEwMDAwMDBFLTEzIC0+IDcuNTEwMDBFLTcKK3NxdHg4MTc4IHNxdWFyZXJvb3QgNS4wNjk0NDAwMDAwMEUtMTUgLT4gNy4xMjAwMEUtOAorc3F0eDgxNzkgc3F1YXJlcm9vdCA0Ljk1NjE2MDAwMDAwRSsxNyAtPiA3LjA0MDAwRSs4CitzcXR4ODE4MCBzcXVhcmVyb290IDAuMDAwMDI0MjA2NDAwMDAwMCAtPiAwLjAwNDkyMDAwCitzcXR4ODE4MSBzcXVhcmVyb290IDEuNDg5OTYwMDAwMDBFLTE1IC0+IDMuODYwMDBFLTgKK3NxdHg4MTgyIHNxdWFyZXJvb3QgOS4zNzAyNDAwMDAwMEUrMTcgLT4gOS42ODAwMEUrOAorc3F0eDgxODMgc3F1YXJlcm9vdCA3MTI4OTAwLjAwMDAgLT4gMjY3MC4wMAorc3F0eDgxODQgc3F1YXJlcm9vdCA4LjIzMTE2MTAwMDBFLTEwIC0+IDAuMDAwMDI4NjkwMAorc3F0eDgxODUgc3F1YXJlcm9vdCA0ODI3NDcwNDAwMDAgLT4gNjk0ODAwCitzcXR4ODE4NiBzcXVhcmVyb290IDQuMTQ0Nzg0NDAwMDBFKzE3IC0+IDYuNDM4MDBFKzgKK3NxdHg4MTg3IHNxdWFyZXJvb3QgNS4xMDUxMDI1MDAwMEUtNyAtPiAwLjAwMDcxNDUwMAorc3F0eDgxODggc3F1YXJlcm9vdCAzNTUwOTYuODEwMDAwIC0+IDU5NS45MDAKK3NxdHg4MTg5IHNxdWFyZXJvb3QgMTQyODg0MDAuMDAwMCAtPiAzNzgwLjAwCitzcXR4ODE5MCBzcXVhcmVyb290IDMuMzYxNjgwNDAwMDBFLTE1IC0+IDUuNzk4MDBFLTgKK3NxdHg4MTkxIHNxdWFyZXJvb3QgMS43MDg5OTU2MDAwMEUtMTMgLT4gNC4xMzQwMEUtNworc3F0eDgxOTIgc3F1YXJlcm9vdCAwLjAwMDAzNzgzNDgwMTAwMDAgLT4gMC4wMDYxNTEwMAorc3F0eDgxOTMgc3F1YXJlcm9vdCAyLjAwOTcyODkwMDAwRS0xMyAtPiA0LjQ4MzAwRS03CitzcXR4ODE5NCBzcXVhcmVyb290IDQuMDcyMjI2NTk2MDBFLTEzIC0+IDYuMzgxNDBFLTcKK3NxdHg4MTk1IHNxdWFyZXJvb3QgMTMxNDg2MDEyMTAwIC0+IDM2MjYxMAorc3F0eDgxOTYgc3F1YXJlcm9vdCA4MTgxOTI2MTE2MDAgLT4gOTA0NTQwCitzcXR4ODE5NyBzcXVhcmVyb290IDkuODU1ODMyMzYwMEUrMTYgLT4gMy4xMzk0MEUrOAorc3F0eDgxOTggc3F1YXJlcm9vdCA1NjQxLjA2MTQ0OTAwIC0+IDc1LjEwNzAKK3NxdHg4MTk5IHNxdWFyZXJvb3QgNC41ODc4OTQ3NTYwMEUrMTcgLT4gNi43NzM0MEUrOAorc3F0eDgyMDAgc3F1YXJlcm9vdCAzLjIxMzg2OTQ4MTAwRS05IC0+IDAuMDAwMDU2NjkxMAorc3F0eDgyMDEgc3F1YXJlcm9vdCAzLjk0NDE5NjAwMDBFLTggLT4gMC4wMDAxOTg2MDAKK3NxdHg4MjAyIHNxdWFyZXJvb3QgMjQyNzIzLjcyODkwMCAtPiA0OTIuNjcwCitzcXR4ODIwMyBzcXVhcmVyb290IDE4NzQuODkwMDAwMDAgLT4gNDMuMzAwMAorc3F0eDgyMDQgc3F1YXJlcm9vdCAyLjU2NzIyNTk1Njg0RSsxNSAtPiA1LjA2Njc4RSs3CitzcXR4ODIwNSBzcXVhcmVyb290IDMuOTY0Mzc3MTQ2ODlFLTE3IC0+IDYuMjk2MzNFLTkKK3NxdHg4MjA2IHNxdWFyZXJvb3QgMy44MDEwNjc3NDc4NEUtMTcgLT4gNi4xNjUyOEUtOQorc3F0eDgyMDcgc3F1YXJlcm9vdCAxLjQyNDAzNTg4NDk2RS0xMyAtPiAzLjc3MzY0RS03CitzcXR4ODIwOCBzcXVhcmVyb290IDQ2MDQuODQzODgxMDAgLT4gNjcuODU5MAorc3F0eDgyMDkgc3F1YXJlcm9vdCAyMTU3MTAwODY5LjE2IC0+IDQ2NDQ0LjYKK3NxdHg4MjEwIHNxdWFyZXJvb3QgMzU1Mjg4NTcwLjgxIC0+IDE4ODQ5LjEKK3NxdHg4MjExIHNxdWFyZXJvb3QgNC42OTc3NTkwMTYwNEUtMTEgLT4gMC4wMDAwMDY4NTQwMgorc3F0eDgyMTIgc3F1YXJlcm9vdCA4LjIyMTE1NzcwNDM2RSsxNyAtPiA5LjA2NzA2RSs4CitzcXR4ODIxMyBzcXVhcmVyb290IDcuMTY0NDM3NDQ5MDBFKzE1IC0+IDguNDY0MzBFKzcKK3NxdHg4MjE0IHNxdWFyZXJvb3QgOS40ODk5NTQ5ODg5NkUrMTUgLT4gOS43NDE2NEUrNworc3F0eDgyMTUgc3F1YXJlcm9vdCAwLjAwMDA0MTkwOTE4MDExMjkgLT4gMC4wMDY0NzM3Mworc3F0eDgyMTYgc3F1YXJlcm9vdCA1ODYyNjI3OTk2Ljg0IC0+IDc2NTY3LjgKK3NxdHg4MjE3IHNxdWFyZXJvb3QgOTM2OTUzNy4zNDA5IC0+IDMwNjAuOTcKK3NxdHg4MjE4IHNxdWFyZXJvb3QgNy43NDc5MjUyOTcyOUUrMTcgLT4gOC44MDIyM0UrOAorc3F0eDgyMTkgc3F1YXJlcm9vdCAxLjA4NjI2OTMxMzk2RSsxNyAtPiAzLjI5NTg2RSs4CitzcXR4ODIyMCBzcXVhcmVyb290IDguODk1ODQ3Mzk2ODRFLTcgLT4gMC4wMDA5NDMxNzgKK3NxdHg4MjIxIHNxdWFyZXJvb3QgNC4wMjY2MDQwODk2RS0xOCAtPiAyLjAwNjY0RS05CitzcXR4ODIyMiBzcXVhcmVyb290IDkuMjc2Njk0ODAzMzZFLTcgLT4gMC4wMDA5NjMxNTYKK3NxdHg4MjIzIHNxdWFyZXJvb3QgMC4wMDIyNTQ5NzcxNzk1NiAtPiAwLjA0NzQ4NjYKKworLS0gdGVzdCB1c2Ugb2Ygcm91bmQtaGFsZi1ldmVuIGZvciB0aWVzCitwcmVjaXNpb246IDEKK3NxdHg4MjI0IHNxdWFyZXJvb3QgMjI1IC0+IDJFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODIyNSBzcXVhcmVyb290IDYyNSAtPiAyRSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMjYgc3F1YXJlcm9vdCAxMjI1IC0+IDRFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODIyNyBzcXVhcmVyb290IDIwMjUgLT4gNEUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjI4IHNxdWFyZXJvb3QgMzAyNSAtPiA2RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMjkgc3F1YXJlcm9vdCA0MjI1IC0+IDZFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODIzMCBzcXVhcmVyb290IDU2MjUgLT4gOEUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjMxIHNxdWFyZXJvb3QgNzIyNSAtPiA4RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMzIgc3F1YXJlcm9vdCA5MDI1IC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMgorc3F0eDgyMzMgc3F1YXJlcm9vdCAxMTAyNSAtPiAxLjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODIzNCBzcXVhcmVyb290IDEzMjI1IC0+IDEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjM1IHNxdWFyZXJvb3QgMTU2MjUgLT4gMS4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMzYgc3F1YXJlcm9vdCAxODIyNSAtPiAxLjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODIzNyBzcXVhcmVyb290IDIxMDI1IC0+IDEuNEUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjM4IHNxdWFyZXJvb3QgMjQwMjUgLT4gMS42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMzkgc3F1YXJlcm9vdCAyNzIyNSAtPiAxLjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI0MCBzcXVhcmVyb290IDMwNjI1IC0+IDEuOEUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjQxIHNxdWFyZXJvb3QgMzQyMjUgLT4gMS44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNDIgc3F1YXJlcm9vdCAzODAyNSAtPiAyLjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI0MyBzcXVhcmVyb290IDQyMDI1IC0+IDIuMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjQ0IHNxdWFyZXJvb3QgNDYyMjUgLT4gMi4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNDUgc3F1YXJlcm9vdCA1MDYyNSAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI0NiBzcXVhcmVyb290IDU1MjI1IC0+IDIuNEUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjQ3IHNxdWFyZXJvb3QgNjAwMjUgLT4gMi40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNDggc3F1YXJlcm9vdCA2NTAyNSAtPiAyLjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI0OSBzcXVhcmVyb290IDcwMjI1IC0+IDIuNkUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjUwIHNxdWFyZXJvb3QgNzU2MjUgLT4gMi44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNTEgc3F1YXJlcm9vdCA4MTIyNSAtPiAyLjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI1MiBzcXVhcmVyb290IDg3MDI1IC0+IDMuMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjUzIHNxdWFyZXJvb3QgOTMwMjUgLT4gMy4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNTQgc3F1YXJlcm9vdCA5OTIyNSAtPiAzLjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI1NSBzcXVhcmVyb290IDEwNTYyNSAtPiAzLjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI1NiBzcXVhcmVyb290IDExMjIyNSAtPiAzLjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI1NyBzcXVhcmVyb290IDExOTAyNSAtPiAzLjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI1OCBzcXVhcmVyb290IDEyNjAyNSAtPiAzLjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI1OSBzcXVhcmVyb290IDEzMzIyNSAtPiAzLjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2MCBzcXVhcmVyb290IDE0MDYyNSAtPiAzLjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2MSBzcXVhcmVyb290IDE0ODIyNSAtPiAzLjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2MiBzcXVhcmVyb290IDE1NjAyNSAtPiA0LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2MyBzcXVhcmVyb290IDE2NDAyNSAtPiA0LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2NCBzcXVhcmVyb290IDE3MjIyNSAtPiA0LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2NSBzcXVhcmVyb290IDE4MDYyNSAtPiA0LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2NiBzcXVhcmVyb290IDE4OTIyNSAtPiA0LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2NyBzcXVhcmVyb290IDE5ODAyNSAtPiA0LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2OCBzcXVhcmVyb290IDIwNzAyNSAtPiA0LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI2OSBzcXVhcmVyb290IDIxNjIyNSAtPiA0LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3MCBzcXVhcmVyb290IDIyNTYyNSAtPiA0LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3MSBzcXVhcmVyb290IDIzNTIyNSAtPiA0LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3MiBzcXVhcmVyb290IDI0NTAyNSAtPiA1LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3MyBzcXVhcmVyb290IDI1NTAyNSAtPiA1LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3NCBzcXVhcmVyb290IDI2NTIyNSAtPiA1LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3NSBzcXVhcmVyb290IDI3NTYyNSAtPiA1LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3NiBzcXVhcmVyb290IDI4NjIyNSAtPiA1LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3NyBzcXVhcmVyb290IDI5NzAyNSAtPiA1LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3OCBzcXVhcmVyb290IDMwODAyNSAtPiA1LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI3OSBzcXVhcmVyb290IDMxOTIyNSAtPiA1LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4MCBzcXVhcmVyb290IDMzMDYyNSAtPiA1LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4MSBzcXVhcmVyb290IDM0MjIyNSAtPiA1LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4MiBzcXVhcmVyb290IDM1NDAyNSAtPiA2LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4MyBzcXVhcmVyb290IDM2NjAyNSAtPiA2LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4NCBzcXVhcmVyb290IDM3ODIyNSAtPiA2LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4NSBzcXVhcmVyb290IDM5MDYyNSAtPiA2LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4NiBzcXVhcmVyb290IDQwMzIyNSAtPiA2LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4NyBzcXVhcmVyb290IDQxNjAyNSAtPiA2LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4OCBzcXVhcmVyb290IDQyOTAyNSAtPiA2LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI4OSBzcXVhcmVyb290IDQ0MjIyNSAtPiA2LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5MCBzcXVhcmVyb290IDQ1NTYyNSAtPiA2LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5MSBzcXVhcmVyb290IDQ2OTIyNSAtPiA2LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5MiBzcXVhcmVyb290IDQ4MzAyNSAtPiA3LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5MyBzcXVhcmVyb290IDQ5NzAyNSAtPiA3LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5NCBzcXVhcmVyb290IDUxMTIyNSAtPiA3LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5NSBzcXVhcmVyb290IDUyNTYyNSAtPiA3LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5NiBzcXVhcmVyb290IDU0MDIyNSAtPiA3LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5NyBzcXVhcmVyb290IDU1NTAyNSAtPiA3LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5OCBzcXVhcmVyb290IDU3MDAyNSAtPiA3LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI5OSBzcXVhcmVyb290IDU4NTIyNSAtPiA3LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwMCBzcXVhcmVyb290IDYwMDYyNSAtPiA3LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwMSBzcXVhcmVyb290IDYxNjIyNSAtPiA3LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwMiBzcXVhcmVyb290IDYzMjAyNSAtPiA4LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwMyBzcXVhcmVyb290IDY0ODAyNSAtPiA4LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwNCBzcXVhcmVyb290IDY2NDIyNSAtPiA4LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwNSBzcXVhcmVyb290IDY4MDYyNSAtPiA4LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwNiBzcXVhcmVyb290IDY5NzIyNSAtPiA4LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwNyBzcXVhcmVyb290IDcxNDAyNSAtPiA4LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwOCBzcXVhcmVyb290IDczMTAyNSAtPiA4LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMwOSBzcXVhcmVyb290IDc0ODIyNSAtPiA4LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxMCBzcXVhcmVyb290IDc2NTYyNSAtPiA4LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxMSBzcXVhcmVyb290IDc4MzIyNSAtPiA4LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxMiBzcXVhcmVyb290IDgwMTAyNSAtPiA5LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxMyBzcXVhcmVyb290IDgxOTAyNSAtPiA5LjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxNCBzcXVhcmVyb290IDgzNzIyNSAtPiA5LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxNSBzcXVhcmVyb290IDg1NTYyNSAtPiA5LjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxNiBzcXVhcmVyb290IDg3NDIyNSAtPiA5LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxNyBzcXVhcmVyb290IDg5MzAyNSAtPiA5LjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxOCBzcXVhcmVyb290IDkxMjAyNSAtPiA5LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMxOSBzcXVhcmVyb290IDkzMTIyNSAtPiA5LjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMyMCBzcXVhcmVyb290IDk1MDYyNSAtPiA5LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMyMSBzcXVhcmVyb290IDk3MDIyNSAtPiA5LjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMyMiBzcXVhcmVyb290IDk5MDAyNSAtPiAxLjBFKzMgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogNgorc3F0eDgzMjMgc3F1YXJlcm9vdCA4ODk3NTczNDk2MzAyNSAtPiA5LjQzMjcwRSs2IEluZXhhY3QgUm91bmRlZAorc3F0eDgzMjQgc3F1YXJlcm9vdCA3MTA4NTU1NTAwMDYyNSAtPiA4LjQzMTIyRSs2IEluZXhhY3QgUm91bmRlZAorc3F0eDgzMjUgc3F1YXJlcm9vdCAzOTk5NDMwNC4wNTEwMjUgLT4gNjMyNC4xMCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzI2IHNxdWFyZXJvb3QgMC4wMDAwMDczMjcxNzIyNjU2MjUgLT4gMC4wMDI3MDY4OCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzI3IHNxdWFyZXJvb3QgMS4wMjU4NjAwNDM5MDI1RS0xMyAtPiAzLjIwMjkwRS03IEluZXhhY3QgUm91bmRlZAorc3F0eDgzMjggc3F1YXJlcm9vdCAwLjAwMzQ1ODA1NzQyNzU2MjUgLT4gMC4wNTg4MDUyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMjkgc3F1YXJlcm9vdCA3LjY4NDIzMTc3MDA2MjVFLTcgLT4gMC4wMDA4NzY1OTggSW5leGFjdCBSb3VuZGVkCitzcXR4ODMzMCBzcXVhcmVyb290IDEyNjM4MzQ0OTUuMjAyNSAtPiAzNTU1MC40IEluZXhhY3QgUm91bmRlZAorc3F0eDgzMzEgc3F1YXJlcm9vdCA0MzM5NzA2NjY0NjAuMjUgLT4gNjU4NzY0IEluZXhhY3QgUm91bmRlZAorc3F0eDgzMzIgc3F1YXJlcm9vdCA0LjU4NzkyODYyMzA2MjVFLTcgLT4gMC4wMDA2NzczNDIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMzMyBzcXVhcmVyb290IDAuMDAyOTMwNTYwMzMwNjIyNSAtPiAwLjA1NDEzNDYgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMzNCBzcXVhcmVyb290IDcwMjE4MjgyLjczMzIyNSAtPiA4Mzc5LjY0IEluZXhhY3QgUm91bmRlZAorc3F0eDgzMzUgc3F1YXJlcm9vdCAxMTk0MjUxOS4wODIwMjUgLT4gMzQ1NS44MCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzM2IHNxdWFyZXJvb3QgMC4wMDIxMjMwNjY4OTA1NjI1IC0+IDAuMDQ2MDc2OCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzM3IHNxdWFyZXJvb3QgMC45MDA4MTgzMzQxMTAyNSAtPiAwLjk0OTExNCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzM4IHNxdWFyZXJvb3QgNS41MTA0MTIwOTM2MjI1RS0xNyAtPiA3LjQyMzIyRS05IEluZXhhY3QgUm91bmRlZAorc3F0eDgzMzkgc3F1YXJlcm9vdCAwLjEwNTMwNDQ2ODU0MjI1IC0+IDAuMzI0NTA2IEluZXhhY3QgUm91bmRlZAorc3F0eDgzNDAgc3F1YXJlcm9vdCA4LjcwNjA2OTg2NjAyNUUtMTQgLT4gMi45NTA2MEUtNyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzQxIHNxdWFyZXJvb3QgMjM4MzguNTg4MDA2MjUgLT4gMTU0LjM5OCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzQyIHNxdWFyZXJvb3QgMC4wMDEzNDI2OTExMjc1NjI1IC0+IDAuMDM2NjQyOCBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCB1c2Ugb2Ygcm91bmQtaGFsZi1ldmVuIGluIHVuZGVyZmxvdyBzaXR1YXRpb25zCisKKy0tIHByZWNpc2lvbnMgMjsgYWxsIGNhc2VzIHdoZXJlIHJlc3VsdCBpcyBib3RoIHN1Ym5vcm1hbCBhbmQgYSB0aWUKK3ByZWNpc2lvbjogMgorc3F0eDgzNDMgc3F1YXJlcm9vdCAyLjVFLTIxIC0+IDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NxdHg4MzQ0IHNxdWFyZXJvb3QgMi4yNUUtMjAgLT4gMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzQ1IHNxdWFyZXJvb3QgNi4yNUUtMjAgLT4gMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzQ2IHNxdWFyZXJvb3QgMS4yMjVFLTE5IC0+IDRFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM0NyBzcXVhcmVyb290IDIuMDI1RS0xOSAtPiA0RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNDggc3F1YXJlcm9vdCAzLjAyNUUtMTkgLT4gNkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzQ5IHNxdWFyZXJvb3QgNC4yMjVFLTE5IC0+IDZFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM1MCBzcXVhcmVyb290IDUuNjI1RS0xOSAtPiA4RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNTEgc3F1YXJlcm9vdCA3LjIyNUUtMTkgLT4gOEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzUyIHNxdWFyZXJvb3QgOS4wMjVFLTE5IC0+IDEuMEUtOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBwcmVjaXNpb24gMywgaW5wdXQgcHJlY2lzaW9uIDw9IDUKK3ByZWNpc2lvbjogMworc3F0eDgzNTMgc3F1YXJlcm9vdCAyLjVFLTIzIC0+IDBFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NxdHg4MzU0IHNxdWFyZXJvb3QgMi4yNUUtMjIgLT4gMkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzU1IHNxdWFyZXJvb3QgNi4yNUUtMjIgLT4gMkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzU2IHNxdWFyZXJvb3QgMS4yMjVFLTIxIC0+IDRFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM1NyBzcXVhcmVyb290IDIuMDI1RS0yMSAtPiA0RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNTggc3F1YXJlcm9vdCAzLjAyNUUtMjEgLT4gNkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzU5IHNxdWFyZXJvb3QgNC4yMjVFLTIxIC0+IDZFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM2MCBzcXVhcmVyb290IDUuNjI1RS0yMSAtPiA4RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNjEgc3F1YXJlcm9vdCA3LjIyNUUtMjEgLT4gOEUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzYyIHNxdWFyZXJvb3QgOS4wMjVFLTIxIC0+IDEuMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzYzIHNxdWFyZXJvb3QgMS4xMDI1RS0yMCAtPiAxLjBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM2NCBzcXVhcmVyb290IDEuMzIyNUUtMjAgLT4gMS4yRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNjUgc3F1YXJlcm9vdCAxLjU2MjVFLTIwIC0+IDEuMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzY2IHNxdWFyZXJvb3QgMS44MjI1RS0yMCAtPiAxLjRFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM2NyBzcXVhcmVyb290IDIuMTAyNUUtMjAgLT4gMS40RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNjggc3F1YXJlcm9vdCAyLjQwMjVFLTIwIC0+IDEuNkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzY5IHNxdWFyZXJvb3QgMi43MjI1RS0yMCAtPiAxLjZFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM3MCBzcXVhcmVyb290IDMuMDYyNUUtMjAgLT4gMS44RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNzEgc3F1YXJlcm9vdCAzLjQyMjVFLTIwIC0+IDEuOEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzcyIHNxdWFyZXJvb3QgMy44MDI1RS0yMCAtPiAyLjBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM3MyBzcXVhcmVyb290IDQuMjAyNUUtMjAgLT4gMi4wRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNzQgc3F1YXJlcm9vdCA0LjYyMjVFLTIwIC0+IDIuMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4Mzc1IHNxdWFyZXJvb3QgNS4wNjI1RS0yMCAtPiAyLjJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM3NiBzcXVhcmVyb290IDUuNTIyNUUtMjAgLT4gMi40RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNzcgc3F1YXJlcm9vdCA2LjAwMjVFLTIwIC0+IDIuNEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4Mzc4IHNxdWFyZXJvb3QgNi41MDI1RS0yMCAtPiAyLjZFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM3OSBzcXVhcmVyb290IDcuMDIyNUUtMjAgLT4gMi42RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzODAgc3F1YXJlcm9vdCA3LjU2MjVFLTIwIC0+IDIuOEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzgxIHNxdWFyZXJvb3QgOC4xMjI1RS0yMCAtPiAyLjhFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM4MiBzcXVhcmVyb290IDguNzAyNUUtMjAgLT4gMy4wRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzODMgc3F1YXJlcm9vdCA5LjMwMjVFLTIwIC0+IDMuMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4Mzg0IHNxdWFyZXJvb3QgOS45MjI1RS0yMCAtPiAzLjJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tcHJlY2lzaW9uIDQsIGlucHV0IHByZWNpc2lvbiA8PSA0CitwcmVjaXNpb246IDQKK3NxdHg4Mzg1IHNxdWFyZXJvb3QgMi41RS0yNSAtPiAwRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitzcXR4ODM4NiBzcXVhcmVyb290IDIuMjVFLTI0IC0+IDJFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM4NyBzcXVhcmVyb290IDYuMjVFLTI0IC0+IDJFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM4OCBzcXVhcmVyb290IDEuMjI1RS0yMyAtPiA0RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzODkgc3F1YXJlcm9vdCAyLjAyNUUtMjMgLT4gNEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzkwIHNxdWFyZXJvb3QgMy4wMjVFLTIzIC0+IDZFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM5MSBzcXVhcmVyb290IDQuMjI1RS0yMyAtPiA2RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzOTIgc3F1YXJlcm9vdCA1LjYyNUUtMjMgLT4gOEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzkzIHNxdWFyZXJvb3QgNy4yMjVFLTIzIC0+IDhFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM5NCBzcXVhcmVyb290IDkuMDI1RS0yMyAtPiAxLjBFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tcHJlY2lzaW9uIDUsIGlucHV0IHByZWNpc2lvbiA8PSA1CitwcmVjaXNpb246IDUKK3NxdHg4Mzk1IHNxdWFyZXJvb3QgMi41RS0yNyAtPiAwRS0xMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCAgQ2xhbXBlZAorc3F0eDgzOTYgc3F1YXJlcm9vdCAyLjI1RS0yNiAtPiAyRS0xMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzOTcgc3F1YXJlcm9vdCA2LjI1RS0yNiAtPiAyRS0xMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzOTggc3F1YXJlcm9vdCAxLjIyNUUtMjUgLT4gNEUtMTMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4Mzk5IHNxdWFyZXJvb3QgMi4wMjVFLTI1IC0+IDRFLTEzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQwMCBzcXVhcmVyb290IDMuMDI1RS0yNSAtPiA2RS0xMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MDEgc3F1YXJlcm9vdCA0LjIyNUUtMjUgLT4gNkUtMTMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDAyIHNxdWFyZXJvb3QgNS42MjVFLTI1IC0+IDhFLTEzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQwMyBzcXVhcmVyb290IDcuMjI1RS0yNSAtPiA4RS0xMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MDQgc3F1YXJlcm9vdCA5LjAyNUUtMjUgLT4gMS4wRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MDUgc3F1YXJlcm9vdCAxLjEwMjVFLTI0IC0+IDEuMEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDA2IHNxdWFyZXJvb3QgMS4zMjI1RS0yNCAtPiAxLjJFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQwNyBzcXVhcmVyb290IDEuNTYyNUUtMjQgLT4gMS4yRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MDggc3F1YXJlcm9vdCAxLjgyMjVFLTI0IC0+IDEuNEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDA5IHNxdWFyZXJvb3QgMi4xMDI1RS0yNCAtPiAxLjRFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQxMCBzcXVhcmVyb290IDIuNDAyNUUtMjQgLT4gMS42RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MTEgc3F1YXJlcm9vdCAyLjcyMjVFLTI0IC0+IDEuNkUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDEyIHNxdWFyZXJvb3QgMy4wNjI1RS0yNCAtPiAxLjhFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQxMyBzcXVhcmVyb290IDMuNDIyNUUtMjQgLT4gMS44RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MTQgc3F1YXJlcm9vdCAzLjgwMjVFLTI0IC0+IDIuMEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDE1IHNxdWFyZXJvb3QgNC4yMDI1RS0yNCAtPiAyLjBFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQxNiBzcXVhcmVyb290IDQuNjIyNUUtMjQgLT4gMi4yRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MTcgc3F1YXJlcm9vdCA1LjA2MjVFLTI0IC0+IDIuMkUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDE4IHNxdWFyZXJvb3QgNS41MjI1RS0yNCAtPiAyLjRFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQxOSBzcXVhcmVyb290IDYuMDAyNUUtMjQgLT4gMi40RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MjAgc3F1YXJlcm9vdCA2LjUwMjVFLTI0IC0+IDIuNkUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDIxIHNxdWFyZXJvb3QgNy4wMjI1RS0yNCAtPiAyLjZFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQyMiBzcXVhcmVyb290IDcuNTYyNUUtMjQgLT4gMi44RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MjMgc3F1YXJlcm9vdCA4LjEyMjVFLTI0IC0+IDIuOEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDI0IHNxdWFyZXJvb3QgOC43MDI1RS0yNCAtPiAzLjBFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQyNSBzcXVhcmVyb290IDkuMzAyNUUtMjQgLT4gMy4wRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MjYgc3F1YXJlcm9vdCA5LjkyMjVFLTI0IC0+IDMuMkUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gYSByYW5kb20gc2VsZWN0aW9uIG9mIHZhbHVlcyB0aGF0IFB5dGhvbjIuNS4xIHJvdW5kcyBpbmNvcnJlY3RseQorcHJlY2lzaW9uOiAxCitzcXR4ODQyNyBzcXVhcmVyb290IDIyNyAtPiAyRSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0Mjggc3F1YXJlcm9vdCA2MjUgLT4gMkUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDI5IHNxdWFyZXJvb3QgMTIxNSAtPiAzRSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MzAgc3F1YXJlcm9vdCAyMDA4IC0+IDRFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQzMSBzcXVhcmVyb290IDIwMjAgLT4gNEUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDMyIHNxdWFyZXJvb3QgMjAyNiAtPiA1RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MzMgc3F1YXJlcm9vdCAyMDI3IC0+IDVFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQzNCBzcXVhcmVyb290IDIwNjUgLT4gNUUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDM1IHNxdWFyZXJvb3QgMjA3NSAtPiA1RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MzYgc3F1YXJlcm9vdCAyMDg4IC0+IDVFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQzNyBzcXVhcmVyb290IDMwNDkgLT4gNkUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDM4IHNxdWFyZXJvb3QgMzA1NyAtPiA2RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0Mzkgc3F1YXJlcm9vdCAzMDYxIC0+IDZFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ0MCBzcXVhcmVyb290IDMwOTIgLT4gNkUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDQxIHNxdWFyZXJvb3QgNDIyMiAtPiA2RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NDIgc3F1YXJlcm9vdCA1Njc2IC0+IDhFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ0MyBzcXVhcmVyb290IDU2ODYgLT4gOEUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDQ0IHNxdWFyZXJvb3QgNzIxNSAtPiA4RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NDUgc3F1YXJlcm9vdCA5MDg2IC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ0NiBzcXVhcmVyb290IDkwOTUgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAyCitzcXR4ODQ0NyBzcXVhcmVyb290IDEyNjYgLT4gMzYgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ0OCBzcXVhcmVyb290IDI1NTIgLT4gNTEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ0OSBzcXVhcmVyb290IDU1NTQgLT4gNzUgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ1MCBzcXVhcmVyb290IDc4MzIgLT4gODggSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ1MSBzcXVhcmVyb290IDEzMjAxIC0+IDEuMUUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDUyIHNxdWFyZXJvb3QgMTU2OTUgLT4gMS4zRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NTMgc3F1YXJlcm9vdCAxODI3MiAtPiAxLjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ1NCBzcXVhcmVyb290IDIxMDI2IC0+IDEuNUUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDU1IHNxdWFyZXJvb3QgMjQwNjkgLT4gMS42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NTYgc3F1YXJlcm9vdCAzNDI3NyAtPiAxLjlFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ1NyBzcXVhcmVyb290IDQ2MjMzIC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDU4IHNxdWFyZXJvb3QgNDYyNTEgLT4gMi4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NTkgc3F1YXJlcm9vdCA0NjI3NiAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ2MCBzcXVhcmVyb290IDcwMjE0IC0+IDIuNkUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDYxIHNxdWFyZXJvb3QgODEyNDkgLT4gMi45RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NjIgc3F1YXJlcm9vdCA4MTI2NiAtPiAyLjlFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ2MyBzcXVhcmVyb290IDkzMDY1IC0+IDMuMUUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDY0IHNxdWFyZXJvb3QgOTMwODMgLT4gMy4xRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NjUgc3F1YXJlcm9vdCA5OTIzMCAtPiAzLjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ2NiBzcXVhcmVyb290IDk5MjcxIC0+IDMuMkUrMiBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAzCitzcXR4ODQ2NyBzcXVhcmVyb290IDExMzQ5IC0+IDEwNyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDY4IHNxdWFyZXJvb3QgMjY3MzggLT4gMTY0IEluZXhhY3QgUm91bmRlZAorc3F0eDg0Njkgc3F1YXJlcm9vdCAzMTUwOCAtPiAxNzggSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ3MCBzcXVhcmVyb290IDQ0NzM0IC0+IDIxMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDcxIHNxdWFyZXJvb3QgNDQ3MzggLT4gMjEyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NzIgc3F1YXJlcm9vdCA1MTMwNyAtPiAyMjcgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ3MyBzcXVhcmVyb290IDYyMjU5IC0+IDI1MCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDc0IHNxdWFyZXJvb3QgNzU5MDEgLT4gMjc2IEluZXhhY3QgUm91bmRlZAorc3F0eDg0NzUgc3F1YXJlcm9vdCA3NjQ1NyAtPiAyNzcgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ3NiBzcXVhcmVyb290IDE4MDI4NyAtPiA0MjUgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ3NyBzcXVhcmVyb290IDIwMjA1MyAtPiA0NTAgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ3OCBzcXVhcmVyb290IDIzNTc0NyAtPiA0ODYgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ3OSBzcXVhcmVyb290IDI1NjUzNyAtPiA1MDYgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ4MCBzcXVhcmVyb290IDI5OTc3MiAtPiA1NDggSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ4MSBzcXVhcmVyb290IDQxNTMzNyAtPiA2NDQgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ4MiBzcXVhcmVyb290IDYxNzA2NyAtPiA3ODYgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ4MyBzcXVhcmVyb290IDYyODAyMiAtPiA3OTIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ4NCBzcXVhcmVyb290IDY0NTYyOSAtPiA4MDQgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ4NSBzcXVhcmVyb290IDc4NTgzNiAtPiA4ODYgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ4NiBzcXVhcmVyb290IDk5MzA2NiAtPiA5OTcgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogNgorc3F0eDg0ODcgc3F1YXJlcm9vdCAxNDkxNzc4MSAtPiAzODYyLjM1IEluZXhhY3QgUm91bmRlZAorc3F0eDg0ODggc3F1YXJlcm9vdCAxNzIzNzIzOCAtPiA0MTUxLjc4IEluZXhhY3QgUm91bmRlZAorc3F0eDg0ODkgc3F1YXJlcm9vdCAxODA1NDQ2MyAtPiA0MjQ5LjA1IEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTAgc3F1YXJlcm9vdCAxOTk5MDY5NCAtPiA0NDcxLjEwIEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTEgc3F1YXJlcm9vdCAyOTA2MTg1NSAtPiA1MzkwLjkwIEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTIgc3F1YXJlcm9vdCA0OTE2NjI1NyAtPiA3MDExLjg3IEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTMgc3F1YXJlcm9vdCA1MzA4MjA4NiAtPiA3Mjg1Ljc1IEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTQgc3F1YXJlcm9vdCA1Njc4NzkwOSAtPiA3NTM1Ljc4IEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTUgc3F1YXJlcm9vdCA4MTE0MDAxOSAtPiA5MDA3Ljc4IEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTYgc3F1YXJlcm9vdCA4Nzk3NzU1NCAtPiA5Mzc5LjY0IEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTcgc3F1YXJlcm9vdCA5MzYyNDY4MyAtPiA5Njc1Ljk4IEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTggc3F1YXJlcm9vdCA5ODczMjc0NyAtPiA5OTM2LjQ0IEluZXhhY3QgUm91bmRlZAorc3F0eDg0OTkgc3F1YXJlcm9vdCA5OTIyMjgxMyAtPiA5OTYxLjA2IEluZXhhY3QgUm91bmRlZAorc3F0eDg1MDAgc3F1YXJlcm9vdCAxNDM4ODM2MjYgLT4gMTE5OTUuMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTAxIHNxdWFyZXJvb3QgMTgwNDMzMzAxIC0+IDEzNDMyLjUgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUwMiBzcXVhcmVyb290IDIyNzAzNDAyMCAtPiAxNTA2Ny42IEluZXhhY3QgUm91bmRlZAorc3F0eDg1MDMgc3F1YXJlcm9vdCAyODMyNTM5OTIgLT4gMTY4MzAuMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTA0IHNxdWFyZXJvb3QgNjE3MDQ3OTU0IC0+IDI0ODQwLjQgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUwNSBzcXVhcmVyb290IDczNjg3MDA5NCAtPiAyNzE0NS40IEluZXhhY3QgUm91bmRlZAorc3F0eDg1MDYgc3F1YXJlcm9vdCA4OTczMjI5MTUgLT4gMjk5NTUuMyBJbmV4YWN0IFJvdW5kZWQKKworLS0gcmVzdWx0cyBjbG9zZSB0byBtaW5pbXVtIG5vcm1hbAorcHJlY2lzaW9uOiAxCitzcXR4ODUwNyBzcXVhcmVyb290IDFFLTIwIC0+IDBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorc3F0eDg1MDggc3F1YXJlcm9vdCAxRS0xOSAtPiAwRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NxdHg4NTA5IHNxdWFyZXJvb3QgMUUtMTggLT4gMUUtOQorCitwcmVjaXNpb246IDIKK3NxdHg4NTEwIHNxdWFyZXJvb3QgOC4xRS0xOSAtPiA5RS0xMCBTdWJub3JtYWwKK3NxdHg4NTExIHNxdWFyZXJvb3QgOC4xMEUtMTkgLT4gOUUtMTAgU3Vibm9ybWFsIFJvdW5kZWQKK3NxdHg4NTEyIHNxdWFyZXJvb3QgOS4wRS0xOSAtPiA5RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1MTMgc3F1YXJlcm9vdCA5LjAyRS0xOSAtPiA5RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1MTQgc3F1YXJlcm9vdCA5LjAzRS0xOSAtPiAxLjBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTE1IHNxdWFyZXJvb3QgOS4xRS0xOSAtPiAxLjBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTE2IHNxdWFyZXJvb3QgOS45RS0xOSAtPiAxLjBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTE3IHNxdWFyZXJvb3QgOS45MUUtMTkgLT4gMS4wRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUxOCBzcXVhcmVyb290IDkuOTJFLTE5IC0+IDEuMEUtOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1MTkgc3F1YXJlcm9vdCA5Ljk1RS0xOSAtPiAxLjBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTIwIHNxdWFyZXJvb3QgOS45OEUtMTkgLT4gMS4wRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUyMSBzcXVhcmVyb290IDkuOTlFLTE5IC0+IDEuMEUtOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1MjIgc3F1YXJlcm9vdCAxRS0xOCAtPiAxRS05CitzcXR4ODUyMyBzcXVhcmVyb290IDEuMEUtMTggLT4gMS4wRS05CitzcXR4ODUyNCBzcXVhcmVyb290IDEuMDBFLTE4IC0+IDEuMEUtOQorc3F0eDg1MjUgc3F1YXJlcm9vdCAxLjAwMEUtMTggLT4gMS4wRS05IFJvdW5kZWQKK3NxdHg4NTI2IHNxdWFyZXJvb3QgMS4wMDAwRS0xOCAtPiAxLjBFLTkgUm91bmRlZAorc3F0eDg1Mjcgc3F1YXJlcm9vdCAxLjAxRS0xOCAtPiAxLjBFLTkgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUyOCBzcXVhcmVyb290IDEuMDJFLTE4IC0+IDEuMEUtOSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTI5IHNxdWFyZXJvb3QgMS4xRS0xOCAtPiAxLjBFLTkgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMworc3F0eDg1MzAgc3F1YXJlcm9vdCA4LjFFLTE5IC0+IDlFLTEwIFN1Ym5vcm1hbAorc3F0eDg1MzEgc3F1YXJlcm9vdCA4LjEwRS0xOSAtPiA5LjBFLTEwIFN1Ym5vcm1hbAorc3F0eDg1MzIgc3F1YXJlcm9vdCA4LjEwMEUtMTkgLT4gOS4wRS0xMCBTdWJub3JtYWwKK3NxdHg4NTMzIHNxdWFyZXJvb3QgOC4xMDAwRS0xOSAtPiA5LjBFLTEwIFN1Ym5vcm1hbCBSb3VuZGVkCitzcXR4ODUzNCBzcXVhcmVyb290IDkuOUUtMTkgLT4gOS45RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1MzUgc3F1YXJlcm9vdCA5LjkxRS0xOSAtPiAxLjAwRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUzNiBzcXVhcmVyb290IDkuOTlFLTE5IC0+IDEuMDBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTM3IHNxdWFyZXJvb3QgOS45OThFLTE5IC0+IDEuMDBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTM4IHNxdWFyZXJvb3QgMUUtMTggLT4gMUUtOQorc3F0eDg1Mzkgc3F1YXJlcm9vdCAxLjBFLTE4IC0+IDEuMEUtOQorc3F0eDg1NDAgc3F1YXJlcm9vdCAxLjAwRS0xOCAtPiAxLjBFLTkKK3NxdHg4NTQxIHNxdWFyZXJvb3QgMS4wMDBFLTE4IC0+IDEuMDBFLTkKK3NxdHg4NTQyIHNxdWFyZXJvb3QgMS4wMDAwRS0xOCAtPiAxLjAwRS05CitzcXR4ODU0MyBzcXVhcmVyb290IDEuMDAwMDBFLTE4IC0+IDEuMDBFLTkgUm91bmRlZAorc3F0eDg1NDQgc3F1YXJlcm9vdCAxLjAwMDAwMEUtMTggLT4gMS4wMEUtOSBSb3VuZGVkCitzcXR4ODU0NSBzcXVhcmVyb290IDEuMDFFLTE4IC0+IDEuMDBFLTkgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU0NiBzcXVhcmVyb290IDEuMDJFLTE4IC0+IDEuMDFFLTkgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJlc3VsdCBleGFjdGx5IHJlcHJlc2VudGFibGUgd2l0aCBwcmVjaXNpb24gcCwgYnV0IG5vdCBuZWNlc3NhcmlseQorLS0gZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGEgc3Vibm9ybWFsOyAgY2hlY2sgdGhlIGNvcnJlY3QgZmxhZ3MgYXJlIHJhaXNlZAorcHJlY2lzaW9uOiAyCitzcXR4ODU0NyBzcXVhcmVyb290IDEuMjFFLTIwIC0+IDFFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU0OCBzcXVhcmVyb290IDEuNDRFLTIwIC0+IDFFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU0OSBzcXVhcmVyb290IDkuNjFFLTIwIC0+IDNFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU1MCBzcXVhcmVyb290IDguODM2RS0xOSAtPiA5RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NTEgc3F1YXJlcm9vdCA5LjIxNkUtMTkgLT4gMS4wRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMworc3F0eDg1NTIgc3F1YXJlcm9vdCAxLjIxRS0yMiAtPiAxRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NTMgc3F1YXJlcm9vdCAxLjIxRS0yMCAtPiAxLjFFLTEwIFN1Ym5vcm1hbAorc3F0eDg1NTQgc3F1YXJlcm9vdCAxLjk2RS0yMiAtPiAxRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NTUgc3F1YXJlcm9vdCAxLjk2RS0yMCAtPiAxLjRFLTEwIFN1Ym5vcm1hbAorc3F0eDg1NTYgc3F1YXJlcm9vdCAyLjU2RS0yMiAtPiAyRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NTcgc3F1YXJlcm9vdCA0LjAwRS0yMiAtPiAyRS0xMSBTdWJub3JtYWwgUm91bmRlZAorc3F0eDg1NTggc3F1YXJlcm9vdCA3Ljg0RS0yMiAtPiAzRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NTkgc3F1YXJlcm9vdCA5LjgwMUUtMjEgLT4gMS4wRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NjAgc3F1YXJlcm9vdCA5LjgwMUUtMTkgLT4gOS45RS0xMCBTdWJub3JtYWwKK3NxdHg4NTYxIHNxdWFyZXJvb3QgMS4wMjAxRS0yMCAtPiAxLjBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU2MiBzcXVhcmVyb290IDEuMTAyNUUtMjAgLT4gMS4wRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NjMgc3F1YXJlcm9vdCAxLjEyMzZFLTIwIC0+IDEuMUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTY0IHNxdWFyZXJvb3QgMS4yOTk2RS0yMCAtPiAxLjFFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU2NSBzcXVhcmVyb290IDEuMzIyNUUtMjAgLT4gMS4yRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBBIHNlbGVjdGlvbiBvZiBzdWJub3JtYWwgcmVzdWx0cyBwcm9uZSB0byBkb3VibGUgcm91bmRpbmcgZXJyb3JzCitwcmVjaXNpb246IDIKK3NxdHg4NTY2IHNxdWFyZXJvb3QgMi4zRS0yMSAtPiAwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitzcXR4ODU2NyBzcXVhcmVyb290IDIuNEUtMjEgLT4gMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorc3F0eDg1Njggc3F1YXJlcm9vdCAyLjVFLTIxIC0+IDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NxdHg4NTY5IHNxdWFyZXJvb3QgMi42RS0yMSAtPiAxRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NzAgc3F1YXJlcm9vdCAyLjdFLTIxIC0+IDFFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU3MSBzcXVhcmVyb290IDIuOEUtMjEgLT4gMUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTcyIHNxdWFyZXJvb3QgMi4yRS0yMCAtPiAxRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NzMgc3F1YXJlcm9vdCAyLjNFLTIwIC0+IDJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU3NCBzcXVhcmVyb290IDIuNEUtMjAgLT4gMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTc1IHNxdWFyZXJvb3QgNi4yRS0yMCAtPiAyRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NzYgc3F1YXJlcm9vdCA2LjNFLTIwIC0+IDNFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU3NyBzcXVhcmVyb290IDYuNEUtMjAgLT4gM0UtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTc4IHNxdWFyZXJvb3QgNi41RS0yMCAtPiAzRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1Nzkgc3F1YXJlcm9vdCAxLjJFLTE5IC0+IDNFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU4MCBzcXVhcmVyb290IDIuMEUtMTkgLT4gNEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTgxIHNxdWFyZXJvb3QgNC4yRS0xOSAtPiA2RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1ODIgc3F1YXJlcm9vdCA1LjZFLTE5IC0+IDdFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU4MyBzcXVhcmVyb290IDUuN0UtMTkgLT4gOEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTg0IHNxdWFyZXJvb3QgOS4wRS0xOSAtPiA5RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1ODUgc3F1YXJlcm9vdCA5LjFFLTE5IC0+IDEuMEUtOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzCitzcXR4ODU4NiBzcXVhcmVyb290IDIuNkUtMjMgLT4gMUUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTg3IHNxdWFyZXJvb3QgMi4yMkUtMjIgLT4gMUUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTg4IHNxdWFyZXJvb3QgNi4wN0UtMjIgLT4gMkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTg5IHNxdWFyZXJvb3QgNi4yNUUtMjIgLT4gMkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTkwIHNxdWFyZXJvb3QgNi40NUUtMjIgLT4gM0UtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTkxIHNxdWFyZXJvb3QgNi41MEUtMjIgLT4gM0UtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTkyIHNxdWFyZXJvb3QgMS4yMkUtMjEgLT4gM0UtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTkzIHNxdWFyZXJvb3QgMS4yNEUtMjEgLT4gNEUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTk0IHNxdWFyZXJvb3QgNC4xOEUtMjEgLT4gNkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTk1IHNxdWFyZXJvb3QgNy4xOUUtMjEgLT4gOEUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTk2IHNxdWFyZXJvb3QgOC45NEUtMjEgLT4gOUUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTk3IHNxdWFyZXJvb3QgMS44MUUtMjAgLT4gMS4zRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1OTggc3F1YXJlcm9vdCA0LjY0RS0yMCAtPiAyLjJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU5OSBzcXVhcmVyb290IDUuMDZFLTIwIC0+IDIuMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjAwIHNxdWFyZXJvb3QgNS4wOEUtMjAgLT4gMi4zRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MDEgc3F1YXJlcm9vdCA3LjAwRS0yMCAtPiAyLjZFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYwMiBzcXVhcmVyb290IDEuODFFLTE5IC0+IDQuM0UtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjAzIHNxdWFyZXJvb3QgNi42NEUtMTkgLT4gOC4xRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MDQgc3F1YXJlcm9vdCA3LjQ4RS0xOSAtPiA4LjZFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYwNSBzcXVhcmVyb290IDkuOTFFLTE5IC0+IDEuMDBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNAorc3F0eDg2MDYgc3F1YXJlcm9vdCA2LjI0RS0yNCAtPiAyRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MDcgc3F1YXJlcm9vdCA3LjE2MkUtMjMgLT4gOEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjA4IHNxdWFyZXJvb3QgNy4yNDNFLTIzIC0+IDlFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYwOSBzcXVhcmVyb290IDguOTYxRS0yMyAtPiA5RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MTAgc3F1YXJlcm9vdCA5LjAyOUUtMjMgLT4gMS4wRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MTEgc3F1YXJlcm9vdCA0LjYyNEUtMjIgLT4gMi4yRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MTIgc3F1YXJlcm9vdCA1Ljk4MEUtMjIgLT4gMi40RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MTMgc3F1YXJlcm9vdCA2LjUwN0UtMjIgLT4gMi42RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MTQgc3F1YXJlcm9vdCAxLjQ4M0UtMjEgLT4gMy45RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MTUgc3F1YXJlcm9vdCAzLjkwM0UtMjEgLT4gNi4yRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MTYgc3F1YXJlcm9vdCA4LjczM0UtMjEgLT4gOS4zRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MTcgc3F1YXJlcm9vdCAxLjc4MUUtMjAgLT4gMS4zM0UtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjE4IHNxdWFyZXJvb3QgNi40MjZFLTIwIC0+IDIuNTNFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYxOSBzcXVhcmVyb290IDcuMTAyRS0yMCAtPiAyLjY2RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MjAgc3F1YXJlcm9vdCA3LjUzNUUtMjAgLT4gMi43NEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjIxIHNxdWFyZXJvb3QgOS44OTJFLTIwIC0+IDMuMTVFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYyMiBzcXVhcmVyb290IDEuNjEyRS0xOSAtPiA0LjAxRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MjMgc3F1YXJlcm9vdCAxLjcyNkUtMTkgLT4gNC4xNUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjI0IHNxdWFyZXJvb3QgMS44NTNFLTE5IC0+IDQuMzBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYyNSBzcXVhcmVyb290IDQuMjQ1RS0xOSAtPiA2LjUyRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBjbGFtcGluZyBhbmQgb3ZlcmZsb3cgZm9yIGxhcmdlIGV4cG9uZW50cworcHJlY2lzaW9uOiAxCitzcXR4ODYyNiBzcXVhcmVyb290IDFFKzE4IC0+IDFFKzkKK3NxdHg4NjI3IHNxdWFyZXJvb3QgMUUrMTkgLT4gM0UrOSBJbmV4YWN0IFJvdW5kZWQKKy0tIGluIHRoaXMgbmV4dCBvbmUsIGludGVybWVkaWF0ZSByZXN1bHQgaXMgOTQ4NjgzMjk4MC41MDUxMzc5OTYuLi4KKy0tIHNvIHJvdW5kcyBkb3duIHRvIDkgKG5vdCB1cCB0byAxMCB3aGljaCB3b3VsZCBjYXVzZSBJbmZpbml0eSBvdmVyZmxvdykKK3NxdHg4NjI4IHNxdWFyZXJvb3QgOUUrMTkgLT4gOUUrOSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjI5IHNxdWFyZXJvb3QgOS4xRSsxOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjMwIHNxdWFyZXJvb3QgMUUrMjAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMgorc3F0eDg2MzEgc3F1YXJlcm9vdCAxRSsxOCAtPiAxRSs5CitzcXR4ODYzMiBzcXVhcmVyb290IDEuMEUrMTggLT4gMS4wRSs5CitzcXR4ODYzMyBzcXVhcmVyb290IDEuMDBFKzE4IC0+IDEuMEUrOQorc3F0eDg2MzQgc3F1YXJlcm9vdCAxLjAwMEUrMTggLT4gMS4wRSs5IFJvdW5kZWQKK3NxdHg4NjM1IHNxdWFyZXJvb3QgMUUrMjAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtcDogMQorc3F0eDg2MzYgc3F1YXJlcm9vdCAxRSsxOCAtPiAxLjBFKzkgQ2xhbXBlZAorc3F0eDg2Mzcgc3F1YXJlcm9vdCAxLjBFKzE4IC0+IDEuMEUrOQorc3F0eDg2Mzggc3F1YXJlcm9vdCAxRSsyMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2NsYW1wOiAwCisKK3ByZWNpc2lvbjogNgorc3F0eDg2Mzkgc3F1YXJlcm9vdCAxRSsxOCAtPiAxRSs5CitzcXR4ODY0MCBzcXVhcmVyb290IDEuMDAwMDAwMDAwMEUrMTggLT4gMS4wMDAwMEUrOQorc3F0eDg2NDEgc3F1YXJlcm9vdCAxLjAwMDAwMDAwMDAwRSsxOCAtPiAxLjAwMDAwRSs5IFJvdW5kZWQKK3NxdHg4NjQyIHNxdWFyZXJvb3QgMUUrMjAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtcDogMQorc3F0eDg2NDMgc3F1YXJlcm9vdCAxRSs4IC0+IDFFKzQKK3NxdHg4NjQ0IHNxdWFyZXJvb3QgMUUrMTAgLT4gMS4wRSs1IENsYW1wZWQKK3NxdHg4NjQ1IHNxdWFyZXJvb3QgMS4wRSsxMCAtPiAxLjBFKzUKK3NxdHg4NjQ2IHNxdWFyZXJvb3QgMUUrMTIgLT4gMS4wMEUrNiBDbGFtcGVkCitzcXR4ODY0NyBzcXVhcmVyb290IDEuMEUrMTIgLT4gMS4wMEUrNiBDbGFtcGVkCitzcXR4ODY0OCBzcXVhcmVyb290IDEuMDBFKzEyIC0+IDEuMDBFKzYgQ2xhbXBlZAorc3F0eDg2NDkgc3F1YXJlcm9vdCAxLjAwMEUrMTIgLT4gMS4wMEUrNgorc3F0eDg2NTAgc3F1YXJlcm9vdCAxRSsxOCAtPiAxLjAwMDAwRSs5IENsYW1wZWQKK3NxdHg4NjUxIHNxdWFyZXJvb3QgMS4wMDAwMDAwMEUrMTggLT4gMS4wMDAwMEUrOSBDbGFtcGVkCitzcXR4ODY1MiBzcXVhcmVyb290IDEuMDAwMDAwMDAwRSsxOCAtPiAxLjAwMDAwRSs5CitzcXR4ODY1MyBzcXVhcmVyb290IDFFKzIwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbXA6IDAKKworLS0gVGhlIGZvbGxvd2luZyBleGFtcGxlIGNhdXNlcyBhIFR5cGVFcnJvciBpbiBQeXRob24gMi41LjEKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDkKK21pbmV4cG9uZW50OiAtOQorc3F0eDg2NTQgc3F1YXJlcm9vdCAxMDAwMDAwMDAwMCAtPiAxLjAwRSs1IFJvdW5kZWQKKworLS0gQWRkaXRpb25hbCB0cmlja3kgY2FzZXMgb2YgdW5kZXJmbG93biBzdWJub3JtYWxzCityb3VuZGluZzogaGFsZl9ldmVuCitwcmVjaXNpb246IDUKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitzcXR4ODcwMCBzcXVhcmVyb290IDIuODA3M0UtMjAwMCAtPiAxLjY3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MDEgc3F1YXJlcm9vdCAyLjg4ODNFLTIwMDAgLT4gMS42OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzAyIHNxdWFyZXJvb3QgMy4xNTI0RS0yMDAwIC0+IDEuNzc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcwMyBzcXVhcmVyb290IDMuMjM4MkUtMjAwMCAtPiAxLjc5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MDQgc3F1YXJlcm9vdCAzLjUxNzVFLTIwMDAgLT4gMS44NzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzA1IHNxdWFyZXJvb3QgMy42MDgxRS0yMDAwIC0+IDEuODk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcwNiBzcXVhcmVyb290IDMuOTAyNkUtMjAwMCAtPiAxLjk3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MDcgc3F1YXJlcm9vdCAzLjk5ODBFLTIwMDAgLT4gMS45OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzA4IHNxdWFyZXJvb3QgNC4zMDc3RS0yMDAwIC0+IDIuMDc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcwOSBzcXVhcmVyb290IDQuNDA3OUUtMjAwMCAtPiAyLjA5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MTAgc3F1YXJlcm9vdCA0LjczMjhFLTIwMDAgLT4gMi4xNzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzExIHNxdWFyZXJvb3QgNC44Mzc4RS0yMDAwIC0+IDIuMTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcxMiBzcXVhcmVyb290IDUuMTc3OUUtMjAwMCAtPiAyLjI3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MTMgc3F1YXJlcm9vdCA1LjI4NzdFLTIwMDAgLT4gMi4yOTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzE0IHNxdWFyZXJvb3QgNS42NDMwRS0yMDAwIC0+IDIuMzc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcxNSBzcXVhcmVyb290IDUuNzU3NkUtMjAwMCAtPiAyLjM5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MTYgc3F1YXJlcm9vdCA2LjEyODFFLTIwMDAgLT4gMi40NzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzE3IHNxdWFyZXJvb3QgNi4yNDc1RS0yMDAwIC0+IDIuNDk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcxOCBzcXVhcmVyb290IDYuNjMzMkUtMjAwMCAtPiAyLjU3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MTkgc3F1YXJlcm9vdCA2Ljc1NzRFLTIwMDAgLT4gMi41OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzIwIHNxdWFyZXJvb3QgNy4xNTgzRS0yMDAwIC0+IDIuNjc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcyMSBzcXVhcmVyb290IDcuMjg3M0UtMjAwMCAtPiAyLjY5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MjIgc3F1YXJlcm9vdCA3LjcwMzRFLTIwMDAgLT4gMi43NzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzIzIHNxdWFyZXJvb3QgNy44MzcyRS0yMDAwIC0+IDIuNzk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcyNCBzcXVhcmVyb290IDguMjY4NUUtMjAwMCAtPiAyLjg3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MjUgc3F1YXJlcm9vdCA4LjQwNzFFLTIwMDAgLT4gMi44OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzI2IHNxdWFyZXJvb3QgOC44NTM2RS0yMDAwIC0+IDIuOTc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcyNyBzcXVhcmVyb290IDguOTk3MEUtMjAwMCAtPiAyLjk5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3Mjggc3F1YXJlcm9vdCA5LjQ1ODdFLTIwMDAgLT4gMy4wNzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzI5IHNxdWFyZXJvb3QgOS42MDY5RS0yMDAwIC0+IDMuMDk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCistLSAoRW5kIG9mIE1hcmsgRGlja2luc29uJ3MgdGVzdGNhc2VzLikKKworCistLSBTb21lIGFkZGl0aW9uYWwgZWRnZSBjYXNlcworbWF4ZXhwb25lbnQ6IDkKK21pbmV4cG9uZW50OiAtOQorcHJlY2lzaW9uOiAyCitzcXR4OTAwMCBzcXVhcmVyb290IDk5ODAuMDEgLT4gMS4wRSsyIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzCitzcXR4OTAwMSBzcXVhcmVyb290IDk5ODAuMDEgLT4gOTkuOQorcHJlY2lzaW9uOiA0CitzcXR4OTAwMiBzcXVhcmVyb290IDk5ODAuMDEgLT4gOTkuOQorCistLSBFeGFjdCBmcm9tIG92ZXItcHJlY2lzZQorcHJlY2lzaW9uOiA0CitzcXR4OTAwMyBzcXVhcmVyb290IDExMDI1ICAgLT4gMTA1CitwcmVjaXNpb246IDMKK3NxdHg5MDA0IHNxdWFyZXJvb3QgMTEwMjUgICAtPiAxMDUKK3ByZWNpc2lvbjogMgorc3F0eDkwMDUgc3F1YXJlcm9vdCAxMTAyNSAgIC0+IDEuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEKK3NxdHg5MDA2IHNxdWFyZXJvb3QgMTEwMjUgICAtPiAxRSsyICAgIEluZXhhY3QgUm91bmRlZAorCistLSBhbiBpbnRlcmVzdGluZyBjYXNlCitwcmVjaXNpb246ICAgNworc3F0eDkwMDcgc3F1YXJlcm9vdCAxNjAwMDAwZTEgLT4gNDAwMAorCistLSBPdXQtb2YtYm91bmRzIHplcm9zCitwcmVjaXNpb246IDQKK3NxdHg5MDEwIHNxdWFyZXJvb3QgMEUtOSAgLT4gMC4wMDAwMAorc3F0eDkwMTEgc3F1YXJlcm9vdCAwRS0xMCAtPiAwLjAwMDAwCitzcXR4OTAxMiBzcXVhcmVyb290IDBFLTExIC0+IDAuMDAwMDAwCitzcXR4OTAxMyBzcXVhcmVyb290IDBFLTEyIC0+IDAuMDAwMDAwCitzcXR4OTAxNCBzcXVhcmVyb290IDBFLTEzIC0+IDBFLTcKK3NxdHg5MDE1IHNxdWFyZXJvb3QgMEUtMTQgLT4gMEUtNworc3F0eDkwMjAgc3F1YXJlcm9vdCAwRS0xNyAtPiAwRS05CitzcXR4OTAyMSBzcXVhcmVyb290IDBFLTIwIC0+IDBFLTEwCitzcXR4OTAyMiBzcXVhcmVyb290IDBFLTIyIC0+IDBFLTExCitzcXR4OTAyMyBzcXVhcmVyb290IDBFLTI0IC0+IDBFLTEyCitzcXR4OTAyNCBzcXVhcmVyb290IDBFLTI1IC0+IDBFLTEyIENsYW1wZWQKK3NxdHg5MDI1IHNxdWFyZXJvb3QgMEUtMjYgLT4gMEUtMTIgQ2xhbXBlZAorc3F0eDkwMjYgc3F1YXJlcm9vdCAwRS0yNyAtPiAwRS0xMiBDbGFtcGVkCitzcXR4OTAyNyBzcXVhcmVyb290IDBFLTI4IC0+IDBFLTEyIENsYW1wZWQKKworc3F0eDkwMzAgc3F1YXJlcm9vdCAwRSs4ICAtPiAwRSs0CitzcXR4OTAzMSBzcXVhcmVyb290IDBFKzEwIC0+IDBFKzUKK3NxdHg5MDMyIHNxdWFyZXJvb3QgMEUrMTIgLT4gMEUrNgorc3F0eDkwMzMgc3F1YXJlcm9vdCAwRSsxNCAtPiAwRSs3CitzcXR4OTAzNCBzcXVhcmVyb290IDBFKzE1IC0+IDBFKzcKK3NxdHg5MDM1IHNxdWFyZXJvb3QgMEUrMTYgLT4gMEUrOAorc3F0eDkwMzYgc3F1YXJlcm9vdCAwRSsxOCAtPiAwRSs5CitzcXR4OTAzNyBzcXVhcmVyb290IDBFKzE5IC0+IDBFKzkKK3NxdHg5MDM4IHNxdWFyZXJvb3QgMEUrMjAgLT4gMEUrOSBDbGFtcGVkCitzcXR4OTAzOSBzcXVhcmVyb290IDBFKzIxIC0+IDBFKzkgQ2xhbXBlZAorc3F0eDkwNDAgc3F1YXJlcm9vdCAwRSsyMiAtPiAwRSs5IENsYW1wZWQKKworLS0gaWYgZGlnaXRzID4gZW1heCBtYXhpbXVtIHJlYWwgZXhwb25lbnQgaXMgbmVnYXRpdmUKK21heGV4cG9uZW50OiA5CittaW5leHBvbmVudDogLTkKK3ByZWNpc2lvbjogMTUKK2NsYW1wOiAxCitzcXR4OTA0NSBzcXVhcmVyb290ICAxIC0+IDEuMDAwMDAgIENsYW1wZWQKKworLS0gb3RoZXIKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDE2CitzcXR4OTA0NiBzcXVhcmVyb290ICAxMCAgICAtPiAzLjE2MjI3NzY2MDE2ODM3OSAgICAgICAgICBpbmV4YWN0IHJvdW5kZWQKK3NxdHg5MDQ3IHNxdWFyZXJvb3QgIDEwRS0xIC0+IDEuMAorc3F0eDkwNDggc3F1YXJlcm9vdCAgMTBFLTIgLT4gMC4zMTYyMjc3NjYwMTY4Mzc5ICAgICAgICAgaW5leGFjdCByb3VuZGVkCitzcXR4OTA0OSBzcXVhcmVyb290ICAxMEUtMyAtPiAwLjEwCisKKworLS0gSGlnaC1wcmVjaXNpb24gZXhhY3QgYW5kIGluZXhhY3QKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDQwMAorc3F0eDkwNTAgc3F1YXJlcm9vdCAyIC0+IDEuNDE0MjEzNTYyMzczMDk1MDQ4ODAxNjg4NzI0MjA5Njk4MDc4NTY5NjcxODc1Mzc2OTQ4MDczMTc2Njc5NzM3OTkwNzMyNDc4NDYyMTA3MDM4ODUwMzg3NTM0MzI3NjQxNTcyNzM1MDEzODQ2MjMwOTEyMjk3MDI0OTI0ODM2MDU1ODUwNzM3MjEyNjQ0MTIxNDk3MDk5OTM1ODMxNDEzMjIyNjY1OTI3NTA1NTkyNzU1Nzk5OTUwNTAxMTUyNzgyMDYwNTcxNDcwMTA5NTU5OTcxNjA1OTcwMjc0NTM0NTk2ODYyMDE0NzI4NTE3NDE4NjQwODg5MTk4NjA5NTUyMzI5MjMwNDg0MzA4NzE0MzIxNDUwODM5NzYyNjAzNjI3OTk1MjUxNDA3OTg5Njg3MjUzMzk2NTQ2MzMxODA4ODI5NjQwNjIwNjE1MjU4MzUyMzk1MDU0NzQ1NzUwMjg3NzU5OTYxNzI5ODM1NTc1MjIwMzM3NTMxODU3MDExMzU0Mzc0NjAzNDA4NDk4ODQ3IEluZXhhY3QgUm91bmRlZAorc3F0eDkwNTEgc3F1YXJlcm9vdCAxMDg5IC0+IDMzCitzcXR4OTA1MiBzcXVhcmVyb290IDEwLjg5IC0+IDMuMworCistLSBOdWxsIHRlc3QKK3NxdHg5OTAwIHNxdWFyZXJvb3QgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3N1YnRyYWN0LmRlY1Rlc3QgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3N1YnRyYWN0LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5NTIxNwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc3VidHJhY3QuZGVjVGVzdApAQCAtMCwwICsxLDg3MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBzdWJ0cmFjdC5kZWNUZXN0IC0tIGRlY2ltYWwgc3VidHJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorc3VieDAwMSBzdWJ0cmFjdCAgMCAgIDAgIC0+ICcwJworc3VieDAwMiBzdWJ0cmFjdCAgMSAgIDEgIC0+ICcwJworc3VieDAwMyBzdWJ0cmFjdCAgMSAgIDIgIC0+ICctMScKK3N1YngwMDQgc3VidHJhY3QgIDIgICAxICAtPiAnMScKK3N1YngwMDUgc3VidHJhY3QgIDIgICAyICAtPiAnMCcKK3N1YngwMDYgc3VidHJhY3QgIDMgICAyICAtPiAnMScKK3N1YngwMDcgc3VidHJhY3QgIDIgICAzICAtPiAnLTEnCisKK3N1YngwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnCitzdWJ4MDEyIHN1YnRyYWN0IC0xICAgMSAgLT4gJy0yJworc3VieDAxMyBzdWJ0cmFjdCAtMSAgIDIgIC0+ICctMycKK3N1YngwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnCitzdWJ4MDE1IHN1YnRyYWN0IC0yICAgMiAgLT4gJy00Jworc3VieDAxNiBzdWJ0cmFjdCAtMyAgIDIgIC0+ICctNScKK3N1YngwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnCisKK3N1YngwMjEgc3VidHJhY3QgIDAgIC0wICAtPiAnMCcKK3N1YngwMjIgc3VidHJhY3QgIDEgIC0xICAtPiAnMicKK3N1YngwMjMgc3VidHJhY3QgIDEgIC0yICAtPiAnMycKK3N1YngwMjQgc3VidHJhY3QgIDIgIC0xICAtPiAnMycKK3N1YngwMjUgc3VidHJhY3QgIDIgIC0yICAtPiAnNCcKK3N1YngwMjYgc3VidHJhY3QgIDMgIC0yICAtPiAnNScKK3N1YngwMjcgc3VidHJhY3QgIDIgIC0zICAtPiAnNScKKworc3VieDAzMCBzdWJ0cmFjdCAgMTEgIDEgIC0+IDEwCitzdWJ4MDMxIHN1YnRyYWN0ICAxMCAgMSAgLT4gIDkKK3N1YngwMzIgc3VidHJhY3QgIDkgICAxICAtPiAgOAorc3VieDAzMyBzdWJ0cmFjdCAgMSAgIDEgIC0+ICAwCitzdWJ4MDM0IHN1YnRyYWN0ICAwICAgMSAgLT4gLTEKK3N1YngwMzUgc3VidHJhY3QgLTEgICAxICAtPiAtMgorc3VieDAzNiBzdWJ0cmFjdCAtOSAgIDEgIC0+IC0xMAorc3VieDAzNyBzdWJ0cmFjdCAtMTAgIDEgIC0+IC0xMQorc3VieDAzOCBzdWJ0cmFjdCAtMTEgIDEgIC0+IC0xMgorCitzdWJ4MDQwIHN1YnRyYWN0ICc1Ljc1JyAnMy4zJyAgLT4gJzIuNDUnCitzdWJ4MDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnCitzdWJ4MDQyIHN1YnRyYWN0ICctNScgICAnLTMnICAgLT4gJy0yJworc3VieDA0MyBzdWJ0cmFjdCAnLTcnICAgJzIuNScgIC0+ICctOS41Jworc3VieDA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnCitzdWJ4MDQ1IHN1YnRyYWN0ICcxLjMnICAnMC4zJyAgLT4gJzEuMCcKK3N1YngwNDYgc3VidHJhY3QgJzEuMjUnICcxLjI1JyAtPiAnMC4wMCcKKworc3VieDA1MCBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwMDAnIC0+ICcwLjIzNDU2Nzg5Jworc3VieDA1MSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwODknIC0+ICcwLjIzNDU2NzAwJworc3VieDA1MiBzdWJ0cmFjdCAnMC41NTU1NTU1NTU5JyAgICAnMC4wMDAwMDAwMDAxJyAtPiAnMC41NTU1NTU1NTYnIEluZXhhY3QgUm91bmRlZAorc3VieDA1MyBzdWJ0cmFjdCAnMC41NTU1NTU1NTU5JyAgICAnMC4wMDAwMDAwMDA1JyAtPiAnMC41NTU1NTU1NTUnIEluZXhhY3QgUm91bmRlZAorc3VieDA1NCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0JyAgICAnMC4xMTExMTExMTExJyAtPiAnMC4zMzMzMzMzMzMnIEluZXhhY3QgUm91bmRlZAorc3VieDA1NSBzdWJ0cmFjdCAnMS4wMDAwMDAwMDAwJyAgICAnMC4wMDAwMDAwMScgLT4gJzAuOTk5OTk5OTkwJyBSb3VuZGVkCitzdWJ4MDU2IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ5OTknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorc3VieDA1NyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ1MDAwJyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworc3VieDA2MCBzdWJ0cmFjdCAnNzAnICAgICcxMDAwMGUrOScgLT4gJy0xLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitzdWJ4MDYxIHN1YnRyYWN0ICc3MDAnICAgICcxMDAwMGUrOScgLT4gJy0xLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitzdWJ4MDYyIHN1YnRyYWN0ICc3MDAwJyAgICAnMTAwMDBlKzknIC0+ICctOS45OTk5OTk5OUUrMTInIEluZXhhY3QgUm91bmRlZAorc3VieDA2MyBzdWJ0cmFjdCAnNzAwMDAnICAgICcxMDAwMGUrOScgLT4gJy05Ljk5OTk5OTkzRSsxMicgUm91bmRlZAorc3VieDA2NCBzdWJ0cmFjdCAnNzAwMDAwJyAgICAnMTAwMDBlKzknIC0+ICctOS45OTk5OTkzMEUrMTInIFJvdW5kZWQKKyAgLS0gc3ltbWV0cnk6CitzdWJ4MDY1IHN1YnRyYWN0ICcxMDAwMGUrOScgICAgJzcwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorc3VieDA2NiBzdWJ0cmFjdCAnMTAwMDBlKzknICAgICc3MDAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitzdWJ4MDY3IHN1YnRyYWN0ICcxMDAwMGUrOScgICAgJzcwMDAnIC0+ICc5Ljk5OTk5OTk5RSsxMicgSW5leGFjdCBSb3VuZGVkCitzdWJ4MDY4IHN1YnRyYWN0ICcxMDAwMGUrOScgICAgJzcwMDAwJyAtPiAnOS45OTk5OTk5M0UrMTInIFJvdW5kZWQKK3N1YngwNjkgc3VidHJhY3QgJzEwMDAwZSs5JyAgICAnNzAwMDAwJyAtPiAnOS45OTk5OTkzMEUrMTInIFJvdW5kZWQKKworICAtLSBjaGFuZ2UgcHJlY2lzaW9uCitzdWJ4MDgwIHN1YnRyYWN0ICcxMDAwMGUrOScgICAgJzcwMDAwJyAtPiAnOS45OTk5OTk5M0UrMTInIFJvdW5kZWQKK3ByZWNpc2lvbjogNgorc3VieDA4MSBzdWJ0cmFjdCAnMTAwMDBlKzknICAgICc3MDAwMCcgLT4gJzEuMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOQorCisgIC0tIHNvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0cworc3VieDA5MCBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMCcgIC0+ICcwLjAnCitzdWJ4MDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnCitzdWJ4MDkyIHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCitzdWJ4MDkzIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnCitzdWJ4MDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCitzdWJ4MDk1IHN1YnRyYWN0ICczJyAgICAnLjMnICAgLT4gJzIuNycKK3N1YngwOTYgc3VidHJhY3QgJzMuJyAgICcuMycgICAtPiAnMi43Jworc3VieDA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnCitzdWJ4MDk4IHN1YnRyYWN0ICczLjAwJyAnLjMnICAgLT4gJzIuNzAnCitzdWJ4MDk5IHN1YnRyYWN0ICczJyAgICAnMycgICAgLT4gJzAnCitzdWJ4MTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnCitzdWJ4MTAxIHN1YnRyYWN0ICczJyAgICAnLTMnICAgLT4gJzYnCitzdWJ4MTAyIHN1YnRyYWN0ICczJyAgICAnMC4zJyAgLT4gJzIuNycKK3N1YngxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43Jworc3VieDEwNCBzdWJ0cmFjdCAnMy4wJyAgJzAuMycgIC0+ICcyLjcnCitzdWJ4MTA1IHN1YnRyYWN0ICczLjAwJyAnMC4zJyAgLT4gJzIuNzAnCitzdWJ4MTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcKK3N1YngxMDcgc3VidHJhY3QgJzMnICAgICcrMy4wJyAtPiAnMC4wJworc3VieDEwOCBzdWJ0cmFjdCAnMycgICAgJy0zLjAnIC0+ICc2LjAnCisKKy0tIHRoZSBhYm92ZSBhbGwgZnJvbSBhZGQ7IG1hc3NhZ2VkIGFuZCBleHRlbmRlZC4gIE5vdyBzb21lIG5ldyBvbmVzLi4uCistLSBbcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgY29tcGFyaXNvbnNdCistLSBOQjogLXhFLTggYmVsb3cgd2VyZSBub24tZXhwb25lbnRzIHByZS1BTlNJIFgzLTI3NCwgYW5kIC0xRS03IG9yIDBFLTcKKy0tIHdpdGggaW5wdXQgcm91bmRpbmcuCitzdWJ4MTIwIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNUUtOCcKK3N1YngxMjEgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy00RS04Jworc3VieDEyMiBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg2JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTNFLTgnCitzdWJ4MTIzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMkUtOCcKK3N1YngxMjQgc3VidHJhY3QgICcxMC4yMzQ1Njc4OCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0xRS04Jworc3VieDEyNSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg5JyAgICAnMTAuMjM0NTY3ODknICAtPiAnMEUtOCcKK3N1YngxMjYgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzFFLTgnCitzdWJ4MTI3IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4OScgIC0+ICcyRS04Jworc3VieDEyOCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkyJyAgICAnMTAuMjM0NTY3ODknICAtPiAnM0UtOCcKK3N1YngxMjkgc3VidHJhY3QgICcxMC4yMzQ1Njc5MycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzRFLTgnCitzdWJ4MTMwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICc1RS04Jworc3VieDEzMSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTVFLTgnCitzdWJ4MTMyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODInICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNEUtOCcKK3N1YngxMzMgc3VidHJhY3QgICcxMC4yMzQ1Njc4MycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0zRS04Jworc3VieDEzNCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg0JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTJFLTgnCitzdWJ4MTM1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMUUtOCcKK3N1YngxMzYgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzBFLTgnCitzdWJ4MTM3IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcxRS04Jworc3VieDEzOCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg4JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMkUtOCcKK3N1YngxMzkgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzNFLTgnCitzdWJ4MTQwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTAnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc0RS04Jworc3VieDE0MSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNUUtOCcKK3N1YngxNDIgc3VidHJhY3QgICcxJyAgICAgICAgICAgICAgJzAuOTk5OTk5OTk5JyAgLT4gJzFFLTknCitzdWJ4MTQzIHN1YnRyYWN0ICAnMC45OTk5OTk5OTknICAgICcxJyAgICAgICAgICAgIC0+ICctMUUtOScKK3N1YngxNDQgc3VidHJhY3QgICctMTAuMjM0NTY3ODAnICAgJy0xMC4yMzQ1Njc4NicgLT4gJzZFLTgnCitzdWJ4MTQ1IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkwJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNEUtOCcKK3N1YngxNDYgc3VidHJhY3QgICctMTAuMjM0NTY3OTEnICAgJy0xMC4yMzQ1Njc4NicgLT4gJy01RS04JworCitwcmVjaXNpb246IDMKK3N1YngxNTAgc3VidHJhY3QgJzEyMzQ1Njc4OTAwMDAwJyAnOTk5OTk5OTk5OTk5OScgIC0+IDIuMzVFKzEyIEluZXhhY3QgUm91bmRlZAorc3VieDE1MSBzdWJ0cmFjdCAnOTk5OTk5OTk5OTk5OScgICcxMjM0NTY3ODkwMDAwMCcgLT4gLTIuMzVFKzEyIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA2CitzdWJ4MTUyIHN1YnRyYWN0ICcxMjM0NTY3ODkwMDAwMCcgJzk5OTk5OTk5OTk5OTknICAtPiAyLjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3N1YngxNTMgc3VidHJhY3QgJzk5OTk5OTk5OTk5OTknICAnMTIzNDU2Nzg5MDAwMDAnIC0+IC0yLjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOQorc3VieDE1NCBzdWJ0cmFjdCAnMTIzNDU2Nzg5MDAwMDAnICc5OTk5OTk5OTk5OTk5JyAgLT4gMi4zNDU2Nzg5MEUrMTIgSW5leGFjdCBSb3VuZGVkCitzdWJ4MTU1IHN1YnRyYWN0ICc5OTk5OTk5OTk5OTk5JyAgJzEyMzQ1Njc4OTAwMDAwJyAtPiAtMi4zNDU2Nzg5MEUrMTIgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEyCitzdWJ4MTU2IHN1YnRyYWN0ICcxMjM0NTY3ODkwMDAwMCcgJzk5OTk5OTk5OTk5OTknICAtPiAyLjM0NTY3ODkwMDAwRSsxMiBJbmV4YWN0IFJvdW5kZWQKK3N1YngxNTcgc3VidHJhY3QgJzk5OTk5OTk5OTk5OTknICAnMTIzNDU2Nzg5MDAwMDAnIC0+IC0yLjM0NTY3ODkwMDAwRSsxMiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTUKK3N1YngxNTggc3VidHJhY3QgJzEyMzQ1Njc4OTAwMDAwJyAnOTk5OTk5OTk5OTk5OScgIC0+IDIzNDU2Nzg5MDAwMDEKK3N1YngxNTkgc3VidHJhY3QgJzk5OTk5OTk5OTk5OTknICAnMTIzNDU2Nzg5MDAwMDAnIC0+IC0yMzQ1Njc4OTAwMDAxCitwcmVjaXNpb246IDkKKworLS0gYWRkaXRpb25hbCBzY2FsZWQgYXJpdGhtZXRpYyB0ZXN0cyBbMC45NyBwcm9ibGVtXQorc3VieDE2MCBzdWJ0cmFjdCAnMCcgICAgICcuMScgICAgICAtPiAnLTAuMScKK3N1YngxNjEgc3VidHJhY3QgJzAwJyAgICAnLjk3OTgzJyAgLT4gJy0wLjk3OTgzJworc3VieDE2MiBzdWJ0cmFjdCAnMCcgICAgICcuOScgICAgICAtPiAnLTAuOScKK3N1YngxNjMgc3VidHJhY3QgJzAnICAgICAnMC4xMDInICAgLT4gJy0wLjEwMicKK3N1YngxNjQgc3VidHJhY3QgJzAnICAgICAnLjQnICAgICAgLT4gJy0wLjQnCitzdWJ4MTY1IHN1YnRyYWN0ICcwJyAgICAgJy4zMDcnICAgIC0+ICctMC4zMDcnCitzdWJ4MTY2IHN1YnRyYWN0ICcwJyAgICAgJy40MzgyMicgIC0+ICctMC40MzgyMicKK3N1YngxNjcgc3VidHJhY3QgJzAnICAgICAnLjkxMScgICAgLT4gJy0wLjkxMScKK3N1YngxNjggc3VidHJhY3QgJy4wJyAgICAnLjAyJyAgICAgLT4gJy0wLjAyJworc3VieDE2OSBzdWJ0cmFjdCAnMDAnICAgICcuMzkyJyAgICAtPiAnLTAuMzkyJworc3VieDE3MCBzdWJ0cmFjdCAnMCcgICAgICcuMjYnICAgICAtPiAnLTAuMjYnCitzdWJ4MTcxIHN1YnRyYWN0ICcwJyAgICAgJzAuNTEnICAgIC0+ICctMC41MScKK3N1YngxNzIgc3VidHJhY3QgJzAnICAgICAnLjIyMzQnICAgLT4gJy0wLjIyMzQnCitzdWJ4MTczIHN1YnRyYWN0ICcwJyAgICAgJy4yJyAgICAgIC0+ICctMC4yJworc3VieDE3NCBzdWJ0cmFjdCAnLjAnICAgICcuMDAwOCcgICAtPiAnLTAuMDAwOCcKKy0tIDAuIG9uIGxlZnQKK3N1YngxODAgc3VidHJhY3QgJzAuMCcgICAgICctLjEnICAgICAgLT4gJzAuMScKK3N1YngxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCitzdWJ4MTgyIHN1YnRyYWN0ICcwLjAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCitzdWJ4MTgzIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuMTAyJyAgIC0+ICcwLjEwMicKK3N1YngxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKK3N1YngxODUgc3VidHJhY3QgJzAuMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3Jworc3VieDE4NiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uNDM4MjInICAtPiAnMC40MzgyMicKK3N1YngxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJworc3VieDE4OCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDInICAgICAtPiAnMC4wMicKK3N1YngxODkgc3VidHJhY3QgJzAuMDAnICAgICctLjM5MicgICAgLT4gJzAuMzkyJworc3VieDE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKK3N1YngxOTEgc3VidHJhY3QgJzAuMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCitzdWJ4MTkyIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yMjM0JyAgIC0+ICcwLjIyMzQnCitzdWJ4MTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCitzdWJ4MTk0IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCistLSBuZWdhdGl2ZXMgb2Ygc2FtZQorc3VieDIwMCBzdWJ0cmFjdCAnMCcgICAgICctLjEnICAgICAgLT4gJzAuMScKK3N1YngyMDEgc3VidHJhY3QgJzAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJworc3VieDIwMiBzdWJ0cmFjdCAnMCcgICAgICctLjknICAgICAgLT4gJzAuOScKK3N1YngyMDMgc3VidHJhY3QgJzAnICAgICAnLTAuMTAyJyAgIC0+ICcwLjEwMicKK3N1YngyMDQgc3VidHJhY3QgJzAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnCitzdWJ4MjA1IHN1YnRyYWN0ICcwJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnCitzdWJ4MjA2IHN1YnRyYWN0ICcwJyAgICAgJy0uNDM4MjInICAtPiAnMC40MzgyMicKK3N1YngyMDcgc3VidHJhY3QgJzAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScKK3N1YngyMDggc3VidHJhY3QgJy4wJyAgICAnLS4wMicgICAgIC0+ICcwLjAyJworc3VieDIwOSBzdWJ0cmFjdCAnMDAnICAgICctLjM5MicgICAgLT4gJzAuMzkyJworc3VieDIxMCBzdWJ0cmFjdCAnMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnCitzdWJ4MjExIHN1YnRyYWN0ICcwJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScKK3N1YngyMTIgc3VidHJhY3QgJzAnICAgICAnLS4yMjM0JyAgIC0+ICcwLjIyMzQnCitzdWJ4MjEzIHN1YnRyYWN0ICcwJyAgICAgJy0uMicgICAgICAtPiAnMC4yJworc3VieDIxNCBzdWJ0cmFjdCAnLjAnICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcKKworLS0gbW9yZSBmaXhlZCwgTEhTIHN3YXBzIFtyZWFsbHkgdGhlIHNhbWUgYXMgdGVzdGNhc2VzIHVuZGVyIGFkZF0KK3N1YngyMjAgc3VidHJhY3QgJy01NjI2N0UtMTInIDAgIC0+ICctNS42MjY3RS04Jworc3VieDIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnCitzdWJ4MjIyIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAwICAtPiAnLTAuMDAwMDA1NjI2NycKK3N1YngyMjMgc3VidHJhY3QgJy01NjI2N0UtOScgIDAgIC0+ICctMC4wMDAwNTYyNjcnCitzdWJ4MjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnCitzdWJ4MjI1IHN1YnRyYWN0ICctNTYyNjdFLTcnICAwICAtPiAnLTAuMDA1NjI2NycKK3N1YngyMjYgc3VidHJhY3QgJy01NjI2N0UtNicgIDAgIC0+ICctMC4wNTYyNjcnCitzdWJ4MjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnCitzdWJ4MjI4IHN1YnRyYWN0ICctNTYyNjdFLTInICAwICAtPiAnLTU2Mi42NycKK3N1YngyMjkgc3VidHJhY3QgJy01NjI2N0UtMScgIDAgIC0+ICctNTYyNi43Jworc3VieDIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycKKy0tIHN5bW1ldHJ5IC4uLgorc3VieDI0MCBzdWJ0cmFjdCAwICctNTYyNjdFLTEyJyAgLT4gJzUuNjI2N0UtOCcKK3N1YngyNDEgc3VidHJhY3QgMCAnLTU2MjY3RS0xMScgIC0+ICc1LjYyNjdFLTcnCitzdWJ4MjQyIHN1YnRyYWN0IDAgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3Jworc3VieDI0MyBzdWJ0cmFjdCAwICctNTYyNjdFLTknICAgLT4gJzAuMDAwMDU2MjY3Jworc3VieDI0NCBzdWJ0cmFjdCAwICctNTYyNjdFLTgnICAgLT4gJzAuMDAwNTYyNjcnCitzdWJ4MjQ1IHN1YnRyYWN0IDAgJy01NjI2N0UtNycgICAtPiAnMC4wMDU2MjY3Jworc3VieDI0NiBzdWJ0cmFjdCAwICctNTYyNjdFLTYnICAgLT4gJzAuMDU2MjY3Jworc3VieDI0NyBzdWJ0cmFjdCAwICctNTYyNjdFLTUnICAgLT4gJzAuNTYyNjcnCitzdWJ4MjQ4IHN1YnRyYWN0IDAgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3Jworc3VieDI0OSBzdWJ0cmFjdCAwICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKK3N1YngyNTAgc3VidHJhY3QgMCAnLTU2MjY3RS0wJyAgIC0+ICc1NjI2NycKKworLS0gbm93IHNvbWUgbW9yZSBmcm9tIHRoZSAnbmV3JyBhZGQKK3ByZWNpc2lvbjogOQorc3VieDMwMSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScKK3N1YngzMDIgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzAuMjM0NTY3NzgnCisKK3N1YngzMTEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTUnIC0+ICctMC4xMTExMTExMTEnIEluZXhhY3QgUm91bmRlZAorc3VieDMxMiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQwJyAgJzAuNTU1NTU1NTU1NScgLT4gJy0wLjExMTExMTExMicgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzEzIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTUwJyAtPiAnLTAuMTExMTExMTExJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzMTQgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorc3VieDMxNSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0OTknICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzE2IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ5OTknICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzMTcgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorc3VieDMxOCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ1MDAxJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzE5IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDUwMScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzMjAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK3N1YngzMjEgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitzdWJ4MzIyIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk3Jworc3VieDMyMyBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzAuOTk5NicKK3N1YngzMjQgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcwLjk5OTUnCitzdWJ4MzI1IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMCcgLT4gJzAuOTk5OCcKK3N1YngzMjYgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAxJyAtPiAnMC45OTk5Jworc3VieDMyNyBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDInIC0+ICcxLjAwMDAnCitzdWJ4MzI4IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMycgLT4gJzEuMDAwMScKKworc3VieDMzMCBzdWJ0cmFjdCAnNzAnICAnMTAwMDBlKzknIC0+ICctMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorc3VieDMzMSBzdWJ0cmFjdCAnNzAwJyAgJzEwMDAwZSs5JyAtPiAnLTEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzMzIgc3VidHJhY3QgJzcwMDAnICAnMTAwMDBlKzknIC0+ICctOS45OTk5OTk5OUUrMTInIEluZXhhY3QgUm91bmRlZAorc3VieDMzMyBzdWJ0cmFjdCAnNzAwMDAnICAnMTAwMDBlKzknIC0+ICctOS45OTk5OTk5M0UrMTInIFJvdW5kZWQKK3N1YngzMzQgc3VidHJhY3QgJzcwMDAwMCcgICcxMDAwMGUrOScgLT4gJy05Ljk5OTk5OTMwRSsxMicgUm91bmRlZAorc3VieDMzNSBzdWJ0cmFjdCAnNzAwMDAwMCcgICcxMDAwMGUrOScgLT4gJy05Ljk5OTk5MzAwRSsxMicgUm91bmRlZAorLS0gc3ltbWV0cnk6CitzdWJ4MzQwIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzNDEgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzNDIgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICc5Ljk5OTk5OTk5RSsxMicgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzQzIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzkuOTk5OTk5OTNFKzEyJyBSb3VuZGVkCitzdWJ4MzQ0IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICc5Ljk5OTk5OTMwRSsxMicgUm91bmRlZAorc3VieDM0NSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzkuOTk5OTkzMDBFKzEyJyBSb3VuZGVkCisKKy0tIHNhbWUsIGhpZ2hlciBwcmVjaXNpb24KK3ByZWNpc2lvbjogMTUKK3N1YngzNDYgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcnICAgLT4gJzk5OTk5OTk5OTk5OTMnCitzdWJ4MzQ3IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MCcgICAtPiAnOTk5OTk5OTk5OTkzMCcKK3N1YngzNDggc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMCcgICAtPiAnOTk5OTk5OTk5OTMwMCcKK3N1YngzNDkgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAnICAgLT4gJzk5OTk5OTk5OTMwMDAnCitzdWJ4MzUwIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMCcgICAtPiAnOTk5OTk5OTkzMDAwMCcKK3N1YngzNTEgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwMCcgICAtPiAnOTk5OTk5OTMwMDAwMCcKK3N1YngzNTIgc3VidHJhY3QgJzcnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5OTMnCitzdWJ4MzUzIHN1YnRyYWN0ICc3MCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTkzMCcKK3N1YngzNTQgc3VidHJhY3QgJzcwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTMwMCcKK3N1YngzNTUgc3VidHJhY3QgJzcwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTMwMDAnCitzdWJ4MzU2IHN1YnRyYWN0ICc3MDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTkzMDAwMCcKK3N1YngzNTcgc3VidHJhY3QgJzcwMDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTMwMDAwMCcKKworLS0gemVybyBwcmVzZXJ2YXRpb24KK3ByZWNpc2lvbjogNgorc3VieDM2MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzYxIHN1YnRyYWN0IDEgJzAuMDAwMScgLT4gJzAuOTk5OScKK3N1YngzNjIgc3VidHJhY3QgMSAnMC4wMDAwMScgLT4gJzAuOTk5OTknCitzdWJ4MzYzIHN1YnRyYWN0IDEgJzAuMDAwMDAxJyAtPiAnMC45OTk5OTknCitzdWJ4MzY0IHN1YnRyYWN0IDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZAorc3VieDM2NSBzdWJ0cmFjdCAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK3N1YngzNzAgc3VidHJhY3QgMSAgMCAgLT4gMQorc3VieDM3MSBzdWJ0cmFjdCAxIDAuICAtPiAxCitzdWJ4MzcyIHN1YnRyYWN0IDEgIC4wIC0+IDEuMAorc3VieDM3MyBzdWJ0cmFjdCAxIDAuMCAtPiAxLjAKK3N1YngzNzQgc3VidHJhY3QgIDAgIDEgLT4gLTEKK3N1YngzNzUgc3VidHJhY3QgMC4gIDEgLT4gLTEKK3N1YngzNzYgc3VidHJhY3QgIC4wIDEgLT4gLTEuMAorc3VieDM3NyBzdWJ0cmFjdCAwLjAgMSAtPiAtMS4wCisKK3ByZWNpc2lvbjogOQorCistLSBsZWFkaW5nIDAgZGlnaXQgYmVmb3JlIHJvdW5kCitzdWJ4OTEwIHN1YnRyYWN0IC0xMDM1MTkzNjIgLTUxODk3OTU1LjMgLT4gLTUxNjIxNDA2LjcKK3N1Yng5MTEgc3VidHJhY3QgMTU5NTc5LjQ0NCA4OTgyNy41MjI5IC0+IDY5NzUxLjkyMTEKKworc3VieDkyMCBzdWJ0cmFjdCAzMzMuMTIzNDU2IDMzLjEyMzQ1NjYgLT4gMjk5Ljk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3N1Yng5MjEgc3VidHJhY3QgMzMzLjEyMzQ1NiAzMy4xMjM0NTY1IC0+IDMwMC4wMDAwMDAgSW5leGFjdCBSb3VuZGVkCitzdWJ4OTIyIHN1YnRyYWN0IDEzMy4xMjM0NTYgMzMuMTIzNDU2NSAtPiAgOTkuOTk5OTk5NQorc3VieDkyMyBzdWJ0cmFjdCAxMzMuMTIzNDU2IDMzLjEyMzQ1NjQgLT4gIDk5Ljk5OTk5OTYKK3N1Yng5MjQgc3VidHJhY3QgMTMzLjEyMzQ1NiAzMy4xMjM0NTQwIC0+IDEwMC4wMDAwMDIgUm91bmRlZAorc3VieDkyNSBzdWJ0cmFjdCAxMzMuMTIzNDU2IDQzLjEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAKK3N1Yng5MjYgc3VidHJhY3QgMTMzLjEyMzQ1NiA0My4xMjM0NTYxIC0+ICA4OS45OTk5OTk5CitzdWJ4OTI3IHN1YnRyYWN0IDEzMy4xMjM0NTYgNDMuMTIzNDU2NiAtPiAgODkuOTk5OTk5NAorc3VieDkyOCBzdWJ0cmFjdCAxMDEuMTIzNDU2IDkxLjEyMzQ1NjYgLT4gICA5Ljk5OTk5OTQKK3N1Yng5Mjkgc3VidHJhY3QgMTAxLjEyMzQ1NiA5OS4xMjM0NTY2IC0+ICAgMS45OTk5OTk0CisKKy0tIG1vcmUgb2YgdGhlIHNhbWU7IHByb2JlIGZvciBjbHVzdGVyIGJvdW5kYXJ5IHByb2JsZW1zCitwcmVjaXNpb246IDEKK3N1Yng5MzAgc3VidHJhY3QgIDExIDIgICAgICAgICAgIC0+IDkKK3ByZWNpc2lvbjogMgorc3VieDkzMiBzdWJ0cmFjdCAxMDEgMiAgICAgICAgICAgLT4gOTkKK3ByZWNpc2lvbjogMworc3VieDkzNCBzdWJ0cmFjdCAxMDEgMi4xICAgICAgICAgLT4gOTguOQorc3VieDkzNSBzdWJ0cmFjdCAxMDEgOTIuMDEgICAgICAgLT4gIDguOTkKK3ByZWNpc2lvbjogNAorc3VieDkzNiBzdWJ0cmFjdCAxMDEgMi4wMSAgICAgICAgLT4gOTguOTkKK3N1Yng5Mzcgc3VidHJhY3QgMTAxIDkyLjAxICAgICAgIC0+ICA4Ljk5CitzdWJ4OTM4IHN1YnRyYWN0IDEwMSA5Mi4wMDYgICAgICAtPiAgOC45OTQKK3ByZWNpc2lvbjogNQorc3VieDkzOSBzdWJ0cmFjdCAxMDEgMi4wMDEgICAgICAgLT4gOTguOTk5CitzdWJ4OTQwIHN1YnRyYWN0IDEwMSA5Mi4wMDEgICAgICAtPiAgOC45OTkKK3N1Yng5NDEgc3VidHJhY3QgMTAxIDkyLjAwMDYgICAgIC0+ICA4Ljk5OTQKK3ByZWNpc2lvbjogNgorc3VieDk0MiBzdWJ0cmFjdCAxMDEgMi4wMDAxICAgICAgLT4gOTguOTk5OQorc3VieDk0MyBzdWJ0cmFjdCAxMDEgOTIuMDAwMSAgICAgLT4gIDguOTk5OQorc3VieDk0NCBzdWJ0cmFjdCAxMDEgOTIuMDAwMDYgICAgLT4gIDguOTk5OTQKK3ByZWNpc2lvbjogNworc3VieDk0NSBzdWJ0cmFjdCAxMDEgMi4wMDAwMSAgICAgLT4gOTguOTk5OTkKK3N1Yng5NDYgc3VidHJhY3QgMTAxIDkyLjAwMDAxICAgIC0+ICA4Ljk5OTk5CitzdWJ4OTQ3IHN1YnRyYWN0IDEwMSA5Mi4wMDAwMDYgICAtPiAgOC45OTk5OTQKK3ByZWNpc2lvbjogOAorc3VieDk0OCBzdWJ0cmFjdCAxMDEgMi4wMDAwMDEgICAgLT4gOTguOTk5OTk5CitzdWJ4OTQ5IHN1YnRyYWN0IDEwMSA5Mi4wMDAwMDEgICAtPiAgOC45OTk5OTkKK3N1Yng5NTAgc3VidHJhY3QgMTAxIDkyLjAwMDAwMDYgIC0+ICA4Ljk5OTk5OTQKK3ByZWNpc2lvbjogOQorc3VieDk1MSBzdWJ0cmFjdCAxMDEgMi4wMDAwMDAxICAgLT4gOTguOTk5OTk5OQorc3VieDk1MiBzdWJ0cmFjdCAxMDEgOTIuMDAwMDAwMSAgLT4gIDguOTk5OTk5OQorc3VieDk1MyBzdWJ0cmFjdCAxMDEgOTIuMDAwMDAwMDYgLT4gIDguOTk5OTk5OTQKKworcHJlY2lzaW9uOiA5CisKKy0tIG1vcmUgTEhTIHN3YXBzIFt3ZXJlIGZpeGVkXQorc3VieDM5MCBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK3N1YngzOTEgc3VidHJhY3QgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK3N1YngzOTIgc3VidHJhY3QgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3Jworc3VieDM5MyBzdWJ0cmFjdCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK3N1YngzOTQgc3VidHJhY3QgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitzdWJ4Mzk1IHN1YnRyYWN0ICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3Jworc3VieDM5NiBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK3N1YngzOTcgc3VidHJhY3QgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK3N1YngzOTggc3VidHJhY3QgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK3N1YngzOTkgc3VidHJhY3QgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03Jworc3VieDQwMCBzdWJ0cmFjdCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1Jworc3VieDQwMSBzdWJ0cmFjdCAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitzdWJ4NDAyIHN1YnRyYWN0ICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1Jworc3VieDQwMyBzdWJ0cmFjdCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK3N1Yng0MDQgc3VidHJhY3QgJy01RTAnICAgICAgICAgMCAtPiAgJy01Jworc3VieDQwNSBzdWJ0cmFjdCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworc3VieDQwNiBzdWJ0cmFjdCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK3N1Yng0MDcgc3VidHJhY3QgJy01RTgnICAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAnCitzdWJ4NDA4IHN1YnRyYWN0ICctNUU5JyAgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrOScgICBSb3VuZGVkCitzdWJ4NDA5IHN1YnRyYWN0ICctNUUxMCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAnICBSb3VuZGVkCitzdWJ4NDEwIHN1YnRyYWN0ICctNUUxMScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTEnICBSb3VuZGVkCitzdWJ4NDExIHN1YnRyYWN0ICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzIFt3ZXJlIGZpeGVkXQorc3VieDQyMCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xMCcgLT4gICcwLjAwMDAwNTYyNjcnCitzdWJ4NDIxIHN1YnRyYWN0IDAgICctNTYyNjdFLTYnICAtPiAgJzAuMDU2MjY3Jworc3VieDQyMiBzdWJ0cmFjdCAwICAnLTU2MjY3RS01JyAgLT4gICcwLjU2MjY3Jworc3VieDQyMyBzdWJ0cmFjdCAwICAnLTU2MjY3RS00JyAgLT4gICc1LjYyNjcnCitzdWJ4NDI0IHN1YnRyYWN0IDAgICctNTYyNjdFLTMnICAtPiAgJzU2LjI2NycKK3N1Yng0MjUgc3VidHJhY3QgMCAgJy01NjI2N0UtMicgIC0+ICAnNTYyLjY3Jworc3VieDQyNiBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xJyAgLT4gICc1NjI2LjcnCitzdWJ4NDI3IHN1YnRyYWN0IDAgICctNTYyNjdFLTAnICAtPiAgJzU2MjY3Jworc3VieDQyOCBzdWJ0cmFjdCAwICAnLTVFLTEwJyAgICAgLT4gICc1RS0xMCcKK3N1Yng0Mjkgc3VidHJhY3QgMCAgJy01RS03JyAgICAgIC0+ICAnNUUtNycKK3N1Yng0MzAgc3VidHJhY3QgMCAgJy01RS02JyAgICAgIC0+ICAnMC4wMDAwMDUnCitzdWJ4NDMxIHN1YnRyYWN0IDAgICctNUUtNScgICAgICAtPiAgJzAuMDAwMDUnCitzdWJ4NDMyIHN1YnRyYWN0IDAgICctNUUtNCcgICAgICAtPiAgJzAuMDAwNScKK3N1Yng0MzMgc3VidHJhY3QgMCAgJy01RS0xJyAgICAgIC0+ICAnMC41Jworc3VieDQzNCBzdWJ0cmFjdCAwICAnLTVFMCcgICAgICAgLT4gICc1Jworc3VieDQzNSBzdWJ0cmFjdCAwICAnLTVFMScgICAgICAgLT4gICc1MCcKK3N1Yng0MzYgc3VidHJhY3QgMCAgJy01RTUnICAgICAgIC0+ICAnNTAwMDAwJworc3VieDQzNyBzdWJ0cmFjdCAwICAnLTVFOCcgICAgICAgLT4gICc1MDAwMDAwMDAnCitzdWJ4NDM4IHN1YnRyYWN0IDAgICctNUU5JyAgICAgICAtPiAgJzUuMDAwMDAwMDBFKzknICAgIFJvdW5kZWQKK3N1Yng0Mzkgc3VidHJhY3QgMCAgJy01RTEwJyAgICAgIC0+ICAnNS4wMDAwMDAwMEUrMTAnICAgUm91bmRlZAorc3VieDQ0MCBzdWJ0cmFjdCAwICAnLTVFMTEnICAgICAgLT4gICc1LjAwMDAwMDAwRSsxMScgICBSb3VuZGVkCitzdWJ4NDQxIHN1YnRyYWN0IDAgICctNUUxMDAnICAgICAtPiAgJzUuMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorcHJlY2lzaW9uOiAxNQorc3VieDQ2MSBzdWJ0cmFjdCAnMUUrMTInICcxJyAgICAgICAtPiAnOTk5OTk5OTk5OTk5Jworc3VieDQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMScgICAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK3N1Yng0NjMgc3VidHJhY3QgJzEuMTEnICAnLTFFKzEyJyAgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitzdWJ4NDY0IHN1YnRyYWN0ICctMScgICAgJy0xRSsxMicgIC0+ICc5OTk5OTk5OTk5OTknCitzdWJ4NDY1IHN1YnRyYWN0ICc3RSsxMicgJzEnICAgICAgIC0+ICc2OTk5OTk5OTk5OTk5Jworc3VieDQ2NiBzdWJ0cmFjdCAnN0UrMTInICctMS4xMScgICAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK3N1Yng0Njcgc3VidHJhY3QgJzEuMTEnICAnLTdFKzEyJyAgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitzdWJ4NDY4IHN1YnRyYWN0ICctMScgICAgJy03RSsxMicgIC0+ICc2OTk5OTk5OTk5OTk5JworCistLSAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1ICAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEgMjM0NTY3ODkwMTIzNDUKK3N1Yng0NzAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorc3VieDQ3MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NDcyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng0NzMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorc3VieDQ3NCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NDc1IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng0NzYgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorc3VieDQ3NyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorc3VieDQ3OCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTknCitzdWJ4NDc5IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OCcKK3N1Yng0ODAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk3Jworc3VieDQ4MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTYnCitzdWJ4NDgyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NScKK3N1Yng0ODMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk0JworCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCitwcmVjaXNpb246IDkKK3JvdW5kaW5nOiBoYWxmX3VwCitzdWJ4NTAwIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKK3N1Yng1MDEgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MDIgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MDMgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MDQgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MDUgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MDYgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MDcgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MDggc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MDkgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MTAgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MTEgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MTIgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MTMgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MTQgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MTUgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MTYgc3VidHJhY3QgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg4Jworc3VieDUxNyBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDUxOCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDUxOSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitzdWJ4NTIwIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKK3N1Yng1MjEgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MjIgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MjMgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MjQgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MjUgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MjYgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1Mjcgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1Mjggc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1Mjkgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MzAgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MzEgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MzIgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MzMgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MzQgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MzUgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MzYgc3VidHJhY3QgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg4Jworc3VieDUzNyBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDUzOCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDUzOSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK3N1Yng1NDAgc3VidHJhY3QgJzEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NDEgc3VidHJhY3QgJzEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NDIgc3VidHJhY3QgJzEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK3N1Yng1NTAgc3VidHJhY3QgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5Jworc3VieDU1MSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU1MiBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU1MyBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU1NCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU1NSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU1NiBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU1NyBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU1OCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU1OSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU2MCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU2MSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU2MiBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU2MyBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU2NCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU2NSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDU2NiBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnCitzdWJ4NTY3IHN1YnRyYWN0ICcxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTY4IHN1YnRyYWN0ICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTY5IHN1YnRyYWN0ICcxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5Li4uCityb3VuZGluZzogaGFsZl91cAorc3VieDYwMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5Jworc3VieDYwMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MDIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjAzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYwNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MDUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjA2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYwNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MDggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjA5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYxMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MTEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjEyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYxMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MTQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjE1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYxNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4Jworc3VieDYxNyBzdWJ0cmFjdCAxLjAwMDAwMDAwMSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MTggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjE5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitzdWJ4NjIwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknCitzdWJ4NjIxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYyMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MjMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjI0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYyNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MjYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjI3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYyOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2Mjkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjMwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYzMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MzIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjMzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYzNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MzUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjM2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnCitzdWJ4NjM3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYzOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2Mzkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorc3VieDY0MCBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjM0NTY3ODgnIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NDEgc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzNDU2Nzg4JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjQyIHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzQ1Njc4OCcgLT4gJy0xMjM0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorc3VieDY1MCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5Jworc3VieDY1MSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NTIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjUzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY1NCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NTUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjU2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY1NyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NTggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjU5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY2MCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NjEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjYyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY2MyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NjQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjY1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY2NiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4Jworc3VieDY2NyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2Njggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjY5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvdHMgb2YgbGVhZGluZyB6ZXJvcyBpbiBpbnRlcm1lZGlhdGUgcmVzdWx0LCBhbmQgc2hvd2luZyBlZmZlY3RzIG9mCistLSBpbnB1dCByb3VuZGluZyB3b3VsZCBoYXZlIGFmZmVjdGVkIHRoZSBmb2xsb3dpbmcKK3ByZWNpc2lvbjogOQorcm91bmRpbmc6IGhhbGZfdXAKK3N1Yng2NzAgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OC4xJyAtPiAwLjkKK3N1Yng2NzEgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OC45JyAtPiAwLjEKK3N1Yng2NzIgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OS4xJyAtPiAtMC4xCitzdWJ4NjczIHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODkuNScgLT4gLTAuNQorc3VieDY3NCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg5LjknIC0+IC0wLjkKKworcm91bmRpbmc6IGhhbGZfZXZlbgorc3VieDY4MCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg4LjEnIC0+IDAuOQorc3VieDY4MSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg4LjknIC0+IDAuMQorc3VieDY4MiBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg5LjEnIC0+IC0wLjEKK3N1Yng2ODMgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OS41JyAtPiAtMC41CitzdWJ4Njg0IHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODkuOScgLT4gLTAuOQorCitzdWJ4Njg1IHN1YnRyYWN0ICcxMjM0NTY3ODgnICcxMjM0NTY3ODcuMScgLT4gMC45CitzdWJ4Njg2IHN1YnRyYWN0ICcxMjM0NTY3ODgnICcxMjM0NTY3ODcuOScgLT4gMC4xCitzdWJ4Njg3IHN1YnRyYWN0ICcxMjM0NTY3ODgnICcxMjM0NTY3ODguMScgLT4gLTAuMQorc3VieDY4OCBzdWJ0cmFjdCAnMTIzNDU2Nzg4JyAnMTIzNDU2Nzg4LjUnIC0+IC0wLjUKK3N1Yng2ODkgc3VidHJhY3QgJzEyMzQ1Njc4OCcgJzEyMzQ1Njc4OC45JyAtPiAtMC45CisKK3JvdW5kaW5nOiBkb3duCitzdWJ4NjkwIHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODguMScgLT4gMC45CitzdWJ4NjkxIHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODguOScgLT4gMC4xCitzdWJ4NjkyIHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODkuMScgLT4gLTAuMQorc3VieDY5MyBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg5LjUnIC0+IC0wLjUKK3N1Yng2OTQgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OS45JyAtPiAtMC45CisKKy0tIGlucHV0IHByZXBhcmF0aW9uIHRlc3RzCityb3VuZGluZzogaGFsZl91cAorcHJlY2lzaW9uOiAzCisKK3N1Yng3MDAgc3VidHJhY3QgJzEyMzQ1Njc4OTAwMDAwJyAgLTk5OTk5OTk5OTk5OTkgLT4gICcyLjIzRSsxMycgSW5leGFjdCBSb3VuZGVkCitzdWJ4NzAxIHN1YnRyYWN0ICAnOTk5OTk5OTk5OTk5OScgLTEyMzQ1Njc4OTAwMDAwIC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZAorc3VieDcwMiBzdWJ0cmFjdCAnMTJFKzMnICAnLTM0NTYnIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NzAzIHN1YnRyYWN0ICcxMkUrMycgICctMzQ0NicgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng3MDQgc3VidHJhY3QgJzEyRSszJyAgJy0zNDU0JyAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorc3VieDcwNSBzdWJ0cmFjdCAnMTJFKzMnICAnLTM0NDQnIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCisKK3N1Yng3MDYgc3VidHJhY3QgJzM0NTYnICAnLTEyRSszJyAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorc3VieDcwNyBzdWJ0cmFjdCAnMzQ0NicgICctMTJFKzMnIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NzA4IHN1YnRyYWN0ICczNDU0JyAgJy0xMkUrMycgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng3MDkgc3VidHJhY3QgJzM0NDQnICAnLTEyRSszJyAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtzdWJub3JtYWxzIG5vdyBwb3NzaWJsZV0KK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDkKK3JvdW5kaW5nOiBkb3duCitzdWJ4NzEwIHN1YnRyYWN0IDFFKzk5OTk5OTk5OSAgICAtOUUrOTk5OTk5OTk5ICAgLT4gOS45OTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc3VieDcxMSBzdWJ0cmFjdCA5RSs5OTk5OTk5OTkgICAgLTFFKzk5OTk5OTk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX3VwCitzdWJ4NzEyIHN1YnRyYWN0IDFFKzk5OTk5OTk5OSAgICAtOUUrOTk5OTk5OTk5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzdWJ4NzEzIHN1YnRyYWN0IDlFKzk5OTk5OTk5OSAgICAtMUUrOTk5OTk5OTk5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzdWJ4NzE0IHN1YnRyYWN0IC0xLjFFLTk5OTk5OTk5OSAtMUUtOTk5OTk5OTk5ICAgLT4gLTFFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCitzdWJ4NzE1IHN1YnRyYWN0IDFFLTk5OTk5OTk5OSAgICArMS4xZS05OTk5OTk5OTkgLT4gLTFFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCitzdWJ4NzE2IHN1YnRyYWN0IC0xRSs5OTk5OTk5OTkgICArOUUrOTk5OTk5OTk5ICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc3VieDcxNyBzdWJ0cmFjdCAtOUUrOTk5OTk5OTk5ICAgKzFFKzk5OTk5OTk5OSAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng3MTggc3VidHJhY3QgKzEuMUUtOTk5OTk5OTk5ICsxRS05OTk5OTk5OTkgICAtPiAxRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorc3VieDcxOSBzdWJ0cmFjdCAtMUUtOTk5OTk5OTk5ICAgLTEuMWUtOTk5OTk5OTk5IC0+IDFFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCisKK3ByZWNpc2lvbjogMworc3VieDcyMCBzdWJ0cmFjdCAxICA5Ljk5OUUrOTk5OTk5OTk5ICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorc3VieDcyMSBzdWJ0cmFjdCAxIC05Ljk5OUUrOTk5OTk5OTk5ICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorc3VieDcyMiBzdWJ0cmFjdCAgICA5Ljk5OUUrOTk5OTk5OTk5IDEgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorc3VieDcyMyBzdWJ0cmFjdCAgIC05Ljk5OUUrOTk5OTk5OTk5IDEgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorc3VieDcyNCBzdWJ0cmFjdCAxICA5Ljk5OUUrOTk5OTk5OTk5ICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorc3VieDcyNSBzdWJ0cmFjdCAxIC05Ljk5OUUrOTk5OTk5OTk5ICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorc3VieDcyNiBzdWJ0cmFjdCAgICA5Ljk5OUUrOTk5OTk5OTk5IDEgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorc3VieDcyNyBzdWJ0cmFjdCAgIC05Ljk5OUUrOTk5OTk5OTk5IDEgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBbbW9yZSBiZWxvd10KKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorc3ViNzMxIHN1YnRyYWN0IDEyMzQ1Njc4MDAwIDAgLT4gIDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKK3N1YjczMiBzdWJ0cmFjdCAwIDEyMzQ1Njc4MDAwIC0+IC0xLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitzdWI3MzMgc3VidHJhY3QgMTIzNDU2NzgwMCAgMCAtPiAgMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitzdWI3MzQgc3VidHJhY3QgMCAxMjM0NTY3ODAwICAtPiAtMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitzdWI3MzUgc3VidHJhY3QgMTIzNDU2Nzg5MCAgMCAtPiAgMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitzdWI3MzYgc3VidHJhY3QgMCAxMjM0NTY3ODkwICAtPiAtMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitzdWI3Mzcgc3VidHJhY3QgMTIzNDU2Nzg5MSAgMCAtPiAgMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK3N1YjczOCBzdWJ0cmFjdCAwIDEyMzQ1Njc4OTEgIC0+IC0xLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorc3ViNzM5IHN1YnRyYWN0IDEyMzQ1Njc4OTAxIDAgLT4gIDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorc3ViNzQwIHN1YnRyYWN0IDAgMTIzNDU2Nzg5MDEgLT4gLTEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorc3ViNzQxIHN1YnRyYWN0IDEyMzQ1Njc4OTYgIDAgLT4gIDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitzdWI3NDIgc3VidHJhY3QgMCAxMjM0NTY3ODk2ICAtPiAtMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxNQorc3ViNzUxIHN1YnRyYWN0IDEyMzQ1Njc4MDAwIDAgLT4gIDEyMzQ1Njc4MDAwCitzdWI3NTIgc3VidHJhY3QgMCAxMjM0NTY3ODAwMCAtPiAtMTIzNDU2NzgwMDAKK3N1Yjc1MyBzdWJ0cmFjdCAxMjM0NTY3ODAwICAwIC0+ICAxMjM0NTY3ODAwCitzdWI3NTQgc3VidHJhY3QgMCAxMjM0NTY3ODAwICAtPiAtMTIzNDU2NzgwMAorc3ViNzU1IHN1YnRyYWN0IDEyMzQ1Njc4OTAgIDAgLT4gIDEyMzQ1Njc4OTAKK3N1Yjc1NiBzdWJ0cmFjdCAwIDEyMzQ1Njc4OTAgIC0+IC0xMjM0NTY3ODkwCitzdWI3NTcgc3VidHJhY3QgMTIzNDU2Nzg5MSAgMCAtPiAgMTIzNDU2Nzg5MQorc3ViNzU4IHN1YnRyYWN0IDAgMTIzNDU2Nzg5MSAgLT4gLTEyMzQ1Njc4OTEKK3N1Yjc1OSBzdWJ0cmFjdCAxMjM0NTY3ODkwMSAwIC0+ICAxMjM0NTY3ODkwMQorc3ViNzYwIHN1YnRyYWN0IDAgMTIzNDU2Nzg5MDEgLT4gLTEyMzQ1Njc4OTAxCitzdWI3NjEgc3VidHJhY3QgMTIzNDU2Nzg5NiAgMCAtPiAgMTIzNDU2Nzg5Ngorc3ViNzYyIHN1YnRyYWN0IDAgMTIzNDU2Nzg5NiAgLT4gLTEyMzQ1Njc4OTYKKworLS0gU3BlY2lhbHMKK3N1Yng3ODAgc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorc3VieDc4MSBzdWJ0cmFjdCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitzdWJ4NzgyIHN1YnRyYWN0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK3N1Yng3ODMgc3VidHJhY3QgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorc3VieDc4NCBzdWJ0cmFjdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitzdWJ4Nzg1IHN1YnRyYWN0IC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK3N1Yng3ODcgc3VidHJhY3QgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorc3VieDc4OCBzdWJ0cmFjdCAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitzdWJ4Nzg5IHN1YnRyYWN0IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkKK3N1Yng3OTAgc3VidHJhY3QgIDAgICAgIEluZiAgIC0+IC1JbmZpbml0eQorc3VieDc5MSBzdWJ0cmFjdCAgMSAgICAgSW5mICAgLT4gLUluZmluaXR5CitzdWJ4NzkyIHN1YnRyYWN0ICAxMDAwICBJbmYgICAtPiAtSW5maW5pdHkKKworc3VieDgwMCBzdWJ0cmFjdCAgSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4MDEgc3VidHJhY3QgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorc3VieDgwMiBzdWJ0cmFjdCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitzdWJ4ODAzIHN1YnRyYWN0ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK3N1Yng4MDQgc3VidHJhY3QgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorc3VieDgwNSBzdWJ0cmFjdCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitzdWJ4ODA2IHN1YnRyYWN0ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK3N1Yng4MDcgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorc3VieDgwOCBzdWJ0cmFjdCAtMTAwMCAtSW5mICAgLT4gIEluZmluaXR5CitzdWJ4ODA5IHN1YnRyYWN0IC1JbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDgxMCBzdWJ0cmFjdCAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5CitzdWJ4ODExIHN1YnRyYWN0IC0wICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK3N1Yng4MTIgc3VidHJhY3QgIDAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorc3VieDgxMyBzdWJ0cmFjdCAgMSAgICAtSW5mICAgLT4gIEluZmluaXR5CitzdWJ4ODE0IHN1YnRyYWN0ICAxMDAwIC1JbmYgICAtPiAgSW5maW5pdHkKK3N1Yng4MTUgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCitzdWJ4ODIxIHN1YnRyYWN0ICBOYU4gICBJbmYgICAtPiAgTmFOCitzdWJ4ODIyIHN1YnRyYWN0IC1OYU4gICAxMDAwICAtPiAtTmFOCitzdWJ4ODIzIHN1YnRyYWN0ICBOYU4gICAxICAgICAtPiAgTmFOCitzdWJ4ODI0IHN1YnRyYWN0ICBOYU4gICAwICAgICAtPiAgTmFOCitzdWJ4ODI1IHN1YnRyYWN0ICBOYU4gIC0wICAgICAtPiAgTmFOCitzdWJ4ODI2IHN1YnRyYWN0ICBOYU4gIC0xICAgICAtPiAgTmFOCitzdWJ4ODI3IHN1YnRyYWN0ICBOYU4gIC0xMDAwICAtPiAgTmFOCitzdWJ4ODI4IHN1YnRyYWN0ICBOYU4gIC1JbmYgICAtPiAgTmFOCitzdWJ4ODI5IHN1YnRyYWN0IC1OYU4gICBOYU4gICAtPiAtTmFOCitzdWJ4ODMwIHN1YnRyYWN0IC1JbmYgICBOYU4gICAtPiAgTmFOCitzdWJ4ODMxIHN1YnRyYWN0IC0xMDAwICBOYU4gICAtPiAgTmFOCitzdWJ4ODMyIHN1YnRyYWN0IC0xICAgICBOYU4gICAtPiAgTmFOCitzdWJ4ODMzIHN1YnRyYWN0IC0wICAgICBOYU4gICAtPiAgTmFOCitzdWJ4ODM0IHN1YnRyYWN0ICAwICAgICBOYU4gICAtPiAgTmFOCitzdWJ4ODM1IHN1YnRyYWN0ICAxICAgICBOYU4gICAtPiAgTmFOCitzdWJ4ODM2IHN1YnRyYWN0ICAxMDAwIC1OYU4gICAtPiAtTmFOCitzdWJ4ODM3IHN1YnRyYWN0ICBJbmYgICBOYU4gICAtPiAgTmFOCisKK3N1Yng4NDEgc3VidHJhY3QgIHNOYU4gIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODQyIHN1YnRyYWN0IC1zTmFOICAxMDAwICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg0MyBzdWJ0cmFjdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NDQgc3VidHJhY3QgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODQ1IHN1YnRyYWN0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg0NiBzdWJ0cmFjdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NDcgc3VidHJhY3QgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODQ4IHN1YnRyYWN0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg0OSBzdWJ0cmFjdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NTAgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODUxIHN1YnRyYWN0IC1JbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg1MiBzdWJ0cmFjdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NTMgc3VidHJhY3QgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODU0IHN1YnRyYWN0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg1NSBzdWJ0cmFjdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NTYgc3VidHJhY3QgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODU3IHN1YnRyYWN0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg1OCBzdWJ0cmFjdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NTkgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK3N1Yng4NjEgc3VidHJhY3QgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjEKK3N1Yng4NjIgc3VidHJhY3QgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKK3N1Yng4NjMgc3VidHJhY3QgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK3N1Yng4NjQgc3VidHJhY3QgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQKK3N1Yng4NjUgc3VidHJhY3QgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKK3N1Yng4NjYgc3VidHJhY3QgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitzdWJ4ODY3IHN1YnRyYWN0IC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQorc3VieDg2OCBzdWJ0cmFjdCAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKK3N1Yng4Njkgc3VidHJhY3QgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorc3VieDg3MSBzdWJ0cmFjdCAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODcyIHN1YnRyYWN0ICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NzMgc3VidHJhY3QgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg3NCBzdWJ0cmFjdCAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODc1IHN1YnRyYWN0ICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NzYgc3VidHJhY3QgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg3NyBzdWJ0cmFjdCAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODc4IHN1YnRyYWN0IC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4Nzkgc3VidHJhY3QgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg4MCBzdWJ0cmFjdCAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODgxIHN1YnRyYWN0ICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZWRnZSBjYXNlIHNwaWxscworc3VieDkwMSBzdWJ0cmFjdCAgMi5FLTMgIDEuMDAyICAtPiAtMS4wMDAKK3N1Yng5MDIgc3VidHJhY3QgIDIuMEUtMyAgMS4wMDIgIC0+IC0xLjAwMDAKK3N1Yng5MDMgc3VidHJhY3QgIDIuMDBFLTMgIDEuMDAyMCAgLT4gLTEuMDAwMDAKK3N1Yng5MDQgc3VidHJhY3QgIDIuMDAwRS0zICAxLjAwMjAwICAtPiAtMS4wMDAwMDAKK3N1Yng5MDUgc3VidHJhY3QgIDIuMDAwMEUtMyAgMS4wMDIwMDAgIC0+IC0xLjAwMDAwMDAKK3N1Yng5MDYgc3VidHJhY3QgIDIuMDAwMDBFLTMgIDEuMDAyMDAwMCAgLT4gLTEuMDAwMDAwMDAKK3N1Yng5MDcgc3VidHJhY3QgIDIuMDAwMDAwRS0zICAxLjAwMjAwMDAwICAtPiAtMS4wMDAwMDAwMDAKK3N1Yng5MDggc3VidHJhY3QgIDIuMDAwMDAwMEUtMyAgMS4wMDIwMDAwMDAgIC0+IC0xLjAwMDAwMDAwMDAKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93cworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorc3VieDEwMTAgc3VidHJhY3QgIDAgIDEuMDBFLTk5OSAgICAgICAtPiAgLTEuMDBFLTk5OQorc3VieDEwMTEgc3VidHJhY3QgIDAgIDAuMUUtOTk5ICAgICAgICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwKK3N1YngxMDEyIHN1YnRyYWN0ICAwICAwLjEwRS05OTkgICAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsCitzdWJ4MTAxMyBzdWJ0cmFjdCAgMCAgMC4xMDBFLTk5OSAgICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitzdWJ4MTAxNCBzdWJ0cmFjdCAgMCAgMC4wMUUtOTk5ICAgICAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK3N1YngxMDE1IHN1YnRyYWN0ICAwICAwLjk5OUUtOTk5ICAgICAgLT4gIC0xLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMDE2IHN1YnRyYWN0ICAwICAwLjA5OUUtOTk5ICAgICAgLT4gIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMDE3IHN1YnRyYWN0ICAwICAwLjAwOUUtOTk5ICAgICAgLT4gIC0xRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMDE4IHN1YnRyYWN0ICAwICAwLjAwMUUtOTk5ICAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorc3VieDEwMTkgc3VidHJhY3QgIDAgIDAuMDAwOUUtOTk5ICAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitzdWJ4MTAyMCBzdWJ0cmFjdCAgMCAgMC4wMDAxRS05OTkgICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworc3VieDEwMzAgc3VidHJhY3QgIDAgLTEuMDBFLTk5OSAgICAgICAtPiAgIDEuMDBFLTk5OQorc3VieDEwMzEgc3VidHJhY3QgIDAgLTAuMUUtOTk5ICAgICAgICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwKK3N1YngxMDMyIHN1YnRyYWN0ICAwIC0wLjEwRS05OTkgICAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsCitzdWJ4MTAzMyBzdWJ0cmFjdCAgMCAtMC4xMDBFLTk5OSAgICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitzdWJ4MTAzNCBzdWJ0cmFjdCAgMCAtMC4wMUUtOTk5ICAgICAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK3N1YngxMDM1IHN1YnRyYWN0ICAwIC0wLjk5OUUtOTk5ICAgICAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMDM2IHN1YnRyYWN0ICAwIC0wLjA5OUUtOTk5ICAgICAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMDM3IHN1YnRyYWN0ICAwIC0wLjAwOUUtOTk5ICAgICAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMDM4IHN1YnRyYWN0ICAwIC0wLjAwMUUtOTk5ICAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorc3VieDEwMzkgc3VidHJhY3QgIDAgLTAuMDAwOUUtOTk5ICAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitzdWJ4MTA0MCBzdWJ0cmFjdCAgMCAtMC4wMDAxRS05OTkgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworLS0gc29tZSBub24temVybyBzdWJub3JtYWwgc3VidHJhY3RzCistLSBzdWJ4MTA1NiBpcyBhIHRyaWNreSBjYXNlCityb3VuZGluZzogaGFsZl91cAorc3VieDEwNTAgc3VidHJhY3QgIDEuMDBFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDkuMEUtMTAwMCAgU3Vibm9ybWFsCitzdWJ4MTA1MSBzdWJ0cmFjdCAgMC4xRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMEUtMTAwMAorc3VieDEwNTIgc3VidHJhY3QgIDAuMTBFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDBFLTEwMDEKK3N1YngxMDUzIHN1YnRyYWN0ICAwLjEwMEUtOTk5ICAwLjFFLTk5OSAgLT4gICAwRS0xMDAxICAgIENsYW1wZWQKK3N1YngxMDU0IHN1YnRyYWN0ICAwLjAxRS05OTkgICAwLjFFLTk5OSAgLT4gICAtOUUtMTAwMSAgIFN1Ym5vcm1hbAorc3VieDEwNTUgc3VidHJhY3QgIDAuOTk5RS05OTkgIDAuMUUtOTk5ICAtPiAgIDkuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMDU2IHN1YnRyYWN0ICAwLjA5OUUtOTk5ICAwLjFFLTk5OSAgLT4gICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3N1YngxMDU3IHN1YnRyYWN0ICAwLjAwOUUtOTk5ICAwLjFFLTk5OSAgLT4gICAtOUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTA1OCBzdWJ0cmFjdCAgMC4wMDFFLTk5OSAgMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworc3VieDEwNTkgc3VidHJhY3QgIDAuMDAwOUUtOTk5IDAuMUUtOTk5ICAtPiAgIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMDYwIHN1YnRyYWN0ICAwLjAwMDFFLTk5OSAwLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK3ByZWNpc2lvbjogICA1CittYXhleHBvbmVudDogNzkKK21pbmV4cG9uZW50OiAtNzkKK3N1YngxMTAxIHN1YnRyYWN0ICAwIDEuNTI0NDRFLTgwIC0+IC0xLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMTAyIHN1YnRyYWN0ICAwIDEuNTI0NDVFLTgwIC0+IC0xLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMTAzIHN1YnRyYWN0ICAwIDEuNTI0NDZFLTgwIC0+IC0xLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMTA0IHN1YnRyYWN0ICAxLjUyNDQ0RS04MCAwIC0+ICAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMTA1IHN1YnRyYWN0ICAxLjUyNDQ1RS04MCAwIC0+ICAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMTA2IHN1YnRyYWN0ICAxLjUyNDQ2RS04MCAwIC0+ICAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworc3VieDExMTEgc3VidHJhY3QgIDEuMjM0NTY3OEUtODAgIDEuMjM0NTY3MUUtODAgLT4gIDBFLTgzIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3N1YngxMTEyIHN1YnRyYWN0ICAxLjIzNDU2NzhFLTgwICAxLjIzNDU2MThFLTgwIC0+ICAwRS04MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitzdWJ4MTExMyBzdWJ0cmFjdCAgMS4yMzQ1Njc4RS04MCAgMS4yMzQ1MTc4RS04MCAtPiAgMEUtODMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorc3VieDExMTQgc3VidHJhY3QgIDEuMjM0NTY3OEUtODAgIDEuMjM0MTY3OEUtODAgLT4gIDBFLTgzIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3N1YngxMTE1IHN1YnRyYWN0ICAxLjIzNDU2NzhFLTgwICAxLjIzMTU2NzhFLTgwIC0+ICAzRS04MyAgICAgICAgIFJvdW5kZWQgU3Vibm9ybWFsCitzdWJ4MTExNiBzdWJ0cmFjdCAgMS4yMzQ1Njc4RS04MCAgMS4yMTQ1Njc4RS04MCAtPiAgMi4wRS04MiAgICAgICBSb3VuZGVkIFN1Ym5vcm1hbAorc3VieDExMTcgc3VidHJhY3QgIDEuMjM0NTY3OEUtODAgIDEuMTM0NTY3OEUtODAgLT4gIDEuMDBFLTgxICAgICAgUm91bmRlZCBTdWJub3JtYWwKK3N1YngxMTE4IHN1YnRyYWN0ICAxLjIzNDU2NzhFLTgwICAwLjIzNDU2NzhFLTgwIC0+ICAxLjAwMEUtODAgICAgIFJvdW5kZWQgU3Vibm9ybWFsCisKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorc3VieDExMjUgIHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTAKK3N1YngxMTI2ICBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwCitzdWJ4MTEyNyAgc3VidHJhY3QgMTMwRS0yICAxRTAgICAgLT4gMC4zMAorc3VieDExMjggIHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMKKworLS0gTnVsbCB0ZXN0cworc3VieDk5OTAgc3VidHJhY3QgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4OTk5MSBzdWJ0cmFjdCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdGVzdGFsbC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90ZXN0YWxsLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjZTczMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdGVzdGFsbC5kZWNUZXN0CkBAIC0wLDAgKzEsODcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gdGVzdGFsbC5kZWNUZXN0IC0tIHJ1biBhbGwgZ2VuZXJhbCBkZWNpbWFsIGFyaXRobWV0aWMgdGVzdGNhc2VzICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBjb3JlIHRlc3RzICh1c2luZyBFeHRlbmRlZDogMSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlY3Rlc3Q6IGJhc2UKKworZGVjdGVzdDogYWJzCitkZWN0ZXN0OiBhZGQKK2RlY3Rlc3Q6IGFuZAorZGVjdGVzdDogY2xhbXAKK2RlY3Rlc3Q6IGNsYXNzCitkZWN0ZXN0OiBjb21wYXJlCitkZWN0ZXN0OiBjb21wYXJlc2lnCitkZWN0ZXN0OiBjb21wYXJldG90YWwKK2RlY3Rlc3Q6IGNvbXBhcmV0b3RtYWcKK2RlY3Rlc3Q6IGNvcHkKK2RlY3Rlc3Q6IGNvcHlhYnMKK2RlY3Rlc3Q6IGNvcHluZWdhdGUKK2RlY3Rlc3Q6IGNvcHlzaWduCitkZWN0ZXN0OiBkaXZpZGUKK2RlY3Rlc3Q6IGRpdmlkZWludAorZGVjdGVzdDogZXhwCitkZWN0ZXN0OiBmbWEKK2RlY3Rlc3Q6IGluZXhhY3QKK2RlY3Rlc3Q6IGludmVydAorZGVjdGVzdDogbG4KK2RlY3Rlc3Q6IGxvZ2IKK2RlY3Rlc3Q6IGxvZzEwCitkZWN0ZXN0OiBtYXgKK2RlY3Rlc3Q6IG1heG1hZworZGVjdGVzdDogbWluCitkZWN0ZXN0OiBtaW5tYWcKK2RlY3Rlc3Q6IG1pbnVzCitkZWN0ZXN0OiBtdWx0aXBseQorZGVjdGVzdDogbmV4dG1pbnVzCitkZWN0ZXN0OiBuZXh0cGx1cworZGVjdGVzdDogbmV4dHRvd2FyZAorZGVjdGVzdDogb3IKK2RlY3Rlc3Q6IHBsdXMKK2RlY3Rlc3Q6IHBvd2VyCitkZWN0ZXN0OiBwb3dlcnNxcnQKK2RlY3Rlc3Q6IHF1YW50aXplCitkZWN0ZXN0OiByYW5kb21zCitkZWN0ZXN0OiByZWR1Y2UgICAgICAgICAgICAgICAtLSBbd2FzIGNhbGxlZCBub3JtYWxpemVdCitkZWN0ZXN0OiByZW1haW5kZXIKK2RlY3Rlc3Q6IHJlbWFpbmRlcm5lYXIKK2RlY3Rlc3Q6IHJlc2NhbGUgICAgICAgICAgICAgIC0tIFtvYnNvbGV0ZV0KK2RlY3Rlc3Q6IHJvdGF0ZQorZGVjdGVzdDogcm91bmRpbmcKK2RlY3Rlc3Q6IHNhbWVxdWFudHVtCitkZWN0ZXN0OiBzY2FsZWIKK2RlY3Rlc3Q6IHNoaWZ0CitkZWN0ZXN0OiBzcXVhcmVyb290CitkZWN0ZXN0OiBzdWJ0cmFjdAorZGVjdGVzdDogdG9pbnRlZ3JhbAorZGVjdGVzdDogdG9pbnRlZ3JhbHgKK2RlY3Rlc3Q6IHRyaW0KK2RlY3Rlc3Q6IHhvcgorCistLSBUaGUgbmV4dCBhcmUgZm9yIHRoZSBTdHJhd21hbiA0ZCBjb25jcmV0ZSByZXByZXNlbnRhdGlvbnMgYW5kCistLSB0ZXN0cyBhdCB0aG9zZSBzaXplcyBbaW5jbHVkaW5nIGRzRW5jb2RlLCBkZEVuY29kZSwgYW5kIGRxRW5jb2RlLAorLS0gd2hpY2ggcmVwbGFjZSBkZWNpbWFsMzIsIGRlY2ltYWw2NCwgYW5kIGRlY2ltYWwxMjhdCitkZWN0ZXN0OiBkZWNTaW5nbGUKK2RlY3Rlc3Q6IGRlY0RvdWJsZQorZGVjdGVzdDogZGVjUXVhZAorCistLSBHZW5lcmFsIDMxLT4zMy1kaWdpdCBib3VuZGFyeSB0ZXN0cworZGVjdGVzdDogcmFuZG9tYm91bmQzMgorCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3RvaW50ZWdyYWwuZGVjVGVzdCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdG9pbnRlZ3JhbC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmM2ZiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3RvaW50ZWdyYWwuZGVjVGVzdApAQCAtMCwwICsxLDI0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSB0b2ludGVncmFsLmRlY1Rlc3QgLS0gcm91bmQgZGVjaW1hbCB0byBpbnRlZ3JhbCB2YWx1ZSAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHRlc3RzIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uICdyb3VuZC10by1pbnRlZ3JhbAorLS0gdmFsdWUnIG9wZXJhdGlvbiAoZnJvbSBJRUVFIDg1NCwgbGF0ZXIgbW9kaWZpZWQgaW4gNzU0cikuCistLSBBbGwgbm9uLXplcm8gcmVzdWx0cyBhcmUgZGVmaW5lZCBhcyBiZWluZyB0aG9zZSBmcm9tIGVpdGhlciBjb3B5IG9yCistLSBxdWFudGl6ZSwgc28gdGhvc2UgYXJlIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHRlc3RlZC4KKy0tIE5vdGUgdGhhdCA3NTRyIHJlcXVpcmVzIHRoYXQgSW5leGFjdCBub3QgYmUgc2V0LCBhbmQgd2Ugc2ltaWxhcmx5CistLSBhc3N1bWUgUm91bmRlZCBpcyBub3Qgc2V0LgorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCitpbnR4MDAxIHRvaW50ZWdyYWwgICAgICAwICAgICAtPiAgMAoraW50eDAwMiB0b2ludGVncmFsICAgICAgMC4wICAgLT4gIDAKK2ludHgwMDMgdG9pbnRlZ3JhbCAgICAgIDAuMSAgIC0+ICAwCitpbnR4MDA0IHRvaW50ZWdyYWwgICAgICAwLjIgICAtPiAgMAoraW50eDAwNSB0b2ludGVncmFsICAgICAgMC4zICAgLT4gIDAKK2ludHgwMDYgdG9pbnRlZ3JhbCAgICAgIDAuNCAgIC0+ICAwCitpbnR4MDA3IHRvaW50ZWdyYWwgICAgICAwLjUgICAtPiAgMQoraW50eDAwOCB0b2ludGVncmFsICAgICAgMC42ICAgLT4gIDEKK2ludHgwMDkgdG9pbnRlZ3JhbCAgICAgIDAuNyAgIC0+ICAxCitpbnR4MDEwIHRvaW50ZWdyYWwgICAgICAwLjggICAtPiAgMQoraW50eDAxMSB0b2ludGVncmFsICAgICAgMC45ICAgLT4gIDEKK2ludHgwMTIgdG9pbnRlZ3JhbCAgICAgIDEgICAgIC0+ICAxCitpbnR4MDEzIHRvaW50ZWdyYWwgICAgICAxLjAgICAtPiAgMQoraW50eDAxNCB0b2ludGVncmFsICAgICAgMS4xICAgLT4gIDEKK2ludHgwMTUgdG9pbnRlZ3JhbCAgICAgIDEuMiAgIC0+ICAxCitpbnR4MDE2IHRvaW50ZWdyYWwgICAgICAxLjMgICAtPiAgMQoraW50eDAxNyB0b2ludGVncmFsICAgICAgMS40ICAgLT4gIDEKK2ludHgwMTggdG9pbnRlZ3JhbCAgICAgIDEuNSAgIC0+ICAyCitpbnR4MDE5IHRvaW50ZWdyYWwgICAgICAxLjYgICAtPiAgMgoraW50eDAyMCB0b2ludGVncmFsICAgICAgMS43ICAgLT4gIDIKK2ludHgwMjEgdG9pbnRlZ3JhbCAgICAgIDEuOCAgIC0+ICAyCitpbnR4MDIyIHRvaW50ZWdyYWwgICAgICAxLjkgICAtPiAgMgorLS0gbmVnYXRpdmVzCitpbnR4MDMxIHRvaW50ZWdyYWwgICAgIC0wICAgICAtPiAtMAoraW50eDAzMiB0b2ludGVncmFsICAgICAtMC4wICAgLT4gLTAKK2ludHgwMzMgdG9pbnRlZ3JhbCAgICAgLTAuMSAgIC0+IC0wCitpbnR4MDM0IHRvaW50ZWdyYWwgICAgIC0wLjIgICAtPiAtMAoraW50eDAzNSB0b2ludGVncmFsICAgICAtMC4zICAgLT4gLTAKK2ludHgwMzYgdG9pbnRlZ3JhbCAgICAgLTAuNCAgIC0+IC0wCitpbnR4MDM3IHRvaW50ZWdyYWwgICAgIC0wLjUgICAtPiAtMQoraW50eDAzOCB0b2ludGVncmFsICAgICAtMC42ICAgLT4gLTEKK2ludHgwMzkgdG9pbnRlZ3JhbCAgICAgLTAuNyAgIC0+IC0xCitpbnR4MDQwIHRvaW50ZWdyYWwgICAgIC0wLjggICAtPiAtMQoraW50eDA0MSB0b2ludGVncmFsICAgICAtMC45ICAgLT4gLTEKK2ludHgwNDIgdG9pbnRlZ3JhbCAgICAgLTEgICAgIC0+IC0xCitpbnR4MDQzIHRvaW50ZWdyYWwgICAgIC0xLjAgICAtPiAtMQoraW50eDA0NCB0b2ludGVncmFsICAgICAtMS4xICAgLT4gLTEKK2ludHgwNDUgdG9pbnRlZ3JhbCAgICAgLTEuMiAgIC0+IC0xCitpbnR4MDQ2IHRvaW50ZWdyYWwgICAgIC0xLjMgICAtPiAtMQoraW50eDA0NyB0b2ludGVncmFsICAgICAtMS40ICAgLT4gLTEKK2ludHgwNDggdG9pbnRlZ3JhbCAgICAgLTEuNSAgIC0+IC0yCitpbnR4MDQ5IHRvaW50ZWdyYWwgICAgIC0xLjYgICAtPiAtMgoraW50eDA1MCB0b2ludGVncmFsICAgICAtMS43ICAgLT4gLTIKK2ludHgwNTEgdG9pbnRlZ3JhbCAgICAgLTEuOCAgIC0+IC0yCitpbnR4MDUyIHRvaW50ZWdyYWwgICAgIC0xLjkgICAtPiAtMgorLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApCitpbnR4MDUzIHRvaW50ZWdyYWwgICAgMTBFKzMwICAtPiAxLjBFKzMxCitpbnR4MDU0IHRvaW50ZWdyYWwgICAtMTBFKzMwICAtPiAtMS4wRSszMQorCistLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24KK3ByZWNpc2lvbjogOQoraW50eDA2MCB0b2ludGVncmFsICc1NjI2N0UtMTAnICAgLT4gJzAnCitpbnR4MDYxIHRvaW50ZWdyYWwgJzU2MjY3RS01JyAgICAtPiAnMScKK2ludHgwNjIgdG9pbnRlZ3JhbCAnNTYyNjdFLTInICAgIC0+ICc1NjMnCitpbnR4MDYzIHRvaW50ZWdyYWwgJzU2MjY3RS0xJyAgICAtPiAnNTYyNycKK2ludHgwNjUgdG9pbnRlZ3JhbCAnNTYyNjdFLTAnICAgIC0+ICc1NjI2NycKK2ludHgwNjYgdG9pbnRlZ3JhbCAnNTYyNjdFKzAnICAgIC0+ICc1NjI2NycKK2ludHgwNjcgdG9pbnRlZ3JhbCAnNTYyNjdFKzEnICAgIC0+ICc1LjYyNjdFKzUnCitpbnR4MDY4IHRvaW50ZWdyYWwgJzU2MjY3RSsyJyAgICAtPiAnNS42MjY3RSs2JworaW50eDA2OSB0b2ludGVncmFsICc1NjI2N0UrMycgICAgLT4gJzUuNjI2N0UrNycKK2ludHgwNzAgdG9pbnRlZ3JhbCAnNTYyNjdFKzQnICAgIC0+ICc1LjYyNjdFKzgnCitpbnR4MDcxIHRvaW50ZWdyYWwgJzU2MjY3RSs1JyAgICAtPiAnNS42MjY3RSs5JworaW50eDA3MiB0b2ludGVncmFsICc1NjI2N0UrNicgICAgLT4gJzUuNjI2N0UrMTAnCitpbnR4MDczIHRvaW50ZWdyYWwgJzEuMjNFKzk2JyAgICAtPiAnMS4yM0UrOTYnCitpbnR4MDc0IHRvaW50ZWdyYWwgJzEuMjNFKzM4NCcgICAtPiAnMS4yM0UrMzg0JworaW50eDA3NSB0b2ludGVncmFsICcxLjIzRSs5OTknICAgLT4gJzEuMjNFKzk5OScKKworaW50eDA4MCB0b2ludGVncmFsICctNTYyNjdFLTEwJyAgLT4gJy0wJworaW50eDA4MSB0b2ludGVncmFsICctNTYyNjdFLTUnICAgLT4gJy0xJworaW50eDA4MiB0b2ludGVncmFsICctNTYyNjdFLTInICAgLT4gJy01NjMnCitpbnR4MDgzIHRvaW50ZWdyYWwgJy01NjI2N0UtMScgICAtPiAnLTU2MjcnCitpbnR4MDg1IHRvaW50ZWdyYWwgJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3JworaW50eDA4NiB0b2ludGVncmFsICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycKK2ludHgwODcgdG9pbnRlZ3JhbCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1JworaW50eDA4OCB0b2ludGVncmFsICctNTYyNjdFKzInICAgLT4gJy01LjYyNjdFKzYnCitpbnR4MDg5IHRvaW50ZWdyYWwgJy01NjI2N0UrMycgICAtPiAnLTUuNjI2N0UrNycKK2ludHgwOTAgdG9pbnRlZ3JhbCAnLTU2MjY3RSs0JyAgIC0+ICctNS42MjY3RSs4JworaW50eDA5MSB0b2ludGVncmFsICctNTYyNjdFKzUnICAgLT4gJy01LjYyNjdFKzknCitpbnR4MDkyIHRvaW50ZWdyYWwgJy01NjI2N0UrNicgICAtPiAnLTUuNjI2N0UrMTAnCitpbnR4MDkzIHRvaW50ZWdyYWwgJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2JworaW50eDA5NCB0b2ludGVncmFsICctMS4yM0UrMzg0JyAgLT4gJy0xLjIzRSszODQnCitpbnR4MDk1IHRvaW50ZWdyYWwgJy0xLjIzRSs5OTknICAtPiAnLTEuMjNFKzk5OScKKworLS0gc3Vibm9ybWFsIGlucHV0cworaW50eDEwMCB0b2ludGVncmFsICAgICAgICAxRS05OTkgLT4gMAoraW50eDEwMSB0b2ludGVncmFsICAgICAgMC4xRS05OTkgLT4gMAoraW50eDEwMiB0b2ludGVncmFsICAgICAwLjAxRS05OTkgLT4gMAoraW50eDEwMyB0b2ludGVncmFsICAgICAgICAwRS05OTkgLT4gMAorCistLSBzcGVjaWFscyBhbmQgemVyb3MKK2ludHgxMjAgdG9pbnRlZ3JhbCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkKK2ludHgxMjEgdG9pbnRlZ3JhbCAnLUluZicgICAgICAtPiAtSW5maW5pdHkKK2ludHgxMjIgdG9pbnRlZ3JhbCAgIE5hTiAgICAgICAtPiAgTmFOCitpbnR4MTIzIHRvaW50ZWdyYWwgIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ludHgxMjQgdG9pbnRlZ3JhbCAgICAgMCAgICAgICAtPiAgMAoraW50eDEyNSB0b2ludGVncmFsICAgIC0wICAgICAgIC0+IC0wCitpbnR4MTI2IHRvaW50ZWdyYWwgICAgIDAuMDAwICAgLT4gIDAKK2ludHgxMjcgdG9pbnRlZ3JhbCAgICAgMC4wMCAgICAtPiAgMAoraW50eDEyOCB0b2ludGVncmFsICAgICAwLjAgICAgIC0+ICAwCitpbnR4MTI5IHRvaW50ZWdyYWwgICAgIDAgICAgICAgLT4gIDAKK2ludHgxMzAgdG9pbnRlZ3JhbCAgICAgMEUtMyAgICAtPiAgMAoraW50eDEzMSB0b2ludGVncmFsICAgICAwRS0yICAgIC0+ICAwCitpbnR4MTMyIHRvaW50ZWdyYWwgICAgIDBFLTEgICAgLT4gIDAKK2ludHgxMzMgdG9pbnRlZ3JhbCAgICAgMEUtMCAgICAtPiAgMAoraW50eDEzNCB0b2ludGVncmFsICAgICAwRSsxICAgIC0+ICAwRSsxCitpbnR4MTM1IHRvaW50ZWdyYWwgICAgIDBFKzIgICAgLT4gIDBFKzIKK2ludHgxMzYgdG9pbnRlZ3JhbCAgICAgMEUrMyAgICAtPiAgMEUrMworaW50eDEzNyB0b2ludGVncmFsICAgICAwRSs0ICAgIC0+ICAwRSs0CitpbnR4MTM4IHRvaW50ZWdyYWwgICAgIDBFKzUgICAgLT4gIDBFKzUKK2ludHgxMzkgdG9pbnRlZ3JhbCAgICAtMC4wMDAgICAtPiAtMAoraW50eDE0MCB0b2ludGVncmFsICAgIC0wLjAwICAgIC0+IC0wCitpbnR4MTQxIHRvaW50ZWdyYWwgICAgLTAuMCAgICAgLT4gLTAKK2ludHgxNDIgdG9pbnRlZ3JhbCAgICAtMCAgICAgICAtPiAtMAoraW50eDE0MyB0b2ludGVncmFsICAgIC0wRS0zICAgIC0+IC0wCitpbnR4MTQ0IHRvaW50ZWdyYWwgICAgLTBFLTIgICAgLT4gLTAKK2ludHgxNDUgdG9pbnRlZ3JhbCAgICAtMEUtMSAgICAtPiAtMAoraW50eDE0NiB0b2ludGVncmFsICAgIC0wRS0wICAgIC0+IC0wCitpbnR4MTQ3IHRvaW50ZWdyYWwgICAgLTBFKzEgICAgLT4gLTBFKzEKK2ludHgxNDggdG9pbnRlZ3JhbCAgICAtMEUrMiAgICAtPiAtMEUrMgoraW50eDE0OSB0b2ludGVncmFsICAgIC0wRSszICAgIC0+IC0wRSszCitpbnR4MTUwIHRvaW50ZWdyYWwgICAgLTBFKzQgICAgLT4gLTBFKzQKK2ludHgxNTEgdG9pbnRlZ3JhbCAgICAtMEUrNSAgICAtPiAtMEUrNQorLS0gcHJvcGFnYXRpbmcgTmFOcworaW50eDE1MiB0b2ludGVncmFsICAgTmFOODA4ICAgIC0+ICBOYU44MDgKK2ludHgxNTMgdG9pbnRlZ3JhbCAgc05hTjA4MCAgICAtPiAgTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitpbnR4MTU0IHRvaW50ZWdyYWwgIC1OYU44MDggICAgLT4gLU5hTjgwOAoraW50eDE1NSB0b2ludGVncmFsIC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24KK2ludHgxNTYgdG9pbnRlZ3JhbCAgLU5hTiAgICAgICAtPiAtTmFOCitpbnR4MTU3IHRvaW50ZWdyYWwgLXNOYU4gICAgICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK3ByZWNpc2lvbjogICA5CitpbnR4MjAwIHRvaW50ZWdyYWwgICAgIDIuMSAgICAtPiAyCitpbnR4MjAxIHRvaW50ZWdyYWwgICAxMDAgICAgICAtPiAxMDAKK2ludHgyMDIgdG9pbnRlZ3JhbCAgIDEwMC4wICAgIC0+IDEwMAoraW50eDIwMyB0b2ludGVncmFsICAgMTAxLjUgICAgLT4gMTAyCitpbnR4MjA0IHRvaW50ZWdyYWwgIC0xMDEuNSAgICAtPiAtMTAyCitpbnR4MjA1IHRvaW50ZWdyYWwgICAxMEUrNSAgICAtPiAxLjBFKzYKK2ludHgyMDYgdG9pbnRlZ3JhbCAgNy44OUUrNzcgIC0+IDcuODlFKzc3CitpbnR4MjA3IHRvaW50ZWdyYWwgICAtSW5mICAgICAtPiAtSW5maW5pdHkKKworCistLSBhbGwgcm91bmRpbmcgbW9kZXMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworaW50eDIxMCB0b2ludGVncmFsICAgICA1NS41ICAgLT4gIDU2CitpbnR4MjExIHRvaW50ZWdyYWwgICAgIDU2LjUgICAtPiAgNTYKK2ludHgyMTIgdG9pbnRlZ3JhbCAgICAgNTcuNSAgIC0+ICA1OAoraW50eDIxMyB0b2ludGVncmFsICAgIC01NS41ICAgLT4gLTU2CitpbnR4MjE0IHRvaW50ZWdyYWwgICAgLTU2LjUgICAtPiAtNTYKK2ludHgyMTUgdG9pbnRlZ3JhbCAgICAtNTcuNSAgIC0+IC01OAorCityb3VuZGluZzogICAgaGFsZl91cAorCitpbnR4MjIwIHRvaW50ZWdyYWwgICAgIDU1LjUgICAtPiAgNTYKK2ludHgyMjEgdG9pbnRlZ3JhbCAgICAgNTYuNSAgIC0+ICA1NworaW50eDIyMiB0b2ludGVncmFsICAgICA1Ny41ICAgLT4gIDU4CitpbnR4MjIzIHRvaW50ZWdyYWwgICAgLTU1LjUgICAtPiAtNTYKK2ludHgyMjQgdG9pbnRlZ3JhbCAgICAtNTYuNSAgIC0+IC01NworaW50eDIyNSB0b2ludGVncmFsICAgIC01Ny41ICAgLT4gLTU4CisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKworaW50eDIzMCB0b2ludGVncmFsICAgICA1NS41ICAgLT4gIDU1CitpbnR4MjMxIHRvaW50ZWdyYWwgICAgIDU2LjUgICAtPiAgNTYKK2ludHgyMzIgdG9pbnRlZ3JhbCAgICAgNTcuNSAgIC0+ICA1NworaW50eDIzMyB0b2ludGVncmFsICAgIC01NS41ICAgLT4gLTU1CitpbnR4MjM0IHRvaW50ZWdyYWwgICAgLTU2LjUgICAtPiAtNTYKK2ludHgyMzUgdG9pbnRlZ3JhbCAgICAtNTcuNSAgIC0+IC01NworCityb3VuZGluZzogICAgdXAKKworaW50eDI0MCB0b2ludGVncmFsICAgICA1NS4zICAgLT4gIDU2CitpbnR4MjQxIHRvaW50ZWdyYWwgICAgIDU2LjMgICAtPiAgNTcKK2ludHgyNDIgdG9pbnRlZ3JhbCAgICAgNTcuMyAgIC0+ICA1OAoraW50eDI0MyB0b2ludGVncmFsICAgIC01NS4zICAgLT4gLTU2CitpbnR4MjQ0IHRvaW50ZWdyYWwgICAgLTU2LjMgICAtPiAtNTcKK2ludHgyNDUgdG9pbnRlZ3JhbCAgICAtNTcuMyAgIC0+IC01OAorCityb3VuZGluZzogICAgZG93bgorCitpbnR4MjUwIHRvaW50ZWdyYWwgICAgIDU1LjcgICAtPiAgNTUKK2ludHgyNTEgdG9pbnRlZ3JhbCAgICAgNTYuNyAgIC0+ICA1NgoraW50eDI1MiB0b2ludGVncmFsICAgICA1Ny43ICAgLT4gIDU3CitpbnR4MjUzIHRvaW50ZWdyYWwgICAgLTU1LjcgICAtPiAtNTUKK2ludHgyNTQgdG9pbnRlZ3JhbCAgICAtNTYuNyAgIC0+IC01NgoraW50eDI1NSB0b2ludGVncmFsICAgIC01Ny43ICAgLT4gLTU3CisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCisKK2ludHgyNjAgdG9pbnRlZ3JhbCAgICAgNTUuMyAgIC0+ICA1NgoraW50eDI2MSB0b2ludGVncmFsICAgICA1Ni4zICAgLT4gIDU3CitpbnR4MjYyIHRvaW50ZWdyYWwgICAgIDU3LjMgICAtPiAgNTgKK2ludHgyNjMgdG9pbnRlZ3JhbCAgICAtNTUuMyAgIC0+IC01NQoraW50eDI2NCB0b2ludGVncmFsICAgIC01Ni4zICAgLT4gLTU2CitpbnR4MjY1IHRvaW50ZWdyYWwgICAgLTU3LjMgICAtPiAtNTcKKworcm91bmRpbmc6ICAgIGZsb29yCisKK2ludHgyNzAgdG9pbnRlZ3JhbCAgICAgNTUuNyAgIC0+ICA1NQoraW50eDI3MSB0b2ludGVncmFsICAgICA1Ni43ICAgLT4gIDU2CitpbnR4MjcyIHRvaW50ZWdyYWwgICAgIDU3LjcgICAtPiAgNTcKK2ludHgyNzMgdG9pbnRlZ3JhbCAgICAtNTUuNyAgIC0+IC01NgoraW50eDI3NCB0b2ludGVncmFsICAgIC01Ni43ICAgLT4gLTU3CitpbnR4Mjc1IHRvaW50ZWdyYWwgICAgLTU3LjcgICAtPiAtNTgKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFseC5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFseC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNTBlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3RvaW50ZWdyYWx4LmRlY1Rlc3QKQEAgLTAsMCArMSwyNTUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gdG9pbnRlZ3JhbHguZGVjVGVzdCAtLSByb3VuZCBkZWNpbWFsIHRvIGludGVncmFsIHZhbHVlLCBleGFjdCAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwKKy0tIHZhbHVlJyBvcGVyYXRpb24gKGZyb20gSUVFRSA4NTQsIGxhdGVyIG1vZGlmaWVkIGluIDc1NHIpLgorLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcgorLS0gcXVhbnRpemUsIHNvIHRob3NlIGFyZSBhc3N1bWVkIHRvIGhhdmUgYmVlbiB0ZXN0ZWQuCisKKy0tIFRoaXMgdGVzdHMgdG9JbnRlZ3JhRXhhY3QsIHdoaWNoIG1heSBzZXQgSW5leGFjdAorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCitpbnR4eDAwMSB0b2ludGVncmFseCAgICAgIDAgICAgIC0+ICAwCitpbnR4eDAwMiB0b2ludGVncmFseCAgICAgIDAuMCAgIC0+ICAwCitpbnR4eDAwMyB0b2ludGVncmFseCAgICAgIDAuMSAgIC0+ICAwIEluZXhhY3QgUm91bmRlZAoraW50eHgwMDQgdG9pbnRlZ3JhbHggICAgICAwLjIgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDA1IHRvaW50ZWdyYWx4ICAgICAgMC4zICAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAwNiB0b2ludGVncmFseCAgICAgIDAuNCAgIC0+ICAwIEluZXhhY3QgUm91bmRlZAoraW50eHgwMDcgdG9pbnRlZ3JhbHggICAgICAwLjUgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDA4IHRvaW50ZWdyYWx4ICAgICAgMC42ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAwOSB0b2ludGVncmFseCAgICAgIDAuNyAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTAgdG9pbnRlZ3JhbHggICAgICAwLjggICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDExIHRvaW50ZWdyYWx4ICAgICAgMC45ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxMiB0b2ludGVncmFseCAgICAgIDEgICAgIC0+ICAxCitpbnR4eDAxMyB0b2ludGVncmFseCAgICAgIDEuMCAgIC0+ICAxIFJvdW5kZWQKK2ludHh4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxNSB0b2ludGVncmFseCAgICAgIDEuMiAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTYgdG9pbnRlZ3JhbHggICAgICAxLjMgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxOCB0b2ludGVncmFseCAgICAgIDEuNSAgIC0+ICAyIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTkgdG9pbnRlZ3JhbHggICAgICAxLjYgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAyMSB0b2ludGVncmFseCAgICAgIDEuOCAgIC0+ICAyIEluZXhhY3QgUm91bmRlZAoraW50eHgwMjIgdG9pbnRlZ3JhbHggICAgICAxLjkgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQKKy0tIG5lZ2F0aXZlcworaW50eHgwMzEgdG9pbnRlZ3JhbHggICAgIC0wICAgICAtPiAtMAoraW50eHgwMzIgdG9pbnRlZ3JhbHggICAgIC0wLjAgICAtPiAtMAoraW50eHgwMzMgdG9pbnRlZ3JhbHggICAgIC0wLjEgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDM0IHRvaW50ZWdyYWx4ICAgICAtMC4yICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAzNSB0b2ludGVncmFseCAgICAgLTAuMyAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAoraW50eHgwMzYgdG9pbnRlZ3JhbHggICAgIC0wLjQgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDM3IHRvaW50ZWdyYWx4ICAgICAtMC41ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAzOCB0b2ludGVncmFseCAgICAgLTAuNiAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwMzkgdG9pbnRlZ3JhbHggICAgIC0wLjcgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQwIHRvaW50ZWdyYWx4ICAgICAtMC44ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0MSB0b2ludGVncmFseCAgICAgLTAuOSAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDIgdG9pbnRlZ3JhbHggICAgIC0xICAgICAtPiAtMQoraW50eHgwNDMgdG9pbnRlZ3JhbHggICAgIC0xLjAgICAtPiAtMSBSb3VuZGVkCitpbnR4eDA0NCB0b2ludGVncmFseCAgICAgLTEuMSAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDUgdG9pbnRlZ3JhbHggICAgIC0xLjIgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQ2IHRvaW50ZWdyYWx4ICAgICAtMS4zICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0NyB0b2ludGVncmFseCAgICAgLTEuNCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDggdG9pbnRlZ3JhbHggICAgIC0xLjUgICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQ5IHRvaW50ZWdyYWx4ICAgICAtMS42ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA1MCB0b2ludGVncmFseCAgICAgLTEuNyAgIC0+IC0yIEluZXhhY3QgUm91bmRlZAoraW50eHgwNTEgdG9pbnRlZ3JhbHggICAgIC0xLjggICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDUyIHRvaW50ZWdyYWx4ICAgICAtMS45ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IHR3byB3b3VsZCBiZSBOYU4gdXNpbmcgcXVhbnRpemUoeCwgMCkKK2ludHh4MDUzIHRvaW50ZWdyYWx4ICAgIDEwRSszMCAgLT4gMS4wRSszMQoraW50eHgwNTQgdG9pbnRlZ3JhbHggICAtMTBFKzMwICAtPiAtMS4wRSszMQorCistLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24KK3ByZWNpc2lvbjogOQoraW50eHgwNjAgdG9pbnRlZ3JhbHggJzU2MjY3RS0xMCcgICAtPiAnMCcgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA2MiB0b2ludGVncmFseCAnNTYyNjdFLTInICAgIC0+ICc1NjMnICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwNjMgdG9pbnRlZ3JhbHggJzU2MjY3RS0xJyAgICAtPiAnNTYyNycgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3JworaW50eHgwNjYgdG9pbnRlZ3JhbHggJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnCitpbnR4eDA2NyB0b2ludGVncmFseCAnNTYyNjdFKzEnICAgIC0+ICc1LjYyNjdFKzUnCitpbnR4eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzInICAgIC0+ICc1LjYyNjdFKzYnCitpbnR4eDA2OSB0b2ludGVncmFseCAnNTYyNjdFKzMnICAgIC0+ICc1LjYyNjdFKzcnCitpbnR4eDA3MCB0b2ludGVncmFseCAnNTYyNjdFKzQnICAgIC0+ICc1LjYyNjdFKzgnCitpbnR4eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzUnICAgIC0+ICc1LjYyNjdFKzknCitpbnR4eDA3MiB0b2ludGVncmFseCAnNTYyNjdFKzYnICAgIC0+ICc1LjYyNjdFKzEwJworaW50eHgwNzMgdG9pbnRlZ3JhbHggJzEuMjNFKzk2JyAgICAtPiAnMS4yM0UrOTYnCitpbnR4eDA3NCB0b2ludGVncmFseCAnMS4yM0UrMzg0JyAgIC0+ICcxLjIzRSszODQnCitpbnR4eDA3NSB0b2ludGVncmFseCAnMS4yM0UrOTk5JyAgIC0+ICcxLjIzRSs5OTknCisKK2ludHh4MDgwIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEwJyAgLT4gJy0wJyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwODIgdG9pbnRlZ3JhbHggJy01NjI2N0UtMicgICAtPiAnLTU2MycgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDgzIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEnICAgLT4gJy01NjI3JyAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnCitpbnR4eDA4NiB0b2ludGVncmFseCAnLTU2MjY3RSswJyAgIC0+ICctNTYyNjcnCitpbnR4eDA4NyB0b2ludGVncmFseCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1JworaW50eHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrMicgICAtPiAnLTUuNjI2N0UrNicKK2ludHh4MDg5IHRvaW50ZWdyYWx4ICctNTYyNjdFKzMnICAgLT4gJy01LjYyNjdFKzcnCitpbnR4eDA5MCB0b2ludGVncmFseCAnLTU2MjY3RSs0JyAgIC0+ICctNS42MjY3RSs4JworaW50eHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrNScgICAtPiAnLTUuNjI2N0UrOScKK2ludHh4MDkyIHRvaW50ZWdyYWx4ICctNTYyNjdFKzYnICAgLT4gJy01LjYyNjdFKzEwJworaW50eHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2JworaW50eHgwOTQgdG9pbnRlZ3JhbHggJy0xLjIzRSszODQnICAtPiAnLTEuMjNFKzM4NCcKK2ludHh4MDk1IHRvaW50ZWdyYWx4ICctMS4yM0UrOTk5JyAgLT4gJy0xLjIzRSs5OTknCisKKy0tIHN1Ym5vcm1hbCBpbnB1dHMKK2ludHh4MTAwIHRvaW50ZWdyYWx4ICAgICAgICAxRS05OTkgLT4gMCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDEwMSB0b2ludGVncmFseCAgICAgIDAuMUUtOTk5IC0+IDAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgxMDIgdG9pbnRlZ3JhbHggICAgIDAuMDFFLTk5OSAtPiAwICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MTAzIHRvaW50ZWdyYWx4ICAgICAgICAwRS05OTkgLT4gMAorCistLSBzcGVjaWFscyBhbmQgemVyb3MKK2ludHh4MTIwIHRvaW50ZWdyYWx4ICdJbmYnICAgICAgIC0+ICBJbmZpbml0eQoraW50eHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5CitpbnR4eDEyMiB0b2ludGVncmFseCAgIE5hTiAgICAgICAtPiAgTmFOCitpbnR4eDEyMyB0b2ludGVncmFseCAgc05hTiAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoraW50eHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKK2ludHh4MTI1IHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCitpbnR4eDEyNiB0b2ludGVncmFseCAgICAgMC4wMDAgICAtPiAgMAoraW50eHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDAKK2ludHh4MTI4IHRvaW50ZWdyYWx4ICAgICAwLjAgICAgIC0+ICAwCitpbnR4eDEyOSB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMAoraW50eHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDAKK2ludHh4MTMxIHRvaW50ZWdyYWx4ICAgICAwRS0yICAgIC0+ICAwCitpbnR4eDEzMiB0b2ludGVncmFseCAgICAgMEUtMSAgICAtPiAgMAoraW50eHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDAKK2ludHh4MTM0IHRvaW50ZWdyYWx4ICAgICAwRSsxICAgIC0+ICAwRSsxCitpbnR4eDEzNSB0b2ludGVncmFseCAgICAgMEUrMiAgICAtPiAgMEUrMgoraW50eHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMKK2ludHh4MTM3IHRvaW50ZWdyYWx4ICAgICAwRSs0ICAgIC0+ICAwRSs0CitpbnR4eDEzOCB0b2ludGVncmFseCAgICAgMEUrNSAgICAtPiAgMEUrNQoraW50eHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTAKK2ludHh4MTQwIHRvaW50ZWdyYWx4ICAgIC0wLjAwICAgIC0+IC0wCitpbnR4eDE0MSB0b2ludGVncmFseCAgICAtMC4wICAgICAtPiAtMAoraW50eHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTAKK2ludHh4MTQzIHRvaW50ZWdyYWx4ICAgIC0wRS0zICAgIC0+IC0wCitpbnR4eDE0NCB0b2ludGVncmFseCAgICAtMEUtMiAgICAtPiAtMAoraW50eHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTAKK2ludHh4MTQ2IHRvaW50ZWdyYWx4ICAgIC0wRS0wICAgIC0+IC0wCitpbnR4eDE0NyB0b2ludGVncmFseCAgICAtMEUrMSAgICAtPiAtMEUrMQoraW50eHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzIKK2ludHh4MTQ5IHRvaW50ZWdyYWx4ICAgIC0wRSszICAgIC0+IC0wRSszCitpbnR4eDE1MCB0b2ludGVncmFseCAgICAtMEUrNCAgICAtPiAtMEUrNAoraW50eHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2ludHh4MTUyIHRvaW50ZWdyYWx4ICAgTmFOODA4ICAgIC0+ICBOYU44MDgKK2ludHh4MTUzIHRvaW50ZWdyYWx4ICBzTmFOMDgwICAgIC0+ICBOYU44MCAgSW52YWxpZF9vcGVyYXRpb24KK2ludHh4MTU0IHRvaW50ZWdyYWx4ICAtTmFOODA4ICAgIC0+IC1OYU44MDgKK2ludHh4MTU1IHRvaW50ZWdyYWx4IC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24KK2ludHh4MTU2IHRvaW50ZWdyYWx4ICAtTmFOICAgICAgIC0+IC1OYU4KK2ludHh4MTU3IHRvaW50ZWdyYWx4IC1zTmFOICAgICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZXhhbXBsZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitwcmVjaXNpb246ICAgOQoraW50eHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjAxIHRvaW50ZWdyYWx4ICAgMTAwICAgICAgLT4gMTAwCitpbnR4eDIwMiB0b2ludGVncmFseCAgIDEwMC4wICAgIC0+IDEwMCAgICAgICAgICAgICAgICAgIFJvdW5kZWQKK2ludHh4MjAzIHRvaW50ZWdyYWx4ICAgMTAxLjUgICAgLT4gMTAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIwNCB0b2ludGVncmFseCAgLTEwMS41ICAgIC0+IC0xMDIgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMDUgdG9pbnRlZ3JhbHggICAxMEUrNSAgICAtPiAxLjBFKzYKK2ludHh4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcKK2ludHh4MjA3IHRvaW50ZWdyYWx4ICAgLUluZiAgICAgLT4gLUluZmluaXR5CisKKworLS0gYWxsIHJvdW5kaW5nIG1vZGVzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2ludHh4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIxMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIxNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKworaW50eHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjIxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjI0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl9kb3duCisKK2ludHh4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIzMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIzNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIHVwCisKK2ludHh4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI0MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI0NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGRvd24KKworaW50eHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjUxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjU0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgY2VpbGluZworCitpbnR4eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNjEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNjQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBmbG9vcgorCitpbnR4eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNzEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNzQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCitwcmVjaXNpb246IDE2CitpbnR4eDMwMCB0b2ludGVncmFseCAtMjE0NzQ4MzY0NiAgLT4gLTIxNDc0ODM2NDYKK2ludHh4MzAxIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ3ICAtPiAtMjE0NzQ4MzY0NworaW50eHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4CitpbnR4eDMwMyB0b2ludGVncmFseCAtMjE0NzQ4MzY0OSAgLT4gLTIxNDc0ODM2NDkKK2ludHh4MzA0IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ2ICAtPiAgMjE0NzQ4MzY0NgoraW50eHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3CitpbnR4eDMwNiB0b2ludGVncmFseCAgMjE0NzQ4MzY0OCAgLT4gIDIxNDc0ODM2NDgKK2ludHh4MzA3IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ5ICAtPiAgMjE0NzQ4MzY0OQoraW50eHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0CitpbnR4eDMwOSB0b2ludGVncmFseCAgNDI5NDk2NzI5NSAgLT4gIDQyOTQ5NjcyOTUKK2ludHh4MzEwIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk2ICAtPiAgNDI5NDk2NzI5NgoraW50eHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3hvci5kZWNUZXN0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS94b3IuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjI5NzZlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS94b3IuZGVjVGVzdApAQCAtMCwwICsxLDMzNSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSB4b3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBYT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCit4b3J4MDAxIHhvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAoreG9yeDAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKK3hvcngwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCit4b3J4MDA0IHhvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMAoreG9yeDAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTAKK3hvcngwMDYgeG9yICAgICAgICAgIDExMTEgICAxMCAtPiAxMTAxCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQoreG9yeDAxMCB4b3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAoreG9yeDAxMSB4b3IgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAoreG9yeDAxMiB4b3IgMTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAoreG9yeDAxMyB4b3IgMTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgICAgICAgICAgMAoreG9yeDAxNCB4b3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAoreG9yeDAxNSB4b3IgMDAwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMAoreG9yeDAxNiB4b3IgMDEwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMAoreG9yeDAxNyB4b3IgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAgICAgICAgMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQoreG9yeDAyMSB4b3IgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAwCit4b3J4MDIyIHhvciAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDAKK3hvcngwMjMgeG9yICAxMTExMTExMSAgICAgIDExMTExMTExICAtPiAgMAoreG9yeDAyNSB4b3IgICAxMTExMTExICAgICAgIDExMTExMTEgIC0+ICAwCit4b3J4MDI2IHhvciAgICAxMTExMTEgICAgICAgIDExMTExMSAgLT4gIDAKK3hvcngwMjcgeG9yICAgICAxMTExMSAgICAgICAgIDExMTExICAtPiAgMAoreG9yeDAyOCB4b3IgICAgICAxMTExICAgICAgICAgIDExMTEgIC0+ICAwCit4b3J4MDI5IHhvciAgICAgICAxMTEgICAgICAgICAgIDExMSAgLT4gIDAKK3hvcngwMzEgeG9yICAgICAgICAxMSAgICAgICAgICAgIDExICAtPiAgMAoreG9yeDAzMiB4b3IgICAgICAgICAxICAgICAgICAgICAgIDEgIC0+ICAwCit4b3J4MDMzIHhvciAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDAKK3hvcngwMzQgeG9yIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMAoreG9yeDAzNSB4b3IgMTExMTExMTExMSAxMTExMTExMTExMTEgIC0+ICAwCit4b3J4MDM2IHhvciAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDAKKworeG9yeDA0MCB4b3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAwCit4b3J4MDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDEwMDAwMDAwMAoreG9yeDA0MiB4b3IgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMDAwMDAwMDAKK3hvcngwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxCit4b3J4MDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQoreG9yeDA0NSB4b3IgICAgIDExMTExICAgICAxMDAwMDEwMDAgIC0+ICAxMDAwMTAxMTEKK3hvcngwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCit4b3J4MDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQoreG9yeDA0OCB4b3IgICAgICAgIDExICAgICAxMDEwMDAwMDAgIC0+ICAxMDEwMDAwMTEKK3hvcngwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCisKK3hvcngwNTAgeG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKK3hvcngwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKK3hvcngwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMAoreG9yeDA1MyB4b3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTAKK3hvcngwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTAKK3hvcngwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMAoreG9yeDA1NiB4b3IgICAgICAgMTExMSAgMSAgLT4gIDExMTAKK3hvcngwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTAKK3hvcngwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMAoreG9yeDA1OSB4b3IgICAgICAgICAgMSAgMSAgLT4gIDAKKworeG9yeDA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQoreG9yeDA2MSB4b3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQoreG9yeDA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCit4b3J4MDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQoreG9yeDA2NCB4b3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQoreG9yeDA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCit4b3J4MDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQoreG9yeDA2NyB4b3IgICAgICAgIDExMSAgMCAgLT4gIDExMQoreG9yeDA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExCit4b3J4MDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQorCit4b3J4MDcwIHhvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTEwCit4b3J4MDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwCit4b3J4MDcyIHhvciAxICAgIDExMTExMTExICAtPiAgMTExMTExMTAKK3hvcngwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwCit4b3J4MDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwCit4b3J4MDc1IHhvciAxICAgICAgIDExMTExICAtPiAgMTExMTAKK3hvcngwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwCit4b3J4MDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwCit4b3J4MDc4IHhvciAxICAgICAgICAgIDExICAtPiAgMTAKK3hvcngwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwCisKK3hvcngwODAgeG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK3hvcngwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK3hvcngwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQoreG9yeDA4MyB4b3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTEKK3hvcngwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTEKK3hvcngwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQoreG9yeDA4NiB4b3IgMCAgICAgICAgMTExMSAgLT4gIDExMTEKK3hvcngwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTEKK3hvcngwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQoreG9yeDA4OSB4b3IgMCAgICAgICAgICAgMSAgLT4gIDEKKworeG9yeDA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDAKK3hvcngwOTEgeG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgIDEwMDEwMDAwCit4b3J4MDkyIHhvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gICAgMTAxMDAwMAoreG9yeDA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDAKK3hvcngwOTQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCit4b3J4MDk1IHhvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gICAgICAxMTAwMAoreG9yeDA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDAKK3hvcngwOTcgeG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgICAgIDEwMDEwCit4b3J4MDk4IHhvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gICAgICAxMDAwMQorCit4b3J4MTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMAoreG9yeDEwMSB4b3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAgMTAwMTAwMDAKK3hvcngxMDIgeG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgICAxMDEwMDAwCit4b3J4MTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMAoreG9yeDEwNCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDAKK3hvcngxMDUgeG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgICAgIDExMDAwCit4b3J4MTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMAoreG9yeDEwNyB4b3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAgICAgMTAwMTAKK3hvcngxMDggeG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgICAgIDEwMDAxCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworeG9yeDIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjEgeG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjIyIHhvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjQgeG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjI1IHhvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjcgeG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjI4IHhvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMzAgeG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjMxIHhvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK3hvcngyNDAgeG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjQxIHhvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNDMgeG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjQ0IHhvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK3hvcngyNTAgeG9yICAyMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTEgeG9yICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTIgeG9yICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTMgeG9yICA5MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTQgeG9yICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTUgeG9yICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTYgeG9yICA4MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTcgeG9yICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTggeG9yICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTkgeG9yICAxMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjAgeG9yICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjEgeG9yICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjIgeG9yICAwMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjMgeG9yICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjQgeG9yICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjUgeG9yICAwMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK3hvcngyNzAgeG9yICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzEgeG9yICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzIgeG9yICAwODAwMTAwMDAgMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzMgeG9yICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzQgeG9yICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzUgeG9yICAxMDAwMDAwMDAgMDcwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzYgeG9yICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzcgeG9yICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECit4b3J4MjgwIHhvciAgMDAxMDAwMDAyIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjgxIHhvciAgMDAwMDAwMDA3IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjgyIHhvciAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjgzIHhvciAgMDAwMDAwMDA5IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjg0IHhvciAgMTAwMDAwMDAwIDAwMDEwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjg1IHhvciAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjg2IHhvciAgMTAwMDEwMDAwIDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjg3IHhvciAgMTAwMDAxMDAwIDEwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQoreG9yeDI4OCB4b3IgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI4OSB4b3IgIDAwMDA3MDAwMSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5MCB4b3IgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5MSB4b3IgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5MiB4b3IgIDEwMDAwMDAxMCAwMDAwMjAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5MyB4b3IgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5NCB4b3IgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5NSB4b3IgIDEwMDAwMTAwMCAwMDAwOTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK3hvcngyOTYgeG9yIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjk3IHhvciAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5OCB4b3IgIDEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTkgeG9yICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMDEwMDAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55Cit4b3J4MzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzMyIHhvciAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzMzIHhvciAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM0IHhvciAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM1IHhvciAgNiAgIC0xRS0xMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM2IHhvciAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM4IHhvciAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQxIHhvciAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQzIHhvciAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ0IHhvciAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ1IHhvciAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ2IHhvciAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ3IHhvciAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ4IHhvciAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworeG9yeDM2MSB4b3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2MiB4b3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2NCB4b3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2NSB4b3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3MSB4b3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3MiB4b3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3NCB4b3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3NSB4b3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCit4b3J4NzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzgxIHhvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg0IHhvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg3IHhvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzkwIHhvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzkzIHhvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3hvcng4MDAgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDEgeG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDMgeG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDQgeG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDYgeG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDcgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDkgeG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTAgeG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTIgeG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTMgeG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTUgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworeG9yeDgyMSB4b3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyMyB4b3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyNCB4b3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyNiB4b3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyNyB4b3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyOSB4b3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzMCB4b3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzMiB4b3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzMyB4b3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzNSB4b3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzNiB4b3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCit4b3J4ODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDIgeG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDUgeG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDggeG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTEgeG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTQgeG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTcgeG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworeG9yeDg2MSB4b3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2MyB4b3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2NCB4b3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2NiB4b3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2NyB4b3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2OSB4b3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3MSB4b3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3MyB4b3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3NCB4b3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3NiB4b3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3NyB4b3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3OSB4b3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4MCB4b3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4MiB4b3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4MyB4b3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4NSB4b3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RvY3Rlc3RfYWxpYXNlcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kb2N0ZXN0X2FsaWFzZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzM2Y4MwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kb2N0ZXN0X2FsaWFzZXMucHkKQEAgLTAsMCArMSwxMyBAQAorIyBVc2VkIGJ5IHRlc3RfZG9jdGVzdC5weS4KKworY2xhc3MgVHdvTmFtZXM6CisgICAgJycnZigpIGFuZCBnKCkgYXJlIHR3byBuYW1lcyBmb3IgdGhlIHNhbWUgbWV0aG9kJycnCisKKyAgICBkZWYgZihzZWxmKToKKyAgICAgICAgJycnCisgICAgICAgID4+PiBwcmludCBUd29OYW1lcygpLmYoKQorICAgICAgICBmCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gJ2YnCisKKyAgICBnID0gZiAjIGRlZmluZSBhbiBhbGlhcyBmb3IgZgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2RvdWJsZV9jb25zdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kb3VibGVfY29uc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZjMzNhMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9kb3VibGVfY29uc3QucHkKQEAgLTAsMCArMSwzMCBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdEZhaWxlZAorCisjIEEgdGVzdCBmb3IgU0YgYnVnIDQyMjE3NzogIG1hbmlmZXN0IGZsb2F0IGNvbnN0YW50cyB2YXJpZWQgd2F5IHRvbyBtdWNoIGluCisjIHByZWNpc2lvbiBkZXBlbmRpbmcgb24gd2hldGhlciBQeXRob24gd2FzIGxvYWRpbmcgYSBtb2R1bGUgZm9yIHRoZSBmaXJzdAorIyB0aW1lLCBvciByZWxvYWRpbmcgaXQgZnJvbSBhIHByZWNvbXBpbGVkIC5weWMuICBUaGUgImV4cGVjdGVkIiBmYWlsdXJlCisjIG1vZGUgaXMgdGhhdCB3aGVuIHRlc3RfaW1wb3J0IGltcG9ydHMgdGhpcyBhZnRlciBhbGwgLnB5YyBmaWxlcyBoYXZlIGJlZW4KKyMgZXJhc2VkLCBpdCBwYXNzZXMsIGJ1dCB3aGVuIHRlc3RfaW1wb3J0IGltcG9ydHMgdGhpcyBmcm9tCisjIGRvdWJsZV9jb25zdC5weWMsIGl0IGZhaWxzLiAgVGhpcyBpbmRpY2F0ZXMgYSB3b2VmdWwgbG9zcyBvZiBwcmVjaXNpb24gaW4KKyMgdGhlIG1hcnNoYWwgZm9ybWF0IGZvciBkb3VibGVzLiAgSXQncyBhbHNvIHBvc3NpYmxlIHRoYXQgcmVwcigpIGRvZXNuJ3QKKyMgcHJvZHVjZSBlbm91Z2ggZGlnaXRzIHRvIGdldCByZWFzb25hYmxlIHByZWNpc2lvbiBmb3IgdGhpcyBib3guCisKK1BJICAgID0gMy4xNDE1OTI2NTM1ODk3OTMyNAorVFdPUEkgPSA2LjI4MzE4NTMwNzE3OTU4NjQ4CisKK1BJX3N0ciAgICA9ICIzLjE0MTU5MjY1MzU4OTc5MzI0IgorVFdPUElfc3RyID0gIjYuMjgzMTg1MzA3MTc5NTg2NDgiCisKKyMgVmVyaWZ5IHRoYXQgdGhlIGRvdWJsZSB4IGlzIHdpdGhpbiBhIGZldyBiaXRzIG9mIGV2YWwoeF9zdHIpLgorZGVmIGNoZWNrX29rKHgsIHhfc3RyKToKKyAgICBhc3NlcnQgeCA+IDAuMAorICAgIHgyID0gZXZhbCh4X3N0cikKKyAgICBhc3NlcnQgeDIgPiAwLjAKKyAgICBkaWZmID0gYWJzKHggLSB4MikKKyAgICAjIElmIGRpZmYgaXMgbm8gbGFyZ2VyIHRoYW4gMyBVTFAgKHdydCB4MiksIHRoZW4gZGlmZi84IGlzIG5vIGxhcmdlcgorICAgICMgdGhhbiAwLjM3NSBVTFAsIHNvIGFkZGluZyBkaWZmLzggdG8geDIgc2hvdWxkIGhhdmUgbm8gZWZmZWN0LgorICAgIGlmIHgyICsgKGRpZmYgLyA4LikgIT0geDI6CisgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoIk1hbmlmZXN0IGNvbnN0ICVzIGxvc3QgdG9vIG11Y2ggcHJlY2lzaW9uICIgJSB4X3N0cikKKworY2hlY2tfb2soUEksIFBJX3N0cikKK2NoZWNrX29rKFRXT1BJLCBUV09QSV9zdHIpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZW1wdHkudmJzIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2VtcHR5LnZicwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzVmMDc2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2VtcHR5LnZicwpAQCAtMCwwICsxIEBACisnRW1wdHkgVkJTIGZpbGUsIGRvZXMgbm90aGluZy4gIEhlbHBlciBmb3IgTGliXHRlc3RcdGVzdF9zdGFydGZpbGUucHkuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2V4Y2VwdGlvbl9oaWVyYXJjaHkudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2V4Y2VwdGlvbl9oaWVyYXJjaHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYjZkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZXhjZXB0aW9uX2hpZXJhcmNoeS50eHQKQEAgLTAsMCArMSw1MCBAQAorQmFzZUV4Y2VwdGlvbgorICstLSBTeXN0ZW1FeGl0CisgKy0tIEtleWJvYXJkSW50ZXJydXB0CisgKy0tIEdlbmVyYXRvckV4aXQKKyArLS0gRXhjZXB0aW9uCisgICAgICArLS0gU3RvcEl0ZXJhdGlvbgorICAgICAgKy0tIFN0YW5kYXJkRXJyb3IKKyAgICAgIHwgICAgKy0tIEJ1ZmZlckVycm9yCisgICAgICB8ICAgICstLSBBcml0aG1ldGljRXJyb3IKKyAgICAgIHwgICAgfCAgICArLS0gRmxvYXRpbmdQb2ludEVycm9yCisgICAgICB8ICAgIHwgICAgKy0tIE92ZXJmbG93RXJyb3IKKyAgICAgIHwgICAgfCAgICArLS0gWmVyb0RpdmlzaW9uRXJyb3IKKyAgICAgIHwgICAgKy0tIEFzc2VydGlvbkVycm9yCisgICAgICB8ICAgICstLSBBdHRyaWJ1dGVFcnJvcgorICAgICAgfCAgICArLS0gRW52aXJvbm1lbnRFcnJvcgorICAgICAgfCAgICB8ICAgICstLSBJT0Vycm9yCisgICAgICB8ICAgIHwgICAgKy0tIE9TRXJyb3IKKyAgICAgIHwgICAgfCAgICAgICAgICstLSBXaW5kb3dzRXJyb3IgKFdpbmRvd3MpCisgICAgICB8ICAgIHwgICAgICAgICArLS0gVk1TRXJyb3IgKFZNUykKKyAgICAgIHwgICAgKy0tIEVPRkVycm9yCisgICAgICB8ICAgICstLSBJbXBvcnRFcnJvcgorICAgICAgfCAgICArLS0gTG9va3VwRXJyb3IKKyAgICAgIHwgICAgfCAgICArLS0gSW5kZXhFcnJvcgorICAgICAgfCAgICB8ICAgICstLSBLZXlFcnJvcgorICAgICAgfCAgICArLS0gTWVtb3J5RXJyb3IKKyAgICAgIHwgICAgKy0tIE5hbWVFcnJvcgorICAgICAgfCAgICB8ICAgICstLSBVbmJvdW5kTG9jYWxFcnJvcgorICAgICAgfCAgICArLS0gUmVmZXJlbmNlRXJyb3IKKyAgICAgIHwgICAgKy0tIFJ1bnRpbWVFcnJvcgorICAgICAgfCAgICB8ICAgICstLSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICB8ICAgICstLSBTeW50YXhFcnJvcgorICAgICAgfCAgICB8ICAgICstLSBJbmRlbnRhdGlvbkVycm9yCisgICAgICB8ICAgIHwgICAgICAgICArLS0gVGFiRXJyb3IKKyAgICAgIHwgICAgKy0tIFN5c3RlbUVycm9yCisgICAgICB8ICAgICstLSBUeXBlRXJyb3IKKyAgICAgIHwgICAgKy0tIFZhbHVlRXJyb3IKKyAgICAgIHwgICAgICAgICArLS0gVW5pY29kZUVycm9yCisgICAgICB8ICAgICAgICAgICAgICArLS0gVW5pY29kZURlY29kZUVycm9yCisgICAgICB8ICAgICAgICAgICAgICArLS0gVW5pY29kZUVuY29kZUVycm9yCisgICAgICB8ICAgICAgICAgICAgICArLS0gVW5pY29kZVRyYW5zbGF0ZUVycm9yCisgICAgICArLS0gV2FybmluZworICAgICAgICAgICArLS0gRGVwcmVjYXRpb25XYXJuaW5nCisgICAgICAgICAgICstLSBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nCisgICAgICAgICAgICstLSBSdW50aW1lV2FybmluZworICAgICAgICAgICArLS0gU3ludGF4V2FybmluZworICAgICAgICAgICArLS0gVXNlcldhcm5pbmcKKyAgICAgICAgICAgKy0tIEZ1dHVyZVdhcm5pbmcKKwkgICArLS0gSW1wb3J0V2FybmluZworCSAgICstLSBVbmljb2RlV2FybmluZworCSAgICstLSBCeXRlc1dhcm5pbmcKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9mbG9hdGluZ19wb2ludHMudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Zsb2F0aW5nX3BvaW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5MDczZAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9mbG9hdGluZ19wb2ludHMudHh0CkBAIC0wLDAgKzEsMTAyOCBAQAorIyBUaGVzZSBudW1iZXJzIGFyZSB1c2VkIHRvIHRlc3QgZmxvYXRpbmcgcG9pbnQgYmluYXJ5LXRvLWRlY2ltYWwgY29udmVyc2lvbi4KKyMgVGhleSBhcmUgYmFzZWQgb24gdGhlIFRDTCB0ZXN0IHN1aXRlICh0ZXN0cy9leHByLnRlc3QpLCB3aGljaCBpcyBiYXNlZCBvbgorIyB0ZXN0IGRhdGEgZnJvbToKKyMgQnJpZ2l0dGUgVmVyZG9uaywgQW5uaWUgQ3V5dCwgRGVubmlzIFZlcnNjaGFlcmVuLCBBIHByZWNpc2lvbiBhbmQgcmFuZ2UKKyMgaW5kZXBlbmRlbnQgdG9vbCBmb3IgdGVzdGluZyBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIElJOiBDb252ZXJzaW9ucywKKyMgQUNNIFRyYW5zYWN0aW9ucyBvbiBNYXRoZW1hdGljYWwgU29mdHdhcmUgMjc6MiAoTWFyY2ggMjAwMSksIHBwLiAxMTktMTQwLgorCiswRTAKKy0wRTAKKzFFMAorMTVFLTEKKzEyNUUtMgorMTEyNUUtMworMTA2MjVFLTQKKzEwMzEyNUUtNQorMTAxNTYyNUUtNgorMTAwNzgxMjVFLTcKKzEwMDM5MDYyNUUtOAorMTAwMTk1MzEyNUUtOQorMTAwMDk3NjU2MjVFLTEwCisxMDAwNDg4MjgxMjVFLTExCisxMDAwMjQ0MTQwNjI1RS0xMgorMTAwMDEyMjA3MDMxMjVFLTEzCisxMDAwMDYxMDM1MTU2MjVFLTE0CisxMDAwMDMwNTE3NTc4MTI1RS0xNQorMTAwMDAxNTI1ODc4OTA2MjVFLTE2CisrOEUxNTMKKy0xRTE1MworKzlFMzA2CistMkUxNTMKKys3RS0zMDQKKy0zRS00OQorKzdFLTMwMworLTZFLTQ5CisrOUU0MworLTlFNDQKKys4RTMwMworLTFFMzAzCisrN0UtMjg3CistMkUtMjA0CisrMkUtMjA1CistOUUtNDcKKyszNEUxOTUKKy02OEUxOTUKKys4NUUxOTQKKy02N0U5NworKzkzRS0yMzQKKy0xOUUtODcKKyszOEUtODcKKy0zOEUtODgKKy02OUUyMjAKKysxOEU0MworLTM2RTQzCisrNjFFLTk5CistNDNFLTkyCisrODZFLTkyCistNTFFLTc0CisrMjgzRTg1CistNTY2RTg1CisrNTg5RTE4NworLTgzOUUxNDMKKy03NDRFLTIzNAorKzkzMEUtMjM1CistMTg2RS0yMzQKKys2MDRFMTc1CistMzAyRTE3NQorKzc1NUUxNzQKKy0xNTFFMTc1CisrNjYyRS0yMTMKKy00MDhFLTc0CisrNTEwRS03NQorKzY3ODJFNTUKKy0yMzA5RTkyCisrNzk2M0UzNAorLTMzOTFFNTUKKys3OTAzRS05NgorLTc2MTFFLTIyNgorKzQ5MDdFLTE5NgorLTU1NDdFLTMxMQorKzUzMTFFMjQxCistNTMxMUUyNDMKKys1MzExRTI0MgorKzkyNjlFLTQ1CistODU1OUUtMjg5CisrODY5OUUtMjc2CistODA4NUUtNjQKKys3NDgxOUUyMDEKKy04MjA4MUU0MQorKzUxODgxRTM3CistNTUwNjFFMTU3CisrNzc0MDJFLTIxNQorLTMzODkxRS05MgorKzM4NzAxRS0yMTUKKy04MjEzOUUtNzYKKys3NTg1OUUyNQorKzg5NTA5RTE0MAorLTU3NTMzRTI4NworKzQ2MDczRS0zMgorLTkyMTQ2RS0zMgorKzgzNzcxRS03NAorLTM0Nzk2RS0yNzYKKys1ODQxNjlFMjI5CisrMTY0MTYyRTQxCistMzI4MzI0RTQxCisrMjA5OTAxRS0xMQorLTQxOTgwMkUtMTEKKys5NDAxODlFLTExMgorLTg5Mjc3MUUtMjEzCisrNzU3ODAzRTEyMAorLTI1MjYwMUUxMjAKKysyNTI2MDFFMTIxCistNTA1MjAyRTEyMAorKzk3MDgxMUUtMjY0CistNjU0ODM5RS02MAorKzI4OTc2N0UtMTc4CistNTc5NTM0RS0xNzgKKy04ODIzNjkxRTEzMAorKzkzNDY3MDRFMjI5CistMTE2ODMzOEUyMjkKKy02MDYzMzY5RS0xMzYKKyszODY1NDIxRS0yMjUKKy01NzgzODkzRS0xMjcKKysyNTcyMjMxRTIyMworLTUxNDQ0NjJFMjIzCisrMTgxNzYyM0UxMDkKKys2NDMxNTQzRS05NworLTU0NDQwOTdFLTIxCisrODA3Njk5OUUtMTIxCistOTk5NzY0OUUtMjcwCisrNTA2MDkyNjNFMTU3CisrNzA1ODk1MjhFMTMwCistODgyMzY5MTBFMTI5CisrODc1NzU0MzdFLTMxMAorLTIzMTM1NTcyRS0xMjcKKys4NTkwMDg4MUUxNzcKKy04NDg2MzE3MUUxMTMKKys2ODc2MTU4NkUyMzIKKy01MDQ2NDA2OUUyODYKKysyNzg2OTE0N0UtMjQ4CistNTU3MzgyOTRFLTI0OAorKzcwMTc2MzUzRS01MworLTgwNTU1MDg2RS0zMgorLTQ5MTA4MDY1NEUxMjEKKys1MjYyNTA5MThFMjg3CistMjQ1NTQwMzI3RTEyMQorLTE3NTE1MDg3NEUtMzEwCisrMzUwMzAxNzQ4RS0zMTAKKy00Mzc4NzcxODVFLTMxMQorKzQ1ODExNzE2NkU1MgorLTkxNjIzNDMzMkU1MgorKzIyOTA1ODU4M0U1MgorLTUyNTc4OTkzNUU5OAorKzI4MjkyNjg5N0UtMjI3CistNTY1ODUzNzk0RS0yMjcKKys2NjcyODQxMTNFLTI0MAorLTk3MTIxMjYxMUUtMTI2CisrOTk4MTM5NjMxN0UtMTgyCistNTAzNTIzMTk2NUUtMTU2CisrODMzNjk2MDQ4M0UtMTUzCistODA1NjM3MTE0NEUtMTU1CisrNjQxODQ4ODgyN0U3OQorLTM5ODEwMDY5ODNFMjUyCisrNzk2MjAxMzk2NkUyNTIKKy00NzEzODk4NTUxRTI2MQorKzg3MTUzODA2MzNFLTU4CistOTA3ODU1NTgzOUUtMTA5CisrOTcxMjEyNjExMEUtMTI3CisrNDIzMzM4NDI0NTFFMjAxCistODQ2Njc2ODQ5MDJFMjAxCisrMjM3OTIxMjA3MDlFLTMxNQorLTc4NTY0MDIxNTE5RS0yMjcKKys3MTgxMjA1NDg4M0UtMTg4CistMzAzMTExNjM2MzFFLTExNgorKzcxODAzOTE0NjU3RTI5MgorKzM2MzE0MjIzMzU2RS0xMDkKKysxODE1NzExMTY3OEUtMTA5CistNDUzOTI3NzkxOTVFLTExMAorKzc3ODM4MDM2MjI5M0UyMTgKKy02ODU3NjMwMTU2NjlFMjgwCisrOTUyOTE4NjY4MTUxRTcwCistNTQ4MzU3NDQzNTA1RTMyCisrMzg0ODY1MDA0OTA3RS0yODUKKy03Njk3MzAwMDk4MTRFLTI4NQorKzY5NzAxNTQxODQxN0UtOTMKKy05MTU2NTQwNDkzMDFFLTI4CisrMTc4NTQ4NjU2MzM5RTE2OQorLTc0MjUyMjg5MTUxN0UyNTkKKys3NDI1MjI4OTE1MTdFMjU4CistMzU3MDk3MzEyNjc4RTE2OQorLTMxMTM1MjE0NDkxNzJFMjE4CisrMzg5MTkwMTgxMTQ2NUUyMTcKKy0xNTU2NzYwNzI0NTg2RTIxOAorKzk5OTc4Nzg1MDc1NjNFLTE5NQorLTcyNDc1NjMwMjkxNTRFLTMxOQorKzM2MjM3ODE1MTQ1NzdFLTMxOQorLTMwOTI0NDYyOTgzMjNFLTIwMAorKzYzNjM4NTc5MjA1OTFFMTQ1CistODIzMzU1OTM2MDg0OUU5NAorKzI2ODk4NDU5NTQ1NDdFNDkKKy01Mzc5NjkxOTA5MDk0RTQ5CisrNTU2MDMyMjUwMTkyNkUtMzAxCistNzgxMjg3ODQ4OTI2MUUtMTc5CisrODQzOTM5ODUzMzA1M0UtMjU2CistMjc4MDE2MTI1MDk2M0UtMzAxCistODc2MDU2OTkxNjE2NjVFMTU1CistMTc1MjExMzk4MzIzMzNFMTU2CistODgyMTgxMDEzNjM1MTNFLTE3MAorKzM4NjM5MjQ0MzExNjI3RS0xMTUKKyszNTU5Mzk1OTgwNzMwNkUyNjEKKy01MzM5MDkzOTcxMDk1OUUyNjAKKys3MTE4NzkxOTYxNDYxMkUyNjEKKy04ODk4NDg5OTUxODI2NUUyNjAKKys3NzAwMzY2NTYxODg5NUUtNzMKKy0xNTQwMDczMzEyMzc3OUUtNzIKKys2MTYwMjkzMjQ5NTExNkUtNzIKKy0zMDgwMTQ2NjI0NzU1OEUtNzIKKys4MzQ3MzU0OTQ5MTcwNjNFLTMwMAorLTU4OTc5NTE0OTIwNjQzNEUtMTUxCisrNDc1NjAzMjEzMjI2ODU5RS00MgorLTI5NDg5NzU3NDYwMzIxN0UtMTUxCisrODUwODEzMDA4MDAxOTEzRTkzCistMjAzNDQ5MTcyMDQzMzM5RTE4NQorKzQwNjg5ODM0NDA4NjY3OEUxODUKKy04MTM3OTY2ODgxNzMzNTZFMTg1CisrNjA0NTMzODUxNDYwOTM5M0UyNDQKKy01MTQ1OTYzNzc4OTU0OTA2RTE0MgorKzI1NzI5ODE4ODk0Nzc0NTNFMTQyCistNjk2NTk0OTQ2OTQ4NzE0NkU3NAorKzYxODI0MTA0OTQyNDE2MjdFLTExOQorLTg1MTAzMDk0OTgxODY5ODVFLTI3NworKzY2NDc3MDQ2MzcyNzMzMzFFLTIxMgorLTIyMTU5MDE1NDU3NTc3NzdFLTIxMgorKzM3NzE0NzYxODUzNzYzODNFMjc2CistMzcyOTkwMTg0ODA0Mzg0NkUyMTIKKyszNzcxNDc2MTg1Mzc2MzgzRTI3NworLTk5Nzc4MzA0NjU2NDkxNjZFMTE5CisrODQzOTkyODQ5NjM0OTMxOUUtMTQyCistODIwNDIzMDA4MjA3MDg4MkUtNTkKKys4ODUzNjg2NDM0ODQzOTk3RS0yNDQKKy01NTUzMjc0MjcyMjg4NTU5RS0xMDQKKyszNjE0OTAyMzYxMTA5NjE2MkUxNDQKKy0zNjE0OTAyMzYxMTA5NjE2MkUxNDcKKysxODA3NDUxMTgwNTU0ODA4MUUxNDYKKy0xODA3NDUxMTgwNTU0ODA4MUUxNDcKKys5NzMzODc3NDEzODk1NDQyMUUtMjkwCistODgxMzM4MDk4MDQ5NTA5NjFFLTMwOAorKzk0MDgwMDU1OTAyNjgyMzk3RS0yNDMKKy0yNDY5MTAwMjczMjY1NDg4MUUtMTE1CisrNTIzMDY0OTA1Mjc1MTQ2MTRFNDkKKy0yNjE1MzI0NTI2Mzc1NzMwN0U0OQorKzU1MTg4NjkyMjU0MTkzNjA0RTE2NQorLTY4OTg1ODY1MzE3NzQyMDA1RTE2NAorKzI3MTc2MjU4MDA1MzE5MTY3RS0yNjEKKy03MzE2OTIzMDEwNzI1NjExNkUtMjQ4CisrOTE0NjE1Mzc2MzQwNzAxNDVFLTI0OQorLTU0MzUyNTE2MDEwNjM4MzM0RS0yNjEKKys1ODYxNDQyODk2Mzg1MzU4NzhFMjgwCistNjAxMTE3MDA2Nzg1Mjk1NDMxRTI0NQorKzI5MzA3MjE0NDgxOTI2NzkzOUUyODAKKy05NTMxODQ3MTMyMzg1MTY2NTJFMjcyCisrOTAyMDQyMzU4MjkwMzY2NTM5RS0yODEKKy01NTcwMzU3MzAxODk4NTQ2NjNFLTI5NAorKzkwMjA0MjM1ODI5MDM2NjUzOUUtMjgwCistMzU0OTQ0MTAwNTA3NTU0MzkzRS0yMzgKKysyNzIxMDQwNDE1MTIyNDI0NzlFMTk5CistODE2MzEyMTI0NTM2NzI3NDM3RTE5OQorKzU0NDIwODA4MzAyNDQ4NDk1OEUxOTkKKy03OTI2NDQ5Mjc4NTIzNzgxNTlFNzgKKy02Nzk0MDY0NTAxMzI5NzkxNzVFLTI2MworKzU0MzUyNTE2MDEwNjM4MzM0MEUtMjYyCisrNzQwMDI1MzY5NTY4MjkyMDE5NkUyMTUKKy0xODUwMDYzNDIzOTIwNzMwMDQ5RTIxNQorKzM3MDAxMjY4NDc4NDE0NjAwOThFMjE1CistOTI1MDMxNzExOTYwMzY1MDI0NUUyMTQKKys4Mzk2MDk0MzAwNTY5Nzc5NjgxRS0yNTIKKy0zNTA3NjY1MDg1MDAzMjk2MjgxRS03NQorKzcwMTUzMzAxNzAwMDY1OTI1NjJFLTc1CistNzAxNTMzMDE3MDAwNjU5MjU2MkUtNzQKKys3MTg1NjIwNDM0OTUxOTE5MzUxRTIwNQorLTEzNjA1MjAyMDc1NjEyMTIzOTVFMTk4CisrMjE3ODk5OTE4NTM0NTE1MTczMUUtMTg0CistODY5MTA4OTQ4NjIwMTU2NzEwMkUtMjE4CisrNDM0NTU0NDc0MzEwMDc4MzU1MUUtMjE4CistNDM1Nzk5ODM3MDY5MDMwMzQ2MkUtMTg0CisrNTk4MjUyNjczNDkxMDY4OTI0NjFFMTc3CistNjIyNTkxMTA2ODQ0MjM5NTc3OTFFNDcKKys1ODM4MDE2ODQ3NzAzODU2NTU5OUUyNjUKKy02MjI1OTExMDY4NDQyMzk1Nzc5MUU0OAorLTMzNTg0Mzc3MjAyMjc5MTE4NzI0RS0yNTIKKy01NzQ4NDk2MzQ3OTYxNTM1NDgwOEUyMDUKKys3MTg1NjIwNDM0OTUxOTE5MzUxMEUyMDQKKy0xNDM3MTI0MDg2OTkwMzgzODcwMkUyMDUKKyszNjk5MjA4NDc2MDE3NzYyNDE3N0UtMzE4CistNzM5ODQxNjk1MjAzNTUyNDgzNTRFLTMxOAorKzk5MjU3NzYzMjI3NzEzODkwMjQ0RS0xMTUKKy04NzMzNjM2MjQyNTE4MjU0NzY5N0UtMjgwCisrN0UyODkKKy0zRTE1MworKzZFMTUzCistNUUyNDMKKys3RS0xNjEKKy03RS0xNzIKKys4RS02MworLTdFLTExMworKzhFMTI2CistNEUxMjYKKys1RTEyNQorLTFFMTI2CisrOEUtMTYzCistMUUtMTYzCisrMkUtMTYzCistNEUtMTYzCisrNTFFMTk1CistMzdFNDYKKys3NEU0NgorLTU2RTI4OQorKzY5RS0xNDUKKy03MEUtMTYyCisrNTZFLTE2MQorLTIxRS0zMDMKKyszNEUtMjc2CistNjhFLTI3NgorKzg1RS0yNzcKKy04N0UtMjc0CisrODI5RTEwMgorLTYyM0UxMDAKKys3MjNFLTE2MgorLTQ1N0UtMTAyCisrOTE0RS0xMDIKKy0zMjNFLTEzNQorKzE1MUUxNzYKKy0zMDJFMTc2CisrOTIxRTkwCistNjA0RTE3NgorKzgyM0UtMjA2CistNDYzRS0xMTQKKyszNDhFLTI3NAorKzk5NjhFMTAwCistNjIzMEU5OQorKzEyNDZFMTAwCisrNjY3NkUtMjk2CistODM0NUUtMjk3CisrMTY2OUUtMjk2CistMzMzOEUtMjk2CisrMzI1N0U1OAorLTY1MTRFNTgKKysyNDE2RTE3NgorKzgwODVFLTYzCistMzIzNEUtNjIKKysxNjE3RS02MgorLTY0NjhFLTYyCisrNTM0MThFMTExCistNjA1MTNFMTYwCisrMjY3MDlFMTExCistOTk0NDdFMTY2CisrMTI1NDlFNDgKKy0yNTA5OEU0OAorKzUwMTk2RTQ4CistNjI3NDVFNDcKKys4Mzc3MUUtNzMKKy05NzQ1MUUtMTY3CisrODY2MzdFLTIwMworLTc1NTY5RS0yNTQKKys0NzM4MDZFODMKKy05NDc2MTJFODMKKysyOTIzNjlFNzYKKy01ODQ3MzhFNzYKKys5MzM1ODdFLTE0MAorLTcyMDkxOUUtMTQKKys1MzUwMDFFLTE0OQorLTg5MDUyMUUtMjM1CisrNTQ4MDU3RTgxCistNzA2MTgxRTg4CisrODIwOTk3RTEwNgorLTMyMDY4MUU2MworKzkyODYwOUUtMjYxCistMzAyMjc2RS0yNTQKKysxNTExMzhFLTI1NAorKzQ2OTE3NzNFNDUKKy05MzgzNTQ2RTQ1CisrMzA1OTk0OUUtMjQzCistNjExOTg5OEUtMjQzCisrNTM1NjYyNkUtMjEzCistNDg3NzM3OEUtMTk5CisrNzcxNjY5M0UyMjMKKy01NDUyODY5RTEwOQorKzQ1OTA4MzFFMTU2CistOTE4MTY2MkUxNTYKKy0zNzE0NDM2RS0yNjEKKys0NjQzMDQ1RS0yNjIKKy03NDI4ODcyRS0yNjEKKys1Mjk0MjE0NkUxMzAKKy0yNzk2NjA2MUUxNDUKKysyNjQ3MTA3M0UxMzAKKy01NTkzMjEyMkUxNDUKKys5NTQxMjU0OEUtOTkKKy00NzcwNjI3NEUtOTkKKysyMzg1MzEzN0UtOTkKKy03ODQ5MzY1NEUtMzAxCisrNjUzNDY0MTdFMjkKKy01MTA4MzA5OUUxNjcKKys4OTM5NjMzM0UyNjQKKy04NDg2MzE3MUUxMTQKKys1OTU0MDgzNkUtMjUxCistNzQ0MjYwNDVFLTI1MgorKzE0ODg1MjA5RS0yNTEKKy0yOTc3MDQxOEUtMjUxCisrOTgyMTYxMzA4RTEyMgorLTI0NTU0MDMyN0UxMjIKKys0OTEwODA2NTRFMTIyCisrNTI1NDUyNjIyRS0zMTAKKy03NzE4MzcxMTNFLTEzNAorKzgyMDg1ODA4MUUtMTUwCistMjYyNzI2MzExRS0zMTAKKys5MjMwOTE0ODdFMjA5CistNjUzNzc3NzY3RTI3MworKzg0MjExNjIzNkUtNTMKKy03NDExMTExNjlFLTIwMgorKzgzOTUwNzI0N0UtMjg0CistOTUxNDg3MjY5RS0yNjQKKy05ODIxNjEzMDgwRTEyMQorKzY2Nzc4NTYwMTFFLTMxCistMzU3Mzc5NjgyNkUtMjY2CisrNzE0NzU5MzY1MkUtMjY2CistOTk4MTM5NjMxN0UtMTgxCisrMzI2ODg4ODgzNUUyNzIKKy0yNjE1MTExMDY4RTI3MworKzEzMDc1NTU1MzRFMjczCisrMjk5MDY3MTE1NEUtMTkwCistMTQ5NTMzNTU3N0UtMTkwCisrNTk4MTM0MjMwOEUtMTkwCistNzQ3NjY3Nzg4NUUtMTkxCisrODIyNTk2ODQxOTRFLTIwMgorLTkzMjI3MjY3NzI3RS00OQorKzQxMTI5ODQyMDk3RS0yMDIKKy00NzU4NDI0MTQxOEUtMzE0CistNzkzNjAyOTM0MDZFOTIKKys1NzMzMjI1OTM0OUUyMjUKKy01NzIwMjMyNjE2MkUxMTEKKys4Njg2MDU5NzA1M0UtMjA2CistNTM4MjcwMTA2NDNFLTIwMAorKzUzNTg3MTA3NDIzRS02MQorKzYzNTAwNzYzNjc2NUUyMDAKKys1MDgwMDYxMDk0MTJFMjAxCistMjU0MDAzMDU0NzA2RTIwMQorKzU2MTAyOTcxODcxNUUtNzIKKy04OTc2NDc1NDk5NDRFLTcxCisrMTEyMjA1OTQzNzQzRS03MQorLTg3Mzk0NzA4NjA4MUUtMjM2CisrODA5MTg0NzA5MTc3RTExNgorLTU3MzExMjkxNzQyMkU4MQorKzI4NjU1NjQ1ODcxMUU4MQorKzk1MjgwNTgyMTQ5MUUtMjU5CistMTMyMTg5OTkyODczRS00NAorLTE3MzY5NjAzODQ5M0UtMTQ0CisrMTgzMTEzMjc1NzU5OUUtMTA3CistOTE1NTY2Mzc4Nzk5NUUtMTA4CisrNzMyNDUzMTAzMDM5NkUtMTA3CistOTI3NzMzODg5NDk2OUUtMjAwCisrODE4ODI5MjQyMzk3M0UyODcKKy01NjcyNTU3NDM3OTM4RTU5CisrMjgzNjI3ODcxODk2OUU1OQorLTk5OTUxNTMxNTM0OTRFNTQKKys5MjI0Nzg2NDIyMDY5RS0yOTEKKy0zMTQyMjEzMTY0OTg3RS0yOTQKKys2Mjg0NDI2MzI5OTc0RS0yOTQKKy04MzQwNDgzNzUyODg5RS0zMDEKKys2NzAzOTM3MTQ4NjQ2NkU4OQorLTYyMTUwNzg2NjE1MjM5RTE5NworKzMzNTE5Njg1NzQzMjMzRTg5CistNTI1NjM0MTk0OTY5OTlFMTU2CisrMzI1OTk0NjA0NjY5OTFFLTY1CistNDEwMTA5ODg3OTgwMDdFLTEzMworKzY1MTk4OTIwOTMzOTgyRS02NQorLTgyMDIxOTc3NTk2MDE0RS0xMzMKKys4MDUyNzk3NjY0MzgwOUU2MQorLTc0NzEyNjExNTA1MjA5RTE1OAorKzUzMzkwOTM5NzEwOTU5RTI2MQorLTY5Mjc3MzAyNjU5MTU1RTIyNQorKzQ2MjAyMTk5MzcxMzM3RS03MgorLTIzNDM4NjM1NDY3NzgzRS0xNzkKKys0MTkyMTU2MDYxNTM0OUUtNjcKKy05MjQwNDM5ODc0MjY3NEUtNzIKKys3Mzg1NDU2MDY2NDcxOTdFMTI0CistOTcyNzA4MTgxMTgyOTQ5RTExNworLTgzNzk5MjE0MzU4MDgyNUU4NworKzYwOTYxMDkyNzE0OTA1MUUtMjU1CistNDc1NjAzMjEzMjI2ODU5RS00MQorKzU2MzAwMjgwMDY3MTAyM0UtMTc3CistOTUxMjA2NDI2NDUzNzE4RS00MQorKzgwNTQxNjQzMjY1NjUxOUUyMDIKKy01MzA2NTg2NzQ2OTQzMzdFMTU5CisrOTQ2NTc0MTczODYzOTE4RTIwOAorLTMxODMyOTk1MzMxODU1M0UxMTMKKy00NjIwMjE5OTM3MTMzNzBFLTczCisrMzY5NjE3NTk0OTcwNjk2RS03MgorKzM2NjYxNTYyMTIwMTQ5OTRFMjMzCistMTgzMzA3ODEwNjAwNzQ5N0UyMzMKKys4MzAxNzkwNTA4NjI0MjMyRTE3NAorLTEwMzc3MjM4MTM1NzgwMjlFMTc0CisrNzI5NzY2Mjg4MDU4MTEzOUUtMjg2CistNTEwNjE4NTY5ODkxMjE5MUUtMjc2CisrNzQ4NzI1MjcyMDk4NjgyNkUtMTY1CistMzc0MzYyNjM2MDQ5MzQxM0UtMTY1CisrMzc3MzA1NzQzMDEwMDI1N0UyMzAKKy03NTQ2MTE0ODYwMjAwNTE0RTIzMAorKzQzMjEyMjI4OTI0NjM4MjJFNTgKKy03NzkzNTYwMjE3MTM5NjUzRTUxCisrMjY1MjU5OTM5NDEwMTA2ODFFMTEyCistNTMwNTE5ODc4ODIwMjEzNjJFMTEyCisrNzI4NDQ4NzE0MTQyNDc5MDdFNzcKKy04ODgzOTM1OTU5Njc2MzI2MUUxMDUKKysxODcxODEzMTgwMjQ2NzA2NUUtMTY2CistMTQ5NzQ1MDU0NDE5NzM2NTJFLTE2NQorKzczNDI5Mzk2MDA0NjQwMjM5RTEwNgorLTU4NDgzOTIxMDc4Mzk4MjgzRTU3CisrNDEzOTE1MTkxOTA2NDUyMDNFMTY1CistODI3ODMwMzgzODEyOTA0MDZFMTY1CisrNTg3NjcwNDM3NzY3MDI2NzdFLTE2MworLTkwNTA2MjMxODMxMjMxOTk5RS0xMjkKKys2NDQwOTI0MDc2OTg2MTY4OUUtMTU5CistNzczMDU0Mjc0MzIyNzc3NzFFLTE5MAorKzQ3NjU5MjM1NjYxOTI1ODMyNkUyNzMKKy05NTMxODQ3MTMyMzg1MTY2NTJFMjczCisrODk5ODEwODkyMTcyNjQ2MTYzRTI4MworLTkyOTE2NzA3Njg5MjAxODMzM0UxODcKKys2NDc3NjEyNzg5Njc1MzQyMzlFLTMxMgorLTY0NDI5MDQ3OTgyMDU0Mjk0MkUtMTgwCisrOTI2MTQ1MzQ0NjEwNzAwMDE5RS0yMjUKKy05NTg1MDc5MzE4OTY1MTE5NjRFLTI0NgorKzI3MjEwNDA0MTUxMjI0MjQ3OUUyMDAKKy03OTI2NDQ5Mjc4NTIzNzgxNTlFNzkKKys1NDQyMDgwODMwMjQ0ODQ5NThFMjAwCistOTI5OTYzMjE4NjE2MTI2MzY1RTI5MAorKzMwNTU3NDMzOTE2NjgxMDEwMkUtMjE5CistMTUyNzg3MTY5NTgzNDA1MDUxRS0yMTkKKys2MTExNDg2NzgzMzM2MjAyMDRFLTIxOQorLTc2MzkzNTg0NzkxNzAyNTI1NUUtMjIwCisrNzQzOTU1MDIyMDkyMDc5ODYxMkUxNTgKKy0zNzE5Nzc1MTEwNDYwMzk5MzA2RTE1OAorKzkyOTk0Mzc3NzYxNTA5OTgyNjVFMTU3CistNzEyMDE5MDUxNzYxMjk1OTcwM0UxMjAKKyszNTA3NjY1MDg1MDAzMjk2MjgxRS03MworLTcwMTUzMzAxNzAwMDY1OTI1NjJFLTczCistNjY4NDQyODc2MjI3ODI1NTk1NkUtMjk0CistMTA4ODQxNjE2NjA0ODk2OTkxNkUyMDAKKy04NzA3MzI5MzI4MzkxNzU5MzI4RTIwMAorKzQ0MzkwMjE3ODE2MDg1NTgwMDJFLTY1CistODg3ODA0MzU2MzIxNzExNjAwNEUtNjUKKysyMjE5NTEwODkwODA0Mjc5MDAxRS02NQorKzMzMDUxMjIzOTUxOTA0OTU1ODAyRTU1CistNTY5NjE1MjQxNDA5MDM2Nzc2MjRFMTIwCisrNzEyMDE5MDUxNzYxMjk1OTcwMzBFMTE5CisrMTQwMzA2NjAzNDAwMTMxODUxMjRFLTczCistMTc1MzgzMjU0MjUwMTY0ODE0MDVFLTc0CisrNjc1MzYyMjg2MDkxNDE1NjkxMDlFLTEzMworLTM1NjIwNDk3ODQ5NDUwMjE4ODA3RS0zMDYKKys2NjU1MDM3Njc5NzU4MjUyMTc1MUUtMTI2CistNzEyNDA5OTU2OTg5MDA0Mzc2MTRFLTMwNgorKzNFMjQKKy02RTI0CisrNkUyNgorLTdFMjUKKysxRS0xNAorLTJFLTE0CisrNEUtMTQKKy04RS0xNAorKzVFMjYKKy04RTI3CisrMUUyNworLTRFMjcKKys5RS0xMworLTdFLTIwCisrNTZFMjUKKy03MEUyNAorKzUxRTI2CisrNzFFLTE3CistMzFFLTUKKys2MkUtNQorLTk0RS04CisrNjdFMjcKKy04MUUyNAorKzU0RTIzCistNTRFMjUKKys2M0UtMjIKKy02M0UtMjMKKys0M0UtNAorLTg2RS00CisrOTQyRTI2CistNDcxRTI1CisrODAzRTI0CistNDcxRTI2CistNDA5RS0yMQorKzgxOEUtMjEKKy04NjdFLTgKKys1MzhFMjcKKy04NTdFMjQKKysyNjlFMjcKKy00MDNFMjYKKys5NTlFLTcKKy05NTlFLTYKKyszNzNFLTI3CistNzQ2RS0yNworKzQwNjlFMjQKKy00MDY5RTIzCistODEzOEUyNAorKzgyOTRFLTE1CistNDE0N0UtMTQKKys0MTQ3RS0xNQorLTgyOTRFLTE0CisrNTM4RTI3CistMjY5MEUyNgorKzI2OUUyNworLTIxNTJFMjcKKysxNzIxRS0xNworLTc5NzlFLTI3CisrNjg4NEUtMTcKKy04NjA1RS0xOAorKzgyODU0RTI3CistNTU2ODRFMjQKKysyNzg0MkUyNAorLTQ4OTU5RTI1CisrODE5MjFFLTE3CistNzYyMDdFLTgKKys0MTQ3RS0xNQorLTQxNDcwRS0xNgorKzg5MzA5RTI0CisrNzU4NTlFMjYKKy03NTg1OUUyNQorKzE0MjU3RS0yMworLTI4NTE0RS0yMworKzU3MDI4RS0yMworLTcxMjg1RS0yNAorKzM0NDg2M0UyNworLTk1MTczNUUyNworKzIwMDY3N0UyMworLTQwMTM1NEUyNAorKzgzOTYwNEUtMTEKKy0yMDk5MDFFLTExCisrNDE5ODAyRS0xMQorLTUzNzczNEUtMjQKKys5MTAzMDhFMjYKKy0yMjc1NzdFMjYKKys0NTUxNTRFMjYKKy01MzEwMTNFMjUKKys5NjMwMTlFLTIxCistNTE5ODI3RS0xMworKzYyMzQwMkUtMjcKKy0zMTE3MDFFLTI3CisrOTYxMzY1MUUyNgorLTkxOTEzMTZFMjMKKys0NTk1NjU4RTIzCistMjI5NzgyOUUyMworLTE2NzkyMDhFLTExCisrMzM3OTIyM0UyNworLTY3NTg0NDZFMjcKKys1NDQ0MDk3RS0yMQorLTgzOTk5NjlFLTI3CisrODM2NjQ4N0UtMTYKKy04MzY2NDg3RS0xNQorKzY1MDYwNjcxRTI1CisrNjUyMTIzODlFMjMKKys1NTU0NDk1N0UtMTMKKy01MTA0MDkwNUUtMjAKKys5OTU4NTc2N0UtMjIKKy05OTU4NTc2N0UtMjMKKys0MDk3ODM5M0UyNgorLTY3NDg4MTU5RTI0CisrNjkwMDUzMzlFMjMKKy04MTk1Njc4NkUyNgorLTg3MTA1NTUyRS0yMQorKzEwODg4MTk0RS0yMQorLTIxNzc2Mzg4RS0yMQorKzYzNTgwNjY2N0UyNworLTY3MDAyNjYxNEUyNQorKzMzNTAxMzMwN0UyNgorLTMzNTAxMzMwN0UyNQorKzM3MTc5MDYxN0UtMjQKKy0zNzE3OTA2MTdFLTI1CisrNzQzNTgxMjM0RS0yNAorLTc0MzU4MTIzNEUtMjUKKysyMDI0NjQ0NzdFMjQKKy00MDQ5Mjg5NTRFMjQKKys5OTc4NTM3NThFMjcKKy05OTc4NTM3NThFMjYKKys0MDU0OTg0MThFLTE3CistNTgyNTc5MDg0RS0xNAorKzYwODI0NzYyN0UtMTgKKy0yOTEyODk1NDJFLTE0CistOTUzNzEwMDAwNUUyNgorKzYzNTgwNjY2NzBFMjcKKy0xMjcxNjEzMzM0RTI3CisrNTIyOTY0Njk5OUUtMTYKKys1MjI5NjQ2OTk5RS0xNworKzQ0Mjk5NDM2MTRFMjQKKy04ODU5ODg3MjI4RTI0CisrMjIxNDk3MTgwN0UyNAorLTQxNzY4ODcwOTNFMjYKKys0MDAzNDk1MjU3RS0yMAorLTQzNjE5MDE2MzdFLTIzCisrODcyMzgwMzI3NEUtMjMKKy04MDA2OTkwNTE0RS0yMAorKzcyODM1MTEwMDk4RTI3CistMzY0MTc1NTUwNDlFMjcKKys4NDI3OTYzMDEwNEUyNQorLTg0Mjc5NjMwMTA0RTI0CisrMjEyMDYxNzY0MzdFLTI3CistNjY0NjE1NjY5MTdFLTIyCisrNjQ4MDgzNTU1MzlFLTE2CistODQ5MzI2Nzk2NzNFLTE5CisrNjUyMDU0MzAwOTRFMjYKKy02ODM4NDQ2MzQyOUUyNQorKzMyNjAyNzE1MDQ3RTI2CistNjI2NjIyMDM0MjZFMjcKKys1ODc4NDQ0NDY3OEUtMTgKKy01MDk4MDIwMzM3M0UtMjEKKysyOTM5MjIyMjMzOUUtMTgKKy03NTUyOTk0MDMyM0UtMjcKKy05Mzc0OTU5MDYyOTlFMjYKKys4NDI2NDI0ODU3OTlFLTIwCistMzg3ODI0MTUwNjk5RS0yMworKzkyNDk0ODgxNDcyNkUtMjcKKy03NzU2NDgzMDEzOThFLTIzCisrNTQ3MDc1NzA3NDMyRTI1CisrNjgzODQ0NjM0MjkwRTI0CistMTM2NzY4OTI2ODU4RTI1CisrNTA5ODAyMDMzNzMwRS0yMgorKzEwMTk2MDQwNjc0NkUtMjEKKy04MTU2ODMyNTM5NjhFLTIxCisrNzM0NDEyNDEyMzUyNEUyNAorLTkxODAxNTUxNTQ0MDVFMjMKKys2NDc5NDYzMzI3MzIzRTI3CistMTgzNjAzMTAzMDg4MUUyNAorKzQzMzcyNjkyOTMwMzlFLTE5CistNDU5OTE2MzU1NDM3M0UtMjMKKys5MTk4MzI3MTA4NzQ2RS0yMworKzQ4MTI4MDM5MzgzNDdFMjcKKy04NDEyMDMwODkwMDExRTIzCisrOTYyNTYwNzg3NjY5NEUyNworLTQ3Mzk5Njg4MjgyNDlFMjQKKys5Njk3MTgzODkxNjczRS0yMworLTczNjgxMDg1MTc1NDNFLTIwCisrNTE0NjEzNTgxNjE0MjJFMjUKKy03NzE5MjAzNzI0MjEzM0UyNgorKzc3MTkyMDM3MjQyMTMzRTI1CistNTE0NjEzNTgxNjE0MjJFMjcKKys0Mzk5OTY2MTU2MTU0MUUtMjEKKy04Nzk5OTMyMzEyMzA4MkUtMjEKKys0ODM3NDg4NjgyNjEzN0UtMjYKKy01NzY4NDI0NjU2NzExMUUtMjMKKys4NzE5MjgwNTk1NzY4NkUyMworLTc1MTA4NzEzMDA1OTEzRTI0CisrNjQyMzMxMTA1ODc0ODdFMjcKKy03NzU3NzQ3MTEzMzM4NEUtMjMKKys0ODQ4NTkxOTQ1ODM2NUUtMjQKKy01NjkwODU5ODI2NTcxM0UtMjYKKys1ODk3MjIyOTQ2MjAxMzNFMjMKKys2NTI4MzU4MDQ0NDkyODlFLTIyCistNjU2NDE1MzYzOTM2MjAyRS0yMworKzU3OTMzNjc0OTU4NTc0NUUtMjUKKy0zODEyOTI3NjQ5ODA4MzlFLTI2CisrOTY1MjY1ODU5NjQ5Njk4RTIzCistODQ4OTI1MjM1NDM0ODgyRTI3CisrNTM2MTc3NjEyMjIyNDkxRTIzCistNDI0NDYyNjE3NzE3NDQxRTI3CisrMjc2MDA5Mjc5ODg4OTg5RS0yNworLTYwODkyNzE1ODA0MzY5MUUtMjYKKys1NTIwMTg1NTk3Nzc5NzhFLTI3CistNDI1Njc4Mzc3NjY3NzU4RS0yMgorKzgwMTM3MDI3MjY5MjcxMTlFMjYKKys4ODYyNjI3OTYyMzYyMDAxRTI3CistNTA2ODAwNzkwNzc1NzE2MkUyNgorLTczNzk3MTQ3OTk4Mjg0MDZFLTIzCisrNDExNDUzODA2NDAxNjEwN0UtMjcKKy0zNjg5ODU3Mzk5OTE0MjAzRS0yMworKzU1NzU5NTQ4NTE4MTU0NzhFMjMKKyszMzk1NzAwOTQxNzM5NTI4RTI3CisrNDExNTUzNTc3NzU4MTk2MUUtMjMKKy04MjMxMDcxNTU1MTYzOTIyRS0yMworKzY1NTAyNDY2OTYxOTA4NzFFLTI2CistNjgwODMwNDY0MDM5ODY3MDFFMjcKKys0MzU2NjM4ODU5NTc4MzY0M0UyNworLTg3MTMyNzc3MTkxNTY3Mjg2RTI3CisrNTk2NDQ4ODEwNTkzNDIxNDFFMjUKKy04Mzg1Mjc3MDcxODU3NjY2N0UyMworKzk5NDgyOTY3NDE4MjA2OTYxRS0yNQorLTk5NDgyOTY3NDE4MjA2OTYxRS0yNgorKzg3NDQ2NjY5OTY5OTk0NjE0RS0yNworLTQzNzIzMzM0OTg0OTk3MzA3RS0yNworKzVFMjQKKy04RTI1CisrMUUyNQorLTRFMjUKKysyRS01CistNUUtNgorKzRFLTUKKy0zRS0yMAorKzNFMjcKKy05RTI2CisrN0UyNQorLTZFMjcKKysyRS0yMQorLTVFLTIyCistNEUtMjEKKys4N0UyNQorLTk3RTI0CisrODJFLTI0CistNDFFLTI0CisrNzZFLTIzCisrODNFMjUKKy01MEUyNworKzI1RTI3CistOTlFMjcKKys5N0UtMTAKKy01N0UtMjAKKys5OTdFMjMKKys3NzZFMjQKKy0zODhFMjQKKys1MjFFLTEwCistNTA2RS0yNgorKzczOUUtMTAKKy04NjdFLTcKKy00MTVFMjQKKyszMzJFMjUKKy02NjRFMjUKKysyOTFFLTEzCistOTgyRS04CisrNTgyRS0xMworLTQ5MUUtOAorKzQ1NzRFMjYKKy04NjA5RTI2CisrMjI4N0UyNgorLTQ4MThFMjQKKys2NTI5RS04CistODE1MUUtMjEKKysxNTU3RS0xMgorLTI1NzNFLTE4CisrNDkyOUUtMTYKKy0zMDUzRS0yMgorKzk4NThFLTE2CistNzc2N0UtMTEKKys1NDMzOUUyNgorLTYyNDA5RTI1CisrMzI4MTlFMjcKKy04OTg0OUUyNworKzYzODc2RS0yMAorLTE1OTY5RS0yMAorKzMxOTM4RS0yMAorLTc5ODQ1RS0yMQorKzg5MzA2RTI3CistMjU0ODdFMjQKKys3OTg4OUUyNAorLTk3Mzc5RTI2CisrODEwMDJFLTgKKy00MzE0OUUtMjUKKys0MDUwMUUtOAorLTYwMzE4RS0xMAorLTY0ODI5OUUyNworKzc4MDY0OUUyNAorKzcyMDkxOUUtMTQKKy02Mjk3MDNFLTExCisrNTU3OTEzRTI0CistODQ3ODk5RTIzCisrNTY1NDQ1RTI3CistNzM2NTMxRTI0CisrNjgwMDEzRS0xOQorLTUyOTk4MUUtMTAKKyszODI5MjNFLTIzCistNjMzNjE0RS0xOAorKzIxNjU0NzlFMjcKKy04NjYxOTE2RTI3CisrNDMzMDk1OEUyNworLTkzOTE5OTNFMjIKKy01NzY3MzUyRS0xNAorKzcyMDkxOTBFLTE1CistMTQ0MTgzOEUtMTQKKys4NDc4OTkwRTIyCisrMTQ3MzA2MkUyNAorKzgzNjY0ODdFLTE0CistODM5OTk2OUUtMjUKKys5MzY2NzM3RS0xMgorLTk0MDYxNDFFLTEzCisrNjU5NzA5NzlFMjQKKy02NTA2MDY3MUUyNgorKzU0OTIzMDAyRTI3CistNjM4NDY5MjdFMjUKKys5OTU4NTc2N0UtMjEKKys2NzQ4ODE1OUUyNQorLTY5MDA1MzM5RTI0CisrODE5NTY3ODZFMjcKKy00MDk3ODM5M0UyNworKzc3NTA1NzU0RS0xMgorLTM4NzUyODc3RS0xMgorKzgyNzcyOTgxRS0xNQorLTk1NTkzNTE3RS0yNQorKzIwMDAzNjk4OUUyNQorLTc3MjY4NjQ1NUUyNworKzg1OTEzOTkwN0UyMworLTQwMDA3Mzk3OEUyNQorKzU2OTAxNDMyN0UtMTQKKy03OTQyNjM4NjJFLTE1CisrMzk3MTMxOTMxRS0xNQorLTM4MDM5ODk1N0UtMTYKKys1NjczNjY3NzNFMjcKKy0zMzc0NDA3OTVFMjQKKysxMzQ5NzYzMThFMjUKKy0yNjk5NTI2MzZFMjUKKys5MzIwODA1OTdFLTIwCistMzMxMDkxOTI0RS0xNQorLTQxMzg2NDkwNUUtMTYKKys4NTM5MjQ2MjQ3RTI2CistNTg1OTEzOTc5MUUyNgorKzYxMDUwMTAxNDlFMjQKKy0zMDkwNzQ1ODIwRTI3CisrMzQ3MDg3Nzc3M0UtMjAKKy02MTM2MzA5MDg5RS0yNworKzg5MTc3NTg3MTNFLTE5CistNjk0MTc1NTU0NkUtMjAKKys5MTk0OTAwNTM1RTI1CistMTgzODk4MDEwN0UyNgorKzczNTU5MjA0MjhFMjYKKy0zNjc3OTYwMjE0RTI2CisrODQ3MzYzNDM0M0UtMTcKKy04ODcwNzY2Mjc0RS0xNgorKzQ0MzUzODMxMzdFLTE2CistOTU5ODk5MDEyOUUtMTUKKys3MTU2MzQ5Njc2NEUyNgorLTg5NDU0MzcwOTU1RTI1CisrMTc4OTA4NzQxOTFFMjYKKy0zNTc4MTc0ODM4MkUyNgorKzU3OTczNDQ3ODQyRS0xOQorLTI4OTg2NzIzOTIxRS0xOQorKzc2ODIyNzExMzEzRS0xOQorLTk3Njk5NDY2ODc0RS0yMAorKzY3NzQ4NjU2NzYyRTI3CistMTkzOTQ4NDA5OTFFMjQKKyszODc4OTY4MTk4MkUyNAorLTMzODc0MzI4MzgxRTI3CisrNTQzMjM3NjM4ODZFLTI3CistNTg5ODcxOTM4ODdFLTIwCisrMjcxNjE4ODE5NDNFLTI3CistOTMwNDI2NDgwMzNFLTE5CisrNTIwODMxMDU5MDU1RTI3CistNzY4MTI0MjY0Mzk0RTI1CisrMzg0MDYyMTMyMTk3RTI1CisrNzY1MzM3NzQ5ODg5RS0yNQorKzc5NDM2ODkxMjc3MUUyNQorLTk5NDE2MjA5MDE0NkUyMworKzc4MTY1Mjc3OTQzMUUyNgorKzkxMDA3NzE5MDA0NkUtMjYKKy00NTUwMzg1OTUwMjNFLTI2CisrNDcxODk3NTUxMDk2RS0yMAorLTkwNjY5ODQwOTkxMUUtMjEKKys4ODU0MTI4MDAzOTM1RTI1CistODE0NjEyMjcxNjI5OUUyNworKzcwODMzMDI0MDMxNDhFMjYKKy0zNTQxNjUxMjAxNTc0RTI2CisrODM5NDkyMDY0OTI5MUUtMjUKKy03NjU3OTc1NzU2NzUzRS0yMgorKzU0NzM4MzQwMDIyMjhFLTIwCistNjg0MjI5MjUwMjc4NUUtMjEKKy0yMTA5NTY4ODg0NTk3RTI1CisrODQzODI3NTUzODM4OEUyNQorLTQyMTkxMzc3NjkxOTRFMjUKKyszMjAwMTQxNzg5ODQxRS0yNQorLTg2NTU2ODkzMjI2MDdFLTIyCisrNjQwMDI4MzU3OTY4MkUtMjUKKy04ODM3NzE5NjM0NDkzRS0yMQorKzE5NDI4MjE3MDc1Mjk3RTI0CistMzg4NTY0MzQxNTA1OTRFMjQKKys3NzcxMjg2ODMwMTE4OEUyNAorLTc3MTkyMDM3MjQyMTMzRTI3CisrNzY1Nzk3NTc1Njc1MzBFLTIzCisrMTUzMTU5NTE1MTM1MDZFLTIyCistMzgyODk4Nzg3ODM3NjVFLTIzCisrNDkzNzgwMzM5MjUyMDJFMjUKKy01MDk0MDUyNzEwMjM2N0UyNAorKzk4NzU2MDY3ODUwNDA0RTI1CistOTk1ODkzOTc1NDQ4OTJFMjYKKy01NjkwODU5ODI2NTcxM0UtMjUKKys5NzQ3MDY5NTY5OTY1N0UtMjIKKy0zNTg1MTkwMTI0NzM0M0UtMjUKKysxNTQzODQwNzQ0ODQyNjZFMjcKKy0zMDg3NjgxNDg5Njg1MzJFMjcKKys5MTA5OTAzODkwMDU5ODVFMjMKKysyNzE3NDI0MjQxNjkyMDFFLTI3CistNTQzNDg0ODQ4MzM4NDAyRS0yNworKzE2MjE5MjA4MzM1NzU2M0UtMjYKKy04NjkyNTQ1NTI3NzAwODFFLTIzCisrNjY0ODMxMDA3NjI2MDQ2RTI0CistMzMyNDE1NTAzODEzMDIzRTI0CisrOTQzNzAxODI5MDQxNDI3RTI0CistMTAxODgxMDU0MjA0NzM0RTI0CisrODI4MDI3ODM5NjY2OTY3RS0yNworLTI4MDI3NjEzNTYwODc3N0UtMjcKKysyMTI4MzkxODg4MzM4NzlFLTIxCistMTEzODE3MTk2NTMxNDI2RS0yNQorKzk3MTE1NTMxOTc3OTY4ODNFMjcKKy0yNzM5ODQ5Mzg2NTI0MjY5RTI2CisrNTQ3OTY5ODc3MzA0ODUzOEUyNgorKzYxMjQ1NjgzMTg1MjMxMTNFLTI1CistMTEzOTc3Nzk4ODE3MTA3MUUtMjQKKys2MzIyNjEyMzAzMTI4MDE5RS0yNworLTI5NTU4NjQ1NjQ4NDQ2MTdFLTI1CistOTk5NDAyOTE0NDk5ODk2MUUyNQorLTI5NzEyMzgzMjQwMjIwODdFMjcKKy0xNjU2MDU1Njc5MzMzOTM0RS0yNworLTE0NDU0ODg3MDkxNTAyMzRFLTI2CisrNTU4MjQ3MTc0OTk4ODUxNzJFMjcKKy02OTc4MDg5Njg3NDg1NjQ2NUUyNgorKzg0MTYxNTM4ODY3NTQ1MTk5RTI1CistMjc5MTIzNTg3NDk5NDI1ODZFMjcKKysyNDcxMTExMjQ2MjkyNjMzMUUtMjUKKy0xMjY0NTIyNDYwNjI1NjAzOEUtMjcKKy0xMjI0OTEzNjYzNzA0NjIyNkUtMjUKKys3NDg3NDQ0ODI4NzQ2NTc1N0UyNworLTM1NjQyODM2ODMyNzUzMzAzRTI0CistNzEyODU2NzM2NjU1MDY2MDZFMjQKKys0MzcyMzMzNDk4NDk5NzMwN0UtMjYKKysxMDE4MjQxOTg0OTUzNzk2M0UtMjQKKy05MzUwMTcwMzU3MjY2MTk4MkUtMjYKKworIyBBIHZhbHVlIHRoYXQgY2F1c2VkIGEgY3Jhc2ggaW4gZGVidWcgYnVpbGRzIGZvciBQeXRob24gPj0gMi43LCAzLjEKKyMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU3NjMyCisyMTgzMTY3MDEyMzEyMTEyMzEyMzEyLjIzNTM4MDIwMzc0NDIwNDQ2MTkyZS0zNzAKKworIyBBbm90aGVyIHZhbHVlIGRlc2lnbmVkIHRvIHRlc3QgYSBjb3JuZXIgY2FzZSBvZiBQeXRob24ncyBzdHJ0b2QgY29kZS4KKzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllKzIzCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZm9ya193YWl0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Zvcmtfd2FpdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjQ2Y2JkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2Zvcmtfd2FpdC5weQpAQCAtMCwwICsxLDc5IEBACisiIiJUaGlzIHRlc3QgY2FzZSBwcm92aWRlcyBzdXBwb3J0IGZvciBjaGVja2luZyBmb3JraW5nIGFuZCB3YWl0IGJlaGF2aW9yLgorCitUbyB0ZXN0IGRpZmZlcmVudCB3YWl0IGJlaGF2aW9yLCBvdmVycmlkZSB0aGUgd2FpdF9pbXBsIG1ldGhvZC4KKworV2Ugd2FudCBmb3JrMSgpIHNlbWFudGljcyAtLSBvbmx5IHRoZSBmb3JraW5nIHRocmVhZCBzdXJ2aXZlcyBpbiB0aGUKK2NoaWxkIGFmdGVyIGEgZm9yaygpLgorCitPbiBzb21lIHN5c3RlbXMgKGUuZy4gU29sYXJpcyB3aXRob3V0IHBvc2l4IHRocmVhZHMpIHdlIGZpbmQgdGhhdCBhbGwKK2FjdGl2ZSB0aHJlYWRzIHN1cnZpdmUgaW4gdGhlIGNoaWxkIGFmdGVyIGEgZm9yaygpOyB0aGlzIGlzIGFuIGVycm9yLgorCitXaGlsZSBCZU9TIGRvZXNuJ3Qgb2ZmaWNpYWxseSBzdXBwb3J0IGZvcmsgYW5kIG5hdGl2ZSB0aHJlYWRpbmcgaW4KK3RoZSBzYW1lIGFwcGxpY2F0aW9uLCB0aGUgcHJlc2VudCBleGFtcGxlIHNob3VsZCB3b3JrIGp1c3QgZmluZS4gIERDCisiIiIKKworaW1wb3J0IG9zLCBzeXMsIHRpbWUsIHVuaXR0ZXN0CitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQgYXMgdGVzdF9zdXBwb3J0Cit0aHJlYWQgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkJykKKworTE9OR1NMRUVQID0gMgorU0hPUlRTTEVFUCA9IDAuNQorTlVNX1RIUkVBRFMgPSA0CisKK2NsYXNzIEZvcmtXYWl0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5hbGl2ZSA9IHt9CisgICAgICAgIHNlbGYuc3RvcCA9IDAKKworICAgIGRlZiBmKHNlbGYsIGlkKToKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuc3RvcDoKKyAgICAgICAgICAgIHNlbGYuYWxpdmVbaWRdID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKFNIT1JUU0xFRVApCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAjIHdhaXRwaWQoKSBzaG91bGRuJ3QgaGFuZywgYnV0IHNvbWUgb2YgdGhlIGJ1aWxkYm90cyBzZWVtIHRvIGhhbmcKKyAgICAgICAgICAgICMgaW4gdGhlIGZvcmtpbmcgdGVzdHMuICBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gZml4IHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgc3BpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChjcGlkLCBvcy5XTk9IQU5HKQorICAgICAgICAgICAgaWYgc3BpZCA9PSBjcGlkOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDIgKiBTSE9SVFNMRUVQKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BpZCwgY3BpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJjYXVzZSA9ICVkLCBleGl0ID0gJWQiICUgKHN0YXR1cyYweGZmLCBzdGF0dXM+PjgpKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX1RIUkVBRFMpOgorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0X25ldyhzZWxmLmYsIChpLCkpCisKKyAgICAgICAgdGltZS5zbGVlcChMT05HU0xFRVApCisKKyAgICAgICAgYSA9IHNlbGYuYWxpdmUua2V5cygpCisgICAgICAgIGEuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgcmFuZ2UoTlVNX1RIUkVBRFMpKQorCisgICAgICAgIHByZWZvcmtfbGl2ZXMgPSBzZWxmLmFsaXZlLmNvcHkoKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiBbJ3VuaXh3YXJlNyddOgorICAgICAgICAgICAgY3BpZCA9IG9zLmZvcmsxKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNwaWQgPSBvcy5mb3JrKCkKKworICAgICAgICBpZiBjcGlkID09IDA6CisgICAgICAgICAgICAjIENoaWxkCisgICAgICAgICAgICB0aW1lLnNsZWVwKExPTkdTTEVFUCkKKyAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICBmb3Iga2V5IGluIHNlbGYuYWxpdmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5hbGl2ZVtrZXldICE9IHByZWZvcmtfbGl2ZXNba2V5XToKKyAgICAgICAgICAgICAgICAgICAgbiArPSAxCisgICAgICAgICAgICBvcy5fZXhpdChuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQYXJlbnQKKyAgICAgICAgICAgIHNlbGYud2FpdF9pbXBsKGNwaWQpCisgICAgICAgICAgICAjIFRlbGwgdGhyZWFkcyB0byBkaWUKKyAgICAgICAgICAgIHNlbGYuc3RvcCA9IDEKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMipTSE9SVFNMRUVQKSAjIFdhaXQgZm9yIHRocmVhZHMgdG8gZGllCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvZm9ybWF0ZmxvYXRfdGVzdGNhc2VzLnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9mb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWYwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZm9ybWF0ZmxvYXRfdGVzdGNhc2VzLnR4dApAQCAtMCwwICsxLDM4MCBAQAorLS0gJ2YnIGNvZGUgZm9ybWF0dGluZywgd2l0aCBleHBsaWNpdCBwcmVjaXNpb24gKD49IDApLiAgT3V0cHV0IGFsd2F5cworLS0gaGFzIHRoZSBnaXZlbiBudW1iZXIgb2YgcGxhY2VzIGFmdGVyIHRoZSBwb2ludDsgIHplcm9zIGFyZSBhZGRlZCBpZgorLS0gbmVjZXNzYXJ5IHRvIG1ha2UgdGhpcyB0cnVlLgorCistLSB6ZXJvcworJS4wZiAwIC0+IDAKKyUuMWYgMCAtPiAwLjAKKyUuMmYgMCAtPiAwLjAwCislLjNmIDAgLT4gMC4wMDAKKyUuNTBmIDAgLT4gMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLSBwcmVjaXNpb24gMDsgIHJlc3VsdCBzaG91bGQgbmV2ZXIgaW5jbHVkZSBhIC4KKyUuMGYgMS41IC0+IDIKKyUuMGYgMi41IC0+IDIKKyUuMGYgMy41IC0+IDQKKyUuMGYgMC4wIC0+IDAKKyUuMGYgMC4xIC0+IDAKKyUuMGYgMC4wMDEgLT4gMAorJS4wZiAxMC4wIC0+IDEwCislLjBmIDEwLjEgLT4gMTAKKyUuMGYgMTAuMDEgLT4gMTAKKyUuMGYgMTIzLjQ1NiAtPiAxMjMKKyUuMGYgMTIzNC41NiAtPiAxMjM1CislLjBmIDFlNDkgLT4gOTk5OTk5OTk5OTk5OTk5OTQ2NDkwMjc2OTQ3NTQ4MTc5MzE5Njg3MjQxNDc4OTYzMgorJS4wZiA5Ljk5OTk5OTk5OTk5OTk5ODdlKzQ5IC0+IDk5OTk5OTk5OTk5OTk5OTg2ODYwNTgyNDA2OTUyNTc2NDg5MTcyOTc5NjU0MDY2MTc2CislLjBmIDFlNTAgLT4gMTAwMDAwMDAwMDAwMDAwMDA3NjI5NzY5ODQxMDkxODg3MDAzMjk0OTY0OTcwOTQ2NTYwCisKKy0tIHByZWNpc2lvbiAxCislLjFmIDAuMDAwMSAtPiAwLjAKKyUuMWYgMC4wMDEgLT4gMC4wCislLjFmIDAuMDEgLT4gMC4wCislLjFmIDAuMDQgLT4gMC4wCislLjFmIDAuMDYgLT4gMC4xCislLjFmIDAuMjUgLT4gMC4yCislLjFmIDAuNzUgLT4gMC44CislLjFmIDEuNCAtPiAxLjQKKyUuMWYgMS41IC0+IDEuNQorJS4xZiAxMC4wIC0+IDEwLjAKKyUuMWYgMTAwMC4wMyAtPiAxMDAwLjAKKyUuMWYgMTIzNC41Njc4IC0+IDEyMzQuNgorJS4xZiAxMjM0Ljc0OTkgLT4gMTIzNC43CislLjFmIDEyMzQuNzUgLT4gMTIzNC44CisKKy0tIHByZWNpc2lvbiAyCislLjJmIDAuMDAwMSAtPiAwLjAwCislLjJmIDAuMDAxIC0+IDAuMDAKKyUuMmYgMC4wMDQ5OTkgLT4gMC4wMAorJS4yZiAwLjAwNTAwMSAtPiAwLjAxCislLjJmIDAuMDEgLT4gMC4wMQorJS4yZiAwLjEyNSAtPiAwLjEyCislLjJmIDAuMzc1IC0+IDAuMzgKKyUuMmYgMTIzNDUwMCAtPiAxMjM0NTAwLjAwCislLjJmIDEyMzQ1NjAgLT4gMTIzNDU2MC4wMAorJS4yZiAxMjM0NTY3IC0+IDEyMzQ1NjcuMDAKKyUuMmYgMTIzNDU2Ny44IC0+IDEyMzQ1NjcuODAKKyUuMmYgMTIzNDU2Ny44OSAtPiAxMjM0NTY3Ljg5CislLjJmIDEyMzQ1NjcuODkxIC0+IDEyMzQ1NjcuODkKKyUuMmYgMTIzNDU2Ny44OTEyIC0+IDEyMzQ1NjcuODkKKworLS0gYWx0ZXJuYXRlIGZvcm0gYWx3YXlzIGluY2x1ZGVzIGEgZGVjaW1hbCBwb2ludC4gIFRoaXMgb25seQorLS0gbWFrZXMgYSBkaWZmZXJlbmNlIHdoZW4gdGhlIHByZWNpc2lvbiBpcyAwLgorJSMuMGYgMCAtPiAwLgorJSMuMWYgMCAtPiAwLjAKKyUjLjBmIDEuNSAtPiAyLgorJSMuMGYgMi41IC0+IDIuCislIy4wZiAxMC4xIC0+IDEwLgorJSMuMGYgMTIzNC41NiAtPiAxMjM1LgorJSMuMWYgMS40IC0+IDEuNAorJSMuMmYgMC4zNzUgLT4gMC4zOAorCistLSBpZiBwcmVjaXNpb24gaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0byA2CislZiAwIC0+IDAuMDAwMDAwCislZiAxMjMwMDAwIC0+IDEyMzAwMDAuMDAwMDAwCislZiAxMjM0NTY3IC0+IDEyMzQ1NjcuMDAwMDAwCislZiAxMjMuNDU2NyAtPiAxMjMuNDU2NzAwCislZiAxLjIzNDU2Nzg5IC0+IDEuMjM0NTY4CislZiAwLjAwMDEyIC0+IDAuMDAwMTIwCislZiAwLjAwMDEyMyAtPiAwLjAwMDEyMworJWYgMC4wMDAxMjM0NSAtPiAwLjAwMDEyMworJWYgMC4wMDAwMDEgLT4gMC4wMDAwMDEKKyVmIDAuMDAwMDAwNTAwMSAtPiAwLjAwMDAwMQorJWYgMC4wMDAwMDA0OTk5IC0+IDAuMDAwMDAwCisKKy0tIG5hbnMgYW5kIGluZmluaXRpZXMKKyVmIG5hbiAtPiBuYW4KKyVmIGluZiAtPiBpbmYKKyVmIC1pbmZpbml0eSAtPiAtaW5mCislRiBuYW4gLT4gTkFOCislRiBpbmZpbml0eSAtPiBJTkYKKyVGIC1pbmYgLT4gLUlORgorCistLSAnZScgY29kZSBmb3JtYXR0aW5nIHdpdGggZXhwbGljaXQgcHJlY2lzaW9uICg+PSAwKS4gT3V0cHV0IHNob3VsZAorLS0gYWx3YXlzIGhhdmUgZXhhY3RseSB0aGUgbnVtYmVyIG9mIHBsYWNlcyBhZnRlciB0aGUgcG9pbnQgdGhhdCB3ZXJlCistLSByZXF1ZXN0ZWQuCisKKy0tIHplcm9zCislLjBlIDAgLT4gMGUrMDAKKyUuMWUgMCAtPiAwLjBlKzAwCislLjJlIDAgLT4gMC4wMGUrMDAKKyUuMTBlIDAgLT4gMC4wMDAwMDAwMDAwZSswMAorJS41MGUgMCAtPiAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMAorCistLSBwcmVjaXNpb24gMC4gIG5vIGRlY2ltYWwgcG9pbnQgaW4gdGhlIG91dHB1dAorJS4wZSAwLjAxIC0+IDFlLTAyCislLjBlIDAuMSAtPiAxZS0wMQorJS4wZSAxIC0+IDFlKzAwCislLjBlIDEwIC0+IDFlKzAxCislLjBlIDEwMCAtPiAxZSswMgorJS4wZSAwLjAxMiAtPiAxZS0wMgorJS4wZSAwLjEyIC0+IDFlLTAxCislLjBlIDEuMiAtPiAxZSswMAorJS4wZSAxMiAtPiAxZSswMQorJS4wZSAxMjAgLT4gMWUrMDIKKyUuMGUgMTIzLjQ1NiAtPiAxZSswMgorJS4wZSAwLjAwMDEyMzQ1NiAtPiAxZS0wNAorJS4wZSAxMjM0NTYwMDAgLT4gMWUrMDgKKyUuMGUgMC41IC0+IDVlLTAxCislLjBlIDEuNCAtPiAxZSswMAorJS4wZSAxLjUgLT4gMmUrMDAKKyUuMGUgMS42IC0+IDJlKzAwCislLjBlIDIuNDk5OTk5OSAtPiAyZSswMAorJS4wZSAyLjUgLT4gMmUrMDAKKyUuMGUgMi41MDAwMDAxIC0+IDNlKzAwCislLjBlIDMuNDk5OTk5OTk5OTk5IC0+IDNlKzAwCislLjBlIDMuNSAtPiA0ZSswMAorJS4wZSA0LjUgLT4gNGUrMDAKKyUuMGUgNS41IC0+IDZlKzAwCislLjBlIDYuNSAtPiA2ZSswMAorJS4wZSA3LjUgLT4gOGUrMDAKKyUuMGUgOC41IC0+IDhlKzAwCislLjBlIDkuNDk5OSAtPiA5ZSswMAorJS4wZSA5LjUgLT4gMWUrMDEKKyUuMGUgMTAuNSAtPiAxZSswMQorJS4wZSAxNC45OTkgLT4gMWUrMDEKKyUuMGUgMTUgLT4gMmUrMDEKKworLS0gcHJlY2lzaW9uIDEKKyUuMWUgMC4wMDAxIC0+IDEuMGUtMDQKKyUuMWUgMC4wMDEgLT4gMS4wZS0wMworJS4xZSAwLjAxIC0+IDEuMGUtMDIKKyUuMWUgMC4xIC0+IDEuMGUtMDEKKyUuMWUgMSAtPiAxLjBlKzAwCislLjFlIDEwIC0+IDEuMGUrMDEKKyUuMWUgMTAwIC0+IDEuMGUrMDIKKyUuMWUgMTIwIC0+IDEuMmUrMDIKKyUuMWUgMTIzIC0+IDEuMmUrMDIKKyUuMWUgMTIzLjQgLT4gMS4yZSswMgorCistLSBwcmVjaXNpb24gMgorJS4yZSAwLjAwMDEzIC0+IDEuMzBlLTA0CislLjJlIDAuMDAwMTM1IC0+IDEuMzVlLTA0CislLjJlIDAuMDAwMTM1NyAtPiAxLjM2ZS0wNAorJS4yZSAwLjAwMDEgLT4gMS4wMGUtMDQKKyUuMmUgMC4wMDEgLT4gMS4wMGUtMDMKKyUuMmUgMC4wMSAtPiAxLjAwZS0wMgorJS4yZSAwLjEgLT4gMS4wMGUtMDEKKyUuMmUgMSAtPiAxLjAwZSswMAorJS4yZSAxMCAtPiAxLjAwZSswMQorJS4yZSAxMDAgLT4gMS4wMGUrMDIKKyUuMmUgMTAwMCAtPiAxLjAwZSswMworJS4yZSAxNTAwIC0+IDEuNTBlKzAzCislLjJlIDE1OTAgLT4gMS41OWUrMDMKKyUuMmUgMTU5OCAtPiAxLjYwZSswMworJS4yZSAxNTk4LjcgLT4gMS42MGUrMDMKKyUuMmUgMTU5OC43NiAtPiAxLjYwZSswMworJS4yZSA5OTk5IC0+IDEuMDBlKzA0CisKKy0tIG9taXR0ZWQgcHJlY2lzaW9uIGRlZmF1bHRzIHRvIDYKKyVlIDAgLT4gMC4wMDAwMDBlKzAwCislZSAxNjUgLT4gMS42NTAwMDBlKzAyCislZSAxMjM0NTY3IC0+IDEuMjM0NTY3ZSswNgorJWUgMTIzNDU2NzggLT4gMS4yMzQ1NjhlKzA3CislZSAxLjEgLT4gMS4xMDAwMDBlKzAwCisKKy0tIGFsdGVybmF0ZSBmb3JtIGFsd2F5cyBjb250YWlucyBhIGRlY2ltYWwgcG9pbnQuICBUaGlzIG9ubHkgbWFrZXMKKy0tIGEgZGlmZmVyZW5jZSB3aGVuIHByZWNpc2lvbiBpcyAwLgorCislIy4wZSAwLjAxIC0+IDEuZS0wMgorJSMuMGUgMC4xIC0+IDEuZS0wMQorJSMuMGUgMSAtPiAxLmUrMDAKKyUjLjBlIDEwIC0+IDEuZSswMQorJSMuMGUgMTAwIC0+IDEuZSswMgorJSMuMGUgMC4wMTIgLT4gMS5lLTAyCislIy4wZSAwLjEyIC0+IDEuZS0wMQorJSMuMGUgMS4yIC0+IDEuZSswMAorJSMuMGUgMTIgLT4gMS5lKzAxCislIy4wZSAxMjAgLT4gMS5lKzAyCislIy4wZSAxMjMuNDU2IC0+IDEuZSswMgorJSMuMGUgMC4wMDAxMjM0NTYgLT4gMS5lLTA0CislIy4wZSAxMjM0NTYwMDAgLT4gMS5lKzA4CislIy4wZSAwLjUgLT4gNS5lLTAxCislIy4wZSAxLjQgLT4gMS5lKzAwCislIy4wZSAxLjUgLT4gMi5lKzAwCislIy4wZSAxLjYgLT4gMi5lKzAwCislIy4wZSAyLjQ5OTk5OTkgLT4gMi5lKzAwCislIy4wZSAyLjUgLT4gMi5lKzAwCislIy4wZSAyLjUwMDAwMDEgLT4gMy5lKzAwCislIy4wZSAzLjQ5OTk5OTk5OTk5OSAtPiAzLmUrMDAKKyUjLjBlIDMuNSAtPiA0LmUrMDAKKyUjLjBlIDQuNSAtPiA0LmUrMDAKKyUjLjBlIDUuNSAtPiA2LmUrMDAKKyUjLjBlIDYuNSAtPiA2LmUrMDAKKyUjLjBlIDcuNSAtPiA4LmUrMDAKKyUjLjBlIDguNSAtPiA4LmUrMDAKKyUjLjBlIDkuNDk5OSAtPiA5LmUrMDAKKyUjLjBlIDkuNSAtPiAxLmUrMDEKKyUjLjBlIDEwLjUgLT4gMS5lKzAxCislIy4wZSAxNC45OTkgLT4gMS5lKzAxCislIy4wZSAxNSAtPiAyLmUrMDEKKyUjLjFlIDEyMy40IC0+IDEuMmUrMDIKKyUjLjJlIDAuMDAwMTM1NyAtPiAxLjM2ZS0wNAorCistLSBuYW5zIGFuZCBpbmZpbml0aWVzCislZSBuYW4gLT4gbmFuCislZSBpbmYgLT4gaW5mCislZSAtaW5maW5pdHkgLT4gLWluZgorJUUgbmFuIC0+IE5BTgorJUUgaW5maW5pdHkgLT4gSU5GCislRSAtaW5mIC0+IC1JTkYKKworLS0gJ2cnIGNvZGUgZm9ybWF0dGluZy4KKworLS0gemVyb3MKKyUuMGcgMCAtPiAwCislLjFnIDAgLT4gMAorJS4yZyAwIC0+IDAKKyUuM2cgMCAtPiAwCislLjRnIDAgLT4gMAorJS4xMGcgMCAtPiAwCislLjUwZyAwIC0+IDAKKyUuMTAwZyAwIC0+IDAKKworLS0gcHJlY2lzaW9uIDAgZG9lc24ndCBtYWtlIGEgbG90IG9mIHNlbnNlIGZvciB0aGUgJ2cnIGNvZGUgKHdoYXQgZG9lcworLS0gaXQgbWVhbiB0byBoYXZlIG5vIHNpZ25pZmljYW50IGRpZ2l0cz8pOyBpbiBwcmFjdGljZSwgaXQncyBpbnRlcnByZXRlZAorLS0gYXMgaWRlbnRpY2FsIHRvIHByZWNpc2lvbiAxCislLjBnIDEwMDAgLT4gMWUrMDMKKyUuMGcgMTAwIC0+IDFlKzAyCislLjBnIDEwIC0+IDFlKzAxCislLjBnIDEgLT4gMQorJS4wZyAwLjEgLT4gMC4xCislLjBnIDAuMDEgLT4gMC4wMQorJS4wZyAxZS0zIC0+IDAuMDAxCislLjBnIDFlLTQgLT4gMC4wMDAxCislLjBnIDFlLTUgLT4gMWUtMDUKKyUuMGcgMWUtNiAtPiAxZS0wNgorJS4wZyAxMiAtPiAxZSswMQorJS4wZyAxMjAgLT4gMWUrMDIKKyUuMGcgMS4yIC0+IDEKKyUuMGcgMC4xMiAtPiAwLjEKKyUuMGcgMC4wMTIgLT4gMC4wMQorJS4wZyAwLjAwMTIgLT4gMC4wMDEKKyUuMGcgMC4wMDAxMiAtPiAwLjAwMDEKKyUuMGcgMC4wMDAwMTIgLT4gMWUtMDUKKyUuMGcgMC4wMDAwMDEyIC0+IDFlLTA2CisKKy0tIHByZWNpc2lvbiAxIGlkZW50aWNhbCB0byBwcmVjaXNpb24gMAorJS4xZyAxMDAwIC0+IDFlKzAzCislLjFnIDEwMCAtPiAxZSswMgorJS4xZyAxMCAtPiAxZSswMQorJS4xZyAxIC0+IDEKKyUuMWcgMC4xIC0+IDAuMQorJS4xZyAwLjAxIC0+IDAuMDEKKyUuMWcgMWUtMyAtPiAwLjAwMQorJS4xZyAxZS00IC0+IDAuMDAwMQorJS4xZyAxZS01IC0+IDFlLTA1CislLjFnIDFlLTYgLT4gMWUtMDYKKyUuMWcgMTIgLT4gMWUrMDEKKyUuMWcgMTIwIC0+IDFlKzAyCislLjFnIDEuMiAtPiAxCislLjFnIDAuMTIgLT4gMC4xCislLjFnIDAuMDEyIC0+IDAuMDEKKyUuMWcgMC4wMDEyIC0+IDAuMDAxCislLjFnIDAuMDAwMTIgLT4gMC4wMDAxCislLjFnIDAuMDAwMDEyIC0+IDFlLTA1CislLjFnIDAuMDAwMDAxMiAtPiAxZS0wNgorCistLSBwcmVjaXNpb24gMgorJS4yZyAxMDAwIC0+IDFlKzAzCislLjJnIDEwMCAtPiAxZSswMgorJS4yZyAxMCAtPiAxMAorJS4yZyAxIC0+IDEKKyUuMmcgMC4xIC0+IDAuMQorJS4yZyAwLjAxIC0+IDAuMDEKKyUuMmcgMC4wMDEgLT4gMC4wMDEKKyUuMmcgMWUtNCAtPiAwLjAwMDEKKyUuMmcgMWUtNSAtPiAxZS0wNQorJS4yZyAxZS02IC0+IDFlLTA2CislLjJnIDEyMzQgLT4gMS4yZSswMworJS4yZyAxMjMgLT4gMS4yZSswMgorJS4yZyAxMi4zIC0+IDEyCislLjJnIDEuMjMgLT4gMS4yCislLjJnIDAuMTIzIC0+IDAuMTIKKyUuMmcgMC4wMTIzIC0+IDAuMDEyCislLjJnIDAuMDAxMjMgLT4gMC4wMDEyCislLjJnIDAuMDAwMTIzIC0+IDAuMDAwMTIKKyUuMmcgMC4wMDAwMTIzIC0+IDEuMmUtMDUKKworLS0gYWx0ZXJuYXRlIGcgZm9ybWF0dGluZzogIGFsd2F5cyBpbmNsdWRlIGRlY2ltYWwgcG9pbnQgYW5kCistLSBleGFjdGx5IDxwcmVjaXNpb24+IHNpZ25pZmljYW50IGRpZ2l0cy4KKyUjLjBnIDAgLT4gMC4KKyUjLjFnIDAgLT4gMC4KKyUjLjJnIDAgLT4gMC4wCislIy4zZyAwIC0+IDAuMDAKKyUjLjRnIDAgLT4gMC4wMDAKKworJSMuMGcgMC4yIC0+IDAuMgorJSMuMWcgMC4yIC0+IDAuMgorJSMuMmcgMC4yIC0+IDAuMjAKKyUjLjNnIDAuMiAtPiAwLjIwMAorJSMuNGcgMC4yIC0+IDAuMjAwMAorJSMuMTBnIDAuMiAtPiAwLjIwMDAwMDAwMDAKKworJSMuMGcgMiAtPiAyLgorJSMuMWcgMiAtPiAyLgorJSMuMmcgMiAtPiAyLjAKKyUjLjNnIDIgLT4gMi4wMAorJSMuNGcgMiAtPiAyLjAwMAorCislIy4wZyAyMCAtPiAyLmUrMDEKKyUjLjFnIDIwIC0+IDIuZSswMQorJSMuMmcgMjAgLT4gMjAuCislIy4zZyAyMCAtPiAyMC4wCislIy40ZyAyMCAtPiAyMC4wMAorCislIy4wZyAyMzQuNTYgLT4gMi5lKzAyCislIy4xZyAyMzQuNTYgLT4gMi5lKzAyCislIy4yZyAyMzQuNTYgLT4gMi4zZSswMgorJSMuM2cgMjM0LjU2IC0+IDIzNS4KKyUjLjRnIDIzNC41NiAtPiAyMzQuNgorJSMuNWcgMjM0LjU2IC0+IDIzNC41NgorJSMuNmcgMjM0LjU2IC0+IDIzNC41NjAKKworLS0gbmFucyBhbmQgaW5maW5pdGllcworJWcgbmFuIC0+IG5hbgorJWcgaW5mIC0+IGluZgorJWcgLWluZmluaXR5IC0+IC1pbmYKKyVHIG5hbiAtPiBOQU4KKyVHIGluZmluaXR5IC0+IElORgorJUcgLWluZiAtPiAtSU5GCisKKy0tIGZvciByZXByIGZvcm1hdHRpbmcgc2VlIHRoZSBzZXBhcmF0ZSB0ZXN0X3Nob3J0X3JlcHIgdGVzdCBpbgorLS0gdGVzdF9mbG9hdC5weS4gIE5vdCBhbGwgcGxhdGZvcm1zIHVzZSBzaG9ydCByZXByIGZvciBmbG9hdHMuCisKKy0tIHN0ciBmb3JtYXR0aW5nLiAgUmVzdWx0IGFsd2F5cyBpbmNsdWRlcyBkZWNpbWFsIHBvaW50IGFuZCBhdAorLS0gbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIHRoZSBwb2ludCwgb3IgYW4gZXhwb25lbnQuCislcyAwIC0+IDAuMAorJXMgMSAtPiAxLjAKKworJXMgMC4wMSAtPiAwLjAxCislcyAwLjAyIC0+IDAuMDIKKyVzIDAuMDMgLT4gMC4wMworJXMgMC4wNCAtPiAwLjA0CislcyAwLjA1IC0+IDAuMDUKKworLS0gc3RyIHRydW5jYXRlcyB0byAxMiBzaWduaWZpY2FudCBkaWdpdHMKKyVzIDEuMjM0MTIzNDEyMzQxIC0+IDEuMjM0MTIzNDEyMzQKKyVzIDEuMjM0MTIzNDEyMzQgLT4gMS4yMzQxMjM0MTIzNAorJXMgMS4yMzQxMjM0MTIzIC0+IDEuMjM0MTIzNDEyMworCistLSB2YWx1ZXMgPj0gMWUxMSBnZXQgYW4gZXhwb25lbnQKKyVzIDEwIC0+IDEwLjAKKyVzIDEwMCAtPiAxMDAuMAorJXMgMWUxMCAtPiAxMDAwMDAwMDAwMC4wCislcyA5Ljk5OWUxMCAtPiA5OTk5MDAwMDAwMC4wCislcyA5OTk5OTk5OTk5OSAtPiA5OTk5OTk5OTk5OS4wCislcyA5OTk5OTk5OTk5OS45IC0+IDk5OTk5OTk5OTk5LjkKKyVzIDk5OTk5OTk5OTk5Ljk5IC0+IDFlKzExCislcyAxZTExIC0+IDFlKzExCislcyAxZTEyIC0+IDFlKzEyCisKKy0tIGFzIGRvIHZhbHVlcyA8IDFlLTQKKyVzIDFlLTMgLT4gMC4wMDEKKyVzIDEuMDAxZS00IC0+IDAuMDAwMTAwMQorJXMgMS4wMDAwMDAwMDAwMDFlLTQgLT4gMC4wMDAxCislcyAxLjAwMDAwMDAwMDAxZS00IC0+IDAuMDAwMTAwMDAwMDAwMDAxCislcyAxLjAwMDAwMDAwMDFlLTQgLT4gMC4wMDAxMDAwMDAwMDAwMQorJXMgMWUtNCAtPiAwLjAwMDEKKyVzIDAuOTk5OTk5OTk5OTk5ZS00IC0+IDkuOTk5OTk5OTk5OTllLTA1CislcyAwLjk5OWUtNCAtPiA5Ljk5ZS0wNQorJXMgMWUtNSAtPiAxZS0wNQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2dkYl9zYW1wbGUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZ2RiX3NhbXBsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzMyYjI1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2dkYl9zYW1wbGUucHkKQEAgLTAsMCArMSwxMiBAQAorIyBTYW1wbGUgc2NyaXB0IGZvciB1c2UgYnkgdGVzdF9nZGIucHkKKworZGVmIGZvbyhhLCBiLCBjKToKKyAgICBiYXIoYSwgYiwgYykKKworZGVmIGJhcihhLCBiLCBjKToKKyAgICBiYXooYSwgYiwgYykKKworZGVmIGJheigqYXJncyk6CisgICAgcHJpbnQoNDIpCisKK2ZvbygxLCAyLCAzKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2dyZXlyZ2IudXVlIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2dyZXlyZ2IudXVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMWJlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvZ3JleXJnYi51dWUKQEAgLTAsMCArMSwxNTQ3IEBACitiZWdpbiA2NDQgZ3JleXRlc3QucmdiCitNID1IISAwICIgMCAhICAgISAgICAiMCAgICkoICAgICA7RlxAO0YlTTkwICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgICIgICAgICAjXyAgICAgICAgICAgICAgICAkICUtCitNXCAgICAgICAgMF08JCAlJVohICEyPlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNICAgICAgICAgICAgICAgICAgICAgICAgICBIICAgICshQCAgIyBMICAgVDEgICAuJUAgICNRSCAgISA+CitNICAgMShQICAkQkQgICEsTyAgIDQtICAgJTNIICAhOF8gICA3MTAgICYkSCAgIUUwICAgOjUwICAmVUQgCitNICFRPyAgID05MCAgJ0ZIICAhXVAgICBAPUAgICg3RCAgIileICAgQ0EgICApKEQgICI2LyAgIEZFICAgCitNKVlIICAiQj4gICBJSSAgICpKSCAgIk5QICAgTE0wICArO0QgICJaXyAgIE9RICAgLCxAICAjJywgICBSCitNVCAgICxdNCAgIzM5ICAgVVdQICAtTjQgICM/SiAgIFhcICAgLj8wICAjS1ggICBbXyAgIC8wKCAgI1gnCitNICAgXyJAICAwISAgICQkNSAgISImUCAgMFIkICAkMEcgICElKzAgIDFDKCAgJDxYICAhKC9AICAyNCggCitNICRJKCAgISszQCAgMyUoICAkVTggICEuN0AgIDNWMCAgJSFKICAhMTwgICA0RzQgICUtWiAgITRAICAgCitNNTg4ICAlOiwgICE3RDAgIDYpOCAgJUY7ICAhOkggICA2WjAgICVSSCAgIT1LMCAgN0soICAlXlggICFACitNT0AgIDg8MCAgJisqICAhQ1MwICA5LSggICY3NyAgIUZXICAgOV4oICAmQ0ggICFJW0AgIDpPMCAgJk9aCitNICAhTF9QICA7QCwgICZcKSAgIVAjQCAgPDEoICAnKDggICFTJ0AgID0iLCAgJzRJICAhVitQICA9UywgCitNICdAWSAgIVkvUCAgPkQwICAnTSogICFcNCAgID81OCAgJ1k6ICAhXzggICBAJjAgICglSSAgIiI7UCAgCitNQFc0ICAoMVsgICIlP1AgIEFINCAgKD4qICAiKEQgICBCOTggIChKPCAgIitIQCAgQypAICAoVk4gICIuCitNTEAgIENbOCAgKSJaICAiMU9QICBETDAgICkvKiAgIjRUICAgRT04ICApOzwgICI3WEAgIEYuQCAgKUdNCitNICAiOlxAICBGX0AgIClTXCAgIj4gQCAgR1BAICAqIC4gICJBJFAgIEhBPCAgKiw8ICAiRCgwICBJMjggCitNICo4SyAgIkcsICAgSiM4ICAqRFsgICJKMDAgIEpUPCAgKlEtICAiTTRQICBLRUQgICpdPiAgIlA5ICAgCitNTDZIICArKVAgICJTPSAgIE0nSCAgKzYgICAiVkFAICBNWEwgICtCLyAgIllEUCAgTkk8ICArTj0gICJcCitNSFAgIE86RCAgK1pOICAiX00gICBQK0ggICwnICAgIyJRQCAgUFxQICAsMzEgICMlVVAgIFFNVCAgLD9DCitNICAjKFogICBSPlQgICxLUyAgIytdUCAgUy9QICAsWCIgICMvIiAgIFQgVCAgLSQyICAjMiYgICBUUVggCitNIC0wRCAgIzUqQCAgVUJcICAtPFUgICM4LkAgIFYzWCAgLUkjICAjOzIgICBXJFQgIC1VMyAgIz42MCAgCitNV1VcICAuIUUgICNBOlAgIFhHICAgLi1UICAjRD4wICBZN1QgIC46IyAgI0dCMCAgWihcICAuRjQgICNKCitNRjAgIFpZXCAgLlJEICAjTUogICBbSlggIC5eVCAgI1BOMCAgXDtcICAvKyUgICNTUkAgIF0tICAgLzc2CitNICAjVlZQICBdXiAgIC9DRiAgI1laUCAgXk8gICAvT1UgICNcXlAgIF9AJCAgL1wnICAkICMgICEgMSggCitNIDAoNiAgJCMmUCAhISIkICAwNEcgICQmKyAgISFTKCAgMEBYICAkKS8gICEiRCggIDBNJyAgJCwzICAhCitNIzUkICAwWTYgICAhIUAgICAwNCAgICQmICAgISEwICAgMDAgICAkJCAgICEhMCAgIDA4ICAgJCYgICAhCitNITAgICAwOCAgICQlICAgISFAICAgMDQgICAkJiAgICEhMCAgIDAwICAgJCYgICAhIUAgICAwNCAgICQmCitNICAgISFAICAgMCwgICAkJSAgICEhQCAgIDA0ICAgJCYgICAhITAgICAwOCAgICQkICAgISFAICAgMDggCitNICAkJiAgICEhMCAgIDAwICAgJCYgICAhITAgICAwMCAgICQkICAgISEgICAgMDQgICAkJCAgICEhQCAgCitNIDA4ICAgJCUgICAhIUAgICAwMCAgICQkICAgISEgICAgMDggICAkJSAgICEgUCAgIDA4ICAgJCUgICAhCitNIUAgICAwOCAgICQmICAgISFAICAgMDQgICAkJiAgICEhQCAgIDAwICAgJCYgICAhIUAgICAwMCAgICQmCitNICAgISFAICAgMDggICAkJiAgICEhQCAgIDA0ICAgJCUgICAhIUAgICAwOCAgICQmICAgISEwICAgMDQgCitNICAkJSAgICEhMCAgIDAwICAgJCQgICAhITAgICAwNCAgICQmICAgISFAICAgMDggICAkJiAgICEgUCAgCitNIDA0ICAgJCUgICAhITAgICAwOCAgICQmICAgISFAICAgMDggICAkJiAgICEhMCAgIDAwICAgJCYgICAhCitNITAgICAwMCAgICQmICAgISFAICAgMDQgICAkJiAgICEhQCAgIDAwICAgJCYgICAhIUAgICAwNCAgICQmCitNICAgISFAICAgMDggICAkJCAgICEhQCAgIDAwICAgJCUgICAhIUAgICAwOCAgICQmICAgISEgICAgMDggCitNICAkJSAgICEhQCAgIDA4ICAgJCYgICAhIUAgICAwOCAgICQmICAgISEgICAgMDAgICAkJCAgICEhMCAgCitNIDA0ICAgJCYgICAhIUAgICAwOCAgICQmICAgISFAICAgMDggICAkJSAgICEhMCAgIDA4ICAgJCQgICAhCitNIUAgICAwOCAgICQmICAgISEwICAgMDAgICAkJSAgICEhMCAgIDA0ICAgJCUgICAhITAgICAwOCAgICQlCitNICAgISFAICAgMDggICAkJiAgICEhQCAgIDA4ICAgJCUgICAhIUAgICAwOCAgICQmICAgISEgICAgMDggCitNICAkJiAgICEhQCAgIDA0ICAgJCQgICAhISAgICAwMCAgICQmICAgISFAICAgMDggICAkJSAgICEhQCAgCitNIDA4ICAgJCYgICAhIUAgICAwOCAgICQlICAgISFAICAgMDggICAkJiAgICEhMCAgIDA0ICAgJCYgICAhCitNISAgICAwNCAgICQmICAgISFAICAgMDQgICAkJSAgICEhQCAgIDA4ICAgJCYgICAhIUAgICAwNCAgICQmCitNICAgISEwICAgMDAgICAkJSAgICEhMCAgIDA0ICAgJCYgICAhIUAgICAwOCAgICQmICAgISFAICAgMDQgCitNICAkJCAgICEhMCAgIDAwICAgJCYgICAhIUAgICAwOCAgICQlICAgISEwICAgMDggICAkJSAgICEhICAgCitNIDA4ICAgJCYgICAhITAgICAwOCAgICQmICAgISEwICAgMDggICAkJiAgICEhMCAgIDA0ICAgJCYgICAhCitNITAgICAwNCAgICQlICAgISFAICAgMDggICAkJiAgICEhMCAgIDA4ICAgJCQgICAhITAgICAwOCAgICQmCitNICAgISEwICAgMDggICAkJiAgICEhICAgIDA4ICAgJCUgICAhITAgICAwNCAgICQlICAgISFPWipARUE2CitNKjMxNTYkNTo2VFVGPERFOC9SNE0sQyBeMTY6Ij03VVAyU11JPEZNOzYmLUIxM0VPOiRdJCs1OTw8Rz0lCitNMSVJUj83SVE6RiVDNkVJSDI0NT85VUEvPEdUXjY1SUI6RylOPUhJTTZDXSk2Jl1COiMgLi1HViY8RilBCitNOSgpQCxCNE0lM0VaOEZBQjhGISIyNFVDOFZNOCsyID0mU0VVQFdJTUJEU14kQEQ1KzZFSjZVSE0pMyheCitNMTYpUjxGRTo4Rj1KPEZNLzYlUUI4Ri07NkU5KTZFOUI6Ry1LNlYtSThVQSkvRiVKOUYpQjtHNVU/N0lICitNL1NRPzhXLVM6NEVAPyctSjhGIEUmJFIoODQ0Xjo2XUI6JTBJJEVASSNBKE0yNTk/OictWjtUQUg4JDEkCitNL0YpTzYlQSU2ViRfM1giKjgiPFY6VklUPydVQCszXFlARFE2IDQ0ITpAIig+SElJLCM5JDYlRCMuP1kkCitNPVc1SDglRF8qMUBAKzMhMDxGOUs4RUBfOFc9QjpWLUI1QlRFMTYlSDdENE0sJl1XMiRROjZXKVw7NU1SCitNOlVJOjgjISU6Vz1HMTYtWio1QTY2NlFaO0ZaIThGLTgnMyFCOEVIOyNBNS07RUkvOFVRRj1TWE0vIyhWCitNNkMpSEBGTUs8RlE7OFYpSzpURTUuUTRAOEhKKj04NVIvIUAuKEZBTjhGIFskQk9VNiU1JDpHVVo4VFVDCitNOlZNQzdGKUo7Vk1AM1YhSjY1RS0xJEFKOFNdODcmQS0vQ1k7OCYhSDhGKVo+NylVOkVBJTo1TUtANFxZCitNOEgtVj5WRTgtQ1E7QFcgVis0UU8zIz02NCFVKTEjIDUmI00kOCchQzxHITgzI1kkOiVBLTtFQTgrMzkrCitNNiVJWkMnSSsvRkVKO0dWIj4kRFYuVEVAIDNEITEgI148OClQLUVBQThGST8rMUxFPCgpRjhWLT8yMkRNCitNLlJVLTpGKUIzIzhNM1chQjtXKTguM0RHJlNFQDYlQEknNilbOkYtQDM2SVI2VF1SOkVJSS9CPTg8R0lLCitNNiRdRy9VOSQ2RylSOzcpUjQnKUgsQlU4PEU4TSpTRTU6JiEnNkZFQj5VQFY8JiE6L1FNKTxHKVpAVyk6CitNOUVNQjxFOUExISg1MSdKKj03NV1fRzBSI0FBKTpGSVc6IiA7MjZBQjw3NU44RDUkOEcpSjhFXTA+RylACitNMTc9WzhGSUgyM1lAOVQ1JThGRS0uM1EtN1YpSzVCPUJAJylaOkZFOzskVUZAVExWOkgtTj83LTgyNUlXCitNPlchKTI0XUsyMjRWNUQxNjo2JEAmIyhcMTZFLTZTRE03Vkk6PVdJWjpGTUAtQUxFKzM5Rj8nSTgzNk06CitNOUdWIkBGSSUvWCklOlAkViA1QCBcJylNPkYtOzZWKVY9UlQuKTYuKDhGLVA8RiRWLUYgXjZGST8zNlhbCitNJlJVOzZIIiI6M1hWLyIgUjIzOTYxIzk7PFdBSTclXUc4VUUlPCRVJTojWEkxNilSPVZBKTFVOSwrVUFHCitNOkVNPDpWLVI5RUBZMTghSjVERUg6RyFDOCRFMTtXSUIyNUEpKVZZQC1DKTg9Vk1KMzc0IzhPWSkyMlQ1CitNJEJVQjxGSUo9NlVALEIgVjM2KVw9UjQuJlM5Qj43KUs5RFUlMyZNSjhGQSU5R0ksKzZdVzpHKUs2Q105CitNOiRVNTpHKUg4JDBZMjVNPDIyNEU4Jk1SOUVNOzwnLVo9VEU5PkgpTj8nOUA3RUVKPEZZMD5IKiA6RDU7CitNMjNFKTomXFApUkU4NiVJQDhRNDIsJkElPCdJVT5HSUo3IlRAJTI1LTpFUi0zMzlBOkZJWj8oKVo2VUFACitNPFAlOCA2RCBSJykxOkYpODhVSU0/RVA7KTU5UzEkVVc/NyBWLjZBLTMkUTYyNylILUMoVjEnSiI8RV01CitNNTNZNDUyIF84JUEpNiYtOTZGXVI2RERfOiREWThWRT42RilNPkZdKSwkUE0oQC0pWjVBKTYnKVI5RkUtCitNNUcqIzZEVUI6RkkkNkU4TTMnVVoyNFVON0VJLS1CVTs/VilLNkcpUjpWKSk2I1xSKzM5QDZGQUM5RjlKCitNNyM4Vi9WKVU9UlRAJiE1NjxGVUo6RV04LjVJQThGXSgyJzRWJlNFLDpHTU06JEUlOCU4VjM3LUo6NiEpCitNNiZJSC9CIDUrMC0kUVRVLTtXSV84IlRbN0gpXTtGTUI2VVk6OkZROz84Rio8RUlDODM4UDo1REIqMU0pCitNOCQ1NjpSKEkxI0RWOFZZUkFYLV09VVxWLENZSj5EUFkoIzlMPEZVXT03PUAzNl1bIDdIITwgIkJANllCCitNNDRBQDY2LVI9U1xULjVcTS42XV1AJik6PCZdOjE0RF4+NylALlJVPz5ALVJfRyFGMyYhTigiNSk4RUklCitNL1M5JTpIIUIzI1kpNiRFOz5HSUw8R0laPEU0VjgkRSQyNERfL0M4WTglTUI6RSFCOEgpWjdFRUo9M1hZCitNNjFMST1HSSUxNVlbPkckXyZTOVo4Vk1CPTc1UjhEXS84VkU2MyYpOzhWXUY8Rjk5MTRFODZGSVc3VTRbCitNLEYtUjxGOVE6Ri0vNiJdJTtWKUI6VTBAKCM5Oz5HKVE4OjBNMjRERzE2TTw4VkFCOFdNUjlTKDguVUEkCitNLUVBJDg3MUwvQjRJLCc2IjgmLUgxNjgkOllNTkAoOV05Ri1BL1I1PzciNEsoIlRZNTRVSjI2UUkrMlU6CitNNkVYIz5IVV06VUkpMjYqIzgzKDgoRVFaIFY6JTpGIS06VyghPkAlVyAvWVtBRz1ANiNFLTZGKVM6JUE1CitNMTZFTzxHQVlAR04iQkchKS0hKUI5RikwKzVJUzdFIU0+Vl0sNjctNSgiVSk4JUBLJTM5QD5HLVI4I104CitNMzZOIjtEMS88SClaOlVBLTI1SSkrMlRWNiMgVi9UVUo4Rk1IOkgpSjZFTUM4JEU1LCNRUjpUVTkvVUlaCitNQEZUQDInLUY9RklCOEZVUzhEVUM8WC1VOlchUjY0Nks+R0lCNDRVRzolRUpARylCNkZJSjpWWiA+VllLCitNOiNMVjdFRUo9Vi0kJEI1Sj5HNU49VERAJlJVPzpALTpONDUoPldNSysxQSk8Rkk4OlYtKTg0TDsmIkRfCitNPiZVOjlGRFYzNy1TOyZFOz03QV09RylLNlVBLTcjOSQvUzA7L1YhQjE2SUgrNDU7NkAtQ0VGTUs9Nk06CitNMjU5QjdDXE0tRiFML1RRSzhVSUI6RkghOEAlJCAvWUdAR1VTNiMhJDgmITo2I0UkKzYhSzpWSVI+Rz1ECitNPzc9TTNSNTgyM0RSKzVFQjokVUI+RyEpMzdJTy9TKFIuVExFJiJVQTpHKVczM1lNMzZKIjpTOFY0NllVCitNPkZdLDElUTYsQjRSN0QwUi1DITYxJSFAMzZJUjpWRUI4VU1BMjU5SjY0VUIvUzlLPkZMRSk1SUs6VihZCitNL0YpUjxFTTo0J1YqOzZBSjZER148R01KOlYpWjxEUSQ9NyFGOiUhOzhGOVY/N1VVPEY8XjIzMUM8RikkCitNJTJFQj03KTA+SCBbJlNRODMlSUg4IzhHOkdJQCZQWE04RklLPlc9STgjXDglMTRNPDVJLDhXISkvRkVaCitNPEZdRjRVUiI+J0lMO0cpOjZERSw2NVhFKzU1LT1WSUY+Rkk7OiYhJS9TXFYvViBeKTNZLDhWTUI4RUBSCitNKzNFSztWQUhARylaIDc8ITYwI146VzVWPyRUXzI0VUEvUzhWLlFMVjM1OTo3JklSNjY5QjM2QUY2JERbCitNKCI0Vi9WITg4Rz1PNkRVUjxGQSQxM1BcKlBYOzI2XUI6RERWOiVJQz9FSFAyNlU7NFdVWjZEMTY5JFRcCitNKzVBOjI2IF4vVjlIOiVFOzhGTUMxNFVKOkYtQjokMTg2VUE6OkcpQTAzMSUzNik2KzI0TzZGTVI4RDFCCitNQTYpJTMlST9fRVFNOkZVSztHPUc2NyVZPEZMWTVFUTw4RjlaPTdRWjY0KE02Vyk6OCM4TTMmKUgqNSIjCitNOiJUWTEzOFc4RkhfKjZBWjZCNDgpNFU6Okc1WjpWPTkqUUAuKCVNUDolQUs4M10tPDdJWjlGIS09NzVTCitNNldKIzhVTUE2JiFJLyJEVjU3ITwyJylLPCZNQzYjXSQvREVDNkREXis2LVI6VkUtKjJURTE3IUM2WClCCitNPUAmIiA2RCBCRilCOUdMVi1FQUo6JUgjMj9YXzI1OTg2JTk6PEcpTzo0MUA8Vi04NTJESy0jOSk2JUVDCitNOkY9UjpWSUs4JTReLUMgLiNCVUg6RiklM1cpSjxHXF4mIjU/ODRRUjxFWSktQ1k2NjNQXjMmIVI6Ij1ACitNPkcpWjY0UUI6RVhfNUZdSjpWPT4yNEVCPEc1Wj1HSVI4RiE4NjUwSSZSNFk8Rl1HO1gpSC9DOTg9ViknCitNN1UhOjxGOVA6RjlSPkZLUzUkUUI6Vik8OUVOIkBHIToyNl1PMyZBPjI1OSk2Q1ksPkdJSTdVRSUtQ0VDCitNMjNZQj5GPFsuVDE5NjVJNjM2KUo6JERFJiBEOzJVQSw2RUReL1JVJTpVTVI+RzlVOkRRTkJHPUM2VFFICitNOlU0Wys1QU48VUk6OFcpTjtHPUMzNFVIOlZNSjVCNFk6Vi1LNlQxKS5SVT82RFEnOlAlXSA2TCBfRV0lCitNOCggViszRUo7NFFBMjRFPjgmLUo6JiE2PCghWj1UXTg6V0lKOCM4WyxCVSk5VV0sMyYpWzw2KUc6NUBNCitNLlNEQCYhKF87VlUpMzcpV0BIKTQoIUBFMjVNRjpGKTktQ0xQNiQ0WTE1TVY8QihQOkcpTy1CRS8+R0lKCitNNiQxQjolTUM4JTk8PTdVXT5XKVM6Ri1JMzZBNS5RQDs2RklVQEgpSi9CVT4/P1lSNjU4Xis2STo3Jlk7CitNM1clVzokMUM9NllMNjNdUjxGXUI5JylHLjVJQjsmXUgzJDFDQEZZUz5WQTY0VE1DOVVJPzlGKFAyNiUtCitNOFVJOjgmSVI+RlRcKlFASTVEVS0yNU0lL0RFODMlOUo+R0lGL0FVOkRIKVA4NEU6OERMXjY2RUY/NlhZCitNOCcpSzQnTVI2Izk6OlghXThTOFA4Vk1GODRRKDomIT8zVDYiNkVQITpAJVAgL1lIL1RVWy0iND00U1hQCitNOiM4VjZGSUo4RU0pK1VOJzpHKVIzNFYiOkYpQDcjUEArNkFXOERFOj1XSTs4JiE4LUQwXy5TKEkrNiFKCitNNiUxOjpIKV09VTRUKlM5ODpWSUM8JERQMjYlKSlTXS08R0hfKTVJTzdSKDIvV0lfPEU4QCs0MTo4RUlCCitNNkc1XT83SUo3JUlRPURVLC4zTEcmI005PEgtXDhCVEU4RlZOOUZJQjIjOTo2NUVKNjRFOjxFUFkzJylQCitNPEZIXjZGKUA2RilKMjFNQTMlJUs6RkBZLVZVSzlHSVc7ViE/NlAtS1NWISUmU00/L1Q1QjhGSVI/OEVaCitNOFUgQCs2QTgrMlVAMjRFJTI2ITg2Rk1LMSJURTVJKipARkE4MjNcTS1HIVA2R0laLCMhMDpENTo3JjhFCitNKzNFWkJHKTkuNSFCNjVNLS1GRVI8JERQOEZcITogJU8gL1kpMjVFSTYlMFsuUUw7NiMoKTMmSUo6ViRWCitNJlRVXzpGVVs4RilLMzNdSjpUMDglNEFaPCVFOjxHTUo7Vi0pLURRRC9CVFItREE6MzVdODNWSUo4RiElCitNLlJUWTY2TUI8RihNL1Y5QC1DOTo+R01CLCRFOi9BQDIqNkIiOlQ0RSIyVS02NDEtOFc2Jj82WUIuMkU7CitNO0VJOC9CRDgjQUBAMSdJWjVCKFs8RyteOjcpSjYzXT43VilCMyVRQzpUXF4yNylaPEZAVi41TTs3JklKCitNNkE1PzZDXUc4Ri1ALjYhSDY2WVU7RkFDMzRVPDxGQF4mUlUoL0NZLzhWWVI8SEVNOEVERSZVOU0oIlVNCitNMTM4Xy1DWSk2RUFGKjIhNThHSiVER0kpLUIgOCk3KVc6VklOOCRNODpGLU86RkBbKjI1OT03SVI2JTlCCitNOEVNJSs0UU87NjhZQEZBUSA3PCEyMCNTNiQ1QDEmSVc4JiUlKzNdKS0lXUs6VkElMSMhSDpWLVo+RklLCitNOlVdKTomTFsmIUBePEZMXy1EUVI+VylPNkM4UjtWJSUuU1k2NkU5JDZGKUo7ViE6NkU5KTIzOF88RzVXCitNLjM5QDYzXF86JzVSPkYlMDYzOEssIzkoOic8TS5RQEk4JkE7L1QxLDs3SUozMjQyLUY9LTM1RE0qMCwpCitNX0FMXjY0REUzKClSOEcpSDglTUI4JUk7OEcpWjxEMEUyNyFSPUcpPjNVSTs5V01MOlQxLTlUUUo4VUlKCitNOFchSDM2SiI6RilXOjRFLz1WXToyVTRbKENdODM2RVI9ODFVPEVNJC0kRUkoIlVINkREWypQWS04RTkpCitNJEIhLThWKU5ASElHKjBYLiU1IiI/Nkk5OiYhLTpGOVU+Rk1AMjU1QDY1RVo6RkFDPChJQC1DOSk3VilKCitNOEZZVCA3SCE8ICNeNiNZKTE2PU8zJUVQODNdKS1GKVo9VkBQMSRFKS1DIVFARklLOlYtS0AnPSkoIjU2CitNOEVIXysyPUNCRklKNkQwXzM2KS8xIzktOiZdJTgmRUo8RkE7OicpUjhTXE04RzlaNiNFPy4yVSU4RylECitNPkgqIjhDTFIyNUFAOkZJSCxAREA2JklKOjRQWTM3KVI5VTRAKzYhQDlVSTg1MkQuI0IgUiwjUE0zJzVKCitNX0Q8WTIkNUA8Jkk6MzVZVT03KS0rM11LPEc1SjpWXVY5VVFSO1VNODE2IUI8Rk05NjRRQDZFSU5CRyk5CitNPEdJLTgnSVo4JUFRMiEoRTVDISk6RkVVQUgpSjY0TSQ4I0xcOjZJQjgjKC4mVUVCMTM4Xzg1OFYtRUFOCitNOERQXy5RVF89OClXNkYtNi1WKVU7RllGO1VdLThWUS81NklPNkYtQi1EMTUrMj1APkgpWkBAJVUgNyAgCitNX0U4WTY1NTY6JERQOEc9STlTOTY8RylDMjVBQzYyNEAzJzVSOiYpSjtHSU08JDBFLjNYWS9UNE0uNyk+CitNOFREXjI0NS0xI0RWL1VFQjlFQTs8Jz1CMzVaIkJHSUsvREU6OkZNJDgjODstRFVCOVZVWEE2TSQwQ10pCitNOCY9OjtRTCkiNDU1MzZdTzYkNUs8RylXMlM5RjcnSUw4JEU0MDIgSyxBTEkqM11POl5JKSsyNFYzNk1KCitNOCVJUD83IUY4VTE2OEcpUjhFSUo9VyU7PCcpSjE0RUM5RylSOVRFJDE0VTo5SClXNkYtQjEmKVo8RUU4CitNPEYgRSszTF8yNFUwOldVXTclRT82RkFEMjYhOzhGXTQqMzlPPkYpOC9DOF80IlRfPEY8WyszTTQyNklVCitNPEYtQDE0RTo9NzVaIFcqMzElQVA6MihZOFRFOTpVSSUxIUwyLCYpUEJAJU0gNzggX0YgXjglWEcuNTBFCitNLCRRRj5FOTo6Vk06MzZFTDlCVDstRyFSNyVJRj5HOUs6VlkrMSI0QC1FQSkzNj02OjRVNjomIS82RiEpCitNNiRVJDokRS84VklAKzNFSz1INiI4NEUtOkZdJy1UREkmUzkpMVctUj83KTk4JEReMSRFODlTMDUjQlUpCitNMzZNVztVSUc2NjoiOFMhQC42OVo6RDRQODQwTS8jKFYuUzk5PEtFQC9SIFYzVilCMiRBUkInNUY4RilACitNNkYpSjZVQT87Vkk8PEZNSjZERUs9VylCOCREXy9ERTo4Rk1POEZBLTElSVI6NDU2OlcpSDY0RCQ2LC07CitNOlZZQjY2SU87N0lDODVFLTpHXT8zVloqPkZdOChBTSk2JEVVPERERS1GISc4Rk0vOVREUDo2TUY8R0ldCitNPzY5QTZXKVspNCUpJzNFTTpVWF8sIUA4KzVFWiA2WCE9MCNeOEVdSzoiNEU3JTRHKzQxQjtVUVc8Vk0wCitNOjZNSzYiIE04VlBZMzNdPDwmLTs4JUk4LjE0TTEzIUM2Ik1AOEYpUkAlIUI7Vi1MODNZJTgmRToxNiBeCitNKzM4WTtIKUIzJUVLPVYgPTJVQEUqM1xZNkctVT01SUI2RDEpL1U5QDU0MEAtRFU5OEcpUjlHKSksJklACitNJzRAVjVHSVo4IlUlODQxKTZFSTgzNUVGX0VEXCxDXSU2Jk1AOEcpVjtHKU46VylLMjM5QDhWITg4JiU7CitNNkVdQzxHXVE6NUBWLUNZOzpWLUM7R0lKMjQ1ODpGTTs6RylSOiQxJDomTUs4VUBfNjYlQDhHIUM5RllSCitNODVBOThWTTo2VjlLOFVNSCsxQEIyMzlGPkcpLzomSSwxJUkkNkVATTYmSUo5JlVVQkVRQzlHKiIxNEE4CitNKjIpODpGKTo4JERJKjgoXjpQJUYgNkggX0VJSDwmIE0oI11OMjNcXjEmSVI+Rk1SNkRdOTpGMEkpNUk6CitNKzVBJTElRT8vUyEoMjREUi5TODsuM1g7L0YpLTxHXSkzNl1SPVYkTSk1QV87U0U6OzYkVik0XVc6JDE4CitNOlcpQCk0MTksQkReMjRdSzlGOTY4Rj0pMzVBKTZFQTkvVUVANiRRLzpGOVM4IyEsOCI1KS9UNTA7Ryk4CitNMTYlTS9GKUs4VVxZMz9ZUDYjOF8uVDVAOUcpVT02LUs4VVlGPCUwMjYnIUExNUVBNjVBQDonKV0/OEVBCitNLlJETTE2TUo4VylaOlQ1ODZFIVA4JUlQPEZAXy42SiZBNykpL1VZSTNUQVI8R0lfPkcpUDgnIUMyM1lACitNOERVLz1VREsqMzhbNlcuJD1XSVo6JDE4NyNZRzhFXUI6RikzPkg5Oi9WKVo9NThQL0JEODI3NUI3JjlACitNL1ROIi9ENCE8QCVCICxQVjYlQDsvQ1xfOCVJODIzWTg6R0lSPDYoXy41TUkvQzk5NiJVODlFQS02JERJCitNJzM5KTYkRFYrNDBbKTJUXzEmXVYyUzk6PkhJPiYhQFA8SCUrLjVNUjhVQUM+R1xHODcpRjojOFsgU14rCitNLCNdOzZVOE8xJiFROiU4IzI/WS0zNiFQOFZBOTZGXU07Nk0sNUYoXzI2IFInNF1XN1NZLTxEMT47RyU7CitNKzNFUzw0TFYtQ1lBOldRTjxGQUw8JkVLPVVYOC43XVAvVEVBOiYhSjs2SVs9OElXNSFMSyszRTg8N0ojCitNOEQ1LzEzXTo6JEUtOFZFOS42IiNCRkxfKzVFSzgkVUI3JlVcPzdKIz4mSTkuM1lBOFRVLTpGISkqMjRfCitNMyVaIz5HSkNARyknNUREUDhGVUI2NVlLNyY5VTxVOSU6V1VKMTUwRSNDOVI4QiheMSVJTkBWJCEtICRACitNIC9YUjYmOTsxNUE4MjU5OjYkRFk2JklaPTVYViwkRTY2Nj1LODNNKTVEVS02ViE0KzJVKTZFQTY3JERWCitNLUU0XjYnPUs2M1hQOkhJKSNARDUxN0lQMSNFOjpXPVo9N1xQNUc9UTpFOE0pNTVIMjRFSDMzOFYzJDFCCitNPkZFKTNUMSUuNUIkPkcpOzpIKiI5RylKNjVNQzZWXFsmU1lCNURFKTZDRVE8VlFBMSRPXj1YKU4vIUxWCitNOCZaIj1GWUw5R0ogPUghQyYhTTg6MzhQNkghTzZGQTo7VjldQFcgXCsyVDspNi4iQiVJJzZWJSU4Jk0pCitNLCQ1STgzXTs+R1lXN0JVKThGQUE2VFE/PEZJSkJISU82RFVGPkc9LTZHLUgzU0Q1KzVMXzhGLTs6VylCCitNOCREVjZGSUo2RUFOPTVJOTomKSk2WClSOkZBLyUxKTozMkRWLjNdOUBHSVIgOCAhNTAjXjJUXUs8JUFHCitNNjNYXzYmKT8yM10tPEctSy9DOF8yNDE7O0ZJODomQSkvRUlLO1RNODokUFk4JVxQKjIoVi43KiA2VF01CitNKjNdVTgiPDgoIlUsPVZEXy9VTVo+VylaOCNFSkJHNTkoIERALCM5NjhERD0vRl1SPTZBLTpXKU4zUzktCitNPkdZSCtUUVpARkk6PVcpLDlGVUk3Q11AMzRVTjIzOFk+R0lGNlRdSV9HLV0+ViQ4JTM9Uj5HLUMzNF1dCitNQUc5XTwjUEkuNV0wKTJdWkAmLUM4RkFAPEc5VjolWFYmIUBfPkgpOi9VIVQ2Vz1bOCJUUDg1TFYxNk1OCitNPkdAXy9URUk2RFUpLjYpODM3OiY7Vi0kNCcpVThWTVI6VDFMMjQxVTYzWSQvQ0VDPVdJUjYmQUo4VjlTCitNPkdJQjM1QS0uNi4nOUVROTgjOEAuNFUkMlQ1KTMoKUM5QCYmIDcoIF9GRSU6V0k7OkYsXi42LUI3VV04CitNMzZJVTw2ISkyNiFANkZNSzonLU81NEVBOEYtKTgnKUArNiFHLUMoRyRBTTpARkElL1NdOTtWTTg0JSEpCitNNkVRPy9DOTQ6RllOPlcpLTEnVVYzUiA4I0FAVDgmXSksI0UsPEZAWTI1SVI4UzhWNiRBOjgyVSQ+R1VOCitNNDZJUjcmKU02VF06PCVEWTlFXE0mVk1LOFZFJTZePVI6N0lKKlFUTTpGWUsyMjxQPVhJXT83TUk3QzklCitNNiJURzpGTUA8JSEkNjdBQzVDRTk7QzBAL1ZNUi4zOFk6JkIiQkZUSS1GOTovUjUvNlcpWDIzOFY4NERZCitNLlFUVi1DIUNAJlVMMSRVRjpGLVs+Vi1BPCZZVz83KF4rMkRNNicpWjxGSU88Ri1CIFcqNjpWISktQkRZCitNPkYpQjZFQSQuVEVCLjNdOTwkMF4zICojIC9ZUi40VVo7VklHLjJNOzglXUI8RklKPTc1TzVFOU86RU07CitNNkRRRjtUUTo4Vi1AN1VJTjhDRT85VDU1KzE0OzE3RU8tQlUrOCc9SzI1QUA2Vi07NjREXzI2LUQ6WCVKCitNOEQ1UkBHQUcuUUBAMSc9UjgmRU0zVjk6JlFMUDxGKD0rNV0lLURdKTE2XiI9NkExOkcpUjZUTFYvVV1GCitNNURROC1DRS04JFE4KzMjRzZWLVc9QlRUMTVNSjpUMDgqNk4iPTdVWzlGQFYvRkUpMjZFLTEnNUkvRD1LCitNO0MwOy9HXUYvVFVKOiNcViszWSg+SD1SL1RNSThENEArNDVDQSchNS1ENF8yVTRSLUMhOjxHViM5Ri1BCitNN1QxMT5HVUY3Ji1SQEdJUDJTOFwsREVLOlNETTpYQU8zMC07RURdOTg1NFYrNFVaN0RFKTEjUSQ1Q1hNCitNL0dRPykyNCE8QCYjIC9ZSzI0VVo6RyEsL0NZQDg1ITo/VjlKOlcpTzM2KVc6VkVIOVVIXzY2JTo2NilKCitNOlZdUDhVQUI2NUEtN1VZJDMnKVcyMzhWLjZNSDI0RTo4JV08OEZdQjEkVS03R0lCOkVRRj04KVo2UUwyCitNKzZdJDEmSig+Rjk/KjBYOzY2IDsrNkElN1ZAXiZUMiJCJylCMiZWKjZFUSkwRDFCOkVJKS5TWS84JUksCitNKzI3XjE2LUo6QzxfOUYtQzpUTEArNk1aPUchVzslQEkrVl1QNkZEVihGKVo7Rl07NiI0SzooNVc4NiFQCitNOkY9NSpTOF86Ryk8MTRVTzpFTFImUUBZPygxVy9TIF82JiBfKzJEXjY2OVosQ0VCPDRFJT1HVVU4JkFaCitNPygpUDEjUTkyNiVSOyVEXjlXVVo7JUktMjNcXzo2OFwmUilCO0NNNTgmJUk2RERcMjZNQEBCNC4gNFAhCitNPTAjKjMjRTo+RFVXOCNZKDZHIUIzNyVNPVZJSjhDRSU8R01RPFc9Sy9DXTY2JFU7OlUlSTZVTT46VF02CitNMyYtTztWQUY8Rik1MSM5Ozo1RUg4RFRfMTVJWj1URFYpVFVXPEZJMDM2KCM8T1k/LlNdPCkyVUM/N1VOCitNN1U1IS1GOUItQzlILCUhUi9BKEU6KClGMyNZOkJGSF4xJkEwOFZdOy1DOF84Jk1TOjRFKTY1WU4+VUlACitNOlZNUTgjOEUrNF1LPlYtKDpFRDglNFIiPFVERSZVOVY8SClfNTEoRTpXNVM2VFVMPEZNQjgzWU87VVkvCitNNjU1Oz4mJFImITRbOEdCKjozXS86Ni0pLSNRODY2LUstQkZTL0Y5OjEmSVo7RilLPEdJWjhTXFk4JUlJCitNPiYhLztHKVU9R1VSOCVBJC1HLVgyMkRLMjRUUDo2SUo+RyhZNjYtUzoyVC4gMzghPCAjXikxVUA+RkVSCitNOUVJLTYmXVcyNilSQkglWjwkNFY2RylCOkctSzM0TTgxI1kkOVNEXzEzXS07JFU2MSRFOz1XTUg3JilACitNNjNZOjo1SV87VDBNLUQxSj5GRSQoI0VKQEdNRjZGLSw2RyVXOkYtSSkzOUI+RylKMyYpSjQnKVs4JiFWCitNLjVJSDYjMEsyNylCMjQxQkBHSS8yNkE2OCcpOCkyNSQ8SEFaOEVBSV9GRTEzVik6OkZFQz1XIF4pMzk4CitNMzcpUTMmKSUnMUBWPEZJKSozOTo2VSVSQkY4OCYjRUI6NilDOlZJQzM2RFY3JkktOFY4WS1FWUksQTRFCitNNiUhWj83KUM7J0lKPEJUXjo2XUI6JiUkLjZdRDM0XU84RDFAOEVRRjYzUE01Q106PVYlQjxHOU48RzVSCitNPkc9KSZWXVc4I1lAODM4RTVGLTs+SCkpL1YpWz1YKT4oICQ7IDNcIFVRQDUtRUogPEYtJCtWMU82Qj06CitNPEdSIkBHLU0zNUFCMzRBSj1UNSk2JFVAOCYpKTEjXFYxNkFJOiVAUCs1RVI9RiE6NkVAVjE2PTlBV0k4CitNKzNdQDhGOVc4MzkpOCc1XTxFTUMyM105PEYxQj1TOFY4R0lSNkAtQ19GKUo9N0lROjJVKTI0VUEyNU1GCitNMzQ1NjpYNiI5RV05K1M5QTUyTEUsRlolPVNcXzM2WVEyMl0lOkVJOz5XSU8zViVBMTYtVzdGQFYoIiBfCitNPDZNNi0kRUktQyE5Pkc9JSghTFYzVUlSPEVZOjNWXTg1RkE4N0ctOTdFSU8vUUBWOiVJTzQlUVc7Rz1LCitNPTNYVjM2XSwtVUktLjZNSjMkMUg8IlUtMzNFLTwqOTgrM1xSLCYpRjxHNVY4VkVDNkVRWjUhKTk/NU0lCitNNlclOTI2TUgyJylTMjIgWUBIVVo3QCRSIDIgIF9CREssQ1ldQiZdJCczPUAvIiBeOEc2IkAmLTo3JylLCitNNUNMWTwmLTg2RUFLPDVAVzY2IFstRilSPkc9KSszRTk8Rk0kMTM4RS9WISU+R1VIMjYpWj1WTUs9ViklCitNMjZNUjxGKUI4VERWOEZNOTlGXS06VzU8MSYhMThXTVAzV0oiOzNcVi1DRTo2Rz1LMSJVKThWRVo9NylCCitNLCIgVi4zWTUvVyldPERFODZfWTw9Nz04LjYgUC9HKU07NklaOlNFOj1WLS0vUkRJL0YtOjUiVFk5RDBJCitNMTZJSj0jMEApMlRWOldNOzEmTVI8RFFCPCYlSzw3IUI8RjxNL1c9UjhTOFQ6Vy1MPEcpQDYlTUkyMjUvCitNL1RFQzhENEUxNiBWNUREXi43LVExIlRWL0YlSz8mWVI6JlFQOjZNVzdBQFk/VyBfMjclSTMmSU0xNkk6CitNLUEoRzhIKiJCRzwhMjAkUiAvWTk3RDUvOigpXTtVOSkvUkRJOCVJSj8oKUo2JUlSOkYpJCwlSUM4JkVLCitNOlcpQC9VQUgvQiBWO1dJWjtVQTgzNl1QNiM4OCUyNF8sJyFSOEQ1PD83KTo2R0ogNkQ1QzhGRVI6RylICitNMSU5SjlGKUg4RUlOOjRRKStUVVs8RildREdIXy5SVF4zNilSOiNYOys0RFI2WClSPEVAQClSIE03REVTCitNPzY5MDxHTzE4RVFLO1RVOCkyVSUxNSFNQCZcWTM3KUw2VURfKzM5JC9TXE0vRk04L1RFUDhGTT4sQiBLCitNLUZKIjo0RUs+RzU5OCctTDhWTUkzNSFIM1VFU0AmTSQrNFVSOlZJUjtXKVo+ViklNlREWTI2QU8hIzpLCitNNURVQjJXPiI7Q1A7LUYhTkBHOU47JjlaQCc6IDhRQDs2JkRWLCVKIDtVSUgzNUk5O0MwOylWOiI/MCVICitNIDVEIF9IIUI2NVk4OFZZWz5GKSkoIUFKPDY5Tj5GKUs8JVFKOkZFNS40VSk2RklKPEZdOTI1SSQqMU0sCitNPEc1UjglQSk8J0lXMSFAOCZSIDs7JV0pL1VKIjwjMF88SClSNkYpQzZEQTw8R0lANUYpSzZUVUg2JDUtCitNL0NQQi1GXTA3R1YsQEU4Xis0MTs7VylPMTJUUi5SNFY+RlVLOiJENSYiIFs2JkFSMSQlVUJPWiA2U106CitNOEchJS1DUFQyNilGPEVBTDtGTUE4JiUrODRFKTUiID0xNikpLCcpXzpWRTUqUlUpOFdJWj4nTVs8JEUtCitNPFZNSTQ0VTksIyE4O1c5WzxGQTUtVF1BMSYpRD5INiM8RUlDODM4UDo1REIqMzkpMzQxSDo3LV0+ViQ4CitNJTM9Uj5HLUMzNF1dQUc5XTwjUEkuNV0wKTJdWkAmLUM2VilBPzghPi1ENiI9VzQhOyAlSyAvWiIzM0VACitNMTVBLDwnTUs1IiAyOFdJSzpXPUI6RkUsNicpWjojWE0pMjReOEcpVzpGJS8vRDBbMjVJSjxGSF4sJioiCitNPkZAXy4yNEAoJkFHMSNdOj5HKF4uNi1OPEYhQjpWIFYvVUVLOiRVOT5GPSU4RUheKzFMQCUzOS0rMj1KCitNQEdRLS1CVFsuNk1LPEcpNjI0REkpN0lSOUZNNSUxNEAsREVANkM5QUBYI15ERzxQLCNdSzYzOSUvVUlPCitNMyVFQj5GWTA6RyU7OEdJQjhWMFQnMzlPMzM5T0AmWUM6NEUkL1UhQzxHNiI8RUEpMzZNWzpVQF81MyBFCitNNiZZVjxGSUs2RUFBMTI9ODQmWiBBR1VGOFYkXyk1XTwpMUxNPVZBLTZVTVI6N0lKKlFUTTpGWUsyMjxQCitNPVhJXT83TUk3QzklNiJURzpGTUA8Jj0wOldJXUAmRS9ARUlCIDcoIT5AI15AVERHNjM5KS42RVA4RTRACitNKTVJWj5GKUo6Rik4KzM5QjknWTstIkQ4KCQ1QzxGXTsyUlUpOjZBQDo3SVoxIj06QEgpWjokREUrNDVICitNNjUwVjI2QUszNUVCPEcpSDo2OUo2JEUkMTRUWTdXKVouNUU7OCMoLiNBQFQyMlQ7MzdKIjYyVFsuUUxZCitNMzYqIDpFRUArMU1SPEZNTzozODUmIlUpNiREQjhIQU5fRzIjOFNMRTgjXFY1NiFJPEY4XzEnPUsxJVFJCitNKzMhVz8lTTgtQk0rPVVAWTxXST42RUlIPDRFJTo3KU4/Ny0lNjNFKD83LVA4M1hAJlRFWkBXKTs3VDU7CitNPiYgWTYmKTs9N0FdPUcpSzZVQS03Izg7KTVJUjlFSFA2Vi1XPUJUVDE1TUo6VDA4KjZOIj03VVs5RkBWCitNL0ZFKTI2RS0xJzYoOjc9SzxHKUkvKCg7KVAlRiA4LCBQR00pKTREXCsxTS04I0RWKCI1ODxIKU86Rik2CitNLjM4Vi9DPVI4VTEkLCIgTTEmLUg1QlQ4LUZdUDg2LVRARUBJMScqKUBHTVIrMyFGPCVJLTU0RSk4NF1ACitNNkAtUl9GRTs6RylCN1NYVis0XU5ARilSOkYtPixBQFI4NkE1KjQ1Sz8mTFAuMzxJKTI9LT5GTU07U1xACitNMTchUjpXKTwqMiBUNTYkViRDRUo+R1YmPEVAUjgjXFw3Vi1TPFZFKTgnUVM6RilAKTFBLEImJSUoIUxZCitNQVYgUDpHKUE2RDU7QDRcWTpXKVNBWC1CN1M9KTwmOVA4MkQuI0JVQj5HSUM4JDVDQEZNLzhbTVI5RS08CitNQEdBWjsmWVI2RUkpNTRFODhGXUkpNDVDOkZIVy9WOUM4Vk0rKCJVSz5HOVA9VlE4KjJdTzwlSUktQilCCitNQkdJSzgmRUs4IzguI0AkUCA2KCBfQzlaQCYhOSsyPFY4NDBJKCJFODxHSVo8RFxfLjVBRjdEXVU4RV04CitNMSMoUiwlOUI4Q1xAKzZBTzY1OUo+RkhZKzRVWj83SVovUlU6PkZNOjhFQF8yNDEtL1YpSzxGQUg4VylECitNNlYwXy8kRUY/JD1LPTY5UjIxTFI6SClPL0M5QjkoIUY4JDBfNTIpJTxFUUZARixbKzRFRjxGTUgtQjU+CitNPzYtOSpTWUNCT1otQkdNTDM2KTgxNkU7OlglLy42KiM9R01JNiM4XDZYLVAtQUA4LUgpSy9WJUg2RFE/CitNOFZNOC9WTUo5SEovPEZEXzgmJSg8NiRJJTFATTM2SUs6VkBZMzdNUDYkVUo5RiEtPTc1UzZXSiM4VU1BCitNNlZNUzZGLUkyNUU+O0dNOjgmTUs8NiBWKTJVLzpXTUMyJkk5JiE1LEBHLTkpMU02PTc5RyxCNEApM1oiCitNPVU0IiUwI14yNklbQCZZUjokNUAxI0xSKzU5QjxHKiA2VV1IODZRVzo2PSU6Rz04NiRFJDNWKUo6JVhfCitNOCZFOTZGSVo9NkEkL1YpVTpGOUExNUVWPUZNQzhWJS0xIzhNM1YpTjE1TVJAJilCM1U5KTYmTUoxJFUtCitNNyZIViUyNSw5JihWKTYuIkBHVV07Nkk1JTM5UjlVIVo8RUhfNUYhSjtVODIlNUonOichOTI2KiNfSDYmCitNPzglQTZWRTs7JFVGQFRMVjpILU4/Ny04MjVJVz5XISkqUkUpOlZNOzg0VUAxNilKOkREVDhWQS8+SFVWCitNOiNFLDEjIUk4VDBAKCNdSTxUVSg8VjklOFc9KSwkUTs8R0lWPTZJLDtISVc4VU1COlcpQDZGKUk6NSUvCitNOEVJSjo2LVc8I1hFLUVBLTxHJSw4RDQ9JiM5UjpEREktRUk8NlZdKS4yPDgrOClPOzAkLiAyRCBfREU5CitNOSc9MDlIIUI2JDBSLEQxKTM2XUs6RDEwO1YpOTtXKUArNkFSOFU4XzElRTo2NTk4L1Q0XzE2IUs8Rz1CCitNMTRdTzxXITo2NEUtPEc9QjdGSU86JFRWKTRFTzgzRFA6J01SNyVdSDYmTVs+RylQMzYpSjUyNE02JV0kCitNJlFNOT5HViU/JklLL1FASTwnSUY8Vz1CM1ZBPzcmPFkmIERHPEZJTjo2IS05SCVaIFdXXDxGJTs2VyFTCitNPkc9KTY3SiI7R1FWOCVZOTpHKU40JUBcMjYpOjZFQFk2JiVCOUchKyc0VUguNjoxQEYgTSs1NSk4Nk1GCitNLUIgVjhXPFYpNUlPNlVNUDYjIF41RklaPkY4Xic1SjJARyFBNUchSTI0NSUzNllRMjJdJTpFSTs+V0lPCitNM1YlQTE2LVc3RkBWKCIgXzw2TTYtJEVJM1M5SywkMTopMzlXQFAkTSAyPCBMNEUtNkZFJDInSVI6VERNCitNKzRFPjEmLVczNEUtNkYpOTZXKVArNUVXOlVcVis0RT8vU1kpNiVAUihFXUM6V0k7LUREIzxMTUgyM1hWCitNOlcpRzZGKVI8RiBNJiM9SDI0QDsvRklCL1YpSjY3KiU/NzohOlYpQjo0RTg5VyEpJiFAVjo2OV1ARkkvCitNJlBYOzgoKVU9VylPNkVJLzhFQE0uUkQ7MTYtQjZVQF80NywjPzshWjpEXSw7V0lfOCJUWzdIKV07Rk1CCitNNlVZOjpGUTs4JUkvNiRFLTgjWF42VylMOUU0NSs1UFk2SC4qPCI0OzJXICM9XEVDLyM9Qz5FRFQvRFU7CitNOjZdQTIzOTY2Rk1LMSJURTVJKipARkEpNyYtKS9ERTs3JzVXNiNFQCwjWVI7NlVKPkZMWTZHPUMzM1xJCitNKjNZQzZFME0uNjlBMSZdJS1DTDsmVFIiIDZAIS9AI146JFVDPCRFJTpXNic5UjRJNSVBJTZHMSQyJkE7CitNN0YhJTdHVSkzN11SOkVFJDVEVSkuU1kpOCNcRTg2UVo+RihWL1VRWzxGSTgrMU1DPEcpSzxHSVU8JDBNCitNL1VQWzUjOE0yM0RNMzYpOzkoSiQ1JzVSOEZNSzZGPVc7VERFKCJVODY2OVU+RURJI0BYXkBHVVo8RSEsCitNLjMhSDgjKF81Q1hWNkVETS1FQUBFRFU+PTdWIz01TSQ4NzFML0I0SSwnNiI4Ji1JMTY4JDpZRVE8RkxZCitNL1VBTi9CVF82Rk0oNTMwVC9TOSU5RyFXKTFNKyBXKyo6NiU2LjYuI0A3IT8vRFVVPkZJOyo0RTo2JjhJCitNKCVFSj84NjI+RkVHOUYpJTZHTUI3Jk1PMzVARSs0NSU0JlYgO1NFLTxGUTs2M1xNLUQwXy9SVF46Vz04CitNOSY9OC5SIDsrNkAhPVAlPCArRTosI0VIL0NFRz5ILVcyNEVAN1Q1LTolRTk6JkFDOCRFLzxGSSw6Vk1DCitNOFZBRzdUVF4vRTlAL1MhSTwnKUo2JEReMTcpVTxFQEUmJUAjOk89Wj5HOiM8RV0/MjRFOjs1XF4rMlUlCitNNkQ9Qj84RTo0JklSPEZJLDY3KUs2IzhJLURFOTo2OUo6M1A4JiI1QjxHKUs2RUBNKTVBPzEjXUY3QzkkCitNKzBYQDE1QE0sJU1LPzgpWzhURUEyUUw4KjNdWDs1SUY7MlUpPFctTDo2TU47IzhWMjchOC9TOSU2RDU4CitNOUZFJC1ENUI4VFRFJlNdUzdALTtSJiBWLUY6JD5XPUE2VzVbOFVITTM2KTYyMSg4MzcpRj05Kio8Rk1OCitNPlYlJUJIITsvVUlCPCQ0Vi8jMSk4RjlSNiZRTjpWJUA4NE1BMjRFNCghVSU+JilCN1VBKS1CREkuMCVICitNIDVIIFclOFYrNERNKzRFUkBXSTA4NiVCOCVFQDgmLVI4RkFAKzJVOz9XKUg4JF04OFZJSDZERSk2Jl0tCitNKzQ1QjxGQS0yNEUtOFZJSDUiVC4yNTlCOlcpWj5YKiI6ViEpMjVJSj5FOFYvVEUlMzVJUj5GIF41RklUCitNPERVODpGTTogVEdeNyRdOzZFUUg2IzhSL0NZQjpGISkyNDBeNiU4Xi1FOTY2JTRUI0FMTTYkJEUrMyFLCitNQkkpWzg2IF8mITQ1KzclOjMmOVcyM1lJPkcpTzxFUUMuUlRWOFZFTjg2LTovU0U6OkVEXzo3SVctQjRJCitNL1UkWSlTOUM8JERALCcpQjlGXUM7R0lbPVNZQjtVOEklMiEkPEVFOj5HVVI6RlolPVNeIERHPFAtREVACitNSDVAVjEzXTo7VFE5OEdJTjQmSVE2VilaOEYtRC0hVFY9Vl06MzRFJTEjXFYrMCRfIDVAIF9CPSc0JDE2CitNMzRVOjpHVVo6Q0U4OEZJOi42SVU7RUBJKCJVR0JHOUw6M1hFL0ZdQjVGQUs8RklANiVNTTxGTTs1RUFBCitNPVZNQC9TOF84JiFXPkc1UjxGRUAzNiE6NiVJSjxGSU84JF0tNlZNUjxFQS01M11APEZZUzZURF84JylPCitNNjJUSS41SVU8RkU7OFZRSzYjXFYvVFU7PCVESyk2RUE2NkErLSJNKzo/WUkvIUAuL1gqLUBHKUc2Mkw4CitNI0IhOzwmQTg6ViRfMzclWj5IKVs2VDBSLUVBSjtXIVI8JiUkOFcpODNXKiZAI1xWMjclQS1BQDs4JlEkCitNKCMpSTgjXTozNDExO0gsWThHKUMsQiBZMzdJRjg2RU45VD1SQkcpNTtHMiM4U1xZNiREXDU2IUk6ViRfCitNMzZNSzMlUUkrMyFIPCYhOC1CTSk6VkReLUMoTS9GSiI7UzgiL1AjXjYlQSktRDEtMzZFUj03SUstQ1k4CitNNDVAXjpHSUYzMzBcLVQ1Wj5GWUMsQUxAOFVNJThGSUo7RlFDO1ZVTjslRSk7VylKO0VJKS9TWSk2RyoiCitNQEc1SzxWTUA2RiFCOCZBTThXKVI2VDVDPldJUjYzRT41NiFTPEcpOykyNUA9RylDMSIgRTI2TVo9VSFDCitNPzc1STEiRDstRkFQOjNcRTE2ITg6ViBWKzQ1Ul9IITUjQFhfPTdVVTw2QUYvUkw4KjRFRjtVRFkxNUBeCitNNkY5Uj1ISVA3Q1xWMjYpSjxHLVo9VUFKOlVJSDhXNiMzVUU/PlcxJCoyVTs6I1xALEVJVzZVTT4tQyEoCitNOUVBOjpGUS8tRDEpPFctQjZGUF4mVDFdOkVBWj84OVI2I104MlNRPzg2RUk2M104OjYtQjhGIEUrNFVLCitNODRMQC1EVUs6I1xFKjJETTMoKUMzMCUvIDYkIF9GLUMxIzhWL1RNSDxGOUhAJTRNL0M5JDomOVU4QjxFCitNODZFODZHNVo6IzhAKVNNODtHIUozVUlCOldJTjpGRF4tRylSNjQ8XzYjTEUqMzk6PkdVVTpGWUs4RUlACitNOFZJSzpGKTE+RzA7MjcpUjpHNSUxNUlQPFc5VzgjMEA2Rlk7M1VARSZTXUE2VUxHMSdJVjxGRF8mIkVBCitNOiVZRzEjXF8rOC1MMjI0UDpfWVsvIFguNUc1WztGUUg8NjkkKjJNODhWLVApMVUkMjRFQjolIU47JiUpCitNL1VFOjhHQU4+SD1QOyZRLzomUVc/RU1BLjVNVzo0TUE8Jz05KjM5JTxHKUM6NVk1MjYhUDtVSS0zNUlKCitNNkZJSjEzOS8vU00pOFY9OzxHKUszJF02OiZZUjtVQTUtQiA7L1VBOjhGQTYvQ1kpMjVNSjwmTTs2ViBSCitNKTNNKThWQiI5RFwhNUAlSSArPUM4RUheKzIoWzwlWUM2VzlDLCM4QCZVQVo6U0Q1KTZFTTpEXS9AJlk4CitNLlMoTSwmXiI+RiktMjRBWj5WITspMiE5OlVBKS9DXFYgUiIoKzVRUjtGSUo7RkgjOE9ZRj5GVUs4VylXCitNKzRNOjNVJVY8JiVAM1ZJRjxGLT4vViVLMTRdSTEjXUI8RylGLUNNMDxHLiA7IyhFOCVJODomRUk2I14jCitNOlREOy9HQVoyMUA4MSZJWjpVQSU4R0E6LlNdODhWJUs3RTUrOCYhKDtVQF8zNiRcKjZFRjdFSUZAV1VOCitNOFc9SjhFRUtARi1GLEM5Njo2RiE8RylJMjVBKzhIIUw4VilJOFcmWzpWWVMyMj02PkZJNjZUMEUtRiFJCitNOjVdQjhHKVI7VUUtNlcpRjlGXSw4I1A4I0JFKTYmKU82ViEpL1NZLTxHOVI4RF1LNkIgVjM2UVI6RkAhCitNOlAlUiAvWUszJilNJEEoVjVEQUE2VjlXL0JUSSYiVU46MjQuKTZBTjcmTUs+RylCMjJUTTElRV1ARyk/CitNNiU5Sj5WTTYuVDE5OiVJLTYlRSktQ1BcLENZQjtVRTw+RklLOlYhLTpEUTk+Vz1aMzYhQTM0NTo7VylXCitNODZFOjZGKUI7Jk1INiVFUDg0XUI+RzYgPEZFJThFWU46RjhfNkYtSTpWWVM8JiIiOlQwODI4L15CRyU4CitNMTRFPz5WUSQmUyFTPCVFKywlTVc6VkVROCRVRjI0VUgvUzkkKTJVOTY1QF82VylLOiYlSj5HIFAuNy1XCitNPCRMTS41QTs5VylDM1VNSS9WKVo8RUheMyVZUjM1IiI5UjU1PVchJTY1QFwyNUFJPEYpMDhGSVI7VUEtCitNOkcpUjpHITY6RlRfJzIhKTZWWVo8Rl1JMjQxOD1XKVI6VUlDOiRNNTElTUNARDUwIDdIIT0wIlQ5VDFKCitNQFFMMjEkVSQ4Rk08OlYtODUjME04JVxNKCM5TDxGKU89R0lNOERESyhFOF84RilDNjVdVT1HNUo1Q1kpCitNL0ZFRzMwMUBfRkFJPTVdLzgzOFI9VikvMyVBJTYjOF47RylSOUZJVzpEVFYsJioiQEctOTE1QT48Ryk6CitNMjRVUjslRUM8Ri1SOzc1Uj1WLS82RjlLPCVNPjpWTUo3RjlfNlQwSSlWKihAWCogM1RBUjwjKDInNUVKCitNOFVZJC9GKUI9Vl02MjVJOC40RUA4MyhAKzVFOC9TXTg4IzklOVVJUjwjUEUxWC1SPCRMVjYnIUM4PEFBCitNMjUhRi9VSUI1Q0RJKjRdOzM1TVo9UzhHOCYsUDJVXTk2QzkvPEY9JS9UPUI7VkE6OlcpWjxGTUo7VylACitNL1JVJDYnJVo7VVlLMzRFQjZWWUs6RUlCNCYpVzhGJSkmUVQhOiAlRiAsIUIzJloxKTFBNTZVSUg8Ri0xCitNOEYpOjYkTSQvUzhZM1cpVTxHKUo7NkkpKzJMODI2ITguMzhQNkcpXUBWQSUsIlRNOFc9STY1TUA6RyohCitNPlZNLzYjKE0gVyszODRVLTYjWF86Ji1COzZNVT5GKFIlMl1XQidJLy41SSw7Vk1BMTNZSThVQUg+Rk06CitNMiZJWkBXJSU2Nk1NPERdLzZGXUMzVSVKNiM5JCoyPS08SEoqOyUlSjpSVEcpMzhQMjVJJCkyNE07RylDCitNODYsIzY+NUg9UyhALSYhSDgkRTgvUUBFMlVFUDpVQEUtRy1TPlcgXzVHKVw6NFU6MzQ0Xzo2IF4pMTRJCitNMjVAXjEmSVo8RDEpLjM5ODolSTgvVEVKOFRFJC40MUc6Ri1HOkZNUjxGTUs8Rik2L0VBQDpHKUczNUlACitNMzYlKTZHKUczVkUpNDc5XTxGJEkmUCU5IDZIIEIlSFA2SEk4LCVBQyEmT144NUEwMzVBSCoxTEkxJiFKCitNO0gpVTxGLVAxIUxSKTNZTTYjMEkqM1k5OUdJPy9EMEkoI1lDPkUhOTZVSU5ARzVCMzVAXzI3SVpAVyEtCitNODVNJS9WITguNilGPlhBQykwRDI2SC1XOCNEXi5WKTo4NFUvM1Q0XjZHTUw4Vi1IPkhJTCwkQVo9NyklCitNL1RFQzhGLUM6NiRNMSM4SS1EVVVCR0kvNCctODdFWTVdIkRNNSNMOCZSVTk8Rk1aQDYkXy42KTAuUkRWCitNMjZJUjhWISQrM1E1Oic9UjdCNFc6VyldPEYlQzZWOVs4RUxfKzMhTzs0REkmIjUkMjJUOy9GWiI/VTA9CitNLyRFQjcmJFwtQ106NkYhSDw2OU5ARyEpMTc+IDxEXSUzNUFCOlc9VzpFSFArViE7NkM4WTZFSFk8NF0tCitNOEdJVTxGJFYgNiQhPEAjXjojXTs7RylBMzYpUjpFIUM8Ryk7MjRdPy4xKDIpNEVDPEhKIj5GTUg3Q0xWCitNODYhSDIzMFQvJUE5OFZNKSszOTsoIShWOiVJODZFTU4+Vyk7MzVAVjYmWVVCJihUOFchODI0XF4pMyBfCitNQCklUCowWDgyNylGOlYkXi9WQTk4VlFBMlQwVi1WPUE4Jk1aPTgtQy1ENVtARz1AL1NFKTg3KVo2RkRWCitNL1NYTV9DOS04RzoiNlRVTDwlTUE6NVEpODNcUiszOSk2Ri1aQEchODI2VS0rM00kMTVJSzxXKTkvVUE4CitNOFchUzhTOTU3R0oiOlVNUTZUMVJCJ0lBL1M5STo0RFIqMlRfODJMQCk2KiU/NkBNLUVNSjxETFcvJE05CitNMSQxSzxWKT4+Vz1BNicqIz02JF4vRUE6O0c9UjpGIEkkQ10vNiNYXzI0MEc4VkU4NiUhRj5IKVczMCU6CitNIDcsIF9GTTs4VklaOlU5Qj5GTTo4VylWPiYhLTMlNDgjQFhJMjdKMkEnNVI6RUEpMjhCIzxEVFIrM1lJCitNO1YpSDUiRDI2IkQuJEJVKTVFXUg8V0lSOiYpQi1DRSU5SC1ALCYpUjpWUUgyMygpJlZKKT5ERFQrNUFLCitNN0cpUy9ERVA4Ri1LODNdOTdDWTkxNUFCPVVRWjw0NTg8R01aPFQwTTElRVI/NzVGOFZBJTE5XUA6Vik+CitNMTFVLDpHKVAxIUxFOEdJQjQ1QTgvQVU4ODQ0XywmLTAuMlUpIFYiSzZWKVI8RllLOyZFNS8iVS09N1VTCitNOFZRUzhVTUI6NlFWPTZVQzZDWFY2JkFAMzVdSjZFTFkyN1IiOzAtUkwnTSQrNTVAN0NcXjhXSVA2VylSCitNOFYtSz5XKUIvVUFBMzZJUDxFITgsQUBFMjYtSDlVOSQuVU1GOkYtJDQnKVU4UCVLIDcoIF9GLTA2RVlcCitNPVQ9Qj5GTTg4RylVPkZdLTglQDsiMFg4LUZOKkJGVT4zMzhWMShKJUBGXTQrMlUsO1RQVzVFID0yNDBQCitNJTFAWzEmIVA4VylSO1ZNSzYiVDsvV0FQLjYpVTknKVIzIygpJiVGIj1VTT42JDUpLCYhTy41QUE6NkVCCitNNiMhOjojXUEyNFU5NyRVUj4lTTk4VlFaOkQwSS1DOUM/NyU7M1YgVi9aIVo7RkFDNjI0TTI1Wig7Q0xSCitNNlc1UjpWLU8tQlUpNiQ1NC9FQFYoIU0lNlAtOFBEUS02Vi1DOjYtOTI2IVE6V0lSN0cpSzZURS84Nj1SCitNPTY5QTgjXSk9WC1KOUchUjYjOEUvV04iO0c1UjpGIT4pNClANiREXzMnNU42Ri1AMSZNQzxGSU84IC1DCitNRidJUz5GQUAyMzBJNiVJUjtWIS06JkVDOkZRJDM2OUo4UClbIC9ZRjMzTS09R1UkMzVJLC0mIUo7Ny1VCitNNCZJUCxBNC4nM1FPQEhVWjEyVEkrNEVaPigpVTxFWSkzVk0pKTM5NjElOUk4MiA4LENRJTo0VTs8RilCCitNN0YgQCYiNS04VUFOOkRdRkBFTFYmIiFAPkc9JC43IUktQShWOCM5LzE1QUkzNDA7L1VYRy9UMSw5VDEpCitNOycpQzIyPF88RkxQKzQwVi9XPVI2RU1GKzRHXj1VMVc+RjhNKCI1Oj5XTUgyNUlSOjc+ID1WISUzVUkpCitNOEZBRiswWDgvVFUlL0RVKS1DXTg4JUk6NiRFQD5GKUs8RylOOERFJTI0MSk4ViktOFYtODhIKjE8RlIhCitNPyYkSSgiVUo+Rz1aNlNYUDgiREsvU1hfLUNFSjxUUTg6JF1AODZFSThGKUguNFYiPkZJQjhFOF4xJERZCitNOjZdJDE2KUs2RVFGOFYlP0BEMTEgN0ghPzAjXj03KTgxNklaOiRFKSsxQF41NFVbQCUhLDxENFAlMiBSCitNMydJVj5GJFIoIUxWOlc5VjpGOVI+SCogOkQ1OzIzRSk6JlxQKVJFODYlSUA4VlVKNiVNOzEmWUYpMjVCCitNQkcoXzpINVo8IzhNNjdJWzgiNFA8JlQ7LUZBQDgzOS88Rik+KjNZUTUyRE0yNyE7NjRdQjpGRFwsRFFCCitNMjM5JDJTOSk4Vi1CPCREXl0mRSg8SClYN0MgRThWVUs6I0UtOjRBOT84KVI7RUUvM1ZBSzhTMC4oJEUtCitNMjRFODY1SUI2IzhFL0VJQDZWIF4sJjojO0clSTI0NSQtRU1GLjRdSTg1SUJARyk0O0ZZQisxTEIzNklKCitNPyZdRjZUXFIqVDErNTM5KThXKSUvRjlXODVBOzxGTUIvUUBFO1cpSDYkUTgvRDEpKEYhSyBVQik3JikoCitNLENFQjw0RSUgNzghPzAjXjtHSVo6JU1GO1MgVjEzRFYxI0VSQkdJOjpFOTUrM1FBOFcpSjtGIFYqMkRcCitNM1chTjsmKUQ/OEYqPEVJQzgzOFA6NURCKjFNKTgkNTY6VlVCN1VYVi43TUImUTRXPTZdJzomQVU/NERNCitNMzVRVkAyVDIrNUBJJlU5QzlCPTk+JklQL1MhUzsyNFY2NDBQOEclRjtHSUo2VEUnOiYlODJURS8yNDUkCitNPEZdL19GIUg6VllTNlNMXjhXKUs4U1BZODYlOjpXSiM+JkExPCc9UjlVNDUpNFU6LjRFOzZWKVY9UlRACitNLUVBQDZFQF4mVDFLMzcqIDo2JUAxNUFQNjRVQjhVTF85SC1LOFYpUDdDKFI9JFEkOEdNWkAmLTUtRDVBCitNODVBQTo3ITUtRUlLOFVBJThXLU8tQUBFODZdSjglSTkzNV0pKTZFUzw2KTg5RyUvLUJEXjlIKToxICVKCitNIDdIIF9GMUY7RlVSNlVARSUyVFwvU1hZPCg6KDpVSTo5Q1kkO0dJSjo3KUEvUlRfODQ1STcmSUs0JlogCitNQUdVRjhWJF8pNV08KTJMQCszRTUzNklSOlVZKSZSVUMtQEQuJzZJWjhXISQ2OEErLyVNOjwoKUEuMiBFCitNLyFARTYmODUvRy0nN1VFKTxHKE0vVkRbJTJNUDtHNio7Ri1QOlZRTzokVSc2NERWLCZNVzZPWS06RlFDCitNNjVYUC1EPUY8RyEpLCVJQzo2LUtASDFOMzYpSzxGTUYxJEVQOkMoVjYmLTo7N1k8KjMpKTYkVSk5QlRFCitNL1NZQzxXLUw4RFVIOFVBODpGOUArNkomPFYtJTpGKSkuVkksNiZGIj5ILT44RlReLUQ1OTZWRUs4JF1DCitNOkYpSS9URUM8VkUlMSYtUDomXVI6JUlHNkU1QjxHSUoxJjoiOFYlJC42XiI5JFQhM1AlTyAvWVo4RVE7CitNOlZFNi9BNEApNTRWLyZBXT82SSUyVUFAMTVGKDZVRVc6M1xNNichLThUUUJAJik7PTdBXT1HKUs2VUEtCitNNyM5JC9TMDsvViFCPEZdQDJRTF86JDBHJzFNQkJHVVs4NUIiL1M5QTwnSio+RiBNKzQ0QCUyVFYiMjVACitNL0MgWTgmWVo2VyFLNTMwXzZUXUZAVk0vPkhBWztHKTkyNUU0KTE1LTxGL144Nk1DOlYtSzY0TFYxNilaCitNNlI0XzpWTUk4Vy4qPzZNOjMlTVA4VFE2PEZNODEkUUA2Ni1SPVNcXzE1OF8vRl1NLEI0XzY2LUY8VVFDCitNOiNFJDYmKU46IlUsPEc9Sis0RTY1REU6N1ZBSzxHSigwNFVaO0JUTS1ENUk6NFU4OjZNUzxERTQ2VVlTCitNOlU5KDwkVVA9VylLOkY5Qy4zXU4+VVFCPTVROjMzRUtARkksIDQwITpQI15AVyknNkclQzhGJFIlMUBWCitNL0NZRj83NUsrMlRWPCZBLT1VTUk9ViRfLURRQjZFQFAsRz1SOUUtPEBHQVo7JllSNkVJKTMlRT4pMlU1CitNMzYhVzZUUF44KCIgOlI0KS1HSV09RylCQFVEUC42SVo/OElLL0VFQS0iREslMFg7OCVAVis2IVc9VUlSCitNOiYhQDg2TTs2RllJLCYuKkFHSUo4I1klL0FALis1XTBfRSFKOUdBUjw3PVM4JTU5OlVcTS9WLTw7VyFGCitNPzgpVTxFSSk4RkxfMSZRSzYlQS0uNFU6OEctSDNURSk2RkIjQVZETS9UNTo5R0lCOEY8TShDOF89VykrCitNMTYpTjxFQFYxJDEpMTYtTzpERT4+VUVNPkZVOzEjOF86JUBNKzNFPEBILSwxNiUlOFZFODVFRSk4JklSCitNPTcpTzhBTDIuN0lXO0cpQjNTXSk4WClCMTAkRSA0NCBfR0lbMTU5QzE1SVI7U1xZKTJVJDhXNUg8QkQ1CitNJlVBSztXKSg5VlElL0YtSTZDRSktRDVKOkY5QDM3NVU8VU1aQFYtOzg1QUA6M1BJLUU1JDhFTF44NlFOCitNPyc8XCgiVTo+R0lGOEc9UTM1MUw+VyoiPlYtRjo1WSk0JCRALEVBQDEjOS05RylCMzVFOTYkVVo8RUk6CitNODI9Oj84PVo5Ri04MjNcNSIxQF8yWkRWLVVJWjcmLVs7Rl1AOCVJLTY2JUM2Vi1MOldVUj5HOVA2VilKCitNN0VdWjpUXTgzM0UkOCYhOjYgLF9VJi1SQkdVUjo1TF8zNi1aPkVRODUzKDspVk1SN0NFJDhGTUMyU1k0CitNL1I8VjQmUTUzNihZPEhJRjZVRFY6OCE1JlFASS1GOig6JF06MTVFQDE0UFk1RTk7OUdJWjxGIDslMU07CitNO0Y5TTpFTSk6VyFKL0AkOyAyPCBfSCIqOkYtOTZGRVI5RUFAKzJVJTpXTVI8Q1xJJiMpKD5HNUI8RixZCitNNTY6IT1TOFY4Jz1QMyVNUj5HOVU6RFFOQkc9QzZUUUg6VTRbKzVBQTM0REIvVl1SOUc9Ly1ETS07OC1SCitNOUZVVzMzRUk8Rk1DOUc9TzhGLTk2VjhFNTVNKTI2IU88Jz1ILUNcVisyPUs8RlFUPCQxSz84SVs4VU1JCitNODRESSIwWE0xP1hAJlU5Si9VSiE8RkFCOCVNKTZGJUM8NU1BOUcpUj1HNVI8Rl1EMjZeIjxGQS0yM10pCitNMzYkXy1DOFsrNklGQEdJQzpGLTU2VVlOQjZBODZWOEkmVDVCPDRFKTImQTs4I0RFKzNQOy1GRUk6RUBCCitNNkgtTDMzOEU4SC1PLyIgUjUzOUtCJl1BMjVdSDZEVSUyNTkoNkc1Wj1URSQsQU0pPCYtUjlDXS0+SCoiCitNOlVYITEgJTQgL1ldQkdVTDQmPVI8RVk5LjM5JC1DRVA7Rk1IOjRMTSwmTiE4VjlAKVRFKTInKE0nNUlaCitNNiNFNjpHSVo5Q1g9NkkqIjwmJSk2RikrL0VFSTZHKVIxIjVCPlcpUjMzOF8rMl1KPEVRQDxGUUA6JUlDCitNNiNFOjo1QF8vRUlJKjRFNCgiKUg+RylbPEYtSDUxQDgyNiksOFVROjxYKiU/Nk1IOkchQjdDIDgoIkdeCitNKCIhKThSVFA9Vik6MzRFOTE1SVE8RVlDOCVJSzhEQV0+VklfPVM5Sz83NVo5QzhWNiZJSDZERSk2IzlKCitNOzc1WztUXFY2JiVQOycpOi9URUk6NExeNkZNQDglTUEvVkE0KjJVQCxCNU02NjlRMjYuIzpVRFYvJU1aCitNPFY4XDI1QFYvV0lONlYlSDwmXUg2JTlANiRVSj83ITQ4NkRHK1ZBOzdHLTszVyonQEchLCA2QCE6QCNeCitNOlgpXDpGJTo6R0lSOiI8Vj0kMDstRi06PFZZSC9SNTo+Vk1LOVI0VjUjXTYmUUBQN1QoTTYlSUs6VDBNCitNKTU6MkJIKUg2JERfKzM5UDwjRUhCRkA1L0ZJPDtVQF41MiBAMSVAWTYnKVo+VylCOyYpQDdWLTotQlUpCitNODNdKS1AWDUsJDUsNCYxVT03PEkjQiheNSNcRylVSVo9NzVGOlZNTj5GTT4uUiBFX0NQVjZXJFwpNUEtCitNOiRFJC8iNStAV10vLjRVQjwmIEc8Ry1DPEctJTsnNVI7VkBWKzNFSjs0UT4yNEVGOFVRMDpGPF4pM1kvCitNOyZRQzIzOFYzNzlXMzRVSjZHIUA4VTVCNUM4TTM0MFI6JE0lPlclTEBXKToyNEReNkc1WjxHJUAxI11GCitNOURdQThXLVM7JkU2OFYgWTQmSUg3RUE4NTM5QDM0NVI8RilGPTgqIjhQKS0gL1klOldJVTpVTTg5KClPCitNKTJVUTozTEUyNDVLOkZNQCxFOVI4RU1LMjRFQTNURF4xI1hZLUFVKTZFQUYqMiE5OkdWJURHSSktQiA4CitNKTcpVzYlTio9UkRfODRRSzs1QUEvI1E4NiM4UDcnSio+R0lXOlcpVztWKSsvIlUlMjVBNS4zKFYqMiheCitNMSVJTkBWJFQoIjU4MjFMODE3PU46RVkvOiY5VTtWRTQuUzteMjNZQT5GQFstREVXOCNMQCUyVU8+VURACitNKzYhUzojXUg6VilKOlYlSjdVIUc1QzBFJzUsXi9ERF4tRiFINUMxLTIzIFwxJUlTPEYpNjUzWSU6WC1LCitNNUYhJTpWTS89Nkk1LlI1JSwjXVoyU11SPkcpXTxWLUEuUUxFOkgpXUBGLUY7Vk06N0YlQzxXNUs4VDFCCitNPCRRJTZVRT4vUlRfLVJUWTpXITUuVF1GQEdSIyA1TCEuMCNeKzVBTj5GVUs4RF1NPCNcTThIIVAvQ1kpCitNN1VJOTYzOS08Vl08OERRQz0kUSQ4Rk05KzNQTTM2KTYyMSg4MzcpRj05Kio5UkQuI0E1MEBHKUI9OCFBCitNOFVMTzNWSUs4U0U4OyYgXCZTIVNAVllWPkZRUj5HSVI6NDRFKzQxQDw3IUEvUlRJLUNEXzY3SVJAJTRSCitNNiY5OzElRVo8Rkk5LUVBTzkmOU83RV0rX0VAWTM3RVIyMjUkPlZAUiUxQE04NlxcI0FMXjpXKVc+VylKCitNOEVZQTpERFA6VUE4NSNMWykyVSQuUzktOlVdJTYzXEcsJEUvOyctQC1URSkyVi4jQEZJQzg2WVs2VylLCitNNkQwQDIzKFY9Nik7OjYhSj5HVVE6NDRLKTRVUj5HKUM7Jy1DNlYpSTsnOVU7NixHMScpPzZGJTYzMzhFCitNLVM4Sys0XVo9NUhZOEgpMD5AJUggMzggTTFMXzwmWUY9N0lCNCYgTSUzIUpAJV0pNSQ1JTVDWF4xNilSCitNPEVAUDM3KSw2JkVaOVNMVi9GKU81QkQ1KCQxUjY1SVo/NzxUIFBaWS1HKVE8R0lLOEctQy9DRTpAJkBNCitNMyc9QjEhQDUxNy1SNjRdOzxHNVVAR0E0KTMoXzg2LU84JUEkMSRNJTI0UUM5SDlSMlRdSzwmSUIgVypSCitNODM4UDpGQS86Vy1LODVAVjEmTUkxMUxNODVBNS8jMSk7VjxJI0E0UjM2KVpCNylKOEVFPjhETFA4JDFKCitNPVYhQTEjOCMvXTU4OFY9KTJVMFYtIzklNiUhKSZSNE0vVFFRQEZVPDsmWV08SCE6ODYwVjgzWF80Jk1HCitNPVVRLD5GWUs6NiUkOCZFSjtGLT48Rk07MjRdQTlXKVU5RiUpOCYpLTM2TUA2VExWN0VZJCszRUpAVkhFCitNNkRFQiA2LCErMCNeKCMhPjokVU5ARklCNiIgLio0RU45JFVIMTM4XilURTgxJVFSOEM5KThFSUg6VylGCitNODREWThHKUMsQiBZMzdJRjg2RU48VjhQI0BYTTpWVVVARyk5OkZJOC1GJV06VDEkQCZdKScxNEUzJ0lMCitNNjVFOzpWOVY9VEQ7KCI9QDZGUUA2JERWMSVFUDEjWSxAWC1JMTZNWjxGTUs5Rz1JNTM5QzhUTUM+V0lSCitNX0ZRQDYmTVA5QzBJKTI9ODo0RUM+RkRAIjFASS9UMUY/N0k7MzRVQDNVQToyNDVHO1RROTwlWF8yM106CitNOjYhNjY0RF83REU4OCVdJCszKEktQzkkO0ZJOjxXKUY9OCEvODYpNi9FQTYxJEVAPDZBNjI0RSQ4JUlKCitNMzU5QjZDXE02JkFKOiRVJTtXSUo9VkU4OiVdKTI2KTo2RUUpOichOCxCNTg+RzxSNigpOzpQJS8gMzggCitNX0NdKzgmWTszV1VSNDYgXCUyVTY5Rkk7O0YgWyghNFc3U10pOycgXzEkNUM7Vkk7NCYtQDYlSUo7JFxWCitNMSRFUzxWKTo7J0lKOUJMMis2KVo7N0VaOlZJTy9SKUA+RVE+LCcpSjVDKSEvIj1KPEZdSDZFTTE5VihNCitNKCIgSS9EUVE9VkUpLUJUXj8lXEUpNyojPENFLT5HNVI6RlYiPCVYUDYlQSs6VylNPz9aKTxFRUI+V01GCitNNiFAOCs0XUE8J1lQLUJETS1FQUA4JSFPOlVBJTZDRS87KC1SNkQ1QjomTUg2NEUsNkVNKTM1SFYrNUlLCitNPCYpQjYjISQ2JVk1NiYpOTgoIiA2VklSMTZdSjY0RTk1RiEtMSYpWjo0RS8xJFUkPEghSjY1QFYoI1k4CitNOEZdNi42RVI4VylaOEVFOjIzRSkvUz04OUZBUjYiNDgvJy1dODNaIjMoICE2UCRWIC9YWS41RU4+VklaCitNPEYpQzZDOFcvRDVSPzc5SzYiTE02Jik2MjZJUDIzPEctRSFMNiQ1ODhHIU82RFUtNkZJOjpGSSUtRF1aCitNPkZJNSkzKFk6R11COEdJRjtUMEkvVklCNUNdSz5GJE0xJThWOCctWjs2KS06Jyk4KjJdODtDTFA4KClaCitNOCREXC43KUMpMFksPTZNKTM3SVo8RjlNQEctSy9SNE04Jy1LNldLXkRHPS84V0oiPTZZISYjKE0yV0lSCitNMzRFLTYmIUA4Rk1ALUdJSjM2JE0tRi1aOFRVODhGKU0+Ry1aPCYhOC9EVUYtQUBWOldJUjhVXF4uNiFYCitNPCcxQC1CVVVARy1LPCYpUj1WKToyM0U2PCREVDpHKVI6RUBNKVZKKUBGKTY1NCRWL0NFQzwkVSg6VU1GCitNPkZJNjomQFsrNERFMTYlUj5GQEUjQVVCO0dMSUBDIVIgNiwhL1AjXioxTF47V1IiQEdJRjpVTUE2NEUlCitNOEc2Jj00XEcvRk1TOlchUjxGLSsvIUxWOjRUVjJXIUs7Ry0pKVU5WjpFOTsxIjRWPEdVOjUiVFY2JkogCitNOEVNTjNVTUI3REVLPEVFLzxHSUs3QjxQLURdWkBGWUAxNklaOiJERTE5ITYmUlVSQERQWTg2QVs6MjQuCitNLUchLC41SVo+VylDNyZZTDxGJEAlM0VDOlRdSl9ISiI2JTlKQFgtVTwkTT83REVIOlVBODgmTUs6JkVGCitNOkVBUj02TUouUiklOVU5OzhGTUo6Vk1OPzgpVzozXF84RVg7LUYhSz03PUw4M10vOkRVJSkzKEkzNzVbCitNO1YpUkBHSU48RVhNLCZBSC1ENTk7OD02JlE0XkBISVo4RiU/OCM4Qi9FSUMtJUlAOicpSjY2SUYyMylJCitNLyJVKTxHVVAtIUA7L0VJTi9YKF86UCVLIDU4IF9CNEs2Nk1dPldVTTomISQ2RUFDOEZFUkFHVS0oIlU7CitNPTZZWkBIKVM6RiBSKTZUWSUyVUEzNSIiOVI1NT1XISU2NUBcMjchWztVWFIpM0VCQEchSjlGKTA3Rk0pCitNNkc1QzhHSU44VzxWLyMoWUAnSUMtQzk6OUc9NSkzXiI7QiA7MjgpUDIzXUJCSCU+KCFMXykxVUA+Rz1SCitNOlZdVT1HNUYtIkxNM1ZFJTEvWVpCRkRQMTdRWz1HKUkzJilSMjYlLzZVSU48RylJNlZJUjxXTU44VTQ7CitNKzVFLzxHSUM4VVE7OldOIz83ITg2JklGKzJVODM2KVg6NiktNkZNQCkxTFY2JUk8OkYtNjpHSVI8R0lKCitNOEVdQjpUMEkpND4iNUIgLiZVRVo7NklINDc9QS9EMSk6JUE2MyUhQjhWRUozVUE4OlYkRSwmLVU8RkU1CitNLyRVUD5VRiI4NyghOkAlJCAuWEAvVkE7QEc1XTlFUTszI1hWM1ZFOTlHVVo2Qig1LjYpPztILiZARk0tCitNMSMpSDEhTE0vRDU5Pkc8VilWIUMsJE0/NjVJUz02SToxMlRFK1Y5XTxGVUszVilCOCVJSzwnPVM3Jk1VCitNMSVZJCxHKiI6IjQ7KzMpSjo1RSk7Jy1GKTJFSzs0REAuOCotPkVYSSZRNDUtQC06X0YpSz5HNVo8RE0kCitNMjRNQTY1QVFARyBWL0YtRj02KUApVDVQL1RFJDMzXUI6VylIOiYtUj5XVVM4U1w4JiJUUDhHKSUzNFUvCitNOFcpWj5XPUo6Rz0+LENRKy40NVA6VU1AOjcpUDYzXS8+Jy1SOkYpLTdWXUo6Rk0wOSddWjxFQFYtRFFOCitNOEQoSSgiVUAzVUVNMSYtUDZVQF82Nz1JMjM5KTYmIUAsIj1BOjhdSS0iRS84Vi1LOiVFJDhXOUs8J0ghCitNPEAlKSAqMEkvVk0vO0dKIjxGLSkvVFBeLCYtQjpGWU4zVSBALlNYVjNXSiJBRk0lLCNdWjtTXCMtTFRXCitNOkdJUjEkRFktRUFINkYtUjxHPU42M1xNKzYtTjtGKUM2VkE6OFchSjpHNUszVUlIL0ZFWDZGXVo1QUAuCitNJiNRQzpWUUA2VklXNiM5QDpDODIpViomQzgoXCghVEksQ1kkL1NcVDpQLVpfRUBQODVFKTI2RVI7N0lDCitNOjZFKDlHLTktRUVJODRVJC1CVS84RlklNlZdWj1HNVU8Qzg4I0FAVjhXLTYvVDE6OlZdQjM2SVc8RyEkCitNL1VdSS1DOTw6RilIOlYpSz1WQTE4VzYkPkYoXzVGSUI2NV0sMVcmIj5HSU86NU1GOlZBPi8iVSQuNDE1CitNKENdUDhFQFYzV1FaPCVBOThFSUAvUyk4OlctNSoyVFk7OEVMMzM4Oys2OVA9VzAhPEAlQCAvWE0pVilDCitNNkZNVT8oLUsvRUE2JzNFLDxYKU42ViUpNURESS1GPVVCRykpLEM5VT5GXSkrMUwyL0ZaIj9VMD0vJFVCCitNN0cpSzlHSVo8RlErLUYpTjxEUSQtRkVAMSZBTkBHSTA2NERNKVZGKDtHNiI6MzA4JlRNSztHKS0xNFFSCitNOiU5Tz1WWFQmUj1GQTg1STU1XT4xNF0+MTQxJDZWWVpAJihFMyVJJTI3I148RSVKOEZJWDE0NVI6VilLCitNPVZdSDMzOEUyNl1BLjMhSDxGTUo4Rik1KCE0OzI2TVo6VURfMTZOITYyRFk3JylIL1NdOT1VRFYtRVklCitNMzRETTEmUVI4Mk06PzgpSyozXUo6JTkpMjQ1JDpHSVxAR0lLOkZJUj0kTFYtREVANSFMRTYlRF42Ni1cCitNPTZNQjY2XUA2RiVAOjcpWzo0MEAmViFQL1E0LiIyVTtARDUnIDcoIThAI14rNDFPPEVFLDZWVio8RDUpCitNOCM4Vi42RiI+Rz1TPCZJQDYlNTs5R1VbODNYXjQnSVw8JTBJJiI1QkE3VUgrMzksNjYtTD1WUU88NzVaCitNOEVBSDlGLUAvUiElOiNFJTZIKiIxI1hcJiBFJD5HSV1AV0lBKTFAXjhXKVAvQyEkPEc9OjNWKV1AJVhWCitNMTc9VTsmTiA4RUU+N0NNKTomXUY6V0lSMlYhJSszWVdfSCVOOEUlOj1WLTg2R0laPEddUjxGIE0mIz1ICitNMjRAOy9GSUk6JFUlOjYsQCk2QVo/NkxfLUMpOkBGXSQtRF1POCRFKSlVXUwvIlRbMjU0TSYhVFk6VyBFCitNLUY5XzxCVEczNl1BMjRFJChEQVE7OClZO0ZJSj1XTVA1IlRfO1ZUXy1EVUAtQ11DPTc1QjE0QUMyJFVJCitNNkcpQjhVST4tIiEtO1U0MiNBQE0zOCheKVAlLCA0MCBfQkReNjZNTzhHKVI+RylINURVPjcjISRAN1VOCitNPEc1UjM1TVc8JilSPTZJOjEjXTo5JjFYODMoRTM2VTM5VkUpOCVRSzcmTVM8RylOO0VJMDpFSSk4NVhFCitNLUZBQDE1QVtARkBWJlIgSywmKUs+SClaOFMoQCkzIUA6VjhWLUZBUjlDRSQ+R1YgOjRdOjhHKVpARFRZCitNOCRERSZUNVI8RjlOOUZNUDExTEUxL1lbQUc9QDZGTUgyNDIgQFdKJj5HNVAxIlRfNyNNNC1CVS06Jk1BCitNMlVJQy4yVUJAR1VLLEFMRTYoKVo6JUE7PVctQjUyIFY4JERSKzYlVTUzUE0tVU1RN0M5ODpGLSksQ0ReCitNMjNYXjIzOFk3VUVKO0ZdSDhHKV1AJjxbLUYhRy9TOT87VTBQOkc1UjZDIF42JDEsN1NFSDM2JSU4RkUrCitNPDdNQCoyRFIyNUIiNiYgITowJT4gL1k8L1M4UC4zXVJARylLNlREWThWXSkrNUVaOUVZRjojOFk9OClDCitNMzZdSDZWRUE2JDRfQCcoVi1HIUMpVEFPMjZNUjhVUUM3RllSOlVJKTY2LUkyVilPMEJEXjVDOSQ+SDFSCitNMSFNODYyPFkzNjoiPzcpQzdEJEAvRU1AKzIpJDIzXEUtRk1OPEZMXCZSPUZAWC0pKVVFKSowWEU5VylSCitNPCYhSz4mOFsuVUdIOVgpXTxWLTo4IjQ7OCddSzxHSVpAVyk/OCREXzZGVT8zNi1POFYlUDYxVDsyNylWCitNOjNQNSUzXVc+Rkk4MTYpUDZGRUYtRU02LyIgWTtVTSUyNUFBPDZAXi1DITo6JiE0KzM5JS5TRTg2JiFCCitNOUZJQDdFRU0+SClCODRFNjVCVE02JzlHL0cmIj5GKCMvSEUpOFYgVjVGLT86VDwjOEhFQTYkXUAzNUlCCitNN1ZMIT4gJiAgL1lXNlREUiRBTUA+RlFDOCM4RTZXKVAyNDYgOiRVMDgiIDs2SClLM1U5LDM3IV88JFUvCitNP1c8Xi1GQUIyNUFAMTYtSzhFSTs2VllaPEZJKS9EUUk4JkVbOiNMRy9CVE08KEoiMjIpLTYyNE0yNiVSCitNPTctUjpWJF8yNiVGLUJUXy9SRDUrNilaPlZcTSNAWFA4R00pKTRFPCxBNEA2JkVSPVYtQzpWRSkzVkdWCitNOlc1Vj8nIT81MiAuKzYpSDhXLVo+SClSOFREXzNWSVo3Vk1IMzYlSzgyREA2JylSOlVEUiZTOUo+RlVBCitNNiYlOzE1RVM2NU1INTNMXDM0MFArM1lDPCZNPy9TOT44SCFPLEJEVi9URTY2NUlCPEclSDZFRUI5J0VCCitNMyQxKTEjKE0xNj0sNicqIkBGTTYrMjRWOEZJOjZGKTo8Ri06NkAtQkFWQUY3JF1JOlYoITlAJVUgL1lbCitNPEZFJCIxNFY2Rik8NkNQTTI2TVI8RioiPCRROjgiTDIrNi1XOiYgVi41TiM+U0RWOkghSzM2ISg4JjEsCitNOCcpPDpGTUM3RjlaPFZJJCgjRUEuNilaPEYtKS1CIDgzKF4qPCVFKzg0RF8zNi1INycpWjxGPTs2NilLCitNNiRNOTYjOEkqNDVSPzc8XygiIE0xJk0+KzMhPjEiRE8xNU07PkcpQzhERSU2Rk9NOEYpRj5XQUs3QiA1CitNKCVFTzhHKVI6NiEtOCVNODZGSVI6Ryk6L0RFMTgkMSk6VllLPDRdJCozOUs+RyVCOFZZQS9VQUY6NVlLCitNNkRNODgkRFYoIiBfNUYtUjZWIUgzNklKMjMoVjI0VTYyNEUtOVclUTxGQUI2RUlSOVNEVjIzUFYvVERWCitNMzZJWj83KUovUiBWNUAtOkQmKUI6RkktNkYpLDMnXVc6JDU4OFZIIThAJUYgL1lSPEZNPighQFIvRDU6CitNNkNYTTYmLUI6VyojPkYlOjolREkmI0VPNyVAWy9UVUs8QlQ7LUYpUjpGIF41RiBZNkgpSjxWUUY6VDFDCitNOyYkXiZTXTgpNFFEOzcpSTIyIC4rN0VVPUckWTE3LVA4RilHMzYpTjxGWVA7Ji1DNkYlOzonIT4sIzlCCitNO0cpSDJVQTk6JlFIMjJUUi5TUSk2VU0sOUc1TzYkNF42JyJcN1Q1QEAoKVY5VUBULEVFUjpXNUs7JkFACitNNkVBLTNWQU04Vi06LUJUTS1DKTZAJik+PVQwTSgiNUA8RllJNkYlQTYlTUM4VylaOCM4WTo2JF8gUiI3CitNLCVJQDEmPUs4IlQ4JiNNOztHKUw4NUEpMjQ1QjwkRCMvWj0lNjZBOzYlQUE4NVFaPCRdJDpXNTszJi04CitNNiJUSS9FSUM3VDEkOCRQVilVST48JkU2NCZUITxAJUIgKl1ROEVJQi5RQFs2IyEkMjJURTdGRS8zJ04iCitNPkZJOjpXKSkoIlVPNkM4XjYmITAzI0xSKTJdLTZEVUE4VkU6MyAxUl9FUUszNi1LOCU0Ui1FWE04JU1CCitNOkZRKSYgWEI2RFU7NTFUXz5HUUY2RlVAOCVRQjwnQVs4VV0pODYlQj5XKTwvVEUtOFY9SDxGLVI8RklCCitNNTIgNSs2QUk6JUBfPEZJKzYzXFA7VkBfMzdNXT83SVI3RDUrMjQxQjpVWTo6VjhWKTJFKTxGKUs6JTBbCitNKjE0QDE3SUY5SEFAKlFAQDZHSVs8JU0lMjQ1Ojw8VSg6R0lPKzFMXjYkTE0qMkxHNjQwUDZHKUEtUUA4CitNKzYlXT1GWVA6NVkpLUQ1UjwkTFYvRERWLUNYXzZHQVg4Vk1LN0JUWTtHTVA4VUUpLyMxJDg2PTgrM0VCCitNMjQwVisxVS0/ViktOUAmIiA2OCBJSCVINCYlJC1ERTguM0xSJiIhKTZDREc8KElcOEVBUj5GRFYuNkE6CitNKzM5Qz1WOF4sJERbIFI3NCs2JUo8J01JMzYpTj5XKUw2RklaOlYgXy9VRSk4Ji1LOlZJKSYgRFI3QlRNCitNKCBEXzxGVTYuNilDOEVQWTo3PVo6VUU1OjchUDpFUVo6JDBbMlVJQz5GOT4+RklOPCNELik2KU86JURfCitNOlYgUDIyVDIgVEdeNjZFSz1HKVs9VilBL1FMVjM2IT82NzxcKCFAQjhGKVI+RkE+KjBYQDI2UUM6R0lPCitNLUIgVjo3TiI+RkE6MjNcWTZWLUE9Vy01LSNFODYzOFY1MzkrLEEpJTpWLSUsIVRFMTZNUjhFQUA4RilSCitNPDZVVzhTOFY1MlQ1KCI0UDpHVVo9NllXL0FNLEJISVs8JUk4NjVJTjxGIF4vRiEtODchKygiNUI6IzhZCitNIDdMIT1AIylARylCL1VBOzomTUk2MlQ4LSNFOzVCKUBCOElPNkcqKD1GITo2VURSKzZGIz5GIF8tRERUCitNJzBYOzI0UTo+SDU6L1VaIz5HKUI6V0lVOlRRJTU0MTgzNiFSPkZBPixDXUgpMCwpX0IpQj9WIFk3VilICitNOiRFODlHKT8sJEVJOCYtTzQmXU8vUzErNkZeIzolTVI6VylLLlFAQDEmLUkzVVlDNiMgVighQEUmUiheCitNOFZRSDNXNik+VUUkKCE0TTtGRTs4RVBHI0BZNjM2PUo0Jk01JiIhODglSS08RixNKTU1UjxHNVo+VyFBCitNODRFJTpHIVtCJl1ANiYhPy1CVTw2RUA4I0I1QDhGRUExIzBHMShdSjM0VUA5RklSO1ZBTjxVRT42M0QjCitNJiooSTEmKUI3Jk1TNSE0RzkmVVY+VylLO1ZNTj1GSUI2RDUkMzghSzUjKSQ3UihNIDYoITswIyk6Vi1SCitNN1NdLT5HUVM4RUEkNiMhJDsiKFA7OClaOCYtXTlENUs+RUBNKCRGIjxHKVA2M1hSI0BEQDBCPSk7SDYqCitNOlcpXT5GOUI7J0lGPkdJQCwiPTs0UVUtPkYhUjtIIUgoICw1X0IgVjpYIUM4JDUlO0chJTgnJTgsREVDCitNNiRRV0InSUsxIiBNL1YtWzgjRTo6V0lPLyJEXjYkNTg5Ji1QNkYhODUjKFQqMkQyLCYtLC9EViI/VkU1CitNKCBYRTwoNVA2ViE+LlFATTY2LS0sJUE+JlFAXDY2KUA9VExFKCNNQzhWKVI+Vk0+PEZEUDhGKVJAR0lSCitNOUVJTSxDOUY4NUUkMSNRJDZHKUs6NTRFKzlNLSwjWUI4VlVSOUYpODpWTVA7JERHJTBYVDgkVFkuNUlCCitNNTMwIys5OSU9VzlOOjZNPjxGWV88RDE0LlZNVzZWJVI6VDBWIDREITZQI14zM1knOFNYWTxHKUM8JilACitNOiRVNTojXSQ2Vik6NldOIjhTRUA+RUhWLURFUjtGWUo6NTBLIjE0RysxNSk2VjogPTg1XTw2OUY+Vyk5CitNOjgpVy9CITYyIjUpOkRBQzZXSVAsQyBcLlJMRTM3TUI2M1xeOUZcXjYnIUgxJUVAOFZBRkBYKTovQ0RFCitNLlVBRjYiVE0xNylTNTIgWTtUNF86RllaMzYtUDNTWF9fQ1xbKlJVKS5TKFw7RlVQNjI8OCs2OiM9VUk7CitNNiYhISUzWTkyNUVBOiU0XDEkVUo4RiBZNiNQVC40NTo8Ry1CMzdKIDYkXTo2RVE7O1VcXzYiVEc2Rk1ICitNOCVBPjdEUVM4Vy00JlFATTIzOS06RllOOEY5NThWQVI8VkRWKCEoVDslTF42Ri05OFYtNSpRQDs1RylMCitNNCYpTDpWVV08RFFDNiRVSjZFUVo9SClJMTAkUCA1TCBfRVhNJlVBQjZXIS0sJiFKOEVJLDsnKS0zJ0ktCitNKVM5Sz02LSQ6JylCNiVFPDxHSUo4RUlGLyFARywiIC4qMzheMzVOKD5GKTw6VylSO1ZZUjpWITgzVU1ICitNOEZJQjwmSUo3JlRfL1VAUigkViA6RFU6MzZNSS5TXUA9NUBWLCRVUDInKVstQihWKTJVKTgkRFQrNTVMCitNQDZdJDI3KTkrNEVMQkQ1JTs1SFYxP1ktMyVZJC9URSQuNl0oOiYhJDEjWUpAWClMOEYpUjsjUSs2JDEtCitNNlVJTzpGRTo6JkBWJlRFPisyIFY2JylQNlNFRkBWTUA3JkElL1VBSDY1QSIsQ11DPVRAWTNXIE04Ri1PCitNNTFAMio1SE0tRilZO1VZSzNUVTk6Ny1bNiMwRy0mJTsuNkohOyctUjlDUEAlMzlSPFVJPDxHNVs/NihbCitNNjQ0WzZVTUM5RzYiPTcsITggJTkgL1k4LlEpJD5GOUIvQ10kOCYhLDE2LVIzIkVaODMoVzI2LS8yVyFLCitNOEZJSzpGXVo7NkkvOiREOCYiIDglMiBWMSFMTT5XSTk2RyEvOUdRVTYzXUI+VUEtPFVJOjpHKiQ+RUlKCitNNTNZOi8hTFA8RklKOVRROjhTWEUuNz1QL0JVJDhWLiBAVTRJKzMoQi42XF4oIUxZOlghQjhHQVo5UlRFCitNMjg1Py42KSkqNEdeNlQ9QjlFNTk2NF1QNiRQXjEmQTgzNllaPVZNSjxXPUgzNU0pNTYhJThXSVo5RjlJCitNLUJFKTYkMFIuVUFXOFYlSDxHTU48RklKNiRVOjhGUUM4I1hfNjZJOC1ERTkyNF1DNkQ0VCgiVTotQjUlCitNQEdJQjhFNSQuNF1OQFchKzIzRTgyMzlCQzguI0BHLUEzUjRWOlcpRzhGWVs6WC1HMTZEXy9WKUs5RVk8CitNQEUlUiA3KCEzMCNeL1FMLis3KVI2RDFANjY5QDJTOSQ8Rl0pPkZJJTI0RTktQyE8OkYtUjpVSUo+R0lLCitNOFZVOS8jKSQxIzBUMjVQMigmSVcyJildNkYpWjxGQF4wNjheMSddSC9UVTk7OCoiO1VRKTU0MEsqNiE6CitNOUZdQDo2QTQsIyk6OEU1ODg2IT5ASEVSL0I0XCoyNUMxMFguJTRFLSs0MVo+RjxNJTI9SjpVSU84MjRWCitNX0YhQDY1SS0yNFUrOkc9QDIzRUM9VERSL1ZNUjlFWU49VEEtNjNZQTI2JU5ARyE6NjNdQT80RSs3Q11ICitNPVYpQDlHKiM+RzogPFYhQDdUUUY8RyE/NjYlSjg1QSs2JUU5NlREVi0iNF84Izg7KzZJXTxGKSU2I0xQCitNNkdJWjpUXFAyM0xFMThSLEFHVVM4VUhULEVBPDlGKTw6JTlVOVNdQi4zRTY9VklMOjgpJTZAJUogNUwgCitNWkVASSYiNUI3JiktNjYtUTsnIS0tRUoiQFdVSzIzXFYyM0RJLjYpQzxXLUs6R0ojOFYpUDhVRUA6Rl1JCitNN1ZJNiNCNT88RE0nPEYtQzpGVVM9VU04JlJVVz5GKTo3VilMQydJOjYlQSkxJEVDPCZdSzhHIVA4JTU5CitNOUQxQDpHKTszJ0oyQkZcXDEkMFA2QzAjI09YNSUwWFY+R0lCMSMxJDolRTg4VyUpL0RdSTVFSU82JDUpCitNMVZZUjYjXTo+RlxJJTJVOTYjRF89RTheNiJUVjNWUUo+R0lNL1JFQj9UVF86M1kkPEYpLTZWWiM8Ri1aCitNQCY9LTEiRSw8V0lLOCYlOzo2LUA2VUFANiREXCsyVSk2QzhFKjRRSkBWTSUvQzhALCZNVjtGRF8xIkRACitNKzgqLUE4LVM4VUk4NjReMzZGSUYzNUlGOkZJQzlDWD0pNk1LPFc9LTMgKUsgKkVCN0MoUjYjPTkxM0U4CitNNlYhUjxTXEc4SEldO0VNLzEjXSQuUz1BO0ZRUjs2OVo+RiklNkRFJTxALiJHVk1SOzFMXzMmKUkuNUBZCitNM1YhQj04LVM3QEQ4MTZZVzhWLUgzV0lTMTRQIzYvWUA2NylSN1VFUjxGKTs6NkBWN1dKIjo0VVpESSlaCitNNjQ1OTI3IFYsI0RAI0BELi1IKiI6REUrPDgtOTYmLUo7Vl0oODNEWT4nISUxNkE5OlZFSDpGVVo1IjxACitNKzVJMy9GKS0xNTRNJTJVLDZHKVM7UzhJOEZETSwnJTgrNEReLSVdRjxFTSk0NlVXOFNcRS42UVo+Rk1ACitNOCVdTzwmITg4VURWLUMoVjgmKlIvRDEkLUMpSjhVQFIsQkxJMzY5TjxHISkkQShJOzg1VT83WUAzNk1RCitNMiRVPjhVSTg6RzVGQEc1PCsxTFA0N0lTMzNEITpQJVIgKDFVPEZBJCBVS141NDUkJlJVOjxGJEIuN0lcCitNO0c9UDhVNE0pMiBeO1VJQDlGOiM5RkE4KzE0RTY3SVo/NylEPEI0TS9VQUIyM0xFKTNNJDZYKU43U0RJCitNLUc9TjxFRSk2NTBFJTRVSzhGJUs4Vk1DOlVFUjZERF44NURSMzc2JTxFWU5CSDlVOCVBODI3PTo2R0E1CitNKCE0Lio3IVo4VDUpPEg5SCwjKUA5R0lLOVJERTMlXEdeMiFXMSNFR0I4SV0+VyFGLUM5OzpUNUg4RUlACitNLUJMVCszWTY4RiBcMjYhQCkyNUI5QlRHMSRdRj5IIVI4JFVCPEchOS8kTUI7N01SOkVNQThGKUM2Jk1BCitNLEFAQC1GQUs4JU1IMlMoXjZWPFItI1BWL1VBKTE2TU4wMVQ7M1ZNMT5YSUMxNjoiPkZNQzhTIFA8R0lECitNPEY5STg1MFY3Vl06MjVAIThQJVYgKylaPlc9SDlGSTk4NUBNJEIgVjI2LSQsJilNPEdJTjwmIFQlMykpCitNNiRVKTY3KVUzNUE4JTBYNSwlQT45RUhfN1Y4Xi1ALTpfRERJJTI0TTI3SVI2JExfNicpWjpGIF4xM1g4CitNI0JVPzQlIUo5R0FSPDc9TzolWFYtQ1BJLUVNVTtGLUQ/OClSOlZNSTE2TU08RylRNjQkUCs2IUY2VEU7CitNPVdVVzIzOTs4RzVLOyVBNjM1QE0oJVBWJlNFWkE3UV0+Rz04ODZRSi9WKU80Ji0lMjVMVjI0RFcvUzhWCitNM1ZFNS1FQS0rMjUpOjZZVkI4KVAzLE0tOFZBKS9EVUk6Rz1SOFRdVzo0XUM6N0lMMTFANSs2IUI6JylQCitNPCU4XjMmSS81NjhcKzNcVyszRUw9VTRbM1RVOT5ISVAzNVFWQTdVWjsjUEU7KClVPTctTzhERSk6RyEpCitNL0RUITcgJVIgL1k5PVZJRj5GSTs6JiBNKCJEQC1GIF4pM1ksPFdVTjxGIFIlM1lAL0RFODI2TUoyNDU0CitNJTBYQCs0NTk4Rik2MTc1UzI1QUk4VUUpLUM5JDYnPVc2VEUpNkZZVTpGLTgyM1w1IjFAXzJTOFc2R0k8CitNOFdNRjpXPT4tRDBcKTRRSjFVSUo7Nik+PEcpSDM2TVU9Vi1QPCVBPjdWIS02U1kvPkdVUjwlQTs7J0teCitNPEY5UjxGRTo1Myk1NTFMRTZHNVQ7RjlaOyZNUjpEMFc9VylDOFZNODYmITgtQlRWKzJVLTo1RUEtQlU1CitNODZJQjQnSiU+VTheNjVBKTU2JUI2NklfOFRVUDpWKUI6WCojMjFALis1TUM2ViVLQTdZXUBWOS0yNFBWCitNKTM8VioyNS8+V0E6LjJdQkBXWVU2RUlKPCg5XTs2RSk5VzVNOzdVWjYzKUk+RkhWQEM5PyA2KCE5UCNeCitNMTchPDInKUs8Jk1DNUNZKS1ERUM2REReKzYtWzs3IS0qMiEpOSNYXzdFSUwzVEUpOCNcUjQlUTs4NilKCitNPVRVUkJGKSc8JllDOiU5KTYkUU89Vik4MjRdUj1GTTs6NiUpKjBELis0NEAmVTlKL1VKITo2KVI2IyE7CitNOiM5JDZEMSQ2NUxeLSZNSjgmLVs8Nik6OychLDZGLUA4JUxbNic1WzgnKUMxNUohX0cpMTMmVVs6VUA7CitNLUU0Wy1ERUg6Rk1DPFZNRD02XF4nNV1SOFZJUzZFSVI6VERFKjMoOy1FQF8zUyhWNlglXzpVSUZAWCEtCitNLURFOC9UVUA4MzhSOkVNJDwmXUI2Vi1aPkVARSczUUA4JUk5NldOJkFYSVc4ViE7MlM5PjdEME0uNlojCitNOkI0OyxHSVI6Vi1INlVRXT81UUI2Jz1GOlZZXT5EUEs4V0VHKzgoRzYwJUogNVwgX0RVTjxVSTo4VylOCitNO0c9STM1OUg6Vk1KNUI0WTpWLUs2VDBWNUZdPDI2JUk8RklANkdJUDMkRU83Ji06ODcoXjQ4KVIyJklMCitNOFZNRjhHITo2N0lPNkVBOz1HSUs6JklQOEVYUCYiIEkoIiEpOFJUUD1VQTY4VUBNMjZJUDhWQUg4JUU4CitNL0MhOzhUXUM/NiElMzYpSzhERSkvVUlKMyVJTT42LUI4I0U5Pl9ZSy4yRSU8R11GLEM4XjE0RFYuNU05CitNOFc9QjhHKUo4IzhWMSRROjhGLUs9NylPNTMoSSgjUUYxMzhFLUNdSEAoKUI2R0oiNUFUUDcmISkuNUU1CitNL1VBNSs3KVI2RFUxOzYxTzgzUF43VF0tL0NFLT04Vio8RU05NkVFKTonITgsQjU4Pkc8UiYiRUIzI0UrCitNNkYhOzxILVo2VDU4LVYpUztHNUozNilEODM6Iis0VCE2QCUkIC9YVjlHVU4uNiFSOlUhWzxFQFY2Rk4gCitNPzYsViwmLUs5RiUsL1RFQjtWTUI8Rk1NPEVJUj82KFAzVFU4OCZNSy1CPUY8RiFCOFVZUj5GKVc2IyFCCitNOiVFOjZGWVU5Rk1LO0dJSzdDTEApM1BWNlckXCk1QSk2JiVDMjRFS0JHSUs+R11OOlRERTImLTo4RzVJCitNL1NFLDpGSTYvUkUkPEVNODhHKU84VUBZNkgjXjpTTEUrNUVbPEVNQjdGIUAuUjxbLUNFSjpVSUgvVilQCitNMSJVKTI0NTs9VzVDPVdRQC9DKEc2ViEkKTMoTSs1UVo4VFUvPEU4OyglOUs6IyBWNiRNQDg1OVo8VDUvCitNNkZBJDY3LVg4NU04OiVAVCs1SVpBR0lJL1M9ODlGQVI2IjQ4LyctXTg0RTU0NDBFKzNdKTNVIVpARUk1CitNLUI0XjckPUY+R0FSNUVBJEBCVUYgNUAhJzAjXis1SVo+QyBQNCZJJTZFUUYpMlRZPkhJUjYzRTA4RUU7CitNMzRMXzEmKVA3Jj0xM1cpQjNWWVIyM1xeL1VFUjtVTSkzNVFKOCRFKDpHKU5AJiRWMjVNLTVFSU46RVkvCitNOiY5VTtWRTQuUzkpL0YlWjojTFY2Vi06OCYhODpIQVMzJioiQEdJSS5TITg5VylVOjREViwmIUg6JTRNCitNK1YhOzE1TUs6Nik7OFcpWl9HKUAvI1EvOVcpSjtGRUk8RjkkLUI0RTM2UUMyNEVQOVNYVjlFQSQzVk1TCitNOEZZVzMmJUssI0VBNiNdISgiNF44Jl1JMzVFKSghNF49Vz0kKzMgVjYmLUg8RkRfMjYlODI1SU0/NylSCitNODchQzUzPS86V1VSOjRERTE2JVI+RkBFI0FVQjtHTVo+Vi0pLyM5KS42RUk7J0hZKzMoUjI1SSkxNjoiCitNQEc9SC1IKD02ICVBIDI0IEZFQUs6RllAMlVBSjhWXUo6I0xJKTVFVT5HKTg1RilCNlQ1LSBWI144RilLCitNM1VBSjxGKUo7RFU2MjI0UDonSU88Rk05OkZJLS9UMSQ3J01aOjZNQjIzRSk8Rkk5LUVBTzkmOU83RV0rCitNNiNFLT43KSkpNFVCN1RdKTM3Kig8IyBZPFdKIkBWRFYuNjoiPTc9KSszKTgzNFVANiNYWTM0NUo6RTkkCitNNkZJXzs3NUo4NFU4NkVNQjwmLUY9Vz1LMSIgOCo0XT8xJUFfPEQwTTgkRFBYVExZOEcpUjhSRF49VERHCitNMzVAXzUzKFQxI1k6PCYpSDVCTC4rNyIgOjM4RS0jRUI8Jik/L1NdODI0XUM7RlVRPEZFQzhUXSs2Ni1OCitNOEVRSS8iVSk8R1VQLSFAOy9FSU4/OElYOCNdKy9SKTs8VklLKTBYTSs0NTA3U0VCQEg1XTxDXEAvUCVKCitNIDYkIFxYKV06RUVIOCRVSjlHNVo6ViEpNTYhOTY3SUo6Ji1QOCM4TThHKVU5RilSOiRFOTtHKUs6RilBCitNLUE0NTEnKU49N0k6OEc+IDwkRFwvVylVPTcpRDIzXF88RylBLUMhSjokXUs8Vk1BNiM5JDpWRSUmVilICitNOCVAXy41UVo8RiErOCYpWkBWTF8pM11VPEdFSC9CVTgvUlRfNlREIys9PUJAIlRHN1YhLTNYIVI2VFVLCitNPVYkWTomXUo8R0lXNlQwQCcyVTY2Rk1fPUZFODo0NFY1MyhWPVddOSlRTUA7NDE4NlQ1RjEkRUgzNSFMCitNO1ZZQjEiTFQzJyFQMSI0VC8lIVc7RkkkL1REXzE1SUs6RylbPkYsIzZaWUk4Rk04MzZNQSkzIUM9NylJCitNNTNRLTwnTiVDN0FDMTQ1Pi8lTUoyIlQuI0NYXC9TRE0sJioiQTclUjhVNF8gM0QhOlAjXj04KVc2Ri02CitNLVYpVTtGWUY7VV0tOFZRLzU2SU82Ri1CLUFNJDpGVUs2NjlRNUVdUDpWQS86RyBbI0BYRTI0NUc9VFEpCitNOUg6KDolOFk6J0lSPkcoVi9VWUY9VkU1LUYtQzJWLVs+RylMOCVBSzwmOFQxJFUtMjYhQDMmTTk8R1FHCitNMzZNSzkmRTovVFFGPTc1SjYlTTgyVUVIODQwRSRDRUovUiBZMSFMR19GXVIuMyE/QFcgXy9VTUI9N0laCitNOkYkVCYiIFYzNk4gPEZNQzpURFYvIkRFOkhJTy5RQFA4JkVdOjNFSjtWRVA2JF06NkgpSzEzPFYxJkFXCitNODJETTE0RVM+R0lJOFRFJCwiXTY1RVFWQkcpQzpWTVI7Rkk4MzZFSS0iRS84Vi1LOiVFJDhXOi1ESCFPCitNMzNFLTYmLTAuM0Q9I0NZQD0zOCklM0VbQTZZQjM4KSkuUCQ9IDNcIEJWSVU8Ri1AMTRFOj03NVogVyteCitNMSVBUDoyKFk4VEU5OlVIWzYlRUo/VilKPEU5JzZWSVAxNDVLOVJEPS5TTEUvVVxHLUZJWj5GRF4mVDVLCitNNlcpTS9DOF87OClQN0MhODYkTUs8RlVdQjcpOThHTVs5RERZKzI1KTtVSVA4RlYoPkYtSzZDXVI+RkRWCitNL1RVUkBWXUE4JU1BOFZdQC8iIE0sRikkLjNQSys1TVcrMUBQPEc1PiwkRTo8R0laXEcpUjUyIEAmUlU2CitNOlZZTTxXITkvU1A7JlQ+JT5FSFQpMlUpO0cgVjEmVU84I0UpNUJdUjpVRFQmUlUkOEZdNSkyVEc4RylVCitNPzdJQDYzOEArMyhWOlhWIzhGOU48RllaOFYlSzxVNEkrM0VNOyRUViZSVUZBSSotQFZIXy1FSVM4NEVBCitNMDBYOy42STwoIUxfPEgtVTlTOEUuUCU0IDREIFdGKUszVj0pLCZFSzlHKVo/N1VGODVNUj5SNSEyMVRZCitNOzZNSDNUMS8+R0lZPkZJRjVGSVs6MyE7PERETS40RFIoJERSJlYlTzZDWFIoJDFAMTVJQjM0ME07OClTCitNOlNcRSs2IVM6VU1aREc9LzhXSiI9NUheKCBYRTdVOS04JigkPE9ZQS41TVI6RERSKERBWjpWKUs4REE6CitNPEc9OzNTXFk4JiBfM1VYVjdYIU4xIzlDPEcgTTE1RVU8Rik6O0ZZJC8jKEsxNiExOFcpTy4yVT4sQ1FCCitNPzgpUC9DREApNFVXMjMhPzhDWDsuNkRfNlYgXy0iPEktQzklOUMwOCk0RT86R0ldNlYtOC5SVEUsRilVCitNQFVROT5XNU48VDU7PEdNSTEiIDs4JyBfJTBaPiIyVUw/JyFdQEYsVjE3QVIzNEFGKCI0SSxHMT4mUyE5CitNOzc1VzIxTFYgNiAhMVAjXjElSSQ2RUBNMzZJSjkmQVVCRVFDOUcqIjE0QTgqMik4OkZBOC40VVo/JzVdCitNQEcpOzZYKig3VUVDOEYhNjhWWEUvQ1A7LjZJOS8jKFY5RikpL0RFQjIzXTw7RlFSODIgNS42LUszVkoqCitNQEVBNjpILiM4MlRHJTJVTS9DISkuMjxeO1dJUDI1QTo6RiRfKjM5RjhGTUs6NFU7PEdJSjpGQUM4VUhCCitNLCQwUF9EVVo+RiBZNjZNUC0jXUI9Nk1BNiRdQzglOUEtIzktMjRVSDYiVDg6NV1JOlZJUkBUMFImUUBeCitNOkVBNjomKFsmUzlQNiVBPi1CVFwxJTReLjYlJCk0MSQ4JklSO0VJUDZTOEkmUzlANyZZLDImWU46VyBNCitNLjYpQzZFWFQoJFVPNTEoKSNCISw2VF00PkcoWSs2TV02VFVSMSM4TS1GQVI2Mk04NkY5WjxIKS86ICVKCitNIDRQIF9EMTg3Il1XOEVdQjpWKTM+SDk6L1YpWj01OFAvQkQ4Mjc1Oi9DRSU+R00oNCdNUjhFSVVARylDCitNM1YlQjYmSVItREEkLlNZOTpGMEktRz1SNlREXjYjRF86VylTPEY4VCpSVS86NDUkPkhJSSwkNVw+VUA7CitNKjFARTkjWF42I1A4JlYhWj5HIUg2RilJMlY5QDdFSUE4RkVKPEdNWjxHKVFAJk0pJiFAOyZfWFk8RihZCitNLCNFPzwlQSk6N11SOlZNSThENS08RVhJLjVBODokREUoJylaPEZBLDQoQVcxIkQ7MjZBPzpILUoyM1FACitNPEZJUTgzXFwuVF1JMjNdLTEhTE01NkFSPEVIWTpUXE0mITRNMzQxOjE1RUw4Vi1QMjNdLTg0NUI6NE1RCitNPlYgQCUyITU6NUk4LjYpUjUjOUM/NlElOlYkWSo1QTY8RykpNiVFOzxYMiI9V0ghPkAlSCAvKSc1REQ7CitNPEc1QjY1WUs3JjlVPFU5JTpXVUoxNTBFI0M5Uj1TREUsJk1fMjMhQjhGLVI9N0lSOkRVLTE0RUM4Uzk6CitNOiZFSTNWKVc2IyFKOlVBJTIzWFYvVilSPTc1UDJUMSkyViU5NicmIjwjOF44VjkpKjIgOCo1OFY6NkkpCitNKCJVRz03SU44VkVBOCM5QDpGISwyM0UpNjZUIz5PWU08SDYiOFMoPSNBQF86VikkL0NEWTdWKTs5R0lLCitNNjcmKD1VSTs6RyE+MlRFKTg0REAjRkYkQEcpKS1WTio6I0xNMjYhQDlHSUozJU1QPkZaITxURFsvVDVJCitNMlMhKy9STE02JkVXQCRVKzg0TFQoIk0kMlNEVi42IU46Ri1SOjRdPjg0RTo8JjlaPzZAXC0lQiM+Vi1DCitNN0UlUjlTRTE8Rz07NDRUWSlTWisuNFFINiYpSDMlWiM+R0ghQEAlUiAvWUI4JERFNkZJSjZFQUs8Rik5CitNOiYpKTZYKVI6RkEkJlFNOj5FXFImU0VCL0JVODgmSU0+RzVGPTcpKTE2RVA2UzkkPEZVVzVDPUs4Vi1SCitNOkREXi9TOTk1RDVGPEdJWjYjIUE2NEUpOjcpTT5GLUk6NEBfOUZMVi1FQFY4JiEpKzQ1Uj5IKUcyNi1KCitNOFNZJDtUVE0yNVhNKzQ1Tj02WTk7R0IqPFVASygiI141Rz1COiYpOzY1QS02Vj1LOERRRkBIKVU8RylGCitNOUYpPzYmLTUmIFktQEhJVTdCVSlARlxZLEM5KTdXPVI4JFFKPFZZRjo3KUEtQ1BNNiVARSxCVFY3RjhWCitNNkdJUDxGSTkvQ10+OjZFPi1DXUM4RDBZPTc9KTYlSSk2JUlGQEdVTjZTOS9CR00xOyZNMTZWKT4yNU1SCitNOlVAXzMkTTk3RThfLjZOIjZTXUJARi07IDZMITxAI148RylINkZBSjhWOVI8RzVGNiVBLS42Lic5RVEwCitNOiMoQC42KTE3IjRSL0I0NTEmSUI0N0laOEZRSjMkRVA8JkkkLEYpTj1VXF4zM11CPEdJQjYlQSU6Ni0pCitNNlZZWkAmKEUzJUklMjchUjQ2SUI6R0ElKjYqIDojWF8yNFUpL0UxSDxGVVI1Q1FCPEcpQjM1SSQmUlU4CitNMSM4UDZHJUIzJiFOQjdNSTIzOE1fQ11IOFYtSDM1OTotREFLPEYlOTdGWV09NlolPlY5QjZVTTkvIUAuCitNLUdJXTpGRTgzWClSMTM4RS41OUo6VV02OkZNQztVQTk6JEUkLUVBQC5SRFIuVEU/KzM5SDtVTU46ViE5CitNOFZNUjo1RSk4JFw7JlYpUjIkRFcrM0UlNkZVUDpVIF8xN1VbMiYtUjpWITw6JkVIPEchLTgjOFk7NylICitNKEI1Q0JHNTkvSCkkL0AkUCA2LCBWVylaOkYpSzxGLUI7RylSOlYhKSsxNFk+RilIOEYpKS5TXS0zVkUpCitNL0NQSSgjOU86JDVSQEgpVTokRSk6VklKOjM5JDxIOVI6VkBQMjVZSjpWLTgyVU1COiZdRjpXSVIyViElCitNKzNZV0A2WUI0NUlXOFMxQT5IIUozNFQjMjhNOD5HSVI4UzhJNiZJUjhQLThTNDBNKzM4VjEmLUM6RUk6CitNOFc1UjomITgyNVk6OCYpSzIzIF4uUlUkOkZFODY2KVo6VVFdPkYtQDYkRF8rMiA1KEZNWjtWTSkqNyogCitNOkVcXy9EVTo2RUFAOFYtSTxFOSw8JkU4ODZRQCBTXyIyNFU4LyRFOTYlRUg8RllXOkYpSjpXIUEzMlQ9CitNJlRVUjEzTEsqUz04OEYtQzZTXF8zNllcNiQ1TzZERUM6JilHO0clOTchTDsyNiUoI0EpJUBHVVIvQlRFCitNIDI0ITVAI146Vk0pLUZOKDtUVTg2VUErNjZFPi1CNTY+RVhWL1NQWy5TOFY7Rz1DN0ZZNS1EVUA6Ryk8CitNMyVBUzYiVFc2NU1KOCFMTTpGWUI6RSEpL1RdSzpWIF8vViElPEcpRjtGOUs8JDQ7KTQxW0FHPUA2Rk1ICitNOUZNUDdTXEkrNDVCOkVdKS40RTo8VylIOCVBKTI0VUM+Vk06MzZJSzQmRTo4Vik6NjVBOjhWLThfRikwCitNOCgpSzElITg4U0xALUMoWThHIUs2NUlGODU1KzIzXFYvVDBLJiFNPzwzXSkyJUEwPkZNQzlGLTg6Ji1BCitNOCVAXys1SVI6VyFKOjVEXzglTTo2RU1DPkZFQTM0UTs5RklSO0ZRJTQ2XUgyM00kOFYtUzo1NE0wNEUpCitNMSZFTDozXFYzNi1QMjI9LS9TITo6VklLOFRVOjo2JFYxNk04KzYhXT5HSVAyWChWLyAkSyAzXCBfRylMCitNNjNZRz83SUw2REUlLUNdSzozODgoRilOLlVFQDg2JTUpM1lIMTQxQztWPSszNklaOFRVOj5GREUrNTlBCitNOjVAQCk2TiNCRz04KjJVOT1XKUAyNEVIKTY9UjxHIUA6V0FGLlNNOTlYKV08Vi06OCNFJDpWRE0jQUBWCitNOUcpQzMyVSU2NEVCOzdJSTIzXSk4VzVaOEYpSjpEUUk4RUkvNkYlKTM1SUM7L1lCMjNdSjxGOU8+Jyk5CitNLEJUXC1DIVI/Nk1KOUYtQjZTXFsvVF1DMSBYLi1GLSkvVE04MzY5SzpXKUs4Vi1SOjYtOCxBQE0zVi1SCitNOlYtLzI2TU44VVlDOUZZTjpVQFYrNFFCOkYhSS9TWUg6NUBWL1giIj5XTUktQ0VJMjI9JTpWRSkvVF4jCitNPVYlOTo1RF8zNi1HOlQ0RzM2UVs4VjlKNlVFTD5HViI8JDIiLyVEITIwJUEgL1lYOCRdTjxHNVY/NylACitNNiQwVjxXQSkqMk0pMzMhSTpGOVs9I1EkL1JUXzlWWVM6VUlSQFZMWS42OV0vVDE+OlZNQSwiRT9ASFYgCitNNTFAQDY3KUM6NUU7OjIhODo3KVc4Vi1LOjRFLzo2TVU9R1FQN1U1Ky9FSUgvU0UkMjVJQzlGKEkrMzg7CitNL0ZNXTxVTF8vVildPkVJLDxGWUM8R0lJMTQ1UDgzRSkzN0tLQCYsWTZGOT47N1VaOkQ8XzUyKDs2RzlSCitNPEctWz5FTF4yVU1AOkVERyNCISkyM107OjYlOjlGWVU8Rk1COUcpUztEREsmIjUrOyYtOTJVRVw+Ri0vCitNNlYpSjtHSU8vUjReNiYpLzE0NF84NkUlLUQxWkFWXVo9RURePVcgVC9WRTsxNURZPTcpODZGTUM6NSAjCitNOCkoWyYiVSg/OCFTPUdJRzhVSVI+RixfLjYgITZAJUkgL1lXODYpUj1GWVI9NylaPVREOztXPUAvRiFBCitNLUI1NjhVTVo/VyVDL1FMRTI2TVI5RU1SQUcgVi1FTVI6VU1KPEcpSDEkMUtAWFojODJNJTdWKUI6Ni1LCitNOlM9JTZVTVo8Ri1CMjQ1OjpWKUI5R01YOlVZSTYmIVM6Vy1LOCRdTDxWKTkxIiAuLUctVjxGKFkvRkFeCitNQEREUDhXSVM4VilULlI1SD1UVS8yNkdeQScsXzE2LT42VlVaNlVNKTMjPSQ4VllOPTc1XUJGXSUyNi1LCitNOFVJTi8hTFIrM1E5NlZBQDo3LUY+SClLNyY9Uj5WRFkmIShcOyZBODZWJVtARixWNSYlLThHTVs4IykpCitNNjVFJC8kNF8yNThJJTJdWj8lTUY8Ji04PkdNQTY2TS8xNk05M1RQWS9GITo3VTUtMTRFQypRQEUzV1VNCitNOzgpTjgmITk5RURcQEJVNiAzXCE2QCNeOEY5Uj03OUM6Ni06NydJNCRFRV02VDU7PDVFKTpWQSg8R1VdCitNQjVESyUyRSU6VklCPTgtTzElSTo0JyFANkchUjojXFk6SDomPEQ0Vzo2RS8yJylPPEdJKTZVTSw5RzVPCitNNiQ0XjYnIT8zNilaQEc5RzhWLUs6RjlSPEYtKTQmLSQ+VyBCI0JVSzxGWUovQlUsPkgpLSs0MVo9VVk6CitNOVM4QDE2LSc2NUFLX0cpVjo0NSw5Rk06ODMpLDYkTF82RlFKO0c1Vj04KVo4VUU7OFYtOD5GXE0qMUBFCitNL1NFLTM3IVI2Rk1VPTZNRjpYIVIrMFguKzVJOjE2TUs9N0k6L0VFQTJUVV0/NUlJPEchSS8jOTk6NkEkCitNJiBYMjM3LSUyNUUlOCc5TjxWTUg2VUVSQFcgWS1DITg2VURFKzNQXjhVWSEqUkVCOkYpSD02OT8uNFVQCitNNigoTS9QJFIgMyAgX0YlSz8mWVI6JlFQOjZNVzdBQFk/VyBfMjclSTMmSU0xNklbPCkpWjUhTEsrM0U4CitNPDdKIzhENS8xM106OiRFLThWRTkuNiIjQkYsVilVRUs4JFVCNyZVXDomRUg2I11SOkRNOS9TIU85VEU4CitNPkdJXT5EUSg6Vl1CNyZJUzhTOFApV01VLyFATTsnSVU5RFRbLjY9WjEjOSk4Rk1DOlZdPDU0NTgzNU1HCitNPk9ZTjpXIToyNFFXOyYlKzYmLT4qM0U+OlYtTj03KV1ARl1BL0VJOzgnKiM2M0xFKjJETS9ERUo6Vi1DCitNOUcpSzxXKVo8UkQuJTFAVi5SVTs0JSFLMzQ1Qzo2JTk/NzUlOkZZUjojOFI2J0opNTFANSZUVVMyMyBWCitNKTU5WzxGLUM8Jk1LOzdWJDYzOF82NUhfKCI0VDE1TTA7VjhULjZBSzdGWVE2UlRZPFcmIjEiVCEtQCReCitNICxRQDtIKVY7RlFGPkghVkAmLDgmVUFJLUMhOkAmXTo6JFU6PVUmJkJHQFwrMlQ7KTYuIkIlSSc2ViUlCitNOCZNKSwkNUk4M107PkdZVzdCVSk4RkFBNlRRPzxGKU86JURfOlYgUDIyVDIgVEdCNjZFSz1HKUM2VVlLCitNOiRVMDxHIFktUzlSO0ZETSk1QVpAVy1BM1NFOj5EUF41NFE6OycpRjY2JFk4NUkoOldJTjxGTS0vU0VBCitNOFchSjtWSSwsQjRZO1ZNTjxGWV1CRylALUQ1LzM3KVU3RUUpMTJMSy9UTUA2RylRM1VJUkBXTVE8I1AjCitNKCxITy1SVTgsIikkMjRVOjhXJVI/Nzk7OlZJSjgiVEUuNzYqPCNQVCxEVVc6MzA4JiNZUjtGIUI7VklSCitNOkZWJj0kTTg6NiRWLSMwSys0RFkzJy01LURRQjw3LUw4NDErPVgpTi8gJDsgMzggX0M9Uj5HLUMzNF1dCitNQUc5XTwjUEkuNV0wKTJdWkAmLUM2VilINidJWj1GQT4tQUA4L1dKIjZDXTA9JU1XPlYgTSwmJTstRDVLCitNO0dJWC9TXSk6NUktMjNFQjEmLUkzVVlDNiMgVisyNEkpMjReOFZRSDNXNVo6VSVCOiVBSThDWUE7VllGCitNOkRERS9WTipARi1CMyVZWjpFQSkyNVlKO0cpPjEyKT44JFFKPE9ZRjs3PTsyNDBWLjZRQDpWSS01MiA7CitNMyYpQjxWWVxBVyk2L1NdKTE2KVU2VkVDNjNQXDY1WSkuNylXNjNdS0BIOVU3JTk4L1JMUjU1OS0qMShJCitNLUVFOTE1SU4/N01LPEcpQzZCIC4mVEFaPVZFQTg0VVI7JTRAKCNdQjpWQUM4RjlXPFcpVUAlTTo+VzxeCitNL0VFJS1DWF8yNllYODRFMD5HSUY2VF1JPFdWIj5WJCEmICQ1ICxMTTpGWUsyMjxQPVhJXT83TUk3QzklCitNNiJURzpGTUA8Jj0wMSVFWDhVOFk2NlhUKCNdSzxDRFYuNkFIQEhJTSozOUY2Q1xFM1VNUj4kRFYtRiUpCitNLjNMPS1FQSU2JjFDPCVJQDM0MCQtT1hFLjYtLC9GVVU+RFUlNlRdQTMzRUA8R0lKOkYkXy40RVVARjk5CitNOFdOIzxEVE8uViVUPkgtWzYiVF82JFVSO0VJOTxGSSgyMlRSODYpQjNUVVApMFhCKzMxSj5HNV0+RUk7CitNODVAVjg2TUA6Vi0lMjM5JTgzXDszJklILURRUj4nNTs0Jk1GLyJVLz00XE0mIUBXOUU1JTElIVU9Rk1SCitNPEYpQCxCIEszVl5ROlcpUjs1TTw6VFUkLyRFOjY2KUg2VVFLOVZdSzxEVSU8SCU4NiZRUDZERUE6NkldCitNPDNZLTxHKUY6NDU7PEZFWjpAJEsgMVQgVkQ1OzpGTSQmIkVLQEc1XT5WOUgtQ1lJMjRFSTM0MVVCJkReCitNMVZNTi0hTF4/VjhfMzZJSC9TOE0vREFaQVcoXzJWRUIxMiBNMTYuJDwlNFYxM101N0JUViwlOU48RFVDCitNO1QxNjZUXSUzJk1CMycpWzM1OUszVUBSKzAtUl9GJS0zNUBeL1ZBQzhGVUs8Rz1CNidOKjtEREUmUyFCCitNPzg6KjpWJTgxNDFOPkY8XzZHSTkuMlRfNSVNQjYjRVoxMkw1JTFNJDs1UTs+Rik+PVYgVjhGIUM6VikpCitNNSNcWzY1REAoREVJMjM5OzxHKTozNk1QMjM5JUAkRD0oIkUrOzRdNTI0UUI8R0lOPEVZMTglWUA6RyFCCitNOUcpWjhWJUMuNTVAMlVAXjEqLTY2RUVDMyYpUjpTRE04Ry0vOEdOIzokNUZARylOPENZLDhVXSQ4IlRQCitNNlYtVz1AJE0gMzAgX0Y5QzhWTSsoIlVLPkc5UD1WUTgqMl1PPCVJSS1CKUJCR0lOO1VNOCkyTUhBNz1BCitNOCchSjlVNEstQ11KPEVRJTM2XUo2Uyg7JiNFXEEnPF8sIz0vODM4SSs0MTo5Q0VDOVYpSjpWLFYtRVFCCitNMjZNUjpVSUIzNUBfMjdJWkBXIS04NU0lL1YhOC42KUY+R0lIMjcqKj01SSQpMUxZOSc2Jj5FSUE4NDVCCitNQU9ZWjM0MUo6NTRWMlUxLTgmRFs8R0FGLlIgWTI1TSQpVilCNDctTy1GKVA6Nik6OjZFLzJWLUwtQiE4CitNOkZFKTNWKVQzNDU+O0RcXzZIKTYlMTRNOCU4UDI2JTs4JVFGOydNLS41IUY5RlFSOkVROjpGTUk4IzktCitNPTYtLS9TRSUvREVAL1RVTjokRFsuVEBQNCdWIzxUNTo9NylWPlYkXzZWIF8zIlRFMTYuIjpGSCEtUCRfCitNIC9ZSzpXJUAtQjRNM1ZNWzhUQUo2MUA1MygpUzYyNDs1RzVWPEgpXzUxKEU6VzVTNlRVTDxGTUI4M1lPCitNO1VZLzY1NTs+JiRSJiE0WzhHQio6M10vOyZFJS0jUTY4Ji1JNkYpRzpHKUszVUE8OEVNSzZFQTg2VFU4CitNLUVBTj04QUItJi1QNiRFLy9CNFAxJ0ogOlRFOkBHNTUyM1k4NiUlRjtWPSUzNz02KldXXj8nKU82RDVBCitNODRVOjMnLVIyNFFLPFYtJDZGLS02JV06OEZRSjpCPTo7R0kpLjZNUzhVWVM9JDQ7MygpUjMkNTo6REUrCitNPCZZQDY1SV04ISguJiNcWygiNSw6Ji1AOCVZWjpUXFsxNi1SPkc1QzdVSUM2VExfLjc1WzpVSSs2RUUrCitNMzRdLDo2LUk5QlRAKCQ1Sj1HTVM4VUkoPkdVVzM2LVI8VkUpMjVFPkBGWVsgNUghOCAjXjo2LVc8I1hFCitNLUVBLTxHJSw4RDQ9JiM5UjpEREktRUk8NlUlVUM2WDgmI0VCOjYpQzpWSUMzNkRWNyZJLThWOFktRVlJCitNLEE0RTYlIVo/NylDOydJSjxCVF46Nl1CPkYtLThWTUs4VVlCOkcpSThTRF82VkFCOEM4WTE2OiM4IyFCCitNPEZNTDokRFIiMU1KQjcpKS43NUovUyFBOEVFQD5XKUMzVF1KMjFNPF9HNVQ+VilBOiYsXzY0QU49VUBHCitNMzY5QDYmLTssIyFDOkcpWj1VOFIxNilXMjJVLTpWWUM7JkxcI0M5VTpDRSU2JVxQLjcpQzY2UUo8VixUCitNJTI1KTI1NFQyNilBMSVBTDs2WVo4REUtOkg6IjslTTs4VFRQKzIpQkBHKUY2JUlDOjVNQTY2IUE7JihNCitNKCIhKTM1TUY+VzE4Myc6IkAmLVJCJ0lCNiZFSTQ4KS84QCU6IDZIIF9FSTs+V0lPM1YlQTE2LVc3RkBWCitNKCIgXzw2TTYtJEVJM1M4RzY3VVgxMiA7LURdOjxHKT42RF1PNiU5SDYlWVM2NVk6O1NcOC1GQTo7VSE8CitNPVZZVzpXNF4tRFVPMyZZQjE0MUI8RklCN1UhWj5GIF4vVz1POlZNOCsxTF8+JyBZOEc1RDxHKSwsQEQ4CitNNjgpVzZTRUM4Q1hWNkchOjM3SVIzNDVLPkchKTEuSTw9N0EsMzUhUDdVSTs6VzU6LUQ1QDYlSUo4UzhWCitNM1ZNVT83PSktQ107PEVFKTI1SUo5RkktJlMhKTxWQFk2Ji1DNTNdQzEzITo8SC1TPDNQVjYjTSs4NilCCitNNiI0QjMmTVpARylJLjRBXT82XS82Jk06LEJUVjhXVVo6JDBZOEclTDhWOUw6RylCKzJUVCEjXjI7R0k7CitNOFgpVj1GLU5BNzxfL1RVTjw0RE8gNDQhOkAjXiwjWVI7NlVKPkZMWTZHPUMzM1xJKjNZQzZFME0uNjlBCitNMSJEWTpGOVQtIiBFKzM5Sz5VTSQ6VylSMyYpUDg2TVE8JilSOVJUXz1XKUMtQzFLPFZRUjxGITg2VkUpCitNOlY5LTE0UUs6RilIMTY5WjMiVE07VilCN0YgQCYiNS04VUFOOkRdRkBFTFYmIiFAPkc9JC9VSS8sJFVJCitNOyZBOjokUEcnNUoiPFZNKV9FRVI7RUBWLUYtSjhWQVJARyBfN0VJJDM2TU8vQlUvPVcpTj5VQE0tRU1SCitNNCVFQzhWKUM4NDA4KzVNWj1VRTo2Vi1ROFYsXygiPTA/OC1cOFU5Oi4zXVM6VUk5LCBYOzcnSV1AJixfCitNLjRBQj5FSTk4JiUpKzNFMTpHKUwpUU0kPkglSjpWUUo9NkBfMSU5OCwiVEUxNik7OVdNUzlFWVI/NykpCitNNiVNPD04KVc2ICRZIDYgIF9CNE0xNDUwOzghTy40VVI7JU05L1JUVjEjXF8rM1lLPVVAXzI3IUI6VVhSCitNKCJMVjpIKUkyNk1aPTVFQDxWUUM6VkUtNCZBLzY3LiA6VDBNMzcpSzpHKU88R0lbOEZJSjdVQFk2RiVCCitNO1RBKD0zOC4mU0VKNiVNOzEmWUYpMjVCQkcoXzpINVo8IzhNNjdJWzgkNTs4IzhWMSYpVzxFWE0lMUBZCitNOlVJQzZeUVI7Rk1CNTNdLTpWSUI8R0laMjYtQzEkXUIzMjRFMjctUjpXTVAuUiEpOjQxODhWMUs4RiVJCitNLyJFLTxXTVA6ViVCOlctUzYzUEkrNk4iPlZBMThETFk4ViUlM1M8LiNDOVBCSDlKNlVYUDU3SUs6Ji1QCitNODNMUDI0MTA2QUwuJzYqIz5GSTw6RzU8MjYlSTo0MCMvWSRZLjchUj5FTSg8V1VGNCcpWzhFUUs7UCUtCitNIDVAIF9ENFYvIzEpOEY5UjYmUU46ViVAODRNQTI0RTQoIVUlPiYpKSwnKV86VkU1KlJVKThXSVo+J01bCitNPCRFLTxWTUk0NFU5LCMhODtXOVs8RkE1LVRdQTEmKUQ+SDYjPEY5UTpGLS82Il0lO1YpQjpVMFAoIiFCCitNN1VYVi43TUImUTRXPTZdJzomQVU/NERNMzVRVkAzRTs6Vi01KzM9UkBWLF8xJDE5NlYhQzpPWVU6Rik7CitNOEZNMTlGSTo3RyldPEctQzM2UUEnMUA4LUclPDQnSVY0JEVPPVVBLTg2STw2NylTOFJVJDlGWUo+WCFSCitNOFY5WzxFQSQxNUFOPlVNLzomKTo4VUk4M1MwQClSXFk9SEVQPCZEXzMmTTs6Vk1bQDZEXzI0RSsvQUAuCitNJlNdTjxHKS84VzlAMjYhSzhGJUE4VkRSJzQ1Rj1UVS08RykkMDc2KkAlTiIvVUghOEAlUCAvWTktRDRfCitNNkZdLDY2KVo7RSFKPDVNQj5GKUM5IzA9LUc9TzMzOU9AJllDOjRFJC9VIUM8RzYiPEVBKTM2TVs6VUBfCitNNTMgRTYmWVY8RklLNkVBQTEyPTg0JlogQUdVTkAnTU46VkBbLUVZOTpHPUM4NDAyOlVZKSZSVUMtQEQuCitNJzZJWjhXISQ2OEErLyVNOjwoKTkzJloiPVVAUjMnRVI8JkUpL0NFQTwmO148JD1CPDVNPDhWXTsxI10+CitNPTg5WjpTXUY2IFg1KlNdSjZEMUs6VVEoPkgpUjgmXVAuMylLPEZJJCwlQUI2RzojPlYtOj5HSUs4NUE4CitNN0YoWTEmLUo6RiU2OlZEXio0MTgtRFFLOFZNTzo2SUE4NlExPEgpWjokVUI6NUBULSMpKTolSTo2VSVOCitNPCYlOjYkMS02Vk4hOUMoSThXKFkxN0lILUYmI0ApKVdAQyBQIDNcITpQI14vUzk1OCZFUjlDXSQ9Vk0kCitNNyZETSwnPVw2VUBWKlROIz1VQFk8V0k+NkVJSDw0RSU6NylOPzctJTYzRSg/Ny1QODNYQCZURVpAVyk7CitNN1Q1Oz4mIFk2Jik7PTdBXTlHOV0/NzVSOVNZKS0mLVI4RiUkJTZdQDJRTF86JDBHJzFNQkJHVVs4NUIiCitNL1M5QTwnSiMyMjxSPkhJTjg0NTw8RzVXNkNMRTEnKTpfRixPMyghUzhWKUs2RDBSLCY5XDtGSUI4VURLCitNKjRFUDpWRTk4JEVLNlc5VT5GTVo+VERZOFVNKS1CVSk2JFVTPzdVUjpGSUI3JkU+PyZROS40NS02Nyk2CitNLjYpMDIyVTk6VjktMyQ1QzhVWFY6Jk02MTU5KStUNUs6Rk07NjU1KTNWTVAuM1xfMiZNTDZVRF8rMihQCitNPEdNQS1DRSkqMyFSMjIpQkImWVRAWClDLlAkRSA2ICBfQ1xcN1YtUzxWRSk4J1FTOkYpQCkxQSxCJiUlCitNKCFMWT5IPUAsJklSODVJJTZYJS8uNk1SPFg+IzhFXFcyNyFGPCYkSSNAWE04R0laOFYhJThYKUszVi1SCitNOUUtPEBFUUI5R0lVPydJOTBCVTs8RUlIOCM5VzZUUF44KCIgOlI0KS1HSV09RylCQFVEUC42SVo6Uzg7CitNKTVZWjpGKFYyN01aPERVKzE2IUoxP1k4LjNFWj83KUIzM0UpNTJVLT02SUM2VUUtKzJVJTZWLU84VERNCitNOFZNVj5HSUo7R006NjcpQy1CRFAsRDBfOFcpXUBHOVM6VUFANDcpUjYjOSQ1NDVSOiQ1LS9DRE0zNylTCitNOFQ1JDZUVFAtRVFQOyVIXy4zOSU8Rl1ONlVNOTI1QTA9M1hFLUM5QzpVSTg5QkQuJENFUj1HJSkvIiBNCitNOjM4Mi42SVo/ODoiPEVAISxAJUAgL1k4MTZFOzpYJS8uNiojPUdNSTYjOFw2WC1QLUFAOC1HTi07I11BCitNOiVJLDdWLUs2I11LOkY6KkNXKUkvViFBMiclQSoxNDgrNFVKOlZNSC40VVs8JUEtOkY5QDM3NUs4RVFGCitNNlgqIjwlSSk7Vl0sMzZBPjhFTF44NlFOPyc8XCgiVTo+R0lGOEc9UTM1MUw8VkBNJiIhKTY2LSkmUlVJCitNPUZNLTYmLVI6RFdeOzNEPTQmVVI8JERAKzVATS1GSU48VU1AOCNFPjg1SS03JkE+KzVBUjtGViI5JjlaCitNOCNFRjxDWE0sQlRNLlNFMT5YOVI8R0lCOFZFQjhUREk2NyUvOVcpTDpURF8vU0VCPEZNLTVGIFkoI1kkCitNOFVZQjEyNF8xNjlVPkYpOzYzOSk2Vk1BLVRNQTxXPUs3JkRbJiE0RTZYLjE7JTg4KzYlOSpTWUNCSFYqCitNQEdNTCA0VCE4QCNeOjVNTDM2OiMyUzlKQFZZXTxVQSk2Rz1bPCRESyozXVo/Nk07ODRVQDE2KUo6RERUCitNOFZBLz5IVVY6I0UsMSMhSThUMEAoI11JPFRVKDxWOSU4Vz0pLCRROzxHSVY9NllLNkRVUjxGXUI5JylHCitNLjVBOjhEVSkoQ11PPEY5VzNTOSszNlYjPEY5TT1UVFk6NylILyJEOCxDXS0vUUxFNjYtOzg0VUs8RkktCitNX0Y5OC0lOTE5Vy1JNTRNLSsyNUI7R0lMOEVIWTpWLT8yNDFAODI0WThHKVVARVkwO0YsTTE2KSkyUzhUCitNKCJEOylWKV08RilVPFZNUjpUNFYpNkIiNCRVQkBXKUE4Ni08NkcpUjZGLVI3Q10/NiZNQzZTXEArM107CitNQUg5UjMmLSkxNl1SOFNdLzpWKUs7Rk1LODNQOCZUNVpESClBKTJVSDwlRSk4SC4lQUgpXUAwJUEgNUwgCitNX0VNOzwnLVo9VEU5PkgpTj8nOUA3RUVKPEZZMDYjUSU4Vk0tNkVIWTYmJUI5RyErJzRVSC42OjFARiBNCitNKzU1KTg2TUYtQiBWOFc8Vik1SU82VU1QNiMgXjVGSVo+RylGOkYpLThGKUA2RilKMjFNKTg0UVI8RDBFCitNOEdNUjxEVFYvUlRPOkcpPDgnKUw4JkE6OFY5RjEiVSk4NVxcKzRFKTE1QSg6Vjk+OF9VQjZFRUs4Ji1GCitNPFcpVDojOEAzVlFbPTZNLS42SUQzUzhNLjYkXy0jITk/OClOOlchQzJURTszNiUrMSJUSSgiIS04Jk1ICitNOkZRUz5GTE0lMjVDPkZJKTE3LVI4Vi1KOkVFSDlGTUs8RklAOEVJSzxWUSkuUlQ9Ljg6IkBFTTsuMlVHCitNOyVEXzNVTFkuNFVCOlZNPiYhKE03JllaOyNdKTpGWUk4JFVGPkAtXSA3KCE4MCJPM1RRTz5HXUArM00+CitNQEdVTjpWKTs3RUlKOyVNQDZEXTg2REUsOCNYXjZXKUw5RTQ1KzVQWTZILio8IjQ7MlcgIz1fWUMvIz1DCitNPkVEVC9EVTs6Nl1BMjM5NjZGTUsxIlRZNkgqKkBGQTgyM1xNLUchUC42Qio6ITReOkVRTzYjWTUoIiEkCitNNiNFODxHSVs8RilMOjZJSS1DRS0zU1xbLjMgVi9EMUw6VVFXPUZJOzQkQUg4Ri1MPzZZKygiVUA+R0lKCitNMzRdUjxGQFwoIkU4NlVEUi43KiI+RylQOUYhLTdVSUs6NERNLENEXzo2Kys4RylJNkcpVToiVEUxNi1GCitNPlYlKTM2LS02JyFNNlVJJDpHTVAzVFVCOlVNQjxGITU2MzBNPzY5SjxHIFsmU1lKOlVBQjZTKFItQ0VCCitNOjQ0QCYiNSk2JylKMTRVQzhFTTgvVSVTIFdUIT5AJUogKSE7MSYlVDsjWEUqMyFVQEYhQzo0NUYhJk46CitNPDcpSzcjRF82JlheKzNdOjpUQTUtIzBfLUQ1RjwnPEUmVEwjPE9ZSTg1OFk4WC4hPCVcXjM3NVo6RUxJCitNMjVJODlCREA2NkldQTkpWjIzOEAmIjVSPVVBO0JHPEkvViUsOlZVODgzUFw2JUBWLCVRWkJHSVo8Ri1LCitNOkYtQzZVRFYvRERbLUJUXjhGTTlAKDojPSVAXjYlSTo8SClOOFQwOzI4IiI7JDU7O0ZZSDEyREkyNVlSCitNMlNdUD1HKU47Jk06MiRRJDhGTUAvUzkpNkZOJDhVIUI7IC1CUiYtNC9GQUI3R0lXNiNcWys0VVc5Ry1LCitNM1Y9VkAmIS85RylLNkcpUjM2IUE3WCk4LEVJQjIyIE06WClQOUY8XiszOD0yNTRFLjQwXzY0XVA4QzhQCitNNkVETS1FQUAzNVlVPzAmIyA3NCBMJ01DMjYlKyZRQEkvV0FNNkY5TSs0RVM8VlFJOlZZTDZDOFYyNyE4CitNL1M5JTZENTg5RkUkLUQ1QjhVOEAmU11TN0AtO19GIFYtRjokPlc9QTZXNVs4VUhNMzYpNjIxKDgzNylGCitNPTkqKjlSRC4jQTUwQEcpQj04IUE4VUxPM1ZJSzhTRTg7JiBcJlMhU0BWWVY+RklLOlYtSjpWLTgvVUE4CitNNTNdNTokVE88SDYmPkYlOTEzRSQ7J0lVOEREMis2OiI6Q11CPEZZQC5TKFQvVEE8MzMhQzlGSTo0Jl0lCitNLURFKzg0XTo2I107OCYhQTVMVTk6RU0pMzVBQjhWQTo4NUlNPVREQCUzRU8uNilSOUZFRjxGLUk7Jk1LCitNOkcpUzMzXSU8KElLLVM4SSghNEAzNyoiPEZJRjNVMFsxJExXL1RNQThVRUI4M1xHMSJULigkNTgrMyE7CitNOlAlXSA4KCBTWSlbODYgXyYhNDUrNyU6MyY5VzIzWUk+RylPPEVRQzMzTE0tRi1JO0YlQzZDXFk2Rkk5CitNL1ZWIEFSRDgpM10xLjI8VjhXISkoIyFSOEY5TzhWWVo+VzxeOEZdNioxNEAxJyk5NkdJXT1TMCMjT1hWCitNPEclUj5GTUI8VixeLjVKIDoiVSw9VikkJiE1JTxXKTk2VUVLOlUlJDpVISkvQ1k1OFVJMDtFTE06SEFcCitNN0VNSjYhTEI3ViFKOEVASygkMVk7RU0+PkZNSTIzKFsuVDE6NkVBPjZGSTosJUBWKjM5JTtVXSQyVEUtCitNMzRFLDM0XVEyUlRWODRVSzhWLVAvVSVQKzBYLis2IFYuNFFCOjZFLTE2TUgxNlZOOzZJWjpTRTo9Vi0tCitNL1JESS9GLTo1IlRZPEZRUj04LVgzVEU4MjNFOzo1QUE4NEUpN0JMLiZSVTgwMjRNLCAlSyA4SCBfSFYiCitNPEY9OSpRQC4oJU1QOiVBSzgzXS08N0laQEdNOzZEMFItRUFKO1chUjwmJSQ4Vyk4M1cqKkQjOFQyNyVBCitNLUFAOzgmUSQoIylJOCNdOjM0MTE7SCxZOEcpQyxCIFkzN0lGODZFTjxWOFAjQFhNOlZVVUBHKTk6Rkk4CitNLUYlXTpUMSRAJl0pJzE0RTMnSUs2RFVCOlRUWTtUUFApUykpOlZBKDpGTFYzP1ojPTRVKTZWTFYtRV1CCitNNlRBQzszOFY6NjlLO0dJQjcmWSsvQzklOFY5UztVIiA+Ri1OOUJEVjE3KTgyNU1ROiREXjIzWEc3VDBNCitNKzRFJThGUUM2RUFQPDQwQCczMT44JU07OEVJSS1CVTY4IzklNCZWIDtTRS08RlE7NjNcTS1EMF8vUlReCitNOEVZTj05IiI7RyFJNiNFLzYkRTs4I0UpPVVASypUTUk6M1IiJiBYIS9QJiIgL1ldPTclSDlDXEsmIkUpCitNOUZdOS40NTgvRUlGPEc6KjwmIT4vUzkpOEZJUjxXSVc2JklLNkZBQz04LS82NV1bPSQwSSs1TUgvUiBSCitNNkc9OzZVWFYsJEFGNiVJSjskXFYxJEVTPFYpOjsnSUo5QkwyKzYpWjs3RVo6VklPL1IpQD5FUT4sJylKCitNNUMpIS8iPUI6ViEtOCZdOjE2STorMiBWM1c9WzomITopUyNePEchJDI1QUM2RUlSPEZMVzZXTFYpVTRZCitNNCUhSjpVTUs4RFRWMTVJPDxIITo5R1VHO0ZAXy1ENVo2QzhXO0ghUDI1RSQsRUEkLVVFKTElRVo9VDUlCitNOEcpOjEjTF82JU06OFctOjMjXSQ2JjhNLSRFQjlGSTs4VllLODYhQTJWJSkyNTBAJzVBLzpHIiZBJk1WCitNQSZRKTY1QF8xNFRfMjdJSC1CVSU8SCE1QEBYLiAzXCE9MCNePlZZTDonJUYxIkRLNiYtQzwiND0xJEUpCitNOEZBMDtGUUo4NERfNjVJQj4mWVpBVyFMOyRdSDsnPV42ViRZNlc9STJWJVA9VURJLUQ1UjxGLUk3RTUpCitNOCchTzZEVS02Rkk6OkZJJS1EXVo+Rkk1KTMoWTpHXUI4R0lGO1QwSS9WSUI1Q11LPkYkTTElOF42RkVDCitNMzVBWjgkVUMzMlRJL1RBUUBHPUY4Mzk1X0cpTi9UMUA2VUEwOEY5UjomLiM3QlUpMlVMXy43JVI6VUk5CitNNiRVLS40ViI7RUlGO0VZQzYkMEc7RiBWLEVBVzpWKUI2ViFIMyNZSTgzWFQ4Rkk6M1RRSjM0NSkvVFUlCitNMzYhUzxEUTYvREU7NUNdOjtVRTo4RylLNCZJUTZWKVo4Ri1ELSFUWSlURT4+SC0tNFhKIjhGLUAyM0xfCitNMjZGIzskREUsJk1bLygoLiNAJTYgNzQgX0dJSzYkNUI+JUhbL1VBQzg2TT41NE1AOCRBTzYjXS08JiRcCitNKjZFRjdFSUZAV1VOOFc9SjhFRUtARi1GLEM5Njo2RiE8RylJMjVBKzhIIUw4VilJOFclSztHLSkpVTlaCitNOkU5OzEiNFY8R1U6NSJUVjYmSiA4RU1OM1VNQjdERUs8RUUvPEdJSzdCPFAtRF1IOFRFKT5HKVI6Qzg7CitNJlM4VjhISVo3RkVBOF9ZXz1UXUA2RiU4MzVJPjpHKURBNzU6NlZFTzEiKSQ8Ny06MTVFLTgzOSQ+SClCCitNNCRVQDZUVU43RUktLUJVOz9WKTs2NDUlNkVEUDJWUT4tQ0UkODZBLTM1QSs2JEU4LUMhKTpHSVI6RExfCitNNiVBQDo3KUEzNUlSOlQxPDoyVFA9V1E7NiM4SzUyIEA1R0laMTRVXT5HKVI7NkRNNTQ1S0BWTSkmU1lYCitNPkRGIiYhQCExICVKIC9ZWzskMDssJy1QNjRMUDZXPUs6NyVAMzY5KTM2QF8tRiUkKTJVOTY1QF82VylLCitNOiYlSj5HIFAuNy1XPCRMTS41QTs5VylDM1VNSS9WKVo8RUheMyVZUjM1IiI5UjU1PVchJTY1QFwyNyFbCitNO1VYUikzRUJARyFKOUYpMDdGTSk2RzVDOEdJTjhXPFYvIzkpPEZNLTVHKVo/N0k+KlIgTS5VSVZARjlLCitNO0VbXjhEQFA4VFVDOCVNLzZGKUo8RllaO0YpUzxWUSkxNjlbNkRFJDE2SS86NklaO0YsWTI2QSU3R01aCitNPDNcOy1HSUM4JUBbKTMhSDIzIVI+RkUrKzNZODYjWSQ1MzhQPENYUi1GJUI7KCE4MSNdKThXLVM6NE1ACitNPictSjhFRE0pNFIoODQ0QCo0MEkmI0VSPEY5Uj5GTS03Ry1QJlJUUDhYKUsxIUEpQFhJUUBFQSUgNEQhCitNN1AjXjxHIFIkQVU5OkYtQTEjRUI4Rz1PNURFOjYjRSk4JiU+LEFATTglQF4vVUFALUQ1RzZHKVAvIjUnCitNQFcpUDJTOTg8Ji1BODRFMDlDXTo4RThZKjJFLzZUVTs+RzxWKVYhQywkTT82NUlTPTZJOjEyVEUrVjldCitNPEZVSzNWKUI4JUlLPCc9UzcmTVUxJVkkMTZNUjEkMUY9NzYmOFNcXy5VRUs8R1VSO0dVSV9EMFYtRF01CitNMTRVOjhWKUI6JiFLPEZJKDxGWUo4JFU6O0ZJUDVDRSk2VylSPkcpQS40RU82M106PkgpTSgkQVM5RDVCCitNPCQ0WTYlQFs+WElaOlVZNTEkTE0pMlQyJlYpQC1BTSQyM11XOFVFKS9VTUtANUBeOEgtVj5WRTgtQ1FBCitNPVZEXCgiRTQsQjRNM1ZJRkA4LVAuM1lSPkJMOCZVTV82VDBJKVYqKEBYKiJAICUvIDRAIERGSUsrMjxFCitNLUMhJTgkRDsmUVVVPTYtQThQLTlfRkFXOiJEQC0mLU84JDE4LyFARTJVRVA6VUBFLUctUz5XIF81RylcCitNOjRVOjM0NF86NiBeKTE0STI1QF4xJklaPEQxKS4zOTg6JUlDPEcpVztFRF8rMlVDO0ZZQjhVTUg2Ri1QCitNOkZJVTpUXTo6I1lJPiVJTz5DWE04RkkxPTRQVjYjOF84JllaPzZZWDxENSs6NllBLCQ1LzI1XU0+Rk1KCitNPEZJQTpXKUo4Tk1ANiJdJD04PTgrNF1VQEdVWjZDWS08RihfLUZNWjpSNEU2Rl07NlZNOC40RSU2N1YtCitNPkYpVzwmKUkxIkQyKCNROTtVMDstRkU7OlZRQzYjRS05SC0rLUZKIztHVVM2NEU4PCctSzIzKFQ4NTRXCitNLyRVOTZHSiQ8UzhANCc1JCYgWFk6RUBWMSJERzQnKjJEQCVMIDUkIEJFIVM2JVk+NTJETTYjTCMjT1lKCitNPEZZWkA2JF8uNikwOCNMSSs0MUo9Vi1AMSJUXDU2QVc8RVhFLVZNUj83KUE4VU1GPlYpOy9SVFA8JzU1CitNJiBYOzEkRE0mU1lOQEddNCczUS04RVlSOlY5Wj5HKUwyUzlCO0cpLDEjOUk4JDFIO0gpWjQlRSkrMj1JCitNQiZZVUBERDI2Ryk+MyI8RTIzTFIxNFVGPlZVTjxDRE04Rz04KjJUViZTWUs/N0tTMTctSzhFUU48RkFDCitNNUJETTFXSVIrNFFNPzdJUjM0NTs+Ri0rL1YtVTg0JFQvRFU7OjZdQTIzREczVzYqPUVRVjxGLVM6NTRLCitNLEU5QjtWJSQ2J0lSOjVNLSsxTVM+Rz0pNjcpXTtHUVY4JVk5OkZZSzZFQFw8Rz0+MTYtQjY2WVs8JERJCitNLjZBKSlQWFY6NiRNMSNQNSZUMV1EQCVbIDRcIF9EVUw8JU1BOjVRKTgzXEAnMTVDOEYtWkBHITgyNlUtCitNL1JUXDEiVSg6Vy1SNjNdODYlWVM+VixWNTVZWkBGTTs8NU0kPEhBWjgzXE08SCU4JEBYNS9GJEsoIjVCCitNQTdVSCszOSw2Ni1MPVZRTzw3NVo4RUFIOUYtQC9SISU6I0UlNkgqIjEjWFwmIEUkPkdJXUBTOEU2V0lSCitNNiI0QDElQTYvQ006PTVROT9fWSsqNDVQKzVFJCggWFY8VzlSL1ZBUDhFSUs7Ri05NkVZPjM2SUIrNj1XCitNPkc1QjEkVUg6RFUkODZdUjZFOVA3U1ktPTdJSjZTOFIvVkldPzZNTTxGKVs8RjhcLURFOTozXFY2RilSCitNPkchKSpSIVo/ViBQL1VZVT02WUs4RU0+NkZJTDZWITouNkFOMjYpWjpWOVo+RkEpL1VFKSowWEU2RkRWCitNLUNYNSYiNiI2N1QhQEAlOyAvWUM+Rz1BM1YtTzhWRSUrMyg4L1NZMDxIIVM6VkVSOlQwRS9WOF8uNiFSCitNPUchOTZEVS04VylJODckXzcnSiA0NylOL1RBWkEnIS0xNzYiODFULiYiVSkyUzhWMzZVMzlWRSk4JVFLCitNNyZNUzxHKU47RUkwOkVJKTg1WEUtRkFAMTVBW0BGQFYmUiBLLCYpSz5IKFYtRk4iPkYsWyUzOTk8JUkpCitNODcpQzEnKz44UzheOiMpWzwiKC4rNk1SO0YhSDpVTUM6VlVJMiNZQz5HKUAvQjVCPTdVUjMzKSU8JkxeCitNLUYpWj5WISk+Vz1BNlc1WzhVSFk5REUsO0gpVTpGKSg6Vlk7NjVFOzglQFYrM0RQMyZNUjhVWTU9JlBeCitNKTJVKTpHKUo4VkElOUAxS0dHJVImVDVILCNFWj01UU4/NylCMjRdKSkwWDgyNiRNKEFMOy40NTg7QCYjCitNIDcsIF9HKVpAR0FIOFctUz8mQTgxIkRAL0RVLTs3SVI+R0lSNiM9KTxWJFY2JylWPkchQDI1NSUzJFUtCitNPEVAWTcoIVc8Rz0pKTUhXDwjRF89OC1YMSMxJC1DXUAvU1lIOFI9KDtURUs8Ri08OFVZTjxGTToyNUVDCitNOjRNQjtUKEkvRThWMSdKJDxEMDs2JURHLjRVRkBFNFA4WCldOkREMiZTWVs7ViVDPEZdLTZfWTsvREVICitNOUdNVS8hQE07J0lVOkZRSzhWQVI5RikpKVRRXT5XIFYrNilWQEdNNi5UMUI7VDBWMycpUjolQUI5Rl1DCitNO0dJWz1SKTg2IlU5PTcyITpVSUs4Qyk6OFZJSzYkRTw2JE04OCRROTwnQUEyUUw4KjNdQzomKUY7MlUpCitNPFctTDo2TUAtQylGKzFVOTpFSUI9Ry1JNiVFNCoxQEs4NylBMSIgOy9WRiI8RkwhPUAlVyAvWVI9R0lbCitNPEY5Uj1ILVI8RzBbJiM5KTM1TUs8R0ojPEYhKzYmLTktQ01CPEdVWzg1RTktQlRNLCYpOy9TRUI9VUVJCitNNSIhJDxHLSwvVkoiPkYlOT4mOTk6JEUlOiYpKTYmISU4Vk1CNkVNOztHSVI6REReMyZFQDo3TUguUjxeCitNKzJVUEJIKSkoRFU5KTJVKTg3KUIvRi1dPkZZSCoxNFQ4RjlLO0c1VTolT144JTk4OjctUjtGRE0pNUFaCitNPzVRLTpWOiA/Nkk6MjM5LTpXKVIyNTFCOldWIjtWQUs4Vk0tMjQxSzhFSSk4I106MzQxMTtILFsyNiRWCitNMlZdSjxGKTg7JihQMTYpRjxGLS04NFU6OjVERylVRVs4I1w4JTE0Vjg2IS05Rz0pL0ZFWjxHKU82QzhbCitNPCVEXzYnIUg6NyFLOlVNSTgzUFIvVkFXOlYtOyZSVUNARylTIDZQIThQI142NylKPFcpOzpXPVs5RlYoCitNNjIgWy1EVSwzNk1OPUZZTDg1TTszU1xXMTZKKj5EXS04RTRSKzU1UTNTPEkuNl1AODRMOylWTVs8JEVPCitNQEZRNi0mLVE6VylINiVJKDgmMSw4Jyk8OkZNQzdGOVo8VkkkKCNFQS42KVo8Ri0pLUIgODMoXio8JUUrCitNODREXzM2LUg2Q10tPEZJUjwkREcuVjknNjZdWj1HNUxfRi1BOUZFSztGOUoyMjUpOlc5Oi1EMTA9OClSCitNNlRVOTgmLUc8RU1JOEYhQj8mRU1CJ0lSNkYtUzo2JSktRz07NlVYViwkQUY6NkFJOyZJUjsmTS0zJilQCitNNjQ0WTEnKVc4Ri0lLjVAXiYgWD0xJj05KlFALiglQU86JUFLODNdLTpHOVY8RixNKjZNQzNVJVU9R01cCitNPVcpSz1WISU2JiE5OEZBPDsyVDsyOClKPkAlTyA0QCBGNE1CMzRRUjhEQUc8RyFbPkZNNS8hTEAoI11BCitNMiNFJTxGLCM2L1hfLEFUWTpYITgsI11OODM9Qz5EXSQvVEVDPldVOSghTTo+Rz0tPEhFUzgjOFk4Vk1CCitNO1YpOjE1OUAuNUoiOkctTDlGTSQ4VlFBL0FMXzYiNSw5JlVSOjREQCNCVVk9NzlRLjQ1UzwmKUI5VDVHCitNM1VFQjs3KTkyNiFSN0NRKTYjRSc+RylLPEZRQzxGSUY4NDElNkZNQy9DIF44RyVVOEVFOzNVOS04RlNECitNOEYtOjwnTUs2VllQPTNFLEBGJTguNUFSPEYtSTdFNS02VUklO0dJVjtHKUIvUlUpQCcpOC5RTFk/NylMCitNNkRFOSsyIEclMU1IOUNcSyYiRSk4Rk1AMjQ1OC9FSUY8RylQKlFNNjYiNDsuNV1SPyghSztHLF8sJi1SCitNNlRMXiwlQF4rMlReOkAlVyA1QCBSNl1KMjQ1SzwkVS86Vk1OOjYhQjlDUFAmU11XMzJUUDgkTFYxNk1JCitNL1I0RTE2XUkyUyFGPiZFTD1GRTgxNU1HPkZdJS5UMUk8Rk0tPEhJWzhFQF8vVUBPMzVJLTg2LUk2RFAkCitNPE9ZPDpUVUM6ViE1LEM5Pis2ITs4RklMMjFALihFSS02VTQ9L1dJXDlFSUA2JiBZKzVJWjxFTUE9V0lDCitNNlVZJChCRSc4VUlKOFRVODVFOUM4JFU6OEZNOy40MUg8RylKPCYpOTEjWTk6Vi06MyZZVTxGTSU2RzVOCitNOCc1JS1ENTs4SCFMOFYpQThWRSsvVUldPkYtSTZDTEUyNz1VO1ZYVis2XUs7JU0wOzQyUylUMFAmVkFRCitNOUQwSSpURUE4ViEpL0Q1KTI2KUM4Ri0kLlVBQyYgRDgrNFVOP1dJTjhURSs5Vkk+PCVAXDEkTTUvIjUlCitNIDcoIThAIyE8Vk0sODc9TDg2JVg8NDUlMzRdQzJVTTUzN0lBLURFOSsyIFZAWCVNNTMwVjYlRTk2JylYCitNPVZZSzwlSF82VU1NOVJUTTVHIVIzMj1YPkc9OjMmQUEzMzgjKz9ZQTpHIVs6NFVCO0dNUjslSUo+Rk1ACitNL1NdOTI2IUM6Vk1KMjFAKSxFWE0rMiApL1cpTTZEVTo2JUBNJlQ1UjlEVUM8SCk8MiZAXigiVFkyNDUvCitNMyJVJThGWUY2IzhNLUYpQzIzOF8zJi1aPTc9QysxTFY6JihFMzc9OjgnPFkxJiIjQjZYVis2JUM4R0lSCitNNkNZLDZWSS0vVi4kQEZNLzEzOFY2RjlLPVcqXC4zOVA8Rl1JNjdJVTJVWT4uVDVCPiVIWy9VQUA4Vi0+CitNNiRNQDgkQUk2VFU5MTVFUC5RVD0oIyksPEhBXDNURVc+RylSPkZFNS9TWUk6I1k4IDVAITQgI0M8JDRQCitNOFghQjZHTipAVUReMjVBQTE1QUEzJk1JNiVBJCUwWDtAOEoiPVYkXy1CRFY4OEIiPTcpRjpUXF44M10tCitNPCRETS9WSU8tQU1QQFdBLS42RVI2IzhAJlJFKTMlSVpBNUhfN0gtWjxGKUs+RzVLMyQ1NTElQS04JylaCitNOiVYUi9WQEUgUEdeKEYpXzgkNTgzNUBSKjQxSjIlQTo4SClPNkVIXi1DXSkyNFUvMjJEUjNWTU84JDBSCitNLSRVLTEzUDsmU11aPTdJUjEhQEA2ViBAMTcpQDZGQFkxNiFWPlYoRSs2QTk2Rik2LjJESTNVTFk2JyIjCitNQTgpOzI2ITg4JiE+PFZAXi42TUs2VUlQPEdJXDxHIT8mUyFTPCVFKy41TUs6VkVROCRVRjI0VUgvVk0pCitNRkQ1SzdCREspUlRQNlgtWjVFRVM7RylOQFdNQC9SPUo8VEUlIDQ0ITgwI0M8NDA7LjcpSTM3Ki1CRl02CitNNyRFOjo1RSw2JiFMPDVNNSlQWEA+SDoqQFc9OSowWDUuOCosQSdVSzgkTTk2MzkpOyZBOTg3JU8yUjVPCitNPkctOTYmLUY4IzhAJiIhIilURU5BOElLPEdVWjlGKUw+RjlaPkYgUClVTTMnNFVaOCcpTkAmQEAgUTdeCitNKCM5S0AmLUAyNUUpLURFPzEkTSw2OC1QOyZNKTU2JUM4VERfOjVQXDEmLVo8RiEpL1M4UikyRC4jQikwCitNPkgpWjgkJFs0JiBWOCc9QzZGIFYpVUlVPEVEOyo1OSk6NiBeKTE0STI1QE0zNz07OShBLC9HLVo6JiUxCitNOkZFODZGWiI4I0U6O0ZNUzlFXFkkQVU5OkYtQTEjXS84JylPNURFOjYjRSk4JylMRkYlSjwzKEkqMzhcCitNNldJUjMmRVI8JkFCPUhJWjYjOUM9ViBfIDJUITdAI148NUA7KCYpUC40XiZDRyksMTRNOj1WRSsxNF1JCitNOlU5LS8hQDg2RylVPzglRiggRCkoRk4sQTgtUjglRUE4RiE7OFRVLTsoKiI4VDVIOEYpSTxWTUM2IzA4CitNJTI8TSU0RTs5SCFVQTdVUTlGOVs8RUVJQEc8XiglOSgpNEVKMiYtOz5HIFIsI1BbKlI1LT5WKTg2JEVACitNMjQxLTE1RSUxOEIqO0YtKDI1TVJYJylALjUhSTM0NUg8RylCOEVEXighQDUlMVRSMSVJWkIlRFY4Jk0tCitNNiZOIj5GSTk4IzksO0ZNSS9VWUgzNyFVNTFALiZUMSkvRUVKLCM9Ty9CKUNCR1FVOCYtSzEzTSQ+RyhWCitNMjctSzpVSF8rMkxFLUMhJTgkMEUpMzlKPTYtQThQLTlHNkFKPEchUz82RSEpMlRZOFdNUjgmJTk0NDUlCitNNkdWIzpFQUI8RyErIDJUITNQI148VlQ7JiQ1SDg1RVJCR0k4LyRFJDpYKUMsJF1ROFRVKS9TMFIuNUE+CitNOUctQCYgRCkpNyIqPydVWjI0NUM5RklKOjM4TTdIKiY6VDUpL1RNRj5GTTo2I1A4KVMgQCNCRFYvRFU7CitNQidJQjcmTVI8Rl1OPEZNQDYkXTs6JilKOEchSjpFUU0vU104LEIhLUAmSS0vUyE4NUM4TS9WIFkpVyoqCitNPkcpOC4zXUxdJlVSO0RFOzY0NTo6Rk1bPEZFKS0jRFAoIzE1MEQ1UkFUMEI2J0klNkZBTjxHSU06RkFDCitNOERBTzE1QVQ4JyohNiEoLiUzWUEvVilGNTNFPjEhNFk+SCIiPDYtOCsxNDszNlxeODgqIjxWIFsqVDE5CitNNTJETTYjTEAoIlU6PEZZWkA2JF8uNik7OFYpUj83NT4sQiA9MicqIj5HLUYgUzopMScpWzpWLUI4VlElCitNIDNQITNQI146Vkk+MDNdOTdWLiA/NllJODVNODQmSUktRFVJNkRVJDJVRTkyNUU6OEcpTi1DMEApNiojCitNQEcpVzYjWS8zNDU6PCJUOzY3VV07VFRSKTM5SkBXPSksREQ4JiIgOCUyIFYxIUxNPldJOTZHIS85R1FVCitNNjNdQj5VQS08VUk6OkcqJD5FSUo1M1k6LyFMUDxGSUouUjUkNiJUOy1GQUEvRUlSNydJSC9DOS1fRF1KCitNPEZNSTZDXFkzNVFbQTdJQjVFRSQmUjUpLjRNWkIjRDsyNk0tNkRRLTMmSTs8RzokOkNdQi9SVSw8RzYiCitNODFULiYiVSktRlVXOlVJKTYjOF84VlVdPzgtSyoxNDgtRDE1OEdRXT5WXSQrNUVBOiVRKTgzXEkoIkUpCitNNlYtWkBHITgyNlVQMzNFTkFWVUIvU1BAKzQxTkFILVc4JiReLUVFQjE1SU84WClALUAlKSA2RCBfRFVCCitNPVclKTEzWUI+RzVLPEc9QzpWKU86JUVANlNYTS8lRS02QyBWOCYlRjwjXSsxIjUkPEcpRj0mRUk2I1xHCitNL0VYOyYjRUo8RyE+NTQwVjhYQiA4M105LyMpJDEjMFQyNVAyKCZJVzImKV02RilaPEZAXjA2OF4xJ11ICitNL1RVOTs4KiI7VVEpNiQ0QCo2ITo5Q1hJMjVAQCRCRSg7JyE+PERBUTxENSk2LTBfMyVFSj1WKF8tQ0UtCitNOUc1VTlXIU86IzA7LUJVKT1IOUEqM1k7NUYtOzg1TUIzJz1dQUdNOzZFQFsuNklVQFdBJC0kMFYvUU0sCitNPkc1TzElOSU2JyFINCVSKkJGOSUsQjRFNiY9TTlHPVY2Izk7NlYsIzoqRSktIyhJL0NZMDxIIVM6VkVSCitNO1YgXzdHXTo2RiE4NjU0XjM2WiQ8Vj1XOCRNQTZUXT48RkktJlAkXiA1SCBfQ0UlPEddOy9CKSk4RSE6CitNPEdJVzxGOVM4VUlIOCJUOys1RUA4M1hNLjZFSzskTTg3QzkpOlYkWTcnSVU4RURWL0VAXC1DXS02RVk5CitNOCYgUDImWVI4Rz1DNjYhSjtWRT86RTguKTVdUjJUPVI4Vi1KOzctVzZVQDsrNz1aOEVJQjlGSiw+RUk4CitNN0RFNTI2LVA7UzhcN0YkVCYiNEIyJkktOlUhRzxFXUI4T1lBNiNZOTxWRF4tREVHM1RBQjdGXUI6NERLCitNKTIgVjpHNVI4NEVAOCYtOzZVQSwuNyoiQEcpOzhWLUY2JkU7OjVdNjg1NFwqUkRNMydJWjZFQE0xJylSCitNLCMhUj8nKUs4IjRANiZJTzQnKiM8VUFTOjZFTDxHLUg2JDBJKCNZLTM2VVo8R0laOEYtQzsmXSUuNTk2CitNOFZFOzYkUVs8Vi4gQDVNOThVSUs+RyoiNjIgISswJF4gL1kkLVRRUjg0MEApVERZLjVJUjpGVVY+Vyk+CitNOlZBNSxCVF82RklBLEI1LTxWTUE4NkVAOidBQCgjIik+RikpNiYhQDo3JUkyNE07MlYtSCwkRVI2MylSCitNPEVZSjo2LVs4IzkoKEIpLDxHKToyNU1QLjQ1OzZGTTozNi1JOEcpSzxGSSUuNDVCOVc1OzhIOiI6U1xNCitNLUYhOzIzOFsvJF06NkZNJDI2KUM6RiteOkcpLzE2KUMvUjRWOFRcVi1ENT82Ri0tMSJENSxGKUo3JkEkCitNNkcpSjhEMTgyMyFKPTdJWzQlIUM6Jk1LOkZJPztXLT4vVVlNLlFVQD83PF8mUzlCOUM4VjwmOUI2JyBWCitNKCNFPzlTOS08R1laPlcpRjpXLVs8RylULlFAVjI0VTs6VylaQFYpSzsnLUk1MzhNNichVzxWJS08Ry02CitNPEg1SzZWISw6VlFHQEZFNSAzOCEuUCNeO1YpLDhWXUA3Q1hWMlVBOTZUVUs9N1FbOlZFSjwmRT4yNik8CitNOFM4SS1GITo4RkFROUZaIjwzTE1AOC1SM1Q1LDgmSVo9VFUtO1VNSjo0XTo+RjhNMyZNQzhHKVI9Nk1BCitNN0MwVC1EXU86RUksPVRQTTM2KUI2RSVCPFRVJTImSVI4I107NlRVQjEjRU1CSCEtLVJVLzYkRF4yNU1QCitNOFY6IDojXFk4WCk4X0VJRjpWTUo4RSRFLUYpSTIyVFY2JiVINiVAVCRCVTg2RTksLUMhTTxWXFYtRUFACitNOkYpUj82OTo6JFE7OEY5TjolTVI6IyElPEY4OCs2SigvUTRJMjVFOThYJVM6JEE5L0JEUjI1QFAxNilGCitNO0ctUjcmTVc+VjlNQiVEQC5TOS0zJFVLO0c5UDpXKVI4ViRbKENFQj04LVI2JUFbOjZdUjpHPUo6VyE7CitNOCgpQjhAJTkgNUggX0c1WjolUVI3RkE+LCVOIT5WJFA2RllaPzYpLzM2TiI9VU1KPERMVy8lNT4uNDFLCitNPFYpPj5XPUExNyojPTYkXi9FQTo7Rz0tMzYpOzlVTSkyNjlRN0Q1KDhFSUI8Rk1COCUlPzYkRFk3JylSCitNNkZJOCkzIUI6Ji1JOFZROTEzIS03KClOPERcVjYkVSQ6VzYiOiM8WzY1TSkvQ0UpPCY9Jz5HLSknNU4qCitNOE9ZJDFWOVo7Nk1DKzNdQjw3KTgtRTUoNkZNSzVCIFI5Rk1INiJUSTZXTVcyMlUlOlZBJDhHSU47JilACitNMzVJLThWXSQ0JlxWLUZdTSZRKSQ9NERSNTYhSDVGLVI+SClSNiRETS9UVTgtRDU7MyUhOTxGLS85VylQCitNPldJSzUzUDsoIiBfODRAWThVTVc+RilBNTJETS1GKiVAVkVCPkc1VjpVSUM5Ry1QNlZSIjokMCE4MCVDCitNIC9ZQjlGWVI8RUk4MjFMWUBYOUs2JiVKO0ZZQjIzWTo9V0lSPEdNJCs1NUA3Q1xeOFdJUDZXKVI4Vi1LCitNPlcpQi9VQUEzNklQMzYhOzgmRTs4JiU+OlYtQTE2ISkuNF1SOFU4XjYmISUrNDVKPTcpRzZTXFIxJk1GCitNOEY5TjhFOF4tRDVdPzc5SDE0XUM6V0FSPzdBKS1GQVAzNEUpMSZFTy42SVotUU0pQEVPXjZEXS06RFE5CitNPlMgXzpXUVo6UyE+L0I9Ojs3KE0tRkVNO1ZBKS8kVVpAJkRcLyYlQzI0QUs4VVkkOjYlKSpWLUcvRDVPCitNMjRFSzlBTDgvVzU7MzZFUDtUQSUuND1aQTdJTy9URTYvUyhZNkVNSTM2TUwzNF1LOlZZSTgmKUYvIyA7CitNL1c9LSszXFY4VyktMTVFJSoxQFA7SClMOldJTj5HKTs2JFFIOjYlS0BHIFYgM1ghMzAiTzZGLSE4V1EtCitNLUJEOCwnKiA5Rk1LPTcpQjlWJSk2NUU8PEZJQDdCNSI4JUEpL1RRVTtFSUM4JDFLOFcpSjtWICM4X1laCitNPFYhQzhWQUM4VylbO0ZFLThGRUEyMlRFPEZNLSlTXVU2IlRNMyZZWjhFSS0zU105NkQ1JDsmKTkvUzhWCitNNkZZRjhFTSw4RllOQEdWIjpUVUI8Rik6OCVFQjojXS8+VVxHOCcpJzpGKSU2IzheO0NMUDcoKiI7IyFICitNMSFARTM4ISksJklSOEVRQDMzXUI8RyE4L1QxSDhVIUI6VkBWMjZFPi41RTsyNEcuOiVJRzxGTSQtRUlLCitNOjZRQzpHKUI5QlRCNkZRXT5GIUI2IlRJLUVJRj5GLVE6ViVBPiclJTE0VS84VE07NTRVWjgzOE0pNEU7CitNL1M8XzJTOC4mJDVCMTVNUjlHSVI6Jik7NjYlQThXKUggM1ghLSAjXiwjWDgqVz1DLyIgOCZVIVs4VilCCitNPTdJSztWTS0vU104NlNYUDgiREsvU1hfLUNFSjxUUTg6JF1AODZFSThGKUguNFYiPkVFKDhWXVI8R0lWCitNOzdBOjQ1RS82NDBcQEdJQCkyPUc4IlQ7LUdKIi9TRSk2JUE6OiU4WTM0UUE2JDEpMSVBLzFURFIzVFFCCitNPkYxTjxFRUM3Jk1DMyZOIzciPSk8Ryk7PCZBKV9GKTwzNUBeL1ZAWyk0MVY/Ni02PVVEMiYkMVo8RUVCCitNO1YtJTY1OF4uNFFBOCMgPTEmLUo4RylXLUNFQz4mQSktRE1ANkVJUj5GUVI4NFU4MyY9OTM3KVI8VjBWCitNNiRVMD03NVo7U1BSKzQ1TjxWQVc4RilbQkgtOS9ERTg4NDU4ODRRSzo1QFYoIlU5MjNdJTEzTDgmJE06CitNKzMhKDE1IUs6VVk7MiYhTjpYKVI8UCVXIDNcIF9DXEAlMlVLPVVBJCcwWEc6VylJNkY9Vz03NVo2Q1kpCitNOkZdRjZUXFIqVDErNTM5KThXKSUvRjlXODVBOzxGTUIvUUBFO1coXyk0VUs6V1IkPFYhWjxFSSkxNEUpCitNMSZZWjtTRE0xMzg4JTJFPD80RE0yNUU/OFY5QzhVRFA6N0k6MzRVQjo1TUAvU1xWMyctMDclUS0xMyEtCitNLjI9QkJGKDstRFEtOlZZLTVPWS0xViU7MTNdQC9DKTs9NlReO1dJSioxKEU0J0ogOEYtSS9TRS04JUU5CitNOEZNJC5TXTo6VilCPENcVjInTVIyMU0kPCVFJTxHSUY8RkkvNiRFNTYjRTA+R0lSOjYpOjY2OVo+Rkk4CitNMSJcVjhXKUA6Ji0xPEhWKjtVOTwyNUlJNjRRODgmUVEyMiBAL1YhOjgmOF8mUU05OjREWzI0RF42Vi06CitNNlQ1JzlVUiI8NjwhPkAlXCAvWUkvIkxWODZNOTVDKDgpNF1LOlYlOjhGWV5AJUkpMlZZWz5IIUM1MzklCitNODYlODg2RVA1Mzk6OlYtODE2LVM7Uzg4KTYlTy8hNEkvU0VGQEgtXTxHLUY2JUEtM1VBSj5HSUs4NUA7CitNI0I9PDpXNUgvRVlCO1cpSzdGOTYmVDFVPTY5LzQlTSUuNEUtLCQxSjo0XFkyMlQ1KjFANS43NVctQ1xeCitNKVQ9MDElO14zNFVDPCVBKTNTRTg4Ryk7JzZNXTtFQEkoIlVHQkc5TDozOEUtRkE6OicpWjtWPTg2VlVXCitNPEYsXzY2JVc8RVhFLUYtQzgnSiI6VjlIOjYhLTgmRS8yJylaOldJUjI1TVM+VzVSNiRFKS1FTUk2JU1DCitNMzVGJkNHKSwxNE06PVZFKzE0XUk6VkxbKCI1JTYmKV02MkxFOjchKzYjXFYuNkVIMTRRJTEkUThARkU7CitNIDYsIUBAIl0+RkBSKzRVOjZUXTUtIzBeOjZdQjZEVTk8R005LEJVQkBHSiM3RilNL0M5JTY1TUk6ViEvCitNOFZJQjozXSk4Vy1JMTQxQzwlWFImUjRFLjVJRj5QLUMgVU9eNjYhSz83VVo8VihJJiJFOjpGSToxJDUsCitNO0gtWjpFTS0xJF1SPzZZUjgzRFAtQ1k2L0U5OjpGQTg2NTQ7JzFUQCs0UUgyNF1BNiVBKS1EMS0zNilSCitNOlZRSC1DWTg0NURNOkdJRjMzXSQvVDVSPEZNSCkxQEU2JFVCOkY5UjxGLU87NylSNjNdVzxGSU44VTRcCitNL0RFQj5IWio9Nk1TPCVNKTonMSw6JlVDTzcpWzZSRUNAV0lSNjNFPjU2IUg2VU1ANjVBUkJHSTgvJEUkCitNOlgpQywkXVE4V0lJMSJEOy1GRVc6M1xFMTYhJTo1RFwtRkFLNUQ1NjIyXSU6VUghMSAlSiAvWUo7VDUkCitNOCVJQjYmJFwqUjRWOiZFOzg0XUM6REQ7JENFUj5IQSEzN0lOKzJUVjE2RUkzNUFJOlctUjI1MTs3Ry1LCitNNURBUDw2ISEtI10pM1YpUTslWUM4NU07OCVFUkEoMVU8RihWKzUxUD5HLUI2RUheNCg2KjpENTs6RjlOCitNPUZaIzxGLSkrMlUrODZRSzxHITsyJkRNKCNNKThWQUYzVTlJOFYtJC1DO14vVE1IPEY5SEAlNE0vQzkkCitNOiY5VTZGKUs6Vi07OCVAXzgiNDgnM01RPEZBLzZGKUs+RllKOlNYTTxHKTkxU104LlFMRSs2KipBR1VKCitNPEdJQis0MVI6Vk1KOEUlWj0hTSk8RylKPTQ1JTZGXUs6VkVAL1IhOjtFTS82IjQ7L1YlOzZSPSQ+RzlSCitNOjNcOCo2JUg3Rj0kL1NcTTg1TSQtRVFQOyVIXy4zOSVARyogIDNEIS9QI146Nk05NlZBTDw2RU82MlRFCitNKCQ1PzgmLTk2RlxWI0BERTI1WVs2NlVaOzVNJC1DXUg2IlRNLjVSIkBUUSU4NDVDOjVBNjY3PVI2RTE5CitNNjVNUj5HSVA4Vi07M1VBLz5IUiQ9NllDMjM5QD03TVo2Ji1MOjQ1Sj82KFkzJklMOUZNVDo2Iio+RExNCitNLUQxTj5HOVI4JFVINTJEVjM2UVI6RkFLPEYtQjZDWE1fQihbPCVZQzZXOUMsIzhAJlVBWjpWQUk8RyFLCitNNlZFQTI2WTkvIyhNO1gpWjhEVSkyJ0lbOCVMRSglRUs2JERSL0MoLiYhQE02VzVVOkZJUztVXUE4RjlaCitNOzZNQzxHPE0yVUkvNDc5UDg2IS86RklLOFVYXzg2TSUzVkUkL1YpUjxGOFYuVSFSPFghTCxCNUA2RUFICitNOjZFOC9TRUA7Q1kkOFVZQjEyNF8xOClGQEAlOSA0RCBfRiE5NkYtLzxIRVI9VylALSI1KzE2JUw3VF1QCitNNlJEUC8lNS04Q0VSQkY5OzYzOUlAJTQ7JiJEVjlIQUgzVUklNjYhJTMjRTo7Vk07NkYlQzpVWVs8VylTCitNOiVNODI2SV1BJ0lGODRMVjMnKVo7NF06OUghQjhGTUAvQ1k8O0ZNQjxWOUdBOCFJL0M4OzI3PVU9Nk05CitNNlVBKzU0MTs4VDUwPkc1SzMmKU0kT1gyLUU5KDg1TUY9U1hNKjFATTtGRVY+V1FXPEZNVzgkNVI4RERNCitNKzVFXUBHKT82JTlKPlZNNi5UMTk6JUktOUYlKyozMFwsQ1lCO1VFPD5GSUs6ViEtOkRROT5XPVozNiFBCitNMzQ1OjtXKVc4NkU6NkYpQjsmTUg2JUVQODRdQj5HNiA8RkUlOEVZTjpGOF82Ri1JOlZZUzwmIDsvWCE/CitNNiZNQzZTXEArM14iNlgoIThAJTsgL1hcJzNFSDYmLic+RllaPTZNODhUNS06JFVAOkYoVjU0TUk6RUBCCitNNkgtTDMzOEU4SC1PLyIgUjUzOUtCJl1BMjVdSDZEVSUvVFVKO1RFQzpWIFQ4VylTQCZdOzYlQUI8RzVaCitNOlVEXzEjISQ4RD1JNjQ9WzxGLTo3VTBeLCVNQjImSVU/ODogPkYhKSozITs7Rk1KOEVNOzgmLUI4NEQ7CitNJzZBRjlUMUpAUU5OJEQxLTEmKUs3Jk1DNiUwVCs2IT83VylcQCZNTjxTXFA7NikpKlIoXzhGKTs2NV1VCitNPUc1SjVDWSkvRkVHLjAtQ1NWRUo8NzU/M1YkVixHPUIzVFE4MTVAVi9GWVI8RjlKPVZJLS1DIUJASClTCitNNjQ1ODdHKVI2REUtPEZROThXKUM8RlVVPEc9QzNVSUY6VyE7N0ZNSzpFWUYqM0VLOEVJSzxWUSkuUlQ9CitNLjcgIThQJTYgLlRcKCM5OTY1TVc+VylSPVdJSzpGLVA6M10lNkVAUC9UMTk5RyUpOFgtSzYzOFw2V0lTCitNOUNRKTYjOF8+Rlk7ODZBUDtWQTguM108PEZBSjtWIEcsJDVDPkZNQDZFQTo2RVFdQFZEWTUzXD0rMU1CCitNOENFPjhVQTo2JFE2LUNZLStUVU4/OEomPyc9OC0iNF80JylDIFVPKDdHOV08RiRJJlVFSjhEUU5EMjQ4CitNNTVNOjonKUM0NilCNkVBKzEjXE0zNllfPkZZQzI0TUoyMlRLJiVROC4zOFA2RyldQFZBJSwiVE04Vz1JCitNNjVNOjpHSiE+Vk0vNiMoTSBXKyM4NFUtNiNYXzomLUI7Nk1VPkYoUiUyXVdCJ0kvLjVJLDtWTUExM1lJCitNOFVBSD5GTToyJklaQFclJTY2TU08RF0vNkZdQzNVJUk4VklCOlVNQjxGITU2MzBNOCAlSiA2ICBfRExQCitNN0chQjMlUVI6JU1CPkcpOjMnLVo4VE0pNiVFODI0TSU+VyVMQFcpOjI0RF42RzVaPEclQDEjXUY5RF1BCitNOFctUzsmRTgyViVYOVVZQzwlNFQrNFVQM1VNQDZFSSUsRk4qPVM4VisxQEsqVDVPOCQwXjI1STs2JERZCitNL1RETS42IUo/ODojPEVNNSoyNE02RUktNlVNLzhHSVU8RiRWODcpOiwlSio2KCxQNiYsJDpfRUE2JSEtCitNNiZASSZSIFIzJyooPyRdKT1XISQmUyhFOzVAVioyRF42NjlaN1NZJCoyIF44V0kwNjVNOjtIKVU4RFU4CitNL1RFWj5ILVAzNiU7MTNdQDYjRUI5R04oOFI0KSRFSiM9ViBZL0NNQjZGJS0zVF0lL0VJWzsmLUM6J0oqCitNOyMhKD5HNVIxM10pOFYpQzhXSiM8VjlSOlVJUjxEVUA4NV1JIDVIITQwIyIvUkUtPkc9LDMnIUAvU0VPCitNPEREVjZHSU42JDUlOCZdKzJTXVI+RyldPFYtQS5RTEU6SCldQEYtRjtWTTo3RiVDPFc1SzhWJFksJl1XCitNNkRBSjokRFYyNkU7ISYiRTIyVF89OElRMjM4OC5WJSU7Jy05LUNFNjQmITkyNEU4LlNFQTZWLiJARy06CitNOCRMUi5QLSlfRU1DNiVBMDlHSVczNUlTOiNdOztHKUEzNilSOkUhQzxHKTsyNF0/LjEoRyszITtAV0k2CitNNjctSDdDTFY4NkEpLSMwXDYlRUM6VERNLUVMQCRDOUg2RUE6NlZZWzxFTS02Izk4O0c2KDhDMUM8JUEpCitNM1NYRSwjXiBENyBJI0FBKTxGOUs4M1hfOiVFQzsmJSsxIzhXOVYlQDpXSVVAVixWMTdOIj1WIF8uOSkpCitNODcpWj83VU47Jk1LOkcpUzMzXSU8JzwhOzAlLSAvWSQmUjVCPkYpMThWRE0nNUFBMTNcUDhVIE0tQ11BCitNPVY5QjZWRUA6R0ldPDZFJSpSNS09N1VTOFZRUzhVTUI6NlFWPTZVQzdSVDs2SClIMTVdLC4zXSU6NiFDCitNOjYhUjtWIFk2SCokOlRASS9XISQzNylQLjMoTy41QUA2RiVJMjNZQjhWTVs9NjlCNlYlSDlVOSkxNU1CCitNOkYtJDQnKVU4Vk1SOlVNQzpHS146VTlCPkZNOjhXKVY+JiEtMzQwQCozOFw2V0lSMyZFUjpFQSk1RylPCitNMzMoTS9GRU84RkE0KjEpOCowWDIrNEU2N1ZBUz5HKUg4RihWLjQ1RkBWIFA4RylLOyZBKSxARDs6SEVaCitNMjMwTTYmTT48RyxeMjchQjhWTUEvVUU+L0VFJTYmKVc3J0lRMTVBUj5XSVMxIlUkNjcpXT02OUM6JDUnCitNPVcpOjdEND1ARFFKIDcoITwgI147Q0xSNlc1UjpWLU8tQlUpNiQ1NC9FQFYrNDE4OFZZUjxGPVc3JFFaCitNO0ZNSTg0MUA8Nk1aPEVZUjpVTSkzViVHPEc1Rjg2IF8yNz4jOkY5UDIyVFsxNiU7NlZNTztGTU86NSFSCitNQFZVOC9TRTotQ1lLPEREViszOSw4JEUvPlVZJTE0VVM9RylCOCRFLTxGXUAzNilDOFZJTDEkVUY6Ri1bCitNPlYtMDZFWVxfRz0nOEdJSzYmKVI9N0lPNkYhNCoyRE0uNi1bPEYhQTY0VFYvRFVXPkZNNCsyVSw7VFBXCitNNUUgPTI0MFAlMUBbMSYhUDhXKVI7Vk1LNiJUOy9XQVAuNilVOScpUjMjKCkmJUYiPVVNPjYkNSksJiFPCitNLjVBQTo2RUI2IyE6OiNdQTI0VTk3JFVSPiVNOThWUVo6RDBJLUM5Qz83JTszViBWL1dJTjomLTkpOChNCitNMjAlPiA4QCBfR01IMjVJUjo3PiA9ViElM1VJKThGQUYrMiBWMTVJQjlGWUs8I1hQOEVJQjhFRFY2V0lCCitNOlcpUjtGKSkxNEUkMjYtQjM2LUM2JioiRDcpTEA2QF8xJDVBOUNFJT1UQSg6V0lDOEdZTTMkRFAtQjReCitNNycpQzYjOE0uNThHLjdJTjEzOEk0NUk+OkYgVis2RU8xJEVAOFYpPDlGLUE3VDExPkdVRjMzTS09T1ldCitNMSRVOjMjMUA6RlVTPTUhQjhTTFIoIVUoPEgpWjxWOE0qMlUpPEdJVTxFWSkzVk0pKTM5NjElOUk4MiA4CitNLENRJTo0VTs8RilCN0YgQCYiNS04VUFOOkRdRkBFTFYmIiFAPkc9JC43IUktQShWOCM5LzE1QUkzNDA7CitNL1VYRy9UMSw5VDEpOycpQzIyPF88RkxQKzQwVi9XPVI2RU1GKzRFVzUnPVo5QlYiKCI0ITZAJVsgLk1LCitNOiNFLTo0QTk/OClSO0VFLzNWQUs4UzAuI0I0XjM0VTw6Ryk5NTVNODY1SUEyNFFDL0MhRkBWWVE6NEUlCitNMSM5OzlDRS86NiU6OEgpUjUmWUI6VkU5M1VQRSgmTSkxNUlSNjVNWzxVUUA1MzhcMTRRQjhWLSktQzhFCitNI0I9QjpERUI3Qzg9LUVNPisxTUA6UC06X0YpQjMzKFk4RyUpMTc5XT03KTgxNklaOiRFKSsxQF41NFVbCitNQCUhLDxENF8vIiBNMSZaJkBXPFIoIUxWOlc5SjlHKVpASCFKMTVNKS40RUg7UyBHKjVBODZGIUM7Nkk4CitNNlVNJDtGOEUpNioqPENdSkE3SVAtQlU5PkdNQCkzIVA7MUxWOiYhOS9VQVI4RVhJL0clNSoyVSk8JU05CitNM1YpSjozUFIzJikpLUkpJDJTOSk4Vi1CPCREXjo0QVJAR0E+LCI0IThQJU0gL1lLOFNQWTg2JTo6V0ojCitNPiZBMTwnPVI5VTUwKCFAVjI0XTk4RiktOFZBOTIzITk6JTlALUFNJDpUVVJAJkVBOCQ1ODwlRS04Ri07CitNL1Y6IzpWLTs6Vy1QODNYRSs2LUg7Vk1ONkVJWkJHKUs7JUFAOjYpQjY2SUozJjklKCIpOTgzOVc+ViRZCitNL0YhOC9URUk8VyVCNkYpSzNTOEkvRjk6MSZJWjtHSVo6JU9eOUZcUC1ENFktRDBZPEhJWjZGSTY4JUE5CitNNTNZLTtIMVMtQkRJLyRdTjsmKUQ/OEYqPEVJQzgzOFA6NURCKjFNKTgkNTY6VlVCN1VYVi43TUImUTRXCitNPTZdJzomQVU/NERNMzVRVkAyVDIrNUBJJlU5QjgzWTk6VklQL1MhUzsyNFY2NDBQOEclRjtHSUo2VEUnCitNOiYlODJURS8yNDUkPEZdLzgmQUs7Ry07QENMXiA2LCE8QCNePEchKSwlSUM6Ni1LQEgxTjM2KUs8Rk1GCitNPEQwSS1EVS8zJyFPNiVBRjpVWFw4JiBUMTY4TSkzXF44Vy1TOyYpLTomLTg2JklGOCJVSkFHLUM2RylaCitNOyYlKy8jUS88JyogPkYtOjtIRVo3Ri06OicpRjhUXTw6QyFAOFVAVi41QF43R0lSNkRFOi9DRTo4RylaCitNOkQxRkBGLUExI0VPOSRVLztWMUY7RlVSX0VNOCkxNE0vI1xeLjciJkImTTo2RjheMSZZWjpGRVI4M1xNCitNL1YlJTcmSUs0JlogQUdVRjhWJF8pNV08KTJMQCszRTUzNklSOlVZKSZSVUMtQEQuJzZJWjhXISQ2OEErCitNLyVNOjwoKUEuMiBFLyFARTYnSVoyMzEpPDYkViYhTUA7JDBbJTJNUDtHNio7Ri1QOlZRTzokVSc2NERWCitNLCZNVzZEVUo7Ji05N0goUC1AJScgNjggX0YpWjZSNF86Vk1JOFcuKj82TTozJU1QOFZJNjUjRF82NFU6CitNPVcgWTZHKUE6N1VQLUM5TzszKEUvVUVDOUctPDhWQFkxJUFCO0ZATTMnKVc6RSFSPkYtLzYmJTUyNylKCitNPTc1TjZVWiZAVikwOEY5SjlHKUs4VyEpMjUhOy9RTSU4NEVDPFVIUDJSVF86I0RfO0dNPDhHNTw2RFRZCitNOlZJLDEmTVo4RVE7Ol9ZSTVDWDUoIjU1LUNRSD83VUoxNE04OCQ1OUIlTTk9VkRfKzVBUDM0UUJAJik7CitNPTdBXT1HKUs2VUEtNyM5JC9TMDsvViFCPEZdQDJRTF86JDBHJzFNQkJHVVs4NUIiL1M5QTwnSio+RiBNCitNKzQ0QCUyVVVAVF05N1dNVDEiRE02VkBfNTMwXzZUXUZAVk0vPkhBWztHKTkyNUU0KTE1LTxGLUE6Vi1LCitNOFZOIjY0TCEtQCUlIC9ZOTpVXE0vVi08O1chRj84KVU8RUkpOEZNQDY2QUAxNUU5NkZNUClUUU4vVioiCitNQEYpQ0BYPUkrM10lNkY5WjhGKUcrMihWL1c9UjJUNUI7RylDOkcpSzYkRSU2JiVSPFZVSjs2STs9R1VNCitNNlVJTjxGKVI8RkVMPVZRQTYjTDIrM1krODY5OCwjKDUsJiQ7JENFWj1WWVI4RFxfMjYtQjEyNSVAVyknCitNNkcnXjhWKUEsQTQ4LUNYXjlHVVU6UlRNLUchSDM3KUIvUzlLPkM5LDhFSFAsRz1SOUUtPEBHQVo7JllSCitNNkVJKTMlRT4pMlU1MzYhVzZUUF44KCIgOlI0KS1HSV09RylCQFVEUC42SVo/OElLL0VFQS0iREs9V1k7CitNODNFOz1WRSs4NyFXNjYhQDg2TTs2RllJLCYuKkFHSUo4I1klL0FALis1XTA0JklGPicpUUBHPVMgNiAhCitNNTAjXjglSS02NiVDNlYtTDpXVVI+RzlQNlYpSjZGJUw6NDU1L1RdQjpTXS83JDE6PEdJVTs4SV08RkU7CitNL1RVQz5HSTw2JTRSJlI9SzxFWFkxJilLOERRQjpWVFsoIlUvMzY5Wz02TUs5RllVO0ZNLzxHVVo7RllLCitNOUZJST4mQSstUkQ7MjZdQC9TIFsqUzkkJlE0OzZWWUY7Nkk7MjZNUDpDWDspV0lbMTU5Q19ENTo8RlxfCitNLjI0TTEmLVU6JyhJJTFNODpVTVo4VExfOFc1Qzo1SFktRDVKOkY5QDM3NVU8VU1aQFYtOzg1QUA6M1BJCitNLUU1JDhFTF44NlFOPyc8XCgiVTo+R0lGOEc9UTM1MUw+VyoiPlYtRjo1WSk0Jk4iOFY4Ui1FOUk6OCVSCitNPEZFOTYkVVo8RUk6ODI9Oj84PVo5Ri04MjNcNSIxQF8yUzhXNkdJPDhYKVs7QCVPIDYgIFU2ITsyNUlBCitNOFclOzg2OVI8RzlVPEcpTzkmRTs6Rl0tMjQxJTdWSUI4JUU+OEZKIjxGOiI+Ri1KOFU1OzdGWik6JUE7CitNOUJEOzE2KVEyNEUoOiUwRy41TUkvIkxLKTFUVjtXNVI4Vk1QOkZNQzI2KVU/NjwjOkglTiBXK146VkBcCitNJEVFWzhFQE0pU0VIOCQwUiZURVA4VylGL1RVWkBGTT4xJTIgQkZJQzY1SUk8Rjk4OCJUTTE2TVs8RyhfCitNKjFAUjImQUozNDFBO1cpSkA3PFY4Jz1QMyVNUj5HOVU6RFFOQkc9QzZUUUg6VTRbKzVBQTM0REIvVl1SCitNOUc9Ly1ETS07OC1SOUZVVzMzRUk8Rk1DOUc9TzhGLTk2U0VTPVchKyszRThJJU1HPEYtLy1CVEc6VylMCitNPSchJDpXVio+Vi07OjYlKSowRC4rNDRAJlU5Si9VSiE8QCVIIDYoIF9ERTkxNUlRPEVZQzglSUs4RSFaCitNPlZJXz1XIUw8Rkk5LUJUTS9XITkzM0VAOCQ1SzpGVVU+Vl0vLUVBQTwmUVI2Q10pOjZFKy9FSUs4JiE7CitNODUwTSs0VTgyVUUwKzJEQi1VJUIzJSFDPEcpQzM1SUs7Rik5NDVJRjtHKVo+RkBXJTRVUjZFIUM4NFUxCitNOEZNSSlSXUg2VVlTNlRdUkFXISw6JkldQkdVTDQvWUc8Ryk+NjNEVjEjOFk8JllLOiZFKyszIVA6VFUlCitNOCcpUjM1SUAvVUlaNiNFNjpHSVo5Q1g9NkkqIjwmJSk2RikrL0VFSTZHKVIxIjVCPlcpUjMzOF8rMl1KCitNPEVRQDxGUUA6JUlDNiNFOjo1QF8vRUhFMVgtUjwkTFY2JyFDODYlKTUxQDgyNiksOFVROjxYKiU/Nk1ICitNOkchQjdDIDgoIkRAKCRFQyszIiI9VighNkAlLSAvWSQvIjUrQFddLy40VUI6ViBQOlcpQjxHQVI8SFYqCitNO1U5PDI1SUk2NFBNNiYhODZWLTw0JklHL0I0XjNWUUw4VERWLURVVj1UVS06RUlQOCYtRjYjXTguNDFACitNODVFKTI1XFAyNFBPLjYtUjxGKUI6Jkk6MSNFJTZHKUI8RkBfLUZNWjZVSF85R1FTOERVOjhFNFY4JFUlCitNPEcpQjlHNiI4VFUtOlgpXDpGJ142RklaPEZARy1HMSQmUzlDNkctTjojXEU2RylKOFYgXi9ERS0yMzheCitNNjQoTTYlSUs6VDBNKTU6MkJIKUg2JERfKzM5UDwjRUhCRkA1L0ZJPDtVQF41MiBAMSVAWTYnKVo+VylCCitNOyYpQDdWLTotQlUpKTM5UzxXTVAvVTlSPyZFLTZHPEkjQiheNSNcRylVSVo9NzVGOlZNTj5GTT4uUiBFCitNLyM5OzwzUEVARUEtIDZAITIwI14uUiA1KzZdWzYyIE04Jy1IMlZBSzcmOUs6VVImQ0cpLDE0TTo9VkUrCitNL1RNQzhWQUk1QzEtMjMgXDElSVM8Rik2NTNZJTpYLUs1RiElOlZNLzhWRTs4MzhHL1RdLzFWLVIyMzkpCitNKVJVKTZXKVI6Rk1KOVVAXy40RVA2V0lDMlQxQztFQTo2VylVPkcpQDNVQSkrNTkkLjZBTjpWTUY/KC07CitNLjQ1Sz5HNUtfRU04OSgpTykyVVE6M0xFMjQ1SzpGTUAsRTlOOUYpSjI0RUE1RERfL0NEVic0RTo2JjhJCitNKCVFSj84NjI+RERWKCFARTxHPTg2WElXKjNdQTMmTU02JiRcLyVBOC1DITw+SElaPkc9SzxHPU84RExcCitNKzI0VzpXKV08RiVDNlY5WzhFTiM4MzBAKTVBKSZRQSU9VllKN0RdSDlHNU86NTBbLUREXjg3SUguWChWCitNMjAlVyA2ICBPMyg1JiJVQTtTUC4mU1lLPEc9WzxGSUI4RU07PEhJWjYjUSkxJk4iOFM4XzZWTUM6VV0lCitNNjNcRywkRS87Jy1ALVRFKTJWLiNARklDODZZWzZVICM6P1lBMSM9JS9UUUY/NyBZMSM4TS9SXUI+VSEvCitNOkZNUTlERSU7JkFKMzRRQDomQSkzNyoiPzdJTThEVTguMlU1L0Q1QDlVSUo4RSFaOiM4TTYmWVo7Nk1CCitNM1ZVUC9SVUJAJyBeL0RFPzZFRTktRFVTO1VRQjMmLVQzJDFCNjJUXCs0VUI1REQyJiRVUjlHNjJCRjxJCitNI0BYNTQoKVI4RzYgODYtOytUXUo6Vi8gLjVBTDgjUDssJy4jO0c5WjsnKVo+RylJMTI0VjU1WVpARk07CitNPDVNJDxIQVo+RyogNTMpODlFTSQ2N0lSOkVEVjYmXUQ5Rl0+N1RNOC40VVk8RERFMSAlWyA2QCBfRTRcCitNLSRFTzlSRC4lMyktOEdKKTxGSUI2NUhWNkZZOzNVQEUmU11BNlMoVjE2VUk5Rj0pMlUwVi0jOSU2JSEpCitNJlI0TS9UUVFARlU8OyZZXTxGTUI4VlFPPDYtSTEkUS0+WCk6MSM4TS8iNFk5VDBQMSYtSztUVFk4VyFLCitNNiRROjglQEUxNylAPTgpRjQ1QTgvQj0kLCNZQDokNSQ2REVCOFJUOy9XIU45Sl1VPkYpMDgiVDUsJkogCitNN1RFNDE0NTYvQ1klOEcpUjYjIS08RFE4OjY8Wy1DWUI7VThJJTIhJDxFRTo+R1VXLSAsLk4zOVI8NylaCitNOlYpUzhTWFk2SCFIKzRRVzhEMDglNDVTPEVFLzZXKVU9OClYNSI1QTwzXTw+SCExPEZYXzInSiQ4VjomCitNPERNLzpXIUo4QC1SREYkViwmSUgzVk1TOlYlOC1EMUs6NDQ7KzAlQSA1QCBfRUFJMjYtWjoyICkjQiBfCitNLjYpXT5FTS0zNiEkODZNJTNWRSQvVilSPENcUis1RUs7Jik2NjREXzdERTg4JV0kKzMoSS1DOSQ7Rkk6CitNPFcpRj03VUAxJi1POUZZVzYjXFA6WClaOiNcTTU1WSQ2VTRWLURVOzpEMFY2R0ldPTZJKSkyIEU1NihPCitNNjdJQjVFQTw1QlRWLUQ1OjwlRSk2JU1LM1M4QCwlWUgzP1lOQEZJQjYiIC4qNEVOOSRVSDEzOF4pVEU4CitNMSVRUjhDOSk4RUlIOlY5QTIzRUI8RixSKCNFLT5GOUE6NllTOUMgLiNCVUs7NzYiPEVFSjpFQFY4N1VLCitNMSQyIDtURD0lMjUsPkZROTY1TUs5RzlXMjFNLTxFQFk3KCFXPEc9KSk1IVwvRFIjQFZFJTpXSVI6Vk1GCitNPVZFNS1GLUMyVi1bPkcpTDglQUs8JjoiLSJEISkwJEcgL1hNM1YlUD9HIFIlMFhFNjYhQDQmXUs2JDU6CitNOyZNSDYlRVA4NF1CPkc1SDY0RSQ3VU0pMzVIVis1SUs8JilCNiMhJDYlWTU2Jik5OCgiIDZWSV06Q1ksCitNNkVZSzsmJToxNFVSPkchQTE2KU82RFVDNjNdLThGTSUtRDU6PkdVSzEiIDgoJUE6MlchUjFURTgxNiBNCitNKlJUVjMlTUIyU1ksQCVMVi9UTUA7RU9eM1dVUjQ2IFwlMlU2OUZJOztGIFsoITRXN1NdKTsnIF8xJDVDCitNO1ZJMDhWITg2RklMM1M5JDI3LVM4RUlMPkZJRipRKE04R0lNPjdJSzpGXF8oRiFaNyVYUDxGSTYsRCRcCitNKVZJUjtWQTo2VSVHOEJUQCwmKTsvU0VCPVVFSTUiISQ8QjRFPEgtUi40VVo9NylKOzgpUDdDITg2JE1LCitNPEZVXUI3KTk4R01bQEY5OCBBQCBaIyhNMlciIj5ERFIoIzlJPlc8UDMnSUozNiVSPEVJKTM3KUw2Vi1SCitNOFdJUz5HIUA2I1ktOUM4OC1GTVo8Ri0/L0NFQD4nIVQ4IzhNPTgpUzpWSUI2RUU6OFZNOjZHISkvVi1GCitNOEYtQzxHTUAtRi1KNkZFVj5GRF8uM0UtPEZEViYiIFIvUyEoQCctOCBUR144MzhCLUI9KTM2JTgqMyFSCitNOFNcWS41RU4+VklaPEYpQzZDOFcvRDVSPzc5SzYiTE02Jik2MjZJUDIzPFYvRUFHMTVBQjwmXTozNFU6CitNOkVJSjpENFYzV0laOkU0RSxDRUo/VilCPkY5TzEiRF86Rik2L1ZNWjgyVSQ1QzlAPFdJTThEVUg8RUBJCitNK1U1UTNTPEkuNl1IODREOys2LEkjRFFVOlRFLT5HSVJFNjlNQEctSy9SNE04Jy1LNldKMj1UXUM+SClVCitNO0AlISAxQCBfRV0+MjQlPEAjRFYsQ1lSQFcpOTZHKVU6VklPOlYlJS9GRUM2Ji1TOlZNTj84KVc6M1xfCitNOEVYOyk2RUs9Nz1MODNdLzpEVSUpMyhJMzc1WztUVSU2Ri07OidJQjZGWUM1NEUlOFY5OjpHKUIvVFVJCitNOFcqKkFIKUs6NERfNlYgXyxEMT44I1hNOFglUjo1SS04JkU8OCQxJTYlSTgvU11LOlU4SSZTWU8/L1oiCitNQEdJRjpVTUE2NEUlOEc2Jj00XEcvRk1TOlchUjxGLSsvUzhfMjNdKzwmTU48VERHNUdJSjVFTSQpMzlSCitNPzVJNCszOTg6SCFCNlZZLzZWKT4yNk1SNjRdUj5GTT4pUyBWM1dKIjtGISU6R0lIKjI1Qz5EXSQvVEVDCitNPVchNS9TRS8qMUBWPCRQWTZHSVs8Ri08O0ZRUjgyIDUuNi1LM1ZKKkBFQTY6SC4iQFc0ITwgJSsgL1ksCitNOEcoTS1XIEczJllSPkcpPjpXKVM+VllDOEVJQTM0XS8xNDU6PCZROzpXTiM/NyE4NiZJRighTUkuNUlYCitNOjYpLTZGTUApMUxWNiVJPDpGQSkrM1lANlZNWjxGSVI8Ri0pMTclUzFUVUI4VUUtM1U5Oz83UVU9SClPCitNNUQ1ODlENTs6VklAL1NFUDs3KUI1Q11QOkdJSzVGIUw4NUVBPEZJJCkyTTk6V1dePldVTTomISQ2RUFDCitNOEZFUkFHVS0oIlU7PTZZWkBIKVM6RUBbL1U0TSs2JS00KClHKTU1VzwkNTk2I1EpPCdNTzdDKEUuNioiCitNPCZJRjhFIT46VEU6PTYtQj5GWUM9UzhcLENGID5GLFYtRUlGPVU0RS9YKU4oIU0pQEchODI1SVI8JUBACitNJlNcRSc2IVo9VylLO1c1Vj02OFQqUlUvOjQ1JD5ISUksJDVcQEdNViA3KCE6MCNeKVQ1UDUjPUsvVF08CitNPEhJWzhGSVpAWC1aOlZBOTZWJTkyVDBbL0YpQTNWLVI+R01XOkZJVzdDKEs2MjUlPCZNOzgmRVI8JURfCitNM1dBUz1WSUg1MzhNMSZFTDtGSUI6RylCLjNZTD5EMEcvVi0tNiYlQDY2OVI9JllaOUVAXi1ENUE2RjlOCitNOVREXjdVRUs7VU0lOCUhVTpEUSU5RjlLPCdJUjIyIF86JU4iWic1XTlFUTszI1hWM1ZFOTlHVVo2Qig1CitNLjYpPztILiZARk0tL1NROCZSVF4xNUVaPVM4RzgmLFAyVV05NkctVTpFSSUrMjRPOUdVUjs2TS84RilACitNNkZNUD1XLTw6VzUkN0QwUjxIKUgpMUxNLEZJSTY0RUw8VjhFKjZNTTIyISQ9OC1aN0JEOyUxNFYgVUo1CitNOEZNWj03SVIyVDEpMlYlOTYnJiI8IzheOFY5VSA2KCE4ICNeLUVFSTIyVUo4RiE5PTg2IjhFIUY9R1VcCitNQFggViZRQEAuVi1MNUQ1JDZGTU84RFVKPVcpUDEjXT86MzhWNyZJQjomTUI6Vz1INDYtVUEnSUs2VUBUCitNKzYpWj5GXSU2RjkwLjYlUzxURDsrNDBQMzZNUjpFJUI7NzVVN0YhOC5TXUA2RFVCOEQxLTo2TUY4RUlACitNOFRdSzdFQTo4Ri1QPVcxUjgiRF86VF1OR0dKIjxGLSkvVFBeLCYtQjpGWU4zVSBALlNYVjNXSiJBRk0lCitNLCNdWi9QLFZTMz1KPkcpJDIzRFY2JkE6OFcpUj1WWTkvUlRNOFZZTjhGLTs6JUlDPCZJSj02TS82RkBeCitNOjdBOjtXSTYmIFg4LyYtSzsmITs6Rz04LUYhSi1BKEc4SDotQENQQCcyRFIvRDBfL1MxSyBXSi82IyFBCitNNjRFKTo3KU0+Ri1JOjRBRiA3LCE2MCNeOEZNVy9CIVA2NFRZOldVWjxGIF44Vk07OjghOyoxQEAyNk1aCitNOlVEXzE2TiE2MkRZNycpSC9TXTk9VURWLUVZJTM0RE0xJlFSODJNOkEoKU44RUhfKVRBVT83PTk8RUReCitNKlZSIz82QF41NTBFMycpWz1GITs2VklVOEUhSTYlRUI4RF0sMzRFODpXKUY6VFU2OEVJTDglQTozJi07CitNMTQ9UjhCVEc4Ri06X0ZNVT8oLUsvRUE2JzNFLDxYKU42ViUpNURESS1GPVVCRykpLEM5VTtURE0mUSheCitNO0gpXzUhVFwzNik+PEZNRj5HSVI7JExWOEZZUjMkMFY6NiEkOiZaIj5FITkyMlRHOjhBTj04KUktIUA7CitNMlZNTjxEVSUzJylINUZdVztDMDspVjolQTZFNTdVWSUzVVklMSQxOztHSiA4QjUsNkQ1KTwnKTE6RilKCitNPigpJTEwJVIgNkwgX0dJUj9URDIxNyEpKzRRUj5HJVAtRkVPL0MhODwmLEApNkFaPzZMXy1DKTpARl0kCitNLURdTzgkRSkpVV1MLyJUWzI1NE0mIVRZOlcgRSs2SiI9Rk1DOCM5JTxIKV06SElDKzJVQD5IKU8zJiUpCitNJlchWkBYLVI6ViE5OEZBKDZWLUs8VikpNiRFKTZGVVo8Ryk6OjVJLDMkVUYzVDU6N1NYRzMkME0xJl1SCitNNj9ZLDZWVio8RDUpOCM4Vi42RiI+Rz1TPCZJQDYlNTs5R1VbODNYXjQnUVA1IkQ4KTYqJT82QE0tRFE5CitNOFZRVzsmXVE9N0lCNiZBRjhWIF8oJDVILjQ1OkBIKSQvQ1A4IjQxWj5HViM+RiRFJiNZQzxHIF4sJDFSCitNPVVJLzhHViA3QzklPVc1TDpYIUI2NVk+LlRFSDtWOUs+RykrOCQ0TS9HPiE7RikxNkc+IjhVQCE2QCVaCitNIC9aIz5IOVAsI0VPOiNdJThXSUY4Q11IPVYkXC1FSUMuMlVCQEdVSyxBTEU2KClaOiVBOz1XLUI1MiBWCitNOCREUis2JVU1M1BNLVVNUTdDOTg6Vk1GOFchSThGVVxAVy1SOCJEQC9XKVo6QzhWKzBZOjxGRVU+RylKCitNNjYpUjZUVTs5RzVGLjM4ViwlOVI9N1FSNDchQjIzWEk2JUEkOFVJOjgmRT4qM1k5OlZfXjhHKVI+RylICitNNURVPjcjISRAN1VOPEc1UjM1TVc8JilSPTZJOjEjXUQ5J0FBLEI1LTs1LUc6NEVANyZNPDpXLVI8RllOCitNNkUhSjZERUE3QjRWOiYhJTYnTiI6Izg7KCJMUDhGTVpAR0lDLEIgRSwmIUs5QzhWOicpRi40MVo/OCFJCitNM1VJQjxHSiIzM0VAMjI0OzE3KVI5RllGOlchJSZSNSQ+WDlXOCVJS0BGQSkgNDAhQCAjXj9WTU5AViE7CitNPEZJLTYmSVo4RFE4Olc9Qzo2RVA2MVQ7MjcpVjozUDUlM11XPkZJODE2KVA2RkVGLUVNNi8iIFk7VU0lCitNMjVBQTw2QF4tQyE6OiVFLztXPUY+R0lSNkNcOCNCRTo6Rkk1JlE0NTI2KS84RklNOzQ9LDxHSTA4NylQCitNO0NETSoxTFk8RylaOlQ9QjhWKUA2JF1DNkYtSjdWTVhAJVBfLUMgWV9DXVJARylLNlREWThWXSkrNUVaCitNOUVZRjojOFk9OClDMzZdSDZWRUExM14gPEM4VjwmLEcyJl0pOlcpQzcmLT47RylLNkRFOThWRSs4Rl0iCitNKjNZNi1EMVpBJykkJlVBOSlTRS05SCldPEYtPjAyIF42ViBNKEQxKS9SNFY6VllSOlNQOylWOiNAVERHCitNNjRESSNCNUc8RylQOCZNWDlDTFs2Nj4iPzctQzZIKUApMCQ7IDYgIFs2KUk3R0lJOEgpUjVGSVo+Rk0kCitNOFctSzMmLVc6ViRJKCVBUjxGTTksQUxWOkdJTTg1QUE2VDU5PFVFOzolNFsvJFUkLCJUXjhXIUs3U1xWCitNN0ZBPi1EPUs3J0lcPEYsWyNAWDs2JklKOzNQQDA2LUkzJilCPEc9ODEmKToxJU4gPTcpOC1DUE0vVy1dCitNPkcpQzZFRCM4T1lIOUVRLzo2TUI5RzVXNlREUiRBTUA+RlFDOCM4RTZXKVAyNDYgOiRVMDgiIDs2SClLCitNM1U5LDM3IVc2JUlLPVNYVjomKSk2JiElOFZNQjZFTTs7R0lSOkREXjMmRUA6N01ILlI8XisyVVBCSCkpCitNKERVOSkyVSk4NylVPFcpSzgzXSk4NjhWKzNcXyoxNE04R0lbO1JULiNDIUI+VERFMjVQUiUyITg6NyowCitNPVYtQzpWRSkzVkVLPTc5XDwlXTUoICQuIDJUIF9FRU83RylCOFdVUzM1UVI8VykpNkcpPylUMUM0NiEkCitNMjZNTjpXJS8xIkRWOldJUThGLU44M104OUZFPjpVSSs2JiEpLUIgQC9VOUM8RU1AOkYpJSs0RUk4RylWCitNPVc9SS5SRFY4Ji06OlREVjI3TVIzNFU5Plc1PDo2LFYrVi1WQEc1Qy9VNSk2RzVcOUZNSjM1TUMyNFFfCitNPVZBJTYmLUo4RjlbPEZFJCI/WDUtRUlCNyVIXCs0RUs8RylCQEchLDZGIEskQlVDPVZBQC1DWTs4JUEtCitNOEZdSzM2ISg4JjEsOCcpPDpGTUM3RjlaPFZJJCgjRUEuNilaPEYtKS1CIDgzKF4qPCVFKzg0RF8zNi1ICitNNycpWjxGPTs2NilLNiRNOTYjOEkqNDVSPzc8XygiIE0xJk0+KzMhPjEiRE8xNU07PkcpQzhERSU2Rk1CCitNOEY5Wz4mTiI3QiAhJTAkQCArLTk8Rk1TOyVNSD1WIFYqNDVLOiRRQzdRTDssQlRWLEU6IDhFWVcxIlRACitNKTYhUjtGRTo4NiU4NlYtQzxHSUAtQ0VJODNcIygvWFA2RiBfO1dJSzEjMSk6NklSPTcpUkAnKTk4Jz1GCitNMSVBKS9URU8+REReMzcpSjZGTUoxI0xZOEgtTThEXSkzNklMPTVRPzEkMUAzIzhHNkVZUDo1OTA7NylCCitNPEcpSzdCIDgsQ1klNkVIXis1QUM4Rk1SQFdJQTZGQTkqMUBZO1VROC9TXTg2REReMTYpUjpGIF41RiBZCitNNkgpSjxWUUY6VDFDOyYkXiZTXyo2IjUsOSZVUjo0REAjQlVZPTc5US40NVM8JilCOVRVQjtHKU48JlFDCitNOFVJQTZWQVA3QyBWOEZZUjokTTg2NkFMOiRETSxDTFwyNU07MyY5VTtVQSUvRUFQN1Q1QEAoKVY5VUAhCitNLSAkUiAvWSsyNDFKPCVJOTxHIEkmIjUtPEVNTDwkREkpMkQ1KCQ1WjpGSiA4Ikw4KCVJWj5XITsxNEUlCitNNkclKDpHSU8rMUxeNiRMTSoyTEc2NDBCOEhJUjYkMTg4JUVKOlZNQkBXVUM8SC1SMiRFJS9UNVo+VEUkCitNOiY5QzpFUUMxNERCNidJRjY1RSUzJklGOlZNOCszRUIyNDBWKzFVLT9WKS05SClGPDYpOjhDTkkmI004CitNLCQxKSsyNT46NF0sPlgpWjpFSUs8RERAKzZdOi1DWTg4JUBfLUI0TzM1SS04Ni1JNkRQJDxNLTw6VFVDCitNOlYhNSxDOT4rNiE7OEZJTDIxQC4oRUktNlU0PS9XSVw5RUlNOCYhPDhHIVg+Vi0/MjYlQThHTVI3I10pCitNMzYtRzonKUM8RylKOEU0QCUyVUg6NkE4L1cpSjJVRF8sJl1IL1RVWz83VVo8QCU+IDQ0IF9GJF8mUzk4CitNOEVBOT1TTC4jQilCOEc+IDo1WTUqMFhAMjZFQzpHOUktQiBWOjdOIj5GQToyM1xZNlYtQT1XLTUtI0U4CitNNjM4VjUzOSssQSkkP1cpOzonLUs2RUk7OFNZUz5GLUY+RzVDNkU5KSs3Rio6VUlCNyZNSzZFTSkuUU04CitNPTcpLTEzXTg7RkVGPFYgXi9GIS04NyErKCI1QjojOFk+VzohOiUhQTEqIFYyNUBZLlMoOCgkRTouMj1QCitNQkdRQjYnKVo6MzhZOiVITS1GLVA4M1kpLlAsRVUiVUE6RyFbOjRVQjtHTVI7JUlKPkZNQC9TXTkyNiFDCitNOlZNSjIxQCksRVhNKzIgKS9XKU01Q0VCOFYpPC42RVc+Rk05NTZFUDwmSTw+RkEkLlRNOjhXSUY3R0lKCitNO0cgWSNCNUI7VkE5L1ZNQCwkRE0kQC0pQUVFSTpXOVI+UCVXIDYoIF9FRSQoITRNO0ZFOzhFUEcjQFk2CitNMzY9SjQmTVc1MUBANiYhOjZHKUMrMjU1PEcpVT5HTVA4NiUpMTZJUD5YQU84JUFAN1M4TTclSTgmIFhFCitNOCRFODpXSVs6VUk4NiRFQzlWTU45RF1HNkYtKSU1RVxARyk8OFYpSjhGISkvQzEpO0c5LSlURUI6Vj1GCitNPkZJQjZENSQzOCFLNSMpJDdSKE04RlYiPEYoXzYsLTs6Jk1JNjJUOC0jRTs1QilAQjhJTzZHKig9RiE6CitNNlVEUis2JVo8REReMjMwPSNBTSkzJUlaQTVIXzdILVo8RilLPkc1SzMkNTUxJUEtOCcpWjolWFIvVkBFCitNIFBGWihGKV84I0U/OEZBSDI1QUY8RVxQMjZFQDhWXTA7VlxfLSRNOjtYLUg2VylLPEZMWyYiISQ4VkUvCitNN0YtOCwjOEAmIjQ7KENZQzsmQS89MCYpIDdMIF9GRTUoIFhFPCg1UDZWIT4uUUBNNjYtLSwlQVA3QUw4CitNLyVFQjgnPSspMiBbOFYtQjxHTUs3RylJLCYpQjxIKVo8Rjk6OzMoVjlGJTkxJDBcMSFMUDhGWiA8RUk2CitNMjRVOzZGKVU6Rk0kMSYoUCIzKSw5JyU8OEVRUjxGTTgpUzlDOlZZNikzOSQ4JSE5QCZZXzxEMTQuVk1XCitNNlYlUjpUMFYyNU1LOFcpPy9cLS0+R1FTOEVBJDYjISQ7IihQOzgpWjgmLV05RDVLPkVATSgkRVo8Rk05CitNL0MoLiIyISIpVEVOQThJSzxHVVo5RilMPkY5Wj5GIFApVU0zJzRVWjgnKU5AJkBAIFE2WigjOUtAJi1ACitNMTQ1TjwkNUA8NUBSMjYtODMnPig+Rk0kKCJUXzhXTUAuNUlLPkZcXCozWTgxNUFEOFchOjglQTQsQzBJCitNKjEoUDhUUF4zMCYiIDdcIF9HITkpUUBNOUgtVzZFTTg4JCQ1L0VFKTY2JUE6JTRcMSRVSjhGIFk2I1BUCitNLjQ1OjxHLUIzN0ogNiRdOjZFUTs7VVxfNiJURzZGTUg4JUE+N0NQXzhXKVo8RUE4M1RdODZWQTkxVz1KCitNNkYlNS0kTUs8RllCLjQ1UkJHVTkrMilCOkZNTzdERSk2JFFCPEZVXTxEUUM2JFVKNkVRWj1GRSUsJU0tCitNL0Q9Qy9PWFk8RylDPCYpQDokVTU6I10kNlYpOjZXTiI4U0VAPkVIVi1ERVI7RklJNSJMKSUyPE0lNEU7CitNOUghVUE3VVE5RjlbPEVFSUBHPF4oJTkoKTRFSjImLTs+RyBSLCNQWypSNS0+Vik5L1NZRjtTWTg8JkEkCitNNjYhQzomOiNARUheLjI0WzYmKTgtQlUlPEctNSgjRU8xM11KO0dJLThXIS8vQ1xfLlJMTTIzTiIsQ1AhCitNO0AlTSAvWUg4JDEkL0ZKI0BGUUI4RylMLyRNODEkVTs4NUlPOkZFOjomQFYmVEU+KzIgVjYnKVA2U0VGCitNQFZNQDcmQSUvVUFINjVBIixDXUM9VEBZM1chPjE2LUs7RyEpNiVBKTYlQUAzMyE+PEZRUjwkMTs8WCojCitNOiFUOzZIVio6Qzg4KVRVKDo2KTs2NDEtO1Y5Wz82KFs2NDRbNlVNQzlHNVU8ViE5N0JUOzYmK142VyEtCitNLCYhSjhFSSw7JyktMydJLSlTOUs9Ni0kOicpQjYlRTw8R0lCNkY4XCYiPFAoIFhJLUNZLTZYQVo4RVFLCitNPEcpTztHKUs4JUEvNlZBQjpGKVA6Rkk8OzNcXzYjKEAzOCFKMzVJLTpWRFsvViFVNiM4UDM3ISg8R0xWCitNKEM4RSs0RToyMzhNNTZSITtUMSk8RURNMjZSKjE0NU02QzklMzRRPjEjXSlARDBZIDZcITIgI14zI1kkCitNOiVBLTtHSVc6VklTPVZBLTZURTU4JFUlOFdJWjlGOUktQkUpNiQwUi5VQVc4ViVIPEdNTjxGSUo2JFU6CitNOEZRQzgjWF82Nkk4KzMhUDgzXTs8Rk1LM1VJODNVQS02JiBeMiVJKDxHSTY2JjldQSVcMiNDOV1ESEk5CitNKTJEXzE0VSQ2NUhQL1Q0VzpYLUcxNkRfL1YpSzlFWTw0NylSMzVAWyREMVpfRjlCL0NdJDgmISwxNi1SCitNMyJFWjgzKFcyNi0vMlchSzhGSUs6Rl1aOkRdSDIxQDgoIUA1KCM5JCZSVVs+RUU6PCRdRj8nNTkvVilbCitNNiRVUzZFSUo8SDFaNkZJNS9FSFwmUyFSOkZJRzMlSUMvQjRZPVcgXis0MUM4WCIjNTJETSxCKFk2I1xFCitNJlNFS0AmKUI+J0lHKzI1KUE1XFk4RERJMjVNJzhGOTU2OCk5M1AlUCA1QCBfRiEpLjYtVzIzKF86VylGCitNN0ZZVzIkVTkvRiUpMjYlTkBHITo2M11BPzRFKzdDXUg9VilAOUcqIz5HOiA8ViFAN1RRRjxHIT82NiVKCitNOUQwXzhWISU4N0FROlZFOzg0RTk1RUVDOjVEXylVQUI1Q0U7QEgpWDAxQFI6WDoqPVVAXzY2KUArM11BCitNMjNMQihFOVU5U11CLjNFNj1WSUw6NDU6OkVMXyZQWE08T1lSNkQxQDY2OUAyUzkkPEZdKT5GSSUyNEU5CitNLUMhPDpGLVI6VUlKPkZNQzs1RFwsRDEkLSMxKTchKEA6Rz0oOEdVOjhHSVI6I1khOUNZJD9WQF8zNUVNCitNQEgpTzckRTgxMiBJOCVJRjtWIUk6JTBQLEVJQjU1QUE4JVoiQjcoXikzUEktRUEkJTBYNTI0VE0xJ0laCitNOVJUNSlWSUs2Rl1BKTM5QDglRTozNEYiMzRMITpAJVcgL1lSNiNdOj5GXEklMlU5NiNEXz1FOF42IlRWCitNLURdTDpHSVo7M1xJOEddLS9WRF4xJylCMzVNTkBXKUM+SCFHMzQwSTMnLVo6ViFBNlZFQzomLT4vVUFPCitNOkYtQzY1QF4yNDU4MzchUDZVRUg2NUBFLjZVXUEnIFYyVi1OQEdJUjNUUUI2Ij04PEghTzIzXUY6RklDCitNOUNYPSk2TUs8Vz0tMyZNSzYiRDgpNiteNyYpLTY2LVE7JyEtLUVKIkBXVUsyM1xWMjNESS42KUM8Vy1LCitNOkdJRjhHIUM2NiFKO1ZFPzpFOC4pNV1SMlQ9UjhWLUo7Ny1XNlVAOys3PVo4RUk/OEZSLD5FSTg3REU1CitNMjYtUDtWTUI8JyFANTVFRjEmIUo8RU0sPkkqKjtTUF8xI10pLlFALiNBNDUjQzlaPkYpJC0kMUg2NUFDCitNPDREXjNWRTY2Rl04QEQ1KSA0PCE7QCNeOlZFSDpGVVo1IjxAKzVJMy9GKS0xNTRNJTEoTTMlSVI8VlxWCitNKjYpSSszIVE2IlUpL0MxPzlHKTsyNSVNPVYsXykzRUw+R0lLOCYhPztXIT84NDU6O0ZJQDYkRF8zNURfCitNMiRFQD5WPVA7VjlHMTNFSDs3SVIxNDUtOEcpVT5HKTo7JUBJMTZaKkBHNUs6RzVGQEc1PCsxTFA0N0lTCitNMzNFSzxGKT4sQyk4SFM9OTEzRTg2ViFSPFNcRzhISV07RU0vMSNdJC5TPUE7RlFSOzZZUjhEVTgyNDVSCitNIFgrOjpXKU0mU10sOEZEWTYjRS84JilVQFctPiIxQSU7Rz1DOFZBLz5HLSUzJUEpNUYhOTxHKT82NylSCitNOEVNSTojOT8+SClJMzdKMkRHSTsxNUE4OCNcVC4yIC4iMFhWQEgpSjI0TVFAVUU4OFZJTztUQUEuM0VYCitNPCQ1JSA2QCE2MCNdLjY+KUJHVVs8JjhWLUVNSzE2QUI2RiBWKlJMVCszWTY4RiBcMjYhQCkyNUI5QlRHCitNMSRdRj5IIVI4JFVCPEchOS8kTUI7N01SOkVNQThGKUk2NFU6Olc9TDglWSk4VkVBL0M5JTYlSUo4RFE4CitNOjRVSThFRUI5RiEpNiRVOz5YKTo6RkEpNUcqKT4nNU48R0lEPEY5STg1MFY3Vl06MjVBQz1HNVI6JDAjCitNNk9ZNTE0MDsrNUlSODIoWT5HUU49VyFDNTJURSgjWU82RiFGOlcpSDIyVDUoJUYiPkdVUjknKEUrM104CitNOEREWykyNFsxJU4iO0VcWSoyVSQ1RiFCOlYpVzxEMSkvVE1DOiVNQDxFRTo8RUkpL0YlOSxEVVVBNyk+CitNO0hKJj02ITs2JUFQNkVJWDUyIDUjQkVQPkYtJTI3KiY6IyBSOCY5WjpWPEkpNFE/KVIgIT1QJSQgL1g7CitNLjdKJT8nVVo9VUFBOyZIXzhGXTA4VDUpNiVMVjI0RFcvUzhWM1ZFNS1FQS0rMjUpOjZZVkI4KVAzJFVDCitNOiREXjM2RUo9VylDM1c9SzE2LUAuMyE6PkchUzw2JUk8Ryk7L1VBLC40VSUtQzlAOCZJSzIzRTw4JUVACitNL0NFUzxTXUI4QyBZPEg1XDxGKUxARzVVPFZdQjI0RUo8JEReMzVRUj5HTVc6JjpMOkVFQTYiVDIoIzkpCitNOFQwUDhGVVI+RllQOCMwNSxERTgzNEU5O0cpOjYhNCkiMj06NjY5Oi9VXUYvQzgjNk0kWTZHKUo2Ij05CitNODZBSzhWTS0yNDFLOEVJKTgjXF8tREVLOiNYXzwmSUI7VkE+LUM4XCozOTs9NllDOSdWIjxGTUs6NDVLCitNOzcpUjw1RSEsIlVAOUVNKTZXPV09VERWNlYpVTpWUTg1RFU4KzIgITcgJFYgL1g7KTVJVT0mWUY+RlFLCitNPEZJJC1XPVI4Vi1LO1VBODglQFYrMzhNKzRVSTY2JFYrNTVBOkYpMD5INVs1Q1k5NiRFNTg2KTk6R11DCitNMzglVzM2JUMtQUBHNURVUjxFJVc/Nzk7NjZNUDMzRSkyM0RQMSVJSzZDRUI6JUlDN1NdQDZDOVA2IjRFCitNMzc1VTs2QUc9NlVNPzdJOSxGRVo6QzhWN1YpRzY3PUo5R0teOkVNSDgiVEAqMiBWOCNYRS9EUVM/NllSCitNOCMoNS9GIF4yNUEpOlZJJTUhNC4lMiBeNjY9QjVENVU8VEU4OiYpLTM3NVM2UyBZMzZKKD5HKTo4Vy1JCitNODREVj1VTTgtQ0VLN1FURThGWUo5Rk1XN0M5JC8iNSw6RD06OkZVQjdHKVI6JFVLPTc9QzwnITg3RV1ACitNMzVMXjNXSV08RyE4NlZRWjxGOVI8RkU6QEU0UiBFNCBfQ0xWMjZBSjpWLVM6VjFVO1NYPTdXKUM6Ry1bCitNNkVJUjpUREUqMyg7LUVAXzNTKFY2WCVfOlVJRkBYIS0tREU4L1RVQDgzOFI6RUxSQDdJLDdWXTUqMUxNCitNLjVRQjM3KiU9NUk7OlZZSCs0RUg6M1xfKzQ1OTE2KVI6Vi1KOCVcXic2QUAtQzheNjYpJzhXPUY6VllVCitNPEUgSzhXRUcrMj05OkVdJTpWKTo8T1lLOlZBQjYjWSktREVDNkREXis2LVs7NyEtKjIhKTkjWF83RUlDCitNNyU5QC9TKTA3RiFDOEZJVzM2TVo4RUVLOkYtQztHNVI4JTksOEZJTj0zRSxARiU4LjVBUjxHITkrNilACitNKjM5SjpGJUk4Ryk4LCVNSC1EMToxJDE5NlNYVDpWSUA4V01ROEVJTDwkUTo4ViFANlNNOD03TUA8Ri0lCitNNkglUjQ0UU0+Vk4iNiFMIS1AJTUgL1klMjM4WTZVRUM9VilCPEZJQC1DOSQzJUlCPEYtSz03KU81MyhJCitNKCNRRjEzOEUtQ11IQCgpQjZHSiI1QVRQNyYhKS41RTUvVUE1KzdJWjEkVVc8JVhAKzYxQjVERUZARzU6CitNNkctUjZCVF86VylVOUI0UjYlXUo7RylLOUcpSC9BTUM4VDUtMzQwWSkzITgtVilOOkZZSDZGKUQ4MzhNCitNMzVJJDM2LUw2VU9eOEZJSjhWTUAyNEU4OkZNSjVCNFk6Vi1LNlQwVjVGXTwyNiVDOkYpOjpXISwyNl08CitNOFVJQTxERTs9Vl06OEZNQjZGTUs6RlVSOEYpLTcnKU44JzUlLUQ1OzhIIU48VUE4MjNRKTZEVFA2JTlDCitNNiJVKTpHIUM6JkFANjVAXiwlTUMzVi1dOCQ1LThGTUIyNERfNkZJLDZGVVk4VilALjVFWzpTREkxNylfCitNQEY4UiAzOCEvQCNeOjcpRjEjOEUpNFVMOFRFKTwmPF4vViU4MSRVLzpXLUI7Rz0sODZMUC42JTgvVCRACitNKTNZQDtWRS02NERJKCYhSjpWSUI0N0lUOFZBUjozXSk+SCE5LUQxKS9SNE04R1YlOlNFLDozODs3R0lSCitNOlRUTTEjWTo4RUlRQEgpUjQjWE08SCoqPkY5STdTMEAsQykpNkRdLTlIKiI9VkBWJzU5QCxCVTo8RyhQCitNX0Q1OjhVSUI4RiBeLUQ1WkJHKTkuNSFCNjVNLTJTXSQ4RyE8OFVNPDhEXU48RERfL0NdOTxGXTs2JU1CCitNOkYhKSsyRTg2JDEkPzgpQzE0NUA9R01CKTJVSDY1SUIxNjlaO1YhKzM2ITktRU1DNkYhQDYmSig8VFFCCitNQEgpWjozTFA2Jj1SPTZFKS1DIUA6JkE1KzJdQDZUNTs6VkVCNlYtUj5HKUAvI1EvOVgpUjpAJU4gNkQgCitNX0Y5Vz1WTSQoIUBJM1VdJDYnXVA1M1k4MjMhKTJTRUI8RylDKjNdTzIyPS02I101LEMxJC9FSVA4RkE2CitNLEIhODlHSU06Vi1SPVYpUDhFXFYrNkoiOkRFKTYyVC4kRTlOPzdJLC9TXEUmVUIiPTRVKSkzOE0yNFReCitNNjZaIj5URDsmVUlNQkdVUjxHPUkvUlRNMTUhPy42KiJBN1VSL1JEXzhWJTs6VklOOCk1KzYmSUM7VklCCitNL1MoRTY3NVo8RUE2OEYpOzE0VCM4KyVCOEZNLzYnKUI6RlktNURERSwmQVo7VylLNjZJSjMyIEA3JiUtCitNNlc2JTgjOEc2RzVSNjFMSTVERUk4JEVCO0ZNSCBWLlQ6VEUtOEVdLzI0VVJCJyBQLjctWkBILUktQ0VGCitNQEc1VzIyVFI2JFUtOCVAXi40VSU6Rkk2MSVJSj9WVVU6RiUtNiVJOzhAJVAgNiwgX0ZJUj5HPTsxIiA9CitNKzU5OjpXXVY6NU1BMTMpJTdDKFY9V105KjI1ODlERTg2VDVGMSRFSDM1IUw7VllAMSJVODM2SSw2N01XCitNPkUhVztGSSQtRi4gOUZBODYzUFApNi1dQThFSjJTOEAoIzlSOkMhLTUzTFs4JU05MlQ1MT5FQDUlM0VLCitNPkY5OjMmKVs6U1hcL1NETSwmKiJBNyVSOFU0Xy9GPiI/Nkk5Oi5VQDM2SUY9N0lLOCRFNTglRTk+RklICitNOFchQC1CVUI8RzVGOEcpSDI2WVI6VklCODM4NSU0MVI7RzVaNkYpV0AiNEA4VlFGNjc2KjY2IFYzJllLCitNOjNdPjokVVA9NyFbNlYpSDEmKUo6VkVCOiYhOC9TRTw+RylAMlYhQj5ILUsvUjRfPTcpWTojWE02I1xNCitNL1VNKSBSVjA4SCBNKVVdQDM0XiA8RU0tOlc9QS4wJUggNlwgX0YpVT5HSUo4MzA4KCM5LTpYIVI6Ni1MCitNMjI0TS9TKFA6SElPLlIgUDZGRV06M0VKO1ZFUDYkXTo2SClLMjNRNjE1QFYvRllSOlVJSz5HSUk4VylbCitNOiYgXi42QU0yWCIqQSdRUjhVOTQ1NE1KOFNcXjZEXSQ4JilSOlVETzY1OFIsIj1KPTVRJCszIVA4Q1lACitNPTM4KSUzRVtBNllCMzREWyczXVVARz06OF9ZNi1WKVU7RllGO1VdLThWUS81NklPNkYtQi1BTSQ6RlVLCitNNjY5UTVHIUs6JF1KPCNMLiNCNSkxNj1XMyRFRkFCVFw4Vk1PMSZKJjs2SUg4VikoO1Q1OD0mIVJANl1VCitNOiVJRyszRTo6VyEkMzRVKTgmISw6VUVSPyY9LTpWTUQ6NUhfMyY5VT02STg2VUErNjZBQTEiNDIuNkhfCitNKCNFJCZSPU88Q0RQN1guIjwjXCEvUCU7IC9ZOjxHSVo8Ryk1KCIgOys1OUs1Q10rOFVJKS9DITs8RklQCitNMzVIVCkyVSk7RyBWMSZVTzgjRSk1RDFSOlVEVDM0VTgvQ11IOEVIWTdWTVU/N0lcPVZBQC9TOTo6ViVGCitNPzZZRjpFSUs6RylaPzZdLDdFOUAyNFEvPzgtVzdFOTgtVUEpOEdJVzZDXTU4UyA7LjZJPCghTF88SC1VCitNOVM4RS5VMSk6RzVSOFYiJjE0RTo9NzVaIFcrVzElQVA6MihZOFRFOTpVSFs2JUVKP1YpSjxFOTs6RyElCitNMTZNRyoxVFsuUjRfN1I8VjpHSFY1Jk1DNjM9LDZVTVI9SDFKL1YoXys0UVI9OClPOlZJSzxFME0vRkFYCitNMjNETSk0RUg2RyFCOzhBWjhWTTovVylaOjM4XzM3KiM7ViVANlYlQztWIFwoIlRSOEQwWS8iTE02VzxNCitNJiMhUj01WCEsICUpIC9ZOT03KUI2RllOMSNQUipUNTgzNFVAOlZNSjVCVF86Vi1LOFZAXi4yIEUzNz0pCitNLCVdQi9CVF44JEU6OCNcVDM2JTsxM11ANiNEUjI1SUY/OColQCYpLDonIUk4RkBZMjQxJDMkMU86RVFOCitNPTcpKDonKU86JUEkOjdBVThFSUEyJDVbQEg5WjZUXTs8I0xFKjMpVDdBTFA2NlVVPVREOy1GISc4Rk0vCitNOVRHOCwmRUs5RylaPzdVRjg1TVI+UjUhMjFUWTs2TUgzVDEvPkdJWT5GSTY6R01JLCVNUjIyVFkyMyhACitNMjMoOzg2XTo1RklKMzRFJSlUUVc/ODlbNlVJOC5TRUo9OC1aOUVJSz5GPFYrNV1YNkNYQCUyVT81RFVACitNOEAxUkkmJFk2VylKMjMoQjInSUs4Rk1CMiVJUj1VTS8vU0VAOCNdLzdDOT9AJlkkLUYtUjwgJE0gNDQgCitNX0YpVTpWJTgzVi1ANUYkVC1EVSkvRF1LQCdVQy1DIUM6Vi1DPERUUiZRQF46RUE2OiYoWyZTXUg4JUE+CitNLUJUVDhXITgyNFxeKTQxJDomLVU9Nz1bOlVJSz5GSUI4Q0RCKzRFJS1GQT82VUk6OlRVOzpEXUo6VFFKCitNPzc1TDhGLTouNVlUPzc1TDhVTUM2IzhNLUZBUjYyTTg2RjlaPERdSDpEUSQ2RDE6Ni9YTTM2SUo5JkFVCitNQkVRQzlHKiIxNEE4KjIpODpGQTguNFVaPyc1XUBFTTtASEE/NjYtQjglOUM7QjReLyFMWTpHIUI2Vkk7CitNNlYgVi43KiJARyk7OFYtRjYmRTs6NUU2L1YtWj1VRF84Jz1BKzI8NSxGOF8sJERZKVNZTz5HISk2JUlKCitNODNcSS1GOUI6Vk1JMzVNUj5GSUo6Ji1DNkIoUDEjIS0+R0lALjVGIjpXICEtICRfIC9ZST9XKUs6VkVCCitNMTRVUjdCRFk4MlRNLjdKKjxFRFk0Jik6OFdJVzEiRDsyNkE/OkgtSjIzUUA8RklRODNcXC41SUs6VlFICitNMjMoUjU2RVI9VUk7PEchSzs3SUs2NUkpJlFNPDlVQUk2RkFIMSUhSjhGKSUzNUhZNyhJUjtHKVM4Q10lCitNMVRdUjxGRT40JFRZKjVBNjxHKSk2JUU7PFgxVz5HSUgxJUE8K1c/XjhFXUI6VikzPkg5Oi9WKVo9NThQCitNL0JEODI3NTovQ0UlPkdNKDQnTUI2RzYiPEYtLzg2KTg6RyhWMiQwWy9FRiE8RSFCOiYhSTYjIUo9N0lbCitNNCUhQzomTUs6RkkkMjRFODlYITgyNDFCNiFMSSYiNUQvQ1k4LyFAOzgnSVo8JkE6OEZFKzlGIT42RiVACitNOiZBUj5XSVI8RyYgOlREOCYhTDsuNylCLjMgWUBFXVAgNUAhMjAjIzlHSUs2NyYoPVVJOzpHIT4yVkBbCitNKjI1OT03SVI2JTlCOEVNS0JGQFsrNEVAOCY5WjpEUTs8J0lOQDctKS9TXSk4JUBQMjNcTS1FQUk9WCEtCitNMSVFQjo1IVI7UC0pX0JURSs0VUs7VUktOFYhLTpHIUM2NUUpKEQ+Ijs2WVU5RkkkL0U5OjhHNV08RkEtCitNLjI8Xi40UUg2JilIMyVaIz5HSiI8RD02MjFNUj02KTk3Rk08OUc1UzVENUs/NkklNSI0Li1HKVcuMjRQCitNOlddKSwmKUM8RzVaPEZJLTM0NSk4VixWNkZBSTo0XiM/NFE6OlYtQjwmIUo4RyldOUVJSDMlTUI5RlkkCitNLUo5ODgkMUgzVUU5NkRESSghQEk1QzlJOkREQCs2PVU+RllDOjYlQC1GIUo4JFEpL0RFOTpALVpENlVSCitNQTgpQyxBVC4mI11LOEQwXi4zRT8gNighNlAjXjlWTUIzJjoiQEc1UjxGOUY4Rk1AMjU1QDY1RVo6RkFDCitNOlYhOD5GXFksQzkpN1c9UjgkUUo8VllGOjcpQS1DUFkzNThNLEJUVjY2OFY0KClQMzMgUDgkNSg6JFUtCitNNiNMSSkzOUk8RUk6OFYhODZGSUI2RkVJKjI9Qz5HVVY4RVk4KjU5SzZWOV0/NllCMyRNOTdFOF8uNk4iCitNNlNdQjhVTUs8RilAMjI1Ol9GSUo2RUFOPTVJOTomKSk2WClSOkZBLyUxKTo+RVxSJlNFQi9CVTg6RlVaCitNPTY5VTxERSU6NyE7LUQxUjs3PTZAR1BZMjVJPzFXLUs6JDFCPkZZTDhGIS02RFVDL1I0WTg0XTs6Jk1ICitNMTNdRjpTOFY2IzlAOFRETTE3KVpARj0pOFZJQy9EMU8zMlUpNyM4UDE2WVU7RUVOPihJUzciRDgoJTlXCitNOEZBQjZYKTk2ICUtIDVMIF9GTVI4NUU+O0dVVTtINVs5RVlGO1VdLThWRS81RklPOCYtQDZYKVIxMzhFCitNLjU5SjpVXS06Rk1DO1VBOTokRSQtRUE4LUIgOyZVOT8pMlVLPEchNSs0NTkzNk1INiYhJSkxNEU4NyE6CitNNiZNOTY0XUo4VUFKPFREQi42TiVAVl05NiM4XjQmRTs7SC1CNjM4WTs3KUgoQjVDQkc1OS9EMF4sJklaCitNPkcpODovWUo4VjlTPldJOzM1QS0uNi4nOUVRLzsyVDUuNikxNyI0Ui9CNDUxJikxPkdJQjsmSSwyNyFQCitNOkQwUjhGWVc3V1YlLjI0Qi9DRUI4Ni0pMiZNQzdEMUk4NERLOFYhNTI2JTs2Vi0+OjM4SThIIUgvQ10pCitNNTQ0XjUmQVI7Nyk2LyYpUj5GQFk4Q1w7KzVBJC1DITo8NiksOCZaKUAmVTAtQkRfOiYtQzokViI1RUghCitNLUAlKCAoVSQ6RkU4NjYpWjpVUV0+RilKIFcrXjElTUs4UzhZOFRVOjhCRVJAJkk/LlMhKTZFSS06JyFLCitNO1ZNODMnIUk2JiVMOCNMQCUyIFY1M1EkNjRVOz1WOSk2NU1DOlVBRjIxQC4lNEU5ODclWDZDRVI8RUlDCitNPkdVQSZRTSw9NzVKNjNEWyoyPSw2RD1SOENEOyZURUEyIFgyMTgpXTxDWE0pMjUtPThJVTpGXVI4VilVCitNPzg9UzgkRE0lM0VaOEZBQlwmKUAwREUtM1ZFKS9DUEkoIzlIMTcqIkBHNUgyNEVLOkZJSS1EMVJBRylNCitNQkRQMiIxNE06Nkk7NkJURSxDWSU4RylSOjVJTzpVSUo6VylLNlYoVi0mJVpAJklDOCRATSs1QVo+RylDCitNLUJFODtINiM2RiEtLyJUTS1DOSQ4Vi1KNkVJQz5HUVc6JVEpN0VJQDhGTSksI1ghLlAkTSAvWDsvRj1PCitNNkVNRjtWKU07RilCPzdVRjg2IUs7UzhfMjJEWTZDITs8RylXO0M4UDJTOFY4RklCPEcgXiwlXVU0Nk1OCitNOEQwOCkzUE0tRllAMSI0WTpWQS04NU0kMTQ1Si9SNEsqNDBQLjZOIDFSPiE6RFFCOzgpSSpSNS08RklCCitNMzM4STEkME0vRFVJNlRESSgjPFYvQUw4MTc5TT1DWDspM1EkMzdVWjY2S14+VzlOPEYpTUBXKUgyMzhfCitNNkMpSEBGTUs8RlE7OFc9UDokMFY1I1lKMjVFXEJHNUAxNEVBOFY5SSxCKUI/NzVVQTcoXCYgWEI6JllCCitNOCNMMipVQTUxJkldPkYtSjxFSUs7J01aOFRVNTI2RVc+VylSPCNYOyYkRVo/Vlk/KTFARTFYKiI6RkElCitNMjJUTS1DXUE9VjlCNlZFQDpHSV08RUBZNkYkXzhXKTlAQlRFIDU0ISxAI14oIUxZPEc9OzhHSVI8RlVJCitNOjc2IjhGLUY8R0kpMiVATSs0NEUvRFFGPkgtQCs0MSsvJSFQMyYpSCoxNE86NUlCOlZNJCgkMU4uUU1QCitNO1QwTS9GRUMzJV04MjM4XjhFQTUtQzlGKzE0XjhBVC47VjE7NjUlTjMzOSk8RzVaOkVAXCgmJUs2IzlACitNPVZFQDdETSQtRERXLlVJTThGKE0jQjRNKzFVQj40MTtfR1VGN0dJRjY2KUY6VkU4NiQ0OzI3KVI+SC1SCitNNkRVTj5HNTwuNUk5NCRETzlYITouNUFJODchSzYiVE02RylKPTc1XT0jKC4mJEVKOkc9SCghTSk6JilRCitNPTZZQjpGSSU4JkoiQEYoXjYlRUs8Rk1LPkgpOCYhNFI3Rz1CMTMgLiUyVVE9N0lQMzYgXyszXTg6NzVdCitNPEY9VzckUVo7Ryk/LUMhKSczRU8zOChNLUAlLSA0MCBUUlQ4JlRVSjZGRVo6RilKOyYpSDIzOFYyNkVDCitNOEcpTzIzRSUtQ0xJOCgqIzwjPFYyNTU2OlZBQjoiIEAuVUU5NkYpSCxBQFI4VTRFOkZdKS9EVUs6JF04CitNOCRFODI0MFk3Uyg7NkREOyxDXE0qNUkwIFcrXjpTREIvV01cPTZJLC0iIUk+RkhfMjdJWjtWKUEyNE1JCitNLjRFSj5GWUAqMVRULyMoSTdWKE03VlE6OEdJWjlGWT44ViE4MTZZQC1DKTg9Vk1KMzRVSzs3NUszNiFKCitNN1VATTI3KT8rNFVQOFY5WDIzKF84Vi1LOkZJUjs1XFIoIzktOEdRVykwWDstRilZPEZNRjomXFYtRUVVCitNQEYpKTI1QUA4VFU5OlcpQkpENFQtRFFCOjRQVCYjUUA8RylaPEYpQC1BTFYyNUlCOUdJSzwjWFA4RUk8CitNOlYgXy5SNF44RERNLCAlOyA2OCBfRTRNLUVZODE2KVo6JFVCPEZJVzMyNEAtRiEwNkcqKDtVQSkvU1xFCitNMjdKIjpDXFYuNDFDPCdJUjokXSk3RUk5OicpSS8iIEAyNDEpPVchLS9UVUo6VUUpNiQxLTZUUFYyM1hNCitNLjZAWy40RTk4JUEkPEdSIT5FNFIrNk1VPTcpLShBNS07RkBeK1ZOIjxEUSkpVEVXLCM5JT5IOUsyMyklCitNOjVZKTgjREU7XiVKNjVJWkBVIS04JU0tO0VZOjMzOE02V11COlRRODpWKUM6RjlLOlZJQzUzOSw2I1klCitNPEZJPD5VQF8xNkU6MzYpSjlGOUo1QzhWL1YpUjtTOEAmITU2PEZVSjpHSiY2Q11CPkc1NiwjWFIqNEVKCitNN1RFJTYmJUE2NEUtOiZYWyZURUIgVyo8OUVRRy5SIDUpM0UlMSVRSjxFRTU2VUEsNyZNSTYiVTw6JUE0CitNLUAlJSA2XCBfRV0pNlZZSTg2QVI2RDVKPkcpXz4jUDUtJiU+LUMpSkBGKSkrNEVJNiZaIz5HIUEvQ01ACitNNDYtQzM2KUs9Vkk2NkchVzokME0rMiBeQEdJUDhWLVM6VU0pMlNcXjhGSVc4RUBZLUVBOCs0NUo4RUUrCitNO0gtXT80UFY1NklRPkdJQiwjRTY0JURWJTNZWkBGSE0oIlVBMSM4NSxHSUsuNERQLCQxSDojODsuP1k6CitNNiQxOj5GLFkyNkElN0dNWjwzXDstR0lDO0VJLTMkVUA6VVFSPEYpQi4yIFIpMUBNOURQVDhGSUAtVUk8CitNLUVJQzlHKUY2NDUpNiVJSjtVQSQuUylDPEcpRjw2OVU8VTklOldVSjE1ME0oIzlSPVREXjI2KUA2M1xWCitNNkZNPi9TXSQ2Ri1CN1RVSDlEMEAoIzkpM1VFQjhEVUM6JUUsNkZJUjYjITszM0YiMjNYISswJTYgL1k5CitNNiQ1LThHSVs9U1g9MjdJRj5IISQlMU0kPCNMMi43XVctQShHOEYpTEBXSVI8JUFBPzYlNi9SRS86V04oCitNOzRFOzxGTUI4NDBJKzcpWkBHKUY/OClIL1NcVi9WITo8RklIOiVNOzVBVEU2RUklOCZJUT03VUIsJTlMCitNPkc5VjxERUI6JFRXMjM4WTlINiM4JTUlNjZJSCxCRS03UyEkOUNYTTZGWUAsQkc2L1VBKTZHKUEuNEVPCitNNjNdOj5IKU0oJEFTOUc5SzIzOEIuNyFGPkgtSjszWFIsQTQuJEQxRjE0UVI7VDUpO0NcTS9HKVo8Ri0/CitNMjM5KzhGKTYpNUlKOkVJODtHNTo2NkFCMjVOIjxGSUgzUiBFNUc1Tzo1OCMyOjxfNjZNSDEjWSk6JiBfCitNKjFMVjpWTTgvUkRWNUVBJzwmXTg2JjlLO1ZBPjpWQFYzNERZLlNcITUwJS8gL1lAOlVEVDEmXVo+RERbCitNLURRSzsmTTksQylDPkU0QCk2KVcvUiEkMiRVQz5HSUI4RUBfOkcpQTUyTEUxNjoiPlc9PzcmTUM8JkRfCitNKzYpWkBHSUY9SElXMjMwTS9WKUI6VilKOkYpUToiKDUsQlReOkYpJDhXLUMvVDEtPEZZWjxWLVU9NkheCitNMjJUXjpYOik8Rik1NiYpUzgjUF44JUlIPkZBNjZHLUs2QldILUYhQjElTTovRFVSOENcVjpXSUspMjU6CitNO1cpUjtVWE0rNEUnOzdBTj9WIFAxJCQ4I0JVSDVERU08RkEpOEchNC9WOTw7OCFLOCNdKT5HSVI2JkFKCitNOFY5Uz1HNUYzNUEtLjYuJzlFUTA3UzhFL0YxRjpWKTwyVThZMzdFUjIyVSQ+ViRWJlFATTgmQCMyOTRZCitNL1VFLTZHPVAuNUlSPlc9SDdHIUA1RUk1KVNcIT0wJTsgL1kvOkZRPjI2JTw8RSFJMjJFOzwjXF8vRF1aCitNPkVEWyxEXVI7NDVIOCQ1LzxHSSwxViBZNkYpPzpGIEApM0VXPzdJSjFVRUI5Rk0pKjRVTT83SVI+R1VbCitNOjMwVDE2KUc7VklCO0ZdVT5FXFsvIjUlPEVFJDo2JS82JiE7OlY5PDhWWVVAR0k4KzEoSTonViVARikpCitNMTZRSzZVMFkzM11CPTYpMDonSUs6MjcrKTVBSy4zXS0xNU1aOFRMXzhXNUEwMzBeMzVROTtVUSUvVTk5CitNPVZZQjs3IFAyNjhJJiJVLDolRTo6Vi0tNjZJUDMmKTA3J0lVNkNFNj04SVU6Rl1SOFYpTjxHSUs4JERNCitNJTNFWiBWKlI2RERbL1ZBLzpXLUs4VUBWMSZNSTExTE04NUE1LyMxKTtWIFs1RkFAMTVFOTZGTVApVFFOCitNPzgpSjdGTUs4RiErKTI8IUAwJUkgL1k2MSZNTDhWTUk6JU1DOCNZOTwiVDsrNDVXPEVJNi9TOTk6VU1ICitNOiVFODpHSUYxNFBeMjNdJDwoJTwpMj1CPEVRQjgjRTA8JkRfKTRFSDxHOU48R0laPEVAVjI2KUo6VllGCitNOUcqKkMoKUM6I106QEZNNjhUTF8zVz1OOkYgVjI2SV1BODVQKjBYQDMmSVVEJz0kKTZJQjEmRTg4IlxZCitNMiMgRzM3PTw4M0deJlM5Ni40NSQzNkFKMzQxQTtXKTo1RyE/L0YpLDhGKTgxNEFLQFchQjlHKSwzNl0rCitNLURBUzlENUI8JDRZN1VFSDZGSU87NlVaOiMhKTpWTFkrNk4oO1RVODZVQSs2NkU+LUI1NjxFWSUyNDBbCitNLlYtKzhXSVY8Rk1ANiZNUDlDMEkpMj04OjRFQz5GREA4NlFJMTU0XzNWKUsvVF08PEhJWzhGSVc7Ji0kCitNQEFMOyA2TCE6QCNeOSNFLTw1SUJBNz1POkcpOjhHPFsmIjUpO1ZJOjY1WSQxNFVAMiVBKTEmKU07ViBfCitNLyMoQCk2IVU9VTkiNUVJJTM2QFkuNik6LyFAUjJWRU86VklOPTdBQi1DOTg4Ji1OPEVRSj84NiI8RUlICitNNFc1VjwjWEIoIl1KPEZJJCs1NVI8J0ojP1VYQC5WRTovV0ovMyFMRTIzOSw4RylKOSVERSUyNS02JDE4CitNX0UwWSsyNTYsRDVQOlNYVjhHSVs4JEVbPVYlUjtWKTA2VERfOkdRVTpWKVI7RilLOyVYRTZGXTs2Vk04CitNLjU5QDpWTVI8RyVCOkcpOSs3KUw2M1lHPzdJTDZERSUtQ11LOjM4OChGKUYvVTVAOCYlODJWTVI7N04jCitNPEVFQj5XTUY2IUA4KzRdQTwnWVAsRU1KO1RVKTEkNT86RilANjc2JUBGKTA6RilCODgoUikwJTggNkAgCitNX0ZNKS42TUc4KCVOOEZJUjpVIUs2IyhNOFZJQzM0VU87VU1BOlVJLS9TRTo4VilAL1M4UiRDKTYzVylSCitNOkZNOS9WJUs2M0UpLUNMUi1ENUM4VklGOUc1VzojOFYzVEU7O1gpLS9XKVI5RyhfNyY5QjxIKF4mIUBNCitNNlZJOCsyKTg/VllKOzdJVy1DOUA6Il0tQEc8XCo0RSksI11MQjgtWDY0XF8xJU04NC9ZSzZTOSQ2I00kCitNOEZdJC1EUVI8RkE4OEY5TzpIKVY4JiElL0ZNWj0mVTs6RylaPkdNVy0jWS02VkVPODRFKTM2TVc7RlVSCitNNkZNUj9TXVg4JF1OPEc1Vj83KUA2JDBWPFdBKSoyTSkzMyFDOkZJUC1GIVM6VU1aREc9LzhXSiI9NlkhCitNJiMoTTJXIiI+REVMPEZJOS1CVE0vVyE5MzNFSz83SVI4JEUkOVc+IjolNCErMCUtICtJQTYjITY8R0oiCitNPEZJSztHKUM3VFE1MTYpQDZGIS08NlUtMzdNWjo0KFY4JVk/N1VJPixBQEkyM1k6OlcpWjtURFkzJkVACitNNjNcUik0TTogViteOkZZUj5GKF4vVUBWLURVWzpEVUo7VSFTOEYpUjpGSiM8JEU1MSNZODEyVEUxNyldCitNOkVFOjpUVSkuNUUkKVVFWjZDIS06RiBQMSdKIj5GSUs8JiRZNkcpSjYiPTk4NkFLOFZNLTI0MUs4RUkpCitNOCNdOjZYKVI9OEFLMTVJUjxGUTgtQylCQEdVWjwlXF4zNzVaOkVMWywmRig8RjlPMSRdQjxGQVc4NilSCitNUFc5TjxHNVI+Rz0pJlZdVzgjWUA4MzhFNUYpQjpSVF44Vk0vOkhKIjYlOUpAWC1VPCRNPzdERSE4Rl0sCitNOjdJUDhTXEksQjUlPCRETTMnKVo8NyBcKTRRWj5HQCEoICRFIC9ZNi4yVF46RzVWPEc9TzZGUVA2RFU4CitNMTZFRjE0RTs7VkheL1c5VTtVNFY2RkkwMiNFOCxDKEsrMzk4NCYpVT5HISQvRilDOjRcUiZTXUA6RylLCitNOEZNTj9XKUE2RUxfLUM5Sj5GKU46Q11KQEZJWjxGSVU8RSFLNiMgWy9DOEkyNloiQTYtOjpFSToyNFFACitNNTYlUjZCKFY2Nik/LUVBWj02MUY8RyEkMzc3Xj5VTEcuNFVNQidJUjZGLVM6NiUpLUc9OzZTRUszVjolCitNPERdQD5GWVo4IiAyKVVNUjhHTVc4NU1VPlYtOiZRTTtAR1VSPEVFOjtWOUo4RjlSPTc5Qzo2LTo3J0k0CitNJEVFXTZUNTs8NUUpOlYtOjhDOFQzVkUlMSdKKjozISU/J01WPEZFLDhHKF8xJUheNkUlQztWIFYxJDBZCitNO1ZAXzE2LVo5Rik1KzJVQ0BIKVogMzghLEAjXjozOE0yNi1LN0UtTThDIS04VFReMjQ1SThUNSU3RlFICitNNiRWIztFSTgmU0VLOFREVi9CRE0rMUBNOCNZJTpXSVI6JUk/ODUlJTIyRFY2JklOPTZJPjdGTVI+Vl1CCitNOiREUDMmKTw4RjE7Olc1SjxGWUo8RkUtOlYtKSsyVEkkQjUtPSg5VTpWKSgyNTkkMyRFKDpGXFYyNUE5CitNOEQxJDxGWT4zVVFOOlYtVV9HVVo4JFxZNlZZUD0zRSxARiU4LjVBUjxGLFAzNDFKPERUUDE3PU0/NkxcCitNKlJEWTdTRUI5Rl1DO0dJWz1QRDIsJklaPTdJRjhGSUI4RiVLPyZZUjomUVA6Nk1XN0FAWT9XIF8yNyVJCitNMyZJTTM2KSQyNE1BNjVBUUBHIFYvRi1GPTYpQClUNVA1I1xcLyVEUCpWIUgtQ11JNlcpSjM1QUo+RiksCitNNiNcTTM4KVo+QCheIC0tRjUiNSk6JiEsMzVRQCszISwsQjRbMjYtOC9VQUI6VV04NkdJXThFQEkrNiFQCitNNjVJRi4zKEAlMkVCLUNZPzonJU84Rk1JMjMgWyozIS02RU1LP1ZdOjMmKVI6RilCNTNcVi5UVSQ4RylSCitNOUZJWjtQLUtfRilCN0VcUi5SICkiMlVGPEc2Ij5DOSU7VUkkKzI9LzhENUs8RilLOEQxSzlGIS0sJDFCCitNNkc9WjsnNiA2Nk0lNkc1TjgnNSUtRDU7OEghTDIzXSQ6Vk0kKCIpQDsnSVU8RkFANiREVjYjXTozNDExCitNO0gsUCgiVTY8RzVVOzdKIDpFQUA7SClWO0ZRRj5IIVZAJiw4JlVBSS1DITpAJl06OiRVOiwmJTkyOkkpCitNOjcpTT5GLUk6NEFGPFVEVjY2RSkrMkRcOjNYRTYlSE0rNFVCQEcpNjpHSVo6VDBZMjRdQjxHKCEsQCRNCitNIC9YXi9BVSU7Vk1DOiYtSTdENUYrMkRSLURUTSs2XV86JFUsOEdKJT5WQTg1RUlKNjVFUjgkMFQqVE1ACitNLUNZLzg3IVA4RylfOiM4RSwjIUk2U0U6Pkc1SjVFSUI5RyksNiRETSlTOFk4Jkk6OEVJUjxFUTE6RllLCitNN0VcVi1DTC4iMUxHLVRBM0AkNFA2Nl1BL0JUXi4zTVM+RjlDOkVJUDpGSSwpMzhWLCYrXjZTRURDN11XCitNLjQxQEBYRU4tQlVBOFYpWjxFSSkpU1kwOzRMVjdVRS88SClKO1VIXy1GQUA2VVhWLCRBRjomIUA2RklCCitNMyYyIUJHSS0tVylaPFYtLTNXViY9R1VQLyJEWTdVIEUrV0ogOFYtOzhCNSw2RDUpPCcpMTpGKUo+JDUlCitNPEZNQjpXPF4oIUxWOEU4XzM1QFIrMyFDPzctLTknViM8RERbMzcpT0BGKTsgMkQhJlAjXi9TKDgtRz1VCitNOFZBOzxGQF86IlRNNTNMTSRBTTpCRl0pLjVJSz84KVE5RzFLPEZJPjxGTUkyMzlNM1M5JTZWTUo7VUkxCitNQCc9OCszREk4VjhWNjdJWjxGXUIzNk4iMyVAWSszXF8vRUVCNiVNLTcmSSksJDFNO0YpQjI0RF4oIyBbCitNKCFMOywnKUkyVDFCNkVNODEzKEU4J0lWOlYpLDhYKiI6RTkpKjIhOV9EREcxJ1YqOiNFJTgnOVs4QjRNCitNOiVFOjhFOS0yMUw1L0glUjpXKTUoRUVXNCVFQS1DOUg8Ri1JN0U1LzZFSUs8RyFDLjI1LD5IOVsxMlVKCitNO0ZNKSlTIVdCR1VdPlZFPi1ENTgrMj1KOlYhUDlVISs4JDRNL0c+ITtGKTE2Rz1DNiVJWj5HKV8yMSguCitNJlVJSTtHIT8uUUxCODZZSi5UNVU/NykpLjVBUkBIKUozUCU1IDQwIF9GPFYmIU05PERVKTM3JVI3VihbCitNKVVBNCkwRDUsJ0laOiREXjE3KVo8RjlSOyZVTjtGSS84ViBfPCUwRSs0RUo8Rkk2MTY5QjNTOSQtViU/CitNLjVFUjlGWVI4I0VDPkZFRyoyNSk5RU07OkRVOjpWSUs1QzhHOEcpUjpFSUM4JEVKPVYgXzElXVU+VyFDCitNOFRBLTxEUEksJDU5O0ddQiszOVdARlVfNiIgNTgpRUYzNU1VQTYgVilVSVU8RUQ7KjU5KTo2IF42MzAuCitNI0IpQiBWS0QyMShNN1QxLDokMDs4SCFMOFYpOzglTFAxNk4gOiI0ODI3KVo+RiklNlZJSzEhQEk6WClVCitNPzdNRjojOF46NEUpOjRVJD04QUk6VyElJlI1JD5YOVc4JUlLOiRFJEAoLVpBRyBQI0E1JDZXSjA7UlQ7CitNLERFVztTOFA4JVlCOCREXjgoIUovUCU7IDc8IF9IISkqMjUpOEREXy40XVpAJjlBMTRFPzUyIDgoJTlUCitNPkZNJCk0UUw4RVEwOFYtRj5GQSQzVUUtOiVASSUxTF8+RylGMSRUWTEzOFYuVEU4LCVBQi9VSUo3Uzk6CitNPEVFTCkwWEUxJUVCOkNZLUBHVVc4RChJNiYpUjxEUSwyIyE+PzdJRjpHKUY6VklNPVQwWTpFSEAqNDElCitNMyc1Qy9SRUFBVlVaOCI0QDhfWUw5RUVVQkVFQC1EUU46VkRfN0ZBLTwnNTUyUUwpI0IhKTM0UF83VDE5CitNN0M4UDZGVE04R0lSNkNZLDZFSEUlMzlKOVFMODgnSTo2RylGOFYtSzJSIE06V0lWPCc9TDYiRE87VyE6CitNOjM4QjhISVo6V0FGLlNNOTlYKV08Vi06OCI0OzgnXUs7SC1AKCIgVixGVjI+Q1xJNSQxOj1TWE02IzhQCitNNjVAViwnKiI8I1ghK1AlSiAvWV88RzFEOiYpOC1CNEk6WSFSOFYhKTZGQTYuUUA7L1ZVTTdTUFk4RFBeCitNKzRFODInKUkvUzk5OCZBOC8iREAtRkFSOyZBSDI1XSQpMkRNMSJUVjIzOFk4JiFCO1ZNKTgkMEAqVE0tCitNOEU4Oys3Sio+RkksKzNMVjhIIUMyUyBWLUReJj5GLVU6NTklNldJOzM2SVA0IFhNNiZJSjclSSk2R0lVCitNOlVATS8mL146Vl0kOkg5TTpGQUM4REFPMTVBVDgnKiE2JjhNJiFBJDwmXT84Jk1LPkdJOi5UNUg1RUlCCitNNUNESSo0XTsuMUxNNkZASShGTiAtQj1aOlZNUTgjOEUrNF1LPlYtKDpFRDglNFIiPFVERSZVOVU9Ri1LCitNOjRFLzo2TVU9R01QN1U0QCNCVUI6NVlaOjNQXC1DOUtARyk6LlM4Xy42RS0tRUEkJlNZPzIxTF9ARiU+CitNIDE0IS4wI142RUlXPkddUjojODstJUFVOlVJVzdUTUg2VERJJEJVOjhFXUYyNV04LUJVODg2KVI7Uzg7CitNL1ZBUC9TOT43RDBZNkZNUj1WIUE2I1BJKEM4RypTUE0tRUExOldJUjwmRUAsQkUkOCRQUCNBTUtDJlVKCitNOEVBNS1GIiI6VFUtN0I0PT5GVVE+RlU2LURVWjZUMUY6VkBAJiRFWjxEXFA2RilNPEchQS1FMUtfRi05CitNLVRROzZXKVZBJkhfOENcTTMnKVVARiYoO1NYRS9WRUg2RkFLOkc1WjxFXSw6JiVIOCNYRSUyRSk2JiBNCitNL0ZJQi5SNVJAUzguOlZFQz1XIF4pMzk4MzcpUTMmKSUnMUBWPEZJKSozOTo3JU1DOERFJTZGTUI4RjlTCitNPCZBPighNEA2Nl0+PEYpLDgjIT48J01XOEY9OTgmQUs3U0UkNFM5KTomQFIrOChWODAoTSAvWE0tRkVOCitNQEdVTzAyNSQ2JFEtLUcpOi9GQU82NjkkL1VNTzpGLUI4ViBcKzVBQz5YLVE1IkxWOCckXy42KV86JDU5CitNNDY5VT42TTs4JE0+NiNcVCpRTFY2JFFDPkc1VzhFRF8vIz1IMSJUUCglQio7NiktOFY9LThHKUIvVUk6CitNLlJFUj0mVVo8JUElMiddQi9WSUo7Uzg7LUdJWjYiVTg2VikwNlYlOjVGS146RFUpMTI9LD1XViY+VU06CitNNiNMWTpHNiM+JzVcOFVFNC9ENTg2NklAOlY9UjhGKUo7VyFVNTFALiZUMSk4Q1xZN1MgQCZVSVoyMU1ACitNNkVNWz5GXS84NiUlOFc9PjojOEAoI11ROlU5LTI0QVo+ViE7KTIhOTpVQSkvRDRbI0FAOC0jKTk8Rk1TCitNOyVNSC1GIU8+R0lLOiRVQT03KVI9JUBNLCU5UkBGJF9AQk0rIDREISswI14sQkUpOkc2Ij5FNE03RkEkCitNMzNZQjNTOTo8JF1CO1RVLTxIIUs5Rl1KNUM4WTM3SiU8RkE5NSZBUDI0RUM/Jy04L1NFKDlHSVI4Ri06CitNOiZNOjkjUDsrNEUpMycpVzs2KSQrVDBZOkNYRSxBTF48Jy1CMTYlTDwnSVUzMyE7NkRMQDMnSVU/N1VQCitNMyRFSztWLUg2VkBcKTRFVT02QS03VilIMTNFKDwmKTtIVkk7NlYgVi43KiJARyk7OFYtRjYmRTs6NV0nCitNPEZNRj1UVEI2JFFCLjVFLTVENTogVys6QDVAMiNBNF44Jl0/MjRERSUxTTg7VUhWOkMgXjxGVU06R0lLCitNLjVJVzhUVF8qMkReOFVJNDdVQTY6R01LNUNNJDY2QTozNjlBMlJEVC8lWSUyVEUkOkchOjY1NTY4V1VaCitNOkVJOS9TXVc9OEolMjJEVjZHSU83Q002IDVAIS5QI14xIUxUMjYtUjxFQE02Nik6N1YtSC1CNSk4JFEvCitNOEVAWThIKVo6RyFQNyVMViwnKiI8NFVCNkYpUjYzWSQ9WCVKNiNMTTgnIUM6JUk6MiYtPDwlME0rM1kpCitNMjY5SjpFST8vRUUkNiU4QCUxTSkvVi1AKzQ1QjxHQV06VFU/OFYgWyxFRVI7R1InOCRVOTZWTVAzJFBJCitNKTYqIzpWOUI4RklKMzMhOUA3KTBWRilIOCZFOCwmSVU+R00wNCYtSDpWTUo6RVxQOEc9QjwkMFYyNUk2CitNKzNdKSsyNSk6Vi1SPkYkPSNBQE0yNylSOlYkXy0lQUs6VUBFMSI0TTE0NTA7OCFPLjRVUjslTTkvUlRWCitNMSNcXzY1XVU9RzVKNUNZKS9GRUcuMC1DSFZFSjw3PUI4M1w7LUVBQjYkRFYuNylaOEQ0XykxTTs/KDoqCitNOiQxJDE2RUM4JEU2IDVcITYwIzg6NiE4OlRVSzwkRD0xNkE5NjYtVzZCIF84JDU4N1RdKzZHVVo5VFVLCitNOFY5JC9VUVU6Q0UlLjVJSzgzXFwzNyFQOiVcXzM1TSk4NjklN1YhLDZEVF8tRUFGM1ZFQjslITs2RkogCitNPkY9OCxCVTgyNFU/LUNdJDlQLVJfRi1EPEZJOjIzRUE4VloiPEU1JDE2LVM2QzxJKTRFXTpGLUI4RylaCitNMjFVOkBXVSw2Rk1DOEchQDpGKVI/Njk6OiRROzhGOU46I1ksOSZJUjdVRT82RiElMSNMOCNDWUo4JklLCitNOUQkVDEjOF8+SDYiPEVFKTtXSUo1MiA7MTM4XC0kRUI5Ryk4OyZZSzg2IUEyViUpMjUwUDZHKV1AVkElCitNLCJUTThXPUk2OjU7NkZJWkA4RVs2NDBAJTJVTjo0RF4sJilKOjVYWSgjISQ6RzYiO0VFLTI1TUI4VTk/CitNIDRUITpQIk9AJl05OENdQDo1SFYxNkE5OFNdQjokRSk6NiE4NlVBSTdHKVU2U0UsOFYpLDI0NUo8RiEkCitNL1U5OzVERUk6NiwjOE9ZSDtWIS02ViBJMjZdQDIzWSQmU0VJNCYtQj00XUMxNSYqQygpVzIzOSk2Vi1CCitNMjVZOTE2SiI+Rik5PEdJLzIyVF84REU7QEcpSjokXDUoRFVPKzRFRjM0RSQuNl4pOCJVLEBHUFkyNUk/CitNMVctSzokMUI+RllMOEYhLTZEVUM7VDEtNlVNLTQnIUI2Ri0tNUM4QCgkNUg6JThULEMoOypVMSw6R0FdCitNPkVHLjMnKiI8RixfLEVEVjEzXTo7VFE5OEdJTjQmSVE2VilaOEYtRCozWTk5R0k/L0QwSSgjWUM+RSE5CitNNlVJTkBIKV86NTRAI0I1QTwkRSQyNUEkOCZRSS5SVTY6JjldPlYpKS4zRTg6JFU4IDVEIT1AI15CRz0vCitNOFI0VjVFXSU4JkksOlVAVjYkRFk4JiE4L1RdUj5HViI6I1xfOFZJQDIzXTs6RiE2OiYhOC9TXUs+RylLCitNM1RVUkBHSUo6VkxfNkZNSzokRFwqM107OCcpUjpFIUIyNEVVPzdWKjtEXSkzNUlCMyYlKSZVIipCRjkoCitNNkdJVy4yVFYzM0VDQVY5PDNWVE0lM1k/NiVBQi4yIDglM0VQPkZdRj84NFlfQjRCL0NFQjg2LSkyJk1DCitNN0QxSTg0REs4Vj1COkZNQysyVUI4RF1DOFVAVzI0VTo7VylIN0U1NjEjOSkrM1lKO0cpOjQmWVo9N0lLCitNNjNcVjU2IUk8RjhfMSc9SzElUUkrMyFXPyVNOC8lQTk4Vk0pKzM5OyghKFY6JUk4NkVNTj5WWU08JURHCitBJiM5QjwkTSk2NiBfLCVJWzwiVFY2RilSQEdJUDUjISk2SClANiAlOSA3NCAKKyAKK2VuZApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2h0dHBzX3N2bl9weXRob25fb3JnX3Jvb3QucGVtIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2h0dHBzX3N2bl9weXRob25fb3JnX3Jvb3QucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZGZjODIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvaHR0cHNfc3ZuX3B5dGhvbl9vcmdfcm9vdC5wZW0KQEAgLTAsMCArMSw0MSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlIUFRDQ0JTV2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVFGQURCNU1SQXdEZ1lEVlFRS0V3ZFNiMjkwCitJRU5CTVI0d0hBWURWUVFMRXhWb2RIUndPaTh2ZDNkM0xtTmhZMlZ5ZEM1dmNtY3hJakFnQmdOVkJBTVRHVU5CCitJRU5sY25RZ1UybG5ibWx1WnlCQmRYUm9iM0pwZEhreElUQWZCZ2txaGtpRzl3MEJDUUVXRW5OMWNIQnZjblJBCitZMkZqWlhKMExtOXlaekFlRncwd016QXpNekF4TWpJNU5EbGFGdzB6TXpBek1qa3hNakk1TkRsYU1Ia3hFREFPCitCZ05WQkFvVEIxSnZiM1FnUTBFeEhqQWNCZ05WQkFzVEZXaDBkSEE2THk5M2QzY3VZMkZqWlhKMExtOXlaekVpCitNQ0FHQTFVRUF4TVpRMEVnUTJWeWRDQlRhV2R1YVc1bklFRjFkR2h2Y21sMGVURWhNQjhHQ1NxR1NJYjNEUUVKCitBUllTYzNWd2NHOXlkRUJqWVdObGNuUXViM0puTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDCitDZ0tDQWdFQXppTEE0a1o5N0RZb0IxQ1c4cUF6UUl4TDhUdG1QekhsYXdJMjI5Wjg5dkdJajA1M05nVkJsZmtKCis4QkxQUm9aellMZHVmdWpBV0dTdXpiQ3RSUmNNWS9wbkN1alcwcjgrNTVqRThFejY0QU83TlYxc0lkNmVJTm02Cit6V1l5TjNMNjl3ajF4ODFZeVk3bkRsN3FQdjRjb1JRS0ZXeUdoRnRrWmlwNnFVdFRlZldJb252dUx3cGhLNDJ5CitmazFXcFJQczZ0cVNucXhFUVI1WVlHVUZadmpBUkwzTGxQZENmZ3YzWldpWVVRWHc4d1dSQkIwYkY0THN5RmU3Cit3MnQ2aVBHd2Nzd2xXeUNSN0JZQ0VvOHk2UmNZU05ESEJTNENNRUs0Slp3RmF6K3FPcWZyVTBqMzZOSzJCNWpjCitHOFkwZjMvSkhJSjZCVmdyQ0Z2ek9LS3JGMTFteVpqWG5oQ0xvdExkZEpyM2NReHlZTi9OYjVnem5aWTBkajRrCitlcEt3RHBVZWIrYWdSVGhIcXRkQjdVcTNFdmJYRzRPS0R5N1lDYlpaMTZvRS85S1RmV2d1M1l0THExaTZMNDNxCitsYWVndzFTSnBmdmJpMUVpbmJMRHZoRytMSkdHaTVaNHJTRFRpaThhUDhiUVVXV0hJYkVaQVdWL1JSeUg5WHpRCitRVXhQS1pnaC9UTWZkUXdFVWZvWmQ5dlVGQnp1Z2NNZDlaaTNhUWFSSXQwQVVNeUJNYXdTQjNzNDJtaGI1aXZVCitmc2xmcmVqcmNrenpBZVZMSUwrYXBsZktrUUFCaTZGMUlUZTFZdzFuUGtaUGNDQm56c1hXV2RzQzRQRFN5ODI2CitZcmVRUWVqZElPUXB2R1FwUXNnaTNIaWEvMFBzbUJzSlVVdGFXc0p4OGNUTGM2bmxvUXNDQXdFQUFhT0NBYzR3CitnZ0hLTUIwR0ExVWREZ1FXQkJRV3RUSWIxTWZ6NE9hTzg3M1NzRHJ1c2prWTBUQ0Jvd1lEVlIwakJJR2JNSUdZCitnQlFXdFRJYjFNZno0T2FPODczU3NEcnVzamtZMGFGOXBIc3dlVEVRTUE0R0ExVUVDaE1IVW05dmRDQkRRVEVlCitNQndHQTFVRUN4TVZhSFIwY0RvdkwzZDNkeTVqWVdObGNuUXViM0puTVNJd0lBWURWUVFERXhsRFFTQkRaWEowCitJRk5wWjI1cGJtY2dRWFYwYUc5eWFYUjVNU0V3SHdZSktvWklodmNOQVFrQkZoSnpkWEJ3YjNKMFFHTmhZMlZ5CitkQzV2Y21lQ0FRQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXlCZ05WSFI4RUt6QXBNQ2VnSmFBamhpRm9kSFJ3Citjem92TDNkM2R5NWpZV05sY25RdWIzSm5MM0psZG05clpTNWpjbXd3TUFZSllJWklBWWI0UWdFRUJDTVdJV2gwCitkSEJ6T2k4dmQzZDNMbU5oWTJWeWRDNXZjbWN2Y21WMmIydGxMbU55YkRBMEJnbGdoa2dCaHZoQ0FRZ0VKeFlsCithSFIwY0RvdkwzZDNkeTVqWVdObGNuUXViM0puTDJsdVpHVjRMbkJvY0Q5cFpEMHhNREJXQmdsZ2hrZ0JodmhDCitBUTBFU1JaSFZHOGdaMlYwSUhsdmRYSWdiM2R1SUdObGNuUnBabWxqWVhSbElHWnZjaUJHVWtWRklHaGxZV1FnCitiM1psY2lCMGJ5Qm9kSFJ3T2k4dmQzZDNMbU5oWTJWeWRDNXZjbWN3RFFZSktvWklodmNOQVFFRUJRQURnZ0lCCitBQ2pIN3B5Q0FycGNnQkxLTlFvZGdXK0phcG5NOG1nUGY2ZmhqVmlWUHIzeUJzT1FXcXkxWVBhWlF3R2ppSENjCituV0tkcElldloxZ05NRFk3NXExSTA4dDBBb1p4UHVJckEyanhOR0pBUmp0VDZpajByUHRtbFZPS1RWMzlPOWxnCisxOHA1YVR1eFpaS214b0dDWEp6TjYwMEJpcVhmRVZXcUZjb2ZOOENDbUhCaDIycDhscU9PTGxRK1R5R3BrTy9jCitnci9jNkVXdFRaQnpDRHlVWmJBRW1YWi80cnpDYWhXcWx3UTNKTmdlbEU1dERsRysxc1NQeXBadDkwUGY2REJsCitKenQ3dTBORFk4UkQ5N0xzYU16aEdZNGkrNWpoZTFvK0FUYzdpd2l3b3ZPVlRockxtODJhc2R1eWNQQXRTdHZZCitzT052UlVnekV2LytQRElxVlBmRTk0cndpQ1BDUi81a2VuSEEwUjZtWTdBSGZxUXYwd0dQM0o4cnRzWUlxUStUCitTQ1g4RXYyZlF0enp4RDcyVjdEWDNXblJCbmMwQ2t2U3lxRC9ITWFNeVJhK3hNd3lOMmh6WHdqN1VmZEpVellGCitDcFVDVFBKNUdoRDIyRHAxblBNZDhhSU5jR2VHRzdNVzlTL2xwT3Q1aHZrOUM4SnpDNldackcvOFo3amxMd3VtCitHQ1NOZTlGSU5Ta1lRS3lUWU9HV2hsQzBlbG5ZanlFTG44K0NrY1k3djJ2Y0I1RzVsMVlqcXJac2xNWklCanprCit6azZxNVBZdkNkeFRieTc4ZE9zNlk1bkNwcXlKdktleVJLQU5paERqYlBJa3kvcWJuM0JITHQ0VWk5U3lJQW1XCitvbVR4SkJ6Y29UV2NGYkxVdkZVdWZRYjFuQTVWOUZyV2s5cDJyU1Z6VE1WRAorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2llZWU3NTQudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2llZWU3NTQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YmIwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvaWVlZTc1NC50eHQKQEAgLTAsMCArMSwxODUgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitQeXRob24gSUVFRSA3NTQgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworPj4+IGZyb20gc3lzIGltcG9ydCBmbG9hdF9pbmZvIGFzIEZJCis+Pj4gZnJvbSBtYXRoIGltcG9ydCAqCis+Pj4gUEkgPSBwaQorPj4+IEUgPSBlCisKK1lvdSBtdXN0IG5ldmVyIGNvbXBhcmUgdHdvIGZsb2F0cyB3aXRoID09IGJlY2F1c2UgeW91IGFyZSBub3QgZ29pbmcgdG8gZ2V0Cit3aGF0IHlvdSBleHBlY3QuIFdlIHRyZWF0IHR3byBmbG9hdHMgYXMgZXF1YWwgaWYgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtCitpcyBzbWFsbCB0aGFuIGVwc2lsb24uCis+Pj4gRVBTID0gMUUtMTUKKz4+PiBkZWYgZXF1YWwoeCwgeSk6CisuLi4gICAgICIiIkFsbW9zdCBlcXVhbCBoZWxwZXIgZm9yIGZsb2F0cyIiIgorLi4uICAgICByZXR1cm4gYWJzKHggLSB5KSA8IEVQUworCisKK05hTnMgYW5kIElORnMKKz09PT09PT09PT09PT0KKworSW4gUHl0aG9uIDIuNiBhbmQgbmV3ZXIgTmFOcyAobm90IGEgbnVtYmVyKSBhbmQgaW5maW5pdHkgY2FuIGJlIGNvbnN0cnVjdGVkCitmcm9tIHRoZSBzdHJpbmdzICdpbmYnIGFuZCAnbmFuJy4KKworPj4+IElORiA9IGZsb2F0KCdpbmYnKQorPj4+IE5JTkYgPSBmbG9hdCgnLWluZicpCis+Pj4gTkFOID0gZmxvYXQoJ25hbicpCisKKz4+PiBJTkYKK2luZgorPj4+IE5JTkYKKy1pbmYKKz4+PiBOQU4KK25hbgorCitUaGUgbWF0aCBtb2R1bGUncyBgYGlzbmFuYGAgYW5kIGBgaXNpbmZgYCBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IElORgorYW5kIE5BTjoKKz4+PiBpc2luZihJTkYpLCBpc2luZihOSU5GKSwgaXNuYW4oTkFOKQorKFRydWUsIFRydWUsIFRydWUpCis+Pj4gSU5GID09IC1OSU5GCitUcnVlCisKK0luZmluaXR5CistLS0tLS0tLQorCitBbWJpZ3VvdXMgb3BlcmF0aW9ucyBsaWtlIGBgMCAqIGluZmBgIG9yIGBgaW5mIC0gaW5mYGAgcmVzdWx0IGluIE5hTi4KKz4+PiBJTkYgKiAwCituYW4KKz4+PiBJTkYgLSBJTkYKK25hbgorPj4+IElORiAvIElORgorbmFuCisKK0hvd2V2ZXIgdW5hbWJpZ291cyBvcGVyYXRpb25zIHdpdGggaW5mIHJldHVybiBpbmY6Cis+Pj4gSU5GICogSU5GCitpbmYKKz4+PiAxLjUgKiBJTkYKK2luZgorPj4+IDAuNSAqIElORgoraW5mCis+Pj4gSU5GIC8gMTAwMAoraW5mCisKK05vdCBhIE51bWJlcgorLS0tLS0tLS0tLS0tCisKK05hTnMgYXJlIG5ldmVyIGVxdWFsIHRvIGFub3RoZXIgbnVtYmVyLCBldmVuIGl0c2VsZgorPj4+IE5BTiA9PSBOQU4KK0ZhbHNlCis+Pj4gTkFOIDwgMAorRmFsc2UKKz4+PiBOQU4gPj0gMAorRmFsc2UKKworQWxsIG9wZXJhdGlvbnMgaW52b2x2aW5nIGEgTmFOIHJldHVybiBhIE5hTiBleGNlcHQgZm9yIG5hbioqMCBhbmQgMSoqbmFuLgorPj4+IDEgKyBOQU4KK25hbgorPj4+IDEgKiBOQU4KK25hbgorPj4+IDAgKiBOQU4KK25hbgorPj4+IDEgKiogTkFOCisxLjAKKz4+PiBOQU4gKiogMAorMS4wCis+Pj4gMCAqKiBOQU4KK25hbgorPj4+ICgxLjAgKyBGSS5lcHNpbG9uKSAqIE5BTgorbmFuCisKK01pc2MgRnVuY3Rpb25zCis9PT09PT09PT09PT09PQorCitUaGUgcG93ZXIgb2YgMSByYWlzZWQgdG8geCBpcyBhbHdheXMgMS4wLCBldmVuIGZvciBzcGVjaWFsIHZhbHVlcyBsaWtlIDAsCitpbmZpbml0eSBhbmQgTmFOLgorCis+Pj4gcG93KDEsIDApCisxLjAKKz4+PiBwb3coMSwgSU5GKQorMS4wCis+Pj4gcG93KDEsIC1JTkYpCisxLjAKKz4+PiBwb3coMSwgTkFOKQorMS4wCisKK1RoZSBwb3dlciBvZiAwIHJhaXNlZCB0byB4IGlzIGRlZmluZWQgYXMgMCwgaWYgeCBpcyBwb3NpdGl2ZS4gTmVnYXRpdmUKK3ZhbHVlcyBhcmUgYSBkb21haW4gZXJyb3Igb3IgemVybyBkaXZpc2lvbiBlcnJvciBhbmQgTmFOIHJlc3VsdCBpbiBhCitzaWxlbnQgTmFOLgorCis+Pj4gcG93KDAsIDApCisxLjAKKz4+PiBwb3coMCwgSU5GKQorMC4wCis+Pj4gcG93KDAsIC1JTkYpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisuLi4KK1ZhbHVlRXJyb3I6IG1hdGggZG9tYWluIGVycm9yCis+Pj4gMCAqKiAtMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitaZXJvRGl2aXNpb25FcnJvcjogMC4wIGNhbm5vdCBiZSByYWlzZWQgdG8gYSBuZWdhdGl2ZSBwb3dlcgorPj4+IHBvdygwLCBOQU4pCituYW4KKworCitUcmlnb25vbWV0cmljIEZ1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT0KKworPj4+IHNpbihJTkYpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisuLi4KK1ZhbHVlRXJyb3I6IG1hdGggZG9tYWluIGVycm9yCis+Pj4gc2luKE5JTkYpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisuLi4KK1ZhbHVlRXJyb3I6IG1hdGggZG9tYWluIGVycm9yCis+Pj4gc2luKE5BTikKK25hbgorPj4+IGNvcyhJTkYpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisuLi4KK1ZhbHVlRXJyb3I6IG1hdGggZG9tYWluIGVycm9yCis+Pj4gY29zKE5JTkYpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisuLi4KK1ZhbHVlRXJyb3I6IG1hdGggZG9tYWluIGVycm9yCis+Pj4gY29zKE5BTikKK25hbgorPj4+IHRhbihJTkYpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisuLi4KK1ZhbHVlRXJyb3I6IG1hdGggZG9tYWluIGVycm9yCis+Pj4gdGFuKE5JTkYpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisuLi4KK1ZhbHVlRXJyb3I6IG1hdGggZG9tYWluIGVycm9yCis+Pj4gdGFuKE5BTikKK25hbgorCitOZWl0aGVyIHBpIG5vciB0YW4gYXJlIGV4YWN0LCBidXQgeW91IGNhbiBhc3N1bWUgdGhhdCB0YW4ocGkvMikgaXMgYSBsYXJnZSB2YWx1ZQorYW5kIHRhbihwaSkgaXMgYSB2ZXJ5IHNtYWxsIHZhbHVlOgorPj4+IHRhbihQSS8yKSA+IDFFMTAKK1RydWUKKz4+PiAtdGFuKC1QSS8yKSA+IDFFMTAKK1RydWUKKz4+PiB0YW4oUEkpIDwgMUUtMTUKK1RydWUKKworPj4+IGFzaW4oTkFOKSwgYWNvcyhOQU4pLCBhdGFuKE5BTikKKyhuYW4sIG5hbiwgbmFuKQorPj4+IGFzaW4oSU5GKSwgYXNpbihOSU5GKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitWYWx1ZUVycm9yOiBtYXRoIGRvbWFpbiBlcnJvcgorPj4+IGFjb3MoSU5GKSwgYWNvcyhOSU5GKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitWYWx1ZUVycm9yOiBtYXRoIGRvbWFpbiBlcnJvcgorPj4+IGVxdWFsKGF0YW4oSU5GKSwgUEkvMiksIGVxdWFsKGF0YW4oTklORiksIC1QSS8yKQorKFRydWUsIFRydWUpCisKKworSHliZXJib2xpYyBGdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09CisKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9pbmZpbml0ZV9yZWxvYWQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvaW5maW5pdGVfcmVsb2FkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MWNjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvaW5maW5pdGVfcmVsb2FkLnB5CkBAIC0wLDAgKzEsOCBAQAorIyBGb3IgdGVzdGluZyBodHRwOi8vcHl0aG9uLm9yZy9zZi83NDIzNDIsIHdoaWNoIHJlcG9ydHMgdGhhdCBQeXRob24KKyMgIHNlZ2ZhdWx0cyAoaW5maW5pdGUgcmVjdXJzaW9uIGluIEMpIGluIHRoZSBwcmVzZW5jZSBvZiBpbmZpbml0ZQorIyAgcmVsb2FkKClpbmcuIFRoaXMgbW9kdWxlIGlzIGltcG9ydGVkIGJ5IHRlc3RfaW1wb3J0LnB5OnRlc3RfaW5maW5pdGVfcmVsb2FkCisjICB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbiBhbnkgbW9yZS4KKworaW1wb3J0IGltcAoraW1wb3J0IGluZmluaXRlX3JlbG9hZAoraW1wLnJlbG9hZChpbmZpbml0ZV9yZWxvYWQpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvaW5zcGVjdF9mb2RkZXIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvaW5zcGVjdF9mb2RkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkZTJlMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9pbnNwZWN0X2ZvZGRlci5weQpAQCAtMCwwICsxLDU2IEBACisjIGxpbmUgMQorJ0EgbW9kdWxlIGRvY3N0cmluZy4nCisKK2ltcG9ydCBzeXMsIGluc3BlY3QKKyMgbGluZSA1CisKKyMgbGluZSA3CitkZWYgc3BhbShhLCBiLCBjLCBkPTMsIChlLCAoZiwpKT0oNCwgKDUsKSksICpnLCAqKmgpOgorICAgIGVnZ3MoYiArIGQsIGMgKyBmKQorCisjIGxpbmUgMTEKK2RlZiBlZ2dzKHgsIHkpOgorICAgICJBIGRvY3N0cmluZy4iCisgICAgZ2xvYmFsIGZyLCBzdAorICAgIGZyID0gaW5zcGVjdC5jdXJyZW50ZnJhbWUoKQorICAgIHN0ID0gaW5zcGVjdC5zdGFjaygpCisgICAgcCA9IHgKKyAgICBxID0geSAvLyAwCisKKyMgbGluZSAyMAorY2xhc3MgU3R1cGlkR2l0OgorICAgICIiIkEgbG9uZ2VyLAorCisgICAgaW5kZW50ZWQKKworICAgIGRvY3N0cmluZy4iIiIKKyMgbGluZSAyNworCisgICAgZGVmIGFidXNlKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICAiIiJBbm90aGVyCisKK1x0ZG9jc3RyaW5nCisKKyAgICAgICAgY29udGFpbmluZworCitcdHRhYnMKK1x0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFyZ3VlKGEsIGIsIGMpCisjIGxpbmUgNDAKKyAgICBkZWYgYXJndWUoc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwYW0oYSwgYiwgYykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5leCA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBzZWxmLnRyID0gaW5zcGVjdC50cmFjZSgpCisKKyMgbGluZSA0OAorY2xhc3MgTWFsb2Rvcm91c1BlcnZlcnQoU3R1cGlkR2l0KToKKyAgICBwYXNzCisKK2NsYXNzIFBhcnJvdERyb3BwaW5nczoKKyAgICBwYXNzCisKK2NsYXNzIEZlc3RlcmluZ0dvYihNYWxvZG9yb3VzUGVydmVydCwgUGFycm90RHJvcHBpbmdzKToKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvaW5zcGVjdF9mb2RkZXIyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2luc3BlY3RfZm9kZGVyMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDk3OGNmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2luc3BlY3RfZm9kZGVyMi5weQpAQCAtMCwwICsxLDk5IEBACisjIGxpbmUgMQorZGVmIHdyYXAoZm9vPU5vbmUpOgorICAgIGRlZiB3cmFwcGVyKGZ1bmMpOgorICAgICAgICByZXR1cm4gZnVuYworICAgIHJldHVybiB3cmFwcGVyCisKKyMgbGluZSA3CitkZWYgcmVwbGFjZShmdW5jKToKKyAgICBkZWYgaW5zdGVhZGZ1bmMoKToKKyAgICAgICAgcHJpbnQgJ2hlbGxvJworICAgIHJldHVybiBpbnN0ZWFkZnVuYworCisjIGxpbmUgMTMKK0B3cmFwKCkKK0B3cmFwKHdyYXApCitkZWYgd3JhcHBlZCgpOgorICAgIHBhc3MKKworIyBsaW5lIDE5CitAcmVwbGFjZQorZGVmIGdvbmUoKToKKyAgICBwYXNzCisKKyMgbGluZSAyNAorb2xsID0gbGFtYmRhIG06IG0KKworIyBsaW5lIDI3Cit0bGwgPSBsYW1iZGEgZzogZyBhbmQgXAorZyBhbmQgXAorZworCisjIGxpbmUgMzIKK3RsbGkgPSBsYW1iZGEgZDogZCBhbmQgXAorICAgIGQKKworIyBsaW5lIDM2CitkZWYgb25lbGluZWZ1bmMoKTogcGFzcworCisjIGxpbmUgMzkKK2RlZiBtYW55YXJncyhhcmcxLCBhcmcyLAorYXJnMywgYXJnNCk6IHBhc3MKKworIyBsaW5lIDQzCitkZWYgdHdvbGluZWZ1bmMobSk6IHJldHVybiBtIGFuZCBcCittCisKKyMgbGluZSA0NworYSA9IFtOb25lLAorICAgICBsYW1iZGEgeDogeCwKKyAgICAgTm9uZV0KKworIyBsaW5lIDUyCitkZWYgc2V0ZnVuYyhmdW5jKToKKyAgICBnbG9iYWxzKClbImFub255bW91cyJdID0gZnVuYworc2V0ZnVuYyhsYW1iZGEgeCwgeTogeCp5KQorCisjIGxpbmUgNTcKK2RlZiB3aXRoX2NvbW1lbnQoKTogICMgaGVsbG8KKyAgICB3b3JsZAorCisjIGxpbmUgNjEKK211bHRpbGluZV9zaWcgPSBbCisgICAgbGFtYmRhICh4LAorICAgICAgICAgICAgeSk6IHgreSwKKyAgICBOb25lLAorICAgIF0KKworIyBsaW5lIDY4CitkZWYgZnVuYzY5KCk6CisgICAgY2xhc3MgY2xzNzA6CisgICAgICAgIGRlZiBmdW5jNzEoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gY2xzNzAKK2V4dHJhNzQgPSA3NAorCisjIGxpbmUgNzYKK2RlZiBmdW5jNzcoKTogcGFzcworKGV4dHJhNzgsIHN0dWZmNzgpID0gJ3h5JworZXh0cmE3OSA9ICdzdG9wJworCisjIGxpbmUgODEKK2NsYXNzIGNsczgyOgorICAgIGRlZiBmdW5jODMoKTogcGFzcworKGV4dHJhODQsIHN0dWZmODQpID0gJ3h5JworZXh0cmE4NSA9ICdzdG9wJworCisjIGxpbmUgODcKK2RlZiBmdW5jODgoKToKKyAgICAjIGNvbW1lbnQKKyAgICByZXR1cm4gOTAKKworIyBsaW5lIDkyCitkZWYgZigpOgorICAgIGNsYXNzIFg6CisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICAiZG9jIgorICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgcmV0dXJuIFgKK21ldGhvZF9pbl9keW5hbWljX2NsYXNzID0gZigpLmcuaW1fZnVuYwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2tleWNlcnQucGVtIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2tleWNlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzE4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qva2V5Y2VydC5wZW0KQEAgLTAsMCArMSwzMSBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZHdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTnRiMCtZckt1eGV2R3BtCitMcmphVWhaU2d6NnpGQW11R0ZtS21VYmRqbWZ2OXpTbW1kc1FJa3NLKytqSzBCZTlMZVp5MjBqNmFoT2Z1VmEwCit1ZkVtUG9QN0Z5NGhYZWdLWlI5Y0NXY0llL0E2SDJ4V0YxSUlKTFJUTGFVOG9sL0k3VCt1bTVIRDVBd0F3TlBQCitVU05VMEVlZ212cCt4eFd1M05YMm0xVmVvdDg1QWdNQkFBRUNnWUEzWmRaNjczWDBvZXhGbHE3QUFtcnV0a0h0CitDTDdMdndycE9pYUJqaHlUeFRlU05XenZ0UUJrSVU4RE9JMGJJYXpBNFVyZUFGZmZ3dHZFdVBtb25EYjNGK0lxCitTTUF1NDJYY0d5VlpFbCtnSGxUUFU5WFJYN25UT1hWdCtNbFJSUnhMNnQ5R2tHZlVBWEkzWHhKRFhXM2MwdkJLCitVTDl4cUQ4Y09SWE9mRTA2clFKQkFQOG1FWDFFUmtSNjRQdHNvZTQyODF2alRsTmZJYnM3Tk1Qa1Vucm45Ti9ZCitCTGhqTklmUTNIRlpHOEJUTUxmWDdrQ1M5RDU5M0RXNXRWNFo5QlAvYzZjQ1FRRGNGekNjVkFyTmgySlN5d09RCitaZlRmUmJKZy9aNUx0OUZrbmd2MW1lZUdOUGdJTUxOOFNnNjc5cEFPT1dtemRNTzNWNzA2ck5QelNWTU1FN0U1CitvUElmQWtFQThwRGRkYXJQNXRDdlRUZ1VwbVRGYmFrbTBLb1RabTIrRnpIY25BNGpSaCtYTlRqVE92OThZNklrCitlTzVkMVpuS1hzZVd2a1puY1FneGZkbk1xcXBqNXdKQWNOcS9SVm5lMURiWWx3V2NoVDJTaTY1TVltbUo4dCtGCiswbWNzVUxxak9uRU13ZjVlK3B0cTVMendieXJIWllxNUZOazdvY3VmUHYvWlFyY1NTQytjRndKQkFLdk9KQnlTCit4NTZxeUdlWkxPUWxXUzJKUzNLSm81OVh1TEZHcWNiZ045T205eEZhNDFZYjROOU52cGxGaXZzdlpkdzNtMVEvCitTUElYUXVUOFJNUERWTlE9CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNWRENDQWIyZ0F3SUJBZ0lKQU5mSE9Ca1pyOEpPTUEwR0NTcUdTSWIzRFFFQkJRVUFNRjh4Q3pBSkJnTlYKK0JBWVRBbGhaTVJjd0ZRWURWUVFIRXc1RFlYTjBiR1VnUVc1MGFISmhlREVqTUNFR0ExVUVDaE1hVUhsMGFHOXUKK0lGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNHhFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREFlRncweE1ERXcKK01EZ3lNekF4TlRaYUZ3MHlNREV3TURVeU16QXhOVFphTUY4eEN6QUpCZ05WQkFZVEFsaFpNUmN3RlFZRFZRUUgKK0V3NURZWE4wYkdVZ1FXNTBhSEpoZURFak1DRUdBMVVFQ2hNYVVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWsKK1lYUnBiMjR4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXcKK2dZa0NnWUVBMjF2VDVpc3E3RjY4YW1ZdXVOcFNGbEtEUHJNVUNhNFlXWXFaUnQyT1orLzNOS2FaMnhBaVN3cjcKKzZNclFGNzB0NW5MYlNQcHFFNSs1VnJTNThTWStnL3NYTGlGZDZBcGxIMXdKWndoNzhEb2ZiRllYVWdna3RGTXQKK3BUeWlYOGp0UDY2YmtjUGtEQURBMDg5UkkxVFFSNkNhK243SEZhN2MxZmFiVlY2aTN6a0NBd0VBQWFNWU1CWXcKK0ZBWURWUjBSQkEwd0M0SUpiRzlqWVd4b2IzTjBNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSFBjdFFCRVE0d2QKK0JKNitKY3BJcmFvcExuOEJHaGJqTldqNDBtbVJxV0IvTkFXRjZNNW5lN0twR0F1N3RMZUc0aGIxekxhbGRLOEcKK2x4eTJHUFNSRjZMRlM0OGRwRWoySGJNdjJudnY2eHhhbERNSjkrRGljV2dBS1RRNmJjWDJqM0dVa0NSMGcvVDEKK0NSbE5CQUFsdmhLek83Q2xwZjlsMFlLQkVmcmFKQnlYCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvbGVha2Vycy9SRUFETUUudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2xlYWtlcnMvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWVlZTBlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2xlYWtlcnMvUkVBRE1FLnR4dApAQCAtMCwwICsxLDMyIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0ZXN0IGNhc2VzIHRoYXQgYXJlIGtub3duIHRvIGxlYWsgcmVmZXJlbmNlcy4KK1RoZSBpZGVhIGlzIHRoYXQgeW91IGNhbiBpbXBvcnQgdGhlc2UgbW9kdWxlcyB3aGlsZSBpbiB0aGUgaW50ZXJwcmV0ZXIKK2FuZCBjYWxsIHRoZSBsZWFrIGZ1bmN0aW9uIHJlcGVhdGVkbHkuICBUaGlzIHdpbGwgb25seSBiZSBoZWxwZnVsIGlmCit0aGUgaW50ZXJwcmV0ZXIgd2FzIGJ1aWx0IGluIGRlYnVnIG1vZGUuICBJZiB0aGUgdG90YWwgcmVmIGNvdW50Citkb2Vzbid0IGluY3JlYXNlLCB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkIGFuZCB0aGUgZmlsZSBzaG91bGQgYmUgcmVtb3ZlZAorZnJvbSB0aGUgcmVwb3NpdG9yeS4KKworTm90ZTogIGJlIGNhcmVmdWwgdG8gY2hlY2sgZm9yIGN5Y2xpYyBnYXJiYWdlLiAgU29tZXRpbWVzIGl0IG1heSBiZSBoZWxwZnVsCit0byBkZWZpbmUgdGhlIGxlYWsgZnVuY3Rpb24gbGlrZToKKworZGVmIGxlYWsoKToKKyAgICBkZWYgaW5uZXJfbGVhaygpOgorICAgICAgICAjIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgbGVha3MsIGJ1dCBhbHNvIGNyZWF0ZXMgY3ljbGVzCisgICAgaW5uZXJfbGVhaygpCisgICAgZ2MuY29sbGVjdCgpIDsgZ2MuY29sbGVjdCgpIDsgZ2MuY29sbGVjdCgpCisKK0hlcmUncyBhbiBleGFtcGxlIGludGVycHJldGVyIHNlc3Npb24gZm9yIHRlc3RfZ2VzdGFsdCB3aGljaCBzdGlsbCBsZWFrczoKKworPj4+IGZyb20gdGVzdC5sZWFrZXJzLnRlc3RfZ2VzdGFsdCBpbXBvcnQgbGVhaworWzI0Mjc1IHJlZnNdCis+Pj4gbGVhaygpCitbMjg5MzYgcmVmc10KKz4+PiBsZWFrKCkKK1syODkzOCByZWZzXQorPj4+IGxlYWsoKQorWzI4OTQwIHJlZnNdCis+Pj4gCisKK09uY2UgdGhlIGxlYWsgaXMgZml4ZWQsIHRoZSB0ZXN0IGNhc2Ugc2hvdWxkIGJlIG1vdmVkIGludG8gYW4gYXBwcm9wcmlhdGUKK3Rlc3QgKGV2ZW4gaWYgaXQgd2FzIG9yaWdpbmFsbHkgZnJvbSB0aGUgdGVzdCBzdWl0ZSkuICBUaGlzIGVuc3VyZXMgdGhlCityZWdyZXNzaW9uIGRvZXNuJ3QgaGFwcGVuIGFnYWluLiAgQW5kIGlmIGl0IGRvZXMsIGl0IHNob3VsZCBiZSBlYXNpZXIKK3RvIHRyYWNrIGRvd24uCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvbGVha2Vycy9fX2luaXRfXy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9sZWFrZXJzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvbGVha2Vycy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9jdHlwZXMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2N0eXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjlhMmNkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9jdHlwZXMucHkKQEAgLTAsMCArMSwxNiBAQAorCisjIFRha2VuIGZyb20gTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHksIFBvaW50ZXJUb1N0cnVjdHVyZS50ZXN0KCkuCisjIFdoZW4gdGhpcyBsZWFrIGlzIGZpeGVkLCByZW1lbWJlciB0byByZW1vdmUgZnJvbSBNaXNjL2J1aWxkLnNoIExFQUtZX1RFU1RTLgorCitmcm9tIGN0eXBlcyBpbXBvcnQgU3RydWN0dXJlLCBjX2ludCwgUE9JTlRFUgoraW1wb3J0IGdjCisKK2RlZiBsZWFrX2lubmVyKCk6CisgICAgY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKKyAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19pbnQpXQorICAgIGNsYXNzIFJFQ1QoU3RydWN0dXJlKToKKyAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgUE9JTlRFUihQT0lOVCkpXQorCitkZWYgbGVhaygpOgorICAgIGxlYWtfaW5uZXIoKQorICAgIGdjLmNvbGxlY3QoKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9kaWN0c2VsZi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZGljdHNlbGYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliZDM3ZAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZGljdHNlbGYucHkKQEAgLTAsMCArMSwxMiBAQAorJycnVGVzdCBjYXNlIGZvciAic2VsZi5fX2RpY3RfXyA9IHNlbGYiIGNpcmN1bGFyIHJlZmVyZW5jZSBidWcgKCMxNDY5NjI5KScnJworCitpbXBvcnQgZ2MKKworY2xhc3MgTGVha3lEaWN0KGRpY3QpOgorICAgIHBhc3MKKworZGVmIGxlYWsoKToKKyAgICBsZCA9IExlYWt5RGljdCgpCisgICAgbGQuX19kaWN0X18gPSBsZAorICAgIGRlbCBsZAorICAgIGdjLmNvbGxlY3QoKTsgZ2MuY29sbGVjdCgpOyBnYy5jb2xsZWN0KCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmJmY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5CkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBzeXMKKworaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgIHJhaXNlIFZhbHVlRXJyb3IsICJUaGlzIHRlc3Qgb25seSBsZWFrcyBvbiBNYWMgT1MgWCIKKworZGVmIGxlYWsoKToKKyAgICAjIHRha2VuIGZyb20gcGxhdGZvcm0uX21hY192ZXJfbG9va3VwKCkKKyAgICBmcm9tIGdlc3RhbHQgaW1wb3J0IGdlc3RhbHQKKyAgICBpbXBvcnQgTWFjT1MKKworICAgIHRyeToKKyAgICAgICAgZ2VzdGFsdCgnc3lzdScpCisgICAgZXhjZXB0IE1hY09TLkVycm9yOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvbGVha2Vycy90ZXN0X3NlbGZ0eXBlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9zZWxmdHlwZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjA3YzMyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9zZWxmdHlwZS5weQpAQCAtMCwwICsxLDEzIEBACisjIFJlZmVyZW5jZSBjeWNsZXMgaW52b2x2aW5nIG9ubHkgdGhlIG9iX3R5cGUgZmllbGQgYXJlIHJhdGhlciB1bmNvbW1vbgorIyBidXQgcG9zc2libGUuICBJbnNwaXJlZCBieSBTRiBidWcgMTQ2OTYyOS4KKworaW1wb3J0IGdjCisKK2RlZiBsZWFrKCk6CisgICAgY2xhc3MgVCh0eXBlKToKKyAgICAgICAgcGFzcworICAgIGNsYXNzIFUodHlwZSk6CisgICAgICAgIF9fbWV0YWNsYXNzX18gPSBUCisgICAgVS5fX2NsYXNzX18gPSBVCisgICAgZGVsIFUKKyAgICBnYy5jb2xsZWN0KCk7IGdjLmNvbGxlY3QoKTsgZ2MuY29sbGVjdCgpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvbGlzdF90ZXN0cy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9saXN0X3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZDZkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvbGlzdF90ZXN0cy5weQpAQCAtMCwwICsxLDUzNCBAQAorIiIiCitUZXN0cyBjb21tb24gdG8gbGlzdCBhbmQgVXNlckxpc3QuVXNlckxpc3QKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHNlcV90ZXN0cworCitjbGFzcyBDb21tb25UZXN0KHNlcV90ZXN0cy5Db21tb25UZXN0KToKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgICMgSXRlcmFibGUgYXJnIGlzIG9wdGlvbmFsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoW10pLCBzZWxmLnR5cGUydGVzdCgpKQorCisgICAgICAgICMgSW5pdCBjbGVhcnMgcHJldmlvdXMgdmFsdWVzCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMSwgMiwgM10pCisgICAgICAgIGEuX19pbml0X18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKworICAgICAgICAjIEluaXQgb3ZlcndyaXRlcyBwcmV2aW91cyB2YWx1ZXMKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAyLCAzXSkKKyAgICAgICAgYS5fX2luaXRfXyhbNCwgNSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzQsIDUsIDZdKSkKKworICAgICAgICAjIE11dGFibGVzIGFsd2F5cyByZXR1cm4gYSBuZXcgb2JqZWN0CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbDAgPSBbXQorICAgICAgICBsMiA9IFswLCAxLCAyXQorICAgICAgICBhMCA9IHNlbGYudHlwZTJ0ZXN0KGwwKQorICAgICAgICBhMiA9IHNlbGYudHlwZTJ0ZXN0KGwyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGEwKSwgc3RyKGwwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEwKSwgcmVwcihsMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhMiksIHJlcHIobDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhMiksICJbMCwgMSwgMl0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYTIpLCAiWzAsIDEsIDJdIikKKworICAgICAgICBhMi5hcHBlbmQoYTIpCisgICAgICAgIGEyLmFwcGVuZCgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhMiksICJbMCwgMSwgMiwgWy4uLl0sIDNdIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEyKSwgIlswLCAxLCAyLCBbLi4uXSwgM10iKQorCisgICAgICAgIGwwID0gW10KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHN5cy5nZXRyZWN1cnNpb25saW1pdCgpICsgMTAwKToKKyAgICAgICAgICAgIGwwID0gW2wwXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHJlcHIsIGwwKQorCisgICAgZGVmIHRlc3RfcHJpbnQoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLnR5cGUydGVzdCh4cmFuZ2UoMjAwKSkKKyAgICAgICAgZC5hcHBlbmQoZCkKKyAgICAgICAgZC5leHRlbmQoeHJhbmdlKDIwMCw0MDApKQorICAgICAgICBkLmFwcGVuZChkKQorICAgICAgICBkLmFwcGVuZCg0MDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmbzoKKyAgICAgICAgICAgICAgICBwcmludCA+PiBmbywgZCwKKyAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmbzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWQoKSwgcmVwcihkKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3Rfc2V0X3N1YnNjcmlwdChzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDIwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5fX3NldGl0ZW1fXywgc2xpY2UoMCwgMTAsIDApLCBbMSwyLDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRpdGVtX18sIHNsaWNlKDAsIDEwKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5fX3NldGl0ZW1fXywgc2xpY2UoMCwgMTAsIDIpLCBbMSwyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fZ2V0aXRlbV9fLCAneCcsIDEpCisgICAgICAgIGFbc2xpY2UoMiwxMCwzKV0gPSBbMSwyLDNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzAsIDEsIDEsIDMsIDQsIDIsIDYsIDcsIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAxNywgMTgsIDE5XSkpCisKKyAgICBkZWYgdGVzdF9yZXZlcnNlZChzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDIwKSkKKyAgICAgICAgciA9IHJldmVyc2VkKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyKSwgc2VsZi50eXBlMnRlc3QocmFuZ2UoMTksIC0xLCAtMSkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCByLm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChzZWxmLnR5cGUydGVzdCgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50eXBlMnRlc3QoKSkKKyAgICAgICAgIyBCdWcgMzY4OTogbWFrZSBzdXJlIGxpc3QtcmV2ZXJzZWQtaXRlcmF0b3IgZG9lc24ndCBoYXZlIF9fbGVuX18KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJldmVyc2VkKFsxLDIsM10pKQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgYVswXSA9IDAKKyAgICAgICAgYVsxXSA9IDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFswLCAxMDBdKSkKKyAgICAgICAgYVstMV0gPSAyMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMCwgMjAwXSkpCisgICAgICAgIGFbLTJdID0gMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzEwMCwgMjAwXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19zZXRpdGVtX18sIC0zLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19zZXRpdGVtX18sIDIsIDIwMCkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19zZXRpdGVtX18sIDAsIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5fX3NldGl0ZW1fXywgLTEsIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fKQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwxLDIsMyw0XSkKKyAgICAgICAgYVswTF0gPSAxCisgICAgICAgIGFbMUxdID0gMgorICAgICAgICBhWzJMXSA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMSwyLDMsMyw0XSkpCisgICAgICAgIGFbMF0gPSA1CisgICAgICAgIGFbMV0gPSA2CisgICAgICAgIGFbMl0gPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzUsNiw3LDMsNF0pKQorICAgICAgICBhWy0yTF0gPSA4OAorICAgICAgICBhWy0xTF0gPSA5OQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFs1LDYsNyw4OCw5OV0pKQorICAgICAgICBhWy0yXSA9IDgKKyAgICAgICAgYVstMV0gPSA5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzUsNiw3LDgsOV0pKQorCisgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgZGVsIGFbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbMF0pCisgICAgICAgIGRlbCBhWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgW10pCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgZGVsIGFbLTJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgWzFdKQorICAgICAgICBkZWwgYVstMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbXSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fZGVsaXRlbV9fLCAtMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5fX2RlbGl0ZW1fXywgMikKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19kZWxpdGVtX18sIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fZGVsaXRlbV9fKQorCisgICAgZGVmIHRlc3Rfc2V0c2xpY2Uoc2VsZik6CisgICAgICAgIGwgPSBbMCwgMV0KKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KGwpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTMsIDQpOgorICAgICAgICAgICAgYVs6aV0gPSBsWzppXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBsKQorICAgICAgICAgICAgYTIgPSBhWzpdCisgICAgICAgICAgICBhMls6aV0gPSBhWzppXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMiwgYSkKKyAgICAgICAgICAgIGFbaTpdID0gbFtpOl0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgbCkKKyAgICAgICAgICAgIGEyID0gYVs6XQorICAgICAgICAgICAgYTJbaTpdID0gYVtpOl0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTIsIGEpCisgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgtMywgNCk6CisgICAgICAgICAgICAgICAgYVtpOmpdID0gbFtpOmpdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBsKQorICAgICAgICAgICAgICAgIGEyID0gYVs6XQorICAgICAgICAgICAgICAgIGEyW2k6al0gPSBhW2k6al0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEyLCBhKQorCisgICAgICAgIGFhMiA9IGEyWzpdCisgICAgICAgIGFhMls6MF0gPSBbLTIsIC0xXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFhMiwgWy0yLCAtMSwgMCwgMV0pCisgICAgICAgIGFhMlswOl0gPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFhMiwgW10pCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAyLCAzLCA0LCA1XSkKKyAgICAgICAgYVs6LTFdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFsxLCAyLCAzLCA0LCA1LCA1XSkpCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMSwgMiwgMywgNCwgNV0pCisgICAgICAgIGFbMTpdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFsxLCAxLCAyLCAzLCA0LCA1XSkpCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMSwgMiwgMywgNCwgNV0pCisgICAgICAgIGFbMTotMV0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzEsIDEsIDIsIDMsIDQsIDUsIDVdKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoW10pCisgICAgICAgIGFbOl0gPSB0dXBsZShyYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QocmFuZ2UoMTApKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRzbGljZV9fLCAwLCAxLCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRpdGVtX18sIHNsaWNlKDAsIDEsIDUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX3NldHNsaWNlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX3NldGl0ZW1fXykKKworICAgIGRlZiB0ZXN0X2RlbHNsaWNlKHNlbGYpOgorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICBkZWwgYVsxOjJdCisgICAgICAgIGRlbCBhWzA6MV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbXSkpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgZGVsIGFbMUw6MkxdCisgICAgICAgIGRlbCBhWzBMOjFMXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICBkZWwgYVstMjotMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMV0pKQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIGRlbCBhWy0yTDotMUxdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzFdKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICBkZWwgYVsxOl0KKyAgICAgICAgZGVsIGFbOjFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoW10pKQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIGRlbCBhWzFMOl0KKyAgICAgICAgZGVsIGFbOjFMXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICBkZWwgYVstMTpdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzBdKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICBkZWwgYVstMUw6XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFswXSkpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgZGVsIGFbOl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbXSkpCisKKyAgICBkZWYgdGVzdF9hcHBlbmQoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbXSkKKyAgICAgICAgYS5hcHBlbmQoMCkKKyAgICAgICAgYS5hcHBlbmQoMSkKKyAgICAgICAgYS5hcHBlbmQoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMCwgMSwgMl0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5hcHBlbmQpCisKKyAgICBkZWYgdGVzdF9leHRlbmQoc2VsZik6CisgICAgICAgIGExID0gc2VsZi50eXBlMnRlc3QoWzBdKQorICAgICAgICBhMiA9IHNlbGYudHlwZTJ0ZXN0KCgwLCAxKSkKKyAgICAgICAgYSA9IGExWzpdCisgICAgICAgIGEuZXh0ZW5kKGEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGExICsgYTIpCisKKyAgICAgICAgYS5leHRlbmQoc2VsZi50eXBlMnRlc3QoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGExICsgYTIpCisKKyAgICAgICAgYS5leHRlbmQoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMCwgMCwgMSwgMCwgMCwgMV0pKQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdCgic3BhbSIpCisgICAgICAgIGEuZXh0ZW5kKCJlZ2dzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBsaXN0KCJzcGFtZWdncyIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5leHRlbmQsIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmV4dGVuZCkKKworICAgIGRlZiB0ZXN0X2luc2VydChzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyXSkKKyAgICAgICAgYS5pbnNlcnQoMCwgLTIpCisgICAgICAgIGEuaW5zZXJ0KDEsIC0xKQorICAgICAgICBhLmluc2VydCgyLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFstMiwgLTEsIDAsIDAsIDEsIDJdKQorCisgICAgICAgIGIgPSBhWzpdCisgICAgICAgIGIuaW5zZXJ0KC0yLCAiZm9vIikKKyAgICAgICAgYi5pbnNlcnQoLTIwMCwgImxlZnQiKQorICAgICAgICBiLmluc2VydCgyMDAsICJyaWdodCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgc2VsZi50eXBlMnRlc3QoWyJsZWZ0IiwtMiwtMSwwLDAsImZvbyIsMSwyLCJyaWdodCJdKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuaW5zZXJ0KQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWy0xLCAwLCAxXSkKKyAgICAgICAgYS5wb3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFstMSwgMF0pCisgICAgICAgIGEucG9wKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgWzBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLnBvcCwgNSkKKyAgICAgICAgYS5wb3AoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5wb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5wb3AsIDQyLCA0MikKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxMCwgMjAsIDMwLCA0MF0pCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMCwgMV0pCisgICAgICAgIGEucmVtb3ZlKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgWzAsIDBdKQorICAgICAgICBhLnJlbW92ZSgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFswXSkKKyAgICAgICAgYS5yZW1vdmUoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLnJlbW92ZSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEucmVtb3ZlKQorCisgICAgICAgIGNsYXNzIEJhZEV4YyhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEJhZENtcDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIG90aGVyID09IDI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJhZEV4YygpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQmFkRXhjLCBhLnJlbW92ZSwgQmFkQ21wKCkpCisKKyAgICAgICAgY2xhc3MgQmFkQ21wMjoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEJhZEV4YygpCisKKyAgICAgICAgZCA9IHNlbGYudHlwZTJ0ZXN0KCdhYmNkZWZnaGNpaicpCisgICAgICAgIGQucmVtb3ZlKCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLnR5cGUydGVzdCgnYWJkZWZnaGNpaicpKQorICAgICAgICBkLnJlbW92ZSgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi50eXBlMnRlc3QoJ2FiZGVmZ2hpaicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkLnJlbW92ZSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHNlbGYudHlwZTJ0ZXN0KCdhYmRlZmdoaWonKSkKKworICAgICAgICAjIEhhbmRsZSBjb21wYXJpc29uIGVycm9ycworICAgICAgICBkID0gc2VsZi50eXBlMnRlc3QoWydhJywgJ2InLCBCYWRDbXAyKCksICdjJ10pCisgICAgICAgIGUgPSBzZWxmLnR5cGUydGVzdChkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYWRFeGMsIGQucmVtb3ZlLCAnYycpCisgICAgICAgIGZvciB4LCB5IGluIHppcChkLCBlKToKKyAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgb3JpZ2luYWwgb3JkZXIgYW5kIHZhbHVlcyBhcmUgcmV0YWluZWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHgsIHkpCisKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyXSkqMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuY291bnQoMCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5jb3VudCgxKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmNvdW50KDMpLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5jb3VudCkKKworICAgICAgICBjbGFzcyBCYWRFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBCYWRDbXA6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBvdGhlciA9PSAyOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCYWRFeGMoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhZEV4YywgYS5jb3VudCwgQmFkQ21wKCkpCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuaW5kZXgoMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUuaW5kZXgsIDIpCisKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFstMiwgLTEsIDAsIDAsIDEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuY291bnQoMCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KDAsIDIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuaW5kZXgoLTIsIC0xMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwLCAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KDAsIDMsIDQpLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1LmluZGV4LCAyLCAwLCAtMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1LmluZGV4KQorCisgICAgICAgIGNsYXNzIEJhZEV4YyhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEJhZENtcDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIG90aGVyID09IDI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJhZEV4YygpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQmFkRXhjLCBhLmluZGV4LCBCYWRDbXAoKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWy0yLCAtMSwgMCwgMCwgMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIDIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoMCwgLTQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoLTIsIC0xMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIC0zKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIDMsIDQpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoMCwgLTMsIC0yKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIC00KnN5cy5tYXhpbnQsIDQqc3lzLm1heGludCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuaW5kZXgsIDAsIDQqc3lzLm1heGludCwtNCpzeXMubWF4aW50KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLmluZGV4LCAyLCAwLCAtMTApCisgICAgICAgIGEucmVtb3ZlKDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuaW5kZXgsIDIsIDAsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWy0yLCAtMSwgMCwgMSwgMl0pKQorCisgICAgICAgICMgVGVzdCBtb2RpZnlpbmcgdGhlIGxpc3QgZHVyaW5nIGluZGV4J3MgaXRlcmF0aW9uCisgICAgICAgIGNsYXNzIEV2aWxDbXA6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmljdGltKToKKyAgICAgICAgICAgICAgICBzZWxmLnZpY3RpbSA9IHZpY3RpbQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYudmljdGltWzpdCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdCgpCisgICAgICAgIGFbOl0gPSBbRXZpbENtcChhKSBmb3IgXyBpbiB4cmFuZ2UoMTAwKV0KKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gc2VnIGZhdWx0IGJlZm9yZSBwYXRjaCAjMTAwNTc3OAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLmluZGV4LCBOb25lKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZShzZWxmKToKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFstMiwgLTEsIDAsIDEsIDJdKQorICAgICAgICB1MiA9IHVbOl0KKyAgICAgICAgdS5yZXZlcnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBbMiwgMSwgMCwgLTEsIC0yXSkKKyAgICAgICAgdS5yZXZlcnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCB1MikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUucmV2ZXJzZSwgNDIpCisKKyAgICBkZWYgdGVzdF9zb3J0KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgICAgICgidGhlIGNtcCBhcmd1bWVudCBpcyBub3Qgc3VwcG9ydGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3NvcnQoKQorCisgICAgZGVmIF90ZXN0X3NvcnQoc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMSwgMF0pCisgICAgICAgIHUuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgWzAsIDFdKQorCisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMiwxLDAsLTEsLTJdKQorICAgICAgICB1LnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIHNlbGYudHlwZTJ0ZXN0KFstMiwtMSwwLDEsMl0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdS5zb3J0LCA0MiwgNDIpCisKKyAgICAgICAgZGVmIHJldmNtcChhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBjbXAoYiwgYSkKKyAgICAgICAgdS5zb3J0KHJldmNtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzZWxmLnR5cGUydGVzdChbMiwxLDAsLTEsLTJdKSkKKworICAgICAgICAjIFRoZSBmb2xsb3dpbmcgZHVtcHMgY29yZSBpbiB1bnBhdGNoZWQgUHl0aG9uIDEuNToKKyAgICAgICAgZGVmIG15Q29tcGFyaXNvbih4LHkpOgorICAgICAgICAgICAgcmV0dXJuIGNtcCh4JTMsIHklNykKKyAgICAgICAgeiA9IHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDEyKSkKKyAgICAgICAgei5zb3J0KG15Q29tcGFyaXNvbikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHouc29ydCwgMikKKworICAgICAgICBkZWYgc2VsZm1vZGlmeWluZ0NvbXBhcmlzb24oeCx5KToKKyAgICAgICAgICAgIHouYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gY21wKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHouc29ydCwgc2VsZm1vZGlmeWluZ0NvbXBhcmlzb24pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6LnNvcnQsIGxhbWJkYSB4LCB5OiAncycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6LnNvcnQsIDQyLCA0MiwgNDIsIDQyKQorCisgICAgZGVmIHRlc3Rfc2xpY2Uoc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdCgic3BhbSIpCisgICAgICAgIHVbOjJdID0gImgiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgbGlzdCgiaGFtIikpCisKKyAgICBkZWYgdGVzdF9pYWRkKHNlbGYpOgorICAgICAgICBzdXBlcihDb21tb25UZXN0LCBzZWxmKS50ZXN0X2lhZGQoKQorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICB1MiA9IHUKKyAgICAgICAgdSArPSBbMiwgM10KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh1LCB1MikKKworICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoInNwYW0iKQorICAgICAgICB1ICs9ICJlZ2dzIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIHNlbGYudHlwZTJ0ZXN0KCJzcGFtZWdncyIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdS5fX2lhZGRfXywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ltdWwoc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIHUgKj0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAwLCAxLCAwLCAxXSkpCisgICAgICAgIHUgKj0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKyAgICAgICAgcyA9IHNlbGYudHlwZTJ0ZXN0KFtdKQorICAgICAgICBvbGRpZCA9IGlkKHMpCisgICAgICAgIHMgKj0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChzKSwgb2xkaWQpCisKKyAgICBkZWYgdGVzdF9leHRlbmRlZHNsaWNpbmcoc2VsZik6CisgICAgICAgICMgIHN1YnNjcmlwdAorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsMSwyLDMsNF0pCisKKyAgICAgICAgIyAgZGVsZXRpb24KKyAgICAgICAgZGVsIGFbOjoyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFsxLDNdKSkKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDUpKQorICAgICAgICBkZWwgYVsxOjoyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFswLDIsNF0pKQorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QocmFuZ2UoNSkpCisgICAgICAgIGRlbCBhWzE6Oi0yXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFswLDIsMyw0XSkpCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChyYW5nZSgxMCkpCisgICAgICAgIGRlbCBhWzo6MTAwMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0pKQorICAgICAgICAjICBhc3NpZ25tZW50CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChyYW5nZSgxMCkpCisgICAgICAgIGFbOjoyXSA9IFstMV0qNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFstMSwgMSwgLTEsIDMsIC0xLCA1LCAtMSwgNywgLTEsIDldKSkKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDEwKSkKKyAgICAgICAgYVs6Oi00XSA9IFsxMF0qMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFswLCAxMCwgMiwgMywgNCwgMTAsIDYsIDcsIDggLDEwXSkpCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChyYW5nZSg0KSkKKyAgICAgICAgYVs6Oi0xXSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMywgMiwgMSwgMF0pKQorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QocmFuZ2UoMTApKQorICAgICAgICBiID0gYVs6XQorICAgICAgICBjID0gYVs6XQorICAgICAgICBhWzI6M10gPSBzZWxmLnR5cGUydGVzdChbInR3byIsICJlbGVtZW50cyJdKQorICAgICAgICBiW3NsaWNlKDIsMyldID0gc2VsZi50eXBlMnRlc3QoWyJ0d28iLCAiZWxlbWVudHMiXSkKKyAgICAgICAgY1syOjM6XSA9IHNlbGYudHlwZTJ0ZXN0KFsidHdvIiwgImVsZW1lbnRzIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBjKQorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QocmFuZ2UoMTApKQorICAgICAgICBhWzo6Ml0gPSB0dXBsZShyYW5nZSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMCwgMSwgMSwgMywgMiwgNSwgMywgNywgNCwgOV0pKQorICAgICAgICAjIHRlc3QgaXNzdWU3Nzg4CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChyYW5nZSgxMCkpCisgICAgICAgIGRlbCBhWzk6OjE8PDMzM10KKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2V4Y2VwdGlvbl9oYW5kbGluZyhzZWxmKToKKyAgICAgICAgIyBCdWcgIzEyNDI2NTcKKyAgICAgICAgY2xhc3MgRihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBsaXN0LCBGKCkpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvbG9ja190ZXN0cy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NmY5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvbG9ja190ZXN0cy5weQpAQCAtMCwwICsxLDU0NiBAQAorIiIiCitWYXJpb3VzIHRlc3RzIGZvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4KKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorZnJvbSB0aHJlYWQgaW1wb3J0IHN0YXJ0X25ld190aHJlYWQsIGdldF9pZGVudAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKKworCitkZWYgX3dhaXQoKToKKyAgICAjIEEgY3J1ZGUgd2FpdC95aWVsZCBmdW5jdGlvbiBub3QgcmVseWluZyBvbiBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4KKyAgICB0aW1lLnNsZWVwKDAuMDEpCisKK2NsYXNzIEJ1bmNoKG9iamVjdCk6CisgICAgIiIiCisgICAgQSBidW5jaCBvZiB0aHJlYWRzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmLCBuLCB3YWl0X2JlZm9yZV9leGl0PUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnN0cnVjdCBhIGJ1bmNoIG9mIGBuYCB0aHJlYWRzIHJ1bm5pbmcgdGhlIHNhbWUgZnVuY3Rpb24gYGZgLgorICAgICAgICBJZiBgd2FpdF9iZWZvcmVfZXhpdGAgaXMgVHJ1ZSwgdGhlIHRocmVhZHMgd29uJ3QgdGVybWluYXRlIHVudGlsCisgICAgICAgIGRvX2ZpbmlzaCgpIGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZiA9IGYKKyAgICAgICAgc2VsZi5uID0gbgorICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBbXQorICAgICAgICBzZWxmLmZpbmlzaGVkID0gW10KKyAgICAgICAgc2VsZi5fY2FuX2V4aXQgPSBub3Qgd2FpdF9iZWZvcmVfZXhpdAorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgdGlkID0gZ2V0X2lkZW50KCkKKyAgICAgICAgICAgIHNlbGYuc3RhcnRlZC5hcHBlbmQodGlkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaGVkLmFwcGVuZCh0aWQpCisgICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX2Nhbl9leGl0OgorICAgICAgICAgICAgICAgICAgICBfd2FpdCgpCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgc3RhcnRfbmV3X3RocmVhZCh0YXNrLCAoKSkKKworICAgIGRlZiB3YWl0X2Zvcl9zdGFydGVkKHNlbGYpOgorICAgICAgICB3aGlsZSBsZW4oc2VsZi5zdGFydGVkKSA8IHNlbGYubjoKKyAgICAgICAgICAgIF93YWl0KCkKKworICAgIGRlZiB3YWl0X2Zvcl9maW5pc2hlZChzZWxmKToKKyAgICAgICAgd2hpbGUgbGVuKHNlbGYuZmluaXNoZWQpIDwgc2VsZi5uOgorICAgICAgICAgICAgX3dhaXQoKQorCisgICAgZGVmIGRvX2ZpbmlzaChzZWxmKToKKyAgICAgICAgc2VsZi5fY2FuX2V4aXQgPSBUcnVlCisKKworY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSBzdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisgICAgICAgIHN1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKworY2xhc3MgQmFzZUxvY2tUZXN0cyhCYXNlVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBib3RoIHJlY3Vyc2l2ZSBhbmQgbm9uLXJlY3Vyc2l2ZSBsb2Nrcy4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIGRlbCBsb2NrCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2Rlc3Ryb3koc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgZGVsIGxvY2sKKworICAgIGRlZiB0ZXN0X2FjcXVpcmVfcmVsZWFzZShzZWxmKToKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICBkZWwgbG9jaworCisgICAgZGVmIHRlc3RfdHJ5X2FjcXVpcmUoc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2suYWNxdWlyZShGYWxzZSkpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICBkZWYgdGVzdF90cnlfYWNxdWlyZV9jb250ZW5kZWQoc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobG9jay5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgQnVuY2goZiwgMSkud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdFswXSkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmVfY29udGVuZGVkKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIE4gPSA1CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgICAgICBiID0gQnVuY2goZiwgTikKKyAgICAgICAgYi53YWl0X2Zvcl9zdGFydGVkKCkKKyAgICAgICAgX3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiLmZpbmlzaGVkKSwgMCkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgYi53YWl0X2Zvcl9maW5pc2hlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIuZmluaXNoZWQpLCBOKQorCisgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIGRlZiBfd2l0aChlcnI9Tm9uZSk6CisgICAgICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnIKKyAgICAgICAgX3dpdGgoKQorICAgICAgICAjIENoZWNrIHRoZSBsb2NrIGlzIHVuYWNxdWlyZWQKKyAgICAgICAgQnVuY2goZiwgMSkud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF93aXRoLCBUeXBlRXJyb3IpCisgICAgICAgICMgQ2hlY2sgdGhlIGxvY2sgaXMgdW5hY3F1aXJlZAorICAgICAgICBCdW5jaChmLCAxKS53YWl0X2Zvcl9maW5pc2hlZCgpCisKKyAgICBkZWYgdGVzdF90aHJlYWRfbGVhayhzZWxmKToKKyAgICAgICAgIyBUaGUgbG9jayBzaG91bGRuJ3QgbGVhayBhIFRocmVhZCBpbnN0YW5jZSB3aGVuIHVzZWQgZnJvbSBhIGZvcmVpZ24KKyAgICAgICAgIyAobm9uLXRocmVhZGluZykgdGhyZWFkLgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgbiA9IGxlbih0aHJlYWRpbmcuZW51bWVyYXRlKCkpCisgICAgICAgICMgV2UgcnVuIG1hbnkgdGhyZWFkcyBpbiB0aGUgaG9wZSB0aGF0IGV4aXN0aW5nIHRocmVhZHMgaWRzIHdvbid0CisgICAgICAgICMgYmUgcmVjeWNsZWQuCisgICAgICAgIEJ1bmNoKGYsIDE1KS53YWl0X2Zvcl9maW5pc2hlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgbGVuKHRocmVhZGluZy5lbnVtZXJhdGUoKSkpCisKKworY2xhc3MgTG9ja1Rlc3RzKEJhc2VMb2NrVGVzdHMpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBub24tcmVjdXJzaXZlLCB3ZWFrIGxvY2tzCisgICAgKHdoaWNoIGNhbiBiZSBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcykuCisgICAgIiIiCisgICAgZGVmIHRlc3RfcmVhY3F1aXJlKHNlbGYpOgorICAgICAgICAjIExvY2sgbmVlZHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHJlLWFjcXVpcmluZy4KKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICBwaGFzZSA9IFtdCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgcGhhc2UuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgcGhhc2UuYXBwZW5kKE5vbmUpCisgICAgICAgIHN0YXJ0X25ld190aHJlYWQoZiwgKCkpCisgICAgICAgIHdoaWxlIGxlbihwaGFzZSkgPT0gMDoKKyAgICAgICAgICAgIF93YWl0KCkKKyAgICAgICAgX3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwaGFzZSksIDEpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHdoaWxlIGxlbihwaGFzZSkgPT0gMToKKyAgICAgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGhhc2UpLCAyKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW50X3RocmVhZChzZWxmKToKKyAgICAgICAgIyBMb2NrIGNhbiBiZSByZWxlYXNlZCBmcm9tIGEgZGlmZmVyZW50IHRocmVhZC4KKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgYiA9IEJ1bmNoKGYsIDEpCisgICAgICAgIGIud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisKK2NsYXNzIFJMb2NrVGVzdHMoQmFzZUxvY2tUZXN0cyk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIHJlY3Vyc2l2ZSBsb2Nrcy4KKyAgICAiIiIKKyAgICBkZWYgdGVzdF9yZWFjcXVpcmUoc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2VfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgIyBDYW5ub3QgcmVsZWFzZSBhbiB1bmFjcXVpcmVkIGxvY2sKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxvY2sucmVsZWFzZSkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBsb2NrLnJlbGVhc2UpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbnRfdGhyZWFkKHNlbGYpOgorICAgICAgICAjIENhbm5vdCByZWxlYXNlIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkCisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIGIgPSBCdW5jaChmLCAxLCBUcnVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxvY2sucmVsZWFzZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGIuZG9fZmluaXNoKCkKKworICAgIGRlZiB0ZXN0X19pc19vd25lZChzZWxmKToKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2suX2lzX293bmVkKCkpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLl9pc19vd25lZCgpKQorICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5faXNfb3duZWQoKSkKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobG9jay5faXNfb3duZWQoKSkKKyAgICAgICAgQnVuY2goZiwgMSkud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdFswXSkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2suX2lzX293bmVkKCkpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5faXNfb3duZWQoKSkKKworCitjbGFzcyBFdmVudFRlc3RzKEJhc2VUZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIEV2ZW50IG9iamVjdHMuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9pc19zZXQoc2VsZik6CisgICAgICAgIGV2dCA9IHNlbGYuZXZlbnR0eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldnQuaXNfc2V0KCkpCisgICAgICAgIGV2dC5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZ0LmlzX3NldCgpKQorICAgICAgICBldnQuc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2dC5pc19zZXQoKSkKKyAgICAgICAgZXZ0LmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldnQuaXNfc2V0KCkpCisgICAgICAgIGV2dC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZ0LmlzX3NldCgpKQorCisgICAgZGVmIF9jaGVja19ub3RpZnkoc2VsZiwgZXZ0KToKKyAgICAgICAgIyBBbGwgdGhyZWFkcyBnZXQgbm90aWZpZWQKKyAgICAgICAgTiA9IDUKKyAgICAgICAgcmVzdWx0czEgPSBbXQorICAgICAgICByZXN1bHRzMiA9IFtdCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoZXZ0LndhaXQoKSkKKyAgICAgICAgICAgIHJlc3VsdHMyLmFwcGVuZChldnQud2FpdCgpKQorICAgICAgICBiID0gQnVuY2goZiwgTikKKyAgICAgICAgYi53YWl0X2Zvcl9zdGFydGVkKCkKKyAgICAgICAgX3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzMSksIDApCisgICAgICAgIGV2dC5zZXQoKQorICAgICAgICBiLndhaXRfZm9yX2ZpbmlzaGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgW1RydWVdICogTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMiwgW1RydWVdICogTikKKworICAgIGRlZiB0ZXN0X25vdGlmeShzZWxmKToKKyAgICAgICAgZXZ0ID0gc2VsZi5ldmVudHR5cGUoKQorICAgICAgICBzZWxmLl9jaGVja19ub3RpZnkoZXZ0KQorICAgICAgICAjIEFub3RoZXIgdGltZSwgYWZ0ZXIgYW4gZXhwbGljaXQgY2xlYXIoKQorICAgICAgICBldnQuc2V0KCkKKyAgICAgICAgZXZ0LmNsZWFyKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfbm90aWZ5KGV2dCkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIGV2dCA9IHNlbGYuZXZlbnR0eXBlKCkKKyAgICAgICAgcmVzdWx0czEgPSBbXQorICAgICAgICByZXN1bHRzMiA9IFtdCisgICAgICAgIE4gPSA1CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoZXZ0LndhaXQoMC4wKSkKKyAgICAgICAgICAgIHQxID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHIgPSBldnQud2FpdCgwLjIpCisgICAgICAgICAgICB0MiA9IHRpbWUudGltZSgpCisgICAgICAgICAgICByZXN1bHRzMi5hcHBlbmQoKHIsIHQyIC0gdDEpKQorICAgICAgICBCdW5jaChmLCBOKS53YWl0X2Zvcl9maW5pc2hlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFtGYWxzZV0gKiBOKQorICAgICAgICBmb3IgciwgZHQgaW4gcmVzdWx0czI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQgPj0gMC4yLCBkdCkKKyAgICAgICAgIyBUaGUgZXZlbnQgaXMgc2V0CisgICAgICAgIHJlc3VsdHMxID0gW10KKyAgICAgICAgcmVzdWx0czIgPSBbXQorICAgICAgICBldnQuc2V0KCkKKyAgICAgICAgQnVuY2goZiwgTikud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbVHJ1ZV0gKiBOKQorICAgICAgICBmb3IgciwgZHQgaW4gcmVzdWx0czI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocikKKworCitjbGFzcyBDb25kaXRpb25UZXN0cyhCYXNlVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBjb25kaXRpb24gdmFyaWFibGVzLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfYWNxdWlyZShzZWxmKToKKyAgICAgICAgY29uZCA9IHNlbGYuY29uZHR5cGUoKQorICAgICAgICAjIEJlIGRlZmF1bHQgd2UgaGF2ZSBhbiBSTG9jazogdGhlIGNvbmRpdGlvbiBjYW4gYmUgYWNxdWlyZWQgbXVsdGlwbGUKKyAgICAgICAgIyB0aW1lcy4KKyAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgY29uZCA9IHNlbGYuY29uZHR5cGUobG9jaykKKyAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmFjcXVpcmUoRmFsc2UpKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLmFjcXVpcmUoRmFsc2UpKQorICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB3aXRoIGNvbmQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2suYWNxdWlyZShGYWxzZSkpCisKKyAgICBkZWYgdGVzdF91bmFjcXVpcmVkX3dhaXQoc2VsZik6CisgICAgICAgIGNvbmQgPSBzZWxmLmNvbmR0eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb25kLndhaXQpCisKKyAgICBkZWYgdGVzdF91bmFjcXVpcmVkX25vdGlmeShzZWxmKToKKyAgICAgICAgY29uZCA9IHNlbGYuY29uZHR5cGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNvbmQubm90aWZ5KQorCisgICAgZGVmIF9jaGVja19ub3RpZnkoc2VsZiwgY29uZCk6CisgICAgICAgIE4gPSA1CisgICAgICAgIHJlc3VsdHMxID0gW10KKyAgICAgICAgcmVzdWx0czIgPSBbXQorICAgICAgICBwaGFzZV9udW0gPSAwCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgY29uZC53YWl0KCkKKyAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQocGhhc2VfbnVtKQorICAgICAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGNvbmQud2FpdCgpCisgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmVzdWx0czIuYXBwZW5kKHBoYXNlX251bSkKKyAgICAgICAgYiA9IEJ1bmNoKGYsIE4pCisgICAgICAgIGIud2FpdF9mb3Jfc3RhcnRlZCgpCisgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgW10pCisgICAgICAgICMgTm90aWZ5IDMgdGhyZWFkcyBhdCBmaXJzdAorICAgICAgICBjb25kLmFjcXVpcmUoKQorICAgICAgICBjb25kLm5vdGlmeSgzKQorICAgICAgICBfd2FpdCgpCisgICAgICAgIHBoYXNlX251bSA9IDEKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgd2hpbGUgbGVuKHJlc3VsdHMxKSA8IDM6CisgICAgICAgICAgICBfd2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFsxXSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFtdKQorICAgICAgICAjIE5vdGlmeSA1IHRocmVhZHM6IHRoZXkgbWlnaHQgYmUgaW4gdGhlaXIgZmlyc3Qgb3Igc2Vjb25kIHdhaXQKKyAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgY29uZC5ub3RpZnkoNSkKKyAgICAgICAgX3dhaXQoKQorICAgICAgICBwaGFzZV9udW0gPSAyCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHdoaWxlIGxlbihyZXN1bHRzMSkgKyBsZW4ocmVzdWx0czIpIDwgODoKKyAgICAgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWzFdICogMyArIFsyXSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFsyXSAqIDMpCisgICAgICAgICMgTm90aWZ5IGFsbCB0aHJlYWRzOiB0aGV5IGFyZSBhbGwgaW4gdGhlaXIgc2Vjb25kIHdhaXQKKyAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgY29uZC5ub3RpZnlfYWxsKCkKKyAgICAgICAgX3dhaXQoKQorICAgICAgICBwaGFzZV9udW0gPSAzCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHdoaWxlIGxlbihyZXN1bHRzMikgPCA1OgorICAgICAgICAgICAgX3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbMV0gKiAzICsgWzJdICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMiwgWzJdICogMyArIFszXSAqIDIpCisgICAgICAgIGIud2FpdF9mb3JfZmluaXNoZWQoKQorCisgICAgZGVmIHRlc3Rfbm90aWZ5KHNlbGYpOgorICAgICAgICBjb25kID0gc2VsZi5jb25kdHlwZSgpCisgICAgICAgIHNlbGYuX2NoZWNrX25vdGlmeShjb25kKQorICAgICAgICAjIEEgc2Vjb25kIHRpbWUsIHRvIGNoZWNrIGludGVybmFsIHN0YXRlIGlzIHN0aWxsIG9rLgorICAgICAgICBzZWxmLl9jaGVja19ub3RpZnkoY29uZCkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIGNvbmQgPSBzZWxmLmNvbmR0eXBlKCkKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIE4gPSA1CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgdDEgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgY29uZC53YWl0KDAuMikKKyAgICAgICAgICAgIHQyID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh0MiAtIHQxKQorICAgICAgICBCdW5jaChmLCBOKS53YWl0X2Zvcl9maW5pc2hlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdHMpLCA1KQorICAgICAgICBmb3IgZHQgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdCA+PSAwLjIsIGR0KQorCisKK2NsYXNzIEJhc2VTZW1hcGhvcmVUZXN0cyhCYXNlVGVzdENhc2UpOgorICAgICIiIgorICAgIENvbW1vbiB0ZXN0cyBmb3Ige2JvdW5kZWQsIHVuYm91bmRlZH0gc2VtYXBob3JlIG9iamVjdHMuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zZW10eXBlLCB2YWx1ZSA9IC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnNlbXR5cGUsIHZhbHVlID0gLXN5cy5tYXhpbnQpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlKHNlbGYpOgorICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoMSkKKyAgICAgICAgc2VtLmFjcXVpcmUoKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbSA9IHNlbGYuc2VtdHlwZSgyKQorICAgICAgICBzZW0uYWNxdWlyZSgpCisgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2Rlc3Ryb3koc2VsZik6CisgICAgICAgIHNlbSA9IHNlbGYuc2VtdHlwZSgpCisgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgZGVsIHNlbQorCisgICAgZGVmIHRlc3RfYWNxdWlyZV9jb250ZW5kZWQoc2VsZik6CisgICAgICAgIHNlbSA9IHNlbGYuc2VtdHlwZSg3KQorICAgICAgICBzZW0uYWNxdWlyZSgpCisgICAgICAgIE4gPSAxMAorICAgICAgICByZXN1bHRzMSA9IFtdCisgICAgICAgIHJlc3VsdHMyID0gW10KKyAgICAgICAgcGhhc2VfbnVtID0gMAorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0czEuYXBwZW5kKHBoYXNlX251bSkKKyAgICAgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdHMyLmFwcGVuZChwaGFzZV9udW0pCisgICAgICAgIGIgPSBCdW5jaChmLCAxMCkKKyAgICAgICAgYi53YWl0X2Zvcl9zdGFydGVkKCkKKyAgICAgICAgd2hpbGUgbGVuKHJlc3VsdHMxKSArIGxlbihyZXN1bHRzMikgPCA2OgorICAgICAgICAgICAgX3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxICsgcmVzdWx0czIsIFswXSAqIDYpCisgICAgICAgIHBoYXNlX251bSA9IDEKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNyk6CisgICAgICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHdoaWxlIGxlbihyZXN1bHRzMSkgKyBsZW4ocmVzdWx0czIpIDwgMTM6CisgICAgICAgICAgICBfd2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJlc3VsdHMxICsgcmVzdWx0czIpLCBbMF0gKiA2ICsgWzFdICogNykKKyAgICAgICAgcGhhc2VfbnVtID0gMgorICAgICAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgd2hpbGUgbGVuKHJlc3VsdHMxKSArIGxlbihyZXN1bHRzMikgPCAxOToKKyAgICAgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmVzdWx0czEgKyByZXN1bHRzMiksIFswXSAqIDYgKyBbMV0gKiA3ICsgWzJdICogNikKKyAgICAgICAgIyBUaGUgc2VtYXBob3JlIGlzIHN0aWxsIGxvY2tlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgIyBGaW5hbCByZWxlYXNlLCB0byBsZXQgdGhlIGxhc3QgdGhyZWFkIGZpbmlzaAorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIGIud2FpdF9mb3JfZmluaXNoZWQoKQorCisgICAgZGVmIHRlc3RfdHJ5X2FjcXVpcmUoc2VsZik6CisgICAgICAgIHNlbSA9IHNlbGYuc2VtdHlwZSgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmFjcXVpcmUoRmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmFjcXVpcmUoRmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmFjcXVpcmUoRmFsc2UpKQorCisgICAgZGVmIHRlc3RfdHJ5X2FjcXVpcmVfY29udGVuZGVkKHNlbGYpOgorICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoNCkKKyAgICAgICAgc2VtLmFjcXVpcmUoKQorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHNlbS5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHNlbS5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgQnVuY2goZiwgNSkud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICAjIFRoZXJlIGNhbiBiZSBhIHRocmVhZCBzd2l0Y2ggYmV0d2VlbiBhY3F1aXJpbmcgdGhlIHNlbWFwaG9yZSBhbmQKKyAgICAgICAgIyBhcHBlbmRpbmcgdGhlIHJlc3VsdCwgdGhlcmVmb3JlIHJlc3VsdHMgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUKKyAgICAgICAgIyBvcmRlcmVkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyZXN1bHRzKSwgW0ZhbHNlXSAqIDcgKyBbVHJ1ZV0gKiAgMyApCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3ZhbHVlKHNlbGYpOgorICAgICAgICAjIFRoZSBkZWZhdWx0IGluaXRpYWwgdmFsdWUgaXMgMS4KKyAgICAgICAgc2VtID0gc2VsZi5zZW10eXBlKCkKKyAgICAgICAgc2VtLmFjcXVpcmUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBiID0gQnVuY2goZiwgMSkKKyAgICAgICAgYi53YWl0X2Zvcl9zdGFydGVkKCkKKyAgICAgICAgX3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIuZmluaXNoZWQpCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgYi53YWl0X2Zvcl9maW5pc2hlZCgpCisKKyAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoMikKKyAgICAgICAgZGVmIF93aXRoKGVycj1Ob25lKToKKyAgICAgICAgICAgIHdpdGggc2VtOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0uYWNxdWlyZShGYWxzZSkpCisgICAgICAgICAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICAgICAgICAgIHdpdGggc2VtOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyCisgICAgICAgIF93aXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF93aXRoLCBUeXBlRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0uYWNxdWlyZShGYWxzZSkpCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKworY2xhc3MgU2VtYXBob3JlVGVzdHMoQmFzZVNlbWFwaG9yZVRlc3RzKToKKyAgICAiIiIKKyAgICBUZXN0cyBmb3IgdW5ib3VuZGVkIHNlbWFwaG9yZXMuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgICMgVW5ib3VuZGVkIHJlbGVhc2VzIGFyZSBhbGxvd2VkIGFuZCBpbmNyZW1lbnQgdGhlIHNlbWFwaG9yZSdzIHZhbHVlCisgICAgICAgIHNlbSA9IHNlbGYuc2VtdHlwZSgxKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgc2VtLmFjcXVpcmUoKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisKKworY2xhc3MgQm91bmRlZFNlbWFwaG9yZVRlc3RzKEJhc2VTZW1hcGhvcmVUZXN0cyk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIGJvdW5kZWQgc2VtYXBob3Jlcy4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X3JlbGVhc2VfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgIyBDYW5ub3QgZ28gcGFzdCB0aGUgaW5pdGlhbCB2YWx1ZQorICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZW0ucmVsZWFzZSkKKyAgICAgICAgc2VtLmFjcXVpcmUoKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbS5yZWxlYXNlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L21hcHBpbmdfdGVzdHMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvbWFwcGluZ190ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDM3NTBiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L21hcHBpbmdfdGVzdHMucHkKQEAgLTAsMCArMSw2ODYgQEAKKyMgdGVzdHMgY29tbW9uIHRvIGRpY3QgYW5kIFVzZXJEaWN0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBVc2VyRGljdAoraW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGlzIGJhc2UgY2xhc3MgY2FuIGJlIHVzZWQgdG8gY2hlY2sgdGhhdCBhbiBvYmplY3QgY29uZm9ybXMgdG8gdGhlCisgICAgIyBtYXBwaW5nIHByb3RvY29sCisKKyAgICAjIEZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VmdWwgdG8gb3ZlcnJpZGUgdG8gYWRhcHQgdG8gZGljdGlvbmFyeQorICAgICMgc2VtYW50aWNzCisgICAgdHlwZTJ0ZXN0ID0gTm9uZSAjIHdoaWNoIGNsYXNzIGlzIGJlaW5nIHRlc3RlZCAob3ZlcndyaXRlIGluIHN1YmNsYXNzZXMpCisKKyAgICBkZWYgX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSBvZiB2YWx1ZXMgd2hpY2ggYXJlIGludmFyaWFudCBieSBzdG9yYWdlCisgICAgICAgIGluIHRoZSBvYmplY3QgdW5kZXIgdGVzdC4iIiIKKyAgICAgICAgcmV0dXJuIHsxOjIsICJrZXkxIjoidmFsdWUxIiwgImtleTIiOigxLDIsMyl9CisgICAgZGVmIF9lbXB0eV9tYXBwaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gZW1wdHkgbWFwcGluZyBvYmplY3QiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZTJ0ZXN0KCkKKyAgICBkZWYgX2Z1bGxfbWFwcGluZyhzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbWFwcGluZyBvYmplY3Qgd2l0aCB0aGUgdmFsdWUgY29udGFpbmVkIGluIGRhdGEKKyAgICAgICAgZGljdGlvbmFyeSIiIgorICAgICAgICB4ID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRhdGEuaXRlbXMoKToKKyAgICAgICAgICAgIHhba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiB4CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKKyAgICAgICAgc2VsZi5yZWZlcmVuY2UgPSBzZWxmLl9yZWZlcmVuY2UoKS5jb3B5KCkKKworICAgICAgICAjIEEgKGtleSwgdmFsdWUpIHBhaXIgbm90IGluIHRoZSBtYXBwaW5nCisgICAgICAgIGtleSwgdmFsdWUgPSBzZWxmLnJlZmVyZW5jZS5wb3BpdGVtKCkKKyAgICAgICAgc2VsZi5vdGhlciA9IHtrZXk6dmFsdWV9CisKKyAgICAgICAgIyBBIChrZXksIHZhbHVlKSBwYWlyIGluIHRoZSBtYXBwaW5nCisgICAgICAgIGtleSwgdmFsdWUgPSBzZWxmLnJlZmVyZW5jZS5wb3BpdGVtKCkKKyAgICAgICAgc2VsZi5pbm1hcHBpbmcgPSB7a2V5OnZhbHVlfQorICAgICAgICBzZWxmLnJlZmVyZW5jZVtrZXldID0gdmFsdWUKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgcmVhZCBvbmx5IG9wZXJhdGlvbnMgb24gbWFwcGluZworICAgICAgICBwID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHAxID0gZGljdChwKSAjd29ya2Fyb3VuZCBmb3Igc2luZ2xldG9uIG9iamVjdHMKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyhzZWxmLnJlZmVyZW5jZSkKKyAgICAgICAgaWYgZCBpcyBwOgorICAgICAgICAgICAgcCA9IHAxCisgICAgICAgICNJbmRleGluZworICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnJlZmVyZW5jZS5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2tleV0sIHZhbHVlKQorICAgICAgICBrbm93bmtleSA9IHNlbGYub3RoZXIua2V5cygpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6ZFtrbm93bmtleV0pCisgICAgICAgICNsZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCBsZW4oc2VsZi5yZWZlcmVuY2UpKQorICAgICAgICAjaW4KKyAgICAgICAgZm9yIGsgaW4gc2VsZi5yZWZlcmVuY2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIGQpCisgICAgICAgIGZvciBrIGluIHNlbGYub3RoZXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGssIGQpCisgICAgICAgICNoYXNfa2V5CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICBmb3IgayBpbiBzZWxmLnJlZmVyZW5jZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5oYXNfa2V5KGspKQorICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5vdGhlcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGQuaGFzX2tleShrKSkKKyAgICAgICAgI2NtcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChwLHApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChkLGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChwLGQpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZCxwKSwgMSkKKyAgICAgICAgI19fbm9uX196ZXJvX18KKyAgICAgICAgaWYgcDogc2VsZi5mYWlsKCJFbXB0eSBtYXBwaW5nIG11c3QgY29tcGFyZSB0byBGYWxzZSIpCisgICAgICAgIGlmIG5vdCBkOiBzZWxmLmZhaWwoIkZ1bGwgbWFwcGluZyBtdXN0IGNvbXBhcmUgdG8gVHJ1ZSIpCisgICAgICAgICMga2V5cygpLCBpdGVtcygpLCBpdGVya2V5cygpIC4uLgorICAgICAgICBkZWYgY2hlY2tfaXRlcmFuZGxpc3QoaXRlciwgbHN0LCByZWYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoaXRlciwgJ25leHQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGl0ZXIsICdfX2l0ZXJfXycpKQorICAgICAgICAgICAgeCA9IGxpc3QoaXRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoeCk9PXNldChsc3QpPT1zZXQocmVmKSkKKyAgICAgICAgY2hlY2tfaXRlcmFuZGxpc3QoZC5pdGVya2V5cygpLCBkLmtleXMoKSwgc2VsZi5yZWZlcmVuY2Uua2V5cygpKQorICAgICAgICBjaGVja19pdGVyYW5kbGlzdChpdGVyKGQpLCBkLmtleXMoKSwgc2VsZi5yZWZlcmVuY2Uua2V5cygpKQorICAgICAgICBjaGVja19pdGVyYW5kbGlzdChkLml0ZXJ2YWx1ZXMoKSwgZC52YWx1ZXMoKSwgc2VsZi5yZWZlcmVuY2UudmFsdWVzKCkpCisgICAgICAgIGNoZWNrX2l0ZXJhbmRsaXN0KGQuaXRlcml0ZW1zKCksIGQuaXRlbXMoKSwgc2VsZi5yZWZlcmVuY2UuaXRlbXMoKSkKKyAgICAgICAgI2dldAorICAgICAgICBrZXksIHZhbHVlID0gZC5pdGVyaXRlbXMoKS5uZXh0KCkKKyAgICAgICAga25vd25rZXksIGtub3dudmFsdWUgPSBzZWxmLm90aGVyLml0ZXJpdGVtcygpLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KGtleSwga25vd252YWx1ZSksIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KGtub3dua2V5LCBrbm93bnZhbHVlKSwga25vd252YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrbm93bmtleSwgZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHdyaXRlIG9wZXJhdGlvbnMgb24gbWFwcGluZworICAgICAgICBwID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgICNJbmRleGluZworICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnJlZmVyZW5jZS5pdGVtcygpOgorICAgICAgICAgICAgcFtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFtrZXldLCB2YWx1ZSkKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLnJlZmVyZW5jZS5rZXlzKCk6CisgICAgICAgICAgICBkZWwgcFtrZXldCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOnBba2V5XSkKKyAgICAgICAgcCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICAjdXBkYXRlCisgICAgICAgIHAudXBkYXRlKHNlbGYucmVmZXJlbmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocCksIHNlbGYucmVmZXJlbmNlKQorICAgICAgICBpdGVtcyA9IHAuaXRlbXMoKQorICAgICAgICBwID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHAudXBkYXRlKGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocCksIHNlbGYucmVmZXJlbmNlKQorICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHNlbGYucmVmZXJlbmNlKQorICAgICAgICAjc2V0ZGVmYXVsdAorICAgICAgICBrZXksIHZhbHVlID0gZC5pdGVyaXRlbXMoKS5uZXh0KCkKKyAgICAgICAga25vd25rZXksIGtub3dudmFsdWUgPSBzZWxmLm90aGVyLml0ZXJpdGVtcygpLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuc2V0ZGVmYXVsdChrZXksIGtub3dudmFsdWUpLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2tleV0sIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuc2V0ZGVmYXVsdChrbm93bmtleSwga25vd252YWx1ZSksIGtub3dudmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtrbm93bmtleV0sIGtub3dudmFsdWUpCisgICAgICAgICNwb3AKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrbm93bmtleSksIGtub3dudmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa25vd25rZXksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcCwga25vd25rZXkpCisgICAgICAgIGRlZmF1bHQgPSA5MDkKKyAgICAgICAgZFtrbm93bmtleV0gPSBrbm93bnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb3Aoa25vd25rZXksIGRlZmF1bHQpLCBrbm93bnZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtub3dua2V5LCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGtub3dua2V5LCBkZWZhdWx0KSwgZGVmYXVsdCkKKyAgICAgICAgI3BvcGl0ZW0KKyAgICAgICAga2V5LCB2YWx1ZSA9IGQucG9waXRlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa2V5LCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBzZWxmLnJlZmVyZW5jZVtrZXldKQorICAgICAgICBwPXNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcC5wb3BpdGVtKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW1wdHlfbWFwcGluZygpLCBzZWxmLl9lbXB0eV9tYXBwaW5nKCkpCisKKyAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuX2VtcHR5X21hcHBpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucmVmZXJlbmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChzZWxmLl9lbXB0eV9tYXBwaW5nKCkpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChzZWxmLnJlZmVyZW5jZSkgaXMgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmtleXMoKSwgW10pCisgICAgICAgIGQgPSBzZWxmLnJlZmVyZW5jZQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuaW5tYXBwaW5nLmtleXMoKVswXSwgZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5vdGhlci5rZXlzKClbMF0sIGQua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQua2V5cywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmFsdWVzKCksIFtdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC52YWx1ZXMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9pdGVtcyhzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXRlbXMoKSwgW10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLml0ZW1zLCBOb25lKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYucmVmZXJlbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtzZWxmLmlubWFwcGluZy5rZXlzKClbMF1dLCBzZWxmLmlubWFwcGluZy52YWx1ZXMoKVswXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuX19nZXRpdGVtX18pCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgICMgbWFwcGluZyBhcmd1bWVudAorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGQudXBkYXRlKHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pdGVtcygpLCBzZWxmLm90aGVyLml0ZW1zKCkpCisKKyAgICAgICAgIyBObyBhcmd1bWVudAorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGQudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLl9lbXB0eV9tYXBwaW5nKCkpCisKKyAgICAgICAgIyBpdGVtIHNlcXVlbmNlCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgZC51cGRhdGUoc2VsZi5vdGhlci5pdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXRlbXMoKSwgc2VsZi5vdGhlci5pdGVtcygpKQorCisgICAgICAgICMgSXRlcmF0b3IKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBkLnVwZGF0ZShzZWxmLm90aGVyLml0ZXJpdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXRlbXMoKSwgc2VsZi5vdGhlci5pdGVtcygpKQorCisgICAgICAgICMgRklYTUU6IERvZXNuJ3Qgd29yayB3aXRoIFVzZXJEaWN0CisgICAgICAgICMgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpLCBkLnVwZGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpLCBkLnVwZGF0ZSwgNDIpCisKKyAgICAgICAgb3V0ZXJzZWxmID0gc2VsZgorICAgICAgICBjbGFzcyBTaW1wbGVVc2VyRGljdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmQgPSBvdXRlcnNlbGYucmVmZXJlbmNlCisgICAgICAgICAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kLmtleXMoKQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRbaV0KKyAgICAgICAgZC5jbGVhcigpCisgICAgICAgIGQudXBkYXRlKFNpbXBsZVVzZXJEaWN0KCkpCisgICAgICAgIGkxID0gZC5pdGVtcygpCisgICAgICAgIGkyID0gc2VsZi5yZWZlcmVuY2UuaXRlbXMoKQorCisgICAgICAgIGRlZiBzYWZlX3NvcnRfa2V5KGt2KToKKyAgICAgICAgICAgIGssIHYgPSBrdgorICAgICAgICAgICAgcmV0dXJuIGlkKHR5cGUoaykpLCBpZCh0eXBlKHYpKSwgaywgdgorICAgICAgICBpMS5zb3J0KGtleT1zYWZlX3NvcnRfa2V5KQorICAgICAgICBpMi5zb3J0KGtleT1zYWZlX3NvcnRfa2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkxLCBpMikKKworICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcworCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgY2xhc3MgRmFpbGluZ1VzZXJEaWN0OgorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgZC51cGRhdGUsIEZhaWxpbmdVc2VyRGljdCgpKQorCisgICAgICAgIGQuY2xlYXIoKQorCisgICAgICAgIGNsYXNzIEZhaWxpbmdVc2VyRGljdDoKKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIGNsYXNzIEJvZ29uSXRlcjoKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pID0gMQorICAgICAgICAgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmkgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdhJworICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjCisgICAgICAgICAgICAgICAgcmV0dXJuIEJvZ29uSXRlcigpCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgZC51cGRhdGUsIEZhaWxpbmdVc2VyRGljdCgpKQorCisgICAgICAgIGNsYXNzIEZhaWxpbmdVc2VyRGljdDoKKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIGNsYXNzIEJvZ29uSXRlcjoKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pID0gb3JkKCdhJykKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmkgPD0gb3JkKCd6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRuID0gY2hyKHNlbGYuaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmkgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydG4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgICAgICByZXR1cm4gQm9nb25JdGVyKCkKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQudXBkYXRlLCBGYWlsaW5nVXNlckRpY3QoKSkKKworICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGNsYXNzIGJhZHNlcShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgZC51cGRhdGUsIGJhZHNlcSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGQudXBkYXRlLCBbKDEsIDIsIDMpXSkKKworICAgICMgbm8gdGVzdF9mcm9ta2V5cyBvciB0ZXN0X2NvcHkgYXMgYm90aCBvcy5lbnZpcm9uIGFuZCBzZWx2ZXMgZG9uJ3Qgc3VwcG9ydCBpdAorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldChzZWxmLm90aGVyLmtleXMoKVswXSkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChzZWxmLm90aGVyLmtleXMoKVswXSwgMyksIDMpCisgICAgICAgIGQgPSBzZWxmLnJlZmVyZW5jZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0pIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0sIDMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KHNlbGYuaW5tYXBwaW5nLmtleXMoKVswXSksIHNlbGYuaW5tYXBwaW5nLnZhbHVlcygpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KHNlbGYuaW5tYXBwaW5nLmtleXMoKVswXSwgMyksIHNlbGYuaW5tYXBwaW5nLnZhbHVlcygpWzBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuZ2V0LCBOb25lLCBOb25lLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc2V0ZGVmYXVsdChzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuc2V0ZGVmYXVsdCkKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLnBvcGl0ZW0sIDQyKQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGssIHYgPSBzZWxmLmlubWFwcGluZy5pdGVtcygpWzBdCisgICAgICAgIGRba10gPSB2CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcCwgc2VsZi5vdGhlci5rZXlzKClbMF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrKSwgdikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9wLCBrKQorCisKK2NsYXNzIFRlc3RNYXBwaW5nUHJvdG9jb2woQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfY29uc3RydWN0b3Ioc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuX2VtcHR5X21hcHBpbmcoKSBpcyBub3Qgc2VsZi5fZW1wdHlfbWFwcGluZygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KHg9MSwgeT0yKSwgeyJ4IjogMSwgInkiOiAyfSkKKworICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X2Jvb2woc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLl9lbXB0eV9tYXBwaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl9mdWxsX21hcHBpbmcoeyJ4IjogInkifSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib29sKHNlbGYuX2VtcHR5X21hcHBpbmcoKSkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib29sKHNlbGYuX2Z1bGxfbWFwcGluZyh7IngiOiAieSJ9KSkgaXMgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X2tleXMoc2VsZikKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQua2V5cygpLCBbXSkKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7J2EnOiAxLCAnYic6IDJ9KQorICAgICAgICBrID0gZC5rZXlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIGspCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2InLCBrKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdjJywgaykKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfdmFsdWVzKHNlbGYpCisgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoezE6Mn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52YWx1ZXMoKSwgWzJdKQorCisgICAgZGVmIHRlc3RfaXRlbXMoc2VsZik6CisgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X2l0ZW1zKHNlbGYpCisKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7MToyfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLml0ZW1zKCksIFsoMSwgMildKQorCisgICAgZGVmIHRlc3RfaGFzX2tleShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGQuaGFzX2tleSgnYScpKQorICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIGsgPSBkLmtleXMoKQorICAgICAgICBrLnNvcnQoa2V5PWxhbWJkYSBrOiAoaWQodHlwZShrKSksIGspKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIFsnYScsICdiJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmhhc19rZXkpCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoJ2EnIGluIGQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIG5vdCBpbiBkKQorICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCBkKQorICAgICAgICBzZWxmLmFzc2VydEluKCdiJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYycsIGQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLl9fY29udGFpbnNfXykKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfbGVuKHNlbGYpCisgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoeydhJzogMSwgJ2InOiAyfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDIpCisKKyAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9nZXRpdGVtKHNlbGYpCisgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoeydhJzogMSwgJ2InOiAyfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYiddLCAyKQorICAgICAgICBkWydjJ10gPSAzCisgICAgICAgIGRbJ2EnXSA9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydjJ10sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCA0KQorICAgICAgICBkZWwgZFsnYiddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydhJzogNCwgJ2MnOiAzfSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuX19nZXRpdGVtX18pCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7MToxLCAyOjIsIDM6M30pCisgICAgICAgIGQuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHt9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5jbGVhciwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfdXBkYXRlKHNlbGYpCisgICAgICAgICMgbWFwcGluZyBhcmd1bWVudAorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGQudXBkYXRlKHsxOjEwMH0pCisgICAgICAgIGQudXBkYXRlKHsyOjIwfSkKKyAgICAgICAgZC51cGRhdGUoezE6MSwgMjoyLCAzOjN9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsxOjEsIDI6MiwgMzozfSkKKworICAgICAgICAjIG5vIGFyZ3VtZW50CisgICAgICAgIGQudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7MToxLCAyOjIsIDM6M30pCisKKyAgICAgICAgIyBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGQudXBkYXRlKHg9MTAwKQorICAgICAgICBkLnVwZGF0ZSh5PTIwKQorICAgICAgICBkLnVwZGF0ZSh4PTEsIHk9Miwgej0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsieCI6MSwgInkiOjIsICJ6IjozfSkKKworICAgICAgICAjIGl0ZW0gc2VxdWVuY2UKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBkLnVwZGF0ZShbKCJ4IiwgMTAwKSwgKCJ5IiwgMjApXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7IngiOjEwMCwgInkiOjIwfSkKKworICAgICAgICAjIEJvdGggaXRlbSBzZXF1ZW5jZSBhbmQga2V5d29yZCBhcmd1bWVudHMKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBkLnVwZGF0ZShbKCJ4IiwgMTAwKSwgKCJ5IiwgMjApXSwgeD0xLCB5PTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeyJ4IjoxLCAieSI6Mn0pCisKKyAgICAgICAgIyBpdGVyYXRvcgorICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsxOjMsIDI6NH0pCisgICAgICAgIGQudXBkYXRlKHNlbGYuX2Z1bGxfbWFwcGluZyh7MToyLCAzOjQsIDU6Nn0pLml0ZXJpdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsxOjIsIDI6NCwgMzo0LCA1OjZ9KQorCisgICAgICAgIGNsYXNzIFNpbXBsZVVzZXJEaWN0OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZCA9IHsxOjEsIDI6MiwgMzozfQorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZC5rZXlzKCkKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kW2ldCisgICAgICAgIGQuY2xlYXIoKQorICAgICAgICBkLnVwZGF0ZShTaW1wbGVVc2VyRGljdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsxOjEsIDI6MiwgMzozfSkKKworICAgIGRlZiB0ZXN0X2Zyb21rZXlzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0LmZyb21rZXlzKCdhYmMnKSwgeydhJzpOb25lLCAnYic6Tm9uZSwgJ2MnOk5vbmV9KQorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QoZC5mcm9ta2V5cygnYWJjJykgaXMgZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cygnYWJjJyksIHsnYSc6Tm9uZSwgJ2InOk5vbmUsICdjJzpOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKCg0LDUpLDApLCB7NDowLCA1OjB9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZnJvbWtleXMoW10pLCB7fSkKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKGcoKSksIHsxOk5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHt9LmZyb21rZXlzLCAzKQorICAgICAgICBjbGFzcyBkaWN0bGlrZShzZWxmLnR5cGUydGVzdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0bGlrZS5mcm9ta2V5cygnYScpLCB7J2EnOk5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKSwgeydhJzpOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpY3RsaWtlLmZyb21rZXlzKCdhJykuX19jbGFzc19fIGlzIGRpY3RsaWtlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGljdGxpa2UoKS5mcm9ta2V5cygnYScpLl9fY2xhc3NfXyBpcyBkaWN0bGlrZSkKKyAgICAgICAgIyBGSVhNRTogdGhlIGZvbGxvd2luZyB3b24ndCB3b3JrIHdpdGggVXNlckRpY3QsIGJlY2F1c2UgaXQncyBhbiBvbGQgc3R5bGUgY2xhc3MKKyAgICAgICAgIyBzZWxmLmFzc2VydFRydWUodHlwZShkaWN0bGlrZS5mcm9ta2V5cygnYScpKSBpcyBkaWN0bGlrZSkKKyAgICAgICAgY2xhc3MgbXlkaWN0KHNlbGYudHlwZTJ0ZXN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFVzZXJEaWN0LlVzZXJEaWN0KCkKKyAgICAgICAgdWQgPSBteWRpY3QuZnJvbWtleXMoJ2FiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ZCwgeydhJzpOb25lLCAnYic6Tm9uZX0pCisgICAgICAgICMgRklYTUU6IHRoZSBmb2xsb3dpbmcgd29uJ3Qgd29yayB3aXRoIFVzZXJEaWN0LCBiZWNhdXNlIGl0J3MgYW4gb2xkIHN0eWxlIGNsYXNzCisgICAgICAgICMgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHVkLCBVc2VyRGljdC5Vc2VyRGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaWN0LmZyb21rZXlzKQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgYmFkZGljdDEoc2VsZi50eXBlMnRlc3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBiYWRkaWN0MS5mcm9ta2V5cywgWzFdKQorCisgICAgICAgIGNsYXNzIEJhZFNlcShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Yywgc2VsZi50eXBlMnRlc3QuZnJvbWtleXMsIEJhZFNlcSgpKQorCisgICAgICAgIGNsYXNzIGJhZGRpY3QyKHNlbGYudHlwZTJ0ZXN0KToKKyAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgYmFkZGljdDIuZnJvbWtleXMsIFsxXSkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoezE6MSwgMjoyLCAzOjN9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY29weSgpLCB7MToxLCAyOjIsIDM6M30pCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvcHkoKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQuY29weSgpLCBkLl9fY2xhc3NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmNvcHksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X2dldChzZWxmKQorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldCgnYycpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2MnLCAzKSwgMykKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7J2EnIDogMSwgJ2InIDogMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldCgnYycpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2MnLCAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhJywgMyksIDEpCisKKyAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9zZXRkZWZhdWx0KHNlbGYpCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2V0ZGVmYXVsdCgna2V5MCcpIGlzIE5vbmUpCisgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5MCcsIFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5zZXRkZWZhdWx0KCdrZXkwJykgaXMgTm9uZSkKKyAgICAgICAgZC5zZXRkZWZhdWx0KCdrZXknLCBbXSkuYXBwZW5kKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsna2V5J11bMF0sIDMpCisgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5JywgW10pLmFwcGVuZCg0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydrZXknXSksIDIpCisKKyAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9wb3BpdGVtKHNlbGYpCisgICAgICAgIGZvciBjb3B5bW9kZSBpbiAtMSwgKzE6CisgICAgICAgICAgICAjIC0xOiBiIGhhcyBzYW1lIHN0cnVjdHVyZSBhcyBhCisgICAgICAgICAgICAjICsxOiBiIGlzIGEuY29weSgpCisgICAgICAgICAgICBmb3IgbG9nMnNpemUgaW4gcmFuZ2UoMTIpOgorICAgICAgICAgICAgICAgIHNpemUgPSAyKipsb2cyc2l6ZQorICAgICAgICAgICAgICAgIGEgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgICAgICAgICBiID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgIGFbcmVwcihpKV0gPSBpCisgICAgICAgICAgICAgICAgICAgIGlmIGNvcHltb2RlIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJbcmVwcihpKV0gPSBpCisgICAgICAgICAgICAgICAgaWYgY29weW1vZGUgPiAwOgorICAgICAgICAgICAgICAgICAgICBiID0gYS5jb3B5KCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzaXplKToKKyAgICAgICAgICAgICAgICAgICAga2EsIHZhID0gdGEgPSBhLnBvcGl0ZW0oKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhLCBpbnQoa2EpKQorICAgICAgICAgICAgICAgICAgICBrYiwgdmIgPSB0YiA9IGIucG9waXRlbSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmIsIGludChrYikpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QoY29weW1vZGUgPCAwIGFuZCB0YSAhPSB0YikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYikKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfcG9wKHNlbGYpCisKKyAgICAgICAgIyBUZXN0cyBmb3IgcG9wIHdpdGggc3BlY2lmaWVkIGtleQorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGssIHYgPSAnYWJjJywgJ2RlZicKKworICAgICAgICAjIHZlcmlmeSBsb25ncy9pbnRzIGdldCBzYW1lIHZhbHVlIHdoZW4ga2V5ID4gMzIgYml0cyAoZm9yIDY0LWJpdCBhcmNocykKKyAgICAgICAgIyBzZWUgU0YgYnVnICM2ODk2NTkKKyAgICAgICAgeCA9IDQ1MDM1OTk2MjczNzA0OTZMCisgICAgICAgIHkgPSA0NTAzNTk5NjI3MzcwNDk2CisgICAgICAgIGggPSBzZWxmLl9mdWxsX21hcHBpbmcoe3g6ICdhbnl0aGluZycsIHk6ICdzb21ldGhpbmcgZWxzZSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhbeF0sIGhbeV0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrLCB2KSwgdikKKyAgICAgICAgZFtrXSA9IHYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrLCAxKSwgdikKKworCitjbGFzcyBUZXN0SGFzaE1hcHBpbmdQcm90b2NvbChUZXN0TWFwcGluZ1Byb3RvY29sKToKKworICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIFRlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9nZXRpdGVtKHNlbGYpCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkRXEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDI0CisKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBkW0JhZEVxKCldID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQuX19nZXRpdGVtX18sIDIzKQorCisgICAgICAgIGNsYXNzIEJhZEhhc2gob2JqZWN0KToKKyAgICAgICAgICAgIGZhaWwgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZmFpbDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHggPSBCYWRIYXNoKCkKKyAgICAgICAgZFt4XSA9IDQyCisgICAgICAgIHguZmFpbCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLl9fZ2V0aXRlbV9fLCB4KQorCisgICAgZGVmIHRlc3RfZnJvbWtleXMoc2VsZik6CisgICAgICAgIFRlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9mcm9ta2V5cyhzZWxmKQorICAgICAgICBjbGFzcyBteWRpY3Qoc2VsZi50eXBlMnRlc3QpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVXNlckRpY3QuVXNlckRpY3QoKQorICAgICAgICB1ZCA9IG15ZGljdC5mcm9ta2V5cygnYWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVkLCB7J2EnOk5vbmUsICdiJzpOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHVkLCBVc2VyRGljdC5Vc2VyRGljdCkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X3BvcChzZWxmKQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkSGFzaChvYmplY3QpOgorICAgICAgICAgICAgZmFpbCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5mYWlsOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgeCA9IEJhZEhhc2goKQorICAgICAgICBkW3hdID0gNDIKKyAgICAgICAgeC5mYWlsID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQucG9wLCB4KQorCisgICAgZGVmIHRlc3RfbXV0YXRpbmdpdGVyYXRpb24oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgZFsxXSA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gZDoKKyAgICAgICAgICAgICAgICBkW2krMV0gPSAxCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImNoYW5naW5nIGRpY3Qgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIGRvZXNuJ3QgcmFpc2UgRXJyb3IiKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZCksICd7fScpCisgICAgICAgIGRbMV0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkKSwgJ3sxOiAyfScpCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgZFsxXSA9IGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQpLCAnezE6IHsuLi59fScpCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBjbGFzcyBCYWRSZXByKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKworICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsxOiBCYWRSZXByKCl9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIHJlcHIsIGQpCisKKyAgICBkZWYgdGVzdF9sZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoc2VsZi5fZW1wdHlfbWFwcGluZygpIDwgc2VsZi5fZW1wdHlfbWFwcGluZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoc2VsZi5fZnVsbF9tYXBwaW5nKHsxOiAyfSkgPCBzZWxmLl9mdWxsX21hcHBpbmcoezFMOiAyTH0pKSkKKworICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcworCisgICAgICAgIGNsYXNzIEJhZENtcChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBkMSA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7QmFkQ21wKCk6IDF9KQorICAgICAgICBkMiA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7MTogMX0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGQxIDwgZDIKKyAgICAgICAgZXhjZXB0IEV4YzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiPCBkaWRuJ3QgcmFpc2UgRXhjIikKKworICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CisgICAgICAgIFRlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9zZXRkZWZhdWx0KHNlbGYpCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBjbGFzcyBCYWRIYXNoKG9iamVjdCk6CisgICAgICAgICAgICBmYWlsID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZhaWw6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICB4ID0gQmFkSGFzaCgpCisgICAgICAgIGRbeF0gPSA0MgorICAgICAgICB4LmZhaWwgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgZC5zZXRkZWZhdWx0LCB4LCBbXSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9tYXRoX3Rlc3RjYXNlcy50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvbWF0aF90ZXN0Y2FzZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMWE0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvbWF0aF90ZXN0Y2FzZXMudHh0CkBAIC0wLDAgKzEsNDQ3IEBACistLSBUZXN0Y2FzZXMgZm9yIGZ1bmN0aW9ucyBpbiBtYXRoLgorLS0KKy0tIEVhY2ggbGluZSB0YWtlcyB0aGUgZm9ybToKKy0tCistLSA8dGVzdGlkPiA8ZnVuY3Rpb24+IDxpbnB1dF92YWx1ZT4gLT4gPG91dHB1dF92YWx1ZT4gPGZsYWdzPgorLS0KKy0tIHdoZXJlOgorLS0KKy0tICAgPHRlc3RpZD4gaXMgYSBzaG9ydCBuYW1lIGlkZW50aWZ5aW5nIHRoZSB0ZXN0LAorLS0KKy0tICAgPGZ1bmN0aW9uPiBpcyB0aGUgZnVuY3Rpb24gdG8gYmUgdGVzdGVkIChleHAsIGNvcywgYXNpbmgsIC4uLiksCistLQorLS0gICA8aW5wdXRfdmFsdWU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlCistLQorLS0gICA8b3V0cHV0X3ZhbHVlPiBpcyB0aGUgZXhwZWN0ZWQgKGlkZWFsKSBvdXRwdXQgdmFsdWUsIGFnYWluCistLSAgICAgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCistLQorLS0gICA8ZmxhZ3M+IGlzIGEgbGlzdCBvZiB0aGUgZmxvYXRpbmctcG9pbnQgZmxhZ3MgcmVxdWlyZWQgYnkgQzk5CistLQorLS0gVGhlIHBvc3NpYmxlIGZsYWdzIGFyZToKKy0tCistLSAgIGRpdmlkZS1ieS16ZXJvIDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYQorLS0gICAgIG1hdGhlbWF0aWNhbGx5IGluZmluaXRlIHJlc3VsdC4KKy0tCistLSAgIG92ZXJmbG93IDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYSBmaW5pdGUgcmVzdWx0IHRoYXQKKy0tICAgICBpcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSB1c3VhbCByYW5nZSBvZiBhbiBJRUVFIDc1NCBkb3VibGUuCistLQorLS0gICBpbnZhbGlkIDogcmFpc2VkIGZvciBpbnZhbGlkIGlucHV0cyAoZS5nLiwgc3FydCgtMSkpCistLQorLS0gICBpZ25vcmUtc2lnbiA6IGluZGljYXRlcyB0aGF0IHRoZSBzaWduIG9mIHRoZSByZXN1bHQgaXMKKy0tICAgICB1bnNwZWNpZmllZDsgZS5nLiwgaWYgdGhlIHJlc3VsdCBpcyBnaXZlbiBhcyBpbmYsCistLSAgICAgdGhlbiBib3RoIC1pbmYgYW5kIGluZiBzaG91bGQgYmUgYWNjZXB0ZWQgYXMgY29ycmVjdC4KKy0tCistLSBGbGFncyBtYXkgYXBwZWFyIGluIGFueSBvcmRlci4KKy0tCistLSBMaW5lcyBiZWdpbm5pbmcgd2l0aCAnLS0nIChsaWtlIHRoaXMgb25lKSBzdGFydCBhIGNvbW1lbnQsIGFuZCBhcmUKKy0tIGlnbm9yZWQuICBCbGFuayBsaW5lcywgb3IgbGluZXMgY29udGFpbmluZyBvbmx5IHdoaXRlc3BhY2UsIGFyZSBhbHNvCistLSBpZ25vcmVkLgorCistLSBNYW55IG9mIHRoZSB2YWx1ZXMgYmVsb3cgd2VyZSBjb21wdXRlZCB3aXRoIHRoZSBoZWxwIG9mCistLSB2ZXJzaW9uIDIuNCBvZiB0aGUgTVBGUiBsaWJyYXJ5IGZvciBtdWx0aXBsZS1wcmVjaXNpb24KKy0tIGZsb2F0aW5nLXBvaW50IGNvbXB1dGF0aW9ucyB3aXRoIGNvcnJlY3Qgcm91bmRpbmcuICBBbGwgb3V0cHV0CistLSB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSAobW9kdWxvIHlldC10by1iZS1kaXNjb3ZlcmVkIGJ1Z3MpCistLSBjb3JyZWN0bHkgcm91bmRlZCwgcHJvdmlkZWQgdGhhdCBlYWNoIGlucHV0IGFuZCBvdXRwdXQgZGVjaW1hbAorLS0gZmxvYXRpbmctcG9pbnQgdmFsdWUgYmVsb3cgaXMgaW50ZXJwcmV0ZWQgYXMgYSByZXByZXNlbnRhdGlvbiBvZgorLS0gdGhlIGNvcnJlc3BvbmRpbmcgbmVhcmVzdCBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIHZhbHVlLiAgU2VlIHRoZQorLS0gTVBGUiBob21lcGFnZSBhdCBodHRwOi8vd3d3Lm1wZnIub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorLS0gTVBGUiBwcm9qZWN0LgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGVyZjogZXJyb3IgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXJmMDAwMCBlcmYgMC4wIC0+IDAuMAorZXJmMDAwMSBlcmYgLTAuMCAtPiAtMC4wCitlcmYwMDAyIGVyZiBpbmYgLT4gMS4wCitlcmYwMDAzIGVyZiAtaW5mIC0+IC0xLjAKK2VyZjAwMDQgZXJmIG5hbiAtPiBuYW4KKworLS0gdGlueSB2YWx1ZXMKK2VyZjAwMTAgZXJmIDFlLTMwOCAtPiAxLjEyODM3OTE2NzA5NTUxMjVlLTMwOAorZXJmMDAxMSBlcmYgNWUtMzI0IC0+IDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0CitlcmYwMDEyIGVyZiAxZS0xMCAtPiAxLjEyODM3OTE2NzA5NTUxMjZlLTEwCisKKy0tIHNtYWxsIGludGVnZXJzCitlcmYwMDIwIGVyZiAxIC0+IDAuODQyNzAwNzkyOTQ5NzE0ODkKK2VyZjAwMjEgZXJmIDIgLT4gMC45OTUzMjIyNjUwMTg5NTI3MQorZXJmMDAyMiBlcmYgMyAtPiAwLjk5OTk3NzkwOTUwMzAwMTM2CitlcmYwMDIzIGVyZiA0IC0+IDAuOTk5OTk5OTg0NTgyNzQyMDkKK2VyZjAwMjQgZXJmIDUgLT4gMC45OTk5OTk5OTk5OTg0NjI1NgorZXJmMDAyNSBlcmYgNiAtPiAxLjAKKworZXJmMDAzMCBlcmYgLTEgLT4gLTAuODQyNzAwNzkyOTQ5NzE0ODkKK2VyZjAwMzEgZXJmIC0yIC0+IC0wLjk5NTMyMjI2NTAxODk1MjcxCitlcmYwMDMyIGVyZiAtMyAtPiAtMC45OTk5Nzc5MDk1MDMwMDEzNgorZXJmMDAzMyBlcmYgLTQgLT4gLTAuOTk5OTk5OTg0NTgyNzQyMDkKK2VyZjAwMzQgZXJmIC01IC0+IC0wLjk5OTk5OTk5OTk5ODQ2MjU2CitlcmYwMDM1IGVyZiAtNiAtPiAtMS4wCisKKy0tIGh1Z2UgdmFsdWVzIHNob3VsZCBhbGwgZ28gdG8gKy8tMSwgZGVwZW5kaW5nIG9uIHNpZ24KK2VyZjAwNDAgZXJmIC00MCAtPiAtMS4wCitlcmYwMDQxIGVyZiAxZTE2IC0+IDEuMAorZXJmMDA0MiBlcmYgLTFlMTUwIC0+IC0xLjAKK2VyZjAwNDMgZXJmIDEuN2UzMDggLT4gMS4wCisKKy0tIElzc3VlIDg5ODY6IGlucHV0cyB4IHdpdGggZXhwKC14KngpIG5lYXIgdGhlIHVuZGVyZmxvdyB0aHJlc2hvbGQKKy0tIGluY29ycmVjdGx5IHNpZ25hbGxlZCBvdmVyZmxvdyBvbiBzb21lIHBsYXRmb3Jtcy4KK2VyZjAxMDAgZXJmIDI2LjIgLT4gMS4wCitlcmYwMTAxIGVyZiAyNi40IC0+IDEuMAorZXJmMDEwMiBlcmYgMjYuNiAtPiAxLjAKK2VyZjAxMDMgZXJmIDI2LjggLT4gMS4wCitlcmYwMTA0IGVyZiAyNy4wIC0+IDEuMAorZXJmMDEwNSBlcmYgMjcuMiAtPiAxLjAKK2VyZjAxMDYgZXJmIDI3LjQgLT4gMS4wCitlcmYwMTA3IGVyZiAyNy42IC0+IDEuMAorCitlcmYwMTEwIGVyZiAtMjYuMiAtPiAtMS4wCitlcmYwMTExIGVyZiAtMjYuNCAtPiAtMS4wCitlcmYwMTEyIGVyZiAtMjYuNiAtPiAtMS4wCitlcmYwMTEzIGVyZiAtMjYuOCAtPiAtMS4wCitlcmYwMTE0IGVyZiAtMjcuMCAtPiAtMS4wCitlcmYwMTE1IGVyZiAtMjcuMiAtPiAtMS4wCitlcmYwMTE2IGVyZiAtMjcuNCAtPiAtMS4wCitlcmYwMTE3IGVyZiAtMjcuNiAtPiAtMS4wCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGVyZmM6IGNvbXBsZW1lbnRhcnkgZXJyb3IgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXJmYzAwMDAgZXJmYyAwLjAgLT4gMS4wCitlcmZjMDAwMSBlcmZjIC0wLjAgLT4gMS4wCitlcmZjMDAwMiBlcmZjIGluZiAtPiAwLjAKK2VyZmMwMDAzIGVyZmMgLWluZiAtPiAyLjAKK2VyZmMwMDA0IGVyZmMgbmFuIC0+IG5hbgorCistLSB0aW55IHZhbHVlcworZXJmYzAwMTAgZXJmYyAxZS0zMDggLT4gMS4wCitlcmZjMDAxMSBlcmZjIDVlLTMyNCAtPiAxLjAKK2VyZmMwMDEyIGVyZmMgMWUtMTAgLT4gMC45OTk5OTk5OTk4ODcxNjIwNAorCistLSBzbWFsbCBpbnRlZ2VycworZXJmYzAwMjAgZXJmYyAxIC0+IDAuMTU3Mjk5MjA3MDUwMjg1MTMKK2VyZmMwMDIxIGVyZmMgMiAtPiAwLjAwNDY3NzczNDk4MTA0NzI2NjIKK2VyZmMwMDIyIGVyZmMgMyAtPiAyLjIwOTA0OTY5OTg1ODU0NDFlLTA1CitlcmZjMDAyMyBlcmZjIDQgLT4gMS41NDE3MjU3OTAwMjgwMDJlLTA4CitlcmZjMDAyNCBlcmZjIDUgLT4gMS41Mzc0NTk3OTQ0MjgwMzQ5ZS0xMgorZXJmYzAwMjUgZXJmYyA2IC0+IDIuMTUxOTczNjcxMjQ5ODkxM2UtMTcKKworZXJmYzAwMzAgZXJmYyAtMSAtPiAxLjg0MjcwMDc5Mjk0OTcxNDgKK2VyZmMwMDMxIGVyZmMgLTIgLT4gMS45OTUzMjIyNjUwMTg5NTI4CitlcmZjMDAzMiBlcmZjIC0zIC0+IDEuOTk5OTc3OTA5NTAzMDAxNQorZXJmYzAwMzMgZXJmYyAtNCAtPiAxLjk5OTk5OTk4NDU4Mjc0MjEKK2VyZmMwMDM0IGVyZmMgLTUgLT4gMS45OTk5OTk5OTk5OTg0NjI2CitlcmZjMDAzNSBlcmZjIC02IC0+IDIuMAorCistLSBhcyB4IC0+IGluZmluaXR5LCBlcmZjKHgpIGJlaGF2ZXMgbGlrZSBleHAoLXgqeCkveC9zcXJ0KHBpKQorZXJmYzAwNDAgZXJmYyAyMCAtPiA1LjM5NTg2NTYxMTYwNzkwMTJlLTE3NgorZXJmYzAwNDEgZXJmYyAyNSAtPiA4LjMwMDE3MjU3MTE5NjUyMjhlLTI3NAorZXJmYzAwNDIgZXJmYyAyNyAtPiA1LjIzNzA0NjQzOTM1MjYyOTJlLTMxOQorZXJmYzAwNDMgZXJmYyAyOCAtPiAwLjAKKworLS0gaHVnZSB2YWx1ZXMKK2VyZmMwMDUwIGVyZmMgLTQwIC0+IDIuMAorZXJmYzAwNTEgZXJmYyAxZTE2IC0+IDAuMAorZXJmYzAwNTIgZXJmYyAtMWUxNTAgLT4gMi4wCitlcmZjMDA1MyBlcmZjIDEuN2UzMDggLT4gMC4wCisKKy0tIElzc3VlIDg5ODY6IGlucHV0cyB4IHdpdGggZXhwKC14KngpIG5lYXIgdGhlIHVuZGVyZmxvdyB0aHJlc2hvbGQKKy0tIGluY29ycmVjdGx5IHNpZ25hbGxlZCBvdmVyZmxvdyBvbiBzb21lIHBsYXRmb3Jtcy4KK2VyZmMwMTAwIGVyZmMgMjYuMiAtPiAxLjY0MzI1MDc5MjQzODk0NjFlLTMwMAorZXJmYzAxMDEgZXJmYyAyNi40IC0+IDQuNDAxNzc2ODU4ODAzNTQyNmUtMzA1CitlcmZjMDEwMiBlcmZjIDI2LjYgLT4gMS4wODg1MTI1ODg1NDQyMjY5ZS0zMDkKK2VyZmMwMTAzIGVyZmMgMjYuOCAtPiAyLjQ4NDk2MjE1NzE5NjY2MjllLTMxNAorZXJmYzAxMDQgZXJmYyAyNy4wIC0+IDUuMjM3MDQ2NDM5MzUyNjI5MmUtMzE5CitlcmZjMDEwNSBlcmZjIDI3LjIgLT4gOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQKK2VyZmMwMTA2IGVyZmMgMjcuNCAtPiAwLjAKK2VyZmMwMTA3IGVyZmMgMjcuNiAtPiAwLjAKKworZXJmYzAxMTAgZXJmYyAtMjYuMiAtPiAyLjAKK2VyZmMwMTExIGVyZmMgLTI2LjQgLT4gMi4wCitlcmZjMDExMiBlcmZjIC0yNi42IC0+IDIuMAorZXJmYzAxMTMgZXJmYyAtMjYuOCAtPiAyLjAKK2VyZmMwMTE0IGVyZmMgLTI3LjAgLT4gMi4wCitlcmZjMDExNSBlcmZjIC0yNy4yIC0+IDIuMAorZXJmYzAxMTYgZXJmYyAtMjcuNCAtPiAyLjAKK2VyZmMwMTE3IGVyZmMgLTI3LjYgLT4gMi4wCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbGdhbW1hOiBsb2cgb2YgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGdhbW1hIGZ1bmN0aW9uIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gc3BlY2lhbCB2YWx1ZXMKK2xnYW0wMDAwIGxnYW1tYSAwLjAgLT4gaW5mICAgICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDAxIGxnYW1tYSAtMC4wIC0+IGluZiAgICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDAyIGxnYW1tYSBpbmYgLT4gaW5mCitsZ2FtMDAwMyBsZ2FtbWEgLWluZiAtPiBpbmYKK2xnYW0wMDA0IGxnYW1tYSBuYW4gLT4gbmFuCisKKy0tIG5lZ2F0aXZlIGludGVnZXJzCitsZ2FtMDAxMCBsZ2FtbWEgLTEgLT4gaW5mICAgICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxMSBsZ2FtbWEgLTIgLT4gaW5mICAgICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxMiBsZ2FtbWEgLTFlMTYgLT4gaW5mICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxMyBsZ2FtbWEgLTFlMzAwIC0+IGluZiAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxNCBsZ2FtbWEgLTEuNzllMzA4IC0+IGluZiBkaXZpZGUtYnktemVybworCistLSBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycyBnaXZlIGZhY3RvcmlhbHMKK2xnYW0wMDIwIGxnYW1tYSAxIC0+IDAuMAorbGdhbTAwMjEgbGdhbW1hIDIgLT4gMC4wCitsZ2FtMDAyMiBsZ2FtbWEgMyAtPiAwLjY5MzE0NzE4MDU1OTk0NTI5CitsZ2FtMDAyMyBsZ2FtbWEgNCAtPiAxLjc5MTc1OTQ2OTIyODA1NQorbGdhbTAwMjQgbGdhbW1hIDUgLT4gMy4xNzgwNTM4MzAzNDc5NDU4CitsZ2FtMDAyNSBsZ2FtbWEgNiAtPiA0Ljc4NzQ5MTc0Mjc4MjA0NTgKKworLS0gaGFsZiBpbnRlZ2VycworbGdhbTAwMzAgbGdhbW1hIDAuNSAtPiAwLjU3MjM2NDk0MjkyNDcwMDA4CitsZ2FtMDAzMSBsZ2FtbWEgMS41IC0+IC0wLjEyMDc4MjIzNzYzNTI0NTIyCitsZ2FtMDAzMiBsZ2FtbWEgMi41IC0+IDAuMjg0NjgyODcwNDcyOTE5MTgKK2xnYW0wMDMzIGxnYW1tYSAzLjUgLT4gMS4yMDA5NzM2MDIzNDcwNzQzCitsZ2FtMDAzNCBsZ2FtbWEgLTAuNSAtPiAxLjI2NTUxMjEyMzQ4NDY0NTQKK2xnYW0wMDM1IGxnYW1tYSAtMS41IC0+IDAuODYwMDQ3MDE1Mzc2NDgwOTgKK2xnYW0wMDM2IGxnYW1tYSAtMi41IC0+IC0wLjA1NjI0MzcxNjQ5NzY3NDA1NAorbGdhbTAwMzcgbGdhbW1hIC0zLjUgLT4gLTEuMzA5MDA2Njg0OTkzMDQyCisKKy0tIHZhbHVlcyBuZWFyIDAKK2xnYW0wMDQwIGxnYW1tYSAwLjEgLT4gMi4yNTI3MTI2NTE3MzQyMDYKK2xnYW0wMDQxIGxnYW1tYSAwLjAxIC0+IDQuNTk5NDc5ODc4MDQyMDIxOQorbGdhbTAwNDIgbGdhbW1hIDFlLTggLT4gMTguNDIwNjgwNzM4MTgwMjA5CitsZ2FtMDA0MyBsZ2FtbWEgMWUtMTYgLT4gMzYuODQxMzYxNDg3OTA0NzM0CitsZ2FtMDA0NCBsZ2FtbWEgMWUtMzAgLT4gNjkuMDc3NTUyNzg5ODIxMzY4CitsZ2FtMDA0NSBsZ2FtbWEgMWUtMTYwIC0+IDM2OC40MTM2MTQ4NzkwNDczMgorbGdhbTAwNDYgbGdhbW1hIDFlLTMwOCAtPiA3MDkuMTk2MjA4NjQyMTY2MDgKK2xnYW0wMDQ3IGxnYW1tYSA1LjZlLTMwOSAtPiA3MDkuNzc2MDI3MTM3NDE4OTYKK2xnYW0wMDQ4IGxnYW1tYSA1LjVlLTMwOSAtPiA3MDkuNzk0MDQ1NjQyOTIxNjcKK2xnYW0wMDQ5IGxnYW1tYSAxZS0zMDkgLT4gNzExLjQ5ODc5MzczNTE2MDEyCitsZ2FtMDA1MCBsZ2FtbWEgMWUtMzIzIC0+IDc0My43NDY5MjQ3NDA4MjEzMworbGdhbTAwNTEgbGdhbW1hIDVlLTMyNCAtPiA3NDQuNDQwMDcxOTIxMzgxMjIKK2xnYW0wMDYwIGxnYW1tYSAtMC4xIC0+IDIuMzY4OTYxMzMyNzI4Nzg4NgorbGdhbTAwNjEgbGdhbW1hIC0wLjAxIC0+IDQuNjExMDI0OTkyNzUyODAxMworbGdhbTAwNjIgbGdhbW1hIC0xZS04IC0+IDE4LjQyMDY4MDc0OTcyNDUyMgorbGdhbTAwNjMgbGdhbW1hIC0xZS0xNiAtPiAzNi44NDEzNjE0ODc5MDQ3MzQKK2xnYW0wMDY0IGxnYW1tYSAtMWUtMzAgLT4gNjkuMDc3NTUyNzg5ODIxMzY4CitsZ2FtMDA2NSBsZ2FtbWEgLTFlLTE2MCAtPiAzNjguNDEzNjE0ODc5MDQ3MzIKK2xnYW0wMDY2IGxnYW1tYSAtMWUtMzA4IC0+IDcwOS4xOTYyMDg2NDIxNjYwOAorbGdhbTAwNjcgbGdhbW1hIC01LjZlLTMwOSAtPiA3MDkuNzc2MDI3MTM3NDE4OTYKK2xnYW0wMDY4IGxnYW1tYSAtNS41ZS0zMDkgLT4gNzA5Ljc5NDA0NTY0MjkyMTY3CitsZ2FtMDA2OSBsZ2FtbWEgLTFlLTMwOSAtPiA3MTEuNDk4NzkzNzM1MTYwMTIKK2xnYW0wMDcwIGxnYW1tYSAtMWUtMzIzIC0+IDc0My43NDY5MjQ3NDA4MjEzMworbGdhbTAwNzEgbGdhbW1hIC01ZS0zMjQgLT4gNzQ0LjQ0MDA3MTkyMTM4MTIyCisKKy0tIHZhbHVlcyBuZWFyIG5lZ2F0aXZlIGludGVnZXJzCitsZ2FtMDA4MCBsZ2FtbWEgLTAuOTk5OTk5OTk5OTk5OTk5ODkgLT4gMzYuNzM2ODAwNTY5Njc3MTAxCitsZ2FtMDA4MSBsZ2FtbWEgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiAzNi4wNDM2NTMzODkxMTcxNTQKK2xnYW0wMDgyIGxnYW1tYSAtMS45OTk5OTk5OTk5OTk5OTk4IC0+IDM1LjM1MDUwNjIwODU1NzIxMworbGdhbTAwODMgbGdhbW1hIC0yLjAwMDAwMDAwMDAwMDAwMDQgLT4gMzQuNjU3MzU5MDI3OTk3MjY2CitsZ2FtMDA4NCBsZ2FtbWEgLTEwMC4wMDAwMDAwMDAwMDAwMSAtPiAtMzMxLjg1NDYwNTI0OTgwNjA3CitsZ2FtMDA4NSBsZ2FtbWEgLTk5Ljk5OTk5OTk5OTk5OTk4NiAtPiAtMzMxLjg1NDYwNTI0OTgwNTk2CisKKy0tIGxhcmdlIGlucHV0cworbGdhbTAxMDAgbGdhbW1hIDE3MCAtPiA3MDEuNDM3MjYzODA4NzM3MDQKK2xnYW0wMTAxIGxnYW1tYSAxNzEgLT4gNzA2LjU3MzA2MjI0NTc4NzM2CitsZ2FtMDEwMiBsZ2FtbWEgMTcxLjYyNCAtPiA3MDkuNzgwNzc0NDM2Njk4OTUKK2xnYW0wMTAzIGxnYW1tYSAxNzEuNjI1IC0+IDcwOS43ODU5MTY4Mjk0ODM2NQorbGdhbTAxMDQgbGdhbW1hIDE3MiAtPiA3MTEuNzE0NzI1ODAyMjg5OTkKK2xnYW0wMTA1IGxnYW1tYSAyMDAwIC0+IDEzMTk4LjkyMzQ0ODA1NDI2NQorbGdhbTAxMDYgbGdhbW1hIDIuNTU5OTgzMzI3ODUxNjNlMzA1IC0+IDEuNzk3NjkzMTM0ODYyMzA5OWUrMzA4CitsZ2FtMDEwNyBsZ2FtbWEgMi41NTk5ODMzMjc4NTE2NGUzMDUgLT4gaW5mIG92ZXJmbG93CitsZ2FtMDEwOCBsZ2FtbWEgMS43ZTMwOCAtPiBpbmYgb3ZlcmZsb3cKKworLS0gaW5wdXRzIGZvciB3aGljaCBnYW1tYSh4KSBpcyB0aW55CitsZ2FtMDEyMCBsZ2FtbWEgLTEwMC41IC0+IC0zNjQuOTAwOTY4MzA5NDI3MzYKK2xnYW0wMTIxIGxnYW1tYSAtMTYwLjUgLT4gLTY1Ni44ODAwNTI2MTEyNjQzMgorbGdhbTAxMjIgbGdhbW1hIC0xNzAuNSAtPiAtNzA3Ljk5ODQzMzE0NTA3ODgyCitsZ2FtMDEyMyBsZ2FtbWEgLTE3MS41IC0+IC03MTMuMTQzMDE2NDExNjg0ODEKK2xnYW0wMTI0IGxnYW1tYSAtMTc2LjUgLT4gLTczOC45NTI0NzU5MDg0NjQ4NgorbGdhbTAxMjUgbGdhbW1hIC0xNzcuNSAtPiAtNzQ0LjEzMTQ0NjUxNzM4MDM3CitsZ2FtMDEyNiBsZ2FtbWEgLTE3OC41IC0+IC03NDkuMzE2MDM1MTE4NjAwMQorCitsZ2FtMDEzMCBsZ2FtbWEgLTEwMDAuNSAtPiAtNTkxNC40Mzc3MDExMTY4NTE3CitsZ2FtMDEzMSBsZ2FtbWEgLTMwMDAwLjUgLT4gLTI3OTI3OC42NjI5OTU5MTQ0CitsZ2FtMDEzMiBsZ2FtbWEgLTQ1MDM1OTk2MjczNzA0OTUuNSAtPiAtMS41NzgyMjU4NDM0NDkyODgzZSsxNworCistLSByZXN1bHRzIGNsb3NlIHRvIDA6ICBwb3NpdGl2ZSBhcmd1bWVudCAuLi4KK2xnYW0wMTUwIGxnYW1tYSAwLjk5OTk5OTk5OTk5OTk5OTg5IC0+IDYuNDA4MzgxMjEzNDgwMDA3NWUtMTcKK2xnYW0wMTUxIGxnYW1tYSAxLjAwMDAwMDAwMDAwMDAwMDIgLT4gLTEuMjgxNjc2MjQyNjk2MDAwOGUtMTYKK2xnYW0wMTUyIGxnYW1tYSAxLjk5OTk5OTk5OTk5OTk5OTggLT4gLTkuMzg3Njk4MDY1NTQzMTE3MGUtMTcKK2xnYW0wMTUzIGxnYW1tYSAyLjAwMDAwMDAwMDAwMDAwMDQgLT4gMS44Nzc1Mzk2MTMxMDg2MjQ0ZS0xNgorCistLSAuLi4gYW5kIG5lZ2F0aXZlIGFyZ3VtZW50CitsZ2FtMDE2MCBsZ2FtbWEgLTIuNzQ3NjgyNjQ2NyAtPiAtNS4yNDc3NDA4MTQ3Njg5MTM2ZS0xMQorbGdhbTAxNjEgbGdhbW1hIC0yLjQ1NzAyNDczOCAtPiAzLjM0NjQ2Mzc1NDE5MTI5MzJlLTEwCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBnYW1tYTogR2FtbWEgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBzcGVjaWFsIHZhbHVlcworZ2FtMDAwMCBnYW1tYSAwLjAgLT4gaW5mICAgICAgICBkaXZpZGUtYnktemVybworZ2FtMDAwMSBnYW1tYSAtMC4wIC0+IC1pbmYgICAgICBkaXZpZGUtYnktemVybworZ2FtMDAwMiBnYW1tYSBpbmYgLT4gaW5mCitnYW0wMDAzIGdhbW1hIC1pbmYgLT4gbmFuICAgICAgIGludmFsaWQKK2dhbTAwMDQgZ2FtbWEgbmFuIC0+IG5hbgorCistLSBuZWdhdGl2ZSBpbnRlZ2VycyBpbnB1dHMgYXJlIGludmFsaWQKK2dhbTAwMTAgZ2FtbWEgLTEgLT4gbmFuICAgICAgICAgaW52YWxpZAorZ2FtMDAxMSBnYW1tYSAtMiAtPiBuYW4gICAgICAgICBpbnZhbGlkCitnYW0wMDEyIGdhbW1hIC0xZTE2IC0+IG5hbiAgICAgIGludmFsaWQKK2dhbTAwMTMgZ2FtbWEgLTFlMzAwIC0+IG5hbiAgICAgaW52YWxpZAorCistLSBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycyBnaXZlIGZhY3RvcmlhbHMKK2dhbTAwMjAgZ2FtbWEgMSAtPiAxCitnYW0wMDIxIGdhbW1hIDIgLT4gMQorZ2FtMDAyMiBnYW1tYSAzIC0+IDIKK2dhbTAwMjMgZ2FtbWEgNCAtPiA2CitnYW0wMDI0IGdhbW1hIDUgLT4gMjQKK2dhbTAwMjUgZ2FtbWEgNiAtPiAxMjAKKworLS0gaGFsZiBpbnRlZ2VycworZ2FtMDAzMCBnYW1tYSAwLjUgLT4gMS43NzI0NTM4NTA5MDU1MTYxCitnYW0wMDMxIGdhbW1hIDEuNSAtPiAwLjg4NjIyNjkyNTQ1Mjc1ODA1CitnYW0wMDMyIGdhbW1hIDIuNSAtPiAxLjMyOTM0MDM4ODE3OTEzNzAKK2dhbTAwMzMgZ2FtbWEgMy41IC0+IDMuMzIzMzUwOTcwNDQ3ODQyNgorZ2FtMDAzNCBnYW1tYSAtMC41IC0+IC0zLjU0NDkwNzcwMTgxMTAzMjIKK2dhbTAwMzUgZ2FtbWEgLTEuNSAtPiAyLjM2MzI3MTgwMTIwNzM1NDgKK2dhbTAwMzYgZ2FtbWEgLTIuNSAtPiAtMC45NDUzMDg3MjA0ODI5NDE5MAorZ2FtMDAzNyBnYW1tYSAtMy41IC0+IDAuMjcwMDg4MjA1ODUyMjY5MTEKKworLS0gdmFsdWVzIG5lYXIgMAorZ2FtMDA0MCBnYW1tYSAwLjEgLT4gOS41MTM1MDc2OTg2Njg3MzA2CitnYW0wMDQxIGdhbW1hIDAuMDEgLT4gOTkuNDMyNTg1MTE5MTUwNjAyCitnYW0wMDQyIGdhbW1hIDFlLTggLT4gOTk5OTk5OTkuNDIyNzg0MzQzCitnYW0wMDQzIGdhbW1hIDFlLTE2IC0+IDEwMDAwMDAwMDAwMDAwMDAwCitnYW0wMDQ0IGdhbW1hIDFlLTMwIC0+IDkuOTk5OTk5OTk5OTk5OTk4OGUrMjkKK2dhbTAwNDUgZ2FtbWEgMWUtMTYwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMGUrMTYwCitnYW0wMDQ2IGdhbW1hIDFlLTMwOCAtPiAxLjAwMDAwMDAwMDAwMDAwMDBlKzMwOAorZ2FtMDA0NyBnYW1tYSA1LjZlLTMwOSAtPiAxLjc4NTcxNDI4NTcxNDI4NDhlKzMwOAorZ2FtMDA0OCBnYW1tYSA1LjVlLTMwOSAtPiBpbmYgICBvdmVyZmxvdworZ2FtMDA0OSBnYW1tYSAxZS0zMDkgLT4gaW5mICAgICBvdmVyZmxvdworZ2FtMDA1MCBnYW1tYSAxZS0zMjMgLT4gaW5mICAgICBvdmVyZmxvdworZ2FtMDA1MSBnYW1tYSA1ZS0zMjQgLT4gaW5mICAgICBvdmVyZmxvdworZ2FtMDA2MCBnYW1tYSAtMC4xIC0+IC0xMC42ODYyODcwMjExOTMxOTMKK2dhbTAwNjEgZ2FtbWEgLTAuMDEgLT4gLTEwMC41ODcxOTc5NjQ0MTA3OAorZ2FtMDA2MiBnYW1tYSAtMWUtOCAtPiAtMTAwMDAwMDAwLjU3NzIxNTY3CitnYW0wMDYzIGdhbW1hIC0xZS0xNiAtPiAtMTAwMDAwMDAwMDAwMDAwMDAKK2dhbTAwNjQgZ2FtbWEgLTFlLTMwIC0+IC05Ljk5OTk5OTk5OTk5OTk5ODhlKzI5CitnYW0wMDY1IGdhbW1hIC0xZS0xNjAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMGUrMTYwCitnYW0wMDY2IGdhbW1hIC0xZS0zMDggLT4gLTEuMDAwMDAwMDAwMDAwMDAwMGUrMzA4CitnYW0wMDY3IGdhbW1hIC01LjZlLTMwOSAtPiAtMS43ODU3MTQyODU3MTQyODQ4ZSszMDgKK2dhbTAwNjggZ2FtbWEgLTUuNWUtMzA5IC0+IC1pbmYgb3ZlcmZsb3cKK2dhbTAwNjkgZ2FtbWEgLTFlLTMwOSAtPiAtaW5mICAgb3ZlcmZsb3cKK2dhbTAwNzAgZ2FtbWEgLTFlLTMyMyAtPiAtaW5mICAgb3ZlcmZsb3cKK2dhbTAwNzEgZ2FtbWEgLTVlLTMyNCAtPiAtaW5mICAgb3ZlcmZsb3cKKworLS0gdmFsdWVzIG5lYXIgbmVnYXRpdmUgaW50ZWdlcnMKK2dhbTAwODAgZ2FtbWEgLTAuOTk5OTk5OTk5OTk5OTk5ODkgLT4gLTkwMDcxOTkyNTQ3NDA5OTIuMAorZ2FtMDA4MSBnYW1tYSAtMS4wMDAwMDAwMDAwMDAwMDAyIC0+IDQ1MDM1OTk2MjczNzA0OTUuNQorZ2FtMDA4MiBnYW1tYSAtMS45OTk5OTk5OTk5OTk5OTk4IC0+IDIyNTE3OTk4MTM2ODUyNDguNQorZ2FtMDA4MyBnYW1tYSAtMi4wMDAwMDAwMDAwMDAwMDA0IC0+IC0xMTI1ODk5OTA2ODQyNjIzLjUKK2dhbTAwODQgZ2FtbWEgLTEwMC4wMDAwMDAwMDAwMDAwMSAtPiAtNy41NDAwODMzMzQ4ODMxMDkwZS0xNDUKK2dhbTAwODUgZ2FtbWEgLTk5Ljk5OTk5OTk5OTk5OTk4NiAtPiA3LjU0MDA4MzMzNDg4NDA5NjJlLTE0NQorCistLSBsYXJnZSBpbnB1dHMKK2dhbTAxMDAgZ2FtbWEgMTcwIC0+IDQuMjY5MDY4MDA5MDA0NzA1MWUrMzA0CitnYW0wMTAxIGdhbW1hIDE3MSAtPiA3LjI1NzQxNTYxNTMwNzk5OTBlKzMwNgorZ2FtMDEwMiBnYW1tYSAxNzEuNjI0IC0+IDEuNzk0MjExNzU5OTI0ODEwNGUrMzA4CitnYW0wMTAzIGdhbW1hIDE3MS42MjUgLT4gaW5mICAgIG92ZXJmbG93CitnYW0wMTA0IGdhbW1hIDE3MiAtPiBpbmYgICAgICAgIG92ZXJmbG93CitnYW0wMTA1IGdhbW1hIDIwMDAgLT4gaW5mICAgICAgIG92ZXJmbG93CitnYW0wMTA2IGdhbW1hIDEuN2UzMDggLT4gaW5mICAgIG92ZXJmbG93CisKKy0tIGlucHV0cyBmb3Igd2hpY2ggZ2FtbWEoeCkgaXMgdGlueQorZ2FtMDEyMCBnYW1tYSAtMTAwLjUgLT4gLTMuMzUzNjkwODE5ODA3Njc4N2UtMTU5CitnYW0wMTIxIGdhbW1hIC0xNjAuNSAtPiAtNS4yNTU1NDY0NDcwMDc4MjkzZS0yODYKK2dhbTAxMjIgZ2FtbWEgLTE3MC41IC0+IC0zLjMxMjczOTUyMTUzODYwNzRlLTMwOAorZ2FtMDEyMyBnYW1tYSAtMTcxLjUgLT4gMS45MzE2MjY1NDMxNzExOTAyZS0zMTAKK2dhbTAxMjQgZ2FtbWEgLTE3Ni41IC0+IC0xLjE5NTYzODg2MjkzNTgxNjZlLTMyMQorZ2FtMDEyNSBnYW1tYSAtMTc3LjUgLT4gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQKK2dhbTAxMjYgZ2FtbWEgLTE3OC41IC0+IC0wLjAKK2dhbTAxMjcgZ2FtbWEgLTE3OS41IC0+IDAuMAorZ2FtMDEyOCBnYW1tYSAtMjAxLjAwMDEgLT4gMC4wCitnYW0wMTI5IGdhbW1hIC0yMDIuOTk5OSAtPiAtMC4wCitnYW0wMTMwIGdhbW1hIC0xMDAwLjUgLT4gLTAuMAorZ2FtMDEzMSBnYW1tYSAtMTAwMDAwMDAwMC4zIC0+IC0wLjAKK2dhbTAxMzIgZ2FtbWEgLTQ1MDM1OTk2MjczNzA0OTUuNSAtPiAwLjAKKworLS0gaW5wdXRzIHRoYXQgY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBzdGFuZGFyZCByZWZsZWN0aW9uIGZvcm11bGEsCistLSB0aGFua3MgdG8gbG9zcyBvZiBhY2N1cmFjeSBpbiAxLXgKK2dhbTAxNDAgZ2FtbWEgLTYzLjM0OTA3ODcyOTAyMjk4NSAtPiA0LjE3Nzc5NzE2Nzc3NjE4ODBlLTg4CitnYW0wMTQxIGdhbW1hIC0xMjcuNDUxMTc2MzI5NDMyOTUgLT4gMS4xODMxMTEwODk2MjM2ODEwZS0yMTQKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZXhwbTE6IGV4cCh4KSAtIDEsIHdpdGhvdXQgcHJlY2lzaW9uIGxvc3MgZm9yIHNtYWxsIHggLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHNwZWNpYWwgdmFsdWVzCitleHBtMTAwMDAgZXhwbTEgMC4wIC0+IDAuMAorZXhwbTEwMDAxIGV4cG0xIC0wLjAgLT4gLTAuMAorZXhwbTEwMDAyIGV4cG0xIGluZiAtPiBpbmYKK2V4cG0xMDAwMyBleHBtMSAtaW5mIC0+IC0xLjAKK2V4cG0xMDAwNCBleHBtMSBuYW4gLT4gbmFuCisKKy0tIGV4cG0xKHgpIH4geCBmb3IgdGlueSB4CitleHBtMTAwMTAgZXhwbTEgNWUtMzI0IC0+IDVlLTMyNAorZXhwbTEwMDExIGV4cG0xIDFlLTMyMCAtPiAxZS0zMjAKK2V4cG0xMDAxMiBleHBtMSAxZS0zMDAgLT4gMWUtMzAwCitleHBtMTAwMTMgZXhwbTEgMWUtMTUwIC0+IDFlLTE1MAorZXhwbTEwMDE0IGV4cG0xIDFlLTIwIC0+IDFlLTIwCisKK2V4cG0xMDAyMCBleHBtMSAtNWUtMzI0IC0+IC01ZS0zMjQKK2V4cG0xMDAyMSBleHBtMSAtMWUtMzIwIC0+IC0xZS0zMjAKK2V4cG0xMDAyMiBleHBtMSAtMWUtMzAwIC0+IC0xZS0zMDAKK2V4cG0xMDAyMyBleHBtMSAtMWUtMTUwIC0+IC0xZS0xNTAKK2V4cG0xMDAyNCBleHBtMSAtMWUtMjAgLT4gLTFlLTIwCisKKy0tIG1vZGVyYXRlIHNpemVkIHZhbHVlcywgd2hlcmUgZGlyZWN0IGV2YWx1YXRpb24gcnVucyBpbnRvIHRyb3VibGUKK2V4cG0xMDEwMCBleHBtMSAxZS0xMCAtPiAxLjAwMDAwMDAwMDA1MDAwMDBlLTEwCitleHBtMTAxMDEgZXhwbTEgLTkuOTk5OTk5OTk5OTk5OTk5NWUtMDggLT4gLTkuOTk5OTk5NTAwMDAwMDE2M2UtOAorZXhwbTEwMTAyIGV4cG0xIDMuMDAwMDAwMDAwMDAwMDAwMWUtMDUgLT4gMy4wMDAwNDUwMDA0NTAwMDM0ZS01CitleHBtMTAxMDMgZXhwbTEgLTAuMDA3MDAwMDAwMDAwMDAwMDAwMSAtPiAtMC4wMDY5NzU1NTcwNjY3NjQ4OTUxCitleHBtMTAxMDQgZXhwbTEgLTAuMDcxNDk5MjA4NzQwMDk0NjMzIC0+IC0wLjA2OTAwMjk4NTc0NDgyMDI1MAorZXhwbTEwMTA1IGV4cG0xIC0wLjA2MzI5NjAwNDE4MDExNjc5OSAtPiAtMC4wNjEzMzQ0MTYzNzM2MzMwMDkKK2V4cG0xMDEwNiBleHBtMSAwLjAyMzkwOTU0MDM1NTk3NzU2IC0+IDAuMDI0MTk3NjY1MTQzODE5OTQyCitleHBtMTAxMDcgZXhwbTEgMC4wODU2MzczNTI2NDkwNDQ5MDEgLT4gMC4wODk0MTExODQ1ODAzNTc3NjcKK2V4cG0xMDEwOCBleHBtMSAwLjU5NjYxNzQ5NDc0MTEwMDYgLT4gMC44MTU5NjU4ODU5NjUwMTQ4NQorZXhwbTEwMTA5IGV4cG0xIDAuMzAyNDcyMDYyMTIwNzUxMzkgLT4gMC4zNTMxOTk4NzAzNTg0ODY3NworZXhwbTEwMTEwIGV4cG0xIDAuNzQ1NzQ3MjczNzU4ODk1MTYgLT4gMS4xMDgwMTYxMTE2NzM3NDU5CitleHBtMTAxMTEgZXhwbTEgMC45Nzc2NzUxMjkyNjU1NTcxMSAtPiAxLjY1ODI2ODkyMDczNzIxODUKK2V4cG0xMDExMiBleHBtMSAwLjg0NTAxNTQ1NjY3ODc3MTIgLT4gMS4zMjgwMTM3OTc2NTM1ODk3CitleHBtMTAxMTMgZXhwbTEgLTAuMTM5NzkyNjAzMjMxMjUyNjQgLT4gLTAuMTMwNDYxNDQzODEzOTYwNjAKK2V4cG0xMDExNCBleHBtMSAtMC41Mjg5OTMyMjAzOTY0MzI3MSAtPiAtMC40MTA4MDIxMzY0MzY5NTkyMworZXhwbTEwMTE1IGV4cG0xIC0wLjc0MDgzMjYxNDc4OTAwNjMxIC0+IC0wLjUyMzI4MzE3MTI0Nzk3MDk3CitleHBtMTAxMTYgZXhwbTEgLTAuOTM4NDc3NjY5ODQ1NDYwNTUgLT4gLTAuNjA4Nzc3MDQ3MjQwODU5NDYKK2V4cG0xMDExNyBleHBtMSAxMC4wIC0+IDIyMDI1LjQ2NTc5NDgwNjcxOAorZXhwbTEwMTE4IGV4cG0xIDI3LjAgLT4gNTMyMDQ4MjQwNjAwLjc5ODY1CitleHBtMTAxMTkgZXhwbTEgMTIzIC0+IDIuNjE5NTE3MzE4NzQ5MDYyNmUrNTMKK2V4cG0xMDEyMCBleHBtMSAtMTIuMCAtPiAtMC45OTk5OTM4NTU3ODc2NDY2NgorZXhwbTEwMTIxIGV4cG0xIC0zNS4xMDAwMDAwMDAwMDAwMDEgLT4gLTAuOTk5OTk5OTk5OTk5OTk5NDQKKworLS0gZXh0cmVtZSBuZWdhdGl2ZSB2YWx1ZXMKK2V4cG0xMDIwMSBleHBtMSAtMzcuMCAtPiAtMC45OTk5OTk5OTk5OTk5OTk4OQorZXhwbTEwMjAwIGV4cG0xIC0zOC4wIC0+IC0xLjAKK2V4cG0xMDIxMCBleHBtMSAtNzEwLjAgLT4gLTEuMAorLS0gdGhlIGZvcm11bGEgZXhwbTEoeCkgPSAyICogc2luaCh4LzIpICogZXhwKHgvMikgZG9lc24ndCB3b3JrIHNvCistLSB3ZWxsIHdoZW4gZXhwKHgvMikgaXMgc3Vibm9ybWFsIG9yIHVuZGVyZmxvd3MgdG8gemVybzsgY2hlY2sgd2UncmUKKy0tIG5vdCB1c2luZyBpdCEKK2V4cG0xMDIxMSBleHBtMSAtMTQyMC4wIC0+IC0xLjAKK2V4cG0xMDIxMiBleHBtMSAtMTQ1MC4wIC0+IC0xLjAKK2V4cG0xMDIxMyBleHBtMSAtMTUwMC4wIC0+IC0xLjAKK2V4cG0xMDIxNCBleHBtMSAtMWU1MCAtPiAtMS4wCitleHBtMTAyMTUgZXhwbTEgLTEuNzllMzA4IC0+IC0xLjAKKworLS0gZXh0cmVtZSBwb3NpdGl2ZSB2YWx1ZXMKK2V4cG0xMDMwMCBleHBtMSAzMDAgLT4gMS45NDI0MjYzOTUyNDEyNTU4ZSsxMzAKK2V4cG0xMDMwMSBleHBtMSA3MDAgLT4gMS4wMTQyMzIwNTQ3MzUwMDQ1ZSszMDQKKy0tIHRoZSBuZXh0IHRlc3QgKGV4cG0xMDMwMikgaXMgZGlzYWJsZWQgYmVjYXVzZSBpdCBjYXVzZXMgZmFpbHVyZSBvbgorLS0gT1MgWCAxMC40L0ludGVsOiBhcHBhcmVudGx5IGFsbCB2YWx1ZXMgb3ZlciA3MDkuNzggcHJvZHVjZSBhbgorLS0gb3ZlcmZsb3cgb24gdGhhdCBwbGF0Zm9ybS4gIFNlZSBpc3N1ZSAjNzU3NS4KKy0tIGV4cG0xMDMwMiBleHBtMSA3MDkuNzgyNzEyODkzMjgzOTMgLT4gMS43OTc2OTMxMzQ2ODI0MjQwZSszMDgKK2V4cG0xMDMwMyBleHBtMSA3MDkuNzgyNzEyODkzNDg0MDIgLT4gaW5mIG92ZXJmbG93CitleHBtMTAzMDQgZXhwbTEgMTAwMCAtPiBpbmYgb3ZlcmZsb3cKK2V4cG0xMDMwNSBleHBtMSAxZTUwIC0+IGluZiBvdmVyZmxvdworZXhwbTEwMzA2IGV4cG0xIDEuNzllMzA4IC0+IGluZiBvdmVyZmxvdworCistLSB3ZWFrZXIgdmVyc2lvbiBvZiBleHBtMTAzMDIKK2V4cG0xMDMwNyBleHBtMSA3MDkuNSAtPiAxLjM1NDk4NjMxOTMxNDYzMjhlKzMwOApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjZWEyNQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKQEAgLTAsMCArMSwxNiBAQAoraW1wb3J0IG11bHRpcHJvY2Vzc2luZworCitkZWYgZm9vKGNvbm4pOgorICAgIGNvbm4uc2VuZCgiMTIzIikKKworIyBCZWNhdXNlICJpZiBfX25hbWVfXyA9PSAnX19tYWluX18nIiBpcyBtaXNzaW5nIHRoaXMgd2lsbCBub3Qgd29yaworIyBjb3JyZWN0bHkgb24gV2luZG93cy4gIEhvd2V2ZXIsIHdlIHNob3VsZCBnZXQgYSBSdW50aW1lRXJyb3IgcmF0aGVyCisjIHRoYW4gdGhlIFdpbmRvd3MgZXF1aXZhbGVudCBvZiBhIGZvcmsgYm9tYi4KKworciwgdyA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKEZhbHNlKQorcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1mb28sIGFyZ3M9KHcsKSkKK3Auc3RhcnQoKQordy5jbG9zZSgpCitwcmludChyLnJlY3YoKSkKK3IuY2xvc2UoKQorcC5qb2luKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9ub2tpYS5wZW0gYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvbm9raWEucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMDQ0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvbm9raWEucGVtCkBAIC0wLDAgKzEsMzEgQEAKKyMgQ2VydGlmaWNhdGUgZm9yIHByb2plY3RzLmRldmVsb3Blci5ub2tpYS5jb206NDQzIChzZWUgaXNzdWUgMTMwMzQpCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUZMRENDQkJTZ0F3SUJBZ0lRTHVicWRrQ2dkYzdsQUY5TmZIbFVtakFOQmdrcWhraUc5dzBCQVFVRkFEQ0IKK3ZERUxNQWtHQTFVRUJoTUNWVk14RnpBVkJnTlZCQW9URGxabGNtbFRhV2R1TENCSmJtTXVNUjh3SFFZRFZRUUwKK0V4WldaWEpwVTJsbmJpQlVjblZ6ZENCT1pYUjNiM0pyTVRzd09RWURWUVFMRXpKVVpYSnRjeUJ2WmlCMWMyVWcKK1lYUWdhSFIwY0hNNkx5OTNkM2N1ZG1WeWFYTnBaMjR1WTI5dEwzSndZU0FvWXlreE1ERTJNRFFHQTFVRUF4TXQKK1ZtVnlhVk5wWjI0Z1EyeGhjM01nTXlCSmJuUmxjbTVoZEdsdmJtRnNJRk5sY25abGNpQkRRU0F0SUVjek1CNFgKK0RURXhNRGt5TVRBd01EQXdNRm9YRFRFeU1Ea3lNREl6TlRrMU9Wb3djVEVMTUFrR0ExVUVCaE1DUmtreERqQU0KK0JnTlZCQWdUQlVWemNHOXZNUTR3REFZRFZRUUhGQVZGYzNCdmJ6RU9NQXdHQTFVRUNoUUZUbTlyYVdFeEN6QUoKK0JnTlZCQXNVQWtKSk1TVXdJd1lEVlFRREZCeHdjbTlxWldOMGN5NWtaWFpsYkc5d1pYSXVibTlyYVdFdVkyOXQKK01JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQ3I5MncxYnBIWVNZeFVFeDhOLzhJZGRkYTIKK2xZaSthWE50UWZWL2wyRnc5WWt2M0lwdzRuTGVHVGoxOEZGbEFaZ01kUFJsZ3J6Ri9OTlhHdy85bDMvcUtkb3cKK0N5cGtRZjhsTGF4YjlaZTFFL0tLbWtSSmE0OFFUT3F2bzZHcUt1VEk2SENlR2xHMVJ4RGI4WVNLY1FXTGl5dG4KK3lqM1dwNE1nUlFPMjY2eG1NUUlEQVFBQm80SUI5akNDQWZJd1FRWURWUjBSQkRvd09JSWNjSEp2YW1WamRITXUKK1pHVjJaV3h2Y0dWeUxtNXZhMmxoTG1OdmJZSVljSEp2YW1WamRITXVabTl5ZFcwdWJtOXJhV0V1WTI5dE1Ba0cKK0ExVWRFd1FDTUFBd0N3WURWUjBQQkFRREFnV2dNRUVHQTFVZEh3UTZNRGd3TnFBMG9ES0dNR2gwZEhBNkx5OVQKK1ZsSkpiblJzTFVjekxXTnliQzUyWlhKcGMybG5iaTVqYjIwdlUxWlNTVzUwYkVjekxtTnliREJFQmdOVkhTQUUKK1BUQTdNRGtHQzJDR1NBR0crRVVCQnhjRE1Db3dLQVlJS3dZQkJRVUhBZ0VXSEdoMGRIQnpPaTh2ZDNkM0xuWmwKK2NtbHphV2R1TG1OdmJTOXljR0V3S0FZRFZSMGxCQ0V3SHdZSllJWklBWWI0UWdRQkJnZ3JCZ0VGQlFjREFRWUkKK0t3WUJCUVVIQXdJd2NnWUlLd1lCQlFVSEFRRUVaakJrTUNRR0NDc0dBUVVGQnpBQmhoaG9kSFJ3T2k4dmIyTnoKK2NDNTJaWEpwYzJsbmJpNWpiMjB3UEFZSUt3WUJCUVVITUFLR01HaDBkSEE2THk5VFZsSkpiblJzTFVjekxXRnAKK1lTNTJaWEpwYzJsbmJpNWpiMjB2VTFaU1NXNTBiRWN6TG1ObGNqQnVCZ2dyQmdFRkJRY0JEQVJpTUdDaFhxQmMKK01Gb3dXREJXRmdscGJXRm5aUzluYVdZd0lUQWZNQWNHQlNzT0F3SWFCQlJMYTdrb2xnWU11OUJTT0pzcHJFc0gKK2l5RUZHREFtRmlSb2RIUndPaTh2Ykc5bmJ5NTJaWEpwYzJsbmJpNWpiMjB2ZG5Oc2IyZHZNUzVuYVdZd0RRWUoKK0tvWklodmNOQVFFRkJRQURnZ0VCQUNRdVB5SUpxWHdVeUZSV3c5eDV5RFhnTVc0ellGb3BRWU93L0l0Ulk1MjIKK081QnN5U1RoNTZCV1M2bVFCMDdYVmZ4bVlVR0F2UlFEQTVRSHBtWThqSWxOd1NtTjNzOFJLbytmQXRpTlJsY0wKK3gvbVdTZnVNczNEL1M2ZXYzRDYrZHBFTVp0anJoT2RjdHNhck1LcDhuL2hQYndoQWJnNWhWanBrVzVuOHZ6MnkKKzBLeHZ2a0ExQXhwTHdwVnY3T2xLMTd0dHpJSHc4YnA5SFRsSEJVNXM4Ykt6NGE1NjVWL2E1SEkwQ1NFdi8rMHkKK2tvNC9naFRuWmMxQ2ttVW5nS0tlRk1TYWgvbVQveEFoOFhuRTJsMUFhekZhOFVLdVlraTFlK0FySGFHWmM0aXgKK1VZT3RpUnBod2Z1WVFoUlo3cVg5cTJNTWtDTUk2NVhOSy9TYUZyQWJiRzA9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvbnVsbGNlcnQucGVtIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L251bGxjZXJ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L251bGxjZXJ0LnBlbQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L291dHN0YW5kaW5nX2J1Z3MucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvb3V0c3RhbmRpbmdfYnVncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGFmY2JkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L291dHN0YW5kaW5nX2J1Z3MucHkKQEAgLTAsMCArMSwyMiBAQAorIworIyBUaGlzIGZpbGUgaXMgZm9yIGV2ZXJ5Ym9keSB0byBhZGQgdGVzdHMgZm9yIGJ1Z3MgdGhhdCBhcmVuJ3QKKyMgZml4ZWQgeWV0LiBQbGVhc2UgYWRkIGEgdGVzdCBjYXNlIGFuZCBhcHByb3ByaWF0ZSBidWcgZGVzY3JpcHRpb24uCisjCisjIFdoZW4geW91IGZpeCBvbmUgb2YgdGhlIGJ1Z3MsIHBsZWFzZSBtb3ZlIHRoZSB0ZXN0IHRvIHRoZSBjb3JyZWN0CisjIHRlc3RfIG1vZHVsZS4KKyMKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjCisjIE5vIHRlc3QgY2FzZXMgZm9yIG91dHN0YW5kaW5nIGJ1Z3MgYXQgdGhlIG1vbWVudC4KKyMKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgI3Rlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKQorICAgIHBhc3MKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjYWZjYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKQEAgLTAsMCArMSwxMzE5IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBjUGlja2xlCitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBjU3RyaW5nSU8KK2ltcG9ydCBwaWNrbGV0b29scworaW1wb3J0IGNvcHlfcmVnCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RGYWlsZWQsIHZlcmJvc2UsIGhhdmVfdW5pY29kZSwgVEVTVEZOCit0cnk6CisgICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgXzJHLCBfMU0sIHByZWNpc2lvbmJpZ21lbXRlc3QKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIHRoaXMgaW1wb3J0IG1pZ2h0IGZhaWwgd2hlbiBydW4gb24gb2xkZXIgUHl0aG9uIHZlcnNpb25zIGJ5IHRlc3RfeHBpY2tsZQorICAgIF8yRyA9IF8xTSA9IDAKKyAgICBkZWYgcHJlY2lzaW9uYmlnbWVtdGVzdCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gbGFtYmRhIHNlbGY6IE5vbmUKKworIyBUZXN0cyB0aGF0IHRyeSBhIG51bWJlciBvZiBwaWNrbGUgcHJvdG9jb2xzIHNob3VsZCBoYXZlIGEKKyMgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisjIGtpbmQgb2Ygb3V0ZXIgbG9vcC4KK2Fzc2VydCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCA9PSBjUGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgPT0gMgorcHJvdG9jb2xzID0gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKQorCisjIENvcHkgb2YgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3dpdGhfbG9jYWxlLiBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IFB5dGhvbgorIyAyLjQsIHdoaWNoIGRpZG4ndCBpbmNsdWRlIGl0LiBUaGlzIGlzIGFsbCB0byBzdXBwb3J0IHRlc3RfeHBpY2tsZSwgd2hpY2gKKyMgYm91bmNlcyBwaWNrbGVkIG9iamVjdHMgdGhyb3VnaCBvbGRlciBQeXRob24gdmVyc2lvbnMgdG8gdGVzdCBiYWNrd2FyZHMKKyMgY29tcGF0aWJpbGl0eS4KK2RlZiBydW5fd2l0aF9sb2NhbGUoY2F0c3RyLCAqbG9jYWxlcyk6CisgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgZGVmIGlubmVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IGdldGF0dHIobG9jYWxlLCBjYXRzdHIpCisgICAgICAgICAgICAgICAgb3JpZ19sb2NhbGUgPSBsb2NhbGUuc2V0bG9jYWxlKGNhdGVnb3J5KQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICMgaWYgdGhlIHRlc3QgYXV0aG9yIGdpdmVzIHVzIGFuIGludmFsaWQgY2F0ZWdvcnkgc3RyaW5nCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAjIGNhbm5vdCByZXRyaWV2ZSBvcmlnaW5hbCBsb2NhbGUsIHNvIGRvIG5vdGhpbmcKKyAgICAgICAgICAgICAgICBsb2NhbGUgPSBvcmlnX2xvY2FsZSA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGxvYyBpbiBsb2NhbGVzOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2MpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICMgbm93IHJ1biB0aGUgZnVuY3Rpb24sIHJlc2V0dGluZyB0aGUgbG9jYWxlIG9uIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2RzKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiBsb2NhbGUgYW5kIG9yaWdfbG9jYWxlOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGNhdGVnb3J5LCBvcmlnX2xvY2FsZSkKKyAgICAgICAgaW5uZXIuZnVuY19uYW1lID0gZnVuYy5mdW5jX25hbWUKKyAgICAgICAgaW5uZXIuX19kb2NfXyA9IGZ1bmMuX19kb2NfXworICAgICAgICByZXR1cm4gaW5uZXIKKyAgICByZXR1cm4gZGVjb3JhdG9yCisKKworIyBSZXR1cm4gVHJ1ZSBpZiBvcGNvZGUgY29kZSBhcHBlYXJzIGluIHRoZSBwaWNrbGUsIGVsc2UgRmFsc2UuCitkZWYgb3Bjb2RlX2luX3BpY2tsZShjb2RlLCBwaWNrbGUpOgorICAgIGZvciBvcCwgZHVtbXksIGR1bW15IGluIHBpY2tsZXRvb2xzLmdlbm9wcyhwaWNrbGUpOgorICAgICAgICBpZiBvcC5jb2RlID09IGNvZGU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCisjIFJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVzIG9wY29kZSBjb2RlIGFwcGVhcnMgaW4gcGlja2xlLgorZGVmIGNvdW50X29wY29kZShjb2RlLCBwaWNrbGUpOgorICAgIG4gPSAwCisgICAgZm9yIG9wLCBkdW1teSwgZHVtbXkgaW4gcGlja2xldG9vbHMuZ2Vub3BzKHBpY2tsZSk6CisgICAgICAgIGlmIG9wLmNvZGUgPT0gY29kZToKKyAgICAgICAgICAgIG4gKz0gMQorICAgIHJldHVybiBuCisKKyMgV2UgY2FuJ3QgdmVyeSB3ZWxsIHRlc3QgdGhlIGV4dGVuc2lvbiByZWdpc3RyeSB3aXRob3V0IHB1dHRpbmcga25vd24gc3R1ZmYKKyMgaW4gaXQsIGJ1dCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgdG8gcmVzdG9yZSBpdHMgb3JpZ2luYWwgc3RhdGUuICBDb2RlCisjIHNob3VsZCBkbyB0aGlzOgorIworIyAgICAgZSA9IEV4dGVuc2lvblNhdmVyKGV4dGVuc2lvbl9jb2RlKQorIyAgICAgdHJ5OgorIyAgICAgICAgIGZpZGRsZSB3LyB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5J3Mgc3R1ZmYgZm9yIGV4dGVuc2lvbl9jb2RlCisjICAgICBmaW5hbGx5OgorIyAgICAgICAgIGUucmVzdG9yZSgpCisKK2NsYXNzIEV4dGVuc2lvblNhdmVyOgorICAgICMgUmVtZW1iZXIgY3VycmVudCByZWdpc3RyYXRpb24gZm9yIGNvZGUgKGlmIGFueSksIGFuZCByZW1vdmUgaXQgKGlmCisgICAgIyB0aGVyZSBpcyBvbmUpLgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlKToKKyAgICAgICAgc2VsZi5jb2RlID0gY29kZQorICAgICAgICBpZiBjb2RlIGluIGNvcHlfcmVnLl9pbnZlcnRlZF9yZWdpc3RyeToKKyAgICAgICAgICAgIHNlbGYucGFpciA9IGNvcHlfcmVnLl9pbnZlcnRlZF9yZWdpc3RyeVtjb2RlXQorICAgICAgICAgICAgY29weV9yZWcucmVtb3ZlX2V4dGVuc2lvbihzZWxmLnBhaXJbMF0sIHNlbGYucGFpclsxXSwgY29kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucGFpciA9IE5vbmUKKworICAgICMgUmVzdG9yZSBwcmV2aW91cyByZWdpc3RyYXRpb24gZm9yIGNvZGUuCisgICAgZGVmIHJlc3RvcmUoc2VsZik6CisgICAgICAgIGNvZGUgPSBzZWxmLmNvZGUKKyAgICAgICAgY3VycGFpciA9IGNvcHlfcmVnLl9pbnZlcnRlZF9yZWdpc3RyeS5nZXQoY29kZSkKKyAgICAgICAgaWYgY3VycGFpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvcHlfcmVnLnJlbW92ZV9leHRlbnNpb24oY3VycGFpclswXSwgY3VycGFpclsxXSwgY29kZSkKKyAgICAgICAgcGFpciA9IHNlbGYucGFpcgorICAgICAgICBpZiBwYWlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY29weV9yZWcuYWRkX2V4dGVuc2lvbihwYWlyWzBdLCBwYWlyWzFdLCBjb2RlKQorCitjbGFzcyBDOgorICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGNtcChzZWxmLl9fZGljdF9fLCBvdGhlci5fX2RpY3RfXykKKworaW1wb3J0IF9fbWFpbl9fCitfX21haW5fXy5DID0gQworQy5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgorCitjbGFzcyBteWludChpbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgc2VsZi5zdHIgPSBzdHIoeCkKKworY2xhc3MgaW5pdGFyZyhDKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKKyAgICAgICAgc2VsZi5hID0gYQorICAgICAgICBzZWxmLmIgPSBiCisKKyAgICBkZWYgX19nZXRpbml0YXJnc19fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5hLCBzZWxmLmIKKworY2xhc3MgbWV0YWNsYXNzKHR5cGUpOgorICAgIHBhc3MKKworY2xhc3MgdXNlX21ldGFjbGFzcyhvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBtZXRhY2xhc3MKKworY2xhc3MgcGlja2xpbmdfbWV0YWNsYXNzKHR5cGUpOgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5yZWR1Y2VfYXJncyA9PSBvdGhlci5yZWR1Y2VfYXJncykKKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKGNyZWF0ZV9keW5hbWljX2NsYXNzLCBzZWxmLnJlZHVjZV9hcmdzKQorCisgICAgX19oYXNoX18gPSBOb25lCisKK2RlZiBjcmVhdGVfZHluYW1pY19jbGFzcyhuYW1lLCBiYXNlcyk6CisgICAgcmVzdWx0ID0gcGlja2xpbmdfbWV0YWNsYXNzKG5hbWUsIGJhc2VzLCBkaWN0KCkpCisgICAgcmVzdWx0LnJlZHVjZV9hcmdzID0gKG5hbWUsIGJhc2VzKQorICAgIHJldHVybiByZXN1bHQKKworIyBEQVRBMCAuLiBEQVRBMiBhcmUgdGhlIHBpY2tsZXMgd2UgZXhwZWN0IHVuZGVyIHRoZSB2YXJpb3VzIHByb3RvY29scywgZm9yCisjIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgY3JlYXRlX2RhdGEoKS4KKworIyBicmVhayBpbnRvIG11bHRpcGxlIHN0cmluZ3MgdG8gYXZvaWQgY29uZnVzaW5nIGZvbnQtbG9jay1tb2RlCitEQVRBMCA9ICIiIihscDEKK0kwCithTDFMCithRjIKK2FjX19idWlsdGluX18KK2NvbXBsZXgKK3AyCisiIiIgKyBcCisiIiIoRjMKK0YwCit0UnAzCithSTEKK2FJLTEKK2FJMjU1CithSS0yNTUKK2FJLTI1NgorYUk2NTUzNQorYUktNjU1MzUKK2FJLTY1NTM2CithSTIxNDc0ODM2NDcKK2FJLTIxNDc0ODM2NDcKK2FJLTIxNDc0ODM2NDgKK2EiIiIgKyBcCisiIiIoUydhYmMnCitwNAorZzQKKyIiIiArIFwKKyIiIihpX19tYWluX18KK0MKK3A1CisiIiIgKyBcCisiIiIoZHA2CitTJ2ZvbycKK3A3CitJMQorc1MnYmFyJworcDgKK0kyCitzYmc1Cit0cDkKK2FnOQorYUk1CithLgorIiIiCisKKyMgRGlzYXNzZW1ibHkgb2YgREFUQTAuCitEQVRBMF9ESVMgPSAiIiJcCisgICAgMDogKCAgICBNQVJLCisgICAgMTogbCAgICAgICAgTElTVCAgICAgICAoTUFSSyBhdCAwKQorICAgIDI6IHAgICAgUFVUICAgICAgICAxCisgICAgNTogSSAgICBJTlQgICAgICAgIDAKKyAgICA4OiBhICAgIEFQUEVORAorICAgIDk6IEwgICAgTE9ORyAgICAgICAxTAorICAgMTM6IGEgICAgQVBQRU5ECisgICAxNDogRiAgICBGTE9BVCAgICAgIDIuMAorICAgMTc6IGEgICAgQVBQRU5ECisgICAxODogYyAgICBHTE9CQUwgICAgICdfX2J1aWx0aW5fXyBjb21wbGV4JworICAgMzk6IHAgICAgUFVUICAgICAgICAyCisgICA0MjogKCAgICBNQVJLCisgICA0MzogRiAgICAgICAgRkxPQVQgICAgICAzLjAKKyAgIDQ2OiBGICAgICAgICBGTE9BVCAgICAgIDAuMAorICAgNDk6IHQgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgNDIpCisgICA1MDogUiAgICBSRURVQ0UKKyAgIDUxOiBwICAgIFBVVCAgICAgICAgMworICAgNTQ6IGEgICAgQVBQRU5ECisgICA1NTogSSAgICBJTlQgICAgICAgIDEKKyAgIDU4OiBhICAgIEFQUEVORAorICAgNTk6IEkgICAgSU5UICAgICAgICAtMQorICAgNjM6IGEgICAgQVBQRU5ECisgICA2NDogSSAgICBJTlQgICAgICAgIDI1NQorICAgNjk6IGEgICAgQVBQRU5ECisgICA3MDogSSAgICBJTlQgICAgICAgIC0yNTUKKyAgIDc2OiBhICAgIEFQUEVORAorICAgNzc6IEkgICAgSU5UICAgICAgICAtMjU2CisgICA4MzogYSAgICBBUFBFTkQKKyAgIDg0OiBJICAgIElOVCAgICAgICAgNjU1MzUKKyAgIDkxOiBhICAgIEFQUEVORAorICAgOTI6IEkgICAgSU5UICAgICAgICAtNjU1MzUKKyAgMTAwOiBhICAgIEFQUEVORAorICAxMDE6IEkgICAgSU5UICAgICAgICAtNjU1MzYKKyAgMTA5OiBhICAgIEFQUEVORAorICAxMTA6IEkgICAgSU5UICAgICAgICAyMTQ3NDgzNjQ3CisgIDEyMjogYSAgICBBUFBFTkQKKyAgMTIzOiBJICAgIElOVCAgICAgICAgLTIxNDc0ODM2NDcKKyAgMTM2OiBhICAgIEFQUEVORAorICAxMzc6IEkgICAgSU5UICAgICAgICAtMjE0NzQ4MzY0OAorICAxNTA6IGEgICAgQVBQRU5ECisgIDE1MTogKCAgICBNQVJLCisgIDE1MjogUyAgICAgICAgU1RSSU5HICAgICAnYWJjJworICAxNTk6IHAgICAgICAgIFBVVCAgICAgICAgNAorICAxNjI6IGcgICAgICAgIEdFVCAgICAgICAgNAorICAxNjU6ICggICAgICAgIE1BUksKKyAgMTY2OiBpICAgICAgICAgICAgSU5TVCAgICAgICAnX19tYWluX18gQycgKE1BUksgYXQgMTY1KQorICAxNzg6IHAgICAgICAgIFBVVCAgICAgICAgNQorICAxODE6ICggICAgICAgIE1BUksKKyAgMTgyOiBkICAgICAgICAgICAgRElDVCAgICAgICAoTUFSSyBhdCAxODEpCisgIDE4MzogcCAgICAgICAgUFVUICAgICAgICA2CisgIDE4NjogUyAgICAgICAgU1RSSU5HICAgICAnZm9vJworICAxOTM6IHAgICAgICAgIFBVVCAgICAgICAgNworICAxOTY6IEkgICAgICAgIElOVCAgICAgICAgMQorICAxOTk6IHMgICAgICAgIFNFVElURU0KKyAgMjAwOiBTICAgICAgICBTVFJJTkcgICAgICdiYXInCisgIDIwNzogcCAgICAgICAgUFVUICAgICAgICA4CisgIDIxMDogSSAgICAgICAgSU5UICAgICAgICAyCisgIDIxMzogcyAgICAgICAgU0VUSVRFTQorICAyMTQ6IGIgICAgICAgIEJVSUxECisgIDIxNTogZyAgICAgICAgR0VUICAgICAgICA1CisgIDIxODogdCAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAxNTEpCisgIDIxOTogcCAgICBQVVQgICAgICAgIDkKKyAgMjIyOiBhICAgIEFQUEVORAorICAyMjM6IGcgICAgR0VUICAgICAgICA5CisgIDIyNjogYSAgICBBUFBFTkQKKyAgMjI3OiBJICAgIElOVCAgICAgICAgNQorICAyMzA6IGEgICAgQVBQRU5ECisgIDIzMTogLiAgICBTVE9QCitoaWdoZXN0IHByb3RvY29sIGFtb25nIG9wY29kZXMgPSAwCisiIiIKKworREFUQTEgPSAoJ11xXHgwMShLXHgwMEwxTFxuR0BceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgJ2NfX2J1aWx0aW5fX1xuY29tcGxleFxucVx4MDIoR0BceDA4XHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAnXHgwMEdceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMHRScVx4MDNLXHgwMUpceGZmXHhmZicKKyAgICAgICAgICdceGZmXHhmZktceGZmSlx4MDFceGZmXHhmZlx4ZmZKXHgwMFx4ZmZceGZmXHhmZk1ceGZmXHhmZicKKyAgICAgICAgICdKXHgwMVx4MDBceGZmXHhmZkpceDAwXHgwMFx4ZmZceGZmSlx4ZmZceGZmXHhmZlx4N2ZKXHgwMVx4MDAnCisgICAgICAgICAnXHgwMFx4ODBKXHgwMFx4MDBceDAwXHg4MChVXHgwM2FiY3FceDA0aFx4MDQoY19fbWFpbl9fXG4nCisgICAgICAgICAnQ1xucVx4MDVvcVx4MDZ9cVx4MDcoVVx4MDNmb29xXHgwOEtceDAxVVx4MDNiYXJxXHRLXHgwMnViaCcKKyAgICAgICAgICdceDA2dHFcbmhcbktceDA1ZS4nCisgICAgICAgICkKKworIyBEaXNhc3NlbWJseSBvZiBEQVRBMS4KK0RBVEExX0RJUyA9ICIiIlwKKyAgICAwOiBdICAgIEVNUFRZX0xJU1QKKyAgICAxOiBxICAgIEJJTlBVVCAgICAgMQorICAgIDM6ICggICAgTUFSSworICAgIDQ6IEsgICAgICAgIEJJTklOVDEgICAgMAorICAgIDY6IEwgICAgICAgIExPTkcgICAgICAgMUwKKyAgIDEwOiBHICAgICAgICBCSU5GTE9BVCAgIDIuMAorICAgMTk6IGMgICAgICAgIEdMT0JBTCAgICAgJ19fYnVpbHRpbl9fIGNvbXBsZXgnCisgICA0MDogcSAgICAgICAgQklOUFVUICAgICAyCisgICA0MjogKCAgICAgICAgTUFSSworICAgNDM6IEcgICAgICAgICAgICBCSU5GTE9BVCAgIDMuMAorICAgNTI6IEcgICAgICAgICAgICBCSU5GTE9BVCAgIDAuMAorICAgNjE6IHQgICAgICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDQyKQorICAgNjI6IFIgICAgICAgIFJFRFVDRQorICAgNjM6IHEgICAgICAgIEJJTlBVVCAgICAgMworICAgNjU6IEsgICAgICAgIEJJTklOVDEgICAgMQorICAgNjc6IEogICAgICAgIEJJTklOVCAgICAgLTEKKyAgIDcyOiBLICAgICAgICBCSU5JTlQxICAgIDI1NQorICAgNzQ6IEogICAgICAgIEJJTklOVCAgICAgLTI1NQorICAgNzk6IEogICAgICAgIEJJTklOVCAgICAgLTI1NgorICAgODQ6IE0gICAgICAgIEJJTklOVDIgICAgNjU1MzUKKyAgIDg3OiBKICAgICAgICBCSU5JTlQgICAgIC02NTUzNQorICAgOTI6IEogICAgICAgIEJJTklOVCAgICAgLTY1NTM2CisgICA5NzogSiAgICAgICAgQklOSU5UICAgICAyMTQ3NDgzNjQ3CisgIDEwMjogSiAgICAgICAgQklOSU5UICAgICAtMjE0NzQ4MzY0NworICAxMDc6IEogICAgICAgIEJJTklOVCAgICAgLTIxNDc0ODM2NDgKKyAgMTEyOiAoICAgICAgICBNQVJLCisgIDExMzogVSAgICAgICAgICAgIFNIT1JUX0JJTlNUUklORyAnYWJjJworICAxMTg6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDQKKyAgMTIwOiBoICAgICAgICAgICAgQklOR0VUICAgICA0CisgIDEyMjogKCAgICAgICAgICAgIE1BUksKKyAgMTIzOiBjICAgICAgICAgICAgICAgIEdMT0JBTCAgICAgJ19fbWFpbl9fIEMnCisgIDEzNTogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDUKKyAgMTM3OiBvICAgICAgICAgICAgICAgIE9CSiAgICAgICAgKE1BUksgYXQgMTIyKQorICAxMzg6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDYKKyAgMTQwOiB9ICAgICAgICAgICAgRU1QVFlfRElDVAorICAxNDE6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDcKKyAgMTQzOiAoICAgICAgICAgICAgTUFSSworICAxNDQ6IFUgICAgICAgICAgICAgICAgU0hPUlRfQklOU1RSSU5HICdmb28nCisgIDE0OTogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDgKKyAgMTUxOiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMQorICAxNTM6IFUgICAgICAgICAgICAgICAgU0hPUlRfQklOU1RSSU5HICdiYXInCisgIDE1ODogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDkKKyAgMTYwOiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMgorICAxNjI6IHUgICAgICAgICAgICAgICAgU0VUSVRFTVMgICAoTUFSSyBhdCAxNDMpCisgIDE2MzogYiAgICAgICAgICAgIEJVSUxECisgIDE2NDogaCAgICAgICAgICAgIEJJTkdFVCAgICAgNgorICAxNjY6IHQgICAgICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDExMikKKyAgMTY3OiBxICAgICAgICBCSU5QVVQgICAgIDEwCisgIDE2OTogaCAgICAgICAgQklOR0VUICAgICAxMAorICAxNzE6IEsgICAgICAgIEJJTklOVDEgICAgNQorICAxNzM6IGUgICAgICAgIEFQUEVORFMgICAgKE1BUksgYXQgMykKKyAgMTc0OiAuICAgIFNUT1AKK2hpZ2hlc3QgcHJvdG9jb2wgYW1vbmcgb3Bjb2RlcyA9IDEKKyIiIgorCitEQVRBMiA9ICgnXHg4MFx4MDJdcVx4MDEoS1x4MDBceDhhXHgwMVx4MDFHQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAnY19fYnVpbHRpbl9fXG5jb21wbGV4XG5xXHgwMkdAXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMEdceDAwJworICAgICAgICAgJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDg2UnFceDAzS1x4MDFKXHhmZlx4ZmZceGZmXHhmZksnCisgICAgICAgICAnXHhmZkpceDAxXHhmZlx4ZmZceGZmSlx4MDBceGZmXHhmZlx4ZmZNXHhmZlx4ZmZKXHgwMVx4MDBceGZmXHhmZicKKyAgICAgICAgICdKXHgwMFx4MDBceGZmXHhmZkpceGZmXHhmZlx4ZmZceDdmSlx4MDFceDAwXHgwMFx4ODBKXHgwMFx4MDBceDAwJworICAgICAgICAgJ1x4ODAoVVx4MDNhYmNxXHgwNGhceDA0KGNfX21haW5fX1xuQ1xucVx4MDVvcVx4MDZ9cVx4MDcoVVx4MDNmb28nCisgICAgICAgICAncVx4MDhLXHgwMVVceDAzYmFycVx0S1x4MDJ1YmhceDA2dHFcbmhcbktceDA1ZS4nKQorCisjIERpc2Fzc2VtYmx5IG9mIERBVEEyLgorREFUQTJfRElTID0gIiIiXAorICAgIDA6IFx4ODAgUFJPVE8gICAgICAyCisgICAgMjogXSAgICBFTVBUWV9MSVNUCisgICAgMzogcSAgICBCSU5QVVQgICAgIDEKKyAgICA1OiAoICAgIE1BUksKKyAgICA2OiBLICAgICAgICBCSU5JTlQxICAgIDAKKyAgICA4OiBceDhhICAgICBMT05HMSAgICAgIDFMCisgICAxMTogRyAgICAgICAgQklORkxPQVQgICAyLjAKKyAgIDIwOiBjICAgICAgICBHTE9CQUwgICAgICdfX2J1aWx0aW5fXyBjb21wbGV4JworICAgNDE6IHEgICAgICAgIEJJTlBVVCAgICAgMgorICAgNDM6IEcgICAgICAgIEJJTkZMT0FUICAgMy4wCisgICA1MjogRyAgICAgICAgQklORkxPQVQgICAwLjAKKyAgIDYxOiBceDg2ICAgICBUVVBMRTIKKyAgIDYyOiBSICAgICAgICBSRURVQ0UKKyAgIDYzOiBxICAgICAgICBCSU5QVVQgICAgIDMKKyAgIDY1OiBLICAgICAgICBCSU5JTlQxICAgIDEKKyAgIDY3OiBKICAgICAgICBCSU5JTlQgICAgIC0xCisgICA3MjogSyAgICAgICAgQklOSU5UMSAgICAyNTUKKyAgIDc0OiBKICAgICAgICBCSU5JTlQgICAgIC0yNTUKKyAgIDc5OiBKICAgICAgICBCSU5JTlQgICAgIC0yNTYKKyAgIDg0OiBNICAgICAgICBCSU5JTlQyICAgIDY1NTM1CisgICA4NzogSiAgICAgICAgQklOSU5UICAgICAtNjU1MzUKKyAgIDkyOiBKICAgICAgICBCSU5JTlQgICAgIC02NTUzNgorICAgOTc6IEogICAgICAgIEJJTklOVCAgICAgMjE0NzQ4MzY0NworICAxMDI6IEogICAgICAgIEJJTklOVCAgICAgLTIxNDc0ODM2NDcKKyAgMTA3OiBKICAgICAgICBCSU5JTlQgICAgIC0yMTQ3NDgzNjQ4CisgIDExMjogKCAgICAgICAgTUFSSworICAxMTM6IFUgICAgICAgICAgICBTSE9SVF9CSU5TVFJJTkcgJ2FiYycKKyAgMTE4OiBxICAgICAgICAgICAgQklOUFVUICAgICA0CisgIDEyMDogaCAgICAgICAgICAgIEJJTkdFVCAgICAgNAorICAxMjI6ICggICAgICAgICAgICBNQVJLCisgIDEyMzogYyAgICAgICAgICAgICAgICBHTE9CQUwgICAgICdfX21haW5fXyBDJworICAxMzU6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA1CisgIDEzNzogbyAgICAgICAgICAgICAgICBPQkogICAgICAgIChNQVJLIGF0IDEyMikKKyAgMTM4OiBxICAgICAgICAgICAgQklOUFVUICAgICA2CisgIDE0MDogfSAgICAgICAgICAgIEVNUFRZX0RJQ1QKKyAgMTQxOiBxICAgICAgICAgICAgQklOUFVUICAgICA3CisgIDE0MzogKCAgICAgICAgICAgIE1BUksKKyAgMTQ0OiBVICAgICAgICAgICAgICAgIFNIT1JUX0JJTlNUUklORyAnZm9vJworICAxNDk6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA4CisgIDE1MTogSyAgICAgICAgICAgICAgICBCSU5JTlQxICAgIDEKKyAgMTUzOiBVICAgICAgICAgICAgICAgIFNIT1JUX0JJTlNUUklORyAnYmFyJworICAxNTg6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA5CisgIDE2MDogSyAgICAgICAgICAgICAgICBCSU5JTlQxICAgIDIKKyAgMTYyOiB1ICAgICAgICAgICAgICAgIFNFVElURU1TICAgKE1BUksgYXQgMTQzKQorICAxNjM6IGIgICAgICAgICAgICBCVUlMRAorICAxNjQ6IGggICAgICAgICAgICBCSU5HRVQgICAgIDYKKyAgMTY2OiB0ICAgICAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAxMTIpCisgIDE2NzogcSAgICAgICAgQklOUFVUICAgICAxMAorICAxNjk6IGggICAgICAgIEJJTkdFVCAgICAgMTAKKyAgMTcxOiBLICAgICAgICBCSU5JTlQxICAgIDUKKyAgMTczOiBlICAgICAgICBBUFBFTkRTICAgIChNQVJLIGF0IDUpCisgIDE3NDogLiAgICBTVE9QCitoaWdoZXN0IHByb3RvY29sIGFtb25nIG9wY29kZXMgPSAyCisiIiIKKworZGVmIGNyZWF0ZV9kYXRhKCk6CisgICAgYyA9IEMoKQorICAgIGMuZm9vID0gMQorICAgIGMuYmFyID0gMgorICAgIHggPSBbMCwgMUwsIDIuMCwgMy4wKzBqXQorICAgICMgQXBwZW5kIHNvbWUgaW50ZWdlciB0ZXN0IGNhc2VzIGF0IGNQaWNrbGUuYydzIGludGVybmFsIHNpemUKKyAgICAjIGN1dG9mZnMuCisgICAgdWludDFtYXggPSAweGZmCisgICAgdWludDJtYXggPSAweGZmZmYKKyAgICBpbnQ0bWF4ID0gMHg3ZmZmZmZmZgorICAgIHguZXh0ZW5kKFsxLCAtMSwKKyAgICAgICAgICAgICAgdWludDFtYXgsIC11aW50MW1heCwgLXVpbnQxbWF4LTEsCisgICAgICAgICAgICAgIHVpbnQybWF4LCAtdWludDJtYXgsIC11aW50Mm1heC0xLAorICAgICAgICAgICAgICAgaW50NG1heCwgIC1pbnQ0bWF4LCAgLWludDRtYXgtMV0pCisgICAgeSA9ICgnYWJjJywgJ2FiYycsIGMsIGMpCisgICAgeC5hcHBlbmQoeSkKKyAgICB4LmFwcGVuZCh5KQorICAgIHguYXBwZW5kKDUpCisgICAgcmV0dXJuIHgKKworY2xhc3MgQWJzdHJhY3RQaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBTdWJjbGFzcyBtdXN0IGRlZmluZSBzZWxmLmR1bXBzLCBzZWxmLmxvYWRzLCBzZWxmLmVycm9yLgorCisgICAgX3Rlc3RkYXRhID0gY3JlYXRlX2RhdGEoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9taXNjKHNlbGYpOgorICAgICAgICAjIHRlc3QgdmFyaW91cyBkYXRhdHlwZXMgbm90IHRlc3RlZCBieSB0ZXN0ZGF0YQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgeCA9IG15aW50KDQpCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisKKyAgICAgICAgICAgIHggPSAoMSwgKCkpCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisKKyAgICAgICAgICAgIHggPSBpbml0YXJnKDEsIHgpCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisKKyAgICAgICAgIyBYWFggdGVzdCBfX3JlZHVjZV9fIHByb3RvY29sPworCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IHNlbGYuX3Rlc3RkYXRhCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhleHBlY3RlZCwgcHJvdG8pCisgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICBkZWYgdGVzdF9sb2FkX2Zyb21fY2FubmVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl90ZXN0ZGF0YQorICAgICAgICBmb3IgY2FubmVkIGluIERBVEEwLCBEQVRBMSwgREFUQTI6CisgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKGNhbm5lZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgICMgVGhlcmUgYXJlIGdyYXR1aXRvdXMgZGlmZmVyZW5jZXMgYmV0d2VlbiBwaWNrbGVzIHByb2R1Y2VkIGJ5CisgICAgIyBwaWNrbGUgYW5kIGNQaWNrbGUsIGxhcmdlbHkgYmVjYXVzZSBjUGlja2xlIHN0YXJ0cyBQVVQgaW5kaWNlcyBhdAorICAgICMgMSBhbmQgcGlja2xlIHN0YXJ0cyB0aGVtIGF0IDAuICBTZWUgWFhYIGNvbW1lbnQgaW4gY1BpY2tsZSdzIHB1dDIoKSAtLQorICAgICMgdGhlcmUncyBhIGNvbW1lbnQgd2l0aCBhbiBleGNsYW1hdGlvbiBwb2ludCB0aGVyZSB3aG9zZSBtZWFuaW5nCisgICAgIyBpcyBhIG15c3RlcnkuICBjUGlja2xlIGFsc28gc3VwcHJlc3NlcyBQVVQgZm9yIG9iamVjdHMgd2l0aCBhIHJlZmNvdW50CisgICAgIyBvZiAxLgorICAgIGRlZiBkb250X3Rlc3RfZGlzYXNzZW1ibHkoc2VsZik6CisgICAgICAgIGZyb20gcGlja2xldG9vbHMgaW1wb3J0IGRpcworCisgICAgICAgIGZvciBwcm90bywgZXhwZWN0ZWQgaW4gKDAsIERBVEEwX0RJUyksICgxLCBEQVRBMV9ESVMpOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoc2VsZi5fdGVzdGRhdGEsIHByb3RvKQorICAgICAgICAgICAgZmlsZWxpa2UgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgZGlzKHMsIG91dD1maWxlbGlrZSkKKyAgICAgICAgICAgIGdvdCA9IGZpbGVsaWtlLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9saXN0KHNlbGYpOgorICAgICAgICBsID0gW10KKyAgICAgICAgbC5hcHBlbmQobCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGwsIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeFswXSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV90dXBsZShzZWxmKToKKyAgICAgICAgdCA9IChbXSwpCisgICAgICAgIHRbMF0uYXBwZW5kKHQpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHhbMF0pLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeFswXVswXSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9kaWN0KHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgZFsxXSA9IGQKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGQsIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5rZXlzKCksIFsxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzFdIGlzIHgpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfaW5zdChzZWxmKToKKyAgICAgICAgaSA9IEMoKQorICAgICAgICBpLmF0dHIgPSBpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhpLCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcih4KSwgZGlyKGkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4LmF0dHIsIHgpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfbXVsdGkoc2VsZik6CisgICAgICAgIGwgPSBbXQorICAgICAgICBkID0gezE6bH0KKyAgICAgICAgaSA9IEMoKQorICAgICAgICBpLmF0dHIgPSBkCisgICAgICAgIGwuYXBwZW5kKGkpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhsLCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKHhbMF0pLCBkaXIoaSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbMF0uYXR0ci5rZXlzKCksIFsxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdLmF0dHJbMV0gaXMgeCkKKworICAgIGRlZiB0ZXN0X2dhcnlwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmVycm9yLCBzZWxmLmxvYWRzLCAnZ2FyeXAnKQorCisgICAgZGVmIHRlc3RfaW5zZWN1cmVfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgaW5zZWN1cmUgPSBbImFiYyIsICIyICsgMiIsICMgbm90IHF1b3RlZAorICAgICAgICAgICAgICAgICAgICAjIidhYmMnICsgJ2RlZiciLCAjIG5vdCBhIHNpbmdsZSBxdW90ZWQgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICInYWJjIiwgIyBxdW90ZSBpcyBub3QgY2xvc2VkCisgICAgICAgICAgICAgICAgICAgICInYWJjXCIiLCAjIG9wZW4gcXVvdGUgYW5kIGNsb3NlIHF1b3RlIGRvbid0IG1hdGNoCisgICAgICAgICAgICAgICAgICAgICInYWJjJyAgID8iLCAjIGp1bmsgYWZ0ZXIgY2xvc2UgcXVvdGUKKyAgICAgICAgICAgICAgICAgICAgIidcXCciLCAjIHRyYWlsaW5nIGJhY2tzbGFzaAorICAgICAgICAgICAgICAgICAgICAiJyIsICAgICMgaXNzdWUgIzE3NzEwCisgICAgICAgICAgICAgICAgICAgICInICIsICAgIyBpc3N1ZSAjMTc3MTAKKyAgICAgICAgICAgICAgICAgICAgIyBzb21lIHRlc3RzIG9mIHRoZSBxdW90aW5nIHJ1bGVzCisgICAgICAgICAgICAgICAgICAgICMiJ2FiY1wiXCcnIiwKKyAgICAgICAgICAgICAgICAgICAgIyInXFxcXGFcJ1wnXCdcXFwnXFxcXFwnJyIsCisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHMgaW4gaW5zZWN1cmU6CisgICAgICAgICAgICBidWYgPSAiUyIgKyBzICsgIlwwMTJwMFwwMTIuIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgYnVmKQorCisgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAgICAgZW5kY2FzZXMgPSBbdScnLCB1JzxcXHU+JywgdSc8XFxcdTEyMzQ+JywgdSc8XG4+JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUnPFxcPicsIHUnPFxcXFUwMDAxMjM0NT4nXQorICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgICAgICBmb3IgdSBpbiBlbmRjYXNlczoKKyAgICAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHModSwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIHUyID0gc2VsZi5sb2FkcyhwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCB1KQorCisgICAgICAgIGRlZiB0ZXN0X3VuaWNvZGVfaGlnaF9wbGFuZShzZWxmKToKKyAgICAgICAgICAgIHQgPSB1J1xVMDAwMTIzNDUnCisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQorICAgICAgICAgICAgICAgIHQyID0gc2VsZi5sb2FkcyhwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBuID0gc3lzLm1heGludAorICAgICAgICAgICAgd2hpbGUgbjoKKyAgICAgICAgICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gKC1uLCBuKToKKyAgICAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZXhwZWN0ZWQsIHByb3RvKQorICAgICAgICAgICAgICAgICAgICBuMiA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgbjIpCisgICAgICAgICAgICAgICAgbiA9IG4gPj4gMQorCisgICAgZGVmIHRlc3RfbWF4aW50NjQoc2VsZik6CisgICAgICAgIG1heGludDY0ID0gKDFMIDw8IDYzKSAtIDEKKyAgICAgICAgZGF0YSA9ICdJJyArIHN0cihtYXhpbnQ2NCkgKyAnXG4uJworICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBtYXhpbnQ2NCkKKworICAgICAgICAjIFRyeSB0b28gd2l0aCBhIGJvZ3VzIGxpdGVyYWwuCisgICAgICAgIGRhdGEgPSAnSScgKyBzdHIobWF4aW50NjQpICsgJ0pVTktcbi4nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9hZHMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgIyAyNTYgYnl0ZXMgaXMgd2hlcmUgTE9ORzQgYmVnaW5zLgorICAgICAgICAgICAgZm9yIG5iaXRzIGluIDEsIDgsIDgqMjU0LCA4KjI1NSwgOCoyNTYsIDgqMjU3OgorICAgICAgICAgICAgICAgIG5iYXNlID0gMUwgPDwgbmJpdHMKKyAgICAgICAgICAgICAgICBmb3IgbnBvcyBpbiBuYmFzZS0xLCBuYmFzZSwgbmJhc2UrMToKKyAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gbnBvcywgLW5wb3M6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKG4sIHByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGdvdCkKKyAgICAgICAgIyBUcnkgYSBtb25zdGVyLiAgVGhpcyBpcyBxdWFkcmF0aWMtdGltZSBpbiBwcm90b3MgMCAmIDEsIHNvIGRvbid0CisgICAgICAgICMgYm90aGVyIHdpdGggdGhvc2UuCisgICAgICAgIG5iYXNlID0gbG9uZygiZGVhZGJlZWZmZWVkZmFjZSIsIDE2KQorICAgICAgICBuYmFzZSArPSBuYmFzZSA8PCAxMDAwMDAwCisgICAgICAgIGZvciBuIGluIG5iYXNlLCAtbmJhc2U6CisgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhuLCAyKQorICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBnb3QpCisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgdGVzdF92YWx1ZXMgPSBbMC4wLCA0Ljk0ZS0zMjQsIDFlLTMxMCwgN2UtMzA4LCA2LjYyNmUtMzQsIDAuMSwgMC41LAorICAgICAgICAgICAgICAgICAgICAgICAzLjE0LCAyNjMuNDQ1ODIwNjIzNzQwNTMsIDYuMDIyZTIzLCAxZTMwXQorICAgICAgICB0ZXN0X3ZhbHVlcyA9IHRlc3RfdmFsdWVzICsgWy14IGZvciB4IGluIHRlc3RfdmFsdWVzXQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgZm9yIHZhbHVlIGluIHRlc3RfdmFsdWVzOgorICAgICAgICAgICAgICAgIHBpY2tsZSA9IHNlbGYuZHVtcHModmFsdWUsIHByb3RvKQorICAgICAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocGlja2xlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIGdvdCkKKworICAgIEBydW5fd2l0aF9sb2NhbGUoJ0xDX0FMTCcsICdkZV9ERScsICdmcl9GUicpCisgICAgZGVmIHRlc3RfZmxvYXRfZm9ybWF0KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IGZsb2F0cyBhcmUgZm9ybWF0dGVkIGxvY2FsZSBpbmRlcGVuZGVudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoMS4yKVswOjNdLCAnRjEuJykKKworICAgIGRlZiB0ZXN0X3JlZHVjZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZ2V0aW5pdGFyZ3Moc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X21ldGFjbGFzcyhzZWxmKToKKyAgICAgICAgYSA9IHVzZV9tZXRhY2xhc3MoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoYSwgcHJvdG8pCisgICAgICAgICAgICBiID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fY2xhc3NfXywgYi5fX2NsYXNzX18pCisKKyAgICBkZWYgdGVzdF9keW5hbWljX2NsYXNzKHNlbGYpOgorICAgICAgICBhID0gY3JlYXRlX2R5bmFtaWNfY2xhc3MoIm15X2R5bmFtaWNfY2xhc3MiLCAob2JqZWN0LCkpCisgICAgICAgIGNvcHlfcmVnLnBpY2tsZShwaWNrbGluZ19tZXRhY2xhc3MsIHBpY2tsaW5nX21ldGFjbGFzcy5fX3JlZHVjZV9fKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoYSwgcHJvdG8pCisgICAgICAgICAgICBiID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorCisgICAgZGVmIHRlc3Rfc3RydWN0c2VxKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBpbXBvcnQgb3MKKworICAgICAgICB0ID0gdGltZS5sb2NhbHRpbWUoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHModCwgcHJvdG8pCisgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB1KQorICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgInN0YXQiKToKKyAgICAgICAgICAgICAgICB0ID0gb3Muc3RhdChvcy5jdXJkaXIpCisgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHModCwgcHJvdG8pCisgICAgICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHUpCisgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3RhdHZmcyIpOgorICAgICAgICAgICAgICAgIHQgPSBvcy5zdGF0dmZzKG9zLmN1cmRpcikKKyAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKKyAgICAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKworICAgICMgVGVzdHMgZm9yIHByb3RvY29sIDIKKworICAgIGRlZiB0ZXN0X3Byb3RvKHNlbGYpOgorICAgICAgICBidWlsZF9ub25lID0gcGlja2xlLk5PTkUgKyBwaWNrbGUuU1RPUAorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBidWlsZF9ub25lCisgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcGlja2xlLlBST1RPICsgY2hyKHByb3RvKSArIGV4cGVjdGVkCisgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhOb25lLCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgZXhwZWN0ZWQpCisKKyAgICAgICAgb29iID0gcHJvdG9jb2xzWy0xXSArIDEgICAgICMgYSBmdXR1cmUgcHJvdG9jb2wKKyAgICAgICAgYmFkcGlja2xlID0gcGlja2xlLlBST1RPICsgY2hyKG9vYikgKyBidWlsZF9ub25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubG9hZHMoYmFkcGlja2xlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZGV0YWlsOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihkZXRhaWwpLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBwaWNrbGUgcHJvdG9jb2wiKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgYmFkIHByb3RvY29sIG51bWJlciB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgIGRlZiB0ZXN0X2xvbmcxKHNlbGYpOgorICAgICAgICB4ID0gMTIzNDU2Nzg5MTAxMTEyMTMxNDE1MTYxNzg5MjBMCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLkxPTkcxLCBzKSwgcHJvdG8gPj0gMikKKworICAgIGRlZiB0ZXN0X2xvbmc0KHNlbGYpOgorICAgICAgICB4ID0gMTIzNDU2Nzg5MTAxMTEyMTMxNDE1MTYxNzg5MjBMIDw8ICgyNTYqOCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORzQsIHMpLCBwcm90byA+PSAyKQorCisgICAgZGVmIHRlc3Rfc2hvcnRfdHVwbGVzKHNlbGYpOgorICAgICAgICAjIE1hcCAocHJvdG8sIGxlbih0dXBsZSkpIHRvIGV4cGVjdGVkIG9wY29kZS4KKyAgICAgICAgZXhwZWN0ZWRfb3Bjb2RlID0geygwLCAwKTogcGlja2xlLlRVUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIDEpOiBwaWNrbGUuVFVQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgMik6IHBpY2tsZS5UVVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCAzKTogcGlja2xlLlRVUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIDQpOiBwaWNrbGUuVFVQTEUsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAwKTogcGlja2xlLkVNUFRZX1RVUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDEpOiBwaWNrbGUuVFVQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgMik6IHBpY2tsZS5UVVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAzKTogcGlja2xlLlRVUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDQpOiBwaWNrbGUuVFVQTEUsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAwKTogcGlja2xlLkVNUFRZX1RVUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsIDEpOiBwaWNrbGUuVFVQTEUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsIDIpOiBwaWNrbGUuVFVQTEUyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsIDMpOiBwaWNrbGUuVFVQTEUzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsIDQpOiBwaWNrbGUuVFVQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgYSA9ICgpCisgICAgICAgIGIgPSAoMSwpCisgICAgICAgIGMgPSAoMSwgMikKKyAgICAgICAgZCA9ICgxLCAyLCAzKQorICAgICAgICBlID0gKDEsIDIsIDMsIDQpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBmb3IgeCBpbiBhLCBiLCBjLCBkLCBlOgorICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5LCAocHJvdG8sIHgsIHMsIHkpKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW3Byb3RvLCBsZW4oeCldCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZXRvbnMoc2VsZik6CisgICAgICAgICMgTWFwIChwcm90bywgc2luZ2xldG9uKSB0byBleHBlY3RlZCBvcGNvZGUuCisgICAgICAgIGV4cGVjdGVkX29wY29kZSA9IHsoMCwgTm9uZSk6IHBpY2tsZS5OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIE5vbmUpOiBwaWNrbGUuTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCBOb25lKTogcGlja2xlLk5PTkUsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBUcnVlKTogcGlja2xlLklOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCBUcnVlKTogcGlja2xlLklOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCBUcnVlKTogcGlja2xlLk5FV1RSVUUsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBGYWxzZSk6IHBpY2tsZS5JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgRmFsc2UpOiBwaWNrbGUuSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsIEZhbHNlKTogcGlja2xlLk5FV0ZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBmb3IgeCBpbiBOb25lLCBGYWxzZSwgVHJ1ZToKKyAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHksIChwcm90bywgeCwgcywgeSkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbcHJvdG8sIHhdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X25ld29ial90dXBsZShzZWxmKToKKyAgICAgICAgeCA9IE15VHVwbGUoWzEsIDIsIDNdKQorICAgICAgICB4LmZvbyA9IDQyCisgICAgICAgIHguYmFyID0gImhlbGxvIgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSh4KSwgdHVwbGUoeSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisKKyAgICBkZWYgdGVzdF9uZXdvYmpfbGlzdChzZWxmKToKKyAgICAgICAgeCA9IE15TGlzdChbMSwgMiwgM10pCisgICAgICAgIHguZm9vID0gNDIKKyAgICAgICAgeC5iYXIgPSAiaGVsbG8iCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisKKyAgICBkZWYgdGVzdF9uZXdvYmpfZ2VuZXJpYyhzZWxmKToKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGZvciBDIGluIG15Y2xhc3NlczoKKyAgICAgICAgICAgICAgICBCID0gQy5fX2Jhc2VfXworICAgICAgICAgICAgICAgIHggPSBDKEMuc2FtcGxlKQorICAgICAgICAgICAgICAgIHguZm9vID0gNDIKKyAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgICAgIGRldGFpbCA9IChwcm90bywgQywgQiwgeCwgeSwgdHlwZSh5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIoeCksIEIoeSksIGRldGFpbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18sIGRldGFpbCkKKworICAgICMgUmVnaXN0ZXIgYSB0eXBlIHdpdGggY29weV9yZWcsIHdpdGggZXh0ZW5zaW9uIGNvZGUgZXh0Y29kZS4gIFBpY2tsZQorICAgICMgYW4gb2JqZWN0IG9mIHRoYXQgdHlwZS4gIENoZWNrIHRoYXQgdGhlIHJlc3VsdGluZyBwaWNrbGUgdXNlcyBvcGNvZGUKKyAgICAjIChFWFRbMTI0XSkgdW5kZXIgcHJvdG8gMiwgYW5kIG5vdCBpbiBwcm90byAxLgorCisgICAgZGVmIHByb2R1Y2VfZ2xvYmFsX2V4dChzZWxmLCBleHRjb2RlLCBvcGNvZGUpOgorICAgICAgICBlID0gRXh0ZW5zaW9uU2F2ZXIoZXh0Y29kZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29weV9yZWcuYWRkX2V4dGVuc2lvbihfX25hbWVfXywgIk15TGlzdCIsIGV4dGNvZGUpCisgICAgICAgICAgICB4ID0gTXlMaXN0KFsxLCAyLCAzXSkKKyAgICAgICAgICAgIHguZm9vID0gNDIKKyAgICAgICAgICAgIHguYmFyID0gImhlbGxvIgorCisgICAgICAgICAgICAjIER1bXAgdXNpbmcgcHJvdG9jb2wgMSBmb3IgY29tcGFyaXNvbi4KKyAgICAgICAgICAgIHMxID0gc2VsZi5kdW1wcyh4LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihfX25hbWVfXywgczEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJNeUxpc3QiLCBzMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMxKSwgRmFsc2UpCisKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorCisgICAgICAgICAgICAjIER1bXAgdXNpbmcgcHJvdG9jb2wgMiBmb3IgdGVzdC4KKyAgICAgICAgICAgIHMyID0gc2VsZi5kdW1wcyh4LCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihfX25hbWVfXywgczIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJNeUxpc3QiLCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMyKSwgVHJ1ZSkKKworICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMoczIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGUucmVzdG9yZSgpCisKKyAgICBkZWYgdGVzdF9nbG9iYWxfZXh0MShzZWxmKToKKyAgICAgICAgc2VsZi5wcm9kdWNlX2dsb2JhbF9leHQoMHgwMDAwMDAwMSwgcGlja2xlLkVYVDEpICAjIHNtYWxsZXN0IEVYVDEgY29kZQorICAgICAgICBzZWxmLnByb2R1Y2VfZ2xvYmFsX2V4dCgweDAwMDAwMGZmLCBwaWNrbGUuRVhUMSkgICMgbGFyZ2VzdCBFWFQxIGNvZGUKKworICAgIGRlZiB0ZXN0X2dsb2JhbF9leHQyKHNlbGYpOgorICAgICAgICBzZWxmLnByb2R1Y2VfZ2xvYmFsX2V4dCgweDAwMDAwMTAwLCBwaWNrbGUuRVhUMikgICMgc21hbGxlc3QgRVhUMiBjb2RlCisgICAgICAgIHNlbGYucHJvZHVjZV9nbG9iYWxfZXh0KDB4MDAwMGZmZmYsIHBpY2tsZS5FWFQyKSAgIyBsYXJnZXN0IEVYVDIgY29kZQorICAgICAgICBzZWxmLnByb2R1Y2VfZ2xvYmFsX2V4dCgweDAwMDBhYmNkLCBwaWNrbGUuRVhUMikgICMgY2hlY2sgZW5kaWFubmVzcworCisgICAgZGVmIHRlc3RfZ2xvYmFsX2V4dDQoc2VsZik6CisgICAgICAgIHNlbGYucHJvZHVjZV9nbG9iYWxfZXh0KDB4MDAwMTAwMDAsIHBpY2tsZS5FWFQ0KSAgIyBzbWFsbGVzdCBFWFQ0IGNvZGUKKyAgICAgICAgc2VsZi5wcm9kdWNlX2dsb2JhbF9leHQoMHg3ZmZmZmZmZiwgcGlja2xlLkVYVDQpICAjIGxhcmdlc3QgRVhUNCBjb2RlCisgICAgICAgIHNlbGYucHJvZHVjZV9nbG9iYWxfZXh0KDB4MTJhYmNkZWYsIHBpY2tsZS5FWFQ0KSAgIyBjaGVjayBlbmRpYW5uZXNzCisKKyAgICBkZWYgdGVzdF9saXN0X2NodW5raW5nKHNlbGYpOgorICAgICAgICBuID0gMTAgICMgdG9vIHNtYWxsIHRvIGNodW5rCisgICAgICAgIHggPSByYW5nZShuKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgbnVtX2FwcGVuZHMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFQUEVORFMsIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hcHBlbmRzLCBwcm90byA+IDApCisKKyAgICAgICAgbiA9IDI1MDAgICMgZXhwZWN0IGF0IGxlYXN0IHR3byBjaHVua3Mgd2hlbiBwcm90byA+IDAKKyAgICAgICAgeCA9IHJhbmdlKG4pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBudW1fYXBwZW5kcyA9IGNvdW50X29wY29kZShwaWNrbGUuQVBQRU5EUywgcykKKyAgICAgICAgICAgIGlmIHByb3RvID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYXBwZW5kcywgMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bV9hcHBlbmRzID49IDIpCisKKyAgICBkZWYgdGVzdF9kaWN0X2NodW5raW5nKHNlbGYpOgorICAgICAgICBuID0gMTAgICMgdG9vIHNtYWxsIHRvIGNodW5rCisgICAgICAgIHggPSBkaWN0LmZyb21rZXlzKHJhbmdlKG4pKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgbnVtX3NldGl0ZW1zID0gY291bnRfb3Bjb2RlKHBpY2tsZS5TRVRJVEVNUywgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX3NldGl0ZW1zLCBwcm90byA+IDApCisKKyAgICAgICAgbiA9IDI1MDAgICMgZXhwZWN0IGF0IGxlYXN0IHR3byBjaHVua3Mgd2hlbiBwcm90byA+IDAKKyAgICAgICAgeCA9IGRpY3QuZnJvbWtleXMocmFuZ2UobikpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBudW1fc2V0aXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLlNFVElURU1TLCBzKQorICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9zZXRpdGVtcywgMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bV9zZXRpdGVtcyA+PSAyKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX25ld29iaihzZWxmKToKKyAgICAgICAgeCA9IG9iamVjdC5fX25ld19fKFNpbXBsZU5ld09iaikgICMgYXZvaWQgX19pbml0X18KKyAgICAgICAgeC5hYmMgPSA2NjYKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkosIHMpLCBwcm90byA+PSAyKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykgICAjIHdpbGwgcmFpc2UgVHlwZUVycm9yIGlmIF9faW5pdF9fIGNhbGxlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmFiYywgNjY2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorCisgICAgZGVmIHRlc3RfbmV3b2JqX2xpc3Rfc2xvdHMoc2VsZik6CisgICAgICAgIHggPSBTbG90TGlzdChbMSwgMiwgM10pCisgICAgICAgIHguZm9vID0gNDIKKyAgICAgICAgeC5iYXIgPSAiaGVsbG8iCisgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIDIpCisgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vLCB5LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmJhciwgeS5iYXIpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Vfb3ZlcnJpZGVzX2RlZmF1bHRfcmVkdWNlX2V4KHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgeCA9IFJFWF9vbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9yZWR1Y2VfY2FsbGVkLCAwKQorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX3JlZHVjZV9jYWxsZWQsIDEpCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9yZWR1Y2VfY2FsbGVkLCAwKQorCisgICAgZGVmIHRlc3RfcmVkdWNlX2V4X2NhbGxlZChzZWxmKToKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHggPSBSRVhfdHdvKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fcHJvdG8sIE5vbmUpCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fcHJvdG8sIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fcHJvdG8sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2VfZXhfb3ZlcnJpZGVzX3JlZHVjZShzZWxmKToKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHggPSBSRVhfdGhyZWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9wcm90bywgTm9uZSkKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9wcm90bywgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9wcm90bywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZV9leF9jYWxsc19iYXNlKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgeCA9IFJFWF9mb3VyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fcHJvdG8sIE5vbmUpCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fcHJvdG8sIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fcHJvdG8sIHByb3RvKQorCisgICAgZGVmIHRlc3RfcmVkdWNlX2NhbGxzX2Jhc2Uoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB4ID0gUkVYX2ZpdmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9yZWR1Y2VfY2FsbGVkLCAwKQorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX3JlZHVjZV9jYWxsZWQsIDEpCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9yZWR1Y2VfY2FsbGVkLCAxKQorCisgICAgZGVmIHRlc3RfcmVkdWNlX2JhZF9pdGVyYXRvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZTQxNzY6IGNyYXNoIHdoZW4gNHRoIGFuZCA1dGggaXRlbXMgb2YgX19yZWR1Y2VfXygpCisgICAgICAgICMgYXJlIG5vdCBpdGVyYXRvcnMKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyA0dGggaXRlbSBpcyBub3QgYW4gaXRlcmF0b3IKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdCwgKCksIE5vbmUsIFtdLCBOb25lCisgICAgICAgIGNsYXNzIEQob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgNXRoIGl0ZW0gaXMgbm90IGFuIGl0ZXJhdG9yCisgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QsICgpLCBOb25lLCBOb25lLCBbXQorCisgICAgICAgICMgUHJvdG9jb2wgMCBpcyBsZXNzIHN0cmljdCBhbmQgYWxzbyBhY2NlcHQgaXRlcmFibGVzLgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoQygpLCBwcm90bykKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHBpY2tsZS5QaWNrbGVFcnJvciwgY1BpY2tsZS5QaWNrbGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoRCgpLCBwcm90bykKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHBpY2tsZS5QaWNrbGVFcnJvciwgY1BpY2tsZS5QaWNrbGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfbWFueV9wdXRzX2FuZF9nZXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgY29ycmVjdGx5IGRlYWwgd2l0aCBsb3RzIG9mCisgICAgICAgICMgcHV0cy9nZXRzLgorICAgICAgICBrZXlzID0gKCJhYWEiICsgc3RyKGkpIGZvciBpIGluIHhyYW5nZSgxMDApKQorICAgICAgICBsYXJnZV9kaWN0ID0gZGljdCgoaywgWzQsIDUsIDZdKSBmb3IgayBpbiBrZXlzKQorICAgICAgICBvYmogPSBbZGljdChsYXJnZV9kaWN0KSwgZGljdChsYXJnZV9kaWN0KSwgZGljdChsYXJnZV9kaWN0KV0KKworICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgZHVtcGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZCwgb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHByb3RvY29sICVkOiAlciAhPSAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocHJvdG8sIG9iaiwgbG9hZGVkKSkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9uYW1lX2ludGVybmluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYXR0cmlidXRlIG5hbWVzIG9mIHBpY2tsZWQgb2JqZWN0cyBhcmUgaW50ZXJuZWQgd2hlbgorICAgICAgICAjIHVucGlja2xpbmcuCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB4ID0gQygpCisgICAgICAgICAgICB4LmZvbyA9IDQyCisgICAgICAgICAgICB4LmJhciA9ICJoZWxsbyIKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHhfa2V5cyA9IHNvcnRlZCh4Ll9fZGljdF9fKQorICAgICAgICAgICAgeV9rZXlzID0gc29ydGVkKHkuX19kaWN0X18pCisgICAgICAgICAgICBmb3IgeF9rZXksIHlfa2V5IGluIHppcCh4X2tleXMsIHlfa2V5cyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4X2tleSwgeV9rZXkpCisKKworIyBUZXN0IGNsYXNzZXMgZm9yIHJlZHVjZV9leAorCitjbGFzcyBSRVhfb25lKG9iamVjdCk6CisgICAgX3JlZHVjZV9jYWxsZWQgPSAwCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHNlbGYuX3JlZHVjZV9jYWxsZWQgPSAxCisgICAgICAgIHJldHVybiBSRVhfb25lLCAoKQorICAgICMgTm8gX19yZWR1Y2VfZXhfXyBoZXJlLCBidXQgaW5oZXJpdGluZyBpdCBmcm9tIG9iamVjdAorCitjbGFzcyBSRVhfdHdvKG9iamVjdCk6CisgICAgX3Byb3RvID0gTm9uZQorICAgIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHByb3RvKToKKyAgICAgICAgc2VsZi5fcHJvdG8gPSBwcm90bworICAgICAgICByZXR1cm4gUkVYX3R3bywgKCkKKyAgICAjIE5vIF9fcmVkdWNlX18gaGVyZSwgYnV0IGluaGVyaXRpbmcgaXQgZnJvbSBvYmplY3QKKworY2xhc3MgUkVYX3RocmVlKG9iamVjdCk6CisgICAgX3Byb3RvID0gTm9uZQorICAgIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHByb3RvKToKKyAgICAgICAgc2VsZi5fcHJvdG8gPSBwcm90bworICAgICAgICByZXR1cm4gUkVYX3R3bywgKCkKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgIlRoaXMgX19yZWR1Y2VfXyBzaG91bGRuJ3QgYmUgY2FsbGVkIgorCitjbGFzcyBSRVhfZm91cihvYmplY3QpOgorICAgIF9wcm90byA9IE5vbmUKKyAgICBkZWYgX19yZWR1Y2VfZXhfXyhzZWxmLCBwcm90byk6CisgICAgICAgIHNlbGYuX3Byb3RvID0gcHJvdG8KKyAgICAgICAgcmV0dXJuIG9iamVjdC5fX3JlZHVjZV9leF9fKHNlbGYsIHByb3RvKQorICAgICMgQ2FsbGluZyBiYXNlIGNsYXNzIG1ldGhvZCBzaG91bGQgc3VjY2VlZAorCitjbGFzcyBSRVhfZml2ZShvYmplY3QpOgorICAgIF9yZWR1Y2VfY2FsbGVkID0gMAorICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICBzZWxmLl9yZWR1Y2VfY2FsbGVkID0gMQorICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcmVkdWNlX18oc2VsZikKKyAgICAjIFRoaXMgb25lIHVzZWQgdG8gZmFpbCB3aXRoIGluZmluaXRlIHJlY3Vyc2lvbgorCisjIFRlc3QgY2xhc3NlcyBmb3IgbmV3b2JqCisKK2NsYXNzIE15SW50KGludCk6CisgICAgc2FtcGxlID0gMQorCitjbGFzcyBNeUxvbmcobG9uZyk6CisgICAgc2FtcGxlID0gMUwKKworY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgc2FtcGxlID0gMS4wCisKK2NsYXNzIE15Q29tcGxleChjb21wbGV4KToKKyAgICBzYW1wbGUgPSAxLjAgKyAwLjBqCisKK2NsYXNzIE15U3RyKHN0cik6CisgICAgc2FtcGxlID0gImhlbGxvIgorCitjbGFzcyBNeVVuaWNvZGUodW5pY29kZSk6CisgICAgc2FtcGxlID0gdSJoZWxsbyBcdTEyMzQiCisKK2NsYXNzIE15VHVwbGUodHVwbGUpOgorICAgIHNhbXBsZSA9ICgxLCAyLCAzKQorCitjbGFzcyBNeUxpc3QobGlzdCk6CisgICAgc2FtcGxlID0gWzEsIDIsIDNdCisKK2NsYXNzIE15RGljdChkaWN0KToKKyAgICBzYW1wbGUgPSB7ImEiOiAxLCAiYiI6IDJ9CisKK215Y2xhc3NlcyA9IFtNeUludCwgTXlMb25nLCBNeUZsb2F0LAorICAgICAgICAgICAgIE15Q29tcGxleCwKKyAgICAgICAgICAgICBNeVN0ciwgTXlVbmljb2RlLAorICAgICAgICAgICAgIE15VHVwbGUsIE15TGlzdCwgTXlEaWN0XQorCisKK2NsYXNzIFNsb3RMaXN0KE15TGlzdCk6CisgICAgX19zbG90c19fID0gWyJmb28iXQorCitjbGFzcyBTaW1wbGVOZXdPYmoob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgICMgcmFpc2UgYW4gZXJyb3IsIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGNhbGxlZAorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlNpbXBsZU5ld09iai5fX2luaXRfXygpIGRpZG4ndCBleHBlY3QgdG8gZ2V0IGNhbGxlZCIpCisKK2NsYXNzIEFic3RyYWN0UGlja2xlTW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZHVtcF9jbG9zZWRfZmlsZShzZWxmKToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubW9kdWxlLmR1bXAsIDEyMywgZikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisKKyAgICBkZWYgdGVzdF9sb2FkX2Nsb3NlZF9maWxlKHNlbGYpOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5tb2R1bGUuZHVtcCwgMTIzLCBmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9hbmRfZHVtcF90b19maWxlKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBkYXRhID0gWzEyMywge30sIDEyNF0KKyAgICAgICAgc2VsZi5tb2R1bGUuZHVtcChkYXRhLCBzdHJlYW0pCisgICAgICAgIHN0cmVhbS5zZWVrKDApCisgICAgICAgIHVucGlja2xlZCA9IHNlbGYubW9kdWxlLmxvYWQoc3RyZWFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgZGF0YSkKKworICAgIGRlZiB0ZXN0X2hpZ2hlc3RfcHJvdG9jb2woc2VsZik6CisgICAgICAgICMgT2YgY291cnNlIHRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB3aGVuIEhJR0hFU1RfUFJPVE9DT0wgY2hhbmdlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1vZHVsZS5ISUdIRVNUX1BST1RPQ09MLCAyKQorCisgICAgZGVmIHRlc3RfY2FsbGFwaShzZWxmKToKKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICMgV2l0aCBhbmQgd2l0aG91dCBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICBzZWxmLm1vZHVsZS5kdW1wKDEyMywgZiwgLTEpCisgICAgICAgIHNlbGYubW9kdWxlLmR1bXAoMTIzLCBmaWxlPWYsIHByb3RvY29sPS0xKQorICAgICAgICBzZWxmLm1vZHVsZS5kdW1wcygxMjMsIC0xKQorICAgICAgICBzZWxmLm1vZHVsZS5kdW1wcygxMjMsIHByb3RvY29sPS0xKQorICAgICAgICBzZWxmLm1vZHVsZS5QaWNrbGVyKGYsIC0xKQorICAgICAgICBzZWxmLm1vZHVsZS5QaWNrbGVyKGYsIHByb3RvY29sPS0xKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV9pbnB1dChzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCJYJycuIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIHNlbGYubW9kdWxlLmxvYWQsIHMpCisKKyAgICBkZWYgdGVzdF9yZXN0cmljdGVkKHNlbGYpOgorICAgICAgICAjIGlzc3VlNzEyODogY1BpY2tsZSBmYWlsZWQgaW4gcmVzdHJpY3RlZCBtb2RlCisgICAgICAgIGJ1aWx0aW5zID0ge3NlbGYubW9kdWxlLl9fbmFtZV9fOiBzZWxmLm1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgJ19faW1wb3J0X18nOiBfX2ltcG9ydF9ffQorICAgICAgICBkID0ge30KKyAgICAgICAgdGVzdHN0ciA9ICJkZWYgZigpOiB7MH0uZHVtcHMoMCkiLmZvcm1hdChzZWxmLm1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgZXhlYyB0ZXN0c3RyIGluIHsnX19idWlsdGluc19fJzogYnVpbHRpbnN9LCBkCisgICAgICAgIGRbJ2YnXSgpCisKKyAgICBkZWYgdGVzdF9iYWRfaW5wdXQoc2VsZik6CisgICAgICAgICMgVGVzdCBpc3N1ZTQyOTgKKyAgICAgICAgcyA9ICdceDU4XDBcMFwwXHg1NCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIHNlbGYubW9kdWxlLmxvYWRzLCBzKQorICAgICAgICAjIFRlc3QgaXNzdWU3NDU1CisgICAgICAgIHMgPSAnMCcKKyAgICAgICAgIyBYWFggV2h5IGRvZXNuJ3QgcGlja2xlIHJhaXNlIFVucGlja2xpbmdFcnJvcj8KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEluZGV4RXJyb3IsIGNQaWNrbGUuVW5waWNrbGluZ0Vycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUubG9hZHMsIHMpCisKK2NsYXNzIEFic3RyYWN0UGVyc2lzdGVudFBpY2tsZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIFRoaXMgY2xhc3MgZGVmaW5lcyBwZXJzaXN0ZW50X2lkKCkgYW5kIHBlcnNpc3RlbnRfbG9hZCgpCisgICAgIyBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB0aGUgcGlja2xlci4gIEFsbCBldmVuIGludGVnZXJzCisgICAgIyBhcmUgcGlja2xlZCB1c2luZyBwZXJzaXN0ZW50IGlkcy4KKworICAgIGRlZiBwZXJzaXN0ZW50X2lkKHNlbGYsIG9iamVjdCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqZWN0LCBpbnQpIGFuZCBvYmplY3QgJSAyID09IDA6CisgICAgICAgICAgICBzZWxmLmlkX2NvdW50ICs9IDEKKyAgICAgICAgICAgIHJldHVybiBzdHIob2JqZWN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBwZXJzaXN0ZW50X2xvYWQoc2VsZiwgb2lkKToKKyAgICAgICAgc2VsZi5sb2FkX2NvdW50ICs9IDEKKyAgICAgICAgb2JqZWN0ID0gaW50KG9pZCkKKyAgICAgICAgYXNzZXJ0IG9iamVjdCAlIDIgPT0gMAorICAgICAgICByZXR1cm4gb2JqZWN0CisKKyAgICBkZWYgdGVzdF9wZXJzaXN0ZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5pZF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5sb2FkX2NvdW50ID0gMAorICAgICAgICBMID0gcmFuZ2UoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKEwpKSwgTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlkX2NvdW50LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZF9jb3VudCwgNSkKKworICAgIGRlZiB0ZXN0X2Jpbl9wZXJzaXN0ZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5pZF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5sb2FkX2NvdW50ID0gMAorICAgICAgICBMID0gcmFuZ2UoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKEwsIDEpKSwgTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmlkX2NvdW50LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZF9jb3VudCwgNSkKKworY2xhc3MgQWJzdHJhY3RQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgcGlja2xlcl9jbGFzcyA9IE5vbmUKKyAgICB1bnBpY2tsZXJfY2xhc3MgPSBOb25lCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnBpY2tsZXJfY2xhc3MKKyAgICAgICAgYXNzZXJ0IHNlbGYudW5waWNrbGVyX2NsYXNzCisKKyAgICBkZWYgdGVzdF9jbGVhcl9waWNrbGVyX21lbW8oc2VsZik6CisgICAgICAgICMgVG8gdGVzdCB3aGV0aGVyIGNsZWFyX21lbW8oKSBoYXMgYW55IGVmZmVjdCwgd2UgcGlja2xlIGFuIG9iamVjdCwKKyAgICAgICAgIyB0aGVuIHBpY2tsZSBpdCBhZ2FpbiB3aXRob3V0IGNsZWFyaW5nIHRoZSBtZW1vOyB0aGUgdHdvIHNlcmlhbGl6ZWQKKyAgICAgICAgIyBmb3JtcyBzaG91bGQgYmUgZGlmZmVyZW50LiBJZiB3ZSBjbGVhcl9tZW1vKCkgYW5kIHRoZW4gcGlja2xlIHRoZQorICAgICAgICAjIG9iamVjdCBhZ2FpbiwgdGhlIHRoaXJkIHNlcmlhbGl6ZWQgZm9ybSBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIHRoZQorICAgICAgICAjIGZpcnN0IG9uZSB3ZSBvYnRhaW5lZC4KKyAgICAgICAgZGF0YSA9IFsiYWJjZGVmZyIsICJhYmNkZWZnIiwgNDRdCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYpCisKKyAgICAgICAgcGlja2xlci5kdW1wKGRhdGEpCisgICAgICAgIGZpcnN0X3BpY2tsZWQgPSBmLmdldHZhbHVlKCkKKworICAgICAgICAjIFJlc2V0IFN0cmluZ0lPIG9iamVjdC4KKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGYudHJ1bmNhdGUoKQorCisgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhKQorICAgICAgICBzZWNvbmRfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgICMgUmVzZXQgdGhlIFBpY2tsZXIgYW5kIFN0cmluZ0lPIG9iamVjdHMuCisgICAgICAgIHBpY2tsZXIuY2xlYXJfbWVtbygpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBmLnRydW5jYXRlKCkKKworICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YSkKKyAgICAgICAgdGhpcmRfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZmlyc3RfcGlja2xlZCwgc2Vjb25kX3BpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3RfcGlja2xlZCwgdGhpcmRfcGlja2xlZCkKKworICAgIGRlZiB0ZXN0X3ByaW1pbmdfcGlja2xlcl9tZW1vKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHdlIGNhbiBzZXQgdGhlIFBpY2tsZXIncyBtZW1vIGF0dHJpYnV0ZS4KKyAgICAgICAgZGF0YSA9IFsiYWJjZGVmZyIsICJhYmNkZWZnIiwgNDRdCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYpCisKKyAgICAgICAgcGlja2xlci5kdW1wKGRhdGEpCisgICAgICAgIGZpcnN0X3BpY2tsZWQgPSBmLmdldHZhbHVlKCkKKworICAgICAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgcHJpbWVkID0gc2VsZi5waWNrbGVyX2NsYXNzKGYpCisgICAgICAgIHByaW1lZC5tZW1vID0gcGlja2xlci5tZW1vCisKKyAgICAgICAgcHJpbWVkLmR1bXAoZGF0YSkKKyAgICAgICAgcHJpbWVkX3BpY2tsZWQgPSBmLmdldHZhbHVlKCkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZpcnN0X3BpY2tsZWQsIHByaW1lZF9waWNrbGVkKQorCisgICAgZGVmIHRlc3RfcHJpbWluZ191bnBpY2tsZXJfbWVtbyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCB3ZSBjYW4gc2V0IHRoZSBVbnBpY2tsZXIncyBtZW1vIGF0dHJpYnV0ZS4KKyAgICAgICAgZGF0YSA9IFsiYWJjZGVmZyIsICJhYmNkZWZnIiwgNDRdCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYpCisKKyAgICAgICAgcGlja2xlci5kdW1wKGRhdGEpCisgICAgICAgIGZpcnN0X3BpY2tsZWQgPSBmLmdldHZhbHVlKCkKKworICAgICAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgcHJpbWVkID0gc2VsZi5waWNrbGVyX2NsYXNzKGYpCisgICAgICAgIHByaW1lZC5tZW1vID0gcGlja2xlci5tZW1vCisKKyAgICAgICAgcHJpbWVkLmR1bXAoZGF0YSkKKyAgICAgICAgcHJpbWVkX3BpY2tsZWQgPSBmLmdldHZhbHVlKCkKKworICAgICAgICB1bnBpY2tsZXIgPSBzZWxmLnVucGlja2xlcl9jbGFzcyhjU3RyaW5nSU8uU3RyaW5nSU8oZmlyc3RfcGlja2xlZCkpCisgICAgICAgIHVucGlja2xlZF9kYXRhMSA9IHVucGlja2xlci5sb2FkKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZF9kYXRhMSwgZGF0YSkKKworICAgICAgICBwcmltZWQgPSBzZWxmLnVucGlja2xlcl9jbGFzcyhjU3RyaW5nSU8uU3RyaW5nSU8ocHJpbWVkX3BpY2tsZWQpKQorICAgICAgICBwcmltZWQubWVtbyA9IHVucGlja2xlci5tZW1vCisgICAgICAgIHVucGlja2xlZF9kYXRhMiA9IHByaW1lZC5sb2FkKCkKKworICAgICAgICBwcmltZWQubWVtby5jbGVhcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWRfZGF0YTIsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bnBpY2tsZWRfZGF0YTIgaXMgdW5waWNrbGVkX2RhdGExKQorCisgICAgZGVmIHRlc3RfcmV1c2luZ191bnBpY2tsZXJfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgZGF0YTEgPSBbImFiY2RlZmciLCAiYWJjZGVmZyIsIDQ0XQorICAgICAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmKQorICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YTEpCisgICAgICAgIHBpY2tsZWQxID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgZGF0YTIgPSBbImFiY2RlZmciLCA0NCwgNDRdCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYpCisgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhMikKKyAgICAgICAgcGlja2xlZDIgPSBmLmdldHZhbHVlKCkKKworICAgICAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgZi53cml0ZShwaWNrbGVkMSkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHVucGlja2xlciA9IHNlbGYudW5waWNrbGVyX2NsYXNzKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVyLmxvYWQoKSwgZGF0YTEpCisKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGYudHJ1bmNhdGUoKQorICAgICAgICBmLndyaXRlKHBpY2tsZWQyKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZXIubG9hZCgpLCBkYXRhMikKKworY2xhc3MgQmlnbWVtUGlja2xlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBNZW1vcnkgcmVxdWlyZW1lbnRzOiAxIGJ5dGUgcGVyIGNoYXJhY3RlciBmb3IgaW5wdXQgc3RyaW5ncywgMSBieXRlCisgICAgIyBmb3IgcGlja2xlZCBkYXRhLCAxIGJ5dGUgZm9yIHVucGlja2xlZCBzdHJpbmdzLCAxIGJ5dGUgZm9yIGludGVybmFsCisgICAgIyBidWZmZXIgYW5kIDEgYnl0ZSBvZiBmcmVlIHNwYWNlIGZvciByZXNpemluZyBvZiBpbnRlcm5hbCBidWZmZXIuCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8yRyArIDEwMCpfMU0sIG1lbXVzZT01KQorICAgIGRlZiB0ZXN0X2h1Z2Vfc3RybGlzdChzZWxmLCBzaXplKToKKyAgICAgICAgY2h1bmtzaXplID0gMioqMjAKKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIHdoaWxlIHNpemUgPiBjaHVua3NpemU6CisgICAgICAgICAgICBkYXRhLmFwcGVuZCgneCcgKiBjaHVua3NpemUpCisgICAgICAgICAgICBzaXplIC09IGNodW5rc2l6ZQorICAgICAgICAgICAgY2h1bmtzaXplICs9IDEKKyAgICAgICAgZGF0YS5hcHBlbmQoJ3knICogc2l6ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoZGF0YSwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIGRhdGEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGF0YSA9IE5vbmUKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9wcm9maWxlZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9wcm9maWxlZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWQyYzgzCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Byb2ZpbGVlLnB5CkBAIC0wLDAgKzEsMTE1IEBACisiIiIKK0lucHV0IGZvciB0ZXN0X3Byb2ZpbGUucHkgYW5kIHRlc3RfY3Byb2ZpbGUucHkuCisKK0lNUE9SVEFOVDogVGhpcyBzdHVmZiBpcyB0b3VjaHkuIElmIHlvdSBtb2RpZnkgYW55dGhpbmcgYWJvdmUgdGhlCit0ZXN0IGNsYXNzIHlvdSdsbCBoYXZlIHRvIHJlZ2VuZXJhdGUgdGhlIHN0YXRzIGJ5IHJ1bm5pbmcgdGhlIHR3bwordGVzdCBmaWxlcy4KKworKkFMTCogTlVNQkVSUyBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0IGFyZSByZWxldmFudC4gIElmIHlvdSBjaGFuZ2UKK3RoZSBmb3JtYXR0aW5nIG9mIHBzdGF0cywgcGxlYXNlIGRvbid0IGp1c3QgcmVnZW5lcmF0ZSB0aGUgZXhwZWN0ZWQKK291dHB1dCB3aXRob3V0IGNoZWNraW5nIHZlcnkgY2FyZWZ1bGx5IHRoYXQgbm90IGEgc2luZ2xlIG51bWJlciBoYXMKK2NoYW5nZWQuCisiIiIKKworaW1wb3J0IHN5cworCisjIEluIG9yZGVyIHRvIGhhdmUgcmVwcm9kdWNpYmxlIHRpbWUsIHdlIHNpbXVsYXRlIGEgdGltZXIgaW4gdGhlIGdsb2JhbAorIyB2YXJpYWJsZSAnVElDS1MnLCB3aGljaCByZXByZXNlbnRzIHNpbXVsYXRlZCB0aW1lIGluIG1pbGxpc2Vjb25kcy4KKyMgKFdlIGNhbid0IHVzZSBhIGhlbHBlciBmdW5jdGlvbiBpbmNyZW1lbnQgdGhlIHRpbWVyIHNpbmNlIGl0IHdvdWxkIGJlCisjIGluY2x1ZGVkIGluIHRoZSBwcm9maWxlIGFuZCB3b3VsZCBhcHBlYXIgdG8gY29uc3VtZSBhbGwgdGhlIHRpbWUuKQorVElDS1MgPSA0MjAwMAorCitkZWYgdGltZXIoKToKKyAgICByZXR1cm4gVElDS1MKKworZGVmIHRlc3RmdW5jKCk6CisgICAgIyAxIGNhbGwKKyAgICAjIDEwMDAgdGlja3MgdG90YWw6IDI3MCB0aWNrcyBsb2NhbCwgNzMwIHRpY2tzIGluIHN1YmZ1bmN0aW9ucworICAgIGdsb2JhbCBUSUNLUworICAgIFRJQ0tTICs9IDk5CisgICAgaGVscGVyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAzMDAKKyAgICBoZWxwZXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDMwMAorICAgIFRJQ0tTICs9IDE3MQorICAgIGZhY3RvcmlhbCgxNCkgICAgICAgICAgICAgICAgICAgICAgICMgMTMwCisKK2RlZiBmYWN0b3JpYWwobik6CisgICAgIyAyMyBjYWxscyB0b3RhbAorICAgICMgMTcwIHRpY2tzIHRvdGFsLCAxNTAgdGlja3MgbG9jYWwKKyAgICAjIDMgcHJpbWl0aXZlIGNhbGxzLCAxMzAsIDIwIGFuZCAyMCB0aWNrcyB0b3RhbAorICAgICMgaW5jbHVkaW5nIDExNiwgMTcsIDE3IHRpY2tzIGxvY2FsCisgICAgZ2xvYmFsIFRJQ0tTCisgICAgaWYgbiA+IDA6CisgICAgICAgIFRJQ0tTICs9IG4KKyAgICAgICAgcmV0dXJuIG11bChuLCBmYWN0b3JpYWwobi0xKSkKKyAgICBlbHNlOgorICAgICAgICBUSUNLUyArPSAxMQorICAgICAgICByZXR1cm4gMQorCitkZWYgbXVsKGEsIGIpOgorICAgICMgMjAgY2FsbHMKKyAgICAjIDEgdGljaywgbG9jYWwKKyAgICBnbG9iYWwgVElDS1MKKyAgICBUSUNLUyArPSAxCisgICAgcmV0dXJuIGEgKiBiCisKK2RlZiBoZWxwZXIoKToKKyAgICAjIDIgY2FsbHMKKyAgICAjIDMwMCB0aWNrcyB0b3RhbDogMjAgdGlja3MgbG9jYWwsIDI2MCB0aWNrcyBpbiBzdWJmdW5jdGlvbnMKKyAgICBnbG9iYWwgVElDS1MKKyAgICBUSUNLUyArPSAxCisgICAgaGVscGVyMSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAzMAorICAgIFRJQ0tTICs9IDIKKyAgICBoZWxwZXIxKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDMwCisgICAgVElDS1MgKz0gNgorICAgIGhlbHBlcjIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgNTAKKyAgICBUSUNLUyArPSAzCisgICAgaGVscGVyMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA1MAorICAgIFRJQ0tTICs9IDIKKyAgICBoZWxwZXIyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDUwCisgICAgVElDS1MgKz0gNQorICAgIGhlbHBlcjJfaW5kaXJlY3QoKSAgICAgICAgICAgICAgICAgICMgNzAKKyAgICBUSUNLUyArPSAxCisKK2RlZiBoZWxwZXIxKCk6CisgICAgIyA0IGNhbGxzCisgICAgIyAzMCB0aWNrcyB0b3RhbDogMjkgdGlja3MgbG9jYWwsIDEgdGljayBpbiBzdWJmdW5jdGlvbnMKKyAgICBnbG9iYWwgVElDS1MKKyAgICBUSUNLUyArPSAxMAorICAgIGhhc2F0dHIoQygpLCAiZm9vIikgICAgICAgICAgICAgICAgICMgMQorICAgIFRJQ0tTICs9IDE5CisgICAgbHN0ID0gW10KKyAgICBsc3QuYXBwZW5kKDQyKSAgICAgICAgICAgICAgICAgICAgICAjIDAKKyAgICBzeXMuZXhjX2luZm8oKSAgICAgICAgICAgICAgICAgICAgICAjIDAKKworZGVmIGhlbHBlcjJfaW5kaXJlY3QoKToKKyAgICBoZWxwZXIyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDUwCisgICAgZmFjdG9yaWFsKDMpICAgICAgICAgICAgICAgICAgICAgICAgIyAyMAorCitkZWYgaGVscGVyMigpOgorICAgICMgOCBjYWxscworICAgICMgNTAgdGlja3MgbG9jYWw6IDM5IHRpY2tzIGxvY2FsLCAxMSB0aWNrcyBpbiBzdWJmdW5jdGlvbnMKKyAgICBnbG9iYWwgVElDS1MKKyAgICBUSUNLUyArPSAxMQorICAgIGhhc2F0dHIoQygpLCAiYmFyIikgICAgICAgICAgICAgICAgICMgMQorICAgIFRJQ0tTICs9IDEzCisgICAgc3ViaGVscGVyKCkgICAgICAgICAgICAgICAgICAgICAgICAgIyAxMAorICAgIFRJQ0tTICs9IDE1CisKK2RlZiBzdWJoZWxwZXIoKToKKyAgICAjIDggY2FsbHMKKyAgICAjIDEwIHRpY2tzIHRvdGFsOiA4IHRpY2tzIGxvY2FsLCAyIHRpY2tzIGluIHN1YmZ1bmN0aW9ucworICAgIGdsb2JhbCBUSUNLUworICAgIFRJQ0tTICs9IDIKKyAgICBmb3IgaSBpbiByYW5nZSgyKTogICAgICAgICAgICAgICAgICAjIDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgQygpLmZvbyAgICAgICAgICAgICAgICAgICAgICMgMSB4IDIKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgVElDS1MgKz0gMyAgICAgICAgICAgICAgICAgICMgMyB4IDIKKworY2xhc3MgQzoKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICMgMjggY2FsbHMKKyAgICAgICAgIyAxIHRpY2ssIGxvY2FsCisgICAgICAgIGdsb2JhbCBUSUNLUworICAgICAgICBUSUNLUyArPSAxCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvcHljbGJyX2lucHV0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3B5Y2xicl9pbnB1dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWNjZDYyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3B5Y2xicl9pbnB1dC5weQpAQCAtMCwwICsxLDMzIEBACisiIiJUZXN0IGNhc2VzIGZvciB0ZXN0X3B5Y2xici5weSIiIgorCitkZWYgZigpOiBwYXNzCisKK2NsYXNzIE90aGVyKG9iamVjdCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZvbyhjKTogcGFzcworCisgICAgZGVmIG9tKHNlbGYpOiBwYXNzCisKK2NsYXNzIEIgKG9iamVjdCk6CisgICAgZGVmIGJtKHNlbGYpOiBwYXNzCisKK2NsYXNzIEMgKEIpOgorICAgIGZvbyA9IE90aGVyKCkuZm9vCisgICAgb20gPSBPdGhlci5vbQorCisgICAgZCA9IDEwCisKKyAgICAjIFhYWDogVGhpcyBjYXVzZXMgdGVzdF9weWNsYnIucHkgdG8gZmFpbCwgYnV0IG9ubHkgYmVjYXVzZSB0aGUKKyAgICAjICAgICAgaW50cm9zcGVjdGlvbi1iYXNlZCBpc19tZXRob2QoKSBjb2RlIGluIHRoZSB0ZXN0IGNhbid0CisgICAgIyAgICAgIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhpcyBhbmQgYSBnZW51aW5lIG1ldGhvZCBmdW5jdGlvbiBsaWtlIG0oKS4KKyAgICAjICAgICAgVGhlIHB5Y2xici5weSBtb2R1bGUgZ2V0cyB0aGlzIHJpZ2h0IGFzIGl0IHBhcnNlcyB0aGUgdGV4dC4KKyAgICAjCisgICAgI2YgPSBmCisKKyAgICBkZWYgbShzZWxmKTogcGFzcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzbShzZWxmKTogcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNtKHNlbGYpOiBwYXNzCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvcHlkb2NfbW9kLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3B5ZG9jX21vZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzUzMzI0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3B5ZG9jX21vZC5weQpAQCAtMCwwICsxLDI3IEBACisiIiJUaGlzIGlzIGEgdGVzdCBtb2R1bGUgZm9yIHRlc3RfcHlkb2MiIiIKKworX19hdXRob3JfXyA9ICJCZW5qYW1pbiBQZXRlcnNvbiIKK19fY3JlZGl0c19fID0gIk5vYm9keSIKK19fdmVyc2lvbl9fID0gIjEuMi4zLjQiCisKKworY2xhc3MgQToKKyAgICAiIiJIZWxsbyBhbmQgZ29vZGJ5ZSIiIgorICAgIGRlZiBfX2luaXRfXygpOgorICAgICAgICAiIiJXb3csIEkgaGF2ZSBubyBmdW5jdGlvbiEiIiIKKyAgICAgICAgcGFzcworCitjbGFzcyBCKG9iamVjdCk6CisgICAgTk9fTUVBTklORyA9ICJlZ2dzIgorICAgIHBhc3MKKworZGVmIGRvY19mdW5jKCk6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBzb2x2ZXMgYWxsIG9mIHRoZSB3b3JsZCdzIHByb2JsZW1zOgorICAgIGh1bmdlcgorICAgIGxhY2sgb2YgUHl0aG9uCisgICAgd2FyCisgICAgIiIiCisKK2RlZiBub2RvY19mdW5jKCk6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3B5ZG9jZm9kZGVyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3B5ZG9jZm9kZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjFjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvcHlkb2Nmb2RkZXIucHkKQEAgLTAsMCArMSwyMTYgQEAKKyIiIlNvbWV0aGluZyBqdXN0IHRvIGxvb2sgYXQgdmlhIHB5ZG9jLiIiIgorCitpbXBvcnQgdHlwZXMKKworY2xhc3MgQV9jbGFzc2ljOgorICAgICJBIGNsYXNzaWMgY2xhc3MuIgorICAgIGRlZiBBX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEuIgorICAgIGRlZiBBQl9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBIGFuZCBCLiIKKyAgICBkZWYgQUNfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSBhbmQgQy4iCisgICAgZGVmIEFEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEgYW5kIEQuIgorICAgIGRlZiBBQkNfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiBhbmQgQy4iCisgICAgZGVmIEFCRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCIGFuZCBELiIKKyAgICBkZWYgQUNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEMgYW5kIEQuIgorICAgIGRlZiBBQkNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIsIEMgYW5kIEQuIgorCisKK2NsYXNzIEJfY2xhc3NpYyhBX2NsYXNzaWMpOgorICAgICJBIGNsYXNzaWMgY2xhc3MsIGRlcml2ZWQgZnJvbSBBX2NsYXNzaWMuIgorICAgIGRlZiBBQl9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBIGFuZCBCLiIKKyAgICBkZWYgQUJDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIgYW5kIEMuIgorICAgIGRlZiBBQkRfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiBhbmQgRC4iCisgICAgZGVmIEFCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiwgQyBhbmQgRC4iCisgICAgZGVmIEJfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQi4iCisgICAgZGVmIEJDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIgYW5kIEMuIgorICAgIGRlZiBCRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCIGFuZCBELiIKKyAgICBkZWYgQkNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIsIEMgYW5kIEQuIgorCitjbGFzcyBDX2NsYXNzaWMoQV9jbGFzc2ljKToKKyAgICAiQSBjbGFzc2ljIGNsYXNzLCBkZXJpdmVkIGZyb20gQV9jbGFzc2ljLiIKKyAgICBkZWYgQUNfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSBhbmQgQy4iCisgICAgZGVmIEFCQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCIGFuZCBDLiIKKyAgICBkZWYgQUNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEMgYW5kIEQuIgorICAgIGRlZiBBQkNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIsIEMgYW5kIEQuIgorICAgIGRlZiBCQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCIGFuZCBDLiIKKyAgICBkZWYgQkNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIsIEMgYW5kIEQuIgorICAgIGRlZiBDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEMuIgorICAgIGRlZiBDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBDIGFuZCBELiIKKworY2xhc3MgRF9jbGFzc2ljKEJfY2xhc3NpYywgQ19jbGFzc2ljKToKKyAgICAiQSBjbGFzc2ljIGNsYXNzLCBkZXJpdmVkIGZyb20gQl9jbGFzc2ljIGFuZCBDX2NsYXNzaWMuIgorICAgIGRlZiBBRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBIGFuZCBELiIKKyAgICBkZWYgQUJEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIgYW5kIEQuIgorICAgIGRlZiBBQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQyBhbmQgRC4iCisgICAgZGVmIEFCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiwgQyBhbmQgRC4iCisgICAgZGVmIEJEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIgYW5kIEQuIgorICAgIGRlZiBCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQiwgQyBhbmQgRC4iCisgICAgZGVmIENEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEMgYW5kIEQuIgorICAgIGRlZiBEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEQuIgorCisKK2NsYXNzIEFfbmV3KG9iamVjdCk6CisgICAgIkEgbmV3LXN0eWxlIGNsYXNzLiIKKworICAgIGRlZiBBX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEuIgorICAgIGRlZiBBQl9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBIGFuZCBCLiIKKyAgICBkZWYgQUNfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSBhbmQgQy4iCisgICAgZGVmIEFEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEgYW5kIEQuIgorICAgIGRlZiBBQkNfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiBhbmQgQy4iCisgICAgZGVmIEFCRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCIGFuZCBELiIKKyAgICBkZWYgQUNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEMgYW5kIEQuIgorICAgIGRlZiBBQkNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIsIEMgYW5kIEQuIgorCisgICAgZGVmIEFfY2xhc3NtZXRob2QoY2xzLCB4KToKKyAgICAgICAgIkEgY2xhc3MgbWV0aG9kIGRlZmluZWQgaW4gQS4iCisgICAgQV9jbGFzc21ldGhvZCA9IGNsYXNzbWV0aG9kKEFfY2xhc3NtZXRob2QpCisKKyAgICBkZWYgQV9zdGF0aWNtZXRob2QoKToKKyAgICAgICAgIkEgc3RhdGljIG1ldGhvZCBkZWZpbmVkIGluIEEuIgorICAgIEFfc3RhdGljbWV0aG9kID0gc3RhdGljbWV0aG9kKEFfc3RhdGljbWV0aG9kKQorCisgICAgZGVmIF9nZXR4KHNlbGYpOgorICAgICAgICAiQSBwcm9wZXJ0eSBnZXR0ZXIgZnVuY3Rpb24uIgorICAgIGRlZiBfc2V0eChzZWxmLCB2YWx1ZSk6CisgICAgICAgICJBIHByb3BlcnR5IHNldHRlciBmdW5jdGlvbi4iCisgICAgZGVmIF9kZWx4KHNlbGYpOgorICAgICAgICAiQSBwcm9wZXJ0eSBkZWxldGVyIGZ1bmN0aW9uLiIKKyAgICBBX3Byb3BlcnR5ID0gcHJvcGVydHkoZmRlbD1fZGVseCwgZmdldD1fZ2V0eCwgZnNldD1fc2V0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jPSJBIHNhbXBsZSBwcm9wZXJ0eSBkZWZpbmVkIGluIEEuIikKKworICAgIEFfaW50X2FsaWFzID0gaW50CisKK2NsYXNzIEJfbmV3KEFfbmV3KToKKyAgICAiQSBuZXctc3R5bGUgY2xhc3MsIGRlcml2ZWQgZnJvbSBBX25ldy4iCisKKyAgICBkZWYgQUJfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSBhbmQgQi4iCisgICAgZGVmIEFCQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCIGFuZCBDLiIKKyAgICBkZWYgQUJEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIgYW5kIEQuIgorICAgIGRlZiBBQkNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIsIEMgYW5kIEQuIgorICAgIGRlZiBCX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIuIgorICAgIGRlZiBCQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCIGFuZCBDLiIKKyAgICBkZWYgQkRfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQiBhbmQgRC4iCisgICAgZGVmIEJDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCLCBDIGFuZCBELiIKKworY2xhc3MgQ19uZXcoQV9uZXcpOgorICAgICJBIG5ldy1zdHlsZSBjbGFzcywgZGVyaXZlZCBmcm9tIEFfbmV3LiIKKworICAgIGRlZiBBQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBIGFuZCBDLiIKKyAgICBkZWYgQUJDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIgYW5kIEMuIgorICAgIGRlZiBBQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQyBhbmQgRC4iCisgICAgZGVmIEFCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiwgQyBhbmQgRC4iCisgICAgZGVmIEJDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIgYW5kIEMuIgorICAgIGRlZiBCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQiwgQyBhbmQgRC4iCisgICAgZGVmIENfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQy4iCisgICAgZGVmIENEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEMgYW5kIEQuIgorCitjbGFzcyBEX25ldyhCX25ldywgQ19uZXcpOgorICAgICIiIkEgbmV3LXN0eWxlIGNsYXNzLCBkZXJpdmVkIGZyb20gQl9uZXcgYW5kIENfbmV3LgorICAgICIiIgorCisgICAgZGVmIEFEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEgYW5kIEQuIgorICAgIGRlZiBBQkRfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiBhbmQgRC4iCisgICAgZGVmIEFDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBDIGFuZCBELiIKKyAgICBkZWYgQUJDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCLCBDIGFuZCBELiIKKyAgICBkZWYgQkRfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQiBhbmQgRC4iCisgICAgZGVmIEJDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCLCBDIGFuZCBELiIKKyAgICBkZWYgQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQyBhbmQgRC4iCisgICAgZGVmIERfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gRC4iCisKK2NsYXNzIEZ1bmt5UHJvcGVydGllcyhvYmplY3QpOgorICAgICIiIkZyb20gU0YgYnVnIDQ3MjM0NywgYnkgUm9lbGFuZCBSZW5nZWxpbmsuCisKKyAgICBQcm9wZXJ0eSBnZXR0ZXJzIGV0YyBtYXkgbm90IGJlIHZhbmlsbGEgZnVuY3Rpb25zIG9yIG1ldGhvZHMsCisgICAgYW5kIHRoaXMgdXNlZCB0byBtYWtlIEdVSSBweWRvYyBibG93IHVwLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmRlc2MgPSB7J3gnOjB9CisKKyAgICBjbGFzcyBnZXRfZGVzYzoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHIpOgorICAgICAgICAgICAgc2VsZi5hdHRyID0gYXR0cgorICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgaW5zdCk6CisgICAgICAgICAgICBwcmludCAnR2V0IGNhbGxlZCcsIHNlbGYsIGluc3QKKyAgICAgICAgICAgIHJldHVybiBpbnN0LmRlc2Nbc2VsZi5hdHRyXQorICAgIGNsYXNzIHNldF9kZXNjOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYXR0cik6CisgICAgICAgICAgICBzZWxmLmF0dHIgPSBhdHRyCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBpbnN0LCB2YWwpOgorICAgICAgICAgICAgcHJpbnQgJ1NldCBjYWxsZWQnLCBzZWxmLCBpbnN0LCB2YWwKKyAgICAgICAgICAgIGluc3QuZGVzY1tzZWxmLmF0dHJdID0gdmFsCisgICAgY2xhc3MgZGVsX2Rlc2M6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgICAgIHNlbGYuYXR0ciA9IGF0dHIKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGluc3QpOgorICAgICAgICAgICAgcHJpbnQgJ0RlbCBjYWxsZWQnLCBzZWxmLCBpbnN0CisgICAgICAgICAgICBkZWwgaW5zdC5kZXNjW3NlbGYuYXR0cl0KKworICAgIHggPSBwcm9wZXJ0eShnZXRfZGVzYygneCcpLCBzZXRfZGVzYygneCcpLCBkZWxfZGVzYygneCcpLCAncHJvcCB4JykKKworCitzdWJtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKF9fbmFtZV9fICsgJy5zdWJtb2R1bGUnLAorICAgICIiIkEgc3VibW9kdWxlLCB3aGljaCBzaG91bGQgYXBwZWFyIGluIGl0cyBwYXJlbnQncyBzdW1tYXJ5IiIiKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3B5c3RvbmUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvcHlzdG9uZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOTg5MmZmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3B5c3RvbmUucHkKQEAgLTAsMCArMSwyNzAgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIiIiCisiUFlTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KKworVmVyc2lvbjogICAgICAgIFB5dGhvbi8xLjEgKGNvcnJlc3BvbmRzIHRvIEMvMS4xIHBsdXMgMiBQeXN0b25lIGZpeGVzKQorCitBdXRob3I6ICAgICAgICAgUmVpbmhvbGQgUC4gV2VpY2tlciwgIENBQ00gVm9sIDI3LCBObyAxMCwgMTAvODQgcGcuIDEwMTMuCisKKyAgICAgICAgICAgICAgICBUcmFuc2xhdGVkIGZyb20gQURBIHRvIEMgYnkgUmljayBSaWNoYXJkc29uLgorICAgICAgICAgICAgICAgIEV2ZXJ5IG1ldGhvZCB0byBwcmVzZXJ2ZSBBREEtbGlrZW5lc3MgaGFzIGJlZW4gdXNlZCwKKyAgICAgICAgICAgICAgICBhdCB0aGUgZXhwZW5zZSBvZiBDLW5lc3MuCisKKyAgICAgICAgICAgICAgICBUcmFuc2xhdGVkIGZyb20gQyB0byBQeXRob24gYnkgR3VpZG8gdmFuIFJvc3N1bS4KKworVmVyc2lvbiBIaXN0b3J5OgorCisgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjEgY29ycmVjdHMgdHdvIGJ1Z3MgaW4gdmVyc2lvbiAxLjA6CisKKyAgICAgICAgICAgICAgICBGaXJzdCwgaXQgbGVha2VkIG1lbW9yeTogaW4gUHJvYzEoKSwgTmV4dFJlY29yZCBlbmRzCisgICAgICAgICAgICAgICAgdXAgaGF2aW5nIGEgcG9pbnRlciB0byBpdHNlbGYuICBJIGhhdmUgY29ycmVjdGVkIHRoaXMKKyAgICAgICAgICAgICAgICBieSB6YXBwaW5nIE5leHRSZWNvcmQuUHRyQ29tcCBhdCB0aGUgZW5kIG9mIFByb2MxKCkuCisKKyAgICAgICAgICAgICAgICBTZWNvbmQsIFByb2MzKCkgdXNlZCB0aGUgb3BlcmF0b3IgIT0gdG8gY29tcGFyZSBhCisgICAgICAgICAgICAgICAgcmVjb3JkIHRvIE5vbmUuICBUaGlzIGlzIHJhdGhlciBpbmVmZmljaWVudCBhbmQgbm90CisgICAgICAgICAgICAgICAgdHJ1ZSB0byB0aGUgaW50ZW50aW9uIG9mIHRoZSBvcmlnaW5hbCBiZW5jaG1hcmsgKHdoZXJlCisgICAgICAgICAgICAgICAgYSBwb2ludGVyIGNvbXBhcmlzb24gdG8gTm9uZSBpcyBpbnRlbmRlZDsgdGhlICE9CisgICAgICAgICAgICAgICAgb3BlcmF0b3IgYXR0ZW1wdHMgdG8gZmluZCBhIG1ldGhvZCBfX2NtcF9fIHRvIGRvIHZhbHVlCisgICAgICAgICAgICAgICAgY29tcGFyaXNvbiBvZiB0aGUgcmVjb3JkKS4gIFZlcnNpb24gMS4xIHJ1bnMgNS0xMAorICAgICAgICAgICAgICAgIHBlcmNlbnQgZmFzdGVyIHRoYW4gdmVyc2lvbiAxLjAsIHNvIGJlbmNobWFyayBmaWd1cmVzCisgICAgICAgICAgICAgICAgb2YgZGlmZmVyZW50IHZlcnNpb25zIGNhbid0IGJlIGNvbXBhcmVkIGRpcmVjdGx5LgorCisiIiIKKworTE9PUFMgPSA1MDAwMAorCitmcm9tIHRpbWUgaW1wb3J0IGNsb2NrCisKK19fdmVyc2lvbl9fID0gIjEuMSIKKworW0lkZW50MSwgSWRlbnQyLCBJZGVudDMsIElkZW50NCwgSWRlbnQ1XSA9IHJhbmdlKDEsIDYpCisKK2NsYXNzIFJlY29yZDoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBQdHJDb21wID0gTm9uZSwgRGlzY3IgPSAwLCBFbnVtQ29tcCA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgIEludENvbXAgPSAwLCBTdHJpbmdDb21wID0gMCk6CisgICAgICAgIHNlbGYuUHRyQ29tcCA9IFB0ckNvbXAKKyAgICAgICAgc2VsZi5EaXNjciA9IERpc2NyCisgICAgICAgIHNlbGYuRW51bUNvbXAgPSBFbnVtQ29tcAorICAgICAgICBzZWxmLkludENvbXAgPSBJbnRDb21wCisgICAgICAgIHNlbGYuU3RyaW5nQ29tcCA9IFN0cmluZ0NvbXAKKworICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICByZXR1cm4gUmVjb3JkKHNlbGYuUHRyQ29tcCwgc2VsZi5EaXNjciwgc2VsZi5FbnVtQ29tcCwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLkludENvbXAsIHNlbGYuU3RyaW5nQ29tcCkKKworVFJVRSA9IDEKK0ZBTFNFID0gMAorCitkZWYgbWFpbihsb29wcz1MT09QUyk6CisgICAgYmVuY2h0aW1lLCBzdG9uZXMgPSBweXN0b25lcyhsb29wcykKKyAgICBwcmludCAiUHlzdG9uZSglcykgdGltZSBmb3IgJWQgcGFzc2VzID0gJWciICUgXAorICAgICAgICAgIChfX3ZlcnNpb25fXywgbG9vcHMsIGJlbmNodGltZSkKKyAgICBwcmludCAiVGhpcyBtYWNoaW5lIGJlbmNobWFya3MgYXQgJWcgcHlzdG9uZXMvc2Vjb25kIiAlIHN0b25lcworCisKK2RlZiBweXN0b25lcyhsb29wcz1MT09QUyk6CisgICAgcmV0dXJuIFByb2MwKGxvb3BzKQorCitJbnRHbG9iID0gMAorQm9vbEdsb2IgPSBGQUxTRQorQ2hhcjFHbG9iID0gJ1wwJworQ2hhcjJHbG9iID0gJ1wwJworQXJyYXkxR2xvYiA9IFswXSo1MQorQXJyYXkyR2xvYiA9IG1hcChsYW1iZGEgeDogeFs6XSwgW0FycmF5MUdsb2JdKjUxKQorUHRyR2xiID0gTm9uZQorUHRyR2xiTmV4dCA9IE5vbmUKKworZGVmIFByb2MwKGxvb3BzPUxPT1BTKToKKyAgICBnbG9iYWwgSW50R2xvYgorICAgIGdsb2JhbCBCb29sR2xvYgorICAgIGdsb2JhbCBDaGFyMUdsb2IKKyAgICBnbG9iYWwgQ2hhcjJHbG9iCisgICAgZ2xvYmFsIEFycmF5MUdsb2IKKyAgICBnbG9iYWwgQXJyYXkyR2xvYgorICAgIGdsb2JhbCBQdHJHbGIKKyAgICBnbG9iYWwgUHRyR2xiTmV4dAorCisgICAgc3RhcnR0aW1lID0gY2xvY2soKQorICAgIGZvciBpIGluIHJhbmdlKGxvb3BzKToKKyAgICAgICAgcGFzcworICAgIG51bGx0aW1lID0gY2xvY2soKSAtIHN0YXJ0dGltZQorCisgICAgUHRyR2xiTmV4dCA9IFJlY29yZCgpCisgICAgUHRyR2xiID0gUmVjb3JkKCkKKyAgICBQdHJHbGIuUHRyQ29tcCA9IFB0ckdsYk5leHQKKyAgICBQdHJHbGIuRGlzY3IgPSBJZGVudDEKKyAgICBQdHJHbGIuRW51bUNvbXAgPSBJZGVudDMKKyAgICBQdHJHbGIuSW50Q29tcCA9IDQwCisgICAgUHRyR2xiLlN0cmluZ0NvbXAgPSAiREhSWVNUT05FIFBST0dSQU0sIFNPTUUgU1RSSU5HIgorICAgIFN0cmluZzFMb2MgPSAiREhSWVNUT05FIFBST0dSQU0sIDEnU1QgU1RSSU5HIgorICAgIEFycmF5Mkdsb2JbOF1bN10gPSAxMAorCisgICAgc3RhcnR0aW1lID0gY2xvY2soKQorCisgICAgZm9yIGkgaW4gcmFuZ2UobG9vcHMpOgorICAgICAgICBQcm9jNSgpCisgICAgICAgIFByb2M0KCkKKyAgICAgICAgSW50TG9jMSA9IDIKKyAgICAgICAgSW50TG9jMiA9IDMKKyAgICAgICAgU3RyaW5nMkxvYyA9ICJESFJZU1RPTkUgUFJPR1JBTSwgMidORCBTVFJJTkciCisgICAgICAgIEVudW1Mb2MgPSBJZGVudDIKKyAgICAgICAgQm9vbEdsb2IgPSBub3QgRnVuYzIoU3RyaW5nMUxvYywgU3RyaW5nMkxvYykKKyAgICAgICAgd2hpbGUgSW50TG9jMSA8IEludExvYzI6CisgICAgICAgICAgICBJbnRMb2MzID0gNSAqIEludExvYzEgLSBJbnRMb2MyCisgICAgICAgICAgICBJbnRMb2MzID0gUHJvYzcoSW50TG9jMSwgSW50TG9jMikKKyAgICAgICAgICAgIEludExvYzEgPSBJbnRMb2MxICsgMQorICAgICAgICBQcm9jOChBcnJheTFHbG9iLCBBcnJheTJHbG9iLCBJbnRMb2MxLCBJbnRMb2MzKQorICAgICAgICBQdHJHbGIgPSBQcm9jMShQdHJHbGIpCisgICAgICAgIENoYXJJbmRleCA9ICdBJworICAgICAgICB3aGlsZSBDaGFySW5kZXggPD0gQ2hhcjJHbG9iOgorICAgICAgICAgICAgaWYgRW51bUxvYyA9PSBGdW5jMShDaGFySW5kZXgsICdDJyk6CisgICAgICAgICAgICAgICAgRW51bUxvYyA9IFByb2M2KElkZW50MSkKKyAgICAgICAgICAgIENoYXJJbmRleCA9IGNocihvcmQoQ2hhckluZGV4KSsxKQorICAgICAgICBJbnRMb2MzID0gSW50TG9jMiAqIEludExvYzEKKyAgICAgICAgSW50TG9jMiA9IEludExvYzMgLyBJbnRMb2MxCisgICAgICAgIEludExvYzIgPSA3ICogKEludExvYzMgLSBJbnRMb2MyKSAtIEludExvYzEKKyAgICAgICAgSW50TG9jMSA9IFByb2MyKEludExvYzEpCisKKyAgICBiZW5jaHRpbWUgPSBjbG9jaygpIC0gc3RhcnR0aW1lIC0gbnVsbHRpbWUKKyAgICBpZiBiZW5jaHRpbWUgPT0gMC4wOgorICAgICAgICBsb29wc1BlckJlbmNodGltZSA9IDAuMAorICAgIGVsc2U6CisgICAgICAgIGxvb3BzUGVyQmVuY2h0aW1lID0gKGxvb3BzIC8gYmVuY2h0aW1lKQorICAgIHJldHVybiBiZW5jaHRpbWUsIGxvb3BzUGVyQmVuY2h0aW1lCisKK2RlZiBQcm9jMShQdHJQYXJJbik6CisgICAgUHRyUGFySW4uUHRyQ29tcCA9IE5leHRSZWNvcmQgPSBQdHJHbGIuY29weSgpCisgICAgUHRyUGFySW4uSW50Q29tcCA9IDUKKyAgICBOZXh0UmVjb3JkLkludENvbXAgPSBQdHJQYXJJbi5JbnRDb21wCisgICAgTmV4dFJlY29yZC5QdHJDb21wID0gUHRyUGFySW4uUHRyQ29tcAorICAgIE5leHRSZWNvcmQuUHRyQ29tcCA9IFByb2MzKE5leHRSZWNvcmQuUHRyQ29tcCkKKyAgICBpZiBOZXh0UmVjb3JkLkRpc2NyID09IElkZW50MToKKyAgICAgICAgTmV4dFJlY29yZC5JbnRDb21wID0gNgorICAgICAgICBOZXh0UmVjb3JkLkVudW1Db21wID0gUHJvYzYoUHRyUGFySW4uRW51bUNvbXApCisgICAgICAgIE5leHRSZWNvcmQuUHRyQ29tcCA9IFB0ckdsYi5QdHJDb21wCisgICAgICAgIE5leHRSZWNvcmQuSW50Q29tcCA9IFByb2M3KE5leHRSZWNvcmQuSW50Q29tcCwgMTApCisgICAgZWxzZToKKyAgICAgICAgUHRyUGFySW4gPSBOZXh0UmVjb3JkLmNvcHkoKQorICAgIE5leHRSZWNvcmQuUHRyQ29tcCA9IE5vbmUKKyAgICByZXR1cm4gUHRyUGFySW4KKworZGVmIFByb2MyKEludFBhcklPKToKKyAgICBJbnRMb2MgPSBJbnRQYXJJTyArIDEwCisgICAgd2hpbGUgMToKKyAgICAgICAgaWYgQ2hhcjFHbG9iID09ICdBJzoKKyAgICAgICAgICAgIEludExvYyA9IEludExvYyAtIDEKKyAgICAgICAgICAgIEludFBhcklPID0gSW50TG9jIC0gSW50R2xvYgorICAgICAgICAgICAgRW51bUxvYyA9IElkZW50MQorICAgICAgICBpZiBFbnVtTG9jID09IElkZW50MToKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIEludFBhcklPCisKK2RlZiBQcm9jMyhQdHJQYXJPdXQpOgorICAgIGdsb2JhbCBJbnRHbG9iCisKKyAgICBpZiBQdHJHbGIgaXMgbm90IE5vbmU6CisgICAgICAgIFB0clBhck91dCA9IFB0ckdsYi5QdHJDb21wCisgICAgZWxzZToKKyAgICAgICAgSW50R2xvYiA9IDEwMAorICAgIFB0ckdsYi5JbnRDb21wID0gUHJvYzcoMTAsIEludEdsb2IpCisgICAgcmV0dXJuIFB0clBhck91dAorCitkZWYgUHJvYzQoKToKKyAgICBnbG9iYWwgQ2hhcjJHbG9iCisKKyAgICBCb29sTG9jID0gQ2hhcjFHbG9iID09ICdBJworICAgIEJvb2xMb2MgPSBCb29sTG9jIG9yIEJvb2xHbG9iCisgICAgQ2hhcjJHbG9iID0gJ0InCisKK2RlZiBQcm9jNSgpOgorICAgIGdsb2JhbCBDaGFyMUdsb2IKKyAgICBnbG9iYWwgQm9vbEdsb2IKKworICAgIENoYXIxR2xvYiA9ICdBJworICAgIEJvb2xHbG9iID0gRkFMU0UKKworZGVmIFByb2M2KEVudW1QYXJJbik6CisgICAgRW51bVBhck91dCA9IEVudW1QYXJJbgorICAgIGlmIG5vdCBGdW5jMyhFbnVtUGFySW4pOgorICAgICAgICBFbnVtUGFyT3V0ID0gSWRlbnQ0CisgICAgaWYgRW51bVBhckluID09IElkZW50MToKKyAgICAgICAgRW51bVBhck91dCA9IElkZW50MQorICAgIGVsaWYgRW51bVBhckluID09IElkZW50MjoKKyAgICAgICAgaWYgSW50R2xvYiA+IDEwMDoKKyAgICAgICAgICAgIEVudW1QYXJPdXQgPSBJZGVudDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIEVudW1QYXJPdXQgPSBJZGVudDQKKyAgICBlbGlmIEVudW1QYXJJbiA9PSBJZGVudDM6CisgICAgICAgIEVudW1QYXJPdXQgPSBJZGVudDIKKyAgICBlbGlmIEVudW1QYXJJbiA9PSBJZGVudDQ6CisgICAgICAgIHBhc3MKKyAgICBlbGlmIEVudW1QYXJJbiA9PSBJZGVudDU6CisgICAgICAgIEVudW1QYXJPdXQgPSBJZGVudDMKKyAgICByZXR1cm4gRW51bVBhck91dAorCitkZWYgUHJvYzcoSW50UGFySTEsIEludFBhckkyKToKKyAgICBJbnRMb2MgPSBJbnRQYXJJMSArIDIKKyAgICBJbnRQYXJPdXQgPSBJbnRQYXJJMiArIEludExvYworICAgIHJldHVybiBJbnRQYXJPdXQKKworZGVmIFByb2M4KEFycmF5MVBhciwgQXJyYXkyUGFyLCBJbnRQYXJJMSwgSW50UGFySTIpOgorICAgIGdsb2JhbCBJbnRHbG9iCisKKyAgICBJbnRMb2MgPSBJbnRQYXJJMSArIDUKKyAgICBBcnJheTFQYXJbSW50TG9jXSA9IEludFBhckkyCisgICAgQXJyYXkxUGFyW0ludExvYysxXSA9IEFycmF5MVBhcltJbnRMb2NdCisgICAgQXJyYXkxUGFyW0ludExvYyszMF0gPSBJbnRMb2MKKyAgICBmb3IgSW50SW5kZXggaW4gcmFuZ2UoSW50TG9jLCBJbnRMb2MrMik6CisgICAgICAgIEFycmF5MlBhcltJbnRMb2NdW0ludEluZGV4XSA9IEludExvYworICAgIEFycmF5MlBhcltJbnRMb2NdW0ludExvYy0xXSA9IEFycmF5MlBhcltJbnRMb2NdW0ludExvYy0xXSArIDEKKyAgICBBcnJheTJQYXJbSW50TG9jKzIwXVtJbnRMb2NdID0gQXJyYXkxUGFyW0ludExvY10KKyAgICBJbnRHbG9iID0gNQorCitkZWYgRnVuYzEoQ2hhclBhcjEsIENoYXJQYXIyKToKKyAgICBDaGFyTG9jMSA9IENoYXJQYXIxCisgICAgQ2hhckxvYzIgPSBDaGFyTG9jMQorICAgIGlmIENoYXJMb2MyICE9IENoYXJQYXIyOgorICAgICAgICByZXR1cm4gSWRlbnQxCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIElkZW50MgorCitkZWYgRnVuYzIoU3RyUGFySTEsIFN0clBhckkyKToKKyAgICBJbnRMb2MgPSAxCisgICAgd2hpbGUgSW50TG9jIDw9IDE6CisgICAgICAgIGlmIEZ1bmMxKFN0clBhckkxW0ludExvY10sIFN0clBhckkyW0ludExvYysxXSkgPT0gSWRlbnQxOgorICAgICAgICAgICAgQ2hhckxvYyA9ICdBJworICAgICAgICAgICAgSW50TG9jID0gSW50TG9jICsgMQorICAgIGlmIENoYXJMb2MgPj0gJ1cnIGFuZCBDaGFyTG9jIDw9ICdaJzoKKyAgICAgICAgSW50TG9jID0gNworICAgIGlmIENoYXJMb2MgPT0gJ1gnOgorICAgICAgICByZXR1cm4gVFJVRQorICAgIGVsc2U6CisgICAgICAgIGlmIFN0clBhckkxID4gU3RyUGFySTI6CisgICAgICAgICAgICBJbnRMb2MgPSBJbnRMb2MgKyA3CisgICAgICAgICAgICByZXR1cm4gVFJVRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZBTFNFCisKK2RlZiBGdW5jMyhFbnVtUGFySW4pOgorICAgIEVudW1Mb2MgPSBFbnVtUGFySW4KKyAgICBpZiBFbnVtTG9jID09IElkZW50MzogcmV0dXJuIFRSVUUKKyAgICByZXR1cm4gRkFMU0UKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc3lzCisgICAgZGVmIGVycm9yKG1zZyk6CisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgbXNnLAorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJ1c2FnZTogJXMgW251bWJlcl9vZl9sb29wc10iICUgc3lzLmFyZ3ZbMF0KKyAgICAgICAgc3lzLmV4aXQoMTAwKQorICAgIG5hcmdzID0gbGVuKHN5cy5hcmd2KSAtIDEKKyAgICBpZiBuYXJncyA+IDE6CisgICAgICAgIGVycm9yKCIlZCBhcmd1bWVudHMgYXJlIHRvbyBtYW55OyIgJSBuYXJncykKKyAgICBlbGlmIG5hcmdzID09IDE6CisgICAgICAgIHRyeTogbG9vcHMgPSBpbnQoc3lzLmFyZ3ZbMV0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZXJyb3IoIkludmFsaWQgYXJndW1lbnQgJXI7IiAlIHN5cy5hcmd2WzFdKQorICAgIGVsc2U6CisgICAgICAgIGxvb3BzID0gTE9PUFMKKyAgICBtYWluKGxvb3BzKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3JhbmR2Ml8zMi5wY2sgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvcmFuZHYyXzMyLnBjawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdhYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3JhbmR2Ml8zMi5wY2sKQEAgLTAsMCArMSw2MzMgQEAKK2NyYW5kb20KK1JhbmRvbQorcDAKKyh0UnAxCisoSTIKKyhJLTIxNDc0ODM2NDgKK0ktODQ1OTc0OTg1CitJLTEyOTQwOTAwODYKK0kxMTkzNjU5MjM5CitJLTE4NDk0ODE3MzYKK0ktOTQ2NTc5NzMyCitJLTM0NDA2NzcwCitJMTc0OTA0OTQ3MQorSTE5OTc3NzQ2ODIKK0kxNDMyMDI2NDU3CitJMTI4ODEyNzA3MworSS05NDMxNzU2NTUKK0ktMTcxODA3Mzk2NAorSTMzOTk5MzU0OAorSS0xMDQ1MjYwNTc1CitJNTgyNTA1MDM3CitJLTE1NTUxMDgyNTAKK0ktMTExNDc2NTYyMAorSTE1Nzg2NDg3NTAKK0ktMzUwMzg0NDEyCitJLTIwODQ1ODQ4CitJLTI4ODI1NTMxNAorSTczODc5MDk1MworSTE5MDEyNDk2NDEKK0kxOTk5MzI0NjcyCitJLTI3NzM2MTA2OAorSS0xNTE1ODg1ODM5CitJMjA2MTc2MTU5NgorSS04MDkwNjgwODkKK0kxMjg3OTgxMTM2CitJMjU4MTI5NDkyCitJLTYzMDM3NDUKK0ktNzY1MTQ4MzM3CitJMTA5MDM0NDkxMQorSTE2NTM0MzQ3MDMKK0ktMTI0MjkyMzYyOAorSTE2MzkxNzEzMTMKK0ktMTg3MDA0MjY2MAorSS0xNjU1MDE0MDUwCitJMzQ1NjA5MDQ4CitJMjA5MzQxMDEzOAorSTE5NjMyNjMzNzQKK0ktMjEyMjA5ODM0MgorSTEzMzY4NTk5NjEKK0ktODEwOTQyNzI5CitJOTQ1ODU3NzUzCitJMjEwMzA0OTk0MgorSTYyMzkyMjY4NAorSTE0MTgzNDk1NDkKK0k2OTA4NzczNDIKK0k3NTQ5NzMxMDcKK0ktMTYwNTExMTg0NworSTE2MDcxMzc4MTMKK0ktMTcwNDkxNzEzMQorSTEzMTc1MzY0MjgKK0kxNzE0ODgyODcyCitJLTE2NjUzODUxMjAKK0kxODIzNjk0Mzk3CitJLTE3OTA4MzY4NjYKK0ktMTY5NjcyNDgxMgorSS02MDM5Nzk4NDcKK0ktNDk4NTk5Mzk0CitJLTM0MTI2NTI5MQorSTkyNzM4ODgwNAorSTE3Nzg1NjIxMzUKK0kxNzE2ODk1NzgxCitJMTAyMzE5ODEyMgorSTE3MjYxNDU5NjcKK0k5NDE5NTU1MjUKK0kxMjQwMTQ4OTUwCitJLTE5Mjk2MzQ1NDUKK0ktMTI4ODE0NzA4MworSS01MTkzMTgzMzUKK0k3NTQ1NTk3NzcKK0ktNzA3NTcxOTU4CitJMzc0NjA0MDIyCitJNDIwNDI0MDYxCitJLTEwOTU0NDM0ODYKK0kxNjIxOTM0OTQ0CitJLTEyMjA1MDI1MjIKK0ktMTQwMDQ5NjA4CitJLTkxODkxNzEyMgorSTMwNDM0MTAyNAorSS0xNjM3NDQ2MDU3CitJLTM1MzkzNDQ4NQorSTE5NzM0MzYyMzUKK0k0MzMzODAyNDEKK0ktNjg2NzU5NDY1CitJLTIxMTE1NjMxNTQKK0ktNTczNDIyMDMyCitJODA0MzA0NTQxCitJMTUxMzA2MzQ4MworSTE0MTczODE2ODkKK0ktODA0Nzc4NzI5CitJMjExNzU2NDA4CitJNTQ0NTM3MzIyCitJODkwODgxNjQxCitJMTUwMzc4Mzc0CitJMTc2NTczOTM5MgorSTEwMTE2MDQxMTYKK0k1ODQ4ODkwOTUKK0kxNDAwNTIwNTU0CitJNDEzNzQ3ODA4CitJLTE3NDE5OTI1ODcKK0ktMTg4MjQyMTU3NAorSS0xMzczMDAxOTAzCitJLTE4ODUzNDg1MzgKK0k5MDM4MTk0ODAKK0kxMDgzMjIwMDM4CitJLTEzMTgxMDU0MjQKK0kxNzQwNDIxNDA0CitJMTY5MzA4OTYyNQorSTc3NTk2NTU1NworSTEzMTk2MDgwMzcKK0ktMjEyNzQ3NTc4NQorSS0zNjc1NjI4OTUKK0ktMTQxNjI3MzQ1MQorSTE2OTMwMDAzMjcKK0ktMTIxNzQzODQyMQorSTgzNDQwNTUyMgorSS0xMjgyODcyNzUKK0k4NjQwNTc1NDgKK0ktOTczOTE3MzU2CitJNzMwNDExMQorSTE3MTIyNTMxODIKK0kxMzUzODk3NzQxCitJNjcyOTgyMjg4CitJMTc3ODU3NTU1OQorSS00MDMwNTgzNzcKK0ktMzg1NDAzNzgKK0ktMTM5MzcxMzQ5NgorSTEzMTkzMTcxCitJMTEyNzE5NjIwMAorSTIwNTE3NjQ3MgorSS0yMTA0NzkwNTA2CitJMjk5OTg1NDE2CitJMTQwMzU0MTY4NQorSS0xMDE4MjcwNjY3CitJLTE5ODA2Nzc0OTAKK0ktMTE4MjYyNTc5NworSTE2MzcwMTUxODEKK0ktMTc5NTM1NzQxNAorSTE1MTQ0MTM0MDUKK0ktOTI0NTE2MjM3CitJLTE4NDE4NzM2NTAKK0ktMTAxNDU5MTI2OQorSTE1NzY2MTYwNjUKK0ktMTMxOTEwMzEzNQorSS0xMjA4NDc4NDAKK0kyMDYyMjU5Nzc4CitJLTkyODUwNzAKK0kxMTYwODkwMzAwCitJLTU3NTEzNzMxMworSS0xNTA5MTA4Mjc1CitJNDY3MDE5MjYKK0ktMjg3NTYwOTE0CitJLTI1NjgyNDk2MAorSTU3NzU1ODI1MAorSTkwMDU5ODMxMAorSTk0NDYwNzg2NworSTIxMjExNTQ5MjAKK0ktMTE3MDUwNTE5MgorSS0xMzQ3MTcwNTc1CitJNzcyNDc3NzgKK0ktMTg5OTAxNTc2NQorSTEyMzQxMDMzMjcKK0kxMDI3MDUzNjU4CitJMTkzNDYzMjMyMgorSS03OTIwMzEyMzQKK0kxMTQ3MzIyNTM2CitJMTI5MDY1NTExNworSTEwMDIwNTk3MTUKK0kxMzI1ODk4NTM4CitJODk2MDI5NzkzCitJLTc5MDk0MDY5NAorSS05ODA0NzA3MjEKK0ktMTkyMjY0ODI1NQorSS05NTE2NzI4MTQKK0kyOTE1NDM5NDMKK0kxMTU4NzQwMjE4CitJLTE5NTkwMjM3MzYKK0ktMTk3NzE4NTIzNgorSTE1Mjc5MDAwNzYKK0k1MTQxMDQxOTUKK0ktODE0MTU0MTEzCitJLTU5MzE1Nzg4MworSS0xMDIzNzA0NjYwCitJMTI4NTY4ODM3NworSS0yMTE3NTI1Mzg2CitJNzY4OTU0MzYwCitJLTM4Njc2ODQ2CitJLTc5OTg0ODY1OQorSS0xMzA1NTE3MjU5CitJLTE5MzgyMTM2NDEKK0ktNDYyMTQ2NzU4CitJLTE2NjMzMDI4OTIKK0kxODk5NTkxMDY5CitJLTIyOTM1Mzg4CitJLTI3NTg1Njk3NgorSS00NDM3MzY4OTMKK0ktNzM5NDQxMTU2CitJOTM4NjIwNjgKK0ktODM4MTA1NjY5CitJMTczNTYyOTg0NQorSS04MTc0ODQyMDYKK0kyODA4MTQ1NTUKK0kxNzUzNTQ3MTc5CitJMTgxMTEyMzQ3OQorSTE5NzQ1NDM2MzIKK0ktNDg0NDc0NjUKK0ktNjQyNjk0MzQ1CitJLTUzMTE0OTYxMworSTUxODY5ODk1MworSS0yMjE2NDI2MjcKK0ktNjg2NTE5MTg3CitJNzc2NjQ0MzAzCitJMjU3Nzc0NDAwCitJLTE0OTkxMzQ4NTcKK0ktMTA1NTI3MzQ1NQorSS0yMzcwMjM5NDMKK0kxOTgxNzUyMzMwCitJLTkxNzY3MTY2MgorSS0zNzI5MDU5ODMKK0kxNTg4MDU4NDIwCitJMTE3MTkzNjY2MAorSS0xNzMwOTc3MTIxCitJMTM2MDAyODk4OQorSTE3Njk0NjkyODcKK0kxOTEwNzA5NTQyCitJLTg1MjY5Mjk1OQorSTEzOTY5NDQ2NjcKK0ktMTcyMzk5OTE1NQorSS0zMTA5NzU0MzUKK0ktMTk2NTQ1Mzk1NAorSS0xNjM2ODU4NTcwCitJMjAwNTY1MDc5NAorSTY4MDI5MzcxNQorSTEzNTU2MjkzODYKK0k4NDQ1MTQ2ODQKK0ktMTkwOTE1MjgwNworSS04MDg2NDYwNzQKK0kxOTM2NTEwMDE4CitJMTEzNDQxMzgxMAorSS0xNDM0MTEwNDcKK0ktMTQ3ODQzNjMwNAorSTEzOTQ5NjkyNDQKK0ktMTE3MDExMDY2MAorSTE5NjMxMTIwODYKK0ktMTUxODM1MTA0OQorSS0xNTA2Mjg3NDQzCitJLTQ1NTAyMzA5MAorSS04NTUzNjYwMjgKK0ktMTc0Njc4NTU2OAorSTkzMzk5MDg4MgorSS03MDM2MjUxNDEKK0ktMjg1MDM2ODcyCitJMTg4Mjc3OTA1CitJMTQ3MTU3ODYyMAorSS05ODEzODI4MzUKK0ktNTg2OTc0MjIwCitJOTQ1NjE5NzU4CitJMTYwODc3ODQ0NAorSS0xNzA4NTQ4MDY2CitJLTE4OTc2MjkzMjAKK0ktNDI2MTc4MTAKK0ktODM2ODQwNzkwCitJNTM5MTU0NDg3CitJLTIzNTcwNjk2MgorSTMzMjA3NDQxOAorSS01NzU3MDA1ODkKK0kxNTM0NjA4MDAzCitJNjMyMTE2NTYwCitJLTE4MTk3NjA2NTMKK0k2NDIwNTI5NTgKK0ktNzIyMzkxNzcxCitJLTExMDQ3MTk0NzUKK0ktMTE5Njg0NzA4NAorSTU4MjQxMzk3MworSTE1NjMzOTQ4NzYKK0k2NDIwMDc5NDQKK0kxMDg5ODk0NTYKK0kzNjE2MjUwMTQKK0k2NzczMDg2MjUKK0ktMTgwNjUyOTQ5NgorSS05NTkwNTA3MDgKK0ktMTg1ODI1MTA3MAorSS0yMTYwNjk4MzIKK0k3MDE2MjQ1NzkKK0k1MDEyMzgwMzMKK0kxMjI4NzAzMAorSTE4OTUxMDcxMDcKK0kyMDg5MDk4NjM4CitJLTg3NDgwNjIzMAorSTEyMzYyNzkyMDMKK0k1NjM3MTg4OTAKK0ktNTQ0MzUyNDg5CitJLTE4Nzk3MDc0OTgKK0kxNzY3NTgzMzkzCitJLTE3NzY2MDQ2NTYKK0ktNjkzMjk0MzAxCitJLTg4ODgyODMxCitJMTY5MzAzMzU3CitJMTI5OTE5NjE1MgorSS0xMTIyNzkxMDg5CitJLTM3OTE1NzE3MgorSTE5MzQ2NzE4NTEKK0kxNTc1NzM2OTYxCitJLTE5NTczMTc0CitJLTE0MDE1MTEwMDkKK0k5MzA1MTY3CitJLTExMTUxNzQ0NjcKK0kxNjcwNzM1NTM3CitJMTIyNjQzNjUwMQorSS0yMDA0NTI0NTM1CitJMTc2NzQ2Mzg3OAorSS0xNzIyODU1MDc5CitJLTU1OTQxMzkyNgorSTE1Mjk4MTA4NTEKK0kxMjAxMjcyMDg3CitJLTEyOTcxMzA5NzEKK0ktMTE4ODE0OTk4MgorSTEzOTY1NTcxODgKK0ktMzcwMzU4MzQyCitJLTEwMDY2MTk3MDIKK0kxNjAwOTQyNDYzCitJOTA2MDg3MTMwCitJLTc2OTkxOTA5CitJMjA2OTU4MDE3OQorSS0xNjc0MTk1MTgxCitJLTIwOTg0MDQ3MjkKK0ktOTQwOTcyNDU5CitJLTU3MzM5OTE4NworSS0xOTMwMzg2Mjc3CitJLTcyMTMxMTE5OQorSS02NDc4MzQ3NDQKK0kxNDUyMTgxNjcxCitJNjg4NjgxOTE2CitJMTgxMjc5MzczMQorSTE3MDQzODA2MjAKK0ktMTM4OTYxNTE3OQorSTg2NjI4NzgzNworSS0xNDM1MjY1MDA3CitJMzg4NDAwNzgyCitJLTE0Nzk4NjYwMAorSS0xNjEzNTk4ODUxCitJLTEwNDAzNDc0MDgKK0k3ODIwNjMzMjMKK0ktMjM5MjgyMDMxCitJLTU3NTk2NjcyMgorSS0xODY1MjA4MTc0CitJLTQ4MTM2NTE0NgorSTU3OTU3MjgwMworSS0xMjM5NDgxNDk0CitJMzM1MzYxMjgwCitJLTQyOTcyMjk0NworSTE4ODE3NzI3ODkKK0kxOTA4MTAzODA4CitJMTY1MzY5MDAxMworSS0xNjY4NTg4MzQ0CitJMTkzMzc4Nzk1MworSS0yMDMzNDgwNjA5CitJMjIxNjI3OTcKK0ktMTUxNjUyNzA0MAorSS00NjEyMzI0ODIKK0ktMTYyMDEzNzIKK0ktMjA0MzA5MjAzMAorSTExNDk5MDMzNworSS0xNTI0MDkwMDg0CitJMTQ1NjM3NDAyMAorSTQ1ODYwNjQ0MAorSS0xOTI4MDgzMjE4CitJMjI3NzczMTI1CitJLTExMjkwMjgxNTkKK0kxNjc4Njg5CitJMTU3NTg5NjkwNworSS0xNzkyOTM1MjIwCitJLTE1MTM4NzU3NQorSTY0MDg0MDg4CitJLTk1NzM3MjE1CitJMTMzNzMzNTY4OAorSS0xOTYzNDY2MzQ1CitJMTI0MzMxNTEzMAorSS0xNzk4NTE4NDExCitJLTU0NjAxMzIxMgorSS02MDcwNjUzOTYKK0kxMjE5ODI0MTYwCitJMTcxNTIxODQ2OQorSS0xMzY4MTYzNzgzCitJMTcwMTU1MjkxMworSS0zODExMTQ4ODgKK0kxMDY4ODIxNzE3CitJMjY2MDYyOTcxCitJLTIwNjY1MTMxNzIKK0kxNzY3NDA3MjI5CitJLTc4MDkzNjQxNAorSS03MDU0MTM0NDMKK0ktMTI1NjI2ODg0NworSTE2NDY4NzQxNDkKK0kxMTA3NjkwMzUzCitJODM5MTMzMDcyCitJNjcwMDE3NDkKK0k4NjA3NjM1MDMKK0k4ODQ4ODA2MTMKK0k5MTk3NzA4NAorSTc1NTM3MTkzMworSTQyMDc0NTE1MworSS01Nzg0ODA2OTAKK0ktMTUyMDE5MzU1MQorSTEwMTEzNjkzMzEKK0ktOTk3NTQ1NzUKK0ktNzMzMTQxMDY0CitJLTUwMDU5ODU4OAorSTEwODExMjQyNzEKK0ktMTM0MTI2NjU3NQorSTkyMTAwMjYxMgorSS04NDg4NTI0ODcKK0ktMTkwNDQ2NzM0MQorSS0xMjk0MjU2OTczCitJLTk0MDc0NzE0CitJLTE3Nzg3NTg0OTgKK0ktMTQwMTE4ODU0NworSTIxMDE4MzA1NzgKK0kyMDU4ODY0ODc3CitJLTI3Mjg3NTk5MQorSS0xMzc1ODU0Nzc5CitJLTEzMzI5Mzc4NzAKK0k2MTk0MjU1MjUKK0ktMTAzNDUyOTYzOQorSS0zNjQ1NDM5MworSS0yMDMwNDk5OTg1CitJLTE2MzcxMjc1MDAKK0ktMTQwODExMDI4NworSS0yMTA4NjI1NzQ5CitJLTk2MTAwNzQzNgorSTE0NzU2NTQ5NTEKK0ktNzkxOTQ2MjUxCitJMTY2Nzc5MjExNQorSTE4MTg5Nzg4MzAKK0kxODk3OTgwNTE0CitJMTk1OTU0NjQ3NworSS03NDQ3ODkxMQorSS01MDg2NDMzNDcKK0k0NjE1OTQzOTkKK0k1Mzg4MDI3MTUKK0ktMjA5NDk3MDA3MQorSS0yMDc2NjYwMjUzCitJMTA5MTM1ODk0NAorSTE5NDQwMjkyNDYKK0ktMzQzOTU3NDM2CitJLTE5MTU4NDUwMjIKK0kxMjM3NjIwMTg4CitJMTE0NDEyNTE3NAorSTE1MjIxOTA1MjAKK0ktNjcwMjUyOTUyCitJLTE5NDY5MjI2CitJNjc1NjI2NTEwCitJNzU4NzUwMDk2CitJOTA5NzI0MzU0CitJLTE4NDYyNTk2NTIKK0k1NDQ2NjkzNDMKK0k0NDUxODI0OTUKK0ktODIxNTE5OTMwCitJLTExMjQyNzk2ODUKK0ktMTY2ODk5NTEyMgorSTE2NTMyODQ3OTMKK0ktNjc4NTU1MTUxCitJLTY4NzUxMzIwNworSTE1NTgyNTk0NDUKK0ktMTk3ODg2NjgzOQorSTE1NTg4MzU2MDEKK0kxNzMyMTM4NDcyCitJLTE5MDQ3OTMzNjMKK0k2MjAwMjAyOTYKK0kxNTYyNTk3ODc0CitJMTk0MjYxNzIyNworSS01NDk2MzI1NTIKK0k3MjE2MDM3OTUKK0k0MTc5Nzg0NTYKK0ktMTM1NTI4MTUyMgorSS01MzgwNjUyMDgKK0ktMTA3OTUyMzE5NgorSTE4NzM3NTY5OQorSTQ0OTA2NDk3MgorSTEwMTgwODM5NDcKK0kxNjMyMzg4ODgyCitJLTQ5MzI2OTg2NgorSTkyNzY5MDQxCitJMTQ3NzE0Njc1MAorSTE3ODI3MDg0MDQKK0k0NDQ4NzMzNzYKK0kxMDg1ODUxMTA0CitJLTY4MjMyNzIKK0ktMTMwMjI1MTg1MworSTE2MDIwNTA2ODgKK0ktMTA0MjE4NzgyNAorSTI4NzE2MTc0NQorSS0xOTcyMDk0NDc5CitJMTAzMjcxNDkxCitJMjEzMTYxOTc3MworSS0yMDY0MTE1ODcwCitJNzY2ODE1NDk4CitJOTkwODYxNDU4CitJLTE2NjQ0MDczNzgKK0kxMDgzNzQ2NzU2CitJLTEwMTgzMzE5MDQKK0ktNjc3MzE1Njg3CitJLTk1MTY3MDY0NworSS05NTIzNTY4NzQKK0k0NTE0NjA2MDkKK0ktODE4NjE1NTY0CitJODUxNDM5NTA4CitJNjU2MzYyNjM0CitJLTEzNTEyNDA0ODUKK0k4MjMzNzgwNzgKK0kxOTg1NTk3Mzg1CitJNTk3NzU3NzQwCitJLTE1MTIzMDMwNTcKK0kxNTkwODcyNzk4CitJMTEwODQyNDIxMworSTgxODg1MDg5OAorSS0xMzY4NTk0MzA2CitJLTIwMTEwNzc2MQorSTE3OTMzNzAzNzgKK0kxMjQ3NTk3NjExCitJLTE1OTQzMjYyNjQKK0ktNjAxNjUzODkwCitJNDI3NjQyNzU5CitJMjQ4MzIyMTEzCitJLTI5MjU0NTMzOAorSTE3MDg5ODU4NzAKK0kxOTE3MDQyNzcxCitJNDI5MzU0NTAzCitJLTQ3ODQ3MDMyOQorSTc5Mzk2MDAxNAorSTM2OTkzOTEzMworSTE3MjgxODkxNTcKK0ktNTE4OTYzNjI2CitJLTI3ODUyMzk3NAorSS0xODc3Mjg5Njk2CitJLTIwODg2MTc2NTgKK0ktMTM2Nzk0MDA0OQorSS02MjI5NTkyNQorSTE5Nzk3NTExOQorSS0yNTI5MDA3NzcKK0k4MDM0MzA1MzkKK0k0ODU3NTk0NDEKK0ktNTI4MjgzNDgwCitJLTEyODc0NDM5NjMKK0ktNDc4NjE3NDQ0CitJLTg2MTkwNjk0NgorSS02NDkwOTU1NTUKK0ktODkzMTg0MzM3CitJMjA1MDU3MTMyMgorSTgwMzQzMzEzMworSTE2Mjk1NzQ1NzEKK0kxNjQ5NzIwNDE3CitJLTIwNTAyMjUyMDkKK0kxMjA4NTk4OTc3CitJNzIwMzE0MzQ0CitJLTYxNTE2NjI1MQorSS04MzUwNzcxMjcKK0ktMTQwNTM3MjQyOQorSTk5NTY5ODA2NAorSTE0ODEyMzI0MAorSS05NDMwMTY2NzYKK0ktNTk0NjA5NjIyCitJLTEzODE1OTY3MTEKK0kxMDE3MTk1MzAxCitJLTEyNjg4OTMwMTMKK0ktMTgxNTk4NTE3OQorSS0xMzkzNTcwMzUxCitJLTg3MDAyNzM2NAorSS00NzYwNjQ0NzIKK0kxODU1ODI2NDUKK0k1Njk4NjMzMjYKK0kxMDk4NTg0MjY3CitJLTE1OTkxNDcwMDYKK0ktNDg1MDU0MzkxCitJLTg1MjA5ODM2NQorSTE0NzczMjAxMzUKK0kyMjIzMTY3NjIKK0ktMTUxNTU4MzA2NAorSS05MzUwNTEzNjcKK0kzOTMzODMwNjMKK0k4MTk2MTcyMjYKK0k3MjI5MjE4MzcKK0ktMTI0MTgwNjQ5OQorSS0xMzU4NTY2Mzg1CitJMTY2NjgxMzU5MQorSTEzMzM4NzUxMTQKK0ktMTY2MzY4ODMxNworSS00NzI1NDYyMworSS04ODU4MDA3MjYKK0kzMDczODg5OTEKK0ktMTIxOTQ1OTQ5NgorSTEzNzQ4NzAzMDAKK0kyMTMyMDQ3ODc3CitJLTEzODU2MjQxOTgKK0ktMjQ1MTM5MjA2CitJMTAxNTEzOTIxNAorSS05MjYxOTg1NTkKK0kxOTY5Nzk4ODY4CitJLTE5NTA0ODA2MTkKK0ktNTU5MTkzNDMyCitJLTEyNTY0NDY1MTgKK0ktMTk4MzQ3Njk4MQorSTc5MDE3OTY1NQorSTEwMDQyODk2NTkKK0kxNTQxODI3NjE3CitJMTU1NTgwNTU3NQorSTUwMTEyNzMzMworSS0xMTIzNDQ2Nzk3CitJLTQ1MzIzMDkxNQorSTIwMzUxMDQ4ODMKK0kxMjk2MTIyMzk4CitJLTE4NDM2OTg2MDQKK0ktNzE1NDY0NTg4CitJMzM3MTQzOTcxCitJLTE5NzIxMTkxOTIKK0k2MDY3Nzc5MDkKK0k3MjY5NzczMDIKK0ktMTE0OTUwMTg3MgorSS0xOTYzNzMzNTIyCitJLTE3OTc1MDQ2NDQKK0k2MjQKK3RwMgorTnRwMworYi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvcmFuZHYyXzY0LnBjayBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yYW5kdjJfNjQucGNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MGRkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvcmFuZHYyXzY0LnBjawpAQCAtMCwwICsxLDYzMyBAQAorY3JhbmRvbQorUmFuZG9tCitwMAorKHRScDEKKyhJMgorKEkyMTQ3NDgzNjQ4CitJMTgxMjExNTY4MgorSTI3NDE3NTU0OTcKK0kxMDI4MDU1NzMwCitJODA5MTY2MDM2CitJMjc3MzYyODY1MAorSTYyMzIxOTUwCitJNTM1MjkwMDQzCitJMzQ5ODc3ODAwCitJOTc2MTY3MDM5CitJMjQ5MDY5Njk0MAorSTM2MzEzMjY5NTUKK0kyMTA3OTkxMTE0CitJMjk0MTIwNTc5MworSTMxOTk2MTE2MDUKK0kxODcxOTcxNTU2CitJMTQ1NjEwODU0MAorSTI5ODQ1OTEwNDQKK0kxNDA4MzY4MDEKK0k0MjAzMjI3MzEwCitJMzY1MjcyMjk4MAorSTQwMzE5NzEyMzQKK0k1NTU3Njk3NjAKK0k2OTczMDEyOTYKK0kyMzQ3NjM4ODgwCitJMzMwMjMzNTg1OAorSTMyMDI1NTE2MgorSTI1NTM1ODY2MDgKK0kxNTcwMjI0MzYxCitJMjgzODc4MDkxMgorSTIzMTU4MzQ5MTgKK0kyMzUxMzQ4MTU4CitJMzU0NTQzMzAxNQorSTIyOTIwMTg1NzkKK0kxMTc3NTY5MzMxCitJNzU4NDk3NTU5CitJMjkxMzMxMTE3NQorSTEwMTQ5NDg4ODAKK0kxNzkzNjE5MjQzCitJMzk4MjQ1MTA1MworSTM4NTA5ODgzNDIKK0kyMzkzOTg0MzI0CitJMTU4MzEwMDA5MworSTMxNDQ3NDI1NDMKK0kzNjU1MDQ3NDkzCitJMzUwNzUzMjM4NQorSTMwOTQ1MTU0NDIKK0kzNTAwNDI0MzQKK0kyNDU1Mjk0ODQ0CitJMTAzODczOTMxMgorSTMxMzgwOTE1MgorSTE4OTQzMzA3MgorSTE2NTMxNjU0NTIKK0k0MTg2NjUwNTkzCitJMTkyODE0NTUKK0kyNTg5NjgwNjE5CitJNDE0NTkzMTU5MAorSTQyODMyNjYxMTgKK0k2MzYyODMxNzIKK0k5NDM2MTgzMzcKK0kzMTcwMTg0NjMzCitJMjMwODc2NjIzMQorSTYzNDYxNTE1OQorSTUzODE1MjY0NworSTIwNzk1NzY4OTEKK0kxMDI5NDQyNjE2CitJMzQxMDY4OTQxMgorSTEzNzAyOTI3NjEKK0kxMDcxNzE4OTc4CitJMjEzOTQ5NjMyMgorSTE4NzY2OTk1NDMKK0kzNDg1ODY2MTg3CitJMzE1NzQ5MDEzMAorSTE2MzMxMDUzODYKK0kxNDUzMjUzMTYwCitJMzg0MTMyMjA4MAorSTM3ODk2MDg5MjQKK0k0MTEwNzcwNzkyCitJOTUwODM2NzMKK0k5MzEzNTQ2MjcKK0kyMDY1Mzg5NTkxCitJMzQ0ODMzOTgyNworSTMzNDgyMDQ1NzcKK0kzMjYzNTI4NTYwCitJMjQxMTMyNDU5MAorSTQwMDMwNTUwMjYKK0kxODY5NjcwMDkzCitJMjczNzIzMTg0MworSTQxNTA3MDExNTUKK0kyNjg5NjY3NjIxCitJMjk5MzI2MzIyNAorSTMyMzk4OTAxNDAKK0kxMTkxNDMwNDgzCitJMTIxNDM5OTc3OQorSTM2MjM0Mjg1MzMKK0kxODE3MDU4ODY2CitJMzA1MjI3NDQ1MQorSTMyNjAzMDA4MgorSTE1MDUxMjkzMTIKK0kyMzA2ODEyMjYyCitJMTM0OTE1MDM2MworSTEwOTkxMjc4OTUKK0kyNTQzNDY1NTc0CitJMjM5NjM4MDE5MworSTUwMzkyNjQ2NgorSTE2MDcxMDk3MzAKK0kzNDUxNzE2ODE3CitJNTgwMzcxMTQKK0k0MjkwMDgxMTE5CitJOTQ3NTE3NTk3CitJMzA4MzQ0MDE4NgorSTUyMDUyMjYzMAorSTI5NDg5NjI0OTYKK0k0MTg0MzE5NTc0CitJMjk1NzYzNjMzNQorSTY2ODM3NDIwMQorSTIzMjU0NDY0NzMKK0k0NzI3ODUzMTQKK0kzNzkxOTMyMzY2CitJNTczMDE3MTg5CitJMjE4NTcyNTM3OQorSTEyNjIyNTE0OTIKK0kzNTI1MDg5Mzc5CitJMjk1MTI2MjY1MworSTEzMDUzNDczMDUKK0k5NDA5NTgxMjIKK0kzMzQzNzU0NTY2CitJMzU5MzcxNzQ0CitJMzg3NDA0NDk3MworSTM5Njg5NzIzMgorSTE0NzE4ODI0OAorSTcxNjY4MzcwMworSTQwMTM4ODAzMTUKK0kxMTMzMzU5NTg2CitJMTc5NDYxMjI0OQorSTM0ODA4MTUxOTIKK0kzOTg4Nzg3ODA0CitJMTcyOTM1NTgwOQorSTU3MzQwODU0MgorSTE0MTkzMTA5MzQKK0kxNzcwMDMwNDQ3CitJMzU1Mjg0NTU2NworSTE2OTM5NzY1MDIKK0kxMjcxMTg5ODkzCitJMjI5ODIzNjczOAorSTIwNDkyMTkwMjcKK0kzNDY0MTk4MDcwCitJMTIzMzU3NDA4MgorSTEwMDc0NTE3ODEKK0kxODM4MjUzNzUwCitJNjg3MDk2NTkzCitJMTEzMTM3NTYwMworSTEyMjMwMTM4OTUKK0kxNDkwNDc4NDM1CitJMzM5MjY1NDM5CitJNDIzMjc5MjY1OQorSTQ5MTUzODUzNgorSTI4MTYyNTY3NjkKK0kxMDQ0MDk3NTIyCitJMjU2NjIyNzA0OQorSTc0ODc2Mjc5MworSTE1MTE4MzA0OTQKK0kzNTkzMjU5ODIyCitJNDEyMTI3OTIxMworSTM3MzU1NDEzMDkKK0kzNjA5Nzk0Nzk3CitJMTkzOTk0MjMzMQorSTM3NzU3MDQzNAorSTE0Mzc5NTc1NTQKK0kxODMxMjg1Njk2CitJNTUwNjI4MTEKK0kyMDQ2NzgzMTEwCitJMTMwMzkwMjI4MworSTE4MzgzNDk4NzcKK0k0MjA5OTM1NTYKK0kxMjU2MzkyNTYwCitJMjc5NTIxNjUwNgorSTI3ODM2ODc5MjQKK0kzMzIyMzAzMTY5CitJNTEyNzk0NzQ5CitJMzA4NDA1ODI2CitJNTE3MTY0NDI5CitJMzMyMDQzNjAyMgorSTEzMjg0MDM2MzIKK0kyMjY5MTg0NzQ2CitJMzcyOTUyMjgxMAorSTMzMDQzMTQ0NTAKK0kyMjM4NzU2MTI0CitJMTY5MDU4MTM2MQorSTM4MTMyNzc1MzIKK0k0MTE5NzA2ODc5CitJMjY1OTQ0Nzg3NQorSTM4ODgxODk3OAorSTIwNjQ1ODA4MTQKK0kxNTg2MjI3Njc2CitJMjYyNzUyMjY4NQorSTIwMTc3OTIyNjkKK0k1NDc5MjgxMDkKK0k4NTkxMDc0NTAKK0kxMDYyMjM4OTI5CitJODU4ODg2MjM3CitJMzc5NTc4MzE0NgorSTQxNzM5MTQ3NTYKK0kzODM1OTE1OTY1CitJMzMyOTUwNDgyMQorSTM0OTQ1Nzk5MDQKK0k4Mzg4NjMyMDUKK0kzMzk5NzM0NzI0CitJNDI0NzM4NzQ4MQorSTM2MTg0MTQ4MzQKK0kyOTg0NDMzNzk4CitJMjE2NTIwNTU2MQorSTQyNjA2ODU2ODQKK0kzMDQ1OTA0MjQ0CitJMzQ1MDA5MzgzNgorSTM1OTczMDc1OTUKK0kzMjE1ODUxMTY2CitJMzE2MjgwMTMyOAorSTI1NTgyODM3OTkKK0k5NTAwNjgxMDUKK0kxODI5NjY0MTE3CitJMzEwODU0Mjk4NworSTIzNzg4NjA1MjcKK0k3OTAwMjM0NjAKK0kyODAwODc3NTAKK0kxMTcxNDc4MDE4CitJMjMzMzY1MzcyOAorSTM5NzY5MzIxNDAKK0k4OTY3NDYxNTIKK0kxODAyNDk0MTk1CitJMTIzMjg3Mzc5NAorSTI3NDk0NDA4MzYKK0kyMDMyMDM3Mjk2CitJMjAxMjA5MTY4MgorSTEyOTYxMzEwMzQKK0kzODkyMTMzMzg1CitJOTA4MTYxMzM0CitJMjI5Njc5MTc5NQorSTU0ODE2OTc5NAorSTY5NjI2NQorSTg5MzE1NjgyOAorSTQyNjkwNDcwOQorSTM1NjUzNzQ1MzUKK0kyNjU1OTA2ODI1CitJMjc5MjE3ODUxNQorSTI0MDY4MTQ2MzIKK0k0MDM4ODQ3NTc5CitJMzEyMzkzNDY0MgorSTIxOTc1MDMwMDQKK0kzNTM1MDMyNTk3CitJMjI2NjIxNjY4OQorSTIxMTc2MTM0NjIKK0kxNzg3NDQ4NTE4CitJMTg3NTA4OTQxNgorSTIwMzcxNjUzODQKK0kxMTQwNjc2MzIxCitJMzYwNjI5NjQ2NAorSTMyMjkxMzgyMzEKK0kyNDU4MjY3MTMyCitJMTg3NDY1MTE3MQorSTMzMzE5MDA4NjcKK0kxMDAwNTU3NjU0CitJMTQzMjg2MTcwMQorSTQ3MzYzNjMyMworSTI2OTE3ODM5MjcKK0kxODcxNDM3NDQ3CitJMTMyODAxNjQwMQorSTQxMTg2OTAwNjIKK0k0NDk0Njc2MDIKK0k2ODE3ODkwMzUKK0k4NjQ4ODk0NDIKK0kxMjAwODg4OTI4CitJNzU3Njk0NDUKK0k0MDA4NjkwMDM3CitJMjQ2NDU3NzY2NworSTQxNjc3OTU4MjMKK0kzMDcwMDk3NjQ4CitJMjU3OTE3NDg4MgorSTEyMTY4ODY1NjgKK0kzODEwMTE2MzQzCitJMjI0OTUwNzQ4NQorSTMyNjY5MDM0ODAKK0kzNjcxMjMzNDgwCitJMTAwMTkxNjU4CitJMzA4NzEyMTMzNAorSTM2NTA2MzA4NworSTM4MjEyNzUxNzYKK0kyMTY1MDUyODQ4CitJMTI4MjQ2NTI0NQorSTM2MDE1NzA2MzcKK0kzMTMyNDEzMjM2CitJMjc4MDU3MDQ1OQorSTMyMjIxNDI5MTcKK0kzMTI5Nzk0NjkyCitJMjYxMTU5MDgxMQorSTk0NzAzMTY3NworSTI5OTE5MDg5MzgKK0k3NTA5OTc5NDkKK0kzNjMyNTc1MTMxCitJMTYzMjAxNDQ2MQorSTI4NDY0ODQ3NTUKK0kyMzQ3MjYxNzc5CitJMjkwMzk1OTQ0OAorSTEzOTczMTY2ODYKK0kxOTA0NTc4MzkyCitJNzc0NjQ5NTc4CitJMzE2NDU5ODU1OAorSTI0Mjk1ODc2MDkKK0k3MzgyNDQ1MTYKK0kxNTYzMzA0OTc1CitJMTM5OTMxNzQxNAorSTEwMjEzMTYyOTcKK0kzMTg3OTMzMjM0CitJMjEyNjc4MDc1NworSTQwMTE5MDc4NDcKK0k0MDk1MTY5MjE5CitJMzM1ODAxMDA1NAorSTI3Mjk5NzgyNDcKK0kzNzM2ODExNjQ2CitJMzAwOTY1NjQxMAorSTI4OTMwNDM2MzcKK0k0MDI3NDQ3Mzg1CitJMTIzOTYxMDExMAorSTE0ODg4MDY5MDAKK0kyNjc0ODY2ODQ0CitJNDQyODc2Mzc0CitJMjg1MzY4NzI2MAorSTI3ODU5MjEwMDUKK0kzMTUxMzc4NTI4CitJMTE4MDU2NworSTI4MDMxNDY5NjQKK0k5ODIyMjE3NTkKK0kyMTkyOTE5NDE3CitJMzA4NzAyNjE4MQorSTI0ODA4MzgwMDIKK0k3Mzg0NTI5MjEKK0k2ODc5ODYxODUKK0kzMDQ5MzcxNjc2CitJMzYzNjQ5Mjk1NAorSTM0NjgzMTEyOTkKK0kyMzc5NjIxMTAyCitJNzg4OTg4NjMzCitJMTY0MzIxMDYwMQorSTI5ODM5OTgxNjgKK0kyNDkyNzMwODAxCitJMjU4NjA0ODcwNQorSTYwNDA3MzAyOQorSTQxMjEwODI4MTUKK0kxNDk2NDc2OTI4CitJMjk3MjM1NzExMAorSTI2NjMxMTY5NjgKK0kyNjQyNjI4NTkyCitJMjExNjA1MjAzOQorSTQ4NzE4NjI3OQorSTI1Nzc2ODAzMjgKK0kzOTc0NzY2NjE0CitJNzMwNzc2NjM2CitJMzg0MjUyODg1NQorSTE5MjkwOTM2OTUKK0k0NDYyNjYyMgorSTM5ODk5MDg4MzMKK0kxNjk1NDI2MjIyCitJMzY3NTQ3OTM4MgorSTMwNTE3ODQ5NjQKK0kxNTE0ODc2NjEzCitJMTI1NDAzNjU5NQorSTI0MjA0NTA2NDkKK0kzMDM0Mzc3MzYxCitJMjMzMjk5MDU5MAorSTE1MzUxNzUxMjYKK0kxODU4MzQzODQKK0kxMTA3MzcyOTAwCitJMTcwNzI3ODE4NQorSTEyODYyODUyOTUKK0kzMzMyNTc0MjI1CitJMjc4NTY3MjQzNworSTg4MzE3MDY0NQorSTIwMDU2NjY0NzMKK0kzNDAzMTMxMzI3CitJNDEyMjAyMTM1MgorSTE0NjQwMzI4NTgKK0kzNzAyNTc2MTEyCitJMjYwNTU0NTk4CitJMTgzNzczMTY1MAorSTI1OTQ0MzUzNDUKK0k3NTc3MTA0OQorSTIwMTI0ODQyODkKK0kzMDU4NjQ5Nzc1CitJMjk5Nzk3MDMKK0kzODYxMzM1MzM1CitJMjUwNjQ5NTE1MgorSTM3ODY0NDg3MDQKK0k0NDI5NDc3OTAKK0kyNTgyNzI0Nzc0CitJNDI5MTMzNjI0MworSTI1NjgxODk4NDMKK0kxOTIzMDcyNjkwCitJMTEyMTU4OTYxMQorSTgzNzY5NjMwMgorSTMyODQ2MzE3MjAKK0kzODY1MDIxMzI0CitJMzU3NjQ1MzE2NQorSTI1NTk1MzE2MjkKK0kxNDU5MjMxNzYyCitJMzUwNjU1MDAzNgorSTM3NTQ0MjAxNTkKK0kyNjIyMDAwNzU3CitJMTI0MjI4NTk2CitJMTA4NDMyODYwNQorSTE2OTI4MzA3NTMKK0k1NDcyNzM1NTgKK0k2NzQyODI2MjEKK0k2NTUyNTkxMDMKK0kzMTg4NjI5NjEwCitJNDkwNTAyMTc0CitJMjA4MTAwMTI5MworSTMxOTEzMzA3MDQKK0k0MTA5OTQzNTkzCitJMTg1OTk0ODUwNAorSTMxNjM4MDY0NjAKK0k1MDg4MzMxNjgKK0kxMjU2MzcxMDMzCitJMjcwOTI1Mzc5MAorSTIwNjg5NTY1NzIKK0kzMDkyODQyODE0CitJMzkxMzkyNjUyOQorSTIwMzk2Mzg3NTkKK0k5ODE5ODI1MjkKK0k1MzYwOTQxOTAKK0kzNjg4NTUyOTUKK0k1MTk5Mzk3NQorSTE1OTc0ODA3MzIKK0k0MDU4MTc1NTIyCitJMjE1NTg5NjcwMgorSTMxOTYyNTE5OTEKK0kxMDgxOTEzODkzCitJMzk1MjM1Mzc4OAorSTM1NDU1NDgxMDgKK0kyMzcwNjY5NjQ3CitJMjIwNjU3MjMwOAorSTI1NzYzOTI5OTEKK0kxNzMyMzAzMzc0CitJMTE1MzEzNjI5MAorSTUzNzY0MTk1NQorSTE3Mzg2OTE3NDcKK0kzMjMyODU0MTg2CitJMjUzOTYzMjIwNgorSTI4Mjk3NjAyNzgKK0kzMDU4MTg3ODUzCitJMTIwMjQyNTc5MgorSTM3NjIzNjE5NzAKK0kyODYzOTQ5MzQyCitJMjY0MDYzNTg2NworSTM3NjYzODc0NAorSTE4NTc2Nzk3NTcKK0kzMzA3OTgwODcKK0kxNDU3NDAwNTA1CitJMTEzNTYxMDA0NgorSTYwNjQwMDcxNQorSTE4NTk1MzYwMjYKK0k1MDk4MTEzMzUKK0k1Mjk3NzIzMDgKK0kyNTc5MjczMjQ0CitJMTg5MDM4MjAwNAorSTM5NTk5MDg4NzYKK0kyNjEyMzM1OTcxCitJMjgzNDA1MjIyNworSTE0MzQ0NzU5ODYKK0kzNjg0MjAyNzE3CitJNDAxNTAxMTM0NQorSTU4MjU2Nzg1MgorSTM2ODk5Njk1NzEKK0kzOTM0NzUzNDYwCitJMzAzNDk2MDY5MQorSTIwODU3MzI5MgorSTQwMDQxMTM3NDIKK0kzOTkyOTA0ODQyCitJMjU4NzE1MzcxOQorSTM1MjkxNzkwNzkKK0kxNTY1NDI0OTg3CitJNzc5MTMwNjc4CitJMTA0ODU4MjkzNQorSTMyMTM1OTE2MjIKK0kzNjA3NzkzNDM0CitJMzk1MTI1NDkzNworSTIwNDc4MTE5MDEKK0k3NTA4ODUwCitJMjQ4NTQ0NjA1CitJNDIxMDA5MDMyNAorSTIzMzE0OTA4ODQKK0k3MDA1NzIxMworSTc3NjQ3NDk0NQorSTEzNDU1Mjg4ODkKK0kzMjkwNDAzNjEyCitJMTY2NDk1NTI2OQorSTE1MzMxNDMxMTYKK0k1NDUwMDM0MjQKK0k0MTQxNTY0NDc4CitJMTI1NzMyNjEzOQorSTg2ODg0MzYwMQorSTIzMzc2MDMwMjkKK0kxOTE4MTMxNDQ5CitJMTg0MzQzOTUyMworSTExMjU1MTkwMzUKK0k2NzMzNDAxMTgKK0k0MjE0MDg4NTIKK0kxNTIwNDU0OTA2CitJMTgwNDcyMjYzMAorSTM2MjEyNTQxOTYKK0kyMzI5OTY4MDAwCitJMzk0NjQ2NzIKK0k0MzA1ODMxMzQKK0kyOTQwMjY1MTIKK0k1Mzk3ODUyNQorSTI4OTIyNzYxMDUKK0kxNDE4ODYzNzY0CitJMzQxOTA1NDQ1MQorSTEzOTE1OTU3OTcKK0kzNTQ0OTgxNzk4CitJNDE5MTc4MDg1OAorSTgyNTY3MjM1NworSTI5NzIwMDA4NDQKK0kxNTcxMzA1MDY5CitJNDIzMTk4Mjg0NQorSTM2MTE5MTY0MTkKK0kzMDQ1MTYzMTY4CitJMjk4MjM0OTczMworSTI3ODU3MjE0MQorSTQyMTUzMzgwNzgKK0k4Mzk4NjA1MDQKK0kxODE5MTUxNzc5CitJMTQxMjM0NzQ3OQorSTEzODY3NzAzNTMKK0kzOTE0NTg5NDkxCitJMzc4MzEwNDk3NworSTQxMjQyOTY3MzMKK0k4MzA1NDYyNTgKK0k4OTgyNTYyNAorSTQxMTA2MDEzMjgKK0kyNTQ1NDgzNDI5CitJMzAwNjAwNTI3CitJNTE2NjQxMTU4CitJMzY5MzAyMTAzNAorSTI4NTI5MTI4NTQKK0kzMjQwMDM5ODY4CitJNDE2NzQwNzk1OQorSTE0Nzk1NTc5NDYKK0kzNjIxMTg4ODA0CitJMTM5MTU5MDk0NAorSTM1Nzg0NDExMjgKK0kxMjI3MDU1NTU2CitJNDA2ODk4Mzk2CitJMzA2NDA1NDk4MworSTI1ODM1MzM4CitJNDAyNjY0MTY1CitJNDA5NzY4Mjc3OQorSTIxMDY3MjgwMTIKK0kyMDM2MTM2MjIKK0kzMDQ1NDY3Njg2CitJMTM4MTcyNjQzOAorSTM3OTg2NzAxMTAKK0kxMzQyMzE0OTYxCitJMzU1MjQ5NzM2MQorSTUzNTkxMzYxOQorSTI2MjU3ODc1ODMKK0kxNjA2NTc0MzA3CitJMTEwMTI2OTYzMAorSTE5NTA1MTM3NTIKK0kxMTIxMzU1ODYyCitJMzU4NjgxNjkwMworSTQzODUyOTk4NAorSTI0NzMxODIxMjEKK0kxMjI5OTk3MjAzCitJNDA1NDQ1OTQwCitJMTY5NTUzNTMxNQorSTQyNzAxNDMzNgorSTM5MTY3Njg0MzAKK0kzOTIyOTgzNTkKK0kxODg0NjQyODY4CitJMTI0NDczMDgyMQorSTc0MTA1ODA4MAorSTU2NzQ3OTk1NworSTM1Mjc2MjExNjgKK0kzMTkxOTcxMDExCitJMzI2NzA2OTEwNAorSTQxMDg2NjgxNDYKK0kxNTIwNzk1NTg3CitJMTY2NTgxMDA2CitJNDczNzk0NDc3CitJMTU2MjEyNjU1MAorSTkyOTg0MzAxMAorSTg4OTUzMzI5NAorSTEyNjY1NTY2MDgKK0k4NzQ1MTg2NTAKK0kzNTIwMTYyMDkyCitJMzAxMzc2NTA0OQorSTQyMjAyMzE0MTQKK0k1NDcyNDY0NDkKK0kzOTk4MDkzNzY5CitJMzczNzE5Mzc0NgorSTM4NzI5NDQyMDcKK0k3OTM2NTE4NzYKK0kyNjA2Mzg0MzE4CitJODc1OTkxMDEyCitJMTM5NDgzNjMzNAorSTQxMDIwMTE2NDQKK0k4NTQzODA0MjYKK0kyNjE4NjY2NzY3CitJMjU2ODMwMjAwMAorSTE5OTU1MTIxMzIKK0kyMjk0OTEwOTMKK0kyNjczNTAwMjg2CitJMzM2NDU1MDczOQorSTM4MzY5MjM0MTYKK0kyNDM2NTY5ODcKK0kzOTQ0Mzg4OTgzCitJNDA2NDk0OTY3NworSTE0MTY5NTYzNzgKK0kxNzAzMjQ0NDg3CitJMzk5MDc5ODgyOQorSTIwMjM0MjU3ODEKK0kzOTI2NzAyMjE0CitJMTIyOTAxNTUwMQorSTMxNzQyNDc4MjQKK0k2MjQKK3RwMgorTnRwMworYi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvcmFuZHYzLnBjayBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yYW5kdjMucGNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZmMzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvcmFuZHYzLnBjawpAQCAtMCwwICsxLDYzMyBAQAorY3JhbmRvbQorUmFuZG9tCitwMAorKHRScDEKKyhJMworKEwyMTQ3NDgzNjQ4TAorTDk5NDA4MTgzMUwKK0wyODA2Mjg3MjY1TAorTDIyMjg5OTk4MzBMCitMMzM5NjQ5ODA2OUwKK0wyOTU2ODA1NDU3TAorTDMyNzM5Mjc3NjFMCitMOTIwNzI2NTA3TAorTDE4NjI2MjQ0OTJMCitMMjkyMTI5MjQ4NUwKK0wxNzc5NTI2ODQzTAorTDI0NjkxMDU1MDNMCitMMjUxNjk2MjkzTAorTDEyNTQzOTA3MTdMCitMNzc5MTk3MDgwTAorTDMxNjUzNTY4MzBMCitMMjAwNzM2NTIxOEwKK0wxODcwMDI4ODEyTAorTDI4OTY1MTkzNjNMCitMMTg1NTU3ODQzOEwKK0w5Nzk1MTg0MTZMCitMMzQ4MTcxMDI0NkwKK0wzMTkxODYxNTA3TAorTDM5OTMwMDY1OTNMCitMMjk2Nzk3MTQ3OUwKK0wzMzUzMzQyNzUzTAorTDM1NzY3ODI1NzJMCitMMzM5Njg1NTU4TAorTDIzNjc2NzU3MzJMCitMMTE2MjA4NTU1TAorTDEyMjAwNTQ0MzdMCitMNDg2NTk3MDU2TAorTDE5MTIxMTUxNDFMCitMMTAzNzA0NDc5MkwKK0w0MDk2OTA0NzIzTAorTDM0MDkxNDYxNzVMCitMMzcwMTY1MTIyN0wKK0wzMTU4MjQ2MTBMCitMNDEzODYwNDU4M0wKK0wxMzg1NzY0ODkyTAorTDE5MTg3ODkwMEwKK0wyMzIwNTgyMjE5TAorTDM0MjA2Nzc0OTRMCitMMjc3NjUwMzE2OUwKK0wxMTQ4MjQ3NDAzTAorTDgyOTU1NTA2OUwKK0w5MDIwNjQwMTJMCitMMjkzNDY0Mjc0MUwKK0wyNDc3MTA4NTc3TAorTDI1ODM5MjgyMTdMCitMMTY1ODYxMjU3OUwKK0wyODY1NDQ3OTEzTAorTDEyOTE0NzM0NkwKK0wzNjkxMTcxODg3TAorTDE1NjkzMjgxMTBMCitMMTM3Mjg2MDE0M0wKK0wxMDU0MTM5MTgzTAorTDE2MTc3MDcwODBMCitMNjkwMjA1OTJMCitMMzgxMDI3MTYwM0wKK0wxODUzOTUzNDE2TAorTDM0OTk4MDMwNzNMCitMMTAyNzU0NTAyN0wKK0wzMjI5MDQzNjA1TAorTDI1MDg0ODcyMEwKK0wzMzI0OTMyNjI2TAorTDM1MzcwMDI5NjJMCitMMjQ5NDMyMzM0NUwKK0wzMjM4MTAzOTYyTAorTDQxNDc1NDE1NzlMCitMMzYzNjM0ODE4NkwKK0wzMDI1NDU1MDgzTAorTDI2Nzg3NzE5NzdMCitMNTg0NzAwMjU2TAorTDM0NjE4MjY5MDlMCitMODU0NTExNDIwTAorTDk0MzQ2MzU1MkwKK0wzNjA5MjM5MDI1TAorTDM5Nzc1Nzc5ODlMCitMMjUzMDcwMDkwTAorTDc3NzM5NDU0NEwKK0wyMTQ0MDg2NTY3TAorTDEwOTI5NDc5OTJMCitMODU0MzI3Mjg0TAorTDIyMjI3NTAwODJMCitMMzYwMTgzNTEwTAorTDEzMTI0NjY0ODNMCitMMzIyNzUzMTA5MUwKK0wyMjM1MDIyNTAwTAorTDMwMTMwNjA1MzBMCitMMjU0MTA5MTI5OEwKK0wzNDgwMTI2MzQyTAorTDE4Mzk3NjI3NzVMCitMMjYzMjYwODE5MEwKK0wxMTA4ODg5NDAzTAorTDMwNDUwNTA5MjNMCitMNzMxNTEzMTI2TAorTDM1MDU0MzY3ODhMCitMMzA2Mjc2MjAxN0wKK0wxNjY3MzkyNjgwTAorTDEzNTQxMjY1MDBMCitMMTE0MzU3MzkzMEwKK0wyODE2NjQ1NzAyTAorTDIxMDAzNTY4NzNMCitMMjgxNzY3OTEwNkwKK0wxMjEwNzQ2MDEwTAorTDI0MDk5MTUyNDhMCitMMjkxMDExOTk2NEwKK0wyMzA5MDAxNDIwTAorTDIyMDM1MTgyNEwKK0wzNjY3MzUyODcxTAorTDM5OTMxNDg1OTBMCitMMjg4NjE2MDIzMkwKK0w0MjM5MzkzNzAxTAorTDExODkyNzA1ODFMCitMMzA2Nzk4NTU0MUwKK0wxNDczNzQ1NzNMCitMMjM1NTE2NDg2OUwKK0wzNjk2MDEzNTUwTAorTDQyMjcwMzc4NDZMCitMMTkwNTExMjc0M0wKK0wzMzEyODQzNjg5TAorTDI5MzA2NzgyNjZMCitMMTgyODc5NTM1NUwKK0w3NjkzMzU5NEwKK0wzOTg3MTAwNzk2TAorTDEyODgzNjE0MzVMCitMMzQ2NDUyOTE1MUwKK0w5NjU0OTgwNzlMCitMMTQ0NDYyMzA5M0wKK0wxMzcyODkzNDE1TAorTDE1MzYyMzU1OTdMCitMMTM0MTk5NDg1MEwKK0w5NjM1OTQ3NThMCitMMjExNTI5NTc1NEwKK0w5ODIwOTg2ODVMCitMMTA1MzQzMzkwNEwKK0wyMDc4NDY5ODQ0TAorTDMwNTk3NjU3OTJMCitMMTc1MzYwNjE4MUwKK0wyMTMwMTcxMjU0TAorTDU2NzU4ODE5NEwKK0w1Mjk2Mjk0MjZMCitMMzYyMTUyMzUzNEwKK0wzMDI3NTc2NTY0TAorTDExNzY0MzgwODNMCitMNDA5NjI4Nzg1OEwKK0wxMTY4NTc0NjgzTAorTDE0MjUwNTg5NjJMCitMMTQyOTYzMTY1NUwKK0wyOTAyMTA2NzU5TAorTDc2MTkwMDY0MUwKK0wxMzI5MTgzOTU2TAorTDE5NDcwNTA5MzJMCitMNDQ3NDkwMjg5TAorTDMyODI1MTYyNzZMCitMMjAwMDM3Mzg5TAorTDkyMTg2ODE5N0wKK0wzMzMxNDAzOTk5TAorTDQwODg3NjAyNDlMCitMMjE4ODMyNjMxOEwKK0wyODg0MDE5NjFMCitMMTM2MDgwMjY3NUwKK0wzMTQzMDI4MDhMCitMMzMxNDYzOTIxMEwKK0wzNzQ5ODIxMjAzTAorTDIyODYwODE1NzBMCitMMjc2ODkzOTA2MkwKK0wzMjAwNTQxMDE2TAorTDIxMzM0OTU0ODJMCitMMzg1MDI5ODgwTAorTDQyMTcyMzIyMDJMCitMMzE3MTYxNzIzMUwKK0wxNjYwODQ2NjUzTAorTDI0NTk5ODc2MjFMCitMMjY5MTc3NjEyNEwKK0w0MjI1MDMwNDA4TAorTDM1OTUzOTY3NzNMCitMMTEwMzY4MDY2MUwKK0w1MzkwNjQwNTdMCitMMTQ5Mjg0MTEwMUwKK0wxNjYxOTUzOTRMCitMNzU3OTczNjU4TAorTDUzMzg5MzA1NEwKK0wyNzg0ODc5NTk0TAorTDEwMjE4MjE4ODNMCitMMjM1MDU0ODE2MkwKK0wxNzY4NTIxMTZMCitMMzUwMzE2NjAyNUwKK0wxNDgwNzk5MTRMCitMMTYzMzQ2NjIzNkwKK0wyNzczMDkwMTY1TAorTDExNjI4NDY3MDFMCitMMzU3NTczNzc5NUwKK0wxNjI0MTc4MjM5TAorTDI0NTQ4OTQ3MTBMCitMMzAxNDY5MTkzOEwKK0w1MjYzNTU2NzlMCitMMTg3MDgyNDA4MUwKK0wzMzYyNDI1ODU3TAorTDM5MDc1NjY2NjVMCitMMzQ2MjU2MzE4NEwKK0wyMjI5MTEyMDA0TAorTDQyMDM3MzU3NDhMCitMMTU1NzQ0MjQ4MUwKK0w5MjQxMzM5OTlMCitMMTkwNjYzNDIxNEwKK0w4ODA0NTk3MjdMCitMNDA2NTg5NTg3MEwKK0wxNDE0MjYyNTRMCitMMTI1ODQ1MDE1OUwKK0wzMjQzMTE1MDI3TAorTDE1NzQ5NTg4NDBMCitMMzEzOTM5Mjk0TAorTDMwNTU2NjQyNjBMCitMMzQ1OTcxNDI1NUwKK0w1MzE3Nzg3OTBMCitMNTA5NTA1NTA2TAorTDE2MjAyMjc0OTFMCitMMjY3NTU1NDk0MkwKK0wyNTE2NTA5NTYwTAorTDM3OTcyOTk4ODdMCitMMjM3MTM1ODkwTAorTDMyMDMxNDIyMTNMCitMMTA4Nzc0NTMxMEwKK0wxODk3MTUxODU0TAorTDM5MzY1OTAwNDFMCitMMTMyNzY1MTY3TAorTDIzODU5MDgwNjNMCitMMTM2MDYwMDI4OUwKK0wzNTc0NTY3NzY5TAorTDI3NTI3ODgxMTRMCitMMjY0NDIyODk2NkwKK0wyMzc3NzA1MTgzTAorTDYwMTI3NzkwOUwKK0w0MDQ2NDgwNDk4TAorTDMyNDQwMTQwOEwKK0wzMjc5OTMxNzYwTAorTDIyMjcwNTkzNzdMCitMMTUzODgyNzQ5M0wKK0w0MjIwNTMyMDY0TAorTDQ3ODA0NDU2NEwKK0wyOTE3MTE3NzYxTAorTDYzNTQ5MjgzMkwKK0wyMzE5NzYzMjYxTAorTDc5NTk0NDIwNkwKK0wxODIwNDczMjM0TAorTDE2NzMxNTE0MDlMCitMMTQwNDA5NTQwMkwKK0wxNjYxMDY3NTA1TAorTDMyMTcxMDY5MzhMCitMMjQwNjMxMDY4M0wKK0wxOTMxMzA5MjQ4TAorTDI0NTg2MjI4NjhMCitMMzMyMzY3MDUyNEwKK0wzMjY2ODUyNzU1TAorTDI0MDA4Mzk0M0wKK0wzMTY4Mzg3Mzk3TAorTDYwNzcyMjE5OEwKK0wxMjU2ODM3NjkwTAorTDM2MDgxMjQ5MTNMCitMNDI0NDk2OTM1N0wKK0wxMjg5OTU5MjkzTAorTDUxOTc1MDMyOEwKK0wzMjI5NDgyNDYzTAorTDExMDUxOTY5ODhMCitMMTgzMjY4NDQ3OUwKK0wzNzYxMDM3MjI0TAorTDIzNjM2MzE4MjJMCitMMzI5Nzk1NzcxMUwKK0w1NzI3NjYzNTVMCitMMTE5NTgyMjEzN0wKK0wyMjM5MjA3OTgxTAorTDIwMzQyNDEyMDNMCitMMTYzNTQwNTE0TAorTDI4ODE2MDI1NUwKK0w3MTY0MDM2ODBMCitMNDAxOTQzOTE0M0wKK0wxNTM2MjgxOTM1TAorTDIzNDUxMDA0NThMCitMMjc4NjA1OTE3OEwKK0wyODIyMjMyMTA5TAorTDk4NzAyNTM5NUwKK0wzMDYxMTY2NTU5TAorTDQ5MDQyMjUxM0wKK0wyNTUxMDMwMTE1TAorTDI2Mzg3MDc2MjBMCitMMTM0NDcyODUwMkwKK0w3MTQxMDg5MTFMCitMMjgzMTcxOTcwMEwKK0wyMTg4NjE1MzY5TAorTDM3MzUwOTA2MUwKK0wxMzUxMDc3NTA0TAorTDMxMzYyMTcwNTZMCitMNzgzNTIxMDk1TAorTDI1NTQ5NDk0NjhMCitMMjY2MjQ5OTU1MEwKK0wxMjAzODI2OTUxTAorTDEzNzk2MzIzODhMCitMMTkxODg1ODk4NUwKK0w2MDc0NjU5NzZMCitMMTk4MDQ1MDIzN0wKK0wzNTQwMDc5MjExTAorTDMzOTc4MTM0MTBMCitMMjkxMzMwOTI2NkwKK0wyMjg5NTcyNjIxTAorTDQxMzM5MzUzMjdMCitMNDE2NjIyNzY2M0wKK0wzMzcxODAxNzA0TAorTDMwNjU0NzQ5MDlMCitMMzU4MDU2MjM0M0wKK0wzODMyMTcyMzc4TAorTDI1NTYxMzA3MTlMCitMMzEwNDczNzA1TAorTDM3MzQwMTQzNDZMCitMMjQ5MDQxMzgxMEwKK0wzNDcyMzMwNTZMCitMNTI2NjY4MDM3TAorTDExNTgzOTM2NTZMCitMNTQ0MzI5NzAzTAorTDIxNTAwODU0MTlMCitMMzkxNDAzODE0NkwKK0wxMDYwMjM3NTg2TAorTDQxNTkzOTQ4MzdMCitMMTEzMjA1MTIxTAorTDMwOTk2Njc3NUwKK0w0MDk4Nzg0NDY1TAorTDM2MzUyMjI5NjBMCitMMjQxNzUxNjU2OUwKK0wyMDg5NTc5MjMzTAorTDE3MjU4MDc1NDFMCitMMjcyODEyMjUyNkwKK0wyMzY1ODM2NTIzTAorTDI1MDQwNzg1MjJMCitMMTQ0Mzk0Njg2OUwKK0wyMzg0MTcxNDExTAorTDk5NzA0NjUzNEwKK0wzMjQ5MTMxNjU3TAorTDE2OTk4NzU5ODZMCitMMzYxODA5NzE0NkwKK0wxNzE2MDM4MjI0TAorTDI2Mjk4MTg2MDdMCitMMjkyOTIxNzg3NkwKK0wxMzY3MjUwMzE0TAorTDE3MjY0MzQ5NTFMCitMMTM4ODQ5NjMyNUwKK0wyMTA3NjAyMTgxTAorTDI4MjIzNjY4NDJMCitMMzA1Mjk3OTE5MEwKK0wzNzk2Nzk4NjMzTAorTDE1NDM4MTMzODFMCitMOTU5MDAwMTIxTAorTDEzNjM4NDU5OTlMCitMMjk1MjUyODE1MEwKK0w4NzQxODQ5MzJMCitMMTg4ODM4NzE5NEwKK0wyMzI4Njk1Mjk1TAorTDM0NDI5NTk4NTVMCitMODQxODA1OTQ3TAorTDEwODc3MzkyNzVMCitMMzIzMDAwNTQzNEwKK0wzMDQ1Mzk5MjY1TAorTDExNjE4MTczMThMCitMMjg5ODY3MzEzOUwKK0w4NjAwMTEwOTRMCitMOTQwNTM5NzgyTAorTDEyOTc4MTgwODBMCitMNDI0Mzk0MTYyM0wKK0wxNTc3NjEzMDMzTAorTDQyMDQxMzE4ODdMCitMMzgxOTA1NzIyNUwKK0wxOTY5NDM5NTU4TAorTDMyOTc5NjM5MzJMCitMMjQxODc0MDY5TAorTDM1MTcwMzM0NTNMCitMMjI5NTM0NTY2NEwKK0wxMDk4OTExNDIyTAorTDg4Njk1NTAwOEwKK0wxNDc3Mzk3NjIxTAorTDQyNzkzNDczMzJMCitMMzYxNjU1ODc5MUwKK0wyMzg0NDExOTU3TAorTDc0MjUzNzczMUwKK0w3NjQyMjE1NDBMCitMMjg3MTY5ODkwMEwKK0wzNTMwNjM2MzkzTAorTDY5MTI1NjY0NEwKK0w3NTg3MzA5NjZMCitMMTcxNzc3MzA5MEwKK0wyNzUxODU2Mzc3TAorTDMxODg0ODQwMDBMCitMMzc2NzQ2OTY3MEwKK0wxNjIzODYzMDUzTAorTDM1MzMyMzY3OTNMCitMNDA5OTI4NDE3NkwKK0w3MjM5MjExMDdMCitMMzEwNTk0MDM2TAorTDIyMzk3ODc0NUwKK0wyMjY2NTY1Nzc2TAorTDIwMTg0MzMwM0wKK0wyOTY5OTY4NTQ2TAorTDMzNTExNzA4ODhMCitMMzQ2NTExMzYyNEwKK0wyNzEyMjQ2NzEyTAorTDE1MjEzODMwNTdMCitMMjM4NDQ2MTc5OEwKK0wyMTYzNTc1NTFMCitMMjE2NzMwMTk3NUwKK0wzMTQ0NjUzMTk0TAorTDI3ODEyMjAxNTVMCitMMzYyMDc0NzY2NkwKK0w5NTk3MTI2NUwKK0w0MjU1NDAwMjQzTAorTDU5OTk5NzU3TAorTDQxNzQyNzM0NzJMCitMMzk3NDUxMTUyNEwKK0wxMDA3MTIzOTUwTAorTDMxMTI0Nzc2MjhMCitMODA2NDYxNTEyTAorTDMxNDgwNzQwMDhMCitMNTI4MzUyODgyTAorTDI1NDU5Nzk1ODhMCitMMjU2MjI4MTk2OUwKK0wzMDEwMjQ5NDc3TAorTDE4ODYzMzE2MTFMCitMMzIxMDY1NjQzM0wKK0wxMDM0MDk5OTc2TAorTDI5MDY4OTM1NzlMCitMMTE5NzA0ODc3OUwKK0wxODcwMDA0NDAxTAorTDM4OTgzMDA0OTBMCitMMjY4Njg1NjQwMkwKK0wzOTc1NzIzNDc4TAorTDYxMzA0MzUzMkwKK0wyNTY1Njc0MzUzTAorTDM3NjAwNDUzMTBMCitMMzQ2ODk4NDM3NkwKK0w0MTI2MjU4TAorTDMwMzg1NTQyNEwKK0wzOTg4OTYzNTUyTAorTDI3NjI1Njc5NkwKK0w1NDQwNzE4MDdMCitMMTAyMzg3MjA2MkwKK0wxNzQ3NDYxNTE5TAorTDE5NzU1NzEyNjBMCitMNDAzMzc2Njk1OEwKK0wyOTQ2NTU1NTU3TAorTDE0OTI5NTc3OTZMCitMOTU4MjcxNjg1TAorTDQ2NDgwNTE1TAorTDkwNzc2MDYzNUwKK0wxMzA2NjI2MzU3TAorTDgxOTY1MjM3OEwKK0wxMTcyMzAwMjc5TAorTDExMTY4NTEzMTlMCitMNDk1NjAxMDc1TAorTDExNTc3MTUzMzBMCitMNTM0MjIwMTA4TAorTDM3NzMyMDAyOEwKK0wxNjcyMjg2MTA2TAorTDIwNjYyMTkyODRMCitMMTg0MjM4NjM1NUwKK0wyNTQ2MDU5NDY0TAorTDE4Mzk0NTczMzZMCitMMzQ3NjE5NDQ0NkwKK0wzMDUwNTUwMDI4TAorTDU5NDcwNTU4MkwKK0wxOTA1ODEzNTM1TAorTDE4MTMwMzM0MTJMCitMMjcwMDg1ODE1N0wKK0wxNjkwNjc5NzJMCitMNDI1Mjg4OTA0NUwKK0wxOTIxOTQ0NTU1TAorTDQ5NzY3MTQ3NEwKK0wyMTAxNDM5MzVMCitMMjY4ODM5ODQ4OUwKK0wzMjUxNTgzNzVMCitMMzQ1MDg0NjQ0N0wKK0w4OTE3NjA1OTdMCitMNzEyODAyNTM2TAorTDExMzI1NTc0MzZMCitMMTQxNzA0NDA3NUwKK0wxNjM5ODg5NjYwTAorTDE3NDYzNzk5NzBMCitMMTQ3ODc0MTY0N0wKK0wyODE3NTYzNDg2TAorTDI1NzM2MTI1MzJMCitMNDI2NjQ0NDQ1N0wKK0wyOTExNjAxNjE1TAorTDgwNDc0NTQxMUwKK0wyMjA3MjU0NjUyTAorTDExODkxNDA2NDZMCitMMzgyOTcyNTExMUwKK0wzNjM3MzY3MzQ4TAorTDE5NDQ3MzE3NDdMCitMMjE5MzQ0MDM0M0wKK0wxNDMwMTk1NDEzTAorTDExNzM1MTUyMjlMCitMMTU4MjYxODIxN0wKK0wyMDcwNzY3MDM3TAorTDI0NzkwODkzNkwKK0wxNDYwNjc1NDM5TAorTDU1NjAwMTU5NkwKK0wzMjc2MjkzMzVMCitMMTAzNjEzMzg3NkwKK0w0MjI4MTI5NjA1TAorTDk5OTE3NDA0OEwKK0wzNjM1ODA0MDM5TAorTDE0MTY1NTA0ODFMCitMMTI3MDU0MDI2OUwKK0w0MjgwNzQzODE1TAorTDM5NjA3NjU5TAorTDE1NTI1NDA2MjNMCitMMjc2MjI5NDA2MkwKK0w1MDQxMzcyODlMCitMNDExNzA0NDIzOUwKK0wxNDE3MTMwMjI1TAorTDEzNDI5NzAwNTZMCitMMTc1NTcxNjQ0OUwKK0wxMTY5NDQ3MzIyTAorTDI3MzE0MDEzNTZMCitMMjMxOTk3Njc0NUwKK0wyODY5MjIxNDc5TAorTDIzOTcyNjU1TAorTDIyNTE0OTUzODlMCitMMTQyOTg2MDg3OEwKK0wzNzI4MTM1OTkyTAorTDQyNDE0MzI5NzNMCitMMzY5ODI3NTA3NkwKK0wyMTY0MTY0MzJMCitMNDA0MDA0Njk2MEwKK0wyNDYwNzcxNzZMCitMODk0Njc1Njg1TAorTDM5MzIyODIyNTlMCitMMzA5NzIwNTEwMEwKK0wyMTI4ODE4NjUwTAorTDEzMTkwMTA2NTZMCitMMTYwMTk3NDAwOUwKK0wyNTUyOTYwOTU3TAorTDM1NTQwMTYwNTVMCitMNDIwOTM5NTY0MUwKK0wyMDEzMzQwMTAyTAorTDMzNzA0NDc4MDFMCitMMjMwNzI3MjAwMkwKK0wxNzk1MDkxMzU0TAorTDIwMjEwOTQwMUwKK0w5ODgzNDUwNzBMCitMMjUxNDg3MDc1OEwKK0wxMTMyNzI2ODUwTAorTDU4Mjc0NjIyNEwKK0wzMTEyMzA1NDIxTAorTDE4NDMwMjA2ODNMCitMMzYwMDE4OTIyM0wKK0wxMTAxMzQ5MTY1TAorTDQyMTE5MDU4NTVMCitMMjg2NjY3NzU4MUwKK0wyODgxNjIxMTMwTAorTDQxNjUzMjQxMDlMCitMNDIzODc3MzE5MUwKK0wzNjM1NjQ5NTUwTAorTDI2NzA0ODEwNDRMCitMMjk5NjI0ODIxOUwKK0wxNjc2OTkyNDgwTAorTDM0NzMwNjcwNTBMCitMNDIwNTc5MzY5OUwKK0w0MDE5NDkwODk3TAorTDE1Nzk5OTA0ODFMCitMMTg5OTYxNzk5MEwKK0wxMTM2MzQ3NzEzTAorTDE4MDI4NDIyNjhMCitMMzU5MTc1Mjk2MEwKK0wxMTk3MzA4NzM5TAorTDQzMzYyOTc4NkwKK0w0MDMyMTQyNzkwTAorTDMxNDgwNDE5NzlMCitMMzMxMjEzODg0NUwKK0wzODk2ODYwNDQ5TAorTDMyOTgxODI1NjdMCitMOTA3NjA1MTcwTAorTDE2NTg2NjQwNjdMCitMMjY4Mjk4MDMxM0wKK0wyNTIzNTIzMTczTAorTDEyMDg3MjIxMDNMCitMMzgwODUzMDM2M0wKK0wxMDc5MDAzOTQ2TAorTDQyODI0MDI4NjRMCitMMjA0MTAxMDA3M0wKK0wyNjY3NTU1MDcxTAorTDY4ODAxODE4MEwKK0wxNDA1MTIxMDEyTAorTDQxNjc5OTQwNzZMCitMMzUwNDY5NTMzNkwKK0wxOTIzOTQ0NzQ5TAorTDExNDM1OTg3OTBMCitMMzkzNjI2ODg5OEwKK0wzNjA2MjQzODQ2TAorTDEwMTc0MjAwODBMCitMNDAyNjIxMTE2OUwKK0w1OTY1Mjk3NjNMCitMMTg0NDI1OTYyNEwKK0wyODQwMjE2MjgyTAorTDI2NzM4MDc3NTlMCitMMzQwNzIwMjU3NUwKK0wyNzM3OTcxMDgzTAorTDQwNzU0MjMwNjhMCitMMzY4NDA1NzQzMkwKK0wzMTQ2NjI3MjQxTAorTDU5OTY1MDUxM0wKK0w2OTc3MzExNEwKK0wxMjU3MDM1OTE5TAorTDgwNzQ4NTI5MUwKK0wyMzc2MjMwNjg3TAorTDMwMzY1OTMxNDdMCitMMjY0MjQxMTY1OEwKK0wxMDYwODAwNDRMCitMMjE5OTYyMjcyOUwKK0wyOTE4MzQ1MTFMCitMMjY5NzYxMTM2MUwKK0wxMTY4OTczM0wKK0w2MjUxMjM5NTJMCitMMzIyNjAyMzA2MkwKK0wzMjI5NjYzMjY1TAorTDc1MzA1OTQ0NEwKK0wyODQzNjEwMTg5TAorTDYyNEwKK3RwMgorTnRwMworYi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvcmVfdGVzdHMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvcmVfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjViMTIyOQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yZV90ZXN0cy5weQpAQCAtMCwwICsxLDY3NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIC0qLSBtb2RlOiBweXRob24gLSotCisKKyMgUmUgdGVzdCBzdWl0ZSBhbmQgYmVuY2htYXJrIHN1aXRlIHYxLjUKKworIyBUaGUgMyBwb3NzaWJsZSBvdXRjb21lcyBmb3IgZWFjaCBwYXR0ZXJuCitbU1VDQ0VFRCwgRkFJTCwgU1lOVEFYX0VSUk9SXSA9IHJhbmdlKDMpCisKKyMgQmVuY2htYXJrIHN1aXRlIChuZWVkcyBleHBhbnNpb24pCisjCisjIFRoZSBiZW5jaG1hcmsgc3VpdGUgZG9lcyBub3QgdGVzdCBjb3JyZWN0bmVzcywganVzdCBzcGVlZC4gIFRoZQorIyBmaXJzdCBlbGVtZW50IG9mIGVhY2ggdHVwbGUgaXMgdGhlIHJlZ2V4IHBhdHRlcm47IHRoZSBzZWNvbmQgaXMgYQorIyBzdHJpbmcgdG8gbWF0Y2ggaXQgYWdhaW5zdC4gIFRoZSBiZW5jaG1hcmtpbmcgY29kZSB3aWxsIGVtYmVkIHRoZQorIyBzZWNvbmQgc3RyaW5nIGluc2lkZSBzZXZlcmFsIHNpemVzIG9mIHBhZGRpbmcsIHRvIHRlc3QgaG93IHJlZ2V4CisjIG1hdGNoaW5nIHBlcmZvcm1zIG9uIGxhcmdlIHN0cmluZ3MuCisKK2JlbmNobWFya3MgPSBbCisKKyAgICAjIHRlc3QgY29tbW9uIHByZWZpeAorICAgICgnUHl0aG9ufFBlcmwnLCAnUGVybCcpLCAgICAjIEFsdGVybmF0aW9uCisgICAgKCcoUHl0aG9ufFBlcmwpJywgJ1BlcmwnKSwgICMgR3JvdXBlZCBhbHRlcm5hdGlvbgorCisgICAgKCdQeXRob258UGVybHxUY2wnLCAnUGVybCcpLCAgICAgICAgIyBBbHRlcm5hdGlvbgorICAgICgnKFB5dGhvbnxQZXJsfFRjbCknLCAnUGVybCcpLCAgICAgICMgR3JvdXBlZCBhbHRlcm5hdGlvbgorCisgICAgKCcoUHl0aG9uKVxcMScsICdQeXRob25QeXRob24nKSwgICAgIyBCYWNrcmVmZXJlbmNlCisgICAgKCcoWzBhLXpdW2EtejAtOV0qLCkrJywgJ2E1LGI3LGM5LCcpLCAjIERpc2FibGUgdGhlIGZhc3RtYXAgb3B0aW1pemF0aW9uCisgICAgKCcoW2Etel1bYS16MC05XSosKSsnLCAnYTUsYjcsYzksJyksICMgQSBmZXcgc2V0cworCisgICAgKCdQeXRob24nLCAnUHl0aG9uJyksICAgICAgICAgICAgICAgIyBTaW1wbGUgdGV4dCBsaXRlcmFsCisgICAgKCcuKlB5dGhvbicsICdQeXRob24nKSwgICAgICAgICAgICAgIyBCYWQgdGV4dCBsaXRlcmFsCisgICAgKCcuKlB5dGhvbi4qJywgJ1B5dGhvbicpLCAgICAgICAgICAgIyBXb3JzZSB0ZXh0IGxpdGVyYWwKKyAgICAoJy4qKFB5dGhvbiknLCAnUHl0aG9uJyksICAgICAgICAgICAjIEJhZCB0ZXh0IGxpdGVyYWwgd2l0aCBncm91cGluZworCitdCisKKyMgVGVzdCBzdWl0ZSAoZm9yIHZlcmlmeWluZyBjb3JyZWN0bmVzcykKKyMKKyMgVGhlIHRlc3Qgc3VpdGUgaXMgYSBsaXN0IG9mIDUtIG9yIDMtdHVwbGVzLiAgVGhlIDUgcGFydHMgb2YgYQorIyBjb21wbGV0ZSB0dXBsZSBhcmU6CisjIGVsZW1lbnQgMDogYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGF0dGVybgorIyAgICAgICAgIDE6IHRoZSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdCB0aGUgcGF0dGVybgorIyAgICAgICAgIDI6IHRoZSBleHBlY3RlZCByZXN1bHQgKFNVQ0NFRUQsIEZBSUwsIFNZTlRBWF9FUlJPUikKKyMgICAgICAgICAzOiBhIHN0cmluZyB0aGF0IHdpbGwgYmUgZXZhbCgpJ2VkIHRvIHByb2R1Y2UgYSB0ZXN0IHN0cmluZy4KKyMgICAgICAgICAgICBUaGlzIGlzIGFuIGFyYml0cmFyeSBQeXRob24gZXhwcmVzc2lvbjsgdGhlIGF2YWlsYWJsZQorIyAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgImZvdW5kIiAodGhlIHdob2xlIG1hdGNoKSwgYW5kICJnMSIsICJnMiIsIC4uLgorIyAgICAgICAgICAgIHVwIHRvICJnOTkiIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIGVhY2ggZ3JvdXAsIG9yIHRoZQorIyAgICAgICAgICAgIHN0cmluZyAnTm9uZScgaWYgdGhlIGdyb3VwIHdhc24ndCBnaXZlbiBhIHZhbHVlLCBvciB0aGUKKyMgICAgICAgICAgICBzdHJpbmcgJ0Vycm9yJyBpZiB0aGUgZ3JvdXAgaW5kZXggd2FzIG91dCBvZiByYW5nZTsKKyMgICAgICAgICAgICBhbHNvICJncm91cHMiLCB0aGUgcmV0dXJuIHZhbHVlIG9mIG0uZ3JvdXAoKSAoYSB0dXBsZSkuCisjICAgICAgICAgNDogVGhlIGV4cGVjdGVkIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uLgorIyAgICAgICAgICAgIElmIHRoZSB0d28gZG9uJ3QgbWF0Y2gsIGFuIGVycm9yIGlzIHJlcG9ydGVkLgorIworIyBJZiB0aGUgcmVnZXggaXNuJ3QgZXhwZWN0ZWQgdG8gd29yaywgdGhlIGxhdHRlciB0d28gZWxlbWVudHMgY2FuIGJlIG9taXR0ZWQuCisKK3Rlc3RzID0gWworICAgICMgVGVzdCA/UDwgYW5kID9QPSBleHRlbnNpb25zCisgICAgKCcoP1A8Zm9vXzEyMycsICcnLCBTWU5UQVhfRVJST1IpLCAgICAgICMgVW50ZXJtaW5hdGVkIGdyb3VwIGlkZW50aWZpZXIKKyAgICAoJyg/UDwxPmEpJywgJycsIFNZTlRBWF9FUlJPUiksICAgICAgICAgIyBCZWdpbnMgd2l0aCBhIGRpZ2l0CisgICAgKCcoP1A8IT5hKScsICcnLCBTWU5UQVhfRVJST1IpLCAgICAgICAgICMgQmVnaW5zIHdpdGggYW4gaWxsZWdhbCBjaGFyCisgICAgKCcoP1A8Zm9vIT5hKScsICcnLCBTWU5UQVhfRVJST1IpLCAgICAgICMgQmVnaW5zIHdpdGggYW4gaWxsZWdhbCBjaGFyCisKKyAgICAjIFNhbWUgdGVzdHMsIGZvciB0aGUgP1A9IGZvcm0KKyAgICAoJyg/UDxmb29fMTIzPmEpKD9QPWZvb18xMjMnLCAnYWEnLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9QPGZvb18xMjM+YSkoP1A9MSknLCAnYWEnLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9QPGZvb18xMjM+YSkoP1A9ISknLCAnYWEnLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9QPGZvb18xMjM+YSkoP1A9Zm9vXzEyNCcsICdhYScsIFNZTlRBWF9FUlJPUiksICAjIEJhY2tyZWYgdG8gdW5kZWZpbmVkIGdyb3VwCisKKyAgICAoJyg/UDxmb29fMTIzPmEpJywgJ2EnLCBTVUNDRUVELCAnZzEnLCAnYScpLAorICAgICgnKD9QPGZvb18xMjM+YSkoP1A9Zm9vXzEyMyknLCAnYWEnLCBTVUNDRUVELCAnZzEnLCAnYScpLAorCisgICAgIyBUZXN0IG9jdGFsIGVzY2FwZXMKKyAgICAoJ1xcMScsICdhJywgU1lOVEFYX0VSUk9SKSwgICAgIyBCYWNrcmVmZXJlbmNlCisgICAgKCdbXFwxXScsICdcMScsIFNVQ0NFRUQsICdmb3VuZCcsICdcMScpLCAgIyBDaGFyYWN0ZXIKKyAgICAoJ1xcMDknLCBjaHIoMCkgKyAnOScsIFNVQ0NFRUQsICdmb3VuZCcsIGNocigwKSArICc5JyksCisgICAgKCdcXDE0MScsICdhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EnKSwKKyAgICAoJyhhKShiKShjKShkKShlKShmKShnKShoKShpKShqKShrKShsKVxcMTE5JywgJ2FiY2RlZmdoaWprbGs5JywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMTEnLCAnYWJjZGVmZ2hpamtsazktaycpLAorCisgICAgIyBUZXN0IFwwIGlzIGhhbmRsZWQgZXZlcnl3aGVyZQorICAgIChyJ1wwJywgJ1wwJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1wwJyksCisgICAgKHInW1wwYV0nLCAnXDAnLCBTVUNDRUVELCAnZm91bmQnLCAnXDAnKSwKKyAgICAocidbYVwwXScsICdcMCcsIFNVQ0NFRUQsICdmb3VuZCcsICdcMCcpLAorICAgIChyJ1teYVwwXScsICdcMCcsIEZBSUwpLAorCisgICAgIyBUZXN0IHZhcmlvdXMgbGV0dGVyIGVzY2FwZXMKKyAgICAocidcYVtcYl1cZlxuXHJcdFx2JywgJ1xhXGJcZlxuXHJcdFx2JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1xhXGJcZlxuXHJcdFx2JyksCisgICAgKHInW1xhXVtcYl1bXGZdW1xuXVtccl1bXHRdW1x2XScsICdcYVxiXGZcblxyXHRcdicsIFNVQ0NFRUQsICdmb3VuZCcsICdcYVxiXGZcblxyXHRcdicpLAorICAgICMgTk9URTogbm90IGFuIGVycm9yIHVuZGVyIFBDUkUvUFJFOgorICAgICMgKHInXHUnLCAnJywgU1lOVEFYX0VSUk9SKSwgICAgIyBBIFBlcmwgZXNjYXBlCisgICAgKHInXGNcZVxnXGhcaVxqXGtcbVxvXHBccVx5XHonLCAnY2VnaGlqa21vcHF5eicsIFNVQ0NFRUQsICdmb3VuZCcsICdjZWdoaWprbW9wcXl6JyksCisgICAgKHInXHhmZicsICdcMzc3JywgU1VDQ0VFRCwgJ2ZvdW5kJywgY2hyKDI1NSkpLAorICAgICMgbmV3IFx4IHNlbWFudGljcworICAgIChyJ1x4MDBmZmZmZmZmZmZmZmZmZicsICdcMzc3JywgRkFJTCwgJ2ZvdW5kJywgY2hyKDI1NSkpLAorICAgIChyJ1x4MDBmJywgJ1wwMTcnLCBGQUlMLCAnZm91bmQnLCBjaHIoMTUpKSwKKyAgICAocidceDAwZmUnLCAnXDM3NicsIEZBSUwsICdmb3VuZCcsIGNocigyNTQpKSwKKyAgICAjIChyJ1x4MDBmZmZmZmZmZmZmZmZmZicsICdcMzc3JywgU1VDQ0VFRCwgJ2ZvdW5kJywgY2hyKDI1NSkpLAorICAgICMgKHInXHgwMGYnLCAnXDAxNycsIFNVQ0NFRUQsICdmb3VuZCcsIGNocigxNSkpLAorICAgICMgKHInXHgwMGZlJywgJ1wzNzYnLCBTVUNDRUVELCAnZm91bmQnLCBjaHIoMjU0KSksCisKKyAgICAociJeXHcrPShcXFtcMDAwLVwyNzddfFteXG5cXF0pKiIsICJTUkM9ZXZhbC5jIGcuYyBibGFoIGJsYWggYmxhaCBcXFxcXG5cdGFwZXMuYyIsCisgICAgIFNVQ0NFRUQsICdmb3VuZCcsICJTUkM9ZXZhbC5jIGcuYyBibGFoIGJsYWggYmxhaCBcXFxcIiksCisKKyAgICAjIFRlc3QgdGhhdCAuIG9ubHkgbWF0Y2hlcyBcbiBpbiBET1RBTEwgbW9kZQorICAgICgnYS5iJywgJ2FjYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhY2InKSwKKyAgICAoJ2EuYicsICdhXG5iJywgRkFJTCksCisgICAgKCdhLipiJywgJ2FjY1xuY2NiJywgRkFJTCksCisgICAgKCdhLns0LDV9YicsICdhY2NcbmNjYicsIEZBSUwpLAorICAgICgnYS5iJywgJ2FccmInLCBTVUNDRUVELCAnZm91bmQnLCAnYVxyYicpLAorICAgICgnYS5iKD9zKScsICdhXG5iJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FcbmInKSwKKyAgICAoJ2EuKig/cyliJywgJ2FjY1xuY2NiJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FjY1xuY2NiJyksCisgICAgKCcoP3MpYS57NCw1fWInLCAnYWNjXG5jY2InLCBTVUNDRUVELCAnZm91bmQnLCAnYWNjXG5jY2InKSwKKyAgICAoJyg/cylhLmInLCAnYVxuYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhXG5iJyksCisKKyAgICAoJyknLCAnJywgU1lOVEFYX0VSUk9SKSwgICAgICAgICAgICMgVW5tYXRjaGVkIHJpZ2h0IGJyYWNrZXQKKyAgICAoJycsICcnLCBTVUNDRUVELCAnZm91bmQnLCAnJyksICAgICMgRW1wdHkgcGF0dGVybgorICAgICgnYWJjJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2FiYycsICd4YmMnLCBGQUlMKSwKKyAgICAoJ2FiYycsICdheGMnLCBGQUlMKSwKKyAgICAoJ2FiYycsICdhYngnLCBGQUlMKSwKKyAgICAoJ2FiYycsICd4YWJjeScsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2FiYycsICdhYmFiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2FiKmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWIqYmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWIqYmMnLCAnYWJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJjJyksCisgICAgKCdhYipiYycsICdhYmJiYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJiYmJjJyksCisgICAgKCdhYitiYycsICdhYmJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYmMnKSwKKyAgICAoJ2FiK2JjJywgJ2FiYycsIEZBSUwpLAorICAgICgnYWIrYmMnLCAnYWJxJywgRkFJTCksCisgICAgKCdhYitiYycsICdhYmJiYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJiYmJjJyksCisgICAgKCdhYj9iYycsICdhYmJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYmMnKSwKKyAgICAoJ2FiP2JjJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2FiP2JjJywgJ2FiYmJiYycsIEZBSUwpLAorICAgICgnYWI/YycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdeYWJjJCcsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdeYWJjJCcsICdhYmNjJywgRkFJTCksCisgICAgKCdeYWJjJywgJ2FiY2MnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdeYWJjJCcsICdhYWJjJywgRkFJTCksCisgICAgKCdhYmMkJywgJ2FhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdeJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSInLCAnLScpLAorICAgICgnJCcsICdhYmMnLCBTVUNDRUVELCAnZm91bmQrIi0iJywgJy0nKSwKKyAgICAoJ2EuYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdhLmMnLCAnYXhjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2F4YycpLAorICAgICgnYS4qYycsICdheHl6YycsIFNVQ0NFRUQsICdmb3VuZCcsICdheHl6YycpLAorICAgICgnYS4qYycsICdheHl6ZCcsIEZBSUwpLAorICAgICgnYVtiY11kJywgJ2FiYycsIEZBSUwpLAorICAgICgnYVtiY11kJywgJ2FiZCcsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmQnKSwKKyAgICAoJ2FbYi1kXWUnLCAnYWJkJywgRkFJTCksCisgICAgKCdhW2ItZF1lJywgJ2FjZScsIFNVQ0NFRUQsICdmb3VuZCcsICdhY2UnKSwKKyAgICAoJ2FbYi1kXScsICdhYWMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWMnKSwKKyAgICAoJ2FbLWJdJywgJ2EtJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EtJyksCisgICAgKCdhW1xcLWJdJywgJ2EtJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EtJyksCisgICAgIyBOT1RFOiBub3QgYW4gZXJyb3IgdW5kZXIgUENSRS9QUkU6CisgICAgIyAoJ2FbYi1dJywgJ2EtJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ2FbXWInLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCdhWycsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ2FcXCcsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ2FiYyknLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoYWJjJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnYV0nLCAnYV0nLCBTVUNDRUVELCAnZm91bmQnLCAnYV0nKSwKKyAgICAoJ2FbXV1iJywgJ2FdYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhXWInKSwKKyAgICAoJ2FbXF1dYicsICdhXWInLCBTVUNDRUVELCAnZm91bmQnLCAnYV1iJyksCisgICAgKCdhW15iY11kJywgJ2FlZCcsIFNVQ0NFRUQsICdmb3VuZCcsICdhZWQnKSwKKyAgICAoJ2FbXmJjXWQnLCAnYWJkJywgRkFJTCksCisgICAgKCdhW14tYl1jJywgJ2FkYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhZGMnKSwKKyAgICAoJ2FbXi1iXWMnLCAnYS1jJywgRkFJTCksCisgICAgKCdhW15dYl1jJywgJ2FdYycsIEZBSUwpLAorICAgICgnYVteXWJdYycsICdhZGMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWRjJyksCisgICAgKCdcXGJhXFxiJywgJ2EtJywgU1VDQ0VFRCwgJyItIicsICctJyksCisgICAgKCdcXGJhXFxiJywgJy1hJywgU1VDQ0VFRCwgJyItIicsICctJyksCisgICAgKCdcXGJhXFxiJywgJy1hLScsIFNVQ0NFRUQsICciLSInLCAnLScpLAorICAgICgnXFxieVxcYicsICd4eScsIEZBSUwpLAorICAgICgnXFxieVxcYicsICd5eicsIEZBSUwpLAorICAgICgnXFxieVxcYicsICd4eXonLCBGQUlMKSwKKyAgICAoJ3hcXGInLCAneHl6JywgRkFJTCksCisgICAgKCd4XFxCJywgJ3h5eicsIFNVQ0NFRUQsICciLSInLCAnLScpLAorICAgICgnXFxCeicsICd4eXonLCBTVUNDRUVELCAnIi0iJywgJy0nKSwKKyAgICAoJ3pcXEInLCAneHl6JywgRkFJTCksCisgICAgKCdcXEJ4JywgJ3h5eicsIEZBSUwpLAorICAgICgnXFxCYVxcQicsICdhLScsIEZBSUwsICciLSInLCAnLScpLAorICAgICgnXFxCYVxcQicsICctYScsIEZBSUwsICciLSInLCAnLScpLAorICAgICgnXFxCYVxcQicsICctYS0nLCBGQUlMLCAnIi0iJywgJy0nKSwKKyAgICAoJ1xcQnlcXEInLCAneHknLCBGQUlMKSwKKyAgICAoJ1xcQnlcXEInLCAneXonLCBGQUlMKSwKKyAgICAoJ1xcQnlcXGInLCAneHknLCBTVUNDRUVELCAnIi0iJywgJy0nKSwKKyAgICAoJ1xcYnlcXEInLCAneXonLCBTVUNDRUVELCAnIi0iJywgJy0nKSwKKyAgICAoJ1xcQnlcXEInLCAneHl6JywgU1VDQ0VFRCwgJyItIicsICctJyksCisgICAgKCdhYnxjZCcsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWInKSwKKyAgICAoJ2FifGNkJywgJ2FiY2QnLCBTVUNDRUVELCAnZm91bmQnLCAnYWInKSwKKyAgICAoJygpZWYnLCAnZGVmJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdlZi0nKSwKKyAgICAoJyRiJywgJ2InLCBGQUlMKSwKKyAgICAoJ2FcXChiJywgJ2EoYicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYShiLUVycm9yJyksCisgICAgKCdhXFwoKmInLCAnYWInLCBTVUNDRUVELCAnZm91bmQnLCAnYWInKSwKKyAgICAoJ2FcXCgqYicsICdhKChiJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EoKGInKSwKKyAgICAoJ2FcXFxcYicsICdhXFxiJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FcXGInKSwKKyAgICAoJygoYSkpJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2EtYS1hJyksCisgICAgKCcoYSliKGMpJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2FiYy1hLWMnKSwKKyAgICAoJ2ErYitjJywgJ2FhYmJhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCcoYSt8YikqJywgJ2FiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYi1iJyksCisgICAgKCcoYSt8YikrJywgJ2FiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYi1iJyksCisgICAgKCcoYSt8Yik/JywgJ2FiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhLWEnKSwKKyAgICAoJykoJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnW15hYl0qJywgJ2NkZScsIFNVQ0NFRUQsICdmb3VuZCcsICdjZGUnKSwKKyAgICAoJ2FiYycsICcnLCBGQUlMKSwKKyAgICAoJ2EqJywgJycsIFNVQ0NFRUQsICdmb3VuZCcsICcnKSwKKyAgICAoJ2F8YnxjfGR8ZScsICdlJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2UnKSwKKyAgICAoJyhhfGJ8Y3xkfGUpZicsICdlZicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnZWYtZScpLAorICAgICgnYWJjZCplZmcnLCAnYWJjZGVmZycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmNkZWZnJyksCisgICAgKCdhYionLCAneGFieWFiYmJ6JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiJyksCisgICAgKCdhYionLCAneGF5YWJiYnonLCBTVUNDRUVELCAnZm91bmQnLCAnYScpLAorICAgICgnKGFifGNkKWUnLCAnYWJjZGUnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2NkZS1jZCcpLAorICAgICgnW2FiaGdlZmRjXWlqJywgJ2hpaicsIFNVQ0NFRUQsICdmb3VuZCcsICdoaWonKSwKKyAgICAoJ14oYWJ8Y2QpZScsICdhYmNkZScsIEZBSUwsICd4ZzF5JywgJ3h5JyksCisgICAgKCcoYWJjfCllZicsICdhYmNkZWYnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2VmLScpLAorICAgICgnKGF8YiljKmQnLCAnYWJjZCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYmNkLWInKSwKKyAgICAoJyhhYnxhYiopYmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYmMtYScpLAorICAgICgnYShbYmNdKiljKicsICdhYmMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiYy1iYycpLAorICAgICgnYShbYmNdKikoYypkKScsICdhYmNkJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnYWJjZC1iYy1kJyksCisgICAgKCdhKFtiY10rKShjKmQpJywgJ2FiY2QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdhYmNkLWJjLWQnKSwKKyAgICAoJ2EoW2JjXSopKGMrZCknLCAnYWJjZCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2FiY2QtYi1jZCcpLAorICAgICgnYVtiY2RdKmRjZGNkZScsICdhZGNkY2RlJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FkY2RjZGUnKSwKKyAgICAoJ2FbYmNkXStkY2RjZGUnLCAnYWRjZGNkZScsIEZBSUwpLAorICAgICgnKGFifGEpYipjJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJjLWFiJyksCisgICAgKCcoKGEpKGIpYykoZCknLCAnYWJjZCcsIFNVQ0NFRUQsICdnMSsiLSIrZzIrIi0iK2czKyItIitnNCcsICdhYmMtYS1iLWQnKSwKKyAgICAoJ1thLXpBLVpfXVthLXpBLVowLTlfXSonLCAnYWxwaGEnLCBTVUNDRUVELCAnZm91bmQnLCAnYWxwaGEnKSwKKyAgICAoJ15hKGJjK3xiW2VoXSlnfC5oJCcsICdhYmgnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2JoLU5vbmUnKSwKKyAgICAoJyhiYytkJHxlZipnLnxoP2koanxrKSknLCAnZWZmZ3onLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdlZmZnei1lZmZnei1Ob25lJyksCisgICAgKCcoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ2lqJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnaWotaWotaicpLAorICAgICgnKGJjK2QkfGVmKmcufGg/aShqfGspKScsICdlZmZnJywgRkFJTCksCisgICAgKCcoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ2JjZGQnLCBGQUlMKSwKKyAgICAoJyhiYytkJHxlZipnLnxoP2koanxrKSknLCAncmVmZmd6JywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnZWZmZ3otZWZmZ3otTm9uZScpLAorICAgICgnKCgoKCgoKCgoYSkpKSkpKSkpKScsICdhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EnKSwKKyAgICAoJ211bHRpcGxlIHdvcmRzIG9mIHRleHQnLCAndWgtdWgnLCBGQUlMKSwKKyAgICAoJ211bHRpcGxlIHdvcmRzJywgJ211bHRpcGxlIHdvcmRzLCB5ZWFoJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ211bHRpcGxlIHdvcmRzJyksCisgICAgKCcoLiopYyguKiknLCAnYWJjZGUnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdhYmNkZS1hYi1kZScpLAorICAgICgnXFwoKC4qKSwgKC4qKVxcKScsICcoYSwgYiknLCBTVUNDRUVELCAnZzIrIi0iK2cxJywgJ2ItYScpLAorICAgICgnW2tdJywgJ2FiJywgRkFJTCksCisgICAgKCdhWy1dP2MnLCAnYWMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWMnKSwKKyAgICAoJyhhYmMpXFwxJywgJ2FiY2FiYycsIFNVQ0NFRUQsICdnMScsICdhYmMnKSwKKyAgICAoJyhbYS1jXSopXFwxJywgJ2FiY2FiYycsIFNVQ0NFRUQsICdnMScsICdhYmMnKSwKKyAgICAoJ14oLispP0InLCAnQUInLCBTVUNDRUVELCAnZzEnLCAnQScpLAorICAgICgnKGErKS5cXDEkJywgJ2FhYWFhJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYWFhYS1hYScpLAorICAgICgnXihhKykuXFwxJCcsICdhYWFhJywgRkFJTCksCisgICAgKCcoYWJjKVxcMScsICdhYmNhYmMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiY2FiYy1hYmMnKSwKKyAgICAoJyhbYS1jXSspXFwxJywgJ2FiY2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJjYWJjLWFiYycpLAorICAgICgnKGEpXFwxJywgJ2FhJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYS1hJyksCisgICAgKCcoYSspXFwxJywgJ2FhJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYS1hJyksCisgICAgKCcoYSspK1xcMScsICdhYScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWEtYScpLAorICAgICgnKGEpLitcXDEnLCAnYWJhJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYmEtYScpLAorICAgICgnKGEpYmEqXFwxJywgJ2FiYScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJhLWEnKSwKKyAgICAoJyhhYXxhKWFcXDEkJywgJ2FhYScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWFhLWEnKSwKKyAgICAoJyhhfGFhKWFcXDEkJywgJ2FhYScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWFhLWEnKSwKKyAgICAoJyhhKylhXFwxJCcsICdhYWEnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FhYS1hJyksCisgICAgKCcoW2FiY10qKVxcMScsICdhYmNhYmMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiY2FiYy1hYmMnKSwKKyAgICAoJyhhKShiKWN8YWInLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdhYi1Ob25lLU5vbmUnKSwKKyAgICAoJyhhKSt4JywgJ2FhYXgnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FhYXgtYScpLAorICAgICgnKFthY10pK3gnLCAnYWFjeCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWFjeC1jJyksCisgICAgKCcoW14vXSovKSpzdWIxLycsICdkOm1zZ3MvdGRpci9zdWIxL3RyaWFsL2F3YXkuY3BwJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdkOm1zZ3MvdGRpci9zdWIxLy10ZGlyLycpLAorICAgICgnKFteLl0qKVxcLihbXjpdKik6W1QgXSsoLiopJywgJ3RyYWNrMS50aXRsZTpUQmxhaCBibGFoIGJsYWgnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMisiLSIrZzMnLCAndHJhY2sxLnRpdGxlOlRCbGFoIGJsYWggYmxhaC10cmFjazEtdGl0bGUtQmxhaCBibGFoIGJsYWgnKSwKKyAgICAoJyhbXk5dKk4pKycsICdhYk5OeHl6TicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJOTnh5ek4teHl6TicpLAorICAgICgnKFteTl0qTikrJywgJ2FiTk54eXonLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiTk4tTicpLAorICAgICgnKFthYmNdKil4JywgJ2FiY3gnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiY3gtYWJjJyksCisgICAgKCcoW2FiY10qKXgnLCAnYWJjJywgRkFJTCksCisgICAgKCcoW3h5el0qKXgnLCAnYWJjeCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAneC0nKSwKKyAgICAoJyhhKStifGFhYycsICdhYWMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FhYy1Ob25lJyksCisKKyAgICAjIFRlc3Qgc3ltYm9saWMgZ3JvdXBzCisKKyAgICAoJyg/UDxpIGQ+YWFhKWEnLCAnYWFhYScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP1A8aWQ+YWFhKWEnLCAnYWFhYScsIFNVQ0NFRUQsICdmb3VuZCsiLSIraWQnLCAnYWFhYS1hYWEnKSwKKyAgICAoJyg/UDxpZD5hYSkoP1A9aWQpJywgJ2FhYWEnLCBTVUNDRUVELCAnZm91bmQrIi0iK2lkJywgJ2FhYWEtYWEnKSwKKyAgICAoJyg/UDxpZD5hYSkoP1A9eGQpJywgJ2FhYWEnLCBTWU5UQVhfRVJST1IpLAorCisgICAgIyBUZXN0IG9jdGFsIGVzY2FwZXMvbWVtb3J5IHJlZmVyZW5jZXMKKworICAgICgnXFwxJywgJ2EnLCBTWU5UQVhfRVJST1IpLAorICAgICgnXFwwOScsIGNocigwKSArICc5JywgU1VDQ0VFRCwgJ2ZvdW5kJywgY2hyKDApICsgJzknKSwKKyAgICAoJ1xcMTQxJywgJ2EnLCBTVUNDRUVELCAnZm91bmQnLCAnYScpLAorICAgICgnKGEpKGIpKGMpKGQpKGUpKGYpKGcpKGgpKGkpKGopKGspKGwpXFwxMTknLCAnYWJjZGVmZ2hpamtsazknLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxMScsICdhYmNkZWZnaGlqa2xrOS1rJyksCisKKyAgICAjIEFsbCB0ZXN0cyBmcm9tIFBlcmwKKworICAgICgnYWJjJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2FiYycsICd4YmMnLCBGQUlMKSwKKyAgICAoJ2FiYycsICdheGMnLCBGQUlMKSwKKyAgICAoJ2FiYycsICdhYngnLCBGQUlMKSwKKyAgICAoJ2FiYycsICd4YWJjeScsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2FiYycsICdhYmFiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2FiKmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWIqYmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWIqYmMnLCAnYWJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJjJyksCisgICAgKCdhYipiYycsICdhYmJiYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJiYmJjJyksCisgICAgKCdhYnswLH1iYycsICdhYmJiYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJiYmJjJyksCisgICAgKCdhYitiYycsICdhYmJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYmMnKSwKKyAgICAoJ2FiK2JjJywgJ2FiYycsIEZBSUwpLAorICAgICgnYWIrYmMnLCAnYWJxJywgRkFJTCksCisgICAgKCdhYnsxLH1iYycsICdhYnEnLCBGQUlMKSwKKyAgICAoJ2FiK2JjJywgJ2FiYmJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJiYmMnKSwKKyAgICAoJ2FiezEsfWJjJywgJ2FiYmJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJiYmMnKSwKKyAgICAoJ2FiezEsM31iYycsICdhYmJiYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJiYmJjJyksCisgICAgKCdhYnszLDR9YmMnLCAnYWJiYmJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYmJiYycpLAorICAgICgnYWJ7NCw1fWJjJywgJ2FiYmJiYycsIEZBSUwpLAorICAgICgnYWI/YmMnLCAnYWJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJjJyksCisgICAgKCdhYj9iYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdhYnswLDF9YmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWI/YmMnLCAnYWJiYmJjJywgRkFJTCksCisgICAgKCdhYj9jJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2FiezAsMX1jJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ15hYmMkJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ15hYmMkJywgJ2FiY2MnLCBGQUlMKSwKKyAgICAoJ15hYmMnLCAnYWJjYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ15hYmMkJywgJ2FhYmMnLCBGQUlMKSwKKyAgICAoJ2FiYyQnLCAnYWFiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ14nLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJycpLAorICAgICgnJCcsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnJyksCisgICAgKCdhLmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYS5jJywgJ2F4YycsIFNVQ0NFRUQsICdmb3VuZCcsICdheGMnKSwKKyAgICAoJ2EuKmMnLCAnYXh5emMnLCBTVUNDRUVELCAnZm91bmQnLCAnYXh5emMnKSwKKyAgICAoJ2EuKmMnLCAnYXh5emQnLCBGQUlMKSwKKyAgICAoJ2FbYmNdZCcsICdhYmMnLCBGQUlMKSwKKyAgICAoJ2FbYmNdZCcsICdhYmQnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJkJyksCisgICAgKCdhW2ItZF1lJywgJ2FiZCcsIEZBSUwpLAorICAgICgnYVtiLWRdZScsICdhY2UnLCBTVUNDRUVELCAnZm91bmQnLCAnYWNlJyksCisgICAgKCdhW2ItZF0nLCAnYWFjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FjJyksCisgICAgKCdhWy1iXScsICdhLScsIFNVQ0NFRUQsICdmb3VuZCcsICdhLScpLAorICAgICgnYVtiLV0nLCAnYS0nLCBTVUNDRUVELCAnZm91bmQnLCAnYS0nKSwKKyAgICAoJ2FbYi1hXScsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ2FbXWInLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCdhWycsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ2FdJywgJ2FdJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FdJyksCisgICAgKCdhW11dYicsICdhXWInLCBTVUNDRUVELCAnZm91bmQnLCAnYV1iJyksCisgICAgKCdhW15iY11kJywgJ2FlZCcsIFNVQ0NFRUQsICdmb3VuZCcsICdhZWQnKSwKKyAgICAoJ2FbXmJjXWQnLCAnYWJkJywgRkFJTCksCisgICAgKCdhW14tYl1jJywgJ2FkYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhZGMnKSwKKyAgICAoJ2FbXi1iXWMnLCAnYS1jJywgRkFJTCksCisgICAgKCdhW15dYl1jJywgJ2FdYycsIEZBSUwpLAorICAgICgnYVteXWJdYycsICdhZGMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWRjJyksCisgICAgKCdhYnxjZCcsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWInKSwKKyAgICAoJ2FifGNkJywgJ2FiY2QnLCBTVUNDRUVELCAnZm91bmQnLCAnYWInKSwKKyAgICAoJygpZWYnLCAnZGVmJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdlZi0nKSwKKyAgICAoJyphJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnKCopYicsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyRiJywgJ2InLCBGQUlMKSwKKyAgICAoJ2FcXCcsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ2FcXChiJywgJ2EoYicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYShiLUVycm9yJyksCisgICAgKCdhXFwoKmInLCAnYWInLCBTVUNDRUVELCAnZm91bmQnLCAnYWInKSwKKyAgICAoJ2FcXCgqYicsICdhKChiJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EoKGInKSwKKyAgICAoJ2FcXFxcYicsICdhXFxiJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FcXGInKSwKKyAgICAoJ2FiYyknLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoYWJjJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnKChhKSknLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnYS1hLWEnKSwKKyAgICAoJyhhKWIoYyknLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnYWJjLWEtYycpLAorICAgICgnYStiK2MnLCAnYWFiYmFiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2F7MSx9YnsxLH1jJywgJ2FhYmJhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdhKionLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCdhLis/YycsICdhYmNhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCcoYSt8YikqJywgJ2FiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYi1iJyksCisgICAgKCcoYSt8Yil7MCx9JywgJ2FiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYi1iJyksCisgICAgKCcoYSt8YikrJywgJ2FiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYi1iJyksCisgICAgKCcoYSt8Yil7MSx9JywgJ2FiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYi1iJyksCisgICAgKCcoYSt8Yik/JywgJ2FiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhLWEnKSwKKyAgICAoJyhhK3xiKXswLDF9JywgJ2FiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhLWEnKSwKKyAgICAoJykoJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnW15hYl0qJywgJ2NkZScsIFNVQ0NFRUQsICdmb3VuZCcsICdjZGUnKSwKKyAgICAoJ2FiYycsICcnLCBGQUlMKSwKKyAgICAoJ2EqJywgJycsIFNVQ0NFRUQsICdmb3VuZCcsICcnKSwKKyAgICAoJyhbYWJjXSkqZCcsICdhYmJiY2QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiYmJjZC1jJyksCisgICAgKCcoW2FiY10pKmJjZCcsICdhYmNkJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYmNkLWEnKSwKKyAgICAoJ2F8YnxjfGR8ZScsICdlJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2UnKSwKKyAgICAoJyhhfGJ8Y3xkfGUpZicsICdlZicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnZWYtZScpLAorICAgICgnYWJjZCplZmcnLCAnYWJjZGVmZycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmNkZWZnJyksCisgICAgKCdhYionLCAneGFieWFiYmJ6JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiJyksCisgICAgKCdhYionLCAneGF5YWJiYnonLCBTVUNDRUVELCAnZm91bmQnLCAnYScpLAorICAgICgnKGFifGNkKWUnLCAnYWJjZGUnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2NkZS1jZCcpLAorICAgICgnW2FiaGdlZmRjXWlqJywgJ2hpaicsIFNVQ0NFRUQsICdmb3VuZCcsICdoaWonKSwKKyAgICAoJ14oYWJ8Y2QpZScsICdhYmNkZScsIEZBSUwpLAorICAgICgnKGFiY3wpZWYnLCAnYWJjZGVmJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdlZi0nKSwKKyAgICAoJyhhfGIpYypkJywgJ2FiY2QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2JjZC1iJyksCisgICAgKCcoYWJ8YWIqKWJjJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJjLWEnKSwKKyAgICAoJ2EoW2JjXSopYyonLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYmMtYmMnKSwKKyAgICAoJ2EoW2JjXSopKGMqZCknLCAnYWJjZCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2FiY2QtYmMtZCcpLAorICAgICgnYShbYmNdKykoYypkKScsICdhYmNkJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnYWJjZC1iYy1kJyksCisgICAgKCdhKFtiY10qKShjK2QpJywgJ2FiY2QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdhYmNkLWItY2QnKSwKKyAgICAoJ2FbYmNkXSpkY2RjZGUnLCAnYWRjZGNkZScsIFNVQ0NFRUQsICdmb3VuZCcsICdhZGNkY2RlJyksCisgICAgKCdhW2JjZF0rZGNkY2RlJywgJ2FkY2RjZGUnLCBGQUlMKSwKKyAgICAoJyhhYnxhKWIqYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiYy1hYicpLAorICAgICgnKChhKShiKWMpKGQpJywgJ2FiY2QnLCBTVUNDRUVELCAnZzErIi0iK2cyKyItIitnMysiLSIrZzQnLCAnYWJjLWEtYi1kJyksCisgICAgKCdbYS16QS1aX11bYS16QS1aMC05X10qJywgJ2FscGhhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FscGhhJyksCisgICAgKCdeYShiYyt8YltlaF0pZ3wuaCQnLCAnYWJoJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdiaC1Ob25lJyksCisgICAgKCcoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ2VmZmd6JywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnZWZmZ3otZWZmZ3otTm9uZScpLAorICAgICgnKGJjK2QkfGVmKmcufGg/aShqfGspKScsICdpaicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2lqLWlqLWonKSwKKyAgICAoJyhiYytkJHxlZipnLnxoP2koanxrKSknLCAnZWZmZycsIEZBSUwpLAorICAgICgnKGJjK2QkfGVmKmcufGg/aShqfGspKScsICdiY2RkJywgRkFJTCksCisgICAgKCcoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ3JlZmZneicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2VmZmd6LWVmZmd6LU5vbmUnKSwKKyAgICAoJygoKCgoKCgoKChhKSkpKSkpKSkpKScsICdhJywgU1VDQ0VFRCwgJ2cxMCcsICdhJyksCisgICAgKCcoKCgoKCgoKCgoYSkpKSkpKSkpKSlcXDEwJywgJ2FhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FhJyksCisjIFB5dGhvbiBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIHJ1bGVzIGZvciBcXDQxIHNvIHRoaXMgaXMgYSBzeW50YXggZXJyb3IKKyMgICAgKCcoKCgoKCgoKCgoYSkpKSkpKSkpKSlcXDQxJywgJ2FhJywgRkFJTCksCisjICAgICgnKCgoKCgoKCgoKGEpKSkpKSkpKSkpXFw0MScsICdhIScsIFNVQ0NFRUQsICdmb3VuZCcsICdhIScpLAorICAgICgnKCgoKCgoKCgoKGEpKSkpKSkpKSkpXFw0MScsICcnLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9pKSgoKCgoKCgoKChhKSkpKSkpKSkpKVxcNDEnLCAnJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJygoKCgoKCgoKGEpKSkpKSkpKSknLCAnYScsIFNVQ0NFRUQsICdmb3VuZCcsICdhJyksCisgICAgKCdtdWx0aXBsZSB3b3JkcyBvZiB0ZXh0JywgJ3VoLXVoJywgRkFJTCksCisgICAgKCdtdWx0aXBsZSB3b3JkcycsICdtdWx0aXBsZSB3b3JkcywgeWVhaCcsIFNVQ0NFRUQsICdmb3VuZCcsICdtdWx0aXBsZSB3b3JkcycpLAorICAgICgnKC4qKWMoLiopJywgJ2FiY2RlJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnYWJjZGUtYWItZGUnKSwKKyAgICAoJ1xcKCguKiksICguKilcXCknLCAnKGEsIGIpJywgU1VDQ0VFRCwgJ2cyKyItIitnMScsICdiLWEnKSwKKyAgICAoJ1trXScsICdhYicsIEZBSUwpLAorICAgICgnYVstXT9jJywgJ2FjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FjJyksCisgICAgKCcoYWJjKVxcMScsICdhYmNhYmMnLCBTVUNDRUVELCAnZzEnLCAnYWJjJyksCisgICAgKCcoW2EtY10qKVxcMScsICdhYmNhYmMnLCBTVUNDRUVELCAnZzEnLCAnYWJjJyksCisgICAgKCcoP2kpYWJjJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSlhYmMnLCAnWEJDJywgRkFJTCksCisgICAgKCcoP2kpYWJjJywgJ0FYQycsIEZBSUwpLAorICAgICgnKD9pKWFiYycsICdBQlgnLCBGQUlMKSwKKyAgICAoJyg/aSlhYmMnLCAnWEFCQ1knLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpYWJjJywgJ0FCQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKWFiKmMnLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKWFiKmJjJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSlhYipiYycsICdBQkJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQkMnKSwKKyAgICAoJyg/aSlhYio/YmMnLCAnQUJCQkJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQkJCQycpLAorICAgICgnKD9pKWFiezAsfT9iYycsICdBQkJCQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJCQkJDJyksCisgICAgKCcoP2kpYWIrP2JjJywgJ0FCQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJCQycpLAorICAgICgnKD9pKWFiK2JjJywgJ0FCQycsIEZBSUwpLAorICAgICgnKD9pKWFiK2JjJywgJ0FCUScsIEZBSUwpLAorICAgICgnKD9pKWFiezEsfWJjJywgJ0FCUScsIEZBSUwpLAorICAgICgnKD9pKWFiK2JjJywgJ0FCQkJCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkJCQkMnKSwKKyAgICAoJyg/aSlhYnsxLH0/YmMnLCAnQUJCQkJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQkJCQycpLAorICAgICgnKD9pKWFiezEsM30/YmMnLCAnQUJCQkJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQkJCQycpLAorICAgICgnKD9pKWFiezMsNH0/YmMnLCAnQUJCQkJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQkJCQycpLAorICAgICgnKD9pKWFiezQsNX0/YmMnLCAnQUJCQkJDJywgRkFJTCksCisgICAgKCcoP2kpYWI/P2JjJywgJ0FCQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJCQycpLAorICAgICgnKD9pKWFiPz9iYycsICdBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpYWJ7MCwxfT9iYycsICdBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpYWI/P2JjJywgJ0FCQkJCQycsIEZBSUwpLAorICAgICgnKD9pKWFiPz9jJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSlhYnswLDF9P2MnLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKV5hYmMkJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSleYWJjJCcsICdBQkNDJywgRkFJTCksCisgICAgKCcoP2kpXmFiYycsICdBQkNDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKV5hYmMkJywgJ0FBQkMnLCBGQUlMKSwKKyAgICAoJyg/aSlhYmMkJywgJ0FBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpXicsICdBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnJyksCisgICAgKCcoP2kpJCcsICdBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnJyksCisgICAgKCcoP2kpYS5jJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSlhLmMnLCAnQVhDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FYQycpLAorICAgICgnKD9pKWEuKj9jJywgJ0FYWVpDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FYWVpDJyksCisgICAgKCcoP2kpYS4qYycsICdBWFlaRCcsIEZBSUwpLAorICAgICgnKD9pKWFbYmNdZCcsICdBQkMnLCBGQUlMKSwKKyAgICAoJyg/aSlhW2JjXWQnLCAnQUJEJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCRCcpLAorICAgICgnKD9pKWFbYi1kXWUnLCAnQUJEJywgRkFJTCksCisgICAgKCcoP2kpYVtiLWRdZScsICdBQ0UnLCBTVUNDRUVELCAnZm91bmQnLCAnQUNFJyksCisgICAgKCcoP2kpYVtiLWRdJywgJ0FBQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQycpLAorICAgICgnKD9pKWFbLWJdJywgJ0EtJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0EtJyksCisgICAgKCcoP2kpYVtiLV0nLCAnQS0nLCBTVUNDRUVELCAnZm91bmQnLCAnQS0nKSwKKyAgICAoJyg/aSlhW2ItYV0nLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP2kpYVtdYicsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyg/aSlhWycsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyg/aSlhXScsICdBXScsIFNVQ0NFRUQsICdmb3VuZCcsICdBXScpLAorICAgICgnKD9pKWFbXV1iJywgJ0FdQicsIFNVQ0NFRUQsICdmb3VuZCcsICdBXUInKSwKKyAgICAoJyg/aSlhW15iY11kJywgJ0FFRCcsIFNVQ0NFRUQsICdmb3VuZCcsICdBRUQnKSwKKyAgICAoJyg/aSlhW15iY11kJywgJ0FCRCcsIEZBSUwpLAorICAgICgnKD9pKWFbXi1iXWMnLCAnQURDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FEQycpLAorICAgICgnKD9pKWFbXi1iXWMnLCAnQS1DJywgRkFJTCksCisgICAgKCcoP2kpYVteXWJdYycsICdBXUMnLCBGQUlMKSwKKyAgICAoJyg/aSlhW15dYl1jJywgJ0FEQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBREMnKSwKKyAgICAoJyg/aSlhYnxjZCcsICdBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUInKSwKKyAgICAoJyg/aSlhYnxjZCcsICdBQkNEJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCJyksCisgICAgKCcoP2kpKCllZicsICdERUYnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ0VGLScpLAorICAgICgnKD9pKSphJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9pKSgqKWInLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP2kpJGInLCAnQicsIEZBSUwpLAorICAgICgnKD9pKWFcXCcsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyg/aSlhXFwoYicsICdBKEInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ0EoQi1FcnJvcicpLAorICAgICgnKD9pKWFcXCgqYicsICdBQicsIFNVQ0NFRUQsICdmb3VuZCcsICdBQicpLAorICAgICgnKD9pKWFcXCgqYicsICdBKChCJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0EoKEInKSwKKyAgICAoJyg/aSlhXFxcXGInLCAnQVxcQicsIFNVQ0NFRUQsICdmb3VuZCcsICdBXFxCJyksCisgICAgKCcoP2kpYWJjKScsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyg/aSkoYWJjJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9pKSgoYSkpJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ0EtQS1BJyksCisgICAgKCcoP2kpKGEpYihjKScsICdBQkMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdBQkMtQS1DJyksCisgICAgKCcoP2kpYStiK2MnLCAnQUFCQkFCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSlhezEsfWJ7MSx9YycsICdBQUJCQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKWEqKicsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyg/aSlhLis/YycsICdBQkNBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpYS4qP2MnLCAnQUJDQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKWEuezAsNX0/YycsICdBQkNBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpKGErfGIpKicsICdBQicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQUItQicpLAorICAgICgnKD9pKShhK3xiKXswLH0nLCAnQUInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ0FCLUInKSwKKyAgICAoJyg/aSkoYSt8YikrJywgJ0FCJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdBQi1CJyksCisgICAgKCcoP2kpKGErfGIpezEsfScsICdBQicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQUItQicpLAorICAgICgnKD9pKShhK3xiKT8nLCAnQUInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ0EtQScpLAorICAgICgnKD9pKShhK3xiKXswLDF9JywgJ0FCJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdBLUEnKSwKKyAgICAoJyg/aSkoYSt8Yil7MCwxfT8nLCAnQUInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJy1Ob25lJyksCisgICAgKCcoP2kpKSgnLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP2kpW15hYl0qJywgJ0NERScsIFNVQ0NFRUQsICdmb3VuZCcsICdDREUnKSwKKyAgICAoJyg/aSlhYmMnLCAnJywgRkFJTCksCisgICAgKCcoP2kpYSonLCAnJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJycpLAorICAgICgnKD9pKShbYWJjXSkqZCcsICdBQkJCQ0QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ0FCQkJDRC1DJyksCisgICAgKCcoP2kpKFthYmNdKSpiY2QnLCAnQUJDRCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQUJDRC1BJyksCisgICAgKCcoP2kpYXxifGN8ZHxlJywgJ0UnLCBTVUNDRUVELCAnZm91bmQnLCAnRScpLAorICAgICgnKD9pKShhfGJ8Y3xkfGUpZicsICdFRicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnRUYtRScpLAorICAgICgnKD9pKWFiY2QqZWZnJywgJ0FCQ0RFRkcnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDREVGRycpLAorICAgICgnKD9pKWFiKicsICdYQUJZQUJCQlonLCBTVUNDRUVELCAnZm91bmQnLCAnQUInKSwKKyAgICAoJyg/aSlhYionLCAnWEFZQUJCQlonLCBTVUNDRUVELCAnZm91bmQnLCAnQScpLAorICAgICgnKD9pKShhYnxjZCllJywgJ0FCQ0RFJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdDREUtQ0QnKSwKKyAgICAoJyg/aSlbYWJoZ2VmZGNdaWonLCAnSElKJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0hJSicpLAorICAgICgnKD9pKV4oYWJ8Y2QpZScsICdBQkNERScsIEZBSUwpLAorICAgICgnKD9pKShhYmN8KWVmJywgJ0FCQ0RFRicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnRUYtJyksCisgICAgKCcoP2kpKGF8YiljKmQnLCAnQUJDRCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQkNELUInKSwKKyAgICAoJyg/aSkoYWJ8YWIqKWJjJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQUJDLUEnKSwKKyAgICAoJyg/aSlhKFtiY10qKWMqJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQUJDLUJDJyksCisgICAgKCcoP2kpYShbYmNdKikoYypkKScsICdBQkNEJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnQUJDRC1CQy1EJyksCisgICAgKCcoP2kpYShbYmNdKykoYypkKScsICdBQkNEJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnQUJDRC1CQy1EJyksCisgICAgKCcoP2kpYShbYmNdKikoYytkKScsICdBQkNEJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnQUJDRC1CLUNEJyksCisgICAgKCcoP2kpYVtiY2RdKmRjZGNkZScsICdBRENEQ0RFJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FEQ0RDREUnKSwKKyAgICAoJyg/aSlhW2JjZF0rZGNkY2RlJywgJ0FEQ0RDREUnLCBGQUlMKSwKKyAgICAoJyg/aSkoYWJ8YSliKmMnLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdBQkMtQUInKSwKKyAgICAoJyg/aSkoKGEpKGIpYykoZCknLCAnQUJDRCcsIFNVQ0NFRUQsICdnMSsiLSIrZzIrIi0iK2czKyItIitnNCcsICdBQkMtQS1CLUQnKSwKKyAgICAoJyg/aSlbYS16QS1aX11bYS16QS1aMC05X10qJywgJ0FMUEhBJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FMUEhBJyksCisgICAgKCcoP2kpXmEoYmMrfGJbZWhdKWd8LmgkJywgJ0FCSCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQkgtTm9uZScpLAorICAgICgnKD9pKShiYytkJHxlZipnLnxoP2koanxrKSknLCAnRUZGR1onLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdFRkZHWi1FRkZHWi1Ob25lJyksCisgICAgKCcoP2kpKGJjK2QkfGVmKmcufGg/aShqfGspKScsICdJSicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ0lKLUlKLUonKSwKKyAgICAoJyg/aSkoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ0VGRkcnLCBGQUlMKSwKKyAgICAoJyg/aSkoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ0JDREQnLCBGQUlMKSwKKyAgICAoJyg/aSkoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ1JFRkZHWicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ0VGRkdaLUVGRkdaLU5vbmUnKSwKKyAgICAoJyg/aSkoKCgoKCgoKCgoYSkpKSkpKSkpKSknLCAnQScsIFNVQ0NFRUQsICdnMTAnLCAnQScpLAorICAgICgnKD9pKSgoKCgoKCgoKChhKSkpKSkpKSkpKVxcMTAnLCAnQUEnLCBTVUNDRUVELCAnZm91bmQnLCAnQUEnKSwKKyAgICAjKCcoP2kpKCgoKCgoKCgoKGEpKSkpKSkpKSkpXFw0MScsICdBQScsIEZBSUwpLAorICAgICMoJyg/aSkoKCgoKCgoKCgoYSkpKSkpKSkpKSlcXDQxJywgJ0EhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0EhJyksCisgICAgKCcoP2kpKCgoKCgoKCgoYSkpKSkpKSkpKScsICdBJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0EnKSwKKyAgICAoJyg/aSkoPzooPzooPzooPzooPzooPzooPzooPzooPzooYSkpKSkpKSkpKSknLCAnQScsIFNVQ0NFRUQsICdnMScsICdBJyksCisgICAgKCcoP2kpKD86KD86KD86KD86KD86KD86KD86KD86KD86KGF8YnxjKSkpKSkpKSkpKScsICdDJywgU1VDQ0VFRCwgJ2cxJywgJ0MnKSwKKyAgICAoJyg/aSltdWx0aXBsZSB3b3JkcyBvZiB0ZXh0JywgJ1VILVVIJywgRkFJTCksCisgICAgKCcoP2kpbXVsdGlwbGUgd29yZHMnLCAnTVVMVElQTEUgV09SRFMsIFlFQUgnLCBTVUNDRUVELCAnZm91bmQnLCAnTVVMVElQTEUgV09SRFMnKSwKKyAgICAoJyg/aSkoLiopYyguKiknLCAnQUJDREUnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdBQkNERS1BQi1ERScpLAorICAgICgnKD9pKVxcKCguKiksICguKilcXCknLCAnKEEsIEIpJywgU1VDQ0VFRCwgJ2cyKyItIitnMScsICdCLUEnKSwKKyAgICAoJyg/aSlba10nLCAnQUInLCBGQUlMKSwKKyMgICAgKCcoP2kpYWJjZCcsICdBQkNEJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitcXGZvdW5kKyItIitcXFxcZm91bmQnLCAnQUJDRC0kJi1cXEFCQ0QnKSwKKyMgICAgKCcoP2kpYShiYylkJywgJ0FCQ0QnLCBTVUNDRUVELCAnZzErIi0iK1xcZzErIi0iK1xcXFxnMScsICdCQy0kMS1cXEJDJyksCisgICAgKCcoP2kpYVstXT9jJywgJ0FDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FDJyksCisgICAgKCcoP2kpKGFiYylcXDEnLCAnQUJDQUJDJywgU1VDQ0VFRCwgJ2cxJywgJ0FCQycpLAorICAgICgnKD9pKShbYS1jXSopXFwxJywgJ0FCQ0FCQycsIFNVQ0NFRUQsICdnMScsICdBQkMnKSwKKyAgICAoJ2EoPyFiKS4nLCAnYWJhZCcsIFNVQ0NFRUQsICdmb3VuZCcsICdhZCcpLAorICAgICgnYSg/PWQpLicsICdhYmFkJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FkJyksCisgICAgKCdhKD89Y3xkKS4nLCAnYWJhZCcsIFNVQ0NFRUQsICdmb3VuZCcsICdhZCcpLAorICAgICgnYSg/OmJ8Y3xkKSguKScsICdhY2UnLCBTVUNDRUVELCAnZzEnLCAnZScpLAorICAgICgnYSg/OmJ8Y3xkKSooLiknLCAnYWNlJywgU1VDQ0VFRCwgJ2cxJywgJ2UnKSwKKyAgICAoJ2EoPzpifGN8ZCkrPyguKScsICdhY2UnLCBTVUNDRUVELCAnZzEnLCAnZScpLAorICAgICgnYSg/OmJ8KGN8ZSl7MSwyfT98ZCkrPyguKScsICdhY2UnLCBTVUNDRUVELCAnZzEgKyBnMicsICdjZScpLAorICAgICgnXiguKyk/QicsICdBQicsIFNVQ0NFRUQsICdnMScsICdBJyksCisKKyAgICAjIGxvb2tiZWhpbmQ6IHNwbGl0IGJ5IDogYnV0IG5vdCBpZiBpdCBpcyBlc2NhcGVkIGJ5IC0uCisgICAgKCcoPzwhLSk6KC4qPykoPzwhLSk6JywgJ2E6YmMtOmRlOmYnLCBTVUNDRUVELCAnZzEnLCAnYmMtOmRlJyApLAorICAgICMgZXNjYXBpbmcgd2l0aCBcIGFzIHdlIGtub3cgaXQKKyAgICAoJyg/PCFcXFwpOiguKj8pKD88IVxcXCk6JywgJ2E6YmNcXDpkZTpmJywgU1VDQ0VFRCwgJ2cxJywgJ2JjXFw6ZGUnICksCisgICAgIyB0ZXJtaW5hdGluZyB3aXRoICcgYW5kIGVzY2FwaW5nIHdpdGggPyBhcyBpbiBlZGlmYWN0CisgICAgKCIoPzwhXFw/KScoLio/KSg/PCFcXD8pJyIsICJhJ2JjPydkZSdmIiwgU1VDQ0VFRCwgJ2cxJywgImJjPydkZSIgKSwKKworICAgICMgQ29tbWVudHMgdXNpbmcgdGhlICg/Iy4uLikgc3ludGF4CisKKyAgICAoJ3coPyMgY29tbWVudCcsICd3JywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ3coPyMgY29tbWVudCAxKXh5KD8jIGNvbW1lbnQgMil6JywgJ3d4eXonLCBTVUNDRUVELCAnZm91bmQnLCAnd3h5eicpLAorCisgICAgIyBDaGVjayBvZGQgcGxhY2VtZW50IG9mIGVtYmVkZGVkIHBhdHRlcm4gbW9kaWZpZXJzCisKKyAgICAjIG5vdCBhbiBlcnJvciB1bmRlciBQQ1JFL1BSRToKKyAgICAoJ3coP2kpJywgJ1cnLCBTVUNDRUVELCAnZm91bmQnLCAnVycpLAorICAgICMgKCd3KD9pKScsICdXJywgU1lOVEFYX0VSUk9SKSwKKworICAgICMgQ29tbWVudHMgdXNpbmcgdGhlIHggZW1iZWRkZWQgcGF0dGVybiBtb2RpZmllcgorCisgICAgKCIiIig/eCl3IyBjb21tZW50IDEKKyAgICAgICAgeCB5CisgICAgICAgICMgY29tbWVudCAyCisgICAgICAgIHoiIiIsICd3eHl6JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ3d4eXonKSwKKworICAgICMgdXNpbmcgdGhlIG0gZW1iZWRkZWQgcGF0dGVybiBtb2RpZmllcgorCisgICAgKCdeYWJjJywgIiIiamtsCithYmMKK3h5eiIiIiwgRkFJTCksCisgICAgKCcoP20pXmFiYycsICIiImprbAorYWJjCit4eXoiIiIsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKworICAgICgnKD9tKWFiYyQnLCAiIiJqa2wKK3h5emFiYworMTIzIiIiLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisKKyAgICAjIHVzaW5nIHRoZSBzIGVtYmVkZGVkIHBhdHRlcm4gbW9kaWZpZXIKKworICAgICgnYS5iJywgJ2FcbmInLCBGQUlMKSwKKyAgICAoJyg/cylhLmInLCAnYVxuYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhXG5iJyksCisKKyAgICAjIHRlc3QgXHcsIGV0Yy4gYm90aCBpbnNpZGUgYW5kIG91dHNpZGUgY2hhcmFjdGVyIGNsYXNzZXMKKworICAgICgnXFx3KycsICctLWFiX2NkMDEyMy0tJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiX2NkMDEyMycpLAorICAgICgnW1xcd10rJywgJy0tYWJfY2QwMTIzLS0nLCBTVUNDRUVELCAnZm91bmQnLCAnYWJfY2QwMTIzJyksCisgICAgKCdcXEQrJywgJzEyMzRhYmM1Njc4JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnW1xcRF0rJywgJzEyMzRhYmM1Njc4JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnW1xcZGEtZkEtRl0rJywgJzEyM2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICcxMjNhYmMnKSwKKyAgICAjIG5vdCBhbiBlcnJvciB1bmRlciBQQ1JFL1BSRToKKyAgICAjICgnW1xcZC14XScsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAocicoW1xzXSopKFtcU10qKShbXHNdKiknLCAnIHRlc3RpbmchMTk3MicsIFNVQ0NFRUQsICdnMytnMitnMScsICd0ZXN0aW5nITE5NzIgJyksCisgICAgKHInKFxzKikoXFMqKShccyopJywgJyB0ZXN0aW5nITE5NzInLCBTVUNDRUVELCAnZzMrZzIrZzEnLCAndGVzdGluZyExOTcyICcpLAorCisgICAgKHInXHhmZicsICdcMzc3JywgU1VDQ0VFRCwgJ2ZvdW5kJywgY2hyKDI1NSkpLAorICAgICMgbmV3IFx4IHNlbWFudGljcworICAgIChyJ1x4MDBmZicsICdcMzc3JywgRkFJTCksCisgICAgIyAocidceDAwZmYnLCAnXDM3NycsIFNVQ0NFRUQsICdmb3VuZCcsIGNocigyNTUpKSwKKyAgICAocidcdFxuXHZcclxmXGFcZycsICdcdFxuXHZcclxmXGFnJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1x0XG5cdlxyXGZcYWcnKSwKKyAgICAoJ1x0XG5cdlxyXGZcYVxnJywgJ1x0XG5cdlxyXGZcYWcnLCBTVUNDRUVELCAnZm91bmQnLCAnXHRcblx2XHJcZlxhZycpLAorICAgIChyJ1x0XG5cdlxyXGZcYScsICdcdFxuXHZcclxmXGEnLCBTVUNDRUVELCAnZm91bmQnLCBjaHIoOSkrY2hyKDEwKStjaHIoMTEpK2NocigxMykrY2hyKDEyKStjaHIoNykpLAorICAgIChyJ1tcdF1bXG5dW1x2XVtccl1bXGZdW1xiXScsICdcdFxuXHZcclxmXGInLCBTVUNDRUVELCAnZm91bmQnLCAnXHRcblx2XHJcZlxiJyksCisKKyAgICAjCisgICAgIyBwb3N0LTEuNS4yIGFkZGl0aW9ucworCisgICAgIyB4bWxsaWIgcHJvYmxlbQorICAgIChyJygoW2Etel0rKTopPyhbYS16XSspJCcsICdzbWlsJywgU1VDQ0VFRCwgJ2cxKyItIitnMisiLSIrZzMnLCAnTm9uZS1Ob25lLXNtaWwnKSwKKyAgICAjIGJ1ZyAxMTA4NjY6IHJlZmVyZW5jZSB0byB1bmRlZmluZWQgZ3JvdXAKKyAgICAocicoKC4pXDErKScsICcnLCBTWU5UQVhfRVJST1IpLAorICAgICMgYnVnIDExMTg2OTogc2VhcmNoIChQUkUvUENSRSBmYWlscyBvbiB0aGlzIG9uZSwgU1JFIGRvZXNuJ3QpCisgICAgKHInLipkJywgJ2FiY1xuYWJkJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiZCcpLAorICAgICMgYnVnIDExMjQ2ODogdmFyaW91cyBleHBlY3RlZCBzeW50YXggZXJyb3JzCisgICAgKHInKCcsICcnLCBTWU5UQVhfRVJST1IpLAorICAgIChyJ1tcNDFdJywgJyEnLCBTVUNDRUVELCAnZm91bmQnLCAnIScpLAorICAgICMgYnVnIDExNDAzMzogbm90aGluZyB0byByZXBlYXQKKyAgICAocicoeD8pPycsICd4JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ3gnKSwKKyAgICAjIGJ1ZyAxMTUwNDA6IHJlc2NhbiBpZiBmbGFncyBhcmUgbW9kaWZpZWQgaW5zaWRlIHBhdHRlcm4KKyAgICAocicgKD94KWZvbyAnLCAnZm9vJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2ZvbycpLAorICAgICMgYnVnIDExNTYxODogbmVnYXRpdmUgbG9va2FoZWFkCisgICAgKHInKD88IWFiYykoZC5mKScsICdhYmNkZWZkb2YnLCBTVUNDRUVELCAnZm91bmQnLCAnZG9mJyksCisgICAgIyBidWcgMTE2MjUxOiBjaGFyYWN0ZXIgY2xhc3MgYnVnCisgICAgKHInW1x3LV0rJywgJ2xhc2VyX2JlYW0nLCBTVUNDRUVELCAnZm91bmQnLCAnbGFzZXJfYmVhbScpLAorICAgICMgYnVnIDEyMzc2OSsxMjcyNTk6IG5vbi1ncmVlZHkgYmFja3RyYWNraW5nIGJ1ZworICAgIChyJy4qP1xTICo6JywgJ3h4OicsIFNVQ0NFRUQsICdmb3VuZCcsICd4eDonKSwKKyAgICAocidhWyBdKj9cIChcZCspLionLCAnYSAgIDEwJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EgICAxMCcpLAorICAgIChyJ2FbIF0qP1wgKFxkKykuKicsICdhICAgIDEwJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EgICAgMTAnKSwKKyAgICAjIGJ1ZyAxMjcyNTk6IFxaIHNob3VsZG4ndCBkZXBlbmQgb24gbXVsdGlsaW5lIG1vZGUKKyAgICAocicoP21zKS4qP3hccypcWiguKiknLCd4eFxueFxuJywgU1VDQ0VFRCwgJ2cxJywgJycpLAorICAgICMgYnVnIDEyODg5OTogdXBwZXJjYXNlIGxpdGVyYWxzIHVuZGVyIHRoZSBpZ25vcmVjYXNlIGZsYWcKKyAgICAocicoP2kpTSsnLCAnTU1NJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ01NTScpLAorICAgIChyJyg/aSltKycsICdNTU0nLCBTVUNDRUVELCAnZm91bmQnLCAnTU1NJyksCisgICAgKHInKD9pKVtNXSsnLCAnTU1NJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ01NTScpLAorICAgIChyJyg/aSlbbV0rJywgJ01NTScsIFNVQ0NFRUQsICdmb3VuZCcsICdNTU0nKSwKKyAgICAjIGJ1ZyAxMzA3NDg6IF4qIHNob3VsZCBiZSBhbiBlcnJvciAobm90aGluZyB0byByZXBlYXQpCisgICAgKHInXionLCAnJywgU1lOVEFYX0VSUk9SKSwKKyAgICAjIGJ1ZyAxMzMyODM6IG1pbmltaXppbmcgcmVwZWF0IHByb2JsZW0KKyAgICAociciKD86XFwifFteIl0pKj8iJywgciciXCIiJywgU1VDQ0VFRCwgJ2ZvdW5kJywgciciXCIiJyksCisgICAgIyBidWcgNDc3NzI4OiBtaW5pbWl6aW5nIHJlcGVhdCBwcm9ibGVtCisgICAgKHInXi4qPyQnLCAnb25lXG50d29cbnRocmVlXG4nLCBGQUlMKSwKKyAgICAjIGJ1ZyA0ODM3ODk6IG1pbmltaXppbmcgcmVwZWF0IHByb2JsZW0KKyAgICAocidhW14+XSo/YicsICdhPmInLCBGQUlMKSwKKyAgICAjIGJ1ZyA0OTA1NzM6IG1pbmltaXppbmcgcmVwZWF0IHByb2JsZW0KKyAgICAocideYSo/JCcsICdmb28nLCBGQUlMKSwKKyAgICAjIGJ1ZyA0NzA1ODI6IG5lc3RlZCBncm91cHMgcHJvYmxlbQorICAgIChyJ14oKGEpYyk/KGFiKSQnLCAnYWInLCBTVUNDRUVELCAnZzErIi0iK2cyKyItIitnMycsICdOb25lLU5vbmUtYWInKSwKKyAgICAjIGFub3RoZXIgbWluaW1pemluZyByZXBlYXQgcHJvYmxlbSAoY2FwdHVyaW5nIGdyb3VwcyBpbiBhc3NlcnRpb25zKQorICAgICgnXihbYWJdKj8pKD89KGIpPyljJywgJ2FiYycsIFNVQ0NFRUQsICdnMSsiLSIrZzInLCAnYWItTm9uZScpLAorICAgICgnXihbYWJdKj8pKD8hKGIpKWMnLCAnYWJjJywgU1VDQ0VFRCwgJ2cxKyItIitnMicsICdhYi1Ob25lJyksCisgICAgKCdeKFthYl0qPykoPzwhKGEpKWMnLCAnYWJjJywgU1VDQ0VFRCwgJ2cxKyItIitnMicsICdhYi1Ob25lJyksCitdCisKK3RyeToKKyAgICB1ID0gZXZhbCgidSdcTntMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTfSciKQorZXhjZXB0IFN5bnRheEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgdGVzdHMuZXh0ZW5kKFsKKyAgICAjIGJ1ZyA0MTAyNzE6IFxiIGJyb2tlbiB1bmRlciBsb2NhbGVzCisgICAgKHInXGIuXGInLCAnYScsIFNVQ0NFRUQsICdmb3VuZCcsICdhJyksCisgICAgKHInKD91KVxiLlxiJywgdSwgU1VDQ0VFRCwgJ2ZvdW5kJywgdSksCisgICAgKHInKD91KVx3JywgdSwgU1VDQ0VFRCwgJ2ZvdW5kJywgdSksCisgICAgXSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yZWdydGVzdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yZWdydGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTcwOWY3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CkBAIC0wLDAgKzEsMTU2MiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiIKK1VzYWdlOgorCitweXRob24gLW0gdGVzdC5yZWdydGVzdCBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgW3Rlc3RfbmFtZTIgLi4uXV0KK3B5dGhvbiBwYXRoL3RvL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5IFtvcHRpb25zXSBbdGVzdF9uYW1lMSBbdGVzdF9uYW1lMiAuLi5dXQorCisKK0lmIG5vIGFyZ3VtZW50cyBvciBvcHRpb25zIGFyZSBwcm92aWRlZCwgZmluZHMgYWxsIGZpbGVzIG1hdGNoaW5nCit0aGUgcGF0dGVybiAidGVzdF8qIiBpbiB0aGUgTGliL3Rlc3Qgc3ViZGlyZWN0b3J5IGFuZCBydW5zCit0aGVtIGluIGFscGhhYmV0aWNhbCBvcmRlciAoYnV0IHNlZSAtTSBhbmQgLXUsIGJlbG93LCBmb3IgZXhjZXB0aW9ucykuCisKK0ZvciBtb3JlIHJpZ29yb3VzIHRlc3RpbmcsIGl0IGlzIHVzZWZ1bCB0byB1c2UgdGhlIGZvbGxvd2luZworY29tbWFuZCBsaW5lOgorCitweXRob24gLUUgLXR0IC1XZCAtMyAtbSB0ZXN0LnJlZ3J0ZXN0IFtvcHRpb25zXSBbdGVzdF9uYW1lMSAuLi5dCisKKworT3B0aW9uczoKKworLWgvLS1oZWxwICAgICAgIC0tIHByaW50IHRoaXMgdGV4dCBhbmQgZXhpdAorCitWZXJib3NpdHkKKworLXYvLS12ZXJib3NlICAgIC0tIHJ1biB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUgd2l0aCBvdXRwdXQgdG8gc3Rkb3V0Cistdy8tLXZlcmJvc2UyICAgLS0gcmUtcnVuIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUKKy1XLy0tdmVyYm9zZTMgICAtLSByZS1ydW4gZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZSBpbW1lZGlhdGVseQorLXEvLS1xdWlldCAgICAgIC0tIG5vIG91dHB1dCB1bmxlc3Mgb25lIG9yIG1vcmUgdGVzdHMgZmFpbAorLVMvLS1zbG93ICAgICAgIC0tIHByaW50IHRoZSBzbG93ZXN0IDEwIHRlc3RzCisgICAtLWhlYWRlciAgICAgLS0gcHJpbnQgaGVhZGVyIHdpdGggaW50ZXJwcmV0ZXIgaW5mbworCitTZWxlY3RpbmcgdGVzdHMKKworLXIvLS1yYW5kb21pemUgIC0tIHJhbmRvbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBvcmRlciAoc2VlIGJlbG93KQorICAgLS1yYW5kc2VlZCAgIC0tIHBhc3MgYSByYW5kb20gc2VlZCB0byByZXByb2R1Y2UgYSBwcmV2aW91cyByYW5kb20gcnVuCistZi8tLWZyb21maWxlICAgLS0gcmVhZCBuYW1lcyBvZiB0ZXN0cyB0byBydW4gZnJvbSBhIGZpbGUgKHNlZSBiZWxvdykKKy14Ly0tZXhjbHVkZSAgICAtLSBhcmd1bWVudHMgYXJlIHRlc3RzIHRvICpleGNsdWRlKgorLXMvLS1zaW5nbGUgICAgIC0tIHNpbmdsZSBzdGVwIHRocm91Z2ggYSBzZXQgb2YgdGVzdHMgKHNlZSBiZWxvdykKKy11Ly0tdXNlIFJFUzEsUkVTMiwuLi4KKyAgICAgICAgICAgICAgICAtLSBzcGVjaWZ5IHdoaWNoIHNwZWNpYWwgcmVzb3VyY2UgaW50ZW5zaXZlIHRlc3RzIHRvIHJ1bgorLU0vLS1tZW1saW1pdCBMSU1JVAorICAgICAgICAgICAgICAgIC0tIHJ1biB2ZXJ5IGxhcmdlIG1lbW9yeS1jb25zdW1pbmcgdGVzdHMKKworU3BlY2lhbCBydW5zCisKKy1sLy0tZmluZGxlYWtzICAtLSBpZiBHQyBpcyBhdmFpbGFibGUgZGV0ZWN0IHRlc3RzIHRoYXQgbGVhayBtZW1vcnkKKy1MLy0tcnVubGVha3MgICAtLSBydW4gdGhlIGxlYWtzKDEpIGNvbW1hbmQganVzdCBiZWZvcmUgZXhpdAorLVIvLS1odW50cmxlYWtzIFJVTkNPVU5UUworICAgICAgICAgICAgICAgIC0tIHNlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgdi4gc2xvdykKKy1qLy0tbXVsdGlwcm9jZXNzIFBST0NFU1NFUworICAgICAgICAgICAgICAgIC0tIHJ1biBQUk9DRVNTRVMgcHJvY2Vzc2VzIGF0IG9uY2UKKy1ULy0tY292ZXJhZ2UgICAtLSB0dXJuIG9uIGNvZGUgY292ZXJhZ2UgdHJhY2luZyB1c2luZyB0aGUgdHJhY2UgbW9kdWxlCistRC8tLWNvdmVyZGlyIERJUkVDVE9SWQorICAgICAgICAgICAgICAgIC0tIERpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0CistTi8tLW5vY292ZXJkaXIgLS0gUHV0IGNvdmVyYWdlIGZpbGVzIGFsb25nc2lkZSBtb2R1bGVzCistdC8tLXRocmVzaG9sZCBUSFJFU0hPTEQKKyAgICAgICAgICAgICAgICAtLSBjYWxsIGdjLnNldF90aHJlc2hvbGQoVEhSRVNIT0xEKQorLUYvLS1mb3JldmVyICAgIC0tIHJ1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gZXJyb3IgaGFwcGVucworCisKK0FkZGl0aW9uYWwgT3B0aW9uIERldGFpbHM6CisKKy1yIHJhbmRvbWl6ZXMgdGVzdCBleGVjdXRpb24gb3JkZXIuIFlvdSBjYW4gdXNlIC0tcmFuZHNlZWQ9aW50IHRvIHByb3ZpZGUgYQoraW50IHNlZWQgdmFsdWUgZm9yIHRoZSByYW5kb21pemVyOyB0aGlzIGlzIHVzZWZ1bCBmb3IgcmVwcm9kdWNpbmcgdHJvdWJsZXNvbWUKK3Rlc3Qgb3JkZXJzLgorCistcyBPbiB0aGUgZmlyc3QgaW52b2NhdGlvbiBvZiByZWdydGVzdCB1c2luZyAtcywgdGhlIGZpcnN0IHRlc3QgZmlsZSBmb3VuZAorb3IgdGhlIGZpcnN0IHRlc3QgZmlsZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGlzIHJ1biwgYW5kIHRoZSBuYW1lIG9mCit0aGUgbmV4dCB0ZXN0IGlzIHJlY29yZGVkIGluIGEgZmlsZSBuYW1lZCBweW5leHR0ZXN0LiAgSWYgcnVuIGZyb20gdGhlCitQeXRob24gYnVpbGQgZGlyZWN0b3J5LCBweW5leHR0ZXN0IGlzIGxvY2F0ZWQgaW4gdGhlICdidWlsZCcgc3ViZGlyZWN0b3J5LAorb3RoZXJ3aXNlIGl0IGlzIGxvY2F0ZWQgaW4gdGVtcGZpbGUuZ2V0dGVtcGRpcigpLiAgT24gc3Vic2VxdWVudCBydW5zLAordGhlIHRlc3QgaW4gcHluZXh0dGVzdCBpcyBydW4sIGFuZCB0aGUgbmV4dCB0ZXN0IGlzIHdyaXR0ZW4gdG8gcHluZXh0dGVzdC4KK1doZW4gdGhlIGxhc3QgdGVzdCBoYXMgYmVlbiBydW4sIHB5bmV4dHRlc3QgaXMgZGVsZXRlZC4gIEluIHRoaXMgd2F5IGl0CitpcyBwb3NzaWJsZSB0byBzaW5nbGUgc3RlcCB0aHJvdWdoIHRoZSB0ZXN0IGZpbGVzLiAgVGhpcyBpcyB1c2VmdWwgd2hlbgorZG9pbmcgbWVtb3J5IGFuYWx5c2lzIG9uIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIsIHdoaWNoIHByb2Nlc3MgdGVuZHMgdG8KK2NvbnN1bWUgdG9vIG1hbnkgcmVzb3VyY2VzIHRvIHJ1biB0aGUgZnVsbCByZWdyZXNzaW9uIHRlc3Qgbm9uLXN0b3AuCisKKy1mIHJlYWRzIHRoZSBuYW1lcyBvZiB0ZXN0cyBmcm9tIHRoZSBmaWxlIGdpdmVuIGFzIGYncyBhcmd1bWVudCwgb25lCitvciBtb3JlIHRlc3QgbmFtZXMgcGVyIGxpbmUuICBXaGl0ZXNwYWNlIGlzIGlnbm9yZWQuICBCbGFuayBsaW5lcyBhbmQKK2xpbmVzIGJlZ2lubmluZyB3aXRoICcjJyBhcmUgaWdub3JlZC4gIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yCit3aGl0dGxpbmcgZG93biBmYWlsdXJlcyBpbnZvbHZpbmcgaW50ZXJhY3Rpb25zIGFtb25nIHRlc3RzLgorCistTCBjYXVzZXMgdGhlIGxlYWtzKDEpIGNvbW1hbmQgdG8gYmUgcnVuIGp1c3QgYmVmb3JlIGV4aXQgaWYgaXQgZXhpc3RzLgorbGVha3MoMSkgaXMgYXZhaWxhYmxlIG9uIE1hYyBPUyBYIGFuZCBwcmVzdW1hYmx5IG9uIHNvbWUgb3RoZXIKK0ZyZWVCU0QtZGVyaXZlZCBzeXN0ZW1zLgorCistUiBydW5zIGVhY2ggdGVzdCBzZXZlcmFsIHRpbWVzIGFuZCBleGFtaW5lcyBzeXMuZ2V0dG90YWxyZWZjb3VudCgpIHRvCitzZWUgaWYgdGhlIHRlc3QgYXBwZWFycyB0byBiZSBsZWFraW5nIHJlZmVyZW5jZXMuICBUaGUgYXJndW1lbnQgc2hvdWxkCitiZSBvZiB0aGUgZm9ybSBzdGFiOnJ1bjpmbmFtZSB3aGVyZSAnc3RhYicgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUKK3Rlc3QgaXMgcnVuIHRvIGxldCBnZXR0b3RhbHJlZmNvdW50IHNldHRsZSBkb3duLCAncnVuJyBpcyB0aGUgbnVtYmVyCitvZiB0aW1lcyBmdXJ0aGVyIGl0IGlzIHJ1biBhbmQgJ2ZuYW1lJyBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGUKK3JlcG9ydHMgYXJlIHdyaXR0ZW4gdG8uICBUaGVzZSBwYXJhbWV0ZXJzIGFsbCBoYXZlIGRlZmF1bHRzICg1LCA0IGFuZAorInJlZmxvZy50eHQiIHJlc3BlY3RpdmVseSksIGFuZCB0aGUgbWluaW1hbCBpbnZvY2F0aW9uIGlzICctUiA6Jy4KKworLU0gcnVucyB0ZXN0cyB0aGF0IHJlcXVpcmUgYW4gZXhvcmJpdGFudCBhbW91bnQgb2YgbWVtb3J5LiBUaGVzZSB0ZXN0cwordHlwaWNhbGx5IHRyeSB0byBhc2NlcnRhaW4gY29udGFpbmVycyBrZWVwIHdvcmtpbmcgd2hlbiBjb250YWluaW5nIG1vcmUgdGhhbgorMiBiaWxsaW9uIG9iamVjdHMsIHdoaWNoIG9ubHkgd29ya3Mgb24gNjQtYml0IHN5c3RlbXMuIFRoZXJlIGFyZSBhbHNvIHNvbWUKK3Rlc3RzIHRoYXQgdHJ5IHRvIGV4aGF1c3QgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIHByb2Nlc3MsIHdoaWNoIG9ubHkgbWFrZXMKK3NlbnNlIG9uIDMyLWJpdCBzeXN0ZW1zIHdpdGggYXQgbGVhc3QgMkdiIG9mIG1lbW9yeS4gVGhlIHBhc3NlZC1pbiBtZW1saW1pdCwKK3doaWNoIGlzIGEgc3RyaW5nIGluIHRoZSBmb3JtIG9mICcyLjVHYicsIGRldGVybWluZXMgaG93bXVjaCBtZW1vcnkgdGhlCit0ZXN0cyB3aWxsIGxpbWl0IHRoZW1zZWx2ZXMgdG8gKGJ1dCB0aGV5IG1heSBnbyBzbGlnaHRseSBvdmVyLikgVGhlIG51bWJlcgorc2hvdWxkbid0IGJlIG1vcmUgbWVtb3J5IHRoYW4gdGhlIG1hY2hpbmUgaGFzIChpbmNsdWRpbmcgc3dhcCBtZW1vcnkpLiBZb3UKK3Nob3VsZCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IHN3YXAgbWVtb3J5IGlzIGdlbmVyYWxseSBtdWNoLCBtdWNoIHNsb3dlcgordGhhbiBSQU0sIGFuZCBzZXR0aW5nIG1lbWxpbWl0IHRvIGFsbCBhdmFpbGFibGUgUkFNIG9yIGhpZ2hlciB3aWxsIGhlYXZpbHkKK3RheCB0aGUgbWFjaGluZS4gT24gdGhlIG90aGVyIGhhbmQsIGl0IGlzIG5vIHVzZSBydW5uaW5nIHRoZXNlIHRlc3RzIHdpdGggYQorbGltaXQgb2YgbGVzcyB0aGFuIDIuNUdiLCBhbmQgbWFueSByZXF1aXJlIG1vcmUgdGhhbiAyMEdiLiBUZXN0cyB0aGF0IGV4cGVjdAordG8gdXNlIG1vcmUgdGhhbiBtZW1saW1pdCBtZW1vcnkgd2lsbCBiZSBza2lwcGVkLiBUaGUgYmlnLW1lbW9yeSB0ZXN0cworZ2VuZXJhbGx5IHJ1biB2ZXJ5LCB2ZXJ5IGxvbmcuCisKKy11IGlzIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBzcGVjaWFsIHJlc291cmNlIGludGVuc2l2ZSB0ZXN0cyB0byBydW4sCitzdWNoIGFzIHRob3NlIHJlcXVpcmluZyBsYXJnZSBmaWxlIHN1cHBvcnQgb3IgbmV0d29yayBjb25uZWN0aXZpdHkuCitUaGUgYXJndW1lbnQgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB3b3JkcyBpbmRpY2F0aW5nIHRoZQorcmVzb3VyY2VzIHRvIHRlc3QuICBDdXJyZW50bHkgb25seSB0aGUgZm9sbG93aW5nIGFyZSBkZWZpbmVkOgorCisgICAgYWxsIC0gICAgICAgRW5hYmxlIGFsbCBzcGVjaWFsIHJlc291cmNlcy4KKworICAgIGF1ZGlvIC0gICAgIFRlc3RzIHRoYXQgdXNlIHRoZSBhdWRpbyBkZXZpY2UuICAoVGhlcmUgYXJlIGtub3duCisgICAgICAgICAgICAgICAgY2FzZXMgb2YgYnJva2VuIGF1ZGlvIGRyaXZlcnMgdGhhdCBjYW4gY3Jhc2ggUHl0aG9uIG9yCisgICAgICAgICAgICAgICAgZXZlbiB0aGUgTGludXgga2VybmVsLikKKworICAgIGN1cnNlcyAtICAgIFRlc3RzIHRoYXQgdXNlIGN1cnNlcyBhbmQgd2lsbCBtb2RpZnkgdGhlIHRlcm1pbmFsJ3MKKyAgICAgICAgICAgICAgICBzdGF0ZSBhbmQgb3V0cHV0IG1vZGVzLgorCisgICAgbGFyZ2VmaWxlIC0gSXQgaXMgb2theSB0byBydW4gc29tZSB0ZXN0IHRoYXQgbWF5IGNyZWF0ZSBodWdlCisgICAgICAgICAgICAgICAgZmlsZXMuICBUaGVzZSB0ZXN0cyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgbWF5CisgICAgICAgICAgICAgICAgY29uc3VtZSA+MkdCIG9mIGRpc2sgc3BhY2UgdGVtcG9yYXJpbHkuCisKKyAgICBuZXR3b3JrIC0gICBJdCBpcyBva2F5IHRvIHJ1biB0ZXN0cyB0aGF0IHVzZSBleHRlcm5hbCBuZXR3b3JrCisgICAgICAgICAgICAgICAgcmVzb3VyY2UsIGUuZy4gdGVzdGluZyBTU0wgc3VwcG9ydCBmb3Igc29ja2V0cy4KKworICAgIGJzZGRiIC0gICAgIEl0IGlzIG9rYXkgdG8gcnVuIHRoZSBic2RkYiB0ZXN0c3VpdGUsIHdoaWNoIHRha2VzCisgICAgICAgICAgICAgICAgYSBsb25nIHRpbWUgdG8gY29tcGxldGUuCisKKyAgICBkZWNpbWFsIC0gICBUZXN0IHRoZSBkZWNpbWFsIG1vZHVsZSBhZ2FpbnN0IGEgbGFyZ2Ugc3VpdGUgdGhhdAorICAgICAgICAgICAgICAgIHZlcmlmaWVzIGNvbXBsaWFuY2Ugd2l0aCBzdGFuZGFyZHMuCisKKyAgICBjcHUgLSAgICAgICBVc2VkIGZvciBjZXJ0YWluIENQVS1oZWF2eSB0ZXN0cy4KKworICAgIHN1YnByb2Nlc3MgIFJ1biBhbGwgdGVzdHMgZm9yIHRoZSBzdWJwcm9jZXNzIG1vZHVsZS4KKworICAgIHVybGZldGNoIC0gIEl0IGlzIG9rYXkgdG8gZG93bmxvYWQgZmlsZXMgcmVxdWlyZWQgb24gdGVzdGluZy4KKworICAgIGd1aSAtICAgICAgIFJ1biB0ZXN0cyB0aGF0IHJlcXVpcmUgYSBydW5uaW5nIEdVSS4KKworICAgIHhwaWNrbGUgLSAgIFRlc3QgcGlja2xlIGFuZCBjUGlja2xlIGFnYWluc3QgUHl0aG9uIDIuNCwgMi41IGFuZCAyLjYgdG8KKyAgICAgICAgICAgICAgICB0ZXN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGVzZSB0ZXN0cyB0YWtlIGEgbG9uZyB0aW1lCisgICAgICAgICAgICAgICAgdG8gcnVuLgorCitUbyBlbmFibGUgYWxsIHJlc291cmNlcyBleGNlcHQgb25lLCB1c2UgJy11YWxsLC08cmVzb3VyY2U+Jy4gIEZvcgorZXhhbXBsZSwgdG8gcnVuIGFsbCB0aGUgdGVzdHMgZXhjZXB0IGZvciB0aGUgYnNkZGIgdGVzdHMsIGdpdmUgdGhlCitvcHRpb24gJy11YWxsLC1ic2RkYicuCisiIiIKKworaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgaW1wCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzeXNjb25maWcKKworCisjIFNvbWUgdGltZXMgX19wYXRoX18gYW5kIF9fZmlsZV9fIGFyZSBub3QgYWJzb2x1dGUgKGUuZy4gd2hpbGUgcnVubmluZyBmcm9tCisjIExpYi8pIGFuZCwgaWYgd2UgY2hhbmdlIHRoZSBDV0QgdG8gcnVuIHRoZSB0ZXN0cyBpbiBhIHRlbXBvcmFyeSBkaXIsIHNvbWUKKyMgaW1wb3J0cyBtaWdodCBmYWlsLiAgVGhpcyBhZmZlY3RzIG9ubHkgdGhlIG1vZHVsZXMgaW1wb3J0ZWQgYmVmb3JlIG9zLmNoZGlyKCkuCisjIFRoZXNlIG1vZHVsZXMgYXJlIHNlYXJjaGVkIGZpcnN0IGluIHN5cy5wYXRoWzBdIChzbyAnJyAtLSB0aGUgQ1dEKSBhbmQgaWYKKyMgdGhleSBhcmUgZm91bmQgaW4gdGhlIENXRCB0aGVpciBfX2ZpbGVfXyBhbmQgX19wYXRoX18gd2lsbCBiZSByZWxhdGl2ZSAodGhpcworIyBoYXBwZW5zIGJlZm9yZSB0aGUgY2hkaXIpLiAgQWxsIHRoZSBtb2R1bGVzIGltcG9ydGVkIGFmdGVyIHRoZSBjaGRpciwgYXJlCisjIG5vdCBmb3VuZCBpbiB0aGUgQ1dELCBhbmQgc2luY2UgdGhlIG90aGVyIHBhdGhzIGluIHN5cy5wYXRoWzE6XSBhcmUgYWJzb2x1dGUKKyMgKHNpdGUucHkgYWJzb2x1dGl6ZSB0aGVtKSwgdGhlIF9fZmlsZV9fIGFuZCBfX3BhdGhfXyB3aWxsIGJlIGFic29sdXRlIHRvby4KKyMgVGhlcmVmb3JlIGl0IGlzIG5lY2Vzc2FyeSB0byBhYnNvbHV0aXplIG1hbnVhbGx5IHRoZSBfX2ZpbGVfXyBhbmQgX19wYXRoX18gb2YKKyMgdGhlIHBhY2thZ2VzIHRvIHByZXZlbnQgbGF0ZXIgaW1wb3J0cyB0byBmYWlsIHdoZW4gdGhlIENXRCBpcyBkaWZmZXJlbnQuCitmb3IgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZXJ2YWx1ZXMoKToKKyAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtvcy5wYXRoLmFic3BhdGgocGF0aCkgZm9yIHBhdGggaW4gbW9kdWxlLl9fcGF0aF9fXQorICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKToKKyAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gb3MucGF0aC5hYnNwYXRoKG1vZHVsZS5fX2ZpbGVfXykKKworCisjIE1hY09TWCAoYS5rLmEuIERhcndpbikgaGFzIGEgZGVmYXVsdCBzdGFjayBzaXplIHRoYXQgaXMgdG9vIHNtYWxsCisjIGZvciBkZWVwbHkgcmVjdXJzaXZlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICBXZSBzZWUgdGhpcyBhcyBjcmFzaGVzIGluCisjIHRoZSBQeXRob24gdGVzdCBzdWl0ZSB3aGVuIHJ1bm5pbmcgdGVzdF9yZS5weSBhbmQgdGVzdF9zcmUucHkuICBUaGUKKyMgZml4IGlzIHRvIHNldCB0aGUgc3RhY2sgbGltaXQgdG8gMjA0OC4KKyMgVGhpcyBhcHByb2FjaCBtYXkgYWxzbyBiZSB1c2VmdWwgZm9yIG90aGVyIFVuaXh5IHBsYXRmb3JtcyB0aGF0CisjIHN1ZmZlciBmcm9tIHNtYWxsIGRlZmF1bHQgc3RhY2sgbGltaXRzLgoraWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHJlc291cmNlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgc29mdCwgaGFyZCA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfU1RBQ0spCisgICAgICAgIG5ld3NvZnQgPSBtaW4oaGFyZCwgbWF4KHNvZnQsIDEwMjQqMjA0OCkpCisgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfU1RBQ0ssIChuZXdzb2Z0LCBoYXJkKSkKKworIyBUZXN0IHJlc3VsdCBjb25zdGFudHMuCitQQVNTRUQgPSAxCitGQUlMRUQgPSAwCitFTlZfQ0hBTkdFRCA9IC0xCitTS0lQUEVEID0gLTIKK1JFU09VUkNFX0RFTklFRCA9IC0zCitJTlRFUlJVUFRFRCA9IC00CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK1JFU09VUkNFX05BTUVTID0gKCdhdWRpbycsICdjdXJzZXMnLCAnbGFyZ2VmaWxlJywgJ25ldHdvcmsnLCAnYnNkZGInLAorICAgICAgICAgICAgICAgICAgJ2RlY2ltYWwnLCAnY3B1JywgJ3N1YnByb2Nlc3MnLCAndXJsZmV0Y2gnLCAnZ3VpJywKKyAgICAgICAgICAgICAgICAgICd4cGlja2xlJykKKworVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkpCisKKworZGVmIHVzYWdlKGNvZGUsIG1zZz0nJyk6CisgICAgcHJpbnQgX19kb2NfXworICAgIGlmIG1zZzogcHJpbnQgbXNnCisgICAgc3lzLmV4aXQoY29kZSkKKworCitkZWYgbWFpbih0ZXN0cz1Ob25lLCB0ZXN0ZGlyPU5vbmUsIHZlcmJvc2U9MCwgcXVpZXQ9RmFsc2UsCisgICAgICAgICBleGNsdWRlPUZhbHNlLCBzaW5nbGU9RmFsc2UsIHJhbmRvbWl6ZT1GYWxzZSwgZnJvbWZpbGU9Tm9uZSwKKyAgICAgICAgIGZpbmRsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLCB0cmFjZT1GYWxzZSwgY292ZXJkaXI9J2NvdmVyYWdlJywKKyAgICAgICAgIHJ1bmxlYWtzPUZhbHNlLCBodW50cmxlYWtzPUZhbHNlLCB2ZXJib3NlMj1GYWxzZSwgcHJpbnRfc2xvdz1GYWxzZSwKKyAgICAgICAgIHJhbmRvbV9zZWVkPU5vbmUsIHVzZV9tcD1Ob25lLCB2ZXJib3NlMz1GYWxzZSwgZm9yZXZlcj1GYWxzZSwKKyAgICAgICAgIGhlYWRlcj1GYWxzZSk6CisgICAgIiIiRXhlY3V0ZSBhIHRlc3Qgc3VpdGUuCisKKyAgICBUaGlzIGFsc28gcGFyc2VzIGNvbW1hbmQtbGluZSBvcHRpb25zIGFuZCBtb2RpZmllcyBpdHMgYmVoYXZpb3IKKyAgICBhY2NvcmRpbmdseS4KKworICAgIHRlc3RzIC0tIGEgbGlzdCBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGVzdCBuYW1lcyAob3B0aW9uYWwpCisgICAgdGVzdGRpciAtLSB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRvIGxvb2sgZm9yIHRlc3RzIChvcHRpb25hbCkKKworICAgIFVzZXJzIG90aGVyIHRoYW4gdGhlIFB5dGhvbiB0ZXN0IHN1aXRlIHdpbGwgY2VydGFpbmx5IHdhbnQgdG8KKyAgICBzcGVjaWZ5IHRlc3RkaXI7IGlmIGl0J3Mgb21pdHRlZCwgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorICAgIFB5dGhvbiB0ZXN0IHN1aXRlIGlzIHNlYXJjaGVkIGZvci4KKworICAgIElmIHRoZSB0ZXN0cyBhcmd1bWVudCBpcyBvbWl0dGVkLCB0aGUgdGVzdHMgbGlzdGVkIG9uIHRoZQorICAgIGNvbW1hbmQtbGluZSB3aWxsIGJlIHVzZWQuICBJZiB0aGF0J3MgZW1wdHksIHRvbywgdGhlbiBhbGwgKi5weQorICAgIGZpbGVzIGJlZ2lubmluZyB3aXRoIHRlc3RfIHdpbGwgYmUgdXNlZC4KKworICAgIFRoZSBvdGhlciBkZWZhdWx0IGFyZ3VtZW50cyAodmVyYm9zZSwgcXVpZXQsIGV4Y2x1ZGUsCisgICAgc2luZ2xlLCByYW5kb21pemUsIGZpbmRsZWFrcywgdXNlX3Jlc291cmNlcywgdHJhY2UsIGNvdmVyZGlyLAorICAgIHByaW50X3Nsb3csIGFuZCByYW5kb21fc2VlZCkgYWxsb3cgcHJvZ3JhbW1lcnMgY2FsbGluZyBtYWluKCkKKyAgICBkaXJlY3RseSB0byBzZXQgdGhlIHZhbHVlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHNldCBieSBmbGFncworICAgIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICAgIiIiCisKKyAgICB0ZXN0X3N1cHBvcnQucmVjb3JkX29yaWdpbmFsX3N0ZG91dChzeXMuc3Rkb3V0KQorICAgIHRyeToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaHZxeHNTcmY6bHU6dDpURDpOTFI6RndXTTpqOicsCisgICAgICAgICAgICBbJ2hlbHAnLCAndmVyYm9zZScsICd2ZXJib3NlMicsICd2ZXJib3NlMycsICdxdWlldCcsCisgICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAnc2luZ2xlJywgJ3Nsb3cnLCAncmFuZG9taXplJywgJ2Zyb21maWxlPScsICdmaW5kbGVha3MnLAorICAgICAgICAgICAgICd1c2U9JywgJ3RocmVzaG9sZD0nLCAndHJhY2UnLCAnY292ZXJkaXI9JywgJ25vY292ZXJkaXInLAorICAgICAgICAgICAgICdydW5sZWFrcycsICdodW50cmxlYWtzPScsICdtZW1saW1pdD0nLCAncmFuZHNlZWQ9JywKKyAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzPScsICdzbGF2ZWFyZ3M9JywgJ2ZvcmV2ZXInLCAnaGVhZGVyJ10pCisgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgorICAgICAgICB1c2FnZSgyLCBtc2cpCisKKyAgICAjIERlZmF1bHRzCisgICAgaWYgcmFuZG9tX3NlZWQgaXMgTm9uZToKKyAgICAgICAgcmFuZG9tX3NlZWQgPSByYW5kb20ucmFuZHJhbmdlKDEwMDAwMDAwKQorICAgIGlmIHVzZV9yZXNvdXJjZXMgaXMgTm9uZToKKyAgICAgICAgdXNlX3Jlc291cmNlcyA9IFtdCisgICAgZm9yIG8sIGEgaW4gb3B0czoKKyAgICAgICAgaWYgbyBpbiAoJy1oJywgJy0taGVscCcpOgorICAgICAgICAgICAgdXNhZ2UoMCkKKyAgICAgICAgZWxpZiBvIGluICgnLXYnLCAnLS12ZXJib3NlJyk6CisgICAgICAgICAgICB2ZXJib3NlICs9IDEKKyAgICAgICAgZWxpZiBvIGluICgnLXcnLCAnLS12ZXJib3NlMicpOgorICAgICAgICAgICAgdmVyYm9zZTIgPSBUcnVlCisgICAgICAgIGVsaWYgbyBpbiAoJy1XJywgJy0tdmVyYm9zZTMnKToKKyAgICAgICAgICAgIHZlcmJvc2UzID0gVHJ1ZQorICAgICAgICBlbGlmIG8gaW4gKCctcScsICctLXF1aWV0Jyk6CisgICAgICAgICAgICBxdWlldCA9IFRydWU7CisgICAgICAgICAgICB2ZXJib3NlID0gMAorICAgICAgICBlbGlmIG8gaW4gKCcteCcsICctLWV4Y2x1ZGUnKToKKyAgICAgICAgICAgIGV4Y2x1ZGUgPSBUcnVlCisgICAgICAgIGVsaWYgbyBpbiAoJy1zJywgJy0tc2luZ2xlJyk6CisgICAgICAgICAgICBzaW5nbGUgPSBUcnVlCisgICAgICAgIGVsaWYgbyBpbiAoJy1TJywgJy0tc2xvdycpOgorICAgICAgICAgICAgcHJpbnRfc2xvdyA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLXInLCAnLS1yYW5kb21pemUnKToKKyAgICAgICAgICAgIHJhbmRvbWl6ZSA9IFRydWUKKyAgICAgICAgZWxpZiBvID09ICctLXJhbmRzZWVkJzoKKyAgICAgICAgICAgIHJhbmRvbV9zZWVkID0gaW50KGEpCisgICAgICAgIGVsaWYgbyBpbiAoJy1mJywgJy0tZnJvbWZpbGUnKToKKyAgICAgICAgICAgIGZyb21maWxlID0gYQorICAgICAgICBlbGlmIG8gaW4gKCctbCcsICctLWZpbmRsZWFrcycpOgorICAgICAgICAgICAgZmluZGxlYWtzID0gVHJ1ZQorICAgICAgICBlbGlmIG8gaW4gKCctTCcsICctLXJ1bmxlYWtzJyk6CisgICAgICAgICAgICBydW5sZWFrcyA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLXQnLCAnLS10aHJlc2hvbGQnKToKKyAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgZ2Muc2V0X3RocmVzaG9sZChpbnQoYSkpCisgICAgICAgIGVsaWYgbyBpbiAoJy1UJywgJy0tY292ZXJhZ2UnKToKKyAgICAgICAgICAgIHRyYWNlID0gVHJ1ZQorICAgICAgICBlbGlmIG8gaW4gKCctRCcsICctLWNvdmVyZGlyJyk6CisgICAgICAgICAgICBjb3ZlcmRpciA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgYSkKKyAgICAgICAgZWxpZiBvIGluICgnLU4nLCAnLS1ub2NvdmVyZGlyJyk6CisgICAgICAgICAgICBjb3ZlcmRpciA9IE5vbmUKKyAgICAgICAgZWxpZiBvIGluICgnLVInLCAnLS1odW50cmxlYWtzJyk6CisgICAgICAgICAgICBodW50cmxlYWtzID0gYS5zcGxpdCgnOicpCisgICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgbm90IGluICgyLCAzKToKKyAgICAgICAgICAgICAgICBwcmludCBhLCBodW50cmxlYWtzCisgICAgICAgICAgICAgICAgdXNhZ2UoMiwgJy1SIHRha2VzIDIgb3IgMyBjb2xvbi1zZXBhcmF0ZWQgYXJndW1lbnRzJykKKyAgICAgICAgICAgIGlmIG5vdCBodW50cmxlYWtzWzBdOgorICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMF0gPSA1CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMF0gPSBpbnQoaHVudHJsZWFrc1swXSkKKyAgICAgICAgICAgIGlmIG5vdCBodW50cmxlYWtzWzFdOgorICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMV0gPSA0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMV0gPSBpbnQoaHVudHJsZWFrc1sxXSkKKyAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzKSA9PSAyIG9yIG5vdCBodW50cmxlYWtzWzJdOgorICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMjpdID0gWyJyZWZsb2cudHh0Il0KKyAgICAgICAgZWxpZiBvIGluICgnLU0nLCAnLS1tZW1saW1pdCcpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnNldF9tZW1saW1pdChhKQorICAgICAgICBlbGlmIG8gaW4gKCctdScsICctLXVzZScpOgorICAgICAgICAgICAgdSA9IFt4Lmxvd2VyKCkgZm9yIHggaW4gYS5zcGxpdCgnLCcpXQorICAgICAgICAgICAgZm9yIHIgaW4gdToKKyAgICAgICAgICAgICAgICBpZiByID09ICdhbGwnOgorICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzWzpdID0gUkVTT1VSQ0VfTkFNRVMKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZW1vdmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIHJbMF0gPT0gJy0nOgorICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHIgPSByWzE6XQorICAgICAgICAgICAgICAgIGlmIHIgbm90IGluIFJFU09VUkNFX05BTUVTOgorICAgICAgICAgICAgICAgICAgICB1c2FnZSgxLCAnSW52YWxpZCAtdS8tLXVzZSBvcHRpb246ICcgKyBhKQorICAgICAgICAgICAgICAgIGlmIHJlbW92ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgciBpbiB1c2VfcmVzb3VyY2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlcy5yZW1vdmUocikKKyAgICAgICAgICAgICAgICBlbGlmIHIgbm90IGluIHVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMuYXBwZW5kKHIpCisgICAgICAgIGVsaWYgbyBpbiAoJy1GJywgJy0tZm9yZXZlcicpOgorICAgICAgICAgICAgZm9yZXZlciA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLWonLCAnLS1tdWx0aXByb2Nlc3MnKToKKyAgICAgICAgICAgIHVzZV9tcCA9IGludChhKQorICAgICAgICBlbGlmIG8gPT0gJy0taGVhZGVyJzoKKyAgICAgICAgICAgIGhlYWRlciA9IFRydWUKKyAgICAgICAgZWxpZiBvID09ICctLXNsYXZlYXJncyc6CisgICAgICAgICAgICBhcmdzLCBrd2FyZ3MgPSBqc29uLmxvYWRzKGEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgZS5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgICAgIHByaW50ICAgIyBGb3JjZSBhIG5ld2xpbmUgKGp1c3QgaW4gY2FzZSkKKyAgICAgICAgICAgIHByaW50IGpzb24uZHVtcHMocmVzdWx0KQorICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgKCJObyBoYW5kbGVyIGZvciBvcHRpb24ge30uICBQbGVhc2UgIgorICAgICAgICAgICAgICAgICJyZXBvcnQgdGhpcyBhcyBhIGJ1ZyBhdCBodHRwOi8vYnVncy5weXRob24ub3JnLiIpLmZvcm1hdChvKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBpZiBzaW5nbGUgYW5kIGZyb21maWxlOgorICAgICAgICB1c2FnZSgyLCAiLXMgYW5kIC1mIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgdXNlX21wIGFuZCB0cmFjZToKKyAgICAgICAgdXNhZ2UoMiwgIi1UIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIHVzZV9tcCBhbmQgZmluZGxlYWtzOgorICAgICAgICB1c2FnZSgyLCAiLWwgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCisKKyAgICBnb29kID0gW10KKyAgICBiYWQgPSBbXQorICAgIHNraXBwZWQgPSBbXQorICAgIHJlc291cmNlX2RlbmllZHMgPSBbXQorICAgIGVudmlyb25tZW50X2NoYW5nZWQgPSBbXQorICAgIGludGVycnVwdGVkID0gRmFsc2UKKworICAgIGlmIGZpbmRsZWFrczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICdObyBHQyBhdmFpbGFibGUsIGRpc2FibGluZyBmaW5kbGVha3MuJworICAgICAgICAgICAgZmluZGxlYWtzID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IHRvIHJlcG9ydCBnYXJiYWdlIHRoYXQgaXMgbm90CisgICAgICAgICAgICAjIGZyZWVhYmxlIGJ5IHJlZmVyZW5jZSBjb3VudGluZyBhbG9uZS4gIEJ5IGRlZmF1bHQgb25seQorICAgICAgICAgICAgIyBnYXJiYWdlIHRoYXQgaXMgbm90IGNvbGxlY3RhYmxlIGJ5IHRoZSBHQyBpcyByZXBvcnRlZC4KKyAgICAgICAgICAgICNnYy5zZXRfZGVidWcoZ2MuREVCVUdfU0FWRUFMTCkKKyAgICAgICAgICAgIGZvdW5kX2dhcmJhZ2UgPSBbXQorCisgICAgaWYgc2luZ2xlOgorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAncHluZXh0dGVzdCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InKQorICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIHRlc3RzID0gW25leHRfdGVzdF0KKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBmcm9tZmlsZToKKyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKHRlc3Rfc3VwcG9ydC5TQVZFRENXRCwgZnJvbWZpbGUpKQorICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgIGd1dHMgPSBsaW5lLnNwbGl0KCkgIyBhc3N1bWluZyBubyB0ZXN0IGhhcyB3aGl0ZXNwYWNlIGluIGl0cyBuYW1lCisgICAgICAgICAgICBpZiBndXRzIGFuZCBub3QgZ3V0c1swXS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKGd1dHMpCisgICAgICAgIGZwLmNsb3NlKCkKKworICAgICMgU3RyaXAgLnB5IGV4dGVuc2lvbnMuCisgICAgcmVtb3ZlcHkoYXJncykKKyAgICByZW1vdmVweSh0ZXN0cykKKworICAgIHN0ZHRlc3RzID0gU1REVEVTVFNbOl0KKyAgICBub3R0ZXN0cyA9IE5PVFRFU1RTLmNvcHkoKQorICAgIGlmIGV4Y2x1ZGU6CisgICAgICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgICAgIGlmIGFyZyBpbiBzdGR0ZXN0czoKKyAgICAgICAgICAgICAgICBzdGR0ZXN0cy5yZW1vdmUoYXJnKQorICAgICAgICAgICAgbm90dGVzdHMuYWRkKGFyZykKKyAgICAgICAgYXJncyA9IFtdCisKKyAgICAjIEZvciBhIHBhcnRpYWwgcnVuLCB3ZSBkbyBub3QgbmVlZCB0byBjbHV0dGVyIHRoZSBvdXRwdXQuCisgICAgaWYgdmVyYm9zZSBvciBoZWFkZXIgb3Igbm90IChxdWlldCBvciBzaW5nbGUgb3IgdGVzdHMgb3IgYXJncyk6CisgICAgICAgICMgUHJpbnQgYmFzaWMgcGxhdGZvcm0gaW5mb3JtYXRpb24KKyAgICAgICAgcHJpbnQgIj09IiwgcGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9uKCksIFwKKyAgICAgICAgICAgICAgICAgICAgIiAiLmpvaW4oc3lzLnZlcnNpb24uc3BsaXQoKSkKKyAgICAgICAgcHJpbnQgIj09ICAiLCBwbGF0Zm9ybS5wbGF0Zm9ybShhbGlhc2VkPVRydWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgIiVzLWVuZGlhbiIgJSBzeXMuYnl0ZW9yZGVyCisgICAgICAgIHByaW50ICI9PSAgIiwgb3MuZ2V0Y3dkKCkKKyAgICAgICAgcHJpbnQgIlRlc3Rpbmcgd2l0aCBmbGFnczoiLCBzeXMuZmxhZ3MKKworICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKHRlc3RkaXIsIHN0ZHRlc3RzLCBub3R0ZXN0cykKKyAgICBzZWxlY3RlZCA9IHRlc3RzIG9yIGFyZ3Mgb3IgYWxsdGVzdHMKKyAgICBpZiBzaW5nbGU6CisgICAgICAgIHNlbGVjdGVkID0gc2VsZWN0ZWRbOjFdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHRfc2luZ2xlX3Rlc3QgPSBhbGx0ZXN0c1thbGx0ZXN0cy5pbmRleChzZWxlY3RlZFswXSkrMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBuZXh0X3NpbmdsZV90ZXN0ID0gTm9uZQorICAgIGlmIHJhbmRvbWl6ZToKKyAgICAgICAgcmFuZG9tLnNlZWQocmFuZG9tX3NlZWQpCisgICAgICAgIHByaW50ICJVc2luZyByYW5kb20gc2VlZCIsIHJhbmRvbV9zZWVkCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNlbGVjdGVkKQorICAgIGlmIHRyYWNlOgorICAgICAgICBpbXBvcnQgdHJhY2UKKyAgICAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLnByZWZpeCwgc3lzLmV4ZWNfcHJlZml4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9RmFsc2UsIGNvdW50PVRydWUpCisKKyAgICB0ZXN0X3RpbWVzID0gW10KKyAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyA9IHVzZV9yZXNvdXJjZXMKKyAgICBzYXZlX21vZHVsZXMgPSBzeXMubW9kdWxlcy5rZXlzKCkKKworICAgIGRlZiBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpOgorICAgICAgICBvaywgdGVzdF90aW1lID0gcmVzdWx0CisgICAgICAgIHRlc3RfdGltZXMuYXBwZW5kKCh0ZXN0X3RpbWUsIHRlc3QpKQorICAgICAgICBpZiBvayA9PSBQQVNTRUQ6CisgICAgICAgICAgICBnb29kLmFwcGVuZCh0ZXN0KQorICAgICAgICBlbGlmIG9rID09IEZBSUxFRDoKKyAgICAgICAgICAgIGJhZC5hcHBlbmQodGVzdCkKKyAgICAgICAgZWxpZiBvayA9PSBFTlZfQ0hBTkdFRDoKKyAgICAgICAgICAgIGJhZC5hcHBlbmQodGVzdCkKKyAgICAgICAgICAgIGVudmlyb25tZW50X2NoYW5nZWQuYXBwZW5kKHRlc3QpCisgICAgICAgIGVsaWYgb2sgPT0gU0tJUFBFRDoKKyAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHRlc3QpCisgICAgICAgIGVsaWYgb2sgPT0gUkVTT1VSQ0VfREVOSUVEOgorICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQodGVzdCkKKyAgICAgICAgICAgIHJlc291cmNlX2RlbmllZHMuYXBwZW5kKHRlc3QpCisKKyAgICBpZiBmb3JldmVyOgorICAgICAgICBkZWYgdGVzdF9mb3JldmVyKHRlc3RzPWxpc3Qoc2VsZWN0ZWQpKToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFkOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRlc3RzID0gdGVzdF9mb3JldmVyKCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cyA9IGl0ZXIoc2VsZWN0ZWQpCisKKyAgICBpZiB1c2VfbXA6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcHJpbnQgIk11bHRpcHJvY2VzcyBvcHRpb24gcmVxdWlyZXMgdGhyZWFkIHN1cHBvcnQiCisgICAgICAgICAgICBzeXMuZXhpdCgyKQorICAgICAgICBmcm9tIFF1ZXVlIGltcG9ydCBRdWV1ZQorICAgICAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQSVBFCisgICAgICAgIGRlYnVnX291dHB1dF9wYXQgPSByZS5jb21waWxlKHIiXFtcZCsgcmVmc1xdJCIpCisgICAgICAgIG91dHB1dCA9IFF1ZXVlKCkKKyAgICAgICAgZGVmIHRlc3RzX2FuZF9hcmdzKCk6CisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBhcmdzX3R1cGxlID0gKAorICAgICAgICAgICAgICAgICAgICAodGVzdCwgdmVyYm9zZSwgcXVpZXQpLAorICAgICAgICAgICAgICAgICAgICBkaWN0KGh1bnRybGVha3M9aHVudHJsZWFrcywgdXNlX3Jlc291cmNlcz11c2VfcmVzb3VyY2VzKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB5aWVsZCAodGVzdCwgYXJnc190dXBsZSkKKyAgICAgICAgcGVuZGluZyA9IHRlc3RzX2FuZF9hcmdzKCkKKyAgICAgICAgb3B0X2FyZ3MgPSB0ZXN0X3N1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgYmFzZV9jbWQgPSBbc3lzLmV4ZWN1dGFibGVdICsgb3B0X2FyZ3MgKyBbJy1tJywgJ3Rlc3QucmVncnRlc3QnXQorICAgICAgICBkZWYgd29yaygpOgorICAgICAgICAgICAgIyBBIHdvcmtlciB0aHJlYWQuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCwgYXJnc190dXBsZSA9IG5leHQocGVuZGluZykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAjIC1FIGlzIG5lZWRlZCBieSBzb21lIHRlc3RzLCBlLmcuIHRlc3RfaW1wb3J0CisgICAgICAgICAgICAgICAgICAgIHBvcGVuID0gUG9wZW4oYmFzZV9jbWQgKyBbJy0tc2xhdmVhcmdzJywganNvbi5kdW1wcyhhcmdzX3R1cGxlKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz0ob3MubmFtZSAhPSAnbnQnKSkKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICAgICAgICAgICMgU3RyaXAgbGFzdCByZWZjb3VudCBvdXRwdXQgbGluZSBpZiBpdCBleGlzdHMsIHNpbmNlIGl0CisgICAgICAgICAgICAgICAgICAgICMgY29tZXMgZnJvbSB0aGUgc2h1dGRvd24gb2YgdGhlIGludGVycHJldGVyIGluIHRoZSBzdWJjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBkZWJ1Z19vdXRwdXRfcGF0LnN1YigiIiwgc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICBzdGRvdXQsIF8sIHJlc3VsdCA9IHN0ZG91dC5zdHJpcCgpLnJwYXJ0aXRpb24oIlxuIikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzb24ubG9hZHMocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSB0ZXN0Kydcbicrc3Rkb3V0CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKHRlc3QsIHN0ZG91dC5yc3RyaXAoKSwgc3RkZXJyLnJzdHJpcCgpLCByZXN1bHQpKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgd29ya2VycyA9IFtUaHJlYWQodGFyZ2V0PXdvcmspIGZvciBpIGluIHJhbmdlKHVzZV9tcCldCisgICAgICAgIGZvciB3b3JrZXIgaW4gd29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCisgICAgICAgIGZpbmlzaGVkID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBmaW5pc2hlZCA8IHVzZV9tcDoKKyAgICAgICAgICAgICAgICB0ZXN0LCBzdGRvdXQsIHN0ZGVyciwgcmVzdWx0ID0gb3V0cHV0LmdldCgpCisgICAgICAgICAgICAgICAgaWYgdGVzdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCArPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgICAgICAgICBwcmludCBzdGRvdXQKKyAgICAgICAgICAgICAgICBpZiBzdGRlcnI6CisgICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgc3RkZXJyCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0WzBdID09IElOVEVSUlVQVEVEOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmVzdWx0WzFdID09ICdLZXlib2FyZEludGVycnVwdCcKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQgICAjIFdoYXQgZWxzZT8KKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICAgICAgcGVuZGluZy5jbG9zZSgpCisgICAgICAgIGZvciB3b3JrZXIgaW4gd29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5qb2luKCkKKyAgICBlbHNlOgorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgICAgICBwcmludCB0ZXN0CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICBpZiB0cmFjZToKKyAgICAgICAgICAgICAgICAjIElmIHdlJ3JlIHRyYWNpbmcgY29kZSBjb3ZlcmFnZSwgdGhlbiB3ZSBkb24ndCBleGl0IHdpdGggc3RhdHVzCisgICAgICAgICAgICAgICAgIyBpZiBvbiBhIGZhbHNlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4uCisgICAgICAgICAgICAgICAgdHJhY2VyLnJ1bmN0eCgncnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscz1nbG9iYWxzKCksIGxvY2Fscz12YXJzKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcykKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlMyBhbmQgcmVzdWx0WzBdID09IEZBSUxFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJSZS1ydW5uaW5nIHRlc3QgJXIgaW4gdmVyYm9zZSBtb2RlIiAlIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRlc3QodGVzdCwgVHJ1ZSwgcXVpZXQsIGh1bnRybGVha3MpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBpZiBmaW5kbGVha3M6CisgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICAgICAgaWYgZ2MuZ2FyYmFnZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIldhcm5pbmc6IHRlc3QgY3JlYXRlZCIsIGxlbihnYy5nYXJiYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgInVuY29sbGVjdGFibGUgb2JqZWN0KHMpLiIKKyAgICAgICAgICAgICAgICAgICAgIyBtb3ZlIHRoZSB1bmNvbGxlY3RhYmxlIG9iamVjdHMgc29tZXdoZXJlIHNvIHdlIGRvbid0IHNlZQorICAgICAgICAgICAgICAgICAgICAjIHRoZW0gYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZ2FyYmFnZS5leHRlbmQoZ2MuZ2FyYmFnZSkKKyAgICAgICAgICAgICAgICAgICAgZGVsIGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgICAgICMgVW5sb2FkIHRoZSBuZXdseSBpbXBvcnRlZCBtb2R1bGVzIChiZXN0IGVmZm9ydCBmaW5hbGl6YXRpb24pCisgICAgICAgICAgICBmb3IgbW9kdWxlIGluIHN5cy5tb2R1bGVzLmtleXMoKToKKyAgICAgICAgICAgICAgICBpZiBtb2R1bGUgbm90IGluIHNhdmVfbW9kdWxlcyBhbmQgbW9kdWxlLnN0YXJ0c3dpdGgoInRlc3QuIik6CisgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQobW9kdWxlKQorCisgICAgaWYgaW50ZXJydXB0ZWQ6CisgICAgICAgICMgcHJpbnQgYSBuZXdsaW5lIGFmdGVyIF5DCisgICAgICAgIHByaW50CisgICAgICAgIHByaW50ICJUZXN0IHN1aXRlIGludGVycnVwdGVkIGJ5IHNpZ25hbCBTSUdJTlQuIgorICAgICAgICBvbWl0dGVkID0gc2V0KHNlbGVjdGVkKSAtIHNldChnb29kKSAtIHNldChiYWQpIC0gc2V0KHNraXBwZWQpCisgICAgICAgIHByaW50IGNvdW50KGxlbihvbWl0dGVkKSwgInRlc3QiKSwgIm9taXR0ZWQ6IgorICAgICAgICBwcmludGxpc3Qob21pdHRlZCkKKyAgICBpZiBnb29kIGFuZCBub3QgcXVpZXQ6CisgICAgICAgIGlmIG5vdCBiYWQgYW5kIG5vdCBza2lwcGVkIGFuZCBub3QgaW50ZXJydXB0ZWQgYW5kIGxlbihnb29kKSA+IDE6CisgICAgICAgICAgICBwcmludCAiQWxsIiwKKyAgICAgICAgcHJpbnQgY291bnQobGVuKGdvb2QpLCAidGVzdCIpLCAiT0suIgorICAgIGlmIHByaW50X3Nsb3c6CisgICAgICAgIHRlc3RfdGltZXMuc29ydChyZXZlcnNlPVRydWUpCisgICAgICAgIHByaW50ICIxMCBzbG93ZXN0IHRlc3RzOiIKKyAgICAgICAgZm9yIHRpbWUsIHRlc3QgaW4gdGVzdF90aW1lc1s6MTBdOgorICAgICAgICAgICAgcHJpbnQgIiVzOiAlLjFmcyIgJSAodGVzdCwgdGltZSkKKyAgICBpZiBiYWQ6CisgICAgICAgIGJhZCA9IHNldChiYWQpIC0gc2V0KGVudmlyb25tZW50X2NoYW5nZWQpCisgICAgICAgIGlmIGJhZDoKKyAgICAgICAgICAgIHByaW50IGNvdW50KGxlbihiYWQpLCAidGVzdCIpLCAiZmFpbGVkOiIKKyAgICAgICAgICAgIHByaW50bGlzdChiYWQpCisgICAgICAgIGlmIGVudmlyb25tZW50X2NoYW5nZWQ6CisgICAgICAgICAgICBwcmludCAie30gYWx0ZXJlZCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50OiIuZm9ybWF0KAorICAgICAgICAgICAgICAgIGNvdW50KGxlbihlbnZpcm9ubWVudF9jaGFuZ2VkKSwgInRlc3QiKSkKKyAgICAgICAgICAgIHByaW50bGlzdChlbnZpcm9ubWVudF9jaGFuZ2VkKQorICAgIGlmIHNraXBwZWQgYW5kIG5vdCBxdWlldDoKKyAgICAgICAgcHJpbnQgY291bnQobGVuKHNraXBwZWQpLCAidGVzdCIpLCAic2tpcHBlZDoiCisgICAgICAgIHByaW50bGlzdChza2lwcGVkKQorCisgICAgICAgIGUgPSBfRXhwZWN0ZWRTa2lwcygpCisgICAgICAgIHBsYXQgPSBzeXMucGxhdGZvcm0KKyAgICAgICAgaWYgZS5pc3ZhbGlkKCk6CisgICAgICAgICAgICBzdXJwcmlzZSA9IHNldChza2lwcGVkKSAtIGUuZ2V0ZXhwZWN0ZWQoKSAtIHNldChyZXNvdXJjZV9kZW5pZWRzKQorICAgICAgICAgICAgaWYgc3VycHJpc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgY291bnQobGVuKHN1cnByaXNlKSwgInNraXAiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIG9uIiwgcGxhdCArICI6IgorICAgICAgICAgICAgICAgIHByaW50bGlzdChzdXJwcmlzZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIlRob3NlIHNraXBzIGFyZSBhbGwgZXhwZWN0ZWQgb24iLCBwbGF0ICsgIi4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAiQXNrIHNvbWVvbmUgdG8gdGVhY2ggcmVncnRlc3QucHkgYWJvdXQgd2hpY2ggdGVzdHMgYXJlIgorICAgICAgICAgICAgcHJpbnQgImV4cGVjdGVkIHRvIGdldCBza2lwcGVkIG9uIiwgcGxhdCArICIuIgorCisgICAgaWYgdmVyYm9zZTIgYW5kIGJhZDoKKyAgICAgICAgcHJpbnQgIlJlLXJ1bm5pbmcgZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZSIKKyAgICAgICAgZm9yIHRlc3QgaW4gYmFkOgorICAgICAgICAgICAgcHJpbnQgIlJlLXJ1bm5pbmcgdGVzdCAlciBpbiB2ZXJib3NlIG1vZGUiICUgdGVzdAorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnZlcmJvc2UgPSBUcnVlCisgICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIHF1aWV0LCBodW50cmxlYWtzKQorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICMgcHJpbnQgYSBuZXdsaW5lIHNlcGFyYXRlIGZyb20gdGhlIF5DCisgICAgICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBpZiBzaW5nbGU6CisgICAgICAgIGlmIG5leHRfc2luZ2xlX3Rlc3Q6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUobmV4dF9zaW5nbGVfdGVzdCArICdcbicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCisKKyAgICBpZiB0cmFjZToKKyAgICAgICAgciA9IHRyYWNlci5yZXN1bHRzKCkKKyAgICAgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsIGNvdmVyZGlyPWNvdmVyZGlyKQorCisgICAgaWYgcnVubGVha3M6CisgICAgICAgIG9zLnN5c3RlbSgibGVha3MgJWQiICUgb3MuZ2V0cGlkKCkpCisKKyAgICBzeXMuZXhpdChsZW4oYmFkKSA+IDAgb3IgaW50ZXJydXB0ZWQpCisKKworU1REVEVTVFMgPSBbCisgICAgJ3Rlc3RfZ3JhbW1hcicsCisgICAgJ3Rlc3Rfb3Bjb2RlcycsCisgICAgJ3Rlc3RfZGljdCcsCisgICAgJ3Rlc3RfYnVpbHRpbicsCisgICAgJ3Rlc3RfZXhjZXB0aW9ucycsCisgICAgJ3Rlc3RfdHlwZXMnLAorICAgICd0ZXN0X3VuaXR0ZXN0JywKKyAgICAndGVzdF9kb2N0ZXN0JywKKyAgICAndGVzdF9kb2N0ZXN0MicsCitdCisKK05PVFRFU1RTID0geworICAgICd0ZXN0X3N1cHBvcnQnLAorICAgICd0ZXN0X2Z1dHVyZTEnLAorICAgICd0ZXN0X2Z1dHVyZTInLAorfQorCitkZWYgZmluZHRlc3RzKHRlc3RkaXI9Tm9uZSwgc3RkdGVzdHM9U1REVEVTVFMsIG5vdHRlc3RzPU5PVFRFU1RTKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGFsbCBhcHBsaWNhYmxlIHRlc3QgbW9kdWxlcy4iIiIKKyAgICB0ZXN0ZGlyID0gZmluZHRlc3RkaXIodGVzdGRpcikKKyAgICBuYW1lcyA9IG9zLmxpc3RkaXIodGVzdGRpcikKKyAgICB0ZXN0cyA9IFtdCisgICAgb3RoZXJzID0gc2V0KHN0ZHRlc3RzKSB8IG5vdHRlc3RzCisgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgIG1vZG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQobmFtZSkKKyAgICAgICAgaWYgbW9kbmFtZVs6NV0gPT0gInRlc3RfIiBhbmQgZXh0ID09ICIucHkiIGFuZCBtb2RuYW1lIG5vdCBpbiBvdGhlcnM6CisgICAgICAgICAgICB0ZXN0cy5hcHBlbmQobW9kbmFtZSkKKyAgICByZXR1cm4gc3RkdGVzdHMgKyBzb3J0ZWQodGVzdHMpCisKK2RlZiBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LAorICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lKToKKyAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdC4KKworICAgIHRlc3QgLS0gdGhlIG5hbWUgb2YgdGhlIHRlc3QKKyAgICB2ZXJib3NlIC0tIGlmIHRydWUsIHByaW50IG1vcmUgbWVzc2FnZXMKKyAgICBxdWlldCAtLSBpZiB0cnVlLCBkb24ndCBwcmludCAnc2tpcHBlZCcgbWVzc2FnZXMgKHByb2JhYmx5IHJlZHVuZGFudCkKKyAgICB0ZXN0X3RpbWVzIC0tIGEgbGlzdCBvZiAodGltZSwgdGVzdF9uYW1lKSBwYWlycworICAgIGh1bnRybGVha3MgLS0gcnVuIG11bHRpcGxlIHRpbWVzIHRvIHRlc3QgZm9yIGxlYWtzOyByZXF1aXJlcyBhIGRlYnVnCisgICAgICAgICAgICAgICAgICBidWlsZDsgYSB0cmlwbGUgY29ycmVzcG9uZGluZyB0byAtUidzIHRocmVlIGFyZ3VtZW50cworICAgIFJldHVybnMgb25lIG9mIHRoZSB0ZXN0IHJlc3VsdCBjb25zdGFudHM6CisgICAgICAgIElOVEVSUlVQVEVEICAgICAgS2V5Ym9hcmRJbnRlcnJ1cHQgd2hlbiBydW4gdW5kZXIgLWoKKyAgICAgICAgUkVTT1VSQ0VfREVOSUVEICB0ZXN0IHNraXBwZWQgYmVjYXVzZSByZXNvdXJjZSBkZW5pZWQKKyAgICAgICAgU0tJUFBFRCAgICAgICAgICB0ZXN0IHNraXBwZWQgZm9yIHNvbWUgb3RoZXIgcmVhc29uCisgICAgICAgIEVOVl9DSEFOR0VEICAgICAgdGVzdCBmYWlsZWQgYmVjYXVzZSBpdCBjaGFuZ2VkIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQKKyAgICAgICAgRkFJTEVEICAgICAgICAgICB0ZXN0IGZhaWxlZAorICAgICAgICBQQVNTRUQgICAgICAgICAgIHRlc3QgcGFzc2VkCisgICAgIiIiCisKKyAgICB0ZXN0X3N1cHBvcnQudmVyYm9zZSA9IHZlcmJvc2UgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0CisgICAgaWYgdXNlX3Jlc291cmNlcyBpcyBub3QgTm9uZToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSB1c2VfcmVzb3VyY2VzCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcykKKyAgICBmaW5hbGx5OgorICAgICAgICBjbGVhbnVwX3Rlc3RfZHJvcHBpbmdzKHRlc3QsIHZlcmJvc2UpCisKKworIyBVbml0IHRlc3RzIGFyZSBzdXBwb3NlZCB0byBsZWF2ZSB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IHVuY2hhbmdlZAorIyBvbmNlIHRoZXkgY29tcGxldGUuICBCdXQgc29tZXRpbWVzIHRlc3RzIGhhdmUgYnVncywgZXNwZWNpYWxseSB3aGVuCisjIHRlc3RzIGZhaWwsIGFuZCB0aGUgY2hhbmdlcyB0byBlbnZpcm9ubWVudCBnbyBvbiB0byBtZXNzIHVwIG90aGVyCisjIHRlc3RzLiAgVGhpcyBjYW4gY2F1c2UgaXNzdWVzIHdpdGggYnVpbGRib3Qgc3RhYmlsaXR5LCBzaW5jZSB0ZXN0cworIyBhcmUgcnVuIGluIHJhbmRvbSBvcmRlciBhbmQgc28gcHJvYmxlbXMgbWF5IGFwcGVhciB0byBjb21lIGFuZCBnby4KKyMgVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB3ZSBjYW4gc2F2ZSBhbmQgcmVzdG9yZSB0byBtaXRpZ2F0ZSB0aGlzLCBhbmQKKyMgdGhlIGZvbGxvd2luZyBjb250ZXh0IG1hbmFnZXIgaGFuZGxlcyB0aGlzIHRhc2suCisKK2NsYXNzIHNhdmVkX3Rlc3RfZW52aXJvbm1lbnQ6CisgICAgIiIiU2F2ZSBiaXRzIG9mIHRoZSB0ZXN0IGVudmlyb25tZW50IGFuZCByZXN0b3JlIHRoZW0gYXQgYmxvY2sgZXhpdC4KKworICAgICAgICB3aXRoIHNhdmVkX3Rlc3RfZW52aXJvbm1lbnQodGVzdG5hbWUsIHZlcmJvc2UsIHF1aWV0KToKKyAgICAgICAgICAgICNzdHVmZgorCisgICAgVW5sZXNzIHF1aWV0IGlzIFRydWUsIGEgd2FybmluZyBpcyBwcmludGVkIHRvIHN0ZGVyciBpZiBhbnkgb2YKKyAgICB0aGUgc2F2ZWQgaXRlbXMgd2FzIGNoYW5nZWQgYnkgdGhlIHRlc3QuICBUaGUgYXR0cmlidXRlICdjaGFuZ2VkJworICAgIGlzIGluaXRpYWxseSBGYWxzZSwgYnV0IGlzIHNldCB0byBUcnVlIGlmIGEgY2hhbmdlIGlzIGRldGVjdGVkLgorCisgICAgSWYgdmVyYm9zZSBpcyBtb3JlIHRoYW4gMSwgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgc3RhdGUgb2YgY2hhbmdlZAorICAgIGl0ZW1zIGlzIGFsc28gcHJpbnRlZC4KKyAgICAiIiIKKworICAgIGNoYW5nZWQgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RuYW1lLCB2ZXJib3NlPTAsIHF1aWV0PUZhbHNlKToKKyAgICAgICAgc2VsZi50ZXN0bmFtZSA9IHRlc3RuYW1lCisgICAgICAgIHNlbGYudmVyYm9zZSA9IHZlcmJvc2UKKyAgICAgICAgc2VsZi5xdWlldCA9IHF1aWV0CisKKyAgICAjIFRvIGFkZCB0aGluZ3MgdG8gc2F2ZSBhbmQgcmVzdG9yZSwgYWRkIGEgbmFtZSBYWFggdG8gdGhlIHJlc291cmNlcyBsaXN0CisgICAgIyBhbmQgYWRkIGNvcnJlc3BvbmRpbmcgZ2V0X1hYWC9yZXN0b3JlX1hYWCBmdW5jdGlvbnMuICBnZXRfWFhYIHNob3VsZAorICAgICMgcmV0dXJuIHRoZSB2YWx1ZSB0byBiZSBzYXZlZCBhbmQgY29tcGFyZWQgYWdhaW5zdCBhIHNlY29uZCBjYWxsIHRvIHRoZQorICAgICMgZ2V0IGZ1bmN0aW9uIHdoZW4gdGVzdCBleGVjdXRpb24gY29tcGxldGVzLiAgcmVzdG9yZV9YWFggc2hvdWxkIGFjY2VwdAorICAgICMgdGhlIHNhdmVkIHZhbHVlIGFuZCByZXN0b3JlIHRoZSByZXNvdXJjZSB1c2luZyBpdC4gIEl0IHdpbGwgYmUgY2FsbGVkIGlmCisgICAgIyBhbmQgb25seSBpZiBhIGNoYW5nZSBpbiB0aGUgdmFsdWUgaXMgZGV0ZWN0ZWQuCisgICAgIworICAgICMgTm90ZTogWFhYIHdpbGwgaGF2ZSBhbnkgJy4nIHJlcGxhY2VkIHdpdGggJ18nIGNoYXJhY3RlcnMgd2hlbiBkZXRlcm1pbmluZworICAgICMgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kIG5hbWVzLgorCisgICAgcmVzb3VyY2VzID0gKCdzeXMuYXJndicsICdjd2QnLCAnc3lzLnN0ZGluJywgJ3N5cy5zdGRvdXQnLCAnc3lzLnN0ZGVycicsCisgICAgICAgICAgICAgICAgICdvcy5lbnZpcm9uJywgJ3N5cy5wYXRoJywgJ2FzeW5jb3JlLnNvY2tldF9tYXAnLAorICAgICAgICAgICAgICAgICAndGVzdF9zdXBwb3J0LlRFU1RGTicsCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIGdldF9zeXNfYXJndihzZWxmKToKKyAgICAgICAgcmV0dXJuIGlkKHN5cy5hcmd2KSwgc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCisgICAgZGVmIHJlc3RvcmVfc3lzX2FyZ3Yoc2VsZiwgc2F2ZWRfYXJndik6CisgICAgICAgIHN5cy5hcmd2ID0gc2F2ZWRfYXJndlsxXQorICAgICAgICBzeXMuYXJndls6XSA9IHNhdmVkX2FyZ3ZbMl0KKworICAgIGRlZiBnZXRfY3dkKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MuZ2V0Y3dkKCkKKyAgICBkZWYgcmVzdG9yZV9jd2Qoc2VsZiwgc2F2ZWRfY3dkKToKKyAgICAgICAgb3MuY2hkaXIoc2F2ZWRfY3dkKQorCisgICAgZGVmIGdldF9zeXNfc3Rkb3V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc3lzLnN0ZG91dAorICAgIGRlZiByZXN0b3JlX3N5c19zdGRvdXQoc2VsZiwgc2F2ZWRfc3Rkb3V0KToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVkX3N0ZG91dAorCisgICAgZGVmIGdldF9zeXNfc3RkZXJyKHNlbGYpOgorICAgICAgICByZXR1cm4gc3lzLnN0ZGVycgorICAgIGRlZiByZXN0b3JlX3N5c19zdGRlcnIoc2VsZiwgc2F2ZWRfc3RkZXJyKToKKyAgICAgICAgc3lzLnN0ZGVyciA9IHNhdmVkX3N0ZGVycgorCisgICAgZGVmIGdldF9zeXNfc3RkaW4oc2VsZik6CisgICAgICAgIHJldHVybiBzeXMuc3RkaW4KKyAgICBkZWYgcmVzdG9yZV9zeXNfc3RkaW4oc2VsZiwgc2F2ZWRfc3RkaW4pOgorICAgICAgICBzeXMuc3RkaW4gPSBzYXZlZF9zdGRpbgorCisgICAgZGVmIGdldF9vc19lbnZpcm9uKHNlbGYpOgorICAgICAgICByZXR1cm4gaWQob3MuZW52aXJvbiksIG9zLmVudmlyb24sIGRpY3Qob3MuZW52aXJvbikKKyAgICBkZWYgcmVzdG9yZV9vc19lbnZpcm9uKHNlbGYsIHNhdmVkX2Vudmlyb24pOgorICAgICAgICBvcy5lbnZpcm9uID0gc2F2ZWRfZW52aXJvblsxXQorICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICAgICAgb3MuZW52aXJvbi51cGRhdGUoc2F2ZWRfZW52aXJvblsyXSkKKworICAgIGRlZiBnZXRfc3lzX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBpZChzeXMucGF0aCksIHN5cy5wYXRoLCBzeXMucGF0aFs6XQorICAgIGRlZiByZXN0b3JlX3N5c19wYXRoKHNlbGYsIHNhdmVkX3BhdGgpOgorICAgICAgICBzeXMucGF0aCA9IHNhdmVkX3BhdGhbMV0KKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzYXZlZF9wYXRoWzJdCisKKyAgICBkZWYgZ2V0X2FzeW5jb3JlX3NvY2tldF9tYXAoc2VsZik6CisgICAgICAgIGFzeW5jb3JlID0gc3lzLm1vZHVsZXMuZ2V0KCdhc3luY29yZScpCisgICAgICAgICMgWFhYIE1ha2luZyBhIGNvcHkga2VlcHMgb2JqZWN0cyBhbGl2ZSB1bnRpbCBfX2V4aXRfXyBnZXRzIGNhbGxlZC4KKyAgICAgICAgcmV0dXJuIGFzeW5jb3JlIGFuZCBhc3luY29yZS5zb2NrZXRfbWFwLmNvcHkoKSBvciB7fQorICAgIGRlZiByZXN0b3JlX2FzeW5jb3JlX3NvY2tldF9tYXAoc2VsZiwgc2F2ZWRfbWFwKToKKyAgICAgICAgYXN5bmNvcmUgPSBzeXMubW9kdWxlcy5nZXQoJ2FzeW5jb3JlJykKKyAgICAgICAgaWYgYXN5bmNvcmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoaWdub3JlX2FsbD1UcnVlKQorICAgICAgICAgICAgYXN5bmNvcmUuc29ja2V0X21hcC51cGRhdGUoc2F2ZWRfbWFwKQorCisgICAgZGVmIGdldF90ZXN0X3N1cHBvcnRfVEVTVEZOKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKToKKyAgICAgICAgICAgIHJlc3VsdCA9ICdmJworICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTik6CisgICAgICAgICAgICByZXN1bHQgPSAnZCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIGRlZiByZXN0b3JlX3Rlc3Rfc3VwcG9ydF9URVNURk4oc2VsZiwgc2F2ZWRfdmFsdWUpOgorICAgICAgICBpZiBzYXZlZF92YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTik6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTik6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHJlc291cmNlX2luZm8oc2VsZik6CisgICAgICAgIGZvciBuYW1lIGluIHNlbGYucmVzb3VyY2VzOgorICAgICAgICAgICAgbWV0aG9kX3N1ZmZpeCA9IG5hbWUucmVwbGFjZSgnLicsICdfJykKKyAgICAgICAgICAgIGdldF9uYW1lID0gJ2dldF8nICsgbWV0aG9kX3N1ZmZpeAorICAgICAgICAgICAgcmVzdG9yZV9uYW1lID0gJ3Jlc3RvcmVfJyArIG1ldGhvZF9zdWZmaXgKKyAgICAgICAgICAgIHlpZWxkIG5hbWUsIGdldGF0dHIoc2VsZiwgZ2V0X25hbWUpLCBnZXRhdHRyKHNlbGYsIHJlc3RvcmVfbmFtZSkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuc2F2ZWRfdmFsdWVzID0gZGljdCgobmFtZSwgZ2V0KCkpIGZvciBuYW1lLCBnZXQsIHJlc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYucmVzb3VyY2VfaW5mbygpKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgorICAgICAgICBzYXZlZF92YWx1ZXMgPSBzZWxmLnNhdmVkX3ZhbHVlcworICAgICAgICBkZWwgc2VsZi5zYXZlZF92YWx1ZXMKKyAgICAgICAgZm9yIG5hbWUsIGdldCwgcmVzdG9yZSBpbiBzZWxmLnJlc291cmNlX2luZm8oKToKKyAgICAgICAgICAgIGN1cnJlbnQgPSBnZXQoKQorICAgICAgICAgICAgb3JpZ2luYWwgPSBzYXZlZF92YWx1ZXMucG9wKG5hbWUpCisgICAgICAgICAgICAjIENoZWNrIGZvciBjaGFuZ2VzIHRvIHRoZSByZXNvdXJjZSdzIHZhbHVlCisgICAgICAgICAgICBpZiBjdXJyZW50ICE9IG9yaWdpbmFsOgorICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICByZXN0b3JlKG9yaWdpbmFsKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnF1aWV0OgorICAgICAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIldhcm5pbmcgLS0ge30gd2FzIG1vZGlmaWVkIGJ5IHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2VsZi50ZXN0bmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZSA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIEJlZm9yZToge31cbiAgQWZ0ZXI6ICB7fSAiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwsIGN1cnJlbnQpKQorICAgICAgICAgICAgIyBYWFggKG5jb2dobGFuKTogZm9yIG1vc3QgcmVzb3VyY2VzIChlLmcuIHN5cy5wYXRoKSBpZGVudGl0eQorICAgICAgICAgICAgIyBtYXR0ZXJzIGF0IGxlYXN0IGFzIG11Y2ggYXMgdmFsdWUuIEZvciBvdGhlcnMgKGUuZy4gY3dkKSwKKyAgICAgICAgICAgICMgaWRlbnRpdHkgaXMgaXJyZWxldmFudC4gU2hvdWxkIHdlIGFkZCBhIG1lY2hhbmlzbSB0byBjaGVjaworICAgICAgICAgICAgIyBmb3Igc3Vic3RpdHV0aW9uIGluIHRoZSBjYXNlcyB3aGVyZSBpdCBtYXR0ZXJzPworICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcz1GYWxzZSk6CisgICAgdGVzdF9zdXBwb3J0LnVubG9hZCh0ZXN0KQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIGNhcHR1cmVfc3Rkb3V0ID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIGNhcHR1cmVfc3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorCisgICAgdGVzdF90aW1lID0gMC4wCisgICAgcmVmbGVhayA9IEZhbHNlICAjIFRydWUgaWYgdGhlIHRlc3QgbGVha2VkIHJlZmVyZW5jZXMuCisgICAgdHJ5OgorICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgY2FwdHVyZV9zdGRvdXQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGNhcHR1cmVfc3Rkb3V0CisgICAgICAgICAgICBpZiB0ZXN0LnN0YXJ0c3dpdGgoJ3Rlc3QuJyk6CisgICAgICAgICAgICAgICAgYWJzdGVzdCA9IHRlc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBbHdheXMgaW1wb3J0IGl0IGZyb20gdGhlIHRlc3QgcGFja2FnZQorICAgICAgICAgICAgICAgIGFic3Rlc3QgPSAndGVzdC4nICsgdGVzdAorICAgICAgICAgICAgd2l0aCBzYXZlZF90ZXN0X2Vudmlyb25tZW50KHRlc3QsIHZlcmJvc2UsIHF1aWV0KSBhcyBlbnZpcm9ubWVudDoKKyAgICAgICAgICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICB0aGVfcGFja2FnZSA9IF9faW1wb3J0X18oYWJzdGVzdCwgZ2xvYmFscygpLCBsb2NhbHMoKSwgW10pCisgICAgICAgICAgICAgICAgdGhlX21vZHVsZSA9IGdldGF0dHIodGhlX3BhY2thZ2UsIHRlc3QpCisgICAgICAgICAgICAgICAgIyBPbGQgdGVzdHMgcnVuIHRvIGNvbXBsZXRpb24gc2ltcGx5IGFzIGEgc2lkZS1lZmZlY3Qgb2YKKyAgICAgICAgICAgICAgICAjIGJlaW5nIGltcG9ydGVkLiAgRm9yIHRlc3RzIGJhc2VkIG9uIHVuaXR0ZXN0IG9yIGRvY3Rlc3QsCisgICAgICAgICAgICAgICAgIyBleHBsaWNpdGx5IGludm9rZSB0aGVpciB0ZXN0X21haW4oKSBmdW5jdGlvbiAoaWYgaXQgZXhpc3RzKS4KKyAgICAgICAgICAgICAgICBpbmRpcmVjdF90ZXN0ID0gZ2V0YXR0cih0aGVfbW9kdWxlLCAidGVzdF9tYWluIiwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBpbmRpcmVjdF90ZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpbmRpcmVjdF90ZXN0KCkKKyAgICAgICAgICAgICAgICBpZiBodW50cmxlYWtzOgorICAgICAgICAgICAgICAgICAgICByZWZsZWFrID0gZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIGluZGlyZWN0X3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBodW50cmxlYWtzKQorICAgICAgICAgICAgICAgIHRlc3RfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisgICAgZXhjZXB0IHRlc3Rfc3VwcG9ydC5SZXNvdXJjZURlbmllZCwgbXNnOgorICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICBwcmludCB0ZXN0LCAic2tpcHBlZCAtLSIsIG1zZworICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHJldHVybiBSRVNPVVJDRV9ERU5JRUQsIHRlc3RfdGltZQorICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdCwgbXNnOgorICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICBwcmludCB0ZXN0LCAic2tpcHBlZCAtLSIsIG1zZworICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHJldHVybiBTS0lQUEVELCB0ZXN0X3RpbWUKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkLCBtc2c6CisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgInRlc3QiLCB0ZXN0LCAiZmFpbGVkIC0tIiwgbXNnCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICByZXR1cm4gRkFJTEVELCB0ZXN0X3RpbWUKKyAgICBleGNlcHQ6CisgICAgICAgIHR5cGUsIHZhbHVlID0gc3lzLmV4Y19pbmZvKClbOjJdCisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgInRlc3QiLCB0ZXN0LCAiY3Jhc2hlZCAtLSIsIHN0cih0eXBlKSArICI6IiwgdmFsdWUKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICByZXR1cm4gRkFJTEVELCB0ZXN0X3RpbWUKKyAgICBlbHNlOgorICAgICAgICBpZiByZWZsZWFrOgorICAgICAgICAgICAgcmV0dXJuIEZBSUxFRCwgdGVzdF90aW1lCisgICAgICAgIGlmIGVudmlyb25tZW50LmNoYW5nZWQ6CisgICAgICAgICAgICByZXR1cm4gRU5WX0NIQU5HRUQsIHRlc3RfdGltZQorICAgICAgICAjIEV4Y2VwdCBpbiB2ZXJib3NlIG1vZGUsIHRlc3RzIHNob3VsZCBub3QgcHJpbnQgYW55dGhpbmcKKyAgICAgICAgaWYgdmVyYm9zZSBvciBodW50cmxlYWtzOgorICAgICAgICAgICAgcmV0dXJuIFBBU1NFRCwgdGVzdF90aW1lCisgICAgICAgIG91dHB1dCA9IGNhcHR1cmVfc3Rkb3V0LmdldHZhbHVlKCkKKyAgICAgICAgaWYgbm90IG91dHB1dDoKKyAgICAgICAgICAgIHJldHVybiBQQVNTRUQsIHRlc3RfdGltZQorICAgICAgICBwcmludCAidGVzdCIsIHRlc3QsICJwcm9kdWNlZCB1bmV4cGVjdGVkIG91dHB1dDoiCisgICAgICAgIHByaW50ICIqIiAqIDcwCisgICAgICAgIHByaW50IG91dHB1dAorICAgICAgICBwcmludCAiKiIgKiA3MAorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIEZBSUxFRCwgdGVzdF90aW1lCisKK2RlZiBjbGVhbnVwX3Rlc3RfZHJvcHBpbmdzKHRlc3RuYW1lLCB2ZXJib3NlKToKKyAgICBpbXBvcnQgc3RhdAorICAgIGltcG9ydCBnYworCisgICAgIyBGaXJzdCBraWxsIGFueSBkYW5nbGluZyByZWZlcmVuY2VzIHRvIG9wZW4gZmlsZXMgZXRjLgorICAgIGdjLmNvbGxlY3QoKQorCisgICAgIyBUcnkgdG8gY2xlYW4gdXAganVuayBjb21tb25seSBsZWZ0IGJlaGluZC4gIFdoaWxlIHRlc3RzIHNob3VsZG4ndCBsZWF2ZQorICAgICMgYW55IGZpbGVzIG9yIGRpcmVjdG9yaWVzIGJlaGluZCwgd2hlbiBhIHRlc3QgZmFpbHMgdGhhdCBjYW4gYmUgdGVkaW91cworICAgICMgZm9yIGl0IHRvIGFycmFuZ2UuICBUaGUgY29uc2VxdWVuY2VzIGNhbiBiZSBlc3BlY2lhbGx5IG5hc3R5IG9uIFdpbmRvd3MsCisgICAgIyBzaW5jZSBpZiBhIHRlc3QgbGVhdmVzIGEgZmlsZSBvcGVuLCBpdCBjYW5ub3QgYmUgZGVsZXRlZCBieSBuYW1lICh3aGlsZQorICAgICMgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCB0aGF0IGhlcmUgZWl0aGVyLCB3ZSBjYW4gZGlzcGxheSB0aGUKKyAgICAjIG5hbWUgb2YgdGhlIG9mZmVuZGluZyB0ZXN0LCB3aGljaCBpcyBhIHJlYWwgaGVscCkuCisgICAgZm9yIG5hbWUgaW4gKHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICJkYl9ob21lIiwKKyAgICAgICAgICAgICAgICApOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobmFtZSk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIobmFtZSk6CisgICAgICAgICAgICBraW5kLCBudWtlciA9ICJkaXJlY3RvcnkiLCBzaHV0aWwucm10cmVlCisgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUobmFtZSk6CisgICAgICAgICAgICBraW5kLCBudWtlciA9ICJmaWxlIiwgb3MudW5saW5rCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FcnJvcigib3MucGF0aCBzYXlzICVyIGV4aXN0cyBidXQgaXMgbmVpdGhlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0b3J5IG5vciBmaWxlIiAlIG5hbWUpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIlciBsZWZ0IGJlaGluZCAlcyAlciIgJSAodGVzdG5hbWUsIGtpbmQsIG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgaWYgd2UgaGF2ZSBjaG1vZCwgZml4IHBvc3NpYmxlIHBlcm1pc3Npb25zIHByb2JsZW1zCisgICAgICAgICAgICAjIHRoYXQgbWlnaHQgcHJldmVudCBjbGVhbnVwCisgICAgICAgICAgICBpZiAoaGFzYXR0cihvcywgJ2NobW9kJykpOgorICAgICAgICAgICAgICAgIG9zLmNobW9kKG5hbWUsIHN0YXQuU19JUldYVSB8IHN0YXQuU19JUldYRyB8IHN0YXQuU19JUldYTykKKyAgICAgICAgICAgIG51a2VyKG5hbWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIG1zZzoKKyAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICgiJXIgbGVmdCBiZWhpbmQgJXMgJXIgYW5kIGl0IGNvdWxkbid0IGJlICIKKyAgICAgICAgICAgICAgICAicmVtb3ZlZDogJXMiICUgKHRlc3RuYW1lLCBraW5kLCBuYW1lLCBtc2cpKQorCitkZWYgZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIGluZGlyZWN0X3Rlc3QsIGh1bnRybGVha3MpOgorICAgICIiIlJ1biBhIHRlc3QgbXVsdGlwbGUgdGltZXMsIGxvb2tpbmcgZm9yIHJlZmVyZW5jZSBsZWFrcy4KKworICAgIFJldHVybnM6CisgICAgICAgIEZhbHNlIGlmIHRoZSB0ZXN0IGRpZG4ndCBsZWFrIHJlZmVyZW5jZXM7IFRydWUgaWYgd2UgZGV0ZWN0ZWQgcmVmbGVha3MuCisgICAgIiIiCisgICAgIyBUaGlzIGNvZGUgaXMgaGFja2lzaCBhbmQgaW5lbGVnYW50LCBidXQgaXQgc2VlbXMgdG8gZG8gdGhlIGpvYi4KKyAgICBpbXBvcnQgY29weV9yZWcsIF9hYmNvbGwsIF9weWlvCisKKyAgICBpZiBub3QgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVHJhY2tpbmcgcmVmZXJlbmNlIGxlYWtzIHJlcXVpcmVzIGEgZGVidWcgYnVpbGQgIgorICAgICAgICAgICAgICAgICAgICAgICAgIm9mIFB5dGhvbiIpCisKKyAgICAjIFNhdmUgY3VycmVudCB2YWx1ZXMgZm9yIGRhc2hfUl9jbGVhbnVwKCkgdG8gcmVzdG9yZS4KKyAgICBmcyA9IHdhcm5pbmdzLmZpbHRlcnNbOl0KKyAgICBwcyA9IGNvcHlfcmVnLmRpc3BhdGNoX3RhYmxlLmNvcHkoKQorICAgIHBpYyA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNvcHkoKQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHppcGltcG9ydAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgemRjID0gTm9uZSAjIFJ1biB1bm1vZGlmaWVkIG9uIHBsYXRmb3JtcyB3aXRob3V0IHppcGltcG9ydCBzdXBwb3J0CisgICAgZWxzZToKKyAgICAgICAgemRjID0gemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLmNvcHkoKQorICAgIGFiY3MgPSB7fQorICAgIG1vZHVsZXMgPSBfYWJjb2xsLCBfcHlpbworICAgIGZvciBhYmMgaW4gW2dldGF0dHIobW9kLCBhKSBmb3IgbW9kIGluIG1vZHVsZXMgZm9yIGEgaW4gbW9kLl9fYWxsX19dOgorICAgICAgICAjIFhYWCBpc2luc3RhbmNlKGFiYywgQUJDTWV0YSkgbGVhZHMgdG8gaW5maW5pdGUgcmVjdXJzaW9uCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGFiYywgJ19hYmNfcmVnaXN0cnknKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBvYmogaW4gYWJjLl9fc3ViY2xhc3Nlc19fKCkgKyBbYWJjXToKKyAgICAgICAgICAgIGFiY3Nbb2JqXSA9IG9iai5fYWJjX3JlZ2lzdHJ5LmNvcHkoKQorCisgICAgaWYgaW5kaXJlY3RfdGVzdDoKKyAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgorICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCgpCisgICAgZWxzZToKKyAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgorICAgICAgICAgICAgaW1wLnJlbG9hZCh0aGVfbW9kdWxlKQorCisgICAgZGVsdGFzID0gW10KKyAgICBud2FybXVwLCBudHJhY2tlZCwgZm5hbWUgPSBodW50cmxlYWtzCisgICAgZm5hbWUgPSBvcy5wYXRoLmpvaW4odGVzdF9zdXBwb3J0LlNBVkVEQ1dELCBmbmFtZSkKKyAgICByZXBjb3VudCA9IG53YXJtdXAgKyBudHJhY2tlZAorICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJiZWdpbm5pbmciLCByZXBjb3VudCwgInJlcGV0aXRpb25zIgorICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICgiMTIzNDU2Nzg5MCIqKHJlcGNvdW50Ly8xMCArIDEpKVs6cmVwY291bnRdCisgICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKKyAgICBmb3IgaSBpbiByYW5nZShyZXBjb3VudCk6CisgICAgICAgIHJjX2JlZm9yZSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcnVuX3RoZV90ZXN0KCkKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCisgICAgICAgIGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIGFiY3MpCisgICAgICAgIHJjX2FmdGVyID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBpZiBpID49IG53YXJtdXA6CisgICAgICAgICAgICBkZWx0YXMuYXBwZW5kKHJjX2FmdGVyIC0gcmNfYmVmb3JlKQorICAgIHByaW50ID4+IHN5cy5zdGRlcnIKKyAgICBpZiBhbnkoZGVsdGFzKToKKyAgICAgICAgbXNnID0gJyVzIGxlYWtlZCAlcyByZWZlcmVuY2VzLCBzdW09JXMnICUgKHRlc3QsIGRlbHRhcywgc3VtKGRlbHRhcykpCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsIG1zZworICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJhIikgYXMgcmVmcmVwOgorICAgICAgICAgICAgcHJpbnQgPj4gcmVmcmVwLCBtc2cKKyAgICAgICAgICAgIHJlZnJlcC5mbHVzaCgpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKToKKyAgICBpbXBvcnQgZ2MsIGNvcHlfcmVnCisgICAgaW1wb3J0IF9zdHJwdGltZSwgbGluZWNhY2hlCisgICAgZGlyY2FjaGUgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnZGlyY2FjaGUnLCBkZXByZWNhdGVkPVRydWUpCisgICAgaW1wb3J0IHVybHBhcnNlLCB1cmxsaWIsIHVybGxpYjIsIG1pbWV0eXBlcywgZG9jdGVzdAorICAgIGltcG9ydCBzdHJ1Y3QsIGZpbGVjbXAKKyAgICBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgX3BhdGhfY3JlYXRlZAorCisgICAgIyBDbGVhciB0aGUgd2FybmluZ3MgcmVnaXN0cnksIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBhZ2FpbgorICAgIGZvciBtb2QgaW4gc3lzLm1vZHVsZXMudmFsdWVzKCk6CisgICAgICAgIGlmIGhhc2F0dHIobW9kLCAnX193YXJuaW5ncmVnaXN0cnlfXycpOgorICAgICAgICAgICAgZGVsIG1vZC5fX3dhcm5pbmdyZWdpc3RyeV9fCisKKyAgICAjIFJlc3RvcmUgc29tZSBvcmlnaW5hbCB2YWx1ZXMuCisgICAgd2FybmluZ3MuZmlsdGVyc1s6XSA9IGZzCisgICAgY29weV9yZWcuZGlzcGF0Y2hfdGFibGUuY2xlYXIoKQorICAgIGNvcHlfcmVnLmRpc3BhdGNoX3RhYmxlLnVwZGF0ZShwcykKKyAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCisgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUudXBkYXRlKHBpYykKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB6aXBpbXBvcnQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MgIyBSdW4gdW5tb2RpZmllZCBvbiBwbGF0Zm9ybXMgd2l0aG91dCB6aXBpbXBvcnQgc3VwcG9ydAorICAgIGVsc2U6CisgICAgICAgIHppcGltcG9ydC5femlwX2RpcmVjdG9yeV9jYWNoZS5jbGVhcigpCisgICAgICAgIHppcGltcG9ydC5femlwX2RpcmVjdG9yeV9jYWNoZS51cGRhdGUoemRjKQorCisgICAgIyBjbGVhciB0eXBlIGNhY2hlCisgICAgc3lzLl9jbGVhcl90eXBlX2NhY2hlKCkKKworICAgICMgQ2xlYXIgQUJDIHJlZ2lzdHJpZXMsIHJlc3RvcmluZyBwcmV2aW91c2x5IHNhdmVkIEFCQyByZWdpc3RyaWVzLgorICAgIGZvciBhYmMsIHJlZ2lzdHJ5IGluIGFiY3MuaXRlbXMoKToKKyAgICAgICAgYWJjLl9hYmNfcmVnaXN0cnkgPSByZWdpc3RyeS5jb3B5KCkKKyAgICAgICAgYWJjLl9hYmNfY2FjaGUuY2xlYXIoKQorICAgICAgICBhYmMuX2FiY19uZWdhdGl2ZV9jYWNoZS5jbGVhcigpCisKKyAgICAjIENsZWFyIGFzc29ydGVkIG1vZHVsZSBjYWNoZXMuCisgICAgX3BhdGhfY3JlYXRlZC5jbGVhcigpCisgICAgcmUucHVyZ2UoKQorICAgIF9zdHJwdGltZS5fcmVnZXhfY2FjaGUuY2xlYXIoKQorICAgIHVybHBhcnNlLmNsZWFyX2NhY2hlKCkKKyAgICB1cmxsaWIudXJsY2xlYW51cCgpCisgICAgdXJsbGliMi5pbnN0YWxsX29wZW5lcihOb25lKQorICAgIGRpcmNhY2hlLnJlc2V0KCkKKyAgICBsaW5lY2FjaGUuY2xlYXJjYWNoZSgpCisgICAgbWltZXR5cGVzLl9kZWZhdWx0X21pbWVfdHlwZXMoKQorICAgIGZpbGVjbXAuX2NhY2hlLmNsZWFyKCkKKyAgICBzdHJ1Y3QuX2NsZWFyY2FjaGUoKQorICAgIGRvY3Rlc3QubWFzdGVyID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IGN0eXBlcworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgIyBEb24ndCB3b3JyeSBhYm91dCByZXNldHRpbmcgdGhlIGNhY2hlIGlmIGN0eXBlcyBpcyBub3Qgc3VwcG9ydGVkCisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBjdHlwZXMuX3Jlc2V0X2NhY2hlKCkKKworICAgICMgQ29sbGVjdCBjeWNsaWMgdHJhc2guCisgICAgZ2MuY29sbGVjdCgpCisKK2RlZiBmaW5kdGVzdGRpcihwYXRoPU5vbmUpOgorICAgIHJldHVybiBwYXRoIG9yIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyCisKK2RlZiByZW1vdmVweShuYW1lcyk6CisgICAgaWYgbm90IG5hbWVzOgorICAgICAgICByZXR1cm4KKyAgICBmb3IgaWR4LCBuYW1lIGluIGVudW1lcmF0ZShuYW1lcyk6CisgICAgICAgIGJhc2VuYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KG5hbWUpCisgICAgICAgIGlmIGV4dCA9PSAnLnB5JzoKKyAgICAgICAgICAgIG5hbWVzW2lkeF0gPSBiYXNlbmFtZQorCitkZWYgY291bnQobiwgd29yZCk6CisgICAgaWYgbiA9PSAxOgorICAgICAgICByZXR1cm4gIiVkICVzIiAlIChuLCB3b3JkKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAiJWQgJXNzIiAlIChuLCB3b3JkKQorCitkZWYgcHJpbnRsaXN0KHgsIHdpZHRoPTcwLCBpbmRlbnQ9NCk6CisgICAgIiIiUHJpbnQgdGhlIGVsZW1lbnRzIG9mIGl0ZXJhYmxlIHggdG8gc3Rkb3V0LgorCisgICAgT3B0aW9uYWwgYXJnIHdpZHRoIChkZWZhdWx0IDcwKSBpcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aC4KKyAgICBPcHRpb25hbCBhcmcgaW5kZW50IChkZWZhdWx0IDQpIGlzIHRoZSBudW1iZXIgb2YgYmxhbmtzIHdpdGggd2hpY2ggdG8KKyAgICBiZWdpbiBlYWNoIGxpbmUuCisgICAgIiIiCisKKyAgICBmcm9tIHRleHR3cmFwIGltcG9ydCBmaWxsCisgICAgYmxhbmtzID0gJyAnICogaW5kZW50CisgICAgIyBQcmludCB0aGUgc29ydGVkIGxpc3Q6ICd4JyBtYXkgYmUgYSAnLS1yYW5kb20nIGxpc3Qgb3IgYSBzZXQoKQorICAgIHByaW50IGZpbGwoJyAnLmpvaW4oc3RyKGVsdCkgZm9yIGVsdCBpbiBzb3J0ZWQoeCkpLCB3aWR0aCwKKyAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PWJsYW5rcywgc3Vic2VxdWVudF9pbmRlbnQ9YmxhbmtzKQorCisjIE1hcCBzeXMucGxhdGZvcm0gdG8gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYmFzZW5hbWVzIG9mIHRlc3RzCisjIGV4cGVjdGVkIHRvIGJlIHNraXBwZWQgb24gdGhhdCBwbGF0Zm9ybS4KKyMKKyMgU3BlY2lhbCBjYXNlczoKKyMgICAgIHRlc3RfcGVwMjc3CisjICAgICAgICAgVGhlIF9FeHBlY3RlZFNraXBzIGNvbnN0cnVjdG9yIGFkZHMgdGhpcyB0byB0aGUgc2V0IG9mIGV4cGVjdGVkCisjICAgICAgICAgc2tpcHMgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMuCisjICAgICB0ZXN0X3RpbWVvdXQKKyMgICAgICAgICBDb250cm9sbGVkIGJ5IHRlc3RfdGltZW91dC5za2lwX2V4cGVjdGVkLiAgUmVxdWlyZXMgdGhlIG5ldHdvcmsKKyMgICAgICAgICByZXNvdXJjZSBhbmQgYSBzb2NrZXQgbW9kdWxlLgorIworIyBUZXN0cyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBza2lwcGVkIGV2ZXJ5d2hlcmUgZXhjZXB0IG9uIG9uZSBwbGF0Zm9ybQorIyBhcmUgYWxzbyBoYW5kbGVkIHNlcGFyYXRlbHkuCisKK19leHBlY3RhdGlvbnMgPSB7CisgICAgJ3dpbjMyJzoKKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfX2xvY2FsZQorICAgICAgICB0ZXN0X2JzZGRiMTg1CisgICAgICAgIHRlc3RfYnNkZGIzCisgICAgICAgIHRlc3RfY29tbWFuZHMKKyAgICAgICAgdGVzdF9jcnlwdAorICAgICAgICB0ZXN0X2N1cnNlcworICAgICAgICB0ZXN0X2RibQorICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfZmNudGwKKyAgICAgICAgdGVzdF9mb3JrMQorICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfZ2RibQorICAgICAgICB0ZXN0X2dycAorICAgICAgICB0ZXN0X2lvY3RsCisgICAgICAgIHRlc3RfbGFyZ2VmaWxlCisgICAgICAgIHRlc3Rfa3F1ZXVlCisgICAgICAgIHRlc3RfbWhsaWIKKyAgICAgICAgdGVzdF9vcGVucHR5CisgICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKKyAgICAgICAgdGVzdF9waXBlcworICAgICAgICB0ZXN0X3BvbGwKKyAgICAgICAgdGVzdF9wb3NpeAorICAgICAgICB0ZXN0X3B0eQorICAgICAgICB0ZXN0X3B3ZAorICAgICAgICB0ZXN0X3Jlc291cmNlCisgICAgICAgIHRlc3Rfc2lnbmFsCisgICAgICAgIHRlc3RfdGhyZWFkc2lnbmFscworICAgICAgICB0ZXN0X3RpbWluZworICAgICAgICB0ZXN0X3dhaXQzCisgICAgICAgIHRlc3Rfd2FpdDQKKyAgICAgICAgIiIiLAorICAgICdsaW51eDInOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9ic2RkYjE4NQorICAgICAgICB0ZXN0X2N1cnNlcworICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfbGFyZ2VmaWxlCisgICAgICAgIHRlc3Rfa3F1ZXVlCisgICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKKyAgICAgICAgIiIiLAorICAgICd1bml4d2FyZTcnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9ic2RkYgorICAgICAgICB0ZXN0X2JzZGRiMTg1CisgICAgICAgIHRlc3RfZGwKKyAgICAgICAgdGVzdF9lcG9sbAorICAgICAgICB0ZXN0X2xhcmdlZmlsZQorICAgICAgICB0ZXN0X2txdWV1ZQorICAgICAgICB0ZXN0X21pbmlkb20KKyAgICAgICAgdGVzdF9vcGVucHR5CisgICAgICAgIHRlc3RfcHlleHBhdAorICAgICAgICB0ZXN0X3NheAorICAgICAgICB0ZXN0X3N1bmRyeQorICAgICAgICAiIiIsCisgICAgJ29wZW51bml4OCc6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X2JzZGRiCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9kbAorICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfbGFyZ2VmaWxlCisgICAgICAgIHRlc3Rfa3F1ZXVlCisgICAgICAgIHRlc3RfbWluaWRvbQorICAgICAgICB0ZXN0X29wZW5wdHkKKyAgICAgICAgdGVzdF9weWV4cGF0CisgICAgICAgIHRlc3Rfc2F4CisgICAgICAgIHRlc3Rfc3VuZHJ5CisgICAgICAgICIiIiwKKyAgICAnc2NvX3N2Myc6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X2FzeW5jaGF0CisgICAgICAgIHRlc3RfYnNkZGIKKyAgICAgICAgdGVzdF9ic2RkYjE4NQorICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfZm9yazEKKyAgICAgICAgdGVzdF9lcG9sbAorICAgICAgICB0ZXN0X2dldHRleHQKKyAgICAgICAgdGVzdF9sYXJnZWZpbGUKKyAgICAgICAgdGVzdF9sb2NhbGUKKyAgICAgICAgdGVzdF9rcXVldWUKKyAgICAgICAgdGVzdF9taW5pZG9tCisgICAgICAgIHRlc3Rfb3BlbnB0eQorICAgICAgICB0ZXN0X3B5ZXhwYXQKKyAgICAgICAgdGVzdF9xdWV1ZQorICAgICAgICB0ZXN0X3NheAorICAgICAgICB0ZXN0X3N1bmRyeQorICAgICAgICB0ZXN0X3RocmVhZAorICAgICAgICB0ZXN0X3RocmVhZGVkX2ltcG9ydAorICAgICAgICB0ZXN0X3RocmVhZGVkdGVtcGZpbGUKKyAgICAgICAgdGVzdF90aHJlYWRpbmcKKyAgICAgICAgIiIiLAorICAgICdyaXNjb3MnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9hc3luY2hhdAorICAgICAgICB0ZXN0X2F0ZXhpdAorICAgICAgICB0ZXN0X2JzZGRiCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9ic2RkYjMKKyAgICAgICAgdGVzdF9jb21tYW5kcworICAgICAgICB0ZXN0X2NyeXB0CisgICAgICAgIHRlc3RfZGJtCisgICAgICAgIHRlc3RfZGwKKyAgICAgICAgdGVzdF9mY250bAorICAgICAgICB0ZXN0X2ZvcmsxCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9nZGJtCisgICAgICAgIHRlc3RfZ3JwCisgICAgICAgIHRlc3RfbGFyZ2VmaWxlCisgICAgICAgIHRlc3RfbG9jYWxlCisgICAgICAgIHRlc3Rfa3F1ZXVlCisgICAgICAgIHRlc3RfbW1hcAorICAgICAgICB0ZXN0X29wZW5wdHkKKyAgICAgICAgdGVzdF9wb2xsCisgICAgICAgIHRlc3RfcG9wZW4yCisgICAgICAgIHRlc3RfcHR5CisgICAgICAgIHRlc3RfcHdkCisgICAgICAgIHRlc3Rfc3Ryb3AKKyAgICAgICAgdGVzdF9zdW5kcnkKKyAgICAgICAgdGVzdF90aHJlYWQKKyAgICAgICAgdGVzdF90aHJlYWRlZF9pbXBvcnQKKyAgICAgICAgdGVzdF90aHJlYWRlZHRlbXBmaWxlCisgICAgICAgIHRlc3RfdGhyZWFkaW5nCisgICAgICAgIHRlc3RfdGltaW5nCisgICAgICAgICIiIiwKKyAgICAnZGFyd2luJzoKKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfX2xvY2FsZQorICAgICAgICB0ZXN0X2JzZGRiCisgICAgICAgIHRlc3RfYnNkZGIzCisgICAgICAgIHRlc3RfY3Vyc2VzCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9nZGIKKyAgICAgICAgdGVzdF9nZGJtCisgICAgICAgIHRlc3RfbGFyZ2VmaWxlCisgICAgICAgIHRlc3RfbG9jYWxlCisgICAgICAgIHRlc3Rfa3F1ZXVlCisgICAgICAgIHRlc3RfbWluaWRvbQorICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CisgICAgICAgIHRlc3RfcG9sbAorICAgICAgICAiIiIsCisgICAgJ3N1bm9zNSc6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X2JzZGRiCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9jdXJzZXMKKyAgICAgICAgdGVzdF9kYm0KKyAgICAgICAgdGVzdF9lcG9sbAorICAgICAgICB0ZXN0X2txdWV1ZQorICAgICAgICB0ZXN0X2dkYm0KKyAgICAgICAgdGVzdF9nemlwCisgICAgICAgIHRlc3Rfb3BlbnB0eQorICAgICAgICB0ZXN0X3ppcGZpbGUKKyAgICAgICAgdGVzdF96bGliCisgICAgICAgICIiIiwKKyAgICAnaHAtdXgxMSc6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X2JzZGRiCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9jdXJzZXMKKyAgICAgICAgdGVzdF9kbAorICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfZ2RibQorICAgICAgICB0ZXN0X2d6aXAKKyAgICAgICAgdGVzdF9sYXJnZWZpbGUKKyAgICAgICAgdGVzdF9sb2NhbGUKKyAgICAgICAgdGVzdF9rcXVldWUKKyAgICAgICAgdGVzdF9taW5pZG9tCisgICAgICAgIHRlc3Rfb3BlbnB0eQorICAgICAgICB0ZXN0X3B5ZXhwYXQKKyAgICAgICAgdGVzdF9zYXgKKyAgICAgICAgdGVzdF96aXBmaWxlCisgICAgICAgIHRlc3RfemxpYgorICAgICAgICAiIiIsCisgICAgJ2F0aGVvcyc6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X2JzZGRiMTg1CisgICAgICAgIHRlc3RfY3Vyc2VzCisgICAgICAgIHRlc3RfZGwKKyAgICAgICAgdGVzdF9nZGJtCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9sYXJnZWZpbGUKKyAgICAgICAgdGVzdF9sb2NhbGUKKyAgICAgICAgdGVzdF9rcXVldWUKKyAgICAgICAgdGVzdF9taGxpYgorICAgICAgICB0ZXN0X21tYXAKKyAgICAgICAgdGVzdF9wb2xsCisgICAgICAgIHRlc3RfcG9wZW4yCisgICAgICAgIHRlc3RfcmVzb3VyY2UKKyAgICAgICAgIiIiLAorICAgICdjeWd3aW4nOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9ic2RkYjE4NQorICAgICAgICB0ZXN0X2JzZGRiMworICAgICAgICB0ZXN0X2N1cnNlcworICAgICAgICB0ZXN0X2RibQorICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfaW9jdGwKKyAgICAgICAgdGVzdF9rcXVldWUKKyAgICAgICAgdGVzdF9sYXJnZWZpbGUKKyAgICAgICAgdGVzdF9sb2NhbGUKKyAgICAgICAgdGVzdF9vc3NhdWRpb2RldgorICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgorICAgICAgICAiIiIsCisgICAgJ29zMmVteCc6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X2F1ZGlvb3AKKyAgICAgICAgdGVzdF9ic2RkYjE4NQorICAgICAgICB0ZXN0X2JzZGRiMworICAgICAgICB0ZXN0X2NvbW1hbmRzCisgICAgICAgIHRlc3RfY3Vyc2VzCisgICAgICAgIHRlc3RfZGwKKyAgICAgICAgdGVzdF9lcG9sbAorICAgICAgICB0ZXN0X2txdWV1ZQorICAgICAgICB0ZXN0X2xhcmdlZmlsZQorICAgICAgICB0ZXN0X21obGliCisgICAgICAgIHRlc3RfbW1hcAorICAgICAgICB0ZXN0X29wZW5wdHkKKyAgICAgICAgdGVzdF9vc3NhdWRpb2RldgorICAgICAgICB0ZXN0X3B0eQorICAgICAgICB0ZXN0X3Jlc291cmNlCisgICAgICAgIHRlc3Rfc2lnbmFsCisgICAgICAgICIiIiwKKyAgICAnZnJlZWJzZDQnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9ic2RkYgorICAgICAgICB0ZXN0X2JzZGRiMworICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfZ2RibQorICAgICAgICB0ZXN0X2xvY2FsZQorICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CisgICAgICAgIHRlc3RfcGVwMjc3CisgICAgICAgIHRlc3RfcHR5CisgICAgICAgIHRlc3Rfc29ja2V0c2VydmVyCisgICAgICAgIHRlc3RfdGNsCisgICAgICAgIHRlc3RfdGsKKyAgICAgICAgdGVzdF90dGtfZ3Vpb25seQorICAgICAgICB0ZXN0X3R0a190ZXh0b25seQorICAgICAgICB0ZXN0X3RpbWVvdXQKKyAgICAgICAgdGVzdF91cmxsaWJuZXQKKyAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKKyAgICAgICAgIiIiLAorICAgICdhaXg1JzoKKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfYnNkZGIKKyAgICAgICAgdGVzdF9ic2RkYjE4NQorICAgICAgICB0ZXN0X2JzZGRiMworICAgICAgICB0ZXN0X2J6MgorICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9nZGJtCisgICAgICAgIHRlc3RfZ3ppcAorICAgICAgICB0ZXN0X2txdWV1ZQorICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CisgICAgICAgIHRlc3RfdGNsCisgICAgICAgIHRlc3RfdGsKKyAgICAgICAgdGVzdF90dGtfZ3Vpb25seQorICAgICAgICB0ZXN0X3R0a190ZXh0b25seQorICAgICAgICB0ZXN0X3ppcGltcG9ydAorICAgICAgICB0ZXN0X3psaWIKKyAgICAgICAgIiIiLAorICAgICdvcGVuYnNkMyc6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X2FzY2lpX2Zvcm1hdGQKKyAgICAgICAgdGVzdF9ic2RkYgorICAgICAgICB0ZXN0X2JzZGRiMworICAgICAgICB0ZXN0X2N0eXBlcworICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9nZGJtCisgICAgICAgIHRlc3RfbG9jYWxlCisgICAgICAgIHRlc3Rfbm9ybWFsaXphdGlvbgorICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CisgICAgICAgIHRlc3RfcGVwMjc3CisgICAgICAgIHRlc3RfdGNsCisgICAgICAgIHRlc3RfdGsKKyAgICAgICAgdGVzdF90dGtfZ3Vpb25seQorICAgICAgICB0ZXN0X3R0a190ZXh0b25seQorICAgICAgICB0ZXN0X211bHRpcHJvY2Vzc2luZworICAgICAgICAiIiIsCisgICAgJ25ldGJzZDMnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9hc2NpaV9mb3JtYXRkCisgICAgICAgIHRlc3RfYnNkZGIKKyAgICAgICAgdGVzdF9ic2RkYjE4NQorICAgICAgICB0ZXN0X2JzZGRiMworICAgICAgICB0ZXN0X2N0eXBlcworICAgICAgICB0ZXN0X2N1cnNlcworICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9nZGJtCisgICAgICAgIHRlc3RfbG9jYWxlCisgICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKKyAgICAgICAgdGVzdF9wZXAyNzcKKyAgICAgICAgdGVzdF90Y2wKKyAgICAgICAgdGVzdF90aworICAgICAgICB0ZXN0X3R0a19ndWlvbmx5CisgICAgICAgIHRlc3RfdHRrX3RleHRvbmx5CisgICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCisgICAgICAgICIiIiwKK30KK19leHBlY3RhdGlvbnNbJ2ZyZWVic2Q1J10gPSBfZXhwZWN0YXRpb25zWydmcmVlYnNkNCddCitfZXhwZWN0YXRpb25zWydmcmVlYnNkNiddID0gX2V4cGVjdGF0aW9uc1snZnJlZWJzZDQnXQorX2V4cGVjdGF0aW9uc1snZnJlZWJzZDcnXSA9IF9leHBlY3RhdGlvbnNbJ2ZyZWVic2Q0J10KK19leHBlY3RhdGlvbnNbJ2ZyZWVic2Q4J10gPSBfZXhwZWN0YXRpb25zWydmcmVlYnNkNCddCisKK2NsYXNzIF9FeHBlY3RlZFNraXBzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgaW1wb3J0IG9zLnBhdGgKKyAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3RpbWVvdXQKKworICAgICAgICBzZWxmLnZhbGlkID0gRmFsc2UKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluIF9leHBlY3RhdGlvbnM6CisgICAgICAgICAgICBzID0gX2V4cGVjdGF0aW9uc1tzeXMucGxhdGZvcm1dCisgICAgICAgICAgICBzZWxmLmV4cGVjdGVkID0gc2V0KHMuc3BsaXQoKSkKKworICAgICAgICAgICAgIyBleHBlY3RlZCB0byBiZSBza2lwcGVkIG9uIGV2ZXJ5IHBsYXRmb3JtLCBldmVuIExpbnV4CisgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9saW51eGF1ZGlvZGV2JykKKworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcGVwMjc3JykKKworICAgICAgICAgICAgaWYgdGVzdF90aW1lb3V0LnNraXBfZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfdGltZW91dCcpCisKKyAgICAgICAgICAgIGlmIHN5cy5tYXhpbnQgPT0gOTIyMzM3MjAzNjg1NDc3NTgwN0w6CisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfaW1hZ2VvcCcpCisKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIjoKKyAgICAgICAgICAgICAgICBNQUNfT05MWSA9IFsidGVzdF9tYWNvcyIsICJ0ZXN0X21hY29zdG9vbHMiLCAidGVzdF9hZXBhY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3BsaXN0bGliIiwgInRlc3Rfc2NyaXB0cGFja2FnZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X2FwcGxlc2luZ2xlIl0KKyAgICAgICAgICAgICAgICBmb3Igc2tpcCBpbiBNQUNfT05MWToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoc2tpcCkKKyAgICAgICAgICAgIGVsaWYgbGVuKHUnXDAnLmVuY29kZSgndW5pY29kZS1pbnRlcm5hbCcpKSA9PSA0OgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCJ0ZXN0X21hY29zdG9vbHMiKQorCisKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiOgorICAgICAgICAgICAgICAgICMgdGVzdF9zcWxpdGUgaXMgb25seSByZWxpYWJsZSBvbiBXaW5kb3dzIHdoZXJlIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAgICAgIyBpcyBkaXN0cmlidXRlZCB3aXRoIFB5dGhvbgorICAgICAgICAgICAgICAgIFdJTl9PTkxZID0gWyJ0ZXN0X3VuaWNvZGVfZmlsZSIsICJ0ZXN0X3dpbnJlZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfd2luc291bmQiLCAidGVzdF9zdGFydGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3NxbGl0ZSIsICJ0ZXN0X21zaWxpYiJdCisgICAgICAgICAgICAgICAgZm9yIHNraXAgaW4gV0lOX09OTFk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKHNraXApCisKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnaXJpeCc6CisgICAgICAgICAgICAgICAgSVJJWF9PTkxZID0gWyJ0ZXN0X2ltYWdlb3AiLCAidGVzdF9hbCIsICJ0ZXN0X2NkIiwgInRlc3RfY2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9nbCIsICJ0ZXN0X2ltZ2ZpbGUiXQorICAgICAgICAgICAgICAgIGZvciBza2lwIGluIElSSVhfT05MWToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoc2tpcCkKKworICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdzdW5vczUnOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3N1bmF1ZGlvZGV2JykKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQorCisgICAgICAgICAgICBpZiBub3Qgc3lzLnB5M2t3YXJuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3B5M2t3YXJuJykKKworICAgICAgICAgICAgc2VsZi52YWxpZCA9IFRydWUKKworICAgIGRlZiBpc3ZhbGlkKHNlbGYpOgorICAgICAgICAiUmV0dXJuIHRydWUgaWZmIF9FeHBlY3RlZFNraXBzIGtub3dzIGFib3V0IHRoZSBjdXJyZW50IHBsYXRmb3JtLiIKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsaWQKKworICAgIGRlZiBnZXRleHBlY3RlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHNldCBvZiB0ZXN0IG5hbWVzIHdlIGV4cGVjdCB0byBza2lwIG9uIGN1cnJlbnQgcGxhdGZvcm0uCisKKyAgICAgICAgc2VsZi5pc3ZhbGlkKCkgbXVzdCBiZSB0cnVlLgorICAgICAgICAiIiIKKworICAgICAgICBhc3NlcnQgc2VsZi5pc3ZhbGlkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwZWN0ZWQKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAjIGZpbmR0ZXN0ZGlyKCkgZ2V0cyB0aGUgZGlybmFtZSBvdXQgb2YgX19maWxlX18sIHNvIHdlIGhhdmUgdG8gbWFrZSBpdAorICAgICMgYWJzb2x1dGUgYmVmb3JlIGNoYW5naW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAjIEZvciBleGFtcGxlIF9fZmlsZV9fIG1heSBiZSByZWxhdGl2ZSB3aGVuIHJ1bm5pbmcgdHJhY2Ugb3IgcHJvZmlsZS4KKyAgICAjIFNlZSBpc3N1ZSAjOTMyMy4KKyAgICBfX2ZpbGVfXyA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKworICAgICMgc2FuaXR5IGNoZWNrCisgICAgYXNzZXJ0IF9fZmlsZV9fID09IG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkKKworICAgICMgV2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20gdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnksIGl0IGlzIGJlc3QgcHJhY3RpY2UKKyAgICAjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBJdCBlYXNlcyB0aGUgY2xlYW51cCBvZiBsZWZ0b3ZlcgorICAgICMgZmlsZXMgdXNpbmcgY29tbWFuZCAibWFrZSBkaXN0Y2xlYW4iLgorICAgIGlmIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKKyAgICAgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQorICAgICAgICBURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhURU1QRElSKToKKyAgICAgICAgICAgIG9zLm1rZGlyKFRFTVBESVIpCisKKyAgICAjIERlZmluZSBhIHdyaXRhYmxlIHRlbXAgZGlyIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGN3ZCB3aGlsZSBydW5uaW5nCisgICAgIyB0aGUgdGVzdHMuIFRoZSBuYW1lIG9mIHRoZSBkaXIgaW5jbHVkZXMgdGhlIHBpZCB0byBhbGxvdyBwYXJhbGxlbAorICAgICMgdGVzdGluZyAoc2VlIHRoZSAtaiBvcHRpb24pLgorICAgIFRFU1RDV0QgPSAndGVzdF9weXRob25fe30nLmZvcm1hdChvcy5nZXRwaWQoKSkKKworICAgIFRFU1RDV0QgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgVEVTVENXRCkKKworICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyeSBjaGFuZ2VzIHRoZSBDV0QgdG8gYQorICAgICMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgorICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiBUaGUgb3JpZ2luYWwgQ1dEIGlzCisgICAgIyBhdmFpbGFibGUgZnJvbSB0ZXN0X3N1cHBvcnQuU0FWRURDV0QuCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQudGVtcF9jd2QoVEVTVENXRCwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3JlbGltcG9ydC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yZWxpbXBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhYTQ5NwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yZWxpbXBvcnQucHkKQEAgLTAsMCArMSBAQAorZnJvbSAudGVzdF9pbXBvcnQgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yZXBlcmYucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvcmVwZXJmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWM0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvcmVwZXJmLnB5CkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKKworZGVmIG1haW4oKToKKyAgICBzID0gIlwxM2hlbGxvXDE0IFwxM3dvcmxkXDE0ICIgKiAxMDAwCisgICAgcCA9IHJlLmNvbXBpbGUociIoW1wxM1wxNF0pIikKKyAgICB0aW1lZnVuYygxMCwgcC5zdWIsICIiLCBzKQorICAgIHRpbWVmdW5jKDEwLCBwLnNwbGl0LCBzKQorICAgIHRpbWVmdW5jKDEwLCBwLmZpbmRhbGwsIHMpCisKK2RlZiB0aW1lZnVuYyhuLCBmdW5jLCAqYXJncywgKiprdyk6CisgICAgdDAgPSB0aW1lLmNsb2NrKCkKKyAgICB0cnk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgcmVzdWx0ID0gZnVuYygqYXJncywgKiprdykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIGZpbmFsbHk6CisgICAgICAgIHQxID0gdGltZS5jbG9jaygpCisgICAgICAgIGlmIG4gPiAxOgorICAgICAgICAgICAgcHJpbnQgbiwgInRpbWVzIiwKKyAgICAgICAgcHJpbnQgZnVuYy5fX25hbWVfXywgIiUuM2YiICUgKHQxLXQwKSwgIkNQVSBzZWNvbmRzIgorCittYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zYW1wbGVfZG9jdGVzdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zYW1wbGVfZG9jdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWFkZWUwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3NhbXBsZV9kb2N0ZXN0LnB5CkBAIC0wLDAgKzEsNzYgQEAKKyIiIlRoaXMgaXMgYSBzYW1wbGUgbW9kdWxlIHRoYXQgZG9lc24ndCByZWFsbHkgdGVzdCBhbnl0aGluZyBhbGwgdGhhdAorICAgaW50ZXJlc3RpbmcuCisKK0l0IHNpbXBseSBoYXMgYSBmZXcgdGVzdHMsIHNvbWUgb2Ygd2hpY2ggc3VjY2VlZCBhbmQgc29tZSBvZiB3aGljaCBmYWlsLgorCitJdCdzIGltcG9ydGFudCB0aGF0IHRoZSBudW1iZXJzIHJlbWFpbiBjb25zdGFudCBhcyBhbm90aGVyIHRlc3QgaXMKK3Rlc3RpbmcgdGhlIHJ1bm5pbmcgb2YgdGhlc2UgdGVzdHMuCisKKworPj4+IDIrMgorNAorIiIiCisKKworZGVmIGZvbygpOgorICAgICIiIgorCisgICAgPj4+IDIrMgorICAgIDUKKworICAgID4+PiAyKzIKKyAgICA0CisgICAgIiIiCisKK2RlZiBiYXIoKToKKyAgICAiIiIKKworICAgID4+PiAyKzIKKyAgICA0CisgICAgIiIiCisKK2RlZiB0ZXN0X3NpbGx5X3NldHVwKCk6CisgICAgIiIiCisKKyAgICA+Pj4gaW1wb3J0IHRlc3QudGVzdF9kb2N0ZXN0CisgICAgPj4+IHRlc3QudGVzdF9kb2N0ZXN0LnNpbGx5U2V0dXAKKyAgICBUcnVlCisgICAgIiIiCisKK2RlZiB3X2JsYW5rKCk6CisgICAgIiIiCisgICAgPj4+IGlmIDE6CisgICAgLi4uICAgIHByaW50ICdhJworICAgIC4uLiAgICBwcmludAorICAgIC4uLiAgICBwcmludCAnYicKKyAgICBhCisgICAgPEJMQU5LTElORT4KKyAgICBiCisgICAgIiIiCisKK3ggPSAxCitkZWYgeF9pc19vbmUoKToKKyAgICAiIiIKKyAgICA+Pj4geAorICAgIDEKKyAgICAiIiIKKworZGVmIHlfaXNfb25lKCk6CisgICAgIiIiCisgICAgPj4+IHkKKyAgICAxCisgICAgIiIiCisKK19fdGVzdF9fID0geydnb29kJzogIiIiCisgICAgICAgICAgICAgICAgICAgID4+PiA0MgorICAgICAgICAgICAgICAgICAgICA0MgorICAgICAgICAgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAnYmFkJzogICIiIgorICAgICAgICAgICAgICAgICAgICA+Pj4gNDIKKyAgICAgICAgICAgICAgICAgICAgNjY2CisgICAgICAgICAgICAgICAgICAgICIiIiwKKyAgICAgICAgICAgfQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIGltcG9ydCBkb2N0ZXN0CisgICAgcmV0dXJuIGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zYW1wbGVfZG9jdGVzdF9ub19kb2NzdHJpbmdzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3NhbXBsZV9kb2N0ZXN0X25vX2RvY3N0cmluZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyMDFlZAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zYW1wbGVfZG9jdGVzdF9ub19kb2NzdHJpbmdzLnB5CkBAIC0wLDAgKzEsMTIgQEAKKyMgVGhpcyBpcyBhIHNhbXBsZSBtb2R1bGUgdXNlZCBmb3IgdGVzdGluZyBkb2N0ZXN0LgorIworIyBUaGlzIG1vZHVsZSBpcyBmb3IgdGVzdGluZyBob3cgZG9jdGVzdCBoYW5kbGVzIGEgbW9kdWxlIHdpdGggbm8KKyMgZG9jc3RyaW5ncy4KKworCitjbGFzcyBGb28ob2JqZWN0KToKKworICAgICMgQSBjbGFzcyB3aXRoIG5vIGRvY3N0cmluZy4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3NhbXBsZV9kb2N0ZXN0X25vX2RvY3Rlc3RzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3NhbXBsZV9kb2N0ZXN0X25vX2RvY3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYWE1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jdGVzdHMucHkKQEAgLTAsMCArMSwxNSBAQAorIiIiVGhpcyBpcyBhIHNhbXBsZSBtb2R1bGUgdXNlZCBmb3IgdGVzdGluZyBkb2N0ZXN0LgorCitUaGlzIG1vZHVsZSBpcyBmb3IgdGVzdGluZyBob3cgZG9jdGVzdCBoYW5kbGVzIGEgbW9kdWxlIHdpdGggZG9jc3RyaW5ncworYnV0IG5vIGRvY3Rlc3QgZXhhbXBsZXMuCisKKyIiIgorCisKK2NsYXNzIEZvbyhvYmplY3QpOgorICAgICIiIkEgZG9jc3RyaW5nIHdpdGggbm8gZG9jdGVzdCBleGFtcGxlcy4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2M3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQpAQCAtMCwwICsxLDE3MCBAQAorIyBDb21tb24gdXRpbGl0eSBmdW5jdGlvbnMgdXNlZCBieSB2YXJpb3VzIHNjcmlwdCBleGVjdXRpb24gdGVzdHMKKyMgIGUuZy4gdGVzdF9jbWRfbGluZSwgdGVzdF9jbWRfbGluZV9zY3JpcHQgYW5kIHRlc3RfcnVucHkKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcHlfY29tcGlsZQoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBzaHV0aWwKK3RyeToKKyAgICBpbXBvcnQgemlwZmlsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgSWYgUHl0aG9uIGlzIGJ1aWxkIHdpdGhvdXQgVW5pY29kZSBzdXBwb3J0LCBpbXBvcnRpbmcgX2lvIHdpbGwKKyAgICAjIGZhaWwsIHdoaWNoLCBpbiB0dXJuLCBtZWFucyB0aGF0IHppcGZpbGUgY2Fubm90IGJlIGltcG9ydGVkCisgICAgIyBNb3N0IG9mIHRoaXMgbW9kdWxlIGNhbiB0aGVuIHN0aWxsIGJlIHVzZWQuCisgICAgcGFzcworCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBzdHJpcF9weXRob25fc3RkZXJyCisKKyMgRXhlY3V0aW5nIHRoZSBpbnRlcnByZXRlciBpbiBhIHN1YnByb2Nlc3MKK2RlZiBfYXNzZXJ0X3B5dGhvbihleHBlY3RlZF9zdWNjZXNzLCAqYXJncywgKiplbnZfdmFycyk6CisgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGVdCisgICAgaWYgbm90IGVudl92YXJzOgorICAgICAgICBjbWRfbGluZS5hcHBlbmQoJy1FJykKKyAgICBjbWRfbGluZS5leHRlbmQoYXJncykKKyAgICAjIE5lZWQgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50LCBmb3IgaW4tcGxhY2UgdGVzdGluZyBvZgorICAgICMgc2hhcmVkIGxpYnJhcnkgYnVpbGRzLgorICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgZW52LnVwZGF0ZShlbnZfdmFycykKKyAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRfbGluZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICB0cnk6CisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgZmluYWxseToKKyAgICAgICAgc3VicHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIHAuc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQorICAgIHJjID0gcC5yZXR1cm5jb2RlCisgICAgZXJyID0gIHN0cmlwX3B5dGhvbl9zdGRlcnIoZXJyKQorICAgIGlmIChyYyBhbmQgZXhwZWN0ZWRfc3VjY2Vzcykgb3IgKG5vdCByYyBhbmQgbm90IGV4cGVjdGVkX3N1Y2Nlc3MpOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKKyAgICAgICAgICAgICJQcm9jZXNzIHJldHVybiBjb2RlIGlzICVkLCAiCisgICAgICAgICAgICAic3RkZXJyIGZvbGxvd3M6XG4lcyIgJSAocmMsIGVyci5kZWNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpKSkKKyAgICByZXR1cm4gcmMsIG91dCwgZXJyCisKK2RlZiBhc3NlcnRfcHl0aG9uX29rKCphcmdzLCAqKmVudl92YXJzKToKKyAgICAiIiIKKyAgICBBc3NlcnQgdGhhdCBydW5uaW5nIHRoZSBpbnRlcnByZXRlciB3aXRoIGBhcmdzYCBhbmQgb3B0aW9uYWwgZW52aXJvbm1lbnQKKyAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBpcyBvayBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsIHN0ZGVycikgdHVwbGUuCisgICAgIiIiCisgICAgcmV0dXJuIF9hc3NlcnRfcHl0aG9uKFRydWUsICphcmdzLCAqKmVudl92YXJzKQorCitkZWYgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCphcmdzLCAqKmVudl92YXJzKToKKyAgICAiIiIKKyAgICBBc3NlcnQgdGhhdCBydW5uaW5nIHRoZSBpbnRlcnByZXRlciB3aXRoIGBhcmdzYCBhbmQgb3B0aW9uYWwgZW52aXJvbm1lbnQKKyAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBmYWlscyBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsIHN0ZGVycikgdHVwbGUuCisgICAgIiIiCisgICAgcmV0dXJuIF9hc3NlcnRfcHl0aG9uKEZhbHNlLCAqYXJncywgKiplbnZfdmFycykKKworZGVmIHB5dGhvbl9leGl0X2NvZGUoKmFyZ3MpOgorICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLUUnXQorICAgIGNtZF9saW5lLmV4dGVuZChhcmdzKQorICAgIHdpdGggb3Blbihvcy5kZXZudWxsLCAndycpIGFzIGRldm51bGw6CisgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoY21kX2xpbmUsIHN0ZG91dD1kZXZudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisKK2RlZiBzcGF3bl9weXRob24oKmFyZ3MsICoqa3dhcmdzKToKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1FJ10KKyAgICBjbWRfbGluZS5leHRlbmQoYXJncykKKyAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWRfbGluZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKworZGVmIGtpbGxfcHl0aG9uKHApOgorICAgIHAuc3RkaW4uY2xvc2UoKQorICAgIGRhdGEgPSBwLnN0ZG91dC5yZWFkKCkKKyAgICBwLnN0ZG91dC5jbG9zZSgpCisgICAgIyB0cnkgdG8gY2xlYW51cCB0aGUgY2hpbGQgc28gd2UgZG9uJ3QgYXBwZWFyIHRvIGxlYWsgd2hlbiBydW5uaW5nCisgICAgIyB3aXRoIHJlZ3J0ZXN0IC1SLgorICAgIHAud2FpdCgpCisgICAgc3VicHJvY2Vzcy5fY2xlYW51cCgpCisgICAgcmV0dXJuIGRhdGEKKworZGVmIHJ1bl9weXRob24oKmFyZ3MsICoqa3dhcmdzKToKKyAgICBpZiBfX2RlYnVnX186CisgICAgICAgIHAgPSBzcGF3bl9weXRob24oKmFyZ3MsICoqa3dhcmdzKQorICAgIGVsc2U6CisgICAgICAgIHAgPSBzcGF3bl9weXRob24oJy1PJywgKmFyZ3MsICoqa3dhcmdzKQorICAgIHN0ZG91dF9kYXRhID0ga2lsbF9weXRob24ocCkKKyAgICByZXR1cm4gcC53YWl0KCksIHN0ZG91dF9kYXRhCisKKyMgU2NyaXB0IGNyZWF0aW9uIHV0aWxpdGllcworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiB0ZW1wX2RpcigpOgorICAgIGRpcm5hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICBkaXJuYW1lID0gb3MucGF0aC5yZWFscGF0aChkaXJuYW1lKQorICAgIHRyeToKKyAgICAgICAgeWllbGQgZGlybmFtZQorICAgIGZpbmFsbHk6CisgICAgICAgIHNodXRpbC5ybXRyZWUoZGlybmFtZSkKKworZGVmIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKToKKyAgICBzY3JpcHRfZmlsZW5hbWUgPSBzY3JpcHRfYmFzZW5hbWUrb3MuZXh0c2VwKydweScKKyAgICBzY3JpcHRfbmFtZSA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCBzY3JpcHRfZmlsZW5hbWUpCisgICAgc2NyaXB0X2ZpbGUgPSBvcGVuKHNjcmlwdF9uYW1lLCAndycpCisgICAgc2NyaXB0X2ZpbGUud3JpdGUoc291cmNlKQorICAgIHNjcmlwdF9maWxlLmNsb3NlKCkKKyAgICByZXR1cm4gc2NyaXB0X25hbWUKKworZGVmIGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKToKKyAgICBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICBpZiBfX2RlYnVnX186CisgICAgICAgIGNvbXBpbGVkX25hbWUgPSBzY3JpcHRfbmFtZSArICdjJworICAgIGVsc2U6CisgICAgICAgIGNvbXBpbGVkX25hbWUgPSBzY3JpcHRfbmFtZSArICdvJworICAgIHJldHVybiBjb21waWxlZF9uYW1lCisKK2RlZiBtYWtlX3ppcF9zY3JpcHQoemlwX2RpciwgemlwX2Jhc2VuYW1lLCBzY3JpcHRfbmFtZSwgbmFtZV9pbl96aXA9Tm9uZSk6CisgICAgemlwX2ZpbGVuYW1lID0gemlwX2Jhc2VuYW1lK29zLmV4dHNlcCsnemlwJworICAgIHppcF9uYW1lID0gb3MucGF0aC5qb2luKHppcF9kaXIsIHppcF9maWxlbmFtZSkKKyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3cnKQorICAgIGlmIG5hbWVfaW5femlwIGlzIE5vbmU6CisgICAgICAgIG5hbWVfaW5femlwID0gb3MucGF0aC5iYXNlbmFtZShzY3JpcHRfbmFtZSkKKyAgICB6aXBfZmlsZS53cml0ZShzY3JpcHRfbmFtZSwgbmFtZV9pbl96aXApCisgICAgemlwX2ZpbGUuY2xvc2UoKQorICAgICNpZiB0ZXN0LnRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICMgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICdyJykKKyAgICAjICAgIHByaW50ICdDb250ZW50cyBvZiAlcjonICUgemlwX25hbWUKKyAgICAjICAgIHppcF9maWxlLnByaW50ZGlyKCkKKyAgICAjICAgIHppcF9maWxlLmNsb3NlKCkKKyAgICByZXR1cm4gemlwX25hbWUsIG9zLnBhdGguam9pbih6aXBfbmFtZSwgbmFtZV9pbl96aXApCisKK2RlZiBtYWtlX3BrZyhwa2dfZGlyKToKKyAgICBvcy5ta2Rpcihwa2dfZGlyKQorICAgIG1ha2Vfc2NyaXB0KHBrZ19kaXIsICdfX2luaXRfXycsICcnKQorCitkZWYgbWFrZV96aXBfcGtnKHppcF9kaXIsIHppcF9iYXNlbmFtZSwgcGtnX25hbWUsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgc291cmNlLCBkZXB0aD0xLCBjb21waWxlZD1GYWxzZSk6CisgICAgdW5saW5rID0gW10KKyAgICBpbml0X25hbWUgPSBtYWtlX3NjcmlwdCh6aXBfZGlyLCAnX19pbml0X18nLCAnJykKKyAgICB1bmxpbmsuYXBwZW5kKGluaXRfbmFtZSkKKyAgICBpbml0X2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShpbml0X25hbWUpCisgICAgc2NyaXB0X25hbWUgPSBtYWtlX3NjcmlwdCh6aXBfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKKyAgICB1bmxpbmsuYXBwZW5kKHNjcmlwdF9uYW1lKQorICAgIGlmIGNvbXBpbGVkOgorICAgICAgICBpbml0X25hbWUgPSBjb21waWxlX3NjcmlwdChpbml0X25hbWUpCisgICAgICAgIHNjcmlwdF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgIHVubGluay5leHRlbmQoKGluaXRfbmFtZSwgc2NyaXB0X25hbWUpKQorICAgIHBrZ19uYW1lcyA9IFtvcy5zZXAuam9pbihbcGtnX25hbWVdKmkpIGZvciBpIGluIHJhbmdlKDEsIGRlcHRoKzEpXQorICAgIHNjcmlwdF9uYW1lX2luX3ppcCA9IG9zLnBhdGguam9pbihwa2dfbmFtZXNbLTFdLCBvcy5wYXRoLmJhc2VuYW1lKHNjcmlwdF9uYW1lKSkKKyAgICB6aXBfZmlsZW5hbWUgPSB6aXBfYmFzZW5hbWUrb3MuZXh0c2VwKyd6aXAnCisgICAgemlwX25hbWUgPSBvcy5wYXRoLmpvaW4oemlwX2RpciwgemlwX2ZpbGVuYW1lKQorICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAndycpCisgICAgZm9yIG5hbWUgaW4gcGtnX25hbWVzOgorICAgICAgICBpbml0X25hbWVfaW5femlwID0gb3MucGF0aC5qb2luKG5hbWUsIGluaXRfYmFzZW5hbWUpCisgICAgICAgIHppcF9maWxlLndyaXRlKGluaXRfbmFtZSwgaW5pdF9uYW1lX2luX3ppcCkKKyAgICB6aXBfZmlsZS53cml0ZShzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWVfaW5femlwKQorICAgIHppcF9maWxlLmNsb3NlKCkKKyAgICBmb3IgbmFtZSBpbiB1bmxpbms6CisgICAgICAgIG9zLnVubGluayhuYW1lKQorICAgICNpZiB0ZXN0LnRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICMgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICdyJykKKyAgICAjICAgIHByaW50ICdDb250ZW50cyBvZiAlcjonICUgemlwX25hbWUKKyAgICAjICAgIHppcF9maWxlLnByaW50ZGlyKCkKKyAgICAjICAgIHppcF9maWxlLmNsb3NlKCkKKyAgICByZXR1cm4gemlwX25hbWUsIG9zLnBhdGguam9pbih6aXBfbmFtZSwgc2NyaXB0X25hbWVfaW5femlwKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3NlcV90ZXN0cy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zZXFfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlNGUwZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zZXFfdGVzdHMucHkKQEAgLTAsMCArMSwzOTIgQEAKKyIiIgorVGVzdHMgY29tbW9uIHRvIHR1cGxlLCBsaXN0IGFuZCBVc2VyTGlzdC5Vc2VyTGlzdAorIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworCisjIFZhcmlvdXMgaXRlcmFibGVzCisjIFRoaXMgaXMgdXNlZCBmb3IgY2hlY2tpbmcgdGhlIGNvbnN0cnVjdG9yIChoZXJlIGFuZCBpbiB0ZXN0X2RlcXVlLnB5KQorZGVmIGl0ZXJmdW5jKHNlcW4pOgorICAgICdSZWd1bGFyIGdlbmVyYXRvcicKKyAgICBmb3IgaSBpbiBzZXFuOgorICAgICAgICB5aWVsZCBpCisKK2NsYXNzIFNlcXVlbmNlOgorICAgICdTZXF1ZW5jZSB1c2luZyBfX2dldGl0ZW1fXycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIHJldHVybiBzZWxmLnNlcW5baV0KKworY2xhc3MgSXRlckZ1bmM6CisgICAgJ1NlcXVlbmNlIHVzaW5nIGl0ZXJhdG9yIHByb3RvY29sJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPj0gbGVuKHNlbGYuc2Vxbik6IHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgdiA9IHNlbGYuc2VxbltzZWxmLmldCisgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgIHJldHVybiB2CisKK2NsYXNzIEl0ZXJHZW46CisgICAgJ1NlcXVlbmNlIHVzaW5nIGl0ZXJhdG9yIHByb3RvY29sIGRlZmluZWQgd2l0aCBhIGdlbmVyYXRvcicKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZm9yIHZhbCBpbiBzZWxmLnNlcW46CisgICAgICAgICAgICB5aWVsZCB2YWwKKworY2xhc3MgSXRlck5leHRPbmx5OgorICAgICdNaXNzaW5nIF9fZ2V0aXRlbV9fIGFuZCBfX2l0ZXJfXycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPj0gbGVuKHNlbGYuc2Vxbik6IHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgdiA9IHNlbGYuc2VxbltzZWxmLmldCisgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgIHJldHVybiB2CisKK2NsYXNzIEl0ZXJOb05leHQ6CisgICAgJ0l0ZXJhdG9yIG1pc3NpbmcgbmV4dCgpJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCitjbGFzcyBJdGVyR2VuRXhjOgorICAgICdUZXN0IHByb3BhZ2F0aW9uIG9mIGV4Y2VwdGlvbnMnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIDMgLy8gMAorCitjbGFzcyBJdGVyRnVuY1N0b3A6CisgICAgJ1Rlc3QgaW1tZWRpYXRlIHN0b3AnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBwYXNzCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbiwgaW1hcAorZGVmIGl0ZXJtdWx0aShzZXFuKToKKyAgICAnVGVzdCBtdWx0aXBsZSB0aWVycyBvZiBpdGVyYXRvcnMnCisgICAgcmV0dXJuIGNoYWluKGltYXAobGFtYmRhIHg6eCwgaXRlcmZ1bmMoSXRlckdlbihTZXF1ZW5jZShzZXFuKSkpKSkKKworY2xhc3MgQ29tbW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGUgdHlwZSB0byBiZSB0ZXN0ZWQKKyAgICB0eXBlMnRlc3QgPSBOb25lCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcnMoc2VsZik6CisgICAgICAgIGwwID0gW10KKyAgICAgICAgbDEgPSBbMF0KKyAgICAgICAgbDIgPSBbMCwgMV0KKworICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoKQorICAgICAgICB1MCA9IHNlbGYudHlwZTJ0ZXN0KGwwKQorICAgICAgICB1MSA9IHNlbGYudHlwZTJ0ZXN0KGwxKQorICAgICAgICB1MiA9IHNlbGYudHlwZTJ0ZXN0KGwyKQorCisgICAgICAgIHV1ID0gc2VsZi50eXBlMnRlc3QodSkKKyAgICAgICAgdXUwID0gc2VsZi50eXBlMnRlc3QodTApCisgICAgICAgIHV1MSA9IHNlbGYudHlwZTJ0ZXN0KHUxKQorICAgICAgICB1dTIgPSBzZWxmLnR5cGUydGVzdCh1MikKKworICAgICAgICB2ID0gc2VsZi50eXBlMnRlc3QodHVwbGUodSkpCisgICAgICAgIGNsYXNzIE90aGVyU2VxOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluaXRzZXEpOgorICAgICAgICAgICAgICAgIHNlbGYuX19kYXRhID0gaW5pdHNlcQorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9fZGF0YSkKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2RhdGFbaV0KKyAgICAgICAgcyA9IE90aGVyU2VxKHUwKQorICAgICAgICB2MCA9IHNlbGYudHlwZTJ0ZXN0KHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYwKSwgbGVuKHMpKQorCisgICAgICAgIHMgPSAidGhpcyBpcyBhbHNvIGEgc2VxdWVuY2UiCisgICAgICAgIHZ2ID0gc2VsZi50eXBlMnRlc3QocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odnYpLCBsZW4ocykpCisKKyAgICAgICAgIyBDcmVhdGUgZnJvbSB2YXJpb3VzIGl0ZXJhdGFibGVzCisgICAgICAgIGZvciBzIGluICgiMTIzIiwgIiIsIHJhbmdlKDEwMDApLCAoJ2RvJywgMS4yKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoU2VxdWVuY2UsIEl0ZXJGdW5jLCBJdGVyR2VuLAorICAgICAgICAgICAgICAgICAgICAgIGl0ZXJtdWx0aSwgaXRlcmZ1bmMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoZyhzKSksIHNlbGYudHlwZTJ0ZXN0KHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChJdGVyRnVuY1N0b3AocykpLCBzZWxmLnR5cGUydGVzdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChjIGZvciBjIGluICIxMjMiKSwgc2VsZi50eXBlMnRlc3QoIjEyMyIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgSXRlck5leHRPbmx5KHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgSXRlck5vTmV4dChzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnR5cGUydGVzdCwgSXRlckdlbkV4YyhzKSkKKworICAgIGRlZiB0ZXN0X3RydXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHlwZTJ0ZXN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnR5cGUydGVzdChbNDJdKSkKKworICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMSwgMiwgMywgNF0pCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4odSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1W2ldLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1W2xvbmcoaSldLCBpKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoLWxlbih1KSwgLTEpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1W2ldLCBsZW4odSkraSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVtsb25nKGkpXSwgbGVuKHUpK2kpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUuX19nZXRpdGVtX18sIC1sZW4odSktMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdS5fX2dldGl0ZW1fXywgbGVuKHUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1Ll9fZ2V0aXRlbV9fLCBzbGljZSgwLDEwLDApKQorCisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUuX19nZXRpdGVtX18sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUuX19nZXRpdGVtX18sIC0xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdS5fX2dldGl0ZW1fXykKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzEwLCAxMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswXSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxXSwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMl0sIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTFdLCAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5fX2dldGl0ZW1fXywgLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19nZXRpdGVtX18sIDMpCisKKyAgICBkZWYgdGVzdF9nZXRzbGljZShzZWxmKToKKyAgICAgICAgbCA9IFswLCAxLCAyLCAzLCA0XQorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QobCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMDowXSwgc2VsZi50eXBlMnRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzE6Ml0sIHNlbGYudHlwZTJ0ZXN0KFsxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVstMjotMV0sIHNlbGYudHlwZTJ0ZXN0KFszXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVstMTAwMDoxMDAwXSwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzEwMDA6LTEwMDBdLCBzZWxmLnR5cGUydGVzdChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVs6XSwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzE6Tm9uZV0sIHNlbGYudHlwZTJ0ZXN0KFsxLCAyLCAzLCA0XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVtOb25lOjNdLCBzZWxmLnR5cGUydGVzdChbMCwgMSwgMl0pKQorCisgICAgICAgICMgRXh0ZW5kZWQgc2xpY2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVs6Ol0sIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVs6OjJdLCBzZWxmLnR5cGUydGVzdChbMCwgMiwgNF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMTo6Ml0sIHNlbGYudHlwZTJ0ZXN0KFsxLCAzXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVs6Oi0xXSwgc2VsZi50eXBlMnRlc3QoWzQsIDMsIDIsIDEsIDBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Wzo6LTJdLCBzZWxmLnR5cGUydGVzdChbNCwgMiwgMF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMzo6LTJdLCBzZWxmLnR5cGUydGVzdChbMywgMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMzozOi0yXSwgc2VsZi50eXBlMnRlc3QoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMzoyOi0yXSwgc2VsZi50eXBlMnRlc3QoWzNdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzM6MTotMl0sIHNlbGYudHlwZTJ0ZXN0KFszXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVszOjA6LTJdLCBzZWxmLnR5cGUydGVzdChbMywgMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbOjotMTAwXSwgc2VsZi50eXBlMnRlc3QoWzRdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzEwMDotMTAwOl0sIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Wy0xMDA6MTAwOl0sIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVsxMDA6LTEwMDotMV0sIHVbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVstMTAwOjEwMDotMV0sIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Wy0xMDBMOjEwMEw6MkxdLCBzZWxmLnR5cGUydGVzdChbMCwgMiwgNF0pKQorCisgICAgICAgICMgVGVzdCBleHRyZW1lIGNhc2VzIHdpdGggbG9uZyBpbnRzCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwxLDIsMyw0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWyAtcG93KDIsMTI4TCk6IDMgXSwgc2VsZi50eXBlMnRlc3QoWzAsMSwyXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsgMzogcG93KDIsMTQ1TCkgXSwgc2VsZi50eXBlMnRlc3QoWzMsNF0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdS5fX2dldHNsaWNlX18pCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyXSkKKyAgICAgICAgZm9yIGkgaW4gdToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgdSkKKyAgICAgICAgZm9yIGkgaW4gbWluKHUpLTEsIG1heCh1KSsxOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihpLCB1KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdS5fX2NvbnRhaW5zX18pCisKKyAgICBkZWYgdGVzdF9jb250YWluc19mYWtlKHNlbGYpOgorICAgICAgICBjbGFzcyBBbGxFcToKKyAgICAgICAgICAgICMgU2VxdWVuY2VzIG11c3QgdXNlIHJpY2ggY29tcGFyaXNvbiBhZ2FpbnN0IGVhY2ggaXRlbQorICAgICAgICAgICAgIyAodW5sZXNzICJpcyIgaXMgdHJ1ZSwgb3IgYW4gZWFybGllciBpdGVtIGFuc3dlcmVkKQorICAgICAgICAgICAgIyBTbyBpbnN0YW5jZXMgb2YgQWxsRXEgbXVzdCBiZSBmb3VuZCBpbiBhbGwgbm9uLWVtcHR5IHNlcXVlbmNlcy4KKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBDYW4ndCBtZWV0IGhhc2ggaW52YXJpYW50IHJlcXVpcmVtZW50cworICAgICAgICBzZWxmLmFzc2VydE5vdEluKEFsbEVxKCksIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihBbGxFcSgpLCBzZWxmLnR5cGUydGVzdChbMV0pKQorCisgICAgZGVmIHRlc3RfY29udGFpbnNfb3JkZXIoc2VsZik6CisgICAgICAgICMgU2VxdWVuY2VzIG11c3QgdGVzdCBpbi1vcmRlci4gIElmIGEgcmljaCBjb21wYXJpc29uIGhhcyBzaWRlCisgICAgICAgICMgZWZmZWN0cywgdGhlc2Ugd2lsbCBiZSB2aXNpYmxlIHRvIHRlc3RzIGFnYWluc3QgbGF0ZXIgbWVtYmVycy4KKyAgICAgICAgIyBJbiB0aGlzIHRlc3QsIHRoZSAic2lkZSBlZmZlY3QiIGlzIGEgc2hvcnQtY2lyY3VpdGluZyByYWlzZS4KKyAgICAgICAgY2xhc3MgRG9Ob3RUZXN0RXEoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgU3RvcENvbXBhcmVzOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgRG9Ob3RUZXN0RXEKKworICAgICAgICBjaGVja2ZpcnN0ID0gc2VsZi50eXBlMnRlc3QoWzEsIFN0b3BDb21wYXJlcygpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLCBjaGVja2ZpcnN0KQorICAgICAgICBjaGVja2xhc3QgPSBzZWxmLnR5cGUydGVzdChbU3RvcENvbXBhcmVzKCksIDFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEb05vdFRlc3RFcSwgY2hlY2tsYXN0Ll9fY29udGFpbnNfXywgMSkKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi50eXBlMnRlc3QoKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYudHlwZTJ0ZXN0KFtdKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYudHlwZTJ0ZXN0KFswXSkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnR5cGUydGVzdChbMCwgMSwgMl0pKSwgMykKKworICAgIGRlZiB0ZXN0X21pbm1heChzZWxmKToKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4odSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KHUpLCAyKQorCisgICAgZGVmIHRlc3RfYWRkbXVsKHNlbGYpOgorICAgICAgICB1MSA9IHNlbGYudHlwZTJ0ZXN0KFswXSkKKyAgICAgICAgdTIgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTEsIHUxICsgc2VsZi50eXBlMnRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MSwgc2VsZi50eXBlMnRlc3QoKSArIHUxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUxICsgc2VsZi50eXBlMnRlc3QoWzFdKSwgdTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoWy0xXSkgKyB1MSwgc2VsZi50eXBlMnRlc3QoWy0xLCAwXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoKSwgdTIqMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdCgpLCAwKnUyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KCksIHUyKjBMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KCksIDBMKnUyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCB1MioxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCAxKnUyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCB1MioxTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MiwgMUwqdTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIrdTIsIHUyKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIrdTIsIDIqdTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIrdTIsIHUyKjJMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyK3UyLCAyTCp1MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mit1Mit1MiwgdTIqMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mit1Mit1MiwgMyp1MikKKworICAgICAgICBjbGFzcyBzdWJjbGFzcyhzZWxmLnR5cGUydGVzdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHUzID0gc3ViY2xhc3MoWzAsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUzLCB1MyoxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHUzLCB1MyoxKQorCisgICAgZGVmIHRlc3RfaWFkZChzZWxmKToKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgdSArPSBzZWxmLnR5cGUydGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgc2VsZi50eXBlMnRlc3QoWzAsIDFdKSkKKyAgICAgICAgdSArPSBzZWxmLnR5cGUydGVzdChbMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgc2VsZi50eXBlMnRlc3QoWzAsIDEsIDIsIDNdKSkKKyAgICAgICAgdSArPSBzZWxmLnR5cGUydGVzdChbNCwgNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgc2VsZi50eXBlMnRlc3QoWzAsIDEsIDIsIDMsIDQsIDVdKSkKKworICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoInNwYW0iKQorICAgICAgICB1ICs9IHNlbGYudHlwZTJ0ZXN0KCJlZ2dzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzZWxmLnR5cGUydGVzdCgic3BhbWVnZ3MiKSkKKworICAgIGRlZiB0ZXN0X2ltdWwoc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIHUgKj0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAwLCAxLCAwLCAxXSkpCisKKyAgICBkZWYgdGVzdF9nZXRpdGVtb3ZlcndyaXRlaXRlcihzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBfX2dldGl0ZW1fXyBvdmVycmlkZXMgYXJlIG5vdCByZWNvZ25pemVkIGJ5IF9faXRlcl9fCisgICAgICAgIGNsYXNzIFQoc2VsZi50eXBlMnRlc3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihrZXkpICsgJyEhIScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyKFQoKDEsMikpKS5uZXh0KCksIDEpCisKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIGZvciBtIGluIHhyYW5nZSg0KToKKyAgICAgICAgICAgIHMgPSB0dXBsZShyYW5nZShtKSkKKyAgICAgICAgICAgIGZvciBuIGluIHhyYW5nZSgtMywgNSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChzKm4pLCBzZWxmLnR5cGUydGVzdChzKSpuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChzKSooLTQpLCBzZWxmLnR5cGUydGVzdChbXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMpLCBpZChzKjEpKQorCisgICAgZGVmIHRlc3RfYmlncmVwZWF0KHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGlmIHN5cy5tYXhpbnQgPD0gMjE0NzQ4MzY0NzoKKyAgICAgICAgICAgIHggPSBzZWxmLnR5cGUydGVzdChbMF0pCisgICAgICAgICAgICB4ICo9IDIqKjE2CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNZW1vcnlFcnJvciwgeC5fX211bF9fLCAyKioxNikKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoeCwgJ19faW11bF9fJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTWVtb3J5RXJyb3IsIHguX19pbXVsX18sIDIqKjE2KQorCisgICAgZGVmIHRlc3Rfc3Vic2NyaXB0KHNlbGYpOgorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzEwLCAxMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2dldGl0ZW1fXygwTCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19nZXRpdGVtX18oMUwpLCAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZ2V0aXRlbV9fKC0yTCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19nZXRpdGVtX18oLTFMKSwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19nZXRpdGVtX18sIC0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fZ2V0aXRlbV9fLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19nZXRpdGVtX18oc2xpY2UoMCwxKSksIHNlbGYudHlwZTJ0ZXN0KFsxMF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19nZXRpdGVtX18oc2xpY2UoMSwyKSksIHNlbGYudHlwZTJ0ZXN0KFsxMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19nZXRpdGVtX18oc2xpY2UoMCwyKSksIHNlbGYudHlwZTJ0ZXN0KFsxMCwgMTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZ2V0aXRlbV9fKHNsaWNlKDAsMykpLCBzZWxmLnR5cGUydGVzdChbMTAsIDExXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2dldGl0ZW1fXyhzbGljZSgzLDUpKSwgc2VsZi50eXBlMnRlc3QoW10pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLl9fZ2V0aXRlbV9fLCBzbGljZSgwLCAxMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX2dldGl0ZW1fXywgJ3gnKQorCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMSwgMl0pKjMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmNvdW50KDApLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuY291bnQoMSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5jb3VudCgzKSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuY291bnQpCisKKyAgICAgICAgY2xhc3MgQmFkRXhjKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkQ21wOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgb3RoZXIgPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQmFkRXhjKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYWRFeGMsIGEuY291bnQsIEJhZENtcCgpKQorCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1LmluZGV4LCAyKQorCisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbLTIsIC0xLCAwLCAwLCAxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmNvdW50KDApLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuaW5kZXgoMCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwLCAyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KC0yLCAtMTApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuaW5kZXgoMCwgMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwLCAzLCA0KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdS5pbmRleCwgMiwgMCwgLTEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdS5pbmRleCkKKworICAgICAgICBjbGFzcyBCYWRFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBCYWRDbXA6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBvdGhlciA9PSAyOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCYWRFeGMoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhZEV4YywgYS5pbmRleCwgQmFkQ21wKCkpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFstMiwgLTEsIDAsIDAsIDEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoMCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIC00KSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KC0yLCAtMTApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoMCwgMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAtMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAzLCA0KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIC0zLCAtMiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAtNCpzeXMubWF4aW50LCA0KnN5cy5tYXhpbnQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLmluZGV4LCAwLCA0KnN5cy5tYXhpbnQsLTQqc3lzLm1heGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5pbmRleCwgMiwgMCwgLTEwKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3NnbWxfaW5wdXQuaHRtbCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zZ21sX2lucHV0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkMmU2YwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zZ21sX2lucHV0Lmh0bWwKQEAgLTAsMCArMSwyMTIgQEAKKzxodG1sPgorIDxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL2Zvcm1hdGUuY3NzIj4KKyAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSJqcy9mbG90dGVuLmpzIj48L3NjcmlwdD4KKyA8L2hlYWQ+CisgPGJvZHk+CisgICAgPHNjcmlwdCBsYW5ndWFnZT1KYXZhU2NyaXB0PiBpZiAocGFyZW50LmZyYW1lcy5sZW5ndGggPT0gMCkgeyB0b3AubG9jYXRpb24uaHJlZiA9ICJodHRwOi8vZXMub2dhbWUub3JnLyI7IH0gPC9zY3JpcHQ+IDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorZnVuY3Rpb24gaGFoYSh6MSkgeworICBldmFsKCJsb2NhdGlvbj0nIit6MS5vcHRpb25zW3oxLnNlbGVjdGVkSW5kZXhdLnZhbHVlKyInIik7Cit9Cis8L3NjcmlwdD4KKzxjZW50ZXI+Cis8dGFibGU+CisgPHRyPgorICA8dGQ+PC90ZD4KKyAgPHRkPgorICAgPGNlbnRlcj4KKyAgIDx0YWJsZT4KKyAgICA8dHI+CisgICAgIDx0ZD48aW1nIHNyYz0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL3BsYW5ldGVuL3NtYWxsL3NfZHNjaGp1bmdlbHBsYW5ldDA0LmpwZyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L3RkPgorICAgICA8dGQ+CisgICAgICA8dGFibGUgYm9yZGVyPSIxIj4KKyAgICAgICA8c2VsZWN0IHNpemU9IjEiIG9uY2hhbmdlPSJoYWhhKHRoaXMpIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTMzODc1MzQxJm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiIHNlbGVjdGVkPkFsaWVuIHNleCBmcmllbmQgICAgWzI6MjUwOjZdPC9vcHRpb24+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIvZ2FtZS9mbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMmY3A9MzM5MDUxMDAmbW9kZT1GbG90dGUmZ2lkPSZtZXNzYWdlemllbD0mcmU9MCIgPjE5ODkgICAgWzI6MjQ4OjE0XTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTM0NTcwODA4Jm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiID4xOTkwICAgIFsyOjI0ODo2XTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTM0NTcwODU4Jm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiID4xOTkxICAgIFsyOjI1NDo2XTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTM0NTcyOTI5Jm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiID5Db2xvbmlhICAgIFsyOjI1MzoxMl08L29wdGlvbj4gCisgICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgIDwvdGFibGU+CisgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKyAgPC9jZW50ZXI+CisgIDwvdGQ+CisgIDx0ZD4KKyAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorICAgIDx0cj4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPgorICAgICAgPGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL2ltYWdlcy9tZXRhbGwuZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4KKyAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly9vZ2FtZTE4Mi5kZS9lcGljYmx1ZS9pbWFnZXMva3Jpc3RhbGwuZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4KKyAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly9vZ2FtZTE4Mi5kZS9lcGljYmx1ZS9pbWFnZXMvZGV1dGVyaXVtLmdpZiIgd2lkdGg9IjQyIiBoZWlnaHQ9IjIyIj4KKyAgICAgPC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+CisgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSJodHRwOi8vb2dhbWUxODIuZGUvZXBpY2JsdWUvaW1hZ2VzL2VuZXJnaWUuZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxpPjxiPiZuYnNwOyZuYnNwOzwvYj48L2k+PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+PGk+PGI+PGZvbnQgY29sb3I9IiNmZmZmZmYiPk1ldGFsPC9mb250PjwvYj48L2k+PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+PGk+PGI+PGZvbnQgY29sb3I9IiNmZmZmZmYiPkNyaXN0YWw8L2ZvbnQ+PC9iPjwvaT48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48aT48Yj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+RGV1dGVyaW88L2ZvbnQ+PC9iPjwvaT48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48aT48Yj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+RW5lcmftYTwvZm9udD48L2I+PC9pPjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48aT48Yj4mbmJzcDsmbmJzcDs8L2I+PC9pPjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4xNjAuNjM2PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+My40MDY8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4zOS4yMzA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48Zm9udCBjb2xvcj0jZmYwMDAwPi04MDwvZm9udD4vMy45NjU8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICA8L3RyPgorICAgPC90YWJsZT4KKyAgPC90cj4KKyA8L3RhYmxlPgorICA8L2NlbnRlcj4KKzxiciAvPgorICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKyAgPCEtLQorICAgICBmdW5jdGlvbiBsaW5rX3RvX2dhbWVwYXkoKSB7CisgICAgc2VsZi5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5nYW1lcGF5LmRlLz9sYW5nPWVzJnNlcnZlcklEPTgmdXNlcklEPTEyOTM2MCZnYW1lSUQ9b2dhbWUmZ3VpPXYyJmNoa3N1bT1hOTc1MWFmYTllMzdlNmIxYjgyNjM1NmJjY2E0NTY3NSI7CisgIH0KKy8vLS0+CisgIDwvc2NyaXB0PgorPGNlbnRlcj4KKyAgPHRhYmxlIHdpZHRoPSI1MTkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIxIj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgPHRkIGNvbHNwYW49IjgiIGNsYXNzPSJjIj5GbG90YXMgKG1heC4gOSk8L3RkPgorICAgPC90cj4KKyAgICAgPHRyIGhlaWdodD0iMjAiPgorICAgIDx0aD5OdW0uPC90aD4KKyAgICA8dGg+TWlzafNuPC90aD4KKyAgICA8dGg+Q2FudGlkYWQ8L3RoPgorICAgIDx0aD5Db21pZW56bzwvdGg+CisgICAgPHRoPlNhbGlkYTwvdGg+CisgICAgPHRoPk9iamV0aXZvPC90aD4KKyAgICA8dGg+TGxlZ2FkYTwvdGg+CisgICAgPHRoPk9yZGVuPC90aD4gICAKKyAgIDwvdHI+CisgICAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+MTwvdGg+CisgICAgPHRoPiAgCisgICAgICA8YSB0aXRsZT0iIj5Fc3Bpb25hamU8L2E+CisgICAgICA8YSB0aXRsZT0iRmxvdGEgZW4gZWwgcGxhbmV0YSI+KEYpPC9hPgorICAgIDwvdGg+CisgICAgPHRoPiA8YSB0aXRsZT0iU29uZGEgZGUgZXNwaW9uYWplOiAzIAorIj4zPC9hPjwvdGg+CisgICAgPHRoPlsyOjI1MDo2XTwvdGg+CisgICAgPHRoPldlZCBBdWcgOSAxODowMDowMjwvdGg+CisgICAgPHRoPlsyOjI0Mjo1XTwvdGg+CisgICAgPHRoPldlZCBBdWcgOSAxODowMTowMjwvdGg+CisgICAgPHRoPgorICAgICAgICAgPGZvcm0gYWN0aW9uPSJmbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMiIG1ldGhvZD0iUE9TVCI+CisJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib3JkZXJfcmV0dXJuIiB2YWx1ZT0iMjUwNTQ0OTAiIC8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnZpYXIgZGUgcmVncmVzbyIgLz4KKyAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjI8L3RoPgorICAgIDx0aD4gIAorICAgICAgPGEgdGl0bGU9IiI+RXNwaW9uYWplPC9hPgorICAgICAgPGEgdGl0bGU9IlZvbHZlciBhbCBwbGFuZXRhIj4oVik8L2E+CisgICAgPC90aD4KKyAgICA8dGg+IDxhIHRpdGxlPSJTb25kYSBkZSBlc3Bpb25hamU6IDMgCisiPjM8L2E+PC90aD4KKyAgICA8dGg+WzI6MjUwOjZdPC90aD4KKyAgICA8dGg+V2VkIEF1ZyA5IDE3OjU5OjU1PC90aD4KKyAgICA8dGg+WzI6MjQyOjFdPC90aD4KKyAgICA8dGg+V2VkIEF1ZyA5IDE4OjAxOjU1PC90aD4KKyAgICA8dGg+CisgICAgICAgICAgICA8L3RoPgorICAgPC90cj4KKyAgPC90YWJsZT4KKworCisgIAorPGZvcm0gYWN0aW9uPSJmbG90dGVuMi5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMiIG1ldGhvZD0iUE9TVCI+CisgIDx0YWJsZSB3aWR0aD0iNTE5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMSI+CisgICAgICAgPHRyIGhlaWdodD0iMjAiPgorICA8dGQgY29sc3Bhbj0iNCIgY2xhc3M9ImMiPk51ZXZhIG1pc2nzbjogZWxlZ2lyIG5hdmVzPC90ZD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgIDx0aD5OYXZlczwvdGg+CisgIDx0aD5EaXNwb25pYmxlczwvdGg+Cis8IS0tICAgIDx0aD5HZXNjaC48L3RoPiAtLT4KKyAgICA8dGg+LTwvdGg+CisgICAgPHRoPi08L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+PGEgdGl0bGU9IlZlbG9jaWRhZDogODUwMCI+TmF2ZSBwZXF1ZfFhIGRlIGNhcmdhPC9hPjwvdGg+IAorICAgIDx0aD4xMDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1heHNoaXAyMDIiIHZhbHVlPSIxMCIvPjwvdGg+Cis8IS0tICAgIDx0aD44NTAwIC0tPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb25zdW1wdGlvbjIwMiIgdmFsdWU9IjEwIi8+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNwZWVkMjAyIiB2YWx1ZT0iODUwMCIgLz48L3RoPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjYXBhY2l0eTIwMiIgdmFsdWU9IjUwMDAiIC8+PC90aD4KKyAgICAgPHRoPjxhIGhyZWY9ImphdmFzY3JpcHQ6bWF4U2hpcCgnc2hpcDIwMicpOyIgPm3heDwvYT4gPC90aD4KKyAgICAgPHRoPjxpbnB1dCBuYW1lPSJzaGlwMjAyIiBzaXplPSIxMCIgdmFsdWU9IjAiIGFsdD0iTmF2ZSBwZXF1ZfFhIGRlIGNhcmdhIDEwIi8+PC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjxhIHRpdGxlPSJWZWxvY2lkYWQ6IDEyNzUwIj5OYXZlIGdyYW5kZSBkZSBjYXJnYTwvYT48L3RoPiAKKyAgICA8dGg+MTk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtYXhzaGlwMjAzIiB2YWx1ZT0iMTkiLz48L3RoPgorPCEtLSAgICA8dGg+MTI3NTAgLS0+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbnN1bXB0aW9uMjAzIiB2YWx1ZT0iNTAiLz4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3BlZWQyMDMiIHZhbHVlPSIxMjc1MCIgLz48L3RoPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjYXBhY2l0eTIwMyIgdmFsdWU9IjI1MDAwIiAvPjwvdGg+CisgICAgIDx0aD48YSBocmVmPSJqYXZhc2NyaXB0Om1heFNoaXAoJ3NoaXAyMDMnKTsiID5t4Xg8L2E+IDwvdGg+CisgICAgIDx0aD48aW5wdXQgbmFtZT0ic2hpcDIwMyIgc2l6ZT0iMTAiIHZhbHVlPSIwIiBhbHQ9Ik5hdmUgZ3JhbmRlIGRlIGNhcmdhIDE5Ii8+PC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjxhIHRpdGxlPSJWZWxvY2lkYWQ6IDI3MDAwIj5DcnVjZXJvPC9hPjwvdGg+IAorICAgIDx0aD42PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibWF4c2hpcDIwNiIgdmFsdWU9IjYiLz48L3RoPgorPCEtLSAgICA8dGg+MjcwMDAgLS0+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbnN1bXB0aW9uMjA2IiB2YWx1ZT0iMzAwIi8+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNwZWVkMjA2IiB2YWx1ZT0iMjcwMDAiIC8+PC90aD4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FwYWNpdHkyMDYiIHZhbHVlPSI4MDAiIC8+PC90aD4KKyAgICAgPHRoPjxhIGhyZWY9ImphdmFzY3JpcHQ6bWF4U2hpcCgnc2hpcDIwNicpOyIgPm3heDwvYT4gPC90aD4KKyAgICAgPHRoPjxpbnB1dCBuYW1lPSJzaGlwMjA2IiBzaXplPSIxMCIgdmFsdWU9IjAiIGFsdD0iQ3J1Y2VybyA2Ii8+PC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjxhIHRpdGxlPSJWZWxvY2lkYWQ6IDM0MDAiPlJlY2ljbGFkb3I8L2E+PC90aD4gCisgICAgPHRoPjE8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtYXhzaGlwMjA5IiB2YWx1ZT0iMSIvPjwvdGg+Cis8IS0tICAgIDx0aD4zNDAwIC0tPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb25zdW1wdGlvbjIwOSIgdmFsdWU9IjMwMCIvPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcGVlZDIwOSIgdmFsdWU9IjM0MDAiIC8+PC90aD4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FwYWNpdHkyMDkiIHZhbHVlPSIyMDAwMCIgLz48L3RoPgorICAgICA8dGg+PGEgaHJlZj0iamF2YXNjcmlwdDptYXhTaGlwKCdzaGlwMjA5Jyk7IiA+beF4PC9hPiA8L3RoPgorICAgICA8dGg+PGlucHV0IG5hbWU9InNoaXAyMDkiIHNpemU9IjEwIiB2YWx1ZT0iMCIgYWx0PSJSZWNpY2xhZG9yIDEiLz48L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+PGEgdGl0bGU9IlZlbG9jaWRhZDogMTcwMDAwMDAwIj5Tb25kYSBkZSBlc3Bpb25hamU8L2E+PC90aD4gCisgICAgPHRoPjEzOTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1heHNoaXAyMTAiIHZhbHVlPSIxMzkiLz48L3RoPgorPCEtLSAgICA8dGg+MTcwMDAwMDAwIC0tPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb25zdW1wdGlvbjIxMCIgdmFsdWU9IjEiLz4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3BlZWQyMTAiIHZhbHVlPSIxNzAwMDAwMDAiIC8+PC90aD4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FwYWNpdHkyMTAiIHZhbHVlPSI1IiAvPjwvdGg+CisgICAgIDx0aD48YSBocmVmPSJqYXZhc2NyaXB0Om1heFNoaXAoJ3NoaXAyMTAnKTsiID5t4Xg8L2E+IDwvdGg+CisgICAgIDx0aD48aW5wdXQgbmFtZT0ic2hpcDIxMCIgc2l6ZT0iMTAiIHZhbHVlPSIwIiBhbHQ9IlNvbmRhIGRlIGVzcGlvbmFqZSAxMzkiLz48L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgPHRoIGNvbHNwYW49IjIiPjxhIGhyZWY9ImphdmFzY3JpcHQ6bm9TaGlwcygpOyIgPk5pbmd1bmEgbmF2ZTwvYT48L3RoPgorICA8dGggY29sc3Bhbj0iMiI+PGEgaHJlZj0iamF2YXNjcmlwdDptYXhTaGlwcygpOyIgPlRvZGFzIGxhcyBuYXZlczwvYT48L3RoPgorICAgPC90cj4KKyAgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoIGNvbHNwYW49IjQiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDb250aW51YXIiIC8+PC90aD4KKyAgIDwvdHI+Cis8dHI+PHRoIGNvbHNwYW49ND4KKzxpZnJhbWUgaWQ9J2E0NGZiNTIyJyBuYW1lPSdhNDRmYjUyMicgc3JjPSdodHRwOi8vYWRzLmdhbWVmb3JnZWFkcy5kZS9hZGZyYW1lLnBocD9uPWE0NGZiNTIyJmFtcDt3aGF0PXpvbmU6NTc4JyBmcmFtZXNwYWNpbmc9JzAnIGZyYW1lYm9yZGVyPSdubycgc2Nyb2xsaW5nPSdubycgd2lkdGg9JzQ2OCcgaGVpZ2h0PSc2MCc+PC9pZnJhbWU+Cis8YnI+PGNlbnRlcj48L2NlbnRlcj48L2JyPgorPC90aD48L3RyPgorPC9mb3JtPgorPC90YWJsZT4KKyA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3Qvc2hhMjU2LnBlbSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zaGEyNTYucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzU1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvc2hhMjU2LnBlbQpAQCAtMCwwICsxLDEyOCBAQAorIyBDZXJ0aWZpY2F0ZSBjaGFpbiBmb3IgaHR0cHM6Ly9zaGEyNTYudGJzLWludGVybmV0LmNvbQorIDAgczovQz1GUi9wb3N0YWxDb2RlPTE0MDAwL1NUPUNhbHZhZG9zL0w9Q0FFTi9zdHJlZXQ9MjIgcnVlIGRlIEJyZXRhZ25lL089VEJTIElOVEVSTkVUL09VPTAwMDIgNDQwNDQzODEwL09VPUNlcnRpZmljYXRzIFRCUyBYNTA5L0NOPWVjb20udGJzLXg1MDkuY29tCisgICBpOi9DPUZSL1NUPUNhbHZhZG9zL0w9Q2Flbi9PPVRCUyBJTlRFUk5FVC9PVT1UZXJtcyBhbmQgQ29uZGl0aW9uczogaHR0cDovL3d3dy50YnMtaW50ZXJuZXQuY29tL0NBL3JlcG9zaXRvcnkvT1U9VEJTIElOVEVSTkVUIENBL0NOPVRCUyBYNTA5IENBIGJ1c2luZXNzCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUdUakNDQlRhZ0F3SUJBZ0lRT2gzZDlkTkRQcTFjU2RKbUVpTXBxREFOQmdrcWhraUc5dzBCQVFVRkFEQ0IKK3lURUxNQWtHQTFVRUJoTUNSbEl4RVRBUEJnTlZCQWdUQ0VOaGJIWmhaRzl6TVEwd0N3WURWUVFIRXdSRFlXVnUKK01SVXdFd1lEVlFRS0V3eFVRbE1nU1U1VVJWSk9SVlF4U0RCR0JnTlZCQXNUUDFSbGNtMXpJR0Z1WkNCRGIyNWsKK2FYUnBiMjV6T2lCb2RIUndPaTh2ZDNkM0xuUmljeTFwYm5SbGNtNWxkQzVqYjIwdlEwRXZjbVZ3YjNOcGRHOXkKK2VURVlNQllHQTFVRUN4TVBWRUpUSUVsT1ZFVlNUa1ZVSUVOQk1SMHdHd1lEVlFRREV4UlVRbE1nV0RVd09TQkQKK1FTQmlkWE5wYm1WemN6QWVGdzB4TVRBeE1qVXdNREF3TURCYUZ3MHhNekF5TURVeU16VTVOVGxhTUlISE1Rc3cKK0NRWURWUVFHRXdKR1VqRU9NQXdHQTFVRUVSTUZNVFF3TURBeEVUQVBCZ05WQkFnVENFTmhiSFpoWkc5ek1RMHcKK0N3WURWUVFIRXdSRFFVVk9NUnN3R1FZRFZRUUpFeEl5TWlCeWRXVWdaR1VnUW5KbGRHRm5ibVV4RlRBVEJnTlYKK0JBb1RERlJDVXlCSlRsUkZVazVGVkRFWE1CVUdBMVVFQ3hNT01EQXdNaUEwTkRBME5ETTRNVEF4SFRBYkJnTlYKK0JBc1RGRU5sY25ScFptbGpZWFJ6SUZSQ1V5QllOVEE1TVJvd0dBWURWUVFERXhGbFkyOXRMblJpY3kxNE5UQTUKK0xtTnZiVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFLUnJsSFVuSisrMWxwY2cKK2p0WWNvN2NkbVJlK0VFZlRtd1BmQ2RmVjNHMVFmc1RTdlk2RmZNcG0vODNwcUhmVCs0QU53cjE4d0Q5WnJBRU4KK0cxNm1mOVZkQ0dLMTIrVFA3RG1xZVp5R0lxbEZGb2FoUW5tYjhFYXJ2RTQzLzFVZVEyQ1Y5WG16d1p2cHFlbGkKK0xmWHNGb25hd3JZM0g2Wm5Nd1M2NFN0NjFaKzlnZHl1Wi9SYnNvWkJiVDVLVWpERUc4NDRRUlU0T1QxSUdlRUkKK2VZNU5NNVJOSWg2Wk5oVnRxZWVDeE1TN2FmT05rSFFyT2NvNzNSZFNUUmNrL0hqOTZPZmwzTUhOSHJ5citBTUsKK0RHRmsxa0xDWkdwUGRYdGt4WHZhRGVRb2lZRGxpbDI2Q1djK1lLNnh5RFBNZHNXdm9HMTRaTHlDcHpNWEE3LzcKKzRZQVFSSDBDQXdFQUFhT0NBakF3Z2dJc01COEdBMVVkSXdRWU1CYUFGQm9KQk16NUNZKzdIcURPMUtRVWYwdlYKK0kxak5NQjBHQTFVZERnUVdCQlFnT1U4SHNXemJtRDRXWlA1V3RkdzdqY2EyV0RBT0JnTlZIUThCQWY4RUJBTUMKK0JhQXdEQVlEVlIwVEFRSC9CQUl3QURBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUlLd1lCQlFVSEF3SXcKK1RBWURWUjBnQkVVd1F6QkJCZ3NyQmdFRUFZRGxOd0lCQVRBeU1EQUdDQ3NHQVFVRkJ3SUJGaVJvZEhSd2N6b3YKK0wzZDNkeTUwWW5NdGFXNTBaWEp1WlhRdVkyOXRMME5CTDBOUVV6RXdkd1lEVlIwZkJIQXdiakEzb0RXZ000WXgKK2FIUjBjRG92TDJOeWJDNTBZbk10YVc1MFpYSnVaWFF1WTI5dEwxUkNVMWcxTURsRFFXSjFjMmx1WlhOekxtTnkKK2JEQXpvREdnTDRZdGFIUjBjRG92TDJOeWJDNTBZbk10ZURVd09TNWpiMjB2VkVKVFdEVXdPVU5CWW5WemFXNWwKK2MzTXVZM0pzTUlHd0JnZ3JCZ0VGQlFjQkFRU0JvekNCb0RBOUJnZ3JCZ0VGQlFjd0FvWXhhSFIwY0RvdkwyTnkKK2RDNTBZbk10YVc1MFpYSnVaWFF1WTI5dEwxUkNVMWcxTURsRFFXSjFjMmx1WlhOekxtTnlkREE1QmdnckJnRUYKK0JRY3dBb1l0YUhSMGNEb3ZMMk55ZEM1MFluTXRlRFV3T1M1amIyMHZWRUpUV0RVd09VTkJZblZ6YVc1bGMzTXUKK1kzSjBNQ1FHQ0NzR0FRVUZCekFCaGhob2RIUndPaTh2YjJOemNDNTBZbk10ZURVd09TNWpiMjB3TXdZRFZSMFIKK0JDd3dLb0lSWldOdmJTNTBZbk10ZURVd09TNWpiMjJDRlhkM2R5NWxZMjl0TG5SaWN5MTROVEE1TG1OdmJUQU4KK0Jna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXJUNE5IZmJZODdiR0F3OGxQVjREbUhsbXVEdVZwL3k3bHRPM1luc2UKKzNSejhSeFcyQXp1TzBPeTJGMEN1NHlXS3RNeUV5TVh5SHFXdGFlN0VsUmJkVHU1dzVHd1ZCTEpIQ2xDekM4UzkKK1NwZ01NUVR4M1Jnbjh2amtIdVU5VlpRbHVsWnlpUEs3eXVuamM3YzMxMFM5RlJaN1h4T3dmOE5ueDRXbkIrTm8KK1dyZkFwemhoUWwzMXcrUnlyTnhaZTU4aENmRERIbWV2UnZ3TGpRNzg1Wm9RWEpEajJqM3FBRDRhSTJ5QjhsQjUKK29hRTFqbENKekM3S216L1k5anpmbXYvekFzMUxRVG05a3RldnY0QlRVRmFHanY5anhuUTF4blM4NjJaaW91TFcKK3paWUlsWVBmNEY2SmpYR2lJUWdRUmdsSUxVZnEzZnRKZDkvb2s5VzlaRjhoOHc9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorIDEgczovQz1GUi9TVD1DYWx2YWRvcy9MPUNhZW4vTz1UQlMgSU5URVJORVQvT1U9VGVybXMgYW5kIENvbmRpdGlvbnM6IGh0dHA6Ly93d3cudGJzLWludGVybmV0LmNvbS9DQS9yZXBvc2l0b3J5L09VPVRCUyBJTlRFUk5FVCBDQS9DTj1UQlMgWDUwOSBDQSBidXNpbmVzcworICAgaTovQz1TRS9PPUFkZFRydXN0IEFCL09VPUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrL0NOPUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3QKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRlB6Q0NCQ2VnQXdJQkFnSVFEbEJ6LysraVJTbUxEZVZSSFQvaEFEQU5CZ2txaGtpRzl3MEJBUVVGQURCdgorTVFzd0NRWURWUVFHRXdKVFJURVVNQklHQTFVRUNoTUxRV1JrVkhKMWMzUWdRVUl4SmpBa0JnTlZCQXNUSFVGaworWkZSeWRYTjBJRVY0ZEdWeWJtRnNJRlJVVUNCT1pYUjNiM0pyTVNJd0lBWURWUVFERXhsQlpHUlVjblZ6ZENCRgorZUhSbGNtNWhiQ0JEUVNCU2IyOTBNQjRYRFRBMU1USXdNVEF3TURBd01Gb1hEVEU1TURjd09URTRNVGt5TWxvdworZ2NreEN6QUpCZ05WQkFZVEFrWlNNUkV3RHdZRFZRUUlFd2hEWVd4MllXUnZjekVOTUFzR0ExVUVCeE1FUTJGbAorYmpFVk1CTUdBMVVFQ2hNTVZFSlRJRWxPVkVWU1RrVlVNVWd3UmdZRFZRUUxFejlVWlhKdGN5QmhibVFnUTI5dQorWkdsMGFXOXVjem9nYUhSMGNEb3ZMM2QzZHk1MFluTXRhVzUwWlhKdVpYUXVZMjl0TDBOQkwzSmxjRzl6YVhSdgorY25reEdEQVdCZ05WQkFzVEQxUkNVeUJKVGxSRlVrNUZWQ0JEUVRFZE1Cc0dBMVVFQXhNVVZFSlRJRmcxTURrZworUTBFZ1luVnphVzVsYzNNd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURCMVBBVQorcXVkQ2N6M3RteUdjZit1NkVrWnFvbktLSHJWNGdaWWJ2VmtJUm9qbW1saGZpL2p3dnBIdm84YnFTdC85Umo1UworamhDRFcwcGNiSStJUFB0RDFKeStDSE5TZm5NcVZEeTZDS1EzcDVtYVR6Q01HNlpUK1hqbnZjTkQ1ditGdGFpQgoreGsxaUNYNnV2dDBqZVV0ZFp2WWJ5eXRzU0RFNmMzWTUvL3dSeE9GOHRNMUp4aWJ3TzNweUVSMjZqYmJOMmdRegorbS9Fa2RHakxkSjRzdlBrMjNXREF2UTZHMC96MkxjQWFKQitYTGZxUndmUXBIUXZmS2ExdVRpOFBpdkM4cXRpcAorcm1OUU1NUE1qeFNLMmF6WDhjS2pqVERKaVVLYUNiNFZIbEpEV0tFc0NGUnBnSkFvQXVYOGY3WWZzMU00ZXNHbworc1diM1BHc3BLM08yMnVJbEFnTUJBQUdqZ2dGNk1JSUJkakFkQmdOVkhRNEVGZ1FVR2drRXpQa0pqN3Nlb003VQorcEJSL1M5VWpXTTB3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUF3R0FZRAorVlIwZ0JCRXdEekFOQmdzckJnRUVBWURsTndJQkFUQjdCZ05WSFI4RWREQnlNRGlnTnFBMGhqSm9kSFJ3T2k4dgorWTNKc0xtTnZiVzlrYjJOaExtTnZiUzlCWkdSVWNuVnpkRVY0ZEdWeWJtRnNRMEZTYjI5MExtTnliREEyb0RTZworTW9Zd2FIUjBjRG92TDJOeWJDNWpiMjF2Wkc4dWJtVjBMMEZrWkZSeWRYTjBSWGgwWlhKdVlXeERRVkp2YjNRdQorWTNKc01JR0dCZ2dyQmdFRkJRY0JBUVI2TUhnd093WUlLd1lCQlFVSE1BS0dMMmgwZEhBNkx5OWpjblF1WTI5dAorYjJSdlkyRXVZMjl0TDBGa1pGUnlkWE4wVlZST1UyVnlkbVZ5UTBFdVkzSjBNRGtHQ0NzR0FRVUZCekFDaGkxbworZEhSd09pOHZZM0owTG1OdmJXOWtieTV1WlhRdlFXUmtWSEoxYzNSVlZFNVRaWEoyWlhKRFFTNWpjblF3RVFZSgorWUlaSUFZYjRRZ0VCQkFRREFnSUVNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUE3bXFyTWdrL01yRTZRbmJOQQoraDRuUkNuMnRpNGJnNHcyQzNsQjZiU3ZSUG5Zd3VOdzlKYjh2dUtrTkZ6UkR4TkpYcVZEWmRmRlc1Q1ZRSnV5ZAorbmZBeDgzK3drK3NwenZGYUUxS2hGWWZOOUc5cFFmWFVmdkRSb0ljSmdQRUtVWEwxd1JpT0crSWpVM1ZWSThwZworSWdxSGtyN3lsbG41aTV6Q2lGQVB1SUptWVVTRmcvZ3hINXhrQ05jakpxcXJIckhhdEpyNlFycmtlOTNqb3Vwdworb1UxbmpmQWNadFlwNmZiaUs2dTJiMXBKcXdrVkJFOFJzZkxuUGhSaitTRmJwdmp2OE9kN28vaWVKaEZJWVFOVQorazJqWDJ1OHFabkFpTnc5M0xaVzlscFlqdHV2TVhxOFFRcHBFTk5qYTViNTNxN1V3SStsVTdaR2paN3F1dUVTcAorSjYvNQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorIDIgczovQz1TRS9PPUFkZFRydXN0IEFCL09VPUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrL0NOPUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3QKKyAgIGk6L0M9VVMvU1Q9VVQvTD1TYWx0IExha2UgQ2l0eS9PPVRoZSBVU0VSVFJVU1QgTmV0d29yay9PVT1odHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20vQ049VVROLVVTRVJGaXJzdC1IYXJkd2FyZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFVHpDQ0F6ZWdBd0lCQWdJUUhNNUVZcFVaZXAxalV2bnlJNm0ybURBTkJna3Foa2lHOXcwQkFRVUZBRENCCitsekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFsVlVNUmN3RlFZRFZRUUhFdzVUWVd4MElFeGhhMlVnCitRMmwwZVRFZU1Cd0dBMVVFQ2hNVlZHaGxJRlZUUlZKVVVsVlRWQ0JPWlhSM2IzSnJNU0V3SHdZRFZRUUxFeGhvCitkSFJ3T2k4dmQzZDNMblZ6WlhKMGNuVnpkQzVqYjIweEh6QWRCZ05WQkFNVEZsVlVUaTFWVTBWU1JtbHljM1F0CitTR0Z5WkhkaGNtVXdIaGNOTURVd05qQTNNRGd3T1RFd1doY05NVGt3TnpBNU1UZ3hPVEl5V2pCdk1Rc3dDUVlECitWUVFHRXdKVFJURVVNQklHQTFVRUNoTUxRV1JrVkhKMWMzUWdRVUl4SmpBa0JnTlZCQXNUSFVGa1pGUnlkWE4wCitJRVY0ZEdWeWJtRnNJRlJVVUNCT1pYUjNiM0pyTVNJd0lBWURWUVFERXhsQlpHUlVjblZ6ZENCRmVIUmxjbTVoCitiQ0JEUVNCU2IyOTBNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQvY2FNK2J5CitBQVF0T2VCT1crMGZ2R3dQemJYNkk3Yk8zcHNSTTVla0tVeDlrNSs5U3J5VDdRTWE0NC9QNVcxUVd0YVhLWlJhCitnTEJKZXRzdWxmMjR5cjgzT0MwZVBwRkJyWEJXeC9CUFArZ3lublRLeUpCVTZjWmZEM2lkbWtBOERxeGhxbDRVCitqNTZIb1dwUTNOZWFUcThGczZaeGxKeHhzMUJnQ3NjVG5UZ0hoZ0tvNmFocEpoaVFxMHl3VHlPck9rK0UyTi9PCituK0ZwYjd2WFF0ZHJST1RIcmU1dFFWOXlXbkVJTjdONVphUlpvSlEzOXdBdkRjS1NjdHJRT0hMYkZLaEZ4RjBxCitmYmUwMXNUdXJNMFRSTGZKSzkxREFDWDZZYmxwYWxnakViZW5NNDlXZFZuMXpTblhScmNLSzJXMjAwSnZGYks0CitlL3Z2NlYxVDFUUmFKd0lEQVFBQm80RzlNSUc2TUI4R0ExVWRJd1FZTUJhQUZLRnlYeVliS0poRGxWMEhOOVdGCitscDFMMHNORk1CMEdBMVVkRGdRV0JCU3R2Wmg2TkxRbTkvckVKbFR2QTczZ0pNdFVHakFPQmdOVkhROEJBZjhFCitCQU1DQVFZd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQVFJd1JBWURWUjBmCitCRDB3T3pBNW9EZWdOWVl6YUhSMGNEb3ZMMk55YkM1MWMyVnlkSEoxYzNRdVkyOXRMMVZVVGkxVlUwVlNSbWx5CitjM1F0U0dGeVpIZGhjbVV1WTNKc01BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQnlRaEFOT3M0a0NscndGOEJXCitvbnZVT0dDU2pSSzUyellaZ0RYWU5qRHRtcjVySjZOeVBGRE5uK0p4a0xwallldElGTVRiU1JlNjc5QnQ4bTdhCitnSUFvUVlGUXR4TXV5TG5KZWdCMmFFYlFpSXhoL3RDMjFVY0ZGN2t0ZG5Eb1RsQTZ3M3BMdXZ1bmFJODRPZjNvCisyWUJyaHprVGJDZmFZazVKUmxUcHVkVzlEa1VrSEJzeXgzbmtuUEtucGxrSUdhSzBqZ244RTBuK1NGYWJZYUhrCitJOUxyb1lULytKdExlZmg5bGdCZEFnVnYwVVBiem9HZnVEc3JrL1poK1VyZ2JMRnBIb1ZuRWxoemJraDY0WjBYCitPR2FKdW5RYzY4Y0NadTVIVG4vYUs3ZkJHTWNWZmxSQ1hMVkVRcFU5UElBZEdBOFludmc2ODR0OEdNYUtzUmwxCitqSUdaCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCisgMyBzOi9DPVVTL1NUPVVUL0w9U2FsdCBMYWtlIENpdHkvTz1UaGUgVVNFUlRSVVNUIE5ldHdvcmsvT1U9aHR0cDovL3d3dy51c2VydHJ1c3QuY29tL0NOPVVUTi1VU0VSRmlyc3QtSGFyZHdhcmUKKyAgIGk6L0M9VVMvU1Q9VVQvTD1TYWx0IExha2UgQ2l0eS9PPVRoZSBVU0VSVFJVU1QgTmV0d29yay9PVT1odHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20vQ049VVROLVVTRVJGaXJzdC1IYXJkd2FyZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFZERDQ0ExeWdBd0lCQWdJUVJMNE1pMUFBSkxRUjB6WXEvbVVLL1RBTkJna3Foa2lHOXcwQkFRVUZBRENCCitsekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFsVlVNUmN3RlFZRFZRUUhFdzVUWVd4MElFeGhhMlVnCitRMmwwZVRFZU1Cd0dBMVVFQ2hNVlZHaGxJRlZUUlZKVVVsVlRWQ0JPWlhSM2IzSnJNU0V3SHdZRFZRUUxFeGhvCitkSFJ3T2k4dmQzZDNMblZ6WlhKMGNuVnpkQzVqYjIweEh6QWRCZ05WQkFNVEZsVlVUaTFWVTBWU1JtbHljM1F0CitTR0Z5WkhkaGNtVXdIaGNOT1Rrd056QTVNVGd4TURReVdoY05NVGt3TnpBNU1UZ3hPVEl5V2pDQmx6RUxNQWtHCitBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBbFZVTVJjd0ZRWURWUVFIRXc1VFlXeDBJRXhoYTJVZ1EybDBlVEVlCitNQndHQTFVRUNoTVZWR2hsSUZWVFJWSlVVbFZUVkNCT1pYUjNiM0pyTVNFd0h3WURWUVFMRXhob2RIUndPaTh2CitkM2QzTG5WelpYSjBjblZ6ZEM1amIyMHhIekFkQmdOVkJBTVRGbFZVVGkxVlUwVlNSbWx5YzNRdFNHRnlaSGRoCitjbVV3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ3g5OE00UDdTb2Y4ODVnbEZuCiswRzJmMHY5WTgrZWZLK3dOaVZTWnVUaVpGdmZnSVhsSXdydGhkQktXSFR4cWN0VThFR2M2T2UwckU4MW02NVVKCitNNlJzbDdIb3h1ekJkWG1jUmw2TnE5QnEvYmtxVlJjUVZMTVo4SnIyOGJGZHRxZHQrK0J4RjJ1aWlQc0EzLzRhCitNWGNNbWdGNnNUTGpLd0VIT0c3RHBWNGp2RVdiZTFEQnlUQ1AyK1VyZXROYit6TkFIcURWbUJlOGk0ZkRpZE5kCitvSTZ5cXFyMmptbUlCc1g2aVNIekNKMXBMZ2t6bXlrTlJnK016RWswc0dsUnZma0d6V2l0Wmt5OFBxeGh2UXFJCitEc2pmUGU1OEJFeWRDbDVya2RidXgrMG9qYXROaDRsejBHNmswQjRXaXhUaGRrUURmMk9zNU0xSm5NV1M5S3N5CitvVWhiQWdNQkFBR2pnYmt3Z2JZd0N3WURWUjBQQkFRREFnSEdNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlECitWUjBPQkJZRUZLRnlYeVliS0poRGxWMEhOOVdGbHAxTDBzTkZNRVFHQTFVZEh3UTlNRHN3T2FBM29EV0dNMmgwCitkSEE2THk5amNtd3VkWE5sY25SeWRYTjBMbU52YlM5VlZFNHRWVk5GVWtacGNuTjBMVWhoY21SM1lYSmxMbU55CitiREF4QmdOVkhTVUVLakFvQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdVR0NDc0dBUVVGQndNR0JnZ3JCZ0VGCitCUWNEQnpBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQVJ4a1AzblRHbVpldi9LMG9YbldPNnkxbjdrNTdLOWNNCisvL2JleTFXaUN1Rk1WR1dUWUd1ZkVweXRYb01zNjFxdXdPUXQ5QUJqSGJqQWJQTFBTYnROazI4R3Bnb2lza2xpCitDRTcveU1nVXNvZ1dYZWNCNUJLVjVVVTBzNHRwdmMrMGhZOTFVWjU5T2pnNkZFZ1N4dnVuT3hxTkRZSkFCK2dFCitDSkNoaWNzWlVOL0tIQUc4SFFRWmV4QjJsenZ1a0pES3hBNGZGbTUxN3pQNDAyOWJIcGJqNEhSM2RIdUtvbTR0CiszWGJXT1RDQzhLdWNVdklxeDY5SlhuN0hhT1dDZ2NocUova25pQ3JWV0ZDVkgvQTdIRmU3ZlJRNVlpdWF5WlNTCitLcU1pRFArSkpuMWZJeXRIMXhVZHFXcWVVUTBxVVo2QitkUTdYbkFTZnhBeW5CNjduZmhtcUE9PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3NvcnRwZXJmLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3NvcnRwZXJmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjODNlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvc29ydHBlcmYucHkKQEAgLTAsMCArMSwxNjkgQEAKKyIiIlNvcnQgcGVyZm9ybWFuY2UgdGVzdC4KKworU2VlIG1haW4oKSBmb3IgY29tbWFuZCBsaW5lIHN5bnRheC4KK1NlZSB0YWJ1bGF0ZSgpIGZvciBvdXRwdXQgZm9ybWF0LgorCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBvcworCit0ZCA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorCitkZWYgcmFuZGZsb2F0cyhuKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIG4gcmFuZG9tIGZsb2F0cyBpbiBbMCwgMSkuIiIiCisgICAgIyBHZW5lcmF0aW5nIGZsb2F0cyBpcyBleHBlbnNpdmUsIHNvIHRoaXMgd3JpdGVzIHRoZW0gb3V0IHRvIGEgZmlsZSBpbgorICAgICMgYSB0ZW1wIGRpcmVjdG9yeS4gIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBpdCBqdXN0IHJlYWRzIHRoZW0KKyAgICAjIGJhY2sgaW4gYW5kIHNodWZmbGVzIHRoZW0gYSBiaXQuCisgICAgZm4gPSBvcy5wYXRoLmpvaW4odGQsICJyciUwNmQiICUgbikKKyAgICB0cnk6CisgICAgICAgIGZwID0gb3BlbihmbiwgInJiIikKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgciA9IHJhbmRvbS5yYW5kb20KKyAgICAgICAgcmVzdWx0ID0gW3IoKSBmb3IgaSBpbiB4cmFuZ2UobildCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZm4sICJ3YiIpCisgICAgICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHJlc3VsdCwgZnApCisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgIGZwID0gTm9uZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiBmcDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgICAgICBwcmludCAiY2FuJ3Qgd3JpdGUiLCBmbiwgIjoiLCBtc2cKKyAgICBlbHNlOgorICAgICAgICByZXN1bHQgPSBtYXJzaGFsLmxvYWQoZnApCisgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgIyBTaHVmZmxlIGl0IGEgYml0Li4uCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGkgPSByYW5kb20ucmFuZHJhbmdlKG4pCisgICAgICAgICAgICB0ZW1wID0gcmVzdWx0WzppXQorICAgICAgICAgICAgZGVsIHJlc3VsdFs6aV0KKyAgICAgICAgICAgIHRlbXAucmV2ZXJzZSgpCisgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKHRlbXApCisgICAgICAgICAgICBkZWwgdGVtcAorICAgIGFzc2VydCBsZW4ocmVzdWx0KSA9PSBuCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgZmx1c2goKToKKyAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworZGVmIGRvaXQoTCk6CisgICAgdDAgPSB0aW1lLmNsb2NrKCkKKyAgICBMLnNvcnQoKQorICAgIHQxID0gdGltZS5jbG9jaygpCisgICAgcHJpbnQgIiU2LjJmIiAlICh0MS10MCksCisgICAgZmx1c2goKQorCitkZWYgdGFidWxhdGUocik6CisgICAgIiIiVGFidWxhdGUgc29ydCBzcGVlZCBmb3IgbGlzdHMgb2YgdmFyaW91cyBzaXplcy4KKworICAgIFRoZSBzaXplcyBhcmUgMioqaSBmb3IgaSBpbiByICh0aGUgYXJndW1lbnQsIGEgbGlzdCkuCisKKyAgICBUaGUgb3V0cHV0IGRpc3BsYXlzIGksIDIqKmksIGFuZCB0aGUgdGltZSB0byBzb3J0IGFycmF5cyBvZiAyKippCisgICAgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKworICAgICpzb3J0OiByYW5kb20gZGF0YQorICAgIFxzb3J0OiBkZXNjZW5kaW5nIGRhdGEKKyAgICAvc29ydDogYXNjZW5kaW5nIGRhdGEKKyAgICAzc29ydDogYXNjZW5kaW5nLCB0aGVuIDMgcmFuZG9tIGV4Y2hhbmdlcworICAgICtzb3J0OiBhc2NlbmRpbmcsIHRoZW4gMTAgcmFuZG9tIGF0IHRoZSBlbmQKKyAgICAlc29ydDogYXNjZW5kaW5nLCB0aGVuIHJhbmRvbWx5IHJlcGxhY2UgMSUgb2YgdGhlIGVsZW1lbnRzIHcvIHJhbmRvbSB2YWx1ZXMKKyAgICB+c29ydDogbWFueSBkdXBsaWNhdGVzCisgICAgPXNvcnQ6IGFsbCBlcXVhbAorICAgICFzb3J0OiB3b3JzdCBjYXNlIHNjZW5hcmlvCisKKyAgICAiIiIKKyAgICBjYXNlcyA9IHR1cGxlKFtjaCArICJzb3J0IiBmb3IgY2ggaW4gciIqXC8zKyV+PSEiXSkKKyAgICBmbXQgPSAoIiUycyAlN3MiICsgIiAlNnMiKmxlbihjYXNlcykpCisgICAgcHJpbnQgZm10ICUgKCgiaSIsICIyKippIikgKyBjYXNlcykKKyAgICBmb3IgaSBpbiByOgorICAgICAgICBuID0gMSA8PCBpCisgICAgICAgIEwgPSByYW5kZmxvYXRzKG4pCisgICAgICAgIHByaW50ICIlMmQgJTdkIiAlIChpLCBuKSwKKyAgICAgICAgZmx1c2goKQorICAgICAgICBkb2l0KEwpICMgKnNvcnQKKyAgICAgICAgTC5yZXZlcnNlKCkKKyAgICAgICAgZG9pdChMKSAjIFxzb3J0CisgICAgICAgIGRvaXQoTCkgIyAvc29ydAorCisgICAgICAgICMgRG8gMyByYW5kb20gZXhjaGFuZ2VzLgorICAgICAgICBmb3IgZHVtbXkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBpMSA9IHJhbmRvbS5yYW5kcmFuZ2UobikKKyAgICAgICAgICAgIGkyID0gcmFuZG9tLnJhbmRyYW5nZShuKQorICAgICAgICAgICAgTFtpMV0sIExbaTJdID0gTFtpMl0sIExbaTFdCisgICAgICAgIGRvaXQoTCkgIyAzc29ydAorCisgICAgICAgICMgUmVwbGFjZSB0aGUgbGFzdCAxMCB3aXRoIHJhbmRvbSBmbG9hdHMuCisgICAgICAgIGlmIG4gPj0gMTA6CisgICAgICAgICAgICBMWy0xMDpdID0gW3JhbmRvbS5yYW5kb20oKSBmb3IgZHVtbXkgaW4gcmFuZ2UoMTApXQorICAgICAgICBkb2l0KEwpICMgK3NvcnQKKworICAgICAgICAjIFJlcGxhY2UgMSUgb2YgdGhlIGVsZW1lbnRzIGF0IHJhbmRvbS4KKyAgICAgICAgZm9yIGR1bW15IGluIHhyYW5nZShuIC8vIDEwMCk6CisgICAgICAgICAgICBMW3JhbmRvbS5yYW5kcmFuZ2UobildID0gcmFuZG9tLnJhbmRvbSgpCisgICAgICAgIGRvaXQoTCkgIyAlc29ydAorCisgICAgICAgICMgQXJyYW5nZSBmb3IgbG90cyBvZiBkdXBsaWNhdGVzLgorICAgICAgICBpZiBuID4gNDoKKyAgICAgICAgICAgIGRlbCBMWzQ6XQorICAgICAgICAgICAgTCA9IEwgKiAobiAvLyA0KQorICAgICAgICAgICAgIyBGb3JjZSB0aGUgZWxlbWVudHMgdG8gYmUgZGlzdGluY3Qgb2JqZWN0cywgZWxzZSB0aW1pbmdzIGNhbiBiZQorICAgICAgICAgICAgIyBhcnRpZmljaWFsbHkgbG93LgorICAgICAgICAgICAgTCA9IG1hcChsYW1iZGEgeDogLS14LCBMKQorICAgICAgICBkb2l0KEwpICMgfnNvcnQKKyAgICAgICAgZGVsIEwKKworICAgICAgICAjIEFsbCBlcXVhbC4gIEFnYWluLCBmb3JjZSB0aGUgZWxlbWVudHMgdG8gYmUgZGlzdGluY3Qgb2JqZWN0cy4KKyAgICAgICAgTCA9IG1hcChhYnMsIFstMC41XSAqIG4pCisgICAgICAgIGRvaXQoTCkgIyA9c29ydAorICAgICAgICBkZWwgTAorCisgICAgICAgICMgVGhpcyBvbmUgbG9va3MgbGlrZSBbMywgMiwgMSwgMCwgMCwgMSwgMiwgM10uICBJdCB3YXMgYSBiYWQgY2FzZQorICAgICAgICAjIGZvciBhbiBvbGRlciBpbXBsZW1lbnRhdGlvbiBvZiBxdWlja3NvcnQsIHdoaWNoIHVzZWQgdGhlIG1lZGlhbgorICAgICAgICAjIG9mIHRoZSBmaXJzdCwgbGFzdCBhbmQgbWlkZGxlIGVsZW1lbnRzIGFzIHRoZSBwaXZvdC4KKyAgICAgICAgaGFsZiA9IG4gLy8gMgorICAgICAgICBMID0gcmFuZ2UoaGFsZiAtIDEsIC0xLCAtMSkKKyAgICAgICAgTC5leHRlbmQocmFuZ2UoaGFsZikpCisgICAgICAgICMgRm9yY2UgdG8gZmxvYXQsIHNvIHRoYXQgdGhlIHRpbWluZ3MgYXJlIGNvbXBhcmFibGUuICBUaGlzIGlzCisgICAgICAgICMgc2lnbmlmaWNhbnRseSBmYXN0ZXIgaWYgd2UgbGVhdmUgdGhhbSBhcyBpbnRzLgorICAgICAgICBMID0gbWFwKGZsb2F0LCBMKQorICAgICAgICBkb2l0KEwpICMgIXNvcnQKKyAgICAgICAgcHJpbnQKKworZGVmIG1haW4oKToKKyAgICAiIiJNYWluIHByb2dyYW0gd2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LgorCisgICAgT25lIGFyZ3VtZW50OiB0YWJ1bGF0ZSBhIHNpbmdsZSByb3cuCisgICAgVHdvIGFyZ3VtZW50czogdGFidWxhdGUgYSByYW5nZSAoaW5jbHVzaXZlKS4KKyAgICBFeHRyYSBhcmd1bWVudHMgYXJlIHVzZWQgdG8gc2VlZCB0aGUgcmFuZG9tIGdlbmVyYXRvci4KKworICAgICIiIgorICAgICMgZGVmYXVsdCByYW5nZSAoaW5jbHVzaXZlKQorICAgIGsxID0gMTUKKyAgICBrMiA9IDIwCisgICAgaWYgc3lzLmFyZ3ZbMTpdOgorICAgICAgICAjIG9uZSBhcmd1bWVudDogc2luZ2xlIHBvaW50CisgICAgICAgIGsxID0gazIgPSBpbnQoc3lzLmFyZ3ZbMV0pCisgICAgICAgIGlmIHN5cy5hcmd2WzI6XToKKyAgICAgICAgICAgICMgdHdvIGFyZ3VtZW50czogc3BlY2lmeSByYW5nZQorICAgICAgICAgICAgazIgPSBpbnQoc3lzLmFyZ3ZbMl0pCisgICAgICAgICAgICBpZiBzeXMuYXJndlszOl06CisgICAgICAgICAgICAgICAgIyBkZXJpdmUgcmFuZG9tIHNlZWQgZnJvbSByZW1haW5pbmcgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgeCA9IDEKKyAgICAgICAgICAgICAgICBmb3IgYSBpbiBzeXMuYXJndlszOl06CisgICAgICAgICAgICAgICAgICAgIHggPSA2OTA2OSAqIHggKyBoYXNoKGEpCisgICAgICAgICAgICAgICAgcmFuZG9tLnNlZWQoeCkKKyAgICByID0gcmFuZ2UoazEsIGsyKzEpICAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdGhlIGVuZCBwb2ludAorICAgIHRhYnVsYXRlKHIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWFiNmFlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQpAQCAtMCwwICsxLDEzNTUgQEAKKyIiIgorQ29tbW9uIHRlc3RzIHNoYXJlZCBieSB0ZXN0X3N0ciwgdGVzdF91bmljb2RlLCB0ZXN0X3VzZXJzdHJpbmcgYW5kIHRlc3Rfc3RyaW5nLgorIiIiCisKK2ltcG9ydCB1bml0dGVzdCwgc3RyaW5nLCBzeXMsIHN0cnVjdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0CitpbXBvcnQgX3Rlc3RjYXBpCisKK2NsYXNzIFNlcXVlbmNlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXE9J3d4eXonKTogc2VsZi5zZXEgPSBzZXEKKyAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIGxlbihzZWxmLnNlcSkKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6IHJldHVybiBzZWxmLnNlcVtpXQorCitjbGFzcyBCYWRTZXExKFNlcXVlbmNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6IHNlbGYuc2VxID0gWzcsICdoZWxsbycsIDEyM0xdCisKK2NsYXNzIEJhZFNlcTIoU2VxdWVuY2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKTogc2VsZi5zZXEgPSBbJ2EnLCAnYicsICdjJ10KKyAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIDgKKworY2xhc3MgQ29tbW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGlzIHRlc3RjYXNlIGNvbnRhaW5zIHRlc3QgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbGwKKyAgICAjIHN0cmluZ2xpa2UgY2xhc3Nlcy4gQ3VycmVudGx5IHRoaXMgaXMgc3RyLCB1bmljb2RlCisgICAgIyBVc2VyU3RyaW5nIGFuZCB0aGUgc3RyaW5nIG1vZHVsZS4KKworICAgICMgVGhlIHR5cGUgdG8gYmUgdGVzdGVkCisgICAgIyBDaGFuZ2UgaW4gc3ViY2xhc3NlcyB0byBjaGFuZ2UgdGhlIGJlaGF2aW91ciBvZiBmaXh0ZXN0dHlwZSgpCisgICAgdHlwZTJ0ZXN0ID0gTm9uZQorCisgICAgIyBBbGwgdGVzdHMgcGFzcyB0aGVpciBhcmd1bWVudHMgdG8gdGhlIHRlc3RpbmcgbWV0aG9kcworICAgICMgYXMgc3RyIG9iamVjdHMuIGZpeHRlc3R0eXBlKCkgY2FuIGJlIHVzZWQgdG8gcHJvcGFnYXRlCisgICAgIyB0aGVzZSBhcmd1bWVudHMgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUKKyAgICBkZWYgZml4dHlwZShzZWxmLCBvYmopOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgc3RyKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXy50eXBlMnRlc3Qob2JqKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBsaXN0KToKKyAgICAgICAgICAgIHJldHVybiBbc2VsZi5maXh0eXBlKHgpIGZvciB4IGluIG9ial0KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgdHVwbGUpOgorICAgICAgICAgICAgcmV0dXJuIHR1cGxlKFtzZWxmLmZpeHR5cGUoeCkgZm9yIHggaW4gb2JqXSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CisgICAgICAgICAgICByZXR1cm4gZGljdChbCisgICAgICAgICAgICAgICAoc2VsZi5maXh0eXBlKGtleSksIHNlbGYuZml4dHlwZSh2YWx1ZSkpCisgICAgICAgICAgICAgICBmb3IgKGtleSwgdmFsdWUpIGluIG9iai5pdGVyaXRlbXMoKQorICAgICAgICAgICAgXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvYmoKKworICAgICMgY2hlY2sgdGhhdCBvYmplY3QubWV0aG9kKCphcmdzKSByZXR1cm5zIHJlc3VsdAorICAgIGRlZiBjaGVja2VxdWFsKHNlbGYsIHJlc3VsdCwgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuZml4dHlwZShyZXN1bHQpCisgICAgICAgIG9iamVjdCA9IHNlbGYuZml4dHlwZShvYmplY3QpCisgICAgICAgIGFyZ3MgPSBzZWxmLmZpeHR5cGUoYXJncykKKyAgICAgICAgcmVhbHJlc3VsdCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKSgqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIHJlYWxyZXN1bHQKKyAgICAgICAgKQorICAgICAgICAjIGlmIHRoZSBvcmlnaW5hbCBpcyByZXR1cm5lZCBtYWtlIHN1cmUgdGhhdAorICAgICAgICAjIHRoaXMgZG9lc24ndCBoYXBwZW4gd2l0aCBzdWJjbGFzc2VzCisgICAgICAgIGlmIG9iamVjdCA9PSByZWFscmVzdWx0OgorICAgICAgICAgICAgY2xhc3Mgc3VidHlwZShzZWxmLl9fY2xhc3NfXy50eXBlMnRlc3QpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIG9iamVjdCA9IHN1YnR5cGUob2JqZWN0KQorICAgICAgICAgICAgcmVhbHJlc3VsdCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKSgqYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmplY3QgaXMgbm90IHJlYWxyZXN1bHQpCisKKyAgICAjIGNoZWNrIHRoYXQgb2JqZWN0Lm1ldGhvZCgqYXJncykgcmFpc2VzIGV4YworICAgIGRlZiBjaGVja3JhaXNlcyhzZWxmLCBleGMsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICBvYmplY3QgPSBzZWxmLmZpeHR5cGUob2JqZWN0KQorICAgICAgICBhcmdzID0gc2VsZi5maXh0eXBlKGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZXhjLAorICAgICAgICAgICAgZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpLAorICAgICAgICAgICAgKmFyZ3MKKyAgICAgICAgKQorCisgICAgIyBjYWxsIG9iamVjdC5tZXRob2QoKmFyZ3MpIHdpdGhvdXQgYW55IGNoZWNrcworICAgIGRlZiBjaGVja2NhbGwoc2VsZiwgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIG9iamVjdCA9IHNlbGYuZml4dHlwZShvYmplY3QpCisgICAgICAgIGFyZ3MgPSBzZWxmLmZpeHR5cGUoYXJncykKKyAgICAgICAgZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpKCphcmdzKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgIyBTRiBidWcgMTA1NDEzOTogICs9IG9wdGltaXphdGlvbiB3YXMgbm90IGludmFsaWRhdGluZyBjYWNoZWQgaGFzaCB2YWx1ZQorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoJ0ROU1NFQycpCisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdCgnJykKKyAgICAgICAgZm9yIGMgaW4gYToKKyAgICAgICAgICAgIGIgKz0gYworICAgICAgICAgICAgaGFzaChiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goYikpCisKKyAgICBkZWYgdGVzdF9jYXBpdGFsaXplKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyBoZWxsbyAnLCAnIGhlbGxvICcsICdjYXBpdGFsaXplJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdIZWxsbyAnLCAnSGVsbG8gJywnY2FwaXRhbGl6ZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnSGVsbG8gJywgJ2hlbGxvICcsJ2NhcGl0YWxpemUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0FhYWEnLCAnYWFhYScsICdjYXBpdGFsaXplJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdBYWFhJywgJ0FhQWEnLCAnY2FwaXRhbGl6ZScpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdjYXBpdGFsaXplJywgNDIpCisKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsICdhYWEnLCAnY291bnQnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWFhJywgJ2NvdW50JywgJ2InKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FhYScsICdjb3VudCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhYWEnLCAnY291bnQnLCAnYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWFhJywgJ2NvdW50JywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FhYScsICdjb3VudCcsICdiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhYWEnLCAnY291bnQnLCAnYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgyLCAnYWFhJywgJ2NvdW50JywgJ2EnLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FhYScsICdjb3VudCcsICdhJywgMTApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxLCAnYWFhJywgJ2NvdW50JywgJ2EnLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsICdhYWEnLCAnY291bnQnLCAnYScsIC0xMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEsICdhYWEnLCAnY291bnQnLCAnYScsIDAsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWFhJywgJ2NvdW50JywgJ2EnLCAwLCAxMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDIsICdhYWEnLCAnY291bnQnLCAnYScsIDAsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FhYScsICdjb3VudCcsICdhJywgMCwgLTEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FhYScsICdjb3VudCcsICcnLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMSwgJ2FhYScsICdjb3VudCcsICcnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FhYScsICdjb3VudCcsICcnLCAxMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDIsICdhYWEnLCAnY291bnQnLCAnJywgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCg0LCAnYWFhJywgJ2NvdW50JywgJycsIC0xMCkKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMSwgJycsICdjb3VudCcsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJycsICdjb3VudCcsICcnLCAxLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJycsICdjb3VudCcsICcnLCBzeXMubWF4aW50LCAwKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnJywgJ2NvdW50JywgJ3h4JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICcnLCAnY291bnQnLCAneHgnLCAxLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJycsICdjb3VudCcsICd4eCcsIHN5cy5tYXhpbnQsIDApCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdjb3VudCcpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnY291bnQnLCA0MikKKworICAgICAgICAjIEZvciBhIHZhcmlldHkgb2YgY29tYmluYXRpb25zLAorICAgICAgICAjICAgIHZlcmlmeSB0aGF0IHN0ci5jb3VudCgpIG1hdGNoZXMgYW4gZXF1aXZhbGVudCBmdW5jdGlvbgorICAgICAgICAjICAgIHJlcGxhY2luZyBhbGwgb2NjdXJyZW5jZXMgYW5kIHRoZW4gZGlmZmVyZW5jaW5nIHRoZSBzdHJpbmcgbGVuZ3RocworICAgICAgICBjaGFyc2V0ID0gWycnLCAnYScsICdiJ10KKyAgICAgICAgZGlnaXRzID0gNworICAgICAgICBiYXNlID0gbGVuKGNoYXJzZXQpCisgICAgICAgIHRlc3RzdHJpbmdzID0gc2V0KCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGJhc2UgKiogZGlnaXRzKToKKyAgICAgICAgICAgIGVudHJ5ID0gW10KKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZShkaWdpdHMpOgorICAgICAgICAgICAgICAgIGksIG0gPSBkaXZtb2QoaSwgYmFzZSkKKyAgICAgICAgICAgICAgICBlbnRyeS5hcHBlbmQoY2hhcnNldFttXSkKKyAgICAgICAgICAgIHRlc3RzdHJpbmdzLmFkZCgnJy5qb2luKGVudHJ5KSkKKyAgICAgICAgdGVzdHN0cmluZ3MgPSBsaXN0KHRlc3RzdHJpbmdzKQorICAgICAgICBmb3IgaSBpbiB0ZXN0c3RyaW5nczoKKyAgICAgICAgICAgIGkgPSBzZWxmLmZpeHR5cGUoaSkKKyAgICAgICAgICAgIG4gPSBsZW4oaSkKKyAgICAgICAgICAgIGZvciBqIGluIHRlc3RzdHJpbmdzOgorICAgICAgICAgICAgICAgIHIxID0gaS5jb3VudChqKQorICAgICAgICAgICAgICAgIGlmIGo6CisgICAgICAgICAgICAgICAgICAgIHIyLCByZW0gPSBkaXZtb2QobiAtIGxlbihpLnJlcGxhY2UoaiwgJycpKSwgbGVuKGopKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHIyLCByZW0gPSBsZW4oaSkrMSwgMAorICAgICAgICAgICAgICAgIGlmIHJlbSBvciByMSAhPSByMjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW0sIDAsICclcyAhPSAwIGZvciAlcycgJSAocmVtLCBpKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIsICclcyAhPSAlcyBmb3IgJXMnICUgKHIxLCByMiwgaSkpCisKKyAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FiY2RlZmdoaWFiYycsICdmaW5kJywgJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCg5LCAnYWJjZGVmZ2hpYWJjJywgJ2ZpbmQnLCAnYWJjJywgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYWJjZGVmZ2hpYWJjJywgJ2ZpbmQnLCAnZGVmJywgNCkKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FiYycsICdmaW5kJywgJycsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWJjJywgJ2ZpbmQnLCAnJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYWJjJywgJ2ZpbmQnLCAnJywgNCkKKworICAgICAgICAjIHRvIGNoZWNrIHRoZSBhYmlsaXR5IHRvIHBhc3MgTm9uZSBhcyBkZWZhdWx0cworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoIDIsICdycmFycnJycnJycnJhJywgJ2ZpbmQnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMiwgJ3JyYXJycnJycnJycmEnLCAnZmluZCcsICdhJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAncnJhcnJycnJycnJyYScsICdmaW5kJywgJ2EnLCA0LCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdycmFycnJycnJycnJhJywgJ2ZpbmQnLCAnYScsIDQsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCggMiwgJ3JyYXJycnJycnJycmEnLCAnZmluZCcsICdhJywgTm9uZSwgNikKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2ZpbmQnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2ZpbmQnLCA0MikKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJycsICdmaW5kJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJycsICdmaW5kJywgJycsIDEsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJycsICdmaW5kJywgJycsIHN5cy5tYXhpbnQsIDApCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnJywgJ2ZpbmQnLCAneHgnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICcnLCAnZmluZCcsICd4eCcsIDEsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJycsICdmaW5kJywgJ3h4Jywgc3lzLm1heGludCwgMCkKKworICAgICAgICAjIGlzc3VlIDc0NTgKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYWInLCAnZmluZCcsICd4eHgnLCBzeXMubWF4c2l6ZSArIDEsIDApCisKKyAgICAgICAgIyBGb3IgYSB2YXJpZXR5IG9mIGNvbWJpbmF0aW9ucywKKyAgICAgICAgIyAgICB2ZXJpZnkgdGhhdCBzdHIuZmluZCgpIG1hdGNoZXMgX19jb250YWluc19fCisgICAgICAgICMgICAgYW5kIHRoYXQgdGhlIGZvdW5kIHN1YnN0cmluZyBpcyByZWFsbHkgYXQgdGhhdCBsb2NhdGlvbgorICAgICAgICBjaGFyc2V0ID0gWycnLCAnYScsICdiJywgJ2MnXQorICAgICAgICBkaWdpdHMgPSA1CisgICAgICAgIGJhc2UgPSBsZW4oY2hhcnNldCkKKyAgICAgICAgdGVzdHN0cmluZ3MgPSBzZXQoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoYmFzZSAqKiBkaWdpdHMpOgorICAgICAgICAgICAgZW50cnkgPSBbXQorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKGRpZ2l0cyk6CisgICAgICAgICAgICAgICAgaSwgbSA9IGRpdm1vZChpLCBiYXNlKQorICAgICAgICAgICAgICAgIGVudHJ5LmFwcGVuZChjaGFyc2V0W21dKQorICAgICAgICAgICAgdGVzdHN0cmluZ3MuYWRkKCcnLmpvaW4oZW50cnkpKQorICAgICAgICB0ZXN0c3RyaW5ncyA9IGxpc3QodGVzdHN0cmluZ3MpCisgICAgICAgIGZvciBpIGluIHRlc3RzdHJpbmdzOgorICAgICAgICAgICAgaSA9IHNlbGYuZml4dHlwZShpKQorICAgICAgICAgICAgZm9yIGogaW4gdGVzdHN0cmluZ3M6CisgICAgICAgICAgICAgICAgbG9jID0gaS5maW5kKGopCisgICAgICAgICAgICAgICAgcjEgPSAobG9jICE9IC0xKQorICAgICAgICAgICAgICAgIHIyID0gaiBpbiBpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCisgICAgICAgICAgICAgICAgaWYgbG9jICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlbbG9jOmxvYytsZW4oaildLCBqKQorCisgICAgZGVmIHRlc3RfcmZpbmQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCg5LCAgJ2FiY2RlZmdoaWFiYycsICdyZmluZCcsICdhYmMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdhYmNkZWZnaGlhYmMnLCAncmZpbmQnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhYmNkZWZnaGlhYmMnLCAncmZpbmQnLCAnYWJjZCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2FiY2RlZmdoaWFiYycsICdyZmluZCcsICdhYmN6JykKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FiYycsICdyZmluZCcsICcnLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FiYycsICdyZmluZCcsICcnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhYmMnLCAncmZpbmQnLCAnJywgNCkKKworICAgICAgICAjIHRvIGNoZWNrIHRoZSBhYmlsaXR5IHRvIHBhc3MgTm9uZSBhcyBkZWZhdWx0cworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdycmFycnJycnJycnJhJywgJ3JmaW5kJywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdycmFycnJycnJycnJhJywgJ3JmaW5kJywgJ2EnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdycmFycnJycnJycnJhJywgJ3JmaW5kJywgJ2EnLCA0LCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdycmFycnJycnJycnJhJywgJ3JmaW5kJywgJ2EnLCA0LCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoIDIsICdycmFycnJycnJycnJhJywgJ3JmaW5kJywgJ2EnLCBOb25lLCA2KQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmZpbmQnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JmaW5kJywgNDIpCisKKyAgICAgICAgIyBGb3IgYSB2YXJpZXR5IG9mIGNvbWJpbmF0aW9ucywKKyAgICAgICAgIyAgICB2ZXJpZnkgdGhhdCBzdHIucmZpbmQoKSBtYXRjaGVzIF9fY29udGFpbnNfXworICAgICAgICAjICAgIGFuZCB0aGF0IHRoZSBmb3VuZCBzdWJzdHJpbmcgaXMgcmVhbGx5IGF0IHRoYXQgbG9jYXRpb24KKyAgICAgICAgY2hhcnNldCA9IFsnJywgJ2EnLCAnYicsICdjJ10KKyAgICAgICAgZGlnaXRzID0gNQorICAgICAgICBiYXNlID0gbGVuKGNoYXJzZXQpCisgICAgICAgIHRlc3RzdHJpbmdzID0gc2V0KCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGJhc2UgKiogZGlnaXRzKToKKyAgICAgICAgICAgIGVudHJ5ID0gW10KKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZShkaWdpdHMpOgorICAgICAgICAgICAgICAgIGksIG0gPSBkaXZtb2QoaSwgYmFzZSkKKyAgICAgICAgICAgICAgICBlbnRyeS5hcHBlbmQoY2hhcnNldFttXSkKKyAgICAgICAgICAgIHRlc3RzdHJpbmdzLmFkZCgnJy5qb2luKGVudHJ5KSkKKyAgICAgICAgdGVzdHN0cmluZ3MgPSBsaXN0KHRlc3RzdHJpbmdzKQorICAgICAgICBmb3IgaSBpbiB0ZXN0c3RyaW5nczoKKyAgICAgICAgICAgIGkgPSBzZWxmLmZpeHR5cGUoaSkKKyAgICAgICAgICAgIGZvciBqIGluIHRlc3RzdHJpbmdzOgorICAgICAgICAgICAgICAgIGxvYyA9IGkucmZpbmQoaikKKyAgICAgICAgICAgICAgICByMSA9IChsb2MgIT0gLTEpCisgICAgICAgICAgICAgICAgcjIgPSBqIGluIGkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMikKKyAgICAgICAgICAgICAgICBpZiBsb2MgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaVtsb2M6bG9jK2xlbihqKV0sIHNlbGYuZml4dHlwZShqKSkKKworICAgICAgICAjIGlzc3VlIDc0NTgKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYWInLCAncmZpbmQnLCAneHh4Jywgc3lzLm1heHNpemUgKyAxLCAwKQorCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJ2RlZicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCg5LCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJ2FiYycsIDEpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnYWJjZGVmZ2hpYWJjJywgJ2luZGV4JywgJ2hpYicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaWFiJywgJ2luZGV4JywgJ2FiYycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaScsICdpbmRleCcsICdnaGknLCA4KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLCAnaW5kZXgnLCAnZ2hpJywgLTEpCisKKyAgICAgICAgIyB0byBjaGVjayB0aGUgYWJpbGl0eSB0byBwYXNzIE5vbmUgYXMgZGVmYXVsdHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCAyLCAncnJhcnJycnJycnJyYScsICdpbmRleCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEyLCAncnJhcnJycnJycnJyYScsICdpbmRleCcsICdhJywgNCkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAncnJhcnJycnJycnJyYScsICdpbmRleCcsICdhJywgNCwgNikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEyLCAncnJhcnJycnJycnJyYScsICdpbmRleCcsICdhJywgNCwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCAyLCAncnJhcnJycnJycnJyYScsICdpbmRleCcsICdhJywgTm9uZSwgNikKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2luZGV4JykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdpbmRleCcsIDQyKQorCisgICAgZGVmIHRlc3RfcmluZGV4KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdhYmNkZWZnaGlhYmMnLCAncmluZGV4JywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAgJ2FiY2RlZmdoaWFiYycsICdyaW5kZXgnLCAnZGVmJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDksICAnYWJjZGVmZ2hpYWJjJywgJ3JpbmRleCcsICdhYmMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgICdhYmNkZWZnaGlhYmMnLCAncmluZGV4JywgJ2FiYycsIDAsIC0xKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaWFiYycsICdyaW5kZXgnLCAnaGliJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnZGVmZ2hpYWJjJywgJ3JpbmRleCcsICdkZWYnLCAxKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdkZWZnaGlhYmMnLCAncmluZGV4JywgJ2FiYycsIDAsIC0xKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLCAncmluZGV4JywgJ2doaScsIDAsIDgpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaScsICdyaW5kZXgnLCAnZ2hpJywgMCwgLTEpCisKKyAgICAgICAgIyB0byBjaGVjayB0aGUgYWJpbGl0eSB0byBwYXNzIE5vbmUgYXMgZGVmYXVsdHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEyLCAncnJhcnJycnJycnJyYScsICdyaW5kZXgnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMiwgJ3JyYXJycnJycnJycmEnLCAncmluZGV4JywgJ2EnLCA0KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdycmFycnJycnJycnJhJywgJ3JpbmRleCcsICdhJywgNCwgNikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEyLCAncnJhcnJycnJycnJyYScsICdyaW5kZXgnLCAnYScsIDQsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCggMiwgJ3JyYXJycnJycnJycmEnLCAncmluZGV4JywgJ2EnLCBOb25lLCA2KQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmluZGV4JykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyaW5kZXgnLCA0MikKKworICAgIGRlZiB0ZXN0X2xvd2VyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJ0hlTExvJywgJ2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICdoZWxsbycsICdsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnbG93ZXInLCA0MikKKworICAgIGRlZiB0ZXN0X3VwcGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0hFTExPJywgJ0hlTExvJywgJ3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdIRUxMTycsICdIRUxMTycsICd1cHBlcicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAndXBwZXInLCA0MikKKworICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgOCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICBkZWZcbmcgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsICdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgYVxuIGInLCAnIFx0YVxuXHRiJywgJ2V4cGFuZHRhYnMnLCAxKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZXhwYW5kdGFicycsIDQyLCA0MikKKyAgICAgICAgIyBUaGlzIHRlc3QgaXMgb25seSB2YWxpZCB3aGVuIHNpemVvZihpbnQpID09IHNpemVvZih2b2lkKikgPT0gNC4KKyAgICAgICAgaWYgc3lzLm1heGludCA8ICgxIDw8IDMyKSBhbmQgc3RydWN0LmNhbGNzaXplKCdQJykgPT0gNDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x0YVxuXHRiJywgJ2V4cGFuZHRhYnMnLCBzeXMubWF4aW50KQorCisgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ3RoaXMnLCAnaXMnLCAndGhlJywgJ3NwbGl0JywgJ2Z1bmN0aW9uJ10sCisgICAgICAgICAgICAndGhpcyBpcyB0aGUgc3BsaXQgZnVuY3Rpb24nLCAnc3BsaXQnKQorCisgICAgICAgICMgYnkgd2hpdGVzcGFjZQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhIGIgYyBkICcsICdzcGxpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYiBjIGQnXSwgJ2EgYiBjIGQnLCAnc3BsaXQnLCBOb25lLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYyBkJ10sICdhIGIgYyBkJywgJ3NwbGl0JywgTm9uZSwgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYSBiIGMgZCcsICdzcGxpdCcsIE5vbmUsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EgYiBjIGQnLCAnc3BsaXQnLCBOb25lLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhIGIgYyBkJywgJ3NwbGl0JywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5tYXhpbnQtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSBiIGMgZCddLCAnYSBiIGMgZCcsICdzcGxpdCcsIE5vbmUsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EgYiBjIGQnXSwgJyAgYSBiIGMgZCcsICdzcGxpdCcsIE5vbmUsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjICBkJ10sICdhICBiICBjICBkJywgJ3NwbGl0JywgTm9uZSwgMikKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW10sICcgICAgICAgICAnLCAnc3BsaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10sICcgIGEgICAgJywgJ3NwbGl0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJ10sICcgIGEgICAgYiAgICcsICdzcGxpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYiAgICddLCAnICBhICAgIGIgICAnLCAnc3BsaXQnLCBOb25lLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2IgICBjICAgJ10sICcgIGEgICAgYiAgIGMgICAnLCAnc3BsaXQnLCBOb25lLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYyAgICddLCAnICBhICAgIGIgICBjICAgJywgJ3NwbGl0JywgTm9uZSwgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJ10sICdcblx0YSBcdFxyIGIgXHYgJywgJ3NwbGl0JykKKyAgICAgICAgYWFhID0gJyBhICcqMjAKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddKjIwLCBhYWEsICdzcGxpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSArIFthYWFbNDpdXSwgYWFhLCAnc3BsaXQnLCBOb25lLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMTkgKyBbJ2EgJ10sIGFhYSwgJ3NwbGl0JywgTm9uZSwgMTkpCisKKyAgICAgICAgIyBieSBhIGNoYXIKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYXxifGN8ZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdifGN8ZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JywgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2N8ZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5tYXhpbnQtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYXxifGN8ZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICcnLCAnYnx8Y3x8ZCddLCAnYXx8Ynx8Y3x8ZCcsICdzcGxpdCcsICd8JywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnZW5kY2FzZSAnLCAnJ10sICdlbmRjYXNlIHwnLCAnc3BsaXQnLCAnfCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJycsICcgc3RhcnRjYXNlJ10sICd8IHN0YXJ0Y2FzZScsICdzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJ2JvdGhjYXNlJywgJyddLCAnfGJvdGhjYXNlfCcsICdzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICcnLCAnYlx4MDBjXHgwMGQnXSwgJ2FceDAwXHgwMGJceDAwY1x4MDBkJywgJ3NwbGl0JywgJ1x4MDAnLCAyKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSoyMCwgKCdhfCcqMjApWzotMV0sICdzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddKjE1ICtbJ2F8YXxhfGF8YSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2F8JyoyMClbOi0xXSwgJ3NwbGl0JywgJ3wnLCAxNSkKKworICAgICAgICAjIGJ5IHN0cmluZworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgJy8vJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiLy9jLy9kJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgJy8vJywgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MvL2QnXSwgJ2EvL2IvL2MvL2QnLCAnc3BsaXQnLCAnLy8nLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgJy8vJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYS8vYi8vYy8vZCcsICdzcGxpdCcsICcvLycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EvL2IvL2MvL2QnLCAnc3BsaXQnLCAnLy8nLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1heGludC0xMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYS8vYi8vYy8vZCddLCAnYS8vYi8vYy8vZCcsICdzcGxpdCcsICcvLycsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnJywgJ2IvLy8vYy8vLy9kJ10sICdhLy8vL2IvLy8vYy8vLy9kJywgJ3NwbGl0JywgJy8vJywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnZW5kY2FzZSAnLCAnJ10sICdlbmRjYXNlIHRlc3QnLCAnc3BsaXQnLCAndGVzdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJycsICcgYmVnaW5jYXNlJ10sICd0ZXN0IGJlZ2luY2FzZScsICdzcGxpdCcsICd0ZXN0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJyBib3RoY2FzZSAnLCAnJ10sICd0ZXN0IGJvdGhjYXNlIHRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NwbGl0JywgJ3Rlc3QnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2JjJ10sICdhYmJiYycsICdzcGxpdCcsICdiYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJycsICcnXSwgJ2FhYScsICdzcGxpdCcsICdhYWEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYWEnXSwgJ2FhYScsICdzcGxpdCcsICdhYWEnLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYicsICdhYiddLCAnYWJiYWFiJywgJ3NwbGl0JywgJ2JhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWFhYSddLCAnYWFhYScsICdzcGxpdCcsICdhYWInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnXSwgJycsICdzcGxpdCcsICdhYWEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYSddLCAnYWEnLCAnc3BsaXQnLCAnYWFhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnQScsICdib2JiJ10sICdBYmJvYmJib2JiJywgJ3NwbGl0JywgJ2Jib2JiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnQScsICdCJywgJyddLCAnQWJib2JiQmJib2JiJywgJ3NwbGl0JywgJ2Jib2JiJykKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMjAsICgnYUJMQUgnKjIwKVs6LTRdLCAnc3BsaXQnLCAnQkxBSCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSoyMCwgKCdhQkxBSCcqMjApWzotNF0sICdzcGxpdCcsICdCTEFIJywgMTkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSoxOCArIFsnYUJMQUhhJ10sICgnYUJMQUgnKjIwKVs6LTRdLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NwbGl0JywgJ0JMQUgnLCAxOCkKKworICAgICAgICAjIG1peGVkIHVzZSBvZiBzdHIgYW5kIHVuaWNvZGUKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFt1J2EnLCB1J2InLCB1J2MgZCddLCAnYSBiIGMgZCcsICdzcGxpdCcsIHUnICcsIDIpCisKKyAgICAgICAgIyBhcmd1bWVudCB0eXBlCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnc3BsaXQnLCA0MiwgNDIsIDQyKQorCisgICAgICAgICMgbnVsbCBjYXNlCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2hlbGxvJywgJ3NwbGl0JywgJycpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2hlbGxvJywgJ3NwbGl0JywgJycsIDApCisKKyAgICBkZWYgdGVzdF9yc3BsaXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ3RoaXMnLCAnaXMnLCAndGhlJywgJ3JzcGxpdCcsICdmdW5jdGlvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0aGlzIGlzIHRoZSByc3BsaXQgZnVuY3Rpb24nLCAncnNwbGl0JykKKworICAgICAgICAjIGJ5IHdoaXRlc3BhY2UKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYSBiIGMgZCAnLCAncnNwbGl0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSBiIGMnLCAnZCddLCAnYSBiIGMgZCcsICdyc3BsaXQnLCBOb25lLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhIGInLCAnYycsICdkJ10sICdhIGIgYyBkJywgJ3JzcGxpdCcsIE5vbmUsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EgYiBjIGQnLCAncnNwbGl0JywgTm9uZSwgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYSBiIGMgZCcsICdyc3BsaXQnLCBOb25lLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhIGIgYyBkJywgJ3JzcGxpdCcsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMubWF4aW50LTIwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhIGIgYyBkJ10sICdhIGIgYyBkJywgJ3JzcGxpdCcsIE5vbmUsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EgYiBjIGQnXSwgJ2EgYiBjIGQgICcsICdyc3BsaXQnLCBOb25lLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhICBiJywgJ2MnLCAnZCddLCAnYSAgYiAgYyAgZCcsICdyc3BsaXQnLCBOb25lLCAyKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbXSwgJyAgICAgICAgICcsICdyc3BsaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10sICcgIGEgICAgJywgJ3JzcGxpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYiddLCAnICBhICAgIGIgICAnLCAncnNwbGl0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnICBhJywgJ2InXSwgJyAgYSAgICBiICAgJywgJ3JzcGxpdCcsIE5vbmUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJyAgYSAgICBiJywnYyddLCAnICBhICAgIGIgICBjICAgJywgJ3JzcGxpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycgIGEnLCAnYicsICdjJ10sICcgIGEgICAgYiAgIGMgICAnLCAncnNwbGl0JywKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYiddLCAnXG5cdGEgXHRcciBiIFx2ICcsICdyc3BsaXQnLCBOb25lLCA4OCkKKyAgICAgICAgYWFhID0gJyBhICcqMjAKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddKjIwLCBhYWEsICdyc3BsaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW2FhYVs6LTRdXSArIFsnYSddLCBhYWEsICdyc3BsaXQnLCBOb25lLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycgYSAgYSddICsgWydhJ10qMTgsIGFhYSwgJ3JzcGxpdCcsIE5vbmUsIDE4KQorCisKKyAgICAgICAgIyBieSBhIGNoYXIKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYXxifGN8ZCcsICdyc3BsaXQnLCAnfCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2F8YnxjJywgJ2QnXSwgJ2F8YnxjfGQnLCAncnNwbGl0JywgJ3wnLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhfGInLCAnYycsICdkJ10sICdhfGJ8Y3xkJywgJ3JzcGxpdCcsICd8JywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYXxifGN8ZCcsICdyc3BsaXQnLCAnfCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2F8YnxjfGQnLCAncnNwbGl0JywgJ3wnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhfGJ8Y3xkJywgJ3JzcGxpdCcsICd8JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5tYXhpbnQtMTAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhfGJ8Y3xkJ10sICdhfGJ8Y3xkJywgJ3JzcGxpdCcsICd8JywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYXx8Ynx8YycsICcnLCAnZCddLCAnYXx8Ynx8Y3x8ZCcsICdyc3BsaXQnLCAnfCcsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJycsICcgYmVnaW5jYXNlJ10sICd8IGJlZ2luY2FzZScsICdyc3BsaXQnLCAnfCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2VuZGNhc2UgJywgJyddLCAnZW5kY2FzZSB8JywgJ3JzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJ2JvdGhjYXNlJywgJyddLCAnfGJvdGhjYXNlfCcsICdyc3BsaXQnLCAnfCcpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYVx4MDBceDAwYicsICdjJywgJ2QnXSwgJ2FceDAwXHgwMGJceDAwY1x4MDBkJywgJ3JzcGxpdCcsICdceDAwJywgMikKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMjAsICgnYXwnKjIwKVs6LTFdLCAncnNwbGl0JywgJ3wnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhfGF8YXxhfGEnXStbJ2EnXSoxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgnYXwnKjIwKVs6LTFdLCAncnNwbGl0JywgJ3wnLCAxNSkKKworICAgICAgICAjIGJ5IHN0cmluZworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3JzcGxpdCcsICcvLycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EvL2IvL2MnLCAnZCddLCAnYS8vYi8vYy8vZCcsICdyc3BsaXQnLCAnLy8nLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhLy9iJywgJ2MnLCAnZCddLCAnYS8vYi8vYy8vZCcsICdyc3BsaXQnLCAnLy8nLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3JzcGxpdCcsICcvLycsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EvL2IvL2MvL2QnLCAncnNwbGl0JywgJy8vJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYS8vYi8vYy8vZCcsICdyc3BsaXQnLCAnLy8nLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1heGludC01KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhLy9iLy9jLy9kJ10sICdhLy9iLy9jLy9kJywgJ3JzcGxpdCcsICcvLycsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EvLy8vYi8vLy9jJywgJycsICdkJ10sICdhLy8vL2IvLy8vYy8vLy9kJywgJ3JzcGxpdCcsICcvLycsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJycsICcgYmVnaW5jYXNlJ10sICd0ZXN0IGJlZ2luY2FzZScsICdyc3BsaXQnLCAndGVzdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2VuZGNhc2UgJywgJyddLCAnZW5kY2FzZSB0ZXN0JywgJ3JzcGxpdCcsICd0ZXN0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJyBib3RoY2FzZSAnLCAnJ10sICd0ZXN0IGJvdGhjYXNlIHRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3JzcGxpdCcsICd0ZXN0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWInLCAnYyddLCAnYWJiYmMnLCAncnNwbGl0JywgJ2JiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJyddLCAnYWFhJywgJ3JzcGxpdCcsICdhYWEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYWEnXSwgJ2FhYScsICdyc3BsaXQnLCAnYWFhJywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWInLCAnYWInXSwgJ2FiYmFhYicsICdyc3BsaXQnLCAnYmEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYWFhJ10sICdhYWFhJywgJ3JzcGxpdCcsICdhYWInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnXSwgJycsICdyc3BsaXQnLCAnYWFhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWEnXSwgJ2FhJywgJ3JzcGxpdCcsICdhYWEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydiYm9iJywgJ0EnXSwgJ2Jib2JiYm9iYkEnLCAncnNwbGl0JywgJ2Jib2JiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJ0InLCAnQSddLCAnYmJvYmJCYmJvYmJBJywgJ3JzcGxpdCcsICdiYm9iYicpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddKjIwLCAoJ2FCTEFIJyoyMClbOi00XSwgJ3JzcGxpdCcsICdCTEFIJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddKjIwLCAoJ2FCTEFIJyoyMClbOi00XSwgJ3JzcGxpdCcsICdCTEFIJywgMTkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FCTEFIYSddICsgWydhJ10qMTgsICgnYUJMQUgnKjIwKVs6LTRdLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3JzcGxpdCcsICdCTEFIJywgMTgpCisKKyAgICAgICAgIyBtaXhlZCB1c2Ugb2Ygc3RyIGFuZCB1bmljb2RlCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbdSdhIGInLCB1J2MnLCB1J2QnXSwgJ2EgYiBjIGQnLCAncnNwbGl0JywgdScgJywgMikKKworICAgICAgICAjIGFyZ3VtZW50IHR5cGUKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyc3BsaXQnLCA0MiwgNDIsIDQyKQorCisgICAgICAgICMgbnVsbCBjYXNlCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2hlbGxvJywgJ3JzcGxpdCcsICcnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdoZWxsbycsICdyc3BsaXQnLCAnJywgMCkKKworICAgIGRlZiB0ZXN0X3N0cmlwKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJyAgIGhlbGxvICAgJywgJ3N0cmlwJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbyAgICcsICcgICBoZWxsbyAgICcsICdsc3RyaXAnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgIGhlbGxvJywgJyAgIGhlbGxvICAgJywgJ3JzdHJpcCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAnaGVsbG8nLCAnc3RyaXAnKQorCisgICAgICAgICMgc3RyaXAvbHN0cmlwL3JzdHJpcCB3aXRoIE5vbmUgYXJnCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAnICAgaGVsbG8gICAnLCAnc3RyaXAnLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvICAgJywgJyAgIGhlbGxvICAgJywgJ2xzdHJpcCcsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnICAgaGVsbG8nLCAnICAgaGVsbG8gICAnLCAncnN0cmlwJywgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICdoZWxsbycsICdzdHJpcCcsIE5vbmUpCisKKyAgICAgICAgIyBzdHJpcC9sc3RyaXAvcnN0cmlwIHdpdGggc3RyIGFyZworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJ3h5enp5aGVsbG94eXp6eScsICdzdHJpcCcsICd4eXonKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxveHl6enknLCAneHl6enloZWxsb3h5enp5JywgJ2xzdHJpcCcsICd4eXonKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3h5enp5aGVsbG8nLCAneHl6enloZWxsb3h5enp5JywgJ3JzdHJpcCcsICd4eXonKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJ2hlbGxvJywgJ3N0cmlwJywgJ3h5eicpCisKKyAgICAgICAgIyBzdHJpcC9sc3RyaXAvcnN0cmlwIHdpdGggdW5pY29kZSBhcmcKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdoZWxsbycsICdhc2NpaScpLCAneHl6enloZWxsb3h5enp5JywKKyAgICAgICAgICAgICAgICAgJ3N0cmlwJywgdW5pY29kZSgneHl6JywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnaGVsbG94eXp6eScsICdhc2NpaScpLCAneHl6enloZWxsb3h5enp5JywKKyAgICAgICAgICAgICAgICAgJ2xzdHJpcCcsIHVuaWNvZGUoJ3h5eicsICdhc2NpaScpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ3h5enp5aGVsbG8nLCAnYXNjaWknKSwgJ3h5enp5aGVsbG94eXp6eScsCisgICAgICAgICAgICAgICAgICdyc3RyaXAnLCB1bmljb2RlKCd4eXonLCAnYXNjaWknKSkKKyAgICAgICAgICAgICMgWFhYCisgICAgICAgICAgICAjc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2hlbGxvJywgJ2FzY2lpJyksICdoZWxsbycsCisgICAgICAgICAgICAjICAgICAnc3RyaXAnLCB1bmljb2RlKCd4eXonLCAnYXNjaWknKSkKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3N0cmlwJywgNDIsIDQyKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2xzdHJpcCcsIDQyLCA0MikKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyc3RyaXAnLCA0MiwgNDIpCisKKyAgICBkZWYgdGVzdF9sanVzdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMgICAgICAgJywgJ2FiYycsICdsanVzdCcsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYyAgICcsICdhYmMnLCAnbGp1c3QnLCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAnbGp1c3QnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAnbGp1c3QnLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYyoqKioqKionLCAnYWJjJywgJ2xqdXN0JywgMTAsICcqJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnbGp1c3QnKQorCisgICAgZGVmIHRlc3Rfcmp1c3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnICAgICAgIGFiYycsICdhYmMnLCAncmp1c3QnLCAxMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcgICBhYmMnLCAnYWJjJywgJ3JqdXN0JywgNikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ3JqdXN0JywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ3JqdXN0JywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcqKioqKioqYWJjJywgJ2FiYycsICdyanVzdCcsIDEwLCAnKicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ3JqdXN0JykKKworICAgIGRlZiB0ZXN0X2NlbnRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcgICBhYmMgICAgJywgJ2FiYycsICdjZW50ZXInLCAxMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcgYWJjICAnLCAnYWJjJywgJ2NlbnRlcicsIDYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdjZW50ZXInLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAnY2VudGVyJywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcqKiphYmMqKioqJywgJ2FiYycsICdjZW50ZXInLCAxMCwgJyonKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdjZW50ZXInKQorCisgICAgZGVmIHRlc3Rfc3dhcGNhc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaEVsbE8gQ29NUHVURXJTJywgJ0hlTExvIGNPbXBVdGVScycsICdzd2FwY2FzZScpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdzd2FwY2FzZScsIDQyKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKKyAgICAgICAgRVEgPSBzZWxmLmNoZWNrZXF1YWwKKworICAgICAgICAjIE9wZXJhdGlvbnMgb24gdGhlIGVtcHR5IHN0cmluZworICAgICAgICBFUSgiIiwgIiIsICJyZXBsYWNlIiwgIiIsICIiKQorICAgICAgICBFUSgiQSIsICIiLCAicmVwbGFjZSIsICIiLCAiQSIpCisgICAgICAgIEVRKCIiLCAiIiwgInJlcGxhY2UiLCAiQSIsICIiKQorICAgICAgICBFUSgiIiwgIiIsICJyZXBsYWNlIiwgIkEiLCAiQSIpCisgICAgICAgIEVRKCIiLCAiIiwgInJlcGxhY2UiLCAiIiwgIiIsIDEwMCkKKyAgICAgICAgRVEoIiIsICIiLCAicmVwbGFjZSIsICIiLCAiIiwgc3lzLm1heGludCkKKworICAgICAgICAjIGludGVybGVhdmUgKGZyb209PSIiLCAndG8nIGdldHMgaW5zZXJ0ZWQgZXZlcnl3aGVyZSkKKyAgICAgICAgRVEoIkEiLCAiQSIsICJyZXBsYWNlIiwgIiIsICIiKQorICAgICAgICBFUSgiKkEqIiwgIkEiLCAicmVwbGFjZSIsICIiLCAiKiIpCisgICAgICAgIEVRKCIqMUEqMSIsICJBIiwgInJlcGxhY2UiLCAiIiwgIioxIikKKyAgICAgICAgRVEoIiotI0EqLSMiLCAiQSIsICJyZXBsYWNlIiwgIiIsICIqLSMiKQorICAgICAgICBFUSgiKi1BKi1BKi0iLCAiQUEiLCAicmVwbGFjZSIsICIiLCAiKi0iKQorICAgICAgICBFUSgiKi1BKi1BKi0iLCAiQUEiLCAicmVwbGFjZSIsICIiLCAiKi0iLCAtMSkKKyAgICAgICAgRVEoIiotQSotQSotIiwgIkFBIiwgInJlcGxhY2UiLCAiIiwgIiotIiwgc3lzLm1heGludCkKKyAgICAgICAgRVEoIiotQSotQSotIiwgIkFBIiwgInJlcGxhY2UiLCAiIiwgIiotIiwgNCkKKyAgICAgICAgRVEoIiotQSotQSotIiwgIkFBIiwgInJlcGxhY2UiLCAiIiwgIiotIiwgMykKKyAgICAgICAgRVEoIiotQSotQSIsICJBQSIsICJyZXBsYWNlIiwgIiIsICIqLSIsIDIpCisgICAgICAgIEVRKCIqLUFBIiwgIkFBIiwgInJlcGxhY2UiLCAiIiwgIiotIiwgMSkKKyAgICAgICAgRVEoIkFBIiwgIkFBIiwgInJlcGxhY2UiLCAiIiwgIiotIiwgMCkKKworICAgICAgICAjIHNpbmdsZSBjaGFyYWN0ZXIgZGVsZXRpb24gKGZyb209PSJBIiwgdG89PSIiKQorICAgICAgICBFUSgiIiwgIkEiLCAicmVwbGFjZSIsICJBIiwgIiIpCisgICAgICAgIEVRKCIiLCAiQUFBIiwgInJlcGxhY2UiLCAiQSIsICIiKQorICAgICAgICBFUSgiIiwgIkFBQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgLTEpCisgICAgICAgIEVRKCIiLCAiQUFBIiwgInJlcGxhY2UiLCAiQSIsICIiLCBzeXMubWF4aW50KQorICAgICAgICBFUSgiIiwgIkFBQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgNCkKKyAgICAgICAgRVEoIiIsICJBQUEiLCAicmVwbGFjZSIsICJBIiwgIiIsIDMpCisgICAgICAgIEVRKCJBIiwgIkFBQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgMikKKyAgICAgICAgRVEoIkFBIiwgIkFBQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgMSkKKyAgICAgICAgRVEoIkFBQSIsICJBQUEiLCAicmVwbGFjZSIsICJBIiwgIiIsIDApCisgICAgICAgIEVRKCIiLCAiQUFBQUFBQUFBQSIsICJyZXBsYWNlIiwgIkEiLCAiIikKKyAgICAgICAgRVEoIkJDRCIsICJBQkFDQURBIiwgInJlcGxhY2UiLCAiQSIsICIiKQorICAgICAgICBFUSgiQkNEIiwgIkFCQUNBREEiLCAicmVwbGFjZSIsICJBIiwgIiIsIC0xKQorICAgICAgICBFUSgiQkNEIiwgIkFCQUNBREEiLCAicmVwbGFjZSIsICJBIiwgIiIsIHN5cy5tYXhpbnQpCisgICAgICAgIEVRKCJCQ0QiLCAiQUJBQ0FEQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgNSkKKyAgICAgICAgRVEoIkJDRCIsICJBQkFDQURBIiwgInJlcGxhY2UiLCAiQSIsICIiLCA0KQorICAgICAgICBFUSgiQkNEQSIsICJBQkFDQURBIiwgInJlcGxhY2UiLCAiQSIsICIiLCAzKQorICAgICAgICBFUSgiQkNBREEiLCAiQUJBQ0FEQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgMikKKyAgICAgICAgRVEoIkJBQ0FEQSIsICJBQkFDQURBIiwgInJlcGxhY2UiLCAiQSIsICIiLCAxKQorICAgICAgICBFUSgiQUJBQ0FEQSIsICJBQkFDQURBIiwgInJlcGxhY2UiLCAiQSIsICIiLCAwKQorICAgICAgICBFUSgiQkNEIiwgIkFCQ0FEIiwgInJlcGxhY2UiLCAiQSIsICIiKQorICAgICAgICBFUSgiQkNEIiwgIkFCQ0FEQUEiLCAicmVwbGFjZSIsICJBIiwgIiIpCisgICAgICAgIEVRKCJCQ0QiLCAiQkNEIiwgInJlcGxhY2UiLCAiQSIsICIiKQorICAgICAgICBFUSgiKioqKioqKioqKioqKiIsICIqKioqKioqKioqKioqIiwgInJlcGxhY2UiLCAiQSIsICIiKQorICAgICAgICBFUSgiXkFeIiwgIl4iKyJBIioxMDAwKyJeIiwgInJlcGxhY2UiLCAiQSIsICIiLCA5OTkpCisKKyAgICAgICAgIyBzdWJzdHJpbmcgZGVsZXRpb24gKGZyb209PSJ0aGUiLCB0bz09IiIpCisgICAgICAgIEVRKCIiLCAidGhlIiwgInJlcGxhY2UiLCAidGhlIiwgIiIpCisgICAgICAgIEVRKCJhdGVyIiwgInRoZWF0ZXIiLCAicmVwbGFjZSIsICJ0aGUiLCAiIikKKyAgICAgICAgRVEoIiIsICJ0aGV0aGUiLCAicmVwbGFjZSIsICJ0aGUiLCAiIikKKyAgICAgICAgRVEoIiIsICJ0aGV0aGV0aGV0aGUiLCAicmVwbGFjZSIsICJ0aGUiLCAiIikKKyAgICAgICAgRVEoImFhYWEiLCAidGhlYXRoZWF0aGVhdGhlYSIsICJyZXBsYWNlIiwgInRoZSIsICIiKQorICAgICAgICBFUSgidGhhdCIsICJ0aGF0IiwgInJlcGxhY2UiLCAidGhlIiwgIiIpCisgICAgICAgIEVRKCJ0aGFldCIsICJ0aGFldCIsICJyZXBsYWNlIiwgInRoZSIsICIiKQorICAgICAgICBFUSgiaGVyZSBhbmQgcmUiLCAiaGVyZSBhbmQgdGhlcmUiLCAicmVwbGFjZSIsICJ0aGUiLCAiIikKKyAgICAgICAgRVEoImhlcmUgYW5kIHJlIGFuZCByZSIsICJoZXJlIGFuZCB0aGVyZSBhbmQgdGhlcmUiLAorICAgICAgICAgICAicmVwbGFjZSIsICJ0aGUiLCAiIiwgc3lzLm1heGludCkKKyAgICAgICAgRVEoImhlcmUgYW5kIHJlIGFuZCByZSIsICJoZXJlIGFuZCB0aGVyZSBhbmQgdGhlcmUiLAorICAgICAgICAgICAicmVwbGFjZSIsICJ0aGUiLCAiIiwgLTEpCisgICAgICAgIEVRKCJoZXJlIGFuZCByZSBhbmQgcmUiLCAiaGVyZSBhbmQgdGhlcmUgYW5kIHRoZXJlIiwKKyAgICAgICAgICAgInJlcGxhY2UiLCAidGhlIiwgIiIsIDMpCisgICAgICAgIEVRKCJoZXJlIGFuZCByZSBhbmQgcmUiLCAiaGVyZSBhbmQgdGhlcmUgYW5kIHRoZXJlIiwKKyAgICAgICAgICAgInJlcGxhY2UiLCAidGhlIiwgIiIsIDIpCisgICAgICAgIEVRKCJoZXJlIGFuZCByZSBhbmQgdGhlcmUiLCAiaGVyZSBhbmQgdGhlcmUgYW5kIHRoZXJlIiwKKyAgICAgICAgICAgInJlcGxhY2UiLCAidGhlIiwgIiIsIDEpCisgICAgICAgIEVRKCJoZXJlIGFuZCB0aGVyZSBhbmQgdGhlcmUiLCAiaGVyZSBhbmQgdGhlcmUgYW5kIHRoZXJlIiwKKyAgICAgICAgICAgInJlcGxhY2UiLCAidGhlIiwgIiIsIDApCisgICAgICAgIEVRKCJoZXJlIGFuZCByZSBhbmQgcmUiLCAiaGVyZSBhbmQgdGhlcmUgYW5kIHRoZXJlIiwgInJlcGxhY2UiLCAidGhlIiwgIiIpCisKKyAgICAgICAgRVEoImFiYyIsICJhYmMiLCAicmVwbGFjZSIsICJ0aGUiLCAiIikKKyAgICAgICAgRVEoImFiY2RlZmciLCAiYWJjZGVmZyIsICJyZXBsYWNlIiwgInRoZSIsICIiKQorCisgICAgICAgICMgc3Vic3RyaW5nIGRlbGV0aW9uIChmcm9tPT0iYm9iIiwgdG89PSIiKQorICAgICAgICBFUSgiYm9iIiwgImJib2JvYiIsICJyZXBsYWNlIiwgImJvYiIsICIiKQorICAgICAgICBFUSgiYm9iWGJvYiIsICJiYm9ib2JYYmJvYm9iIiwgInJlcGxhY2UiLCAiYm9iIiwgIiIpCisgICAgICAgIEVRKCJhYWFhYWFhIiwgImFhYWFhYWFib2IiLCAicmVwbGFjZSIsICJib2IiLCAiIikKKyAgICAgICAgRVEoImFhYWFhYWEiLCAiYWFhYWFhYSIsICJyZXBsYWNlIiwgImJvYiIsICIiKQorCisgICAgICAgICMgc2luZ2xlIGNoYXJhY3RlciByZXBsYWNlIGluIHBsYWNlIChsZW4oZnJvbSk9PWxlbih0byk9PTEpCisgICAgICAgIEVRKCJXaG8gZ29lcyB0aGVyZT8iLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAibyIsICJvIikKKyAgICAgICAgRVEoIldoTyBnT2VzIHRoZXJlPyIsICJXaG8gZ29lcyB0aGVyZT8iLCAicmVwbGFjZSIsICJvIiwgIk8iKQorICAgICAgICBFUSgiV2hPIGdPZXMgdGhlcmU/IiwgIldobyBnb2VzIHRoZXJlPyIsICJyZXBsYWNlIiwgIm8iLCAiTyIsIHN5cy5tYXhpbnQpCisgICAgICAgIEVRKCJXaE8gZ09lcyB0aGVyZT8iLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAibyIsICJPIiwgLTEpCisgICAgICAgIEVRKCJXaE8gZ09lcyB0aGVyZT8iLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAibyIsICJPIiwgMykKKyAgICAgICAgRVEoIldoTyBnT2VzIHRoZXJlPyIsICJXaG8gZ29lcyB0aGVyZT8iLCAicmVwbGFjZSIsICJvIiwgIk8iLCAyKQorICAgICAgICBFUSgiV2hPIGdvZXMgdGhlcmU/IiwgIldobyBnb2VzIHRoZXJlPyIsICJyZXBsYWNlIiwgIm8iLCAiTyIsIDEpCisgICAgICAgIEVRKCJXaG8gZ29lcyB0aGVyZT8iLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAibyIsICJPIiwgMCkKKworICAgICAgICBFUSgiV2hvIGdvZXMgdGhlcmU/IiwgIldobyBnb2VzIHRoZXJlPyIsICJyZXBsYWNlIiwgImEiLCAicSIpCisgICAgICAgIEVRKCJ3aG8gZ29lcyB0aGVyZT8iLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAiVyIsICJ3IikKKyAgICAgICAgRVEoInd3aG8gZ29lcyB0aGVyZT93dyIsICJXV2hvIGdvZXMgdGhlcmU/V1ciLCAicmVwbGFjZSIsICJXIiwgInciKQorICAgICAgICBFUSgiV2hvIGdvZXMgdGhlcmUhIiwgIldobyBnb2VzIHRoZXJlPyIsICJyZXBsYWNlIiwgIj8iLCAiISIpCisgICAgICAgIEVRKCJXaG8gZ29lcyB0aGVyZSEhIiwgIldobyBnb2VzIHRoZXJlPz8iLCAicmVwbGFjZSIsICI/IiwgIiEiKQorCisgICAgICAgIEVRKCJXaG8gZ29lcyB0aGVyZT8iLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAiLiIsICIhIikKKworICAgICAgICAjIHN1YnN0cmluZyByZXBsYWNlIGluIHBsYWNlIChsZW4oZnJvbSk9PWxlbih0bykgPiAxKQorICAgICAgICBFUSgiVGgqKiAqKiBhIHQqKnN1ZSIsICJUaGlzIGlzIGEgdGlzc3VlIiwgInJlcGxhY2UiLCAiaXMiLCAiKioiKQorICAgICAgICBFUSgiVGgqKiAqKiBhIHQqKnN1ZSIsICJUaGlzIGlzIGEgdGlzc3VlIiwgInJlcGxhY2UiLCAiaXMiLCAiKioiLCBzeXMubWF4aW50KQorICAgICAgICBFUSgiVGgqKiAqKiBhIHQqKnN1ZSIsICJUaGlzIGlzIGEgdGlzc3VlIiwgInJlcGxhY2UiLCAiaXMiLCAiKioiLCAtMSkKKyAgICAgICAgRVEoIlRoKiogKiogYSB0KipzdWUiLCAiVGhpcyBpcyBhIHRpc3N1ZSIsICJyZXBsYWNlIiwgImlzIiwgIioqIiwgNCkKKyAgICAgICAgRVEoIlRoKiogKiogYSB0KipzdWUiLCAiVGhpcyBpcyBhIHRpc3N1ZSIsICJyZXBsYWNlIiwgImlzIiwgIioqIiwgMykKKyAgICAgICAgRVEoIlRoKiogKiogYSB0aXNzdWUiLCAiVGhpcyBpcyBhIHRpc3N1ZSIsICJyZXBsYWNlIiwgImlzIiwgIioqIiwgMikKKyAgICAgICAgRVEoIlRoKiogaXMgYSB0aXNzdWUiLCAiVGhpcyBpcyBhIHRpc3N1ZSIsICJyZXBsYWNlIiwgImlzIiwgIioqIiwgMSkKKyAgICAgICAgRVEoIlRoaXMgaXMgYSB0aXNzdWUiLCAiVGhpcyBpcyBhIHRpc3N1ZSIsICJyZXBsYWNlIiwgImlzIiwgIioqIiwgMCkKKyAgICAgICAgRVEoImNvYm9iIiwgImJvYm9iIiwgInJlcGxhY2UiLCAiYm9iIiwgImNvYiIpCisgICAgICAgIEVRKCJjb2JvYlhjb2JvY29iIiwgImJvYm9iWGJvYm9ib2IiLCAicmVwbGFjZSIsICJib2IiLCAiY29iIikKKyAgICAgICAgRVEoImJvYm9iIiwgImJvYm9iIiwgInJlcGxhY2UiLCAiYm90IiwgImJvdCIpCisKKyAgICAgICAgIyByZXBsYWNlIHNpbmdsZSBjaGFyYWN0ZXIgKGxlbihmcm9tKT09MSwgbGVuKHRvKT4xKQorICAgICAgICBFUSgiUmV5S0tqYXZpS0siLCAiUmV5a2phdmlrIiwgInJlcGxhY2UiLCAiayIsICJLSyIpCisgICAgICAgIEVRKCJSZXlLS2phdmlLSyIsICJSZXlramF2aWsiLCAicmVwbGFjZSIsICJrIiwgIktLIiwgLTEpCisgICAgICAgIEVRKCJSZXlLS2phdmlLSyIsICJSZXlramF2aWsiLCAicmVwbGFjZSIsICJrIiwgIktLIiwgc3lzLm1heGludCkKKyAgICAgICAgRVEoIlJleUtLamF2aUtLIiwgIlJleWtqYXZpayIsICJyZXBsYWNlIiwgImsiLCAiS0siLCAyKQorICAgICAgICBFUSgiUmV5S0tqYXZpayIsICJSZXlramF2aWsiLCAicmVwbGFjZSIsICJrIiwgIktLIiwgMSkKKyAgICAgICAgRVEoIlJleWtqYXZpayIsICJSZXlramF2aWsiLCAicmVwbGFjZSIsICJrIiwgIktLIiwgMCkKKyAgICAgICAgRVEoIkEtLS0tQi0tLS1DLS0tLSIsICJBLkIuQy4iLCAicmVwbGFjZSIsICIuIiwgIi0tLS0iKQorCisgICAgICAgIEVRKCJSZXlramF2aWsiLCAiUmV5a2phdmlrIiwgInJlcGxhY2UiLCAicSIsICJLSyIpCisKKyAgICAgICAgIyByZXBsYWNlIHN1YnN0cmluZyAobGVuKGZyb20pPjEsIGxlbih0bykhPWxlbihmcm9tKSkKKyAgICAgICAgRVEoImhhbSwgaGFtLCBlZ2dzIGFuZCBoYW0iLCAic3BhbSwgc3BhbSwgZWdncyBhbmQgc3BhbSIsCisgICAgICAgICAgICJyZXBsYWNlIiwgInNwYW0iLCAiaGFtIikKKyAgICAgICAgRVEoImhhbSwgaGFtLCBlZ2dzIGFuZCBoYW0iLCAic3BhbSwgc3BhbSwgZWdncyBhbmQgc3BhbSIsCisgICAgICAgICAgICJyZXBsYWNlIiwgInNwYW0iLCAiaGFtIiwgc3lzLm1heGludCkKKyAgICAgICAgRVEoImhhbSwgaGFtLCBlZ2dzIGFuZCBoYW0iLCAic3BhbSwgc3BhbSwgZWdncyBhbmQgc3BhbSIsCisgICAgICAgICAgICJyZXBsYWNlIiwgInNwYW0iLCAiaGFtIiwgLTEpCisgICAgICAgIEVRKCJoYW0sIGhhbSwgZWdncyBhbmQgaGFtIiwgInNwYW0sIHNwYW0sIGVnZ3MgYW5kIHNwYW0iLAorICAgICAgICAgICAicmVwbGFjZSIsICJzcGFtIiwgImhhbSIsIDQpCisgICAgICAgIEVRKCJoYW0sIGhhbSwgZWdncyBhbmQgaGFtIiwgInNwYW0sIHNwYW0sIGVnZ3MgYW5kIHNwYW0iLAorICAgICAgICAgICAicmVwbGFjZSIsICJzcGFtIiwgImhhbSIsIDMpCisgICAgICAgIEVRKCJoYW0sIGhhbSwgZWdncyBhbmQgc3BhbSIsICJzcGFtLCBzcGFtLCBlZ2dzIGFuZCBzcGFtIiwKKyAgICAgICAgICAgInJlcGxhY2UiLCAic3BhbSIsICJoYW0iLCAyKQorICAgICAgICBFUSgiaGFtLCBzcGFtLCBlZ2dzIGFuZCBzcGFtIiwgInNwYW0sIHNwYW0sIGVnZ3MgYW5kIHNwYW0iLAorICAgICAgICAgICAicmVwbGFjZSIsICJzcGFtIiwgImhhbSIsIDEpCisgICAgICAgIEVRKCJzcGFtLCBzcGFtLCBlZ2dzIGFuZCBzcGFtIiwgInNwYW0sIHNwYW0sIGVnZ3MgYW5kIHNwYW0iLAorICAgICAgICAgICAicmVwbGFjZSIsICJzcGFtIiwgImhhbSIsIDApCisKKyAgICAgICAgRVEoImJvYm9iIiwgImJvYm9ib2IiLCAicmVwbGFjZSIsICJib2JvYiIsICJib2IiKQorICAgICAgICBFUSgiYm9ib2JYYm9ib2IiLCAiYm9ib2JvYlhib2JvYm9iIiwgInJlcGxhY2UiLCAiYm9ib2IiLCAiYm9iIikKKyAgICAgICAgRVEoIkJPQk9CT0IiLCAiQk9CT0JPQiIsICJyZXBsYWNlIiwgImJvYiIsICJib2JieSIpCisKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgYmEgPSBidWZmZXIoJ2EnKQorICAgICAgICAgICAgYmIgPSBidWZmZXIoJ2InKQorICAgICAgICBFUSgiYmJjIiwgImFiYyIsICJyZXBsYWNlIiwgYmEsIGJiKQorICAgICAgICBFUSgiYWFjIiwgImFiYyIsICJyZXBsYWNlIiwgYmIsIGJhKQorCisgICAgICAgICMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmVAdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnQCcsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25ldHdvdGhyZWUnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICchJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25lQHR3b0B0aHJlZSEnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICchJywgJ0AnLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ29uZUB0d29AdGhyZWVAJywgJ29uZSF0d28hdGhyZWUhJywgJ3JlcGxhY2UnLCAnIScsICdAJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmVAdHdvQHRocmVlQCcsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnQCcsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25lIXR3byF0aHJlZSEnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICchJywgJ0AnLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ29uZUB0d29AdGhyZWVAJywgJ29uZSF0d28hdGhyZWUhJywgJ3JlcGxhY2UnLCAnIScsICdAJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmUhdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJ3gnLCAnQCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25lIXR3byF0aHJlZSEnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICd4JywgJ0AnLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJy1hLWItYy0nLCAnYWJjJywgJ3JlcGxhY2UnLCAnJywgJy0nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJy1hLWItYycsICdhYmMnLCAncmVwbGFjZScsICcnLCAnLScsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdyZXBsYWNlJywgJycsICctJywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcnLCAnJywgJ3JlcGxhY2UnLCAnJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdyZXBsYWNlJywgJ2FiJywgJy0tJywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ3JlcGxhY2UnLCAneHknLCAnLS0nKQorICAgICAgICAjIE5leHQgdGhyZWUgZm9yIFNGIGJ1ZyA0MjIwODg6IFtPU0YxIGFscGhhXSBzdHJpbmcucmVwbGFjZSgpOyBkaWVkIHdpdGgKKyAgICAgICAgIyBNZW1vcnlFcnJvciBkdWUgdG8gZW1wdHkgcmVzdWx0IChwbGF0Zm9ybSBtYWxsb2MgaXNzdWUgd2hlbiByZXF1ZXN0aW5nCisgICAgICAgICMgMCBieXRlcykuCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJywgJzEyMycsICdyZXBsYWNlJywgJzEyMycsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICcxMjMxMjMnLCAncmVwbGFjZScsICcxMjMnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd4JywgJzEyM3gxMjMnLCAncmVwbGFjZScsICcxMjMnLCAnJykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JlcGxhY2UnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JlcGxhY2UnLCA0MikKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyZXBsYWNlJywgNDIsICdoJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyZXBsYWNlJywgJ2gnLCA0MikKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Vfb3ZlcmZsb3coc2VsZik6CisgICAgICAgICMgQ2hlY2sgZm9yIG92ZXJmbG93IGNoZWNraW5nIG9uIDMyIGJpdCBtYWNoaW5lcworICAgICAgICBpZiBzeXMubWF4aW50ICE9IDIxNDc0ODM2NDcgb3Igc3RydWN0LmNhbGNzaXplKCJQIikgPiA0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIEEyXzE2ID0gIkEiICogKDIqKjE2KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKE92ZXJmbG93RXJyb3IsIEEyXzE2LCAicmVwbGFjZSIsICIiLCBBMl8xNikKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhPdmVyZmxvd0Vycm9yLCBBMl8xNiwgInJlcGxhY2UiLCAiQSIsIEEyXzE2KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKE92ZXJmbG93RXJyb3IsIEEyXzE2LCAicmVwbGFjZSIsICJBQSIsIEEyXzE2K0EyXzE2KQorCisgICAgZGVmIHRlc3RfemZpbGwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMTIzJywgJzEyMycsICd6ZmlsbCcsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMTIzJywgJzEyMycsICd6ZmlsbCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMDEyMycsICcxMjMnLCAnemZpbGwnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJysxMjMnLCAnKzEyMycsICd6ZmlsbCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnKzEyMycsICcrMTIzJywgJ3pmaWxsJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcrMDEyMycsICcrMTIzJywgJ3pmaWxsJywgNSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCctMTIzJywgJy0xMjMnLCAnemZpbGwnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJy0xMjMnLCAnLTEyMycsICd6ZmlsbCcsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnLTAxMjMnLCAnLTEyMycsICd6ZmlsbCcsIDUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMDAwJywgJycsICd6ZmlsbCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMzQnLCAnMzQnLCAnemZpbGwnLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJzAwMzQnLCAnMzQnLCAnemZpbGwnLCA0KQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnMTIzJywgJ3pmaWxsJykKKworIyBYWFggYWxpYXMgZm9yIHB5M2sgZm9yd2FyZCBjb21wYXRpYmlsaXR5CitCYXNlVGVzdCA9IENvbW1vblRlc3QKKworY2xhc3MgTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3Q6CisgICAgIyBhZGRpdGlvbmFsIHRlc3RzIHRoYXQgb25seSB3b3JrIGZvcgorICAgICMgc3RyaW5nbGlrZSBvYmplY3RzLCBpLmUuIHN0ciwgdW5pY29kZSwgVXNlclN0cmluZworICAgICMgKGJ1dCBub3QgdGhlIHN0cmluZyBtb2R1bGUpCisKKyAgICBkZWYgdGVzdF9pc2xvd2VyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICcnLCAnaXNsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYScsICdpc2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnQScsICdpc2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnXG4nLCAnaXNsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYWJjJywgJ2lzbG93ZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhQmMnLCAnaXNsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYWJjXG4nLCAnaXNsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzbG93ZXInLCA0MikKKworICAgIGRlZiB0ZXN0X2lzdXBwZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYScsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBJywgJ2lzdXBwZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdcbicsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBQkMnLCAnaXN1cHBlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ0FiQycsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBQkNcbicsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnaXN1cHBlcicsIDQyKQorCisgICAgZGVmIHRlc3RfaXN0aXRsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ1xuJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EgVGl0bGVjYXNlZCBMaW5lJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0FcblRpdGxlY2FzZWQgTGluZScsICdpc3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBIFRpdGxlY2FzZWQsIExpbmUnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ05vdCBhIGNhcGl0YWxpemVkIFN0cmluZycsICdpc3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnTm90XHRhIFRpdGxlY2FzZSBTdHJpbmcnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ05vdC0tYSBUaXRsZWNhc2UgU3RyaW5nJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdOT1QnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzdGl0bGUnLCA0MikKKworICAgIGRlZiB0ZXN0X2lzc3BhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc3NwYWNlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYScsICdpc3NwYWNlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICcgJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ1x0JywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ1xyJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ1xuJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJyBcdFxyXG4nLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJyBcdFxyXG5hJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdpc3NwYWNlJywgNDIpCisKKyAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICcnLCAnaXNhbHBoYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYScsICdpc2FscGhhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBJywgJ2lzYWxwaGEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdcbicsICdpc2FscGhhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhYmMnLCAnaXNhbHBoYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2FCYzEyMycsICdpc2FscGhhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYWJjXG4nLCAnaXNhbHBoYScpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzYWxwaGEnLCA0MikKKworICAgIGRlZiB0ZXN0X2lzYWxudW0oc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhJywgJ2lzYWxudW0nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EnLCAnaXNhbG51bScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ1xuJywgJ2lzYWxudW0nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJzEyM2FiYzQ1NicsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhMWIzYycsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYUJjMDAwICcsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYWJjXG4nLCAnaXNhbG51bScpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzYWxudW0nLCA0MikKKworICAgIGRlZiB0ZXN0X2lzZGlnaXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc2RpZ2l0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYScsICdpc2RpZ2l0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICcwJywgJ2lzZGlnaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJzAxMjM0NTY3ODknLCAnaXNkaWdpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJzAxMjM0NTY3ODlhJywgJ2lzZGlnaXQnKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzZGlnaXQnLCA0MikKKworICAgIGRlZiB0ZXN0X3RpdGxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyBIZWxsbyAnLCAnIGhlbGxvICcsICd0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnSGVsbG8gJywgJ2hlbGxvICcsICd0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnSGVsbG8gJywgJ0hlbGxvICcsICd0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnRm9ybWF0IFRoaXMgQXMgVGl0bGUgU3RyaW5nJywgImZPck1hVCB0aElzIGFTIHRpdExlIFN0cmluZyIsICd0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnRm9ybWF0LFRoaXMtQXMqVGl0bGU7U3RyaW5nJywgImZPck1hVCx0aElzLWFTKnRpdExlO1N0cmluZyIsICd0aXRsZScsICkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdHZXRpbnQnLCAiZ2V0SW50IiwgJ3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICd0aXRsZScsIDQyKQorCisgICAgZGVmIHRlc3Rfc3BsaXRsaW5lcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWJjJywgJ2RlZicsICcnLCAnZ2hpJ10sICJhYmNcbmRlZlxuXHJnaGkiLCAnc3BsaXRsaW5lcycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FiYycsICdkZWYnLCAnJywgJ2doaSddLCAiYWJjXG5kZWZcblxyXG5naGkiLCAnc3BsaXRsaW5lcycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FiYycsICdkZWYnLCAnZ2hpJ10sICJhYmNcbmRlZlxyXG5naGkiLCAnc3BsaXRsaW5lcycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FiYycsICdkZWYnLCAnZ2hpJ10sICJhYmNcbmRlZlxyXG5naGlcbiIsICdzcGxpdGxpbmVzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWJjJywgJ2RlZicsICdnaGknLCAnJ10sICJhYmNcbmRlZlxyXG5naGlcblxyIiwgJ3NwbGl0bGluZXMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnYWJjJywgJ2RlZicsICdnaGknLCAnJ10sICJcbmFiY1xuZGVmXHJcbmdoaVxuXHIiLCAnc3BsaXRsaW5lcycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ1xuJywgJ2FiY1xuJywgJ2RlZlxyXG4nLCAnZ2hpXG4nLCAnXHInXSwgIlxuYWJjXG5kZWZcclxuZ2hpXG5cciIsICdzcGxpdGxpbmVzJywgMSkKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdzcGxpdGxpbmVzJywgNDIsIDQyKQorCisgICAgZGVmIHRlc3Rfc3RhcnRzd2l0aChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdoZWxsbyB3b3JsZCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2VsbG8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnZWxsbycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdvJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdvJywgNSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJycsIDUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnbG8nLCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnc3RhcnRzd2l0aCcsICdsb3dvJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ3N0YXJ0c3dpdGgnLCAnbG93bycsIDMsIDcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnc3RhcnRzd2l0aCcsICdsb3dvJywgMywgNikKKworICAgICAgICAjIHRlc3QgbmVnYXRpdmUgaW5kaWNlcworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnaGUnLCAwLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlJywgLTUzLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdoZWxsbycsIDAsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlbGxvIHdvcmxkJywgLTEsIC0xMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdlbGxvJywgLTUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdlbGxvJywgLTQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnbycsIC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnbycsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnJywgLTMsIC0zKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2xvJywgLTkpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdzdGFydHN3aXRoJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdzdGFydHN3aXRoJywgNDIpCisKKyAgICAgICAgIyB0ZXN0IHR1cGxlIGFyZ3VtZW50cworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAoJ2hlJywgJ2hhJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAoJ2xvJywgJ2xsbycpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAoJ2hlbGxveCcsICdoZWxsbycpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgKCkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdzdGFydHN3aXRoJywgKCdoZWxsb3dvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JsZCcsICdsb3dvJyksIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnc3RhcnRzd2l0aCcsICgnaGVsbG93bycsICdlbGxvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdybGQnKSwgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgKCdsbycsICdoZScpLCAwLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICgnaGUnLCAnaGVsJyksIDAsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICgnaGUnLCAnaGVsJyksIDAsIDIpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdzdGFydHN3aXRoJywgKDQyLCkpCisKKyAgICBkZWYgdGVzdF9lbmRzd2l0aChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICdsbycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgJ2hlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdlbmRzd2l0aCcsICdoZWxsbyB3b3JsZCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnd29ybCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICd3b3JsJywgMywgOSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ3dvcmxkJywgMywgMTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgMSwgNykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAyLCA3KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIDMsIDcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIDQsIDcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIDMsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2FiJywgJ2VuZHN3aXRoJywgJ2FiJywgMCwgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYWInLCAnZW5kc3dpdGgnLCAnYWInLCAwLCAwKQorCisgICAgICAgICMgdGVzdCBuZWdhdGl2ZSBpbmRpY2VzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAnbG8nLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAnaGUnLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICcnLCAtMywgLTMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgJ2hlbGxvIHdvcmxkJywgLTEwLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICd3b3JsJywgLTYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICd3b3JsJywgLTUsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnd29ybCcsIC01LCA5KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnd29ybGQnLCAtNywgMTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgLTk5LCAtMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAtOCwgLTMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgLTcsIC0zKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAzLCAtNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgLTgsIC0yKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZW5kc3dpdGgnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgNDIpCisKKyAgICAgICAgIyB0ZXN0IHR1cGxlIGFyZ3VtZW50cworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdlbmRzd2l0aCcsICgnaGUnLCAnaGEnKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICgnbG8nLCAnbGxvJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAoJ2hlbGxveCcsICdoZWxsbycpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdlbmRzd2l0aCcsICgpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAoJ2hlbGxvd28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmxkJywgJ2xvd28nKSwgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICgnaGVsbG93bycsICdlbGxvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdybGQnKSwgMywgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAoJ2hlbGwnLCAnZWxsJyksIDAsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdlbmRzd2l0aCcsICgnaGUnLCAnaGVsJyksIDAsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAoJ2hlJywgJ2hlbGwnKSwgMCwgNCkKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgKDQyLCkpCisKKyAgICBkZWYgdGVzdF9fX2NvbnRhaW5zX18oc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnJywgJ19fY29udGFpbnNfXycsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2FiYycsICdfX2NvbnRhaW5zX18nLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYWJjJywgJ19fY29udGFpbnNfXycsICdcMCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnXDBhYmMnLCAnX19jb250YWluc19fJywgJ1wwJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhYmNcMCcsICdfX2NvbnRhaW5zX18nLCAnXDAnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ1wwYWJjJywgJ19fY29udGFpbnNfXycsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhc2RmJywgJ19fY29udGFpbnNfXycsICdhc2RmJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYXNkJywgJ19fY29udGFpbnNfXycsICdhc2RmJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnJywgJ19fY29udGFpbnNfXycsICdhc2RmJykKKworICAgIGRlZiB0ZXN0X3N1YnNjcmlwdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnYScsICdhYmMnLCAnX19nZXRpdGVtX18nLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSdjJywgJ2FiYycsICdfX2dldGl0ZW1fXycsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSdhJywgJ2FiYycsICdfX2dldGl0ZW1fXycsIDBMKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSdhYmMnLCAnYWJjJywgJ19fZ2V0aXRlbV9fJywgc2xpY2UoMCwgMykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J2FiYycsICdhYmMnLCAnX19nZXRpdGVtX18nLCBzbGljZSgwLCAxMDAwKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnYScsICdhYmMnLCAnX19nZXRpdGVtX18nLCBzbGljZSgwLCAxKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnJywgJ2FiYycsICdfX2dldGl0ZW1fXycsIHNsaWNlKDAsIDApKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ19fZ2V0aXRlbV9fJywgJ2RlZicpCisKKyAgICBkZWYgdGVzdF9zbGljZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDAsIDEwMDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdfX2dldHNsaWNlX18nLCAwLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiJywgJ2FiYycsICdfX2dldHNsaWNlX18nLCAwLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2JjJywgJ2FiYycsICdfX2dldHNsaWNlX18nLCAxLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2InLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDEsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJywgJ2FiYycsICdfX2dldHNsaWNlX18nLCAyLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICdhYmMnLCAnX19nZXRzbGljZV9fJywgMTAwMCwgMTAwMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDIwMDAsIDEwMDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJywgJ2FiYycsICdfX2dldHNsaWNlX18nLCAyLCAxKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsICdkZWYnKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBleHRlbmRlZCBzbGljaW5nIGJ5IGNvbXBhcmluZyB3aXRoIGxpc3Qgc2xpY2luZy4KKyAgICAgICAgcyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cworICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDQxLCAtMSwgLTIsIC0zNykKKyAgICAgICAgZm9yIHN0YXJ0IGluIGluZGljZXM6CisgICAgICAgICAgICBmb3Igc3RvcCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgICAgICMgU2tpcCBzdGVwIDAgKGludmFsaWQpCisgICAgICAgICAgICAgICAgZm9yIHN0ZXAgaW4gaW5kaWNlc1sxOl06CisgICAgICAgICAgICAgICAgICAgIEwgPSBsaXN0KHMpW3N0YXJ0OnN0b3A6c3RlcF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUiIi5qb2luKEwpLCBzLCAnX19nZXRpdGVtX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2Uoc3RhcnQsIHN0b3AsIHN0ZXApKQorCisgICAgZGVmIHRlc3RfbXVsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICdhYmMnLCAnX19tdWxfXycsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICdhYmMnLCAnX19tdWxfXycsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdfX211bF9fJywgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNhYmNhYmMnLCAnYWJjJywgJ19fbXVsX18nLCAzKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdfX211bF9fJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnX19tdWxfXycsICcnKQorICAgICAgICAjIFhYWDogb24gYSA2NC1iaXQgc3lzdGVtLCB0aGlzIGRvZXNuJ3QgcmFpc2UgYW4gb3ZlcmZsb3cgZXJyb3IsCisgICAgICAgICMgYnV0IGVpdGhlciByYWlzZXMgYSBNZW1vcnlFcnJvciwgb3Igc3VjY2VlZHMgKGlmIHlvdSBoYXZlIDU0VGlCKQorICAgICAgICAjc2VsZi5jaGVja3JhaXNlcyhPdmVyZmxvd0Vycm9yLCAxMDAwMConYWJjJywgJ19fbXVsX18nLCAyMDAwMDAwMDAwKQorCisgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgIyBqb2luIG5vdyB3b3JrcyB3aXRoIGFueSBzZXF1ZW5jZSB0eXBlCisgICAgICAgICMgbW92ZWQgaGVyZSwgYmVjYXVzZSB0aGUgYXJndW1lbnQgb3JkZXIgaXMKKyAgICAgICAgIyBkaWZmZXJlbnQgaW4gc3RyaW5nLmpvaW4gKHNlZSB0aGUgdGVzdCBpbgorICAgICAgICAjIHRlc3QudGVzdF9zdHJpbmcuU3RyaW5nVGVzdC50ZXN0X2pvaW4pCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYSBiIGMgZCcsICcgJywgJ2pvaW4nLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNkJywgJycsICdqb2luJywgKCdhJywgJ2InLCAnYycsICdkJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYmQnLCAnJywgJ2pvaW4nLCAoJycsICdiJywgJycsICdkJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWMnLCAnJywgJ2pvaW4nLCAoJ2EnLCAnJywgJ2MnLCAnJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgndyB4IHkgeicsICcgJywgJ2pvaW4nLCBTZXF1ZW5jZSgpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhJywgJ2pvaW4nLCAoJ2FiYycsKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd6JywgJ2EnLCAnam9pbicsIFVzZXJMaXN0KFsneiddKSkKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdhLmIuYycpLCB1bmljb2RlKCcuJyksICdqb2luJywgWydhJywgJ2InLCAnYyddKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2EuYi5jJyksICcuJywgJ2pvaW4nLCBbdW5pY29kZSgnYScpLCAnYicsICdjJ10pCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnYS5iLmMnKSwgJy4nLCAnam9pbicsIFsnYScsIHVuaWNvZGUoJ2InKSwgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdhLmIuYycpLCAnLicsICdqb2luJywgWydhJywgJ2InLCB1bmljb2RlKCdjJyldKQorICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcuJywgJ2pvaW4nLCBbJ2EnLCB1bmljb2RlKCdiJyksIDNdKQorICAgICAgICBmb3IgaSBpbiBbNSwgMjUsIDEyNV06CisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCgoJ2EnICogaSkgKyAnLScpICogaSlbOi0xXSwgJy0nLCAnam9pbicsCisgICAgICAgICAgICAgICAgIFsnYScgKiBpXSAqIGkpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCgoJ2EnICogaSkgKyAnLScpICogaSlbOi0xXSwgJy0nLCAnam9pbicsCisgICAgICAgICAgICAgICAgICgnYScgKiBpLCkgKiBpKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnICcsICdqb2luJywgQmFkU2VxMSgpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2EgYiBjJywgJyAnLCAnam9pbicsIEJhZFNlcTIoKSkKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyAnLCAnam9pbicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnICcsICdqb2luJywgNykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcgJywgJ2pvaW4nLCBTZXF1ZW5jZShbNywgJ2hlbGxvJywgMTIzTF0pKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHlpZWxkIDQgKyAiIgorICAgICAgICAgICAgc2VsZi5maXh0eXBlKCcgJykuam9pbihmKCkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6CisgICAgICAgICAgICBpZiAnKycgbm90IGluIHN0cihlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2pvaW4oKSBhdGUgZXhjZXB0aW9uIG1lc3NhZ2UnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdleGNlcHRpb24gbm90IHJhaXNlZCcpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJytoZWxsbysnLCAnKyVzKycsICdfX21vZF9fJywgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcrMTArJywgJyslZCsnLCAnX19tb2RfXycsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2EnLCAiJWMiLCAnX19tb2RfXycsICJhIikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhJywgIiVjIiwgJ19fbW9kX18nLCAiYSIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnIicsICIlYyIsICdfX21vZF9fJywgMzQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJCcsICIlYyIsICdfX21vZF9fJywgMzYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMTAnLCAiJWQiLCAnX19tb2RfXycsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ1x4N2YnLCAiJWMiLCAnX19tb2RfXycsIDB4N2YpCisKKyAgICAgICAgZm9yIG9yZGluYWwgaW4gKC0xMDAsIDB4MjAwMDAwKToKKyAgICAgICAgICAgICMgdW5pY29kZSByYWlzZXMgVmFsdWVFcnJvciwgc3RyIHJhaXNlcyBPdmVyZmxvd0Vycm9yCisgICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSwgJyVjJywgJ19fbW9kX18nLCBvcmRpbmFsKQorCisgICAgICAgIGxvbmd2YWx1ZSA9IHN5cy5tYXhpbnQgKyAxMEwKKyAgICAgICAgc2xvbmd2YWx1ZSA9IHN0cihsb25ndmFsdWUpCisgICAgICAgIGlmIHNsb25ndmFsdWVbLTFdIGluICgiTCIsImwiKTogc2xvbmd2YWx1ZSA9IHNsb25ndmFsdWVbOi0xXQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyA0MicsICclM2xkJywgJ19fbW9kX18nLCA0MikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCc0MicsICclZCcsICdfX21vZF9fJywgNDJMKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJzQyJywgJyVkJywgJ19fbW9kX18nLCA0Mi4wKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoc2xvbmd2YWx1ZSwgJyVkJywgJ19fbW9kX18nLCBsb25ndmFsdWUpCisgICAgICAgIHNlbGYuY2hlY2tjYWxsKCclZCcsICdfX21vZF9fJywgZmxvYXQobG9uZ3ZhbHVlKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcwMDQyLjAwJywgJyUwNy4yZicsICdfX21vZF9fJywgNDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMDA0Mi4wMCcsICclMDcuMkYnLCAnX19tb2RfXycsIDQyKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ19fbW9kX18nKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyUoZm9vKXMnLCAnX19tb2RfXycsIDQyKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVzJXMnLCAnX19tb2RfXycsICg0MiwpKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVjJywgJ19fbW9kX18nLCAoTm9uZSwpKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICclKGZvbycsICdfX21vZF9fJywge30pCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJShmb28pcyAlKGJhcilzJywgJ19fbW9kX18nLCAoJ2ZvbycsIDQyKSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclZCcsICdfX21vZF9fJywgIjQyIikgIyBub3QgbnVtZXJpYworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVkJywgJ19fbW9kX18nLCAoNDIrMGopKSAjIG5vIGludC9sb25nIGNvbnZlcnNpb24gcHJvdmlkZWQKKworICAgICAgICAjIGFyZ3VtZW50IG5hbWVzIHdpdGggcHJvcGVybHkgbmVzdGVkIGJyYWNrZXRzIGFyZSBzdXBwb3J0ZWQKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdiYXInLCAnJSgoZm9vKSlzJywgJ19fbW9kX18nLCB7Jyhmb28pJzogJ2Jhcid9KQorCisgICAgICAgICMgMTAwIGlzIGEgbWFnaWMgbnVtYmVyIGluIFB5VW5pY29kZV9Gb3JtYXQsIHRoaXMgZm9yY2VzIGEgcmVzaXplCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMDMqJ2EnKyd4JywgJyVzeCcsICdfX21vZF9fJywgMTAzKidhJykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyUqcycsICdfX21vZF9fJywgKCdmb28nLCAnYmFyJykpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJTEwLipmJywgJ19fbW9kX18nLCAoJ2ZvbycsIDQyLikpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJyUxMCcsICdfX21vZF9fJywgKDQyLCkpCisKKyAgICAgICAgd2lkdGggPSBpbnQoX3Rlc3RjYXBpLlBZX1NTSVpFX1RfTUFYICsgMSkKKyAgICAgICAgaWYgd2lkdGggPD0gc3lzLm1heGludDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwgJyUqcycsICdfX21vZF9fJywgKHdpZHRoLCAnJykpCisgICAgICAgIHByZWMgPSBpbnQoX3Rlc3RjYXBpLklOVF9NQVggKyAxKQorICAgICAgICBpZiBwcmVjIDw9IHN5cy5tYXhpbnQ6CisgICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKE92ZXJmbG93RXJyb3IsICclLipmJywgJ19fbW9kX18nLCAocHJlYywgMS4gLyA3KSkKKyAgICAgICAgIyBJc3N1ZSAxNTk4OQorICAgICAgICB3aWR0aCA9IGludCgxIDw8IChfdGVzdGNhcGkuUFlfU1NJWkVfVF9NQVguYml0X2xlbmd0aCgpICsgMSkpCisgICAgICAgIGlmIHdpZHRoIDw9IHN5cy5tYXhpbnQ6CisgICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKE92ZXJmbG93RXJyb3IsICclKnMnLCAnX19tb2RfXycsICh3aWR0aCwgJycpKQorICAgICAgICBwcmVjID0gaW50KF90ZXN0Y2FwaS5VSU5UX01BWCArIDEpCisgICAgICAgIGlmIHByZWMgPD0gc3lzLm1heGludDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwgJyUuKmYnLCAnX19tb2RfXycsIChwcmVjLCAxLiAvIDcpKQorCisgICAgICAgIGNsYXNzIFgob2JqZWN0KTogcGFzcworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdfX21vZF9fJywgWCgpKQorICAgICAgICBjbGFzcyBYKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgayk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGsKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdtZWxvbiBhcHBsZScsICclKG1lbG9uKXMgJShhcHBsZSlzJywgJ19fbW9kX18nLCBYKCkpCisKKyAgICBkZWYgdGVzdF9mbG9hdGZvcm1hdHRpbmcoc2VsZik6CisgICAgICAgICMgZmxvYXQgZm9ybWF0dGluZworICAgICAgICBmb3IgcHJlYyBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgIGZvcm1hdCA9ICclJS4laWYnICUgcHJlYworICAgICAgICAgICAgdmFsdWUgPSAwLjAxCisgICAgICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoNjApOgorICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAzLjE0MTU5MjY1MzU5IC8gMy4wICogMTAuMAorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tjYWxsKGZvcm1hdCwgIl9fbW9kX18iLCB2YWx1ZSkKKworICAgIGRlZiB0ZXN0X2lucGxhY2VfcmV3cml0ZXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBzdHJpbmdzIGRvbid0IGNvcHkgYW5kIG1vZGlmeSBjYWNoZWQgc2luZ2xlLWNoYXJhY3RlciBzdHJpbmdzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYScsICdBJywgJ2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBJywgJ2lzdXBwZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0EnLCAnYScsICd1cHBlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYScsICdpc2xvd2VyJykKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2EnLCAnQScsICdyZXBsYWNlJywgJ0EnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnQScsICdpc3VwcGVyJykKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0EnLCAnYScsICdjYXBpdGFsaXplJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhJywgJ2lzbG93ZXInKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnQScsICdhJywgJ3N3YXBjYXNlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhJywgJ2lzbG93ZXInKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnQScsICdhJywgJ3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhJywgJ2lzbG93ZXInKQorCisgICAgZGVmIHRlc3RfcGFydGl0aW9uKHNlbGYpOgorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoJ3RoaXMgaXMgdGhlIHBhcicsICd0aScsICd0aW9uIG1ldGhvZCcpLAorICAgICAgICAgICAgJ3RoaXMgaXMgdGhlIHBhcnRpdGlvbiBtZXRob2QnLCAncGFydGl0aW9uJywgJ3RpJykKKworICAgICAgICAjIGZyb20gcmF5bW9uZCdzIG9yaWdpbmFsIHNwZWNpZmljYXRpb24KKyAgICAgICAgUyA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcnCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoJ2h0dHAnLCAnOi8vJywgJ3d3dy5weXRob24ub3JnJyksIFMsICdwYXJ0aXRpb24nLCAnOi8vJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnaHR0cDovL3d3dy5weXRob24ub3JnJywgJycsICcnKSwgUywgJ3BhcnRpdGlvbicsICc/JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnJywgJ2h0dHA6Ly8nLCAnd3d3LnB5dGhvbi5vcmcnKSwgUywgJ3BhcnRpdGlvbicsICdodHRwOi8vJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnaHR0cDovL3d3dy5weXRob24uJywgJ29yZycsICcnKSwgUywgJ3BhcnRpdGlvbicsICdvcmcnKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgUywgJ3BhcnRpdGlvbicsICcnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgUywgJ3BhcnRpdGlvbicsIE5vbmUpCisKKyAgICAgICAgIyBtaXhlZCB1c2Ugb2Ygc3RyIGFuZCB1bmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2EvYi9jJy5wYXJ0aXRpb24odScvJyksICgnYScsICcvJywgJ2IvYycpKQorCisgICAgZGVmIHRlc3RfcnBhcnRpdGlvbihzZWxmKToKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCd0aGlzIGlzIHRoZSBycGFydGknLCAndGknLCAnb24gbWV0aG9kJyksCisgICAgICAgICAgICAndGhpcyBpcyB0aGUgcnBhcnRpdGlvbiBtZXRob2QnLCAncnBhcnRpdGlvbicsICd0aScpCisKKyAgICAgICAgIyBmcm9tIHJheW1vbmQncyBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uCisgICAgICAgIFMgPSAnaHR0cDovL3d3dy5weXRob24ub3JnJworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCdodHRwJywgJzovLycsICd3d3cucHl0aG9uLm9yZycpLCBTLCAncnBhcnRpdGlvbicsICc6Ly8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCcnLCAnJywgJ2h0dHA6Ly93d3cucHl0aG9uLm9yZycpLCBTLCAncnBhcnRpdGlvbicsICc/JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnJywgJ2h0dHA6Ly8nLCAnd3d3LnB5dGhvbi5vcmcnKSwgUywgJ3JwYXJ0aXRpb24nLCAnaHR0cDovLycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoJ2h0dHA6Ly93d3cucHl0aG9uLicsICdvcmcnLCAnJyksIFMsICdycGFydGl0aW9uJywgJ29yZycpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCBTLCAncnBhcnRpdGlvbicsICcnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgUywgJ3JwYXJ0aXRpb24nLCBOb25lKQorCisgICAgICAgICMgbWl4ZWQgdXNlIG9mIHN0ciBhbmQgdW5pY29kZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhL2IvYycucnBhcnRpdGlvbih1Jy8nKSwgKCdhL2InLCAnLycsICdjJykpCisKKyAgICBkZWYgdGVzdF9ub25lX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBpc3N1ZSAxMTgyOAorICAgICAgICBzID0gJ2hlbGxvJworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMiwgcywgJ2ZpbmQnLCAnbCcsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCBzLCAnZmluZCcsICdsJywgLTIsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgyLCBzLCAnZmluZCcsICdsJywgTm9uZSwgLTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCBzLCAnZmluZCcsICdoJywgTm9uZSwgTm9uZSkKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgcywgJ3JmaW5kJywgJ2wnLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgcywgJ3JmaW5kJywgJ2wnLCAtMiwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDIsIHMsICdyZmluZCcsICdsJywgTm9uZSwgLTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCBzLCAncmZpbmQnLCAnaCcsIE5vbmUsIE5vbmUpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDIsIHMsICdpbmRleCcsICdsJywgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsIHMsICdpbmRleCcsICdsJywgLTIsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgyLCBzLCAnaW5kZXgnLCAnbCcsIE5vbmUsIC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgcywgJ2luZGV4JywgJ2gnLCBOb25lLCBOb25lKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCBzLCAncmluZGV4JywgJ2wnLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgcywgJ3JpbmRleCcsICdsJywgLTIsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgyLCBzLCAncmluZGV4JywgJ2wnLCBOb25lLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsIHMsICdyaW5kZXgnLCAnaCcsIE5vbmUsIE5vbmUpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDIsIHMsICdjb3VudCcsICdsJywgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEsIHMsICdjb3VudCcsICdsJywgLTIsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxLCBzLCAnY291bnQnLCAnbCcsIE5vbmUsIC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgcywgJ2NvdW50JywgJ3gnLCBOb25lLCBOb25lKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCBzLCAnZW5kc3dpdGgnLCAnbycsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCBzLCAnZW5kc3dpdGgnLCAnbG8nLCAtMiwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsIHMsICdlbmRzd2l0aCcsICdsJywgTm9uZSwgLTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgcywgJ2VuZHN3aXRoJywgJ3gnLCBOb25lLCBOb25lKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCBzLCAnc3RhcnRzd2l0aCcsICdoJywgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsIHMsICdzdGFydHN3aXRoJywgJ2wnLCAtMiwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsIHMsICdzdGFydHN3aXRoJywgJ2gnLCBOb25lLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCBzLCAnc3RhcnRzd2l0aCcsICd4JywgTm9uZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZXRjX3JhaXNlX2NvcnJlY3RfZXJyb3JfbWVzc2FnZXMoc2VsZik6CisgICAgICAgICMgaXNzdWUgMTE4MjgKKyAgICAgICAgcyA9ICdoZWxsbycKKyAgICAgICAgeCA9ICd4JworICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJmaW5kXGInLCBzLmZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYnJmaW5kXGInLCBzLnJmaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJpbmRleFxiJywgcy5pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1xicmluZGV4XGInLCBzLnJpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ15jb3VudFwoJywgcy5jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ15zdGFydHN3aXRoXCgnLCBzLnN0YXJ0c3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcideZW5kc3dpdGhcKCcsIHMuZW5kc3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCisKK2NsYXNzIE1peGluU3RyU3RyaW5nVXNlclN0cmluZ1Rlc3Q6CisgICAgIyBBZGRpdGlvbmFsIHRlc3RzIGZvciA4Yml0IHN0cmluZ3MsIGkuZS4gc3RyLCBVc2VyU3RyaW5nIGFuZAorICAgICMgdGhlIHN0cmluZyBtb2R1bGUKKworICAgIGRlZiB0ZXN0X21ha2V0cmFucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgJycuam9pbihtYXAoY2hyLCB4cmFuZ2UoMjU2KSkpLnJlcGxhY2UoJ2FiYycsICd4eXonKSwKKyAgICAgICAgICAgc3RyaW5nLm1ha2V0cmFucygnYWJjJywgJ3h5eicpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLm1ha2V0cmFucywgJ2FiYycsICd4eXp3JykKKworICAgIGRlZiB0ZXN0X3RyYW5zbGF0ZShzZWxmKToKKyAgICAgICAgdGFibGUgPSBzdHJpbmcubWFrZXRyYW5zKCdhYmMnLCAneHl6JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd4eXp4eXonLCAneHl6YWJjZGVmJywgJ3RyYW5zbGF0ZScsIHRhYmxlLCAnZGVmJykKKworICAgICAgICB0YWJsZSA9IHN0cmluZy5tYWtldHJhbnMoJ2EnLCAnQScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnQWJjJywgJ2FiYycsICd0cmFuc2xhdGUnLCB0YWJsZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd4eXonLCAneHl6JywgJ3RyYW5zbGF0ZScsIHRhYmxlKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3l6JywgJ3h5eicsICd0cmFuc2xhdGUnLCB0YWJsZSwgJ3gnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3l4JywgJ3p5enp4JywgJ3RyYW5zbGF0ZScsIE5vbmUsICd6JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd6eXp6eCcsICd6eXp6eCcsICd0cmFuc2xhdGUnLCBOb25lLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd6eXp6eCcsICd6eXp6eCcsICd0cmFuc2xhdGUnLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICd4eXonLCAndHJhbnNsYXRlJywgJ3RvbyBzaG9ydCcsICdzdHJpcCcpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ3h5eicsICd0cmFuc2xhdGUnLCAndG9vIHNob3J0JykKKworCitjbGFzcyBNaXhpblN0clVzZXJTdHJpbmdUZXN0OgorICAgICMgQWRkaXRpb25hbCB0ZXN0cyB0aGF0IG9ubHkgd29yayB3aXRoCisgICAgIyA4Yml0IGNvbXBhdGlibGUgb2JqZWN0LCBpLmUuIHN0ciBhbmQgVXNlclN0cmluZworCisgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgZGVmIHRlc3RfZW5jb2RpbmdfZGVjb2Rpbmcoc2VsZik6CisgICAgICAgICAgICBjb2RlY3MgPSBbKCdyb3QxMycsICd1cnl5YiBqYmV5cScpLAorICAgICAgICAgICAgICAgICAgICAgICgnYmFzZTY0JywgJ2FHVnNiRzhnZDI5eWJHUT1cbicpLAorICAgICAgICAgICAgICAgICAgICAgICgnaGV4JywgJzY4NjU2YzZjNmYyMDc3NmY3MjZjNjQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJ3V1JywgJ2JlZ2luIDY2NiA8ZGF0YT5cbis6JjVMOyZcXEA9Vl1SOyYwIFxuIFxuZW5kXG4nKV0KKyAgICAgICAgICAgIGZvciBlbmNvZGluZywgZGF0YSBpbiBjb2RlY3M6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKGRhdGEsICdoZWxsbyB3b3JsZCcsICdlbmNvZGUnLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvIHdvcmxkJywgZGF0YSwgJ2RlY29kZScsIGVuY29kaW5nKQorICAgICAgICAgICAgIyB6bGliIGlzIG9wdGlvbmFsLCBzbyB3ZSBtYWtlIHRoZSB0ZXN0IG9wdGlvbmFsIHRvby4uLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCB6bGliCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0gJ3hceDljXHhjYkhceGNkXHhjOVx4YzlXKFx4Y2YvXHhjYUlceDAxXHgwMFx4MWFceDBiXHgwNF0nCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKGRhdGEsICdoZWxsbyB3b3JsZCcsICdlbmNvZGUnLCAnemxpYicpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbyB3b3JsZCcsIGRhdGEsICdkZWNvZGUnLCAnemxpYicpCisKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAneHl6JywgJ2RlY29kZScsIDQyKQorICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICd4eXonLCAnZW5jb2RlJywgNDIpCisKKworY2xhc3MgTWl4aW5TdHJVbmljb2RlVGVzdDoKKyAgICAjIEFkZGl0aW9uYWwgdGVzdHMgdGhhdCBvbmx5IHdvcmsgd2l0aCBzdHIgYW5kIHVuaWNvZGUuCisKKyAgICBkZWYgdGVzdF9idWcxMDAxMDExKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBqb2luIHJldHVybnMgYSBORVcgb2JqZWN0IGZvciBzaW5nbGUgaXRlbSBzZXF1ZW5jZXMKKyAgICAgICAgIyBpbnZvbHZpbmcgYSBzdWJjbGFzcy4KKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBpdCBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KKyAgICAgICAgIyBDaGVjayB0aGUgb3B0aW1pc2F0aW9uIHN0aWxsIG9jY3VycyBmb3Igc3RhbmRhcmQgb2JqZWN0cy4KKyAgICAgICAgdCA9IHNlbGYudHlwZTJ0ZXN0CisgICAgICAgIGNsYXNzIHN1YmNsYXNzKHQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzMSA9IHN1YmNsYXNzKCJhYmNkIikKKyAgICAgICAgczIgPSB0KCkuam9pbihbczFdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoczEgaXMgbm90IHMyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzMikgaXMgdCkKKworICAgICAgICBzMSA9IHQoImFiY2QiKQorICAgICAgICBzMiA9IHQoKS5qb2luKFtzMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBzMikKKworICAgICAgICAjIFNob3VsZCBhbHNvIHRlc3QgbWl4ZWQtdHlwZSBqb2luLgorICAgICAgICBpZiB0IGlzIHVuaWNvZGU6CisgICAgICAgICAgICBzMSA9IHN1YmNsYXNzKCJhYmNkIikKKyAgICAgICAgICAgIHMyID0gIiIuam9pbihbczFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyB0KQorCisgICAgICAgICAgICBzMSA9IHQoImFiY2QiKQorICAgICAgICAgICAgczIgPSAiIi5qb2luKFtzMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczEgaXMgczIpCisKKyAgICAgICAgZWxpZiB0IGlzIHN0cjoKKyAgICAgICAgICAgIHMxID0gc3ViY2xhc3MoImFiY2QiKQorICAgICAgICAgICAgczIgPSB1IiIuam9pbihbczFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyB1bmljb2RlKSAjIHByb21vdGVzIQorCisgICAgICAgICAgICBzMSA9IHQoImFiY2QiKQorICAgICAgICAgICAgczIgPSB1IiIuam9pbihbczFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyB1bmljb2RlKSAjIHByb21vdGVzIQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgdHlwZSBmb3IgTWl4aW5TdHJVbmljb2RlVGVzdCAlciIgJSB0KQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL3NpZ2NoaWxkX2lnbm9yZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9zaWdjaGlsZF9pZ25vcmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzMjBmYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9zaWdjaGlsZF9pZ25vcmUucHkKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IHNpZ25hbCwgc3VicHJvY2Vzcywgc3lzLCB0aW1lCisjIE9uIExpbnV4IHRoaXMgY2F1c2VzIG9zLndhaXRwaWQgdG8gZmFpbCB3aXRoIE9TRXJyb3IgYXMgdGhlIE9TIGhhcyBhbHJlYWR5CisjIHJlYXBlZCBvdXIgY2hpbGQgcHJvY2Vzcy4gIFRoZSB3YWl0KCkgcGFzc2luZyB0aGUgT1NFcnJvciBvbiB0byB0aGUgY2FsbGVyCisjIGFuZCBjYXVzaW5nIHVzIHRvIGV4aXQgd2l0aCBhbiBlcnJvciBpcyB3aGF0IHdlIGFyZSB0ZXN0aW5nIGFnYWluc3QuCitzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzaWduYWwuU0lHX0lHTikKK3N1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAncHJpbnQoImFsYmF0cm9zcyIpJ10pLndhaXQoKQorIyBBbHNvIGVuc3VyZSBwb2xsKCkgaGFuZGxlcyBhbiBlcnJuby5FQ0hJTEQgYXBwcm9wcmlhdGVseS4KK3AgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3ByaW50KCJhbGJhdHJvc3MiKSddKQorbnVtX3BvbGxzID0gMAord2hpbGUgcC5wb2xsKCkgaXMgTm9uZToKKyAgICAjIFdhaXRpbmcgZm9yIHRoZSBwcm9jZXNzIHRvIGZpbmlzaC4KKyAgICB0aW1lLnNsZWVwKDAuMDEpICAjIEF2b2lkIGJlaW5nIGEgQ1BVIGJ1c3kgbG9vcC4KKyAgICBudW1fcG9sbHMgKz0gMQorICAgIGlmIG51bV9wb2xscyA+IDMwMDA6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncG9sbCBzaG91bGQgaGF2ZSByZXR1cm5lZCAwIHdpdGhpbiAzMCBzZWNvbmRzJykKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9zeW1saW5rX3N1cHBvcnQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvc3ltbGlua19zdXBwb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMWQwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvc3ltbGlua19zdXBwb3J0LnB5CkBAIC0wLDAgKzEsMTAwIEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHBsYXRmb3JtCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTgorCitkZWYgY2FuX3N5bWxpbmsoKToKKyAgICAjIGNhY2hlIHRoZSByZXN1bHQgaW4gY2FuX3N5bWxpbmsucHJldl92YWwKKyAgICBwcmV2X3ZhbCA9IGdldGF0dHIoY2FuX3N5bWxpbmssICdwcmV2X3ZhbCcsIE5vbmUpCisgICAgaWYgcHJldl92YWwgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBwcmV2X3ZhbAorICAgIHN5bWxpbmtfcGF0aCA9IFRFU1RGTiArICJjYW5fc3ltbGluayIKKyAgICB0cnk6CisgICAgICAgIHN5bWxpbmsoVEVTVEZOLCBzeW1saW5rX3BhdGgpCisgICAgICAgIGNhbiA9IFRydWUKKyAgICBleGNlcHQgKE9TRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgY2FuID0gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICBvcy5yZW1vdmUoc3ltbGlua19wYXRoKQorICAgIGNhbl9zeW1saW5rLnByZXZfdmFsID0gY2FuCisgICAgcmV0dXJuIGNhbgorCitkZWYgc2tpcF91bmxlc3Nfc3ltbGluayh0ZXN0KToKKyAgICAiIiJTa2lwIGRlY29yYXRvciBmb3IgdGVzdHMgdGhhdCByZXF1aXJlIGZ1bmN0aW9uYWwgc3ltbGluayIiIgorICAgIG9rID0gY2FuX3N5bWxpbmsoKQorICAgIG1zZyA9ICJSZXF1aXJlcyBmdW5jdGlvbmFsIHN5bWxpbmsgaW1wbGVtZW50YXRpb24iCisgICAgcmV0dXJuIHRlc3QgaWYgb2sgZWxzZSB1bml0dGVzdC5za2lwKG1zZykodGVzdCkKKworZGVmIF9zeW1saW5rX3dpbjMyKHRhcmdldCwgbGluaywgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSk6CisgICAgIiIiCisgICAgQ3R5cGVzIHN5bWxpbmsgaW1wbGVtZW50YXRpb24gc2luY2UgUHl0aG9uIGRvZXNuJ3Qgc3VwcG9ydAorICAgIHN5bWxpbmtzIGluIHdpbmRvd3MgeWV0LiBCb3Jyb3dlZCBmcm9tIGphcmFjby53aW5kb3dzIHByb2plY3QuCisgICAgIiIiCisgICAgaW1wb3J0IGN0eXBlcy53aW50eXBlcworICAgIENyZWF0ZVN5bWJvbGljTGluayA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIuQ3JlYXRlU3ltYm9saWNMaW5rVworICAgIENyZWF0ZVN5bWJvbGljTGluay5hcmd0eXBlcyA9ICgKKyAgICAgICAgY3R5cGVzLndpbnR5cGVzLkxQV1NUUiwKKyAgICAgICAgY3R5cGVzLndpbnR5cGVzLkxQV1NUUiwKKyAgICAgICAgY3R5cGVzLndpbnR5cGVzLkRXT1JELAorICAgICAgICApCisgICAgQ3JlYXRlU3ltYm9saWNMaW5rLnJlc3R5cGUgPSBjdHlwZXMud2ludHlwZXMuQk9PTEVBTgorCisgICAgZGVmIGZvcm1hdF9zeXN0ZW1fbWVzc2FnZShlcnJubyk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsIEZvcm1hdE1lc3NhZ2Ugd2l0aCBhIHN5c3RlbSBlcnJvciBudW1iZXIgdG8gcmV0cmlldmUKKyAgICAgICAgdGhlIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UuCisgICAgICAgICIiIgorICAgICAgICAjIGZpcnN0IHNvbWUgZmxhZ3MgdXNlZCBieSBGb3JtYXRNZXNzYWdlVworICAgICAgICBBTExPQ0FURV9CVUZGRVIgPSAweDEwMAorICAgICAgICBBUkdVTUVOVF9BUlJBWSA9IDB4MjAwMAorICAgICAgICBGUk9NX0hNT0RVTEUgPSAweDgwMAorICAgICAgICBGUk9NX1NUUklORyA9IDB4NDAwCisgICAgICAgIEZST01fU1lTVEVNID0gMHgxMDAwCisgICAgICAgIElHTk9SRV9JTlNFUlRTID0gMHgyMDAKKworICAgICAgICAjIExldCBGb3JtYXRNZXNzYWdlVyBhbGxvY2F0ZSB0aGUgYnVmZmVyICh3ZSdsbCBmcmVlIGl0IGJlbG93KQorICAgICAgICAjIEFsc28sIGxldCBpdCBrbm93IHdlIHdhbnQgYSBzeXN0ZW0gZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgZmxhZ3MgPSBBTExPQ0FURV9CVUZGRVIgfCBGUk9NX1NZU1RFTQorICAgICAgICBzb3VyY2UgPSBOb25lCisgICAgICAgIG1lc3NhZ2VfaWQgPSBlcnJubworICAgICAgICBsYW5ndWFnZV9pZCA9IDAKKyAgICAgICAgcmVzdWx0X2J1ZmZlciA9IGN0eXBlcy53aW50eXBlcy5MUFdTVFIoKQorICAgICAgICBidWZmZXJfc2l6ZSA9IDAKKyAgICAgICAgYXJndW1lbnRzID0gTm9uZQorICAgICAgICBieXRlcyA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIuRm9ybWF0TWVzc2FnZVcoCisgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgIG1lc3NhZ2VfaWQsCisgICAgICAgICAgICBsYW5ndWFnZV9pZCwKKyAgICAgICAgICAgIGN0eXBlcy5ieXJlZihyZXN1bHRfYnVmZmVyKSwKKyAgICAgICAgICAgIGJ1ZmZlcl9zaXplLAorICAgICAgICAgICAgYXJndW1lbnRzLAorICAgICAgICAgICAgKQorICAgICAgICAjIG5vdGUgdGhlIGZvbGxvd2luZyB3aWxsIGNhdXNlIGFuIGluZmluaXRlIGxvb3AgaWYgR2V0TGFzdEVycm9yCisgICAgICAgICMgIHJlcGVhdGVkbHkgcmV0dXJucyBhbiBlcnJvciB0aGF0IGNhbm5vdCBiZSBmb3JtYXR0ZWQsIGFsdGhvdWdoCisgICAgICAgICMgIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCisgICAgICAgIGhhbmRsZV9ub256ZXJvX3N1Y2Nlc3MoYnl0ZXMpCisgICAgICAgIG1lc3NhZ2UgPSByZXN1bHRfYnVmZmVyLnZhbHVlCisgICAgICAgIGN0eXBlcy53aW5kbGwua2VybmVsMzIuTG9jYWxGcmVlKHJlc3VsdF9idWZmZXIpCisgICAgICAgIHJldHVybiBtZXNzYWdlCisKKyAgICBkZWYgaGFuZGxlX25vbnplcm9fc3VjY2VzcyhyZXN1bHQpOgorICAgICAgICBpZiByZXN1bHQgPT0gMDoKKyAgICAgICAgICAgIHZhbHVlID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5HZXRMYXN0RXJyb3IoKQorICAgICAgICAgICAgc3RyZXJyb3IgPSBmb3JtYXRfc3lzdGVtX21lc3NhZ2UodmFsdWUpCisgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IodmFsdWUsIHN0cmVycm9yKQorCisgICAgdGFyZ2V0X2lzX2RpcmVjdG9yeSA9IHRhcmdldF9pc19kaXJlY3Rvcnkgb3Igb3MucGF0aC5pc2Rpcih0YXJnZXQpCisgICAgaGFuZGxlX25vbnplcm9fc3VjY2VzcyhDcmVhdGVTeW1ib2xpY0xpbmsobGluaywgdGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5KSkKKworc3ltbGluayA9IG9zLnN5bWxpbmsgaWYgaGFzYXR0cihvcywgJ3N5bWxpbmsnKSBlbHNlICgKKyAgICBfc3ltbGlua193aW4zMiBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnV2luZG93cycgZWxzZSBOb25lCispCisKK2RlZiByZW1vdmVfc3ltbGluayhuYW1lKToKKyAgICAjIE9uIFdpbmRvd3MsIHRvIHJlbW92ZSBhIGRpcmVjdG9yeSBzeW1saW5rLCBvbmUgbXVzdCB1c2Ugcm1kaXIKKyAgICB0cnk6CisgICAgICAgIG9zLnJtZGlyKG5hbWUpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIG9zLnJlbW92ZShuYW1lKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfTWltZVdyaXRlci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X01pbWVXcml0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2NjM2ZAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X01pbWVXcml0ZXIucHkKQEAgLTAsMCArMSwyOTIgQEAKKyIiIlRlc3QgcHJvZ3JhbSBmb3IgTWltZVdyaXRlciBtb2R1bGUuCisKK1RoZSB0ZXN0IHByb2dyYW0gd2FzIHRvbyBiaWcgdG8gY29tZm9ydGFibHkgZml0IGluIHRoZSBNaW1lV3JpdGVyCitjbGFzcywgc28gaXQncyBoZXJlIGluIGl0cyBvd24gZmlsZS4KKworVGhpcyBzaG91bGQgZ2VuZXJhdGUgQmFycnkncyBleGFtcGxlLCBtb2R1bG8gc29tZSBxdW90ZXMgYW5kIG5ld2xpbmVzLgorCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0LCBTdHJpbmdJTworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCisKK2ltcG9ydF9tb2R1bGUoIk1pbWVXcml0ZXIiLCBkZXByZWNhdGVkPVRydWUpCitmcm9tIE1pbWVXcml0ZXIgaW1wb3J0IE1pbWVXcml0ZXIKKworU0VMTEVSID0gJycnXAorSU5URVJGQUNFIFNlbGxlci0xOworCitUWVBFIFNlbGxlciA9IE9CSkVDVAorICAgIERPQ1VNRU5UQVRJT04gIkEgc2ltcGxlIFNlbGxlciBpbnRlcmZhY2UgdG8gdGVzdCBJTFUiCisgICAgTUVUSE9EUworICAgICAgICAgICAgcHJpY2UoKTpJTlRFR0VSLAorICAgIEVORDsKKycnJworCitCVVlFUiA9ICcnJ1wKK2NsYXNzIEJ1eWVyOgorICAgIGRlZiBfX3NldHVwX18oc2VsZiwgbWF4cHJpY2UpOgorICAgICAgICBzZWxmLl9tYXhwcmljZSA9IG1heHByaWNlCisKKyAgICBkZWYgX19tYWluX18oc2VsZiwga29zKToKKyAgICAgICAgIiIiRW50cnkgcG9pbnQgdXBvbiBhcnJpdmFsIGF0IGEgbmV3IEtPUy4iIiIKKyAgICAgICAgYnJva2VyID0ga29zLmJyb2tlcigpCisgICAgICAgICMgQjQgPT0gQmFycnkncyBCaWcgQmFzcyBCdXNpbmVzcyA6LSkKKyAgICAgICAgc2VsbGVyID0gYnJva2VyLmxvb2t1cCgnU2VsbGVyXzEuU2VsbGVyJywgJ0I0JykKKyAgICAgICAgaWYgc2VsbGVyOgorICAgICAgICAgICAgcHJpY2UgPSBzZWxsZXIucHJpY2UoKQorICAgICAgICAgICAgcHJpbnQgJ1NlbGxlciB3YW50cyAkJywgcHJpY2UsICcuLi4gJworICAgICAgICAgICAgaWYgcHJpY2UgPiBzZWxmLl9tYXhwcmljZToKKyAgICAgICAgICAgICAgICBwcmludCAndG9vIG11Y2ghJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAiSSdsbCB0YWtlIGl0ISIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICdubyBzZWxsZXIgZm91bmQgaGVyZScKKycnJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IGFzayB3aHkgdGhpcyBjb21tZW50IGlzIGhlcmUKKworU1RBVEUgPSAnJydcCisjIGluc3RhbnRpYXRlIGEgYnV5ZXIgaW5zdGFuY2UgYW5kIHB1dCBpdCBpbiBhIG1hZ2ljIHBsYWNlIGZvciB0aGUgS09TCisjIHRvIGZpbmQuCitfX2twX18gPSBCdXllcigpCitfX2twX18uX19zZXR1cF9fKDUwMCkKKycnJworCitTSU1QTEVfTUVUQURBVEEgPSBbCisgICAgICAgICgiSW50ZXJwcmV0ZXIiLCAicHl0aG9uIiksCisgICAgICAgICgiSW50ZXJwcmV0ZXItVmVyc2lvbiIsICIxLjMiKSwKKyAgICAgICAgKCJPd25lci1OYW1lIiwgIkJhcnJ5IFdhcnNhdyIpLAorICAgICAgICAoIk93bmVyLVJlbmRlenZvdXMiLCAiYndhcnNhd0BjbnJpLnJlc3Rvbi52YS51cyIpLAorICAgICAgICAoIkhvbWUtS1NTIiwgImtzcy5jbnJpLnJlc3Rvbi52YS51cyIpLAorICAgICAgICAoIklkZW50aWZpZXIiLCAiaGRsOi8vY25yaS5rc3MvbXlfZmlyc3Rfa25vd2JvdCIpLAorICAgICAgICAoIkxhdW5jaC1EYXRlIiwgIk1vbiBGZWIgMTIgMTY6Mzk6MDMgRVNUIDE5OTYiKSwKKyAgICAgICAgXQorCitDT01QTEVYX01FVEFEQVRBID0gWworICAgICAgICAoIk1ldGFkYXRhLVR5cGUiLCAiY29tcGxleCIpLAorICAgICAgICAoIk1ldGFkYXRhLUtleSIsICJjb25uZWN0aW9uIiksCisgICAgICAgICgiQWNjZXNzIiwgInJlYWQtb25seSIpLAorICAgICAgICAoIkNvbm5lY3Rpb24tRGVzY3JpcHRpb24iLCAiQmFycnkncyBCaWcgQmFzcyBCdXNpbmVzcyIpLAorICAgICAgICAoIkNvbm5lY3Rpb24tSWQiLCAiQjQiKSwKKyAgICAgICAgKCJDb25uZWN0aW9uLURpcmVjdGlvbiIsICJjbGllbnQiKSwKKyAgICAgICAgXQorCitFWFRFUk5BTF9NRVRBREFUQSA9IFsKKyAgICAgICAgKCJNZXRhZGF0YS1UeXBlIiwgImNvbXBsZXgiKSwKKyAgICAgICAgKCJNZXRhZGF0YS1LZXkiLCAiZ2VuZXJpYy1pbnRlcmZhY2UiKSwKKyAgICAgICAgKCJBY2Nlc3MiLCAicmVhZC1vbmx5IiksCisgICAgICAgICgiQ29ubmVjdGlvbi1EZXNjcmlwdGlvbiIsICJHZW5lcmljIEludGVyZmFjZSBmb3IgQWxsIEtub3dib3RzIiksCisgICAgICAgICgiQ29ubmVjdGlvbi1JZCIsICJnZW5lcmljLWtwIiksCisgICAgICAgICgiQ29ubmVjdGlvbi1EaXJlY3Rpb24iLCAiY2xpZW50IiksCisgICAgICAgIF0KKworCitPVVRQVVQgPSAnJydcCitGcm9tOiBid2Fyc2F3QGNucmkucmVzdG9uLnZhLnVzCitEYXRlOiBNb24gRmViIDEyIDE3OjIxOjQ4IEVTVCAxOTk2CitUbzoga3NzLXN1Ym1pdEBjbnJpLnJlc3Rvbi52YS51cworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2tub3dib3Q7CisgICAgYm91bmRhcnk9IjgwMXNwYW05OTkiOworICAgIHZlcnNpb249IjAuMSIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKworLS04MDFzcGFtOTk5CitDb250ZW50LVR5cGU6IG11bHRpcGFydC9rbm93Ym90LW1ldGFkYXRhOworICAgIGJvdW5kYXJ5PSI4MDJzcGFtOTk5IgorCisKKy0tODAyc3BhbTk5OQorQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorS1AtTWV0YWRhdGEtVHlwZTogc2ltcGxlCitLUC1BY2Nlc3M6IHJlYWQtb25seQorCitLUE1ELUludGVycHJldGVyOiBweXRob24KK0tQTUQtSW50ZXJwcmV0ZXItVmVyc2lvbjogMS4zCitLUE1ELU93bmVyLU5hbWU6IEJhcnJ5IFdhcnNhdworS1BNRC1Pd25lci1SZW5kZXp2b3VzOiBid2Fyc2F3QGNucmkucmVzdG9uLnZhLnVzCitLUE1ELUhvbWUtS1NTOiBrc3MuY25yaS5yZXN0b24udmEudXMKK0tQTUQtSWRlbnRpZmllcjogaGRsOi8vY25yaS5rc3MvbXlfZmlyc3Rfa25vd2JvdAorS1BNRC1MYXVuY2gtRGF0ZTogTW9uIEZlYiAxMiAxNjozOTowMyBFU1QgMTk5NgorCistLTgwMnNwYW05OTkKK0NvbnRlbnQtVHlwZTogdGV4dC9pc2wKK0tQLU1ldGFkYXRhLVR5cGU6IGNvbXBsZXgKK0tQLU1ldGFkYXRhLUtleTogY29ubmVjdGlvbgorS1AtQWNjZXNzOiByZWFkLW9ubHkKK0tQLUNvbm5lY3Rpb24tRGVzY3JpcHRpb246IEJhcnJ5J3MgQmlnIEJhc3MgQnVzaW5lc3MKK0tQLUNvbm5lY3Rpb24tSWQ6IEI0CitLUC1Db25uZWN0aW9uLURpcmVjdGlvbjogY2xpZW50CisKK0lOVEVSRkFDRSBTZWxsZXItMTsKKworVFlQRSBTZWxsZXIgPSBPQkpFQ1QKKyAgICBET0NVTUVOVEFUSU9OICJBIHNpbXBsZSBTZWxsZXIgaW50ZXJmYWNlIHRvIHRlc3QgSUxVIgorICAgIE1FVEhPRFMKKyAgICAgICAgICAgIHByaWNlKCk6SU5URUdFUiwKKyAgICBFTkQ7CisKKy0tODAyc3BhbTk5OQorQ29udGVudC1UeXBlOiBtZXNzYWdlL2V4dGVybmFsLWJvZHk7CisgICAgYWNjZXNzLXR5cGU9IlVSTCI7CisgICAgVVJMPSJoZGw6Ly9jbnJpLmtzcy9nZW5lcmljLWtub3dib3QiCisKK0NvbnRlbnQtVHlwZTogdGV4dC9pc2wKK0tQLU1ldGFkYXRhLVR5cGU6IGNvbXBsZXgKK0tQLU1ldGFkYXRhLUtleTogZ2VuZXJpYy1pbnRlcmZhY2UKK0tQLUFjY2VzczogcmVhZC1vbmx5CitLUC1Db25uZWN0aW9uLURlc2NyaXB0aW9uOiBHZW5lcmljIEludGVyZmFjZSBmb3IgQWxsIEtub3dib3RzCitLUC1Db25uZWN0aW9uLUlkOiBnZW5lcmljLWtwCitLUC1Db25uZWN0aW9uLURpcmVjdGlvbjogY2xpZW50CisKKworLS04MDJzcGFtOTk5LS0KKworLS04MDFzcGFtOTk5CitDb250ZW50LVR5cGU6IG11bHRpcGFydC9rbm93Ym90LWNvZGU7CisgICAgYm91bmRhcnk9IjgwM3NwYW05OTkiCisKKworLS04MDNzcGFtOTk5CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KK0tQLU1vZHVsZS1OYW1lOiBCdXllcktQCisKK2NsYXNzIEJ1eWVyOgorICAgIGRlZiBfX3NldHVwX18oc2VsZiwgbWF4cHJpY2UpOgorICAgICAgICBzZWxmLl9tYXhwcmljZSA9IG1heHByaWNlCisKKyAgICBkZWYgX19tYWluX18oc2VsZiwga29zKToKKyAgICAgICAgIiIiRW50cnkgcG9pbnQgdXBvbiBhcnJpdmFsIGF0IGEgbmV3IEtPUy4iIiIKKyAgICAgICAgYnJva2VyID0ga29zLmJyb2tlcigpCisgICAgICAgICMgQjQgPT0gQmFycnkncyBCaWcgQmFzcyBCdXNpbmVzcyA6LSkKKyAgICAgICAgc2VsbGVyID0gYnJva2VyLmxvb2t1cCgnU2VsbGVyXzEuU2VsbGVyJywgJ0I0JykKKyAgICAgICAgaWYgc2VsbGVyOgorICAgICAgICAgICAgcHJpY2UgPSBzZWxsZXIucHJpY2UoKQorICAgICAgICAgICAgcHJpbnQgJ1NlbGxlciB3YW50cyAkJywgcHJpY2UsICcuLi4gJworICAgICAgICAgICAgaWYgcHJpY2UgPiBzZWxmLl9tYXhwcmljZToKKyAgICAgICAgICAgICAgICBwcmludCAndG9vIG11Y2ghJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAiSSdsbCB0YWtlIGl0ISIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICdubyBzZWxsZXIgZm91bmQgaGVyZScKKworLS04MDNzcGFtOTk5LS0KKworLS04MDFzcGFtOTk5CitDb250ZW50LVR5cGU6IG11bHRpcGFydC9rbm93Ym90LXN0YXRlOworICAgIGJvdW5kYXJ5PSI4MDRzcGFtOTk5IgorS1AtTWFpbi1Nb2R1bGU6IG1haW4KKworCistLTgwNHNwYW05OTkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorS1AtTW9kdWxlLU5hbWU6IG1haW4KKworIyBpbnN0YW50aWF0ZSBhIGJ1eWVyIGluc3RhbmNlIGFuZCBwdXQgaXQgaW4gYSBtYWdpYyBwbGFjZSBmb3IgdGhlIEtPUworIyB0byBmaW5kLgorX19rcF9fID0gQnV5ZXIoKQorX19rcF9fLl9fc2V0dXBfXyg1MDApCisKKy0tODA0c3BhbTk5OS0tCisKKy0tODAxc3BhbTk5OS0tCisnJycKKworY2xhc3MgTWltZXdyaXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGJ1ZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKworICAgICAgICAjIFRvcGxldmVsIGhlYWRlcnMKKworICAgICAgICB0b3BsZXZlbCA9IE1pbWVXcml0ZXIoYnVmKQorICAgICAgICB0b3BsZXZlbC5hZGRoZWFkZXIoIkZyb20iLCAiYndhcnNhd0BjbnJpLnJlc3Rvbi52YS51cyIpCisgICAgICAgIHRvcGxldmVsLmFkZGhlYWRlcigiRGF0ZSIsICJNb24gRmViIDEyIDE3OjIxOjQ4IEVTVCAxOTk2IikKKyAgICAgICAgdG9wbGV2ZWwuYWRkaGVhZGVyKCJUbyIsICJrc3Mtc3VibWl0QGNucmkucmVzdG9uLnZhLnVzIikKKyAgICAgICAgdG9wbGV2ZWwuYWRkaGVhZGVyKCJNSU1FLVZlcnNpb24iLCAiMS4wIikKKworICAgICAgICAjIFRvcGxldmVsIGJvZHkgcGFydHMKKworICAgICAgICBmID0gdG9wbGV2ZWwuc3RhcnRtdWx0aXBhcnRib2R5KCJrbm93Ym90IiwgIjgwMXNwYW05OTkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoInZlcnNpb24iLCAiMC4xIildLCBwcmVmaXg9MCkKKyAgICAgICAgZi53cml0ZSgiVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC5cbiIpCisKKyAgICAgICAgIyBGaXJzdCB0b3BsZXZlbCBib2R5IHBhcnQ6IG1ldGFkYXRhCisKKyAgICAgICAgbWQgPSB0b3BsZXZlbC5uZXh0cGFydCgpCisgICAgICAgIG1kLnN0YXJ0bXVsdGlwYXJ0Ym9keSgia25vd2JvdC1tZXRhZGF0YSIsICI4MDJzcGFtOTk5IikKKworICAgICAgICAjIE1ldGFkYXRhIHBhcnQgMQorCisgICAgICAgIG1kMSA9IG1kLm5leHRwYXJ0KCkKKyAgICAgICAgbWQxLmFkZGhlYWRlcigiS1AtTWV0YWRhdGEtVHlwZSIsICJzaW1wbGUiKQorICAgICAgICBtZDEuYWRkaGVhZGVyKCJLUC1BY2Nlc3MiLCAicmVhZC1vbmx5IikKKyAgICAgICAgbSA9IE1pbWVXcml0ZXIobWQxLnN0YXJ0Ym9keSgibWVzc2FnZS9yZmM4MjIiKSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gU0lNUExFX01FVEFEQVRBOgorICAgICAgICAgICAgbS5hZGRoZWFkZXIoIktQTUQtIiArIGtleSwgdmFsdWUpCisgICAgICAgIG0uZmx1c2hoZWFkZXJzKCkKKyAgICAgICAgZGVsIG1kMQorCisgICAgICAgICMgTWV0YWRhdGEgcGFydCAyCisKKyAgICAgICAgbWQyID0gbWQubmV4dHBhcnQoKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBDT01QTEVYX01FVEFEQVRBOgorICAgICAgICAgICAgbWQyLmFkZGhlYWRlcigiS1AtIiArIGtleSwgdmFsdWUpCisgICAgICAgIGYgPSBtZDIuc3RhcnRib2R5KCJ0ZXh0L2lzbCIpCisgICAgICAgIGYud3JpdGUoU0VMTEVSKQorICAgICAgICBkZWwgbWQyCisKKyAgICAgICAgIyBNZXRhZGF0YSBwYXJ0IDMKKworICAgICAgICBtZDMgPSBtZC5uZXh0cGFydCgpCisgICAgICAgIGYgPSBtZDMuc3RhcnRib2R5KCJtZXNzYWdlL2V4dGVybmFsLWJvZHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbKCJhY2Nlc3MtdHlwZSIsICJVUkwiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVVJMIiwgImhkbDovL2Nucmkua3NzL2dlbmVyaWMta25vd2JvdCIpXSkKKyAgICAgICAgbSA9IE1pbWVXcml0ZXIoZikKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gRVhURVJOQUxfTUVUQURBVEE6CisgICAgICAgICAgICBtZDMuYWRkaGVhZGVyKCJLUC0iICsga2V5LCB2YWx1ZSkKKyAgICAgICAgbWQzLnN0YXJ0Ym9keSgidGV4dC9pc2wiKQorICAgICAgICAjIFBoYW50b20gYm9keSBkb2Vzbid0IG5lZWQgdG8gYmUgd3JpdHRlbgorCisgICAgICAgIG1kLmxhc3RwYXJ0KCkKKworICAgICAgICAjIFNlY29uZCB0b3BsZXZlbCBib2R5IHBhcnQ6IGNvZGUKKworICAgICAgICBjb2RlID0gdG9wbGV2ZWwubmV4dHBhcnQoKQorICAgICAgICBjb2RlLnN0YXJ0bXVsdGlwYXJ0Ym9keSgia25vd2JvdC1jb2RlIiwgIjgwM3NwYW05OTkiKQorCisgICAgICAgICMgQ29kZTogYnV5ZXIgcHJvZ3JhbSBzb3VyY2UKKworICAgICAgICBidXllciA9IGNvZGUubmV4dHBhcnQoKQorICAgICAgICBidXllci5hZGRoZWFkZXIoIktQLU1vZHVsZS1OYW1lIiwgIkJ1eWVyS1AiKQorICAgICAgICBmID0gYnV5ZXIuc3RhcnRib2R5KCJ0ZXh0L3BsYWluIikKKyAgICAgICAgZi53cml0ZShCVVlFUikKKworICAgICAgICBjb2RlLmxhc3RwYXJ0KCkKKworICAgICAgICAjIFRoaXJkIHRvcGxldmVsIGJvZHkgcGFydDogc3RhdGUKKworICAgICAgICBzdGF0ZSA9IHRvcGxldmVsLm5leHRwYXJ0KCkKKyAgICAgICAgc3RhdGUuYWRkaGVhZGVyKCJLUC1NYWluLU1vZHVsZSIsICJtYWluIikKKyAgICAgICAgc3RhdGUuc3RhcnRtdWx0aXBhcnRib2R5KCJrbm93Ym90LXN0YXRlIiwgIjgwNHNwYW05OTkiKQorCisgICAgICAgICMgU3RhdGU6IGEgYnVuY2ggb2YgYXNzaWdubWVudHMKKworICAgICAgICBzdCA9IHN0YXRlLm5leHRwYXJ0KCkKKyAgICAgICAgc3QuYWRkaGVhZGVyKCJLUC1Nb2R1bGUtTmFtZSIsICJtYWluIikKKyAgICAgICAgZiA9IHN0LnN0YXJ0Ym9keSgidGV4dC9wbGFpbiIpCisgICAgICAgIGYud3JpdGUoU1RBVEUpCisKKyAgICAgICAgc3RhdGUubGFzdHBhcnQoKQorCisgICAgICAgICMgRW5kIHRvcGxldmVsIGJvZHkgcGFydHMKKworICAgICAgICB0b3BsZXZlbC5sYXN0cGFydCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYuZ2V0dmFsdWUoKSwgT1VUUFVUKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE1pbWV3cml0ZXJUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9TaW1wbGVIVFRQU2VydmVyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfU2ltcGxlSFRUUFNlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmVjODUzCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfU2ltcGxlSFRUUFNlcnZlci5weQpAQCAtMCwwICsxLDQxIEBACisiIiIKK1RoZXNlIHRlc3RzIG9ubHkgY2hlY2sgdXJsIHBhcnNpbmcgZm9yIG5vdy4KK1dlIGRvbid0IHdhbnQgdG8gcmVxdWlyZSB0aGUgJ25ldHdvcmsnIHJlc291cmNlLgorIiIiCisKK2ltcG9ydCBvcywgdW5pdHRlc3QKK2Zyb20gU2ltcGxlSFRUUFNlcnZlciBpbXBvcnQgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIFNvY2tldGxlc3NSZXF1ZXN0SGFuZGxlciAoU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHBhc3MKKworY2xhc3MgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIiBUZXN0IHVybCBwYXJzaW5nICIiIgorICAgIGRlZiBzZXRVcCAoc2VsZik6CisgICAgICAgIHNlbGYudHJhbnNsYXRlZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIHNlbGYudHJhbnNsYXRlZCA9IG9zLnBhdGguam9pbihzZWxmLnRyYW5zbGF0ZWQsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuaGFuZGxlciA9IFNvY2tldGxlc3NSZXF1ZXN0SGFuZGxlciAoKQorCisgICAgZGVmIHRlc3RfcXVlcnlBcmd1bWVudHMgKHNlbGYpOgorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoICgnL2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoICgnL2ZpbGVuYW1lP2Zvbz1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvZmlsZW5hbWU/YT1iJnNwYW09ZWdncyN6b3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisKKyAgICBkZWYgdGVzdF9zdGFydFdpdGhEb3VibGVTbGFzaCAoc2VsZik6CisgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvL2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoICgnLy9maWxlbmFtZT9mb289YmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9TdHJpbmdJTy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X1N0cmluZ0lPLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZjMwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9TdHJpbmdJTy5weQpAQCAtMCwwICsxLDIyNCBAQAorIyBUZXN0cyBTdHJpbmdJTyBhbmQgY1N0cmluZ0lPCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgY1N0cmluZ0lPCitpbXBvcnQgdHlwZXMKK2ltcG9ydCBhcnJheQoraW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBUZXN0R2VuZXJpY1N0cmluZ0lPKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIHVzZSBhIGNsYXNzIHZhcmlhYmxlIE1PRFVMRSB0byBkZWZpbmUgd2hpY2ggbW9kdWxlIGlzIGJlaW5nIHRlc3RlZAorCisgICAgIyBMaW5lIG9mIGRhdGEgdG8gdGVzdCBhcyBzdHJpbmcKKyAgICBfbGluZSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIScKKworICAgICMgQ29uc3RydWN0b3IgdG8gdXNlIGZvciB0aGUgdGVzdCBkYXRhICguX2xpbmUgaXMgcGFzc2VkIHRvIHRoaXMKKyAgICAjIGNvbnN0cnVjdG9yKQorICAgIGNvbnN0cnVjdG9yID0gc3RyCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX2xpbmVzID0gc2VsZi5jb25zdHJ1Y3Rvcigoc2VsZi5fbGluZSArICdcbicpICogNSkKKyAgICAgICAgc2VsZi5fZnAgPSBzZWxmLk1PRFVMRS5TdHJpbmdJTyhzZWxmLl9saW5lcykKKworICAgIGRlZiB0ZXN0X3JlYWRzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLl9mcC5zZWVrKQorICAgICAgICBlcShzZWxmLl9mcC5yZWFkKDEwKSwgc2VsZi5fbGluZVs6MTBdKQorICAgICAgICBlcShzZWxmLl9mcC5yZWFkKDApLCAnJykKKyAgICAgICAgZXEoc2VsZi5fZnAucmVhZGxpbmUoMCksICcnKQorICAgICAgICBlcShzZWxmLl9mcC5yZWFkbGluZSgpLCBzZWxmLl9saW5lWzEwOl0gKyAnXG4nKQorICAgICAgICBlcShsZW4oc2VsZi5fZnAucmVhZGxpbmVzKDYwKSksIDIpCisgICAgICAgIHNlbGYuX2ZwLnNlZWsoMCkKKyAgICAgICAgZXEoc2VsZi5fZnAucmVhZGxpbmUoLTEpLCBzZWxmLl9saW5lICsgJ1xuJykKKworICAgIGRlZiB0ZXN0X3dyaXRlcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnNlZWspCisgICAgICAgIGYud3JpdGUoc2VsZi5fbGluZVs6Nl0pCisgICAgICAgIGYuc2VlaygzKQorICAgICAgICBmLndyaXRlKHNlbGYuX2xpbmVbMjA6MjZdKQorICAgICAgICBmLndyaXRlKHNlbGYuX2xpbmVbNTJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0dmFsdWUoKSwgJ2FiY3V2d3h5eiEnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKCkKKyAgICAgICAgZi53cml0ZWxpbmVzKFtzZWxmLl9saW5lWzBdLCBzZWxmLl9saW5lWzFdLCBzZWxmLl9saW5lWzJdXSkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXR2YWx1ZSgpLCAnYWJjJykKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIGRlZiBlcnJvckdlbigpOgorICAgICAgICAgICAgeWllbGQgJ2EnCisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdCgpCisgICAgICAgIGYgPSBzZWxmLk1PRFVMRS5TdHJpbmdJTygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBmLndyaXRlbGluZXMsIGVycm9yR2VuKCkpCisKKyAgICBkZWYgdGVzdF90cnVuY2F0ZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGYgPSBzZWxmLk1PRFVMRS5TdHJpbmdJTygpCisgICAgICAgIGYud3JpdGUoc2VsZi5fbGluZXMpCisgICAgICAgIGYuc2VlaygxMCkKKyAgICAgICAgZi50cnVuY2F0ZSgpCisgICAgICAgIGVxKGYuZ2V0dmFsdWUoKSwgJ2FiY2RlZmdoaWonKQorICAgICAgICBmLnRydW5jYXRlKDUpCisgICAgICAgIGVxKGYuZ2V0dmFsdWUoKSwgJ2FiY2RlJykKKyAgICAgICAgZi53cml0ZSgneHl6JykKKyAgICAgICAgZXEoZi5nZXR2YWx1ZSgpLCAnYWJjZGV4eXonKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLnRydW5jYXRlLCAtMSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYud3JpdGUsICdmcm9ibml0eicpCisKKyAgICBkZWYgdGVzdF9jbG9zZWRfZmxhZyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNsb3NlZCwgRmFsc2UpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2xvc2VkLCBUcnVlKQorICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8oImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jbG9zZWQsIEZhbHNlKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNsb3NlZCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2lzYXR0eShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLmlzYXR0eSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmlzYXR0eSgpLCBGYWxzZSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYuaXNhdHR5KQorCisgICAgZGVmIHRlc3RfaXRlcmF0b3Ioc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKKyAgICAgICAgZXEoaXRlcihzZWxmLl9mcCksIHNlbGYuX2ZwKQorICAgICAgICAjIERvZXMgdGhpcyBvYmplY3Qgc3VwcG9ydCB0aGUgaXRlcmF0aW9uIHByb3RvY29sPworICAgICAgICB1bmxlc3MoaGFzYXR0cihzZWxmLl9mcCwgJ19faXRlcl9fJykpCisgICAgICAgIHVubGVzcyhoYXNhdHRyKHNlbGYuX2ZwLCAnbmV4dCcpKQorICAgICAgICBpID0gMAorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9mcDoKKyAgICAgICAgICAgIGVxKGxpbmUsIHNlbGYuX2xpbmUgKyAnXG4nKQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgIGVxKGksIDUpCisgICAgICAgIHNlbGYuX2ZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5fZnAubmV4dCkKKworICAgIGRlZiB0ZXN0X2dldHZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLl9mcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuX2ZwLmdldHZhbHVlKQorCisgICAgQHRlc3Rfc3VwcG9ydC5iaWdtZW10ZXN0KHRlc3Rfc3VwcG9ydC5fMkcgKyAyKioyNiwgbWVtdXNlPTIuMDAxKQorICAgIGRlZiB0ZXN0X3JlYWRzX2Zyb21fbGFyZ2Vfc3RyZWFtKHNlbGYsIHNpemUpOgorICAgICAgICBsaW5lc2l6ZSA9IDIqKjI2ICMgNjQgTWlCCisgICAgICAgIGxpbmVzID0gWyd4JyAqIChsaW5lc2l6ZSAtIDEpICsgJ1xuJ10gKiAoc2l6ZSAvLyBsaW5lc2l6ZSkgKyBcCisgICAgICAgICAgICAgICAgWyd5JyAqIChzaXplICUgbGluZXNpemUpXQorICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8oJycuam9pbihsaW5lcykpCisgICAgICAgIGZvciBpLCBleHBlY3RlZCBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgbGluZSA9IGYucmVhZChsZW4oZXhwZWN0ZWQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZSksIGxlbihleHBlY3RlZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnJykKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGZvciBpLCBleHBlY3RlZCBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZSksIGxlbihleHBlY3RlZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgJycpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKCksIGxpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKCksIFtdKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcyhzaXplKSwgbGluZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgW10pCisKKyAgICAjIEluIHdvcnN0IGNhc2UgY1N0cmluZ0lPIHJlcXVpcmVzIDIgKyAxICsgMS8yICsgMS8yKioyICsgLi4uID0gNAorICAgICMgYnl0ZXMgcGVyIGlucHV0IGNoYXJhY3Rlci4KKyAgICBAdGVzdF9zdXBwb3J0LmJpZ21lbXRlc3QodGVzdF9zdXBwb3J0Ll8yRywgbWVtdXNlPTQpCisgICAgZGVmIHRlc3Rfd3JpdGVzX3RvX2xhcmdlX3N0cmVhbShzZWxmLCBzaXplKToKKyAgICAgICAgcyA9ICd4JyAqIDIqKjI2ICMgNjQgTWlCCisgICAgICAgIGYgPSBzZWxmLk1PRFVMRS5TdHJpbmdJTygpCisgICAgICAgIG4gPSBzaXplCisgICAgICAgIHdoaWxlIG4gPiBsZW4ocyk6CisgICAgICAgICAgICBmLndyaXRlKHMpCisgICAgICAgICAgICBuIC09IGxlbihzKQorICAgICAgICBzID0gTm9uZQorICAgICAgICBmLndyaXRlKCd4JyAqIG4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGYuZ2V0dmFsdWUoKSksIHNpemUpCisKKworY2xhc3MgVGVzdFN0cmluZ0lPKFRlc3RHZW5lcmljU3RyaW5nSU8pOgorICAgIE1PRFVMRSA9IFN0cmluZ0lPCisKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorCisgICAgICAgIGlmIG5vdCB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOiByZXR1cm4KKworICAgICAgICAjIFRoZSBTdHJpbmdJTyBtb2R1bGUgYWxzbyBzdXBwb3J0cyBjb25jYXRlbmF0aW5nIFVuaWNvZGUKKyAgICAgICAgIyBzbmlwcGV0cyB0byBsYXJnZXIgVW5pY29kZSBzdHJpbmdzLiBUaGlzIGlzIHRlc3RlZCBieSB0aGlzCisgICAgICAgICMgbWV0aG9kLiBOb3RlIHRoYXQgY1N0cmluZ0lPIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBleHRlbnNpb24uCisKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKCkKKyAgICAgICAgZi53cml0ZShzZWxmLl9saW5lWzo2XSkKKyAgICAgICAgZi5zZWVrKDMpCisgICAgICAgIGYud3JpdGUodW5pY29kZShzZWxmLl9saW5lWzIwOjI2XSkpCisgICAgICAgIGYud3JpdGUodW5pY29kZShzZWxmLl9saW5lWzUyXSkpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCB1bmljb2RlKCdhYmN1dnd4eXohJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzKSwgdHlwZXMuVW5pY29kZVR5cGUpCisKK2NsYXNzIFRlc3RjU3RyaW5nSU8oVGVzdEdlbmVyaWNTdHJpbmdJTyk6CisgICAgTU9EVUxFID0gY1N0cmluZ0lPCisKKyAgICBkZWYgdGVzdF9hcnJheV9zdXBwb3J0KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzMwMTE0OiBjU3RyaW5nSU8gc2hvdWxkIGFjY2VwdCBhcnJheSBvYmplY3RzCisgICAgICAgIGEgPSBhcnJheS5hcnJheSgnQicsIFswLDEsMl0pCisgICAgICAgIGYgPSBzZWxmLk1PRFVMRS5TdHJpbmdJTyhhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0dmFsdWUoKSwgJ1x4MDBceDAxXHgwMicpCisKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorCisgICAgICAgIGlmIG5vdCB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOiByZXR1cm4KKworICAgICAgICAjIFRoZSBjU3RyaW5nSU8gbW9kdWxlIGNvbnZlcnRzIFVuaWNvZGUgc3RyaW5ncyB0byBjaGFyYWN0ZXIKKyAgICAgICAgIyBzdHJpbmdzIHdoZW4gd3JpdGluZyB0aGVtIHRvIGNTdHJpbmdJTyBvYmplY3RzLgorICAgICAgICAjIENoZWNrIHRoYXQgdGhpcyB3b3Jrcy4KKworICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8oKQorICAgICAgICBmLndyaXRlKHUnYWJjZGUnKQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgJ2FiY2RlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHMpLCBzdHIpCisKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKHUnYWJjZGUnKQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgJ2FiY2RlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHMpLCBzdHIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBzZWxmLk1PRFVMRS5TdHJpbmdJTywgdSdceGY0JykKKworCitpbXBvcnQgc3lzCitpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICMgSnl0aG9uIGRvZXNuJ3QgaGF2ZSBhIGJ1ZmZlciBvYmplY3QsIHNvIHdlIGp1c3QgZG8gYSB1c2VsZXNzCisgICAgIyBmYWtlIG9mIHRoZSBidWZmZXIgdGVzdHMuCisgICAgYnVmZmVyID0gc3RyCisKK2NsYXNzIFRlc3RCdWZmZXJTdHJpbmdJTyhUZXN0U3RyaW5nSU8pOgorICAgIGNvbnN0cnVjdG9yID0gYnVmZmVyCisKK2NsYXNzIFRlc3RCdWZmZXJjU3RyaW5nSU8oVGVzdGNTdHJpbmdJTyk6CisgICAgY29uc3RydWN0b3IgPSBidWZmZXIKKworY2xhc3MgVGVzdE1lbW9yeXZpZXdjU3RyaW5nSU8oVGVzdGNTdHJpbmdJTyk6CisgICAgY29uc3RydWN0b3IgPSBtZW1vcnl2aWV3CisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFN0cmluZ0lPLCBUZXN0Y1N0cmluZ0lPKQorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RCdWZmZXJTdHJpbmdJTywgVGVzdEJ1ZmZlcmNTdHJpbmdJTykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RNZW1vcnl2aWV3Y1N0cmluZ0lPKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzVkYmVmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQpAQCAtMCwwICsxLDEyMyBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCisjIFNldHVwIGJzZGRiIHdhcm5pbmdzCit0cnk6CisgICAgYnNkZGIgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2JzZGRiJywgZGVwcmVjYXRlZD1UcnVlKQorZXhjZXB0IHVuaXR0ZXN0LlNraXBUZXN0OgorICAgIHBhc3MKKworCitjbGFzcyBOb0FsbChSdW50aW1lRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgRmFpbGVkSW1wb3J0KFJ1bnRpbWVFcnJvcik6CisgICAgcGFzcworCisKK2NsYXNzIEFsbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX2FsbChzZWxmLCBtb2RuYW1lKToKKyAgICAgICAgbmFtZXMgPSB7fQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIuKiAobW9kdWxlfHBhY2thZ2UpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWlldD1UcnVlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGVjICJpbXBvcnQgJXMiICUgbW9kbmFtZSBpbiBuYW1lcworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgU2lsZW50IGZhaWwgaGVyZSBzZWVtcyB0aGUgYmVzdCByb3V0ZSBzaW5jZSBzb21lIG1vZHVsZXMKKyAgICAgICAgICAgICAgICAjIG1heSBub3QgYmUgYXZhaWxhYmxlIG9yIG5vdCBpbml0aWFsaXplIHByb3Blcmx5IGluIGFsbAorICAgICAgICAgICAgICAgICMgZW52aXJvbm1lbnRzLgorICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZEltcG9ydChtb2RuYW1lKQorICAgICAgICBpZiBub3QgaGFzYXR0cihzeXMubW9kdWxlc1ttb2RuYW1lXSwgIl9fYWxsX18iKToKKyAgICAgICAgICAgIHJhaXNlIE5vQWxsKG1vZG5hbWUpCisgICAgICAgIG5hbWVzID0ge30KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyAiZnJvbSAlcyBpbXBvcnQgKiIgJSBtb2RuYW1lIGluIG5hbWVzCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICMgSW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlIGV4Y2VwdGlvbiBzdHJpbmcKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiX19hbGxfXyBmYWlsdXJlIGluIHt9OiB7fToge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICBtb2RuYW1lLCBlLl9fY2xhc3NfXy5fX25hbWVfXywgZSkpCisgICAgICAgIGlmICJfX2J1aWx0aW5zX18iIGluIG5hbWVzOgorICAgICAgICAgICAgZGVsIG5hbWVzWyJfX2J1aWx0aW5zX18iXQorICAgICAgICBrZXlzID0gc2V0KG5hbWVzKQorICAgICAgICBhbGwgPSBzZXQoc3lzLm1vZHVsZXNbbW9kbmFtZV0uX19hbGxfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBhbGwpCisKKyAgICBkZWYgd2Fsa19tb2R1bGVzKHNlbGYsIGJhc2VkaXIsIG1vZHBhdGgpOgorICAgICAgICBmb3IgZm4gaW4gc29ydGVkKG9zLmxpc3RkaXIoYmFzZWRpcikpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihiYXNlZGlyLCBmbikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICAgICAgcGtnX2luaXQgPSBvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dfaW5pdCk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHBrZ19pbml0LCBtb2RwYXRoICsgZm4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHAsIG0gaW4gc2VsZi53YWxrX21vZHVsZXMocGF0aCwgbW9kcGF0aCArIGZuICsgIi4iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHAsIG0KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IGZuLmVuZHN3aXRoKCcucHknKSBvciBmbiA9PSAnX19pbml0X18ucHknOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB5aWVsZCBwYXRoLCBtb2RwYXRoICsgZm5bOi0zXQorCisgICAgZGVmIHRlc3RfYWxsKHNlbGYpOgorICAgICAgICAjIEJsYWNrbGlzdGVkIG1vZHVsZXMgYW5kIHBhY2thZ2VzCisgICAgICAgIGJsYWNrbGlzdCA9IHNldChbCisgICAgICAgICAgICAjIFdpbGwgcmFpc2UgYSBTeW50YXhFcnJvciB3aGVuIGNvbXBpbGluZyB0aGUgZXhlYyBzdGF0ZW1lbnQKKyAgICAgICAgICAgICdfX2Z1dHVyZV9fJywKKyAgICAgICAgXSkKKworICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKKyAgICAgICAgICAgICMgSW4gY2FzZSBfc29ja2V0IGZhaWxzIHRvIGJ1aWxkLCBtYWtlIHRoaXMgdGVzdCBmYWlsIG1vcmUgZ3JhY2VmdWxseQorICAgICAgICAgICAgIyB0aGFuIGFuIEF0dHJpYnV0ZUVycm9yIHNvbWV3aGVyZSBkZWVwIGluIENHSUhUVFBTZXJ2ZXIuCisgICAgICAgICAgICBpbXBvcnQgX3NvY2tldAorCisgICAgICAgICMgcmxjb21wbGV0ZXIgbmVlZHMgc3BlY2lhbCBjb25zaWRlcmF0aW9uOyBpdCBpbXBvcnQgcmVhZGxpbmUgd2hpY2gKKyAgICAgICAgIyBpbml0aWFsaXplcyBHTlUgcmVhZGxpbmUgd2hpY2ggY2FsbHMgc2V0bG9jYWxlKExDX0NUWVBFLCAiIikuLi4gOi0oCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBybGNvbXBsZXRlcgorICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSwgJ0MnKQorCisgICAgICAgIGlnbm9yZWQgPSBbXQorICAgICAgICBmYWlsZWRfaW1wb3J0cyA9IFtdCisgICAgICAgIGxpYl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKyAgICAgICAgZm9yIHBhdGgsIG1vZG5hbWUgaW4gc2VsZi53YWxrX21vZHVsZXMobGliX2RpciwgIiIpOgorICAgICAgICAgICAgbSA9IG1vZG5hbWUKKyAgICAgICAgICAgIGJsYWNrbGlzdGVkID0gRmFsc2UKKyAgICAgICAgICAgIHdoaWxlIG06CisgICAgICAgICAgICAgICAgaWYgbSBpbiBibGFja2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGJsYWNrbGlzdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIG0gPSBtLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICAgICAgaWYgYmxhY2tsaXN0ZWQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludChtb2RuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgVGhpcyBoZXVyaXN0aWMgc3BlZWRzIHVwIHRoZSBwcm9jZXNzIGJ5IHJlbW92aW5nLCBkZSBmYWN0bywKKyAgICAgICAgICAgICAgICAjIG1vc3QgdGVzdCBtb2R1bGVzIChhbmQgYXZvaWRpbmcgdGhlIGF1dG8tZXhlY3V0aW5nIG9uZXMpLgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBpZiAiX19hbGxfXyIgbm90IGluIGYucmVhZCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm9BbGwobW9kbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19hbGwobW9kbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBOb0FsbDoKKyAgICAgICAgICAgICAgICBpZ25vcmVkLmFwcGVuZChtb2RuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEZhaWxlZEltcG9ydDoKKyAgICAgICAgICAgICAgICBmYWlsZWRfaW1wb3J0cy5hcHBlbmQobW9kbmFtZSkKKworICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnRm9sbG93aW5nIG1vZHVsZXMgaGF2ZSBubyBfX2FsbF9fIGFuZCBoYXZlIGJlZW4gaWdub3JlZDonLAorICAgICAgICAgICAgICAgICAgaWdub3JlZCkKKyAgICAgICAgICAgIHByaW50KCdGb2xsb3dpbmcgbW9kdWxlcyBmYWlsZWQgdG8gYmUgaW1wb3J0ZWQ6JywgZmFpbGVkX2ltcG9ydHMpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEFsbFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X19fZnV0dXJlX18ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOGY4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5CkBAIC0wLDAgKzEsNjYgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBfX2Z1dHVyZV9fCisKK0dPT0RfU0VSSUFMUyA9ICgiYWxwaGEiLCAiYmV0YSIsICJjYW5kaWRhdGUiLCAiZmluYWwiKQorCitmZWF0dXJlcyA9IF9fZnV0dXJlX18uYWxsX2ZlYXR1cmVfbmFtZXMKKworY2xhc3MgRnV0dXJlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9uYW1lcyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBhbGxfZmVhdHVyZV9uYW1lcyBhcHBlYXJzIGNvcnJlY3QuCisgICAgICAgIGdpdmVuX2ZlYXR1cmVfbmFtZXMgPSBmZWF0dXJlc1s6XQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIoX19mdXR1cmVfXyk6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKF9fZnV0dXJlX18sIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBpZiBvYmogaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2Uob2JqLCBfX2Z1dHVyZV9fLl9GZWF0dXJlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgICAgIG5hbWUgaW4gZ2l2ZW5fZmVhdHVyZV9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgIiVyIHNob3VsZCBoYXZlIGJlZW4gaW4gYWxsX2ZlYXR1cmVfbmFtZXMiICUgbmFtZQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBnaXZlbl9mZWF0dXJlX25hbWVzLnJlbW92ZShuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnaXZlbl9mZWF0dXJlX25hbWVzKSwgMCwKKyAgICAgICAgICAgICAgICJhbGxfZmVhdHVyZV9uYW1lcyBoYXMgdG9vIG11Y2g6ICVyIiAlIGdpdmVuX2ZlYXR1cmVfbmFtZXMpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihfX2Z1dHVyZV9fLCBmZWF0dXJlKQorCisgICAgICAgICAgICBvcHRpb25hbCA9IHZhbHVlLmdldE9wdGlvbmFsUmVsZWFzZSgpCisgICAgICAgICAgICBtYW5kYXRvcnkgPSB2YWx1ZS5nZXRNYW5kYXRvcnlSZWxlYXNlKCkKKworICAgICAgICAgICAgYSA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICAgICAgZSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgICAgIGRlZiBjaGVjayh0LCBuYW1lKToKKyAgICAgICAgICAgICAgICBhKGlzaW5zdGFuY2UodCwgdHVwbGUpLCAiJXMgaXNuJ3QgdHVwbGUiICUgbmFtZSkKKyAgICAgICAgICAgICAgICBlKGxlbih0KSwgNSwgIiVzIGlzbid0IDUtdHVwbGUiICUgbmFtZSkKKyAgICAgICAgICAgICAgICAobWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCkgPSB0CisgICAgICAgICAgICAgICAgYShpc2luc3RhbmNlKG1ham9yLCBpbnQpLCAiJXMgbWFqb3IgaXNuJ3QgaW50IiAgJSBuYW1lKQorICAgICAgICAgICAgICAgIGEoaXNpbnN0YW5jZShtaW5vciwgaW50KSwgIiVzIG1pbm9yIGlzbid0IGludCIgJSBuYW1lKQorICAgICAgICAgICAgICAgIGEoaXNpbnN0YW5jZShtaWNybywgaW50KSwgIiVzIG1pY3JvIGlzbid0IGludCIgJSBuYW1lKQorICAgICAgICAgICAgICAgIGEoaXNpbnN0YW5jZShsZXZlbCwgYmFzZXN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICIlcyBsZXZlbCBpc24ndCBzdHJpbmciICUgbmFtZSkKKyAgICAgICAgICAgICAgICBhKGxldmVsIGluIEdPT0RfU0VSSUFMUywKKyAgICAgICAgICAgICAgICAgICAgICAgIiVzIGxldmVsIHN0cmluZyBoYXMgdW5rbm93biB2YWx1ZSIgJSBuYW1lKQorICAgICAgICAgICAgICAgIGEoaXNpbnN0YW5jZShzZXJpYWwsIGludCksICIlcyBzZXJpYWwgaXNuJ3QgaW50IiAlIG5hbWUpCisKKyAgICAgICAgICAgIGNoZWNrKG9wdGlvbmFsLCAib3B0aW9uYWwiKQorICAgICAgICAgICAgaWYgbWFuZGF0b3J5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNoZWNrKG1hbmRhdG9yeSwgIm1hbmRhdG9yeSIpCisgICAgICAgICAgICAgICAgYShvcHRpb25hbCA8IG1hbmRhdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIG5vdCBsZXNzIHRoYW4gbWFuZGF0b3J5LCBhbmQgbWFuZGF0b3J5IG5vdCBOb25lIikKKworICAgICAgICAgICAgYShoYXNhdHRyKHZhbHVlLCAiY29tcGlsZXJfZmxhZyIpLAorICAgICAgICAgICAgICAgICAgICJmZWF0dXJlIGlzIG1pc3NpbmcgYSAuY29tcGlsZXJfZmxhZyBhdHRyIikKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBjb21waWxlIGFjY2VwdHMgdGhlIGZsYWcuCisgICAgICAgICAgICBjb21waWxlKCIiLCAiPHRlc3Q+IiwgImV4ZWMiLCB2YWx1ZS5jb21waWxlcl9mbGFnKQorICAgICAgICAgICAgYShpc2luc3RhbmNlKGdldGF0dHIodmFsdWUsICJjb21waWxlcl9mbGFnIiksIGludCksCisgICAgICAgICAgICAgICAgICAgIi5jb21waWxlcl9mbGFnIGlzbid0IGludCIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRnV0dXJlVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfX2xvY2FsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjYjkyNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkKQEAgLTAsMCArMSwxMzcgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSBfbG9jYWxlIGltcG9ydCAoc2V0bG9jYWxlLCBMQ19OVU1FUklDLCBsb2NhbGVjb252LCBFcnJvcikKK3RyeToKKyAgICBmcm9tIF9sb2NhbGUgaW1wb3J0IChSQURJWENIQVIsIFRIT1VTRVAsIG5sX2xhbmdpbmZvKQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIG5sX2xhbmdpbmZvID0gTm9uZQorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20gcGxhdGZvcm0gaW1wb3J0IHVuYW1lCisKK2lmIHVuYW1lKClbMF0gPT0gIkRhcndpbiI6CisgICAgbWFqLCBtaW4sIG1pYyA9IFtpbnQocGFydCkgZm9yIHBhcnQgaW4gdW5hbWUoKVsyXS5zcGxpdCgiLiIpXQorICAgIGlmIChtYWosIG1pbiwgbWljKSA8ICg4LCAwLCAwKToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImxvY2FsZSBzdXBwb3J0IGJyb2tlbiBmb3IgT1MgWCA8IDEwLjQiKQorCitjYW5kaWRhdGVfbG9jYWxlcyA9IFsnZXNfVVknLCAnZnJfRlInLCAnZmlfRkknLCAnZXNfQ08nLCAncHRfUFQnLCAnaXRfSVQnLAorICAgICdldF9FRScsICdlc19QWScsICdub19OTycsICdubF9OTCcsICdsdl9MVicsICdlbF9HUicsICdiZV9CWScsICdmcl9CRScsCisgICAgJ3JvX1JPJywgJ3J1X1VBJywgJ3J1X1JVJywgJ2VzX1ZFJywgJ2NhX0VTJywgJ3NlX05PJywgJ2VzX0VDJywgJ2lkX0lEJywKKyAgICAna2FfR0UnLCAnZXNfQ0wnLCAnaHVfSFUnLCAnd2FfQkUnLCAnbHRfTFQnLCAnc2xfU0knLCAnaHJfSFInLCAnZXNfQVInLAorICAgICdlc19FUycsICdvY19GUicsICdnbF9FUycsICdiZ19CRycsICdpc19JUycsICdta19NSycsICdkZV9BVCcsICdwdF9CUicsCisgICAgJ2RhX0RLJywgJ25uX05PJywgJ2NzX0NaJywgJ2RlX0xVJywgJ2VzX0JPJywgJ3NxX0FMJywgJ3NrX1NLJywgJ2ZyX0NIJywKKyAgICAnZGVfREUnLCAnc3JfWVUnLCAnYnJfRlInLCAnbmxfQkUnLCAnc3ZfRkknLCAncGxfUEwnLCAnZnJfQ0EnLCAnZm9fRk8nLAorICAgICdic19CQScsICdmcl9MVScsICdrbF9HTCcsICdmYV9JUicsICdkZV9CRScsICdzdl9TRScsICdpdF9DSCcsICd1a19VQScsCisgICAgJ2V1X0VTJywgJ3ZpX1ZOJywgJ2FmX1pBJywgJ25iX05PJywgJ2VuX0RLJywgJ3RnX1RKJywgJ2VuX1VTJywKKyAgICAnZXNfRVMuSVNPODg1OS0xJywgJ2ZyX0ZSLklTTzg4NTktMTUnLCAncnVfUlUuS09JOC1SJywgJ2tvX0tSLmV1Y0tSJ10KKworIyBXb3JrYXJvdW5kIGZvciBNU1ZDNihkZWJ1ZykgY3Jhc2ggYnVnCitpZiAiTVNDIHYuMTIwMCIgaW4gc3lzLnZlcnNpb246CisgICAgZGVmIGFjY2VwdChsb2MpOgorICAgICAgICBhID0gbG9jLnNwbGl0KCIuIikKKyAgICAgICAgcmV0dXJuIG5vdChsZW4oYSkgPT0gMiBhbmQgbGVuKGFbLTFdKSA+PSA5KQorICAgIGNhbmRpZGF0ZV9sb2NhbGVzID0gW2xvYyBmb3IgbG9jIGluIGNhbmRpZGF0ZV9sb2NhbGVzIGlmIGFjY2VwdChsb2MpXQorCisjIExpc3Qga25vd24gbG9jYWxlIHZhbHVlcyB0byB0ZXN0IGFnYWluc3Qgd2hlbiBhdmFpbGFibGUuCisjIERpY3QgZm9ybWF0dGVkIGFzIGBgPGxvY2FsZT4gOiAoPGRlY2ltYWxfcG9pbnQ+LCA8dGhvdXNhbmRzX3NlcD4pYGAuICBJZiBhCisjIHZhbHVlIGlzIG5vdCBrbm93biwgdXNlICcnIC4KK2tub3duX251bWVyaWNzID0geydmcl9GUicgOiAoJywnLCAnJyksICdlbl9VUyc6KCcuJywgJywnKX0KKworY2xhc3MgX0xvY2FsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRsb2NhbGUgPSBzZXRsb2NhbGUoTENfTlVNRVJJQykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsIHNlbGYub2xkbG9jYWxlKQorCisgICAgIyBXYW50IHRvIGtub3cgd2hhdCB2YWx1ZSB3YXMgY2FsY3VsYXRlZCwgd2hhdCBpdCB3YXMgY29tcGFyZWQgYWdhaW5zdCwKKyAgICAjIHdoYXQgZnVuY3Rpb24gd2FzIHVzZWQgZm9yIHRoZSBjYWxjdWxhdGlvbiwgd2hhdCB0eXBlIG9mIGRhdGEgd2FzIHVzZWQsCisgICAgIyB0aGUgbG9jYWxlIHRoYXQgd2FzIHN1cHBvc2VkbHkgc2V0LCBhbmQgdGhlIGFjdHVhbCBsb2NhbGUgdGhhdCBpcyBzZXQuCisgICAgbGNfbnVtZXJpY19lcnJfbXNnID0gIiVzICE9ICVzICglcyBmb3IgJXM7IHNldCB0byAlcywgdXNpbmcgJXMpIgorCisgICAgZGVmIG51bWVyaWNfdGVzdGVyKHNlbGYsIGNhbGNfdHlwZSwgY2FsY192YWx1ZSwgZGF0YV90eXBlLCB1c2VkX2xvY2FsZSk6CisgICAgICAgICIiIkNvbXBhcmUgY2FsY3VsYXRpb24gYWdhaW5zdCBrbm93biB2YWx1ZSwgaWYgYXZhaWxhYmxlIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNldF9sb2NhbGUgPSBzZXRsb2NhbGUoTENfTlVNRVJJQykKKyAgICAgICAgZXhjZXB0IEVycm9yOgorICAgICAgICAgICAgc2V0X2xvY2FsZSA9ICI8bm90IGFibGUgdG8gZGV0ZXJtaW5lPiIKKyAgICAgICAga25vd25fdmFsdWUgPSBrbm93bl9udW1lcmljcy5nZXQodXNlZF9sb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJycsICcnKSlbZGF0YV90eXBlID09ICd0aG91c2FuZHNfc2VwJ10KKyAgICAgICAgaWYga25vd25fdmFsdWUgYW5kIGNhbGNfdmFsdWU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGNfdmFsdWUsIGtub3duX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxjX251bWVyaWNfZXJyX21zZyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGNfdmFsdWUsIGtub3duX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY190eXBlLCBkYXRhX3R5cGUsIHNldF9sb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkX2xvY2FsZSkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhubF9sYW5naW5mbywgIm5sX2xhbmdpbmZvIGlzIG5vdCBhdmFpbGFibGUiKQorICAgIGRlZiB0ZXN0X2xjX251bWVyaWNfbmxfbGFuZ2luZm8oc2VsZik6CisgICAgICAgICMgVGVzdCBubF9sYW5naW5mbyBhZ2FpbnN0IGtub3duIHZhbHVlcworICAgICAgICBmb3IgbG9jIGluIGNhbmRpZGF0ZV9sb2NhbGVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNldGxvY2FsZShMQ19OVU1FUklDLCBsb2MpCisgICAgICAgICAgICBleGNlcHQgRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBsaSwgbGMgaW4gKChSQURJWENIQVIsICJkZWNpbWFsX3BvaW50IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRIT1VTRVAsICJ0aG91c2FuZHNfc2VwIikpOgorICAgICAgICAgICAgICAgIHNlbGYubnVtZXJpY190ZXN0ZXIoJ25sX2xhbmdpbmZvJywgbmxfbGFuZ2luZm8obGkpLCBsYywgbG9jKQorCisgICAgZGVmIHRlc3RfbGNfbnVtZXJpY19sb2NhbGVjb252KHNlbGYpOgorICAgICAgICAjIFRlc3QgbG9jYWxlY29udiBhZ2FpbnN0IGtub3duIHZhbHVlcworICAgICAgICBmb3IgbG9jIGluIGNhbmRpZGF0ZV9sb2NhbGVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNldGxvY2FsZShMQ19OVU1FUklDLCBsb2MpCisgICAgICAgICAgICBleGNlcHQgRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBsYyBpbiAoImRlY2ltYWxfcG9pbnQiLCAidGhvdXNhbmRzX3NlcCIpOgorICAgICAgICAgICAgICAgIHNlbGYubnVtZXJpY190ZXN0ZXIoJ2xvY2FsZWNvbnYnLCBsb2NhbGVjb252KClbbGNdLCBsYywgbG9jKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MobmxfbGFuZ2luZm8sICJubF9sYW5naW5mbyBpcyBub3QgYXZhaWxhYmxlIikKKyAgICBkZWYgdGVzdF9sY19udW1lcmljX2Jhc2ljKHNlbGYpOgorICAgICAgICAjIFRlc3QgbmxfbGFuZ2luZm8gYWdhaW5zdCBsb2NhbGVjb252CisgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsIGxvYykKKyAgICAgICAgICAgIGV4Y2VwdCBFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIGxpLCBsYyBpbiAoKFJBRElYQ0hBUiwgImRlY2ltYWxfcG9pbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVEhPVVNFUCwgInRob3VzYW5kc19zZXAiKSk6CisgICAgICAgICAgICAgICAgbmxfcmFkaXhjaGFyID0gbmxfbGFuZ2luZm8obGkpCisgICAgICAgICAgICAgICAgbGlfcmFkaXhjaGFyID0gbG9jYWxlY29udigpW2xjXQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2V0X2xvY2FsZSA9IHNldGxvY2FsZShMQ19OVU1FUklDKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2V0X2xvY2FsZSA9ICI8bm90IGFibGUgdG8gZGV0ZXJtaW5lPiIKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5sX3JhZGl4Y2hhciwgbGlfcmFkaXhjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgKG5sX2xhbmdpbmZvKSAhPSAlcyAobG9jYWxlY29udikgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHNldCB0byAlcywgdXNpbmcgJXMpIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sX3JhZGl4Y2hhciwgbGlfcmFkaXhjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jLCBzZXRfbG9jYWxlKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X3BhcnNpbmcoc2VsZik6CisgICAgICAgICMgQnVnICMxMzkxODcyOiBUZXN0IHdoZXRoZXIgZmxvYXQgcGFyc2luZyBpcyBva2F5IG9uIEV1cm9wZWFuCisgICAgICAgICMgbG9jYWxlcy4KKyAgICAgICAgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfTlVNRVJJQywgbG9jKQorICAgICAgICAgICAgZXhjZXB0IEVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgSWdub3JlIGJ1Z2d5IGxvY2FsZSBkYXRhYmFzZXMuIChNYWMgT1MgMTAuNCBhbmQgc29tZSBvdGhlciBCU0RzKQorICAgICAgICAgICAgaWYgbG9jID09ICdldV9FUycgYW5kIGxvY2FsZWNvbnYoKVsnZGVjaW1hbF9wb2ludCddID09ICInICI6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZXZhbCgnMy4xNCcpICogMTAwKSwgMzE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgZXZhbCgnMy4xNCcpIGZhaWxlZCBmb3IgJXMiICUgbG9jKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoJzMuMTQnKSAqIDEwMCksIDMxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIGZsb2F0KCczLjE0JykgZmFpbGVkIGZvciAlcyIgJSBsb2MpCisgICAgICAgICAgICBpZiBsb2NhbGVjb252KClbJ2RlY2ltYWxfcG9pbnQnXSAhPSAnLic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlY29udigpWydkZWNpbWFsX3BvaW50J10uam9pbihbJzEnLCAnMjMnXSkpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoX0xvY2FsZVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9fb3N4X3N1cHBvcnQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9fb3N4X3N1cHBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2Y2ViNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weQpAQCAtMCwwICsxLDI3OSBAQAorIiIiCitUZXN0IHN1aXRlIGZvciBfb3N4X3N1cHBvcnQ6IHNoYXJlZCBPUyBYIHN1cHBvcnQgZnVuY3Rpb25zLgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorCitpbXBvcnQgX29zeF9zdXBwb3J0CisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJkYXJ3aW4iKSwgInJlcXVpcmVzIE9TIFgiKQorY2xhc3MgVGVzdF9PU1hTdXBwb3J0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLnByb2dfbmFtZSA9ICdib2d1c19wcm9ncmFtX3h4eHgnCisgICAgICAgIHNlbGYudGVtcF9wYXRoX2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5nZXRjd2QoKSkKKyAgICAgICAgc2VsZi5lbnYgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuZW52Ll9fZXhpdF9fKQorICAgICAgICBmb3IgY3YgaW4gKCdDRkxBR1MnLCAnTERGTEFHUycsICdDUFBGTEFHUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JBU0VDRkxBR1MnLCAnQkxEU0hBUkVEJywgJ0xEU0hBUkVEJywgJ0NDJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ1hYJywgJ1BZX0NGTEFHUycsICdQWV9MREZMQUdTJywgJ1BZX0NQUEZMQUdTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUFlfQ09SRV9DRkxBR1MnKToKKyAgICAgICAgICAgIGlmIGN2IGluIHNlbGYuZW52OgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnVuc2V0KGN2KQorCisgICAgZGVmIGFkZF9leHBlY3RlZF9zYXZlZF9pbml0aWFsX3ZhbHVlcyhzZWxmLCBjb25maWdfdmFycywgZXhwZWN0ZWRfdmFycyk6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGluaXRpYWwgdmFsdWVzIGZvciBhbGwgbW9kaWZpZWQgY29uZmlnIHZhcnMKKyAgICAgICAgIyBhcmUgYWxzbyBzYXZlZCB3aXRoIG1vZGlmaWVkIGtleXMuCisgICAgICAgIGV4cGVjdGVkX3ZhcnMudXBkYXRlKCgnX09TWF9TVVBQT1JUX0lOSVRJQUxfJysgaywKKyAgICAgICAgICAgICAgICBjb25maWdfdmFyc1trXSkgZm9yIGsgaW4gY29uZmlnX3ZhcnMKKyAgICAgICAgICAgICAgICAgICAgaWYgY29uZmlnX3ZhcnNba10gIT0gZXhwZWN0ZWRfdmFyc1trXSkKKworICAgIGRlZiB0ZXN0X19maW5kX2V4ZWN1dGFibGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZW52WydQQVRIJ106CisgICAgICAgICAgICBzZWxmLmVudlsnUEFUSCddID0gc2VsZi5lbnZbJ1BBVEgnXSArICc6JworICAgICAgICBzZWxmLmVudlsnUEFUSCddID0gc2VsZi5lbnZbJ1BBVEgnXSArIG9zLnBhdGguYWJzcGF0aChzZWxmLnRlbXBfcGF0aF9kaXIpCisgICAgICAgIHRlc3QudGVzdF9zdXBwb3J0LnVubGluayhzZWxmLnByb2dfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoX29zeF9zdXBwb3J0Ll9maW5kX2V4ZWN1dGFibGUoc2VsZi5wcm9nX25hbWUpKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdC50ZXN0X3N1cHBvcnQudW5saW5rLCBzZWxmLnByb2dfbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYucHJvZ19uYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCIjIS9iaW4vc2hcbi9iaW4vZWNobyBPS1xuIikKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5wcm9nX25hbWUsIHN0YXQuU19JUldYVSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2dfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3N4X3N1cHBvcnQuX2ZpbmRfZXhlY3V0YWJsZShzZWxmLnByb2dfbmFtZSkpCisKKyAgICBkZWYgdGVzdF9fcmVhZF9vdXRwdXQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZW52WydQQVRIJ106CisgICAgICAgICAgICBzZWxmLmVudlsnUEFUSCddID0gc2VsZi5lbnZbJ1BBVEgnXSArICc6JworICAgICAgICBzZWxmLmVudlsnUEFUSCddID0gc2VsZi5lbnZbJ1BBVEgnXSArIG9zLnBhdGguYWJzcGF0aChzZWxmLnRlbXBfcGF0aF9kaXIpCisgICAgICAgIHRlc3QudGVzdF9zdXBwb3J0LnVubGluayhzZWxmLnByb2dfbmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3QudGVzdF9zdXBwb3J0LnVubGluaywgc2VsZi5wcm9nX25hbWUpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnByb2dfbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiIyEvYmluL3NoXG4vYmluL2VjaG8gRXhwZWN0ZWRPdXRwdXRcbiIpCisgICAgICAgIG9zLmNobW9kKHNlbGYucHJvZ19uYW1lLCBzdGF0LlNfSVJXWFUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0V4cGVjdGVkT3V0cHV0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3N4X3N1cHBvcnQuX3JlYWRfb3V0cHV0KHNlbGYucHJvZ19uYW1lKSkKKworICAgIGRlZiB0ZXN0X19maW5kX2J1aWxkX3Rvb2woc2VsZik6CisgICAgICAgIG91dCA9IF9vc3hfc3VwcG9ydC5fZmluZF9idWlsZF90b29sKCdjYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvdXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYyBub3QgZm91bmQgLSBjaGVjayB4Y29kZS1zZWxlY3QnKQorCisgICAgZGVmIHRlc3RfX2dldF9zeXN0ZW1fdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBsYXRmb3JtLm1hY192ZXIoKVswXS5zdGFydHN3aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29zeF9zdXBwb3J0Ll9nZXRfc3lzdGVtX3ZlcnNpb24oKSkpCisKKyAgICBkZWYgdGVzdF9fcmVtb3ZlX29yaWdpbmFsX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgY29uZmlnX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdnY2MtdGVzdCAtcHRocmVhZHMnLAorICAgICAgICB9CisgICAgICAgIGV4cGVjdGVkX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdjbGFuZyAtcHRocmVhZHMnLAorICAgICAgICB9CisgICAgICAgIGN2ID0gJ0NDJworICAgICAgICBuZXd2YWx1ZSA9ICdjbGFuZyAtcHRocmVhZHMnCisgICAgICAgIF9vc3hfc3VwcG9ydC5fc2F2ZV9tb2RpZmllZF92YWx1ZShjb25maWdfdmFycywgY3YsIG5ld3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV4cGVjdGVkX3ZhcnMsIGNvbmZpZ192YXJzKQorICAgICAgICBfb3N4X3N1cHBvcnQuX3JlbW92ZV9vcmlnaW5hbF92YWx1ZXMoY29uZmlnX3ZhcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdmFycywgY29uZmlnX3ZhcnMpCisKKyAgICBkZWYgdGVzdF9fc2F2ZV9tb2RpZmllZF92YWx1ZShzZWxmKToKKyAgICAgICAgY29uZmlnX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdnY2MtdGVzdCAtcHRocmVhZHMnLAorICAgICAgICB9CisgICAgICAgIGV4cGVjdGVkX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdjbGFuZyAtcHRocmVhZHMnLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYWRkX2V4cGVjdGVkX3NhdmVkX2luaXRpYWxfdmFsdWVzKGNvbmZpZ192YXJzLCBleHBlY3RlZF92YXJzKQorICAgICAgICBjdiA9ICdDQycKKyAgICAgICAgbmV3dmFsdWUgPSAnY2xhbmcgLXB0aHJlYWRzJworICAgICAgICBfb3N4X3N1cHBvcnQuX3NhdmVfbW9kaWZpZWRfdmFsdWUoY29uZmlnX3ZhcnMsIGN2LCBuZXd2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF92YXJzLCBjb25maWdfdmFycykKKworICAgIGRlZiB0ZXN0X19zYXZlX21vZGlmaWVkX3ZhbHVlX3VuY2hhbmdlZChzZWxmKToKKyAgICAgICAgY29uZmlnX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdnY2MtdGVzdCAtcHRocmVhZHMnLAorICAgICAgICB9CisgICAgICAgIGV4cGVjdGVkX3ZhcnMgPSBjb25maWdfdmFycy5jb3B5KCkKKyAgICAgICAgY3YgPSAnQ0MnCisgICAgICAgIG5ld3ZhbHVlID0gJ2djYy10ZXN0IC1wdGhyZWFkcycKKyAgICAgICAgX29zeF9zdXBwb3J0Ll9zYXZlX21vZGlmaWVkX3ZhbHVlKGNvbmZpZ192YXJzLCBjdiwgbmV3dmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdmFycywgY29uZmlnX3ZhcnMpCisKKyAgICBkZWYgdGVzdF9fc3VwcG9ydHNfdW5pdmVyc2FsX2J1aWxkcyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHBsYXRmb3JtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ubWFjX3ZlcigpWzBdLnNwbGl0KCcuJykgPj0gWycxMCcsICc0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29zeF9zdXBwb3J0Ll9zdXBwb3J0c191bml2ZXJzYWxfYnVpbGRzKCkpCisKKyAgICBkZWYgdGVzdF9fZmluZF9hcHByb3ByaWF0ZV9jb21waWxlcihzZWxmKToKKyAgICAgICAgY29tcGlsZXJzID0gKAorICAgICAgICAgICAgICAgICAgICAgICAgKCdnY2MtdGVzdCcsICdpNjg2LWFwcGxlLWRhcndpbjExLWxsdm0tZ2NjLTQuMicpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdjbGFuZycsICdjbGFuZyB2ZXJzaW9uIDMuMScpLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGNvbmZpZ192YXJzID0geworICAgICAgICAnQ0MnOiAnZ2NjLXRlc3QgLXB0aHJlYWRzJywKKyAgICAgICAgJ0NYWCc6ICdjYysrLXRlc3QnLAorICAgICAgICAnQ0ZMQUdTJzogJy1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZyAtTzMgLWFyY2ggcHBjIC1hcmNoIGkzODYgICcsCisgICAgICAgICdMREZMQUdTJzogJy1hcmNoIHBwYyAtYXJjaCBpMzg2ICAgLWcnLAorICAgICAgICAnQ1BQRkxBR1MnOiAnLUkuIC1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrJywKKyAgICAgICAgJ0JMRFNIQVJFRCc6ICdnY2MtdGVzdCAtYnVuZGxlIC1hcmNoIHBwYyAtYXJjaCBpMzg2IC1nJywKKyAgICAgICAgJ0xEU0hBUkVEJzogJ2djYy10ZXN0IC1idW5kbGUgLWFyY2ggcHBjIC1hcmNoIGkzODYgJworICAgICAgICAgICAgICAgICAgICAgICAgJy1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrIC1nJywKKyAgICAgICAgfQorICAgICAgICBleHBlY3RlZF92YXJzID0geworICAgICAgICAnQ0MnOiAnY2xhbmcgLXB0aHJlYWRzJywKKyAgICAgICAgJ0NYWCc6ICdjbGFuZysrJywKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICAnLAorICAgICAgICAnTERGTEFHUyc6ICctYXJjaCBwcGMgLWFyY2ggaTM4NiAgIC1nJywKKyAgICAgICAgJ0NQUEZMQUdTJzogJy1JLiAtaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkaycsCisgICAgICAgICdCTERTSEFSRUQnOiAnY2xhbmcgLWJ1bmRsZSAtYXJjaCBwcGMgLWFyY2ggaTM4NiAtZycsCisgICAgICAgICdMRFNIQVJFRCc6ICdjbGFuZyAtYnVuZGxlIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAtZycsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hZGRfZXhwZWN0ZWRfc2F2ZWRfaW5pdGlhbF92YWx1ZXMoY29uZmlnX3ZhcnMsIGV4cGVjdGVkX3ZhcnMpCisKKyAgICAgICAgc3VmZml4ID0gKCc6JyArIHNlbGYuZW52WydQQVRIJ10pIGlmIHNlbGYuZW52WydQQVRIJ10gZWxzZSAnJworICAgICAgICBzZWxmLmVudlsnUEFUSCddID0gb3MucGF0aC5hYnNwYXRoKHNlbGYudGVtcF9wYXRoX2RpcikgKyBzdWZmaXgKKyAgICAgICAgZm9yIGNfbmFtZSwgY19vdXRwdXQgaW4gY29tcGlsZXJzOgorICAgICAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQudW5saW5rKGNfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0LnRlc3Rfc3VwcG9ydC51bmxpbmssIGNfbmFtZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihjX25hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIjIS9iaW4vc2hcbi9iaW4vZWNobyAiICsgY19vdXRwdXQpCisgICAgICAgICAgICBvcy5jaG1vZChjX25hbWUsIHN0YXQuU19JUldYVSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vc3hfc3VwcG9ydC5fZmluZF9hcHByb3ByaWF0ZV9jb21waWxlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ192YXJzKSkKKworICAgIGRlZiB0ZXN0X19yZW1vdmVfdW5pdmVyc2FsX2ZsYWdzKHNlbGYpOgorICAgICAgICBjb25maWdfdmFycyA9IHsKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICAnLAorICAgICAgICAnTERGTEFHUyc6ICctYXJjaCBwcGMgLWFyY2ggaTM4NiAgIC1nJywKKyAgICAgICAgJ0NQUEZMQUdTJzogJy1JLiAtaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkaycsCisgICAgICAgICdCTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAtYXJjaCBwcGMgLWFyY2ggaTM4NiAtZycsCisgICAgICAgICdMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAtZycsCisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0ZWRfdmFycyA9IHsKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zICAgICcsCisgICAgICAgICdMREZMQUdTJzogJyAgICAtZycsCisgICAgICAgICdDUFBGTEFHUyc6ICctSS4gICcsCisgICAgICAgICdCTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAgIC1nJywKKyAgICAgICAgJ0xEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgICAgIC1nJywKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFkZF9leHBlY3RlZF9zYXZlZF9pbml0aWFsX3ZhbHVlcyhjb25maWdfdmFycywgZXhwZWN0ZWRfdmFycykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfdW5pdmVyc2FsX2ZsYWdzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX3ZhcnMpKQorCisgICAgZGVmIHRlc3RfX3JlbW92ZV91bnN1cHBvcnRlZF9hcmNocyhzZWxmKToKKyAgICAgICAgY29uZmlnX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdjbGFuZycsCisgICAgICAgICdDRkxBR1MnOiAnLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1nIC1PMyAtYXJjaCBwcGMgLWFyY2ggaTM4NiAgJywKKyAgICAgICAgJ0xERkxBR1MnOiAnLWFyY2ggcHBjIC1hcmNoIGkzODYgICAtZycsCisgICAgICAgICdDUFBGTEFHUyc6ICctSS4gLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsnLAorICAgICAgICAnQkxEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgLWFyY2ggcHBjIC1hcmNoIGkzODYgLWcnLAorICAgICAgICAnTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAtYXJjaCBwcGMgLWFyY2ggaTM4NiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgLWcnLAorICAgICAgICB9CisgICAgICAgIGV4cGVjdGVkX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdjbGFuZycsCisgICAgICAgICdDRkxBR1MnOiAnLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1nIC1PMyAgLWFyY2ggaTM4NiAgJywKKyAgICAgICAgJ0xERkxBR1MnOiAnIC1hcmNoIGkzODYgICAtZycsCisgICAgICAgICdDUFBGTEFHUyc6ICctSS4gLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsnLAorICAgICAgICAnQkxEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgIC1hcmNoIGkzODYgLWcnLAorICAgICAgICAnTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAgLWFyY2ggaTM4NiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgLWcnLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYWRkX2V4cGVjdGVkX3NhdmVkX2luaXRpYWxfdmFsdWVzKGNvbmZpZ192YXJzLCBleHBlY3RlZF92YXJzKQorCisgICAgICAgIHN1ZmZpeCA9ICgnOicgKyBzZWxmLmVudlsnUEFUSCddKSBpZiBzZWxmLmVudlsnUEFUSCddIGVsc2UgJycKKyAgICAgICAgc2VsZi5lbnZbJ1BBVEgnXSA9IG9zLnBhdGguYWJzcGF0aChzZWxmLnRlbXBfcGF0aF9kaXIpICsgc3VmZml4CisgICAgICAgIGNfbmFtZSA9ICdjbGFuZycKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQudW5saW5rKGNfbmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3QudGVzdF9zdXBwb3J0LnVubGluaywgY19uYW1lKQorICAgICAgICAjIGV4aXQgc3RhdHVzIDI1NSBtZWFucyBubyBQUEMgc3VwcG9ydCBpbiB0aGlzIGNvbXBpbGVyIGNoYWluCisgICAgICAgIHdpdGggb3BlbihjX25hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIiMhL2Jpbi9zaFxuZXhpdCAyNTUiKQorICAgICAgICBvcy5jaG1vZChjX25hbWUsIHN0YXQuU19JUldYVSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vc3hfc3VwcG9ydC5fcmVtb3ZlX3Vuc3VwcG9ydGVkX2FyY2hzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX3ZhcnMpKQorCisgICAgZGVmIHRlc3RfX292ZXJyaWRlX2FsbF9hcmNocyhzZWxmKToKKyAgICAgICAgc2VsZi5lbnZbJ0FSQ0hGTEFHUyddID0gJy1hcmNoIHg4Nl82NCcKKyAgICAgICAgY29uZmlnX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdjbGFuZycsCisgICAgICAgICdDRkxBR1MnOiAnLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1nIC1PMyAtYXJjaCBwcGMgLWFyY2ggaTM4NiAgJywKKyAgICAgICAgJ0xERkxBR1MnOiAnLWFyY2ggcHBjIC1hcmNoIGkzODYgICAtZycsCisgICAgICAgICdDUFBGTEFHUyc6ICctSS4gLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsnLAorICAgICAgICAnQkxEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgLWFyY2ggcHBjIC1hcmNoIGkzODYgLWcnLAorICAgICAgICAnTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAtZycsCisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0ZWRfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2NsYW5nJywKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zICAgICAtYXJjaCB4ODZfNjQnLAorICAgICAgICAnTERGTEFHUyc6ICcgICAgLWcgLWFyY2ggeDg2XzY0JywKKyAgICAgICAgJ0NQUEZMQUdTJzogJy1JLiAtaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkaycsCisgICAgICAgICdCTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAgIC1nIC1hcmNoIHg4Nl82NCcsCisgICAgICAgICdMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgICAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgLWcgLWFyY2ggeDg2XzY0JywKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFkZF9leHBlY3RlZF9zYXZlZF9pbml0aWFsX3ZhbHVlcyhjb25maWdfdmFycywgZXhwZWN0ZWRfdmFycykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29zeF9zdXBwb3J0Ll9vdmVycmlkZV9hbGxfYXJjaHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfdmFycykpCisKKyAgICBkZWYgdGVzdF9fY2hlY2tfZm9yX3VuYXZhaWxhYmxlX3NkayhzZWxmKToKKyAgICAgICAgY29uZmlnX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdjbGFuZycsCisgICAgICAgICdDRkxBR1MnOiAnLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1nIC1PMyAtYXJjaCBwcGMgLWFyY2ggaTM4NiAgJworICAgICAgICAgICAgICAgICAgICAgICAgJy1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuMS5zZGsnLAorICAgICAgICAnTERGTEFHUyc6ICctYXJjaCBwcGMgLWFyY2ggaTM4NiAgIC1nJywKKyAgICAgICAgJ0NQUEZMQUdTJzogJy1JLiAtaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjEuc2RrJywKKyAgICAgICAgJ0JMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgIC1hcmNoIHBwYyAtYXJjaCBpMzg2IC1nJywKKyAgICAgICAgJ0xEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgLWFyY2ggcHBjIC1hcmNoIGkzODYgJworICAgICAgICAgICAgICAgICAgICAgICAgJy1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuMS5zZGsgLWcnLAorICAgICAgICB9CisgICAgICAgIGV4cGVjdGVkX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdjbGFuZycsCisgICAgICAgICdDRkxBR1MnOiAnLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1nIC1PMyAtYXJjaCBwcGMgLWFyY2ggaTM4NiAgJworICAgICAgICAgICAgICAgICAgICAgICAgJyAnLAorICAgICAgICAnTERGTEFHUyc6ICctYXJjaCBwcGMgLWFyY2ggaTM4NiAgIC1nJywKKyAgICAgICAgJ0NQUEZMQUdTJzogJy1JLiAgJywKKyAgICAgICAgJ0JMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgIC1hcmNoIHBwYyAtYXJjaCBpMzg2IC1nJywKKyAgICAgICAgJ0xEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgLWFyY2ggcHBjIC1hcmNoIGkzODYgJworICAgICAgICAgICAgICAgICAgICAgICAgJyAtZycsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hZGRfZXhwZWN0ZWRfc2F2ZWRfaW5pdGlhbF92YWx1ZXMoY29uZmlnX3ZhcnMsIGV4cGVjdGVkX3ZhcnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vc3hfc3VwcG9ydC5fY2hlY2tfZm9yX3VuYXZhaWxhYmxlX3NkaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ192YXJzKSkKKworICAgIGRlZiB0ZXN0X2dldF9wbGF0Zm9ybV9vc3goc2VsZik6CisgICAgICAgICMgTm90ZSwgZ2V0X3BsYXRmb3JtX29zeCBpcyBjdXJyZW50bHkgdGVzdGVkIG1vcmUgZXh0ZW5zaXZlbHkKKyAgICAgICAgIyBpbmRpcmVjdGx5IGJ5IHRlc3Rfc3lzY29uZmlnIGFuZCB0ZXN0X2Rpc3R1dGlscworICAgICAgICBjb25maWdfdmFycyA9IHsKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICAnCisgICAgICAgICAgICAgICAgICAgICAgICAnLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC4xLnNkaycsCisgICAgICAgICdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnOiAnMTAuNicsCisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gX29zeF9zdXBwb3J0LmdldF9wbGF0Zm9ybV9vc3goY29uZmlnX3ZhcnMsICcgJywgJyAnLCAnICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdtYWNvc3gnLCAnMTAuNicsICdmYXQnKSwgcmVzdWx0KQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdF9PU1hTdXBwb3J0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hYmMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hYmMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE4YzNhMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FiYy5weQpAQCAtMCwwICsxLDIzMyBAQAorIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorCisiIiJVbml0IHRlc3RzIGZvciBhYmMucHkuIiIiCisKK2ltcG9ydCB1bml0dGVzdCwgd2Vha3JlZgorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaW1wb3J0IGFiYworZnJvbSBpbnNwZWN0IGltcG9ydCBpc2Fic3RyYWN0CisKKworY2xhc3MgVGVzdEFCQyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdG1ldGhvZF9iYXNpY3Moc2VsZik6CisgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgZGVmIGZvbyhzZWxmKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fKQorICAgICAgICBkZWYgYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihiYXIsICJfX2lzYWJzdHJhY3RtZXRob2RfXyIpKQorCisgICAgZGVmIHRlc3RfYWJzdHJhY3Rwcm9wZXJ0eV9iYXNpY3Moc2VsZik6CisgICAgICAgIEBhYmMuYWJzdHJhY3Rwcm9wZXJ0eQorICAgICAgICBkZWYgZm9vKHNlbGYpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uX19pc2Fic3RyYWN0bWV0aG9kX18pCisgICAgICAgIGRlZiBiYXIoc2VsZik6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGJhciwgIl9faXNhYnN0cmFjdG1ldGhvZF9fIikpCisKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICAgICAgQGFiYy5hYnN0cmFjdHByb3BlcnR5CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiByZXR1cm4gMworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiByZXR1cm4gc3VwZXIoRCwgc2VsZikuZm9vCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRCgpLmZvbywgMykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0bWV0aG9kX2ludGVncmF0aW9uKHNlbGYpOgorICAgICAgICBmb3IgYWJzdHJhY3R0aGluZyBpbiBbYWJjLmFic3RyYWN0bWV0aG9kLCBhYmMuYWJzdHJhY3Rwcm9wZXJ0eV06CisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICAgICAgICAgIEBhYnN0cmFjdHRoaW5nCisgICAgICAgICAgICAgICAgZGVmIGZvbyhzZWxmKTogcGFzcyAgIyBhYnN0cmFjdAorICAgICAgICAgICAgICAgIGRlZiBiYXIoc2VsZik6IHBhc3MgICMgY29uY3JldGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX2Fic3RyYWN0bWV0aG9kc19fLCBzZXQoWyJmb28iXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEMpICAjIGJlY2F1c2UgZm9vIGlzIGFic3RyYWN0CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNhYnN0cmFjdChDKSkKKyAgICAgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICAgICAgZGVmIGJhcihzZWxmKTogcGFzcyAgIyBjb25jcmV0ZSBvdmVycmlkZSBvZiBjb25jcmV0ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELl9fYWJzdHJhY3RtZXRob2RzX18sIHNldChbImZvbyJdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRCkgICMgYmVjYXVzZSBmb28gaXMgc3RpbGwgYWJzdHJhY3QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2Fic3RyYWN0KEQpKQorICAgICAgICAgICAgY2xhc3MgRShEKToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUuX19hYnN0cmFjdG1ldGhvZHNfXywgc2V0KCkpCisgICAgICAgICAgICBFKCkgICMgbm93IGZvbyBpcyBjb25jcmV0ZSwgdG9vCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzYWJzdHJhY3QoRSkpCisgICAgICAgICAgICBjbGFzcyBGKEUpOgorICAgICAgICAgICAgICAgIEBhYnN0cmFjdHRoaW5nCisgICAgICAgICAgICAgICAgZGVmIGJhcihzZWxmKTogcGFzcyAgIyBhYnN0cmFjdCBvdmVycmlkZSBvZiBjb25jcmV0ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGLl9fYWJzdHJhY3RtZXRob2RzX18sIHNldChbImJhciJdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRikgICMgYmVjYXVzZSBiYXIgaXMgYWJzdHJhY3Qgbm93CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNhYnN0cmFjdChGKSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX29sZHN0eWxlX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgIGNsYXNzIE9sZHN0eWxlQ2xhc3M6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhPbGRzdHlsZUNsYXNzLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEEsIE9sZHN0eWxlQ2xhc3MpKQorCisgICAgZGVmIHRlc3RfaXNpbnN0YW5jZV9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICBjbGFzcyBPbGRzdHlsZUNsYXNzOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoT2xkc3R5bGVDbGFzcywgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKE9sZHN0eWxlQ2xhc3MsIHR5cGUoT2xkc3R5bGVDbGFzcykpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoQSwgT2xkc3R5bGVDbGFzcykpCisgICAgICAgICMgVGhpcyByYWlzZXMgYSByZWN1cnNpb24gZGVwdGggZXJyb3IsIGJ1dCBpcyBsb3ctcHJpb3JpdHk6CisgICAgICAgICMgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoQSwgYWJjLkFCQ01ldGEpKQorCisgICAgZGVmIHRlc3RfcmVnaXN0cmF0aW9uX2Jhc2ljcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGIgPSBCKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEIsIEEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQiwgKEEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShiLCBBKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoYiwgKEEsKSkKKyAgICAgICAgQS5yZWdpc3RlcihCKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhCLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQiwgKEEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYiwgKEEsKSkKKyAgICAgICAgY2xhc3MgQyhCKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgKEEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgKEEsKSkKKworICAgIGRlZiB0ZXN0X2lzaW5zdGFuY2VfaW52YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYiA9IEIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoYiwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShiLCAoQSwpKSkKKyAgICAgICAgQS5yZWdpc3RlcihCKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYiwgKEEsKSkpCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyYXRpb25fYnVpbHRpbnMoc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgQS5yZWdpc3RlcihpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSg0MiwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKDQyLCAoQSwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhpbnQsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhpbnQsIChBLCkpKQorICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBCLnJlZ2lzdGVyKGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgiIiwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKCIiLCAoQSwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzdHIsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzdHIsIChBLCkpKQorCisgICAgZGVmIHRlc3RfcmVnaXN0cmF0aW9uX2VkZ2VfY2FzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgQS5yZWdpc3RlcihBKSAgIyBzaG91bGQgcGFzcyBzaWxlbnRseQorICAgICAgICBjbGFzcyBBMShBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBBMS5yZWdpc3RlciwgQSkgICMgY3ljbGVzIG5vdCBhbGxvd2VkCisgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQTEucmVnaXN0ZXIoQikgICMgb2sKKyAgICAgICAgQTEucmVnaXN0ZXIoQikgICMgc2hvdWxkIHBhc3Mgc2lsZW50bHkKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQS5yZWdpc3RlcihDKSAgIyBzaG91bGQgcGFzcyBzaWxlbnRseQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIEMucmVnaXN0ZXIsIEEpICAjIGN5Y2xlcyBub3QgYWxsb3dlZAorICAgICAgICBDLnJlZ2lzdGVyKEIpICAjIG9rCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl9ub25fY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsICJDYW4gb25seSByZWdpc3RlciBjbGFzc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQS5yZWdpc3RlciwgNCkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdHJhdGlvbl90cmFuc2l0aXZlbmVzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhBLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQSwgKEEsKSkpCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEEsIEIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQSwgKEIsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhCLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEIsIChBLCkpKQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgIEEucmVnaXN0ZXIoQikKKyAgICAgICAgY2xhc3MgQjEoQik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEIxLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQjEsIChBLCkpKQorICAgICAgICBjbGFzcyBDMShDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQjEucmVnaXN0ZXIoQzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDLCBCKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIChCLCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgQjEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgKEIxLCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDMSwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQzEsIEIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDMSwgKEIsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCBCMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCAoQjEsKSkpCisgICAgICAgIEMxLnJlZ2lzdGVyKGludCkKKyAgICAgICAgY2xhc3MgTXlJbnQoaW50KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTXlJbnQsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhNeUludCwgKEEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSg0MiwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKDQyLCAoQSwpKQorCisgICAgZGVmIHRlc3RfYWxsX25ld19tZXRob2RzX2FyZV9jYWxsZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgY291bnRlciA9IDAKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgQi5jb3VudGVyICs9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoQiwgY2xzKS5fX25ld19fKGNscykKKyAgICAgICAgY2xhc3MgQyhBLCBCKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCLmNvdW50ZXIsIDApCisgICAgICAgIEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIuY291bnRlciwgMSkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2xlYWsoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlICMyNTIxLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgIEEuZihzZWxmKQorICAgICAgICByID0gd2Vha3JlZi5yZWYoQykKKyAgICAgICAgIyBUcmlnZ2VyIGNhY2hlLgorICAgICAgICBDKCkuZigpCisgICAgICAgIGRlbCBDCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyKCksIE5vbmUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RBQkMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Fic3RyYWN0X251bWJlcnMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hYnN0cmFjdF9udW1iZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNWY4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hYnN0cmFjdF9udW1iZXJzLnB5CkBAIC0wLDAgKzEsNTIgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIG51bWJlcnMucHkuIiIiCisKK2ltcG9ydCBtYXRoCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gbnVtYmVycyBpbXBvcnQgQ29tcGxleCwgUmVhbCwgUmF0aW9uYWwsIEludGVncmFsCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBUZXN0TnVtYmVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhpbnQsIEludGVncmFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoaW50LCBDb21wbGV4KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIGludCg3KS5yZWFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGludCg3KS5pbWFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIGludCg3KS5jb25qdWdhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBpbnQoNykubnVtZXJhdG9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGludCg3KS5kZW5vbWluYXRvcikKKworICAgIGRlZiB0ZXN0X2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGxvbmcsIEludGVncmFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MobG9uZywgQ29tcGxleCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBsb25nKDcpLnJlYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbG9uZyg3KS5pbWFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIGxvbmcoNykuY29uanVnYXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgbG9uZyg3KS5udW1lcmF0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbG9uZyg3KS5kZW5vbWluYXRvcikKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoZmxvYXQsIFJhdGlvbmFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZmxvYXQsIFJlYWwpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNy4zLCBmbG9hdCg3LjMpLnJlYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZmxvYXQoNy4zKS5pbWFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcuMywgZmxvYXQoNy4zKS5jb25qdWdhdGUoKSkKKworICAgIGRlZiB0ZXN0X2NvbXBsZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhjb21wbGV4LCBSZWFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoY29tcGxleCwgQ29tcGxleCkpCisKKyAgICAgICAgYzEsIGMyID0gY29tcGxleCgzLCAyKSwgY29tcGxleCg0LDEpCisgICAgICAgICMgWFhYOiBUaGlzIGlzIG5vdCBpZGVhbCwgYnV0IHNlZSB0aGUgY29tbWVudCBpbiBtYXRoX3RydW5jKCkuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBtYXRoLnRydW5jLCBjMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbG9hdCwgYzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBjMSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdE51bWJlcnMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FlcGFjay5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FlcGFjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGVhMjViCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYWVwYWNrLnB5CkBAIC0wLDAgKzEsOTAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCithZXR5cGVzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2FldHlwZXMnKQorYWVwYWNrID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2FlcGFjaycpCisKK2NsYXNzIFRlc3RBZXBhY2sodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIE9CSkVDVFMgPSBbCisgICAgICAgIGFldHlwZXMuRW51bSgnZW51bScpLAorICAgICAgICBhZXR5cGVzLlR5cGUoJ3R5cGUnKSwKKyAgICAgICAgYWV0eXBlcy5LZXl3b3JkKCdrd3JkJyksCisgICAgICAgIGFldHlwZXMuUmFuZ2UoMSwgMTApLAorICAgICAgICBhZXR5cGVzLkNvbXBhcmlzb24oMSwgJzwgICAnLCAxMCksCisgICAgICAgIGFldHlwZXMuTG9naWNhbCgnbm90ICcsIDEpLAorICAgICAgICBhZXR5cGVzLkludGxUZXh0KDAsIDAsICdpbnRlcm5hdGlvbmFsIHRleHQnKSwKKyAgICAgICAgYWV0eXBlcy5JbnRsV3JpdGluZ0NvZGUoMCwwKSwKKyAgICAgICAgYWV0eXBlcy5RRFBvaW50KDUwLDEwMCksCisgICAgICAgIGFldHlwZXMuUURSZWN0YW5nbGUoNTAsMTAwLDE1MCwyMDApLAorICAgICAgICBhZXR5cGVzLlJHQkNvbG9yKDB4NzAwMCwgMHg2MDAwLCAweDUwMDApLAorICAgICAgICBhZXR5cGVzLlVua25vd24oJ3h4eHgnLCAndW5rbm93biB0eXBlIGRhdGEnKSwKKyAgICAgICAgYWV0eXBlcy5DaGFyYWN0ZXIoMSksCisgICAgICAgIGFldHlwZXMuQ2hhcmFjdGVyKDIsIGFldHlwZXMuTGluZSgyKSksCisgICAgXQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX3N0cmluZyhzZWxmKToKKyAgICAgICAgbyA9ICdhIHN0cmluZycKKyAgICAgICAgcGFja2VkID0gYWVwYWNrLnBhY2sobykKKyAgICAgICAgdW5wYWNrZWQgPSBhZXBhY2sudW5wYWNrKHBhY2tlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLCB1bnBhY2tlZCkKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcF9pbnQoc2VsZik6CisgICAgICAgIG8gPSAxMgorICAgICAgICBwYWNrZWQgPSBhZXBhY2sucGFjayhvKQorICAgICAgICB1bnBhY2tlZCA9IGFlcGFjay51bnBhY2socGFja2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8sIHVucGFja2VkKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX2Zsb2F0KHNlbGYpOgorICAgICAgICBvID0gMTIuMQorICAgICAgICBwYWNrZWQgPSBhZXBhY2sucGFjayhvKQorICAgICAgICB1bnBhY2tlZCA9IGFlcGFjay51bnBhY2socGFja2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8sIHVucGFja2VkKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX05vbmUoc2VsZik6CisgICAgICAgIG8gPSBOb25lCisgICAgICAgIHBhY2tlZCA9IGFlcGFjay5wYWNrKG8pCisgICAgICAgIHVucGFja2VkID0gYWVwYWNrLnVucGFjayhwYWNrZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobywgdW5wYWNrZWQpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfYWVvYmplY3RzKHNlbGYpOgorICAgICAgICBmb3IgbyBpbiBzZWxmLk9CSkVDVFM6CisgICAgICAgICAgICBwYWNrZWQgPSBhZXBhY2sucGFjayhvKQorICAgICAgICAgICAgdW5wYWNrZWQgPSBhZXBhY2sudW5wYWNrKHBhY2tlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvKSwgcmVwcih1bnBhY2tlZCkpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfRlNTcGVjKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgQ2FyYm9uLkZpbGUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoQ2FyYm9uLkZpbGUsICJGU1NwZWMiKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBvID0gQ2FyYm9uLkZpbGUuRlNTcGVjKG9zLmN1cmRpcikKKyAgICAgICAgcGFja2VkID0gYWVwYWNrLnBhY2sobykKKyAgICAgICAgdW5wYWNrZWQgPSBhZXBhY2sudW5wYWNrKHBhY2tlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLmFzX3BhdGhuYW1lKCksIHVucGFja2VkLmFzX3BhdGhuYW1lKCkpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfQWxpYXMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBDYXJib24uRmlsZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIoQ2FyYm9uLkZpbGUsICJGU1NwZWMiKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBvID0gQ2FyYm9uLkZpbGUuRlNTcGVjKG9zLmN1cmRpcikuTmV3QWxpYXNNaW5pbWFsKCkKKyAgICAgICAgcGFja2VkID0gYWVwYWNrLnBhY2sobykKKyAgICAgICAgdW5wYWNrZWQgPSBhZXBhY2sudW5wYWNrKHBhY2tlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLkZTUmVzb2x2ZUFsaWFzKE5vbmUpWzBdLmFzX3BhdGhuYW1lKCksCisgICAgICAgICAgICB1bnBhY2tlZC5GU1Jlc29sdmVBbGlhcyhOb25lKVswXS5hc19wYXRobmFtZSgpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RBZXBhY2spCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYWlmYy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FpZmMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiM2QxOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FpZmMucHkKQEAgLTAsMCArMSwxNjAgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBydW5fdW5pdHRlc3QsIFRFU1RGTgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBpbworCitpbXBvcnQgYWlmYworCisKK2NsYXNzIEFJRkNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mID0gc2VsZi5mb3V0ID0gTm9uZQorICAgICAgICBzZWxmLnNuZGZpbGVwYXRoID0gZmluZGZpbGUoJ1NpbmUtMTAwMEh6LTMwMG1zLmFpZicpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuZm91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmZvdXQuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IChhaWZjLkVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3NraXB1bmtub3duKHNlbGYpOgorICAgICAgICAjSXNzdWUgMjI0NQorICAgICAgICAjVGhpcyBmaWxlIGNvbnRhaW5zIGNodW5rIHR5cGVzIGFpZmMgZG9lc24ndCByZWNvZ25pemUuCisgICAgICAgIHNlbGYuZiA9IGFpZmMub3BlbihzZWxmLnNuZGZpbGVwYXRoKQorCisgICAgZGVmIHRlc3RfcGFyYW1zKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuY2hhbm5lbHMoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHNhbXB3aWR0aCgpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0ZnJhbWVyYXRlKCksIDQ4MDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmZyYW1lcygpLCAxNDQwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGNvbXB0eXBlKCksICdOT05FJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGNvbXBuYW1lKCksICdub3QgY29tcHJlc3NlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRwYXJhbXMoKSwgKDIsIDIsIDQ4MDAwLCAxNDQwMCwgJ05PTkUnLCAnbm90IGNvbXByZXNzZWQnKSkKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoMiksICdceDAwXHgwMFx4MDBceDAwXHgwYlx4ZDRceDBiXHhkNCcpCisgICAgICAgIGYucmV3aW5kKCkKKyAgICAgICAgcG9zMCA9IGYudGVsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoMiksICdceDAwXHgwMFx4MDBceDAwXHgwYlx4ZDRceDBiXHhkNCcpCisgICAgICAgIHBvczIgPSBmLnRlbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvczIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDIpLCAnXHgxN3RceDE3dCJceGFkIlx4YWQnKQorICAgICAgICBmLnNldHBvcyhwb3MyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcygyKSwgJ1x4MTd0XHgxN3QiXHhhZCJceGFkJykKKyAgICAgICAgZi5zZXRwb3MocG9zMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoMiksICdceDAwXHgwMFx4MDBceDAwXHgwYlx4ZDRceDBiXHhkNCcpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihzZWxmLnNuZGZpbGVwYXRoKQorICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgZm91dC5haWZjKCkKKyAgICAgICAgZm91dC5zZXRwYXJhbXMoZi5nZXRwYXJhbXMoKSkKKyAgICAgICAgZm9yIGZyYW1lIGluIHJhbmdlKGYuZ2V0bmZyYW1lcygpKToKKyAgICAgICAgICAgIGZvdXQud3JpdGVmcmFtZXMoZi5yZWFkZnJhbWVzKDEpKQorICAgICAgICBmb3V0LmNsb3NlKCkKKyAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihURVNURk4sICdyYicpCisgICAgICAgIGYucmV3aW5kKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHBhcmFtcygpLCBmb3V0LmdldHBhcmFtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcyg1KSwgZm91dC5yZWFkZnJhbWVzKDUpKQorCisgICAgZGVmIHRlc3RfY29tcHJlc3Moc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKKyAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihURVNURk4sICd3YicpCisgICAgICAgIGZvdXQuYWlmYygpCisgICAgICAgIGZvdXQuc2V0bmNoYW5uZWxzKGYuZ2V0bmNoYW5uZWxzKCkpCisgICAgICAgIGZvdXQuc2V0c2FtcHdpZHRoKGYuZ2V0c2FtcHdpZHRoKCkpCisgICAgICAgIGZvdXQuc2V0ZnJhbWVyYXRlKGYuZ2V0ZnJhbWVyYXRlKCkpCisgICAgICAgIGZvdXQuc2V0Y29tcHR5cGUoJ1VMQVcnLCAnZm9vJykKKyAgICAgICAgZm9yIGZyYW1lIGluIHJhbmdlKGYuZ2V0bmZyYW1lcygpKToKKyAgICAgICAgICAgIGZvdXQud3JpdGVmcmFtZXMoZi5yZWFkZnJhbWVzKDEpKQorICAgICAgICBmb3V0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKAorICAgICAgICAgICAgb3Muc3RhdChURVNURk4pLnN0X3NpemUsCisgICAgICAgICAgICBvcy5zdGF0KHNlbGYuc25kZmlsZXBhdGgpLnN0X3NpemUqMC43NSwKKyAgICAgICAgICAgICkKKyAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihURVNURk4sICdyYicpCisgICAgICAgIGYucmV3aW5kKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHBhcmFtcygpWzA6M10sIGZvdXQuZ2V0cGFyYW1zKClbMDozXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3V0LmdldGNvbXB0eXBlKCksICdVTEFXJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3V0LmdldGNvbXBuYW1lKCksICdmb28nKQorICAgICAgICAjIFhYWDogdGhpcyB0ZXN0IGZhaWxzLCBub3Qgc3VyZSBpZiBpdCBzaG91bGQgc3VjY2VlZCBvciBub3QKKyAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcyg1KSwgZm91dC5yZWFkZnJhbWVzKDUpKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIFdyYXBmaWxlKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSk6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlID0gb3BlbihmaWxlLCAncmInKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOiByZXR1cm4gZ2V0YXR0cihzZWxmLmZpbGUsIGF0dHIpCisgICAgICAgIHRlc3RmaWxlID0gV3JhcGZpbGUoc2VsZi5zbmRmaWxlcGF0aCkKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3Blbih0ZXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5jbG9zZWQsIEZhbHNlKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5jbG9zZWQsIFRydWUpCisgICAgICAgIHRlc3RmaWxlID0gb3BlbihURVNURk4sICd3YicpCisgICAgICAgIGZvdXQgPSBhaWZjLm9wZW4odGVzdGZpbGUsICd3YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGVzdGZpbGUuY2xvc2VkKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFpZmMuRXJyb3IpOgorICAgICAgICAgICAgZm91dC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0ZmlsZS5jbG9zZWQpCisgICAgICAgIGZvdXQuY2xvc2UoKSAjIGRvIG5vdGhpbmcKKworCitjbGFzcyBBSUZDTG93TGV2ZWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JlYWRfd3JpdHRlbihzZWxmKToKKyAgICAgICAgZGVmIHJlYWRfd3JpdHRlbihzZWxmLCB3aGF0KToKKyAgICAgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgICAgIGdldGF0dHIoYWlmYywgJ193cml0ZV8nICsgd2hhdCkoZiwgeCkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoYWlmYywgJ19yZWFkXycgKyB3aGF0KShmKQorICAgICAgICBmb3IgeCBpbiAoLTEsIDAsIDAuMSwgMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfd3JpdHRlbih4LCAnZmxvYXQnKSwgeCkKKyAgICAgICAgZm9yIHggaW4gKGZsb2F0KCdOYU4nKSwgZmxvYXQoJ0luZicpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF93cml0dGVuKHgsICdmbG9hdCcpLCBhaWZjLl9IVUdFX1ZBTCkKKyAgICAgICAgZm9yIHggaW4gKGInJywgYidmb28nLCBiJ2EnICogMjU1KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF93cml0dGVuKHgsICdzdHJpbmcnKSwgeCkKKyAgICAgICAgZm9yIHggaW4gKC0weDdGRkZGRkZGLCAtMSwgMCwgMSwgMHg3RkZGRkZGRik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfd3JpdHRlbih4LCAnbG9uZycpLCB4KQorICAgICAgICBmb3IgeCBpbiAoMCwgMSwgMHhGRkZGRkZGRik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfd3JpdHRlbih4LCAndWxvbmcnKSwgeCkKKyAgICAgICAgZm9yIHggaW4gKC0weDdGRkYsIC0xLCAwLCAxLCAweDdGRkYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3dyaXR0ZW4oeCwgJ3Nob3J0JyksIHgpCisgICAgICAgIGZvciB4IGluICgwLCAxLCAweEZGRkYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3dyaXR0ZW4oeCwgJ3VzaG9ydCcpLCB4KQorCisgICAgZGVmIHRlc3RfcmVhZF9yYWlzZXMoc2VsZik6CisgICAgICAgIGYgPSBpby5CeXRlc0lPKGInXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBhaWZjLl9yZWFkX3Vsb25nLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgYWlmYy5fcmVhZF9sb25nLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgYWlmYy5fcmVhZF91c2hvcnQsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBhaWZjLl9yZWFkX3Nob3J0LCBmKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbG9uZ19zdHJpbmdfcmFpc2VzKHNlbGYpOgorICAgICAgICBmID0gaW8uQnl0ZXNJTygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBhaWZjLl93cml0ZV9zdHJpbmcoZiwgYid0b28gbG9uZycgKiAyNTUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChBSUZDVGVzdCkKKyAgICBydW5fdW5pdHRlc3QoQUlGQ0xvd0xldmVsVGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYWwucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ODg1NzZkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYWwucHkKQEAgLTAsMCArMSwyNSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIiIiV2hpbXB5IHRlc3Qgc2NyaXB0IGZvciB0aGUgYWwgbW9kdWxlCisgICBSb2dlciBFLiBNYXNzZQorIiIiCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCithbCA9IGltcG9ydF9tb2R1bGUoJ2FsJywgZGVwcmVjYXRlZD1UcnVlKQorCithbGF0dHJzID0gWydfX2RvY19fJywgJ19fbmFtZV9fJywgJ2dldGRlZmF1bHQnLCAnZ2V0bWlubWF4JywgJ2dldG5hbWUnLCAnZ2V0cGFyYW1zJywKKyAgICAgICAgICAgJ25ld2NvbmZpZycsICdvcGVucG9ydCcsICdxdWVyeXBhcmFtcycsICdzZXRwYXJhbXMnXQorCisjIFRoaXMgaXMgYSB2ZXJ5IHVub2J0cnVzaXZlIHRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGFsIG1vZHVsZSBhbmQgYWxsIGl0cworIyBhdHRyaWJ1dGVzLiAgTW9yZSBjb21wcmVoZW5zaXZlIGV4YW1wbGVzIGNhbiBiZSBmb3VuZCBpbiBEZW1vL2FsCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIHRvdWNoIGFsbCB0aGUgYXR0cmlidXRlcyBvZiBhbCB3aXRob3V0IGRvaW5nIGFueXRoaW5nCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ1RvdWNoaW5nIGFsIG1vZHVsZSBhdHRyaWJ1dGVzLi4uJworICAgIGZvciBhdHRyIGluIGFsYXR0cnM6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAndG91Y2hpbmc6ICcsIGF0dHIKKyAgICAgICAgZ2V0YXR0cihhbCwgYXR0cikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hbnlkYm0ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hbnlkYm0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxZGQwYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FueWRibS5weQpAQCAtMCwwICsxLDk3IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJUZXN0IHNjcmlwdCBmb3IgdGhlIGFueWRibSBtb2R1bGUKKyAgIGJhc2VkIG9uIHRlc3RkdW1iZGJtLnB5CisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBnbG9iCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitfZm5hbWUgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisKKyMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKK2FueWRibSA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdhbnlkYm0nLCBkZXByZWNhdGVkPVRydWUpCisKK2RlZiBfZGVsZXRlX2ZpbGVzKCk6CisgICAgIyB3ZSBkb24ndCBrbm93IHRoZSBwcmVjaXNlIG5hbWUgdGhlIHVuZGVybHlpbmcgZGF0YWJhc2UgdXNlcworICAgICMgc28gd2UgdXNlIGdsb2IgdG8gbG9jYXRlIGFsbCBuYW1lcworICAgIGZvciBmIGluIGdsb2IuZ2xvYihfZm5hbWUgKyAiKiIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoZikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKK2NsYXNzIEFueURCTVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBfZGljdCA9IHsnMCc6ICcnLAorICAgICAgICAgICAgICdhJzogJ1B5dGhvbjonLAorICAgICAgICAgICAgICdiJzogJ1Byb2dyYW1taW5nJywKKyAgICAgICAgICAgICAnYyc6ICd0aGUnLAorICAgICAgICAgICAgICdkJzogJ3dheScsCisgICAgICAgICAgICAgJ2YnOiAnR3VpZG8nLAorICAgICAgICAgICAgICdnJzogJ2ludGVuZGVkJworICAgICAgICAgICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzKQorCisgICAgZGVmIHRlc3RfYW55ZGJtX2NyZWF0aW9uKHNlbGYpOgorICAgICAgICBmID0gYW55ZGJtLm9wZW4oX2ZuYW1lLCAnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5rZXlzKCksIFtdKQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2RpY3Q6CisgICAgICAgICAgICBmW2tleV0gPSBzZWxmLl9kaWN0W2tleV0KKyAgICAgICAgc2VsZi5yZWFkX2hlbHBlcihmKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2FueWRibV9tb2RpZmljYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuaW5pdF9kYigpCisgICAgICAgIGYgPSBhbnlkYm0ub3BlbihfZm5hbWUsICdjJykKKyAgICAgICAgc2VsZi5fZGljdFsnZyddID0gZlsnZyddID0gImluZGVudGVkIgorICAgICAgICBzZWxmLnJlYWRfaGVscGVyKGYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfYW55ZGJtX3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYuaW5pdF9kYigpCisgICAgICAgIGYgPSBhbnlkYm0ub3BlbihfZm5hbWUsICdyJykKKyAgICAgICAgc2VsZi5yZWFkX2hlbHBlcihmKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2FueWRibV9rZXlzKHNlbGYpOgorICAgICAgICBzZWxmLmluaXRfZGIoKQorICAgICAgICBmID0gYW55ZGJtLm9wZW4oX2ZuYW1lLCAncicpCisgICAgICAgIGtleXMgPSBzZWxmLmtleXNfaGVscGVyKGYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHJlYWRfaGVscGVyKHNlbGYsIGYpOgorICAgICAgICBrZXlzID0gc2VsZi5rZXlzX2hlbHBlcihmKQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2RpY3Q6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RpY3Rba2V5XSwgZltrZXldKQorCisgICAgZGVmIGluaXRfZGIoc2VsZik6CisgICAgICAgIGYgPSBhbnlkYm0ub3BlbihfZm5hbWUsICduJykKKyAgICAgICAgZm9yIGsgaW4gc2VsZi5fZGljdDoKKyAgICAgICAgICAgIGZba10gPSBzZWxmLl9kaWN0W2tdCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIGtleXNfaGVscGVyKHNlbGYsIGYpOgorICAgICAgICBrZXlzID0gZi5rZXlzKCkKKyAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgZGtleXMgPSBzZWxmLl9kaWN0LmtleXMoKQorICAgICAgICBka2V5cy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBka2V5cykKKyAgICAgICAgcmV0dXJuIGtleXMKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgX2RlbGV0ZV9maWxlcygpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9kZWxldGVfZmlsZXMoKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdHJ5OgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEFueURCTVRlc3RDYXNlKQorICAgIGZpbmFsbHk6CisgICAgICAgIF9kZWxldGVfZmlsZXMoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hcHBsZXNpbmdsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FwcGxlc2luZ2xlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZWZmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hcHBsZXNpbmdsZS5weQpAQCAtMCwwICsxLDcxIEBACisjIENvcHlyaWdodCAoQykgMjAwMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBzdHJ1Y3QKKworTWFjT1MgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnTWFjT1MnKQorIyBUaGUgZm9sbG93aW5nIHNob3VsZCBleGlzdCBpZiBNYWNPUyBkb2VzLgoraW1wb3J0IGFwcGxlc2luZ2xlCisKK0FTX01BR0lDPTB4MDAwNTE2MDAKK0FTX1ZFUlNJT049MHgwMDAyMDAwMAorZGF0YWZvcmtkYXRhID0gJ2hlbGxvXHJcMHdvcmxkXG4nCityZXNvdXJjZWZvcmtkYXRhID0gJ2dvb2RieWVcbmNydWVsXDB3b3JsZFxyJworCithcHBsZXNpbmdsZWRhdGEgPSBzdHJ1Y3QucGFjaygiPmxsMTZzaCIsIEFTX01BR0lDLCBBU19WRVJTSU9OLCAiZm9vIiwgMikgKyBcCisgICAgc3RydWN0LnBhY2soIj5sbGxsbGwiLCAxLCA1MCwgbGVuKGRhdGFmb3JrZGF0YSksCisgICAgICAgIDIsIDUwK2xlbihkYXRhZm9ya2RhdGEpLCBsZW4ocmVzb3VyY2Vmb3JrZGF0YSkpICsgXAorICAgIGRhdGFmb3JrZGF0YSArIFwKKyAgICByZXNvdXJjZWZvcmtkYXRhCitURVNURk4yID0gdGVzdF9zdXBwb3J0LlRFU1RGTiArICcyJworCitjbGFzcyBUZXN0QXBwbGVzaW5nbGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3cnKQorICAgICAgICBmcC53cml0ZShhcHBsZXNpbmdsZWRhdGEpCisgICAgICAgIGZwLmNsb3NlKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTjIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBjb21wYXJlRGF0YShzZWxmLCBpc3JmLCBkYXRhKToKKyAgICAgICAgaWYgaXNyZjoKKyAgICAgICAgICAgIGZwID0gTWFjT1Mub3BlbnJmKFRFU1RGTjIsICcqcmInKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTjIsICdyYicpCisgICAgICAgIGZpbGVkYXRhID0gZnAucmVhZCgxMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGZpbGVkYXRhKQorCisgICAgZGVmIHRlc3RfYXBwbGVzaW5nbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4yKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGFwcGxlc2luZ2xlLmRlY29kZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBURVNURk4yKQorICAgICAgICBzZWxmLmNvbXBhcmVEYXRhKEZhbHNlLCBkYXRhZm9ya2RhdGEpCisgICAgICAgIHNlbGYuY29tcGFyZURhdGEoVHJ1ZSwgcmVzb3VyY2Vmb3JrZGF0YSkKKworICAgIGRlZiB0ZXN0X2FwcGxlc2luZ2xlX3Jlc29ubHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4yKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGFwcGxlc2luZ2xlLmRlY29kZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBURVNURk4yLCByZXNvbmx5PVRydWUpCisgICAgICAgIHNlbGYuY29tcGFyZURhdGEoRmFsc2UsIHJlc291cmNlZm9ya2RhdGEpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RBcHBsZXNpbmdsZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZmRmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQpAQCAtMCwwICsxLDQ3NjMgQEAKKyMgQXV0aG9yOiBTdGV2ZW4gSi4gQmV0aGFyZCA8c3RldmVuLmJldGhhcmRAZ21haWwuY29tPi4KKworaW1wb3J0IGNvZGVjcworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXh0d3JhcAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBhcmdwYXJzZQorCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitjbGFzcyBTdGRJT0J1ZmZlcihTdHJpbmdJTyk6CisgICAgcGFzcworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgYXNzZXJ0RXF1YWwoc2VsZiwgb2JqMSwgb2JqMik6CisgICAgICAgIGlmIG9iajEgIT0gb2JqMjoKKyAgICAgICAgICAgIHByaW50KCcnKQorICAgICAgICAgICAgcHJpbnQocmVwcihvYmoxKSkKKyAgICAgICAgICAgIHByaW50KHJlcHIob2JqMikpCisgICAgICAgICAgICBwcmludChvYmoxKQorICAgICAgICAgICAgcHJpbnQob2JqMikKKyAgICAgICAgc3VwZXIoVGVzdENhc2UsIHNlbGYpLmFzc2VydEVxdWFsKG9iajEsIG9iajIpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgVGhlIHRlc3RzIGFzc3VtZSB0aGF0IGxpbmUgd3JhcHBpbmcgb2NjdXJzIGF0IDgwIGNvbHVtbnMsIGJ1dCB0aGlzCisgICAgICAgICMgYmVoYXZpb3VyIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIENPTFVNTlMgZW52aXJvbm1lbnQKKyAgICAgICAgIyB2YXJpYWJsZS4gIFRvIGVuc3VyZSB0aGF0IHRoaXMgYXNzdW1wdGlvbiBpcyB0cnVlLCB1bnNldCBDT0xVTU5TLgorICAgICAgICBlbnYgPSB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpCisgICAgICAgIGVudi51bnNldCgiQ09MVU1OUyIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChlbnYuX19leGl0X18pCisKKworY2xhc3MgVGVtcERpck1peGluKG9iamVjdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGVtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5vbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoc2VsZi50ZW1wX2RpcikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRfZGlyKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVtcF9kaXIsIFRydWUpCisKKyAgICBkZWYgY3JlYXRlX3JlYWRvbmx5X2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgZmlsZW5hbWUpCisgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUoZmlsZW5hbWUpCisgICAgICAgIG9zLmNobW9kKGZpbGVfcGF0aCwgc3RhdC5TX0lSRUFEKQorCitjbGFzcyBTaWcob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCisKKworY2xhc3MgTlMob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGt3YXJncykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc29ydGVkX2l0ZW1zID0gc29ydGVkKHNlbGYuX19kaWN0X18uaXRlbXMoKSkKKyAgICAgICAga3dhcmdfc3RyID0gJywgJy5qb2luKFsnJXM9JXInICUgdHVwIGZvciB0dXAgaW4gc29ydGVkX2l0ZW1zXSkKKyAgICAgICAgcmV0dXJuICclcyglcyknICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGt3YXJnX3N0cikKKworICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiB2YXJzKHNlbGYpID09IHZhcnMob3RoZXIpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKKworCitjbGFzcyBBcmd1bWVudFBhcnNlckVycm9yKEV4Y2VwdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBlcnJvcl9jb2RlPU5vbmUpOgorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbWVzc2FnZSwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi5zdGRvdXQgPSBzdGRvdXQKKyAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRlcnIKKyAgICAgICAgc2VsZi5lcnJvcl9jb2RlID0gZXJyb3JfY29kZQorCisKK2RlZiBzdGRlcnJfdG9fcGFyc2VyX2Vycm9yKHBhcnNlX2FyZ3MsICphcmdzLCAqKmt3YXJncyk6CisgICAgIyBpZiB0aGlzIGlzIGJlaW5nIGNhbGxlZCByZWN1cnNpdmVseSBhbmQgc3RkZXJyIG9yIHN0ZG91dCBpcyBhbHJlYWR5IGJlaW5nCisgICAgIyByZWRpcmVjdGVkLCBzaW1wbHkgY2FsbCB0aGUgZnVuY3Rpb24gYW5kIGxldCB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uCisgICAgIyBjYXRjaCB0aGUgZXhjZXB0aW9uCisgICAgaWYgaXNpbnN0YW5jZShzeXMuc3RkZXJyLCBTdGRJT0J1ZmZlcikgb3IgaXNpbnN0YW5jZShzeXMuc3Rkb3V0LCBTdGRJT0J1ZmZlcik6CisgICAgICAgIHJldHVybiBwYXJzZV9hcmdzKCphcmdzLCAqKmt3YXJncykKKworICAgICMgaWYgdGhpcyBpcyBub3QgYmVpbmcgY2FsbGVkIHJlY3Vyc2l2ZWx5LCByZWRpcmVjdCBzdGRlcnIgYW5kCisgICAgIyB1c2UgaXQgYXMgdGhlIEFyZ3VtZW50UGFyc2VyRXJyb3IgbWVzc2FnZQorICAgIG9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgb2xkX3N0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICBzeXMuc3Rkb3V0ID0gU3RkSU9CdWZmZXIoKQorICAgIHN5cy5zdGRlcnIgPSBTdGRJT0J1ZmZlcigpCisgICAgdHJ5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBwYXJzZV9hcmdzKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGZvciBrZXkgaW4gbGlzdCh2YXJzKHJlc3VsdCkpOgorICAgICAgICAgICAgICAgIGlmIGdldGF0dHIocmVzdWx0LCBrZXkpIGlzIHN5cy5zdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIocmVzdWx0LCBrZXksIG9sZF9zdGRvdXQpCisgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihyZXN1bHQsIGtleSkgaXMgc3lzLnN0ZGVycjoKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihyZXN1bHQsIGtleSwgb2xkX3N0ZGVycikKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICAgICBjb2RlID0gc3lzLmV4Y19pbmZvKClbMV0uY29kZQorICAgICAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dC5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzdGRlcnIgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50UGFyc2VyRXJyb3IoIlN5c3RlbUV4aXQiLCBzdGRvdXQsIHN0ZGVyciwgY29kZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuc3Rkb3V0ID0gb2xkX3N0ZG91dAorICAgICAgICBzeXMuc3RkZXJyID0gb2xkX3N0ZGVycgorCisKK2NsYXNzIEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKToKKworICAgIGRlZiBwYXJzZV9hcmdzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHBhcnNlX2FyZ3MgPSBzdXBlcihFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlciwgc2VsZikucGFyc2VfYXJncworICAgICAgICByZXR1cm4gc3RkZXJyX3RvX3BhcnNlcl9lcnJvcihwYXJzZV9hcmdzLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZXhpdChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBleGl0ID0gc3VwZXIoRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIsIHNlbGYpLmV4aXQKKyAgICAgICAgcmV0dXJuIHN0ZGVycl90b19wYXJzZXJfZXJyb3IoZXhpdCwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGVycm9yID0gc3VwZXIoRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIsIHNlbGYpLmVycm9yCisgICAgICAgIHJldHVybiBzdGRlcnJfdG9fcGFyc2VyX2Vycm9yKGVycm9yLCAqYXJncywgKiprd2FyZ3MpCisKKworY2xhc3MgUGFyc2VyVGVzdGVyTWV0YWNsYXNzKHR5cGUpOgorICAgICIiIkFkZHMgcGFyc2VyIHRlc3RzIHVzaW5nIHRoZSBjbGFzcyBhdHRyaWJ1dGVzLgorCisgICAgQ2xhc3NlcyBvZiB0aGlzIHR5cGUgc2hvdWxkIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyAtLSBhIGxpc3Qgb2YgU2lnIG9iamVjdHMgd2hpY2ggc3BlY2lmeQorICAgICAgICB0aGUgc2lnbmF0dXJlcyBvZiBBcmd1bWVudCBvYmplY3RzIHRvIGJlIGNyZWF0ZWQKKyAgICBmYWlsdXJlcyAtLSBhIGxpc3Qgb2YgYXJncyBsaXN0cyB0aGF0IHNob3VsZCBjYXVzZSB0aGUgcGFyc2VyCisgICAgICAgIHRvIGZhaWwKKyAgICBzdWNjZXNzZXMgLS0gYSBsaXN0IG9mIChpbml0aWFsX2FyZ3MsIG9wdGlvbnMsIHJlbWFpbmluZ19hcmdzKSB0dXBsZXMKKyAgICAgICAgd2hlcmUgaW5pdGlhbF9hcmdzIHNwZWNpZmllcyB0aGUgc3RyaW5nIGFyZ3MgdG8gYmUgcGFyc2VkLAorICAgICAgICBvcHRpb25zIGlzIGEgZGljdCB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdmFycygpIG9mIHRoZSBvcHRpb25zCisgICAgICAgIHBhcnNlZCBvdXQgb2YgaW5pdGlhbF9hcmdzLCBhbmQgcmVtYWluaW5nX2FyZ3Mgc2hvdWxkIGJlIGFueQorICAgICAgICByZW1haW5pbmcgdW5wYXJzZWQgYXJndW1lbnRzCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYm9keWRpY3QpOgorICAgICAgICBpZiBuYW1lID09ICdQYXJzZXJUZXN0Q2FzZSc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGRlZmF1bHQgcGFyc2VyIHNpZ25hdHVyZSBpcyBlbXB0eQorICAgICAgICBpZiBub3QgaGFzYXR0cihjbHMsICdwYXJzZXJfc2lnbmF0dXJlJyk6CisgICAgICAgICAgICBjbHMucGFyc2VyX3NpZ25hdHVyZSA9IFNpZygpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNscywgJ3BhcnNlcl9jbGFzcycpOgorICAgICAgICAgICAgY2xzLnBhcnNlcl9jbGFzcyA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyCisKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyBmdW5jdGlvbnMgZm9yIGFkZGluZyBvcHRpb25hbCBhcmd1bWVudHMKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZGVmIG5vX2dyb3VwcyhwYXJzZXIsIGFyZ3VtZW50X3NpZ25hdHVyZXMpOgorICAgICAgICAgICAgIiIiQWRkIGFsbCBhcmd1bWVudHMgZGlyZWN0bHkgdG8gdGhlIHBhcnNlciIiIgorICAgICAgICAgICAgZm9yIHNpZyBpbiBhcmd1bWVudF9zaWduYXR1cmVzOgorICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoKnNpZy5hcmdzLCAqKnNpZy5rd2FyZ3MpCisKKyAgICAgICAgZGVmIG9uZV9ncm91cChwYXJzZXIsIGFyZ3VtZW50X3NpZ25hdHVyZXMpOgorICAgICAgICAgICAgIiIiQWRkIGFsbCBhcmd1bWVudHMgdW5kZXIgYSBzaW5nbGUgZ3JvdXAgaW4gdGhlIHBhcnNlciIiIgorICAgICAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdmb28nKQorICAgICAgICAgICAgZm9yIHNpZyBpbiBhcmd1bWVudF9zaWduYXR1cmVzOgorICAgICAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgqc2lnLmFyZ3MsICoqc2lnLmt3YXJncykKKworICAgICAgICBkZWYgbWFueV9ncm91cHMocGFyc2VyLCBhcmd1bWVudF9zaWduYXR1cmVzKToKKyAgICAgICAgICAgICIiIkFkZCBlYWNoIGFyZ3VtZW50IGluIGl0cyBvd24gZ3JvdXAgdG8gdGhlIHBhcnNlciIiIgorICAgICAgICAgICAgZm9yIGksIHNpZyBpbiBlbnVtZXJhdGUoYXJndW1lbnRfc2lnbmF0dXJlcyk6CisgICAgICAgICAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdmb286JWknICUgaSkKKyAgICAgICAgICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoKnNpZy5hcmdzLCAqKnNpZy5rd2FyZ3MpCisKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIGZ1bmN0aW9ucyBmb3IgcGFyc2luZyBhcmdzCisgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZGVmIGxpc3RhcmdzKHBhcnNlciwgYXJncyk6CisgICAgICAgICAgICAiIiJQYXJzZSB0aGUgYXJncyBieSBwYXNzaW5nIGluIGEgbGlzdCIiIgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICAgICAgZGVmIHN5c2FyZ3MocGFyc2VyLCBhcmdzKToKKyAgICAgICAgICAgICIiIlBhcnNlIHRoZSBhcmdzIGJ5IGRlZmF1bHRpbmcgdG8gc3lzLmFyZ3YiIiIKKyAgICAgICAgICAgIG9sZF9zeXNfYXJndiA9IHN5cy5hcmd2CisgICAgICAgICAgICBzeXMuYXJndiA9IFtvbGRfc3lzX2FyZ3ZbMF1dICsgYXJncworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN5cy5hcmd2ID0gb2xkX3N5c19hcmd2CisKKyAgICAgICAgIyBjbGFzcyB0aGF0IGhvbGRzIHRoZSBjb21iaW5hdGlvbiBvZiBvbmUgb3B0aW9uYWwgYXJndW1lbnQKKyAgICAgICAgIyBhZGRpdGlvbiBtZXRob2QgYW5kIG9uZSBhcmcgcGFyc2luZyBtZXRob2QKKyAgICAgICAgY2xhc3MgQWRkVGVzdHMob2JqZWN0KToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3Rlcl9jbHMsIGFkZF9hcmd1bWVudHMsIHBhcnNlX2FyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9hcmd1bWVudHMgPSBhZGRfYXJndW1lbnRzCisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfYXJncyA9IHBhcnNlX2FyZ3MKKworICAgICAgICAgICAgICAgIGFkZF9hcmd1bWVudHNfbmFtZSA9IHNlbGYuX2FkZF9hcmd1bWVudHMuX19uYW1lX18KKyAgICAgICAgICAgICAgICBwYXJzZV9hcmdzX25hbWUgPSBzZWxmLl9wYXJzZV9hcmdzLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgZm9yIHRlc3RfZnVuYyBpbiBbc2VsZi50ZXN0X2ZhaWx1cmVzLCBzZWxmLnRlc3Rfc3VjY2Vzc2VzXToKKyAgICAgICAgICAgICAgICAgICAgZnVuY19uYW1lID0gdGVzdF9mdW5jLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgIG5hbWVzID0gZnVuY19uYW1lLCBhZGRfYXJndW1lbnRzX25hbWUsIHBhcnNlX2FyZ3NfbmFtZQorICAgICAgICAgICAgICAgICAgICB0ZXN0X25hbWUgPSAnXycuam9pbihuYW1lcykKKworICAgICAgICAgICAgICAgICAgICBkZWYgd3JhcHBlcihzZWxmLCB0ZXN0X2Z1bmM9dGVzdF9mdW5jKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZnVuYyhzZWxmKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLl9fbmFtZV9fID0gdGVzdF9uYW1lCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIodGVzdGVyX2NscywgdGVzdF9uYW1lLCB3cmFwcGVyKQorCisgICAgICAgICAgICBkZWYgX2dldF9wYXJzZXIoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBhcmdzID0gdGVzdGVyLnBhcnNlcl9zaWduYXR1cmUuYXJncworICAgICAgICAgICAgICAgIGt3YXJncyA9IHRlc3Rlci5wYXJzZXJfc2lnbmF0dXJlLmt3YXJncworICAgICAgICAgICAgICAgIHBhcnNlciA9IHRlc3Rlci5wYXJzZXJfY2xhc3MoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9hcmd1bWVudHMocGFyc2VyLCB0ZXN0ZXIuYXJndW1lbnRfc2lnbmF0dXJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X2ZhaWx1cmVzKHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgZm9yIGFyZ3Nfc3RyIGluIHRlc3Rlci5mYWlsdXJlczoKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3Nfc3RyLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VzID0gdGVzdGVyLmFzc2VydFJhaXNlcworICAgICAgICAgICAgICAgICAgICByYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgcGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3MpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X3N1Y2Nlc3NlcyhzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIodGVzdGVyKQorICAgICAgICAgICAgICAgIGZvciBhcmdzLCBleHBlY3RlZF9ucyBpbiB0ZXN0ZXIuc3VjY2Vzc2VzOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZ3MsIHN0cik6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9ucyA9IHNlbGYuX3BhcnNlX2FyZ3MocGFyc2VyLCBhcmdzKQorICAgICAgICAgICAgICAgICAgICB0ZXN0ZXIuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbnMsIHJlc3VsdF9ucykKKworICAgICAgICAjIGFkZCB0ZXN0cyBmb3IgZWFjaCBjb21iaW5hdGlvbiBvZiBhbiBvcHRpb25hbHMgYWRkaW5nIG1ldGhvZAorICAgICAgICAjIGFuZCBhbiBhcmcgcGFyc2luZyBtZXRob2QKKyAgICAgICAgZm9yIGFkZF9hcmd1bWVudHMgaW4gW25vX2dyb3Vwcywgb25lX2dyb3VwLCBtYW55X2dyb3Vwc106CisgICAgICAgICAgICBmb3IgcGFyc2VfYXJncyBpbiBbbGlzdGFyZ3MsIHN5c2FyZ3NdOgorICAgICAgICAgICAgICAgIEFkZFRlc3RzKGNscywgYWRkX2FyZ3VtZW50cywgcGFyc2VfYXJncykKKworYmFzZXMgPSBUZXN0Q2FzZSwKK1BhcnNlclRlc3RDYXNlID0gUGFyc2VyVGVzdGVyTWV0YWNsYXNzKCdQYXJzZXJUZXN0Q2FzZScsIGJhc2VzLCB7fSkKKworIyA9PT09PT09PT09PT09PT0KKyMgT3B0aW9uYWxzIHRlc3RzCisjID09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRGFzaChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCB3aXRoIGEgc2luZ2xlLWRhc2ggb3B0aW9uIHN0cmluZyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JyldCisgICAgZmFpbHVyZXMgPSBbJy14JywgJ2EnLCAnLS1mb28nLCAnLXggLS1mb28nLCAnLXggLXknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD0nYScpKSwKKyAgICAgICAgKCcteGEnLCBOUyh4PSdhJykpLAorICAgICAgICAoJy14IC0xJywgTlMoeD0nLTEnKSksCisgICAgICAgICgnLXgtMScsIE5TKHg9Jy0xJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRGFzaENvbWJpbmVkKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBzaW5nbGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnLXl5eScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD00MiksCisgICAgICAgIFNpZygnLXonKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLS1mb28nLCAnLXhhJywgJy14IC0tZm9vJywgJy14IC16JywgJy16IC14JywKKyAgICAgICAgICAgICAgICAnLXl4JywgJy15eiBhJywgJy15eXl4JywgJy15eXl6YScsICcteHl6YSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9RmFsc2UsIHl5eT1Ob25lLCB6PU5vbmUpKSwKKyAgICAgICAgKCcteCcsIE5TKHg9VHJ1ZSwgeXl5PU5vbmUsIHo9Tm9uZSkpLAorICAgICAgICAoJy16YScsIE5TKHg9RmFsc2UsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy16IGEnLCBOUyh4PUZhbHNlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteHphJywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteHogYScsIE5TKHg9VHJ1ZSwgeXl5PU5vbmUsIHo9J2EnKSksCisgICAgICAgICgnLXggLXphJywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteCAteiBhJywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteScsIE5TKHg9RmFsc2UsIHl5eT00Miwgej1Ob25lKSksCisgICAgICAgICgnLXl5eScsIE5TKHg9RmFsc2UsIHl5eT00Miwgej1Ob25lKSksCisgICAgICAgICgnLXggLXl5eSAtemEnLCBOUyh4PVRydWUsIHl5eT00Miwgej0nYScpKSwKKyAgICAgICAgKCcteCAteXl5IC16IGEnLCBOUyh4PVRydWUsIHl5eT00Miwgej0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1NpbmdsZURhc2hMb25nKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBtdWx0aS1jaGFyYWN0ZXIgc2luZ2xlLWRhc2ggb3B0aW9uIHN0cmluZyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy1mb28nKV0KKyAgICBmYWlsdXJlcyA9IFsnLWZvbycsICdhJywgJy0tZm9vJywgJy1mb28gLS1mb28nLCAnLWZvbyAteScsICctZm9vYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz1Ob25lKSksCisgICAgICAgICgnLWZvbyBhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJy1mb28gLTEnLCBOUyhmb289Jy0xJykpLAorICAgICAgICAoJy1mbyBhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJy1mIGEnLCBOUyhmb289J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEYXNoU3Vic2V0QW1iaWd1b3VzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IE9wdGlvbmFscyB3aGVyZSBvcHRpb24gc3RyaW5ncyBhcmUgc3Vic2V0cyBvZiBlYWNoIG90aGVyIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLWYnKSwgU2lnKCctZm9vYmFyJyksIFNpZygnLWZvb3JhYicpXQorICAgIGZhaWx1cmVzID0gWyctZicsICctZm9vJywgJy1mbycsICctZm9vIGInLCAnLWZvb2InLCAnLWZvb2JhJywgJy1mb29yYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGY9Tm9uZSwgZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWYgYScsIE5TKGY9J2EnLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZmEnLCBOUyhmPSdhJywgZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvYScsIE5TKGY9J29hJywgZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb2EnLCBOUyhmPSdvb2EnLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vYmFyIGEnLCBOUyhmPU5vbmUsIGZvb2Jhcj0nYScsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb3JhYiBhJywgTlMoZj1Ob25lLCBmb29iYXI9Tm9uZSwgZm9vcmFiPSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRGFzaEFtYmlndW91cyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBPcHRpb25hbHMgdGhhdCBwYXJ0aWFsbHkgbWF0Y2ggYnV0IGFyZSBub3Qgc3Vic2V0cyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy1mb29iYXInKSwgU2lnKCctZm9vcmFiJyldCisgICAgZmFpbHVyZXMgPSBbJy1mJywgJy1mIGEnLCAnLWZhJywgJy1mb2EnLCAnLWZvbycsICctZm8nLCAnLWZvbyBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb2IgYScsIE5TKGZvb2Jhcj0nYScsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb3IgYScsIE5TKGZvb2Jhcj1Ob25lLCBmb29yYWI9J2EnKSksCisgICAgICAgICgnLWZvb2JhIGEnLCBOUyhmb29iYXI9J2EnLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29yYSBhJywgTlMoZm9vYmFyPU5vbmUsIGZvb3JhYj0nYScpKSwKKyAgICAgICAgKCctZm9vYmFyIGEnLCBOUyhmb29iYXI9J2EnLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29yYWIgYScsIE5TKGZvb2Jhcj1Ob25lLCBmb29yYWI9J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOdW1lcmljKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBzaG9ydCBvcHQgc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLTEnLCBkZXN0PSdvbmUnKV0KKyAgICBmYWlsdXJlcyA9IFsnLTEnLCAnYScsICctMSAtLWZvbycsICctMSAteScsICctMSAtMScsICctMSAtMiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKG9uZT1Ob25lKSksCisgICAgICAgICgnLTEgYScsIE5TKG9uZT0nYScpKSwKKyAgICAgICAgKCctMWEnLCBOUyhvbmU9J2EnKSksCisgICAgICAgICgnLTEtMicsIE5TKG9uZT0nLTInKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEb3VibGVEYXNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBkb3VibGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1mb28nKV0KKyAgICBmYWlsdXJlcyA9IFsnLS1mb28nLCAnLWYnLCAnLWYgYScsICdhJywgJy0tZm9vIC14JywgJy0tZm9vIC0tYmFyJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPU5vbmUpKSwKKyAgICAgICAgKCctLWZvbyBhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJy0tZm9vPWEnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnLS1mb28gLTIuNScsIE5TKGZvbz0nLTIuNScpKSwKKyAgICAgICAgKCctLWZvbz0tMi41JywgTlMoZm9vPSctMi41JykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRG91YmxlRGFzaFBhcnRpYWxNYXRjaChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgcGFydGlhbCBtYXRjaGluZyB3aXRoIGEgZG91YmxlLWRhc2ggb3B0aW9uIHN0cmluZyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWJhZGdlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJy0tYmF0JyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWJhcicsICctLWInLCAnLS1iYScsICctLWI9MicsICctLWJhPTQnLCAnLS1iYWRnZSA1J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYmFkZ2VyPUZhbHNlLCBiYXQ9Tm9uZSkpLAorICAgICAgICAoJy0tYmF0IFgnLCBOUyhiYWRnZXI9RmFsc2UsIGJhdD0nWCcpKSwKKyAgICAgICAgKCctLWJhZCcsIE5TKGJhZGdlcj1UcnVlLCBiYXQ9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZycsIE5TKGJhZGdlcj1UcnVlLCBiYXQ9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZ2UnLCBOUyhiYWRnZXI9VHJ1ZSwgYmF0PU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGdlcicsIE5TKGJhZGdlcj1UcnVlLCBiYXQ9Tm9uZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRG91YmxlRGFzaFByZWZpeE1hdGNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB3aGVuIG9uZSBkb3VibGUtZGFzaCBvcHRpb24gc3RyaW5nIGlzIGEgcHJlZml4IG9mIGFub3RoZXIiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1iYWRnZXInLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCctLWJhJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWJhcicsICctLWInLCAnLS1iYScsICctLWI9MicsICctLWJhZGdlIDUnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiYWRnZXI9RmFsc2UsIGJhPU5vbmUpKSwKKyAgICAgICAgKCctLWJhIFgnLCBOUyhiYWRnZXI9RmFsc2UsIGJhPSdYJykpLAorICAgICAgICAoJy0tYmE9WCcsIE5TKGJhZGdlcj1GYWxzZSwgYmE9J1gnKSksCisgICAgICAgICgnLS1iYWQnLCBOUyhiYWRnZXI9VHJ1ZSwgYmE9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZycsIE5TKGJhZGdlcj1UcnVlLCBiYT1Ob25lKSksCisgICAgICAgICgnLS1iYWRnZScsIE5TKGJhZGdlcj1UcnVlLCBiYT1Ob25lKSksCisgICAgICAgICgnLS1iYWRnZXInLCBOUyhiYWRnZXI9VHJ1ZSwgYmE9Tm9uZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRG91YmxlRGFzaChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCB3aXRoIHNpbmdsZS0gYW5kIGRvdWJsZS1kYXNoIG9wdGlvbiBzdHJpbmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy1mJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnLS1iYXInKSwKKyAgICAgICAgU2lnKCctYmF6JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTQyKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy1mYmFyJywgJy1mYmF6JywgJy1iYXpmJywgJy1iIEInLCAnQiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGY9RmFsc2UsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy1mJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICAgICAgKCctLWJhIEInLCBOUyhmPUZhbHNlLCBiYXI9J0InLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy1mIC0tYmFyIEInLCBOUyhmPVRydWUsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnLWYgLWInLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKSwKKyAgICAgICAgKCctYmEgLWYnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FsdGVybmF0ZVByZWZpeENoYXJzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggb3B0aW9uIHN0cmluZ3Mgd2l0aCBjdXN0b20gcHJlZml4ZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJlZml4X2NoYXJzPScrOi8nLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJytmJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnOjpiYXInKSwKKyAgICAgICAgU2lnKCcvYmF6JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTQyKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy1mYmFyJywgJy1iIEInLCAnQicsICctZicsICctLWJhciBCJywgJy1iYXonLCAnLWgnLCAnLS1oZWxwJywgJytoJywgJzo6aGVscCcsICcvaGVscCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGY9RmFsc2UsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJytmJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICAgICAgKCc6OmJhIEInLCBOUyhmPUZhbHNlLCBiYXI9J0InLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJytmIDo6YmFyIEInLCBOUyhmPVRydWUsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YgL2InLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKSwKKyAgICAgICAgKCcvYmEgK2YnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FsdGVybmF0ZVByZWZpeENoYXJzQWRkZWRIZWxwKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJXaGVuIGBgLWBgIG5vdCBpbiBwcmVmaXhfY2hhcnMsIGRlZmF1bHQgb3BlcmF0b3JzIGNyZWF0ZWQgZm9yIGhlbHAKKyAgICAgICBzaG91bGQgdXNlIHRoZSBwcmVmaXhfY2hhcnMgaW4gdXNlIHJhdGhlciB0aGFuIC0gb3IgLS0KKyAgICAgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlOTQ0NCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcmVmaXhfY2hhcnM9Jys6LycsIGFkZF9oZWxwPVRydWUpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcrZicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJzo6YmFyJyksCisgICAgICAgIFNpZygnL2JheicsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD00MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWJhcicsICctZmJhcicsICctYiBCJywgJ0InLCAnLWYnLCAnLS1iYXIgQicsICctYmF6J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZj1GYWxzZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJzo6YmEgQicsIE5TKGY9RmFsc2UsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YgOjpiYXIgQicsIE5TKGY9VHJ1ZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZiAvYicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgICAgICAoJy9iYSArZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBbHRlcm5hdGVQcmVmaXhDaGFyc011bHRpcGxlU2hvcnRBcmdzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJWZXJpZnkgdGhhdCBPcHRpb25hbHMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGVpciBkZWZpbmVkIHByZWZpeGVzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByZWZpeF9jaGFycz0nKy0nLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnK3knLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCcreicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXcnLAorICAgICAgICAgICAgICAgICcteHl6JywKKyAgICAgICAgICAgICAgICAnK3gnLAorICAgICAgICAgICAgICAgICcteScsCisgICAgICAgICAgICAgICAgJyt4eXonLAorICAgIF0KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1GYWxzZSwgeT1GYWxzZSwgej1GYWxzZSkpLAorICAgICAgICAoJy14JywgTlMoeD1UcnVlLCB5PUZhbHNlLCB6PUZhbHNlKSksCisgICAgICAgICgnK3kgLXgnLCBOUyh4PVRydWUsIHk9VHJ1ZSwgej1GYWxzZSkpLAorICAgICAgICAoJyt5eiAteCcsIE5TKHg9VHJ1ZSwgeT1UcnVlLCB6PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1Nob3J0TG9uZyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIGNvbWJpbmF0aW9uIG9mIHNpbmdsZS0gYW5kIGRvdWJsZS1kYXNoIG9wdGlvbiBzdHJpbmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy12JywgJy0tdmVyYm9zZScsICctbicsICctLW5vaXN5JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLXggLS12ZXJib3NlJywgJy1OJywgJ2EnLCAnLXYgeCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHZlcmJvc2U9RmFsc2UpKSwKKyAgICAgICAgKCctdicsIE5TKHZlcmJvc2U9VHJ1ZSkpLAorICAgICAgICAoJy0tdmVyYm9zZScsIE5TKHZlcmJvc2U9VHJ1ZSkpLAorICAgICAgICAoJy1uJywgTlModmVyYm9zZT1UcnVlKSksCisgICAgICAgICgnLS1ub2lzeScsIE5TKHZlcmJvc2U9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRGVzdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdmFyaW91cyBtZWFucyBvZiBzZXR0aW5nIGRlc3RpbmF0aW9uIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1mb28tYmFyJyksIFNpZygnLS1iYXonLCBkZXN0PSd6YWJiYXonKV0KKyAgICBmYWlsdXJlcyA9IFsnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tZm9vLWJhciBmJywgTlMoZm9vX2Jhcj0nZicsIHphYmJhej1Ob25lKSksCisgICAgICAgICgnLS1iYXogZycsIE5TKGZvb19iYXI9Tm9uZSwgemFiYmF6PSdnJykpLAorICAgICAgICAoJy0tZm9vLWJhciBoIC0tYmF6IGknLCBOUyhmb29fYmFyPSdoJywgemFiYmF6PSdpJykpLAorICAgICAgICAoJy0tYmF6IGogLS1mb28tYmFyIGsnLCBOUyhmb29fYmFyPSdrJywgemFiYmF6PSdqJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhIGRlZmF1bHQgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnKSwgU2lnKCcteScsIGRlZmF1bHQ9NDIpXQorICAgIGZhaWx1cmVzID0gWydhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PTQyKSksCisgICAgICAgICgnLXh4JywgTlMoeD0neCcsIHk9NDIpKSwKKyAgICAgICAgKCcteXknLCBOUyh4PU5vbmUsIHk9J3knKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnc0RlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIG5vdCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYXJncyBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lKSksCisgICAgICAgICgnLXggYScsIE5TKHg9J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnczEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgdGhlIDEgYXJnIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD1bJ2EnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3MzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIHRoZSAzIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBuYXJncz0zKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICcteCcsICcteCBhJywgJy14IGEgYicsICdhIC14JywgJ2EgLXggYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14IGEgYiBjJywgTlMoeD1bJ2EnLCAnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzT3B0aW9uYWwoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYW4gT3B0aW9uYWwgYXJnIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctdycsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnLXgnLCBuYXJncz0nPycsIGNvbnN0PTQyKSwKKyAgICAgICAgU2lnKCcteScsIG5hcmdzPSc/JywgZGVmYXVsdD0nc3BhbScpLAorICAgICAgICBTaWcoJy16JywgbmFyZ3M9Jz8nLCB0eXBlPWludCwgY29uc3Q9JzQyJywgZGVmYXVsdD0nODQnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJzInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT0nc3BhbScsIHo9ODQpKSwKKyAgICAgICAgKCctdycsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy13IDInLCBOUyh3PScyJywgeD1Ob25lLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy14JywgTlModz1Ob25lLCB4PTQyLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy14IDInLCBOUyh3PU5vbmUsIHg9JzInLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy15JywgTlModz1Ob25lLCB4PU5vbmUsIHk9Tm9uZSwgej04NCkpLAorICAgICAgICAoJy15IDInLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT0nMicsIHo9ODQpKSwKKyAgICAgICAgKCcteicsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PSdzcGFtJywgej00MikpLAorICAgICAgICAoJy16IDInLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT0nc3BhbScsIHo9MikpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3NaZXJvT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFuIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIHRoYXQgYWNjZXB0cyB6ZXJvIG9yIG1vcmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBuYXJncz0nKicpLAorICAgICAgICBTaWcoJy15JywgbmFyZ3M9JyonLCBkZWZhdWx0PSdzcGFtJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PSdzcGFtJykpLAorICAgICAgICAoJy14JywgTlMoeD1bXSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD1bJ2EnXSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteCBhIGInLCBOUyh4PVsnYScsICdiJ10sIHk9J3NwYW0nKSksCisgICAgICAgICgnLXknLCBOUyh4PU5vbmUsIHk9W10pKSwKKyAgICAgICAgKCcteSBhJywgTlMoeD1Ob25lLCB5PVsnYSddKSksCisgICAgICAgICgnLXkgYSBiJywgTlMoeD1Ob25lLCB5PVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzT25lT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFuIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIHRoYXQgYWNjZXB0cyBvbmUgb3IgbW9yZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG5hcmdzPScrJyksCisgICAgICAgIFNpZygnLXknLCBuYXJncz0nKycsIGRlZmF1bHQ9J3NwYW0nKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXgnLCAnLXknLCAnYSAteCcsICdhIC15IGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9J3NwYW0nKSksCisgICAgICAgICgnLXggYScsIE5TKHg9WydhJ10sIHk9J3NwYW0nKSksCisgICAgICAgICgnLXggYSBiJywgTlMoeD1bJ2EnLCAnYiddLCB5PSdzcGFtJykpLAorICAgICAgICAoJy15IGEnLCBOUyh4PU5vbmUsIHk9WydhJ10pKSwKKyAgICAgICAgKCcteSBhIGInLCBOUyh4PU5vbmUsIHk9WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQ2hvaWNlcyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyB0aGUgY2hvaWNlcyBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLWYnLCBjaG9pY2VzPSdhYmMnKSwKKyAgICAgICAgU2lnKCctZycsIHR5cGU9aW50LCBjaG9pY2VzPXJhbmdlKDUpKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctZiBkJywgJy1mYWQnLCAnLWdhJywgJy1nIDYnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmPU5vbmUsIGc9Tm9uZSkpLAorICAgICAgICAoJy1mIGEnLCBOUyhmPSdhJywgZz1Ob25lKSksCisgICAgICAgICgnLWYgYycsIE5TKGY9J2MnLCBnPU5vbmUpKSwKKyAgICAgICAgKCctZyAwJywgTlMoZj1Ob25lLCBnPTApKSwKKyAgICAgICAgKCctZyAwMycsIE5TKGY9Tm9uZSwgZz0zKSksCisgICAgICAgICgnLWZiIC1nNCcsIE5TKGY9J2InLCBnPTQpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1JlcXVpcmVkKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgYW4gb3B0aW9uYWwgYWN0aW9uIHRoYXQgaXMgcmVxdWlyZWQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPWludCwgcmVxdWlyZWQ9VHJ1ZSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy14IDEnLCBOUyh4PTEpKSwKKyAgICAgICAgKCcteDQyJywgTlMoeD00MikpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uU3RvcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBzdG9yZSBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBhY3Rpb249J3N0b3JlJyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnYSAteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14Zm9vJywgTlMoeD0nZm9vJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uU3RvcmVDb25zdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIHN0b3JlX2NvbnN0IGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD1vYmplY3QpXQorICAgIGZhaWx1cmVzID0gWydhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeT1Ob25lKSksCisgICAgICAgICgnLXknLCBOUyh5PW9iamVjdCkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uU3RvcmVGYWxzZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIHN0b3JlX2ZhbHNlIGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteicsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctemEnLCAnLXogYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHo9VHJ1ZSkpLAorICAgICAgICAoJy16JywgTlMoej1GYWxzZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uU3RvcmVUcnVlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgc3RvcmVfdHJ1ZSBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1hcHBsZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy0tYXBwbGU9YicsICctLWFwcGxlIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhhcHBsZT1GYWxzZSkpLAorICAgICAgICAoJy0tYXBwbGUnLCBOUyhhcHBsZT1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25BcHBlbmQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBhcHBlbmQgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy0tYmF6JywgYWN0aW9uPSdhcHBlbmQnKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctLWJheicsICdhIC0tYmF6JywgJy0tYmF6IGEgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGJhej1Ob25lKSksCisgICAgICAgICgnLS1iYXogYScsIE5TKGJhej1bJ2EnXSkpLAorICAgICAgICAoJy0tYmF6IGEgLS1iYXogYicsIE5TKGJhej1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25BcHBlbmRXaXRoRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGFwcGVuZCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1iYXonLCBhY3Rpb249J2FwcGVuZCcsIGRlZmF1bHQ9WydYJ10pXQorICAgIGZhaWx1cmVzID0gWydhJywgJy0tYmF6JywgJ2EgLS1iYXonLCAnLS1iYXogYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYmF6PVsnWCddKSksCisgICAgICAgICgnLS1iYXogYScsIE5TKGJhej1bJ1gnLCAnYSddKSksCisgICAgICAgICgnLS1iYXogYSAtLWJheiBiJywgTlMoYmF6PVsnWCcsICdhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uQXBwZW5kQ29uc3QoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBhcHBlbmRfY29uc3QgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctYicsIGFjdGlvbj0nYXBwZW5kX2NvbnN0JywgY29uc3Q9RXhjZXB0aW9uKSwKKyAgICAgICAgU2lnKCctYycsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0nYicpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctYycsICdhIC1jJywgJy1ieCcsICctYiB4J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYj1Ob25lKSksCisgICAgICAgICgnLWInLCBOUyhiPVtFeGNlcHRpb25dKSksCisgICAgICAgICgnLWIgLWN4IC1iIC1jeXonLCBOUyhiPVtFeGNlcHRpb24sICd4JywgRXhjZXB0aW9uLCAneXonXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uQXBwZW5kQ29uc3RXaXRoRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGFwcGVuZF9jb25zdCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy1iJywgYWN0aW9uPSdhcHBlbmRfY29uc3QnLCBjb25zdD1FeGNlcHRpb24sIGRlZmF1bHQ9WydYJ10pLAorICAgICAgICBTaWcoJy1jJywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdiJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJy1jJywgJ2EgLWMnLCAnLWJ4JywgJy1iIHgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiPVsnWCddKSksCisgICAgICAgICgnLWInLCBOUyhiPVsnWCcsIEV4Y2VwdGlvbl0pKSwKKyAgICAgICAgKCctYiAtY3ggLWIgLWN5eicsIE5TKGI9WydYJywgRXhjZXB0aW9uLCAneCcsIEV4Y2VwdGlvbiwgJ3l6J10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvbkNvdW50KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgY291bnQgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JywgYWN0aW9uPSdjb3VudCcpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy14IGEnLCAnLXggYicsICcteCBhIC14IGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteCcsIE5TKHg9MSkpLAorICAgIF0KKworCisjID09PT09PT09PT09PT09PT0KKyMgUG9zaXRpb25hbCB0ZXN0cworIyA9PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBkb2Vzbid0IHNwZWNpZnkgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy14JywgJ2EgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgYW4gbmFyZ3Mgb2YgMSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTEpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLXgnLCAnYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1bJ2EnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczIoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgc3BlY2lmaWVzIGFuIG5hcmdzIG9mIDIiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJ2EnLCAnLXgnLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc1plcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgc3BlY2lmaWVzIHVubGltaXRlZCBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScqJyldCisgICAgZmFpbHVyZXMgPSBbJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPVtdKSksCisgICAgICAgICgnYScsIE5TKGZvbz1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzWmVyb09yTW9yZURlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgc3BlY2lmaWVzIHVubGltaXRlZCBuYXJncyBhbmQgYSBkZWZhdWx0IiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JyonLCBkZWZhdWx0PSdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289J2JhcicpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgc3BlY2lmaWVzIG9uZSBvciBtb3JlIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JysnKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWwoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGFuIE9wdGlvbmFsIFBvc2l0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nPycpXQorICAgIGZhaWx1cmVzID0gWycteCcsICdhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSkpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWxEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBhbiBPcHRpb25hbCBQb3NpdGlvbmFsIHdpdGggYSBkZWZhdWx0IHZhbHVlIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PTQyKV0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPTQyKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbENvbnZlcnRlZERlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGFuIE9wdGlvbmFsIFBvc2l0aW9uYWwgd2l0aCBhIGRlZmF1bHQgdmFsdWUKKyAgICB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KKyAgICAiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJywgbmFyZ3M9Jz8nLCB0eXBlPWludCwgZGVmYXVsdD0nNDInKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJ2EgYicsICcxIDInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289NDIpKSwKKyAgICAgICAgKCcxJywgTlMoZm9vPTEpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0d28gUG9zaXRpb25hbHMgdGhhdCBkb24ndCBzcGVjaWZ5IG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyksIFNpZygnYmFyJyldCisgICAgZmFpbHVyZXMgPSBbJycsICcteCcsICdhJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPSdiJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmUxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG5vIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIDEiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MyTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCAyIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG5vbmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKSwgU2lnKCdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnLCAnYSBiJywgJ2EgYiBjIGQnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9J2MnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZVplcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggbm8gbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggdW5saW1pdGVkIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyksIFNpZygnYmFyJywgbmFyZ3M9JyonKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj1bXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lT25lT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG5vIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG9uZSBvciBtb3JlIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyksIFNpZygnYmFyJywgbmFyZ3M9JysnKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InLCAnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZU9wdGlvbmFsKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG5vIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyksIFNpZygnYmFyJywgbmFyZ3M9Jz8nKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj1Ob25lKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPSdiJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc1plcm9Pck1vcmVOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIHVubGltaXRlZCBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBub25lIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JyonKSwgU2lnKCdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1bXSwgYmFyPSdhJykpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnXSwgYmFyPSdiJykpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj0nYycpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPbmVPck1vcmVOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG9uZSBvciBtb3JlIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG5vbmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKycpLCBTaWcoJ2JhcicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnXSwgYmFyPSdiJykpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj0nYycpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbE5vbmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggYW4gT3B0aW9uYWwgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggbm9uZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JywgZGVmYXVsdD00MiksIFNpZygnYmFyJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289NDIsIGJhcj0nYScpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9J2InKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzMlplcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggMiBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCB1bmxpbWl0ZWQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKSwgU2lnKCdiYXInLCBuYXJncz0nKicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9W10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MyT25lT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIDIgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggb25lIG9yIG1vcmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKSwgU2lnKCdiYXInLCBuYXJncz0nKycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MyT3B0aW9uYWwoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggMiBuYXJncyBmb2xsb3dlZCBieSBvbmUgb3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKSwgU2lnKCdiYXInLCBuYXJncz0nPycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGIgYyBkJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1Ob25lKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPSdjJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc1plcm9Pck1vcmUxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIHVubGltaXRlZCBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCAxIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JyonKSwgU2lnKCdiYXInLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPVtdLCBiYXI9WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJ10sIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09uZU9yTW9yZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggb25lIG9yIG1vcmUgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggMSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScrJyksIFNpZygnYmFyJywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYSddLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbDEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggYW4gT3B0aW9uYWwgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggMSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JyksIFNpZygnYmFyJywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289Tm9uZSwgYmFyPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZVplcm9Pck1vcmUxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRocmVlIFBvc2l0aW9uYWxzOiBubyBuYXJncywgdW5saW1pdGVkIG5hcmdzIGFuZCAxIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPScqJyksCisgICAgICAgIFNpZygnYmF6JywgbmFyZ3M9MSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bXSwgYmF6PVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9WydiJ10sIGJhej1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVPbmVPck1vcmUxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRocmVlIFBvc2l0aW9uYWxzOiBubyBuYXJncywgb25lIG9yIG1vcmUgbmFyZ3MgYW5kIDEgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JysnKSwKKyAgICAgICAgU2lnKCdiYXonLCBuYXJncz0xKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2InXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PVsnYyddKSksCisgICAgICAgICgnYSBiIGMgZCcsIE5TKGZvbz0nYScsIGJhcj1bJ2InLCAnYyddLCBiYXo9WydkJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lT3B0aW9uYWwxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRocmVlIFBvc2l0aW9uYWxzOiBubyBuYXJncywgb3B0aW9uYWwgbmFyZyBhbmQgMSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nPycsIGRlZmF1bHQ9MC42MjUpLAorICAgICAgICBTaWcoJ2JheicsIG5hcmdzPTEpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9MC42MjUsIGJhej1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPSdiJywgYmF6PVsnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWxPcHRpb25hbChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0d28gb3B0aW9uYWwgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nPycsIGRlZmF1bHQ9NDIpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS1mb28nLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSwgYmFyPTQyKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj00MikpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj0nYicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbFplcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgbmFyZyBmb2xsb3dlZCBieSB1bmxpbWl0ZWQgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nPycpLCBTaWcoJ2JhcicsIG5hcmdzPScqJyldCisgICAgZmFpbHVyZXMgPSBbJy0tZm9vJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPU5vbmUsIGJhcj1bXSkpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnLCBiYXI9W10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InLCAnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWxPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgbmFyZyBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JyksIFNpZygnYmFyJywgbmFyZ3M9JysnKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1Ob25lLCBiYXI9WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InLCAnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc0Nob2ljZXNTdHJpbmcoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBzZXQgb2Ygc2luZ2xlLWNoYXJhY3RlciBjaG9pY2VzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnc3BhbScsIGNob2ljZXM9c2V0KCdhYmNkZWZnJykpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnaCcsICc0MicsICdlZiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhzcGFtPSdhJykpLAorICAgICAgICAoJ2cnLCBOUyhzcGFtPSdnJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNDaG9pY2VzSW50KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgc2V0IG9mIGludGVnZXIgY2hvaWNlcyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ3NwYW0nLCB0eXBlPWludCwgY2hvaWNlcz1yYW5nZSgyMCkpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnaCcsICc0MicsICdlZiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJzQnLCBOUyhzcGFtPTQpKSwKKyAgICAgICAgKCcxNScsIE5TKHNwYW09MTUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzQWN0aW9uQXBwZW5kKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSAnYXBwZW5kJyBhY3Rpb24iIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnc3BhbScsIGFjdGlvbj0nYXBwZW5kJyksCisgICAgICAgIFNpZygnc3BhbScsIGFjdGlvbj0nYXBwZW5kJywgbmFyZ3M9MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGInLCAnYSBiIGMgZCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYiBjJywgTlMoc3BhbT1bJ2EnLCBbJ2InLCAnYyddXSkpLAorICAgIF0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIENvbWJpbmVkIG9wdGlvbmFscyBhbmQgcG9zaXRpb25hbHMgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0T3B0aW9uYWxzTnVtZXJpY0FuZFBvc2l0aW9uYWxzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBuZWdhdGl2ZSBudW1iZXIgYXJncyB3aGVuIG51bWVyaWMgb3B0aW9ucyBhcmUgcHJlc2VudCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCd4JywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCctNCcsIGRlc3Q9J3knLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0yJywgJy0zMTUnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdhJywgTlMoeD0nYScsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctNCcsIE5TKHg9Tm9uZSwgeT1UcnVlKSksCisgICAgICAgICgnLTQgYScsIE5TKHg9J2EnLCB5PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FsbW9zdE51bWVyaWNBbmRQb3NpdGlvbmFscyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgbmVnYXRpdmUgbnVtYmVyIGFyZ3Mgd2hlbiBhbG1vc3QgbnVtZXJpYyBvcHRpb25zIGFyZSBwcmVzZW50IiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ3gnLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJy1rNCcsIGRlc3Q9J3knLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy1rMyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy0yJywgTlMoeD0nLTInLCB5PUZhbHNlKSksCisgICAgICAgICgnYScsIE5TKHg9J2EnLCB5PUZhbHNlKSksCisgICAgICAgICgnLWs0JywgTlMoeD1Ob25lLCB5PVRydWUpKSwKKyAgICAgICAgKCctazQgYScsIE5TKHg9J2EnLCB5PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEVtcHR5QW5kU3BhY2VDb250YWluaW5nQXJndW1lbnRzKFBhcnNlclRlc3RDYXNlKToKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygneCcsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnLXknLCAnLS15eXknLCBkZXN0PSd5JyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoWycnXSwgTlMoeD0nJywgeT1Ob25lKSksCisgICAgICAgIChbJ2EgYmFkZ2VyJ10sIE5TKHg9J2EgYmFkZ2VyJywgeT1Ob25lKSksCisgICAgICAgIChbJy1hIGJhZGdlciddLCBOUyh4PSctYSBiYWRnZXInLCB5PU5vbmUpKSwKKyAgICAgICAgKFsnLXknLCAnJ10sIE5TKHg9Tm9uZSwgeT0nJykpLAorICAgICAgICAoWycteScsICdhIGJhZGdlciddLCBOUyh4PU5vbmUsIHk9J2EgYmFkZ2VyJykpLAorICAgICAgICAoWycteScsICctYSBiYWRnZXInXSwgTlMoeD1Ob25lLCB5PSctYSBiYWRnZXInKSksCisgICAgICAgIChbJy0teXl5PWEgYmFkZ2VyJ10sIE5TKHg9Tm9uZSwgeT0nYSBiYWRnZXInKSksCisgICAgICAgIChbJy0teXl5PS1hIGJhZGdlciddLCBOUyh4PU5vbmUsIHk9Jy1hIGJhZGdlcicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFByZWZpeENoYXJhY3Rlck9ubHlBcmd1bWVudHMoUGFyc2VyVGVzdENhc2UpOgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcmVmaXhfY2hhcnM9Jy0rJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0nLCBkZXN0PSd4JywgbmFyZ3M9Jz8nLCBjb25zdD0nYmFkZ2VyJyksCisgICAgICAgIFNpZygnKycsIGRlc3Q9J3knLCB0eXBlPWludCwgZGVmYXVsdD00MiksCisgICAgICAgIFNpZygnLSstJywgZGVzdD0neicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXknLCAnKyAtJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PTQyLCB6PUZhbHNlKSksCisgICAgICAgICgnLScsIE5TKHg9J2JhZGdlcicsIHk9NDIsIHo9RmFsc2UpKSwKKyAgICAgICAgKCctIFgnLCBOUyh4PSdYJywgeT00Miwgej1GYWxzZSkpLAorICAgICAgICAoJysgLTMnLCBOUyh4PU5vbmUsIHk9LTMsIHo9RmFsc2UpKSwKKyAgICAgICAgKCctKy0nLCBOUyh4PU5vbmUsIHk9NDIsIHo9VHJ1ZSkpLAorICAgICAgICAoJy0gPT09JywgTlMoeD0nPT09JywgeT00Miwgej1GYWxzZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0TmFyZ3NaZXJvT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFuIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIHRoYXQgYWNjZXB0cyB6ZXJvIG9yIG1vcmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcsIG5hcmdzPScqJyksIFNpZygneScsIG5hcmdzPScqJyldCisgICAgZmFpbHVyZXMgPSBbXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9W10pKSwKKyAgICAgICAgKCcteCcsIE5TKHg9W10sIHk9W10pKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD1bJ2EnXSwgeT1bXSkpLAorICAgICAgICAoJy14IGEgLS0gYicsIE5TKHg9WydhJ10sIHk9WydiJ10pKSwKKyAgICAgICAgKCdhJywgTlMoeD1Ob25lLCB5PVsnYSddKSksCisgICAgICAgICgnYSAteCcsIE5TKHg9W10sIHk9WydhJ10pKSwKKyAgICAgICAgKCdhIC14IGInLCBOUyh4PVsnYiddLCB5PVsnYSddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3ROYXJnc1JlbWFpbmRlcihQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhIHBvc2l0aW9uYWwgd2l0aCBuYXJncz1SRU1BSU5ERVIiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCd4JyksIFNpZygneScsIG5hcmdzPScuLi4nKSwgU2lnKCcteicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLXonLCAnLXogWiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ1gnLCBOUyh4PSdYJywgeT1bXSwgej1Ob25lKSksCisgICAgICAgICgnLXogWiBYJywgTlMoeD0nWCcsIHk9W10sIHo9J1onKSksCisgICAgICAgICgnWCBBIEIgLXogWicsIE5TKHg9J1gnLCB5PVsnQScsICdCJywgJy16JywgJ1onXSwgej1Ob25lKSksCisgICAgICAgICgnWCBZIC0tZm9vJywgTlMoeD0nWCcsIHk9WydZJywgJy0tZm9vJ10sIHo9Tm9uZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uTGlrZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgb3B0aW9ucyB0aGF0IG1heSBvciBtYXkgbm90IGJlIGFyZ3VtZW50cyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9ZmxvYXQpLAorICAgICAgICBTaWcoJy0zJywgdHlwZT1mbG9hdCwgZGVzdD0neScpLAorICAgICAgICBTaWcoJ3onLCBuYXJncz0nKicpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnLXkyLjUnLCAnLXhhJywgJy14IC1hJywKKyAgICAgICAgICAgICAgICAnLXggLTMnLCAnLXggLTMuNScsICctMyAtMy41JywKKyAgICAgICAgICAgICAgICAnLXggLTIuNScsICcteCAtMi41IGEnLCAnLTMgLS41JywKKyAgICAgICAgICAgICAgICAnYSB4IC0xJywgJy14IC0xIGEnLCAnLTMgLTEgYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT1Ob25lLCB6PVtdKSksCisgICAgICAgICgnLXggMi41JywgTlMoeD0yLjUsIHk9Tm9uZSwgej1bXSkpLAorICAgICAgICAoJy14IDIuNSBhJywgTlMoeD0yLjUsIHk9Tm9uZSwgej1bJ2EnXSkpLAorICAgICAgICAoJy0zLjUnLCBOUyh4PU5vbmUsIHk9MC41LCB6PVtdKSksCisgICAgICAgICgnLTMtLjUnLCBOUyh4PU5vbmUsIHk9LTAuNSwgej1bXSkpLAorICAgICAgICAoJy0zIC41JywgTlMoeD1Ob25lLCB5PTAuNSwgej1bXSkpLAorICAgICAgICAoJ2EgLTMuNScsIE5TKHg9Tm9uZSwgeT0wLjUsIHo9WydhJ10pKSwKKyAgICAgICAgKCdhJywgTlMoeD1Ob25lLCB5PU5vbmUsIHo9WydhJ10pKSwKKyAgICAgICAgKCdhIC14IDEnLCBOUyh4PTEuMCwgeT1Ob25lLCB6PVsnYSddKSksCisgICAgICAgICgnLXggMSBhJywgTlMoeD0xLjAsIHk9Tm9uZSwgej1bJ2EnXSkpLAorICAgICAgICAoJy0zIDEgYScsIE5TKHg9Tm9uZSwgeT0xLjAsIHo9WydhJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdERlZmF1bHRTdXBwcmVzcyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhY3Rpb25zIHdpdGggc3VwcHJlc3NlZCBkZWZhdWx0cyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPScqJywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUyksCisgICAgICAgIFNpZygnLS1iYXonLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCctLWJheicsIE5TKGJhej1UcnVlKSksCisgICAgICAgICgnYSAtLWJheicsIE5TKGZvbz0nYScsIGJhej1UcnVlKSksCisgICAgICAgICgnLS1iYXogYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UGFyc2VyRGVmYXVsdFN1cHByZXNzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFjdGlvbnMgd2l0aCBhIHBhcnNlci1sZXZlbCBkZWZhdWx0IG9mIFNVUFBSRVNTIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKGFyZ3VtZW50X2RlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPScqJyksCisgICAgICAgIFNpZygnLS1iYXonLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCctLWJheicsIE5TKGJhej1UcnVlKSksCisgICAgICAgICgnYSAtLWJheicsIE5TKGZvbz0nYScsIGJhej1UcnVlKSksCisgICAgICAgICgnLS1iYXogYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UGFyc2VyRGVmYXVsdDQyKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFjdGlvbnMgd2l0aCBhIHBhcnNlci1sZXZlbCBkZWZhdWx0IG9mIDQyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKGFyZ3VtZW50X2RlZmF1bHQ9NDIsIHZlcnNpb249JzEuMCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPScqJyksCisgICAgICAgIFNpZygnLS1iYXonLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPTQyLCBiYXI9NDIsIGJhej00MikpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnLCBiYXI9NDIsIGJhej00MikpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PTQyKSksCisgICAgICAgICgnLS1iYXonLCBOUyhmb289NDIsIGJhcj00MiwgYmF6PVRydWUpKSwKKyAgICAgICAgKCdhIC0tYmF6JywgTlMoZm9vPSdhJywgYmFyPTQyLCBiYXo9VHJ1ZSkpLAorICAgICAgICAoJy0tYmF6IGEgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEFyZ3VtZW50c0Zyb21GaWxlKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgcmVhZGluZyBhcmd1bWVudHMgZnJvbSBhIGZpbGUiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEFyZ3VtZW50c0Zyb21GaWxlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIGZpbGVfdGV4dHMgPSBbCisgICAgICAgICAgICAoJ2hlbGxvJywgJ2hlbGxvIHdvcmxkIVxuJyksCisgICAgICAgICAgICAoJ3JlY3Vyc2l2ZScsICctYVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAnQVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAnQGhlbGxvJyksCisgICAgICAgICAgICAoJ2ludmFsaWQnLCAnQG5vLXN1Y2gtcGF0aFxuJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIHBhdGgsIHRleHQgaW4gZmlsZV90ZXh0czoKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKHBhdGgsICd3JykKKyAgICAgICAgICAgIGZpbGUud3JpdGUodGV4dCkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhmcm9tZmlsZV9wcmVmaXhfY2hhcnM9J0AnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLWEnKSwKKyAgICAgICAgU2lnKCd4JyksCisgICAgICAgIFNpZygneScsIG5hcmdzPScrJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycnLCAnLWInLCAnWCcsICdAaW52YWxpZCcsICdAbWlzc2luZyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ1ggWScsIE5TKGE9Tm9uZSwgeD0nWCcsIHk9WydZJ10pKSwKKyAgICAgICAgKCdYIC1hIEEgWSBaJywgTlMoYT0nQScsIHg9J1gnLCB5PVsnWScsICdaJ10pKSwKKyAgICAgICAgKCdAaGVsbG8gWCcsIE5TKGE9Tm9uZSwgeD0naGVsbG8gd29ybGQhJywgeT1bJ1gnXSkpLAorICAgICAgICAoJ1ggQGhlbGxvJywgTlMoYT1Ob25lLCB4PSdYJywgeT1bJ2hlbGxvIHdvcmxkISddKSksCisgICAgICAgICgnLWEgQiBAcmVjdXJzaXZlIFkgWicsIE5TKGE9J0EnLCB4PSdoZWxsbyB3b3JsZCEnLCB5PVsnWScsICdaJ10pKSwKKyAgICAgICAgKCdYIEByZWN1cnNpdmUgWiAtYSBCJywgTlMoYT0nQicsIHg9J1gnLCB5PVsnaGVsbG8gd29ybGQhJywgJ1onXSkpLAorICAgICAgICAoWyItYSIsICIiLCAiWCIsICJZIl0sIE5TKGE9JycsIHg9J1gnLCB5PVsnWSddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RBcmd1bWVudHNGcm9tRmlsZUNvbnZlcnRlcihUZW1wRGlyTWl4aW4sIFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHJlYWRpbmcgYXJndW1lbnRzIGZyb20gYSBmaWxlIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RBcmd1bWVudHNGcm9tRmlsZUNvbnZlcnRlciwgc2VsZikuc2V0VXAoKQorICAgICAgICBmaWxlX3RleHRzID0gWworICAgICAgICAgICAgKCdoZWxsbycsICdoZWxsbyB3b3JsZCFcbicpLAorICAgICAgICBdCisgICAgICAgIGZvciBwYXRoLCB0ZXh0IGluIGZpbGVfdGV4dHM6CisgICAgICAgICAgICBmaWxlID0gb3BlbihwYXRoLCAndycpCisgICAgICAgICAgICBmaWxlLndyaXRlKHRleHQpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKworICAgIGNsYXNzIEZyb21GaWxlQ29udmVydGVyQXJndW1lbnRQYXJzZXIoRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIpOgorCisgICAgICAgIGRlZiBjb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3Moc2VsZiwgYXJnX2xpbmUpOgorICAgICAgICAgICAgZm9yIGFyZyBpbiBhcmdfbGluZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBhcmcuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB5aWVsZCBhcmcKKyAgICBwYXJzZXJfY2xhc3MgPSBGcm9tRmlsZUNvbnZlcnRlckFyZ3VtZW50UGFyc2VyCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhmcm9tZmlsZV9wcmVmaXhfY2hhcnM9J0AnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygneScsIG5hcmdzPScrJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gW10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnQGhlbGxvIFgnLCBOUyh5PVsnaGVsbG8nLCAnd29ybGQhJywgJ1gnXSkpLAorICAgIF0KKworCisjID09PT09PT09PT09PT09PT09PT09PQorIyBUeXBlIGNvbnZlcnNpb24gdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RGaWxlVHlwZVJlcHIoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcihzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCdyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3InKSIsIHJlcHIodHlwZSkpCisKKyAgICBkZWYgdGVzdF93Yl8xKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3diJywgMSkiLCByZXByKHR5cGUpKQorCisKK2NsYXNzIFJGaWxlKG9iamVjdCk6CisgICAgc2VlbiA9IHt9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG90aGVyIGluIHNlbGYuc2VlbjoKKyAgICAgICAgICAgIHRleHQgPSBzZWxmLnNlZW5bb3RoZXJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXh0ID0gc2VsZi5zZWVuW290aGVyXSA9IG90aGVyLnJlYWQoKQorICAgICAgICAgICAgb3RoZXIuY2xvc2UoKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0ZXh0LCBzdHIpOgorICAgICAgICAgICAgdGV4dCA9IHRleHQuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgPT0gb3RoZXIubmFtZSA9PSB0ZXh0CisKKworY2xhc3MgVGVzdEZpbGVUeXBlUihUZW1wRGlyTWl4aW4sIFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBGaWxlVHlwZSBvcHRpb24vYXJndW1lbnQgdHlwZSBmb3IgcmVhZGluZyBmaWxlcyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0RmlsZVR5cGVSLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIGZvciBmaWxlX25hbWUgaW4gWydmb28nLCAnYmFyJ106CisgICAgICAgICAgICBmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgZmlsZV9uYW1lKSwgJ3cnKQorICAgICAgICAgICAgZmlsZS53cml0ZShmaWxlX25hbWUpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jcmVhdGVfcmVhZG9ubHlfZmlsZSgncmVhZG9ubHknKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoKSksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3InKSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCcsICcteCBiYXInLCAnbm9uLWV4aXN0ZW50LWZpbGUudHh0J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnZm9vJywgTlMoeD1Ob25lLCBzcGFtPVJGaWxlKCdmb28nKSkpLAorICAgICAgICAoJy14IGZvbyBiYXInLCBOUyh4PVJGaWxlKCdmb28nKSwgc3BhbT1SRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCdiYXIgLXggZm9vJywgTlMoeD1SRmlsZSgnZm9vJyksIHNwYW09UkZpbGUoJ2JhcicpKSksCisgICAgICAgICgnLXggLSAtJywgTlMoeD1zeXMuc3RkaW4sIHNwYW09c3lzLnN0ZGluKSksCisgICAgICAgICgncmVhZG9ubHknLCBOUyh4PU5vbmUsIHNwYW09UkZpbGUoJ3JlYWRvbmx5JykpKSwKKyAgICBdCisKK2NsYXNzIFRlc3RGaWxlVHlwZURlZmF1bHRzKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBhIGZpbGUgaXMgbm90IGNyZWF0ZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGlzIG5lZWRlZCIiIgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEZpbGVUeXBlRGVmYXVsdHMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcF9kaXIsICdnb29kJyksICd3JykKKyAgICAgICAgZmlsZS53cml0ZSgnZ29vZCcpCisgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctYycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3InKSwgZGVmYXVsdD0nbm8tZmlsZS50eHQnKSwKKyAgICBdCisgICAgIyBzaG91bGQgcHJvdm9rZSBubyBzdWNoIGZpbGUgZXJyb3IKKyAgICBmYWlsdXJlcyA9IFsnJ10KKyAgICAjIHNob3VsZCBub3QgcHJvdm9rZSBlcnJvciBiZWNhdXNlIGRlZmF1bHQgZmlsZSBpcyBjcmVhdGVkCisgICAgc3VjY2Vzc2VzID0gWygnLWMgZ29vZCcsIE5TKGM9UkZpbGUoJ2dvb2QnKSkpXQorCisKK2NsYXNzIFRlc3RGaWxlVHlwZVJCKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIEZpbGVUeXBlIG9wdGlvbi9hcmd1bWVudCB0eXBlIGZvciByZWFkaW5nIGZpbGVzIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RGaWxlVHlwZVJCLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIGZvciBmaWxlX25hbWUgaW4gWydmb28nLCAnYmFyJ106CisgICAgICAgICAgICBmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgZmlsZV9uYW1lKSwgJ3cnKQorICAgICAgICAgICAgZmlsZS53cml0ZShmaWxlX25hbWUpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCdyYicpKSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgncmInKSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCcsICcteCBiYXInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdmb28nLCBOUyh4PU5vbmUsIHNwYW09UkZpbGUoJ2ZvbycpKSksCisgICAgICAgICgnLXggZm9vIGJhcicsIE5TKHg9UkZpbGUoJ2ZvbycpLCBzcGFtPVJGaWxlKCdiYXInKSkpLAorICAgICAgICAoJ2JhciAteCBmb28nLCBOUyh4PVJGaWxlKCdmb28nKSwgc3BhbT1SRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCcteCAtIC0nLCBOUyh4PXN5cy5zdGRpbiwgc3BhbT1zeXMuc3RkaW4pKSwKKyAgICBdCisKKworY2xhc3MgV0ZpbGUob2JqZWN0KToKKyAgICBzZWVuID0gc2V0KCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgX19oYXNoX18gPSBOb25lCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgb3RoZXIgbm90IGluIHNlbGYuc2VlbjoKKyAgICAgICAgICAgIHRleHQgPSAnQ2hlY2sgdGhhdCBmaWxlIGlzIHdyaXRhYmxlLicKKyAgICAgICAgICAgIGlmICdiJyBpbiBvdGhlci5tb2RlOgorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmVuY29kZSgnYXNjaWknKQorICAgICAgICAgICAgb3RoZXIud3JpdGUodGV4dCkKKyAgICAgICAgICAgIG90aGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2Vlbi5hZGQob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgPT0gb3RoZXIubmFtZQorCisKK0B1bml0dGVzdC5za2lwSWYoaGFzYXR0cihvcywgJ2dldGV1aWQnKSBhbmQgb3MuZ2V0ZXVpZCgpID09IDAsCisgICAgICAgICAgICAgICAgICJub24tcm9vdCB1c2VyIHJlcXVpcmVkIikKK2NsYXNzIFRlc3RGaWxlVHlwZVcoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgRmlsZVR5cGUgb3B0aW9uL2FyZ3VtZW50IHR5cGUgZm9yIHdyaXRpbmcgZmlsZXMiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEZpbGVUeXBlVywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmNyZWF0ZV9yZWFkb25seV9maWxlKCdyZWFkb25seScpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpKSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy14IGJhciddCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy14IGJhcicsICdyZWFkb25seSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1XRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9V0ZpbGUoJ2ZvbycpLCBzcGFtPVdGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZG91dCwgc3BhbT1zeXMuc3Rkb3V0KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RGaWxlVHlwZVdCKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJykpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3YicpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy14IGJhciddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1XRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9V0ZpbGUoJ2ZvbycpLCBzcGFtPVdGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZG91dCwgc3BhbT1zeXMuc3Rkb3V0KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlQ2FsbGFibGUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3Qgc29tZSBjYWxsYWJsZXMgYXMgb3B0aW9uL2FyZ3VtZW50IHR5cGVzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZWdncycsIHR5cGU9Y29tcGxleCksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9ZmxvYXQpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICc0MmonLCAnLS1lZ2dzIGEnLCAnLS1lZ2dzIDJpJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1lZ2dzPTQyIDQyJywgTlMoZWdncz00Miwgc3BhbT00Mi4wKSksCisgICAgICAgICgnLS1lZ2dzIDJqIC0tIC0xLjUnLCBOUyhlZ2dzPTJqLCBzcGFtPS0xLjUpKSwKKyAgICAgICAgKCcxMDI0LjY3NScsIE5TKGVnZ3M9Tm9uZSwgc3BhbT0xMDI0LjY3NSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0VHlwZVVzZXJEZWZpbmVkKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgdXNlci1kZWZpbmVkIG9wdGlvbi9hcmd1bWVudCB0eXBlIiIiCisKKyAgICBjbGFzcyBNeVR5cGUoVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiAodHlwZShzZWxmKSwgc2VsZi52YWx1ZSkgPT0gKHR5cGUob3RoZXIpLCBvdGhlci52YWx1ZSkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPU15VHlwZSksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9TXlUeXBlKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIC14IGInLCBOUyh4PU15VHlwZSgnYicpLCBzcGFtPU15VHlwZSgnYScpKSksCisgICAgICAgICgnLXhmIGcnLCBOUyh4PU15VHlwZSgnZicpLCBzcGFtPU15VHlwZSgnZycpKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlQ2xhc3NpY0NsYXNzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgY2xhc3NpYyBjbGFzcyB0eXBlIiIiCisKKyAgICBjbGFzcyBDOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiAodHlwZShzZWxmKSwgc2VsZi52YWx1ZSkgPT0gKHR5cGUob3RoZXIpLCBvdGhlci52YWx1ZSkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPUMpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPUMpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFtdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgLXggYicsIE5TKHg9QygnYicpLCBzcGFtPUMoJ2EnKSkpLAorICAgICAgICAoJy14ZiBnJywgTlMoeD1DKCdmJyksIHNwYW09QygnZycpKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlUmVnaXN0cmF0aW9uKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgdXNlci1kZWZpbmVkIHR5cGUgYnkgcmVnaXN0ZXJpbmcgaXQiIiIKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZXRfbXlfdHlwZShzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuICdteV90eXBleyVzfScgJSBzdHJpbmcKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5yZWdpc3RlcigndHlwZScsICdteV90eXBlJywgZ2V0X215X3R5cGUpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgdHlwZT0nbXlfdHlwZScpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3knLCB0eXBlPSdteV90eXBlJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCcxJy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyh4PU5vbmUsIHk9J215X3R5cGV7MX0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnLXggMSA0Micuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoeD0nbXlfdHlwZXsxfScsIHk9J215X3R5cGV7NDJ9JykpCisKKworIyA9PT09PT09PT09PT0KKyMgQWN0aW9uIHRlc3RzCisjID09PT09PT09PT09PQorCitjbGFzcyBUZXN0QWN0aW9uVXNlckRlZmluZWQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSB1c2VyLWRlZmluZWQgb3B0aW9uL2FyZ3VtZW50IGFjdGlvbiIiIgorCisgICAgY2xhc3MgT3B0aW9uYWxBY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKKworICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgY2hlY2sgZGVzdGluYXRpb24gYW5kIG9wdGlvbiBzdHJpbmcKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5kZXN0ID09ICdzcGFtJywgJ2Rlc3Q6ICVzJyAlIHNlbGYuZGVzdAorICAgICAgICAgICAgICAgIGFzc2VydCBvcHRpb25fc3RyaW5nID09ICctcycsICdmbGFnOiAlcycgJSBvcHRpb25fc3RyaW5nCisgICAgICAgICAgICAgICAgIyB3aGVuIG9wdGlvbiBpcyBiZWZvcmUgYXJndW1lbnQsIGJhZGdlcj0yLCBhbmQgd2hlbgorICAgICAgICAgICAgICAgICMgb3B0aW9uIGlzIGFmdGVyIGFyZ3VtZW50LCBiYWRnZXI9PHdoYXRldmVyIHdhcyBzZXQ+CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbnMgPSBOUyhzcGFtPTAuMjUpCisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaW4gWzAuMTI1LCAwLjYyNV06CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zLmJhZGdlciA9IDIKKyAgICAgICAgICAgICAgICBlbGlmIHZhbHVlIGluIFsyLjBdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5iYWRnZXIgPSA4NAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd2YWx1ZTogJXMnICUgdmFsdWUpCisgICAgICAgICAgICAgICAgYXNzZXJ0IGV4cGVjdGVkX25zID09IG5hbWVzcGFjZSwgKCdleHBlY3RlZCAlcywgZ290ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9ucywgbmFtZXNwYWNlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgICAgICByYWlzZSBBcmd1bWVudFBhcnNlckVycm9yKCdvcHRfYWN0aW9uIGZhaWxlZDogJXMnICUgZSkKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCAnc3BhbScsIHZhbHVlKQorCisgICAgY2xhc3MgUG9zaXRpb25hbEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgorCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWUsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG9wdGlvbl9zdHJpbmcgaXMgTm9uZSwgKCdvcHRpb25fc3RyaW5nOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5nKQorICAgICAgICAgICAgICAgICMgY2hlY2sgZGVzdGluYXRpb24KKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5kZXN0ID09ICdiYWRnZXInLCAnZGVzdDogJXMnICUgc2VsZi5kZXN0CisgICAgICAgICAgICAgICAgIyB3aGVuIGFyZ3VtZW50IGlzIGJlZm9yZSBvcHRpb24sIHNwYW09MC4yNSwgYW5kIHdoZW4KKyAgICAgICAgICAgICAgICAjIG9wdGlvbiBpcyBhZnRlciBhcmd1bWVudCwgc3BhbT08d2hhdGV2ZXIgd2FzIHNldD4KKyAgICAgICAgICAgICAgICBleHBlY3RlZF9ucyA9IE5TKGJhZGdlcj0yKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIFs0MiwgODRdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5zcGFtID0gMC4yNQorICAgICAgICAgICAgICAgIGVsaWYgdmFsdWUgaW4gWzFdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5zcGFtID0gMC42MjUKKyAgICAgICAgICAgICAgICBlbGlmIHZhbHVlIGluIFsyXToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbnMuc3BhbSA9IDAuMTI1CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ3ZhbHVlOiAlcycgJSB2YWx1ZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfbnMgPT0gbmFtZXNwYWNlLCAoJ2V4cGVjdGVkICVzLCBnb3QgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX25zLCBuYW1lc3BhY2UpKQorICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50UGFyc2VyRXJyb3IoJ2FyZ19hY3Rpb24gZmFpbGVkOiAlcycgJSBlKQorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsICdiYWRnZXInLCB2YWx1ZSkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXMnLCBkZXN0PSdzcGFtJywgYWN0aW9uPU9wdGlvbmFsQWN0aW9uLAorICAgICAgICAgICAgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjI1KSwKKyAgICAgICAgU2lnKCdiYWRnZXInLCBhY3Rpb249UG9zaXRpb25hbEFjdGlvbiwKKyAgICAgICAgICAgIHR5cGU9aW50LCBuYXJncz0nPycsIGRlZmF1bHQ9MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gW10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLXMwLjEyNScsIE5TKHNwYW09MC4xMjUsIGJhZGdlcj0yKSksCisgICAgICAgICgnNDInLCBOUyhzcGFtPTAuMjUsIGJhZGdlcj00MikpLAorICAgICAgICAoJy1zIDAuNjI1IDEnLCBOUyhzcGFtPTAuNjI1LCBiYWRnZXI9MSkpLAorICAgICAgICAoJzg0IC1zMicsIE5TKHNwYW09Mi4wLCBiYWRnZXI9ODQpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEFjdGlvblJlZ2lzdHJhdGlvbihUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIHVzZXItZGVmaW5lZCBhY3Rpb24gc3VwcGxpZWQgYnkgcmVnaXN0ZXJpbmcgaXQiIiIKKworICAgIGNsYXNzIE15QWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6CisKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCAnZm9vWyVzXScgJSB2YWx1ZXMpCisKKyAgICBkZWYgdGVzdChzZWxmKToKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5yZWdpc3RlcignYWN0aW9uJywgJ215X2FjdGlvbicsIHNlbGYuTXlBY3Rpb24pCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhZGdlcicsIGFjdGlvbj0nbXlfYWN0aW9uJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKFsnMSddKSwgTlMoYmFkZ2VyPSdmb29bMV0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncyhbJzQyJ10pLCBOUyhiYWRnZXI9J2Zvb1s0Ml0nKSkKKworCisjID09PT09PT09PT09PT09PT0KKyMgU3VicGFyc2VycyB0ZXN0cworIyA9PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBZGRTdWJwYXJzZXJzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBhZGRfc3VicGFyc2VycyBtZXRob2QiIiIKKworICAgIGRlZiBhc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBfZ2V0X3BhcnNlcihzZWxmLCBzdWJwYXJzZXJfaGVscD1GYWxzZSwgcHJlZml4X2NoYXJzPU5vbmUpOgorICAgICAgICAjIGNyZWF0ZSBhIHBhcnNlciB3aXRoIGEgc3VicGFyc2VycyBhcmd1bWVudAorICAgICAgICBpZiBwcmVmaXhfY2hhcnM6CisgICAgICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigKKyAgICAgICAgICAgICAgICBwcm9nPSdQUk9HJywgZGVzY3JpcHRpb249J21haW4gZGVzY3JpcHRpb24nLCBwcmVmaXhfY2hhcnM9cHJlZml4X2NoYXJzKQorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICAgICBwcmVmaXhfY2hhcnNbMF0gKiAyICsgJ2ZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgICAgIHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nbWFpbiBkZXNjcmlwdGlvbicpCisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgICAgICctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICdiYXInLCB0eXBlPWZsb2F0LCBoZWxwPSdiYXIgaGVscCcpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IG9ubHkgb25lIHN1YnBhcnNlcnMgYXJndW1lbnQgY2FuIGJlIGFkZGVkCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nY29tbWFuZCBoZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlci5hZGRfc3VicGFyc2VycykKKworICAgICAgICAjIGFkZCBmaXJzdCBzdWItcGFyc2VyCisgICAgICAgIHBhcnNlcjFfa3dhcmdzID0gZGljdChkZXNjcmlwdGlvbj0nMSBkZXNjcmlwdGlvbicpCisgICAgICAgIGlmIHN1YnBhcnNlcl9oZWxwOgorICAgICAgICAgICAgcGFyc2VyMV9rd2FyZ3NbJ2hlbHAnXSA9ICcxIGhlbHAnCisgICAgICAgIHBhcnNlcjEgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzEnLCAqKnBhcnNlcjFfa3dhcmdzKQorICAgICAgICBwYXJzZXIxLmFkZF9hcmd1bWVudCgnLXcnLCB0eXBlPWludCwgaGVscD0ndyBoZWxwJykKKyAgICAgICAgcGFyc2VyMS5hZGRfYXJndW1lbnQoJ3gnLCBjaG9pY2VzPSdhYmMnLCBoZWxwPSd4IGhlbHAnKQorCisgICAgICAgICMgYWRkIHNlY29uZCBzdWItcGFyc2VyCisgICAgICAgIHBhcnNlcjJfa3dhcmdzID0gZGljdChkZXNjcmlwdGlvbj0nMiBkZXNjcmlwdGlvbicpCisgICAgICAgIGlmIHN1YnBhcnNlcl9oZWxwOgorICAgICAgICAgICAgcGFyc2VyMl9rd2FyZ3NbJ2hlbHAnXSA9ICcyIGhlbHAnCisgICAgICAgIHBhcnNlcjIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzInLCAqKnBhcnNlcjJfa3dhcmdzKQorICAgICAgICBwYXJzZXIyLmFkZF9hcmd1bWVudCgnLXknLCBjaG9pY2VzPScxMjMnLCBoZWxwPSd5IGhlbHAnKQorICAgICAgICBwYXJzZXIyLmFkZF9hcmd1bWVudCgneicsIHR5cGU9Y29tcGxleCwgbmFyZ3M9JyonLCBoZWxwPSd6IGhlbHAnKQorCisgICAgICAgICMgYWRkIHRoaXJkIHN1Yi1wYXJzZXIKKyAgICAgICAgcGFyc2VyM19rd2FyZ3MgPSBkaWN0KGRlc2NyaXB0aW9uPSczIGRlc2NyaXB0aW9uJykKKyAgICAgICAgaWYgc3VicGFyc2VyX2hlbHA6CisgICAgICAgICAgICBwYXJzZXIzX2t3YXJnc1snaGVscCddID0gJzMgaGVscCcKKyAgICAgICAgcGFyc2VyMyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignMycsICoqcGFyc2VyM19rd2FyZ3MpCisgICAgICAgIHBhcnNlcjMuYWRkX2FyZ3VtZW50KCd0JywgdHlwZT1pbnQsIGhlbHA9J3QgaGVscCcpCisgICAgICAgIHBhcnNlcjMuYWRkX2FyZ3VtZW50KCd1JywgbmFyZ3M9Jy4uLicsIGhlbHA9J3UgaGVscCcpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIG1haW4gcGFyc2VyCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEFkZFN1YnBhcnNlcnMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKCkKKyAgICAgICAgc2VsZi5jb21tYW5kX2hlbHBfcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcihzdWJwYXJzZXJfaGVscD1UcnVlKQorCisgICAgZGVmIHRlc3RfcGFyc2VfYXJnc19mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgIyBjaGVjayBzb21lIGZhaWx1cmUgY2FzZXM6CisgICAgICAgIGZvciBhcmdzX3N0ciBpbiBbJycsICdhJywgJ2EgYScsICcwLjUgYScsICcwLjUgMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzAuNSAxIC15JywgJzAuNSAyIC13J106CisgICAgICAgICAgICBhcmdzID0gYXJnc19zdHIuc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9hcmdzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHNvbWUgbm9uLWZhaWx1cmUgY2FzZXM6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKCcwLjUgMSBiIC13IDcnLnNwbGl0KCkpLAorICAgICAgICAgICAgTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncygnMC4yNSAtLWZvbyAyIC15IDIgM2ogLS0gLTFqJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIE5TKGZvbz1UcnVlLCBiYXI9MC4yNSwgeT0nMicsIHo9WzNqLCAtMWpdKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncygnLS1mb28gMC4xMjUgMSBjJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIE5TKGZvbz1UcnVlLCBiYXI9MC4xMjUsIHc9Tm9uZSwgeD0nYycpLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKCctMS41IDMgMTEgLS0gYSAtLWZvbyA3IC0tIGInLnNwbGl0KCkpLAorICAgICAgICAgICAgTlMoZm9vPUZhbHNlLCBiYXI9LTEuNSwgdD0xMSwgdT1bJ2EnLCAnLS1mb28nLCAnNycsICctLScsICdiJ10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9wYXJzZV9rbm93bl9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IDEgYiAtdyA3Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbXSksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoJzAuNSAtcCAxIGIgLXcgNycuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwgWyctcCddKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IDEgYiAtdyA3IC1wJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbJy1wJ10pLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCcwLjUgMSBiIC1xIC1ycyAtdyA3Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbJy1xJywgJy1ycyddKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IC1XIDEgYiAtWCBZIC13IDcgWicuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwgWyctVycsICctWCcsICdZJywgJ1onXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Rlc3Qoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKGRlc3Q9J2JhcicpCisgICAgICAgIHBhcnNlcjEgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzEnKQorICAgICAgICBwYXJzZXIxLmFkZF9hcmd1bWVudCgnYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyhmb289RmFsc2UsIGJhcj0nMScsIGJhej0nMicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCcxIDInLnNwbGl0KCkpKQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyLDN9IC4uLlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyLDN9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyLDN9ICAgICBjb21tYW5kIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC0tZm9vICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3RfaGVscF9leHRyYV9wcmVmaXhfY2hhcnMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIC0gaXMgc3RpbGwgdXNlZCBmb3IgaGVscCBpZiBpdCBpcyBhIG5vbi1maXJzdCBwcmVmaXggY2hhcgorICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHByZWZpeF9jaGFycz0nKzotJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFstaF0gWysrZm9vXSBiYXIgezEsMiwzfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsrK2Zvb10gYmFyIHsxLDIsM30gLi4uCisKKyAgICAgICAgICAgIG1haW4gZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIGJhciAgICAgICAgIGJhciBoZWxwCisgICAgICAgICAgICAgIHsxLDIsM30gICAgIGNvbW1hbmQgaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgKytmb28gICAgICAgZm9vIGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKworICAgIGRlZiB0ZXN0X2hlbHBfYWx0ZXJuYXRlX3ByZWZpeF9jaGFycyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcihwcmVmaXhfY2hhcnM9Jys6LycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF91c2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1c2FnZTogUFJPRyBbK2hdIFsrK2Zvb10gYmFyIHsxLDIsM30gLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWytoXSBbKytmb29dIGJhciB7MSwyLDN9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyLDN9ICAgICBjb21tYW5kIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAraCwgKytoZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgICsrZm9vICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX2NvbW1hbmRfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbW1hbmRfaGVscF9wYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMiwzfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21tYW5kX2hlbHBfcGFyc2VyLmZvcm1hdF9oZWxwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMiwzfSAuLi4KKworICAgICAgICAgICAgbWFpbiBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgYmFyICAgICAgICAgYmFyIGhlbHAKKyAgICAgICAgICAgICAgezEsMiwzfSAgICAgY29tbWFuZCBoZWxwCisgICAgICAgICAgICAgICAgMSAgICAgICAgIDEgaGVscAorICAgICAgICAgICAgICAgIDIgICAgICAgICAyIGhlbHAKKyAgICAgICAgICAgICAgICAzICAgICAgICAgMyBoZWxwCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAtLWZvbyAgICAgICBmb28gaGVscAorICAgICAgICAgICAgJycnKSkKKworICAgIGRlZiB0ZXN0X3N1YnBhcnNlcl90aXRsZV9oZWxwKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J21haW4gZGVzY3JpcHRpb24nKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgaGVscD0nYmFyIGhlbHAnKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2NvbW1hbmQgaGVscCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYWRkaXRpb25hbCB0ZXh0JykKKyAgICAgICAgcGFyc2VyMSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignMScpCisgICAgICAgIHBhcnNlcjIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvb10gYmFyIHsxLDJ9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLS1mb28gICAgICAgZm9vIGhlbHAKKworICAgICAgICAgICAgc3ViY29tbWFuZHM6CisgICAgICAgICAgICAgIGNvbW1hbmQgaGVscAorCisgICAgICAgICAgICAgIHsxLDJ9ICAgICAgIGFkZGl0aW9uYWwgdGV4dAorICAgICAgICAgICAgJycnKSkKKworICAgIGRlZiBfdGVzdF9zdWJwYXJzZXJfaGVscChzZWxmLCBhcmdzX3N0ciwgZXhwZWN0ZWRfaGVscCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoYXJnc19zdHIuc3BsaXQoKSkKKyAgICAgICAgZXhjZXB0IEFyZ3VtZW50UGFyc2VyRXJyb3I6CisgICAgICAgICAgICBlcnIgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgaWYgZXJyLnN0ZG91dCAhPSBleHBlY3RlZF9oZWxwOgorICAgICAgICAgICAgICAgIHByaW50KHJlcHIoZXhwZWN0ZWRfaGVscCkpCisgICAgICAgICAgICAgICAgcHJpbnQocmVwcihlcnIuc3Rkb3V0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnN0ZG91dCwgZXhwZWN0ZWRfaGVscCkKKworICAgIGRlZiB0ZXN0X3N1YnBhcnNlcjFfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zdWJwYXJzZXJfaGVscCgnNS4wIDEgLWgnLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgYmFyIDEgWy1oXSBbLXcgV10ge2EsYixjfQorCisgICAgICAgICAgICAxIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICB7YSxiLGN9ICAgICB4IGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC13IFcgICAgICAgIHcgaGVscAorICAgICAgICAgICAgJycnKSkKKworICAgIGRlZiB0ZXN0X3N1YnBhcnNlcjJfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zdWJwYXJzZXJfaGVscCgnNS4wIDIgLWgnLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgYmFyIDIgWy1oXSBbLXkgezEsMiwzfV0gW3ogW3ogLi4uXV0KKworICAgICAgICAgICAgMiBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgeiAgICAgICAgICAgeiBoZWxwCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAteSB7MSwyLDN9ICB5IGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKyMgPT09PT09PT09PT09CisjIEdyb3VwcyB0ZXN0cworIyA9PT09PT09PT09PT0KKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzR3JvdXBzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGF0IG9yZGVyIG9mIGdyb3VwIHBvc2l0aW9uYWxzIG1hdGNoZXMgY29uc3RydWN0aW9uIG9yZGVyIiIiCisKKyAgICBkZWYgdGVzdF9ub25ncm91cF9maXJzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2cnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ2JhcicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JheicpCisgICAgICAgIGV4cGVjdGVkID0gTlMoZm9vPScxJywgYmFyPScyJywgYmF6PSczJykKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlX2FyZ3MoJzEgMiAzJy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9ncm91cF9maXJzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ3h4eCcpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnZm9vJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmF6JykKKyAgICAgICAgZXhwZWN0ZWQgPSBOUyhmb289JzEnLCBiYXI9JzInLCBiYXo9JzMnKQorICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2VfYXJncygnMSAyIDMnLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2ludGVybGVhdmVkX2dyb3VwcyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ3h4eCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmF6JykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCd5eXknKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ2ZyZWxsJykKKyAgICAgICAgZXhwZWN0ZWQgPSBOUyhmb289JzEnLCBiYXI9JzInLCBiYXo9JzMnLCBmcmVsbD0nNCcpCisgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZV9hcmdzKCcxIDIgMyA0Jy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQpCisKKyMgPT09PT09PT09PT09PT09PT09PQorIyBQYXJlbnQgcGFyc2VyIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFBhcmVudFBhcnNlcnMoVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoYXQgcGFyc2VycyBjYW4gYmUgY3JlYXRlZCB3aXRoIHBhcmVudCBwYXJzZXJzIiIiCisKKyAgICBkZWYgYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RQYXJlbnRQYXJzZXJzLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYud3h5el9wYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgc2VsZi53eHl6X3BhcmVudC5hZGRfYXJndW1lbnQoJy0tdycpCisgICAgICAgIHhfZ3JvdXAgPSBzZWxmLnd4eXpfcGFyZW50LmFkZF9hcmd1bWVudF9ncm91cCgneCcpCisgICAgICAgIHhfZ3JvdXAuYWRkX2FyZ3VtZW50KCcteScpCisgICAgICAgIHNlbGYud3h5el9wYXJlbnQuYWRkX2FyZ3VtZW50KCd6JykKKworICAgICAgICBzZWxmLmFiY2RfcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHNlbGYuYWJjZF9wYXJlbnQuYWRkX2FyZ3VtZW50KCdhJykKKyAgICAgICAgc2VsZi5hYmNkX3BhcmVudC5hZGRfYXJndW1lbnQoJy1iJykKKyAgICAgICAgY19ncm91cCA9IHNlbGYuYWJjZF9wYXJlbnQuYWRkX2FyZ3VtZW50X2dyb3VwKCdjJykKKyAgICAgICAgY19ncm91cC5hZGRfYXJndW1lbnQoJy0tZCcpCisKKyAgICAgICAgc2VsZi53X3BhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBzZWxmLndfcGFyZW50LmFkZF9hcmd1bWVudCgnLS13JykKKworICAgICAgICBzZWxmLnpfcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHNlbGYuel9wYXJlbnQuYWRkX2FyZ3VtZW50KCd6JykKKworICAgICAgICAjIHBhcmVudHMgd2l0aCBtdXR1YWxseSBleGNsdXNpdmUgZ3JvdXBzCisgICAgICAgIHNlbGYuYWJfbXV0ZXhfcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIGdyb3VwID0gc2VsZi5hYl9tdXRleF9wYXJlbnQuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWEnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1iJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgICAgICBzZWxmLm1haW5fcHJvZ3JhbSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfcGFyZW50KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPVtzZWxmLnd4eXpfcGFyZW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnLXkgMSAyIC0tdyAzJy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyh3PSczJywgeT0nMScsIHo9JzInKSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9wYXJlbnRfbXV0ZXgoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbXV0ZXhfYWIoc2VsZi5hYl9tdXRleF9wYXJlbnQucGFyc2VfYXJncykKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1bc2VsZi5hYl9tdXRleF9wYXJlbnRdKQorICAgICAgICBzZWxmLl90ZXN0X211dGV4X2FiKHBhcnNlci5wYXJzZV9hcmdzKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2dyYW5wYXJlbnRfbXV0ZXgoc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbc2VsZi5hYl9tdXRleF9wYXJlbnRdCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlLCBwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3BhcnNlcl0pCisgICAgICAgIHNlbGYuX3Rlc3RfbXV0ZXhfYWIocGFyc2VyLnBhcnNlX2FyZ3MpCisKKyAgICBkZWYgX3Rlc3RfbXV0ZXhfYWIoc2VsZiwgcGFyc2VfYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfYXJncyhbXSksIE5TKGE9RmFsc2UsIGI9RmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX2FyZ3MoWyctYSddKSwgTlMoYT1UcnVlLCBiPUZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9hcmdzKFsnLWInXSksIE5TKGE9RmFsc2UsIGI9VHJ1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZV9hcmdzLCBbJy1hJywgJy1iJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZV9hcmdzLCBbJy1iJywgJy1hJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZV9hcmdzLCBbJy1jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZV9hcmdzLCBbJy1hJywgJy1jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZV9hcmdzLCBbJy1iJywgJy1jJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9wYXJlbnRzKHNlbGYpOgorICAgICAgICBwYXJlbnRzID0gW3NlbGYuYWJjZF9wYXJlbnQsIHNlbGYud3h5el9wYXJlbnRdCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnLS1kIDEgLS13IDIgMyA0Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyhhPSczJywgYj1Ob25lLCBkPScxJywgdz0nMicsIHk9Tm9uZSwgej0nNCcpKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfcGFyZW50c19tdXRleChzZWxmKToKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLmFiX211dGV4X3BhcmVudCwgc2VsZi53eHl6X3BhcmVudF0KKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1wYXJlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCctYSAtLXcgMiAzJy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyhhPVRydWUsIGI9RmFsc2UsIHc9JzInLCB5PU5vbmUsIHo9JzMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKAorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MsICctYSAtLXcgMiAzIC1iJy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IoCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncywgJy1hIC1iIC0tdyAyIDMnLnNwbGl0KCkpCisKKyAgICBkZWYgdGVzdF9jb25mbGljdGluZ19wYXJlbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFyZ3BhcnNlLkFyZ3VtZW50RXJyb3IsCisgICAgICAgICAgICBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlciwKKyAgICAgICAgICAgIHBhcmVudHM9W3NlbGYud19wYXJlbnQsIHNlbGYud3h5el9wYXJlbnRdKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RpbmdfcGFyZW50c19tdXRleChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhcmdwYXJzZS5Bcmd1bWVudEVycm9yLAorICAgICAgICAgICAgYXJncGFyc2UuQXJndW1lbnRQYXJzZXIsCisgICAgICAgICAgICBwYXJlbnRzPVtzZWxmLmFiY2RfcGFyZW50LCBzZWxmLmFiX211dGV4X3BhcmVudF0pCisKKyAgICBkZWYgdGVzdF9zYW1lX2FyZ3VtZW50X25hbWVfcGFyZW50cyhzZWxmKToKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLnd4eXpfcGFyZW50LCBzZWxmLnpfcGFyZW50XQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJzEgMicuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlModz1Ob25lLCB5PU5vbmUsIHo9JzInKSkKKworICAgIGRlZiB0ZXN0X3N1YnBhcnNlcl9wYXJlbnRzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoKQorICAgICAgICBhYmNkZV9wYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2JhcicsIHBhcmVudHM9W3NlbGYuYWJjZF9wYXJlbnRdKQorICAgICAgICBhYmNkZV9wYXJzZXIuYWRkX2FyZ3VtZW50KCdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnYmFyIC1iIDEgLS1kIDIgMyA0Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyhhPSczJywgYj0nMScsIGQ9JzInLCBlPSc0JykpCisKKyAgICBkZWYgdGVzdF9zdWJwYXJzZXJfcGFyZW50c19tdXRleChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLmFiX211dGV4X3BhcmVudF0KKyAgICAgICAgYWJjX3BhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZm9vJywgcGFyZW50cz1wYXJlbnRzKQorICAgICAgICBjX2dyb3VwID0gYWJjX3BhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2NfZ3JvdXAnKQorICAgICAgICBjX2dyb3VwLmFkZF9hcmd1bWVudCgnYycpCisgICAgICAgIHBhcmVudHMgPSBbc2VsZi53eHl6X3BhcmVudCwgc2VsZi5hYl9tdXRleF9wYXJlbnRdCisgICAgICAgIHd4eXphYmVfcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdiYXInLCBwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIHd4eXphYmVfcGFyc2VyLmFkZF9hcmd1bWVudCgnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJ2ZvbyAtYSA0Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyhhPVRydWUsIGI9RmFsc2UsIGM9JzQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnYmFyIC1iICAtLXcgMiAzIDQnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKGE9RmFsc2UsIGI9VHJ1ZSwgdz0nMicsIHk9Tm9uZSwgej0nMycsIGU9JzQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKAorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MsICdmb28gLWEgLWIgNCcuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKAorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MsICdiYXIgLWIgLWEgNCcuc3BsaXQoKSkKKworICAgIGRlZiB0ZXN0X3BhcmVudF9oZWxwKHNlbGYpOgorICAgICAgICBwYXJlbnRzID0gW3NlbGYuYWJjZF9wYXJlbnQsIHNlbGYud3h5el9wYXJlbnRdCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgcGFyc2VyX2hlbHAgPSBwYXJzZXIuZm9ybWF0X2hlbHAoKQorICAgICAgICBwcm9nbmFtZSA9IHNlbGYubWFpbl9wcm9ncmFtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyX2hlbHAsIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZToge317fVstaF0gWy1iIEJdIFstLWQgRF0gWy0tdyBXXSBbLXkgWV0gYSB6CisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBhCisgICAgICAgICAgICAgIHoKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC1iIEIKKyAgICAgICAgICAgICAgLS13IFcKKworICAgICAgICAgICAgYzoKKyAgICAgICAgICAgICAgLS1kIEQKKworICAgICAgICAgICAgeDoKKyAgICAgICAgICAgICAgLXkgWQorICAgICAgICAnJycuZm9ybWF0KHByb2duYW1lLCAnICcgaWYgcHJvZ25hbWUgZWxzZSAnJyApKSkKKworICAgIGRlZiB0ZXN0X2dyb3Vwc19wYXJlbnRzKHNlbGYpOgorICAgICAgICBwYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgZyA9IHBhcmVudC5hZGRfYXJndW1lbnRfZ3JvdXAodGl0bGU9J2cnLCBkZXNjcmlwdGlvbj0nZ2QnKQorICAgICAgICBnLmFkZF9hcmd1bWVudCgnLXcnKQorICAgICAgICBnLmFkZF9hcmd1bWVudCgnLXgnKQorICAgICAgICBtID0gcGFyZW50LmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBtLmFkZF9hcmd1bWVudCgnLXknKQorICAgICAgICBtLmFkZF9hcmd1bWVudCgnLXonKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsIHBhcnNlci5wYXJzZV9hcmdzLAorICAgICAgICAgICAgWycteScsICdZJywgJy16JywgJ1onXSkKKworICAgICAgICBwYXJzZXJfaGVscCA9IHBhcnNlci5mb3JtYXRfaGVscCgpCisgICAgICAgIHByb2duYW1lID0gc2VsZi5tYWluX3Byb2dyYW0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJfaGVscCwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiB7fXt9Wy1oXSBbLXcgV10gWy14IFhdIFsteSBZIHwgLXogWl0KKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC15IFkKKyAgICAgICAgICAgICAgLXogWgorCisgICAgICAgICAgICBnOgorICAgICAgICAgICAgICBnZAorCisgICAgICAgICAgICAgIC13IFcKKyAgICAgICAgICAgICAgLXggWAorICAgICAgICAnJycuZm9ybWF0KHByb2duYW1lLCAnICcgaWYgcHJvZ25hbWUgZWxzZSAnJyApKSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgTXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVHcm91cEVycm9ycyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FkZF9hcmd1bWVudF9ncm91cChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcworICAgICAgICByYWlzZXMoVHlwZUVycm9yLCBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCwgdGl0bGU9J2ZvbycpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FkZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgYWRkX2FyZ3VtZW50ID0gZ3JvdXAuYWRkX2FyZ3VtZW50CisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBhZGRfYXJndW1lbnQsICctLWZvbycsIHJlcXVpcmVkPVRydWUpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBhZGRfYXJndW1lbnQsICdiYXInKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgYWRkX2FyZ3VtZW50LCAnYmFyJywgbmFyZ3M9JysnKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgYWRkX2FyZ3VtZW50LCAnYmFyJywgbmFyZ3M9MSkKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIGFkZF9hcmd1bWVudCwgJ2JhcicsIG5hcmdzPWFyZ3BhcnNlLlBBUlNFUikKKworICAgIGRlZiB0ZXN0X2hlbHAoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBncm91cDEgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIGdyb3VwMS5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgZ3JvdXAxLmFkZF9hcmd1bWVudCgnLS1iYXInLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgICAgZ3JvdXAyID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBncm91cDIuYWRkX2FyZ3VtZW50KCctLXNvdXAnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBncm91cDIuYWRkX2FyZ3VtZW50KCctLW51dHMnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgICAgZXhwZWN0ZWQgPSAnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyB8IC0tYmFyXSBbLS1zb3VwIHwgLS1udXRzXQorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLS1mb28KKyAgICAgICAgICAgICAgLS1iYXIKKyAgICAgICAgICAgICAgLS1zb3VwCisgICAgICAgICAgICAgIC0tbnV0cworICAgICAgICAgICAgICAnJycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KGV4cGVjdGVkKSkKKworY2xhc3MgTUVNaXhpbihvYmplY3QpOgorCisgICAgZGVmIHRlc3RfZmFpbHVyZXNfd2hlbl9ub3RfcmVxdWlyZWQoc2VsZik6CisgICAgICAgIHBhcnNlX2FyZ3MgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9RmFsc2UpLnBhcnNlX2FyZ3MKKyAgICAgICAgZXJyb3IgPSBBcmd1bWVudFBhcnNlckVycm9yCisgICAgICAgIGZvciBhcmdzX3N0cmluZyBpbiBzZWxmLmZhaWx1cmVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHBhcnNlX2FyZ3MsIGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlc193aGVuX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBwYXJzZV9hcmdzID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPVRydWUpLnBhcnNlX2FyZ3MKKyAgICAgICAgZXJyb3IgPSBBcmd1bWVudFBhcnNlckVycm9yCisgICAgICAgIGZvciBhcmdzX3N0cmluZyBpbiBzZWxmLmZhaWx1cmVzICsgWycnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCBwYXJzZV9hcmdzLCBhcmdzX3N0cmluZy5zcGxpdCgpKQorCisgICAgZGVmIHRlc3Rfc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBwYXJzZV9hcmdzID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPUZhbHNlKS5wYXJzZV9hcmdzCisgICAgICAgIHN1Y2Nlc3NlcyA9IHNlbGYuc3VjY2Vzc2VzICsgc2VsZi5zdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQKKyAgICAgICAgZm9yIGFyZ3Nfc3RyaW5nLCBleHBlY3RlZF9ucyBpbiBzdWNjZXNzZXM6CisgICAgICAgICAgICBhY3R1YWxfbnMgPSBwYXJzZV9hcmdzKGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9ucywgZXhwZWN0ZWRfbnMpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzZXNfd2hlbl9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgcGFyc2VfYXJncyA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1UcnVlKS5wYXJzZV9hcmdzCisgICAgICAgIGZvciBhcmdzX3N0cmluZywgZXhwZWN0ZWRfbnMgaW4gc2VsZi5zdWNjZXNzZXM6CisgICAgICAgICAgICBhY3R1YWxfbnMgPSBwYXJzZV9hcmdzKGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9ucywgZXhwZWN0ZWRfbnMpCisKKyAgICBkZWYgdGVzdF91c2FnZV93aGVuX25vdF9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgZm9ybWF0X3VzYWdlID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPUZhbHNlKS5mb3JtYXRfdXNhZ2UKKyAgICAgICAgZXhwZWN0ZWRfdXNhZ2UgPSBzZWxmLnVzYWdlX3doZW5fbm90X3JlcXVpcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X3VzYWdlKCksIHRleHR3cmFwLmRlZGVudChleHBlY3RlZF91c2FnZSkpCisKKyAgICBkZWYgdGVzdF91c2FnZV93aGVuX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBmb3JtYXRfdXNhZ2UgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9VHJ1ZSkuZm9ybWF0X3VzYWdlCisgICAgICAgIGV4cGVjdGVkX3VzYWdlID0gc2VsZi51c2FnZV93aGVuX3JlcXVpcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X3VzYWdlKCksIHRleHR3cmFwLmRlZGVudChleHBlY3RlZF91c2FnZSkpCisKKyAgICBkZWYgdGVzdF9oZWxwX3doZW5fbm90X3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBmb3JtYXRfaGVscCA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1GYWxzZSkuZm9ybWF0X2hlbHAKKyAgICAgICAgaGVscCA9IHNlbGYudXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgKyBzZWxmLmhlbHAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoaGVscCkpCisKKyAgICBkZWYgdGVzdF9oZWxwX3doZW5fcmVxdWlyZWQoc2VsZik6CisgICAgICAgIGZvcm1hdF9oZWxwID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPVRydWUpLmZvcm1hdF9oZWxwCisgICAgICAgIGhlbHAgPSBzZWxmLnVzYWdlX3doZW5fcmVxdWlyZWQgKyBzZWxmLmhlbHAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoaGVscCkpCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlU2ltcGxlKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWJhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWJheicsIG5hcmdzPSc/JywgY29uc3Q9J1onLCBoZWxwPSdiYXogaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctLWJhciBYIC0tYmF6IFknLCAnLS1iYXIgWCAtLWJheiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tYmFyIFgnLCBOUyhiYXI9J1gnLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmFyIFggLS1iYXIgWicsIE5TKGJhcj0nWicsIGJhej1Ob25lKSksCisgICAgICAgICgnLS1iYXogWScsIE5TKGJhcj1Ob25lLCBiYXo9J1knKSksCisgICAgICAgICgnLS1iYXonLCBOUyhiYXI9Tm9uZSwgYmF6PSdaJykpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tYmFyIEJBUiB8IC0tYmF6IFtCQVpdXQorICAgICAgICAnJycKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdICgtLWJhciBCQVIgfCAtLWJheiBbQkFaXSkKKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWJhciBCQVIgICAgYmFyIGhlbHAKKyAgICAgICAgICAtLWJheiBbQkFaXSAgYmF6IGhlbHAKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlTG9uZyhNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZD1Ob25lKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYWJjZGUnLCBoZWxwPSdhYmNkZSBoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mZ2hpaicsIGhlbHA9J2ZnaGlqIGhlbHAnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0ta2xtbm8nLCBoZWxwPSdrbG1ubyBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXBxcnN0JywgaGVscD0ncHFyc3QgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctLWtsbW5vIFggLS1wcXJzdCBZJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1rbG1ubyBYJywgTlMoYWJjZGU9Tm9uZSwgZmdoaWo9Tm9uZSwga2xtbm89J1gnLCBwcXJzdD1Ob25lKSksCisgICAgICAgICgnLS1hYmNkZSBZIC0ta2xtbm8gWCcsCisgICAgICAgICAgICBOUyhhYmNkZT0nWScsIGZnaGlqPU5vbmUsIGtsbW5vPSdYJywgcHFyc3Q9Tm9uZSkpLAorICAgICAgICAoJy0tcHFyc3QgWCcsIE5TKGFiY2RlPU5vbmUsIGZnaGlqPU5vbmUsIGtsbW5vPU5vbmUsIHBxcnN0PSdYJykpLAorICAgICAgICAoJy0tcHFyc3QgWCAtLWZnaGlqIFknLAorICAgICAgICAgICAgTlMoYWJjZGU9Tm9uZSwgZmdoaWo9J1knLCBrbG1ubz1Ob25lLCBwcXJzdD0nWCcpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKGFiY2RlPU5vbmUsIGZnaGlqPU5vbmUsIGtsbW5vPU5vbmUsIHBxcnN0PU5vbmUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICB1c2FnZTogUFJPRyBbLWhdIFstLWFiY2RlIEFCQ0RFXSBbLS1mZ2hpaiBGR0hJSl0KKyAgICAgICAgICAgICAgICBbLS1rbG1ubyBLTE1OTyB8IC0tcHFyc3QgUFFSU1RdCisgICAgJycnCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9ICcnJ1wKKyAgICB1c2FnZTogUFJPRyBbLWhdIFstLWFiY2RlIEFCQ0RFXSBbLS1mZ2hpaiBGR0hJSl0KKyAgICAgICAgICAgICAgICAoLS1rbG1ubyBLTE1OTyB8IC0tcHFyc3QgUFFSU1QpCisgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgIC0tYWJjZGUgQUJDREUgIGFiY2RlIGhlbHAKKyAgICAgIC0tZmdoaWogRkdISUogIGZnaGlqIGhlbHAKKyAgICAgIC0ta2xtbm8gS0xNTk8gIGtsbW5vIGhlbHAKKyAgICAgIC0tcHFyc3QgUFFSU1QgIHBxcnN0IGhlbHAKKyAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVGaXJzdFN1cHByZXNzZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCcteCcsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXknLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbJy14IFggLXknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcteCBYJywgTlMoeD0nWCcsIHk9VHJ1ZSkpLAorICAgICAgICAoJy14IFggLXggWScsIE5TKHg9J1knLCB5PVRydWUpKSwKKyAgICAgICAgKCcteScsIE5TKHg9Tm9uZSwgeT1GYWxzZSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PVRydWUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXldCisgICAgICAgICcnJworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gLXkKKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC15ICAgICAgICAgIHkgaGVscAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVNYW55U3VwcHJlc3NlZChNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZCk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBhZGQgPSBncm91cC5hZGRfYXJndW1lbnQKKyAgICAgICAgYWRkKCctLXNwYW0nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgICAgICBhZGQoJy0tYmFkZ2VyJywgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgICAgIGFkZCgnLS1ibGFkZGVyJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbCisgICAgICAgICctLXNwYW0gLS1iYWRnZXInLAorICAgICAgICAnLS1iYWRnZXIgLS1ibGFkZGVyIEInLAorICAgICAgICAnLS1ibGFkZGVyIEIgLS1zcGFtJywKKyAgICBdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tc3BhbScsIE5TKHNwYW09VHJ1ZSwgYmFkZ2VyPVRydWUsIGJsYWRkZXI9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZ2VyJywgTlMoc3BhbT1GYWxzZSwgYmFkZ2VyPUZhbHNlLCBibGFkZGVyPU5vbmUpKSwKKyAgICAgICAgKCctLWJsYWRkZXIgQicsIE5TKHNwYW09RmFsc2UsIGJhZGdlcj1UcnVlLCBibGFkZGVyPSdCJykpLAorICAgICAgICAoJy0tc3BhbSAtLXNwYW0nLCBOUyhzcGFtPVRydWUsIGJhZGdlcj1UcnVlLCBibGFkZGVyPU5vbmUpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKHNwYW09RmFsc2UsIGJhZGdlcj1UcnVlLCBibGFkZGVyPU5vbmUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0KKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbEFuZFBvc2l0aW9uYWwoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J0ZPTycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zcGFtJywgaGVscD0nU1BBTScpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnYmFkZ2VyJywgbmFyZ3M9JyonLCBkZWZhdWx0PSdYJywgaGVscD0nQkFER0VSJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbCisgICAgICAgICctLWZvbyAtLXNwYW0gUycsCisgICAgICAgICctLXNwYW0gUyBYJywKKyAgICAgICAgJ1ggLS1mb28nLAorICAgICAgICAnWCBZIFogLS1zcGFtIFMnLAorICAgICAgICAnLS1mb28gWCBZJywKKyAgICBdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tZm9vJywgTlMoZm9vPVRydWUsIHNwYW09Tm9uZSwgYmFkZ2VyPSdYJykpLAorICAgICAgICAoJy0tc3BhbSBTJywgTlMoZm9vPUZhbHNlLCBzcGFtPSdTJywgYmFkZ2VyPSdYJykpLAorICAgICAgICAoJ1gnLCBOUyhmb289RmFsc2UsIHNwYW09Tm9uZSwgYmFkZ2VyPVsnWCddKSksCisgICAgICAgICgnWCBZIFonLCBOUyhmb289RmFsc2UsIHNwYW09Tm9uZSwgYmFkZ2VyPVsnWCcsICdZJywgJ1onXSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoZm9vPUZhbHNlLCBzcGFtPU5vbmUsIGJhZGdlcj0nWCcpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gfCAtLXNwYW0gU1BBTSB8IGJhZGdlciBbYmFkZ2VyIC4uLl1dCisgICAgICAgICcnJworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gKC0tZm9vIHwgLS1zcGFtIFNQQU0gfCBiYWRnZXIgW2JhZGdlciAuLi5dKQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGJhZGdlciAgICAgICBCQURHRVIKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyAgICAgICAgRk9PCisgICAgICAgICAgLS1zcGFtIFNQQU0gIFNQQU0KKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzTWl4ZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSd4IGhlbHAnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYSBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2IgaGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy15JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2MgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctYSAtYicsICctYiAtYycsICctYSAtYycsICctYSAtYiAtYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy1hJywgTlMoYT1UcnVlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PUZhbHNlLCB5PUZhbHNlKSksCisgICAgICAgICgnLWInLCBOUyhhPUZhbHNlLCBiPVRydWUsIGM9RmFsc2UsIHg9RmFsc2UsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctYycsIE5TKGE9RmFsc2UsIGI9RmFsc2UsIGM9VHJ1ZSwgeD1GYWxzZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy1hIC14JywgTlMoYT1UcnVlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PVRydWUsIHk9RmFsc2UpKSwKKyAgICAgICAgKCcteSAtYicsIE5TKGE9RmFsc2UsIGI9VHJ1ZSwgYz1GYWxzZSwgeD1GYWxzZSwgeT1UcnVlKSksCisgICAgICAgICgnLXggLXkgLWMnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPVRydWUsIHg9VHJ1ZSwgeT1UcnVlKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCcnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PUZhbHNlLCB5PUZhbHNlKSksCisgICAgICAgICgnLXgnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PVRydWUsIHk9RmFsc2UpKSwKKyAgICAgICAgKCcteScsIE5TKGE9RmFsc2UsIGI9RmFsc2UsIGM9RmFsc2UsIHg9RmFsc2UsIHk9VHJ1ZSkpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXhdIFstYV0gWy1iXSBbLXldIFstY10KKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14ICAgICAgICAgIHggaGVscAorICAgICAgICAgIC1hICAgICAgICAgIGEgaGVscAorICAgICAgICAgIC1iICAgICAgICAgIGIgaGVscAorICAgICAgICAgIC15ICAgICAgICAgIHkgaGVscAorICAgICAgICAgIC1jICAgICAgICAgIGMgaGVscAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVJbkdyb3VwKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgdGl0bGVkX2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgKKyAgICAgICAgICAgIHRpdGxlPSdUaXRsZWQgZ3JvdXAnLCBkZXNjcmlwdGlvbj0nR3JvdXAgZGVzY3JpcHRpb24nKQorICAgICAgICBtdXRleF9ncm91cCA9IFwKKyAgICAgICAgICAgIHRpdGxlZF9ncm91cC5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBtdXRleF9ncm91cC5hZGRfYXJndW1lbnQoJy0tYmFyJywgaGVscD0nYmFyIGhlbHAnKQorICAgICAgICBtdXRleF9ncm91cC5hZGRfYXJndW1lbnQoJy0tYmF6JywgaGVscD0nYmF6IGhlbHAnKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsnLS1iYXIgWCAtLWJheiBZJywgJy0tYmF6IFggLS1iYXIgWSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tYmFyIFgnLCBOUyhiYXI9J1gnLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmF6IFknLCBOUyhiYXI9Tm9uZSwgYmF6PSdZJykpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tYmFyIEJBUiB8IC0tYmF6IEJBWl0KKyAgICAgICAgJycnCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSAoLS1iYXIgQkFSIHwgLS1iYXogQkFaKQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKyAgICAgICAgVGl0bGVkIGdyb3VwOgorICAgICAgICAgIEdyb3VwIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAtLWJhciBCQVIgICBiYXIgaGVscAorICAgICAgICAgIC0tYmF6IEJBWiAgIGJheiBoZWxwCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc0FuZFBvc2l0aW9uYWxzTWl4ZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneCcsIGhlbHA9J3ggaGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy15JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdhJywgbmFyZ3M9Jz8nLCBoZWxwPSdhIGhlbHAnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1iJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYiBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2MgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWydYIEEgLWInLCAnLWIgLWMnLCAnLWMgWCBBJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnWCBBJywgTlMoYT0nQScsIGI9RmFsc2UsIGM9RmFsc2UsIHg9J1gnLCB5PUZhbHNlKSksCisgICAgICAgICgnWCAtYicsIE5TKGE9Tm9uZSwgYj1UcnVlLCBjPUZhbHNlLCB4PSdYJywgeT1GYWxzZSkpLAorICAgICAgICAoJ1ggLWMnLCBOUyhhPU5vbmUsIGI9RmFsc2UsIGM9VHJ1ZSwgeD0nWCcsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdYIEEgLXknLCBOUyhhPSdBJywgYj1GYWxzZSwgYz1GYWxzZSwgeD0nWCcsIHk9VHJ1ZSkpLAorICAgICAgICAoJ1ggLXkgLWInLCBOUyhhPU5vbmUsIGI9VHJ1ZSwgYz1GYWxzZSwgeD0nWCcsIHk9VHJ1ZSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnWCcsIE5TKGE9Tm9uZSwgYj1GYWxzZSwgYz1GYWxzZSwgeD0nWCcsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdYIC15JywgTlMoYT1Ob25lLCBiPUZhbHNlLCBjPUZhbHNlLCB4PSdYJywgeT1UcnVlKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9IHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteV0gWy1iXSBbLWNdIHggW2FdCisgICAgICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgeCAgICAgICAgICAgeCBoZWxwCisgICAgICAgICAgYSAgICAgICAgICAgYSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteSAgICAgICAgICB5IGhlbHAKKyAgICAgICAgICAtYiAgICAgICAgICBiIGhlbHAKKyAgICAgICAgICAtYyAgICAgICAgICBjIGhlbHAKKyAgICAgICAgJycnCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBNdXR1YWxseSBleGNsdXNpdmUgZ3JvdXAgaW4gcGFyZW50IHBhcnNlciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIE1FUEJhc2Uob2JqZWN0KToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJlbnQgPSBzdXBlcihNRVBCYXNlLCBzZWxmKS5nZXRfcGFyc2VyKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigKKyAgICAgICAgICAgIHByb2c9cGFyZW50LnByb2csIGFkZF9oZWxwPUZhbHNlLCBwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlR3JvdXBFcnJvcnNQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlR3JvdXBFcnJvcnMpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVTaW1wbGVQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlU2ltcGxlKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlTG9uZ1BhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVMb25nKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlRmlyc3RTdXBwcmVzc2VkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUZpcnN0U3VwcHJlc3NlZCk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU1hbnlTdXBwcmVzc2VkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU1hbnlTdXBwcmVzc2VkKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxBbmRQb3NpdGlvbmFsUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsQW5kUG9zaXRpb25hbCk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc01peGVkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc01peGVkKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzQW5kUG9zaXRpb25hbHNNaXhlZFBhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbHNBbmRQb3NpdGlvbmFsc01peGVkKToKKyAgICBwYXNzCisKKyMgPT09PT09PT09PT09PT09PT0KKyMgU2V0IGRlZmF1bHQgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFNldERlZmF1bHRzKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19ub19hcmdzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoeD0nZm9vJykKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh5PSdiYXInLCB6PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nZm9vJywgeT0nYmFyJywgej0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nZm9vJywgeT0nYmFyJywgej0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSwgTlMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nYmF6JywgeT0nYmFyJywgej0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSwgTlMoeD0nYmF6JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2JheicsIHk9J2JhcicsIHo9MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10sIE5TKHg9J2JheicsIHo9MikpKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3dpdGhfYXJncyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHg9J2ZvbycsIHk9J2JhcicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgZGVmYXVsdD0neGZvb3gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J3hmb294JywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J3hmb294JywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10sIE5TKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2JheicsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdLCBOUyh4PSdiYXonKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nMScsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCcteCAxJy5zcGxpdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PScxJywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoJy14IDEnLnNwbGl0KCksIE5TKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9JzEnLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncygnLXggMScuc3BsaXQoKSwgTlMoeD0nYmF6JykpKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3N1YnBhcnNlcnMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh4PSdmb28nKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgICAgcGFyc2VyX2EgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2EnKQorICAgICAgICBwYXJzZXJfYS5zZXRfZGVmYXVsdHMoeT0nYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdmb28nLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncygnYScuc3BsaXQoKSkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfcGFyZW50cyhzZWxmKToKKyAgICAgICAgcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHBhcmVudC5zZXRfZGVmYXVsdHMoeD0nZm9vJykKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdmb28nKSwgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3NhbWVfYXNfYWRkX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHModz0nVycsIHg9J1gnLCB5PSdZJywgej0nWicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy13JykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBkZWZhdWx0PSdYWCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3knLCBuYXJncz0nPycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3onLCBuYXJncz0nPycsIGRlZmF1bHQ9J1paJykKKworICAgICAgICAjIGRlZmF1bHRzIHNldCBwcmV2aW91c2x5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlModz0nVycsIHg9J1hYJywgeT0nWScsIHo9J1paJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorCisgICAgICAgICMgcmVzZXQgZGVmYXVsdHMKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh3PSdXVycsIHg9J1gnLCB5PSdZWScsIHo9J1onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHc9J1dXJywgeD0nWCcsIHk9J1lZJywgej0nWicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19zYW1lX2FzX2FkZF9hcmd1bWVudF9ncm91cChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHc9J1cnLCB4PSdYJywgeT0nWScsIHo9J1onKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2ZvbycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXcnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy14JywgZGVmYXVsdD0nWFgnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ3knLCBuYXJncz0nPycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgneicsIG5hcmdzPSc/JywgZGVmYXVsdD0nWlonKQorCisKKyAgICAgICAgIyBkZWZhdWx0cyBzZXQgcHJldmlvdXNseQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHc9J1cnLCB4PSdYWCcsIHk9J1knLCB6PSdaWicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKworICAgICAgICAjIHJlc2V0IGRlZmF1bHRzCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHModz0nV1cnLCB4PSdYJywgeT0nWVknLCB6PSdaJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh3PSdXVycsIHg9J1gnLCB5PSdZWScsIHo9J1onKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisKKyMgPT09PT09PT09PT09PT09PT0KKyMgR2V0IGRlZmF1bHQgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEdldERlZmF1bHQoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZ2V0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJiYXIiKSkKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWJhciIsIHR5cGU9aW50LCBkZWZhdWx0PTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmb289ImJhZGdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImJhZGdlciIsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgTmFtZXNwYWNlICdjb250YWlucycgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE5hbWVzcGFjZUNvbnRhaW5zU2ltcGxlKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycgaW4gbnMsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnIG5vdCBpbiBucywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneCcgaW4gbnMsIEZhbHNlKQorCisgICAgZGVmIHRlc3Rfbm9uX2VtcHR5KHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSh4PTEsIHk9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneCcgaW4gbnMsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3gnIG5vdCBpbiBucywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3knIGluIG5zLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnIGluIG5zLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneHgnIGluIG5zLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneicgaW4gbnMsIEZhbHNlKQorCisjID09PT09PT09PT09PT09PT09PT09PQorIyBIZWxwIGZvcm1hdHRpbmcgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RIZWxwRm9ybWF0dGluZ01ldGFjbGFzcyh0eXBlKToKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBib2R5ZGljdCk6CisgICAgICAgIGlmIG5hbWUgPT0gJ0hlbHBUZXN0Q2FzZSc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbGFzcyBBZGRUZXN0cyhvYmplY3QpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jbGFzcywgZnVuY19zdWZmaXgsIHN0ZF9uYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmZ1bmNfc3VmZml4ID0gZnVuY19zdWZmaXgKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZF9uYW1lID0gc3RkX25hbWUKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0X2Z1bmMgaW4gW3NlbGYudGVzdF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3ByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdF9wcmludF9maWxlXToKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9uYW1lID0gJyVzXyVzJyAlICh0ZXN0X2Z1bmMuX19uYW1lX18sIGZ1bmNfc3VmZml4KQorCisgICAgICAgICAgICAgICAgICAgIGRlZiB0ZXN0X3dyYXBwZXIoc2VsZiwgdGVzdF9mdW5jPXRlc3RfZnVuYyk6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Z1bmMoc2VsZikKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF93cmFwcGVyLl9fbmFtZV9fID0gdGVzdF9uYW1lCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIodGVzdF9jbGFzcywgdGVzdF9uYW1lLCB0ZXN0X3dyYXBwZXIpCisKKyAgICAgICAgICAgIGRlZiBfZ2V0X3BhcnNlcihzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgICAgICAgICAqdGVzdGVyLnBhcnNlcl9zaWduYXR1cmUuYXJncywKKyAgICAgICAgICAgICAgICAgICAgKip0ZXN0ZXIucGFyc2VyX3NpZ25hdHVyZS5rd2FyZ3MpCisgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50X3NpZyBpbiBnZXRhdHRyKHRlc3RlciwgJ2FyZ3VtZW50X3NpZ25hdHVyZXMnLCBbXSk6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoKmFyZ3VtZW50X3NpZy5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqYXJndW1lbnRfc2lnLmt3YXJncykKKyAgICAgICAgICAgICAgICBncm91cF9zaWdzID0gZ2V0YXR0cih0ZXN0ZXIsICdhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzJywgW10pCisgICAgICAgICAgICAgICAgZm9yIGdyb3VwX3NpZywgYXJndW1lbnRfc2lncyBpbiBncm91cF9zaWdzOgorICAgICAgICAgICAgICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoKmdyb3VwX3NpZy5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipncm91cF9zaWcua3dhcmdzKQorICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRfc2lnIGluIGFyZ3VtZW50X3NpZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoKmFyZ3VtZW50X3NpZy5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqYXJndW1lbnRfc2lnLmt3YXJncykKKyAgICAgICAgICAgICAgICBzdWJwYXJzZXJzX3NpZ3MgPSBnZXRhdHRyKHRlc3RlciwgJ3N1YnBhcnNlcnNfc2lnbmF0dXJlcycsIFtdKQorICAgICAgICAgICAgICAgIGlmIHN1YnBhcnNlcnNfc2lnczoKKyAgICAgICAgICAgICAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpCisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJwYXJzZXJfc2lnIGluIHN1YnBhcnNlcnNfc2lnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnBhcnNlcnMuYWRkX3BhcnNlcigqc3VicGFyc2VyX3NpZy5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnN1YnBhcnNlcl9zaWcua3dhcmdzKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgICAgICAgICAgZGVmIF90ZXN0KHNlbGYsIHRlc3RlciwgcGFyc2VyX3RleHQpOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQgPSBnZXRhdHRyKHRlc3Rlciwgc2VsZi5mdW5jX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXh0ID0gdGV4dHdyYXAuZGVkZW50KGV4cGVjdGVkX3RleHQpCisgICAgICAgICAgICAgICAgaWYgZXhwZWN0ZWRfdGV4dCAhPSBwYXJzZXJfdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihleHBlY3RlZF90ZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihwYXJzZXJfdGV4dCkpCisgICAgICAgICAgICAgICAgICAgIGZvciBjaGFyMSwgY2hhcjIgaW4gemlwKGV4cGVjdGVkX3RleHQsIHBhcnNlcl90ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIxICE9IGNoYXIyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdmaXJzdCBkaWZmOiAlciAlcicgJSAoY2hhcjEsIGNoYXIyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXh0LCBwYXJzZXJfdGV4dCkKKworICAgICAgICAgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgZm9ybWF0ID0gZ2V0YXR0cihwYXJzZXIsICdmb3JtYXRfJXMnICUgc2VsZi5mdW5jX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0KHRlc3RlciwgZm9ybWF0KCkpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgcHJpbnRfID0gZ2V0YXR0cihwYXJzZXIsICdwcmludF8lcycgJSBzZWxmLmZ1bmNfc3VmZml4KQorICAgICAgICAgICAgICAgIG9sZF9zdHJlYW0gPSBnZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSwgU3RkSU9CdWZmZXIoKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHByaW50XygpCisgICAgICAgICAgICAgICAgICAgIHBhcnNlcl90ZXh0ID0gZ2V0YXR0cihzeXMsIHNlbGYuc3RkX25hbWUpLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSwgb2xkX3N0cmVhbSkKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0KHRlc3RlciwgcGFyc2VyX3RleHQpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X3ByaW50X2ZpbGUoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBwcmludF8gPSBnZXRhdHRyKHBhcnNlciwgJ3ByaW50XyVzJyAlIHNlbGYuZnVuY19zdWZmaXgpCisgICAgICAgICAgICAgICAgc2ZpbGUgPSBTdGRJT0J1ZmZlcigpCisgICAgICAgICAgICAgICAgcHJpbnRfKHNmaWxlKQorICAgICAgICAgICAgICAgIHBhcnNlcl90ZXh0ID0gc2ZpbGUuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3QodGVzdGVyLCBwYXJzZXJfdGV4dCkKKworICAgICAgICAjIGFkZCB0ZXN0cyBmb3Ige2Zvcm1hdCxwcmludH1fe3VzYWdlLGhlbHAsdmVyc2lvbn0KKyAgICAgICAgZm9yIGZ1bmNfc3VmZml4LCBzdGRfbmFtZSBpbiBbKCd1c2FnZScsICdzdGRvdXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdoZWxwJywgJ3N0ZG91dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3ZlcnNpb24nLCAnc3RkZXJyJyldOgorICAgICAgICAgICAgQWRkVGVzdHMoY2xzLCBmdW5jX3N1ZmZpeCwgc3RkX25hbWUpCisKK2Jhc2VzID0gVGVzdENhc2UsCitIZWxwVGVzdENhc2UgPSBUZXN0SGVscEZvcm1hdHRpbmdNZXRhY2xhc3MoJ0hlbHBUZXN0Q2FzZScsIGJhc2VzLCB7fSkKKworCitjbGFzcyBUZXN0SGVscEJpZ2dlck9wdGlvbmFscyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IGFyZ3VtZW50IGhlbHAgYWxpZ25zIHdoZW4gb3B0aW9ucyBhcmUgbG9uZ2VyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nREVTQ1JJUFRJT04nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSdFUElMT0cnLCB2ZXJzaW9uPScwLjEnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdYIEhFTFAnKSwKKyAgICAgICAgU2lnKCctLXknLCBoZWxwPSdZIEhFTFAnKSwKKyAgICAgICAgU2lnKCdmb28nLCBoZWxwPSdGT08gSEVMUCcpLAorICAgICAgICBTaWcoJ2JhcicsIGhlbHA9J0JBUiBIRUxQJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdl0gWy14XSBbLS15IFldIGZvbyBiYXIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIERFU0NSSVBUSU9OCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgZm9vICAgICAgICAgICAgRk9PIEhFTFAKKyAgICAgICAgICBiYXIgICAgICAgICAgICBCQVIgSEVMUAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAteCAgICAgICAgICAgICBYIEhFTFAKKyAgICAgICAgICAtLXkgWSAgICAgICAgICBZIEhFTFAKKworICAgICAgICBFUElMT0cKKyAgICAnJycKKyAgICB2ZXJzaW9uID0gJycnXAorICAgICAgICAwLjEKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdEhlbHBCaWdnZXJPcHRpb25hbEdyb3VwcyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IGFyZ3VtZW50IGhlbHAgYWxpZ25zIHdoZW4gb3B0aW9ucyBhcmUgbG9uZ2VyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nREVTQ1JJUFRJT04nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSdFUElMT0cnLCB2ZXJzaW9uPScwLjEnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdYIEhFTFAnKSwKKyAgICAgICAgU2lnKCctLXknLCBoZWxwPSdZIEhFTFAnKSwKKyAgICAgICAgU2lnKCdmb28nLCBoZWxwPSdGT08gSEVMUCcpLAorICAgICAgICBTaWcoJ2JhcicsIGhlbHA9J0JBUiBIRUxQJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ0dST1VQIFRJVExFJywgZGVzY3JpcHRpb249J0dST1VQIERFU0NSSVBUSU9OJyksIFsKKyAgICAgICAgICAgIFNpZygnYmF6JywgaGVscD0nQkFaIEhFTFAnKSwKKyAgICAgICAgICAgIFNpZygnLXonLCBuYXJncz0nKycsIGhlbHA9J1ogSEVMUCcpXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdl0gWy14XSBbLS15IFldIFsteiBaIFtaIC4uLl1dIGZvbyBiYXIgYmF6CisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBERVNDUklQVElPTgorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGZvbyAgICAgICAgICAgIEZPTyBIRUxQCisgICAgICAgICAgYmFyICAgICAgICAgICAgQkFSIEhFTFAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC12LCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgICAgLXggICAgICAgICAgICAgWCBIRUxQCisgICAgICAgICAgLS15IFkgICAgICAgICAgWSBIRUxQCisKKyAgICAgICAgR1JPVVAgVElUTEU6CisgICAgICAgICAgR1JPVVAgREVTQ1JJUFRJT04KKworICAgICAgICAgIGJheiAgICAgICAgICAgIEJBWiBIRUxQCisgICAgICAgICAgLXogWiBbWiAuLi5dICAgWiBIRUxQCisKKyAgICAgICAgRVBJTE9HCisgICAgJycnCisgICAgdmVyc2lvbiA9ICcnJ1wKKyAgICAgICAgMC4xCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RIZWxwQmlnZ2VyUG9zaXRpb25hbHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJNYWtlIHN1cmUgdGhhdCBoZWxwIGFsaWducyB3aGVuIGFyZ3VtZW50cyBhcmUgbG9uZ2VyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHVzYWdlPSdVU0FHRScsIGRlc2NyaXB0aW9uPSdERVNDUklQVElPTicpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J1ggSEVMUCcpLAorICAgICAgICBTaWcoJy0teScsIGhlbHA9J1kgSEVMUCcpLAorICAgICAgICBTaWcoJ2VraWVraWVraWZla2FuZycsIGhlbHA9J0VLSSBIRUxQJyksCisgICAgICAgIFNpZygnYmFyJywgaGVscD0nQkFSIEhFTFAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBVU0FHRQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgREVTQ1JJUFRJT04KKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBla2lla2lla2lmZWthbmcgIEVLSSBIRUxQCisgICAgICAgICAgYmFyICAgICAgICAgICAgICBCQVIgSEVMUAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCAgICAgICAgICAgICAgIFggSEVMUAorICAgICAgICAgIC0teSBZICAgICAgICAgICAgWSBIRUxQCisgICAgICAgICcnJworCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBSZWZvcm1hdHRpbmcoSGVscFRlc3RDYXNlKToKKyAgICAiIiJNYWtlIHN1cmUgdGhhdCB0ZXh0IGFmdGVyIHNob3J0IG5hbWVzIHN0YXJ0cyBvbiB0aGUgZmlyc3QgbGluZSIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZygKKyAgICAgICAgcHJvZz0nUFJPRycsCisgICAgICAgIGRlc2NyaXB0aW9uPScgICBvZGRseSAgICBmb3JtYXR0ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uXG4nCisgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgJ3RoYXQgaXMgc28gbG9uZyB0aGF0IGl0IHNob3VsZCBnbyBvbnRvIG11bHRpcGxlICcKKyAgICAgICAgICAgICAgICAgICAgJ2xpbmVzIHdoZW4gd3JhcHBlZCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1hYJywgaGVscD0nb2RkbHlcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGZvcm1hdHRlZCAteCBoZWxwJyksCisgICAgICAgIFNpZygneScsIG1ldGF2YXI9J3l5eScsIGhlbHA9J25vcm1hbCB5IGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygndGl0bGUnLCBkZXNjcmlwdGlvbj0nXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBvZGRseSBmb3JtYXR0ZWQgZ3JvdXBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyksCisgICAgICAgICBbU2lnKCctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgIGhlbHA9JyBvZGRseSBcbicKKyAgICAgICAgICAgICAgICAgICAnZm9ybWF0dGVkICAgIC1hICBoZWxwICBcbicKKyAgICAgICAgICAgICAgICAgICAnICAgIGFnYWluLCBzbyBsb25nIHRoYXQgaXQgc2hvdWxkIGJlIHdyYXBwZWQgb3ZlciAnCisgICAgICAgICAgICAgICAgICAgJ211bHRpcGxlIGxpbmVzJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhYXSBbLWFdIHl5eQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb2RkbHkgZm9ybWF0dGVkIGRlc2NyaXB0aW9uIHRoYXQgaXMgc28gbG9uZyB0aGF0IGl0IHNob3VsZCBnbyBvbnRvIFwKK211bHRpcGxlCisgICAgICAgIGxpbmVzIHdoZW4gd3JhcHBlZAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHl5eSAgICAgICAgIG5vcm1hbCB5IGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFhYICAgICAgIG9kZGx5IGZvcm1hdHRlZCAteCBoZWxwCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgb2RkbHkgZm9ybWF0dGVkIGdyb3VwIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAtYSAgICAgICAgICBvZGRseSBmb3JtYXR0ZWQgLWEgaGVscCBhZ2Fpbiwgc28gbG9uZyB0aGF0IGl0IHNob3VsZCBcCitiZSB3cmFwcGVkCisgICAgICAgICAgICAgICAgICAgICAgb3ZlciBtdWx0aXBsZSBsaW5lcworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFdyYXBwaW5nU2hvcnROYW1lcyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRleHQgYWZ0ZXIgc2hvcnQgbmFtZXMgc3RhcnRzIG9uIHRoZSBmaXJzdCBsaW5lIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0gJ0RcbkQnICogMzApCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1hYJywgaGVscD0nWEhIIEhYJyAqIDIwKSwKKyAgICAgICAgU2lnKCd5JywgbWV0YXZhcj0neXl5JywgaGVscD0nWUggWUgnICogMjApLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCdBTFBIQVMnKSwgWworICAgICAgICAgICAgU2lnKCctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J0FISEggSEhBJyAqIDEwKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhdIFstYV0geXl5CisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBEIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIFwKK0REIEREIERECisgICAgICAgIEREIEREIEREIEREIEQKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICB5eXkgICAgICAgICBZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFwKK1lIWUggWUhZSAorICAgICAgICAgICAgICAgICAgICAgIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUgKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFhYICAgICAgIFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBcCitIWFhISCBIWFhISAorICAgICAgICAgICAgICAgICAgICAgIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYCisKKyAgICAgICAgQUxQSEFTOgorICAgICAgICAgIC1hICAgICAgICAgIEFISEggSEhBQUhISCBISEFBSEhIIEhIQUFISEggSEhBQUhISCBISEFBSEhIIEhIQUFISEggXAorSEhBQUhISAorICAgICAgICAgICAgICAgICAgICAgIEhIQUFISEggSEhBQUhISCBISEEKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBXcmFwcGluZ0xvbmdOYW1lcyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRleHQgYWZ0ZXIgbG9uZyBuYW1lcyBzdGFydHMgb24gdGhlIG5leHQgbGluZSIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyh1c2FnZT0nVVNBR0UnLCBkZXNjcmlwdGlvbj0gJ0QgRCcgKiAzMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249J1YgVicqMzApCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUsIGhlbHA9J1hIIFhIJyAqIDIwKSwKKyAgICAgICAgU2lnKCd5JywgbWV0YXZhcj0neScgKiAyNSwgaGVscD0nWUggWUgnICogMjApLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCdBTFBIQVMnKSwgWworICAgICAgICAgICAgU2lnKCctYScsIG1ldGF2YXI9J0EnICogMjUsIGhlbHA9J0FIIEFIJyAqIDIwKSwKKyAgICAgICAgICAgIFNpZygneicsIG1ldGF2YXI9J3onICogMjUsIGhlbHA9J1pIIFpIJyAqIDIwKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFVTQUdFCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBEIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIFwKK0REIEREIERECisgICAgICAgIEREIEREIEREIEREIEQKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICB5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBcCitZSFlIIFlIWUgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUgKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdiwgLS12ZXJzaW9uICAgICAgICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAteCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBcCitYSFhIIFhIWEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEgKKworICAgICAgICBBTFBIQVM6CisgICAgICAgICAgLWEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggXAorQUhBSCBBSEFICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFICisgICAgICAgICAgenp6enp6enp6enp6enp6enp6enp6enp6egorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggXAorWkhaSCBaSFpICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpICisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJydcCisgICAgICAgIFYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgXAorVlYgVlYgVlYKKyAgICAgICAgVlYgVlYgVlYgVlYgVgorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBiYXNpYyB1c2FnZSBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy13JywgbmFyZ3M9JysnLCBoZWxwPSd3JyksCisgICAgICAgIFNpZygnLXgnLCBuYXJncz0nKicsIGhlbHA9J3gnKSwKKyAgICAgICAgU2lnKCdhJywgaGVscD0nYScpLAorICAgICAgICBTaWcoJ2InLCBoZWxwPSdiJywgbmFyZ3M9MiksCisgICAgICAgIFNpZygnYycsIGhlbHA9J2MnLCBuYXJncz0nPycpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCdncm91cCcpLCBbCisgICAgICAgICAgICBTaWcoJy15JywgbmFyZ3M9Jz8nLCBoZWxwPSd5JyksCisgICAgICAgICAgICBTaWcoJy16JywgbmFyZ3M9MywgaGVscD0neicpLAorICAgICAgICAgICAgU2lnKCdkJywgaGVscD0nZCcsIG5hcmdzPScqJyksCisgICAgICAgICAgICBTaWcoJ2UnLCBoZWxwPSdlJywgbmFyZ3M9JysnKSwKKyAgICAgICAgXSkKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy13IFcgW1cgLi4uXV0gWy14IFtYIFtYIC4uLl1dXSBbLXkgW1ldXSBbLXogWiBaIFpdCisgICAgICAgICAgICAgICAgICAgIGEgYiBiIFtjXSBbZCBbZCAuLi5dXSBlIFtlIC4uLl0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEgICAgICAgICAgICAgICBhCisgICAgICAgICAgYiAgICAgICAgICAgICAgIGIKKyAgICAgICAgICBjICAgICAgICAgICAgICAgYworCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC13IFcgW1cgLi4uXSAgICB3CisgICAgICAgICAgLXggW1ggW1ggLi4uXV0gIHgKKworICAgICAgICBncm91cDoKKyAgICAgICAgICAteSBbWV0gICAgICAgICAgeQorICAgICAgICAgIC16IFogWiBaICAgICAgICB6CisgICAgICAgICAgZCAgICAgICAgICAgICAgIGQKKyAgICAgICAgICBlICAgICAgICAgICAgICAgZQorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscE9ubHlVc2VyR3JvdXBzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBiYXNpYyB1c2FnZSBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygneHh4eCcpLCBbCisgICAgICAgICAgICBTaWcoJy14JywgaGVscD0neCcpLAorICAgICAgICAgICAgU2lnKCdhJywgaGVscD0nYScpLAorICAgICAgICBdKSwKKyAgICAgICAgKFNpZygneXl5eScpLCBbCisgICAgICAgICAgICBTaWcoJ2InLCBoZWxwPSdiJyksCisgICAgICAgICAgICBTaWcoJy15JywgaGVscD0neScpLAorICAgICAgICBdKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFsteCBYXSBbLXkgWV0gYSBiCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICB4eHh4OgorICAgICAgICAgIC14IFggIHgKKyAgICAgICAgICBhICAgICBhCisKKyAgICAgICAgeXl5eToKKyAgICAgICAgICBiICAgICBiCisgICAgICAgICAgLXkgWSAgeQorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlTG9uZ1Byb2coSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwcm9nIGlzIGxvbmciIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUCcgKiA2MCkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy13JywgbWV0YXZhcj0nVycpLAorICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcpLAorICAgICAgICBTaWcoJ2EnKSwKKyAgICAgICAgU2lnKCdiJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQCisgICAgICAgICAgICAgICBbLWhdIFstdyBXXSBbLXggWF0gYSBiCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhCisgICAgICAgICAgYgorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgVworICAgICAgICAgIC14IFgKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZUxvbmdQcm9nT3B0aW9uc1dyYXAoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwcm9nIGlzIGxvbmcgYW5kIHRoZSBvcHRpb25hbHMgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQJyAqIDYwKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBtZXRhdmFyPSdXJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUpLAorICAgICAgICBTaWcoJy15JywgbWV0YXZhcj0nWScgKiAyNSksCisgICAgICAgIFNpZygnLXonLCBtZXRhdmFyPSdaJyAqIDI1KSwKKyAgICAgICAgU2lnKCdhJyksCisgICAgICAgIFNpZygnYicpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAorICAgICAgICAgICAgICAgWy1oXSBbLXcgV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV10gXAorWy14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhdCisgICAgICAgICAgICAgICBbLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV0gWy16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpdCisgICAgICAgICAgICAgICBhIGIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEKKyAgICAgICAgICBiCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXVworICAgICAgICAgIC14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKyAgICAgICAgICAteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZCisgICAgICAgICAgLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWgorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlTG9uZ1Byb2dQb3NpdGlvbmFsc1dyYXAoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwcm9nIGlzIGxvbmcgYW5kIHRoZSBwb3NpdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1AnICogNjAsIGFkZF9oZWxwPUZhbHNlKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnYScgKiAyNSksCisgICAgICAgIFNpZygnYicgKiAyNSksCisgICAgICAgIFNpZygnYycgKiAyNSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQCisgICAgICAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAgICAgICAgICBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlT3B0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIG9wdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBtZXRhdmFyPSdXJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUpLAorICAgICAgICBTaWcoJy15JywgbWV0YXZhcj0nWScgKiAyNSksCisgICAgICAgIFNpZygnLXonLCBtZXRhdmFyPSdaJyAqIDI1KSwKKyAgICAgICAgU2lnKCdhJyksCisgICAgICAgIFNpZygnYicpLAorICAgICAgICBTaWcoJ2MnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy13IFdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1ddIFwKK1steCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXQorICAgICAgICAgICAgICAgICAgICBbLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV0gXAorWy16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpdCisgICAgICAgICAgICAgICAgICAgIGEgYiBjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhCisgICAgICAgICAgYgorICAgICAgICAgIGMKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdyBXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXCisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VQb3NpdGlvbmFsc1dyYXAoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwb3NpdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnKSwKKyAgICAgICAgU2lnKCcteScpLAorICAgICAgICBTaWcoJy16JyksCisgICAgICAgIFNpZygnYScgKiAyNSksCisgICAgICAgIFNpZygnYicgKiAyNSksCisgICAgICAgIFNpZygnYycgKiAyNSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteCBYXSBbLXkgWV0gWy16IFpdCisgICAgICAgICAgICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgICAgICAgICAgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCBYCisgICAgICAgICAgLXkgWQorICAgICAgICAgIC16IFoKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZU9wdGlvbmFsc1Bvc2l0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIG9wdGlvbmFscyBhbmQgcG9zaXRpb25hbHMgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSksCisgICAgICAgIFNpZygnLXknLCBtZXRhdmFyPSdZJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteicsIG1ldGF2YXI9J1onICogMjUpLAorICAgICAgICBTaWcoJ2EnICogMjUpLAorICAgICAgICBTaWcoJ2InICogMjUpLAorICAgICAgICBTaWcoJ2MnICogMjUpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF0gXAorWy15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVldCisgICAgICAgICAgICAgICAgICAgIFsteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaXQorICAgICAgICAgICAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICAgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorICAgICAgICAgIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VPcHRpb25hbHNPbmx5V3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlcmUgYXJlIG9ubHkgb3B0aW9uYWxzIGFuZCB0aGV5IHdyYXAiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUpLAorICAgICAgICBTaWcoJy15JywgbWV0YXZhcj0nWScgKiAyNSksCisgICAgICAgIFNpZygnLXonLCBtZXRhdmFyPSdaJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhdIFwKK1steSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZXQorICAgICAgICAgICAgICAgICAgICBbLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWl0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKyAgICAgICAgICAteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZCisgICAgICAgICAgLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWgorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlUG9zaXRpb25hbHNPbmx5V3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlcmUgYXJlIG9ubHkgcG9zaXRpb25hbHMgYW5kIHRoZXkgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdhJyAqIDI1KSwKKyAgICAgICAgU2lnKCdiJyAqIDI1KSwKKyAgICAgICAgU2lnKCdjJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgICAgICAgICAgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBWYXJpYWJsZUV4cGFuc2lvbihIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHByb3Blcmx5IGluIGhlbHAgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9aW50LAorICAgICAgICAgICAgaGVscD0neCAlKHByb2cpcyAlKGRlZmF1bHQpcyAlKHR5cGUpcyAlJScpLAorICAgICAgICBTaWcoJy15JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGRlZmF1bHQ9NDIsIGNvbnN0PSdYWFgnLAorICAgICAgICAgICAgaGVscD0neSAlKHByb2cpcyAlKGRlZmF1bHQpcyAlKGNvbnN0KXMnKSwKKyAgICAgICAgU2lnKCctLWZvbycsIGNob2ljZXM9J2FiYycsCisgICAgICAgICAgICBoZWxwPSdmb28gJShwcm9nKXMgJShkZWZhdWx0KXMgJShjaG9pY2VzKXMnKSwKKyAgICAgICAgU2lnKCctLWJhcicsIGRlZmF1bHQ9J2JheicsIGNob2ljZXM9WzEsIDJdLCBtZXRhdmFyPSdCQkInLAorICAgICAgICAgICAgaGVscD0nYmFyICUocHJvZylzICUoZGVmYXVsdClzICUoZGVzdClzJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gJShwcm9nKXMgJShkZWZhdWx0KXMnKSwKKyAgICAgICAgU2lnKCdiYWRnZXInLCBkZWZhdWx0PTAuNSwgaGVscD0nYmFkZ2VyICUocHJvZylzICUoZGVmYXVsdClzJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ2dyb3VwJyksIFsKKyAgICAgICAgICAgIFNpZygnLWEnLCBoZWxwPSdhICUocHJvZylzICUoZGVmYXVsdClzJyksCisgICAgICAgICAgICBTaWcoJy1iJywgZGVmYXVsdD0tMSwgaGVscD0nYiAlKHByb2cpcyAlKGRlZmF1bHQpcycpLAorICAgICAgICBdKQorICAgIF0KKyAgICB1c2FnZSA9ICgnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhdIFsteV0gWy0tZm9vIHthLGIsY31dIFstLWJhciBCQkJdIFstYSBBXSBbLWIgQl0KKyAgICAgICAgICAgICAgICAgICAgc3BhbSBiYWRnZXIKKyAgICAgICAgJycnKQorICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgICAgICBzcGFtIFBST0cgTm9uZQorICAgICAgICAgIGJhZGdlciAgICAgICAgIGJhZGdlciBQUk9HIDAuNQorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWCAgICAgICAgICAgeCBQUk9HIE5vbmUgaW50ICUKKyAgICAgICAgICAteSAgICAgICAgICAgICB5IFBST0cgNDIgWFhYCisgICAgICAgICAgLS1mb28ge2EsYixjfSAgZm9vIFBST0cgTm9uZSBhLCBiLCBjCisgICAgICAgICAgLS1iYXIgQkJCICAgICAgYmFyIFBST0cgYmF6IGJhcgorCisgICAgICAgIGdyb3VwOgorICAgICAgICAgIC1hIEEgICAgICAgICAgIGEgUFJPRyBOb25lCisgICAgICAgICAgLWIgQiAgICAgICAgICAgYiBQUk9HIC0xCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVmFyaWFibGVFeHBhbnNpb25Vc2FnZVN1cHBsaWVkKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgcHJvcGVybHkgd2hlbiB1c2FnZT0gaXMgcHJlc2VudCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgdXNhZ2U9JyUocHJvZylzIEZPTycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAoJycnXAorICAgICAgICB1c2FnZTogUFJPRyBGT08KKyAgICAgICAgJycnKQorICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFZhcmlhYmxlRXhwYW5zaW9uTm9Bcmd1bWVudHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCBwcm9wZXJseSB3aXRoIG5vIGFyZ3VtZW50cyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAoJycnXAorICAgICAgICB1c2FnZTogUFJPRworICAgICAgICAnJycpCisgICAgaGVscCA9IHVzYWdlCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBTdXBwcmVzc1VzYWdlKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IGl0ZW1zIGNhbiBiZSBzdXBwcmVzc2VkIGluIHVzYWdlIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCB1c2FnZT1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIGhlbHAgPSAnJydcCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICAgICAgJycnCisgICAgdXNhZ2UgPSAnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwU3VwcHJlc3NPcHRpb25hbChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcHRpb25hbCBhcmd1bWVudHMgY2FuIGJlIHN1cHByZXNzZWQgaW4gaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gIHNwYW0gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFN1cHByZXNzT3B0aW9uYWxHcm91cChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcHRpb25hbCBncm91cHMgY2FuIGJlIHN1cHByZXNzZWQgaW4gaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ2dyb3VwJyksIFtTaWcoJy0tYmFyJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgc3BhbSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFN1cHByZXNzUG9zaXRpb25hbChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBwb3NpdGlvbmFsIGFyZ3VtZW50cyBjYW4gYmUgc3VwcHJlc3NlZCBpbiBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBSZXF1aXJlZE9wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHJlcXVpcmVkIG9wdGlvbnMgZG9uJ3QgbG9vayBvcHRpb25hbCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nZm9vIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gLS1mb28gRk9PCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwQWx0ZXJuYXRlUHJlZml4Q2hhcnMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgb3B0aW9ucyBkaXNwbGF5IHdpdGggZGlmZmVyZW50IHByZWZpeCBjaGFyYWN0ZXJzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBwcmVmaXhfY2hhcnM9J147JywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdeXmZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnO2InLCAnOztiYXInLCBoZWxwPSdiYXIgaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgW15eZm9vXSBbO2IgQkFSXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIF5eZm9vICAgICAgICAgICAgICBmb28gaGVscAorICAgICAgICAgIDtiIEJBUiwgOztiYXIgQkFSICBiYXIgaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscE5vSGVscE9wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHRoZSAtLWhlbHAgYXJndW1lbnQgY2FuIGJlIHN1cHByZXNzZWQgaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy0tZm9vIEZPT10gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICBzcGFtIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLS1mb28gRk9PICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFZlcnNpb25PcHRpb25hbChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB0aGUgLS12ZXJzaW9uIGFyZ3VtZW50IGNhbiBiZSBzdXBwcmVzc2VkIGhlbHAgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIHZlcnNpb249JzEuMCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXZdIFstLWZvbyBGT09dIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICAgICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycnXAorICAgICAgICAxLjAKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdEhlbHBOb25lKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IG5vIGVycm9ycyBvY2N1ciBpZiBubyBoZWxwIGlzIHNwZWNpZmllZCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJyksCisgICAgICAgIFNpZygnc3BhbScpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08KKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBUdXBsZU1ldGF2YXIoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHNwZWNpZnlpbmcgbWV0YXZhciBhcyBhIHR1cGxlIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBoZWxwPSd3JywgbmFyZ3M9JysnLCBtZXRhdmFyPSgnVzEnLCAnVzInKSksCisgICAgICAgIFNpZygnLXgnLCBoZWxwPSd4JywgbmFyZ3M9JyonLCBtZXRhdmFyPSgnWDEnLCAnWDInKSksCisgICAgICAgIFNpZygnLXknLCBoZWxwPSd5JywgbmFyZ3M9MywgbWV0YXZhcj0oJ1kxJywgJ1kyJywgJ1kzJykpLAorICAgICAgICBTaWcoJy16JywgaGVscD0neicsIG5hcmdzPSc/JywgbWV0YXZhcj0oJ1oxJywgKSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdyBXMSBbVzIgLi4uXV0gWy14IFtYMSBbWDIgLi4uXV1dIFsteSBZMSBZMiBZM10gXAorWy16IFtaMV1dCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC13IFcxIFtXMiAuLi5dICAgIHcKKyAgICAgICAgICAteCBbWDEgW1gyIC4uLl1dICB4CisgICAgICAgICAgLXkgWTEgWTIgWTMgICAgICAgeQorICAgICAgICAgIC16IFtaMV0gICAgICAgICAgIHoKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBSYXdUZXh0KEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgUmF3VGV4dEhlbHBGb3JtYXR0ZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoCisgICAgICAgIHByb2c9J1BST0cnLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3VGV4dEhlbHBGb3JtYXR0ZXIsCisgICAgICAgIGRlc2NyaXB0aW9uPSdLZWVwIHRoZSBmb3JtYXR0aW5nXG4nCisgICAgICAgICAgICAgICAgICAgICcgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuXG4nCisgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgJ2hlcmVcbicpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nICAgIGZvbyBoZWxwIHNob3VsZCBhbHNvXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBlYXIgYXMgZ2l2ZW4gaGVyZScpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygndGl0bGUnLCBkZXNjcmlwdGlvbj0nICAgIFRoaXMgdGV4dFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHNob3VsZCBiZSBpbmRlbnRlZFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgZXhhY3RseSBsaWtlIGl0IGlzIGhlcmVcbicpLAorICAgICAgICAgW1NpZygnLS1iYXInLCBoZWxwPSdiYXIgaGVscCcpXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIFstLWJhciBCQVJdIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIEtlZXAgdGhlIGZvcm1hdHRpbmcKKyAgICAgICAgICAgIGV4YWN0bHkgYXMgaXQgaXMgd3JpdHRlbgorCisgICAgICAgIGhlcmUKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgICBzcGFtIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgICAgICBmb28gaGVscCBzaG91bGQgYWxzbworICAgICAgICAgICAgICAgICAgICAgIGFwcGVhciBhcyBnaXZlbiBoZXJlCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgICAgIFRoaXMgdGV4dAorICAgICAgICAgICAgc2hvdWxkIGJlIGluZGVudGVkCisgICAgICAgICAgICAgIGV4YWN0bHkgbGlrZSBpdCBpcyBoZXJlCisKKyAgICAgICAgICAtLWJhciBCQVIgICBiYXIgaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFJhd0Rlc2NyaXB0aW9uKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgUmF3VGV4dEhlbHBGb3JtYXR0ZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoCisgICAgICAgIHByb2c9J1BST0cnLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAorICAgICAgICBkZXNjcmlwdGlvbj0nS2VlcCB0aGUgZm9ybWF0dGluZ1xuJworICAgICAgICAgICAgICAgICAgICAnICAgIGV4YWN0bHkgYXMgaXQgaXMgd3JpdHRlblxuJworICAgICAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICdoZXJlXG4nKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9JyAgZm9vIGhlbHAgc2hvdWxkIG5vdFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHJldGFpbiB0aGlzIG9kZCBmb3JtYXR0aW5nJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd0aXRsZScsIGRlc2NyaXB0aW9uPScgICAgVGhpcyB0ZXh0XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgc2hvdWxkIGJlIGluZGVudGVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBleGFjdGx5IGxpa2UgaXQgaXMgaGVyZVxuJyksCisgICAgICAgICBbU2lnKCctLWJhcicsIGhlbHA9J2JhciBoZWxwJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gWy0tYmFyIEJBUl0gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgS2VlcCB0aGUgZm9ybWF0dGluZworICAgICAgICAgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuCisKKyAgICAgICAgaGVyZQorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAgc2hvdWxkIG5vdCByZXRhaW4gdGhpcyBvZGQgZm9ybWF0dGluZworCisgICAgICAgIHRpdGxlOgorICAgICAgICAgICAgICBUaGlzIHRleHQKKyAgICAgICAgICAgIHNob3VsZCBiZSBpbmRlbnRlZAorICAgICAgICAgICAgICBleGFjdGx5IGxpa2UgaXQgaXMgaGVyZQorCisgICAgICAgICAgLS1iYXIgQkFSICAgYmFyIGhlbHAKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBBcmd1bWVudERlZmF1bHRzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoCisgICAgICAgIHByb2c9J1BST0cnLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIsCisgICAgICAgIGRlc2NyaXB0aW9uPSdkZXNjcmlwdGlvbicpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAgLSBvaCBhbmQgYnkgdGhlIHdheSwgJShkZWZhdWx0KXMnKSwKKyAgICAgICAgU2lnKCctLWJhcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2JhciBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgICAgICBTaWcoJ2JhZGdlcicsIG5hcmdzPSc/JywgZGVmYXVsdD0nd29vZGVuJywgaGVscD0nYmFkZ2VyIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygndGl0bGUnLCBkZXNjcmlwdGlvbj0nZGVzY3JpcHRpb24nKSwKKyAgICAgICAgIFtTaWcoJy0tYmF6JywgdHlwZT1pbnQsIGRlZmF1bHQ9NDIsIGhlbHA9J2JheiBoZWxwJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gWy0tYmFyXSBbLS1iYXogQkFaXSBzcGFtIFtiYWRnZXJdCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBkZXNjcmlwdGlvbgorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorICAgICAgICAgIGJhZGdlciAgICAgIGJhZGdlciBoZWxwIChkZWZhdWx0OiB3b29kZW4pCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscCAtIG9oIGFuZCBieSB0aGUgd2F5LCBOb25lCisgICAgICAgICAgLS1iYXIgICAgICAgYmFyIGhlbHAgKGRlZmF1bHQ6IEZhbHNlKQorCisgICAgICAgIHRpdGxlOgorICAgICAgICAgIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAtLWJheiBCQVogICBiYXogaGVscCAoZGVmYXVsdDogNDIpCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCitjbGFzcyBUZXN0SGVscFZlcnNpb25BY3Rpb24oSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBkZWZhdWx0IGhlbHAgZm9yIHRoZSB2ZXJzaW9uIGFjdGlvbiIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgZGVzY3JpcHRpb249J2Rlc2NyaXB0aW9uJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLVYnLCAnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nMy42JyldCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy1WXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgZGVzY3JpcHRpb24KKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC1WLCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCitjbGFzcyBUZXN0SGVscFN1YnBhcnNlcnNPcmRlcmluZyhIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3Qgb3JkZXJpbmcgb2Ygc3ViY29tbWFuZHMgaW4gaGVscCBtYXRjaGVzIHRoZSBjb2RlIiIiCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdkaXNwbGF5IHNvbWUgc3ViY29tbWFuZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj0nMC4xJykKKworICAgIHN1YnBhcnNlcnNfc2lnbmF0dXJlcyA9IFtTaWcobmFtZT1uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiAoJ2EnLCAnYicsICdjJywgJ2QnLCAnZScpXQorCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy12XSB7YSxiLGMsZCxlfSAuLi4KKyAgICAgICAgJycnCisKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgZGlzcGxheSBzb21lIHN1YmNvbW1hbmRzCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAge2EsYixjLGQsZX0KKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC12LCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgICcnJworCisgICAgdmVyc2lvbiA9ICcnJ1wKKyAgICAgICAgMC4xCisgICAgICAgICcnJworCitjbGFzcyBUZXN0SGVscFN1YnBhcnNlcnNXaXRoSGVscE9yZGVyaW5nKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBvcmRlcmluZyBvZiBzdWJjb21tYW5kcyBpbiBoZWxwIG1hdGNoZXMgdGhlIGNvZGUiIiIKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2Rpc3BsYXkgc29tZSBzdWJjb21tYW5kcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPScwLjEnKQorCisgICAgc3ViY29tbWFuZF9kYXRhID0gKCgnYScsICdhIHN1YmNvbW1hbmQgaGVscCcpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAnYiBzdWJjb21tYW5kIGhlbHAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgJ2Mgc3ViY29tbWFuZCBoZWxwJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnZCcsICdkIHN1YmNvbW1hbmQgaGVscCcpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ2UnLCAnZSBzdWJjb21tYW5kIGhlbHAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgc3VicGFyc2Vyc19zaWduYXR1cmVzID0gW1NpZyhuYW1lPW5hbWUsIGhlbHA9aGVscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUsIGhlbHAgaW4gc3ViY29tbWFuZF9kYXRhXQorCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy12XSB7YSxiLGMsZCxlfSAuLi4KKyAgICAgICAgJycnCisKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgZGlzcGxheSBzb21lIHN1YmNvbW1hbmRzCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAge2EsYixjLGQsZX0KKyAgICAgICAgICAgIGEgICAgICAgICAgICBhIHN1YmNvbW1hbmQgaGVscAorICAgICAgICAgICAgYiAgICAgICAgICAgIGIgc3ViY29tbWFuZCBoZWxwCisgICAgICAgICAgICBjICAgICAgICAgICAgYyBzdWJjb21tYW5kIGhlbHAKKyAgICAgICAgICAgIGQgICAgICAgICAgICBkIHN1YmNvbW1hbmQgaGVscAorICAgICAgICAgICAgZSAgICAgICAgICAgIGUgc3ViY29tbWFuZCBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdiwgLS12ZXJzaW9uICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgICAnJycKKworICAgIHZlcnNpb24gPSAnJydcCisgICAgICAgIDAuMQorICAgICAgICAnJycKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgT3B0aW9uYWwvUG9zaXRpb25hbCBjb25zdHJ1Y3RvciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RJbnZhbGlkQXJndW1lbnRDb25zdHJ1Y3RvcnMoVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBidW5jaCBvZiBpbnZhbGlkIEFyZ3VtZW50IGNvbnN0cnVjdG9ycyIiIgorCisgICAgZGVmIGFzc2VydFR5cGVFcnJvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGFyc2VyLmFkZF9hcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGFzc2VydFZhbHVlRXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZXIuYWRkX2FyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2tleXdvcmRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBiYXI9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy15JywgY2FsbGJhY2s9J2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteScsIGNhbGxiYWNrX2FyZ3M9KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteScsIGNhbGxiYWNrX2t3YXJncz17fSkKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZGVzdGluYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCkKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ2FwcGVuZCcsICdzdG9yZSddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoYWN0aW9uPWFjdGlvbikKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfb3B0aW9uX3N0cmluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS0nKQorICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy0tLScpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS1mb28nLCB0eXBlPSdpbnQnKQorICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy0tZm9vJywgdHlwZT0oaW50LCBmbG9hdCkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCcteCcsIGFjdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCdmb28nLCBhY3Rpb249J2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS1mb28nLCBhY3Rpb249KCdzdG9yZScsICdhcHBlbmQnKSkKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWZvbyIsIGFjdGlvbj0ic3RvcmUtdHJ1ZSIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBleHBlY3RlZCA9ICd1bmtub3duIGFjdGlvbicKKyAgICAgICAgICAgIG1zZyA9ICdleHBlY3RlZCAlciwgZm91bmQgJXInICUgKGV4cGVjdGVkLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkIGluIHN0cihlKSwgbXNnKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZGVzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KGRlc3Q9J2ZvbycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIGRlc3Q9J2JheicpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBleHBlY3RlZCA9ICdkZXN0IHN1cHBsaWVkIHR3aWNlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50JworICAgICAgICAgICAgbXNnID0gJ2V4cGVjdGVkICVyLCBmb3VuZCAlcicgJSAoZXhwZWN0ZWQsIGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgaW4gc3RyKGUpLCBtc2cpCisKKyAgICBkZWYgdGVzdF9ub19hcmd1bWVudF9hY3Rpb25zKHNlbGYpOgorICAgICAgICBmb3IgYWN0aW9uIGluIFsnc3RvcmVfY29uc3QnLCAnc3RvcmVfdHJ1ZScsICdzdG9yZV9mYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICdhcHBlbmRfY29uc3QnLCAnY291bnQnXToKKyAgICAgICAgICAgIGZvciBhdHRycyBpbiBbZGljdCh0eXBlPWludCksIGRpY3QobmFyZ3M9JysnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdChjaG9pY2VzPSdhYicpXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBhY3Rpb249YWN0aW9uLCAqKmF0dHJzKQorCisgICAgZGVmIHRlc3Rfbm9fYXJndW1lbnRfbm9fY29uc3RfYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBvcHRpb25zIHdpdGggemVybyBhcmd1bWVudHMKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ3N0b3JlX3RydWUnLCAnc3RvcmVfZmFsc2UnLCAnY291bnQnXToKKworICAgICAgICAgICAgIyBjb25zdCBpcyBhbHdheXMgZGlzYWxsb3dlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy14JywgY29uc3Q9J2ZvbycsIGFjdGlvbj1hY3Rpb24pCisKKyAgICAgICAgICAgICMgbmFyZ3MgaXMgYWx3YXlzIGRpc2FsbG93ZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteCcsIG5hcmdzPScqJywgYWN0aW9uPWFjdGlvbikKKworICAgIGRlZiB0ZXN0X21vcmVfdGhhbl9vbmVfYXJndW1lbnRfYWN0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ3N0b3JlJywgJ2FwcGVuZCddOgorCisgICAgICAgICAgICAjIG5hcmdzPTAgaXMgZGlzYWxsb3dlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCcteCcsIG5hcmdzPTAsIGFjdGlvbj1hY3Rpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJ3NwYW0nLCBuYXJncz0wLCBhY3Rpb249YWN0aW9uKQorCisgICAgICAgICAgICAjIGNvbnN0IGlzIGRpc2FsbG93ZWQgd2l0aCBub24tb3B0aW9uYWwgYXJndW1lbnRzCisgICAgICAgICAgICBmb3IgbmFyZ3MgaW4gWzEsICcqJywgJysnXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy14JywgY29uc3Q9J2ZvbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPW5hcmdzLCBhY3Rpb249YWN0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignc3BhbScsIGNvbnN0PSdmb28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJncz1uYXJncywgYWN0aW9uPWFjdGlvbikKKworICAgIGRlZiB0ZXN0X3JlcXVpcmVkX2NvbnN0X2FjdGlvbnMoc2VsZik6CisgICAgICAgIGZvciBhY3Rpb24gaW4gWydzdG9yZV9jb25zdCcsICdhcHBlbmRfY29uc3QnXToKKworICAgICAgICAgICAgIyBuYXJncyBpcyBhbHdheXMgZGlzYWxsb3dlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy14JywgbmFyZ3M9JysnLCBhY3Rpb249YWN0aW9uKQorCisgICAgZGVmIHRlc3RfcGFyc2Vyc19hY3Rpb25fbWlzc2luZ19wYXJhbXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCdjb21tYW5kJywgYWN0aW9uPSdwYXJzZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJ2NvbW1hbmQnLCBhY3Rpb249J3BhcnNlcnMnLCBwcm9nPSdQUk9HJykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJ2NvbW1hbmQnLCBhY3Rpb249J3BhcnNlcnMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnRQYXJzZXIpCisKKyAgICBkZWYgdGVzdF9yZXF1aXJlZF9wb3NpdGlvbmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignZm9vJywgcmVxdWlyZWQ9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3VzZXJfZGVmaW5lZF9hY3Rpb24oc2VsZik6CisKKyAgICAgICAgY2xhc3MgU3VjY2VzcyhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEFjdGlvbihvYmplY3QpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UpOgorICAgICAgICAgICAgICAgIGlmIGRlc3QgPT0gJ3NwYW0nOgorICAgICAgICAgICAgICAgICAgICBpZiBjb25zdCBpcyBTdWNjZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBTdWNjZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN1Y2Nlc3MoKQorCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdWNjZXNzLCBwYXJzZXIuYWRkX2FyZ3VtZW50LCAnLS1zcGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPUFjdGlvbiwgZGVmYXVsdD1TdWNjZXNzLCBjb25zdD1TdWNjZXNzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdWNjZXNzLCBwYXJzZXIuYWRkX2FyZ3VtZW50LCAnc3BhbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj1BY3Rpb24sIGRlZmF1bHQ9U3VjY2VzcywgY29uc3Q9U3VjY2VzcykKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBBY3Rpb25zIHJldHVybmVkIGJ5IGFkZF9hcmd1bWVudAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QWN0aW9uc1JldHVybmVkKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Rlc3Qoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgYWN0aW9uID0gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZXN0LCAnZm9vJykKKyAgICAgICAgYWN0aW9uID0gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZXN0LCAnYmFyJykKKyAgICAgICAgYWN0aW9uID0gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCAnLXknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZXN0LCAneCcpCisKKyAgICBkZWYgdGVzdF9taXNjKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIGFjdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbmFyZ3M9Jz8nLCBjb25zdD00MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTg0LCB0eXBlPWludCwgY2hvaWNlcz1bMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRk9PJywgbWV0YXZhcj0nQkFSJywgZGVzdD0nYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24ubmFyZ3MsICc/JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uY29uc3QsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZWZhdWx0LCA4NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24udHlwZSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5jaG9pY2VzLCBbMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmhlbHAsICdGT08nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5tZXRhdmFyLCAnQkFSJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uZGVzdCwgJ2JheicpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBBcmd1bWVudCBjb25mbGljdCBoYW5kbGluZyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0Q29uZmxpY3RIYW5kbGluZyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYWRfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXJncGFyc2UuQXJndW1lbnRQYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXI9J2ZvbycpCisKKyAgICBkZWYgdGVzdF9jb25mbGljdF9lcnJvcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFyZ3BhcnNlLkFyZ3VtZW50RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQsICcteCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFyZ3BhcnNlLkFyZ3VtZW50RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQsICctLXNwYW0nKQorCisgICAgZGVmIHRlc3RfcmVzb2x2ZV9lcnJvcihzZWxmKToKKyAgICAgICAgZ2V0X3BhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyCisgICAgICAgIHBhcnNlciA9IGdldF9wYXJzZXIocHJvZz0nUFJPRycsIGNvbmZsaWN0X2hhbmRsZXI9J3Jlc29sdmUnKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgaGVscD0nT0xEIFgnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGhlbHA9J05FVyBYJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhdCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAteCBYICAgICAgICBORVcgWAorICAgICAgICAgICAgJycnKSkKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNwYW0nLCBtZXRhdmFyPSdPTERfU1BBTScpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3BhbScsIG1ldGF2YXI9J05FV19TUEFNJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhdIFstLXNwYW0gTkVXX1NQQU1dCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC14IFggICAgICAgICAgICAgTkVXIFgKKyAgICAgICAgICAgICAgLS1zcGFtIE5FV19TUEFNCisgICAgICAgICAgICAnJycpKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgSGVscCBhbmQgVmVyc2lvbiBvcHRpb24gdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE9wdGlvbmFsc0hlbHBWZXJzaW9uQWN0aW9ucyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgaGVscCBhbmQgdmVyc2lvbiBhY3Rpb25zIiIiCisKKyAgICBkZWYgX2dldF9lcnJvcihzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IEFyZ3VtZW50UGFyc2VyRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsIGZ1bmMsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBhc3NlcnRQcmludEhlbHBFeGl0KHNlbGYsIHBhcnNlciwgYXJnc19zdHIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyc2VyLmZvcm1hdF9oZWxwKCksCisgICAgICAgICAgICBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3Nfc3RyLnNwbGl0KCkpLnN0ZG91dCkKKworICAgIGRlZiBhc3NlcnRQcmludFZlcnNpb25FeGl0KHNlbGYsIHBhcnNlciwgYXJnc19zdHIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyc2VyLmZvcm1hdF92ZXJzaW9uKCksCisgICAgICAgICAgICBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3Nfc3RyLnNwbGl0KCkpLnN0ZGVycikKKworICAgIGRlZiBhc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYsIHBhcnNlciwgKmFyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCBwYXJzZXIucGFyc2VfYXJncywgYXJncykKKworICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHZlcnNpb249JzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRIZWxwRXhpdChwYXJzZXIsICctaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRIZWxwRXhpdChwYXJzZXIsICctLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCAnLXYnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCAnLS12ZXJzaW9uJykKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fZm9ybWF0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUFAnLCB2ZXJzaW9uPSclKHByb2cpcyAzLjUnKQorICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLXYnXSkuc3RkZXJyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1BQUCAzLjVcbicsIG1zZykKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9faGVscChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UsIHZlcnNpb249JzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCAnLXYnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCAnLS12ZXJzaW9uJykKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fYWN0aW9uKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdYWFgnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctVicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249JyUocHJvZylzIDMuNycpCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctViddKS5zdGRlcnIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnWFhYIDMuN1xuJywgbXNnKQorCisgICAgZGVmIHRlc3Rfbm9faGVscChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLXYnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLS12ZXJzaW9uJykKKworICAgIGRlZiB0ZXN0X2FsdGVybmF0ZV9oZWxwX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBhY3Rpb249J2hlbHAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteScsIGFjdGlvbj0ndmVyc2lvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRIZWxwRXhpdChwYXJzZXIsICcteCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICcteScpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctdicpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctLXZlcnNpb24nKQorCisgICAgZGVmIHRlc3RfaGVscF92ZXJzaW9uX2V4dHJhX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIodmVyc2lvbj0nMS4wJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd5JykKKworICAgICAgICAjIHRyeSBhbGwgY29tYmluYXRpb25zIG9mIHZhbGlkIHByZWZpeGVzIGFuZCBzdWZmaXhlcworICAgICAgICB2YWxpZF9wcmVmaXhlcyA9IFsnJywgJy14JywgJ2ZvbycsICcteCBiYXInLCAnYmF6IC14J10KKyAgICAgICAgdmFsaWRfc3VmZml4ZXMgPSB2YWxpZF9wcmVmaXhlcyArIFsnLS1iYWQtb3B0aW9uJywgJ2ZvbyBiYXIgYmF6J10KKyAgICAgICAgZm9yIHByZWZpeCBpbiB2YWxpZF9wcmVmaXhlczoKKyAgICAgICAgICAgIGZvciBzdWZmaXggaW4gdmFsaWRfc3VmZml4ZXM6CisgICAgICAgICAgICAgICAgZm9ybWF0ID0gJyVzICUlcyAlcycgJSAocHJlZml4LCBzdWZmaXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFByaW50SGVscEV4aXQocGFyc2VyLCBmb3JtYXQgJSAnLWgnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRQcmludEhlbHBFeGl0KHBhcnNlciwgZm9ybWF0ICUgJy0taGVscCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCBmb3JtYXQgJSAnLXYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRQcmludFZlcnNpb25FeGl0KHBhcnNlciwgZm9ybWF0ICUgJy0tdmVyc2lvbicpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09CisjIHN0cigpIGFuZCByZXByKCkgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0U3RyaW5ncyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBzdHIoKSAgYW5kIHJlcHIoKSBvbiBPcHRpb25hbHMgYW5kIFBvc2l0aW9uYWxzIiIiCisKKyAgICBkZWYgYXNzZXJ0U3RyaW5nRXF1YWwoc2VsZiwgb2JqLCByZXN1bHRfc3RyaW5nKToKKyAgICAgICAgZm9yIGZ1bmMgaW4gW3N0ciwgcmVwcl06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMob2JqKSwgcmVzdWx0X3N0cmluZykKKworICAgIGRlZiB0ZXN0X29wdGlvbmFsKHNlbGYpOgorICAgICAgICBvcHRpb24gPSBhcmdwYXJzZS5BY3Rpb24oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1bJy0tZm9vJywgJy1hJywgJy1iJ10sCisgICAgICAgICAgICBkZXN0PSdiJywKKyAgICAgICAgICAgIHR5cGU9J2ludCcsCisgICAgICAgICAgICBuYXJncz0nKycsCisgICAgICAgICAgICBkZWZhdWx0PTQyLAorICAgICAgICAgICAgY2hvaWNlcz1bMSwgMiwgM10sCisgICAgICAgICAgICBoZWxwPSdIRUxQJywKKyAgICAgICAgICAgIG1ldGF2YXI9J01FVEFWQVInKQorICAgICAgICBzdHJpbmcgPSAoCisgICAgICAgICAgICAiQWN0aW9uKG9wdGlvbl9zdHJpbmdzPVsnLS1mb28nLCAnLWEnLCAnLWInXSwgZGVzdD0nYicsICIKKyAgICAgICAgICAgICJuYXJncz0nKycsIGNvbnN0PU5vbmUsIGRlZmF1bHQ9NDIsIHR5cGU9J2ludCcsICIKKyAgICAgICAgICAgICJjaG9pY2VzPVsxLCAyLCAzXSwgaGVscD0nSEVMUCcsIG1ldGF2YXI9J01FVEFWQVInKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RyaW5nRXF1YWwob3B0aW9uLCBzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgYXJndW1lbnQgPSBhcmdwYXJzZS5BY3Rpb24oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1bXSwKKyAgICAgICAgICAgIGRlc3Q9J3gnLAorICAgICAgICAgICAgdHlwZT1mbG9hdCwKKyAgICAgICAgICAgIG5hcmdzPSc/JywKKyAgICAgICAgICAgIGRlZmF1bHQ9Mi41LAorICAgICAgICAgICAgY2hvaWNlcz1bMC41LCAxLjUsIDIuNV0sCisgICAgICAgICAgICBoZWxwPSdIIEhIIEgnLAorICAgICAgICAgICAgbWV0YXZhcj0nTVYgTVYgTVYnKQorICAgICAgICBzdHJpbmcgPSAoCisgICAgICAgICAgICAiQWN0aW9uKG9wdGlvbl9zdHJpbmdzPVtdLCBkZXN0PSd4JywgbmFyZ3M9Jz8nLCAiCisgICAgICAgICAgICAiY29uc3Q9Tm9uZSwgZGVmYXVsdD0yLjUsIHR5cGU9JXIsIGNob2ljZXM9WzAuNSwgMS41LCAyLjVdLCAiCisgICAgICAgICAgICAiaGVscD0nSCBISCBIJywgbWV0YXZhcj0nTVYgTVYgTVYnKSIgJSBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdHJpbmdFcXVhbChhcmd1bWVudCwgc3RyaW5nKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZShmb289NDIsIGJhcj0nc3BhbScpCisgICAgICAgIHN0cmluZyA9ICJOYW1lc3BhY2UoYmFyPSdzcGFtJywgZm9vPTQyKSIKKyAgICAgICAgc2VsZi5hc3NlcnRTdHJpbmdFcXVhbChucywgc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcGFyc2VyKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgc3RyaW5nID0gKAorICAgICAgICAgICAgIkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCB1c2FnZT1Ob25lLCBkZXNjcmlwdGlvbj1Ob25lLCAiCisgICAgICAgICAgICAidmVyc2lvbj1Ob25lLCBmb3JtYXR0ZXJfY2xhc3M9JXIsIGNvbmZsaWN0X2hhbmRsZXI9J2Vycm9yJywgIgorICAgICAgICAgICAgImFkZF9oZWxwPVRydWUpIiAlIGFyZ3BhcnNlLkhlbHBGb3JtYXR0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RyaW5nRXF1YWwocGFyc2VyLCBzdHJpbmcpCisKKyMgPT09PT09PT09PT09PT09CisjIE5hbWVzcGFjZSB0ZXN0cworIyA9PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE5hbWVzcGFjZShUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgbnMgPSBhcmdwYXJzZS5OYW1lc3BhY2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgbnMsICd4JykKKworICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZShhPTQyLCBiPSdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5iLCAnc3BhbScpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgbnMxID0gYXJncGFyc2UuTmFtZXNwYWNlKGE9MSwgYj0yKQorICAgICAgICBuczIgPSBhcmdwYXJzZS5OYW1lc3BhY2UoYj0yLCBhPTEpCisgICAgICAgIG5zMyA9IGFyZ3BhcnNlLk5hbWVzcGFjZShhPTEpCisgICAgICAgIG5zNCA9IGFyZ3BhcnNlLk5hbWVzcGFjZShiPTIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuczEsIG5zMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuczEsIG5zMykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuczEsIG5zNCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuczIsIG5zMykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuczIsIG5zNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zMSAhPSBuczMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuczEgIT0gbnM0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMyICE9IG5zMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zMiAhPSBuczQpCisKKworIyA9PT09PT09PT09PT09PT09PT09CisjIEZpbGUgZW5jb2RpbmcgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0RW5jb2RpbmcoVGVzdENhc2UpOgorCisgICAgZGVmIF90ZXN0X21vZHVsZV9lbmNvZGluZyhzZWxmLCBwYXRoKToKKyAgICAgICAgcGF0aCwgXyA9IG9zLnBhdGguc3BsaXRleHQocGF0aCkKKyAgICAgICAgcGF0aCArPSAiLnB5IgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHBhdGgsICdyJywgJ3V0ZjgnKSBhcyBmOgorICAgICAgICAgICAgZi5yZWFkKCkKKworICAgIGRlZiB0ZXN0X2FyZ3BhcnNlX21vZHVsZV9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9tb2R1bGVfZW5jb2RpbmcoYXJncGFyc2UuX19maWxlX18pCisKKyAgICBkZWYgdGVzdF90ZXN0X2FyZ3BhcnNlX21vZHVsZV9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9tb2R1bGVfZW5jb2RpbmcoX19maWxlX18pCisKKyMgPT09PT09PT09PT09PT09PT09PQorIyBBcmd1bWVudEVycm9yIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEFyZ3VtZW50RXJyb3IoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXJndW1lbnRfZXJyb3Ioc2VsZik6CisgICAgICAgIG1zZyA9ICJteSBlcnJvciBoZXJlIgorICAgICAgICBlcnJvciA9IGFyZ3BhcnNlLkFyZ3VtZW50RXJyb3IoTm9uZSwgbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksIG1zZykKKworIyA9PT09PT09PT09PT09PT09PT09PT09PQorIyBBcmd1bWVudFR5cGVFcnJvciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QXJndW1lbnRUeXBlRXJyb3IoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXJndW1lbnRfdHlwZV9lcnJvcihzZWxmKToKKworICAgICAgICBkZWYgc3BhbShzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3NwYW0hJykKKworICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3gnLCB0eXBlPXNwYW0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFsnWFhYJ10pCisgICAgICAgIGV4Y2VwdCBBcmd1bWVudFBhcnNlckVycm9yOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSAndXNhZ2U6IFBST0cgeFxuUFJPRzogZXJyb3I6IGFyZ3VtZW50IHg6IHNwYW0hXG4nCisgICAgICAgICAgICBtc2cgPSBzeXMuZXhjX2luZm8oKVsxXS5zdGRlcnIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIENoZWNrIHRoYXQgdGhlIHR5cGUgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFR5cGVGdW5jdGlvbkNhbGxPbmx5T25jZShUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90eXBlX2Z1bmN0aW9uX2NhbGxfb25seV9vbmNlKHNlbGYpOgorICAgICAgICBkZWYgc3BhbShzdHJpbmdfdG9fY29udmVydCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ190b19jb252ZXJ0LCAnc3BhbSEnKQorICAgICAgICAgICAgcmV0dXJuICdmb29fY29udmVydGVkJworCisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCB0eXBlPXNwYW0sIGRlZmF1bHQ9J2JhcicpCisgICAgICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gc3BhbSEnLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoZm9vPSdmb29fY29udmVydGVkJyksIGFyZ3MpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIENoZWNrIHNlbWFudGljcyByZWdhcmRpbmcgdGhlIGRlZmF1bHQgYXJndW1lbnQgYW5kIHR5cGUgY29udmVyc2lvbgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFR5cGVGdW5jdGlvbkNhbGxlZE9uRGVmYXVsdChUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90eXBlX2Z1bmN0aW9uX2NhbGxfd2l0aF9ub25fc3RyaW5nX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGRlZiBzcGFtKGludF90b19jb252ZXJ0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50X3RvX2NvbnZlcnQsIDApCisgICAgICAgICAgICByZXR1cm4gJ2Zvb19jb252ZXJ0ZWQnCisKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIHR5cGU9c3BhbSwgZGVmYXVsdD0wKQorICAgICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICAgICAgICMgZm9vIHNob3VsZCAqbm90KiBiZSBjb252ZXJ0ZWQgYmVjYXVzZSBpdHMgZGVmYXVsdCBpcyBub3QgYSBzdHJpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoZm9vPTApLCBhcmdzKQorCisgICAgZGVmIHRlc3RfdHlwZV9mdW5jdGlvbl9jYWxsX3dpdGhfc3RyaW5nX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGRlZiBzcGFtKGludF90b19jb252ZXJ0KToKKyAgICAgICAgICAgIHJldHVybiAnZm9vX2NvbnZlcnRlZCcKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgdHlwZT1zcGFtLCBkZWZhdWx0PScwJykKKyAgICAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgICAgICAjIGZvbyBpcyBjb252ZXJ0ZWQgYmVjYXVzZSBpdHMgZGVmYXVsdCBpcyBhIHN0cmluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyhmb289J2Zvb19jb252ZXJ0ZWQnKSwgYXJncykKKworICAgIGRlZiB0ZXN0X25vX2RvdWJsZV90eXBlX2NvbnZlcnNpb25fb2ZfZGVmYXVsdChzZWxmKToKKyAgICAgICAgZGVmIGV4dGVuZChzdHJfdG9fY29udmVydCk6CisgICAgICAgICAgICByZXR1cm4gc3RyX3RvX2NvbnZlcnQgKyAnKicKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdGVzdCcsIHR5cGU9ZXh0ZW5kLCBkZWZhdWx0PScqJykKKyAgICAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgICAgICAjIFRoZSB0ZXN0IGFyZ3VtZW50IHdpbGwgYmUgdHdvIHN0YXJzLCBvbmUgY29taW5nIGZyb20gdGhlIGRlZmF1bHQKKyAgICAgICAgIyB2YWx1ZSBhbmQgb25lIGNvbWluZyBmcm9tIHRoZSB0eXBlIGNvbnZlcnNpb24gYmVpbmcgY2FsbGVkIGV4YWN0bHkKKyAgICAgICAgIyBvbmNlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHRlc3Q9JyoqJyksIGFyZ3MpCisKKyAgICBkZWYgdGVzdF9pc3N1ZV8xNTkwNihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTU5MDY6IFdoZW4gYWN0aW9uPSdhcHBlbmQnLCB0eXBlPXN0ciwgZGVmYXVsdD1bXSBhcmUKKyAgICAgICAgIyBwcm92aWRpbmcsIHRoZSBkZXN0IHZhbHVlIHdhcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uICJbXSIgd2hlbiBpdAorICAgICAgICAjIHNob3VsZCBoYXZlIGJlZW4gYW4gZW1wdHkgbGlzdC4KKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXRlc3QnLCBkZXN0PSd0ZXN0JywgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bXSwgYWN0aW9uPSdhcHBlbmQnKQorICAgICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncy50ZXN0LCBbXSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09CisjIHBhcnNlX2tub3duX2FyZ3MgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0UGFyc2VLbm93bkFyZ3MoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXJndW1lbnRzX3R1cGxlKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCgpKQorCisgICAgZGVmIHRlc3RfYXJndW1lbnRzX2xpc3Qoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisKKyAgICBkZWYgdGVzdF9hcmd1bWVudHNfdHVwbGVfcG9zaXRpb25hbChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd4JykKKyAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoKCd4JywpKQorCisgICAgZGVmIHRlc3RfYXJndW1lbnRzX2xpc3RfcG9zaXRpb25hbChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd4JykKKyAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoWyd4J10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25hbHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQorICAgICAgICBhcmdzLCBleHRyYXMgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygnLS1mb28gRiAtLWJhciAtLWJheicuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyhmb289J0YnKSwgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJy0tYmFyJywgJy0tYmF6J10sIGV4dHJhcykKKworICAgIGRlZiB0ZXN0X21peGVkKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgbmFyZ3M9Jz8nLCBjb25zdD0xLCB0eXBlPWludCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zcGFtJywgYWN0aW9uPSdzdG9yZV9mYWxzZScpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhZGdlcicpCisKKyAgICAgICAgYXJndiA9IFsiQiIsICJDIiwgIi0tZm9vIiwgIi12IiwgIjMiLCAiNCJdCisgICAgICAgIGFyZ3MsIGV4dHJhcyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3YpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlModj0zLCBzcGFtPVRydWUsIGJhZGdlcj0iQiIpLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiQyIsICItLWZvbyIsICI0Il0sIGV4dHJhcykKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBhZGRfYXJndW1lbnQgbWV0YXZhciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QWRkQXJndW1lbnRNZXRhdmFyKFRlc3RDYXNlKToKKworICAgIEVYUEVDVEVEX01FU1NBR0UgPSAibGVuZ3RoIG9mIG1ldGF2YXIgdHVwbGUgZG9lcyBub3QgbWF0Y2ggbmFyZ3MiCisKKyAgICBkZWYgZG9fdGVzdF9ub19leGNlcHRpb24oc2VsZiwgbmFyZ3MsIG1ldGF2YXIpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZm9vIiwgbmFyZ3M9bmFyZ3MsIG1ldGF2YXI9bWV0YXZhcikKKworICAgIGRlZiBkb190ZXN0X2V4Y2VwdGlvbihzZWxmLCBuYXJncywgbWV0YXZhcik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZm9vIiwgbmFyZ3M9bmFyZ3MsIG1ldGF2YXI9bWV0YXZhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJnc1swXSwgc2VsZi5FWFBFQ1RFRF9NRVNTQUdFKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz1Ob25lCisKKyAgICBkZWYgdGVzdF9uYXJnc19Ob25lX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPU5vbmUsIG1ldGF2YXI9IjEiKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfTm9uZV9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9Tm9uZSwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfTm9uZV9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9Tm9uZSwgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX05vbmVfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPU5vbmUsIG1ldGF2YXI9KCIxIiwgIjIiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX05vbmVfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPU5vbmUsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0/CisKKyAgICBkZWYgdGVzdF9uYXJnc19vcHRpb25hbF9tZXRhdmFyX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0iPyIsIG1ldGF2YXI9IjEiKQorCisgICAgZGVmIHRlc3RfbmFyZ3Nfb3B0aW9uYWxfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSI/IiwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3Nfb3B0aW9uYWxfbWV0YXZhcl9sZW5ndGgxKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSI/IiwgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX29wdGlvbmFsX21ldGF2YXJfbGVuZ3RoMihzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iPyIsIG1ldGF2YXI9KCIxIiwgIjIiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX29wdGlvbmFsX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iPyIsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0qCisKKyAgICBkZWYgdGVzdF9uYXJnc196ZXJvb3Jtb3JlX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIqIiwgbWV0YXZhcj0iMSIpCisKKyAgICBkZWYgdGVzdF9uYXJnc196ZXJvb3Jtb3JlX21ldGF2YXJfbGVuZ3RoMChzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iKiIsIG1ldGF2YXI9dHVwbGUoKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX3plcm9vcm1vcmVfbWV0YXZhcl9sZW5ndGgxKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIqIiwgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX3plcm9vcm1vcmVfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIqIiwgbWV0YXZhcj0oIjEiLCAiMiIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfemVyb29ybW9yZV9tZXRhdmFyX2xlbmd0aDMoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9IioiLCBtZXRhdmFyPSgiMSIsICIyIiwgIjMiKSkKKworICAgICMgVW5pdCB0ZXN0cyBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiBtZXRhdmFyIHdoZW4gbmFyZ3M9KworCisgICAgZGVmIHRlc3RfbmFyZ3Nfb25lb3Jtb3JlX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIrIiwgbWV0YXZhcj0iMSIpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vbmVvcm1vcmVfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSIrIiwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3Nfb25lb3Jtb3JlX21ldGF2YXJfbGVuZ3RoMShzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0iKyIsIG1ldGF2YXI9KCIxIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vbmVvcm1vcmVfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIrIiwgbWV0YXZhcj0oIjEiLCAiMiIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3Nfb25lb3Jtb3JlX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iKyIsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0uLi4KKworICAgIGRlZiB0ZXN0X25hcmdzX3JlbWFpbmRlcl9tZXRhdmFyX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0iLi4uIiwgbWV0YXZhcj0iMSIpCisKKyAgICBkZWYgdGVzdF9uYXJnc19yZW1haW5kZXJfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIuLi4iLCBtZXRhdmFyPXR1cGxlKCkpCisKKyAgICBkZWYgdGVzdF9uYXJnc19yZW1haW5kZXJfbWV0YXZhcl9sZW5ndGgxKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIuLi4iLCBtZXRhdmFyPSgiMSIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfcmVtYWluZGVyX21ldGF2YXJfbGVuZ3RoMihzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0iLi4uIiwgbWV0YXZhcj0oIjEiLCAiMiIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfcmVtYWluZGVyX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0iLi4uIiwgbWV0YXZhcj0oIjEiLCAiMiIsICIzIikpCisKKyAgICAjIFVuaXQgdGVzdHMgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbWV0YXZhciB3aGVuIG5hcmdzPUEuLi4KKworICAgIGRlZiB0ZXN0X25hcmdzX3BhcnNlcl9tZXRhdmFyX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0iQS4uLiIsIG1ldGF2YXI9IjEiKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfcGFyc2VyX21ldGF2YXJfbGVuZ3RoMChzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iQS4uLiIsIG1ldGF2YXI9dHVwbGUoKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX3BhcnNlcl9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IkEuLi4iLCBtZXRhdmFyPSgiMSIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfcGFyc2VyX21ldGF2YXJfbGVuZ3RoMihzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iQS4uLiIsIG1ldGF2YXI9KCIxIiwgIjIiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX3BhcnNlcl9tZXRhdmFyX2xlbmd0aDMoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9IkEuLi4iLCBtZXRhdmFyPSgiMSIsICIyIiwgIjMiKSkKKworICAgICMgVW5pdCB0ZXN0cyBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiBtZXRhdmFyIHdoZW4gbmFyZ3M9MQorCisgICAgZGVmIHRlc3RfbmFyZ3NfMV9tZXRhdmFyX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0xLCBtZXRhdmFyPSIxIikKKworICAgIGRlZiB0ZXN0X25hcmdzXzFfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTEsIG1ldGF2YXI9dHVwbGUoKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzFfbWV0YXZhcl9sZW5ndGgxKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTEsIG1ldGF2YXI9KCIxIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc18xX21ldGF2YXJfbGVuZ3RoMihzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0xLCBtZXRhdmFyPSgiMSIsICIyIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc18xX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0xLCBtZXRhdmFyPSgiMSIsICIyIiwgIjMiKSkKKworICAgICMgVW5pdCB0ZXN0cyBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiBtZXRhdmFyIHdoZW4gbmFyZ3M9MgorCisgICAgZGVmIHRlc3RfbmFyZ3NfMl9tZXRhdmFyX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0yLCBtZXRhdmFyPSIxIikKKworICAgIGRlZiB0ZXN0X25hcmdzXzJfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTIsIG1ldGF2YXI9dHVwbGUoKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzJfbWV0YXZhcl9sZW5ndGgxKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTIsIG1ldGF2YXI9KCIxIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc18yX21ldGF2YXJfbGVuZ3RoMihzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0yLCBtZXRhdmFyPSgiMSIsICIyIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc18yX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0yLCBtZXRhdmFyPSgiMSIsICIyIiwgIjMiKSkKKworICAgICMgVW5pdCB0ZXN0cyBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiBtZXRhdmFyIHdoZW4gbmFyZ3M9MworCisgICAgZGVmIHRlc3RfbmFyZ3NfM19tZXRhdmFyX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0zLCBtZXRhdmFyPSIxIikKKworICAgIGRlZiB0ZXN0X25hcmdzXzNfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTMsIG1ldGF2YXI9dHVwbGUoKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzNfbWV0YXZhcl9sZW5ndGgxKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTMsIG1ldGF2YXI9KCIxIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc18zX21ldGF2YXJfbGVuZ3RoMihzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0zLCBtZXRhdmFyPSgiMSIsICIyIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc18zX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0zLCBtZXRhdmFyPSgiMSIsICIyIiwgIjMiKSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGZyb20gYXJncGFyc2UgaW1wb3J0ICogdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0SW1wb3J0U3RhcihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gYXJncGFyc2UuX19hbGxfXzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGFyZ3BhcnNlLCBuYW1lKSkKKworICAgIGRlZiB0ZXN0X2FsbF9leHBvcnRzX2V2ZXJ5dGhpbmdfYnV0X21vZHVsZXMoc2VsZik6CisgICAgICAgIGl0ZW1zID0gWworICAgICAgICAgICAgbmFtZQorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHZhcnMoYXJncGFyc2UpLml0ZW1zKCkKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoIl8iKQorICAgICAgICAgICAgaWYgbm90IGluc3BlY3QuaXNtb2R1bGUodmFsdWUpCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaXRlbXMpLCBzb3J0ZWQoYXJncGFyc2UuX19hbGxfXykpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIHNpbGVuY2Ugd2FybmluZ3MgYWJvdXQgdmVyc2lvbiBhcmd1bWVudCAtIHRoZXNlIGFyZSBleHBlY3RlZAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCdUaGUgInZlcnNpb24iIGFyZ3VtZW50IHRvIEFyZ3VtZW50UGFyc2VyIGlzIGRlcHJlY2F0ZWQuJywKKyAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCdUaGUgKGZvcm1hdHxwcmludClfdmVyc2lvbiBtZXRob2QgaXMgZGVwcmVjYXRlZCcsCisgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisgICAgIyBSZW1vdmUgZ2xvYmFsIHJlZmVyZW5jZXMgdG8gYXZvaWQgbG9va2luZyBsaWtlIHdlIGhhdmUgcmVmbGVha3MuCisgICAgUkZpbGUuc2VlbiA9IHt9CisgICAgV0ZpbGUuc2VlbiA9IHNldCgpCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hcnJheS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0ZGNjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hcnJheS5weQpAQCAtMCwwICsxLDExMTEgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIlRlc3QgdGhlIGFycmF5bW9kdWxlLgorICAgUm9nZXIgRS4gTWFzc2UKKyIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2ltcG9ydCBhcnJheSwgY1N0cmluZ0lPCitmcm9tIGNQaWNrbGUgaW1wb3J0IGxvYWRzLCBkdW1wcywgSElHSEVTVF9QUk9UT0NPTAorCitjbGFzcyBBcnJheVN1YmNsYXNzKGFycmF5LmFycmF5KToKKyAgICBwYXNzCisKK2NsYXNzIEFycmF5U3ViY2xhc3NXaXRoS3dhcmdzKGFycmF5LmFycmF5KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZWNvZGUsIG5ld2FyZz1Ob25lKToKKyAgICAgICAgYXJyYXkuYXJyYXkuX19pbml0X18oc2VsZiwgdHlwZWNvZGUpCisKK3Rlc3RzID0gW10gIyBsaXN0IHRvIGFjY3VtdWxhdGUgYWxsIHRlc3RzCit0eXBlY29kZXMgPSAiY3ViQmhIaUlsTGZkIgorCitjbGFzcyBCYWRDb25zdHJ1Y3RvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXJyYXkuYXJyYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXJyYXkuYXJyYXksIHNwYW09NDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXJyYXkuYXJyYXksICd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFycmF5LmFycmF5LCAneCcpCisKK3Rlc3RzLmFwcGVuZChCYWRDb25zdHJ1Y3RvclRlc3QpCisKK2NsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFJlcXVpcmVkIGNsYXNzIGF0dHJpYnV0ZXMgKHByb3ZpZGVkIGJ5IHN1YmNsYXNzZXMKKyAgICAjIHR5cGVjb2RlOiB0aGUgdHlwZWNvZGUgdG8gdGVzdAorICAgICMgZXhhbXBsZTogYW4gaW5pdGlhbGl6ZXIgdXNhYmxlIGluIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhpcyB0eXBlCisgICAgIyBzbWFsbGVyZXhhbXBsZTogdGhlIHNhbWUgbGVuZ3RoIGFzIGV4YW1wbGUsIGJ1dCBzbWFsbGVyCisgICAgIyBiaWdnZXJleGFtcGxlOiB0aGUgc2FtZSBsZW5ndGggYXMgZXhhbXBsZSwgYnV0IGJpZ2dlcgorICAgICMgb3V0c2lkZTogQW4gZW50cnkgdGhhdCBpcyBub3QgaW4gZXhhbXBsZQorICAgICMgbWluaXRlbXNpemU6IHRoZSBtaW5pbXVtIGd1YXJhbnRlZWQgaXRlbXNpemUKKworICAgIGRlZiBhc3NlcnRFbnRyeUVxdWFsKHNlbGYsIGVudHJ5MSwgZW50cnkyKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeTEsIGVudHJ5MikKKworICAgIGRlZiBiYWR0eXBlY29kZShzZWxmKToKKyAgICAgICAgIyBSZXR1cm4gYSB0eXBlY29kZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIG91ciBvd24KKyAgICAgICAgcmV0dXJuIHR5cGVjb2Rlc1sodHlwZWNvZGVzLmluZGV4KHNlbGYudHlwZWNvZGUpKzEpICUgbGVuKHR5cGVjb2RlcyldCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS50eXBlY29kZSwgc2VsZi50eXBlY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuaXRlbXNpemU+PXNlbGYubWluaXRlbXNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXJyYXkuYXJyYXksIHNlbGYudHlwZWNvZGUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICBhLmFwcGVuZChzZWxmLmV4YW1wbGVbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGEpLCAxKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGEpLCBsZW4oc2VsZi5leGFtcGxlKSkKKworICAgIGRlZiB0ZXN0X2J1ZmZlcl9pbmZvKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuYnVmZmVyX2luZm8sIDQyKQorICAgICAgICBiaSA9IGEuYnVmZmVyX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYmksIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiaSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaVswXSwgKGludCwgbG9uZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaVsxXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpWzFdLCBsZW4oYSkpCisKKyAgICBkZWYgdGVzdF9ieXRlc3dhcChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmJ5dGVzd2FwLCA0MikKKyAgICAgICAgaWYgYS5pdGVtc2l6ZSBpbiAoMSwgMiwgNCwgOCk6CisgICAgICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICAgICAgYi5ieXRlc3dhcCgpCisgICAgICAgICAgICBpZiBhLml0ZW1zaXplPT0xOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgYi5ieXRlc3dhcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBpbXBvcnQgY29weQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBiID0gY29weS5jb3B5KGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weShzZWxmKToKKyAgICAgICAgaW1wb3J0IGNvcHkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYiA9IGNvcHkuZGVlcGNvcHkoYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChhKSwgaWQoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgZm9yIHByb3RvY29sIGluIHJhbmdlKEhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgICAgICBiID0gbG9hZHMoZHVtcHMoYSwgcHJvdG9jb2wpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChhKSwgaWQoYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICAgICAgICAgIGEgPSBBcnJheVN1YmNsYXNzKHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgICAgIGEueCA9IDEwCisgICAgICAgICAgICBiID0gbG9hZHMoZHVtcHMoYSwgcHJvdG9jb2wpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChhKSwgaWQoYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEueCwgYi54KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGEpLCB0eXBlKGIpKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2Zvcl9lbXB0eV9hcnJheShzZWxmKToKKyAgICAgICAgZm9yIHByb3RvY29sIGluIHJhbmdlKEhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICAgICAgYiA9IGxvYWRzKGR1bXBzKGEsIHByb3RvY29sKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorCisgICAgICAgICAgICBhID0gQXJyYXlTdWJjbGFzcyhzZWxmLnR5cGVjb2RlKQorICAgICAgICAgICAgYS54ID0gMTAKKyAgICAgICAgICAgIGIgPSBsb2FkcyhkdW1wcyhhLCBwcm90b2NvbCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS54LCBiLngpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYSksIHR5cGUoYikpCisKKyAgICBkZWYgdGVzdF9pbnNlcnQoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGEuaW5zZXJ0KDAsIHNlbGYuZXhhbXBsZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYSksIDErbGVuKHNlbGYuZXhhbXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswXSwgYVsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmluc2VydCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmluc2VydCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmluc2VydCwgMCwgTm9uZSkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhLmluc2VydCgtMSwgc2VsZi5leGFtcGxlWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KAorICAgICAgICAgICAgICAgIHNlbGYudHlwZWNvZGUsCisgICAgICAgICAgICAgICAgc2VsZi5leGFtcGxlWzotMV0gKyBzZWxmLmV4YW1wbGVbOjFdICsgc2VsZi5leGFtcGxlWy0xOl0KKyAgICAgICAgICAgICkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGEuaW5zZXJ0KC0xMDAwLCBzZWxmLmV4YW1wbGVbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzoxXSArIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGEuaW5zZXJ0KDEwMDAsIHNlbGYuZXhhbXBsZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUgKyBzZWxmLmV4YW1wbGVbOjFdKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF90b2Zyb21maWxlKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS50b2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS50b2ZpbGUsIGNTdHJpbmdJTy5TdHJpbmdJTygpKQorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3YicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEudG9maWxlKGYpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3JiJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi5mcm9tZmlsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICBiLmZyb21maWxlLAorICAgICAgICAgICAgICAgIGNTdHJpbmdJTy5TdHJpbmdJTygpLCBsZW4oc2VsZi5leGFtcGxlKQorICAgICAgICAgICAgKQorICAgICAgICAgICAgYi5mcm9tZmlsZShmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYSwgYikKKyAgICAgICAgICAgIGIuZnJvbWZpbGUoZiwgbGVuKHNlbGYuZXhhbXBsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgYi5mcm9tZmlsZSwgZiwgMSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IGYuY2xvc2VkOgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZnJvbWZpbGVfaW9lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNTM5NTogQ2hlY2sgaWYgZnJvbWZpbGUgcmFpc2VzIGEgcHJvcGVyIElPRXJyb3IKKyAgICAgICAgIyBpbnN0ZWFkIG9mIEVPRkVycm9yLgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYS5mcm9tZmlsZSwgZiwgbGVuKHNlbGYuZXhhbXBsZSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2ZpbGV3cml0ZShzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDIqc2VsZi5leGFtcGxlKQorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAnd2InKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKGEpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3JiJykKKyAgICAgICAgICAgIGIuZnJvbWZpbGUoZiwgbGVuKHNlbGYuZXhhbXBsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEsIGIpCisgICAgICAgICAgICBiLmZyb21maWxlKGYsIGxlbihzZWxmLmV4YW1wbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZi5jbG9zZWQ6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF90b2Zyb21saXN0KHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEudG9saXN0LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiLmZyb21saXN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGIuZnJvbWxpc3QsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGIuZnJvbWxpc3QsIFtOb25lXSkKKyAgICAgICAgYi5mcm9tbGlzdChhLnRvbGlzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICBkZWYgdGVzdF90b2Zyb21zdHJpbmcoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS50b3N0cmluZywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi5mcm9tc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGIuZnJvbXN0cmluZywgNDIpCisgICAgICAgIGIuZnJvbXN0cmluZyhhLnRvc3RyaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgaWYgYS5pdGVtc2l6ZT4xOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYi5mcm9tc3RyaW5nLCAieCIpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgZXZhbChyZXByKGEpLCB7ImFycmF5IjogYXJyYXkuYXJyYXl9KSkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEpLCAiYXJyYXkoJyVzJykiICUgc2VsZi50eXBlY29kZSkKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDIqc2VsZi5leGFtcGxlKQorICAgICAgICBzdHIoYSkKKworICAgIGRlZiB0ZXN0X2NtcChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID09IDQyKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICE9IDQyKSBpcyBUcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA9PSBhKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgIT0gYSkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8IGEpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPD0gYSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID4gYSkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+PSBhKSBpcyBUcnVlKQorCisgICAgICAgIGFsID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5zbWFsbGVyZXhhbXBsZSkKKyAgICAgICAgYWIgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmJpZ2dlcmV4YW1wbGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID09IDIqYSkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAhPSAyKmEpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8IDIqYSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDw9IDIqYSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID4gMiphKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID49IDIqYSkgaXMgRmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID09IGFsKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICE9IGFsKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPCBhbCkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8PSBhbCkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+IGFsKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPj0gYWwpIGlzIFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID09IGFiKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICE9IGFiKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPCBhYikgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDw9IGFiKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPiBhYikgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+PSBhYikgaXMgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9hZGQoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpIFwKKyAgICAgICAgICAgICsgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSArIHNlbGYuZXhhbXBsZVs6Oi0xXSkKKyAgICAgICAgKQorCisgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLmJhZHR5cGVjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX2FkZF9fLCBiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX2FkZF9fLCAiYmFkIikKKworICAgIGRlZiB0ZXN0X2lhZGQoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOjotMV0pCisgICAgICAgIGIgPSBhCisgICAgICAgIGEgKz0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzo6LTFdKzIqc2VsZi5leGFtcGxlKQorICAgICAgICApCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGEgKz0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSArIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCisgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLmJhZHR5cGVjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX2FkZF9fLCBiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX2lhZGRfXywgImJhZCIpCisKKyAgICBkZWYgdGVzdF9tdWwoc2VsZik6CisgICAgICAgIGEgPSA1KmFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCA1KnNlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpKjUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUqNSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSAwKmFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICApCisKKyAgICAgICAgYSA9ICgtMSkqYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19tdWxfXywgImJhZCIpCisKKyAgICBkZWYgdGVzdF9pbXVsKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBiID0gYQorCisgICAgICAgIGEgKj0gNQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDUqc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSAqPSAwCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkpCisKKyAgICAgICAgYSAqPSAxMDAwCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkpCisKKyAgICAgICAgYSAqPSAtMQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGEgKj0gLTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19pbXVsX18sICJiYWQiKQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbMF0sIHNlbGYuZXhhbXBsZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbMExdLCBzZWxmLmV4YW1wbGVbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RW50cnlFcXVhbChhWy0xXSwgc2VsZi5leGFtcGxlWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbLTFMXSwgc2VsZi5leGFtcGxlWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbbGVuKHNlbGYuZXhhbXBsZSktMV0sIHNlbGYuZXhhbXBsZVstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RW50cnlFcXVhbChhWy1sZW4oc2VsZi5leGFtcGxlKV0sIHNlbGYuZXhhbXBsZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fZ2V0aXRlbV9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fZ2V0aXRlbV9fLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5fX2dldGl0ZW1fXywgLWxlbihzZWxmLmV4YW1wbGUpLTEpCisKKyAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhWzBdID0gYVstMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbMF0sIGFbLTFdKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbMExdID0gYVstMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbMF0sIGFbLTFdKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbLTFdID0gYVswXQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYVswXSwgYVstMV0pCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVstMUxdID0gYVswXQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYVswXSwgYVstMV0pCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVtsZW4oc2VsZi5leGFtcGxlKS0xXSA9IGFbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbMF0sIGFbLTFdKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbLWxlbihzZWxmLmV4YW1wbGUpXSA9IGFbLTFdCisgICAgICAgIHNlbGYuYXNzZXJ0RW50cnlFcXVhbChhWzBdLCBhWy0xXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRpdGVtX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX3NldGl0ZW1fXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fLCAwLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEluZGV4RXJyb3IsCisgICAgICAgICAgICBhLl9fc2V0aXRlbV9fLAorICAgICAgICAgICAgbGVuKHNlbGYuZXhhbXBsZSksIHNlbGYuZXhhbXBsZVswXQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgSW5kZXhFcnJvciwKKyAgICAgICAgICAgIGEuX19zZXRpdGVtX18sCisgICAgICAgICAgICAtbGVuKHNlbGYuZXhhbXBsZSktMSwgc2VsZi5leGFtcGxlWzBdCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2RlbGl0ZW0oc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGRlbCBhWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzE6XSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGRlbCBhWy0xXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6LTFdKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgZGVsIGFbbGVuKHNlbGYuZXhhbXBsZSktMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOi0xXSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGRlbCBhWy1sZW4oc2VsZi5leGFtcGxlKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbMTpdKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fZGVsaXRlbV9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19kZWxpdGVtX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19kZWxpdGVtX18sIGxlbihzZWxmLmV4YW1wbGUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fZGVsaXRlbV9fLCAtbGVuKHNlbGYuZXhhbXBsZSktMSkKKworICAgIGRlZiB0ZXN0X2dldHNsaWNlKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOl0sIGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGFbMTpdLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzE6XSkKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhWzoxXSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6MV0pCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYVs6LTFdLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzotMV0pCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYVstMTpdLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWy0xOl0pCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYVstMTotMV0sCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGFbMjoxXSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYVsxMDAwOl0sCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMTAwMDpdLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjEwMDBdLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYVs6LTEwMDBdLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTEwMDA6MTAwMF0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhWzIwMDA6MTAwMF0sCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9leHRlbmRlZF9nZXRzbGljZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGV4dGVuZGVkIHNsaWNpbmcgYnkgY29tcGFyaW5nIHdpdGggbGlzdCBzbGljaW5nCisgICAgICAgICMgKEFzc3VtZXMgbGlzdCBjb252ZXJzaW9uIHdvcmtzIGNvcnJlY3RseSwgdG9vKQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDE5LCAxMDAsIC0xLCAtMiwgLTMxLCAtMTAwKQorICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKKyAgICAgICAgICAgIGZvciBzdG9wIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgIyBFdmVyeXRoaW5nIGV4Y2VwdCB0aGUgaW5pdGlhbCAwIChpbnZhbGlkIHN0ZXApCisgICAgICAgICAgICAgICAgZm9yIHN0ZXAgaW4gaW5kaWNlc1sxOl06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhW3N0YXJ0OnN0b3A6c3RlcF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoYSlbc3RhcnQ6c3RvcDpzdGVwXSkKKworICAgIGRlZiB0ZXN0X3NldHNsaWNlKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhWzoxXSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUgKyBzZWxmLmV4YW1wbGVbMTpdKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVs6LTFdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSArIHNlbGYuZXhhbXBsZVstMTpdKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVstMTpdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6LTFdICsgc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVsxOl0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzoxXSArIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbMTotMV0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoCisgICAgICAgICAgICAgICAgc2VsZi50eXBlY29kZSwKKyAgICAgICAgICAgICAgICBzZWxmLmV4YW1wbGVbOjFdICsgc2VsZi5leGFtcGxlICsgc2VsZi5leGFtcGxlWy0xOl0KKyAgICAgICAgICAgICkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbMTAwMDpdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDIqc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVstMTAwMDpdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbOjEwMDBdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbOi0xMDAwXSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbMTowXSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOjFdICsgc2VsZi5leGFtcGxlICsgc2VsZi5leGFtcGxlWzE6XSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbMjAwMDoxMDAwXSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX3NldHNsaWNlX18sIDAsIDAsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX3NldGl0ZW1fXywgc2xpY2UoMCwgMCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX3NldGl0ZW1fXywgc2xpY2UoMCwgMSksIE5vbmUpCisKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYuYmFkdHlwZWNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0c2xpY2VfXywgMCwgMCwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fLCBzbGljZSgwLCAwKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fLCBzbGljZSgwLCAxKSwgYikKKworICAgIGRlZiB0ZXN0X2V4dGVuZGVkX3NldF9kZWxfc2xpY2Uoc2VsZik6CisgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDEwMCwgLTEsIC0yLCAtMzEsIC0xMDApCisgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgZm9yIHN0b3AgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAjIEV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBpbml0aWFsIDAgKGludmFsaWQgc3RlcCkKKyAgICAgICAgICAgICAgICBmb3Igc3RlcCBpbiBpbmRpY2VzWzE6XToKKyAgICAgICAgICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgICAgICAgICAgICAgTCA9IGxpc3QoYSkKKyAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHNsaWNlIG9mIGV4YWN0bHkgdGhlIHJpZ2h0IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIyBidXQgd2l0aCAoaG9wZWZ1bGx5KSBkaWZmZXJlbnQgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IExbc3RhcnQ6c3RvcDpzdGVwXQorICAgICAgICAgICAgICAgICAgICBkYXRhLnJldmVyc2UoKQorICAgICAgICAgICAgICAgICAgICBMW3N0YXJ0OnN0b3A6c3RlcF0gPSBkYXRhCisgICAgICAgICAgICAgICAgICAgIGFbc3RhcnQ6c3RvcDpzdGVwXSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgTCkpCisKKyAgICAgICAgICAgICAgICAgICAgZGVsIExbc3RhcnQ6c3RvcDpzdGVwXQorICAgICAgICAgICAgICAgICAgICBkZWwgYVtzdGFydDpzdG9wOnN0ZXBdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgTCkpCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgZXhhbXBsZSA9IDIqc2VsZi5leGFtcGxlCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBleGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuaW5kZXgpCisgICAgICAgIGZvciB4IGluIGV4YW1wbGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoeCksIGV4YW1wbGUuaW5kZXgoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuaW5kZXgsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuaW5kZXgsIHNlbGYub3V0c2lkZSkKKworICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgorICAgICAgICBleGFtcGxlID0gMipzZWxmLmV4YW1wbGUKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5jb3VudCkKKyAgICAgICAgZm9yIHggaW4gZXhhbXBsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5jb3VudCh4KSwgZXhhbXBsZS5jb3VudCh4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmNvdW50KHNlbGYub3V0c2lkZSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5jb3VudChOb25lKSwgMCkKKworICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKKyAgICAgICAgZm9yIHggaW4gc2VsZi5leGFtcGxlOgorICAgICAgICAgICAgZXhhbXBsZSA9IDIqc2VsZi5leGFtcGxlCisgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgZXhhbXBsZSkKKyAgICAgICAgICAgIHBvcyA9IGV4YW1wbGUuaW5kZXgoeCkKKyAgICAgICAgICAgIGV4YW1wbGUyID0gZXhhbXBsZVs6cG9zXSArIGV4YW1wbGVbcG9zKzE6XQorICAgICAgICAgICAgYS5yZW1vdmUoeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgZXhhbXBsZTIpKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEucmVtb3ZlLCBzZWxmLm91dHNpZGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5yZW1vdmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLnBvcCkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5wb3AsIDQyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLnBvcCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5wb3AsIGxlbihhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5wb3AsIC1sZW4oYSktMSkKKworICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYS5wb3AoMCksIHNlbGYuZXhhbXBsZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbMTpdK3NlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYS5wb3AoMSksIHNlbGYuZXhhbXBsZVsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbMToyXStzZWxmLmV4YW1wbGVbMzpdK3NlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYS5wb3AoMCksIHNlbGYuZXhhbXBsZVsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGEucG9wKCksIHNlbGYuZXhhbXBsZVstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzM6XStzZWxmLmV4YW1wbGVbOi0xXSkKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZShzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLnJldmVyc2UsIDQyKQorICAgICAgICBhLnJldmVyc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6Oi0xXSkKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuZXh0ZW5kKQorICAgICAgICBhLmV4dGVuZChhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOjotMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZStzZWxmLmV4YW1wbGVbOjotMV0pCisgICAgICAgICkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhLmV4dGVuZChhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZStzZWxmLmV4YW1wbGUpCisgICAgICAgICkKKworICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi5iYWR0eXBlY29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuZXh0ZW5kLCBiKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGEuZXh0ZW5kKHNlbGYuZXhhbXBsZVs6Oi0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUrc2VsZi5leGFtcGxlWzo6LTFdKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93aXRoX2l0ZXJhYmxlX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgaXRlcihzZWxmLmV4YW1wbGUpKQorICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICAgICAgIyBub24taXRlcmFibGUgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhcnJheS5hcnJheSwgc2VsZi50eXBlY29kZSwgMTApCisKKyAgICAgICAgIyBwYXNzIHRocm91Z2ggZXJyb3JzIHJhaXNlZCBpbiBfX2l0ZXJfXworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFVuaWNvZGVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGFycmF5LmFycmF5LCBzZWxmLnR5cGVjb2RlLCBBKCkpCisKKyAgICAgICAgIyBwYXNzIHRocm91Z2ggZXJyb3JzIHJhaXNlZCBpbiBuZXh0KCkKKyAgICAgICAgZGVmIEIoKToKKyAgICAgICAgICAgIHJhaXNlIFVuaWNvZGVFcnJvcgorICAgICAgICAgICAgeWllbGQgTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGFycmF5LmFycmF5LCBzZWxmLnR5cGVjb2RlLCBCKCkpCisKKyAgICBkZWYgdGVzdF9jb3Zlcml0ZXJ0cmF2ZXJzZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgbCA9IFtpdGVyKGEpXQorICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X2J1ZmZlcihzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgYiA9IGJ1ZmZlcihhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sIGEudG9zdHJpbmcoKVswXSkKKworICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6CisgICAgICAgIHMgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHAgPSBwcm94eShzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudG9zdHJpbmcoKSwgcy50b3N0cmluZygpKQorICAgICAgICBzID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWZlcmVuY2VFcnJvciwgbGVuLCBwKQorCisgICAgZGVmIHRlc3RfYnVnXzc4MjM2OShzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpZiBoYXNhdHRyKHN5cywgImdldHJlZmNvdW50Iik6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgYiA9IGFycmF5LmFycmF5KCdCJywgcmFuZ2UoNjQpKQorICAgICAgICAgICAgcmMgPSBzeXMuZ2V0cmVmY291bnQoMTApCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgYiA9IGFycmF5LmFycmF5KCdCJywgcmFuZ2UoNjQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgc3lzLmdldHJlZmNvdW50KDEwKSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3dpdGhfa3dhcmdzKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAjMTQ4NjY2MyAtLSB0aGlzIHVzZWQgdG8gZXJyb25lb3VzbHkgcmFpc2UgYSBUeXBlRXJyb3IKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICcnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBBcnJheVN1YmNsYXNzV2l0aEt3YXJncygnYicsIG5ld2FyZz0xKQorCisKK2NsYXNzIFN0cmluZ1Rlc3QoQmFzZVRlc3QpOgorCisgICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKKyAgICAgICAgc3VwZXIoU3RyaW5nVGVzdCwgc2VsZikudGVzdF9zZXRpdGVtKCkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fLCAwLCBzZWxmLmV4YW1wbGVbOjJdKQorCitjbGFzcyBDaGFyYWN0ZXJUZXN0KFN0cmluZ1Rlc3QpOgorICAgIHR5cGVjb2RlID0gJ2MnCisgICAgZXhhbXBsZSA9ICdceDAxYXpBWlx4MDBceGZlJworICAgIHNtYWxsZXJleGFtcGxlID0gJ1x4MDFhekFZXHgwMFx4ZmUnCisgICAgYmlnZ2VyZXhhbXBsZSA9ICdceDAxYXpBWlx4MDBceGZmJworICAgIG91dHNpZGUgPSAnXHgzMycKKyAgICBtaW5pdGVtc2l6ZSA9IDEKKworICAgIGRlZiB0ZXN0X3N1YmJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgY2xhc3MgRWRpdGFibGVTdHJpbmcoYXJyYXkuYXJyYXkpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcnJheS5hcnJheS5fX25ld19fKGNscywgJ2MnLCBzKQorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcywgY29sb3I9J2JsdWUnKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbG9yID0gY29sb3IKKworICAgICAgICAgICAgZGVmIHN0cmlwKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGZbOl0gPSBhcnJheS5hcnJheSgnYycsIHNlbGYudG9zdHJpbmcoKS5zdHJpcCgpKQorCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdFZGl0YWJsZVN0cmluZyglciknICUgc2VsZi50b3N0cmluZygpCisKKyAgICAgICAgcyA9IEVkaXRhYmxlU3RyaW5nKCJcdHRlc3RcclxuIikKKyAgICAgICAgcy5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy50b3N0cmluZygpLCAidGVzdCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvbG9yLCAiYmx1ZSIpCisgICAgICAgIHMuY29sb3IgPSAicmVkIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY29sb3IsICJyZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuX19kaWN0X18ua2V5cygpLCBbImNvbG9yIl0pCisKKyAgICBkZWYgdGVzdF9ub3VuaWNvZGUoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuZnJvbXVuaWNvZGUsIHVuaWNvZGUoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLnRvdW5pY29kZSkKKwordGVzdHMuYXBwZW5kKENoYXJhY3RlclRlc3QpCisKK2lmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgY2xhc3MgVW5pY29kZVRlc3QoU3RyaW5nVGVzdCk6CisgICAgICAgIHR5cGVjb2RlID0gJ3UnCisgICAgICAgIGV4YW1wbGUgPSB1bmljb2RlKHInXHgwMVx1MjYzYVx4MDBcdWZlZmYnLCAndW5pY29kZS1lc2NhcGUnKQorICAgICAgICBzbWFsbGVyZXhhbXBsZSA9IHVuaWNvZGUocidceDAxXHUyNjNhXHgwMFx1ZmVmZScsICd1bmljb2RlLWVzY2FwZScpCisgICAgICAgIGJpZ2dlcmV4YW1wbGUgPSB1bmljb2RlKHInXHgwMVx1MjYzYVx4MDFcdWZlZmYnLCAndW5pY29kZS1lc2NhcGUnKQorICAgICAgICBvdXRzaWRlID0gdW5pY29kZSgnXHgzMycpCisgICAgICAgIG1pbml0ZW1zaXplID0gMgorCisgICAgICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFycmF5LmFycmF5LCAnYicsIHVuaWNvZGUoJ2ZvbycsICdhc2NpaScpKQorCisgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ3UnLCB1bmljb2RlKHInXHhhMFx4YzJcdTEyMzQnLCAndW5pY29kZS1lc2NhcGUnKSkKKyAgICAgICAgICAgIGEuZnJvbXVuaWNvZGUodW5pY29kZSgnICcsICdhc2NpaScpKQorICAgICAgICAgICAgYS5mcm9tdW5pY29kZSh1bmljb2RlKCcnLCAnYXNjaWknKSkKKyAgICAgICAgICAgIGEuZnJvbXVuaWNvZGUodW5pY29kZSgnJywgJ2FzY2lpJykpCisgICAgICAgICAgICBhLmZyb211bmljb2RlKHVuaWNvZGUocidceDExYWJjXHhmZlx1MTIzNCcsICd1bmljb2RlLWVzY2FwZScpKQorICAgICAgICAgICAgcyA9IGEudG91bmljb2RlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICB1bmljb2RlKHInXHhhMFx4YzJcdTEyMzQgXHgxMWFiY1x4ZmZcdTEyMzQnLCAndW5pY29kZS1lc2NhcGUnKQorICAgICAgICAgICAgKQorCisgICAgICAgICAgICBzID0gdW5pY29kZShyJ1x4MDA9IlwnYVxcYlx4ODBceGZmXHUwMDAwXHUwMDAxXHUxMjM0JywgJ3VuaWNvZGUtZXNjYXBlJykKKyAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheSgndScsIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlcHIoYSksCisgICAgICAgICAgICAgICAgciIiImFycmF5KCd1JywgdSdceDAwPSJcJ2FcXGJceDgwXHhmZlx4MDBceDAxXHUxMjM0JykiIiIKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmZyb211bmljb2RlKQorCisgICAgdGVzdHMuYXBwZW5kKFVuaWNvZGVUZXN0KQorCitjbGFzcyBOdW1iZXJUZXN0KEJhc2VUZXN0KToKKworICAgIGRlZiB0ZXN0X2V4dHNsaWNlKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Ol0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6OjJdLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbMCwyLDRdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzE6OjJdLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbMSwzXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Oi0xXSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgWzQsMywyLDEsMF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjotMl0sIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFs0LDIsMF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMzo6LTJdLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbMywxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMTAwOjEwMDpdLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTAwOi0xMDA6LTFdLCBhWzo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTEwMEw6MTAwTDoyTF0sIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFswLDIsNF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTAwMDoyMDAwOjJdLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMTAwMDotMjAwMDotMl0sIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFtdKSkKKworICAgIGRlZiB0ZXN0X2RlbHNsaWNlKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoNSkpCisgICAgICAgIGRlbCBhWzo6Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbMSwzXSkpCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCByYW5nZSg1KSkKKyAgICAgICAgZGVsIGFbMTo6Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbMCwyLDRdKSkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHJhbmdlKDUpKQorICAgICAgICBkZWwgYVsxOjotMl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbMCwyLDMsNF0pKQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoMTApKQorICAgICAgICBkZWwgYVs6OjEwMDBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgWzEsMiwzLDQsNSw2LDcsOCw5XSkpCisgICAgICAgICMgdGVzdCBpc3N1ZTc3ODgKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHJhbmdlKDEwKSkKKyAgICAgICAgZGVsIGFbOTo6MTw8MzMzXQorCisgICAgZGVmIHRlc3RfYXNzaWdubWVudChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHJhbmdlKDEwKSkKKyAgICAgICAgYVs6OjJdID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgWzQyXSo1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFs0MiwgMSwgNDIsIDMsIDQyLCA1LCA0MiwgNywgNDIsIDldKSkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHJhbmdlKDEwKSkKKyAgICAgICAgYVs6Oi00XSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFsxMF0qMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbMCwgMTAsIDIsIDMsIDQsIDEwLCA2LCA3LCA4ICwxMF0pKQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoNCkpCisgICAgICAgIGFbOjotMV0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgWzMsIDIsIDEsIDBdKSkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHJhbmdlKDEwKSkKKyAgICAgICAgYiA9IGFbOl0KKyAgICAgICAgYyA9IGFbOl0KKyAgICAgICAgaW5zID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoMikpCisgICAgICAgIGFbMjozXSA9IGlucworICAgICAgICBiW3NsaWNlKDIsMyldID0gaW5zCisgICAgICAgIGNbMjozOl0gPSBpbnMKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbmNvbnRhaW5zKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYSksIHJhbmdlKDEwKSkKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFsyMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMV0gaW4gYSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzBdIG5vdCBpbiBhLCBUcnVlKQorCisgICAgZGVmIGNoZWNrX292ZXJmbG93KHNlbGYsIGxvd2VyLCB1cHBlcik6CisgICAgICAgICMgbWV0aG9kIHRvIGJlIHVzZWQgYnkgc3ViY2xhc3NlcworCisgICAgICAgICMgc2hvdWxkIG5vdCBvdmVyZmxvdyBhc3NpZ25pbmcgbG93ZXIgbGltaXQKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFtsb3dlcl0pCisgICAgICAgIGFbMF0gPSBsb3dlcgorICAgICAgICAjIHNob3VsZCBvdmVyZmxvdyBhc3NpZ25pbmcgbGVzcyB0aGFuIGxvd2VyIGxpbWl0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGFycmF5LmFycmF5LCBzZWxmLnR5cGVjb2RlLCBbbG93ZXItMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGEuX19zZXRpdGVtX18sIDAsIGxvd2VyLTEpCisgICAgICAgICMgc2hvdWxkIG5vdCBvdmVyZmxvdyBhc3NpZ25pbmcgdXBwZXIgbGltaXQKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFt1cHBlcl0pCisgICAgICAgIGFbMF0gPSB1cHBlcgorICAgICAgICAjIHNob3VsZCBvdmVyZmxvdyBhc3NpZ25pbmcgbW9yZSB0aGFuIHVwcGVyIGxpbWl0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGFycmF5LmFycmF5LCBzZWxmLnR5cGVjb2RlLCBbdXBwZXIrMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGEuX19zZXRpdGVtX18sIDAsIHVwcGVyKzEpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgdHlwZWNvZGUgPSBzZWxmLnR5cGVjb2RlCisgICAgICAgIGNsYXNzIEV4YWdnZXJhdGluZ0FycmF5KGFycmF5LmFycmF5KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnb2Zmc2V0J10KKworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCB0eXBlY29kZSwgZGF0YSwgb2Zmc2V0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkuYXJyYXkuX19uZXdfXyhjbHMsIHR5cGVjb2RlLCBkYXRhKQorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZWNvZGUsIGRhdGEsIG9mZnNldCk6CisgICAgICAgICAgICAgICAgc2VsZi5vZmZzZXQgPSBvZmZzZXQKKworICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcnJheS5hcnJheS5fX2dldGl0ZW1fXyhzZWxmLCBpKSArIHNlbGYub2Zmc2V0CisKKyAgICAgICAgYSA9IEV4YWdnZXJhdGluZ0FycmF5KHNlbGYudHlwZWNvZGUsIFszLCA2LCA3LCAxMV0sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RW50cnlFcXVhbChhWzBdLCA3KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBhLCAiY29sb3IiLCAiYmx1ZSIpCisKK2NsYXNzIFNpZ25lZE51bWJlclRlc3QoTnVtYmVyVGVzdCk6CisgICAgZXhhbXBsZSA9IFstMSwgMCwgMSwgNDIsIDB4N2ZdCisgICAgc21hbGxlcmV4YW1wbGUgPSBbLTEsIDAsIDEsIDQyLCAweDdlXQorICAgIGJpZ2dlcmV4YW1wbGUgPSBbLTEsIDAsIDEsIDQzLCAweDdmXQorICAgIG91dHNpZGUgPSAyMworCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICBsb3dlciA9IC0xICogbG9uZyhwb3coMiwgYS5pdGVtc2l6ZSAqIDggLSAxKSkKKyAgICAgICAgdXBwZXIgPSBsb25nKHBvdygyLCBhLml0ZW1zaXplICogOCAtIDEpKSAtIDFMCisgICAgICAgIHNlbGYuY2hlY2tfb3ZlcmZsb3cobG93ZXIsIHVwcGVyKQorCitjbGFzcyBVbnNpZ25lZE51bWJlclRlc3QoTnVtYmVyVGVzdCk6CisgICAgZXhhbXBsZSA9IFswLCAxLCAxNywgMjMsIDQyLCAweGZmXQorICAgIHNtYWxsZXJleGFtcGxlID0gWzAsIDEsIDE3LCAyMywgNDIsIDB4ZmVdCisgICAgYmlnZ2VyZXhhbXBsZSA9IFswLCAxLCAxNywgMjMsIDQzLCAweGZmXQorICAgIG91dHNpZGUgPSAweGFhCisKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgIGxvd2VyID0gMAorICAgICAgICB1cHBlciA9IGxvbmcocG93KDIsIGEuaXRlbXNpemUgKiA4KSkgLSAxTAorICAgICAgICBzZWxmLmNoZWNrX292ZXJmbG93KGxvd2VyLCB1cHBlcikKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfc2l6ZW9mX3dpdGhfYnVmZmVyKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBiYXNlc2l6ZSA9IHRlc3Rfc3VwcG9ydC5jYWxjdm9ianNpemUoJzRQJykKKyAgICAgICAgYnVmZmVyX3NpemUgPSBhLmJ1ZmZlcl9pbmZvKClbMV0gKiBhLml0ZW1zaXplCisgICAgICAgIHRlc3Rfc3VwcG9ydC5jaGVja19zaXplb2Yoc2VsZiwgYSwgYmFzZXNpemUgKyBidWZmZXJfc2l6ZSkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfc2l6ZW9mX3dpdGhvdXRfYnVmZmVyKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgYmFzZXNpemUgPSB0ZXN0X3N1cHBvcnQuY2FsY3ZvYmpzaXplKCc0UCcpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5jaGVja19zaXplb2Yoc2VsZiwgYSwgYmFzZXNpemUpCisKKworY2xhc3MgQnl0ZVRlc3QoU2lnbmVkTnVtYmVyVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnYicKKyAgICBtaW5pdGVtc2l6ZSA9IDEKK3Rlc3RzLmFwcGVuZChCeXRlVGVzdCkKKworY2xhc3MgVW5zaWduZWRCeXRlVGVzdChVbnNpZ25lZE51bWJlclRlc3QpOgorICAgIHR5cGVjb2RlID0gJ0InCisgICAgbWluaXRlbXNpemUgPSAxCit0ZXN0cy5hcHBlbmQoVW5zaWduZWRCeXRlVGVzdCkKKworY2xhc3MgU2hvcnRUZXN0KFNpZ25lZE51bWJlclRlc3QpOgorICAgIHR5cGVjb2RlID0gJ2gnCisgICAgbWluaXRlbXNpemUgPSAyCit0ZXN0cy5hcHBlbmQoU2hvcnRUZXN0KQorCitjbGFzcyBVbnNpZ25lZFNob3J0VGVzdChVbnNpZ25lZE51bWJlclRlc3QpOgorICAgIHR5cGVjb2RlID0gJ0gnCisgICAgbWluaXRlbXNpemUgPSAyCit0ZXN0cy5hcHBlbmQoVW5zaWduZWRTaG9ydFRlc3QpCisKK2NsYXNzIEludFRlc3QoU2lnbmVkTnVtYmVyVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnaScKKyAgICBtaW5pdGVtc2l6ZSA9IDIKK3Rlc3RzLmFwcGVuZChJbnRUZXN0KQorCitjbGFzcyBVbnNpZ25lZEludFRlc3QoVW5zaWduZWROdW1iZXJUZXN0KToKKyAgICB0eXBlY29kZSA9ICdJJworICAgIG1pbml0ZW1zaXplID0gMgordGVzdHMuYXBwZW5kKFVuc2lnbmVkSW50VGVzdCkKKworY2xhc3MgTG9uZ1Rlc3QoU2lnbmVkTnVtYmVyVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnbCcKKyAgICBtaW5pdGVtc2l6ZSA9IDQKK3Rlc3RzLmFwcGVuZChMb25nVGVzdCkKKworY2xhc3MgVW5zaWduZWRMb25nVGVzdChVbnNpZ25lZE51bWJlclRlc3QpOgorICAgIHR5cGVjb2RlID0gJ0wnCisgICAgbWluaXRlbXNpemUgPSA0Cit0ZXN0cy5hcHBlbmQoVW5zaWduZWRMb25nVGVzdCkKKworY2xhc3MgRlBUZXN0KE51bWJlclRlc3QpOgorICAgIGV4YW1wbGUgPSBbLTQyLjAsIDAsIDQyLCAxZTUsIC0xZTEwXQorICAgIHNtYWxsZXJleGFtcGxlID0gWy00Mi4wLCAwLCA0MiwgMWU1LCAtMmUxMF0KKyAgICBiaWdnZXJleGFtcGxlID0gWy00Mi4wLCAwLCA0MiwgMWU1LCAxZTEwXQorICAgIG91dHNpZGUgPSAyMworCisgICAgZGVmIGFzc2VydEVudHJ5RXF1YWwoc2VsZiwgZW50cnkxLCBlbnRyeTIpOgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGVudHJ5MSwgZW50cnkyKQorCisgICAgZGVmIHRlc3RfYnl0ZXN3YXAoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5ieXRlc3dhcCwgNDIpCisgICAgICAgIGlmIGEuaXRlbXNpemUgaW4gKDEsIDIsIDQsIDgpOgorICAgICAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgICAgIGIuYnl0ZXN3YXAoKQorICAgICAgICAgICAgaWYgYS5pdGVtc2l6ZT09MToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgT24gYWxwaGFzIHRyZWF0aW5nIHRoZSBieXRlIHN3YXBwZWQgYml0IHBhdHRlcnMgYXMKKyAgICAgICAgICAgICAgICAjIGZsb2F0cy9kb3VibGVzIHJlc3VsdHMgaW4gZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9ucworICAgICAgICAgICAgICAgICMgPT4gY29tcGFyZSB0aGUgOGJpdCBzdHJpbmcgdmFsdWVzIGluc3RlYWQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEudG9zdHJpbmcoKSwgYi50b3N0cmluZygpKQorICAgICAgICAgICAgYi5ieXRlc3dhcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKK2NsYXNzIEZsb2F0VGVzdChGUFRlc3QpOgorICAgIHR5cGVjb2RlID0gJ2YnCisgICAgbWluaXRlbXNpemUgPSA0Cit0ZXN0cy5hcHBlbmQoRmxvYXRUZXN0KQorCitjbGFzcyBEb3VibGVUZXN0KEZQVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnZCcKKyAgICBtaW5pdGVtc2l6ZSA9IDgKKworICAgIGRlZiB0ZXN0X2FsbG9jX292ZXJmbG93KHNlbGYpOgorICAgICAgICBmcm9tIHN5cyBpbXBvcnQgbWF4c2l6ZQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ2QnLCBbLTFdKjY1NTM2KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhICo9IG1heHNpemUvLzY1NTM2ICsgMQorICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkFycmF5IG9mIHNpemUgPiBtYXhzaXplIGNyZWF0ZWQgLSBNZW1vcnlFcnJvciBleHBlY3RlZCIpCisgICAgICAgIGIgPSBhcnJheS5hcnJheSgnZCcsIFsgMi43MTgyODE4MywgMy4xNDE1OTI2NSwgLTFdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiICogKG1heHNpemUvLzMgKyAxKQorICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkFycmF5IG9mIHNpemUgPiBtYXhzaXplIGNyZWF0ZWQgLSBNZW1vcnlFcnJvciBleHBlY3RlZCIpCisKK3Rlc3RzLmFwcGVuZChEb3VibGVUZXN0KQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgaW1wb3J0IHN5cworCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHByaW50IGNvdW50cworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hc2NpaV9mb3JtYXRkLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYXNjaWlfZm9ybWF0ZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE2MTZkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYXNjaWlfZm9ybWF0ZC5weQpAQCAtMCwwICsxLDU4IEBACisjIFB5T1NfYXNjaWlfZm9ybWF0ZCBpcyBkZXByZWNhdGVkIGFuZCBub3QgY2FsbGVkIGZyb20gYW55d2hlcmUgaW4KKyMgIFB5dGhvbiBpdHNlbGYuIFNvIHRoaXMgbW9kdWxlIGlzIHRoZSBvbmx5IHBsYWNlIGl0IGdldHMgdGVzdGVkLgorIyBUZXN0IHRoYXQgaXQgd29ya3MsIGFuZCB0ZXN0IHRoYXQgaXQncyBkZXByZWNhdGVkLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKKworIyBTa2lwIHRlc3RzIGlmIF9jdHlwZXMgbW9kdWxlIGRvZXMgbm90IGV4aXN0CitpbXBvcnRfbW9kdWxlKCdfY3R5cGVzJykKKworZnJvbSBjdHlwZXMgaW1wb3J0IHB5dGhvbmFwaSwgY3JlYXRlX3N0cmluZ19idWZmZXIsIHNpemVvZiwgYnlyZWYsIGNfZG91YmxlCitQeU9TX2FzY2lpX2Zvcm1hdGQgPSBweXRob25hcGkuUHlPU19hc2NpaV9mb3JtYXRkCisKKworY2xhc3MgRm9ybWF0RGVwcmVjYXRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIGJ1ZiA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKCcgJyAqIDEwMCkKKworICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnUHlPU19hc2NpaV9mb3JtYXRkIGlzIGRlcHJlY2F0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIFB5T1NfYXNjaWlfZm9ybWF0ZChieXJlZihidWYpLCBzaXplb2YoYnVmKSwgJyUrLjEwZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY19kb3VibGUoMTAuMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgJysxMC4wMDAwMDAwMDAwJykKKworCitjbGFzcyBGb3JtYXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBlbnN1cmUgdGhhdCwgZm9yIHRoZSByZXN0cmljdGVkIHNldCBvZiBmb3JtYXQgY29kZXMsCisgICAgIyAlLWZvcm1hdHRpbmcgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZXMgb3MgUHlPU19hc2NpaV9mb3JtYXRkCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICBidWYgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcignICcgKiAxMDApCisKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoJyVmJywgMTAwLjApLAorICAgICAgICAgICAgKCclZycsIDEwMC4wKSwKKyAgICAgICAgICAgICgnJSNnJywgMTAwLjApLAorICAgICAgICAgICAgKCclIy4yZycsIDEwMC4wKSwKKyAgICAgICAgICAgICgnJSMuMmcnLCAxMjMuNDU2NyksCisgICAgICAgICAgICAoJyUjLjJnJywgMS4yMzQ1NjdlMjAwKSwKKyAgICAgICAgICAgICgnJWUnLCAxLjIzNDU2N2UyMDApLAorICAgICAgICAgICAgKCclZScsIDEuMjM0KSwKKyAgICAgICAgICAgICgnJStlJywgMS4yMzQpLAorICAgICAgICAgICAgKCclLWUnLCAxLjIzNCksCisgICAgICAgICAgICBdCisKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJ1B5T1NfYXNjaWlfZm9ybWF0ZCBpcyBkZXByZWNhdGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBmb3IgZm9ybWF0LCB2YWwgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgUHlPU19hc2NpaV9mb3JtYXRkKGJ5cmVmKGJ1ZiksIHNpemVvZihidWYpLCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZG91YmxlKHZhbCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsIGZvcm1hdCAlIHZhbCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEZvcm1hdERlcHJlY2F0aW9uVGVzdHMsIEZvcm1hdFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hc3QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY4MDE5NwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FzdC5weQpAQCAtMCwwICsxLDU4MCBAQAoraW1wb3J0IHN5cywgaXRlcnRvb2xzLCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBhc3QKKworZGVmIHRvX3R1cGxlKHQpOgorICAgIGlmIHQgaXMgTm9uZSBvciBpc2luc3RhbmNlKHQsIChiYXNlc3RyaW5nLCBpbnQsIGxvbmcsIGNvbXBsZXgpKToKKyAgICAgICAgcmV0dXJuIHQKKyAgICBlbGlmIGlzaW5zdGFuY2UodCwgbGlzdCk6CisgICAgICAgIHJldHVybiBbdG9fdHVwbGUoZSkgZm9yIGUgaW4gdF0KKyAgICByZXN1bHQgPSBbdC5fX2NsYXNzX18uX19uYW1lX19dCisgICAgaWYgaGFzYXR0cih0LCAnbGluZW5vJykgYW5kIGhhc2F0dHIodCwgJ2NvbF9vZmZzZXQnKToKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgodC5saW5lbm8sIHQuY29sX29mZnNldCkpCisgICAgaWYgdC5fZmllbGRzIGlzIE5vbmU6CisgICAgICAgIHJldHVybiB0dXBsZShyZXN1bHQpCisgICAgZm9yIGYgaW4gdC5fZmllbGRzOgorICAgICAgICByZXN1bHQuYXBwZW5kKHRvX3R1cGxlKGdldGF0dHIodCwgZikpKQorICAgIHJldHVybiB0dXBsZShyZXN1bHQpCisKKworIyBUaGVzZSB0ZXN0cyBhcmUgY29tcGlsZWQgdGhyb3VnaCAiZXhlYyIKKyMgVGhlcmUgc2hvdWxkIGJlIGF0bGVhc3Qgb25lIHRlc3QgcGVyIHN0YXRlbWVudAorZXhlY190ZXN0cyA9IFsKKyAgICAjIE5vbmUKKyAgICAiTm9uZSIsCisgICAgIyBGdW5jdGlvbkRlZgorICAgICJkZWYgZigpOiBwYXNzIiwKKyAgICAjIEZ1bmN0aW9uRGVmIHdpdGggYXJnCisgICAgImRlZiBmKGEpOiBwYXNzIiwKKyAgICAjIEZ1bmN0aW9uRGVmIHdpdGggYXJnIGFuZCBkZWZhdWx0IHZhbHVlCisgICAgImRlZiBmKGE9MCk6IHBhc3MiLAorICAgICMgRnVuY3Rpb25EZWYgd2l0aCB2YXJhcmdzCisgICAgImRlZiBmKCphcmdzKTogcGFzcyIsCisgICAgIyBGdW5jdGlvbkRlZiB3aXRoIGt3YXJncworICAgICJkZWYgZigqKmt3YXJncyk6IHBhc3MiLAorICAgICMgRnVuY3Rpb25EZWYgd2l0aCBhbGwga2luZCBvZiBhcmdzCisgICAgImRlZiBmKGEsIGI9MSwgYz1Ob25lLCBkPVtdLCBlPXt9LCAqYXJncywgKiprd2FyZ3MpOiBwYXNzIiwKKyAgICAjIENsYXNzRGVmCisgICAgImNsYXNzIEM6cGFzcyIsCisgICAgIyBDbGFzc0RlZiwgbmV3IHN0eWxlIGNsYXNzCisgICAgImNsYXNzIEMob2JqZWN0KTogcGFzcyIsCisgICAgIyBSZXR1cm4KKyAgICAiZGVmIGYoKTpyZXR1cm4gMSIsCisgICAgIyBEZWxldGUKKyAgICAiZGVsIHYiLAorICAgICMgQXNzaWduCisgICAgInYgPSAxIiwKKyAgICAjIEF1Z0Fzc2lnbgorICAgICJ2ICs9IDEiLAorICAgICMgUHJpbnQKKyAgICAicHJpbnQgPj5mLCAxLCAiLAorICAgICMgRm9yCisgICAgImZvciB2IGluIHY6cGFzcyIsCisgICAgIyBXaGlsZQorICAgICJ3aGlsZSB2OnBhc3MiLAorICAgICMgSWYKKyAgICAiaWYgdjpwYXNzIiwKKyAgICAjIFJhaXNlCisgICAgInJhaXNlIEV4Y2VwdGlvbiwgJ3N0cmluZyciLAorICAgICMgVHJ5RXhjZXB0CisgICAgInRyeTpcbiAgcGFzc1xuZXhjZXB0IEV4Y2VwdGlvbjpcbiAgcGFzcyIsCisgICAgIyBUcnlGaW5hbGx5CisgICAgInRyeTpcbiAgcGFzc1xuZmluYWxseTpcbiAgcGFzcyIsCisgICAgIyBBc3NlcnQKKyAgICAiYXNzZXJ0IHYiLAorICAgICMgSW1wb3J0CisgICAgImltcG9ydCBzeXMiLAorICAgICMgSW1wb3J0RnJvbQorICAgICJmcm9tIHN5cyBpbXBvcnQgdiIsCisgICAgIyBFeGVjCisgICAgImV4ZWMgJ3YnIiwKKyAgICAjIEdsb2JhbAorICAgICJnbG9iYWwgdiIsCisgICAgIyBFeHByCisgICAgIjEiLAorICAgICMgUGFzcywKKyAgICAicGFzcyIsCisgICAgIyBCcmVhaworICAgICJicmVhayIsCisgICAgIyBDb250aW51ZQorICAgICJjb250aW51ZSIsCisgICAgIyBmb3Igc3RhdGVtZW50cyB3aXRoIG5ha2VkIHR1cGxlcyAoc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2NzA0KQorICAgICJmb3IgYSxiIGluIGM6IHBhc3MiLAorICAgICJbKGEsYikgZm9yIGEsYiBpbiBjXSIsCisgICAgIigoYSxiKSBmb3IgYSxiIGluIGMpIiwKKyAgICAiKChhLGIpIGZvciAoYSxiKSBpbiBjKSIsCisgICAgIyBNdWx0aWxpbmUgZ2VuZXJhdG9yIGV4cHJlc3Npb24gKHRlc3QgZm9yIC5saW5lbm8gJiAuY29sX29mZnNldCkKKyAgICAiIiIoCisgICAgKAorICAgIEFhCisgICAgLAorICAgICAgIEJiCisgICAgKQorICAgIGZvcgorICAgIEFhCisgICAgLAorICAgIEJiIGluIENjCisgICAgKSIiIiwKKyAgICAjIGRpY3Rjb21wCisgICAgInthIDogYiBmb3IgdyBpbiB4IGZvciBtIGluIHAgaWYgZ30iLAorICAgICMgZGljdGNvbXAgd2l0aCBuYWtlZCB0dXBsZQorICAgICJ7YSA6IGIgZm9yIHYsdyBpbiB4fSIsCisgICAgIyBzZXRjb21wCisgICAgIntyIGZvciBsIGluIHggaWYgZ30iLAorICAgICMgc2V0Y29tcCB3aXRoIG5ha2VkIHR1cGxlCisgICAgIntyIGZvciBsLG0gaW4geH0iLAorXQorCisjIFRoZXNlIGFyZSBjb21waWxlZCB0aHJvdWdoICJzaW5nbGUiCisjIGJlY2F1c2Ugb2Ygb3ZlcmxhcCB3aXRoICJldmFsIiwgaXQganVzdCB0ZXN0cyB3aGF0CisjIGNhbid0IGJlIHRlc3RlZCB3aXRoICJldmFsIgorc2luZ2xlX3Rlc3RzID0gWworICAgICIxKzIiCitdCisKKyMgVGhlc2UgYXJlIGNvbXBpbGVkIHRocm91Z2ggImV2YWwiCisjIEl0IHNob3VsZCB0ZXN0IGFsbCBleHByZXNzaW9ucworZXZhbF90ZXN0cyA9IFsKKyAgIyBOb25lCisgICJOb25lIiwKKyAgIyBCb29sT3AKKyAgImEgYW5kIGIiLAorICAjIEJpbk9wCisgICJhICsgYiIsCisgICMgVW5hcnlPcAorICAibm90IHYiLAorICAjIExhbWJkYQorICAibGFtYmRhOk5vbmUiLAorICAjIERpY3QKKyAgInsgMToyIH0iLAorICAjIEVtcHR5IGRpY3QKKyAgInt9IiwKKyAgIyBTZXQKKyAgIntOb25lLH0iLAorICAjIE11bHRpbGluZSBkaWN0ICh0ZXN0IGZvciAubGluZW5vICYgLmNvbF9vZmZzZXQpCisgICIiInsKKyAgICAgIDEKKyAgICAgICAgOgorICAgICAgICAgIDIKKyAgICAgfSIiIiwKKyAgIyBMaXN0Q29tcAorICAiW2EgZm9yIGIgaW4gYyBpZiBkXSIsCisgICMgR2VuZXJhdG9yRXhwCisgICIoYSBmb3IgYiBpbiBjIGlmIGQpIiwKKyAgIyBZaWVsZCAtIHlpZWxkIGV4cHJlc3Npb25zIGNhbid0IHdvcmsgb3V0c2lkZSBhIGZ1bmN0aW9uCisgICMKKyAgIyBDb21wYXJlCisgICIxIDwgMiA8IDMiLAorICAjIENhbGwKKyAgImYoMSwyLGM9MywqZCwqKmUpIiwKKyAgIyBSZXByCisgICJgdmAiLAorICAjIE51bQorICAiMTBMIiwKKyAgIyBTdHIKKyAgIidzdHJpbmcnIiwKKyAgIyBBdHRyaWJ1dGUKKyAgImEuYiIsCisgICMgU3Vic2NyaXB0CisgICJhW2I6Y10iLAorICAjIE5hbWUKKyAgInYiLAorICAjIExpc3QKKyAgIlsxLDIsM10iLAorICAjIEVtcHR5IGxpc3QKKyAgIltdIiwKKyAgIyBUdXBsZQorICAiMSwyLDMiLAorICAjIFR1cGxlCisgICIoMSwyLDMpIiwKKyAgIyBFbXB0eSB0dXBsZQorICAiKCkiLAorICAjIENvbWJpbmF0aW9uCisgICJhLmIuYy5kKGEuYlsxOjJdKSIsCisKK10KKworIyBUT0RPOiBleHByX2NvbnRleHQsIHNsaWNlLCBib29sb3AsIG9wZXJhdG9yLCB1bmFyeW9wLCBjbXBvcCwgY29tcHJlaGVuc2lvbgorIyBleGNlcHRoYW5kbGVyLCBhcmd1bWVudHMsIGtleXdvcmRzLCBhbGlhcworCitjbGFzcyBBU1RfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9hc3NlcnRUcnVlb3JkZXIoc2VsZiwgYXN0X25vZGUsIHBhcmVudF9wb3MpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhc3Rfbm9kZSwgYXN0LkFTVCkgb3IgYXN0X25vZGUuX2ZpZWxkcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXN0X25vZGUsIChhc3QuZXhwciwgYXN0LnN0bXQsIGFzdC5leGNlcHRoYW5kbGVyKSk6CisgICAgICAgICAgICBub2RlX3BvcyA9IChhc3Rfbm9kZS5saW5lbm8sIGFzdF9ub2RlLmNvbF9vZmZzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZV9wb3MgPj0gcGFyZW50X3BvcykKKyAgICAgICAgICAgIHBhcmVudF9wb3MgPSAoYXN0X25vZGUubGluZW5vLCBhc3Rfbm9kZS5jb2xfb2Zmc2V0KQorICAgICAgICBmb3IgbmFtZSBpbiBhc3Rfbm9kZS5fZmllbGRzOgorICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKGFzdF9ub2RlLCBuYW1lKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICAgICAgZm9yIGNoaWxkIGluIHZhbHVlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIoY2hpbGQsIHBhcmVudF9wb3MpCisgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcih2YWx1ZSwgcGFyZW50X3BvcykKKworICAgIGRlZiB0ZXN0X0FTVF9vYmplY3RzKHNlbGYpOgorICAgICAgICB4ID0gYXN0LkFTVCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCAoKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHgudmFyYXJnCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICB4LmZvb2JhciA9IDIxCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBhc3QuQVNUKGxpbmVubz0yKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICMgIl9hc3QuQVNUIGNvbnN0cnVjdG9yIHRha2VzIDAgcG9zaXRpb25hbCBhcmd1bWVudHMiCisgICAgICAgICAgICBhc3QuQVNUKDIpCisKKyAgICBkZWYgdGVzdF9zbmlwcGV0cyhzZWxmKToKKyAgICAgICAgZm9yIGlucHV0LCBvdXRwdXQsIGtpbmQgaW4gKChleGVjX3Rlc3RzLCBleGVjX3Jlc3VsdHMsICJleGVjIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlX3Rlc3RzLCBzaW5nbGVfcmVzdWx0cywgInNpbmdsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2YWxfdGVzdHMsIGV2YWxfcmVzdWx0cywgImV2YWwiKSk6CisgICAgICAgICAgICBmb3IgaSwgbyBpbiBpdGVydG9vbHMuaXppcChpbnB1dCwgb3V0cHV0KToKKyAgICAgICAgICAgICAgICBhc3RfdHJlZSA9IGNvbXBpbGUoaSwgIj8iLCBraW5kLCBhc3QuUHlDRl9PTkxZX0FTVCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRvX3R1cGxlKGFzdF90cmVlKSwgbykKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIoYXN0X3RyZWUsICgwLCAwKSkKKworICAgIGRlZiB0ZXN0X3NsaWNlKHNlbGYpOgorICAgICAgICBzbGMgPSBhc3QucGFyc2UoInhbOjpdIikuYm9keVswXS52YWx1ZS5zbGljZQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzbGMudXBwZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNsYy5sb3dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNsYy5zdGVwLCBhc3QuTmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGMuc3RlcC5pZCwgIk5vbmUiKQorCisgICAgZGVmIHRlc3RfZnJvbV9pbXBvcnQoc2VsZik6CisgICAgICAgIGltID0gYXN0LnBhcnNlKCJmcm9tIC4gaW1wb3J0IHkiKS5ib2R5WzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGltLm1vZHVsZSkKKworICAgIGRlZiB0ZXN0X25vbl9pbnRlcm5lZF9mdXR1cmVfZnJvbV9hc3Qoc2VsZik6CisgICAgICAgIG1vZCA9IGFzdC5wYXJzZSgiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2QuYm9keVswXSwgYXN0LkltcG9ydEZyb20pCisgICAgICAgIG1vZC5ib2R5WzBdLm1vZHVsZSA9ICIgX19mdXR1cmVfXyAiLnN0cmlwKCkKKyAgICAgICAgY29tcGlsZShtb2QsICI8dGVzdD4iLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9iYXNlX2NsYXNzZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGFzdC5Gb3IsIGFzdC5zdG10KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYXN0Lk5hbWUsIGFzdC5leHByKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYXN0LnN0bXQsIGFzdC5BU1QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhc3QuZXhwciwgYXN0LkFTVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGFzdC5jb21wcmVoZW5zaW9uLCBhc3QuQVNUKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYXN0Lkd0LCBhc3QuQVNUKSkKKworICAgIGRlZiB0ZXN0X2ZpZWxkX2F0dHJfZXhpc3RlbmNlKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSwgaXRlbSBpbiBhc3QuX19kaWN0X18uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIHR5cGUpIGFuZCBuYW1lICE9ICdBU1QnIGFuZCBuYW1lWzBdLmlzdXBwZXIoKToKKyAgICAgICAgICAgICAgICB4ID0gaXRlbSgpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCBhc3QuQVNUKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHguX2ZpZWxkcyksIHR1cGxlKQorCisgICAgZGVmIHRlc3RfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICB4ID0gYXN0LmFyZ3VtZW50cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCAoJ2FyZ3MnLCAndmFyYXJnJywgJ2t3YXJnJywgJ2RlZmF1bHRzJykpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICB4LnZhcmFyZworCisgICAgICAgIHggPSBhc3QuYXJndW1lbnRzKDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YXJhcmcsIDIpCisKKyAgICBkZWYgdGVzdF9maWVsZF9hdHRyX3dyaXRhYmxlKHNlbGYpOgorICAgICAgICB4ID0gYXN0Lk51bSgpCisgICAgICAgICMgV2UgY2FuIGFzc2lnbiB0byBfZmllbGRzCisgICAgICAgIHguX2ZpZWxkcyA9IDY2NgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgNjY2KQorCisgICAgZGVmIHRlc3RfY2xhc3NhdHRycyhzZWxmKToKKyAgICAgICAgeCA9IGFzdC5OdW0oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgKCduJywpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgeC5uCisKKyAgICAgICAgeCA9IGFzdC5OdW0oNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5uLCA0MikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHgubGluZW5vCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICB4LmZvb2JhcgorCisgICAgICAgIHggPSBhc3QuTnVtKGxpbmVubz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGluZW5vLCAyKQorCisgICAgICAgIHggPSBhc3QuTnVtKDQyLCBsaW5lbm89MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmxpbmVubywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgnbicsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm4sIDQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXN0Lk51bSwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3QuTnVtLCAxLCAyLCBsaW5lbm89MCkKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgYm9keSA9IFthc3QuTnVtKDQyKV0KKyAgICAgICAgeCA9IGFzdC5Nb2R1bGUoYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmJvZHksIGJvZHkpCisKKyAgICBkZWYgdGVzdF9ub2RlY2xhc3NlcyhzZWxmKToKKyAgICAgICAgIyBaZXJvIGFyZ3VtZW50cyBjb25zdHJ1Y3RvciBleHBsaWNpdGVseSBhbGxvd2VkCisgICAgICAgIHggPSBhc3QuQmluT3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgKCdsZWZ0JywgJ29wJywgJ3JpZ2h0JykpCisKKyAgICAgICAgIyBSYW5kb20gYXR0cmlidXRlIGFsbG93ZWQgdG9vCisgICAgICAgIHguZm9vYmFyYmF6ID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vYmFyYmF6LCA1KQorCisgICAgICAgIG4xID0gYXN0Lk51bSgxKQorICAgICAgICBuMyA9IGFzdC5OdW0oMykKKyAgICAgICAgYWRkb3AgPSBhc3QuQWRkKCkKKyAgICAgICAgeCA9IGFzdC5CaW5PcChuMSwgYWRkb3AsIG4zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGVmdCwgbjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5vcCwgYWRkb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5yaWdodCwgbjMpCisKKyAgICAgICAgeCA9IGFzdC5CaW5PcCgxLCAyLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGVmdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm9wLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgucmlnaHQsIDMpCisKKyAgICAgICAgeCA9IGFzdC5CaW5PcCgxLCAyLCAzLCBsaW5lbm89MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmxlZnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5vcCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnJpZ2h0LCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGluZW5vLCAwKQorCisgICAgICAgICMgbm9kZSByYWlzZXMgZXhjZXB0aW9uIHdoZW4gbm90IGdpdmVuIGVub3VnaCBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3QuQmluT3AsIDEsIDIpCisgICAgICAgICMgbm9kZSByYWlzZXMgZXhjZXB0aW9uIHdoZW4gZ2l2ZW4gdG9vIG1hbnkgYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXN0LkJpbk9wLCAxLCAyLCAzLCA0KQorICAgICAgICAjIG5vZGUgcmFpc2VzIGV4Y2VwdGlvbiB3aGVuIG5vdCBnaXZlbiBlbm91Z2ggYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXN0LkJpbk9wLCAxLCAyLCBsaW5lbm89MCkKKyAgICAgICAgIyBub2RlIHJhaXNlcyBleGNlcHRpb24gd2hlbiBnaXZlbiB0b28gbWFueSBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3QuQmluT3AsIDEsIDIsIDMsIDQsIGxpbmVubz0wKQorCisgICAgICAgICMgY2FuIHNldCBhdHRyaWJ1dGVzIHRocm91Z2gga3dhcmdzIHRvbworICAgICAgICB4ID0gYXN0LkJpbk9wKGxlZnQ9MSwgb3A9MiwgcmlnaHQ9MywgbGluZW5vPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5sZWZ0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgub3AsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5yaWdodCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmxpbmVubywgMCkKKworICAgICAgICAjIFJhbmRvbSBrd2FyZ3MgYWxzbyBhbGxvd2VkCisgICAgICAgIHggPSBhc3QuQmluT3AoMSwgMiwgMywgZm9vYmFyYmF6PTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vYmFyYmF6LCA0MikKKworICAgIGRlZiB0ZXN0X25vX2ZpZWxkcyhzZWxmKToKKyAgICAgICAgIyB0aGlzIHVzZWQgdG8gZmFpbCBiZWNhdXNlIFN1Yi5fZmllbGRzIHdhcyBOb25lCisgICAgICAgIHggPSBhc3QuU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgbW9kcyA9IFtwaWNrbGVdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgICAgICAgICBtb2RzLmFwcGVuZChjUGlja2xlKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHByb3RvY29scyA9IFswLCAxLCAyXQorICAgICAgICBmb3IgbW9kIGluIG1vZHM6CisgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgICAgIGZvciBhc3QgaW4gKGNvbXBpbGUoaSwgIj8iLCAiZXhlYyIsIDB4NDAwKSBmb3IgaSBpbiBleGVjX3Rlc3RzKToKKyAgICAgICAgICAgICAgICAgICAgYXN0MiA9IG1vZC5sb2Fkcyhtb2QuZHVtcHMoYXN0LCBwcm90b2NvbCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9fdHVwbGUoYXN0MiksIHRvX3R1cGxlKGFzdCkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2lkZW50aXRpZmVyKHNlbGYpOgorICAgICAgICBtID0gYXN0Lk1vZHVsZShbYXN0LkV4cHIoYXN0Lk5hbWUodSJ4IiwgYXN0LkxvYWQoKSkpXSkKKyAgICAgICAgYXN0LmZpeF9taXNzaW5nX2xvY2F0aW9ucyhtKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBjb21waWxlKG0sICI8dGVzdD4iLCAiZXhlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImlkZW50aWZpZXIgbXVzdCBiZSBvZiB0eXBlIHN0ciIsIHN0cihjbS5leGNlcHRpb24pKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9zdHJpbmcoc2VsZik6CisgICAgICAgIG0gPSBhc3QuTW9kdWxlKFthc3QuRXhwcihhc3QuU3RyKDQzKSldKQorICAgICAgICBhc3QuZml4X21pc3NpbmdfbG9jYXRpb25zKG0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGNvbXBpbGUobSwgIjx0ZXN0PiIsICJleGVjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigic3RyaW5nIG11c3QgYmUgb2YgdHlwZSBzdHIgb3IgdW5pIiwgc3RyKGNtLmV4Y2VwdGlvbikpCisKKworY2xhc3MgQVNUSGVscGVyc19UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BhcnNlKHNlbGYpOgorICAgICAgICBhID0gYXN0LnBhcnNlKCdmb28oMSArIDEpJykKKyAgICAgICAgYiA9IGNvbXBpbGUoJ2ZvbygxICsgMSknLCAnPHVua25vd24+JywgJ2V4ZWMnLCBhc3QuUHlDRl9PTkxZX0FTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZHVtcChhKSwgYXN0LmR1bXAoYikpCisKKyAgICBkZWYgdGVzdF9kdW1wKHNlbGYpOgorICAgICAgICBub2RlID0gYXN0LnBhcnNlKCdzcGFtKGVnZ3MsICJhbmQgY2hlZXNlIiknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKG5vZGUpLAorICAgICAgICAgICAgIk1vZHVsZShib2R5PVtFeHByKHZhbHVlPUNhbGwoZnVuYz1OYW1lKGlkPSdzcGFtJywgY3R4PUxvYWQoKSksICIKKyAgICAgICAgICAgICJhcmdzPVtOYW1lKGlkPSdlZ2dzJywgY3R4PUxvYWQoKSksIFN0cihzPSdhbmQgY2hlZXNlJyldLCAiCisgICAgICAgICAgICAia2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lKSldKSIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKG5vZGUsIGFubm90YXRlX2ZpZWxkcz1GYWxzZSksCisgICAgICAgICAgICAiTW9kdWxlKFtFeHByKENhbGwoTmFtZSgnc3BhbScsIExvYWQoKSksIFtOYW1lKCdlZ2dzJywgTG9hZCgpKSwgIgorICAgICAgICAgICAgIlN0cignYW5kIGNoZWVzZScpXSwgW10sIE5vbmUsIE5vbmUpKV0pIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmR1bXAobm9kZSwgaW5jbHVkZV9hdHRyaWJ1dGVzPVRydWUpLAorICAgICAgICAgICAgIk1vZHVsZShib2R5PVtFeHByKHZhbHVlPUNhbGwoZnVuYz1OYW1lKGlkPSdzcGFtJywgY3R4PUxvYWQoKSwgIgorICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBhcmdzPVtOYW1lKGlkPSdlZ2dzJywgY3R4PUxvYWQoKSwgIgorICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTUpLCBTdHIocz0nYW5kIGNoZWVzZScsIGxpbmVubz0xLCAiCisgICAgICAgICAgICAiY29sX29mZnNldD0xMSldLCBrZXl3b3Jkcz1bXSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUsICIKKyAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldKSIKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfY29weV9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgc3JjID0gYXN0LnBhcnNlKCcxICsgMScsIG1vZGU9J2V2YWwnKQorICAgICAgICBzcmMuYm9keS5yaWdodCA9IGFzdC5jb3B5X2xvY2F0aW9uKGFzdC5OdW0oMiksIHNyYy5ib2R5LnJpZ2h0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKHNyYywgaW5jbHVkZV9hdHRyaWJ1dGVzPVRydWUpLAorICAgICAgICAgICAgJ0V4cHJlc3Npb24oYm9keT1CaW5PcChsZWZ0PU51bShuPTEsIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCAnCisgICAgICAgICAgICAnb3A9QWRkKCksIHJpZ2h0PU51bShuPTIsIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTQpLCBsaW5lbm89MSwgJworICAgICAgICAgICAgJ2NvbF9vZmZzZXQ9MCkpJworICAgICAgICApCisKKyAgICBkZWYgdGVzdF9maXhfbWlzc2luZ19sb2NhdGlvbnMoc2VsZik6CisgICAgICAgIHNyYyA9IGFzdC5wYXJzZSgnd3JpdGUoInNwYW0iKScpCisgICAgICAgIHNyYy5ib2R5LmFwcGVuZChhc3QuRXhwcihhc3QuQ2FsbChhc3QuTmFtZSgnc3BhbScsIGFzdC5Mb2FkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FzdC5TdHIoJ2VnZ3MnKV0sIFtdLCBOb25lLCBOb25lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjLCBhc3QuZml4X21pc3NpbmdfbG9jYXRpb25zKHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmR1bXAoc3JjLCBpbmNsdWRlX2F0dHJpYnV0ZXM9VHJ1ZSksCisgICAgICAgICAgICAiTW9kdWxlKGJvZHk9W0V4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3dyaXRlJywgY3R4PUxvYWQoKSwgIgorICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBhcmdzPVtTdHIocz0nc3BhbScsIGxpbmVubz0xLCAiCisgICAgICAgICAgICAiY29sX29mZnNldD02KV0sIGtleXdvcmRzPVtdLCBzdGFyYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgIgorICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBsaW5lbm89MSwgY29sX29mZnNldD0wKSwgIgorICAgICAgICAgICAgIkV4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3NwYW0nLCBjdHg9TG9hZCgpLCBsaW5lbm89MSwgIgorICAgICAgICAgICAgImNvbF9vZmZzZXQ9MCksIGFyZ3M9W1N0cihzPSdlZ2dzJywgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldLCAiCisgICAgICAgICAgICAia2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCBsaW5lbm89MSwgIgorICAgICAgICAgICAgImNvbF9vZmZzZXQ9MCksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApXSkiCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2luY3JlbWVudF9saW5lbm8oc2VsZik6CisgICAgICAgIHNyYyA9IGFzdC5wYXJzZSgnMSArIDEnLCBtb2RlPSdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuaW5jcmVtZW50X2xpbmVubyhzcmMsIG49MyksIHNyYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZHVtcChzcmMsIGluY2x1ZGVfYXR0cmlidXRlcz1UcnVlKSwKKyAgICAgICAgICAgICdFeHByZXNzaW9uKGJvZHk9QmluT3AobGVmdD1OdW0obj0xLCBsaW5lbm89NCwgY29sX29mZnNldD0wKSwgJworICAgICAgICAgICAgJ29wPUFkZCgpLCByaWdodD1OdW0obj0xLCBsaW5lbm89NCwgY29sX29mZnNldD00KSwgbGluZW5vPTQsICcKKyAgICAgICAgICAgICdjb2xfb2Zmc2V0PTApKScKKyAgICAgICAgKQorICAgICAgICAjIGlzc3VlMTA4Njk6IGRvIG5vdCBpbmNyZW1lbnQgbGluZW5vIG9mIHJvb3QgdHdpY2UKKyAgICAgICAgc3JjID0gYXN0LnBhcnNlKCcxICsgMScsIG1vZGU9J2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5pbmNyZW1lbnRfbGluZW5vKHNyYy5ib2R5LCBuPTMpLCBzcmMuYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZHVtcChzcmMsIGluY2x1ZGVfYXR0cmlidXRlcz1UcnVlKSwKKyAgICAgICAgICAgICdFeHByZXNzaW9uKGJvZHk9QmluT3AobGVmdD1OdW0obj0xLCBsaW5lbm89NCwgY29sX29mZnNldD0wKSwgJworICAgICAgICAgICAgJ29wPUFkZCgpLCByaWdodD1OdW0obj0xLCBsaW5lbm89NCwgY29sX29mZnNldD00KSwgbGluZW5vPTQsICcKKyAgICAgICAgICAgICdjb2xfb2Zmc2V0PTApKScKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaXRlcl9maWVsZHMoc2VsZik6CisgICAgICAgIG5vZGUgPSBhc3QucGFyc2UoJ2ZvbygpJywgbW9kZT0nZXZhbCcpCisgICAgICAgIGQgPSBkaWN0KGFzdC5pdGVyX2ZpZWxkcyhub2RlLmJvZHkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKCdmdW5jJykuaWQsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsna2V5d29yZHMnOiBbXSwgJ2t3YXJncyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmdzJzogW10sICdzdGFyYXJncyc6IE5vbmV9KQorCisgICAgZGVmIHRlc3RfaXRlcl9jaGlsZF9ub2RlcyhzZWxmKToKKyAgICAgICAgbm9kZSA9IGFzdC5wYXJzZSgic3BhbSgyMywgNDIsIGVnZ3M9J2xlZWsnKSIsIG1vZGU9J2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KGFzdC5pdGVyX2NoaWxkX25vZGVzKG5vZGUuYm9keSkpKSwgNCkKKyAgICAgICAgaXRlcmF0b3IgPSBhc3QuaXRlcl9jaGlsZF9ub2Rlcyhub2RlLmJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdGVyYXRvcikuaWQsICdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0ZXJhdG9yKS5uLCAyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0ZXJhdG9yKS5uLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZHVtcChuZXh0KGl0ZXJhdG9yKSksCisgICAgICAgICAgICAia2V5d29yZChhcmc9J2VnZ3MnLCB2YWx1ZT1TdHIocz0nbGVlaycpKSIKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZ2V0X2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgbm9kZSA9IGFzdC5wYXJzZSgnZGVmIGZvbygpOlxuICAiIiJsaW5lIG9uZVxuICBsaW5lIHR3byIiIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmdldF9kb2NzdHJpbmcobm9kZS5ib2R5WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbGluZSBvbmVcbmxpbmUgdHdvJykKKworICAgIGRlZiB0ZXN0X2xpdGVyYWxfZXZhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QubGl0ZXJhbF9ldmFsKCdbMSwgMiwgM10nKSwgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJ3siZm9vIjogNDJ9JyksIHsiZm9vIjogNDJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJyhUcnVlLCBGYWxzZSwgTm9uZSknKSwgKFRydWUsIEZhbHNlLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXN0LmxpdGVyYWxfZXZhbCwgJ2ZvbygpJykKKworICAgIGRlZiB0ZXN0X2xpdGVyYWxfZXZhbF9pc3N1ZTQ5MDcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnMmonKSwgMmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnMTAgKyAyaicpLCAxMCArIDJqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJzEuNSAtIDJqJyksIDEuNSAtIDJqKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhc3QubGl0ZXJhbF9ldmFsLCAnMiArICgzICsgNGopJykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygoImJhY2txdW90ZSBub3Qgc3VwcG9ydGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChBU1RfVGVzdHMsIEFTVEhlbHBlcnNfVGVzdCkKKworZGVmIG1haW4oKToKKyAgICBpZiBfX25hbWVfXyAhPSAnX19tYWluX18nOgorICAgICAgICByZXR1cm4KKyAgICBpZiBzeXMuYXJndlsxOl0gPT0gWyctZyddOgorICAgICAgICBmb3Igc3RhdGVtZW50cywga2luZCBpbiAoKGV4ZWNfdGVzdHMsICJleGVjIiksIChzaW5nbGVfdGVzdHMsICJzaW5nbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChldmFsX3Rlc3RzLCAiZXZhbCIpKToKKyAgICAgICAgICAgIHByaW50IGtpbmQrIl9yZXN1bHRzID0gWyIKKyAgICAgICAgICAgIGZvciBzIGluIHN0YXRlbWVudHM6CisgICAgICAgICAgICAgICAgcHJpbnQgcmVwcih0b190dXBsZShjb21waWxlKHMsICI/Iiwga2luZCwgMHg0MDApKSkrIiwiCisgICAgICAgICAgICBwcmludCAiXSIKKyAgICAgICAgcHJpbnQgIm1haW4oKSIKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorICAgIHRlc3RfbWFpbigpCisKKyMjIyMgRVZFUllUSElORyBCRUxPVyBJUyBHRU5FUkFURUQgIyMjIyMKK2V4ZWNfcmVzdWx0cyA9IFsKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnTm9uZScsICgnTG9hZCcsKSkpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdKSwgWygnUGFzcycsICgxLCA5KSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdOYW1lJywgKDEsIDYpLCAnYScsICgnUGFyYW0nLCkpXSwgTm9uZSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDEwKSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdOYW1lJywgKDEsIDYpLCAnYScsICgnUGFyYW0nLCkpXSwgTm9uZSwgTm9uZSwgWygnTnVtJywgKDEsIDgpLCAwKV0pLCBbKCdQYXNzJywgKDEsIDEyKSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgJ2FyZ3MnLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTQpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCAna3dhcmdzJywgW10pLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdOYW1lJywgKDEsIDYpLCAnYScsICgnUGFyYW0nLCkpLCAoJ05hbWUnLCAoMSwgOSksICdiJywgKCdQYXJhbScsKSksICgnTmFtZScsICgxLCAxNCksICdjJywgKCdQYXJhbScsKSksICgnTmFtZScsICgxLCAyMiksICdkJywgKCdQYXJhbScsKSksICgnTmFtZScsICgxLCAyOCksICdlJywgKCdQYXJhbScsKSldLCAnYXJncycsICdrd2FyZ3MnLCBbKCdOdW0nLCAoMSwgMTEpLCAxKSwgKCdOYW1lJywgKDEsIDE2KSwgJ05vbmUnLCAoJ0xvYWQnLCkpLCAoJ0xpc3QnLCAoMSwgMjQpLCBbXSwgKCdMb2FkJywpKSwgKCdEaWN0JywgKDEsIDMwKSwgW10sIFtdKV0pLCBbKCdQYXNzJywgKDEsIDUyKSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnQ2xhc3NEZWYnLCAoMSwgMCksICdDJywgW10sIFsoJ1Bhc3MnLCAoMSwgOCkpXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ0NsYXNzRGVmJywgKDEsIDApLCAnQycsIFsoJ05hbWUnLCAoMSwgOCksICdvYmplY3QnLCAoJ0xvYWQnLCkpXSwgWygnUGFzcycsICgxLCAxNykpXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdKSwgWygnUmV0dXJuJywgKDEsIDgpLCAoJ051bScsICgxLCAxNSksIDEpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdEZWxldGUnLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgNCksICd2JywgKCdEZWwnLCkpXSldKSwKKygnTW9kdWxlJywgWygnQXNzaWduJywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDApLCAndicsICgnU3RvcmUnLCkpXSwgKCdOdW0nLCAoMSwgNCksIDEpKV0pLAorKCdNb2R1bGUnLCBbKCdBdWdBc3NpZ24nLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ1N0b3JlJywpKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDUpLCAxKSldKSwKKygnTW9kdWxlJywgWygnUHJpbnQnLCAoMSwgMCksICgnTmFtZScsICgxLCA4KSwgJ2YnLCAoJ0xvYWQnLCkpLCBbKCdOdW0nLCAoMSwgMTEpLCAxKV0sIEZhbHNlKV0pLAorKCdNb2R1bGUnLCBbKCdGb3InLCAoMSwgMCksICgnTmFtZScsICgxLCA0KSwgJ3YnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDkpLCAndicsICgnTG9hZCcsKSksIFsoJ1Bhc3MnLCAoMSwgMTEpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdXaGlsZScsICgxLCAwKSwgKCdOYW1lJywgKDEsIDYpLCAndicsICgnTG9hZCcsKSksIFsoJ1Bhc3MnLCAoMSwgOCkpXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ0lmJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMyksICd2JywgKCdMb2FkJywpKSwgWygnUGFzcycsICgxLCA1KSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnUmFpc2UnLCAoMSwgMCksICgnTmFtZScsICgxLCA2KSwgJ0V4Y2VwdGlvbicsICgnTG9hZCcsKSksICgnU3RyJywgKDEsIDE3KSwgJ3N0cmluZycpLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdUcnlFeGNlcHQnLCAoMSwgMCksIFsoJ1Bhc3MnLCAoMiwgMikpXSwgWygnRXhjZXB0SGFuZGxlcicsICgzLCAwKSwgKCdOYW1lJywgKDMsIDcpLCAnRXhjZXB0aW9uJywgKCdMb2FkJywpKSwgTm9uZSwgWygnUGFzcycsICg0LCAyKSldKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdUcnlGaW5hbGx5JywgKDEsIDApLCBbKCdQYXNzJywgKDIsIDIpKV0sIFsoJ1Bhc3MnLCAoNCwgMikpXSldKSwKKygnTW9kdWxlJywgWygnQXNzZXJ0JywgKDEsIDApLCAoJ05hbWUnLCAoMSwgNyksICd2JywgKCdMb2FkJywpKSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnSW1wb3J0JywgKDEsIDApLCBbKCdhbGlhcycsICdzeXMnLCBOb25lKV0pXSksCisoJ01vZHVsZScsIFsoJ0ltcG9ydEZyb20nLCAoMSwgMCksICdzeXMnLCBbKCdhbGlhcycsICd2JywgTm9uZSldLCAwKV0pLAorKCdNb2R1bGUnLCBbKCdFeGVjJywgKDEsIDApLCAoJ1N0cicsICgxLCA1KSwgJ3YnKSwgTm9uZSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnR2xvYmFsJywgKDEsIDApLCBbJ3YnXSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdOdW0nLCAoMSwgMCksIDEpKV0pLAorKCdNb2R1bGUnLCBbKCdQYXNzJywgKDEsIDApKV0pLAorKCdNb2R1bGUnLCBbKCdCcmVhaycsICgxLCAwKSldKSwKKygnTW9kdWxlJywgWygnQ29udGludWUnLCAoMSwgMCkpXSksCisoJ01vZHVsZScsIFsoJ0ZvcicsICgxLCAwKSwgKCdUdXBsZScsICgxLCA0KSwgWygnTmFtZScsICgxLCA0KSwgJ2EnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDYpLCAnYicsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMSksICdjJywgKCdMb2FkJywpKSwgWygnUGFzcycsICgxLCAxNCkpXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTGlzdENvbXAnLCAoMSwgMSksICgnVHVwbGUnLCAoMSwgMiksIFsoJ05hbWUnLCAoMSwgMiksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYicsICgnTG9hZCcsKSldLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdUdXBsZScsICgxLCAxMSksIFsoJ05hbWUnLCAoMSwgMTEpLCAnYScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTMpLCAnYicsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxOCksICdjJywgKCdMb2FkJywpKSwgW10pXSkpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnR2VuZXJhdG9yRXhwJywgKDEsIDEpLCAoJ1R1cGxlJywgKDEsIDIpLCBbKCdOYW1lJywgKDEsIDIpLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA0KSwgJ2InLCAoJ0xvYWQnLCkpXSwgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnVHVwbGUnLCAoMSwgMTEpLCBbKCdOYW1lJywgKDEsIDExKSwgJ2EnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEzKSwgJ2InLCAoJ1N0b3JlJywpKV0sICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTgpLCAnYycsICgnTG9hZCcsKSksIFtdKV0pKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0dlbmVyYXRvckV4cCcsICgxLCAxKSwgKCdUdXBsZScsICgxLCAyKSwgWygnTmFtZScsICgxLCAyKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdiJywgKCdMb2FkJywpKV0sICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDEsIDEyKSwgWygnTmFtZScsICgxLCAxMiksICdhJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxNCksICdiJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDIwKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbXSldKSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdHZW5lcmF0b3JFeHAnLCAoMiwgNCksICgnVHVwbGUnLCAoMywgNCksIFsoJ05hbWUnLCAoMywgNCksICdBYScsICgnTG9hZCcsKSksICgnTmFtZScsICg1LCA3KSwgJ0JiJywgKCdMb2FkJywpKV0sICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDgsIDQpLCBbKCdOYW1lJywgKDgsIDQpLCAnQWEnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEwLCA0KSwgJ0JiJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEwLCAxMCksICdDYycsICgnTG9hZCcsKSksIFtdKV0pKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0RpY3RDb21wJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDUpLCAnYicsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgMTEpLCAndycsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTYpLCAneCcsICgnTG9hZCcsKSksIFtdKSwgKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDIyKSwgJ20nLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDI3KSwgJ3AnLCAoJ0xvYWQnLCkpLCBbKCdOYW1lJywgKDEsIDMyKSwgJ2cnLCAoJ0xvYWQnLCkpXSldKSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdEaWN0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA1KSwgJ2InLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdUdXBsZScsICgxLCAxMSksIFsoJ05hbWUnLCAoMSwgMTEpLCAndicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTMpLCAndycsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxOCksICd4JywgKCdMb2FkJywpKSwgW10pXSkpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnU2V0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAncicsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdsJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICd4JywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdnJywgKCdMb2FkJywpKV0pXSkpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnU2V0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAncicsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDEsIDcpLCBbKCdOYW1lJywgKDEsIDcpLCAnbCcsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgOSksICdtJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDE0KSwgJ3gnLCAoJ0xvYWQnLCkpLCBbXSldKSldKSwKK10KK3NpbmdsZV9yZXN1bHRzID0gWworKCdJbnRlcmFjdGl2ZScsIFsoJ0V4cHInLCAoMSwgMCksICgnQmluT3AnLCAoMSwgMCksICgnTnVtJywgKDEsIDApLCAxKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDIpLCAyKSkpXSksCitdCitldmFsX3Jlc3VsdHMgPSBbCisoJ0V4cHJlc3Npb24nLCAoJ05hbWUnLCAoMSwgMCksICdOb25lJywgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0Jvb2xPcCcsICgxLCAwKSwgKCdBbmQnLCksIFsoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDYpLCAnYicsICgnTG9hZCcsKSldKSksCisoJ0V4cHJlc3Npb24nLCAoJ0Jpbk9wJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdBZGQnLCksICgnTmFtZScsICgxLCA0KSwgJ2InLCAoJ0xvYWQnLCkpKSksCisoJ0V4cHJlc3Npb24nLCAoJ1VuYXJ5T3AnLCAoMSwgMCksICgnTm90JywpLCAoJ05hbWUnLCAoMSwgNCksICd2JywgKCdMb2FkJywpKSkpLAorKCdFeHByZXNzaW9uJywgKCdMYW1iZGEnLCAoMSwgMCksICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdKSwgKCdOYW1lJywgKDEsIDcpLCAnTm9uZScsICgnTG9hZCcsKSkpKSwKKygnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgWygnTnVtJywgKDEsIDIpLCAxKV0sIFsoJ051bScsICgxLCA0KSwgMildKSksCisoJ0V4cHJlc3Npb24nLCAoJ0RpY3QnLCAoMSwgMCksIFtdLCBbXSkpLAorKCdFeHByZXNzaW9uJywgKCdTZXQnLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgMSksICdOb25lJywgKCdMb2FkJywpKV0pKSwKKygnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgWygnTnVtJywgKDIsIDYpLCAxKV0sIFsoJ051bScsICg0LCAxMCksIDIpXSkpLAorKCdFeHByZXNzaW9uJywgKCdMaXN0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdiJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICdjJywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdkJywgKCdMb2FkJywpKV0pXSkpLAorKCdFeHByZXNzaW9uJywgKCdHZW5lcmF0b3JFeHAnLCAoMSwgMSksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDcpLCAnYicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTIpLCAnYycsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMTcpLCAnZCcsICgnTG9hZCcsKSldKV0pKSwKKygnRXhwcmVzc2lvbicsICgnQ29tcGFyZScsICgxLCAwKSwgKCdOdW0nLCAoMSwgMCksIDEpLCBbKCdMdCcsKSwgKCdMdCcsKV0sIFsoJ051bScsICgxLCA0KSwgMiksICgnTnVtJywgKDEsIDgpLCAzKV0pKSwKKygnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnZicsICgnTG9hZCcsKSksIFsoJ051bScsICgxLCAyKSwgMSksICgnTnVtJywgKDEsIDQpLCAyKV0sIFsoJ2tleXdvcmQnLCAnYycsICgnTnVtJywgKDEsIDgpLCAzKSldLCAoJ05hbWUnLCAoMSwgMTEpLCAnZCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxNSksICdlJywgKCdMb2FkJywpKSkpLAorKCdFeHByZXNzaW9uJywgKCdSZXByJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMSksICd2JywgKCdMb2FkJywpKSkpLAorKCdFeHByZXNzaW9uJywgKCdOdW0nLCAoMSwgMCksIDEwTCkpLAorKCdFeHByZXNzaW9uJywgKCdTdHInLCAoMSwgMCksICdzdHJpbmcnKSksCisoJ0V4cHJlc3Npb24nLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ1N1YnNjcmlwdCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ05hbWUnLCAoMSwgMiksICdiJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYycsICgnTG9hZCcsKSksIE5vbmUpLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnTGlzdCcsICgxLCAwKSwgWygnTnVtJywgKDEsIDEpLCAxKSwgKCdOdW0nLCAoMSwgMyksIDIpLCAoJ051bScsICgxLCA1KSwgMyldLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnTGlzdCcsICgxLCAwKSwgW10sICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdUdXBsZScsICgxLCAwKSwgWygnTnVtJywgKDEsIDApLCAxKSwgKCdOdW0nLCAoMSwgMiksIDIpLCAoJ051bScsICgxLCA0KSwgMyldLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnVHVwbGUnLCAoMSwgMSksIFsoJ051bScsICgxLCAxKSwgMSksICgnTnVtJywgKDEsIDMpLCAyKSwgKCdOdW0nLCAoMSwgNSksIDMpXSwgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ1R1cGxlJywgKDEsIDApLCBbXSwgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICdjJywgKCdMb2FkJywpKSwgJ2QnLCAoJ0xvYWQnLCkpLCBbKCdTdWJzY3JpcHQnLCAoMSwgOCksICgnQXR0cmlidXRlJywgKDEsIDgpLCAoJ05hbWUnLCAoMSwgOCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOdW0nLCAoMSwgMTIpLCAxKSwgKCdOdW0nLCAoMSwgMTQpLCAyKSwgTm9uZSksICgnTG9hZCcsKSldLCBbXSwgTm9uZSwgTm9uZSkpLAorXQorbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MWVjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQpAQCAtMCwwICsxLDI3MyBAQAorIyB0ZXN0IGFzeW5jaGF0CisKK2ltcG9ydCBhc3luY29yZSwgYXN5bmNoYXQsIHNvY2tldCwgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK0hPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAorU0VSVkVSX1FVSVQgPSAnUVVJVFxuJworCitpZiB0aHJlYWRpbmc6CisgICAgY2xhc3MgZWNob19zZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgICMgcGFyYW1ldGVyIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBhc3NlZCBiYWNrIHRvIHRoZQorICAgICAgICAjIGNsaWVudCBlYWNoIHNlbmQKKyAgICAgICAgY2h1bmtfc2l6ZSA9IDEKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgc2VsZi5ldmVudCA9IGV2ZW50CisgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICAgICAgICAgICMgVGhpcyB3aWxsIGJlIHNldCBpZiB0aGUgY2xpZW50IHdhbnRzIHVzIHRvIHdhaXQgYmVmb3JlIGVjaG9pbmcgZGF0YQorICAgICAgICAgICAgIyBiYWNrLgorICAgICAgICAgICAgc2VsZi5zdGFydF9yZXNlbmRfZXZlbnQgPSBOb25lCisKKyAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc29jay5saXN0ZW4oMSkKKyAgICAgICAgICAgIHNlbGYuZXZlbnQuc2V0KCkKKyAgICAgICAgICAgIGNvbm4sIGNsaWVudCA9IHNlbGYuc29jay5hY2NlcHQoKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSAiIgorICAgICAgICAgICAgIyBjb2xsZWN0IGRhdGEgdW50aWwgcXVpdCBtZXNzYWdlIGlzIHNlZW4KKyAgICAgICAgICAgIHdoaWxlIFNFUlZFUl9RVUlUIG5vdCBpbiBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KDEpCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlciArIGRhdGEKKworICAgICAgICAgICAgIyByZW1vdmUgdGhlIFNFUlZFUl9RVUlUIG1lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gc2VsZi5idWZmZXIucmVwbGFjZShTRVJWRVJfUVVJVCwgJycpCisKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhcnRfcmVzZW5kX2V2ZW50OgorICAgICAgICAgICAgICAgIHNlbGYuc3RhcnRfcmVzZW5kX2V2ZW50LndhaXQoKQorCisgICAgICAgICAgICAjIHJlLXNlbmQgZW50aXJlIHNldCBvZiBjb2xsZWN0ZWQgZGF0YQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgdGhpcyBtYXkgZmFpbCBvbiBzb21lIHRlc3RzLCBzdWNoIGFzIHRlc3RfY2xvc2Vfd2hlbl9kb25lLCBzaW5jZQorICAgICAgICAgICAgICAgICMgdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNoYW5uZWwgd2hlbiBpdCdzIGRvbmUgc2VuZGluZworICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuYnVmZmVyOgorICAgICAgICAgICAgICAgICAgICBuID0gY29ubi5zZW5kKHNlbGYuYnVmZmVyWzpzZWxmLmNodW5rX3NpemVdKQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDAxKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyW246XQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorCisgICAgY2xhc3MgZWNob19jbGllbnQoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlcm1pbmF0b3IsIHNlcnZlcl9wb3J0KToKKyAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuY29udGVudHMgPSBbXQorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzZWxmLmNvbm5lY3QoKEhPU1QsIHNlcnZlcl9wb3J0KSkKKyAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IodGVybWluYXRvcikKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gJycKKworICAgICAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgIyBzZWxlY3QucG9sbCByZXR1cm5zIGEgc2VsZWN0LlBPTExIVVAgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdHMKKyAgICAgICAgICAgICMgb24gZGFyd2luLCBzbyBqdXN0IGlnbm9yZSBpdAorICAgICAgICAgICAgZGVmIGhhbmRsZV9leHB0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgc2VsZi5idWZmZXIgKz0gZGF0YQorCisgICAgICAgIGRlZiBmb3VuZF90ZXJtaW5hdG9yKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jb250ZW50cy5hcHBlbmQoc2VsZi5idWZmZXIpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9ICIiCisKKworICAgIGRlZiBzdGFydF9lY2hvX3NlcnZlcigpOgorICAgICAgICBldmVudCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHMgPSBlY2hvX3NlcnZlcihldmVudCkKKyAgICAgICAgcy5zdGFydCgpCisgICAgICAgIGV2ZW50LndhaXQoKQorICAgICAgICBldmVudC5jbGVhcigpCisgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KKyAgICAgICAgcmV0dXJuIHMsIGV2ZW50CisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFRlc3RBc3luY2hhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXNlcG9sbCA9IEZhbHNlCisKKyAgICBkZWYgc2V0VXAgKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisKKyAgICBkZWYgdGVhckRvd24gKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisKKyAgICBkZWYgbGluZV90ZXJtaW5hdG9yX2NoZWNrKHNlbGYsIHRlcm0sIHNlcnZlcl9jaHVuayk6CisgICAgICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgcyA9IGVjaG9fc2VydmVyKGV2ZW50KQorICAgICAgICBzLmNodW5rX3NpemUgPSBzZXJ2ZXJfY2h1bmsKKyAgICAgICAgcy5zdGFydCgpCisgICAgICAgIGV2ZW50LndhaXQoKQorICAgICAgICBldmVudC5jbGVhcigpCisgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KKyAgICAgICAgYyA9IGVjaG9fY2xpZW50KHRlcm0sIHMucG9ydCkKKyAgICAgICAgYy5wdXNoKCJoZWxsbyAiKQorICAgICAgICBjLnB1c2goIndvcmxkJXMiICUgdGVybSkKKyAgICAgICAgYy5wdXNoKCJJJ20gbm90IGRlYWQgeWV0ISVzIiAlIHRlcm0pCisgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKKyAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCisgICAgICAgIHMuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbImhlbGxvIHdvcmxkIiwgIkknbSBub3QgZGVhZCB5ZXQhIl0pCisKKyAgICAjIHRoZSBsaW5lIHRlcm1pbmF0b3IgdGVzdHMgYmVsb3cgY2hlY2sgcmVjZWl2aW5nIHZhcmlvdXNseS1zaXplZAorICAgICMgY2h1bmtzIGJhY2sgZnJvbSB0aGUgc2VydmVyIGluIG9yZGVyIHRvIGV4ZXJjaXNlIGFsbCBicmFuY2hlcyBvZgorICAgICMgYXN5bmNfY2hhdC5oYW5kbGVfcmVhZAorCisgICAgZGVmIHRlc3RfbGluZV90ZXJtaW5hdG9yMShzZWxmKToKKyAgICAgICAgIyB0ZXN0IG9uZS1jaGFyYWN0ZXIgdGVybWluYXRvcgorICAgICAgICBmb3IgbCBpbiAoMSwyLDMpOgorICAgICAgICAgICAgc2VsZi5saW5lX3Rlcm1pbmF0b3JfY2hlY2soJ1xuJywgbCkKKworICAgIGRlZiB0ZXN0X2xpbmVfdGVybWluYXRvcjIoc2VsZik6CisgICAgICAgICMgdGVzdCB0d28tY2hhcmFjdGVyIHRlcm1pbmF0b3IKKyAgICAgICAgZm9yIGwgaW4gKDEsMiwzKToKKyAgICAgICAgICAgIHNlbGYubGluZV90ZXJtaW5hdG9yX2NoZWNrKCdcclxuJywgbCkKKworICAgIGRlZiB0ZXN0X2xpbmVfdGVybWluYXRvcjMoc2VsZik6CisgICAgICAgICMgdGVzdCB0aHJlZS1jaGFyYWN0ZXIgdGVybWluYXRvcgorICAgICAgICBmb3IgbCBpbiAoMSwyLDMpOgorICAgICAgICAgICAgc2VsZi5saW5lX3Rlcm1pbmF0b3JfY2hlY2soJ3FxcScsIGwpCisKKyAgICBkZWYgbnVtZXJpY190ZXJtaW5hdG9yX2NoZWNrKHNlbGYsIHRlcm1sZW4pOgorICAgICAgICAjIFRyeSByZWFkaW5nIGEgZml4ZWQgbnVtYmVyIG9mIGJ5dGVzCisgICAgICAgIHMsIGV2ZW50ID0gc3RhcnRfZWNob19zZXJ2ZXIoKQorICAgICAgICBjID0gZWNob19jbGllbnQodGVybWxlbiwgcy5wb3J0KQorICAgICAgICBkYXRhID0gImhlbGxvIHdvcmxkLCBJJ20gbm90IGRlYWQgeWV0IVxuIgorICAgICAgICBjLnB1c2goZGF0YSkKKyAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQorICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKKyAgICAgICAgcy5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtkYXRhWzp0ZXJtbGVuXV0pCisKKyAgICBkZWYgdGVzdF9udW1lcmljX3Rlcm1pbmF0b3IxKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgaW50cyAmIGxvbmdzIGJvdGggd29yayAoc2luY2UgdHlwZSBpcworICAgICAgICAjIGV4cGxpY2l0bHkgY2hlY2tlZCBpbiBhc3luY19jaGF0LmhhbmRsZV9yZWFkKQorICAgICAgICBzZWxmLm51bWVyaWNfdGVybWluYXRvcl9jaGVjaygxKQorICAgICAgICBzZWxmLm51bWVyaWNfdGVybWluYXRvcl9jaGVjaygxTCkKKworICAgIGRlZiB0ZXN0X251bWVyaWNfdGVybWluYXRvcjIoc2VsZik6CisgICAgICAgIHNlbGYubnVtZXJpY190ZXJtaW5hdG9yX2NoZWNrKDZMKQorCisgICAgZGVmIHRlc3Rfbm9uZV90ZXJtaW5hdG9yKHNlbGYpOgorICAgICAgICAjIFRyeSByZWFkaW5nIGEgZml4ZWQgbnVtYmVyIG9mIGJ5dGVzCisgICAgICAgIHMsIGV2ZW50ID0gc3RhcnRfZWNob19zZXJ2ZXIoKQorICAgICAgICBjID0gZWNob19jbGllbnQoTm9uZSwgcy5wb3J0KQorICAgICAgICBkYXRhID0gImhlbGxvIHdvcmxkLCBJJ20gbm90IGRlYWQgeWV0IVxuIgorICAgICAgICBjLnB1c2goZGF0YSkKKyAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQorICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKKyAgICAgICAgcy5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYnVmZmVyLCBkYXRhKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3Byb2R1Y2VyKHNlbGYpOgorICAgICAgICBzLCBldmVudCA9IHN0YXJ0X2VjaG9fc2VydmVyKCkKKyAgICAgICAgYyA9IGVjaG9fY2xpZW50KCdcbicsIHMucG9ydCkKKyAgICAgICAgZGF0YSA9ICJoZWxsbyB3b3JsZFxuSSdtIG5vdCBkZWFkIHlldCFcbiIKKyAgICAgICAgcCA9IGFzeW5jaGF0LnNpbXBsZV9wcm9kdWNlcihkYXRhK1NFUlZFUl9RVUlULCBidWZmZXJfc2l6ZT04KQorICAgICAgICBjLnB1c2hfd2l0aF9wcm9kdWNlcihwKQorICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKKyAgICAgICAgcy5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFsiaGVsbG8gd29ybGQiLCAiSSdtIG5vdCBkZWFkIHlldCEiXSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ19wcm9kdWNlcihzZWxmKToKKyAgICAgICAgcywgZXZlbnQgPSBzdGFydF9lY2hvX3NlcnZlcigpCisgICAgICAgIGMgPSBlY2hvX2NsaWVudCgnXG4nLCBzLnBvcnQpCisgICAgICAgIGRhdGEgPSAiaGVsbG8gd29ybGRcbkknbSBub3QgZGVhZCB5ZXQhXG4iCisgICAgICAgIGMucHVzaF93aXRoX3Byb2R1Y2VyKGRhdGErU0VSVkVSX1FVSVQpCisgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQorICAgICAgICBzLmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgWyJoZWxsbyB3b3JsZCIsICJJJ20gbm90IGRlYWQgeWV0ISJdKQorCisgICAgZGVmIHRlc3RfZW1wdHlfbGluZShzZWxmKToKKyAgICAgICAgIyBjaGVja3MgdGhhdCBlbXB0eSBsaW5lcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkKKyAgICAgICAgcywgZXZlbnQgPSBzdGFydF9lY2hvX3NlcnZlcigpCisgICAgICAgIGMgPSBlY2hvX2NsaWVudCgnXG4nLCBzLnBvcnQpCisgICAgICAgIGMucHVzaCgiaGVsbG8gd29ybGRcblxuSSdtIG5vdCBkZWFkIHlldCFcbiIpCisgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKKyAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCisgICAgICAgIHMuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbImhlbGxvIHdvcmxkIiwgIiIsICJJJ20gbm90IGRlYWQgeWV0ISJdKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfd2hlbl9kb25lKHNlbGYpOgorICAgICAgICBzLCBldmVudCA9IHN0YXJ0X2VjaG9fc2VydmVyKCkKKyAgICAgICAgcy5zdGFydF9yZXNlbmRfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBjID0gZWNob19jbGllbnQoJ1xuJywgcy5wb3J0KQorICAgICAgICBjLnB1c2goImhlbGxvIHdvcmxkXG5JJ20gbm90IGRlYWQgeWV0IVxuIikKKyAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQorICAgICAgICBjLmNsb3NlX3doZW5fZG9uZSgpCisgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQorCisgICAgICAgICMgT25seSBhbGxvdyB0aGUgc2VydmVyIHRvIHN0YXJ0IGVjaG9pbmcgZGF0YSBiYWNrIHRvIHRoZSBjbGllbnQgYWZ0ZXIKKyAgICAgICAgIyB0aGUgY2xpZW50IGhhcyBjbG9zZWQgaXRzIGNvbm5lY3Rpb24uICBUaGlzIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24KKyAgICAgICAgIyB3aGVyZSB0aGUgc2VydmVyIGVjaG9lcyBhbGwgb2YgaXRzIGRhdGEgYmVmb3JlIHdlIGNhbiBjaGVjayB0aGF0IGl0CisgICAgICAgICMgZ290IGFueSBkb3duIGJlbG93LgorICAgICAgICBzLnN0YXJ0X3Jlc2VuZF9ldmVudC5zZXQoKQorICAgICAgICBzLmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCisgICAgICAgICMgdGhlIHNlcnZlciBtaWdodCBoYXZlIGJlZW4gYWJsZSB0byBzZW5kIGEgYnl0ZSBvciB0d28gYmFjaywgYnV0IHRoaXMKKyAgICAgICAgIyBhdCBsZWFzdCBjaGVja3MgdGhhdCBpdCByZWNlaXZlZCBzb21ldGhpbmcgYW5kIGRpZG4ndCBqdXN0IGZhaWwKKyAgICAgICAgIyAod2hpY2ggY291bGQgc3RpbGwgcmVzdWx0IGluIHRoZSBjbGllbnQgbm90IGhhdmluZyByZWNlaXZlZCBhbnl0aGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzLmJ1ZmZlcikgPiAwKQorCisKK2NsYXNzIFRlc3RBc3luY2hhdF9XaXRoUG9sbChUZXN0QXN5bmNoYXQpOgorICAgIHVzZXBvbGwgPSBUcnVlCisKK2NsYXNzIFRlc3RIZWxwZXJGdW5jdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbmRfcHJlZml4X2F0X2VuZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3luY2hhdC5maW5kX3ByZWZpeF9hdF9lbmQoInF3ZXJ0eVxyIiwgIlxyXG4iKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3luY2hhdC5maW5kX3ByZWZpeF9hdF9lbmQoInF3ZXJ0eWRramYiLCAiXHJcbiIpLCAwKQorCitjbGFzcyBUZXN0Rmlmbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2hhdC5maWZvKCkKKyAgICAgICAgZi5wdXNoKDcpCisgICAgICAgIGYucHVzaCgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGYpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmlyc3QoKSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBvcCgpLCAoMSwgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGYpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmlyc3QoKSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaXNfZW1wdHkoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wb3AoKSwgKDEsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGYpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaXNfZW1wdHkoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBvcCgpLCAoMCwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9naXZlbl9saXN0KHNlbGYpOgorICAgICAgICBmID0gYXN5bmNoYXQuZmlmbyhbJ3gnLCAxNywgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGYpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucG9wKCksICgxLCAneCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucG9wKCksICgxLCAxNykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wb3AoKSwgKDEsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucG9wKCksICgwLCBOb25lKSkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0QXN5bmNoYXQsIFRlc3RBc3luY2hhdF9XaXRoUG9sbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RIZWxwZXJGdW5jdGlvbnMsIFRlc3RGaWZvKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDQ3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQpAQCAtMCwwICsxLDc0NSBAQAoraW1wb3J0IGFzeW5jb3JlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBvcworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IGVycm5vCitpbXBvcnQgc3RydWN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCisKK2NsYXNzIGR1bW15c29ja2V0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKKworICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgIHJldHVybiA0MgorCitjbGFzcyBkdW1teWNoYW5uZWw6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2tldCA9IGR1bW15c29ja2V0KCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQorCitjbGFzcyBleGl0aW5nZHVtbXk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaGFuZGxlX3JlYWRfZXZlbnQoc2VsZik6CisgICAgICAgIHJhaXNlIGFzeW5jb3JlLkV4aXROb3coKQorCisgICAgaGFuZGxlX3dyaXRlX2V2ZW50ID0gaGFuZGxlX3JlYWRfZXZlbnQKKyAgICBoYW5kbGVfY2xvc2UgPSBoYW5kbGVfcmVhZF9ldmVudAorICAgIGhhbmRsZV9leHB0X2V2ZW50ID0gaGFuZGxlX3JlYWRfZXZlbnQKKworY2xhc3MgY3Jhc2hpbmdkdW1teToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZXJyb3JfaGFuZGxlZCA9IEZhbHNlCisKKyAgICBkZWYgaGFuZGxlX3JlYWRfZXZlbnQoc2VsZik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigpCisKKyAgICBoYW5kbGVfd3JpdGVfZXZlbnQgPSBoYW5kbGVfcmVhZF9ldmVudAorICAgIGhhbmRsZV9jbG9zZSA9IGhhbmRsZV9yZWFkX2V2ZW50CisgICAgaGFuZGxlX2V4cHRfZXZlbnQgPSBoYW5kbGVfcmVhZF9ldmVudAorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcl9oYW5kbGVkID0gVHJ1ZQorCisjIHVzZWQgd2hlbiB0ZXN0aW5nIHNlbmRlcnM7IGp1c3QgY29sbGVjdHMgd2hhdCBpdCBnZXRzIHVudGlsIG5ld2xpbmUgaXMgc2VudAorZGVmIGNhcHR1cmVfc2VydmVyKGV2dCwgYnVmLCBzZXJ2KToKKyAgICB0cnk6CisgICAgICAgIHNlcnYubGlzdGVuKDUpCisgICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2LmFjY2VwdCgpCisgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgbiA9IDIwMAorICAgICAgICB3aGlsZSBuID4gMDoKKyAgICAgICAgICAgIHIsIHcsIGUgPSBzZWxlY3Quc2VsZWN0KFtjb25uXSwgW10sIFtdKQorICAgICAgICAgICAgaWYgcjoKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KDEwKQorICAgICAgICAgICAgICAgICMga2VlcCBldmVyeXRoaW5nIGV4Y2VwdCBmb3IgdGhlIG5ld2xpbmUgdGVybWluYXRvcgorICAgICAgICAgICAgICAgIGJ1Zi53cml0ZShkYXRhLnJlcGxhY2UoJ1xuJywgJycpKQorICAgICAgICAgICAgICAgIGlmICdcbicgaW4gZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG4gLT0gMQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorCisgICAgICAgIGNvbm4uY2xvc2UoKQorICAgIGZpbmFsbHk6CisgICAgICAgIHNlcnYuY2xvc2UoKQorICAgICAgICBldnQuc2V0KCkKKworCitjbGFzcyBIZWxwZXJGdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9yZWFkd3JpdGVleGMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgZXhjZXB0aW9uIGhhbmRsaW5nIGJlaGF2aW9yIG9mIHJlYWQsIHdyaXRlIGFuZCBfZXhjZXB0aW9uCisKKyAgICAgICAgIyBjaGVjayB0aGF0IEV4aXROb3cgZXhjZXB0aW9ucyBpbiB0aGUgb2JqZWN0IGhhbmRsZXIgbWV0aG9kCisgICAgICAgICMgYnViYmxlcyBhbGwgdGhlIHdheSB1cCB0aHJvdWdoIGFzeW5jb3JlIHJlYWQvd3JpdGUvX2V4Y2VwdGlvbiBjYWxscworICAgICAgICB0cjEgPSBleGl0aW5nZHVtbXkoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY29yZS5FeGl0Tm93LCBhc3luY29yZS5yZWFkLCB0cjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jb3JlLkV4aXROb3csIGFzeW5jb3JlLndyaXRlLCB0cjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jb3JlLkV4aXROb3csIGFzeW5jb3JlLl9leGNlcHRpb24sIHRyMSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgYW4gZXhjZXB0aW9uIG90aGVyIHRoYW4gRXhpdE5vdyBpbiB0aGUgb2JqZWN0IGhhbmRsZXIKKyAgICAgICAgIyBtZXRob2QgY2F1c2VzIHRoZSBoYW5kbGVfZXJyb3IgbWV0aG9kIHRvIGdldCBjYWxsZWQKKyAgICAgICAgdHIyID0gY3Jhc2hpbmdkdW1teSgpCisgICAgICAgIGFzeW5jb3JlLnJlYWQodHIyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyMi5lcnJvcl9oYW5kbGVkLCBUcnVlKQorCisgICAgICAgIHRyMiA9IGNyYXNoaW5nZHVtbXkoKQorICAgICAgICBhc3luY29yZS53cml0ZSh0cjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIyLmVycm9yX2hhbmRsZWQsIFRydWUpCisKKyAgICAgICAgdHIyID0gY3Jhc2hpbmdkdW1teSgpCisgICAgICAgIGFzeW5jb3JlLl9leGNlcHRpb24odHIyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyMi5lcnJvcl9oYW5kbGVkLCBUcnVlKQorCisgICAgIyBhc3luY29yZS5yZWFkd3JpdGUgdXNlcyBjb25zdGFudHMgaW4gdGhlIHNlbGVjdCBtb2R1bGUgdGhhdAorICAgICMgYXJlIG5vdCBwcmVzZW50IGluIFdpbmRvd3Mgc3lzdGVtcyAoc2VlIHRoaXMgdGhyZWFkOgorICAgICMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWxpc3QvMjAwMS1PY3RvYmVyLzEwOTk3My5odG1sKQorICAgICMgVGhlc2UgY29uc3RhbnRzIHNob3VsZCBiZSBwcmVzZW50IGFzIGxvbmcgYXMgcG9sbCBpcyBhdmFpbGFibGUKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpLCAnc2VsZWN0LnBvbGwgcmVxdWlyZWQnKQorICAgIGRlZiB0ZXN0X3JlYWR3cml0ZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGNvcnJlY3QgbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IHJlYWR3cml0ZSgpCisKKyAgICAgICAgYXR0cmlidXRlcyA9ICgncmVhZCcsICdleHB0JywgJ3dyaXRlJywgJ2Nsb3NlZCcsICdlcnJvcl9oYW5kbGVkJykKKworICAgICAgICBleHBlY3RlZCA9ICgKKyAgICAgICAgICAgIChzZWxlY3QuUE9MTElOLCAncmVhZCcpLAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMUFJJLCAnZXhwdCcpLAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMT1VULCAnd3JpdGUnKSwKKyAgICAgICAgICAgIChzZWxlY3QuUE9MTEVSUiwgJ2Nsb3NlZCcpLAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMSFVQLCAnY2xvc2VkJyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExOVkFMLCAnY2xvc2VkJyksCisgICAgICAgICAgICApCisKKyAgICAgICAgY2xhc3MgdGVzdG9iajoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmV4cHQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfaGFuZGxlZCA9IEZhbHNlCisKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfcmVhZF9ldmVudChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWQgPSBUcnVlCisKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfd3JpdGVfZXZlbnQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSA9IFRydWUKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9leHB0X2V2ZW50KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwdCA9IFRydWUKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yX2hhbmRsZWQgPSBUcnVlCisKKyAgICAgICAgZm9yIGZsYWcsIGV4cGVjdGVkYXR0ciBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgIHRvYmogPSB0ZXN0b2JqKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cih0b2JqLCBleHBlY3RlZGF0dHIpLCBGYWxzZSkKKyAgICAgICAgICAgIGFzeW5jb3JlLnJlYWR3cml0ZSh0b2JqLCBmbGFnKQorCisgICAgICAgICAgICAjIE9ubHkgdGhlIGF0dHJpYnV0ZSBtb2RpZmllZCBieSB0aGUgcm91dGluZSB3ZSBleHBlY3QgdG8gYmUKKyAgICAgICAgICAgICMgY2FsbGVkIHNob3VsZCBiZSBUcnVlLgorICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIodG9iaiwgYXR0ciksIGF0dHI9PWV4cGVjdGVkYXR0cikKKworICAgICAgICAgICAgIyBjaGVjayB0aGF0IEV4aXROb3cgZXhjZXB0aW9ucyBpbiB0aGUgb2JqZWN0IGhhbmRsZXIgbWV0aG9kCisgICAgICAgICAgICAjIGJ1YmJsZXMgYWxsIHRoZSB3YXkgdXAgdGhyb3VnaCBhc3luY29yZSByZWFkd3JpdGUgY2FsbAorICAgICAgICAgICAgdHIxID0gZXhpdGluZ2R1bW15KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jb3JlLkV4aXROb3csIGFzeW5jb3JlLnJlYWR3cml0ZSwgdHIxLCBmbGFnKQorCisgICAgICAgICAgICAjIGNoZWNrIHRoYXQgYW4gZXhjZXB0aW9uIG90aGVyIHRoYW4gRXhpdE5vdyBpbiB0aGUgb2JqZWN0IGhhbmRsZXIKKyAgICAgICAgICAgICMgbWV0aG9kIGNhdXNlcyB0aGUgaGFuZGxlX2Vycm9yIG1ldGhvZCB0byBnZXQgY2FsbGVkCisgICAgICAgICAgICB0cjIgPSBjcmFzaGluZ2R1bW15KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIyLmVycm9yX2hhbmRsZWQsIEZhbHNlKQorICAgICAgICAgICAgYXN5bmNvcmUucmVhZHdyaXRlKHRyMiwgZmxhZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIyLmVycm9yX2hhbmRsZWQsIFRydWUpCisKKyAgICBkZWYgdGVzdF9jbG9zZWFsbChzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZWFsbF9jaGVjayhGYWxzZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlYWxsX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2VhbGxfY2hlY2soVHJ1ZSkKKworICAgIGRlZiBjbG9zZWFsbF9jaGVjayhzZWxmLCB1c2VkZWZhdWx0KToKKyAgICAgICAgIyBDaGVjayB0aGF0IGNsb3NlX2FsbCgpIGNsb3NlcyBldmVyeXRoaW5nIGluIGEgZ2l2ZW4gbWFwCisKKyAgICAgICAgbCA9IFtdCisgICAgICAgIHRlc3RtYXAgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBjID0gZHVtbXljaGFubmVsKCkKKyAgICAgICAgICAgIGwuYXBwZW5kKGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc29ja2V0LmNsb3NlZCwgRmFsc2UpCisgICAgICAgICAgICB0ZXN0bWFwW2ldID0gYworCisgICAgICAgIGlmIHVzZWRlZmF1bHQ6CisgICAgICAgICAgICBzb2NrZXRtYXAgPSBhc3luY29yZS5zb2NrZXRfbWFwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYXN5bmNvcmUuc29ja2V0X21hcCA9IHRlc3RtYXAKKyAgICAgICAgICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0ZXN0bWFwLCBhc3luY29yZS5zb2NrZXRfbWFwID0gYXN5bmNvcmUuc29ja2V0X21hcCwgc29ja2V0bWFwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwodGVzdG1hcCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0bWFwKSwgMCkKKworICAgICAgICBmb3IgYyBpbiBsOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNvY2tldC5jbG9zZWQsIFRydWUpCisKKyAgICBkZWYgdGVzdF9jb21wYWN0X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJJIGRvbid0IGxpa2Ugc3BhbSEiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZWFsX3QsIHJlYWxfdiwgcmVhbF90YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICByID0gYXN5bmNvcmUuY29tcGFjdF90cmFjZWJhY2soKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBleGNlcHRpb24iKQorCisgICAgICAgIChmLCBmdW5jdGlvbiwgbGluZSksIHQsIHYsIGluZm8gPSByCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5zcGxpdChmKVstMV0sICd0ZXN0X2FzeW5jb3JlLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jdGlvbiwgJ3Rlc3RfY29tcGFjdF90cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHJlYWxfdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCByZWFsX3YpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mbywgJ1slc3wlc3wlc10nICUgKGYsIGZ1bmN0aW9uLCBsaW5lKSkKKworCitjbGFzcyBEaXNwYXRjaGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoKQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGQgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJlYWRhYmxlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC53cml0YWJsZSgpLCBUcnVlKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZCksICc8YXN5bmNvcmUuZGlzcGF0Y2hlciBhdCAlI3g+JyAlIGlkKGQpKQorCisgICAgZGVmIHRlc3RfbG9nKHNlbGYpOgorICAgICAgICBkID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisKKyAgICAgICAgIyBjYXB0dXJlIG91dHB1dCBvZiBkaXNwYXRjaGVyLmxvZygpICh0byBzdGRlcnIpCisgICAgICAgIGZwID0gU3RyaW5nSU8oKQorICAgICAgICBzdGRlcnIgPSBzeXMuc3RkZXJyCisgICAgICAgIGwxID0gIkxvdmVseSBzcGFtISBXb25kZXJmdWwgc3BhbSEiCisgICAgICAgIGwyID0gIkkgZG9uJ3QgbGlrZSBzcGFtISIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IGZwCisgICAgICAgICAgICBkLmxvZyhsMSkKKyAgICAgICAgICAgIGQubG9nKGwyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN0ZGVycgorCisgICAgICAgIGxpbmVzID0gZnAuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWydsb2c6ICVzJyAlIGwxLCAnbG9nOiAlcycgJSBsMl0pCisKKyAgICBkZWYgdGVzdF9sb2dfaW5mbyhzZWxmKToKKyAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQorCisgICAgICAgICMgY2FwdHVyZSBvdXRwdXQgb2YgZGlzcGF0Y2hlci5sb2dfaW5mbygpICh0byBzdGRvdXQgdmlhIHByaW50KQorICAgICAgICBmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBsMSA9ICJIYXZlIHlvdSBnb3QgYW55dGhpbmcgd2l0aG91dCBzcGFtPyIKKyAgICAgICAgbDIgPSAiV2h5IGNhbid0IHNoZSBoYXZlIGVnZyBiYWNvbiBzcGFtIGFuZCBzYXVzYWdlPyIKKyAgICAgICAgbDMgPSAiVEhBVCdTIGdvdCBzcGFtIGluIGl0ISIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGZwCisgICAgICAgICAgICBkLmxvZ19pbmZvKGwxLCAnRUdHUycpCisgICAgICAgICAgICBkLmxvZ19pbmZvKGwyKQorICAgICAgICAgICAgZC5sb2dfaW5mbyhsMywgJ1NQQU0nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAorCisgICAgICAgIGxpbmVzID0gZnAuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ0VHR1M6ICVzJyAlIGwxLCAnaW5mbzogJXMnICUgbDIsICdTUEFNOiAlcycgJSBsM10KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3VuaGFuZGxlZChzZWxmKToKKyAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQorICAgICAgICBkLmlnbm9yZV9sb2dfdHlwZXMgPSAoKQorCisgICAgICAgICMgY2FwdHVyZSBvdXRwdXQgb2YgZGlzcGF0Y2hlci5sb2dfaW5mbygpICh0byBzdGRvdXQgdmlhIHByaW50KQorICAgICAgICBmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gZnAKKyAgICAgICAgICAgIGQuaGFuZGxlX2V4cHQoKQorICAgICAgICAgICAgZC5oYW5kbGVfcmVhZCgpCisgICAgICAgICAgICBkLmhhbmRsZV93cml0ZSgpCisgICAgICAgICAgICBkLmhhbmRsZV9jb25uZWN0KCkKKyAgICAgICAgICAgIGQuaGFuZGxlX2FjY2VwdCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CisKKyAgICAgICAgbGluZXMgPSBmcC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBleHBlY3RlZCA9IFsnd2FybmluZzogdW5oYW5kbGVkIGluY29taW5nIHByaW9yaXR5IGV2ZW50JywKKyAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmc6IHVuaGFuZGxlZCByZWFkIGV2ZW50JywKKyAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmc6IHVuaGFuZGxlZCB3cml0ZSBldmVudCcsCisgICAgICAgICAgICAgICAgICAgICd3YXJuaW5nOiB1bmhhbmRsZWQgY29ubmVjdCBldmVudCcsCisgICAgICAgICAgICAgICAgICAgICd3YXJuaW5nOiB1bmhhbmRsZWQgYWNjZXB0IGV2ZW50J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pc3N1ZV84NTk0KHNlbGYpOgorICAgICAgICAjIFhYWCAtIHRoaXMgdGVzdCBpcyBzdXBwb3NlZCB0byBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgUHl0aG9uCisgICAgICAgICMgdmVyc2lvbgorICAgICAgICBkID0gYXN5bmNvcmUuZGlzcGF0Y2hlcihzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICMgbWFrZSBzdXJlIHRoZSBlcnJvciBtZXNzYWdlIG5vIGxvbmdlciByZWZlcnMgdG8gdGhlIHNvY2tldAorICAgICAgICAjIG9iamVjdCBidXQgdGhlIGRpc3BhdGNoZXIgaW5zdGFuY2UgaW5zdGVhZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChBdHRyaWJ1dGVFcnJvciwgJ2Rpc3BhdGNoZXIgaW5zdGFuY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyLCBkLCAnZm9vJykKKyAgICAgICAgIyBjaGVhcCBpbmhlcml0YW5jZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBpcyBzdXBwb3NlZAorICAgICAgICAjIHRvIHN0aWxsIHdvcmsgYnV0IGEgRGVwcmVjYXRpb25XYXJuaW5nIGlzIGV4cGVjdGVkCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCisgICAgICAgICAgICBmYW1pbHkgPSBkLmZhbWlseQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh3WzBdLmNhdGVnb3J5LCBEZXByZWNhdGlvbldhcm5pbmcpKQorCisgICAgZGVmIHRlc3Rfc3RyZXJyb3Ioc2VsZik6CisgICAgICAgICMgcmVmZXJzIHRvIGJ1ZyAjODU3MworICAgICAgICBlcnIgPSBhc3luY29yZS5fc3RyZXJyb3IoZXJybm8uRVBFUk0pCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdzdHJlcnJvcicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIG9zLnN0cmVycm9yKGVycm5vLkVQRVJNKSkKKyAgICAgICAgZXJyID0gYXN5bmNvcmUuX3N0cmVycm9yKC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyICE9ICIiKQorCisKK2NsYXNzIGRpc3BhdGNoZXJ3aXRoc2VuZF9ub3JlYWQoYXN5bmNvcmUuZGlzcGF0Y2hlcl93aXRoX3NlbmQpOgorICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHBhc3MKKworY2xhc3MgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHVzZXBvbGwgPSBGYWxzZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEB0ZXN0X3N1cHBvcnQucmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3Rfc2VuZChzZWxmKToKKyAgICAgICAgZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29jay5zZXR0aW1lb3V0KDMpCisgICAgICAgIHBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNvY2spCisKKyAgICAgICAgY2FwID0gU3RyaW5nSU8oKQorICAgICAgICBhcmdzID0gKGV2dCwgY2FwLCBzb2NrKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y2FwdHVyZV9zZXJ2ZXIsIGFyZ3M9YXJncykKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgd2FpdCBhIGxpdHRsZSBsb25nZXIgZm9yIHRoZSBzZXJ2ZXIgdG8gaW5pdGlhbGl6ZSAoaXQgc29tZXRpbWVzCisgICAgICAgICAgICAjIHJlZnVzZXMgY29ubmVjdGlvbnMgb24gc2xvdyBtYWNoaW5lcyB3aXRob3V0IHRoaXMgd2FpdCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQorCisgICAgICAgICAgICBkYXRhID0gIlN1cHBvc2UgdGhlcmUgaXNuJ3QgYSAxNi10b24gd2VpZ2h0PyIKKyAgICAgICAgICAgIGQgPSBkaXNwYXRjaGVyd2l0aHNlbmRfbm9yZWFkKCkKKyAgICAgICAgICAgIGQuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgZC5jb25uZWN0KChIT1NULCBwb3J0KSkKKworICAgICAgICAgICAgIyBnaXZlIHRpbWUgZm9yIHNvY2tldCB0byBjb25uZWN0CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgICAgICAgICAgZC5zZW5kKGRhdGEpCisgICAgICAgICAgICBkLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGQuc2VuZCgnXG4nKQorCisgICAgICAgICAgICBuID0gMTAwMAorICAgICAgICAgICAgd2hpbGUgZC5vdXRfYnVmZmVyIGFuZCBuID4gMDoKKyAgICAgICAgICAgICAgICBhc3luY29yZS5wb2xsKCkKKyAgICAgICAgICAgICAgICBuIC09IDEKKworICAgICAgICAgICAgZXZ0LndhaXQoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcC5nZXR2YWx1ZSgpLCBkYXRhKjIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0LmpvaW4oKQorCisKK2NsYXNzIERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzX1VzZVBvbGwoRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHMpOgorICAgIHVzZXBvbGwgPSBUcnVlCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoYXN5bmNvcmUsICdmaWxlX3dyYXBwZXInKSwKKyAgICAgICAgICAgICAgICAgICAgICdhc3luY29yZS5maWxlX3dyYXBwZXIgcmVxdWlyZWQnKQorY2xhc3MgRmlsZVdyYXBwZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9ICJJdCdzIG5vdCBkZWFkLCBpdCdzIHNsZWVwaW5nISIKKyAgICAgICAgd2l0aCBmaWxlKFRFU1RGTiwgJ3cnKSBhcyBoOgorICAgICAgICAgICAgaC53cml0ZShzZWxmLmQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdF9yZWN2KHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgdyA9IGFzeW5jb3JlLmZpbGVfd3JhcHBlcihmZCkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh3LmZkLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh3LmZpbGVubygpLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnJlY3YoMTMpLCAiSXQncyBub3QgZGVhZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5yZWFkKDYpLCAiLCBpdCdzIikKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHcucmVhZCwgMSkKKworCisgICAgZGVmIHRlc3Rfc2VuZChzZWxmKToKKyAgICAgICAgZDEgPSAiQ29tZSBhZ2Fpbj8iCisgICAgICAgIGQyID0gIkkgd2FudCB0byBidXkgc29tZSBjaGVlc2UuIgorICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1dST05MWSB8IG9zLk9fQVBQRU5EKQorICAgICAgICB3ID0gYXN5bmNvcmUuZmlsZV93cmFwcGVyKGZkKQorICAgICAgICBvcy5jbG9zZShmZCkKKworICAgICAgICB3LndyaXRlKGQxKQorICAgICAgICB3LnNlbmQoZDIpCisgICAgICAgIHcuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUoVEVTVEZOKS5yZWFkKCksIHNlbGYuZCArIGQxICsgZDIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGFzeW5jb3JlLCAnZmlsZV9kaXNwYXRjaGVyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlciByZXF1aXJlZCcpCisgICAgZGVmIHRlc3RfZGlzcGF0Y2hlcihzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19SRE9OTFkpCisgICAgICAgIGRhdGEgPSBbXQorICAgICAgICBjbGFzcyBGaWxlRGlzcGF0Y2hlcihhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHNlbGYucmVjdigyOSkpCisgICAgICAgIHMgPSBGaWxlRGlzcGF0Y2hlcihmZCkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjAxLCB1c2VfcG9sbD1UcnVlLCBjb3VudD0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIi5qb2luKGRhdGEpLCBzZWxmLmQpCisKKworY2xhc3MgQmFzZVRlc3RIYW5kbGVyKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2s9Tm9uZSk6CisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgc29jaykKKyAgICAgICAgc2VsZi5mbGFnID0gRmFsc2UKKworICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oImhhbmRsZV9hY2NlcHQgbm90IHN1cHBvc2VkIHRvIGJlIGNhbGxlZCIpCisKKyAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiaGFuZGxlX2Nvbm5lY3Qgbm90IHN1cHBvc2VkIHRvIGJlIGNhbGxlZCIpCisKKyAgICBkZWYgaGFuZGxlX2V4cHQoc2VsZik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiaGFuZGxlX2V4cHQgbm90IHN1cHBvc2VkIHRvIGJlIGNhbGxlZCIpCisKKyAgICBkZWYgaGFuZGxlX2Nsb3NlKHNlbGYpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oImhhbmRsZV9jbG9zZSBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKworY2xhc3MgVENQU2VydmVyKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorICAgICIiIkEgc2VydmVyIHdoaWNoIGxpc3RlbnMgb24gYW4gYWRkcmVzcyBhbmQgZGlzcGF0Y2hlcyB0aGUKKyAgICBjb25uZWN0aW9uIHRvIGEgaGFuZGxlci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGVyPUJhc2VUZXN0SGFuZGxlciwgaG9zdD1IT1NULCBwb3J0PTApOgorICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnNldF9yZXVzZV9hZGRyKCkKKyAgICAgICAgc2VsZi5iaW5kKChob3N0LCBwb3J0KSkKKyAgICAgICAgc2VsZi5saXN0ZW4oNSkKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFkZHJlc3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzoyXQorCisgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLmFjY2VwdCgpCisgICAgICAgIGlmIHBhaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIocGFpclswXSkKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKworY2xhc3MgQmFzZUNsaWVudChCYXNlVGVzdEhhbmRsZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuY29ubmVjdChhZGRyZXNzKQorCisgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgQmFzZVRlc3RBUEkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoKQorCisgICAgZGVmIGxvb3Bfd2FpdGluZ19mb3JfZmxhZyhzZWxmLCBpbnN0YW5jZSwgdGltZW91dD01KToKKyAgICAgICAgdGltZW91dCA9IGZsb2F0KHRpbWVvdXQpIC8gMTAwCisgICAgICAgIGNvdW50ID0gMTAwCisgICAgICAgIHdoaWxlIGFzeW5jb3JlLnNvY2tldF9tYXAgYW5kIGNvdW50ID4gMDoKKyAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjAxLCBjb3VudD0xLCB1c2VfcG9sbD1zZWxmLnVzZV9wb2xsKQorICAgICAgICAgICAgaWYgaW5zdGFuY2UuZmxhZzoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGNvdW50IC09IDEKKyAgICAgICAgICAgIHRpbWUuc2xlZXAodGltZW91dCkKKyAgICAgICAgc2VsZi5mYWlsKCJmbGFnIG5vdCBzZXQiKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGhhbmRsZV9jb25uZWN0IGlzIGNhbGxlZCBvbiBjb25uZWN0KCkKKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfYWNjZXB0KCkgaXMgY2FsbGVkIHdoZW4gYSBjbGllbnQgY29ubmVjdHMKKworICAgICAgICBjbGFzcyBUZXN0TGlzdGVuZXIoQmFzZVRlc3RIYW5kbGVyKToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIEJhc2VUZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgICAgIHNlbGYuYmluZCgoSE9TVCwgMCkpCisgICAgICAgICAgICAgICAgc2VsZi5saXN0ZW4oNSkKKyAgICAgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzoyXQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisKKyAgICAgICAgc2VydmVyID0gVGVzdExpc3RlbmVyKCkKKyAgICAgICAgY2xpZW50ID0gQmFzZUNsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoc2VydmVyKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGhhbmRsZV9yZWFkIGlzIGNhbGxlZCBvbiBkYXRhIHJlY2VpdmVkCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisKKyAgICAgICAgY2xhc3MgVGVzdEhhbmRsZXIoQmFzZVRlc3RIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKKyAgICAgICAgICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmQoJ3gnICogMTAyNCkKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoVGVzdEhhbmRsZXIpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV93cml0ZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgaGFuZGxlX3dyaXRlIGlzIGNhbGxlZAorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQoQmFzZUNsaWVudCk6CisgICAgICAgICAgICBkZWYgaGFuZGxlX3dyaXRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfY2xvc2Uoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGhhbmRsZV9jbG9zZSBpcyBjYWxsZWQgd2hlbiB0aGUgb3RoZXIgZW5kIGNsb3NlcworICAgICAgICAjIHRoZSBjb25uZWN0aW9uCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAgICAgICAgICMgaW4gb3JkZXIgdG8gbWFrZSBoYW5kbGVfY2xvc2UgYmUgY2FsbGVkIHdlIGFyZSBzdXBwb3NlZAorICAgICAgICAgICAgICAgICMgdG8gbWFrZSBhdCBsZWFzdCBvbmUgcmVjdigpIGNhbGwKKyAgICAgICAgICAgICAgICBzZWxmLnJlY3YoMTAyNCkKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICAgICAgY2xhc3MgVGVzdEhhbmRsZXIoQmFzZVRlc3RIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKKyAgICAgICAgICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoVGVzdEhhbmRsZXIpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoInN1bm9zIiksCisgICAgICAgICAgICAgICAgICAgICAiT09CIHN1cHBvcnQgaXMgYnJva2VuIG9uIFNvbGFyaXMiKQorICAgIGRlZiB0ZXN0X2hhbmRsZV9leHB0KHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBoYW5kbGVfZXhwdCBpcyBjYWxsZWQgb24gT09CIGRhdGEgcmVjZWl2ZWQuCisgICAgICAgICMgTm90ZTogdGhpcyBtaWdodCBmYWlsIG9uIHNvbWUgcGxhdGZvcm1zIGFzIE9PQiBkYXRhIGlzCisgICAgICAgICMgdGVudW91c2x5IHN1cHBvcnRlZCBhbmQgcmFyZWx5IHVzZWQuCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfZXhwdChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisKKyAgICAgICAgY2xhc3MgVGVzdEhhbmRsZXIoQmFzZVRlc3RIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKKyAgICAgICAgICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKGNocigyNDQpLCBzb2NrZXQuTVNHX09PQikKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoVGVzdEhhbmRsZXIpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9lcnJvcihzZWxmKToKKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV93cml0ZShzZWxmKToKKyAgICAgICAgICAgICAgICAxLjAgLyAwCisgICAgICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJleGNlcHRpb24gbm90IHJhaXNlZCIpCisKKyAgICAgICAgc2VydmVyID0gVENQU2VydmVyKCkKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgZGVmIHRlc3RfY29ubmVjdGlvbl9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICBjbGllbnQgPSBCYXNlQ2xpZW50KHNlcnZlci5hZGRyZXNzKQorCisgICAgICAgICMgd2Ugc3RhcnQgZGlzY29ubmVjdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VydmVyLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnZlci5hY2NlcHRpbmcpCisgICAgICAgICMgdGhpcyBjYW4ndCBiZSB0YWtlbiBmb3IgZ3JhbnRlZCBhY3Jvc3MgYWxsIHBsYXRmb3JtcworICAgICAgICAjc2VsZi5hc3NlcnRGYWxzZShjbGllbnQuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5hY2NlcHRpbmcpCisKKyAgICAgICAgIyBleGVjdXRlIHNvbWUgbG9vcHMgc28gdGhhdCBjbGllbnQgY29ubmVjdHMgdG8gc2VydmVyCisgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjAxLCB1c2VfcG9sbD1zZWxmLnVzZV9wb2xsLCBjb3VudD0xMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VydmVyLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnZlci5hY2NlcHRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbGllbnQuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5hY2NlcHRpbmcpCisKKyAgICAgICAgIyBkaXNjb25uZWN0IHRoZSBjbGllbnQKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXJ2ZXIuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyLmFjY2VwdGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbGllbnQuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5hY2NlcHRpbmcpCisKKyAgICAgICAgIyBzdG9wIHNlcnZpbmcKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXJ2ZXIuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcnZlci5hY2NlcHRpbmcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc29ja2V0KHNlbGYpOgorICAgICAgICBzID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisgICAgICAgIHMuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LmZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zb2NrZXQudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorCisgICAgZGVmIHRlc3RfYmluZChzZWxmKToKKyAgICAgICAgczEgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKKyAgICAgICAgczEuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzMS5iaW5kKChIT1NULCAwKSkKKyAgICAgICAgczEubGlzdGVuKDUpCisgICAgICAgIHBvcnQgPSBzMS5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQorCisgICAgICAgIHMyID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisgICAgICAgIHMyLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgIyBFQUREUklOVVNFIGluZGljYXRlcyB0aGUgc29ja2V0IHdhcyBjb3JyZWN0bHkgYm91bmQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzMi5iaW5kLCAoSE9TVCwgcG9ydCkpCisKKyAgICBkZWYgdGVzdF9zZXRfcmV1c2VfYWRkcihzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICB1bml0dGVzdC5za2lwKCJTT19SRVVTRUFERFIgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgaWYgU09fUkVVU0VBRERSIHN1Y2NlZWRlZCBmb3Igc29jayB3ZSBleHBlY3QgYXN5bmNvcmUKKyAgICAgICAgICAgICMgdG8gZG8gdGhlIHNhbWUKKyAgICAgICAgICAgIHMgPSBhc3luY29yZS5kaXNwYXRjaGVyKHNvY2tldC5zb2NrZXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zb2NrZXQuZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSKSkKKyAgICAgICAgICAgIHMuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgcy5zZXRfcmV1c2VfYWRkcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zb2NrZXQuZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBAdGVzdF9zdXBwb3J0LnJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X3F1aWNrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgICMgc2VlOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTAzNDAKKyAgICAgICAgc2VydmVyID0gVENQU2VydmVyKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYTogYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMSwgY291bnQ9NTAwKSkKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0LmpvaW4pCisKKyAgICAgICAgZm9yIHggaW4geHJhbmdlKDIwKToKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzLnNldHRpbWVvdXQoLjIpCisgICAgICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19MSU5HRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soJ2lpJywgMSwgMCkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0KHNlcnZlci5hZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisKK2NsYXNzIFRlc3RBUElfVXNlU2VsZWN0KEJhc2VUZXN0QVBJKToKKyAgICB1c2VfcG9sbCA9IEZhbHNlCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpLCAnc2VsZWN0LnBvbGwgcmVxdWlyZWQnKQorY2xhc3MgVGVzdEFQSV9Vc2VQb2xsKEJhc2VUZXN0QVBJKToKKyAgICB1c2VfcG9sbCA9IFRydWUKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbSGVscGVyRnVuY3Rpb25UZXN0cywgRGlzcGF0Y2hlclRlc3RzLCBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0cywKKyAgICAgICAgICAgICBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsLCBUZXN0QVBJX1VzZVNlbGVjdCwKKyAgICAgICAgICAgICBUZXN0QVBJX1VzZVBvbGwsIEZpbGVXcmFwcGVyVGVzdF0KKyAgICBydW5fdW5pdHRlc3QoKnRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4NWI3NQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQpAQCAtMCwwICsxLDgyIEBACitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IGF0ZXhpdAorZnJvbSBpbXAgaW1wb3J0IHJlbG9hZAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5zYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5zYXZlX3N0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIgPSBzZWxmLnN1YnN0X2lvID0gcworICAgICAgICBzZWxmLnNhdmVfaGFuZGxlcnMgPSBhdGV4aXQuX2V4aXRoYW5kbGVycworICAgICAgICBhdGV4aXQuX2V4aXRoYW5kbGVycyA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLnNhdmVfc3Rkb3V0CisgICAgICAgIHN5cy5zdGRlcnIgPSBzZWxmLnNhdmVfc3RkZXJyCisgICAgICAgIGF0ZXhpdC5fZXhpdGhhbmRsZXJzID0gc2VsZi5zYXZlX2hhbmRsZXJzCisKKyAgICBkZWYgdGVzdF9hcmdzKHNlbGYpOgorICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5oMSkKKyAgICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYuaDQpCisgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihzZWxmLmg0LCA0LCBrdz0iYWJjIikKKyAgICAgICAgYXRleGl0Ll9ydW5fZXhpdGZ1bmNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1YnN0X2lvLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImg0ICg0LCkgeydrdyc6ICdhYmMnfVxuaDQgKCkge31cbmgxXG4iKQorCisgICAgZGVmIHRlc3RfYmFkYXJncyhzZWxmKToKKyAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGxhbWJkYTogMSwgMCwgMCwgKHggZm9yIHggaW4gKDEsMikpLCAwLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF0ZXhpdC5fcnVuX2V4aXRmdW5jcykKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5oMSkKKyAgICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYuaDIpCisgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihzZWxmLmgzKQorICAgICAgICBhdGV4aXQuX3J1bl9leGl0ZnVuY3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3Vic3RfaW8uZ2V0dmFsdWUoKSwgImgzXG5oMlxuaDFcbiIpCisKKyAgICBkZWYgdGVzdF9zeXNfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgICMgYmUgc3VyZSBhIHByZXNldCBzeXMuZXhpdGZ1bmMgaXMgaGFuZGxlZCBwcm9wZXJseQorICAgICAgICBleGZ1bmMgPSBzeXMuZXhpdGZ1bmMKKyAgICAgICAgc3lzLmV4aXRmdW5jID0gc2VsZi5oMQorICAgICAgICByZWxvYWQoYXRleGl0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5oMikKKyAgICAgICAgICAgIGF0ZXhpdC5fcnVuX2V4aXRmdW5jcygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuZXhpdGZ1bmMgPSBleGZ1bmMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1YnN0X2lvLmdldHZhbHVlKCksICJoMlxuaDFcbiIpCisKKyAgICBkZWYgdGVzdF9yYWlzZShzZWxmKToKKyAgICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYucmFpc2UxKQorICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5yYWlzZTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXRleGl0Ll9ydW5fZXhpdGZ1bmNzKQorCisgICAgIyMjIGhlbHBlcnMKKyAgICBkZWYgaDEoc2VsZik6CisgICAgICAgIHByaW50ICJoMSIKKworICAgIGRlZiBoMihzZWxmKToKKyAgICAgICAgcHJpbnQgImgyIgorCisgICAgZGVmIGgzKHNlbGYpOgorICAgICAgICBwcmludCAiaDMiCisKKyAgICBkZWYgaDQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcHJpbnQgImg0IiwgYXJncywga3dhcmdzCisKKyAgICBkZWYgcmFpc2UxKHNlbGYpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IKKworICAgIGRlZiByYWlzZTIoc2VsZik6CisgICAgICAgIHJhaXNlIFN5c3RlbUVycm9yCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YTUxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CkBAIC0wLDAgKzEsMzkzIEBACitpbXBvcnQgYXVkaW9vcAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3RydWN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworCitmb3JtYXRzID0geworICAgIDE6ICdiJywKKyAgICAyOiAnaCcsCisgICAgNDogJ2knLAorfQorCitkZWYgcGFjayh3aWR0aCwgZGF0YSk6CisgICAgcmV0dXJuIHN0cnVjdC5wYWNrKCc9JWQlcycgJSAobGVuKGRhdGEpLCBmb3JtYXRzW3dpZHRoXSksICpkYXRhKQorCitwYWNrcyA9IHsKKyAgICAxOiBsYW1iZGEgKmRhdGE6IHBhY2soMSwgZGF0YSksCisgICAgMjogbGFtYmRhICpkYXRhOiBwYWNrKDIsIGRhdGEpLAorICAgIDQ6IGxhbWJkYSAqZGF0YTogcGFjayg0LCBkYXRhKSwKK30KK21heHZhbHVlcyA9IHt3OiAoMSA8PCAoOCAqIHcgLSAxKSkgLSAxIGZvciB3IGluICgxLCAyLCA0KX0KK21pbnZhbHVlcyA9IHt3OiAtMSA8PCAoOCAqIHcgLSAxKSBmb3IgdyBpbiAoMSwgMiwgNCl9CisKK2RhdGFzID0geworICAgIDE6IGInXHgwMFx4MTJceDQ1XHhiYlx4N2ZceDgwXHhmZicsCisgICAgMjogcGFja3NbMl0oMCwgMHgxMjM0LCAweDQ1NjcsIC0weDQ1NjcsIDB4N2ZmZiwgLTB4ODAwMCwgLTEpLAorICAgIDQ6IHBhY2tzWzRdKDAsIDB4MTIzNDU2NzgsIDB4NDU2Nzg5YWIsIC0weDQ1Njc4OWFiLAorICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMSksCit9CisKK0lOVkFMSURfREFUQSA9IFsKKyAgICAoYidhYmMnLCAwKSwKKyAgICAoYidhYmMnLCAyKSwKKyAgICAoYidhYmMnLCA0KSwKK10KKworCitjbGFzcyBUZXN0QXVkaW9vcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9tYXgoc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KGInJywgdyksIDApCisgICAgICAgICAgICBwID0gcGFja3Nbd10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgocCg1KSwgdyksIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KHAoNSwgLTgsIC0xKSwgdyksIDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KHAobWF4dmFsdWVzW3ddKSwgdyksIG1heHZhbHVlc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgocChtaW52YWx1ZXNbd10pLCB3KSwgLW1pbnZhbHVlc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoZGF0YXNbd10sIHcpLCAtbWludmFsdWVzW3ddKQorCisgICAgZGVmIHRlc3RfbWlubWF4KHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChiJycsIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApKQorICAgICAgICAgICAgcCA9IHBhY2tzW3ddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KHAoNSksIHcpLCAoNSwgNSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KHAoNSwgLTgsIC0xKSwgdyksICgtOCwgNSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KHAobWF4dmFsdWVzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXh2YWx1ZXNbd10sIG1heHZhbHVlc1t3XSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KHAobWludmFsdWVzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaW52YWx1ZXNbd10sIG1pbnZhbHVlc1t3XSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KGRhdGFzW3ddLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1pbnZhbHVlc1t3XSwgbWF4dmFsdWVzW3ddKSkKKworICAgIGRlZiB0ZXN0X21heHBwKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKGInJywgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAocGFja3Nbd10oKnJhbmdlKDEwMCkpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChwYWNrc1t3XSg5LCAxMCwgNSwgNSwgMCwgMSksIHcpLCAxMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChkYXRhc1t3XSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heHZhbHVlc1t3XSAtIG1pbnZhbHVlc1t3XSkKKworICAgIGRlZiB0ZXN0X2F2ZyhzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHAgPSBwYWNrc1t3XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKDUpLCB3KSwgNSkKKyAgICAgICAgICAgIHNlbGYgLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKHAoNSwgOCksIHcpLCA2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKDUsIC04KSwgdyksIC0yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKG1heHZhbHVlc1t3XSwgbWF4dmFsdWVzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heHZhbHVlc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcocChtaW52YWx1ZXNbd10sIG1pbnZhbHVlc1t3XSksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW52YWx1ZXNbd10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcocGFja3NbNF0oMHg1MDAwMDAwMCwgMHg3MDAwMDAwMCksIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcocGFja3NbNF0oLTB4NTAwMDAwMDAsIC0weDcwMDAwMDAwKSwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgLTB4NjAwMDAwMDApCisKKyAgICBkZWYgdGVzdF9hdmdwcChzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKHBhY2tzW3ddKCpyYW5nZSgxMDApKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAocGFja3Nbd10oOSwgMTAsIDUsIDUsIDAsIDEpLCB3KSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1sxXSwgMSksIDE5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzJdLCAyKSwgNTA1MzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1s0XSwgNCksIDMzMTE4OTcwMDIpCisKKyAgICBkZWYgdGVzdF9ybXMoc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGInJywgdyksIDApCisgICAgICAgICAgICBwID0gcGFja3Nbd10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMocCgqcmFuZ2UoMTAwKSksIHcpLCA1NykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYXVkaW9vcC5ybXMocChtYXh2YWx1ZXNbd10pICogNSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heHZhbHVlc1t3XSwgZGVsdGE9MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYXVkaW9vcC5ybXMocChtaW52YWx1ZXNbd10pICogNSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1taW52YWx1ZXNbd10sIGRlbHRhPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbMV0sIDEpLCA3NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1syXSwgMiksIDIwMDAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzRdLCA0KSwgMTMxMDg1NDE1MikKKworICAgIGRlZiB0ZXN0X2Nyb3NzKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKGInJywgdyksIC0xKQorICAgICAgICAgICAgcCA9IHBhY2tzW3ddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocCgwLCAxLCAyKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocCgxLCAyLCAtMywgLTQpLCB3KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhwKC0xLCAtMiwgMywgNCksIHcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoMCwgbWludmFsdWVzW3ddKSwgdyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocChtaW52YWx1ZXNbd10sIG1heHZhbHVlc1t3XSksIHcpLCAxKQorCisgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChiJycsIGInJywgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbd10sIGInXDAnICogbGVuKGRhdGFzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzW3ddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzFdLCBkYXRhc1sxXSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwXHgyNFx4N2ZceDgwXHg3Zlx4ODBceGZlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1syXSwgZGF0YXNbMl0sIDIpLAorICAgICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MjQ2OCwgMHg3ZmZmLCAtMHg4MDAwLCAweDdmZmYsIC0weDgwMDAsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1s0XSwgZGF0YXNbNF0sIDQpLAorICAgICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MjQ2OGFjZjAsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwgLTIpKQorCisgICAgZGVmIHRlc3RfYmlhcyhzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIGZvciBiaWFzIGluIDAsIDEsIC0xLCAxMjcsIC0xMjgsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGInJywgdywgYmlhcyksIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMVx4MTNceDQ2XHhiY1x4ODBceDgxXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzFdLCAxLCAtMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHgxMVx4NDRceGJhXHg3ZVx4N2ZceGZlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIDB4N2ZmZmZmZmYpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4MTFceDQ0XHhiYVx4N2VceDdmXHhmZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzFdLCAxLCAtMHg4MDAwMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzJdLCAyLCAxKSwKKyAgICAgICAgICAgICAgICBwYWNrc1syXSgxLCAweDEyMzUsIDB4NDU2OCwgLTB4NDU2NiwgLTB4ODAwMCwgLTB4N2ZmZiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzJdLCAyLCAtMSksCisgICAgICAgICAgICAgICAgcGFja3NbMl0oLTEsIDB4MTIzMywgMHg0NTY2LCAtMHg0NTY4LCAweDdmZmUsIDB4N2ZmZiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1syXSwgMiwgMHg3ZmZmZmZmZiksCisgICAgICAgICAgICAgICAgcGFja3NbMl0oLTEsIDB4MTIzMywgMHg0NTY2LCAtMHg0NTY4LCAweDdmZmUsIDB4N2ZmZiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1syXSwgMiwgLTB4ODAwMDAwMDApLAorICAgICAgICAgICAgICAgIGRhdGFzWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1s0XSwgNCwgMSksCisgICAgICAgICAgICAgICAgcGFja3NbNF0oMSwgMHgxMjM0NTY3OSwgMHg0NTY3ODlhYywgLTB4NDU2Nzg5YWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODAwMDAwMDAsIC0weDdmZmZmZmZmLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbNF0sIDQsIC0xKSwKKyAgICAgICAgICAgICAgICBwYWNrc1s0XSgtMSwgMHgxMjM0NTY3NywgMHg0NTY3ODlhYSwgLTB4NDU2Nzg5YWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZSwgMHg3ZmZmZmZmZiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1s0XSwgNCwgMHg3ZmZmZmZmZiksCisgICAgICAgICAgICAgICAgcGFja3NbNF0oMHg3ZmZmZmZmZiwgLTB4NmRjYmE5ODksIC0weDNhOTg3NjU2LCAweDNhOTg3NjU0LAorICAgICAgICAgICAgICAgICAgICAgICAgIC0yLCAtMSwgMHg3ZmZmZmZmZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzRdLCA0LCAtMHg4MDAwMDAwMCksCisgICAgICAgICAgICAgICAgcGFja3NbNF0oLTB4ODAwMDAwMDAsIC0weDZkY2JhOTg4LCAtMHgzYTk4NzY1NSwgMHgzYTk4NzY1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCwgMHg3ZmZmZmZmZikpCisKKyAgICBkZWYgdGVzdF9saW4ybGluKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbd10sIHcsIHcpLCBkYXRhc1t3XSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1sxXSwgMSwgMiksCisgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMDAsIDB4NDUwMCwgLTB4NDUwMCwgMHg3ZjAwLCAtMHg4MDAwLCAtMHgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1sxXSwgMSwgNCksCisgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMDAwMDAwLCAweDQ1MDAwMDAwLCAtMHg0NTAwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAsIC0weDgwMDAwMDAwLCAtMHgxMDAwMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMl0sIDIsIDEpLAorICAgICAgICAgICAgYidceDAwXHgxMlx4NDVceGJhXHg3Zlx4ODBceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMl0sIDIsIDQpLAorICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgxMjM0MDAwMCwgMHg0NTY3MDAwMCwgLTB4NDU2NzAwMDAsCisgICAgICAgICAgICAgICAgICAgICAweDdmZmYwMDAwLCAtMHg4MDAwMDAwMCwgLTB4MTAwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMSksCisgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMiksCisgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2OCwgMHg3ZmZmLCAtMHg4MDAwLCAtMSkpCisKKyAgICBkZWYgdGVzdF9hZHBjbTJsaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDAwXHgwMFx4MDBceGZmXHgwMFx4ZmYnLCAoLTE3OSwgNDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDIsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1syXSgwLCAweGIsIDB4MjksIC0weDE2LCAweDcyLCAtMHhiMyksICgtMTc5LCA0MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgNCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2tzWzRdKDAsIDB4YjAwMDAsIDB4MjkwMDAwLCAtMHgxNjAwMDAsIDB4NzIwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMHhiMzAwMDApLCAoLTE3OSwgNDApKSkKKworICAgICAgICAjIFZlcnkgY3Vyc29yeSB0ZXN0CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXDAnICogNSwgdywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1wwJyAqIHcgKiAxMCwgKDAsIDApKSkKKworICAgIGRlZiB0ZXN0X2xpbjJhZHBjbShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1sxXSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKC0yMjEsIDM5KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbMl0sIDIsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgzMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1s0XSwgNCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQorCisgICAgICAgICMgVmVyeSBjdXJzb3J5IHRlc3QKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oYidcMCcgKiB3ICogMTAsIHcsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiA1LCAoMCwgMCkpKQorCisgICAgZGVmIHRlc3RfbGluMmFsYXcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1sxXSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDVhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzJdLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbNF0sIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCisKKyAgICBkZWYgdGVzdF9hbGF3MmxpbihzZWxmKToKKyAgICAgICAgZW5jb2RlZCA9IGInXHgwMFx4MDNceDI0XHgyYVx4NTFceDU0XHg1NVx4NThceDZiXHg3MVx4N2YnXAorICAgICAgICAgICAgICAgICAgYidceDgwXHg4M1x4YTRceGFhXHhkMVx4ZDRceGQ1XHhkOFx4ZWJceGYxXHhmZicKKyAgICAgICAgc3JjID0gWy02ODgsIC03MjAsIC0yMjQwLCAtNDAzMiwgLTksIC0zLCAtMSwgLTI3LCAtMjQ0LCAtODIsIC0xMDYsCisgICAgICAgICAgICAgICA2ODgsIDcyMCwgMjI0MCwgNDAzMiwgOSwgMywgMSwgMjcsIDI0NCwgODIsIDEwNl0KKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihlbmNvZGVkLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTMgZm9yIHggaW4gc3JjKSkpCisKKyAgICAgICAgZW5jb2RlZCA9ICcnLmpvaW4oY2hyKHgpIGZvciB4IGluIHhyYW5nZSgyNTYpKQorICAgICAgICBmb3IgdyBpbiAyLCA0OgorICAgICAgICAgICAgZGVjb2RlZCA9IGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkZWNvZGVkLCB3KSwgZW5jb2RlZCkKKworICAgIGRlZiB0ZXN0X2xpbjJ1bGF3KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbMV0sIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg2NycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1syXSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzRdLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4N2UnKQorCisgICAgZGVmIHRlc3RfdWxhdzJsaW4oc2VsZik6CisgICAgICAgIGVuY29kZWQgPSBiJ1x4MDBceDBlXHgyOFx4M2ZceDU3XHg2YVx4NzZceDdjXHg3ZVx4N2YnXAorICAgICAgICAgICAgICAgICAgYidceDgwXHg4ZVx4YThceGJmXHhkN1x4ZWFceGY2XHhmY1x4ZmVceGZmJworICAgICAgICBzcmMgPSBbLTgwMzEsIC00NDQ3LCAtMTQ3MSwgLTQ5NSwgLTE2MywgLTUzLCAtMTgsIC02LCAtMiwgMCwKKyAgICAgICAgICAgICAgIDgwMzEsIDQ0NDcsIDE0NzEsIDQ5NSwgMTYzLCA1MywgMTgsIDYsIDIsIDBdCisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudWxhdzJsaW4oZW5jb2RlZCwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDE0IGZvciB4IGluIHNyYykpKQorCisgICAgICAgICMgQ3VycmVudCB1LWxhdyBpbXBsZW1lbnRhdGlvbiBoYXMgdHdvIGNvZGVzIGZvIDA6IDB4N2YgYW5kIDB4ZmYuCisgICAgICAgIGVuY29kZWQgPSAnJy5qb2luKGNocih4KSBmb3IgeCBpbiByYW5nZSgxMjcpICsgcmFuZ2UoMTI4LCAyNTYpKQorICAgICAgICBmb3IgdyBpbiAyLCA0OgorICAgICAgICAgICAgZGVjb2RlZCA9IGF1ZGlvb3AudWxhdzJsaW4oZW5jb2RlZCwgdykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkZWNvZGVkLCB3KSwgZW5jb2RlZCkKKworICAgIGRlZiB0ZXN0X211bChzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoYicnLCB3LCAyKSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1t3XSwgdywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXDAnICogbGVuKGRhdGFzW3ddKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbd10sIHcsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1sxXSwgMSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwXHgyNFx4N2ZceDgwXHg3Zlx4ODBceGZlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1syXSwgMiwgMiksCisgICAgICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgyNDY4LCAweDdmZmYsIC0weDgwMDAsIDB4N2ZmZiwgLTB4ODAwMCwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzRdLCA0LCAyKSwKKyAgICAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDI0NjhhY2YwLCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwgLTIpKQorCisgICAgZGVmIHRlc3RfcmF0ZWN2KHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihiJycsIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihiJycsIHcsIDUsIDgwMDAsIDgwMDAsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSAqIDUpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCAxLCA4MDAwLCAxNjAwMCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMiwgKCgwLCAwKSwpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGRhdGFzW3ddLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCisgICAgICAgIHN0YXRlID0gTm9uZQorICAgICAgICBkMSwgc3RhdGUgPSBhdWRpb29wLnJhdGVjdihiJ1x4MDBceDAxXHgwMicsIDEsIDEsIDgwMDAsIDE2MDAwLCBzdGF0ZSkKKyAgICAgICAgZDIsIHN0YXRlID0gYXVkaW9vcC5yYXRlY3YoYidceDAwXHgwMVx4MDInLCAxLCAxLCA4MDAwLCAxNjAwMCwgc3RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEgKyBkMiwgYidcMDAwXDAwMFwwMDFcMDAxXDAwMlwwMDFcMDAwXDAwMFwwMDFcMDAxXDAwMicpCisKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIGQwLCBzdGF0ZTAgPSBhdWRpb29wLnJhdGVjdihkYXRhc1t3XSwgdywgMSwgODAwMCwgMTYwMDAsIE5vbmUpCisgICAgICAgICAgICBkLCBzdGF0ZSA9IGInJywgTm9uZQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGFzW3ddKSwgdyk6CisgICAgICAgICAgICAgICAgZDEsIHN0YXRlID0gYXVkaW9vcC5yYXRlY3YoZGF0YXNbd11baTppICsgd10sIHcsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODAwMCwgMTYwMDAsIHN0YXRlKQorICAgICAgICAgICAgICAgIGQgKz0gZDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBzdGF0ZTApCisKKyAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UoYicnLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UocGFja3Nbd10oMCwgMSwgMiksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrc1t3XSgyLCAxLCAwKSkKKworICAgIGRlZiB0ZXN0X3RvbW9ubyhzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIGRhdGExID0gZGF0YXNbd10KKyAgICAgICAgICAgIGRhdGEyID0gYnl0ZWFycmF5KDIgKiBsZW4oZGF0YTEpKQorICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CisgICAgICAgICAgICAgICAgZGF0YTJbazo6Mip3XSA9IGRhdGExW2s6OnddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKHN0cihkYXRhMiksIHcsIDEsIDApLCBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8oc3RyKGRhdGEyKSwgdywgMCwgMSksIGInXDAnICogbGVuKGRhdGExKSkKKyAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgorICAgICAgICAgICAgICAgIGRhdGEyW2srdzo6Mip3XSA9IGRhdGExW2s6OnddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKHN0cihkYXRhMiksIHcsIDAuNSwgMC41KSwgZGF0YTEpCisKKyAgICBkZWYgdGVzdF90b3N0ZXJlbyhzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIGRhdGExID0gZGF0YXNbd10KKyAgICAgICAgICAgIGRhdGEyID0gYnl0ZWFycmF5KDIgKiBsZW4oZGF0YTEpKQorICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CisgICAgICAgICAgICAgICAgZGF0YTJbazo6Mip3XSA9IGRhdGExW2s6OnddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8oZGF0YTEsIHcsIDEsIDApLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b3N0ZXJlbyhkYXRhMSwgdywgMCwgMCksIGInXDAnICogbGVuKGRhdGEyKSkKKyAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgorICAgICAgICAgICAgICAgIGRhdGEyW2srdzo6Mip3XSA9IGRhdGExW2s6OnddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8oZGF0YTEsIHcsIDEsIDEpLCBkYXRhMikKKworICAgIGRlZiB0ZXN0X2ZpbmRmYWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKGRhdGFzWzJdLCBkYXRhc1syXSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IoYidcMCcgKiBsZW4oZGF0YXNbMl0pLCBkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgMC4wKQorCisgICAgZGVmIHRlc3RfZmluZGZpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl0sIGRhdGFzWzJdKSwgKDAsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KGRhdGFzWzJdLCBwYWNrc1syXSgxLCAyLCAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDgwMzguOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KGRhdGFzWzJdWzotMl0gKiA1ICsgZGF0YXNbMl0sIGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMzAsIDEuMCkpCisKKyAgICBkZWYgdGVzdF9maW5kbWF4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZG1heChkYXRhc1syXSwgMSksIDUpCisKKyAgICBkZWYgdGVzdF9nZXRzYW1wbGUoc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBkYXRhID0gcGFja3Nbd10oMCwgMSwgLTEsIG1heHZhbHVlc1t3XSwgbWludmFsdWVzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCAwKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMSksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDIpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMyksIG1heHZhbHVlc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgNCksIG1pbnZhbHVlc1t3XSkKKworICAgIGRlZiB0ZXN0X25lZ2F0aXZlbGVuKHNlbGYpOgorICAgICAgICAjIGZyb20gaXNzdWUgMzMwNiwgcHJldmlvdXNseSBpdCBzZWdmYXVsdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsCisgICAgICAgICAgICBhdWRpb29wLmZpbmRtYXgsICcnLmpvaW4oIGNocih4KSBmb3IgeCBpbiB4cmFuZ2UoMjU2KSksIC0yMzkyMzkyKQorCisgICAgZGVmIHRlc3RfaXNzdWU3NjczKHNlbGYpOgorICAgICAgICBzdGF0ZSA9IE5vbmUKKyAgICAgICAgZm9yIGRhdGEsIHNpemUgaW4gSU5WQUxJRF9EQVRBOgorICAgICAgICAgICAgc2l6ZTIgPSBzaXplCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmdldHNhbXBsZSwgZGF0YSwgc2l6ZSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AubWF4LCBkYXRhLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5taW5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmF2ZywgZGF0YSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3Aucm1zLCBkYXRhLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5hdmdwcCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AubWF4cHAsIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmNyb3NzLCBkYXRhLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5tdWwsIGRhdGEsIHNpemUsIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AudG9tb25vLCBkYXRhLCBzaXplLCAwLjUsIDAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AudG9zdGVyZW8sIGRhdGEsIHNpemUsIDAuNSwgMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5hZGQsIGRhdGEsIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmJpYXMsIGRhdGEsIHNpemUsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLnJldmVyc2UsIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmxpbjJsaW4sIGRhdGEsIHNpemUsIHNpemUyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5yYXRlY3YsIGRhdGEsIHNpemUsIDEsIDEsIDEsIHN0YXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5saW4ydWxhdywgZGF0YSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AubGluMmFsYXcsIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmxpbjJhZHBjbSwgZGF0YSwgc2l6ZSwgc3RhdGUpCisKKyAgICBkZWYgdGVzdF93cm9uZ3NpemUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2FiY2RlZmdoJworICAgICAgICBzdGF0ZSA9IE5vbmUKKyAgICAgICAgZm9yIHNpemUgaW4gKC0xLCAwLCAzLCA1LCAxMDI0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AudWxhdzJsaW4sIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmFsYXcybGluLCBkYXRhLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5hZHBjbTJsaW4sIGRhdGEsIHNpemUsIHN0YXRlKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RBdWRpb29wKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hdWdhc3NpZ24ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9hdWdhc3NpZ24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5ZThiNwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2F1Z2Fzc2lnbi5weQpAQCAtMCwwICsxLDMzMSBAQAorIyBBdWdtZW50ZWQgYXNzaWdubWVudCB0ZXN0LgorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3B5M2tfd2FybmluZ3MKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIEF1Z0Fzc2lnblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0QmFzaWMoc2VsZik6CisgICAgICAgIHggPSAyCisgICAgICAgIHggKz0gMQorICAgICAgICB4ICo9IDIKKyAgICAgICAgeCAqKj0gMgorICAgICAgICB4IC09IDgKKyAgICAgICAgeCAvLz0gNQorICAgICAgICB4ICU9IDMKKyAgICAgICAgeCAmPSAyCisgICAgICAgIHggfD0gNQorICAgICAgICB4IF49IDEKKyAgICAgICAgeCAvPSAyCisgICAgICAgIGlmIDEvMiA9PSAwOgorICAgICAgICAgICAgIyBjbGFzc2ljIGRpdmlzaW9uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIG5ldy1zdHlsZSBkaXZpc2lvbiAod2l0aCAtUW5ldykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMy4wKQorCisgICAgZGVmIHRlc3Rfd2l0aF91bnBhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCAieCwgYiArPSAzIiwgIjx0ZXN0PiIsICJleGVjIikKKworICAgIGRlZiB0ZXN0SW5MaXN0KHNlbGYpOgorICAgICAgICB4ID0gWzJdCisgICAgICAgIHhbMF0gKz0gMQorICAgICAgICB4WzBdICo9IDIKKyAgICAgICAgeFswXSAqKj0gMgorICAgICAgICB4WzBdIC09IDgKKyAgICAgICAgeFswXSAvLz0gNQorICAgICAgICB4WzBdICU9IDMKKyAgICAgICAgeFswXSAmPSAyCisgICAgICAgIHhbMF0gfD0gNQorICAgICAgICB4WzBdIF49IDEKKyAgICAgICAgeFswXSAvPSAyCisgICAgICAgIGlmIDEvMiA9PSAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzBdLCAzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzBdLCAzLjApCisKKyAgICBkZWYgdGVzdEluRGljdChzZWxmKToKKyAgICAgICAgeCA9IHswOiAyfQorICAgICAgICB4WzBdICs9IDEKKyAgICAgICAgeFswXSAqPSAyCisgICAgICAgIHhbMF0gKio9IDIKKyAgICAgICAgeFswXSAtPSA4CisgICAgICAgIHhbMF0gLy89IDUKKyAgICAgICAgeFswXSAlPSAzCisgICAgICAgIHhbMF0gJj0gMgorICAgICAgICB4WzBdIHw9IDUKKyAgICAgICAgeFswXSBePSAxCisgICAgICAgIHhbMF0gLz0gMgorICAgICAgICBpZiAxLzIgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXSwgMykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXSwgMy4wKQorCisgICAgZGVmIHRlc3RTZXF1ZW5jZXMoc2VsZik6CisgICAgICAgIHggPSBbMSwyXQorICAgICAgICB4ICs9IFszLDRdCisgICAgICAgIHggKj0gMgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgWzEsIDIsIDMsIDQsIDEsIDIsIDMsIDRdKQorCisgICAgICAgIHggPSBbMSwgMiwgM10KKyAgICAgICAgeSA9IHgKKyAgICAgICAgeFsxOjJdICo9IDIKKyAgICAgICAgeVsxOjJdICs9IFsxXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgWzEsIDIsIDEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB5KQorCisgICAgZGVmIHRlc3RDdXN0b21NZXRob2RzMShzZWxmKToKKworICAgICAgICBjbGFzcyBhdWdfdGVzdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWwgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fcmFkZF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsICsgdmFsCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIHJldHVybiBhdWdfdGVzdChzZWxmLnZhbCArIHZhbCkKKworICAgICAgICBjbGFzcyBhdWdfdGVzdDIoYXVnX3Rlc3QpOgorICAgICAgICAgICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgc2VsZi52YWwgPSBzZWxmLnZhbCArIHZhbAorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgY2xhc3MgYXVnX3Rlc3QzKGF1Z190ZXN0KToKKyAgICAgICAgICAgIGRlZiBfX2lhZGRfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIHJldHVybiBhdWdfdGVzdDMoc2VsZi52YWwgKyB2YWwpCisKKyAgICAgICAgeCA9IGF1Z190ZXN0KDEpCisgICAgICAgIHkgPSB4CisgICAgICAgIHggKz0gMTAKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgYXVnX3Rlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsLCAxMSkKKworICAgICAgICB4ID0gYXVnX3Rlc3QyKDIpCisgICAgICAgIHkgPSB4CisgICAgICAgIHggKz0gMTAKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsLCAxMikKKworICAgICAgICB4ID0gYXVnX3Rlc3QzKDMpCisgICAgICAgIHkgPSB4CisgICAgICAgIHggKz0gMTAKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgYXVnX3Rlc3QzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbCwgMTMpCisKKworICAgIGRlZiB0ZXN0Q3VzdG9tTWV0aG9kczIodGVzdF9zZWxmKToKKyAgICAgICAgb3V0cHV0ID0gW10KKworICAgICAgICBjbGFzcyB0ZXN0YWxsOgorICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2FkZF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19yYWRkX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3JhZGRfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pYWRkX18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX19zdWJfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fc3ViX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX3JzdWJfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcnN1Yl9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19pc3ViX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2lzdWJfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiBfX211bF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19tdWxfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9fcm11bF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19ybXVsX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX2ltdWxfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9faW11bF9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fZGl2X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2Rpdl9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19yZGl2X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3JkaXZfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9faWRpdl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pZGl2X18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX19mbG9vcmRpdl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19mbG9vcmRpdl9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2lmbG9vcmRpdl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pZmxvb3JkaXZfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19yZmxvb3JkaXZfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcmZsb29yZGl2X18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3RydWVkaXZfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19pdHJ1ZWRpdl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pdHJ1ZWRpdl9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fbW9kX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX21vZF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19ybW9kX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3Jtb2RfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9faW1vZF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pbW9kX18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX19wb3dfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcG93X18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX3Jwb3dfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcnBvd19fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19pcG93X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2lwb3dfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiBfX29yX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX29yX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX3Jvcl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19yb3JfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9faW9yX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2lvcl9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fYW5kX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2FuZF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19yYW5kX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3JhbmRfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9faWFuZF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pYW5kX18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX194b3JfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9feG9yX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX3J4b3JfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcnhvcl9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19peG9yX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2l4b3JfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiBfX3JzaGlmdF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19yc2hpZnRfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9fcnJzaGlmdF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19ycnNoaWZ0X18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX2lyc2hpZnRfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9faXJzaGlmdF9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fbHNoaWZ0X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2xzaGlmdF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19ybHNoaWZ0X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3Jsc2hpZnRfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9faWxzaGlmdF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pbHNoaWZ0X18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIHggPSB0ZXN0YWxsKCkKKyAgICAgICAgeCArIDEKKyAgICAgICAgMSArIHgKKyAgICAgICAgeCArPSAxCisKKyAgICAgICAgeCAtIDEKKyAgICAgICAgMSAtIHgKKyAgICAgICAgeCAtPSAxCisKKyAgICAgICAgeCAqIDEKKyAgICAgICAgMSAqIHgKKyAgICAgICAgeCAqPSAxCisKKyAgICAgICAgaWYgMS8yID09IDA6CisgICAgICAgICAgICB4IC8gMQorICAgICAgICAgICAgMSAvIHgKKyAgICAgICAgICAgIHggLz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUcnVlIGRpdmlzaW9uIGlzIGluIGVmZmVjdCwgc28gIi8iIGRvZXNuJ3QgbWFwIHRvIF9fZGl2X18gZXRjOworICAgICAgICAgICAgIyBidXQgdGhlIGNhbm5lZCBleHBlY3RlZC1vdXRwdXQgZmlsZSByZXF1aXJlcyB0aGF0IHRob3NlIGdldCBjYWxsZWQuCisgICAgICAgICAgICB4Ll9fZGl2X18oMSkKKyAgICAgICAgICAgIHguX19yZGl2X18oMSkKKyAgICAgICAgICAgIHguX19pZGl2X18oMSkKKworICAgICAgICB4IC8vIDEKKyAgICAgICAgMSAvLyB4CisgICAgICAgIHggLy89IDEKKworICAgICAgICB4ICUgMQorICAgICAgICAxICUgeAorICAgICAgICB4ICU9IDEKKworICAgICAgICB4ICoqIDEKKyAgICAgICAgMSAqKiB4CisgICAgICAgIHggKio9IDEKKworICAgICAgICB4IHwgMQorICAgICAgICAxIHwgeAorICAgICAgICB4IHw9IDEKKworICAgICAgICB4ICYgMQorICAgICAgICAxICYgeAorICAgICAgICB4ICY9IDEKKworICAgICAgICB4IF4gMQorICAgICAgICAxIF4geAorICAgICAgICB4IF49IDEKKworICAgICAgICB4ID4+IDEKKyAgICAgICAgMSA+PiB4CisgICAgICAgIHggPj49IDEKKworICAgICAgICB4IDw8IDEKKyAgICAgICAgMSA8PCB4CisgICAgICAgIHggPDw9IDEKKworICAgICAgICB0ZXN0X3NlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnJydcCitfX2FkZF9fIGNhbGxlZAorX19yYWRkX18gY2FsbGVkCitfX2lhZGRfXyBjYWxsZWQKK19fc3ViX18gY2FsbGVkCitfX3JzdWJfXyBjYWxsZWQKK19faXN1Yl9fIGNhbGxlZAorX19tdWxfXyBjYWxsZWQKK19fcm11bF9fIGNhbGxlZAorX19pbXVsX18gY2FsbGVkCitfX2Rpdl9fIGNhbGxlZAorX19yZGl2X18gY2FsbGVkCitfX2lkaXZfXyBjYWxsZWQKK19fZmxvb3JkaXZfXyBjYWxsZWQKK19fcmZsb29yZGl2X18gY2FsbGVkCitfX2lmbG9vcmRpdl9fIGNhbGxlZAorX19tb2RfXyBjYWxsZWQKK19fcm1vZF9fIGNhbGxlZAorX19pbW9kX18gY2FsbGVkCitfX3Bvd19fIGNhbGxlZAorX19ycG93X18gY2FsbGVkCitfX2lwb3dfXyBjYWxsZWQKK19fb3JfXyBjYWxsZWQKK19fcm9yX18gY2FsbGVkCitfX2lvcl9fIGNhbGxlZAorX19hbmRfXyBjYWxsZWQKK19fcmFuZF9fIGNhbGxlZAorX19pYW5kX18gY2FsbGVkCitfX3hvcl9fIGNhbGxlZAorX19yeG9yX18gY2FsbGVkCitfX2l4b3JfXyBjYWxsZWQKK19fcnNoaWZ0X18gY2FsbGVkCitfX3Jyc2hpZnRfXyBjYWxsZWQKK19faXJzaGlmdF9fIGNhbGxlZAorX19sc2hpZnRfXyBjYWxsZWQKK19fcmxzaGlmdF9fIGNhbGxlZAorX19pbHNoaWZ0X18gY2FsbGVkCisnJycuc3BsaXRsaW5lcygpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCgiY2xhc3NpYyBpbnQgZGl2aXNpb24iLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KEF1Z0Fzc2lnblRlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjJjZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CkBAIC0wLDAgKzEsMjE2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgYmFzZTY0CisKKworDAorY2xhc3MgTGVnYWN5QmFzZTY0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2VuY29kZXN0cmluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVzdHJpbmcoInd3dy5weXRob24ub3JnIiksICJkM2QzTG5CNWRHaHZiaTV2Y21jPVxuIikKKyAgICAgICAgZXEoYmFzZTY0LmVuY29kZXN0cmluZygiYSIpLCAiWVE9PVxuIikKKyAgICAgICAgZXEoYmFzZTY0LmVuY29kZXN0cmluZygiYWIiKSwgIllXST1cbiIpCisgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVzdHJpbmcoImFiYyIpLCAiWVdKalxuIikKKyAgICAgICAgZXEoYmFzZTY0LmVuY29kZXN0cmluZygiIiksICIiKQorICAgICAgICBlcShiYXNlNjQuZW5jb2Rlc3RyaW5nKCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fSIpLAorICAgICAgICAgICAiWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHBCUWtORSIKKyAgICAgICAgICAgIlJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXakF4TWpNMFxuTlQiCisgICAgICAgICAgICJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09XG4iKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBlcShiYXNlNjQuZW5jb2Rlc3RyaW5nKGJ5dGVhcnJheSgnYWJjJykpLCAnWVdKalxuJykKKworICAgIGRlZiB0ZXN0X2RlY29kZXN0cmluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVzdHJpbmcoImQzZDNMbkI1ZEdodmJpNXZjbWM9XG4iKSwgInd3dy5weXRob24ub3JnIikKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZXN0cmluZygiWVE9PVxuIiksICJhIikKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZXN0cmluZygiWVdJPVxuIiksICJhYiIpCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVzdHJpbmcoIllXSmpcbiIpLCAiYWJjIikKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZXN0cmluZygiWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHBCUWtORSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldqQXhNak0wXG5OVCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PVxuIiksCisgICAgICAgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKyAgICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAgICAiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IikKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZXN0cmluZygnJyksICcnKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBlcShiYXNlNjQuZGVjb2Rlc3RyaW5nKGJ5dGVhcnJheSgiWVdKalxuIikpLCAiYWJjIikKKworICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgICAgICBpbmZwID0gU3RyaW5nSU8oJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworICAgICAgICAgICAgICAgICAgICAgICAgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworICAgICAgICAgICAgICAgICAgICAgICAgJzAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fScpCisgICAgICAgIG91dGZwID0gU3RyaW5nSU8oKQorICAgICAgICBiYXNlNjQuZW5jb2RlKGluZnAsIG91dGZwKQorICAgICAgICBlcShvdXRmcC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAnWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHBCUWtORScKKyAgICAgICAgICAgJ1JVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXakF4TWpNMFxuTlQnCisgICAgICAgICAgICdZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09XG4nKQorCisgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgorICAgICAgICBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKyAgICAgICAgaW5mcCA9IFN0cmluZ0lPKCdkM2QzTG5CNWRHaHZiaTV2Y21jPScpCisgICAgICAgIG91dGZwID0gU3RyaW5nSU8oKQorICAgICAgICBiYXNlNjQuZGVjb2RlKGluZnAsIG91dGZwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dGZwLmdldHZhbHVlKCksICd3d3cucHl0aG9uLm9yZycpCisKKworDAorY2xhc3MgQmFzZVhZVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2I2NGVuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgVGVzdCBkZWZhdWx0IGFscGhhYmV0CisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoInd3dy5weXRob24ub3JnIiksICJkM2QzTG5CNWRHaHZiaTV2Y21jPSIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoJ1x4MDAnKSwgJ0FBPT0nKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKCJhIiksICJZUT09IikKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZSgiYWIiKSwgIllXST0iKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKCJhYmMiKSwgIllXSmoiKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKCIiKSwgIiIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IiksCisgICAgICAgICAgICJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcEJRa05FIgorICAgICAgICAgICAiUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldqQXhNak0wTlQiCisgICAgICAgICAgICJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09IikKKyAgICAgICAgIyBUZXN0IHdpdGggYXJiaXRyYXJ5IGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZSgnXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9JyokJyksICcwMWEqYiRjZCcpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYnl0ZWFycmF5KCdhYmNkJykpLCAnWVdKalpBPT0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iNjRlbmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1ieXRlYXJyYXkoJyokJykpCisgICAgICAgICMgVGVzdCBzdGFuZGFyZCBhbHBoYWJldAorICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKCJ3d3cucHl0aG9uLm9yZyIpLCAiZDNkM0xuQjVkR2h2Ymk1dmNtYz0iKQorICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKCJhIiksICJZUT09IikKKyAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZSgiYWIiKSwgIllXST0iKQorICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKCJhYmMiKSwgIllXSmoiKQorICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKCIiKSwgIiIpCisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IiksCisgICAgICAgICAgICJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcEJRa05FIgorICAgICAgICAgICAiUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldqQXhNak0wTlQiCisgICAgICAgICAgICJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09IikKKyAgICAgICAgIyBOb24tYnl0ZXMKKyAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZShieXRlYXJyYXkoJ2FiY2QnKSksICdZV0pqWkE9PScpCisgICAgICAgICMgVGVzdCB3aXRoICdVUkwgc2FmZScgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycworICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUoJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpLCAnMDFhLWJfY2QnKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUoYnl0ZWFycmF5KCdceGQzVlx4YmVvXHhmN1x4MWQnKSksICcwMWEtYl9jZCcpCisKKyAgICBkZWYgdGVzdF9iNjRkZWNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKCJkM2QzTG5CNWRHaHZiaTV2Y21jPSIpLCAid3d3LnB5dGhvbi5vcmciKQorICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKCdBQT09JyksICdceDAwJykKKyAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZSgiWVE9PSIpLCAiYSIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoIllXST0iKSwgImFiIikKKyAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZSgiWVdKaiIpLCAiYWJjIikKKyAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZSgiWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHBCUWtORSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldqQXhNak0wXG5OVCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PSIpLAorICAgICAgICAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisgICAgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgICAgIjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fSIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoJycpLCAnJykKKyAgICAgICAgIyBUZXN0IHdpdGggYXJiaXRyYXJ5IGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKKyAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZSgnMDFhKmIkY2QnLCBhbHRjaGFycz0nKiQnKSwgJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoYnl0ZWFycmF5KCJZV0pqIikpLCAiYWJjIikKKyAgICAgICAgIyBUZXN0IHN0YW5kYXJkIGFscGhhYmV0CisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoImQzZDNMbkI1ZEdodmJpNXZjbWM9IiksICJ3d3cucHl0aG9uLm9yZyIpCisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoIllRPT0iKSwgImEiKQorICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKCJZV0k9IiksICJhYiIpCisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoIllXSmoiKSwgImFiYyIpCisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoIiIpLCAiIikKKyAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSgiWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHBCUWtORSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldqQXhNak0wTlQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT0iKSwKKyAgICAgICAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorICAgICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICAgICIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGJ5dGVhcnJheSgiWVdKaiIpKSwgImFiYyIpCisgICAgICAgICMgVGVzdCB3aXRoICdVUkwgc2FmZScgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycworICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoJzAxYS1iX2NkJyksICdceGQzVlx4YmVvXHhmN1x4MWQnKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoYnl0ZWFycmF5KCcwMWEtYl9jZCcpKSwgJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpCisKKyAgICBkZWYgdGVzdF9iNjRkZWNvZGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmI2NGRlY29kZSwgJ2FiYycpCisKKyAgICBkZWYgdGVzdF9iMzJlbmNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKCcnKSwgJycpCisgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoJ1x4MDAnKSwgJ0FBPT09PT09JykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZSgnYScpLCAnTUU9PT09PT0nKQorICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKCdhYicpLCAnTUZSQT09PT0nKQorICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKCdhYmMnKSwgJ01GUkdHPT09JykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZSgnYWJjZCcpLCAnTUZSR0daQT0nKQorICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKCdhYmNkZScpLCAnTUZSR0daREYnKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGJ5dGVhcnJheSgnYWJjZCcpKSwgJ01GUkdHWkE9JykKKworICAgIGRlZiB0ZXN0X2IzMmRlY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJycpLCAnJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnQUE9PT09PT0nKSwgJ1x4MDAnKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdNRT09PT09PScpLCAnYScpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01GUkE9PT09JyksICdhYicpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01GUkdHPT09JyksICdhYmMnKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdNRlJHR1pBPScpLCAnYWJjZCcpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01GUkdHWkRGJyksICdhYmNkZScpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmIzMmRlY29kZSwgYnl0ZWFycmF5KCdNRlJHRz09PScpKQorCisgICAgZGVmIHRlc3RfYjMyZGVjb2RlX2Nhc2Vmb2xkKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnJywgVHJ1ZSksICcnKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdNRT09PT09PScsIFRydWUpLCAnYScpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01GUkE9PT09JywgVHJ1ZSksICdhYicpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01GUkdHPT09JywgVHJ1ZSksICdhYmMnKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdNRlJHR1pBPScsIFRydWUpLCAnYWJjZCcpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01GUkdHWkRGJywgVHJ1ZSksICdhYmNkZScpCisgICAgICAgICMgTG93ZXIgY2FzZXMKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnbWU9PT09PT0nLCBUcnVlKSwgJ2EnKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdtZnJhPT09PScsIFRydWUpLCAnYWInKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdtZnJnZz09PScsIFRydWUpLCAnYWJjJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnbWZyZ2d6YT0nLCBUcnVlKSwgJ2FiY2QnKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdtZnJnZ3pkZicsIFRydWUpLCAnYWJjZGUnKQorICAgICAgICAjIEV4cGVjdGVkIGV4Y2VwdGlvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjMyZGVjb2RlLCAnbWU9PT09PT0nKQorICAgICAgICAjIE1hcHBpbmcgemVybyBhbmQgb25lCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01MTzIzNDU2JyksICdiXHhkZFx4YWRceGYzXHhiZScpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ00xMDIzNDU2JywgbWFwMDE9J0wnKSwgJ2JceGRkXHhhZFx4ZjNceGJlJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnTTEwMjM0NTYnLCBtYXAwMT0nSScpLCAnYlx4MWRceGFkXHhmM1x4YmUnKQorCisgICAgZGVmIHRlc3RfYjMyZGVjb2RlX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iMzJkZWNvZGUsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iMzJkZWNvZGUsICdBQkNERUY9PScpCisKKyAgICBkZWYgdGVzdF9iMTZlbmNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKCdceDAxXHgwMlx4YWJceGNkXHhlZicpLCAnMDEwMkFCQ0RFRicpCisgICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoJ1x4MDAnKSwgJzAwJykKKyAgICAgICAgIyBOb24tYnl0ZXMKKyAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZShieXRlYXJyYXkoJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykpLCAnMDEwMkFCQ0RFRicpCisKKyAgICBkZWYgdGVzdF9iMTZkZWNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKCcwMTAyQUJDREVGJyksICdceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoJzAwJyksICdceDAwJykKKyAgICAgICAgIyBMb3dlciBjYXNlIGlzIG5vdCBhbGxvd2VkIHdpdGhvdXQgYSBmbGFnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmIxNmRlY29kZSwgJzAxMDJhYmNkZWYnKQorICAgICAgICAjIENhc2UgZm9sZAorICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKCcwMTAyYWJjZGVmJywgVHJ1ZSksICdceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYnl0ZWFycmF5KCIwMTAyQUJDREVGIikpLCAnXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorCisKKwwKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iYXN0aW9uLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYmFzdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzYwZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYmFzdGlvbi5weQpAQCAtMCwwICsxLDMgQEAKKyMjaW1wb3J0IEJhc3Rpb24KKyMjCisjI0Jhc3Rpb24uX3Rlc3QoKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYmlnYWRkcnNwYWNlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYmlnYWRkcnNwYWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMTlhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iaWdhZGRyc3BhY2UucHkKQEAgLTAsMCArMSw0NiBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGJpZ2FkZHJzcGFjZXRlc3QsIE1BWF9QeV9zc2l6ZV90CisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgc3lzCisKKworY2xhc3MgU3RyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAYmlnYWRkcnNwYWNldGVzdAorICAgIGRlZiB0ZXN0X2NvbmNhdChzZWxmKToKKyAgICAgICAgczEgPSAneCcgKiBNQVhfUHlfc3NpemVfdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcGVyYXRvci5hZGQsIHMxLCAnPycpCisKKyAgICBAYmlnYWRkcnNwYWNldGVzdAorICAgIGRlZiB0ZXN0X29wdGltaXplZF9jb25jYXQoc2VsZik6CisgICAgICAgIHggPSAneCcgKiBNQVhfUHlfc3NpemVfdAorICAgICAgICB0cnk6CisgICAgICAgICAgICB4ID0geCArICc/JyAgICAgIyB0aGlzIHN0YXRlbWVudCB1c2VzIGEgZmFzdCBwYXRoIGluIGNldmFsLmMKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBPdmVyZmxvd0Vycm9yIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeCArPSAnPycgICAgICAgICMgdGhpcyBzdGF0ZW1lbnQgdXNlcyBhIGZhc3QgcGF0aCBpbiBjZXZhbC5jCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgT3ZlcmZsb3dFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCBNQVhfUHlfc3NpemVfdCkKKworICAgICMjIyB0aGUgZm9sbG93aW5nIHRlc3QgaXMgcGVuZGluZyBhIHBhdGNoCisgICAgIyAgIChodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDYtSnVseS8wNjc3NzQuaHRtbCkKKyAgICAjQGJpZ2FkZHJzcGFjZXRlc3QKKyAgICAjZGVmIHRlc3RfcmVwZWF0KHNlbGYpOgorICAgICMgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3BlcmF0b3IubXVsLCAneCcsIE1BWF9QeV9zc2l6ZV90ICsgMSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGlmIGxlbihzeXMuYXJndikgPiAxOgorICAgICAgICB0ZXN0X3N1cHBvcnQuc2V0X21lbWxpbWl0KHN5cy5hcmd2WzFdKQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iaWdtZW0ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iaWdtZW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxYzM3MwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2JpZ21lbS5weQpAQCAtMCwwICsxLDEwNzMgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBiaWdtZW10ZXN0LCBfMUcsIF8yRywgXzRHLCBwcmVjaXNpb25iaWdtZW10ZXN0CisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3lzCisKKyMgQmlnbWVtIHRlc3RpbmcgaG91c2VydWxlczoKKyMKKyMgIC0gVHJ5IG5vdCB0byBhbGxvY2F0ZSB0b28gbWFueSBsYXJnZSBvYmplY3RzLiBJdCdzIG9rYXkgdG8gcmVseSBvbgorIyAgICByZWZjb3VudGluZyBzZW1hbnRpY3MsIGJ1dCBkb24ndCBmb3JnZXQgdGhhdCAncyA9IGNyZWF0ZV9sYXJnZXN0cmluZygpJworIyAgICBkb2Vzbid0IHJlbGVhc2UgdGhlIG9sZCAncycgKGlmIGl0IGV4aXN0cykgdW50aWwgd2VsbCBhZnRlciBpdHMgbmV3CisjICAgIHZhbHVlIGhhcyBiZWVuIGNyZWF0ZWQuIFVzZSAnZGVsIHMnIGJlZm9yZSB0aGUgY3JlYXRlX2xhcmdlc3RyaW5nIGNhbGwuCisjCisjICAtIERvICpub3QqIGNvbXBhcmUgbGFyZ2Ugb2JqZWN0cyB1c2luZyBhc3NlcnRFcXVhbCBvciBzaW1pbGFyLiBJdCdzIGEKKyMgICAgbGVuZ3R5IG9wZXJhdGlvbiBhbmQgdGhlIGVycm9ybWVzc2FnZSB3aWxsIGJlIHV0dGVybHkgdXNlbGVzcyBkdWUgdG8KKyMgICAgaXRzIHNpemUuIFRvIG1ha2Ugc3VyZSB3aGV0aGVyIGEgcmVzdWx0IGhhcyB0aGUgcmlnaHQgY29udGVudHMsIGJldHRlcgorIyAgICB0byB1c2UgdGhlIHN0cmlwIG9yIGNvdW50IG1ldGhvZHMsIG9yIGNvbXBhcmUgbWVhbmluZ2Z1bCBzbGljZXMuCisjCisjICAtIERvbid0IGZvcmdldCB0byB0ZXN0IGZvciBsYXJnZSBpbmRpY2VzLCBvZmZzZXRzIGFuZCByZXN1bHRzIGFuZCBzdWNoLAorIyAgICBpbiBhZGRpdGlvbiB0byBsYXJnZSBzaXplcy4KKyMKKyMgIC0gV2hlbiByZXBlYXRpbmcgYW4gb2JqZWN0IChzYXksIGEgc3Vic3RyaW5nLCBvciBhIHNtYWxsIGxpc3QpIHRvIGNyZWF0ZQorIyAgICBhIGxhcmdlIG9iamVjdCwgbWFrZSB0aGUgc3Vib2JqZWN0IG9mIGEgbGVuZ3RoIHRoYXQgaXMgbm90IGEgcG93ZXIgb2YKKyMgICAgMi4gVGhhdCB3YXksIGludC13cmFwcGluZyBwcm9ibGVtcyBhcmUgbW9yZSBlYXNpbHkgZGV0ZWN0ZWQuCisjCisjICAtIFdoaWxlIHRoZSBiaWdtZW10ZXN0IGRlY29yYXRvciBzcGVha3Mgb2YgJ21pbnNpemUnLCBhbGwgdGVzdHMgd2lsbAorIyAgICBhY3R1YWxseSBiZSBjYWxsZWQgd2l0aCBhIG11Y2ggc21hbGxlciBudW1iZXIgdG9vLCBpbiB0aGUgbm9ybWFsCisjICAgIHRlc3QgcnVuICg1S2IgY3VycmVudGx5LikgVGhpcyBpcyBzbyB0aGUgdGVzdHMgdGhlbXNlbHZlcyBnZXQgZnJlcXVlbnQKKyMgICAgdGVzdGluZy4gQ29uc2VxdWVudGx5LCBhbHdheXMgbWFrZSBhbGwgbGFyZ2UgYWxsb2NhdGlvbnMgYmFzZWQgb24gdGhlCisjICAgIHBhc3NlZC1pbiAnc2l6ZScsIGFuZCBkb24ndCByZWx5IG9uIHRoZSBzaXplIGJlaW5nIHZlcnkgbGFyZ2UuIEFsc28sCisjICAgIG1lbXVzZS1wZXItc2l6ZSBzaG91bGQgcmVtYWluIHNhbmUgKGxlc3MgdGhhbiBhIGZldyB0aG91c2FuZCk7IGlmIHlvdXIKKyMgICAgdGVzdCB1c2VzIG1vcmUsIGFkanVzdCAnc2l6ZScgdXB3YXJkLCBpbnN0ZWFkLgorCitjbGFzcyBTdHJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfY2FwaXRhbGl6ZShzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKKyAgICAgICAgcyA9ICctJyAqIHNpemUgKyBTVUJTVFIKKyAgICAgICAgY2FwcyA9IHMuY2FwaXRhbGl6ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2Fwc1stbGVuKFNVQlNUUik6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTVUJTVFIuY2FwaXRhbGl6ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHMubHN0cmlwKCctJyksIFNVQlNUUikKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0xKQorICAgIGRlZiB0ZXN0X2NlbnRlcihzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKKyAgICAgICAgcyA9IFNVQlNUUi5jZW50ZXIoc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIGxwYWRzaXplID0gcnBhZHNpemUgPSAobGVuKHMpIC0gbGVuKFNVQlNUUikpIC8vIDIKKyAgICAgICAgaWYgbGVuKHMpICUgMjoKKyAgICAgICAgICAgIGxwYWRzaXplICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xwYWRzaXplOi1ycGFkc2l6ZV0sIFNVQlNUUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQorCisgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fMkcgLSAxLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9jZW50ZXJfdW5pY29kZShzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gdScgYWJjIGRlZiBnaGknCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBTVUJTVFIuY2VudGVyKHNpemUpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgcGFzcyAjIGFjY2VwdGFibGUgb24gMzItYml0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgICAgIGxwYWRzaXplID0gcnBhZHNpemUgPSAobGVuKHMpIC0gbGVuKFNVQlNUUikpIC8vIDIKKyAgICAgICAgICAgIGlmIGxlbihzKSAlIDI6CisgICAgICAgICAgICAgICAgbHBhZHNpemUgKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xwYWRzaXplOi1ycGFkc2l6ZV0sIFNVQlNUUikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKKyAgICAgICAgICAgIGRlbCBzCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfY291bnQoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCisgICAgICAgIHMgPSAnLicgKiBzaXplICsgU1VCU1RSCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLicpLCBzaXplKQorICAgICAgICBzICs9ICcuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy4nKSwgc2l6ZSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnICcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ2knKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCdqJyksIDApCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0zKQorICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmLCBzaXplKToKKyAgICAgICAgcyA9ICcuJyAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5kZWNvZGUoJ3V0Zi04JykpLCBzaXplKQorCisgICAgZGVmIGJhc2ljX2VuY29kZV90ZXN0KHNlbGYsIHNpemUsIGVuYywgYz11Jy4nLCBleHBlY3RlZHNpemU9Tm9uZSk6CisgICAgICAgIGlmIGV4cGVjdGVkc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0ZWRzaXplID0gc2l6ZQorCisgICAgICAgIHMgPSBjICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLmVuY29kZShlbmMpKSwgZXhwZWN0ZWRzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MykKKyAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX2VuY29kZV90ZXN0KHNpemUsICd1dGYtOCcpCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV80RyAvLyA2ICsgMiwgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfZW5jb2RlX3Jhd191bmljb2RlX2VzY2FwZShzZWxmLCBzaXplKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfZW5jb2RlX3Rlc3Qoc2l6ZSwgJ3Jhd191bmljb2RlX2VzY2FwZScpCisgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MgIyBhY2NlcHRhYmxlIG9uIDMyLWJpdAorCisgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fNEcgLy8gNSArIDcwLCBtZW11c2U9MykKKyAgICBkZWYgdGVzdF9lbmNvZGVfdXRmNyhzZWxmLCBzaXplKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfZW5jb2RlX3Rlc3Qoc2l6ZSwgJ3V0ZjcnKQorICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzRHIC8vIDQgKyA1LCBtZW11c2U9NikKKyAgICBkZWYgdGVzdF9lbmNvZGVfdXRmMzIoc2VsZiwgc2l6ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX2VuY29kZV90ZXN0KHNpemUsICd1dGYzMicsIGV4cGVjdGVkc2l6ZT00KnNpemUrNCkKKyAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgorICAgICAgICAgICAgcGFzcyAjIGFjY2VwdGFibGUgb24gMzItYml0CisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8yRy0xLCBtZW11c2U9NCkKKyAgICBkZWYgdGVzdF9kZWNvZGVhc2NpaShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfZW5jb2RlX3Rlc3Qoc2l6ZSwgJ2FzY2lpJywgYz0nQScpCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV80RyAvLyA1LCBtZW11c2U9NisyKQorICAgIGRlZiB0ZXN0X3VuaWNvZGVfcmVwcl9vZmx3KHNlbGYsIHNpemUpOgorICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IGNyYXNoZXMgLSBzZWUgaXNzdWUgIzE0OTA0IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHUiXHVBQUFBIipzaXplCisgICAgICAgICAgICByID0gcmVwcihzKQorICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzID09IGV2YWwocikpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfZW5kc3dpdGgoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCisgICAgICAgIHMgPSAnLScgKiBzaXplICsgU1VCU1RSCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKFNVQlNUUikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKHMpKQorICAgICAgICBzMiA9ICcuLi4nICsgcworICAgICAgICBzZWxmLmFzc2VydFRydWUoczIuZW5kc3dpdGgocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5lbmRzd2l0aCgnYScgKyBTVUJTVFIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFNVQlNUUi5lbmRzd2l0aChzKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnMoc2VsZiwgc2l6ZSk6CisgICAgICAgIHMgPSAnLScgKiBzaXplCisgICAgICAgIHRhYnNpemUgPSA4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5leHBhbmR0YWJzKCksIHMpCisgICAgICAgIGRlbCBzCisgICAgICAgIHNsZW4sIHJlbWFpbmRlciA9IGRpdm1vZChzaXplLCB0YWJzaXplKQorICAgICAgICBzID0gJyAgICAgICBcdCcgKiBzbGVuCisgICAgICAgIHMgPSBzLmV4cGFuZHRhYnModGFic2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgLSByZW1haW5kZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuc3RyaXAoJyAnKSksIDApCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfZmluZChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKKyAgICAgICAgc3VibGVuID0gbGVuKFNVQlNUUikKKyAgICAgICAgcyA9ICcnLmpvaW4oW1NVQlNUUiwgJy0nICogc2l6ZSwgU1VCU1RSXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJyAnKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoU1VCU1RSKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJyAnLCBzdWJsZW4pLCBzdWJsZW4gKyBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZChTVUJTVFIsIGxlbihTVUJTVFIpKSwgc3VibGVuICsgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJ2knKSwgU1VCU1RSLmZpbmQoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJ2knLCBzdWJsZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxlbiArIHNpemUgKyBTVUJTVFIuZmluZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZCgnaScsIHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxlbiArIHNpemUgKyBTVUJTVFIuZmluZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZCgnaicpLCAtMSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKKyAgICAgICAgc3VibGVuID0gbGVuKFNVQlNUUikKKyAgICAgICAgcyA9ICcnLmpvaW4oW1NVQlNUUiwgJy0nICogc2l6ZSwgU1VCU1RSXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGV4KCcgJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleChTVUJTVFIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kZXgoJyAnLCBzdWJsZW4pLCBzdWJsZW4gKyBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kZXgoU1VCU1RSLCBzdWJsZW4pLCBzdWJsZW4gKyBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kZXgoJ2knKSwgU1VCU1RSLmluZGV4KCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleCgnaScsIHN1YmxlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5pbmRleCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kZXgoJ2knLCBzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsZW4gKyBzaXplICsgU1VCU1RSLmluZGV4KCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMuaW5kZXgsICdqJykKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9pc2FsbnVtKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnMTIzNDU2JworICAgICAgICBzID0gJ2EnICogc2l6ZSArIFNVQlNUUgorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc2FsbnVtKCkpCisgICAgICAgIHMgKz0gJy4nCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc2FsbnVtKCkpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfaXNhbHBoYShzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJ3p6enp6enonCisgICAgICAgIHMgPSAnYScgKiBzaXplICsgU1VCU1RSCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzYWxwaGEoKSkKKyAgICAgICAgcyArPSAnLicKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzYWxwaGEoKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9pc2RpZ2l0KHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnMTIzNDU2JworICAgICAgICBzID0gJzknICogc2l6ZSArIFNVQlNUUgorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc2RpZ2l0KCkpCisgICAgICAgIHMgKz0gJ3onCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc2RpZ2l0KCkpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfaXNsb3dlcihzZWxmLCBzaXplKToKKyAgICAgICAgY2hhcnMgPSAnJy5qb2luKFsgY2hyKGMpIGZvciBjIGluIHJhbmdlKDI1NSkgaWYgbm90IGNocihjKS5pc3VwcGVyKCkgXSkKKyAgICAgICAgcmVwZWF0cyA9IHNpemUgLy8gbGVuKGNoYXJzKSArIDIKKyAgICAgICAgcyA9IGNoYXJzICogcmVwZWF0cworICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc2xvd2VyKCkpCisgICAgICAgIHMgKz0gJ0EnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc2xvd2VyKCkpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfaXNzcGFjZShzZWxmLCBzaXplKToKKyAgICAgICAgd2hpdGVzcGFjZSA9ICcgXGZcblxyXHRcdicKKyAgICAgICAgcmVwZWF0cyA9IHNpemUgLy8gbGVuKHdoaXRlc3BhY2UpICsgMgorICAgICAgICBzID0gd2hpdGVzcGFjZSAqIHJlcGVhdHMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXNzcGFjZSgpKQorICAgICAgICBzICs9ICdqJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXNzcGFjZSgpKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2lzdGl0bGUoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcxMjM0NTYnCisgICAgICAgIHMgPSAnJy5qb2luKFsnQScsICdhJyAqIHNpemUsIFNVQlNUUl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzdGl0bGUoKSkKKyAgICAgICAgcyArPSAnQScKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXN0aXRsZSgpKQorICAgICAgICBzICs9ICdhQScKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzdGl0bGUoKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9pc3VwcGVyKHNlbGYsIHNpemUpOgorICAgICAgICBjaGFycyA9ICcnLmpvaW4oWyBjaHIoYykgZm9yIGMgaW4gcmFuZ2UoMjU1KSBpZiBub3QgY2hyKGMpLmlzbG93ZXIoKSBdKQorICAgICAgICByZXBlYXRzID0gc2l6ZSAvLyBsZW4oY2hhcnMpICsgMgorICAgICAgICBzID0gY2hhcnMgKiByZXBlYXRzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzdXBwZXIoKSkKKyAgICAgICAgcyArPSAnYScKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzdXBwZXIoKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYsIHNpemUpOgorICAgICAgICBzID0gJ0EnICogc2l6ZQorICAgICAgICB4ID0gcy5qb2luKFsnYWFhYWEnLCAnYmJiYmInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmNvdW50KCdhJyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5jb3VudCgnYicpLCA1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5zdGFydHN3aXRoKCdhYWFhYUEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguZW5kc3dpdGgoJ0FiYmJiYicpKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfbGp1c3Qoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCisgICAgICAgIHMgPSBTVUJTVFIubGp1c3Qoc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aChTVUJTVFIgKyAnICAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2xvd2VyKHNlbGYsIHNpemUpOgorICAgICAgICBzID0gJ0EnICogc2l6ZQorICAgICAgICBzID0gcy5sb3dlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ2EnKSwgc2l6ZSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0xKQorICAgIGRlZiB0ZXN0X2xzdHJpcChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJ2FiYyBkZWYgZ2hpJworICAgICAgICBzID0gU1VCU1RSLnJqdXN0KHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMubHN0cmlwKCksIFNVQlNUUi5sc3RyaXAoKSkKKyAgICAgICAgZGVsIHMKKyAgICAgICAgcyA9IFNVQlNUUi5sanVzdChzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc3RyaXBwZWQgPSBzLmxzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJpcHBlZCBpcyBzKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmLCBzaXplKToKKyAgICAgICAgcmVwbGFjZW1lbnQgPSAnYScKKyAgICAgICAgcyA9ICcgJyAqIHNpemUKKyAgICAgICAgcyA9IHMucmVwbGFjZSgnICcsIHJlcGxhY2VtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KHJlcGxhY2VtZW50KSwgc2l6ZSkKKyAgICAgICAgcyA9IHMucmVwbGFjZShyZXBsYWNlbWVudCwgJyAnLCBzaXplIC0gNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudChyZXBsYWNlbWVudCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stMTA6XSwgJyAgICAgIGFhYWEnKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X3JmaW5kKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJworICAgICAgICBzdWJsZW4gPSBsZW4oU1VCU1RSKQorICAgICAgICBzID0gJycuam9pbihbU1VCU1RSLCAnLScgKiBzaXplLCBTVUJTVFJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoJyAnKSwgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yZmluZCgnICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoU1VCU1RSKSwgc3VibGVuICsgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJmaW5kKCcgJywgMCwgc2l6ZSksIFNVQlNUUi5yZmluZCgnICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoU1VCU1RSLCAwLCBzdWJsZW4gKyBzaXplKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJmaW5kKCdpJyksIHN1YmxlbiArIHNpemUgKyBTVUJTVFIucmZpbmQoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJmaW5kKCdpJywgMCwgc3VibGVuKSwgU1VCU1RSLnJmaW5kKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZCgnaScsIDAsIHN1YmxlbiArIHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUi5yZmluZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoJ2onKSwgLTEpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfcmluZGV4KHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJworICAgICAgICBzdWJsZW4gPSBsZW4oU1VCU1RSKQorICAgICAgICBzID0gJycuam9pbihbU1VCU1RSLCAnLScgKiBzaXplLCBTVUJTVFJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmluZGV4KCcgJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxlbiArIHNpemUgKyBTVUJTVFIucmluZGV4KCcgJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yaW5kZXgoU1VCU1RSKSwgc3VibGVuICsgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleCgnICcsIDAsIHN1YmxlbiArIHNpemUgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTVUJTVFIucmluZGV4KCcgJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yaW5kZXgoU1VCU1RSLCAwLCBzdWJsZW4gKyBzaXplKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleCgnaScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxlbiArIHNpemUgKyBTVUJTVFIucmluZGV4KCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yaW5kZXgoJ2knLCAwLCBzdWJsZW4pLCBTVUJTVFIucmluZGV4KCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yaW5kZXgoJ2knLCAwLCBzdWJsZW4gKyBzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTVUJTVFIucmluZGV4KCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMucmluZGV4LCAnaicpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9yanVzdChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKKyAgICAgICAgcyA9IFNVQlNUUi5sanVzdChzaXplKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKFNVQlNUUiArICcgICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfcnN0cmlwKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJworICAgICAgICBzID0gU1VCU1RSLmxqdXN0KHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucnN0cmlwKCksIFNVQlNUUi5yc3RyaXAoKSkKKyAgICAgICAgZGVsIHMKKyAgICAgICAgcyA9IFNVQlNUUi5yanVzdChzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc3RyaXBwZWQgPSBzLnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJpcHBlZCBpcyBzKQorCisgICAgIyBUaGUgdGVzdCB0YWtlcyBhYm91dCBzaXplIGJ5dGVzIHRvIGJ1aWxkIGEgc3RyaW5nLCBhbmQgdGhlbiBhYm91dAorICAgICMgc3FydChzaXplKSBzdWJzdHJpbmdzIG9mIHNxcnQoc2l6ZSkgaW4gc2l6ZSBhbmQgYSBsaXN0IHRvCisgICAgIyBob2xkIHNxcnQoc2l6ZSkgaXRlbXMuIEl0J3MgY2xvc2UgYnV0IGp1c3Qgb3ZlciAyeCBzaXplLgorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9Mi4xKQorICAgIGRlZiB0ZXN0X3NwbGl0X3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICAjIENydWRlbHkgY2FsY3VsYXRlIGFuIGVzdGltYXRlIHNvIHRoYXQgdGhlIHJlc3VsdCBvZiBzLnNwbGl0IHdvbid0CisgICAgICAgICMgdGFrZSB1cCBhbiBpbm9yZGluYXRlIGFtb3VudCBvZiBtZW1vcnkKKyAgICAgICAgY2h1bmtzaXplID0gaW50KHNpemUgKiogMC41ICsgMikKKyAgICAgICAgU1VCU1RSID0gJ2EnICsgJyAnICogY2h1bmtzaXplCisgICAgICAgIHMgPSBTVUJTVFIgKiBjaHVua3NpemUKKyAgICAgICAgbCA9IHMuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgY2h1bmtzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsKSwgc2V0KFsnYSddKSkKKyAgICAgICAgZGVsIGwKKyAgICAgICAgbCA9IHMuc3BsaXQoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgY2h1bmtzaXplICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobCksIHNldChbJycsICcgJyAqIGNodW5rc2l6ZV0pKQorCisgICAgIyBBbGxvY2F0ZXMgYSBzdHJpbmcgb2YgdHdpY2Ugc2l6ZSAoYW5kIGJyaWVmbHkgdHdvKSBhbmQgYSBsaXN0IG9mCisgICAgIyBzaXplLiAgQmVjYXVzZSBvZiBpbnRlcm5hbCBhZmZhaXJzLCB0aGUgcy5zcGxpdCgpIGNhbGwgcHJvZHVjZXMgYQorICAgICMgbGlzdCBvZiBzaXplIHRpbWVzIHRoZSBzYW1lIG9uZS1jaGFyYWN0ZXIgc3RyaW5nLCBzbyB3ZSBvbmx5CisgICAgIyBzdWZmZXIgZm9yIHRoZSBsaXN0IHNpemUuIChPdGhlcndpc2UsIGl0J2QgY29zdCBhbm90aGVyIDQ4IHRpbWVzCisgICAgIyBzaXplIGluIGJ5dGVzISkgTmV2ZXJ0aGVsZXNzLCBhIGxpc3Qgb2Ygc2l6ZSB0YWtlcworICAgICMgOCpzaXplIGJ5dGVzLgorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgNSwgbWVtdXNlPTEwKQorICAgIGRlZiB0ZXN0X3NwbGl0X2xhcmdlKHNlbGYsIHNpemUpOgorICAgICAgICBzID0gJyBhJyAqIHNpemUgKyAnICcKKyAgICAgICAgbCA9IHMuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobCksIHNldChbJ2EnXSkpCisgICAgICAgIGRlbCBsCisgICAgICAgIGwgPSBzLnNwbGl0KCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsKSwgc2V0KFsnICddKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9Mi4xKQorICAgIGRlZiB0ZXN0X3NwbGl0bGluZXMoc2VsZiwgc2l6ZSk6CisgICAgICAgICMgQ3J1ZGVseSBjYWxjdWxhdGUgYW4gZXN0aW1hdGUgc28gdGhhdCB0aGUgcmVzdWx0IG9mIHMuc3BsaXQgd29uJ3QKKyAgICAgICAgIyB0YWtlIHVwIGFuIGlub3JkaW5hdGUgYW1vdW50IG9mIG1lbW9yeQorICAgICAgICBjaHVua3NpemUgPSBpbnQoc2l6ZSAqKiAwLjUgKyAyKSAvLyAyCisgICAgICAgIFNVQlNUUiA9ICcgJyAqIGNodW5rc2l6ZSArICdcbicgKyAnICcgKiBjaHVua3NpemUgKyAnXHJcbicKKyAgICAgICAgcyA9IFNVQlNUUiAqIGNodW5rc2l6ZQorICAgICAgICBsID0gcy5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIGNodW5rc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGwpLCBzZXQoWycgJyAqIGNodW5rc2l6ZV0pKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X3N0YXJ0c3dpdGgoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCisgICAgICAgIHMgPSAnLScgKiBzaXplICsgU1VCU1RSCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgocykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJy0nICogc2l6ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zdGFydHN3aXRoKFNVQlNUUikpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTEpCisgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcgICBhYmMgZGVmIGdoaSAgICcKKyAgICAgICAgcyA9IFNVQlNUUi5yanVzdChzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQorICAgICAgICBkZWwgcworICAgICAgICBzID0gU1VCU1RSLmxqdXN0KHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3Rfc3dhcGNhc2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICJhQmNEZUZHMTIuJ1x4YTlceDAwIgorICAgICAgICBzdWJsZW4gPSBsZW4oU1VCU1RSKQorICAgICAgICByZXBlYXRzID0gc2l6ZSAvLyBzdWJsZW4gKyAyCisgICAgICAgIHMgPSBTVUJTVFIgKiByZXBlYXRzCisgICAgICAgIHMgPSBzLnN3YXBjYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHN1YmxlbiAqIHJlcGVhdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1s6c3VibGVuICogM10sIFNVQlNUUi5zd2FwY2FzZSgpICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy1zdWJsZW4gKiAzOl0sIFNVQlNUUi5zd2FwY2FzZSgpICogMykKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF90aXRsZShzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJ1NwYWFIQWFhQWFoYW0nCisgICAgICAgIHMgPSBTVUJTVFIgKiAoc2l6ZSAvLyBsZW4oU1VCU1RSKSArIDIpCisgICAgICAgIHMgPSBzLnRpdGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgoU1VCU1RSICogMykudGl0bGUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKFNVQlNUUi5sb3dlcigpICogMykpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfdHJhbnNsYXRlKHNlbGYsIHNpemUpOgorICAgICAgICB0cmFucyA9IHN0cmluZy5tYWtldHJhbnMoJy5hWicsICctISQnKQorICAgICAgICBTVUJTVFIgPSAnYVp6LnouQWF6LicKKyAgICAgICAgc3VibGVuID0gbGVuKFNVQlNUUikKKyAgICAgICAgcmVwZWF0cyA9IHNpemUgLy8gc3VibGVuICsgMgorICAgICAgICBzID0gU1VCU1RSICogcmVwZWF0cworICAgICAgICBzID0gcy50cmFuc2xhdGUodHJhbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCByZXBlYXRzICogc3VibGVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbOnN1Ymxlbl0sIFNVQlNUUi50cmFuc2xhdGUodHJhbnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLXN1YmxlbjpdLCBTVUJTVFIudHJhbnNsYXRlKHRyYW5zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcuJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnIScpLCByZXBlYXRzICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCd6JyksIHJlcGVhdHMgKiAzKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyA1LCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF91cHBlcihzZWxmLCBzaXplKToKKyAgICAgICAgcyA9ICdhJyAqIHNpemUKKyAgICAgICAgcyA9IHMudXBwZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCdBJyksIHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIwLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF96ZmlsbChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJy01NjgzMjQ3MjM1OTgyMzQnCisgICAgICAgIHMgPSBTVUJTVFIuemZpbGwoc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoJzAnICsgU1VCU1RSWzE6XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJy0wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJzAnKSwgc2l6ZSAtIGxlbihTVUJTVFIpKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYsIHNpemUpOgorICAgICAgICBzID0gJy0nICogc2l6ZQorICAgICAgICBzZiA9ICclcycgJSAocywpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzID09IHNmKQorICAgICAgICBkZWwgc2YKKyAgICAgICAgc2YgPSAnLi4lcy4uJyAlIChzLCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2YpLCBsZW4ocykgKyA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2Yuc3RhcnRzd2l0aCgnLi4tJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZi5lbmRzd2l0aCgnLS4uJykpCisgICAgICAgIGRlbCBzLCBzZgorCisgICAgICAgIHNpemUgLy89IDIKKyAgICAgICAgZWRnZSA9ICctJyAqIHNpemUKKyAgICAgICAgcyA9ICcnLmpvaW4oW2VkZ2UsICclcycsIGVkZ2VdKQorICAgICAgICBkZWwgZWRnZQorICAgICAgICBzID0gcyAlICcuLi4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogMiArIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLicpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy0nKSwgc2l6ZSAqIDIpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9NSkKKyAgICBkZWYgdGVzdF9yZXByX3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICBzID0gJy0nICogc2l6ZQorICAgICAgICBzID0gcmVwcihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSArIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1swXSwgIiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTFdLCAiJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLScpLCBzaXplKQorICAgICAgICBkZWwgcworICAgICAgICAjIHJlcHIoKSB3aWxsIGNyZWF0ZSBhIHN0cmluZyBmb3VyIHRpbWVzIGFzIGxhcmdlIGFzIHRoaXMgJ2JpbmFyeQorICAgICAgICAjIHN0cmluZycsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGFsbG9jYXRlIG11Y2ggbW9yZSB0aGFuIHR3aWNlCisgICAgICAgICMgc2l6ZSBpbiB0b3RhbC4gIChXZSBkbyBleHRyYSB0ZXN0aW5nIGluIHRlc3RfcmVwcl9sYXJnZSgpKQorICAgICAgICBzID0gJ1x4MDAnICogc2l6ZQorICAgICAgICBzID0gcmVwcihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSAqIDQgKyAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbMF0sICInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy0xXSwgIiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ1xcJyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnMCcpLCBzaXplICogMikKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT01KQorICAgIGRlZiB0ZXN0X3JlcHJfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHMgPSAnXHgwMCcgKiBzaXplCisgICAgICAgIHMgPSByZXByKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogNCArIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1swXSwgIiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTFdLCAiJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnXFwnKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcwJyksIHNpemUgKiAyKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT0yKiozMiAvLyA1LCBtZW11c2U9NisyKQorICAgIGRlZiB0ZXN0X3VuaWNvZGVfcmVwcihzZWxmLCBzaXplKToKKyAgICAgICAgcyA9IHUiXHVBQUFBIiAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXByKHMpKSA+IHNpemUpCisKKyAgICAjIFRoaXMgdGVzdCBpcyBtZWFuaW5nZnVsIGV2ZW4gd2l0aCBzaXplIDwgMkcsIGFzIGxvbmcgYXMgdGhlCisgICAgIyBkb3VibGVkIHN0cmluZyBpcyA+IDJHIChidXQgaXQgdGVzdHMgbW9yZSBpZiBib3RoIGFyZSA+IDJHIDopCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMUcgKyAyLCBtZW11c2U9MykKKyAgICBkZWYgdGVzdF9jb25jYXQoc2VsZiwgc2l6ZSk6CisgICAgICAgIHMgPSAnLicgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzID0gcyArIHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy4nKSwgc2l6ZSAqIDIpCisKKyAgICAjIFRoaXMgdGVzdCBpcyBtZWFuaW5nZnVsIGV2ZW4gd2l0aCBzaXplIDwgMkcsIGFzIGxvbmcgYXMgdGhlCisgICAgIyByZXBlYXRlZCBzdHJpbmcgaXMgPiAyRyAoYnV0IGl0IHRlc3RzIG1vcmUgaWYgYm90aCBhcmUgPiAyRyA6KQorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzFHICsgMiwgbWVtdXNlPTMpCisgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYsIHNpemUpOgorICAgICAgICBzID0gJy4nICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgcyA9IHMgKiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcuJyksIHNpemUgKiAyKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyMCwgbWVtdXNlPTIpCisgICAgZGVmIHRlc3Rfc2xpY2VfYW5kX2dldGl0ZW0oc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcwMTIzNDU2Nzg5JworICAgICAgICBzdWJsZW4gPSBsZW4oU1VCU1RSKQorICAgICAgICBzID0gU1VCU1RSICogKHNpemUgLy8gc3VibGVuKQorICAgICAgICBzdGVwc2l6ZSA9IGxlbihzKSAvLyAxMDAKKyAgICAgICAgc3RlcHNpemUgPSBzdGVwc2l6ZSAtIChzdGVwc2l6ZSAlIHN1YmxlbikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpIC0gc3RlcHNpemUsIHN0ZXBzaXplKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tpXSwgU1VCU1RSWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2k6aSArIHN1Ymxlbl0sIFNVQlNUUikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tpOmkgKyBzdWJsZW46Ml0sIFNVQlNUUls6OjJdKQorICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2kgKyBzdWJsZW4gLSAxOmkgLSAxOi0zXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUltzdWJsZW46Oi0zXSkKKyAgICAgICAgIyBNYWtlIHN1cmUgd2UgZG8gc29tZSBzbGljaW5nIGFuZCBpbmRleGluZyBuZWFyIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICMgc3RyaW5nLCB0b28uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tsZW4ocykgLSAxXSwgU1VCU1RSWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy0xXSwgU1VCU1RSWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xlbihzKSAtIDEwXSwgU1VCU1RSWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLXN1Ymxlbl0sIFNVQlNUUlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xlbihzKTpdLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xlbihzKSAtIDE6XSwgU1VCU1RSWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy0xOl0sIFNVQlNUUlstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tsZW4ocykgLSBzdWJsZW46XSwgU1VCU1RSKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLXN1YmxlbjpdLCBTVUJTVFIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNbOl0pLCBsZW4ocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNbOmxlbihzKSAtIDVdKSwgbGVuKHMpIC0gNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc1s1Oi01XSksIGxlbihzKSAtIDEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIHMsIGxlbihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgcywgbGVuKHMpICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgcywgbGVuKHMpICsgMTw8MzEpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcwMTIzNDU2Nzg5JworICAgICAgICBlZGdlID0gJy0nICogKHNpemUgLy8gMikKKyAgICAgICAgcyA9ICcnLmpvaW4oW2VkZ2UsIFNVQlNUUiwgZWRnZV0pCisgICAgICAgIGRlbCBlZGdlCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oU1VCU1RSLCBzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKFNVQlNUUiAqIDIsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJy0nLCBzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgcykKKyAgICAgICAgcyArPSAnYScKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIHMpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYsIHNpemUpOgorICAgICAgICBzMSA9ICctJyAqIHNpemUKKyAgICAgICAgczIgPSAnLScgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSA9PSBzMikKKyAgICAgICAgZGVsIHMyCisgICAgICAgIHMyID0gczEgKyAnYScKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzMSA9PSBzMikKKyAgICAgICAgZGVsIHMyCisgICAgICAgIHMyID0gJy4nICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMxID09IHMyKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfaGFzaChzZWxmLCBzaXplKToKKyAgICAgICAgIyBOb3Qgc3VyZSBpZiB3ZSBjYW4gZG8gYW55IG1lYW5pbmdmdWwgdGVzdHMgaGVyZS4uLiAgRXZlbiBpZiB3ZQorICAgICAgICAjIHN0YXJ0IHJlbHlpbmcgb24gdGhlIGV4YWN0IGFsZ29yaXRobSB1c2VkLCB0aGUgcmVzdWx0IHdpbGwgYmUKKyAgICAgICAgIyBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBDICdsb25nIGludCcuICBFdmVuIHRoaXMKKyAgICAgICAgIyB0ZXN0IGlzIGRvZGd5ICh0aGVyZSdzIG5vICpndWFyYW50ZWUqIHRoYXQgdGhlIHR3byB0aGluZ3Mgc2hvdWxkCisgICAgICAgICMgaGF2ZSBhIGRpZmZlcmVudCBoYXNoLCBldmVuIGlmIHRoZXksIGluIHRoZSBjdXJyZW50CisgICAgICAgICMgaW1wbGVtZW50YXRpb24sIGFsbW9zdCBhbHdheXMgZG8uKQorICAgICAgICBzID0gJ1x4MDAnICogc2l6ZQorICAgICAgICBoMSA9IGhhc2gocykKKyAgICAgICAgZGVsIHMKKyAgICAgICAgcyA9ICdceDAwJyAqIChzaXplICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA9PSBoYXNoKHMpKQorCitjbGFzcyBUdXBsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBUdXBsZXMgaGF2ZSBhIHNtYWxsLCBmaXhlZC1zaXplZCBoZWFkIGFuZCBhbiBhcnJheSBvZiBwb2ludGVycyB0bworICAgICMgZGF0YS4gIFNpbmNlIHdlJ3JlIHRlc3RpbmcgNjQtYml0IGFkZHJlc3NpbmcsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUKKyAgICAjIHBvaW50ZXJzIGFyZSA4IGJ5dGVzLCBhbmQgdGhhdCB0aHVzIHRoYXQgdGhlIHR1cGxlcyB0YWtlIHVwIDggYnl0ZXMKKyAgICAjIHBlciBzaXplLgorCisgICAgIyBBcyBhIHNpZGUtZWZmZWN0IG9mIHRlc3RpbmcgbG9uZyB0dXBsZXMsIHRoZXNlIHRlc3RzIGhhcHBlbiB0byB0ZXN0CisgICAgIyBoYXZpbmcgbW9yZSB0aGFuIDI8PDMxIHJlZmVyZW5jZXMgdG8gYW55IGdpdmVuIG9iamVjdC4gSGVuY2UgdGhlCisgICAgIyB1c2Ugb2YgZGlmZmVyZW50IHR5cGVzIG9mIG9iamVjdHMgYXMgY29udGVudHMgaW4gZGlmZmVyZW50IHRlc3RzLgorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MTYpCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmLCBzaXplKToKKyAgICAgICAgdDEgPSAodScnLCkgKiBzaXplCisgICAgICAgIHQyID0gKHUnJywpICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPT0gdDIpCisgICAgICAgIGRlbCB0MgorICAgICAgICB0MiA9ICh1JycsKSAqIChzaXplICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0MSA9PSB0MikKKyAgICAgICAgZGVsIHQyCisgICAgICAgIHQyID0gKDEsKSAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0MSA9PSB0MikKKworICAgICMgVGVzdCBjb25jYXRlbmF0aW5nIGludG8gYSBzaW5nbGUgdHVwbGUgb2YgbW9yZSB0aGFuIDJHIGluIGxlbmd0aCwKKyAgICAjIGFuZCBjb25jYXRlbmF0aW5nIGEgdHVwbGUgb2YgbW9yZSB0aGFuIDJHIGluIGxlbmd0aCBzZXBhcmF0ZWx5LCBzbworICAgICMgdGhlIHNtYWxsZXIgdGVzdCBzdGlsbCBnZXRzIHJ1biBldmVuIGlmIHRoZXJlIGlzbid0IG1lbW9yeSBmb3IgdGhlCisgICAgIyBsYXJnZXIgdGVzdCAoYnV0IHdlIHN0aWxsIGxldCB0aGUgdGVzdGVyIGtub3cgdGhlIGxhcmdlciB0ZXN0IGlzCisgICAgIyBza2lwcGVkLCBpbiB2ZXJib3NlIG1vZGUuKQorICAgIGRlZiBiYXNpY19jb25jYXRfdGVzdChzZWxmLCBzaXplKToKKyAgICAgICAgdCA9ICgoKSwpICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgc2l6ZSkKKyAgICAgICAgdCA9IHQgKyB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplICogMikKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MjQpCisgICAgZGVmIHRlc3RfY29uY2F0X3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY19jb25jYXRfdGVzdChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MjQpCisgICAgZGVmIHRlc3RfY29uY2F0X2xhcmdlKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY19jb25jYXRfdGVzdChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDEwLCBtZW11c2U9OCAqIDUpCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZiwgc2l6ZSk6CisgICAgICAgIHQgPSAoMSwgMiwgMywgNCwgNSkgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbig1LCB0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgxLCAyLCAzLCA0LCA1KSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigwLCB0KQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTgpCisgICAgZGVmIHRlc3RfaGFzaChzZWxmLCBzaXplKToKKyAgICAgICAgdDEgPSAoMCwpICogc2l6ZQorICAgICAgICBoMSA9IGhhc2godDEpCisgICAgICAgIGRlbCB0MQorICAgICAgICB0MiA9ICgwLCkgKiAoc2l6ZSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPT0gaGFzaCh0MikpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9OCkKKyAgICBkZWYgdGVzdF9pbmRleF9hbmRfc2xpY2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHQgPSAoTm9uZSwpICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Wy0xXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0WzVdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZSAtIDFdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCB0LCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbOjVdLCAoTm9uZSwpICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Wy01Ol0sIChOb25lLCkgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbMjA6MjVdLCAoTm9uZSwpICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Wy0yNTotMjBdLCAoTm9uZSwpICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W3NpemUgLSA1Ol0sIChOb25lLCkgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZSAtIDU6c2l6ZV0sIChOb25lLCkgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZSAtIDY6c2l6ZSAtIDJdLCAoTm9uZSwpICogNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W3NpemU6c2l6ZV0sICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZTpzaXplKzVdLCAoKSkKKworICAgICMgTGlrZSB0ZXN0X2NvbmNhdCwgc3BsaXQgaW4gdHdvLgorICAgIGRlZiBiYXNpY190ZXN0X3JlcGVhdChzZWxmLCBzaXplKToKKyAgICAgICAgdCA9ICgnJywpICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgc2l6ZSkKKyAgICAgICAgdCA9IHQgKiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplICogMikKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MjQpCisgICAgZGVmIHRlc3RfcmVwZWF0X3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X3JlcGVhdChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MjQpCisgICAgZGVmIHRlc3RfcmVwZWF0X2xhcmdlKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X3JlcGVhdChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMUcgLSAxLCBtZW11c2U9MTIpCisgICAgZGVmIHRlc3RfcmVwZWF0X2xhcmdlXzIoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfcmVwZWF0KHNpemUpCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8xRyAtIDEsIG1lbXVzZT05KQorICAgIGRlZiB0ZXN0X2Zyb21fMkdfZ2VuZXJhdG9yKHNlbGYsIHNpemUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ID0gdHVwbGUoeHJhbmdlKHNpemUpKQorICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIGNvdW50KQorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIHNpemUpCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8xRyAtIDI1LCBtZW11c2U9OSkKKyAgICBkZWYgdGVzdF9mcm9tX2FsbW9zdF8yR19nZW5lcmF0b3Ioc2VsZiwgc2l6ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHQgPSB0dXBsZSh4cmFuZ2Uoc2l6ZSkpCisgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtLCBjb3VudCkKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBzaXplKQorICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSwgZXhwZWN0ZWQgb24gMzItYml0CisKKyAgICAjIExpa2UgdGVzdF9jb25jYXQsIHNwbGl0IGluIHR3by4KKyAgICBkZWYgYmFzaWNfdGVzdF9yZXByKHNlbGYsIHNpemUpOgorICAgICAgICB0ID0gKDAsKSAqIHNpemUKKyAgICAgICAgcyA9IHJlcHIodCkKKyAgICAgICAgIyBUaGUgcmVwciBvZiBhIHR1cGxlIG9mIDAncyBpcyBleGFjdGx5IHRocmVlIHRpbWVzIHRoZSB0dXBsZSBsZW5ndGguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzo1XSwgJygwLCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy01Ol0sICcwLCAwKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnMCcpLCBzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMyArIDIsIG1lbXVzZT04ICsgMykKKyAgICBkZWYgdGVzdF9yZXByX3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X3JlcHIoc2l6ZSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTggKyAzKQorICAgIGRlZiB0ZXN0X3JlcHJfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfcmVwcihzaXplKQorCitjbGFzcyBMaXN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIExpa2UgdHVwbGVzLCBsaXN0cyBoYXZlIGEgc21hbGwsIGZpeGVkLXNpemVkIGhlYWQgYW5kIGFuIGFycmF5IG9mCisgICAgIyBwb2ludGVycyB0byBkYXRhLCBzbyA4IGJ5dGVzIHBlciBzaXplLiBBbHNvIGxpa2UgdHVwbGVzLCB3ZSBtYWtlIHRoZQorICAgICMgbGlzdHMgaG9sZCByZWZlcmVuY2VzIHRvIHZhcmlvdXMgb2JqZWN0cyB0byB0ZXN0IHRoZWlyIHJlZmNvdW50CisgICAgIyBsaW1pdHMuCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0xNikKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYsIHNpemUpOgorICAgICAgICBsMSA9IFt1JyddICogc2l6ZQorICAgICAgICBsMiA9IFt1JyddICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUobDEgPT0gbDIpCisgICAgICAgIGRlbCBsMgorICAgICAgICBsMiA9IFt1JyddICogKHNpemUgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGwxID09IGwyKQorICAgICAgICBkZWwgbDIKKyAgICAgICAgbDIgPSBbMl0gKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobDEgPT0gbDIpCisKKyAgICAjIFRlc3QgY29uY2F0ZW5hdGluZyBpbnRvIGEgc2luZ2xlIGxpc3Qgb2YgbW9yZSB0aGFuIDJHIGluIGxlbmd0aCwKKyAgICAjIGFuZCBjb25jYXRlbmF0aW5nIGEgbGlzdCBvZiBtb3JlIHRoYW4gMkcgaW4gbGVuZ3RoIHNlcGFyYXRlbHksIHNvCisgICAgIyB0aGUgc21hbGxlciB0ZXN0IHN0aWxsIGdldHMgcnVuIGV2ZW4gaWYgdGhlcmUgaXNuJ3QgbWVtb3J5IGZvciB0aGUKKyAgICAjIGxhcmdlciB0ZXN0IChidXQgd2Ugc3RpbGwgbGV0IHRoZSB0ZXN0ZXIga25vdyB0aGUgbGFyZ2VyIHRlc3QgaXMKKyAgICAjIHNraXBwZWQsIGluIHZlcmJvc2UgbW9kZS4pCisgICAgZGVmIGJhc2ljX3Rlc3RfY29uY2F0KHNlbGYsIHNpemUpOgorICAgICAgICBsID0gW1tdXSAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIGwgPSBsICsgbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDIpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAyICsgMiwgbWVtdXNlPTI0KQorICAgIGRlZiB0ZXN0X2NvbmNhdF9zbWFsbChzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9jb25jYXQoc2l6ZSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTI0KQorICAgIGRlZiB0ZXN0X2NvbmNhdF9sYXJnZShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9jb25jYXQoc2l6ZSkKKworICAgIGRlZiBiYXNpY190ZXN0X2lucGxhY2VfY29uY2F0KHNlbGYsIHNpemUpOgorICAgICAgICBsID0gW3N5cy5zdGRvdXRdICogc2l6ZQorICAgICAgICBsICs9IGwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFswXSBpcyBsWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbc2l6ZSAtIDFdIGlzIGxbc2l6ZSArIDFdKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0yNCkKKyAgICBkZWYgdGVzdF9pbnBsYWNlX2NvbmNhdF9zbWFsbChzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9pbnBsYWNlX2NvbmNhdChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MjQpCisgICAgZGVmIHRlc3RfaW5wbGFjZV9jb25jYXRfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfaW5wbGFjZV9jb25jYXQoc2l6ZSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDUgKyAxMCwgbWVtdXNlPTggKiA1KQorICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYsIHNpemUpOgorICAgICAgICBsID0gWzEsIDIsIDMsIDQsIDVdICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oNSwgbCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihbMSwgMiwgMywgNCwgNV0sIGwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMCwgbCkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT04KQorICAgIGRlZiB0ZXN0X2hhc2goc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbMF0gKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgbCkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT04KQorICAgIGRlZiB0ZXN0X2luZGV4X2FuZF9zbGljZShzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFtOb25lXSAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMV0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFs1XSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemUgLSAxXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgbCwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzo1XSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy01Ol0sIFtOb25lXSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFsyMDoyNV0sIFtOb25lXSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMjU6LTIwXSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemUgLSA1Ol0sIFtOb25lXSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFtzaXplIC0gNTpzaXplXSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemUgLSA2OnNpemUgLSAyXSwgW05vbmVdICogNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemU6c2l6ZV0sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZTpzaXplKzVdLCBbXSkKKworICAgICAgICBsW3NpemUgLSAyXSA9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMzpdLCBbTm9uZSwgNSwgTm9uZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5jb3VudCg1KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgbCwgc2l6ZSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisKKyAgICAgICAgbFtzaXplIC0gNzpdID0gWzEsIDIsIDMsIDQsIDVdCisgICAgICAgIHNpemUgLT0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy03Ol0sIFtOb25lLCBOb25lLCAxLCAyLCAzLCA0LCA1XSkKKworICAgICAgICBsWzo3XSA9IFsxLCAyLCAzLCA0LCA1XQorICAgICAgICBzaXplIC09IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFs6N10sIFsxLCAyLCAzLCA0LCA1LCBOb25lLCBOb25lXSkKKworICAgICAgICBkZWwgbFtzaXplIC0gMV0KKyAgICAgICAgc2l6ZSAtPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTFdLCA0KQorCisgICAgICAgIGRlbCBsWy0yOl0KKyAgICAgICAgc2l6ZSAtPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTFdLCAyKQorCisgICAgICAgIGRlbCBsWzBdCisgICAgICAgIHNpemUgLT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzBdLCAyKQorCisgICAgICAgIGRlbCBsWzoyXQorICAgICAgICBzaXplIC09IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFswXSwgNCkKKworICAgICMgTGlrZSB0ZXN0X2NvbmNhdCwgc3BsaXQgaW4gdHdvLgorICAgIGRlZiBiYXNpY190ZXN0X3JlcGVhdChzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFtdICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGwpCisgICAgICAgIGwgPSBbJyddICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgbCA9IGwgKiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogMikKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MjQpCisgICAgZGVmIHRlc3RfcmVwZWF0X3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X3JlcGVhdChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MjQpCisgICAgZGVmIHRlc3RfcmVwZWF0X2xhcmdlKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X3JlcGVhdChzaXplKQorCisgICAgZGVmIGJhc2ljX3Rlc3RfaW5wbGFjZV9yZXBlYXQoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbJyddCisgICAgICAgIGwgKj0gc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbMF0gaXMgbFstMV0pCisgICAgICAgIGRlbCBsCisKKyAgICAgICAgbCA9IFsnJ10gKiBzaXplCisgICAgICAgIGwgKj0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsW3NpemUgLSAxXSBpcyBsWy0xXSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MTYpCisgICAgZGVmIHRlc3RfaW5wbGFjZV9yZXBlYXRfc21hbGwoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfaW5wbGFjZV9yZXBlYXQoc2l6ZSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTE2KQorICAgIGRlZiB0ZXN0X2lucGxhY2VfcmVwZWF0X2xhcmdlKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X2lucGxhY2VfcmVwZWF0KHNpemUpCisKKyAgICBkZWYgYmFzaWNfdGVzdF9yZXByKHNlbGYsIHNpemUpOgorICAgICAgICBsID0gWzBdICogc2l6ZQorICAgICAgICBzID0gcmVwcihsKQorICAgICAgICAjIFRoZSByZXByIG9mIGEgbGlzdCBvZiAwJ3MgaXMgZXhhY3RseSB0aHJlZSB0aW1lcyB0aGUgbGlzdCBsZW5ndGguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzo1XSwgJ1swLCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy01Ol0sICcwLCAwXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnMCcpLCBzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMyArIDIsIG1lbXVzZT04ICsgMykKKyAgICBkZWYgdGVzdF9yZXByX3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X3JlcHIoc2l6ZSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTggKyAzKQorICAgIGRlZiB0ZXN0X3JlcHJfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfcmVwcihzaXplKQorCisgICAgIyBsaXN0IG92ZXJhbGxvY2F0ZXMgfjEvOHRoIG9mIHRoZSB0b3RhbCBzaXplIChvbiBmaXJzdCBleHBhbnNpb24pIHNvCisgICAgIyB0aGUgc2luZ2xlIGxpc3QuYXBwZW5kIGNhbGwgcHV0cyBtZW11c2UgYXQgOSBieXRlcyBwZXIgc2l6ZS4KKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTkpCisgICAgZGVmIHRlc3RfYXBwZW5kKHNlbGYsIHNpemUpOgorICAgICAgICBsID0gW29iamVjdCgpXSAqIHNpemUKKyAgICAgICAgbC5hcHBlbmQob2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsWy0zXSBpcyBsWy0yXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsWy0yXSBpcyBsWy0xXSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDUgKyAyLCBtZW11c2U9OCAqIDUpCisgICAgZGVmIHRlc3RfY291bnQoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbMSwgMiwgMywgNCwgNV0gKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5jb3VudCgxKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmNvdW50KCIxIiksIDApCisKKyAgICBkZWYgYmFzaWNfdGVzdF9leHRlbmQoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbZmlsZV0gKiBzaXplCisgICAgICAgIGwuZXh0ZW5kKGwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbMF0gaXMgbFstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsW3NpemUgLSAxXSBpcyBsW3NpemUgKyAxXSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MTYpCisgICAgZGVmIHRlc3RfZXh0ZW5kX3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X2V4dGVuZChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MTYpCisgICAgZGVmIHRlc3RfZXh0ZW5kX2xhcmdlKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X2V4dGVuZChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDIsIG1lbXVzZT04ICogNSkKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFsxTCwgMkwsIDNMLCA0TCwgNUxdICogc2l6ZQorICAgICAgICBzaXplICo9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmluZGV4KDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuaW5kZXgoNSwgc2l6ZSAtIDUpLCBzaXplIC0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmluZGV4KDUsIHNpemUgLSA1LCBzaXplKSwgc2l6ZSAtIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGwuaW5kZXgsIDEsIHNpemUgLSA0LCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsLmluZGV4LCA2TCkKKworICAgICMgVGhpcyB0ZXN0cyBzdWZmZXJzIGZyb20gb3ZlcmFsbG9jYXRpb24sIGp1c3QgbGlrZSB0ZXN0X2FwcGVuZC4KKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9OSkKKyAgICBkZWYgdGVzdF9pbnNlcnQoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbMS4wXSAqIHNpemUKKyAgICAgICAgbC5pbnNlcnQoc2l6ZSAtIDEsICJBIikKKyAgICAgICAgc2l6ZSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTM6XSwgWzEuMCwgIkEiLCAxLjBdKQorCisgICAgICAgIGwuaW5zZXJ0KHNpemUgKyAxLCAiQiIpCisgICAgICAgIHNpemUgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0zOl0sIFsiQSIsIDEuMCwgIkIiXSkKKworICAgICAgICBsLmluc2VydCgxLCAiQyIpCisgICAgICAgIHNpemUgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzozXSwgWzEuMCwgIkMiLCAxLjBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZSAtIDM6XSwgWyJBIiwgMS4wLCAiQiJdKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDQsIG1lbXVzZT04ICogNSkKKyAgICBkZWYgdGVzdF9wb3Aoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbdSJhIiwgdSJiIiwgdSJjIiwgdSJkIiwgdSJlIl0gKiBzaXplCisgICAgICAgIHNpemUgKj0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKworICAgICAgICBpdGVtID0gbC5wb3AoKQorICAgICAgICBzaXplIC09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbSwgdSJlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0yOl0sIFt1ImMiLCB1ImQiXSkKKworICAgICAgICBpdGVtID0gbC5wb3AoMCkKKyAgICAgICAgc2l6ZSAtPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIHUiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFs6Ml0sIFt1ImIiLCB1ImMiXSkKKworICAgICAgICBpdGVtID0gbC5wb3Aoc2l6ZSAtIDIpCisgICAgICAgIHNpemUgLT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtLCB1ImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTI6XSwgW3UiYiIsIHUiZCJdKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTgpCisgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYsIHNpemUpOgorICAgICAgICBsID0gWzEwXSAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisKKyAgICAgICAgbC5yZW1vdmUoMTApCisgICAgICAgIHNpemUgLT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKworICAgICAgICAjIEJlY2F1c2Ugb2YgdGhlIGVhcmxpZXIgbC5yZW1vdmUoKSwgdGhpcyBhcHBlbmQgZG9lc24ndCB0cmlnZ2VyCisgICAgICAgICMgYSByZXNpemUuCisgICAgICAgIGwuYXBwZW5kKDUpCisgICAgICAgIHNpemUgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0yOl0sIFsxMCwgNV0pCisgICAgICAgIGwucmVtb3ZlKDUpCisgICAgICAgIHNpemUgLT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0yOl0sIFsxMCwgMTBdKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDIsIG1lbXVzZT04ICogNSkKKyAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYsIHNpemUpOgorICAgICAgICBsID0gWzEsIDIsIDMsIDQsIDVdICogc2l6ZQorICAgICAgICBsLnJldmVyc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstNTpdLCBbNSwgNCwgMywgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFs6NV0sIFs1LCA0LCAzLCAyLCAxXSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDUgKyAyLCBtZW11c2U9OCAqIDUpCisgICAgZGVmIHRlc3Rfc29ydChzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFsxLCAyLCAzLCA0LCA1XSAqIHNpemUKKyAgICAgICAgbC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuY291bnQoMSksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFs6MTBdLCBbMV0gKiAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0xMDpdLCBbNV0gKiAxMCkKKworY2xhc3MgQnVmZmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8xRywgbWVtdXNlPTQpCisgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYsIHNpemUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgYiA9IGJ1ZmZlcigiQUFBQSIpKnNpemUKKyAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgorICAgICAgICAgICAgcGFzcyAjIGFjY2VwdGFibGUgb24gMzItYml0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgICAgIGZvciBjIGluIGI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCAnQScpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgc2l6ZSo0KQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJUZXN0LCBUdXBsZVRlc3QsIExpc3RUZXN0LCBCdWZmZXJUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGlmIGxlbihzeXMuYXJndikgPiAxOgorICAgICAgICB0ZXN0X3N1cHBvcnQuc2V0X21lbWxpbWl0KHN5cy5hcmd2WzFdKQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MjVmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weQpAQCAtMCwwICsxLDIzNiBAQAorIiIiVGVzdCB0aGUgYmluYXNjaWkgQyBtb2R1bGUuIiIiCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGFycmF5CisKKyMgTm90ZTogIipfaGV4IiBmdW5jdGlvbnMgYXJlIGFsaWFzZXMgZm9yICIodW4paGV4bGlmeSIKK2IyYV9mdW5jdGlvbnMgPSBbJ2IyYV9iYXNlNjQnLCAnYjJhX2hleCcsICdiMmFfaHF4JywgJ2IyYV9xcCcsICdiMmFfdXUnLAorICAgICAgICAgICAgICAgICAnaGV4bGlmeScsICdybGVjb2RlX2hxeCddCithMmJfZnVuY3Rpb25zID0gWydhMmJfYmFzZTY0JywgJ2EyYl9oZXgnLCAnYTJiX2hxeCcsICdhMmJfcXAnLCAnYTJiX3V1JywKKyAgICAgICAgICAgICAgICAgJ3VuaGV4bGlmeScsICdybGVkZWNvZGVfaHF4J10KK2FsbF9mdW5jdGlvbnMgPSBhMmJfZnVuY3Rpb25zICsgYjJhX2Z1bmN0aW9ucyArIFsnY3JjMzInLCAnY3JjX2hxeCddCisKKworY2xhc3MgQmluQVNDSUlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHR5cGUydGVzdCA9IHN0cgorICAgICMgQ3JlYXRlIGJpbmFyeSB0ZXN0IGRhdGEKKyAgICByYXdkYXRhID0gIlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuXHJcbiIKKyAgICAjIEJlIHNsb3cgc28gd2UgZG9uJ3QgZGVwZW5kIG9uIG90aGVyIG1vZHVsZXMKKyAgICByYXdkYXRhICs9ICIiLmpvaW4obWFwKGNociwgeHJhbmdlKDI1NikpKQorICAgIHJhd2RhdGEgKz0gIlxyXG5IZWxsbyB3b3JsZC5cbiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi50eXBlMnRlc3Qoc2VsZi5yYXdkYXRhKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBtb2R1bGUgZXhjZXB0aW9ucworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhiaW5hc2NpaS5FcnJvciwgRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYmluYXNjaWkuSW5jb21wbGV0ZSwgRXhjZXB0aW9uKSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVzZW5jZSBvZiBhbGwgZnVuY3Rpb25zCisgICAgICAgIGZvciBuYW1lIGluIGFsbF9mdW5jdGlvbnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihnZXRhdHRyKGJpbmFzY2lpLCBuYW1lKSwgJ19fY2FsbF9fJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIoYmluYXNjaWksIG5hbWUpKQorCisgICAgZGVmIHRlc3RfcmV0dXJuZWRfdmFsdWUoc2VsZik6CisgICAgICAgICMgTGltaXQgdG8gdGhlIG1pbmltdW0gb2YgYWxsIGxpbWl0cyAoYjJhX3V1KQorICAgICAgICBNQVhfQUxMID0gNDUKKyAgICAgICAgcmF3ID0gc2VsZi5yYXdkYXRhWzpNQVhfQUxMXQorICAgICAgICBmb3IgZmEsIGZiIGluIHppcChhMmJfZnVuY3Rpb25zLCBiMmFfZnVuY3Rpb25zKToKKyAgICAgICAgICAgIGEyYiA9IGdldGF0dHIoYmluYXNjaWksIGZhKQorICAgICAgICAgICAgYjJhID0gZ2V0YXR0cihiaW5hc2NpaSwgZmIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYSA9IGIyYShzZWxmLnR5cGUydGVzdChyYXcpKQorICAgICAgICAgICAgICAgIHJlcyA9IGEyYihzZWxmLnR5cGUydGVzdChhKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInt9L3t9IGNvbnZlcnNpb24gcmFpc2VzIHshcn0iLmZvcm1hdChmYiwgZmEsIGVycikpCisgICAgICAgICAgICBpZiBmYiA9PSAnYjJhX2hxeCc6CisgICAgICAgICAgICAgICAgIyBiMmFfaHF4IHJldHVybnMgYSB0dXBsZQorICAgICAgICAgICAgICAgIHJlcywgXyA9IHJlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHJhdywgInt9L3t9IGNvbnZlcnNpb246ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInshcn0gIT0geyFyfSIuZm9ybWF0KGZiLCBmYSwgcmVzLCByYXcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlcywgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGEsIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhtYXgob3JkKGMpIGZvciBjIGluIGEpLCAxMjgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaW5hc2NpaS5jcmNfaHF4KHJhdywgMCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpbmFzY2lpLmNyYzMyKHJhdyksIGludCkKKworICAgIGRlZiB0ZXN0X2Jhc2U2NHZhbGlkKHNlbGYpOgorICAgICAgICAjIFRlc3QgYmFzZTY0IHdpdGggdmFsaWQgZGF0YQorICAgICAgICBNQVhfQkFTRTY0ID0gNTcKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5yYXdkYXRhKSwgTUFYX0JBU0U2NCk6CisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3Qoc2VsZi5yYXdkYXRhW2k6aStNQVhfQkFTRTY0XSkKKyAgICAgICAgICAgIGEgPSBiaW5hc2NpaS5iMmFfYmFzZTY0KGIpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoYSkKKyAgICAgICAgcmVzID0gIiIKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QobGluZSkKKyAgICAgICAgICAgIGIgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGEpCisgICAgICAgICAgICByZXMgPSByZXMgKyBiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLnJhd2RhdGEpCisKKyAgICBkZWYgdGVzdF9iYXNlNjRpbnZhbGlkKHNlbGYpOgorICAgICAgICAjIFRlc3QgYmFzZTY0IHdpdGggcmFuZG9tIGludmFsaWQgY2hhcmFjdGVycyBzcHJpbmtsZWQgdGhyb3VnaG91dAorICAgICAgICAjIChUaGlzIHJlcXVpcmVzIGEgbmV3IHZlcnNpb24gb2YgYmluYXNjaWkuKQorICAgICAgICBNQVhfQkFTRTY0ID0gNTcKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5kYXRhKSwgTUFYX0JBU0U2NCk6CisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3Qoc2VsZi5yYXdkYXRhW2k6aStNQVhfQkFTRTY0XSkKKyAgICAgICAgICAgIGEgPSBiaW5hc2NpaS5iMmFfYmFzZTY0KGIpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoYSkKKworICAgICAgICBmaWxsZXJzID0gIiIKKyAgICAgICAgdmFsaWQgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODkrLyIKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDI1Nik6CisgICAgICAgICAgICBjID0gY2hyKGkpCisgICAgICAgICAgICBpZiBjIG5vdCBpbiB2YWxpZDoKKyAgICAgICAgICAgICAgICBmaWxsZXJzICs9IGMKKyAgICAgICAgZGVmIGFkZG5vaXNlKGxpbmUpOgorICAgICAgICAgICAgbm9pc2UgPSBmaWxsZXJzCisgICAgICAgICAgICByYXRpbyA9IGxlbihsaW5lKSAvLyBsZW4obm9pc2UpCisgICAgICAgICAgICByZXMgPSAiIgorICAgICAgICAgICAgd2hpbGUgbGluZSBhbmQgbm9pc2U6CisgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpIC8vIGxlbihub2lzZSkgPiByYXRpbzoKKyAgICAgICAgICAgICAgICAgICAgYywgbGluZSA9IGxpbmVbMF0sIGxpbmVbMTpdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYywgbm9pc2UgPSBub2lzZVswXSwgbm9pc2VbMTpdCisgICAgICAgICAgICAgICAgcmVzICs9IGMKKyAgICAgICAgICAgIHJldHVybiByZXMgKyBub2lzZSArIGxpbmUKKyAgICAgICAgcmVzID0gIiIKKyAgICAgICAgZm9yIGxpbmUgaW4gbWFwKGFkZG5vaXNlLCBsaW5lcyk6CisgICAgICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QobGluZSkKKyAgICAgICAgICAgIGIgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGEpCisgICAgICAgICAgICByZXMgKz0gYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5yYXdkYXRhKQorCisgICAgICAgICMgVGVzdCBiYXNlNjQgd2l0aCBqdXN0IGludmFsaWQgY2hhcmFjdGVycywgd2hpY2ggc2hvdWxkIHJldHVybgorICAgICAgICAjIGVtcHR5IHN0cmluZ3MuIFRCRDogc2hvdWxkbid0IGl0IHJhaXNlIGFuIGV4Y2VwdGlvbiBpbnN0ZWFkID8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfYmFzZTY0KHNlbGYudHlwZTJ0ZXN0KGZpbGxlcnMpKSwgJycpCisKKyAgICBkZWYgdGVzdF91dShzZWxmKToKKyAgICAgICAgTUFYX1VVID0gNDUKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5kYXRhKSwgTUFYX1VVKToKKyAgICAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzZWxmLnJhd2RhdGFbaTppK01BWF9VVV0pCisgICAgICAgICAgICBhID0gYmluYXNjaWkuYjJhX3V1KGIpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoYSkKKyAgICAgICAgcmVzID0gIiIKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QobGluZSkKKyAgICAgICAgICAgIGIgPSBiaW5hc2NpaS5hMmJfdXUoYSkKKyAgICAgICAgICAgIHJlcyArPSBiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLnJhd2RhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfdXUoIlx4N2YiKSwgIlx4MDAiKjMxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl91dSgiXHg4MCIpLCAiXHgwMCIqMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3V1KCJceGZmIiksICJceDAwIiozMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJpbmFzY2lpLmEyYl91dSwgIlx4ZmZceDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJpbmFzY2lpLmEyYl91dSwgIiEhISEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yLCBiaW5hc2NpaS5iMmFfdXUsIDQ2KiIhIikKKworICAgICAgICAjIElzc3VlICM3NzAxIChjcmFzaCBvbiBhIHB5ZGVidWcgYnVpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX3V1KCd4JyksICchPiAgIFxuJykKKworICAgIGRlZiB0ZXN0X2NyYzMyKHNlbGYpOgorICAgICAgICBjcmMgPSBiaW5hc2NpaS5jcmMzMihzZWxmLnR5cGUydGVzdCgiVGVzdCB0aGUgQ1JDLTMyIG9mIikpCisgICAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKHNlbGYudHlwZTJ0ZXN0KCIgdGhpcyBzdHJpbmcuIiksIGNyYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmMsIDE1NzEyMjAzMzApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiaW5hc2NpaS5jcmMzMikKKworICAgIGRlZiB0ZXN0X2hxeChzZWxmKToKKyAgICAgICAgIyBQZXJmb3JtIGJpbmhleDQgc3R5bGUgUkxFLWNvbXByZXNzaW9uCisgICAgICAgICMgVGhlbiBjYWxjdWxhdGUgdGhlIGhleGJpbjQgYmluYXJ5LXRvLUFTQ0lJIHRyYW5zbGF0aW9uCisgICAgICAgIHJsZSA9IGJpbmFzY2lpLnJsZWNvZGVfaHF4KHNlbGYuZGF0YSkKKyAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV9ocXgoc2VsZi50eXBlMnRlc3QocmxlKSkKKyAgICAgICAgYiwgXyA9IGJpbmFzY2lpLmEyYl9ocXgoc2VsZi50eXBlMnRlc3QoYSkpCisgICAgICAgIHJlcyA9IGJpbmFzY2lpLnJsZWRlY29kZV9ocXgoYikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5yYXdkYXRhKQorCisgICAgZGVmIHRlc3RfaGV4KHNlbGYpOgorICAgICAgICAjIHRlc3QgaGV4bGlmaWNhdGlvbgorICAgICAgICBzID0gJ3tzXDAwNVwwMDBcMDAwXDAwMHdvcmxkaVwwMDJcMDAwXDAwMFwwMDBzXDAwNVwwMDBcMDAwXDAwMGhlbGxvaVwwMDFcMDAwXDAwMFwwMDAwJworICAgICAgICB0ID0gYmluYXNjaWkuYjJhX2hleChzZWxmLnR5cGUydGVzdChzKSkKKyAgICAgICAgdSA9IGJpbmFzY2lpLmEyYl9oZXgoc2VsZi50eXBlMnRlc3QodCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiaW5hc2NpaS5hMmJfaGV4LCB0WzotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmluYXNjaWkuYTJiX2hleCwgdFs6LTFdICsgJ3EnKQorCisgICAgICAgICMgVmVyaWZ5IHRoZSB0cmVhdG1lbnQgb2YgVW5pY29kZSBzdHJpbmdzCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmhleGxpZnkodW5pY29kZSgnYScsICdhc2NpaScpKSwgJzYxJykKKworICAgIGRlZiB0ZXN0X3FwKHNlbGYpOgorICAgICAgICAjIEEgdGVzdCBmb3IgU0YgYnVnIDUzNDM0NyAoc2VnZmF1bHRzIHdpdGhvdXQgdGhlIHByb3BlciBmaXgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJpbmFzY2lpLmEyYl9xcCgiIiwgKip7MToxfSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYmluYXNjaWkuYTJiX3FwKCoqezE6MX0pIGRpZG4ndCByYWlzZSBUeXBlRXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9xcCgiPSAiKSwgIj0gIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfcXAoIj09IiksICI9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfcXAoIj1BWCIpLCAiPUFYIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiaW5hc2NpaS5iMmFfcXAsIGZvbz0iYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfcXAoIj0wMFxyXG49MDAiKSwgIlx4MDBcclxuXHgwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBiaW5hc2NpaS5iMmFfcXAoIlx4ZmZcclxuXHhmZlxuXHhmZiIpLAorICAgICAgICAgICAgIj1GRlxyXG49RkZcclxuPUZGIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBiaW5hc2NpaS5iMmFfcXAoIjAiKjc1KyJceGZmXHJcblx4ZmZcclxuXHhmZiIpLAorICAgICAgICAgICAgIjAiKjc1KyI9XHJcbj1GRlxyXG49RkZcclxuPUZGIgorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfcXAoJ1wwXG4nKSwgJz0wMFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfcXAoJ1wwXG4nLCBxdW90ZXRhYnM9VHJ1ZSksICc9MDBcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX3FwKCdmb29cdGJhclx0XG4nKSwgJ2Zvb1x0YmFyPTA5XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmIyYV9xcCgnZm9vXHRiYXJcdFxuJywgcXVvdGV0YWJzPVRydWUpLCAnZm9vPTA5YmFyPTA5XG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX3FwKCcuJyksICc9MkUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmIyYV9xcCgnLlxuJyksICc9MkVcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX3FwKCdhLlxuJyksICdhLlxuJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBBIHRlc3QgZm9yIFNGIGJ1ZyAjMTAyMjk1My4gIE1ha2Ugc3VyZSBTeXN0ZW1FcnJvciBpcyBub3QgcmFpc2VkLgorICAgICAgICBlbXB0eSA9IHNlbGYudHlwZTJ0ZXN0KCcnKQorICAgICAgICBmb3IgZnVuYyBpbiBhbGxfZnVuY3Rpb25zOgorICAgICAgICAgICAgaWYgZnVuYyA9PSAnY3JjX2hxeCc6CisgICAgICAgICAgICAgICAgIyBjcmNfaHF4IG5lZWRzIDIgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgYmluYXNjaWkuY3JjX2hxeChlbXB0eSwgMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZiA9IGdldGF0dHIoYmluYXNjaWksIGZ1bmMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZihlbXB0eSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInt9KHshcn0pIHJhaXNlcyB7IXJ9Ii5mb3JtYXQoZnVuYywgZW1wdHksIGVycikpCisKKworY2xhc3MgQXJyYXlCaW5BU0NJSVRlc3QoQmluQVNDSUlUZXN0KToKKyAgICBkZWYgdHlwZTJ0ZXN0KHNlbGYsIHMpOgorICAgICAgICByZXR1cm4gYXJyYXkuYXJyYXkoJ2MnLCBzKQorCisKK2NsYXNzIEJ5dGVhcnJheUJpbkFTQ0lJVGVzdChCaW5BU0NJSVRlc3QpOgorICAgIHR5cGUydGVzdCA9IGJ5dGVhcnJheQorCisKK2NsYXNzIE1lbW9yeXZpZXdCaW5BU0NJSVRlc3QoQmluQVNDSUlUZXN0KToKKyAgICB0eXBlMnRlc3QgPSBtZW1vcnl2aWV3CisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmluQVNDSUlUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCaW5BU0NJSVRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlYXJyYXlCaW5BU0NJSVRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnl2aWV3QmluQVNDSUlUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iaW5oZXgucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iaW5oZXgucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmY4OTcwMwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2JpbmhleC5weQpAQCAtMCwwICsxLDQ5IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJUZXN0IHNjcmlwdCBmb3IgdGhlIGJpbmhleCBDIG1vZHVsZQorCisgICBVc2VzIHRoZSBtZWNoYW5pc20gb2YgdGhlIHB5dGhvbiBiaW5oZXggbW9kdWxlCisgICBCYXNlZCBvbiBhbiBvcmlnaW5hbCB0ZXN0IGJ5IFJvZ2VyIEUuIE1hc3NlLgorIiIiCitpbXBvcnQgYmluaGV4CitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBCaW5IZXhUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZm5hbWUxID0gdGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICBzZWxmLmZuYW1lMiA9IHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OiBvcy51bmxpbmsoc2VsZi5mbmFtZTEpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiBwYXNzCisKKyAgICAgICAgdHJ5OiBvcy51bmxpbmsoc2VsZi5mbmFtZTIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiBwYXNzCisKKyAgICBEQVRBID0gJ0phY2sgaXMgbXkgaGVybycKKworICAgIGRlZiB0ZXN0X2JpbmhleChzZWxmKToKKyAgICAgICAgZiA9IG9wZW4oc2VsZi5mbmFtZTEsICd3JykKKyAgICAgICAgZi53cml0ZShzZWxmLkRBVEEpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGJpbmhleC5iaW5oZXgoc2VsZi5mbmFtZTEsIHNlbGYuZm5hbWUyKQorCisgICAgICAgIGJpbmhleC5oZXhiaW4oc2VsZi5mbmFtZTIsIHNlbGYuZm5hbWUxKQorCisgICAgICAgIGYgPSBvcGVuKHNlbGYuZm5hbWUxLCAncicpCisgICAgICAgIGZpbmlzaCA9IGYucmVhZGxpbmUoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgZmluaXNoKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJpbkhleFRlc3RDYXNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYmlub3AucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlZjYyNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5CkBAIC0wLDAgKzEsMzMxIEBACisiIiJUZXN0cyBmb3IgYmluYXJ5IG9wZXJhdG9ycyBvbiBzdWJ0eXBlcyBvZiBidWlsdC1pbiB0eXBlcy4iIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitkZWYgZ2NkKGEsIGIpOgorICAgICIiIkdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIHVzaW5nIEV1Y2xpZCdzIGFsZ29yaXRobS4iIiIKKyAgICB3aGlsZSBhOgorICAgICAgICBhLCBiID0gYiVhLCBhCisgICAgcmV0dXJuIGIKKworZGVmIGlzaW50KHgpOgorICAgICIiIlRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgaW50IG9yIGxvbmcuIiIiCisgICAgcmV0dXJuIGlzaW5zdGFuY2UoeCwgaW50KSBvciBpc2luc3RhbmNlKHgsIGxvbmcpCisKK2RlZiBpc251bSh4KToKKyAgICAiIiJUZXN0IHdoZXRoZXIgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGEgYnVpbHQtaW4gbnVtZXJpYyB0eXBlLiIiIgorICAgIGZvciBUIGluIGludCwgbG9uZywgZmxvYXQsIGNvbXBsZXg6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoeCwgVCk6CisgICAgICAgICAgICByZXR1cm4gMQorICAgIHJldHVybiAwCisKK2RlZiBpc1JhdCh4KToKKyAgICAiIiJUZXN0IHdoZXRlciBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFJhdCBjbGFzcy4iIiIKKyAgICByZXR1cm4gaXNpbnN0YW5jZSh4LCBSYXQpCisKK2NsYXNzIFJhdChvYmplY3QpOgorCisgICAgIiIiUmF0aW9uYWwgbnVtYmVyIGltcGxlbWVudGVkIGFzIGEgbm9ybWFsaXplZCBwYWlyIG9mIGxvbmdzLiIiIgorCisgICAgX19zbG90c19fID0gWydfUmF0X19udW0nLCAnX1JhdF9fZGVuJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW09MEwsIGRlbj0xTCk6CisgICAgICAgICIiIkNvbnN0cnVjdG9yOiBSYXQoW251bVssIGRlbl1dKS4KKworICAgICAgICBUaGUgYXJndW1lbnRzIG11c3QgYmUgaW50cyBvciBsb25ncywgYW5kIGRlZmF1bHQgdG8gKDAsIDEpLiIiIgorICAgICAgICBpZiBub3QgaXNpbnQobnVtKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIlJhdCBudW1lcmF0b3IgbXVzdCBiZSBpbnQgb3IgbG9uZyAoJXIpIiAlIG51bQorICAgICAgICBpZiBub3QgaXNpbnQoZGVuKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIlJhdCBkZW5vbWluYXRvciBtdXN0IGJlIGludCBvciBsb25nICglcikiICUgZGVuCisgICAgICAgICMgQnV0IHRoZSB6ZXJvIGlzIGFsd2F5cyBvbgorICAgICAgICBpZiBkZW4gPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yLCAiemVybyBkZW5vbWluYXRvciIKKyAgICAgICAgZyA9IGdjZChkZW4sIG51bSkKKyAgICAgICAgc2VsZi5fX251bSA9IGxvbmcobnVtLy9nKQorICAgICAgICBzZWxmLl9fZGVuID0gbG9uZyhkZW4vL2cpCisKKyAgICBkZWYgX2dldF9udW0oc2VsZik6CisgICAgICAgICIiIkFjY2Vzc29yIGZ1bmN0aW9uIGZvciByZWFkLW9ubHkgJ251bScgYXR0cmlidXRlIG9mIFJhdC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19udW0KKyAgICBudW0gPSBwcm9wZXJ0eShfZ2V0X251bSwgTm9uZSkKKworICAgIGRlZiBfZ2V0X2RlbihzZWxmKToKKyAgICAgICAgIiIiQWNjZXNzb3IgZnVuY3Rpb24gZm9yIHJlYWQtb25seSAnZGVuJyBhdHRyaWJ1dGUgb2YgUmF0LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fX2RlbgorICAgIGRlbiA9IHByb3BlcnR5KF9nZXRfZGVuLCBOb25lKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAiIiJDb252ZXJ0IGEgUmF0IHRvIGFuIHN0cmluZyByZXNlbWJsaW5nIGEgUmF0IGNvbnN0cnVjdG9yIGNhbGwuIiIiCisgICAgICAgIHJldHVybiAiUmF0KCVkLCAlZCkiICUgKHNlbGYuX19udW0sIHNlbGYuX19kZW4pCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiQ29udmVydCBhIFJhdCB0byBhIHN0cmluZyByZXNlbWJsaW5nIGEgZGVjaW1hbCBudW1lcmljIHZhbHVlLiIiIgorICAgICAgICByZXR1cm4gc3RyKGZsb2F0KHNlbGYpKQorCisgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgIiIiQ29udmVydCBhIFJhdCB0byBhIGZsb2F0LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fX251bSoxLjAvc2VsZi5fX2RlbgorCisgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICIiIkNvbnZlcnQgYSBSYXQgdG8gYW4gaW50OyBzZWxmLmRlbiBtdXN0IGJlIDEuIiIiCisgICAgICAgIGlmIHNlbGYuX19kZW4gPT0gMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX19udW0pCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yLCAoIiVzIHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGludCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHNlbGYpKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiY2FuJ3QgY29udmVydCAlcyB0byBpbnQiICUgcmVwcihzZWxmKQorCisgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAiIiJDb252ZXJ0IGEgUmF0IHRvIGFuIGxvbmc7IHNlbGYuZGVuIG11c3QgYmUgMS4iIiIKKyAgICAgICAgaWYgc2VsZi5fX2RlbiA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIGxvbmcoc2VsZi5fX251bSkKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgImNhbid0IGNvbnZlcnQgJXMgdG8gbG9uZyIgJSByZXByKHNlbGYpCisKKyAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkFkZCB0d28gUmF0cywgb3IgYSBSYXQgYW5kIGEgbnVtYmVyLiIiIgorICAgICAgICBpZiBpc2ludChvdGhlcik6CisgICAgICAgICAgICBvdGhlciA9IFJhdChvdGhlcikKKyAgICAgICAgaWYgaXNSYXQob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIFJhdChzZWxmLl9fbnVtKm90aGVyLl9fZGVuICsgb3RoZXIuX19udW0qc2VsZi5fX2RlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2RlbipvdGhlci5fX2RlbikKKyAgICAgICAgaWYgaXNudW0ob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHNlbGYpICsgb3RoZXIKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBfX3JhZGRfXyA9IF9fYWRkX18KKworICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiU3VidHJhY3QgdHdvIFJhdHMsIG9yIGEgUmF0IGFuZCBhIG51bWJlci4iIiIKKyAgICAgICAgaWYgaXNpbnQob3RoZXIpOgorICAgICAgICAgICAgb3RoZXIgPSBSYXQob3RoZXIpCisgICAgICAgIGlmIGlzUmF0KG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBSYXQoc2VsZi5fX251bSpvdGhlci5fX2RlbiAtIG90aGVyLl9fbnVtKnNlbGYuX19kZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19kZW4qb3RoZXIuX19kZW4pCisgICAgICAgIGlmIGlzbnVtKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBmbG9hdChzZWxmKSAtIG90aGVyCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fcnN1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiU3VidHJhY3QgdHdvIFJhdHMsIG9yIGEgUmF0IGFuZCBhIG51bWJlciAocmV2ZXJzZWQgYXJncykuIiIiCisgICAgICAgIGlmIGlzaW50KG90aGVyKToKKyAgICAgICAgICAgIG90aGVyID0gUmF0KG90aGVyKQorICAgICAgICBpZiBpc1JhdChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gUmF0KG90aGVyLl9fbnVtKnNlbGYuX19kZW4gLSBzZWxmLl9fbnVtKm90aGVyLl9fZGVuLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fZGVuKm90aGVyLl9fZGVuKQorICAgICAgICBpZiBpc251bShvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gb3RoZXIgLSBmbG9hdChzZWxmKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX211bF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiTXVsdGlwbHkgdHdvIFJhdHMsIG9yIGEgUmF0IGFuZCBhIG51bWJlci4iIiIKKyAgICAgICAgaWYgaXNSYXQob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIFJhdChzZWxmLl9fbnVtKm90aGVyLl9fbnVtLCBzZWxmLl9fZGVuKm90aGVyLl9fZGVuKQorICAgICAgICBpZiBpc2ludChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gUmF0KHNlbGYuX19udW0qb3RoZXIsIHNlbGYuX19kZW4pCisgICAgICAgIGlmIGlzbnVtKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBmbG9hdChzZWxmKSpvdGhlcgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIF9fcm11bF9fID0gX19tdWxfXworCisgICAgZGVmIF9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiRGl2aWRlIHR3byBSYXRzLCBvciBhIFJhdCBhbmQgYSBudW1iZXIuIiIiCisgICAgICAgIGlmIGlzUmF0KG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBSYXQoc2VsZi5fX251bSpvdGhlci5fX2Rlbiwgc2VsZi5fX2RlbipvdGhlci5fX251bSkKKyAgICAgICAgaWYgaXNpbnQob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIFJhdChzZWxmLl9fbnVtLCBzZWxmLl9fZGVuKm90aGVyKQorICAgICAgICBpZiBpc251bShvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gZmxvYXQoc2VsZikgLyBvdGhlcgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIF9fZGl2X18gPSBfX3RydWVkaXZfXworCisgICAgZGVmIF9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkRpdmlkZSB0d28gUmF0cywgb3IgYSBSYXQgYW5kIGEgbnVtYmVyIChyZXZlcnNlZCBhcmdzKS4iIiIKKyAgICAgICAgaWYgaXNSYXQob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIFJhdChvdGhlci5fX251bSpzZWxmLl9fZGVuLCBvdGhlci5fX2RlbipzZWxmLl9fbnVtKQorICAgICAgICBpZiBpc2ludChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gUmF0KG90aGVyKnNlbGYuX19kZW4sIHNlbGYuX19udW0pCisgICAgICAgIGlmIGlzbnVtKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBvdGhlciAvIGZsb2F0KHNlbGYpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgX19yZGl2X18gPSBfX3J0cnVlZGl2X18KKworICAgIGRlZiBfX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJEaXZpZGUgdHdvIFJhdHMsIHJldHVybmluZyB0aGUgZmxvb3JlZCByZXN1bHQuIiIiCisgICAgICAgIGlmIGlzaW50KG90aGVyKToKKyAgICAgICAgICAgIG90aGVyID0gUmF0KG90aGVyKQorICAgICAgICBlbGlmIG5vdCBpc1JhdChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgeCA9IHNlbGYvb3RoZXIKKyAgICAgICAgcmV0dXJuIHguX19udW0gLy8geC5fX2RlbgorCisgICAgZGVmIF9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJEaXZpZGUgdHdvIFJhdHMsIHJldHVybmluZyB0aGUgZmxvb3JlZCByZXN1bHQgKHJldmVyc2VkIGFyZ3MpLiIiIgorICAgICAgICB4ID0gb3RoZXIvc2VsZgorICAgICAgICByZXR1cm4geC5fX251bSAvLyB4Ll9fZGVuCisKKyAgICBkZWYgX19kaXZtb2RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkRpdmlkZSB0d28gUmF0cywgcmV0dXJuaW5nIHF1b3RpZW50IGFuZCByZW1haW5kZXIuIiIiCisgICAgICAgIGlmIGlzaW50KG90aGVyKToKKyAgICAgICAgICAgIG90aGVyID0gUmF0KG90aGVyKQorICAgICAgICBlbGlmIG5vdCBpc1JhdChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgeCA9IHNlbGYvL290aGVyCisgICAgICAgIHJldHVybiAoeCwgc2VsZiAtIG90aGVyICogeCkKKworICAgIGRlZiBfX3JkaXZtb2RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkRpdmlkZSB0d28gUmF0cywgcmV0dXJuaW5nIHF1b3RpZW50IGFuZCByZW1haW5kZXIgKHJldmVyc2VkIGFyZ3MpLiIiIgorICAgICAgICBpZiBpc2ludChvdGhlcik6CisgICAgICAgICAgICBvdGhlciA9IFJhdChvdGhlcikKKyAgICAgICAgZWxpZiBub3QgaXNSYXQob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBkaXZtb2Qob3RoZXIsIHNlbGYpCisKKyAgICBkZWYgX19tb2RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlRha2Ugb25lIFJhdCBtb2R1bG8gYW5vdGhlci4iIiIKKyAgICAgICAgcmV0dXJuIGRpdm1vZChzZWxmLCBvdGhlcilbMV0KKworICAgIGRlZiBfX3Jtb2RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlRha2Ugb25lIFJhdCBtb2R1bG8gYW5vdGhlciAocmV2ZXJzZWQgYXJncykuIiIiCisgICAgICAgIHJldHVybiBkaXZtb2Qob3RoZXIsIHNlbGYpWzFdCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiQ29tcGFyZSB0d28gUmF0cyBmb3IgZXF1YWxpdHkuIiIiCisgICAgICAgIGlmIGlzaW50KG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fZGVuID09IDEgYW5kIHNlbGYuX19udW0gPT0gb3RoZXIKKyAgICAgICAgaWYgaXNSYXQob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19udW0gPT0gb3RoZXIuX19udW0gYW5kIHNlbGYuX19kZW4gPT0gb3RoZXIuX19kZW4KKyAgICAgICAgaWYgaXNudW0ob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHNlbGYpID09IG90aGVyCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkNvbXBhcmUgdHdvIFJhdHMgZm9yIGluZXF1YWxpdHkuIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgIF9faGFzaF9fID0gTm9uZQorCitjbGFzcyBSYXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVW5pdCB0ZXN0cyBmb3IgUmF0IGNsYXNzIGFuZCBpdHMgc3VwcG9ydCB1dGlsaXRpZXMuIiIiCisKKyAgICBkZWYgdGVzdF9nY2Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDEwLCAxMiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDEwLCAxNSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDEwLCAxMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDEwMCwgMTUpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCgtMTAsIDIpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoMTAsIC0yKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoLTEwLCAtMiksIC0yKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAyMCk6CisgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgxLCAyMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjZChpLCBqKSA+IDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjZCgtaSwgaikgPCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnY2QoaSwgLWopID4gMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2NkKC1pLCAtaikgPCAwKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGEgPSBSYXQoMTAsIDE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEubnVtLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZGVuLCAzKQorICAgICAgICBhID0gUmF0KDEwTCwgMTVMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEubnVtLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZGVuLCAzKQorICAgICAgICBhID0gUmF0KDEwLCAtMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5udW0sIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZGVuLCAzKQorICAgICAgICBhID0gUmF0KC0xMCwgMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5udW0sIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZGVuLCAzKQorICAgICAgICBhID0gUmF0KC0xMCwgLTE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEubnVtLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZGVuLCAzKQorICAgICAgICBhID0gUmF0KDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5udW0sIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZW4sIDEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEgPSBSYXQoMSwgMCkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJSYXQoMSwgMCkgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKKyAgICAgICAgZm9yIGJhZCBpbiAiMCIsIDAuMCwgMGosICgpLCBbXSwge30sIE5vbmUsIFJhdCwgdW5pdHRlc3Q6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYSA9IFJhdChiYWQpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJSYXQoJXIpIGRpZG4ndCByYWlzZSBUeXBlRXJyb3IiICUgYmFkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGEgPSBSYXQoMSwgYmFkKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmF0KDEsICVyKSBkaWRuJ3QgcmFpc2UgVHlwZUVycm9yIiAlIGJhZCkKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMiwgMykgKyBSYXQoMSwgMyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmF0KDIsIDMpICsgMSwgUmF0KDUsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgKyBSYXQoMiwgMyksIFJhdCg1LCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLjAgKyBSYXQoMSwgMiksIDEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMSwgMikgKyAxLjAsIDEuNSkKKworICAgIGRlZiB0ZXN0X3N1YihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoNywgMikgLSBSYXQoNywgNSksIFJhdCgyMSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCg3LCA1KSAtIDEsIFJhdCgyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxIC0gUmF0KDMsIDUpLCBSYXQoMiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmF0KDMsIDIpIC0gMS4wLCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMS4wIC0gUmF0KDEsIDIpLCAwLjUpCisKKyAgICBkZWYgdGVzdF9tdWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmF0KDIsIDMpICogUmF0KDUsIDcpLCBSYXQoMTAsIDIxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMTAsIDMpICogMywgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMyAqIFJhdCgxMCwgMyksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCwgNSkgKiAwLjUsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLjUgKiBSYXQoMTAsIDUpLCAxLjApCisKKyAgICBkZWYgdGVzdF9kaXYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmF0KDEwLCAzKSAvIFJhdCg1LCA3KSwgUmF0KDE0LCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMTAsIDMpIC8gMywgUmF0KDEwLCA5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyIC8gUmF0KDUpLCBSYXQoMiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMy4wICogUmF0KDEsIDIpLCAxLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmF0KDEsIDIpICogMy4wLCAxLjUpCisKKyAgICBkZWYgdGVzdF9mbG9vcmRpdihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMTApIC8vIFJhdCg0KSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMTAsIDMpIC8vIFJhdCg0LCAzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMTApIC8vIDQsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAgLy8gUmF0KDQpLCAyKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmF0KDEwKSwgUmF0KDIwLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMTApLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMCwgUmF0KDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMTApLCAxMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLjAsIFJhdCgxMCkpCisKKyAgICBkZWYgdGVzdF9mdXR1cmVfZGl2KHNlbGYpOgorICAgICAgICBleGVjIGZ1dHVyZV90ZXN0CisKKyAgICAjIFhYWCBSYW4gb3V0IG9mIHN0ZWFtOyBUTyBETzogZGl2bW9kLCBkaXYsIGZ1dHVyZSBkaXZpc2lvbgorCitmdXR1cmVfdGVzdCA9ICIiIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgorc2VsZi5hc3NlcnRFcXVhbChSYXQoMTAsIDMpIC8gUmF0KDUsIDcpLCBSYXQoMTQsIDMpKQorc2VsZi5hc3NlcnRFcXVhbChSYXQoMTAsIDMpIC8gMywgUmF0KDEwLCA5KSkKK3NlbGYuYXNzZXJ0RXF1YWwoMiAvIFJhdCg1KSwgUmF0KDIsIDUpKQorc2VsZi5hc3NlcnRFcXVhbCgzLjAgKiBSYXQoMSwgMiksIDEuNSkKK3NlbGYuYXNzZXJ0RXF1YWwoUmF0KDEsIDIpICogMy4wLCAxLjUpCitzZWxmLmFzc2VydEVxdWFsKGV2YWwoJzEvMicpLCAwLjUpCisiIiIKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUmF0VGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzMzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKQEAgLTAsMCArMSwzNjggQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0CisKKyMgV2UgZG8gYSBiaXQgb2YgdHJpY2tlcnkgaGVyZSB0byBiZSBhYmxlIHRvIHRlc3QgYm90aCB0aGUgQyBpbXBsZW1lbnRhdGlvbgorIyBhbmQgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kdWxlLgorCisjIE1ha2UgaXQgaW1wb3NzaWJsZSB0byBpbXBvcnQgdGhlIEMgaW1wbGVtZW50YXRpb24gYW55bW9yZS4KK3N5cy5tb2R1bGVzWydfYmlzZWN0J10gPSAwCisjIFdlIG11c3QgYWxzbyBoYW5kbGUgdGhlIGNhc2UgdGhhdCBiaXNlY3Qgd2FzIGltcG9ydGVkIGJlZm9yZS4KK2lmICdiaXNlY3QnIGluIHN5cy5tb2R1bGVzOgorICAgIGRlbCBzeXMubW9kdWxlc1snYmlzZWN0J10KKworIyBOb3cgd2UgY2FuIGltcG9ydCB0aGUgbW9kdWxlIGFuZCBnZXQgdGhlIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uLgoraW1wb3J0IGJpc2VjdCBhcyBweV9iaXNlY3QKKworIyBSZXN0b3JlIGV2ZXJ5dGhpbmcgdG8gbm9ybWFsLgorZGVsIHN5cy5tb2R1bGVzWydfYmlzZWN0J10KK2RlbCBzeXMubW9kdWxlc1snYmlzZWN0J10KKworIyBUaGlzIGlzIG5vdyB0aGUgbW9kdWxlIHdpdGggdGhlIEMgaW1wbGVtZW50YXRpb24uCitpbXBvcnQgYmlzZWN0IGFzIGNfYmlzZWN0CisKKworY2xhc3MgUmFuZ2Uob2JqZWN0KToKKyAgICAiIiJBIHRyaXZpYWwgeHJhbmdlKCktbGlrZSBvYmplY3Qgd2l0aG91dCBhbnkgaW50ZWdlciB3aWR0aCBsaW1pdGF0aW9ucy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnQsIHN0b3ApOgorICAgICAgICBzZWxmLnN0YXJ0ID0gc3RhcnQKKyAgICAgICAgc2VsZi5zdG9wID0gc3RvcAorICAgICAgICBzZWxmLmxhc3RfaW5zZXJ0ID0gTm9uZQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnN0b3AgLSBzZWxmLnN0YXJ0CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaWR4KToKKyAgICAgICAgbiA9IHNlbGYuc3RvcCAtIHNlbGYuc3RhcnQKKyAgICAgICAgaWYgaWR4IDwgMDoKKyAgICAgICAgICAgIGlkeCArPSBuCisgICAgICAgIGlmIGlkeCA+PSBuOgorICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcihpZHgpCisgICAgICAgIHJldHVybiBzZWxmLnN0YXJ0ICsgaWR4CisKKyAgICBkZWYgaW5zZXJ0KHNlbGYsIGlkeCwgaXRlbSk6CisgICAgICAgIHNlbGYubGFzdF9pbnNlcnQgPSBpZHgsIGl0ZW0KKworCitjbGFzcyBUZXN0QmlzZWN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBOb25lCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucHJlY29tcHV0ZWRDYXNlcyA9IFsKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFtdLCAxLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMV0sIDEsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzFdLCAyLCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMV0sIDEsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDFdLCAyLCAyKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxLCAxXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMSwgMV0sIDEsIDMpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDEsIDFdLCAyLCAzKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxLCAxLCAxXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMSwgMSwgMV0sIDEsIDQpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDEsIDEsIDFdLCAyLCA0KSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMl0sIDEsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDJdLCAxLjUsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDJdLCAyLCAyKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyXSwgMywgMiksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMSwgMiwgMl0sIDAsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDEsIDIsIDJdLCAxLCAyKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxLCAyLCAyXSwgMS41LCAyKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxLCAyLCAyXSwgMiwgNCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMSwgMiwgMl0sIDMsIDQpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgMSwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgM10sIDEuNSwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgM10sIDIsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCAyLjUsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCAzLCAzKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgNCwgMyksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDAsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCAxLCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgMS41LCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgMiwgMyksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDIuNSwgMyksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDMsIDYpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCAzLjUsIDYpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCA0LCAxMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDUsIDEwKSwKKworICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbXSwgMSwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxXSwgMSwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxXSwgMiwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxXSwgMSwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxXSwgMiwgMiksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxLCAxXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxLCAxXSwgMSwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxLCAxXSwgMiwgMyksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxLCAxLCAxXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxLCAxLCAxXSwgMSwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxLCAxLCAxXSwgMiwgNCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyXSwgMSwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyXSwgMS41LCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDJdLCAyLCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDJdLCAzLCAyKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDEsIDIsIDJdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDEsIDIsIDJdLCAxLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDEsIDIsIDJdLCAxLjUsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMSwgMiwgMl0sIDIsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMSwgMiwgMl0sIDMsIDQpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDAsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDEsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDEuNSwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgMiwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgMi41LCAyKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDNdLCAzLCAyKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDNdLCA0LCAzKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCAxLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCAxLjUsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDIsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDIuNSwgMyksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgMywgMyksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgMy41LCA2KSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCA0LCA2KSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCA1LCAxMCkKKyAgICAgICAgXQorCisgICAgZGVmIHRlc3RfcHJlY29tcHV0ZWQoc2VsZik6CisgICAgICAgIGZvciBmdW5jLCBkYXRhLCBlbGVtLCBleHBlY3RlZCBpbiBzZWxmLnByZWNvbXB1dGVkQ2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoZGF0YSwgZWxlbSksIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKFVzZXJMaXN0KGRhdGEpLCBlbGVtKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV9sbyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAzMzAxCisgICAgICAgIG1vZCA9IHNlbGYubW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuaW5zb3J0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuaW5zb3J0X3JpZ2h0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKKworICAgIGRlZiB0ZXN0X2xhcmdlX3JhbmdlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDEzNDk2CisgICAgICAgIG1vZCA9IHNlbGYubW9kdWxlCisgICAgICAgIG4gPSBzeXMubWF4c2l6ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0geHJhbmdlKG4tMSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW4ndCBjcmVhdGUgYSB4cmFuZ2UoKSBvYmplY3Qgb2Ygc2l6ZSBgc3lzLm1heHNpemVgIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYmlzZWN0X2xlZnQoZGF0YSwgbi0zKSwgbi0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5iaXNlY3RfcmlnaHQoZGF0YSwgbi0zKSwgbi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5iaXNlY3RfbGVmdChkYXRhLCBuLTMsIG4tMTAsIG4pLCBuLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmJpc2VjdF9yaWdodChkYXRhLCBuLTMsIG4tMTAsIG4pLCBuLTIpCisKKyAgICBkZWYgdGVzdF9sYXJnZV9weXJhbmdlKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCB3aXRob3V0IEMtaW1wb3NlZCBsaW1pdHMgb24gcmFuZ2UoKSBwYXJhbWV0ZXJzCisgICAgICAgIG1vZCA9IHNlbGYubW9kdWxlCisgICAgICAgIG4gPSBzeXMubWF4c2l6ZQorICAgICAgICBkYXRhID0gUmFuZ2UoMCwgbi0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5iaXNlY3RfbGVmdChkYXRhLCBuLTMpLCBuLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmJpc2VjdF9yaWdodChkYXRhLCBuLTMpLCBuLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmJpc2VjdF9sZWZ0KGRhdGEsIG4tMywgbi0xMCwgbiksIG4tMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYmlzZWN0X3JpZ2h0KGRhdGEsIG4tMywgbi0xMCwgbiksIG4tMikKKyAgICAgICAgeCA9IG4gLSAxMDAKKyAgICAgICAgbW9kLmluc29ydF9sZWZ0KGRhdGEsIHgsIHggLSA1MCwgeCArIDUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEubGFzdF9pbnNlcnQsICh4LCB4KSkKKyAgICAgICAgeCA9IG4gLSAyMDAKKyAgICAgICAgbW9kLmluc29ydF9yaWdodChkYXRhLCB4LCB4IC0gNTAsIHggKyA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLmxhc3RfaW5zZXJ0LCAoeCArIDEsIHgpKQorCisgICAgZGVmIHRlc3RfcmFuZG9tKHNlbGYsIG49MjUpOgorICAgICAgICBmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlCisgICAgICAgIGZvciBpIGluIHhyYW5nZShuKToKKyAgICAgICAgICAgIGRhdGEgPSBbcmFuZHJhbmdlKDAsIG4sIDIpIGZvciBqIGluIHhyYW5nZShpKV0KKyAgICAgICAgICAgIGRhdGEuc29ydCgpCisgICAgICAgICAgICBlbGVtID0gcmFuZHJhbmdlKC0xLCBuKzEpCisgICAgICAgICAgICBpcCA9IHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0KGRhdGEsIGVsZW0pCisgICAgICAgICAgICBpZiBpcCA8IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSA8PSBkYXRhW2lwXSkKKyAgICAgICAgICAgIGlmIGlwID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YVtpcC0xXSA8IGVsZW0pCisgICAgICAgICAgICBpcCA9IHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodChkYXRhLCBlbGVtKQorICAgICAgICAgICAgaWYgaXAgPCBsZW4oZGF0YSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gPCBkYXRhW2lwXSkKKyAgICAgICAgICAgIGlmIGlwID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YVtpcC0xXSA8PSBlbGVtKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uYWxTbGljaW5nKHNlbGYpOgorICAgICAgICBmb3IgZnVuYywgZGF0YSwgZWxlbSwgZXhwZWN0ZWQgaW4gc2VsZi5wcmVjb21wdXRlZENhc2VzOgorICAgICAgICAgICAgZm9yIGxvIGluIHhyYW5nZSg0KToKKyAgICAgICAgICAgICAgICBsbyA9IG1pbihsZW4oZGF0YSksIGxvKQorICAgICAgICAgICAgICAgIGZvciBoaSBpbiB4cmFuZ2UoMyw4KToKKyAgICAgICAgICAgICAgICAgICAgaGkgPSBtaW4obGVuKGRhdGEpLCBoaSkKKyAgICAgICAgICAgICAgICAgICAgaXAgPSBmdW5jKGRhdGEsIGVsZW0sIGxvLCBoaSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvIDw9IGlwIDw9IGhpKQorICAgICAgICAgICAgICAgICAgICBpZiBmdW5jIGlzIHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0IGFuZCBpcCA8IGhpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gPD0gZGF0YVtpcF0pCisgICAgICAgICAgICAgICAgICAgIGlmIGZ1bmMgaXMgc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQgYW5kIGlwID4gbG86CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YVtpcC0xXSA8IGVsZW0pCisgICAgICAgICAgICAgICAgICAgIGlmIGZ1bmMgaXMgc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0IGFuZCBpcCA8IGhpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gPCBkYXRhW2lwXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZnVuYyBpcyBzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQgYW5kIGlwID4gbG86CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YVtpcC0xXSA8PSBlbGVtKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwLCBtYXgobG8sIG1pbihoaSwgZXhwZWN0ZWQpKSkKKworICAgIGRlZiB0ZXN0X2JhY2tjb21wYXRpYmlsaXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLmJpc2VjdCwgc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0KQorCisgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmdzKHNlbGYpOgorICAgICAgICBkYXRhID0gWzEwLCAyMCwgMzAsIDQwLCA1MF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdChhPWRhdGEsIHg9MjUsIGxvPTEsIGhpPTMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodChhPWRhdGEsIHg9MjUsIGxvPTEsIGhpPTMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLmJpc2VjdChhPWRhdGEsIHg9MjUsIGxvPTEsIGhpPTMpLCAyKQorICAgICAgICBzZWxmLm1vZHVsZS5pbnNvcnRfbGVmdChhPWRhdGEsIHg9MjUsIGxvPTEsIGhpPTMpCisgICAgICAgIHNlbGYubW9kdWxlLmluc29ydF9yaWdodChhPWRhdGEsIHg9MjUsIGxvPTEsIGhpPTMpCisgICAgICAgIHNlbGYubW9kdWxlLmluc29ydChhPWRhdGEsIHg9MjUsIGxvPTEsIGhpPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgWzEwLCAyMCwgMjUsIDI1LCAyNSwgMzAsIDQwLCA1MF0pCisKK2NsYXNzIFRlc3RCaXNlY3RQeXRob24oVGVzdEJpc2VjdCk6CisgICAgbW9kdWxlID0gcHlfYmlzZWN0CisKK2NsYXNzIFRlc3RCaXNlY3RDKFRlc3RCaXNlY3QpOgorICAgIG1vZHVsZSA9IGNfYmlzZWN0CisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEluc29ydCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gTm9uZQorCisgICAgZGVmIHRlc3RfdnNCdWlsdGluU29ydChzZWxmLCBuPTUwMCk6CisgICAgICAgIGZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKKyAgICAgICAgZm9yIGluc29ydGVkIGluIChsaXN0KCksIFVzZXJMaXN0KCkpOgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKG4pOgorICAgICAgICAgICAgICAgIGRpZ2l0ID0gY2hvaWNlKCIwMTIzNDU2Nzg5IikKKyAgICAgICAgICAgICAgICBpZiBkaWdpdCBpbiAiMDI0NjgiOgorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5tb2R1bGUuaW5zb3J0X2xlZnQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5tb2R1bGUuaW5zb3J0X3JpZ2h0CisgICAgICAgICAgICAgICAgZihpbnNvcnRlZCwgZGlnaXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpbnNvcnRlZCksIGluc29ydGVkKQorCisgICAgZGVmIHRlc3RfYmFja2NvbXBhdGliaWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tb2R1bGUuaW5zb3J0LCBzZWxmLm1vZHVsZS5pbnNvcnRfcmlnaHQpCisKKyAgICBkZWYgdGVzdF9saXN0RGVyaXZlZChzZWxmKToKKyAgICAgICAgY2xhc3MgTGlzdChsaXN0KToKKyAgICAgICAgICAgIGRhdGEgPSBbXQorICAgICAgICAgICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgaXRlbSk6CisgICAgICAgICAgICAgICAgc2VsZi5kYXRhLmluc2VydChpbmRleCwgaXRlbSkKKworICAgICAgICBsc3QgPSBMaXN0KCkKKyAgICAgICAgc2VsZi5tb2R1bGUuaW5zb3J0X2xlZnQobHN0LCAxMCkKKyAgICAgICAgc2VsZi5tb2R1bGUuaW5zb3J0X3JpZ2h0KGxzdCwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbNSwgMTBdLCBsc3QuZGF0YSkKKworY2xhc3MgVGVzdEluc29ydFB5dGhvbihUZXN0SW5zb3J0KToKKyAgICBtb2R1bGUgPSBweV9iaXNlY3QKKworY2xhc3MgVGVzdEluc29ydEMoVGVzdEluc29ydCk6CisgICAgbW9kdWxlID0gY19iaXNlY3QKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK2NsYXNzIExlbk9ubHk6CisgICAgIkR1bW15IHNlcXVlbmNlIGNsYXNzIGRlZmluaW5nIF9fbGVuX18gYnV0IG5vdCBfX2dldGl0ZW1fXy4iCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiAxMAorCitjbGFzcyBHZXRPbmx5OgorICAgICJEdW1teSBzZXF1ZW5jZSBjbGFzcyBkZWZpbmluZyBfX2dldGl0ZW1fXyBidXQgbm90IF9fbGVuX18uIgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuZHgpOgorICAgICAgICByZXR1cm4gMTAKKworY2xhc3MgQ21wRXJyOgorICAgICJEdW1teSBlbGVtZW50IHRoYXQgYWx3YXlzIHJhaXNlcyBhbiBlcnJvciBkdXJpbmcgY29tcGFyaXNvbiIKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCisKK2NsYXNzIFRlc3RFcnJvckhhbmRsaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF9ub25fc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LAorICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuaW5zb3J0X2xlZnQsIHNlbGYubW9kdWxlLmluc29ydF9yaWdodCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIDEwLCAxMCkKKworICAgIGRlZiB0ZXN0X2xlbl9vbmx5KHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwKKyAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmluc29ydF9sZWZ0LCBzZWxmLm1vZHVsZS5pbnNvcnRfcmlnaHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGYsIExlbk9ubHkoKSwgMTApCisKKyAgICBkZWYgdGVzdF9nZXRfb25seShzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsCisgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5pbnNvcnRfbGVmdCwgc2VsZi5tb2R1bGUuaW5zb3J0X3JpZ2h0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmLCBHZXRPbmx5KCksIDEwKQorCisgICAgZGVmIHRlc3RfY21wX2VycihzZWxmKToKKyAgICAgICAgc2VxID0gW0NtcEVycigpLCBDbXBFcnIoKSwgQ21wRXJyKCldCisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LAorICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuaW5zb3J0X2xlZnQsIHNlbGYubW9kdWxlLmluc29ydF9yaWdodCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZiwgc2VxLCAxMCkKKworICAgIGRlZiB0ZXN0X2FyZ19wYXJzaW5nKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwKKyAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmluc29ydF9sZWZ0LCBzZWxmLm1vZHVsZS5pbnNvcnRfcmlnaHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAxMCkKKworY2xhc3MgVGVzdEVycm9ySGFuZGxpbmdQeXRob24oVGVzdEVycm9ySGFuZGxpbmcpOgorICAgIG1vZHVsZSA9IHB5X2Jpc2VjdAorCitjbGFzcyBUZXN0RXJyb3JIYW5kbGluZ0MoVGVzdEVycm9ySGFuZGxpbmcpOgorICAgIG1vZHVsZSA9IGNfYmlzZWN0CisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworbGlicmVmdGVzdCA9ICIiIgorRXhhbXBsZSBmcm9tIHRoZSBMaWJyYXJ5IFJlZmVyZW5jZTogIERvYy9saWJyYXJ5L2Jpc2VjdC5yc3QKKworVGhlIGJpc2VjdCgpIGZ1bmN0aW9uIGlzIGdlbmVyYWxseSB1c2VmdWwgZm9yIGNhdGVnb3JpemluZyBudW1lcmljIGRhdGEuCitUaGlzIGV4YW1wbGUgdXNlcyBiaXNlY3QoKSB0byBsb29rIHVwIGEgbGV0dGVyIGdyYWRlIGZvciBhbiBleGFtIHRvdGFsCisoc2F5KSBiYXNlZCBvbiBhIHNldCBvZiBvcmRlcmVkIG51bWVyaWMgYnJlYWtwb2ludHM6IDg1IGFuZCB1cCBpcyBhbiBgQScsCis3NS4uODQgaXMgYSBgQicsIGV0Yy4KKworICAgID4+PiBncmFkZXMgPSAiRkVEQ0JBIgorICAgID4+PiBicmVha3BvaW50cyA9IFszMCwgNDQsIDY2LCA3NSwgODVdCisgICAgPj4+IGZyb20gYmlzZWN0IGltcG9ydCBiaXNlY3QKKyAgICA+Pj4gZGVmIGdyYWRlKHRvdGFsKToKKyAgICAuLi4gICAgICAgICAgIHJldHVybiBncmFkZXNbYmlzZWN0KGJyZWFrcG9pbnRzLCB0b3RhbCldCisgICAgLi4uCisgICAgPj4+IGdyYWRlKDY2KQorICAgICdDJworICAgID4+PiBtYXAoZ3JhZGUsIFszMywgOTksIDc3LCA0NCwgMTIsIDg4XSkKKyAgICBbJ0UnLCAnQScsICdCJywgJ0QnLCAnRicsICdBJ10KKworIiIiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworX190ZXN0X18gPSB7J2xpYnJlZnRlc3QnIDogbGlicmVmdGVzdH0KKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9iaXNlY3QKKworICAgIHRlc3RfY2xhc3NlcyA9IFtUZXN0QmlzZWN0UHl0aG9uLCBUZXN0QmlzZWN0QywKKyAgICAgICAgICAgICAgICAgICAgVGVzdEluc29ydFB5dGhvbiwgVGVzdEluc29ydEMsCisgICAgICAgICAgICAgICAgICAgIFRlc3RFcnJvckhhbmRsaW5nUHl0aG9uLCBUZXN0RXJyb3JIYW5kbGluZ0NdCisKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfYmlzZWN0LCB2ZXJib3NlKQorCisgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Jvb2wucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ib29sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2Y2QxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ib29sLnB5CkBAIC0wLDAgKzEsMzcwIEBACisjIFRlc3QgcHJvcGVydGllcyBvZiBib29sIHByb21pc2VkIGJ5IFBFUCAyODUKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpbXBvcnQgb3MKKworY2xhc3MgQm9vbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIEMoYm9vbCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJib29sIHNob3VsZCBub3QgYmUgc3ViY2xhc3NhYmxlIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludC5fX25ld19fLCBib29sLCAwKQorCisgICAgZGVmIHRlc3RfcHJpbnQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICAgICAgcHJpbnQgPj4gZm8sIEZhbHNlLCBUcnVlCisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZCgpLCAnRmFsc2UgVHJ1ZVxuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKEZhbHNlKSwgJ0ZhbHNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKFRydWUpLCAnVHJ1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXByKEZhbHNlKSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwocmVwcihUcnVlKSksIFRydWUpCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZhbHNlKSwgJ0ZhbHNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoVHJ1ZSksICdUcnVlJykKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRmFsc2UpLCAwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGludChGYWxzZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChUcnVlKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChpbnQoVHJ1ZSksIFRydWUpCisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChGYWxzZSksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChmbG9hdChGYWxzZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KFRydWUpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZmxvYXQoVHJ1ZSksIFRydWUpCisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoRmFsc2UpLCAwTCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChsb25nKEZhbHNlKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhUcnVlKSwgMUwpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9uZyhUcnVlKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X21hdGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoK0ZhbHNlLCAwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KCtGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLUZhbHNlLCAwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KC1GYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKEZhbHNlKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChhYnMoRmFsc2UpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgrVHJ1ZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCgrVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtVHJ1ZSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKFRydWUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGFicyhUcnVlKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh+RmFsc2UsIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKH5UcnVlLCAtMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlKzIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSsyLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIrRmFsc2UsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMitUcnVlLCAzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UrRmFsc2UsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoRmFsc2UrRmFsc2UsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlK1RydWUsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoRmFsc2UrVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlK0ZhbHNlLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KFRydWUrRmFsc2UsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZStUcnVlLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZS1UcnVlLCAwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KFRydWUtVHJ1ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UtRmFsc2UsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoRmFsc2UtRmFsc2UsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUtRmFsc2UsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoVHJ1ZS1GYWxzZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZS1UcnVlLCAtMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUqMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSoxLCAwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KEZhbHNlKjEsIEZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZS8vMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChUcnVlLy8xLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLy8xLCAwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KEZhbHNlLy8xLCBGYWxzZSkKKworICAgICAgICBmb3IgYiBpbiBGYWxzZSwgVHJ1ZToKKyAgICAgICAgICAgIGZvciBpIGluIDAsIDEsIDI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiKippLCBpbnQoYikqKmkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChiKippLCBib29sKGludChiKSoqaSkpCisKKyAgICAgICAgZm9yIGEgaW4gRmFsc2UsIFRydWU6CisgICAgICAgICAgICBmb3IgYiBpbiBGYWxzZSwgVHJ1ZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGEmYiwgYm9vbChpbnQoYSkmaW50KGIpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGF8YiwgYm9vbChpbnQoYSl8aW50KGIpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGFeYiwgYm9vbChpbnQoYSleaW50KGIpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEmaW50KGIpLCBpbnQoYSkmaW50KGIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoYSZpbnQoYiksIGJvb2woaW50KGEpJmludChiKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhfGludChiKSwgaW50KGEpfGludChiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGF8aW50KGIpLCBib29sKGludChhKXxpbnQoYikpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYV5pbnQoYiksIGludChhKV5pbnQoYikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChhXmludChiKSwgYm9vbChpbnQoYSleaW50KGIpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChhKSZiLCBpbnQoYSkmaW50KGIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoaW50KGEpJmIsIGJvb2woaW50KGEpJmludChiKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoYSl8YiwgaW50KGEpfGludChiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGludChhKXxiLCBib29sKGludChhKXxpbnQoYikpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGEpXmIsIGludChhKV5pbnQoYikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChpbnQoYSleYiwgYm9vbChpbnQoYSleaW50KGIpKSkKKworICAgICAgICBzZWxmLmFzc2VydElzKDE9PTEsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMT09MCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMDwxLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKDE8MCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMDw9MCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygxPD0wLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygxPjAsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMT4xLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygxPj0xLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKDA+PTEsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKDAhPTEsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMCE9MCwgRmFsc2UpCisKKyAgICAgICAgeCA9IFsxXQorICAgICAgICBzZWxmLmFzc2VydElzKHggaXMgeCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4IGlzIG5vdCB4LCBGYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKDEgaW4geCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygwIGluIHgsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKDEgbm90IGluIHgsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKDAgbm90IGluIHgsIFRydWUpCisKKyAgICAgICAgeCA9IHsxOiAyfQorICAgICAgICBzZWxmLmFzc2VydElzKHggaXMgeCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4IGlzIG5vdCB4LCBGYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKDEgaW4geCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygwIGluIHgsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKDEgbm90IGluIHgsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKDAgbm90IGluIHgsIFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhub3QgVHJ1ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobm90IEZhbHNlLCBUcnVlKQorCisgICAgZGVmIHRlc3RfY29udmVydChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBib29sLCA0MiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbCgxMCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbCgxKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKC0xKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKDApLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKCJoZWxsbyIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woIiIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKCksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlZCIgJSBGYWxzZSwgIjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlZCIgJSBUcnVlLCAiMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiV4IiAlIEZhbHNlLCAiMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiV4IiAlIFRydWUsICIxIikKKworICAgIGRlZiB0ZXN0X2hhc2F0dHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaGFzYXR0cihbXSwgImFwcGVuZCIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGhhc2F0dHIoW10sICJ3b2JibGUiKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9jYWxsYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjYWxsYWJsZShsZW4pLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNhbGxhYmxlKDEpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2lzaW5zdGFuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaXNpbnN0YW5jZShUcnVlLCBib29sKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpc2luc3RhbmNlKEZhbHNlLCBib29sKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpc2luc3RhbmNlKFRydWUsIGludCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaXNpbnN0YW5jZShGYWxzZSwgaW50KSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpc2luc3RhbmNlKDEsIGJvb2wpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpc2luc3RhbmNlKDAsIGJvb2wpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2lzc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaXNzdWJjbGFzcyhib29sLCBpbnQpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGlzc3ViY2xhc3MoaW50LCBib29sKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9oYXNrZXkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMSBpbiB7fSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMSBpbiB7MToxfSwgVHJ1ZSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh7fS5oYXNfa2V5KDEpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoezE6MX0uaGFzX2tleSgxKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcygieHl6Ii5lbmRzd2l0aCgieiIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKCJ4eXoiLmVuZHN3aXRoKCJ4IiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKCJ4eXowMTIzIi5pc2FsbnVtKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIkAjJCUiLmlzYWxudW0oKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInh5eiIuaXNhbHBoYSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKCJAIyQlIi5pc2FscGhhKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKCIwMTIzIi5pc2RpZ2l0KCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInh5eiIuaXNkaWdpdCgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygieHl6Ii5pc2xvd2VyKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIlhZWiIuaXNsb3dlcigpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiICIuaXNzcGFjZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKCJYWVoiLmlzc3BhY2UoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIlgiLmlzdGl0bGUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygieCIuaXN0aXRsZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiWFlaIi5pc3VwcGVyKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInh5eiIuaXN1cHBlcigpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygieHl6Ii5zdGFydHN3aXRoKCJ4IiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInh5eiIuc3RhcnRzd2l0aCgieiIpLCBGYWxzZSkKKworICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4eXoiLCAnYXNjaWknKS5lbmRzd2l0aCh1bmljb2RlKCJ6IiwgJ2FzY2lpJykpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4eXoiLCAnYXNjaWknKS5lbmRzd2l0aCh1bmljb2RlKCJ4IiwgJ2FzY2lpJykpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgieHl6MDEyMyIsICdhc2NpaScpLmlzYWxudW0oKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgiQCMkJSIsICdhc2NpaScpLmlzYWxudW0oKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoInh5eiIsICdhc2NpaScpLmlzYWxwaGEoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgiQCMkJSIsICdhc2NpaScpLmlzYWxwaGEoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoIjAxMjMiLCAnYXNjaWknKS5pc2RlY2ltYWwoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgieHl6IiwgJ2FzY2lpJykuaXNkZWNpbWFsKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCIwMTIzIiwgJ2FzY2lpJykuaXNkaWdpdCgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4eXoiLCAnYXNjaWknKS5pc2RpZ2l0KCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4eXoiLCAnYXNjaWknKS5pc2xvd2VyKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoIlhZWiIsICdhc2NpaScpLmlzbG93ZXIoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoIjAxMjMiLCAnYXNjaWknKS5pc251bWVyaWMoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgieHl6IiwgJ2FzY2lpJykuaXNudW1lcmljKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCIgIiwgJ2FzY2lpJykuaXNzcGFjZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJYWVoiLCAnYXNjaWknKS5pc3NwYWNlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJYIiwgJ2FzY2lpJykuaXN0aXRsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4IiwgJ2FzY2lpJykuaXN0aXRsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgiWFlaIiwgJ2FzY2lpJykuaXN1cHBlcigpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4eXoiLCAnYXNjaWknKS5pc3VwcGVyKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4eXoiLCAnYXNjaWknKS5zdGFydHN3aXRoKHVuaWNvZGUoIngiLCAnYXNjaWknKSksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoInh5eiIsICdhc2NpaScpLnN0YXJ0c3dpdGgodW5pY29kZSgieiIsICdhc2NpaScpKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9ib29sZWFuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUgJiAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoVHJ1ZSAmIDEsIGJvb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSAmIFRydWUsIFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlIHwgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKFRydWUgfCAxLCBib29sKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUgfCBUcnVlLCBUcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSBeIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShUcnVlIF4gMSwgYm9vbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlIF4gVHJ1ZSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9maWxlY2xvc2VkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGYuY2xvc2VkLCBGYWxzZSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmLmNsb3NlZCwgVHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfdHlwZXMoc2VsZik6CisgICAgICAgICMgdHlwZXMgYXJlIGFsd2F5cyB0cnVlLgorICAgICAgICBmb3IgdCBpbiBbYm9vbCwgY29tcGxleCwgZGljdCwgZmlsZSwgZmxvYXQsIGludCwgbGlzdCwgbG9uZywgb2JqZWN0LAorICAgICAgICAgICAgICAgICAgc2V0LCBzdHIsIHR1cGxlLCB0eXBlXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbCh0KSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X29wZXJhdG9yKHNlbGYpOgorICAgICAgICBpbXBvcnQgb3BlcmF0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci50cnV0aCgwKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IudHJ1dGgoMSksIFRydWUpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNDYWxsYWJsZSgwKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzQ2FsbGFibGUobGVuKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc051bWJlclR5cGUoTm9uZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSgwKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5ub3RfKDEpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5ub3RfKDApLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKDApLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc1NlcXVlbmNlVHlwZShbXSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuY29udGFpbnMoW10sIDEpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5jb250YWlucyhbMV0sIDEpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUoMSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUoe30pLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmx0KDAsIDApLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5sdCgwLCAxKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc18oVHJ1ZSwgVHJ1ZSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNfKFRydWUsIEZhbHNlKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNfbm90KFRydWUsIFRydWUpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc19ub3QoVHJ1ZSwgRmFsc2UpLCBUcnVlKQorCisgICAgZGVmIHRlc3RfbWFyc2hhbChzZWxmKToKKyAgICAgICAgaW1wb3J0IG1hcnNoYWwKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoVHJ1ZSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhGYWxzZSkpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBzZWxmLmFzc2VydElzKHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoVHJ1ZSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoRmFsc2UpKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhUcnVlLCBUcnVlKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhGYWxzZSwgVHJ1ZSkpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2NwaWNrbGUoc2VsZik6CisgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKFRydWUpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjUGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMoRmFsc2UpKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKFRydWUsIFRydWUpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjUGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMoRmFsc2UsIFRydWUpKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9taXhlZHBpY2tsZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZSwgY1BpY2tsZQorICAgICAgICBzZWxmLmFzc2VydElzKHBpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKFRydWUpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyhGYWxzZSkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyhUcnVlLCBUcnVlKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMoRmFsc2UsIFRydWUpKSwgRmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjUGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhUcnVlKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY1BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoRmFsc2UpKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY1BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoVHJ1ZSwgVHJ1ZSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNQaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKEZhbHNlLCBUcnVlKSksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfcGlja2xldmFsdWVzKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlLCBjUGlja2xlCisKKyAgICAgICAgIyBUZXN0IGZvciBzcGVjaWZpYyBiYWNrd2FyZHMtY29tcGF0aWJsZSBwaWNrbGUgdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLmR1bXBzKFRydWUpLCAiSTAxXG4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUuZHVtcHMoRmFsc2UpLCAiSTAwXG4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjUGlja2xlLmR1bXBzKFRydWUpLCAiSTAxXG4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjUGlja2xlLmR1bXBzKEZhbHNlKSwgIkkwMFxuLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLmR1bXBzKFRydWUsIFRydWUpLCAiSTAxXG4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUuZHVtcHMoRmFsc2UsIFRydWUpLCAiSTAwXG4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjUGlja2xlLmR1bXBzKFRydWUsIFRydWUpLCAiSTAxXG4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjUGlja2xlLmR1bXBzKEZhbHNlLCBUcnVlKSwgIkkwMFxuLiIpCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0X3RvX2Jvb2woc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgVHlwZUVycm9yIG9jY3VycyB3aGVuIGJhZCB0aGluZ3MgYXJlIHJldHVybmVkCisgICAgICAgICMgZnJvbSBfX25vbnplcm9fXygpLiAgVGhpcyBpc24ndCByZWFsbHkgYSBib29sIHRlc3QsIGJ1dAorICAgICAgICAjIGl0J3MgcmVsYXRlZC4KKyAgICAgICAgY2hlY2sgPSBsYW1iZGEgbzogc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBib29sLCBvKQorICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBjaGVjayhGb28oKSkKKworICAgICAgICBjbGFzcyBCYXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIlllcyIKKyAgICAgICAgY2hlY2soQmFyKCkpCisKKyAgICAgICAgY2xhc3MgQmF6KGludCk6CisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgY2hlY2soQmF6KCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQm9vbFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2JzZGRiLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYnNkZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDFlZTBhMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2JzZGRiLnB5CkBAIC0wLDAgKzEsMzU3IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJUZXN0IHNjcmlwdCBmb3IgdGhlIGJzZGRiIEMgbW9kdWxlIGJ5IFJvZ2VyIEUuIE1hc3NlCisgICBBZGFwdGVkIHRvIHVuaXR0ZXN0IGZvcm1hdCBhbmQgZXhwYW5kZWQgc2NvcGUgYnkgUmF5bW9uZCBIZXR0aW5nZXIKKyIiIgoraW1wb3J0IG9zLCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTa2lwIHRlc3QgaWYgX2JzZGRiIHdhc24ndCBidWlsdC4KK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfYnNkZGInKQorCitic2RkYiA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdic2RkYicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKyMgSnVzdCBzbyB3ZSBrbm93IGl0J3MgaW1wb3J0ZWQ6Cit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnZGJoYXNoJywgZGVwcmVjYXRlZD1UcnVlKQorCisKK2NsYXNzIFRlc3RCU0REQih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgb3BlbmZsYWcgPSAnYycKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mID0gc2VsZi5vcGVubWV0aG9kWzBdKHNlbGYuZm5hbWUsIHNlbGYub3BlbmZsYWcsIGNhY2hlc2l6ZT0zMjc2OCkKKyAgICAgICAgc2VsZi5kID0gZGljdChxPSdHdWlkbycsIHc9J3ZhbicsIGU9J1Jvc3N1bScsIHI9J2ludmVudGVkJywgdD0nUHl0aG9uJywgeT0nJykKKyAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5kLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2VsZi5mW2tdID0gdgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmYuc3luYygpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuZm5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5mbmFtZSkKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5kLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZba10sIHYpCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuZiksIGxlbihzZWxmLmQpKQorCisgICAgZGVmIHRlc3RfY2hhbmdlKHNlbGYpOgorICAgICAgICBzZWxmLmZbJ3InXSA9ICdkaXNjb3ZlcmVkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZlsnciddLCAnZGlzY292ZXJlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3InLCBzZWxmLmYua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdkaXNjb3ZlcmVkJywgc2VsZi5mLnZhbHVlcygpKQorCisgICAgZGVmIHRlc3RfY2xvc2VfYW5kX3Jlb3BlbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgIyBpZiB3ZSdyZSB1c2luZyBhbiBpbi1tZW1vcnkgb25seSBkYiwgd2UgY2FuJ3QgcmVvcGVuIGl0CisgICAgICAgICAgICAjIHNvIGZpbmlzaCBoZXJlLgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IHNlbGYub3Blbm1ldGhvZFswXShzZWxmLmZuYW1lLCAndycpCisgICAgICAgIGZvciBrLCB2IGluIHNlbGYuZC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mW2tdLCB2KQorCisgICAgZGVmIGFzc2VydFNldEVxdWFscyhzZWxmLCBzZXFuMSwgc2VxbjIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZXFuMSksIHNldChzZXFuMikpCisKKyAgICBkZWYgdGVzdF9tYXBwaW5nX2l0ZXJhdGlvbl9tZXRob2RzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mCisgICAgICAgIGQgPSBzZWxmLmQKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbHMoZCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbHMoZC5rZXlzKCksIGYua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFscyhkLnZhbHVlcygpLCBmLnZhbHVlcygpKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFscyhkLml0ZW1zKCksIGYuaXRlbXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbHMoZC5pdGVya2V5cygpLCBmLml0ZXJrZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWxzKGQuaXRlcnZhbHVlcygpLCBmLml0ZXJ2YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbHMoZC5pdGVyaXRlbXMoKSwgZi5pdGVyaXRlbXMoKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJfd2hpbGVfbW9kaWZ5aW5nX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZGkgPSBpdGVyKHNlbGYuZCkKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBrZXkgPSBkaS5uZXh0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmRba2V5XSA9ICdtb2RpZmllZCAnK2tleQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIGl0IHNob3VsZCBiZWhhdmUgdGhlIHNhbWUgYXMgYSBkaWN0LiAgbW9kaWZ5aW5nIHZhbHVlcworICAgICAgICAjIG9mIGV4aXN0aW5nIGtleXMgc2hvdWxkIG5vdCBicmVhayBpdGVyYXRpb24uICAoYWRkaW5nCisgICAgICAgICMgb3IgcmVtb3Zpbmcga2V5cyBzaG91bGQpCisgICAgICAgIGxvb3BzX2xlZnQgPSBsZW4oc2VsZi5mKQorICAgICAgICBmaSA9IGl0ZXIoc2VsZi5mKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtleSA9IGZpLm5leHQoKQorICAgICAgICAgICAgICAgIHNlbGYuZltrZXldID0gJ21vZGlmaWVkICcra2V5CisgICAgICAgICAgICAgICAgbG9vcHNfbGVmdCAtPSAxCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb3BzX2xlZnQsIDApCisKKyAgICAgICAgc2VsZi50ZXN0X21hcHBpbmdfaXRlcmF0aW9uX21ldGhvZHMoKQorCisgICAgZGVmIHRlc3RfaXRlcl9hYm9ydF9vbl9jaGFuZ2VkX3NpemUoc2VsZik6CisgICAgICAgIGRlZiBEaWN0SXRlckFib3J0KCk6CisgICAgICAgICAgICBkaSA9IGl0ZXIoc2VsZi5kKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRpLm5leHQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmRbJ25ld2tleSddID0gJ1NQQU0nCisgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgRGljdEl0ZXJBYm9ydCkKKworICAgICAgICBkZWYgRGJJdGVyQWJvcnQoKToKKyAgICAgICAgICAgIGZpID0gaXRlcihzZWxmLmYpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZmkubmV4dCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZlsnbmV3a2V5J10gPSAnU1BBTScKKyAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBEYkl0ZXJBYm9ydCkKKworICAgIGRlZiB0ZXN0X2l0ZXJpdGVtc19hYm9ydF9vbl9jaGFuZ2VkX3NpemUoc2VsZik6CisgICAgICAgIGRlZiBEaWN0SXRlcml0ZW1zQWJvcnQoKToKKyAgICAgICAgICAgIGRpID0gc2VsZi5kLml0ZXJpdGVtcygpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGkubmV4dCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZFsnbmV3a2V5J10gPSAnU1BBTScKKyAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBEaWN0SXRlcml0ZW1zQWJvcnQpCisKKyAgICAgICAgZGVmIERiSXRlcml0ZW1zQWJvcnQoKToKKyAgICAgICAgICAgIGZpID0gc2VsZi5mLml0ZXJpdGVtcygpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGZpLm5leHQoKQorICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5mW2tleV0KKyAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBEYkl0ZXJpdGVtc0Fib3J0KQorCisgICAgZGVmIHRlc3RfaXRlcml0ZW1zX3doaWxlX21vZGlmeWluZ192YWx1ZXMoc2VsZik6CisgICAgICAgIGRpID0gc2VsZi5kLml0ZXJpdGVtcygpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaywgdiA9IGRpLm5leHQoKQorICAgICAgICAgICAgICAgIHNlbGYuZFtrXSA9ICdtb2RpZmllZCAnK3YKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBpdCBzaG91bGQgYmVoYXZlIHRoZSBzYW1lIGFzIGEgZGljdC4gIG1vZGlmeWluZyB2YWx1ZXMKKyAgICAgICAgIyBvZiBleGlzdGluZyBrZXlzIHNob3VsZCBub3QgYnJlYWsgaXRlcmF0aW9uLiAgKGFkZGluZworICAgICAgICAjIG9yIHJlbW92aW5nIGtleXMgc2hvdWxkKQorICAgICAgICBsb29wc19sZWZ0ID0gbGVuKHNlbGYuZikKKyAgICAgICAgZmkgPSBzZWxmLmYuaXRlcml0ZW1zKCkKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBrLCB2ID0gZmkubmV4dCgpCisgICAgICAgICAgICAgICAgc2VsZi5mW2tdID0gJ21vZGlmaWVkICcrdgorICAgICAgICAgICAgICAgIGxvb3BzX2xlZnQgLT0gMQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29wc19sZWZ0LCAwKQorCisgICAgICAgIHNlbGYudGVzdF9tYXBwaW5nX2l0ZXJhdGlvbl9tZXRob2RzKCkKKworICAgIGRlZiB0ZXN0X2ZpcnN0X25leHRfbG9vcGluZyhzZWxmKToKKyAgICAgICAgaXRlbXMgPSBbc2VsZi5mLmZpcnN0KCldCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxLCBsZW4oc2VsZi5mKSk6CisgICAgICAgICAgICBpdGVtcy5hcHBlbmQoc2VsZi5mLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbHMoaXRlbXMsIHNlbGYuZC5pdGVtcygpKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfbGFzdF9sb29waW5nKHNlbGYpOgorICAgICAgICBpdGVtcyA9IFtzZWxmLmYubGFzdCgpXQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMSwgbGVuKHNlbGYuZikpOgorICAgICAgICAgICAgaXRlbXMuYXBwZW5kKHNlbGYuZi5wcmV2aW91cygpKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFscyhpdGVtcywgc2VsZi5kLml0ZW1zKCkpCisKKyAgICBkZWYgdGVzdF9maXJzdF93aGlsZV9kZWxldGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBidWcgMTcyNTg1NgorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYuZCkgPj0gMiwgInRlc3QgcmVxdWlyZXMgPj0yIGl0ZW1zIikKKyAgICAgICAgZm9yIF8gaW4gc2VsZi5kOgorICAgICAgICAgICAga2V5ID0gc2VsZi5mLmZpcnN0KClbMF0KKyAgICAgICAgICAgIGRlbCBzZWxmLmZba2V5XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzZWxmLmYuaXRlbXMoKSwgImV4cGVjdGVkIGVtcHR5IGRiIGFmdGVyIHRlc3QiKQorCisgICAgZGVmIHRlc3RfbGFzdF93aGlsZV9kZWxldGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBidWcgMTcyNTg1NidzIGV2aWwgdHdpbgorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYuZCkgPj0gMiwgInRlc3QgcmVxdWlyZXMgPj0yIGl0ZW1zIikKKyAgICAgICAgZm9yIF8gaW4gc2VsZi5kOgorICAgICAgICAgICAga2V5ID0gc2VsZi5mLmxhc3QoKVswXQorICAgICAgICAgICAgZGVsIHNlbGYuZltrZXldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNlbGYuZi5pdGVtcygpLCAiZXhwZWN0ZWQgZW1wdHkgZGIgYWZ0ZXIgdGVzdCIpCisKKyAgICBkZWYgdGVzdF9zZXRfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnNldF9sb2NhdGlvbignZScpLCAoJ2UnLCBzZWxmLmRbJ2UnXSkpCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgZm9yIGsgaW4gc2VsZi5kOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBzZWxmLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ25vdCBoZXJlJywgc2VsZi5mKQorCisgICAgZGVmIHRlc3RfaGFzX2tleShzZWxmKToKKyAgICAgICAgZm9yIGsgaW4gc2VsZi5kOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZi5oYXNfa2V5KGspKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuZi5oYXNfa2V5KCdub3QgaGVyZScpKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuZi5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuZiksIDApCisKKyAgICBkZWYgdGVzdF9fbm9fZGVhZGxvY2tfZmlyc3Qoc2VsZiwgZGVidWc9MCk6CisgICAgICAgICMgZG8gdGhpcyBzbyB0aGF0IHRlc3RlcnMgY2FuIHNlZSB3aGF0IGZ1bmN0aW9uIHdlJ3JlIGluIGluCisgICAgICAgICMgdmVyYm9zZSBtb2RlIHdoZW4gd2UgZGVhZGxvY2suCisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorCisgICAgICAgICMgaW4gcHlic2RkYidzIF9EQldpdGhDdXJzb3IgdGhpcyBjYXVzZXMgYW4gaW50ZXJuYWwgREJDdXJzb3IKKyAgICAgICAgIyBvYmplY3QgaXMgY3JlYXRlZC4gIE90aGVyIHRlc3RfIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBjb3VsZAorICAgICAgICAjIGluYWR2ZXJ0ZW50bHkgY2F1c2UgdGhlIGRlYWRsb2NrIGJ1dCBhbiBleHBsaWNpdCB0ZXN0IGlzIG5lZWRlZC4KKyAgICAgICAgaWYgZGVidWc6IHByaW50ICJBIgorICAgICAgICBrLHYgPSBzZWxmLmYuZmlyc3QoKQorICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgIkIiLCBrCisgICAgICAgIHNlbGYuZltrXSA9ICJkZWFkbG9jay4gIGRvIG5vdCBwYXNzIGdvLiAgZG8gbm90IGNvbGxlY3QgJDIwMC4iCisgICAgICAgIGlmIGRlYnVnOiBwcmludCAiQyIKKyAgICAgICAgIyBpZiB0aGUgYnNkZGIgaW1wbGVtZW50YXRpb24gbGVhdmVzIHRoZSBEQkN1cnNvciBvcGVuIGR1cmluZworICAgICAgICAjIHRoZSBkYXRhYmFzZSB3cml0ZSBhbmQgbG9ja2luZyt0aHJlYWRpbmcgc3VwcG9ydCBpcyBlbmFibGVkCisgICAgICAgICMgdGhlIGN1cnNvcidzIHJlYWQgbG9jayB3aWxsIGRlYWRsb2NrIHRoZSB3cml0ZSBsb2NrIHJlcXVlc3QuLgorCisgICAgICAgICMgdGVzdCB0aGUgaXRlcmF0b3IgaW50ZXJmYWNlCisgICAgICAgIGlmIFRydWU6CisgICAgICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgIkQiCisgICAgICAgICAgICBpID0gc2VsZi5mLml0ZXJpdGVtcygpCisgICAgICAgICAgICBrLHYgPSBpLm5leHQoKQorICAgICAgICAgICAgaWYgZGVidWc6IHByaW50ICJFIgorICAgICAgICAgICAgc2VsZi5mW2tdID0gInBsZWFzZSBkb24ndCBkZWFkbG9jayIKKyAgICAgICAgICAgIGlmIGRlYnVnOiBwcmludCAiRiIKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBrLHYgPSBpLm5leHQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgZGVidWc6IHByaW50ICJGMiIKKworICAgICAgICAgICAgaSA9IGl0ZXIoc2VsZi5mKQorICAgICAgICAgICAgaWYgZGVidWc6IHByaW50ICJHIgorICAgICAgICAgICAgd2hpbGUgaToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlYnVnOiBwcmludCAiSCIKKyAgICAgICAgICAgICAgICAgICAgayA9IGkubmV4dCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlYnVnOiBwcmludCAiSSIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mW2tdID0gImRlYWRsb2Nrcy1yLXVzIgorICAgICAgICAgICAgICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgIkoiCisgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgIGkgPSBOb25lCisgICAgICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgIksiCisKKyAgICAgICAgIyB0ZXN0IHRoZSBsZWdhY3kgY3Vyc29yIGludGVyZmFjZSBtaXhlZCB3aXRoIHdyaXRlcworICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuZi5maXJzdCgpWzBdLCBzZWxmLmQpCisgICAgICAgIGsgPSBzZWxmLmYubmV4dCgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgc2VsZi5kKQorICAgICAgICBzZWxmLmZba10gPSAiYmUgZ29uZSB3aXRoIHllIGRlYWRsb2NrcyIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZltrXSwgImJlIGdvbmUgd2l0aCB5ZSBkZWFkbG9ja3MiKQorCisgICAgZGVmIHRlc3RfZm9yX2N1cnNvcl9tZW1sZWFrKHNlbGYpOgorICAgICAgICAjIGRvIHRoZSBic2RkYi5fREJXaXRoQ3Vyc29yIGl0ZXJhdG9yIGludGVybmFscyBsZWFrIGN1cnNvcnM/CisgICAgICAgIG5jMSA9IGxlbihzZWxmLmYuX2N1cnNvcl9yZWZzKQorICAgICAgICAjIGNyZWF0ZSBpdGVyYXRvcgorICAgICAgICBpID0gc2VsZi5mLml0ZXJpdGVtcygpCisgICAgICAgIG5jMiA9IGxlbihzZWxmLmYuX2N1cnNvcl9yZWZzKQorICAgICAgICAjIHVzZSB0aGUgaXRlcmF0b3IgKHNob3VsZCBydW4gdG8gdGhlIGZpcnN0IHlpZWxkLCBjcmVhdGluZyB0aGUgY3Vyc29yKQorICAgICAgICBrLCB2ID0gaS5uZXh0KCkKKyAgICAgICAgbmMzID0gbGVuKHNlbGYuZi5fY3Vyc29yX3JlZnMpCisgICAgICAgICMgZGVzdHJveSB0aGUgaXRlcmF0b3I7IHRoaXMgc2hvdWxkIGNhdXNlIHRoZSB3ZWFrcmVmIGNhbGxiYWNrCisgICAgICAgICMgdG8gcmVtb3ZlIHRoZSBjdXJzb3Igb2JqZWN0IGZyb20gc2VsZi5mLl9jdXJzb3JfcmVmcworICAgICAgICBkZWwgaQorICAgICAgICBuYzQgPSBsZW4oc2VsZi5mLl9jdXJzb3JfcmVmcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5jMSwgbmMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5jMSwgbmM0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmMzID09IG5jMSsxKQorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgaywgdiA9IHNlbGYuZi5wb3BpdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgc2VsZi5kLnZhbHVlcygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGssIHNlbGYuZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5kKS0xLCBsZW4oc2VsZi5mKSkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgayA9ICd3JworICAgICAgICB2ID0gc2VsZi5mLnBvcChrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIHNlbGYuZFtrXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrLCBzZWxmLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odiwgc2VsZi5mLnZhbHVlcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmQpLTEsIGxlbihzZWxmLmYpKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5nZXQoJ05vdEhlcmUnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuZ2V0KCdOb3RIZXJlJywgJ0RlZmF1bHQnKSwgJ0RlZmF1bHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5nZXQoJ3EnLCAnRGVmYXVsdCcpLCBzZWxmLmRbJ3EnXSkKKworICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnNldGRlZmF1bHQoJ25ldycsICdkb2cnKSwgJ2RvZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnNldGRlZmF1bHQoJ3InLCAnY2F0JyksIHNlbGYuZFsnciddKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBuZXcgPSBkaWN0KHk9J2xpZmUnLCB1PSdvZicsIGk9J2JyaWFuJykKKyAgICAgICAgc2VsZi5mLnVwZGF0ZShuZXcpCisgICAgICAgIHNlbGYuZC51cGRhdGUobmV3KQorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZltrXSwgdikKKworICAgIGRlZiB0ZXN0X2tleW9yZGVyaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm9wZW5tZXRob2RbMF0gaXMgbm90IGJzZGRiLmJ0b3BlbjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBrZXlzID0gc2VsZi5kLmtleXMoKQorICAgICAgICBrZXlzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5maXJzdCgpWzBdLCBrZXlzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5uZXh0KClbMF0sIGtleXNbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmxhc3QoKVswXSwga2V5c1stMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnByZXZpb3VzKClbMF0sIGtleXNbLTJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc2VsZi5mKSwga2V5cykKKworY2xhc3MgVGVzdEJUcmVlKFRlc3RCU0REQik6CisgICAgZm5hbWUgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgb3Blbm1ldGhvZCA9IFtic2RkYi5idG9wZW5dCisKK2NsYXNzIFRlc3RCVHJlZV9Jbk1lbW9yeShUZXN0QlNEREIpOgorICAgIGZuYW1lID0gTm9uZQorICAgIG9wZW5tZXRob2QgPSBbYnNkZGIuYnRvcGVuXQorCitjbGFzcyBUZXN0QlRyZWVfSW5NZW1vcnlfVHJ1bmNhdGUoVGVzdEJTRERCKToKKyAgICBmbmFtZSA9IE5vbmUKKyAgICBvcGVuZmxhZyA9ICduJworICAgIG9wZW5tZXRob2QgPSBbYnNkZGIuYnRvcGVuXQorCitjbGFzcyBUZXN0SGFzaFRhYmxlKFRlc3RCU0REQik6CisgICAgZm5hbWUgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgb3Blbm1ldGhvZCA9IFtic2RkYi5oYXNob3Blbl0KKworY2xhc3MgVGVzdEhhc2hUYWJsZV9Jbk1lbW9yeShUZXN0QlNEREIpOgorICAgIGZuYW1lID0gTm9uZQorICAgIG9wZW5tZXRob2QgPSBbYnNkZGIuaGFzaG9wZW5dCisKKyMjICAgICAgICAgIyAoYnNkZGIucm5vcGVuLCdSZWNvcmQgTnVtYmVycycpLCAncHV0JyBmb3IgUkVDTk8gZm9yIGJzZGRiIDEuODUKKyMjICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFycyBicm9rZW4uLi4gYXQgbGVhc3Qgb24KKyMjICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29sYXJpcyBJbnRlbCAtIHJtYXNzZSAxLzk3CisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0QlRyZWUsCisgICAgICAgIFRlc3RIYXNoVGFibGUsCisgICAgICAgIFRlc3RCVHJlZV9Jbk1lbW9yeSwKKyAgICAgICAgVGVzdEhhc2hUYWJsZV9Jbk1lbW9yeSwKKyAgICAgICAgVGVzdEJUcmVlX0luTWVtb3J5X1RydW5jYXRlLAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYnNkZGIxODUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ic2RkYjE4NS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODEwMmMxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYnNkZGIxODUucHkKQEAgLTAsMCArMSw0MyBAQAorIiIiVGVzdHMgZm9yIHRoZSBic2RkYjE4NSBtb2R1bGUuCisKK1RoZSBmaWxlIDE4NXRlc3QuZGIgZm91bmQgaW4gTGliL3Rlc3QvIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzIHdpdGggdGhpcwordGVzdGluZyBzdWl0ZS4KKworIiIiCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlLCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgdW5pdHRlc3QKK2JzZGRiMTg1ID0gaW1wb3J0X21vZHVsZSgnYnNkZGIxODUnLCBkZXByZWNhdGVkPVRydWUpCitpbXBvcnQgYW55ZGJtCitpbXBvcnQgd2hpY2hkYgoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKKworY2xhc3MgQnNkZGIxODVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9vcGVuX2V4aXN0aW5nX2hhc2goc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHdlIGNhbiBvcGVuIGEgZmlsZSBrbm93biB0byBiZSBhIGhhc2ggdjIgZmlsZQorICAgICAgICBkYiA9IGJzZGRiMTg1Lmhhc2hvcGVuKGZpbmRmaWxlKCIxODV0ZXN0LmRiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGJbIjEiXSwgIjEiKQorICAgICAgICBkYi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93aGljaGRiKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHdoaWNoZGIgY29ycmVjdGx5IHNuaWZmcyB0aGUga25vd24gaGFzaCB2MiBmaWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2hpY2hkYi53aGljaGRiKGZpbmRmaWxlKCIxODV0ZXN0LmRiIikpLCAiYnNkZGIxODUiKQorCisgICAgZGVmIHRlc3RfYW55ZGJtX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBhbnlkYm0ub3BlbiBkb2VzICpub3QqIGNyZWF0ZSBhIGJzZGRiMTg1IGZpbGUKKyAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRiZmlsZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICJmb28uZGIiKQorICAgICAgICAgICAgYW55ZGJtLm9wZW4oZGJmaWxlLCAiYyIpLmNsb3NlKCkKKyAgICAgICAgICAgIGZ0eXBlID0gd2hpY2hkYi53aGljaGRiKGRiZmlsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZnR5cGUsICJic2RkYjE4NSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRtcGRpcikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChCc2RkYjE4NVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ic2RkYjMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ic2RkYjMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk5MTQ1YgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2JzZGRiMy5weQpAQCAtMCwwICsxLDgxIEBACisjIFRlc3QgZHJpdmVyIGZvciBic2RkYiBwYWNrYWdlLgorIiIiCitSdW4gYWxsIHRlc3QgY2FzZXMuCisiIiIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCisKKyMgU2tpcCB0ZXN0IGlmIF9ic2RkYiBtb2R1bGUgd2FzIG5vdCBidWlsdC4KK2ltcG9ydF9tb2R1bGUoJ19ic2RkYicpCisjIFNpbGVuY2UgUHkzayB3YXJuaW5nCitpbXBvcnRfbW9kdWxlKCdic2RkYicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworIyBXaGVuIHJ1bm5pbmcgYXMgYSBzY3JpcHQgaW5zdGVhZCBvZiB3aXRoaW4gdGhlIHJlZ3J0ZXN0IGZyYW1ld29yaywgc2tpcCB0aGUKKyMgcmVxdWlyZXMgdGVzdCwgc2luY2UgaXQncyBvYnZpb3VzIHdlIHdhbnQgdG8gcnVuIHRoZW0uCitpZiBfX25hbWVfXyAhPSAnX19tYWluX18nOgorICAgIHJlcXVpcmVzKCdic2RkYicpCisKK3ZlcmJvc2UgPSBGYWxzZQoraWYgJ3ZlcmJvc2UnIGluIHN5cy5hcmd2OgorICAgIHZlcmJvc2UgPSBUcnVlCisgICAgc3lzLmFyZ3YucmVtb3ZlKCd2ZXJib3NlJykKKworaWYgJ3NpbGVudCcgaW4gc3lzLmFyZ3Y6ICAjIHRha2UgY2FyZSBvZiBvbGQgZmxhZywganVzdCBpbiBjYXNlCisgICAgdmVyYm9zZSA9IEZhbHNlCisgICAgc3lzLmFyZ3YucmVtb3ZlKCdzaWxlbnQnKQorCisKK2NsYXNzIFRpbWluZ0NoZWNrKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRoaXMgY2xhc3MgaXMgbm90IGEgcmVhbCB0ZXN0LiAgSXRzIHB1cnBvc2UgaXMgdG8gcHJpbnQgYSBtZXNzYWdlCisgICAgcGVyaW9kaWNhbGx5IHdoZW4gdGhlIHRlc3QgcnVucyBzbG93bHkuICBUaGlzIHdpbGwgcHJldmVudCB0aGUgYnVpbGRib3RzCisgICAgZnJvbSB0aW1pbmcgb3V0IG9uIHNsb3cgbWFjaGluZXMuIiIiCisKKyAgICAjIEhvdyBtdWNoIHRpbWUgaW4gc2Vjb25kcyBiZWZvcmUgcHJpbnRpbmcgYSAnU3RpbGwgd29ya2luZycgbWVzc2FnZS4KKyAgICAjIFNpbmNlIHRoaXMgaXMgcnVuIGF0IG1vc3Qgb25jZSBiZXR3ZWVuIGVhY2ggdGVzdCBtb2R1bGUsIHVzZSBhIHNtYWxsZXIKKyAgICAjIGludGVydmFsIHRoYW4gb3RoZXIgdGVzdHMuCisgICAgX1BSSU5UX1dPUktJTkdfTVNHX0lOVEVSVkFMID0gNCAqIDYwCisKKyAgICAjIG5leHRfdGltZSBpcyB1c2VkIGFzIGEgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgc3Vydml2ZXMgZWFjaCBpbnN0YW5jZS4KKyAgICAjIFRoaXMgaXMgbmVjZXNzYXJ5IHNpbmNlIGEgbmV3IGluc3RhbmNlIHdpbGwgYmUgY3JlYXRlZCBmb3IgZWFjaCB0ZXN0LgorICAgIG5leHRfdGltZSA9IHRpbWUudGltZSgpICsgX1BSSU5UX1dPUktJTkdfTVNHX0lOVEVSVkFMCisKKyAgICBkZWYgdGVzdENoZWNrRWxhcHNlZFRpbWUoc2VsZik6CisgICAgICAgICMgUHJpbnQgc3RpbGwgd29ya2luZyBtZXNzYWdlIHNpbmNlIHRoZXNlIHRlc3RzIGNhbiBiZSByZWFsbHkgc2xvdy4KKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgaWYgc2VsZi5uZXh0X3RpbWUgPD0gbm93OgorICAgICAgICAgICAgVGltaW5nQ2hlY2submV4dF90aW1lID0gbm93ICsgc2VsZi5fUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwKKyAgICAgICAgICAgIHN5cy5fX3N0ZG91dF9fLndyaXRlKCcgIHRlc3RfYnNkZGIzIHN0aWxsIHdvcmtpbmcsIGJlIHBhdGllbnQuLi5cbicpCisgICAgICAgICAgICBzeXMuX19zdGRvdXRfXy5mbHVzaCgpCisKKworIyBGb3IgaW52b2NhdGlvbiB0aHJvdWdoIHJlZ3J0ZXN0CitkZWYgdGVzdF9tYWluKCk6CisgICAgZnJvbSBic2RkYiBpbXBvcnQgZGIKKyAgICBmcm9tIGJzZGRiLnRlc3QgaW1wb3J0IHRlc3RfYWxsCisgICAgdGVzdF9hbGwuc2V0X3Rlc3RfcGF0aF9wcmVmaXgob3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6LXRlc3RfYnNkZGIzLSVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5nZXRwaWQoKSkpCisgICAgIyBQbGVhc2UgbGVhdmUgdGhpcyBwcmludCBpbiwgaGF2aW5nIHRoaXMgc2hvdyB1cCBpbiB0aGUgYnVpbGRib3RzCisgICAgIyBtYWtlcyBkaWFnbm9zaW5nIHByb2JsZW1zIGEgbG90IGVhc2llci4KKyAgICBwcmludCA+PnN5cy5zdGRlcnIsIGRiLkRCX1ZFUlNJT05fU1RSSU5HCisgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAnVGVzdCBwYXRoIHByZWZpeDogJywgdGVzdF9hbGwuZ2V0X3Rlc3RfcGF0aF9wcmVmaXgoKQorICAgIHRyeToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KHRlc3RfYWxsLnN1aXRlKG1vZHVsZV9wcmVmaXg9J2JzZGRiLnRlc3QuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWluZ19jaGVjaz1UaW1pbmdDaGVjaykpCisgICAgZmluYWxseToKKyAgICAgICAgIyBUaGUgb25seSByZWFzb24gdG8gcmVtb3ZlIGRiX2hvbWUgaXMgaW4gY2FzZSBpZiB0aGVyZSBpcyBhbiBvbGQKKyAgICAgICAgIyBvbmUgbHlpbmcgYXJvdW5kLiAgVGhpcyBtaWdodCBiZSBieSBhIGRpZmZlcmVudCB1c2VyLCBzbyBqdXN0CisgICAgICAgICMgaWdub3JlIGVycm9ycy4gIFdlIHNob3VsZCBhbHdheXMgbWFrZSBhIHVuaXF1ZSBuYW1lIG5vdy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9hbGwucmVtb3ZlX3Rlc3RfcGF0aF9kaXJlY3RvcnkoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOGU2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKQEAgLTAsMCArMSwzOSBAQAorIiIiVW5pdCB0ZXN0cyBmb3IgYnVmZmVyIG9iamVjdHMuCisKK0ZvciBub3csIHRlc3RzIGp1c3QgbmV3IG9yIGNoYW5nZWQgZnVuY3Rpb25hbGl0eS4KKworIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgQnVmZmVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBleHRlbmRlZCBzbGljaW5nIGJ5IGNvbXBhcmluZyB3aXRoIGxpc3Qgc2xpY2luZy4KKyAgICAgICAgcyA9ICIiLmpvaW4oY2hyKGMpIGZvciBjIGluIGxpc3QocmFuZ2UoMjU1LCAtMSwgLTEpKSkKKyAgICAgICAgYiA9IGJ1ZmZlcihzKQorICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDE5LCAzMDAsIC0xLCAtMiwgLTMxLCAtMzAwKQorICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKKyAgICAgICAgICAgIGZvciBzdG9wIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgIyBTa2lwIHN0ZXAgMCAoaW52YWxpZCkKKyAgICAgICAgICAgICAgICBmb3Igc3RlcCBpbiBpbmRpY2VzWzE6XToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiW3N0YXJ0OnN0b3A6c3RlcF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1tzdGFydDpzdG9wOnN0ZXBdKQorCisgICAgZGVmIHRlc3RfbmV3YnVmZmVyX2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGJ1ZmZlciBvYmplY3QgaGFzIHRoZSBuZXcgYnVmZmVyIGludGVyZmFjZQorICAgICAgICAjIGFzIHVzZWQgYnkgdGhlIG1lbW9yeXZpZXcgb2JqZWN0CisgICAgICAgIHMgPSAiIi5qb2luKGNocihjKSBmb3IgYyBpbiBsaXN0KHJhbmdlKDI1NSwgLTEsIC0xKSkpCisgICAgICAgIGIgPSBidWZmZXIocykKKyAgICAgICAgbSA9IG1lbW9yeXZpZXcoYikgIyBTaG91bGQgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udG9ieXRlcygpLCBzKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQnVmZmVyVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYnVmaW8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4YjFlMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5CkBAIC0wLDAgKzEsNzkgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAorCitpbXBvcnQgaW8gIyBDIGltcGxlbWVudGF0aW9uLgoraW1wb3J0IF9weWlvIGFzIHB5aW8gIyBQeXRob24gaW1wbGVtZW50YXRpb24uCisKKyMgU2ltcGxlIHRlc3QgdG8gZW5zdXJlIHRoYXQgb3B0aW1pemF0aW9ucyBpbiB0aGUgSU8gbGlicmFyeSBkZWxpdmVyIHRoZQorIyBleHBlY3RlZCByZXN1bHRzLiAgRm9yIGJlc3QgdGVzdGluZywgcnVuIHRoaXMgdW5kZXIgYSBkZWJ1Zy1idWlsZCBQeXRob24gdG9vCisjICh0byBleGVyY2lzZSBhc3NlcnRzIGluIHRoZSBDIGNvZGUpLgorCitsZW5ndGhzID0gbGlzdChyYW5nZSgxLCAyNTcpKSArIFs1MTIsIDEwMDAsIDEwMjQsIDIwNDgsIDQwOTYsIDgxOTIsIDEwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYzODQsIDMyNzY4LCA2NTUzNiwgMTAwMDAwMF0KKworY2xhc3MgQnVmZmVyU2l6ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0cnlfb25lKHNlbGYsIHMpOgorICAgICAgICAjIFdyaXRlIHMgKyAiXG4iICsgcyB0byBmaWxlLCB0aGVuIG9wZW4gaXQgYW5kIGVuc3VyZSB0aGF0IHN1Y2Nlc3NpdmUKKyAgICAgICAgIyAucmVhZGxpbmUoKXMgZGVsaXZlciB3aGF0IHdlIHdyb3RlLgorCisgICAgICAgICMgRW5zdXJlIHdlIGNhbiBvcGVuIFRFU1RGTiBmb3Igd3JpdGluZy4KKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgIyBTaW5jZSBDIGRvZXNuJ3QgZ3VhcmFudGVlIHdlIGNhbiB3cml0ZS9yZWFkIGFyYml0cmFyeSBieXRlcyBpbiB0ZXh0CisgICAgICAgICMgZmlsZXMsIHVzZSBiaW5hcnkgbW9kZS4KKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB3cml0ZSBvbmNlIHdpdGggXG4gYW5kIG9uY2Ugd2l0aG91dAorICAgICAgICAgICAgZi53cml0ZShzKQorICAgICAgICAgICAgZi53cml0ZShiIlxuIikKKyAgICAgICAgICAgIGYud3JpdGUocykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIHMgKyBiIlxuIikKKyAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgcykKKyAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgbGluZSkgIyBNdXN0IGJlIGF0IEVPRgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiBkcml2ZV9vbmUoc2VsZiwgcGF0dGVybik6CisgICAgICAgIGZvciBsZW5ndGggaW4gbGVuZ3RoczoKKyAgICAgICAgICAgICMgUmVwZWF0IHN0cmluZyAncGF0dGVybicgYXMgb2Z0ZW4gYXMgbmVlZGVkIHRvIHJlYWNoIHRvdGFsIGxlbmd0aAorICAgICAgICAgICAgIyAnbGVuZ3RoJy4gIFRoZW4gY2FsbCB0cnlfb25lIHdpdGggdGhhdCBzdHJpbmcsIGEgc3RyaW5nIG9uZSBsYXJnZXIKKyAgICAgICAgICAgICMgdGhhbiB0aGF0LCBhbmQgYSBzdHJpbmcgb25lIHNtYWxsZXIgdGhhbiB0aGF0LiAgVHJ5IHRoaXMgd2l0aCBhbGwKKyAgICAgICAgICAgICMgc21hbGwgc2l6ZXMgYW5kIHZhcmlvdXMgcG93ZXJzIG9mIDIsIHNvIHdlIGV4ZXJjaXNlIGFsbCBsaWtlbHkKKyAgICAgICAgICAgICMgc3RkaW8gYnVmZmVyIHNpemVzLCBhbmQgIm9mZiBieSBvbmUiIGVycm9ycyBvbiBib3RoIHNpZGVzLgorICAgICAgICAgICAgcSwgciA9IGRpdm1vZChsZW5ndGgsIGxlbihwYXR0ZXJuKSkKKyAgICAgICAgICAgIHRlc3RzdHJpbmcgPSBwYXR0ZXJuICogcSArIHBhdHRlcm5bOnJdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0c3RyaW5nKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi50cnlfb25lKHRlc3RzdHJpbmcpCisgICAgICAgICAgICBzZWxmLnRyeV9vbmUodGVzdHN0cmluZyArIGIieCIpCisgICAgICAgICAgICBzZWxmLnRyeV9vbmUodGVzdHN0cmluZ1s6LTFdKQorCisgICAgZGVmIHRlc3RfcHJpbWVwYXQoc2VsZik6CisgICAgICAgICMgQSBwYXR0ZXJuIHdpdGggcHJpbWUgbGVuZ3RoLCB0byBhdm9pZCBzaW1wbGUgcmVsYXRpb25zaGlwcyB3aXRoCisgICAgICAgICMgc3RkaW8gYnVmZmVyIHNpemVzLgorICAgICAgICBzZWxmLmRyaXZlX29uZShiIjEyMzQ1Njc4OTBcMDBcMDFcMDJcMDNcMDRcMDVcMDYiKQorCisgICAgZGVmIHRlc3RfbnVsbHBhdChzZWxmKToKKyAgICAgICAgc2VsZi5kcml2ZV9vbmUoYnl0ZXMoMTAwMCkpCisKKworY2xhc3MgQ0J1ZmZlclNpemVUZXN0KEJ1ZmZlclNpemVUZXN0KToKKyAgICBvcGVuID0gaW8ub3BlbgorCitjbGFzcyBQeUJ1ZmZlclNpemVUZXN0KEJ1ZmZlclNpemVUZXN0KToKKyAgICBvcGVuID0gc3RhdGljbWV0aG9kKHB5aW8ub3BlbikKKworY2xhc3MgQnVpbHRpbkJ1ZmZlclNpemVUZXN0KEJ1ZmZlclNpemVUZXN0KToKKyAgICBvcGVuID0gb3BlbgorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChDQnVmZmVyU2l6ZVRlc3QsIFB5QnVmZmVyU2l6ZVRlc3QsIEJ1aWx0aW5CdWZmZXJTaXplVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkZTUyNAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKQEAgLTAsMCArMSwxNzEyIEBACisjIFB5dGhvbiB0ZXN0IHNldCAtLSBidWlsdC1pbiBmdW5jdGlvbnMKKworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZjbXAsIGhhdmVfdW5pY29kZSwgVEVTVEZOLCB1bmxpbmssIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl91bml0dGVzdCwgY2hlY2tfcHkza193YXJuaW5ncworaW1wb3J0IHdhcm5pbmdzCitmcm9tIG9wZXJhdG9yIGltcG9ydCBuZWcKKworaW1wb3J0IHN5cywgY1N0cmluZ0lPLCByYW5kb20sIFVzZXJEaWN0CisKKyMgY291bnQgdGhlIG51bWJlciBvZiB0ZXN0IHJ1bnMuCisjIHVzZWQgdG8gc2tpcCBydW5uaW5nIHRlc3RfZXhlY2ZpbGUoKSBtdWx0aXBsZSB0aW1lcworIyBhbmQgdG8gY3JlYXRlIHVuaXF1ZSBzdHJpbmdzIHRvIGludGVybiBpbiB0ZXN0X2ludGVybigpCitudW1ydW5zID0gMAorCitjbGFzcyBTcXVhcmVzOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heCk6CisgICAgICAgIHNlbGYubWF4ID0gbWF4CisgICAgICAgIHNlbGYuc29mYXIgPSBbXQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6IHJldHVybiBsZW4oc2VsZi5zb2ZhcikKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgaWYgbm90IDAgPD0gaSA8IHNlbGYubWF4OiByYWlzZSBJbmRleEVycm9yCisgICAgICAgIG4gPSBsZW4oc2VsZi5zb2ZhcikKKyAgICAgICAgd2hpbGUgbiA8PSBpOgorICAgICAgICAgICAgc2VsZi5zb2Zhci5hcHBlbmQobipuKQorICAgICAgICAgICAgbiArPSAxCisgICAgICAgIHJldHVybiBzZWxmLnNvZmFyW2ldCisKK2NsYXNzIFN0clNxdWFyZXM6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4KToKKyAgICAgICAgc2VsZi5tYXggPSBtYXgKKyAgICAgICAgc2VsZi5zb2ZhciA9IFtdCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLnNvZmFyKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICBpZiBub3QgMCA8PSBpIDwgc2VsZi5tYXg6CisgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgICAgIG4gPSBsZW4oc2VsZi5zb2ZhcikKKyAgICAgICAgd2hpbGUgbiA8PSBpOgorICAgICAgICAgICAgc2VsZi5zb2Zhci5hcHBlbmQoc3RyKG4qbikpCisgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgcmV0dXJuIHNlbGYuc29mYXJbaV0KKworY2xhc3MgQml0QnVja2V0OgorICAgIGRlZiB3cml0ZShzZWxmLCBsaW5lKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFRlc3RGYWlsaW5nQm9vbDoKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCitjbGFzcyBUZXN0RmFpbGluZ0l0ZXI6CisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKworY2xhc3MgQnVpbHRpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW1wb3J0KHNlbGYpOgorICAgICAgICBfX2ltcG9ydF9fKCdzeXMnKQorICAgICAgICBfX2ltcG9ydF9fKCd0aW1lJykKKyAgICAgICAgX19pbXBvcnRfXygnc3RyaW5nJykKKyAgICAgICAgX19pbXBvcnRfXyhuYW1lPSdzeXMnKQorICAgICAgICBfX2ltcG9ydF9fKG5hbWU9J3RpbWUnLCBsZXZlbD0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgX19pbXBvcnRfXywgJ3NwYW1zcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfX2ltcG9ydF9fLCAxLCAyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfX2ltcG9ydF9fLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfX2ltcG9ydF9fLCAnc3lzJywgbmFtZT0nc3lzJykKKworICAgIGRlZiB0ZXN0X2FicyhzZWxmKToKKyAgICAgICAgIyBpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKDEyMzQpLCAxMjM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicygtMTIzNCksIDEyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhYnMoLXN5cy5tYXhpbnQtMSkgPiAwKQorICAgICAgICAjIGZsb2F0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKDAuMCksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoMy4xNCksIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKC0zLjE0KSwgMy4xNCkKKyAgICAgICAgIyBsb25nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKDBMKSwgMEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKDEyMzRMKSwgMTIzNEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKC0xMjM0TCksIDEyMzRMKQorICAgICAgICAjIHN0cgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFicywgJ2EnKQorICAgICAgICAjIGJvb2wKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoVHJ1ZSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKEZhbHNlKSwgMCkKKyAgICAgICAgIyBvdGhlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFicykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhYnMsIE5vbmUpCisgICAgICAgIGNsYXNzIEFic0NsYXNzKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19hYnNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoQWJzQ2xhc3MoKSksIC01KQorCisgICAgZGVmIHRlc3RfYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbChbMiwgNCwgNl0pLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbChbMiwgTm9uZSwgNl0pLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBhbGwsIFsyLCBUZXN0RmFpbGluZ0Jvb2woKSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgYWxsLCBUZXN0RmFpbGluZ0l0ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhbGwsIDEwKSAgICAgICAgICAgICAgICMgTm9uLWl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWxsKSAgICAgICAgICAgICAgICAgICAjIE5vIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhbGwsIFsyLCA0LCA2XSwgW10pICAgICMgVG9vIG1hbnkgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbChbXSksIFRydWUpICAgICAgICAgICAgICAgICAgICAgIyBFbXB0eSBpdGVyYXRvcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbChbMCwgVGVzdEZhaWxpbmdCb29sKCldKSwgRmFsc2UpIyBTaG9ydC1jaXJjdWl0CisgICAgICAgIFMgPSBbNTAsIDYwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbCh4ID4gNDIgZm9yIHggaW4gUyksIFRydWUpCisgICAgICAgIFMgPSBbNTAsIDQwLCA2MF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGwoeCA+IDQyIGZvciB4IGluIFMpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2FueShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbnkoW05vbmUsIE5vbmUsIE5vbmVdKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW55KFtOb25lLCA0LCBOb25lXSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgYW55LCBbTm9uZSwgVGVzdEZhaWxpbmdCb29sKCksIDZdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGFueSwgVGVzdEZhaWxpbmdJdGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYW55LCAxMCkgICAgICAgICAgICAgICAjIE5vbi1pdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFueSkgICAgICAgICAgICAgICAgICAgIyBObyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYW55LCBbMiwgNCwgNl0sIFtdKSAgICAjIFRvbyBtYW55IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbnkoW10pLCBGYWxzZSkgICAgICAgICAgICAgICAgICAgICMgRW1wdHkgaXRlcmF0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbnkoWzEsIFRlc3RGYWlsaW5nQm9vbCgpXSksIFRydWUpICMgU2hvcnQtY2lyY3VpdAorICAgICAgICBTID0gWzQwLCA2MCwgMzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW55KHggPiA0MiBmb3IgeCBpbiBTKSwgVHJ1ZSkKKyAgICAgICAgUyA9IFsxMCwgMjAsIDMwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFueSh4ID4gNDIgZm9yIHggaW4gUyksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgorICAgICAgICB4ID0gLXN5cy5tYXhpbnQtMQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh4LCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC14LCBzeXMubWF4aW50KzEpCisKKyAgICBkZWYgdGVzdF9hcHBseShzZWxmKToKKyAgICAgICAgZGVmIGYwKCphcmdzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgKCkpCisgICAgICAgIGRlZiBmMShhMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGExLCAxKQorICAgICAgICBkZWYgZjIoYTEsIGEyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTEsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEyLCAyKQorICAgICAgICBkZWYgZjMoYTEsIGEyLCBhMyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGExLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMiwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTMsIDMpCisgICAgICAgIGFwcGx5KGYwLCAoKSkKKyAgICAgICAgYXBwbHkoZjEsICgxLCkpCisgICAgICAgIGFwcGx5KGYyLCAoMSwgMikpCisgICAgICAgIGFwcGx5KGYzLCAoMSwgMiwgMykpCisKKyAgICAgICAgIyBBIFB5Q0Z1bmN0aW9uIHRoYXQgdGFrZXMgb25seSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgc2hvdWxkIGFsbG93IGFuCisgICAgICAgICMgZW1wdHkga2V5d29yZCBkaWN0aW9uYXJ5IHRvIHBhc3Mgd2l0aG91dCBhIGNvbXBsYWludCwgYnV0IHJhaXNlIGEKKyAgICAgICAgIyBUeXBlRXJyb3IgaWYgdGhlIGRpY3Rpb25hcnkgaXMgbm9uLWVtcHR5LgorICAgICAgICBhcHBseShpZCwgKDEsKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXBwbHksIGlkLCAoMSwpLCB7ImZvbyI6IDF9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFwcGx5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFwcGx5LCBpZCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXBwbHksIGlkLCAoNDIsKSwgNDIpCisKKyAgICBkZWYgdGVzdF9jYWxsYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGxlbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGFibGUoImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGNhbGxhYmxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGxhbWJkYSB4LCB5OiB4ICsgeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGFibGUoX19idWlsdGluc19fKSkKKyAgICAgICAgZGVmIGYoKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoZikpCisKKyAgICAgICAgY2xhc3MgQ2xhc3NpYzoKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShDbGFzc2ljKSkKKyAgICAgICAgYyA9IENsYXNzaWMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoYy5tZXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShjKSkKKworICAgICAgICBjbGFzcyBOZXdTdHlsZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZik6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKE5ld1N0eWxlKSkKKyAgICAgICAgbiA9IE5ld1N0eWxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKG4ubWV0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGFibGUobikpCisKKyAgICAgICAgIyBDbGFzc2ljIGFuZCBuZXctc3R5bGUgY2xhc3NlcyBldmFsdWF0ZSBfX2NhbGxfXygpIGRpZmZlcmVudGx5CisgICAgICAgIGMuX19jYWxsX18gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShjKSkKKyAgICAgICAgZGVsIGMuX19jYWxsX18KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShjKSkKKyAgICAgICAgbi5fX2NhbGxfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShuKSkKKyAgICAgICAgZGVsIG4uX19jYWxsX18KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShuKSkKKworICAgICAgICBjbGFzcyBOMihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOiBwYXNzCisgICAgICAgIG4yID0gTjIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUobjIpKQorICAgICAgICBjbGFzcyBOMyhOMik6IHBhc3MKKyAgICAgICAgbjMgPSBOMygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShuMykpCisKKyAgICBkZWYgdGVzdF9jaHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hyKDMyKSwgJyAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNocig2NSksICdBJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaHIoOTcpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hyKDB4ZmYpLCAnXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNociwgMjU2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNocikKKworICAgIGRlZiB0ZXN0X2NtcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoLTEsIDEpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoMSwgLTEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCgxLCAxKSwgMCkKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBjaXJjdWxhciBvYmplY3RzIGFyZSBub3QgaGFuZGxlZAorICAgICAgICBhID0gW107IGEuYXBwZW5kKGEpCisgICAgICAgIGIgPSBbXTsgYi5hcHBlbmQoYikKKyAgICAgICAgZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKKyAgICAgICAgYyA9IFVzZXJMaXN0KCk7IGMuYXBwZW5kKGMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY21wLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNtcCwgYiwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjbXAsIGMsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY21wLCBhLCBjKQorICAgICAgICMgb2theSwgbm93IGJyZWFrIHRoZSBjeWNsZXMKKyAgICAgICAgYS5wb3AoKTsgYi5wb3AoKTsgYy5wb3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCkKKworICAgIGRlZiB0ZXN0X2NvZXJjZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmY21wKGNvZXJjZSgxLCAxLjEpLCAoMS4wLCAxLjEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2VyY2UoMSwgMUwpLCAoMUwsIDFMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmY21wKGNvZXJjZSgxTCwgMS4xKSwgKDEuMCwgMS4xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29lcmNlKQorICAgICAgICBjbGFzcyBCYWROdW1iZXI6CisgICAgICAgICAgICBkZWYgX19jb2VyY2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb2VyY2UsIDQyLCBCYWROdW1iZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgY29lcmNlLCAwLjUsIGludCgiMTIzNDUiICogMTAwMCkpCisKKyAgICBkZWYgdGVzdF9jb21waWxlKHNlbGYpOgorICAgICAgICBjb21waWxlKCdwcmludCAxXG4nLCAnJywgJ2V4ZWMnKQorICAgICAgICBib20gPSAnXHhlZlx4YmJceGJmJworICAgICAgICBjb21waWxlKGJvbSArICdwcmludCAxXG4nLCAnJywgJ2V4ZWMnKQorICAgICAgICBjb21waWxlKHNvdXJjZT0ncGFzcycsIGZpbGVuYW1lPSc/JywgbW9kZT0nZXhlYycpCisgICAgICAgIGNvbXBpbGUoZG9udF9pbmhlcml0PTAsIGZpbGVuYW1lPSd0bXAnLCBzb3VyY2U9JzAnLCBtb2RlPSdldmFsJykKKyAgICAgICAgY29tcGlsZSgncGFzcycsICc/JywgZG9udF9pbmhlcml0PTEsIG1vZGU9J2V4ZWMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBpbGUsICdwcmludCA0MlxuJywgJzxzdHJpbmc+JywgJ2JhZG1vZGUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21waWxlLCAncHJpbnQgNDJcbicsICc8c3RyaW5nPicsICdzaW5nbGUnLCAweGZmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBpbGUsIGNocigwKSwgJ2YnLCAnZXhlYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGlsZSwgJ3Bhc3MnLCAnPycsICdleGVjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT0nZXZhbCcsIHNvdXJjZT0nMCcsIGZpbGVuYW1lPSd0bXAnKQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBjb21waWxlKHVuaWNvZGUoJ3ByaW50IHUiXHhjM1x4YTUiXG4nLCAndXRmOCcpLCAnJywgJ2V4ZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21waWxlLCB1bmljaHIoMCksICdmJywgJ2V4ZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGlsZSwgdW5pY29kZSgnYSA9IDEnKSwgJ2YnLCAnYmFkJykKKworCisgICAgZGVmIHRlc3RfZGVsYXR0cihzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBzeXMuc3BhbSA9IDEKKyAgICAgICAgZGVsYXR0cihzeXMsICdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWxhdHRyKQorCisgICAgZGVmIHRlc3RfZGlyKHNlbGYpOgorICAgICAgICAjIGRpcih3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpciwgNDIsIDQyKQorCisgICAgICAgICMgZGlyKCkgLSBsb2NhbCBzY29wZQorICAgICAgICBsb2NhbF92YXIgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xvY2FsX3ZhcicsIGRpcigpKQorCisgICAgICAgICMgZGlyKG1vZHVsZSkKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBzZWxmLmFzc2VydEluKCdleGl0JywgZGlyKHN5cykpCisKKyAgICAgICAgIyBkaXIobW9kdWxlX3dpdGhfaW52YWxpZF9fZGljdF9fKQorICAgICAgICBpbXBvcnQgdHlwZXMKKyAgICAgICAgY2xhc3MgRm9vKHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgX19kaWN0X18gPSA4CisgICAgICAgIGYgPSBGb28oImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlyLCBmKQorCisgICAgICAgICMgZGlyKHR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmlwIiwgZGlyKHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIl9fbXJvX18iLCBkaXIoc3RyKSkKKworICAgICAgICAjIGRpcihvYmopCisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IDcKKyAgICAgICAgICAgICAgICBzZWxmLnkgPSA4CisgICAgICAgICAgICAgICAgc2VsZi56ID0gOQorICAgICAgICBmID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigieSIsIGRpcihmKSkKKworICAgICAgICAjIGRpcihvYmpfbm9fX2RpY3RfXykKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbXQorICAgICAgICBmID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX19yZXByX18iLCBkaXIoZikpCisKKyAgICAgICAgIyBkaXIob2JqX25vX19jbGFzc19fd2l0aF9fZGljdF9fKQorICAgICAgICAjIChhbiB1Z2x5IHRyaWNrIHRvIGNhdXNlIGdldGF0dHIoZiwgIl9fY2xhc3NfXyIpIHRvIGZhaWwpCisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJfX2NsYXNzX18iLCAiX19kaWN0X18iXQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuYmFyID0gIndvdyIKKyAgICAgICAgZiA9IEZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIl9fcmVwcl9fIiwgZGlyKGYpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJiYXIiLCBkaXIoZikpCisKKyAgICAgICAgIyBkaXIob2JqX3VzaW5nIF9fZGlyX18pCisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsia2FuIiwgImdhIiwgInJvbyJdCisgICAgICAgIGYgPSBGb28oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlyKGYpID09IFsiZ2EiLCAia2FuIiwgInJvbyJdKQorCisgICAgICAgICMgZGlyKG9ial9fZGlyX19ub3RfbGlzdCkKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNworICAgICAgICBmID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXIsIGYpCisKKyAgICBkZWYgdGVzdF9kaXZtb2Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKDEyLCA3KSwgKDEsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgtMTIsIDcpLCAoLTIsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgxMiwgLTcpLCAoLTIsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoLTEyLCAtNyksICgxLCAtNSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoMTJMLCA3TCksICgxTCwgNUwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgtMTJMLCA3TCksICgtMkwsIDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoMTJMLCAtN0wpLCAoLTJMLCAtMkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgtMTJMLCAtN0wpLCAoMUwsIC01TCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoMTIsIDdMKSwgKDEsIDVMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoLTEyLCA3TCksICgtMiwgMkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgxMkwsIC03KSwgKC0yTCwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgtMTJMLCAtNyksICgxTCwgLTUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKC1zeXMubWF4aW50LTEsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzLm1heGludCsxLCAwKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoZGl2bW9kKDMuMjUsIDEuMCksICgzLjAsIDAuMjUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmY21wKGRpdm1vZCgtMy4yNSwgMS4wKSwgKC00LjAsIDAuNzUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmY21wKGRpdm1vZCgzLjI1LCAtMS4wKSwgKC00LjAsIC0wLjc1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmNtcChkaXZtb2QoLTMuMjUsIC0xLjApLCAoMy4wLCAtMC4yNSkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGl2bW9kKQorCisgICAgZGVmIHRlc3RfZXZhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCcxKzEnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCcgMSsxXG4nKSwgMikKKyAgICAgICAgZ2xvYmFscyA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgbG9jYWxzID0geydiJzogMjAwLCAnYyc6IDMwMH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCdhJywgZ2xvYmFscykgLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2EnLCBnbG9iYWxzLCBsb2NhbHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2InLCBnbG9iYWxzLCBsb2NhbHMpLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnYycsIGdsb2JhbHMsIGxvY2FscyksIDMwMCkKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHVuaWNvZGUoJzErMScpKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCh1bmljb2RlKCcgMSsxXG4nKSksIDIpCisgICAgICAgIGdsb2JhbHMgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIGxvY2FscyA9IHsnYic6IDIwMCwgJ2MnOiAzMDB9CisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCh1bmljb2RlKCdhJyksIGdsb2JhbHMpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHVuaWNvZGUoJ2EnKSwgZ2xvYmFscywgbG9jYWxzKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCh1bmljb2RlKCdiJyksIGdsb2JhbHMsIGxvY2FscyksIDIwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCh1bmljb2RlKCdjJyksIGdsb2JhbHMsIGxvY2FscyksIDMwMCkKKyAgICAgICAgICAgIGJvbSA9ICdceGVmXHhiYlx4YmYnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYm9tICsgJ2EnLCBnbG9iYWxzLCBsb2NhbHMpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHVuaWNvZGUoJ3UiXHhjM1x4YTUiJywgJ3V0ZjgnKSwgZ2xvYmFscyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUoJ1x4YzNceGE1JywgJ3V0ZjgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsICgpKQorCisgICAgZGVmIHRlc3RfZ2VuZXJhbF9ldmFsKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHRoYXQgZ2VuZXJhbCBtYXBwaW5ncyBjYW4gYmUgdXNlZCBmb3IgdGhlIGxvY2FscyBhcmd1bWVudAorCisgICAgICAgIGNsYXNzIE06CisgICAgICAgICAgICAiVGVzdCBtYXBwaW5nIGludGVyZmFjZSB2ZXJzdXMgcG9zc2libGUgY2FsbHMgZnJvbSBldmFsKCkuIgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICdhJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEyCisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KCd4eXonKQorCisgICAgICAgIG0gPSBNKCkKKyAgICAgICAgZyA9IGdsb2JhbHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2EnLCBnLCBtKSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvciwgZXZhbCwgJ2InLCBnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2RpcigpJywgZywgbSksIGxpc3QoJ3h5eicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2dsb2JhbHMoKScsIGcsIG0pLCBnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2xvY2FscygpJywgZywgbSksIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgJ2EnLCBtKQorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgIk5vbi1tYXBwaW5nIgorICAgICAgICAgICAgcGFzcworICAgICAgICBtID0gQSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgJ2EnLCBnLCBtKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgZGljdCBzdWJjbGFzc2VzIHdvcmsgYXMgd2VsbAorICAgICAgICBjbGFzcyBEKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICdhJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEyCisgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KQorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QoJ3h5eicpCisKKyAgICAgICAgZCA9IEQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2EnLCBnLCBkKSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvciwgZXZhbCwgJ2InLCBnLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2RpcigpJywgZywgZCksIGxpc3QoJ3h5eicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2dsb2JhbHMoKScsIGcsIGQpLCBnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2xvY2FscygpJywgZywgZCksIGQpCisKKyAgICAgICAgIyBWZXJpZnkgbG9jYWxzIHN0b3JlcyAodXNlZCBieSBsaXN0IGNvbXBzKQorICAgICAgICBldmFsKCdbbG9jYWxzKCkgZm9yIGkgaW4gKDIsMyldJywgZywgZCkKKyAgICAgICAgZXZhbCgnW2xvY2FscygpIGZvciBpIGluICgyLDMpXScsIGcsIFVzZXJEaWN0LlVzZXJEaWN0KCkpCisKKyAgICAgICAgY2xhc3MgU3ByZWFkU2hlZXQ6CisgICAgICAgICAgICAiU2FtcGxlIGFwcGxpY2F0aW9uIHNob3dpbmcgbmVzdGVkLCBjYWxjdWxhdGVkIGxvb2t1cHMuIgorICAgICAgICAgICAgX2NlbGxzID0ge30KKyAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIGZvcm11bGEpOgorICAgICAgICAgICAgICAgIHNlbGYuX2NlbGxzW2tleV0gPSBmb3JtdWxhCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChzZWxmLl9jZWxsc1trZXldLCBnbG9iYWxzKCksIHNlbGYpCisKKyAgICAgICAgc3MgPSBTcHJlYWRTaGVldCgpCisgICAgICAgIHNzWydhMSddID0gJzUnCisgICAgICAgIHNzWydhMiddID0gJ2ExKjYnCisgICAgICAgIHNzWydhMyddID0gJ2EyKjcnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NbJ2EzJ10sIDIxMCkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGRpcigpIGNhdGNoZXMgYSBub24tbGlzdCByZXR1cm5lZCBieSBldmFsCisgICAgICAgICMgU0YgYnVnICMxMDA0NjY5CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoaXRlbSkKKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnYScKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnZGlyKCknLCBnbG9iYWxzKCksIEMoKSkKKworICAgICMgRG9uZSBvdXRzaWRlIG9mIHRoZSBtZXRob2QgdGVzdF96IHRvIGdldCB0aGUgY29ycmVjdCBzY29wZQorICAgIHogPSAwCisgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCisgICAgZi53cml0ZSgneiA9IHorMVxuJykKKyAgICBmLndyaXRlKCd6ID0geioyXG4nKQorICAgIGYuY2xvc2UoKQorICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoImV4ZWNmaWxlLi4gbm90IHN1cHBvcnRlZCBpbiAzLngiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIGV4ZWNmaWxlKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2V4ZWNmaWxlKHNlbGYpOgorICAgICAgICBnbG9iYWwgbnVtcnVucworICAgICAgICBpZiBudW1ydW5zOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG51bXJ1bnMgKz0gMQorCisgICAgICAgIGdsb2JhbHMgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIGxvY2FscyA9IHsnYic6IDIwMCwgJ2MnOiAzMDB9CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9fY2xhc3NfXy56LCAyKQorICAgICAgICBnbG9iYWxzWyd6J10gPSAwCisgICAgICAgIGV4ZWNmaWxlKFRFU1RGTiwgZ2xvYmFscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxzWyd6J10sIDIpCisgICAgICAgIGxvY2Fsc1sneiddID0gMAorICAgICAgICBleGVjZmlsZShURVNURk4sIGdsb2JhbHMsIGxvY2FscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbHNbJ3onXSwgMikKKworICAgICAgICBjbGFzcyBNOgorICAgICAgICAgICAgIlRlc3QgbWFwcGluZyBpbnRlcmZhY2UgdmVyc3VzIHBvc3NpYmxlIGNhbGxzIGZyb20gZXhlY2ZpbGUoKS4iCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi56ID0gMTAKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAneic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnoKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAneic6CisgICAgICAgICAgICAgICAgICAgIHNlbGYueiA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisKKyAgICAgICAgbG9jYWxzID0gTSgpCisgICAgICAgIGxvY2Fsc1sneiddID0gMAorICAgICAgICBleGVjZmlsZShURVNURk4sIGdsb2JhbHMsIGxvY2FscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbHNbJ3onXSwgMikKKworICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV4ZWNmaWxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV4ZWNmaWxlLCBURVNURk4sIHt9LCAoKSkKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGV4ZWNmaWxlLCBvcy5jdXJkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGV4ZWNmaWxlLCAiSV9kb250X2V4aXN0IikKKworICAgIGRlZiB0ZXN0X2ZpbHRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIobGFtYmRhIGM6ICdhJyA8PSBjIDw9ICd6JywgJ0hlbGxvIFdvcmxkJyksICdlbGxvb3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKE5vbmUsIFsxLCAnaGVsbG8nLCBbXSwgWzNdLCAnJywgTm9uZSwgOSwgMF0pLCBbMSwgJ2hlbGxvJywgWzNdLCA5XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIobGFtYmRhIHg6IHggPiAwLCBbMSwgLTMsIDksIDAsIDJdKSwgWzEsIDksIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihOb25lLCBTcXVhcmVzKDEwKSksIFsxLCA0LCA5LCAxNiwgMjUsIDM2LCA0OSwgNjQsIDgxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIobGFtYmRhIHg6IHglMiwgU3F1YXJlcygxMCkpLCBbMSwgOSwgMjUsIDQ5LCA4MV0pCisgICAgICAgIGRlZiBpZGVudGl0eShpdGVtKToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpbHRlcihpZGVudGl0eSwgU3F1YXJlcyg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmaWx0ZXIpCisgICAgICAgIGNsYXNzIEJhZFNlcShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICBpZiBpbmRleDw0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZpbHRlciwgbGFtYmRhIHg6IHgsIEJhZFNlcSgpKQorICAgICAgICBkZWYgYmFkZnVuYygpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZpbHRlciwgYmFkZnVuYywgcmFuZ2UoNSkpCisKKyAgICAgICAgIyB0ZXN0IGJsdGlubW9kdWxlLmM6OmZpbHRlcnR1cGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIoTm9uZSwgKDEsIDIpKSwgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihsYW1iZGEgeDogeD49MywgKDEsIDIsIDMsIDQpKSwgKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZpbHRlciwgNDIsICgxLCAyKSkKKworICAgICAgICAjIHRlc3QgYmx0aW5tb2R1bGUuYzo6ZmlsdGVyc3RyaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIoTm9uZSwgIjEyIiksICIxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKGxhbWJkYSB4OiB4Pj0iMyIsICIxMjM0IiksICIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmlsdGVyLCA0MiwgIjEyIikKKyAgICAgICAgY2xhc3MgYmFkc3RyKHN0cik6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmlsdGVyLCBsYW1iZGEgeDogeCA+PSIzIiwgYmFkc3RyKCIxMjM0IikpCisKKyAgICAgICAgY2xhc3MgYmFkc3RyMihzdHIpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmaWx0ZXIsIGxhbWJkYSB4OiB4ID49NDIsIGJhZHN0cjIoIjEyMzQiKSkKKworICAgICAgICBjbGFzcyB3ZWlyZHN0cihzdHIpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gd2VpcmRzdHIoMipzdHIuX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihsYW1iZGEgeDogeD49IjMzIiwgd2VpcmRzdHIoIjEyMzQiKSksICIzMzQ0IikKKworICAgICAgICBjbGFzcyBzaGlmdHN0cihzdHIpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hyKG9yZChzdHIuX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpKSsxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihsYW1iZGEgeDogeD49IjMiLCBzaGlmdHN0cigiMTIzNCIpKSwgIjM0NSIpCisKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgIyB0ZXN0IGJsdGlubW9kdWxlLmM6OmZpbHRlcnVuaWNvZGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIoTm9uZSwgdW5pY29kZSgiMTIiKSksIHVuaWNvZGUoIjEyIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihsYW1iZGEgeDogeD49IjMiLCB1bmljb2RlKCIxMjM0IikpLCB1bmljb2RlKCIzNCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmaWx0ZXIsIDQyLCB1bmljb2RlKCIxMiIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmlsdGVyLCBsYW1iZGEgeDogeCA+PSIzIiwgYmFkc3RyKHVuaWNvZGUoIjEyMzQiKSkpCisKKyAgICAgICAgICAgIGNsYXNzIGJhZHVuaWNvZGUodW5pY29kZSk6CisgICAgICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZpbHRlciwgbGFtYmRhIHg6IHggPj00MiwgYmFkdW5pY29kZSgiMTIzNCIpKQorCisgICAgICAgICAgICBjbGFzcyB3ZWlyZHVuaWNvZGUodW5pY29kZSk6CisgICAgICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlaXJkdW5pY29kZSgyKnVuaWNvZGUuX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBmaWx0ZXIobGFtYmRhIHg6IHg+PXVuaWNvZGUoIjMzIiksIHdlaXJkdW5pY29kZSgiMTIzNCIpKSwgdW5pY29kZSgiMzM0NCIpKQorCisgICAgICAgICAgICBjbGFzcyBzaGlmdHVuaWNvZGUodW5pY29kZSk6CisgICAgICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNocihvcmQodW5pY29kZS5fX2dldGl0ZW1fXyhzZWxmLCBpbmRleCkpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGZpbHRlcihsYW1iZGEgeDogeD49dW5pY29kZSgiMyIpLCBzaGlmdHVuaWNvZGUoIjEyMzQiKSksCisgICAgICAgICAgICAgICAgdW5pY29kZSgiMzQ1IikKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl9zdWJjbGFzc2VzKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhhdCBmaWx0ZXIoKSBuZXZlciByZXR1cm5zIHR1cGxlLCBzdHIgb3IgdW5pY29kZSBzdWJjbGFzc2VzCisgICAgICAgICMgYW5kIHRoYXQgdGhlIHJlc3VsdCBhbHdheXMgZ29lcyB0aHJvdWdoIF9fZ2V0aXRlbV9fCisgICAgICAgIGZ1bmNzID0gKE5vbmUsIGJvb2wsIGxhbWJkYSB4OiBUcnVlKQorICAgICAgICBjbGFzcyB0dXBsZTIodHVwbGUpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gMip0dXBsZS5fX2dldGl0ZW1fXyhzZWxmLCBpbmRleCkKKyAgICAgICAgY2xhc3Mgc3RyMihzdHIpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gMipzdHIuX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpCisgICAgICAgIGlucHV0cyA9IHsKKyAgICAgICAgICAgIHR1cGxlMjogeygpOiAoKSwgKDEsIDIsIDMpOiAoMiwgNCwgNil9LAorICAgICAgICAgICAgc3RyMjogICB7IiI6ICIiLCAiMTIzIjogIjExMjIzMyJ9CisgICAgICAgIH0KKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgY2xhc3MgdW5pY29kZTIodW5pY29kZSk6CisgICAgICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIqdW5pY29kZS5fX2dldGl0ZW1fXyhzZWxmLCBpbmRleCkKKyAgICAgICAgICAgIGlucHV0c1t1bmljb2RlMl0gPSB7CisgICAgICAgICAgICAgICAgdW5pY29kZSgpOiB1bmljb2RlKCksCisgICAgICAgICAgICAgICAgdW5pY29kZSgiMTIzIik6IHVuaWNvZGUoIjExMjIzMyIpCisgICAgICAgICAgICB9CisKKyAgICAgICAgZm9yIChjbHMsIGlucHMpIGluIGlucHV0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciAoaW5wLCBleHApIGluIGlucHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgdGhlIG91dHB1dCBnb2VzIHRocm91Z2ggX19nZXRpdGVtX18KKyAgICAgICAgICAgICAgICAjIGV2ZW4gaWYgZnVuYyBpcyBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZ1bmNzWzBdLCBjbHMoaW5wKSksCisgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmdW5jc1sxXSwgY2xzKGlucCkpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGZvciBmdW5jIGluIGZ1bmNzOgorICAgICAgICAgICAgICAgICAgICBvdXRwID0gZmlsdGVyKGZ1bmMsIGNscyhpbnApKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHAsIGV4cCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc2luc3RhbmNlKG91dHAsIGNscykpCisKKyAgICBkZWYgdGVzdF9nZXRhdHRyKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHN5cywgJ3N0ZG91dCcpIGlzIHN5cy5zdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0ciwgc3lzLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIsIHN5cywgMSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0cikKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBnZXRhdHRyLCBzeXMsIHVuaWNocihzeXMubWF4dW5pY29kZSkpCisKKyAgICBkZWYgdGVzdF9oYXNhdHRyKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHN5cywgJ3N0ZG91dCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2F0dHIsIHN5cywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNhdHRyKQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGhhc2F0dHIsIHN5cywgdW5pY2hyKHN5cy5tYXh1bmljb2RlKSkKKworICAgICAgICAjIENoZWNrIHRoYXQgaGFzYXR0ciBhbGxvd3MgU3lzdGVtRXhpdCBhbmQgS2V5Ym9hcmRJbnRlcnJ1cHRzIGJ5CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgd2hhdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIGhhc2F0dHIsIEEoKSwgImIiKQorICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHdoYXQpOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgaGFzYXR0ciwgQigpLCAiYiIpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBoYXNoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCgxKSwgaGFzaCgxTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCgxKSwgaGFzaCgxLjApKQorICAgICAgICBoYXNoKCdzcGFtJykKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKCdzcGFtJyksIGhhc2godW5pY29kZSgnc3BhbScpKSkKKyAgICAgICAgaGFzaCgoMCwxLDIsMykpCisgICAgICAgIGRlZiBmKCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCB7fSkKKyAgICAgICAgIyBCdWcgMTUzNjAyMTogQWxsb3cgaGFzaCB0byByZXR1cm4gbG9uZyBvYmplY3RzCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDIqKjEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaGFzaChYKCkpKSwgaW50KQorICAgICAgICBjbGFzcyBZKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDIqKjEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaGFzaChZKCkpKSwgaW50KQorICAgICAgICBjbGFzcyBaKGxvbmcpOgorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChaKDQyKSksIGhhc2goNDJMKSkKKworICAgIGRlZiB0ZXN0X2hleChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoMTYpLCAnMHgxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4KDE2TCksICcweDEwTCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4KC0xNiksICctMHgxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4KC0xNkwpLCAnLTB4MTBMJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoZXgsIHt9KQorCisgICAgZGVmIHRlc3RfaWQoc2VsZik6CisgICAgICAgIGlkKE5vbmUpCisgICAgICAgIGlkKDEpCisgICAgICAgIGlkKDFMKQorICAgICAgICBpZCgxLjApCisgICAgICAgIGlkKCdzcGFtJykKKyAgICAgICAgaWQoKDAsMSwyLDMpKQorICAgICAgICBpZChbMCwxLDIsM10pCisgICAgICAgIGlkKHsnc3BhbSc6IDEsICdlZ2dzJzogMiwgJ2hhbSc6IDN9KQorCisgICAgIyBUZXN0IGlucHV0KCkgbGF0ZXIsIHRvZ2V0aGVyIHdpdGggcmF3X2lucHV0CisKKyAgICAjIHRlc3RfaW50KCk6IHNlZSB0ZXN0X2ludC5weSBmb3IgaW50KCkgdGVzdHMuCisKKyAgICBkZWYgdGVzdF9pbnRlcm4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50ZXJuKQorICAgICAgICAjIFRoaXMgZmFpbHMgaWYgdGhlIHRlc3QgaXMgcnVuIHR3aWNlIHdpdGggYSBjb25zdGFudCBzdHJpbmcsCisgICAgICAgICMgdGhlcmVmb3JlIGFwcGVuZCB0aGUgcnVuIGNvdW50ZXIKKyAgICAgICAgcyA9ICJuZXZlciBpbnRlcm5lZCBiZWZvcmUgIiArIHN0cihudW1ydW5zKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJuKHMpIGlzIHMpCisgICAgICAgIHMyID0gcy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludGVybihzMikgaXMgcykKKworICAgICAgICAjIFN1YmNsYXNzZXMgb2Ygc3RyaW5nIGNhbid0IGJlIGludGVybmVkLCBiZWNhdXNlIHRoZXkKKyAgICAgICAgIyBwcm92aWRlIHRvbyBtdWNoIG9wcG9ydHVuaXR5IGZvciBpbnNhbmUgdGhpbmdzIHRvIGhhcHBlbi4KKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHRoZW0gaW4gdGhlIGludGVybmVkIGRpY3QgYW5kIGlmIHRoZXkgYXJlbid0CisgICAgICAgICMgYWN0dWFsbHkgaW50ZXJuZWQsIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlIHRoZSBhcHBlYXJhbmNlCisgICAgICAgICMgdGhhdCB0aGV5IGFyZSBieSBhbGxvd2luZyBpbnRlcm4oKSB0byBzdWNjZWVkLgorICAgICAgICBjbGFzcyBTKHN0cik6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEyMworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50ZXJuLCBTKCJhYmMiKSkKKworICAgICAgICAjIEl0J3Mgc3RpbGwgc2FmZSB0byBwYXNzIHRoZXNlIHN0cmluZ3MgdG8gcm91dGluZXMgdGhhdAorICAgICAgICAjIGNhbGwgaW50ZXJuIGludGVybmFsbHksIGUuZy4gUHlPYmplY3RfU2V0QXR0cigpLgorICAgICAgICBzID0gUygiYWJjIikKKyAgICAgICAgc2V0YXR0cihzLCBzLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocywgcyksIHMpCisKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXRlciwgNDIsIDQyKQorICAgICAgICBsaXN0cyA9IFsoIjEiLCAiMiIpLCBbIjEiLCAiMiJdLCAiMTIiXQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBsaXN0cy5hcHBlbmQodW5pY29kZSgiMTIiKSkKKyAgICAgICAgZm9yIGwgaW4gbGlzdHM6CisgICAgICAgICAgICBpID0gaXRlcihsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLm5leHQoKSwgJzEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLm5leHQoKSwgJzInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaS5uZXh0KQorCisgICAgZGVmIHRlc3RfaXNpbnN0YW5jZShzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBkID0gRCgpCisgICAgICAgIGUgPSBFKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYywgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGQsIEMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzaW5zdGFuY2UoZSwgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNpbnN0YW5jZShjLCBEKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc2luc3RhbmNlKCdmb28nLCBFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc2luc3RhbmNlLCBFLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc2luc3RhbmNlKQorCisgICAgZGVmIHRlc3RfaXNzdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBkID0gRCgpCisgICAgICAgIGUgPSBFKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoRCwgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMsIEMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzc3ViY2xhc3MoQywgRCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXNzdWJjbGFzcywgJ2ZvbycsIEUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXNzdWJjbGFzcywgRSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXNzdWJjbGFzcykKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oJzEyMycpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbigoKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKCgxLCAyLCAzLCA0KSksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFsxLCAyLCAzLCA0XSksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHt9KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeydhJzoxLCAnYic6IDJ9KSwgMikKKyAgICAgICAgY2xhc3MgQmFkU2VxOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsZW4sIEJhZFNlcSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgMikKKyAgICAgICAgY2xhc3MgQ2xhc3NpY1N0eWxlOiBwYXNzCisgICAgICAgIGNsYXNzIE5ld1N0eWxlKG9iamVjdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGxlbiwgQ2xhc3NpY1N0eWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCBOZXdTdHlsZSgpKQorCisgICAgZGVmIHRlc3RfbWFwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKE5vbmUsICdoZWxsbyB3b3JsZCcpLAorICAgICAgICAgICAgWydoJywnZScsJ2wnLCdsJywnbycsJyAnLCd3JywnbycsJ3InLCdsJywnZCddCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIG1hcChOb25lLCAnYWJjZCcsICdlZmcnKSwKKyAgICAgICAgICAgIFsoJ2EnLCAnZScpLCAoJ2InLCAnZicpLCAoJ2MnLCAnZycpLCAoJ2QnLCBOb25lKV0KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKE5vbmUsIHJhbmdlKDEwKSksCisgICAgICAgICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKGxhbWJkYSB4OiB4KngsIHJhbmdlKDEsNCkpLAorICAgICAgICAgICAgWzEsIDQsIDldCisgICAgICAgICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBtYXRoIGltcG9ydCBzcXJ0CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGRlZiBzcXJ0KHgpOgorICAgICAgICAgICAgICAgIHJldHVybiBwb3coeCwgMC41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKGxhbWJkYSB4OiBtYXAoc3FydCx4KSwgW1sxNiwgNF0sIFs4MSwgOV1dKSwKKyAgICAgICAgICAgIFtbNC4wLCAyLjBdLCBbOS4wLCAzLjBdXQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAobGFtYmRhIHgsIHk6IHgreSwgWzEsMywyXSwgWzksMSw0XSksCisgICAgICAgICAgICBbMTAsIDQsIDZdCisgICAgICAgICkKKworICAgICAgICBkZWYgcGx1cygqdik6CisgICAgICAgICAgICBhY2N1ID0gMAorICAgICAgICAgICAgZm9yIGkgaW4gdjogYWNjdSA9IGFjY3UgKyBpCisgICAgICAgICAgICByZXR1cm4gYWNjdQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKHBsdXMsIFsxLCAzLCA3XSksCisgICAgICAgICAgICBbMSwgMywgN10KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKHBsdXMsIFsxLCAzLCA3XSwgWzQsIDksIDJdKSwKKyAgICAgICAgICAgIFsxKzQsIDMrOSwgNysyXQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAocGx1cywgWzEsIDMsIDddLCBbNCwgOSwgMl0sIFsxLCAxLCAwXSksCisgICAgICAgICAgICBbMSs0KzEsIDMrOSsxLCA3KzIrMF0KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKE5vbmUsIFNxdWFyZXMoMTApKSwKKyAgICAgICAgICAgIFswLCAxLCA0LCA5LCAxNiwgMjUsIDM2LCA0OSwgNjQsIDgxXQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAoaW50LCBTcXVhcmVzKDEwKSksCisgICAgICAgICAgICBbMCwgMSwgNCwgOSwgMTYsIDI1LCAzNiwgNDksIDY0LCA4MV0KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKE5vbmUsIFNxdWFyZXMoMyksIFNxdWFyZXMoMikpLAorICAgICAgICAgICAgWygwLDApLCAoMSwxKSwgKDQsTm9uZSldCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIG1hcChtYXgsIFNxdWFyZXMoMyksIFNxdWFyZXMoMikpLAorICAgICAgICAgICAgWzAsIDEsIDRdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWFwLCBsYW1iZGEgeDogeCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKE5vbmUsIFs0Ml0pLCBbNDJdKQorICAgICAgICBjbGFzcyBCYWRTZXE6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFwLCBsYW1iZGEgeDogeCwgQmFkU2VxKCkpCisgICAgICAgIGRlZiBiYWRmdW5jKHgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbWFwLCBiYWRmdW5jLCByYW5nZSg1KSkKKworICAgIGRlZiB0ZXN0X21heChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoJzEyMzEyMycpLCAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIsIDMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwgMiwgMywgMSwgMiwgMykpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heChbMSwgMiwgMywgMSwgMiwgM10pLCAzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDJMLCAzLjApLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDFMLCAyLjAsIDMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgxLjAsIDIsIDNMKSwgM0wpCisKKyAgICAgICAgZm9yIHN0bXQgaW4gKAorICAgICAgICAgICAgIm1heChrZXk9aW50KSIsICAgICAgICAgICAgICAgICAjIG5vIGFyZ3MKKyAgICAgICAgICAgICJtYXgoMSwga2V5PWludCkiLCAgICAgICAgICAgICAgIyBzaW5nbGUgYXJnIG5vdCBpdGVyYWJsZQorICAgICAgICAgICAgIm1heCgxLCAyLCBrZXlzdG9uZT1pbnQpIiwgICAgICAjIHdyb25nIGtleXdvcmQKKyAgICAgICAgICAgICJtYXgoMSwgMiwga2V5PWludCwgYWJjPWludCkiLCAgIyB0d28gbWFueSBrZXl3b3JkcworICAgICAgICAgICAgIm1heCgxLCAyLCBrZXk9MSkiLCAgICAgICAgICAgICAjIGtleWZ1bmMgaXMgbm90IGNhbGxhYmxlCisgICAgICAgICAgICApOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4ZWMoc3RtdCkgaW4gZ2xvYmFscygpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKHN0bXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsKSwga2V5PW5lZyksIDEpICAgICAjIG9uZSBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KCgxLDIpLCBrZXk9bmVnKSwgMSkgICAgIyB0d28gZWxlbSBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgxLCAyLCBrZXk9bmVnKSwgMSkgICAgICMgdHdvIGVsZW1zCisKKyAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZHJhbmdlKDIwMCkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0KKyAgICAgICAga2V5cyA9IGRpY3QoKGVsZW0sIHJhbmRvbS5yYW5kcmFuZ2UoNTApKSBmb3IgZWxlbSBpbiBkYXRhKQorICAgICAgICBmID0ga2V5cy5fX2dldGl0ZW1fXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heChkYXRhLCBrZXk9ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkKHJldmVyc2VkKGRhdGEpLCBrZXk9ZilbLTFdKQorCisgICAgZGVmIHRlc3RfbWluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbignMTIzMTIzJyksICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oMSwgMiwgMyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCAyLCAzLCAxLCAyLCAzKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKFsxLCAyLCAzLCAxLCAyLCAzXSksIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oMSwgMkwsIDMuMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKDFMLCAyLjAsIDMpLCAxTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oMS4wLCAyLCAzTCksIDEuMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtaW4sIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtaW4sICgpKQorICAgICAgICBjbGFzcyBCYWRTZXE6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWluLCBCYWRTZXEoKSkKKyAgICAgICAgY2xhc3MgQmFkTnVtYmVyOgorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWluLCAoNDIsIEJhZE51bWJlcigpKSkKKworICAgICAgICBmb3Igc3RtdCBpbiAoCisgICAgICAgICAgICAibWluKGtleT1pbnQpIiwgICAgICAgICAgICAgICAgICMgbm8gYXJncworICAgICAgICAgICAgIm1pbigxLCBrZXk9aW50KSIsICAgICAgICAgICAgICAjIHNpbmdsZSBhcmcgbm90IGl0ZXJhYmxlCisgICAgICAgICAgICAibWluKDEsIDIsIGtleXN0b25lPWludCkiLCAgICAgICMgd3Jvbmcga2V5d29yZAorICAgICAgICAgICAgIm1pbigxLCAyLCBrZXk9aW50LCBhYmM9aW50KSIsICAjIHR3byBtYW55IGtleXdvcmRzCisgICAgICAgICAgICAibWluKDEsIDIsIGtleT0xKSIsICAgICAgICAgICAgICMga2V5ZnVuYyBpcyBub3QgY2FsbGFibGUKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhlYyhzdG10KSBpbiBnbG9iYWxzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoc3RtdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigoMSwpLCBrZXk9bmVnKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsMiksIGtleT1uZWcpLCAyKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKDEsIDIsIGtleT1uZWcpLCAyKSAgICAgIyB0d28gZWxlbXMKKworICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwKSBmb3IgaSBpbiByYW5nZSgxMDApXQorICAgICAgICBrZXlzID0gZGljdCgoZWxlbSwgcmFuZG9tLnJhbmRyYW5nZSg1MCkpIGZvciBlbGVtIGluIGRhdGEpCisgICAgICAgIGYgPSBrZXlzLl9fZ2V0aXRlbV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKGRhdGEsIGtleT1mKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQoZGF0YSwga2V5PWYpWzBdKQorCisgICAgZGVmIHRlc3RfbmV4dChzZWxmKToKKyAgICAgICAgaXQgPSBpdGVyKHJhbmdlKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCwgNDIpLCA0MikKKworICAgICAgICBjbGFzcyBJdGVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgICAgICBpdCA9IGl0ZXIoSXRlcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQsIDQyKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGl0ID0gZ2VuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCwgNDIpLCA0MikKKworICAgIGRlZiB0ZXN0X29jdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvY3QoMTAwKSwgJzAxNDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgxMDBMKSwgJzAxNDRMJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvY3QoLTEwMCksICctMDE0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2N0KC0xMDBMKSwgJy0wMTQ0TCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb2N0LCAoKSkKKworICAgIGRlZiB3cml0ZV90ZXN0ZmlsZShzZWxmKToKKyAgICAgICAgIyBOQiB0aGUgZmlyc3QgNCBsaW5lcyBhcmUgYWxzbyB1c2VkIHRvIHRlc3QgaW5wdXQgYW5kIHJhd19pbnB1dCwgYmVsb3cKKyAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcC53cml0ZSgnMSsxXG4nKQorICAgICAgICAgICAgZnAud3JpdGUoJzErMVxuJykKKyAgICAgICAgICAgIGZwLndyaXRlKCdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nJykKKyAgICAgICAgICAgIGZwLndyaXRlKCcuXG4nKQorICAgICAgICAgICAgZnAud3JpdGUoJ0RlYXIgSm9oblxuJykKKyAgICAgICAgICAgIGZwLndyaXRlKCdYWFgnKjEwMCkKKyAgICAgICAgICAgIGZwLndyaXRlKCdZWVknKjEwMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfdGVzdGZpbGUoKQorICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAncicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoNCksICcxKzFcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnMSsxXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgpLCAnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnRGVhcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDEwMCksICcgSm9oblxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZCgzMDApLCAnWFhYJyoxMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoMTAwMCksICdZWVknKjEwMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X29yZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQoJyAnKSwgMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCdBJyksIDY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZCgnYScpLCA5NykKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQodW5pY2hyKHN5cy5tYXh1bmljb2RlKSksIHN5cy5tYXh1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9yZCwgNDIpCisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3JkLCB1bmljb2RlKCIxMiIpKQorCisgICAgZGVmIHRlc3RfcG93KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygwLDApLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygwLDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygxLDApLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygxLDEpLCAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDIsMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDIsMTApLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLDIwKSwgMTAyNCoxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLDMwKSwgMTAyNCoxMDI0KjEwMjQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTIsMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0yLDEpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTIsMiksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0yLDMpLCAtOCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygwTCwwKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMEwsMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDFMLDApLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygxTCwxKSwgMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyTCwwKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMkwsMTApLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyTCwyMCksIDEwMjQqMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMkwsMzApLCAxMDI0KjEwMjQqMTAyNCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtMkwsMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0yTCwxKSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0yTCwyKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTJMLDMpLCAtOCkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygwLiwwKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KDAuLDEpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coMS4sMCksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygxLiwxKSwgMS4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coMi4sMCksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygyLiwxMCksIDEwMjQuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygyLiwyMCksIDEwMjQuKjEwMjQuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygyLiwzMCksIDEwMjQuKjEwMjQuKjEwMjQuKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KC0yLiwwKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KC0yLiwxKSwgLTIuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygtMi4sMiksIDQuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygtMi4sMyksIC04LikKKworICAgICAgICBmb3IgeCBpbiAyLCAyTCwgMi4wOgorICAgICAgICAgICAgZm9yIHkgaW4gMTAsIDEwTCwgMTAuMDoKKyAgICAgICAgICAgICAgICBmb3IgeiBpbiAxMDAwLCAxMDAwTCwgMTAwMC4wOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHgsIGZsb2F0KSBvciBcCisgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoeSwgZmxvYXQpIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZSh6LCBmbG9hdCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvdywgeCwgeSwgeikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KHgsIHksIHopLCAyNC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG93LCAtMSwgLTIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvdywgMSwgMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3csIC0xTCwgLTJMLCAzTCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93LCAxTCwgMkwsIDBMKQorICAgICAgICAjIFdpbGwgcmV0dXJuIGNvbXBsZXggaW4gMy4wOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3csIC0zNDIuNDMsIDAuMjM0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG93KQorCisgICAgZGVmIHRlc3RfcmFuZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMyksIFswLCAxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgxLCA1KSwgWzEsIDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDApLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgtMyksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEsIDEwLCAzKSwgWzEsIDQsIDddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDUsIC01LCAtMyksIFs1LCAyLCAtMSwgLTRdKQorCisgICAgICAgICMgTm93IHRlc3QgcmFuZ2UoKSB3aXRoIGxvbmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoLTIqKjEwMCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDAsIC0yKioxMDApLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgwLCAyKioxMDAsIC0xKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMCwgMioqMTAwLCAtMSksIFtdKQorCisgICAgICAgIGEgPSBsb25nKDEwICogc3lzLm1heGludCkKKyAgICAgICAgYiA9IGxvbmcoMTAwICogc3lzLm1heGludCkKKyAgICAgICAgYyA9IGxvbmcoNTAgKiBzeXMubWF4aW50KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoYSwgYSsyKSwgW2EsIGErMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoYSsyLCBhLCAtMUwpLCBbYSsyLCBhKzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKGErNCwgYSwgLTIpLCBbYSs0LCBhKzJdKQorCisgICAgICAgIHNlcSA9IHJhbmdlKGEsIGIsIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VxKSwgMikKKworICAgICAgICBzZXEgPSByYW5nZShiLCBhLCAtYykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQorCisgICAgICAgIHNlcSA9IHJhbmdlKC1hLCAtYiwgLWMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oLWEsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtYiwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmdlLCAxLCAyLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByYW5nZSwgYSwgYSArIDEsIGxvbmcoMCkpCisKKyAgICAgICAgY2xhc3MgYmFkemVybyhpbnQpOgorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgSW52YWxpZCBjbXAgbWFrZXMgdGhpcyB1bmhhc2hhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcmFuZ2UsIGEsIGEgKyAxLCBiYWR6ZXJvKDEpKQorCisgICAgICAgICMgUmVqZWN0IGZsb2F0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMS4sIDEuLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMWUxMDAsIDFlMTAxLCAxZTEwMSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDQyLCAic3BhbSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcmFuZ2UsIC1zeXMubWF4aW50LCBzeXMubWF4aW50KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByYW5nZSwgMCwgMipzeXMubWF4aW50KQorCisgICAgICAgIGJpZ251bSA9IDIqc3lzLm1heGludAorICAgICAgICBzbWFsbG51bSA9IDQyCisgICAgICAgICMgT2xkLXN0eWxlIHVzZXItZGVmaW5lZCBjbGFzcyB3aXRoIF9faW50X18gbWV0aG9kCisgICAgICAgIGNsYXNzIEkwOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgorICAgICAgICAgICAgICAgIHNlbGYubiA9IGludChuKQorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKEkwKGJpZ251bSksIEkwKGJpZ251bSArIDEpKSwgW2JpZ251bV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoSTAoc21hbGxudW0pLCBJMChzbWFsbG51bSArIDEpKSwgW3NtYWxsbnVtXSkKKworICAgICAgICAjIE5ldy1zdHlsZSB1c2VyLWRlZmluZWQgY2xhc3Mgd2l0aCBfX2ludF9fIG1ldGhvZAorICAgICAgICBjbGFzcyBJMShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgorICAgICAgICAgICAgICAgIHNlbGYubiA9IGludChuKQorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKEkxKGJpZ251bSksIEkxKGJpZ251bSArIDEpKSwgW2JpZ251bV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoSTEoc21hbGxudW0pLCBJMShzbWFsbG51bSArIDEpKSwgW3NtYWxsbnVtXSkKKworICAgICAgICAjIE5ldy1zdHlsZSB1c2VyLWRlZmluZWQgY2xhc3Mgd2l0aCBmYWlsaW5nIF9faW50X18gbWV0aG9kCisgICAgICAgIGNsYXNzIElYKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCByYW5nZSwgSVgoKSkKKworICAgICAgICAjIE5ldy1zdHlsZSB1c2VyLWRlZmluZWQgY2xhc3Mgd2l0aCBpbnZhbGlkIF9faW50X18gbWV0aG9kCisgICAgICAgIGNsYXNzIElOKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIm5vdCBhIG51bWJlciIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgSU4oKSkKKworICAgICAgICAjIEV4ZXJjaXNlIHZhcmlvdXMgY29tYmluYXRpb25zIG9mIGJhZCBhcmd1bWVudHMsIHRvIGNoZWNrCisgICAgICAgICMgcmVmY291bnRpbmcgbG9naWMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAuMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAwLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDAuMCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgMC4wLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAuMCwgMCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAuMCwgMC4wLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAuMCwgMS4wKQorCisKKworICAgIGRlZiB0ZXN0X2lucHV0X2FuZF9yYXdfaW5wdXQoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfdGVzdGZpbGUoKQorICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAncicpCisgICAgICAgIHNhdmVzdGRpbiA9IHN5cy5zdGRpbgorICAgICAgICBzYXZlc3Rkb3V0ID0gc3lzLnN0ZG91dCAjIEVhdHMgdGhlIGVjaG8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGluID0gZnAKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBCaXRCdWNrZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnB1dCgpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnB1dCgndGVzdGluZ1xuJyksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19pbnB1dCgpLCAnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfaW5wdXQoJ3Rlc3RpbmdcbicpLCAnRGVhciBKb2huJykKKworICAgICAgICAgICAgIyBTRiAxNTM1MTY1OiBkb24ndCBzZWdmYXVsdCBvbiBjbG9zZWQgc3RkaW4KKyAgICAgICAgICAgICMgc3lzLnN0ZG91dCBtdXN0IGJlIGEgcmVndWxhciBmaWxlIGZvciB0cmlnZ2VyaW5nCisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZXN0ZG91dAorICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGlucHV0KQorCisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gQml0QnVja2V0KCkKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IGNTdHJpbmdJTy5TdHJpbmdJTygiTlVMTFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5wdXQsIDQyLCA0MikKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IGNTdHJpbmdJTy5TdHJpbmdJTygiICAgICd3aGl0ZXNwYWNlJyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlucHV0KCksICd3aGl0ZXNwYWNlJykKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgaW5wdXQpCisKKyAgICAgICAgICAgICMgU0YgODc2MTc4OiBtYWtlIHN1cmUgaW5wdXQoKSByZXNwZWN0IGZ1dHVyZSBvcHRpb25zLgorICAgICAgICAgICAgc3lzLnN0ZGluID0gY1N0cmluZ0lPLlN0cmluZ0lPKCcxLzInKQorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBleGVjIGNvbXBpbGUoJ3ByaW50IGlucHV0KCknLCAndGVzdF9idWlsdGluX3RtcCcsICdleGVjJykKKyAgICAgICAgICAgIHN5cy5zdGRpbi5zZWVrKDAsIDApCisgICAgICAgICAgICBleGVjIGNvbXBpbGUoJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb247cHJpbnQgaW5wdXQoKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfYnVpbHRpbl90bXAnLCAnZXhlYycpCisgICAgICAgICAgICBzeXMuc3RkaW4uc2VlaygwLCAwKQorICAgICAgICAgICAgZXhlYyBjb21waWxlKCdwcmludCBpbnB1dCgpJywgJ3Rlc3RfYnVpbHRpbl90bXAnLCAnZXhlYycpCisgICAgICAgICAgICAjIFRoZSByZXN1bHQgd2UgZXhwZWN0IGRlcGVuZHMgb24gd2hldGhlciBuZXcgZGl2aXNpb24gc2VtYW50aWNzCisgICAgICAgICAgICAjIGFyZSBhbHJlYWR5IGluIGVmZmVjdC4KKyAgICAgICAgICAgIGlmIDEvMiA9PSAwOgorICAgICAgICAgICAgICAgICMgVGhpcyB0ZXN0IHdhcyBjb21waWxlZCB3aXRoIG9sZCBzZW1hbnRpY3MuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbJzAnLCAnMC41JywgJzAnXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgdGVzdCB3YXMgY29tcGlsZWQgd2l0aCBuZXcgc2VtYW50aWNzIChlLmcuLCAtUW5ldworICAgICAgICAgICAgICAgICMgd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbJzAuNScsICcwLjUnLCAnMC41J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLnN0ZG91dC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgIGRlbCBzeXMuc3Rkb3V0CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGlucHV0LCAncHJvbXB0JykKKyAgICAgICAgICAgIGRlbCBzeXMuc3RkaW4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgaW5wdXQsICdwcm9tcHQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZGluID0gc2F2ZXN0ZGluCisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZXN0ZG91dAorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X3JlZHVjZShzZWxmKToKKyAgICAgICAgYWRkID0gbGFtYmRhIHgsIHk6IHgreQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFsnYScsICdiJywgJ2MnXSwgJycpLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlZHVjZShhZGQsIFtbJ2EnLCAnYyddLCBbXSwgWydkJywgJ3cnXV0sIFtdKSwKKyAgICAgICAgICAgIFsnYScsJ2MnLCdkJywndyddCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UobGFtYmRhIHgsIHk6IHgqeSwgcmFuZ2UoMiw4KSwgMSksIDUwNDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZWR1Y2UobGFtYmRhIHgsIHk6IHgqeSwgcmFuZ2UoMiwyMSksIDFMKSwKKyAgICAgICAgICAgIDI0MzI5MDIwMDgxNzY2NDAwMDBMCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBTcXVhcmVzKDEwKSksIDI4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBTcXVhcmVzKDEwKSwgMCksIDI4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBTcXVhcmVzKDApLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIDQyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIDQyLCA0MiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCBOb25lLCByYW5nZSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIGFkZCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKDQyLCAiMSIpLCAiMSIpICMgZnVuYyBpcyBuZXZlciBjYWxsZWQgd2l0aCBvbmUgaXRlbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZSg0MiwgIiIsICIxIiksICIxIikgIyBmdW5jIGlzIG5ldmVyIGNhbGxlZCB3aXRoIG9uZSBpdGVtCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCA0MiwgKDQyLCA0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCBhZGQsIFtdKSAjIGFyZyAyIG11c3Qgbm90IGJlIGVtcHR5IHNlcXVlbmNlIHdpdGggbm8gaW5pdGlhbCB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgYWRkLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIGFkZCwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgW10sIE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFtdLCA0MiksIDQyKQorCisgICAgICAgIGNsYXNzIEJhZFNlcToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByZWR1Y2UsIDQyLCBCYWRTZXEoKSkKKworICAgIGRlZiB0ZXN0X3JlbG9hZChzZWxmKToKKyAgICAgICAgaW1wb3J0IG1hcnNoYWwKKyAgICAgICAgcmVsb2FkKG1hcnNoYWwpCisgICAgICAgIGltcG9ydCBzdHJpbmcKKyAgICAgICAgcmVsb2FkKHN0cmluZykKKyAgICAgICAgIyMgaW1wb3J0IHN5cworICAgICAgICAjIyBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgcmVsb2FkLCBzeXMpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoJycpLCAnXCdcJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigwKSwgJzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoMEwpLCAnMEwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoKCkpLCAnKCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoW10pLCAnW10nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoe30pLCAne30nKQorICAgICAgICBhID0gW10KKyAgICAgICAgYS5hcHBlbmQoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEpLCAnW1suLi5dXScpCisgICAgICAgIGEgPSB7fQorICAgICAgICBhWzBdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYSksICd7MDogey4uLn19JykKKworICAgIGRlZiB0ZXN0X3JvdW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDAuMCksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJvdW5kKDAuMCkpLCBmbG9hdCkgICMgV2lsbCBiZSBpbnQgaW4gMy4wLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEuMCksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxMC4wKSwgMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxMDAwMDAwMDAwLjApLCAxMDAwMDAwMDAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUyMCksIDFlMjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMS4wKSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMTAuMCksIC0xMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xMDAwMDAwMDAwLjApLCAtMTAwMDAwMDAwMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xZTIwKSwgLTFlMjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgwLjEpLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMS4xKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEwLjEpLCAxMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEwMDAwMDAwMDAuMSksIDEwMDAwMDAwMDAuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xLjEpLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xMC4xKSwgLTEwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTEwMDAwMDAwMDAuMSksIC0xMDAwMDAwMDAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgwLjkpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoOS45KSwgMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg5OTk5OTk5OTkuOSksIDEwMDAwMDAwMDAuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0wLjkpLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC05LjkpLCAtMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtOTk5OTk5OTk5LjkpLCAtMTAwMDAwMDAwMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTguMCwgLTEpLCAtMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJvdW5kKC04LjAsIC0xKSksIGZsb2F0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyb3VuZCgtOC4wLCAwKSksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocm91bmQoLTguMCwgMSkpLCBmbG9hdCkKKworICAgICAgICAjIENoZWNrIGhhbGYgcm91bmRpbmcgYmVoYXZpb3VyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDUuNSksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNi41KSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtNS41KSwgLTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTYuNSksIC03KQorCisgICAgICAgICMgQ2hlY2sgYmVoYXZpb3Igb24gaW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDgpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC04KSwgLTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyb3VuZCgwKSksIGZsb2F0KSAgIyBXaWxsIGJlIGludCBpbiAzLjAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyb3VuZCgtOCwgLTEpKSwgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyb3VuZCgtOCwgMCkpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJvdW5kKC04LCAxKSksIGZsb2F0KQorCisgICAgICAgICMgdGVzdCBuZXcga3dhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQobnVtYmVyPS04LjAsIG5kaWdpdHM9LTEpLCAtMTAuMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kKQorCisgICAgICAgICMgdGVzdCBnZW5lcmljIHJvdW5kaW5nIGRlbGVnYXRpb24gZm9yIHJlYWxzCisgICAgICAgIGNsYXNzIFRlc3RSb3VuZChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMjMuMAorCisgICAgICAgIGNsYXNzIFRlc3ROb1JvdW5kKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZChUZXN0Um91bmQoKSksIDIzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIFRlc3ROb1JvdW5kKCkpCisKKyAgICAgICAgdCA9IFRlc3ROb1JvdW5kKCkKKyAgICAgICAgdC5fX2Zsb2F0X18gPSBsYW1iZGEgKmFyZ3M6IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgdCwgMCkKKworICAgICMgU29tZSB2ZXJzaW9ucyBvZiBnbGliYyBmb3IgYWxwaGEgaGF2ZSBhIGJ1ZyB0aGF0IGFmZmVjdHMKKyAgICAjIGZsb2F0IC0+IGludGVnZXIgcm91bmRpbmcgKGZsb29yLCBjZWlsLCByaW50LCByb3VuZCkgZm9yCisgICAgIyB2YWx1ZXMgaW4gdGhlIHJhbmdlIFsyKio1MiwgMioqNTMpLiAgU2VlOgorICAgICMKKyAgICAjICAgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTM1MAorICAgICMKKyAgICAjIFdlIHNraXAgdGhpcyB0ZXN0IG9uIExpbnV4L2FscGhhIGlmIGl0IHdvdWxkIGZhaWwuCisgICAgbGludXhfYWxwaGEgPSAocGxhdGZvcm0uc3lzdGVtKCkuc3RhcnRzd2l0aCgnTGludXgnKSBhbmQKKyAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS5tYWNoaW5lKCkuc3RhcnRzd2l0aCgnYWxwaGEnKSkKKyAgICBzeXN0ZW1fcm91bmRfYnVnID0gcm91bmQoNWUxNSsxKSAhPSA1ZTE1KzEKKyAgICBAdW5pdHRlc3Quc2tpcElmKGxpbnV4X2FscGhhIGFuZCBzeXN0ZW1fcm91bmRfYnVnLAorICAgICAgICAgICAgICAgICAgICAgInRlc3Qgd2lsbCBmYWlsOyAgZmFpbHVyZSBpcyBwcm9iYWJseSBkdWUgdG8gYSAiCisgICAgICAgICAgICAgICAgICAgICAiYnVnZ3kgc3lzdGVtIHJvdW5kIGZ1bmN0aW9uIikKKyAgICBkZWYgdGVzdF9yb3VuZF9sYXJnZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTg2OTogaW50ZWdyYWwgZmxvYXRzIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNWUxNS0xKSwgNWUxNS0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDVlMTUpLCA1ZTE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDVlMTUrMSksIDVlMTUrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1ZTE1KzIpLCA1ZTE1KzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNWUxNSszKSwgNWUxNSszKQorCisgICAgZGVmIHRlc3Rfc2V0YXR0cihzZWxmKToKKyAgICAgICAgc2V0YXR0cihzeXMsICdzcGFtJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuc3BhbSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBzeXMsIDEsICdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyKQorCisgICAgZGVmIHRlc3Rfc3VtKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShbXSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHJhbmdlKDIsOCkpLCAyNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oaXRlcihyYW5nZSgyLDgpKSksIDI3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShTcXVhcmVzKDEwKSksIDI4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oaXRlcihTcXVhcmVzKDEwKSkpLCAyODUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKFtbMV0sIFsyXSwgWzNdXSwgW10pLCBbMSwgMiwgM10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdW0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VtLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdW0sIFsnYScsICdiJywgJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdW0sIFsnYScsICdiJywgJ2MnXSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VtLCBbWzFdLCBbMl0sIFszXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VtLCBbezI6M31dKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1bSwgW3syOjN9XSoyLCB7MjozfSkKKworICAgICAgICBjbGFzcyBCYWRTZXE6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VtLCBCYWRTZXEoKSkKKworICAgICAgICBlbXB0eSA9IFtdCisgICAgICAgIHN1bSgoW3hdIGZvciB4IGluIHJhbmdlKDEwKSksIGVtcHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVtcHR5LCBbXSkKKworICAgIGRlZiB0ZXN0X3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSgnJyksICB0eXBlKCcxMjMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0eXBlKCcnKSwgdHlwZSgoKSkpCisKKyAgICBkZWYgdGVzdF91bmljaHIoc2VsZik6CisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY2hyKDMyKSwgdW5pY29kZSgnICcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljaHIoNjUpLCB1bmljb2RlKCdBJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNocig5NyksIHVuaWNvZGUoJ2EnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgdW5pY2hyKHN5cy5tYXh1bmljb2RlKSwKKyAgICAgICAgICAgICAgICB1bmljb2RlKCdcXFUlMDh4JyAlIChzeXMubWF4dW5pY29kZSksICd1bmljb2RlLWVzY2FwZScpCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1bmljaHIsIHN5cy5tYXh1bmljb2RlKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHVuaWNocikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBWYWx1ZUVycm9yKSwgdW5pY2hyLCAyKiozMikKKworICAgICMgV2UgZG9uJ3Qgd2FudCBzZWxmIGluIHZhcnMoKSwgc28gdGhlc2UgYXJlIHN0YXRpYyBtZXRob2RzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldF92YXJzX2YwKCk6CisgICAgICAgIHJldHVybiB2YXJzKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X3ZhcnNfZjIoKToKKyAgICAgICAgQnVpbHRpblRlc3QuZ2V0X3ZhcnNfZjAoKQorICAgICAgICBhID0gMQorICAgICAgICBiID0gMgorICAgICAgICByZXR1cm4gdmFycygpCisKKyAgICBjbGFzcyBDX2dldF92YXJzKG9iamVjdCk6CisgICAgICAgIGRlZiBnZXREaWN0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHsnYSc6Mn0KKyAgICAgICAgX19kaWN0X18gPSBwcm9wZXJ0eShmZ2V0PWdldERpY3QpCisKKyAgICBkZWYgdGVzdF92YXJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCh2YXJzKCkpLCBzZXQoZGlyKCkpKQorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHZhcnMoc3lzKSksIHNldChkaXIoc3lzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfdmFyc19mMCgpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF92YXJzX2YyKCksIHsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdmFycywgNDIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHZhcnMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMoc2VsZi5DX2dldF92YXJzKCkpLCB7J2EnOjJ9KQorCisgICAgZGVmIHRlc3RfemlwKHNlbGYpOgorICAgICAgICBhID0gKDEsIDIsIDMpCisgICAgICAgIGIgPSAoNCwgNSwgNikKKyAgICAgICAgdCA9IFsoMSwgNCksICgyLCA1KSwgKDMsIDYpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcChhLCBiKSwgdCkKKyAgICAgICAgYiA9IFs0LCA1LCA2XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcChhLCBiKSwgdCkKKyAgICAgICAgYiA9ICg0LCA1LCA2LCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcChhLCBiKSwgdCkKKyAgICAgICAgY2xhc3MgSToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICBpZiBpIDwgMCBvciBpID4gMjogcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcChhLCBJKCkpLCB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoKltdKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgemlwLCBOb25lKQorICAgICAgICBjbGFzcyBHOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHppcCwgYSwgRygpKQorCisgICAgICAgICMgTWFrZSBzdXJlIHppcCBkb2Vzbid0IHRyeSB0byBhbGxvY2F0ZSBhIGJpbGxpb24gZWxlbWVudHMgZm9yIHRoZQorICAgICAgICAjIHJlc3VsdCBsaXN0IHdoZW4gb25lIG9mIGl0cyBhcmd1bWVudHMgZG9lc24ndCBzYXkgaG93IGxvbmcgaXQgaXMuCisgICAgICAgICMgQSBNZW1vcnlFcnJvciBpcyB0aGUgbW9zdCBsaWtlbHkgZmFpbHVyZSBtb2RlLgorICAgICAgICBjbGFzcyBTZXF1ZW5jZVdpdGhvdXRBTGVuZ3RoOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB6aXAoU2VxdWVuY2VXaXRob3V0QUxlbmd0aCgpLCB4cmFuZ2UoMioqMzApKSwKKyAgICAgICAgICAgIGxpc3QoZW51bWVyYXRlKHJhbmdlKDUpKSkKKyAgICAgICAgKQorCisgICAgICAgIGNsYXNzIEJhZFNlcToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICBpZiBpID09IDU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB6aXAsIEJhZFNlcSgpLCBCYWRTZXEoKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBiYXNpYyBtYWNoaW5lcnkgb2YgdGhlIGZvcm1hdCgpIGJ1aWx0aW4uICBEb24ndCB0ZXN0CisgICAgICAgICMgIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHZhcmlvdXMgZm9ybWF0dGVycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgzLCAnJyksICczJykKKworICAgICAgICAjIFJldHVybnMgc29tZSBjbGFzc2VzIHRvIHVzZSBmb3IgdmFyaW91cyB0ZXN0cy4gIFRoZXJlJ3MKKyAgICAgICAgIyAgYW4gb2xkLXN0eWxlIHZlcnNpb24sIGFuZCBhIG5ldy1zdHlsZSB2ZXJzaW9uCisgICAgICAgIGRlZiBjbGFzc2VzX25ldygpOgorICAgICAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmLngpICsgZm9ybWF0X3NwZWMKKyAgICAgICAgICAgIGNsYXNzIERlcml2ZWRGcm9tQShBKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGNsYXNzIFNpbXBsZShvYmplY3QpOiBwYXNzCisgICAgICAgICAgICBjbGFzcyBEZXJpdmVkRnJvbVNpbXBsZShTaW1wbGUpOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmLngpICsgZm9ybWF0X3NwZWMKKyAgICAgICAgICAgIGNsYXNzIERlcml2ZWRGcm9tU2ltcGxlMihEZXJpdmVkRnJvbVNpbXBsZSk6IHBhc3MKKyAgICAgICAgICAgIHJldHVybiBBLCBEZXJpdmVkRnJvbUEsIERlcml2ZWRGcm9tU2ltcGxlLCBEZXJpdmVkRnJvbVNpbXBsZTIKKworICAgICAgICAjIEluIDMuMCwgY2xhc3Nlc19jbGFzc2ljIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGNsYXNzZXNfbmV3CisgICAgICAgIGRlZiBjbGFzc2VzX2NsYXNzaWMoKToKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYueCkgKyBmb3JtYXRfc3BlYworICAgICAgICAgICAgY2xhc3MgRGVyaXZlZEZyb21BKEEpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgY2xhc3MgU2ltcGxlOiBwYXNzCisgICAgICAgICAgICBjbGFzcyBEZXJpdmVkRnJvbVNpbXBsZShTaW1wbGUpOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmLngpICsgZm9ybWF0X3NwZWMKKyAgICAgICAgICAgIGNsYXNzIERlcml2ZWRGcm9tU2ltcGxlMihEZXJpdmVkRnJvbVNpbXBsZSk6IHBhc3MKKyAgICAgICAgICAgIHJldHVybiBBLCBEZXJpdmVkRnJvbUEsIERlcml2ZWRGcm9tU2ltcGxlLCBEZXJpdmVkRnJvbVNpbXBsZTIKKworICAgICAgICBkZWYgY2xhc3NfdGVzdChBLCBEZXJpdmVkRnJvbUEsIERlcml2ZWRGcm9tU2ltcGxlLCBEZXJpdmVkRnJvbVNpbXBsZTIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoQSgzKSwgJ3NwZWMnKSwgJzNzcGVjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KERlcml2ZWRGcm9tQSg0KSwgJ3NwZWMnKSwgJzRzcGVjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KERlcml2ZWRGcm9tU2ltcGxlKDUpLCAnYWJjJyksICc1YWJjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KERlcml2ZWRGcm9tU2ltcGxlMigxMCksICdhYmNkZWYnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwYWJjZGVmJykKKworICAgICAgICBjbGFzc190ZXN0KCpjbGFzc2VzX25ldygpKQorICAgICAgICBjbGFzc190ZXN0KCpjbGFzc2VzX2NsYXNzaWMoKSkKKworICAgICAgICBkZWYgZW1wdHlfZm9ybWF0X3NwZWModmFsdWUpOgorICAgICAgICAgICAgIyB0ZXN0IHRoYXQ6CisgICAgICAgICAgICAjICBmb3JtYXQoeCwgJycpID09IHN0cih4KQorICAgICAgICAgICAgIyAgZm9ybWF0KHgpID09IHN0cih4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQodmFsdWUsICIiKSwgc3RyKHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHZhbHVlKSwgc3RyKHZhbHVlKSkKKworICAgICAgICAjIGZvciBidWlsdGluIHR5cGVzLCBmb3JtYXQoeCwgIiIpID09IHN0cih4KQorICAgICAgICBlbXB0eV9mb3JtYXRfc3BlYygxNyoqMTMpCisgICAgICAgIGVtcHR5X2Zvcm1hdF9zcGVjKDEuMCkKKyAgICAgICAgZW1wdHlfZm9ybWF0X3NwZWMoMy4xNDE1ZTEwNCkKKyAgICAgICAgZW1wdHlfZm9ybWF0X3NwZWMoLTMuMTQxNWUxMDQpCisgICAgICAgIGVtcHR5X2Zvcm1hdF9zcGVjKDMuMTQxNWUtMTA0KQorICAgICAgICBlbXB0eV9mb3JtYXRfc3BlYygtMy4xNDE1ZS0xMDQpCisgICAgICAgIGVtcHR5X2Zvcm1hdF9zcGVjKG9iamVjdCkKKyAgICAgICAgZW1wdHlfZm9ybWF0X3NwZWMoTm9uZSkKKworICAgICAgICAjIFR5cGVFcnJvciBiZWNhdXNlIHNlbGYuX19mb3JtYXRfXyByZXR1cm5zIHRoZSB3cm9uZyB0eXBlCisgICAgICAgIGNsYXNzIEJhZEZvcm1hdFJlc3VsdDoKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMS4wCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZm9ybWF0LCBCYWRGb3JtYXRSZXN1bHQoKSwgIiIpCisKKyAgICAgICAgIyBUeXBlRXJyb3IgYmVjYXVzZSBmb3JtYXRfc3BlYyBpcyBub3QgdW5pY29kZSBvciBzdHIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmb3JtYXQsIG9iamVjdCgpLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZvcm1hdCwgb2JqZWN0KCksIG9iamVjdCgpKQorCisgICAgICAgICMgdGVzdHMgZm9yIG9iamVjdC5fX2Zvcm1hdF9fIHJlYWxseSBiZWxvbmcgZWxzZXdoZXJlLCBidXQKKyAgICAgICAgIyAgdGhlcmUncyBubyBnb29kIHBsYWNlIHRvIHB1dCB0aGVtCisgICAgICAgIHggPSBvYmplY3QoKS5fX2Zvcm1hdF9fKCcnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5zdGFydHN3aXRoKCc8b2JqZWN0IG9iamVjdCBhdCcpKQorCisgICAgICAgICMgZmlyc3QgYXJndW1lbnQgdG8gb2JqZWN0Ll9fZm9ybWF0X18gbXVzdCBiZSBzdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvYmplY3QoKS5fX2Zvcm1hdF9fLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9iamVjdCgpLl9fZm9ybWF0X18sIG9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9iamVjdCgpLl9fZm9ybWF0X18sIE5vbmUpCisKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIElzc3VlICM3OTk0OiBvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMKKyAgICAgICAgIyAgcGVuZGluZyBkZXByZWNhdGVkCisgICAgICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfZm9ybWF0X3N0cmluZyhvYmosIGZtdF9zdHIsIHNob3VsZF9yYWlzZV93YXJuaW5nKToKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIGZvcm1hdChvYmosIGZtdF9zdHIpCisgICAgICAgICAgICBpZiBzaG91bGRfcmFpc2Vfd2FybmluZzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod1swXS5tZXNzYWdlLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLCBzdHIod1swXS5tZXNzYWdlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisKKyAgICAgICAgZm10X3N0cnMgPSBbJycsICdzJywgdScnLCB1J3MnXQorCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmbXRfc3RyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0KCcnLCBmbXRfc3RyKQorCisgICAgICAgIGZvciBmbXRfc3RyIGluIGZtdF9zdHJzOgorICAgICAgICAgICAgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcoQSgpLCBmbXRfc3RyLCBGYWxzZSkKKworICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBmb3IgY2xzIGluIFtvYmplY3QsIEIsIENdOgorICAgICAgICAgICAgZm9yIGZtdF9zdHIgaW4gZm10X3N0cnM6CisgICAgICAgICAgICAgICAgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcoY2xzKCksIGZtdF9zdHIsIGxlbihmbXRfc3RyKSAhPSAwKQorICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2UgY2FuIHRha2UgYSBzdWJjbGFzcyBvZiBzdHIgYXMgYSBmb3JtYXQgc3BlYworICAgICAgICBjbGFzcyBEZXJpdmVkRnJvbVN0cihzdHIpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDAsIERlcml2ZWRGcm9tU3RyKCcxMCcpKSwgJyAgICAgICAgIDAnKQorCisgICAgZGVmIHRlc3RfYmluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbigwKSwgJzBiMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKDEpLCAnMGIxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oLTEpLCAnLTBiMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKDIqKjY1KSwgJzBiMScgKyAnMCcgKiA2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oMioqNjUtMSksICcwYicgKyAnMScgKiA2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oLSgyKio2NSkpLCAnLTBiMScgKyAnMCcgKiA2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oLSgyKio2NS0xKSksICctMGInICsgJzEnICogNjUpCisKKyAgICBkZWYgdGVzdF9ieXRlYXJyYXlfdHJhbnNsYXRlKHNlbGYpOgorICAgICAgICB4ID0gYnl0ZWFycmF5KCJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB4LnRyYW5zbGF0ZSwgIjEiLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHgudHJhbnNsYXRlLCAiMSIqMjU2LCAxKQorCitjbGFzcyBUZXN0U29ydGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBkYXRhID0gcmFuZ2UoMTAwKQorICAgICAgICBjb3B5ID0gZGF0YVs6XQorICAgICAgICByYW5kb20uc2h1ZmZsZShjb3B5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNvcnRlZChjb3B5KSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhLCBjb3B5KQorCisgICAgICAgIGRhdGEucmV2ZXJzZSgpCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGNvcHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc29ydGVkKGNvcHksIGNtcD1sYW1iZGEgeCwgeTogY21wKHkseCkpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGEsIGNvcHkpCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGNvcHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc29ydGVkKGNvcHksIGtleT1sYW1iZGEgeDogLXgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGEsIGNvcHkpCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGNvcHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc29ydGVkKGNvcHksIHJldmVyc2U9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YSwgY29weSkKKworICAgIGRlZiB0ZXN0X2lucHV0dHlwZXMoc2VsZik6CisgICAgICAgIHMgPSAnYWJyYWNhZGFicmEnCisgICAgICAgIHR5cGVzID0gW2xpc3QsIHR1cGxlXQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICB0eXBlcy5pbnNlcnQoMCwgdW5pY29kZSkKKyAgICAgICAgZm9yIFQgaW4gdHlwZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzKSwgc29ydGVkKFQocykpKQorCisgICAgICAgIHMgPSAnJy5qb2luKGRpY3QuZnJvbWtleXMocykua2V5cygpKSAgIyB1bmlxdWUgbGV0dGVycyBvbmx5CisgICAgICAgIHR5cGVzID0gW3NldCwgZnJvemVuc2V0LCBsaXN0LCB0dXBsZSwgZGljdC5mcm9ta2V5c10KKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgdHlwZXMuaW5zZXJ0KDAsIHVuaWNvZGUpCisgICAgICAgIGZvciBUIGluIHR5cGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocyksIHNvcnRlZChUKHMpKSkKKworICAgIGRlZiB0ZXN0X2JhZGRlY29yYXRvcihzZWxmKToKKyAgICAgICAgZGF0YSA9ICdUaGUgcXVpY2sgQnJvd24gZm94IEp1bXBlZCBvdmVyIFRoZSBsYXp5IERvZycuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNvcnRlZCwgZGF0YSwgTm9uZSwgbGFtYmRhIHgseTogMCkKKworZGVmIF9ydW5fdW5pdHRlc3QoKmFyZ3MpOgorICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICgiLisgbm90IHN1cHBvcnRlZCBpbiAzLngiLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCIuKyBpcyByZW5hbWVkIHRvIGltcC5yZWxvYWQiLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCJjbGFzc2ljIGludCBkaXZpc2lvbiIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICBydW5fdW5pdHRlc3QoKmFyZ3MpCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X2NsYXNzZXMgPSAoQnVpbHRpblRlc3QsIFRlc3RTb3J0ZWQpCisKKyAgICBfcnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIF9ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludCBjb3VudHMKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ieXRlcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OGI5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQpAQCAtMCwwICsxLDExNDAgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIHRoZSBieXRlcyBhbmQgYnl0ZWFycmF5IHR5cGVzLgorCitYWFggVGhpcyBpcyBhIG1lc3MuICBDb21tb24gdGVzdHMgc2hvdWxkIGJlIG1vdmVkIHRvIGJ1ZmZlcl90ZXN0cy5weSwKK3doaWNoIGl0c2VsZiBvdWdodCB0byBiZSB1bmlmaWVkIHdpdGggc3RyaW5nX3Rlc3RzLnB5IChhbmQgdGhlIGxhdHRlcgorc2hvdWxkIGJlIG1vZGVybml6ZWQpLgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgY29weQoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHBpY2tsZQoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAoraW1wb3J0IHRlc3Quc3RyaW5nX3Rlc3RzCitpbXBvcnQgdGVzdC5idWZmZXJfdGVzdHMKKworCitpZiBzeXMuZmxhZ3MuYnl0ZXNfd2FybmluZzoKKyAgICBkZWYgY2hlY2tfYnl0ZXNfd2FybmluZ3MoZnVuYyk6CisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgd2l0aCB0ZXN0LnRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIEJ5dGVzV2FybmluZykpOgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3KQorICAgICAgICByZXR1cm4gd3JhcHBlcgorZWxzZToKKyAgICAjIG5vLW9wCisgICAgZGVmIGNoZWNrX2J5dGVzX3dhcm5pbmdzKGZ1bmMpOgorICAgICAgICByZXR1cm4gZnVuYworCisKK2NsYXNzIEluZGV4YWJsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MCk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKworY2xhc3MgQmFzZUJ5dGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShiKSwgc2VsZi50eXBlMnRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2NsYXNzX18sIHNlbGYudHlwZTJ0ZXN0KQorCisgICAgZGVmIHRlc3RfZW1wdHlfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYlsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBiW3N5cy5tYXhpbnRdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJbc3lzLm1heGludCsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBiWzEwKioxMDBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJbLTFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJbLTJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJbLXN5cy5tYXhpbnRdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJbLXN5cy5tYXhpbnQtMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYlstc3lzLm1heGludC0yXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBiWy0xMCoqMTAwXSkKKworICAgIGRlZiB0ZXN0X2Zyb21fbGlzdChzZWxmKToKKyAgICAgICAgaW50cyA9IGxpc3QocmFuZ2UoMjU2KSkKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGkgZm9yIGkgaW4gaW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBpbnRzKQorCisgICAgZGVmIHRlc3RfZnJvbV9pbmRleChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KFtJbmRleGFibGUoKSwgSW5kZXhhYmxlKDEpLCBJbmRleGFibGUoMjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleGFibGUoMjU1KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgWzAsIDEsIDI1NCwgMjU1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFtJbmRleGFibGUoLTEpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFtJbmRleGFibGUoMjU2KV0pCisKKyAgICBkZWYgdGVzdF9mcm9tX3NzaXplKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KDApLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoMSksIGInXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoNSksIGInXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgLTEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdCgnMCcsICdhc2NpaScpLCBiJzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInMCcpLCBiJzAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLnR5cGUydGVzdCwgc3lzLm1heHNpemUgKyAxKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfdHlwZV9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIDAuMCkKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBhbGxvd2VkIGluIDIueAorICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgWyIwIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFswLjBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbTm9uZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFtDKCldKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfdmFsdWVfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFstc3lzLm1heGludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbLXN5cy5tYXhpbnQtMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbLXN5cy5tYXhpbnQtMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbLTEwKioxMDBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgWzI1Nl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbMjU3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFtzeXMubWF4aW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFtzeXMubWF4aW50KzFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgWzEwKioxMDBdKQorCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKKyAgICAgICAgYjEgPSBzZWxmLnR5cGUydGVzdChbMSwgMiwgM10pCisgICAgICAgIGIyID0gc2VsZi50eXBlMnRlc3QoWzEsIDIsIDNdKQorICAgICAgICBiMyA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAzXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIxLCBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIyICE9IGIzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjEgPD0gYjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiMSA8PSBiMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIxIDwgIGIzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjEgPj0gYjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiMyA+PSBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIzID4gIGIyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYjEgIT0gYjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYjIgPT0gYjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYjEgPiAgYjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYjEgPiAgYjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYjEgPj0gYjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYjEgPCAgYjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYjMgPCAgYjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYjMgPD0gYjIpCisKKyAgICBAY2hlY2tfYnl0ZXNfd2FybmluZ3MKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvX3N0cihzZWxmKToKKyAgICAgICAgIyBCeXRlIGNvbXBhcmlzb25zIHdpdGggdW5pY29kZSBzaG91bGQgYWx3YXlzIGZhaWwhCisgICAgICAgICMgVGVzdCB0aGlzIGZvciBhbGwgZXhwZWN0ZWQgYnl0ZSBvcmRlcnMgYW5kIFVuaWNvZGUgY2hhcmFjdGVyIHNpemVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiJcMGFcMGJcMGMiKSA9PSB1ImFiYyIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiXDBcMFwwYVwwXDBcMGJcMFwwXDBjIikgPT0gdSJhYmMiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiImFcMGJcMGNcMCIpID09IHUiYWJjIiwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiJhXDBcMFwwYlwwXDBcMGNcMFwwXDAiKSA9PSB1ImFiYyIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KCkgPT0gdW5pY29kZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdCgpICE9IHVuaWNvZGUoKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3JldmVyc2VkKHNlbGYpOgorICAgICAgICBpbnB1dCA9IGxpc3QobWFwKG9yZCwgIkhlbGxvIikpCisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChpbnB1dCkKKyAgICAgICAgb3V0cHV0ID0gbGlzdChyZXZlcnNlZChiKSkKKyAgICAgICAgaW5wdXQucmV2ZXJzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBpbnB1dCkKKworICAgIGRlZiB0ZXN0X2dldHNsaWNlKHNlbGYpOgorICAgICAgICBkZWYgYnkocyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlMnRlc3QobWFwKG9yZCwgcykpCisgICAgICAgIGIgPSBieSgiSGVsbG8sIHdvcmxkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjVdLCBieSgiSGVsbG8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzE6NV0sIGJ5KCJlbGxvIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls1OjddLCBieSgiLCAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzc6XSwgYnkoIndvcmxkIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls3OjEyXSwgYnkoIndvcmxkIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls3OjEwMF0sIGJ5KCJ3b3JsZCIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6LTddLCBieSgiSGVsbG8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWy0xMTotN10sIGJ5KCJlbGxvIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlstNzotNV0sIGJ5KCIsICIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbLTU6XSwgYnkoIndvcmxkIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlstNToxMl0sIGJ5KCJ3b3JsZCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbLTU6MTAwXSwgYnkoIndvcmxkIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlstMTAwOjVdLCBieSgiSGVsbG8iKSkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGVkX2dldHNsaWNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZXh0ZW5kZWQgc2xpY2luZyBieSBjb21wYXJpbmcgd2l0aCBsaXN0IHNsaWNpbmcuCisgICAgICAgIEwgPSBsaXN0KHJhbmdlKDI1NSkpCisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChMKQorICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDE5LCAxMDAsIC0xLCAtMiwgLTMxLCAtMTAwKQorICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKKyAgICAgICAgICAgIGZvciBzdG9wIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgIyBTa2lwIHN0ZXAgMCAoaW52YWxpZCkKKyAgICAgICAgICAgICAgICBmb3Igc3RlcCBpbiBpbmRpY2VzWzE6XToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiW3N0YXJ0OnN0b3A6c3RlcF0sIHNlbGYudHlwZTJ0ZXN0KExbc3RhcnQ6c3RvcDpzdGVwXSkpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc2FtcGxlID0gdSJIZWxsbyB3b3JsZFxuXHUxMjM0XHU1Njc4XHU5YWJjXHVkZWYwIgorICAgICAgICBmb3IgZW5jIGluICgidXRmOCIsICJ1dGYxNiIpOgorICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KHNhbXBsZSwgZW5jKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBzZWxmLnR5cGUydGVzdChzYW1wbGUuZW5jb2RlKGVuYykpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBzYW1wbGUsICJsYXRpbjEiKQorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3Qoc2FtcGxlLCAibGF0aW4xIiwgImlnbm9yZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgc2VsZi50eXBlMnRlc3Qoc2FtcGxlWzotNF0sICJ1dGYtOCIpKQorCisgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgorICAgICAgICBzYW1wbGUgPSB1IkhlbGxvIHdvcmxkXG5cdTEyMzRcdTU2NzhcdTlhYmNcZGVmMFxkZWYwIgorICAgICAgICBmb3IgZW5jIGluICgidXRmOCIsICJ1dGYxNiIpOgorICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KHNhbXBsZSwgZW5jKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRlY29kZShlbmMpLCBzYW1wbGUpCisgICAgICAgIHNhbXBsZSA9IHUiSGVsbG8gd29ybGRcblx4ODBceDgxXHhmZVx4ZmYiCisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzYW1wbGUsICJsYXRpbjEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGIuZGVjb2RlLCAidXRmOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kZWNvZGUoInV0ZjgiLCAiaWdub3JlIiksICJIZWxsbyB3b3JsZFxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRlY29kZShlcnJvcnM9Imlnbm9yZSIsIGVuY29kaW5nPSJ1dGY4IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvIHdvcmxkXG4iKQorCisgICAgZGVmIHRlc3RfZnJvbV9pbnQoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdCgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIHNlbGYudHlwZTJ0ZXN0KCkpCisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBzZWxmLnR5cGUydGVzdChbMF0qMTApKQorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoMTAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgc2VsZi50eXBlMnRlc3QoWzBdKjEwMDAwKSkKKworICAgIGRlZiB0ZXN0X2NvbmNhdChzZWxmKToKKyAgICAgICAgYjEgPSBzZWxmLnR5cGUydGVzdChiImFiYyIpCisgICAgICAgIGIyID0gc2VsZi50eXBlMnRlc3QoYiJkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIxICsgYjIsIGIiYWJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiMSArIGJ5dGVzKGIiZGVmIiksIGIiYWJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImRlZiIpICsgYjEsIGIiZGVmYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGIxICsgdSJkZWYiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdSJhYmMiICsgYjIpCisKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIGZvciBiIGluIGIiYWJjIiwgc2VsZi50eXBlMnRlc3QoYiJhYmMiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiAqIDMsIGIiYWJjYWJjYWJjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiAqIDAsIGIiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiAqIC0xLCBiIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYiAqIDMuMTQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogMy4xNCAqIGIpCisgICAgICAgICAgICAjIFhYWCBTaG91bGRuJ3QgYnl0ZXMgYW5kIGJ5dGVhcnJheSBhZ3JlZSBvbiB3aGF0IHRvIHJhaXNlPworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogYiAqIHN5cy5tYXhzaXplKQorCisgICAgZGVmIHRlc3RfcmVwZWF0XzFjaGFyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIneCcpKjEwMCwgc2VsZi50eXBlMnRlc3QoW29yZCgneCcpXSoxMDApKQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3JkKCdhJyksIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW50KG9yZCgnYScpKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigyMDAsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogMzAwIGluIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogLTEgaW4gYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IE5vbmUgaW4gYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGZsb2F0KG9yZCgnYScpKSBpbiBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdSJhIiBpbiBiKQorICAgICAgICBmb3IgZiBpbiBieXRlcywgYnl0ZWFycmF5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJhIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJiIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJjIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJhYiIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiYmMiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImFiYyIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmKGIiYWMiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZihiImQiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZihiImRhYiIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmKGIiYWJkIiksIGIpCisKKyAgICBkZWYgdGVzdF9mcm9taGV4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdC5mcm9taGV4KHUnJyksIHNlbGYudHlwZTJ0ZXN0KCkpCisgICAgICAgIGIgPSBieXRlYXJyYXkoWzB4MWEsIDB4MmIsIDB4MzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScxYTJCMzAnKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdC5mcm9taGV4KHUnICAxQSAyQiAgMzAgICAnKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdC5mcm9taGV4KHUnMDAwMCcpLCBiJ1wwXDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4LCB1J2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4LCB1J3J0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCwgdScxYSBiIGNkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCwgdSdceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCwgdScxMiAgIFx4MDAgICAzNCcpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbihbXSksIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4oW2IiIl0pLCBiIiIpCisgICAgICAgIGZvciBsc3QgaW4gW1tiImFiYyJdLCBbYiJhIiwgYiJiYyJdLCBbYiJhYiIsIGIiYyJdLCBbYiJhIiwgYiJiIiwgYiJjIl1dOgorICAgICAgICAgICAgbHN0ID0gbGlzdChtYXAoc2VsZi50eXBlMnRlc3QsIGxzdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbihsc3QpLCBiImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbih0dXBsZShsc3QpKSwgYiJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4oaXRlcihsc3QpKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiLiIpLmpvaW4oW2IiYWIiLCBiImNkIl0pLCBiImFiLmNkIikKKyAgICAgICAgIyBYWFggbW9yZS4uLgorCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmNvdW50KGInaScpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY291bnQoYidzcycpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY291bnQoYid3JyksIDApCisKKyAgICBkZWYgdGVzdF9zdGFydHN3aXRoKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50eXBlMnRlc3QoKS5zdGFydHN3aXRoKGIiYW55dGhpbmciKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuc3RhcnRzd2l0aChiImhlbGxvIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLnN0YXJ0c3dpdGgoYiJoZWwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuc3RhcnRzd2l0aChiImgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiLnN0YXJ0c3dpdGgoYiJoZWxsb3ciKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiLnN0YXJ0c3dpdGgoYiJoYSIpKQorCisgICAgZGVmIHRlc3RfZW5kc3dpdGgoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShieXRlYXJyYXkoKS5lbmRzd2l0aChiImFueXRoaW5nIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmVuZHN3aXRoKGIiaGVsbG8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZW5kc3dpdGgoYiJsbG8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZW5kc3dpdGgoYiJvIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5lbmRzd2l0aChiIndoZWxsbyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIuZW5kc3dpdGgoYiJubyIpKQorCisgICAgZGVmIHRlc3RfZmluZChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZmluZChiJ3NzJyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5maW5kKGInc3MnLCAzKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmZpbmQoYidzcycsIDEsIDcpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZmluZChiJ3NzJywgMSwgMyksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZmluZChiJ3cnKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5maW5kKGInbWlzc2lzc2lwcGlhbicpLCAtMSkKKworICAgIGRlZiB0ZXN0X3JmaW5kKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZmluZChiJ3NzJyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZmluZChiJ3NzJywgMyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZmluZChiJ3NzJywgMCwgNiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZmluZChiJ3cnKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZmluZChiJ21pc3Npc3NpcHBpYW4nKSwgLTEpCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInd29ybGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuaW5kZXgoYid3JyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5pbmRleChiJ29ybCcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiLmluZGV4LCBiJ3dvcm0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiLmluZGV4LCBiJ2xkbycpCisKKyAgICBkZWYgdGVzdF9yaW5kZXgoc2VsZik6CisgICAgICAgICMgWFhYIGNvdWxkIGJlIG1vcmUgcmlnb3JvdXMKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInd29ybGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucmluZGV4KGIndycpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucmluZGV4KGInb3JsJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGIucmluZGV4LCBiJ3dvcm0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiLnJpbmRleCwgYidsZG8nKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucmVwbGFjZShiJ2knLCBiJ2EnKSwgYidtYXNzYXNzYXBwYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZXBsYWNlKGInc3MnLCBiJ3gnKSwgYidtaXhpeGlwcGknKQorCisgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KGInaScpLCBbYidtJywgYidzcycsIGInc3MnLCBiJ3BwJywgYicnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KGInc3MnKSwgW2InbWknLCBiJ2knLCBiJ2lwcGknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KGIndycpLCBbYl0pCisKKyAgICBkZWYgdGVzdF9zcGxpdF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBmb3IgYiBpbiAoYicgIGFyZiAgYmFyZiAgJywgYidhcmZcdGJhcmYnLCBiJ2FyZlxuYmFyZicsIGInYXJmXHJiYXJmJywKKyAgICAgICAgICAgICAgICAgIGInYXJmXGZiYXJmJywgYidhcmZcdmJhcmYnKToKKyAgICAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KCksIFtiJ2FyZicsIGInYmFyZiddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KE5vbmUpLCBbYidhcmYnLCBiJ2JhcmYnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zcGxpdChOb25lLCAyKSwgW2InYXJmJywgYidiYXJmJ10pCisgICAgICAgIGZvciBiIGluIChiJ2FceDFDYicsIGInYVx4MURiJywgYidhXHgxRWInLCBiJ2FceDFGYicpOgorICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoKSwgW2JdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInICBhICBiYiAgYyAgJykuc3BsaXQoTm9uZSwgMCksIFtiJ2EgIGJiICBjICAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJyAgYSAgYmIgIGMgICcpLnNwbGl0KE5vbmUsIDEpLCBbYidhJywgYidiYiAgYyAgJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYicgIGEgIGJiICBjICAnKS5zcGxpdChOb25lLCAyKSwgW2InYScsIGInYmInLCBiJ2MgICddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInICBhICBiYiAgYyAgJykuc3BsaXQoTm9uZSwgMyksIFtiJ2EnLCBiJ2JiJywgYidjJ10pCisKKyAgICBkZWYgdGVzdF9zcGxpdF9zdHJpbmdfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QoYidhIGInKS5zcGxpdCwgdScgJykKKworICAgIGRlZiB0ZXN0X3NwbGl0X3VuaWNvZGV3aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYiJceDA5XHgwQVx4MEJceDBDXHgwRFx4MUNceDFEXHgxRVx4MUYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoKSwgW2InXHgxY1x4MWRceDFlXHgxZiddKQorCisgICAgZGVmIHRlc3RfcnNwbGl0KHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3BsaXQoYidpJyksIFtiJ20nLCBiJ3NzJywgYidzcycsIGIncHAnLCBiJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KGInc3MnKSwgW2InbWknLCBiJ2knLCBiJ2lwcGknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzcGxpdChiJ3cnKSwgW2JdKQorCisgICAgZGVmIHRlc3RfcnNwbGl0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIGZvciBiIGluIChiJyAgYXJmICBiYXJmICAnLCBiJ2FyZlx0YmFyZicsIGInYXJmXG5iYXJmJywgYidhcmZccmJhcmYnLAorICAgICAgICAgICAgICAgICAgYidhcmZcZmJhcmYnLCBiJ2FyZlx2YmFyZicpOgorICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KCksIFtiJ2FyZicsIGInYmFyZiddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzcGxpdChOb25lKSwgW2InYXJmJywgYidiYXJmJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KE5vbmUsIDIpLCBbYidhcmYnLCBiJ2JhcmYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJyAgYSAgYmIgIGMgICcpLnJzcGxpdChOb25lLCAwKSwgW2InICBhICBiYiAgYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInICBhICBiYiAgYyAgJykucnNwbGl0KE5vbmUsIDEpLCBbYicgIGEgIGJiJywgYidjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYicgIGEgIGJiICBjICAnKS5yc3BsaXQoTm9uZSwgMiksIFtiJyAgYScsIGInYmInLCBiJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJyAgYSAgYmIgIGMgICcpLnJzcGxpdChOb25lLCAzKSwgW2InYScsIGInYmInLCBiJ2MnXSkKKworICAgIGRlZiB0ZXN0X3JzcGxpdF9zdHJpbmdfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QoYidhIGInKS5yc3BsaXQsIHUnICcpCisKKyAgICBkZWYgdGVzdF9yc3BsaXRfdW5pY29kZXdoaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiIlx4MDlceDBBXHgwQlx4MENceDBEXHgxQ1x4MURceDFFXHgxRiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3BsaXQoKSwgW2InXHgxY1x4MWRceDFlXHgxZiddKQorCisgICAgZGVmIHRlc3RfcGFydGl0aW9uKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5wYXJ0aXRpb24oYidzcycpLCAoYidtaScsIGInc3MnLCBiJ2lzc2lwcGknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnBhcnRpdGlvbihiJ3cnKSwgKGInbWlzc2lzc2lwcGknLCBiJycsIGInJykpCisKKyAgICBkZWYgdGVzdF9ycGFydGl0aW9uKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ycGFydGl0aW9uKGInc3MnKSwgKGInbWlzc2knLCBiJ3NzJywgYidpcHBpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ycGFydGl0aW9uKGInaScpLCAoYidtaXNzaXNzaXBwJywgYidpJywgYicnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJwYXJ0aXRpb24oYid3JyksIChiJycsIGInJywgYidtaXNzaXNzaXBwaScpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZm9yIGIgaW4gYiIiLCBiImEiLCBiImFiYyIsIGIiXHhmZmFiXHg4MCIsIGIiXDBcMFwzNzdcMFwwIjoKKyAgICAgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYikKKyAgICAgICAgICAgICAgICBwcyA9IHBpY2tsZS5kdW1wcyhiLCBwcm90bykKKyAgICAgICAgICAgICAgICBxID0gcGlja2xlLmxvYWRzKHBzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgcSkKKworICAgIGRlZiB0ZXN0X3N0cmlwKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zdHJpcChiJ2knKSwgYidtaXNzaXNzaXBwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnN0cmlwKGInbScpLCBiJ2lzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3RyaXAoYidwaScpLCBiJ21pc3Npc3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3RyaXAoYidpbScpLCBiJ3NzaXNzaXBwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnN0cmlwKGIncGltJyksIGInc3Npc3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3RyaXAoYiksIGInJykKKworICAgIGRlZiB0ZXN0X2xzdHJpcChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKGInaScpLCBiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmxzdHJpcChiJ20nKSwgYidpc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmxzdHJpcChiJ3BpJyksIGInbWlzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKGInaW0nKSwgYidzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKGIncGltJyksIGInc3Npc3NpcHBpJykKKworICAgIGRlZiB0ZXN0X3JzdHJpcChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnN0cmlwKGInaScpLCBiJ21pc3Npc3NpcHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnN0cmlwKGInbScpLCBiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzdHJpcChiJ3BpJyksIGInbWlzc2lzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3RyaXAoYidpbScpLCBiJ21pc3Npc3NpcHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnN0cmlwKGIncGltJyksIGInbWlzc2lzcycpCisKKyAgICBkZWYgdGVzdF9zdHJpcF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYicgXHRcblxyXGZcdmFiYyBcdFxuXHJcZlx2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnN0cmlwKCksIGInYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmxzdHJpcCgpLCBiJ2FiYyBcdFxuXHJcZlx2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzdHJpcCgpLCBiJyBcdFxuXHJcZlx2YWJjJykKKworICAgIGRlZiB0ZXN0X3N0cmlwX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJ2FiYycpLnN0cmlwKG1lbW9yeXZpZXcoYidhYycpKSwgYidiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJ2FiYycpLmxzdHJpcChtZW1vcnl2aWV3KGInYWMnKSksIGInYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInYWJjJykucnN0cmlwKG1lbW9yeXZpZXcoYidhYycpKSwgYidhYicpCisKKyAgICBkZWYgdGVzdF9zdHJpcF9zdHJpbmdfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QoYidhYmMnKS5zdHJpcCwgdSdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdChiJ2FiYycpLmxzdHJpcCwgdSdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdChiJ2FiYycpLnJzdHJpcCwgdSdiJykKKworICAgIGRlZiB0ZXN0X29yZChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInXDBBXHg3Zlx4ODBceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbb3JkKGJbaTppKzFdKSBmb3IgaSBpbiByYW5nZShsZW4oYikpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbMCwgNjUsIDEyNywgMTI4LCAyNTVdKQorCisgICAgZGVmIHRlc3Rfbm9uZV9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICMgaXNzdWUgMTE4MjgKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInaGVsbG8nKQorICAgICAgICBsID0gc2VsZi50eXBlMnRlc3QoYidsJykKKyAgICAgICAgaCA9IHNlbGYudHlwZTJ0ZXN0KGInaCcpCisgICAgICAgIHggPSBzZWxmLnR5cGUydGVzdChiJ3gnKQorICAgICAgICBvID0gc2VsZi50eXBlMnRlc3QoYidvJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGIuZmluZChsLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBiLmZpbmQobCwgLTIsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGIuZmluZChsLCBOb25lLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYi5maW5kKGgsIE5vbmUsIE5vbmUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgYi5yZmluZChsLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBiLnJmaW5kKGwsIC0yLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBiLnJmaW5kKGwsIE5vbmUsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBiLnJmaW5kKGgsIE5vbmUsIE5vbmUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgYi5pbmRleChsLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBiLmluZGV4KGwsIC0yLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBiLmluZGV4KGwsIE5vbmUsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBiLmluZGV4KGgsIE5vbmUsIE5vbmUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgYi5yaW5kZXgobCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgYi5yaW5kZXgobCwgLTIsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGIucmluZGV4KGwsIE5vbmUsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBiLnJpbmRleChoLCBOb25lLCBOb25lKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGIuY291bnQobCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYi5jb3VudChsLCAtMiwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYi5jb3VudChsLCBOb25lLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYi5jb3VudCh4LCBOb25lLCBOb25lKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGIuZW5kc3dpdGgobywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgYi5lbmRzd2l0aChvLCAtMiwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgYi5lbmRzd2l0aChsLCBOb25lLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGIuZW5kc3dpdGgoeCwgTm9uZSwgTm9uZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBiLnN0YXJ0c3dpdGgoaCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgYi5zdGFydHN3aXRoKGwsIC0yLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBiLnN0YXJ0c3dpdGgoaCwgTm9uZSwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBiLnN0YXJ0c3dpdGgoeCwgTm9uZSwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9maW5kX2V0Y19yYWlzZV9jb3JyZWN0X2Vycm9yX21lc3NhZ2VzKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDExODI4CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ2hlbGxvJykKKyAgICAgICAgeCA9IHNlbGYudHlwZTJ0ZXN0KGIneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYmZpbmRcYicsIGIuZmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1xicmZpbmRcYicsIGIucmZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYmluZGV4XGInLCBiLmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJyaW5kZXhcYicsIGIucmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJjb3VudFxiJywgYi5jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1xic3RhcnRzd2l0aFxiJywgYi5zdGFydHN3aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJlbmRzd2l0aFxiJywgYi5lbmRzd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKworCitjbGFzcyBCeXRlQXJyYXlUZXN0KEJhc2VCeXRlc1Rlc3QpOgorICAgIHR5cGUydGVzdCA9IGJ5dGVhcnJheQorCisgICAgZGVmIHRlc3Rfbm9oYXNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGJ5dGVhcnJheSgpKQorCisgICAgZGVmIHRlc3RfYnl0ZWFycmF5X2FwaShzZWxmKToKKyAgICAgICAgc2hvcnRfc2FtcGxlID0gYiJIZWxsbyB3b3JsZFxuIgorICAgICAgICBzYW1wbGUgPSBzaG9ydF9zYW1wbGUgKyBiIlwwIiooMjAgLSBsZW4oc2hvcnRfc2FtcGxlKSkKKyAgICAgICAgdGZuID0gdGVtcGZpbGUubWt0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBQcmVwYXJlCisgICAgICAgICAgICB3aXRoIG9wZW4odGZuLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2hvcnRfc2FtcGxlKQorICAgICAgICAgICAgIyBUZXN0IHJlYWRpbnRvCisgICAgICAgICAgICB3aXRoIG9wZW4odGZuLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGIgPSBieXRlYXJyYXkoMjApCisgICAgICAgICAgICAgICAgbiA9IGYucmVhZGludG8oYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgbGVuKHNob3J0X3NhbXBsZSkpCisgICAgICAgICAgICAjIFB5dGhvbiAyLngKKyAgICAgICAgICAgIGJfc2FtcGxlID0gKG9yZChzKSBmb3IgcyBpbiBzYW1wbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QoYl9zYW1wbGUpKQorICAgICAgICAgICAgIyBUZXN0IHdyaXRpbmcgaW4gYmluYXJ5IG1vZGUKKyAgICAgICAgICAgIHdpdGggb3Blbih0Zm4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShiKQorICAgICAgICAgICAgd2l0aCBvcGVuKHRmbiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzYW1wbGUpCisgICAgICAgICAgICAjIFRleHQgbW9kZSBpcyBhbWJpZ3VvdXM7IGRvbid0IHRlc3QKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGZuKQorICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6CisgICAgICAgIGIgPSBieXRlYXJyYXkoYidoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZXZlcnNlKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYidvbGxlaCcpCisgICAgICAgIGIgPSBieXRlYXJyYXkoYidoZWxsbzEnKSAjIHRlc3QgZXZlbiBudW1iZXIgb2YgaXRlbXMKKyAgICAgICAgYi5yZXZlcnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJzFvbGxlaCcpCisgICAgICAgIGIgPSBieXRlYXJyYXkoKQorICAgICAgICBiLnJldmVyc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIpCisKKyAgICBkZWYgdGVzdF9yZWdleHBzKHNlbGYpOgorICAgICAgICBkZWYgYnkocyk6CisgICAgICAgICAgICByZXR1cm4gYnl0ZWFycmF5KG1hcChvcmQsIHMpKQorICAgICAgICBiID0gYnkoIkhlbGxvLCB3b3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbChyIlx3KyIsIGIpLCBbYnkoIkhlbGxvIiksIGJ5KCJ3b3JsZCIpXSkKKworICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIGIgPSBieXRlYXJyYXkoWzEsIDIsIDNdKQorICAgICAgICBiWzFdID0gMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KFsxLCAxMDAsIDNdKSkKKyAgICAgICAgYlstMV0gPSAyMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzEsIDEwMCwgMjAwXSkpCisgICAgICAgIGJbMF0gPSBJbmRleGFibGUoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KFsxMCwgMTAwLCAyMDBdKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYlszXSA9IDAKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIEluZGV4RXJyb3IiKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYlstMTBdID0gMAorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgSW5kZXhFcnJvciIpCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBiWzBdID0gMjU2CisgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCByYWlzZSBWYWx1ZUVycm9yIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJbMF0gPSBJbmRleGFibGUoLTEpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCByYWlzZSBWYWx1ZUVycm9yIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJbMF0gPSBOb25lCisgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCByYWlzZSBUeXBlRXJyb3IiKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShyYW5nZSgxMCkpCisgICAgICAgIGRlbCBiWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KHJhbmdlKDEsIDEwKSkpCisgICAgICAgIGRlbCBiWy0xXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShyYW5nZSgxLCA5KSkpCisgICAgICAgIGRlbCBiWzRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KFsxLCAyLCAzLCA0LCA2LCA3LCA4XSkpCisKKyAgICBkZWYgdGVzdF9zZXRzbGljZShzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShyYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMCkpKQorCisgICAgICAgIGJbMDo1XSA9IGJ5dGVhcnJheShbMSwgMSwgMSwgMSwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KFsxLCAxLCAxLCAxLCAxLCA1LCA2LCA3LCA4LCA5XSkpCisKKyAgICAgICAgZGVsIGJbMDotNV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzUsIDYsIDcsIDgsIDldKSkKKworICAgICAgICBiWzA6MF0gPSBieXRlYXJyYXkoWzAsIDEsIDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShyYW5nZSgxMCkpKQorCisgICAgICAgIGJbLTc6LTNdID0gYnl0ZWFycmF5KFsxMDAsIDEwMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KFswLCAxLCAyLCAxMDAsIDEwMSwgNywgOCwgOV0pKQorCisgICAgICAgIGJbMzo1XSA9IFszLCA0LCA1LCA2XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShyYW5nZSgxMCkpKQorCisgICAgICAgIGJbMzowXSA9IFs0MiwgNDIsIDQyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShbMCwgMSwgMiwgNDIsIDQyLCA0MiwgMywgNCwgNSwgNiwgNywgOCwgOV0pKQorCisgICAgICAgIGJbMzpdID0gYidmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KFswLCAxLCAyLCAxMDIsIDExMSwgMTExXSkpCisKKyAgICAgICAgYls6M10gPSBtZW1vcnl2aWV3KGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzEwMiwgMTExLCAxMTEsIDEwMiwgMTExLCAxMTFdKSkKKworICAgICAgICBiWzM6NF0gPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShbMTAyLCAxMTEsIDExMSwgMTExLCAxMTFdKSkKKworICAgICAgICBiWzE6XSA9IGxpc3QoYid1dXV1JykgICMgdGhpcyB3b3JrcyBvbmx5IG9uIFB5dGhvbjIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzEwMiwgMTE3LCAxMTcsIDExNywgMTE3XSkpCisKKyAgICAgICAgZm9yIGVsZW0gaW4gWzUsIC01LCAwLCBsb25nKDEwZTIwKSwgdSdzdHInLCAyLjMsIFt1J2EnLCB1J2InXSwgW1tdXV06CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgYlszOjRdID0gZWxlbQorCisgICAgICAgIGZvciBlbGVtIGluIFtbMjU0LCAyNTUsIDI1Nl0sIFstMjU2LCA5MDAwXV06CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGJbMzo0XSA9IGVsZW0KKworICAgIGRlZiB0ZXN0X2V4dGVuZGVkX3NldF9kZWxfc2xpY2Uoc2VsZik6CisgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDMwMCwgMTw8MzMzLCAtMSwgLTIsIC0zMSwgLTMwMCkKKyAgICAgICAgZm9yIHN0YXJ0IGluIGluZGljZXM6CisgICAgICAgICAgICBmb3Igc3RvcCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgICAgICMgU2tpcCBpbnZhbGlkIHN0ZXAgMAorICAgICAgICAgICAgICAgIGZvciBzdGVwIGluIGluZGljZXNbMTpdOgorICAgICAgICAgICAgICAgICAgICBMID0gbGlzdChyYW5nZSgyNTUpKQorICAgICAgICAgICAgICAgICAgICBiID0gYnl0ZWFycmF5KEwpCisgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmUgYSBzbGljZSBvZiBleGFjdGx5IHRoZSByaWdodCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICMgYnV0IHdpdGggZGlmZmVyZW50IGRhdGEuCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBMW3N0YXJ0OnN0b3A6c3RlcF0KKyAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXZlcnNlKCkKKyAgICAgICAgICAgICAgICAgICAgTFtzdGFydDpzdG9wOnN0ZXBdID0gZGF0YQorICAgICAgICAgICAgICAgICAgICBiW3N0YXJ0OnN0b3A6c3RlcF0gPSBkYXRhCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KEwpKQorCisgICAgICAgICAgICAgICAgICAgIGRlbCBMW3N0YXJ0OnN0b3A6c3RlcF0KKyAgICAgICAgICAgICAgICAgICAgZGVsIGJbc3RhcnQ6c3RvcDpzdGVwXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShMKSkKKworICAgIGRlZiB0ZXN0X3NldHNsaWNlX3RyYXAoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgd2UgY29ycmVjdGx5IGhhbmRsZSBhc3NpZ25pbmcgc2VsZgorICAgICAgICAjIHRvIGEgc2xpY2Ugb2Ygc2VsZiAodGhlIG9sZCBMYW1iZXJ0IE1lZXJ0ZW5zIHRyYXApLgorICAgICAgICBiID0gYnl0ZWFycmF5KHJhbmdlKDI1NikpCisgICAgICAgIGJbODpdID0gYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShsaXN0KHJhbmdlKDgpKSArIGxpc3QocmFuZ2UoMjU2KSkpKQorCisgICAgZGVmIHRlc3RfaWNvbmNhdChzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiImFiYyIpCisgICAgICAgIGIxID0gYgorICAgICAgICBiICs9IGIiZGVmIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiYWJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgaXMgYjEpCisgICAgICAgIGIgKz0gYiJ4eXoiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJhYmNkZWZ4eXoiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiICs9IHUiIgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJieXRlcyArPSB1bmljb2RlIGRpZG4ndCByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfaXJlcGVhdChzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiImFiYyIpCisgICAgICAgIGIxID0gYgorICAgICAgICBiICo9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImFiY2FiY2FiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIGlzIGIxKQorCisgICAgZGVmIHRlc3RfaXJlcGVhdF8xY2hhcihzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiIngiKQorICAgICAgICBiMSA9IGIKKyAgICAgICAgYiAqPSAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIngiKjEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgaXMgYjEpCisKKyAgICBkZWYgdGVzdF9hbGxvYyhzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheSgpCisgICAgICAgIGFsbG9jID0gYi5fX2FsbG9jX18oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsb2MgPj0gMCkKKyAgICAgICAgc2VxID0gW2FsbG9jXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgYiArPSBiIngiCisgICAgICAgICAgICBhbGxvYyA9IGIuX19hbGxvY19fKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGxvYyA+PSBsZW4oYikpCisgICAgICAgICAgICBpZiBhbGxvYyBub3QgaW4gc2VxOgorICAgICAgICAgICAgICAgIHNlcS5hcHBlbmQoYWxsb2MpCisKKyAgICBkZWYgdGVzdF9leHRlbmQoc2VsZik6CisgICAgICAgIG9yaWcgPSBiJ2hlbGxvJworICAgICAgICBhID0gYnl0ZWFycmF5KG9yaWcpCisgICAgICAgIGEuZXh0ZW5kKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgb3JpZyArIG9yaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs1Ol0sIG9yaWcpCisgICAgICAgIGEgPSBieXRlYXJyYXkoYicnKQorICAgICAgICAjIFRlc3QgaXRlcmF0b3JzIHRoYXQgZG9uJ3QgaGF2ZSBhIF9fbGVuZ3RoX2hpbnRfXworICAgICAgICBhLmV4dGVuZChtYXAob3JkLCBvcmlnICogMjUpKQorICAgICAgICBhLmV4dGVuZChvcmQoeCkgZm9yIHggaW4gb3JpZyAqIDI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIG9yaWcgKiA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy01Ol0sIG9yaWcpCisgICAgICAgIGEgPSBieXRlYXJyYXkoYicnKQorICAgICAgICBhLmV4dGVuZChpdGVyKG1hcChvcmQsIG9yaWcgKiA1MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIG9yaWcgKiA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy01Ol0sIG9yaWcpCisgICAgICAgIGEgPSBieXRlYXJyYXkoYicnKQorICAgICAgICBhLmV4dGVuZChsaXN0KG1hcChvcmQsIG9yaWcgKiA1MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIG9yaWcgKiA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy01Ol0sIG9yaWcpCisgICAgICAgIGEgPSBieXRlYXJyYXkoYicnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLmV4dGVuZCwgWzAsIDEsIDIsIDI1Nl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuZXh0ZW5kLCBbMCwgMSwgMiwgLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhKSwgMCkKKyAgICAgICAgYSA9IGJ5dGVhcnJheShiJycpCisgICAgICAgIGEuZXh0ZW5kKFtJbmRleGFibGUob3JkKCdhJykpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiJ2EnKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgorICAgICAgICBiID0gYnl0ZWFycmF5KGInaGVsbG8nKQorICAgICAgICBiLnJlbW92ZShvcmQoJ2wnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ2hlbG8nKQorICAgICAgICBiLnJlbW92ZShvcmQoJ2wnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ2hlbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogYi5yZW1vdmUob3JkKCdsJykpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGIucmVtb3ZlKDQwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiLnJlbW92ZSh1J2UnKSkKKyAgICAgICAgIyByZW1vdmUgZmlyc3QgYW5kIGxhc3QKKyAgICAgICAgYi5yZW1vdmUob3JkKCdvJykpCisgICAgICAgIGIucmVtb3ZlKG9yZCgnaCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiLnJlbW92ZSh1J2UnKSkKKyAgICAgICAgYi5yZW1vdmUoSW5kZXhhYmxlKG9yZCgnZScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJycpCisKKyAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CisgICAgICAgIGIgPSBieXRlYXJyYXkoYid3b3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5wb3AoKSwgb3JkKCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5wb3AoMCksIG9yZCgndycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucG9wKC0yKSwgb3JkKCdyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYi5wb3AoMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJ5dGVhcnJheSgpLnBvcCgpKQorICAgICAgICAjIHRlc3QgZm9yIGlzc3VlICM2ODQ2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWFycmF5KGInXHhmZicpLnBvcCgpLCAweGZmKQorCisgICAgZGVmIHRlc3Rfbm9zb3J0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgbGFtYmRhOiBieXRlYXJyYXkoKS5zb3J0KCkpCisKKyAgICBkZWYgdGVzdF9hcHBlbmQoc2VsZik6CisgICAgICAgIGIgPSBieXRlYXJyYXkoYidoZWxsJykKKyAgICAgICAgYi5hcHBlbmQob3JkKCdvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYidoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5hcHBlbmQoMTAwKSwgTm9uZSkKKyAgICAgICAgYiA9IGJ5dGVhcnJheSgpCisgICAgICAgIGIuYXBwZW5kKG9yZCgnQScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGIuYXBwZW5kKHUnbycpKQorICAgICAgICBiID0gYnl0ZWFycmF5KCkKKyAgICAgICAgYi5hcHBlbmQoSW5kZXhhYmxlKG9yZCgnQScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ0EnKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0KHNlbGYpOgorICAgICAgICBiID0gYnl0ZWFycmF5KGInbXNzc3NwcCcpCisgICAgICAgIGIuaW5zZXJ0KDEsIG9yZCgnaScpKQorICAgICAgICBiLmluc2VydCg0LCBvcmQoJ2knKSkKKyAgICAgICAgYi5pbnNlcnQoLTIsIG9yZCgnaScpKQorICAgICAgICBiLmluc2VydCgxMDAwLCBvcmQoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgIyBhbGxvd2VkIGluIDIueAorICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGIuaW5zZXJ0KDAsIGInMScpKQorICAgICAgICBiID0gYnl0ZWFycmF5KCkKKyAgICAgICAgYi5pbnNlcnQoMCwgSW5kZXhhYmxlKG9yZCgnQScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ0EnKQorCisgICAgZGVmIHRlc3RfY29waWVkKHNlbGYpOgorICAgICAgICAjIElzc3VlIDQzNDguICBNYWtlIHN1cmUgdGhhdCBvcGVyYXRpb25zIHRoYXQgZG9uJ3QgbXV0YXRlIHRoZSBhcnJheQorICAgICAgICAjIGNvcHkgdGhlIGJ5dGVzLgorICAgICAgICBiID0gYnl0ZWFycmF5KGInYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiIGlzIGIucmVwbGFjZShiJ2FiYycsIGInY2RlJywgMCkpCisKKyAgICAgICAgdCA9IGJ5dGVhcnJheShbaSBmb3IgaSBpbiByYW5nZSgyNTYpXSkKKyAgICAgICAgeCA9IGJ5dGVhcnJheShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCBpcyB4LnRyYW5zbGF0ZSh0KSkKKworICAgIGRlZiB0ZXN0X3BhcnRpdGlvbl9ieXRlYXJyYXlfZG9lc250X3NoYXJlX251bGxzdHJpbmcoc2VsZik6CisgICAgICAgIGEsIGIsIGMgPSBieXRlYXJyYXkoYiJ4IikucGFydGl0aW9uKGIieSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgaXMgbm90IGMpCisgICAgICAgIGIgKz0gYiIhIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGIiIikKKyAgICAgICAgYSwgYiwgYyA9IGJ5dGVhcnJheShiIngiKS5wYXJ0aXRpb24oYiJ5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQorICAgICAgICAjIFNhbWUgZm9yIHJwYXJ0aXRpb24KKyAgICAgICAgYiwgYywgYSA9IGJ5dGVhcnJheShiIngiKS5ycGFydGl0aW9uKGIieSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgaXMgbm90IGMpCisgICAgICAgIGIgKz0gYiIhIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGIiIikKKyAgICAgICAgYywgYiwgYSA9IGJ5dGVhcnJheShiIngiKS5ycGFydGl0aW9uKGIieSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGIiIikKKworICAgIGRlZiB0ZXN0X3Jlc2l6ZV9mb3JiaWRkZW4oc2VsZik6CisgICAgICAgICMgIzQ1MDk6IGNhbid0IHJlc2l6ZSBhIGJ5dGVhcnJheSB3aGVuIHRoZXJlIGFyZSBidWZmZXIgZXhwb3J0cywgZXZlbgorICAgICAgICAjIGlmIGl0IHdvdWxkbid0IHJlYWxsb2NhdGUgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICAjIEZ1cnRoZXJtb3JlLCBubyBkZXN0cnVjdGl2ZSBjaGFuZ2VzIHRvIHRoZSBidWZmZXIgbWF5IGJlIGFwcGxpZWQKKyAgICAgICAgIyBiZWZvcmUgcmFpc2luZyB0aGUgZXJyb3IuCisgICAgICAgIGIgPSBieXRlYXJyYXkocmFuZ2UoMTApKQorICAgICAgICB2ID0gbWVtb3J5dmlldyhiKQorICAgICAgICBkZWYgcmVzaXplKG4pOgorICAgICAgICAgICAgYlsxOi0xXSA9IHJhbmdlKG4gKyAxLCAyKm4gLSAxKQorICAgICAgICByZXNpemUoMTApCisgICAgICAgIG9yaWcgPSBiWzpdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCByZXNpemUsIDExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG9yaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCByZXNpemUsIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIHJlc2l6ZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQorICAgICAgICAjIE90aGVyIG9wZXJhdGlvbnMgaW1wbHlpbmcgcmVzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBiLnBvcCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgYi5yZW1vdmUsIGJbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKKyAgICAgICAgZGVmIGRlbGl0ZW0oKToKKyAgICAgICAgICAgIGRlbCBiWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBkZWxpdGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG9yaWcpCisgICAgICAgICMgZGVsZXRpbmcgYSBub24tY29udGlndW91cyBzbGljZQorICAgICAgICBkZWYgZGVsc2xpY2UoKToKKyAgICAgICAgICAgIGJbMTotMToyXSA9IGIiIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgZGVsc2xpY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKKworICAgIGRlZiB0ZXN0X2VtcHR5X2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzU2MTogb3BlcmF0aW9ucyBvbiBlbXB0eSBieXRlYXJyYXlzIGNvdWxkIGNyYXNoIGluIG1hbnkKKyAgICAgICAgIyBzaXR1YXRpb25zLCBkdWUgdG8gYSBmcmFnaWxlIGltcGxlbWVudGF0aW9uIG9mIHRoZQorICAgICAgICAjIFB5Qnl0ZUFycmF5X0FTX1NUUklORygpIEMgbWFjcm8uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgYnl0ZWFycmF5KGInJykpCisKKworY2xhc3MgQXNzb3J0ZWRCeXRlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMKKyAgICAjIFRlc3QgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgYnl0ZXMgYW5kIGJ5dGVhcnJheQorICAgICMKKworICAgIEBjaGVja19ieXRlc193YXJuaW5ncworICAgIGRlZiB0ZXN0X3JlcHJfc3RyKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiBzdHIsIHJlcHI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYnl0ZWFycmF5KCkpLCAiYnl0ZWFycmF5KGInJykiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGJ5dGVhcnJheShbMF0pKSwgImJ5dGVhcnJheShiJ1xceDAwJykiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGJ5dGVhcnJheShbMCwgMSwgMjU0LCAyNTVdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlYXJyYXkoYidcXHgwMFxceDAxXFx4ZmVcXHhmZicpIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihiImFiYyIpLCAiYidhYmMnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihiIiciKSwgJycnYiInIicnJykgIyAnJycKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihiIidcIiIpLCByIiIiYidcJyInIiIiKSAjICcKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfYnl0ZXNfdG9fYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiA9PSBieXRlcyhiImFiYyIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWIiICE9IGJ5dGVzKGIiYWJjIiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYiIgPD0gYnl0ZXMoYiJhYmMiKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiIiA8IGJ5dGVzKGIiYWJjIiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiID49IGJ5dGVzKGIiYWIiKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiYyIgPiBieXRlcyhiImFiIiksIFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiYyIgIT0gYnl0ZXMoYiJhYmMiKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYiIgPT0gYnl0ZXMoYiJhYmMiKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYiIgPiBieXRlcyhiImFiYyIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiIiA+PSBieXRlcyhiImFiYyIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiYyIgPCBieXRlcyhiImFiIiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiA8PSBieXRlcyhiImFiIiksIEZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYiJhYmMiKSA9PSBiImFiYyIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYiJhYiIpICE9IGIiYWJjIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImFiIikgPD0gYiJhYmMiLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWIiKSA8IGIiYWJjIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImFiYyIpID49IGIiYWIiLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWJjIikgPiBiImFiIiwgVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWJjIikgIT0gYiJhYmMiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImFiIikgPT0gYiJhYmMiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImFiIikgPiBiImFiYyIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWIiKSA+PSBiImFiYyIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWJjIikgPCBiImFiIiwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYiJhYmMiKSA8PSBiImFiIiwgRmFsc2UpCisKKyAgICBAdGVzdC50ZXN0X3N1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2RvYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYnl0ZWFycmF5Ll9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShieXRlYXJyYXkuX19kb2NfXy5zdGFydHN3aXRoKCJieXRlYXJyYXkoIiksIGJ5dGVhcnJheS5fX2RvY19fKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShieXRlcy5fX2RvY19fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYnl0ZXMuX19kb2NfXy5zdGFydHN3aXRoKCJieXRlcygiKSwgYnl0ZXMuX19kb2NfXykKKworICAgIGRlZiB0ZXN0X2Zyb21fYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBzYW1wbGUgPSBieXRlcyhiIkhlbGxvIHdvcmxkXG5ceDgwXHg4MVx4ZmVceGZmIikKKyAgICAgICAgYnVmID0gbWVtb3J5dmlldyhzYW1wbGUpCisgICAgICAgIGIgPSBieXRlYXJyYXkoYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShzYW1wbGUpKQorCisgICAgQGNoZWNrX2J5dGVzX3dhcm5pbmdzCisgICAgZGVmIHRlc3RfdG9fc3RyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJycpLCAiYicnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYid4JyksICJiJ3gnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYidceDgwJyksICJiJ1xceDgwJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGJ5dGVhcnJheShiJycpKSwgImJ5dGVhcnJheShiJycpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYnl0ZWFycmF5KGIneCcpKSwgImJ5dGVhcnJheShiJ3gnKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGJ5dGVhcnJheShiJ1x4ODAnKSksICJieXRlYXJyYXkoYidcXHg4MCcpIikKKworICAgIGRlZiB0ZXN0X2xpdGVyYWwoc2VsZik6CisgICAgICAgIHRlc3RzID0gIFsKKyAgICAgICAgICAgIChiIldvbmRlcmZ1bCBzcGFtIiwgIldvbmRlcmZ1bCBzcGFtIiksCisgICAgICAgICAgICAoYnIiV29uZGVyZnVsIHNwYW0gdG9vIiwgIldvbmRlcmZ1bCBzcGFtIHRvbyIpLAorICAgICAgICAgICAgKGIiXHhhYVx4MDBcMDAwXDIwMCIsICJceGFhXHgwMFwwMDBcMjAwIiksCisgICAgICAgICAgICAoYnIiXHhhYVx4MDBcMDAwXDIwMCIsIHIiXHhhYVx4MDBcMDAwXDIwMCIpLAorICAgICAgICBdCisgICAgICAgIGZvciBiLCBzIGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkocywgJ2xhdGluLTEnKSkKKyAgICAgICAgZm9yIGMgaW4gcmFuZ2UoMTI4LCAyNTYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYiIlcyInICUgY2hyKGMpKQorCisgICAgZGVmIHRlc3RfdHJhbnNsYXRlKHNlbGYpOgorICAgICAgICBiID0gYidoZWxsbycKKyAgICAgICAgYmEgPSBieXRlYXJyYXkoYikKKyAgICAgICAgcm9zZXR0YSA9IGJ5dGVhcnJheShyYW5nZSgwLCAyNTYpKQorICAgICAgICByb3NldHRhW29yZCgnbycpXSA9IG9yZCgnZScpCisgICAgICAgIGMgPSBiLnRyYW5zbGF0ZShyb3NldHRhLCBiJ2wnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGInaGVlJykKKyAgICAgICAgYyA9IGJhLnRyYW5zbGF0ZShyb3NldHRhLCBiJ2wnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhLCBiJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBiJ2hlZScpCisgICAgICAgIGMgPSBiLnRyYW5zbGF0ZShOb25lLCBiJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGInaGxsbycpCisgICAgICAgIGMgPSBiYS50cmFuc2xhdGUoTm9uZSwgYidlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBiJ2hsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGIudHJhbnNsYXRlLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhLnRyYW5zbGF0ZSwgTm9uZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NwbGl0X2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2EgYicuc3BsaXQobWVtb3J5dmlldyhiJyAnKSksIFtiJ2EnLCBiJ2InXSkKKworICAgIGRlZiB0ZXN0X3JzcGxpdF9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhIGInLnJzcGxpdChtZW1vcnl2aWV3KGInICcpKSwgW2InYScsIGInYiddKQorCisgICAgIyBPcHRpbWl6YXRpb25zOgorICAgICMgX19pdGVyX18/IChvcHRpbWl6YXRpb24pCisgICAgIyBfX3JldmVyc2VkX18/IChvcHRpbWl6YXRpb24pCisKKyAgICAjIFhYWCBNb3JlIHN0cmluZyBtZXRob2RzPyAgKFRob3NlIHRoYXQgZG9uJ3QgdXNlIGNoYXJhY3RlciBwcm9wZXJ0aWVzKQorCisgICAgIyBUaGVyZSBhcmUgdGVzdHMgaW4gc3RyaW5nX3Rlc3RzLnB5IHRoYXQgYXJlIG1vcmUKKyAgICAjIGNvbXByZWhlbnNpdmUgZm9yIHRoaW5ncyBsaWtlIHNwbGl0LCBwYXJ0aXRpb24sIGV0Yy4KKyAgICAjIFVuZm9ydHVuYXRlbHkgdGhleSBhcmUgYWxsIGJ1bmRsZWQgd2l0aCB0ZXN0cyB0aGF0CisgICAgIyBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciBieXRlcworCisgICAgIyBJJ3ZlIHN0YXJ0ZWQgcG9ydGluZyBzb21lIG9mIHRob3NlIGludG8gYnl0ZWFycmF5X3Rlc3RzLnB5LCB3ZSBzaG91bGQgcG9ydAorICAgICMgdGhlIHJlc3QgdGhhdCBtYWtlIHNlbnNlICh0aGUgY29kZSBjYW4gYmUgY2xlYW5lZCB1cCB0byB1c2UgbW9kZXJuCisgICAgIyB1bml0dGVzdCBtZXRob2RzIGF0IHRoZSBzYW1lIHRpbWUpLgorCitjbGFzcyBCeXRlYXJyYXlQRVAzMTM3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgdGVzdC5idWZmZXJfdGVzdHMuTWl4aW5CeXRlc0J1ZmZlckNvbW1vblRlc3RzKToKKyAgICBkZWYgbWFyc2hhbChzZWxmLCB4KToKKyAgICAgICAgcmV0dXJuIGJ5dGVhcnJheSh4KQorCisgICAgZGVmIHRlc3RfcmV0dXJuc19uZXdfY29weShzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5tYXJzaGFsKGInMTIzNCcpCisgICAgICAgICMgT24gaW1tdXRhYmxlIHR5cGVzIHRoZXNlIE1BWSByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlbXNlbHZlcworICAgICAgICAjIGJ1dCBvbiBtdXRhYmxlIHR5cGVzIGxpa2UgYnl0ZWFycmF5IHRoZXkgTVVTVCByZXR1cm4gYSBuZXcgY29weS4KKyAgICAgICAgZm9yIG1ldGhuYW1lIGluICgnemZpbGwnLCAncmp1c3QnLCAnbGp1c3QnLCAnY2VudGVyJyk6CisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHZhbCwgbWV0aG5hbWUpCisgICAgICAgICAgICBuZXd2YWwgPSBtZXRob2QoMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBuZXd2YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsIGlzIG5vdCBuZXd2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG5hbWUrJyByZXR1cm5lZCBzZWxmIG9uIGEgbXV0YWJsZSBvYmplY3QnKQorICAgICAgICBmb3IgZXhwciBpbiAoJ3ZhbC5zcGxpdCgpWzBdJywgJ3ZhbC5yc3BsaXQoKVswXScsCisgICAgICAgICAgICAgICAgICAgICAndmFsLnBhcnRpdGlvbigiLiIpWzBdJywgJ3ZhbC5ycGFydGl0aW9uKCIuIilbMl0nLAorICAgICAgICAgICAgICAgICAgICAgJ3ZhbC5zcGxpdGxpbmVzKClbMF0nLCAndmFsLnJlcGxhY2UoIiIsICIiKScpOgorICAgICAgICAgICAgbmV3dmFsID0gZXZhbChleHByKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIG5ld3ZhbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWwgaXMgbm90IG5ld3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByKycgcmV0dXJuZWQgdmFsIG9uIGEgbXV0YWJsZSBvYmplY3QnKQorCitjbGFzcyBGaXhlZFN0cmluZ1Rlc3QodGVzdC5zdHJpbmdfdGVzdHMuQmFzZVRlc3QpOgorCisgICAgZGVmIGZpeHR5cGUoc2VsZiwgb2JqKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHN0cik6CisgICAgICAgICAgICByZXR1cm4gb2JqLmVuY29kZSgidXRmLTgiKQorICAgICAgICByZXR1cm4gc3VwZXIoRml4ZWRTdHJpbmdUZXN0LCBzZWxmKS5maXh0eXBlKG9iaikKKworICAgICMgQ3VycmVudGx5IHRoZSBieXRlcyBjb250YWlubWVudCB0ZXN0aW5nIHVzZXMgYSBzaW5nbGUgaW50ZWdlcgorICAgICMgdmFsdWUuIFRoaXMgbWF5IG5vdCBiZSB0aGUgZmluYWwgZGVzaWduLCBidXQgdW50aWwgdGhlbiB0aGUKKyAgICAjIGJ5dGVzIHNlY3Rpb24gd2l0aCBpbiBhIGJ5dGVzIGNvbnRhaW5tZW50IG5vdCB2YWxpZAorICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICBwYXNzCisgICAgZGVmIHRlc3RfZXhwYW5kdGFicyhzZWxmKToKKyAgICAgICAgcGFzcworICAgIGRlZiB0ZXN0X3VwcGVyKHNlbGYpOgorICAgICAgICBwYXNzCisgICAgZGVmIHRlc3RfbG93ZXIoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICAjIFhYWCBjaGVjayB0aGlzIG91dAorICAgICAgICBwYXNzCisKKworY2xhc3MgQnl0ZUFycmF5QXNTdHJpbmdUZXN0KEZpeGVkU3RyaW5nVGVzdCk6CisgICAgdHlwZTJ0ZXN0ID0gYnl0ZWFycmF5CisKKworY2xhc3MgQnl0ZUFycmF5U3ViY2xhc3MoYnl0ZWFycmF5KToKKyAgICBwYXNzCisKK2NsYXNzIEJ5dGVBcnJheVN1YmNsYXNzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQnl0ZUFycmF5U3ViY2xhc3MsIGJ5dGVhcnJheSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShCeXRlQXJyYXlTdWJjbGFzcygpLCBieXRlYXJyYXkpCisKKyAgICAgICAgYSwgYiA9IGIiYWJjZCIsIGIiZWZnaCIKKyAgICAgICAgX2EsIF9iID0gQnl0ZUFycmF5U3ViY2xhc3MoYSksIEJ5dGVBcnJheVN1YmNsYXNzKGIpCisKKyAgICAgICAgIyB0ZXN0IGNvbXBhcmlzb24gb3BlcmF0b3JzIHdpdGggc3ViY2xhc3MgaW5zdGFuY2VzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYSA9PSBfYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9hICE9IF9iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2EgPCBfYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9hIDw9IF9iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2IgPj0gX2EpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYiA+IF9hKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2EgaXMgbm90IGEpCisKKyAgICAgICAgIyB0ZXN0IGNvbmNhdCBvZiBzdWJjbGFzcyBpbnN0YW5jZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgYiwgX2EgKyBfYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgYiwgYSArIF9iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyBiLCBfYSArIGIpCisKKyAgICAgICAgIyB0ZXN0IHJlcGVhdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSo1ID09IF9hKjUpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBqb2luIHJldHVybnMgYSBORVcgb2JqZWN0IGZvciBzaW5nbGUgaXRlbSBzZXF1ZW5jZXMKKyAgICAgICAgIyBpbnZvbHZpbmcgYSBzdWJjbGFzcy4KKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBpdCBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KKyAgICAgICAgczEgPSBCeXRlQXJyYXlTdWJjbGFzcyhiImFiY2QiKQorICAgICAgICBzMiA9IGJ5dGVhcnJheSgpLmpvaW4oW3MxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoczIpIGlzIGJ5dGVhcnJheSwgdHlwZShzMikpCisKKyAgICAgICAgIyBUZXN0IHJldmVyc2UsIGNhbGxpbmcgam9pbiBvbiBzdWJjbGFzcworICAgICAgICBzMyA9IHMxLmpvaW4oW2IiYWJjZCJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzMykgaXMgYnl0ZWFycmF5KQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBhID0gQnl0ZUFycmF5U3ViY2xhc3MoYiJhYmNkIikKKyAgICAgICAgYS54ID0gMTAKKyAgICAgICAgYS55ID0gQnl0ZUFycmF5U3ViY2xhc3MoYiJlZmdoIikKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBiID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhhLCBwcm90bykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS54LCBiLngpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEueSwgYi55KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGEpLCB0eXBlKGIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGEueSksIHR5cGUoYi55KSkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGEgPSBCeXRlQXJyYXlTdWJjbGFzcyhiImFiY2QiKQorICAgICAgICBhLnggPSAxMAorICAgICAgICBhLnkgPSBCeXRlQXJyYXlTdWJjbGFzcyhiImVmZ2giKQorICAgICAgICBmb3IgY29weV9tZXRob2QgaW4gKGNvcHkuY29weSwgY29weS5kZWVwY29weSk6CisgICAgICAgICAgICBiID0gY29weV9tZXRob2QoYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLngsIGIueCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS55LCBiLnkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYSksIHR5cGUoYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYS55KSwgdHlwZShiLnkpKQorCisgICAgZGVmIHRlc3RfaW5pdF9vdmVycmlkZShzZWxmKToKKyAgICAgICAgY2xhc3Mgc3ViY2xhc3MoYnl0ZWFycmF5KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXdhcmc9MSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBieXRlYXJyYXkuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICB4ID0gc3ViY2xhc3MoNCwgc291cmNlPWIiYWJjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgYiJhYmNkIikKKyAgICAgICAgeCA9IHN1YmNsYXNzKG5ld2FyZz00LCBzb3VyY2U9YiJhYmNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBiImFiY2QiKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgI3Rlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCeXRlc1Rlc3QpCisgICAgI3Rlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChBc3NvcnRlZEJ5dGVzVGVzdCkKKyAgICAjdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJ5dGVzQXNTdHJpbmdUZXN0KQorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgQnl0ZUFycmF5VGVzdCwKKyAgICAgICAgQnl0ZUFycmF5QXNTdHJpbmdUZXN0LAorICAgICAgICBCeXRlQXJyYXlTdWJjbGFzc1Rlc3QsCisgICAgICAgIEJ5dGVhcnJheVBFUDMxMzdUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iejIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9iejIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI3NTExNAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2J6Mi5weQpAQCAtMCwwICsxLDQ4MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBfNEcsIGJpZ21lbXRlc3QsIGltcG9ydF9tb2R1bGUsIGZpbmRmaWxlCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCitiejIgPSBpbXBvcnRfbW9kdWxlKCdiejInKQorZnJvbSBiejIgaW1wb3J0IEJaMkZpbGUsIEJaMkNvbXByZXNzb3IsIEJaMkRlY29tcHJlc3NvcgorCitoYXNfY21kbGluZV9idW56aXAyID0gc3lzLnBsYXRmb3JtIG5vdCBpbiAoIndpbjMyIiwgIm9zMmVteCIsICJyaXNjb3MiKQorCitjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIkJhc2UgZm9yIG90aGVyIHRlc3RjYXNlcy4iCisgICAgVEVYVCA9ICdyb290Ong6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9iYXNoXG5iaW46eDoxOjE6YmluOi9iaW46XG5kYWVtb246eDoyOjI6ZGFlbW9uOi9zYmluOlxuYWRtOng6Mzo0OmFkbTovdmFyL2FkbTpcbmxwOng6NDo3OmxwOi92YXIvc3Bvb2wvbHBkOlxuc3luYzp4OjU6MDpzeW5jOi9zYmluOi9iaW4vc3luY1xuc2h1dGRvd246eDo2OjA6c2h1dGRvd246L3NiaW46L3NiaW4vc2h1dGRvd25cbmhhbHQ6eDo3OjA6aGFsdDovc2Jpbjovc2Jpbi9oYWx0XG5tYWlsOng6ODoxMjptYWlsOi92YXIvc3Bvb2wvbWFpbDpcbm5ld3M6eDo5OjEzOm5ld3M6L3Zhci9zcG9vbC9uZXdzOlxudXVjcDp4OjEwOjE0OnV1Y3A6L3Zhci9zcG9vbC91dWNwOlxub3BlcmF0b3I6eDoxMTowOm9wZXJhdG9yOi9yb290OlxuZ2FtZXM6eDoxMjoxMDA6Z2FtZXM6L3Vzci9nYW1lczpcbmdvcGhlcjp4OjEzOjMwOmdvcGhlcjovdXNyL2xpYi9nb3BoZXItZGF0YTpcbmZ0cDp4OjE0OjUwOkZUUCBVc2VyOi92YXIvZnRwOi9iaW4vYmFzaFxubm9ib2R5Ong6NjU1MzQ6NjU1MzQ6Tm9ib2R5Oi9ob21lOlxucG9zdGZpeDp4OjEwMDoxMDE6cG9zdGZpeDovdmFyL3Nwb29sL3Bvc3RmaXg6XG5uaWVtZXllcjp4OjUwMDo1MDA6Oi9ob21lL25pZW1leWVyOi9iaW4vYmFzaFxucG9zdGdyZXM6eDoxMDE6MTAyOlBvc3RncmVTUUwgU2VydmVyOi92YXIvbGliL3Bnc3FsOi9iaW4vYmFzaFxubXlzcWw6eDoxMDI6MTAzOk15U1FMIHNlcnZlcjovdmFyL2xpYi9teXNxbDovYmluL2Jhc2hcbnd3dzp4OjEwMzoxMDQ6Oi92YXIvd3d3Oi9iaW4vZmFsc2VcbicKKyAgICBEQVRBID0gJ0JaaDkxQVkmU1kuXHhjOE5ceDE4XHgwMFx4MDE+X1x4ODBceDAwXHgxMEBceDAyXHhmZlx4ZjBceDAxXHgwN25ceDAwP1x4ZTdceGZmXHhlMDBceDAxXHg5OVx4YWFceDAwXHhjMFx4MDNGXHg4Nlx4OGMjJlx4ODNGXHg5YVx4MDNceDA2XHhhNlx4ZDBceGE2XHg5M01ceDBmUVx4YTdceGE4XHgwNlx4ODA0aGhceDEyJFx4MTFceGE0aTRceGYxNFNceGQyPFFceGI1XHgwZkhceGQzXHhkNFx4ZGRceGQ1XHg4N1x4YmJceGY4XHg5NFxyXHg4Zlx4YWZJXHgxMlx4ZTFceGM5XHhmOC9FXHgwMHB1XHg4OVx4MTJdXHhjOVx4YmJETFxuUVx4MGVcdDFceDEyXHhkZlx4YTBceGMwXHg5N1x4YWMyTzlceDg5XHgxM1x4OTRceDBlXHgxYzdceDBlZFx4OTVJXHgwY1x4YWFKXHhhNFx4MThMXHgxMFx4MDUjXHg5Y1x4YWZceGJhXHhiYy9ceDk3XHg4YSNDXHhjOFx4ZTFceDhjV1x4ZjlceGUyXHhkMFx4ZDZNXHhhN1x4OGJYYTxlXHg4NHRceGNiTFx4YjNceGE3XHhkOVx4Y2RceGQxXHhjYlx4ODQuXHhhZlx4YjNceGFiXHhhYlx4YWRgbn1ceGEwbGhcdEUsXHg4ZVpceDE1XHgxN1ZIPlx4ODhceGU1XHhjZDlnZDZceDBiXG5ceGU5XHg5Ylx4ZDVceDhhXHg5OVx4ZjdceDA4LktceDhldlx4ZmJceGY3eHdceGJiXHhkZlx4YTFceDkyXHhmMVx4ZGR8LyI7XHhhMlx4YmFceDlmXHhkNVx4YjEjQVx4YjZceGY2XHhiM29ceGM5XHhjNXlcXFx4ZWJPXHhlN1x4ODVceDlhXHhiY1x4YjZmOFx4OTUyXHhkNVx4ZDciJVx4ODk+VixceGY3XHhhNnpceGUyXHg5Zlx4YTNceGRmXHgxMVx4MTEiXHhkNkUpSVx4YTlceDEzXlx4Y2FceGYzclx4ZDBceDAzVVx4OTIyXHhmMjZceGVjXHhiNlx4ZWRceDhiXHhjM1VceDEzXHg5ZFx4YzVceDE3MFx4YTRceGZhXlx4OTJceGFjREZceDhhXHg5N1x4ZDZceDE5XHhmZVx4ZGRceGI4XHhiZFx4MWFceDlhXHgxOVx4YTNceDgwYW5rUlx4OGJceGU1XHhkODNdXHhhOVx4YzZceDA4XHg4MmZceGY2XHhiOSI2bCRceGI4akBceGMwXHg4YVx4YjBsMS4uXHhiYWtceDgzbHNceDE1XHhiY1x4ZjRceGMxXHgxM1x4YmVceGY4RVx4YjhceDlkXHJceGE4XHg5ZGtceDg0XHhkM25ceGZhXHhhY1FceDA3XHhiMSV5XHhhYXZceGI0XHgwOFx4ZTB6XHgxYlx4MTZceGY1XHgwNFx4ZTlceGNjXHhiOVx4MDh6XHgxZW43LkdceGZjXVx4YzlceDE0XHhlMUJAXHhiYiE4YCcKKyAgICBEQVRBX0NSTEYgPSAnQlpoOTFBWSZTWVx4YWV6XHhiYk5ceDAwXHgwMUhceGRmXHg4MFx4MDBceDEyQFx4MDJceGZmXHhmMFx4MDFceDA3blx4MDA/XHhlN1x4ZmZceGUwQFx4MDFceGJjXHhjNmBceDg2Klx4OGQ9TVx4YTlceDlhXHg4Nlx4ZDBMQFx4MGZJXHhhNiFceGExXHgxM1x4YzhceDg4amRpXHg4ZEBceDAzQFx4MWFceDFhXHgwY1x4MGNceDgzIFx4MDBceGM0aDJceDE5XHgwMVx4ODJEXHg4NGVcdFx4ZThceDk5XHg4OVx4MTlceDFhaFx4MDBcclx4MWFceDExXHhhZlx4OWJceDBmR1x4ZjUoXHgxYlx4MWY/XHRceDEyXHhjZlx4YjVceGZjXHg5NUVceDAwcHNceDg5XHgxMl5ceGE0XHhkZFx4YTImXHgwNShceDg3XHgwNFx4OThceDg5dVx4ZTQwJVx4YjZceDE5XCdceDhjXHhjNFx4ODlceGNhXHgwN1x4MGVceDFiIVx4OTFVSUZVJUNceDk5NCFESVx4ZDJceGZhXHhmMFx4ZjFOOFdceGRlXHgxM0FceGY1XHg5Y3IlP1x4OWYzO0k0NUFceGQxXHg4YlRceGIxPGxceGJhXHhjYl9ceGMwMHhZXHgxN3JceDE3XHg4OFx4MDhceDA4QFx4YTBccnlAXHgxMFx4MDQkKWBceGYyXHhjZVx4ODl6XHhiMHNceGVjXHg5Yi5pV1x4OWRceDgxXHhiNS0rdFx4OWZceDFhXCdceDk3ZEJceGY1eFx4YjVceGJlLlsuXHhkN1x4MGVceDgxXHhlN1x4MDhceDFjTmBceDg4XHgxMFx4Y2FceDg3XHhjMyEiXHg4MFx4OTJSXHhhMS9ceGQxXHhjMFx4ZTZtZlx4YWNceGJkXHg5OVx4Y2NhXHhiM1x4ODc4MD5ceGE0XHhjN1x4OGRceDFhXFwiXHhhZFx4YTFceGFieUJnXHgxNVx4YjlsXHg4OFx4ODhceDkxayJceDk0XHhhNFx4ZDRceDg5XHhhZSpceGE2XHgwYlx4MTBceDBjXHhkNlx4ZDRtXHhlODZceGVjXHhiNWpceDhhXHg4NmpcJztceGNhLlx4MDFJXHhmMlx4YWFKXHhlOFx4ODhceDhjVSt0M1x4ZmJceDBjXG5ceGEzM1x4MTNyMlxyXHgxNlx4ZTBceGIzKFx4YmZceDFkXHg4M3JceGU3TVx4ZjBEXHgxMzY1XHhkOFx4ODhceGQzXHhhNFx4OTJceGNiMlx4MDZceDA0XFxceGMxXHhiMFx4ZWEvL1x4YmVrJlx4ZDhceGU2K3RceGU1XHhhMVx4MTNceGFkYVx4MTZceGRlcjUid11ceGEyaVx4YjdbXHg5N1IgXHhlMklUXHhjZDtaXHgwNGRrNFx4YWRceDhhXHRceGQzXHg4MXpceDEwXHhmMTpeYFx4YWJceDFmXHhjNVx4ZGNceDkxTlx4MTQkK1x4OWVceGFlXHhkM1x4ODAnCisgICAgRU1QVFlfREFUQSA9ICdCWmg5XHgxN3JFOFBceDkwXHgwMFx4MDBceDAwXHgwMCcKKworICAgIGlmIGhhc19jbWRsaW5lX2J1bnppcDI6CisgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcG9wID0gc3VicHJvY2Vzcy5Qb3BlbigiYnVuemlwMiIsIHNoZWxsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgcG9wLnN0ZGluLndyaXRlKGRhdGEpCisgICAgICAgICAgICBwb3Auc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgcmV0ID0gcG9wLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgIHBvcC5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgaWYgcG9wLndhaXQoKSAhPSAwOgorICAgICAgICAgICAgICAgIHJldCA9IGJ6Mi5kZWNvbXByZXNzKGRhdGEpCisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAgICBlbHNlOgorICAgICAgICAjIGJ1bnppcDIgaXNuJ3QgYXZhaWxhYmxlIHRvIHJ1biBvbiBXaW5kb3dzLgorICAgICAgICBkZWYgZGVjb21wcmVzcyhzZWxmLCBkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBiejIuZGVjb21wcmVzcyhkYXRhKQorCisKK2NsYXNzIEJaMkZpbGVUZXN0KEJhc2VUZXN0KToKKyAgICAiVGVzdCBCWjJGaWxlIHR5cGUgbWlzY2VsbGFuZW91cyBtZXRob2RzLiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IFRFU1RGTgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzZWxmLmZpbGVuYW1lKToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLmZpbGVuYW1lKQorCisgICAgZGVmIGNyZWF0ZVRlbXBGaWxlKHNlbGYsIGNybGY9MCk6CisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgaWYgY3JsZjoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5EQVRBX0NSTEYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuREFUQQorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorCisgICAgZGVmIHRlc3RSZWFkKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUucmVhZCgpIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVCkKKworICAgIGRlZiB0ZXN0UmVhZDAoc2VsZik6CisgICAgICAgICMgVGVzdCBCQloyRmlsZS5yZWFkKDApIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKDApLCAiIikKKworICAgIGRlZiB0ZXN0UmVhZENodW5rMTAoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkKCkgaW4gY2h1bmtzIG9mIDEwIGJ5dGVzIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICB0ZXh0ID0gJycKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgc3RyID0gYnoyZi5yZWFkKDEwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzdHI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdGV4dCArPSBzdHIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgc2VsZi5URVhUKQorCisgICAgZGVmIHRlc3RSZWFkMTAwKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUucmVhZCgxMDApIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgxMDApLCBzZWxmLlRFWFRbOjEwMF0pCisKKyAgICBkZWYgdGVzdFJlYWRMaW5lKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUucmVhZGxpbmUoKSIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWRsaW5lLCBOb25lKQorICAgICAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2lvLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZSgpLCBsaW5lKQorCisgICAgZGVmIHRlc3RSZWFkTGluZXMoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkbGluZXMoKSIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWRsaW5lcywgTm9uZSkKKyAgICAgICAgICAgIHNpbyA9IFN0cmluZ0lPKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZXMoKSwgc2lvLnJlYWRsaW5lcygpKQorCisgICAgZGVmIHRlc3RJdGVyYXRvcihzZWxmKToKKyAgICAgICAgIyAiVGVzdCBpdGVyKEJaMkZpbGUpIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzaW8gPSBTdHJpbmdJTyhzZWxmLlRFWFQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXRlcihiejJmKSksIHNpby5yZWFkbGluZXMoKSkKKworICAgIGRlZiB0ZXN0Q2xvc2VkSXRlcmF0b3JEZWFkbG9jayhzZWxmKToKKyAgICAgICAgIyAiVGVzdCB0aGF0IGl0ZXJhdGlvbiBvbiBhIGNsb3NlZCBiejJmaWxlIHJlbGVhc2VzIHRoZSBsb2NrLiIKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzMwOQorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYubmV4dCkKKyAgICAgICAgIyBUaGlzIGNhbGwgd2lsbCBkZWFkbG9jayBvZiB0aGUgYWJvdmUgLm5leHQgY2FsbCBmYWlsZWQgdG8KKyAgICAgICAgIyByZWxlYXNlIHRoZSBsb2NrLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLnJlYWRsaW5lcykKKworICAgIGRlZiB0ZXN0WFJlYWRMaW5lcyhzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnhyZWFkbGluZXMoKSIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHNpbyA9IFN0cmluZ0lPKHNlbGYuVEVYVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGJ6MmYueHJlYWRsaW5lcygpKSwgc2lvLnJlYWRsaW5lcygpKQorICAgICAgICBiejJmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VW5pdmVyc2FsTmV3bGluZXNMRihzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWQoKSB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lcyAoXFxuKSIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyVSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLm5ld2xpbmVzLCAiXG4iKQorICAgICAgICBiejJmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VW5pdmVyc2FsTmV3bGluZXNDUkxGKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUucmVhZCgpIHdpdGggdW5pdmVyc2FsIG5ld2xpbmVzIChcXHJcXG4pIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKGNybGY9MSkKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInJVIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYubmV3bGluZXMsICJcclxuIikKKyAgICAgICAgYnoyZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFdyaXRlKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUud3JpdGUoKSIKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi53cml0ZSkKKyAgICAgICAgICAgIGJ6MmYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKSwgc2VsZi5URVhUKQorCisgICAgZGVmIHRlc3RXcml0ZUNodW5rczEwKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUud3JpdGUoKSB3aXRoIGNodW5rcyBvZiAxMCBieXRlcyIKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKKyAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHN0ciA9IHNlbGYuVEVYVFtuKjEwOihuKzEpKjEwXQorICAgICAgICAgICAgICAgIGlmIG5vdCBzdHI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgYnoyZi53cml0ZShzdHIpCisgICAgICAgICAgICAgICAgbiArPSAxCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLCBzZWxmLlRFWFQpCisKKyAgICBkZWYgdGVzdFdyaXRlTGluZXMoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS53cml0ZWxpbmVzKCkiCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYud3JpdGVsaW5lcykKKyAgICAgICAgICAgIHNpbyA9IFN0cmluZ0lPKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIGJ6MmYud3JpdGVsaW5lcyhzaW8ucmVhZGxpbmVzKCkpCisgICAgICAgICMgcGF0Y2ggIzE1MzU1MDAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi53cml0ZWxpbmVzLCBbImEiXSkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSksIHNlbGYuVEVYVCkKKworICAgIGRlZiB0ZXN0V3JpdGVNZXRob2RzT25SZWFkT25seUZpbGUoc2VsZik6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLndyaXRlKCJhYmMiKQorCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAiciIpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiejJmLndyaXRlLCAiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiejJmLndyaXRlbGluZXMsIFsiYSJdKQorCisgICAgZGVmIHRlc3RTZWVrRm9yd2FyZChzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoMTUwLCAwKSIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnNlZWspCisgICAgICAgICAgICBiejJmLnNlZWsoMTUwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUWzE1MDpdKQorCisgICAgZGVmIHRlc3RTZWVrQmFja3dhcmRzKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygtMTUwLCAxKSIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5yZWFkKDUwMCkKKyAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUWzUwMC0xNTA6XSkKKworICAgIGRlZiB0ZXN0U2Vla0JhY2t3YXJkc0Zyb21FbmQoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5zZWVrKC0xNTAsIDIpIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLnNlZWsoLTE1MCwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFtsZW4oc2VsZi5URVhUKS0xNTA6XSkKKworICAgIGRlZiB0ZXN0U2Vla1Bvc3RFbmQoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5zZWVrKDE1MDAwMCkiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIGJ6MmYuc2VlaygxNTAwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYudGVsbCgpLCBsZW4oc2VsZi5URVhUKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksICIiKQorCisgICAgZGVmIHRlc3RTZWVrUG9zdEVuZFR3aWNlKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygxNTAwMDApIHR3aWNlIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLnNlZWsoMTUwMDAwKQorICAgICAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi50ZWxsKCksIGxlbihzZWxmLlRFWFQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgIiIpCisKKyAgICBkZWYgdGVzdFNlZWtQcmVTdGFydChzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoLTE1MCwgMCkiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnRlbGwoKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVCkKKworICAgIGRlZiB0ZXN0T3BlbkRlbChzZWxmKToKKyAgICAgICAgIyAiVGVzdCBvcGVuaW5nIGFuZCBkZWxldGluZyBhIGZpbGUgbWFueSB0aW1lcyIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDAwMCk6CisgICAgICAgICAgICBvID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgZGVsIG8KKworICAgIGRlZiB0ZXN0T3Blbk5vbmV4aXN0ZW50KHNlbGYpOgorICAgICAgICAjICJUZXN0IG9wZW5pbmcgYSBub25leGlzdGVudCBmaWxlIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBCWjJGaWxlLCAiL25vbi9leGlzdGVudCIpCisKKyAgICBkZWYgdGVzdE1vZGVVKHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMTE5NDE4MTogYnoyLkJaMkZpbGUgb3BlbmVkIGZvciB3cml0ZSB3aXRoIG1vZGUgIlUiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lLCAiVSIpCisgICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICBmID0gZmlsZShzZWxmLmZpbGVuYW1lKQorICAgICAgICBmLnNlZWsoMCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgbGVuKHNlbGYuREFUQSkpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RCdWcxMTkxMDQzKHNlbGYpOgorICAgICAgICAjIHJlYWRsaW5lcygpIGZvciBmaWxlcyBjb250YWluaW5nIG5vIG5ld2xpbmUKKyAgICAgICAgZGF0YSA9ICdCWmg5MUFZJlNZXHhkOWJceDg5XVx4MDBceDAwXHgwMFx4MDNceDgwXHgwNFx4MDBceDAyXHgwMFx4MGNceDAwIFx4MDAhXHg5YWgzTVx4MTM8XVx4YzlceDE0XHhlMUJDZVx4OGEldCcKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgbGluZXMgPSBiejJmLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsnVGVzdCddKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHhsaW5lcyA9IGxpc3QoYnoyZi5yZWFkbGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4bGluZXMsIFsnVGVzdCddKQorCisgICAgZGVmIHRlc3RDb250ZXh0UHJvdG9jb2woc2VsZik6CisgICAgICAgICMgQloyRmlsZSBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sCisgICAgICAgIGYgPSBOb25lCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInh4eCIpCisgICAgICAgIGYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiX19lbnRlcl9fIG9uIGEgY2xvc2VkIGZpbGUgZGlkbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIjEgLy8gMCBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RUaHJlYWRpbmcoc2VsZik6CisgICAgICAgICMgVXNpbmcgYSBCWjJGaWxlIGZyb20gc2V2ZXJhbCB0aHJlYWRzIGRvZXNuJ3QgZGVhZGxvY2sgKGlzc3VlICM3MjA1KS4KKyAgICAgICAgZGF0YSA9ICIxIiAqIDIqKjIwCisgICAgICAgIG50aHJlYWRzID0gMTAKKyAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZGVmIGNvbXAoKToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jb21wKSBmb3IgaSBpbiByYW5nZShudGhyZWFkcyldCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICB0LmpvaW4oKQorCisgICAgZGVmIHRlc3RNaXhlZEl0ZXJhdGlvblJlYWRzKHNlbGYpOgorICAgICAgICAjIElzc3VlICM4Mzk3OiBtaXhlZCBpdGVyYXRpb24gYW5kIHJlYWRzIHNob3VsZCBiZSBmb3JiaWRkZW4uCisgICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICMgVGhlIGludGVybmFsIGJ1ZmZlciBzaXplIGlzIGhhcmQtd2lyZWQgdG8gODE5MiBieXRlcywgd2UgbXVzdAorICAgICAgICAgICAgIyB3cml0ZSBvdXQgbW9yZSB0aGFuIHRoYXQgZm9yIHRoZSB0ZXN0IHRvIHN0b3AgaGFsZiB0aHJvdWdoCisgICAgICAgICAgICAjIHRoZSBidWZmZXIuCisgICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCAqIDEwMCkKKyAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgbmV4dChmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkbGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGxpbmVzKQorCitjbGFzcyBCWjJDb21wcmVzc29yVGVzdChCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RDb21wcmVzcyhzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJDb21wcmVzc29yLmNvbXByZXNzKCkvZmx1c2goKSIKKyAgICAgICAgYnoyYyA9IEJaMkNvbXByZXNzb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmMuY29tcHJlc3MpCisgICAgICAgIGRhdGEgPSBiejJjLmNvbXByZXNzKHNlbGYuVEVYVCkKKyAgICAgICAgZGF0YSArPSBiejJjLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZGF0YSksIHNlbGYuVEVYVCkKKworICAgIGRlZiB0ZXN0Q29tcHJlc3NFbXB0eVN0cmluZyhzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJDb21wcmVzc29yLmNvbXByZXNzKCkvZmx1c2goKSBvZiBlbXB0eSBzdHJpbmciCisgICAgICAgIGJ6MmMgPSBCWjJDb21wcmVzc29yKCkKKyAgICAgICAgZGF0YSA9IGJ6MmMuY29tcHJlc3MoJycpCisgICAgICAgIGRhdGEgKz0gYnoyYy5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5FTVBUWV9EQVRBKQorCisgICAgZGVmIHRlc3RDb21wcmVzc0NodW5rczEwKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkNvbXByZXNzb3IuY29tcHJlc3MoKS9mbHVzaCgpIHdpdGggY2h1bmtzIG9mIDEwIGJ5dGVzIgorICAgICAgICBiejJjID0gQloyQ29tcHJlc3NvcigpCisgICAgICAgIG4gPSAwCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3RyID0gc2VsZi5URVhUW24qMTA6KG4rMSkqMTBdCisgICAgICAgICAgICBpZiBub3Qgc3RyOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkYXRhICs9IGJ6MmMuY29tcHJlc3Moc3RyKQorICAgICAgICAgICAgbiArPSAxCisgICAgICAgIGRhdGEgKz0gYnoyYy5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGRhdGEpLCBzZWxmLlRFWFQpCisKKyAgICBAYmlnbWVtdGVzdChfNEcsIG1lbXVzZT0xLjI1KQorICAgIGRlZiB0ZXN0QmlnbWVtKHNlbGYsIHNpemUpOgorICAgICAgICB0ZXh0ID0gImEiICogc2l6ZQorICAgICAgICBiejJjID0gYnoyLkJaMkNvbXByZXNzb3IoKQorICAgICAgICBkYXRhID0gYnoyYy5jb21wcmVzcyh0ZXh0KSArIGJ6MmMuZmx1c2goKQorICAgICAgICBkZWwgdGV4dAorICAgICAgICB0ZXh0ID0gc2VsZi5kZWNvbXByZXNzKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRleHQpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuc3RyaXAoImEiKSwgIiIpCisKKworY2xhc3MgQloyRGVjb21wcmVzc29yVGVzdChCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfQ29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQloyRGVjb21wcmVzc29yLCA0MikKKworICAgIGRlZiB0ZXN0RGVjb21wcmVzcyhzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzcygpIgorICAgICAgICBiejJkID0gQloyRGVjb21wcmVzc29yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJkLmRlY29tcHJlc3MpCisgICAgICAgIHRleHQgPSBiejJkLmRlY29tcHJlc3Moc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIHNlbGYuVEVYVCkKKworICAgIGRlZiB0ZXN0RGVjb21wcmVzc0NodW5rczEwKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkRlY29tcHJlc3Nvci5kZWNvbXByZXNzKCkgd2l0aCBjaHVua3Mgb2YgMTAgYnl0ZXMiCisgICAgICAgIGJ6MmQgPSBCWjJEZWNvbXByZXNzb3IoKQorICAgICAgICB0ZXh0ID0gJycKKyAgICAgICAgbiA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHN0ciA9IHNlbGYuREFUQVtuKjEwOihuKzEpKjEwXQorICAgICAgICAgICAgaWYgbm90IHN0cjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGV4dCArPSBiejJkLmRlY29tcHJlc3Moc3RyKQorICAgICAgICAgICAgbiArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgc2VsZi5URVhUKQorCisgICAgZGVmIHRlc3REZWNvbXByZXNzVW51c2VkRGF0YShzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzcygpIHdpdGggdW51c2VkIGRhdGEiCisgICAgICAgIGJ6MmQgPSBCWjJEZWNvbXByZXNzb3IoKQorICAgICAgICB1bnVzZWRfZGF0YSA9ICJ0aGlzIGlzIHVudXNlZCBkYXRhIgorICAgICAgICB0ZXh0ID0gYnoyZC5kZWNvbXByZXNzKHNlbGYuREFUQSt1bnVzZWRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzZWxmLlRFWFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZC51bnVzZWRfZGF0YSwgdW51c2VkX2RhdGEpCisKKyAgICBkZWYgdGVzdEVPRkVycm9yKHNlbGYpOgorICAgICAgICAjICJDYWxsaW5nIEJaMkRlY29tcHJlc3Nvci5kZWNvbXByZXNzKCkgYWZ0ZXIgRU9TIG11c3QgcmFpc2UgRU9GRXJyb3IiCisgICAgICAgIGJ6MmQgPSBCWjJEZWNvbXByZXNzb3IoKQorICAgICAgICB0ZXh0ID0gYnoyZC5kZWNvbXByZXNzKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGJ6MmQuZGVjb21wcmVzcywgImFueXRoaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGJ6MmQuZGVjb21wcmVzcywgIiIpCisKKyAgICBAYmlnbWVtdGVzdChfNEcsIG1lbXVzZT0xLjI1KQorICAgIGRlZiB0ZXN0QmlnbWVtKHNlbGYsIHNpemUpOgorICAgICAgICAjIElzc3VlICMxNDM5ODogZGVjb21wcmVzc2lvbiBmYWlscyB3aGVuIG91dHB1dCBkYXRhIGlzID49MkdCLgorICAgICAgICBpZiBzaXplIDwgXzRHOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiVGVzdCBuZWVkcyA1R0Igb2YgbWVtb3J5IHRvIHJ1bi4iKQorICAgICAgICBjb21wcmVzc2VkID0gYnoyLmNvbXByZXNzKCJhIiAqIF80RykKKyAgICAgICAgdGV4dCA9IGJ6Mi5CWjJEZWNvbXByZXNzb3IoKS5kZWNvbXByZXNzKGNvbXByZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRleHQpLCBfNEcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5zdHJpcCgiYSIpLCAiIikKKworCitjbGFzcyBGdW5jVGVzdChCYXNlVGVzdCk6CisgICAgIlRlc3QgbW9kdWxlIGZ1bmN0aW9ucyIKKworICAgIGRlZiB0ZXN0Q29tcHJlc3Moc2VsZik6CisgICAgICAgICMgIlRlc3QgY29tcHJlc3MoKSBmdW5jdGlvbiIKKyAgICAgICAgZGF0YSA9IGJ6Mi5jb21wcmVzcyhzZWxmLlRFWFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGRhdGEpLCBzZWxmLlRFWFQpCisKKyAgICBkZWYgdGVzdENvbXByZXNzRW1wdHlTdHJpbmcoc2VsZik6CisgICAgICAgICMgIlRlc3QgY29tcHJlc3MoKSBvZiBlbXB0eSBzdHJpbmciCisgICAgICAgIHRleHQgPSBiejIuY29tcHJlc3MoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgc2VsZi5FTVBUWV9EQVRBKQorCisgICAgZGVmIHRlc3REZWNvbXByZXNzKHNlbGYpOgorICAgICAgICAjICJUZXN0IGRlY29tcHJlc3MoKSBmdW5jdGlvbiIKKyAgICAgICAgdGV4dCA9IGJ6Mi5kZWNvbXByZXNzKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzZWxmLlRFWFQpCisKKyAgICBkZWYgdGVzdERlY29tcHJlc3NFbXB0eShzZWxmKToKKyAgICAgICAgIyAiVGVzdCBkZWNvbXByZXNzKCkgZnVuY3Rpb24gd2l0aCBlbXB0eSBzdHJpbmciCisgICAgICAgIHRleHQgPSBiejIuZGVjb21wcmVzcygiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAiIikKKworICAgIGRlZiB0ZXN0RGVjb21wcmVzc1RvRW1wdHlTdHJpbmcoc2VsZik6CisgICAgICAgICMgIlRlc3QgZGVjb21wcmVzcygpIG9mIG1pbmltYWwgYnoyIGRhdGEgdG8gZW1wdHkgc3RyaW5nIgorICAgICAgICB0ZXh0ID0gYnoyLmRlY29tcHJlc3Moc2VsZi5FTVBUWV9EQVRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICcnKQorCisgICAgZGVmIHRlc3REZWNvbXByZXNzSW5jb21wbGV0ZShzZWxmKToKKyAgICAgICAgIyAiVGVzdCBkZWNvbXByZXNzKCkgZnVuY3Rpb24gd2l0aCBpbmNvbXBsZXRlIGRhdGEiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6Mi5kZWNvbXByZXNzLCBzZWxmLkRBVEFbOi0xMF0pCisKKyAgICBAYmlnbWVtdGVzdChfNEcsIG1lbXVzZT0xLjI1KQorICAgIGRlZiB0ZXN0Q29tcHJlc3NCaWdtZW0oc2VsZiwgc2l6ZSk6CisgICAgICAgIHRleHQgPSAiYSIgKiBzaXplCisgICAgICAgIGRhdGEgPSBiejIuY29tcHJlc3ModGV4dCkKKyAgICAgICAgZGVsIHRleHQKKyAgICAgICAgdGV4dCA9IHNlbGYuZGVjb21wcmVzcyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXh0KSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnN0cmlwKCJhIiksICIiKQorCisgICAgQGJpZ21lbXRlc3QoXzRHLCBtZW11c2U9MS4yNSkKKyAgICBkZWYgdGVzdERlY29tcHJlc3NCaWdtZW0oc2VsZiwgc2l6ZSk6CisgICAgICAgICMgSXNzdWUgIzE0Mzk4OiBkZWNvbXByZXNzaW9uIGZhaWxzIHdoZW4gb3V0cHV0IGRhdGEgaXMgPj0yR0IuCisgICAgICAgIGlmIHNpemUgPCBfNEc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJUZXN0IG5lZWRzIDVHQiBvZiBtZW1vcnkgdG8gcnVuLiIpCisgICAgICAgIGNvbXByZXNzZWQgPSBiejIuY29tcHJlc3MoImEiICogXzRHKQorICAgICAgICB0ZXh0ID0gYnoyLmRlY29tcHJlc3MoY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGV4dCksIF80RykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnN0cmlwKCJhIiksICIiKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgQloyRmlsZVRlc3QsCisgICAgICAgIEJaMkNvbXByZXNzb3JUZXN0LAorICAgICAgICBCWjJEZWNvbXByZXNzb3JUZXN0LAorICAgICAgICBGdW5jVGVzdAorICAgICkKKyAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKKworIyB2aW06dHM9NDpzdz00CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NhbGVuZGFyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZmI3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weQpAQCAtMCwwICsxLDQ3NSBAQAoraW1wb3J0IGNhbGVuZGFyCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBsb2NhbGUKK2ltcG9ydCBkYXRldGltZQorCisKK3Jlc3VsdF8yMDA0X3RleHQgPSAiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDA0CisKKyAgICAgIEphbnVhcnkgICAgICAgICAgICAgICAgICAgRmVicnVhcnkgICAgICAgICAgICAgICAgICAgTWFyY2gKK01vIFR1IFdlIFRoIEZyIFNhIFN1ICAgICAgTW8gVHUgV2UgVGggRnIgU2EgU3UgICAgICBNbyBUdSBXZSBUaCBGciBTYSBTdQorICAgICAgICAgIDEgIDIgIDMgIDQgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAxICAyICAzICA0ICA1ICA2ICA3CisgNSAgNiAgNyAgOCAgOSAxMCAxMSAgICAgICAyICAzICA0ICA1ICA2ICA3ICA4ICAgICAgIDggIDkgMTAgMTEgMTIgMTMgMTQKKzEyIDEzIDE0IDE1IDE2IDE3IDE4ICAgICAgIDkgMTAgMTEgMTIgMTMgMTQgMTUgICAgICAxNSAxNiAxNyAxOCAxOSAyMCAyMQorMTkgMjAgMjEgMjIgMjMgMjQgMjUgICAgICAxNiAxNyAxOCAxOSAyMCAyMSAyMiAgICAgIDIyIDIzIDI0IDI1IDI2IDI3IDI4CisyNiAyNyAyOCAyOSAzMCAzMSAgICAgICAgIDIzIDI0IDI1IDI2IDI3IDI4IDI5ICAgICAgMjkgMzAgMzEKKworICAgICAgIEFwcmlsICAgICAgICAgICAgICAgICAgICAgIE1heSAgICAgICAgICAgICAgICAgICAgICAgSnVuZQorTW8gVHUgV2UgVGggRnIgU2EgU3UgICAgICBNbyBUdSBXZSBUaCBGciBTYSBTdSAgICAgIE1vIFR1IFdlIFRoIEZyIFNhIFN1CisgICAgICAgICAgMSAgMiAgMyAgNCAgICAgICAgICAgICAgICAgICAgICAxICAyICAgICAgICAgIDEgIDIgIDMgIDQgIDUgIDYKKyA1ICA2ICA3ICA4ICA5IDEwIDExICAgICAgIDMgIDQgIDUgIDYgIDcgIDggIDkgICAgICAgNyAgOCAgOSAxMCAxMSAxMiAxMworMTIgMTMgMTQgMTUgMTYgMTcgMTggICAgICAxMCAxMSAxMiAxMyAxNCAxNSAxNiAgICAgIDE0IDE1IDE2IDE3IDE4IDE5IDIwCisxOSAyMCAyMSAyMiAyMyAyNCAyNSAgICAgIDE3IDE4IDE5IDIwIDIxIDIyIDIzICAgICAgMjEgMjIgMjMgMjQgMjUgMjYgMjcKKzI2IDI3IDI4IDI5IDMwICAgICAgICAgICAgMjQgMjUgMjYgMjcgMjggMjkgMzAgICAgICAyOCAyOSAzMAorICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorCisgICAgICAgIEp1bHkgICAgICAgICAgICAgICAgICAgICBBdWd1c3QgICAgICAgICAgICAgICAgICBTZXB0ZW1iZXIKK01vIFR1IFdlIFRoIEZyIFNhIFN1ICAgICAgTW8gVHUgV2UgVGggRnIgU2EgU3UgICAgICBNbyBUdSBXZSBUaCBGciBTYSBTdQorICAgICAgICAgIDEgIDIgIDMgIDQgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAxICAyICAzICA0ICA1CisgNSAgNiAgNyAgOCAgOSAxMCAxMSAgICAgICAyICAzICA0ICA1ICA2ICA3ICA4ICAgICAgIDYgIDcgIDggIDkgMTAgMTEgMTIKKzEyIDEzIDE0IDE1IDE2IDE3IDE4ICAgICAgIDkgMTAgMTEgMTIgMTMgMTQgMTUgICAgICAxMyAxNCAxNSAxNiAxNyAxOCAxOQorMTkgMjAgMjEgMjIgMjMgMjQgMjUgICAgICAxNiAxNyAxOCAxOSAyMCAyMSAyMiAgICAgIDIwIDIxIDIyIDIzIDI0IDI1IDI2CisyNiAyNyAyOCAyOSAzMCAzMSAgICAgICAgIDIzIDI0IDI1IDI2IDI3IDI4IDI5ICAgICAgMjcgMjggMjkgMzAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMzAgMzEKKworICAgICAgT2N0b2JlciAgICAgICAgICAgICAgICAgICBOb3ZlbWJlciAgICAgICAgICAgICAgICAgIERlY2VtYmVyCitNbyBUdSBXZSBUaCBGciBTYSBTdSAgICAgIE1vIFR1IFdlIFRoIEZyIFNhIFN1ICAgICAgTW8gVHUgV2UgVGggRnIgU2EgU3UKKyAgICAgICAgICAgICAxICAyICAzICAgICAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgICAgICAgICAgICAgMSAgMiAgMyAgNCAgNQorIDQgIDUgIDYgIDcgIDggIDkgMTAgICAgICAgOCAgOSAxMCAxMSAxMiAxMyAxNCAgICAgICA2ICA3ICA4ICA5IDEwIDExIDEyCisxMSAxMiAxMyAxNCAxNSAxNiAxNyAgICAgIDE1IDE2IDE3IDE4IDE5IDIwIDIxICAgICAgMTMgMTQgMTUgMTYgMTcgMTggMTkKKzE4IDE5IDIwIDIxIDIyIDIzIDI0ICAgICAgMjIgMjMgMjQgMjUgMjYgMjcgMjggICAgICAyMCAyMSAyMiAyMyAyNCAyNSAyNgorMjUgMjYgMjcgMjggMjkgMzAgMzEgICAgICAyOSAzMCAgICAgICAgICAgICAgICAgICAgIDI3IDI4IDI5IDMwIDMxCisiIiIKKworcmVzdWx0XzIwMDRfaHRtbCA9ICIiIgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYXNjaWkiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1hc2NpaSIgLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImNhbGVuZGFyLmNzcyIgLz4KKzx0aXRsZT5DYWxlbmRhciBmb3IgMjAwNDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InllYXIiPgorPHRyPjx0aCBjb2xzcGFuPSIzIiBjbGFzcz0ieWVhciI+MjAwNDwvdGg+PC90cj48dHI+PHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9Im1vbnRoIj4KKzx0cj48dGggY29sc3Bhbj0iNyIgY2xhc3M9Im1vbnRoIj5KYW51YXJ5PC90aD48L3RyPgorPHRyPjx0aCBjbGFzcz0ibW9uIj5Nb248L3RoPjx0aCBjbGFzcz0idHVlIj5UdWU8L3RoPjx0aCBjbGFzcz0id2VkIj5XZWQ8L3RoPjx0aCBjbGFzcz0idGh1Ij5UaHU8L3RoPjx0aCBjbGFzcz0iZnJpIj5Gcmk8L3RoPjx0aCBjbGFzcz0ic2F0Ij5TYXQ8L3RoPjx0aCBjbGFzcz0ic3VuIj5TdW48L3RoPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjE8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yPC90ZD48dGQgY2xhc3M9InNhdCI+MzwvdGQ+PHRkIGNsYXNzPSJzdW4iPjQ8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjU8L3RkPjx0ZCBjbGFzcz0idHVlIj42PC90ZD48dGQgY2xhc3M9IndlZCI+NzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjg8L3RkPjx0ZCBjbGFzcz0iZnJpIj45PC90ZD48dGQgY2xhc3M9InNhdCI+MTA8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xMTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTI8L3RkPjx0ZCBjbGFzcz0idHVlIj4xMzwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE0PC90ZD48dGQgY2xhc3M9InRodSI+MTU8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xNjwvdGQ+PHRkIGNsYXNzPSJzYXQiPjE3PC90ZD48dGQgY2xhc3M9InN1biI+MTg8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE5PC90ZD48dGQgY2xhc3M9InR1ZSI+MjA8L3RkPjx0ZCBjbGFzcz0id2VkIj4yMTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjIyPC90ZD48dGQgY2xhc3M9ImZyaSI+MjM8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yNDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjI1PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yNjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjI3PC90ZD48dGQgY2xhc3M9IndlZCI+Mjg8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yOTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjMwPC90ZD48dGQgY2xhc3M9InNhdCI+MzE8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L3RkPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJtb250aCI+Cis8dHI+PHRoIGNvbHNwYW49IjciIGNsYXNzPSJtb250aCI+RmVicnVhcnk8L3RoPjwvdHI+Cis8dHI+PHRoIGNsYXNzPSJtb24iPk1vbjwvdGg+PHRoIGNsYXNzPSJ0dWUiPlR1ZTwvdGg+PHRoIGNsYXNzPSJ3ZWQiPldlZDwvdGg+PHRoIGNsYXNzPSJ0aHUiPlRodTwvdGg+PHRoIGNsYXNzPSJmcmkiPkZyaTwvdGg+PHRoIGNsYXNzPSJzYXQiPlNhdDwvdGg+PHRoIGNsYXNzPSJzdW4iPlN1bjwvdGg+PC90cj4KKzx0cj48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9InN1biI+MTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjM8L3RkPjx0ZCBjbGFzcz0id2VkIj40PC90ZD48dGQgY2xhc3M9InRodSI+NTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjY8L3RkPjx0ZCBjbGFzcz0ic2F0Ij43PC90ZD48dGQgY2xhc3M9InN1biI+ODwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+OTwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjEwPC90ZD48dGQgY2xhc3M9IndlZCI+MTE8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xMjwvdGQ+PHRkIGNsYXNzPSJmcmkiPjEzPC90ZD48dGQgY2xhc3M9InNhdCI+MTQ8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xNTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTY8L3RkPjx0ZCBjbGFzcz0idHVlIj4xNzwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE4PC90ZD48dGQgY2xhc3M9InRodSI+MTk8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yMDwvdGQ+PHRkIGNsYXNzPSJzYXQiPjIxPC90ZD48dGQgY2xhc3M9InN1biI+MjI8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjIzPC90ZD48dGQgY2xhc3M9InR1ZSI+MjQ8L3RkPjx0ZCBjbGFzcz0id2VkIj4yNTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI2PC90ZD48dGQgY2xhc3M9ImZyaSI+Mjc8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yODwvdGQ+PHRkIGNsYXNzPSJzdW4iPjI5PC90ZD48L3RyPgorPC90YWJsZT4KKzwvdGQ+PHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9Im1vbnRoIj4KKzx0cj48dGggY29sc3Bhbj0iNyIgY2xhc3M9Im1vbnRoIj5NYXJjaDwvdGg+PC90cj4KKzx0cj48dGggY2xhc3M9Im1vbiI+TW9uPC90aD48dGggY2xhc3M9InR1ZSI+VHVlPC90aD48dGggY2xhc3M9IndlZCI+V2VkPC90aD48dGggY2xhc3M9InRodSI+VGh1PC90aD48dGggY2xhc3M9ImZyaSI+RnJpPC90aD48dGggY2xhc3M9InNhdCI+U2F0PC90aD48dGggY2xhc3M9InN1biI+U3VuPC90aD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xPC90ZD48dGQgY2xhc3M9InR1ZSI+MjwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjM8L3RkPjx0ZCBjbGFzcz0idGh1Ij40PC90ZD48dGQgY2xhc3M9ImZyaSI+NTwvdGQ+PHRkIGNsYXNzPSJzYXQiPjY8L3RkPjx0ZCBjbGFzcz0ic3VuIj43PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj44PC90ZD48dGQgY2xhc3M9InR1ZSI+OTwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjEwPC90ZD48dGQgY2xhc3M9InRodSI+MTE8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xMjwvdGQ+PHRkIGNsYXNzPSJzYXQiPjEzPC90ZD48dGQgY2xhc3M9InN1biI+MTQ8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE1PC90ZD48dGQgY2xhc3M9InR1ZSI+MTY8L3RkPjx0ZCBjbGFzcz0id2VkIj4xNzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjE4PC90ZD48dGQgY2xhc3M9ImZyaSI+MTk8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yMDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjIxPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yMjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjIzPC90ZD48dGQgY2xhc3M9IndlZCI+MjQ8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yNTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjI2PC90ZD48dGQgY2xhc3M9InNhdCI+Mjc8L3RkPjx0ZCBjbGFzcz0ic3VuIj4yODwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+Mjk8L3RkPjx0ZCBjbGFzcz0idHVlIj4zMDwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjMxPC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC90ZD48L3RyPjx0cj48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibW9udGgiPgorPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPkFwcmlsPC90aD48L3RyPgorPHRyPjx0aCBjbGFzcz0ibW9uIj5Nb248L3RoPjx0aCBjbGFzcz0idHVlIj5UdWU8L3RoPjx0aCBjbGFzcz0id2VkIj5XZWQ8L3RoPjx0aCBjbGFzcz0idGh1Ij5UaHU8L3RoPjx0aCBjbGFzcz0iZnJpIj5Gcmk8L3RoPjx0aCBjbGFzcz0ic2F0Ij5TYXQ8L3RoPjx0aCBjbGFzcz0ic3VuIj5TdW48L3RoPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjE8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yPC90ZD48dGQgY2xhc3M9InNhdCI+MzwvdGQ+PHRkIGNsYXNzPSJzdW4iPjQ8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjU8L3RkPjx0ZCBjbGFzcz0idHVlIj42PC90ZD48dGQgY2xhc3M9IndlZCI+NzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjg8L3RkPjx0ZCBjbGFzcz0iZnJpIj45PC90ZD48dGQgY2xhc3M9InNhdCI+MTA8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xMTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTI8L3RkPjx0ZCBjbGFzcz0idHVlIj4xMzwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE0PC90ZD48dGQgY2xhc3M9InRodSI+MTU8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xNjwvdGQ+PHRkIGNsYXNzPSJzYXQiPjE3PC90ZD48dGQgY2xhc3M9InN1biI+MTg8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE5PC90ZD48dGQgY2xhc3M9InR1ZSI+MjA8L3RkPjx0ZCBjbGFzcz0id2VkIj4yMTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjIyPC90ZD48dGQgY2xhc3M9ImZyaSI+MjM8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yNDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjI1PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yNjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjI3PC90ZD48dGQgY2xhc3M9IndlZCI+Mjg8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yOTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjMwPC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L3RkPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJtb250aCI+Cis8dHI+PHRoIGNvbHNwYW49IjciIGNsYXNzPSJtb250aCI+TWF5PC90aD48L3RyPgorPHRyPjx0aCBjbGFzcz0ibW9uIj5Nb248L3RoPjx0aCBjbGFzcz0idHVlIj5UdWU8L3RoPjx0aCBjbGFzcz0id2VkIj5XZWQ8L3RoPjx0aCBjbGFzcz0idGh1Ij5UaHU8L3RoPjx0aCBjbGFzcz0iZnJpIj5Gcmk8L3RoPjx0aCBjbGFzcz0ic2F0Ij5TYXQ8L3RoPjx0aCBjbGFzcz0ic3VuIj5TdW48L3RoPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xPC90ZD48dGQgY2xhc3M9InN1biI+MjwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MzwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjQ8L3RkPjx0ZCBjbGFzcz0id2VkIj41PC90ZD48dGQgY2xhc3M9InRodSI+NjwvdGQ+PHRkIGNsYXNzPSJmcmkiPjc8L3RkPjx0ZCBjbGFzcz0ic2F0Ij44PC90ZD48dGQgY2xhc3M9InN1biI+OTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTA8L3RkPjx0ZCBjbGFzcz0idHVlIj4xMTwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjEyPC90ZD48dGQgY2xhc3M9InRodSI+MTM8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xNDwvdGQ+PHRkIGNsYXNzPSJzYXQiPjE1PC90ZD48dGQgY2xhc3M9InN1biI+MTY8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE3PC90ZD48dGQgY2xhc3M9InR1ZSI+MTg8L3RkPjx0ZCBjbGFzcz0id2VkIj4xOTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjIwPC90ZD48dGQgY2xhc3M9ImZyaSI+MjE8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yMjwvdGQ+PHRkIGNsYXNzPSJzdW4iPjIzPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yNDwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjI1PC90ZD48dGQgY2xhc3M9IndlZCI+MjY8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yNzwvdGQ+PHRkIGNsYXNzPSJmcmkiPjI4PC90ZD48dGQgY2xhc3M9InNhdCI+Mjk8L3RkPjx0ZCBjbGFzcz0ic3VuIj4zMDwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MzE8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC90ZD48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibW9udGgiPgorPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPkp1bmU8L3RoPjwvdHI+Cis8dHI+PHRoIGNsYXNzPSJtb24iPk1vbjwvdGg+PHRoIGNsYXNzPSJ0dWUiPlR1ZTwvdGg+PHRoIGNsYXNzPSJ3ZWQiPldlZDwvdGg+PHRoIGNsYXNzPSJ0aHUiPlRodTwvdGg+PHRoIGNsYXNzPSJmcmkiPkZyaTwvdGg+PHRoIGNsYXNzPSJzYXQiPlNhdDwvdGg+PHRoIGNsYXNzPSJzdW4iPlN1bjwvdGg+PC90cj4KKzx0cj48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0idHVlIj4xPC90ZD48dGQgY2xhc3M9IndlZCI+MjwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjM8L3RkPjx0ZCBjbGFzcz0iZnJpIj40PC90ZD48dGQgY2xhc3M9InNhdCI+NTwvdGQ+PHRkIGNsYXNzPSJzdW4iPjY8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjc8L3RkPjx0ZCBjbGFzcz0idHVlIj44PC90ZD48dGQgY2xhc3M9IndlZCI+OTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjEwPC90ZD48dGQgY2xhc3M9ImZyaSI+MTE8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xMjwvdGQ+PHRkIGNsYXNzPSJzdW4iPjEzPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xNDwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjE1PC90ZD48dGQgY2xhc3M9IndlZCI+MTY8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xNzwvdGQ+PHRkIGNsYXNzPSJmcmkiPjE4PC90ZD48dGQgY2xhc3M9InNhdCI+MTk8L3RkPjx0ZCBjbGFzcz0ic3VuIj4yMDwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MjE8L3RkPjx0ZCBjbGFzcz0idHVlIj4yMjwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjIzPC90ZD48dGQgY2xhc3M9InRodSI+MjQ8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yNTwvdGQ+PHRkIGNsYXNzPSJzYXQiPjI2PC90ZD48dGQgY2xhc3M9InN1biI+Mjc8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjI4PC90ZD48dGQgY2xhc3M9InR1ZSI+Mjk8L3RkPjx0ZCBjbGFzcz0id2VkIj4zMDwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48L3RyPgorPC90YWJsZT4KKzwvdGQ+PC90cj48dHI+PHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9Im1vbnRoIj4KKzx0cj48dGggY29sc3Bhbj0iNyIgY2xhc3M9Im1vbnRoIj5KdWx5PC90aD48L3RyPgorPHRyPjx0aCBjbGFzcz0ibW9uIj5Nb248L3RoPjx0aCBjbGFzcz0idHVlIj5UdWU8L3RoPjx0aCBjbGFzcz0id2VkIj5XZWQ8L3RoPjx0aCBjbGFzcz0idGh1Ij5UaHU8L3RoPjx0aCBjbGFzcz0iZnJpIj5Gcmk8L3RoPjx0aCBjbGFzcz0ic2F0Ij5TYXQ8L3RoPjx0aCBjbGFzcz0ic3VuIj5TdW48L3RoPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjE8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yPC90ZD48dGQgY2xhc3M9InNhdCI+MzwvdGQ+PHRkIGNsYXNzPSJzdW4iPjQ8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjU8L3RkPjx0ZCBjbGFzcz0idHVlIj42PC90ZD48dGQgY2xhc3M9IndlZCI+NzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjg8L3RkPjx0ZCBjbGFzcz0iZnJpIj45PC90ZD48dGQgY2xhc3M9InNhdCI+MTA8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xMTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTI8L3RkPjx0ZCBjbGFzcz0idHVlIj4xMzwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE0PC90ZD48dGQgY2xhc3M9InRodSI+MTU8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xNjwvdGQ+PHRkIGNsYXNzPSJzYXQiPjE3PC90ZD48dGQgY2xhc3M9InN1biI+MTg8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE5PC90ZD48dGQgY2xhc3M9InR1ZSI+MjA8L3RkPjx0ZCBjbGFzcz0id2VkIj4yMTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjIyPC90ZD48dGQgY2xhc3M9ImZyaSI+MjM8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yNDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjI1PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yNjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjI3PC90ZD48dGQgY2xhc3M9IndlZCI+Mjg8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yOTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjMwPC90ZD48dGQgY2xhc3M9InNhdCI+MzE8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L3RkPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJtb250aCI+Cis8dHI+PHRoIGNvbHNwYW49IjciIGNsYXNzPSJtb250aCI+QXVndXN0PC90aD48L3RyPgorPHRyPjx0aCBjbGFzcz0ibW9uIj5Nb248L3RoPjx0aCBjbGFzcz0idHVlIj5UdWU8L3RoPjx0aCBjbGFzcz0id2VkIj5XZWQ8L3RoPjx0aCBjbGFzcz0idGh1Ij5UaHU8L3RoPjx0aCBjbGFzcz0iZnJpIj5Gcmk8L3RoPjx0aCBjbGFzcz0ic2F0Ij5TYXQ8L3RoPjx0aCBjbGFzcz0ic3VuIj5TdW48L3RoPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJzdW4iPjE8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjI8L3RkPjx0ZCBjbGFzcz0idHVlIj4zPC90ZD48dGQgY2xhc3M9IndlZCI+NDwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjU8L3RkPjx0ZCBjbGFzcz0iZnJpIj42PC90ZD48dGQgY2xhc3M9InNhdCI+NzwvdGQ+PHRkIGNsYXNzPSJzdW4iPjg8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjk8L3RkPjx0ZCBjbGFzcz0idHVlIj4xMDwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjExPC90ZD48dGQgY2xhc3M9InRodSI+MTI8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xMzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjE0PC90ZD48dGQgY2xhc3M9InN1biI+MTU8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE2PC90ZD48dGQgY2xhc3M9InR1ZSI+MTc8L3RkPjx0ZCBjbGFzcz0id2VkIj4xODwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjE5PC90ZD48dGQgY2xhc3M9ImZyaSI+MjA8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yMTwvdGQ+PHRkIGNsYXNzPSJzdW4iPjIyPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yMzwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjI0PC90ZD48dGQgY2xhc3M9IndlZCI+MjU8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yNjwvdGQ+PHRkIGNsYXNzPSJmcmkiPjI3PC90ZD48dGQgY2xhc3M9InNhdCI+Mjg8L3RkPjx0ZCBjbGFzcz0ic3VuIj4yOTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MzA8L3RkPjx0ZCBjbGFzcz0idHVlIj4zMTwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC90ZD48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibW9udGgiPgorPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPlNlcHRlbWJlcjwvdGg+PC90cj4KKzx0cj48dGggY2xhc3M9Im1vbiI+TW9uPC90aD48dGggY2xhc3M9InR1ZSI+VHVlPC90aD48dGggY2xhc3M9IndlZCI+V2VkPC90aD48dGggY2xhc3M9InRodSI+VGh1PC90aD48dGggY2xhc3M9ImZyaSI+RnJpPC90aD48dGggY2xhc3M9InNhdCI+U2F0PC90aD48dGggY2xhc3M9InN1biI+U3VuPC90aD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9IndlZCI+MTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI8L3RkPjx0ZCBjbGFzcz0iZnJpIj4zPC90ZD48dGQgY2xhc3M9InNhdCI+NDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjU8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjY8L3RkPjx0ZCBjbGFzcz0idHVlIj43PC90ZD48dGQgY2xhc3M9IndlZCI+ODwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjk8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xMDwvdGQ+PHRkIGNsYXNzPSJzYXQiPjExPC90ZD48dGQgY2xhc3M9InN1biI+MTI8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjEzPC90ZD48dGQgY2xhc3M9InR1ZSI+MTQ8L3RkPjx0ZCBjbGFzcz0id2VkIj4xNTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjE2PC90ZD48dGQgY2xhc3M9ImZyaSI+MTc8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xODwvdGQ+PHRkIGNsYXNzPSJzdW4iPjE5PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yMDwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjIxPC90ZD48dGQgY2xhc3M9IndlZCI+MjI8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yMzwvdGQ+PHRkIGNsYXNzPSJmcmkiPjI0PC90ZD48dGQgY2xhc3M9InNhdCI+MjU8L3RkPjx0ZCBjbGFzcz0ic3VuIj4yNjwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+Mjc8L3RkPjx0ZCBjbGFzcz0idHVlIj4yODwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjI5PC90ZD48dGQgY2xhc3M9InRodSI+MzA8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC90ZD48L3RyPjx0cj48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibW9udGgiPgorPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPk9jdG9iZXI8L3RoPjwvdHI+Cis8dHI+PHRoIGNsYXNzPSJtb24iPk1vbjwvdGg+PHRoIGNsYXNzPSJ0dWUiPlR1ZTwvdGg+PHRoIGNsYXNzPSJ3ZWQiPldlZDwvdGg+PHRoIGNsYXNzPSJ0aHUiPlRodTwvdGg+PHRoIGNsYXNzPSJmcmkiPkZyaTwvdGg+PHRoIGNsYXNzPSJzYXQiPlNhdDwvdGg+PHRoIGNsYXNzPSJzdW4iPlN1bjwvdGg+PC90cj4KKzx0cj48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xPC90ZD48dGQgY2xhc3M9InNhdCI+MjwvdGQ+PHRkIGNsYXNzPSJzdW4iPjM8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjQ8L3RkPjx0ZCBjbGFzcz0idHVlIj41PC90ZD48dGQgY2xhc3M9IndlZCI+NjwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjc8L3RkPjx0ZCBjbGFzcz0iZnJpIj44PC90ZD48dGQgY2xhc3M9InNhdCI+OTwvdGQ+PHRkIGNsYXNzPSJzdW4iPjEwPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xMTwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjEyPC90ZD48dGQgY2xhc3M9IndlZCI+MTM8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xNDwvdGQ+PHRkIGNsYXNzPSJmcmkiPjE1PC90ZD48dGQgY2xhc3M9InNhdCI+MTY8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xNzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTg8L3RkPjx0ZCBjbGFzcz0idHVlIj4xOTwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjIwPC90ZD48dGQgY2xhc3M9InRodSI+MjE8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yMjwvdGQ+PHRkIGNsYXNzPSJzYXQiPjIzPC90ZD48dGQgY2xhc3M9InN1biI+MjQ8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjI1PC90ZD48dGQgY2xhc3M9InR1ZSI+MjY8L3RkPjx0ZCBjbGFzcz0id2VkIj4yNzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI4PC90ZD48dGQgY2xhc3M9ImZyaSI+Mjk8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4zMDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjMxPC90ZD48L3RyPgorPC90YWJsZT4KKzwvdGQ+PHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9Im1vbnRoIj4KKzx0cj48dGggY29sc3Bhbj0iNyIgY2xhc3M9Im1vbnRoIj5Ob3ZlbWJlcjwvdGg+PC90cj4KKzx0cj48dGggY2xhc3M9Im1vbiI+TW9uPC90aD48dGggY2xhc3M9InR1ZSI+VHVlPC90aD48dGggY2xhc3M9IndlZCI+V2VkPC90aD48dGggY2xhc3M9InRodSI+VGh1PC90aD48dGggY2xhc3M9ImZyaSI+RnJpPC90aD48dGggY2xhc3M9InNhdCI+U2F0PC90aD48dGggY2xhc3M9InN1biI+U3VuPC90aD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xPC90ZD48dGQgY2xhc3M9InR1ZSI+MjwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjM8L3RkPjx0ZCBjbGFzcz0idGh1Ij40PC90ZD48dGQgY2xhc3M9ImZyaSI+NTwvdGQ+PHRkIGNsYXNzPSJzYXQiPjY8L3RkPjx0ZCBjbGFzcz0ic3VuIj43PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj44PC90ZD48dGQgY2xhc3M9InR1ZSI+OTwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjEwPC90ZD48dGQgY2xhc3M9InRodSI+MTE8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xMjwvdGQ+PHRkIGNsYXNzPSJzYXQiPjEzPC90ZD48dGQgY2xhc3M9InN1biI+MTQ8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE1PC90ZD48dGQgY2xhc3M9InR1ZSI+MTY8L3RkPjx0ZCBjbGFzcz0id2VkIj4xNzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjE4PC90ZD48dGQgY2xhc3M9ImZyaSI+MTk8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yMDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjIxPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yMjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjIzPC90ZD48dGQgY2xhc3M9IndlZCI+MjQ8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yNTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjI2PC90ZD48dGQgY2xhc3M9InNhdCI+Mjc8L3RkPjx0ZCBjbGFzcz0ic3VuIj4yODwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+Mjk8L3RkPjx0ZCBjbGFzcz0idHVlIj4zMDwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC90ZD48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibW9udGgiPgorPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPkRlY2VtYmVyPC90aD48L3RyPgorPHRyPjx0aCBjbGFzcz0ibW9uIj5Nb248L3RoPjx0aCBjbGFzcz0idHVlIj5UdWU8L3RoPjx0aCBjbGFzcz0id2VkIj5XZWQ8L3RoPjx0aCBjbGFzcz0idGh1Ij5UaHU8L3RoPjx0aCBjbGFzcz0iZnJpIj5Gcmk8L3RoPjx0aCBjbGFzcz0ic2F0Ij5TYXQ8L3RoPjx0aCBjbGFzcz0ic3VuIj5TdW48L3RoPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0id2VkIj4xPC90ZD48dGQgY2xhc3M9InRodSI+MjwvdGQ+PHRkIGNsYXNzPSJmcmkiPjM8L3RkPjx0ZCBjbGFzcz0ic2F0Ij40PC90ZD48dGQgY2xhc3M9InN1biI+NTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+NjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjc8L3RkPjx0ZCBjbGFzcz0id2VkIj44PC90ZD48dGQgY2xhc3M9InRodSI+OTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjEwPC90ZD48dGQgY2xhc3M9InNhdCI+MTE8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xMjwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTM8L3RkPjx0ZCBjbGFzcz0idHVlIj4xNDwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE1PC90ZD48dGQgY2xhc3M9InRodSI+MTY8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xNzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjE4PC90ZD48dGQgY2xhc3M9InN1biI+MTk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjIwPC90ZD48dGQgY2xhc3M9InR1ZSI+MjE8L3RkPjx0ZCBjbGFzcz0id2VkIj4yMjwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjIzPC90ZD48dGQgY2xhc3M9ImZyaSI+MjQ8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yNTwvdGQ+PHRkIGNsYXNzPSJzdW4iPjI2PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yNzwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjI4PC90ZD48dGQgY2xhc3M9IndlZCI+Mjk8L3RkPjx0ZCBjbGFzcz0idGh1Ij4zMDwvdGQ+PHRkIGNsYXNzPSJmcmkiPjMxPC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+Cis8L2h0bWw+CisiIiIKKworCitjbGFzcyBPdXRwdXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIG5vcm1hbGl6ZV9jYWxlbmRhcihzZWxmLCBzKToKKyAgICAgICAgIyBGaWx0ZXJzIG91dCBsb2NhbGUgZGVwZW5kZW50IHN0cmluZ3MKKyAgICAgICAgZGVmIG5laXRoZXJzcGFjZW5vcmRpZ2l0KGMpOgorICAgICAgICAgICAgcmV0dXJuIG5vdCBjLmlzc3BhY2UoKSBhbmQgbm90IGMuaXNkaWdpdCgpCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiBzLnNwbGl0bGluZXMoRmFsc2UpOgorICAgICAgICAgICAgIyBEcm9wIHRleHRzLCBhcyB0aGV5IGFyZSBsb2NhbGUgZGVwZW5kZW50CisgICAgICAgICAgICBpZiBsaW5lIGFuZCBub3QgZmlsdGVyKG5laXRoZXJzcGFjZW5vcmRpZ2l0LCBsaW5lKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgdGVzdF9vdXRwdXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLm5vcm1hbGl6ZV9jYWxlbmRhcihjYWxlbmRhci5jYWxlbmRhcigyMDA0KSksCisgICAgICAgICAgICBzZWxmLm5vcm1hbGl6ZV9jYWxlbmRhcihyZXN1bHRfMjAwNF90ZXh0KQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9vdXRwdXRfdGV4dGNhbGVuZGFyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2FsZW5kYXIuVGV4dENhbGVuZGFyKCkuZm9ybWF0eWVhcigyMDA0KS5zdHJpcCgpLAorICAgICAgICAgICAgcmVzdWx0XzIwMDRfdGV4dC5zdHJpcCgpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X291dHB1dF9odG1sY2FsZW5kYXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjYWxlbmRhci5IVE1MQ2FsZW5kYXIoKS5mb3JtYXR5ZWFycGFnZSgyMDA0KS5zdHJpcCgpLAorICAgICAgICAgICAgcmVzdWx0XzIwMDRfaHRtbC5zdHJpcCgpCisgICAgICAgICkKKworCitjbGFzcyBDYWxlbmRhclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pc2xlYXAoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHJldHVybiBpcyByaWdodCBmb3IgYSBmZXcgeWVhcnMsIGFuZAorICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSByZXR1cm4gdmFsdWVzIGFyZSAxIG9yIDAsIG5vdCBqdXN0IHRydWUgb3IKKyAgICAgICAgIyBmYWxzZSAoc2VlIFNGIGJ1ZyAjNDg1Nzk0KS4gIFNwZWNpZmljIGFkZGl0aW9uYWwgdGVzdHMgbWF5CisgICAgICAgICMgYmUgYXBwcm9wcmlhdGU7IHRoaXMgdGVzdHMgYSBzaW5nbGUgImN5Y2xlIi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5pc2xlYXAoMjAwMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIuaXNsZWFwKDIwMDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmlzbGVhcCgyMDAyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5pc2xlYXAoMjAwMyksIDApCisKKyAgICBkZWYgdGVzdF9zZXRmaXJzdHdlZWtkYXkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNhbGVuZGFyLnNldGZpcnN0d2Vla2RheSwgJ2ZsYWJiZXInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjYWxlbmRhci5zZXRmaXJzdHdlZWtkYXksIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjYWxlbmRhci5zZXRmaXJzdHdlZWtkYXksIDIwMCkKKyAgICAgICAgb3JpZyA9IGNhbGVuZGFyLmZpcnN0d2Vla2RheSgpCisgICAgICAgIGNhbGVuZGFyLnNldGZpcnN0d2Vla2RheShjYWxlbmRhci5TVU5EQVkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIuZmlyc3R3ZWVrZGF5KCksIGNhbGVuZGFyLlNVTkRBWSkKKyAgICAgICAgY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5KGNhbGVuZGFyLk1PTkRBWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5maXJzdHdlZWtkYXkoKSwgY2FsZW5kYXIuTU9OREFZKQorICAgICAgICBjYWxlbmRhci5zZXRmaXJzdHdlZWtkYXkob3JpZykKKworICAgIGRlZiB0ZXN0X2VudW1lcmF0ZXdlZWtkYXlzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBjYWxlbmRhci5kYXlfYWJici5fX2dldGl0ZW1fXywgLTEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBjYWxlbmRhci5kYXlfbmFtZS5fX2dldGl0ZW1fXywgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFtkIGZvciBkIGluIGNhbGVuZGFyLmRheV9hYmJyXSksIDcpCisKKyAgICBkZWYgdGVzdF9kYXlzKHNlbGYpOgorICAgICAgICBmb3IgYXR0ciBpbiAiZGF5X25hbWUiLCAiZGF5X2FiYnIiOgorICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKGNhbGVuZGFyLCBhdHRyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWUpLCA3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVbOl0pLCA3KQorICAgICAgICAgICAgIyBlbnN1cmUgdGhleSdyZSBhbGwgdW5pcXVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQodmFsdWUpKSwgNykKKyAgICAgICAgICAgICMgdmVyaWZ5IGl0ICJhY3RzIGxpa2UgYSBzZXF1ZW5jZSIgaW4gdHdvIGZvcm1zIG9mIGl0ZXJhdGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVs6Oi0xXSwgbGlzdChyZXZlcnNlZCh2YWx1ZSkpKQorCisgICAgZGVmIHRlc3RfbW9udGhzKHNlbGYpOgorICAgICAgICBmb3IgYXR0ciBpbiAibW9udGhfbmFtZSIsICJtb250aF9hYmJyIjoKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihjYWxlbmRhciwgYXR0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlKSwgMTMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZVs6XSksIDEzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVswXSwgIiIpCisgICAgICAgICAgICAjIGVuc3VyZSB0aGV5J3JlIGFsbCB1bmlxdWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldCh2YWx1ZSkpLCAxMykKKyAgICAgICAgICAgICMgdmVyaWZ5IGl0ICJhY3RzIGxpa2UgYSBzZXF1ZW5jZSIgaW4gdHdvIGZvcm1zIG9mIGl0ZXJhdGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVs6Oi0xXSwgbGlzdChyZXZlcnNlZCh2YWx1ZSkpKQorCisgICAgZGVmIHRlc3RfbG9jYWxlY2FsZW5kYXJzKHNlbGYpOgorICAgICAgICAjIGVuc3VyZSB0aGF0IExvY2FsZXtUZXh0LEhUTUx9Q2FsZW5kYXIgcmVzZXRzIHRoZSBsb2NhbGUgcHJvcGVybHkKKyAgICAgICAgIyAoaXQgaXMgc3RpbGwgbm90IHRocmVhZC1zYWZlIHRob3VnaCkKKyAgICAgICAgb2xkX29jdG9iZXIgPSBjYWxlbmRhci5UZXh0Q2FsZW5kYXIoKS5mb3JtYXRtb250aG5hbWUoMjAxMCwgMTAsIDEwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWwgPSBjYWxlbmRhci5Mb2NhbGVUZXh0Q2FsZW5kYXIobG9jYWxlPScnKQorICAgICAgICAgICAgbG9jYWxfd2Vla2RheSA9IGNhbC5mb3JtYXR3ZWVrZGF5KDEsIDEwKQorICAgICAgICAgICAgbG9jYWxfbW9udGggPSBjYWwuZm9ybWF0bW9udGhuYW1lKDIwMTAsIDEwLCAxMCkKKyAgICAgICAgZXhjZXB0IGxvY2FsZS5FcnJvcjoKKyAgICAgICAgICAgICMgY2Fubm90IHNldCB0aGUgc3lzdGVtIGRlZmF1bHQgbG9jYWxlIC0tIHNraXAgcmVzdCBvZiB0ZXN0CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnY2Fubm90IHNldCB0aGUgc3lzdGVtIGRlZmF1bHQgbG9jYWxlJykKKyAgICAgICAgIyBzaG91bGQgYmUgZW5jb2RhYmxlCisgICAgICAgIGxvY2FsX3dlZWtkYXkuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIGxvY2FsX21vbnRoLmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2NhbF93ZWVrZGF5KSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihsb2NhbF9tb250aCksIDEwKQorICAgICAgICBjYWwgPSBjYWxlbmRhci5Mb2NhbGVIVE1MQ2FsZW5kYXIobG9jYWxlPScnKQorICAgICAgICBsb2NhbF93ZWVrZGF5ID0gY2FsLmZvcm1hdHdlZWtkYXkoMSkKKyAgICAgICAgbG9jYWxfbW9udGggPSBjYWwuZm9ybWF0bW9udGhuYW1lKDIwMTAsIDEwKQorICAgICAgICAjIHNob3VsZCBiZSBlbmNvZGFibGUKKyAgICAgICAgbG9jYWxfd2Vla2RheS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgbG9jYWxfbW9udGguZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIG5ld19vY3RvYmVyID0gY2FsZW5kYXIuVGV4dENhbGVuZGFyKCkuZm9ybWF0bW9udGhuYW1lKDIwMTAsIDEwLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvbGRfb2N0b2JlciwgbmV3X29jdG9iZXIpCisKKyAgICBkZWYgdGVzdF9pdGVybW9udGhkYXRlcyhzZWxmKToKKyAgICAgICAgIyBlbnN1cmUgaXRlcm1vbnRoZGF0ZXMgZG9lc24ndCBvdmVyZmxvdyBhZnRlciBkYXRldGltZS5NQVhZRUFSCisgICAgICAgICMgc2VlICMxNTQyMQorICAgICAgICBsaXN0KGNhbGVuZGFyLkNhbGVuZGFyKCkuaXRlcm1vbnRoZGF0ZXMoZGF0ZXRpbWUuTUFYWUVBUiwgMTIpKQorCisKK2NsYXNzIE1vbnRoQ2FsZW5kYXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9sZGZpcnN0d2Vla2RheSA9IGNhbGVuZGFyLmZpcnN0d2Vla2RheSgpCisgICAgICAgIGNhbGVuZGFyLnNldGZpcnN0d2Vla2RheShzZWxmLmZpcnN0d2Vla2RheSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5KHNlbGYub2xkZmlyc3R3ZWVrZGF5KQorCisgICAgZGVmIGNoZWNrX3dlZWtzKHNlbGYsIHllYXIsIG1vbnRoLCB3ZWVrcyk6CisgICAgICAgIGNhbCA9IGNhbGVuZGFyLm1vbnRoY2FsZW5kYXIoeWVhciwgbW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNhbCksIGxlbih3ZWVrcykpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4od2Vla3MpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2Vla3NbaV0sIHN1bShkYXkgIT0gMCBmb3IgZGF5IGluIGNhbFtpXSkpCisKKworY2xhc3MgTW9uZGF5VGVzdENhc2UoTW9udGhDYWxlbmRhclRlc3RDYXNlKToKKyAgICBmaXJzdHdlZWtkYXkgPSBjYWxlbmRhci5NT05EQVkKKworICAgIGRlZiB0ZXN0X2ZlYnJ1YXJ5KHNlbGYpOgorICAgICAgICAjIEEgMjgtZGF5IGZlYnJ1YXJ5IHN0YXJ0aW5nIG9uIG1vbmRheSAoNys3KzcrNyBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5OTksIDIsICg3LCA3LCA3LCA3KSkKKworICAgICAgICAjIEEgMjgtZGF5IGZlYnJ1YXJ5IHN0YXJ0aW5nIG9uIHR1ZXNkYXkgKDYrNys3KzcrMSBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDIwMDUsIDIsICg2LCA3LCA3LCA3LCAxKSkKKworICAgICAgICAjIEEgMjgtZGF5IGZlYnJ1YXJ5IHN0YXJ0aW5nIG9uIHN1bmRheSAoMSs3KzcrNys2IGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk4NywgMiwgKDEsIDcsIDcsIDcsIDYpKQorCisgICAgICAgICMgQSAyOS1kYXkgZmVicnVhcnkgc3RhcnRpbmcgb24gbW9uZGF5ICg3KzcrNys3KzEgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTg4LCAyLCAoNywgNywgNywgNywgMSkpCisKKyAgICAgICAgIyBBIDI5LWRheSBmZWJydWFyeSBzdGFydGluZyBvbiB0dWVzZGF5ICg2KzcrNys3KzIgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTcyLCAyLCAoNiwgNywgNywgNywgMikpCisKKyAgICAgICAgIyBBIDI5LWRheSBmZWJydWFyeSBzdGFydGluZyBvbiBzdW5kYXkgKDErNys3KzcrNyBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDIwMDQsIDIsICgxLCA3LCA3LCA3LCA3KSkKKworICAgIGRlZiB0ZXN0X2FwcmlsKHNlbGYpOgorICAgICAgICAjIEEgMzAtZGF5IGFwcmlsIHN0YXJ0aW5nIG9uIG1vbmRheSAoNys3KzcrNysyIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTkzNSwgNCwgKDcsIDcsIDcsIDcsIDIpKQorCisgICAgICAgICMgQSAzMC1kYXkgYXByaWwgc3RhcnRpbmcgb24gdHVlc2RheSAoNis3KzcrNyszIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk3NSwgNCwgKDYsIDcsIDcsIDcsIDMpKQorCisgICAgICAgICMgQSAzMC1kYXkgYXByaWwgc3RhcnRpbmcgb24gc3VuZGF5ICgxKzcrNys3KzcrMSBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5NDUsIDQsICgxLCA3LCA3LCA3LCA3LCAxKSkKKworICAgICAgICAjIEEgMzAtZGF5IGFwcmlsIHN0YXJ0aW5nIG9uIHNhdHVyZGF5ICgyKzcrNys3KzcgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTk1LCA0LCAoMiwgNywgNywgNywgNykpCisKKyAgICAgICAgIyBBIDMwLWRheSBhcHJpbCBzdGFydGluZyBvbiBmcmlkYXkgKDMrNys3KzcrNiBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5OTQsIDQsICgzLCA3LCA3LCA3LCA2KSkKKworICAgIGRlZiB0ZXN0X2RlY2VtYmVyKHNlbGYpOgorICAgICAgICAjIEEgMzEtZGF5IGRlY2VtYmVyIHN0YXJ0aW5nIG9uIG1vbmRheSAoNys3KzcrNyszIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk4MCwgMTIsICg3LCA3LCA3LCA3LCAzKSkKKworICAgICAgICAjIEEgMzEtZGF5IGRlY2VtYmVyIHN0YXJ0aW5nIG9uIHR1ZXNkYXkgKDYrNys3KzcrNCBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5ODcsIDEyLCAoNiwgNywgNywgNywgNCkpCisKKyAgICAgICAgIyBBIDMxLWRheSBkZWNlbWJlciBzdGFydGluZyBvbiBzdW5kYXkgKDErNys3KzcrNysyIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk2OCwgMTIsICgxLCA3LCA3LCA3LCA3LCAyKSkKKworICAgICAgICAjIEEgMzEtZGF5IGRlY2VtYmVyIHN0YXJ0aW5nIG9uIHRodXJzZGF5ICg0KzcrNys3KzYgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTg4LCAxMiwgKDQsIDcsIDcsIDcsIDYpKQorCisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gZnJpZGF5ICgzKzcrNys3KzcgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygyMDE3LCAxMiwgKDMsIDcsIDcsIDcsIDcpKQorCisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gc2F0dXJkYXkgKDIrNys3KzcrNysxIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMjA2OCwgMTIsICgyLCA3LCA3LCA3LCA3LCAxKSkKKworCitjbGFzcyBTdW5kYXlUZXN0Q2FzZShNb250aENhbGVuZGFyVGVzdENhc2UpOgorICAgIGZpcnN0d2Vla2RheSA9IGNhbGVuZGFyLlNVTkRBWQorCisgICAgZGVmIHRlc3RfZmVicnVhcnkoc2VsZik6CisgICAgICAgICMgQSAyOC1kYXkgZmVicnVhcnkgc3RhcnRpbmcgb24gc3VuZGF5ICg3KzcrNys3IGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMjAwOSwgMiwgKDcsIDcsIDcsIDcpKQorCisgICAgICAgICMgQSAyOC1kYXkgZmVicnVhcnkgc3RhcnRpbmcgb24gbW9uZGF5ICg2KzcrNys3KzEgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTk5LCAyLCAoNiwgNywgNywgNywgMSkpCisKKyAgICAgICAgIyBBIDI4LWRheSBmZWJydWFyeSBzdGFydGluZyBvbiBzYXR1cmRheSAoMSs3KzcrNys2IGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk5NywgMiwgKDEsIDcsIDcsIDcsIDYpKQorCisgICAgICAgICMgQSAyOS1kYXkgZmVicnVhcnkgc3RhcnRpbmcgb24gc3VuZGF5ICg3KzcrNys3KzEgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygyMDA0LCAyLCAoNywgNywgNywgNywgMSkpCisKKyAgICAgICAgIyBBIDI5LWRheSBmZWJydWFyeSBzdGFydGluZyBvbiBtb25kYXkgKDYrNys3KzcrMiBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5NjAsIDIsICg2LCA3LCA3LCA3LCAyKSkKKworICAgICAgICAjIEEgMjktZGF5IGZlYnJ1YXJ5IHN0YXJ0aW5nIG9uIHNhdHVyZGF5ICgxKzcrNys3KzcgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTY0LCAyLCAoMSwgNywgNywgNywgNykpCisKKyAgICBkZWYgdGVzdF9hcHJpbChzZWxmKToKKyAgICAgICAgIyBBIDMwLWRheSBhcHJpbCBzdGFydGluZyBvbiBzdW5kYXkgKDcrNys3KzcrMiBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5MjMsIDQsICg3LCA3LCA3LCA3LCAyKSkKKworICAgICAgICAjIEEgMzAtZGF5IGFwcmlsIHN0YXJ0aW5nIG9uIG1vbmRheSAoNis3KzcrNyszIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTkxOCwgNCwgKDYsIDcsIDcsIDcsIDMpKQorCisgICAgICAgICMgQSAzMC1kYXkgYXByaWwgc3RhcnRpbmcgb24gc2F0dXJkYXkgKDErNys3KzcrNysxIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk1MCwgNCwgKDEsIDcsIDcsIDcsIDcsIDEpKQorCisgICAgICAgICMgQSAzMC1kYXkgYXByaWwgc3RhcnRpbmcgb24gZnJpZGF5ICgyKzcrNys3KzcgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTYwLCA0LCAoMiwgNywgNywgNywgNykpCisKKyAgICAgICAgIyBBIDMwLWRheSBhcHJpbCBzdGFydGluZyBvbiB0aHVyc2RheSAoMys3KzcrNys2IGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTkwOSwgNCwgKDMsIDcsIDcsIDcsIDYpKQorCisgICAgZGVmIHRlc3RfZGVjZW1iZXIoc2VsZik6CisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gc3VuZGF5ICg3KzcrNys3KzMgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygyMDgwLCAxMiwgKDcsIDcsIDcsIDcsIDMpKQorCisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gbW9uZGF5ICg2KzcrNys3KzQgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTQxLCAxMiwgKDYsIDcsIDcsIDcsIDQpKQorCisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gc2F0dXJkYXkgKDErNys3KzcrNysyIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTkyMywgMTIsICgxLCA3LCA3LCA3LCA3LCAyKSkKKworICAgICAgICAjIEEgMzEtZGF5IGRlY2VtYmVyIHN0YXJ0aW5nIG9uIHdlZG5lc2RheSAoNCs3KzcrNys2IGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk0OCwgMTIsICg0LCA3LCA3LCA3LCA2KSkKKworICAgICAgICAjIEEgMzEtZGF5IGRlY2VtYmVyIHN0YXJ0aW5nIG9uIHRodXJzZGF5ICgzKzcrNys3KzcgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTI3LCAxMiwgKDMsIDcsIDcsIDcsIDcpKQorCisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gZnJpZGF5ICgyKzcrNys3KzcrMSBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5OTUsIDEyLCAoMiwgNywgNywgNywgNywgMSkpCisKKworY2xhc3MgTW9udGhSYW5nZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9qYW51YXJ5KHNlbGYpOgorICAgICAgICAjIFRlc3RzIHZhbGlkIGxvd2VyIGJvdW5kYXJ5IGNhc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubW9udGhyYW5nZSgyMDA0LDEpLCAoMywzMSkpCisKKyAgICBkZWYgdGVzdF9mZWJydWFyeV9sZWFwKHNlbGYpOgorICAgICAgICAjIFRlc3RzIEZlYnJ1YXJ5IGR1cmluZyBsZWFwIHllYXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubW9udGhyYW5nZSgyMDA0LDIpLCAoNiwyOSkpCisKKyAgICBkZWYgdGVzdF9mZWJydWFyeV9ub25sZWFwKHNlbGYpOgorICAgICAgICAjIFRlc3RzIEZlYnJ1YXJ5IGluIG5vbi1sZWFwIHllYXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubW9udGhyYW5nZSgyMDEwLDIpLCAoMCwyOCkpCisKKyAgICBkZWYgdGVzdF9kZWNlbWJlcihzZWxmKToKKyAgICAgICAgIyBUZXN0cyB2YWxpZCB1cHBlciBib3VuZGFyeSBjYXNlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLm1vbnRocmFuZ2UoMjAwNCwxMiksICgyLDMxKSkKKworICAgIGRlZiB0ZXN0X3plcm90aF9tb250aChzZWxmKToKKyAgICAgICAgIyBUZXN0cyBsb3cgaW52YWxpZCBib3VuZGFyeSBjYXNlLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNhbGVuZGFyLklsbGVnYWxNb250aEVycm9yKToKKyAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRocmFuZ2UoMjAwNCwgMCkKKworICAgIGRlZiB0ZXN0X3RoaXJ0ZWVudGhfbW9udGgoc2VsZik6CisgICAgICAgICMgVGVzdHMgaGlnaCBpbnZhbGlkIGJvdW5kYXJ5IGNhc2UuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY2FsZW5kYXIuSWxsZWdhbE1vbnRoRXJyb3IpOgorICAgICAgICAgICAgY2FsZW5kYXIubW9udGhyYW5nZSgyMDA0LCAxMykKKworY2xhc3MgTGVhcGRheXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfbm9fcmFuZ2Uoc2VsZik6CisgICAgICAgICMgdGVzdCB3aGVuIG5vIHJhbmdlIGkuZS4gdHdvIGlkZW50aWNhbCB5ZWFycyBhcyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubGVhcGRheXMoMjAxMCwyMDEwKSwgMCkKKworICAgIGRlZiB0ZXN0X25vX2xlYXBkYXlzKHNlbGYpOgorICAgICAgICAjIHRlc3Qgd2hlbiBubyBsZWFwIHllYXJzIGluIHJhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubGVhcGRheXMoMjAxMCwyMDExKSwgMCkKKworICAgIGRlZiB0ZXN0X25vX2xlYXBkYXlzX3VwcGVyX2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICAjIHRlc3Qgbm8gbGVhcCB5ZWFycyBpbiByYW5nZSwgd2hlbiB1cHBlciBib3VuZGFyeSBpcyBhIGxlYXAgeWVhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmxlYXBkYXlzKDIwMTAsMjAxMiksIDApCisKKyAgICBkZWYgdGVzdF9vbmVfbGVhcGRheV9sb3dlcl9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdoZW4gb25lIGxlYXAgeWVhciBpbiByYW5nZSwgbG93ZXIgYm91bmRhcnkgaXMgbGVhcCB5ZWFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubGVhcGRheXMoMjAxMiwyMDEzKSwgMSkKKworICAgIGRlZiB0ZXN0X3NldmVyYWxfbGVhcHllYXJzX2luX3JhbmdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmxlYXBkYXlzKDE5OTcsMjAyMCksIDUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIE91dHB1dFRlc3RDYXNlLAorICAgICAgICBDYWxlbmRhclRlc3RDYXNlLAorICAgICAgICBNb25kYXlUZXN0Q2FzZSwKKyAgICAgICAgU3VuZGF5VGVzdENhc2UsCisgICAgICAgIE1vbnRoUmFuZ2VUZXN0Q2FzZSwKKyAgICAgICAgTGVhcGRheXNUZXN0Q2FzZSwKKyAgICApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY2FsbC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NhbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2YzJjOQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NhbGwucHkKQEAgLTAsMCArMSwxMzQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBUaGUgdGVzdCBjYXNlcyBoZXJlIGNvdmVyIHNldmVyYWwgcGF0aHMgdGhyb3VnaCB0aGUgZnVuY3Rpb24gY2FsbGluZworIyBjb2RlLiAgVGhleSBkZXBlbmQgb24gdGhlIE1FVEhfWFhYIGZsYWcgdGhhdCBpcyB1c2VkIHRvIGRlZmluZSBhIEMKKyMgZnVuY3Rpb24sIHdoaWNoIGNhbid0IGJlIHZlcmlmaWVkIGZyb20gUHl0aG9uLiAgSWYgdGhlIE1FVEhfWFhYIGRlY2wKKyMgZm9yIGEgQyBmdW5jdGlvbiBjaGFuZ2VzLCB0aGVzZSB0ZXN0cyBtYXkgbm90IGNvdmVyIHRoZSByaWdodCBwYXRocy4KKworY2xhc3MgQ0Z1bmN0aW9uQ2FsbHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdmFyYXJnczAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwge30uaGFzX2tleSkKKworICAgIGRlZiB0ZXN0X3ZhcmFyZ3MxKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB7fS5oYXNfa2V5KDApCisKKyAgICBkZWYgdGVzdF92YXJhcmdzMihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5oYXNfa2V5LCAwLCAxKQorCisgICAgZGVmIHRlc3RfdmFyYXJnczBfZXh0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB7fS5oYXNfa2V5KCooKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3ZhcmFyZ3MxX2V4dChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAge30uaGFzX2tleSgqKDAsKSkKKworICAgIGRlZiB0ZXN0X3ZhcmFyZ3MyX2V4dChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHt9Lmhhc19rZXkoKigxLCAyKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCisgICAgZGVmIHRlc3RfdmFyYXJnczBfa3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwge30uaGFzX2tleSwgeD0yKQorCisgICAgZGVmIHRlc3RfdmFyYXJnczFfa3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwge30uaGFzX2tleSwgeD0yKQorCisgICAgZGVmIHRlc3RfdmFyYXJnczJfa3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwge30uaGFzX2tleSwgeD0yLCB5PTIpCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMF8wKHNlbGYpOgorICAgICAgICB7fS5rZXlzKCkKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MwXzEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwge30ua2V5cywgMCkKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MwXzIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwge30ua2V5cywgMCwgMSkKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MwXzBfZXh0KHNlbGYpOgorICAgICAgICB7fS5rZXlzKCooKSkKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MwXzFfZXh0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB7fS5rZXlzKCooMCwpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMF8yX2V4dChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAge30ua2V5cygqKDEsIDIpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMF8wX2t3KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB7fS5rZXlzKHg9MikKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCisgICAgZGVmIHRlc3Rfb2xkYXJnczBfMV9rdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5rZXlzLCB4PTIpCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMF8yX2t3KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHt9LmtleXMsIHg9MiwgeT0yKQorCisgICAgZGVmIHRlc3Rfb2xkYXJnczFfMChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBbXS5jb3VudCkKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MxXzEoc2VsZik6CisgICAgICAgIFtdLmNvdW50KDEpCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMV8yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFtdLmNvdW50LCAxLCAyKQorCisgICAgZGVmIHRlc3Rfb2xkYXJnczFfMF9leHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFtdLmNvdW50KCooKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCisgICAgZGVmIHRlc3Rfb2xkYXJnczFfMV9leHQoc2VsZik6CisgICAgICAgIFtdLmNvdW50KCooMSwpKQorCisgICAgZGVmIHRlc3Rfb2xkYXJnczFfMl9leHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFtdLmNvdW50KCooMSwgMikpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MxXzBfa3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgW10uY291bnQsIHg9MikKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MxXzFfa3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgW10uY291bnQsIHt9LCB4PTIpCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMV8yX2t3KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFtdLmNvdW50LCB4PTIsIHk9MikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDRnVuY3Rpb25DYWxscykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jYXBpLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY2FwaS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWRiM2JmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY2FwaS5weQpAQCAtMCwwICsxLDE0MCBAQAorIyBSdW4gdGhlIF90ZXN0Y2FwaSBtb2R1bGUgdGVzdHMgKHRlc3RzIGZvciB0aGUgUHl0aG9uL0MgQVBJKTogIGJ5IGRlZm4sCisjIHRoZXNlIGFyZSBhbGwgZnVuY3Rpb25zIF90ZXN0Y2FwaSBleHBvcnRzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggJ3Rlc3RfJy4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkCisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZCA9IE5vbmUKKyAgICB0aHJlYWRpbmcgPSBOb25lCitpbXBvcnQgX3Rlc3RjYXBpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBUZXN0UGVuZGluZ0NhbGxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBwZW5kaW5nY2FsbHNfc3VibWl0KHNlbGYsIGwsIG4pOgorICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgICN0aGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0aHJlYWQgc3dpdGNoaW5nIHNvIGxldCdzCisgICAgICAgICAgICAjdXNlIGFuIGF0b21pYyBvcGVyYXRpb24KKyAgICAgICAgICAgIGwuYXBwZW5kKE5vbmUpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICB0aW1lLnNsZWVwKHJhbmRvbS5yYW5kb20oKSowLjAyKSAjMC4wMSBzZWNzIG9uIGF2ZXJhZ2UKKyAgICAgICAgICAgICN0cnkgc3VibWl0dGluZyBjYWxsYmFjayB1bnRpbCBzdWNjZXNzZnVsLgorICAgICAgICAgICAgI3JlbHkgb24gcmVndWxhciBpbnRlcnJ1cHQgdG8gZmx1c2ggcXVldWUgaWYgd2UgYXJlCisgICAgICAgICAgICAjdW5zdWNjZXNzZnVsLgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiBfdGVzdGNhcGkuX3BlbmRpbmdfdGhyZWFkZnVuYyhjYWxsYmFjayk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgZGVmIHBlbmRpbmdjYWxsc193YWl0KHNlbGYsIGwsIG4sIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgI25vdywgc3RpY2sgYXJvdW5kIHVudGlsIGxbMF0gaGFzIGdyb3duIHRvIDEwCisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgbGVuKGwpICE9IG46CisgICAgICAgICAgICAjdGhpcyBidXN5IGxvb3AgaXMgd2hlcmUgd2UgZXhwZWN0IHRvIGJlIGludGVycnVwdGVkIHRvCisgICAgICAgICAgICAjcnVuIG91ciBjYWxsYmFja3MuICBOb3RlIHRoYXQgY2FsbGJhY2tzIGFyZSBvbmx5IHJ1biBvbiB0aGUKKyAgICAgICAgICAgICNtYWluIHRocmVhZAorICAgICAgICAgICAgaWYgRmFsc2UgYW5kIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICIoJWkpIiUobGVuKGwpLCksCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwMCk6CisgICAgICAgICAgICAgICAgYSA9IGkqaQorICAgICAgICAgICAgaWYgY29udGV4dCBhbmQgbm90IGNvbnRleHQuZXZlbnQuaXNfc2V0KCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3VudCA8IDEwMDAwLAorICAgICAgICAgICAgICAgICJ0aW1lb3V0IHdhaXRpbmcgZm9yICVpIGNhbGxiYWNrcywgZ290ICVpIiUobiwgbGVuKGwpKSkKKyAgICAgICAgaWYgRmFsc2UgYW5kIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiglaSkiJShsZW4obCksKQorCisgICAgZGVmIHRlc3RfcGVuZGluZ2NhbGxzX3RocmVhZGVkKHNlbGYpOgorICAgICAgICAjZG8gZXZlcnkgY2FsbGJhY2sgb24gYSBzZXBhcmF0ZSB0aHJlYWQKKyAgICAgICAgbiA9IDMyICN0b3RhbCBjYWxsYmFja3MKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIGNsYXNzIGZvbyhvYmplY3QpOnBhc3MKKyAgICAgICAgY29udGV4dCA9IGZvbygpCisgICAgICAgIGNvbnRleHQubCA9IFtdCisgICAgICAgIGNvbnRleHQubiA9IDIgI3N1Ym1pdHMgcGVyIHRocmVhZAorICAgICAgICBjb250ZXh0Lm5UaHJlYWRzID0gbiAvLyBjb250ZXh0Lm4KKyAgICAgICAgY29udGV4dC5uRmluaXNoZWQgPSAwCisgICAgICAgIGNvbnRleHQubG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgY29udGV4dC5ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY29udGV4dC5uVGhyZWFkcyk6CisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5wZW5kaW5nY2FsbHNfdGhyZWFkLCBhcmdzID0gKGNvbnRleHQsKSkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodCkKKworICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc193YWl0KGNvbnRleHQubCwgbiwgY29udGV4dCkKKworICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworICAgIGRlZiBwZW5kaW5nY2FsbHNfdGhyZWFkKHNlbGYsIGNvbnRleHQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc19zdWJtaXQoY29udGV4dC5sLCBjb250ZXh0Lm4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3aXRoIGNvbnRleHQubG9jazoKKyAgICAgICAgICAgICAgICBjb250ZXh0Lm5GaW5pc2hlZCArPSAxCisgICAgICAgICAgICAgICAgbkZpbmlzaGVkID0gY29udGV4dC5uRmluaXNoZWQKKyAgICAgICAgICAgICAgICBpZiBGYWxzZSBhbmQgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJmaW5pc2hlZCB0aHJlYWRzOiAiLCBuRmluaXNoZWQKKyAgICAgICAgICAgIGlmIG5GaW5pc2hlZCA9PSBjb250ZXh0Lm5UaHJlYWRzOgorICAgICAgICAgICAgICAgIGNvbnRleHQuZXZlbnQuc2V0KCkKKworICAgIGRlZiB0ZXN0X3BlbmRpbmdjYWxsc19ub25fdGhyZWFkZWQoc2VsZik6CisgICAgICAgICNhZ2FpbiwganVzdCB1c2luZyB0aGUgbWFpbiB0aHJlYWQsIGxpa2VseSB0aGV5IHdpbGwgYWxsIGJlIGRpc3BhdGNoZWQgYXQKKyAgICAgICAgI29uY2UuICBJdCBpcyBvayB0byBhc2sgZm9yIHRvbyBtYW55LCBiZWNhdXNlIHdlIGxvb3AgdW50aWwgd2UgZmluZCBhIHNsb3QuCisgICAgICAgICN0aGUgbG9vcCBjYW4gYmUgaW50ZXJydXB0ZWQgdG8gZGlzcGF0Y2guCisgICAgICAgICN0aGVyZSBhcmUgb25seSAzMiBkaXNwYXRjaCBzbG90cywgc28gd2UgZ28gZm9yIHR3aWNlIHRoYXQhCisgICAgICAgIGwgPSBbXQorICAgICAgICBuID0gNjQKKyAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfc3VibWl0KGwsIG4pCisgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQobCwgbikKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcgYW5kIHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBUZXN0VGhyZWFkU3RhdGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHRlc3Rfc3VwcG9ydC5yZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF90aHJlYWRfc3RhdGUoc2VsZik6CisgICAgICAgICMgc29tZSBleHRyYSB0aHJlYWQtc3RhdGUgdGVzdHMgZHJpdmVuIHZpYSBfdGVzdGNhcGkKKyAgICAgICAgZGVmIHRhcmdldCgpOgorICAgICAgICAgICAgaWRlbnRzID0gW10KKworICAgICAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICAgICAgaWRlbnRzLmFwcGVuZCh0aHJlYWQuZ2V0X2lkZW50KCkpCisKKyAgICAgICAgICAgIF90ZXN0Y2FwaS5fdGVzdF90aHJlYWRfc3RhdGUoY2FsbGJhY2spCisgICAgICAgICAgICBhID0gYiA9IGNhbGxiYWNrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICAjIENoZWNrIG91ciBtYWluIHRocmVhZCBpcyBpbiB0aGUgbGlzdCBleGFjdGx5IDMgdGltZXMuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkZW50cy5jb3VudCh0aHJlYWQuZ2V0X2lkZW50KCkpLCAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBtYWluIHRocmVhZCBjb3JyZWN0bHkgaW4gdGhlIGxpc3QiKQorCisgICAgICAgIHRhcmdldCgpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD10YXJnZXQpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LmpvaW4oKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBmb3IgbmFtZSBpbiBkaXIoX3Rlc3RjYXBpKToKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCd0ZXN0XycpOgorICAgICAgICAgICAgdGVzdCA9IGdldGF0dHIoX3Rlc3RjYXBpLCBuYW1lKQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgImludGVybmFsIiwgbmFtZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlc3QoKQorICAgICAgICAgICAgZXhjZXB0IF90ZXN0Y2FwaS5lcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCwgc3lzLmV4Y19pbmZvKClbMV0KKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFBlbmRpbmdDYWxscywgVGVzdFRocmVhZFN0YXRlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jZC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkYWE4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jZC5weQpAQCAtMCwwICsxLDMwIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJXaGltcHkgdGVzdCBzY3JpcHQgZm9yIHRoZSBjZCBtb2R1bGUKKyAgIFJvZ2VyIEUuIE1hc3NlCisiIiIKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKKworY2QgPSBpbXBvcnRfbW9kdWxlKCdjZCcpCisKK2NkYXR0cnMgPSBbJ0JMT0NLU0laRScsICdDRFJPTScsICdEQVRBU0laRScsICdFUlJPUicsICdOT0RJU0MnLCAnUEFVU0VEJywgJ1BMQVlJTkcnLCAnUkVBRFknLAorICAgICAgICAgICAnU1RJTEwnLCAnX19kb2NfXycsICdfX25hbWVfXycsICdhdGltZScsICdhdWRpbycsICdjYXRhbG9nJywgJ2NvbnRyb2wnLCAnY3JlYXRlcGFyc2VyJywgJ2Vycm9yJywKKyAgICAgICAgICAgJ2lkZW50JywgJ2luZGV4JywgJ21zZnRvZnJhbWUnLCAnb3BlbicsICdwbnVtJywgJ3B0aW1lJ10KKworCisjIFRoaXMgaXMgYSB2ZXJ5IGlub2J0cnVzaXZlIHRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGNkIG1vZHVsZSBhbmQgYWxsIGl0cworIyBhdHRyaWJ1dGVzLiAgTW9yZSBjb21wcmVoZW5zaXZlIGV4YW1wbGVzIGNhbiBiZSBmb3VuZCBpbiBEZW1vL2NkIGFuZAorIyByZXF1aXJlIHRoYXQgeW91IGhhdmUgYSBDRCBhbmQgYSBDRCBST00gZHJpdmUKKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgdG91Y2ggYWxsIHRoZSBhdHRyaWJ1dGVzIG9mIGNkIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnVG91Y2hpbmcgY2QgbW9kdWxlIGF0dHJpYnV0ZXMuLi4nCisgICAgZm9yIGF0dHIgaW4gY2RhdHRyczoKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICd0b3VjaGluZzogJywgYXR0cgorICAgICAgICBnZXRhdHRyKGNkLCBhdHRyKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDczZjAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jZmdwYXJzZXIucHkKQEAgLTAsMCArMSw3MzggQEAKK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBVc2VyRGljdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIFNvcnRlZERpY3QoVXNlckRpY3QuVXNlckRpY3QpOgorICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5kYXRhLml0ZW1zKCkKKyAgICAgICAgcmVzdWx0LnNvcnQoKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5kYXRhLmtleXMoKQorICAgICAgICByZXN1bHQuc29ydCgpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiB2YWx1ZXMoc2VsZik6CisgICAgICAgICMgWFhYIG5ldmVyIHVzZWQ/CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaXRlbXMoKQorICAgICAgICByZXR1cm4gW2lbMV0gZm9yIGkgaW4gcmVzdWx0XQorCisgICAgZGVmIGl0ZXJpdGVtcyhzZWxmKTogcmV0dXJuIGl0ZXIoc2VsZi5pdGVtcygpKQorICAgIGRlZiBpdGVya2V5cyhzZWxmKTogcmV0dXJuIGl0ZXIoc2VsZi5rZXlzKCkpCisgICAgX19pdGVyX18gPSBpdGVya2V5cworICAgIGRlZiBpdGVydmFsdWVzKHNlbGYpOiByZXR1cm4gaXRlcihzZWxmLnZhbHVlcygpKQorCisKK2NsYXNzIFRlc3RDYXNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYWxsb3dfbm9fdmFsdWUgPSBGYWxzZQorCisgICAgZGVmIG5ld2NvbmZpZyhzZWxmLCBkZWZhdWx0cz1Ob25lKToKKyAgICAgICAgaWYgZGVmYXVsdHMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY2YgPSBzZWxmLmNvbmZpZ19jbGFzcyhhbGxvd19ub192YWx1ZT1zZWxmLmFsbG93X25vX3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jZiA9IHNlbGYuY29uZmlnX2NsYXNzKGRlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X25vX3ZhbHVlPXNlbGYuYWxsb3dfbm9fdmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmLmNmCisKKyAgICBkZWYgZnJvbXN0cmluZyhzZWxmLCBzdHJpbmcsIGRlZmF1bHRzPU5vbmUpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKGRlZmF1bHRzKQorICAgICAgICBzaW8gPSBTdHJpbmdJTy5TdHJpbmdJTyhzdHJpbmcpCisgICAgICAgIGNmLnJlYWRmcChzaW8pCisgICAgICAgIHJldHVybiBjZgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGNvbmZpZ19zdHJpbmcgPSAoCisgICAgICAgICAgICAiW0ZvbyBCYXJdXG4iCisgICAgICAgICAgICAiZm9vPWJhclxuIgorICAgICAgICAgICAgIltTcGFjZXkgQmFyXVxuIgorICAgICAgICAgICAgImZvbyA9IGJhclxuIgorICAgICAgICAgICAgIltDb21tZW50ZWQgQmFyXVxuIgorICAgICAgICAgICAgImZvbzogYmFyIDsgY29tbWVudFxuIgorICAgICAgICAgICAgIltMb25nIExpbmVdXG4iCisgICAgICAgICAgICAiZm9vOiB0aGlzIGxpbmUgaXMgbXVjaCwgbXVjaCBsb25nZXIgdGhhbiBteSBlZGl0b3JcbiIKKyAgICAgICAgICAgICIgICBsaWtlcyBpdC5cbiIKKyAgICAgICAgICAgICJbU2VjdGlvblxcd2l0aCR3ZWlyZCVjaGFyYWN0ZXJzW1x0XVxuIgorICAgICAgICAgICAgIltJbnRlcm5hdGlvbmFsaXplZCBTdHVmZl1cbiIKKyAgICAgICAgICAgICJmb29bYmddOiBCdWxnYXJpYW5cbiIKKyAgICAgICAgICAgICJmb289RGVmYXVsdFxuIgorICAgICAgICAgICAgImZvb1tlbl09RW5nbGlzaFxuIgorICAgICAgICAgICAgImZvb1tkZV09RGV1dHNjaFxuIgorICAgICAgICAgICAgIltTcGFjZXNdXG4iCisgICAgICAgICAgICAia2V5IHdpdGggc3BhY2VzIDogdmFsdWVcbiIKKyAgICAgICAgICAgICJhbm90aGVyIHdpdGggc3BhY2VzID0gc3BsYXQhXG4iCisgICAgICAgICAgICApCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBjb25maWdfc3RyaW5nICs9ICgKKyAgICAgICAgICAgICAgICAiW05vVmFsdWVdXG4iCisgICAgICAgICAgICAgICAgIm9wdGlvbi13aXRob3V0LXZhbHVlXG4iCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKGNvbmZpZ19zdHJpbmcpCisgICAgICAgIEwgPSBjZi5zZWN0aW9ucygpCisgICAgICAgIEwuc29ydCgpCisgICAgICAgIEUgPSBbcidDb21tZW50ZWQgQmFyJywKKyAgICAgICAgICAgICByJ0ZvbyBCYXInLAorICAgICAgICAgICAgIHInSW50ZXJuYXRpb25hbGl6ZWQgU3R1ZmYnLAorICAgICAgICAgICAgIHInTG9uZyBMaW5lJywKKyAgICAgICAgICAgICByJ1NlY3Rpb25cd2l0aCR3ZWlyZCVjaGFyYWN0ZXJzWycgJ1x0JywKKyAgICAgICAgICAgICByJ1NwYWNlcycsCisgICAgICAgICAgICAgcidTcGFjZXkgQmFyJywKKyAgICAgICAgICAgICBdCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBFLmFwcGVuZChyJ05vVmFsdWUnKQorICAgICAgICBFLnNvcnQoKQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoTCwgRSkKKworICAgICAgICAjIFRoZSB1c2Ugb2Ygc3BhY2VzIGluIHRoZSBzZWN0aW9uIG5hbWVzIHNlcnZlcyBhcyBhCisgICAgICAgICMgcmVncmVzc2lvbiB0ZXN0IGZvciBTb3VyY2VGb3JnZSBidWcgIzU4MzI0ODoKKyAgICAgICAgIyBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvNTgzMjQ4CisgICAgICAgIGVxKGNmLmdldCgnRm9vIEJhcicsICdmb28nKSwgJ2JhcicpCisgICAgICAgIGVxKGNmLmdldCgnU3BhY2V5IEJhcicsICdmb28nKSwgJ2JhcicpCisgICAgICAgIGVxKGNmLmdldCgnQ29tbWVudGVkIEJhcicsICdmb28nKSwgJ2JhcicpCisgICAgICAgIGVxKGNmLmdldCgnU3BhY2VzJywgJ2tleSB3aXRoIHNwYWNlcycpLCAndmFsdWUnKQorICAgICAgICBlcShjZi5nZXQoJ1NwYWNlcycsICdhbm90aGVyIHdpdGggc3BhY2VzJyksICdzcGxhdCEnKQorICAgICAgICBpZiBzZWxmLmFsbG93X25vX3ZhbHVlOgorICAgICAgICAgICAgZXEoY2YuZ2V0KCdOb1ZhbHVlJywgJ29wdGlvbi13aXRob3V0LXZhbHVlJyksIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignX19uYW1lX18nLCBjZi5vcHRpb25zKCJGb28gQmFyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fICJvcHRpb24iIHNob3VsZCBub3QgYmUgZXhwb3NlZCBieSB0aGUgQVBJIScpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHJpZ2h0IHRoaW5ncyBoYXBwZW4gZm9yIHJlbW92ZV9vcHRpb24oKTsKKyAgICAgICAgIyBhZGRlZCB0byBpbmNsdWRlIGNoZWNrIGZvciBTb3VyY2VGb3JnZSBidWcgIzEyMzMyNDoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmLnJlbW92ZV9vcHRpb24oJ0ZvbyBCYXInLCAnZm9vJyksCisgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlX29wdGlvbigpIGZhaWxlZCB0byByZXBvcnQgZXhpc3RlbmNlIG9mIG9wdGlvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2YuaGFzX29wdGlvbignRm9vIEJhcicsICdmb28nKSwKKyAgICAgICAgICAgICAgICAgICAgInJlbW92ZV9vcHRpb24oKSBmYWlsZWQgdG8gcmVtb3ZlIG9wdGlvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2YucmVtb3ZlX29wdGlvbignRm9vIEJhcicsICdmb28nKSwKKyAgICAgICAgICAgICAgICAgICAgInJlbW92ZV9vcHRpb24oKSBmYWlsZWQgdG8gcmVwb3J0IG5vbi1leGlzdGVuY2Ugb2Ygb3B0aW9uIgorICAgICAgICAgICAgICAgICAgICAiIHRoYXQgd2FzIHJlbW92ZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKENvbmZpZ1BhcnNlci5Ob1NlY3Rpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2YucmVtb3ZlX29wdGlvbiwgJ05vIFN1Y2ggU2VjdGlvbicsICdmb28nKQorCisgICAgICAgIGVxKGNmLmdldCgnTG9uZyBMaW5lJywgJ2ZvbycpLAorICAgICAgICAgICAndGhpcyBsaW5lIGlzIG11Y2gsIG11Y2ggbG9uZ2VyIHRoYW4gbXkgZWRpdG9yXG5saWtlcyBpdC4nKQorCisgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdml0eShzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIGNmLmFkZF9zZWN0aW9uKCJBIikKKyAgICAgICAgY2YuYWRkX3NlY3Rpb24oImEiKQorICAgICAgICBMID0gY2Yuc2VjdGlvbnMoKQorICAgICAgICBMLnNvcnQoKQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoTCwgWyJBIiwgImEiXSkKKyAgICAgICAgY2Yuc2V0KCJhIiwgIkIiLCAidmFsdWUiKQorICAgICAgICBlcShjZi5vcHRpb25zKCJhIiksIFsiYiJdKQorICAgICAgICBlcShjZi5nZXQoImEiLCAiYiIpLCAidmFsdWUiLAorICAgICAgICAgICAiY291bGQgbm90IGxvY2F0ZSBvcHRpb24sIGV4cGVjdGluZyBjYXNlLWluc2Vuc2l0aXZlIG9wdGlvbiBuYW1lcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZi5oYXNfb3B0aW9uKCJhIiwgImIiKSkKKyAgICAgICAgY2Yuc2V0KCJBIiwgIkEtQiIsICJBLUIgdmFsdWUiKQorICAgICAgICBmb3Igb3B0IGluICgiYS1iIiwgIkEtYiIsICJhLUIiLCAiQS1CIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgY2YuaGFzX29wdGlvbigiQSIsIG9wdCksCisgICAgICAgICAgICAgICAgImhhc19vcHRpb24oKSByZXR1cm5lZCBmYWxzZSBmb3Igb3B0aW9uIHdoaWNoIHNob3VsZCBleGlzdCIpCisgICAgICAgIGVxKGNmLm9wdGlvbnMoIkEiKSwgWyJhLWIiXSkKKyAgICAgICAgZXEoY2Yub3B0aW9ucygiYSIpLCBbImIiXSkKKyAgICAgICAgY2YucmVtb3ZlX29wdGlvbigiYSIsICJCIikKKyAgICAgICAgZXEoY2Yub3B0aW9ucygiYSIpLCBbXSkKKworICAgICAgICAjIFNGIGJ1ZyAjNDMyMzY5OgorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygKKyAgICAgICAgICAgICJbTXlTZWN0aW9uXVxuT3B0aW9uOiBmaXJzdCBsaW5lXG5cdHNlY29uZCBsaW5lXG4iKQorICAgICAgICBlcShjZi5vcHRpb25zKCJNeVNlY3Rpb24iKSwgWyJvcHRpb24iXSkKKyAgICAgICAgZXEoY2YuZ2V0KCJNeVNlY3Rpb24iLCAiT3B0aW9uIiksICJmaXJzdCBsaW5lXG5zZWNvbmQgbGluZSIpCisKKyAgICAgICAgIyBTRiBidWcgIzU2MTgyMjoKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoIltzZWN0aW9uXVxubmVrZXk9bmV2YWx1ZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHM9eyJrZXkiOiJ2YWx1ZSJ9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2YuaGFzX29wdGlvbigic2VjdGlvbiIsICJLZXkiKSkKKworCisgICAgZGVmIHRlc3RfZGVmYXVsdF9jYXNlX3NlbnNpdGl2aXR5KHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKHsiZm9vIjogIkJhciJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2YuZ2V0KCJERUZBVUxUIiwgIkZvbyIpLCAiQmFyIiwKKyAgICAgICAgICAgICJjb3VsZCBub3QgbG9jYXRlIG9wdGlvbiwgZXhwZWN0aW5nIGNhc2UtaW5zZW5zaXRpdmUgb3B0aW9uIG5hbWVzIikKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZyh7IkZvbyI6ICJCYXIifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNmLmdldCgiREVGQVVMVCIsICJGb28iKSwgIkJhciIsCisgICAgICAgICAgICAiY291bGQgbm90IGxvY2F0ZSBvcHRpb24sIGV4cGVjdGluZyBjYXNlLWluc2Vuc2l0aXZlIGRlZmF1bHRzIikKKworICAgIGRlZiB0ZXN0X3BhcnNlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5uZXdjb25maWcoKQorICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKENvbmZpZ1BhcnNlci5QYXJzaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIltGb29dXG4gIGV4dHJhLXNwYWNlczogc3BsYXRcbiIpCisgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoQ29uZmlnUGFyc2VyLlBhcnNpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW0Zvb11cbiAgZXh0cmEtc3BhY2VzPSBzcGxhdFxuIikKKyAgICAgICAgc2VsZi5wYXJzZV9lcnJvcihDb25maWdQYXJzZXIuUGFyc2luZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbRm9vXVxuOnZhbHVlLXdpdGhvdXQtb3B0aW9uLW5hbWVcbiIpCisgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoQ29uZmlnUGFyc2VyLlBhcnNpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW0Zvb11cbj12YWx1ZS13aXRob3V0LW9wdGlvbi1uYW1lXG4iKQorICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKENvbmZpZ1BhcnNlci5NaXNzaW5nU2VjdGlvbkhlYWRlckVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJObyBTZWN0aW9uIVxuIikKKworICAgIGRlZiBwYXJzZV9lcnJvcihzZWxmLCBleGMsIHNyYyk6CisgICAgICAgIHNpbyA9IFN0cmluZ0lPLlN0cmluZ0lPKHNyYykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBzZWxmLmNmLnJlYWRmcCwgc2lvKQorCisgICAgZGVmIHRlc3RfcXVlcnlfZXJyb3JzKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5zZWN0aW9ucygpLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibmV3IENvbmZpZ1BhcnNlciBzaG91bGQgaGF2ZSBubyBkZWZpbmVkIHNlY3Rpb25zIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5oYXNfc2VjdGlvbigiRm9vIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBDb25maWdQYXJzZXIgc2hvdWxkIGhhdmUgbm8gYWNrbm93bGVkZ2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2VjdGlvbnMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLm9wdGlvbnMsICJGb28iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLnNldCwgImZvbyIsICJiYXIiLCAidmFsdWUiKQorICAgICAgICBzZWxmLmdldF9lcnJvcihDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3IsICJmb28iLCAiYmFyIikKKyAgICAgICAgY2YuYWRkX3NlY3Rpb24oImZvbyIpCisgICAgICAgIHNlbGYuZ2V0X2Vycm9yKENvbmZpZ1BhcnNlci5Ob09wdGlvbkVycm9yLCAiZm9vIiwgImJhciIpCisKKyAgICBkZWYgZ2V0X2Vycm9yKHNlbGYsIGV4Yywgc2VjdGlvbiwgb3B0aW9uKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jZi5nZXQoc2VjdGlvbiwgb3B0aW9uKQorICAgICAgICBleGNlcHQgZXhjLCBlOgorICAgICAgICAgICAgcmV0dXJuIGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIHR5cGUgJXMuJXMiCisgICAgICAgICAgICAgICAgICAgICAgJSAoZXhjLl9fbW9kdWxlX18sIGV4Yy5fX25hbWVfXykpCisKKyAgICBkZWYgdGVzdF9ib29sZWFuKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygKKyAgICAgICAgICAgICJbQk9PTFRFU1RdXG4iCisgICAgICAgICAgICAiVDE9MVxuIgorICAgICAgICAgICAgIlQyPVRSVUVcbiIKKyAgICAgICAgICAgICJUMz1UcnVlXG4iCisgICAgICAgICAgICAiVDQ9b05cbiIKKyAgICAgICAgICAgICJUNT15ZXNcbiIKKyAgICAgICAgICAgICJGMT0wXG4iCisgICAgICAgICAgICAiRjI9RkFMU0VcbiIKKyAgICAgICAgICAgICJGMz1GYWxzZVxuIgorICAgICAgICAgICAgIkY0PW9GRlxuIgorICAgICAgICAgICAgIkY1PW5PXG4iCisgICAgICAgICAgICAiRTE9MlxuIgorICAgICAgICAgICAgIkUyPWZvb1xuIgorICAgICAgICAgICAgIkUzPS0xXG4iCisgICAgICAgICAgICAiRTQ9MC4xXG4iCisgICAgICAgICAgICAiRTU9RkFMU0UgQU5EIE1PUkUiCisgICAgICAgICAgICApCisgICAgICAgIGZvciB4IGluIHJhbmdlKDEsIDUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmLmdldGJvb2xlYW4oJ0JPT0xURVNUJywgJ3QlZCcgJSB4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2YuZ2V0Ym9vbGVhbignQk9PTFRFU1QnLCAnZiVkJyAlIHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLmdldGJvb2xlYW4sICdCT09MVEVTVCcsICdlJWQnICUgeCkKKworICAgIGRlZiB0ZXN0X3dlaXJkX2Vycm9ycyhzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIGNmLmFkZF9zZWN0aW9uKCJGb28iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhDb25maWdQYXJzZXIuRHVwbGljYXRlU2VjdGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjZi5hZGRfc2VjdGlvbiwgIkZvbyIpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgY29uZmlnX3N0cmluZyA9ICgKKyAgICAgICAgICAgICJbTG9uZyBMaW5lXVxuIgorICAgICAgICAgICAgImZvbzogdGhpcyBsaW5lIGlzIG11Y2gsIG11Y2ggbG9uZ2VyIHRoYW4gbXkgZWRpdG9yXG4iCisgICAgICAgICAgICAiICAgbGlrZXMgaXQuXG4iCisgICAgICAgICAgICAiW0RFRkFVTFRdXG4iCisgICAgICAgICAgICAiZm9vOiBhbm90aGVyIHZlcnlcbiIKKyAgICAgICAgICAgICIgbG9uZyBsaW5lXG4iCisgICAgICAgICAgICApCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBjb25maWdfc3RyaW5nICs9ICgKKyAgICAgICAgICAgICJbVmFsdWVsZXNzXVxuIgorICAgICAgICAgICAgIm9wdGlvbi13aXRob3V0LXZhbHVlXG4iCisgICAgICAgICAgICApCisKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoY29uZmlnX3N0cmluZykKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBjZi53cml0ZShvdXRwdXQpCisgICAgICAgIGV4cGVjdF9zdHJpbmcgPSAoCisgICAgICAgICAgICAiW0RFRkFVTFRdXG4iCisgICAgICAgICAgICAiZm9vID0gYW5vdGhlciB2ZXJ5XG4iCisgICAgICAgICAgICAiXHRsb25nIGxpbmVcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJbTG9uZyBMaW5lXVxuIgorICAgICAgICAgICAgImZvbyA9IHRoaXMgbGluZSBpcyBtdWNoLCBtdWNoIGxvbmdlciB0aGFuIG15IGVkaXRvclxuIgorICAgICAgICAgICAgIlx0bGlrZXMgaXQuXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICApCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBleHBlY3Rfc3RyaW5nICs9ICgKKyAgICAgICAgICAgICAgICAiW1ZhbHVlbGVzc11cbiIKKyAgICAgICAgICAgICAgICAib3B0aW9uLXdpdGhvdXQtdmFsdWVcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLCBleHBlY3Rfc3RyaW5nKQorCisgICAgZGVmIHRlc3Rfc2V0X3N0cmluZ190eXBlcyhzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoIltzZWN0XVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uMT1mb29cbiIpCisgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBkb24ndCBnZXQgYW4gZXhjZXB0aW9uIHdoZW4gc2V0dGluZyB2YWx1ZXMgaW4KKyAgICAgICAgIyBhbiBleGlzdGluZyBzZWN0aW9uIHVzaW5nIHN0cmluZ3M6CisgICAgICAgIGNsYXNzIG15c3RyKHN0cik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNmLnNldCgic2VjdCIsICJvcHRpb24xIiwgInNwbGF0IikKKyAgICAgICAgY2Yuc2V0KCJzZWN0IiwgIm9wdGlvbjEiLCBteXN0cigic3BsYXQiKSkKKyAgICAgICAgY2Yuc2V0KCJzZWN0IiwgIm9wdGlvbjIiLCAic3BsYXQiKQorICAgICAgICBjZi5zZXQoInNlY3QiLCAib3B0aW9uMiIsIG15c3RyKCJzcGxhdCIpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB1bmljb2RlCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZi5zZXQoInNlY3QiLCAib3B0aW9uMSIsIHVuaWNvZGUoInNwbGF0IikpCisgICAgICAgICAgICBjZi5zZXQoInNlY3QiLCAib3B0aW9uMiIsIHVuaWNvZGUoInNwbGF0IikpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JldHVybnNfZmlsZV9saXN0KHNlbGYpOgorICAgICAgICBmaWxlMSA9IHRlc3Rfc3VwcG9ydC5maW5kZmlsZSgiY2ZncGFyc2VyLjEiKQorICAgICAgICAjIGNoZWNrIHdoZW4gd2UgcGFzcyBhIG1peCBvZiByZWFkYWJsZSBhbmQgbm9uLXJlYWRhYmxlIGZpbGVzOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgcGFyc2VkX2ZpbGVzID0gY2YucmVhZChbZmlsZTEsICJub25leGlzdGVudC1maWxlIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VkX2ZpbGVzLCBbZmlsZTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgiRm9vIEJhciIsICJmb28iKSwgIm5ld2JhciIpCisgICAgICAgICMgY2hlY2sgd2hlbiB3ZSBwYXNzIG9ubHkgYSBmaWxlbmFtZToKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHBhcnNlZF9maWxlcyA9IGNmLnJlYWQoZmlsZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VkX2ZpbGVzLCBbZmlsZTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgiRm9vIEJhciIsICJmb28iKSwgIm5ld2JhciIpCisgICAgICAgICMgY2hlY2sgd2hlbiB3ZSBwYXNzIG9ubHkgbWlzc2luZyBmaWxlczoKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHBhcnNlZF9maWxlcyA9IGNmLnJlYWQoWyJub25leGlzdGVudC1maWxlIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VkX2ZpbGVzLCBbXSkKKyAgICAgICAgIyBjaGVjayB3aGVuIHdlIHBhc3Mgbm8gZmlsZXM6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBwYXJzZWRfZmlsZXMgPSBjZi5yZWFkKFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlZF9maWxlcywgW10pCisKKyAgICAjIHNoYXJlZCBieSBzdWJjbGFzc2VzCisgICAgZGVmIGdldF9pbnRlcnBvbGF0aW9uX2NvbmZpZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnJvbXN0cmluZygKKyAgICAgICAgICAgICJbRm9vXVxuIgorICAgICAgICAgICAgImJhcj1zb21ldGhpbmcgJSh3aXRoMSlzIGludGVycG9sYXRpb24gKDEgc3RlcClcbiIKKyAgICAgICAgICAgICJiYXI5PXNvbWV0aGluZyAlKHdpdGg5KXMgbG90cyBvZiBpbnRlcnBvbGF0aW9uICg5IHN0ZXBzKVxuIgorICAgICAgICAgICAgImJhcjEwPXNvbWV0aGluZyAlKHdpdGgxMClzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTAgc3RlcHMpXG4iCisgICAgICAgICAgICAiYmFyMTE9c29tZXRoaW5nICUod2l0aDExKXMgbG90cyBvZiBpbnRlcnBvbGF0aW9uICgxMSBzdGVwcylcbiIKKyAgICAgICAgICAgICJ3aXRoMTE9JSh3aXRoMTApc1xuIgorICAgICAgICAgICAgIndpdGgxMD0lKHdpdGg5KXNcbiIKKyAgICAgICAgICAgICJ3aXRoOT0lKHdpdGg4KXNcbiIKKyAgICAgICAgICAgICJ3aXRoOD0lKFdpdGg3KXNcbiIKKyAgICAgICAgICAgICJ3aXRoNz0lKFdJVEg2KXNcbiIKKyAgICAgICAgICAgICJ3aXRoNj0lKHdpdGg1KXNcbiIKKyAgICAgICAgICAgICJXaXRoNT0lKHdpdGg0KXNcbiIKKyAgICAgICAgICAgICJXSVRIND0lKHdpdGgzKXNcbiIKKyAgICAgICAgICAgICJ3aXRoMz0lKHdpdGgyKXNcbiIKKyAgICAgICAgICAgICJ3aXRoMj0lKHdpdGgxKXNcbiIKKyAgICAgICAgICAgICJ3aXRoMT13aXRoXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiW011dHVhbCBSZWN1cnNpb25dXG4iCisgICAgICAgICAgICAiZm9vPSUoYmFyKXNcbiIKKyAgICAgICAgICAgICJiYXI9JShmb28pc1xuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIltJbnRlcnBvbGF0aW9uIEVycm9yXVxuIgorICAgICAgICAgICAgIm5hbWU9JShyZWZlcmVuY2Upc1xuIiwKKyAgICAgICAgICAgICMgbm8gZGVmaW5pdGlvbiBmb3IgJ3JlZmVyZW5jZScKKyAgICAgICAgICAgIGRlZmF1bHRzPXsiZ2V0bmFtZSI6ICIlKF9fbmFtZV9fKXMifSkKKworICAgIGRlZiBjaGVja19pdGVtc19jb25maWcoc2VsZiwgZXhwZWN0ZWQpOgorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygKKyAgICAgICAgICAgICJbc2VjdGlvbl1cbiIKKyAgICAgICAgICAgICJuYW1lID0gdmFsdWVcbiIKKyAgICAgICAgICAgICJrZXk6IHwlKG5hbWUpc3wgXG4iCisgICAgICAgICAgICAiZ2V0ZGVmYXVsdDogfCUoZGVmYXVsdClzfFxuIgorICAgICAgICAgICAgImdldG5hbWU6IHwlKF9fbmFtZV9fKXN8IiwKKyAgICAgICAgICAgIGRlZmF1bHRzPXsiZGVmYXVsdCI6ICI8ZGVmYXVsdD4ifSkKKyAgICAgICAgTCA9IGxpc3QoY2YuaXRlbXMoInNlY3Rpb24iKSkKKyAgICAgICAgTC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMLCBleHBlY3RlZCkKKworCitjbGFzcyBDb25maWdQYXJzZXJUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgorICAgIGNvbmZpZ19jbGFzcyA9IENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIKKyAgICBhbGxvd19ub192YWx1ZSA9IFRydWUKKworICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb24oc2VsZik6CisgICAgICAgIHJhd3ZhbCA9IHsKKyAgICAgICAgICAgIENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXI6ICgic29tZXRoaW5nICUod2l0aDExKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb3RzIG9mIGludGVycG9sYXRpb24gKDExIHN0ZXBzKSIpLAorICAgICAgICAgICAgQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXI6ICIlKHdpdGgxKXMiLAorICAgICAgICB9CisgICAgICAgIGNmID0gc2VsZi5nZXRfaW50ZXJwb2xhdGlvbl9jb25maWcoKQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiZ2V0bmFtZSIpLCAiRm9vIikKKyAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiYmFyIiksICJzb21ldGhpbmcgd2l0aCBpbnRlcnBvbGF0aW9uICgxIHN0ZXApIikKKyAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiYmFyOSIpLAorICAgICAgICAgICAic29tZXRoaW5nIHdpdGggbG90cyBvZiBpbnRlcnBvbGF0aW9uICg5IHN0ZXBzKSIpCisgICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImJhcjEwIiksCisgICAgICAgICAgICJzb21ldGhpbmcgd2l0aCBsb3RzIG9mIGludGVycG9sYXRpb24gKDEwIHN0ZXBzKSIpCisgICAgICAgIHNlbGYuZ2V0X2Vycm9yKENvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uRGVwdGhFcnJvciwgIkZvbyIsICJiYXIxMSIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9uX21pc3NpbmdfdmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X2ludGVycG9sYXRpb25fY29uZmlnKCkKKyAgICAgICAgZSA9IHNlbGYuZ2V0X2Vycm9yKENvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZXJwb2xhdGlvbiBFcnJvciIsICJuYW1lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLnJlZmVyZW5jZSwgInJlZmVyZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5zZWN0aW9uLCAiSW50ZXJwb2xhdGlvbiBFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5vcHRpb24sICJuYW1lIikKKworICAgIGRlZiB0ZXN0X2l0ZW1zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2l0ZW1zX2NvbmZpZyhbKCdkZWZhdWx0JywgJzxkZWZhdWx0PicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdnZXRkZWZhdWx0JywgJ3w8ZGVmYXVsdD58JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2dldG5hbWUnLCAnfHNlY3Rpb258JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2tleScsICd8dmFsdWV8JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ25hbWUnLCAndmFsdWUnKV0pCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uc3RyaW5nX3R5cGVzKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgY2YuYWRkX3NlY3Rpb24oJ25vbi1zdHJpbmcnKQorICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnaW50JywgMSkKKyAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ2xpc3QnLCBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsICclKCddKQorICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnZGljdCcsIHsncGknOiAzLjE0MTU5LCAnJSgnOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJShsaXN0KSc6ICclKGxpc3QpJ30pCisgICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICdzdHJpbmdfd2l0aF9pbnRlcnBvbGF0aW9uJywgJyUobGlzdClzJykKKyAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ25vLXZhbHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnaW50JywgcmF3PVRydWUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLmdldCwgJ25vbi1zdHJpbmcnLCAnaW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnbGlzdCcsIHJhdz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsICclKCddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLmdldCwgJ25vbi1zdHJpbmcnLCAnbGlzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ2RpY3QnLCByYXc9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydwaSc6IDMuMTQxNTksICclKCc6IDEsICclKGxpc3QpJzogJyUobGlzdCknfSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5nZXQsICdub24tc3RyaW5nJywgJ2RpY3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdzdHJpbmdfd2l0aF9pbnRlcnBvbGF0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3PVRydWUpLCAnJShsaXN0KXMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjZi5nZXQsICdub24tc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZ193aXRoX2ludGVycG9sYXRpb24nLCByYXc9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ25vLXZhbHVlJyksIE5vbmUpCisKK2NsYXNzIE11bHRpbGluZVZhbHVlc1Rlc3RDYXNlKFRlc3RDYXNlQmFzZSk6CisgICAgY29uZmlnX2NsYXNzID0gQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcgorICAgIHdvbmRlcmZ1bF9zcGFtID0gKCJJJ20gaGF2aW5nIHNwYW0gc3BhbSBzcGFtIHNwYW0gIgorICAgICAgICAgICAgICAgICAgICAgICJzcGFtIHNwYW0gc3BhbSBiZWFrZWQgYmVhbnMgc3BhbSAiCisgICAgICAgICAgICAgICAgICAgICAgInNwYW0gc3BhbSBhbmQgc3BhbSEiKS5yZXBsYWNlKCcgJywgJ1x0XG4nKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHMgPSAnc2VjdGlvbnt9Jy5mb3JtYXQoaSkKKyAgICAgICAgICAgIGNmLmFkZF9zZWN0aW9uKHMpCisgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgY2Yuc2V0KHMsICdsb3ZlbHlfc3BhbXt9Jy5mb3JtYXQoaiksIHNlbGYud29uZGVyZnVsX3NwYW0pCisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBjZi53cml0ZShmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2RvbWluYXRpbmdfbXVsdGlsaW5lX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyB3ZSdyZSByZWFkaW5nIGZyb20gZmlsZSBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgdGhlIGNvZGUgY2hhbmdlZAorICAgICAgICAjIGR1cmluZyBwZXJmb3JtYW5jZSB1cGRhdGVzIGluIFB5dGhvbiAzLjIKKyAgICAgICAgY2ZfZnJvbV9maWxlID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTikgYXMgZjoKKyAgICAgICAgICAgIGNmX2Zyb21fZmlsZS5yZWFkZnAoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZl9mcm9tX2ZpbGUuZ2V0KCdzZWN0aW9uOCcsICdsb3ZlbHlfc3BhbTQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndvbmRlcmZ1bF9zcGFtLnJlcGxhY2UoJ1x0XG4nLCAnXG4nKSkKKworY2xhc3MgUmF3Q29uZmlnUGFyc2VyVGVzdENhc2UoVGVzdENhc2VCYXNlKToKKyAgICBjb25maWdfY2xhc3MgPSBDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyCisKKyAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9uKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYuZ2V0X2ludGVycG9sYXRpb25fY29uZmlnKCkKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImdldG5hbWUiKSwgIiUoX19uYW1lX18pcyIpCisgICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImJhciIpLAorICAgICAgICAgICAic29tZXRoaW5nICUod2l0aDEpcyBpbnRlcnBvbGF0aW9uICgxIHN0ZXApIikKKyAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiYmFyOSIpLAorICAgICAgICAgICAic29tZXRoaW5nICUod2l0aDkpcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDkgc3RlcHMpIikKKyAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiYmFyMTAiKSwKKyAgICAgICAgICAgInNvbWV0aGluZyAlKHdpdGgxMClzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTAgc3RlcHMpIikKKyAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiYmFyMTEiKSwKKyAgICAgICAgICAgInNvbWV0aGluZyAlKHdpdGgxMSlzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTEgc3RlcHMpIikKKworICAgIGRlZiB0ZXN0X2l0ZW1zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2l0ZW1zX2NvbmZpZyhbKCdkZWZhdWx0JywgJzxkZWZhdWx0PicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdnZXRkZWZhdWx0JywgJ3wlKGRlZmF1bHQpc3wnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZ2V0bmFtZScsICd8JShfX25hbWVfXylzfCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrZXknLCAnfCUobmFtZSlzfCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCduYW1lJywgJ3ZhbHVlJyldKQorCisgICAgZGVmIHRlc3Rfc2V0X25vbnN0cmluZ190eXBlcyhzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIGNmLmFkZF9zZWN0aW9uKCdub24tc3RyaW5nJykKKyAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ2ludCcsIDEpCisgICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICdsaXN0JywgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzXSkKKyAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ2RpY3QnLCB7J3BpJzogMy4xNDE1OX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ2ludCcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdsaXN0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnZGljdCcpLCB7J3BpJzogMy4xNDE1OX0pCisKKworY2xhc3MgU2FmZUNvbmZpZ1BhcnNlclRlc3RDYXNlKENvbmZpZ1BhcnNlclRlc3RDYXNlKToKKyAgICBjb25maWdfY2xhc3MgPSBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcgorCisgICAgZGVmIHRlc3Rfc2FmZV9pbnRlcnBvbGF0aW9uKHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvNTExNzM3CisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKCJbc2VjdGlvbl1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbjE9eHh4XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24yPSUob3B0aW9uMSlzL3h4eFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2s9JShvcHRpb24xKXMvJSVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3Rfb2s9JShvcHRpb24yKXMvJSVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoInNlY3Rpb24iLCAib2siKSwgInh4eC8lcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCJzZWN0aW9uIiwgIm5vdF9vayIpLCAieHh4L3h4eC8lcyIpCisKKyAgICBkZWYgdGVzdF9zZXRfbWFsZm9ybWF0dGVkX2ludGVycG9sYXRpb24oc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKCJbc2VjdF1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbjE9Zm9vXG4iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdzZWN0JywgIm9wdGlvbjEiKSwgImZvbyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2Yuc2V0LCAic2VjdCIsICJvcHRpb24xIiwgIiVmb28iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgIm9wdGlvbjEiLCAiZm9vJSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMSIsICJmJW9vIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnc2VjdCcsICJvcHRpb24xIiksICJmb28iKQorCisgICAgICAgICMgYnVnICM1NzQxOiBkb3VibGUgcGVyY2VudHMgYXJlICpub3QqIG1hbGZvcm1lZAorICAgICAgICBjZi5zZXQoInNlY3QiLCAib3B0aW9uMiIsICJmb28lJWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCJzZWN0IiwgIm9wdGlvbjIiKSwgImZvbyViYXIiKQorCisgICAgZGVmIHRlc3Rfc2V0X25vbnN0cmluZ190eXBlcyhzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoIltzZWN0XVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uMT1mb29cbiIpCisgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBnZXQgYSBUeXBlRXJyb3Igd2hlbiBzZXR0aW5nIG5vbi1zdHJpbmcgdmFsdWVzCisgICAgICAgICMgaW4gYW4gZXhpc3Rpbmcgc2VjdGlvbjoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgIm9wdGlvbjEiLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMSIsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgIm9wdGlvbjEiLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgIm9wdGlvbjIiLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMiIsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgIm9wdGlvbjIiLCBvYmplY3QoKSkKKworICAgIGRlZiB0ZXN0X2FkZF9zZWN0aW9uX2RlZmF1bHRfMShzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNmLmFkZF9zZWN0aW9uLCAiZGVmYXVsdCIpCisKKyAgICBkZWYgdGVzdF9hZGRfc2VjdGlvbl9kZWZhdWx0XzIoc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjZi5hZGRfc2VjdGlvbiwgIkRFRkFVTFQiKQorCisKK2NsYXNzIFNhZmVDb25maWdQYXJzZXJUZXN0Q2FzZU5vVmFsdWUoU2FmZUNvbmZpZ1BhcnNlclRlc3RDYXNlKToKKyAgICBhbGxvd19ub192YWx1ZSA9IFRydWUKKworY2xhc3MgVGVzdENoYWluTWFwKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pc3N1ZV8xMjcxNyhzZWxmKToKKyAgICAgICAgZDEgPSBkaWN0KHJlZD0xLCBncmVlbj0yKQorICAgICAgICBkMiA9IGRpY3QoZ3JlZW49MywgYmx1ZT00KQorICAgICAgICBkY29tYiA9IGQyLmNvcHkoKQorICAgICAgICBkY29tYi51cGRhdGUoZDEpCisgICAgICAgIGNtID0gQ29uZmlnUGFyc2VyLl9DaGFpbm1hcChkMSwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5rZXlzKCksIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGNtLmtleXMoKSksIHNldChkY29tYi5rZXlzKCkpKSAgICAgICMga2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGNtLnZhbHVlcygpKSwgc2V0KGRjb21iLnZhbHVlcygpKSkgICMgdmFsdWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoY20uaXRlbXMoKSksIHNldChkY29tYi5pdGVtcygpKSkgICAgIyBpdGVtcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGNtKSwgc2V0KGRjb21iKSkgICAgICAgICAgICAgICAgICAgICMgX19pdGVyX18gKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbSwgZGNvbWIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBfX2VxX18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtjbVtrXSBmb3IgayBpbiBkY29tYl0sIGRjb21iLnZhbHVlcygpKSAjIF9fZ2V0aXRlbV9fKCkKKyAgICAgICAga2xpc3QgPSAncmVkIGdyZWVuIGJsdWUgYmxhY2sgYnJvd24nLnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbY20uZ2V0KGssIDEwKSBmb3IgayBpbiBrbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW2Rjb21iLmdldChrLCAxMCkgZm9yIGsgaW4ga2xpc3RdKSAgICAgICMgZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBpbiBjbSBmb3IgayBpbiBrbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW2sgaW4gZGNvbWIgZm9yIGsgaW4ga2xpc3RdKSAgICAgICAgICAgICMgX19jb250YWluc19fKCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbY20uaGFzX2tleShrKSBmb3IgayBpbiBrbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkY29tYi5oYXNfa2V5KGspIGZvciBrIGluIGtsaXN0XSkgICMgaGFzX2tleSgpCisKK2NsYXNzIElzc3VlNzAwNVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IG91dHB1dCB3aGVuIE5vbmUgaXMgc2V0KCkgYXMgYSB2YWx1ZSBhbmQgYWxsb3dfbm9fdmFsdWUgPT0gRmFsc2UuCisKKyAgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzAwNQorCisgICAgIiIiCisKKyAgICBleHBlY3RlZF9vdXRwdXQgPSAiW3NlY3Rpb25dXG5vcHRpb24gPSBOb25lXG5cbiIKKworICAgIGRlZiBwcmVwYXJlKHNlbGYsIGNvbmZpZ19jbGFzcyk6CisgICAgICAgICMgVGhpcyBpcyB0aGUgZGVmYXVsdCwgYnV0IHRoYXQncyB0aGUgcG9pbnQuCisgICAgICAgIGNwID0gY29uZmlnX2NsYXNzKGFsbG93X25vX3ZhbHVlPUZhbHNlKQorICAgICAgICBjcC5hZGRfc2VjdGlvbigic2VjdGlvbiIpCisgICAgICAgIGNwLnNldCgic2VjdGlvbiIsICJvcHRpb24iLCBOb25lKQorICAgICAgICBzaW8gPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGNwLndyaXRlKHNpbykKKyAgICAgICAgcmV0dXJuIHNpby5nZXR2YWx1ZSgpCisKKyAgICBkZWYgdGVzdF9ub25lX2FzX3ZhbHVlX3N0cmluZ2lmaWVkKHNlbGYpOgorICAgICAgICBvdXRwdXQgPSBzZWxmLnByZXBhcmUoQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIHNlbGYuZXhwZWN0ZWRfb3V0cHV0KQorCisgICAgZGVmIHRlc3Rfbm9uZV9hc192YWx1ZV9zdHJpbmdpZmllZF9yYXcoc2VsZik6CisgICAgICAgIG91dHB1dCA9IHNlbGYucHJlcGFyZShDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgc2VsZi5leHBlY3RlZF9vdXRwdXQpCisKKworY2xhc3MgU29ydGVkVGVzdENhc2UoUmF3Q29uZmlnUGFyc2VyVGVzdENhc2UpOgorICAgIGRlZiBuZXdjb25maWcoc2VsZiwgZGVmYXVsdHM9Tm9uZSk6CisgICAgICAgIHNlbGYuY2YgPSBzZWxmLmNvbmZpZ19jbGFzcyhkZWZhdWx0cz1kZWZhdWx0cywgZGljdF90eXBlPVNvcnRlZERpY3QpCisgICAgICAgIHJldHVybiBzZWxmLmNmCisKKyAgICBkZWYgdGVzdF9zb3J0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuZnJvbXN0cmluZygiW2JdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAibzQ9MVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIm8zPTJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJvMj0zXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAibzE9NFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlthXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIms9dlxuIikKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzZWxmLmNmLndyaXRlKG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW2FdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgImsgPSB2XG5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW2JdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIm8xID0gNFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvMiA9IDNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibzMgPSAyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIm80ID0gMVxuXG4iKQorCisKK2NsYXNzIEV4Y2VwdGlvblBpY2tsaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciBpc3N1ZSAjMTM3NjA6IENvbmZpZ1BhcnNlciBleGNlcHRpb25zIGFyZSBub3QgcGlja2xhYmxlLiIiIgorCisgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgZTEgPSBDb25maWdQYXJzZXIuRXJyb3IoJ3ZhbHVlJykKKyAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKKyAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKworICAgIGRlZiB0ZXN0X25vc2VjdGlvbmVycm9yKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIGUxID0gQ29uZmlnUGFyc2VyLk5vU2VjdGlvbkVycm9yKCdzZWN0aW9uJykKKyAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKKyAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisKKyAgICBkZWYgdGVzdF9ub29wdGlvbmVycm9yKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIGUxID0gQ29uZmlnUGFyc2VyLk5vT3B0aW9uRXJyb3IoJ29wdGlvbicsICdzZWN0aW9uJykKKyAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKKyAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVzZWN0aW9uZXJyb3Ioc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgZTEgPSBDb25maWdQYXJzZXIuRHVwbGljYXRlU2VjdGlvbkVycm9yKCdzZWN0aW9uJykKKyAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKKyAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisKKyAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9uZXJyb3Ioc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgZTEgPSBDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbkVycm9yKCdvcHRpb24nLCAnc2VjdGlvbicsICdtc2cnKQorICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQorICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKworICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb25taXNzaW5nb3B0aW9uZXJyb3Ioc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgZTEgPSBDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcignb3B0aW9uJywgJ3NlY3Rpb24nLAorICAgICAgICAgICAgJ3Jhd3ZhbCcsICdyZWZlcmVuY2UnKQorICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQorICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnJlZmVyZW5jZSwgZTIucmVmZXJlbmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKworICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb25zeW50YXhlcnJvcihzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBlMSA9IENvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uU3ludGF4RXJyb3IoJ29wdGlvbicsICdzZWN0aW9uJywgJ21zZycpCisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCisgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEub3B0aW9uLCBlMi5vcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorCisgICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbmRlcHRoZXJyb3Ioc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgZTEgPSBDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3IoJ29wdGlvbicsICdzZWN0aW9uJywKKyAgICAgICAgICAgICdyYXd2YWwnKQorICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQorICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKworICAgIGRlZiB0ZXN0X3BhcnNpbmdlcnJvcihzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBlMSA9IENvbmZpZ1BhcnNlci5QYXJzaW5nRXJyb3IoJ3NvdXJjZScpCisgICAgICAgIGUxLmFwcGVuZCgxLCAnbGluZTEnKQorICAgICAgICBlMS5hcHBlbmQoMiwgJ2xpbmUyJykKKyAgICAgICAgZTEuYXBwZW5kKDMsICdsaW5lMycpCisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCisgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmZpbGVuYW1lLCBlMi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5lcnJvcnMsIGUyLmVycm9ycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nc2VjdGlvbmhlYWRlcmVycm9yKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIGUxID0gQ29uZmlnUGFyc2VyLk1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3IoJ2ZpbGVuYW1lJywgMTIzLCAnbGluZScpCisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCisgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmxpbmUsIGUyLmxpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuZmlsZW5hbWUsIGUyLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmxpbmVubywgZTIubGluZW5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgQ29uZmlnUGFyc2VyVGVzdENhc2UsCisgICAgICAgIE11bHRpbGluZVZhbHVlc1Rlc3RDYXNlLAorICAgICAgICBSYXdDb25maWdQYXJzZXJUZXN0Q2FzZSwKKyAgICAgICAgU2FmZUNvbmZpZ1BhcnNlclRlc3RDYXNlLAorICAgICAgICBTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2VOb1ZhbHVlLAorICAgICAgICBTb3J0ZWRUZXN0Q2FzZSwKKyAgICAgICAgSXNzdWU3MDA1VGVzdENhc2UsCisgICAgICAgIFRlc3RDaGFpbk1hcCwKKyAgICAgICAgRXhjZXB0aW9uUGlja2xpbmdUZXN0Q2FzZSwKKyAgICAgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NnaS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NnaS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmFiZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY2dpLnB5CkBAIC0wLDAgKzEsMzk0IEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzCitpbXBvcnQgY2dpCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIEhhY2tlZFN5c01vZHVsZToKKyAgICAjIFRoZSByZWdyZXNzaW9uIHRlc3Qgd2lsbCBoYXZlIHJlYWwgdmFsdWVzIGluIHN5cy5hcmd2LCB3aGljaAorICAgICMgd2lsbCBjb21wbGV0ZWx5IGNvbmZ1c2UgdGhlIHRlc3Qgb2YgdGhlIGNnaSBtb2R1bGUKKyAgICBhcmd2ID0gW10KKyAgICBzdGRpbiA9IHN5cy5zdGRpbgorCitjZ2kuc3lzID0gSGFja2VkU3lzTW9kdWxlKCkKKwordHJ5OgorICAgIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2NsYXNzIENvbXBhcmFibGVFeGNlcHRpb246CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycik6CisgICAgICAgIHNlbGYuZXJyID0gZXJyCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmLmVycikKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIGFuRXhjKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYW5FeGMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgeCA9IGNtcChzZWxmLmVyci5fX2NsYXNzX18sIGFuRXhjLl9fY2xhc3NfXykKKyAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgcmV0dXJuIGNtcChzZWxmLmVyci5hcmdzLCBhbkV4Yy5hcmdzKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLmVyciwgYXR0cikKKworZGVmIGRvX3Rlc3QoYnVmLCBtZXRob2QpOgorICAgIGVudiA9IHt9CisgICAgaWYgbWV0aG9kID09ICJHRVQiOgorICAgICAgICBmcCA9IE5vbmUKKyAgICAgICAgZW52WydSRVFVRVNUX01FVEhPRCddID0gJ0dFVCcKKyAgICAgICAgZW52WydRVUVSWV9TVFJJTkcnXSA9IGJ1ZgorICAgIGVsaWYgbWV0aG9kID09ICJQT1NUIjoKKyAgICAgICAgZnAgPSBTdHJpbmdJTyhidWYpCisgICAgICAgIGVudlsnUkVRVUVTVF9NRVRIT0QnXSA9ICdQT1NUJworICAgICAgICBlbnZbJ0NPTlRFTlRfVFlQRSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcKKyAgICAgICAgZW52WydDT05URU5UX0xFTkdUSCddID0gc3RyKGxlbihidWYpKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJ1bmtub3duIG1ldGhvZDogJXMiICUgbWV0aG9kCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gY2dpLnBhcnNlKGZwLCBlbnYsIHN0cmljdF9wYXJzaW5nPTEpCisgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IsIGVycjoKKyAgICAgICAgcmV0dXJuIENvbXBhcmFibGVFeGNlcHRpb24oZXJyKQorCitwYXJzZV9zdHJpY3RfdGVzdF9jYXNlcyA9IFsKKyAgICAoIiIsIFZhbHVlRXJyb3IoImJhZCBxdWVyeSBmaWVsZDogJyciKSksCisgICAgKCImIiwgVmFsdWVFcnJvcigiYmFkIHF1ZXJ5IGZpZWxkOiAnJyIpKSwKKyAgICAoIiYmIiwgVmFsdWVFcnJvcigiYmFkIHF1ZXJ5IGZpZWxkOiAnJyIpKSwKKyAgICAoIjsiLCBWYWx1ZUVycm9yKCJiYWQgcXVlcnkgZmllbGQ6ICcnIikpLAorICAgICgiOyY7IiwgVmFsdWVFcnJvcigiYmFkIHF1ZXJ5IGZpZWxkOiAnJyIpKSwKKyAgICAjIFNob3VsZCB0aGUgbmV4dCBmZXcgcmVhbGx5IGJlIHZhbGlkPworICAgICgiPSIsIHt9KSwKKyAgICAoIj0mPSIsIHt9KSwKKyAgICAoIj07PSIsIHt9KSwKKyAgICAjIFRoaXMgcmVzdCBzZWVtIHRvIG1ha2Ugc2Vuc2UKKyAgICAoIj1hIiwgeycnOiBbJ2EnXX0pLAorICAgICgiJj1hIiwgVmFsdWVFcnJvcigiYmFkIHF1ZXJ5IGZpZWxkOiAnJyIpKSwKKyAgICAoIj1hJiIsIFZhbHVlRXJyb3IoImJhZCBxdWVyeSBmaWVsZDogJyciKSksCisgICAgKCI9JmEiLCBWYWx1ZUVycm9yKCJiYWQgcXVlcnkgZmllbGQ6ICdhJyIpKSwKKyAgICAoImI9YSIsIHsnYic6IFsnYSddfSksCisgICAgKCJiKz1hIiwgeydiICc6IFsnYSddfSksCisgICAgKCJhPWI9YSIsIHsnYSc6IFsnYj1hJ119KSwKKyAgICAoImE9K2I9YSIsIHsnYSc6IFsnIGI9YSddfSksCisgICAgKCImYj1hIiwgVmFsdWVFcnJvcigiYmFkIHF1ZXJ5IGZpZWxkOiAnJyIpKSwKKyAgICAoImImPWEiLCBWYWx1ZUVycm9yKCJiYWQgcXVlcnkgZmllbGQ6ICdiJyIpKSwKKyAgICAoImE9YStiJmI9YitjIiwgeydhJzogWydhIGInXSwgJ2InOiBbJ2IgYyddfSksCisgICAgKCJhPWErYiZhPWIrYSIsIHsnYSc6IFsnYSBiJywgJ2IgYSddfSksCisgICAgKCJ4PTEmeT0yLjAmej0yLTMuJTJiMCIsIHsneCc6IFsnMSddLCAneSc6IFsnMi4wJ10sICd6JzogWycyLTMuKzAnXX0pLAorICAgICgieD0xO3k9Mi4wJno9Mi0zLiUyYjAiLCB7J3gnOiBbJzEnXSwgJ3knOiBbJzIuMCddLCAneic6IFsnMi0zLiswJ119KSwKKyAgICAoIng9MTt5PTIuMDt6PTItMy4lMmIwIiwgeyd4JzogWycxJ10sICd5JzogWycyLjAnXSwgJ3onOiBbJzItMy4rMCddfSksCisgICAgKCJIYmM1MTYxMTY4YzU0MjMzMzYzMzMxNWRlZTExODIyMjc6a2V5X3N0b3JlX3NlcWlkPTQwMDAwNiZjdXllcj1yJnZpZXc9YnVzdG9tZXImb3JkZXJfaWQ9MGJiMmUyNDg2Mzg4MzNkNDhjYjdmZWQzMDAwMDBmMWImZXhwaXJlPTk2NDU0NjI2MyZsb2JhbGU9ZW4tVVMma2lkPTEzMDAwMy4zMDAwMzgmc3M9ZW52IiwKKyAgICAgeydIYmM1MTYxMTY4YzU0MjMzMzYzMzMxNWRlZTExODIyMjc6a2V5X3N0b3JlX3NlcWlkJzogWyc0MDAwMDYnXSwKKyAgICAgICdjdXllcic6IFsnciddLAorICAgICAgJ2V4cGlyZSc6IFsnOTY0NTQ2MjYzJ10sCisgICAgICAna2lkJzogWycxMzAwMDMuMzAwMDM4J10sCisgICAgICAnbG9iYWxlJzogWydlbi1VUyddLAorICAgICAgJ29yZGVyX2lkJzogWycwYmIyZTI0ODYzODgzM2Q0OGNiN2ZlZDMwMDAwMGYxYiddLAorICAgICAgJ3NzJzogWydlbnYnXSwKKyAgICAgICd2aWV3JzogWydidXN0b21lciddLAorICAgICAgfSksCisKKyAgICAoImdyb3VwX2lkPTU0NzAmc2V0PWN1c3RvbSZfYXNzaWduZWRfdG89MzEzOTImX3N0YXR1cz0xJl9jYXRlZ29yeT0xMDAmU1VCTUlUPUJyb3dzZSIsCisgICAgIHsnU1VCTUlUJzogWydCcm93c2UnXSwKKyAgICAgICdfYXNzaWduZWRfdG8nOiBbJzMxMzkyJ10sCisgICAgICAnX2NhdGVnb3J5JzogWycxMDAnXSwKKyAgICAgICdfc3RhdHVzJzogWycxJ10sCisgICAgICAnZ3JvdXBfaWQnOiBbJzU0NzAnXSwKKyAgICAgICdzZXQnOiBbJ2N1c3RvbSddLAorICAgICAgfSkKKyAgICBdCisKK2RlZiBmaXJzdF9lbHRzKGxpc3QpOgorICAgIHJldHVybiBtYXAobGFtYmRhIHg6eFswXSwgbGlzdCkKKworZGVmIGZpcnN0X3NlY29uZF9lbHRzKGxpc3QpOgorICAgIHJldHVybiBtYXAobGFtYmRhIHA6KHBbMF0sIHBbMV1bMF0pLCBsaXN0KQorCitkZWYgZ2VuX3Jlc3VsdChkYXRhLCBlbnZpcm9uKToKKyAgICBmYWtlX3N0ZGluID0gU3RyaW5nSU8oZGF0YSkKKyAgICBmYWtlX3N0ZGluLnNlZWsoMCkKKyAgICBmb3JtID0gY2dpLkZpZWxkU3RvcmFnZShmcD1mYWtlX3N0ZGluLCBlbnZpcm9uPWVudmlyb24pCisKKyAgICByZXN1bHQgPSB7fQorICAgIGZvciBrLCB2IGluIGRpY3QoZm9ybSkuaXRlbXMoKToKKyAgICAgICAgcmVzdWx0W2tdID0gaXNpbnN0YW5jZSh2LCBsaXN0KSBhbmQgZm9ybS5nZXRsaXN0KGspIG9yIHYudmFsdWUKKworICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgQ2dpVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZXNjYXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXN0ICZhbXA7IHN0cmluZyIsIGNnaS5lc2NhcGUoInRlc3QgJiBzdHJpbmciKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJmx0O3Rlc3Qgc3RyaW5nJmd0OyIsIGNnaS5lc2NhcGUoIjx0ZXN0IHN0cmluZz4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJnF1b3Q7dGVzdCBzdHJpbmcmcXVvdDsiLCBjZ2kuZXNjYXBlKCcidGVzdCBzdHJpbmciJywgVHJ1ZSkpCisKKyAgICBkZWYgdGVzdF9zdHJpY3Qoc2VsZik6CisgICAgICAgIGZvciBvcmlnLCBleHBlY3QgaW4gcGFyc2Vfc3RyaWN0X3Rlc3RfY2FzZXM6CisgICAgICAgICAgICAjIFRlc3QgYmFzaWMgcGFyc2luZworICAgICAgICAgICAgZCA9IGRvX3Rlc3Qob3JpZywgIkdFVCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGV4cGVjdCwgIkVycm9yIHBhcnNpbmcgJXMiICUgcmVwcihvcmlnKSkKKyAgICAgICAgICAgIGQgPSBkb190ZXN0KG9yaWcsICJQT1NUIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZXhwZWN0LCAiRXJyb3IgcGFyc2luZyAlcyIgJSByZXByKG9yaWcpKQorCisgICAgICAgICAgICBlbnYgPSB7J1FVRVJZX1NUUklORyc6IG9yaWd9CisgICAgICAgICAgICBmY2QgPSBjZ2kuRm9ybUNvbnRlbnREaWN0KGVudikKKyAgICAgICAgICAgIHNkID0gY2dpLlN2Rm9ybUNvbnRlbnREaWN0KGVudikKKyAgICAgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShlbnZpcm9uPWVudikKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0LCBkaWN0KToKKyAgICAgICAgICAgICAgICAjIHRlc3QgZGljdCBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihleHBlY3QpLCBsZW4oZmNkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZXhwZWN0LmtleXMoKSwgZmNkLmtleXMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZXhwZWN0LnZhbHVlcygpLCBmY2QudmFsdWVzKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGV4cGVjdC5pdGVtcygpLCBmY2QuaXRlbXMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjZC5nZXQoIm5vbmV4aXN0ZW50IGZpZWxkIiwgImRlZmF1bHQiKSwgImRlZmF1bHQiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNkKSwgbGVuKGZzKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2Qua2V5cygpLCBmcy5rZXlzKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcy5nZXR2YWx1ZSgibm9uZXhpc3RlbnQgZmllbGQiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCisgICAgICAgICAgICAgICAgIyB0ZXN0IGluZGl2aWR1YWwgZmllbGRzCisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBleHBlY3Qua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RfdmFsID0gZXhwZWN0W2tleV0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZjZC5oYXNfa2V5KGtleSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChmY2Rba2V5XSwgZXhwZWN0W2tleV0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNkLmdldChrZXksICJkZWZhdWx0IiksIGZjZFtrZXldKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZnMuaGFzX2tleShrZXkpKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZXhwZWN0X3ZhbCkgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlX3ZhbHVlID0gMAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlX3ZhbHVlID0gMQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBzZFtrZXldCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzaW5nbGVfdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmdldHZhbHVlKGtleSksIGV4cGVjdF92YWwpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2luZ2xlX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIGV4cGVjdF92YWxbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmdldHZhbHVlKGtleSksIGV4cGVjdF92YWxbMF0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChzZC5nZXRsaXN0KGtleSksIGV4cGVjdF92YWwpCisgICAgICAgICAgICAgICAgICAgIGlmIHNpbmdsZV92YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChzZC52YWx1ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2VsdHMoZXhwZWN0LnZhbHVlcygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChzZC5pdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Rfc2Vjb25kX2VsdHMoZXhwZWN0Lml0ZW1zKCkpKQorCisgICAgZGVmIHRlc3Rfd2VpcmRfZm9ybWNvbnRlbnRkaWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIHdlaXJkIEZvcm1Db250ZW50RGljdCBjbGFzc2VzCisgICAgICAgIGVudiA9IHsnUVVFUllfU1RSSU5HJzogIng9MSZ5PTIuMCZ6PTItMy4lMmIwJjE9MWFiYyJ9CisgICAgICAgIGV4cGVjdCA9IHsneCc6IDEsICd5JzogMi4wLCAneic6ICcyLTMuKzAnLCAnMSc6ICcxYWJjJ30KKyAgICAgICAgZCA9IGNnaS5JbnRlcnBGb3JtQ29udGVudERpY3QoZW52KQorICAgICAgICBmb3IgaywgdiBpbiBleHBlY3QuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtrXSwgdikKKyAgICAgICAgZm9yIGssIHYgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3Rba10sIHYpCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChleHBlY3QudmFsdWVzKCksIGQudmFsdWVzKCkpCisKKyAgICBkZWYgdGVzdF9sb2coc2VsZik6CisgICAgICAgIGNnaS5sb2coIlRlc3RpbmciKQorCisgICAgICAgIGNnaS5sb2dmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgY2dpLmluaXRsb2coIiVzIiwgIlRlc3RpbmcgaW5pdGxvZyAxIikKKyAgICAgICAgY2dpLmxvZygiJXMiLCAiVGVzdGluZyBsb2cgMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2dpLmxvZ2ZwLmdldHZhbHVlKCksICJUZXN0aW5nIGluaXRsb2cgMVxuVGVzdGluZyBsb2cgMlxuIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIi9kZXYvbnVsbCIpOgorICAgICAgICAgICAgY2dpLmxvZ2ZwID0gTm9uZQorICAgICAgICAgICAgY2dpLmxvZ2ZpbGUgPSAiL2Rldi9udWxsIgorICAgICAgICAgICAgY2dpLmluaXRsb2coIiVzIiwgIlRlc3RpbmcgbG9nIDMiKQorICAgICAgICAgICAgY2dpLmxvZygiVGVzdGluZyBsb2cgNCIpCisKKyAgICBkZWYgdGVzdF9maWVsZHN0b3JhZ2VfcmVhZGxpbmUoc2VsZik6CisgICAgICAgICMgRmllbGRTdG9yYWdlIHVzZXMgcmVhZGxpbmUsIHdoaWNoIGhhcyB0aGUgY2FwYWNpdHkgdG8gcmVhZCBhbGwKKyAgICAgICAgIyBjb250ZW50cyBvZiB0aGUgaW5wdXQgZmlsZSBpbnRvIG1lbW9yeTsgd2UgdXNlIHJlYWRsaW5lJ3Mgc2l6ZSBhcmd1bWVudAorICAgICAgICAjIHRvIHByZXZlbnQgdGhhdCBmb3IgZmlsZXMgdGhhdCBkbyBub3QgY29udGFpbiBhbnkgbmV3bGluZXMgaW4KKyAgICAgICAgIyBub24tR0VUL0hFQUQgcmVxdWVzdHMKKyAgICAgICAgY2xhc3MgVGVzdFJlYWRsaW5lRmlsZToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCisgICAgICAgICAgICAgICAgc2VsZi5udW1jYWxscyA9IDAKKworICAgICAgICAgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi5udW1jYWxscyArPSAxCisgICAgICAgICAgICAgICAgaWYgc2l6ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZS5yZWFkbGluZShzaXplKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGUucmVhZGxpbmUoKQorCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgZmlsZSA9IHNlbGYuX19kaWN0X19bJ2ZpbGUnXQorICAgICAgICAgICAgICAgIGEgPSBnZXRhdHRyKGZpbGUsIG5hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYSwgaW50KToKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCBhKQorICAgICAgICAgICAgICAgIHJldHVybiBhCisKKyAgICAgICAgZiA9IFRlc3RSZWFkbGluZUZpbGUodGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpKQorICAgICAgICBmLndyaXRlKCd4JyAqIDI1NiAqIDEwMjQpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBlbnYgPSB7J1JFUVVFU1RfTUVUSE9EJzonUFVUJ30KKyAgICAgICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGZwPWYsIGVudmlyb249ZW52KQorICAgICAgICAjIGlmIHdlJ3JlIG5vdCBjaHVua2luZyBwcm9wZXJseSwgcmVhZGxpbmUgaXMgb25seSBjYWxsZWQgdHdpY2UKKyAgICAgICAgIyAoYnkgcmVhZF9iaW5hcnkpOyBpZiB3ZSBhcmUgY2h1bmtpbmcgcHJvcGVybHksIGl0IHdpbGwgYmUgY2FsbGVkIDUgdGltZXMKKyAgICAgICAgIyBhcyBsb25nIGFzIHRoZSBjaHVua3NpemUgaXMgMSA8PCAxNi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYubnVtY2FsbHMgPiAyKQorCisgICAgZGVmIHRlc3RfZmllbGRzdG9yYWdlX211bHRpcGFydChzZWxmKToKKyAgICAgICAgI1Rlc3QgYmFzaWMgRmllbGRTdG9yYWdlIG11bHRpcGFydCBwYXJzaW5nCisgICAgICAgIGVudiA9IHsnUkVRVUVTVF9NRVRIT0QnOidQT1NUJywgJ0NPTlRFTlRfVFlQRSc6J211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTcyMTgzNzM3MzM1MDcwNTUyNjY4ODE2NDY4NCcsICdDT05URU5UX0xFTkdUSCc6JzU1OCd9CisgICAgICAgIHBvc3RkYXRhID0gIiIiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iaWQiCisKKzEyMzQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0CitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InRpdGxlIgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0CitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImZpbGUiOyBmaWxlbmFtZT0idGVzdC50eHQiCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworVGVzdGluZyAxMjMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0CitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InN1Ym1pdCIKKworIEFkZFx4MjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0LS0KKyIiIgorICAgICAgICBmcyA9IGNnaS5GaWVsZFN0b3JhZ2UoZnA9U3RyaW5nSU8ocG9zdGRhdGEpLCBlbnZpcm9uPWVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnMubGlzdCksIDQpCisgICAgICAgIGV4cGVjdCA9IFt7J25hbWUnOidpZCcsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonMTIzNCd9LAorICAgICAgICAgICAgICAgICAgeyduYW1lJzondGl0bGUnLCAnZmlsZW5hbWUnOk5vbmUsICd2YWx1ZSc6Jyd9LAorICAgICAgICAgICAgICAgICAgeyduYW1lJzonZmlsZScsICdmaWxlbmFtZSc6J3Rlc3QudHh0JywndmFsdWUnOidUZXN0aW5nIDEyMy5cbid9LAorICAgICAgICAgICAgICAgICAgeyduYW1lJzonc3VibWl0JywgJ2ZpbGVuYW1lJzpOb25lLCAndmFsdWUnOicgQWRkICd9XQorICAgICAgICBmb3IgeCBpbiByYW5nZShsZW4oZnMubGlzdCkpOgorICAgICAgICAgICAgZm9yIGssIGV4cCBpbiBleHBlY3RbeF0uaXRlbXMoKToKKyAgICAgICAgICAgICAgICBnb3QgPSBnZXRhdHRyKGZzLmxpc3RbeF0sIGspCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cCkKKworICAgIF9xc19yZXN1bHQgPSB7CisgICAgICAgICdrZXkxJzogJ3ZhbHVlMScsCisgICAgICAgICdrZXkyJzogWyd2YWx1ZTJ4JywgJ3ZhbHVlMnknXSwKKyAgICAgICAgJ2tleTMnOiAndmFsdWUzJywKKyAgICAgICAgJ2tleTQnOiAndmFsdWU0JworICAgIH0KKyAgICBkZWYgdGVzdFFTQW5kVXJsRW5jb2RlKHNlbGYpOgorICAgICAgICBkYXRhID0gImtleTI9dmFsdWUyeCZrZXkzPXZhbHVlMyZrZXk0PXZhbHVlNCIKKyAgICAgICAgZW52aXJvbiA9IHsKKyAgICAgICAgICAgICdDT05URU5UX0xFTkdUSCc6ICAgc3RyKGxlbihkYXRhKSksCisgICAgICAgICAgICAnQ09OVEVOVF9UWVBFJzogICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLAorICAgICAgICAgICAgJ1FVRVJZX1NUUklORyc6ICAgICAna2V5MT12YWx1ZTEma2V5Mj12YWx1ZTJ5JywKKyAgICAgICAgICAgICdSRVFVRVNUX01FVEhPRCc6ICAgJ1BPU1QnLAorICAgICAgICB9CisgICAgICAgIHYgPSBnZW5fcmVzdWx0KGRhdGEsIGVudmlyb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fcXNfcmVzdWx0LCB2KQorCisgICAgZGVmIHRlc3RRU0FuZEZvcm1EYXRhKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIiCistLS0xMjMKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ia2V5MiIKKwordmFsdWUyeQorLS0tMTIzCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImtleTMiCisKK3ZhbHVlMworLS0tMTIzCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImtleTQiCisKK3ZhbHVlNAorLS0tMTIzLS0KKyIiIgorICAgICAgICBlbnZpcm9uID0geworICAgICAgICAgICAgJ0NPTlRFTlRfTEVOR1RIJzogICBzdHIobGVuKGRhdGEpKSwKKyAgICAgICAgICAgICdDT05URU5UX1RZUEUnOiAgICAgJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0xMjMnLAorICAgICAgICAgICAgJ1FVRVJZX1NUUklORyc6ICAgICAna2V5MT12YWx1ZTEma2V5Mj12YWx1ZTJ4JywKKyAgICAgICAgICAgICdSRVFVRVNUX01FVEhPRCc6ICAgJ1BPU1QnLAorICAgICAgICB9CisgICAgICAgIHYgPSBnZW5fcmVzdWx0KGRhdGEsIGVudmlyb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fcXNfcmVzdWx0LCB2KQorCisgICAgZGVmIHRlc3RRU0FuZEZvcm1EYXRhRmlsZShzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIgorLS0tMTIzCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImtleTIiCisKK3ZhbHVlMnkKKy0tLTEyMworQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJrZXkzIgorCit2YWx1ZTMKKy0tLTEyMworQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJrZXk0IgorCit2YWx1ZTQKKy0tLTEyMworQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJ1cGxvYWQiOyBmaWxlbmFtZT0iZmFrZS50eHQiCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKwordGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgZmFrZSBmaWxlCisKKy0tLTEyMy0tCisiIiIKKyAgICAgICAgZW52aXJvbiA9IHsKKyAgICAgICAgICAgICdDT05URU5UX0xFTkdUSCc6ICAgc3RyKGxlbihkYXRhKSksCisgICAgICAgICAgICAnQ09OVEVOVF9UWVBFJzogICAgICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tMTIzJywKKyAgICAgICAgICAgICdRVUVSWV9TVFJJTkcnOiAgICAgJ2tleTE9dmFsdWUxJmtleTI9dmFsdWUyeCcsCisgICAgICAgICAgICAnUkVRVUVTVF9NRVRIT0QnOiAgICdQT1NUJywKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBzZWxmLl9xc19yZXN1bHQuY29weSgpCisgICAgICAgIHJlc3VsdC51cGRhdGUoeworICAgICAgICAgICAgJ3VwbG9hZCc6ICd0aGlzIGlzIHRoZSBjb250ZW50IG9mIHRoZSBmYWtlIGZpbGVcbicKKyAgICAgICAgfSkKKyAgICAgICAgdiA9IGdlbl9yZXN1bHQoZGF0YSwgZW52aXJvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHYpCisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGVkX3BhcnNlX3FzKHNlbGYpOgorICAgICAgICAjIHRoaXMgZnVuYyBpcyBtb3ZlZCB0byB1cmxwYXJzZSwgdGhpcyBpcyBqdXN0IGEgc2FuaXR5IGNoZWNrCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCdjZ2kucGFyc2VfcXMgaXMgZGVwcmVjYXRlZCwgdXNlIHVybHBhcnNlLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnNlX3FzIGluc3RlYWQnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHsnYSc6IFsnQTEnXSwgJ0InOiBbJ0IzJ10sICdiJzogWydCMiddfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dpLnBhcnNlX3FzKCdhPUExJmI9QjImQj1CMycpKQorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9wYXJzZV9xc2woc2VsZik6CisgICAgICAgICMgdGhpcyBmdW5jIGlzIG1vdmVkIHRvIHVybHBhcnNlLCB0aGlzIGlzIGp1c3QgYSBzYW5pdHkgY2hlY2sKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJ2NnaS5wYXJzZV9xc2wgaXMgZGVwcmVjYXRlZCwgdXNlIHVybHBhcnNlLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnNlX3FzbCBpbnN0ZWFkJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKCdhJywgJ0ExJyksICgnYicsICdCMicpLCAoJ0InLCAnQjMnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNnaS5wYXJzZV9xc2woJ2E9QTEmYj1CMiZCPUIzJykpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9oZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjZ2kucGFyc2VfaGVhZGVyKCJ0ZXh0L3BsYWluIiksCisgICAgICAgICAgICAoInRleHQvcGxhaW4iLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjZ2kucGFyc2VfaGVhZGVyKCJ0ZXh0L3ZuZC5qdXN0Lm1hZGUudGhpcy51cCA7ICIpLAorICAgICAgICAgICAgKCJ0ZXh0L3ZuZC5qdXN0Lm1hZGUudGhpcy51cCIsIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNnaS5wYXJzZV9oZWFkZXIoInRleHQvcGxhaW47Y2hhcnNldD11cy1hc2NpaSIpLAorICAgICAgICAgICAgKCJ0ZXh0L3BsYWluIiwgeyJjaGFyc2V0IjogInVzLWFzY2lpIn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2dpLnBhcnNlX2hlYWRlcigndGV4dC9wbGFpbiA7IGNoYXJzZXQ9InVzLWFzY2lpIicpLAorICAgICAgICAgICAgKCJ0ZXh0L3BsYWluIiwgeyJjaGFyc2V0IjogInVzLWFzY2lpIn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2dpLnBhcnNlX2hlYWRlcigndGV4dC9wbGFpbiA7IGNoYXJzZXQ9InVzLWFzY2lpIjsgYW5vdGhlcj1vcHQnKSwKKyAgICAgICAgICAgICgidGV4dC9wbGFpbiIsIHsiY2hhcnNldCI6ICJ1cy1hc2NpaSIsICJhbm90aGVyIjogIm9wdCJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNnaS5wYXJzZV9oZWFkZXIoJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSJzaWxseS50eHQiJyksCisgICAgICAgICAgICAoImF0dGFjaG1lbnQiLCB7ImZpbGVuYW1lIjogInNpbGx5LnR4dCJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNnaS5wYXJzZV9oZWFkZXIoJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSJzdHJhbmdlO25hbWUiJyksCisgICAgICAgICAgICAoImF0dGFjaG1lbnQiLCB7ImZpbGVuYW1lIjogInN0cmFuZ2U7bmFtZSJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNnaS5wYXJzZV9oZWFkZXIoJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSJzdHJhbmdlO25hbWUiO3NpemU9MTIzOycpLAorICAgICAgICAgICAgKCJhdHRhY2htZW50IiwgeyJmaWxlbmFtZSI6ICJzdHJhbmdlO25hbWUiLCAic2l6ZSI6ICIxMjMifSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjZ2kucGFyc2VfaGVhZGVyKCdmb3JtLWRhdGE7IG5hbWU9ImZpbGVzIjsgZmlsZW5hbWU9ImZvXFwibztiYXIiJyksCisgICAgICAgICAgICAoImZvcm0tZGF0YSIsIHsibmFtZSI6ICJmaWxlcyIsICJmaWxlbmFtZSI6ICdmbyJvO2Jhcid9KSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KENnaVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jaGFybWFwY29kZWMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jaGFybWFwY29kZWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk4NDA1OQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NoYXJtYXBjb2RlYy5weQpAQCAtMCwwICsxLDU2IEBACisiIiIgUHl0aG9uIGNoYXJhY3RlciBtYXBwaW5nIGNvZGVjIHRlc3QKKworVGhpcyB1c2VzIHRoZSB0ZXN0IGNvZGVjIGluIHRlc3Rjb2RlYy5weSBhbmQgdGh1cyBhbHNvIHRlc3RzIHRoZQorZW5jb2RpbmdzIHBhY2thZ2UgbG9va3VwIHNjaGVtZS4KKworV3JpdHRlbiBieSBNYXJjLUFuZHJlIExlbWJ1cmcgKG1hbEBsZW1idXJnLmNvbSkuCisKKyhjKSBDb3B5cmlnaHQgMjAwMCBHdWlkbyB2YW4gUm9zc3VtLgorCisiIiIjIgorCitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQsIHVuaXR0ZXN0CisKK2ltcG9ydCBjb2RlY3MKKworIyBSZWdpc3RlciBhIHNlYXJjaCBmdW5jdGlvbiB3aGljaCBrbm93cyBhYm91dCBvdXIgY29kZWMKK2RlZiBjb2RlY19zZWFyY2hfZnVuY3Rpb24oZW5jb2RpbmcpOgorICAgIGlmIGVuY29kaW5nID09ICd0ZXN0Y29kZWMnOgorICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rjb2RlYworICAgICAgICByZXR1cm4gdHVwbGUodGVzdGNvZGVjLmdldHJlZ2VudHJ5KCkpCisgICAgcmV0dXJuIE5vbmUKKworY29kZWNzLnJlZ2lzdGVyKGNvZGVjX3NlYXJjaF9mdW5jdGlvbikKKworIyB0ZXN0IGNvZGVjJ3MgbmFtZSAoc2VlIHRlc3QvdGVzdGNvZGVjLnB5KQorY29kZWNuYW1lID0gJ3Rlc3Rjb2RlYycKKworY2xhc3MgQ2hhcm1hcENvZGVjVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29uc3RydWN0b3J4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2FiYycsIGNvZGVjbmFtZSksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCd4ZGVmJywgY29kZWNuYW1lKSwgdSdhYmNkZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2RlZngnLCBjb2RlY25hbWUpLCB1J2RlZmFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnZHhmJywgY29kZWNuYW1lKSwgdSdkYWJjZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnZHhmeCcsIGNvZGVjbmFtZSksIHUnZGFiY2ZhYmMnKQorCisgICAgZGVmIHRlc3RfZW5jb2RleChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiYycuZW5jb2RlKGNvZGVjbmFtZSksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUneGRlZicuZW5jb2RlKGNvZGVjbmFtZSksICdhYmNkZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnZGVmeCcuZW5jb2RlKGNvZGVjbmFtZSksICdkZWZhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnZHhmJy5lbmNvZGUoY29kZWNuYW1lKSwgJ2RhYmNmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2R4ZngnLmVuY29kZShjb2RlY25hbWUpLCAnZGFiY2ZhYmMnKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3J5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ3lkZWYnLCBjb2RlY25hbWUpLCB1J2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnZGVmeScsIGNvZGVjbmFtZSksIHUnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdkeWYnLCBjb2RlY25hbWUpLCB1J2RmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdkeWZ5JywgY29kZWNuYW1lKSwgdSdkZicpCisKKyAgICBkZWYgdGVzdF9tYXB0b3VuZGVmaW5lZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1bmljb2RlLCAnYWJjXDAwMScsIGNvZGVjbmFtZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDaGFybWFwQ29kZWNUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jbC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwMTAyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jbC5weQpAQCAtMCwwICsxLDgyIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJXaGltcHkgdGVzdCBzY3JpcHQgZm9yIHRoZSBjbCBtb2R1bGUKKyAgIFJvZ2VyIEUuIE1hc3NlCisiIiIKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKKworY2wgPSBpbXBvcnRfbW9kdWxlKCdjbCcpCisKK2NsYXR0cnMgPSBbJ0FEREVEX0FMR09SSVRITV9FUlJPUicsICdBTEFXJywgJ0FMR09SSVRITV9JRCcsCisnQUxHT1JJVEhNX1ZFUlNJT04nLCAnQVVESU8nLCAnQVdBUkVfRVJST1InLCAnQVdBUkVfTVBFR19BVURJTycsCisnQVdBUkVfTVVMVElSQVRFJywgJ0FXQ01QX0NPTlNUX1FVQUwnLCAnQVdDTVBfRklYRURfUkFURScsCisnQVdDTVBfSU5ERVBFTkRFTlQnLCAnQVdDTVBfSk9JTlRfU1RFUkVPJywgJ0FXQ01QX0xPU1NMRVNTJywKKydBV0NNUF9NUEVHX0xBWUVSX0knLCAnQVdDTVBfTVBFR19MQVlFUl9JSScsICdBV0NNUF9TVEVSRU8nLAorJ0FsZ29yaXRobScsICdBbGdvcml0aG1OdW1iZXInLCAnQWxnb3JpdGhtVHlwZScsICdBdWRpb0Zvcm1hdE5hbWUnLAorJ0JBRF9BTEdPUklUSE1fTkFNRScsICdCQURfQUxHT1JJVEhNX1RZUEUnLCAnQkFEX0JMT0NLX1NJWkUnLAorJ0JBRF9CT0FSRCcsICdCQURfQlVGRkVSSU5HJywgJ0JBRF9CVUZGRVJMRU5HVEhfTkVHJywKKydCQURfQlVGRkVSTEVOR1RIX09ERCcsICdCQURfQlVGRkVSX0VYSVNUUycsICdCQURfQlVGRkVSX0hBTkRMRScsCisnQkFEX0JVRkZFUl9QT0lOVEVSJywgJ0JBRF9CVUZGRVJfUVVFUllfU0laRScsICdCQURfQlVGRkVSX1NJWkUnLAorJ0JBRF9CVUZGRVJfU0laRV9QT0lOVEVSJywgJ0JBRF9CVUZGRVJfVFlQRScsCisnQkFEX0NPTVBSRVNTSU9OX1NDSEVNRScsICdCQURfQ09NUFJFU1NPUl9IQU5ETEUnLAorJ0JBRF9DT01QUkVTU09SX0hBTkRMRV9QT0lOVEVSJywgJ0JBRF9GUkFNRV9TSVpFJywKKydCQURfRlVOQ1RJT05BTElUWScsICdCQURfRlVOQ1RJT05fUE9JTlRFUicsICdCQURfSEVBREVSX1NJWkUnLAorJ0JBRF9JTklUSUFMX1ZBTFVFJywgJ0JBRF9JTlRFUk5BTF9GT1JNQVQnLCAnQkFEX0xJQ0VOU0UnLAorJ0JBRF9NSU5fR1RfTUFYJywgJ0JBRF9OT19CVUZGRVJTUEFDRScsICdCQURfTlVNQkVSX09GX0JMT0NLUycsCisnQkFEX1BBUkFNJywgJ0JBRF9QQVJBTV9JRF9QT0lOVEVSJywgJ0JBRF9QQVJBTV9UWVBFJywgJ0JBRF9QT0lOVEVSJywKKydCQURfUFZCVUZGRVInLCAnQkFEX1NDSEVNRV9QT0lOVEVSJywgJ0JBRF9TVFJFQU1fSEVBREVSJywKKydCQURfU1RSSU5HX1BPSU5URVInLCAnQkFEX1RFWFRfU1RSSU5HX1BUUicsICdCRVNUX0ZJVCcsCisnQklESVJFQ1RJT05BTCcsICdCSVRSQVRFX1BPTElDWScsICdCSVRSQVRFX1RBUkdFVCcsCisnQklUU19QRVJfQ09NUE9ORU5UJywgJ0JMRU5ESU5HJywgJ0JMT0NLX1NJWkUnLCAnQk9UVE9NX1VQJywKKydCVUZGRVJfTk9UX0NSRUFURUQnLCAnQlVGX0RBVEEnLCAnQlVGX0ZSQU1FJywgJ0J5dGVzUGVyUGl4ZWwnLAorJ0J5dGVzUGVyU2FtcGxlJywgJ0NIQU5ORUxfUE9MSUNZJywgJ0NIUk9NQV9USFJFU0hPTEQnLCAnQ09ERUMnLAorJ0NPTVBPTkVOVFMnLCAnQ09NUFJFU1NFRF9CVUZGRVJfU0laRScsICdDT01QUkVTU0lPTl9SQVRJTycsCisnQ09NUFJFU1NPUicsICdDT05USU5VT1VTX0JMT0NLJywgJ0NPTlRJTlVPVVNfTk9OQkxPQ0snLAorJ0NvbXByZXNzSW1hZ2UnLCAnREFUQScsICdERUNPTVBSRVNTT1InLCAnRGVjb21wcmVzc0ltYWdlJywKKydFREdFX1RIUkVTSE9MRCcsICdFTkFCTEVfSU1BR0VJTkZPJywgJ0VORF9PRl9TRVFVRU5DRScsICdFTlVNX1ZBTFVFJywKKydFWEFDVF9DT01QUkVTU0lPTl9SQVRJTycsICdFWFRFUk5BTF9ERVZJQ0UnLCAnRkxPQVRJTkdfRU5VTV9WQUxVRScsCisnRkxPQVRJTkdfUkFOR0VfVkFMVUUnLCAnRlJBTUUnLCAnRlJBTUVfQlVGRkVSX1NJWkUnLAorJ0ZSQU1FX0JVRkZFUl9TSVpFX1pFUk8nLCAnRlJBTUVfUkFURScsICdGUkFNRV9UWVBFJywgJ0c3MTFfQUxBVycsCisnRzcxMV9VTEFXJywgJ0dSQVlTQ0FMRScsICdHZXRBbGdvcml0aG1OYW1lJywgJ0hEQ0MnLAorJ0hEQ0NfU0FNUExFU19QRVJfVElMRScsICdIRENDX1RJTEVfVEhSRVNIT0xEJywgJ0hFQURFUl9TVEFSVF9DT0RFJywKKydJTUFHRV9IRUlHSFQnLCAnSU1BR0VfV0lEVEgnLCAnSU5URVJOQUxfRk9STUFUJywKKydJTlRFUk5BTF9JTUFHRV9IRUlHSFQnLCAnSU5URVJOQUxfSU1BR0VfV0lEVEgnLCAnSU5UUkEnLCAnSlBFRycsCisnSlBFR19FUlJPUicsICdKUEVHX05VTV9QQVJBTVMnLCAnSlBFR19RVUFMSVRZX0ZBQ1RPUicsCisnSlBFR19RVUFOVElaQVRJT05fVEFCTEVTJywgJ0pQRUdfU09GVFdBUkUnLCAnSlBFR19TVFJFQU1fSEVBREVSUycsCisnS0VZRlJBTUUnLCAnTEFTVF9GUkFNRV9JTkRFWCcsICdMQVlFUicsICdMVU1BX1RIUkVTSE9MRCcsCisnTUFYX05VTUJFUl9PRl9BVURJT19BTEdPUklUSE1TJywgJ01BWF9OVU1CRVJfT0ZfT1JJR0lOQUxfRk9STUFUUycsCisnTUFYX05VTUJFUl9PRl9QQVJBTVMnLCAnTUFYX05VTUJFUl9PRl9WSURFT19BTEdPUklUSE1TJywgJ01PTk8nLAorJ01QRUdfVklERU8nLCAnTVZDMScsICdNVkMyJywgJ01WQzJfQkxFTkRJTkcnLCAnTVZDMl9CTEVORElOR19PRkYnLAorJ01WQzJfQkxFTkRJTkdfT04nLCAnTVZDMl9DSFJPTUFfVEhSRVNIT0xEJywgJ01WQzJfRURHRV9USFJFU0hPTEQnLAorJ01WQzJfRVJST1InLCAnTVZDMl9MVU1BX1RIUkVTSE9MRCcsICdORVhUX05PVF9BVkFJTEFCTEUnLAorJ05PSVNFX01BUkdJTicsICdOT05FJywgJ05VTUJFUl9PRl9GUkFNRVMnLCAnTlVNQkVSX09GX1BBUkFNUycsCisnT1JJRU5UQVRJT04nLCAnT1JJR0lOQUxfRk9STUFUJywgJ09wZW5Db21wcmVzc29yJywKKydPcGVuRGVjb21wcmVzc29yJywgJ1BBUkFNX09VVF9PRl9SQU5HRScsICdQUkVESUNURUQnLCAnUFJFUk9MTCcsCisnUGFyYW1JRCcsICdQYXJhbU51bWJlcicsICdQYXJhbVR5cGUnLCAnUVVBTElUWV9GQUNUT1InLAorJ1FVQUxJVFlfTEVWRUwnLCAnUXVlcnlBbGdvcml0aG1zJywgJ1F1ZXJ5TWF4SGVhZGVyU2l6ZScsCisnUXVlcnlTY2hlbWUnLCAnUXVlcnlTY2hlbWVGcm9tTmFtZScsICdSQU5HRV9WQUxVRScsICdSR0InLCAnUkdCMzMyJywKKydSR0I4JywgJ1JHQkEnLCAnUkdCWCcsICdSTEUnLCAnUkxFMjQnLCAnUlRSJywgJ1JUUjEnLAorJ1JUUl9RVUFMSVRZX0xFVkVMJywgJ1NBTVBMRVNfUEVSX1RJTEUnLCAnU0NIRU1FX0JVU1knLAorJ1NDSEVNRV9OT1RfQVZBSUxBQkxFJywgJ1NQRUVEJywgJ1NURVJFT19JTlRFUkxFQVZFRCcsCisnU1RSRUFNX0hFQURFUlMnLCAnU2V0RGVmYXVsdCcsICdTZXRNYXgnLCAnU2V0TWluJywgJ1RJTEVfVEhSRVNIT0xEJywKKydUT1BfRE9XTicsICdVTEFXJywgJ1VOQ09NUFJFU1NFRCcsICdVTkNPTVBSRVNTRURfQVVESU8nLAorJ1VOQ09NUFJFU1NFRF9WSURFTycsICdVTktOT1dOX1NDSEVNRScsICdWSURFTycsICdWaWRlb0Zvcm1hdE5hbWUnLAorJ1knLCAnWUNiQ3InLCAnWUNiQ3I0MjInLCAnWUNiQ3I0MjJEQycsICdZQ2JDcjQyMkhDJywgJ1lVVicsICdZVVY0MjInLAorJ1lVVjQyMkRDJywgJ1lVVjQyMkhDJywgJ19fZG9jX18nLCAnX19uYW1lX18nLCAnY3Z0X3R5cGUnLCAnZXJyb3InXQorCisKKyMgVGhpcyBpcyBhIHZlcnkgaW5vYnRydXNpdmUgdGVzdCBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgY2wKKyMgbW9kdWxlIGFuZCBhbGwgaXRzIGF0dHJpYnV0ZXMuCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIHRvdWNoIGFsbCB0aGUgYXR0cmlidXRlcyBvZiBhbCB3aXRob3V0IGRvaW5nIGFueXRoaW5nCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ1RvdWNoaW5nIGNsIG1vZHVsZSBhdHRyaWJ1dGVzLi4uJworICAgIGZvciBhdHRyIGluIGNsYXR0cnM6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAndG91Y2hpbmc6ICcsIGF0dHIKKyAgICAgICAgZ2V0YXR0cihjbCwgYXR0cikKKworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjZGYwOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5CkBAIC0wLDAgKzEsNjQ2IEBACisiVGVzdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBQeXRob24gY2xhc3NlcyBpbXBsZW1lbnRpbmcgb3BlcmF0b3JzLiIKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK3Rlc3RtZXRocyA9IFsKKworIyBCaW5hcnkgb3BlcmF0aW9ucworICAgICJhZGQiLAorICAgICJyYWRkIiwKKyAgICAic3ViIiwKKyAgICAicnN1YiIsCisgICAgIm11bCIsCisgICAgInJtdWwiLAorICAgICJkaXYiLAorICAgICJyZGl2IiwKKyAgICAibW9kIiwKKyAgICAicm1vZCIsCisgICAgImRpdm1vZCIsCisgICAgInJkaXZtb2QiLAorICAgICJwb3ciLAorICAgICJycG93IiwKKyAgICAicnNoaWZ0IiwKKyAgICAicnJzaGlmdCIsCisgICAgImxzaGlmdCIsCisgICAgInJsc2hpZnQiLAorICAgICJhbmQiLAorICAgICJyYW5kIiwKKyAgICAib3IiLAorICAgICJyb3IiLAorICAgICJ4b3IiLAorICAgICJyeG9yIiwKKworIyBMaXN0L2RpY3Qgb3BlcmF0aW9ucworICAgICJjb250YWlucyIsCisgICAgImdldGl0ZW0iLAorICAgICJnZXRzbGljZSIsCisgICAgInNldGl0ZW0iLAorICAgICJzZXRzbGljZSIsCisgICAgImRlbGl0ZW0iLAorICAgICJkZWxzbGljZSIsCisKKyMgVW5hcnkgb3BlcmF0aW9ucworICAgICJuZWciLAorICAgICJwb3MiLAorICAgICJhYnMiLAorCisjIGdlbmVyaWMgb3BlcmF0aW9ucworICAgICJpbml0IiwKKyAgICBdCisKKyMgVGhlc2UgbmVlZCB0byByZXR1cm4gc29tZXRoaW5nIG90aGVyIHRoYW4gTm9uZQorIyAgICAiY29lcmNlIiwKKyMgICAgImhhc2giLAorIyAgICAic3RyIiwKKyMgICAgInJlcHIiLAorIyAgICAiaW50IiwKKyMgICAgImxvbmciLAorIyAgICAiZmxvYXQiLAorIyAgICAib2N0IiwKKyMgICAgImhleCIsCisKKyMgVGhlc2UgYXJlIHNlcGFyYXRlIGJlY2F1c2UgdGhleSBjYW4gaW5mbHVlbmNlIHRoZSB0ZXN0IG9mIG90aGVyIG1ldGhvZHMuCisjICAgICJnZXRhdHRyIiwKKyMgICAgInNldGF0dHIiLAorIyAgICAiZGVsYXR0ciIsCisKK2NhbGxMc3QgPSBbXQorZGVmIHRyYWNrQ2FsbChmKToKKyAgICBkZWYgdHJhY2soKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgY2FsbExzdC5hcHBlbmQoKGYuX19uYW1lX18sIGFyZ3MpKQorICAgICAgICByZXR1cm4gZigqYXJncywgKiprd2FyZ3MpCisgICAgcmV0dXJuIHRyYWNrCisKK2NsYXNzIEFsbFRlc3RzOgorICAgIHRyYWNrQ2FsbCA9IHRyYWNrQ2FsbAorCisgICAgQHRyYWNrQ2FsbAorICAgIGRlZiBfX2NvZXJjZV9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIChzZWxmLCkgKyBhcmdzCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9faGFzaF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIGhhc2goaWQoc2VsZikpCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9fc3RyX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gIkFsbFRlc3RzIgorCisgICAgQHRyYWNrQ2FsbAorICAgIGRlZiBfX3JlcHJfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiAiQWxsVGVzdHMiCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9faW50X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gMQorCisgICAgQHRyYWNrQ2FsbAorICAgIGRlZiBfX2Zsb2F0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gMS4wCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9fbG9uZ19fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIDFMCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9fb2N0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gJzAxJworCisgICAgQHRyYWNrQ2FsbAorICAgIGRlZiBfX2hleF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuICcweDEnCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9fY21wX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gMAorCisjIFN5bnRoZXNpemUgYWxsIHRoZSBvdGhlciBBbGxUZXN0cyBtZXRob2RzIGZyb20gdGhlIG5hbWVzIGluIHRlc3RtZXRocy4KKworbWV0aG9kX3RlbXBsYXRlID0gIiIiXAorQHRyYWNrQ2FsbAorZGVmIF9fJShtZXRob2Qpc19fKHNlbGYsICphcmdzKToKKyAgICBwYXNzCisiIiIKKworZm9yIG1ldGhvZCBpbiB0ZXN0bWV0aHM6CisgICAgZXhlYyBtZXRob2RfdGVtcGxhdGUgJSBsb2NhbHMoKSBpbiBBbGxUZXN0cy5fX2RpY3RfXworCitkZWwgbWV0aG9kLCBtZXRob2RfdGVtcGxhdGUKKworY2xhc3MgQ2xhc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjYWxsTHN0WzpdID0gW10KKworICAgIGRlZiBhc3NlcnRDYWxsU3RhY2soc2VsZiwgZXhwZWN0ZWRfY2FsbHMpOgorICAgICAgICBhY3R1YWxDYWxsTGlzdCA9IGNhbGxMc3RbOl0gICMgbmVlZCB0byBjb3B5IGJlY2F1c2UgdGhlIGNvbXBhcmlzb24gYmVsb3cgd2lsbCBhZGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZGl0aW9uYWwgY2FsbHMgdG8gY2FsbExzdAorICAgICAgICBpZiBleHBlY3RlZF9jYWxscyAhPSBhY3R1YWxDYWxsTGlzdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgY2FsbCBsaXN0OlxuICAlc1xuZG9lcyBub3QgbWF0Y2ggYWN0dWFsIGNhbGwgbGlzdFxuICAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9jYWxscywgYWN0dWFsQ2FsbExpc3QpKQorCisgICAgZGVmIHRlc3RJbml0KHNlbGYpOgorICAgICAgICBmb28gPSBBbGxUZXN0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9faW5pdF9fIiwgKGZvbywpKV0pCisKKyAgICBkZWYgdGVzdEJpbmFyeU9wcyhzZWxmKToKKyAgICAgICAgdGVzdG1lID0gQWxsVGVzdHMoKQorICAgICAgICAjIEJpbmFyeSBvcGVyYXRpb25zCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZSArIDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX2FkZF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSArIHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fcmFkZF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lIC0gMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fc3ViX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxIC0gdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19yc3ViX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgKiAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19tdWxfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgKiB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX3JtdWxfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgaWYgMS8yID09IDA6CisgICAgICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgICAgIHRlc3RtZSAvIDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19kaXZfXyIsICh0ZXN0bWUsIDEpKV0pCisKKworICAgICAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgICAgICAxIC8gdGVzdG1lCisgICAgICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fcmRpdl9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lICUgMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fbW9kX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxICUgdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19ybW9kX18iLCAodGVzdG1lLCAxKSldKQorCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGRpdm1vZCh0ZXN0bWUsMSkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX2Rpdm1vZF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgZGl2bW9kKDEsIHRlc3RtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX3JkaXZtb2RfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZSAqKiAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19wb3dfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgKiogdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19ycG93X18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgPj4gMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fcnNoaWZ0X18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxID4+IHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fcnJzaGlmdF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lIDw8IDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX2xzaGlmdF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSA8PCB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX3Jsc2hpZnRfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZSAmIDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX2FuZF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSAmIHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fcmFuZF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lIHwgMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fb3JfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgfCB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX3Jvcl9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lIF4gMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9feG9yX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxIF4gdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19yeG9yX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgZGVmIHRlc3RMaXN0QW5kRGljdE9wcyhzZWxmKToKKyAgICAgICAgdGVzdG1lID0gQWxsVGVzdHMoKQorCisgICAgICAgICMgTGlzdC9kaWN0IG9wZXJhdGlvbnMKKworICAgICAgICBjbGFzcyBFbXB0eTogcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDEgaW4gRW1wdHkoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsZWQsIHNob3VsZCBoYXZlIHJhaXNlZCBUeXBlRXJyb3InKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxIGluIHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2NvbnRhaW5zX18nLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWVbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19nZXRpdGVtX18nLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWVbMV0gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fc2V0aXRlbV9fJywgKHRlc3RtZSwgMSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgZGVsIHRlc3RtZVsxXQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2RlbGl0ZW1fXycsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZVs6NDJdCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fZ2V0c2xpY2VfXycsICh0ZXN0bWUsIDAsIDQyKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWVbOjQyXSA9ICJUaGUgQW5zd2VyIgorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX3NldHNsaWNlX18nLCAodGVzdG1lLCAwLCA0MiwgIlRoZSBBbnN3ZXIiKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICBkZWwgdGVzdG1lWzo0Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19kZWxzbGljZV9fJywgKHRlc3RtZSwgMCwgNDIpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZVsyOjEwMjQ6MTBdCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fZ2V0aXRlbV9fJywgKHRlc3RtZSwgc2xpY2UoMiwgMTAyNCwgMTApKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWVbMjoxMDI0OjEwXSA9ICJBIGxvdCIKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19zZXRpdGVtX18nLCAodGVzdG1lLCBzbGljZSgyLCAxMDI0LCAxMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBIGxvdCIpKV0pCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICBkZWwgdGVzdG1lWzI6MTAyNDoxMF0KKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19kZWxpdGVtX18nLCAodGVzdG1lLCBzbGljZSgyLCAxMDI0LCAxMCkpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZVs6NDIsIC4uLiwgOjI0OiwgMjQsIDEwMF0KKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19nZXRpdGVtX18nLCAodGVzdG1lLCAoc2xpY2UoTm9uZSwgNDIsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGxpcHNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2UoTm9uZSwgMjQsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCwgMTAwKSkpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZVs6NDIsIC4uLiwgOjI0OiwgMjQsIDEwMF0gPSAiU3RyYW5nZSIKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19zZXRpdGVtX18nLCAodGVzdG1lLCAoc2xpY2UoTm9uZSwgNDIsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGxpcHNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2UoTm9uZSwgMjQsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCwgMTAwKSwgIlN0cmFuZ2UiKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgZGVsIHRlc3RtZVs6NDIsIC4uLiwgOjI0OiwgMjQsIDEwMF0KKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19kZWxpdGVtX18nLCAodGVzdG1lLCAoc2xpY2UoTm9uZSwgNDIsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGxpcHNpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2UoTm9uZSwgMjQsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCwgMTAwKSkpXSkKKworICAgICAgICAjIE5vdyByZW1vdmUgdGhlIHNsaWNlIGhvb2tzIHRvIHNlZSBpZiBjb252ZXJ0aW5nIG5vcm1hbCBzbGljZXMgdG8KKyAgICAgICAgIyAgc2xpY2Ugb2JqZWN0IHdvcmtzLgorCisgICAgICAgIGdldHNsaWNlID0gQWxsVGVzdHMuX19nZXRzbGljZV9fCisgICAgICAgIGRlbCBBbGxUZXN0cy5fX2dldHNsaWNlX18KKyAgICAgICAgc2V0c2xpY2UgPSBBbGxUZXN0cy5fX3NldHNsaWNlX18KKyAgICAgICAgZGVsIEFsbFRlc3RzLl9fc2V0c2xpY2VfXworICAgICAgICBkZWxzbGljZSA9IEFsbFRlc3RzLl9fZGVsc2xpY2VfXworICAgICAgICBkZWwgQWxsVGVzdHMuX19kZWxzbGljZV9fCisKKyAgICAgICAgIyBYWFggd2hlbiB1c2luZyBuZXctc3R5bGUgY2xhc3NlcyB0aGUgc2xpY2UgdGVzdG1lWzo0Ml0gcHJvZHVjZXMKKyAgICAgICAgIyAgc2xpY2UoTm9uZSwgNDIsIE5vbmUpIGluc3RlYWQgb2Ygc2xpY2UoMCwgNDIsIE5vbmUpLiBweTNrIHdpbGwgaGF2ZQorICAgICAgICAjICB0byBjaGFuZ2UgdGhpcyB0ZXN0LgorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lWzo0Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19nZXRpdGVtX18nLCAodGVzdG1lLCBzbGljZSgwLCA0MiwgTm9uZSkpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZVs6NDJdID0gIlRoZSBBbnN3ZXIiCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fc2V0aXRlbV9fJywgKHRlc3RtZSwgc2xpY2UoMCwgNDIsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgQW5zd2VyIikpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGRlbCB0ZXN0bWVbOjQyXQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2RlbGl0ZW1fXycsICh0ZXN0bWUsIHNsaWNlKDAsIDQyLCBOb25lKSkpXSkKKworICAgICAgICAjIFJlc3RvcmUgdGhlIHNsaWNlIG1ldGhvZHMsIG9yIHRoZSB0ZXN0cyB3aWxsIGZhaWwgd2l0aCByZWdydGVzdCAtUi4KKyAgICAgICAgQWxsVGVzdHMuX19nZXRzbGljZV9fID0gZ2V0c2xpY2UKKyAgICAgICAgQWxsVGVzdHMuX19zZXRzbGljZV9fID0gc2V0c2xpY2UKKyAgICAgICAgQWxsVGVzdHMuX19kZWxzbGljZV9fID0gZGVsc2xpY2UKKworCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdERlbEl0ZW0oc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBvayA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBzZWxmLm9rID0gVHJ1ZQorICAgICAgICBhID0gQSgpCisgICAgICAgICMgU3VidGxlOiB3ZSBuZWVkIHRvIGNhbGwgUHlTZXF1ZW5jZV9TZXRJdGVtLCBub3QgUHlNYXBwaW5nX1NldEl0ZW0uCisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBzZXF1ZW5jZV9kZWxpdGVtCisgICAgICAgIHNlcXVlbmNlX2RlbGl0ZW0oYSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEub2spCisKKworICAgIGRlZiB0ZXN0VW5hcnlPcHMoc2VsZik6CisgICAgICAgIHRlc3RtZSA9IEFsbFRlc3RzKCkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgLXRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX25lZ19fJywgKHRlc3RtZSwpKV0pCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICArdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fcG9zX18nLCAodGVzdG1lLCkpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGFicyh0ZXN0bWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fYWJzX18nLCAodGVzdG1lLCkpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGludCh0ZXN0bWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19faW50X18nLCAodGVzdG1lLCkpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGxvbmcodGVzdG1lKQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2xvbmdfXycsICh0ZXN0bWUsKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgZmxvYXQodGVzdG1lKQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2Zsb2F0X18nLCAodGVzdG1lLCkpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIG9jdCh0ZXN0bWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fb2N0X18nLCAodGVzdG1lLCkpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGhleCh0ZXN0bWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19faGV4X18nLCAodGVzdG1lLCkpXSkKKworCisgICAgZGVmIHRlc3RNaXNjKHNlbGYpOgorICAgICAgICB0ZXN0bWUgPSBBbGxUZXN0cygpCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGhhc2godGVzdG1lKQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2hhc2hfXycsICh0ZXN0bWUsKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICByZXByKHRlc3RtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19yZXByX18nLCAodGVzdG1lLCkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgc3RyKHRlc3RtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19zdHJfXycsICh0ZXN0bWUsKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgPT0gMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoJ19fY21wX18nLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgPCAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgnX19jbXBfXycsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZSA+IDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCdfX2NtcF9fJywgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgZXZhbCgndGVzdG1lIDw+IDEnKSAgIyBYWFgga2lsbCB0aGlzIGluIHB5M2sKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCdfX2NtcF9fJywgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lICE9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCdfX2NtcF9fJywgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSA9PSB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCdfX2NtcF9fJywgKDEsIHRlc3RtZSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSA8IHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoJ19fY21wX18nLCAoMSwgdGVzdG1lKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxID4gdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgnX19jbXBfXycsICgxLCB0ZXN0bWUpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGV2YWwoJzEgPD4gdGVzdG1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCdfX2NtcF9fJywgKDEsIHRlc3RtZSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSAhPSB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCdfX2NtcF9fJywgKDEsIHRlc3RtZSkpXSkKKworCisgICAgZGVmIHRlc3RHZXRTZXRBbmREZWwoc2VsZik6CisgICAgICAgICMgSW50ZXJmZXJpbmcgdGVzdHMKKyAgICAgICAgY2xhc3MgRXh0cmFUZXN0cyhBbGxUZXN0cyk6CisgICAgICAgICAgICBAdHJhY2tDYWxsCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHJldHVybiAiU29tZVZhbCIKKworICAgICAgICAgICAgQHRyYWNrQ2FsbAorICAgICAgICAgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIEB0cmFja0NhbGwKKyAgICAgICAgICAgIGRlZiBfX2RlbGF0dHJfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3RtZSA9IEV4dHJhVGVzdHMoKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUuc3BhbQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2dldGF0dHJfXycsICh0ZXN0bWUsICJzcGFtIikpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lLmVnZ3MgPSAic3BhbSwgc3BhbSwgc3BhbSBhbmQgaGFtIgorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX3NldGF0dHJfXycsICh0ZXN0bWUsICJlZ2dzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW0sIHNwYW0sIHNwYW0gYW5kIGhhbSIpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGRlbCB0ZXN0bWUuY2FyZGluYWwKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19kZWxhdHRyX18nLCAodGVzdG1lLCAiY2FyZGluYWwiKSldKQorCisgICAgZGVmIHRlc3REZWwoc2VsZik6CisgICAgICAgIHggPSBbXQorCisgICAgICAgIGNsYXNzIERlbFRlc3Q6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICB4LmFwcGVuZCgiY3JhYiBwZW9wbGUsIGNyYWIgcGVvcGxlIikKKyAgICAgICAgdGVzdG1lID0gRGVsVGVzdCgpCisgICAgICAgIGRlbCB0ZXN0bWUKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiY3JhYiBwZW9wbGUsIGNyYWIgcGVvcGxlIl0sIHgpCisKKyAgICBkZWYgdGVzdEJhZFR5cGVSZXR1cm5lZChzZWxmKToKKyAgICAgICAgIyByZXR1cm4gdmFsdWVzIG9mIHNvbWUgbWV0aG9kIGFyZSB0eXBlLWNoZWNrZWQKKyAgICAgICAgY2xhc3MgQmFkVHlwZUNsYXNzOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIF9fZmxvYXRfXyA9IF9faW50X18KKyAgICAgICAgICAgIF9fbG9uZ19fID0gX19pbnRfXworICAgICAgICAgICAgX19zdHJfXyA9IF9faW50X18KKyAgICAgICAgICAgIF9fcmVwcl9fID0gX19pbnRfXworICAgICAgICAgICAgX19vY3RfXyA9IF9faW50X18KKyAgICAgICAgICAgIF9faGV4X18gPSBfX2ludF9fCisKKyAgICAgICAgZm9yIGYgaW4gW2ludCwgZmxvYXQsIGxvbmcsIHN0ciwgcmVwciwgb2N0LCBoZXhdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBCYWRUeXBlQ2xhc3MoKSkKKworICAgIGRlZiB0ZXN0TWl4SW50c0FuZExvbmdzKHNlbGYpOgorICAgICAgICAjIG1peGluZyB1cCBpbnRzIGFuZCBsb25ncyBpcyBva2F5CisgICAgICAgIGNsYXNzIEludExvbmdNaXhDbGFzczoKKyAgICAgICAgICAgIEB0cmFja0NhbGwKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MkwKKworICAgICAgICAgICAgQHRyYWNrQ2FsbAorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA2NAorCisgICAgICAgIG1peEludEFuZExvbmcgPSBJbnRMb25nTWl4Q2xhc3MoKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICBhc19pbnQgPSBpbnQobWl4SW50QW5kTG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGFzX2ludCksIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNfaW50LCA0MkwpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19faW50X18nLCAobWl4SW50QW5kTG9uZywpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGFzX2xvbmcgPSBsb25nKG1peEludEFuZExvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhc19sb25nKSwgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc19sb25nLCA2NCkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19sb25nX18nLCAobWl4SW50QW5kTG9uZywpKV0pCisKKyAgICBkZWYgdGVzdEhhc2hTdHVmZihzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvcnJlY3QgZXJyb3JzIGZyb20gaGFzaCgpIG9uIG9iamVjdHMgd2l0aCBjb21wYXJpc29ucyBidXQKKyAgICAgICAgIyAgbm8gX19oYXNoX18KKworICAgICAgICBjbGFzcyBDMDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBoYXNoKEMwKCkpICMgVGhpcyBzaG91bGQgd29yazsgdGhlIG5leHQgdHdvIHNob3VsZCByYWlzZSBUeXBlRXJyb3IKKworICAgICAgICBjbGFzcyBDMToKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKTogcmV0dXJuIDAKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIEMxKCkpCisKKyAgICAgICAgY2xhc3MgQzI6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcmV0dXJuIDEKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIEMyKCkpCisKKworICAgIGRlZiB0ZXN0U0ZCdWc1MzI2NDYoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgU0YgYnVnIDUzMjY0NgorCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIEEuX19jYWxsX18gPSBBKCkKKyAgICAgICAgYSA9IEEoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEoKSAjIFRoaXMgc2hvdWxkIG5vdCBzZWdmYXVsdAorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgUnVudGltZUVycm9yIikKKworICAgIGRlZiB0ZXN0Rm9yRXhjZXB0aW9uc1JhaXNlZEluSW5zdGFuY2VHZXRhdHRyMihzZWxmKToKKyAgICAgICAgIyBUZXN0cyBmb3IgZXhjZXB0aW9ucyByYWlzZWQgaW4gaW5zdGFuY2VfZ2V0YXR0cjIoKS4KKworICAgICAgICBkZWYgYm9vaChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJib29oIikKKworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgYSA9IHByb3BlcnR5KGJvb2gpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEEoKS5hICMgUmFpc2VkIEF0dHJpYnV0ZUVycm9yOiBBIGluc3RhbmNlIGhhcyBubyBhdHRyaWJ1dGUgJ2EnCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgeDoKKyAgICAgICAgICAgIGlmIHN0cih4KSAhPSAiYm9vaCI6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJhdHRyaWJ1dGUgZXJyb3IgZm9yIEEoKS5hIGdvdCBtYXNrZWQ6ICVzIiAlIHgpCisKKyAgICAgICAgY2xhc3MgRToKKyAgICAgICAgICAgIF9fZXFfXyA9IHByb3BlcnR5KGJvb2gpCisgICAgICAgIEUoKSA9PSBFKCkgIyBJbiBkZWJ1ZyBtb2RlLCBjYXVzZWQgYSBDLWxldmVsIGFzc2VydCgpIHRvIGZhaWwKKworICAgICAgICBjbGFzcyBJOgorICAgICAgICAgICAgX19pbml0X18gPSBwcm9wZXJ0eShib29oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEluIGRlYnVnIG1vZGUsIHByaW50ZWQgWFhYIHVuZGV0ZWN0ZWQgZXJyb3IgYW5kCisgICAgICAgICAgICAjICByYWlzZXMgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgICAgIEkoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIHg6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImF0dHJpYnV0ZSBlcnJvciBmb3IgSS5fX2luaXRfXyBnb3QgbWFza2VkIikKKworICAgIGRlZiB0ZXN0SGFzaENvbXBhcmlzb25PZk1ldGhvZHMoc2VsZik6CisgICAgICAgICMgVGVzdCBjb21wYXJpc29uIGFuZCBoYXNoIG9mIG1ldGhvZHMKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgZyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi54ID09IG90aGVyLngKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi54CisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYTEgPSBBKDEpCisgICAgICAgIGEyID0gQSgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGExLmYsIGExLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYTEuZiwgYTIuZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhMS5mLCBhMS5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGExLmYsIEEoMSkuZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGExLmYpLCBoYXNoKGExLmYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYTEuZiksIGhhc2goQSgxKS5mKSkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKEEuZiwgYTEuZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChBLmYsIEEuZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCLmYsIEEuZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKEIuZiksIGhhc2goQS5mKSkKKworICAgICAgICAjIHRoZSBmb2xsb3dpbmcgdHJpZ2dlcnMgYSBTeXN0ZW1FcnJvciBpbiAyLjQKKyAgICAgICAgYSA9IEEoaGFzaChBLmYuaW1fZnVuYyleKC0xKSkKKyAgICAgICAgaGFzaChhLmYpCisKKyAgICBkZWYgdGVzdEF0dHJTbG90cyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGMgaW4gQywgQygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlKGMpLl9fZ2V0YXR0cmlidXRlX18sIGMsIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlKGMpLl9fc2V0YXR0cl9fLCBjLCBbXSwgW10pCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCIuK19fKGdldHxzZXR8ZGVsKXNsaWNlX18gaGFzIGJlZW4gcmVtb3ZlZCIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoImNsYXNzaWMgaW50IGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICgiPD4gbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENsYXNzVGVzdHMpCisKK2lmIF9fbmFtZV9fPT0nX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jbWF0aC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWM0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQpAQCAtMCwwICsxLDQ3NCBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9tYXRoIGltcG9ydCBwYXJzZV90ZXN0ZmlsZSwgdGVzdF9maWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBjbWF0aCwgbWF0aAorZnJvbSBjbWF0aCBpbXBvcnQgcGhhc2UsIHBvbGFyLCByZWN0LCBwaQorCitJTkYgPSBmbG9hdCgnaW5mJykKK05BTiA9IGZsb2F0KCduYW4nKQorCitjb21wbGV4X3plcm9zID0gW2NvbXBsZXgoeCwgeSkgZm9yIHggaW4gWzAuMCwgLTAuMF0gZm9yIHkgaW4gWzAuMCwgLTAuMF1dCitjb21wbGV4X2luZmluaXRpZXMgPSBbY29tcGxleCh4LCB5KSBmb3IgeCwgeSBpbiBbCisgICAgICAgIChJTkYsIDAuMCksICAjIDFzdCBxdWFkcmFudAorICAgICAgICAoSU5GLCAyLjMpLAorICAgICAgICAoSU5GLCBJTkYpLAorICAgICAgICAoMi4zLCBJTkYpLAorICAgICAgICAoMC4wLCBJTkYpLAorICAgICAgICAoLTAuMCwgSU5GKSwgIyAybmQgcXVhZHJhbnQKKyAgICAgICAgKC0yLjMsIElORiksCisgICAgICAgICgtSU5GLCBJTkYpLAorICAgICAgICAoLUlORiwgMi4zKSwKKyAgICAgICAgKC1JTkYsIDAuMCksCisgICAgICAgICgtSU5GLCAtMC4wKSwgIyAzcmQgcXVhZHJhbnQKKyAgICAgICAgKC1JTkYsIC0yLjMpLAorICAgICAgICAoLUlORiwgLUlORiksCisgICAgICAgICgtMi4zLCAtSU5GKSwKKyAgICAgICAgKC0wLjAsIC1JTkYpLAorICAgICAgICAoMC4wLCAtSU5GKSwgIyA0dGggcXVhZHJhbnQKKyAgICAgICAgKDIuMywgLUlORiksCisgICAgICAgIChJTkYsIC1JTkYpLAorICAgICAgICAoSU5GLCAtMi4zKSwKKyAgICAgICAgKElORiwgLTAuMCkKKyAgICAgICAgXV0KK2NvbXBsZXhfbmFucyA9IFtjb21wbGV4KHgsIHkpIGZvciB4LCB5IGluIFsKKyAgICAgICAgKE5BTiwgLUlORiksCisgICAgICAgIChOQU4sIC0yLjMpLAorICAgICAgICAoTkFOLCAtMC4wKSwKKyAgICAgICAgKE5BTiwgMC4wKSwKKyAgICAgICAgKE5BTiwgMi4zKSwKKyAgICAgICAgKE5BTiwgSU5GKSwKKyAgICAgICAgKC1JTkYsIE5BTiksCisgICAgICAgICgtMi4zLCBOQU4pLAorICAgICAgICAoLTAuMCwgTkFOKSwKKyAgICAgICAgKDAuMCwgTkFOKSwKKyAgICAgICAgKDIuMywgTkFOKSwKKyAgICAgICAgKElORiwgTkFOKQorICAgICAgICBdXQorCitjbGFzcyBDTWF0aFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBpbiBjbWF0aAorICAgIHRlc3RfZnVuY3Rpb25zID0gW2dldGF0dHIoY21hdGgsIGZuYW1lKSBmb3IgZm5hbWUgaW4gWworICAgICAgICAgICAgJ2Fjb3MnLCAnYWNvc2gnLCAnYXNpbicsICdhc2luaCcsICdhdGFuJywgJ2F0YW5oJywKKyAgICAgICAgICAgICdjb3MnLCAnY29zaCcsICdleHAnLCAnbG9nJywgJ2xvZzEwJywgJ3NpbicsICdzaW5oJywKKyAgICAgICAgICAgICdzcXJ0JywgJ3RhbicsICd0YW5oJ11dCisgICAgIyB0ZXN0IGZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzIGluZGVwZW5kZW50bHkgZm9yIDItYXJndW1lbnQgbG9nCisgICAgdGVzdF9mdW5jdGlvbnMuYXBwZW5kKGxhbWJkYSB4IDogY21hdGgubG9nKHgsIDE3MjkuICsgMGopKQorICAgIHRlc3RfZnVuY3Rpb25zLmFwcGVuZChsYW1iZGEgeCA6IGNtYXRoLmxvZygxNC4tMjdqLCB4KSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3ZhbHVlcyA9IG9wZW4odGVzdF9maWxlKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfdmFsdWVzLmNsb3NlKCkKKworICAgIGRlZiByQXNzZXJ0QWxtb3N0RXF1YWwoc2VsZiwgYSwgYiwgcmVsX2VyciA9IDJlLTE1LCBhYnNfZXJyID0gNWUtMzIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcmUgbm90IGFsbW9zdCBlcXVhbC4KKworICAgICAgICBEZXRlcm1pbmUgd2hldGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYSBhbmQgYiBhcmUgZXF1YWwgdG8gd2l0aGluCisgICAgICAgIGEgKHNtYWxsKSByb3VuZGluZyBlcnJvci4gIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgcmVsX2VyciBhbmQKKyAgICAgICAgYWJzX2VyciBhcmUgY2hvc2VuIHRvIGJlIHN1aXRhYmxlIGZvciBwbGF0Zm9ybXMgd2hlcmUgYSBmbG9hdCBpcworICAgICAgICByZXByZXNlbnRlZCBieSBhbiBJRUVFIDc1NCBkb3VibGUuICBUaGV5IGFsbG93IGFuIGVycm9yIG9mIGJldHdlZW4KKyAgICAgICAgOSBhbmQgMTkgdWxwcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBzcGVjaWFsIHZhbHVlcyB0ZXN0aW5nCisgICAgICAgIGlmIG1hdGguaXNuYW4oYSk6CisgICAgICAgICAgICBpZiBtYXRoLmlzbmFuKGIpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZyBvciAneyFyfSBzaG91bGQgYmUgbmFuJy5mb3JtYXQoYikpCisKKyAgICAgICAgaWYgbWF0aC5pc2luZihhKToKKyAgICAgICAgICAgIGlmIGEgPT0gYjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuZmFpbChtc2cgb3IgJ2Zpbml0ZSByZXN1bHQgd2hlcmUgaW5maW5pdHkgZXhwZWN0ZWQ6ICcKKyAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWQgeyFyfSwgZ290IHshcn0nLmZvcm1hdChhLCBiKSkKKworICAgICAgICAjIGlmIGJvdGggYSBhbmQgYiBhcmUgemVybywgY2hlY2sgd2hldGhlciB0aGV5IGhhdmUgdGhlIHNhbWUgc2lnbgorICAgICAgICAjIChpbiB0aGVvcnkgdGhlcmUgYXJlIGV4YW1wbGVzIHdoZXJlIGl0IHdvdWxkIGJlIGxlZ2l0aW1hdGUgZm9yIGEKKyAgICAgICAgIyBhbmQgYiB0byBoYXZlIG9wcG9zaXRlIHNpZ25zOyBpbiBwcmFjdGljZSB0aGVzZSBoYXJkbHkgZXZlcgorICAgICAgICAjIG9jY3VyKS4KKyAgICAgICAgaWYgbm90IGEgYW5kIG5vdCBiOgorICAgICAgICAgICAgaWYgbWF0aC5jb3B5c2lnbigxLiwgYSkgIT0gbWF0aC5jb3B5c2lnbigxLiwgYik6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZyBvciAnemVybyBoYXMgd3Jvbmcgc2lnbjogZXhwZWN0ZWQgeyFyfSwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290IHshcn0nLmZvcm1hdChhLCBiKSkKKworICAgICAgICAjIGlmIGEtYiBvdmVyZmxvd3MsIG9yIGIgaXMgaW5maW5pdGUsIHJldHVybiBGYWxzZS4gIEFnYWluLCBpbgorICAgICAgICAjIHRoZW9yeSB0aGVyZSBhcmUgZXhhbXBsZXMgd2hlcmUgYSBpcyB3aXRoaW4gYSBmZXcgdWxwcyBvZiB0aGUKKyAgICAgICAgIyBtYXggcmVwcmVzZW50YWJsZSBmbG9hdCwgYW5kIHRoZW4gYiBjb3VsZCBsZWdpdGltYXRlbHkgYmUKKyAgICAgICAgIyBpbmZpbml0ZS4gIEluIHByYWN0aWNlIHRoZXNlIGV4YW1wbGVzIGFyZSByYXJlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhYnNvbHV0ZV9lcnJvciA9IGFicyhiLWEpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB0ZXN0IHBhc3NlcyBpZiBlaXRoZXIgdGhlIGFic29sdXRlIGVycm9yIG9yIHRoZSByZWxhdGl2ZQorICAgICAgICAgICAgIyBlcnJvciBpcyBzdWZmaWNpZW50bHkgc21hbGwuICBUaGUgZGVmYXVsdHMgYW1vdW50IHRvIGFuCisgICAgICAgICAgICAjIGVycm9yIG9mIGJldHdlZW4gOSB1bHBzIGFuZCAxOSB1bHBzIG9uIGFuIElFRUUtNzU0IGNvbXBsaWFudAorICAgICAgICAgICAgIyBtYWNoaW5lLgorICAgICAgICAgICAgaWYgYWJzb2x1dGVfZXJyb3IgPD0gbWF4KGFic19lcnIsIHJlbF9lcnIgKiBhYnMoYSkpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmZhaWwobXNnIG9yCisgICAgICAgICAgICAgICAgICAneyFyfSBhbmQgeyFyfSBhcmUgbm90IHN1ZmZpY2llbnRseSBjbG9zZScuZm9ybWF0KGEsIGIpKQorCisgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgorICAgICAgICBlX2V4cGVjdGVkID0gMi43MTgyODE4Mjg0NTkwNDUyMzUzNgorICAgICAgICBwaV9leHBlY3RlZCA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjbWF0aC5waSwgcGlfZXhwZWN0ZWQsIHBsYWNlcz05LAorICAgICAgICAgICAgbXNnPSJjbWF0aC5waSBpcyB7fTsgc2hvdWxkIGJlIHt9Ii5mb3JtYXQoY21hdGgucGksIHBpX2V4cGVjdGVkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjbWF0aC5lLCBlX2V4cGVjdGVkLCBwbGFjZXM9OSwKKyAgICAgICAgICAgIG1zZz0iY21hdGguZSBpcyB7fTsgc2hvdWxkIGJlIHt9Ii5mb3JtYXQoY21hdGguZSwgZV9leHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdF91c2VyX29iamVjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IGF1dG9tYXRpYyBjYWxsaW5nIG9mIF9fY29tcGxleF9fIGFuZCBfX2Zsb2F0X18gYnkgY21hdGgKKyAgICAgICAgIyBmdW5jdGlvbnMKKworICAgICAgICAjIHNvbWUgcmFuZG9tIHZhbHVlcyB0byB1c2UgYXMgdGVzdCB2YWx1ZXM7IHdlIGF2b2lkIHZhbHVlcworICAgICAgICAjIGZvciB3aGljaCBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBpbiBjbWF0aCBpcyB1bmRlZmluZWQKKyAgICAgICAgIyAoaS5lLiAwLiwgMS4sIC0xLiwgMWosIC0xaikgb3Igd291bGQgY2F1c2Ugb3ZlcmZsb3cKKyAgICAgICAgY3hfYXJnID0gNC40MTk0MTQ0MzkgKyAxLjQ5NzEwMDExM2oKKyAgICAgICAgZmx0X2FyZyA9IC02LjEzMTY3NzcyNQorCisgICAgICAgICMgYSB2YXJpZXR5IG9mIG5vbi1jb21wbGV4IG51bWJlcnMsIHVzZWQgdG8gY2hlY2sgdGhhdAorICAgICAgICAjIG5vbi1jb21wbGV4IHJldHVybiB2YWx1ZXMgZnJvbSBfX2NvbXBsZXhfXyBnaXZlIGFuIGVycm9yCisgICAgICAgIG5vbl9jb21wbGV4ZXMgPSBbIm5vdCBjb21wbGV4IiwgMSwgNUwsIDIuLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCgpLCBOb3RJbXBsZW1lbnRlZF0KKworICAgICAgICAjIE5vdyB3ZSBpbnRyb2R1Y2UgYSB2YXJpZXR5IG9mIGNsYXNzZXMgd2hvc2UgaW5zdGFuY2VzIG1pZ2h0CisgICAgICAgICMgZW5kIHVwIGJlaW5nIHBhc3NlZCB0byB0aGUgY21hdGggZnVuY3Rpb25zCisKKyAgICAgICAgIyB1c3VhbCBjYXNlOiBuZXctc3R5bGUgY2xhc3MgaW1wbGVtZW50aW5nIF9fY29tcGxleF9fCisgICAgICAgIGNsYXNzIE15Q29tcGxleChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgICMgb2xkLXN0eWxlIGNsYXNzIGltcGxlbWVudGluZyBfX2NvbXBsZXhfXworICAgICAgICBjbGFzcyBNeUNvbXBsZXhPUzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworICAgICAgICAjIGNsYXNzZXMgZm9yIHdoaWNoIF9fY29tcGxleF9fIHJhaXNlcyBhbiBleGNlcHRpb24KKyAgICAgICAgY2xhc3MgU29tZUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNeUNvbXBsZXhFeGNlcHRpb24ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBTb21lRXhjZXB0aW9uCisgICAgICAgIGNsYXNzIE15Q29tcGxleEV4Y2VwdGlvbk9TOgorICAgICAgICAgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFNvbWVFeGNlcHRpb24KKworICAgICAgICAjIHNvbWUgY2xhc3NlcyBub3QgcHJvdmlkaW5nIF9fZmxvYXRfXyBvciBfX2NvbXBsZXhfXworICAgICAgICBjbGFzcyBOZWl0aGVyQ29tcGxleE5vckZsb2F0KG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE5laXRoZXJDb21wbGV4Tm9yRmxvYXRPUzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTXlJbnQob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOiByZXR1cm4gMgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOiByZXR1cm4gMkwKKyAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6IHJldHVybiAyCisgICAgICAgIGNsYXNzIE15SW50T1M6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKTogcmV0dXJuIDIKKyAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKTogcmV0dXJuIDJMCisgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOiByZXR1cm4gMgorCisgICAgICAgICMgb3RoZXIgcG9zc2libGUgY29tYmluYXRpb25zIG9mIF9fZmxvYXRfXyBhbmQgX19jb21wbGV4X18KKyAgICAgICAgIyB0aGF0IHNob3VsZCB3b3JrCisgICAgICAgIGNsYXNzIEZsb2F0QW5kQ29tcGxleChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmx0X2FyZworICAgICAgICAgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBjeF9hcmcKKyAgICAgICAgY2xhc3MgRmxvYXRBbmRDb21wbGV4T1M6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBmbHRfYXJnCisgICAgICAgICAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGN4X2FyZworICAgICAgICBjbGFzcyBKdXN0RmxvYXQob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZsdF9hcmcKKyAgICAgICAgY2xhc3MgSnVzdEZsb2F0T1M6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBmbHRfYXJnCisKKyAgICAgICAgZm9yIGYgaW4gc2VsZi50ZXN0X2Z1bmN0aW9uczoKKyAgICAgICAgICAgICMgdXN1YWwgdXNhZ2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihNeUNvbXBsZXgoY3hfYXJnKSksIGYoY3hfYXJnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihNeUNvbXBsZXhPUyhjeF9hcmcpKSwgZihjeF9hcmcpKQorICAgICAgICAgICAgIyBvdGhlciBjb21iaW5hdGlvbnMgb2YgX19mbG9hdF9fIGFuZCBfX2NvbXBsZXhfXworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKEZsb2F0QW5kQ29tcGxleCgpKSwgZihjeF9hcmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKEZsb2F0QW5kQ29tcGxleE9TKCkpLCBmKGN4X2FyZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoSnVzdEZsb2F0KCkpLCBmKGZsdF9hcmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKEp1c3RGbG9hdE9TKCkpLCBmKGZsdF9hcmcpKQorICAgICAgICAgICAgIyBUeXBlRXJyb3Igc2hvdWxkIGJlIHJhaXNlZCBmb3IgY2xhc3NlcyBub3QgcHJvdmlkaW5nCisgICAgICAgICAgICAjIGVpdGhlciBfX2NvbXBsZXhfXyBvciBfX2Zsb2F0X18sIGV2ZW4gaWYgdGhleSBwcm92aWRlCisgICAgICAgICAgICAjIF9faW50X18sIF9fbG9uZ19fIG9yIF9faW5kZXhfXy4gIEFuIG9sZC1zdHlsZSBjbGFzcworICAgICAgICAgICAgIyBjdXJyZW50bHkgcmFpc2VzIEF0dHJpYnV0ZUVycm9yIGluc3RlYWQgb2YgYSBUeXBlRXJyb3I7CisgICAgICAgICAgICAjIHRoaXMgY291bGQgYmUgY29uc2lkZXJlZCBhIGJ1Zy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgTmVpdGhlckNvbXBsZXhOb3JGbG9hdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBNeUludCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBmLCBOZWl0aGVyQ29tcGxleE5vckZsb2F0T1MoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgZiwgTXlJbnRPUygpKQorICAgICAgICAgICAgIyBub24tY29tcGxleCByZXR1cm4gdmFsdWUgZnJvbSBfX2NvbXBsZXhfXyAtPiBUeXBlRXJyb3IKKyAgICAgICAgICAgIGZvciBiYWRfY29tcGxleCBpbiBub25fY29tcGxleGVzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgTXlDb21wbGV4KGJhZF9jb21wbGV4KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIE15Q29tcGxleE9TKGJhZF9jb21wbGV4KSkKKyAgICAgICAgICAgICMgZXhjZXB0aW9ucyBpbiBfX2NvbXBsZXhfXyBzaG91bGQgYmUgcHJvcGFnYXRlZCBjb3JyZWN0bHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNvbWVFeGNlcHRpb24sIGYsIE15Q29tcGxleEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU29tZUV4Y2VwdGlvbiwgZiwgTXlDb21wbGV4RXhjZXB0aW9uT1MoKSkKKworICAgIGRlZiB0ZXN0X2lucHV0X3R5cGUoc2VsZik6CisgICAgICAgICMgaW50cyBhbmQgbG9uZ3Mgc2hvdWxkIGJlIGFjY2VwdGFibGUgaW5wdXRzIHRvIGFsbCBjbWF0aAorICAgICAgICAjIGZ1bmN0aW9ucywgYnkgdmlydHVlIG9mIHByb3ZpZGluZyBhIF9fZmxvYXRfXyBtZXRob2QKKyAgICAgICAgZm9yIGYgaW4gc2VsZi50ZXN0X2Z1bmN0aW9uczoKKyAgICAgICAgICAgIGZvciBhcmcgaW4gWzIsIDJMLCAyLl06CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGFyZyksIGYoYXJnLl9fZmxvYXRfXygpKSkKKworICAgICAgICAjIGJ1dCBzdHJpbmdzIHNob3VsZCBnaXZlIGEgVHlwZUVycm9yCisgICAgICAgIGZvciBmIGluIHNlbGYudGVzdF9mdW5jdGlvbnM6CisgICAgICAgICAgICBmb3IgYXJnIGluIFsiYSIsICJsb25nX3N0cmluZyIsICIwIiwgIjFqIiwgIiJdOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYXJnKQorCisgICAgZGVmIHRlc3RfY21hdGhfbWF0Y2hlc19tYXRoKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgY29ycmVzcG9uZGluZyBjbWF0aCBhbmQgbWF0aCBmdW5jdGlvbnMgYXJlIGVxdWFsCisgICAgICAgICMgZm9yIGZsb2F0cyBpbiB0aGUgYXBwcm9wcmlhdGUgcmFuZ2UKKworICAgICAgICAjIHRlc3RfdmFsdWVzIGluICgwLCAxKQorICAgICAgICB0ZXN0X3ZhbHVlcyA9IFswLjAxLCAwLjEsIDAuMiwgMC41LCAwLjksIDAuOTldCisKKyAgICAgICAgIyB0ZXN0X3ZhbHVlcyBmb3IgZnVuY3Rpb25zIGRlZmluZWQgb24gWy0xLiwgMS5dCisgICAgICAgIHVuaXRfaW50ZXJ2YWwgPSB0ZXN0X3ZhbHVlcyArIFsteCBmb3IgeCBpbiB0ZXN0X3ZhbHVlc10gKyBcCisgICAgICAgICAgICBbMC4sIDEuLCAtMS5dCisKKyAgICAgICAgIyB0ZXN0X3ZhbHVlcyBmb3IgbG9nLCBsb2cxMCwgc3FydAorICAgICAgICBwb3NpdGl2ZSA9IHRlc3RfdmFsdWVzICsgWzEuXSArIFsxLi94IGZvciB4IGluIHRlc3RfdmFsdWVzXQorICAgICAgICBub25uZWdhdGl2ZSA9IFswLl0gKyBwb3NpdGl2ZQorCisgICAgICAgICMgdGVzdF92YWx1ZXMgZm9yIGZ1bmN0aW9ucyBkZWZpbmVkIG9uIHRoZSB3aG9sZSByZWFsIGxpbmUKKyAgICAgICAgcmVhbF9saW5lID0gWzAuXSArIHBvc2l0aXZlICsgWy14IGZvciB4IGluIHBvc2l0aXZlXQorCisgICAgICAgIHRlc3RfZnVuY3Rpb25zID0geworICAgICAgICAgICAgJ2Fjb3MnIDogdW5pdF9pbnRlcnZhbCwKKyAgICAgICAgICAgICdhc2luJyA6IHVuaXRfaW50ZXJ2YWwsCisgICAgICAgICAgICAnYXRhbicgOiByZWFsX2xpbmUsCisgICAgICAgICAgICAnY29zJyA6IHJlYWxfbGluZSwKKyAgICAgICAgICAgICdjb3NoJyA6IHJlYWxfbGluZSwKKyAgICAgICAgICAgICdleHAnIDogcmVhbF9saW5lLAorICAgICAgICAgICAgJ2xvZycgOiBwb3NpdGl2ZSwKKyAgICAgICAgICAgICdsb2cxMCcgOiBwb3NpdGl2ZSwKKyAgICAgICAgICAgICdzaW4nIDogcmVhbF9saW5lLAorICAgICAgICAgICAgJ3NpbmgnIDogcmVhbF9saW5lLAorICAgICAgICAgICAgJ3NxcnQnIDogbm9ubmVnYXRpdmUsCisgICAgICAgICAgICAndGFuJyA6IHJlYWxfbGluZSwKKyAgICAgICAgICAgICd0YW5oJyA6IHJlYWxfbGluZX0KKworICAgICAgICBmb3IgZm4sIHZhbHVlcyBpbiB0ZXN0X2Z1bmN0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgZmxvYXRfZm4gPSBnZXRhdHRyKG1hdGgsIGZuKQorICAgICAgICAgICAgY29tcGxleF9mbiA9IGdldGF0dHIoY21hdGgsIGZuKQorICAgICAgICAgICAgZm9yIHYgaW4gdmFsdWVzOgorICAgICAgICAgICAgICAgIHogPSBjb21wbGV4X2ZuKHYpCisgICAgICAgICAgICAgICAgc2VsZi5yQXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXRfZm4odiksIHoucmVhbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuLCB6LmltYWcpCisKKyAgICAgICAgIyB0ZXN0IHR3by1hcmd1bWVudCB2ZXJzaW9uIG9mIGxvZyB3aXRoIHZhcmlvdXMgYmFzZXMKKyAgICAgICAgZm9yIGJhc2UgaW4gWzAuNSwgMi4sIDEwLl06CisgICAgICAgICAgICBmb3IgdiBpbiBwb3NpdGl2ZToKKyAgICAgICAgICAgICAgICB6ID0gY21hdGgubG9nKHYsIGJhc2UpCisgICAgICAgICAgICAgICAgc2VsZi5yQXNzZXJ0QWxtb3N0RXF1YWwobWF0aC5sb2codiwgYmFzZSksIHoucmVhbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuLCB6LmltYWcpCisKKyAgICBkZWYgdGVzdF9zcGVjaWZpY192YWx1ZXMoc2VsZik6CisgICAgICAgIGlmIG5vdCBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkZWYgcmVjdF9jb21wbGV4KHopOgorICAgICAgICAgICAgIiIiV3JhcHBlZCB2ZXJzaW9uIG9mIHJlY3QgdGhhdCBhY2NlcHRzIGEgY29tcGxleCBudW1iZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdHdvIGZsb2F0IGFyZ3VtZW50cy4iIiIKKyAgICAgICAgICAgIHJldHVybiBjbWF0aC5yZWN0KHoucmVhbCwgei5pbWFnKQorCisgICAgICAgIGRlZiBwb2xhcl9jb21wbGV4KHopOgorICAgICAgICAgICAgIiIiV3JhcHBlZCB2ZXJzaW9uIG9mIHBvbGFyIHRoYXQgcmV0dXJucyBhIGNvbXBsZXggbnVtYmVyIGluc3RlYWQgb2YKKyAgICAgICAgICAgIHR3byBmbG9hdHMuIiIiCisgICAgICAgICAgICByZXR1cm4gY29tcGxleCgqcG9sYXIoeikpCisKKyAgICAgICAgZm9yIGlkLCBmbiwgYXIsIGFpLCBlciwgZWksIGZsYWdzIGluIHBhcnNlX3Rlc3RmaWxlKHRlc3RfZmlsZSk6CisgICAgICAgICAgICBhcmcgPSBjb21wbGV4KGFyLCBhaSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gY29tcGxleChlciwgZWkpCisgICAgICAgICAgICBpZiBmbiA9PSAncmVjdCc6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSByZWN0X2NvbXBsZXgKKyAgICAgICAgICAgIGVsaWYgZm4gPT0gJ3BvbGFyJzoKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IHBvbGFyX2NvbXBsZXgKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBnZXRhdHRyKGNtYXRoLCBmbikKKyAgICAgICAgICAgIGlmICdkaXZpZGUtYnktemVybycgaW4gZmxhZ3Mgb3IgJ2ludmFsaWQnIGluIGZsYWdzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gZnVuY3Rpb24oYXJnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVmFsdWVFcnJvciBub3QgcmFpc2VkIGluIHRlc3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAne306IHt9KGNvbXBsZXgoeyFyfSwgeyFyfSkpJy5mb3JtYXQoaWQsIGZuLCBhciwgYWkpKQorCisgICAgICAgICAgICBpZiAnb3ZlcmZsb3cnIGluIGZsYWdzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gZnVuY3Rpb24oYXJnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnT3ZlcmZsb3dFcnJvciBub3QgcmFpc2VkIGluIHRlc3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAne306IHt9KGNvbXBsZXgoeyFyfSwgeyFyfSkpJy5mb3JtYXQoaWQsIGZuLCBhciwgYWkpKQorCisgICAgICAgICAgICBhY3R1YWwgPSBmdW5jdGlvbihhcmcpCisKKyAgICAgICAgICAgIGlmICdpZ25vcmUtcmVhbC1zaWduJyBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBjb21wbGV4KGFicyhhY3R1YWwucmVhbCksIGFjdHVhbC5pbWFnKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gY29tcGxleChhYnMoZXhwZWN0ZWQucmVhbCksIGV4cGVjdGVkLmltYWcpCisgICAgICAgICAgICBpZiAnaWdub3JlLWltYWctc2lnbicgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgYWN0dWFsID0gY29tcGxleChhY3R1YWwucmVhbCwgYWJzKGFjdHVhbC5pbWFnKSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGNvbXBsZXgoZXhwZWN0ZWQucmVhbCwgYWJzKGV4cGVjdGVkLmltYWcpKQorCisgICAgICAgICAgICAjIGZvciB0aGUgcmVhbCBwYXJ0IG9mIHRoZSBsb2cgZnVuY3Rpb24sIHdlIGFsbG93IGFuCisgICAgICAgICAgICAjIGFic29sdXRlIGVycm9yIG9mIHVwIHRvIDJlLTE1LgorICAgICAgICAgICAgaWYgZm4gaW4gKCdsb2cnLCAnbG9nMTAnKToKKyAgICAgICAgICAgICAgICByZWFsX2Fic19lcnIgPSAyZS0xNQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWFsX2Fic19lcnIgPSA1ZS0zMjMKKworICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICgKKyAgICAgICAgICAgICAgICAne306IHt9KGNvbXBsZXgoeyFyfSwgeyFyfSkpXG4nCisgICAgICAgICAgICAgICAgJ0V4cGVjdGVkOiBjb21wbGV4KHshcn0sIHshcn0pXG4nCisgICAgICAgICAgICAgICAgJ1JlY2VpdmVkOiBjb21wbGV4KHshcn0sIHshcn0pXG4nCisgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIHZhbHVlIGluc3VmZmljaWVudGx5IGNsb3NlIHRvIGV4cGVjdGVkIHZhbHVlLicKKyAgICAgICAgICAgICAgICApLmZvcm1hdChpZCwgZm4sIGFyLCBhaSwKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLnJlYWwsIGV4cGVjdGVkLmltYWcsCisgICAgICAgICAgICAgICAgICAgICBhY3R1YWwucmVhbCwgYWN0dWFsLmltYWcpCisgICAgICAgICAgICBzZWxmLnJBc3NlcnRBbG1vc3RFcXVhbChleHBlY3RlZC5yZWFsLCBhY3R1YWwucmVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXJyPXJlYWxfYWJzX2VyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuckFzc2VydEFsbW9zdEVxdWFsKGV4cGVjdGVkLmltYWcsIGFjdHVhbC5pbWFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1lcnJvcl9tZXNzYWdlKQorCisgICAgZGVmIGFzc2VydENJU0VxdWFsKHNlbGYsIGEsIGIpOgorICAgICAgICBlcHMgPSAxRS03CisgICAgICAgIGlmIGFicyhhWzBdIC0gYlswXSkgPiBlcHMgb3IgYWJzKGFbMV0gLSBiWzFdKSA+IGVwczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgoYSAsYikpCisKKyAgICBkZWYgdGVzdF9wb2xhcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRDSVNFcXVhbChwb2xhcigwKSwgKDAuLCAwLikpCisgICAgICAgIHNlbGYuYXNzZXJ0Q0lTRXF1YWwocG9sYXIoMS4pLCAoMS4sIDAuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRDSVNFcXVhbChwb2xhcigtMS4pLCAoMS4sIHBpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRDSVNFcXVhbChwb2xhcigxaiksICgxLiwgcGkvMikpCisgICAgICAgIHNlbGYuYXNzZXJ0Q0lTRXF1YWwocG9sYXIoLTFqKSwgKDEuLCAtcGkvMikpCisKKyAgICBkZWYgdGVzdF9waGFzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZSgwKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoMS4pLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZSgtMS4pLCBwaSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZSgtMS4rMUUtMzAwaiksIHBpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKC0xLi0xRS0zMDBqKSwgLXBpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKDFqKSwgcGkvMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZSgtMWopLCAtcGkvMikKKworICAgICAgICAjIHplcm9zCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGhhc2UoY29tcGxleCgwLjAsIDAuMCkpLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGhhc2UoY29tcGxleCgwLjAsIC0wLjApKSwgLTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaGFzZShjb21wbGV4KC0wLjAsIDAuMCkpLCBwaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaGFzZShjb21wbGV4KC0wLjAsIC0wLjApKSwgLXBpKQorCisgICAgICAgICMgaW5maW5pdGllcworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoLUlORiwgLTAuMCkpLCAtcGkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleCgtSU5GLCAtMi4zKSksIC1waSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KC1JTkYsIC1JTkYpKSwgLTAuNzUqcGkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleCgtMi4zLCAtSU5GKSksIC1waS8yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoLTAuMCwgLUlORikpLCAtcGkvMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KDAuMCwgLUlORikpLCAtcGkvMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KDIuMywgLUlORikpLCAtcGkvMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KElORiwgLUlORikpLCAtcGkvNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaGFzZShjb21wbGV4KElORiwgLTIuMykpLCAtMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBoYXNlKGNvbXBsZXgoSU5GLCAtMC4wKSksIC0wLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGhhc2UoY29tcGxleChJTkYsIDAuMCkpLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGhhc2UoY29tcGxleChJTkYsIDIuMykpLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleChJTkYsIElORikpLCBwaS80KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoMi4zLCBJTkYpKSwgcGkvMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KDAuMCwgSU5GKSksIHBpLzIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleCgtMC4wLCBJTkYpKSwgcGkvMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KC0yLjMsIElORikpLCBwaS8yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoLUlORiwgSU5GKSksIDAuNzUqcGkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleCgtSU5GLCAyLjMpKSwgcGkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleCgtSU5GLCAwLjApKSwgcGkpCisKKyAgICAgICAgIyByZWFsIG9yIGltYWdpbmFyeSBwYXJ0IE5hTgorICAgICAgICBmb3IgeiBpbiBjb21wbGV4X25hbnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihwaGFzZSh6KSkpCisKKyAgICBkZWYgdGVzdF9hYnMoc2VsZik6CisgICAgICAgICMgemVyb3MKKyAgICAgICAgZm9yIHogaW4gY29tcGxleF96ZXJvczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKHopLCAwLjApCisKKyAgICAgICAgIyBpbmZpbml0aWVzCisgICAgICAgIGZvciB6IGluIGNvbXBsZXhfaW5maW5pdGllczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKHopLCBJTkYpCisKKyAgICAgICAgIyByZWFsIG9yIGltYWdpbmFyeSBwYXJ0IE5hTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhjb21wbGV4KE5BTiwgLUlORikpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgLTIuMykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCAtMC4wKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleChOQU4sIDAuMCkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCAyLjMpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKGNvbXBsZXgoTkFOLCBJTkYpKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhjb21wbGV4KC1JTkYsIE5BTikpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KC0yLjMsIE5BTikpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoLTAuMCwgTkFOKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleCgwLjAsIE5BTikpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoMi4zLCBOQU4pKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKGNvbXBsZXgoSU5GLCBOQU4pKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleChOQU4sIE5BTikpKSkKKworICAgICAgICAjIHJlc3VsdCBvdmVyZmxvd3MKKyAgICAgICAgaWYgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgYWJzLCBjb21wbGV4KDEuNGUzMDgsIDEuNGUzMDgpKQorCisgICAgZGVmIGFzc2VydENFcXVhbChzZWxmLCBhLCBiKToKKyAgICAgICAgZXBzID0gMUUtNworICAgICAgICBpZiBhYnMoYS5yZWFsIC0gYlswXSkgPiBlcHMgb3IgYWJzKGEuaW1hZyAtIGJbMV0pID4gZXBzOgorICAgICAgICAgICAgc2VsZi5mYWlsKChhICxiKSkKKworICAgIGRlZiB0ZXN0X3JlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Q0VxdWFsKHJlY3QoMCwgMCksICgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRDRXF1YWwocmVjdCgxLCAwKSwgKDEuLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRDRXF1YWwocmVjdCgxLCAtcGkpLCAoLTEuLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRDRXF1YWwocmVjdCgxLCBwaS8yKSwgKDAsIDEuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRDRXF1YWwocmVjdCgxLCAtcGkvMiksICgwLCAtMS4pKQorCisgICAgZGVmIHRlc3RfaXNuYW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY21hdGguaXNuYW4oMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY21hdGguaXNuYW4oMWopKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNtYXRoLmlzbmFuKElORikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc25hbihOQU4pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNuYW4oY29tcGxleChOQU4sIDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKGNvbXBsZXgoMCwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc25hbihjb21wbGV4KE5BTiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc25hbihjb21wbGV4KE5BTiwgSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc25hbihjb21wbGV4KElORiwgTkFOKSkpCisKKyAgICBkZWYgdGVzdF9pc2luZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc2luZigxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc2luZigxaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY21hdGguaXNpbmYoTkFOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzaW5mKElORikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc2luZihjb21wbGV4KElORiwgMCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoY29tcGxleCgwLCBJTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzaW5mKGNvbXBsZXgoSU5GLCBJTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzaW5mKGNvbXBsZXgoTkFOLCBJTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzaW5mKGNvbXBsZXgoSU5GLCBOQU4pKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KENNYXRoVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NtZC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NtZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDkyNThiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY21kLnB5CkBAIC0wLDAgKzEsMjQ2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyIiIgorVGVzdCBzY3JpcHQgZm9yIHRoZSAnY21kJyBtb2R1bGUKK09yaWdpbmFsIGJ5IE1pY2hhZWwgU2NobmVpZGVyCisiIiIKKworCitpbXBvcnQgY21kCitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHJlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBTdHJpbmdJTworCitjbGFzcyBzYW1wbGVjbWRjbGFzcyhjbWQuQ21kKToKKyAgICAiIiIKKyAgICBJbnN0YW5jZSB0aGUgc2FtcGxlY2xhc3M6CisgICAgPj4+IG15Y21kID0gc2FtcGxlY21kY2xhc3MoKQorCisgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIHBhcnNlbGluZSgpOgorICAgID4+PiBteWNtZC5wYXJzZWxpbmUoIiIpCisgICAgKE5vbmUsIE5vbmUsICcnKQorICAgID4+PiBteWNtZC5wYXJzZWxpbmUoIj8iKQorICAgICgnaGVscCcsICcnLCAnaGVscCAnKQorICAgID4+PiBteWNtZC5wYXJzZWxpbmUoIj9oZWxwIikKKyAgICAoJ2hlbHAnLCAnaGVscCcsICdoZWxwIGhlbHAnKQorICAgID4+PiBteWNtZC5wYXJzZWxpbmUoIiEiKQorICAgICgnc2hlbGwnLCAnJywgJ3NoZWxsICcpCisgICAgPj4+IG15Y21kLnBhcnNlbGluZSgiIWNvbW1hbmQiKQorICAgICgnc2hlbGwnLCAnY29tbWFuZCcsICdzaGVsbCBjb21tYW5kJykKKyAgICA+Pj4gbXljbWQucGFyc2VsaW5lKCJmdW5jIikKKyAgICAoJ2Z1bmMnLCAnJywgJ2Z1bmMnKQorICAgID4+PiBteWNtZC5wYXJzZWxpbmUoImZ1bmMgYXJnMSIpCisgICAgKCdmdW5jJywgJ2FyZzEnLCAnZnVuYyBhcmcxJykKKworCisgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIG9uZWNtZCgpOgorICAgID4+PiBteWNtZC5vbmVjbWQoIiIpCisgICAgPj4+IG15Y21kLm9uZWNtZCgiYWRkIDQgNSIpCisgICAgOQorICAgID4+PiBteWNtZC5vbmVjbWQoIiIpCisgICAgOQorICAgID4+PiBteWNtZC5vbmVjbWQoInRlc3QiKQorICAgICoqKiBVbmtub3duIHN5bnRheDogdGVzdAorCisgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIGVtcHR5bGluZSgpOgorICAgID4+PiBteWNtZC5lbXB0eWxpbmUoKQorICAgICoqKiBVbmtub3duIHN5bnRheDogdGVzdAorCisgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIGRlZmF1bHQoKToKKyAgICA+Pj4gbXljbWQuZGVmYXVsdCgiZGVmYXVsdCIpCisgICAgKioqIFVua25vd24gc3ludGF4OiBkZWZhdWx0CisKKyAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gY29tcGxldGVkZWZhdWx0KCk6CisgICAgPj4+IG15Y21kLmNvbXBsZXRlZGVmYXVsdCgpCisgICAgVGhpcyBpcyB0aGUgY29tcGxldGVkZWZhdWx0IG1ldGhvZGUKKyAgICA+Pj4gbXljbWQuY29tcGxldGVuYW1lcygiYSIpCisgICAgWydhZGQnXQorCisgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlbmFtZXMoKToKKyAgICA+Pj4gbXljbWQuY29tcGxldGVuYW1lcygiMTIiKQorICAgIFtdCisgICAgPj4+IG15Y21kLmNvbXBsZXRlbmFtZXMoImhlbHAiKQorICAgIFsnaGVscCddCisKKyAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gY29tcGxldGVfaGVscCgpOgorICAgID4+PiBteWNtZC5jb21wbGV0ZV9oZWxwKCJhIikKKyAgICBbJ2FkZCddCisgICAgPj4+IG15Y21kLmNvbXBsZXRlX2hlbHAoImhlIikKKyAgICBbJ2hlbHAnXQorICAgID4+PiBteWNtZC5jb21wbGV0ZV9oZWxwKCIxMiIpCisgICAgW10KKyAgICA+Pj4gc29ydGVkKG15Y21kLmNvbXBsZXRlX2hlbHAoIiIpKQorICAgIFsnYWRkJywgJ2V4aXQnLCAnaGVscCcsICdzaGVsbCddCisKKyAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gZG9faGVscCgpOgorICAgID4+PiBteWNtZC5kb19oZWxwKCJ0ZXN0ZXQiKQorICAgICoqKiBObyBoZWxwIG9uIHRlc3RldAorICAgID4+PiBteWNtZC5kb19oZWxwKCJhZGQiKQorICAgIGhlbHAgdGV4dCBmb3IgYWRkCisgICAgPj4+IG15Y21kLm9uZWNtZCgiaGVscCBhZGQiKQorICAgIGhlbHAgdGV4dCBmb3IgYWRkCisgICAgPj4+IG15Y21kLmRvX2hlbHAoIiIpCisgICAgPEJMQU5LTElORT4KKyAgICBEb2N1bWVudGVkIGNvbW1hbmRzICh0eXBlIGhlbHAgPHRvcGljPik6CisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGFkZCAgaGVscAorICAgIDxCTEFOS0xJTkU+CisgICAgVW5kb2N1bWVudGVkIGNvbW1hbmRzOgorICAgID09PT09PT09PT09PT09PT09PT09PT0KKyAgICBleGl0ICBzaGVsbAorICAgIDxCTEFOS0xJTkU+CisKKyAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gcHJpbnRfdG9waWNzKCk6CisgICAgPj4+IG15Y21kLnByaW50X3RvcGljcygiaGVhZGVyIiwgWyJjb21tYW5kMSIsICJjb21tYW5kMiJdLCAyICwxMCkKKyAgICBoZWFkZXIKKyAgICA9PT09PT0KKyAgICBjb21tYW5kMQorICAgIGNvbW1hbmQyCisgICAgPEJMQU5LTElORT4KKworICAgIFRlc3QgZm9yIHRoZSBmdW5jdGlvbiBjb2x1bW5pemUoKToKKyAgICA+Pj4gbXljbWQuY29sdW1uaXplKFtzdHIoaSkgZm9yIGkgaW4geHJhbmdlKDIwKV0pCisgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgMTAgIDExICAxMiAgMTMgIDE0ICAxNSAgMTYgIDE3ICAxOCAgMTkKKyAgICA+Pj4gbXljbWQuY29sdW1uaXplKFtzdHIoaSkgZm9yIGkgaW4geHJhbmdlKDIwKV0sIDEwKQorICAgIDAgIDcgICAxNAorICAgIDEgIDggICAxNQorICAgIDIgIDkgICAxNgorICAgIDMgIDEwICAxNworICAgIDQgIDExICAxOAorICAgIDUgIDEyICAxOQorICAgIDYgIDEzCisKKyAgICBUaGlzIGlzIGEgaW50ZXJhY3RpdmUgdGVzdCwgcHV0IHNvbWUgY29tbWFuZHMgaW4gdGhlIGNtZHF1ZXVlIGF0dHJpYnV0ZQorICAgIGFuZCBsZXQgaXQgZXhlY3V0ZQorICAgIFRoaXMgdGVzdCBpbmNsdWRlcyB0aGUgcHJlbG9vcCgpLCBwb3N0bG9vcCgpLCBkZWZhdWx0KCksIGVtcHR5bGluZSgpLAorICAgIHBhcnNlbGluZSgpLCBkb19oZWxwKCkgZnVuY3Rpb25zCisgICAgPj4+IG15Y21kLnVzZV9yYXdpbnB1dD0wCisgICAgPj4+IG15Y21kLmNtZHF1ZXVlPVsiIiwgImFkZCIsICJhZGQgNCA1IiwgImhlbHAiLCAiaGVscCBhZGQiLCJleGl0Il0KKyAgICA+Pj4gbXljbWQuY21kbG9vcCgpCisgICAgSGVsbG8gZnJvbSBwcmVsb29wCisgICAgaGVscCB0ZXh0IGZvciBhZGQKKyAgICAqKiogaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzCisgICAgOQorICAgIDxCTEFOS0xJTkU+CisgICAgRG9jdW1lbnRlZCBjb21tYW5kcyAodHlwZSBoZWxwIDx0b3BpYz4pOgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBhZGQgIGhlbHAKKyAgICA8QkxBTktMSU5FPgorICAgIFVuZG9jdW1lbnRlZCBjb21tYW5kczoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09CisgICAgZXhpdCAgc2hlbGwKKyAgICA8QkxBTktMSU5FPgorICAgIGhlbHAgdGV4dCBmb3IgYWRkCisgICAgSGVsbG8gZnJvbSBwb3N0bG9vcAorICAgICIiIgorCisgICAgZGVmIHByZWxvb3Aoc2VsZik6CisgICAgICAgIHByaW50ICJIZWxsbyBmcm9tIHByZWxvb3AiCisKKyAgICBkZWYgcG9zdGxvb3Aoc2VsZik6CisgICAgICAgIHByaW50ICJIZWxsbyBmcm9tIHBvc3Rsb29wIgorCisgICAgZGVmIGNvbXBsZXRlZGVmYXVsdChzZWxmLCAqaWdub3JlZCk6CisgICAgICAgIHByaW50ICJUaGlzIGlzIHRoZSBjb21wbGV0ZWRlZmF1bHQgbWV0aG9kZSIKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgY29tcGxldGVfY29tbWFuZChzZWxmKToKKyAgICAgICAgcHJpbnQgImNvbXBsZXRlIGNvbW1hbmQiCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGRvX3NoZWxsKHNlbGYsIHMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZG9fYWRkKHNlbGYsIHMpOgorICAgICAgICBsID0gcy5zcGxpdCgpCisgICAgICAgIGlmIGxlbihsKSAhPSAyOgorICAgICAgICAgICAgcHJpbnQgIioqKiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbCA9IFtpbnQoaSkgZm9yIGkgaW4gbF0KKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiKioqIGFyZ3VtZW50cyBzaG91bGQgYmUgbnVtYmVycyIKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwcmludCBsWzBdK2xbMV0KKworICAgIGRlZiBoZWxwX2FkZChzZWxmKToKKyAgICAgICAgcHJpbnQgImhlbHAgdGV4dCBmb3IgYWRkIgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBkb19leGl0KHNlbGYsIGFyZyk6CisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgVGVzdEFsdGVybmF0ZUlucHV0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIHNpbXBsZWNtZChjbWQuQ21kKToKKworICAgICAgICBkZWYgZG9fcHJpbnQoc2VsZiwgYXJncyk6CisgICAgICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCBhcmdzCisKKyAgICAgICAgZGVmIGRvX0VPRihzZWxmLCBhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKworICAgIGNsYXNzIHNpbXBsZWNtZDIoc2ltcGxlY21kKToKKworICAgICAgICBkZWYgZG9fRU9GKHNlbGYsIGFyZ3MpOgorICAgICAgICAgICAgcHJpbnQgPj5zZWxmLnN0ZG91dCwgJyoqKiBVbmtub3duIHN5bnRheDogRU9GJworICAgICAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgZGVmIHRlc3RfZmlsZV93aXRoX21pc3NpbmdfZmluYWxfbmwoc2VsZik6CisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oInByaW50IHRlc3RcbnByaW50IHRlc3QyIikKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBjbWQgPSBzZWxmLnNpbXBsZWNtZChzdGRpbj1pbnB1dCwgc3Rkb3V0PW91dHB1dCkKKyAgICAgICAgY21kLnVzZV9yYXdpbnB1dCA9IEZhbHNlCisgICAgICAgIGNtZC5jbWRsb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICgiKENtZCkgdGVzdFxuIgorICAgICAgICAgICAgICIoQ21kKSB0ZXN0MlxuIgorICAgICAgICAgICAgICIoQ21kKSAiKSkKKworCisgICAgZGVmIHRlc3RfaW5wdXRfcmVzZXRfYXRfRU9GKHNlbGYpOgorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCJwcmludCB0ZXN0XG5wcmludCB0ZXN0MiIpCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgY21kID0gc2VsZi5zaW1wbGVjbWQyKHN0ZGluPWlucHV0LCBzdGRvdXQ9b3V0cHV0KQorICAgICAgICBjbWQudXNlX3Jhd2lucHV0ID0gRmFsc2UKKyAgICAgICAgY21kLmNtZGxvb3AoKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgKCIoQ21kKSB0ZXN0XG4iCisgICAgICAgICAgICAgIihDbWQpIHRlc3QyXG4iCisgICAgICAgICAgICAgIihDbWQpICoqKiBVbmtub3duIHN5bnRheDogRU9GXG4iKSkKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygicHJpbnQgXG5cbiIpCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgY21kLnN0ZGluID0gaW5wdXQKKyAgICAgICAgY21kLnN0ZG91dCA9IG91dHB1dAorICAgICAgICBjbWQuY21kbG9vcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwob3V0cHV0LmdldHZhbHVlKCksCisgICAgICAgICAgICAoIihDbWQpIFxuIgorICAgICAgICAgICAgICIoQ21kKSBcbiIKKyAgICAgICAgICAgICAiKENtZCkgKioqIFVua25vd24gc3ludGF4OiBFT0ZcbiIpKQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfY21kCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfY21kLCB2ZXJib3NlKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEFsdGVybmF0ZUlucHV0KQorCitkZWYgdGVzdF9jb3ZlcmFnZShjb3ZlcmRpcik6CisgICAgdHJhY2UgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndHJhY2UnKQorICAgIHRyYWNlcj10cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXgsXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPTAsIGNvdW50PTEpCisgICAgdHJhY2VyLnJ1bigncmVsb2FkKGNtZCk7dGVzdF9tYWluKCknKQorICAgIHI9dHJhY2VyLnJlc3VsdHMoKQorICAgIHByaW50ICJXcml0aW5nIGNvdmVyYWdlIHJlc3VsdHMuLi4iCisgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsIGNvdmVyZGlyPWNvdmVyZGlyKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGlmICItYyIgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHRlc3RfY292ZXJhZ2UoJy90bXAvY21kLmNvdmVyJykKKyAgICBlbGlmICItaSIgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHNhbXBsZWNtZGNsYXNzKCkuY21kbG9vcCgpCisgICAgZWxzZToKKyAgICAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmMjZkOQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CkBAIC0wLDAgKzEsMTQzIEBACisjIFRlc3RzIGludm9jYXRpb24gb2YgdGhlIGludGVycHJldGVyIHdpdGggdmFyaW91cyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisjIEFsbCB0ZXN0cyBhcmUgZXhlY3V0ZWQgd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaWdub3JlZAorIyBTZWUgdGVzdF9jbWRfbGluZV9zY3JpcHQucHkgZm9yIHRlc3Rpbmcgb2Ygc2NyaXB0IGV4ZWN1dGlvbgorCitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0ICgKKyAgICBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUsIHNwYXduX3B5dGhvbiwga2lsbF9weXRob24sCisgICAgcHl0aG9uX2V4aXRfY29kZQorKQorCisKK2NsYXNzIENtZExpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc3RhcnRfcHl0aG9uKHNlbGYsICphcmdzKToKKyAgICAgICAgcCA9IHNwYXduX3B5dGhvbigqYXJncykKKyAgICAgICAgcmV0dXJuIGtpbGxfcHl0aG9uKHApCisKKyAgICBkZWYgZXhpdF9jb2RlKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIHB5dGhvbl9leGl0X2NvZGUoKmFyZ3MpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcmllcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmV4aXRfY29kZSgnLicpLCAwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZXhpdF9jb2RlKCc8IC4nKSwgMCkKKworICAgIGRlZiB2ZXJpZnlfdmFsaWRfZmxhZyhzZWxmLCBjbWRfbGluZSk6CisgICAgICAgIGRhdGEgPSBzZWxmLnN0YXJ0X3B5dGhvbihjbWRfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEgPT0gJycgb3IgZGF0YS5lbmRzd2l0aCgnXG4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVHJhY2ViYWNrJywgZGF0YSkKKworICAgIGRlZiB0ZXN0X29wdGltaXplKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctTycpCisgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1PTycpCisKKyAgICBkZWYgdGVzdF9xKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctUW9sZCcpCisgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1RbmV3JykKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLVF3YXJuJykKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLVF3YXJuYWxsJykKKworICAgIGRlZiB0ZXN0X3NpdGVfZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLVMnKQorCisgICAgZGVmIHRlc3RfdXNhZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3VzYWdlJywgc2VsZi5zdGFydF9weXRob24oJy1oJykpCisKKyAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgorICAgICAgICB2ZXJzaW9uID0gJ1B5dGhvbiAlZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zdGFydF9weXRob24oJy1WJykuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKKworICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGUoc2VsZik6CisgICAgICAgICMgVGVzdCBleHBlY3RlZCBvcGVyYXRpb24gb2YgdGhlICctbScgc3dpdGNoCisgICAgICAgICMgU3dpdGNoIG5lZWRzIGFuIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5leGl0X2NvZGUoJy1tJyksIDApCisgICAgICAgICMgQ2hlY2sgd2UgZ2V0IGFuIGVycm9yIGZvciBhIG5vbmV4aXN0ZW50IG1vZHVsZQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKAorICAgICAgICAgICAgc2VsZi5leGl0X2NvZGUoJy1tJywgJ2Zub3JkNDM1MjB4eXonKSwKKyAgICAgICAgICAgIDApCisgICAgICAgICMgQ2hlY2sgdGhlIHJ1bnB5IG1vZHVsZSBhbHNvIGdpdmVzIGFuIGVycm9yIGZvcgorICAgICAgICAjIGEgbm9uZXhpc3RlbnQgbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoCisgICAgICAgICAgICBzZWxmLmV4aXRfY29kZSgnLW0nLCAncnVucHknLCAnZm5vcmQ0MzUyMHh5eicpLAorICAgICAgICAgICAgMCkKKyAgICAgICAgIyBBbGwgZ29vZCBpZiBtb2R1bGUgaXMgbG9jYXRlZCBhbmQgcnVuIHN1Y2Nlc3NmdWxseQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5leGl0X2NvZGUoJy1tJywgJ3RpbWVpdCcsICctbicsICcxJyksCisgICAgICAgICAgICAwKQorCisgICAgZGVmIHRlc3RfcnVuX21vZHVsZV9idWcxNzY0NDA3KHNlbGYpOgorICAgICAgICAjIC1tIGFuZCAtaSBuZWVkIHRvIHBsYXkgd2VsbCB0b2dldGhlcgorICAgICAgICAjIFJ1bnMgdGhlIHRpbWVpdCBtb2R1bGUgYW5kIGNoZWNrcyB0aGUgX19tYWluX18KKyAgICAgICAgIyBuYW1lc3BhY2UgaGFzIGJlZW4gcG9wdWxhdGVkIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgcCA9IHNwYXduX3B5dGhvbignLWknLCAnLW0nLCAndGltZWl0JywgJy1uJywgJzEnKQorICAgICAgICBwLnN0ZGluLndyaXRlKCdUaW1lclxuJykKKyAgICAgICAgcC5zdGRpbi53cml0ZSgnZXhpdCgpXG4nKQorICAgICAgICBkYXRhID0ga2lsbF9weXRob24ocCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuc3RhcnRzd2l0aCgnMSBsb29wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19fbWFpbl9fLlRpbWVyJywgZGF0YSkKKworICAgIGRlZiB0ZXN0X3J1bl9jb2RlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZXhwZWN0ZWQgb3BlcmF0aW9uIG9mIHRoZSAnLWMnIHN3aXRjaAorICAgICAgICAjIFN3aXRjaCBuZWVkcyBhbiBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZXhpdF9jb2RlKCctYycpLCAwKQorICAgICAgICAjIENoZWNrIHdlIGdldCBhbiBlcnJvciBmb3IgYW4gdW5jYXVnaHQgZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoCisgICAgICAgICAgICBzZWxmLmV4aXRfY29kZSgnLWMnLCAncmFpc2UgRXhjZXB0aW9uJyksCisgICAgICAgICAgICAwKQorICAgICAgICAjIEFsbCBnb29kIGlmIGV4ZWN1dGlvbiBpcyBzdWNjZXNzZnVsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLmV4aXRfY29kZSgnLWMnLCAncGFzcycpLAorICAgICAgICAgICAgMCkKKworICAgIGRlZiB0ZXN0X2hhc2hfcmFuZG9taXphdGlvbihzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCAtUiBlbmFibGVzIGhhc2ggcmFuZG9taXphdGlvbjoKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLVInKQorICAgICAgICBoYXNoZXMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIGNvZGUgPSAncHJpbnQoaGFzaCgic3BhbSIpKScKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLnN0YXJ0X3B5dGhvbignLVInLCAnLWMnLCBjb2RlKQorICAgICAgICAgICAgaGFzaGVzLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGhhc2hlc1swXSwgaGFzaGVzWzFdKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgc3lzLmZsYWdzIGNvbnRhaW5zIGhhc2hfcmFuZG9taXphdGlvbgorICAgICAgICBjb2RlID0gJ2ltcG9ydCBzeXM7IHByaW50IHN5cy5mbGFncycKKyAgICAgICAgZGF0YSA9IHNlbGYuc3RhcnRfcHl0aG9uKCctUicsICctYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnaGFzaF9yYW5kb21pemF0aW9uPTEnIGluIGRhdGEpCisKKyAgICBkZWYgdGVzdF9kZWxfX19tYWluX18oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE1MDAxOiBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncygpIGRpZCBjcmFzaCBiZWNhdXNlIGl0IGtlcHQgYQorICAgICAgICAjIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgZGljdCBvZiBfX21haW5fXyBtb2R1bGUgYW5kIGxhdGVyIG1vZGlmeQorICAgICAgICAjIHRoZSBkaWN0IHdoZXJlYXMgdGhlIG1vZHVsZSB3YXMgZGVzdHJveWVkCisgICAgICAgIGZpbGVuYW1lID0gdGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0LnRlc3Rfc3VwcG9ydC51bmxpbmssIGZpbGVuYW1lKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgc2NyaXB0OgorICAgICAgICAgICAgcHJpbnQgPj5zY3JpcHQsICJpbXBvcnQgc3lzIgorICAgICAgICAgICAgcHJpbnQgPj5zY3JpcHQsICJkZWwgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10iCisgICAgICAgIGFzc2VydF9weXRob25fb2soZmlsZW5hbWUpCisKKyAgICBkZWYgdGVzdF91bmtub3duX29wdGlvbnMoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgnLUUnLCAnLXonKQorICAgICAgICBzZWxmLmFzc2VydEluKGInVW5rbm93biBvcHRpb246IC16JywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5zcGxpdGxpbmVzKCkuY291bnQoYidVbmtub3duIG9wdGlvbjogLXonKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG91dCkKKyAgICAgICAgIyBBZGQgIndpdGhvdXQ9Jy1FJyIgdG8gcHJldmVudCBfYXNzZXJ0X3B5dGhvbiB0byBhcHBlbmQgLUUKKyAgICAgICAgIyB0byBlbnZfdmFycyBhbmQgY2hhbmdlIHRoZSBvdXRwdXQgb2Ygc3RkZXJyCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgnLXonLCB3aXRob3V0PSctRScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmtub3duIG9wdGlvbjogLXonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnNwbGl0bGluZXMoKS5jb3VudChiJ1Vua25vd24gb3B0aW9uOiAteicpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgb3V0KQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1hJywgJy16Jywgd2l0aG91dD0nLUUnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInVW5rbm93biBvcHRpb246IC1hJywgZXJyKQorICAgICAgICAjIG9ubHkgdGhlIGZpcnN0IHVua25vd24gb3B0aW9uIGlzIHJlcG9ydGVkCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidVbmtub3duIG9wdGlvbjogLXonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnNwbGl0bGluZXMoKS5jb3VudChiJ1Vua25vd24gb3B0aW9uOiAtYScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgb3V0KQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ21kTGluZVRlc3QpCisgICAgdGVzdC50ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA1MjI3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CkBAIC0wLDAgKzEsMjI5IEBACisjIFRlc3RzIGNvbW1hbmQgbGluZSBleGVjdXRpb24gb2Ygc2NyaXB0cworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IChydW5fcHl0aG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2RpciwgbWFrZV9zY3JpcHQsIGNvbXBpbGVfc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUsIG1ha2VfcGtnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3ppcF9zY3JpcHQsIG1ha2VfemlwX3BrZykKKwordmVyYm9zZSA9IHRlc3QudGVzdF9zdXBwb3J0LnZlcmJvc2UKKworCitleGFtcGxlX2FyZ3MgPSBbJ3Rlc3QxJywgJ3Rlc3QyJywgJ3Rlc3QzJ10KKwordGVzdF9zb3VyY2UgPSAiIiJcCisjIFNjcmlwdCBtYXkgYmUgcnVuIHdpdGggb3B0aW1pc2F0aW9uIGVuYWJsZWQsIHNvIGRvbid0IHJlbHkgb24gYXNzZXJ0CisjIHN0YXRlbWVudHMgYmVpbmcgZXhlY3V0ZWQKK2RlZiBhc3NlcnRFcXVhbChsaHMsIHJocyk6CisgICAgaWYgbGhzICE9IHJoczoKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJyVyICE9ICVyJyAlIChsaHMsIHJocykpCitkZWYgYXNzZXJ0SWRlbnRpY2FsKGxocywgcmhzKToKKyAgICBpZiBsaHMgaXMgbm90IHJoczoKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJyVyIGlzIG5vdCAlcicgJSAobGhzLCByaHMpKQorIyBDaGVjayBiYXNpYyBjb2RlIGV4ZWN1dGlvbgorcmVzdWx0ID0gWydUb3AgbGV2ZWwgYXNzaWdubWVudCddCitkZWYgZigpOgorICAgIHJlc3VsdC5hcHBlbmQoJ0xvd2VyIGxldmVsIHJlZmVyZW5jZScpCitmKCkKK2Fzc2VydEVxdWFsKHJlc3VsdCwgWydUb3AgbGV2ZWwgYXNzaWdubWVudCcsICdMb3dlciBsZXZlbCByZWZlcmVuY2UnXSkKKyMgQ2hlY2sgcG9wdWxhdGlvbiBvZiBtYWdpYyB2YXJpYWJsZXMKK2Fzc2VydEVxdWFsKF9fbmFtZV9fLCAnX19tYWluX18nKQorcHJpbnQgJ19fZmlsZV9fPT0lcicgJSBfX2ZpbGVfXworcHJpbnQgJ19fcGFja2FnZV9fPT0lcicgJSBfX3BhY2thZ2VfXworIyBDaGVjayB0aGUgc3lzIG1vZHVsZQoraW1wb3J0IHN5cworYXNzZXJ0SWRlbnRpY2FsKGdsb2JhbHMoKSwgc3lzLm1vZHVsZXNbX19uYW1lX19dLl9fZGljdF9fKQorcHJpbnQgJ3N5cy5hcmd2WzBdPT0lcicgJSBzeXMuYXJndlswXQorIiIiCisKK2RlZiBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZT10ZXN0X3NvdXJjZSk6CisgICAgcmV0dXJuIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQorCitkZWYgX21ha2VfdGVzdF96aXBfcGtnKHppcF9kaXIsIHppcF9iYXNlbmFtZSwgcGtnX25hbWUsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXRlc3Rfc291cmNlLCBkZXB0aD0xKToKKyAgICByZXR1cm4gbWFrZV96aXBfcGtnKHppcF9kaXIsIHppcF9iYXNlbmFtZSwgcGtnX25hbWUsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgZGVwdGgpCisKKyMgVGhlcmUncyBubyBlYXN5IHdheSB0byBwYXNzIHRoZSBzY3JpcHQgZGlyZWN0b3J5IGluIHRvIGdldAorIyAtbSB0byB3b3JrIChhdm9pZGluZyB0aGF0IGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtYWtpbmcKKyMgZGlyZWN0b3JpZXMgYW5kIHppcGZpbGVzIGV4ZWN1dGFibGUhKQorIyBTbyB3ZSBmYWtlIGl0IGZvciB0ZXN0aW5nIHB1cnBvc2VzIHdpdGggYSBjdXN0b20gbGF1bmNoIHNjcmlwdAorbGF1bmNoX3NvdXJjZSA9ICIiIlwKK2ltcG9ydCBzeXMsIG9zLnBhdGgsIHJ1bnB5CitzeXMucGF0aC5pbnNlcnQoMCwgJXMpCitydW5weS5fcnVuX21vZHVsZV9hc19tYWluKCVyKQorIiIiCisKK2RlZiBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgbW9kdWxlX25hbWUsIHBhdGg9Tm9uZSk6CisgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICBwYXRoID0gIm9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykiCisgICAgZWxzZToKKyAgICAgICAgcGF0aCA9IHJlcHIocGF0aCkKKyAgICBzb3VyY2UgPSBsYXVuY2hfc291cmNlICUgKHBhdGgsIG1vZHVsZV9uYW1lKQorICAgIHJldHVybiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKKworY2xhc3MgQ21kTGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBfY2hlY2tfc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwLCBleHBlY3RlZF9wYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbWRfbGluZV9zd2l0Y2hlcyk6CisgICAgICAgIHJ1bl9hcmdzID0gY21kX2xpbmVfc3dpdGNoZXMgKyAoc2NyaXB0X25hbWUsKQorICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBydW5fcHl0aG9uKCpydW5fYXJncykKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdPdXRwdXQgZnJvbSB0ZXN0IHNjcmlwdCAlcjonICUgc2NyaXB0X25hbWUKKyAgICAgICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0X2NvZGUsIDApCisgICAgICAgIHByaW50ZWRfZmlsZSA9ICdfX2ZpbGVfXz09JXInICUgZXhwZWN0ZWRfZmlsZQorICAgICAgICBwcmludGVkX2FyZ3YwID0gJ3N5cy5hcmd2WzBdPT0lcicgJSBleHBlY3RlZF9hcmd2MAorICAgICAgICBwcmludGVkX3BhY2thZ2UgPSAnX19wYWNrYWdlX189PSVyJyAlIGV4cGVjdGVkX3BhY2thZ2UKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdFeHBlY3RlZCBvdXRwdXQ6JworICAgICAgICAgICAgcHJpbnQgcHJpbnRlZF9maWxlCisgICAgICAgICAgICBwcmludCBwcmludGVkX3BhY2thZ2UKKyAgICAgICAgICAgIHByaW50IHByaW50ZWRfYXJndjAKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwcmludGVkX2ZpbGUsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHJpbnRlZF9wYWNrYWdlLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEluKHByaW50ZWRfYXJndjAsIGRhdGEpCisKKyAgICBkZWYgX2NoZWNrX2ltcG9ydF9lcnJvcihzZWxmLCBzY3JpcHRfbmFtZSwgZXhwZWN0ZWRfbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbWRfbGluZV9zd2l0Y2hlcyk6CisgICAgICAgIHJ1bl9hcmdzID0gY21kX2xpbmVfc3dpdGNoZXMgKyAoc2NyaXB0X25hbWUsKQorICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBydW5fcHl0aG9uKCpydW5fYXJncykKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdPdXRwdXQgZnJvbSB0ZXN0IHNjcmlwdCAlcjonICUgc2NyaXB0X25hbWUKKyAgICAgICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgICAgIHByaW50ICdFeHBlY3RlZCBvdXRwdXQ6ICVyJyAlIGV4cGVjdGVkX21zZworICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkX21zZywgZGF0YSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX3NjcmlwdChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zY3JpcHRfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0JykKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChjb21waWxlZF9uYW1lLCBjb21waWxlZF9uYW1lLCBjb21waWxlZF9uYW1lLCBOb25lKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfbmFtZSwgc2NyaXB0X2RpciwgJycpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcnlfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIsIGNvbXBpbGVkX25hbWUsIHNjcmlwdF9kaXIsICcnKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHNjcmlwdF9kaXIKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ltcG9ydF9lcnJvcihzY3JpcHRfZGlyLCBtc2cpCisKKyAgICBkZWYgdGVzdF96aXBmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJykKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgcnVuX25hbWUsIHppcF9uYW1lLCAnJykKKworICAgIGRlZiB0ZXN0X3ppcGZpbGVfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIGNvbXBpbGVkX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsIHJ1bl9uYW1lLCB6aXBfbmFtZSwgJycpCisKKyAgICBkZWYgdGVzdF96aXBmaWxlX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ25vdF9tYWluJykKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHppcF9uYW1lCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IoemlwX25hbWUsIG1zZykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdzY3JpcHQnKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cuc2NyaXB0JykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgc2NyaXB0X25hbWUsIHNjcmlwdF9uYW1lLCAndGVzdF9wa2cnKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2VfaW5femlwZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcF9wa2coc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgJ3Rlc3RfcGtnJywgJ3NjcmlwdCcpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy5zY3JpcHQnLCB6aXBfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgcnVuX25hbWUsIHJ1bl9uYW1lLCAndGVzdF9wa2cnKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3N1YnBhY2thZ2VfaW5femlwZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcF9wa2coc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgJ3Rlc3RfcGtnJywgJ3NjcmlwdCcsIGRlcHRoPTIpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy50ZXN0X3BrZy5zY3JpcHQnLCB6aXBfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgcnVuX25hbWUsIHJ1bl9uYW1lLCAndGVzdF9wa2cudGVzdF9wa2cnKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBzY3JpcHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgJ3Rlc3RfcGtnJykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJykKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgY29tcGlsZWRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lLCAndGVzdF9wa2cnKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgbXNnID0gKCIndGVzdF9wa2cnIGlzIGEgcGFja2FnZSBhbmQgY2Fubm90ICIKKyAgICAgICAgICAgICAgICAgICAiYmUgZGlyZWN0bHkgZXhlY3V0ZWQiKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfaW1wb3J0X2Vycm9yKGxhdW5jaF9uYW1lLCBtc2cpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgbWFpbl9kaXIgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ19fbWFpbl9fJykKKyAgICAgICAgICAgIG1ha2VfcGtnKG1haW5fZGlyKQorICAgICAgICAgICAgbXNnID0gKCJDYW5ub3QgdXNlIHBhY2thZ2UgYXMgX19tYWluX18gbW9kdWxlOyAiCisgICAgICAgICAgICAgICAgICAgIid0ZXN0X3BrZycgaXMgYSBwYWNrYWdlIGFuZCBjYW5ub3QgIgorICAgICAgICAgICAgICAgICAgICJiZSBkaXJlY3RseSBleGVjdXRlZCIpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IobGF1bmNoX25hbWUsIG1zZykKKworICAgIGRlZiB0ZXN0X2Rhc2hfbV9lcnJvcl9jb2RlX2lzX29uZShzZWxmKToKKyAgICAgICAgIyBJZiBhIG1vZHVsZSBpcyBpbnZva2VkIHdpdGggdGhlIC1tIGNvbW1hbmQgbGluZSBmbGFnCisgICAgICAgICMgYW5kIHJlc3VsdHMgaW4gYW4gZXJyb3IgdGhhdCB0aGUgcmV0dXJuIGNvZGUgdG8gdGhlCisgICAgICAgICMgc2hlbGwgaXMgJzEnCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ290aGVyJywgImlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6IHJhaXNlIFZhbHVlRXJyb3IiKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICd0ZXN0X3BrZy5vdGhlcicsICpleGFtcGxlX2FyZ3MpCisgICAgICAgICAgICBpZiB2ZXJib3NlID4gMToKKyAgICAgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ21kTGluZVRlc3QpCisgICAgdGVzdC50ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YWRmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlLnB5CkBAIC0wLDAgKzEsMTQ3IEBACisiIiJUaGlzIG1vZHVsZSBpbmNsdWRlcyB0ZXN0cyBvZiB0aGUgY29kZSBvYmplY3QgcmVwcmVzZW50YXRpb24uCisKKz4+PiBkZWYgZih4KToKKy4uLiAgICAgZGVmIGcoeSk6CisuLi4gICAgICAgICByZXR1cm4geCArIHkKKy4uLiAgICAgcmV0dXJuIGcKKy4uLgorCis+Pj4gZHVtcChmLmZ1bmNfY29kZSkKK25hbWU6IGYKK2FyZ2NvdW50OiAxCituYW1lczogKCkKK3Zhcm5hbWVzOiAoJ3gnLCAnZycpCitjZWxsdmFyczogKCd4JywpCitmcmVldmFyczogKCkKK25sb2NhbHM6IDIKK2ZsYWdzOiAzCitjb25zdHM6ICgnTm9uZScsICc8Y29kZSBvYmplY3QgZz4nKQorCis+Pj4gZHVtcChmKDQpLmZ1bmNfY29kZSkKK25hbWU6IGcKK2FyZ2NvdW50OiAxCituYW1lczogKCkKK3Zhcm5hbWVzOiAoJ3knLCkKK2NlbGx2YXJzOiAoKQorZnJlZXZhcnM6ICgneCcsKQorbmxvY2FsczogMQorZmxhZ3M6IDE5Citjb25zdHM6ICgnTm9uZScsKQorCis+Pj4gZGVmIGgoeCwgeSk6CisuLi4gICAgIGEgPSB4ICsgeQorLi4uICAgICBiID0geCAtIHkKKy4uLiAgICAgYyA9IGEgKiBiCisuLi4gICAgIHJldHVybiBjCisuLi4KKz4+PiBkdW1wKGguZnVuY19jb2RlKQorbmFtZTogaAorYXJnY291bnQ6IDIKK25hbWVzOiAoKQordmFybmFtZXM6ICgneCcsICd5JywgJ2EnLCAnYicsICdjJykKK2NlbGx2YXJzOiAoKQorZnJlZXZhcnM6ICgpCitubG9jYWxzOiA1CitmbGFnczogNjcKK2NvbnN0czogKCdOb25lJywpCisKKz4+PiBkZWYgYXR0cnMob2JqKToKKy4uLiAgICAgcHJpbnQgb2JqLmF0dHIxCisuLi4gICAgIHByaW50IG9iai5hdHRyMgorLi4uICAgICBwcmludCBvYmouYXR0cjMKKworPj4+IGR1bXAoYXR0cnMuZnVuY19jb2RlKQorbmFtZTogYXR0cnMKK2FyZ2NvdW50OiAxCituYW1lczogKCdhdHRyMScsICdhdHRyMicsICdhdHRyMycpCit2YXJuYW1lczogKCdvYmonLCkKK2NlbGx2YXJzOiAoKQorZnJlZXZhcnM6ICgpCitubG9jYWxzOiAxCitmbGFnczogNjcKK2NvbnN0czogKCdOb25lJywpCisKKz4+PiBkZWYgb3B0aW1pemVfYXdheSgpOgorLi4uICAgICAnZG9jIHN0cmluZycKKy4uLiAgICAgJ25vdCBhIGRvY3N0cmluZycKKy4uLiAgICAgNTMKKy4uLiAgICAgNTNMCisKKz4+PiBkdW1wKG9wdGltaXplX2F3YXkuZnVuY19jb2RlKQorbmFtZTogb3B0aW1pemVfYXdheQorYXJnY291bnQ6IDAKK25hbWVzOiAoKQordmFybmFtZXM6ICgpCitjZWxsdmFyczogKCkKK2ZyZWV2YXJzOiAoKQorbmxvY2FsczogMAorZmxhZ3M6IDY3Citjb25zdHM6ICgiJ2RvYyBzdHJpbmcnIiwgJ05vbmUnKQorCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IF90ZXN0Y2FwaQorCisKK2RlZiBjb25zdHModCk6CisgICAgIiIiWWllbGQgYSBkb2N0ZXN0LXNhZmUgc2VxdWVuY2Ugb2Ygb2JqZWN0IHJlcHJzLiIiIgorICAgIGZvciBlbHQgaW4gdDoKKyAgICAgICAgciA9IHJlcHIoZWx0KQorICAgICAgICBpZiByLnN0YXJ0c3dpdGgoIjxjb2RlIG9iamVjdCIpOgorICAgICAgICAgICAgeWllbGQgIjxjb2RlIG9iamVjdCAlcz4iICUgZWx0LmNvX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIHIKKworZGVmIGR1bXAoY28pOgorICAgICIiIlByaW50IG91dCBhIHRleHQgcmVwcmVzZW50YXRpb24gb2YgYSBjb2RlIG9iamVjdC4iIiIKKyAgICBmb3IgYXR0ciBpbiBbIm5hbWUiLCAiYXJnY291bnQiLCAibmFtZXMiLCAidmFybmFtZXMiLCAiY2VsbHZhcnMiLAorICAgICAgICAgICAgICAgICAiZnJlZXZhcnMiLCAibmxvY2FscyIsICJmbGFncyJdOgorICAgICAgICBwcmludCAiJXM6ICVzIiAlIChhdHRyLCBnZXRhdHRyKGNvLCAiY29fIiArIGF0dHIpKQorICAgIHByaW50ICJjb25zdHM6IiwgdHVwbGUoY29uc3RzKGNvLmNvX2NvbnN0cykpCisKKworY2xhc3MgQ29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbmV3ZW1wdHkoc2VsZik6CisgICAgICAgIGNvID0gX3Rlc3RjYXBpLmNvZGVfbmV3ZW1wdHkoImZpbGVuYW1lIiwgImZ1bmNuYW1lIiwgMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28uY29fZmlsZW5hbWUsICJmaWxlbmFtZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28uY29fbmFtZSwgImZ1bmNuYW1lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19maXJzdGxpbmVubywgMTUpCisKKworY2xhc3MgQ29kZVdlYWtSZWZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIGNvZGUgb2JqZWN0IGluIGEgY2xlYW4gZW52aXJvbm1lbnQgc28gdGhhdCB3ZSBrbm93IHdlIGhhdmUKKyAgICAgICAgIyB0aGUgb25seSByZWZlcmVuY2UgdG8gaXQgbGVmdC4KKyAgICAgICAgbmFtZXNwYWNlID0ge30KKyAgICAgICAgZXhlYyAiZGVmIGYoKTogcGFzcyIgaW4gZ2xvYmFscygpLCBuYW1lc3BhY2UKKyAgICAgICAgZiA9IG5hbWVzcGFjZVsiZiJdCisgICAgICAgIGRlbCBuYW1lc3BhY2UKKworICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCisgICAgICAgIGRlZiBjYWxsYmFjayhjb2RlKToKKyAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQorCisgICAgICAgICMgZiBpcyBub3cgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiwgYW5kIHRocm91Z2ggaXQsIHRoZSBjb2RlCisgICAgICAgICMgb2JqZWN0LiAgV2hpbGUgd2UgaG9sZCBpdCwgY2hlY2sgdGhhdCB3ZSBjYW4gY3JlYXRlIGEgd2Vha3JlZiBhbmQKKyAgICAgICAgIyBkZXJlZiBpdC4gIFRoZW4gZGVsZXRlIGl0LCBhbmQgY2hlY2sgdGhhdCB0aGUgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYW5kCisgICAgICAgICMgdGhlIHJlZmVyZW5jZSBkaWVzLgorICAgICAgICBjb2RlcmVmID0gd2Vha3JlZi5yZWYoZi5fX2NvZGVfXywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib29sKGNvZGVyZWYoKSkpCisgICAgICAgIGRlbCBmCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm9vbChjb2RlcmVmKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jYWxsZWQpCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl9kb2N0ZXN0LCBydW5fdW5pdHRlc3QKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfY29kZQorICAgIHJ1bl9kb2N0ZXN0KHRlc3RfY29kZSwgdmVyYm9zZSkKKyAgICBydW5fdW5pdHRlc3QoQ29kZVRlc3QsIENvZGVXZWFrUmVmVGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzJkZjIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQpAQCAtMCwwICsxLDgwNCBAQAoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0LCB1bml0dGVzdAoraW1wb3J0IHN5cywgY29kZWNzLCBodG1sZW50aXR5ZGVmcywgdW5pY29kZWRhdGEKKworY2xhc3MgUG9zUmV0dXJuOgorICAgICMgdGhpcyBjYW4gYmUgdXNlZCBmb3IgY29uZmlndXJhYmxlIGNhbGxiYWNrcworCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnBvcyA9IDAKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgZXhjKToKKyAgICAgICAgb2xkcG9zID0gc2VsZi5wb3MKKyAgICAgICAgcmVhbHBvcyA9IG9sZHBvcworICAgICAgICBpZiByZWFscG9zPDA6CisgICAgICAgICAgICByZWFscG9zID0gbGVuKGV4Yy5vYmplY3QpICsgcmVhbHBvcworICAgICAgICAjIGlmIHdlIGRvbid0IGFkdmFuY2UgdGhpcyB0aW1lLCB0ZXJtaW5hdGUgb24gdGhlIG5leHQgY2FsbAorICAgICAgICAjIG90aGVyd2lzZSB3ZSdkIGdldCBhbiBlbmRsZXNzIGxvb3AKKyAgICAgICAgaWYgcmVhbHBvcyA8PSBleGMuc3RhcnQ6CisgICAgICAgICAgICBzZWxmLnBvcyA9IGxlbihleGMub2JqZWN0KQorICAgICAgICByZXR1cm4gKHUiPD8+Iiwgb2xkcG9zKQorCisjIEEgVW5pY29kZUVuY29kZUVycm9yIG9iamVjdCB3aXRoIGEgYmFkIHN0YXJ0IGF0dHJpYnV0ZQorY2xhc3MgQmFkU3RhcnRVbmljb2RlRW5jb2RlRXJyb3IoVW5pY29kZUVuY29kZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvci5fX2luaXRfXyhzZWxmLCAiYXNjaWkiLCB1IiIsIDAsIDEsICJiYWQiKQorICAgICAgICBzZWxmLnN0YXJ0ID0gW10KKworIyBBIFVuaWNvZGVFbmNvZGVFcnJvciBvYmplY3Qgd2l0aCBhIGJhZCBvYmplY3QgYXR0cmlidXRlCitjbGFzcyBCYWRPYmplY3RVbmljb2RlRW5jb2RlRXJyb3IoVW5pY29kZUVuY29kZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvci5fX2luaXRfXyhzZWxmLCAiYXNjaWkiLCB1IiIsIDAsIDEsICJiYWQiKQorICAgICAgICBzZWxmLm9iamVjdCA9IFtdCisKKyMgQSBVbmljb2RlRGVjb2RlRXJyb3Igb2JqZWN0IHdpdGhvdXQgYW4gZW5kIGF0dHJpYnV0ZQorY2xhc3MgTm9FbmRVbmljb2RlRGVjb2RlRXJyb3IoVW5pY29kZURlY29kZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvci5fX2luaXRfXyhzZWxmLCAiYXNjaWkiLCAiIiwgMCwgMSwgImJhZCIpCisgICAgICAgIGRlbCBzZWxmLmVuZAorCisjIEEgVW5pY29kZURlY29kZUVycm9yIG9iamVjdCB3aXRoIGEgYmFkIG9iamVjdCBhdHRyaWJ1dGUKK2NsYXNzIEJhZE9iamVjdFVuaWNvZGVEZWNvZGVFcnJvcihVbmljb2RlRGVjb2RlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgVW5pY29kZURlY29kZUVycm9yLl9faW5pdF9fKHNlbGYsICJhc2NpaSIsICIiLCAwLCAxLCAiYmFkIikKKyAgICAgICAgc2VsZi5vYmplY3QgPSBbXQorCisjIEEgVW5pY29kZVRyYW5zbGF0ZUVycm9yIG9iamVjdCB3aXRob3V0IGEgc3RhcnQgYXR0cmlidXRlCitjbGFzcyBOb1N0YXJ0VW5pY29kZVRyYW5zbGF0ZUVycm9yKFVuaWNvZGVUcmFuc2xhdGVFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IuX19pbml0X18oc2VsZiwgdSIiLCAwLCAxLCAiYmFkIikKKyAgICAgICAgZGVsIHNlbGYuc3RhcnQKKworIyBBIFVuaWNvZGVUcmFuc2xhdGVFcnJvciBvYmplY3Qgd2l0aG91dCBhbiBlbmQgYXR0cmlidXRlCitjbGFzcyBOb0VuZFVuaWNvZGVUcmFuc2xhdGVFcnJvcihVbmljb2RlVHJhbnNsYXRlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yLl9faW5pdF9fKHNlbGYsICB1IiIsIDAsIDEsICJiYWQiKQorICAgICAgICBkZWwgc2VsZi5lbmQKKworIyBBIFVuaWNvZGVUcmFuc2xhdGVFcnJvciBvYmplY3Qgd2l0aG91dCBhbiBvYmplY3QgYXR0cmlidXRlCitjbGFzcyBOb09iamVjdFVuaWNvZGVUcmFuc2xhdGVFcnJvcihVbmljb2RlVHJhbnNsYXRlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yLl9faW5pdF9fKHNlbGYsIHUiIiwgMCwgMSwgImJhZCIpCisgICAgICAgIGRlbCBzZWxmLm9iamVjdAorCitjbGFzcyBDb2RlY0NhbGxiYWNrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF94bWxjaGFycmVmcmVwbGFjZShzZWxmKToKKyAgICAgICAgIyByZXBsYWNlIHVuZW5jb2RhYmxlIGNoYXJhY3RlcnMgd2hpY2ggbnVtZXJpYyBjaGFyYWN0ZXIgZW50aXRpZXMuCisgICAgICAgICMgRm9yIGFzY2lpLCBsYXRpbi0xIGFuZCBjaGFybWFwcyB0aGlzIGlzIGNvbXBsZXRlbHkgaW1wbGVtZW50ZWQKKyAgICAgICAgIyBpbiBDIGFuZCBzaG91bGQgYmUgcmVhc29uYWJseSBmYXN0LgorICAgICAgICBzID0gdSJcdTMwYjlcdTMwZDFcdTMwZTIgXHhlNG5kIGVnZ3MiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzLmVuY29kZSgiYXNjaWkiLCAieG1sY2hhcnJlZnJlcGxhY2UiKSwKKyAgICAgICAgICAgICImIzEyNDczOyYjMTI0OTc7JiMxMjUxNDsgJiMyMjg7bmQgZWdncyIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcy5lbmNvZGUoImxhdGluLTEiLCAieG1sY2hhcnJlZnJlcGxhY2UiKSwKKyAgICAgICAgICAgICImIzEyNDczOyYjMTI0OTc7JiMxMjUxNDsgXHhlNG5kIGVnZ3MiCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3htbGNoYXJuYW1lcmVwbGFjZShzZWxmKToKKyAgICAgICAgIyBUaGlzIHRpbWUgdXNlIGEgbmFtZWQgY2hhcmFjdGVyIGVudGl0eSBmb3IgdW5lbmNvZGFibGUKKyAgICAgICAgIyBjaGFyYWN0ZXJzLCBpZiBvbmUgaXMgYXZhaWxhYmxlLgorCisgICAgICAgIGRlZiB4bWxjaGFybmFtZXJlcGxhY2UoZXhjKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgVW5pY29kZUVuY29kZUVycm9yKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGhhbmRsZSAlciIgJSBleGMpCisgICAgICAgICAgICBsID0gW10KKyAgICAgICAgICAgIGZvciBjIGluIGV4Yy5vYmplY3RbZXhjLnN0YXJ0OmV4Yy5lbmRdOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbC5hcHBlbmQodSImJXM7IiAlIGh0bWxlbnRpdHlkZWZzLmNvZGVwb2ludDJuYW1lW29yZChjKV0pCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBsLmFwcGVuZCh1IiYjJWQ7IiAlIG9yZChjKSkKKyAgICAgICAgICAgIHJldHVybiAodSIiLmpvaW4obCksIGV4Yy5lbmQpCisKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKAorICAgICAgICAgICAgInRlc3QueG1sY2hhcm5hbWVyZXBsYWNlIiwgeG1sY2hhcm5hbWVyZXBsYWNlKQorCisgICAgICAgIHNpbiA9IHUiXHhhYlx1MjExY1x4YmIgPSBcdTIzMjlcdTEyMzRcdTIwYWNcdTIzMmEiCisgICAgICAgIHNvdXQgPSAiJmxhcXVvOyZyZWFsOyZyYXF1bzsgPSAmbGFuZzsmIzQ2NjA7JmV1cm87JnJhbmc7IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbi5lbmNvZGUoImFzY2lpIiwgInRlc3QueG1sY2hhcm5hbWVyZXBsYWNlIiksIHNvdXQpCisgICAgICAgIHNvdXQgPSAiXHhhYiZyZWFsO1x4YmIgPSAmbGFuZzsmIzQ2NjA7JmV1cm87JnJhbmc7IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbi5lbmNvZGUoImxhdGluLTEiLCAidGVzdC54bWxjaGFybmFtZXJlcGxhY2UiKSwgc291dCkKKyAgICAgICAgc291dCA9ICJceGFiJnJlYWw7XHhiYiA9ICZsYW5nOyYjNDY2MDtceGE0JnJhbmc7IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbi5lbmNvZGUoImlzby04ODU5LTE1IiwgInRlc3QueG1sY2hhcm5hbWVyZXBsYWNlIiksIHNvdXQpCisKKyAgICBkZWYgdGVzdF91bmluYW1lcmVwbGFjZShzZWxmKToKKyAgICAgICAgIyBXZSdyZSB1c2luZyB0aGUgbmFtZXMgZnJvbSB0aGUgdW5pY29kZSBkYXRhYmFzZSB0aGlzIHRpbWUsCisgICAgICAgICMgYW5kIHdlJ3JlIGRvaW5nICJzeW50YXggaGlnaGxpZ2h0aW5nIiBoZXJlLCBpLmUuIHdlIGluY2x1ZGUKKyAgICAgICAgIyB0aGUgcmVwbGFjZWQgdGV4dCBpbiBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuIEZvciB0aGlzIGl0IGlzCisgICAgICAgICMgdXNlZnVsIHRoYXQgdGhlIGVycm9yIGhhbmRsZXIgaXMgbm90IGNhbGxlZCBmb3IgZXZlcnkgc2luZ2xlCisgICAgICAgICMgdW5lbmNvZGFibGUgY2hhcmFjdGVyLCBidXQgZm9yIGEgY29tcGxldGUgc2VxdWVuY2Ugb2YKKyAgICAgICAgIyB1bmVuY29kYWJsZSBjaGFyYWN0ZXJzLCBvdGhlcndpc2Ugd2Ugd291bGQgb3V0cHV0IG1hbnkKKyAgICAgICAgIyB1bm5lY2Vzc2FyeSBlc2NhcGUgc2VxdWVuY2VzLgorCisgICAgICAgIGRlZiB1bmluYW1lcmVwbGFjZShleGMpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICVyIiAlIGV4YykKKyAgICAgICAgICAgIGwgPSBbXQorICAgICAgICAgICAgZm9yIGMgaW4gZXhjLm9iamVjdFtleGMuc3RhcnQ6ZXhjLmVuZF06CisgICAgICAgICAgICAgICAgbC5hcHBlbmQodW5pY29kZWRhdGEubmFtZShjLCB1IjB4JXgiICUgb3JkKGMpKSkKKyAgICAgICAgICAgIHJldHVybiAodSJcMDMzWzFtJXNcMDMzWzBtIiAlIHUiLCAiLmpvaW4obCksIGV4Yy5lbmQpCisKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKAorICAgICAgICAgICAgInRlc3QudW5pbmFtZXJlcGxhY2UiLCB1bmluYW1lcmVwbGFjZSkKKworICAgICAgICBzaW4gPSB1Ilx4YWNcdTEyMzRcdTIwYWNcdTgwMDAiCisgICAgICAgIHNvdXQgPSAiXDAzM1sxbU5PVCBTSUdOLCBFVEhJT1BJQyBTWUxMQUJMRSBTRUUsIEVVUk8gU0lHTiwgQ0pLIFVOSUZJRUQgSURFT0dSQVBILTgwMDBcMDMzWzBtIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbi5lbmNvZGUoImFzY2lpIiwgInRlc3QudW5pbmFtZXJlcGxhY2UiKSwgc291dCkKKworICAgICAgICBzb3V0ID0gIlx4YWNcMDMzWzFtRVRISU9QSUMgU1lMTEFCTEUgU0VFLCBFVVJPIFNJR04sIENKSyBVTklGSUVEIElERU9HUkFQSC04MDAwXDAzM1swbSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW4uZW5jb2RlKCJsYXRpbi0xIiwgInRlc3QudW5pbmFtZXJlcGxhY2UiKSwgc291dCkKKworICAgICAgICBzb3V0ID0gIlx4YWNcMDMzWzFtRVRISU9QSUMgU1lMTEFCTEUgU0VFXDAzM1swbVx4YTRcMDMzWzFtQ0pLIFVOSUZJRUQgSURFT0dSQVBILTgwMDBcMDMzWzBtIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbi5lbmNvZGUoImlzby04ODU5LTE1IiwgInRlc3QudW5pbmFtZXJlcGxhY2UiKSwgc291dCkKKworICAgIGRlZiB0ZXN0X2JhY2tzbGFzaGVzY2FwZShzZWxmKToKKyAgICAgICAgIyBEb2VzIHRoZSBzYW1lIGFzIHRoZSAidW5pY29kZS1lc2NhcGUiIGVuY29kaW5nLCBidXQgd2l0aCBkaWZmZXJlbnQKKyAgICAgICAgIyBiYXNlIGVuY29kaW5ncy4KKyAgICAgICAgc2luID0gdSJhXHhhY1x1MTIzNFx1MjBhY1x1ODAwMCIKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPiAweGZmZmY6CisgICAgICAgICAgICBzaW4gKz0gdW5pY2hyKHN5cy5tYXh1bmljb2RlKQorICAgICAgICBzb3V0ID0gImFcXHhhY1xcdTEyMzRcXHUyMGFjXFx1ODAwMCIKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPiAweGZmZmY6CisgICAgICAgICAgICBzb3V0ICs9ICJcXFUlMDh4IiAlIHN5cy5tYXh1bmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmVuY29kZSgiYXNjaWkiLCAiYmFja3NsYXNocmVwbGFjZSIpLCBzb3V0KQorCisgICAgICAgIHNvdXQgPSAiYVx4YWNcXHUxMjM0XFx1MjBhY1xcdTgwMDAiCisgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlID4gMHhmZmZmOgorICAgICAgICAgICAgc291dCArPSAiXFxVJTA4eCIgJSBzeXMubWF4dW5pY29kZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbi5lbmNvZGUoImxhdGluLTEiLCAiYmFja3NsYXNocmVwbGFjZSIpLCBzb3V0KQorCisgICAgICAgIHNvdXQgPSAiYVx4YWNcXHUxMjM0XHhhNFxcdTgwMDAiCisgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlID4gMHhmZmZmOgorICAgICAgICAgICAgc291dCArPSAiXFxVJTA4eCIgJSBzeXMubWF4dW5pY29kZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbi5lbmNvZGUoImlzby04ODU5LTE1IiwgImJhY2tzbGFzaHJlcGxhY2UiKSwgc291dCkKKworICAgIGRlZiB0ZXN0X2RlY29kaW5nX2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGEgdGVzdCBmb3IgYSBkZWNvZGluZyBjYWxsYmFjayBoYW5kbGVyCisgICAgICAgICMgdGhhdCBhbGxvd3MgdGhlIGRlY29kaW5nIG9mIHRoZSBpbnZhbGlkIHNlcXVlbmNlCisgICAgICAgICMgIlx4YzBceDgwIiBhbmQgcmV0dXJucyAiXHgwMCIgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGVycm9yLgorICAgICAgICAjIEFsbCBvdGhlciBpbGxlZ2FsIHNlcXVlbmNlcyB3aWxsIGJlIGhhbmRsZWQgc3RyaWN0bHkuCisgICAgICAgIGRlZiByZWxheGVkdXRmOChleGMpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRGVjb2RlRXJyb3IpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICVyIiAlIGV4YykKKyAgICAgICAgICAgIGlmIGV4Yy5vYmplY3RbZXhjLnN0YXJ0OmV4Yy5zdGFydCsyXSA9PSAiXHhjMFx4ODAiOgorICAgICAgICAgICAgICAgIHJldHVybiAodSJceDAwIiwgZXhjLnN0YXJ0KzIpICMgcmV0cnkgYWZ0ZXIgdHdvIGJ5dGVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGV4YworCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5yZWxheGVkdXRmOCIsIHJlbGF4ZWR1dGY4KQorCisgICAgICAgICMgYWxsIHRoZSAiXHhjMFx4ODAiIHdpbGwgYmUgZGVjb2RlZCB0byAiXHgwMCIKKyAgICAgICAgc2luID0gImFceDAwYlx4YzBceDgwY1x4YzNceGJjXHhjMFx4ODBceGMwXHg4MCIKKyAgICAgICAgc291dCA9IHUiYVx4MDBiXHgwMGNceGZjXHgwMFx4MDAiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmRlY29kZSgidXRmLTgiLCAidGVzdC5yZWxheGVkdXRmOCIpLCBzb3V0KQorCisgICAgICAgICMgIlx4YzBceDgxIiBpcyBub3QgdmFsaWQgYW5kIGEgVW5pY29kZURlY29kZUVycm9yIHdpbGwgYmUgcmFpc2VkCisgICAgICAgIHNpbiA9ICJceGMwXHg4MFx4YzBceDgxIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIHNpbi5kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsICJ0ZXN0LnJlbGF4ZWR1dGY4IikKKworICAgIGRlZiB0ZXN0X2NoYXJtYXBlbmNvZGUoc2VsZik6CisgICAgICAgICMgRm9yIGNoYXJtYXAgZW5jb2RpbmdzIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgd2lsbCBiZQorICAgICAgICAjIG1hcHBlZCB0aHJvdWdoIHRoZSBlbmNvZGluZyBhZ2Fpbi4gVGhpcyBtZWFucywgdGhhdAorICAgICAgICAjIHRvIGJlIGFibGUgdG8gdXNlIGUuZy4gdGhlICJyZXBsYWNlIiBoYW5kbGVyLCB0aGUKKyAgICAgICAgIyBjaGFybWFwIGhhcyB0byBoYXZlIGEgbWFwcGluZyBmb3IgIj8iLgorICAgICAgICBjaGFybWFwID0gZGljdChbIChvcmQoYyksIDIqYy51cHBlcigpKSBmb3IgYyBpbiAiYWJjZGVmZ2giXSkKKyAgICAgICAgc2luID0gdSJhYmMiCisgICAgICAgIHNvdXQgPSAiQUFCQkNDIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5jaGFybWFwX2VuY29kZShzaW4sICJzdHJpY3QiLCBjaGFybWFwKVswXSwgc291dCkKKworICAgICAgICBzaW4gPSB1ImFiY0EiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgY29kZWNzLmNoYXJtYXBfZW5jb2RlLCBzaW4sICJzdHJpY3QiLCBjaGFybWFwKQorCisgICAgICAgIGNoYXJtYXBbb3JkKCI/IildID0gIlhZWiIKKyAgICAgICAgc2luID0gdSJhYmNERUYiCisgICAgICAgIHNvdXQgPSAiQUFCQkNDWFlaWFlaWFlaIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5jaGFybWFwX2VuY29kZShzaW4sICJyZXBsYWNlIiwgY2hhcm1hcClbMF0sIHNvdXQpCisKKyAgICAgICAgY2hhcm1hcFtvcmQoIj8iKV0gPSB1IlhZWiIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9lbmNvZGUsIHNpbiwgInJlcGxhY2UiLCBjaGFybWFwKQorCisgICAgICAgIGNoYXJtYXBbb3JkKCI/IildID0gdSJYWVoiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmNoYXJtYXBfZW5jb2RlLCBzaW4sICJyZXBsYWNlIiwgY2hhcm1hcCkKKworICAgIGRlZiB0ZXN0X2RlY29kZXVuaWNvZGVpbnRlcm5hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDAiLmRlY29kZSwKKyAgICAgICAgICAgICJ1bmljb2RlLWludGVybmFsIiwKKyAgICAgICAgKQorICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA+IDB4ZmZmZjoKKyAgICAgICAgICAgIGRlZiBoYW5kbGVyX3VuaWNvZGVpbnRlcm5hbChleGMpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgVW5pY29kZURlY29kZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgJXIiICUgZXhjKQorICAgICAgICAgICAgICAgIHJldHVybiAodSJceDAxIiwgMSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDAiLmRlY29kZSgidW5pY29kZS1pbnRlcm5hbCIsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICB1Ilx1MDAwMCIKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDAiLmRlY29kZSgidW5pY29kZS1pbnRlcm5hbCIsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgdSJcdTAwMDBcdWZmZmQiCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5odWkiLCBoYW5kbGVyX3VuaWNvZGVpbnRlcm5hbCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAiXHgwMFx4MDBceDAwXHgwMFx4MDAiLmRlY29kZSgidW5pY29kZS1pbnRlcm5hbCIsICJ0ZXN0Lmh1aSIpLAorICAgICAgICAgICAgICAgIHUiXHUwMDAwXHUwMDAxXHUwMDAwIgorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzKHNlbGYpOgorICAgICAgICBkZWYgaGFuZGxlcjEoZXhjKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgVW5pY29kZUVuY29kZUVycm9yKSBcCisgICAgICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRGVjb2RlRXJyb3IpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICVyIiAlIGV4YykKKyAgICAgICAgICAgIGwgPSBbdSI8JWQ+IiAlIG9yZChleGMub2JqZWN0W3Bvc10pIGZvciBwb3MgaW4geHJhbmdlKGV4Yy5zdGFydCwgZXhjLmVuZCldCisgICAgICAgICAgICByZXR1cm4gKHUiWyVzXSIgJSB1IiIuam9pbihsKSwgZXhjLmVuZCkKKworICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuaGFuZGxlcjEiLCBoYW5kbGVyMSkKKworICAgICAgICBkZWYgaGFuZGxlcjIoZXhjKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgVW5pY29kZURlY29kZUVycm9yKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGhhbmRsZSAlciIgJSBleGMpCisgICAgICAgICAgICBsID0gW3UiPCVkPiIgJSBvcmQoZXhjLm9iamVjdFtwb3NdKSBmb3IgcG9zIGluIHhyYW5nZShleGMuc3RhcnQsIGV4Yy5lbmQpXQorICAgICAgICAgICAgcmV0dXJuICh1Ilslc10iICUgdSIiLmpvaW4obCksIGV4Yy5lbmQrMSkgIyBza2lwIG9uZSBjaGFyYWN0ZXIKKworICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuaGFuZGxlcjIiLCBoYW5kbGVyMikKKworICAgICAgICBzID0gIlx4MDBceDgxXHg3Zlx4ODBceGZmIgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzLmRlY29kZSgiYXNjaWkiLCAidGVzdC5oYW5kbGVyMSIpLAorICAgICAgICAgICAgdSJceDAwWzwxMjk+XVx4N2ZbPDEyOD5dWzwyNTU+XSIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcy5kZWNvZGUoImFzY2lpIiwgInRlc3QuaGFuZGxlcjIiKSwKKyAgICAgICAgICAgIHUiXHgwMFs8MTI5Pl1bPDEyOD5dIgorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICJcXHUzMDQyXHUzeHh4Ii5kZWNvZGUoInVuaWNvZGUtZXNjYXBlIiwgInRlc3QuaGFuZGxlcjEiKSwKKyAgICAgICAgICAgIHUiXHUzMDQyWzw5Mj48MTE3Pjw1MT5deHh4IgorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICJcXHUzMDQyXHUzeHgiLmRlY29kZSgidW5pY29kZS1lc2NhcGUiLCAidGVzdC5oYW5kbGVyMSIpLAorICAgICAgICAgICAgdSJcdTMwNDJbPDkyPjwxMTc+PDUxPl14eCIKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoImFiYyIsICJ0ZXN0LmhhbmRsZXIxIiwge29yZCgiYSIpOiB1InoifSlbMF0sCisgICAgICAgICAgICB1InpbPDk4Pl1bPDk5Pl0iCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSJnXHhmY1x4ZGZyayIuZW5jb2RlKCJhc2NpaSIsICJ0ZXN0LmhhbmRsZXIxIiksCisgICAgICAgICAgICB1ImdbPDI1Mj48MjIzPl1yayIKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1ImdceGZjXHhkZiIuZW5jb2RlKCJhc2NpaSIsICJ0ZXN0LmhhbmRsZXIxIiksCisgICAgICAgICAgICB1ImdbPDI1Mj48MjIzPl0iCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2xvbmdzdHJpbmdzKHNlbGYpOgorICAgICAgICAjIHRlc3QgbG9uZyBzdHJpbmdzIHRvIGNoZWNrIGZvciBtZW1vcnkgb3ZlcmZsb3cgcHJvYmxlbXMKKyAgICAgICAgZXJyb3JzID0gWyAic3RyaWN0IiwgImlnbm9yZSIsICJyZXBsYWNlIiwgInhtbGNoYXJyZWZyZXBsYWNlIiwKKyAgICAgICAgICAgICAgICAgICAiYmFja3NsYXNocmVwbGFjZSJdCisgICAgICAgICMgcmVnaXN0ZXIgdGhlIGhhbmRsZXJzIHVuZGVyIGRpZmZlcmVudCBuYW1lcywKKyAgICAgICAgIyB0byBwcmV2ZW50IHRoZSBjb2RlYyBmcm9tIHJlY29nbml6aW5nIHRoZSBuYW1lCisgICAgICAgIGZvciBlcnIgaW4gZXJyb3JzOgorICAgICAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LiIgKyBlcnIsIGNvZGVjcy5sb29rdXBfZXJyb3IoZXJyKSkKKyAgICAgICAgbCA9IDEwMDAKKyAgICAgICAgZXJyb3JzICs9IFsgInRlc3QuIiArIGVyciBmb3IgZXJyIGluIGVycm9ycyBdCisgICAgICAgIGZvciB1bmkgaW4gWyBzKmwgZm9yIHMgaW4gKHUieCIsIHUiXHUzMDQyIiwgdSJhXHhlNCIpIF06CisgICAgICAgICAgICBmb3IgZW5jIGluICgiYXNjaWkiLCAibGF0aW4tMSIsICJpc28tODg1OS0xIiwgImlzby04ODU5LTE1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1dGYtOCIsICJ1dGYtNyIsICJ1dGYtMTYiLCAidXRmLTMyIik6CisgICAgICAgICAgICAgICAgZm9yIGVyciBpbiBlcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaS5lbmNvZGUoZW5jLCBlcnIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncyhzZWxmLCBleGN0eXBlLCBhcmdzLCBtc2cpOgorICAgICAgICAjIFRlc3QgVW5pY29kZUVycm9yIHN1YmNsYXNzZXM6IGNvbnN0cnVjdGlvbiwgYXR0cmlidXRlIGFzc2lnbm1lbnQgYW5kIF9fc3RyX18gY29udmVyc2lvbgorICAgICAgICAjIGNoZWNrIHdpdGggb25lIG1pc3NpbmcgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBleGN0eXBlLCAqYXJnc1s6LTFdKQorICAgICAgICAjIGNoZWNrIHdpdGggb25lIGFyZ3VtZW50IHRvbyBtdWNoCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXhjdHlwZSwgKihhcmdzICsgWyJ0b28gbXVjaCJdKSkKKyAgICAgICAgIyBjaGVjayB3aXRoIG9uZSBhcmd1bWVudCBvZiB0aGUgd3JvbmcgdHlwZQorICAgICAgICB3cm9uZ2FyZ3MgPSBbICJzcGFtIiwgdSJlZ2dzIiwgNDIsIDEuMCwgTm9uZSBdCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oYXJncykpOgorICAgICAgICAgICAgZm9yIHdyb25nYXJnIGluIHdyb25nYXJnczoKKyAgICAgICAgICAgICAgICBpZiB0eXBlKHdyb25nYXJnKSBpcyB0eXBlKGFyZ3NbaV0pOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgYnVpbGQgYXJndW1lbnQgYXJyYXkKKyAgICAgICAgICAgICAgICBjYWxsYXJncyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKGxlbihhcmdzKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGk9PWo6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYXJncy5hcHBlbmQod3JvbmdhcmcpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYXJncy5hcHBlbmQoYXJnc1tpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV4Y3R5cGUsICpjYWxsYXJncykKKworICAgICAgICAjIGNoZWNrIHdpdGggdGhlIGNvcnJlY3QgbnVtYmVyIGFuZCB0eXBlIG9mIGFyZ3VtZW50cworICAgICAgICBleGMgPSBleGN0eXBlKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihleGMpLCBtc2cpCisKKyAgICBkZWYgdGVzdF91bmljb2RlZW5jb2RlZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgIFsiYXNjaWkiLCB1ImdceGZjcmsiLCAxLCAyLCAib3VjaCJdLAorICAgICAgICAgICAgIidhc2NpaScgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlciB1J1xceGZjJyBpbiBwb3NpdGlvbiAxOiBvdWNoIgorICAgICAgICApCisgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgIFsiYXNjaWkiLCB1ImdceGZjcmsiLCAxLCA0LCAib3VjaCJdLAorICAgICAgICAgICAgIidhc2NpaScgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb24gMS0zOiBvdWNoIgorICAgICAgICApCisgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgIFsiYXNjaWkiLCB1Ilx4ZmN4IiwgMCwgMSwgIm91Y2giXSwKKyAgICAgICAgICAgICInYXNjaWknIGNvZGVjIGNhbid0IGVuY29kZSBjaGFyYWN0ZXIgdSdcXHhmYycgaW4gcG9zaXRpb24gMDogb3VjaCIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmNoZWNrX2V4Y2VwdGlvbm9iamVjdGFyZ3MoCisgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IsCisgICAgICAgICAgICBbImFzY2lpIiwgdSJcdTAxMDB4IiwgMCwgMSwgIm91Y2giXSwKKyAgICAgICAgICAgICInYXNjaWknIGNvZGVjIGNhbid0IGVuY29kZSBjaGFyYWN0ZXIgdSdcXHUwMTAwJyBpbiBwb3NpdGlvbiAwOiBvdWNoIgorICAgICAgICApCisgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgIFsiYXNjaWkiLCB1Ilx1ZmZmZngiLCAwLCAxLCAib3VjaCJdLAorICAgICAgICAgICAgIidhc2NpaScgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlciB1J1xcdWZmZmYnIGluIHBvc2l0aW9uIDA6IG91Y2giCisgICAgICAgICkKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPiAweGZmZmY6CisgICAgICAgICAgICBzZWxmLmNoZWNrX2V4Y2VwdGlvbm9iamVjdGFyZ3MoCisgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgICAgIFsiYXNjaWkiLCB1IlxVMDAwMTAwMDB4IiwgMCwgMSwgIm91Y2giXSwKKyAgICAgICAgICAgICAgICAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVyIHUnXFxVMDAwMTAwMDAnIGluIHBvc2l0aW9uIDA6IG91Y2giCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF91bmljb2RlZGVjb2RlZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgIFsiYXNjaWkiLCAiZ1x4ZmNyayIsIDEsIDIsICJvdWNoIl0sCisgICAgICAgICAgICAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGZjIGluIHBvc2l0aW9uIDE6IG91Y2giCisgICAgICAgICkKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgWyJhc2NpaSIsICJnXHhmY3JrIiwgMSwgMywgIm91Y2giXSwKKyAgICAgICAgICAgICInYXNjaWknIGNvZGVjIGNhbid0IGRlY29kZSBieXRlcyBpbiBwb3NpdGlvbiAxLTI6IG91Y2giCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGV0cmFuc2xhdGVlcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yLAorICAgICAgICAgICAgW3UiZ1x4ZmNyayIsIDEsIDIsICJvdWNoIl0sCisgICAgICAgICAgICAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlciB1J1xceGZjJyBpbiBwb3NpdGlvbiAxOiBvdWNoIgorICAgICAgICApCisgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvciwKKyAgICAgICAgICAgIFt1ImdcdTAxMDByayIsIDEsIDIsICJvdWNoIl0sCisgICAgICAgICAgICAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlciB1J1xcdTAxMDAnIGluIHBvc2l0aW9uIDE6IG91Y2giCisgICAgICAgICkKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yLAorICAgICAgICAgICAgW3UiZ1x1ZmZmZnJrIiwgMSwgMiwgIm91Y2giXSwKKyAgICAgICAgICAgICJjYW4ndCB0cmFuc2xhdGUgY2hhcmFjdGVyIHUnXFx1ZmZmZicgaW4gcG9zaXRpb24gMTogb3VjaCIKKyAgICAgICAgKQorICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA+IDB4ZmZmZjoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IsCisgICAgICAgICAgICAgICAgW3UiZ1xVMDAwMTAwMDByayIsIDEsIDIsICJvdWNoIl0sCisgICAgICAgICAgICAgICAgImNhbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXIgdSdcXFUwMDAxMDAwMCcgaW4gcG9zaXRpb24gMTogb3VjaCIKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yLAorICAgICAgICAgICAgW3UiZ1x4ZmNyayIsIDEsIDMsICJvdWNoIl0sCisgICAgICAgICAgICAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb24gMS0yOiBvdWNoIgorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9iYWRhbmRnb29kc3RyaWN0ZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyAic3RyaWN0IiBjb21wbGFpbnMgYWJvdXQgYSBub24tZXhjZXB0aW9uIHBhc3NlZCBpbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5zdHJpY3RfZXJyb3JzLAorICAgICAgICAgICAgNDIKKyAgICAgICAgKQorICAgICAgICAjICJzdHJpY3QiIGNvbXBsYWlucyBhYm91dCB0aGUgd3JvbmcgZXhjZXB0aW9uIHR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBFeGNlcHRpb24sCisgICAgICAgICAgICBjb2RlY3Muc3RyaWN0X2Vycm9ycywKKyAgICAgICAgICAgIEV4Y2VwdGlvbigib3VjaCIpCisgICAgICAgICkKKworICAgICAgICAjIElmIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbiBpcyBwYXNzZWQgaW4sICJzdHJpY3QiIHJhaXNlcyBpdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5zdHJpY3RfZXJyb3JzLAorICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9iYWRhbmRnb29kaWdub3JlZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyAiaWdub3JlIiBjb21wbGFpbnMgYWJvdXQgYSBub24tZXhjZXB0aW9uIHBhc3NlZCBpbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycywKKyAgICAgICAgICAgNDIKKyAgICAgICAgKQorICAgICAgICAjICJpZ25vcmUiIGNvbXBsYWlucyBhYm91dCB0aGUgd3JvbmcgZXhjZXB0aW9uIHR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgY29kZWNzLmlnbm9yZV9lcnJvcnMsCisgICAgICAgICAgIFVuaWNvZGVFcnJvcigib3VjaCIpCisgICAgICAgICkKKyAgICAgICAgIyBJZiB0aGUgY29ycmVjdCBleGNlcHRpb24gaXMgcGFzc2VkIGluLCAiaWdub3JlIiByZXR1cm5zIGFuIGVtcHR5IHJlcGxhY2VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKKyAgICAgICAgICAgICh1IiIsIDEpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5pZ25vcmVfZXJyb3JzKFVuaWNvZGVEZWNvZGVFcnJvcigiYXNjaWkiLCAiXHhmZiIsIDAsIDEsICJvdWNoIikpLAorICAgICAgICAgICAgKHUiIiwgMSkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmlnbm9yZV9lcnJvcnMoVW5pY29kZVRyYW5zbGF0ZUVycm9yKHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCisgICAgICAgICAgICAodSIiLCAxKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9iYWRhbmRnb29kcmVwbGFjZWV4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgInJlcGxhY2UiIGNvbXBsYWlucyBhYm91dCBhIG5vbi1leGNlcHRpb24gcGFzc2VkIGluCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgNDIKKyAgICAgICAgKQorICAgICAgICAjICJyZXBsYWNlIiBjb21wbGFpbnMgYWJvdXQgdGhlIHdyb25nIGV4Y2VwdGlvbiB0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgVW5pY29kZUVycm9yKCJvdWNoIikKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgIEJhZE9iamVjdFVuaWNvZGVFbmNvZGVFcnJvcigpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3MucmVwbGFjZV9lcnJvcnMsCisgICAgICAgICAgICBCYWRPYmplY3RVbmljb2RlRGVjb2RlRXJyb3IoKQorICAgICAgICApCisgICAgICAgICMgV2l0aCB0aGUgY29ycmVjdCBleGNlcHRpb24sICJyZXBsYWNlIiByZXR1cm5zIGFuICI/IiBvciB1Ilx1ZmZmZCIgcmVwbGFjZW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKKyAgICAgICAgICAgICh1Ij8iLCAxKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MucmVwbGFjZV9lcnJvcnMoVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsICJceGZmIiwgMCwgMSwgIm91Y2giKSksCisgICAgICAgICAgICAodSJcdWZmZmQiLCAxKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MucmVwbGFjZV9lcnJvcnMoVW5pY29kZVRyYW5zbGF0ZUVycm9yKHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCisgICAgICAgICAgICAodSJcdWZmZmQiLCAxKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9iYWRhbmRnb29keG1sY2hhcnJlZnJlcGxhY2VleGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjICJ4bWxjaGFycmVmcmVwbGFjZSIgY29tcGxhaW5zIGFib3V0IGEgbm9uLWV4Y2VwdGlvbiBwYXNzZWQgaW4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgNDIKKyAgICAgICAgKQorICAgICAgICAjICJ4bWxjaGFycmVmcmVwbGFjZSIgY29tcGxhaW5zIGFib3V0IHRoZSB3cm9uZyBleGNlcHRpb24gdHlwZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgVW5pY29kZUVycm9yKCJvdWNoIikKKyAgICAgICAgKQorICAgICAgICAjICJ4bWxjaGFycmVmcmVwbGFjZSIgY2FuIG9ubHkgYmUgdXNlZCBmb3IgZW5jb2RpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsICJceGZmIiwgMCwgMSwgIm91Y2giKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvcih1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIikKKyAgICAgICAgKQorICAgICAgICAjIFVzZSB0aGUgY29ycmVjdCBleGNlcHRpb24KKyAgICAgICAgY3MgPSAoMCwgMSwgOSwgMTAsIDk5LCAxMDAsIDk5OSwgMTAwMCwgOTk5OSwgMTAwMDAsIDB4MzA0MikKKyAgICAgICAgcyA9ICIiLmpvaW4odW5pY2hyKGMpIGZvciBjIGluIGNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycygKKyAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgcywgMCwgbGVuKHMpLCAib3VjaCIpCisgICAgICAgICAgICApLAorICAgICAgICAgICAgKHUiIi5qb2luKHUiJiMlZDsiICUgb3JkKGMpIGZvciBjIGluIHMpLCBsZW4ocykpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RiYWNrc2xhc2hyZXBsYWNlZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyAiYmFja3NsYXNocmVwbGFjZSIgY29tcGxhaW5zIGFib3V0IGEgbm9uLWV4Y2VwdGlvbiBwYXNzZWQgaW4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICA0MgorICAgICAgICApCisgICAgICAgICMgImJhY2tzbGFzaHJlcGxhY2UiIGNvbXBsYWlucyBhYm91dCB0aGUgd3JvbmcgZXhjZXB0aW9uIHR5cGVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgVW5pY29kZUVycm9yKCJvdWNoIikKKyAgICAgICAgKQorICAgICAgICAjICJiYWNrc2xhc2hyZXBsYWNlIiBjYW4gb25seSBiZSB1c2VkIGZvciBlbmNvZGluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvcigiYXNjaWkiLCAiXHhmZiIsIDAsIDEsICJvdWNoIikKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvcih1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIikKKyAgICAgICAgKQorICAgICAgICAjIFVzZSB0aGUgY29ycmVjdCBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKKyAgICAgICAgICAgICh1IlxcdTMwNDIiLCAxKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHgwMCIsIDAsIDEsICJvdWNoIikpLAorICAgICAgICAgICAgKHUiXFx4MDAiLCAxKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHhmZiIsIDAsIDEsICJvdWNoIikpLAorICAgICAgICAgICAgKHUiXFx4ZmYiLCAxKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHUwMTAwIiwgMCwgMSwgIm91Y2giKSksCisgICAgICAgICAgICAodSJcXHUwMTAwIiwgMSkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1Ilx1ZmZmZiIsIDAsIDEsICJvdWNoIikpLAorICAgICAgICAgICAgKHUiXFx1ZmZmZiIsIDEpCisgICAgICAgICkKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGU+MHhmZmZmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXFUwMDAxMDAwMCIsIDAsIDEsICJvdWNoIikpLAorICAgICAgICAgICAgICAgICh1IlxcVTAwMDEwMDAwIiwgMSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1IlxVMDAxMGZmZmYiLCAwLCAxLCAib3VjaCIpKSwKKyAgICAgICAgICAgICAgICAodSJcXFUwMDEwZmZmZiIsIDEpCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9iYWRoYW5kbGVycmVzdWx0cyhzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9ICggNDIsIHUiZm9vIiwgKDEsMiwzKSwgKHUiZm9vIiwgMSwgMyksICh1ImZvbyIsIE5vbmUpLCAodSJmb28iLCksICgiZm9vIiwgMSwgMyksICgiZm9vIiwgTm9uZSksICgiZm9vIiwpICkKKyAgICAgICAgZW5jcyA9ICgiYXNjaWkiLCAibGF0aW4tMSIsICJpc28tODg1OS0xIiwgImlzby04ODU5LTE1IikKKworICAgICAgICBmb3IgcmVzIGluIHJlc3VsdHM6CisgICAgICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuYmFkaGFuZGxlciIsIGxhbWJkYSB4OiByZXMpCisgICAgICAgICAgICBmb3IgZW5jIGluIGVuY3M6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgdSJcdTMwNDIiLmVuY29kZSwKKyAgICAgICAgICAgICAgICAgICAgZW5jLAorICAgICAgICAgICAgICAgICAgICAidGVzdC5iYWRoYW5kbGVyIgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGZvciAoZW5jLCBieXRlcykgaW4gKAorICAgICAgICAgICAgICAgICgiYXNjaWkiLCAiXHhmZiIpLAorICAgICAgICAgICAgICAgICgidXRmLTgiLCAiXHhmZiIpLAorICAgICAgICAgICAgICAgICgidXRmLTciLCAiK3gtIiksCisgICAgICAgICAgICAgICAgKCJ1bmljb2RlLWludGVybmFsIiwgIlx4MDAiKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgYnl0ZXMuZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICBlbmMsCisgICAgICAgICAgICAgICAgICAgICJ0ZXN0LmJhZGhhbmRsZXIiCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfbG9va3VwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5zdHJpY3RfZXJyb3JzLCBjb2RlY3MubG9va3VwX2Vycm9yKCJzdHJpY3QiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuaWdub3JlX2Vycm9ycywgY29kZWNzLmxvb2t1cF9lcnJvcigiaWdub3JlIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLnN0cmljdF9lcnJvcnMsIGNvZGVjcy5sb29rdXBfZXJyb3IoInN0cmljdCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgIGNvZGVjcy5sb29rdXBfZXJyb3IoInhtbGNoYXJyZWZyZXBsYWNlIikKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgY29kZWNzLmxvb2t1cF9lcnJvcigiYmFja3NsYXNocmVwbGFjZSIpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3VuZW5jb2RhYmxlcmVwbGFjZW1lbnQoc2VsZik6CisgICAgICAgIGRlZiB1bmVuY3JlcGwoZXhjKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgICAgICAgICAgICAgIHJldHVybiAodSJcdTQyNDIiLCBleGMuZW5kKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGhhbmRsZSAlciIgJSBleGMpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC51bmVuY3JlcGxoYW5kbGVyIiwgdW5lbmNyZXBsKQorICAgICAgICBmb3IgZW5jIGluICgiYXNjaWkiLCAiaXNvLTg4NTktMSIsICJpc28tODg1OS0xNSIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgICAgIHUiXHU0MjQyIi5lbmNvZGUsCisgICAgICAgICAgICAgICAgZW5jLAorICAgICAgICAgICAgICAgICJ0ZXN0LnVuZW5jcmVwbGhhbmRsZXIiCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9iYWRyZWdpc3RlcmNhbGwoc2VsZik6CisgICAgICAgICMgZW5oYW5jZSBjb3ZlcmFnZSBvZjoKKyAgICAgICAgIyBNb2R1bGVzL19jb2RlY3Ntb2R1bGUuYzo6cmVnaXN0ZXJfZXJyb3IoKQorICAgICAgICAjIFB5dGhvbi9jb2RlY3MuYzo6UHlDb2RlY19SZWdpc3RlckVycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVnaXN0ZXJfZXJyb3IsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWdpc3Rlcl9lcnJvciwgInRlc3QuZHVtbXkiLCA0MikKKworICAgIGRlZiB0ZXN0X2JhZGxvb2t1cGNhbGwoc2VsZik6CisgICAgICAgICMgZW5oYW5jZSBjb3ZlcmFnZSBvZjoKKyAgICAgICAgIyBNb2R1bGVzL19jb2RlY3Ntb2R1bGUuYzo6bG9va3VwX2Vycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MubG9va3VwX2Vycm9yKQorCisgICAgZGVmIHRlc3RfdW5rbm93bmhhbmRsZXIoc2VsZik6CisgICAgICAgICMgZW5oYW5jZSBjb3ZlcmFnZSBvZjoKKyAgICAgICAgIyBNb2R1bGVzL19jb2RlY3Ntb2R1bGUuYzo6bG9va3VwX2Vycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIGNvZGVjcy5sb29rdXBfZXJyb3IsICJ0ZXN0LnVua25vd24iKQorCisgICAgZGVmIHRlc3RfeG1sY2hhcnJlZnZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBlbmhhbmNlIGNvdmVyYWdlIG9mOgorICAgICAgICAjIFB5dGhvbi9jb2RlY3MuYzo6UHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycygpCisgICAgICAgICMgYW5kIGlubGluZSBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgdiA9ICgxLCA1LCAxMCwgNTAsIDEwMCwgNTAwLCAxMDAwLCA1MDAwLCAxMDAwMCwgNTAwMDApCisgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlPj0xMDAwMDA6CisgICAgICAgICAgICB2ICs9ICgxMDAwMDAsIDUwMDAwMCwgMTAwMDAwMCkKKyAgICAgICAgcyA9IHUiIi5qb2luKFt1bmljaHIoeCkgZm9yIHggaW4gdl0pCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC54bWxjaGFycmVmcmVwbGFjZSIsIGNvZGVjcy54bWxjaGFycmVmcmVwbGFjZV9lcnJvcnMpCisgICAgICAgIGZvciBlbmMgaW4gKCJhc2NpaSIsICJpc28tODg1OS0xNSIpOgorICAgICAgICAgICAgZm9yIGVyciBpbiAoInhtbGNoYXJyZWZyZXBsYWNlIiwgInRlc3QueG1sY2hhcnJlZnJlcGxhY2UiKToKKyAgICAgICAgICAgICAgICBzLmVuY29kZShlbmMsIGVycikKKworICAgIGRlZiB0ZXN0X2RlY29kZWhlbHBlcihzZWxmKToKKyAgICAgICAgIyBlbmhhbmNlIGNvdmVyYWdlIG9mOgorICAgICAgICAjIE9iamVjdHMvdW5pY29kZW9iamVjdC5jOjp1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigpCisgICAgICAgICMgYW5kIGNhbGxlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsICJceGZmIi5kZWNvZGUsICJhc2NpaSIsICJ0ZXN0LnVua25vd24iKQorCisgICAgICAgIGRlZiBiYWRkZWNvZGVyZXR1cm4xKGV4Yyk6CisgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LmJhZGRlY29kZXJldHVybjEiLCBiYWRkZWNvZGVyZXR1cm4xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICJceGZmIi5kZWNvZGUsICJhc2NpaSIsICJ0ZXN0LmJhZGRlY29kZXJldHVybjEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICJcXCIuZGVjb2RlLCAidW5pY29kZS1lc2NhcGUiLCAidGVzdC5iYWRkZWNvZGVyZXR1cm4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAiXFx4MCIuZGVjb2RlLCAidW5pY29kZS1lc2NhcGUiLCAidGVzdC5iYWRkZWNvZGVyZXR1cm4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAiXFx4MHkiLmRlY29kZSwgInVuaWNvZGUtZXNjYXBlIiwgInRlc3QuYmFkZGVjb2RlcmV0dXJuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgIlxcVWZmZmZlZWVlIi5kZWNvZGUsICJ1bmljb2RlLWVzY2FwZSIsICJ0ZXN0LmJhZGRlY29kZXJldHVybjEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICJcXHV5eXl5Ii5kZWNvZGUsICJyYXctdW5pY29kZS1lc2NhcGUiLCAidGVzdC5iYWRkZWNvZGVyZXR1cm4xIikKKworICAgICAgICBkZWYgYmFkZGVjb2RlcmV0dXJuMihleGMpOgorICAgICAgICAgICAgcmV0dXJuICh1Ij8iLCBOb25lKQorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuYmFkZGVjb2RlcmV0dXJuMiIsIGJhZGRlY29kZXJldHVybjIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgIlx4ZmYiLmRlY29kZSwgImFzY2lpIiwgInRlc3QuYmFkZGVjb2RlcmV0dXJuMiIpCisKKyAgICAgICAgaGFuZGxlciA9IFBvc1JldHVybigpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5wb3NyZXR1cm4iLCBoYW5kbGVyLmhhbmRsZSkKKworICAgICAgICAjIFZhbGlkIG5lZ2F0aXZlIHBvc2l0aW9uCisgICAgICAgIGhhbmRsZXIucG9zID0gLTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHhmZjAiLmRlY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz4wIikKKworICAgICAgICAjIFZhbGlkIG5lZ2F0aXZlIHBvc2l0aW9uCisgICAgICAgIGhhbmRsZXIucG9zID0gLTIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHhmZjAiLmRlY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz48Pz4iKQorCisgICAgICAgICMgTmVnYXRpdmUgcG9zaXRpb24gb3V0IG9mIGJvdW5kcworICAgICAgICBoYW5kbGVyLnBvcyA9IC0zCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJceGZmMCIuZGVjb2RlLCAiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKQorCisgICAgICAgICMgVmFsaWQgcG9zaXRpdmUgcG9zaXRpb24KKyAgICAgICAgaGFuZGxlci5wb3MgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlx4ZmYwIi5kZWNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+MCIpCisKKyAgICAgICAgIyBMYXJnZXN0IHZhbGlkIHBvc2l0aXZlIHBvc2l0aW9uIChvbmUgYmV5b25kIGVuZCBvZiBpbnB1dCkKKyAgICAgICAgaGFuZGxlci5wb3MgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlx4ZmYwIi5kZWNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+IikKKworICAgICAgICAjIEludmFsaWQgcG9zaXRpdmUgcG9zaXRpb24KKyAgICAgICAgaGFuZGxlci5wb3MgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJceGZmMCIuZGVjb2RlLCAiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKQorCisgICAgICAgICMgUmVzdGFydCBhdCB0aGUgIjAiCisgICAgICAgIGhhbmRsZXIucG9zID0gNgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJcXHV5eXl5MCIuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz4wIikKKworICAgICAgICBjbGFzcyBEKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgIlx4ZmYiLCAic3RyaWN0IiwgezB4ZmY6IE5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9kZWNvZGUsICJceGZmIiwgInN0cmljdCIsIEQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9kZWNvZGUsICJceGZmIiwgInN0cmljdCIsIHsweGZmOiAweDExMDAwMH0pCisKKyAgICBkZWYgdGVzdF9lbmNvZGVoZWxwZXIoc2VsZik6CisgICAgICAgICMgZW5oYW5jZSBjb3ZlcmFnZSBvZjoKKyAgICAgICAgIyBPYmplY3RzL3VuaWNvZGVvYmplY3QuYzo6dW5pY29kZV9lbmNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoKQorICAgICAgICAjIGFuZCBjYWxsZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yLCB1Ilx4ZmYiLmVuY29kZSwgImFzY2lpIiwgInRlc3QudW5rbm93biIpCisKKyAgICAgICAgZGVmIGJhZGVuY29kZXJldHVybjEoZXhjKToKKyAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuYmFkZW5jb2RlcmV0dXJuMSIsIGJhZGVuY29kZXJldHVybjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJceGZmIi5lbmNvZGUsICJhc2NpaSIsICJ0ZXN0LmJhZGVuY29kZXJldHVybjEiKQorCisgICAgICAgIGRlZiBiYWRlbmNvZGVyZXR1cm4yKGV4Yyk6CisgICAgICAgICAgICByZXR1cm4gKHUiPyIsIE5vbmUpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5iYWRlbmNvZGVyZXR1cm4yIiwgYmFkZW5jb2RlcmV0dXJuMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1Ilx4ZmYiLmVuY29kZSwgImFzY2lpIiwgInRlc3QuYmFkZW5jb2RlcmV0dXJuMiIpCisKKyAgICAgICAgaGFuZGxlciA9IFBvc1JldHVybigpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5wb3NyZXR1cm4iLCBoYW5kbGVyLmhhbmRsZSkKKworICAgICAgICAjIFZhbGlkIG5lZ2F0aXZlIHBvc2l0aW9uCisgICAgICAgIGhhbmRsZXIucG9zID0gLTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx4ZmYwIi5lbmNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksICI8Pz4wIikKKworICAgICAgICAjIFZhbGlkIG5lZ2F0aXZlIHBvc2l0aW9uCisgICAgICAgIGhhbmRsZXIucG9zID0gLTIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx4ZmYwIi5lbmNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksICI8Pz48Pz4iKQorCisgICAgICAgICMgTmVnYXRpdmUgcG9zaXRpb24gb3V0IG9mIGJvdW5kcworICAgICAgICBoYW5kbGVyLnBvcyA9IC0zCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUiXHhmZjAiLmVuY29kZSwgImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIikKKworICAgICAgICAjIFZhbGlkIHBvc2l0aXZlIHBvc2l0aW9uCisgICAgICAgIGhhbmRsZXIucG9zID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHhmZjAiLmVuY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgIjw/PjAiKQorCisgICAgICAgICMgTGFyZ2VzdCB2YWxpZCBwb3NpdGl2ZSBwb3NpdGlvbiAob25lIGJleW9uZCBlbmQgb2YgaW5wdXQKKyAgICAgICAgaGFuZGxlci5wb3MgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJceGZmMCIuZW5jb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCAiPD8+IikKKworICAgICAgICAjIEludmFsaWQgcG9zaXRpdmUgcG9zaXRpb24KKyAgICAgICAgaGFuZGxlci5wb3MgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUiXHhmZjAiLmVuY29kZSwgImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIikKKworICAgICAgICBoYW5kbGVyLnBvcyA9IDAKKworICAgICAgICBjbGFzcyBEKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBmb3IgZXJyIGluICgic3RyaWN0IiwgInJlcGxhY2UiLCAieG1sY2hhcnJlZnJlcGxhY2UiLCAiYmFja3NsYXNocmVwbGFjZSIsICJ0ZXN0LnBvc3JldHVybiIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9lbmNvZGUsIHUiXHhmZiIsIGVyciwgezB4ZmY6IE5vbmV9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29kZWNzLmNoYXJtYXBfZW5jb2RlLCB1Ilx4ZmYiLCBlcnIsIEQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmNoYXJtYXBfZW5jb2RlLCB1Ilx4ZmYiLCBlcnIsIHsweGZmOiAzMDB9KQorCisgICAgZGVmIHRlc3RfdHJhbnNsYXRlaGVscGVyKHNlbGYpOgorICAgICAgICAjIGVuaGFuY2UgY292ZXJhZ2Ugb2Y6CisgICAgICAgICMgT2JqZWN0cy91bmljb2Rlb2JqZWN0LmM6OnVuaWNvZGVfZW5jb2RlX2NhbGxfZXJyb3JoYW5kbGVyKCkKKyAgICAgICAgIyBhbmQgY2FsbGVycworICAgICAgICAjIChVbmZvcnR1bmF0ZWx5IHRoZSBlcnJvcnMgYXJndW1lbnQgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUKKyAgICAgICAgIyBmcm9tIFB5dGhvbiwgc28gd2UgY2FuJ3QgdGVzdCB0aGF0IG11Y2gpCisgICAgICAgIGNsYXNzIEQoZGljdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiXHhmZiIudHJhbnNsYXRlLCBEKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJceGZmIi50cmFuc2xhdGUsIHsweGZmOiBzeXMubWF4dW5pY29kZSsxfSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1Ilx4ZmYiLnRyYW5zbGF0ZSwgezB4ZmY6ICgpfSkKKworICAgIGRlZiB0ZXN0X2J1ZzgyODczNyhzZWxmKToKKyAgICAgICAgY2hhcm1hcCA9IHsKKyAgICAgICAgICAgIG9yZCgiJiIpOiB1IiZhbXA7IiwKKyAgICAgICAgICAgIG9yZCgiPCIpOiB1IiZsdDsiLAorICAgICAgICAgICAgb3JkKCI+Iik6IHUiJmd0OyIsCisgICAgICAgICAgICBvcmQoJyInKTogdSImcXVvdDsiLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIG4gaW4gKDEsIDEwLCAxMDAsIDEwMDApOgorICAgICAgICAgICAgdGV4dCA9IHUnYWJjPGRlZj5naGknKm4KKyAgICAgICAgICAgIHRleHQudHJhbnNsYXRlKGNoYXJtYXApCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29kZWNDYWxsYmFja1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2NuLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfY24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1ZThkZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2NuLnB5CkBAIC0wLDAgKzEsODYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X2NvZGVjZW5jb2RpbmdzX2NuLnB5CisjICAgQ29kZWMgZW5jb2RpbmcgdGVzdHMgZm9yIFBSQyBlbmNvZGluZ3MuCisjCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFRlc3RfR0IyMzEyKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2diMjMxMicKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnZ2IyMzEyJykKKyAgICBjb2RlY3Rlc3RzID0gKAorICAgICAgICAjIGludmFsaWQgYnl0ZXMKKyAgICAgICAgKCJhYmNceDgxXHg4MVx4YzFceGM0IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceGM4IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceDgxXHg4MVx4YzFceGM0IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YSIpLAorICAgICAgICAoImFiY1x4ODFceDgxXHhjMVx4YzRceGM4IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YVx1ZmZmZCIpLAorICAgICAgICAoImFiY1x4ODFceDgxXHhjMVx4YzQiLCAiaWdub3JlIiwgIHUiYWJjXHU4MDRhIiksCisgICAgICAgICgiXHhjMVx4NjQiLCAic3RyaWN0IiwgTm9uZSksCisgICAgKQorCitjbGFzcyBUZXN0X0dCSyh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdnYmsnCisgICAgdHN0cmluZyA9IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5sb2FkX3Rlc3RzdHJpbmcoJ2diaycpCisgICAgY29kZWN0ZXN0cyA9ICgKKyAgICAgICAgIyBpbnZhbGlkIGJ5dGVzCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHhjOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdTgwNGEiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0XHhjOCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdTgwNGFcdWZmZmQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgImlnbm9yZSIsICB1ImFiY1x1ODA0YSIpLAorICAgICAgICAoIlx4ODNceDM0XHg4M1x4MzEiLCAic3RyaWN0IiwgTm9uZSksCisgICAgICAgICh1Ilx1MzBmYiIsICJzdHJpY3QiLCBOb25lKSwKKyAgICApCisKK2NsYXNzIFRlc3RfR0IxODAzMCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdnYjE4MDMwJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdnYjE4MDMwJykKKyAgICBjb2RlY3Rlc3RzID0gKAorICAgICAgICAjIGludmFsaWQgYnl0ZXMKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceGM4IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YSIpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzRceGM4IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YVx1ZmZmZCIpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAiaWdub3JlIiwgIHUiYWJjXHU4MDRhIiksCisgICAgICAgICgiYWJjXHg4NFx4MzlceDg0XHgzOVx4YzFceGM0IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YSIpLAorICAgICAgICAodSJcdTMwZmIiLCAic3RyaWN0IiwgIlx4ODE5XHhhNzkiKSwKKyAgICApCisgICAgaGFzX2lzbzEwNjQ2ID0gVHJ1ZQorCitjbGFzcyBUZXN0X0haKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2h6JworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdoeicpCisgICAgY29kZWN0ZXN0cyA9ICgKKyAgICAgICAgIyB0ZXN0ICd+XG4nICgzIGxpbmVzKQorICAgICAgICAoYidUaGlzIHNlbnRlbmNlIGlzIGluIEFTQ0lJLlxuJworICAgICAgICAgYidUaGUgbmV4dCBzZW50ZW5jZSBpcyBpbiBHQi5+ezw6S3kyO1N7Iyx+fX5cbicKKyAgICAgICAgIGInfntOcEopbDZISyEjfn1CeWUuXG4nLAorICAgICAgICAgJ3N0cmljdCcsCisgICAgICAgICB1J1RoaXMgc2VudGVuY2UgaXMgaW4gQVNDSUkuXG4nCisgICAgICAgICB1J1RoZSBuZXh0IHNlbnRlbmNlIGlzIGluIEdCLicKKyAgICAgICAgIHUnXHU1ZGYxXHU2MjQwXHU0ZTBkXHU2YjMyXHVmZjBjXHU1MmZmXHU2NWJkXHU2NWJjXHU0ZWJhXHUzMDAyJworICAgICAgICAgdSdCeWUuXG4nKSwKKyAgICAgICAgIyB0ZXN0ICd+XG4nICg0IGxpbmVzKQorICAgICAgICAoYidUaGlzIHNlbnRlbmNlIGlzIGluIEFTQ0lJLlxuJworICAgICAgICAgYidUaGUgbmV4dCBzZW50ZW5jZSBpcyBpbiBHQi5+XG4nCisgICAgICAgICBiJ357PDpLeTI7U3sjLE5wSilsNkhLISN+fX5cbicKKyAgICAgICAgIGInQnllLlxuJywKKyAgICAgICAgICdzdHJpY3QnLAorICAgICAgICAgdSdUaGlzIHNlbnRlbmNlIGlzIGluIEFTQ0lJLlxuJworICAgICAgICAgdSdUaGUgbmV4dCBzZW50ZW5jZSBpcyBpbiBHQi4nCisgICAgICAgICB1J1x1NWRmMVx1NjI0MFx1NGUwZFx1NmIzMlx1ZmYwY1x1NTJmZlx1NjViZFx1NjViY1x1NGViYVx1MzAwMicKKyAgICAgICAgIHUnQnllLlxuJyksCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoYidhYn5jZCcsICdyZXBsYWNlJywgdSdhYlx1RkZGRGQnKSwKKyAgICAgICAgKGInYWJceGZmY2QnLCAncmVwbGFjZScsIHUnYWJcdUZGRkRjZCcpLAorICAgICAgICAoYidhYn57XHg4MVx4ODFceDQxXHg0NH59Y2QnLCAncmVwbGFjZScsIHUnYWJcdUZGRkRcdUZGRkRcdTgwNEFjZCcpLAorICAgICkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2hrLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfaGsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjMjYwNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2hrLnB5CkBAIC0wLDAgKzEsMjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X2NvZGVjZW5jb2RpbmdzX2hrLnB5CisjICAgQ29kZWMgZW5jb2RpbmcgdGVzdHMgZm9yIEhvbmdLb25nIGVuY29kaW5ncy4KKyMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgVGVzdF9CaWc1SEtTQ1ModGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnYmlnNWhrc2NzJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdiaWc1aGtzY3MnKQorICAgIGNvZGVjdGVzdHMgPSAoCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4YzgiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHU4YjEwIiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNFx4YzgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHU4YjEwXHVmZmZkIiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJpZ25vcmUiLCAgdSJhYmNcdThiMTAiKSwKKyAgICApCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19pc28yMDIyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfaXNvMjAyMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDFkMmFmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfaXNvMjAyMi5weQpAQCAtMCwwICsxLDQ2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29kZWMgZW5jb2RpbmcgdGVzdHMgZm9yIElTTyAyMDIyIGVuY29kaW5ncy4KKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworQ09NTU9OX0NPREVDX1RFU1RTID0gKAorICAgICAgICAjIGludmFsaWQgYnl0ZXMKKyAgICAgICAgKGInYWJceEZGY2QnLCAncmVwbGFjZScsIHUnYWJcdUZGRkRjZCcpLAorICAgICAgICAoYidhYlx4MUJkZWYnLCAncmVwbGFjZScsIHUnYWJceDFCZGVmJyksCisgICAgICAgIChiJ2FiXHgxQiRkZWYnLCAncmVwbGFjZScsIHUnYWJcdUZGRkQnKSwKKyAgICApCisKK2NsYXNzIFRlc3RfSVNPMjAyMl9KUCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdpc28yMDIyX2pwJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdpc28yMDIyX2pwJykKKyAgICBjb2RlY3Rlc3RzID0gQ09NTU9OX0NPREVDX1RFU1RTICsgKAorICAgICAgICAoYidhYlx4MUJOZGVmJywgJ3JlcGxhY2UnLCB1J2FiXHgxQk5kZWYnKSwKKyAgICApCisKK2NsYXNzIFRlc3RfSVNPMjAyMl9KUDIodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnaXNvMjAyMl9qcF8yJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdpc28yMDIyX2pwJykKKyAgICBjb2RlY3Rlc3RzID0gQ09NTU9OX0NPREVDX1RFU1RTICsgKAorICAgICAgICAoYidhYlx4MUJOZGVmJywgJ3JlcGxhY2UnLCB1J2FiZGVmJyksCisgICAgKQorCitjbGFzcyBUZXN0X0lTTzIwMjJfS1IodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnaXNvMjAyMl9rcicKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnaXNvMjAyMl9rcicpCisgICAgY29kZWN0ZXN0cyA9IENPTU1PTl9DT0RFQ19URVNUUyArICgKKyAgICAgICAgKGInYWJceDFCTmRlZicsICdyZXBsYWNlJywgdSdhYlx4MUJOZGVmJyksCisgICAgKQorCisgICAgIyBpc28yMDIyX2tyLnR4dCBjYW5ub3QgYmUgdXNlZCB0byB0ZXN0ICJjaHVuayBjb2RpbmciOiB0aGUgZXNjYXBlCisgICAgIyBzZXF1ZW5jZSBpcyBvbmx5IHdyaXR0ZW4gb24gdGhlIGZpcnN0IGxpbmUKKyAgICBkZWYgdGVzdF9jaHVua2NvZGluZyhzZWxmKToKKyAgICAgICAgcGFzcworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfanAucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19qcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjgxZjQxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfanAucHkKQEAgLTAsMCArMSwxMDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X2NvZGVjZW5jb2RpbmdzX2pwLnB5CisjICAgQ29kZWMgZW5jb2RpbmcgdGVzdHMgZm9yIEphcGFuZXNlIGVuY29kaW5ncy4KKyMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgVGVzdF9DUDkzMih0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdjcDkzMicKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnc2hpZnRfamlzJykKKyAgICBjb2RlY3Rlc3RzID0gKAorICAgICAgICAjIGludmFsaWQgYnl0ZXMKKyAgICAgICAgKCJhYmNceDgxXHgwMFx4ODFceDAwXHg4Mlx4ODQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ZjgiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ODFceDAwXHg4Mlx4ODQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVmZjQ0IiksCisgICAgICAgICgiYWJjXHg4MVx4MDBceDgyXHg4NFx4ODgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVmZjQ0XHVmZmZkIiksCisgICAgICAgICgiYWJjXHg4MVx4MDBceDgyXHg4NCIsICJpZ25vcmUiLCAgdSJhYmNcdWZmNDQiKSwKKyAgICAgICAgIyBzamlzIHZzIGNwOTMyCisgICAgICAgICgiXFxceDdlIiwgInJlcGxhY2UiLCB1IlxcXHg3ZSIpLAorICAgICAgICAoIlx4ODFceDVmXHg4MVx4NjFceDgxXHg3YyIsICJyZXBsYWNlIiwgdSJcdWZmM2NcdTIyMjVcdWZmMGQiKSwKKyAgICApCisKK2NsYXNzIFRlc3RfRVVDX0pJU1gwMjEzKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdldWNfamlzeDAyMTMnCisgICAgdHN0cmluZyA9IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5sb2FkX3Rlc3RzdHJpbmcoJ2V1Y19qaXN4MDIxMycpCisgICAgY29kZWN0ZXN0cyA9ICgKKyAgICAgICAgIyBpbnZhbGlkIGJ5dGVzCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHhjOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdTc5NTYiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0XHhjOCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdTc5NTZcdWZmZmQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgImlnbm9yZSIsICB1ImFiY1x1Nzk1NiIpLAorICAgICAgICAoImFiY1x4OGZceDgzXHg4MyIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmQiKSwKKyAgICAgICAgKCJceGMxXHg2NCIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKCJceGExXHhjMCIsICJzdHJpY3QiLCB1Ilx1ZmYzYyIpLAorICAgICkKKyAgICB4bWxjaGFybmFtZXRlc3QgPSAoCisgICAgICAgIHUiXHhhYlx1MjExY1x4YmIgPSBcdTIzMjlcdTEyMzRcdTIzMmEiLAorICAgICAgICAiXHhhOVx4YTgmcmVhbDtceGE5XHhiMiA9ICZsYW5nOyYjNDY2MDsmcmFuZzsiCisgICAgKQorCitldWNqcF9jb21tb250ZXN0cyA9ICgKKyAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICgiYWJjXHhjOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1Nzk1NiIpLAorICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNFx4YzgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHU3OTU2XHVmZmZkIiksCisgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgImlnbm9yZSIsICB1ImFiY1x1Nzk1NiIpLAorICAgICgiYWJjXHg4Zlx4ODNceDgzIiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZCIpLAorICAgICgiXHhjMVx4NjQiLCAic3RyaWN0IiwgTm9uZSksCispCisKK2NsYXNzIFRlc3RfRVVDX0pQX0NPTVBBVCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2V1Y19qcCcKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnZXVjX2pwJykKKyAgICBjb2RlY3Rlc3RzID0gZXVjanBfY29tbW9udGVzdHMgKyAoCisgICAgICAgICgiXHhhMVx4YzBcXCIsICJzdHJpY3QiLCB1Ilx1ZmYzY1xcIiksCisgICAgICAgICh1Ilx4YTUiLCAic3RyaWN0IiwgIlx4NWMiKSwKKyAgICAgICAgKHUiXHUyMDNlIiwgInN0cmljdCIsICJceDdlIiksCisgICAgKQorCitzaGlmdGppc19jb21tb25lbmN0ZXN0cyA9ICgKKyAgICAoImFiY1x4ODBceDgwXHg4Mlx4ODQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICgiYWJjXHhmOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgKCJhYmNceDgwXHg4MFx4ODJceDg0IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ZmY0NCIpLAorICAgICgiYWJjXHg4MFx4ODBceDgyXHg4NFx4ODgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVmZjQ0XHVmZmZkIiksCisgICAgKCJhYmNceDgwXHg4MFx4ODJceDg0ZGVmIiwgImlnbm9yZSIsICB1ImFiY1x1ZmY0NGRlZiIpLAorKQorCitjbGFzcyBUZXN0X1NKSVNfQ09NUEFUKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ3NoaWZ0X2ppcycKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnc2hpZnRfamlzJykKKyAgICBjb2RlY3Rlc3RzID0gc2hpZnRqaXNfY29tbW9uZW5jdGVzdHMgKyAoCisgICAgICAgICgiXFxceDdlIiwgInN0cmljdCIsIHUiXFxceDdlIiksCisgICAgICAgICgiXHg4MVx4NWZceDgxXHg2MVx4ODFceDdjIiwgInN0cmljdCIsIHUiXHVmZjNjXHUyMDE2XHUyMjEyIiksCisgICAgKQorCitjbGFzcyBUZXN0X1NKSVNYMDIxMyh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdzaGlmdF9qaXN4MDIxMycKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnc2hpZnRfamlzeDAyMTMnKQorICAgIGNvZGVjdGVzdHMgPSAoCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoImFiY1x4ODBceDgwXHg4Mlx4ODQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ZjgiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ODBceDgwXHg4Mlx4ODQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVmZjQ0IiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceDgyXHg4NFx4ODgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVmZjQ0XHVmZmZkIiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceDgyXHg4NGRlZiIsICJpZ25vcmUiLCAgdSJhYmNcdWZmNDRkZWYiKSwKKyAgICAgICAgIyBzamlzIHZzIGNwOTMyCisgICAgICAgICgiXFxceDdlIiwgInJlcGxhY2UiLCB1Ilx4YTVcdTIwM2UiKSwKKyAgICAgICAgKCJceDgxXHg1Zlx4ODFceDYxXHg4MVx4N2MiLCAicmVwbGFjZSIsIHUiXHg1Y1x1MjAxNlx1MjIxMiIpLAorICAgICkKKyAgICB4bWxjaGFybmFtZXRlc3QgPSAoCisgICAgICAgIHUiXHhhYlx1MjExY1x4YmIgPSBcdTIzMjlcdTEyMzRcdTIzMmEiLAorICAgICAgICAiXHg4NUcmcmVhbDtceDg1USA9ICZsYW5nOyYjNDY2MDsmcmFuZzsiCisgICAgKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3Nfa3IucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19rci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzg2NmE5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3Nfa3IucHkKQEAgLTAsMCArMSw2OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIHRlc3RfY29kZWNlbmNvZGluZ3Nfa3IucHkKKyMgICBDb2RlYyBlbmNvZGluZyB0ZXN0cyBmb3IgUk9LIGVuY29kaW5ncy4KKyMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgVGVzdF9DUDk0OSh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdjcDk0OScKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnY3A5NDknKQorICAgIGNvZGVjdGVzdHMgPSAoCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4YzgiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVjODk0IiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNFx4YzgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVjODk0XHVmZmZkIiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJpZ25vcmUiLCAgdSJhYmNcdWM4OTQiKSwKKyAgICApCisKK2NsYXNzIFRlc3RfRVVDS1IodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnZXVjX2tyJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdldWNfa3InKQorICAgIGNvZGVjdGVzdHMgPSAoCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4YzgiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVjODk0IiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNFx4YzgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVjODk0XHVmZmZkIiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJpZ25vcmUiLCAgdSJhYmNcdWM4OTQiKSwKKworICAgICAgICAjIGNvbXBvc2VkIG1ha2UtdXAgc2VxdWVuY2UgZXJyb3JzCisgICAgICAgICgiXHhhNFx4ZDQiLCAic3RyaWN0IiwgTm9uZSksCisgICAgICAgICgiXHhhNFx4ZDRceGE0IiwgInN0cmljdCIsIE5vbmUpLAorICAgICAgICAoIlx4YTRceGQ0XHhhNFx4YjYiLCAic3RyaWN0IiwgTm9uZSksCisgICAgICAgICgiXHhhNFx4ZDRceGE0XHhiNlx4YTQiLCAic3RyaWN0IiwgTm9uZSksCisgICAgICAgICgiXHhhNFx4ZDRceGE0XHhiNlx4YTRceGQwIiwgInN0cmljdCIsIE5vbmUpLAorICAgICAgICAoIlx4YTRceGQ0XHhhNFx4YjZceGE0XHhkMFx4YTQiLCAic3RyaWN0IiwgTm9uZSksCisgICAgICAgICgiXHhhNFx4ZDRceGE0XHhiNlx4YTRceGQwXHhhNFx4ZDQiLCAic3RyaWN0IiwgdSJcdWM0ZDQiKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTRceGI2XHhhNFx4ZDBceGE0XHhkNHgiLCAic3RyaWN0IiwgdSJcdWM0ZDR4IiksCisgICAgICAgICgiYVx4YTRceGQ0XHhhNFx4YjZceGE0IiwgInJlcGxhY2UiLCB1ImFcdWZmZmQiKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTNceGI2XHhhNFx4ZDBceGE0XHhkNCIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTRceGI2XHhhM1x4ZDBceGE0XHhkNCIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTRceGI2XHhhNFx4ZDBceGEzXHhkNCIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTRceGZmXHhhNFx4ZDBceGE0XHhkNCIsICJyZXBsYWNlIiwgdSJcdWZmZmQiKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTRceGI2XHhhNFx4ZmZceGE0XHhkNCIsICJyZXBsYWNlIiwgdSJcdWZmZmQiKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTRceGI2XHhhNFx4ZDBceGE0XHhmZiIsICJyZXBsYWNlIiwgdSJcdWZmZmQiKSwKKyAgICAgICAgKCJceGMxXHhjNCIsICJzdHJpY3QiLCB1Ilx1Yzg5NCIpLAorICAgICkKKworY2xhc3MgVGVzdF9KT0hBQih0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdqb2hhYicKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnam9oYWInKQorICAgIGNvZGVjdGVzdHMgPSAoCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4YzgiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVjZDI3IiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNFx4YzgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVjZDI3XHVmZmZkIiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJpZ25vcmUiLCAgdSJhYmNcdWNkMjciKSwKKyAgICApCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc190dy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX3R3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4M2QwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc190dy5weQpAQCAtMCwwICsxLDI3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgdGVzdF9jb2RlY2VuY29kaW5nc190dy5weQorIyAgIENvZGVjIGVuY29kaW5nIHRlc3RzIGZvciBST0MgZW5jb2RpbmdzLgorIworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0X0JpZzUodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnYmlnNScKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnYmlnNScpCisgICAgY29kZWN0ZXN0cyA9ICgKKyAgICAgICAgIyBpbnZhbGlkIGJ5dGVzCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHhjOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdThiMTAiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0XHhjOCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdThiMTBcdWZmZmQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgImlnbm9yZSIsICB1ImFiY1x1OGIxMCIpLAorICAgICkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19jbi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19jbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDRmYzU2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5CkBAIC0wLDAgKzEsMzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X2NvZGVjbWFwc19jbi5weQorIyAgIENvZGVjIG1hcHBpbmcgdGVzdHMgZm9yIFBSQyBlbmNvZGluZ3MKKyMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgVGVzdEdCMjMxMk1hcCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnZ2IyMzEyJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3Blb3BsZS5mcmVlYnNkLm9yZy9+cGVya3kvaTE4bi9FVUMtQ04uVFhUJworCitjbGFzcyBUZXN0R0JLTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdnYmsnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9WRU5ET1JTLycgXAorICAgICAgICAgICAgICAgICAnTUlDU0ZUL1dJTkRPV1MvQ1A5MzYuVFhUJworCitjbGFzcyBUZXN0R0IxODAzME1hcCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdnYjE4MDMwJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L2RhdGEvJyBcCisgICAgICAgICAgICAgICAgICd0cnVuay9jaGFyc2V0L2RhdGEveG1sL2diLTE4MDMwLTIwMDAueG1sJworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfaGsucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfaGsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyYWI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19oay5weQpAQCAtMCwwICsxLDIxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgdGVzdF9jb2RlY21hcHNfaGsucHkKKyMgICBDb2RlYyBtYXBwaW5nIHRlc3RzIGZvciBIb25nS29uZyBlbmNvZGluZ3MKKyMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgVGVzdEJpZzVIS1NDU01hcCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2JpZzVoa3NjcycKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly9wZW9wbGUuZnJlZWJzZC5vcmcvfnBlcmt5L2kxOG4vQklHNUhLU0NTLTIwMDQuVFhUJworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsndXJsZmV0Y2gnXQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfanAucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfanAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2NmE5OAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQpAQCAtMCwwICsxLDY3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgdGVzdF9jb2RlY21hcHNfanAucHkKKyMgICBDb2RlYyBtYXBwaW5nIHRlc3RzIGZvciBKYXBhbmVzZSBlbmNvZGluZ3MKKyMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgVGVzdENQOTMyTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdjcDkzMicKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZULycgXAorICAgICAgICAgICAgICAgICAnV0lORE9XUy9DUDkzMi5UWFQnCisgICAgc3VwbWFwcyA9IFsKKyAgICAgICAgKCdceDgwJywgdSdcdTAwODAnKSwKKyAgICAgICAgKCdceGEwJywgdSdcdWY4ZjAnKSwKKyAgICAgICAgKCdceGZkJywgdSdcdWY4ZjEnKSwKKyAgICAgICAgKCdceGZlJywgdSdcdWY4ZjInKSwKKyAgICAgICAgKCdceGZmJywgdSdcdWY4ZjMnKSwKKyAgICBdCisgICAgZm9yIGkgaW4gcmFuZ2UoMHhhMSwgMHhlMCk6CisgICAgICAgIHN1cG1hcHMuYXBwZW5kKChjaHIoaSksIHVuaWNocihpKzB4ZmVjMCkpKQorCisKK2NsYXNzIFRlc3RFVUNKUENPTVBBVE1hcCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnZXVjX2pwJworICAgIG1hcGZpbGVuYW1lID0gJ0VVQy1KUC5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wZXJreS9pMThuL0VVQy1KUC5UWFQnCisKKworY2xhc3MgVGVzdFNKSVNDT01QQVRNYXAodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnc2hpZnRfamlzJworICAgIG1hcGZpbGVuYW1lID0gJ1NISUZUSklTLlRYVCcKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL09CU09MRVRFJyBcCisgICAgICAgICAgICAgICAgICcvRUFTVEFTSUEvSklTL1NISUZUSklTLlRYVCcKKyAgICBwYXNzX2VuY3Rlc3QgPSBbCisgICAgICAgICgnXHg4MV8nLCB1J1xcJyksCisgICAgXQorICAgIHBhc3NfZGVjdGVzdCA9IFsKKyAgICAgICAgKCdcXCcsIHUnXHhhNScpLAorICAgICAgICAoJ34nLCB1J1x1MjAzZScpLAorICAgICAgICAoJ1x4ODFfJywgdSdcXCcpLAorICAgIF0KKworY2xhc3MgVGVzdEVVQ0pJU1gwMjEzTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdldWNfamlzeDAyMTMnCisgICAgbWFwZmlsZW5hbWUgPSAnRVVDLUpJU1gwMjEzLlRYVCcKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly9wZW9wbGUuZnJlZWJzZC5vcmcvfnBlcmt5L2kxOG4vRVVDLUpJU1gwMjEzLlRYVCcKKworCitjbGFzcyBUZXN0U0pJU1gwMjEzTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnc2hpZnRfamlzeDAyMTMnCisgICAgbWFwZmlsZW5hbWUgPSAnU0hJRlRfSklTWDAyMTMuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3Blb3BsZS5mcmVlYnNkLm9yZy9+cGVya3kvaTE4bi9TSElGVF9KSVNYMDIxMy5UWFQnCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19rci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19rci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWM2MTJlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2tyLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X2NvZGVjbWFwc19rci5weQorIyAgIENvZGVjIG1hcHBpbmcgdGVzdHMgZm9yIFJPSyBlbmNvZGluZ3MKKyMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgVGVzdENQOTQ5TWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdjcDk0OScKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUJyBcCisgICAgICAgICAgICAgICAgICcvV0lORE9XUy9DUDk0OS5UWFQnCisKKworY2xhc3MgVGVzdEVVQ0tSTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdldWNfa3InCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wZXJreS9pMThuL0VVQy1LUi5UWFQnCisKKyAgICAjIEE0RDQgSEFOR1VMIEZJTExFUiBpbmRpY2F0ZXMgdGhlIGJlZ2luIG9mIDgtYnl0ZXMgbWFrZS11cCBzZXF1ZW5jZS4KKyAgICBwYXNzX2VuY3Rlc3QgPSBbKCdceGE0XHhkNCcsIHUnXHUzMTY0JyldCisgICAgcGFzc19kZWN0ZXN0ID0gWygnXHhhNFx4ZDQnLCB1J1x1MzE2NCcpXQorCisKK2NsYXNzIFRlc3RKT0hBQk1hcCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnam9oYWInCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9PQlNPTEVURS9FQVNUQVNJQS8nIFwKKyAgICAgICAgICAgICAgICAgJ0tTQy9KT0hBQi5UWFQnCisgICAgIyBLUyBYIDEwMDEgc3RhbmRhcmQgYXNzaWduZWQgMHg1YyBhcyBXT04gU0lHTi4KKyAgICAjIGJ1dCwgaW4gZWFybHkgOTBzIHRoYXQgaXMgdGhlIG9ubHkgZXJhIHVzZWQgam9oYWIgd2lkZWx5LAorICAgICMgdGhlIG1vc3Qgc29mdHdhcmVzIGltcGxlbWVudHMgaXQgYXMgUkVWRVJTRSBTT0xJRFVTLgorICAgICMgU28sIHdlIGlnbm9yZSB0aGUgc3RhbmRhcmQgaGVyZS4KKyAgICBwYXNzX2VuY3Rlc3QgPSBbKCdcXCcsIHUnXHUyMGE5JyldCisgICAgcGFzc19kZWN0ZXN0ID0gWygnXFwnLCB1J1x1MjBhOScpXQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0M2FlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfdHcucHkKQEAgLTAsMCArMSwzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIHRlc3RfY29kZWNtYXBzX3R3LnB5CisjICAgQ29kZWMgbWFwcGluZyB0ZXN0cyBmb3IgUk9DIGVuY29kaW5ncworIworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0QklHNU1hcCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKKyAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdiaWc1JworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvT0JTT0xFVEUvJyBcCisgICAgICAgICAgICAgICAgICdFQVNUQVNJQS9PVEhFUi9CSUc1LlRYVCcKKworY2xhc3MgVGVzdENQOTUwTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdjcDk1MCcKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZULycgXAorICAgICAgICAgICAgICAgICAnV0lORE9XUy9DUDk1MC5UWFQnCisgICAgcGFzc19lbmN0ZXN0ID0gWworICAgICAgICAoJ1x4YTJceGNjJywgdSdcdTUzNDEnKSwKKyAgICAgICAgKCdceGEyXHhjZScsIHUnXHU1MzQ1JyksCisgICAgXQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjY2Y4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKQEAgLTAsMCArMSwyMDE4IEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgY29kZWNzCitpbXBvcnQgbG9jYWxlCitpbXBvcnQgc3lzLCBTdHJpbmdJTywgX3Rlc3RjYXBpCisKK2RlZiBjb2RpbmdfY2hlY2tlcihzZWxmLCBjb2Rlcik6CisgICAgZGVmIGNoZWNrKGlucHV0LCBleHBlY3QpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVyKGlucHV0KSwgKGV4cGVjdCwgbGVuKGlucHV0KSkpCisgICAgcmV0dXJuIGNoZWNrCisKK2NsYXNzIFF1ZXVlKG9iamVjdCk6CisgICAgIiIiCisgICAgcXVldWU6IHdyaXRlIGJ5dGVzIGF0IG9uZSBlbmQsIHJlYWQgYnl0ZXMgZnJvbSB0aGUgb3RoZXIgZW5kCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9idWZmZXIgPSAiIgorCisgICAgZGVmIHdyaXRlKHNlbGYsIGNoYXJzKToKKyAgICAgICAgc2VsZi5fYnVmZmVyICs9IGNoYXJzCisKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKKyAgICAgICAgaWYgc2l6ZTwwOgorICAgICAgICAgICAgcyA9IHNlbGYuX2J1ZmZlcgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gIiIKKyAgICAgICAgICAgIHJldHVybiBzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzID0gc2VsZi5fYnVmZmVyWzpzaXplXQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW3NpemU6XQorICAgICAgICAgICAgcmV0dXJuIHMKKworY2xhc3MgUmVhZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjaGVja19wYXJ0aWFsKHNlbGYsIGlucHV0LCBwYXJ0aWFscmVzdWx0cyk6CisgICAgICAgICMgZ2V0IGEgU3RyZWFtUmVhZGVyIGZvciB0aGUgZW5jb2RpbmcgYW5kIGZlZWQgdGhlIGJ5dGVzdHJpbmcgdmVyc2lvbgorICAgICAgICAjIG9mIGlucHV0IHRvIHRoZSByZWFkZXIgYnl0ZSBieSBieXRlLiBSZWFkIGV2ZXJ5dGhpbmcgYXZhaWxhYmxlIGZyb20KKyAgICAgICAgIyB0aGUgU3RyZWFtUmVhZGVyIGFuZCBjaGVjayB0aGF0IHRoZSByZXN1bHRzIGVxdWFsIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAjIGVudHJpZXMgZnJvbSBwYXJ0aWFscmVzdWx0cy4KKyAgICAgICAgcSA9IFF1ZXVlKCkKKyAgICAgICAgciA9IGNvZGVjcy5nZXRyZWFkZXIoc2VsZi5lbmNvZGluZykocSkKKyAgICAgICAgcmVzdWx0ID0gdSIiCisgICAgICAgIGZvciAoYywgcGFydGlhbHJlc3VsdCkgaW4gemlwKGlucHV0LmVuY29kZShzZWxmLmVuY29kaW5nKSwgcGFydGlhbHJlc3VsdHMpOgorICAgICAgICAgICAgcS53cml0ZShjKQorICAgICAgICAgICAgcmVzdWx0ICs9IHIucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgcGFydGlhbHJlc3VsdCkKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZXJlJ3Mgbm90aGluZyBsZWZ0IGluIHRoZSBidWZmZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5yZWFkKCksIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmJ5dGVidWZmZXIsICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuY2hhcmJ1ZmZlciwgdSIiKQorCisgICAgICAgICMgZG8gdGhlIGNoZWNrIGFnYWluLCB0aGlzIHRpbWUgdXNpbmcgYSBpbmNyZW1lbnRhbCBkZWNvZGVyCisgICAgICAgIGQgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKHNlbGYuZW5jb2RpbmcpKCkKKyAgICAgICAgcmVzdWx0ID0gdSIiCisgICAgICAgIGZvciAoYywgcGFydGlhbHJlc3VsdCkgaW4gemlwKGlucHV0LmVuY29kZShzZWxmLmVuY29kaW5nKSwgcGFydGlhbHJlc3VsdHMpOgorICAgICAgICAgICAgcmVzdWx0ICs9IGQuZGVjb2RlKGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgcGFydGlhbHJlc3VsdCkKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZXJlJ3Mgbm90aGluZyBsZWZ0IGluIHRoZSBidWZmZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kZWNvZGUoIiIsIFRydWUpLCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5idWZmZXIsICIiKQorCisgICAgICAgICMgQ2hlY2sgd2hldGhlciB0aGUgcmVzZXQgbWV0aG9kIHdvcmtzIHByb3Blcmx5CisgICAgICAgIGQucmVzZXQoKQorICAgICAgICByZXN1bHQgPSB1IiIKKyAgICAgICAgZm9yIChjLCBwYXJ0aWFscmVzdWx0KSBpbiB6aXAoaW5wdXQuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBwYXJ0aWFscmVzdWx0cyk6CisgICAgICAgICAgICByZXN1bHQgKz0gZC5kZWNvZGUoYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBwYXJ0aWFscmVzdWx0KQorICAgICAgICAjIGNoZWNrIHRoYXQgdGhlcmUncyBub3RoaW5nIGxlZnQgaW4gdGhlIGJ1ZmZlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmRlY29kZSgiIiwgVHJ1ZSksIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmJ1ZmZlciwgIiIpCisKKyAgICAgICAgIyBjaGVjayBpdGVyZGVjb2RlKCkKKyAgICAgICAgZW5jb2RlZCA9IGlucHV0LmVuY29kZShzZWxmLmVuY29kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgaW5wdXQsCisgICAgICAgICAgICB1IiIuam9pbihjb2RlY3MuaXRlcmRlY29kZShlbmNvZGVkLCBzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgIGRlZiBnZXRyZWFkZXIoaW5wdXQpOgorICAgICAgICAgICAgc3RyZWFtID0gU3RyaW5nSU8uU3RyaW5nSU8oaW5wdXQuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVjcy5nZXRyZWFkZXIoc2VsZi5lbmNvZGluZykoc3RyZWFtKQorCisgICAgICAgIGRlZiByZWFkYWxsbGluZXMoaW5wdXQsIGtlZXBlbmRzPVRydWUsIHNpemU9Tm9uZSk6CisgICAgICAgICAgICByZWFkZXIgPSBnZXRyZWFkZXIoaW5wdXQpCisgICAgICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGxpbmUgPSByZWFkZXIucmVhZGxpbmUoc2l6ZT1zaXplLCBrZWVwZW5kcz1rZWVwZW5kcykKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIHJldHVybiAifCIuam9pbihsaW5lcykKKworICAgICAgICBzID0gdSJmb29cbmJhclxyXG5iYXpccnNwYW1cdTIwMjhlZ2dzIgorICAgICAgICBzZXhwZWN0ZWQgPSB1ImZvb1xufGJhclxyXG58YmF6XHJ8c3BhbVx1MjAyOHxlZ2dzIgorICAgICAgICBzZXhwZWN0ZWRub2VuZHMgPSB1ImZvb3xiYXJ8YmF6fHNwYW18ZWdncyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkYWxsbGluZXMocywgVHJ1ZSksIHNleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkYWxsbGluZXMocywgRmFsc2UpLCBzZXhwZWN0ZWRub2VuZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGFsbGxpbmVzKHMsIFRydWUsIDEwKSwgc2V4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRhbGxsaW5lcyhzLCBGYWxzZSwgMTApLCBzZXhwZWN0ZWRub2VuZHMpCisKKyAgICAgICAgIyBUZXN0IGxvbmcgbGluZXMgKG11bHRpcGxlIGNhbGxzIHRvIHJlYWQoKSBpbiByZWFkbGluZSgpKQorICAgICAgICB2dyA9IFtdCisgICAgICAgIHZ3byA9IFtdCisgICAgICAgIGZvciAoaSwgbGluZWVuZCkgaW4gZW51bWVyYXRlKHUiXG4gXHJcbiBcciBcdTIwMjgiLnNwbGl0KCkpOgorICAgICAgICAgICAgdncuYXBwZW5kKChpKjIwMCkqdSJcMzA0MiIgKyBsaW5lZW5kKQorICAgICAgICAgICAgdndvLmFwcGVuZCgoaSoyMDApKnUiXDMwNDIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRhbGxsaW5lcygiIi5qb2luKHZ3KSwgVHJ1ZSksICIiLmpvaW4odncpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRhbGxsaW5lcygiIi5qb2luKHZ3KSwgRmFsc2UpLCIiLmpvaW4odndvKSkKKworICAgICAgICAjIFRlc3QgbGluZXMgd2hlcmUgdGhlIGZpcnN0IHJlYWQgbWlnaHQgZW5kIHdpdGggXHIsIHNvIHRoZQorICAgICAgICAjIHJlYWRlciBoYXMgdG8gbG9vayBhaGVhZCB3aGV0aGVyIHRoaXMgaXMgYSBsb25lIFxyIG9yIGEgXHJcbgorICAgICAgICBmb3Igc2l6ZSBpbiB4cmFuZ2UoODApOgorICAgICAgICAgICAgZm9yIGxpbmVlbmQgaW4gdSJcbiBcclxuIFxyIFx1MjAyOCIuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzID0gMTAqKHNpemUqdSJhIiArIGxpbmVlbmQgKyB1Inh4eFxuIikKKyAgICAgICAgICAgICAgICByZWFkZXIgPSBnZXRyZWFkZXIocykKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTApOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRsaW5lKGtlZXBlbmRzPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSp1ImEiICsgbGluZWVuZCwKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGdldHJlYWRlcihzKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZGxpbmUoa2VlcGVuZHM9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSp1ImEiLAorICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9idWcxMTc1Mzk2KHNlbGYpOgorICAgICAgICBzID0gWworICAgICAgICAgICAgJzwlIS0tPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbicsCisgICAgICAgICAgICAnICAgIEJMT0cgaW5kZXggcGFnZTogc2hvdyByZWNlbnQgYXJ0aWNsZXMsXHJcbicsCisgICAgICAgICAgICAnICAgIHRvZGF5XCdzIGFydGljbGVzLCBvciBhcnRpY2xlcyBvZiBhIHNwZWNpZmljIGRhdGUuXHJcbicsCisgICAgICAgICAgICAnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLSU+XHJcbicsCisgICAgICAgICAgICAnPCVAaW5wdXRlbmNvZGluZz0iSVNPLTg4NTktMSIlPlxyXG4nLAorICAgICAgICAgICAgJzwlQHBhZ2V0ZW1wbGF0ZT1URU1QTEFURS55JT5cclxuJywKKyAgICAgICAgICAgICc8JUBpbXBvcnQ9aW1wb3J0IGZyb2cudXRpbCwgZnJvZyU+XHJcbicsCisgICAgICAgICAgICAnPCVAaW1wb3J0PWltcG9ydCBmcm9nLm9iamVjdHMlPlxyXG4nLAorICAgICAgICAgICAgJzwlQGltcG9ydD1mcm9tIGZyb2cuc3RvcmFnZWVycm9ycyBpbXBvcnQgU3RvcmFnZUVycm9yJT5cclxuJywKKyAgICAgICAgICAgICc8JVxyXG4nLAorICAgICAgICAgICAgJ1xyXG4nLAorICAgICAgICAgICAgJ2ltcG9ydCBsb2dnaW5nXHJcbicsCisgICAgICAgICAgICAnbG9nPWxvZ2dpbmcuZ2V0TG9nZ2VyKCJTbmFrZWxldHMubG9nZ2VyIilcclxuJywKKyAgICAgICAgICAgICdcclxuJywKKyAgICAgICAgICAgICdcclxuJywKKyAgICAgICAgICAgICd1c2VyPXNlbGYuU2Vzc2lvbkN0eC51c2VyXHJcbicsCisgICAgICAgICAgICAnc3RvcmFnZUVuZ2luZT1zZWxmLlNlc3Npb25DdHguc3RvcmFnZUVuZ2luZVxyXG4nLAorICAgICAgICAgICAgJ1xyXG4nLAorICAgICAgICAgICAgJ1xyXG4nLAorICAgICAgICAgICAgJ2RlZiByZWFkQXJ0aWNsZXNGcm9tRGF0ZShkYXRlLCBjb3VudD1Ob25lKTpcclxuJywKKyAgICAgICAgICAgICcgICAgZW50cnlpZHM9c3RvcmFnZUVuZ2luZS5saXN0QmxvZ0VudHJpZXMoZGF0ZSlcclxuJywKKyAgICAgICAgICAgICcgICAgZW50cnlpZHMucmV2ZXJzZSgpICMgZGVzY2VuZGluZ1xyXG4nLAorICAgICAgICAgICAgJyAgICBpZiBjb3VudDpcclxuJywKKyAgICAgICAgICAgICcgICAgICAgIGVudHJ5aWRzPWVudHJ5aWRzWzpjb3VudF1cclxuJywKKyAgICAgICAgICAgICcgICAgdHJ5OlxyXG4nLAorICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuIFsgZnJvZy5vYmplY3RzLkJsb2dFbnRyeS5sb2FkKHN0b3JhZ2VFbmdpbmUsIGRhdGUsIElkKSBmb3IgSWQgaW4gZW50cnlpZHMgXVxyXG4nLAorICAgICAgICAgICAgJyAgICBleGNlcHQgU3RvcmFnZUVycm9yLHg6XHJcbicsCisgICAgICAgICAgICAnICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGxvYWRpbmcgYXJ0aWNsZXM6ICIrc3RyKHgpKVxyXG4nLAorICAgICAgICAgICAgJyAgICAgICAgc2VsZi5hYm9ydCgiY2Fubm90IGxvYWQgYXJ0aWNsZXMiKVxyXG4nLAorICAgICAgICAgICAgJ1xyXG4nLAorICAgICAgICAgICAgJ3Nob3dkYXRlPU5vbmVcclxuJywKKyAgICAgICAgICAgICdcclxuJywKKyAgICAgICAgICAgICdhcmc9c2VsZi5SZXF1ZXN0LmdldEFyZygpXHJcbicsCisgICAgICAgICAgICAnaWYgYXJnPT0idG9kYXkiOlxyXG4nLAorICAgICAgICAgICAgJyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0gVE9EQVlcJ1MgQVJUSUNMRVNcclxuJywKKyAgICAgICAgICAgICcgICAgc2VsZi53cml0ZSgiPGgyPlRvZGF5XCdzIGFydGljbGVzPC9oMj4iKVxyXG4nLAorICAgICAgICAgICAgJyAgICBzaG93ZGF0ZSA9IGZyb2cudXRpbC5pc29kYXRlc3RyKCkgXHJcbicsCisgICAgICAgICAgICAnICAgIGVudHJpZXMgPSByZWFkQXJ0aWNsZXNGcm9tRGF0ZShzaG93ZGF0ZSlcclxuJywKKyAgICAgICAgICAgICdlbGlmIGFyZz09ImFjdGl2ZSI6XHJcbicsCisgICAgICAgICAgICAnICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLSBBQ1RJVkUgQVJUSUNMRVMgcmVkaXJlY3RcclxuJywKKyAgICAgICAgICAgICcgICAgc2VsZi5ZcmVkaXJlY3QoImFjdGl2ZS55IilcclxuJywKKyAgICAgICAgICAgICdlbGlmIGFyZz09ImxvZ2luIjpcclxuJywKKyAgICAgICAgICAgICcgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tIExPR0lOIFBBR0UgcmVkaXJlY3RcclxuJywKKyAgICAgICAgICAgICcgICAgc2VsZi5ZcmVkaXJlY3QoImxvZ2luLnkiKVxyXG4nLAorICAgICAgICAgICAgJ2VsaWYgYXJnPT0iZGF0ZSI6XHJcbicsCisgICAgICAgICAgICAnICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLSBBUlRJQ0xFUyBPRiBBIFNQRUNJRklDIERBVEVcclxuJywKKyAgICAgICAgICAgICcgICAgc2hvd2RhdGUgPSBzZWxmLlJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJkYXRlIilcclxuJywKKyAgICAgICAgICAgICcgICAgc2VsZi53cml0ZSgiPGgyPkFydGljbGVzIHdyaXR0ZW4gb24gJXM8L2gyPiIlIGZyb2cudXRpbC5tZWRpdW1kYXRlc3RyKHNob3dkYXRlKSlcclxuJywKKyAgICAgICAgICAgICcgICAgZW50cmllcyA9IHJlYWRBcnRpY2xlc0Zyb21EYXRlKHNob3dkYXRlKVxyXG4nLAorICAgICAgICAgICAgJ2Vsc2U6XHJcbicsCisgICAgICAgICAgICAnICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLSBSRUNFTlQgQVJUSUNMRVNcclxuJywKKyAgICAgICAgICAgICcgICAgc2VsZi53cml0ZSgiPGgyPlJlY2VudCBhcnRpY2xlczwvaDI+IilcclxuJywKKyAgICAgICAgICAgICcgICAgZGF0ZXM9c3RvcmFnZUVuZ2luZS5saXN0QmxvZ0VudHJ5RGF0ZXMoKVxyXG4nLAorICAgICAgICAgICAgJyAgICBpZiBkYXRlczpcclxuJywKKyAgICAgICAgICAgICcgICAgICAgIGVudHJpZXM9W11cclxuJywKKyAgICAgICAgICAgICcgICAgICAgIFNIT1dBTU9VTlQ9MTBcclxuJywKKyAgICAgICAgICAgICcgICAgICAgIGZvciBzaG93ZGF0ZSBpbiBkYXRlczpcclxuJywKKyAgICAgICAgICAgICcgICAgICAgICAgICBlbnRyaWVzLmV4dGVuZCggcmVhZEFydGljbGVzRnJvbURhdGUoc2hvd2RhdGUsIFNIT1dBTU9VTlQtbGVuKGVudHJpZXMpKSApXHJcbicsCisgICAgICAgICAgICAnICAgICAgICAgICAgaWYgbGVuKGVudHJpZXMpPj1TSE9XQU1PVU5UOlxyXG4nLAorICAgICAgICAgICAgJyAgICAgICAgICAgICAgICBicmVha1xyXG4nLAorICAgICAgICAgICAgJyAgICAgICAgICAgICAgICBcclxuJywKKyAgICAgICAgXQorICAgICAgICBzdHJlYW0gPSBTdHJpbmdJTy5TdHJpbmdJTygiIi5qb2luKHMpLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihzZWxmLmVuY29kaW5nKShzdHJlYW0pCisgICAgICAgIGZvciAoaSwgbGluZSkgaW4gZW51bWVyYXRlKHJlYWRlcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIHNbaV0pCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXF1ZXVlKHNlbGYpOgorICAgICAgICBxID0gUXVldWUoKQorICAgICAgICB3cml0ZXIgPSBjb2RlY3MuZ2V0d3JpdGVyKHNlbGYuZW5jb2RpbmcpKHEpCisgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoc2VsZi5lbmNvZGluZykocSkKKworICAgICAgICAjIE5vIGxpbmVlbmRzCisgICAgICAgIHdyaXRlci53cml0ZSh1ImZvb1xyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoa2VlcGVuZHM9RmFsc2UpLCB1ImZvbyIpCisgICAgICAgIHdyaXRlci53cml0ZSh1IlxuYmFyXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZShrZWVwZW5kcz1GYWxzZSksIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoa2VlcGVuZHM9RmFsc2UpLCB1ImJhciIpCisgICAgICAgIHdyaXRlci53cml0ZSh1ImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKGtlZXBlbmRzPUZhbHNlKSwgdSJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZShrZWVwZW5kcz1GYWxzZSksIHUiIikKKworICAgICAgICAjIExpbmVlbmRzCisgICAgICAgIHdyaXRlci53cml0ZSh1ImZvb1xyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoa2VlcGVuZHM9VHJ1ZSksIHUiZm9vXHIiKQorICAgICAgICB3cml0ZXIud3JpdGUodSJcbmJhclxyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoa2VlcGVuZHM9VHJ1ZSksIHUiXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZShrZWVwZW5kcz1UcnVlKSwgdSJiYXJcciIpCisgICAgICAgIHdyaXRlci53cml0ZSh1ImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKGtlZXBlbmRzPVRydWUpLCB1ImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKGtlZXBlbmRzPVRydWUpLCB1IiIpCisgICAgICAgIHdyaXRlci53cml0ZSh1ImZvb1xyXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZShrZWVwZW5kcz1UcnVlKSwgdSJmb29cclxuIikKKworICAgIGRlZiB0ZXN0X2J1ZzEwOTg5OTBfYShzZWxmKToKKyAgICAgICAgczEgPSB1Inh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHggeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eVxyXG4iCisgICAgICAgIHMyID0gdSJvZmZlbmRpbmcgbGluZTogbGFkZmogYXNrbGRmaiBrbGFzZGogZnNrbGEgZGZ6YXNrZGogZmFza2xmaiBsYXNrZCBmamFza2xmenp6emFhJXdoZXJlaXN0aGlzISEhXHJcbiIKKyAgICAgICAgczMgPSB1Im5leHQgbGluZS5cclxuIgorCisgICAgICAgIHMgPSAoczErczIrczMpLmVuY29kZShzZWxmLmVuY29kaW5nKQorICAgICAgICBzdHJlYW0gPSBTdHJpbmdJTy5TdHJpbmdJTyhzKQorICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKHNlbGYuZW5jb2RpbmcpKHN0cmVhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgczEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKCksIHMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgdSIiKQorCisgICAgZGVmIHRlc3RfYnVnMTA5ODk5MF9iKHNlbGYpOgorICAgICAgICBzMSA9IHUiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhXHJcbiIKKyAgICAgICAgczIgPSB1ImJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYlxyXG4iCisgICAgICAgIHMzID0gdSJzdGlsbG9rYXk6YmJiYnh4XHJcbiIKKyAgICAgICAgczQgPSB1ImJyb2tlbiEhISFiYWRiYWRcclxuIgorICAgICAgICBzNSA9IHUiYWdhaW5va2F5LlxyXG4iCisKKyAgICAgICAgcyA9IChzMStzMitzMytzNCtzNSkuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHN0cmVhbSA9IFN0cmluZ0lPLlN0cmluZ0lPKHMpCisgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoc2VsZi5lbmNvZGluZykoc3RyZWFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKCksIHMzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgczUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKCksIHUiIikKKworY2xhc3MgVVRGMzJUZXN0KFJlYWRUZXN0KToKKyAgICBlbmNvZGluZyA9ICJ1dGYtMzIiCisKKyAgICBzcGFtbGUgPSAoJ1x4ZmZceGZlXHgwMFx4MDAnCisgICAgICAgICAgICAgICdzXHgwMFx4MDBceDAwcFx4MDBceDAwXHgwMGFceDAwXHgwMFx4MDBtXHgwMFx4MDBceDAwJworICAgICAgICAgICAgICAnc1x4MDBceDAwXHgwMHBceDAwXHgwMFx4MDBhXHgwMFx4MDBceDAwbVx4MDBceDAwXHgwMCcpCisgICAgc3BhbWJlID0gKCdceDAwXHgwMFx4ZmVceGZmJworICAgICAgICAgICAgICAnXHgwMFx4MDBceDAwc1x4MDBceDAwXHgwMHBceDAwXHgwMFx4MDBhXHgwMFx4MDBceDAwbScKKyAgICAgICAgICAgICAgJ1x4MDBceDAwXHgwMHNceDAwXHgwMFx4MDBwXHgwMFx4MDBceDAwYVx4MDBceDAwXHgwMG0nKQorCisgICAgZGVmIHRlc3Rfb25seV9vbmVfYm9tKHNlbGYpOgorICAgICAgICBfLF8scmVhZGVyLHdyaXRlciA9IGNvZGVjcy5sb29rdXAoc2VsZi5lbmNvZGluZykKKyAgICAgICAgIyBlbmNvZGUgc29tZSBzdHJlYW0KKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgZiA9IHdyaXRlcihzKQorICAgICAgICBmLndyaXRlKHUic3BhbSIpCisgICAgICAgIGYud3JpdGUodSJzcGFtIikKKyAgICAgICAgZCA9IHMuZ2V0dmFsdWUoKQorICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgZXhhY3RseSBvbmUgQk9NIGluIGl0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkID09IHNlbGYuc3BhbWxlIG9yIGQgPT0gc2VsZi5zcGFtYmUpCisgICAgICAgICMgdHJ5IHRvIHJlYWQgaXQgYmFjaworICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oZCkKKyAgICAgICAgZiA9IHJlYWRlcihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB1InNwYW1zcGFtIikKKworICAgIGRlZiB0ZXN0X2JhZGJvbShzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKDQqIlx4ZmYiKQorICAgICAgICBmID0gY29kZWNzLmdldHJlYWRlcihzZWxmLmVuY29kaW5nKShzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGYucmVhZCkKKworICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oOCoiXHhmZiIpCisgICAgICAgIGYgPSBjb2RlY3MuZ2V0cmVhZGVyKHNlbGYuZW5jb2RpbmcpKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgZi5yZWFkKQorCisgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKAorICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZlxVMDAwMTAwMDAiLAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIHUiIiwgIyBmaXJzdCBieXRlIG9mIEJPTSByZWFkCisgICAgICAgICAgICAgICAgdSIiLCAjIHNlY29uZCBieXRlIG9mIEJPTSByZWFkCisgICAgICAgICAgICAgICAgdSIiLCAjIHRoaXJkIGJ5dGUgb2YgQk9NIHJlYWQKKyAgICAgICAgICAgICAgICB1IiIsICMgZm91cnRoIGJ5dGUgb2YgQk9NIHJlYWQgPT4gYnl0ZW9yZGVyIGtub3duCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2hhbmRsZXJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh1J1x1ZmZmZCcsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy51dGZfMzJfZGVjb2RlKCdceDAxJywgJ3JlcGxhY2UnLCBUcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodScnLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MudXRmXzMyX2RlY29kZSgnXHgwMScsICdpZ25vcmUnLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzMyX2RlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmYiLCAic3RyaWN0IiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2lzc3VlODk0MShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjODk0MTogaW5zdWZmaWNpZW50IHJlc3VsdCBhbGxvY2F0aW9uIHdoZW4gZGVjb2RpbmcgaW50bworICAgICAgICAjIHN1cnJvZ2F0ZSBwYWlycyBvbiBVQ1MtMiBidWlsZHMuCisgICAgICAgIGVuY29kZWRfbGUgPSAnXHhmZlx4ZmVceDAwXHgwMCcgKyAnXHgwMFx4MDBceDAxXHgwMCcgKiAxMDI0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwMDAwJyAqIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzLnV0Zl8zMl9kZWNvZGUoZW5jb2RlZF9sZSlbMF0pCisgICAgICAgIGVuY29kZWRfYmUgPSAnXHgwMFx4MDBceGZlXHhmZicgKyAnXHgwMFx4MDFceDAwXHgwMCcgKiAxMDI0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwMDAwJyAqIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzLnV0Zl8zMl9kZWNvZGUoZW5jb2RlZF9iZSlbMF0pCisKK2NsYXNzIFVURjMyTEVUZXN0KFJlYWRUZXN0KToKKyAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCisgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IlxVMDAwMTAyMDMiLmVuY29kZShzZWxmLmVuY29kaW5nKSwgIlx4MDNceDAyXHgwMVx4MDAiKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy51dGZfMzJfbGVfZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZiIsICJzdHJpY3QiLCBUcnVlKQorCisgICAgZGVmIHRlc3RfaXNzdWU4OTQxKHNlbGYpOgorICAgICAgICAjIElzc3VlICM4OTQxOiBpbnN1ZmZpY2llbnQgcmVzdWx0IGFsbG9jYXRpb24gd2hlbiBkZWNvZGluZyBpbnRvCisgICAgICAgICMgc3Vycm9nYXRlIHBhaXJzIG9uIFVDUy0yIGJ1aWxkcy4KKyAgICAgICAgZW5jb2RlZCA9ICdceDAwXHgwMFx4MDFceDAwJyAqIDEwMjQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTAwMDAnICogMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MudXRmXzMyX2xlX2RlY29kZShlbmNvZGVkKVswXSkKKworY2xhc3MgVVRGMzJCRVRlc3QoUmVhZFRlc3QpOgorICAgIGVuY29kaW5nID0gInV0Zi0zMi1iZSIKKworICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKKyAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXFUwMDAxMDIwMyIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCAiXHgwMFx4MDFceDAyXHgwMyIpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl8zMl9iZV9kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmIiwgInN0cmljdCIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTg5NDEoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzg5NDE6IGluc3VmZmljaWVudCByZXN1bHQgYWxsb2NhdGlvbiB3aGVuIGRlY29kaW5nIGludG8KKyAgICAgICAgIyBzdXJyb2dhdGUgcGFpcnMgb24gVUNTLTIgYnVpbGRzLgorICAgICAgICBlbmNvZGVkID0gJ1x4MDBceDAxXHgwMFx4MDAnICogMTAyNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDAwMCcgKiAxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy51dGZfMzJfYmVfZGVjb2RlKGVuY29kZWQpWzBdKQorCisKK2NsYXNzIFVURjE2VGVzdChSZWFkVGVzdCk6CisgICAgZW5jb2RpbmcgPSAidXRmLTE2IgorCisgICAgc3BhbWxlID0gJ1x4ZmZceGZlc1x4MDBwXHgwMGFceDAwbVx4MDBzXHgwMHBceDAwYVx4MDBtXHgwMCcKKyAgICBzcGFtYmUgPSAnXHhmZVx4ZmZceDAwc1x4MDBwXHgwMGFceDAwbVx4MDBzXHgwMHBceDAwYVx4MDBtJworCisgICAgZGVmIHRlc3Rfb25seV9vbmVfYm9tKHNlbGYpOgorICAgICAgICBfLF8scmVhZGVyLHdyaXRlciA9IGNvZGVjcy5sb29rdXAoc2VsZi5lbmNvZGluZykKKyAgICAgICAgIyBlbmNvZGUgc29tZSBzdHJlYW0KKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgZiA9IHdyaXRlcihzKQorICAgICAgICBmLndyaXRlKHUic3BhbSIpCisgICAgICAgIGYud3JpdGUodSJzcGFtIikKKyAgICAgICAgZCA9IHMuZ2V0dmFsdWUoKQorICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgZXhhY3RseSBvbmUgQk9NIGluIGl0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkID09IHNlbGYuc3BhbWxlIG9yIGQgPT0gc2VsZi5zcGFtYmUpCisgICAgICAgICMgdHJ5IHRvIHJlYWQgaXQgYmFjaworICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oZCkKKyAgICAgICAgZiA9IHJlYWRlcihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB1InNwYW1zcGFtIikKKworICAgIGRlZiB0ZXN0X2JhZGJvbShzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCJceGZmXHhmZiIpCisgICAgICAgIGYgPSBjb2RlY3MuZ2V0cmVhZGVyKHNlbGYuZW5jb2RpbmcpKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgZi5yZWFkKQorCisgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygiXHhmZlx4ZmZceGZmXHhmZiIpCisgICAgICAgIGYgPSBjb2RlY3MuZ2V0cmVhZGVyKHNlbGYuZW5jb2RpbmcpKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgZi5yZWFkKQorCisgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKAorICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZlxVMDAwMTAwMDAiLAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIHUiIiwgIyBmaXJzdCBieXRlIG9mIEJPTSByZWFkCisgICAgICAgICAgICAgICAgdSIiLCAjIHNlY29uZCBieXRlIG9mIEJPTSByZWFkID0+IGJ5dGVvcmRlciBrbm93bgorICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZlxVMDAwMTAwMDAiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9oYW5kbGVycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodSdcdWZmZmQnLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MudXRmXzE2X2RlY29kZSgnXHgwMScsICdyZXBsYWNlJywgVHJ1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHUnJywgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzLnV0Zl8xNl9kZWNvZGUoJ1x4MDEnLCAnaWdub3JlJywgVHJ1ZSkpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl8xNl9kZWNvZGUsICJceGZmIiwgInN0cmljdCIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9idWc2OTEyOTEoc2VsZik6CisgICAgICAgICMgRmlsZXMgYXJlIGFsd2F5cyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUsIGV2ZW4gaWYgbm8gYmluYXJ5IG1vZGUgd2FzCisgICAgICAgICMgc3BlY2lmaWVkLiAgVGhpcyBtZWFucyB0aGF0IG5vIGF1dG9tYXRpYyBjb252ZXJzaW9uIG9mICdcbicgaXMgZG9uZQorICAgICAgICAjIG9uIHJlYWRpbmcgYW5kIHdyaXRpbmcuCisgICAgICAgIHMxID0gdSdIZWxsb1xyXG53b3JsZFxyXG4nCisKKyAgICAgICAgcyA9IHMxLmVuY29kZShzZWxmLmVuY29kaW5nKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdF9zdXBwb3J0LnVubGluaywgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUocykKKyAgICAgICAgd2l0aCBjb2RlY3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAnVScsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpIGFzIHJlYWRlcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWQoKSwgczEpCisKK2NsYXNzIFVURjE2TEVUZXN0KFJlYWRUZXN0KToKKyAgICBlbmNvZGluZyA9ICJ1dGYtMTYtbGUiCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCisgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoYidceGZmJywgdSdcdWZmZmQnKSwKKyAgICAgICAgICAgIChiJ0FceDAwWicsIHUnQVx1ZmZmZCcpLAorICAgICAgICAgICAgKGInQVx4MDBCXHgwMENceDAwRFx4MDBaJywgdSdBQkNEXHVmZmZkJyksCisgICAgICAgICAgICAoYidceDAwXHhkOCcsIHUnXHVmZmZkJyksCisgICAgICAgICAgICAoYidceDAwXHhkOEEnLCB1J1x1ZmZmZCcpLAorICAgICAgICAgICAgKGInXHgwMFx4ZDhBXHgwMCcsIHUnXHVmZmZkQScpLAorICAgICAgICAgICAgKGInXHgwMFx4ZGNBXHgwMCcsIHUnXHVmZmZkQScpLAorICAgICAgICBdCisgICAgICAgIGZvciByYXcsIGV4cGVjdGVkIGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzE2X2xlX2RlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi0xNmxlJywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCisKK2NsYXNzIFVURjE2QkVUZXN0KFJlYWRUZXN0KToKKyAgICBlbmNvZGluZyA9ICJ1dGYtMTYtYmUiCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCisgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoYidceGZmJywgdSdcdWZmZmQnKSwKKyAgICAgICAgICAgIChiJ1x4MDBBXHhmZicsIHUnQVx1ZmZmZCcpLAorICAgICAgICAgICAgKGInXHgwMEFceDAwQlx4MDBDXHgwMERaJywgdSdBQkNEXHVmZmZkJyksCisgICAgICAgICAgICAoYidceGQ4XHgwMCcsIHUnXHVmZmZkJyksCisgICAgICAgICAgICAoYidceGQ4XHgwMFx4ZGMnLCB1J1x1ZmZmZCcpLAorICAgICAgICAgICAgKGInXHhkOFx4MDBceDAwQScsIHUnXHVmZmZkQScpLAorICAgICAgICAgICAgKGInXHhkY1x4MDBceDAwQScsIHUnXHVmZmZkQScpLAorICAgICAgICBdCisgICAgICAgIGZvciByYXcsIGV4cGVjdGVkIGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzE2X2JlX2RlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi0xNmJlJywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCisKK2NsYXNzIFVURjhUZXN0KFJlYWRUZXN0KToKKyAgICBlbmNvZGluZyA9ICJ1dGYtOCIKKworICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKKyAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTA3ZmZcdTA4MDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZlx1MDgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZlx1MDgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZlx1MDgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZlx1MDgwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZlx1MDgwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZlx1MDgwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZlx1MDgwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZlx1MDgwMFx1ZmZmZlxVMDAwMTAwMDAiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKK2NsYXNzIFVURjdUZXN0KFJlYWRUZXN0KToKKyAgICBlbmNvZGluZyA9ICJ1dGYtNyIKKworICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKKyAgICAgICAgICAgIHUiYSstYiIsCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgdSJhIiwKKyAgICAgICAgICAgICAgICB1ImEiLAorICAgICAgICAgICAgICAgIHUiYSsiLAorICAgICAgICAgICAgICAgIHUiYSstIiwKKyAgICAgICAgICAgICAgICB1ImErLWIiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKK2NsYXNzIFVURjE2RXhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzE2X2V4X2RlY29kZSwgIlx4ZmYiLCAic3RyaWN0IiwgMCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2JhZF9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy51dGZfMTZfZXhfZGVjb2RlKQorCitjbGFzcyBSZWFkQnVmZmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hcnJheShzZWxmKToKKyAgICAgICAgaW1wb3J0IGFycmF5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MucmVhZGJ1ZmZlcl9lbmNvZGUoYXJyYXkuYXJyYXkoImMiLCAic3BhbSIpKSwKKyAgICAgICAgICAgICgic3BhbSIsIDQpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5yZWFkYnVmZmVyX2VuY29kZSgiIiksICgiIiwgMCkpCisKKyAgICBkZWYgdGVzdF9iYWRfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVhZGJ1ZmZlcl9lbmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnJlYWRidWZmZXJfZW5jb2RlLCA0MikKKworY2xhc3MgQ2hhckJ1ZmZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5jaGFyYnVmZmVyX2VuY29kZSgic3BhbSIpLCAoInNwYW0iLCA0KSkKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5jaGFyYnVmZmVyX2VuY29kZSgiIiksICgiIiwgMCkpCisKKyAgICBkZWYgdGVzdF9iYWRfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuY2hhcmJ1ZmZlcl9lbmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmNoYXJidWZmZXJfZW5jb2RlLCA0MikKKworY2xhc3MgVVRGOFNpZ1Rlc3QoUmVhZFRlc3QpOgorICAgIGVuY29kaW5nID0gInV0Zi04LXNpZyIKKworICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKKyAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmZcdTA4MDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiIiwgIyBGaXJzdCBCT00gaGFzIGJlZW4gcmVhZCBhbmQgc2tpcHBlZAorICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSJcdWZlZmYiLCAjIFNlY29uZCBCT00gaGFzIGJlZW4gcmVhZCBhbmQgZW1pdHRlZAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMCIsICMgIlx4MDAiIHJlYWQgYW5kIGVtaXR0ZWQKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDAiLCAjIEZpcnN0IGJ5dGUgb2YgZW5jb2RlZCB1Ilx4ZmYiIHJlYWQKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmIiwgIyBTZWNvbmQgYnl0ZSBvZiBlbmNvZGVkIHUiXHhmZiIgcmVhZAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmYiLCAjIEZpcnN0IGJ5dGUgb2YgZW5jb2RlZCB1Ilx1MDdmZiIgcmVhZAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmYiLCAjIFNlY29uZCBieXRlIG9mIGVuY29kZWQgdSJcdTA3ZmYiIHJlYWQKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmXHUwODAwIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmXHUwODAwIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmXHUwODAwIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZlx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2J1ZzE2MDE1MDEoc2VsZik6CisgICAgICAgICMgU0YgYnVnICMxNjAxNTAxOiBjaGVjayB0aGF0IHRoZSBjb2RlYyB3b3JrcyB3aXRoIGEgYnVmZmVyCisgICAgICAgIHVuaWNvZGUoIlx4ZWZceGJiXHhiZiIsICJ1dGYtOC1zaWciKQorCisgICAgZGVmIHRlc3RfYm9tKHNlbGYpOgorICAgICAgICBkID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcigidXRmLTgtc2lnIikoKQorICAgICAgICBzID0gdSJzcGFtIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGVjb2RlKHMuZW5jb2RlKCJ1dGYtOC1zaWciKSksIHMpCisKKyAgICBkZWYgdGVzdF9zdHJlYW1fYm9tKHNlbGYpOgorICAgICAgICB1bmlzdHJpbmcgPSB1IkFCQ1x1MDBBMVx1MjIwMFhZWiIKKyAgICAgICAgYnl0ZXN0cmluZyA9IGNvZGVjcy5CT01fVVRGOCArICJBQkNceEMyXHhBMVx4RTJceDg4XHg4MFhZWiIKKworICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKCJ1dGYtOC1zaWciKQorICAgICAgICBmb3Igc2l6ZWhpbnQgaW4gW05vbmVdICsgcmFuZ2UoMSwgMTEpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgWzY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0XToKKyAgICAgICAgICAgIGlzdHJlYW0gPSByZWFkZXIoU3RyaW5nSU8uU3RyaW5nSU8oYnl0ZXN0cmluZykpCisgICAgICAgICAgICBvc3RyZWFtID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBpZiBzaXplaGludCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGlzdHJlYW0ucmVhZChzaXplaGludCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gaXN0cmVhbS5yZWFkKCkKKworICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIG9zdHJlYW0ud3JpdGUoZGF0YSkKKworICAgICAgICAgICAgZ290ID0gb3N0cmVhbS5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgdW5pc3RyaW5nKQorCisgICAgZGVmIHRlc3Rfc3RyZWFtX2JhcmUoc2VsZik6CisgICAgICAgIHVuaXN0cmluZyA9IHUiQUJDXHUwMEExXHUyMjAwWFlaIgorICAgICAgICBieXRlc3RyaW5nID0gIkFCQ1x4QzJceEExXHhFMlx4ODhceDgwWFlaIgorCisgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoInV0Zi04LXNpZyIpCisgICAgICAgIGZvciBzaXplaGludCBpbiBbTm9uZV0gKyByYW5nZSgxLCAxMSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICBbNjQsIDEyOCwgMjU2LCA1MTIsIDEwMjRdOgorICAgICAgICAgICAgaXN0cmVhbSA9IHJlYWRlcihTdHJpbmdJTy5TdHJpbmdJTyhieXRlc3RyaW5nKSkKKyAgICAgICAgICAgIG9zdHJlYW0gPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGlmIHNpemVoaW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gaXN0cmVhbS5yZWFkKHNpemVoaW50KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpc3RyZWFtLnJlYWQoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgb3N0cmVhbS53cml0ZShkYXRhKQorCisgICAgICAgICAgICBnb3QgPSBvc3RyZWFtLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCB1bmlzdHJpbmcpCisKK2NsYXNzIEVzY2FwZURlY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5lc2NhcGVfZGVjb2RlKCIiKSwgKCIiLCAwKSkKKworICAgIGRlZiB0ZXN0X3JhdyhzZWxmKToKKyAgICAgICAgZGVjb2RlID0gY29kZWNzLmVzY2FwZV9kZWNvZGUKKyAgICAgICAgZm9yIGIgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgIGIgPSBjaHIoYikKKyAgICAgICAgICAgIGlmIGIgIT0gJ1xcJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShiICsgJzAnKSwgKGIgKyAnMCcsIDIpKQorCisgICAgZGVmIHRlc3RfZXNjYXBlKHNlbGYpOgorICAgICAgICBkZWNvZGUgPSBjb2RlY3MuZXNjYXBlX2RlY29kZQorICAgICAgICBjaGVjayA9IGNvZGluZ19jaGVja2VyKHNlbGYsIGRlY29kZSkKKyAgICAgICAgY2hlY2soYiJbXFxcbl0iLCBiIltdIikKKyAgICAgICAgY2hlY2soYnInW1wiXScsIGInWyJdJykKKyAgICAgICAgY2hlY2soYnIiW1wnXSIsIGIiWyddIikKKyAgICAgICAgY2hlY2soYnIiW1xcXSIsIGJyIltcXSIpCisgICAgICAgIGNoZWNrKGJyIltcYV0iLCBiIltceDA3XSIpCisgICAgICAgIGNoZWNrKGJyIltcYl0iLCBiIltceDA4XSIpCisgICAgICAgIGNoZWNrKGJyIltcdF0iLCBiIltceDA5XSIpCisgICAgICAgIGNoZWNrKGJyIltcbl0iLCBiIltceDBhXSIpCisgICAgICAgIGNoZWNrKGJyIltcdl0iLCBiIltceDBiXSIpCisgICAgICAgIGNoZWNrKGJyIltcZl0iLCBiIltceDBjXSIpCisgICAgICAgIGNoZWNrKGJyIltccl0iLCBiIltceDBkXSIpCisgICAgICAgIGNoZWNrKGJyIltcN10iLCBiIltceDA3XSIpCisgICAgICAgIGNoZWNrKGJyIltcOF0iLCBiciJbXDhdIikKKyAgICAgICAgY2hlY2soYnIiW1w3OF0iLCBiIltceDA3OF0iKQorICAgICAgICBjaGVjayhiciJbXDQxXSIsIGIiWyFdIikKKyAgICAgICAgY2hlY2soYnIiW1w0MThdIiwgYiJbIThdIikKKyAgICAgICAgY2hlY2soYnIiW1wxMDFdIiwgYiJbQV0iKQorICAgICAgICBjaGVjayhiciJbXDEwMTBdIiwgYiJbQTBdIikKKyAgICAgICAgY2hlY2soYnIiW1w1MDFdIiwgYiJbQV0iKQorICAgICAgICBjaGVjayhiciJbXHg0MV0iLCBiIltBXSIpCisgICAgICAgIGNoZWNrKGJyIltcWDQxXSIsIGJyIltcWDQxXSIpCisgICAgICAgIGNoZWNrKGJyIltceDQxMF0iLCBiIltBMF0iKQorICAgICAgICBmb3IgYiBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgYiA9IGNocihiKQorICAgICAgICAgICAgaWYgYiBub3QgaW4gJ1xuIlwnXFxhYnRudmZyMDEyMzQ1Njd4JzoKKyAgICAgICAgICAgICAgICBjaGVjaygnXFwnICsgYiwgJ1xcJyArIGIpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIGRlY29kZSA9IGNvZGVjcy5lc2NhcGVfZGVjb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRlY29kZSwgYnIiXHgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZWNvZGUsIGJyIltceF0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShiciJbXHhdXHgiLCAiaWdub3JlIiksIChiIltdIiwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKGJyIltceF1ceCIsICJyZXBsYWNlIiksIChiIls/XT8iLCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGVjb2RlLCBiciJceDAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZWNvZGUsIGJyIltceDBdIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUoYnIiW1x4MF1ceDAiLCAiaWdub3JlIiksIChiIltdIiwgOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKGJyIltceDBdXHgwIiwgInJlcGxhY2UiKSwgKGIiWz9dPyIsIDgpKQorCitjbGFzcyBSZWNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlY29kaW5nKHNlbGYpOgorICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBmMiA9IGNvZGVjcy5FbmNvZGVkRmlsZShmLCAidW5pY29kZV9pbnRlcm5hbCIsICJ1dGYtOCIpCisgICAgICAgIGYyLndyaXRlKHUiYSIpCisgICAgICAgIGYyLmNsb3NlKCkKKyAgICAgICAgIyBQeXRob24gdXNlZCB0byBjcmFzaCBvbiB0aGlzIGF0IGV4aXQgYmVjYXVzZSBvZiBhIHJlZmNvdW50CisgICAgICAgICMgYnVnIGluIF9jb2RlY3Ntb2R1bGUuYworCisjIEZyb20gUkZDIDM0OTIKK3B1bnljb2RlX3Rlc3RjYXNlcyA9IFsKKyAgICAjIEEgQXJhYmljIChFZ3lwdGlhbik6CisgICAgKHUiXHUwNjQ0XHUwNjRBXHUwNjQ3XHUwNjQ1XHUwNjI3XHUwNjI4XHUwNjJBXHUwNjQzXHUwNjQ0IgorICAgICB1Ilx1MDY0NVx1MDY0OFx1MDYzNFx1MDYzOVx1MDYzMVx1MDYyOFx1MDY0QVx1MDYxRiIsCisgICAgICJlZ2JwZGFqNmJ1NGJ4ZmdlaGZ2d3huIiksCisgICAgIyBCIENoaW5lc2UgKHNpbXBsaWZpZWQpOgorICAgICh1Ilx1NEVENlx1NEVFQ1x1NEUzQVx1NEVDMFx1NEU0OFx1NEUwRFx1OEJGNFx1NEUyRFx1NjU4NyIsCisgICAgICJpaHF3Y3JiNGN2OGE4ZHFnMDU2cHFqeWUiKSwKKyAgICAjIEMgQ2hpbmVzZSAodHJhZGl0aW9uYWwpOgorICAgICh1Ilx1NEVENlx1NTAxMVx1NzIzMlx1NEVDMFx1OUVCRFx1NEUwRFx1OEFBQVx1NEUyRFx1NjU4NyIsCisgICAgICJpaHF3Y3R2emM5MWY2NTlkcnNzM3g4Ym8weWIiKSwKKyAgICAjIEQgQ3plY2g6IFBybzxjY2Fyb24+cHJvc3Q8ZWNhcm9uPm5lbWx1djxpYWN1dGU+PGNjYXJvbj5lc2t5CisgICAgKHUiXHUwMDUwXHUwMDcyXHUwMDZGXHUwMTBEXHUwMDcwXHUwMDcyXHUwMDZGXHUwMDczXHUwMDc0IgorICAgICB1Ilx1MDExQlx1MDA2RVx1MDA2NVx1MDA2RFx1MDA2Q1x1MDA3NVx1MDA3Nlx1MDBFRFx1MDEwRCIKKyAgICAgdSJcdTAwNjVcdTAwNzNcdTAwNkJcdTAwNzkiLAorICAgICAiUHJvcHJvc3RuZW1sdXZlc2t5LXV5YjI0ZG1hNDFhIiksCisgICAgIyBFIEhlYnJldzoKKyAgICAodSJcdTA1RENcdTA1REVcdTA1RDRcdTA1RDRcdTA1RERcdTA1RTRcdTA1RTlcdTA1RDVcdTA1RDgiCisgICAgIHUiXHUwNURDXHUwNUQwXHUwNURFXHUwNUQzXHUwNUQxXHUwNUU4XHUwNUQ5XHUwNUREXHUwNUUyIgorICAgICB1Ilx1MDVEMVx1MDVFOFx1MDVEOVx1MDVFQSIsCisgICAgICI0ZGJjYWdkYWh5bWJ4ZWtoZWg2ZTBhN2ZlaTBiIiksCisgICAgIyBGIEhpbmRpIChEZXZhbmFnYXJpKToKKyAgICAodSJcdTA5MkZcdTA5MzlcdTA5MzJcdTA5NEJcdTA5MTdcdTA5MzlcdTA5M0ZcdTA5MjhcdTA5NEQiCisgICAgdSJcdTA5MjZcdTA5NDBcdTA5MTVcdTA5NERcdTA5MkZcdTA5NEJcdTA5MDJcdTA5MjhcdTA5MzkiCisgICAgdSJcdTA5NDBcdTA5MDJcdTA5MkNcdTA5NEJcdTA5MzJcdTA5MzhcdTA5MTVcdTA5MjRcdTA5NDciCisgICAgdSJcdTA5MzlcdTA5NDhcdTA5MDIiLAorICAgICJpMWJhYTdlY2k5Z2xyZDliMmFlMWJqMGhmY2dnNml5YWY4bzBhMWRpZzBjZCIpLAorCisgICAgIyhHKSBKYXBhbmVzZSAoa2FuamkgYW5kIGhpcmFnYW5hKToKKyAgICAodSJcdTMwNkFcdTMwNUNcdTMwN0ZcdTMwOTNcdTMwNkFcdTY1RTVcdTY3MkNcdThBOUVcdTMwOTIiCisgICAgdSJcdThBNzFcdTMwNTdcdTMwNjZcdTMwNEZcdTMwOENcdTMwNkFcdTMwNDRcdTMwNkVcdTMwNEIiLAorICAgICAibjhqb2s1YXk1ZHphYmQ1YnltOWYwY201Njg1cnJqZXRyNnBkeGEiKSwKKworICAgICMgKEgpIEtvcmVhbiAoSGFuZ3VsIHN5bGxhYmxlcyk6CisgICAgKHUiXHVDMTM4XHVBQ0M0XHVDNzU4XHVCQUE4XHVCNEUwXHVDMEFDXHVCNzhDXHVCNEU0XHVDNzc0IgorICAgICB1Ilx1RDU1Q1x1QUQ2RFx1QzVCNFx1Qjk3Q1x1Qzc3NFx1RDU3NFx1RDU1Q1x1QjJFNFx1QkE3NCIKKyAgICAgdSJcdUM1QkNcdUI5QzhcdUIwOThcdUM4OEJcdUM3NDRcdUFFNEMiLAorICAgICAiOTg5YW9tc3ZpNWU4M2RiMWQyYTM1NWN2MWUwdmFrMWR3cnY5M2Q1eGJoMTVhMGR0MzBhNWoiCisgICAgICJwc2Q4NzljY202ZmVhOThjIiksCisKKyAgICAjIChJKSBSdXNzaWFuIChDeXJpbGxpYyk6CisgICAgKHUiXHUwNDNGXHUwNDNFXHUwNDQ3XHUwNDM1XHUwNDNDXHUwNDQzXHUwNDM2XHUwNDM1XHUwNDNFIgorICAgICB1Ilx1MDQzRFx1MDQzOFx1MDQzRFx1MDQzNVx1MDQzM1x1MDQzRVx1MDQzMlx1MDQzRVx1MDQ0MCIKKyAgICAgdSJcdTA0NEZcdTA0NDJcdTA0M0ZcdTA0M0VcdTA0NDBcdTA0NDNcdTA0NDFcdTA0NDFcdTA0M0EiCisgICAgIHUiXHUwNDM4IiwKKyAgICAgImIxYWJmYWFlcGRybm5iZ2VmYmFEb3Rjd2F0bXEyZzRsIiksCisKKyAgICAjIChKKSBTcGFuaXNoOiBQb3JxdTxlYWN1dGU+bm9wdWVkZW5zaW1wbGVtZW50ZWhhYmxhcmVuRXNwYTxudGlsZGU+b2wKKyAgICAodSJcdTAwNTBcdTAwNkZcdTAwNzJcdTAwNzFcdTAwNzVcdTAwRTlcdTAwNkVcdTAwNkZcdTAwNzAiCisgICAgIHUiXHUwMDc1XHUwMDY1XHUwMDY0XHUwMDY1XHUwMDZFXHUwMDczXHUwMDY5XHUwMDZEXHUwMDcwIgorICAgICB1Ilx1MDA2Q1x1MDA2NVx1MDA2RFx1MDA2NVx1MDA2RVx1MDA3NFx1MDA2NVx1MDA2OFx1MDA2MSIKKyAgICAgdSJcdTAwNjJcdTAwNkNcdTAwNjFcdTAwNzJcdTAwNjVcdTAwNkVcdTAwNDVcdTAwNzNcdTAwNzAiCisgICAgIHUiXHUwMDYxXHUwMEYxXHUwMDZGXHUwMDZDIiwKKyAgICAgIlBvcnF1bm9wdWVkZW5zaW1wbGVtZW50ZWhhYmxhcmVuRXNwYW9sLWZtZDU2YSIpLAorCisgICAgIyAoSykgVmlldG5hbWVzZToKKyAgICAjICBUPGFkb3RiZWxvdz5pc2FvaDxvZG90YmVsb3c+a2g8b2NpcmM+bmd0aDxlY2lyY2hvb2thYm92ZT5jaFwKKyAgICAjICAgPGlob29rYWJvdmU+bjxvYWN1dGU+aXRpPGVjaXJjYWN1dGU+bmdWaTxlY2lyY2RvdGJlbG93PnQKKyAgICAodSJcdTAwNTRcdTFFQTFcdTAwNjlcdTAwNzNcdTAwNjFcdTAwNkZcdTAwNjhcdTFFQ0RcdTAwNkIiCisgICAgIHUiXHUwMDY4XHUwMEY0XHUwMDZFXHUwMDY3XHUwMDc0XHUwMDY4XHUxRUMzXHUwMDYzXHUwMDY4IgorICAgICB1Ilx1MUVDOVx1MDA2RVx1MDBGM1x1MDA2OVx1MDA3NFx1MDA2OVx1MUVCRlx1MDA2RVx1MDA2NyIKKyAgICAgdSJcdTAwNTZcdTAwNjlcdTFFQzdcdTAwNzQiLAorICAgICAiVGlzYW9oa2huZ3RoY2huaXRpbmdWaXQta2pjcjgyNjhxeXhhZmQyZjFiOWciKSwKKworICAgICMoTCkgMzxuZW4+QjxndW1pPjxraW5wYWNoaT48c2Vuc2VpPgorICAgICh1Ilx1MDAzM1x1NUU3NFx1MDA0Mlx1N0Q0NFx1OTFEMVx1NTE2Qlx1NTE0OFx1NzUxRiIsCisgICAgICIzQi13dzRjNWUxODBlNTc1YTY1bHN5MmIiKSwKKworICAgICMgKE0pIDxhbXVybz48bmFtaWU+LXdpdGgtU1VQRVItTU9OS0VZUworICAgICh1Ilx1NUI4OVx1NUJBNFx1NTk0OFx1N0Y4RVx1NjA3NVx1MDAyRFx1MDA3N1x1MDA2OVx1MDA3NCIKKyAgICAgdSJcdTAwNjhcdTAwMkRcdTAwNTNcdTAwNTVcdTAwNTBcdTAwNDVcdTAwNTJcdTAwMkRcdTAwNEQiCisgICAgIHUiXHUwMDRGXHUwMDRFXHUwMDRCXHUwMDQ1XHUwMDU5XHUwMDUzIiwKKyAgICAgIi13aXRoLVNVUEVSLU1PTktFWVMtcGM1OGFnODBhOHFhaTAwZzduOW4iKSwKKworICAgICMgKE4pIEhlbGxvLUFub3RoZXItV2F5LTxzb3Jlem9yZT48bm8+PGJhc2hvPgorICAgICh1Ilx1MDA0OFx1MDA2NVx1MDA2Q1x1MDA2Q1x1MDA2Rlx1MDAyRFx1MDA0MVx1MDA2RVx1MDA2RiIKKyAgICAgdSJcdTAwNzRcdTAwNjhcdTAwNjVcdTAwNzJcdTAwMkRcdTAwNTdcdTAwNjFcdTAwNzlcdTAwMkQiCisgICAgIHUiXHUzMDVEXHUzMDhDXHUzMDVFXHUzMDhDXHUzMDZFXHU1ODM0XHU2MjQwIiwKKyAgICAgIkhlbGxvLUFub3RoZXItV2F5LS1mYzRxdWEwNWF1d2IzNjc0dmZyMGIiKSwKKworICAgICMgKE8pIDxoaXRvdHN1Pjx5YW5lPjxubz48c2hpdGE+MgorICAgICh1Ilx1MzA3Mlx1MzA2OFx1MzA2NFx1NUM0Qlx1NjgzOVx1MzA2RVx1NEUwQlx1MDAzMiIsCisgICAgICIyLXU5dGx6cjk3NTZidDN1YzB2IiksCisKKyAgICAjIChQKSBNYWppPGRlPktvaTxzdXJ1PjU8YnlvdT48bWFlPgorICAgICh1Ilx1MDA0RFx1MDA2MVx1MDA2QVx1MDA2OVx1MzA2N1x1MDA0Qlx1MDA2Rlx1MDA2OVx1MzA1OSIKKyAgICAgdSJcdTMwOEJcdTAwMzVcdTc5RDJcdTUyNEQiLAorICAgICAiTWFqaUtvaTUtNzgzZ3VlNnF6MDc1YXptNWUiKSwKKworICAgICAjIChRKSA8cGFmaWk+ZGU8cnVuYmE+CisgICAgKHUiXHUzMEQxXHUzMEQ1XHUzMEEzXHUzMEZDXHUwMDY0XHUwMDY1XHUzMEVCXHUzMEYzXHUzMEQwIiwKKyAgICAgImRlLWpnNGF2aGJ5MW5vYzBkIiksCisKKyAgICAjIChSKSA8c29ubz48c3VwaWlkbz48ZGU+CisgICAgKHUiXHUzMDVEXHUzMDZFXHUzMEI5XHUzMEQ0XHUzMEZDXHUzMEM5XHUzMDY3IiwKKyAgICAgImQ5anVhdTQxYXdjemN6cCIpLAorCisgICAgIyAoUykgLT4gJDEuMDAgPC0KKyAgICAodSJcdTAwMkRcdTAwM0VcdTAwMjBcdTAwMjRcdTAwMzFcdTAwMkVcdTAwMzBcdTAwMzBcdTAwMjAiCisgICAgIHUiXHUwMDNDXHUwMDJEIiwKKyAgICAgIi0+ICQxLjAwIDwtLSIpCisgICAgXQorCitmb3IgaSBpbiBwdW55Y29kZV90ZXN0Y2FzZXM6CisgICAgaWYgbGVuKGkpIT0yOgorICAgICAgICBwcmludCByZXByKGkpCisKK2NsYXNzIFB1bnljb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgorICAgICAgICBmb3IgdW5pLCBwdW55IGluIHB1bnljb2RlX3Rlc3RjYXNlczoKKyAgICAgICAgICAgICMgTmVlZCB0byBjb252ZXJ0IGJvdGggc3RyaW5ncyB0byBsb3dlciBjYXNlLCBzaW5jZQorICAgICAgICAgICAgIyBzb21lIG9mIHRoZSBleHRlbmRlZCBlbmNvZGluZ3MgdXNlIHVwcGVyIGNhc2UsIGJ1dCBvdXIKKyAgICAgICAgICAgICMgY29kZSBwcm9kdWNlcyBvbmx5IGxvd2VyIGNhc2UuIENvbnZlcnRpbmcganVzdCBwdW55IHRvCisgICAgICAgICAgICAjIGxvd2VyIGlzIGFsc28gaW5zdWZmaWNpZW50LCBzaW5jZSBzb21lIG9mIHRoZSBpbnB1dCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAjIGFyZSB1cHBlciBjYXNlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmkuZW5jb2RlKCJwdW55Y29kZSIpLmxvd2VyKCksIHB1bnkubG93ZXIoKSkKKworICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKKyAgICAgICAgZm9yIHVuaSwgcHVueSBpbiBwdW55Y29kZV90ZXN0Y2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaSwgcHVueS5kZWNvZGUoInB1bnljb2RlIikpCisKK2NsYXNzIFVuaWNvZGVJbnRlcm5hbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2J1ZzEyNTEzMDAoc2VsZik6CisgICAgICAgICMgRGVjb2Rpbmcgd2l0aCB1bmljb2RlX2ludGVybmFsIHVzZWQgdG8gbm90IGNvcnJlY3RseSBoYW5kbGUgImNvZGUKKyAgICAgICAgIyBwb2ludHMiIGFib3ZlIDB4MTBmZmZmIG9uIFVDUy00IGJ1aWxkcy4KKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPiAweGZmZmY6CisgICAgICAgICAgICBvayA9IFsKKyAgICAgICAgICAgICAgICAoIlx4MDBceDEwXHhmZlx4ZmYiLCB1IlxVMDAxMGZmZmYiKSwKKyAgICAgICAgICAgICAgICAoIlx4MDBceDAwXHgwMVx4MDEiLCB1IlxVMDAwMDAxMDEiKSwKKyAgICAgICAgICAgICAgICAoIiIsIHUiIiksCisgICAgICAgICAgICBdCisgICAgICAgICAgICBub3Rfb2sgPSBbCisgICAgICAgICAgICAgICAgIlx4N2ZceGZmXHhmZlx4ZmYiLAorICAgICAgICAgICAgICAgICJceDgwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAgICAgICAiXHg4MVx4MDBceDAwXHgwMCIsCisgICAgICAgICAgICAgICAgIlx4MDAiLAorICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgICBdCisgICAgICAgICAgICBmb3IgaW50ZXJuYWwsIHVuaSBpbiBvazoKKyAgICAgICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgorICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA9ICIiLmpvaW4ocmV2ZXJzZWQoaW50ZXJuYWwpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pLCBpbnRlcm5hbC5kZWNvZGUoInVuaWNvZGVfaW50ZXJuYWwiKSkKKyAgICAgICAgICAgIGZvciBpbnRlcm5hbCBpbiBub3Rfb2s6CisgICAgICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwgPSAiIi5qb2luKHJldmVyc2VkKGludGVybmFsKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGludGVybmFsLmRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgInVuaWNvZGVfaW50ZXJuYWwiKQorCisgICAgZGVmIHRlc3RfZGVjb2RlX2Vycm9yX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlID4gMHhmZmZmOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MTFceDExXHgwMCIuZGVjb2RlKCJ1bmljb2RlX2ludGVybmFsIikKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IsIGV4OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInVuaWNvZGVfaW50ZXJuYWwiLCBleC5lbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJceDAwXHgwMFx4MDBceDAwXHgwMFx4MTFceDExXHgwMCIsIGV4Lm9iamVjdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQsIGV4LnN0YXJ0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOCwgZXguZW5kKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3RfZGVjb2RlX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA+IDB4ZmZmZjoKKyAgICAgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigiVW5pY29kZUludGVybmFsVGVzdCIsIGNvZGVjcy5pZ25vcmVfZXJyb3JzKQorICAgICAgICAgICAgZGVjb2RlciA9IGNvZGVjcy5nZXRkZWNvZGVyKCJ1bmljb2RlX2ludGVybmFsIikKKyAgICAgICAgICAgIGFiID0gdSJhYiIuZW5jb2RlKCJ1bmljb2RlX2ludGVybmFsIikKKyAgICAgICAgICAgIGlnbm9yZWQgPSBkZWNvZGVyKCIlc1x4MjJceDIyXHgyMlx4MjIlcyIgJSAoYWJbOjRdLCBhYls0Ol0pLAorICAgICAgICAgICAgICAgICJVbmljb2RlSW50ZXJuYWxUZXN0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHUiYWIiLCAxMiksIGlnbm9yZWQpCisKKyAgICBkZWYgdGVzdF9lbmNvZGVfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIElzc3VlIDM3MzkKKyAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRlbmNvZGVyKCJ1bmljb2RlX2ludGVybmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyKHUiYSIpWzFdLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIodSJceGU5XHUwMTQyIilbMV0sIDIpCisKKyAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRlbmNvZGVyKCJzdHJpbmctZXNjYXBlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyKHInXHgwMCcpWzFdLCA0KQorCisjIEZyb20gaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmlkbi9kcmFmdC1qb3NlZnNzb24taWRuLXRlc3QtdmVjdG9ycy5odG1sCituYW1lcHJlcF90ZXN0cyA9IFsKKyAgICAjIDMuMSBNYXAgdG8gbm90aGluZy4KKyAgICAoJ2Zvb1x4YzJceGFkXHhjZFx4OGZceGUxXHhhMFx4ODZceGUxXHhhMFx4OGJiYXInCisgICAgICdceGUyXHg4MFx4OGJceGUyXHg4MVx4YTBiYXpceGVmXHhiOFx4ODBceGVmXHhiOFx4ODhceGVmJworICAgICAnXHhiOFx4OGZceGVmXHhiYlx4YmYnLAorICAgICAnZm9vYmFyYmF6JyksCisgICAgIyAzLjIgQ2FzZSBmb2xkaW5nIEFTQ0lJIFUrMDA0MyBVKzAwNDEgVSswMDQ2IFUrMDA0NS4KKyAgICAoJ0NBRkUnLAorICAgICAnY2FmZScpLAorICAgICMgMy4zIENhc2UgZm9sZGluZyA4Yml0IFUrMDBERiAoZ2VybWFuIHNoYXJwIHMpLgorICAgICMgVGhlIG9yaWdpbmFsIHRlc3QgY2FzZSBpcyBib2d1czsgaXQgc2F5cyBceGMzXHhkZgorICAgICgnXHhjM1x4OWYnLAorICAgICAnc3MnKSwKKyAgICAjIDMuNCBDYXNlIGZvbGRpbmcgVSswMTMwICh0dXJraXNoIGNhcGl0YWwgSSB3aXRoIGRvdCkuCisgICAgKCdceGM0XHhiMCcsCisgICAgICdpXHhjY1x4ODcnKSwKKyAgICAjIDMuNSBDYXNlIGZvbGRpbmcgbXVsdGlieXRlIFUrMDE0MyBVKzAzN0EuCisgICAgKCdceGM1XHg4M1x4Y2RceGJhJywKKyAgICAgJ1x4YzVceDg0IFx4Y2VceGI5JyksCisgICAgIyAzLjYgQ2FzZSBmb2xkaW5nIFUrMjEyMSBVKzMzQzYgVSsxRDdCQi4KKyAgICAjIFhYWDogc2tpcCB0aGlzIGFzIGl0IGZhaWxzIGluIFVDUy0yIG1vZGUKKyAgICAjKCdceGUyXHg4NFx4YTFceGUzXHg4Zlx4ODZceGYwXHg5ZFx4OWVceGJiJywKKyAgICAjICd0ZWxjXHhlMlx4ODhceDk1a2dceGNmXHg4MycpLAorICAgIChOb25lLCBOb25lKSwKKyAgICAjIDMuNyBOb3JtYWxpemF0aW9uIG9mIFUrMDA2YSBVKzAzMGMgVSswMEEwIFUrMDBBQS4KKyAgICAoJ2pceGNjXHg4Y1x4YzJceGEwXHhjMlx4YWEnLAorICAgICAnXHhjN1x4YjAgYScpLAorICAgICMgMy44IENhc2UgZm9sZGluZyBVKzFGQjcgYW5kIG5vcm1hbGl6YXRpb24uCisgICAgKCdceGUxXHhiZVx4YjcnLAorICAgICAnXHhlMVx4YmVceGI2XHhjZVx4YjknKSwKKyAgICAjIDMuOSBTZWxmLXJldmVydGluZyBjYXNlIGZvbGRpbmcgVSswMUYwIGFuZCBub3JtYWxpemF0aW9uLgorICAgICMgVGhlIG9yaWdpbmFsIHRlc3QgY2FzZSBpcyBib2d1cywgaXQgc2F5cyBgXHhjN1x4ZjAnCisgICAgKCdceGM3XHhiMCcsCisgICAgICdceGM3XHhiMCcpLAorICAgICMgMy4xMCBTZWxmLXJldmVydGluZyBjYXNlIGZvbGRpbmcgVSswMzkwIGFuZCBub3JtYWxpemF0aW9uLgorICAgICgnXHhjZVx4OTAnLAorICAgICAnXHhjZVx4OTAnKSwKKyAgICAjIDMuMTEgU2VsZi1yZXZlcnRpbmcgY2FzZSBmb2xkaW5nIFUrMDNCMCBhbmQgbm9ybWFsaXphdGlvbi4KKyAgICAoJ1x4Y2VceGIwJywKKyAgICAgJ1x4Y2VceGIwJyksCisgICAgIyAzLjEyIFNlbGYtcmV2ZXJ0aW5nIGNhc2UgZm9sZGluZyBVKzFFOTYgYW5kIG5vcm1hbGl6YXRpb24uCisgICAgKCdceGUxXHhiYVx4OTYnLAorICAgICAnXHhlMVx4YmFceDk2JyksCisgICAgIyAzLjEzIFNlbGYtcmV2ZXJ0aW5nIGNhc2UgZm9sZGluZyBVKzFGNTYgYW5kIG5vcm1hbGl6YXRpb24uCisgICAgKCdceGUxXHhiZFx4OTYnLAorICAgICAnXHhlMVx4YmRceDk2JyksCisgICAgIyAzLjE0IEFTQ0lJIHNwYWNlIGNoYXJhY3RlciBVKzAwMjAuCisgICAgKCcgJywKKyAgICAgJyAnKSwKKyAgICAjIDMuMTUgTm9uLUFTQ0lJIDhiaXQgc3BhY2UgY2hhcmFjdGVyIFUrMDBBMC4KKyAgICAoJ1x4YzJceGEwJywKKyAgICAgJyAnKSwKKyAgICAjIDMuMTYgTm9uLUFTQ0lJIG11bHRpYnl0ZSBzcGFjZSBjaGFyYWN0ZXIgVSsxNjgwLgorICAgICgnXHhlMVx4OWFceDgwJywKKyAgICAgTm9uZSksCisgICAgIyAzLjE3IE5vbi1BU0NJSSBtdWx0aWJ5dGUgc3BhY2UgY2hhcmFjdGVyIFUrMjAwMC4KKyAgICAoJ1x4ZTJceDgwXHg4MCcsCisgICAgICcgJyksCisgICAgIyAzLjE4IFplcm8gV2lkdGggU3BhY2UgVSsyMDBiLgorICAgICgnXHhlMlx4ODBceDhiJywKKyAgICAgJycpLAorICAgICMgMy4xOSBOb24tQVNDSUkgbXVsdGlieXRlIHNwYWNlIGNoYXJhY3RlciBVKzMwMDAuCisgICAgKCdceGUzXHg4MFx4ODAnLAorICAgICAnICcpLAorICAgICMgMy4yMCBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMgVSswMDEwIFUrMDA3Ri4KKyAgICAoJ1x4MTBceDdmJywKKyAgICAgJ1x4MTBceDdmJyksCisgICAgIyAzLjIxIE5vbi1BU0NJSSA4Yml0IGNvbnRyb2wgY2hhcmFjdGVyIFUrMDA4NS4KKyAgICAoJ1x4YzJceDg1JywKKyAgICAgTm9uZSksCisgICAgIyAzLjIyIE5vbi1BU0NJSSBtdWx0aWJ5dGUgY29udHJvbCBjaGFyYWN0ZXIgVSsxODBFLgorICAgICgnXHhlMVx4YTBceDhlJywKKyAgICAgTm9uZSksCisgICAgIyAzLjIzIFplcm8gV2lkdGggTm8tQnJlYWsgU3BhY2UgVStGRUZGLgorICAgICgnXHhlZlx4YmJceGJmJywKKyAgICAgJycpLAorICAgICMgMy4yNCBOb24tQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgVSsxRDE3NS4KKyAgICAoJ1x4ZjBceDlkXHg4NVx4YjUnLAorICAgICBOb25lKSwKKyAgICAjIDMuMjUgUGxhbmUgMCBwcml2YXRlIHVzZSBjaGFyYWN0ZXIgVStGMTIzLgorICAgICgnXHhlZlx4ODRceGEzJywKKyAgICAgTm9uZSksCisgICAgIyAzLjI2IFBsYW5lIDE1IHByaXZhdGUgdXNlIGNoYXJhY3RlciBVK0YxMjM0LgorICAgICgnXHhmM1x4YjFceDg4XHhiNCcsCisgICAgIE5vbmUpLAorICAgICMgMy4yNyBQbGFuZSAxNiBwcml2YXRlIHVzZSBjaGFyYWN0ZXIgVSsxMEYyMzQuCisgICAgKCdceGY0XHg4Zlx4ODhceGI0JywKKyAgICAgTm9uZSksCisgICAgIyAzLjI4IE5vbi1jaGFyYWN0ZXIgY29kZSBwb2ludCBVKzhGRkZFLgorICAgICgnXHhmMlx4OGZceGJmXHhiZScsCisgICAgIE5vbmUpLAorICAgICMgMy4yOSBOb24tY2hhcmFjdGVyIGNvZGUgcG9pbnQgVSsxMEZGRkYuCisgICAgKCdceGY0XHg4Zlx4YmZceGJmJywKKyAgICAgTm9uZSksCisgICAgIyAzLjMwIFN1cnJvZ2F0ZSBjb2RlIFUrREY0Mi4KKyAgICAoJ1x4ZWRceGJkXHg4MicsCisgICAgIE5vbmUpLAorICAgICMgMy4zMSBOb24tcGxhaW4gdGV4dCBjaGFyYWN0ZXIgVStGRkZELgorICAgICgnXHhlZlx4YmZceGJkJywKKyAgICAgTm9uZSksCisgICAgIyAzLjMyIElkZW9ncmFwaGljIGRlc2NyaXB0aW9uIGNoYXJhY3RlciBVKzJGRjUuCisgICAgKCdceGUyXHhiZlx4YjUnLAorICAgICBOb25lKSwKKyAgICAjIDMuMzMgRGlzcGxheSBwcm9wZXJ0eSBjaGFyYWN0ZXIgVSswMzQxLgorICAgICgnXHhjZFx4ODEnLAorICAgICAnXHhjY1x4ODEnKSwKKyAgICAjIDMuMzQgTGVmdC10by1yaWdodCBtYXJrIFUrMjAwRS4KKyAgICAoJ1x4ZTJceDgwXHg4ZScsCisgICAgIE5vbmUpLAorICAgICMgMy4zNSBEZXByZWNhdGVkIFUrMjAyQS4KKyAgICAoJ1x4ZTJceDgwXHhhYScsCisgICAgIE5vbmUpLAorICAgICMgMy4zNiBMYW5ndWFnZSB0YWdnaW5nIGNoYXJhY3RlciBVK0UwMDAxLgorICAgICgnXHhmM1x4YTBceDgwXHg4MScsCisgICAgIE5vbmUpLAorICAgICMgMy4zNyBMYW5ndWFnZSB0YWdnaW5nIGNoYXJhY3RlciBVK0UwMDQyLgorICAgICgnXHhmM1x4YTBceDgxXHg4MicsCisgICAgIE5vbmUpLAorICAgICMgMy4zOCBCaWRpOiBSYW5kQUxDYXQgY2hhcmFjdGVyIFUrMDVCRSBhbmQgTENhdCBjaGFyYWN0ZXJzLgorICAgICgnZm9vXHhkNlx4YmViYXInLAorICAgICBOb25lKSwKKyAgICAjIDMuMzkgQmlkaTogUmFuZEFMQ2F0IGNoYXJhY3RlciBVK0ZENTAgYW5kIExDYXQgY2hhcmFjdGVycy4KKyAgICAoJ2Zvb1x4ZWZceGI1XHg5MGJhcicsCisgICAgIE5vbmUpLAorICAgICMgMy40MCBCaWRpOiBSYW5kQUxDYXQgY2hhcmFjdGVyIFUrRkIzOCBhbmQgTENhdCBjaGFyYWN0ZXJzLgorICAgICgnZm9vXHhlZlx4YjlceGI2YmFyJywKKyAgICAgJ2ZvbyBceGQ5XHg4ZWJhcicpLAorICAgICMgMy40MSBCaWRpOiBSYW5kQUxDYXQgd2l0aG91dCB0cmFpbGluZyBSYW5kQUxDYXQgVSswNjI3IFUrMDAzMS4KKyAgICAoJ1x4ZDhceGE3MScsCisgICAgIE5vbmUpLAorICAgICMgMy40MiBCaWRpOiBSYW5kQUxDYXQgY2hhcmFjdGVyIFUrMDYyNyBVKzAwMzEgVSswNjI4LgorICAgICgnXHhkOFx4YTcxXHhkOFx4YTgnLAorICAgICAnXHhkOFx4YTcxXHhkOFx4YTgnKSwKKyAgICAjIDMuNDMgVW5hc3NpZ25lZCBjb2RlIHBvaW50IFUrRTAwMDIuCisgICAgIyBTa2lwIHRoaXMgdGVzdCBhcyB3ZSBhbGxvdyB1bmFzc2lnbmVkCisgICAgIygnXHhmM1x4YTBceDgwXHg4MicsCisgICAgIyBOb25lKSwKKyAgICAoTm9uZSwgTm9uZSksCisgICAgIyAzLjQ0IExhcmdlciB0ZXN0IChzaHJpbmtpbmcpLgorICAgICMgT3JpZ2luYWwgdGVzdCBjYXNlIHJlYWRzIFx4YzNceGRmCisgICAgKCdYXHhjMlx4YWRceGMzXHg5Zlx4YzRceGIwXHhlMlx4ODRceGExalx4Y2NceDhjXHhjMlx4YTBceGMyJworICAgICAnXHhhYVx4Y2VceGIwXHhlMlx4ODBceDgwJywKKyAgICAgJ3hzc2lceGNjXHg4N3RlbFx4YzdceGIwIGFceGNlXHhiMCAnKSwKKyAgICAjIDMuNDUgTGFyZ2VyIHRlc3QgKGV4cGFuZGluZykuCisgICAgIyBPcmlnaW5hbCB0ZXN0IGNhc2UgcmVhZHMgXHhjM1x4OWYKKyAgICAoJ1hceGMzXHg5Zlx4ZTNceDhjXHg5Nlx4YzRceGIwXHhlMlx4ODRceGExXHhlMlx4OTJceDlmXHhlM1x4OGMnCisgICAgICdceDgwJywKKyAgICAgJ3hzc1x4ZTNceDgyXHhhZFx4ZTNceDgzXHhhZFx4ZTNceDgzXHhhMVx4ZTNceDgzXHhiY1x4ZTMnCisgICAgICdceDgzXHg4OFx4ZTNceDgzXHhhYmlceGNjXHg4N3RlbFx4MjhkXHgyOVx4ZTNceDgyJworICAgICAnXHhhMlx4ZTNceDgzXHg5MVx4ZTNceDgzXHhiY1x4ZTNceDgzXHg4OCcpCisgICAgXQorCisKK2NsYXNzIE5hbWVwcmVwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbmFtZXByZXAoc2VsZik6CisgICAgICAgIGZyb20gZW5jb2RpbmdzLmlkbmEgaW1wb3J0IG5hbWVwcmVwCisgICAgICAgIGZvciBwb3MsIChvcmlnLCBwcmVwcGVkKSBpbiBlbnVtZXJhdGUobmFtZXByZXBfdGVzdHMpOgorICAgICAgICAgICAgaWYgb3JpZyBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgU2tpcHBlZAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIFRoZSBVbmljb2RlIHN0cmluZ3MgYXJlIGdpdmVuIGluIFVURi04CisgICAgICAgICAgICBvcmlnID0gdW5pY29kZShvcmlnLCAidXRmLTgiKQorICAgICAgICAgICAgaWYgcHJlcHBlZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgSW5wdXQgY29udGFpbnMgcHJvaGliaXRlZCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBuYW1lcHJlcCwgb3JpZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJlcHBlZCA9IHVuaWNvZGUocHJlcHBlZCwgInV0Zi04IikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXByZXAob3JpZyksIHByZXBwZWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCgiVGVzdCAzLiVkOiAlcyIgJSAocG9zKzEsIHN0cihlKSkpCisKK2NsYXNzIElETkFDb2RlY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2J1aWx0aW5fZGVjb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoInB5dGhvbi5vcmciLCAiaWRuYSIpLCB1InB5dGhvbi5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoInB5dGhvbi5vcmcuIiwgImlkbmEiKSwgdSJweXRob24ub3JnLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgieG4tLXB5dGhuLW11YS5vcmciLCAiaWRuYSIpLCB1InB5dGhceGY2bi5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoInhuLS1weXRobi1tdWEub3JnLiIsICJpZG5hIiksIHUicHl0aFx4ZjZuLm9yZy4iKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbl9lbmNvZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJweXRob24ub3JnIi5lbmNvZGUoImlkbmEiKSwgInB5dGhvbi5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJweXRob24ub3JnLiIuZW5jb2RlKCJpZG5hIiksICJweXRob24ub3JnLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJweXRoXHhmNm4ub3JnIi5lbmNvZGUoImlkbmEiKSwgInhuLS1weXRobi1tdWEub3JnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InB5dGhceGY2bi5vcmcuIi5lbmNvZGUoImlkbmEiKSwgInhuLS1weXRobi1tdWEub3JnLiIpCisKKyAgICBkZWYgdGVzdF9zdHJlYW0oc2VsZik6CisgICAgICAgIGltcG9ydCBTdHJpbmdJTworICAgICAgICByID0gY29kZWNzLmdldHJlYWRlcigiaWRuYSIpKFN0cmluZ0lPLlN0cmluZ0lPKCJhYmMiKSkKKyAgICAgICAgci5yZWFkKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5yZWFkKCksIHUiIikKKworICAgIGRlZiB0ZXN0X2luY3JlbWVudGFsX2RlY29kZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICIiLmpvaW4oY29kZWNzLml0ZXJkZWNvZGUoInB5dGhvbi5vcmciLCAiaWRuYSIpKSwKKyAgICAgICAgICAgIHUicHl0aG9uLm9yZyIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmRlY29kZSgicHl0aG9uLm9yZy4iLCAiaWRuYSIpKSwKKyAgICAgICAgICAgIHUicHl0aG9uLm9yZy4iCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICIiLmpvaW4oY29kZWNzLml0ZXJkZWNvZGUoInhuLS1weXRobi1tdWEub3JnLiIsICJpZG5hIikpLAorICAgICAgICAgICAgdSJweXRoXHhmNm4ub3JnLiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmRlY29kZSgieG4tLXB5dGhuLW11YS5vcmcuIiwgImlkbmEiKSksCisgICAgICAgICAgICB1InB5dGhceGY2bi5vcmcuIgorICAgICAgICApCisKKyAgICAgICAgZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoImlkbmEiKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoInhuLS14YW0iLCApLCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoInBsZS05dGEubyIsICksIHUiXHhlNHhhbXBsZS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKHUicmciKSwgdSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKHUiIiwgVHJ1ZSksIHUib3JnIikKKworICAgICAgICBkZWNvZGVyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgieG4tLXhhbSIsICksIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgicGxlLTl0YS5vIiwgKSwgdSJceGU0eGFtcGxlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoInJnLiIpLCB1Im9yZy4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCIiLCBUcnVlKSwgdSIiKQorCisgICAgZGVmIHRlc3RfaW5jcmVtZW50YWxfZW5jb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmVuY29kZSh1InB5dGhvbi5vcmciLCAiaWRuYSIpKSwKKyAgICAgICAgICAgICJweXRob24ub3JnIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZW5jb2RlKHUicHl0aG9uLm9yZy4iLCAiaWRuYSIpKSwKKyAgICAgICAgICAgICJweXRob24ub3JnLiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmVuY29kZSh1InB5dGhceGY2bi5vcmcuIiwgImlkbmEiKSksCisgICAgICAgICAgICAieG4tLXB5dGhuLW11YS5vcmcuIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZW5jb2RlKHUicHl0aFx4ZjZuLm9yZy4iLCAiaWRuYSIpKSwKKyAgICAgICAgICAgICJ4bi0tcHl0aG4tbXVhLm9yZy4iCisgICAgICAgICkKKworICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcigiaWRuYSIpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1Ilx4ZTR4IiksICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUiYW1wbGUub3JnIiksICJ4bi0teGFtcGxlLTl0YS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUiIiwgVHJ1ZSksICJvcmciKQorCisgICAgICAgIGVuY29kZXIucmVzZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUiXHhlNHgiKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSJhbXBsZS5vcmcuIiksICJ4bi0teGFtcGxlLTl0YS5vcmcuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1IiIsIFRydWUpLCAiIikKKworY2xhc3MgQ29kZWNzTW9kdWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmRlY29kZSgnXHhlNFx4ZjZceGZjJywgJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSdceGU0XHhmNlx4ZmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5kZWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmRlY29kZSgnYWJjJyksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MuZGVjb2RlLCAnXHhmZicsICdhc2NpaScpCisKKyAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmVuY29kZSh1J1x4ZTRceGY2XHhmYycsICdsYXRpbi0xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICdceGU0XHhmNlx4ZmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5lbmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yLCBjb2RlY3MuZW5jb2RlLCAiZm9vIiwgIl9fc3BhbV9fIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZW5jb2RlKHUnYWJjJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIGNvZGVjcy5lbmNvZGUsIHUnXHhmZmZmJywgJ2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWdpc3RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVnaXN0ZXIsIDQyKQorCisgICAgZGVmIHRlc3RfbG9va3VwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5sb29rdXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yLCBjb2RlY3MubG9va3VwLCAiX19zcGFtX18iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgY29kZWNzLmxvb2t1cCwgIiAiKQorCisgICAgZGVmIHRlc3RfZ2V0ZW5jb2RlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuZ2V0ZW5jb2RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIGNvZGVjcy5nZXRlbmNvZGVyLCAiX19zcGFtX18iKQorCisgICAgZGVmIHRlc3RfZ2V0ZGVjb2RlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuZ2V0ZGVjb2RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIGNvZGVjcy5nZXRkZWNvZGVyLCAiX19zcGFtX18iKQorCisgICAgZGVmIHRlc3RfZ2V0cmVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5nZXRyZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yLCBjb2RlY3MuZ2V0cmVhZGVyLCAiX19zcGFtX18iKQorCisgICAgZGVmIHRlc3RfZ2V0d3JpdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5nZXR3cml0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yLCBjb2RlY3MuZ2V0d3JpdGVyLCAiX19zcGFtX18iKQorCisgICAgZGVmIHRlc3RfbG9va3VwX2lzc3VlMTgxMyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTgxMzogdW5kZXIgVHVya2lzaCBsb2NhbGVzLCBsb29rdXAgb2Ygc29tZSBjb2RlY3MgZmFpbGVkCisgICAgICAgICMgYmVjYXVzZSAnSScgaXMgbG93ZXJjYXNlZCBhcyBhIGRvdGxlc3MgImkiCisgICAgICAgIG9sZGxvY2FsZSA9IGxvY2FsZS5nZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9jYWxlLnNldGxvY2FsZSwgbG9jYWxlLkxDX0NUWVBFLCBvbGRsb2NhbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFLCAndHJfVFInKQorICAgICAgICBleGNlcHQgbG9jYWxlLkVycm9yOgorICAgICAgICAgICAgIyBVbnN1cHBvcnRlZCBsb2NhbGUgb24gdGhpcyBzeXN0ZW0KKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3Rlc3QgbmVlZHMgVHVya2lzaCBsb2NhbGUnKQorICAgICAgICBjID0gY29kZWNzLmxvb2t1cCgnQVNDSUknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmFtZSwgJ2FzY2lpJykKKworY2xhc3MgU3RyZWFtUmVhZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyID0gY29kZWNzLmdldHJlYWRlcigndXRmLTgnKQorICAgICAgICBzZWxmLnN0cmVhbSA9IFN0cmluZ0lPLlN0cmluZ0lPKCdceGVkXHg5NVx4OWNcblx4ZWFceGI4XHg4MCcpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnJlYWRlcihzZWxmLnN0cmVhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdSdcdWQ1NWNcbicsIHUnXHVhZTAwJ10pCisKK2NsYXNzIEVuY29kZWRGaWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCdceGVkXHg5NVx4OWNcblx4ZWFceGI4XHg4MCcpCisgICAgICAgIGVmID0gY29kZWNzLkVuY29kZWRGaWxlKGYsICd1dGYtMTYtbGUnLCAndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVmLnJlYWQoKSwgJ1xcXHhkNVxuXHgwMFx4MDBceGFlJykKKworICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBlZiA9IGNvZGVjcy5FbmNvZGVkRmlsZShmLCAndXRmLTgnLCAnbGF0aW4xJykKKyAgICAgICAgZWYud3JpdGUoJ1x4YzNceGJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHZhbHVlKCksICdceGZjJykKKworY2xhc3MgU3RyMlN0clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgc2luID0gIlx4ODAiLmVuY29kZSgiYmFzZTY0X2NvZGVjIikKKyAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcigiYmFzZTY0X2NvZGVjIikoU3RyaW5nSU8uU3RyaW5nSU8oc2luKSkKKyAgICAgICAgc291dCA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCAiXHg4MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzb3V0LCBzdHIpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2luID0gIlx4ODAiLmVuY29kZSgiYmFzZTY0X2NvZGVjIikKKyAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcigiYmFzZTY0X2NvZGVjIikoU3RyaW5nSU8uU3RyaW5nSU8oc2luKSkKKyAgICAgICAgc291dCA9IHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgIlx4ODAiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc291dCwgc3RyKQorCithbGxfdW5pY29kZV9lbmNvZGluZ3MgPSBbCisgICAgImFzY2lpIiwKKyAgICAiYmFzZTY0X2NvZGVjIiwKKyAgICAiYmlnNSIsCisgICAgImJpZzVoa3NjcyIsCisgICAgImNoYXJtYXAiLAorICAgICJjcDAzNyIsCisgICAgImNwMTAwNiIsCisgICAgImNwMTAyNiIsCisgICAgImNwMTE0MCIsCisgICAgImNwMTI1MCIsCisgICAgImNwMTI1MSIsCisgICAgImNwMTI1MiIsCisgICAgImNwMTI1MyIsCisgICAgImNwMTI1NCIsCisgICAgImNwMTI1NSIsCisgICAgImNwMTI1NiIsCisgICAgImNwMTI1NyIsCisgICAgImNwMTI1OCIsCisgICAgImNwNDI0IiwKKyAgICAiY3A0MzciLAorICAgICJjcDUwMCIsCisgICAgImNwNzIwIiwKKyAgICAiY3A3MzciLAorICAgICJjcDc3NSIsCisgICAgImNwODUwIiwKKyAgICAiY3A4NTIiLAorICAgICJjcDg1NSIsCisgICAgImNwODU2IiwKKyAgICAiY3A4NTciLAorICAgICJjcDg1OCIsCisgICAgImNwODYwIiwKKyAgICAiY3A4NjEiLAorICAgICJjcDg2MiIsCisgICAgImNwODYzIiwKKyAgICAiY3A4NjQiLAorICAgICJjcDg2NSIsCisgICAgImNwODY2IiwKKyAgICAiY3A4NjkiLAorICAgICJjcDg3NCIsCisgICAgImNwODc1IiwKKyAgICAiY3A5MzIiLAorICAgICJjcDk0OSIsCisgICAgImNwOTUwIiwKKyAgICAiZXVjX2ppc18yMDA0IiwKKyAgICAiZXVjX2ppc3gwMjEzIiwKKyAgICAiZXVjX2pwIiwKKyAgICAiZXVjX2tyIiwKKyAgICAiZ2IxODAzMCIsCisgICAgImdiMjMxMiIsCisgICAgImdiayIsCisgICAgImhleF9jb2RlYyIsCisgICAgImhwX3JvbWFuOCIsCisgICAgImh6IiwKKyAgICAiaWRuYSIsCisgICAgImlzbzIwMjJfanAiLAorICAgICJpc28yMDIyX2pwXzEiLAorICAgICJpc28yMDIyX2pwXzIiLAorICAgICJpc28yMDIyX2pwXzIwMDQiLAorICAgICJpc28yMDIyX2pwXzMiLAorICAgICJpc28yMDIyX2pwX2V4dCIsCisgICAgImlzbzIwMjJfa3IiLAorICAgICJpc284ODU5XzEiLAorICAgICJpc284ODU5XzEwIiwKKyAgICAiaXNvODg1OV8xMSIsCisgICAgImlzbzg4NTlfMTMiLAorICAgICJpc284ODU5XzE0IiwKKyAgICAiaXNvODg1OV8xNSIsCisgICAgImlzbzg4NTlfMTYiLAorICAgICJpc284ODU5XzIiLAorICAgICJpc284ODU5XzMiLAorICAgICJpc284ODU5XzQiLAorICAgICJpc284ODU5XzUiLAorICAgICJpc284ODU5XzYiLAorICAgICJpc284ODU5XzciLAorICAgICJpc284ODU5XzgiLAorICAgICJpc284ODU5XzkiLAorICAgICJqb2hhYiIsCisgICAgImtvaThfciIsCisgICAgImtvaThfdSIsCisgICAgImxhdGluXzEiLAorICAgICJtYWNfY3lyaWxsaWMiLAorICAgICJtYWNfZ3JlZWsiLAorICAgICJtYWNfaWNlbGFuZCIsCisgICAgIm1hY19sYXRpbjIiLAorICAgICJtYWNfcm9tYW4iLAorICAgICJtYWNfdHVya2lzaCIsCisgICAgInBhbG1vcyIsCisgICAgInB0Y3AxNTQiLAorICAgICJwdW55Y29kZSIsCisgICAgInJhd191bmljb2RlX2VzY2FwZSIsCisgICAgInJvdF8xMyIsCisgICAgInNoaWZ0X2ppcyIsCisgICAgInNoaWZ0X2ppc18yMDA0IiwKKyAgICAic2hpZnRfamlzeDAyMTMiLAorICAgICJ0aXNfNjIwIiwKKyAgICAidW5pY29kZV9lc2NhcGUiLAorICAgICJ1bmljb2RlX2ludGVybmFsIiwKKyAgICAidXRmXzE2IiwKKyAgICAidXRmXzE2X2JlIiwKKyAgICAidXRmXzE2X2xlIiwKKyAgICAidXRmXzciLAorICAgICJ1dGZfOCIsCitdCisKK2lmIGhhc2F0dHIoY29kZWNzLCAibWJjc19lbmNvZGUiKToKKyAgICBhbGxfdW5pY29kZV9lbmNvZGluZ3MuYXBwZW5kKCJtYmNzIikKKworIyBUaGUgZm9sbG93aW5nIGVuY29kaW5ncyB3b3JrIG9ubHkgd2l0aCBzdHIsIG5vdCB1bmljb2RlCithbGxfc3RyaW5nX2VuY29kaW5ncyA9IFsKKyAgICAicXVvcHJpX2NvZGVjIiwKKyAgICAic3RyaW5nX2VzY2FwZSIsCisgICAgInV1X2NvZGVjIiwKK10KKworIyBUaGUgZm9sbG93aW5nIGVuY29kaW5nIGlzIG5vdCB0ZXN0ZWQsIGJlY2F1c2UgaXQncyBub3Qgc3VwcG9zZWQKKyMgdG8gd29yazoKKyMgICAgInVuZGVmaW5lZCIKKworIyBUaGUgZm9sbG93aW5nIGVuY29kaW5ncyBkb24ndCB3b3JrIGluIHN0YXRlZnVsIG1vZGUKK2Jyb2tlbl91bmljb2RlX3dpdGhfc3RyZWFtcyA9IFsKKyAgICAiYmFzZTY0X2NvZGVjIiwKKyAgICAiaGV4X2NvZGVjIiwKKyAgICAicHVueWNvZGUiLAorICAgICJ1bmljb2RlX2ludGVybmFsIgorXQorYnJva2VuX2luY3JlbWVudGFsX2NvZGVycyA9IGJyb2tlbl91bmljb2RlX3dpdGhfc3RyZWFtc1s6XQorCisjIFRoZSBmb2xsb3dpbmcgZW5jb2RpbmdzIG9ubHkgc3VwcG9ydCAic3RyaWN0IiBtb2RlCitvbmx5X3N0cmljdF9tb2RlID0gWworICAgICJpZG5hIiwKKyAgICAiemxpYl9jb2RlYyIsCisgICAgImJ6Ml9jb2RlYyIsCitdCisKK3RyeToKKyAgICBpbXBvcnQgYnoyCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBhbGxfdW5pY29kZV9lbmNvZGluZ3MuYXBwZW5kKCJiejJfY29kZWMiKQorICAgIGJyb2tlbl91bmljb2RlX3dpdGhfc3RyZWFtcy5hcHBlbmQoImJ6Ml9jb2RlYyIpCisKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgYWxsX3VuaWNvZGVfZW5jb2RpbmdzLmFwcGVuZCgiemxpYl9jb2RlYyIpCisgICAgYnJva2VuX3VuaWNvZGVfd2l0aF9zdHJlYW1zLmFwcGVuZCgiemxpYl9jb2RlYyIpCisKK2NsYXNzIEJhc2ljVW5pY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgcyA9IHUiYWJjMTIzIiAjIGFsbCBjb2RlY3Mgc2hvdWxkIGJlIGFibGUgdG8gZW5jb2RlIHRoZXNlCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBhbGxfdW5pY29kZV9lbmNvZGluZ3M6CisgICAgICAgICAgICBuYW1lID0gY29kZWNzLmxvb2t1cChlbmNvZGluZykubmFtZQorICAgICAgICAgICAgaWYgZW5jb2RpbmcuZW5kc3dpdGgoIl9jb2RlYyIpOgorICAgICAgICAgICAgICAgIG5hbWUgKz0gIl9jb2RlYyIKKyAgICAgICAgICAgIGVsaWYgZW5jb2RpbmcgPT0gImxhdGluXzEiOgorICAgICAgICAgICAgICAgIG5hbWUgPSAibGF0aW5fMSIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RpbmcucmVwbGFjZSgiXyIsICItIiksIG5hbWUucmVwbGFjZSgiXyIsICItIikpCisgICAgICAgICAgICAoYnl0ZXMsIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihzKSwgIiVyICE9ICVyIChlbmNvZGluZz0lcikiICUgKHNpemUsIGxlbihzKSwgZW5jb2RpbmcpKQorICAgICAgICAgICAgKGNoYXJzLCBzaXplKSA9IGNvZGVjcy5nZXRkZWNvZGVyKGVuY29kaW5nKShieXRlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhcnMsIHMsICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChjaGFycywgcywgZW5jb2RpbmcpKQorCisgICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gYnJva2VuX3VuaWNvZGVfd2l0aF9zdHJlYW1zOgorICAgICAgICAgICAgICAgICMgY2hlY2sgc3RyZWFtIHJlYWRlci93cml0ZXIKKyAgICAgICAgICAgICAgICBxID0gUXVldWUoKQorICAgICAgICAgICAgICAgIHdyaXRlciA9IGNvZGVjcy5nZXR3cml0ZXIoZW5jb2RpbmcpKHEpCisgICAgICAgICAgICAgICAgZW5jb2RlZHJlc3VsdCA9ICIiCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKGMpCisgICAgICAgICAgICAgICAgICAgIGVuY29kZWRyZXN1bHQgKz0gcS5yZWFkKCkKKyAgICAgICAgICAgICAgICBxID0gUXVldWUoKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKHEpCisgICAgICAgICAgICAgICAgZGVjb2RlZHJlc3VsdCA9IHUiIgorICAgICAgICAgICAgICAgIGZvciBjIGluIGVuY29kZWRyZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHEud3JpdGUoYykKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZHJlc3VsdCArPSByZWFkZXIucmVhZCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkcmVzdWx0LCBzLCAiJXIgIT0gJXIgKGVuY29kaW5nPSVyKSIgJSAoZGVjb2RlZHJlc3VsdCwgcywgZW5jb2RpbmcpKQorCisgICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gYnJva2VuX2luY3JlbWVudGFsX2NvZGVyczoKKyAgICAgICAgICAgICAgICAjIGNoZWNrIGluY3JlbWVudGFsIGRlY29kZXIvZW5jb2RlciAoZmV0Y2hlZCB2aWEgdGhlIFB5dGhvbgorICAgICAgICAgICAgICAgICMgYW5kIEMgQVBJKSBhbmQgaXRlcmVuY29kZSgpL2l0ZXJkZWNvZGUoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXIoZW5jb2RpbmcpKCkKKyAgICAgICAgICAgICAgICAgICAgY2VuY29kZXIgPSBfdGVzdGNhcGkuY29kZWNfaW5jcmVtZW50YWxlbmNvZGVyKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjogIyBubyBJbmNyZW1lbnRhbEVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaW5jcmVtZW50YWwgZGVjb2Rlci9lbmNvZGVyCisgICAgICAgICAgICAgICAgICAgIGVuY29kZWRyZXN1bHQgPSAiIgorICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBzOgorICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZHJlc3VsdCArPSBlbmNvZGVyLmVuY29kZShjKQorICAgICAgICAgICAgICAgICAgICBlbmNvZGVkcmVzdWx0ICs9IGVuY29kZXIuZW5jb2RlKHUiIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoZW5jb2RpbmcpKCkKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZHJlc3VsdCA9IHUiIgorICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBlbmNvZGVkcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZHJlc3VsdCArPSBkZWNvZGVyLmRlY29kZShjKQorICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ICs9IGRlY29kZXIuZGVjb2RlKCIiLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZWRyZXN1bHQsIHMsICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChkZWNvZGVkcmVzdWx0LCBzLCBlbmNvZGluZykpCisKKyAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBDIEFQSQorICAgICAgICAgICAgICAgICAgICBlbmNvZGVkcmVzdWx0ID0gIiIKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRyZXN1bHQgKz0gY2VuY29kZXIuZW5jb2RlKGMpCisgICAgICAgICAgICAgICAgICAgIGVuY29kZWRyZXN1bHQgKz0gY2VuY29kZXIuZW5jb2RlKHUiIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgY2RlY29kZXIgPSBfdGVzdGNhcGkuY29kZWNfaW5jcmVtZW50YWxkZWNvZGVyKGVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ID0gdSIiCisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGVuY29kZWRyZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ICs9IGNkZWNvZGVyLmRlY29kZShjKQorICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ICs9IGNkZWNvZGVyLmRlY29kZSgiIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkcmVzdWx0LCBzLCAiJXIgIT0gJXIgKGVuY29kaW5nPSVyKSIgJSAoZGVjb2RlZHJlc3VsdCwgcywgZW5jb2RpbmcpKQorCisgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaXRlcmVuY29kZSgpL2l0ZXJkZWNvZGUoKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB1IiIuam9pbihjb2RlY3MuaXRlcmRlY29kZShjb2RlY3MuaXRlcmVuY29kZShzLCBlbmNvZGluZyksIGVuY29kaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHMsICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChyZXN1bHQsIHMsIGVuY29kaW5nKSkKKworICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGl0ZXJlbmNvZGUoKS9pdGVyZGVjb2RlKCkgd2l0aCBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdSIiLmpvaW4oY29kZWNzLml0ZXJkZWNvZGUoY29kZWNzLml0ZXJlbmNvZGUodSIiLCBlbmNvZGluZyksIGVuY29kaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHUiIikKKworICAgICAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBvbmx5X3N0cmljdF9tb2RlOgorICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGluY3JlbWVudGFsIGRlY29kZXIvZW5jb2RlciB3aXRoIGVycm9ycyBhcmd1bWVudAorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcihlbmNvZGluZykoImlnbm9yZSIpCisgICAgICAgICAgICAgICAgICAgICAgICBjZW5jb2RlciA9IF90ZXN0Y2FwaS5jb2RlY19pbmNyZW1lbnRhbGVuY29kZXIoZW5jb2RpbmcsICJpZ25vcmUiKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6ICMgbm8gSW5jcmVtZW50YWxFbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkcmVzdWx0ID0gIiIuam9pbihlbmNvZGVyLmVuY29kZShjKSBmb3IgYyBpbiBzKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoZW5jb2RpbmcpKCJpZ25vcmUiKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZHJlc3VsdCA9IHUiIi5qb2luKGRlY29kZXIuZGVjb2RlKGMpIGZvciBjIGluIGVuY29kZWRyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZWRyZXN1bHQsIHMsICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChkZWNvZGVkcmVzdWx0LCBzLCBlbmNvZGluZykpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRyZXN1bHQgPSAiIi5qb2luKGNlbmNvZGVyLmVuY29kZShjKSBmb3IgYyBpbiBzKQorICAgICAgICAgICAgICAgICAgICAgICAgY2RlY29kZXIgPSBfdGVzdGNhcGkuY29kZWNfaW5jcmVtZW50YWxkZWNvZGVyKGVuY29kaW5nLCAiaWdub3JlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRyZXN1bHQgPSB1IiIuam9pbihjZGVjb2Rlci5kZWNvZGUoYykgZm9yIGMgaW4gZW5jb2RlZHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZHJlc3VsdCwgcywgIiVyICE9ICVyIChlbmNvZGluZz0lcikiICUgKGRlY29kZWRyZXN1bHQsIHMsIGVuY29kaW5nKSkKKworICAgIGRlZiB0ZXN0X3NlZWsoc2VsZik6CisgICAgICAgICMgYWxsIGNvZGVjcyBzaG91bGQgYmUgYWJsZSB0byBlbmNvZGUgdGhlc2UKKyAgICAgICAgcyA9IHUiJXNcbiVzXG4iICUgKDEwMCp1ImFiYzEyMyIsIDEwMCp1ImRlZjQ1NiIpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBhbGxfdW5pY29kZV9lbmNvZGluZ3M6CisgICAgICAgICAgICBpZiBlbmNvZGluZyA9PSAiaWRuYSI6ICMgRklYTUU6IFNlZSBTRiBidWcgIzExNjMxNzgKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZW5jb2RpbmcgaW4gYnJva2VuX3VuaWNvZGVfd2l0aF9zdHJlYW1zOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShTdHJpbmdJTy5TdHJpbmdJTyhzLmVuY29kZShlbmNvZGluZykpKQorICAgICAgICAgICAgZm9yIHQgaW4geHJhbmdlKDUpOgorICAgICAgICAgICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcgc2VlayByZXNldHMgdGhlIGludGVybmFsIGNvZGVjIHN0YXRlIGFuZCBidWZmZXJzCisgICAgICAgICAgICAgICAgcmVhZGVyLnNlZWsoMCwgMCkKKyAgICAgICAgICAgICAgICBsaW5lID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbOmxlbihsaW5lKV0sIGxpbmUpCisKKyAgICBkZWYgdGVzdF9iYWRfZGVjb2RlX2FyZ3Moc2VsZik6CisgICAgICAgIGZvciBlbmNvZGluZyBpbiBhbGxfdW5pY29kZV9lbmNvZGluZ3M6CisgICAgICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlY29kZXIpCisgICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gKCJpZG5hIiwgInB1bnljb2RlIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWNvZGVyLCA0MikKKworICAgIGRlZiB0ZXN0X2JhZF9lbmNvZGVfYXJncyhzZWxmKToKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGFsbF91bmljb2RlX2VuY29kaW5nczoKKyAgICAgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0ZW5jb2RlcihlbmNvZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZW5jb2RlcikKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nX21hcF90eXBlX2luaXRpYWxpemVkKHNlbGYpOgorICAgICAgICBmcm9tIGVuY29kaW5ncyBpbXBvcnQgY3AxMTQwCisgICAgICAgICMgVGhpcyB1c2VkIHRvIGNyYXNoLCB3ZSBhcmUgb25seSB2ZXJpZnlpbmcgdGhlcmUncyBubyBjcmFzaC4KKyAgICAgICAgdGFibGVfdHlwZSA9IHR5cGUoY3AxMTQwLmVuY29kaW5nX3RhYmxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhYmxlX3R5cGUsIHRhYmxlX3R5cGUpCisKK2NsYXNzIEJhc2ljU3RyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgorICAgICAgICBzID0gImFiYzEyMyIKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGFsbF9zdHJpbmdfZW5jb2RpbmdzOgorICAgICAgICAgICAgKGJ5dGVzLCBzaXplKSA9IGNvZGVjcy5nZXRlbmNvZGVyKGVuY29kaW5nKShzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBsZW4ocykpCisgICAgICAgICAgICAoY2hhcnMsIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKGJ5dGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFycywgcywgIiVyICE9ICVyIChlbmNvZGluZz0lcikiICUgKGNoYXJzLCBzLCBlbmNvZGluZykpCisKK2NsYXNzIENoYXJtYXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9kZWNvZGVfd2l0aF9zdHJpbmdfbWFwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAic3RyaWN0IiwgdSJhYmMiKSwKKyAgICAgICAgICAgICh1ImFiYyIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUsIGIiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsIHUiYWIiCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUsICJceDAwXHgwMVx4MDIiLCAic3RyaWN0IiwgdSJhYlx1ZmZmZSIKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJyZXBsYWNlIiwgdSJhYiIpLAorICAgICAgICAgICAgKHUiYWJcdWZmZmQiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInJlcGxhY2UiLCB1ImFiXHVmZmZlIiksCisgICAgICAgICAgICAodSJhYlx1ZmZmZCIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAiaWdub3JlIiwgdSJhYiIpLAorICAgICAgICAgICAgKHUiYWIiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgImlnbm9yZSIsIHUiYWJcdWZmZmUiKSwKKyAgICAgICAgICAgICh1ImFiIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIGFsbGJ5dGVzID0gIiIuam9pbihjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoYWxsYnl0ZXMsICJpZ25vcmUiLCB1IiIpLAorICAgICAgICAgICAgKHUiIiwgbGVuKGFsbGJ5dGVzKSkKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZGVjb2RlX3dpdGhfaW50MnN0cl9tYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J2EnLCAxOiB1J2InLCAyOiB1J2MnfSksCisgICAgICAgICAgICAodSJhYmMiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IHUnQWEnLCAxOiB1J0JiJywgMjogdSdDYyd9KSwKKyAgICAgICAgICAgICh1IkFhQmJDYyIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAic3RyaWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogdSdcVTAwMTBGRkZGJywgMTogdSdiJywgMjogdSdjJ30pLAorICAgICAgICAgICAgKHUiXFUwMDEwRkZGRmJjIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J2EnLCAxOiB1J2InLCAyOiB1Jyd9KSwKKyAgICAgICAgICAgICh1ImFiIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogdSdhJywgMTogdSdiJ30KKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogdSdhJywgMTogdSdiJywgMjogTm9uZX0KKyAgICAgICAgKQorCisgICAgICAgICMgSXNzdWUgIzE0ODUwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogdSdhJywgMTogdSdiJywgMjogdSdcdWZmZmUnfQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInJlcGxhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J2EnLCAxOiB1J2InfSksCisgICAgICAgICAgICAodSJhYlx1ZmZmZCIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAicmVwbGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IHUnYScsIDE6IHUnYicsIDI6IE5vbmV9KSwKKyAgICAgICAgICAgICh1ImFiXHVmZmZkIiwgMykKKyAgICAgICAgKQorCisgICAgICAgICMgSXNzdWUgIzE0ODUwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJyZXBsYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogdSdhJywgMTogdSdiJywgMjogdSdcdWZmZmUnfSksCisgICAgICAgICAgICAodSJhYlx1ZmZmZCIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAiaWdub3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogdSdhJywgMTogdSdiJ30pLAorICAgICAgICAgICAgKHUiYWIiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgImlnbm9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IHUnYScsIDE6IHUnYicsIDI6IE5vbmV9KSwKKyAgICAgICAgICAgICh1ImFiIiwgMykKKyAgICAgICAgKQorCisgICAgICAgICMgSXNzdWUgIzE0ODUwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJpZ25vcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J2EnLCAxOiB1J2InLCAyOiB1J1x1ZmZmZSd9KSwKKyAgICAgICAgICAgICh1ImFiIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIGFsbGJ5dGVzID0gIiIuam9pbihjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoYWxsYnl0ZXMsICJpZ25vcmUiLCB7fSksCisgICAgICAgICAgICAodSIiLCBsZW4oYWxsYnl0ZXMpKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kZWNvZGVfd2l0aF9pbnQyaW50X21hcChzZWxmKToKKyAgICAgICAgYSA9IG9yZCh1J2EnKQorICAgICAgICBiID0gb3JkKHUnYicpCisgICAgICAgIGMgPSBvcmQodSdjJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAic3RyaWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogYSwgMTogYiwgMjogY30pLAorICAgICAgICAgICAgKHUiYWJjIiwgMykKKyAgICAgICAgKQorCisgICAgICAgICMgSXNzdWUgIzE1Mzc5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiAweDEwRkZGRiwgMTogYiwgMjogY30pLAorICAgICAgICAgICAgKHUiXFUwMDEwRkZGRmJjIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogMHgxMTAwMDAsIDE6IGIsIDI6IGN9CisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUsICJceDAwXHgwMVx4MDIiLCAic3RyaWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IGEsIDE6IGJ9LAorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlLCAiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiBhLCAxOiBiLCAyOiAweEZGRkV9LAorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInJlcGxhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiBhLCAxOiBifSksCisgICAgICAgICAgICAodSJhYlx1ZmZmZCIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAicmVwbGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IGEsIDE6IGIsIDI6IDB4RkZGRX0pLAorICAgICAgICAgICAgKHUiYWJcdWZmZmQiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgImlnbm9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IGEsIDE6IGJ9KSwKKyAgICAgICAgICAgICh1ImFiIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJpZ25vcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiBhLCAxOiBiLCAyOiAweEZGRkV9KSwKKyAgICAgICAgICAgICh1ImFiIiwgMykKKyAgICAgICAgKQorCisKK2NsYXNzIFdpdGhTdG10VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW5jb2RlZGZpbGUoc2VsZik6CisgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygiXHhjM1x4YmMiKQorICAgICAgICB3aXRoIGNvZGVjcy5FbmNvZGVkRmlsZShmLCAibGF0aW4tMSIsICJ1dGYtOCIpIGFzIGVmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlZi5yZWFkKCksICJceGZjIikKKworICAgIGRlZiB0ZXN0X3N0cmVhbXJlYWRlcndyaXRlcihzZWxmKToKKyAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCJceGMzXHhiYyIpCisgICAgICAgIGluZm8gPSBjb2RlY3MubG9va3VwKCJ1dGYtOCIpCisgICAgICAgIHdpdGggY29kZWNzLlN0cmVhbVJlYWRlcldyaXRlcihmLCBpbmZvLnN0cmVhbXJlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uc3RyZWFtd3JpdGVyLCAnc3RyaWN0JykgYXMgc3J3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcncucmVhZCgpLCB1Ilx4ZmMiKQorCisKK2NsYXNzIFVuaWNvZGVFc2NhcGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MudW5pY29kZV9lc2NhcGVfZW5jb2RlKHUiIiksICgiIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLnVuaWNvZGVfZXNjYXBlX2RlY29kZSgiIiksICh1IiIsIDApKQorCisgICAgZGVmIHRlc3RfcmF3X2VuY29kZShzZWxmKToKKyAgICAgICAgZW5jb2RlID0gY29kZWNzLnVuaWNvZGVfZXNjYXBlX2VuY29kZQorICAgICAgICBmb3IgYiBpbiByYW5nZSgzMiwgMTI3KToKKyAgICAgICAgICAgIGlmIGIgIT0gb3JkKCdcXCcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RlKHVuaWNocihiKSksIChjaHIoYiksIDEpKQorCisgICAgZGVmIHRlc3RfcmF3X2RlY29kZShzZWxmKToKKyAgICAgICAgZGVjb2RlID0gY29kZWNzLnVuaWNvZGVfZXNjYXBlX2RlY29kZQorICAgICAgICBmb3IgYiBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgaWYgYiAhPSBvcmQoJ1xcJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUoY2hyKGIpICsgJzAnKSwgKHVuaWNocihiKSArIHUnMCcsIDIpKQorCisgICAgZGVmIHRlc3RfZXNjYXBlX2VuY29kZShzZWxmKToKKyAgICAgICAgZW5jb2RlID0gY29kZWNzLnVuaWNvZGVfZXNjYXBlX2VuY29kZQorICAgICAgICBjaGVjayA9IGNvZGluZ19jaGVja2VyKHNlbGYsIGVuY29kZSkKKyAgICAgICAgY2hlY2sodSdcdCcsIHInXHQnKQorICAgICAgICBjaGVjayh1J1xuJywgcidcbicpCisgICAgICAgIGNoZWNrKHUnXHInLCByJ1xyJykKKyAgICAgICAgY2hlY2sodSdcXCcsIHInXFwnKQorICAgICAgICBmb3IgYiBpbiByYW5nZSgzMik6CisgICAgICAgICAgICBpZiBjaHIoYikgbm90IGluICdcdFxuXHInOgorICAgICAgICAgICAgICAgIGNoZWNrKHVuaWNocihiKSwgJ1xceCUwMngnICUgYikKKyAgICAgICAgZm9yIGIgaW4gcmFuZ2UoMTI3LCAyNTYpOgorICAgICAgICAgICAgY2hlY2sodW5pY2hyKGIpLCAnXFx4JTAyeCcgJSBiKQorICAgICAgICBjaGVjayh1J1x1MjBhYycsIHInXHUyMGFjJykKKyAgICAgICAgY2hlY2sodSdcVTAwMDFkMTIwJywgcidcVTAwMDFkMTIwJykKKworICAgIGRlZiB0ZXN0X2VzY2FwZV9kZWNvZGUoc2VsZik6CisgICAgICAgIGRlY29kZSA9IGNvZGVjcy51bmljb2RlX2VzY2FwZV9kZWNvZGUKKyAgICAgICAgY2hlY2sgPSBjb2RpbmdfY2hlY2tlcihzZWxmLCBkZWNvZGUpCisgICAgICAgIGNoZWNrKCJbXFxcbl0iLCB1IltdIikKKyAgICAgICAgY2hlY2socidbXCJdJywgdSdbIl0nKQorICAgICAgICBjaGVjayhyIltcJ10iLCB1IlsnXSIpCisgICAgICAgIGNoZWNrKHIiW1xcXSIsIHVyIltcXSIpCisgICAgICAgIGNoZWNrKHIiW1xhXSIsIHUiW1x4MDddIikKKyAgICAgICAgY2hlY2sociJbXGJdIiwgdSJbXHgwOF0iKQorICAgICAgICBjaGVjayhyIltcdF0iLCB1IltceDA5XSIpCisgICAgICAgIGNoZWNrKHIiW1xuXSIsIHUiW1x4MGFdIikKKyAgICAgICAgY2hlY2sociJbXHZdIiwgdSJbXHgwYl0iKQorICAgICAgICBjaGVjayhyIltcZl0iLCB1IltceDBjXSIpCisgICAgICAgIGNoZWNrKHIiW1xyXSIsIHUiW1x4MGRdIikKKyAgICAgICAgY2hlY2sociJbXDddIiwgdSJbXHgwN10iKQorICAgICAgICBjaGVjayhyIltcOF0iLCB1ciJbXDhdIikKKyAgICAgICAgY2hlY2sociJbXDc4XSIsIHUiW1x4MDc4XSIpCisgICAgICAgIGNoZWNrKHIiW1w0MV0iLCB1IlshXSIpCisgICAgICAgIGNoZWNrKHIiW1w0MThdIiwgdSJbIThdIikKKyAgICAgICAgY2hlY2sociJbXDEwMV0iLCB1IltBXSIpCisgICAgICAgIGNoZWNrKHIiW1wxMDEwXSIsIHUiW0EwXSIpCisgICAgICAgIGNoZWNrKHIiW1x4NDFdIiwgdSJbQV0iKQorICAgICAgICBjaGVjayhyIltceDQxMF0iLCB1IltBMF0iKQorICAgICAgICBjaGVjayhyIlx1MjBhYyIsIHUiXHUyMGFjIikKKyAgICAgICAgY2hlY2sociJcVTAwMDFkMTIwIiwgdSJcVTAwMDFkMTIwIikKKyAgICAgICAgZm9yIGIgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgIGlmIGNocihiKSBub3QgaW4gJ1xuIlwnXFxhYnRudmZyMDEyMzQ1Njd4dVVOJzoKKyAgICAgICAgICAgICAgICBjaGVjaygnXFwnICsgY2hyKGIpLCB1J1xcJyArIHVuaWNocihiKSkKKworICAgIGRlZiB0ZXN0X2RlY29kZV9lcnJvcnMoc2VsZik6CisgICAgICAgIGRlY29kZSA9IGNvZGVjcy51bmljb2RlX2VzY2FwZV9kZWNvZGUKKyAgICAgICAgZm9yIGMsIGQgaW4gKCd4JywgMiksICgndScsIDQpLCAoJ1UnLCA0KToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXCIgKyBjICsgIjAiKmkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltcXCIgKyBjICsgIjAiKmkgKyAiXSIpCisgICAgICAgICAgICAgICAgZGF0YSA9ICJbXFwiICsgYyArICIwIippICsgIl1cXCIgKyBjICsgIjAiKmkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShkYXRhLCAiaWdub3JlIiksICh1IltdIiwgbGVuKGRhdGEpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShkYXRhLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUiW1x1ZmZmZF1cdWZmZmQiLCBsZW4oZGF0YSkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGRlY29kZSwgciJcVTAwMTEwMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUociJcVTAwMTEwMDAwIiwgImlnbm9yZSIpLCAodSIiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKHIiXFUwMDExMDAwMCIsICJyZXBsYWNlIiksICh1Ilx1ZmZmZCIsIDEwKSkKKworCitjbGFzcyBSYXdVbmljb2RlRXNjYXBlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLnJhd191bmljb2RlX2VzY2FwZV9lbmNvZGUodSIiKSwgKCIiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MucmF3X3VuaWNvZGVfZXNjYXBlX2RlY29kZSgiIiksICh1IiIsIDApKQorCisgICAgZGVmIHRlc3RfcmF3X2VuY29kZShzZWxmKToKKyAgICAgICAgZW5jb2RlID0gY29kZWNzLnJhd191bmljb2RlX2VzY2FwZV9lbmNvZGUKKyAgICAgICAgZm9yIGIgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RlKHVuaWNocihiKSksIChjaHIoYiksIDEpKQorCisgICAgZGVmIHRlc3RfcmF3X2RlY29kZShzZWxmKToKKyAgICAgICAgZGVjb2RlID0gY29kZWNzLnJhd191bmljb2RlX2VzY2FwZV9kZWNvZGUKKyAgICAgICAgZm9yIGIgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKGNocihiKSArICcwJyksICh1bmljaHIoYikgKyB1JzAnLCAyKSkKKworICAgIGRlZiB0ZXN0X2VzY2FwZV9lbmNvZGUoc2VsZik6CisgICAgICAgIGVuY29kZSA9IGNvZGVjcy5yYXdfdW5pY29kZV9lc2NhcGVfZW5jb2RlCisgICAgICAgIGNoZWNrID0gY29kaW5nX2NoZWNrZXIoc2VsZiwgZW5jb2RlKQorICAgICAgICBmb3IgYiBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgaWYgY2hyKGIpIG5vdCBpbiAndVUnOgorICAgICAgICAgICAgICAgIGNoZWNrKHUnXFwnICsgdW5pY2hyKGIpLCAnXFwnICsgY2hyKGIpKQorICAgICAgICBjaGVjayh1J1x1MjBhYycsIHInXHUyMGFjJykKKyAgICAgICAgY2hlY2sodSdcVTAwMDFkMTIwJywgcidcVTAwMDFkMTIwJykKKworICAgIGRlZiB0ZXN0X2VzY2FwZV9kZWNvZGUoc2VsZik6CisgICAgICAgIGRlY29kZSA9IGNvZGVjcy5yYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlCisgICAgICAgIGNoZWNrID0gY29kaW5nX2NoZWNrZXIoc2VsZiwgZGVjb2RlKQorICAgICAgICBmb3IgYiBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgaWYgY2hyKGIpIG5vdCBpbiAndVUnOgorICAgICAgICAgICAgICAgIGNoZWNrKCdcXCcgKyBjaHIoYiksIHUnXFwnICsgdW5pY2hyKGIpKQorICAgICAgICBjaGVjayhyIlx1MjBhYyIsIHUiXHUyMGFjIikKKyAgICAgICAgY2hlY2sociJcVTAwMDFkMTIwIiwgdSJcVTAwMDFkMTIwIikKKworICAgIGRlZiB0ZXN0X2RlY29kZV9lcnJvcnMoc2VsZik6CisgICAgICAgIGRlY29kZSA9IGNvZGVjcy5yYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlCisgICAgICAgIGZvciBjLCBkIGluICgndScsIDQpLCAoJ1UnLCA0KToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXCIgKyBjICsgIjAiKmkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltcXCIgKyBjICsgIjAiKmkgKyAiXSIpCisgICAgICAgICAgICAgICAgZGF0YSA9ICJbXFwiICsgYyArICIwIippICsgIl1cXCIgKyBjICsgIjAiKmkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShkYXRhLCAiaWdub3JlIiksICh1IltdIiwgbGVuKGRhdGEpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShkYXRhLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUiW1x1ZmZmZF1cdWZmZmQiLCBsZW4oZGF0YSkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGRlY29kZSwgciJcVTAwMTEwMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUociJcVTAwMTEwMDAwIiwgImlnbm9yZSIpLCAodSIiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKHIiXFUwMDExMDAwMCIsICJyZXBsYWNlIiksICh1Ilx1ZmZmZCIsIDEwKSkKKworCitjbGFzcyBCb21UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zZWVrMChzZWxmKToKKyAgICAgICAgZGF0YSA9IHUiMTIzNDU2Nzg5MCIKKyAgICAgICAgdGVzdHMgPSAoInV0Zi0xNiIsCisgICAgICAgICAgICAgICAgICJ1dGYtMTYtbGUiLAorICAgICAgICAgICAgICAgICAidXRmLTE2LWJlIiwKKyAgICAgICAgICAgICAgICAgInV0Zi0zMiIsCisgICAgICAgICAgICAgICAgICJ1dGYtMzItbGUiLAorICAgICAgICAgICAgICAgICAidXRmLTMyLWJlIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3Rfc3VwcG9ydC51bmxpbmssIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZvciBlbmNvZGluZyBpbiB0ZXN0czoKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlIEJPTSBpcyB3cml0dGVuIG9ubHkgb25jZQorICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndysnLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQorCisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIEJPTSBpcyB3cml0dGVuIGFmdGVyIGEgc2VlaygwKQorICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndysnLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGFbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLnRlbGwoKSwgMCkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSkKKworICAgICAgICAgICAgIyAoU3RyZWFtV3JpdGVyKSBDaGVjayB0aGF0IHRoZSBCT00gaXMgd3JpdHRlbiBhZnRlciBhIHNlZWsoMCkKKyAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3crJywgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZXIud3JpdGUoZGF0YVswXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYud3JpdGVyLnRlbGwoKSwgMCkKKyAgICAgICAgICAgICAgICBmLndyaXRlci5zZWVrKDApCisgICAgICAgICAgICAgICAgZi53cml0ZXIud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhKQorCisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIEJPTSBpcyBub3Qgd3JpdHRlbiBhZnRlciBhIHNlZWsoKSBhdCBhIHBvc2l0aW9uCisgICAgICAgICAgICAjIGRpZmZlcmVudCB0aGFuIHRoZSBzdGFydAorICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndysnLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi5zZWVrKGYudGVsbCgpKQorICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhICogMikKKworICAgICAgICAgICAgIyAoU3RyZWFtV3JpdGVyKSBDaGVjayB0aGF0IHRoZSBCT00gaXMgbm90IHdyaXR0ZW4gYWZ0ZXIgYSBzZWVrKCkKKyAgICAgICAgICAgICMgYXQgYSBwb3NpdGlvbiBkaWZmZXJlbnQgdGhhbiB0aGUgc3RhcnQKKyAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3crJywgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZXIud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBmLndyaXRlci5zZWVrKGYud3JpdGVyLnRlbGwoKSkKKyAgICAgICAgICAgICAgICBmLndyaXRlci53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBVVEYzMlRlc3QsCisgICAgICAgIFVURjMyTEVUZXN0LAorICAgICAgICBVVEYzMkJFVGVzdCwKKyAgICAgICAgVVRGMTZUZXN0LAorICAgICAgICBVVEYxNkxFVGVzdCwKKyAgICAgICAgVVRGMTZCRVRlc3QsCisgICAgICAgIFVURjhUZXN0LAorICAgICAgICBVVEY4U2lnVGVzdCwKKyAgICAgICAgVVRGN1Rlc3QsCisgICAgICAgIFVURjE2RXhUZXN0LAorICAgICAgICBSZWFkQnVmZmVyVGVzdCwKKyAgICAgICAgQ2hhckJ1ZmZlclRlc3QsCisgICAgICAgIEVzY2FwZURlY29kZVRlc3QsCisgICAgICAgIFJlY29kaW5nVGVzdCwKKyAgICAgICAgUHVueWNvZGVUZXN0LAorICAgICAgICBVbmljb2RlSW50ZXJuYWxUZXN0LAorICAgICAgICBOYW1lcHJlcFRlc3QsCisgICAgICAgIElETkFDb2RlY1Rlc3QsCisgICAgICAgIENvZGVjc01vZHVsZVRlc3QsCisgICAgICAgIFN0cmVhbVJlYWRlclRlc3QsCisgICAgICAgIEVuY29kZWRGaWxlVGVzdCwKKyAgICAgICAgU3RyMlN0clRlc3QsCisgICAgICAgIEJhc2ljVW5pY29kZVRlc3QsCisgICAgICAgIEJhc2ljU3RyVGVzdCwKKyAgICAgICAgQ2hhcm1hcFRlc3QsCisgICAgICAgIFdpdGhTdG10VGVzdCwKKyAgICAgICAgVW5pY29kZUVzY2FwZVRlc3QsCisgICAgICAgIFJhd1VuaWNvZGVFc2NhcGVUZXN0LAorICAgICAgICBCb21UZXN0LAorICAgICkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2Rlb3AucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2Rlb3AucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjZDNjZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGVvcC5weQpAQCAtMCwwICsxLDMwNCBAQAorIiIiCisgICBUZXN0IGNhc2VzIGZvciBjb2Rlb3AucHkKKyAgIE5pY2sgTWF0aGV3c29uCisiIiIKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpc19qeXRob24KKworZnJvbSBjb2Rlb3AgaW1wb3J0IGNvbXBpbGVfY29tbWFuZCwgUHlDRl9ET05UX0lNUExZX0RFREVOVAorCitpZiBpc19qeXRob246CisgICAgaW1wb3J0IHN5cworICAgIGltcG9ydCBjU3RyaW5nSU8KKworICAgIGRlZiB1bmlmeV9jYWxsYWJsZXMoZCk6CisgICAgICAgIGZvciBuLHYgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgaWYgY2FsbGFibGUodik6CisgICAgICAgICAgICAgICAgZFtuXSA9IGNhbGxhYmxlCisgICAgICAgIHJldHVybiBkCisKK2NsYXNzIENvZGVvcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRWYWxpZChzZWxmLCBzdHIsIHN5bWJvbD0nc2luZ2xlJyk6CisgICAgICAgICcnJ3N1Y2NlZWQgaWZmIHN0ciBpcyBhIHZhbGlkIHBpZWNlIG9mIGNvZGUnJycKKyAgICAgICAgaWYgaXNfanl0aG9uOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGVfY29tbWFuZChzdHIsICI8aW5wdXQ+Iiwgc3ltYm9sKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvZGUpCisgICAgICAgICAgICBpZiBzeW1ib2wgPT0gInNpbmdsZSI6CisgICAgICAgICAgICAgICAgZCxyID0ge30se30KKyAgICAgICAgICAgICAgICBzYXZlZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBleGVjIGNvZGUgaW4gZAorICAgICAgICAgICAgICAgICAgICBleGVjIGNvbXBpbGUoc3RyLCI8aW5wdXQ+Iiwic2luZ2xlIikgaW4gcgorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlZF9zdGRvdXQKKyAgICAgICAgICAgIGVsaWYgc3ltYm9sID09ICdldmFsJzoKKyAgICAgICAgICAgICAgICBjdHggPSB7J2EnOiAyfQorICAgICAgICAgICAgICAgIGQgPSB7ICd2YWx1ZSc6IGV2YWwoY29kZSxjdHgpIH0KKyAgICAgICAgICAgICAgICByID0geyAndmFsdWUnOiBldmFsKHN0cixjdHgpIH0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pZnlfY2FsbGFibGVzKHIpLHVuaWZ5X2NhbGxhYmxlcyhkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gY29tcGlsZShzdHIsICI8aW5wdXQ+Iiwgc3ltYm9sLCBQeUNGX0RPTlRfSU1QTFlfREVERU5UKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21waWxlX2NvbW1hbmQoc3RyLCAiPGlucHV0PiIsIHN5bWJvbCksIGV4cGVjdGVkKQorCisgICAgZGVmIGFzc2VydEluY29tcGxldGUoc2VsZiwgc3RyLCBzeW1ib2w9J3NpbmdsZScpOgorICAgICAgICAnJydzdWNjZWVkIGlmZiBzdHIgaXMgdGhlIHN0YXJ0IG9mIGEgdmFsaWQgcGllY2Ugb2YgY29kZScnJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBpbGVfY29tbWFuZChzdHIsIHN5bWJvbD1zeW1ib2wpLCBOb25lKQorCisgICAgZGVmIGFzc2VydEludmFsaWQoc2VsZiwgc3RyLCBzeW1ib2w9J3NpbmdsZScsIGlzX3N5bnRheD0xKToKKyAgICAgICAgJycnc3VjY2VlZCBpZmYgc3RyIGlzIHRoZSBzdGFydCBvZiBhbiBpbnZhbGlkIHBpZWNlIG9mIGNvZGUnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kKHN0cixzeW1ib2w9c3ltYm9sKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIGZvciBpbnZhbGlkIGNvZGUiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfc3ludGF4KQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfc3ludGF4KQorCisgICAgZGVmIHRlc3RfdmFsaWQoc2VsZik6CisgICAgICAgIGF2ID0gc2VsZi5hc3NlcnRWYWxpZAorCisgICAgICAgICMgc3BlY2lhbCBjYXNlCisgICAgICAgIGlmIG5vdCBpc19qeXRob246CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBpbGVfY29tbWFuZCgiIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoInBhc3MiLCAiPGlucHV0PiIsICdzaW5nbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q0ZfRE9OVF9JTVBMWV9ERURFTlQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21waWxlX2NvbW1hbmQoIlxuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoInBhc3MiLCAiPGlucHV0PiIsICdzaW5nbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q0ZfRE9OVF9JTVBMWV9ERURFTlQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXYoIiIpCisgICAgICAgICAgICBhdigiXG4iKQorCisgICAgICAgIGF2KCJhID0gMSIpCisgICAgICAgIGF2KCJcbmEgPSAxIikKKyAgICAgICAgYXYoImEgPSAxXG4iKQorICAgICAgICBhdigiYSA9IDFcblxuIikKKyAgICAgICAgYXYoIlxuXG5hID0gMVxuXG4iKQorCisgICAgICAgIGF2KCJkZWYgeCgpOlxuICBwYXNzXG4iKQorICAgICAgICBhdigiaWYgMTpcbiBwYXNzXG4iKQorCisgICAgICAgIGF2KCJcblxuaWYgMTogcGFzc1xuIikKKyAgICAgICAgYXYoIlxuXG5pZiAxOiBwYXNzXG5cbiIpCisKKyAgICAgICAgYXYoImRlZiB4KCk6XG5cbiBwYXNzXG4iKQorICAgICAgICBhdigiZGVmIHgoKTpcbiAgcGFzc1xuICBcbiIpCisgICAgICAgIGF2KCJkZWYgeCgpOlxuICBwYXNzXG4gXG4iKQorCisgICAgICAgIGF2KCJwYXNzXG4iKQorICAgICAgICBhdigiMyoqM1xuIikKKworICAgICAgICBhdigiaWYgOT09MzpcbiAgIHBhc3NcbmVsc2U6XG4gICBwYXNzXG4iKQorICAgICAgICBhdigiaWYgMTpcbiBwYXNzXG4gaWYgMTpcbiAgcGFzc1xuIGVsc2U6XG4gIHBhc3NcbiIpCisKKyAgICAgICAgYXYoIiNhXG4jYlxuYSA9IDNcbiIpCisgICAgICAgIGF2KCIjYVxuXG4gICBcbmE9M1xuIikKKyAgICAgICAgYXYoImE9M1xuXG4iKQorICAgICAgICBhdigiYSA9IDkrIFxcXG4zIikKKworICAgICAgICBhdigiMyoqMyIsImV2YWwiKQorICAgICAgICBhdigiKGxhbWJkYSB6OiBcbiB6KiozKSIsImV2YWwiKQorCisgICAgICAgIGF2KCI5KyBcXFxuMyIsImV2YWwiKQorICAgICAgICBhdigiOSsgXFxcbjNcbiIsImV2YWwiKQorCisgICAgICAgIGF2KCJcblxuYSoqMyIsImV2YWwiKQorICAgICAgICBhdigiXG4gXG5hKiozIiwiZXZhbCIpCisgICAgICAgIGF2KCIjYVxuI2JcbmEqKjMiLCJldmFsIikKKworICAgICAgICBhdigiXG5cbmEgPSAxXG5cbiIpCisgICAgICAgIGF2KCJcblxuaWYgMTogYT0xXG5cbiIpCisKKyAgICAgICAgYXYoImlmIDE6XG4gcGFzc1xuIGlmIDE6XG4gIHBhc3NcbiBlbHNlOlxuICBwYXNzXG4iKQorICAgICAgICBhdigiI2FcblxuICAgXG5hPTNcblxuIikKKworICAgICAgICBhdigiXG5cbmEqKjMiLCJldmFsIikKKyAgICAgICAgYXYoIlxuIFxuYSoqMyIsImV2YWwiKQorICAgICAgICBhdigiI2FcbiNiXG5hKiozIiwiZXZhbCIpCisKKyAgICAgICAgYXYoImRlZiBmKCk6XG4gdHJ5OiBwYXNzXG4gZmluYWxseTogW3ggZm9yIHggaW4gKDEsMildXG4iKQorICAgICAgICBhdigiZGVmIGYoKTpcbiBwYXNzXG4jZm9vXG4iKQorICAgICAgICBhdigiQGEuYi5jXG5kZWYgZigpOlxuIHBhc3NcbiIpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlKHNlbGYpOgorICAgICAgICBhaSA9IHNlbGYuYXNzZXJ0SW5jb21wbGV0ZQorCisgICAgICAgIGFpKCIoYSAqKiIpCisgICAgICAgIGFpKCIoYSxiLCIpCisgICAgICAgIGFpKCIoYSxiLCgiKQorICAgICAgICBhaSgiKGEsYiwoIikKKyAgICAgICAgYWkoImEgPSAoIikKKyAgICAgICAgYWkoImEgPSB7IikKKyAgICAgICAgYWkoImIgKyB7IikKKworICAgICAgICBhaSgiaWYgOT09MzpcbiAgIHBhc3NcbmVsc2U6IikKKyAgICAgICAgYWkoImlmIDk9PTM6XG4gICBwYXNzXG5lbHNlOlxuIikKKyAgICAgICAgYWkoImlmIDk9PTM6XG4gICBwYXNzXG5lbHNlOlxuICAgcGFzcyIpCisgICAgICAgIGFpKCJpZiAxOiIpCisgICAgICAgIGFpKCJpZiAxOlxuIikKKyAgICAgICAgYWkoImlmIDE6XG4gcGFzc1xuIGlmIDE6XG4gIHBhc3NcbiBlbHNlOiIpCisgICAgICAgIGFpKCJpZiAxOlxuIHBhc3NcbiBpZiAxOlxuICBwYXNzXG4gZWxzZTpcbiIpCisgICAgICAgIGFpKCJpZiAxOlxuIHBhc3NcbiBpZiAxOlxuICBwYXNzXG4gZWxzZTpcbiAgcGFzcyIpCisKKyAgICAgICAgYWkoImRlZiB4KCk6IikKKyAgICAgICAgYWkoImRlZiB4KCk6XG4iKQorICAgICAgICBhaSgiZGVmIHgoKTpcblxuIikKKworICAgICAgICBhaSgiZGVmIHgoKTpcbiAgcGFzcyIpCisgICAgICAgIGFpKCJkZWYgeCgpOlxuICBwYXNzXG4gIikKKyAgICAgICAgYWkoImRlZiB4KCk6XG4gIHBhc3NcbiAgIikKKyAgICAgICAgYWkoIlxuXG5kZWYgeCgpOlxuICBwYXNzIikKKworICAgICAgICBhaSgiYSA9IDkrIFxcIikKKyAgICAgICAgYWkoImEgPSAnYVxcIikKKyAgICAgICAgYWkoImEgPSAnJyd4eSIpCisKKyAgICAgICAgYWkoIiIsImV2YWwiKQorICAgICAgICBhaSgiXG4iLCJldmFsIikKKyAgICAgICAgYWkoIigiLCJldmFsIikKKyAgICAgICAgYWkoIihcblxuXG4iLCJldmFsIikKKyAgICAgICAgYWkoIig5KyIsImV2YWwiKQorICAgICAgICBhaSgiOSsgXFwiLCJldmFsIikKKyAgICAgICAgYWkoImxhbWJkYSB6OiBcXCIsImV2YWwiKQorCisgICAgICAgIGFpKCJpZiBUcnVlOlxuIGlmIFRydWU6XG4gIGlmIFRydWU6ICAgXG4iKQorCisgICAgICAgIGFpKCJAYSgiKQorICAgICAgICBhaSgiQGEoYiIpCisgICAgICAgIGFpKCJAYShiLCIpCisgICAgICAgIGFpKCJAYShiLGMiKQorICAgICAgICBhaSgiQGEoYixjLCIpCisKKyAgICAgICAgYWkoImZyb20gYSBpbXBvcnQgKCIpCisgICAgICAgIGFpKCJmcm9tIGEgaW1wb3J0IChiIikKKyAgICAgICAgYWkoImZyb20gYSBpbXBvcnQgKGIsIikKKyAgICAgICAgYWkoImZyb20gYSBpbXBvcnQgKGIsYyIpCisgICAgICAgIGFpKCJmcm9tIGEgaW1wb3J0IChiLGMsIikKKworICAgICAgICBhaSgiWyIpOworICAgICAgICBhaSgiW2EiKTsKKyAgICAgICAgYWkoIlthLCIpOworICAgICAgICBhaSgiW2EsYiIpOworICAgICAgICBhaSgiW2EsYiwiKTsKKworICAgICAgICBhaSgieyIpOworICAgICAgICBhaSgie2EiKTsKKyAgICAgICAgYWkoInthOiIpOworICAgICAgICBhaSgie2E6YiIpOworICAgICAgICBhaSgie2E6YiwiKTsKKyAgICAgICAgYWkoInthOmIsYyIpOworICAgICAgICBhaSgie2E6YixjOiIpOworICAgICAgICBhaSgie2E6YixjOmQiKTsKKyAgICAgICAgYWkoInthOmIsYzpkLCIpOworCisgICAgICAgIGFpKCJhKCIpCisgICAgICAgIGFpKCJhKGIiKQorICAgICAgICBhaSgiYShiLCIpCisgICAgICAgIGFpKCJhKGIsYyIpCisgICAgICAgIGFpKCJhKGIsYywiKQorCisgICAgICAgIGFpKCJhWyIpCisgICAgICAgIGFpKCJhW2IiKQorICAgICAgICBhaSgiYVtiLCIpCisgICAgICAgIGFpKCJhW2I6IikKKyAgICAgICAgYWkoImFbYjpjIikKKyAgICAgICAgYWkoImFbYjpjOiIpCisgICAgICAgIGFpKCJhW2I6YzpkIikKKworICAgICAgICBhaSgiZGVmIGEoIikKKyAgICAgICAgYWkoImRlZiBhKGIiKQorICAgICAgICBhaSgiZGVmIGEoYiwiKQorICAgICAgICBhaSgiZGVmIGEoYixjIikKKyAgICAgICAgYWkoImRlZiBhKGIsYywiKQorCisgICAgICAgIGFpKCIoIikKKyAgICAgICAgYWkoIihhIikKKyAgICAgICAgYWkoIihhLCIpCisgICAgICAgIGFpKCIoYSxiIikKKyAgICAgICAgYWkoIihhLGIsIikKKworICAgICAgICBhaSgiaWYgYTpcbiBwYXNzXG5lbGlmIGI6IikKKyAgICAgICAgYWkoImlmIGE6XG4gcGFzc1xuZWxpZiBiOlxuIHBhc3NcbmVsc2U6IikKKworICAgICAgICBhaSgid2hpbGUgYToiKQorICAgICAgICBhaSgid2hpbGUgYTpcbiBwYXNzXG5lbHNlOiIpCisKKyAgICAgICAgYWkoImZvciBhIGluIGI6IikKKyAgICAgICAgYWkoImZvciBhIGluIGI6XG4gcGFzc1xuZWxzZToiKQorCisgICAgICAgIGFpKCJ0cnk6IikKKyAgICAgICAgYWkoInRyeTpcbiBwYXNzXG5leGNlcHQ6IikKKyAgICAgICAgYWkoInRyeTpcbiBwYXNzXG5maW5hbGx5OiIpCisgICAgICAgIGFpKCJ0cnk6XG4gcGFzc1xuZXhjZXB0OlxuIHBhc3NcbmZpbmFsbHk6IikKKworICAgICAgICBhaSgid2l0aCBhOiIpCisgICAgICAgIGFpKCJ3aXRoIGEgYXMgYjoiKQorCisgICAgICAgIGFpKCJjbGFzcyBhOiIpCisgICAgICAgIGFpKCJjbGFzcyBhKCIpCisgICAgICAgIGFpKCJjbGFzcyBhKGIiKQorICAgICAgICBhaSgiY2xhc3MgYShiLCIpCisgICAgICAgIGFpKCJjbGFzcyBhKCk6IikKKworICAgICAgICBhaSgiW3ggZm9yIikKKyAgICAgICAgYWkoIlt4IGZvciB4IGluIikKKyAgICAgICAgYWkoIlt4IGZvciB4IGluICgiKQorCisgICAgICAgIGFpKCIoeCBmb3IiKQorICAgICAgICBhaSgiKHggZm9yIHggaW4iKQorICAgICAgICBhaSgiKHggZm9yIHggaW4gKCIpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkKHNlbGYpOgorICAgICAgICBhaSA9IHNlbGYuYXNzZXJ0SW52YWxpZAorICAgICAgICBhaSgiYSBiIikKKworICAgICAgICBhaSgiYSBAIikKKyAgICAgICAgYWkoImEgYiBAIikKKyAgICAgICAgYWkoImEgKiogQCIpCisKKyAgICAgICAgYWkoImEgPSAiKQorICAgICAgICBhaSgiYSA9IDkgKyIpCisKKyAgICAgICAgYWkoImRlZiB4KCk6XG5cbnBhc3NcbiIpCisKKyAgICAgICAgYWkoIlxuXG4gaWYgMTogcGFzc1xuXG5wYXNzIikKKworICAgICAgICBhaSgiYSA9IDkrIFxcXG4iKQorICAgICAgICBhaSgiYSA9ICdhXFwgIikKKyAgICAgICAgYWkoImEgPSAnYVxcXG4iKQorCisgICAgICAgIGFpKCJhID0gMSIsImV2YWwiKQorICAgICAgICBhaSgiYSA9ICgiLCJldmFsIikKKyAgICAgICAgYWkoIl0iLCJldmFsIikKKyAgICAgICAgYWkoIigpKSIsImV2YWwiKQorICAgICAgICBhaSgiW30iLCJldmFsIikKKyAgICAgICAgYWkoIjkrIiwiZXZhbCIpCisgICAgICAgIGFpKCJsYW1iZGEgejoiLCJldmFsIikKKyAgICAgICAgYWkoImEgYiIsImV2YWwiKQorCisgICAgICAgIGFpKCJyZXR1cm4gMi4zIikKKyAgICAgICAgYWkoImlmIChhID09IDEgYW5kIGIgPSAyKTogcGFzcyIpCisKKyAgICAgICAgYWkoImRlbCAxIikKKyAgICAgICAgYWkoImRlbCAoKSIpCisgICAgICAgIGFpKCJkZWwgKDEsKSIpCisgICAgICAgIGFpKCJkZWwgWzFdIikKKyAgICAgICAgYWkoImRlbCAnMSciKQorCisgICAgICAgIGFpKCJbaSBmb3IgaSBpbiByYW5nZSgxMCldID0gKDEsIDIsIDMpIikKKworICAgIGRlZiB0ZXN0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBpbGVfY29tbWFuZCgiYSA9IDFcbiIsICJhYmMiKS5jb19maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlKCJhID0gMVxuIiwgImFiYyIsICdzaW5nbGUnKS5jb19maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjb21waWxlX2NvbW1hbmQoImEgPSAxXG4iLCAiYWJjIikuY29fZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSgiYSA9IDFcbiIsICJkZWYiLCAnc2luZ2xlJykuY29fZmlsZW5hbWUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChDb2Rlb3BUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1ZGRiMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQpAQCAtMCwwICsxLDM3IEBACisKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCwgdW5pdHRlc3QKK2ltcG9ydCBvcworCitjbGFzcyBDb2RpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgorICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFkX2NvZGluZzIoc2VsZik6CisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcyJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHZlcmlmeV9iYWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIF9faW1wb3J0X18sICd0ZXN0LicgKyBtb2R1bGVfbmFtZSkKKworICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZwOgorICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgdGV4dCwgZmlsZW5hbWUsICdleGVjJykKKworICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQorICAgICAgICBpbnB1dCA9IHUiIyBjb2Rpbmc6IGFzY2lpXG5cTntTTk9XTUFOfSIuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpIGFzIGM6CisgICAgICAgICAgICBjb21waWxlKGlucHV0LCAiPHN0cmluZz4iLCAiZXhlYyIpCisgICAgICAgIGV4cGVjdGVkID0gIidhc2NpaScgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGUgMHhlMiBpbiBwb3NpdGlvbiAxNjogIiBcCisgICAgICAgICAgICAgICAgICAgIm9yZGluYWwgbm90IGluIHJhbmdlKDEyOCkiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmV4Y2VwdGlvbi5hcmdzWzBdLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29kaW5nVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29lcmNpb24ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2VyY2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjU1YzQxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29lcmNpb24ucHkKQEAgLTAsMCArMSwzNDggQEAKK2ltcG9ydCBjb3B5CitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVGVzdEZhaWxlZCwgY2hlY2tfd2FybmluZ3MKKworCisjIEZha2UgYSBudW1iZXIgdGhhdCBpbXBsZW1lbnRzIG51bWVyaWMgbWV0aG9kcyB0aHJvdWdoIF9fY29lcmNlX18KK2NsYXNzIENvZXJjZU51bWJlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5hcmcgPSBhcmcKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8Q29lcmNlTnVtYmVyICVzPicgJSByZXByKHNlbGYuYXJnKQorCisgICAgZGVmIF9fY29lcmNlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDb2VyY2VOdW1iZXIpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXJnLCBvdGhlci5hcmcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5hcmcsIG90aGVyKQorCisjIE5ldy1zdHlsZSBjbGFzcyB2ZXJzaW9uIG9mIENvZXJjZU51bWJlcgorY2xhc3MgQ29lcmNlVG8ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5hcmcgPSBhcmcKKyAgICBkZWYgX19jb2VyY2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIENvZXJjZVRvKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFyZywgb3RoZXIuYXJnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hcmcsIG90aGVyCisKKworIyBGYWtlIGEgbnVtYmVyIHRoYXQgaW1wbGVtZW50cyBudW1lcmljIG9wcyB0aHJvdWdoIG1ldGhvZHMuCitjbGFzcyBNZXRob2ROdW1iZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsYXJnKToKKyAgICAgICAgc2VsZi5hcmcgPSBhcmcKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8TWV0aG9kTnVtYmVyICVzPicgJSByZXByKHNlbGYuYXJnKQorCisgICAgZGVmIF9fYWRkX18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmFyZyArIG90aGVyCisKKyAgICBkZWYgX19yYWRkX18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBvdGhlciArIHNlbGYuYXJnCisKKyAgICBkZWYgX19zdWJfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXJnIC0gb3RoZXIKKworICAgIGRlZiBfX3JzdWJfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIG90aGVyIC0gc2VsZi5hcmcKKworICAgIGRlZiBfX211bF9fKHNlbGYsb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5hcmcgKiBvdGhlcgorCisgICAgZGVmIF9fcm11bF9fKHNlbGYsb3RoZXIpOgorICAgICAgICByZXR1cm4gb3RoZXIgKiBzZWxmLmFyZworCisgICAgZGVmIF9fZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmFyZyAvIG90aGVyCisKKyAgICBkZWYgX19yZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBvdGhlciAvIHNlbGYuYXJnCisKKyAgICBkZWYgX190cnVlZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmFyZyAvIG90aGVyCisKKyAgICBkZWYgX19ydHJ1ZWRpdl9fKHNlbGYsb3RoZXIpOgorICAgICAgICByZXR1cm4gb3RoZXIgLyBzZWxmLmFyZworCisgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXJnIC8vIG90aGVyCisKKyAgICBkZWYgX19yZmxvb3JkaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIG90aGVyIC8vIHNlbGYuYXJnCisKKyAgICBkZWYgX19wb3dfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXJnICoqIG90aGVyCisKKyAgICBkZWYgX19ycG93X18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBvdGhlciAqKiBzZWxmLmFyZworCisgICAgZGVmIF9fbW9kX18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmFyZyAlIG90aGVyCisKKyAgICBkZWYgX19ybW9kX18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBvdGhlciAlIHNlbGYuYXJnCisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBjbXAoc2VsZi5hcmcsIG90aGVyKQorCisKK2NhbmRpZGF0ZXMgPSBbMiwgMkwsIDQuMCwgMiswaiwgWzFdLCAoMiwpLCBOb25lLAorICAgICAgICAgICAgICBNZXRob2ROdW1iZXIoMiksIENvZXJjZU51bWJlcigyKV0KKworaW5maXhfYmlub3BzID0gWyAnKycsICctJywgJyonLCAnKionLCAnJScsICcvLycsICcvJyBdCisKK1RFID0gVHlwZUVycm9yCisjIGIgPSBib3RoIG5vcm1hbCBhbmQgYXVnbWVudGVkIGdpdmUgc2FtZSByZXN1bHQgbGlzdAorIyBzID0gc2luZ2xlIHJlc3VsdCBsaXN0cyBmb3Igbm9ybWFsIGFuZCBhdWdtZW50ZWQKKyMgZSA9IGVxdWFscyBvdGhlciByZXN1bHRzCisjIHJlc3VsdCBsaXN0czogWycrJywgJy0nLCAnKicsICcqKicsICclJywgJy8vJywgKCdjbGFzc2ljIC8nLCAnbmV3IC8nKV0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLXR1cGxlIGlmIHJlc3VsdHMgZGlmZmVyCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugb25seSBvbmUgdmFsdWUKK2luZml4X3Jlc3VsdHMgPSB7CisgICAgIyAyCisgICAgKDAsMCk6ICgnYicsIFs0LCAwLCA0LCA0LCAwLCAxLCAoMSwgMS4wKV0pLAorICAgICgwLDEpOiAoJ2UnLCAoMCwwKSksCisgICAgKDAsMik6ICgnYicsIFs2LjAsIC0yLjAsIDguMCwgMTYuMCwgMi4wLCAwLjAsIDAuNV0pLAorICAgICgwLDMpOiAoJ2InLCBbNCswaiwgMCswaiwgNCswaiwgNCswaiwgMCswaiwgMSswaiwgMSswal0pLAorICAgICgwLDQpOiAoJ2InLCBbVEUsIFRFLCBbMSwgMV0sIFRFLCBURSwgVEUsIFRFXSksCisgICAgKDAsNSk6ICgnYicsIFtURSwgVEUsICgyLCAyKSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoMCw2KTogKCdiJywgW1RFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSksCisgICAgKDAsNyk6ICgnZScsICgwLDApKSwKKyAgICAoMCw4KTogKCdlJywgKDAsMCkpLAorCisgICAgIyAyTAorICAgICgxLDApOiAoJ2UnLCAoMCwwKSksCisgICAgKDEsMSk6ICgnZScsICgwLDEpKSwKKyAgICAoMSwyKTogKCdlJywgKDAsMikpLAorICAgICgxLDMpOiAoJ2UnLCAoMCwzKSksCisgICAgKDEsNCk6ICgnZScsICgwLDQpKSwKKyAgICAoMSw1KTogKCdlJywgKDAsNSkpLAorICAgICgxLDYpOiAoJ2UnLCAoMCw2KSksCisgICAgKDEsNyk6ICgnZScsICgwLDcpKSwKKyAgICAoMSw4KTogKCdlJywgKDAsOCkpLAorCisgICAgIyA0LjAKKyAgICAoMiwwKTogKCdiJywgWzYuMCwgMi4wLCA4LjAsIDE2LjAsIDAuMCwgMi4wLCAyLjBdKSwKKyAgICAoMiwxKTogKCdlJywgKDIsMCkpLAorICAgICgyLDIpOiAoJ2InLCBbOC4wLCAwLjAsIDE2LjAsIDI1Ni4wLCAwLjAsIDEuMCwgMS4wXSksCisgICAgKDIsMyk6ICgnYicsIFs2KzBqLCAyKzBqLCA4KzBqLCAxNiswaiwgMCswaiwgMiswaiwgMiswal0pLAorICAgICgyLDQpOiAoJ2InLCBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoMiw1KTogKCdlJywgKDIsNCkpLAorICAgICgyLDYpOiAoJ2UnLCAoMiw0KSksCisgICAgKDIsNyk6ICgnZScsICgyLDApKSwKKyAgICAoMiw4KTogKCdlJywgKDIsMCkpLAorCisgICAgIyAoMiswaikKKyAgICAoMywwKTogKCdiJywgWzQrMGosIDArMGosIDQrMGosIDQrMGosIDArMGosIDErMGosIDErMGpdKSwKKyAgICAoMywxKTogKCdlJywgKDMsMCkpLAorICAgICgzLDIpOiAoJ2InLCBbNiswaiwgLTIrMGosIDgrMGosIDE2KzBqLCAyKzBqLCAwKzBqLCAwLjUrMGpdKSwKKyAgICAoMywzKTogKCdiJywgWzQrMGosIDArMGosIDQrMGosIDQrMGosIDArMGosIDErMGosIDErMGpdKSwKKyAgICAoMyw0KTogKCdiJywgW1RFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSksCisgICAgKDMsNSk6ICgnZScsICgzLDQpKSwKKyAgICAoMyw2KTogKCdlJywgKDMsNCkpLAorICAgICgzLDcpOiAoJ2UnLCAoMywwKSksCisgICAgKDMsOCk6ICgnZScsICgzLDApKSwKKworICAgICMgWzFdCisgICAgKDQsMCk6ICgnYicsIFtURSwgVEUsIFsxLCAxXSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoNCwxKTogKCdlJywgKDQsMCkpLAorICAgICg0LDIpOiAoJ2InLCBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoNCwzKTogKCdiJywgW1RFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSksCisgICAgKDQsNCk6ICgnYicsIFtbMSwgMV0sIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoNCw1KTogKCdzJywgW1RFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSwgW1sxLCAyXSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0pLAorICAgICg0LDYpOiAoJ2InLCBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoNCw3KTogKCdlJywgKDQsMCkpLAorICAgICg0LDgpOiAoJ2UnLCAoNCwwKSksCisKKyAgICAjICgyLCkKKyAgICAoNSwwKTogKCdiJywgW1RFLCBURSwgKDIsIDIpLCBURSwgVEUsIFRFLCBURV0pLAorICAgICg1LDEpOiAoJ2UnLCAoNSwwKSksCisgICAgKDUsMik6ICgnYicsIFtURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0pLAorICAgICg1LDMpOiAoJ2UnLCAoNSwyKSksCisgICAgKDUsNCk6ICgnZScsICg1LDIpKSwKKyAgICAoNSw1KTogKCdiJywgWygyLCAyKSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0pLAorICAgICg1LDYpOiAoJ2InLCBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoNSw3KTogKCdlJywgKDUsMCkpLAorICAgICg1LDgpOiAoJ2UnLCAoNSwwKSksCisKKyAgICAjIE5vbmUKKyAgICAoNiwwKTogKCdiJywgW1RFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSksCisgICAgKDYsMSk6ICgnZScsICg2LDApKSwKKyAgICAoNiwyKTogKCdlJywgKDYsMCkpLAorICAgICg2LDMpOiAoJ2UnLCAoNiwwKSksCisgICAgKDYsNCk6ICgnZScsICg2LDApKSwKKyAgICAoNiw1KTogKCdlJywgKDYsMCkpLAorICAgICg2LDYpOiAoJ2UnLCAoNiwwKSksCisgICAgKDYsNyk6ICgnZScsICg2LDApKSwKKyAgICAoNiw4KTogKCdlJywgKDYsMCkpLAorCisgICAgIyBNZXRob2ROdW1iZXIoMikKKyAgICAoNywwKTogKCdlJywgKDAsMCkpLAorICAgICg3LDEpOiAoJ2UnLCAoMCwxKSksCisgICAgKDcsMik6ICgnZScsICgwLDIpKSwKKyAgICAoNywzKTogKCdlJywgKDAsMykpLAorICAgICg3LDQpOiAoJ2UnLCAoMCw0KSksCisgICAgKDcsNSk6ICgnZScsICgwLDUpKSwKKyAgICAoNyw2KTogKCdlJywgKDAsNikpLAorICAgICg3LDcpOiAoJ2UnLCAoMCw3KSksCisgICAgKDcsOCk6ICgnZScsICgwLDgpKSwKKworICAgICMgQ29lcmNlTnVtYmVyKDIpCisgICAgKDgsMCk6ICgnZScsICgwLDApKSwKKyAgICAoOCwxKTogKCdlJywgKDAsMSkpLAorICAgICg4LDIpOiAoJ2UnLCAoMCwyKSksCisgICAgKDgsMyk6ICgnZScsICgwLDMpKSwKKyAgICAoOCw0KTogKCdlJywgKDAsNCkpLAorICAgICg4LDUpOiAoJ2UnLCAoMCw1KSksCisgICAgKDgsNik6ICgnZScsICgwLDYpKSwKKyAgICAoOCw3KTogKCdlJywgKDAsNykpLAorICAgICg4LDgpOiAoJ2UnLCAoMCw4KSksCit9CisKK2RlZiBwcm9jZXNzX2luZml4X3Jlc3VsdHMoKToKKyAgICBmb3Iga2V5IGluIHNvcnRlZChpbmZpeF9yZXN1bHRzKToKKyAgICAgICAgdmFsID0gaW5maXhfcmVzdWx0c1trZXldCisgICAgICAgIGlmIHZhbFswXSA9PSAnZSc6CisgICAgICAgICAgICBpbmZpeF9yZXN1bHRzW2tleV0gPSBpbmZpeF9yZXN1bHRzW3ZhbFsxXV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHZhbFswXSA9PSAncyc6CisgICAgICAgICAgICAgICAgcmVzID0gKHZhbFsxXSwgdmFsWzJdKQorICAgICAgICAgICAgZWxpZiB2YWxbMF0gPT0gJ2InOgorICAgICAgICAgICAgICAgIHJlcyA9ICh2YWxbMV0sIHZhbFsxXSkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzW2ldWzZdLCB0dXBsZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIDEvMiA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0aW5nIHdpdGggY2xhc3NpYyAoZmxvb3IpIGRpdmlzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICByZXNbaV1bNl0gPSByZXNbaV1bNl1bMF0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdGluZyB3aXRoIC1RbmV3CisgICAgICAgICAgICAgICAgICAgICAgICByZXNbaV1bNl0gPSByZXNbaV1bNl1bMV0KKyAgICAgICAgICAgIGluZml4X3Jlc3VsdHNba2V5XSA9IHJlcworCisKK3dpdGggY2hlY2tfd2FybmluZ3MoKCJjbGFzc2ljIChpbnR8bG9uZykgZGl2aXNpb24iLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgICAgICAgICBxdWlldD1UcnVlKToKKyAgICBwcm9jZXNzX2luZml4X3Jlc3VsdHMoKQorICAgICMgbm93IGluZml4X3Jlc3VsdHMgaGFzIHR3byBsaXN0cyBvZiByZXN1bHRzIGZvciBldmVyeSBwYWlyaW5nLgorCitwcmVmaXhfYmlub3BzID0gWyAnZGl2bW9kJyBdCitwcmVmaXhfcmVzdWx0cyA9IFsKKyAgICBbKDEsMCksICgxTCwwTCksICgwLjAsMi4wKSwgKCgxKzBqKSwwaiksIFRFLCBURSwgVEUsIFRFLCAoMSwwKV0sCisgICAgWygxTCwwTCksICgxTCwwTCksICgwLjAsMi4wKSwgKCgxKzBqKSwwaiksIFRFLCBURSwgVEUsIFRFLCAoMUwsMEwpXSwKKyAgICBbKDIuMCwwLjApLCAoMi4wLDAuMCksICgxLjAsMC4wKSwgKCgyKzBqKSwwaiksIFRFLCBURSwgVEUsIFRFLCAoMi4wLDAuMCldLAorICAgIFsoKDErMGopLDBqKSwgKCgxKzBqKSwwaiksICgwaiwoMiswaikpLCAoKDErMGopLDBqKSwgVEUsIFRFLCBURSwgVEUsICgoMSswaiksMGopXSwKKyAgICBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0sCisgICAgW1RFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdLAorICAgIFtURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSwKKyAgICBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0sCisgICAgWygxLDApLCAoMUwsMEwpLCAoMC4wLDIuMCksICgoMSswaiksMGopLCBURSwgVEUsIFRFLCBURSwgKDEsMCldCitdCisKK2RlZiBmb3JtYXRfZmxvYXQodmFsdWUpOgorICAgIGlmIGFicyh2YWx1ZSkgPCAwLjAxOgorICAgICAgICByZXR1cm4gJzAuMCcKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJyUuMWYnICUgdmFsdWUKKworIyBhdm9pZCB0ZXN0aW5nIHBsYXRmb3JtIGZwIHF1aXJrcworZGVmIGZvcm1hdF9yZXN1bHQodmFsdWUpOgorICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGNvbXBsZXgpOgorICAgICAgICByZXR1cm4gJyglcyArICVzaiknICUgKGZvcm1hdF9mbG9hdCh2YWx1ZS5yZWFsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZmxvYXQodmFsdWUuaW1hZykpCisgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgIHJldHVybiBmb3JtYXRfZmxvYXQodmFsdWUpCisgICAgcmV0dXJuIHN0cih2YWx1ZSkKKworY2xhc3MgQ29lcmNpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbmZpeF9iaW5vcHMoc2VsZik6CisgICAgICAgIGZvciBpYSwgYSBpbiBlbnVtZXJhdGUoY2FuZGlkYXRlcyk6CisgICAgICAgICAgICBmb3IgaWIsIGIgaW4gZW51bWVyYXRlKGNhbmRpZGF0ZXMpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBpbmZpeF9yZXN1bHRzWyhpYSwgaWIpXQorICAgICAgICAgICAgICAgIGZvciBvcCwgcmVzLCBpcmVzIGluIHppcChpbmZpeF9iaW5vcHMsIHJlc3VsdHNbMF0sIHJlc3VsdHNbMV0pOgorICAgICAgICAgICAgICAgICAgICBpZiByZXMgaXMgVEU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYSAlcyBiJyAlIG9wLCB7J2EnOiBhLCAnYic6IGJ9KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfcmVzdWx0KHJlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9yZXN1bHQoZXZhbCgnYSAlcyBiJyAlIG9wKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcyAlcyAlcyA9PSAlcyBmYWlsZWQnICUgKGEsIG9wLCBiLCByZXMpKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB6ID0gY29weS5jb3B5KGEpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBjb3B5LkVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgeiA9IGEgIyBhc3N1bWUgaXQgaGFzIG5vIGlucGxhY2Ugb3BzCisgICAgICAgICAgICAgICAgICAgIGlmIGlyZXMgaXMgVEU6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyAneiAlcz0gYicgJSBvcAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiVHlwZUVycm9yIG5vdCByYWlzZWQiKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhlYygneiAlcz0gYicgJSBvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXJlcywgeikKKworICAgIGRlZiB0ZXN0X3ByZWZpeF9iaW5vcHMoc2VsZik6CisgICAgICAgIGZvciBpYSwgYSBpbiBlbnVtZXJhdGUoY2FuZGlkYXRlcyk6CisgICAgICAgICAgICBmb3IgaWIsIGIgaW4gZW51bWVyYXRlKGNhbmRpZGF0ZXMpOgorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBwcmVmaXhfYmlub3BzOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBwcmVmaXhfcmVzdWx0c1tpYV1baWJdCisgICAgICAgICAgICAgICAgICAgIGlmIHJlcyBpcyBURToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcyhhLCBiKScgJSBvcCwgeydhJzogYSwgJ2InOiBifSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X3Jlc3VsdChyZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfcmVzdWx0KGV2YWwoJyVzKGEsIGIpJyAlIG9wKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcyglcywgJXMpID09ICVzIGZhaWxlZCcgJSAob3AsIGEsIGIsIHJlcykpCisKKyAgICBkZWYgdGVzdF9jbXB0eXBlcyhzZWxmKToKKyAgICAgICAgIyBCdWlsdC1pbiB0cF9jb21wYXJlIHNsb3RzIGV4cGVjdCB0aGVpciBhcmd1bWVudHMgdG8gaGF2ZSB0aGUKKyAgICAgICAgIyBzYW1lIHR5cGUsIGJ1dCBhIHVzZXItZGVmaW5lZCBfX2NvZXJjZV9fIGRvZXNuJ3QgaGF2ZSB0byBvYmV5LgorICAgICAgICAjIFNGICM5ODAzNTIKKyAgICAgICAgZXZpbF9jb2VyY2VyID0gQ29lcmNlVG8oNDIpCisgICAgICAgICMgTWFrZSBzdXJlIHRoZXNlIGRvbid0IGNyYXNoIGFueSBtb3JlCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY21wKHUnZmlzaCcsIGV2aWxfY29lcmNlciksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY21wKHNsaWNlKDEpLCBldmlsX2NvZXJjZXIpLCAwKQorICAgICAgICAjIC4uLmJ1dCB0aGF0IHRoaXMgc3RpbGwgd29ya3MKKyAgICAgICAgY2xhc3MgV2Fja3lDb21wYXJlcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fY21wX18oc2xmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyID09IDQyLCAnZXhwZWN0ZWQgZXZpbF9jb2VyY2VyLCBnb3QgJXInICUgb3RoZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIEludmFsaWQgY21wIG1ha2VzIHRoaXMgdW5oYXNoYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChXYWNreUNvbXBhcmVyKCksIGV2aWxfY29lcmNlciksIDApCisgICAgICAgICMgLi4uYW5kIGNsYXNzaWMgY2xhc3NlcyB0b28sIHNpbmNlIHRoYXQgY29kZSBwYXRoIGlzIGEgbGl0dGxlIGRpZmZlcmVudAorICAgICAgICBjbGFzcyBDbGFzc2ljV2Fja3lDb21wYXJlcjoKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdGhlciA9PSA0MiwgJ2V4cGVjdGVkIGV2aWxfY29lcmNlciwgZ290ICVyJyAlIG90aGVyKQorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKENsYXNzaWNXYWNreUNvbXBhcmVyKCksIGV2aWxfY29lcmNlciksIDApCisKKyAgICBkZWYgdGVzdF9pbmZpbml0ZV9yZWNfY2xhc3NpY19jbGFzc2VzKHNlbGYpOgorICAgICAgICAjIGlmIF9fY29lcmNlX18oKSByZXR1cm5zIGl0cyBhcmd1bWVudHMgcmV2ZXJzZWQgaXQgY2F1c2VzIGFuIGluZmluaXRlCisgICAgICAgICMgcmVjdXJzaW9uIGZvciBjbGFzc2ljIGNsYXNzZXMuCisgICAgICAgIGNsYXNzIFRlc3RlcjoKKyAgICAgICAgICAgIGRlZiBfX2NvZXJjZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIsIHNlbGYKKworICAgICAgICBleGMgPSBUZXN0RmFpbGVkKCJfX2NvZXJjZV9fKCkgcmV0dXJuaW5nIGl0cyBhcmd1bWVudHMgcmV2ZXJzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgcmFpc2UgUnVudGltZUVycm9yIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgVGVzdGVyKCkgKyAxCisgICAgICAgIGV4Y2VwdCAoUnVudGltZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJhaXNlIGV4YworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgZXhjCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiY29tcGxleCBkaXZtb2QuLiwgLy8gYW5kICUgYXJlIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAoImNsYXNzaWMgKGludHxsb25nKSBkaXZpc2lvbiIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICBxdWlldD1UcnVlKToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KENvZXJjaW9uVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmRlYjNkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKQEAgLTAsMCArMSwxMDQyIEBACisKK2ltcG9ydCB1bml0dGVzdCwgZG9jdGVzdCwgb3BlcmF0b3IKK2ltcG9ydCBpbnNwZWN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgQ291bnRlciwgT3JkZXJlZERpY3QKK2Zyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cworaW1wb3J0IHBpY2tsZSwgY1BpY2tsZSwgY29weQorZnJvbSByYW5kb20gaW1wb3J0IHJhbmRyYW5nZSwgc2h1ZmZsZQoraW1wb3J0IGtleXdvcmQKK2ltcG9ydCByZQoraW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgSGFzaGFibGUsIEl0ZXJhYmxlLCBJdGVyYXRvcgorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2l6ZWQsIENvbnRhaW5lciwgQ2FsbGFibGUKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IFNldCwgTXV0YWJsZVNldAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTWFwcGluZywgTXV0YWJsZU1hcHBpbmcKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IFNlcXVlbmNlLCBNdXRhYmxlU2VxdWVuY2UKKworVGVzdE5UID0gbmFtZWR0dXBsZSgnVGVzdE5UJywgJ3ggeSB6JykgICAgIyB0eXBlIHVzZWQgZm9yIHBpY2tsZSB0ZXN0cworCitjbGFzcyBUZXN0TmFtZWRUdXBsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mYWN0b3J5KHNlbGYpOgorICAgICAgICBQb2ludCA9IG5hbWVkdHVwbGUoJ1BvaW50JywgJ3ggeScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUG9pbnQuX19uYW1lX18sICdQb2ludCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUG9pbnQuX19zbG90c19fLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX21vZHVsZV9fLCBfX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX2dldGl0ZW1fXywgdHVwbGUuX19nZXRpdGVtX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUG9pbnQuX2ZpZWxkcywgKCd4JywgJ3knKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuYW1lZHR1cGxlLCAnYWJjJScsICdlZmcgZ2hpJykgICAgICAgIyB0eXBlIGhhcyBub24tYWxwaGEgY2hhcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuYW1lZHR1cGxlLCAnY2xhc3MnLCAnZWZnIGdoaScpICAgICAgIyB0eXBlIGhhcyBrZXl3b3JkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5hbWVkdHVwbGUsICc5YWJjJywgJ2VmZyBnaGknKSAgICAgICAjIHR5cGUgc3RhcnRzIHdpdGggZGlnaXQKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuYW1lZHR1cGxlLCAnYWJjJywgJ2VmZyBnJWhpJykgICAgICAgIyBmaWVsZCB3aXRoIG5vbi1hbHBoYSBjaGFyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5hbWVkdHVwbGUsICdhYmMnLCAnYWJjIGNsYXNzJykgICAgICAjIGZpZWxkIGhhcyBrZXl3b3JkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5hbWVkdHVwbGUsICdhYmMnLCAnOGVmZyA5Z2hpJykgICAgICAjIGZpZWxkIHN0YXJ0cyB3aXRoIGRpZ2l0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5hbWVkdHVwbGUsICdhYmMnLCAnX2VmZyBnaGknKSAgICAgICAjIGZpZWxkIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5hbWVkdHVwbGUsICdhYmMnLCAnZWZnIGVmZyBnaGknKSAgICAjIGR1cGxpY2F0ZSBmaWVsZAorCisgICAgICAgIG5hbWVkdHVwbGUoJ1BvaW50MCcsICd4MSB5MicpICAgIyBWZXJpZnkgdGhhdCBudW1iZXJzIGFyZSBhbGxvd2VkIGluIG5hbWVzCisgICAgICAgIG5hbWVkdHVwbGUoJ18nLCAnYSBiIGMnKSAgICAgICAgIyBUZXN0IGxlYWRpbmcgdW5kZXJzY29yZXMgaW4gYSB0eXBlbmFtZQorCisgICAgICAgIG50ID0gbmFtZWR0dXBsZSgnbnQnLCB1J3RoZSBxdWljayBicm93biBmb3gnKSAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB1bmljb2RlIGlucHV0CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oInUnIiwgcmVwcihudC5fZmllbGRzKSkKKyAgICAgICAgbnQgPSBuYW1lZHR1cGxlKCdudCcsICh1J3RoZScsIHUncXVpY2snKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHVuaWNvZGUgaW5wdXQKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigidSciLCByZXByKG50Ll9maWVsZHMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgUG9pbnQuX21ha2UsIFsxMV0pICAgICAgICAgICAgICAgICAgICAgIyBjYXRjaCB0b28gZmV3IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQb2ludC5fbWFrZSwgWzExLCAyMiwgMzNdKSAgICAgICAgICAgICAjIGNhdGNoIHRvbyBtYW55IGFyZ3MKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2ZhY3RvcnlfZG9jX2F0dHIoc2VsZik6CisgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX2RvY19fLCAnUG9pbnQoeCwgeSknKQorCisgICAgZGVmIHRlc3RfbmFtZV9maXhlcihzZWxmKToKKyAgICAgICAgZm9yIHNwZWMsIHJlbmFtZWQgaW4gWworICAgICAgICAgICAgWygnZWZnJywgJ2claGknKSwgICgnZWZnJywgJ18xJyldLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmllbGQgd2l0aCBub24tYWxwaGEgY2hhcgorICAgICAgICAgICAgWygnYWJjJywgJ2NsYXNzJyksICgnYWJjJywgJ18xJyldLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmllbGQgaGFzIGtleXdvcmQKKyAgICAgICAgICAgIFsoJzhlZmcnLCAnOWdoaScpLCAoJ18wJywgJ18xJyldLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpZWxkIHN0YXJ0cyB3aXRoIGRpZ2l0CisgICAgICAgICAgICBbKCdhYmMnLCAnX2VmZycpLCAoJ2FiYycsICdfMScpXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZCB3aXRoIGxlYWRpbmcgdW5kZXJzY29yZQorICAgICAgICAgICAgWygnYWJjJywgJ2VmZycsICdlZmcnLCAnZ2hpJyksICgnYWJjJywgJ2VmZycsICdfMicsICdnaGknKV0sICAgICMgZHVwbGljYXRlIGZpZWxkCisgICAgICAgICAgICBbKCdhYmMnLCAnJywgJ3gnKSwgKCdhYmMnLCAnXzEnLCAneCcpXSwgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZG5hbWUgaXMgYSBzcGFjZQorICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lZHR1cGxlKCdOVCcsIHNwZWMsIHJlbmFtZT1UcnVlKS5fZmllbGRzLCByZW5hbWVkKQorCisgICAgZGVmIHRlc3RfaW5zdGFuY2Uoc2VsZik6CisgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKKyAgICAgICAgcCA9IFBvaW50KDExLCAyMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQb2ludCh4PTExLCB5PTIyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQb2ludCgxMSwgeT0yMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUG9pbnQoeT0yMiwgeD0xMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUG9pbnQoKigxMSwgMjIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQb2ludCgqKmRpY3QoeD0xMSwgeT0yMikpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFBvaW50LCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgUG9pbnQsIDEsIDIsIDMpICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgJ1BvaW50KFhYWD0xLCB5PTIpJywgbG9jYWxzKCkpICAgIyB3cm9uZyBrZXl3b3JkIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgJ1BvaW50KHg9MSknLCBsb2NhbHMoKSkgICAgICAgICAgIyBtaXNzaW5nIGtleXdvcmQgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHApLCAnUG9pbnQoeD0xMSwgeT0yMiknKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdfX2RpY3RfXycsIGRpcihwKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZlcmlmeSBpbnN0YW5jZSBoYXMgbm8gZGljdAorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdfX3dlYWtyZWZfXycsIGRpcihwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQb2ludC5fbWFrZShbMTEsIDIyXSkpICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgX21ha2UgY2xhc3NtZXRob2QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9maWVsZHMsICgneCcsICd5JykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgX2ZpZWxkcyBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9yZXBsYWNlKHg9MSksICgxLCAyMikpICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgX3JlcGxhY2UgbWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fYXNkaWN0KCksIGRpY3QoeD0xMSwgeT0yMikpICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IF9hc2RpY3QgbWV0aG9kCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcC5fcmVwbGFjZSh4PTEsIGVycm9yPTIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZmFpbCgnRGlkIG5vdCBkZXRlY3QgYW4gaW5jb3JyZWN0IGZpZWxkbmFtZScpCisKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBmaWVsZCBzdHJpbmcgY2FuIGhhdmUgY29tbWFzCisgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCwgeScpCisgICAgICAgIHAgPSBQb2ludCh4PTExLCB5PTIyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocCksICdQb2ludCh4PTExLCB5PTIyKScpCisKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBmaWVsZHNwZWMgY2FuIGJlIGEgbm9uLXN0cmluZyBzZXF1ZW5jZQorICAgICAgICBQb2ludCA9IG5hbWVkdHVwbGUoJ1BvaW50JywgKCd4JywgJ3knKSkKKyAgICAgICAgcCA9IFBvaW50KHg9MTEsIHk9MjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihwKSwgJ1BvaW50KHg9MTEsIHk9MjIpJykKKworICAgIGRlZiB0ZXN0X3R1cGxlbmVzcyhzZWxmKToKKyAgICAgICAgUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKQorICAgICAgICBwID0gUG9pbnQoMTEsIDIyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwLCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCAoMTEsIDIyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1hdGNoZXMgYSByZWFsIHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUocCksICgxMSwgMjIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb2VyY2FibGUgdG8gYSByZWFsIHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwKSwgWzExLCAyMl0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb2VyY2FibGUgdG8gYSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KHApLCAyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgqcCksIDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3Rhci1hYmxlCisgICAgICAgIHgsIHkgPSBwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgKHgsIHkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bnBhY2tzIGxpa2UgYSB0dXBsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChwWzBdLCBwWzFdKSwgKDExLCAyMikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5kZXhhYmxlIGxpa2UgYSB0dXBsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBwLl9fZ2V0aXRlbV9fLCAzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC54LCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAueSwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGV2YWwsICdwLnonLCBsb2NhbHMoKSkKKworICAgIGRlZiB0ZXN0X29kZF9zaXplcyhzZWxmKToKKyAgICAgICAgWmVybyA9IG5hbWVkdHVwbGUoJ1plcm8nLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChaZXJvKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFplcm8uX21ha2UoW10pLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKFplcm8oKSksICdaZXJvKCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFplcm8oKS5fYXNkaWN0KCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFplcm8oKS5fZmllbGRzLCAoKSkKKworICAgICAgICBEb3QgPSBuYW1lZHR1cGxlKCdEb3QnLCAnZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRG90KDEpLCAoMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERvdC5fbWFrZShbMV0pLCAoMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERvdCgxKS5kLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoRG90KDEpKSwgJ0RvdChkPTEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEb3QoMSkuX2FzZGljdCgpLCB7J2QnOjF9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERvdCgxKS5fcmVwbGFjZShkPTk5OSksICg5OTksKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEb3QoMSkuX2ZpZWxkcywgKCdkJywpKQorCisgICAgICAgIG4gPSA1MDAwCisgICAgICAgIGltcG9ydCBzdHJpbmcsIHJhbmRvbQorICAgICAgICBuYW1lcyA9IGxpc3Qoc2V0KCcnLmpvaW4oW3JhbmRvbS5jaG9pY2Uoc3RyaW5nLmFzY2lpX2xldHRlcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMTApXSkgZm9yIGkgaW4gcmFuZ2UobikpKQorICAgICAgICBuID0gbGVuKG5hbWVzKQorICAgICAgICBCaWcgPSBuYW1lZHR1cGxlKCdCaWcnLCBuYW1lcykKKyAgICAgICAgYiA9IEJpZygqcmFuZ2UobikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgdHVwbGUocmFuZ2UobikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJpZy5fbWFrZShyYW5nZShuKSksIHR1cGxlKHJhbmdlKG4pKSkKKyAgICAgICAgZm9yIHBvcywgbmFtZSBpbiBlbnVtZXJhdGUobmFtZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKGIsIG5hbWUpLCBwb3MpCisgICAgICAgIHJlcHIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSByZXByKCkgZG9lc24ndCBibG93LXVwCisgICAgICAgIGQgPSBiLl9hc2RpY3QoKQorICAgICAgICBkX2V4cGVjdGVkID0gZGljdCh6aXAobmFtZXMsIHJhbmdlKG4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkX2V4cGVjdGVkKQorICAgICAgICBiMiA9IGIuX3JlcGxhY2UoKipkaWN0KFsobmFtZXNbMV0sIDk5OSksKG5hbWVzWy01XSwgNDIpXSkpCisgICAgICAgIGIyX2V4cGVjdGVkID0gcmFuZ2UobikKKyAgICAgICAgYjJfZXhwZWN0ZWRbMV0gPSA5OTkKKyAgICAgICAgYjJfZXhwZWN0ZWRbLTVdID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiMiwgdHVwbGUoYjJfZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuX2ZpZWxkcywgdHVwbGUobmFtZXMpKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBwID0gVGVzdE5UKHg9MTAsIHk9MjAsIHo9MzApCisgICAgICAgIGZvciBtb2R1bGUgaW4gcGlja2xlLCBjUGlja2xlOgorICAgICAgICAgICAgbG9hZHMgPSBnZXRhdHRyKG1vZHVsZSwgJ2xvYWRzJykKKyAgICAgICAgICAgIGR1bXBzID0gZ2V0YXR0cihtb2R1bGUsICdkdW1wcycpCisgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gLTEsIDAsIDEsIDI6CisgICAgICAgICAgICAgICAgcSA9IGxvYWRzKGR1bXBzKHAsIHByb3RvY29sKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9maWVsZHMsIHEuX2ZpZWxkcykKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIHAgPSBUZXN0TlQoeD0xMCwgeT0yMCwgej0zMCkKKyAgICAgICAgZm9yIGNvcGllciBpbiBjb3B5LmNvcHksIGNvcHkuZGVlcGNvcHk6CisgICAgICAgICAgICBxID0gY29waWVyKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX2ZpZWxkcywgcS5fZmllbGRzKQorCisgICAgZGVmIHRlc3RfbmFtZV9jb25mbGljdHMoc2VsZik6CisgICAgICAgICMgU29tZSBuYW1lcyBsaWtlICJzZWxmIiwgImNscyIsICJ0dXBsZSIsICJpdGVtZ2V0dGVyIiwgYW5kICJwcm9wZXJ0eSIKKyAgICAgICAgIyBmYWlsZWQgd2hlbiB1c2VkIGFzIGZpZWxkIG5hbWVzLiAgVGVzdCB0byBtYWtlIHN1cmUgdGhlc2Ugbm93IHdvcmsuCisgICAgICAgIFQgPSBuYW1lZHR1cGxlKCdUJywgJ2l0ZW1nZXR0ZXIgcHJvcGVydHkgc2VsZiBjbHMgdHVwbGUnKQorICAgICAgICB0ID0gVCgxLCAyLCAzLCA0LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsICgxLDIsMyw0LDUpKQorICAgICAgICBuZXd0ID0gdC5fcmVwbGFjZShpdGVtZ2V0dGVyPTEwLCBwcm9wZXJ0eT0yMCwgc2VsZj0zMCwgY2xzPTQwLCB0dXBsZT01MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXd0LCAoMTAsMjAsMzAsNDAsNTApKQorCisgICAgICAgICMgQnJvYWRlciB0ZXN0IG9mIGFsbCBpbnRlcmVzdGluZyBuYW1lcyBpbiBhIHRlbXBsYXRlCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHRlbXBsYXRlOgorICAgICAgICAgICAgVCA9IG5hbWVkdHVwbGUoJ1QnLCAneCcsIHZlcmJvc2U9VHJ1ZSkKKyAgICAgICAgd29yZHMgPSBzZXQocmUuZmluZGFsbCgnW0EtWmEtel0rJywgdGVtcGxhdGUuZ2V0dmFsdWUoKSkpCisgICAgICAgIHdvcmRzIC09IHNldChrZXl3b3JkLmt3bGlzdCkKKyAgICAgICAgVCA9IG5hbWVkdHVwbGUoJ1QnLCB3b3JkcykKKyAgICAgICAgIyB0ZXN0IF9fbmV3X18KKyAgICAgICAgdmFsdWVzID0gdHVwbGUocmFuZ2UobGVuKHdvcmRzKSkpCisgICAgICAgIHQgPSBUKCp2YWx1ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdmFsdWVzKQorICAgICAgICB0ID0gVCgqKmRpY3QoemlwKFQuX2ZpZWxkcywgdmFsdWVzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdmFsdWVzKQorICAgICAgICAjIHRlc3QgX21ha2UKKyAgICAgICAgdCA9IFQuX21ha2UodmFsdWVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHZhbHVlcykKKyAgICAgICAgIyBleGVyY2lzZSBfX3JlcHJfXworICAgICAgICByZXByKHQpCisgICAgICAgICMgdGVzdCBfYXNkaWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fYXNkaWN0KCksIGRpY3QoemlwKFQuX2ZpZWxkcywgdmFsdWVzKSkpCisgICAgICAgICMgdGVzdCBfcmVwbGFjZQorICAgICAgICB0ID0gVC5fbWFrZSh2YWx1ZXMpCisgICAgICAgIG5ld3ZhbHVlcyA9IHR1cGxlKHYqMTAgZm9yIHYgaW4gdmFsdWVzKQorICAgICAgICBuZXd0ID0gdC5fcmVwbGFjZSgqKmRpY3QoemlwKFQuX2ZpZWxkcywgbmV3dmFsdWVzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3dCwgbmV3dmFsdWVzKQorICAgICAgICAjIHRlc3QgX2ZpZWxkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFQuX2ZpZWxkcywgdHVwbGUod29yZHMpKQorICAgICAgICAjIHRlc3QgX19nZXRuZXdhcmdzX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Ll9fZ2V0bmV3YXJnc19fKCksIHZhbHVlcykKKworY2xhc3MgQUJDVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoc2VsZiwgYWJjLCAqbmFtZXMpOgorICAgICAgICBtZXRob2RzdHVicyA9IGRpY3QuZnJvbWtleXMobmFtZXMsIGxhbWJkYSBzLCAqYXJnczogMCkKKworICAgICAgICAjIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsgd2lsbCBhbGwgcmVxdWlyZWQgbWV0aG9kcyBhcmUgcHJlc2VudAorICAgICAgICBDID0gdHlwZSgnQycsIChhYmMsKSwgbWV0aG9kc3R1YnMpCisgICAgICAgIEMoKQorCisgICAgICAgICMgaW5zdGFudGlhdGlvbiBzaG91bGQgZmFpbCBpZiBhIHJlcXVpcmVkIG1ldGhvZCBpcyBtaXNzaW5nCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgc3R1YnMgPSBtZXRob2RzdHVicy5jb3B5KCkKKyAgICAgICAgICAgIGRlbCBzdHVic1tuYW1lXQorICAgICAgICAgICAgQyA9IHR5cGUoJ0MnLCAoYWJjLCksIHN0dWJzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDLCBuYW1lKQorCisgICAgZGVmIHZhbGlkYXRlX2lzaW5zdGFuY2Uoc2VsZiwgYWJjLCBuYW1lKToKKyAgICAgICAgc3R1YiA9IGxhbWJkYSBzLCAqYXJnczogMAorCisgICAgICAgICMgbmV3LXN0eWxlIGNsYXNzCisgICAgICAgIEMgPSB0eXBlKCdDJywgKG9iamVjdCwpLCB7bmFtZTogc3R1Yn0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShDKCksIGFiYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgYWJjKSkKKyAgICAgICAgIyBvbGQtc3R5bGUgY2xhc3MKKyAgICAgICAgY2xhc3MgQzogcGFzcworICAgICAgICBzZXRhdHRyKEMsIG5hbWUsIHN0dWIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShDKCksIGFiYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgYWJjKSkKKworICAgICAgICAjIG5ldy1zdHlsZSBjbGFzcworICAgICAgICBDID0gdHlwZSgnQycsIChvYmplY3QsKSwgeydfX2hhc2hfXyc6IE5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoQygpLCBhYmMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDLCBhYmMpKQorICAgICAgICAjIG9sZC1zdHlsZSBjbGFzcworICAgICAgICBjbGFzcyBDOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShDKCksIGFiYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIGFiYykpCisKKyAgICBkZWYgdmFsaWRhdGVfY29tcGFyaXNvbihzZWxmLCBpbnN0YW5jZSk6CisgICAgICAgIG9wcyA9IFsnbHQnLCAnZ3QnLCAnbGUnLCAnZ2UnLCAnbmUnLCAnb3InLCAnYW5kJywgJ3hvcicsICdzdWInXQorICAgICAgICBvcGVyYXRvcnMgPSB7fQorICAgICAgICBmb3Igb3AgaW4gb3BzOgorICAgICAgICAgICAgbmFtZSA9ICdfXycgKyBvcCArICdfXycKKyAgICAgICAgICAgIG9wZXJhdG9yc1tuYW1lXSA9IGdldGF0dHIob3BlcmF0b3IsIG5hbWUpCisKKyAgICAgICAgY2xhc3MgT3RoZXI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5yaWdodF9zaWRlID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHNlbGYucmlnaHRfc2lkZSA9IFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgX19sdF9fID0gX19lcV9fCisgICAgICAgICAgICBfX2d0X18gPSBfX2VxX18KKyAgICAgICAgICAgIF9fbGVfXyA9IF9fZXFfXworICAgICAgICAgICAgX19nZV9fID0gX19lcV9fCisgICAgICAgICAgICBfX25lX18gPSBfX2VxX18KKyAgICAgICAgICAgIF9fcm9yX18gPSBfX2VxX18KKyAgICAgICAgICAgIF9fcmFuZF9fID0gX19lcV9fCisgICAgICAgICAgICBfX3J4b3JfXyA9IF9fZXFfXworICAgICAgICAgICAgX19yc3ViX18gPSBfX2VxX18KKworICAgICAgICBmb3IgbmFtZSwgb3AgaW4gb3BlcmF0b3JzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihpbnN0YW5jZSwgbmFtZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG90aGVyID0gT3RoZXIoKQorICAgICAgICAgICAgb3AoaW5zdGFuY2UsIG90aGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyLnJpZ2h0X3NpZGUsJ1JpZ2h0IHNpZGUgbm90IGNhbGxlZCBmb3IgJXMuJXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAodHlwZShpbnN0YW5jZSksIG5hbWUpKQorCitjbGFzcyBUZXN0T25lVHJpY2tQb255QUJDcyhBQkNUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9IYXNoYWJsZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBzb21lIG5vbi1oYXNoYWJsZXMKKyAgICAgICAgbm9uX3NhbXBsZXMgPSBbbGlzdCgpLCBzZXQoKSwgZGljdCgpXQorICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBIYXNoYWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBIYXNoYWJsZSksIHJlcHIodHlwZSh4KSkpCisgICAgICAgICMgQ2hlY2sgc29tZSBoYXNoYWJsZXMKKyAgICAgICAgc2FtcGxlcyA9IFtOb25lLAorICAgICAgICAgICAgICAgICAgIGludCgpLCBmbG9hdCgpLCBjb21wbGV4KCksCisgICAgICAgICAgICAgICAgICAgc3RyKCksCisgICAgICAgICAgICAgICAgICAgdHVwbGUoKSwgZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgaW50LCBsaXN0LCBvYmplY3QsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIEhhc2hhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgSGFzaGFibGUpLCByZXByKHR5cGUoeCkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEhhc2hhYmxlKQorICAgICAgICAjIENoZWNrIGRpcmVjdCBzdWJjbGFzc2luZworICAgICAgICBjbGFzcyBIKEhhc2hhYmxlKToKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoSCwgc2VsZikuX19oYXNoX18oKQorICAgICAgICAgICAgX19lcV9fID0gSGFzaGFibGUuX19lcV9fICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKEgoKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhpbnQsIEgpKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoSGFzaGFibGUsICdfX2hhc2hfXycpCisgICAgICAgIHNlbGYudmFsaWRhdGVfaXNpbnN0YW5jZShIYXNoYWJsZSwgJ19faGFzaF9fJykKKworICAgIGRlZiB0ZXN0X0l0ZXJhYmxlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHNvbWUgbm9uLWl0ZXJhYmxlcworICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWpdCisgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIEl0ZXJhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIEl0ZXJhYmxlKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgIyBDaGVjayBzb21lIGl0ZXJhYmxlcworICAgICAgICBzYW1wbGVzID0gW3N0cigpLAorICAgICAgICAgICAgICAgICAgIHR1cGxlKCksIGxpc3QoKSwgc2V0KCksIGZyb3plbnNldCgpLCBkaWN0KCksCisgICAgICAgICAgICAgICAgICAgZGljdCgpLmtleXMoKSwgZGljdCgpLml0ZW1zKCksIGRpY3QoKS52YWx1ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAobGFtYmRhOiAoeWllbGQpKSgpLAorICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKKyAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIHNhbXBsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgSXRlcmFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYWJsZSksIHJlcHIodHlwZSh4KSkpCisgICAgICAgICMgQ2hlY2sgZGlyZWN0IHN1YmNsYXNzaW5nCisgICAgICAgIGNsYXNzIEkoSXRlcmFibGUpOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihJLCBzZWxmKS5fX2l0ZXJfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChJKCkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHN0ciwgSSkpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhJdGVyYWJsZSwgJ19faXRlcl9fJykKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKEl0ZXJhYmxlLCAnX19pdGVyX18nKQorCisgICAgZGVmIHRlc3RfSXRlcmF0b3Ioc2VsZik6CisgICAgICAgIG5vbl9zYW1wbGVzID0gW05vbmUsIDQyLCAzLjE0LCAxaiwgIiIuZW5jb2RlKCdhc2NpaScpLCAiIiwgKCksIFtdLAorICAgICAgICAgICAge30sIHNldCgpXQorICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBJdGVyYXRvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYXRvciksIHJlcHIodHlwZSh4KSkpCisgICAgICAgIHNhbXBsZXMgPSBbaXRlcihzdHIoKSksCisgICAgICAgICAgICAgICAgICAgaXRlcih0dXBsZSgpKSwgaXRlcihsaXN0KCkpLCBpdGVyKGRpY3QoKSksCisgICAgICAgICAgICAgICAgICAgaXRlcihzZXQoKSksIGl0ZXIoZnJvemVuc2V0KCkpLAorICAgICAgICAgICAgICAgICAgIGl0ZXIoZGljdCgpLmtleXMoKSksIGl0ZXIoZGljdCgpLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgIGl0ZXIoZGljdCgpLnZhbHVlcygpKSwKKyAgICAgICAgICAgICAgICAgICAobGFtYmRhOiAoeWllbGQpKSgpLAorICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKKyAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIHNhbXBsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgSXRlcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYXRvciksIHJlcHIodHlwZSh4KSkpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhJdGVyYXRvciwgJ25leHQnLCAnX19pdGVyX18nKQorCisgICAgICAgICMgSXNzdWUgMTA1NjUKKyAgICAgICAgY2xhc3MgTmV4dE9ubHk6CisgICAgICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKE5leHRPbmx5KCksIEl0ZXJhdG9yKQorICAgICAgICBjbGFzcyBOZXh0T25seU5ldyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShOZXh0T25seU5ldygpLCBJdGVyYXRvcikKKworICAgIGRlZiB0ZXN0X1NpemVkKHNlbGYpOgorICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWosCisgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGE6ICh5aWVsZCkpKCksCisgICAgICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBTaXplZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBTaXplZCksIHJlcHIodHlwZSh4KSkpCisgICAgICAgIHNhbXBsZXMgPSBbc3RyKCksCisgICAgICAgICAgICAgICAgICAgdHVwbGUoKSwgbGlzdCgpLCBzZXQoKSwgZnJvemVuc2V0KCksIGRpY3QoKSwKKyAgICAgICAgICAgICAgICAgICBkaWN0KCkua2V5cygpLCBkaWN0KCkuaXRlbXMoKSwgZGljdCgpLnZhbHVlcygpLAorICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBTaXplZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIFNpemVkKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKFNpemVkLCAnX19sZW5fXycpCisgICAgICAgIHNlbGYudmFsaWRhdGVfaXNpbnN0YW5jZShTaXplZCwgJ19fbGVuX18nKQorCisgICAgZGVmIHRlc3RfQ29udGFpbmVyKHNlbGYpOgorICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWosCisgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGE6ICh5aWVsZCkpKCksCisgICAgICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBDb250YWluZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgQ29udGFpbmVyKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgc2FtcGxlcyA9IFtzdHIoKSwKKyAgICAgICAgICAgICAgICAgICB0dXBsZSgpLCBsaXN0KCksIHNldCgpLCBmcm96ZW5zZXQoKSwgZGljdCgpLAorICAgICAgICAgICAgICAgICAgIGRpY3QoKS5rZXlzKCksIGRpY3QoKS5pdGVtcygpLAorICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBDb250YWluZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBDb250YWluZXIpLCByZXByKHR5cGUoeCkpKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoQ29udGFpbmVyLCAnX19jb250YWluc19fJykKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKENvbnRhaW5lciwgJ19fY29udGFpbnNfXycpCisKKyAgICBkZWYgdGVzdF9DYWxsYWJsZShzZWxmKToKKyAgICAgICAgbm9uX3NhbXBsZXMgPSBbTm9uZSwgNDIsIDMuMTQsIDFqLAorICAgICAgICAgICAgICAgICAgICAgICAiIiwgIiIuZW5jb2RlKCdhc2NpaScpLCAoKSwgW10sIHt9LCBzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYTogKHlpZWxkKSkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHggZm9yIHggaW4gW10pLAorICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIENhbGxhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIENhbGxhYmxlKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgc2FtcGxlcyA9IFtsYW1iZGE6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgdHlwZSwgaW50LCBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgbGVuLAorICAgICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kLCBbXS5hcHBlbmQsCisgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIENhbGxhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgQ2FsbGFibGUpLCByZXByKHR5cGUoeCkpKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoQ2FsbGFibGUsICdfX2NhbGxfXycpCisgICAgICAgIHNlbGYudmFsaWRhdGVfaXNpbnN0YW5jZShDYWxsYWJsZSwgJ19fY2FsbF9fJykKKworICAgIGRlZiB0ZXN0X2RpcmVjdF9zdWJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgZm9yIEIgaW4gSGFzaGFibGUsIEl0ZXJhYmxlLCBJdGVyYXRvciwgU2l6ZWQsIENvbnRhaW5lciwgQ2FsbGFibGU6CisgICAgICAgICAgICBjbGFzcyBDKEIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMsIEIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKGludCwgQykpCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyYXRpb24oc2VsZik6CisgICAgICAgIGZvciBCIGluIEhhc2hhYmxlLCBJdGVyYWJsZSwgSXRlcmF0b3IsIFNpemVkLCBDb250YWluZXIsIENhbGxhYmxlOgorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gdHlwZQorICAgICAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAgIyBNYWtlIHN1cmUgaXQgaXNuJ3QgaGFzaGFibGUgYnkgZGVmYXVsdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIEIpLCBCLl9fbmFtZV9fKQorICAgICAgICAgICAgQi5yZWdpc3RlcihDKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgQikpCisKK2NsYXNzIFdpdGhTZXQoTXV0YWJsZVNldCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXQ9KCkpOgorICAgICAgICBzZWxmLmRhdGEgPSBzZXQoaXQpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHNlbGYuZGF0YSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CisgICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuZGF0YQorCisgICAgZGVmIGFkZChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5kYXRhLmFkZChpdGVtKQorCisgICAgZGVmIGRpc2NhcmQoc2VsZiwgaXRlbSk6CisgICAgICAgIHNlbGYuZGF0YS5kaXNjYXJkKGl0ZW0pCisKK2NsYXNzIFRlc3RDb2xsZWN0aW9uQUJDcyhBQkNUZXN0Q2FzZSk6CisKKyAgICAjIFhYWCBGb3Igbm93LCB3ZSBvbmx5IHRlc3Qgc29tZSB2aXJ0dWFsIGluaGVyaXRhbmNlIHByb3BlcnRpZXMuCisgICAgIyBXZSBzaG91bGQgYWxzbyB0ZXN0IHRoZSBwcm9wZXIgYmVoYXZpb3Igb2YgdGhlIGNvbGxlY3Rpb24gQUJDcworICAgICMgYXMgcmVhbCBiYXNlIGNsYXNzZXMgb3IgbWl4LWluIGNsYXNzZXMuCisKKyAgICBkZWYgdGVzdF9TZXQoc2VsZik6CisgICAgICAgIGZvciBzYW1wbGUgaW4gW3NldCwgZnJvemVuc2V0XToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzYW1wbGUoKSwgU2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBTZXQpKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2V0LCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nKQorICAgICAgICBjbGFzcyBNeVNldChTZXQpOgorICAgICAgICAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIoW10pCisgICAgICAgIHNlbGYudmFsaWRhdGVfY29tcGFyaXNvbihNeVNldCgpKQorCisgICAgZGVmIHRlc3RfaGFzaF9TZXQoc2VsZik6CisgICAgICAgIGNsYXNzIE9uZVR3b1RocmVlU2V0KFNldCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5jb250ZW50cyA9IFsxLCAyLCAzXQorICAgICAgICAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICByZXR1cm4geCBpbiBzZWxmLmNvbnRlbnRzCisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuY29udGVudHMpCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jb250ZW50cykKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFzaCgpCisgICAgICAgIGEsIGIgPSBPbmVUd29UaHJlZVNldCgpLCBPbmVUd29UaHJlZVNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNoKGEpID09IGhhc2goYikpCisKKyAgICBkZWYgdGVzdF9NdXRhYmxlU2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2V0KCksIE11dGFibGVTZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNldCwgTXV0YWJsZVNldCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmcm96ZW5zZXQoKSwgTXV0YWJsZVNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKGZyb3plbnNldCwgTXV0YWJsZVNldCkpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhNdXRhYmxlU2V0LCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nLAorICAgICAgICAgICAgJ2FkZCcsICdkaXNjYXJkJykKKworICAgIGRlZiB0ZXN0X2lzc3VlXzU2NDcoc2VsZik6CisgICAgICAgICMgTXV0YWJsZVNldC5fX2lhbmRfXyBtdXRhdGVkIHRoZSBzZXQgZHVyaW5nIGl0ZXJhdGlvbgorICAgICAgICBzID0gV2l0aFNldCgnYWJjZCcpCisgICAgICAgIHMgJj0gV2l0aFNldCgnY2RlZicpICAgICAgICAgICAgIyBUaGlzIHVzZWQgdG8gZmFpbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzKSwgc2V0KCdjZCcpKQorCisgICAgZGVmIHRlc3RfaXNzdWVfNDkyMChzZWxmKToKKyAgICAgICAgIyBNdXRhYmxlU2V0LnBvcCgpIG1ldGhvZCBkaWQgbm90IHdvcmsKKyAgICAgICAgY2xhc3MgTXlTZXQoY29sbGVjdGlvbnMuTXV0YWJsZVNldCk6CisgICAgICAgICAgICBfX3Nsb3RzX189WydfX3MnXQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsaXRlbXM9Tm9uZSk6CisgICAgICAgICAgICAgICAgaWYgaXRlbXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaXRlbXM9W10KKyAgICAgICAgICAgICAgICBzZWxmLl9fcz1zZXQoaXRlbXMpCisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsdik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHYgaW4gc2VsZi5fX3MKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9fcykKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fX3MpCisgICAgICAgICAgICBkZWYgYWRkKHNlbGYsdik6CisgICAgICAgICAgICAgICAgcmVzdWx0PXYgbm90IGluIHNlbGYuX19zCisgICAgICAgICAgICAgICAgc2VsZi5fX3MuYWRkKHYpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgZGVmIGRpc2NhcmQoc2VsZix2KToKKyAgICAgICAgICAgICAgICByZXN1bHQ9diBpbiBzZWxmLl9fcworICAgICAgICAgICAgICAgIHNlbGYuX19zLmRpc2NhcmQodikKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNeVNldCglcykiICUgcmVwcihsaXN0KHNlbGYpKQorICAgICAgICBzID0gTXlTZXQoWzUsNDMsMiwxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnBvcCgpLCAxKQorCisgICAgZGVmIHRlc3RfaXNzdWU4NzUwKHNlbGYpOgorICAgICAgICBlbXB0eSA9IFdpdGhTZXQoKQorICAgICAgICBmdWxsID0gV2l0aFNldChyYW5nZSgxMCkpCisgICAgICAgIHMgPSBXaXRoU2V0KGZ1bGwpCisgICAgICAgIHMgLT0gcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGVtcHR5KQorICAgICAgICBzID0gV2l0aFNldChmdWxsKQorICAgICAgICBzIF49IHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBlbXB0eSkKKyAgICAgICAgcyA9IFdpdGhTZXQoZnVsbCkKKyAgICAgICAgcyAmPSBzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZnVsbCkKKyAgICAgICAgcyB8PSBzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZnVsbCkKKworICAgIGRlZiB0ZXN0X01hcHBpbmcoc2VsZik6CisgICAgICAgIGZvciBzYW1wbGUgaW4gW2RpY3RdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBNYXBwaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBNYXBwaW5nKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKE1hcHBpbmcsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCisgICAgICAgICAgICAnX19nZXRpdGVtX18nKQorICAgICAgICBjbGFzcyBNeU1hcHBpbmcoY29sbGVjdGlvbnMuTWFwcGluZyk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcigoKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9jb21wYXJpc29uKE15TWFwcGluZygpKQorCisgICAgZGVmIHRlc3RfTXV0YWJsZU1hcHBpbmcoc2VsZik6CisgICAgICAgIGZvciBzYW1wbGUgaW4gW2RpY3RdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBNdXRhYmxlTWFwcGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNhbXBsZSwgTXV0YWJsZU1hcHBpbmcpKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoTXV0YWJsZU1hcHBpbmcsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCisgICAgICAgICAgICAnX19nZXRpdGVtX18nLCAnX19zZXRpdGVtX18nLCAnX19kZWxpdGVtX18nKQorCisgICAgZGVmIHRlc3RfU2VxdWVuY2Uoc2VsZik6CisgICAgICAgIGZvciBzYW1wbGUgaW4gW3R1cGxlLCBsaXN0LCBzdHJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBTZXF1ZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNhbXBsZSwgU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhiYXNlc3RyaW5nLCBTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyYW5nZSgxMCksIFNlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh4cmFuZ2UsIFNlcXVlbmNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3RyLCBTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhTZXF1ZW5jZSwgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsICdfX2xlbl9fJywKKyAgICAgICAgICAgICdfX2dldGl0ZW1fXycpCisKKyAgICBkZWYgdGVzdF9NdXRhYmxlU2VxdWVuY2Uoc2VsZik6CisgICAgICAgIGZvciBzYW1wbGUgaW4gW3R1cGxlLCBzdHJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHNhbXBsZSgpLCBNdXRhYmxlU2VxdWVuY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3Moc2FtcGxlLCBNdXRhYmxlU2VxdWVuY2UpKQorICAgICAgICBmb3Igc2FtcGxlIGluIFtsaXN0XToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzYW1wbGUoKSwgTXV0YWJsZVNlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBNdXRhYmxlU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoYmFzZXN0cmluZywgTXV0YWJsZVNlcXVlbmNlKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKE11dGFibGVTZXF1ZW5jZSwgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsCisgICAgICAgICAgICAnX19sZW5fXycsICdfX2dldGl0ZW1fXycsICdfX3NldGl0ZW1fXycsICdfX2RlbGl0ZW1fXycsICdpbnNlcnQnKQorCitjbGFzcyBUZXN0Q291bnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIGMgPSBDb3VudGVyKCdhYmNhYmEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIENvdW50ZXIoeydhJzozICwgJ2InOiAyLCAnYyc6IDF9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9MywgYj0yLCBjPTEpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIE1hcHBpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKENvdW50ZXIsIGRpY3QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDb3VudGVyLCBNYXBwaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGMudmFsdWVzKCkpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjLnZhbHVlcygpKSwgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjLmtleXMoKSksIFsnYScsICdiJywgJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoYyksIFsnYScsICdiJywgJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoYy5pdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywgMyksICgnYicsIDIpLCAoJ2MnLCAxKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1snYiddLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbJ3onXSwgMCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmhhc19rZXkoJ2MnKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5oYXNfa2V5KCd6JyksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX19jb250YWluc19fKCdjJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fX2NvbnRhaW5zX18oJ3onKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nZXQoJ2InLCAxMCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nZXQoJ3onLCAxMCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGRpY3QoYT0zLCBiPTIsIGM9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgIkNvdW50ZXIoeydhJzogMywgJ2InOiAyLCAnYyc6IDF9KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tb3N0X2NvbW1vbigpLCBbKCdhJywgMyksICgnYicsIDIpLCAoJ2MnLCAxKV0pCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1vc3RfY29tbW9uKGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywgMyksICgnYicsIDIpLCAoJ2MnLCAxKV1bOmldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oc29ydGVkKGMuZWxlbWVudHMoKSkpLCAnYWFhYmJjJykKKyAgICAgICAgY1snYSddICs9IDEgICAgICAgICAjIGluY3JlbWVudCBhbiBleGlzdGluZyB2YWx1ZQorICAgICAgICBjWydiJ10gLT0gMiAgICAgICAgICMgc3ViIGV4aXN0aW5nIHZhbHVlIHRvIHplcm8KKyAgICAgICAgZGVsIGNbJ2MnXSAgICAgICAgICAjIHJlbW92ZSBhbiBlbnRyeQorICAgICAgICBkZWwgY1snYyddICAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgZGVsIGRvZXNuJ3QgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgY1snZCddIC09IDIgICAgICAgICAjIHN1YiBmcm9tIGEgbWlzc2luZyB2YWx1ZQorICAgICAgICBjWydlJ10gPSAtNSAgICAgICAgICMgZGlyZWN0bHkgYXNzaWduIGEgbWlzc2luZyB2YWx1ZQorICAgICAgICBjWydmJ10gKz0gNCAgICAgICAgICMgYWRkIHRvIGEgbWlzc2luZyB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGRpY3QoYT00LCBiPTAsIGQ9LTIsIGU9LTUsIGY9NCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihzb3J0ZWQoYy5lbGVtZW50cygpKSksICdhYWFhZmZmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3AoJ2YnKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZicsIGMpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgZWxlbSwgY250ID0gYy5wb3BpdGVtKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYykKKyAgICAgICAgYy5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ0NvdW50ZXIoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIENvdW50ZXIuZnJvbWtleXMsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGMpCisgICAgICAgIGMudXBkYXRlKGRpY3QoYT01LCBiPTMpKQorICAgICAgICBjLnVwZGF0ZShjPTEpCisgICAgICAgIGMudXBkYXRlKENvdW50ZXIoJ2EnICogNTAgKyAnYicgKiAzMCkpCisgICAgICAgIGMudXBkYXRlKCkgICAgICAgICAgIyB0ZXN0IGNhc2Ugd2l0aCBubyBhcmdzCisgICAgICAgIGMuX19pbml0X18oJ2EnICogNTAwICsgJ2InICogMzAwKQorICAgICAgICBjLl9faW5pdF9fKCdjZGMnKQorICAgICAgICBjLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBkaWN0KGE9NTU1LCBiPTMzMywgYz0zLCBkPTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2V0ZGVmYXVsdCgnZCcsIDUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbJ2QnXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNldGRlZmF1bHQoJ2UnLCA1KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjWydlJ10sIDUpCisKKyAgICBkZWYgdGVzdF9jb3B5aW5nKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgY291bnRlcnMgYXJlIGNvcHlhYmxlLCBkZWVwY29weWFibGUsIHBpY2tsYWJsZSwgYW5kCisgICAgICAgICNoYXZlIGEgcmVwci9ldmFsIHJvdW5kLXRyaXAKKyAgICAgICAgd29yZHMgPSBDb3VudGVyKCd3aGljaCB3aXRjaCBoYWQgd2hpY2ggd2l0Y2hlcyB3cmlzdCB3YXRjaCcuc3BsaXQoKSkKKyAgICAgICAgdXBkYXRlX3Rlc3QgPSBDb3VudGVyKCkKKyAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKHdvcmRzKQorICAgICAgICBmb3IgaSwgZHVwIGluIGVudW1lcmF0ZShbCisgICAgICAgICAgICAgICAgICAgIHdvcmRzLmNvcHkoKSwKKyAgICAgICAgICAgICAgICAgICAgY29weS5jb3B5KHdvcmRzKSwKKyAgICAgICAgICAgICAgICAgICAgY29weS5kZWVwY29weSh3b3JkcyksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDApKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMSkpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSksCisgICAgICAgICAgICAgICAgICAgIGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh3b3JkcywgMCkpLAorICAgICAgICAgICAgICAgICAgICBjUGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMod29yZHMsIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKHdvcmRzLCAyKSksCisgICAgICAgICAgICAgICAgICAgIGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh3b3JkcywgLTEpKSwKKyAgICAgICAgICAgICAgICAgICAgZXZhbChyZXByKHdvcmRzKSksCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV90ZXN0LAorICAgICAgICAgICAgICAgICAgICBDb3VudGVyKHdvcmRzKSwKKyAgICAgICAgICAgICAgICAgICAgXSk6CisgICAgICAgICAgICBtc2cgPSAoaSwgZHVwLCB3b3JkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdXAgaXMgbm90IHdvcmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIHdvcmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwKSwgbGVuKHdvcmRzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkdXApLCB0eXBlKHdvcmRzKSkKKworICAgIGRlZiB0ZXN0X2NvcHlfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIE15Q291bnRlcihDb3VudGVyKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IE15Q291bnRlcignc2xhcnRpYmFydGZhc3QnKQorICAgICAgICBkID0gYy5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgbGVuKGMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoYykpCisKKyAgICBkZWYgdGVzdF9jb252ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IHRvOiBzZXQsIGxpc3QsIGRpY3QKKyAgICAgICAgcyA9ICdzaGUgc2VsbHMgc2VhIHNoZWxscyBieSB0aGUgc2VhIHNob3JlJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChDb3VudGVyKHMpLmVsZW1lbnRzKCkpLCBzb3J0ZWQocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKENvdW50ZXIocykpLCBzb3J0ZWQoc2V0KHMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KENvdW50ZXIocykpLCBkaWN0KENvdW50ZXIocykuaXRlbXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KENvdW50ZXIocykpLCBzZXQocykpCisKKyAgICBkZWYgdGVzdF9pbnZhcmlhbnRfZm9yX3RoZV9pbl9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgYyA9IENvdW50ZXIoYT0xMCwgYj0tMiwgYz0wKQorICAgICAgICBmb3IgZWxlbSBpbiBjOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gaW4gYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYykKKworICAgIGRlZiB0ZXN0X211bHRpc2V0X29wZXJhdGlvbnMoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgYWRkaW5nIGEgemVybyBjb3VudGVyIHdpbGwgc3RyaXAgemVyb3MgYW5kIG5lZ2F0aXZlcworICAgICAgICBjID0gQ291bnRlcihhPTEwLCBiPS0yLCBjPTApICsgQ291bnRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChjKSwgZGljdChhPTEwKSkKKworICAgICAgICBlbGVtZW50cyA9ICdhYmNkJworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgICMgdGVzdCByYW5kb20gcGFpcnMgb2YgbXVsdGlzZXRzCisgICAgICAgICAgICBwID0gQ291bnRlcihkaWN0KChlbGVtLCByYW5kcmFuZ2UoLTIsNCkpIGZvciBlbGVtIGluIGVsZW1lbnRzKSkKKyAgICAgICAgICAgIHAudXBkYXRlKGU9MSwgZj0tMSwgZz0wKQorICAgICAgICAgICAgcSA9IENvdW50ZXIoZGljdCgoZWxlbSwgcmFuZHJhbmdlKC0yLDQpKSBmb3IgZWxlbSBpbiBlbGVtZW50cykpCisgICAgICAgICAgICBxLnVwZGF0ZShoPTEsIGk9LTEsIGo9MCkKKyAgICAgICAgICAgIGZvciBjb3VudGVyb3AsIG51bWJlcm9wIGluIFsKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX2FkZF9fLCBsYW1iZGEgeCwgeTogbWF4KDAsIHgreSkpLAorICAgICAgICAgICAgICAgIChDb3VudGVyLl9fc3ViX18sIGxhbWJkYSB4LCB5OiBtYXgoMCwgeC15KSksCisgICAgICAgICAgICAgICAgKENvdW50ZXIuX19vcl9fLCBsYW1iZGEgeCwgeTogbWF4KDAseCx5KSksCisgICAgICAgICAgICAgICAgKENvdW50ZXIuX19hbmRfXywgbGFtYmRhIHgsIHk6IG1heCgwLCBtaW4oeCx5KSkpLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3VudGVyb3AocCwgcSkKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBlbGVtZW50czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1iZXJvcChwW3hdLCBxW3hdKSwgcmVzdWx0W3hdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3VudGVyb3AsIHgsIHAsIHEpKQorICAgICAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgcmVzdWx0cyBleGNsdWRlIG5vbi1wb3NpdGl2ZSBjb3VudHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeD4wIGZvciB4IGluIHJlc3VsdC52YWx1ZXMoKSkKKworICAgICAgICBlbGVtZW50cyA9ICdhYmNkZWYnCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICAjIHZlcmlmeSB0aGF0IHJhbmRvbSBtdWx0aXNldHMgd2l0aCBubyByZXBlYXRzIGFyZSBleGFjdGx5IGxpa2Ugc2V0cworICAgICAgICAgICAgcCA9IENvdW50ZXIoZGljdCgoZWxlbSwgcmFuZHJhbmdlKDAsIDIpKSBmb3IgZWxlbSBpbiBlbGVtZW50cykpCisgICAgICAgICAgICBxID0gQ291bnRlcihkaWN0KChlbGVtLCByYW5kcmFuZ2UoMCwgMikpIGZvciBlbGVtIGluIGVsZW1lbnRzKSkKKyAgICAgICAgICAgIGZvciBjb3VudGVyb3AsIHNldG9wIGluIFsKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX3N1Yl9fLCBzZXQuX19zdWJfXyksCisgICAgICAgICAgICAgICAgKENvdW50ZXIuX19vcl9fLCBzZXQuX19vcl9fKSwKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX2FuZF9fLCBzZXQuX19hbmRfXyksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgICAgIGNvdW50ZXJfcmVzdWx0ID0gY291bnRlcm9wKHAsIHEpCisgICAgICAgICAgICAgICAgc2V0X3Jlc3VsdCA9IHNldG9wKHNldChwLmVsZW1lbnRzKCkpLCBzZXQocS5lbGVtZW50cygpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50ZXJfcmVzdWx0LCBkaWN0LmZyb21rZXlzKHNldF9yZXN1bHQsIDEpKQorCisgICAgZGVmIHRlc3Rfc3VidHJhY3Qoc2VsZik6CisgICAgICAgIGMgPSBDb3VudGVyKGE9LTUsIGI9MCwgYz01LCBkPTEwLCBlPTE1LGc9NDApCisgICAgICAgIGMuc3VidHJhY3QoYT0xLCBiPTIsIGM9LTMsIGQ9MTAsIGU9MjAsIGY9MzAsIGg9LTUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIENvdW50ZXIoYT0tNiwgYj0tMiwgYz04LCBkPTAsIGU9LTUsIGY9LTMwLCBnPTQwLCBoPTUwKSkKKyAgICAgICAgYyA9IENvdW50ZXIoYT0tNSwgYj0wLCBjPTUsIGQ9MTAsIGU9MTUsZz00MCkKKyAgICAgICAgYy5zdWJ0cmFjdChDb3VudGVyKGE9MSwgYj0yLCBjPS0zLCBkPTEwLCBlPTIwLCBmPTMwLCBoPS01MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgQ291bnRlcihhPS02LCBiPS0yLCBjPTgsIGQ9MCwgZT0tNSwgZj0tMzAsIGc9NDAsIGg9NTApKQorICAgICAgICBjID0gQ291bnRlcignYWFhYmJjZCcpCisgICAgICAgIGMuc3VidHJhY3QoJ2FhYWFiYmNjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgQ291bnRlcihhPS0xLCBiPTAsIGM9LTEsIGQ9MSwgZT0tMSkpCisKK2NsYXNzIFRlc3RPcmRlcmVkRGljdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpXSwgTm9uZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgcGFpcnMgPSBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChPcmRlcmVkRGljdChkaWN0KHBhaXJzKSkuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgIyBkaWN0IGlucHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKE9yZGVyZWREaWN0KCoqZGljdChwYWlycykpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAjIGt3ZHMgaW5wdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE9yZGVyZWREaWN0KHBhaXJzKS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICMgcGFpcnMgaW5wdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDkpLCAoJ2QnLCA0KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjPTMsIGU9NSkuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAjIG1peGVkIGlucHV0CisKKyAgICAgICAgIyBtYWtlIHN1cmUgbm8gcG9zaXRpb25hbCBhcmdzIGNvbmZsaWN0IHdpdGggcG9zc2libGUga3dkYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXJnc3BlYyhPcmRlcmVkRGljdC5fX2RpY3RfX1snX19pbml0X18nXSkuYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3NlbGYnXSkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGRpcmVjdCBjYWxscyB0byBfX2luaXRfXyBkbyBub3QgY2xlYXIgcHJldmlvdXMgY29udGVudHMKKyAgICAgICAgZCA9IE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0NCksICgnZScsIDU1KV0pCisgICAgICAgIGQuX19pbml0X18oWygnZScsIDUpLCAoJ2YnLCA2KV0sIGc9NywgZD00KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5pdGVtcygpKSwKKyAgICAgICAgICAgIFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpLCAoJ2cnLCA3KV0pCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIE9yZGVyZWREaWN0KCkudXBkYXRlKFsoJ2EnLCAxKSwgKCdiJywgMildLCBOb25lKSAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncworICAgICAgICBwYWlycyA9IFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSldCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUoZGljdChwYWlycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG9kLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRpY3QgaW5wdXQKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZSgqKmRpY3QocGFpcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBrd2RzIGlucHV0CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBhaXJzIGlucHV0CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgOSksICgnZCcsIDQpXSwgYz0zLCBlPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1peGVkIGlucHV0CisKKyAgICAgICAgIyBJc3N1ZSA5MTM3OiBOYW1lZCBhcmd1bWVudCBjYWxsZWQgJ290aGVyJyBvciAnc2VsZicKKyAgICAgICAgIyBzaG91bGRuJ3QgYmUgdHJlYXRlZCBzcGVjaWFsbHkuCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUoc2VsZj0yMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdzZWxmJywgMjMpXSkKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShvdGhlcj17fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdvdGhlcicsIHt9KV0pCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUocmVkPTUsIGJsdWU9Niwgb3RoZXI9Nywgc2VsZj04KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChsaXN0KG9kLml0ZW1zKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdibHVlJywgNiksICgnb3RoZXInLCA3KSwgKCdyZWQnLCA1KSwgKCdzZWxmJywgOCldKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZGlyZWN0IGNhbGxzIHRvIHVwZGF0ZSBkbyBub3QgY2xlYXIgcHJldmlvdXMgY29udGVudHMKKyAgICAgICAgIyBhZGQgdGhhdCB1cGRhdGVzIGl0ZW1zIGFyZSBub3QgbW92ZWQgdG8gdGhlIGVuZAorICAgICAgICBkID0gT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQ0KSwgKCdlJywgNTUpXSkKKyAgICAgICAgZC51cGRhdGUoWygnZScsIDUpLCAoJ2YnLCA2KV0sIGc9NywgZD00KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5pdGVtcygpKSwKKyAgICAgICAgICAgIFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpLCAoJ2cnLCA3KV0pCisKKyAgICBkZWYgdGVzdF9hYmMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShPcmRlcmVkRGljdCgpLCBNdXRhYmxlTWFwcGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoT3JkZXJlZERpY3QsIE11dGFibGVNYXBwaW5nKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIGxlbihwYWlycykpCisgICAgICAgIG9kLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQorCisgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgZGVsIG9kWydhJ10KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIG9kKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIGRlbCBvZFsnYSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnNbOjJdICsgcGFpcnNbMzpdKQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChbKCdkJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdhJywgNCksICgnZScsIDUpXSkKKyAgICAgICAgb2RbJ2MnXSA9IDEwICAgICAgICAgICAjIGV4aXN0aW5nIGVsZW1lbnQKKyAgICAgICAgb2RbJ2YnXSA9IDIwICAgICAgICAgICAjIG5ldyBlbGVtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdkJywgMSksICgnYicsIDIpLCAoJ2MnLCAxMCksICgnYScsIDQpLCAoJ2UnLCA1KSwgKCdmJywgMjApXSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdG9ycyhzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgW3RbMF0gZm9yIHQgaW4gcGFpcnNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLmtleXMoKVs6XSwgW3RbMF0gZm9yIHQgaW4gcGFpcnNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnZhbHVlcygpWzpdLCBbdFsxXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QuaXRlbXMoKVs6XSwgcGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVya2V5cygpKSwgW3RbMF0gZm9yIHQgaW4gcGFpcnNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlcnZhbHVlcygpKSwgW3RbMV0gZm9yIHQgaW4gcGFpcnNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlcml0ZW1zKCkpLCBwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKG9kKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW3RbMF0gZm9yIHQgaW4gcmV2ZXJzZWQocGFpcnMpXSkKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHdoaWxlIHBhaXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5wb3BpdGVtKCksIHBhaXJzLnBvcCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIG9kLnBvcGl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIDApCisKKyAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIHdoaWxlIHBhaXJzOgorICAgICAgICAgICAgaywgdiA9IHBhaXJzLnBvcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnBvcChrKSwgdikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBvZC5wb3AoJ3h5eicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5wb3AoaywgMTIzNDUpLCAxMjM0NSkKKworICAgICAgICAjIG1ha2Ugc3VyZSBwb3Agc3RpbGwgd29ya3Mgd2hlbiBfX21pc3NpbmdfXyBpcyBkZWZpbmVkCisgICAgICAgIGNsYXNzIE1pc3NpbmcoT3JkZXJlZERpY3QpOgorICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgbSA9IE1pc3NpbmcoYT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucG9wKCdiJywgNSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5wb3AoJ2EnLCA2KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYScsIDYpLCA2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIG0ucG9wKCdhJykKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZDEgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgb2QyID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QxLCBvZDIpICAgICAgICAgICMgc2FtZSBvcmRlciBpbXBsaWVzIGVxdWFsaXR5CisgICAgICAgIHBhaXJzID0gcGFpcnNbMjpdICsgcGFpcnNbOjJdCisgICAgICAgIG9kMiA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9kMSwgb2QyKSAgICAgICAjIGRpZmZlcmVudCBvcmRlciBpbXBsaWVzIGluZXF1YWxpdHkKKyAgICAgICAgIyBjb21wYXJpc29uIHRvIHJlZ3VsYXIgZGljdCBpcyBub3Qgb3JkZXIgc2Vuc2l0aXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QxLCBkaWN0KG9kMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChvZDIpLCBvZDEpCisgICAgICAgICMgZGlmZmVyZW50IGxlbmd0aCBpbXBsaWVkIGluZXF1YWxpdHkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvZDEsIE9yZGVyZWREaWN0KHBhaXJzWzotMV0pKQorCisgICAgZGVmIHRlc3RfY29weWluZyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IG9yZGVyZWQgZGljdHMgYXJlIGNvcHlhYmxlLCBkZWVwY29weWFibGUsIHBpY2tsYWJsZSwKKyAgICAgICAgIyBhbmQgaGF2ZSBhIHJlcHIvZXZhbCByb3VuZC10cmlwCisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHVwZGF0ZV90ZXN0ID0gT3JkZXJlZERpY3QoKQorICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUob2QpCisgICAgICAgIGZvciBpLCBkdXAgaW4gZW51bWVyYXRlKFsKKyAgICAgICAgICAgICAgICAgICAgb2QuY29weSgpLAorICAgICAgICAgICAgICAgICAgICBjb3B5LmNvcHkob2QpLAorICAgICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KG9kKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMCkpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAxKSksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgLTEpKSwKKyAgICAgICAgICAgICAgICAgICAgZXZhbChyZXByKG9kKSksCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV90ZXN0LAorICAgICAgICAgICAgICAgICAgICBPcmRlcmVkRGljdChvZCksCisgICAgICAgICAgICAgICAgICAgIF0pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR1cCBpcyBub3Qgb2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgb2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHVwLml0ZW1zKCkpLCBsaXN0KG9kLml0ZW1zKCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwKSwgbGVuKG9kKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkdXApLCB0eXBlKG9kKSkKKworICAgIGRlZiB0ZXN0X3lhbWxfbGlua2FnZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBfX3JlZHVjZV9fIGlzIHNldHVwIGluIGEgd2F5IHRoYXQgc3VwcG9ydHMgUHlZQU1MJ3MgZHVtcCgpIGZlYXR1cmUuCisgICAgICAgICMgSW4geWFtbCwgbGlzdHMgYXJlIG5hdGl2ZSBidXQgdHVwbGVzIGFyZSBub3QuCisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgICMgeWFtbC5kdW1wKG9kKSAtLT4KKyAgICAgICAgIyAnISFweXRob24vb2JqZWN0L2FwcGx5Ol9fbWFpbl9fLk9yZGVyZWREaWN0XG4tIC0gW2EsIDFdXG4gIC0gW2IsIDJdXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwodHlwZShwYWlyKT09bGlzdCBmb3IgcGFpciBpbiBvZC5fX3JlZHVjZV9fKClbMV0pKQorCisgICAgZGVmIHRlc3RfcmVkdWNlX25vdF90b29fZmF0KHNlbGYpOgorICAgICAgICAjIGRvIG5vdCBzYXZlIGluc3RhbmNlIGRpY3Rpb25hcnkgaWYgbm90IG5lZWRlZAorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAyKQorICAgICAgICBvZC54ID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QuX19yZWR1Y2VfXygpKSwgMykKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIob2QpLAorICAgICAgICAgICAgIk9yZGVyZWREaWN0KFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwocmVwcihvZCkpLCBvZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE9yZGVyZWREaWN0KCkpLCAiT3JkZXJlZERpY3QoKSIpCisKKyAgICBkZWYgdGVzdF9yZXByX3JlY3Vyc2l2ZShzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzk4MjYKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdC5mcm9ta2V5cygnYWJjJykKKyAgICAgICAgb2RbJ3gnXSA9IG9kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvZCksCisgICAgICAgICAgICAiT3JkZXJlZERpY3QoWygnYScsIE5vbmUpLCAoJ2InLCBOb25lKSwgKCdjJywgTm9uZSksICgneCcsIC4uLildKSIpCisKKyAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBwYWlyX29yZGVyID0gbGlzdChvZC5pdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnNldGRlZmF1bHQoJ2EnLCAxMCksIDMpCisgICAgICAgICMgbWFrZSBzdXJlIG9yZGVyIGRpZG4ndCBjaGFuZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlyX29yZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnNldGRlZmF1bHQoJ3gnLCAxMCksIDEwKQorICAgICAgICAjIG1ha2Ugc3VyZSAneCcgaXMgYWRkZWQgdG8gdGhlIGVuZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSlbLTFdLCAoJ3gnLCAxMCkpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgc2V0ZGVmYXVsdCBzdGlsbCB3b3JrcyB3aGVuIF9fbWlzc2luZ19fIGlzIGRlZmluZWQKKyAgICAgICAgY2xhc3MgTWlzc2luZyhPcmRlcmVkRGljdCk6CisgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1pc3NpbmcoKS5zZXRkZWZhdWx0KDUsIDkpLCA5KQorCisgICAgZGVmIHRlc3RfcmVpbnNlcnQoc2VsZik6CisgICAgICAgICMgR2l2ZW4gaW5zZXJ0IGEsIGluc2VydCBiLCBkZWxldGUgYSwgcmUtaW5zZXJ0IGEsCisgICAgICAgICMgdmVyaWZ5IHRoYXQgYSBpcyBub3cgbGF0ZXIgdGhhbiBiLgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2RbJ2EnXSA9IDEKKyAgICAgICAgb2RbJ2InXSA9IDIKKyAgICAgICAgZGVsIG9kWydhJ10KKyAgICAgICAgb2RbJ2EnXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdiJywgMiksICgnYScsIDEpXSkKKworICAgIGRlZiB0ZXN0X3ZpZXdzKHNlbGYpOgorICAgICAgICBzID0gJ3RoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgYSBsYXp5IGRvZyB5ZXN0ZXJkYXkgYmVmb3JlIGRhd24nLnNwbGl0KCkKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdC5mcm9ta2V5cyhzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2Qudmlld2tleXMoKSksICBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2Qudmlld3ZhbHVlcygpKSwgIFtOb25lIGZvciBrIGluIHNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2Qudmlld2l0ZW1zKCkpLCAgWyhrLCBOb25lKSBmb3IgayBpbiBzXSkKKworICAgIGRlZiB0ZXN0X292ZXJyaWRlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBzdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB1cGRhdGUoKSB3aXRob3V0IGJyZWFraW5nIF9faW5pdF9fKCkKKyAgICAgICAgY2xhc3MgTXlPRChPcmRlcmVkRGljdCk6CisgICAgICAgICAgICBkZWYgdXBkYXRlKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigpCisgICAgICAgIGl0ZW1zID0gWygnYScsIDEpLCAoJ2MnLCAzKSwgKCdiJywgMildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChNeU9EKGl0ZW1zKS5pdGVtcygpKSwgaXRlbXMpCisKK2NsYXNzIEdlbmVyYWxNYXBwaW5nVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgorICAgIHR5cGUydGVzdCA9IE9yZGVyZWREaWN0CisKKyAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcGl0ZW0pCisKK2NsYXNzIE15T3JkZXJlZERpY3QoT3JkZXJlZERpY3QpOgorICAgIHBhc3MKKworY2xhc3MgU3ViY2xhc3NNYXBwaW5nVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgorICAgIHR5cGUydGVzdCA9IE15T3JkZXJlZERpY3QKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKKworaW1wb3J0IGNvbGxlY3Rpb25zCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBOYW1lZFR1cGxlRG9jcyA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKG1vZHVsZT1jb2xsZWN0aW9ucykKKyAgICB0ZXN0X2NsYXNzZXMgPSBbVGVzdE5hbWVkVHVwbGUsIE5hbWVkVHVwbGVEb2NzLCBUZXN0T25lVHJpY2tQb255QUJDcywKKyAgICAgICAgICAgICAgICAgICAgVGVzdENvbGxlY3Rpb25BQkNzLCBUZXN0Q291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgVGVzdE9yZGVyZWREaWN0LCBHZW5lcmFsTWFwcGluZ1Rlc3RzLCBTdWJjbGFzc01hcHBpbmdUZXN0c10KKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KGNvbGxlY3Rpb25zLCB2ZXJib3NlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Y2Q4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weQpAQCAtMCwwICsxLDc2IEBACitpbXBvcnQgdW5pdHRlc3QsIHRlc3QudGVzdF9zdXBwb3J0CitpbXBvcnQgY29sb3JzeXMKKworZGVmIGZyYW5nZShzdGFydCwgc3RvcCwgc3RlcCk6CisgICAgd2hpbGUgc3RhcnQgPD0gc3RvcDoKKyAgICAgICAgeWllbGQgc3RhcnQKKyAgICAgICAgc3RhcnQgKz0gc3RlcAorCitjbGFzcyBDb2xvcnN5c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydFRyaXBsZUVxdWFsKHNlbGYsIHRyMSwgdHIyKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHIxKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHIyKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCh0cjFbMF0sIHRyMlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCh0cjFbMV0sIHRyMlsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCh0cjFbMl0sIHRyMlsyXSkKKworICAgIGRlZiB0ZXN0X2hzdl9yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIGZvciByIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgIGZvciBnIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgICAgICBmb3IgYiBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICAgICAgICAgIHJnYiA9IChyLCBnLCBiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzeXMuaHN2X3RvX3JnYigqY29sb3JzeXMucmdiX3RvX2hzdigqcmdiKSkKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaHN2X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgdmFsdWVzID0gWworICAgICAgICAgICAgIyByZ2IsIGhzdgorICAgICAgICAgICAgKCgwLjAsIDAuMCwgMC4wKSwgKCAgMCAgLCAwLjAsIDAuMCkpLCAjIGJsYWNrCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAxLjApLCAoNC4vNi4sIDEuMCwgMS4wKSksICMgYmx1ZQorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMC4wKSwgKDIuLzYuLCAxLjAsIDEuMCkpLCAjIGdyZWVuCisgICAgICAgICAgICAoKDAuMCwgMS4wLCAxLjApLCAoMy4vNi4sIDEuMCwgMS4wKSksICMgY3lhbgorICAgICAgICAgICAgKCgxLjAsIDAuMCwgMC4wKSwgKCAgMCAgLCAxLjAsIDEuMCkpLCAjIHJlZAorICAgICAgICAgICAgKCgxLjAsIDAuMCwgMS4wKSwgKDUuLzYuLCAxLjAsIDEuMCkpLCAjIHB1cnBsZQorICAgICAgICAgICAgKCgxLjAsIDEuMCwgMC4wKSwgKDEuLzYuLCAxLjAsIDEuMCkpLCAjIHllbGxvdworICAgICAgICAgICAgKCgxLjAsIDEuMCwgMS4wKSwgKCAgMCAgLCAwLjAsIDEuMCkpLCAjIHdoaXRlCisgICAgICAgICAgICAoKDAuNSwgMC41LCAwLjUpLCAoICAwICAsIDAuMCwgMC41KSksICMgZ3JleQorICAgICAgICBdCisgICAgICAgIGZvciAocmdiLCBoc3YpIGluIHZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoaHN2LCBjb2xvcnN5cy5yZ2JfdG9faHN2KCpyZ2IpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbChyZ2IsIGNvbG9yc3lzLmhzdl90b19yZ2IoKmhzdikpCisKKyAgICBkZWYgdGVzdF9obHNfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBmb3IgciBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICBmb3IgZyBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICAgICAgZm9yIGIgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgICAgICAgICByZ2IgPSAociwgZywgYikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc3lzLmhsc190b19yZ2IoKmNvbG9yc3lzLnJnYl90b19obHMoKnJnYikpCisgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2hsc192YWx1ZXMoc2VsZik6CisgICAgICAgIHZhbHVlcyA9IFsKKyAgICAgICAgICAgICMgcmdiLCBobHMKKyAgICAgICAgICAgICgoMC4wLCAwLjAsIDAuMCksICggIDAgICwgMC4wLCAwLjApKSwgIyBibGFjaworICAgICAgICAgICAgKCgwLjAsIDAuMCwgMS4wKSwgKDQuLzYuLCAwLjUsIDEuMCkpLCAjIGJsdWUKKyAgICAgICAgICAgICgoMC4wLCAxLjAsIDAuMCksICgyLi82LiwgMC41LCAxLjApKSwgIyBncmVlbgorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMS4wKSwgKDMuLzYuLCAwLjUsIDEuMCkpLCAjIGN5YW4KKyAgICAgICAgICAgICgoMS4wLCAwLjAsIDAuMCksICggIDAgICwgMC41LCAxLjApKSwgIyByZWQKKyAgICAgICAgICAgICgoMS4wLCAwLjAsIDEuMCksICg1Li82LiwgMC41LCAxLjApKSwgIyBwdXJwbGUKKyAgICAgICAgICAgICgoMS4wLCAxLjAsIDAuMCksICgxLi82LiwgMC41LCAxLjApKSwgIyB5ZWxsb3cKKyAgICAgICAgICAgICgoMS4wLCAxLjAsIDEuMCksICggIDAgICwgMS4wLCAwLjApKSwgIyB3aGl0ZQorICAgICAgICAgICAgKCgwLjUsIDAuNSwgMC41KSwgKCAgMCAgLCAwLjUsIDAuMCkpLCAjIGdyZXkKKyAgICAgICAgXQorICAgICAgICBmb3IgKHJnYiwgaGxzKSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKGhscywgY29sb3JzeXMucmdiX3RvX2hscygqcmdiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwocmdiLCBjb2xvcnN5cy5obHNfdG9fcmdiKCpobHMpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENvbG9yc3lzVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tbWFuZHMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb21tYW5kcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjZiMTgyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tbWFuZHMucHkKQEAgLTAsMCArMSw3NCBAQAorJycnCisgICBUZXN0cyBmb3IgY29tbWFuZHMgbW9kdWxlCisgICBOaWNrIE1hdGhld3NvbgorJycnCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcywgdGVtcGZpbGUsIHJlCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbiwgaW1wb3J0X21vZHVsZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MKKworIyBTaWxlbmNlIFB5M2sgd2FybmluZworY29tbWFuZHMgPSBpbXBvcnRfbW9kdWxlKCdjb21tYW5kcycsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworIyBUaGUgbW9kdWxlIHNheXM6CisjICAgIk5CIFRoaXMgb25seSB3b3JrcyAoYW5kIGlzIG9ubHkgcmVsZXZhbnQpIGZvciBVTklYLiIKKyMKKyMgQWN0dWFsbHksIGdldG91dHB1dCBzaG91bGQgd29yayBvbiBhbnkgcGxhdGZvcm0gd2l0aCBhbiBvcy5wb3BlbiwgYnV0CisjIEknbGwgdGFrZSB0aGUgY29tbWVudCBhcyBnaXZlbiwgYW5kIHNraXAgdGhpcyBzdWl0ZS4KKworaWYgb3MubmFtZSAhPSAncG9zaXgnOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdOb3QgcG9zaXg7IHNraXBwaW5nIHRlc3RfY29tbWFuZHMnKQorCisKK2NsYXNzIENvbW1hbmRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9nZXRvdXRwdXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWFuZHMuZ2V0b3V0cHV0KCdlY2hvIHh5enp5JyksICd4eXp6eScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWFuZHMuZ2V0c3RhdHVzb3V0cHV0KCdlY2hvIHh5enp5JyksICgwLCAneHl6enknKSkKKworICAgICAgICAjIHdlIHVzZSBta2R0ZW1wIGluIHRoZSBuZXh0IGxpbmUgdG8gY3JlYXRlIGFuIGVtcHR5IGRpcmVjdG9yeQorICAgICAgICAjIHVuZGVyIG91ciBleGNsdXNpdmUgY29udHJvbDsgZnJvbSB0aGF0LCB3ZSBjYW4gaW52ZW50IGEgcGF0aG5hbWUKKyAgICAgICAgIyB0aGF0IHdlIF9rbm93XyB3b24ndCBleGlzdC4gIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBmYWlsLgorICAgICAgICBkaXIgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihkaXIsICJmb28iKQorCisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IGNvbW1hbmRzLmdldHN0YXR1c291dHB1dCgnY2F0ICcgKyBuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0dXMsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBkaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQorCisgICAgZGVmIHRlc3RfZ2V0c3RhdHVzKHNlbGYpOgorICAgICAgICAjIFRoaXMgcGF0dGVybiBzaG91bGQgbWF0Y2ggJ2xzIC1sZCAvLicgb24gYW55IHBvc2l4CisgICAgICAgICMgc3lzdGVtLCBob3dldmVyIHBlcnZlcnNlbHkgY29uZmlndXJlZC4gIEV2ZW4gb24gc3lzdGVtcworICAgICAgICAjIChlLmcuLCBDeWd3aW4pIHdoZXJlIHVzZXIgYW5kIGdyb3VwIG5hbWVzIGNhbiBoYXZlIHNwYWNlczoKKyAgICAgICAgIyAgICAgZHJ3eHIteHIteCAgIDE1IEFkbWluaXN0IERvbWFpbiBVICAgICA0MDk2IEF1ZyAxMiAxMjo1MCAvCisgICAgICAgICMgICAgIGRyd3hyLXhyLXggICAxNSBKb2UgVXNlciBNeSBHcm91cCAgICAgNDA5NiBBdWcgMTIgMTI6NTAgLworICAgICAgICAjIE5vdGUgdGhhdCB0aGUgZmlyc3QgY2FzZSBhYm92ZSBoYXMgYSBzcGFjZSBpbiB0aGUgZ3JvdXAgbmFtZQorICAgICAgICAjIHdoaWxlIHRoZSBzZWNvbmQgb25lIGhhcyBhIHNwYWNlIGluIGJvdGggbmFtZXMuCisgICAgICAgICMgU3BlY2lhbCBhdHRyaWJ1dGVzIHN1cHBvcnRlZDoKKyAgICAgICAgIyAgICsgPSBoYXMgQUNMcworICAgICAgICAjICAgQCA9IGhhcyBNYWMgT1MgWCBleHRlbmRlZCBhdHRyaWJ1dGVzCisgICAgICAgICMgICAuID0gaGFzIGEgU0VMaW51eCBzZWN1cml0eSBjb250ZXh0CisgICAgICAgIHBhdCA9IHInJydkLi4uLi4uLi4uICAgIyBJdCBpcyBhIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgIFsuK0BdPyAgICAgICAjIEl0IG1heSBoYXZlIHNwZWNpYWwgYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICAgIFxzK1xkKyAgICAgICAjIEl0IGhhcyBzb21lIG51bWJlciBvZiBsaW5rcy4KKyAgICAgICAgICAgICAgICAgIFteL10qICAgICAgICAjIFNraXAgdXNlciwgZ3JvdXAsIHNpemUsIGFuZCBkYXRlLgorICAgICAgICAgICAgICAgICAgL1wuICAgICAgICAgICMgYW5kIGVuZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgJycnCisKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoIi4qY29tbWFuZHMuZ2V0c3RhdHVzLi4gaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHBhdCwgY29tbWFuZHMuZ2V0c3RhdHVzKCIvLiIpLCByZS5WRVJCT1NFKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KENvbW1hbmRUZXN0cykKKyAgICByZWFwX2NoaWxkcmVuKCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb21wYXJlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tcGFyZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2RhODBkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tcGFyZS5weQpAQCAtMCwwICsxLDU4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIEVtcHR5OgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8RW1wdHk+JworCitjbGFzcyBDb2VyY2U6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYuYXJnID0gYXJnCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPENvZXJjZSAlcz4nICUgc2VsZi5hcmcKKworICAgIGRlZiBfX2NvZXJjZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQ29lcmNlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFyZywgb3RoZXIuYXJnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hcmcsIG90aGVyCisKK2NsYXNzIENtcDoKKyAgICBkZWYgX19pbml0X18oc2VsZixhcmcpOgorICAgICAgICBzZWxmLmFyZyA9IGFyZworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxDbXAgJXM+JyAlIHNlbGYuYXJnCisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBjbXAoc2VsZi5hcmcsIG90aGVyKQorCitjbGFzcyBDb21wYXJpc29uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc2V0MSA9IFsyLCAyLjAsIDJMLCAyKzBqLCBDb2VyY2UoMiksIENtcCgyLjApXQorICAgIHNldDIgPSBbWzFdLCAoMywpLCBOb25lLCBFbXB0eSgpXQorICAgIGNhbmRpZGF0ZXMgPSBzZXQxICsgc2V0MgorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGZvciBhIGluIHNlbGYuY2FuZGlkYXRlczoKKyAgICAgICAgICAgIGZvciBiIGluIHNlbGYuY2FuZGlkYXRlczoKKyAgICAgICAgICAgICAgICBpZiAoKGEgaW4gc2VsZi5zZXQxKSBhbmQgKGIgaW4gc2VsZi5zZXQxKSkgb3IgYSBpcyBiOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLCBiKQorCisgICAgZGVmIHRlc3RfaWRfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgICMgRW5zdXJlIGRlZmF1bHQgY29tcGFyaXNvbiBjb21wYXJlcyBpZCgpIG9mIGFyZ3MKKyAgICAgICAgTCA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIEwuaW5zZXJ0KGxlbihMKS8vMiwgRW1wdHkoKSkKKyAgICAgICAgZm9yIGEgaW4gTDoKKyAgICAgICAgICAgIGZvciBiIGluIEw6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoYSwgYiksIGNtcChpZChhKSwgaWQoYikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E9JXIsIGI9JXInICUgKGEsIGIpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb21wYXJpc29uVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjYjQzOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKQEAgLTAsMCArMSw1MjYgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IF9hc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdGV4dHdyYXAKKworY2xhc3MgVGVzdFNwZWNpZmljcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub19lbmRpbmdfbmV3bGluZShzZWxmKToKKyAgICAgICAgY29tcGlsZSgiaGkiLCAiPHRlc3Q+IiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJoaVxyIiwgIjx0ZXN0PiIsICJleGVjIikKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBjb21waWxlKCIiLCAiPHRlc3Q+IiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3Rfb3RoZXJfbmV3bGluZXMoc2VsZik6CisgICAgICAgIGNvbXBpbGUoIlxyXG4iLCAiPHRlc3Q+IiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJcciIsICI8dGVzdD4iLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoImhpXHJcbnN0dWZmXHJcbmRlZiBmKCk6XG4gICAgcGFzc1xyIiwgIjx0ZXN0PiIsICJleGVjIikKKyAgICAgICAgY29tcGlsZSgidGhpc19pc1xycmVhbGx5X29sZF9tYWNccmRlZiBmKCk6XG4gICAgcGFzcyIsICI8dGVzdD4iLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9kZWJ1Z19hc3NpZ25tZW50KHNlbGYpOgorICAgICAgICAjIGNhdGNoIGFzc2lnbm1lbnRzIHRvIF9fZGVidWdfXworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgJ19fZGVidWdfXyA9IDEnLCAnPycsICdzaW5nbGUnKQorICAgICAgICBpbXBvcnQgX19idWlsdGluX18KKyAgICAgICAgcHJldiA9IF9fYnVpbHRpbl9fLl9fZGVidWdfXworICAgICAgICBzZXRhdHRyKF9fYnVpbHRpbl9fLCAnX19kZWJ1Z19fJywgJ3N1cmUnKQorICAgICAgICBzZXRhdHRyKF9fYnVpbHRpbl9fLCAnX19kZWJ1Z19fJywgcHJldikKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50X2hhbmRsaW5nKHNlbGYpOgorICAgICAgICAjIGRldGVjdCBkdXBsaWNhdGUgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICdsYW1iZGEgYSxhOjAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgJ2xhbWJkYSBhLGE9MTowJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICdsYW1iZGEgYT0xLGE9MTowJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyAnZGVmIGYoYSwgYSk6IHBhc3MnCisgICAgICAgICAgICBzZWxmLmZhaWwoImR1cGxpY2F0ZSBhcmd1bWVudHMiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4ZWMgJ2RlZiBmKGEgPSAwLCBhID0gMSk6IHBhc3MnCisgICAgICAgICAgICBzZWxmLmZhaWwoImR1cGxpY2F0ZSBrZXl3b3JkIGFyZ3VtZW50cyIpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyAnZGVmIGYoYSk6IGdsb2JhbCBhOyBhID0gMScKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidmFyaWFibGUgaXMgZ2xvYmFsIGFuZCBsb2NhbCIpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3N5bnRheF9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsICIxKyozIiwgImZpbGVuYW1lIiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3Rfbm9uZV9rZXl3b3JkX2FyZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsICJmKE5vbmU9MSkiLCAiPHN0cmluZz4iLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfZ2xvYmFsX2xvY2FsKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjICdkZWYgZihhKTogZ2xvYmFsIGE7IGEgPSAxJworICAgICAgICAgICAgc2VsZi5mYWlsKCJ2YXJpYWJsZSBpcyBnbG9iYWwgYW5kIGxvY2FsIikKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZXhlY19mdW5jdGlvbmFsX3N0eWxlKHNlbGYpOgorICAgICAgICAjIEV4ZWMnaW5nIGEgdHVwbGUgb2YgbGVuZ3RoIDIgd29ya3MuCisgICAgICAgIGcgPSB7J2InOiAyfQorICAgICAgICBleGVjKCJhID0gYiArIDEiLCBnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdbJ2EnXSwgMykKKworICAgICAgICAjIEFzIGRvZXMgZXhlYydpbmcgYSB0dXBsZSBvZiBsZW5ndGggMy4KKyAgICAgICAgbCA9IHsnYic6IDN9CisgICAgICAgIGcgPSB7J2InOiA1LCAnYyc6IDd9CisgICAgICAgIGV4ZWMoImEgPSBiICsgYyIsIGcsIGwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbJ2EnXSwgMTApCisKKyAgICAgICAgIyBUdXBsZXMgbm90IG9mIGxlbmd0aCAyIG9yIDMgYXJlIGludmFsaWQuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGV4ZWMoImEgPSBiICsgMSIsKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGV4ZWMoImEgPSBiICsgMSIsIHt9LCB7fSwge30pCisKKyAgICAgICAgIyBDYW4ndCBtaXggYW5kIG1hdGNoIHRoZSB0d28gY2FsbGluZyBmb3Jtcy4KKyAgICAgICAgZyA9IHsnYSc6IDMsICdiJzogNH0KKyAgICAgICAgbCA9IHt9CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGV4ZWMoImEgPSBiICsgMSIsIGcpIGluIGcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZXhlYygiYSA9IGIgKyAxIiwgZywgbCkgaW4gZywgbAorCisgICAgZGVmIHRlc3RfZXhlY193aXRoX2dlbmVyYWxfbWFwcGluZ19mb3JfbG9jYWxzKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE06CisgICAgICAgICAgICAiVGVzdCBtYXBwaW5nIGludGVyZmFjZSB2ZXJzdXMgcG9zc2libGUgY2FsbHMgZnJvbSBldmFsKCkuIgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICdhJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEyCisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHMgPSAoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KCd4eXonKQorCisgICAgICAgIG0gPSBNKCkKKyAgICAgICAgZyA9IGdsb2JhbHMoKQorICAgICAgICBleGVjICd6ID0gYScgaW4gZywgbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmVzdWx0cywgKCd6JywgMTIpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjICd6ID0gYicgaW4gZywgbQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdEaWQgbm90IGRldGVjdCBhIEtleUVycm9yJykKKyAgICAgICAgZXhlYyAneiA9IGRpcigpJyBpbiBnLCBtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZXN1bHRzLCAoJ3onLCBsaXN0KCd4eXonKSkpCisgICAgICAgIGV4ZWMgJ3ogPSBnbG9iYWxzKCknIGluIGcsIG0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJlc3VsdHMsICgneicsIGcpKQorICAgICAgICBleGVjICd6ID0gbG9jYWxzKCknIGluIGcsIG0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJlc3VsdHMsICgneicsIG0pKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjICd6ID0gYicgaW4gbQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdEaWQgbm90IHZhbGlkYXRlIGdsb2JhbHMgYXMgYSByZWFsIGRpY3QnKQorCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAiTm9uLW1hcHBpbmciCisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0gPSBBKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyAneiA9IGEnIGluIGcsIG0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRGlkIG5vdCB2YWxpZGF0ZSBsb2NhbHMgYXMgYSBtYXBwaW5nJykKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGRpY3Qgc3ViY2xhc3NlcyB3b3JrIGFzIHdlbGwKKyAgICAgICAgY2xhc3MgRChkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAnYSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxMgorICAgICAgICAgICAgICAgIHJldHVybiBkaWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKyAgICAgICAgZCA9IEQoKQorICAgICAgICBleGVjICd6ID0gYScgaW4gZywgZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3onXSwgMTIpCisKKyAgICBkZWYgdGVzdF9leHRlbmRlZF9hcmcoc2VsZik6CisgICAgICAgIGxvbmdleHByID0gJ3ggPSB4IG9yICcgKyAnLXgnICogMjUwMAorICAgICAgICBjb2RlID0gJycnCitkZWYgZih4KToKKyAgICAlcworICAgICVzCisgICAgJXMKKyAgICAlcworICAgICVzCisgICAgJXMKKyAgICAlcworICAgICVzCisgICAgJXMKKyAgICAlcworICAgICMgdGhlIGV4cHJlc3Npb25zIGFib3ZlIGhhdmUgbm8gZWZmZWN0LCB4ID09IGFyZ3VtZW50CisgICAgd2hpbGUgeDoKKyAgICAgICAgeCAtPSAxCisgICAgICAgICMgRVhURU5ERURfQVJHL0pVTVBfQUJTT0xVVEUgaGVyZQorICAgIHJldHVybiB4CisnJycgJSAoKGxvbmdleHByLCkqMTApCisgICAgICAgIGV4ZWMgY29kZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoNSksIDApCisKKyAgICBkZWYgdGVzdF9jb21wbGV4X2FyZ3Moc2VsZik6CisKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgICAgIGV4ZWMgdGV4dHdyYXAuZGVkZW50KCcnJworICAgICAgICBkZWYgY29tcF9hcmdzKChhLCBiKSk6CisgICAgICAgICAgICByZXR1cm4gYSxiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcF9hcmdzKCgxLCAyKSksICgxLCAyKSkKKworICAgICAgICBkZWYgY29tcF9hcmdzKChhLCBiKT0oMywgNCkpOgorICAgICAgICAgICAgcmV0dXJuIGEsIGIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wX2FyZ3MoKDEsIDIpKSwgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBfYXJncygpLCAoMywgNCkpCisKKyAgICAgICAgZGVmIGNvbXBfYXJncyhhLCAoYiwgYykpOgorICAgICAgICAgICAgcmV0dXJuIGEsIGIsIGMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wX2FyZ3MoMSwgKDIsIDMpKSwgKDEsIDIsIDMpKQorCisgICAgICAgIGRlZiBjb21wX2FyZ3MoYT0yLCAoYiwgYyk9KDMsIDQpKToKKyAgICAgICAgICAgIHJldHVybiBhLCBiLCBjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcF9hcmdzKDEsICgyLCAzKSksICgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wX2FyZ3MoKSwgKDIsIDMsIDQpKQorICAgICAgICAnJycpCisKKyAgICBkZWYgdGVzdF9hcmd1bWVudF9vcmRlcihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyAnZGVmIGYoYT0xLCAoYiwgYykpOiBwYXNzJworICAgICAgICAgICAgc2VsZi5mYWlsKCJub24tZGVmYXVsdCBhcmdzIGFmdGVyIGRlZmF1bHQiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9mbG9hdF9saXRlcmFscyhzZWxmKToKKyAgICAgICAgIyB0ZXN0aW5nIGJhZCBmbG9hdCBsaXRlcmFscworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgIjJlIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICIyLjBlKyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiMWUtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICIzLTRlLzIxIikKKworICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uKHNlbGYpOgorICAgICAgICAjIHRlc3RpbmcgY29tcGlsZSgpIG9mIGluZGVudGVkIGJsb2NrIHcvbyB0cmFpbGluZyBuZXdsaW5lIgorICAgICAgICBzID0gIiIiCitpZiAxOgorICAgIGlmIDI6CisgICAgICAgIHBhc3MiIiIKKyAgICAgICAgY29tcGlsZShzLCAiPHN0cmluZz4iLCAiZXhlYyIpCisKKyAgICAjIFRoaXMgdGVzdCBpcyBwcm9iYWJseSBzcGVjaWZpYyB0byBDUHl0aG9uIGFuZCBtYXkgbm90IGdlbmVyYWxpemUKKyAgICAjIHRvIG90aGVyIGltcGxlbWVudGF0aW9ucy4gIFdlIGFyZSB0cnlpbmcgdG8gZW5zdXJlIHRoYXQgd2hlbgorICAgICMgdGhlIGZpcnN0IGxpbmUgb2YgY29kZSBzdGFydHMgYWZ0ZXIgMjU2LCBjb3JyZWN0IGxpbmUgbnVtYmVycworICAgICMgaW4gdHJhY2ViYWNrcyBhcmUgc3RpbGwgcHJvZHVjZWQuCisgICAgZGVmIHRlc3RfbGVhZGluZ19uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgczI1NiA9ICIiLmpvaW4oWyJcbiJdICogMjU2ICsgWyJzcGFtIl0pCisgICAgICAgIGNvID0gY29tcGlsZShzMjU2LCAnZm4nLCAnZXhlYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28uY29fZmlyc3RsaW5lbm8sIDI1NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19sbm90YWIsICcnKQorCisgICAgZGVmIHRlc3RfbGl0ZXJhbHNfd2l0aF9sZWFkaW5nX3plcm9lcyhzZWxmKToKKyAgICAgICAgZm9yIGFyZyBpbiBbIjA3Nzc4NyIsICIweGoiLCAiMHguIiwgIjBlIiwgICIwOTAwMDAwMDAwMDAwMDAiLAorICAgICAgICAgICAgICAgICAgICAiMDgwMDAwMDAwMDAwMDAwIiwgIjAwMDAwMDAwMDAwMDAwOSIsICIwMDAwMDAwMDAwMDAwMDgiLAorICAgICAgICAgICAgICAgICAgICAiMGI0MiIsICIwQkFEQ0FGRSIsICIwbzEyMzQ1Njc4OSIsICIwYjEuMSIsICIwbzQuMiIsCisgICAgICAgICAgICAgICAgICAgICIwYjEwMWoyIiwgIjBvMTUzajIiLCAiMGIxMDBlMSIsICIwbzc3N2UxIiwgIjBvOCIsICIwbzc4Il06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgYXJnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDc3NyIpLCA1MTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDc3N0wiKSwgNTExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjAwMDc3NyIpLCA1MTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMHhmZiIpLCAyNTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMHhmZkwiKSwgMjU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjBYZkYiKSwgMjU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjA3NzcuIiksIDc3NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwNzc3LjAiKSwgNzc3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3N2UwIiksIDc3NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwNzc3ZTEiKSwgNzc3MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwZTAiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwMDAwRS0wMTIiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwOS41IiksIDkuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwNzc3aiIpLCA3NzdqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjAwaiIpLCAwaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwMC4wIiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMGUzIiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDkwMDAwMDAwMDAwMDAwLiIpLCA5MDAwMDAwMDAwMDAwMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDkwMDAwMDAwMDAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKSwgOTAwMDAwMDAwMDAwMDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjA5MDAwMDAwMDAwMDAwMGUwIiksIDkwMDAwMDAwMDAwMDAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwOTAwMDAwMDAwMDAwMDBlLTAiKSwgOTAwMDAwMDAwMDAwMDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjA5MDAwMDAwMDAwMDAwMGoiKSwgOTAwMDAwMDAwMDAwMDBqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjAwMDAwMDAwMDAwMDAwNyIpLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjAwMDAwMDAwMDAwMDAwOC4iKSwgOC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDAwMDAwMDAwMDAwMDA5LiIpLCA5LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwYjEwMTAxMCIpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCItMGIwMDAwMDAwMDAwMTAiKSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMG83NzciKSwgNTExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIi0wbzAwMDAwMTAiKSwgLTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDIwMDAwMDAwMDAwLjAiKSwgMjAwMDAwMDAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwMzc3Nzc3Nzc3NzdlMCIpLCAzNzc3Nzc3Nzc3Ny4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjApCisKKyAgICBkZWYgdGVzdF91bmFyeV9taW51cyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdHJlYXRtZW50IG9mIHVuYXJ5IG1pbnVzIG9uIG5lZ2F0aXZlIG51bWJlcnMgU0YgYnVnICM2NjA0NTUKKyAgICAgICAgaWYgc3lzLm1heGludCA9PSAyMTQ3NDgzNjQ3OgorICAgICAgICAgICAgIyAzMi1iaXQgbWFjaGluZQorICAgICAgICAgICAgYWxsX29uZV9iaXRzID0gJzB4ZmZmZmZmZmYnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYWxsX29uZV9iaXRzKSwgNDI5NDk2NzI5NUwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIi0iICsgYWxsX29uZV9iaXRzKSwgLTQyOTQ5NjcyOTVMKQorICAgICAgICBlbGlmIHN5cy5tYXhpbnQgPT0gOTIyMzM3MjAzNjg1NDc3NTgwNzoKKyAgICAgICAgICAgICMgNjQtYml0IG1hY2hpbmUKKyAgICAgICAgICAgIGFsbF9vbmVfYml0cyA9ICcweGZmZmZmZmZmZmZmZmZmZmYnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYWxsX29uZV9iaXRzKSwgMTg0NDY3NDQwNzM3MDk1NTE2MTVMKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCItIiArIGFsbF9vbmVfYml0cyksIC0xODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkhvdyBtYW55IGJpdHMgKmRvZXMqIHRoaXMgbWFjaGluZSBoYXZlPz8/IikKKyAgICAgICAgIyBWZXJpZnkgdHJlYXRtZW50IG9mIGNvbnN0YW50IGZvbGRpbmcgb24gLShzeXMubWF4aW50KzEpCisgICAgICAgICMgaS5lLiAtMjE0NzQ4MzY0OCBvbiAzMiBiaXQgcGxhdGZvcm1zLiAgU2hvdWxkIHJldHVybiBpbnQsIG5vdCBsb25nLgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbCgiJXMiICUgKC1zeXMubWF4aW50IC0gMSkpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsKCIlcyIgJSAoLXN5cy5tYXhpbnQgLSAyKSksIGxvbmcpCisKKyAgICBpZiBzeXMubWF4aW50ID09IDkyMjMzNzIwMzY4NTQ3NzU4MDc6CisgICAgICAgIGRlZiB0ZXN0XzMyXzYzX2JpdF92YWx1ZXMoc2VsZik6CisgICAgICAgICAgICBhID0gKzQyOTQ5NjcyOTYgICMgMSA8PCAzMgorICAgICAgICAgICAgYiA9IC00Mjk0OTY3Mjk2ICAjIDEgPDwgMzIKKyAgICAgICAgICAgIGMgPSArMjgxNDc0OTc2NzEwNjU2ICAjIDEgPDwgNDgKKyAgICAgICAgICAgIGQgPSAtMjgxNDc0OTc2NzEwNjU2ICAjIDEgPDwgNDgKKyAgICAgICAgICAgIGUgPSArNDYxMTY4NjAxODQyNzM4NzkwNCAgIyAxIDw8IDYyCisgICAgICAgICAgICBmID0gLTQ2MTE2ODYwMTg0MjczODc5MDQgICMgMSA8PCA2MgorICAgICAgICAgICAgZyA9ICs5MjIzMzcyMDM2ODU0Nzc1ODA3ICAjIDEgPDwgNjMgLSAxCisgICAgICAgICAgICBoID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDcgICMgMSA8PCA2MyAtIDEKKworICAgICAgICAgICAgZm9yIHZhcmlhYmxlIGluIHNlbGYudGVzdF8zMl82M19iaXRfdmFsdWVzLmZ1bmNfY29kZS5jb19jb25zdHM6CisgICAgICAgICAgICAgICAgaWYgdmFyaWFibGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YXJpYWJsZSwgaW50KQorCisgICAgZGVmIHRlc3Rfc2VxdWVuY2VfdW5wYWNraW5nX2Vycm9yKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSBzZXF1ZW5jZSBwYWNraW5nL3VucGFja2luZyB3aXRoICJvciIuICBTRiBidWcgIzc1NzgxOAorICAgICAgICBpLGogPSAoMSwgLTEpIG9yICgtMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGosIC0xKQorCisgICAgZGVmIHRlc3Rfbm9uZV9hc3NpZ25tZW50KHNlbGYpOgorICAgICAgICBzdG10cyA9IFsKKyAgICAgICAgICAgICdOb25lID0gMCcsCisgICAgICAgICAgICAnTm9uZSArPSAwJywKKyAgICAgICAgICAgICdfX2J1aWx0aW5zX18uTm9uZSA9IDAnLAorICAgICAgICAgICAgJ2RlZiBOb25lKCk6IHBhc3MnLAorICAgICAgICAgICAgJ2NsYXNzIE5vbmU6IHBhc3MnLAorICAgICAgICAgICAgJyhhLCBOb25lKSA9IDAsIDAnLAorICAgICAgICAgICAgJ2ZvciBOb25lIGluIHJhbmdlKDEwKTogcGFzcycsCisgICAgICAgICAgICAnZGVmIGYoTm9uZSk6IHBhc3MnLAorICAgICAgICAgICAgJ2ltcG9ydCBOb25lJywKKyAgICAgICAgICAgICdpbXBvcnQgeCBhcyBOb25lJywKKyAgICAgICAgICAgICdmcm9tIHggaW1wb3J0IE5vbmUnLAorICAgICAgICAgICAgJ2Zyb20geCBpbXBvcnQgeSBhcyBOb25lJworICAgICAgICBdCisgICAgICAgIGZvciBzdG10IGluIHN0bXRzOgorICAgICAgICAgICAgc3RtdCArPSAiXG4iCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgc3RtdCwgJ3RtcCcsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIHN0bXQsICd0bXAnLCAnZXhlYycpCisgICAgICAgICMgVGhpcyBpcyBvay4KKyAgICAgICAgY29tcGlsZSgiZnJvbSBOb25lIGltcG9ydCB4IiwgInRtcCIsICJleGVjIikKKyAgICAgICAgY29tcGlsZSgiZnJvbSB4IGltcG9ydCBOb25lIGFzIHkiLCAidG1wIiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJpbXBvcnQgTm9uZSBhcyB4IiwgInRtcCIsICJleGVjIikKKworICAgIGRlZiB0ZXN0X2ltcG9ydChzZWxmKToKKyAgICAgICAgc3VjY2VlZCA9IFsKKyAgICAgICAgICAgICdpbXBvcnQgc3lzJywKKyAgICAgICAgICAgICdpbXBvcnQgb3MsIHN5cycsCisgICAgICAgICAgICAnaW1wb3J0IG9zIGFzIGJhcicsCisgICAgICAgICAgICAnaW1wb3J0IG9zLnBhdGggYXMgYmFyJywKKyAgICAgICAgICAgICdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMsIGdlbmVyYXRvcnMnLAorICAgICAgICAgICAgJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgKG5lc3RlZF9zY29wZXMsXG5nZW5lcmF0b3JzKScsCisgICAgICAgICAgICAnZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAobmVzdGVkX3Njb3BlcyxcbmdlbmVyYXRvcnMsKScsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IHN0ZGluLCBzdGRlcnIsIHN0ZG91dCcsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IChzdGRpbiwgc3RkZXJyLFxuc3Rkb3V0KScsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IChzdGRpbiwgc3RkZXJyLFxuc3Rkb3V0LCknLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCAoc3RkaW5cbiwgc3RkZXJyLCBzdGRvdXQpJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgKHN0ZGluXG4sIHN0ZGVyciwgc3Rkb3V0LCknLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCBzdGRpbiBhcyBzaSwgc3Rkb3V0IGFzIHNvLCBzdGRlcnIgYXMgc2UnLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCAoc3RkaW4gYXMgc2ksIHN0ZG91dCBhcyBzbywgc3RkZXJyIGFzIHNlKScsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IChzdGRpbiBhcyBzaSwgc3Rkb3V0IGFzIHNvLCBzdGRlcnIgYXMgc2UsKScsCisgICAgICAgICAgICBdCisgICAgICAgIGZhaWwgPSBbCisgICAgICAgICAgICAnaW1wb3J0IChvcywgc3lzKScsCisgICAgICAgICAgICAnaW1wb3J0IChvcyksIChzeXMpJywKKyAgICAgICAgICAgICdpbXBvcnQgKChvcyksIChzeXMpKScsCisgICAgICAgICAgICAnaW1wb3J0IChzeXMnLAorICAgICAgICAgICAgJ2ltcG9ydCBzeXMpJywKKyAgICAgICAgICAgICdpbXBvcnQgKG9zLCknLAorICAgICAgICAgICAgJ2ltcG9ydCBvcyBBcyBiYXInLAorICAgICAgICAgICAgJ2ltcG9ydCBvcy5wYXRoIGEgYmFyJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgc3RkaW4gQXMgc3Rkb3V0JywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgc3RkaW4gYSBzdGRvdXQnLAorICAgICAgICAgICAgJ2Zyb20gKHN5cykgaW1wb3J0IHN0ZGluJywKKyAgICAgICAgICAgICdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IChuZXN0ZWRfc2NvcGVzJywKKyAgICAgICAgICAgICdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMpJywKKyAgICAgICAgICAgICdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMsXG5nZW5lcmF0b3JzJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgKHN0ZGluJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgc3RkaW4pJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgc3RkaW4sIHN0ZG91dCxcbnN0ZGVycicsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IHN0ZGluIHNpJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgc3RkaW4sJworICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCAoKiknLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCAoc3RkaW4sLCBzdGRvdXQsIHN0ZGVyciknLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCAoc3RkaW4sIHN0ZG91dCksJywKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHN0bXQgaW4gc3VjY2VlZDoKKyAgICAgICAgICAgIGNvbXBpbGUoc3RtdCwgJ3RtcCcsICdleGVjJykKKyAgICAgICAgZm9yIHN0bXQgaW4gZmFpbDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBzdG10LCAndG1wJywgJ2V4ZWMnKQorCisgICAgZGVmIHRlc3RfZm9yX2Rpc3RpbmN0X2NvZGVfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgIyBTRiBidWcgMTA0ODg3MAorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgZjEgPSBsYW1iZGEgeD0xOiB4CisgICAgICAgICAgICBmMiA9IGxhbWJkYSB4PTI6IHgKKyAgICAgICAgICAgIHJldHVybiBmMSwgZjIKKyAgICAgICAgZjEsIGYyID0gZigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZjEuZnVuY19jb2RlKSwgaWQoZjIuZnVuY19jb2RlKSkKKworICAgIGRlZiB0ZXN0X2xhbWJkYV9kb2Moc2VsZik6CisgICAgICAgIGwgPSBsYW1iZGE6ICJmb28iCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGwuX19kb2NfXykKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIGNvZGUgPSB1IiMgLSotIGNvZGluZzogdXRmLTggLSotXG5wYXNzXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBjb2RlLCAidG1wIiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3Rfc3Vic2NyaXB0cyhzZWxmKToKKyAgICAgICAgIyBTRiBidWcgMTQ0ODgwNAorICAgICAgICAjIENsYXNzIHRvIG1ha2UgdGVzdGluZyBzdWJzY3JpcHQgcmVzdWx0cyBlYXN5CisgICAgICAgIGNsYXNzIHN0cl9tYXAob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEgPSB7fQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtzdHIoa2V5KV0KKyAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGFbc3RyKGtleSldID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmRhdGFbc3RyKGtleSldCisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihrZXkpIGluIHNlbGYuZGF0YQorICAgICAgICBkID0gc3RyX21hcCgpCisgICAgICAgICMgSW5kZXgKKyAgICAgICAgZFsxXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzFdLCAxKQorICAgICAgICBkWzFdICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzFdLCAyKQorICAgICAgICBkZWwgZFsxXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEsIGQpCisgICAgICAgICMgVHVwbGUgb2YgaW5kaWNlcworICAgICAgICBkWzEsIDFdID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMSwgMV0sIDEpCisgICAgICAgIGRbMSwgMV0gKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMSwgMV0sIDIpCisgICAgICAgIGRlbCBkWzEsIDFdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKDEsIDEpLCBkKQorICAgICAgICAjIFNpbXBsZSBzbGljZQorICAgICAgICBkWzE6Ml0gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjJdLCAxKQorICAgICAgICBkWzE6Ml0gKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyXSwgMikKKyAgICAgICAgZGVsIGRbMToyXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNsaWNlKDEsIDIpLCBkKQorICAgICAgICAjIFR1cGxlIG9mIHNpbXBsZSBzbGljZXMKKyAgICAgICAgZFsxOjIsIDE6Ml0gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjIsIDE6Ml0sIDEpCisgICAgICAgIGRbMToyLCAxOjJdICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MiwgMToyXSwgMikKKyAgICAgICAgZGVsIGRbMToyLCAxOjJdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKHNsaWNlKDEsIDIpLCBzbGljZSgxLCAyKSksIGQpCisgICAgICAgICMgRXh0ZW5kZWQgc2xpY2UKKyAgICAgICAgZFsxOjI6M10gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjI6M10sIDEpCisgICAgICAgIGRbMToyOjNdICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozXSwgMikKKyAgICAgICAgZGVsIGRbMToyOjNdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2xpY2UoMSwgMiwgMyksIGQpCisgICAgICAgICMgVHVwbGUgb2YgZXh0ZW5kZWQgc2xpY2VzCisgICAgICAgIGRbMToyOjMsIDE6MjozXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozLCAxOjI6M10sIDEpCisgICAgICAgIGRbMToyOjMsIDE6MjozXSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjI6MywgMToyOjNdLCAyKQorICAgICAgICBkZWwgZFsxOjI6MywgMToyOjNdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKHNsaWNlKDEsIDIsIDMpLCBzbGljZSgxLCAyLCAzKSksIGQpCisgICAgICAgICMgRWxsaXBzaXMKKyAgICAgICAgZFsuLi5dID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uXSwgMSkKKyAgICAgICAgZFsuLi5dICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWy4uLl0sIDIpCisgICAgICAgIGRlbCBkWy4uLl0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihFbGxpcHNpcywgZCkKKyAgICAgICAgIyBUdXBsZSBvZiBFbGxpcHNlcworICAgICAgICBkWy4uLiwgLi4uXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWy4uLiwgLi4uXSwgMSkKKyAgICAgICAgZFsuLi4sIC4uLl0gKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uLCAuLi5dLCAyKQorICAgICAgICBkZWwgZFsuLi4sIC4uLl0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoRWxsaXBzaXMsIEVsbGlwc2lzKSwgZCkKKworICAgIGRlZiB0ZXN0X21hbmdsaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBfX21hbmdsZWQgPSAxCisgICAgICAgICAgICAgICAgX19ub3RfbWFuZ2xlZF9fID0gMgorICAgICAgICAgICAgICAgIGltcG9ydCBfX21hbmdsZWRfbW9kCisgICAgICAgICAgICAgICAgaW1wb3J0IF9fcGFja2FnZV9fLm1vZHVsZQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9BX19tYW5nbGVkIiwgQS5mLmZ1bmNfY29kZS5jb192YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX19ub3RfbWFuZ2xlZF9fIiwgQS5mLmZ1bmNfY29kZS5jb192YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX0FfX21hbmdsZWRfbW9kIiwgQS5mLmZ1bmNfY29kZS5jb192YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX19wYWNrYWdlX18iLCBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQorCisgICAgZGVmIHRlc3RfY29tcGlsZV9hc3Qoc2VsZik6CisgICAgICAgIGZuYW1lID0gX19maWxlX18KKyAgICAgICAgaWYgZm5hbWUubG93ZXIoKS5lbmRzd2l0aCgoJ3B5YycsICdweW8nKSk6CisgICAgICAgICAgICBmbmFtZSA9IGZuYW1lWzotMV0KKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAncicpIGFzIGY6CisgICAgICAgICAgICBmY29udGVudHMgPSBmLnJlYWQoKQorICAgICAgICBzYW1wbGVfY29kZSA9IFsKKyAgICAgICAgICAgIFsnPGFzc2lnbj4nLCAneCA9IDUnXSwKKyAgICAgICAgICAgIFsnPHByaW50MT4nLCAncHJpbnQgMSddLAorICAgICAgICAgICAgWyc8cHJpbnR2PicsICdwcmludCB2J10sCisgICAgICAgICAgICBbJzxwcmludFRydWU+JywgJ3ByaW50IFRydWUnXSwKKyAgICAgICAgICAgIFsnPHByaW50TGlzdD4nLCAncHJpbnQgW10nXSwKKyAgICAgICAgICAgIFsnPGlmYmxvY2s+JywgIiIiaWYgVHJ1ZTpcbiAgICBwYXNzXG4iIiJdLAorICAgICAgICAgICAgWyc8Zm9yYmxvY2s+JywgIiIiZm9yIG4gaW4gWzEsIDIsIDNdOlxuICAgIHByaW50IG5cbiIiIl0sCisgICAgICAgICAgICBbJzxkZWZmdW5jPicsICIiImRlZiBmb28oKTpcbiAgICBwYXNzXG5mb28oKVxuIiIiXSwKKyAgICAgICAgICAgIFtmbmFtZSwgZmNvbnRlbnRzXSwKKyAgICAgICAgXQorCisgICAgICAgIGZvciBmbmFtZSwgY29kZSBpbiBzYW1wbGVfY29kZToKKyAgICAgICAgICAgIGNvMSA9IGNvbXBpbGUoY29kZSwgJyVzMScgJSBmbmFtZSwgJ2V4ZWMnKQorICAgICAgICAgICAgYXN0ID0gY29tcGlsZShjb2RlLCAnJXMyJyAlIGZuYW1lLCAnZXhlYycsIF9hc3QuUHlDRl9PTkxZX0FTVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGFzdCkgPT0gX2FzdC5Nb2R1bGUpCisgICAgICAgICAgICBjbzIgPSBjb21waWxlKGFzdCwgJyVzMycgJSBmbmFtZSwgJ2V4ZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbzEsIGNvMikKKyAgICAgICAgICAgICMgdGhlIGNvZGUgb2JqZWN0J3MgZmlsZW5hbWUgY29tZXMgZnJvbSB0aGUgc2Vjb25kIGNvbXBpbGF0aW9uIHN0ZXAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28yLmNvX2ZpbGVuYW1lLCAnJXMzJyAlIGZuYW1lKQorCisgICAgICAgICMgcmFpc2UgZXhjZXB0aW9uIHdoZW4gbm9kZSB0eXBlIGRvZXNuJ3QgbWF0Y2ggd2l0aCBjb21waWxlIG1vZGUKKyAgICAgICAgY28xID0gY29tcGlsZSgncHJpbnQgMScsICc8c3RyaW5nPicsICdleGVjJywgX2FzdC5QeUNGX09OTFlfQVNUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBpbGUsIGNvMSwgJzxhc3Q+JywgJ2V2YWwnKQorCisgICAgICAgICMgcmFpc2UgZXhjZXB0aW9uIHdoZW4gbm9kZSB0eXBlIGlzIG5vIHN0YXJ0IG5vZGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21waWxlLCBfYXN0LklmKCksICc8YXN0PicsICdleGVjJykKKworICAgICAgICAjIHJhaXNlIGV4Y2VwdGlvbiB3aGVuIG5vZGUgaGFzIGludmFsaWQgY2hpbGRyZW4KKyAgICAgICAgYXN0ID0gX2FzdC5Nb2R1bGUoKQorICAgICAgICBhc3QuYm9keSA9IFtfYXN0LkJvb2xPcCgpXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBpbGUsIGFzdCwgJzxhc3Q+JywgJ2V4ZWMnKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RTcGVjaWZpY3MpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZjY5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CkBAIC0wLDAgKzEsODAgQEAKK2ltcG9ydCBjb21waWxlYWxsCitpbXBvcnQgaW1wCitpbXBvcnQgb3MKK2ltcG9ydCBweV9jb21waWxlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBDb21waWxlYWxsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLnNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QucHknKQorICAgICAgICBzZWxmLmJjX3BhdGggPSBzZWxmLnNvdXJjZV9wYXRoICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZV9wYXRoLCAndycpIGFzIGZpbGU6CisgICAgICAgICAgICBmaWxlLndyaXRlKCd4ID0gMTIzXG4nKQorICAgICAgICBzZWxmLnNvdXJjZV9wYXRoMiA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0Mi5weScpCisgICAgICAgIHNlbGYuYmNfcGF0aDIgPSBzZWxmLnNvdXJjZV9wYXRoMiArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoc2VsZi5zb3VyY2VfcGF0aCwgc2VsZi5zb3VyY2VfcGF0aDIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJlY3RvcnkpCisKKyAgICBkZWYgZGF0YShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuYmNfcGF0aCwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgIGRhdGEgPSBmaWxlLnJlYWQoOCkKKyAgICAgICAgbXRpbWUgPSBpbnQob3Muc3RhdChzZWxmLnNvdXJjZV9wYXRoKS5zdF9tdGltZSkKKyAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wLmdldF9tYWdpYygpLCBtdGltZSkKKyAgICAgICAgcmV0dXJuIGRhdGEsIGNvbXBhcmUKKworICAgIGRlZiByZWNyZWF0aW9uX2NoZWNrKHNlbGYsIG1ldGFkYXRhKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBjb21waWxlYWxsIHJlY3JlYXRlcyBieXRlY29kZSB3aGVuIHRoZSBuZXcgbWV0YWRhdGEgaXMKKyAgICAgICAgdXNlZC4iIiIKKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICdzdGF0Jyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKnNlbGYuZGF0YSgpKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5iY19wYXRoLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgYmMgPSBmaWxlLnJlYWQoKVtsZW4obWV0YWRhdGEpOl0KKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuYmNfcGF0aCwgJ3diJykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUobWV0YWRhdGEpCisgICAgICAgICAgICBmaWxlLndyaXRlKGJjKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKCpzZWxmLmRhdGEoKSkKKyAgICAgICAgY29tcGlsZWFsbC5jb21waWxlX2RpcihzZWxmLmRpcmVjdG9yeSwgZm9yY2U9RmFsc2UsIHF1aWV0PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgqc2VsZi5kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9tdGltZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCisgICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgMSkpCisKKyAgICBkZWYgdGVzdF9tYWdpY19udW1iZXIoc2VsZik6CisgICAgICAgICMgVGVzdCBhIGNoYW5nZSBpbiBtdGltZSBsZWFkcyB0byBhIG5ldyAucHljLgorICAgICAgICBzZWxmLnJlY3JlYXRpb25fY2hlY2soYidcMFwwXDBcMCcpCisKKyAgICBkZWYgdGVzdF9jb21waWxlX2ZpbGVzKHNlbGYpOgorICAgICAgICAjIFRlc3QgY29tcGlsaW5nIGEgc2luZ2xlIGZpbGUsIGFuZCBjb21wbGV0ZSBkaXJlY3RvcnkKKyAgICAgICAgZm9yIGZuIGluIChzZWxmLmJjX3BhdGgsIHNlbGYuYmNfcGF0aDIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmbikKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9maWxlKHNlbGYuc291cmNlX3BhdGgsIGZvcmNlPUZhbHNlLCBxdWlldD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoc2VsZi5iY19wYXRoKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IG9zLnBhdGguaXNmaWxlKHNlbGYuYmNfcGF0aDIpKQorICAgICAgICBvcy51bmxpbmsoc2VsZi5iY19wYXRoKQorICAgICAgICBjb21waWxlYWxsLmNvbXBpbGVfZGlyKHNlbGYuZGlyZWN0b3J5LCBmb3JjZT1GYWxzZSwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHNlbGYuYmNfcGF0aCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG9zLnBhdGguaXNmaWxlKHNlbGYuYmNfcGF0aDIpKQorICAgICAgICBvcy51bmxpbmsoc2VsZi5iY19wYXRoKQorICAgICAgICBvcy51bmxpbmsoc2VsZi5iY19wYXRoMikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29tcGlsZWFsbFRlc3RzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tcGlsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5ODgxMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVyLnB5CkBAIC0wLDAgKzEsMzE3IEBACitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKK2NvbXBpbGVyID0gdGVzdC50ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnY29tcGlsZXInLCBkZXByZWNhdGVkPVRydWUpCitmcm9tIGNvbXBpbGVyLmFzdCBpbXBvcnQgZmxhdHRlbgoraW1wb3J0IG9zLCBzeXMsIHRpbWUsIHVuaXR0ZXN0Citmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZG9tCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCisjIEhvdyBtdWNoIHRpbWUgaW4gc2Vjb25kcyBjYW4gcGFzcyBiZWZvcmUgd2UgcHJpbnQgYSAnU3RpbGwgd29ya2luZycgbWVzc2FnZS4KK19QUklOVF9XT1JLSU5HX01TR19JTlRFUlZBTCA9IDUgKiA2MAorCitjbGFzcyBUcml2aWFsQ29udGV4dChvYmplY3QpOgorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CisgICAgICAgIHBhc3MKKworY2xhc3MgQ29tcGlsZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0Q29tcGlsZUxpYnJhcnkoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgYnV0IGxhcmdlIHRlc3QuICBDb21waWxlIGFsbCB0aGUgY29kZSBpbiB0aGUKKyAgICAgICAgIyBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBpdHMgdGVzdCBzdWl0ZS4gIFRoaXMgZG9lc24ndCB2ZXJpZnkKKyAgICAgICAgIyB0aGF0IGFueSBvZiB0aGUgY29kZSBpcyBjb3JyZWN0LCBtZXJlbHkgdGhlIGNvbXBpbGVyIGlzIGFibGUKKyAgICAgICAgIyB0byBnZW5lcmF0ZSBzb21lIGtpbmQgb2YgY29kZSBmb3IgaXQuCisKKyAgICAgICAgbmV4dF90aW1lID0gdGltZS50aW1lKCkgKyBfUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwKKyAgICAgICAgIyB3YXJuaW5nOiBpZiAnb3MnIG9yICd0ZXN0X3N1cHBvcnQnIGFyZSBtb3ZlZCBpbiBzb21lIG90aGVyIGRpciwKKyAgICAgICAgIyB0aGV5IHNob3VsZCBiZSBjaGFuZ2VkIGhlcmUuCisgICAgICAgIGxpYmRpciA9IG9zLnBhdGguZGlybmFtZShvcy5fX2ZpbGVfXykKKyAgICAgICAgdGVzdGRpciA9IG9zLnBhdGguZGlybmFtZSh0ZXN0LnRlc3Rfc3VwcG9ydC5fX2ZpbGVfXykKKworICAgICAgICBmb3IgZGlyIGluIFt0ZXN0ZGlyXToKKyAgICAgICAgICAgIGZvciBiYXNlbmFtZSBpbiAidGVzdF9vcy5weSIsOgorICAgICAgICAgICAgICAgICMgUHJpbnQgc3RpbGwgd29ya2luZyBtZXNzYWdlIHNpbmNlIHRoaXMgdGVzdCBjYW4gYmUgcmVhbGx5IHNsb3cKKyAgICAgICAgICAgICAgICBpZiBuZXh0X3RpbWUgPD0gdGltZS50aW1lKCk6CisgICAgICAgICAgICAgICAgICAgIG5leHRfdGltZSA9IHRpbWUudGltZSgpICsgX1BSSU5UX1dPUktJTkdfTVNHX0lOVEVSVkFMCisgICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLl9fc3Rkb3V0X18sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJyAgdGVzdENvbXBpbGVMaWJyYXJ5IHN0aWxsIHdvcmtpbmcsIGJlIHBhdGllbnQuLi4nCisgICAgICAgICAgICAgICAgICAgIHN5cy5fX3N0ZG91dF9fLmZsdXNoKCkKKworICAgICAgICAgICAgICAgIGlmIG5vdCBiYXNlbmFtZS5lbmRzd2l0aCgiLnB5Iik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IFRFU1RfQUxMIGFuZCByYW5kb20oKSA8IDAuOTg6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXIsIGJhc2VuYW1lKQorICAgICAgICAgICAgICAgIGlmIHRlc3QudGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJjb21waWxpbmciLCBwYXRoCisgICAgICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgIlUiKQorICAgICAgICAgICAgICAgIGJ1ZiA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgaWYgImJhZHN5bnRheCIgaW4gYmFzZW5hbWUgb3IgImJhZF9jb2RpbmciIGluIGJhc2VuYW1lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZXIuY29tcGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBiYXNlbmFtZSwgImV4ZWMiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyLmNvbXBpbGUoYnVmLCBiYXNlbmFtZSwgImV4ZWMiKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoZS5hcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoImluIGZpbGUgJXNdIiAlIGJhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgI2FyZ3NbMF0gKz0gIltpbiBmaWxlICVzXSIgJSBiYXNlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgZS5hcmdzID0gdHVwbGUoYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgdGVzdE5ld0NsYXNzU3ludGF4KHNlbGYpOgorICAgICAgICBjb21waWxlci5jb21waWxlKCJjbGFzcyBmb28oKTpwYXNzXG5cbiIsIjxzdHJpbmc+IiwiZXhlYyIpCisKKyAgICBkZWYgdGVzdFlpZWxkRXhwcihzZWxmKToKKyAgICAgICAgY29tcGlsZXIuY29tcGlsZSgiZGVmIGcoKTogeWllbGRcblxuIiwgIjxzdHJpbmc+IiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3RLZXl3b3JkQWZ0ZXJTdGFyYXJncyhzZWxmKToKKyAgICAgICAgZGVmIGYoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGFyZ3MsIGt3YXJncyksICgoMiwzKSwgeyd4JzogMSwgJ3knOiA0fSkpCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdmKHg9MSwgKigyLCAzKSwgeT00KScsICc8c3RyaW5nPicsICdleGVjJykKKyAgICAgICAgZXhlYyBjIGluIHsnZic6IGZ9CisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGVyLnBhcnNlLCAiZm9vKGE9MSwgYikiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZXIucGFyc2UsICJmb28oMSwgKmFyZ3MsIDMpIikKKworICAgIGRlZiB0ZXN0VHJ5RXhjZXB0RmluYWxseShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXhjZXB0IGFuZCBmaW5hbGx5IGNsYXVzZXMgaW4gb25lIHRyeSBzdG10IGFyZSByZWNvZ25pemVkCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCJ0cnk6XG4gMS8vMFxuZXhjZXB0OlxuIGUgPSAxXG5maW5hbGx5OlxuIGYgPSAxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdHJpbmc+IiwgImV4ZWMiKQorICAgICAgICBkY3QgPSB7fQorICAgICAgICBleGVjIGMgaW4gZGN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGN0LmdldCgnZScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdC5nZXQoJ2YnKSwgMSkKKworICAgIGRlZiB0ZXN0RGVmYXVsdEFyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlci5wYXJzZSwgImRlZiBmb28oYT0xLCBiKTogcGFzcyIpCisKKyAgICBkZWYgdGVzdERvY3N0cmluZ3Moc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCciZG9jIicsICc8c3RyaW5nPicsICdleGVjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignX19kb2NfXycsIGMuY29fbmFtZXMpCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdkZWYgZigpOlxuICJkb2MiJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICBnID0ge30KKyAgICAgICAgZXhlYyBjIGluIGcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnWydmJ10uX19kb2NfXywgImRvYyIpCisKKyAgICBkZWYgdGVzdExpbmVObyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIG5vZGVzIGV4Y2VwdCBNb2R1bGUgaGF2ZSBhIGNvcnJlY3QgbGluZW5vIGF0dHJpYnV0ZS4KKyAgICAgICAgZmlsZW5hbWUgPSBfX2ZpbGVfXworICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgoIi5weWMiLCAiLnB5byIpKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbOi0xXQorICAgICAgICB0cmVlID0gY29tcGlsZXIucGFyc2VGaWxlKGZpbGVuYW1lKQorICAgICAgICBzZWxmLmNoZWNrX2xpbmVubyh0cmVlKQorCisgICAgZGVmIGNoZWNrX2xpbmVubyhzZWxmLCBub2RlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfbGluZW5vKG5vZGUpCisgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgICAgIHByaW50IG5vZGUuX19jbGFzc19fLCBub2RlLmxpbmVubworICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfY2hlY2tfbGluZW5vKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBub3Qgbm9kZS5fX2NsYXNzX18gaW4gTk9MSU5FTk86CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uobm9kZS5saW5lbm8sIGludCwKKyAgICAgICAgICAgICAgICAibGluZW5vPSVzIG9uICVzIiAlIChub2RlLmxpbmVubywgbm9kZS5fX2NsYXNzX18pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUubGluZW5vID4gMCwKKyAgICAgICAgICAgICAgICAibGluZW5vPSVzIG9uICVzIiAlIChub2RlLmxpbmVubywgbm9kZS5fX2NsYXNzX18pKQorICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5nZXRDaGlsZE5vZGVzKCk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX2xpbmVubyhjaGlsZCkKKworICAgIGRlZiB0ZXN0RmxhdHRlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbGF0dGVuKFsxLCBbMl1dKSwgWzEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYXR0ZW4oKDEsICgyLCkpKSwgWzEsIDJdKQorCisgICAgZGVmIHRlc3ROZXN0ZWRTY29wZShzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ2RlZiBnKCk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgYSA9IDFcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBkZWYgZigpOiByZXR1cm4gYSArIDJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICByZXR1cm4gZigpXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXN1bHQgPSBnKCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhlYycpCisgICAgICAgIGRjdCA9IHt9CisgICAgICAgIGV4ZWMgYyBpbiBkY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdyZXN1bHQnKSwgMykKKworICAgIGRlZiB0ZXN0R2VuRXhwKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnbGlzdCgoaSxqKSBmb3IgaSBpbiByYW5nZSgzKSBpZiBpIDwgMycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoNCkgaWYgaiA+IDIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIFsoMCwgMyksICgxLCAzKSwgKDIsIDMpXSkKKworICAgIGRlZiB0ZXN0U2V0TGl0ZXJhbChzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3sxLCAyLCAzfScsICc8c3RyaW5nPicsICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7MSwyLDN9KQorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnezEsIDIsIDMsfScsICc8c3RyaW5nPicsICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7MSwyLDN9KQorCisgICAgZGVmIHRlc3REaWN0TGl0ZXJhbChzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3sxOjIsIDI6MywgMzo0fScsICc8c3RyaW5nPicsICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7MToyLCAyOjMsIDM6NH0pCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7MToyLCAyOjMsIDM6NCx9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxOjIsIDI6MywgMzo0fSkKKworICAgIGRlZiB0ZXN0U2V0Q29tcChzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3t4IGZvciB4IGluIHJhbmdlKDEsIDQpfScsICc8c3RyaW5nPicsICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7MSwgMiwgM30pCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7eCAqIHkgZm9yIHggaW4gcmFuZ2UoMykgaWYgeCAhPSAwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgIGZvciB5IGluIHJhbmdlKDQpIGlmIHkgIT0gMH0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgezEsIDIsIDMsIDQsIDZ9KQorCisgICAgZGVmIHRlc3REaWN0Q29tcChzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3t4OngrMSBmb3IgeCBpbiByYW5nZSgxLCA0KX0nLCAnPHN0cmluZz4nLCAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgezE6MiwgMjozLCAzOjR9KQorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgneyh4LCB5KSA6IHkgZm9yIHggaW4gcmFuZ2UoMikgaWYgeCAhPSAwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgZm9yIHkgaW4gcmFuZ2UoMykgaWYgeSAhPSAwfScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RyaW5nPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7KDEsIDIpOiAyLCAoMSwgMSk6IDF9KQorCisgICAgZGVmIHRlc3RXaXRoKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAxNjM4MjQzCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWYgZigpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHdpdGggVHJpdmlhbENvbnRleHQoKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuIDFcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCA9IGYoKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RyaW5nPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGVjJyApCisgICAgICAgIGRjdCA9IHsnVHJpdmlhbENvbnRleHQnOiBUcml2aWFsQ29udGV4dH0KKyAgICAgICAgZXhlYyBjIGluIGRjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdC5nZXQoJ3Jlc3VsdCcpLCAxKQorCisgICAgZGVmIHRlc3RXaXRoQXNzKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmIGYoKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICB3aXRoIFRyaXZpYWxDb250ZXh0KCkgYXMgdGM6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybiAxXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXN1bHQgPSBmKCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhlYycgKQorICAgICAgICBkY3QgPSB7J1RyaXZpYWxDb250ZXh0JzogVHJpdmlhbENvbnRleHR9CisgICAgICAgIGV4ZWMgYyBpbiBkY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdyZXN1bHQnKSwgMSkKKworICAgIGRlZiB0ZXN0V2l0aE11bHQoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIGNsYXNzIEN0eDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKKyAgICAgICAgICAgICAgICBzZWxmLm4gPSBuCisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoc2VsZi5uKQorICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWYgZigpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHdpdGggQ3R4KDEpIGFzIHRjLCBDdHgoMikgYXMgdGMyOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICByZXR1cm4gMVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzdWx0ID0gZigpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4ZWMnICkKKyAgICAgICAgZGN0ID0geydDdHgnOiBDdHh9CisgICAgICAgIGV4ZWMgYyBpbiBkY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdyZXN1bHQnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsxLCAyXSkKKworICAgIGRlZiB0ZXN0R2xvYmFsKHNlbGYpOgorICAgICAgICBjb2RlID0gY29tcGlsZXIuY29tcGlsZSgnZ2xvYmFsIHhcbng9MScsICc8c3RyaW5nPicsICdleGVjJykKKyAgICAgICAgZDEgPSB7J19fYnVpbHRpbnNfXyc6IHt9fQorICAgICAgICBkMiA9IHt9CisgICAgICAgIGV4ZWMgY29kZSBpbiBkMSwgZDIKKyAgICAgICAgIyB4IHNob3VsZCBiZSBpbiB0aGUgZ2xvYmFscyBkaWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuZ2V0KCd4JyksIDEpCisKKyAgICBkZWYgdGVzdFByaW50RnVuY3Rpb24oc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmludCgiYSIsICJiIiwgc2VwPSIqKiIsIGVuZD0iKysiLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZT1vdXRwdXQpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4ZWMnICkKKyAgICAgICAgZGN0ID0geydvdXRwdXQnOiBTdHJpbmdJTygpfQorICAgICAgICBleGVjIGMgaW4gZGN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGN0WydvdXRwdXQnXS5nZXR2YWx1ZSgpLCAnYSoqYisrJykKKworICAgIGRlZiBfdGVzdEVyckVuYyhzZWxmLCBzcmMsIHRleHQsIG9mZnNldCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbXBpbGUoc3JjLCAiIiwgImV4ZWMiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUub2Zmc2V0LCBvZmZzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUudGV4dCwgdGV4dCkKKworICAgIGRlZiB0ZXN0U291cmNlQ29kZUVuY29kaW5nc0Vycm9yKHNlbGYpOgorICAgICAgICAjIFRlc3QgU3ludGF4RXJyb3Igd2l0aCBlbmNvZGluZyBkZWZpbml0aW9uCisgICAgICAgIHNqaXMgPSAicHJpbnQgJ1x4ODNceDcwXHg4M1x4NDNceDgzXHg1Y1x4ODNceDkzJywgJ1xuIgorICAgICAgICBhc2NpaSA9ICJwcmludCAnMTIzNDU2NzgnLCAnXG4iCisgICAgICAgIGVuY2RlZiA9ICIjISAtKi0gY29kaW5nOiBTaGlmdEpJUyAtKi1cbiIKKworICAgICAgICAjIGFzY2lpIHNvdXJjZSB3aXRob3V0IGVuY2RlZgorICAgICAgICBzZWxmLl90ZXN0RXJyRW5jKGFzY2lpLCBhc2NpaSwgMTkpCisKKyAgICAgICAgIyBhc2NpaSBzb3VyY2Ugd2l0aCBlbmNkZWYKKyAgICAgICAgc2VsZi5fdGVzdEVyckVuYyhlbmNkZWYrYXNjaWksIGFzY2lpLCAxOSkKKworICAgICAgICAjIG5vbi1hc2NpaSBzb3VyY2Ugd2l0aCBlbmNkZWYKKyAgICAgICAgc2VsZi5fdGVzdEVyckVuYyhlbmNkZWYrc2ppcywgc2ppcywgMTkpCisKKyAgICAgICAgIyBTaGlmdEpJUyBzb3VyY2Ugd2l0aG91dCBlbmNkZWYKKyAgICAgICAgc2VsZi5fdGVzdEVyckVuYyhzamlzLCBzamlzLCAxOSkKKworCitOT0xJTkVOTyA9IChjb21waWxlci5hc3QuTW9kdWxlLCBjb21waWxlci5hc3QuU3RtdCwgY29tcGlsZXIuYXN0LkRpc2NhcmQpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgY29kZSBiZWxvdyBpcyBqdXN0IHVzZWQgdG8gdHJpZ2dlciBzb21lIHBvc3NpYmxlIGVycm9ycywgZm9yIHRoZSBiZW5lZml0IG9mCisjIHRlc3RMaW5lTm8KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgVG90bzoKKyAgICAiIiJkb2NzdHJpbmciIiIKKyAgICBwYXNzCisKK2EsIGIgPSAyLCAzCitbYywgZF0gPSA1LCA2CitsID0gWyh4LCB5KSBmb3IgeCwgeSBpbiB6aXAocmFuZ2UoNSksIHJhbmdlKDUsMTApKV0KK2xbMF0KK2xbMzo0XQorZCA9IHsnYSc6IDJ9CitkID0ge30KK2QgPSB7eDogeSBmb3IgeCwgeSBpbiB6aXAocmFuZ2UoNSksIHJhbmdlKDUsMTApKX0KK3MgPSB7eCBmb3IgeCBpbiByYW5nZSgxMCl9CitzID0gezF9Cit0ID0gKCkKK3QgPSAoMSwgMikKK2wgPSBbXQorbCA9IFsxLCAyXQoraWYgbDoKKyAgICBwYXNzCitlbHNlOgorICAgIGEsIGIgPSBiLCBhCisKK3RyeToKKyAgICBwcmludCB5bworZXhjZXB0OgorICAgIHlvID0gMworZWxzZToKKyAgICB5byArPSAzCisKK3RyeToKKyAgICBhICs9IGIKK2ZpbmFsbHk6CisgICAgYiA9IDAKKworZnJvbSBtYXRoIGltcG9ydCAqCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGdsb2JhbCBURVNUX0FMTAorICAgIFRFU1RfQUxMID0gdGVzdC50ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgiY3B1IikKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29tcGlsZXJUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWU4Njc3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQpAQCAtMCwwICsxLDY1MSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZG9tCitmcm9tIG1hdGggaW1wb3J0IGF0YW4yLCBpc25hbiwgY29weXNpZ24KKworSU5GID0gZmxvYXQoImluZiIpCitOQU4gPSBmbG9hdCgibmFuIikKKyMgVGhlc2UgdGVzdHMgZW5zdXJlIHRoYXQgY29tcGxleCBtYXRoIGRvZXMgdGhlIHJpZ2h0IHRoaW5nCisKK2NsYXNzIENvbXBsZXhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLCBiKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhLCBjb21wbGV4KToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgY29tcGxleCk6CisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwoc2VsZiwgYS5yZWFsLCBiLnJlYWwpCisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwoc2VsZiwgYS5pbWFnLCBiLmltYWcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYsIGEucmVhbCwgYikKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLmltYWcsIDAuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShiLCBjb21wbGV4KToKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLCBiLnJlYWwpCisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwoc2VsZiwgMC4sIGIuaW1hZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwoc2VsZiwgYSwgYikKKworICAgIGRlZiBhc3NlcnRDbG9zZUFicyhzZWxmLCB4LCB5LCBlcHM9MWUtOSk6CisgICAgICAgICIiIlJldHVybiB0cnVlIGlmZiBmbG9hdHMgeCBhbmQgeSAiYXJlIGNsb3NlXCIiIiIKKyAgICAgICAgIyBwdXQgdGhlIG9uZSB3aXRoIGxhcmdlciBtYWduaXR1ZGUgc2Vjb25kCisgICAgICAgIGlmIGFicyh4KSA+IGFicyh5KToKKyAgICAgICAgICAgIHgsIHkgPSB5LCB4CisgICAgICAgIGlmIHkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBhYnMoeCkgPCBlcHMKKyAgICAgICAgaWYgeCA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIGFicyh5KSA8IGVwcworICAgICAgICAjIGNoZWNrIHRoYXQgcmVsYXRpdmUgZGlmZmVyZW5jZSA8IGVwcworICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKCh4LXkpL3kpIDwgZXBzKQorCisgICAgZGVmIGFzc2VydEZsb2F0c0FyZUlkZW50aWNhbChzZWxmLCB4LCB5KToKKyAgICAgICAgIiIiYXNzZXJ0IHRoYXQgZmxvYXRzIHggYW5kIHkgYXJlIGlkZW50aWNhbCwgaW4gdGhlIHNlbnNlIHRoYXQ6CisgICAgICAgICgxKSBib3RoIHggYW5kIHkgYXJlIG5hbnMsIG9yCisgICAgICAgICgyKSBib3RoIHggYW5kIHkgYXJlIGluZmluaXRpZXMsIHdpdGggdGhlIHNhbWUgc2lnbiwgb3IKKyAgICAgICAgKDMpIGJvdGggeCBhbmQgeSBhcmUgemVyb3MsIHdpdGggdGhlIHNhbWUgc2lnbiwgb3IKKyAgICAgICAgKDQpIHggYW5kIHkgYXJlIGJvdGggZmluaXRlIGFuZCBub256ZXJvLCBhbmQgeCA9PSB5CisKKyAgICAgICAgIiIiCisgICAgICAgIG1zZyA9ICdmbG9hdHMgeyFyfSBhbmQgeyFyfSBhcmUgbm90IGlkZW50aWNhbCcKKworICAgICAgICBpZiBpc25hbih4KSBvciBpc25hbih5KToKKyAgICAgICAgICAgIGlmIGlzbmFuKHgpIGFuZCBpc25hbih5KToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiB4ID09IHk6CisgICAgICAgICAgICBpZiB4ICE9IDAuMDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICMgYm90aCB6ZXJvOyBjaGVjayB0aGF0IHNpZ25zIG1hdGNoCisgICAgICAgICAgICBlbGlmIGNvcHlzaWduKDEuMCwgeCkgPT0gY29weXNpZ24oMS4wLCB5KToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnICs9ICc6IHplcm9zIGhhdmUgZGlmZmVyZW50IHNpZ25zJworICAgICAgICBzZWxmLmZhaWwobXNnLmZvcm1hdCh4LCB5KSkKKworICAgIGRlZiBhc3NlcnRDbG9zZShzZWxmLCB4LCB5LCBlcHM9MWUtOSk6CisgICAgICAgICIiIlJldHVybiB0cnVlIGlmZiBjb21wbGV4ZXMgeCBhbmQgeSAiYXJlIGNsb3NlXCIiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRDbG9zZUFicyh4LnJlYWwsIHkucmVhbCwgZXBzKQorICAgICAgICBzZWxmLmFzc2VydENsb3NlQWJzKHguaW1hZywgeS5pbWFnLCBlcHMpCisKKyAgICBkZWYgY2hlY2tfZGl2KHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJDb21wdXRlIGNvbXBsZXggej14KnksIGFuZCBjaGVjayB0aGF0IHoveD09eSBhbmQgei95PT14LiIiIgorICAgICAgICB6ID0geCAqIHkKKyAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgcSA9IHogLyB4CisgICAgICAgICAgICBzZWxmLmFzc2VydENsb3NlKHEsIHkpCisgICAgICAgICAgICBxID0gei5fX2Rpdl9fKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydENsb3NlKHEsIHkpCisgICAgICAgICAgICBxID0gei5fX3RydWVkaXZfXyh4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRDbG9zZShxLCB5KQorICAgICAgICBpZiB5ICE9IDA6CisgICAgICAgICAgICBxID0geiAvIHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2UocSwgeCkKKyAgICAgICAgICAgIHEgPSB6Ll9fZGl2X18oeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2UocSwgeCkKKyAgICAgICAgICAgIHEgPSB6Ll9fdHJ1ZWRpdl9fKHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydENsb3NlKHEsIHgpCisKKyAgICBkZWYgdGVzdF9kaXYoc2VsZik6CisgICAgICAgIHNpbXBsZV9yZWFsID0gW2Zsb2F0KGkpIGZvciBpIGluIHhyYW5nZSgtNSwgNildCisgICAgICAgIHNpbXBsZV9jb21wbGV4ID0gW2NvbXBsZXgoeCwgeSkgZm9yIHggaW4gc2ltcGxlX3JlYWwgZm9yIHkgaW4gc2ltcGxlX3JlYWxdCisgICAgICAgIGZvciB4IGluIHNpbXBsZV9jb21wbGV4OgorICAgICAgICAgICAgZm9yIHkgaW4gc2ltcGxlX2NvbXBsZXg6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19kaXYoeCwgeSkKKworICAgICAgICAjIEEgbmFpdmUgY29tcGxleCBkaXZpc2lvbiBhbGdvcml0aG0gKHN1Y2ggYXMgaW4gMi4wKSBpcyB2ZXJ5IHByb25lIHRvCisgICAgICAgICMgbm9uc2Vuc2UgZXJyb3JzIGZvciB0aGVzZSAob3ZlcmZsb3dzIGFuZCB1bmRlcmZsb3dzKS4KKyAgICAgICAgc2VsZi5jaGVja19kaXYoY29tcGxleCgxZTIwMCwgMWUyMDApLCAxKzBqKQorICAgICAgICBzZWxmLmNoZWNrX2Rpdihjb21wbGV4KDFlLTIwMCwgMWUtMjAwKSwgMSswaikKKworICAgICAgICAjIEp1c3QgZm9yIGZ1bi4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX2Rpdihjb21wbGV4KHJhbmRvbSgpLCByYW5kb20oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV4KHJhbmRvbSgpLCByYW5kb20oKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGNvbXBsZXguX19kaXZfXywgMSsxaiwgMCswaikKKyAgICAgICAgIyBGSVhNRTogVGhlIGZvbGxvd2luZyBjdXJyZW50bHkgY3Jhc2hlcyBvbiBBbHBoYQorICAgICAgICAjIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvdywgMWUyMDArMWosIDFlMjAwKzFqKQorCisgICAgZGVmIHRlc3RfdHJ1ZWRpdihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4Ll9fdHJ1ZWRpdl9fKDIrMGosIDErMWopLCAxLTFqKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgY29tcGxleC5fX3RydWVkaXZfXywgMSsxaiwgMCswaikKKworICAgIGRlZiB0ZXN0X2Zsb29yZGl2KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXguX19mbG9vcmRpdl9fKDMrMGosIDEuNSswaiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBjb21wbGV4Ll9fZmxvb3JkaXZfXywgMyswaiwgMCswaikKKworICAgIGRlZiB0ZXN0X2NvZXJjZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgY29tcGxleC5fX2NvZXJjZV9fLCAxKzFqLCAxTDw8MTAwMDApCisKKyAgICBkZWYgdGVzdF9ub19pbXBsaWNpdF9jb2VyY2Uoc2VsZik6CisgICAgICAgICMgUHl0aG9uIDIuNyByZW1vdmVkIGltcGxpY2l0IGNvZXJjaW9uIGZyb20gdGhlIGNvbXBsZXggdHlwZQorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19jb2VyY2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICBhID0gQSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhICsgMi4waikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPCAyLjBqKQorCisgICAgZGVmIHRlc3RfcmljaGNvbXBhcmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleC5fX2VxX18oMSsxaiwgMUw8PDEwMDAwKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleC5fX2x0X18oMSsxaiwgTm9uZSksIE5vdEltcGxlbWVudGVkKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19lcV9fKDErMWosIDErMWopLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19lcV9fKDErMWosIDIrMmopLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fbmVfXygxKzFqLCAxKzFqKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX25lX18oMSsxaiwgMisyaiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleC5fX2x0X18sIDErMWosIDIrMmopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleC5fX2xlX18sIDErMWosIDIrMmopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleC5fX2d0X18sIDErMWosIDIrMmopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleC5fX2dlX18sIDErMWosIDIrMmopCisKKyAgICBkZWYgdGVzdF9yaWNoY29tcGFyZV9ib3VuZGFyaWVzKHNlbGYpOgorICAgICAgICBkZWYgY2hlY2sobiwgZGVsdGFzLCBpc19lcXVhbCwgaW1hZyA9IDAuMCk6CisgICAgICAgICAgICBmb3IgZGVsdGEgaW4gZGVsdGFzOgorICAgICAgICAgICAgICAgIGkgPSBuICsgZGVsdGEKKyAgICAgICAgICAgICAgICB6ID0gY29tcGxleChpLCBpbWFnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX2VxX18oeiwgaSksIGlzX2VxdWFsKGRlbHRhKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19uZV9fKHosIGkpLCBub3QgaXNfZXF1YWwoZGVsdGEpKQorICAgICAgICAjIEZvciBJRUVFLTc1NCBkb3VibGVzIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGhvbGQ6CisgICAgICAgICMgICAgeCBpbiBbMiAqKiAoNTIgKyBpKSwgMiAqKiAoNTMgKyBpICsgMSldIC0+IHggbW9kIDIgKiogaSA9PSAwCisgICAgICAgICMgd2hlcmUgdGhlIGludGVydmFsIGlzIHJlcHJlc2VudGFibGUsIG9mIGNvdXJzZS4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMTApOgorICAgICAgICAgICAgcG93ID0gNTIgKyBpCisgICAgICAgICAgICBtdWx0ID0gMiAqKiBpCisgICAgICAgICAgICBjaGVjaygyICoqIHBvdywgcmFuZ2UoMSwgMTAxKSwgbGFtYmRhIGRlbHRhOiBkZWx0YSAlIG11bHQgPT0gMCkKKyAgICAgICAgICAgIGNoZWNrKDIgKiogcG93LCByYW5nZSgxLCAxMDEpLCBsYW1iZGEgZGVsdGE6IEZhbHNlLCBmbG9hdChpKSkKKyAgICAgICAgY2hlY2soMiAqKiA1MywgcmFuZ2UoLTEwMCwgMCksIGxhbWJkYSBkZWx0YTogVHJ1ZSkKKworICAgIGRlZiB0ZXN0X21vZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsICgxKzFqKS5fX21vZF9fLCAwKzBqKQorCisgICAgICAgIGEgPSAzLjMzKzQuNDNqCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEgJSAwCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibW9kdWxvIHBhcmFtYSBjYW4ndCBiZSAwIikKKworICAgIGRlZiB0ZXN0X2Rpdm1vZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGRpdm1vZCwgMSsxaiwgMCswaikKKworICAgIGRlZiB0ZXN0X3BvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coMSsxaiwgMCswaiksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coMCswaiwgMiswaiksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvdywgMCswaiwgMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KDFqLCAtMSksIDEvMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KDFqLCAyMDApLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3csIDErMWosIDErMWosIDErMWopCisKKyAgICAgICAgYSA9IDMuMzMrNC40M2oKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICoqIDBqLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKiogMC4rMC5qLCAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoM2ogKiogMGosIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoM2ogKiogMCwgMSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAwaiAqKiBhCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGZhaWwgMC4wIHRvIG5lZ2F0aXZlIG9yIGNvbXBsZXggcG93ZXIiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDBqICoqICgzLTJqKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBmYWlsIDAuMCB0byBuZWdhdGl2ZSBvciBjb21wbGV4IHBvd2VyIikKKworICAgICAgICAjIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0byBleGVyY2lzZSBjZXJ0YWluIGNvZGUgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICoqIDEwNSwgYSAqKiAxMDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAqKiAtMTA1LCBhICoqIC0xMDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAqKiAtMzAsIGEgKiogLTMwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMC4waiAqKiAwLCAxKQorCisgICAgICAgIGIgPSA1LjErMi4zagorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3csIGEsIGIsIDApCisKKyAgICBkZWYgdGVzdF9ib29sY29udGV4dChzZWxmKToKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcGxleChyYW5kb20oKSArIDFlLTYsIHJhbmRvbSgpICsgMWUtNikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY29tcGxleCgwLjAsIDAuMCkpCisKKyAgICBkZWYgdGVzdF9jb25qdWdhdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2UoY29tcGxleCg1LjMsIDkuOCkuY29uanVnYXRlKCksIDUuMy05LjhqKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGNsYXNzIE9TOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKTogc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19jb21wbGV4X18oc2VsZik6IHJldHVybiBzZWxmLnZhbHVlCisgICAgICAgIGNsYXNzIE5TKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOiBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKTogcmV0dXJuIHNlbGYudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KE9TKDErMTBqKSksIDErMTBqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgoTlMoMSsxMGopKSwgMSsxMGopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgT1MoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTlMoTm9uZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIxKzEwaiIpLCAxKzEwaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEwKSwgMTArMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxMC4wKSwgMTArMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxMEwpLCAxMCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEwKzBqKSwgMTArMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxLDEwKSwgMSsxMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxLDEwTCksIDErMTBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMSwxMC4wKSwgMSsxMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxTCwxMCksIDErMTBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMUwsMTBMKSwgMSsxMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxTCwxMC4wKSwgMSsxMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxLjAsMTApLCAxKzEwaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEuMCwxMEwpLCAxKzEwaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEuMCwxMC4wKSwgMSsxMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgzLjE0KzBqKSwgMy4xNCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDMuMTQpLCAzLjE0KzBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMzE0KSwgMzE0LjArMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgzMTRMKSwgMzE0LjArMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgzLjE0KzBqLCAwaiksIDMuMTQrMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgzLjE0LCAwLjApLCAzLjE0KzBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMzE0LCAwKSwgMzE0LjArMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgzMTRMLCAwTCksIDMxNC4wKzBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMGosIDMuMTRqKSwgLTMuMTQrMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgwLjAsIDMuMTRqKSwgLTMuMTQrMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgwaiwgMy4xNCksIDMuMTRqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMC4wLCAzLjE0KSwgMy4xNGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiMSIpLCAxKzBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIjFqIiksIDFqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoKSwgIDApCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiLTEiKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiKzEiKSwgKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiKDErMmopIiksIDErMmopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiKDEuMysyLjJqKSIpLCAxLjMrMi4yaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIzLjE0KzFKIiksIDMuMTQrMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiICggKzMuMTQtNkogKSIpLCAzLjE0LTZqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIiAoICszLjE0LUogKSIpLCAzLjE0LTFqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIiAoICszLjE0K2ogKSIpLCAzLjE0KzFqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIkoiKSwgMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiKCBqICkiKSwgMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiK0oiKSwgMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiKCAtaikiKSwgLTFqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoJzFlLTUwMCcpLCAwLjAgKyAwLjBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoJy0xZS01MDBqJyksIDAuMCAtIDAuMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgnLTFlLTUwMCsxZS01MDBqJyksIC0wLjAgKyAwLjBqKQorCisgICAgICAgIGNsYXNzIGNvbXBsZXgyKGNvbXBsZXgpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleChjb21wbGV4MigxKzFqKSksIDErMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleChyZWFsPTE3LCBpbWFnPTIzKSwgMTcrMjNqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgocmVhbD0xNysyM2opLCAxNysyM2opCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleChyZWFsPTE3KzIzaiwgaW1hZz0yMyksIDE3KzQ2aikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KHJlYWw9MSsyaiwgaW1hZz0zKzRqKSwgLTMrNWopCisKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBzaWduIG9mIGEgemVybyBpbiB0aGUgcmVhbCBvciBpbWFnaW5hcnkgcGFydAorICAgICAgICAjIGlzIHByZXNlcnZlZCB3aGVuIGNvbnN0cnVjdGluZyBmcm9tIHR3byBmbG9hdHMuICAoVGhlc2UgY2hlY2tzCisgICAgICAgICMgYXJlIGhhcm1sZXNzIG9uIHN5c3RlbXMgd2l0aG91dCBzdXBwb3J0IGZvciBzaWduZWQgemVyb3MuKQorICAgICAgICBkZWYgc3BsaXRfemVyb3MoeCk6CisgICAgICAgICAgICAiIiJGdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGRpZmZlcmVudCByZXN1bHRzIGZvciAwLiBhbmQgLTAuIiIiCisgICAgICAgICAgICByZXR1cm4gYXRhbjIoeCwgLTEuKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRfemVyb3MoY29tcGxleCgxLiwgMC4pLmltYWcpLCBzcGxpdF96ZXJvcygwLikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRfemVyb3MoY29tcGxleCgxLiwgLTAuKS5pbWFnKSwgc3BsaXRfemVyb3MoLTAuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdF96ZXJvcyhjb21wbGV4KDAuLCAxLikucmVhbCksIHNwbGl0X3plcm9zKDAuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdF96ZXJvcyhjb21wbGV4KC0wLiwgMS4pLnJlYWwpLCBzcGxpdF96ZXJvcygtMC4pKQorCisgICAgICAgIGMgPSAzLjE0ICsgMWoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBsZXgoYykgaXMgYykKKyAgICAgICAgZGVsIGMKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsICIxIiwgIjEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIDEsICIxIikKKworICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KHVuaWNvZGUoIiAgMy4xNCtKICAiKSksIDMuMTQrMWopCisKKyAgICAgICAgIyBTRiBidWcgNTQzODQwOiAgY29tcGxleChzdHJpbmcpIGFjY2VwdHMgc3RyaW5ncyB3aXRoIFwwCisgICAgICAgICMgRml4ZWQgaW4gMi4zLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAnMSsxalwwaicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIDUrM2opCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbG9uZywgNSszaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbG9hdCwgNSszaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIlwwIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjNcMDkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsICIxIiwgIjIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsICIxIiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgMSwgIjIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMSsiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMSsxaisxaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICItLSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIoMSsyaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxKzJqKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxKygyaikiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiKDErMmopMTIzIikKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsIHVuaWNvZGUoIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjFqKzIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMWUxZWoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMWUrKzFlaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIpMSsyaigiKQorICAgICAgICAjIHRoZSBmb2xsb3dpbmcgdGhyZWUgYXJlIGFjY2VwdGVkIGJ5IFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjEuLjFqIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjEuMTEuMWoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMWUxLjFqIikKKworICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgIyBjaGVjayB0aGF0IGNvbXBsZXggYWNjZXB0cyBsb25nIHVuaWNvZGUgc3RyaW5ncworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGNvbXBsZXgodW5pY29kZSgiMSIqNTAwKSkpLCBjb21wbGV4KQorCisgICAgICAgIGNsYXNzIEV2aWxFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBldmlsY29tcGxleDoKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBFdmlsRXhjCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXZpbEV4YywgY29tcGxleCwgZXZpbGNvbXBsZXgoKSkKKworICAgICAgICBjbGFzcyBmbG9hdDI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleChmbG9hdDIoNDIuKSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgocmVhbD1mbG9hdDIoMTcuKSwgaW1hZz1mbG9hdDIoMjMuKSksIDE3KzIzaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBmbG9hdDIoTm9uZSkpCisKKyAgICAgICAgY2xhc3MgY29tcGxleDAoY29tcGxleCk6CisgICAgICAgICAgICAiIiJUZXN0IHVzYWdlIG9mIF9fY29tcGxleF9fKCkgd2hlbiBpbmhlcml0aW5nIGZyb20gJ2NvbXBsZXgnIiIiCisgICAgICAgICAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyagorCisgICAgICAgIGNsYXNzIGNvbXBsZXgxKGNvbXBsZXgpOgorICAgICAgICAgICAgIiIiVGVzdCB1c2FnZSBvZiBfX2NvbXBsZXhfXygpIHdpdGggYSBfX25ld19fKCkgbWV0aG9kIiIiCisgICAgICAgICAgICBkZWYgX19uZXdfXyhzZWxmLCB2YWx1ZT0waik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXguX19uZXdfXyhzZWxmLCAyKnZhbHVlKQorICAgICAgICAgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgY2xhc3MgY29tcGxleDIoY29tcGxleCk6CisgICAgICAgICAgICAiIiJNYWtlIHN1cmUgdGhhdCBfX2NvbXBsZXhfXygpIGNhbGxzIGZhaWwgaWYgYW55dGhpbmcgb3RoZXIgdGhhbiBhCisgICAgICAgICAgICBjb21wbGV4IGlzIHJldHVybmVkIiIiCisgICAgICAgICAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoY29tcGxleDAoMWopKSwgNDJqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoY29tcGxleDEoMWopKSwgMmopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgY29tcGxleDIoMWopKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIHhjb21wbGV4KGNvbXBsZXgpOgorICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KGNvbXBsZXgoc2VsZikgKyBvdGhlcikKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgICAgICAgICBkZWYgX19zdWJfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSArIG90aGVyKQorICAgICAgICAgICAgX19yc3ViX18gPSBfX3N1Yl9fCisKKyAgICAgICAgICAgIGRlZiBfX211bF9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChjb21wbGV4KHNlbGYpICogb3RoZXIpCisgICAgICAgICAgICBfX3JtdWxfXyA9IF9fbXVsX18KKworICAgICAgICAgICAgZGVmIF9fZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KGNvbXBsZXgoc2VsZikgLyBvdGhlcikKKworICAgICAgICAgICAgZGVmIF9fcmRpdl9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChvdGhlciAvIGNvbXBsZXgoc2VsZikpCisKKyAgICAgICAgICAgIF9fdHJ1ZWRpdl9fID0gX19kaXZfXworICAgICAgICAgICAgX19ydHJ1ZWRpdl9fID0gX19yZGl2X18KKworICAgICAgICAgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSAvLyBvdGhlcikKKworICAgICAgICAgICAgZGVmIF9fcmZsb29yZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KG90aGVyIC8vIGNvbXBsZXgoc2VsZikpCisKKyAgICAgICAgICAgIGRlZiBfX3Bvd19fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChjb21wbGV4KHNlbGYpICoqIG90aGVyKQorCisgICAgICAgICAgICBkZWYgX19ycG93X18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KG90aGVyICoqIGNvbXBsZXgoc2VsZikgKQorCisgICAgICAgICAgICBkZWYgX19tb2RfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSAlIG90aGVyKQorCisgICAgICAgICAgICBkZWYgX19ybW9kX18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KG90aGVyICUgY29tcGxleChzZWxmKSkKKworICAgICAgICBpbmZpeF9iaW5vcHMgPSAoJysnLCAnLScsICcqJywgJyoqJywgJyUnLCAnLy8nLCAnLycpCisgICAgICAgIHhjb21wbGV4X3ZhbHVlcyA9ICh4Y29tcGxleCgxKSwgeGNvbXBsZXgoMTIzLjApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNvbXBsZXgoLTEwKzJqKSwgeGNvbXBsZXgoMysxODdqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjb21wbGV4KDMtNzhqKSkKKyAgICAgICAgdGVzdF92YWx1ZXMgPSAoMSwgMTIzLjAsIDEwLTE5aiwgeGNvbXBsZXgoMSsyaiksCisgICAgICAgICAgICAgICAgICAgICAgIHhjb21wbGV4KDErODdqKSwgeGNvbXBsZXgoMTArOTBqKSkKKworICAgICAgICBmb3Igb3AgaW4gaW5maXhfYmlub3BzOgorICAgICAgICAgICAgZm9yIHggaW4geGNvbXBsZXhfdmFsdWVzOgorICAgICAgICAgICAgICAgIGZvciB5IGluIHRlc3RfdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICBhID0gJ3ggJXMgeScgJSBvcAorICAgICAgICAgICAgICAgICAgICBiID0gJ3kgJXMgeCcgJSBvcAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShldmFsKGEpKSBpcyB0eXBlKGV2YWwoYikpIGlzIHhjb21wbGV4KQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgZm9yIHggaW4geHJhbmdlKC0zMCwgMzApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHgpLCBoYXNoKGNvbXBsZXgoeCwgMCkpKQorICAgICAgICAgICAgeCAvPSAzLjAgICAgIyBub3cgY2hlY2sgYWdhaW5zdCBmbG9hdGluZyBwb2ludAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHgpLCBoYXNoKGNvbXBsZXgoeCwgMC4pKSkKKworICAgIGRlZiB0ZXN0X2FicyhzZWxmKToKKyAgICAgICAgbnVtcyA9IFtjb21wbGV4KHgvMy4sIHkvNy4pIGZvciB4IGluIHhyYW5nZSgtOSw5KSBmb3IgeSBpbiB4cmFuZ2UoLTksOSldCisgICAgICAgIGZvciBudW0gaW4gbnVtczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoKG51bS5yZWFsKioyICsgbnVtLmltYWcqKjIpICAqKiAwLjUsIGFicyhudW0pKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKDErNmopLCAnKDErNmopJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKDEtNmopLCAnKDEtNmopJykKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlcHIoLSgxKzBqKSksICcoLTErLTBqKScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLTZqLGNvbXBsZXgocmVwcigxLTZqKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSs2aixjb21wbGV4KHJlcHIoMSs2aikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC02aixjb21wbGV4KHJlcHIoLTZqKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNmosY29tcGxleChyZXByKDZqKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMS4sIElORikpLCAiKDEraW5maikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgxLiwgLUlORikpLCAiKDEtaW5maikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleChJTkYsIDEpKSwgIihpbmYrMWopIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoLUlORiwgSU5GKSksICIoLWluZitpbmZqKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KE5BTiwgMSkpLCAiKG5hbisxaikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgxLCBOQU4pKSwgIigxK25hbmopIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoTkFOLCBOQU4pKSwgIihuYW4rbmFuaikiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDAsIElORikpLCAiaW5maiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDAsIC1JTkYpKSwgIi1pbmZqIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgTkFOKSksICJuYW5qIikKKworICAgIGRlZiB0ZXN0X25lZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDErNmopLCAtMS02aikKKworICAgIGRlZiB0ZXN0X2ZpbGUoc2VsZik6CisgICAgICAgIGEgPSAzLjMzKzQuNDNqCisgICAgICAgIGIgPSA1LjErMi4zagorCisgICAgICAgIGZvID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgICAgIHByaW50ID4+Zm8sIGEsIGIKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIGZvID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkKCksICIlcyAlc1xuIiAlIChhLCBiKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIChmbyBpcyBub3QgTm9uZSkgYW5kIChub3QgZm8uY2xvc2VkKToKKyAgICAgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9nZXRuZXdhcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxKzJqKS5fX2dldG5ld2FyZ3NfXygpLCAoMS4wLCAyLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLTJqKS5fX2dldG5ld2FyZ3NfXygpLCAoMS4wLCAtMi4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMmopLl9fZ2V0bmV3YXJnc19fKCksICgwLjAsIDIuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0waikuX19nZXRuZXdhcmdzX18oKSwgKDAuMCwgLTAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgwLCBJTkYpLl9fZ2V0bmV3YXJnc19fKCksICgwLjAsIElORikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleChJTkYsIDApLl9fZ2V0bmV3YXJnc19fKCksIChJTkYsIDAuMCkpCisKKyAgICBpZiBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6CisgICAgICAgIGRlZiB0ZXN0X3BsdXNfbWludXNfMGooc2VsZik6CisgICAgICAgICAgICAjIHRlc3QgdGhhdCAtMGogYW5kIDBqIGxpdGVyYWxzIGFyZSBub3QgaWRlbnRpZmllZAorICAgICAgICAgICAgejEsIHoyID0gMGosIC0wagorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdGFuMih6MS5pbWFnLCAtMS4pLCBhdGFuMigwLiwgLTEuKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRhbjIoejIuaW1hZywgLTEuKSwgYXRhbjIoLTAuLCAtMS4pKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgoIjFlNTAwIiksIGNvbXBsZXgoSU5GLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgoIi0xZTUwMGoiKSwgY29tcGxleCgwLjAsIC1JTkYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgoIi0xZTUwMCsxLjhlMzA4aiIpLCBjb21wbGV4KC1JTkYsIElORikpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisgICAgZGVmIHRlc3RfcmVwcl9yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIHZhbHMgPSBbMC4wLCAxZS01MDAsIDFlLTMxNSwgMWUtMjAwLCAwLjAxMjMsIDMuMTQxNSwgMWU1MCwgSU5GLCBOQU5dCisgICAgICAgIHZhbHMgKz0gWy12IGZvciB2IGluIHZhbHNdCisKKyAgICAgICAgIyBjb21wbGV4KHJlcHIoeikpIHNob3VsZCByZWNvdmVyIHogZXhhY3RseSwgZXZlbiBmb3IgY29tcGxleAorICAgICAgICAjIG51bWJlcnMgaW52b2x2aW5nIGFuIGluZmluaXR5LCBuYW4sIG9yIG5lZ2F0aXZlIHplcm8KKyAgICAgICAgZm9yIHggaW4gdmFsczoKKyAgICAgICAgICAgIGZvciB5IGluIHZhbHM6CisgICAgICAgICAgICAgICAgeiA9IGNvbXBsZXgoeCwgeSkKKyAgICAgICAgICAgICAgICByb3VuZHRyaXAgPSBjb21wbGV4KHJlcHIoeikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGbG9hdHNBcmVJZGVudGljYWwoei5yZWFsLCByb3VuZHRyaXAucmVhbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZsb2F0c0FyZUlkZW50aWNhbCh6LmltYWcsIHJvdW5kdHJpcC5pbWFnKQorCisgICAgICAgICMgaWYgd2UgcHJlZGVmaW5lIHNvbWUgY29uc3RhbnRzLCB0aGVuIGV2YWwocmVwcih6KSkgc2hvdWxkCisgICAgICAgICMgYWxzbyB3b3JrLCBleGNlcHQgdGhhdCBpdCBtaWdodCBjaGFuZ2UgdGhlIHNpZ24gb2YgemVyb3MKKyAgICAgICAgaW5mLCBuYW4gPSBmbG9hdCgnaW5mJyksIGZsb2F0KCduYW4nKQorICAgICAgICBpbmZqLCBuYW5qID0gY29tcGxleCgwLjAsIGluZiksIGNvbXBsZXgoMC4wLCBuYW4pCisgICAgICAgIGZvciB4IGluIHZhbHM6CisgICAgICAgICAgICBmb3IgeSBpbiB2YWxzOgorICAgICAgICAgICAgICAgIHogPSBjb21wbGV4KHgsIHkpCisgICAgICAgICAgICAgICAgcm91bmR0cmlwID0gZXZhbChyZXByKHopKQorICAgICAgICAgICAgICAgICMgYWRkaW5nIDAuMCBoYXMgbm8gZWZmZWN0IGJlc2lkZSBjaGFuZ2luZyAtMC4wIHRvIDAuMAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKDAuMCArIHoucmVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAgKyByb3VuZHRyaXAucmVhbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZsb2F0c0FyZUlkZW50aWNhbCgwLjAgKyB6LmltYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wICsgcm91bmR0cmlwLmltYWcpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgICMgZW1wdHkgZm9ybWF0IHN0cmluZyBpcyBzYW1lIGFzIHN0cigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDErM2osICcnKSwgc3RyKDErM2opKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrMy41aiwgJycpLCBzdHIoMS41KzMuNWopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgzaiwgJycpLCBzdHIoM2opKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgzLjJqLCAnJyksIHN0cigzLjJqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMyswaiwgJycpLCBzdHIoMyswaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDMuMiswaiwgJycpLCBzdHIoMy4yKzBqKSkKKworICAgICAgICAjIGVtcHR5IHByZXNlbnRhdGlvbiB0eXBlIHNob3VsZCBzdGlsbCBiZSBhbmFsb2dvdXMgdG8gc3RyLAorICAgICAgICAjIGV2ZW4gd2hlbiBmb3JtYXQgc3RyaW5nIGlzIG5vbmVtcHR5IChpc3N1ZSAjNTkyMCkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDMuMiswaiwgJy0nKSwgc3RyKDMuMiswaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDMuMiswaiwgJzwnKSwgc3RyKDMuMiswaikpCisgICAgICAgIHogPSA0LzcuIC0gMTAwai83LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnJyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJy0nKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnPCcpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICcxMCcpLCBzdHIoeikpCisgICAgICAgIHogPSBjb21wbGV4KDAuMCwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnJyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJy0nKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnPCcpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICcyJyksIHN0cih6KSkKKyAgICAgICAgeiA9IGNvbXBsZXgoLTAuMCwgMi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnJyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJy0nKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnPCcpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICczJyksIHN0cih6KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxKzNqLCAnZycpLCAnMSszaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDNqLCAnZycpLCAnMCszaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszLjVqLCAnZycpLCAnMS41KzMuNWonKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszLjVqLCAnK2cnKSwgJysxLjUrMy41aicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNS0zLjVqLCAnK2cnKSwgJysxLjUtMy41aicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNS0zLjVqLCAnLWcnKSwgJzEuNS0zLjVqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzMuNWosICcgZycpLCAnIDEuNSszLjVqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41LTMuNWosICcgZycpLCAnIDEuNS0zLjVqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNSszLjVqLCAnIGcnKSwgJy0xLjUrMy41aicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41aiwgJyBnJyksICctMS41LTMuNWonKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41ZS0yMGosICdnJyksICctMS41LTMuNWUtMjBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVqLCAnZicpLCAnLTEuNTAwMDAwLTMuNTAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41aiwgJ0YnKSwgJy0xLjUwMDAwMC0zLjUwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41LTMuNWosICdlJyksICctMS41MDAwMDBlKzAwLTMuNTAwMDAwZSswMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41LTMuNWosICcuMmUnKSwgJy0xLjUwZSswMC0zLjUwZSswMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41LTMuNWosICcuMkUnKSwgJy0xLjUwRSswMC0zLjUwRSswMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41ZTEwLTMuNWU1aiwgJy4yRycpLCAnLTEuNUUrMTAtMy41RSswNWonKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJzwyMGcnKSwgICcxLjUrM2ogICAgICAgICAgICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJyo8MjBnJyksICcxLjUrM2oqKioqKioqKioqKioqKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJz4yMGcnKSwgICcgICAgICAgICAgICAgIDEuNSszaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJ14yMGcnKSwgICcgICAgICAgMS41KzNqICAgICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJzwyMCcpLCAgICcoMS41KzNqKSAgICAgICAgICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJz4yMCcpLCAgICcgICAgICAgICAgICAoMS41KzNqKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJ14yMCcpLCAgICcgICAgICAoMS41KzNqKSAgICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuMTIzLTMuMTIzaiwgJ14yMC4yJyksICcgICAgICgxLjEtMy4xaikgICAgICcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnMjAuMmYnKSwgJyAgICAgICAgICAxLjUwKzMuMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPjIwLjJmJyksICcgICAgICAgICAgMS41MCszLjAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszaiwgJzwyMC4yZicpLCAnMS41MCszLjAwaiAgICAgICAgICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjVlMjArM2osICc8MjAuMmYnKSwgJzE1MDAwMDAwMDAwMDAwMDAwMDAwMC4wMCszLjAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNWUyMCszaiwgJz40MC4yZicpLCAnICAgICAgICAgIDE1MDAwMDAwMDAwMDAwMDAwMDAwMC4wMCszLjAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNWUyMCszaiwgJ140MCwuMmYnKSwgJyAgMTUwLDAwMCwwMDAsMDAwLDAwMCwwMDAsMDAwLjAwKzMuMDBqICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjVlMjErM2osICdeNDAsLjJmJyksICcgMSw1MDAsMDAwLDAwMCwwMDAsMDAwLDAwMCwwMDAuMDArMy4wMGogJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41ZTIxKzMwMDBqLCAnLC4yZicpLCAnMSw1MDAsMDAwLDAwMCwwMDAsMDAwLDAwMCwwMDAuMDArMywwMDAuMDBqJykKKworICAgICAgICAjIGFsdGVybmF0ZSBpcyBpbnZhbGlkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgxLjUrMC41aikuX19mb3JtYXRfXywgJyNmJykKKworICAgICAgICAjIHplcm8gcGFkZGluZyBpcyBpbnZhbGlkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgxLjUrMC41aikuX19mb3JtYXRfXywgJzAxMGYnKQorCisgICAgICAgICMgJz0nIGFsaWdubWVudCBpcyBpbnZhbGlkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgxLjUrM2opLl9fZm9ybWF0X18sICc9MjAnKQorCisgICAgICAgICMgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlIGFuIGVycm9yCisgICAgICAgIGZvciB0IGluICdiY2RveFgnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKDEuNSswLjVqKS5fX2Zvcm1hdF9fLCB0KQorCisgICAgICAgICMgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgd29ya3MgaW4gJycuZm9ybWF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnKnswOi4zZn0qJy5mb3JtYXQoMy4xNDE1OSsyLjcxODI4aiksICcqMy4xNDIrMi43MThqKicpCisKKyAgICAgICAgIyBpc3N1ZSAzMzgyOiAnZicgYW5kICdGJyB3aXRoIGluZidzIGFuZCBuYW4ncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KElORiswaiksICdpbmYrMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChJTkYrMGopLCAnSU5GKzAuMDAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoLUlORiswaiksICctaW5mKzAuMDAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoLUlORiswaiksICctSU5GKzAuMDAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoY29tcGxleChJTkYsIElORikpLCAnaW5mK2luZmonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KGNvbXBsZXgoSU5GLCBJTkYpKSwgJ0lORitJTkZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KElORiwgLUlORikpLCAnaW5mLWluZmonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KGNvbXBsZXgoSU5GLCAtSU5GKSksICdJTkYtSU5GaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoY29tcGxleCgtSU5GLCBJTkYpKSwgJy1pbmYraW5maicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleCgtSU5GLCBJTkYpKSwgJy1JTkYrSU5GaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoY29tcGxleCgtSU5GLCAtSU5GKSksICctaW5mLWluZmonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KGNvbXBsZXgoLUlORiwgLUlORikpLCAnLUlORi1JTkZqJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KGNvbXBsZXgoTkFOLCAwKSksICduYW4rMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChjb21wbGV4KE5BTiwgMCkpLCAnTkFOKzAuMDAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoY29tcGxleChOQU4sIE5BTikpLCAnbmFuK25hbmonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KGNvbXBsZXgoTkFOLCBOQU4pKSwgJ05BTitOQU5qJykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiY29tcGxleCBkaXZtb2QuLiwgLy8gYW5kICUgYXJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb21wbGV4VGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tcGxleF9hcmdzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29tcGxleF9hcmdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNmNiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb21wbGV4X2FyZ3MucHkKQEAgLTAsMCArMSwxMTggQEAKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHRleHR3cmFwCisKK2NsYXNzIENvbXBsZXhBcmdzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrKHNlbGYsIGZ1bmMsIGV4cGVjdGVkLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygqYXJncyksIGV4cGVjdGVkKQorCisgICAgIyBUaGVzZSBmdW5jdGlvbnMgYXJlIHRlc3RlZCBiZWxvdyBhcyBsYW1iZGFzIHRvby4gIElmIHlvdSBhZGQgYQorICAgICMgZnVuY3Rpb24gdGVzdCwgYWxzbyBhZGQgYSBzaW1pbGFyIGxhbWJkYSB0ZXN0LgorCisgICAgIyBGdW5jdGlvbnMgYXJlIHdyYXBwZWQgaW4gImV4ZWMiIHN0YXRlbWVudHMgaW4gb3JkZXIgdG8KKyAgICAjIHNpbGVuY2UgUHkzayB3YXJuaW5ncy4KKworICAgIGRlZiB0ZXN0X2Z1bmNfcGFyZW5zX25vX3VucGFja2luZyhzZWxmKToKKyAgICAgICAgZXhlYyB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgIGRlZiBmKCgoKCh4KSkpKSk6IHJldHVybiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMSwgMSkKKyAgICAgICAgIyBJbm5lciBwYXJlbnMgYXJlIGVsaWRlZCwgc2FtZSBhczogZih4LCkKKyAgICAgICAgZGVmIGYoKCh4KSksKTogcmV0dXJuIHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAyLCAyKQorICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9mdW5jXzEoc2VsZik6CisgICAgICAgIGV4ZWMgdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICBkZWYgZigoKCgoeCksKSkpKTogcmV0dXJuIHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAzLCAoMywpKQorICAgICAgICBkZWYgZigoKCgoeCkpLCkpKTogcmV0dXJuIHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCA0LCAoNCwpKQorICAgICAgICBkZWYgZigoKCgoeCkpKSwpKTogcmV0dXJuIHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCA1LCAoNSwpKQorICAgICAgICBkZWYgZigoKHgpLCkpOiByZXR1cm4geAorICAgICAgICBzZWxmLmNoZWNrKGYsIDYsICg2LCkpCisgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Z1bmNfMihzZWxmKToKKyAgICAgICAgZXhlYyB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgIGRlZiBmKCgoKCh4KSksKSwpKTogcmV0dXJuIHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAyLCAoKDIsKSwpKQorICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9mdW5jXzMoc2VsZik6CisgICAgICAgIGV4ZWMgdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICBkZWYgZigoKCgoKHgpKSwpLCksKSk6IHJldHVybiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMywgKCgoMywpLCksKSkKKyAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZnVuY19jb21wbGV4KHNlbGYpOgorICAgICAgICBleGVjIHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgZGVmIGYoKCgoKCh4KSksKSwpLCksIGEsIGIsIGMpOiByZXR1cm4geCwgYSwgYiwgYworICAgICAgICBzZWxmLmNoZWNrKGYsICgzLCA5LCA4LCA3KSwgKCgoMywpLCksKSwgOSwgOCwgNykKKworICAgICAgICBkZWYgZigoKCgoKCh4KSksKSksKSwpLCBhLCBiLCBjKTogcmV0dXJuIHgsIGEsIGIsIGMKKyAgICAgICAgc2VsZi5jaGVjayhmLCAoMywgOSwgOCwgNyksICgoKDMsKSwpLCksIDksIDgsIDcpCisKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgKCgoKCgoeCkpLCkpLCksKSk6IHJldHVybiBhLCBiLCBjLCB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgKDksIDgsIDcsIDMpLCA5LCA4LCA3LCAoKCgzLCksKSwpKQorICAgICAgICAiIiIpCisKKyAgICAjIER1cGxpY2F0ZSB0aGUgdGVzdHMgYWJvdmUsIGJ1dCBmb3IgbGFtYmRhLiAgSWYgeW91IGFkZCBhIGxhbWJkYSB0ZXN0LAorICAgICMgYWxzbyBhZGQgYSBzaW1pbGFyIGZ1bmN0aW9uIHRlc3QgYWJvdmUuCisKKyAgICBkZWYgdGVzdF9sYW1iZGFfcGFyZW5zX25vX3VucGFja2luZyhzZWxmKToKKyAgICAgICAgZXhlYyB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgIGYgPSBsYW1iZGEgKCgoKCh4KSkpKSk6IHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAxLCAxKQorICAgICAgICAjIElubmVyIHBhcmVucyBhcmUgZWxpZGVkLCBzYW1lIGFzOiBmKHgsKQorICAgICAgICBmID0gbGFtYmRhICgoeCkpLDogeAorICAgICAgICBzZWxmLmNoZWNrKGYsIDIsIDIpCisgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2xhbWJkYV8xKHNlbGYpOgorICAgICAgICBleGVjIHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgZiA9IGxhbWJkYSAoKCgoKHgpLCkpKSk6IHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAzLCAoMywpKQorICAgICAgICBmID0gbGFtYmRhICgoKCgoeCkpLCkpKTogeAorICAgICAgICBzZWxmLmNoZWNrKGYsIDQsICg0LCkpCisgICAgICAgIGYgPSBsYW1iZGEgKCgoKCh4KSkpLCkpOiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgNSwgKDUsKSkKKyAgICAgICAgZiA9IGxhbWJkYSAoKCh4KSwpKTogeAorICAgICAgICBzZWxmLmNoZWNrKGYsIDYsICg2LCkpCisgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2xhbWJkYV8yKHNlbGYpOgorICAgICAgICBleGVjIHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgZiA9IGxhbWJkYSAoKCgoKHgpKSwpLCkpOiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMiwgKCgyLCksKSkKKyAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfbGFtYmRhXzMoc2VsZik6CisgICAgICAgIGV4ZWMgdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICBmID0gbGFtYmRhICgoKCgoKHgpKSwpLCksKSk6IHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAzLCAoKCgzLCksKSwpKQorICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9sYW1iZGFfY29tcGxleChzZWxmKToKKyAgICAgICAgZXhlYyB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgIGYgPSBsYW1iZGEgKCgoKCh4KSksKSwpLCksIGEsIGIsIGM6ICh4LCBhLCBiLCBjKQorICAgICAgICBzZWxmLmNoZWNrKGYsICgzLCA5LCA4LCA3KSwgKCgoMywpLCksKSwgOSwgOCwgNykKKworICAgICAgICBmID0gbGFtYmRhICgoKCgoKHgpKSwpKSwpLCksIGEsIGIsIGM6ICh4LCBhLCBiLCBjKQorICAgICAgICBzZWxmLmNoZWNrKGYsICgzLCA5LCA4LCA3KSwgKCgoMywpLCksKSwgOSwgOCwgNykKKworICAgICAgICBmID0gbGFtYmRhIGEsIGIsIGMsICgoKCgoKHgpKSwpKSwpLCk6IChhLCBiLCBjLCB4KQorICAgICAgICBzZWxmLmNoZWNrKGYsICg5LCA4LCA3LCAzKSwgOSwgOCwgNywgKCgoMywpLCksKSkKKyAgICAgICAgIiIiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCJ0dXBsZSBwYXJhbWV0ZXIgdW5wYWNraW5nIGhhcyBiZWVuIHJlbW92ZWQiLCBTeW50YXhXYXJuaW5nKSwKKyAgICAgICAgICAgICgicGFyZW50aGVzaXplZCBhcmd1bWVudCBuYW1lcyBhcmUgaW52YWxpZCIsIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb21wbGV4QXJnc1Rlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb250YWlucy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvbnRhaW5zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzgwODEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb250YWlucy5weQpAQCAtMCwwICsxLDExMSBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgaGF2ZV91bmljb2RlLCBydW5fdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIGJhc2Vfc2V0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbCk6CisgICAgICAgIHNlbGYuZWwgPSBlbAorCitjbGFzcyBzZXQoYmFzZV9zZXQpOgorICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgZWwpOgorICAgICAgICByZXR1cm4gc2VsZi5lbCA9PSBlbAorCitjbGFzcyBzZXEoYmFzZV9zZXQpOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLmVsXVtuXQorCisKK2NsYXNzIFRlc3RDb250YWlucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29tbW9uX3Rlc3RzKHNlbGYpOgorICAgICAgICBhID0gYmFzZV9zZXQoMSkKKyAgICAgICAgYiA9IHNldCgxKQorICAgICAgICBjID0gc2VxKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigwLCBiKQorICAgICAgICBzZWxmLmFzc2VydEluKDEsIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMCwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IDEgaW4gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IDEgbm90IGluIGEpCisKKyAgICAgICAgIyB0ZXN0IGNoYXIgaW4gc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2MnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZCcsICdhYmMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEluKCcnLCAnYWJjJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogTm9uZSBpbiAnYWJjJykKKworICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgZGVmIHRlc3RfY2hhcl9pbl91bmljb2RlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYycsIHVuaWNvZGUoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZCcsIHVuaWNvZGUoJ2FiYycpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCcnLCB1bmljb2RlKCcnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnJyksICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih1bmljb2RlKCcnKSwgdW5pY29kZSgnJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCcnLCB1bmljb2RlKCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnJyksICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih1bmljb2RlKCcnKSwgdW5pY29kZSgnYWJjJykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBOb25lIGluIHVuaWNvZGUoJ2FiYycpKQorCisgICAgICAgICAgICAjIHRlc3QgVW5pY29kZSBjaGFyIGluIFVuaWNvZGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnYycpLCB1bmljb2RlKCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odW5pY29kZSgnZCcpLCB1bmljb2RlKCdhYmMnKSkKKworICAgICAgICAgICAgIyB0ZXN0IFVuaWNvZGUgY2hhciBpbiBzdHJpbmcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnYycpLCAnYWJjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odW5pY29kZSgnZCcpLCAnYWJjJykKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5fc2VxdWVuY2VfdHlwZXMoc2VsZik6CisgICAgICAgICMgYSBjb2xsZWN0aW9uIG9mIHRlc3RzIG9uIGJ1aWx0aW4gc2VxdWVuY2UgdHlwZXMKKyAgICAgICAgYSA9IHJhbmdlKDEwKQorICAgICAgICBmb3IgaSBpbiBhOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDE2LCBhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGEsIGEpCisKKyAgICAgICAgYSA9IHR1cGxlKGEpCisgICAgICAgIGZvciBpIGluIGE6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTYsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgYSkKKworICAgICAgICBjbGFzcyBEZXZpYW50MToKKyAgICAgICAgICAgICIiIkJlaGF2ZXMgc3RyYW5nZWx5IHdoZW4gY29tcGFyZWQKKworICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29udGFpbnMgY29kZQorICAgICAgICAgICAgd29ya3Mgd2hlbiB0aGUgbGlzdCBpcyBtb2RpZmllZCBkdXJpbmcgdGhlIGNoZWNrLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBhTGlzdCA9IHJhbmdlKDE1KQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIG90aGVyID09IDEyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFMaXN0LnJlbW92ZSgxMikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hTGlzdC5yZW1vdmUoMTMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYUxpc3QucmVtb3ZlKDE0KQorICAgICAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihEZXZpYW50MSgpLCBEZXZpYW50MS5hTGlzdCkKKworICAgICAgICBjbGFzcyBEZXZpYW50MjoKKyAgICAgICAgICAgICIiIkJlaGF2ZXMgc3RyYW5nZWx5IHdoZW4gY29tcGFyZWQKKworICAgICAgICAgICAgVGhpcyBjbGFzcyByYWlzZXMgYW4gZXhjZXB0aW9uIGR1cmluZyBjb21wYXJpc29uLiAgVGhhdCBpbgorICAgICAgICAgICAgdHVybiBjYXVzZXMgdGhlIGNvbXBhcmlzb24gdG8gZmFpbCB3aXRoIGEgVHlwZUVycm9yLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgb3RoZXIgPT0gNDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiZ290Y2hhIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oRGV2aWFudDIoKSwgYSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RDb250YWlucykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4Yzk1ZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTAsMCArMSwzMjYgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIGNvbnRleHRsaWIucHksIGFuZCBvdGhlciBjb250ZXh0IG1hbmFnZXJzLiIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb250ZXh0bGliIGltcG9ydCAqICAjIFRlc3RzIF9fYWxsX18KK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworCitjbGFzcyBDb250ZXh0TWFuYWdlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX3BsYWluKHNlbGYpOgorICAgICAgICBzdGF0ZSA9IFtdCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgd29vaG9vKCk6CisgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoMSkKKyAgICAgICAgICAgIHlpZWxkIDQyCisgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoOTk5KQorICAgICAgICB3aXRoIHdvb2hvbygpIGFzIHg6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDQyKQorICAgICAgICAgICAgc3RhdGUuYXBwZW5kKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCA0MiwgOTk5XSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX2ZpbmFsbHkoc2VsZik6CisgICAgICAgIHN0YXRlID0gW10KKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiB3b29ob28oKToKKyAgICAgICAgICAgIHN0YXRlLmFwcGVuZCgxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIDQyCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZCg5OTkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCB3b29ob28oKSBhcyB4OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDQyKQorICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZCh4KQorICAgICAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzEsIDQyLCA5OTldKQorCisgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfbm9fcmVyYWlzZShzZWxmKToKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiB3aGVlKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBjdHggPSB3aGVlKCkKKyAgICAgICAgY3R4Ll9fZW50ZXJfXygpCisgICAgICAgICMgQ2FsbGluZyBfX2V4aXRfXyBzaG91bGQgbm90IHJlc3VsdCBpbiBhbiBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguX19leGl0X18oVHlwZUVycm9yLCBUeXBlRXJyb3IoImZvbyIpLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX3RyYXBfeWllbGRfYWZ0ZXJfdGhyb3coc2VsZik6CisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgd2hvbygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgY3R4ID0gd2hvbygpCisgICAgICAgIGN0eC5fX2VudGVyX18oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgY3R4Ll9fZXhpdF9fLCBUeXBlRXJyb3IsIFR5cGVFcnJvcigiZm9vIiksIE5vbmUKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZXhjZXB0KHNlbGYpOgorICAgICAgICBzdGF0ZSA9IFtdCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgd29vaG9vKCk6CisgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCA0MgorICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yLCBlOgorICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZChlLmFyZ3NbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzEsIDQyLCA5OTldKQorICAgICAgICB3aXRoIHdvb2hvbygpIGFzIHg6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDQyKQorICAgICAgICAgICAgc3RhdGUuYXBwZW5kKHgpCisgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcig5OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCA0MiwgOTk5XSkKKworICAgIGRlZiBfY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoc2VsZik6CisgICAgICAgIGRlZiBhdHRyaWJzKCoqa3cpOgorICAgICAgICAgICAgZGVmIGRlY29yYXRlKGZ1bmMpOgorICAgICAgICAgICAgICAgIGZvciBrLHYgaW4ga3cuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihmdW5jLGssdikKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuYworICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRlCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBAYXR0cmlicyhmb289J2JhcicpCisgICAgICAgIGRlZiBiYXooc3BhbSk6CisgICAgICAgICAgICAiIiJXaGVlISIiIgorICAgICAgICByZXR1cm4gYmF6CisKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKHNlbGYpOgorICAgICAgICBiYXogPSBzZWxmLl9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fbmFtZV9fLCdiYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5mb28sICdiYXInKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZG9jX2F0dHJpYihzZWxmKToKKyAgICAgICAgYmF6ID0gc2VsZi5fY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX2RvY19fLCAiV2hlZSEiKQorCitjbGFzcyBOZXN0ZWRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIFhYWCBUaGlzIG5lZWRzIG1vcmUgd29yaworCisgICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGEoKToKKyAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiBiKCk6CisgICAgICAgICAgICB5aWVsZCAyCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgYygpOgorICAgICAgICAgICAgeWllbGQgMworICAgICAgICB3aXRoIG5lc3RlZChhKCksIGIoKSwgYygpKSBhcyAoeCwgeSwgeik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHosIDMpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfY2xlYW51cChzZWxmKToKKyAgICAgICAgc3RhdGUgPSBbXQorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGEoKToKKyAgICAgICAgICAgIHN0YXRlLmFwcGVuZCgxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIDIKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDMpCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgYigpOgorICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgNQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoNikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICB3aXRoIG5lc3RlZChhKCksIGIoKSkgYXMgKHgsIHkpOgorICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZCh4KQorICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZCh5KQorICAgICAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMSwgNCwgMiwgNSwgNiwgM10pCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfcmlnaHRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGEoKToKKyAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgY2xhc3MgYihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMgorICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggbmVzdGVkKGEoKSwgYigpKSBhcyAoeCwgeSk6CisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHgsIHkpLCAoMSwgMikpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfYl9zd2FsbG93cyhzZWxmKToKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiBhKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGIoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgU3dhbGxvdyB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG5lc3RlZChhKCksIGIoKSk6CisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHN3YWxsb3cgWmVyb0RpdmlzaW9uRXJyb3IiKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2JyZWFrKHNlbGYpOgorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGEoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHN0YXRlID0gMAorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc3RhdGUgKz0gMQorICAgICAgICAgICAgd2l0aCBuZXN0ZWQoYSgpLCBhKCkpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzdGF0ZSArPSAxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCAxKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2NvbnRpbnVlKHNlbGYpOgorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGEoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHN0YXRlID0gMAorICAgICAgICB3aGlsZSBzdGF0ZSA8IDM6CisgICAgICAgICAgICBzdGF0ZSArPSAxCisgICAgICAgICAgICB3aXRoIG5lc3RlZChhKCksIGEoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHN0YXRlICs9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIDMpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfcmV0dXJuKHNlbGYpOgorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGEoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgd2l0aCBuZXN0ZWQoYSgpLCBhKCkpOgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICByZXR1cm4gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKSwgMSkKKworY2xhc3MgQ2xvc2luZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgWFhYIFRoaXMgbmVlZHMgbW9yZSB3b3JrCisKKyAgICBkZWYgdGVzdF9jbG9zaW5nKHNlbGYpOgorICAgICAgICBzdGF0ZSA9IFtdCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDEpCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgW10pCisgICAgICAgIHdpdGggY2xvc2luZyh4KSBhcyB5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMV0pCisKKyAgICBkZWYgdGVzdF9jbG9zaW5nX2Vycm9yKHNlbGYpOgorICAgICAgICBzdGF0ZSA9IFtdCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDEpCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgW10pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBjbG9zaW5nKHgpIGFzIHk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMV0pCisKK2NsYXNzIEZpbGVDb250ZXh0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RXaXRoT3BlbihzZWxmKToKKyAgICAgICAgdGZuID0gdGVtcGZpbGUubWt0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgICAgIHdpdGggb3Blbih0Zm4sICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIkJvb2hcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRmbiwgInIiKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiQm9vaFxuIikKKyAgICAgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRmbikKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIExvY2tDb250ZXh0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGJvaWxlclBsYXRlKHNlbGYsIGxvY2ssIGxvY2tlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9ja2VkKCkpCisgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrZWQoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2tlZCgpKQorICAgICAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RXaXRoTG9jayhzZWxmKToKKyAgICAgICAgbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5ib2lsZXJQbGF0ZShsb2NrLCBsb2NrLmxvY2tlZCkKKworICAgIGRlZiB0ZXN0V2l0aFJMb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gdGhyZWFkaW5nLlJMb2NrKCkKKyAgICAgICAgc2VsZi5ib2lsZXJQbGF0ZShsb2NrLCBsb2NrLl9pc19vd25lZCkKKworICAgIGRlZiB0ZXN0V2l0aENvbmRpdGlvbihzZWxmKToKKyAgICAgICAgbG9jayA9IHRocmVhZGluZy5Db25kaXRpb24oKQorICAgICAgICBkZWYgbG9ja2VkKCk6CisgICAgICAgICAgICByZXR1cm4gbG9jay5faXNfb3duZWQoKQorICAgICAgICBzZWxmLmJvaWxlclBsYXRlKGxvY2ssIGxvY2tlZCkKKworICAgIGRlZiB0ZXN0V2l0aFNlbWFwaG9yZShzZWxmKToKKyAgICAgICAgbG9jayA9IHRocmVhZGluZy5TZW1hcGhvcmUoKQorICAgICAgICBkZWYgbG9ja2VkKCk6CisgICAgICAgICAgICBpZiBsb2NrLmFjcXVpcmUoRmFsc2UpOgorICAgICAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHNlbGYuYm9pbGVyUGxhdGUobG9jaywgbG9ja2VkKQorCisgICAgZGVmIHRlc3RXaXRoQm91bmRlZFNlbWFwaG9yZShzZWxmKToKKyAgICAgICAgbG9jayA9IHRocmVhZGluZy5Cb3VuZGVkU2VtYXBob3JlKCkKKyAgICAgICAgZGVmIGxvY2tlZCgpOgorICAgICAgICAgICAgaWYgbG9jay5hY3F1aXJlKEZhbHNlKToKKyAgICAgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBzZWxmLmJvaWxlclBsYXRlKGxvY2ssIGxvY2tlZCkKKworIyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSB0ZXN0IGFjdHVhbGx5IHJ1biB1bmRlciByZWdydGVzdC5weSEKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoIldpdGgtc3RhdGVtZW50cyBub3cgZGlyZWN0bHkgc3VwcG9ydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTYxMzNlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29va2llLnB5CkBAIC0wLDAgKzEsOTkgQEAKKyMgU2ltcGxlIHRlc3Qgc3VpdGUgZm9yIENvb2tpZS5weQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJ1bl9kb2N0ZXN0LCBjaGVja193YXJuaW5ncworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgQ29va2llCisKKworY2xhc3MgQ29va2llVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgQ3VycmVudGx5IHRoaXMgb25seSB0ZXN0cyBTaW1wbGVDb29raWUKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgY2FzZXMgPSBbCisgICAgICAgICAgICB7ICdkYXRhJzogJ2NoaXBzPWFob3k7IHZpZW5uYT1maW5nZXInLAorICAgICAgICAgICAgICAnZGljdCc6IHsnY2hpcHMnOidhaG95JywgJ3ZpZW5uYSc6J2Zpbmdlcid9LAorICAgICAgICAgICAgICAncmVwcic6ICI8U2ltcGxlQ29va2llOiBjaGlwcz0nYWhveScgdmllbm5hPSdmaW5nZXInPiIsCisgICAgICAgICAgICAgICdvdXRwdXQnOiAnU2V0LUNvb2tpZTogY2hpcHM9YWhveVxuU2V0LUNvb2tpZTogdmllbm5hPWZpbmdlcicsCisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICB7ICdkYXRhJzogJ2tlZWJsZXI9IkU9bWMyOyBMPVxcIkxvdmVzXFwiOyBmdWRnZT1cXDAxMjsiJywKKyAgICAgICAgICAgICAgJ2RpY3QnOiB7J2tlZWJsZXInIDogJ0U9bWMyOyBMPSJMb3ZlcyI7IGZ1ZGdlPVwwMTI7J30sCisgICAgICAgICAgICAgICdyZXByJzogJycnPFNpbXBsZUNvb2tpZToga2VlYmxlcj0nRT1tYzI7IEw9IkxvdmVzIjsgZnVkZ2U9XFxuOyc+JycnLAorICAgICAgICAgICAgICAnb3V0cHV0JzogJ1NldC1Db29raWU6IGtlZWJsZXI9IkU9bWMyOyBMPVxcIkxvdmVzXFwiOyBmdWRnZT1cXDAxMjsiJywKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICMgQ2hlY2sgaWxsZWdhbCBjb29raWVzIHRoYXQgaGF2ZSBhbiAnPScgY2hhciBpbiBhbiB1bnF1b3RlZCB2YWx1ZQorICAgICAgICAgICAgeyAnZGF0YSc6ICdrZWVibGVyPUU9bWMyJywKKyAgICAgICAgICAgICAgJ2RpY3QnOiB7J2tlZWJsZXInIDogJ0U9bWMyJ30sCisgICAgICAgICAgICAgICdyZXByJzogIjxTaW1wbGVDb29raWU6IGtlZWJsZXI9J0U9bWMyJz4iLAorICAgICAgICAgICAgICAnb3V0cHV0JzogJ1NldC1Db29raWU6IGtlZWJsZXI9RT1tYzInLAorICAgICAgICAgICAgfQorICAgICAgICBdCisKKyAgICAgICAgZm9yIGNhc2UgaW4gY2FzZXM6CisgICAgICAgICAgICBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCisgICAgICAgICAgICBDLmxvYWQoY2FzZVsnZGF0YSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKEMpLCBjYXNlWydyZXByJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMub3V0cHV0KHNlcD0nXG4nKSwgY2FzZVsnb3V0cHV0J10pCisgICAgICAgICAgICBmb3IgaywgdiBpbiBzb3J0ZWQoY2FzZVsnZGljdCddLml0ZXJpdGVtcygpKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENba10udmFsdWUsIHYpCisKKyAgICBkZWYgdGVzdF9sb2FkKHNlbGYpOgorICAgICAgICBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCisgICAgICAgIEMubG9hZCgnQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBWZXJzaW9uPTE7IFBhdGg9L2FjbWUnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXS52YWx1ZSwgJ1dJTEVfRV9DT1lPVEUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ3ZlcnNpb24nXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ3BhdGgnXSwgJy9hY21lJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMub3V0cHV0KFsncGF0aCddKSwKKyAgICAgICAgICAgICdTZXQtQ29va2llOiBDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFBhdGg9L2FjbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuanNfb3V0cHV0KCksIHIiIiIKKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICA8IS0tIGJlZ2luIGhpZGluZworICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiQ3VzdG9tZXI9XCJXSUxFX0VfQ09ZT1RFXCI7IFBhdGg9L2FjbWU7IFZlcnNpb249MSI7CisgICAgICAgIC8vIGVuZCBoaWRpbmcgLS0+CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5qc19vdXRwdXQoWydwYXRoJ10pLCByIiIiCisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgPCEtLSBiZWdpbiBoaWRpbmcKKyAgICAgICAgZG9jdW1lbnQuY29va2llID0gIkN1c3RvbWVyPVwiV0lMRV9FX0NPWU9URVwiOyBQYXRoPS9hY21lIjsKKyAgICAgICAgLy8gZW5kIGhpZGluZyAtLT4KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICIiIikKKworICAgICAgICAjIGxvYWRpbmcgJ2V4cGlyZXMnCisgICAgICAgIEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKKyAgICAgICAgQy5sb2FkKCdDdXN0b21lcj0iVyI7IGV4cGlyZXM9V2VkLCAwMSBKYW4gMjAxMCAwMDowMDowMCBHTVQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ2V4cGlyZXMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnV2VkLCAwMSBKYW4gMjAxMCAwMDowMDowMCBHTVQnKQorICAgICAgICBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCisgICAgICAgIEMubG9hZCgnQ3VzdG9tZXI9IlciOyBleHBpcmVzPVdlZCwgMDEgSmFuIDk4IDAwOjAwOjAwIEdNVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXVsnZXhwaXJlcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICdXZWQsIDAxIEphbiA5OCAwMDowMDowMCBHTVQnKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfZW5jb2RlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDk4MjQ6IHNvbWUgYnJvd3NlcnMgZG9uJ3QgZm9sbG93IHRoZSBzdGFuZGFyZDsgd2Ugbm93CisgICAgICAgICMgZW5jb2RlICwgYW5kIDsgdG8ga2VlcCB0aGVtIGZyb20gdHJpcHBpbmcgdXAuCisgICAgICAgIEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKKyAgICAgICAgQ1sndmFsJ10gPSAic29tZSxmdW5reTtzdHVmZiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm91dHB1dChbJ3ZhbCddKSwKKyAgICAgICAgICAgICdTZXQtQ29va2llOiB2YWw9InNvbWVcXDA1NGZ1bmt5XFwwNzNzdHVmZiInKQorCisgICAgZGVmIHRlc3RfcXVvdGVkX21ldGEoc2VsZik6CisgICAgICAgICMgVHJ5IGNvb2tpZSB3aXRoIHF1b3RlZCBtZXRhLWRhdGEKKyAgICAgICAgQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQorICAgICAgICBDLmxvYWQoJ0N1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXS52YWx1ZSwgJ1dJTEVfRV9DT1lPVEUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ3ZlcnNpb24nXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ3BhdGgnXSwgJy9hY21lJykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChDb29raWVUZXN0cykKKyAgICBpZiBDb29raWUuX19kb2NfXyBpcyBub3QgTm9uZToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJy4rQ29va2llIGNsYXNzIGlzIGluc2VjdXJlOyBkbyBub3QgdXNlIGl0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBydW5fZG9jdGVzdChDb29raWUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Nvb2tpZWxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Nvb2tpZWxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDBhZDMyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29va2llbGliLnB5CkBAIC0wLDAgKzEsMTc2MiBAQAorIyAtKi0gY29kaW5nOiBsYXRpbi0xIC0qLQorIiIiVGVzdHMgZm9yIGNvb2tpZWxpYi5weS4iIiIKKworaW1wb3J0IGNvb2tpZWxpYgoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCB0aW1lCisKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworY2xhc3MgRGF0ZVRpbWVUZXN0cyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90aW1lMmlzb3ooc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCB0aW1lMmlzb3oKKworICAgICAgICBiYXNlID0gMTAxOTIyNzAwMAorICAgICAgICBkYXkgPSAyNCozNjAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZTJpc296KGJhc2UpLCAiMjAwMi0wNC0xOSAxNDozNjo0MFoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUyaXNveihiYXNlK2RheSksICIyMDAyLTA0LTIwIDE0OjM2OjQwWiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZTJpc296KGJhc2UrMipkYXkpLCAiMjAwMi0wNC0yMSAxNDozNjo0MFoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUyaXNveihiYXNlKzMqZGF5KSwgIjIwMDItMDQtMjIgMTQ6MzY6NDBaIikKKworICAgICAgICBheiA9IHRpbWUyaXNveigpCisgICAgICAgIGJ6ID0gdGltZTJpc296KDUwMDAwMCkKKyAgICAgICAgZm9yIHRleHQgaW4gKGF6LCBieik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHIiXlxkezR9LVxkXGQtXGRcZCBcZFxkOlxkXGQ6XGRcZFokIiwgdGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCB0aW1lMmlzb3ogZm9ybWF0OiAlcyAlcyIgJSAoYXosIGJ6KSkKKworICAgIGRlZiB0ZXN0X2h0dHAydGltZShzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGh0dHAydGltZQorCisgICAgICAgIGRlZiBwYXJzZV9kYXRlKHRleHQpOgorICAgICAgICAgICAgcmV0dXJuIHRpbWUuZ210aW1lKGh0dHAydGltZSh0ZXh0KSlbOjZdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9kYXRlKCIwMSBKYW4gMjAwMSIpLCAoMjAwMSwgMSwgMSwgMCwgMCwgMC4wKSkKKworICAgICAgICAjIHRoaXMgdGVzdCB3aWxsIGJyZWFrIGFyb3VuZCB5ZWFyIDIwNzAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9kYXRlKCIwMy1GZWItMjAiKSwgKDIwMjAsIDIsIDMsIDAsIDAsIDAuMCkpCisKKyAgICAgICAgIyB0aGlzIHRlc3Qgd2lsbCBicmVhayBhcm91bmQgeWVhciAyMDQ4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfZGF0ZSgiMDMtRmViLTk4IiksICgxOTk4LCAyLCAzLCAwLCAwLCAwLjApKQorCisgICAgZGVmIHRlc3RfaHR0cDJ0aW1lX2Zvcm1hdHMoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBodHRwMnRpbWUsIHRpbWUyaXNvegorCisgICAgICAgICMgdGVzdCBodHRwMnRpbWUgZm9yIHN1cHBvcnRlZCBkYXRlcy4gIFRlc3QgY2FzZXMgd2l0aCAyIGRpZ2l0IHllYXIKKyAgICAgICAgIyB3aWxsIHByb2JhYmx5IGJyZWFrIGluIHllYXIgMjA0NC4KKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAnVGh1LCAwMyBGZWIgMTk5NCAwMDowMDowMCBHTVQnLCAgIyBwcm9wb3NlZCBuZXcgSFRUUCBmb3JtYXQKKyAgICAgICAgICdUaHVyc2RheSwgMDMtRmViLTk0IDAwOjAwOjAwIEdNVCcsICAjIG9sZCByZmM4NTAgSFRUUCBmb3JtYXQKKyAgICAgICAgICdUaHVyc2RheSwgMDMtRmViLTE5OTQgMDA6MDA6MDAgR01UJywgICMgYnJva2VuIHJmYzg1MCBIVFRQIGZvcm1hdAorCisgICAgICAgICAnMDMgRmViIDE5OTQgMDA6MDA6MDAgR01UJywgICMgSFRUUCBmb3JtYXQgKG5vIHdlZWtkYXkpCisgICAgICAgICAnMDMtRmViLTk0IDAwOjAwOjAwIEdNVCcsICAjIG9sZCByZmM4NTAgKG5vIHdlZWtkYXkpCisgICAgICAgICAnMDMtRmViLTE5OTQgMDA6MDA6MDAgR01UJywgICMgYnJva2VuIHJmYzg1MCAobm8gd2Vla2RheSkKKyAgICAgICAgICcwMy1GZWItMTk5NCAwMDowMCBHTVQnLCAgIyBicm9rZW4gcmZjODUwIChubyB3ZWVrZGF5LCBubyBzZWNvbmRzKQorICAgICAgICAgJzAzLUZlYi0xOTk0IDAwOjAwJywgICMgYnJva2VuIHJmYzg1MCAobm8gd2Vla2RheSwgbm8gc2Vjb25kcywgbm8gdHopCisKKyAgICAgICAgICcwMy1GZWItOTQnLCAgIyBvbGQgcmZjODUwIEhUVFAgZm9ybWF0IChubyB3ZWVrZGF5LCBubyB0aW1lKQorICAgICAgICAgJzAzLUZlYi0xOTk0JywgICMgYnJva2VuIHJmYzg1MCBIVFRQIGZvcm1hdCAobm8gd2Vla2RheSwgbm8gdGltZSkKKyAgICAgICAgICcwMyBGZWIgMTk5NCcsICAjIHByb3Bvc2VkIG5ldyBIVFRQIGZvcm1hdCAobm8gd2Vla2RheSwgbm8gdGltZSkKKworICAgICAgICAgIyBBIGZldyB0ZXN0cyB3aXRoIGV4dHJhIHNwYWNlIGF0IHZhcmlvdXMgcGxhY2VzCisgICAgICAgICAnICAwMyAgIEZlYiAgIDE5OTQgIDA6MDAgICcsCisgICAgICAgICAnICAwMy1GZWItMTk5NCAgJywKKyAgICAgICAgXQorCisgICAgICAgIHRlc3RfdCA9IDc2MDIzMzYwMCAgIyBhc3N1bWUgYnJva2VuIFBPU0lYIGNvdW50aW5nIG9mIHNlY29uZHMKKyAgICAgICAgcmVzdWx0ID0gdGltZTJpc296KHRlc3RfdCkKKyAgICAgICAgZXhwZWN0ZWQgPSAiMTk5NC0wMi0wMyAwMDowMDowMFoiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgID0+ICAnJXMnICglcykiICUgKHRlc3RfdCwgcmVzdWx0LCBleHBlY3RlZCkpCisKKyAgICAgICAgZm9yIHMgaW4gdGVzdHM6CisgICAgICAgICAgICB0ID0gaHR0cDJ0aW1lKHMpCisgICAgICAgICAgICB0MiA9IGh0dHAydGltZShzLmxvd2VyKCkpCisgICAgICAgICAgICB0MyA9IGh0dHAydGltZShzLnVwcGVyKCkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ID09IHQyID09IHQzID09IHRlc3RfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyAgPT4gICVzLCAlcywgJXMgKCVzKSIgJSAocywgdCwgdDIsIHQzLCB0ZXN0X3QpKQorCisgICAgZGVmIHRlc3RfaHR0cDJ0aW1lX2dhcmJhZ2Uoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBodHRwMnRpbWUKKworICAgICAgICBmb3IgdGVzdCBpbiBbCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICdHYXJiYWdlJywKKyAgICAgICAgICAgICdNYW5kYWcgMTYuIFNlcHRlbWJlciAxOTk2JywKKyAgICAgICAgICAgICcwMS0wMC0xOTgwJywKKyAgICAgICAgICAgICcwMS0xMy0xOTgwJywKKyAgICAgICAgICAgICcwMC0wMS0xOTgwJywKKyAgICAgICAgICAgICczMi0wMS0xOTgwJywKKyAgICAgICAgICAgICcwMS0wMS0xOTgwIDI1OjAwOjAwJywKKyAgICAgICAgICAgICcwMS0wMS0xOTgwIDAwOjYxOjAwJywKKyAgICAgICAgICAgICcwMS0wMS0xOTgwIDAwOjAwOjYyJywKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaHR0cDJ0aW1lKHRlc3QpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAydGltZSglcykgaXMgbm90IE5vbmVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDJ0aW1lKHRlc3QpICVzIiAlICh0ZXN0LCBodHRwMnRpbWUodGVzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisKK2NsYXNzIEhlYWRlclRlc3RzKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BhcnNlX25zX2hlYWRlcnNfZXhwaXJlcyhzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHBhcnNlX25zX2hlYWRlcnMKKworICAgICAgICAjIHF1b3RlcyBzaG91bGQgYmUgc3RyaXBwZWQKKyAgICAgICAgZXhwZWN0ZWQgPSBbWygnZm9vJywgJ2JhcicpLCAoJ2V4cGlyZXMnLCAyMjA5MDY5NDEyTCksICgndmVyc2lvbicsICcwJyldXQorICAgICAgICBmb3IgaGRyIGluIFsKKyAgICAgICAgICAgICdmb289YmFyOyBleHBpcmVzPTAxIEphbiAyMDQwIDIyOjIzOjMyIEdNVCcsCisgICAgICAgICAgICAnZm9vPWJhcjsgZXhwaXJlcz0iMDEgSmFuIDIwNDAgMjI6MjM6MzIgR01UIicsCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9uc19oZWFkZXJzKFtoZHJdKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9uc19oZWFkZXJzX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBwYXJzZV9uc19oZWFkZXJzCisKKyAgICAgICAgIyBxdW90ZXMgc2hvdWxkIGJlIHN0cmlwcGVkCisgICAgICAgIGV4cGVjdGVkID0gW1soJ2ZvbycsICdiYXInKSwgKCd2ZXJzaW9uJywgJzEnKV1dCisgICAgICAgIGZvciBoZHIgaW4gWworICAgICAgICAgICAgJ2Zvbz1iYXI7IHZlcnNpb249IjEiJywKKyAgICAgICAgICAgICdmb289YmFyOyBWZXJzaW9uPSIxIicsCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9uc19oZWFkZXJzKFtoZHJdKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9uc19oZWFkZXJzX3NwZWNpYWxfbmFtZXMoc2VsZik6CisgICAgICAgICMgbmFtZXMgc3VjaCBhcyAnZXhwaXJlcycgYXJlIG5vdCBzcGVjaWFsIGluIGZpcnN0IG5hbWU9dmFsdWUgcGFpcgorICAgICAgICAjIG9mIFNldC1Db29raWU6IGhlYWRlcgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgcGFyc2VfbnNfaGVhZGVycworCisgICAgICAgICMgQ29va2llIHdpdGggbmFtZSAnZXhwaXJlcycKKyAgICAgICAgaGRyID0gJ2V4cGlyZXM9MDEgSmFuIDIwNDAgMjI6MjM6MzIgR01UJworICAgICAgICBleHBlY3RlZCA9IFtbKCJleHBpcmVzIiwgIjAxIEphbiAyMDQwIDIyOjIzOjMyIEdNVCIpLCAoInZlcnNpb24iLCAiMCIpXV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9uc19oZWFkZXJzKFtoZHJdKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9qb2luX2hlYWRlcl93b3JkcyhzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGpvaW5faGVhZGVyX3dvcmRzCisKKyAgICAgICAgam9pbmVkID0gam9pbl9oZWFkZXJfd29yZHMoW1soImZvbyIsIE5vbmUpLCAoImJhciIsICJiYXoiKV1dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW5lZCwgImZvbzsgYmFyPWJheiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luX2hlYWRlcl93b3JkcyhbW11dKSwgIiIpCisKKyAgICBkZWYgdGVzdF9zcGxpdF9oZWFkZXJfd29yZHMoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBzcGxpdF9oZWFkZXJfd29yZHMKKworICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgICgiZm9vIiwgW1soImZvbyIsIE5vbmUpXV0pLAorICAgICAgICAgICAgKCJmb289YmFyIiwgW1soImZvbyIsICJiYXIiKV1dKSwKKyAgICAgICAgICAgICgiICAgZm9vICAgIiwgW1soImZvbyIsIE5vbmUpXV0pLAorICAgICAgICAgICAgKCIgICBmb289ICAgIiwgW1soImZvbyIsICIiKV1dKSwKKyAgICAgICAgICAgICgiICAgZm9vPSIsIFtbKCJmb28iLCAiIildXSksCisgICAgICAgICAgICAoIiAgIGZvbz0gICA7ICIsIFtbKCJmb28iLCAiIildXSksCisgICAgICAgICAgICAoIiAgIGZvbz0gICA7IGJhcj0gYmF6ICIsIFtbKCJmb28iLCAiIiksICgiYmFyIiwgImJheiIpXV0pLAorICAgICAgICAgICAgKCJmb289YmFyIGJhcj1iYXoiLCBbWygiZm9vIiwgImJhciIpLCAoImJhciIsICJiYXoiKV1dKSwKKyAgICAgICAgICAgICMgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIHRoaXMgbmV4dCBmYWlscywgYnV0IGl0IHdvcmtzIEFUTQorICAgICAgICAgICAgKCJmb289IGJhcj1iYXoiLCBbWygiZm9vIiwgImJhcj1iYXoiKV1dKSwKKyAgICAgICAgICAgICgiZm9vPWJhcjtiYXI9YmF6IiwgW1soImZvbyIsICJiYXIiKSwgKCJiYXIiLCAiYmF6IildXSksCisgICAgICAgICAgICAoJ2ZvbyBiYXIgYmF6JywgW1soImZvbyIsIE5vbmUpLCAoImJhciIsIE5vbmUpLCAoImJheiIsIE5vbmUpXV0pLAorICAgICAgICAgICAgKCJhLCBiLCBjIiwgW1soImEiLCBOb25lKV0sIFsoImIiLCBOb25lKV0sIFsoImMiLCBOb25lKV1dKSwKKyAgICAgICAgICAgIChyJ2ZvbzsgYmFyPWJheiwgc3BhbT0sIGZvbz0iXCxcO1wiIiwgYmFyPSAnLAorICAgICAgICAgICAgIFtbKCJmb28iLCBOb25lKSwgKCJiYXIiLCAiYmF6IildLAorICAgICAgICAgICAgICBbKCJzcGFtIiwgIiIpXSwgWygiZm9vIiwgJyw7IicpXSwgWygiYmFyIiwgIiIpXV0pLAorICAgICAgICAgICAgXQorCisgICAgICAgIGZvciBhcmcsIGV4cGVjdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGxpdF9oZWFkZXJfd29yZHMoW2FyZ10pCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaywgU3RyaW5nSU8KKyAgICAgICAgICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoTm9uZSwgZikKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAiKGVycm9yIC0tIHRyYWNlYmFjayBmb2xsb3dzKVxuXG4lcyIgJSBmLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAgZXhwZWN0LCAiIiIKK1doZW4gcGFyc2luZzogJyVzJworRXhwZWN0ZWQ6ICAgICAnJXMnCitHb3Q6ICAgICAgICAgICclcycKKyIiIiAlIChhcmcsIGV4cGVjdCwgcmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHNwbGl0X2hlYWRlcl93b3Jkcywgam9pbl9oZWFkZXJfd29yZHMKKworICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgICgiZm9vIiwgImZvbyIpLAorICAgICAgICAgICAgKCJmb289YmFyIiwgImZvbz1iYXIiKSwKKyAgICAgICAgICAgICgiICAgZm9vICAgIiwgImZvbyIpLAorICAgICAgICAgICAgKCJmb289IiwgJ2Zvbz0iIicpLAorICAgICAgICAgICAgKCJmb289YmFyIGJhcj1iYXoiLCAiZm9vPWJhcjsgYmFyPWJheiIpLAorICAgICAgICAgICAgKCJmb289YmFyO2Jhcj1iYXoiLCAiZm9vPWJhcjsgYmFyPWJheiIpLAorICAgICAgICAgICAgKCdmb28gYmFyIGJheicsICJmb287IGJhcjsgYmF6IiksCisgICAgICAgICAgICAocidmb289IlwiIiBiYXI9IlxcIicsIHInZm9vPSJcIiI7IGJhcj0iXFwiJyksCisgICAgICAgICAgICAoJ2ZvbywsLGJhcicsICdmb28sIGJhcicpLAorICAgICAgICAgICAgKCdmb289YmFyLGJhcj1iYXonLCAnZm9vPWJhciwgYmFyPWJheicpLAorCisgICAgICAgICAgICAoJ3RleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xJywKKyAgICAgICAgICAgICAndGV4dC9odG1sOyBjaGFyc2V0PSJpc28tODg1OS0xIicpLAorCisgICAgICAgICAgICAoJ2Zvbz0iYmFyIjsgcG9ydD0iODAsODEiOyBkaXNjYXJkLCBiYXI9YmF6JywKKyAgICAgICAgICAgICAnZm9vPWJhcjsgcG9ydD0iODAsODEiOyBkaXNjYXJkLCBiYXI9YmF6JyksCisKKyAgICAgICAgICAgIChyJ0Jhc2ljIHJlYWxtPSJcImZvb1xcXFxiYXJcIiInLAorICAgICAgICAgICAgIHInQmFzaWM7IHJlYWxtPSJcImZvb1xcXFxiYXJcIiInKQorICAgICAgICAgICAgXQorCisgICAgICAgIGZvciBhcmcsIGV4cGVjdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIGlucHV0ID0gc3BsaXRfaGVhZGVyX3dvcmRzKFthcmddKQorICAgICAgICAgICAgcmVzID0gam9pbl9oZWFkZXJfd29yZHMoaW5wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgZXhwZWN0LCAiIiIKK1doZW4gcGFyc2luZzogJyVzJworRXhwZWN0ZWQ6ICAgICAnJXMnCitHb3Q6ICAgICAgICAgICclcycKK0lucHV0IHdhczogICAgJyVzJworIiIiICUgKGFyZywgZXhwZWN0LCByZXMsIGlucHV0KSkKKworCitjbGFzcyBGYWtlUmVzcG9uc2U6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhlYWRlcnM9W10sIHVybD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIGhlYWRlcnM6IGxpc3Qgb2YgUkZDODIyLXN0eWxlICdLZXk6IHZhbHVlJyBzdHJpbmdzCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgbWltZXRvb2xzLCBTdHJpbmdJTworICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oIlxuIi5qb2luKGhlYWRlcnMpKQorICAgICAgICBzZWxmLl9oZWFkZXJzID0gbWltZXRvb2xzLk1lc3NhZ2UoZikKKyAgICAgICAgc2VsZi5fdXJsID0gdXJsCisgICAgZGVmIGluZm8oc2VsZik6IHJldHVybiBzZWxmLl9oZWFkZXJzCisKK2RlZiBpbnRlcmFjdF8yOTY1KGNvb2tpZWphciwgdXJsLCAqc2V0X2Nvb2tpZV9oZHJzKToKKyAgICByZXR1cm4gX2ludGVyYWN0KGNvb2tpZWphciwgdXJsLCBzZXRfY29va2llX2hkcnMsICJTZXQtQ29va2llMiIpCisKK2RlZiBpbnRlcmFjdF9uZXRzY2FwZShjb29raWVqYXIsIHVybCwgKnNldF9jb29raWVfaGRycyk6CisgICAgcmV0dXJuIF9pbnRlcmFjdChjb29raWVqYXIsIHVybCwgc2V0X2Nvb2tpZV9oZHJzLCAiU2V0LUNvb2tpZSIpCisKK2RlZiBfaW50ZXJhY3QoY29va2llamFyLCB1cmwsIHNldF9jb29raWVfaGRycywgaGRyX25hbWUpOgorICAgICIiIlBlcmZvcm0gYSBzaW5nbGUgcmVxdWVzdCAvIHJlc3BvbnNlIGN5Y2xlLCByZXR1cm5pbmcgQ29va2llOiBoZWFkZXIuIiIiCisgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisgICAgcmVxID0gUmVxdWVzdCh1cmwpCisgICAgY29va2llamFyLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKyAgICBjb29raWVfaGRyID0gcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIsICIiKQorICAgIGhlYWRlcnMgPSBbXQorICAgIGZvciBoZHIgaW4gc2V0X2Nvb2tpZV9oZHJzOgorICAgICAgICBoZWFkZXJzLmFwcGVuZCgiJXM6ICVzIiAlIChoZHJfbmFtZSwgaGRyKSkKKyAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgdXJsKQorICAgIGNvb2tpZWphci5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisgICAgcmV0dXJuIGNvb2tpZV9oZHIKKworCitjbGFzcyBGaWxlQ29va2llSmFyVGVzdHMoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2x3cF92YWx1ZWxlc3NfY29va2llKHNlbGYpOgorICAgICAgICAjIGNvb2tpZXMgd2l0aCBubyB2YWx1ZSBzaG91bGQgYmUgc2F2ZWQgYW5kIGxvYWRlZCBjb25zaXN0ZW50bHkKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IExXUENvb2tpZUphcgorICAgICAgICBmaWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgYyA9IExXUENvb2tpZUphcigpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdib28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImJvbyJdLnZhbHVlLCBOb25lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjLnNhdmUoZmlsZW5hbWUsIGlnbm9yZV9kaXNjYXJkPVRydWUpCisgICAgICAgICAgICBjID0gTFdQQ29va2llSmFyKCkKKyAgICAgICAgICAgIGMubG9hZChmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQ9VHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeTogb3MudW5saW5rKGZpbGVuYW1lKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJib28iXS52YWx1ZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2JhZF9tYWdpYyhzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IExXUENvb2tpZUphciwgTW96aWxsYUNvb2tpZUphciwgTG9hZEVycm9yCisgICAgICAgICMgSU9FcnJvcnMgKGVnLiBmaWxlIGRvZXNuJ3QgZXhpc3QpIGFyZSBhbGxvd2VkIHRvIHByb3BhZ2F0ZQorICAgICAgICBmaWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgZm9yIGNvb2tpZWphcl9jbGFzcyBpbiBMV1BDb29raWVKYXIsIE1vemlsbGFDb29raWVKYXI6CisgICAgICAgICAgICBjID0gY29va2llamFyX2NsYXNzKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjLmxvYWQoZmlsZW5hbWU9ImZvciB0aGlzIHRlc3QgdG8gd29yaywgYSBmaWxlIHdpdGggdGhpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlbmFtZSBzaG91bGQgbm90IGV4aXN0IikKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBleGM6CisgICAgICAgICAgICAgICAgIyBleGFjdGx5IElPRXJyb3IsIG5vdCBMb2FkRXJyb3IKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5fX2NsYXNzX18sIElPRXJyb3IpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgSU9FcnJvciBmb3IgaW52YWxpZCBmaWxlbmFtZSIpCisgICAgICAgICMgSW52YWxpZCBjb250ZW50cyBvZiBjb29raWVzIGZpbGUgKGVnLiBiYWQgbWFnaWMgc3RyaW5nKQorICAgICAgICAjIGNhdXNlcyBhIExvYWRFcnJvci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IikKKyAgICAgICAgICAgIGYud3JpdGUoIm9vcHNcbiIpCisgICAgICAgICAgICBmb3IgY29va2llamFyX2NsYXNzIGluIExXUENvb2tpZUphciwgTW96aWxsYUNvb2tpZUphcjoKKyAgICAgICAgICAgICAgICBjID0gY29va2llamFyX2NsYXNzKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb2FkRXJyb3IsIGMubG9hZCwgZmlsZW5hbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6IG9zLnVubGluayhmaWxlbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiBwYXNzCisKK2NsYXNzIENvb2tpZVRlc3RzKFRlc3RDYXNlKToKKyAgICAjIFhYWAorICAgICMgR2V0IHJpZCBvZiBzdHJpbmcgY29tcGFyaXNvbnMgd2hlcmUgbm90IGFjdHVhbGx5IHRlc3Rpbmcgc3RyIC8gcmVwci4KKyAgICAjIC5jbGVhcigpIGV0Yy4KKyAgICAjIElQIGFkZHJlc3NlcyBsaWtlIDUwIChzaW5nbGUgbnVtYmVyLCBubyBkb3QpIGFuZCBkb21haW4tbWF0Y2hpbmcKKyAgICAjICBmdW5jdGlvbnMgKGFuZCBpc19IRE4pPyAgU2VlIGRyYWZ0IFJGQyAyOTY1IGVycmF0YS4KKyAgICAjIFN0cmljdG5lc3Mgc3dpdGNoZXMKKyAgICAjIGlzX3RoaXJkX3BhcnR5KCkKKyAgICAjIHVudmVyaWZpYWJpbGl0eSAvIHRoaXJkLXBhcnR5IGJsb2NraW5nCisgICAgIyBOZXRzY2FwZSBjb29raWVzIHdvcmsgdGhlIHNhbWUgYXMgUkZDIDI5NjUgd2l0aCByZWdhcmQgdG8gcG9ydC4KKyAgICAjIFNldC1Db29raWUgd2l0aCBuZWdhdGl2ZSBtYXggYWdlLgorICAgICMgSWYgdHVybiBSRkMgMjk2NSBoYW5kbGluZyBvZmYsIFNldC1Db29raWUyIGNvb2tpZXMgc2hvdWxkIG5vdCBjbG9iYmVyCisgICAgIyAgU2V0LUNvb2tpZSBjb29raWVzLgorICAgICMgQ29va2llMiBzaG91bGQgYmUgc2VudCBpZiAqYW55KiBjb29raWVzIGFyZSBub3QgVjEgKGllLiBWMCBPUiBWMiBldGMuKS4KKyAgICAjIENvb2tpZXMgKFYxIGFuZCBWMCkgd2l0aCBubyBleHBpcnkgZGF0ZSBzaG91bGQgYmUgc2V0IHRvIGJlIGRpc2NhcmRlZC4KKyAgICAjIFJGQyAyOTY1IFF1b3Rpbmc6CisgICAgIyAgU2hvdWxkIGFjY2VwdCB1bnF1b3RlZCBjb29raWUtYXR0cmlidXRlIHZhbHVlcz8gIGNoZWNrIGVycmF0YSBkcmFmdC4KKyAgICAjICAgV2hpY2ggYXJlIHJlcXVpcmVkIG9uIHRoZSB3YXkgaW4gYW5kIG91dD8KKyAgICAjICBTaG91bGQgYWx3YXlzIHJldHVybiBxdW90ZWQgY29va2llLWF0dHJpYnV0ZSB2YWx1ZXM/CisgICAgIyBQcm9wZXIgdGVzdGluZyBvZiB3aGVuIFJGQyAyOTY1IGNsb2JiZXJzIE5ldHNjYXBlICh3YWl0aW5nIGZvciBlcnJhdGEpLgorICAgICMgUGF0aC1tYXRjaCBvbiByZXR1cm4gKHNhbWUgZm9yIFYwIGFuZCBWMSkuCisgICAgIyBSRkMgMjk2NSBhY2NlcHRhbmNlIGFuZCByZXR1cm5pbmcgcnVsZXMKKyAgICAjICBTZXQtQ29va2llMiB3aXRob3V0IHZlcnNpb24gYXR0cmlidXRlIGlzIHJlamVjdGVkLgorCisgICAgIyBOZXRzY2FwZSBwZWN1bGlhcml0aWVzIGxpc3QgZnJvbSBSb25hbGQgVHNjaGFsYXIuCisgICAgIyBUaGUgZmlyc3QgdHdvIHN0aWxsIG5lZWQgdGVzdHMsIHRoZSByZXN0IGFyZSBjb3ZlcmVkLgorIyMgLSBRdW90aW5nOiBvbmx5IHF1b3RlcyBhcm91bmQgdGhlIGV4cGlyZXMgdmFsdWUgYXJlIHJlY29nbml6ZWQgYXMgc3VjaAorIyMgICAoYW5kIHllcywgc29tZSBmb2xrcyBxdW90ZSB0aGUgZXhwaXJlcyB2YWx1ZSk7IHF1b3RlcyBhcm91bmQgYW55IG90aGVyCisjIyAgIHZhbHVlIGFyZSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHZhbHVlLgorIyMgLSBXaGl0ZSBzcGFjZTogd2hpdGUgc3BhY2UgYXJvdW5kIG5hbWVzIGFuZCB2YWx1ZXMgaXMgaWdub3JlZAorIyMgLSBEZWZhdWx0IHBhdGg6IGlmIG5vIHBhdGggcGFyYW1ldGVyIGlzIGdpdmVuLCB0aGUgcGF0aCBkZWZhdWx0cyB0byB0aGUKKyMjICAgcGF0aCBpbiB0aGUgcmVxdWVzdC11cmkgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgbGFzdCAnLycuIE5vdGUKKyMjICAgdGhhdCB0aGlzIGlzIGVudGlyZWx5IGRpZmZlcmVudCBmcm9tIHdoYXQgdGhlIHNwZWMgc2F5cy4KKyMjIC0gQ29tbWFzIGFuZCBvdGhlciBkZWxpbWl0ZXJzOiBOZXRzY2FwZSBqdXN0IHBhcnNlcyB1bnRpbCB0aGUgbmV4dCAnOycuCisjIyAgIFRoaXMgbWVhbnMgaXQgd2lsbCBhbGxvdyBjb21tYXMgZXRjIGluc2lkZSB2YWx1ZXMgKGFuZCB5ZXMsIGJvdGgKKyMjICAgY29tbWFzIGFuZCBlcXVhbHMgYXJlIGNvbW1vbmx5IGFwcGVhciBpbiB0aGUgY29va2llIHZhbHVlKS4gVGhpcyBhbHNvCisjIyAgIG1lYW5zIHRoYXQgaWYgeW91IGZvbGQgbXVsdGlwbGUgU2V0LUNvb2tpZSBoZWFkZXIgZmllbGRzIGludG8gb25lLAorIyMgICBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgaXQnbGwgYmUgYSBoZWFkYWNoZSB0byBwYXJzZSAoYXQgbGVhc3QgbXkgaGVhZAorIyMgICBzdGFydHMgaHVydGluZyBldmVyeXRpbWUgSSB0aGluayBvZiB0aGF0IGNvZGUpLgorIyMgLSBFeHBpcmVzOiBZb3UnbGwgZ2V0IGFsbCBzb3J0cyBvZiBkYXRlIGZvcm1hdHMgaW4gdGhlIGV4cGlyZXMsCisjIyAgIGluY2x1ZGluZyBlbXRweSBleHBpcmVzIGF0dHJpYnV0ZXMgKCJleHBpcmVzPSIpLiBCZSBhcyBmbGV4aWJsZSBhcyB5b3UKKyMjICAgY2FuLCBhbmQgY2VydGFpbmx5IGRvbid0IGV4cGVjdCB0aGUgd2Vla2RheSB0byBiZSB0aGVyZTsgaWYgeW91IGNhbid0CisjIyAgIHBhcnNlIGl0LCBqdXN0IGlnbm9yZSBpdCBhbmQgcHJldGVuZCBpdCdzIGEgc2Vzc2lvbiBjb29raWUuCisjIyAtIERvbWFpbi1tYXRjaGluZzogTmV0c2NhcGUgdXNlcyB0aGUgMi1kb3QgcnVsZSBmb3IgX2FsbF8gZG9tYWlucywgbm90CisjIyAgIGp1c3QgdGhlIDcgc3BlY2lhbCBUTEQncyBsaXN0ZWQgaW4gdGhlaXIgc3BlYy4gQW5kIGZvbGtzIHJlbHkgb24KKyMjICAgdGhhdC4uLgorCisgICAgZGVmIHRlc3RfZG9tYWluX3JldHVybl9vayhzZWxmKToKKyAgICAgICAgIyB0ZXN0IG9wdGltaXphdGlvbjogLmRvbWFpbl9yZXR1cm5fb2soKSBzaG91bGQgZmlsdGVyIG91dCBtb3N0CisgICAgICAgICMgZG9tYWlucyBpbiB0aGUgQ29va2llSmFyIGJlZm9yZSB3ZSB0cnkgdG8gYWNjZXNzIHRoZW0gKGJlY2F1c2UgdGhhdAorICAgICAgICAjIG1heSByZXF1aXJlIGRpc2sgYWNjZXNzIC0tIGluIHBhcnRpY3VsYXIsIHdpdGggTVNJRUNvb2tpZUphcikKKyAgICAgICAgIyBUaGlzIGlzIG9ubHkgYSByb3VnaCBjaGVjayBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgc28gaXQncyBub3QgdG9vCisgICAgICAgICMgY3JpdGljYWwgYXMgbG9uZyBhcyBpdCdzIHN1ZmZpY2llbnRseSBsaWJlcmFsLgorICAgICAgICBpbXBvcnQgY29va2llbGliLCB1cmxsaWIyCisgICAgICAgIHBvbCA9IGNvb2tpZWxpYi5EZWZhdWx0Q29va2llUG9saWN5KCkKKyAgICAgICAgZm9yIHVybCwgZG9tYWluLCBvayBpbiBbCisgICAgICAgICAgICAoImh0dHA6Ly9mb28uYmFyLmNvbS8iLCAiYmxhaC5jb20iLCBGYWxzZSksCisgICAgICAgICAgICAoImh0dHA6Ly9mb28uYmFyLmNvbS8iLCAicmh1YmFyYi5ibGFoLmNvbSIsIEZhbHNlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby5iYXIuY29tLyIsICJyaHViYXJiLmZvby5iYXIuY29tIiwgRmFsc2UpLAorICAgICAgICAgICAgKCJodHRwOi8vZm9vLmJhci5jb20vIiwgIi5mb28uYmFyLmNvbSIsIFRydWUpLAorICAgICAgICAgICAgKCJodHRwOi8vZm9vLmJhci5jb20vIiwgImZvby5iYXIuY29tIiwgVHJ1ZSksCisgICAgICAgICAgICAoImh0dHA6Ly9mb28uYmFyLmNvbS8iLCAiLmJhci5jb20iLCBUcnVlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby5iYXIuY29tLyIsICJjb20iLCBUcnVlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby5jb20vIiwgInJodWJhcmIuZm9vLmNvbSIsIEZhbHNlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby5jb20vIiwgIi5mb28uY29tIiwgVHJ1ZSksCisgICAgICAgICAgICAoImh0dHA6Ly9mb28uY29tLyIsICJmb28uY29tIiwgVHJ1ZSksCisgICAgICAgICAgICAoImh0dHA6Ly9mb28uY29tLyIsICJjb20iLCBUcnVlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby8iLCAicmh1YmFyYi5mb28iLCBGYWxzZSksCisgICAgICAgICAgICAoImh0dHA6Ly9mb28vIiwgIi5mb28iLCBUcnVlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby8iLCAiZm9vIiwgVHJ1ZSksCisgICAgICAgICAgICAoImh0dHA6Ly9mb28vIiwgImZvby5sb2NhbCIsIFRydWUpLAorICAgICAgICAgICAgKCJodHRwOi8vZm9vLyIsICIubG9jYWwiLCBUcnVlKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICByZXF1ZXN0ID0gdXJsbGliMi5SZXF1ZXN0KHVybCkKKyAgICAgICAgICAgIHIgPSBwb2wuZG9tYWluX3JldHVybl9vayhkb21haW4sIHJlcXVlc3QpCisgICAgICAgICAgICBpZiBvazogc2VsZi5hc3NlcnRUcnVlKHIpCisgICAgICAgICAgICBlbHNlOiBzZWxmLmFzc2VydFRydWUobm90IHIpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX3ZhbHVlKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgTW96aWxsYUNvb2tpZUphciwgbHdwX2Nvb2tpZV9zdHIKKworICAgICAgICAjIG1pc3NpbmcgPSBzaWduIGluIENvb2tpZTogaGVhZGVyIGlzIHJlZ2FyZGVkIGJ5IE1vemlsbGEgYXMgYSBtaXNzaW5nCisgICAgICAgICMgbmFtZSwgYW5kIGJ5IGNvb2tpZWxpYiBhcyBhIG1pc3NpbmcgdmFsdWUKKyAgICAgICAgZmlsZW5hbWUgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIGMgPSBNb3ppbGxhQ29va2llSmFyKGZpbGVuYW1lKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnZWdncycpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICcic3BhbSI7IHBhdGg9L2Zvby8nKQorICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJlZ2dzIl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS52YWx1ZSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS5uYW1lLCAiZWdncyIpCisgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWycvZm9vLyddWycic3BhbSInXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llLnZhbHVlIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLm5hbWUsICcic3BhbSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGx3cF9jb29raWVfc3RyKGNvb2tpZSksICgKKyAgICAgICAgICAgIHInInNwYW0iOyBwYXRoPSIvZm9vLyI7IGRvbWFpbj0id3d3LmFjbWUuY29tIjsgJworICAgICAgICAgICAgJ3BhdGhfc3BlYzsgZGlzY2FyZDsgdmVyc2lvbj0wJykpCisgICAgICAgIG9sZF9zdHIgPSByZXByKGMpCisgICAgICAgIGMuc2F2ZShpZ25vcmVfZXhwaXJlcz1UcnVlLCBpZ25vcmVfZGlzY2FyZD1UcnVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjID0gTW96aWxsYUNvb2tpZUphcihmaWxlbmFtZSkKKyAgICAgICAgICAgIGMucmV2ZXJ0KGlnbm9yZV9leHBpcmVzPVRydWUsIGlnbm9yZV9kaXNjYXJkPVRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsoYy5maWxlbmFtZSkKKyAgICAgICAgIyBjb29raWVzIHVuY2hhbmdlZCBhcGFydCBmcm9tIGxvc3QgaW5mbyByZS4gd2hldGhlciBwYXRoIHdhcyBzcGVjaWZpZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlcHIoYyksCisgICAgICAgICAgICByZS5zdWIoInBhdGhfc3BlY2lmaWVkPSVzIiAlIFRydWUsICJwYXRoX3NwZWNpZmllZD0lcyIgJSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICBvbGRfc3RyKQorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2Zvby8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnInNwYW0iOyBlZ2dzJykKKworICAgIGRlZiB0ZXN0X3JmYzIxMDlfaGFuZGxpbmcoc2VsZik6CisgICAgICAgICMgUkZDIDIxMDkgY29va2llcyBhcmUgaGFuZGxlZCBhcyBSRkMgMjk2NSBvciBOZXRzY2FwZSBjb29raWVzLAorICAgICAgICAjIGRlcGVuZGVudCBvbiBwb2xpY3kgc2V0dGluZ3MKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorCisgICAgICAgIGZvciByZmMyMTA5X2FzX25ldHNjYXBlLCByZmMyOTY1LCB2ZXJzaW9uIGluIFsKKyAgICAgICAgICAgICMgZGVmYXVsdCBhY2NvcmRpbmcgdG8gcmZjMjk2NSBpZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQKKyAgICAgICAgICAgIChOb25lLCBGYWxzZSwgMCksCisgICAgICAgICAgICAoTm9uZSwgVHJ1ZSwgMSksCisgICAgICAgICAgICAjIGV4cGxpY2l0IHJmYzIxMDlfYXNfbmV0c2NhcGUKKyAgICAgICAgICAgIChGYWxzZSwgRmFsc2UsIE5vbmUpLCAgIyB2ZXJzaW9uIE5vbmUgaGVyZSBtZWFucyBubyBjb29raWUgc3RvcmVkCisgICAgICAgICAgICAoRmFsc2UsIFRydWUsIDEpLAorICAgICAgICAgICAgKFRydWUsIEZhbHNlLCAwKSwKKyAgICAgICAgICAgIChUcnVlLCBUcnVlLCAwKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBwb2xpY3kgPSBEZWZhdWx0Q29va2llUG9saWN5KAorICAgICAgICAgICAgICAgIHJmYzIxMDlfYXNfbmV0c2NhcGU9cmZjMjEwOV9hc19uZXRzY2FwZSwKKyAgICAgICAgICAgICAgICByZmMyOTY1PXJmYzI5NjUpCisgICAgICAgICAgICBjID0gQ29va2llSmFyKHBvbGljeSkKKyAgICAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIsICJuaT1uaTsgVmVyc2lvbj0xIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyJ3d3cuZXhhbXBsZS5jb20iXVsiLyJdWyJuaSJdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZlcnNpb24gaXMgTm9uZSkgICMgZGlkbid0IGV4cGVjdCBhIHN0b3JlZCBjb29raWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUudmVyc2lvbiwgdmVyc2lvbikKKyAgICAgICAgICAgICAgICAjIDI5NjUgY29va2llcyBhcmUgdW5hZmZlY3RlZAorICAgICAgICAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb289YmFyOyBWZXJzaW9uPTEiKQorICAgICAgICAgICAgICAgIGlmIHJmYzI5NjU6CisgICAgICAgICAgICAgICAgICAgIGNvb2tpZTI5NjUgPSBjLl9jb29raWVzWyJ3d3cuZXhhbXBsZS5jb20iXVsiLyJdWyJmb28iXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZTI5NjUudmVyc2lvbiwgMSkKKworICAgIGRlZiB0ZXN0X25zX3BhcnNlcihzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgREVGQVVMVF9IVFRQX1BPUlQKKworICAgICAgICBjID0gQ29va2llSmFyKCkKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW09ZWdnczsgRG9NYWluPS5hY21lLmNvbTsgcG9ydDsgYmxBcmdoPSJmZWVwIicpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICduaT1uaTsgcG9ydD04MCw4MDgwJykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb206ODAvIiwgJ25pbmk9bmknKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbTo4MC8iLCAnZm9vPWJhcjsgZXhwaXJlcz0nKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbTo4MC8iLCAnc3BhbT1lZ2dzOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBpcmVzPSJGb28gQmFyIDI1IDMzOjIyOjExIDMwMjIiJykKKworICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyIuYWNtZS5jb20iXVsiLyJdWyJzcGFtIl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUuZG9tYWluLCAiLmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS5kb21haW5fc3BlY2lmaWVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS5wb3J0LCBERUZBVUxUX0hUVFBfUE9SVCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjb29raWUucG9ydF9zcGVjaWZpZWQpCisgICAgICAgICMgY2FzZSBpcyBwcmVzZXJ2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS5oYXNfbm9uc3RhbmRhcmRfYXR0cigiYmxBcmdoIikgYW5kCisgICAgICAgICAgICAgICAgICAgICBub3QgY29va2llLmhhc19ub25zdGFuZGFyZF9hdHRyKCJibGFyZ2giKSkKKworICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJuaSJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLmRvbWFpbiwgInd3dy5hY21lLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY29va2llLmRvbWFpbl9zcGVjaWZpZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLnBvcnQsICI4MCw4MDgwIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS5wb3J0X3NwZWNpZmllZCkKKworICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJuaW5pIl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS5wb3J0IGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY29va2llLnBvcnRfc3BlY2lmaWVkKQorCisgICAgICAgICMgaW52YWxpZCBleHBpcmVzIHNob3VsZCBub3QgY2F1c2UgY29va2llIHRvIGJlIGRyb3BwZWQKKyAgICAgICAgZm9vID0gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXVsiZm9vIl0KKyAgICAgICAgc3BhbSA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImZvbyJdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uZXhwaXJlcyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BhbS5leHBpcmVzIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9uc19wYXJzZXJfc3BlY2lhbF9uYW1lcyhzZWxmKToKKyAgICAgICAgIyBuYW1lcyBzdWNoIGFzICdleHBpcmVzJyBhcmUgbm90IHNwZWNpYWwgaW4gZmlyc3QgbmFtZT12YWx1ZSBwYWlyCisgICAgICAgICMgb2YgU2V0LUNvb2tpZTogaGVhZGVyCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIKKworICAgICAgICBjID0gQ29va2llSmFyKCkKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ2V4cGlyZXM9ZWdncycpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICd2ZXJzaW9uPWVnZ3M7IHNwYW09ZWdncycpCisKKyAgICAgICAgY29va2llcyA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdleHBpcmVzJyBpbiBjb29raWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3ZlcnNpb24nIGluIGNvb2tpZXMpCisKKyAgICBkZWYgdGVzdF9leHBpcmVzKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgdGltZTJuZXRzY2FwZSwgQ29va2llSmFyCisKKyAgICAgICAgIyBpZiBleHBpcmVzIGlzIGluIGZ1dHVyZSwga2VlcCBjb29raWUuLi4KKyAgICAgICAgYyA9IENvb2tpZUphcigpCisgICAgICAgIGZ1dHVyZSA9IHRpbWUybmV0c2NhcGUodGltZS50aW1lKCkrMzYwMCkKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ3NwYW09ImJhciI7IGV4cGlyZXM9JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKyAgICAgICAgbm93ID0gdGltZTJuZXRzY2FwZSh0aW1lLnRpbWUoKS0xKQorICAgICAgICAjIC4uLiBhbmQgaWYgaW4gcGFzdCBvciBwcmVzZW50LCBkaXNjYXJkIGl0CisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdmb289ImVnZ3MiOyBleHBpcmVzPSVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdykKKyAgICAgICAgaCA9IGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3NwYW09ImJhciInIGluIGggYW5kICJmb28iIG5vdCBpbiBoKQorCisgICAgICAgICMgbWF4LWFnZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZXhwaXJlcywgYW5kIHplcm8gbWF4LWFnZSBpcyByZXF1ZXN0IHRvCisgICAgICAgICMgZGVsZXRlIGJvdGggbmV3IGNvb2tpZSBhbmQgYW55IG9sZCBtYXRjaGluZyBjb29raWUKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ2VnZ3M9ImJhciI7IGV4cGlyZXM9JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnYmFyPSJiYXIiOyBleHBpcmVzPSVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdlZ2dzPSJiYXIiOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBpcmVzPSVzOyBtYXgtYWdlPTAnICUgZnV0dXJlKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnYmFyPSJiYXIiOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXgtYWdlPTA7IGV4cGlyZXM9JXMnICUgZnV0dXJlKQorICAgICAgICBoID0gaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisKKyAgICAgICAgIyB0ZXN0IGV4cGlyeSBhdCBlbmQgb2Ygc2Vzc2lvbiBmb3IgY29va2llcyB3aXRoIG5vIGV4cGlyZXMgYXR0cmlidXRlCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LnJodWJhcmIubmV0LyIsICd3aHVtPSJmaXp6IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQorICAgICAgICBjLmNsZWFyX3Nlc3Npb25fY29va2llcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzcGFtPSJiYXIiJywgaCkKKworICAgICAgICAjIFhYWCBSRkMgMjk2NSBleHBpcnkgcnVsZXMgKHNvbWUgYXBwbHkgdG8gVjAgdG9vKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9wYXRoKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisKKyAgICAgICAgIyBSRkMgMjk2NQorICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkKKworICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnc3BhbT0iYmFyIjsgVmVyc2lvbj0iMSInKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaCIsICdlZ2dzPSJiYXIiOyBWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKworICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoL3JodWJhcmIiLAorICAgICAgICAgICAgICAgICAgICAgICdlZ2dzPSJiYXIiOyBWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi9ibGFoLyIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2JsYWgvcmh1YmFyYi8iLAorICAgICAgICAgICAgICAgICAgICAgICdlZ2dzPSJiYXIiOyBWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi9ibGFoL3JodWJhcmIvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisKKyAgICAgICAgIyBOZXRzY2FwZQorCisgICAgICAgIGMgPSBDb29raWVKYXIoKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnc3BhbT0iYmFyIicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKworICAgICAgICBjID0gQ29va2llSmFyKCkKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaCIsICdlZ2dzPSJiYXIiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiLyIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorCisgICAgICAgIGMgPSBDb29raWVKYXIoKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoL3JodWJhcmIiLCAnZWdncz0iYmFyIicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi9ibGFoIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisKKyAgICAgICAgYyA9IENvb2tpZUphcigpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2JsYWgvcmh1YmFyYi8iLCAnZWdncz0iYmFyIicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi9ibGFoL3JodWJhcmIiLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfcGF0aF93aXRoX3F1ZXJ5KHNlbGYpOgorICAgICAgICBjaiA9IGNvb2tpZWxpYi5Db29raWVKYXIoKQorICAgICAgICB1cmkgPSAiaHR0cDovL2V4YW1wbGUuY29tLz9zcGFtL2VnZ3MiCisgICAgICAgIHZhbHVlID0gJ2VnZ3M9ImJhciInCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGNqLCB1cmksIHZhbHVlKQorICAgICAgICAjIGRlZmF1bHQgcGF0aCBkb2VzIG5vdCBpbmNsdWRlIHF1ZXJ5LCBzbyBpcyAiLyIsIG5vdCAiLz9zcGFtIgorICAgICAgICBzZWxmLmFzc2VydEluKCIvIiwgY2ouX2Nvb2tpZXNbImV4YW1wbGUuY29tIl0pCisgICAgICAgICMgY29va2llIGlzIHNlbnQgYmFjayB0byB0aGUgc2FtZSBVUkkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF9uZXRzY2FwZShjaiwgdXJpKSwgdmFsdWUpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVfcGF0aChzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGVzY2FwZV9wYXRoCisgICAgICAgIGNhc2VzID0gWworICAgICAgICAgICAgIyBxdW90ZWQgc2FmZQorICAgICAgICAgICAgKCIvZm9vJTJmL2JhciIsICIvZm9vJTJGL2JhciIpLAorICAgICAgICAgICAgKCIvZm9vJTJGL2JhciIsICIvZm9vJTJGL2JhciIpLAorICAgICAgICAgICAgIyBxdW90ZWQgJQorICAgICAgICAgICAgKCIvZm9vJSUvYmFyIiwgIi9mb28lJS9iYXIiKSwKKyAgICAgICAgICAgICMgcXVvdGVkIHVuc2FmZQorICAgICAgICAgICAgKCIvZm8lMTlvL2JhciIsICIvZm8lMTlvL2JhciIpLAorICAgICAgICAgICAgKCIvZm8lN2RvL2JhciIsICIvZm8lN0RvL2JhciIpLAorICAgICAgICAgICAgIyB1bnF1b3RlZCBzYWZlCisgICAgICAgICAgICAoIi9mb28vYmFyJiIsICIvZm9vL2JhciYiKSwKKyAgICAgICAgICAgICgiL2Zvby8vYmFyIiwgIi9mb28vL2JhciIpLAorICAgICAgICAgICAgKCJcMTc2L2Zvby9iYXIiLCAiXDE3Ni9mb28vYmFyIiksCisgICAgICAgICAgICAjIHVucXVvdGVkIHVuc2FmZQorICAgICAgICAgICAgKCIvZm9vXDAzMS9iYXIiLCAiL2ZvbyUxOS9iYXIiKSwKKyAgICAgICAgICAgICgiL1wxNzVmb28vYmFyIiwgIi8lN0Rmb28vYmFyIiksCisgICAgICAgICAgICAjIHVuaWNvZGUKKyAgICAgICAgICAgICh1Ii9mb28vYmFyXHVhYmNkIiwgIi9mb28vYmFyJUVBJUFGJThEIiksICAjIFVURi04IGVuY29kZWQKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIGFyZywgcmVzdWx0IGluIGNhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlc2NhcGVfcGF0aChhcmcpLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9yZXF1ZXN0X3BhdGgoc2VsZik6CisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgcmVxdWVzdF9wYXRoCisgICAgICAgICMgd2l0aCBwYXJhbWV0ZXJzCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vcmhldW0vcmhhcG9udGljdW07IgorICAgICAgICAgICAgICAgICAgICAgICJmb289YmFyO3Npbmc9c29uZz9hcHBsZXM9cGVhcnMmc3BhbT1lZ2dzI25pIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X3BhdGgocmVxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiL3JoZXVtL3JoYXBvbnRpY3VtO2Zvbz1iYXI7c2luZz1zb25nIikKKyAgICAgICAgIyB3aXRob3V0IHBhcmFtZXRlcnMKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yaGV1bS9yaGFwb250aWN1bT8iCisgICAgICAgICAgICAgICAgICAgICAgImFwcGxlcz1wZWFycyZzcGFtPWVnZ3MjbmkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcGF0aChyZXEpLCAiL3JoZXVtL3JoYXBvbnRpY3VtIikKKyAgICAgICAgIyBtaXNzaW5nIGZpbmFsIHNsYXNoCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcGF0aChyZXEpLCAiLyIpCisKKyAgICBkZWYgdGVzdF9yZXF1ZXN0X3BvcnQoc2VsZik6CisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgcmVxdWVzdF9wb3J0LCBERUZBVUxUX0hUVFBfUE9SVAorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tOjEyMzQvIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiSG9zdCI6ICJ3d3cuYWNtZS5jb206NDMyMSJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcG9ydChyZXEpLCAiMTIzNCIpCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb20vIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiSG9zdCI6ICJ3d3cuYWNtZS5jb206NDMyMSJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcG9ydChyZXEpLCBERUZBVUxUX0hUVFBfUE9SVCkKKworICAgIGRlZiB0ZXN0X3JlcXVlc3RfaG9zdChzZWxmKToKKyAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCByZXF1ZXN0X2hvc3QKKyAgICAgICAgIyB0aGlzIHJlcXVlc3QgaXMgaWxsZWdhbCAoUkZDMjYxNiwgMTQuMi4zKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vMS4xLjEuMS8iLAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogInd3dy5hY21lLmNvbTo4MCJ9KQorICAgICAgICAjIGxpYnd3dy1wZXJsIHdhbnRzIHRoaXMgcmVzcG9uc2UsIGJ1dCB0aGF0IHNlZW1zIHdyb25nIChSRkMgMjYxNiwKKyAgICAgICAgIyBzZWN0aW9uIDUuMiwgcG9pbnQgMS4sIGFuZCBSRkMgMjk2NSBzZWN0aW9uIDEsIHBhcmFncmFwaCAzKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X2hvc3QocmVxKSwgInd3dy5hY21lLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9ob3N0KHJlcSksICIxLjEuMS4xIikKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogImlycmVsZXZhbnQuY29tIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9ob3N0KHJlcSksICJ3d3cuYWNtZS5jb20iKQorICAgICAgICAjIG5vdCBhY3R1YWxseSBzdXJlIHRoaXMgb25lIGlzIHZhbGlkIFJlcXVlc3Qgb2JqZWN0LCBzbyBtYXliZSBzaG91bGQKKyAgICAgICAgIyByZW1vdmUgdGVzdCBmb3Igbm8gaG9zdCBpbiB1cmwgaW4gcmVxdWVzdF9ob3N0IGZ1bmN0aW9uPworICAgICAgICByZXEgPSBSZXF1ZXN0KCIvcmVzb3VyY2UuaHRtbCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAid3d3LmFjbWUuY29tIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9ob3N0KHJlcSksICJ3d3cuYWNtZS5jb20iKQorICAgICAgICAjIHBvcnQgc2hvdWxkbid0IGJlIGluIHJlcXVlc3QtaG9zdAorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tOjIzNDUvcmVzb3VyY2UuaHRtbCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAid3d3LmFjbWUuY29tOjU0MzIifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X2hvc3QocmVxKSwgInd3dy5hY21lLmNvbSIpCisKKyAgICBkZWYgdGVzdF9pc19IRE4oc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBpc19IRE4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX0hETigiZm9vLmJhci5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX0hETigiMWZvbzIuM2JhcjQuNWNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzX0hETigiMTkyLjE2OC4xLjEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc19IRE4oIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzX0hETigiLiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzX0hETigiLmZvby5iYXIuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCIuLmZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzX0hETigiZm9vLiIpKQorCisgICAgZGVmIHRlc3RfcmVhY2goc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCByZWFjaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWNoKCJ3d3cuYWNtZS5jb20iKSwgIi5hY21lLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goImFjbWUuY29tIiksICJhY21lLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goImFjbWUubG9jYWwiKSwgIi5sb2NhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goIi5sb2NhbCIpLCAiLmxvY2FsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiLmNvbSIpLCAiLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goIi4iKSwgIi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWNoKCIiKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goIjE5Mi4xNjguMC4xIiksICIxOTIuMTY4LjAuMSIpCisKKyAgICBkZWYgdGVzdF9kb21haW5fbWF0Y2goc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBkb21haW5fbWF0Y2gsIHVzZXJfZG9tYWluX21hdGNoCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIjE5Mi4xNjguMS4xIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIuMTY4LjEuMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgInguWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbWFpbl9tYXRjaCgieC55LmNvbSIsICIuWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkb21haW5fbWF0Y2goIngueS5jb20iLCAiWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbWFpbl9tYXRjaCgiYS5iLmMuY29tIiwgIi5jLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGRvbWFpbl9tYXRjaCgiLmMuY29tIiwgImEuYi5jLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9tYWluX21hdGNoKCJleGFtcGxlLmxvY2FsIiwgIi5sb2NhbCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGRvbWFpbl9tYXRjaCgiYmxhaC5ibGFoIiwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGRvbWFpbl9tYXRjaCgiIiwgIi5yaHViYXJiLnJodWJhcmIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbWFpbl9tYXRjaCgiIiwgIiIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgiYWNtZS5jb20iLCAiYWNtZS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiYWNtZS5jb20iLCAiLmFjbWUuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgicmh1YmFyYi5hY21lLmNvbSIsICIuYWNtZS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJ3d3cucmh1YmFyYi5hY21lLmNvbSIsICIuYWNtZS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgInguWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi5ZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgieS5jb20iLCAiWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiLnkuY29tIiwgIlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgiLnkuY29tIiwgIi5ZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgImNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIm0iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIubSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIxOTIuMTY4LjEuMSIpKQorICAgICAgICAjIG5vdCBib3RoIEhETnMsIHNvIG11c3Qgc3RyaW5nLWNvbXBhcmUgZXF1YWwgdG8gbWF0Y2gKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiLjE2OC4xLjEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiLiIpKQorICAgICAgICAjIGVtcHR5IHN0cmluZyBpcyBhIHNwZWNpYWwgY2FzZQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIiKSkKKworICAgIGRlZiB0ZXN0X3dyb25nX2RvbWFpbihzZWxmKToKKyAgICAgICAgIyBDb29raWVzIHdob3NlIGVmZmVjdGl2ZSByZXF1ZXN0LWhvc3QgbmFtZSBkb2VzIG5vdCBkb21haW4tbWF0Y2ggdGhlCisgICAgICAgICMgZG9tYWluIGFyZSByZWplY3RlZC4KKworICAgICAgICAjIFhYWCBmYXIgZnJvbSBjb21wbGV0ZQorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyCisgICAgICAgIGMgPSBDb29raWVKYXIoKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3Lm5hc3R5LmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgICdmb289YmFyOyBkb21haW49ZnJpZW5kbHkub3JnOyBWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAwKQorCisgICAgZGVmIHRlc3Rfc3RyaWN0X2RvbWFpbihzZWxmKToKKyAgICAgICAgIyBDb29raWVzIHdob3NlIGRvbWFpbiBpcyBhIGNvdW50cnktY29kZSB0bGQgbGlrZSAuY28udWsgc2hvdWxkCisgICAgICAgICMgbm90IGJlIHNldCBpZiBDb29raWVQb2xpY3kuc3RyaWN0X2RvbWFpbiBpcyB0cnVlLgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisKKyAgICAgICAgY3AgPSBEZWZhdWx0Q29va2llUG9saWN5KHN0cmljdF9kb21haW49VHJ1ZSkKKyAgICAgICAgY2ogPSBDb29raWVKYXIocG9saWN5PWNwKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjaiwgImh0dHA6Ly9leGFtcGxlLmNvLnVrLyIsICdubz1wcm9ibGVtbycpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGNqLCAiaHR0cDovL2V4YW1wbGUuY28udWsvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ29rZXk9ZG9rZXk7IERvbWFpbj0uZXhhbXBsZS5jby51aycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNqKSwgMikKKyAgICAgICAgZm9yIHBzZXVkb190bGQgaW4gWyIuY28udWsiLCAiLm9yZy56YSIsICIudHgudXMiLCAiLm5hbWUudXMiXToKKyAgICAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGNqLCAiaHR0cDovL2V4YW1wbGUuJXMvIiAlIHBzZXVkb190bGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbT1lZ2dzOyBEb21haW49LmNvLnVrJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNqKSwgMikKKworICAgIGRlZiB0ZXN0X3R3b19jb21wb25lbnRfZG9tYWluX25zKHNlbGYpOgorICAgICAgICAjIE5ldHNjYXBlOiAud3d3LmJhci5jb20sIHd3dy5iYXIuY29tLCAuYmFyLmNvbSwgYmFyLmNvbSwgbm8gZG9tYWluCisgICAgICAgICMgc2hvdWxkIGFsbCBnZXQgYWNjZXB0ZWQsIGFzIHNob3VsZCAuYWNtZS5jb20sIGFjbWUuY29tIGFuZCBubyBkb21haW4KKyAgICAgICAgIyBmb3IgMi1jb21wb25lbnQgZG9tYWlucyBsaWtlIGFjbWUuY29tLgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisKKyAgICAgICAgYyA9IENvb2tpZUphcigpCisKKyAgICAgICAgIyB0d28tY29tcG9uZW50IFYwIGRvbWFpbiBpcyBPSworICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvIiwgJ25zPWJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbImZvby5uZXQiXVsiLyJdWyJucyJdLnZhbHVlLCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvIiksICJucz1iYXIiKQorICAgICAgICAjICp3aWxsKiBiZSByZXR1cm5lZCB0byBhbnkgb3RoZXIgZG9tYWluICh1bmxpa2UgUkZDIDI5NjUpLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuZm9vLm5ldC8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibnM9YmFyIikKKyAgICAgICAgIyAuLi51bmxlc3MgcmVxdWVzdGVkIG90aGVyd2lzZQorICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KAorICAgICAgICAgICAgc3RyaWN0X25zX2RvbWFpbj1EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblN0cmljdE5vbkRvbWFpbikKKyAgICAgICAgYy5zZXRfcG9saWN5KHBvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5mb28ubmV0LyIpLCAiIikKKworICAgICAgICAjIHVubGlrZSBSRkMgMjk2NSwgZXZlbiBleHBsaWNpdCB0d28tY29tcG9uZW50IGRvbWFpbiBpcyBPSywKKyAgICAgICAgIyBiZWNhdXNlIC5mb28ubmV0IG1hdGNoZXMgZm9vLm5ldAorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvZm9vLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtMT1lZ2dzOyBkb21haW49Zm9vLm5ldCcpCisgICAgICAgICMgZXZlbiBpZiBzdGFydHMgd2l0aCBhIGRvdCAtLSBpbiBOUyBydWxlcywgLmZvby5uZXQgbWF0Y2hlcyBmb28ubmV0IQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvZm9vL2Jhci8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbTI9ZWdnczsgZG9tYWluPS5mb28ubmV0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fY29va2llc1siLmZvby5uZXQiXVsiL2ZvbyJdWyJzcGFtMSJdLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2dzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLl9jb29raWVzWyIuZm9vLm5ldCJdWyIvZm9vL2JhciJdWyJzcGFtMiJdLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2dzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvZm9vL2Jhci8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbTI9ZWdnczsgc3BhbTE9ZWdnczsgbnM9YmFyIikKKworICAgICAgICAjIHRvcC1sZXZlbCBkb21haW4gaXMgdG9vIGdlbmVyYWwKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9mb28ubmV0LyIsICduaW5pPSJuaSI7IGRvbWFpbj0ubmV0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCisKKyMjICAgICAgICAgIyBOZXRzY2FwZSBwcm90b2NvbCBkb2Vzbid0IGFsbG93IG5vbi1zcGVjaWFsIHRvcCBsZXZlbCBkb21haW5zIChzdWNoCisjIyAgICAgICAgICMgYXMgY28udWspIGluIHRoZSBkb21haW4gYXR0cmlidXRlIHVubGVzcyB0aGVyZSBhcmUgYXQgbGVhc3QgdGhyZWUKKyMjICAgICAgICAgIyBkb3RzIGluIGl0LgorICAgICAgICAjIE9oIHllcyBpdCBkb2VzISAgUmVhbCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgY2hlY2sgdGhpcywgYW5kIHJlYWwKKyAgICAgICAgIyBjb29raWVzIChvZiBjb3Vyc2UpIHJlbHkgb24gdGhhdCBiZWhhdmlvdXIuCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLmNvLnVrIiwgJ25hc3R5PXRyaWNrOyBkb21haW49LmNvLnVrJykKKyMjICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCA0KQorCisgICAgZGVmIHRlc3RfdHdvX2NvbXBvbmVudF9kb21haW5fcmZjMjk2NShzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorCisgICAgICAgIHBvbCA9IERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKQorICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKKworICAgICAgICAjIHR3by1jb21wb25lbnQgVjEgZG9tYWluIGlzIE9LCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0LyIsICdmb289YmFyOyBWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbImZvby5uZXQiXVsiLyJdWyJmb28iXS52YWx1ZSwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5uZXQvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiRWZXJzaW9uPTE7IGZvbz1iYXIiKQorICAgICAgICAjIHdvbid0IGJlIHJldHVybmVkIHRvIGFueSBvdGhlciBkb21haW4gKGJlY2F1c2UgZG9tYWluIHdhcyBpbXBsaWVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuZm9vLm5ldC8iKSwgIiIpCisKKyAgICAgICAgIyB1bmxlc3MgZG9tYWluIGlzIGdpdmVuIGV4cGxpY2l0bHksIGJlY2F1c2UgdGhlbiBpdCBtdXN0IGJlCisgICAgICAgICMgcmV3cml0dGVuIHRvIHN0YXJ0IHdpdGggYSBkb3Q6IGZvby5uZXQgLS0+IC5mb28ubmV0LCB3aGljaCBkb2VzCisgICAgICAgICMgbm90IGRvbWFpbi1tYXRjaCBmb28ubmV0CisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0L2ZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgJ3NwYW09ZWdnczsgZG9tYWluPWZvby5uZXQ7IHBhdGg9L2ZvbzsgVmVyc2lvbj0iMSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZm9vLm5ldC9mb28iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJFZlcnNpb249MTsgZm9vPWJhciIpCisKKyAgICAgICAgIyBleHBsaWNpdCBmb28ubmV0IGZyb20gdGhyZWUtY29tcG9uZW50IGRvbWFpbiB3d3cuZm9vLm5ldCAqZG9lcyogZ2V0CisgICAgICAgICMgc2V0LCBiZWNhdXNlIC5mb28ubmV0IGRvbWFpbi1tYXRjaGVzIC5mb28ubmV0CisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuZm9vLm5ldC9mb28vIiwKKyAgICAgICAgICAgICAgICAgICAgICAnc3BhbT1lZ2dzOyBkb21haW49Zm9vLm5ldDsgVmVyc2lvbj0iMSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbIi5mb28ubmV0Il1bIi9mb28vIl1bInNwYW0iXS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0L2Zvby8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJFZlcnNpb249MTsgZm9vPWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5mb28ubmV0L2Zvby8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJFZlcnNpb249MTsgc3BhbT1lZ2dzOyAkRG9tYWluPSJmb28ubmV0IicpCisKKyAgICAgICAgIyB0b3AtbGV2ZWwgZG9tYWluIGlzIHRvbyBnZW5lcmFsCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0LyIsCisgICAgICAgICAgICAgICAgICAgICAgJ25pPSJuaSI7IGRvbWFpbj0iLm5ldCI7IFZlcnNpb249IjEiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisKKyAgICAgICAgIyBSRkMgMjk2NSBkb2Vzbid0IHJlcXVpcmUgYmxvY2tpbmcgdGhpcworICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZm9vLmNvLnVrLyIsCisgICAgICAgICAgICAgICAgICAgICAgJ25hc3R5PXRyaWNrOyBkb21haW49LmNvLnVrOyBWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAzKQorCisgICAgZGVmIHRlc3RfZG9tYWluX2FsbG93KHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9saWN5PURlZmF1bHRDb29raWVQb2xpY3koCisgICAgICAgICAgICBibG9ja2VkX2RvbWFpbnM9WyJhY21lLmNvbSJdLAorICAgICAgICAgICAgYWxsb3dlZF9kb21haW5zPVsid3d3LmFjbWUuY29tIl0pKQorCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9hY21lLmNvbS8iKQorICAgICAgICBoZWFkZXJzID0gWyJTZXQtQ29va2llOiBDVVNUT01FUj1XSUxFX0VfQ09ZT1RFOyBwYXRoPS8iXQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly9hY21lLmNvbS8iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDApCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuY295b3RlLmNvbS8iKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuY295b3RlLmNvbS8iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisKKyAgICAgICAgIyBzZXQgYSBjb29raWUgd2l0aCBub24tYWxsb3dlZCBkb21haW4uLi4KKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5jb3lvdGUuY29tLyIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5jb3lvdGUuY29tLyIpCisgICAgICAgIGNvb2tpZXMgPSBjLm1ha2VfY29va2llcyhyZXMsIHJlcSkKKyAgICAgICAgYy5zZXRfY29va2llKGNvb2tpZXNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQorICAgICAgICAjIC4uLiBhbmQgY2hlY2sgaXMgZG9lc24ndCBnZXQgcmV0dXJuZWQKKyAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcmVxLmhhc19oZWFkZXIoIkNvb2tpZSIpKQorCisgICAgZGVmIHRlc3RfZG9tYWluX2Jsb2NrKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorCisgICAgICAgIHBvbCA9IERlZmF1bHRDb29raWVQb2xpY3koCisgICAgICAgICAgICByZmMyOTY1PVRydWUsIGJsb2NrZWRfZG9tYWlucz1bIi5hY21lLmNvbSJdKQorICAgICAgICBjID0gQ29va2llSmFyKHBvbGljeT1wb2wpCisgICAgICAgIGhlYWRlcnMgPSBbIlNldC1Db29raWU6IENVU1RPTUVSPVdJTEVfRV9DT1lPVEU7IHBhdGg9LyJdCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAwKQorCisgICAgICAgIHAgPSBwb2wuc2V0X2Jsb2NrZWRfZG9tYWlucyhbImFjbWUuY29tIl0pCisgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKworICAgICAgICBjLmNsZWFyKCkKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5yb2FkcnVubmVyLm5ldC8iKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cucm9hZHJ1bm5lci5uZXQvIikKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnJvYWRydW5uZXIubmV0LyIpCisgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICByZXEuaGFzX2hlYWRlcigiQ29va2llMiIpKSkKKworICAgICAgICBjLmNsZWFyKCkKKyAgICAgICAgcG9sLnNldF9ibG9ja2VkX2RvbWFpbnMoWyIuYWNtZS5jb20iXSkKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorCisgICAgICAgICMgc2V0IGEgY29va2llIHdpdGggYmxvY2tlZCBkb21haW4uLi4KKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgY29va2llcyA9IGMubWFrZV9jb29raWVzKHJlcywgcmVxKQorICAgICAgICBjLnNldF9jb29raWUoY29va2llc1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisgICAgICAgICMgLi4uIGFuZCBjaGVjayBpcyBkb2Vzbid0IGdldCByZXR1cm5lZAorICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXEuaGFzX2hlYWRlcigiQ29va2llIikpCisKKyAgICBkZWYgdGVzdF9zZWN1cmUoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBmb3IgbnMgaW4gVHJ1ZSwgRmFsc2U6CisgICAgICAgICAgICBmb3Igd2hpdGVzcGFjZSBpbiAiICIsICIiOgorICAgICAgICAgICAgICAgIGMgPSBDb29raWVKYXIoKQorICAgICAgICAgICAgICAgIGlmIG5zOgorICAgICAgICAgICAgICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGludCA9IGludGVyYWN0X25ldHNjYXBlCisgICAgICAgICAgICAgICAgICAgIHZzID0gIiIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgaW50ID0gaW50ZXJhY3RfMjk2NQorICAgICAgICAgICAgICAgICAgICB2cyA9ICI7IFZlcnNpb249MSIKKyAgICAgICAgICAgICAgICBjLnNldF9wb2xpY3kocG9sKQorICAgICAgICAgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmFjbWUuY29tLyIKKyAgICAgICAgICAgICAgICBpbnQoYywgdXJsLCAiZm9vMT1iYXIlcyVzIiAlICh2cywgd2hpdGVzcGFjZSkpCisgICAgICAgICAgICAgICAgaW50KGMsIHVybCwgImZvbzI9YmFyJXM7IHNlY3VyZSVzIiAlICAodnMsIHdoaXRlc3BhY2UpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICAgICAgbm90IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImZvbzEiXS5zZWN1cmUsCisgICAgICAgICAgICAgICAgICAgICJub24tc2VjdXJlIGNvb2tpZSByZWdpc3RlcmVkIHNlY3VyZSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgICAgICBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJmb28yIl0uc2VjdXJlLAorICAgICAgICAgICAgICAgICAgICAic2VjdXJlIGNvb2tpZSByZWdpc3RlcmVkIG5vbi1zZWN1cmUiKQorCisgICAgZGVmIHRlc3RfcXVvdGVfY29va2llX3ZhbHVlKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisgICAgICAgIGMgPSBDb29raWVKYXIocG9saWN5PURlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCByJ2Zvbz1cYiJhInI7IFZlcnNpb249MScpCisgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCwgcickVmVyc2lvbj0xOyBmb289XFxiXCJhXCJyJykKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZmluYWxfc2xhc2goc2VsZik6CisgICAgICAgICMgTWlzc2luZyBzbGFzaCBmcm9tIHJlcXVlc3QgVVJMJ3MgYWJzX3BhdGggc2hvdWxkIGJlIGFzc3VtZWQgcHJlc2VudC4KKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuYWNtZS5jb20iCisgICAgICAgIGMgPSBDb29raWVKYXIoRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgImZvbz1iYXI7IFZlcnNpb249MSIpCisgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKyAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXEuaGFzX2hlYWRlcigiQ29va2llIikpCisKKyAgICBkZWYgdGVzdF9kb21haW5fbWlycm9yKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisKKyAgICAgICAgcG9sID0gRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpCisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCisgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgInNwYW09ZWdnczsgVmVyc2lvbj0xIikKKyAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJEb21haW4iLCBoLAorICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNlbnQgZG9tYWluIHJldHVybmVkIHdpdGggZG9tYWluIHByZXNlbnQiKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgRG9tYWluPS5iYXIuY29tJykKKyAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQorICAgICAgICBzZWxmLmFzc2VydEluKCckRG9tYWluPSIuYmFyLmNvbSInLCBoLCAiZG9tYWluIG5vdCByZXR1cm5lZCIpCisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCisgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgorICAgICAgICAjIG5vdGUgbWlzc2luZyBpbml0aWFsIGRvdCBpbiBEb21haW4KKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgRG9tYWluPWJhci5jb20nKQorICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyREb21haW49ImJhci5jb20iJywgaCwgImRvbWFpbiBub3QgcmV0dXJuZWQiKQorCisgICAgZGVmIHRlc3RfcGF0aF9taXJyb3Ioc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkKKworICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKKyAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAic3BhbT1lZ2dzOyBWZXJzaW9uPTEiKQorICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlBhdGgiLCBoLCAiYWJzZW50IHBhdGggcmV0dXJuZWQgd2l0aCBwYXRoIHByZXNlbnQiKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgUGF0aD0vJykKKyAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQorICAgICAgICBzZWxmLmFzc2VydEluKCckUGF0aD0iLyInLCBoLCAicGF0aCBub3QgcmV0dXJuZWQiKQorCisgICAgZGVmIHRlc3RfcG9ydF9taXJyb3Ioc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkKKworICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKKyAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAic3BhbT1lZ2dzOyBWZXJzaW9uPTEiKQorICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlBvcnQiLCBoLCAiYWJzZW50IHBvcnQgcmV0dXJuZWQgd2l0aCBwb3J0IHByZXNlbnQiKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICJzcGFtPWVnZ3M7IFZlcnNpb249MTsgUG9ydCIpCisgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgiXCRQb3J0KFtePV18JCkiLCBoKSwKKyAgICAgICAgICAgICAgICAgICAgICJwb3J0IHdpdGggbm8gdmFsdWUgbm90IHJldHVybmVkIHdpdGggbm8gdmFsdWUiKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgUG9ydD0iODAiJykKKyAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQorICAgICAgICBzZWxmLmFzc2VydEluKCckUG9ydD0iODAiJywgaCwKKyAgICAgICAgICAgICAgICAgICAgICAicG9ydCB3aXRoIHNpbmdsZSB2YWx1ZSBub3QgcmV0dXJuZWQgd2l0aCBzaW5nbGUgdmFsdWUiKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgUG9ydD0iODAsODA4MCInKQorICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyRQb3J0PSI4MCw4MDgwIicsIGgsCisgICAgICAgICAgICAgICAgICAgICAgInBvcnQgd2l0aCBtdWx0aXBsZSB2YWx1ZXMgbm90IHJldHVybmVkIHdpdGggbXVsdGlwbGUgIgorICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZXMiKQorCisgICAgZGVmIHRlc3Rfbm9fcmV0dXJuX2NvbW1lbnQoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBjID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKKyAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAnc3BhbT1lZ2dzOyBWZXJzaW9uPTE7ICcKKyAgICAgICAgICAgICAgICAgICAgICAnQ29tbWVudD0iZG9lcyBhbnlib2R5IHJlYWQgdGhlc2U/IjsgJworICAgICAgICAgICAgICAgICAgICAgICdDb21tZW50VVJMPSJodHRwOi8vZm9vLmJhci5uZXQvY29tbWVudC5odG1sIicpCisgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgIkNvbW1lbnQiIG5vdCBpbiBoLAorICAgICAgICAgICAgIkNvbW1lbnQgb3IgQ29tbWVudFVSTCBjb29raWUtYXR0cmlidXRlcyByZXR1cm5lZCB0byBzZXJ2ZXIiKQorCisgICAgZGVmIHRlc3RfQ29va2llX2l0ZXJhdG9yKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBDb29raWUsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBjcyA9IENvb2tpZUphcihEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkpCisgICAgICAgICMgYWRkIHNvbWUgcmFuZG9tIGNvb2tpZXMKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjcywgImh0dHA6Ly9ibGFoLnNwYW0ub3JnLyIsICdmb289ZWdnczsgVmVyc2lvbj0xOyAnCisgICAgICAgICAgICAgICAgICAgICAgJ0NvbW1lbnQ9ImRvZXMgYW55Ym9keSByZWFkIHRoZXNlPyI7ICcKKyAgICAgICAgICAgICAgICAgICAgICAnQ29tbWVudFVSTD0iaHR0cDovL2Zvby5iYXIubmV0L2NvbW1lbnQuaHRtbCInKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjcywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaC8iLCAic3BhbT1iYXI7IHNlY3VyZSIpCisgICAgICAgIGludGVyYWN0XzI5NjUoY3MsICJodHRwOi8vd3d3LmFjbWUuY29tL2JsYWgvIiwKKyAgICAgICAgICAgICAgICAgICAgICAiZm9vPWJhcjsgc2VjdXJlOyBWZXJzaW9uPTEiKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGNzLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoLyIsCisgICAgICAgICAgICAgICAgICAgICAgImZvbz1iYXI7IHBhdGg9LzsgVmVyc2lvbj0xIikKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjcywgImh0dHA6Ly93d3cuc29sLm5vIiwKKyAgICAgICAgICAgICAgICAgICAgICByJ2Jhbmc9d2FsbG9wOyB2ZXJzaW9uPTE7IGRvbWFpbj0iLnNvbC5ubyI7ICcKKyAgICAgICAgICAgICAgICAgICAgICByJ3BvcnQ9IjkwLDEwMCwgODAsODA4MCI7ICcKKyAgICAgICAgICAgICAgICAgICAgICByJ21heC1hZ2U9MTAwOyBDb21tZW50ID0gIkp1c3Qga2lkZGluZyEgKFwifFxcXFwpICInKQorCisgICAgICAgIHZlcnNpb25zID0gWzEsIDEsIDEsIDAsIDFdCisgICAgICAgIG5hbWVzID0gWyJiYW5nIiwgImZvbyIsICJmb28iLCAic3BhbSIsICJmb28iXQorICAgICAgICBkb21haW5zID0gWyIuc29sLm5vIiwgImJsYWguc3BhbS5vcmciLCAid3d3LmFjbWUuY29tIiwKKyAgICAgICAgICAgICAgICAgICAid3d3LmFjbWUuY29tIiwgInd3dy5hY21lLmNvbSJdCisgICAgICAgIHBhdGhzID0gWyIvIiwgIi8iLCAiLyIsICIvYmxhaCIsICIvYmxhaC8iXQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDQpOgorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIGZvciBjIGluIGNzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCBDb29raWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnZlcnNpb24sIHZlcnNpb25zW2ldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uYW1lLCBuYW1lc1tpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZG9tYWluLCBkb21haW5zW2ldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wYXRoLCBwYXRoc1tpXSkKKyAgICAgICAgICAgICAgICBpID0gaSArIDEKKworICAgIGRlZiB0ZXN0X3BhcnNlX25zX2hlYWRlcnMoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBwYXJzZV9uc19oZWFkZXJzCisKKyAgICAgICAgIyBtaXNzaW5nIGRvbWFpbiB2YWx1ZSAoaW52YWxpZCBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZV9uc19oZWFkZXJzKFsiZm9vPWJhcjsgcGF0aD0vOyBkb21haW4iXSksCisgICAgICAgICAgICBbWygiZm9vIiwgImJhciIpLAorICAgICAgICAgICAgICAoInBhdGgiLCAiLyIpLCAoImRvbWFpbiIsIE5vbmUpLCAoInZlcnNpb24iLCAiMCIpXV0KKyAgICAgICAgICAgICkKKyAgICAgICAgIyBpbnZhbGlkIGV4cGlyZXMgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHBhcnNlX25zX2hlYWRlcnMoWyJmb289YmFyOyBleHBpcmVzPUZvbyBCYXIgMTIgMzM6MjI6MTEgMjAwMCJdKSwKKyAgICAgICAgICAgIFtbKCJmb28iLCAiYmFyIiksICgiZXhwaXJlcyIsIE5vbmUpLCAoInZlcnNpb24iLCAiMCIpXV0KKyAgICAgICAgICAgICkKKyAgICAgICAgIyBtaXNzaW5nIGNvb2tpZSB2YWx1ZSAodmFsaWQgY29va2llKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyc2VfbnNfaGVhZGVycyhbImZvbyJdKSwKKyAgICAgICAgICAgIFtbKCJmb28iLCBOb25lKSwgKCJ2ZXJzaW9uIiwgIjAiKV1dCisgICAgICAgICAgICApCisgICAgICAgICMgc2hvdWxkbid0IGFkZCB2ZXJzaW9uIGlmIGhlYWRlciBpcyBlbXB0eQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX25zX2hlYWRlcnMoWyIiXSksIFtdKQorCisgICAgZGVmIHRlc3RfYmFkX2Nvb2tpZV9oZWFkZXIoc2VsZik6CisKKyAgICAgICAgZGVmIGNvb2tpZWphcl9mcm9tX2Nvb2tpZV9oZWFkZXJzKGhlYWRlcnMpOgorICAgICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphcgorICAgICAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisgICAgICAgICAgICBjID0gQ29va2llSmFyKCkKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikKKyAgICAgICAgICAgIHIgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikKKyAgICAgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHIsIHJlcSkKKyAgICAgICAgICAgIHJldHVybiBjCisKKyAgICAgICAgIyBub25lIG9mIHRoZXNlIGJhZCBoZWFkZXJzIHNob3VsZCBjYXVzZSBhbiBleGNlcHRpb24gdG8gYmUgcmFpc2VkCisgICAgICAgIGZvciBoZWFkZXJzIGluIFsKKyAgICAgICAgICAgIFsiU2V0LUNvb2tpZTogIl0sICAjIGFjdHVhbGx5LCBub3RoaW5nIHdyb25nIHdpdGggdGhpcworICAgICAgICAgICAgWyJTZXQtQ29va2llMjogIl0sICAjIGRpdHRvCisgICAgICAgICAgICAjIG1pc3NpbmcgZG9tYWluIHZhbHVlCisgICAgICAgICAgICBbIlNldC1Db29raWUyOiBhPWZvbzsgcGF0aD0vOyBWZXJzaW9uPTE7IGRvbWFpbiJdLAorICAgICAgICAgICAgIyBiYWQgbWF4LWFnZQorICAgICAgICAgICAgWyJTZXQtQ29va2llOiBiPWZvbzsgbWF4LWFnZT1vb3BzIl0sCisgICAgICAgICAgICAjIGJhZCB2ZXJzaW9uCisgICAgICAgICAgICBbIlNldC1Db29raWU6IGI9Zm9vOyB2ZXJzaW9uPXNwYW0iXSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBjID0gY29va2llamFyX2Zyb21fY29va2llX2hlYWRlcnMoaGVhZGVycykKKyAgICAgICAgICAgICMgdGhlc2UgYmFkIGNvb2tpZXMgc2hvdWxkbid0IGJlIHNldAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDApCisKKyAgICAgICAgIyBjb29raWUgd2l0aCBpbnZhbGlkIGV4cGlyZXMgaXMgdHJlYXRlZCBhcyBzZXNzaW9uIGNvb2tpZQorICAgICAgICBoZWFkZXJzID0gWyJTZXQtQ29va2llOiBjPWZvbzsgZXhwaXJlcz1Gb28gQmFyIDEyIDMzOjIyOjExIDIwMDAiXQorICAgICAgICBjID0gY29va2llamFyX2Zyb21fY29va2llX2hlYWRlcnMoaGVhZGVycykKKyAgICAgICAgY29va2llID0gYy5fY29va2llc1sid3d3LmV4YW1wbGUuY29tIl1bIi8iXVsiYyJdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWUuZXhwaXJlcyBpcyBOb25lKQorCisKK2NsYXNzIExXUENvb2tpZVRlc3RzKFRlc3RDYXNlKToKKyAgICAjIFRlc3RzIHRha2VuIGZyb20gbGlid3d3LXBlcmwsIHdpdGggYSBmZXcgbW9kaWZpY2F0aW9ucyBhbmQgYWRkaXRpb25zLgorCisgICAgZGVmIHRlc3RfbmV0c2NhcGVfZXhhbXBsZV8xKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgRmlyc3Qgd2UgY2hlY2sgdGhhdCBpdCB3b3JrcyBmb3IgdGhlIG9yaWdpbmFsIGV4YW1wbGUgYXQKKyAgICAgICAgIyBodHRwOi8vd3d3Lm5ldHNjYXBlLmNvbS9uZXdzcmVmL3N0ZC9jb29raWVfc3BlYy5odG1sCisKKyAgICAgICAgIyBDbGllbnQgcmVxdWVzdHMgYSBkb2N1bWVudCwgYW5kIHJlY2VpdmVzIGluIHRoZSByZXNwb25zZToKKyAgICAgICAgIworICAgICAgICAjICAgICAgIFNldC1Db29raWU6IENVU1RPTUVSPVdJTEVfRV9DT1lPVEU7IHBhdGg9LzsgZXhwaXJlcz1XZWRuZXNkYXksIDA5LU5vdi05OSAyMzoxMjo0MCBHTVQKKyAgICAgICAgIworICAgICAgICAjIFdoZW4gY2xpZW50IHJlcXVlc3RzIGEgVVJMIGluIHBhdGggIi8iIG9uIHRoaXMgc2VydmVyLCBpdCBzZW5kczoKKyAgICAgICAgIworICAgICAgICAjICAgICAgIENvb2tpZTogQ1VTVE9NRVI9V0lMRV9FX0NPWU9URQorICAgICAgICAjCisgICAgICAgICMgQ2xpZW50IHJlcXVlc3RzIGEgZG9jdW1lbnQsIGFuZCByZWNlaXZlcyBpbiB0aGUgcmVzcG9uc2U6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBTZXQtQ29va2llOiBQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMTsgcGF0aD0vCisgICAgICAgICMKKyAgICAgICAgIyBXaGVuIGNsaWVudCByZXF1ZXN0cyBhIFVSTCBpbiBwYXRoICIvIiBvbiB0aGlzIHNlcnZlciwgaXQgc2VuZHM6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBDb29raWU6IENVU1RPTUVSPVdJTEVfRV9DT1lPVEU7IFBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxCisgICAgICAgICMKKyAgICAgICAgIyBDbGllbnQgcmVjZWl2ZXM6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBTZXQtQ29va2llOiBTSElQUElORz1GRURFWDsgcGF0aD0vZm8KKyAgICAgICAgIworICAgICAgICAjIFdoZW4gY2xpZW50IHJlcXVlc3RzIGEgVVJMIGluIHBhdGggIi8iIG9uIHRoaXMgc2VydmVyLCBpdCBzZW5kczoKKyAgICAgICAgIworICAgICAgICAjICAgICAgIENvb2tpZTogQ1VTVE9NRVI9V0lMRV9FX0NPWU9URTsgUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEKKyAgICAgICAgIworICAgICAgICAjIFdoZW4gY2xpZW50IHJlcXVlc3RzIGEgVVJMIGluIHBhdGggIi9mb28iIG9uIHRoaXMgc2VydmVyLCBpdCBzZW5kczoKKyAgICAgICAgIworICAgICAgICAjICAgICAgIENvb2tpZTogQ1VTVE9NRVI9V0lMRV9FX0NPWU9URTsgUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDE7IFNISVBQSU5HPUZFREVYCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgbGFzdCBDb29raWUgaXMgYnVnZ3ksIGJlY2F1c2UgYm90aCBzcGVjaWZpY2F0aW9ucyBzYXkgdGhhdCB0aGUKKyAgICAgICAgIyBtb3N0IHNwZWNpZmljIGNvb2tpZSBtdXN0IGJlIHNlbnQgZmlyc3QuICBTSElQUElORz1GRURFWCBpcyB0aGUKKyAgICAgICAgIyBtb3N0IHNwZWNpZmljIGFuZCBzaG91bGQgdGh1cyBiZSBmaXJzdC4KKworICAgICAgICB5ZWFyX3BsdXNfb25lID0gdGltZS5sb2NhbHRpbWUoKVswXSArIDEKKworICAgICAgICBoZWFkZXJzID0gW10KKworICAgICAgICBjID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NSA9IFRydWUpKQorCisgICAgICAgICNyZXEgPSBSZXF1ZXN0KCJodHRwOi8vMS4xLjEuMS8iLAorICAgICAgICAjICAgICAgICAgICAgICBoZWFkZXJzPXsiSG9zdCI6ICJ3d3cuYWNtZS5jb206ODAifSkKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbTo4MC8iLAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogInd3dy5hY21lLmNvbTo4MCJ9KQorCisgICAgICAgIGhlYWRlcnMuYXBwZW5kKAorICAgICAgICAgICAgIlNldC1Db29raWU6IENVU1RPTUVSPVdJTEVfRV9DT1lPVEU7IHBhdGg9LyA7ICIKKyAgICAgICAgICAgICJleHBpcmVzPVdlZG5lc2RheSwgMDktTm92LSVkIDIzOjEyOjQwIEdNVCIgJSB5ZWFyX3BsdXNfb25lKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSwgIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJDb29raWUyIiksICckVmVyc2lvbj0iMSInKQorCisgICAgICAgIGhlYWRlcnMuYXBwZW5kKCJTZXQtQ29va2llOiBQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMTsgcGF0aD0vIikKKyAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIpCisgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQorCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb20vZm9vL2JhciIpCisgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorCisgICAgICAgIGggPSByZXEuZ2V0X2hlYWRlcigiQ29va2llIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEiLCBoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJDVVNUT01FUj1XSUxFX0VfQ09ZT1RFIiwgaCkKKworICAgICAgICBoZWFkZXJzLmFwcGVuZCgnU2V0LUNvb2tpZTogU0hJUFBJTkc9RkVERVg7IHBhdGg9L2ZvbycpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbSIpCisgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQorCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCisKKyAgICAgICAgaCA9IHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiLCBoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJTSElQUElORz1GRURFWCIsIGgpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS9mb28vIikKKyAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCisKKyAgICAgICAgaCA9IHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiLCBoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaC5zdGFydHN3aXRoKCJTSElQUElORz1GRURFWDsiKSkKKworICAgIGRlZiB0ZXN0X25ldHNjYXBlX2V4YW1wbGVfMihzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphcgorICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QKKworICAgICAgICAjIFNlY29uZCBFeGFtcGxlIHRyYW5zYWN0aW9uIHNlcXVlbmNlOgorICAgICAgICAjCisgICAgICAgICMgQXNzdW1lIGFsbCBtYXBwaW5ncyBmcm9tIGFib3ZlIGhhdmUgYmVlbiBjbGVhcmVkLgorICAgICAgICAjCisgICAgICAgICMgQ2xpZW50IHJlY2VpdmVzOgorICAgICAgICAjCisgICAgICAgICMgICAgICAgU2V0LUNvb2tpZTogUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDE7IHBhdGg9LworICAgICAgICAjCisgICAgICAgICMgV2hlbiBjbGllbnQgcmVxdWVzdHMgYSBVUkwgaW4gcGF0aCAiLyIgb24gdGhpcyBzZXJ2ZXIsIGl0IHNlbmRzOgorICAgICAgICAjCisgICAgICAgICMgICAgICAgQ29va2llOiBQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMQorICAgICAgICAjCisgICAgICAgICMgQ2xpZW50IHJlY2VpdmVzOgorICAgICAgICAjCisgICAgICAgICMgICAgICAgU2V0LUNvb2tpZTogUEFSVF9OVU1CRVI9UklESU5HX1JPQ0tFVF8wMDIzOyBwYXRoPS9hbW1vCisgICAgICAgICMKKyAgICAgICAgIyBXaGVuIGNsaWVudCByZXF1ZXN0cyBhIFVSTCBpbiBwYXRoICIvYW1tbyIgb24gdGhpcyBzZXJ2ZXIsIGl0IHNlbmRzOgorICAgICAgICAjCisgICAgICAgICMgICAgICAgQ29va2llOiBQQVJUX05VTUJFUj1SSURJTkdfUk9DS0VUXzAwMjM7IFBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBOT1RFOiBUaGVyZSBhcmUgdHdvIG5hbWUvdmFsdWUgcGFpcnMgbmFtZWQgIlBBUlRfTlVNQkVSIiBkdWUgdG8KKyAgICAgICAgIyAgICAgICB0aGUgaW5oZXJpdGFuY2Ugb2YgdGhlICIvIiBtYXBwaW5nIGluIGFkZGl0aW9uIHRvIHRoZSAiL2FtbW8iIG1hcHBpbmcuCisKKyAgICAgICAgYyA9IENvb2tpZUphcigpCisgICAgICAgIGhlYWRlcnMgPSBbXQorCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgaGVhZGVycy5hcHBlbmQoIlNldC1Db29raWU6IFBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxOyBwYXRoPS8iKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKworICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIpCisgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEiKQorCisgICAgICAgIGhlYWRlcnMuYXBwZW5kKAorICAgICAgICAgICAgIlNldC1Db29raWU6IFBBUlRfTlVNQkVSPVJJRElOR19ST0NLRVRfMDAyMzsgcGF0aD0vYW1tbyIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tL2FtbW8iKQorICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHIiUEFSVF9OVU1CRVI9UklESU5HX1JPQ0tFVF8wMDIzO1xzKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSkpCisKKyAgICBkZWYgdGVzdF9pZXRmX2V4YW1wbGVfMShzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIFRoZW4gd2UgdGVzdCB3aXRoIHRoZSBleGFtcGxlcyBmcm9tIGRyYWZ0LWlldGYtaHR0cC1zdGF0ZS1tYW4tbWVjLTAzLnR4dAorICAgICAgICAjCisgICAgICAgICMgNS4gIEVYQU1QTEVTCisKKyAgICAgICAgYyA9IENvb2tpZUphcihEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkpCisKKyAgICAgICAgIworICAgICAgICAjIDUuMSAgRXhhbXBsZSAxCisgICAgICAgICMKKyAgICAgICAgIyBNb3N0IGRldGFpbCBvZiByZXF1ZXN0IGFuZCByZXNwb25zZSBoZWFkZXJzIGhhcyBiZWVuIG9taXR0ZWQuICBBc3N1bWUKKyAgICAgICAgIyB0aGUgdXNlciBhZ2VudCBoYXMgbm8gc3RvcmVkIGNvb2tpZXMuCisgICAgICAgICMKKyAgICAgICAgIyAgIDEuICBVc2VyIEFnZW50IC0+IFNlcnZlcgorICAgICAgICAjCisgICAgICAgICMgICAgICAgUE9TVCAvYWNtZS9sb2dpbiBIVFRQLzEuMQorICAgICAgICAjICAgICAgIFtmb3JtIGRhdGFdCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBVc2VyIGlkZW50aWZpZXMgc2VsZiB2aWEgYSBmb3JtLgorICAgICAgICAjCisgICAgICAgICMgICAyLiAgU2VydmVyIC0+IFVzZXIgQWdlbnQKKyAgICAgICAgIworICAgICAgICAjICAgICAgIEhUVFAvMS4xIDIwMCBPSworICAgICAgICAjICAgICAgIFNldC1Db29raWUyOiBDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFZlcnNpb249IjEiOyBQYXRoPSIvYWNtZSIKKyAgICAgICAgIworICAgICAgICAjICAgICAgIENvb2tpZSByZWZsZWN0cyB1c2VyJ3MgaWRlbnRpdHkuCisKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NSgKKyAgICAgICAgICAgIGMsICdodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvbG9naW4nLAorICAgICAgICAgICAgJ0N1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY29va2llKQorCisgICAgICAgICMKKyAgICAgICAgIyAgIDMuICBVc2VyIEFnZW50IC0+IFNlcnZlcgorICAgICAgICAjCisgICAgICAgICMgICAgICAgUE9TVCAvYWNtZS9waWNraXRlbSBIVFRQLzEuMQorICAgICAgICAjICAgICAgIENvb2tpZTogJFZlcnNpb249IjEiOyBDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7ICRQYXRoPSIvYWNtZSIKKyAgICAgICAgIyAgICAgICBbZm9ybSBkYXRhXQorICAgICAgICAjCisgICAgICAgICMgICAgICAgVXNlciBzZWxlY3RzIGFuIGl0ZW0gZm9yIGBgc2hvcHBpbmcgYmFza2V0LicnCisgICAgICAgICMKKyAgICAgICAgIyAgIDQuICBTZXJ2ZXIgLT4gVXNlciBBZ2VudAorICAgICAgICAjCisgICAgICAgICMgICAgICAgSFRUUC8xLjEgMjAwIE9LCisgICAgICAgICMgICAgICAgU2V0LUNvb2tpZTI6IFBhcnRfTnVtYmVyPSJSb2NrZXRfTGF1bmNoZXJfMDAwMSI7IFZlcnNpb249IjEiOworICAgICAgICAjICAgICAgICAgICAgICAgUGF0aD0iL2FjbWUiCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBTaG9wcGluZyBiYXNrZXQgY29udGFpbnMgYW4gaXRlbS4KKworICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICdodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvcGlja2l0ZW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcnNpb249IjEiOyBQYXRoPSIvYWNtZSInKTsKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgKKyAgICAgICAgICAgIHInXlwkVmVyc2lvbj0iPzEiPzsgQ3VzdG9tZXI9Ij9XSUxFX0VfQ09ZT1RFIj87IFwkUGF0aD0iL2FjbWUiJCcsCisgICAgICAgICAgICBjb29raWUpKQorCisgICAgICAgICMKKyAgICAgICAgIyAgIDUuICBVc2VyIEFnZW50IC0+IFNlcnZlcgorICAgICAgICAjCisgICAgICAgICMgICAgICAgUE9TVCAvYWNtZS9zaGlwcGluZyBIVFRQLzEuMQorICAgICAgICAjICAgICAgIENvb2tpZTogJFZlcnNpb249IjEiOworICAgICAgICAjICAgICAgICAgICAgICAgQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyAkUGF0aD0iL2FjbWUiOworICAgICAgICAjICAgICAgICAgICAgICAgUGFydF9OdW1iZXI9IlJvY2tldF9MYXVuY2hlcl8wMDAxIjsgJFBhdGg9Ii9hY21lIgorICAgICAgICAjICAgICAgIFtmb3JtIGRhdGFdCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBVc2VyIHNlbGVjdHMgc2hpcHBpbmcgbWV0aG9kIGZyb20gZm9ybS4KKyAgICAgICAgIworICAgICAgICAjICAgNi4gIFNlcnZlciAtPiBVc2VyIEFnZW50CisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBIVFRQLzEuMSAyMDAgT0sKKyAgICAgICAgIyAgICAgICBTZXQtQ29va2llMjogU2hpcHBpbmc9IkZlZEV4IjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIgorICAgICAgICAjCisgICAgICAgICMgICAgICAgTmV3IGNvb2tpZSByZWZsZWN0cyBzaGlwcGluZyBtZXRob2QuCisKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9hY21lL3NoaXBwaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2hpcHBpbmc9IkZlZEV4IjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaChyJ15cJFZlcnNpb249Ij8xIj87JywgY29va2llKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaChyJ1BhcnRfTnVtYmVyPSI/Um9ja2V0X0xhdW5jaGVyXzAwMDEiPzsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xzKlwkUGF0aD0iXC9hY21lIicsIGNvb2tpZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gocidDdXN0b21lcj0iP1dJTEVfRV9DT1lPVEUiPztccypcJFBhdGg9IlwvYWNtZSInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZSkpCisKKyAgICAgICAgIworICAgICAgICAjICAgNy4gIFVzZXIgQWdlbnQgLT4gU2VydmVyCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBQT1NUIC9hY21lL3Byb2Nlc3MgSFRUUC8xLjEKKyAgICAgICAgIyAgICAgICBDb29raWU6ICRWZXJzaW9uPSIxIjsKKyAgICAgICAgIyAgICAgICAgICAgICAgIEN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgJFBhdGg9Ii9hY21lIjsKKyAgICAgICAgIyAgICAgICAgICAgICAgIFBhcnRfTnVtYmVyPSJSb2NrZXRfTGF1bmNoZXJfMDAwMSI7ICRQYXRoPSIvYWNtZSI7CisgICAgICAgICMgICAgICAgICAgICAgICBTaGlwcGluZz0iRmVkRXgiOyAkUGF0aD0iL2FjbWUiCisgICAgICAgICMgICAgICAgW2Zvcm0gZGF0YV0KKyAgICAgICAgIworICAgICAgICAjICAgICAgIFVzZXIgY2hvb3NlcyB0byBwcm9jZXNzIG9yZGVyLgorICAgICAgICAjCisgICAgICAgICMgICA4LiAgU2VydmVyIC0+IFVzZXIgQWdlbnQKKyAgICAgICAgIworICAgICAgICAjICAgICAgIEhUVFAvMS4xIDIwMCBPSworICAgICAgICAjCisgICAgICAgICMgICAgICAgVHJhbnNhY3Rpb24gaXMgY29tcGxldGUuCisKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9hY21lL3Byb2Nlc3MiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICByZS5zZWFyY2gocidTaGlwcGluZz0iP0ZlZEV4Ij87XHMqXCRQYXRoPSJcL2FjbWUiJywgY29va2llKSBhbmQKKyAgICAgICAgICAgICJXSUxFX0VfQ09ZT1RFIiBpbiBjb29raWUpCisKKyAgICAgICAgIworICAgICAgICAjIFRoZSB1c2VyIGFnZW50IG1ha2VzIGEgc2VyaWVzIG9mIHJlcXVlc3RzIG9uIHRoZSBvcmlnaW4gc2VydmVyLCBhZnRlcgorICAgICAgICAjIGVhY2ggb2Ygd2hpY2ggaXQgcmVjZWl2ZXMgYSBuZXcgY29va2llLiAgQWxsIHRoZSBjb29raWVzIGhhdmUgdGhlIHNhbWUKKyAgICAgICAgIyBQYXRoIGF0dHJpYnV0ZSBhbmQgKGRlZmF1bHQpIGRvbWFpbi4gIEJlY2F1c2UgdGhlIHJlcXVlc3QgVVJMcyBhbGwgaGF2ZQorICAgICAgICAjIC9hY21lIGFzIGEgcHJlZml4LCBhbmQgdGhhdCBtYXRjaGVzIHRoZSBQYXRoIGF0dHJpYnV0ZSwgZWFjaCByZXF1ZXN0CisgICAgICAgICMgY29udGFpbnMgYWxsIHRoZSBjb29raWVzIHJlY2VpdmVkIHNvIGZhci4KKworICAgIGRlZiB0ZXN0X2lldGZfZXhhbXBsZV8yKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisKKyAgICAgICAgIyA1LjIgIEV4YW1wbGUgMgorICAgICAgICAjCisgICAgICAgICMgVGhpcyBleGFtcGxlIGlsbHVzdHJhdGVzIHRoZSBlZmZlY3Qgb2YgdGhlIFBhdGggYXR0cmlidXRlLiAgQWxsIGRldGFpbAorICAgICAgICAjIG9mIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGhlYWRlcnMgaGFzIGJlZW4gb21pdHRlZC4gIEFzc3VtZSB0aGUgdXNlciBhZ2VudAorICAgICAgICAjIGhhcyBubyBzdG9yZWQgY29va2llcy4KKworICAgICAgICBjID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKKworICAgICAgICAjIEltYWdpbmUgdGhlIHVzZXIgYWdlbnQgaGFzIHJlY2VpdmVkLCBpbiByZXNwb25zZSB0byBlYXJsaWVyIHJlcXVlc3RzLAorICAgICAgICAjIHRoZSByZXNwb25zZSBoZWFkZXJzCisgICAgICAgICMKKyAgICAgICAgIyBTZXQtQ29va2llMjogUGFydF9OdW1iZXI9IlJvY2tldF9MYXVuY2hlcl8wMDAxIjsgVmVyc2lvbj0iMSI7CisgICAgICAgICMgICAgICAgICBQYXRoPSIvYWNtZSIKKyAgICAgICAgIworICAgICAgICAjIGFuZAorICAgICAgICAjCisgICAgICAgICMgU2V0LUNvb2tpZTI6IFBhcnRfTnVtYmVyPSJSaWRpbmdfUm9ja2V0XzAwMjMiOyBWZXJzaW9uPSIxIjsKKyAgICAgICAgIyAgICAgICAgIFBhdGg9Ii9hY21lL2FtbW8iCisKKyAgICAgICAgaW50ZXJhY3RfMjk2NSgKKyAgICAgICAgICAgIGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvYW1tby9zcGVjaWZpYyIsCisgICAgICAgICAgICAnUGFydF9OdW1iZXI9IlJvY2tldF9MYXVuY2hlcl8wMDAxIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicsCisgICAgICAgICAgICAnUGFydF9OdW1iZXI9IlJpZGluZ19Sb2NrZXRfMDAyMyI7IFZlcnNpb249IjEiOyBQYXRoPSIvYWNtZS9hbW1vIicpCisKKyAgICAgICAgIyBBIHN1YnNlcXVlbnQgcmVxdWVzdCBieSB0aGUgdXNlciBhZ2VudCB0byB0aGUgKHNhbWUpIHNlcnZlciBmb3IgVVJMcyBvZgorICAgICAgICAjIHRoZSBmb3JtIC9hY21lL2FtbW8vLi4uICB3b3VsZCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgcmVxdWVzdCBoZWFkZXI6CisgICAgICAgICMKKyAgICAgICAgIyBDb29raWU6ICRWZXJzaW9uPSIxIjsKKyAgICAgICAgIyAgICAgICAgIFBhcnRfTnVtYmVyPSJSaWRpbmdfUm9ja2V0XzAwMjMiOyAkUGF0aD0iL2FjbWUvYW1tbyI7CisgICAgICAgICMgICAgICAgICBQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyAkUGF0aD0iL2FjbWUiCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlIE5BTUU9VkFMVUUgcGFpciBmb3IgdGhlIGNvb2tpZSB3aXRoIHRoZSBtb3JlIHNwZWNpZmljIFBhdGgKKyAgICAgICAgIyBhdHRyaWJ1dGUsIC9hY21lL2FtbW8sIGNvbWVzIGJlZm9yZSB0aGUgb25lIHdpdGggdGhlIGxlc3Mgc3BlY2lmaWMgUGF0aAorICAgICAgICAjIGF0dHJpYnV0ZSwgL2FjbWUuICBGdXJ0aGVyIG5vdGUgdGhhdCB0aGUgc2FtZSBjb29raWUgbmFtZSBhcHBlYXJzIG1vcmUKKyAgICAgICAgIyB0aGFuIG9uY2UuCisKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9hY21lL2FtbW8vLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgcmUuc2VhcmNoKHIiUmlkaW5nX1JvY2tldF8wMDIzLipSb2NrZXRfTGF1bmNoZXJfMDAwMSIsIGNvb2tpZSkpCisKKyAgICAgICAgIyBBIHN1YnNlcXVlbnQgcmVxdWVzdCBieSB0aGUgdXNlciBhZ2VudCB0byB0aGUgKHNhbWUpIHNlcnZlciBmb3IgYSBVUkwgb2YKKyAgICAgICAgIyB0aGUgZm9ybSAvYWNtZS9wYXJ0cy8gd291bGQgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHJlcXVlc3QgaGVhZGVyOgorICAgICAgICAjCisgICAgICAgICMgQ29va2llOiAkVmVyc2lvbj0iMSI7IFBhcnRfTnVtYmVyPSJSb2NrZXRfTGF1bmNoZXJfMDAwMSI7ICRQYXRoPSIvYWNtZSIKKyAgICAgICAgIworICAgICAgICAjIEhlcmUsIHRoZSBzZWNvbmQgY29va2llJ3MgUGF0aCBhdHRyaWJ1dGUgL2FjbWUvYW1tbyBpcyBub3QgYSBwcmVmaXggb2YKKyAgICAgICAgIyB0aGUgcmVxdWVzdCBVUkwsIC9hY21lL3BhcnRzLywgc28gdGhlIGNvb2tpZSBkb2VzIG5vdCBnZXQgZm9yd2FyZGVkIHRvCisgICAgICAgICMgdGhlIHNlcnZlci4KKworICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvcGFydHMvIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiUm9ja2V0X0xhdW5jaGVyXzAwMDEiLCBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlJpZGluZ19Sb2NrZXRfMDAyMyIsIGNvb2tpZSkKKworICAgIGRlZiB0ZXN0X3JlamVjdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlamVjdGlvbiBvZiBTZXQtQ29va2llMiByZXNwb25zZXMgYmFzZWQgb24gZG9tYWluLCBwYXRoLCBwb3J0LgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgRGVmYXVsdENvb2tpZVBvbGljeSwgTFdQQ29va2llSmFyCisKKyAgICAgICAgcG9sID0gRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpCisKKyAgICAgICAgYyA9IExXUENvb2tpZUphcihwb2xpY3k9cG9sKQorCisgICAgICAgIG1heF9hZ2UgPSAibWF4LWFnZT0zNjAwIgorCisgICAgICAgICMgaWxsZWdhbCBkb21haW4gKG5vIGVtYmVkZGVkIGRvdHMpCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb289YmFyOyBkb21haW49Ii5jb20iOyB2ZXJzaW9uPTEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGMpCisKKyAgICAgICAgIyBsZWdhbCBkb21haW4KKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bpbmc9cG9uZzsgZG9tYWluPSJhY21lLmNvbSI7IHZlcnNpb249MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorCisgICAgICAgICMgaWxsZWdhbCBkb21haW4gKGhvc3QgcHJlZml4ICJ3d3cuYSIgY29udGFpbnMgYSBkb3QpCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYS5hY21lLmNvbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doaXo9YmFuZzsgZG9tYWluPSJhY21lLmNvbSI7IHZlcnNpb249MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorCisgICAgICAgICMgbGVnYWwgZG9tYWluCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYS5hY21lLmNvbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dvdz1mbHV0dGVyOyBkb21haW49Ii5hLmFjbWUuY29tIjsgdmVyc2lvbj0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisKKyAgICAgICAgIyBjYW4ndCBwYXJ0aWFsbHkgbWF0Y2ggYW4gSVAtYWRkcmVzcworICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vMTI1LjEyNS4xMjUuMTI1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnenp6ej1waW5nOyBkb21haW49IjEyNS4xMjUuMTI1IjsgdmVyc2lvbj0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisKKyAgICAgICAgIyBpbGxlZ2FsIHBhdGggKG11c3QgYmUgcHJlZml4IG9mIHJlcXVlc3QgcGF0aCkKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5zb2wubm8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdibGFoPXJodWJhcmI7IGRvbWFpbj0iLnNvbC5ubyI7IHBhdGg9Ii9mb28iOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb249MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQorCisgICAgICAgICMgbGVnYWwgcGF0aAorICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LnNvbC5uby9mb28vYmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmluZz1ib25nOyBkb21haW49Ii5zb2wubm8iOyBwYXRoPSIvZm9vIjsgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uPTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKKworICAgICAgICAjIGlsbGVnYWwgcG9ydCAocmVxdWVzdC1wb3J0IG5vdCBpbiBsaXN0KQorICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LnNvbC5ubyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doaXo9ZmZmdDsgZG9tYWluPSIuc29sLm5vIjsgcG9ydD0iOTAsMTAwIjsgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uPTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKKworICAgICAgICAjIGxlZ2FsIHBvcnQKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NSgKKyAgICAgICAgICAgIGMsICJodHRwOi8vd3d3LnNvbC5ubyIsCisgICAgICAgICAgICByJ2Jhbmc9d2FsbG9wOyB2ZXJzaW9uPTE7IGRvbWFpbj0iLnNvbC5ubyI7ICcKKyAgICAgICAgICAgIHIncG9ydD0iOTAsMTAwLCA4MCw4MDgwIjsgJworICAgICAgICAgICAgcidtYXgtYWdlPTEwMDsgQ29tbWVudCA9ICJKdXN0IGtpZGRpbmchIChcInxcXFxcKSAiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDQpCisKKyAgICAgICAgIyBwb3J0IGF0dHJpYnV0ZSB3aXRob3V0IGFueSB2YWx1ZSAoY3VycmVudCBwb3J0KQorICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LnNvbC5ubyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvbzk9YmFyOyB2ZXJzaW9uPTE7IGRvbWFpbj0iLnNvbC5ubyI7IHBvcnQ7ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4LWFnZT0xMDA7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDUpCisKKyAgICAgICAgIyBlbmNvZGVkIHBhdGgKKyAgICAgICAgIyBMV1AgaGFzIHRoaXMgdGVzdCwgYnV0IHVuZXNjYXBpbmcgYWxsb3dlZCBwYXRoIGNoYXJhY3RlcnMgc2VlbXMKKyAgICAgICAgIyBsaWtlIGEgYmFkIGlkZWEsIHNvIEkgdGhpbmsgdGhpcyBzaG91bGQgZmFpbDoKKyMjICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5zb2wubm8vZm9vLyIsCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHInZm9vOD1iYXI7IHZlcnNpb249MTsgcGF0aD0iLyU2Nm9vIicpCisgICAgICAgICMgYnV0IHRoaXMgaXMgT0ssIGJlY2F1c2UgJzwnIGlzIG5vdCBhbiBhbGxvd2VkIEhUVFAgVVJMIHBhdGgKKyAgICAgICAgIyBjaGFyYWN0ZXI6CisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuc29sLm5vLzxvby8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInZm9vOD1iYXI7IHZlcnNpb249MTsgcGF0aD0iLyUzY29vIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCA2KQorCisgICAgICAgICMgc2F2ZSBhbmQgcmVzdG9yZQorICAgICAgICBmaWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjLnNhdmUoZmlsZW5hbWUsIGlnbm9yZV9kaXNjYXJkPVRydWUpCisgICAgICAgICAgICBvbGQgPSByZXByKGMpCisKKyAgICAgICAgICAgIGMgPSBMV1BDb29raWVKYXIocG9saWN5PXBvbCkKKyAgICAgICAgICAgIGMubG9hZChmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQ9VHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeTogb3MudW5saW5rKGZpbGVuYW1lKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9sZCwgcmVwcihjKSkKKworICAgIGRlZiB0ZXN0X3VybF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBUcnkgc29tZSBVUkwgZW5jb2RpbmdzIG9mIHRoZSBQQVRIcy4KKyAgICAgICAgIyAodGhlIGJlaGF2aW91ciBoZXJlIGhhcyBjaGFuZ2VkIGZyb20gbGlid3d3LXBlcmwpCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBjID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9mb28lMmYlMjUvJTNjJTNjJTBBbmV3JUU1LyVFNSIsCisgICAgICAgICAgICAgICAgICAgICAgImZvbyAgPSAgIGJhcjsgdmVyc2lvbiAgICA9ICAgMSIpCisKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NSgKKyAgICAgICAgICAgIGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2ZvbyUyZiUyNS88PCUwYW5ld+Uv5vjlIiwKKyAgICAgICAgICAgICdiYXI9YmF6OyBwYXRoPSIvZm9vLyI7IHZlcnNpb249MScpOworICAgICAgICB2ZXJzaW9uX3JlID0gcmUuY29tcGlsZShyJ15cJHZlcnNpb249XCI/MVwiPycsIHJlLkkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZm9vPWJhciIgaW4gY29va2llIGFuZCB2ZXJzaW9uX3JlLnNlYXJjaChjb29raWUpKQorCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoCisgICAgICAgICAgICBjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9mb28vJTI1Lzw8JTBhbmV35S/m+OUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNvb2tpZSkKKworICAgICAgICAjIHVuaWNvZGUgVVJMIGRvZXNuJ3QgcmFpc2UgZXhjZXB0aW9uCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgdSJodHRwOi8vd3d3LmFjbWUuY29tL1x4ZmMiKQorCisgICAgZGVmIHRlc3RfbW96aWxsYShzZWxmKToKKyAgICAgICAgIyBTYXZlIC8gbG9hZCBNb3ppbGxhL05ldHNjYXBlIGNvb2tpZSBmaWxlIGZvcm1hdC4KKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IE1vemlsbGFDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICB5ZWFyX3BsdXNfb25lID0gdGltZS5sb2NhbHRpbWUoKVswXSArIDEKKworICAgICAgICBmaWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKworICAgICAgICBjID0gTW96aWxsYUNvb2tpZUphcihmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PURlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgICJmb28xPWJhcjsgbWF4LWFnZT0xMDA7IFZlcnNpb249MSIpCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwKKyAgICAgICAgICAgICAgICAgICAgICAnZm9vMj1iYXI7IHBvcnQ9IjgwIjsgbWF4LWFnZT0xMDA7IERpc2NhcmQ7IFZlcnNpb249MScpCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgImZvbzM9YmFyOyBzZWN1cmU7IFZlcnNpb249MSIpCisKKyAgICAgICAgZXhwaXJlcyA9ICJleHBpcmVzPTA5LU5vdi0lZCAyMzoxMjo0MCBHTVQiICUgKHllYXJfcGx1c19vbmUsKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5mb28uY29tLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmb29hPWJhcjsgJXMiICUgZXhwaXJlcykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuZm9vLmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9vYj1iYXI7IERvbWFpbj0uZm9vLmNvbTsgJXMiICUgZXhwaXJlcykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuZm9vLmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9vYz1iYXI7IERvbWFpbj13d3cuZm9vLmNvbTsgJXMiICUgZXhwaXJlcykKKworICAgICAgICBkZWYgc2F2ZV9hbmRfcmVzdG9yZShjaiwgaWdub3JlX2Rpc2NhcmQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNqLnNhdmUoaWdub3JlX2Rpc2NhcmQ9aWdub3JlX2Rpc2NhcmQpCisgICAgICAgICAgICAgICAgbmV3X2MgPSBNb3ppbGxhQ29va2llSmFyKGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkpCisgICAgICAgICAgICAgICAgbmV3X2MubG9hZChpZ25vcmVfZGlzY2FyZD1pZ25vcmVfZGlzY2FyZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6IHBhc3MKKyAgICAgICAgICAgIHJldHVybiBuZXdfYworCisgICAgICAgIG5ld19jID0gc2F2ZV9hbmRfcmVzdG9yZShjLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuZXdfYyksIDYpICAjIG5vbmUgZGlzY2FyZGVkCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm5hbWU9J2ZvbzEnLCB2YWx1ZT0nYmFyJyIsIHJlcHIobmV3X2MpKQorCisgICAgICAgIG5ld19jID0gc2F2ZV9hbmRfcmVzdG9yZShjLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmV3X2MpLCA0KSAgIyAyIG9mIHRoZW0gZGlzY2FyZGVkIG9uIHNhdmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbigibmFtZT0nZm9vMScsIHZhbHVlPSdiYXInIiwgcmVwcihuZXdfYykpCisKKyAgICBkZWYgdGVzdF9uZXRzY2FwZV9taXNjKHNlbGYpOgorICAgICAgICAjIFNvbWUgYWRkaXRpb25hbCBOZXRzY2FwZSBjb29raWVzIHRlc3RzLgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyCisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorCisgICAgICAgIGMgPSBDb29raWVKYXIoKQorICAgICAgICBoZWFkZXJzID0gW10KKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2Zvby5iYXIuYWNtZS5jb20vZm9vIikKKworICAgICAgICAjIE5ldHNjYXBlIGFsbG93cyBhIGhvc3QgcGFydCB0aGF0IGNvbnRhaW5zIGRvdHMKKyAgICAgICAgaGVhZGVycy5hcHBlbmQoIlNldC1Db29raWU6IEN1c3RvbWVyPVdJTEVfRV9DT1lPVEU7IGRvbWFpbj0uYWNtZS5jb20iKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vZm9vIikKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisKKyAgICAgICAgIyBhbmQgdGhhdCB0aGUgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBob3N0IHdpdGhvdXQgYWRkaW5nIGEgbGVhZGluZworICAgICAgICAjIGRvdCB0byB0aGUgZG9tYWluLiAgU2hvdWxkIG5vdCBxdW90ZSBldmVuIGlmIHN0cmFuZ2UgY2hhcnMgYXJlIHVzZWQKKyAgICAgICAgIyBpbiB0aGUgY29va2llIHZhbHVlLgorICAgICAgICBoZWFkZXJzLmFwcGVuZCgiU2V0LUNvb2tpZTogUEFSVF9OVU1CRVI9Myw0OyBkb21haW49Zm9vLmJhci5hY21lLmNvbSIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS9mb28iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZm9vLmJhci5hY21lLmNvbS9mb28iKQorICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgIlBBUlRfTlVNQkVSPTMsNCIgaW4gcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpIGFuZAorICAgICAgICAgICAgIkN1c3RvbWVyPVdJTEVfRV9DT1lPVEUiIGluIHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSkKKworICAgIGRlZiB0ZXN0X2ludHJhbmV0X2RvbWFpbnNfMjk2NShzZWxmKToKKyAgICAgICAgIyBUZXN0IGhhbmRsaW5nIG9mIGxvY2FsIGludHJhbmV0IGhvc3RuYW1lcyB3aXRob3V0IGEgZG90LgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisKKyAgICAgICAgYyA9IENvb2tpZUphcihEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkpCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9leGFtcGxlLyIsCisgICAgICAgICAgICAgICAgICAgICAgImZvbzE9YmFyOyBQT1JUOyBEaXNjYXJkOyBWZXJzaW9uPTE7IikKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2V4YW1wbGUvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vMj1iYXI7IGRvbWFpbj0iLmxvY2FsIjsgVmVyc2lvbj0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vMT1iYXIiLCBjb29raWUpCisKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2V4YW1wbGUvIiwgJ2ZvbzM9YmFyOyBWZXJzaW9uPTEnKQorICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZXhhbXBsZS8iKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28yPWJhciIsIGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCisKKyAgICBkZWYgdGVzdF9pbnRyYW5ldF9kb21haW5zX25zKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisKKyAgICAgICAgYyA9IENvb2tpZUphcihEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjUgPSBGYWxzZSkpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZXhhbXBsZS8iLCAiZm9vMT1iYXIiKQorICAgICAgICBjb29raWUgPSBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2V4YW1wbGUvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbzI9YmFyOyBkb21haW49LmxvY2FsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbzE9YmFyIiwgY29va2llKQorCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZXhhbXBsZS8iKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28yPWJhciIsIGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9wYXRoKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorCisgICAgICAgICMgVGVzdCBmb3IgZW1wdHkgcGF0aAorICAgICAgICAjIEJyb2tlbiB3ZWItc2VydmVyIE9SSU9OLzEuMy4zOCByZXR1cm5zIHRvIHRoZSBjbGllbnQgcmVzcG9uc2UgbGlrZQorICAgICAgICAjCisgICAgICAgICMgICAgICAgU2V0LUNvb2tpZTogSlNFU1NJT05JRD1BQkNERVJBTkRPTTEyMzsgUGF0aD0KKyAgICAgICAgIworICAgICAgICAjIGllLiB3aXRoIFBhdGggc2V0IHRvIG5vdGhpbmcuCisgICAgICAgICMgSW4gdGhpcyBjYXNlLCBleHRyYWN0X2Nvb2tpZXMoKSBtdXN0IHNldCBjb29raWUgdG8gLyAocm9vdCkKKyAgICAgICAgYyA9IENvb2tpZUphcihEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjUgPSBUcnVlKSkKKyAgICAgICAgaGVhZGVycyA9IFtdCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hbnRzLmNvbS8iKQorICAgICAgICBoZWFkZXJzLmFwcGVuZCgiU2V0LUNvb2tpZTogSlNFU1NJT05JRD1BQkNERVJBTkRPTTEyMzsgUGF0aD0iKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYW50cy5jb20vIikKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hbnRzLmNvbS8iKQorICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSlNFU1NJT05JRD1BQkNERVJBTkRPTTEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIkNvb2tpZTIiKSwgJyRWZXJzaW9uPSIxIicpCisKKyAgICAgICAgIyBtaXNzaW5nIHBhdGggaW4gdGhlIHJlcXVlc3QgVVJJCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYW50cy5jb206ODA4MCIpCisgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJKU0VTU0lPTklEPUFCQ0RFUkFORE9NMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiQ29va2llMiIpLCAnJFZlcnNpb249IjEiJykKKworICAgIGRlZiB0ZXN0X3Nlc3Npb25fY29va2llcyhzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphcgorICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QKKworICAgICAgICB5ZWFyX3BsdXNfb25lID0gdGltZS5sb2NhbHRpbWUoKVswXSArIDEKKworICAgICAgICAjIENoZWNrIHNlc3Npb24gY29va2llcyBhcmUgZGVsZXRlZCBwcm9wZXJseSBieQorICAgICAgICAjIENvb2tpZUphci5jbGVhcl9zZXNzaW9uX2Nvb2tpZXMgbWV0aG9kCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgnaHR0cDovL3d3dy5wZXJsbWVpc3Rlci5jb20vc2NyaXB0cycpCisgICAgICAgIGhlYWRlcnMgPSBbXQorICAgICAgICBoZWFkZXJzLmFwcGVuZCgiU2V0LUNvb2tpZTogczE9c2Vzc2lvbjtQYXRoPS9zY3JpcHRzIikKKyAgICAgICAgaGVhZGVycy5hcHBlbmQoIlNldC1Db29raWU6IHAxPXBlcm07IERvbWFpbj0ucGVybG1laXN0ZXIuY29tOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIlBhdGg9LztleHBpcmVzPUZyaSwgMDItRmViLSVkIDIzOjI0OjIwIEdNVCIgJQorICAgICAgICAgICAgICAgICAgICAgICB5ZWFyX3BsdXNfb25lKQorICAgICAgICBoZWFkZXJzLmFwcGVuZCgiU2V0LUNvb2tpZTogcDI9cGVybTtQYXRoPS87ZXhwaXJlcz1GcmksICIKKyAgICAgICAgICAgICAgICAgICAgICAgIjAyLUZlYi0lZCAyMzoyNDoyMCBHTVQiICUgeWVhcl9wbHVzX29uZSkKKyAgICAgICAgaGVhZGVycy5hcHBlbmQoIlNldC1Db29raWU6IHMyPXNlc3Npb247UGF0aD0vc2NyaXB0czsiCisgICAgICAgICAgICAgICAgICAgICAgICJEb21haW49LnBlcmxtZWlzdGVyLmNvbSIpCisgICAgICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llMjogczM9c2Vzc2lvbjtWZXJzaW9uPTE7RGlzY2FyZDtQYXRoPSIvIicpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAnaHR0cDovL3d3dy5wZXJsbWVpc3Rlci5jb20vc2NyaXB0cycpCisKKyAgICAgICAgYyA9IENvb2tpZUphcigpCisgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQorICAgICAgICAjIEhvdyBtYW55IHNlc3Npb24vcGVybWFuZW50IGNvb2tpZXMgZG8gd2UgaGF2ZT8KKyAgICAgICAgY291bnRlciA9IHsic2Vzc2lvbl9hZnRlciI6IDAsCisgICAgICAgICAgICAgICAgICAgInBlcm1fYWZ0ZXIiOiAwLAorICAgICAgICAgICAgICAgICAgICJzZXNzaW9uX2JlZm9yZSI6IDAsCisgICAgICAgICAgICAgICAgICAgInBlcm1fYmVmb3JlIjogMH0KKyAgICAgICAgZm9yIGNvb2tpZSBpbiBjOgorICAgICAgICAgICAga2V5ID0gIiVzX2JlZm9yZSIgJSBjb29raWUudmFsdWUKKyAgICAgICAgICAgIGNvdW50ZXJba2V5XSA9IGNvdW50ZXJba2V5XSArIDEKKyAgICAgICAgYy5jbGVhcl9zZXNzaW9uX2Nvb2tpZXMoKQorICAgICAgICAjIEhvdyBtYW55IG5vdz8KKyAgICAgICAgZm9yIGNvb2tpZSBpbiBjOgorICAgICAgICAgICAga2V5ID0gIiVzX2FmdGVyIiAlIGNvb2tpZS52YWx1ZQorICAgICAgICAgICAgY291bnRlcltrZXldID0gY291bnRlcltrZXldICsgMQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKAorICAgICAgICAgICAgIyBhIHBlcm1hbmVudCBjb29raWUgZ290IGxvc3QgYWNjaWRlbnRhbGx5CisgICAgICAgICAgICBjb3VudGVyWyJwZXJtX2FmdGVyIl0gIT0gY291bnRlclsicGVybV9iZWZvcmUiXSBvcgorICAgICAgICAgICAgIyBhIHNlc3Npb24gY29va2llIGhhc24ndCBiZWVuIGNsZWFyZWQKKyAgICAgICAgICAgIGNvdW50ZXJbInNlc3Npb25fYWZ0ZXIiXSAhPSAwIG9yCisgICAgICAgICAgICAjIHdlIGRpZG4ndCBoYXZlIHNlc3Npb24gY29va2llcyBpbiB0aGUgZmlyc3QgcGxhY2UKKyAgICAgICAgICAgIGNvdW50ZXJbInNlc3Npb25fYmVmb3JlIl0gPT0gMCkpCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIERhdGVUaW1lVGVzdHMsCisgICAgICAgIEhlYWRlclRlc3RzLAorICAgICAgICBDb29raWVUZXN0cywKKyAgICAgICAgRmlsZUNvb2tpZUphclRlc3RzLAorICAgICAgICBMV1BDb29raWVUZXN0cywKKyAgICAgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb3B5LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29weS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjY0ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY29weS5weQpAQCAtMCwwICsxLDcxMiBAQAorIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIGNvcHkgbW9kdWxlLiIiIgorCitpbXBvcnQgY29weQoraW1wb3J0IGNvcHlfcmVnCitpbXBvcnQgd2Vha3JlZgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFRlc3RDb3B5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgQXR0ZW1wdCBmdWxsIGxpbmUgY292ZXJhZ2Ugb2YgY29weS5weSBmcm9tIHRvcCB0byBib3R0b20KKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5LkVycm9yIGlzIGNvcHkuZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGNvcHkuRXJyb3IsIEV4Y2VwdGlvbikpCisKKyAgICAjIFRoZSBjb3B5KCkgbWV0aG9kCisKKyAgICBkZWYgdGVzdF9jb3B5X2Jhc2ljKHNlbGYpOgorICAgICAgICB4ID0gNDIKKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisKKyAgICBkZWYgdGVzdF9jb3B5X2NvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19jb3B5X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIEMoc2VsZi5mb28pCisgICAgICAgIHggPSBDKDQyKQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2NsYXNzX18sIHguX19jbGFzc19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuZm9vLCB4LmZvbykKKworICAgIGRlZiB0ZXN0X2NvcHlfcmVnaXN0cnkoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgZm9vKToKKyAgICAgICAgICAgICAgICBvYmogPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgb2JqLmZvbyA9IGZvbworICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgZGVmIHBpY2tsZV9DKG9iaik6CisgICAgICAgICAgICByZXR1cm4gKEMsIChvYmouZm9vLCkpCisgICAgICAgIHggPSBDKDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvcHkuY29weSwgeCkKKyAgICAgICAgY29weV9yZWcucGlja2xlKEMsIHBpY2tsZV9DLCBDKQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X3JlZHVjZV9leChzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX2V4X18oc2VsZiwgcHJvdG8pOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsICJzaG91bGRuJ3QgY2FsbCB0aGlzIgorICAgICAgICB4ID0gQygpCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfcmVkdWNlKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgeCA9IEMoKQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X2NhbnQoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiX19yZWR1Y2UiKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsIG5hbWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkKKyAgICAgICAgeCA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjb3B5LkVycm9yLCBjb3B5LmNvcHksIHgpCisKKyAgICAjIFR5cGUtc3BlY2lmaWMgX2NvcHlfeHh4KCkgbWV0aG9kcworCisgICAgZGVmIHRlc3RfY29weV9hdG9taWMoc2VsZik6CisgICAgICAgIGNsYXNzIENsYXNzaWM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE5ld1N0eWxlKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRlc3RzID0gW05vbmUsIDQyLCAyTCoqMTAwLCAzLjE0LCBUcnVlLCBGYWxzZSwgMWosCisgICAgICAgICAgICAgICAgICJoZWxsbyIsIHUiaGVsbG9cdTEyMzQiLCBmLmZ1bmNfY29kZSwKKyAgICAgICAgICAgICAgICAgTmV3U3R5bGUsIHhyYW5nZSgxMCksIENsYXNzaWMsIG1heF0KKyAgICAgICAgZm9yIHggaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weS5jb3B5KHgpIGlzIHgsIHJlcHIoeCkpCisKKyAgICBkZWYgdGVzdF9jb3B5X2xpc3Qoc2VsZik6CisgICAgICAgIHggPSBbMSwgMiwgM10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X3R1cGxlKHNlbGYpOgorICAgICAgICB4ID0gKDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weS5jb3B5KHgpLCB4KQorCisgICAgZGVmIHRlc3RfY29weV9kaWN0KHNlbGYpOgorICAgICAgICB4ID0geyJmb28iOiAxLCAiYmFyIjogMn0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X2luc3RfdmFuaWxsYShzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmZvbywgb3RoZXIuZm9vKQorICAgICAgICB4ID0gQyg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X2luc3RfY29weShzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19jb3B5X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIEMoc2VsZi5mb28pCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmZvbywgb3RoZXIuZm9vKQorICAgICAgICB4ID0gQyg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X2luc3RfZ2V0aW5pdGFyZ3Moc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fZ2V0aW5pdGFyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuZm9vLCkKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfaW5zdF9nZXRzdGF0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB7ImZvbyI6IHNlbGYuZm9vfQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5mb28sIG90aGVyLmZvbykKKyAgICAgICAgeCA9IEMoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weS5jb3B5KHgpLCB4KQorCisgICAgZGVmIHRlc3RfY29weV9pbnN0X3NldHN0YXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gc3RhdGVbImZvbyJdCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmZvbywgb3RoZXIuZm9vKQorICAgICAgICB4ID0gQyg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X2luc3RfZ2V0c3RhdGVfc2V0c3RhdGUoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mb28KKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gc3RhdGUKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKKworICAgICMgVGhlIGRlZXBjb3B5KCkgbWV0aG9kCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9iYXNpYyhzZWxmKToKKyAgICAgICAgeCA9IDQyCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X21lbW8oc2VsZik6CisgICAgICAgICMgVGVzdHMgb2YgcmVmbGV4aXZlIG9iamVjdHMgYXJlIHVuZGVyIHR5cGUtc3BlY2lmaWMgc2VjdGlvbnMgYmVsb3cuCisgICAgICAgICMgVGhpcyB0ZXN0cyBvbmx5IHJlcGV0aXRpb25zIG9mIG9iamVjdHMuCisgICAgICAgIHggPSBbXQorICAgICAgICB4ID0gW3gsIHhdCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdIGlzIG5vdCB4WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeVswXSBpcyB5WzFdKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfaXNzdWJjbGFzcyhzZWxmKToKKyAgICAgICAgIyBYWFggTm90ZTogdGhlcmUncyBubyB3YXkgdG8gdGVzdCB0aGUgVHlwZUVycm9yIGNvbWluZyBvdXQgb2YKKyAgICAgICAgIyBpc3N1YmNsYXNzKCkgLS0gdGhpcyBjYW4gb25seSBoYXBwZW4gd2hlbiBhbiBleHRlbnNpb24KKyAgICAgICAgIyBtb2R1bGUgZGVmaW5lcyBhICJ0eXBlIiB0aGF0IGRvZXNuJ3QgZm9ybWFsbHkgaW5oZXJpdCBmcm9tCisgICAgICAgICMgdHlwZS4KKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weS5kZWVwY29weShDKSwgQykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2RlZXBjb3B5KHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fZGVlcGNvcHlfXyhzZWxmLCBtZW1vPU5vbmUpOgorICAgICAgICAgICAgICAgIHJldHVybiBDKHNlbGYuZm9vKQorICAgICAgICB4ID0gQyg0MikKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9fY2xhc3NfXywgeC5fX2NsYXNzX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5mb28sIHguZm9vKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfcmVnaXN0cnkoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgZm9vKToKKyAgICAgICAgICAgICAgICBvYmogPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgb2JqLmZvbyA9IGZvbworICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgZGVmIHBpY2tsZV9DKG9iaik6CisgICAgICAgICAgICByZXR1cm4gKEMsIChvYmouZm9vLCkpCisgICAgICAgIHggPSBDKDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvcHkuZGVlcGNvcHksIHgpCisgICAgICAgIGNvcHlfcmVnLnBpY2tsZShDLCBwaWNrbGVfQywgQykKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlZHVjZV9leChzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX2V4X18oc2VsZiwgcHJvdG8pOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsICJzaG91bGRuJ3QgY2FsbCB0aGlzIgorICAgICAgICB4ID0gQygpCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9yZWR1Y2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICB4ID0gQygpCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9jYW50KHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoIl9fcmVkdWNlIik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCBuYW1lCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY29weS5FcnJvciwgY29weS5kZWVwY29weSwgeCkKKworICAgICMgVHlwZS1zcGVjaWZpYyBfZGVlcGNvcHlfeHh4KCkgbWV0aG9kcworCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfYXRvbWljKHNlbGYpOgorICAgICAgICBjbGFzcyBDbGFzc2ljOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBOZXdTdHlsZShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0ZXN0cyA9IFtOb25lLCA0MiwgMkwqKjEwMCwgMy4xNCwgVHJ1ZSwgRmFsc2UsIDFqLAorICAgICAgICAgICAgICAgICAiaGVsbG8iLCB1ImhlbGxvXHUxMjM0IiwgZi5mdW5jX2NvZGUsCisgICAgICAgICAgICAgICAgIE5ld1N0eWxlLCB4cmFuZ2UoMTApLCBDbGFzc2ljLCBtYXhdCisgICAgICAgIGZvciB4IGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkuZGVlcGNvcHkoeCkgaXMgeCwgcmVwcih4KSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2xpc3Qoc2VsZik6CisgICAgICAgIHggPSBbWzEsIDJdLCAzXQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyBub3QgeVswXSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlZmxleGl2ZV9saXN0KHNlbGYpOgorICAgICAgICB4ID0gW10KKyAgICAgICAgeC5hcHBlbmQoeCkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjbXAsIHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeVswXSBpcyB5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih5KSwgMSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3R1cGxlKHNlbGYpOgorICAgICAgICB4ID0gKFsxLCAyXSwgMykKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyBub3QgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0gaXMgbm90IHlbMF0pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9yZWZsZXhpdmVfdHVwbGUoc2VsZik6CisgICAgICAgIHggPSAoW10sKQorICAgICAgICB4WzBdLmFwcGVuZCh4KQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNtcCwgeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdIGlzIG5vdCB4WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeVswXVswXSBpcyB5KQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfZGljdChzZWxmKToKKyAgICAgICAgeCA9IHsiZm9vIjogWzEsIDJdLCAiYmFyIjogM30KKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyBub3QgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbImZvbyJdIGlzIG5vdCB5WyJmb28iXSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlZmxleGl2ZV9kaWN0KHNlbGYpOgorICAgICAgICB4ID0ge30KKyAgICAgICAgeFsnZm9vJ10gPSB4CisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY21wLCB5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHlbJ2ZvbyddIGlzIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHkpLCAxKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfa2VlcGFsaXZlKHNlbGYpOgorICAgICAgICBtZW1vID0ge30KKyAgICAgICAgeCA9IDQyCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgsIG1lbW8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZW1vW2lkKHgpXSBpcyB4KQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfaW5zdF92YW5pbGxhKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKFs0Ml0pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2luc3RfZGVlcGNvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fZGVlcGNvcHlfXyhzZWxmLCBtZW1vKToKKyAgICAgICAgICAgICAgICByZXR1cm4gQyhjb3B5LmRlZXBjb3B5KHNlbGYuZm9vLCBtZW1vKSkKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKFs0Ml0pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X2dldGluaXRhcmdzKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBfX2dldGluaXRhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLmZvbywpCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmZvbywgb3RoZXIuZm9vKQorICAgICAgICB4ID0gQyhbNDJdKQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfaW5zdF9nZXRzdGF0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB7ImZvbyI6IHNlbGYuZm9vfQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5mb28sIG90aGVyLmZvbykKKyAgICAgICAgeCA9IEMoWzQyXSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2luc3Rfc2V0c3RhdGUoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBzdGF0ZVsiZm9vIl0KKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKFs0Ml0pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X2dldHN0YXRlX3NldHN0YXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZm9vCisgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IHN0YXRlCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmZvbywgb3RoZXIuZm9vKQorICAgICAgICB4ID0gQyhbNDJdKQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfcmVmbGV4aXZlX2luc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeC5mb28gPSB4CisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgeSkKKworICAgICMgX3JlY29uc3RydWN0KCkKKworICAgIGRlZiB0ZXN0X3JlY29uc3RydWN0X3N0cmluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQorCisgICAgZGVmIHRlc3RfcmVjb25zdHJ1Y3Rfbm9zdGF0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChDLCAoKSkKKyAgICAgICAgeCA9IEMoKQorICAgICAgICB4LmZvbyA9IDQyCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuX19jbGFzc19fIGlzIHguX19jbGFzc19fKQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5fX2NsYXNzX18gaXMgeC5fX2NsYXNzX18pCisKKyAgICBkZWYgdGVzdF9yZWNvbnN0cnVjdF9zdGF0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChDLCAoKSwgc2VsZi5fX2RpY3RfXykKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuX19kaWN0X18sIG90aGVyLl9fZGljdF9fKQorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgeCA9IEMoKQorICAgICAgICB4LmZvbyA9IFs0Ml0KKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKKworICAgIGRlZiB0ZXN0X3JlY29uc3RydWN0X3N0YXRlX3NldHN0YXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKEMsICgpLCBzZWxmLl9fZGljdF9fKQorICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoc3RhdGUpCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLl9fZGljdF9fLCBvdGhlci5fX2RpY3RfXykKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeC5mb28gPSBbNDJdCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCisKKyAgICBkZWYgdGVzdF9yZWNvbnN0cnVjdF9yZWZsZXhpdmUoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgeCA9IEMoKQorICAgICAgICB4LmZvbyA9IHgKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyB5KQorCisgICAgIyBBZGRpdGlvbnMgZm9yIFB5dGhvbiAyLjMgYW5kIHBpY2tsZSBwcm90b2NvbCAyCisKKyAgICBkZWYgdGVzdF9yZWR1Y2VfNHR1cGxlKHNlbGYpOgorICAgICAgICBjbGFzcyBDKGxpc3QpOgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChDLCAoKSwgc2VsZi5fX2RpY3RfXywgaXRlcihzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGNtcChsaXN0KHNlbGYpLCBsaXN0KG90aGVyKSkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtcChzZWxmLl9fZGljdF9fLCBvdGhlci5fX2RpY3RfXykpCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICB4ID0gQyhbWzEsIDJdLCAzXSkKKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyB5WzBdKQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyBub3QgeVswXSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZV81dHVwbGUoc2VsZik6CisgICAgICAgIGNsYXNzIEMoZGljdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKEMsICgpLCBzZWxmLl9fZGljdF9fLCBOb25lLCBzZWxmLml0ZXJpdGVtcygpKQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAoY21wKGRpY3Qoc2VsZiksIGxpc3QoZGljdCkpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBjbXAoc2VsZi5fX2RpY3RfXywgb3RoZXIuX19kaWN0X18pKQorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgeCA9IEMoWygiZm9vIiwgWzEsIDJdKSwgKCJiYXIiLCAzKV0pCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyBub3QgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbImZvbyJdIGlzIHlbImZvbyJdKQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFsiZm9vIl0gaXMgbm90IHlbImZvbyJdKQorCisgICAgZGVmIHRlc3RfY29weV9zbG90cyhzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJmb28iXQorICAgICAgICB4ID0gQygpCisgICAgICAgIHguZm9vID0gWzQyXQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LmZvbyBpcyB5LmZvbykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3Nsb3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbImZvbyJdCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeC5mb28gPSBbNDJdCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIHkuZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5mb28gaXMgbm90IHkuZm9vKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfZGljdF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQyhkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkPU5vbmUpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBkOgorICAgICAgICAgICAgICAgICAgICBkID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLl9rZXlzID0gbGlzdChkLmtleXMoKSkKKyAgICAgICAgICAgICAgICBkaWN0Ll9faW5pdF9fKHNlbGYsIGQpCisgICAgICAgICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCBpdGVtKToKKyAgICAgICAgICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgaXRlbSkKKyAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYuX2tleXM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2tleXMuYXBwZW5kKGtleSkKKyAgICAgICAgeCA9IEMoZD17J2Zvbyc6MH0pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9rZXlzLCB5Ll9rZXlzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyBub3QgeSkKKyAgICAgICAgeFsnYmFyJ10gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoeCwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh4Ll9rZXlzLCB5Ll9rZXlzKQorCisgICAgZGVmIHRlc3RfY29weV9saXN0X3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBDKGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB4ID0gQyhbWzEsIDJdLCAzXSkKKyAgICAgICAgeC5mb28gPSBbNCwgNV0KKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIHkuZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyB5WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5mb28gaXMgeS5mb28pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9saXN0X3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBDKGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB4ID0gQyhbWzEsIDJdLCAzXSkKKyAgICAgICAgeC5mb28gPSBbNCwgNV0KKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vLCB5LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0gaXMgbm90IHlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LmZvbyBpcyBub3QgeS5mb28pCisKKyAgICBkZWYgdGVzdF9jb3B5X3R1cGxlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBDKHR1cGxlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgeCA9IEMoWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHgpLCAoMSwgMiwgMykpCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSh5KSwgKDEsIDIsIDMpKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfdHVwbGVfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEModHVwbGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB4ID0gQyhbWzEsIDJdLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSh4KSwgKFsxLCAyXSwgMykpCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoeSksIChbMSwgMl0sIDMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyBub3QgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0gaXMgbm90IHlbMF0pCisKKyAgICBkZWYgdGVzdF9nZXRzdGF0ZV9leGMoc2VsZik6CisgICAgICAgIGNsYXNzIEV2aWxTdGF0ZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiYWluJ3QgZ290IG5vIHN0aWNraW4nIHN0YXRlIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb3B5LmNvcHksIEV2aWxTdGF0ZSgpKQorCisgICAgZGVmIHRlc3RfY29weV9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoZ2xvYmFsX2ZvbyksIGdsb2JhbF9mb28pCisgICAgICAgIGRlZiBmb28oeCwgeSk6IHJldHVybiB4K3kKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoZm9vKSwgZm9vKQorICAgICAgICBiYXIgPSBsYW1iZGE6IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoYmFyKSwgYmFyKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfZnVuY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weS5kZWVwY29weShnbG9iYWxfZm9vKSwgZ2xvYmFsX2ZvbykKKyAgICAgICAgZGVmIGZvbyh4LCB5KTogcmV0dXJuIHgreQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuZGVlcGNvcHkoZm9vKSwgZm9vKQorICAgICAgICBiYXIgPSBsYW1iZGE6IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmRlZXBjb3B5KGJhciksIGJhcikKKworICAgIGRlZiBfY2hlY2tfd2Vha3JlZihzZWxmLCBfY29weSk6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2JqID0gQygpCisgICAgICAgIHggPSB3ZWFrcmVmLnJlZihvYmopCisgICAgICAgIHkgPSBfY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQorICAgICAgICBkZWwgb2JqCisgICAgICAgIHkgPSBfY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQorCisgICAgZGVmIHRlc3RfY29weV93ZWFrcmVmKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja193ZWFrcmVmKGNvcHkuY29weSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3dlYWtyZWYoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3dlYWtyZWYoY29weS5kZWVwY29weSkKKworICAgIGRlZiBfY2hlY2tfY29weV93ZWFrZGljdChzZWxmLCBfZGljdHR5cGUpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEsIGIsIGMsIGQgPSBbQygpIGZvciBpIGluIHhyYW5nZSg0KV0KKyAgICAgICAgdSA9IF9kaWN0dHlwZSgpCisgICAgICAgIHVbYV0gPSBiCisgICAgICAgIHVbY10gPSBkCisgICAgICAgIHYgPSBjb3B5LmNvcHkodSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh2IGlzIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2W2FdLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbY10sIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCAyKQorICAgICAgICBkZWwgYywgZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgMSkKKyAgICAgICAgeCwgeSA9IEMoKSwgQygpCisgICAgICAgICMgVGhlIHVuZGVybHlpbmcgY29udGFpbmVycyBhcmUgZGVjb3VwbGVkCisgICAgICAgIHZbeF0gPSB5CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oeCwgdSkKKworICAgIGRlZiB0ZXN0X2NvcHlfd2Vha2tleWRpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2NvcHlfd2Vha2RpY3Qod2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSkKKworICAgIGRlZiB0ZXN0X2NvcHlfd2Vha3ZhbHVlZGljdChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY29weV93ZWFrZGljdCh3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV93ZWFra2V5ZGljdChzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIHNlbGYuaSA9IGkKKyAgICAgICAgYSwgYiwgYywgZCA9IFtDKGkpIGZvciBpIGluIHhyYW5nZSg0KV0KKyAgICAgICAgdSA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICB1W2FdID0gYgorICAgICAgICB1W2NdID0gZAorICAgICAgICAjIEtleXMgYXJlbid0IGNvcGllZCwgdmFsdWVzIGFyZQorICAgICAgICB2ID0gY29weS5kZWVwY29weSh1KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHYsIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHZbYV0gaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh2W2NdIGlzIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlthXS5pLCBiLmkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodltjXS5pLCBkLmkpCisgICAgICAgIGRlbCBjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCAxKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfd2Vha3ZhbHVlZGljdChzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIHNlbGYuaSA9IGkKKyAgICAgICAgYSwgYiwgYywgZCA9IFtDKGkpIGZvciBpIGluIHhyYW5nZSg0KV0KKyAgICAgICAgdSA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgpCisgICAgICAgIHVbYV0gPSBiCisgICAgICAgIHVbY10gPSBkCisgICAgICAgICMgS2V5cyBhcmUgY29waWVkLCB2YWx1ZXMgYXJlbid0CisgICAgICAgIHYgPSBjb3B5LmRlZXBjb3B5KHUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodiwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDIpCisgICAgICAgICh4LCB5KSwgKHosIHQpID0gc29ydGVkKHYuaXRlbXMoKSwga2V5PWxhbWJkYSBwYWlyOiBwYWlyWzBdLmkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCBpcyBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguaSwgYS5pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHogaXMgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6LmksIGMuaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQgaXMgZCkKKyAgICAgICAgZGVsIHgsIHksIHosIHQKKyAgICAgICAgZGVsIGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDEpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9ib3VuZF9tZXRob2Qoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIG0oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmID0gRm9vKCkKKyAgICAgICAgZi5iID0gZi5tCisgICAgICAgIGcgPSBjb3B5LmRlZXBjb3B5KGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5tLCBnLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnLmIuaW1fc2VsZiBpcyBnKQorICAgICAgICBnLmIoKQorCisKK2RlZiBnbG9iYWxfZm9vKHgsIHkpOiByZXR1cm4geCt5CisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDb3B5KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb3B5X3JlZy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NvcHlfcmVnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZGI4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jb3B5X3JlZy5weQpAQCAtMCwwICsxLDEyMSBAQAoraW1wb3J0IGNvcHlfcmVnCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEV4dGVuc2lvblNhdmVyCisKK2NsYXNzIEM6CisgICAgcGFzcworCisKK2NsYXNzIFdpdGhvdXRTbG90cyhvYmplY3QpOgorICAgIHBhc3MKKworY2xhc3MgV2l0aFdlYWtyZWYob2JqZWN0KToKKyAgICBfX3Nsb3RzX18gPSAoJ19fd2Vha3JlZl9fJywpCisKK2NsYXNzIFdpdGhQcml2YXRlKG9iamVjdCk6CisgICAgX19zbG90c19fID0gKCdfX3NwYW0nLCkKKworY2xhc3MgV2l0aFNpbmdsZVN0cmluZyhvYmplY3QpOgorICAgIF9fc2xvdHNfXyA9ICdzcGFtJworCitjbGFzcyBXaXRoSW5oZXJpdGVkKFdpdGhTaW5nbGVTdHJpbmcpOgorICAgIF9fc2xvdHNfXyA9ICgnZWdncycsKQorCisKK2NsYXNzIENvcHlSZWdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb3B5X3JlZy5waWNrbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEMsIE5vbmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ub25jYWxsYWJsZV9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29weV9yZWcucGlja2xlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKDEpLCAibm90IGEgY2FsbGFibGUiKQorCisgICAgZGVmIHRlc3Rfbm9uY2FsbGFibGVfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29weV9yZWcucGlja2xlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKDEpLCBpbnQsICJub3QgYSBjYWxsYWJsZSIpCisKKyAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgorICAgICAgICBpbXBvcnQgY29weQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGNvcHkuY29weShUcnVlKSkKKworICAgIGRlZiB0ZXN0X2V4dGVuc2lvbl9yZWdpc3RyeShzZWxmKToKKyAgICAgICAgbW9kLCBmdW5jLCBjb2RlID0gJ2p1bmsxICcsICcganVuazInLCAweGFiY2QKKyAgICAgICAgZSA9IEV4dGVuc2lvblNhdmVyKGNvZGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgU2hvdWxkbid0IGJlIGluIHJlZ2lzdHJ5IG5vdy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvcHlfcmVnLnJlbW92ZV9leHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QsIGZ1bmMsIGNvZGUpCisgICAgICAgICAgICBjb3B5X3JlZy5hZGRfZXh0ZW5zaW9uKG1vZCwgZnVuYywgY29kZSkKKyAgICAgICAgICAgICMgU2hvdWxkIGJlIGluIHRoZSByZWdpc3RyeS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5X3JlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5W21vZCwgZnVuY10gPT0gY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5X3JlZy5faW52ZXJ0ZWRfcmVnaXN0cnlbY29kZV0gPT0gKG1vZCwgZnVuYykpCisgICAgICAgICAgICAjIFNob3VsZG4ndCBiZSBpbiB0aGUgY2FjaGUuCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGNvZGUsIGNvcHlfcmVnLl9leHRlbnNpb25fY2FjaGUpCisgICAgICAgICAgICAjIFJlZHVuZGFudCByZWdpc3RyYXRpb24gc2hvdWxkIGJlIE9LLgorICAgICAgICAgICAgY29weV9yZWcuYWRkX2V4dGVuc2lvbihtb2QsIGZ1bmMsIGNvZGUpICAjIHNob3VsZG4ndCBibG93IHVwCisgICAgICAgICAgICAjIENvbmZsaWN0aW5nIGNvZGUuCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb3B5X3JlZy5hZGRfZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLCBmdW5jLCBjb2RlICsgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvcHlfcmVnLnJlbW92ZV9leHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QsIGZ1bmMsIGNvZGUgKyAxKQorICAgICAgICAgICAgIyBDb25mbGljdGluZyBtb2R1bGUgbmFtZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvcHlfcmVnLmFkZF9leHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RbMTpdLCBmdW5jLCBjb2RlICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvcHlfcmVnLnJlbW92ZV9leHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RbMTpdLCBmdW5jLCBjb2RlICkKKyAgICAgICAgICAgICMgQ29uZmxpY3RpbmcgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvcHlfcmVnLmFkZF9leHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QsIGZ1bmNbMTpdLCBjb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29weV9yZWcucmVtb3ZlX2V4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCwgZnVuY1sxOl0sIGNvZGUpCisgICAgICAgICAgICAjIENhbid0IHJlbW92ZSBvbmUgdGhhdCBpc24ndCByZWdpc3RlcmVkIGF0IGFsbC4KKyAgICAgICAgICAgIGlmIGNvZGUgKyAxIG5vdCBpbiBjb3B5X3JlZy5faW52ZXJ0ZWRfcmVnaXN0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29weV9yZWcucmVtb3ZlX2V4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RbMTpdLCBmdW5jWzE6XSwgY29kZSArIDEpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGUucmVzdG9yZSgpCisKKyAgICAgICAgIyBTaG91bGRuJ3QgYmUgdGhlcmUgYW55bW9yZS4KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigobW9kLCBmdW5jKSwgY29weV9yZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSkKKyAgICAgICAgIyBUaGUgY29kZSAqbWF5KiBiZSBpbiBjb3B5X3JlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LCB0aG91Z2gsIGlmCisgICAgICAgICMgd2UgaGFwcGVuZWQgdG8gcGljayBvbiBhIHJlZ2lzdGVyZWQgY29kZS4gIFNvIGRvbid0IGNoZWNrIGZvcgorICAgICAgICAjIHRoYXQuCisKKyAgICAgICAgIyBDaGVjayB2YWxpZCBjb2RlcyBhdCB0aGUgbGltaXRzLgorICAgICAgICBmb3IgY29kZSBpbiAxLCAweDdmZmZmZmZmOgorICAgICAgICAgICAgZSA9IEV4dGVuc2lvblNhdmVyKGNvZGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29weV9yZWcuYWRkX2V4dGVuc2lvbihtb2QsIGZ1bmMsIGNvZGUpCisgICAgICAgICAgICAgICAgY29weV9yZWcucmVtb3ZlX2V4dGVuc2lvbihtb2QsIGZ1bmMsIGNvZGUpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGUucmVzdG9yZSgpCisKKyAgICAgICAgIyBFbnN1cmUgaW52YWxpZCBjb2RlcyBibG93IHVwLgorICAgICAgICBmb3IgY29kZSBpbiAtMSwgMCwgMHg4MDAwMDAwMEw6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb3B5X3JlZy5hZGRfZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLCBmdW5jLCBjb2RlKQorCisgICAgZGVmIHRlc3Rfc2xvdG5hbWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHlfcmVnLl9zbG90bmFtZXMoV2l0aG91dFNsb3RzKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRoV2Vha3JlZiksIFtdKQorICAgICAgICBleHBlY3RlZCA9IFsnX1dpdGhQcml2YXRlX19zcGFtJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhQcml2YXRlKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRoU2luZ2xlU3RyaW5nKSwgWydzcGFtJ10pCisgICAgICAgIGV4cGVjdGVkID0gWydlZ2dzJywgJ3NwYW0nXQorICAgICAgICBleHBlY3RlZC5zb3J0KCkKKyAgICAgICAgcmVzdWx0ID0gY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRoSW5oZXJpdGVkKQorICAgICAgICByZXN1bHQuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb3B5UmVnVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY3BpY2tsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NwaWNrbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjNzAwYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2NwaWNrbGUucHkKQEAgLTAsMCArMSwyMzcgQEAKK2ltcG9ydCBjUGlja2xlCitpbXBvcnQgY1N0cmluZ0lPCitpbXBvcnQgaW8KK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgKEFic3RyYWN0UGlja2xlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdtZW1QaWNrbGVUZXN0cykKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIGNTdHJpbmdJT01peGluOgorICAgIG91dHB1dCA9IGlucHV0ID0gY1N0cmluZ0lPLlN0cmluZ0lPCisKKyAgICBkZWYgY2xvc2Uoc2VsZiwgZik6CisgICAgICAgIHBhc3MKKworY2xhc3MgQnl0ZXNJT01peGluOgorICAgIG91dHB1dCA9IGlucHV0ID0gaW8uQnl0ZXNJTworCisgICAgZGVmIGNsb3NlKHNlbGYsIGYpOgorICAgICAgICBwYXNzCisKK2NsYXNzIEZpbGVJT01peGluOgorCisgICAgZGVmIG91dHB1dChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diKycpCisKKyAgICBkZWYgaW5wdXQoc2VsZiwgZGF0YSk6CisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3YisnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBjbG9zZShzZWxmLCBmKToKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworCitjbGFzcyBjUGlja2xlVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cywgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cyk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZHVtcHMgPSBjUGlja2xlLmR1bXBzCisgICAgICAgIHNlbGYubG9hZHMgPSBjUGlja2xlLmxvYWRzCisKKyAgICBlcnJvciA9IGNQaWNrbGUuQmFkUGlja2xlR2V0CisgICAgbW9kdWxlID0gY1BpY2tsZQorCitjbGFzcyBjUGlja2xlUGlja2xlclRlc3RzKEFic3RyYWN0UGlja2xlVGVzdHMpOgorCisgICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCk6CisgICAgICAgIGYgPSBzZWxmLm91dHB1dCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBjUGlja2xlLlBpY2tsZXIoZiwgcHJvdG8pCisgICAgICAgICAgICBwLmR1bXAoYXJnKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoZikKKworICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgICAgICBmID0gc2VsZi5pbnB1dChidWYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBjUGlja2xlLlVucGlja2xlcihmKQorICAgICAgICAgICAgcmV0dXJuIHAubG9hZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsb3NlKGYpCisKKyAgICBlcnJvciA9IGNQaWNrbGUuQmFkUGlja2xlR2V0CisKK2NsYXNzIGNTdHJpbmdJT0NQaWNrbGVyVGVzdHMoY1N0cmluZ0lPTWl4aW4sIGNQaWNrbGVQaWNrbGVyVGVzdHMpOgorICAgIHBhc3MKKworY2xhc3MgQnl0ZXNJT0NQaWNrbGVyVGVzdHMoQnl0ZXNJT01peGluLCBjUGlja2xlUGlja2xlclRlc3RzKToKKyAgICBwYXNzCisKK2NsYXNzIEZpbGVJT0NQaWNrbGVyVGVzdHMoRmlsZUlPTWl4aW4sIGNQaWNrbGVQaWNrbGVyVGVzdHMpOgorICAgIHBhc3MKKworCitjbGFzcyBjUGlja2xlTGlzdFBpY2tsZXJUZXN0cyhBYnN0cmFjdFBpY2tsZVRlc3RzKToKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTApOgorICAgICAgICBwID0gY1BpY2tsZS5QaWNrbGVyKHByb3RvKQorICAgICAgICBwLmR1bXAoYXJnKQorICAgICAgICByZXR1cm4gcC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgKmFyZ3MpOgorICAgICAgICBmID0gc2VsZi5pbnB1dChhcmdzWzBdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0gY1BpY2tsZS5VbnBpY2tsZXIoZikKKyAgICAgICAgICAgIHJldHVybiBwLmxvYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jbG9zZShmKQorCisgICAgZXJyb3IgPSBjUGlja2xlLkJhZFBpY2tsZUdldAorCitjbGFzcyBjU3RyaW5nSU9DUGlja2xlckxpc3RUZXN0cyhjU3RyaW5nSU9NaXhpbiwgY1BpY2tsZUxpc3RQaWNrbGVyVGVzdHMpOgorICAgIHBhc3MKKworY2xhc3MgQnl0ZXNJT0NQaWNrbGVyTGlzdFRlc3RzKEJ5dGVzSU9NaXhpbiwgY1BpY2tsZUxpc3RQaWNrbGVyVGVzdHMpOgorICAgIHBhc3MKKworY2xhc3MgRmlsZUlPQ1BpY2tsZXJMaXN0VGVzdHMoRmlsZUlPTWl4aW4sIGNQaWNrbGVMaXN0UGlja2xlclRlc3RzKToKKyAgICBwYXNzCisKKworY2xhc3MgY1BpY2tsZUZhc3RQaWNrbGVyVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cyk6CisKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wKToKKyAgICAgICAgZiA9IHNlbGYub3V0cHV0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IGNQaWNrbGUuUGlja2xlcihmLCBwcm90bykKKyAgICAgICAgICAgIHAuZmFzdCA9IDEKKyAgICAgICAgICAgIHAuZHVtcChhcmcpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jbG9zZShmKQorCisgICAgZGVmIGxvYWRzKHNlbGYsICphcmdzKToKKyAgICAgICAgZiA9IHNlbGYuaW5wdXQoYXJnc1swXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IGNQaWNrbGUuVW5waWNrbGVyKGYpCisgICAgICAgICAgICByZXR1cm4gcC5sb2FkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoZikKKworICAgIGVycm9yID0gY1BpY2tsZS5CYWRQaWNrbGVHZXQKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9saXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFBpY2tsZVRlc3RzLnRlc3RfcmVjdXJzaXZlX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfdHVwbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0UGlja2xlVGVzdHMudGVzdF9yZWN1cnNpdmVfdHVwbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfaW5zdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RQaWNrbGVUZXN0cy50ZXN0X3JlY3Vyc2l2ZV9pbnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2RpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0UGlja2xlVGVzdHMudGVzdF9yZWN1cnNpdmVfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9tdWx0aShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RQaWNrbGVUZXN0cy50ZXN0X3JlY3Vyc2l2ZV9tdWx0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikKKworICAgIGRlZiB0ZXN0X25vbnJlY3Vyc2l2ZV9kZWVwKHNlbGYpOgorICAgICAgICAjIElmIGl0J3Mgbm90IGN5Y2xpYywgaXQgc2hvdWxkIHBpY2tsZSBPSyBldmVuIGlmIHRoZSBuZXN0aW5nCisgICAgICAgICMgZGVwdGggZXhjZWVkcyBQWV9DUElDS0xFX0ZBU1RfTElNSVQuICBUaGF0IGhhcHBlbnMgdG8gYmUKKyAgICAgICAgIyA1MCB0b2RheS4gIEphY2sgSmFuc2VuIHJlcG9ydGVkIHN0YWNrIG92ZXJmbG93IG9uIE1hYyBPUyA5CisgICAgICAgICMgYXQgNjQuCisgICAgICAgIGEgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSg2MCk6CisgICAgICAgICAgICBhID0gW2FdCisgICAgICAgIGIgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoYSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworY2xhc3MgY1N0cmluZ0lPQ1BpY2tsZXJGYXN0VGVzdHMoY1N0cmluZ0lPTWl4aW4sIGNQaWNrbGVGYXN0UGlja2xlclRlc3RzKToKKyAgICBwYXNzCisKK2NsYXNzIEJ5dGVzSU9DUGlja2xlckZhc3RUZXN0cyhCeXRlc0lPTWl4aW4sIGNQaWNrbGVGYXN0UGlja2xlclRlc3RzKToKKyAgICBwYXNzCisKK2NsYXNzIEZpbGVJT0NQaWNrbGVyRmFzdFRlc3RzKEZpbGVJT01peGluLCBjUGlja2xlRmFzdFBpY2tsZXJUZXN0cyk6CisgICAgcGFzcworCisKK2NsYXNzIGNQaWNrbGVQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMoQWJzdHJhY3RQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMpOgorCisgICAgcGlja2xlcl9jbGFzcyA9IGNQaWNrbGUuUGlja2xlcgorICAgIHVucGlja2xlcl9jbGFzcyA9IGNQaWNrbGUuVW5waWNrbGVyCisKK2NsYXNzIGNQaWNrbGVCaWdtZW1QaWNrbGVUZXN0cyhCaWdtZW1QaWNrbGVUZXN0cyk6CisKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PTApOgorICAgICAgICAjIElnbm9yZSBmYXN0CisgICAgICAgIHJldHVybiBjUGlja2xlLmR1bXBzKGFyZywgcHJvdG8pCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmKToKKyAgICAgICAgIyBJZ25vcmUgZmFzdAorICAgICAgICByZXR1cm4gY1BpY2tsZS5sb2FkcyhidWYpCisKKworY2xhc3MgTm9kZShvYmplY3QpOgorICAgIHBhc3MKKworY2xhc3MgY1BpY2tsZURlZXBSZWN1cnNpdmUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2lzc3VlMjcwMihzZWxmKToKKyAgICAgICAgIyBUaGlzIHNob3VsZCByYWlzZSBhIFJlY3Vyc2lvbkxpbWl0IGJ1dCBpbiBzb21lCisgICAgICAgICMgcGxhdGZvcm1zIChGcmVlQlNELCB3aW4zMikgc29tZXRpbWVzIHJhaXNlcyBLZXlFcnJvciBpbnN0ZWFkLAorICAgICAgICAjIG9yIGp1c3Qgc2lsZW50bHkgdGVybWluYXRlcyB0aGUgaW50ZXJwcmV0ZXIgKD1jcmFzaGVzKS4KKyAgICAgICAgbm9kZXMgPSBbTm9kZSgpIGZvciBpIGluIHJhbmdlKDUwMCldCisgICAgICAgIGZvciBuIGluIG5vZGVzOgorICAgICAgICAgICAgbi5jb25uZWN0aW9ucyA9IGxpc3Qobm9kZXMpCisgICAgICAgICAgICBuLmNvbm5lY3Rpb25zLnJlbW92ZShuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFJ1bnRpbWVFcnJvciksIGNQaWNrbGUuZHVtcHMsIG4pCisKKyAgICBkZWYgdGVzdF9pc3N1ZTMxNzkoc2VsZik6CisgICAgICAgICMgU2FmZSB0ZXN0LCBiZWNhdXNlIEkgYnJva2UgdGhpcyBjYXNlIHdoZW4gZml4aW5nIHRoZQorICAgICAgICAjIGJlaGF2aW91ciBmb3IgdGhlIHByZXZpb3VzIHRlc3QuCisgICAgICAgIHJlcz1bXQorICAgICAgICBmb3IgeCBpbiByYW5nZSgxLDIwMDApOgorICAgICAgICAgICAgcmVzLmFwcGVuZChkaWN0KGRvYz14LCBzaW1pbGFyPVtdKSkKKyAgICAgICAgY1BpY2tsZS5kdW1wcyhyZXMpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIGNQaWNrbGVUZXN0cywKKyAgICAgICAgY1N0cmluZ0lPQ1BpY2tsZXJUZXN0cywKKyAgICAgICAgQnl0ZXNJT0NQaWNrbGVyVGVzdHMsCisgICAgICAgIEZpbGVJT0NQaWNrbGVyVGVzdHMsCisgICAgICAgIGNTdHJpbmdJT0NQaWNrbGVyTGlzdFRlc3RzLAorICAgICAgICBCeXRlc0lPQ1BpY2tsZXJMaXN0VGVzdHMsCisgICAgICAgIEZpbGVJT0NQaWNrbGVyTGlzdFRlc3RzLAorICAgICAgICBjU3RyaW5nSU9DUGlja2xlckZhc3RUZXN0cywKKyAgICAgICAgQnl0ZXNJT0NQaWNrbGVyRmFzdFRlc3RzLAorICAgICAgICBGaWxlSU9DUGlja2xlckZhc3RUZXN0cywKKyAgICAgICAgY1BpY2tsZURlZXBSZWN1cnNpdmUsCisgICAgICAgIGNQaWNrbGVQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMsCisgICAgICAgIGNQaWNrbGVCaWdtZW1QaWNrbGVUZXN0cywKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzZmU2MgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CkBAIC0wLDAgKzEsMTI3IEBACisiIiJUZXN0IHN1aXRlIGZvciB0aGUgY1Byb2ZpbGUgbW9kdWxlLiIiIgorCitpbXBvcnQgc3lzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rCisKKyMgcmlwIG9mZiBhbGwgaW50ZXJlc3Rpbmcgc3R1ZmYgZnJvbSB0ZXN0X3Byb2ZpbGUKK2ltcG9ydCBjUHJvZmlsZQorZnJvbSB0ZXN0LnRlc3RfcHJvZmlsZSBpbXBvcnQgUHJvZmlsZVRlc3QsIHJlZ2VuZXJhdGVfZXhwZWN0ZWRfb3V0cHV0CisKK2NsYXNzIENQcm9maWxlVGVzdChQcm9maWxlVGVzdCk6CisgICAgcHJvZmlsZXJjbGFzcyA9IGNQcm9maWxlLlByb2ZpbGUKKyAgICBleHBlY3RlZF9saXN0X3NvcnRfb3V0cHV0ID0gInttZXRob2QgJ3NvcnQnIG9mICdsaXN0JyBvYmplY3RzfSIKKworICAgICMgSXNzdWUgMzg5NS4KKyAgICBkZWYgdGVzdF9iYWRfY291bnRlcl9kdXJpbmdfZGVhbGxvYyhzZWxmKToKKyAgICAgICAgaW1wb3J0IF9sc3Byb2YKKyAgICAgICAgIyBNdXN0IHVzZSBhIGZpbGUgYXMgU3RyaW5nSU8gZG9lc24ndCB0cmlnZ2VyIHRoZSBidWcuCisgICAgICAgIHN5cy5zdGRlcnIgPSBvcGVuKFRFU1RGTiwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmogPSBfbHNwcm9mLlByb2ZpbGVyKGxhbWJkYTogaW50KQorICAgICAgICAgICAgb2JqLmVuYWJsZSgpCisgICAgICAgICAgICBvYmogPSBfbHNwcm9mLlByb2ZpbGVyKDEpCisgICAgICAgICAgICBvYmouZGlzYWJsZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3RkZXJyID0gc3lzLl9fc3RkZXJyX18KKyAgICAgICAgICAgIHVubGluayhURVNURk4pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChDUHJvZmlsZVRlc3QpCisKK2RlZiBtYWluKCk6CisgICAgaWYgJy1yJyBub3QgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHRlc3RfbWFpbigpCisgICAgZWxzZToKKyAgICAgICAgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQoX19maWxlX18sIENQcm9maWxlVGVzdCkKKworCisjIERvbid0IHJlbW92ZSB0aGlzIGNvbW1lbnQuIEV2ZXJ5dGhpbmcgYmVsb3cgaXQgaXMgYXV0by1nZW5lcmF0ZWQuCisjLS1jdXQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ1Byb2ZpbGVUZXN0LmV4cGVjdGVkX291dHB1dFsncHJpbnRfc3RhdHMnXSA9ICIiIlwKKyAgICAgICAgIDEyNiBmdW5jdGlvbiBjYWxscyAoMTA2IHByaW1pdGl2ZSBjYWxscykgaW4gMS4wMDAgc2Vjb25kcworCisgICBPcmRlcmVkIGJ5OiBzdGFuZGFyZCBuYW1lCisKKyAgIG5jYWxscyAgdG90dGltZSAgcGVyY2FsbCAgY3VtdGltZSAgcGVyY2FsbCBmaWxlbmFtZTpsaW5lbm8oZnVuY3Rpb24pCisgICAgICAgIDEgICAgMC4wMDAgICAgMC4wMDAgICAgMS4wMDAgICAgMS4wMDAgPHN0cmluZz46MSg8bW9kdWxlPikKKyAgICAgICAyOCAgICAwLjAyOCAgICAwLjAwMSAgICAwLjAyOCAgICAwLjAwMSBwcm9maWxlZS5weToxMTAoX19nZXRhdHRyX18pCisgICAgICAgIDEgICAgMC4yNzAgICAgMC4yNzAgICAgMS4wMDAgICAgMS4wMDAgcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpCisgICAgIDIzLzMgICAgMC4xNTAgICAgMC4wMDcgICAgMC4xNzAgICAgMC4wNTcgcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKQorICAgICAgIDIwICAgIDAuMDIwICAgIDAuMDAxICAgIDAuMDIwICAgIDAuMDAxIHByb2ZpbGVlLnB5OjQ4KG11bCkKKyAgICAgICAgMiAgICAwLjA0MCAgICAwLjAyMCAgICAwLjYwMCAgICAwLjMwMCBwcm9maWxlZS5weTo1NShoZWxwZXIpCisgICAgICAgIDQgICAgMC4xMTYgICAgMC4wMjkgICAgMC4xMjAgICAgMC4wMzAgcHJvZmlsZWUucHk6NzMoaGVscGVyMSkKKyAgICAgICAgMiAgICAwLjAwMCAgICAwLjAwMCAgICAwLjE0MCAgICAwLjA3MCBwcm9maWxlZS5weTo4NChoZWxwZXIyX2luZGlyZWN0KQorICAgICAgICA4ICAgIDAuMzEyICAgIDAuMDM5ICAgIDAuNDAwICAgIDAuMDUwIHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpCisgICAgICAgIDggICAgMC4wNjQgICAgMC4wMDggICAgMC4wODAgICAgMC4wMTAgcHJvZmlsZWUucHk6OTgoc3ViaGVscGVyKQorICAgICAgIDEyICAgIDAuMDAwICAgIDAuMDAwICAgIDAuMDEyICAgIDAuMDAxIHtoYXNhdHRyfQorICAgICAgICA0ICAgIDAuMDAwICAgIDAuMDAwICAgIDAuMDAwICAgIDAuMDAwIHttZXRob2QgJ2FwcGVuZCcgb2YgJ2xpc3QnIG9iamVjdHN9CisgICAgICAgIDEgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAge21ldGhvZCAnZGlzYWJsZScgb2YgJ19sc3Byb2YuUHJvZmlsZXInIG9iamVjdHN9CisgICAgICAgIDggICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAge3JhbmdlfQorICAgICAgICA0ICAgIDAuMDAwICAgIDAuMDAwICAgIDAuMDAwICAgIDAuMDAwIHtzeXMuZXhjX2luZm99CisKKworIiIiCitDUHJvZmlsZVRlc3QuZXhwZWN0ZWRfb3V0cHV0WydwcmludF9jYWxsZXJzJ10gPSAiIiJcCisgICBPcmRlcmVkIGJ5OiBzdGFuZGFyZCBuYW1lCisKK0Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGNhbGxlZCBieS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNhbGxzICB0b3R0aW1lICBjdW10aW1lCis8c3RyaW5nPjoxKDxtb2R1bGU+KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtCitwcm9maWxlZS5weToxMTAoX19nZXRhdHRyX18pICAgICAgICAgICAgICAgICAgICAgIDwtICAgICAgMTYgICAgMC4wMTYgICAgMC4wMTYgIHByb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiAgICAwLjAxMiAgICAwLjAxMiAge2hhc2F0dHJ9Citwcm9maWxlZS5weToyNSh0ZXN0ZnVuYykgICAgICAgICAgICAgICAgICAgICAgICAgIDwtICAgICAgIDEgICAgMC4yNzAgICAgMS4wMDAgIDxzdHJpbmc+OjEoPG1vZHVsZT4pCitwcm9maWxlZS5weTozNShmYWN0b3JpYWwpICAgICAgICAgICAgICAgICAgICAgICAgIDwtICAgICAgIDEgICAgMC4wMTQgICAgMC4xMzAgIHByb2ZpbGVlLnB5OjI1KHRlc3RmdW5jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMC8zICAgIDAuMTMwICAgIDAuMTQ3ICBwcm9maWxlZS5weTozNShmYWN0b3JpYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgMC4wMDYgICAgMC4wNDAgIHByb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpCitwcm9maWxlZS5weTo0OChtdWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtICAgICAgMjAgICAgMC4wMjAgICAgMC4wMjAgIHByb2ZpbGVlLnB5OjM1KGZhY3RvcmlhbCkKK3Byb2ZpbGVlLnB5OjU1KGhlbHBlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAgMiAgICAwLjA0MCAgICAwLjYwMCAgcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpCitwcm9maWxlZS5weTo3MyhoZWxwZXIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtICAgICAgIDQgICAgMC4xMTYgICAgMC4xMjAgIHByb2ZpbGVlLnB5OjU1KGhlbHBlcikKK3Byb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpICAgICAgICAgICAgICAgICAgPC0gICAgICAgMiAgICAwLjAwMCAgICAwLjE0MCAgcHJvZmlsZWUucHk6NTUoaGVscGVyKQorcHJvZmlsZWUucHk6ODgoaGVscGVyMikgICAgICAgICAgICAgICAgICAgICAgICAgICA8LSAgICAgICA2ICAgIDAuMjM0ICAgIDAuMzAwICBwcm9maWxlZS5weTo1NShoZWxwZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgMC4wNzggICAgMC4xMDAgIHByb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpCitwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpICAgICAgICAgICAgICAgICAgICAgICAgIDwtICAgICAgIDggICAgMC4wNjQgICAgMC4wODAgIHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpCit7aGFzYXR0cn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtICAgICAgIDQgICAgMC4wMDAgICAgMC4wMDQgIHByb2ZpbGVlLnB5OjczKGhlbHBlcjEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICAgMC4wMDAgICAgMC4wMDggIHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpCit7bWV0aG9kICdhcHBlbmQnIG9mICdsaXN0JyBvYmplY3RzfSAgICAgICAgICAgICAgIDwtICAgICAgIDQgICAgMC4wMDAgICAgMC4wMDAgIHByb2ZpbGVlLnB5OjczKGhlbHBlcjEpCit7bWV0aG9kICdkaXNhYmxlJyBvZiAnX2xzcHJvZi5Qcm9maWxlcicgb2JqZWN0c30gIDwtCit7cmFuZ2V9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtICAgICAgIDggICAgMC4wMDAgICAgMC4wMDAgIHByb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikKK3tzeXMuZXhjX2luZm99ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAgNCAgICAwLjAwMCAgICAwLjAwMCAgcHJvZmlsZWUucHk6NzMoaGVscGVyMSkKKworCisiIiIKK0NQcm9maWxlVGVzdC5leHBlY3RlZF9vdXRwdXRbJ3ByaW50X2NhbGxlZXMnXSA9ICIiIlwKKyAgIE9yZGVyZWQgYnk6IHN0YW5kYXJkIG5hbWUKKworRnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jYWxscyAgdG90dGltZSAgY3VtdGltZQorPHN0cmluZz46MSg8bW9kdWxlPikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgICAxICAgIDAuMjcwICAgIDEuMDAwICBwcm9maWxlZS5weToyNSh0ZXN0ZnVuYykKK3Byb2ZpbGVlLnB5OjExMChfX2dldGF0dHJfXykgICAgICAgICAgICAgICAgICAgICAgLT4KK3Byb2ZpbGVlLnB5OjI1KHRlc3RmdW5jKSAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAgMSAgICAwLjAxNCAgICAwLjEzMCAgcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgIDAuMDQwICAgIDAuNjAwICBwcm9maWxlZS5weTo1NShoZWxwZXIpCitwcm9maWxlZS5weTozNShmYWN0b3JpYWwpICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAgIDIwLzMgICAgMC4xMzAgICAgMC4xNDcgIHByb2ZpbGVlLnB5OjM1KGZhY3RvcmlhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCAgICAwLjAyMCAgICAwLjAyMCAgcHJvZmlsZWUucHk6NDgobXVsKQorcHJvZmlsZWUucHk6NDgobXVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPgorcHJvZmlsZWUucHk6NTUoaGVscGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgICA0ICAgIDAuMTE2ICAgIDAuMTIwICBwcm9maWxlZS5weTo3MyhoZWxwZXIxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgIDAuMDAwICAgIDAuMTQwICBwcm9maWxlZS5weTo4NChoZWxwZXIyX2luZGlyZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAgIDAuMjM0ICAgIDAuMzAwICBwcm9maWxlZS5weTo4OChoZWxwZXIyKQorcHJvZmlsZWUucHk6NzMoaGVscGVyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgICA0ICAgIDAuMDAwICAgIDAuMDA0ICB7aGFzYXR0cn0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgICAwLjAwMCAgICAwLjAwMCAge21ldGhvZCAnYXBwZW5kJyBvZiAnbGlzdCcgb2JqZWN0c30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgICAwLjAwMCAgICAwLjAwMCAge3N5cy5leGNfaW5mb30KK3Byb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpICAgICAgICAgICAgICAgICAgLT4gICAgICAgMiAgICAwLjAwNiAgICAwLjA0MCAgcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgIDAuMDc4ICAgIDAuMTAwICBwcm9maWxlZS5weTo4OChoZWxwZXIyKQorcHJvZmlsZWUucHk6ODgoaGVscGVyMikgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgICA4ICAgIDAuMDY0ICAgIDAuMDgwICBwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICAgMC4wMDAgICAgMC4wMDggIHtoYXNhdHRyfQorcHJvZmlsZWUucHk6OTgoc3ViaGVscGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgIDE2ICAgIDAuMDE2ICAgIDAuMDE2ICBwcm9maWxlZS5weToxMTAoX19nZXRhdHRyX18pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICAgMC4wMDAgICAgMC4wMDAgIHtyYW5nZX0KK3toYXNhdHRyfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAxMiAgICAwLjAxMiAgICAwLjAxMiAgcHJvZmlsZWUucHk6MTEwKF9fZ2V0YXR0cl9fKQore21ldGhvZCAnYXBwZW5kJyBvZiAnbGlzdCcgb2JqZWN0c30gICAgICAgICAgICAgICAtPgore21ldGhvZCAnZGlzYWJsZScgb2YgJ19sc3Byb2YuUHJvZmlsZXInIG9iamVjdHN9ICAtPgore3JhbmdlfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPgore3N5cy5leGNfaW5mb30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPgorCisKKyIiIgorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGIyMDBkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKQEAgLTAsMCArMSwxNyBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjcnlwdCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjcnlwdCcpCisKK2NsYXNzIENyeXB0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY3J5cHQoc2VsZik6CisgICAgICAgIGMgPSBjcnlwdC5jcnlwdCgnbXlwYXNzd29yZCcsICdhYicpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1Rlc3QgZW5jcnlwdGlvbjogJywgYworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDcnlwdFRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jc3YucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jc3YucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjYTVhYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Nzdi5weQpAQCAtMCwwICsxLDEwNzYgQEAKKyMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KKyMgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgY3N2IHBhY2thZ2UgdW5pdCB0ZXN0cworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGNzdgoraW1wb3J0IGdjCitpbXBvcnQgaW8KK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFRlc3RfQ3N2KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IHRoZSB1bmRlcmx5aW5nIEMgY3N2IHBhcnNlciBpbiB3YXlzIHRoYXQgYXJlIG5vdCBhcHByb3ByaWF0ZQorICAgIGZyb20gdGhlIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlLiBGdXJ0aGVyIHRlc3RzIG9mIHRoaXMgbmF0dXJlIGFyZSBkb25lCisgICAgaW4gVGVzdERpYWxlY3RSZWdpc3RyeS4KKyAgICAiIiIKKyAgICBkZWYgX3Rlc3RfYXJnX3ZhbGlkKHNlbGYsIGN0b3IsIGFyZyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdG9yLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0b3IsIGFyZywgYmFkX2F0dHIgPSAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0b3IsIGFyZywgZGVsaW1pdGVyID0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdG9yLCBhcmcsIGRlbGltaXRlciA9ICdYWCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3RvciwgYXJnLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdG9yLCBhcmcsIGRlbGltaXRlcj1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0b3IsIGFyZywgZGVsaW1pdGVyPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3RvciwgYXJnLCBxdW90ZWNoYXI9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdG9yLCBhcmcsIGxpbmV0ZXJtaW5hdG9yPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3RvciwgYXJnLCBsaW5ldGVybWluYXRvcj0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0b3IsIGFyZywgcXVvdGluZz1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0b3IsIGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZz1jc3YuUVVPVEVfQUxMLCBxdW90ZWNoYXI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3RvciwgYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90aW5nPWNzdi5RVU9URV9BTEwsIHF1b3RlY2hhcj1Ob25lKQorCisgICAgZGVmIHRlc3RfcmVhZGVyX2FyZ192YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hcmdfdmFsaWQoY3N2LnJlYWRlciwgW10pCisKKyAgICBkZWYgdGVzdF93cml0ZXJfYXJnX3ZhbGlkKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FyZ192YWxpZChjc3Yud3JpdGVyLCBTdHJpbmdJTygpKQorCisgICAgZGVmIF90ZXN0X2RlZmF1bHRfYXR0cnMoc2VsZiwgY3RvciwgKmFyZ3MpOgorICAgICAgICBvYmogPSBjdG9yKCphcmdzKQorICAgICAgICAjIENoZWNrIGRlZmF1bHRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QuZGVsaW1pdGVyLCAnLCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QuZG91YmxlcXVvdGUsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QuZXNjYXBlY2hhciwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5saW5ldGVybWluYXRvciwgIlxyXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LnF1b3RlY2hhciwgJyInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LnF1b3RpbmcsIGNzdi5RVU9URV9NSU5JTUFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LnNraXBpbml0aWFsc3BhY2UsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LnN0cmljdCwgRmFsc2UpCisgICAgICAgICMgVHJ5IGRlbGV0aW5nIG9yIGNoYW5naW5nIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIHJlYWQtb25seSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWxhdHRyLCBvYmouZGlhbGVjdCwgJ2RlbGltaXRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgb2JqLmRpYWxlY3QsICdkZWxpbWl0ZXInLCAnOicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBkZWxhdHRyLCBvYmouZGlhbGVjdCwgJ3F1b3RpbmcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgb2JqLmRpYWxlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdxdW90aW5nJywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlYWRlcl9hdHRycyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9kZWZhdWx0X2F0dHJzKGNzdi5yZWFkZXIsIFtdKQorCisgICAgZGVmIHRlc3Rfd3JpdGVyX2F0dHJzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2RlZmF1bHRfYXR0cnMoY3N2LndyaXRlciwgU3RyaW5nSU8oKSkKKworICAgIGRlZiBfdGVzdF9rd19hdHRycyhzZWxmLCBjdG9yLCAqYXJncyk6CisgICAgICAgICMgTm93IHRyeSB3aXRoIGFsdGVybmF0ZSBvcHRpb25zCisgICAgICAgIGt3YXJncyA9IGRpY3QoZGVsaW1pdGVyPSc6JywgZG91YmxlcXVvdGU9RmFsc2UsIGVzY2FwZWNoYXI9J1xcJywKKyAgICAgICAgICAgICAgICAgICAgICBsaW5ldGVybWluYXRvcj0nXHInLCBxdW90ZWNoYXI9JyonLAorICAgICAgICAgICAgICAgICAgICAgIHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUsIHNraXBpbml0aWFsc3BhY2U9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9VHJ1ZSkKKyAgICAgICAgb2JqID0gY3RvcigqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QuZGVsaW1pdGVyLCAnOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QuZG91YmxlcXVvdGUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LmVzY2FwZWNoYXIsICdcXCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QubGluZXRlcm1pbmF0b3IsICJcciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QucXVvdGVjaGFyLCAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QucXVvdGluZywgY3N2LlFVT1RFX05PTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3Quc2tpcGluaXRpYWxzcGFjZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5zdHJpY3QsIFRydWUpCisKKyAgICBkZWYgdGVzdF9yZWFkZXJfa3dfYXR0cnMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfa3dfYXR0cnMoY3N2LnJlYWRlciwgW10pCisKKyAgICBkZWYgdGVzdF93cml0ZXJfa3dfYXR0cnMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfa3dfYXR0cnMoY3N2LndyaXRlciwgU3RyaW5nSU8oKSkKKworICAgIGRlZiBfdGVzdF9kaWFsZWN0X2F0dHJzKHNlbGYsIGN0b3IsICphcmdzKToKKyAgICAgICAgIyBOb3cgdHJ5IHdpdGggZGlhbGVjdC1kZXJpdmVkIG9wdGlvbnMKKyAgICAgICAgY2xhc3MgZGlhbGVjdDoKKyAgICAgICAgICAgIGRlbGltaXRlcj0nLScKKyAgICAgICAgICAgIGRvdWJsZXF1b3RlPUZhbHNlCisgICAgICAgICAgICBlc2NhcGVjaGFyPSdeJworICAgICAgICAgICAgbGluZXRlcm1pbmF0b3I9JyQnCisgICAgICAgICAgICBxdW90ZWNoYXI9JyMnCisgICAgICAgICAgICBxdW90aW5nPWNzdi5RVU9URV9BTEwKKyAgICAgICAgICAgIHNraXBpbml0aWFsc3BhY2U9VHJ1ZQorICAgICAgICAgICAgc3RyaWN0PUZhbHNlCisgICAgICAgIGFyZ3MgPSBhcmdzICsgKGRpYWxlY3QsKQorICAgICAgICBvYmogPSBjdG9yKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LmRlbGltaXRlciwgJy0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LmRvdWJsZXF1b3RlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5lc2NhcGVjaGFyLCAnXicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QubGluZXRlcm1pbmF0b3IsICIkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5xdW90ZWNoYXIsICcjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5xdW90aW5nLCBjc3YuUVVPVEVfQUxMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LnNraXBpbml0aWFsc3BhY2UsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3Quc3RyaWN0LCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X3JlYWRlcl9kaWFsZWN0X2F0dHJzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2RpYWxlY3RfYXR0cnMoY3N2LnJlYWRlciwgW10pCisKKyAgICBkZWYgdGVzdF93cml0ZXJfZGlhbGVjdF9hdHRycyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9kaWFsZWN0X2F0dHJzKGNzdi53cml0ZXIsIFN0cmluZ0lPKCkpCisKKworICAgIGRlZiBfd3JpdGVfdGVzdChzZWxmLCBmaWVsZHMsIGV4cGVjdCwgKiprd2FyZ3MpOgorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLCAqKmt3YXJncykKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhmaWVsZHMpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCArIHdyaXRlci5kaWFsZWN0LmxpbmV0ZXJtaW5hdG9yKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2FyZ192YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBzZWxmLl93cml0ZV90ZXN0LCBOb25lLCAnJykKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdCgoKSwgJycpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoW05vbmVdLCAnIiInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtOb25lXSwgTm9uZSwgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FKQorICAgICAgICAjIENoZWNrIHRoYXQgZXhjZXB0aW9ucyBhcmUgcGFzc2VkIHVwIHRoZSBjaGFpbgorICAgICAgICBjbGFzcyBCYWRMaXN0OgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEwOworICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIGlmIGkgPiAyOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIEJhZExpc3QoKSwgJycpCisgICAgICAgIGNsYXNzIEJhZEl0ZW06CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIFtCYWRJdGVtKCldLCAnJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX2JpZ2ZpZWxkKHNlbGYpOgorICAgICAgICAjIFRoaXMgZXhlcmNpc2VzIHRoZSBidWZmZXIgcmVhbGxvYyBmdW5jdGlvbmFsaXR5CisgICAgICAgIGJpZ3N0cmluZyA9ICdYJyAqIDUwMDAwCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoW2JpZ3N0cmluZyxiaWdzdHJpbmddLCAnJXMsJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgIChiaWdzdHJpbmcsIGJpZ3N0cmluZykpCisKKyAgICBkZWYgdGVzdF93cml0ZV9xdW90aW5nKHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICdhLDEsInAscSInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYScsMSwncCxxJ10sICdhLDEscCxxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FKQorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICdhLDEsInAscSInLAorICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RpbmcgPSBjc3YuUVVPVEVfTUlOSU1BTCkKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbJ2EnLDEsJ3AscSddLCAnImEiLDEsInAscSInLAorICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RpbmcgPSBjc3YuUVVPVEVfTk9OTlVNRVJJQykKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbJ2EnLDEsJ3AscSddLCAnImEiLCIxIiwicCxxIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9BTEwpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhXG5iJywxXSwgJyJhXG5iIiwiMSInLAorICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RpbmcgPSBjc3YuUVVPVEVfQUxMKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZXNjYXBlKHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICdhLDEsInAscSInLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9J1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV90ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2EnLDEsJ3AsInEiJ10sICdhLDEsInAsXFwicVxcIiInLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVjaGFyPU5vbmUsIGRvdWJsZXF1b3RlPUZhbHNlKQorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCwicSInXSwgJ2EsMSwicCxcXCJxXFwiIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlY2hhcj0nXFwnLCBkb3VibGVxdW90ZSA9IEZhbHNlKQorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnIiddLCAnIiIiIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlY2hhcj0nXFwnLCBxdW90aW5nID0gY3N2LlFVT1RFX01JTklNQUwpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWyciJ10sICdcXCInLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9J1xcJywgcXVvdGluZyA9IGNzdi5RVU9URV9NSU5JTUFMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZXF1b3RlID0gRmFsc2UpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWyciJ10sICdcXCInLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9J1xcJywgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FKQorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICdhLDEscFxcLHEnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9J1xcJywgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FKQorCisgICAgZGVmIHRlc3Rfd3JpdGVyb3dzKHNlbGYpOgorICAgICAgICBjbGFzcyBCcm9rZW5GaWxlOgorICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIGJ1Zik6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKEJyb2tlbkZpbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgd3JpdGVyLndyaXRlcm93cywgW1snYSddXSkKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd3JpdGVyLndyaXRlcm93cywgTm9uZSkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvd3MoW1snYScsJ2InXSxbJ2MnLCdkJ11dKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCAiYSxiXHJcbmMsZFxyXG4iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2Zsb2F0KHNlbGYpOgorICAgICAgICAjIElzc3VlIDEzNTczOiBsb3NzIG9mIHByZWNpc2lvbiBiZWNhdXNlIGNzdi53cml0ZXIKKyAgICAgICAgIyB1c2VzIHN0cigpIGZvciBmbG9hdHMgaW5zdGVhZCBvZiByZXByKCkKKyAgICAgICAgb3JpZ19yb3cgPSBbMS4yMzQ1Njc4OTAxMjMsIDEuMC83LjAsICdhYmMnXQorICAgICAgICBmID0gU3RyaW5nSU8oKQorICAgICAgICBjID0gY3N2LndyaXRlcihmLCBxdW90aW5nPWNzdi5RVU9URV9OT05OVU1FUklDKQorICAgICAgICBjLndyaXRlcm93KG9yaWdfcm93KQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgYyA9IGNzdi5yZWFkZXIoZiwgcXVvdGluZz1jc3YuUVVPVEVfTk9OTlVNRVJJQykKKyAgICAgICAgbmV3X3JvdyA9IG5leHQoYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnX3JvdywgbmV3X3JvdykKKworICAgIGRlZiBfcmVhZF90ZXN0KHNlbGYsIGlucHV0LCBleHBlY3QsICoqa3dhcmdzKToKKyAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihpbnB1dCwgKiprd2FyZ3MpCisgICAgICAgIHJlc3VsdCA9IGxpc3QocmVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfcmVhZF9vZGRpbnB1dHMoc2VsZik6CisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbXSwgW10pCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJyddLCBbW11dKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIHNlbGYuX3JlYWRfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyciYWIiYyddLCBOb25lLCBzdHJpY3QgPSAxKQorICAgICAgICAjIGNhbm5vdCBoYW5kbGUgbnVsbCBieXRlcyBmb3IgdGhlIG1vbWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIHNlbGYuX3JlYWRfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWydhYlwwYyddLCBOb25lLCBzdHJpY3QgPSAxKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWyciYWIiYyddLCBbWydhYmMnXV0sIGRvdWJsZXF1b3RlID0gMCkKKworICAgIGRlZiB0ZXN0X3JlYWRfZW9sKHNlbGYpOgorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWydhLGInXSwgW1snYScsJ2InXV0pCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJ2EsYlxuJ10sIFtbJ2EnLCdiJ11dKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWydhLGJcclxuJ10sIFtbJ2EnLCdiJ11dKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWydhLGJcciddLCBbWydhJywnYiddXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBzZWxmLl9yZWFkX3Rlc3QsIFsnYSxiXHJjLGQnXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fcmVhZF90ZXN0LCBbJ2EsYlxuYyxkJ10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIHNlbGYuX3JlYWRfdGVzdCwgWydhLGJcclxuYyxkJ10sIFtdKQorCisgICAgZGVmIHRlc3RfcmVhZF9lb2Yoc2VsZik6CisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJ2EsIiddLCBbWydhJywgJyddXSkKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnImEnXSwgW1snYSddXSkKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnXiddLCBbWydcbiddXSwgZXNjYXBlY2hhcj0nXicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fcmVhZF90ZXN0LCBbJ2EsIiddLCBbXSwgc3RyaWN0PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fcmVhZF90ZXN0LCBbJyJhJ10sIFtdLCBzdHJpY3Q9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBzZWxmLl9yZWFkX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnXiddLCBbXSwgZXNjYXBlY2hhcj0nXicsIHN0cmljdD1UcnVlKQorCisgICAgZGVmIHRlc3RfcmVhZF9lc2NhcGUoc2VsZik6CisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJ2EsXFxiLGMnXSwgW1snYScsICdiJywgJ2MnXV0sIGVzY2FwZWNoYXI9J1xcJykKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnYSxiXFwsYyddLCBbWydhJywgJ2IsYyddXSwgZXNjYXBlY2hhcj0nXFwnKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWydhLCJiXFwsYyInXSwgW1snYScsICdiLGMnXV0sIGVzY2FwZWNoYXI9J1xcJykKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnYSwiYixcXGMiJ10sIFtbJ2EnLCAnYixjJ11dLCBlc2NhcGVjaGFyPSdcXCcpCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJ2EsImIsY1xcIiInXSwgW1snYScsICdiLGMiJ11dLCBlc2NhcGVjaGFyPSdcXCcpCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJ2EsImIsYyJcXCddLCBbWydhJywgJ2IsY1xcJ11dLCBlc2NhcGVjaGFyPSdcXCcpCisKKyAgICBkZWYgdGVzdF9yZWFkX3F1b3Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJzEsIiwzLCIsNSddLCBbWycxJywgJywzLCcsICc1J11dKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWycxLCIsMywiLDUnXSwgW1snMScsICciJywgJzMnLCAnIicsICc1J11dLAorICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVjaGFyPU5vbmUsIGVzY2FwZWNoYXI9J1xcJykKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnMSwiLDMsIiw1J10sIFtbJzEnLCAnIicsICczJywgJyInLCAnNSddXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUsIGVzY2FwZWNoYXI9J1xcJykKKyAgICAgICAgIyB3aWxsIHRoaXMgZmFpbCB3aGVyZSBsb2NhbGUgdXNlcyBjb21tYSBmb3IgZGVjaW1hbHM/CisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJywzLCI1Iiw3LjMsIDknXSwgW1snJywgMywgJzUnLCA3LjMsIDldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rpbmc9Y3N2LlFVT1RFX05PTk5VTUVSSUMpCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJyJhXG5iIiwgNyddLCBbWydhXG5iJywgJyA3J11dKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLl9yZWFkX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYWJjLDMnXSwgW1tdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZz1jc3YuUVVPVEVfTk9OTlVNRVJJQykKKworICAgIGRlZiB0ZXN0X3JlYWRfYmlnZmllbGQoc2VsZik6CisgICAgICAgICMgVGhpcyBleGVyY2lzZXMgdGhlIGJ1ZmZlciByZWFsbG9jIGZ1bmN0aW9uYWxpdHkgYW5kIGZpZWxkIHNpemUKKyAgICAgICAgIyBsaW1pdHMuCisgICAgICAgIGxpbWl0ID0gY3N2LmZpZWxkX3NpemVfbGltaXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzaXplID0gNTAwMDAKKyAgICAgICAgICAgIGJpZ3N0cmluZyA9ICdYJyAqIHNpemUKKyAgICAgICAgICAgIGJpZ2xpbmUgPSAnJXMsJXMnICUgKGJpZ3N0cmluZywgYmlnc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFtiaWdsaW5lXSwgW1tiaWdzdHJpbmcsIGJpZ3N0cmluZ11dKQorICAgICAgICAgICAgY3N2LmZpZWxkX3NpemVfbGltaXQoc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbYmlnbGluZV0sIFtbYmlnc3RyaW5nLCBiaWdzdHJpbmddXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3N2LmZpZWxkX3NpemVfbGltaXQoKSwgc2l6ZSkKKyAgICAgICAgICAgIGNzdi5maWVsZF9zaXplX2xpbWl0KHNpemUtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fcmVhZF90ZXN0LCBbYmlnbGluZV0sIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YuZmllbGRfc2l6ZV9saW1pdCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LmZpZWxkX3NpemVfbGltaXQsIDEsIE5vbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjc3YuZmllbGRfc2l6ZV9saW1pdChsaW1pdCkKKworICAgIGRlZiB0ZXN0X3JlYWRfbGluZW51bShzZWxmKToKKyAgICAgICAgZm9yIHIgaW4gKGNzdi5yZWFkZXIoWydsaW5lLDEnLCAnbGluZSwyJywgJ2xpbmUsMyddKSwKKyAgICAgICAgICAgICAgICAgIGNzdi5EaWN0UmVhZGVyKFsnbGluZSwxJywgJ2xpbmUsMicsICdsaW5lLDMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkbmFtZXM9WydhJywgJ2InLCAnYyddKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIubGluZV9udW0sIDApCisgICAgICAgICAgICByLm5leHQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmxpbmVfbnVtLCAxKQorICAgICAgICAgICAgci5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5saW5lX251bSwgMikKKyAgICAgICAgICAgIHIubmV4dCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIubGluZV9udW0sIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCByLm5leHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIubGluZV9udW0sIDMpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfcXVvdGVlZF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd3JpdGVyLndyaXRlcm93cywgTm9uZSkKKyAgICAgICAgICAgIHJvd3MgPSBbWydhXG5iJywnYiddLFsnYycsJ3hcclxuZCddXQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93cyhyb3dzKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBmb3IgaSwgcm93IGluIGVudW1lcmF0ZShjc3YucmVhZGVyKGZpbGVvYmopKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdywgcm93c1tpXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKK2NsYXNzIFRlc3REaWFsZWN0UmVnaXN0cnkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X2JhZGFyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2Lmxpc3RfZGlhbGVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LmdldF9kaWFsZWN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNzdi5nZXRfZGlhbGVjdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBjc3YuZ2V0X2RpYWxlY3QsICJub25lc3VjaCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnVucmVnaXN0ZXJfZGlhbGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBjc3YudW5yZWdpc3Rlcl9kaWFsZWN0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNzdi51bnJlZ2lzdGVyX2RpYWxlY3QsICJub25lc3VjaCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnJlZ2lzdGVyX2RpYWxlY3QsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnJlZ2lzdGVyX2RpYWxlY3QsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnJlZ2lzdGVyX2RpYWxlY3QsICJub25lc3VjaCIsIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnJlZ2lzdGVyX2RpYWxlY3QsICJub25lc3VjaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGFyZ3VtZW50PU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnJlZ2lzdGVyX2RpYWxlY3QsICJub25lc3VjaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rpbmc9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YucmVnaXN0ZXJfZGlhbGVjdCwgW10pCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyeShzZWxmKToKKyAgICAgICAgY2xhc3MgbXlleGNlbHRzdihjc3YuZXhjZWwpOgorICAgICAgICAgICAgZGVsaW1pdGVyID0gIlx0IgorICAgICAgICBuYW1lID0gIm15ZXhjZWx0c3YiCisgICAgICAgIGV4cGVjdGVkX2RpYWxlY3RzID0gY3N2Lmxpc3RfZGlhbGVjdHMoKSArIFtuYW1lXQorICAgICAgICBleHBlY3RlZF9kaWFsZWN0cy5zb3J0KCkKKyAgICAgICAgY3N2LnJlZ2lzdGVyX2RpYWxlY3QobmFtZSwgbXlleGNlbHRzdikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNzdi51bnJlZ2lzdGVyX2RpYWxlY3QsIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3N2LmdldF9kaWFsZWN0KG5hbWUpLmRlbGltaXRlciwgJ1x0JykKKyAgICAgICAgZ290X2RpYWxlY3RzID0gc29ydGVkKGNzdi5saXN0X2RpYWxlY3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGlhbGVjdHMsIGdvdF9kaWFsZWN0cykKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2t3YXJncyhzZWxmKToKKyAgICAgICAgbmFtZSA9ICdmZWRjYmEnCisgICAgICAgIGNzdi5yZWdpc3Rlcl9kaWFsZWN0KG5hbWUsIGRlbGltaXRlcj0nOycpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjc3YudW5yZWdpc3Rlcl9kaWFsZWN0LCBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzdi5nZXRfZGlhbGVjdChuYW1lKS5kZWxpbWl0ZXIsICc7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbWydYJywgJ1knLCAnWiddXSwgbGlzdChjc3YucmVhZGVyKFsnWDtZO1onXSwgbmFtZSkpKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV9kaWFsZWN0KHNlbGYpOgorICAgICAgICBjbGFzcyBteWV4Y2VsdHN2KGNzdi5EaWFsZWN0KToKKyAgICAgICAgICAgIGRlbGltaXRlciA9ICJcdCIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBteWV4Y2VsdHN2KQorCisgICAgZGVmIHRlc3Rfc3BhY2VfZGlhbGVjdChzZWxmKToKKyAgICAgICAgY2xhc3Mgc3BhY2UoY3N2LmV4Y2VsKToKKyAgICAgICAgICAgIGRlbGltaXRlciA9ICIgIgorICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FCisgICAgICAgICAgICBlc2NhcGVjaGFyID0gIlxcIgorCisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlb2JqLndyaXRlKCJhYmMgZGVmXG5jMWNjY2NjMSBiZW56ZW5lXG4iKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICByZHIgPSBjc3YucmVhZGVyKGZpbGVvYmosIGRpYWxlY3Q9c3BhY2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmRyLm5leHQoKSwgWyJhYmMiLCAiZGVmIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJkci5uZXh0KCksIFsiYzFjY2NjYzEiLCAiYmVuemVuZSJdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X2RpYWxlY3RfYXBwbHkoc2VsZik6CisgICAgICAgIGNsYXNzIHRlc3RBKGNzdi5leGNlbCk6CisgICAgICAgICAgICBkZWxpbWl0ZXIgPSAiXHQiCisgICAgICAgIGNsYXNzIHRlc3RCKGNzdi5leGNlbCk6CisgICAgICAgICAgICBkZWxpbWl0ZXIgPSAiOiIKKyAgICAgICAgY2xhc3MgdGVzdEMoY3N2LmV4Y2VsKToKKyAgICAgICAgICAgIGRlbGltaXRlciA9ICJ8IgorCisgICAgICAgIGNzdi5yZWdpc3Rlcl9kaWFsZWN0KCd0ZXN0QycsIHRlc3RDKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqKQorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhbMSwyLDNdKQorICAgICAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksICIxLDIsM1xyXG4iKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgICAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaiwgdGVzdEEpCisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KFsxLDIsM10pCisgICAgICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgIjFcdDJcdDNcclxuIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICAgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmosIGRpYWxlY3Q9dGVzdEIoKSkKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coWzEsMiwzXSkKKyAgICAgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCAiMToyOjNcclxuIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICAgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmosIGRpYWxlY3Q9J3Rlc3RDJykKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coWzEsMiwzXSkKKyAgICAgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCAiMXwyfDNcclxuIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICAgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmosIGRpYWxlY3Q9dGVzdEEsIGRlbGltaXRlcj0nOycpCisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KFsxLDIsM10pCisgICAgICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgIjE7MjszXHJcbiIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjc3YudW5yZWdpc3Rlcl9kaWFsZWN0KCd0ZXN0QycpCisKKyAgICBkZWYgdGVzdF9iYWRfZGlhbGVjdChzZWxmKToKKyAgICAgICAgIyBVbmtub3duIHBhcmFtZXRlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNzdi5yZWFkZXIsIFtdLCBiYWRfYXR0ciA9IDApCisgICAgICAgICMgQmFkIHZhbHVlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNzdi5yZWFkZXIsIFtdLCBkZWxpbWl0ZXIgPSBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNzdi5yZWFkZXIsIFtdLCBxdW90aW5nID0gLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnJlYWRlciwgW10sIHF1b3RpbmcgPSAxMDApCisKK2NsYXNzIFRlc3RDc3ZCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgcmVhZGVyQXNzZXJ0RXF1YWwoc2VsZiwgaW5wdXQsIGV4cGVjdGVkX3Jlc3VsdCk6CisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlb2JqLndyaXRlKGlucHV0KQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICByZWFkZXIgPSBjc3YucmVhZGVyKGZpbGVvYmosIGRpYWxlY3QgPSBzZWxmLmRpYWxlY3QpCisgICAgICAgICAgICBmaWVsZHMgPSBsaXN0KHJlYWRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmllbGRzLCBleHBlY3RlZF9yZXN1bHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHdyaXRlckFzc2VydEVxdWFsKHNlbGYsIGlucHV0LCBleHBlY3RlZF9yZXN1bHQpOgorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLCBkaWFsZWN0ID0gc2VsZi5kaWFsZWN0KQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93cyhpbnB1dCkKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgZXhwZWN0ZWRfcmVzdWx0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworY2xhc3MgVGVzdERpYWxlY3RFeGNlbChUZXN0Q3N2QmFzZSk6CisgICAgZGlhbGVjdCA9ICdleGNlbCcKKworICAgIGRlZiB0ZXN0X3NpbmdsZShzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnYWJjJywgW1snYWJjJ11dKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCcxLDIsMyw0LDUnLCBbWycxJywnMicsJzMnLCc0JywnNSddXSkKKworICAgIGRlZiB0ZXN0X2JsYW5rbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnJywgW10pCisKKyAgICBkZWYgdGVzdF9lbXB0eV9maWVsZHMoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJywnLCBbWycnLCAnJ11dKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlcXVvdGVkKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCciIicsIFtbJyddXSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZXF1b3RlZF9sZWZ0X2VtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCciIiwnLCBbWycnLCcnXV0pCisKKyAgICBkZWYgdGVzdF9zaW5nbGVxdW90ZWRfcmlnaHRfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJywiIicsIFtbJycsJyddXSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9xdW90ZWRfcXVvdGUoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJyIiIiInLCBbWyciJ11dKQorCisgICAgZGVmIHRlc3RfcXVvdGVkX3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnIiIiIiIiJywgW1snIiInXV0pCisKKyAgICBkZWYgdGVzdF9pbmxpbmVfcXVvdGUoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJ2EiImInLCBbWydhIiJiJ11dKQorCisgICAgZGVmIHRlc3RfaW5saW5lX3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnYSJiImMnLCBbWydhImIiYyddXSkKKworICAgIGRlZiB0ZXN0X3F1b3Rlc19hbmRfbW9yZShzZWxmKToKKyAgICAgICAgIyBFeGNlbCB3b3VsZCBuZXZlciB3cml0ZSBhIGZpZWxkIGNvbnRhaW5pbmcgJyJhImInLCBidXQgd2hlbgorICAgICAgICAjIHJlYWRpbmcgb25lLCBpdCB3aWxsIHJldHVybiAnYWInLgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCciYSJiJywgW1snYWInXV0pCisKKyAgICBkZWYgdGVzdF9sb25lX3F1b3RlKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCdhImInLCBbWydhImInXV0pCisKKyAgICBkZWYgdGVzdF9xdW90ZV9hbmRfcXVvdGUoc2VsZik6CisgICAgICAgICMgRXhjZWwgd291bGQgbmV2ZXIgd3JpdGUgYSBmaWVsZCBjb250YWluaW5nICciYSIgImIiJywgYnV0IHdoZW4KKyAgICAgICAgIyByZWFkaW5nIG9uZSwgaXQgd2lsbCByZXR1cm4gJ2EgImIiJy4KKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnImEiICJiIicsIFtbJ2EgImIiJ11dKQorCisgICAgZGVmIHRlc3Rfc3BhY2VfYW5kX3F1b3RlKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCcgImEiJywgW1snICJhIiddXSkKKworICAgIGRlZiB0ZXN0X3F1b3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnMSwyLDMsIkkgdGhpbmssIHRoZXJlZm9yZSBJIGFtIiw1LDYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJzEnLCAnMicsICczJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJIHRoaW5rLCB0aGVyZWZvcmUgSSBhbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNScsICc2J11dKQorCisgICAgZGVmIHRlc3RfcXVvdGVkX3F1b3RlKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCcxLDIsMywiIiJJIHNlZSwiIiBzYWlkIHRoZSBibGluZCBtYW4iLCJhcyBoZSBwaWNrZWQgdXAgaGlzIGhhbW1lciBhbmQgc2F3IicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1snMScsICcyJywgJzMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyJJIHNlZSwiIHNhaWQgdGhlIGJsaW5kIG1hbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXMgaGUgcGlja2VkIHVwIGhpcyBoYW1tZXIgYW5kIHNhdyddXSkKKworICAgIGRlZiB0ZXN0X3F1b3RlZF9ubChzZWxmKToKKyAgICAgICAgaW5wdXQgPSAnJydcCisxLDIsMywiIiJJIHNlZSwiIgorc2FpZCB0aGUgYmxpbmQgbWFuIiwiYXMgaGUgcGlja2VkIHVwIGhpcworaGFtbWVyIGFuZCBzYXciCis5LDgsNyw2JycnCisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1snMScsICcyJywgJzMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIkkgc2VlLCJcbnNhaWQgdGhlIGJsaW5kIG1hbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBoZSBwaWNrZWQgdXAgaGlzXG5oYW1tZXIgYW5kIHNhdyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJzknLCc4JywnNycsJzYnXV0pCisKKyAgICBkZWYgdGVzdF9kdWJpb3VzX3F1b3RlKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCcxMiwxMiwxIiwnLCBbWycxMicsICcxMicsICcxIicsICcnXV0pCisKKyAgICBkZWYgdGVzdF9udWxsKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlckFzc2VydEVxdWFsKFtdLCAnJykKKworICAgIGRlZiB0ZXN0X3NpbmdsZV93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVyQXNzZXJ0RXF1YWwoW1snYWJjJ11dLCAnYWJjXHJcbicpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfd3JpdGVyKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlckFzc2VydEVxdWFsKFtbMSwgMiwgJ2FiYycsIDMsIDRdXSwgJzEsMixhYmMsMyw0XHJcbicpCisKKyAgICBkZWYgdGVzdF9xdW90ZXMoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVyQXNzZXJ0RXF1YWwoW1sxLCAyLCAnYSJiYyInLCAzLCA0XV0sICcxLDIsImEiImJjIiIiLDMsNFxyXG4nKQorCisgICAgZGVmIHRlc3RfcXVvdGVfZmllbGRzZXAoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVyQXNzZXJ0RXF1YWwoW1snYWJjLGRlZiddXSwgJyJhYmMsZGVmIlxyXG4nKQorCisgICAgZGVmIHRlc3RfbmV3bGluZXMoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVyQXNzZXJ0RXF1YWwoW1sxLCAyLCAnYVxuYmMnLCAzLCA0XV0sICcxLDIsImFcbmJjIiwzLDRcclxuJykKKworY2xhc3MgRXNjYXBlZEV4Y2VsKGNzdi5leGNlbCk6CisgICAgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FCisgICAgZXNjYXBlY2hhciA9ICdcXCcKKworY2xhc3MgVGVzdEVzY2FwZWRFeGNlbChUZXN0Q3N2QmFzZSk6CisgICAgZGlhbGVjdCA9IEVzY2FwZWRFeGNlbCgpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVfZmllbGRzZXAoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVyQXNzZXJ0RXF1YWwoW1snYWJjLGRlZiddXSwgJ2FiY1xcLGRlZlxyXG4nKQorCisgICAgZGVmIHRlc3RfcmVhZF9lc2NhcGVfZmllbGRzZXAoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJ2FiY1xcLGRlZlxyXG4nLCBbWydhYmMsZGVmJ11dKQorCitjbGFzcyBRdW90ZWRFc2NhcGVkRXhjZWwoY3N2LmV4Y2VsKToKKyAgICBxdW90aW5nID0gY3N2LlFVT1RFX05PTk5VTUVSSUMKKyAgICBlc2NhcGVjaGFyID0gJ1xcJworCitjbGFzcyBUZXN0UXVvdGVkRXNjYXBlZEV4Y2VsKFRlc3RDc3ZCYXNlKToKKyAgICBkaWFsZWN0ID0gUXVvdGVkRXNjYXBlZEV4Y2VsKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VzY2FwZV9maWVsZHNlcChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZXJBc3NlcnRFcXVhbChbWydhYmMsZGVmJ11dLCAnImFiYyxkZWYiXHJcbicpCisKKyAgICBkZWYgdGVzdF9yZWFkX2VzY2FwZV9maWVsZHNlcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnImFiY1xcLGRlZiJcclxuJywgW1snYWJjLGRlZiddXSkKKworY2xhc3MgVGVzdERpY3RGaWVsZHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMjIyAibG9uZyIgbWVhbnMgdGhlIHJvdyBpcyBsb25nZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGZpZWxkbmFtZXMKKyAgICAjIyMgInNob3J0IiBtZWFucyB0aGVyZSBhcmUgZmV3ZXIgZWxlbWVudHMgaW4gdGhlIHJvdyB0aGFuIGZpZWxkbmFtZXMKKyAgICBkZWYgdGVzdF93cml0ZV9zaW1wbGVfZGljdChzZWxmKToKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IGlvLm9wZW4oZmQsICd3K2InKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3YuRGljdFdyaXRlcihmaWxlb2JqLCBmaWVsZG5hbWVzID0gWyJmMSIsICJmMiIsICJmMyJdKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlaGVhZGVyKCkKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWRsaW5lKCksICJmMSxmMixmM1xyXG4iKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHsiZjEiOiAxMCwgImYzIjogImFiYyJ9KQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBmaWxlb2JqLnJlYWRsaW5lKCkgIyBoZWFkZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksICIxMCwsYWJjXHJcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZmllbGRzKHNlbGYpOgorICAgICAgICBmaWxlb2JqID0gU3RyaW5nSU8oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNzdi5EaWN0V3JpdGVyLCBmaWxlb2JqKQorCisgICAgZGVmIHRlc3RfcmVhZF9kaWN0X2ZpZWxkcyhzZWxmKToKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVvYmoud3JpdGUoIjEsMixhYmNcclxuIikKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoZmlsZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkbmFtZXM9WyJmMSIsICJmMiIsICJmMyJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIubmV4dCgpLCB7ImYxIjogJzEnLCAiZjIiOiAnMicsICJmMyI6ICdhYmMnfSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBkZWYgdGVzdF9yZWFkX2RpY3Rfbm9fZmllbGRuYW1lcyhzZWxmKToKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVvYmoud3JpdGUoImYxLGYyLGYzXHJcbjEsMixhYmNcclxuIikKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoZmlsZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLmZpZWxkbmFtZXMsIFsiZjEiLCAiZjIiLCAiZjMiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLm5leHQoKSwgeyJmMSI6ICcxJywgImYyIjogJzInLCAiZjMiOiAnYWJjJ30pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgIyBUd28gdGVzdCBjYXNlcyB0byBtYWtlIHN1cmUgZXhpc3Rpbmcgd2F5cyBvZiBpbXBsaWNpdGx5IHNldHRpbmcKKyAgICAjIGZpZWxkbmFtZXMgY29udGludWUgdG8gd29yay4gIEJvdGggYXJpc2UgZnJvbSBkaXNjdXNzaW9uIGluIGlzc3VlMzQzNi4KKyAgICBkZWYgdGVzdF9yZWFkX2RpY3RfZmllbGRuYW1lc19mcm9tX2ZpbGUoc2VsZik6CisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGYgPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJmMSxmMixmM1xyXG4xLDIsYWJjXHJcbiIpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGYsIGZpZWxkbmFtZXM9Y3N2LnJlYWRlcihmKS5uZXh0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5maWVsZG5hbWVzLCBbImYxIiwgImYyIiwgImYzIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5uZXh0KCksIHsiZjEiOiAnMScsICJmMiI6ICcyJywgImYzIjogJ2FiYyd9KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X3JlYWRfZGljdF9maWVsZG5hbWVzX2NoYWluKHNlbGYpOgorICAgICAgICBpbXBvcnQgaXRlcnRvb2xzCisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGYgPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJmMSxmMixmM1xyXG4xLDIsYWJjXHJcbiIpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGYpCisgICAgICAgICAgICBmaXJzdCA9IG5leHQocmVhZGVyKQorICAgICAgICAgICAgZm9yIHJvdyBpbiBpdGVydG9vbHMuY2hhaW4oW2ZpcnN0XSwgcmVhZGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5maWVsZG5hbWVzLCBbImYxIiwgImYyIiwgImYzIl0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3csIHsiZjEiOiAnMScsICJmMiI6ICcyJywgImYzIjogJ2FiYyd9KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X3JlYWRfbG9uZyhzZWxmKToKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVvYmoud3JpdGUoIjEsMixhYmMsNCw1LDZcclxuIikKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoZmlsZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkbmFtZXM9WyJmMSIsICJmMiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIubmV4dCgpLCB7ImYxIjogJzEnLCAiZjIiOiAnMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lOiBbImFiYyIsICI0IiwgIjUiLCAiNiJdfSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBkZWYgdGVzdF9yZWFkX2xvbmdfd2l0aF9yZXN0KHNlbGYpOgorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZW9iai53cml0ZSgiMSwyLGFiYyw0LDUsNlxyXG4iKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICByZWFkZXIgPSBjc3YuRGljdFJlYWRlcihmaWxlb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRuYW1lcz1bImYxIiwgImYyIl0sIHJlc3RrZXk9Il9yZXN0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLm5leHQoKSwgeyJmMSI6ICcxJywgImYyIjogJzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9yZXN0IjogWyJhYmMiLCAiNCIsICI1IiwgIjYiXX0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHRlc3RfcmVhZF9sb25nX3dpdGhfcmVzdF9ub19maWVsZG5hbWVzKHNlbGYpOgorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZW9iai53cml0ZSgiZjEsZjJcclxuMSwyLGFiYyw0LDUsNlxyXG4iKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICByZWFkZXIgPSBjc3YuRGljdFJlYWRlcihmaWxlb2JqLCByZXN0a2V5PSJfcmVzdCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5maWVsZG5hbWVzLCBbImYxIiwgImYyIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5uZXh0KCksIHsiZjEiOiAnMScsICJmMiI6ICcyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfcmVzdCI6IFsiYWJjIiwgIjQiLCAiNSIsICI2Il19KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X3JlYWRfc2hvcnQoc2VsZik6CisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlb2JqLndyaXRlKCIxLDIsYWJjLDQsNSw2XHJcbjEsMixhYmNcclxuIikKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoZmlsZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkbmFtZXM9IjEgMiAzIDQgNSA2Ii5zcGxpdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHZhbD0iREVGQVVMVCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5uZXh0KCksIHsiMSI6ICcxJywgIjIiOiAnMicsICIzIjogJ2FiYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCI6ICc0JywgIjUiOiAnNScsICI2IjogJzYnfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLm5leHQoKSwgeyIxIjogJzEnLCAiMiI6ICcyJywgIjMiOiAnYWJjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IjogJ0RFRkFVTFQnLCAiNSI6ICdERUZBVUxUJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI2IjogJ0RFRkFVTFQnfSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBkZWYgdGVzdF9yZWFkX211bHRpKHNlbGYpOgorICAgICAgICBzYW1wbGUgPSBbCisgICAgICAgICAgICAnMjE0NzQ4MzY0OCw0My4wZTEyLDE3LGFiYyxkZWZcclxuJywKKyAgICAgICAgICAgICcxNDc0ODM2NDgsNDMuMGUyLDE3LGFiYyxkZWZcclxuJywKKyAgICAgICAgICAgICc0NzQ4MzY0OCw0My4wLDE3MCxhYmMsZGVmXHJcbicKKyAgICAgICAgICAgIF0KKworICAgICAgICByZWFkZXIgPSBjc3YuRGljdFJlYWRlcihzYW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkbmFtZXM9ImkxIGZsb2F0IGkyIHMxIHMyIi5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5uZXh0KCksIHsiaTEiOiAnMjE0NzQ4MzY0OCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdCI6ICc0My4wZTEyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImkyIjogJzE3JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMxIjogJ2FiYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzMiI6ICdkZWYnfSkKKworICAgIGRlZiB0ZXN0X3JlYWRfd2l0aF9ibGFua3Moc2VsZik6CisgICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKFsiMSwyLGFiYyw0LDUsNlxyXG4iLCJcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxLDIsYWJjLDQsNSw2XHJcbiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZG5hbWVzPSIxIDIgMyA0IDUgNiIuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIubmV4dCgpLCB7IjEiOiAnMScsICIyIjogJzInLCAiMyI6ICdhYmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCI6ICc0JywgIjUiOiAnNScsICI2IjogJzYnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIubmV4dCgpLCB7IjEiOiAnMScsICIyIjogJzInLCAiMyI6ICdhYmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCI6ICc0JywgIjUiOiAnNScsICI2IjogJzYnfSkKKworICAgIGRlZiB0ZXN0X3JlYWRfc2VtaV9zZXAoc2VsZik6CisgICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKFsiMTsyO2FiYzs0OzU7NlxyXG4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRuYW1lcz0iMSAyIDMgNCA1IDYiLnNwbGl0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGltaXRlcj0nOycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLm5leHQoKSwgeyIxIjogJzEnLCAiMiI6ICcyJywgIjMiOiAnYWJjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiOiAnNCcsICI1IjogJzUnLCAiNiI6ICc2J30pCisKK2NsYXNzIFRlc3RBcnJheVdyaXRlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW50X3dyaXRlKHNlbGYpOgorICAgICAgICBpbXBvcnQgYXJyYXkKKyAgICAgICAgY29udGVudHMgPSBbKDIwLWkpIGZvciBpIGluIHJhbmdlKDIwKV0KKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdpJywgY29udGVudHMpCisKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaiwgZGlhbGVjdD0iZXhjZWwiKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KGEpCisgICAgICAgICAgICBleHBlY3RlZCA9ICIsIi5qb2luKFtzdHIoaSkgZm9yIGkgaW4gYV0pKyJcclxuIgorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCBleHBlY3RlZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBkZWYgdGVzdF9kb3VibGVfd3JpdGUoc2VsZik6CisgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICBjb250ZW50cyA9IFsoMjAtaSkqMC4xIGZvciBpIGluIHJhbmdlKDIwKV0KKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdkJywgY29udGVudHMpCisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmosIGRpYWxlY3Q9ImV4Y2VsIikKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhhKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSAiLCIuam9pbihbcmVwcihpKSBmb3IgaSBpbiBhXSkrIlxyXG4iCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksIGV4cGVjdGVkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X3dyaXRlKHNlbGYpOgorICAgICAgICBpbXBvcnQgYXJyYXkKKyAgICAgICAgY29udGVudHMgPSBbKDIwLWkpKjAuMSBmb3IgaSBpbiByYW5nZSgyMCldCisgICAgICAgIGEgPSBhcnJheS5hcnJheSgnZicsIGNvbnRlbnRzKQorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLCBkaWFsZWN0PSJleGNlbCIpCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coYSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gIiwiLmpvaW4oW3JlcHIoaSkgZm9yIGkgaW4gYV0pKyJcclxuIgorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCBleHBlY3RlZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBkZWYgdGVzdF9jaGFyX3dyaXRlKHNlbGYpOgorICAgICAgICBpbXBvcnQgYXJyYXksIHN0cmluZworICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ2MnLCBzdHJpbmcubGV0dGVycykKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaiwgZGlhbGVjdD0iZXhjZWwiKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KGEpCisgICAgICAgICAgICBleHBlY3RlZCA9ICIsIi5qb2luKGEpKyJcclxuIgorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCBleHBlY3RlZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKK2NsYXNzIFRlc3REaWFsZWN0VmFsaWRpdHkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3F1b3Rpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIG15ZGlhbGVjdChjc3YuRGlhbGVjdCk6CisgICAgICAgICAgICBkZWxpbWl0ZXIgPSAiOyIKKyAgICAgICAgICAgIGVzY2FwZWNoYXIgPSAnXFwnCisgICAgICAgICAgICBkb3VibGVxdW90ZSA9IEZhbHNlCisgICAgICAgICAgICBza2lwaW5pdGlhbHNwYWNlID0gVHJ1ZQorICAgICAgICAgICAgbGluZXRlcm1pbmF0b3IgPSAnXHJcbicKKyAgICAgICAgICAgIHF1b3RpbmcgPSBjc3YuUVVPVEVfTk9ORQorICAgICAgICBkID0gbXlkaWFsZWN0KCkKKworICAgICAgICBteWRpYWxlY3QucXVvdGluZyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBteWRpYWxlY3QpCisKKyAgICAgICAgbXlkaWFsZWN0LmRvdWJsZXF1b3RlID0gVHJ1ZQorICAgICAgICBteWRpYWxlY3QucXVvdGluZyA9IGNzdi5RVU9URV9BTEwKKyAgICAgICAgbXlkaWFsZWN0LnF1b3RlY2hhciA9ICciJworICAgICAgICBkID0gbXlkaWFsZWN0KCkKKworICAgICAgICBteWRpYWxlY3QucXVvdGVjaGFyID0gIicnIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIG15ZGlhbGVjdCkKKworICAgICAgICBteWRpYWxlY3QucXVvdGVjaGFyID0gNAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIG15ZGlhbGVjdCkKKworICAgIGRlZiB0ZXN0X2RlbGltaXRlcihzZWxmKToKKyAgICAgICAgY2xhc3MgbXlkaWFsZWN0KGNzdi5EaWFsZWN0KToKKyAgICAgICAgICAgIGRlbGltaXRlciA9ICI7IgorICAgICAgICAgICAgZXNjYXBlY2hhciA9ICdcXCcKKyAgICAgICAgICAgIGRvdWJsZXF1b3RlID0gRmFsc2UKKyAgICAgICAgICAgIHNraXBpbml0aWFsc3BhY2UgPSBUcnVlCisgICAgICAgICAgICBsaW5ldGVybWluYXRvciA9ICdcclxuJworICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FCisgICAgICAgIGQgPSBteWRpYWxlY3QoKQorCisgICAgICAgIG15ZGlhbGVjdC5kZWxpbWl0ZXIgPSAiOjo6IgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIG15ZGlhbGVjdCkKKworICAgICAgICBteWRpYWxlY3QuZGVsaW1pdGVyID0gNAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIG15ZGlhbGVjdCkKKworICAgIGRlZiB0ZXN0X2xpbmV0ZXJtaW5hdG9yKHNlbGYpOgorICAgICAgICBjbGFzcyBteWRpYWxlY3QoY3N2LkRpYWxlY3QpOgorICAgICAgICAgICAgZGVsaW1pdGVyID0gIjsiCisgICAgICAgICAgICBlc2NhcGVjaGFyID0gJ1xcJworICAgICAgICAgICAgZG91YmxlcXVvdGUgPSBGYWxzZQorICAgICAgICAgICAgc2tpcGluaXRpYWxzcGFjZSA9IFRydWUKKyAgICAgICAgICAgIGxpbmV0ZXJtaW5hdG9yID0gJ1xyXG4nCisgICAgICAgICAgICBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUKKyAgICAgICAgZCA9IG15ZGlhbGVjdCgpCisKKyAgICAgICAgbXlkaWFsZWN0LmxpbmV0ZXJtaW5hdG9yID0gIjo6OiIKKyAgICAgICAgZCA9IG15ZGlhbGVjdCgpCisKKyAgICAgICAgbXlkaWFsZWN0LmxpbmV0ZXJtaW5hdG9yID0gNAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIG15ZGlhbGVjdCkKKworCitjbGFzcyBUZXN0U25pZmZlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc2FtcGxlMSA9ICIiIlwKK0hhcnJ5J3MsIEFybGluZ3RvbiBIZWlnaHRzLCBJTCwgMi8xLzAzLCBLaW1pIEhheWVzCitTaGFyayBDaXR5LCBHbGVuZGFsZSBIZWlnaHRzLCBJTCwgMTIvMjgvMDIsIFByZXplbmNlCitUb21teSdzIFBsYWNlLCBCbHVlIElzbGFuZCwgSUwsIDEyLzI4LzAyLCBCbHVlIFN1bmRheS9XaGl0ZSBDcm93CitTdG9uZWN1dHRlcnMgU2VhZm9vZCBhbmQgQ2hvcCBIb3VzZSwgTGVtb250LCBJTCwgMTIvMTkvMDIsIFdlZWsgQmFjaworIiIiCisgICAgc2FtcGxlMiA9ICIiIlwKKydIYXJyeScncyc6J0FybGluZ3RvbiBIZWlnaHRzJzonSUwnOicyLzEvMDMnOidLaW1pIEhheWVzJworJ1NoYXJrIENpdHknOidHbGVuZGFsZSBIZWlnaHRzJzonSUwnOicxMi8yOC8wMic6J1ByZXplbmNlJworJ1RvbW15JydzIFBsYWNlJzonQmx1ZSBJc2xhbmQnOidJTCc6JzEyLzI4LzAyJzonQmx1ZSBTdW5kYXkvV2hpdGUgQ3JvdycKKydTdG9uZWN1dHRlcnMgJydTZWFmb29kJycgYW5kIENob3AgSG91c2UnOidMZW1vbnQnOidJTCc6JzEyLzE5LzAyJzonV2VlayBCYWNrJworIiIiCisgICAgaGVhZGVyID0gJycnXAorInZlbnVlIiwiY2l0eSIsInN0YXRlIiwiZGF0ZSIsInBlcmZvcm1lcnMiCisnJycKKyAgICBzYW1wbGUzID0gJycnXAorMDUvMDUvMDM/MDUvMDUvMDM/MDUvMDUvMDM/MDUvMDUvMDM/MDUvMDUvMDM/MDUvMDUvMDMKKzA1LzA1LzAzPzA1LzA1LzAzPzA1LzA1LzAzPzA1LzA1LzAzPzA1LzA1LzAzPzA1LzA1LzAzCiswNS8wNS8wMz8wNS8wNS8wMz8wNS8wNS8wMz8wNS8wNS8wMz8wNS8wNS8wMz8wNS8wNS8wMworJycnCisKKyAgICBzYW1wbGU0ID0gJycnXAorMjE0NzQ4MzY0ODs0My4wZTEyOzE3O2FiYztkZWYKKzE0NzQ4MzY0ODs0My4wZTI7MTc7YWJjO2RlZgorNDc0ODM2NDg7NDMuMDsxNzA7YWJjO2RlZgorJycnCisKKyAgICBzYW1wbGU1ID0gImFhYVx0YmJiXHJcbkFBQVx0XHJcbkJCQlx0XHJcbiIKKyAgICBzYW1wbGU2ID0gImF8YnxjXHJcbmR8ZXxmXHJcbiIKKyAgICBzYW1wbGU3ID0gIidhJ3wnYid8J2MnXHJcbidkJ3xlfGZcclxuIgorCisgICAgZGVmIHRlc3RfaGFzX2hlYWRlcihzZWxmKToKKyAgICAgICAgc25pZmZlciA9IGNzdi5TbmlmZmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmlmZmVyLmhhc19oZWFkZXIoc2VsZi5zYW1wbGUxKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25pZmZlci5oYXNfaGVhZGVyKHNlbGYuaGVhZGVyK3NlbGYuc2FtcGxlMSksIFRydWUpCisKKyAgICBkZWYgdGVzdF9zbmlmZihzZWxmKToKKyAgICAgICAgc25pZmZlciA9IGNzdi5TbmlmZmVyKCkKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGUxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3QuZGVsaW1pdGVyLCAiLCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5xdW90ZWNoYXIsICciJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LnNraXBpbml0aWFsc3BhY2UsIFRydWUpCisKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGUyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3QuZGVsaW1pdGVyLCAiOiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5xdW90ZWNoYXIsICInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LnNraXBpbml0aWFsc3BhY2UsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZGVsaW1pdGVycyhzZWxmKToKKyAgICAgICAgc25pZmZlciA9IGNzdi5TbmlmZmVyKCkKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGUzKQorICAgICAgICAjIGdpdmVuIHRoYXQgYWxsIHRocmVlIGxpbmVzIGluIHNhbXBsZTMgYXJlIGVxdWFsLAorICAgICAgICAjIEkgdGhpbmsgdGhhdCBhbnkgY2hhcmFjdGVyIGNvdWxkIGhhdmUgYmVlbiAnZ3Vlc3NlZCcgYXMgdGhlCisgICAgICAgICMgZGVsaW1pdGVyLCBkZXBlbmRpbmcgb24gZGljdGlvbmFyeSBvcmRlcgorICAgICAgICBzZWxmLmFzc2VydEluKGRpYWxlY3QuZGVsaW1pdGVyLCBzZWxmLnNhbXBsZTMpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlMywgZGVsaW1pdGVycz0iPywiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3QuZGVsaW1pdGVyLCAiPyIpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlMywgZGVsaW1pdGVycz0iLywiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3QuZGVsaW1pdGVyLCAiLyIpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LmRlbGltaXRlciwgIjsiKQorICAgICAgICBkaWFsZWN0ID0gc25pZmZlci5zbmlmZihzZWxmLnNhbXBsZTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5kZWxpbWl0ZXIsICJcdCIpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LmRlbGltaXRlciwgInwiKQorICAgICAgICBkaWFsZWN0ID0gc25pZmZlci5zbmlmZihzZWxmLnNhbXBsZTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5kZWxpbWl0ZXIsICJ8IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LnF1b3RlY2hhciwgIiciKQorCisgICAgZGVmIHRlc3RfZG91YmxlcXVvdGUoc2VsZik6CisgICAgICAgIHNuaWZmZXIgPSBjc3YuU25pZmZlcigpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRpYWxlY3QuZG91YmxlcXVvdGUpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpYWxlY3QuZG91YmxlcXVvdGUpCisKK2lmIG5vdCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZTogcHJpbnQgIioqKiBza2lwcGluZyBsZWFrYWdlIHRlc3RzICoqKiIKK2Vsc2U6CisgICAgY2xhc3MgTlVMOgorICAgICAgICBkZWYgd3JpdGUocywgKmFyZ3MpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3cml0ZWxpbmVzID0gd3JpdGUKKworICAgIGNsYXNzIFRlc3RMZWFrcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIGRlZiB0ZXN0X2NyZWF0ZV9yZWFkKHNlbGYpOgorICAgICAgICAgICAgZGVsdGEgPSAwCisgICAgICAgICAgICBsYXN0cmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMjApOgorICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuZ2FyYmFnZSwgW10pCisgICAgICAgICAgICAgICAgcmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgICAgICAgICAgY3N2LnJlYWRlcihbImEsYixjXHJcbiJdKQorICAgICAgICAgICAgICAgIGNzdi5yZWFkZXIoWyJhLGIsY1xyXG4iXSkKKyAgICAgICAgICAgICAgICBjc3YucmVhZGVyKFsiYSxiLGNcclxuIl0pCisgICAgICAgICAgICAgICAgZGVsdGEgPSByYy1sYXN0cmMKKyAgICAgICAgICAgICAgICBsYXN0cmMgPSByYworICAgICAgICAgICAgIyBpZiBjc3YucmVhZGVyKCkgbGVha3MsIGxhc3QgZGVsdGEgc2hvdWxkIGJlIDMgb3IgbW9yZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWx0YSA8IDMsIFRydWUpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3dyaXRlKHNlbGYpOgorICAgICAgICAgICAgZGVsdGEgPSAwCisgICAgICAgICAgICBsYXN0cmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgICAgICBzID0gTlVMKCkKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgyMCk6CisgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nYXJiYWdlLCBbXSkKKyAgICAgICAgICAgICAgICByYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgICAgICAgICBjc3Yud3JpdGVyKHMpCisgICAgICAgICAgICAgICAgY3N2LndyaXRlcihzKQorICAgICAgICAgICAgICAgIGNzdi53cml0ZXIocykKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHJjLWxhc3RyYworICAgICAgICAgICAgICAgIGxhc3RyYyA9IHJjCisgICAgICAgICAgICAjIGlmIGNzdi53cml0ZXIoKSBsZWFrcywgbGFzdCBkZWx0YSBzaG91bGQgYmUgMyBvciBtb3JlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlbHRhIDwgMywgVHJ1ZSkKKworICAgICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICAgICAgZGVsdGEgPSAwCisgICAgICAgICAgICByb3dzID0gWyJhLGIsY1xyXG4iXSo1CisgICAgICAgICAgICBsYXN0cmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMjApOgorICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuZ2FyYmFnZSwgW10pCisgICAgICAgICAgICAgICAgcmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgICAgICAgICAgcmRyID0gY3N2LnJlYWRlcihyb3dzKQorICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcmRyOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZGVsdGEgPSByYy1sYXN0cmMKKyAgICAgICAgICAgICAgICBsYXN0cmMgPSByYworICAgICAgICAgICAgIyBpZiByZWFkZXIgbGVha3MgZHVyaW5nIHJlYWQsIGRlbHRhIHNob3VsZCBiZSA1IG9yIG1vcmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVsdGEgPCA1LCBUcnVlKQorCisgICAgICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICAgICAgZGVsdGEgPSAwCisgICAgICAgICAgICByb3dzID0gW1sxLDIsM11dKjUKKyAgICAgICAgICAgIHMgPSBOVUwoKQorICAgICAgICAgICAgbGFzdHJjID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDIwKToKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIFtdKQorICAgICAgICAgICAgICAgIHJjID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIocykKKyAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJvd3M6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhyb3cpCisgICAgICAgICAgICAgICAgZGVsdGEgPSByYy1sYXN0cmMKKyAgICAgICAgICAgICAgICBsYXN0cmMgPSByYworICAgICAgICAgICAgIyBpZiB3cml0ZXIgbGVha3MgZHVyaW5nIHdyaXRlLCBsYXN0IGRlbHRhIHNob3VsZCBiZSA1IG9yIG1vcmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVsdGEgPCA1LCBUcnVlKQorCisjIGNvbW1lbnRlZCBvdXQgZm9yIG5vdyAtIGNzdiBtb2R1bGUgZG9lc24ndCB5ZXQgc3VwcG9ydCBVbmljb2RlCisjIyBjbGFzcyBUZXN0VW5pY29kZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisjIyAgICAgZGVmIHRlc3RfdW5pY29kZV9yZWFkKHNlbGYpOgorIyMgICAgICAgICBpbXBvcnQgY29kZWNzCisjIyAgICAgICAgIGYgPSBjb2RlY3MuRW5jb2RlZEZpbGUoU3RyaW5nSU8oIk1hcnRpbiB2b24gTPZ3aXMsIgorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYXJjIEFuZHLpIExlbWJ1cmcsIgorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHdWlkbyB2YW4gUm9zc3VtLCIKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnJhbudvaXMgUGluYXJkXHJcbiIpLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfZW5jb2Rpbmc9J2lzby04ODU5LTEnKQorIyMgICAgICAgICByZWFkZXIgPSBjc3YucmVhZGVyKGYpCisjIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZWFkZXIpLCBbW3UiTWFydGluIHZvbiBM9ndpcyIsCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUiTWFyYyBBbmRy6SBMZW1idXJnIiwKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSJHdWlkbyB2YW4gUm9zc3VtIiwKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSJGcmFu529pcyBQaW5hcmRuIl1dKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgbW9kID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgKltnZXRhdHRyKG1vZCwgbmFtZSkgZm9yIG5hbWUgaW4gZGlyKG1vZCkgaWYgbmFtZS5zdGFydHN3aXRoKCdUZXN0JyldCisgICAgKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jdHlwZXMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jdHlwZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmMjg3NAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2N0eXBlcy5weQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCisjU2tpcCB0ZXN0cyBpZiBfY3R5cGVzIG1vZHVsZSBkb2VzIG5vdCBleGlzdAoraW1wb3J0X21vZHVsZSgnX2N0eXBlcycpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGltcG9ydCBjdHlwZXMudGVzdAorICAgIHNraXBwZWQsIHRlc3RjYXNlcyA9IGN0eXBlcy50ZXN0LmdldF90ZXN0cyhjdHlwZXMudGVzdCwgInRlc3RfKi5weSIsIHZlcmJvc2l0eT0wKQorICAgIHN1aXRlcyA9IFt1bml0dGVzdC5tYWtlU3VpdGUodCkgZm9yIHQgaW4gdGVzdGNhc2VzXQorICAgIHJ1bl91bml0dGVzdCh1bml0dGVzdC5UZXN0U3VpdGUoc3VpdGVzKSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGQ0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKQEAgLTAsMCArMSwyOTAgQEAKKyMKKyMgVGVzdCBzY3JpcHQgZm9yIHRoZSBjdXJzZXMgbW9kdWxlCisjCisjIFRoaXMgc2NyaXB0IGRvZXNuJ3QgYWN0dWFsbHkgZGlzcGxheSBhbnl0aGluZyB2ZXJ5IGNvaGVyZW50LiBidXQgaXQKKyMgZG9lcyBjYWxsIGV2ZXJ5IG1ldGhvZCBhbmQgZnVuY3Rpb24uCisjCisjIEZ1bmN0aW9ucyBub3QgdGVzdGVkOiB7ZGVmLHJlc2V0fV97c2hlbGwscHJvZ31fbW9kZSwgZ2V0Y2goKSwgZ2V0c3RyKCksCisjIGluaXRfY29sb3IoKQorIyBPbmx5IGNhbGxlZCwgbm90IHRlc3RlZDogZ2V0bW91c2UoKSwgdW5nZXRtb3VzZSgpCisjCisKK2ltcG9ydCBzeXMsIHRlbXBmaWxlLCBvcworCisjIE9wdGlvbmFsbHkgdGVzdCBjdXJzZXMgbW9kdWxlLiAgVGhpcyBjdXJyZW50bHkgcmVxdWlyZXMgdGhhdCB0aGUKKyMgJ2N1cnNlcycgcmVzb3VyY2UgYmUgZ2l2ZW4gb24gdGhlIHJlZ3J0ZXN0IGNvbW1hbmQgbGluZSB1c2luZyB0aGUgLXUKKyMgb3B0aW9uLiAgSWYgbm90IGF2YWlsYWJsZSwgbm90aGluZyBhZnRlciB0aGlzIGxpbmUgd2lsbCBiZSBleGVjdXRlZC4KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgaW1wb3J0X21vZHVsZQorcmVxdWlyZXMoJ2N1cnNlcycpCitjdXJzZXMgPSBpbXBvcnRfbW9kdWxlKCdjdXJzZXMnKQorY3Vyc2VzLnBhbmVsID0gaW1wb3J0X21vZHVsZSgnY3Vyc2VzLnBhbmVsJykKKworCisjIFhYWDogaWYgbmV3dGVybSB3YXMgc3VwcG9ydGVkIHdlIGNvdWxkIHVzZSBpdCBpbnN0ZWFkIG9mIGluaXRzY3IgYW5kIG5vdCBleGl0Cit0ZXJtID0gb3MuZW52aXJvbi5nZXQoJ1RFUk0nKQoraWYgbm90IHRlcm0gb3IgdGVybSA9PSAndW5rbm93bic6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICIkVEVSTT0lciwgY2FsbGluZyBpbml0c2NyKCkgbWF5IGNhdXNlIGV4aXQiICUgdGVybQorCitpZiBzeXMucGxhdGZvcm0gPT0gImN5Z3dpbiI6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImN5Z3dpbidzIGN1cnNlcyBtb3N0bHkganVzdCBoYW5ncyIpCisKK2RlZiB3aW5kb3dfZnVuY3Moc3Rkc2NyKToKKyAgICAiVGVzdCB0aGUgbWV0aG9kcyBvZiB3aW5kb3dzIgorICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oMTAsMTApCisgICAgd2luID0gY3Vyc2VzLm5ld3dpbig1LDUsIDUsNSkKKyAgICB3aW4yID0gY3Vyc2VzLm5ld3dpbigxNSwxNSwgNSw1KQorCisgICAgZm9yIG1ldGggaW4gW3N0ZHNjci5hZGRjaCwgc3Rkc2NyLmFkZHN0cl06CisgICAgICAgIGZvciBhcmdzIGluIFsoJ2EnKSwgKCdhJywgY3Vyc2VzLkFfQk9MRCksCisgICAgICAgICAgICAgICAgICAgICAoNCw0LCAnYScpLCAoNSw1LCAnYScsIGN1cnNlcy5BX0JPTEQpXToKKyAgICAgICAgICAgIG1ldGgoKmFyZ3MpCisKKyAgICBmb3IgbWV0aCBpbiBbc3Rkc2NyLmJveCwgc3Rkc2NyLmNsZWFyLCBzdGRzY3IuY2xydG9ib3QsCisgICAgICAgICAgICAgICAgIHN0ZHNjci5jbHJ0b2VvbCwgc3Rkc2NyLmN1cnN5bmN1cCwgc3Rkc2NyLmRlbGNoLAorICAgICAgICAgICAgICAgICBzdGRzY3IuZGVsZXRlbG4sIHN0ZHNjci5lcmFzZSwgc3Rkc2NyLmdldGJlZ3l4LAorICAgICAgICAgICAgICAgICBzdGRzY3IuZ2V0YmtnZCwgc3Rkc2NyLmdldGtleSwgc3Rkc2NyLmdldG1heHl4LAorICAgICAgICAgICAgICAgICBzdGRzY3IuZ2V0cGFyeXgsIHN0ZHNjci5nZXR5eCwgc3Rkc2NyLmluY2gsCisgICAgICAgICAgICAgICAgIHN0ZHNjci5pbnNlcnRsbiwgc3Rkc2NyLmluc3RyLCBzdGRzY3IuaXNfd2ludG91Y2hlZCwKKyAgICAgICAgICAgICAgICAgd2luLm5vdXRyZWZyZXNoLCBzdGRzY3IucmVkcmF3d2luLCBzdGRzY3IucmVmcmVzaCwKKyAgICAgICAgICAgICAgICAgc3Rkc2NyLnN0YW5kb3V0LCBzdGRzY3Iuc3RhbmRlbmQsIHN0ZHNjci5zeW5jZG93biwKKyAgICAgICAgICAgICAgICAgc3Rkc2NyLnN5bmN1cCwgc3Rkc2NyLnRvdWNod2luLCBzdGRzY3IudW50b3VjaHdpbl06CisgICAgICAgIG1ldGgoKQorCisgICAgc3Rkc2NyLmFkZG5zdHIoJzEyMzQnLCAzKQorICAgIHN0ZHNjci5hZGRuc3RyKCcxMjM0JywgMywgY3Vyc2VzLkFfQk9MRCkKKyAgICBzdGRzY3IuYWRkbnN0cig0LDQsICcxMjM0JywgMykKKyAgICBzdGRzY3IuYWRkbnN0cig1LDUsICcxMjM0JywgMywgY3Vyc2VzLkFfQk9MRCkKKworICAgIHN0ZHNjci5hdHRyb24oY3Vyc2VzLkFfQk9MRCkKKyAgICBzdGRzY3IuYXR0cm9mZihjdXJzZXMuQV9CT0xEKQorICAgIHN0ZHNjci5hdHRyc2V0KGN1cnNlcy5BX0JPTEQpCisgICAgc3Rkc2NyLmJrZ2QoJyAnKQorICAgIHN0ZHNjci5ia2dkKCcgJywgY3Vyc2VzLkFfUkVWRVJTRSkKKyAgICBzdGRzY3IuYmtnZHNldCgnICcpCisgICAgc3Rkc2NyLmJrZ2RzZXQoJyAnLCBjdXJzZXMuQV9SRVZFUlNFKQorCisgICAgd2luLmJvcmRlcig2NSwgNjYsIDY3LCA2OCwKKyAgICAgICAgICAgICAgIDY5LCA3MCwgNzEsIDcyKQorICAgIHdpbi5ib3JkZXIoJ3wnLCAnIScsICctJywgJ18nLAorICAgICAgICAgICAgICAgJysnLCAnXFwnLCAnIycsICcvJykKKyAgICB0cnk6CisgICAgICAgIHdpbi5ib3JkZXIoNjUsIDY2LCA2NywgNjgsCisgICAgICAgICAgICAgICAgICAgNjksIFtdLCA3MSwgNzIpCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIkV4cGVjdGVkIHdpbi5ib3JkZXIoKSB0byByYWlzZSBUeXBlRXJyb3IiCisKKyAgICBzdGRzY3IuY2xlYXJvaygxKQorCisgICAgd2luNCA9IHN0ZHNjci5kZXJ3aW4oMiwyKQorICAgIHdpbjQgPSBzdGRzY3IuZGVyd2luKDEsMSwgNSw1KQorICAgIHdpbjQubXZkZXJ3aW4oOSw5KQorCisgICAgc3Rkc2NyLmVjaG9jaGFyKCdhJykKKyAgICBzdGRzY3IuZWNob2NoYXIoJ2EnLCBjdXJzZXMuQV9CT0xEKQorICAgIHN0ZHNjci5obGluZSgnLScsIDUpCisgICAgc3Rkc2NyLmhsaW5lKCctJywgNSwgY3Vyc2VzLkFfQk9MRCkKKyAgICBzdGRzY3IuaGxpbmUoMSwxLCctJywgNSkKKyAgICBzdGRzY3IuaGxpbmUoMSwxLCctJywgNSwgY3Vyc2VzLkFfQk9MRCkKKworICAgIHN0ZHNjci5pZGNvaygxKQorICAgIHN0ZHNjci5pZGxvaygxKQorICAgIHN0ZHNjci5pbW1lZG9rKDEpCisgICAgc3Rkc2NyLmluc2NoKCdjJykKKyAgICBzdGRzY3IuaW5zZGVsbG4oMSkKKyAgICBzdGRzY3IuaW5zbnN0cignYWJjJywgMykKKyAgICBzdGRzY3IuaW5zbnN0cignYWJjJywgMywgY3Vyc2VzLkFfQk9MRCkKKyAgICBzdGRzY3IuaW5zbnN0cig1LCA1LCAnYWJjJywgMykKKyAgICBzdGRzY3IuaW5zbnN0cig1LCA1LCAnYWJjJywgMywgY3Vyc2VzLkFfQk9MRCkKKworICAgIHN0ZHNjci5pbnNzdHIoJ2RlZicpCisgICAgc3Rkc2NyLmluc3N0cignZGVmJywgY3Vyc2VzLkFfQk9MRCkKKyAgICBzdGRzY3IuaW5zc3RyKDUsIDUsICdkZWYnKQorICAgIHN0ZHNjci5pbnNzdHIoNSwgNSwgJ2RlZicsIGN1cnNlcy5BX0JPTEQpCisgICAgc3Rkc2NyLmlzX2xpbmV0b3VjaGVkKDApCisgICAgc3Rkc2NyLmtleXBhZCgxKQorICAgIHN0ZHNjci5sZWF2ZW9rKDEpCisgICAgc3Rkc2NyLm1vdmUoMywzKQorICAgIHdpbi5tdndpbigyLDIpCisgICAgc3Rkc2NyLm5vZGVsYXkoMSkKKyAgICBzdGRzY3Iubm90aW1lb3V0KDEpCisgICAgd2luMi5vdmVybGF5KHdpbikKKyAgICB3aW4yLm92ZXJ3cml0ZSh3aW4pCisgICAgd2luMi5vdmVybGF5KHdpbiwgMSwgMiwgMywgMywgMiwgMSkKKyAgICB3aW4yLm92ZXJ3cml0ZSh3aW4sIDEsIDIsIDMsIDMsIDIsIDEpCisgICAgc3Rkc2NyLnJlZHJhd2xuKDEsMikKKworICAgIHN0ZHNjci5zY3JvbGxvaygxKQorICAgIHN0ZHNjci5zY3JvbGwoKQorICAgIHN0ZHNjci5zY3JvbGwoMikKKyAgICBzdGRzY3Iuc2Nyb2xsKC0zKQorCisgICAgc3Rkc2NyLm1vdmUoMTIsIDIpCisgICAgc3Rkc2NyLnNldHNjcnJlZygxMCwxNSkKKyAgICB3aW4zID0gc3Rkc2NyLnN1YndpbigxMCwxMCkKKyAgICB3aW4zID0gc3Rkc2NyLnN1YndpbigxMCwxMCwgNSw1KQorICAgIHN0ZHNjci5zeW5jb2soMSkKKyAgICBzdGRzY3IudGltZW91dCg1KQorICAgIHN0ZHNjci50b3VjaGxpbmUoNSw1KQorICAgIHN0ZHNjci50b3VjaGxpbmUoNSw1LDApCisgICAgc3Rkc2NyLnZsaW5lKCdhJywgMykKKyAgICBzdGRzY3IudmxpbmUoJ2EnLCAzLCBjdXJzZXMuQV9TVEFORE9VVCkKKyAgICBzdGRzY3IuY2hnYXQoNSwgMiwgMywgY3Vyc2VzLkFfQkxJTkspCisgICAgc3Rkc2NyLmNoZ2F0KDMsIGN1cnNlcy5BX0JPTEQpCisgICAgc3Rkc2NyLmNoZ2F0KDUsIDgsIGN1cnNlcy5BX1VOREVSTElORSkKKyAgICBzdGRzY3IuY2hnYXQoY3Vyc2VzLkFfQkxJTkspCisgICAgc3Rkc2NyLnJlZnJlc2goKQorCisgICAgc3Rkc2NyLnZsaW5lKDEsMSwgJ2EnLCAzKQorICAgIHN0ZHNjci52bGluZSgxLDEsICdhJywgMywgY3Vyc2VzLkFfU1RBTkRPVVQpCisKKyAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3Jlc2l6ZScpOgorICAgICAgICBzdGRzY3IucmVzaXplKCkKKyAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2VuY2xvc2UnKToKKyAgICAgICAgc3Rkc2NyLmVuY2xvc2UoKQorCisKK2RlZiBtb2R1bGVfZnVuY3Moc3Rkc2NyKToKKyAgICAiVGVzdCBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zIgorCisgICAgZm9yIGZ1bmMgaW4gW2N1cnNlcy5iYXVkcmF0ZSwgY3Vyc2VzLmJlZXAsIGN1cnNlcy5jYW5fY2hhbmdlX2NvbG9yLAorICAgICAgICAgICAgICAgICBjdXJzZXMuY2JyZWFrLCBjdXJzZXMuZGVmX3Byb2dfbW9kZSwgY3Vyc2VzLmRvdXBkYXRlLAorICAgICAgICAgICAgICAgICBjdXJzZXMuZmlsdGVyLCBjdXJzZXMuZmxhc2gsIGN1cnNlcy5mbHVzaGlucCwKKyAgICAgICAgICAgICAgICAgY3Vyc2VzLmhhc19jb2xvcnMsIGN1cnNlcy5oYXNfaWMsIGN1cnNlcy5oYXNfaWwsCisgICAgICAgICAgICAgICAgIGN1cnNlcy5pc2VuZHdpbiwgY3Vyc2VzLmtpbGxjaGFyLCBjdXJzZXMubG9uZ25hbWUsCisgICAgICAgICAgICAgICAgIGN1cnNlcy5ub2NicmVhaywgY3Vyc2VzLm5vZWNobywgY3Vyc2VzLm5vbmwsCisgICAgICAgICAgICAgICAgIGN1cnNlcy5ub3FpZmx1c2gsIGN1cnNlcy5ub3JhdywKKyAgICAgICAgICAgICAgICAgY3Vyc2VzLnJlc2V0X3Byb2dfbW9kZSwgY3Vyc2VzLnRlcm1hdHRycywKKyAgICAgICAgICAgICAgICAgY3Vyc2VzLnRlcm1uYW1lLCBjdXJzZXMuZXJhc2VjaGFyLCBjdXJzZXMuZ2V0c3l4XToKKyAgICAgICAgZnVuYygpCisKKyAgICAjIEZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IG5lZWQgYXJndW1lbnRzCisgICAgaWYgY3Vyc2VzLnRpZ2V0c3RyKCJjbm9ybSIpOgorICAgICAgICBjdXJzZXMuY3Vyc19zZXQoMSkKKyAgICBjdXJzZXMuZGVsYXlfb3V0cHV0KDEpCisgICAgY3Vyc2VzLmVjaG8oKSA7IGN1cnNlcy5lY2hvKDEpCisKKyAgICBmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgc3Rkc2NyLnB1dHdpbihmKQorICAgIGYuc2VlaygwKQorICAgIGN1cnNlcy5nZXR3aW4oZikKKyAgICBmLmNsb3NlKCkKKworICAgIGN1cnNlcy5oYWxmZGVsYXkoMSkKKyAgICBjdXJzZXMuaW50cmZsdXNoKDEpCisgICAgY3Vyc2VzLm1ldGEoMSkKKyAgICBjdXJzZXMubmFwbXMoMTAwKQorICAgIGN1cnNlcy5uZXdwYWQoNTAsNTApCisgICAgd2luID0gY3Vyc2VzLm5ld3dpbig1LDUpCisgICAgd2luID0gY3Vyc2VzLm5ld3dpbig1LDUsIDEsMSkKKyAgICBjdXJzZXMubmwoKSA7IGN1cnNlcy5ubCgxKQorICAgIGN1cnNlcy5wdXRwKCdhYmMnKQorICAgIGN1cnNlcy5xaWZsdXNoKCkKKyAgICBjdXJzZXMucmF3KCkgOyBjdXJzZXMucmF3KDEpCisgICAgY3Vyc2VzLnNldHN5eCg1LDUpCisgICAgY3Vyc2VzLnRpZ2V0ZmxhZygnaGMnKQorICAgIGN1cnNlcy50aWdldG51bSgnY28nKQorICAgIGN1cnNlcy50aWdldHN0cignY3InKQorICAgIGN1cnNlcy50cGFybSgnY3InKQorICAgIGN1cnNlcy50eXBlYWhlYWQoc3lzLl9fc3RkaW5fXy5maWxlbm8oKSkKKyAgICBjdXJzZXMudW5jdHJsKCdhJykKKyAgICBjdXJzZXMudW5nZXRjaCgnYScpCisgICAgY3Vyc2VzLnVzZV9lbnYoMSkKKworICAgICMgRnVuY3Rpb25zIG9ubHkgYXZhaWxhYmxlIG9uIGEgZmV3IHBsYXRmb3JtcworICAgIGlmIGN1cnNlcy5oYXNfY29sb3JzKCk6CisgICAgICAgIGN1cnNlcy5zdGFydF9jb2xvcigpCisgICAgICAgIGN1cnNlcy5pbml0X3BhaXIoMiwgMSwxKQorICAgICAgICBjdXJzZXMuY29sb3JfY29udGVudCgxKQorICAgICAgICBjdXJzZXMuY29sb3JfcGFpcigyKQorICAgICAgICBjdXJzZXMucGFpcl9jb250ZW50KGN1cnNlcy5DT0xPUl9QQUlSUyAtIDEpCisgICAgICAgIGN1cnNlcy5wYWlyX251bWJlcigwKQorCisgICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAndXNlX2RlZmF1bHRfY29sb3JzJyk6CisgICAgICAgICAgICBjdXJzZXMudXNlX2RlZmF1bHRfY29sb3JzKCkKKworICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAna2V5bmFtZScpOgorICAgICAgICBjdXJzZXMua2V5bmFtZSgxMykKKworICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnaGFzX2tleScpOgorICAgICAgICBjdXJzZXMuaGFzX2tleSgxMykKKworICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnZ2V0bW91c2UnKToKKyAgICAgICAgKGF2YWlsbWFzaywgb2xkbWFzaykgPSBjdXJzZXMubW91c2VtYXNrKGN1cnNlcy5CVVRUT04xX1BSRVNTRUQpCisgICAgICAgICMgYXZhaWxtYXNrIGluZGljYXRlcyB0aGF0IG1vdXNlIHN0dWZmIG5vdCBhdmFpbGFibGUuCisgICAgICAgIGlmIGF2YWlsbWFzayAhPSAwOgorICAgICAgICAgICAgY3Vyc2VzLm1vdXNlaW50ZXJ2YWwoMTApCisgICAgICAgICAgICAjIGp1c3QgdmVyaWZ5IHRoZXNlIGRvbid0IGNhdXNlIGVycm9ycworICAgICAgICAgICAgY3Vyc2VzLnVuZ2V0bW91c2UoMCwgMCwgMCwgMCwgY3Vyc2VzLkJVVFRPTjFfUFJFU1NFRCkKKyAgICAgICAgICAgIG0gPSBjdXJzZXMuZ2V0bW91c2UoKQorCisgICAgaWYgaGFzYXR0cihjdXJzZXMsICdpc190ZXJtX3Jlc2l6ZWQnKToKKyAgICAgICAgY3Vyc2VzLmlzX3Rlcm1fcmVzaXplZCgqc3Rkc2NyLmdldG1heHl4KCkpCisgICAgaWYgaGFzYXR0cihjdXJzZXMsICdyZXNpemV0ZXJtJyk6CisgICAgICAgIGN1cnNlcy5yZXNpemV0ZXJtKCpzdGRzY3IuZ2V0bWF4eXgoKSkKKyAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3Jlc2l6ZV90ZXJtJyk6CisgICAgICAgIGN1cnNlcy5yZXNpemVfdGVybSgqc3Rkc2NyLmdldG1heHl4KCkpCisKK2RlZiB1bml0X3Rlc3RzKCk6CisgICAgZnJvbSBjdXJzZXMgaW1wb3J0IGFzY2lpCisgICAgZm9yIGNoLCBleHBlY3RlZCBpbiBbKCdhJywgJ2EnKSwgKCdBJywgJ0EnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJzsnLCAnOycpLCAoJyAnLCAnICcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnXHg3ZicsICdePycpLCAoJ1xuJywgJ15KJyksICgnXDAnLCAnXkAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIE1ldGEtYml0IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4OGEnLCAnIV5KJyksICgnXHhjMScsICchQScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgIGlmIGFzY2lpLnVuY3RybChjaCkgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICBwcmludCAnY3Vyc2VzLnVuY3RybCBmYWlscyBvbiBjaGFyYWN0ZXInLCByZXByKGNoKQorCisKK2RlZiB0ZXN0X3VzZXJwdHJfd2l0aG91dF9zZXQoc3Rkc2NyKToKKyAgICB3ID0gY3Vyc2VzLm5ld3dpbigxMCwgMTApCisgICAgcCA9IGN1cnNlcy5wYW5lbC5uZXdfcGFuZWwodykKKyAgICAjIHRyeSB0byBhY2Nlc3MgdXNlcnB0cigpIGJlZm9yZSBjYWxsaW5nIHNldF91c2VycHRyKCkgLS0gc2VnZmF1bHRzCisgICAgdHJ5OgorICAgICAgICBwLnVzZXJwdHIoKQorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICd1c2VycHRyIHNob3VsZCBmYWlsIHNpbmNlIG5vdCBzZXQnCisgICAgZXhjZXB0IGN1cnNlcy5wYW5lbC5lcnJvcjoKKyAgICAgICAgcGFzcworCitkZWYgdGVzdF9yZXNpemVfdGVybShzdGRzY3IpOgorICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAncmVzaXpldGVybScpOgorICAgICAgICBsaW5lcywgY29scyA9IGN1cnNlcy5MSU5FUywgY3Vyc2VzLkNPTFMKKyAgICAgICAgY3Vyc2VzLnJlc2l6ZXRlcm0obGluZXMgLSAxLCBjb2xzICsgMSkKKworICAgICAgICBpZiBjdXJzZXMuTElORVMgIT0gbGluZXMgLSAxIG9yIGN1cnNlcy5DT0xTICE9IGNvbHMgKyAxOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiRXhwZWN0ZWQgcmVzaXpldGVybSB0byB1cGRhdGUgTElORVMgYW5kIENPTFMiCisKK2RlZiB0ZXN0X2lzc3VlNjI0MyhzdGRzY3IpOgorICAgIGN1cnNlcy51bmdldGNoKDEwMjUpCisgICAgc3Rkc2NyLmdldGtleSgpCisKK2RlZiBtYWluKHN0ZHNjcik6CisgICAgY3Vyc2VzLnNhdmV0dHkoKQorICAgIHRyeToKKyAgICAgICAgbW9kdWxlX2Z1bmNzKHN0ZHNjcikKKyAgICAgICAgd2luZG93X2Z1bmNzKHN0ZHNjcikKKyAgICAgICAgdGVzdF91c2VycHRyX3dpdGhvdXRfc2V0KHN0ZHNjcikKKyAgICAgICAgdGVzdF9yZXNpemVfdGVybShzdGRzY3IpCisgICAgICAgIHRlc3RfaXNzdWU2MjQzKHN0ZHNjcikKKyAgICBmaW5hbGx5OgorICAgICAgICBjdXJzZXMucmVzZXR0eSgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgY3Vyc2VzLndyYXBwZXIobWFpbikKKyAgICB1bml0X3Rlc3RzKCkKK2Vsc2U6CisgICAgaWYgbm90IHN5cy5fX3N0ZG91dF9fLmlzYXR0eSgpOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic3lzLl9fc3Rkb3V0X18gaXMgbm90IGEgdHR5IikKKyAgICAjIHRlc3Rpbmcgc2V0dXB0ZXJtKCkgaW5zaWRlIGluaXRzY3IvZW5kd2luCisgICAgIyBjYXVzZXMgdGVybWluYWwgYnJlYWthZ2UKKyAgICBjdXJzZXMuc2V0dXB0ZXJtKGZkPXN5cy5fX3N0ZG91dF9fLmZpbGVubygpKQorICAgIHRyeToKKyAgICAgICAgc3Rkc2NyID0gY3Vyc2VzLmluaXRzY3IoKQorICAgICAgICBtYWluKHN0ZHNjcikKKyAgICBmaW5hbGx5OgorICAgICAgICBjdXJzZXMuZW5kd2luKCkKKyAgICB1bml0X3Rlc3RzKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RhdGV0aW1lLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGF0ZXRpbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0NmQ2MAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RhdGV0aW1lLnB5CkBAIC0wLDAgKzEsMzM2NyBAQAorIiIiVGVzdCBkYXRlL3RpbWUgdHlwZS4KKworU2VlIGh0dHA6Ly93d3cuem9wZS5vcmcvTWVtYmVycy9mZHJha2UvRGF0ZVRpbWVXaWtpL1Rlc3RDYXNlcworIiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCitpbXBvcnQgc3lzCitpbXBvcnQgcGlja2xlCitpbXBvcnQgY1BpY2tsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IE1JTllFQVIsIE1BWFlFQVIKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQorZnJvbSBkYXRldGltZSBpbXBvcnQgdHppbmZvCitmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCBkYXRldGltZQorCitwaWNrbGVfY2hvaWNlcyA9IFsocGlja2xlciwgdW5waWNrbGVyLCBwcm90bykKKyAgICAgICAgICAgICAgICAgIGZvciBwaWNrbGVyIGluIHBpY2tsZSwgY1BpY2tsZQorICAgICAgICAgICAgICAgICAgZm9yIHVucGlja2xlciBpbiBwaWNrbGUsIGNQaWNrbGUKKyAgICAgICAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgzKV0KK2Fzc2VydCBsZW4ocGlja2xlX2Nob2ljZXMpID09IDIqMiozCisKKyMgQW4gYXJiaXRyYXJ5IGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBvZiBub24tZGF0ZXRpbWUgdHlwZXMsIGZvciB0ZXN0aW5nCisjIG1peGVkLXR5cGUgY29tcGFyaXNvbnMuCitPVEhFUlNUVUZGID0gKDEwLCAxMEwsIDM0LjUsICJhYmMiLCB7fSwgW10sICgpKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vZHVsZSB0ZXN0cworCitjbGFzcyBUZXN0TW9kdWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgaW1wb3J0IGRhdGV0aW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZXRpbWUuTUlOWUVBUiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRldGltZS5NQVhZRUFSLCA5OTk5KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB0emluZm8gdGVzdHMKKworY2xhc3MgRml4ZWRPZmZzZXQodHppbmZvKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb2Zmc2V0LCBuYW1lLCBkc3RvZmZzZXQ9NDIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9mZnNldCwgaW50KToKKyAgICAgICAgICAgIG9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPW9mZnNldCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkc3RvZmZzZXQsIGludCk6CisgICAgICAgICAgICBkc3RvZmZzZXQgPSB0aW1lZGVsdGEobWludXRlcz1kc3RvZmZzZXQpCisgICAgICAgIHNlbGYuX19vZmZzZXQgPSBvZmZzZXQKKyAgICAgICAgc2VsZi5fX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX19kc3RvZmZzZXQgPSBkc3RvZmZzZXQKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fbmFtZS5sb3dlcigpCisgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9fb2Zmc2V0CisgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9fbmFtZQorICAgIGRlZiBkc3Qoc2VsZiwgZHQpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2RzdG9mZnNldAorCitjbGFzcyBQaWNrbGFibGVGaXhlZE9mZnNldChGaXhlZE9mZnNldCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9mZnNldD1Ob25lLCBuYW1lPU5vbmUsIGRzdG9mZnNldD1Ob25lKToKKyAgICAgICAgRml4ZWRPZmZzZXQuX19pbml0X18oc2VsZiwgb2Zmc2V0LCBuYW1lLCBkc3RvZmZzZXQpCisKK2NsYXNzIFRlc3RUWkluZm8odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm9uX2Fic3RyYWN0bmVzcyhzZWxmKToKKyAgICAgICAgIyBJbiBvcmRlciB0byBhbGxvdyBzdWJjbGFzc2VzIHRvIGdldCBwaWNrbGVkLCB0aGUgQyBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIHdhc24ndCBhYmxlIHRvIGdldCBhd2F5IHdpdGggaGF2aW5nIF9faW5pdF9fIHJhaXNlCisgICAgICAgICMgTm90SW1wbGVtZW50ZWRFcnJvci4KKyAgICAgICAgdXNlbGVzcyA9IHR6aW5mbygpCisgICAgICAgIGR0ID0gZGF0ZXRpbWUubWF4CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHVzZWxlc3MudHpuYW1lLCBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdXNlbGVzcy51dGNvZmZzZXQsIGR0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB1c2VsZXNzLmRzdCwgZHQpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19tdXN0X292ZXJyaWRlKHNlbGYpOgorICAgICAgICBjbGFzcyBOb3RFbm91Z2godHppbmZvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQsIG5hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuX19vZmZzZXQgPSBvZmZzZXQKKyAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTm90RW5vdWdoLCB0emluZm8pKQorICAgICAgICBuZSA9IE5vdEVub3VnaCgzLCAiTm90QnlBTG9uZ1Nob3QiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobmUsIHR6aW5mbykKKworICAgICAgICBkdCA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG5lLnR6bmFtZSwgZHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG5lLnV0Y29mZnNldCwgZHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG5lLmRzdCwgZHQpCisKKyAgICBkZWYgdGVzdF9ub3JtYWwoc2VsZik6CisgICAgICAgIGZvID0gRml4ZWRPZmZzZXQoMywgIlRocmVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvLCB0emluZm8pCisgICAgICAgIGZvciBkdCBpbiBkYXRldGltZS5ub3coKSwgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8udXRjb2Zmc2V0KGR0KSwgdGltZWRlbHRhKG1pbnV0ZXM9MykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnR6bmFtZShkdCksICJUaHJlZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLmRzdChkdCksIHRpbWVkZWx0YShtaW51dGVzPTQyKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nX2Jhc2Uoc2VsZik6CisgICAgICAgICMgVGhlcmUncyBubyBwb2ludCB0byBwaWNrbGluZyB0emluZm8gb2JqZWN0cyBvbiB0aGVpciBvd24gKHRoZXkKKyAgICAgICAgIyBjYXJyeSBubyBkYXRhKSwgYnV0IHRoZXkgbmVlZCB0byBiZSBwaWNrbGFibGUgYW55d2F5IGVsc2UKKyAgICAgICAgIyBjb25jcmV0ZSBzdWJjbGFzc2VzIGNhbid0IGJlIHBpY2tsZWQuCisgICAgICAgIG9yaWcgPSB0emluZm8uX19uZXdfXyh0emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKG9yaWcpIGlzIHR6aW5mbykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZGVyaXZlZCkgaXMgdHppbmZvKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfc3ViY2xhc3Moc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHdlIGNhbiBwaWNrbGUvdW5waWNrbGUgYW4gaW5zdGFuY2Ugb2YgYSBzdWJjbGFzcy4KKyAgICAgICAgb2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9LTMwMCkKKyAgICAgICAgb3JpZyA9IFBpY2tsYWJsZUZpeGVkT2Zmc2V0KG9mZnNldCwgJ2Nvb2tpZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcmlnLCB0emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKG9yaWcpIGlzIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcudXRjb2Zmc2V0KE5vbmUpLCBvZmZzZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZy50em5hbWUoTm9uZSksICdjb29raWUnKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGVyaXZlZCwgdHppbmZvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZGVyaXZlZCkgaXMgUGlja2xhYmxlRml4ZWRPZmZzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudXRjb2Zmc2V0KE5vbmUpLCBvZmZzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudHpuYW1lKE5vbmUpLCAnY29va2llJykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQmFzZSBjbGFzZSBmb3IgdGVzdGluZyBhIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRpbWVkZWx0YSwgdGltZSwgZGF0ZSBhbmQKKyMgZGF0ZXRpbWUgY29tcGFyaXNvbnMuCisKK2NsYXNzIEhhcm1sZXNzTWl4ZWRDb21wYXJpc29uOgorICAgICMgVGVzdCB0aGF0IF9fZXFfXyBhbmQgX19uZV9fIGRvbid0IGNvbXBsYWluIGZvciBtaXhlZC10eXBlIGNvbXBhcmlzb25zLgorCisgICAgIyBTdWJjbGFzc2VzIG11c3QgZGVmaW5lICd0aGVjbGFzcycsIGFuZCB0aGVjbGFzcygxLCAxLCAxKSBtdXN0IGJlIGEKKyAgICAjIGxlZ2l0IGNvbnN0cnVjdG9yLgorCisgICAgZGVmIHRlc3RfaGFybWxlc3NfbWl4ZWRfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgbWUgPSBzZWxmLnRoZWNsYXNzKDEsIDEsIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZSA9PSAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1lICE9ICgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCgpID09IG1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKCkgIT0gbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtZSwgWzEsIDIwTCwgW10sIG1lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihbXSwgW21lLCAxLCAyMEwsIFtdXSkKKworICAgIGRlZiB0ZXN0X2hhcm1mdWxfbWl4ZWRfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgbWUgPSBzZWxmLnRoZWNsYXNzKDEsIDEsIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1lIDwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtZSA8PSAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1lID4gKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtZSA+PSAoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogKCkgPCBtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6ICgpIDw9IG1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogKCkgPiBtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6ICgpID49IG1lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCAoKSwgbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCBtZSwgKCkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHRpbWVkZWx0YSB0ZXN0cworCitjbGFzcyBUZXN0VGltZURlbHRhKEhhcm1sZXNzTWl4ZWRDb21wYXJpc29uLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICB0aGVjbGFzcyA9IHRpbWVkZWx0YQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB0ZCA9IHRpbWVkZWx0YQorCisgICAgICAgICMgQ2hlY2sga2V5d29yZCBhcmdzIHRvIGNvbnN0cnVjdG9yCisgICAgICAgIGVxKHRkKCksIHRkKHdlZWtzPTAsIGRheXM9MCwgaG91cnM9MCwgbWludXRlcz0wLCBzZWNvbmRzPTAsCisgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcz0wLCBtaWNyb3NlY29uZHM9MCkpCisgICAgICAgIGVxKHRkKDEpLCB0ZChkYXlzPTEpKQorICAgICAgICBlcSh0ZCgwLCAxKSwgdGQoc2Vjb25kcz0xKSkKKyAgICAgICAgZXEodGQoMCwgMCwgMSksIHRkKG1pY3Jvc2Vjb25kcz0xKSkKKyAgICAgICAgZXEodGQod2Vla3M9MSksIHRkKGRheXM9NykpCisgICAgICAgIGVxKHRkKGRheXM9MSksIHRkKGhvdXJzPTI0KSkKKyAgICAgICAgZXEodGQoaG91cnM9MSksIHRkKG1pbnV0ZXM9NjApKQorICAgICAgICBlcSh0ZChtaW51dGVzPTEpLCB0ZChzZWNvbmRzPTYwKSkKKyAgICAgICAgZXEodGQoc2Vjb25kcz0xKSwgdGQobWlsbGlzZWNvbmRzPTEwMDApKQorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MSksIHRkKG1pY3Jvc2Vjb25kcz0xMDAwKSkKKworICAgICAgICAjIENoZWNrIGZsb2F0IGFyZ3MgdG8gY29uc3RydWN0b3IKKyAgICAgICAgZXEodGQod2Vla3M9MS4wLzcpLCB0ZChkYXlzPTEpKQorICAgICAgICBlcSh0ZChkYXlzPTEuMC8yNCksIHRkKGhvdXJzPTEpKQorICAgICAgICBlcSh0ZChob3Vycz0xLjAvNjApLCB0ZChtaW51dGVzPTEpKQorICAgICAgICBlcSh0ZChtaW51dGVzPTEuMC82MCksIHRkKHNlY29uZHM9MSkpCisgICAgICAgIGVxKHRkKHNlY29uZHM9MC4wMDEpLCB0ZChtaWxsaXNlY29uZHM9MSkpCisgICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0wLjAwMSksIHRkKG1pY3Jvc2Vjb25kcz0xKSkKKworICAgIGRlZiB0ZXN0X2NvbXB1dGF0aW9ucyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHRkID0gdGltZWRlbHRhCisKKyAgICAgICAgYSA9IHRkKDcpICMgT25lIHdlZWsKKyAgICAgICAgYiA9IHRkKDAsIDYwKSAjIE9uZSBtaW51dGUKKyAgICAgICAgYyA9IHRkKDAsIDAsIDEwMDApICMgT25lIG1pbGxpc2Vjb25kCisgICAgICAgIGVxKGErYitjLCB0ZCg3LCA2MCwgMTAwMCkpCisgICAgICAgIGVxKGEtYiwgdGQoNiwgMjQqMzYwMCAtIDYwKSkKKyAgICAgICAgZXEoLWEsIHRkKC03KSkKKyAgICAgICAgZXEoK2EsIHRkKDcpKQorICAgICAgICBlcSgtYiwgdGQoLTEsIDI0KjM2MDAgLSA2MCkpCisgICAgICAgIGVxKC1jLCB0ZCgtMSwgMjQqMzYwMCAtIDEsIDk5OTAwMCkpCisgICAgICAgIGVxKGFicyhhKSwgYSkKKyAgICAgICAgZXEoYWJzKC1hKSwgYSkKKyAgICAgICAgZXEodGQoNiwgMjQqMzYwMCksIGEpCisgICAgICAgIGVxKHRkKDAsIDAsIDYwKjEwMDAwMDApLCBiKQorICAgICAgICBlcShhKjEwLCB0ZCg3MCkpCisgICAgICAgIGVxKGEqMTAsIDEwKmEpCisgICAgICAgIGVxKGEqMTBMLCAxMCphKQorICAgICAgICBlcShiKjEwLCB0ZCgwLCA2MDApKQorICAgICAgICBlcSgxMCpiLCB0ZCgwLCA2MDApKQorICAgICAgICBlcShiKjEwTCwgdGQoMCwgNjAwKSkKKyAgICAgICAgZXEoYyoxMCwgdGQoMCwgMCwgMTAwMDApKQorICAgICAgICBlcSgxMCpjLCB0ZCgwLCAwLCAxMDAwMCkpCisgICAgICAgIGVxKGMqMTBMLCB0ZCgwLCAwLCAxMDAwMCkpCisgICAgICAgIGVxKGEqLTEsIC1hKQorICAgICAgICBlcShiKi0yLCAtYi1iKQorICAgICAgICBlcShjKi0yLCAtYystYykKKyAgICAgICAgZXEoYiooNjAqMjQpLCAoYio2MCkqMjQpCisgICAgICAgIGVxKGIqKDYwKjI0KSwgKDYwKmIpKjI0KQorICAgICAgICBlcShjKjEwMDAsIHRkKDAsIDEpKQorICAgICAgICBlcSgxMDAwKmMsIHRkKDAsIDEpKQorICAgICAgICBlcShhLy83LCB0ZCgxKSkKKyAgICAgICAgZXEoYi8vMTAsIHRkKDAsIDYpKQorICAgICAgICBlcShjLy8xMDAwLCB0ZCgwLCAwLCAxKSkKKyAgICAgICAgZXEoYS8vMTAsIHRkKDAsIDcqMjQqMzYwKSkKKyAgICAgICAgZXEoYS8vMzYwMDAwMCwgdGQoMCwgMCwgNyoyNCoxMDAwKSkKKworICAgICAgICAjIElzc3VlICMxMTU3NgorICAgICAgICBlcSh0ZCg5OTk5OTk5OTksIDg2Mzk5LCA5OTk5OTkpIC0gdGQoOTk5OTk5OTk5LCA4NjM5OSwgOTk5OTk4KSwKKyAgICAgICAgICAgdGQoMCwgMCwgMSkpCisgICAgICAgIGVxKHRkKDk5OTk5OTk5OSwgMSwgMSkgLSB0ZCg5OTk5OTk5OTksIDEsIDApLAorICAgICAgICAgICB0ZCgwLCAwLCAxKSkKKworCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9jb21wdXRhdGlvbnMoc2VsZik6CisgICAgICAgIGEgPSB0aW1lZGVsdGEoNDIpCisKKyAgICAgICAgIyBBZGQvc3ViIGludHMsIGxvbmdzLCBmbG9hdHMgc2hvdWxkIGJlIGlsbGVnYWwKKyAgICAgICAgZm9yIGkgaW4gMSwgMUwsIDEuMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhK2kpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYS1pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGkrYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpLWEpCisKKyAgICAgICAgIyBNdWwvZGl2IGJ5IGZsb2F0IGlzbid0IHN1cHBvcnRlZC4KKyAgICAgICAgeCA9IDIuMworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSp4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogeCphKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYS94KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogeC9hKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAvLyB4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogeCAvLyBhKQorCisgICAgICAgICMgRGl2aXNpb24gb2YgaW50IGJ5IHRpbWVkZWx0YSBkb2Vzbid0IG1ha2Ugc2Vuc2UuCisgICAgICAgICMgRGl2aXNpb24gYnkgemVybyBkb2Vzbid0IG1ha2Ugc2Vuc2UuCisgICAgICAgIGZvciB6ZXJvIGluIDAsIDBMOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHplcm8gLy8gYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsYW1iZGE6IGEgLy8gemVybykKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGRheXMsIHNlY29uZHMsIHVzID0gMSwgNywgMzEKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEoZGF5cywgc2Vjb25kcywgdXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF5cywgZGF5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZWNvbmRzLCBzZWNvbmRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLm1pY3Jvc2Vjb25kcywgdXMpCisKKyAgICBkZWYgdGVzdF90b3RhbF9zZWNvbmRzKHNlbGYpOgorICAgICAgICB0ZCA9IHRpbWVkZWx0YShkYXlzPTM2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC50b3RhbF9zZWNvbmRzKCksIDMxNTM2MDAwLjApCisgICAgICAgIGZvciB0b3RhbF9zZWNvbmRzIGluIFsxMjM0NTYuNzg5MDEyLCAtMTIzNDU2Ljc4OTAxMiwgMC4xMjM0NTYsIDAsIDFlNl06CisgICAgICAgICAgICB0ZCA9IHRpbWVkZWx0YShzZWNvbmRzPXRvdGFsX3NlY29uZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnRvdGFsX3NlY29uZHMoKSwgdG90YWxfc2Vjb25kcykKKyAgICAgICAgIyBJc3N1ZTg2NDQ6IFRlc3QgdGhhdCB0ZC50b3RhbF9zZWNvbmRzKCkgaGFzIHRoZSBzYW1lCisgICAgICAgICMgYWNjdXJhY3kgYXMgdGQgLyB0aW1lZGVsdGEoc2Vjb25kcz0xKS4KKyAgICAgICAgZm9yIG1zIGluIFstMSwgLTIsIC0xMjNdOgorICAgICAgICAgICAgdGQgPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPW1zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC50b3RhbF9zZWNvbmRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoMjQqMzYwMCp0ZC5kYXlzICsgdGQuc2Vjb25kcykqMTAqKjYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdGQubWljcm9zZWNvbmRzKS8xMCoqNikKKworICAgIGRlZiB0ZXN0X2NhcnJpZXMoc2VsZik6CisgICAgICAgIHQxID0gdGltZWRlbHRhKGRheXM9MTAwLAorICAgICAgICAgICAgICAgICAgICAgICB3ZWVrcz0tNywKKyAgICAgICAgICAgICAgICAgICAgICAgaG91cnM9LTI0KigxMDAtNDkpLAorICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVzPS0zLAorICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPTEyLAorICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZHM9KDMqNjAgLSAxMikgKiAxZTYgKyAxKQorICAgICAgICB0MiA9IHRpbWVkZWx0YShtaWNyb3NlY29uZHM9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisKKyAgICBkZWYgdGVzdF9oYXNoX2VxdWFsaXR5KHNlbGYpOgorICAgICAgICB0MSA9IHRpbWVkZWx0YShkYXlzPTEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgd2Vla3M9LTcsCisgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzPS0yNCooMTAwLTQ5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWludXRlcz0tMywKKyAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz0xMiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWljcm9zZWNvbmRzPSgzKjYwIC0gMTIpICogMTAwMDAwMCkKKyAgICAgICAgdDIgPSB0aW1lZGVsdGEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQyKSkKKworICAgICAgICB0MSArPSB0aW1lZGVsdGEod2Vla3M9NykKKyAgICAgICAgdDIgKz0gdGltZWRlbHRhKGRheXM9Nyo3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MikpCisKKyAgICAgICAgZCA9IHt0MTogMX0KKyAgICAgICAgZFt0Ml0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbdDFdLCAyKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGFyZ3MgPSAxMiwgMzQsIDU2CisgICAgICAgIG9yaWcgPSB0aW1lZGVsdGEoKmFyZ3MpCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6CisgICAgICAgIHQxID0gdGltZWRlbHRhKDIsIDMsIDQpCisgICAgICAgIHQyID0gdGltZWRlbHRhKDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA9PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPj0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgIT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MSwgdDIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MiwgdDEpLCAwKQorCisgICAgICAgIGZvciBhcmdzIGluICgzLCAzLCAzKSwgKDIsIDQsIDQpLCAoMiwgMywgNSk6CisgICAgICAgICAgICB0MiA9IHRpbWVkZWx0YSgqYXJncykgICAjIHRoaXMgaXMgbGFyZ2VyIHRoYW4gdDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPj0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgIT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgIT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID09IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA9PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPCB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPj0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDw9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgLTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MiwgdDEpLCAxKQorCisgICAgICAgIGZvciBiYWRhcmcgaW4gT1RIRVJTVFVGRjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEgPT0gYmFkYXJnLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEgIT0gYmFkYXJnLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWRhcmcgPT0gdDEsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWRhcmcgIT0gdDEsIFRydWUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA8PSBiYWRhcmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPCBiYWRhcmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPiBiYWRhcmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPj0gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA8PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPCB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPiB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPj0gdDEpCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHRkID0gdGltZWRlbHRhCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIGVxKHN0cih0ZCgxKSksICIxIGRheSwgMDowMDowMCIpCisgICAgICAgIGVxKHN0cih0ZCgtMSkpLCAiLTEgZGF5LCAwOjAwOjAwIikKKyAgICAgICAgZXEoc3RyKHRkKDIpKSwgIjIgZGF5cywgMDowMDowMCIpCisgICAgICAgIGVxKHN0cih0ZCgtMikpLCAiLTIgZGF5cywgMDowMDowMCIpCisKKyAgICAgICAgZXEoc3RyKHRkKGhvdXJzPTEyLCBtaW51dGVzPTU4LCBzZWNvbmRzPTU5KSksICIxMjo1ODo1OSIpCisgICAgICAgIGVxKHN0cih0ZChob3Vycz0yLCBtaW51dGVzPTMsIHNlY29uZHM9NCkpLCAiMjowMzowNCIpCisgICAgICAgIGVxKHN0cih0ZCh3ZWVrcz0tMzAsIGhvdXJzPTIzLCBtaW51dGVzPTEyLCBzZWNvbmRzPTM0KSksCisgICAgICAgICAgICItMjEwIGRheXMsIDIzOjEyOjM0IikKKworICAgICAgICBlcShzdHIodGQobWlsbGlzZWNvbmRzPTEpKSwgIjA6MDA6MDAuMDAxMDAwIikKKyAgICAgICAgZXEoc3RyKHRkKG1pY3Jvc2Vjb25kcz0zKSksICIwOjAwOjAwLjAwMDAwMyIpCisKKyAgICAgICAgZXEoc3RyKHRkKGRheXM9OTk5OTk5OTk5LCBob3Vycz0yMywgbWludXRlcz01OSwgc2Vjb25kcz01OSwKKyAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZHM9OTk5OTk5KSksCisgICAgICAgICAgICI5OTk5OTk5OTkgZGF5cywgMjM6NTk6NTkuOTk5OTk5IikKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgZm9yIHRkIGluICh0aW1lZGVsdGEoZGF5cz05OTk5OTk5OTksIGhvdXJzPTIzLCBtaW51dGVzPTU5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPTU5LCBtaWNyb3NlY29uZHM9OTk5OTk5KSwKKyAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEoZGF5cz0tOTk5OTk5OTk5KSwKKyAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEoZGF5cz0xLCBzZWNvbmRzPTIsIG1pY3Jvc2Vjb25kcz0zKSk6CisKKyAgICAgICAgICAgICMgVmVyaWZ5IHRkIC0+IHN0cmluZyAtPiB0ZCBpZGVudGl0eS4KKyAgICAgICAgICAgIHMgPSByZXByKHRkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCisgICAgICAgICAgICBzID0gc1s5Ol0KKyAgICAgICAgICAgIHRkMiA9IGV2YWwocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQsIHRkMikKKworICAgICAgICAgICAgIyBWZXJpZnkgaWRlbnRpdHkgdmlhIHJlY29uc3RydWN0aW5nIGZyb20gcGllY2VzLgorICAgICAgICAgICAgdGQyID0gdGltZWRlbHRhKHRkLmRheXMsIHRkLnNlY29uZHMsIHRkLm1pY3Jvc2Vjb25kcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQsIHRkMikKKworICAgIGRlZiB0ZXN0X3Jlc29sdXRpb25faW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRpbWVkZWx0YS5taW4sIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRpbWVkZWx0YS5tYXgsIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRpbWVkZWx0YS5yZXNvbHV0aW9uLCB0aW1lZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEubWF4ID4gdGltZWRlbHRhLm1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lZGVsdGEubWluLCB0aW1lZGVsdGEoLTk5OTk5OTk5OSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWRlbHRhLm1heCwgdGltZWRlbHRhKDk5OTk5OTk5OSwgMjQqMzYwMC0xLCAxZTYtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWRlbHRhLnJlc29sdXRpb24sIHRpbWVkZWx0YSgwLCAwLCAxKSkKKworICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgorICAgICAgICB0aW55ID0gdGltZWRlbHRhLnJlc29sdXRpb24KKworICAgICAgICB0ZCA9IHRpbWVkZWx0YS5taW4gKyB0aW55CisgICAgICAgIHRkIC09IHRpbnkgICMgbm8gcHJvYmxlbQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB0ZC5fX3N1Yl9fLCB0aW55KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB0ZC5fX2FkZF9fLCAtdGlueSkKKworICAgICAgICB0ZCA9IHRpbWVkZWx0YS5tYXggLSB0aW55CisgICAgICAgIHRkICs9IHRpbnkgICMgbm8gcHJvYmxlbQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB0ZC5fX2FkZF9fLCB0aW55KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB0ZC5fX3N1Yl9fLCAtdGlueSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsYW1iZGE6IC10aW1lZGVsdGEubWF4KQorCisgICAgZGVmIHRlc3RfbWljcm9zZWNvbmRfcm91bmRpbmcoc2VsZik6CisgICAgICAgIHRkID0gdGltZWRlbHRhCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgICMgU2luZ2xlLWZpZWxkIHJvdW5kaW5nLgorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MC40LzEwMDApLCB0ZCgwKSkgICAgIyByb3VuZHMgdG8gMAorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9LTAuNC8xMDAwKSwgdGQoMCkpICAgICMgcm91bmRzIHRvIDAKKyAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPTAuNi8xMDAwKSwgdGQobWljcm9zZWNvbmRzPTEpKQorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9LTAuNi8xMDAwKSwgdGQobWljcm9zZWNvbmRzPS0xKSkKKworICAgICAgICAjIFJvdW5kaW5nIGR1ZSB0byBjb250cmlidXRpb25zIGZyb20gbW9yZSB0aGFuIG9uZSBmaWVsZC4KKyAgICAgICAgdXNfcGVyX2hvdXIgPSAzNjAwZTYKKyAgICAgICAgdXNfcGVyX2RheSA9IHVzX3Blcl9ob3VyICogMjQKKyAgICAgICAgZXEodGQoZGF5cz0uNC91c19wZXJfZGF5KSwgdGQoMCkpCisgICAgICAgIGVxKHRkKGhvdXJzPS4yL3VzX3Blcl9ob3VyKSwgdGQoMCkpCisgICAgICAgIGVxKHRkKGRheXM9LjQvdXNfcGVyX2RheSwgaG91cnM9LjIvdXNfcGVyX2hvdXIpLCB0ZChtaWNyb3NlY29uZHM9MSkpCisKKyAgICAgICAgZXEodGQoZGF5cz0tLjQvdXNfcGVyX2RheSksIHRkKDApKQorICAgICAgICBlcSh0ZChob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZCgwKSkKKyAgICAgICAgZXEodGQoZGF5cz0tLjQvdXNfcGVyX2RheSwgaG91cnM9LS4yL3VzX3Blcl9ob3VyKSwgdGQobWljcm9zZWNvbmRzPS0xKSkKKworICAgIGRlZiB0ZXN0X21hc3NpdmVfbm9ybWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPS0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh0ZC5kYXlzLCB0ZC5zZWNvbmRzLCB0ZC5taWNyb3NlY29uZHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgtMSwgMjQqMzYwMC0xLCA5OTk5OTkpKQorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YSgwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YSgwLCAwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YShtaWNyb3NlY29uZHM9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdGltZWRlbHRhKDApKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfdGltZWRlbHRhKHNlbGYpOgorCisgICAgICAgIGNsYXNzIFQodGltZWRlbHRhKToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBmcm9tX3RkKHRkKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVCh0ZC5kYXlzLCB0ZC5zZWNvbmRzLCB0ZC5taWNyb3NlY29uZHMpCisKKyAgICAgICAgICAgIGRlZiBhc19ob3VycyhzZWxmKToKKyAgICAgICAgICAgICAgICBzdW0gPSAoc2VsZi5kYXlzICogMjQgKworICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlY29uZHMgLyAzNjAwLjAgKworICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pY3Jvc2Vjb25kcyAvIDM2MDBlNikKKyAgICAgICAgICAgICAgICByZXR1cm4gcm91bmQoc3VtKQorCisgICAgICAgIHQxID0gVChkYXlzPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQxKSBpcyBUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLmFzX2hvdXJzKCksIDI0KQorCisgICAgICAgIHQyID0gVChkYXlzPS0xLCBzZWNvbmRzPS0zNjAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0MikgaXMgVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5hc19ob3VycygpLCAtMjUpCisKKyAgICAgICAgdDMgPSB0MSArIHQyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQzKSBpcyB0aW1lZGVsdGEpCisgICAgICAgIHQ0ID0gVC5mcm9tX3RkKHQzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0NCkgaXMgVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5kYXlzLCB0NC5kYXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnNlY29uZHMsIHQ0LnNlY29uZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMubWljcm9zZWNvbmRzLCB0NC5taWNyb3NlY29uZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQzKSwgc3RyKHQ0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0NC5hc19ob3VycygpLCAtMSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZGF0ZSB0ZXN0cworCitjbGFzcyBUZXN0RGF0ZU9ubHkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdHMgaGVyZSB3b24ndCBwYXNzIGlmIGFsc28gcnVuIG9uIGRhdGV0aW1lIG9iamVjdHMsIHNvIGRvbid0CisgICAgIyBzdWJjbGFzcyB0aGlzIHRvIHRlc3QgZGF0ZXRpbWVzIHRvby4KKworICAgIGRlZiB0ZXN0X2RlbHRhX25vbl9kYXlzX2lnbm9yZWQoc2VsZik6CisgICAgICAgIGR0ID0gZGF0ZSgyMDAwLCAxLCAyKQorICAgICAgICBkZWx0YSA9IHRpbWVkZWx0YShkYXlzPTEsIGhvdXJzPTIsIG1pbnV0ZXM9Mywgc2Vjb25kcz00LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZHM9NSkKKyAgICAgICAgZGF5cyA9IHRpbWVkZWx0YShkZWx0YS5kYXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRheXMsIHRpbWVkZWx0YSgxKSkKKworICAgICAgICBkdDIgPSBkdCArIGRlbHRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLCBkdCArIGRheXMpCisKKyAgICAgICAgZHQyID0gZGVsdGEgKyBkdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiwgZHQgKyBkYXlzKQorCisgICAgICAgIGR0MiA9IGR0IC0gZGVsdGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIsIGR0IC0gZGF5cykKKworICAgICAgICBkZWx0YSA9IC1kZWx0YQorICAgICAgICBkYXlzID0gdGltZWRlbHRhKGRlbHRhLmRheXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF5cywgdGltZWRlbHRhKC0yKSkKKworICAgICAgICBkdDIgPSBkdCArIGRlbHRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLCBkdCArIGRheXMpCisKKyAgICAgICAgZHQyID0gZGVsdGEgKyBkdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiwgZHQgKyBkYXlzKQorCisgICAgICAgIGR0MiA9IGR0IC0gZGVsdGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIsIGR0IC0gZGF5cykKKworY2xhc3MgU3ViY2xhc3NEYXRlKGRhdGUpOgorICAgIHN1Yl92YXIgPSAxCisKK2NsYXNzIFRlc3REYXRlKEhhcm1sZXNzTWl4ZWRDb21wYXJpc29uLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBoZXJlIHNob3VsZCBwYXNzIGZvciBib3RoIGRhdGVzIGFuZCBkYXRldGltZXMsIGV4Y2VwdCBmb3IgYQorICAgICMgZmV3IHRlc3RzIHRoYXQgVGVzdERhdGVUaW1lIG92ZXJyaWRlcy4KKworICAgIHRoZWNsYXNzID0gZGF0ZQorCisgICAgZGVmIHRlc3RfYmFzaWNfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQueWVhciwgMjAwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5tb250aCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXksIDEpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIGZvciBkdCBpbiAoc2VsZi50aGVjbGFzcygxLCAyLCAzKSwKKyAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLnRvZGF5KCkpOgorICAgICAgICAgICAgIyBWZXJpZnkgZHQgLT4gc3RyaW5nIC0+IGRhdGUgaWRlbnRpdHkuCisgICAgICAgICAgICBzID0gcmVwcihkdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQorICAgICAgICAgICAgcyA9IHNbOTpdCisgICAgICAgICAgICBkdDIgPSBldmFsKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBkdDIpCisKKyAgICAgICAgICAgICMgVmVyaWZ5IGlkZW50aXR5IHZpYSByZWNvbnN0cnVjdGluZyBmcm9tIHBpZWNlcy4KKyAgICAgICAgICAgIGR0MiA9IHNlbGYudGhlY2xhc3MoZHQueWVhciwgZHQubW9udGgsIGR0LmRheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGR0MikKKworICAgIGRlZiB0ZXN0X29yZGluYWxfY29udmVyc2lvbnMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgc29tZSBmaXhlZCB2YWx1ZXMuCisgICAgICAgIGZvciB5LCBtLCBkLCBuIGluIFsoMSwgMSwgMSwgMSksICAgICAgIyBjYWxlbmRhciBvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAxMiwgMzEsIDM2NSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMSwgMSwgMzY2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlyc3QgZXhhbXBsZSBmcm9tICJDYWxlbmRyaWNhbCBDYWxjdWxhdGlvbnMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTk0NSwgMTEsIDEyLCA3MTAzNDcpXToKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKHksIG0sIGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGQudG9vcmRpbmFsKCkpCisgICAgICAgICAgICBmcm9tb3JkID0gc2VsZi50aGVjbGFzcy5mcm9tb3JkaW5hbChuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBmcm9tb3JkKQorICAgICAgICAgICAgaWYgaGFzYXR0cihmcm9tb3JkLCAiaG91ciIpOgorICAgICAgICAgICAgIyBpZiB3ZSdyZSBjaGVja2luZyBzb21ldGhpbmcgZmFuY2llciB0aGFuIGEgZGF0ZSwgdmVyaWZ5CisgICAgICAgICAgICAjIHRoZSBleHRyYSBmaWVsZHMgaGF2ZSBiZWVuIHplcm9lZCBvdXQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyb21vcmQuaG91ciwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyb21vcmQubWludXRlLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJvbW9yZC5zZWNvbmQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tb3JkLm1pY3Jvc2Vjb25kLCAwKQorCisgICAgICAgICMgQ2hlY2sgZmlyc3QgYW5kIGxhc3QgZGF5cyBvZiB5ZWFyIHNwb3R0aWx5IGFjcm9zcyB0aGUgd2hvbGUKKyAgICAgICAgIyByYW5nZSBvZiB5ZWFycyBzdXBwb3J0ZWQuCisgICAgICAgIGZvciB5ZWFyIGluIHhyYW5nZShNSU5ZRUFSLCBNQVhZRUFSKzEsIDcpOgorICAgICAgICAgICAgIyBWZXJpZnkgKHllYXIsIDEsIDEpIC0+IG9yZGluYWwgLT4geSwgbSwgZCBpcyBpZGVudGl0eS4KKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKHllYXIsIDEsIDEpCisgICAgICAgICAgICBuID0gZC50b29yZGluYWwoKQorICAgICAgICAgICAgZDIgPSBzZWxmLnRoZWNsYXNzLmZyb21vcmRpbmFsKG4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGQyKQorICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCBtb3ZpbmcgYmFjayBhIGRheSBnZXRzIHRvIHRoZSBlbmQgb2YgeWVhci0xLgorICAgICAgICAgICAgaWYgeWVhciA+IDE6CisgICAgICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MuZnJvbW9yZGluYWwobi0xKQorICAgICAgICAgICAgICAgIGQyID0gc2VsZi50aGVjbGFzcyh5ZWFyLTEsIDEyLCAzMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIudG9vcmRpbmFsKCksIG4tMSkKKworICAgICAgICAjIFRlc3QgZXZlcnkgZGF5IGluIGEgbGVhcC15ZWFyIGFuZCBhIG5vbi1sZWFwIHllYXIuCisgICAgICAgIGRpbSA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXQorICAgICAgICBmb3IgeWVhciwgaXNsZWFwIGluICgyMDAwLCBUcnVlKSwgKDIwMDIsIEZhbHNlKToKKyAgICAgICAgICAgIG4gPSBzZWxmLnRoZWNsYXNzKHllYXIsIDEsIDEpLnRvb3JkaW5hbCgpCisgICAgICAgICAgICBmb3IgbW9udGgsIG1heGRheSBpbiB6aXAocmFuZ2UoMSwgMTMpLCBkaW0pOgorICAgICAgICAgICAgICAgIGlmIG1vbnRoID09IDIgYW5kIGlzbGVhcDoKKyAgICAgICAgICAgICAgICAgICAgbWF4ZGF5ICs9IDEKKyAgICAgICAgICAgICAgICBmb3IgZGF5IGluIHJhbmdlKDEsIG1heGRheSsxKToKKyAgICAgICAgICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoeWVhciwgbW9udGgsIGRheSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnRvb3JkaW5hbCgpLCBuKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHNlbGYudGhlY2xhc3MuZnJvbW9yZGluYWwobikpCisgICAgICAgICAgICAgICAgICAgIG4gKz0gMQorCisgICAgZGVmIHRlc3RfZXh0cmVtZV9vcmRpbmFscyhzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MubWluCisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKGEueWVhciwgYS5tb250aCwgYS5kYXkpICAjIGdldCByaWQgb2YgdGltZSBwYXJ0cworICAgICAgICBhb3JkID0gYS50b29yZGluYWwoKQorICAgICAgICBiID0gYS5mcm9tb3JkaW5hbChhb3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBhLmZyb21vcmRpbmFsKGFvcmQgLSAxKSkKKworICAgICAgICBiID0gYSArIHRpbWVkZWx0YShkYXlzPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi50b29yZGluYWwoKSwgYW9yZCArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgc2VsZi50aGVjbGFzcy5mcm9tb3JkaW5hbChhb3JkICsgMSkpCisKKyAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MubWF4CisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKGEueWVhciwgYS5tb250aCwgYS5kYXkpICAjIGdldCByaWQgb2YgdGltZSBwYXJ0cworICAgICAgICBhb3JkID0gYS50b29yZGluYWwoKQorICAgICAgICBiID0gYS5mcm9tb3JkaW5hbChhb3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBhLmZyb21vcmRpbmFsKGFvcmQgKyAxKSkKKworICAgICAgICBiID0gYSAtIHRpbWVkZWx0YShkYXlzPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi50b29yZGluYWwoKSwgYW9yZCAtIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgc2VsZi50aGVjbGFzcy5mcm9tb3JkaW5hbChhb3JkIC0gMSkpCisKKyAgICBkZWYgdGVzdF9iYWRfY29uc3RydWN0b3JfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICAjIGJhZCB5ZWFycworICAgICAgICBzZWxmLnRoZWNsYXNzKE1JTllFQVIsIDEsIDEpICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKE1BWFlFQVIsIDEsIDEpICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCBNSU5ZRUFSLTEsIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIE1BWFlFQVIrMSwgMSwgMSkKKyAgICAgICAgIyBiYWQgbW9udGhzCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMSkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxMiwgMSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAwLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxMywgMSkKKyAgICAgICAgIyBiYWQgZGF5cworICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDIsIDI5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwNCwgMiwgMjkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyNDAwLCAyLCAyOSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAyLCAzMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMSwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIxMDAsIDIsIDI5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAxOTAwLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzIpCisKKyAgICBkZWYgdGVzdF9oYXNoX2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBkID0gc2VsZi50aGVjbGFzcygyMDAwLCAxMiwgMzEpCisgICAgICAgICMgc2FtZSB0aGluZworICAgICAgICBlID0gc2VsZi50aGVjbGFzcygyMDAwLCAxMiwgMzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBoYXNoKGUpKQorCisgICAgICAgIGRpYyA9IHtkOiAxfQorICAgICAgICBkaWNbZV0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2RdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tlXSwgMikKKworICAgICAgICBkID0gc2VsZi50aGVjbGFzcygyMDAxLCAgMSwgIDEpCisgICAgICAgICMgc2FtZSB0aGluZworICAgICAgICBlID0gc2VsZi50aGVjbGFzcygyMDAxLCAgMSwgIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBoYXNoKGUpKQorCisgICAgICAgIGRpYyA9IHtkOiAxfQorICAgICAgICBkaWNbZV0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2RdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tlXSwgMikKKworICAgIGRlZiB0ZXN0X2NvbXB1dGF0aW9ucyhzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMSwgMzEpCisgICAgICAgIGIgPSBzZWxmLnRoZWNsYXNzKDE5NTYsIDEsIDMxKQorCisgICAgICAgIGRpZmYgPSBhLWIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLmRheXMsIDQ2KjM2NSArIGxlbihyYW5nZSgxOTU2LCAyMDAyLCA0KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZi5zZWNvbmRzLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYubWljcm9zZWNvbmRzLCAwKQorCisgICAgICAgIGRheSA9IHRpbWVkZWx0YSgxKQorICAgICAgICB3ZWVrID0gdGltZWRlbHRhKDcpCisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIGRheSwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXkgKyBhLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSBkYXksIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLWRheSArIGEsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIHdlZWssIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgOSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIHdlZWssIHNlbGYudGhlY2xhc3MoMjAwMiwgMiwgMjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyA1Mip3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDMsIDMsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSA1Mip3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDEsIDMsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgd2VlaykgLSBhLCB3ZWVrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgZGF5KSAtIGEsIGRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSAtIHdlZWspIC0gYSwgLXdlZWspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSBkYXkpIC0gYSwgLWRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgKyB3ZWVrKSwgLXdlZWspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhICsgZGF5KSwgLWRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSB3ZWVrKSwgd2VlaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSBkYXkpLCBkYXkpCisKKyAgICAgICAgIyBBZGQvc3ViIGludHMsIGxvbmdzLCBmbG9hdHMgc2hvdWxkIGJlIGlsbGVnYWwKKyAgICAgICAgZm9yIGkgaW4gMSwgMUwsIDEuMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhK2kpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYS1pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGkrYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpLWEpCisKKyAgICAgICAgIyBkZWx0YSAtIGRhdGUgaXMgc2Vuc2VsZXNzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5IC0gYSkKKyAgICAgICAgIyBtaXhpbmcgZGF0ZSBhbmQgKGRlbHRhIG9yIGRhdGUpIHZpYSAqIG9yIC8vIGlzIHNlbnNlbGVzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5ICogYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKiBkYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBkYXkgLy8gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgLy8gZGF5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAqIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhIC8vIGEpCisgICAgICAgICMgZGF0ZSArIGRhdGUgaXMgc2Vuc2VsZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhICsgYSkKKworICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgorICAgICAgICB0aW55ID0gc2VsZi50aGVjbGFzcy5yZXNvbHV0aW9uCisKKyAgICAgICAgZm9yIGRlbHRhIGluIFt0aW55LCB0aW1lZGVsdGEoMSksIHRpbWVkZWx0YSgyKV06CisgICAgICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MubWluICsgZGVsdGEKKyAgICAgICAgICAgIGR0IC09IGRlbHRhICAjIG5vIHByb2JsZW0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGR0Ll9fc3ViX18sIGRlbHRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZHQuX19hZGRfXywgLWRlbHRhKQorCisgICAgICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MubWF4IC0gZGVsdGEKKyAgICAgICAgICAgIGR0ICs9IGRlbHRhICAjIG5vIHByb2JsZW0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGR0Ll9fYWRkX18sIGRlbHRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZHQuX19zdWJfXywgLWRlbHRhKQorCisgICAgZGVmIHRlc3RfZnJvbXRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAjIFRyeSBhbiBhcmJpdHJhcnkgZml4ZWQgdmFsdWUuCisgICAgICAgIHllYXIsIG1vbnRoLCBkYXkgPSAxOTk5LCA5LCAxOQorICAgICAgICB0cyA9IHRpbWUubWt0aW1lKCh5ZWFyLCBtb250aCwgZGF5LCAwLCAwLCAwLCAwLCAwLCAtMSkpCisgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAodHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC55ZWFyLCB5ZWFyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubW9udGgsIG1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGF5LCBkYXkpCisKKyAgICBkZWYgdGVzdF9pbnNhbmVfZnJvbXRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBwbGF0Zm9ybSBtYXBzIHRpbWVfdCB0byBkb3VibGUsCisgICAgICAgICMgYW5kIHRoYXQgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGVyZS4gIFRoaXMgdGVzdCBzaG91bGQKKyAgICAgICAgIyBleGVtcHQgc3VjaCBwbGF0Zm9ybXMgKHByb3ZpZGVkIHRoZXkgcmV0dXJuIHJlYXNvbmFibGUKKyAgICAgICAgIyByZXN1bHRzISkuCisgICAgICAgIGZvciBpbnNhbmUgaW4gLTFlMjAwLCAxZTIwMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2FuZSkKKworICAgIGRlZiB0ZXN0X3RvZGF5KHNlbGYpOgorICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgICMgV2UgY2xhaW0gdGhhdCB0b2RheSgpIGlzIGxpa2UgZnJvbXRpbWVzdGFtcCh0aW1lLnRpbWUoKSksIHNvCisgICAgICAgICMgcHJvdmUgaXQuCisgICAgICAgIGZvciBkdW1teSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIHRvZGF5ID0gc2VsZi50aGVjbGFzcy50b2RheSgpCisgICAgICAgICAgICB0cyA9IHRpbWUudGltZSgpCisgICAgICAgICAgICB0b2RheWFnYWluID0gc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKHRzKQorICAgICAgICAgICAgaWYgdG9kYXkgPT0gdG9kYXlhZ2FpbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgIyBUaGVyZSBhcmUgc2V2ZXJhbCBsZWdpdCByZWFzb25zIHRoYXQgY291bGQgZmFpbDoKKyAgICAgICAgICAgICMgMS4gSXQgcmVjZW50bHkgYmVjYW1lIG1pZG5pZ2h0LCBiZXR3ZWVuIHRoZSB0b2RheSgpIGFuZCB0aGUKKyAgICAgICAgICAgICMgICAgdGltZSgpIGNhbGxzLgorICAgICAgICAgICAgIyAyLiBUaGUgcGxhdGZvcm0gdGltZSgpIGhhcyBzdWNoIGZpbmUgcmVzb2x1dGlvbiB0aGF0IHdlJ2xsCisgICAgICAgICAgICAjICAgIG5ldmVyIGdldCB0aGUgc2FtZSB2YWx1ZSB0d2ljZS4KKyAgICAgICAgICAgICMgMy4gVGhlIHBsYXRmb3JtIHRpbWUoKSBoYXMgcG9vciByZXNvbHV0aW9uLCBhbmQgd2UganVzdAorICAgICAgICAgICAgIyAgICBoYXBwZW5lZCB0byBjYWxsIHRvZGF5KCkgcmlnaHQgYmVmb3JlIGEgcmVzb2x1dGlvbiBxdWFudHVtCisgICAgICAgICAgICAjICAgIGJvdW5kYXJ5LgorICAgICAgICAgICAgIyA0LiBUaGUgc3lzdGVtIGNsb2NrIGdvdCBmaWRkbGVkIGJldHdlZW4gY2FsbHMuCisgICAgICAgICAgICAjIEluIGFueSBjYXNlLCB3YWl0IGEgbGl0dGxlIHdoaWxlIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgICAgICAjIEl0IHdvcmtlZCBvciBpdCBkaWRuJ3QuICBJZiBpdCBkaWRuJ3QsIGFzc3VtZSBpdCdzIHJlYXNvbiAjMiwgYW5kCisgICAgICAgICMgbGV0IHRoZSB0ZXN0IHBhc3MgaWYgdGhleSdyZSB3aXRoaW4gaGFsZiBhIHNlY29uZCBvZiBlYWNoIG90aGVyLgorICAgICAgICBzZWxmLmFzc2VydFRydWUodG9kYXkgPT0gdG9kYXlhZ2FpbiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgYWJzKHRvZGF5YWdhaW4gLSB0b2RheSkgPCB0aW1lZGVsdGEoc2Vjb25kcz0wLjUpKQorCisgICAgZGVmIHRlc3Rfd2Vla2RheShzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNyk6CisgICAgICAgICAgICAjIE1hcmNoIDQsIDIwMDIgaXMgYSBNb25kYXkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcygyMDAyLCAzLCA0K2kpLndlZWtkYXkoKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcygyMDAyLCAzLCA0K2kpLmlzb3dlZWtkYXkoKSwgaSsxKQorICAgICAgICAgICAgIyBKYW51YXJ5IDIsIDE5NTYgaXMgYSBNb25kYXkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcygxOTU2LCAxLCAyK2kpLndlZWtkYXkoKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcygxOTU2LCAxLCAyK2kpLmlzb3dlZWtkYXkoKSwgaSsxKQorCisgICAgZGVmIHRlc3RfaXNvY2FsZW5kYXIoc2VsZik6CisgICAgICAgICMgQ2hlY2sgZXhhbXBsZXMgZnJvbQorICAgICAgICAjIGh0dHA6Ly93d3cucGh5cy51dS5ubC9+dmdlbnQvY2FsZW5kYXIvaXNvY2FsZW5kYXIuaHRtCisgICAgICAgIGZvciBpIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMywgMTIsIDIyK2kpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvY2FsZW5kYXIoKSwgKDIwMDMsIDUyLCBpKzEpKQorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMywgMTIsIDI5KSArIHRpbWVkZWx0YShpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDA0LCAxLCBpKzEpKQorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwNCwgMSwgNStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDA0LCAyLCBpKzEpKQorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwOSwgMTIsIDIxK2kpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvY2FsZW5kYXIoKSwgKDIwMDksIDUyLCBpKzEpKQorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwOSwgMTIsIDI4KSArIHRpbWVkZWx0YShpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDA5LCA1MywgaSsxKSkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMTAsIDEsIDQraSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpLCAoMjAxMCwgMSwgaSsxKSkKKworICAgIGRlZiB0ZXN0X2lzb19sb25nX3llYXJzKHNlbGYpOgorICAgICAgICAjIENhbGN1bGF0ZSBsb25nIElTTyB5ZWFycyBhbmQgY29tcGFyZSB0byB0YWJsZSBmcm9tCisgICAgICAgICMgaHR0cDovL3d3dy5waHlzLnV1Lm5sL352Z2VudC9jYWxlbmRhci9pc29jYWxlbmRhci5odG0KKyAgICAgICAgSVNPX0xPTkdfWUVBUlNfVEFCTEUgPSAiIiIKKyAgICAgICAgICAgICAgNCAgIDMyICAgNjAgICA4OAorICAgICAgICAgICAgICA5ICAgMzcgICA2NSAgIDkzCisgICAgICAgICAgICAgMTUgICA0MyAgIDcxICAgOTkKKyAgICAgICAgICAgICAyMCAgIDQ4ICAgNzYKKyAgICAgICAgICAgICAyNiAgIDU0ICAgODIKKworICAgICAgICAgICAgMTA1ICAxMzMgIDE2MSAgMTg5CisgICAgICAgICAgICAxMTEgIDEzOSAgMTY3ICAxOTUKKyAgICAgICAgICAgIDExNiAgMTQ0ICAxNzIKKyAgICAgICAgICAgIDEyMiAgMTUwICAxNzgKKyAgICAgICAgICAgIDEyOCAgMTU2ICAxODQKKworICAgICAgICAgICAgMjAxICAyMjkgIDI1NyAgMjg1CisgICAgICAgICAgICAyMDcgIDIzNSAgMjYzICAyOTEKKyAgICAgICAgICAgIDIxMiAgMjQwICAyNjggIDI5NgorICAgICAgICAgICAgMjE4ICAyNDYgIDI3NAorICAgICAgICAgICAgMjI0ICAyNTIgIDI4MAorCisgICAgICAgICAgICAzMDMgIDMzMSAgMzU5ICAzODcKKyAgICAgICAgICAgIDMwOCAgMzM2ICAzNjQgIDM5MgorICAgICAgICAgICAgMzE0ICAzNDIgIDM3MCAgMzk4CisgICAgICAgICAgICAzMjAgIDM0OCAgMzc2CisgICAgICAgICAgICAzMjUgIDM1MyAgMzgxCisgICAgICAgICIiIgorICAgICAgICBpc29fbG9uZ195ZWFycyA9IG1hcChpbnQsIElTT19MT05HX1lFQVJTX1RBQkxFLnNwbGl0KCkpCisgICAgICAgIGlzb19sb25nX3llYXJzLnNvcnQoKQorICAgICAgICBMID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNDAwKToKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDAraSwgMTIsIDMxKQorICAgICAgICAgICAgZDEgPSBzZWxmLnRoZWNsYXNzKDE2MDAraSwgMTIsIDMxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKClbMTpdLCBkMS5pc29jYWxlbmRhcigpWzE6XSkKKyAgICAgICAgICAgIGlmIGQuaXNvY2FsZW5kYXIoKVsxXSA9PSA1MzoKKyAgICAgICAgICAgICAgICBMLmFwcGVuZChpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwsIGlzb19sb25nX3llYXJzKQorCisgICAgZGVmIHRlc3RfaXNvZm9ybWF0KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygyLCAzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDAyLTAzLTAyIikKKworICAgIGRlZiB0ZXN0X2N0aW1lKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuY3RpbWUoKSwgIlNhdCBNYXIgIDIgMDA6MDA6MDAgMjAwMiIpCisKKyAgICBkZWYgdGVzdF9zdHJmdGltZShzZWxmKToKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMjAwNSwgMywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCJtOiVtIGQ6JWQgeToleSIpLCAibTowMyBkOjAyIHk6MDUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoIiIpLCAiIikgIyBTRiBidWcgIzc2MTMzNworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoJ3gnKjEwMDApLCAneCcqMTAwMCkgIyBTRiBidWcgIzE1NTY3ODQKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuc3RyZnRpbWUpICMgbmVlZHMgYW4gYXJnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5zdHJmdGltZSwgIm9uZSIsICJ0d28iKSAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnN0cmZ0aW1lLCA0MikgIyBhcmcgd3JvbmcgdHlwZQorCisgICAgICAgICMgdGVzdCB0aGF0IHVuaWNvZGUgaW5wdXQgaXMgYWxsb3dlZCAoaXNzdWUgMjc4MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKHUiJW0iKSwgIjAzIikKKworICAgICAgICAjIEEgbmFpdmUgb2JqZWN0IHJlcGxhY2VzICV6IGFuZCAlWiB3LyBlbXB0eSBzdHJpbmdzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoIicleicgJyVaJyIpLCAiJycgJyciKQorCisgICAgICAgICNtYWtlIHN1cmUgdGhhdCBpbnZhbGlkIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBoYW5kbGVkIGNvcnJlY3RseQorICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5zdHJmdGltZSwgIiVlIikKKyAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuc3RyZnRpbWUsICIlIikKKyAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuc3RyZnRpbWUsICIlIyIpCisKKyAgICAgICAgI29oIHdlbGwsIHNvbWUgc3lzdGVtcyBqdXN0IGlnbm9yZSB0aG9zZSBpbnZhbGlkIG9uZXMuCisgICAgICAgICNhdCBsZWFzdCwgZXhjZXJjaXNlIHRoZW0gdG8gbWFrZSBzdXJlIHRoYXQgbm8gY3Jhc2hlcworICAgICAgICAjYXJlIGdlbmVyYXRlZAorICAgICAgICBmb3IgZiBpbiBbIiVlIiwgIiUiLCAiJSMiXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0LnN0cmZ0aW1lKGYpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgI2NoZWNrIHRoYXQgdGhpcyBzdGFuZGFyZCBleHRlbnNpb24gd29ya3MKKyAgICAgICAgdC5zdHJmdGltZSgiJWYiKQorCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygyMDA3LCA5LCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5fX2Zvcm1hdF9fKCcnKSwgc3RyKGR0KSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3MgX19zdHJfXygpIGdldHMgY2FsbGVkCisgICAgICAgIGNsYXNzIEEoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0EnCisgICAgICAgIGEgPSBBKDIwMDcsIDksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19mb3JtYXRfXygnJyksICdBJykKKworICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3Mgc3RyZnRpbWUgZ2V0cyBjYWxsZWQKKyAgICAgICAgY2xhc3MgQihzZWxmLnRoZWNsYXNzKToKKyAgICAgICAgICAgIGRlZiBzdHJmdGltZShzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdCJworICAgICAgICBiID0gQigyMDA3LCA5LCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oJycpLCBzdHIoZHQpKQorCisgICAgICAgIGZvciBmbXQgaW4gWyJtOiVtIGQ6JWQgeToleSIsCisgICAgICAgICAgICAgICAgICAgICJtOiVtIGQ6JWQgeToleSBIOiVIIE06JU0gUzolUyIsCisgICAgICAgICAgICAgICAgICAgICIleiAlWiIsCisgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Ll9fZm9ybWF0X18oZm10KSwgZHQuc3RyZnRpbWUoZm10KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2Zvcm1hdF9fKGZtdCksIGR0LnN0cmZ0aW1lKGZtdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuX19mb3JtYXRfXyhmbXQpLCAnQicpCisKKyAgICBkZWYgdGVzdF9yZXNvbHV0aW9uX2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1pbiwgc2VsZi50aGVjbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGhlY2xhc3MubWF4LCBzZWxmLnRoZWNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5yZXNvbHV0aW9uLCB0aW1lZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRoZWNsYXNzLm1heCA+IHNlbGYudGhlY2xhc3MubWluKQorCisgICAgZGVmIHRlc3RfZXh0cmVtZV90aW1lZGVsdGEoc2VsZik6CisgICAgICAgIGJpZyA9IHNlbGYudGhlY2xhc3MubWF4IC0gc2VsZi50aGVjbGFzcy5taW4KKyAgICAgICAgIyAzNjUyMDU4IGRheXMsIDIzIGhvdXJzLCA1OSBtaW51dGVzLCA1OSBzZWNvbmRzLCA5OTk5OTkgbWljcm9zZWNvbmRzCisgICAgICAgIG4gPSAoYmlnLmRheXMqMjQqMzYwMCArIGJpZy5zZWNvbmRzKSoxMDAwMDAwICsgYmlnLm1pY3Jvc2Vjb25kcworICAgICAgICAjIG4gPT0gMzE1NTM3ODk3NTk5OTk5OTk5IH49IDIqKjU4LjEzCisgICAgICAgIGp1c3Rhc2JpZyA9IHRpbWVkZWx0YSgwLCAwLCBuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpZywganVzdGFzYmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MubWluICsgYmlnLCBzZWxmLnRoZWNsYXNzLm1heCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZWNsYXNzLm1heCAtIGJpZywgc2VsZi50aGVjbGFzcy5taW4pCisKKyAgICBkZWYgdGVzdF90aW1ldHVwbGUoc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgIyBKYW51YXJ5IDIsIDE5NTYgaXMgYSBNb25kYXkgKDApCisgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcygxOTU2LCAxLCAyK2kpCisgICAgICAgICAgICB0ID0gZC50aW1ldHVwbGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTk1NiwgMSwgMitpLCAwLCAwLCAwLCBpLCAyK2ksIC0xKSkKKyAgICAgICAgICAgICMgRmVicnVhcnkgMSwgMTk1NiBpcyBhIFdlZG5lc2RheSAoMikKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDE5NTYsIDIsIDEraSkKKyAgICAgICAgICAgIHQgPSBkLnRpbWV0dXBsZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsICgxOTU2LCAyLCAxK2ksIDAsIDAsIDAsICgyK2kpJTcsIDMyK2ksIC0xKSkKKyAgICAgICAgICAgICMgTWFyY2ggMSwgMTk1NiBpcyBhIFRodXJzZGF5ICgzKSwgYW5kIGlzIHRoZSAzMSsyOSsxID0gNjFzdCBkYXkKKyAgICAgICAgICAgICMgb2YgdGhlIHllYXIuCisgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcygxOTU2LCAzLCAxK2kpCisgICAgICAgICAgICB0ID0gZC50aW1ldHVwbGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTk1NiwgMywgMStpLCAwLCAwLCAwLCAoMytpKSU3LCA2MStpLCAtMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1feWVhciwgMTk1NikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9tb24sIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbWRheSwgMStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX2hvdXIsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbWluLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3NlYywgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV93ZGF5LCAoMytpKSU3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3lkYXksIDYxK2kpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1faXNkc3QsIC0xKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGFyZ3MgPSA2LCA3LCAyMworICAgICAgICBvcmlnID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDQpCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID49IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMCkKKworICAgICAgICBmb3IgYXJncyBpbiAoMywgMywgMyksICgyLCA0LCA0KSwgKDIsIDMsIDUpOgorICAgICAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCphcmdzKSAgICMgdGhpcyBpcyBsYXJnZXIgdGhhbiB0MQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiAhPSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyID09IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MSwgdDIpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDEpCisKKyAgICAgICAgZm9yIGJhZGFyZyBpbiBPVEhFUlNUVUZGOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSA9PSBiYWRhcmcsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSAhPSBiYWRhcmcsIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZGFyZyA9PSB0MSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZGFyZyAhPSB0MSwgVHJ1ZSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxIDwgYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID4gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID49IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID49IHQxKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfY29tcGFyZShzZWxmKToKKyAgICAgICAgb3VyID0gc2VsZi50aGVjbGFzcygyMDAwLCA0LCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgb3VyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgMSwgb3VyKQorCisgICAgICAgIGNsYXNzIEFub3RoZXJEYXRlVGltZUNsYXNzKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgIyBSZXR1cm4gImVxdWFsIiBzbyBjYWxsaW5nIHRoaXMgY2FuJ3QgYmUgY29uZnVzZWQgd2l0aAorICAgICAgICAgICAgICAgICMgY29tcGFyZS1ieS1hZGRyZXNzICh3aGljaCBuZXZlciBzYXlzICJlcXVhbCIgZm9yIGRpc3RpbmN0CisgICAgICAgICAgICAgICAgIyBvYmplY3RzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKworICAgICAgICAjIFRoaXMgc3RpbGwgZXJyb3JzLCBiZWNhdXNlIGRhdGUgYW5kIGRhdGV0aW1lIGNvbXBhcmlzb24gcmFpc2UKKyAgICAgICAgIyBUeXBlRXJyb3IgaW5zdGVhZCBvZiBOb3RJbXBsZW1lbnRlZCB3aGVuIHRoZXkgZG9uJ3Qga25vdyB3aGF0IHRvCisgICAgICAgICMgZG8sIGluIG9yZGVyIHRvIHN0b3AgY29tcGFyaXNvbiBmcm9tIGZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdAorICAgICAgICAjIGNvbXBhcmUtYnktYWRkcmVzcy4KKyAgICAgICAgdGhlaXIgPSBBbm90aGVyRGF0ZVRpbWVDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCBvdXIsIHRoZWlyKQorICAgICAgICAjIE9vcHM6ICBUaGUgbmV4dCBzdGFiIHJhaXNlcyBUeXBlRXJyb3IgaW4gdGhlIEMgaW1wbGVtZW50YXRpb24sCisgICAgICAgICMgYnV0IG5vdCBpbiB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGRhdGV0aW1lLiAgVGhlIGRpZmZlcmVuY2UKKyAgICAgICAgIyBpcyBkdWUgdG8gdGhhdCB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGRlZmluZXMgX19jbXBfXyBidXQKKyAgICAgICAgIyB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVzIHRwX3JpY2hjb21wYXJlLiAgVGhpcyBpcyBtb3JlIHBhaW4KKyAgICAgICAgIyB0byBmaXggdGhhbiBpdCdzIHdvcnRoLCBzbyBjb21tZW50aW5nIG91dCB0aGUgdGVzdC4KKyAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKGNtcCh0aGVpciwgb3VyKSwgMCkKKworICAgICAgICAjIEJ1dCBkYXRlIGFuZCBkYXRldGltZSBjb21wYXJpc29uIHJldHVybiBOb3RJbXBsZW1lbnRlZCBpbnN0ZWFkIGlmIHRoZQorICAgICAgICAjIG90aGVyIG9iamVjdCBoYXMgYSB0aW1ldHVwbGUgYXR0ci4gIFRoaXMgZ2l2ZXMgdGhlIG90aGVyIG9iamVjdCBhCisgICAgICAgICMgY2hhbmNlIHRvIGRvIHRoZSBjb21wYXJpc29uLgorICAgICAgICBjbGFzcyBDb21wYXJhYmxlKEFub3RoZXJEYXRlVGltZUNsYXNzKToKKyAgICAgICAgICAgIGRlZiB0aW1ldHVwbGUoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgpCisKKyAgICAgICAgdGhlaXIgPSBDb21wYXJhYmxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAob3VyLCB0aGVpciksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHRoZWlyLCBvdXIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3VyID09IHRoZWlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGhlaXIgPT0gb3VyKQorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgIyBBbGwgZGF0ZXMgYXJlIGNvbnNpZGVyZWQgdHJ1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWluKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50aGVjbGFzcy5tYXgpCisKKyAgICBkZWYgdGVzdF9zdHJmdGltZV9vdXRfb2ZfcmFuZ2Uoc2VsZik6CisgICAgICAgICMgRm9yIG5hc3R5IHRlY2huaWNhbCByZWFzb25zLCB3ZSBjYW4ndCBoYW5kbGUgeWVhcnMgYmVmb3JlIDE5MDAuCisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMoMTkwMCwgMSwgMSkuc3RyZnRpbWUoIiVZIiksICIxOTAwIikKKyAgICAgICAgZm9yIHkgaW4gMSwgNDksIDUxLCA5OSwgMTAwLCAxMDAwLCAxODk5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xzKHksIDEsIDEpLnN0cmZ0aW1lLCAiJVkiKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBhcmdzID0gWzEsIDIsIDNdCisgICAgICAgIGJhc2UgPSBjbHMoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgYmFzZS5yZXBsYWNlKCkpCisKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIG5hbWUsIG5ld3ZhbCBpbiAoKCJ5ZWFyIiwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibW9udGgiLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkYXkiLCA0KSk6CisgICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQorICAgICAgICAgICAgbmV3YXJnc1tpXSA9IG5ld3ZhbAorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbHMoKm5ld2FyZ3MpCisgICAgICAgICAgICBnb3QgPSBiYXNlLnJlcGxhY2UoKip7bmFtZTogbmV3dmFsfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICMgT3V0IG9mIGJvdW5kcy4KKyAgICAgICAgYmFzZSA9IGNscygyMDAwLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCB5ZWFyPTIwMDEpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19kYXRlKHNlbGYpOgorCisgICAgICAgIGNsYXNzIEMoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICB0aGVBbnN3ZXIgPSA0MgorCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3cyk6CisgICAgICAgICAgICAgICAgdGVtcCA9IGt3cy5jb3B5KCkKKyAgICAgICAgICAgICAgICBleHRyYSA9IHRlbXAucG9wKCdleHRyYScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50aGVjbGFzcy5fX25ld19fKGNscywgKmFyZ3MsICoqdGVtcCkKKyAgICAgICAgICAgICAgICByZXN1bHQuZXh0cmEgPSBleHRyYQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAgICAgZGVmIG5ld21ldGgoc2VsZiwgc3RhcnQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCArIHNlbGYueWVhciArIHNlbGYubW9udGgKKworICAgICAgICBhcmdzID0gMjAwMywgNCwgMTQKKworICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS50b29yZGluYWwoKSwgZHQyLnRvb3JkaW5hbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLnllYXIgKyBkdDEubW9udGggLSA3KQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfc3ViY2xhc3NfZGF0ZShzZWxmKToKKworICAgICAgICBhcmdzID0gNiwgNywgMjMKKyAgICAgICAgb3JpZyA9IFN1YmNsYXNzRGF0ZSgqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgZGVmIHRlc3RfYmFja2Rvb3JfcmVzaXN0YW5jZShzZWxmKToKKyAgICAgICAgIyBGb3IgZmFzdCB1bnBpY2tsaW5nLCB0aGUgY29uc3RydWN0b3IgYWNjZXB0cyBhIHBpY2tsZSBzdHJpbmcuCisgICAgICAgICMgVGhpcyBpcyBhIGxvdy1vdmVyaGVhZCBiYWNrZG9vci4gIEEgdXNlciBjYW4gKGJ5IGludGVudCBvcgorICAgICAgICAjIG1pc3Rha2UpIHBhc3MgYSBzdHJpbmcgZGlyZWN0bHksIHdoaWNoIChpZiBpdCdzIHRoZSByaWdodCBsZW5ndGgpCisgICAgICAgICMgd2lsbCBnZXQgdHJlYXRlZCBsaWtlIGEgcGlja2xlLCBhbmQgYnlwYXNzIHRoZSBub3JtYWwgc2FuaXR5CisgICAgICAgICMgY2hlY2tzIGluIHRoZSBjb25zdHJ1Y3Rvci4gIFRoaXMgY2FuIGNyZWF0ZSBpbnNhbmUgb2JqZWN0cy4KKyAgICAgICAgIyBUaGUgY29uc3RydWN0b3IgZG9lc24ndCB3YW50IHRvIGJ1cm4gdGhlIHRpbWUgdG8gdmFsaWRhdGUgYWxsCisgICAgICAgICMgZmllbGRzLCBidXQgZG9lcyBjaGVjayB0aGUgbW9udGggZmllbGQuICBUaGlzIHN0b3BzLCBlLmcuLAorICAgICAgICAjIGRhdGV0aW1lLmRhdGV0aW1lKCcxOTk1LTAzLTI1JykgZnJvbSB5aWVsZGluZyBhbiBpbnNhbmUgb2JqZWN0LgorICAgICAgICBiYXNlID0gJzE5OTUtMDMtMjUnCisgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKHNlbGYudGhlY2xhc3MsIGRhdGV0aW1lKToKKyAgICAgICAgICAgIGJhc2UgPSBiYXNlWzo0XQorICAgICAgICBmb3IgbW9udGhfYnl0ZSBpbiAnOScsIGNocigwKSwgY2hyKDEzKSwgJ1x4ZmYnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnRoZWNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlWzoyXSArIG1vbnRoX2J5dGUgKyBiYXNlWzM6XSkKKyAgICAgICAgZm9yIG9yZF9ieXRlIGluIHJhbmdlKDEsIDEzKToKKyAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgYmxvdyB1cCBiZWNhdXNlIG9mIHRoZSBtb250aCBieXRlIGFsb25lLiAgSWYKKyAgICAgICAgICAgICMgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZXMgdG8gZG8gbW9yZS1jYXJlZnVsIGNoZWNraW5nLCBpdCBtYXkKKyAgICAgICAgICAgICMgYmxvdyB1cCBiZWNhdXNlIG90aGVyIGZpZWxkcyBhcmUgaW5zYW5lLgorICAgICAgICAgICAgc2VsZi50aGVjbGFzcyhiYXNlWzoyXSArIGNocihvcmRfYnl0ZSkgKyBiYXNlWzM6XSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZGF0ZXRpbWUgdGVzdHMKKworY2xhc3MgU3ViY2xhc3NEYXRldGltZShkYXRldGltZSk6CisgICAgc3ViX3ZhciA9IDEKKworY2xhc3MgVGVzdERhdGVUaW1lKFRlc3REYXRlKToKKworICAgIHRoZWNsYXNzID0gZGF0ZXRpbWUKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxLCAxMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC55ZWFyLCAyMDAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1vbnRoLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmRheSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5ob3VyLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5taW51dGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuc2Vjb25kLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1pY3Jvc2Vjb25kLCAwKQorCisgICAgZGVmIHRlc3RfYmFzaWNfYXR0cmlidXRlc19ub256ZXJvKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgYXR0cmlidXRlcyBhcmUgbm9uLXplcm8gc28gYnVncyBpbgorICAgICAgICAjIGJpdC1zaGlmdGluZyBhY2Nlc3Mgc2hvdyB1cC4KKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDEyLCA1OSwgNTksIDgwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQueWVhciwgMjAwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5tb250aCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuaG91ciwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubWludXRlLCA1OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5zZWNvbmQsIDU5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1pY3Jvc2Vjb25kLCA4MDAwKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBmb3IgZHQgaW4gKHNlbGYudGhlY2xhc3MoMSwgMiwgMywgNCwgNSwgNiwgNyksCisgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcy5ub3coKSk6CisgICAgICAgICAgICAjIFZlcmlmeSBkdCAtPiBzdHJpbmcgLT4gZGF0ZXRpbWUgaWRlbnRpdHkuCisgICAgICAgICAgICBzID0gcmVwcihkdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQorICAgICAgICAgICAgcyA9IHNbOTpdCisgICAgICAgICAgICBkdDIgPSBldmFsKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBkdDIpCisKKyAgICAgICAgICAgICMgVmVyaWZ5IGlkZW50aXR5IHZpYSByZWNvbnN0cnVjdGluZyBmcm9tIHBpZWNlcy4KKyAgICAgICAgICAgIGR0MiA9IHNlbGYudGhlY2xhc3MoZHQueWVhciwgZHQubW9udGgsIGR0LmRheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHQuaG91ciwgZHQubWludXRlLCBkdC5zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0Lm1pY3Jvc2Vjb25kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZHQyKQorCisgICAgZGVmIHRlc3RfaXNvZm9ybWF0KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygyLCAzLCAyLCA0LCA1LCAxLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgICAgIjAwMDItMDMtMDJUMDQ6MDU6MDEuMDAwMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgnVCcpLCAiMDAwMi0wMy0wMlQwNDowNTowMS4wMDAxMjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCcgJyksICIwMDAyLTAzLTAyIDA0OjA1OjAxLjAwMDEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoJ1x4MDAnKSwgIjAwMDItMDMtMDJceDAwMDQ6MDU6MDEuMDAwMTIzIikKKyAgICAgICAgIyBzdHIgaXMgSVNPIGZvcm1hdCB3aXRoIHRoZSBzZXBhcmF0b3IgZm9yY2VkIHRvIGEgYmxhbmsuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQpLCAiMDAwMi0wMy0wMiAwNDowNTowMS4wMDAxMjMiKQorCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgICAgIjAwMDItMDMtMDJUMDA6MDA6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCdUJyksICIwMDAyLTAzLTAyVDAwOjAwOjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgnICcpLCAiMDAwMi0wMy0wMiAwMDowMDowMCIpCisgICAgICAgICMgc3RyIGlzIElTTyBmb3JtYXQgd2l0aCB0aGUgc2VwYXJhdG9yIGZvcmNlZCB0byBhIGJsYW5rLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0KSwgIjAwMDItMDMtMDIgMDA6MDA6MDAiKQorCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwNywgOSwgMTAsIDQsIDUsIDEsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5fX2Zvcm1hdF9fKCcnKSwgc3RyKGR0KSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3MgX19zdHJfXygpIGdldHMgY2FsbGVkCisgICAgICAgIGNsYXNzIEEoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0EnCisgICAgICAgIGEgPSBBKDIwMDcsIDksIDEwLCA0LCA1LCAxLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2Zvcm1hdF9fKCcnKSwgJ0EnKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBhIGRlcml2ZWQgY2xhc3MncyBzdHJmdGltZSBnZXRzIGNhbGxlZAorICAgICAgICBjbGFzcyBCKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgZGVmIHN0cmZ0aW1lKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0InCisgICAgICAgIGIgPSBCKDIwMDcsIDksIDEwLCA0LCA1LCAxLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKCcnKSwgc3RyKGR0KSkKKworICAgICAgICBmb3IgZm10IGluIFsibTolbSBkOiVkIHk6JXkiLAorICAgICAgICAgICAgICAgICAgICAibTolbSBkOiVkIHk6JXkgSDolSCBNOiVNIFM6JVMiLAorICAgICAgICAgICAgICAgICAgICAiJXogJVoiLAorICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5fX2Zvcm1hdF9fKGZtdCksIGR0LnN0cmZ0aW1lKGZtdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19mb3JtYXRfXyhmbXQpLCBkdC5zdHJmdGltZShmbXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oZm10KSwgJ0InKQorCisgICAgZGVmIHRlc3RfbW9yZV9jdGltZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZpZWxkcyB0aGF0IFRlc3REYXRlIGRvZXNuJ3QgdG91Y2guCisgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTgsIDMsIDUsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmN0aW1lKCksICJTYXQgTWFyICAyIDE4OjAzOjA1IDIwMDIiKQorICAgICAgICAjIE9vcHMhICBUaGUgbmV4dCBsaW5lIGZhaWxzIG9uIFdpbjJLIHVuZGVyIE1TVkMgNiwgc28gaXQncyBjb21tZW50ZWQKKyAgICAgICAgIyBvdXQuICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHQuY3RpbWUoKSBwcm9kdWNlcyAiIDIiIGZvciB0aGUgZGF5LAorICAgICAgICAjIGJ1dCBwbGF0Zm9ybSBjdGltZSgpIHByb2R1Y2VzICIwMiIgZm9yIHRoZSBkYXkuICBBY2NvcmRpbmcgdG8KKyAgICAgICAgIyBDOTksIHQuY3RpbWUoKSBpcyBjb3JyZWN0IGhlcmUuCisgICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbCh0LmN0aW1lKCksIHRpbWUuY3RpbWUodGltZS5ta3RpbWUodC50aW1ldHVwbGUoKSkpKQorCisgICAgICAgICMgU28gdGVzdCBhIGNhc2Ugd2hlcmUgdGhhdCBkaWZmZXJlbmNlIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyMiwgMTgsIDMsIDUsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmN0aW1lKCksIHRpbWUuY3RpbWUodGltZS5ta3RpbWUodC50aW1ldHVwbGUoKSkpKQorCisgICAgZGVmIHRlc3RfdHpfaW5kZXBlbmRlbnRfY29tcGFyaW5nKHNlbGYpOgorICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDksIDAsIDApCisgICAgICAgIGR0MiA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgMTAsIDAsIDApCisgICAgICAgIGR0MyA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgOSwgMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDEsIGR0MykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0MiA+IGR0MykKKworICAgICAgICAjIE1ha2Ugc3VyZSBjb21wYXJpc29uIGRvZXNuJ3QgZm9yZ2V0IG1pY3Jvc2Vjb25kcywgYW5kIGlzbid0IGRvbmUKKyAgICAgICAgIyB2aWEgY29tcGFyaW5nIGEgZmxvYXQgdGltZXN0YW1wIChhbiBJRUVFIGRvdWJsZSBkb2Vzbid0IGhhdmUgZW5vdWdoCisgICAgICAgICMgcHJlY2lzaW9uIHRvIHNwYW4gbWljcm9zZWNvbmQgcmVzb2x1dGlvbiBhY3Jvc3MgeWVhcnMgMSB0aHJ1IDk5OTksCisgICAgICAgICMgc28gY29tcGFyaW5nIHZpYSB0aW1lc3RhbXAgbmVjZXNzYXJpbHkgY2FsbHMgc29tZSBkaXN0aW5jdCB2YWx1ZXMKKyAgICAgICAgIyBlcXVhbCkuCisgICAgICAgIGR0MSA9IHNlbGYudGhlY2xhc3MoTUFYWUVBUiwgMTIsIDMxLCAyMywgNTksIDU5LCA5OTk5OTgpCisgICAgICAgIHVzID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0xKQorICAgICAgICBkdDIgPSBkdDEgKyB1cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiAtIGR0MSwgdXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdDEgPCBkdDIpCisKKyAgICBkZWYgdGVzdF9zdHJmdGltZV93aXRoX2JhZF90em5hbWVfcmVwbGFjZShzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgb2sgaWYgdHppbmZvLnR6bmFtZSgpLnJlcGxhY2UoKSByZXR1cm5zIGEgbm9uLXN0cmluZworICAgICAgICBjbGFzcyBNeVR6SW5mbyhGaXhlZE9mZnNldCk6CisgICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICBjbGFzcyBNeVN0cihzdHIpOgorICAgICAgICAgICAgICAgICAgICBkZWYgcmVwbGFjZShzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybiBNeVN0cignbmFtZScpCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDUsIDMsIDIsIDAsIDAsIDAsIDAsIE15VHpJbmZvKDMsICduYW1lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5zdHJmdGltZSwgJyVaJykKKworICAgIGRlZiB0ZXN0X2JhZF9jb25zdHJ1Y3Rvcl9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICMgYmFkIHllYXJzCisgICAgICAgIHNlbGYudGhlY2xhc3MoTUlOWUVBUiwgMSwgMSkgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoTUFYWUVBUiwgMSwgMSkgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIE1JTllFQVItMSwgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgTUFYWUVBUisxLCAxLCAxKQorICAgICAgICAjIGJhZCBtb250aHMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAxKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEyLCAxKSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEzLCAxKQorICAgICAgICAjIGJhZCBkYXlzCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMiwgMjkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDA0LCAyLCAyOSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDI0MDAsIDIsIDI5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDIsIDMwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAxLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjEwMCwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDE5MDAsIDIsIDI5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMikKKyAgICAgICAgIyBiYWQgaG91cnMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMCkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzEsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgMjQpCisgICAgICAgICMgYmFkIG1pbnV0ZXMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMsIDApICAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDIzLCA1OSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgMjMsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgMjMsIDYwKQorICAgICAgICAjIGJhZCBzZWNvbmRzCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDIzLCA1OSwgMCkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMsIDU5LCA1OSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgMjMsIDU5LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzEsIDIzLCA1OSwgNjApCisgICAgICAgICMgYmFkIG1pY3Jvc2Vjb25kcworICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAyMywgNTksIDU5LCAwKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAyMywgNTksIDU5LCA5OTk5OTkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMCwgMSwgMzEsIDIzLCA1OSwgNTksIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAwLCAxLCAzMSwgMjMsIDU5LCA1OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMCkKKworICAgIGRlZiB0ZXN0X2hhc2hfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDAsIDEyLCAzMSwgMjMsIDMwLCAxNykKKyAgICAgICAgZSA9IHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDMxLCAyMywgMzAsIDE3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgaGFzaChlKSkKKworICAgICAgICBkaWMgPSB7ZDogMX0KKyAgICAgICAgZGljW2VdID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tkXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZV0sIDIpCisKKyAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMSwgIDEsICAxLCAgMCwgIDUsIDE3KQorICAgICAgICBlID0gc2VsZi50aGVjbGFzcygyMDAxLCAgMSwgIDEsICAwLCAgNSwgMTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBoYXNoKGUpKQorCisgICAgICAgIGRpYyA9IHtkOiAxfQorICAgICAgICBkaWNbZV0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2RdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tlXSwgMikKKworICAgIGRlZiB0ZXN0X2NvbXB1dGF0aW9ucyhzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMSwgMzEpCisgICAgICAgIGIgPSBzZWxmLnRoZWNsYXNzKDE5NTYsIDEsIDMxKQorICAgICAgICBkaWZmID0gYS1iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZi5kYXlzLCA0NiozNjUgKyBsZW4ocmFuZ2UoMTk1NiwgMjAwMiwgNCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYuc2Vjb25kcywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLm1pY3Jvc2Vjb25kcywgMCkKKyAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTcsIDYpCisgICAgICAgIG1pbGxpc2VjID0gdGltZWRlbHRhKDAsIDAsIDEwMDApCisgICAgICAgIGhvdXIgPSB0aW1lZGVsdGEoMCwgMzYwMCkKKyAgICAgICAgZGF5ID0gdGltZWRlbHRhKDEpCisgICAgICAgIHdlZWsgPSB0aW1lZGVsdGEoNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgaG91ciwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyLCAxOCwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG91ciArIGEsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTgsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyAxMCpob3VyLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDMsIDMsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSBob3VyLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIsIDE2LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtaG91ciArIGEsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTYsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSBob3VyLCBhICsgLWhvdXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIDIwKmhvdXIsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgMjEsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyBkYXksIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMywgMTcsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSBkYXksIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgMTcsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyB3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDksIDE3LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gd2Vlaywgc2VsZi50aGVjbGFzcygyMDAyLCAyLCAyMywgMTcsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyA1Mip3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDMsIDMsIDEsIDE3LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gNTIqd2Vlaywgc2VsZi50aGVjbGFzcygyMDAxLCAzLCAzLCAxNywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgKyB3ZWVrKSAtIGEsIHdlZWspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgKyBkYXkpIC0gYSwgZGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgaG91cikgLSBhLCBob3VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgbWlsbGlzZWMpIC0gYSwgbWlsbGlzZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSB3ZWVrKSAtIGEsIC13ZWVrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhIC0gZGF5KSAtIGEsIC1kYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSBob3VyKSAtIGEsIC1ob3VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhIC0gbWlsbGlzZWMpIC0gYSwgLW1pbGxpc2VjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSArIHdlZWspLCAtd2VlaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgKyBkYXkpLCAtZGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSArIGhvdXIpLCAtaG91cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgKyBtaWxsaXNlYyksIC1taWxsaXNlYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSB3ZWVrKSwgd2VlaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSBkYXkpLCBkYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gaG91ciksIGhvdXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gbWlsbGlzZWMpLCBtaWxsaXNlYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgKHdlZWsgKyBkYXkgKyBob3VyICsgbWlsbGlzZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMTAsIDE4LCA2LCAwLCAxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgKHdlZWsgKyBkYXkgKyBob3VyICsgbWlsbGlzZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKGEgKyB3ZWVrKSArIGRheSkgKyBob3VyKSArIG1pbGxpc2VjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAod2VlayArIGRheSArIGhvdXIgKyBtaWxsaXNlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcygyMDAyLCAyLCAyMiwgMTYsIDUsIDU5LCA5OTkwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAod2VlayArIGRheSArIGhvdXIgKyBtaWxsaXNlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoYSAtIHdlZWspIC0gZGF5KSAtIGhvdXIpIC0gbWlsbGlzZWMpCisgICAgICAgICMgQWRkL3N1YiBpbnRzLCBsb25ncywgZmxvYXRzIHNob3VsZCBiZSBpbGxlZ2FsCisgICAgICAgIGZvciBpIGluIDEsIDFMLCAxLjA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEtaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpK2EpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogaS1hKQorCisgICAgICAgICMgZGVsdGEgLSBkYXRldGltZSBpcyBzZW5zZWxlc3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBkYXkgLSBhKQorICAgICAgICAjIG1peGluZyBkYXRldGltZSBhbmQgKGRlbHRhIG9yIGRhdGV0aW1lKSB2aWEgKiBvciAvLyBpcyBzZW5zZWxlc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGRheSAqIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhICogZGF5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5IC8vIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhIC8vIGRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKiBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAvLyBhKQorICAgICAgICAjIGRhdGV0aW1lICsgZGF0ZXRpbWUgaXMgc2Vuc2VsZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhICsgYSkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICBhcmdzID0gNiwgNywgMjMsIDIwLCA1OSwgMSwgNjQqKjIKKyAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKKworICAgIGRlZiB0ZXN0X21vcmVfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKDIwMDMsIDIsIDcsIDE2LCA0OCwgMzcsIDQ0NDExNikKKyAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhhKQorICAgICAgICBiID0gcGlja2xlLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi55ZWFyLCAyMDAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubW9udGgsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kYXksIDcpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZ19zdWJjbGFzc19kYXRldGltZShzZWxmKToKKyAgICAgICAgYXJncyA9IDYsIDcsIDIzLCAyMCwgNTksIDEsIDY0KioyCisgICAgICAgIG9yaWcgPSBTdWJjbGFzc0RhdGV0aW1lKCphcmdzKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisKKyAgICBkZWYgdGVzdF9tb3JlX2NvbXBhcmUoc2VsZik6CisgICAgICAgICMgVGhlIHRlc3RfY29tcGFyZSgpIGluaGVyaXRlZCBmcm9tIFRlc3REYXRlIGNvdmVycyB0aGUgZXJyb3IgY2FzZXMuCisgICAgICAgICMgV2UganVzdCB3YW50IHRvIHRlc3QgbGV4aWNvZ3JhcGhpYyBvcmRlcmluZyBvbiB0aGUgbWVtYmVycyBkYXRldGltZQorICAgICAgICAjIGhhcyB0aGF0IGRhdGUgbGFja3MuCisgICAgICAgIGFyZ3MgPSBbMjAwMCwgMTEsIDI5LCAyMCwgNTgsIDE2LCA5OTk5OThdCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID49IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYXJncykpOgorICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KKyAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBhcmdzW2ldICsgMQorICAgICAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCpuZXdhcmdzKSAgICMgdGhpcyBpcyBsYXJnZXIgdGhhbiB0MQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiAhPSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyID09IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MSwgdDIpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDEpCisKKworICAgICMgQSBoZWxwZXIgZm9yIHRpbWVzdGFtcCBjb25zdHJ1Y3RvciB0ZXN0cy4KKyAgICBkZWYgdmVyaWZ5X2ZpZWxkX2VxdWFsaXR5KHNlbGYsIGV4cGVjdGVkLCBnb3QpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX3llYXIsIGdvdC55ZWFyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX21vbiwgZ290Lm1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX21kYXksIGdvdC5kYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQudG1faG91ciwgZ290LmhvdXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQudG1fbWluLCBnb3QubWludXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX3NlYywgZ290LnNlY29uZCkKKworICAgIGRlZiB0ZXN0X2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgdHMgPSB0aW1lLnRpbWUoKQorICAgICAgICBleHBlY3RlZCA9IHRpbWUubG9jYWx0aW1lKHRzKQorICAgICAgICBnb3QgPSBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAodHMpCisgICAgICAgIHNlbGYudmVyaWZ5X2ZpZWxkX2VxdWFsaXR5KGV4cGVjdGVkLCBnb3QpCisKKyAgICBkZWYgdGVzdF91dGNmcm9tdGltZXN0YW1wKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgIHRzID0gdGltZS50aW1lKCkKKyAgICAgICAgZXhwZWN0ZWQgPSB0aW1lLmdtdGltZSh0cykKKyAgICAgICAgZ290ID0gc2VsZi50aGVjbGFzcy51dGNmcm9tdGltZXN0YW1wKHRzKQorICAgICAgICBzZWxmLnZlcmlmeV9maWVsZF9lcXVhbGl0eShleHBlY3RlZCwgZ290KQorCisgICAgZGVmIHRlc3RfbWljcm9zZWNvbmRfcm91bmRpbmcoc2VsZik6CisgICAgICAgICMgVGVzdCB3aGV0aGVyIGZyb210aW1lc3RhbXAgInJvdW5kcyB1cCIgZmxvYXRzIHRoYXQgYXJlIGxlc3MKKyAgICAgICAgIyB0aGFuIG9uZSBtaWNyb3NlY29uZCBzbWFsbGVyIHRoYW4gYW4gaW50ZWdlci4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAoMC45OTk5OTk5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAoMSkpCisKKyAgICBkZWYgdGVzdF9pbnNhbmVfZnJvbXRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBwbGF0Zm9ybSBtYXBzIHRpbWVfdCB0byBkb3VibGUsCisgICAgICAgICMgYW5kIHRoYXQgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGVyZS4gIFRoaXMgdGVzdCBzaG91bGQKKyAgICAgICAgIyBleGVtcHQgc3VjaCBwbGF0Zm9ybXMgKHByb3ZpZGVkIHRoZXkgcmV0dXJuIHJlYXNvbmFibGUKKyAgICAgICAgIyByZXN1bHRzISkuCisgICAgICAgIGZvciBpbnNhbmUgaW4gLTFlMjAwLCAxZTIwMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2FuZSkKKworICAgIGRlZiB0ZXN0X2luc2FuZV91dGNmcm9tdGltZXN0YW1wKHNlbGYpOgorICAgICAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIHBsYXRmb3JtIG1hcHMgdGltZV90IHRvIGRvdWJsZSwKKyAgICAgICAgIyBhbmQgdGhhdCB0aGlzIHRlc3Qgd2lsbCBmYWlsIHRoZXJlLiAgVGhpcyB0ZXN0IHNob3VsZAorICAgICAgICAjIGV4ZW1wdCBzdWNoIHBsYXRmb3JtcyAocHJvdmlkZWQgdGhleSByZXR1cm4gcmVhc29uYWJsZQorICAgICAgICAjIHJlc3VsdHMhKS4KKyAgICAgICAgZm9yIGluc2FuZSBpbiAtMWUyMDAsIDFlMjAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcy51dGNmcm9tdGltZXN0YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zYW5lKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIGRvZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHRpbWVzdGFtcHMiKQorICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2Zsb2F0X2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgVGhlIHJlc3VsdCBpcyB0ei1kZXBlbmRlbnQ7IGF0IGxlYXN0IHRlc3QgdGhhdCB0aGlzIGRvZXNuJ3QKKyAgICAgICAgIyBmYWlsIChsaWtlIGl0IGRpZCBiZWZvcmUgYnVnIDE2NDY3Mjggd2FzIGZpeGVkKS4KKyAgICAgICAgc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKC0xLjA1KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3MgZG9lc24ndCBhY2NlcHQgbmVnYXRpdmUgdGltZXN0YW1wcyIpCisgICAgZGVmIHRlc3RfbmVnYXRpdmVfZmxvYXRfdXRjZnJvbXRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCgtMS4wNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLnRoZWNsYXNzKDE5NjksIDEyLCAzMSwgMjMsIDU5LCA1OCwgOTUwMDAwKSkKKworICAgIGRlZiB0ZXN0X3V0Y25vdyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAjIENhbGwgaXQgYSBzdWNjZXNzIGlmIHV0Y25vdygpIGFuZCB1dGNmcm9tdGltZXN0YW1wKCkgYXJlIHdpdGhpbgorICAgICAgICAjIGEgc2Vjb25kIG9mIGVhY2ggb3RoZXIuCisgICAgICAgIHRvbGVyYW5jZSA9IHRpbWVkZWx0YShzZWNvbmRzPTEpCisgICAgICAgIGZvciBkdW1teSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIGZyb21fbm93ID0gc2VsZi50aGVjbGFzcy51dGNub3coKQorICAgICAgICAgICAgZnJvbV90aW1lc3RhbXAgPSBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXAodGltZS50aW1lKCkpCisgICAgICAgICAgICBpZiBhYnMoZnJvbV90aW1lc3RhbXAgLSBmcm9tX25vdykgPD0gdG9sZXJhbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAjIEVsc2UgdHJ5IGFnYWluIGEgZmV3IHRpbWVzLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKGZyb21fdGltZXN0YW1wIC0gZnJvbV9ub3cpIDw9IHRvbGVyYW5jZSkKKworICAgIGRlZiB0ZXN0X3N0cnB0aW1lKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3N0cnB0aW1lCisKKyAgICAgICAgc3RyaW5nID0gJzIwMDQtMTItMDEgMTM6MDI6NDcuMTk3JworICAgICAgICBmb3JtYXQgPSAnJVktJW0tJWQgJUg6JU06JVMuJWYnCisgICAgICAgIHJlc3VsdCwgZnJhYyA9IF9zdHJwdGltZS5fc3RycHRpbWUoc3RyaW5nLCBmb3JtYXQpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi50aGVjbGFzcygqKHJlc3VsdFswOjZdKyhmcmFjLCkpKQorICAgICAgICBnb3QgPSBzZWxmLnRoZWNsYXNzLnN0cnB0aW1lKHN0cmluZywgZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICBkZWYgdGVzdF9tb3JlX3RpbWV0dXBsZShzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3RzIGZpZWxkcyBiZXlvbmQgdGhvc2UgdGVzdGVkIGJ5IHRoZSBUZXN0RGF0ZS50ZXN0X3RpbWV0dXBsZS4KKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMjAwNCwgMTIsIDMxLCA2LCAyMiwgMzMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50aW1ldHVwbGUoKSwgKDIwMDQsIDEyLCAzMSwgNiwgMjIsIDMzLCA0LCAzNjYsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRpbWV0dXBsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICh0LnllYXIsIHQubW9udGgsIHQuZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICB0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdC53ZWVrZGF5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHQudG9vcmRpbmFsKCkgLSBkYXRlKHQueWVhciwgMSwgMSkudG9vcmRpbmFsKCkgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAtMSkpCisgICAgICAgIHR0ID0gdC50aW1ldHVwbGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX3llYXIsIHQueWVhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV9tb24sIHQubW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1fbWRheSwgdC5kYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1faG91ciwgdC5ob3VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX21pbiwgdC5taW51dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1fc2VjLCB0LnNlY29uZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV93ZGF5LCB0LndlZWtkYXkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV95ZGF5LCB0LnRvb3JkaW5hbCgpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlKHQueWVhciwgMSwgMSkudG9vcmRpbmFsKCkgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX2lzZHN0LCAtMSkKKworICAgIGRlZiB0ZXN0X21vcmVfc3RyZnRpbWUoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyBmaWVsZHMgYmV5b25kIHRob3NlIHRlc3RlZCBieSB0aGUgVGVzdERhdGUudGVzdF9zdHJmdGltZS4KKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMjAwNCwgMTIsIDMxLCA2LCAyMiwgMzMsIDQ3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoIiVtICVkICV5ICVmICVTICVNICVIICVqIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIgMzEgMDQgMDAwMDQ3IDMzIDIyIDA2IDM2NiIpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0KHNlbGYpOgorICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgNCwgMTgsIDQ1LCAzLCAxMjM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmRhdGUoKSwgZGF0ZSgyMDAyLCAzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC50aW1lKCksIHRpbWUoMTgsIDQ1LCAzLCAxMjM0KSkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmUoc2VsZik6CisgICAgICAgIGQgPSBkYXRlKDIwMDIsIDMsIDQpCisgICAgICAgIHQgPSB0aW1lKDE4LCA0NSwgMywgMTIzNCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDQsIDE4LCA0NSwgMywgMTIzNCkKKyAgICAgICAgY29tYmluZSA9IHNlbGYudGhlY2xhc3MuY29tYmluZQorICAgICAgICBkdCA9IGNvbWJpbmUoZCwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgZHQgPSBjb21iaW5lKHRpbWU9dCwgZGF0ZT1kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBleHBlY3RlZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGR0LmRhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBkdC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGNvbWJpbmUoZHQuZGF0ZSgpLCBkdC50aW1lKCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tYmluZSkgIyBuZWVkIGFuIGFyZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmUsIGQpICMgbmVlZCB0d28gYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmUsIHQsIGQpICMgYXJncyByZXZlcnNlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmUsIGQsIHQsIDEpICMgdG9vIG1hbnkgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmUsICJkYXRlIiwgInRpbWUiKSAjIHdyb25nIHR5cGVzCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIGFyZ3MgPSBbMSwgMiwgMywgNCwgNSwgNiwgN10KKyAgICAgICAgYmFzZSA9IGNscygqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlLnJlcGxhY2UoKSkKKworICAgICAgICBpID0gMAorICAgICAgICBmb3IgbmFtZSwgbmV3dmFsIGluICgoInllYXIiLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtb250aCIsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRheSIsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImhvdXIiLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaW51dGUiLCA2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzZWNvbmQiLCA3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaWNyb3NlY29uZCIsIDgpKToKKyAgICAgICAgICAgIG5ld2FyZ3MgPSBhcmdzWzpdCisgICAgICAgICAgICBuZXdhcmdzW2ldID0gbmV3dmFsCisgICAgICAgICAgICBleHBlY3RlZCA9IGNscygqbmV3YXJncykKKyAgICAgICAgICAgIGdvdCA9IGJhc2UucmVwbGFjZSgqKntuYW1lOiBuZXd2YWx9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyBPdXQgb2YgYm91bmRzLgorICAgICAgICBiYXNlID0gY2xzKDIwMDAsIDIsIDI5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIHllYXI9MjAwMSkKKworICAgIGRlZiB0ZXN0X2FzdGltZXpvbmUoc2VsZik6CisgICAgICAgICMgUHJldHR5IGJvcmluZyEgIFRoZSBUWiB0ZXN0IGlzIG1vcmUgaW50ZXJlc3RpbmcgaGVyZS4gIGFzdGltZXpvbmUoKQorICAgICAgICAjIHNpbXBseSBjYW4ndCBiZSBhcHBsaWVkIHRvIGEgbmFpdmUgb2JqZWN0LgorICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3Mubm93KCkKKyAgICAgICAgZiA9IEZpeGVkT2Zmc2V0KDQ0LCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkdC5hc3RpbWV6b25lKSAjIG5vdCBlbm91Z2ggYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGR0LmFzdGltZXpvbmUsIGYsIGYpICMgdG9vIG1hbnkgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGR0LmFzdGltZXpvbmUsIGR0KSAjIGFyZyB3cm9uZyB0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGR0LmFzdGltZXpvbmUsIGYpICMgbmFpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZHQuYXN0aW1lem9uZSwgdHo9ZikgICMgbmFpdmUKKworICAgICAgICBjbGFzcyBCb2d1cyh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiBOb25lCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YSgwKQorICAgICAgICBib2cgPSBCb2d1cygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGR0LmFzdGltZXpvbmUsIGJvZykgICAjIG5haXZlCisKKyAgICAgICAgY2xhc3MgQWxzb0JvZ3VzKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YSgwKQorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6IHJldHVybiBOb25lCisgICAgICAgIGFsc29ib2cgPSBBbHNvQm9ndXMoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCBhbHNvYm9nKSAjIGFsc28gbmFpdmUKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2RhdGV0aW1lKHNlbGYpOgorCisgICAgICAgIGNsYXNzIEMoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICB0aGVBbnN3ZXIgPSA0MgorCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3cyk6CisgICAgICAgICAgICAgICAgdGVtcCA9IGt3cy5jb3B5KCkKKyAgICAgICAgICAgICAgICBleHRyYSA9IHRlbXAucG9wKCdleHRyYScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50aGVjbGFzcy5fX25ld19fKGNscywgKmFyZ3MsICoqdGVtcCkKKyAgICAgICAgICAgICAgICByZXN1bHQuZXh0cmEgPSBleHRyYQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAgICAgZGVmIG5ld21ldGgoc2VsZiwgc3RhcnQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCArIHNlbGYueWVhciArIHNlbGYubW9udGggKyBzZWxmLnNlY29uZAorCisgICAgICAgIGFyZ3MgPSAyMDAzLCA0LCAxNCwgMTIsIDEzLCA0MQorCisgICAgICAgIGR0MSA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIGR0MiA9IEMoKmFyZ3MsICoqeydleHRyYSc6IDd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLl9fY2xhc3NfXywgQykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIudGhlQW5zd2VyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIuZXh0cmEsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQxLnRvb3JkaW5hbCgpLCBkdDIudG9vcmRpbmFsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLm5ld21ldGgoLTcpLCBkdDEueWVhciArIGR0MS5tb250aCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdDEuc2Vjb25kIC0gNykKKworY2xhc3MgU3ViY2xhc3NUaW1lKHRpbWUpOgorICAgIHN1Yl92YXIgPSAxCisKK2NsYXNzIFRlc3RUaW1lKEhhcm1sZXNzTWl4ZWRDb21wYXJpc29uLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICB0aGVjbGFzcyA9IHRpbWUKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDEyLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaG91ciwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5taW51dGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zZWNvbmQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5taWNyb3NlY29uZCwgMCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2F0dHJpYnV0ZXNfbm9uemVybyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYWxsIGF0dHJpYnV0ZXMgYXJlIG5vbi16ZXJvIHNvIGJ1Z3MgaW4KKyAgICAgICAgIyBiaXQtc2hpZnRpbmcgYWNjZXNzIHNob3cgdXAuCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDEyLCA1OSwgNTksIDgwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ob3VyLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pbnV0ZSwgNTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zZWNvbmQsIDU5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDgwMDApCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDEsIDIsIDMsIDQpCisKKyAgICAgICAgIyBWZXJpZnkgdCAtPiBzdHJpbmcgLT4gdGltZSBpZGVudGl0eS4KKyAgICAgICAgcyA9IHJlcHIodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCisgICAgICAgIHMgPSBzWzk6XQorICAgICAgICB0MiA9IGV2YWwocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB0MikKKworICAgICAgICAjIFZlcmlmeSBpZGVudGl0eSB2aWEgcmVjb25zdHJ1Y3RpbmcgZnJvbSBwaWVjZXMuCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcyh0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubWljcm9zZWNvbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdDIpCisKKyAgICBkZWYgdGVzdF9jb21wYXJpbmcoc2VsZik6CisgICAgICAgIGFyZ3MgPSBbMSwgMiwgMywgNF0KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA9PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPj0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgIT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MSwgdDIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MiwgdDEpLCAwKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihhcmdzKSk6CisgICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQorICAgICAgICAgICAgbmV3YXJnc1tpXSA9IGFyZ3NbaV0gKyAxCisgICAgICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoKm5ld2FyZ3MpICAgIyB0aGlzIGlzIGxhcmdlciB0aGFuIHQxCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID49IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyICE9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA9PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID49IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMSkKKworICAgICAgICBmb3IgYmFkYXJnIGluIE9USEVSU1RVRkY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxID09IGJhZGFyZywgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxICE9IGJhZGFyZywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnID09IHQxLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnICE9IHQxLCBUcnVlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPD0gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxIDwgYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID4gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID49IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID49IHQxKQorCisgICAgZGVmIHRlc3RfYmFkX2NvbnN0cnVjdG9yX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBiYWQgaG91cnMKKyAgICAgICAgc2VsZi50aGVjbGFzcygwLCAwKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCAwKSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIC0xLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyNCwgMCkKKyAgICAgICAgIyBiYWQgbWludXRlcworICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCAwKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA2MCkKKyAgICAgICAgIyBiYWQgc2Vjb25kcworICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSwgMCkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMywgNTksIDU5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA1OSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA1OSwgNjApCisgICAgICAgICMgYmFkIG1pY3Jvc2Vjb25kcworICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSwgNTksIDApICAgICAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSwgNTksIDk5OTk5OSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMywgNTksIDU5LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjMsIDU5LCA1OSwgMTAwMDAwMCkKKworICAgIGRlZiB0ZXN0X2hhc2hfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIzLCAzMCwgMTcpCisgICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDIzLCAzMCwgMTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBoYXNoKGUpKQorCisgICAgICAgIGRpYyA9IHtkOiAxfQorICAgICAgICBkaWNbZV0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2RdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tlXSwgMikKKworICAgICAgICBkID0gc2VsZi50aGVjbGFzcygwLCAgNSwgMTcpCisgICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDAsICA1LCAxNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIGhhc2goZSkpCisKKyAgICAgICAgZGljID0ge2Q6IDF9CisgICAgICAgIGRpY1tlXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2VdLCAyKQorCisgICAgZGVmIHRlc3RfaXNvZm9ybWF0KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyg0LCA1LCAxLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgIjA0OjA1OjAxLjAwMDEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgc3RyKHQpKQorCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDAwMDEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAwMDEwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDAxMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDEwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDEwMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MTAwMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4xMDAwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgIGRlZiB0ZXN0XzE2NTM3MzYoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IGl0IGRvZXNuJ3QgYWNjZXB0IGV4dHJhIGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKHNlY29uZD0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuaXNvZm9ybWF0LCBmb289MykKKworICAgIGRlZiB0ZXN0X3N0cmZ0aW1lKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoJyVIICVNICVTICVmJyksICIwMSAwMiAwMyAwMDAwMDQiKQorICAgICAgICAjIEEgbmFpdmUgb2JqZWN0IHJlcGxhY2VzICV6IGFuZCAlWiB3aXRoIGVtcHR5IHN0cmluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgiJyV6JyAnJVonIiksICInJyAnJyIpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2Zvcm1hdF9fKCcnKSwgc3RyKHQpKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBhIGRlcml2ZWQgY2xhc3MncyBfX3N0cl9fKCkgZ2V0cyBjYWxsZWQKKyAgICAgICAgY2xhc3MgQShzZWxmLnRoZWNsYXNzKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnQScKKyAgICAgICAgYSA9IEEoMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZm9ybWF0X18oJycpLCAnQScpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIHN0cmZ0aW1lIGdldHMgY2FsbGVkCisgICAgICAgIGNsYXNzIEIoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICBkZWYgc3RyZnRpbWUoc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnQicKKyAgICAgICAgYiA9IEIoMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oJycpLCBzdHIodCkpCisKKyAgICAgICAgZm9yIGZtdCBpbiBbJyVIICVNICVTJywKKyAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2Zvcm1hdF9fKGZtdCksIHQuc3RyZnRpbWUoZm10KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2Zvcm1hdF9fKGZtdCksIHQuc3RyZnRpbWUoZm10KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKGZtdCksICdCJykKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KSksICIwMTowMjowMy4wMDAwMDQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnRoZWNsYXNzKDEwLCAyLCAzLCA0MDAwKSksICIxMDowMjowMy4wMDQwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnRoZWNsYXNzKDAsIDIsIDMsIDQwMDAwMCkpLCAiMDA6MDI6MDMuNDAwMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50aGVjbGFzcygxMiwgMiwgMywgMCkpLCAiMTI6MDI6MDMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnRoZWNsYXNzKDIzLCAxNSwgMCwgMCkpLCAiMjM6MTU6MDAiKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbmFtZSA9ICdkYXRldGltZS4nICsgc2VsZi50aGVjbGFzcy5fX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDEsIDIsIDMsIDQpIiAlIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLnRoZWNsYXNzKDEwLCAyLCAzLCA0MDAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDEwLCAyLCAzLCA0MDAwKSIgJSBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygwLCAyLCAzLCA0MDAwMDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoMCwgMiwgMywgNDAwMDAwKSIgJSBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygxMiwgMiwgMywgMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcygxMiwgMiwgMykiICUgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYudGhlY2xhc3MoMjMsIDE1LCAwLCAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDIzLCAxNSkiICUgbmFtZSkKKworICAgIGRlZiB0ZXN0X3Jlc29sdXRpb25faW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGhlY2xhc3MubWluLCBzZWxmLnRoZWNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5tYXgsIHNlbGYudGhlY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLnJlc29sdXRpb24sIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWF4ID4gc2VsZi50aGVjbGFzcy5taW4pCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgYXJncyA9IDIwLCA1OSwgMTYsIDY0KioyCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZ19zdWJjbGFzc190aW1lKHNlbGYpOgorICAgICAgICBhcmdzID0gMjAsIDU5LCAxNiwgNjQqKjIKKyAgICAgICAgb3JpZyA9IFN1YmNsYXNzVGltZSgqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNscygwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjbHMoKSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgYXJncyA9IFsxLCAyLCAzLCA0XQorICAgICAgICBiYXNlID0gY2xzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGJhc2UucmVwbGFjZSgpKQorCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBuYW1lLCBuZXd2YWwgaW4gKCgiaG91ciIsIDUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pbnV0ZSIsIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInNlY29uZCIsIDcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pY3Jvc2Vjb25kIiwgOCkpOgorICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KKyAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBuZXd2YWwKKyAgICAgICAgICAgIGV4cGVjdGVkID0gY2xzKCpuZXdhcmdzKQorICAgICAgICAgICAgZ290ID0gYmFzZS5yZXBsYWNlKCoqe25hbWU6IG5ld3ZhbH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAjIE91dCBvZiBib3VuZHMuCisgICAgICAgIGJhc2UgPSBjbHMoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBob3VyPTI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pbnV0ZT0tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBzZWNvbmQ9MTAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pY3Jvc2Vjb25kPTEwMDAwMDApCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc190aW1lKHNlbGYpOgorCisgICAgICAgIGNsYXNzIEMoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICB0aGVBbnN3ZXIgPSA0MgorCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3cyk6CisgICAgICAgICAgICAgICAgdGVtcCA9IGt3cy5jb3B5KCkKKyAgICAgICAgICAgICAgICBleHRyYSA9IHRlbXAucG9wKCdleHRyYScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50aGVjbGFzcy5fX25ld19fKGNscywgKmFyZ3MsICoqdGVtcCkKKyAgICAgICAgICAgICAgICByZXN1bHQuZXh0cmEgPSBleHRyYQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAgICAgZGVmIG5ld21ldGgoc2VsZiwgc3RhcnQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCArIHNlbGYuaG91ciArIHNlbGYuc2Vjb25kCisKKyAgICAgICAgYXJncyA9IDQsIDUsIDYKKworICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS5pc29mb3JtYXQoKSwgZHQyLmlzb2Zvcm1hdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLmhvdXIgKyBkdDEuc2Vjb25kIC0gNykKKworICAgIGRlZiB0ZXN0X2JhY2tkb29yX3Jlc2lzdGFuY2Uoc2VsZik6CisgICAgICAgICMgc2VlIFRlc3REYXRlLnRlc3RfYmFja2Rvb3JfcmVzaXN0YW5jZSgpLgorICAgICAgICBiYXNlID0gJzI6NTkuMCcKKyAgICAgICAgZm9yIGhvdXJfYnl0ZSBpbiAnICcsICc5JywgY2hyKDI0KSwgJ1x4ZmYnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnRoZWNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyX2J5dGUgKyBiYXNlWzE6XSkKKworIyBBIG1peGluIGZvciBjbGFzc2VzIHdpdGggYSB0emluZm89IGFyZ3VtZW50LiAgU3ViY2xhc3NlcyBtdXN0IGRlZmluZQorIyB0aGVjbGFzcyBhcyBhIGNsYXNzIGF0cmlidXRlLCBhbmQgdGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPXdoYXRldmVyKQorIyBtdXN0IGJlIGxlZ2l0ICh3aGljaCBpcyB0cnVlIGZvciB0aW1lIGFuZCBkYXRldGltZSkuCitjbGFzcyBUWkluZm9CYXNlOgorCisgICAgZGVmIHRlc3RfYXJndW1lbnRfcGFzc2luZyhzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICAjIEEgZGF0ZXRpbWUgcGFzc2VzIGl0c2VsZiBvbiwgYSB0aW1lIHBhc3NlcyBOb25lLgorICAgICAgICBjbGFzcyBpbnRyb3NwZWN0aXZlKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KTogICAgcmV0dXJuIGR0IGFuZCAicmVhbCIgb3IgIm5vbmUiCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXMgPSBkdCBhbmQgNDIgb3IgLTQyKQorICAgICAgICAgICAgZHN0ID0gdXRjb2Zmc2V0CisKKyAgICAgICAgb2JqID0gY2xzKDEsIDIsIDMsIHR6aW5mbz1pbnRyb3NwZWN0aXZlKCkpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBjbHMgaXMgdGltZSBhbmQgIm5vbmUiIG9yICJyZWFsIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai50em5hbWUoKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB0aW1lZGVsdGEobWludXRlcz0oY2xzIGlzIHRpbWUgYW5kIC00MiBvciA0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnV0Y29mZnNldCgpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZHN0KCksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYmFkX3R6aW5mb19jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2xzLCAxLCAxLCAxLCB0emluZm89MTIpCisKKyAgICAgICAgY2xhc3MgTmljZVRyeShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNscywgMSwgMSwgMSwgdHppbmZvPU5pY2VUcnkpCisKKyAgICAgICAgY2xhc3MgQmV0dGVyVHJ5KHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiBwYXNzCisgICAgICAgIGIgPSBCZXR0ZXJUcnkoKQorICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC50emluZm8gaXMgYikKKworICAgIGRlZiB0ZXN0X3V0Y19vZmZzZXRfb3V0X29mX2JvdW5kcyhzZWxmKToKKyAgICAgICAgY2xhc3MgRWRneSh0emluZm8pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9mZnNldCk6CisgICAgICAgICAgICAgICAgc2VsZi5vZmZzZXQgPSB0aW1lZGVsdGEobWludXRlcz1vZmZzZXQpCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5vZmZzZXQKKworICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIGZvciBvZmZzZXQsIGxlZ2l0IGluICgoLTE0NDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTQzOSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQzOSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQ0MCwgRmFsc2UpKToKKyAgICAgICAgICAgIGlmIGNscyBpcyB0aW1lOgorICAgICAgICAgICAgICAgIHQgPSBjbHMoMSwgMiwgMywgdHppbmZvPUVkZ3kob2Zmc2V0KSkKKyAgICAgICAgICAgIGVsaWYgY2xzIGlzIGRhdGV0aW1lOgorICAgICAgICAgICAgICAgIHQgPSBjbHMoNiwgNiwgNiwgMSwgMiwgMywgdHppbmZvPUVkZ3kob2Zmc2V0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IDAsICJpbXBvc3NpYmxlIgorICAgICAgICAgICAgaWYgbGVnaXQ6CisgICAgICAgICAgICAgICAgYW9mcyA9IGFicyhvZmZzZXQpCisgICAgICAgICAgICAgICAgaCwgbSA9IGRpdm1vZChhb2ZzLCA2MCkKKyAgICAgICAgICAgICAgICB0YWcgPSAiJWMlMDJkOiUwMmQiICUgKG9mZnNldCA8IDAgYW5kICctJyBvciAnKycsIGgsIG0pCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0LCBkYXRldGltZSk6CisgICAgICAgICAgICAgICAgICAgIHQgPSB0LnRpbWV0eigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksICIwMTowMjowMyIgKyB0YWcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0ciwgdCkKKworICAgIGRlZiB0ZXN0X3R6aW5mb19jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIGNsYXNzIEMxKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQorICAgICAgICAgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6IHJldHVybiBOb25lCisgICAgICAgIGZvciB0IGluIChjbHMoMSwgMSwgMSksCisgICAgICAgICAgICAgICAgICBjbHMoMSwgMSwgMSwgdHppbmZvPU5vbmUpLAorICAgICAgICAgICAgICAgICAgY2xzKDEsIDEsIDEsIHR6aW5mbz1DMSgpKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC51dGNvZmZzZXQoKSBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZHN0KCkgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnR6bmFtZSgpIGlzIE5vbmUpCisKKyAgICAgICAgY2xhc3MgQzModHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9LTE0MzkpCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPTE0MzkpCisgICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KTogcmV0dXJuICJhbmFtZSIKKyAgICAgICAgdCA9IGNscygxLCAxLCAxLCB0emluZm89QzMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMTQzOSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MTQzOSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50em5hbWUoKSwgImFuYW1lIikKKworICAgICAgICAjIFdyb25nIHR5cGVzLgorICAgICAgICBjbGFzcyBDNCh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiAiYW5hbWUiCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIDcKKyAgICAgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOiByZXR1cm4gMAorICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1DNCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQudXRjb2Zmc2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuZHN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQudHpuYW1lKQorCisgICAgICAgICMgT2Zmc2V0IG91dCBvZiByYW5nZS4KKyAgICAgICAgY2xhc3MgQzYodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKGhvdXJzPS0yNCkKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKGhvdXJzPTI0KQorICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1DNigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnV0Y29mZnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5kc3QpCisKKyAgICAgICAgIyBOb3QgYSB3aG9sZSBudW1iZXIgb2YgbWludXRlcy4KKyAgICAgICAgY2xhc3MgQzcodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKHNlY29uZHM9NjEpCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShtaWNyb3NlY29uZHM9LTgxKQorICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1DNygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnV0Y29mZnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5kc3QpCisKKyAgICBkZWYgdGVzdF9hd2FyZV9jb21wYXJlKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB1dGNvZmZzZXQoKSBnZXRzIGlnbm9yZWQgaWYgdGhlIGNvbXBhcmFuZHMgaGF2ZQorICAgICAgICAjIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIuCisgICAgICAgIGNsYXNzIE9wZXJhbmREZXBlbmRlbnRPZmZzZXQodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgdCk6CisgICAgICAgICAgICAgICAgaWYgdC5taW51dGUgPCAxMDoKKyAgICAgICAgICAgICAgICAgICAgIyBkMCBhbmQgZDEgZXF1YWwgYWZ0ZXIgYWRqdXN0bWVudAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9dC5taW51dGUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBkMiBvZmYgaW4gdGhlIHdlZWRzCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEobWludXRlcz01OSkKKworICAgICAgICBiYXNlID0gY2xzKDgsIDksIDEwLCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQorICAgICAgICBkMCA9IGJhc2UucmVwbGFjZShtaW51dGU9MykKKyAgICAgICAgZDEgPSBiYXNlLnJlcGxhY2UobWludXRlPTkpCisgICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSkKKyAgICAgICAgZm9yIHggaW4gZDAsIGQxLCBkMjoKKyAgICAgICAgICAgIGZvciB5IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICAgICAgZ290ID0gY21wKHgsIHkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbXAoeC5taW51dGUsIHkubWludXRlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworICAgICAgICAjIEhvd2V2ZXIsIGlmIHRoZXkncmUgZGlmZmVyZW50IG1lbWJlcnMsIHVjdG9mZnNldCBpcyBub3QgaWdub3JlZC4KKyAgICAgICAgIyBOb3RlIHRoYXQgYSB0aW1lIGNhbid0IGFjdHVhbGx5IGhhdmUgYW4gb3BlcmFuZC1kZXBlZGVudCBvZmZzZXQsCisgICAgICAgICMgdGhvdWdoIChhbmQgdGltZS51dGNvZmZzZXQoKSBwYXNzZXMgTm9uZSB0byB0emluZm8udXRjb2Zmc2V0KCkpLAorICAgICAgICAjIHNvIHNraXAgdGhpcyB0ZXN0IGZvciB0aW1lLgorICAgICAgICBpZiBjbHMgaXMgbm90IHRpbWU6CisgICAgICAgICAgICBkMCA9IGJhc2UucmVwbGFjZShtaW51dGU9MywgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKKyAgICAgICAgICAgIGQxID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT05LCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQorICAgICAgICAgICAgZDIgPSBiYXNlLnJlcGxhY2UobWludXRlPTExLCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQorICAgICAgICAgICAgZm9yIHggaW4gZDAsIGQxLCBkMjoKKyAgICAgICAgICAgICAgICBmb3IgeSBpbiBkMCwgZDEsIGQyOgorICAgICAgICAgICAgICAgICAgICBnb3QgPSBjbXAoeCwgeSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggaXMgZDAgb3IgeCBpcyBkMSkgYW5kICh5IGlzIGQwIG9yIHkgaXMgZDEpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAwCisgICAgICAgICAgICAgICAgICAgIGVsaWYgeCBpcyB5IGlzIGQyOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAwCisgICAgICAgICAgICAgICAgICAgIGVsaWYgeCBpcyBkMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gLTEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCB5IGlzIGQyCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisKKyMgVGVzdGluZyB0aW1lIG9iamVjdHMgd2l0aCBhIG5vbi1Ob25lIHR6aW5mby4KK2NsYXNzIFRlc3RUaW1lVFooVGVzdFRpbWUsIFRaSW5mb0Jhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0aGVjbGFzcyA9IHRpbWUKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ob3VyLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWludXRlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnR6aW5mbyBpcyBOb25lKQorCisgICAgZGVmIHRlc3Rfem9uZXMoc2VsZik6CisgICAgICAgIGVzdCA9IEZpeGVkT2Zmc2V0KC0zMDAsICJFU1QiLCAxKQorICAgICAgICB1dGMgPSBGaXhlZE9mZnNldCgwLCAiVVRDIiwgLTIpCisgICAgICAgIG1ldCA9IEZpeGVkT2Zmc2V0KDYwLCAiTUVUIiwgMykKKyAgICAgICAgdDEgPSB0aW1lKCA3LCA0NywgdHppbmZvPWVzdCkKKyAgICAgICAgdDIgPSB0aW1lKDEyLCA0NywgdHppbmZvPXV0YykKKyAgICAgICAgdDMgPSB0aW1lKDEzLCA0NywgdHppbmZvPW1ldCkKKyAgICAgICAgdDQgPSB0aW1lKG1pY3Jvc2Vjb25kPTQwKQorICAgICAgICB0NSA9IHRpbWUobWljcm9zZWNvbmQ9NDAsIHR6aW5mbz11dGMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS50emluZm8sIGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50emluZm8sIHV0YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My50emluZm8sIG1ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LnR6aW5mbyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ1LnR6aW5mbywgdXRjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPS0zMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDQudXRjb2Zmc2V0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0MS51dGNvZmZzZXQsICJubyBhcmdzIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnR6bmFtZSgpLCAiRVNUIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50em5hbWUoKSwgIlVUQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudHpuYW1lKCksICJNRVQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDQudHpuYW1lKCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0MS50em5hbWUsICJubyBhcmdzIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLmRzdCgpLCB0aW1lZGVsdGEobWludXRlcz0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLmRzdCgpLCB0aW1lZGVsdGEobWludXRlcz0zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LmRzdCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdDEuZHN0LCAibm8gYXJncyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDIpLCBoYXNoKHQzKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDQgPT0gdDUpICMgbWl4ZWQgdHotYXdhcmUgJiBuYWl2ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDQgPCB0NSkgIyBtaXhlZCB0ei1hd2FyZSAmIG5haXZlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0NSA8IHQ0KSAjIG1peGVkIHR6LWF3YXJlICYgbmFpdmUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MSksICIwNzo0NzowMC0wNTowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQyKSwgIjEyOjQ3OjAwKzAwOjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDMpLCAiMTM6NDc6MDArMDE6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0NCksICIwMDowMDowMC4wMDAwNDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0NSksICIwMDowMDowMC4wMDAwNDArMDA6MDAiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEuaXNvZm9ybWF0KCksICIwNzo0NzowMC0wNTowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuaXNvZm9ybWF0KCksICIxMjo0NzowMCswMDowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuaXNvZm9ybWF0KCksICIxMzo0NzowMCswMTowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDAwNDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ1Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAwMDQwKzAwOjAwIikKKworICAgICAgICBkID0gJ2RhdGV0aW1lLnRpbWUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MSksIGQgKyAiKDcsIDQ3LCB0emluZm89ZXN0KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MiksIGQgKyAiKDEyLCA0NywgdHppbmZvPXV0YykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodDMpLCBkICsgIigxMywgNDcsIHR6aW5mbz1tZXQpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQ0KSwgZCArICIoMCwgMCwgMCwgNDApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQ1KSwgZCArICIoMCwgMCwgMCwgNDAsIHR6aW5mbz11dGMpIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnN0cmZ0aW1lKCIlSDolTTolUyAlJVo9JVogJSV6PSV6IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjA3OjQ3OjAwICVaPUVTVCAlej0tMDUwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuc3RyZnRpbWUoIiVIOiVNOiVTICVaICV6IiksICIxMjo0NzowMCBVVEMgKzAwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnN0cmZ0aW1lKCIlSDolTTolUyAlWiAleiIpLCAiMTM6NDc6MDAgTUVUICswMTAwIikKKworICAgICAgICB5dWNrID0gRml4ZWRPZmZzZXQoLTE0MzksICIleiAlWiAlJXolJVoiKQorICAgICAgICB0MSA9IHRpbWUoMjMsIDU5LCB0emluZm89eXVjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS5zdHJmdGltZSgiJUg6JU0gJSVaPSclWicgJSV6PScleiciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjM6NTkgJVo9JyV6ICVaICUleiUlWicgJXo9Jy0yMzU5JyIpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IGFuIGludmFsaWQgdHpuYW1lIHJlc3VsdCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICBjbGFzcyBCYWR0em5hbWUodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOiByZXR1cm4gNDIKKyAgICAgICAgdCA9IHRpbWUoMiwgMywgNCwgdHppbmZvPUJhZHR6bmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoIiVIOiVNOiVTIiksICIwMjowMzowNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5zdHJmdGltZSwgIiVaIikKKworICAgIGRlZiB0ZXN0X2hhc2hfZWRnZV9jYXNlcyhzZWxmKToKKyAgICAgICAgIyBPZmZzZXRzIHRoYXQgb3ZlcmZsb3cgYSBiYXNpYyB0aW1lLgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMCwgMSwgMiwgMywgdHppbmZvPUZpeGVkT2Zmc2V0KDE0MzksICIiKSkKKyAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKDAsIDAsIDIsIDMsIHR6aW5mbz1GaXhlZE9mZnNldCgxNDM4LCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDIpKQorCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygyMywgNTgsIDYsIDEwMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0xMDAwLCAiIikpCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygyMywgNDgsIDYsIDEwMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0xMDEwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDIpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgICMgVHJ5IG9uZSB3aXRob3V0IGEgdHppbmZvLgorICAgICAgICBhcmdzID0gMjAsIDU5LCAxNiwgNjQqKjIKKyAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKKworICAgICAgICAjIFRyeSBvbmUgd2l0aCBhIHR6aW5mby4KKyAgICAgICAgdGluZm8gPSBQaWNrbGFibGVGaXhlZE9mZnNldCgtMzAwLCAnY29va2llJykKKyAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoNSwgNiwgNywgdHppbmZvPXRpbmZvKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGVyaXZlZC50emluZm8sIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMzAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC50em5hbWUoKSwgJ2Nvb2tpZScpCisKKyAgICBkZWYgdGVzdF9tb3JlX2Jvb2woc2VsZik6CisgICAgICAgICMgVGVzdCBjYXNlcyB3aXRoIG5vbi1Ob25lIHR6aW5mby4KKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworCisgICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0zMDAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCisKKyAgICAgICAgdCA9IGNscyg1LCB0emluZm89Rml4ZWRPZmZzZXQoLTMwMCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodCkKKworICAgICAgICB0ID0gY2xzKDUsIHR6aW5mbz1GaXhlZE9mZnNldCgzMDAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0KQorCisgICAgICAgIHQgPSBjbHMoMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMjMqNjAgKyA1OSwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQpCisKKyAgICAgICAgIyBNb3N0bHkgZW5zdXJpbmcgdGhpcyBkb2Vzbid0IG92ZXJmbG93IGludGVybmFsbHkuCisgICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KDIzKjYwICsgNTksICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCisKKyAgICAgICAgIyBCdXQgdGhpcyBzaG91bGQgeWllbGQgYSB2YWx1ZSBlcnJvciAtLSB0aGUgdXRjb2Zmc2V0IGlzIGJvZ3VzLgorICAgICAgICB0ID0gY2xzKDAsIHR6aW5mbz1GaXhlZE9mZnNldCgyNCo2MCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGJvb2wodCkpCisKKyAgICAgICAgIyBMaWtld2lzZS4KKyAgICAgICAgdCA9IGNscygwLCB0emluZm89Rml4ZWRPZmZzZXQoLTI0KjYwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogYm9vbCh0KSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgejEwMCA9IEZpeGVkT2Zmc2V0KDEwMCwgIisxMDAiKQorICAgICAgICB6bTIwMCA9IEZpeGVkT2Zmc2V0KHRpbWVkZWx0YShtaW51dGVzPS0yMDApLCAiLTIwMCIpCisgICAgICAgIGFyZ3MgPSBbMSwgMiwgMywgNCwgejEwMF0KKyAgICAgICAgYmFzZSA9IGNscygqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlLnJlcGxhY2UoKSkKKworICAgICAgICBpID0gMAorICAgICAgICBmb3IgbmFtZSwgbmV3dmFsIGluICgoImhvdXIiLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaW51dGUiLCA2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzZWNvbmQiLCA3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaWNyb3NlY29uZCIsIDgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInR6aW5mbyIsIHptMjAwKSk6CisgICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQorICAgICAgICAgICAgbmV3YXJnc1tpXSA9IG5ld3ZhbAorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbHMoKm5ld2FyZ3MpCisgICAgICAgICAgICBnb3QgPSBiYXNlLnJlcGxhY2UoKip7bmFtZTogbmV3dmFsfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICMgRW5zdXJlIHdlIGNhbiBnZXQgcmlkIG9mIGEgdHppbmZvLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UudHpuYW1lKCksICIrMTAwIikKKyAgICAgICAgYmFzZTIgPSBiYXNlLnJlcGxhY2UodHppbmZvPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlMi50emluZm8gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UyLnR6bmFtZSgpIGlzIE5vbmUpCisKKyAgICAgICAgIyBFbnN1cmUgd2UgY2FuIGFkZCBvbmUuCisgICAgICAgIGJhc2UzID0gYmFzZTIucmVwbGFjZSh0emluZm89ejEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UudHppbmZvIGlzIGJhc2UzLnR6aW5mbykKKworICAgICAgICAjIE91dCBvZiBib3VuZHMuCisgICAgICAgIGJhc2UgPSBjbHMoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBob3VyPTI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pbnV0ZT0tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBzZWNvbmQ9MTAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pY3Jvc2Vjb25kPTEwMDAwMDApCisKKyAgICBkZWYgdGVzdF9taXhlZF9jb21wYXJlKHNlbGYpOgorICAgICAgICB0MSA9IHRpbWUoMSwgMiwgMykKKyAgICAgICAgdDIgPSB0aW1lKDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPUZpeGVkT2Zmc2V0KE5vbmUsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPT0gdDIpCisKKyAgICAgICAgIyBJbiB0aW1lIHcvIGlkZW50aWNhbCB0emluZm8gb2JqZWN0cywgdXRjb2Zmc2V0IGlzIGlnbm9yZWQuCisgICAgICAgIGNsYXNzIFZhcmllcyh0emluZm8pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9MjIpCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIHQpOgorICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IHRpbWVkZWx0YShtaW51dGVzPTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYub2Zmc2V0CisKKyAgICAgICAgdiA9IFZhcmllcygpCisgICAgICAgIHQxID0gdDIucmVwbGFjZSh0emluZm89dikKKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz12KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0yMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTI0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisKKyAgICAgICAgIyBCdXQgaWYgdGhleSdyZSBub3QgaWRlbnRpY2FsLCBpdCBpc24ndCBpZ25vcmVkLgorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPVZhcmllcygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikgICMgdDEncyBvZmZzZXQgY291bnRlciBzdGlsbCBnb2luZyB1cAorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfdGltZXR6KHNlbGYpOgorCisgICAgICAgIGNsYXNzIEMoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICB0aGVBbnN3ZXIgPSA0MgorCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3cyk6CisgICAgICAgICAgICAgICAgdGVtcCA9IGt3cy5jb3B5KCkKKyAgICAgICAgICAgICAgICBleHRyYSA9IHRlbXAucG9wKCdleHRyYScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50aGVjbGFzcy5fX25ld19fKGNscywgKmFyZ3MsICoqdGVtcCkKKyAgICAgICAgICAgICAgICByZXN1bHQuZXh0cmEgPSBleHRyYQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAgICAgZGVmIG5ld21ldGgoc2VsZiwgc3RhcnQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCArIHNlbGYuaG91ciArIHNlbGYuc2Vjb25kCisKKyAgICAgICAgYXJncyA9IDQsIDUsIDYsIDUwMCwgRml4ZWRPZmZzZXQoLTMwMCwgIkVTVCIsIDEpCisKKyAgICAgICAgZHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgZHQyID0gQygqYXJncywgKip7J2V4dHJhJzogN30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIuX19jbGFzc19fLCBDKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi50aGVBbnN3ZXIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5leHRyYSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDEudXRjb2Zmc2V0KCksIGR0Mi51dGNvZmZzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIubmV3bWV0aCgtNyksIGR0MS5ob3VyICsgZHQxLnNlY29uZCAtIDcpCisKKworIyBUZXN0aW5nIGRhdGV0aW1lIG9iamVjdHMgd2l0aCBhIG5vbi1Ob25lIHR6aW5mby4KKworY2xhc3MgVGVzdERhdGVUaW1lVFooVGVzdERhdGVUaW1lLCBUWkluZm9CYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdGhlY2xhc3MgPSBkYXRldGltZQorCisgICAgZGVmIHRlc3RfdHJpdmlhbChzZWxmKToKKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDEsIDIsIDMsIDQsIDUsIDYsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQueWVhciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5tb250aCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuaG91ciwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5taW51dGUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuc2Vjb25kLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1pY3Jvc2Vjb25kLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnR6aW5mbywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fbW9yZV9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIFRoZSB0ZXN0X2NvbXBhcmUoKSBhbmQgdGVzdF9tb3JlX2NvbXBhcmUoKSBpbmhlcml0ZWQgZnJvbSBUZXN0RGF0ZQorICAgICAgICAjIGFuZCBUZXN0RGF0ZVRpbWUgY292ZXJlZCBub24tdHppbmZvIGNhc2VzLgorCisgICAgICAgICMgU21hbGxlc3QgcG9zc2libGUgYWZ0ZXIgVVRDIGFkanVzdG1lbnQuCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxLCAxLCB0emluZm89Rml4ZWRPZmZzZXQoMTQzOSwgIiIpKQorICAgICAgICAjIExhcmdlc3QgcG9zc2libGUgYWZ0ZXIgVVRDIGFkanVzdG1lbnQuCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxMiwgMzEsIDIzLCA1OSwgNTksIDk5OTk5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbz1GaXhlZE9mZnNldCgtMTQzOSwgIiIpKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRob3NlIGNvbXBhcmUgY29ycmVjdGx5LCBhbmQgdy9vIG92ZXJmbG93LgorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPT0gdDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA9PSB0MikKKworICAgICAgICAjIEVxdWFsIGFmZXIgYWRqdXN0bWVudC4KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDEsIDEyLCAzMSwgMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMSwgIiIpKQorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoMiwgMSwgMSwgMywgMTMsIHR6aW5mbz1GaXhlZE9mZnNldCgzKjYwKzEzKzIsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisKKyAgICAgICAgIyBDaGFuZ2UgdDEgbm90IHRvIHN1YnRyYWN0IGEgbWludXRlLCBhbmQgdDEgc2hvdWxkIGJlIGxhcmdlci4KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDEsIDEyLCAzMSwgMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPiB0MikKKworICAgICAgICAjIENoYW5nZSB0MSB0byBzdWJ0cmFjdCAyIG1pbnV0ZXMsIGFuZCB0MSBzaG91bGQgYmUgc21hbGxlci4KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDEsIDEyLCAzMSwgMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMiwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKworICAgICAgICAjIEJhY2sgdG8gdGhlIG9yaWdpbmFsIHQxLCBidXQgbWFrZSBzZWNvbmRzIHJlc29sdmUgaXQuCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDEsICIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZD0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPiB0MikKKworICAgICAgICAjIExpa2V3aXNlLCBidXQgbWFrZSBtaWNyb3NlY29uZHMgcmVzb2x2ZSBpdC4KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDEsIDEyLCAzMSwgMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMSwgIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWljcm9zZWNvbmQ9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID4gdDIpCisKKyAgICAgICAgIyBNYWtlIHQyIG5haXZlIGFuZCBpdCBzaG91bGQgZmFpbC4KKyAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzLm1pbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQyKQorCisgICAgICAgICMgSXQncyBhbHNvIG5haXZlIGlmIGl0IGhhcyB0emluZm8gYnV0IHR6aW5mby51dGNvZmZzZXQoKSBpcyBOb25lLgorICAgICAgICBjbGFzcyBOYWl2ZSh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiBOb25lCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcyg1LCA2LCA3LCB0emluZm89TmFpdmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID09IHQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLCB0MikKKworICAgICAgICAjIE9UT0gsIGl0J3MgT0sgdG8gY29tcGFyZSB0d28gb2YgdGhlc2UgbWl4aW5nIHRoZSB0d28gd2F5cyBvZiBiZWluZworICAgICAgICAjIG5haXZlLgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoNSwgNiwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisKKyAgICAgICAgIyBUcnkgYSBib2d1cyB1Y3RvZmZzZXQuCisgICAgICAgIGNsYXNzIEJvZ3VzKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9MTQ0MCkgIyBvdXQgb2YgYm91bmRzCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygyLCAyLCAyLCB0emluZm89Qm9ndXMoKSkKKyAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKDIsIDIsIDIsIHR6aW5mbz1GaXhlZE9mZnNldCgwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogdDEgPT0gdDIpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgIyBUcnkgb25lIHdpdGhvdXQgYSB0emluZm8uCisgICAgICAgIGFyZ3MgPSA2LCA3LCAyMywgMjAsIDU5LCAxLCA2NCoqMgorICAgICAgICBvcmlnID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgICAgICMgVHJ5IG9uZSB3aXRoIGEgdHppbmZvLgorICAgICAgICB0aW5mbyA9IFBpY2tsYWJsZUZpeGVkT2Zmc2V0KC0zMDAsICdjb29raWUnKQorICAgICAgICBvcmlnID0gc2VsZi50aGVjbGFzcygqYXJncywgKip7J3R6aW5mbyc6IHRpbmZvfSkKKyAgICAgICAgZGVyaXZlZCA9IHNlbGYudGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPUZpeGVkT2Zmc2V0KDAsICIiLCAwKSkKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRlcml2ZWQudHppbmZvLCBQaWNrbGFibGVGaXhlZE9mZnNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTMwMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudHpuYW1lKCksICdjb29raWUnKQorCisgICAgZGVmIHRlc3RfZXh0cmVtZV9oYXNoZXMoc2VsZik6CisgICAgICAgICMgSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGhhc2ggdGhlc2UgdmlhIHN1YnRyYWN0aW5nIHRoZSBvZmZzZXQKKyAgICAgICAgIyB0aGVuIGhhc2hpbmcgYSBkYXRldGltZSBvYmplY3QsIE92ZXJmbG93RXJyb3IgcmVzdWx0cy4gIFRoZQorICAgICAgICAjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIGJsb3cgdXAgaGVyZS4KKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPUZpeGVkT2Zmc2V0KDE0MzksICIiKSkKKyAgICAgICAgaGFzaCh0KQorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxMiwgMzEsIDIzLCA1OSwgNTksIDk5OTk5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvPUZpeGVkT2Zmc2V0KC0xNDM5LCAiIikpCisgICAgICAgIGhhc2godCkKKworICAgICAgICAjIE9UT0gsIGFuIE9PQiBvZmZzZXQgc2hvdWxkIGJsb3cgdXAuCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDUsIDUsIDUsIHR6aW5mbz1GaXhlZE9mZnNldCgtMTQ0MCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBoYXNoLCB0KQorCisgICAgZGVmIHRlc3Rfem9uZXMoc2VsZik6CisgICAgICAgIGVzdCA9IEZpeGVkT2Zmc2V0KC0zMDAsICJFU1QiKQorICAgICAgICB1dGMgPSBGaXhlZE9mZnNldCgwLCAiVVRDIikKKyAgICAgICAgbWV0ID0gRml4ZWRPZmZzZXQoNjAsICJNRVQiKQorICAgICAgICB0MSA9IGRhdGV0aW1lKDIwMDIsIDMsIDE5LCAgNywgNDcsIHR6aW5mbz1lc3QpCisgICAgICAgIHQyID0gZGF0ZXRpbWUoMjAwMiwgMywgMTksIDEyLCA0NywgdHppbmZvPXV0YykKKyAgICAgICAgdDMgPSBkYXRldGltZSgyMDAyLCAzLCAxOSwgMTMsIDQ3LCB0emluZm89bWV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnR6aW5mbywgZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnR6aW5mbywgdXRjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnR6aW5mbywgbWV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMzAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTYwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS50em5hbWUoKSwgIkVTVCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudHpuYW1lKCksICJVVEMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnR6bmFtZSgpLCAiTUVUIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDIpLCBoYXNoKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLCB0MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDEpLCAiMjAwMi0wMy0xOSAwNzo0NzowMC0wNTowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQyKSwgIjIwMDItMDMtMTkgMTI6NDc6MDArMDA6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MyksICIyMDAyLTAzLTE5IDEzOjQ3OjAwKzAxOjAwIikKKyAgICAgICAgZCA9ICdkYXRldGltZS5kYXRldGltZSgyMDAyLCAzLCAxOSwgJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodDEpLCBkICsgIjcsIDQ3LCB0emluZm89ZXN0KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MiksIGQgKyAiMTIsIDQ3LCB0emluZm89dXRjKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MyksIGQgKyAiMTMsIDQ3LCB0emluZm89bWV0KSIpCisKKyAgICBkZWYgdGVzdF9jb21iaW5lKHNlbGYpOgorICAgICAgICBtZXQgPSBGaXhlZE9mZnNldCg2MCwgIk1FVCIpCisgICAgICAgIGQgPSBkYXRlKDIwMDIsIDMsIDQpCisgICAgICAgIHR6ID0gdGltZSgxOCwgNDUsIDMsIDEyMzQsIHR6aW5mbz1tZXQpCisgICAgICAgIGR0ID0gZGF0ZXRpbWUuY29tYmluZShkLCB0eikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZGF0ZXRpbWUoMjAwMiwgMywgNCwgMTgsIDQ1LCAzLCAxMjM0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbz1tZXQpKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdChzZWxmKToKKyAgICAgICAgbWV0ID0gRml4ZWRPZmZzZXQoNjAsICJNRVQiKQorICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgNCwgMTgsIDQ1LCAzLCAxMjM0LCB0emluZm89bWV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmRhdGUoKSwgZGF0ZSgyMDAyLCAzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC50aW1lKCksIHRpbWUoMTgsIDQ1LCAzLCAxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC50aW1ldHooKSwgdGltZSgxOCwgNDUsIDMsIDEyMzQsIHR6aW5mbz1tZXQpKQorCisgICAgZGVmIHRlc3RfdHpfYXdhcmVfYXJpdGhtZXRpYyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorCisgICAgICAgIG5vdyA9IHNlbGYudGhlY2xhc3Mubm93KCkKKyAgICAgICAgdHo1NSA9IEZpeGVkT2Zmc2V0KC0zMzAsICJ3ZXN0IDU6MzAiKQorICAgICAgICB0aW1lYXdhcmUgPSBub3cudGltZSgpLnJlcGxhY2UodHppbmZvPXR6NTUpCisgICAgICAgIG5vd2F3YXJlID0gc2VsZi50aGVjbGFzcy5jb21iaW5lKG5vdy5kYXRlKCksIHRpbWVhd2FyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vd2F3YXJlLnR6aW5mbyBpcyB0ejU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlLnRpbWV0eigpLCB0aW1lYXdhcmUpCisKKyAgICAgICAgIyBDYW4ndCBtaXggYXdhcmUgYW5kIG5vbi1hd2FyZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG5vdyAtIG5vd2F3YXJlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbm93YXdhcmUgLSBub3cpCisKKyAgICAgICAgIyBBbmQgYWRkaW5nIGRhdGV0aW1lJ3MgZG9lc24ndCBtYWtlIHNlbnNlLCBhd2FyZSBvciBub3QuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBub3cgKyBub3dhd2FyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG5vd2F3YXJlICsgbm93KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbm93YXdhcmUgKyBub3dhd2FyZSkKKworICAgICAgICAjIFN1YnRyYWN0aW5nIHNob3VsZCB5aWVsZCAwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vdyAtIG5vdywgdGltZWRlbHRhKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlIC0gbm93YXdhcmUsIHRpbWVkZWx0YSgwKSkKKworICAgICAgICAjIEFkZGluZyBhIGRlbHRhIHNob3VsZCBwcmVzZXJ2ZSB0emluZm8uCisgICAgICAgIGRlbHRhID0gdGltZWRlbHRhKHdlZWtzPTEsIG1pbnV0ZXM9MTIsIG1pY3Jvc2Vjb25kcz01Njc4KQorICAgICAgICBub3dhd2FyZXBsdXMgPSBub3dhd2FyZSArIGRlbHRhCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3dhd2FyZS50emluZm8gaXMgdHo1NSkKKyAgICAgICAgbm93YXdhcmVwbHVzMiA9IGRlbHRhICsgbm93YXdhcmUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vd2F3YXJlcGx1czIudHppbmZvIGlzIHR6NTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93YXdhcmVwbHVzLCBub3dhd2FyZXBsdXMyKQorCisgICAgICAgICMgdGhhdCAtIGRlbHRhIHNob3VsZCBiZSB3aGF0IHdlIHN0YXJ0ZWQgd2l0aCwgYW5kIHRoYXQgLSB3aGF0IHdlCisgICAgICAgICMgc3RhcnRlZCB3aXRoIHNob3VsZCBiZSBkZWx0YS4KKyAgICAgICAgZGlmZiA9IG5vd2F3YXJlcGx1cyAtIGRlbHRhCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWZmLnR6aW5mbyBpcyB0ejU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlLCBkaWZmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGVsdGEgLSBub3dhd2FyZXBsdXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93YXdhcmVwbHVzIC0gbm93YXdhcmUsIGRlbHRhKQorCisgICAgICAgICMgTWFrZSB1cCBhIHJhbmRvbSB0aW1lem9uZS4KKyAgICAgICAgdHpyID0gRml4ZWRPZmZzZXQocmFuZG9tLnJhbmRyYW5nZSgtMTQzOSwgMTQ0MCksICJyYW5kb210aW1lem9uZSIpCisgICAgICAgICMgQXR0YWNoIGl0IHRvIG5vd2F3YXJlcGx1cy4KKyAgICAgICAgbm93YXdhcmVwbHVzID0gbm93YXdhcmVwbHVzLnJlcGxhY2UodHppbmZvPXR6cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vd2F3YXJlcGx1cy50emluZm8gaXMgdHpyKQorICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlmZmVyZW5jZSB0YWtlcyB0aGUgdGltZXpvbmUgYWRqdXN0bWVudHMgaW50byBhY2NvdW50LgorICAgICAgICBnb3QgPSBub3dhd2FyZSAtIG5vd2F3YXJlcGx1cworICAgICAgICAjIEV4cGVjdGVkOiAgKG5vd2F3YXJlIGJhc2UgLSBub3dhd2FyZSBvZmZzZXQpIC0KKyAgICAgICAgIyAgICAgICAgICAgIChub3dhd2FyZXBsdXMgYmFzZSAtIG5vd2F3YXJlcGx1cyBvZmZzZXQpID0KKyAgICAgICAgIyAgICAgICAgICAgIChub3dhd2FyZSBiYXNlIC0gbm93YXdhcmVwbHVzIGJhc2UpICsKKyAgICAgICAgIyAgICAgICAgICAgIChub3dhd2FyZXBsdXMgb2Zmc2V0IC0gbm93YXdhcmUgb2Zmc2V0KSA9CisgICAgICAgICMgICAgICAgICAgICAtZGVsdGEgKyBub3dhd2FyZXBsdXMgb2Zmc2V0IC0gbm93YXdhcmUgb2Zmc2V0CisgICAgICAgIGV4cGVjdGVkID0gbm93YXdhcmVwbHVzLnV0Y29mZnNldCgpIC0gbm93YXdhcmUudXRjb2Zmc2V0KCkgLSBkZWx0YQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgIyBUcnkgbWF4IHBvc3NpYmxlIGRpZmZlcmVuY2UuCisgICAgICAgIG1pbiA9IHNlbGYudGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPUZpeGVkT2Zmc2V0KDE0MzksICJtaW4iKSkKKyAgICAgICAgbWF4ID0gc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxMiwgMzEsIDIzLCA1OSwgNTksIDk5OTk5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm89Rml4ZWRPZmZzZXQoLTE0MzksICJtYXgiKSkKKyAgICAgICAgbWF4ZGlmZiA9IG1heCAtIG1pbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heGRpZmYsIHNlbGYudGhlY2xhc3MubWF4IC0gc2VsZi50aGVjbGFzcy5taW4gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YShtaW51dGVzPTIqMTQzOSkpCisKKyAgICBkZWYgdGVzdF90emluZm9fbm93KHNlbGYpOgorICAgICAgICBtZXRoID0gc2VsZi50aGVjbGFzcy5ub3cKKyAgICAgICAgIyBFbnN1cmUgaXQgZG9lc24ndCByZXF1aXJlIHR6aW5mbyAoaS5lLiwgdGhhdCB0aGlzIGRvZXNuJ3QgYmxvdyB1cCkuCisgICAgICAgIGJhc2UgPSBtZXRoKCkKKyAgICAgICAgIyBUcnkgd2l0aCBhbmQgd2l0aG91dCBuYW1pbmcgdGhlIGtleXdvcmQuCisgICAgICAgIG9mZjQyID0gRml4ZWRPZmZzZXQoNDIsICI0MiIpCisgICAgICAgIGFub3RoZXIgPSBtZXRoKG9mZjQyKQorICAgICAgICBhZ2FpbiA9IG1ldGgodHo9b2ZmNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbm90aGVyLnR6aW5mbyBpcyBhZ2Fpbi50emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5vdGhlci51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NDIpKQorICAgICAgICAjIEJhZCBhcmd1bWVudCB3aXRoIGFuZCB3L28gbmFtaW5nIHRoZSBrZXl3b3JkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIDE2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHR6aW5mbz0xNikKKyAgICAgICAgIyBCYWQga2V5d29yZCBuYW1lLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHRpbmZvPW9mZjQyKQorICAgICAgICAjIFRvbyBtYW55IGFyZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgb2ZmNDIsIG9mZjQyKQorCisgICAgICAgICMgV2UgZG9uJ3Qga25vdyB3aGljaCB0aW1lIHpvbmUgd2UncmUgaW4sIGFuZCBkb24ndCBoYXZlIGEgdHppbmZvCisgICAgICAgICMgY2xhc3MgdG8gcmVwcmVzZW50IGl0LCBzbyBzZWVpbmcgd2hldGhlciBhIHR6IGFyZ3VtZW50IGFjdHVhbGx5CisgICAgICAgICMgZG9lcyBhIGNvbnZlcnNpb24gaXMgdHJpY2t5LgorICAgICAgICB3ZWlyZHR6ID0gRml4ZWRPZmZzZXQodGltZWRlbHRhKGhvdXJzPTE1LCBtaW51dGVzPTU4KSwgIndlaXJkdHoiLCAwKQorICAgICAgICB1dGMgPSBGaXhlZE9mZnNldCgwLCAidXRjIiwgMCkKKyAgICAgICAgZm9yIGR1bW15IGluIHJhbmdlKDMpOgorICAgICAgICAgICAgbm93ID0gZGF0ZXRpbWUubm93KHdlaXJkdHopCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm93LnR6aW5mbyBpcyB3ZWlyZHR6KQorICAgICAgICAgICAgdXRjbm93ID0gZGF0ZXRpbWUudXRjbm93KCkucmVwbGFjZSh0emluZm89dXRjKQorICAgICAgICAgICAgbm93MiA9IHV0Y25vdy5hc3RpbWV6b25lKHdlaXJkdHopCisgICAgICAgICAgICBpZiBhYnMobm93IC0gbm93MikgPCB0aW1lZGVsdGEoc2Vjb25kcz0zMCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICMgRWxzZSB0aGUgY29kZSBpcyBicm9rZW4sIG9yIG1vcmUgdGhhbiAzMCBzZWNvbmRzIHBhc3NlZCBiZXR3ZWVuCisgICAgICAgICAgICAjIGNhbGxzOyBhc3N1bWluZyB0aGUgbGF0dGVyLCBqdXN0IHRyeSBhZ2Fpbi4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhyZWUgc3RyaWtlcyBhbmQgd2UncmUgb3V0LgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ1dGNub3coKSwgbm93KHR6KSwgb3IgYXN0aW1lem9uZSgpIG1heSBiZSBicm9rZW4iKQorCisgICAgZGVmIHRlc3RfdHppbmZvX2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIG1ldGggPSBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAKKyAgICAgICAgdHMgPSB0aW1lLnRpbWUoKQorICAgICAgICAjIEVuc3VyZSBpdCBkb2Vzbid0IHJlcXVpcmUgdHppbmZvIChpLmUuLCB0aGF0IHRoaXMgZG9lc24ndCBibG93IHVwKS4KKyAgICAgICAgYmFzZSA9IG1ldGgodHMpCisgICAgICAgICMgVHJ5IHdpdGggYW5kIHdpdGhvdXQgbmFtaW5nIHRoZSBrZXl3b3JkLgorICAgICAgICBvZmY0MiA9IEZpeGVkT2Zmc2V0KDQyLCAiNDIiKQorICAgICAgICBhbm90aGVyID0gbWV0aCh0cywgb2ZmNDIpCisgICAgICAgIGFnYWluID0gbWV0aCh0cywgdHo9b2ZmNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbm90aGVyLnR6aW5mbyBpcyBhZ2Fpbi50emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5vdGhlci51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NDIpKQorICAgICAgICAjIEJhZCBhcmd1bWVudCB3aXRoIGFuZCB3L28gbmFtaW5nIHRoZSBrZXl3b3JkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHRzLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0cywgdHppbmZvPTE2KQorICAgICAgICAjIEJhZCBrZXl3b3JkIG5hbWUuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIHRpbmZvPW9mZjQyKQorICAgICAgICAjIFRvbyBtYW55IGFyZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIG9mZjQyLCBvZmY0MikKKyAgICAgICAgIyBUb28gZmV3IGFyZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCkKKworICAgICAgICAjIFRyeSB0byBtYWtlIHN1cmUgdHo9IGFjdHVhbGx5IGRvZXMgc29tZSBjb252ZXJzaW9uLgorICAgICAgICB0aW1lc3RhbXAgPSAxMDAwMDAwMDAwCisgICAgICAgIHV0Y2RhdGV0aW1lID0gZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCh0aW1lc3RhbXApCisgICAgICAgICMgSW4gUE9TSVggKGVwb2NoIDE5NzApLCB0aGF0J3MgMjAwMS0wOS0wOSAwMTo0Njo0MCBVVEMsIGdpdmUgb3IgdGFrZS4KKyAgICAgICAgIyBCdXQgb24gc29tZSBmbGF2b3Igb2YgTWFjLCBpdCdzIG5vd2hlcmUgbmVhciB0aGF0LiAgU28gd2UgY2FuJ3QgaGF2ZQorICAgICAgICAjIGFueSBpZGVhIGhlcmUgd2hhdCB0aW1lIHRoYXQgYWN0dWFsbHkgaXMsIHdlIGNhbiBvbmx5IHRlc3QgdGhhdAorICAgICAgICAjIHJlbGF0aXZlIGNoYW5nZXMgbWF0Y2guCisgICAgICAgIHV0Y29mZnNldCA9IHRpbWVkZWx0YShob3Vycz0tMTUsIG1pbnV0ZXM9MzkpICMgYXJiaXRyYXJ5LCBidXQgbm90IHplcm8KKyAgICAgICAgdHogPSBGaXhlZE9mZnNldCh1dGNvZmZzZXQsICJ0eiIsIDApCisgICAgICAgIGV4cGVjdGVkID0gdXRjZGF0ZXRpbWUgKyB1dGNvZmZzZXQKKyAgICAgICAgZ290ID0gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh0aW1lc3RhbXAsIHR6KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QucmVwbGFjZSh0emluZm89Tm9uZSkpCisKKyAgICBkZWYgdGVzdF90emluZm9fdXRjbm93KHNlbGYpOgorICAgICAgICBtZXRoID0gc2VsZi50aGVjbGFzcy51dGNub3cKKyAgICAgICAgIyBFbnN1cmUgaXQgZG9lc24ndCByZXF1aXJlIHR6aW5mbyAoaS5lLiwgdGhhdCB0aGlzIGRvZXNuJ3QgYmxvdyB1cCkuCisgICAgICAgIGJhc2UgPSBtZXRoKCkKKyAgICAgICAgIyBUcnkgd2l0aCBhbmQgd2l0aG91dCBuYW1pbmcgdGhlIGtleXdvcmQ7IGZvciB3aGF0ZXZlciByZWFzb24sCisgICAgICAgICMgdXRjbm93KCkgZG9lc24ndCBhY2NlcHQgYSB0emluZm8gYXJndW1lbnQuCisgICAgICAgIG9mZjQyID0gRml4ZWRPZmZzZXQoNDIsICI0MiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgb2ZmNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHppbmZvPW9mZjQyKQorCisgICAgZGVmIHRlc3RfdHppbmZvX3V0Y2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIG1ldGggPSBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXAKKyAgICAgICAgdHMgPSB0aW1lLnRpbWUoKQorICAgICAgICAjIEVuc3VyZSBpdCBkb2Vzbid0IHJlcXVpcmUgdHppbmZvIChpLmUuLCB0aGF0IHRoaXMgZG9lc24ndCBibG93IHVwKS4KKyAgICAgICAgYmFzZSA9IG1ldGgodHMpCisgICAgICAgICMgVHJ5IHdpdGggYW5kIHdpdGhvdXQgbmFtaW5nIHRoZSBrZXl3b3JkOyBmb3Igd2hhdGV2ZXIgcmVhc29uLAorICAgICAgICAjIHV0Y2Zyb210aW1lc3RhbXAoKSBkb2Vzbid0IGFjY2VwdCBhIHR6aW5mbyBhcmd1bWVudC4KKyAgICAgICAgb2ZmNDIgPSBGaXhlZE9mZnNldCg0MiwgIjQyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0cywgb2ZmNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIHR6aW5mbz1vZmY0MikKKworICAgIGRlZiB0ZXN0X3R6aW5mb190aW1ldHVwbGUoc2VsZik6CisgICAgICAgICMgVGVzdERhdGVUaW1lIHRlc3RlZCBtb3N0IG9mIHRoaXMuICBkYXRldGltZSBhZGRzIGEgdHdpc3QgdG8gdGhlCisgICAgICAgICMgRFNUIGZsYWcuCisgICAgICAgIGNsYXNzIERTVCh0emluZm8pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRzdHZhbHVlKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRzdHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgICAgICAgICBkc3R2YWx1ZSA9IHRpbWVkZWx0YShtaW51dGVzPWRzdHZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYuZHN0dmFsdWUgPSBkc3R2YWx1ZQorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZHN0dmFsdWUKKworICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIGZvciBkc3R2YWx1ZSwgZmxhZyBpbiAoLTMzLCAxKSwgKDMzLCAxKSwgKDAsIDApLCAoTm9uZSwgLTEpOgorICAgICAgICAgICAgZCA9IGNscygxLCAxLCAxLCAxMCwgMjAsIDMwLCA0MCwgdHppbmZvPURTVChkc3R2YWx1ZSkpCisgICAgICAgICAgICB0ID0gZC50aW1ldHVwbGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0LnRtX3llYXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHQudG1fbW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0LnRtX21kYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCB0LnRtX2hvdXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIwLCB0LnRtX21pbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMzAsIHQudG1fc2VjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCB0LnRtX3dkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHQudG1feWRheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZywgdC50bV9pc2RzdCkKKworICAgICAgICAjIGRzdCgpIHJldHVybnMgd3JvbmcgdHlwZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbHMoMSwgMSwgMSwgdHppbmZvPURTVCgieCIpKS50aW1ldHVwbGUpCisKKyAgICAgICAgIyBkc3QoKSBhdCB0aGUgZWRnZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMoMSwxLDEsIHR6aW5mbz1EU1QoMTQzOSkpLnRpbWV0dXBsZSgpLnRtX2lzZHN0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscygxLDEsMSwgdHppbmZvPURTVCgtMTQzOSkpLnRpbWV0dXBsZSgpLnRtX2lzZHN0LCAxKQorCisgICAgICAgICMgZHN0KCkgb3V0IG9mIHJhbmdlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjbHMoMSwxLDEsIHR6aW5mbz1EU1QoMTQ0MCkpLnRpbWV0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xzKDEsMSwxLCB0emluZm89RFNUKC0xNDQwKSkudGltZXR1cGxlKQorCisgICAgZGVmIHRlc3RfdXRjdGltZXR1cGxlKHNlbGYpOgorICAgICAgICBjbGFzcyBEU1QodHppbmZvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkc3R2YWx1ZSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkc3R2YWx1ZSwgaW50KToKKyAgICAgICAgICAgICAgICAgICAgZHN0dmFsdWUgPSB0aW1lZGVsdGEobWludXRlcz1kc3R2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmRzdHZhbHVlID0gZHN0dmFsdWUKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRzdHZhbHVlCisKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICAjIFRoaXMgY2FuJ3Qgd29yazogIERTVCBkaWRuJ3QgaW1wbGVtZW50IHV0Y29mZnNldC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzKDEsIDEsIDEsIHR6aW5mbz1EU1QoMCkpLnV0Y29mZnNldCkKKworICAgICAgICBjbGFzcyBVT0ZTKERTVCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdW9mcywgZG9mcz1Ob25lKToKKyAgICAgICAgICAgICAgICBEU1QuX19pbml0X18oc2VsZiwgZG9mcykKKyAgICAgICAgICAgICAgICBzZWxmLnVvZnMgPSB0aW1lZGVsdGEobWludXRlcz11b2ZzKQorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudW9mcworCisgICAgICAgICMgRW5zdXJlIHRtX2lzZHN0IGlzIDAgcmVnYXJkbGVzcyBvZiB3aGF0IGRzdCgpIHNheXM6ICBEU1QgaXMgbmV2ZXIKKyAgICAgICAgIyBpbiBlZmZlY3QgZm9yIGEgVVRDIHRpbWUuCisgICAgICAgIGZvciBkc3R2YWx1ZSBpbiAtMzMsIDMzLCAwLCBOb25lOgorICAgICAgICAgICAgZCA9IGNscygxLCAyLCAzLCAxMCwgMjAsIDMwLCA0MCwgdHppbmZvPVVPRlMoLTUzLCBkc3R2YWx1ZSkpCisgICAgICAgICAgICB0ID0gZC51dGN0aW1ldHVwbGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnllYXIsIHQudG1feWVhcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5tb250aCwgdC50bV9tb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGF5LCB0LnRtX21kYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDExLCB0LnRtX2hvdXIpICMgMjBtbSArIDUzbW0gPSAxaG4gKyAxM21tCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEzLCB0LnRtX21pbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5zZWNvbmQsIHQudG1fc2VjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLndlZWtkYXkoKSwgdC50bV93ZGF5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnRvb3JkaW5hbCgpIC0gZGF0ZSgxLCAxLCAxKS50b29yZGluYWwoKSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudG1feWRheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdC50bV9pc2RzdCkKKworICAgICAgICAjIEF0IHRoZSBlZGdlcywgVVRDIGFkanVzdG1lbnQgY2FuIG5vcm1hbGl6ZSBpbnRvIHllYXJzIG91dC1vZi1yYW5nZQorICAgICAgICAjIGZvciBhIGRhdGV0aW1lIG9iamVjdC4gIEVuc3VyZSB0aGF0IGEgY29ycmVjdCB0aW1ldHVwbGUgaXMKKyAgICAgICAgIyBjcmVhdGVkIGFueXdheS4KKyAgICAgICAgdGlueSA9IGNscyhNSU5ZRUFSLCAxLCAxLCAwLCAwLCAzNywgdHppbmZvPVVPRlMoMTQzOSkpCisgICAgICAgICMgVGhhdCBnb2VzIGJhY2sgMSBtaW51dGUgbGVzcyB0aGFuIGEgZnVsbCBkYXkuCisgICAgICAgIHQgPSB0aW55LnV0Y3RpbWV0dXBsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV95ZWFyLCBNSU5ZRUFSLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9tb24sIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbWRheSwgMzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9ob3VyLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbWluLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fc2VjLCAzNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3lkYXksIDM2NikgICAgIyAieWVhciAwIiBpcyBhIGxlYXAgeWVhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1faXNkc3QsIDApCisKKyAgICAgICAgaHVnZSA9IGNscyhNQVhZRUFSLCAxMiwgMzEsIDIzLCA1OSwgMzcsIDk5OTk5OSwgdHppbmZvPVVPRlMoLTE0MzkpKQorICAgICAgICAjIFRoYXQgZ29lcyBmb3J3YXJkIDEgbWludXRlIGxlc3MgdGhhbiBhIGZ1bGwgZGF5LgorICAgICAgICB0ID0gaHVnZS51dGN0aW1ldHVwbGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1feWVhciwgTUFYWUVBUisxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbW9uLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbWRheSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX2hvdXIsIDIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbWluLCA1OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3NlYywgMzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV95ZGF5LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1faXNkc3QsIDApCisKKyAgICBkZWYgdGVzdF90emluZm9faXNvZm9ybWF0KHNlbGYpOgorICAgICAgICB6ZXJvID0gRml4ZWRPZmZzZXQoMCwgIiswMDowMCIpCisgICAgICAgIHBsdXMgPSBGaXhlZE9mZnNldCgyMjAsICIrMDM6NDAiKQorICAgICAgICBtaW51cyA9IEZpeGVkT2Zmc2V0KC0yMzEsICItMDM6NTEiKQorICAgICAgICB1bmtub3duID0gRml4ZWRPZmZzZXQoTm9uZSwgIiIpCisKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBkYXRlc3RyID0gJzAwMDEtMDItMDMnCisgICAgICAgIGZvciBvZnMgaW4gTm9uZSwgemVybywgcGx1cywgbWludXMsIHVua25vd246CisgICAgICAgICAgICBmb3IgdXMgaW4gMCwgOTg3MDAxOgorICAgICAgICAgICAgICAgIGQgPSBjbHMoMSwgMiwgMywgNCwgNSwgNTksIHVzLCB0emluZm89b2ZzKQorICAgICAgICAgICAgICAgIHRpbWVzdHIgPSAnMDQ6MDU6NTknICsgKHVzIGFuZCAnLjk4NzAwMScgb3IgJycpCisgICAgICAgICAgICAgICAgb2Zzc3RyID0gb2ZzIGlzIG5vdCBOb25lIGFuZCBkLnR6bmFtZSgpIG9yICcnCisgICAgICAgICAgICAgICAgdGFpbHN0ciA9IHRpbWVzdHIgKyBvZnNzdHIKKyAgICAgICAgICAgICAgICBpc28gPSBkLmlzb2Zvcm1hdCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc28sIGRhdGVzdHIgKyAnVCcgKyB0YWlsc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNvLCBkLmlzb2Zvcm1hdCgnVCcpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29mb3JtYXQoJ2snKSwgZGF0ZXN0ciArICdrJyArIHRhaWxzdHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksIGRhdGVzdHIgKyAnICcgKyB0YWlsc3RyKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICB6MTAwID0gRml4ZWRPZmZzZXQoMTAwLCAiKzEwMCIpCisgICAgICAgIHptMjAwID0gRml4ZWRPZmZzZXQodGltZWRlbHRhKG1pbnV0ZXM9LTIwMCksICItMjAwIikKKyAgICAgICAgYXJncyA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCB6MTAwXQorICAgICAgICBiYXNlID0gY2xzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGJhc2UucmVwbGFjZSgpKQorCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBuYW1lLCBuZXd2YWwgaW4gKCgieWVhciIsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1vbnRoIiwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGF5IiwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaG91ciIsIDUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pbnV0ZSIsIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInNlY29uZCIsIDcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pY3Jvc2Vjb25kIiwgOCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidHppbmZvIiwgem0yMDApKToKKyAgICAgICAgICAgIG5ld2FyZ3MgPSBhcmdzWzpdCisgICAgICAgICAgICBuZXdhcmdzW2ldID0gbmV3dmFsCisgICAgICAgICAgICBleHBlY3RlZCA9IGNscygqbmV3YXJncykKKyAgICAgICAgICAgIGdvdCA9IGJhc2UucmVwbGFjZSgqKntuYW1lOiBuZXd2YWx9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyBFbnN1cmUgd2UgY2FuIGdldCByaWQgb2YgYSB0emluZm8uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS50em5hbWUoKSwgIisxMDAiKQorICAgICAgICBiYXNlMiA9IGJhc2UucmVwbGFjZSh0emluZm89Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UyLnR6aW5mbyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZTIudHpuYW1lKCkgaXMgTm9uZSkKKworICAgICAgICAjIEVuc3VyZSB3ZSBjYW4gYWRkIG9uZS4KKyAgICAgICAgYmFzZTMgPSBiYXNlMi5yZXBsYWNlKHR6aW5mbz16MTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGJhc2UzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZS50emluZm8gaXMgYmFzZTMudHppbmZvKQorCisgICAgICAgICMgT3V0IG9mIGJvdW5kcy4KKyAgICAgICAgYmFzZSA9IGNscygyMDAwLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCB5ZWFyPTIwMDEpCisKKyAgICBkZWYgdGVzdF9tb3JlX2FzdGltZXpvbmUoc2VsZik6CisgICAgICAgICMgVGhlIGluaGVyaXRlZCB0ZXN0X2FzdGltZXpvbmUgY292ZXJlZCBzb21lIHRyaXZpYWwgYW5kIGVycm9yIGNhc2VzLgorICAgICAgICBmbm9uZSA9IEZpeGVkT2Zmc2V0KE5vbmUsICJOb25lIikKKyAgICAgICAgZjQ0bSA9IEZpeGVkT2Zmc2V0KDQ0LCAiNDQiKQorICAgICAgICBmbTVoID0gRml4ZWRPZmZzZXQoLXRpbWVkZWx0YShob3Vycz01KSwgIm0zMDAiKQorCisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcy5ub3codHo9ZjQ0bSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0LnR6aW5mbyBpcyBmNDRtKQorICAgICAgICAjIFJlcGxhY2luZyB3aXRoIGRlZ2VuZXJhdGUgdHppbmZvIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGR0LmFzdGltZXpvbmUsIGZub25lKQorICAgICAgICAjIERpdHRvIHdpdGggTm9uZSB0ei4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkdC5hc3RpbWV6b25lLCBOb25lKQorICAgICAgICAjIFJlcGxhY2luZyB3aXRoIHNhbWUgdHppbmZvIG1ha2VzIG5vIGNoYW5nZS4KKyAgICAgICAgeCA9IGR0LmFzdGltZXpvbmUoZHQudHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC50emluZm8gaXMgZjQ0bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmRhdGUoKSwgZHQuZGF0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudGltZSgpLCBkdC50aW1lKCkpCisKKyAgICAgICAgIyBSZXBsYWNpbmcgd2l0aCBkaWZmZXJlbnQgdHppbmZvIGRvZXMgYWRqdXN0LgorICAgICAgICBnb3QgPSBkdC5hc3RpbWV6b25lKGZtNWgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnb3QudHppbmZvIGlzIGZtNWgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LnV0Y29mZnNldCgpLCB0aW1lZGVsdGEoaG91cnM9LTUpKQorICAgICAgICBleHBlY3RlZCA9IGR0IC0gZHQudXRjb2Zmc2V0KCkgICMgaW4gZWZmZWN0LCBjb252ZXJ0IHRvIFVUQworICAgICAgICBleHBlY3RlZCArPSBmbTVoLnV0Y29mZnNldChkdCkgICMgYW5kIGZyb20gdGhlcmUgdG8gbG9jYWwgdGltZQorICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnJlcGxhY2UodHppbmZvPWZtNWgpICMgYW5kIGF0dGFjaCBuZXcgdHppbmZvCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LmRhdGUoKSwgZXhwZWN0ZWQuZGF0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC50aW1lKCksIGV4cGVjdGVkLnRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QudGltZXR6KCksIGV4cGVjdGVkLnRpbWV0eigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290LnR6aW5mbyBpcyBleHBlY3RlZC50emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2F3YXJlX3N1YnRyYWN0KHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB1dGNvZmZzZXQoKSBpcyBpZ25vcmVkIHdoZW4gdGhlIG9wZXJhbmRzIGhhdmUgdGhlCisgICAgICAgICMgc2FtZSB0emluZm8gbWVtYmVyLgorICAgICAgICBjbGFzcyBPcGVyYW5kRGVwZW5kZW50T2Zmc2V0KHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIHQpOgorICAgICAgICAgICAgICAgIGlmIHQubWludXRlIDwgMTA6CisgICAgICAgICAgICAgICAgICAgICMgZDAgYW5kIGQxIGVxdWFsIGFmdGVyIGFkanVzdG1lbnQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPXQubWludXRlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgZDIgb2ZmIGluIHRoZSB3ZWVkcworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9NTkpCisKKyAgICAgICAgYmFzZSA9IGNscyg4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCisgICAgICAgIGQwID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0zKQorICAgICAgICBkMSA9IGJhc2UucmVwbGFjZShtaW51dGU9OSkKKyAgICAgICAgZDIgPSBiYXNlLnJlcGxhY2UobWludXRlPTExKQorICAgICAgICBmb3IgeCBpbiBkMCwgZDEsIGQyOgorICAgICAgICAgICAgZm9yIHkgaW4gZDAsIGQxLCBkMjoKKyAgICAgICAgICAgICAgICBnb3QgPSB4IC0geQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdGltZWRlbHRhKG1pbnV0ZXM9eC5taW51dGUgLSB5Lm1pbnV0ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgIyBPVE9ILCBpZiB0aGUgdHppbmZvIG1lbWJlcnMgYXJlIGRpc3RpbmN0LCB1dGNvZmZzZXRzIGFyZW4ndAorICAgICAgICAjIGlnbm9yZWQuCisgICAgICAgIGJhc2UgPSBjbHMoOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0KQorICAgICAgICBkMCA9IGJhc2UucmVwbGFjZShtaW51dGU9MywgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKKyAgICAgICAgZDEgPSBiYXNlLnJlcGxhY2UobWludXRlPTksIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCisgICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSwgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKKyAgICAgICAgZm9yIHggaW4gZDAsIGQxLCBkMjoKKyAgICAgICAgICAgIGZvciB5IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICAgICAgZ290ID0geCAtIHkKKyAgICAgICAgICAgICAgICBpZiAoeCBpcyBkMCBvciB4IGlzIGQxKSBhbmQgKHkgaXMgZDAgb3IgeSBpcyBkMSk6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdGltZWRlbHRhKDApCisgICAgICAgICAgICAgICAgZWxpZiB4IGlzIHkgaXMgZDI6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdGltZWRlbHRhKDApCisgICAgICAgICAgICAgICAgZWxpZiB4IGlzIGQyOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YShtaW51dGVzPSgxMS01OSktMCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgeSBpcyBkMgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YShtaW51dGVzPTAtKDExLTU5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9taXhlZF9jb21wYXJlKHNlbGYpOgorICAgICAgICB0MSA9IGRhdGV0aW1lKDEsIDIsIDMsIDQsIDUsIDYsIDcpCisgICAgICAgIHQyID0gZGF0ZXRpbWUoMSwgMiwgMywgNCwgNSwgNiwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89Rml4ZWRPZmZzZXQoTm9uZSwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1GaXhlZE9mZnNldCgwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA9PSB0MikKKworICAgICAgICAjIEluIGRhdGV0aW1lIHcvIGlkZW50aWNhbCB0emluZm8gb2JqZWN0cywgdXRjb2Zmc2V0IGlzIGlnbm9yZWQuCisgICAgICAgIGNsYXNzIFZhcmllcyh0emluZm8pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9MjIpCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIHQpOgorICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IHRpbWVkZWx0YShtaW51dGVzPTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYub2Zmc2V0CisKKyAgICAgICAgdiA9IFZhcmllcygpCisgICAgICAgIHQxID0gdDIucmVwbGFjZSh0emluZm89dikKKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz12KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0yMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTI0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisKKyAgICAgICAgIyBCdXQgaWYgdGhleSdyZSBub3QgaWRlbnRpY2FsLCBpdCBpc24ndCBpZ25vcmVkLgorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPVZhcmllcygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikgICMgdDEncyBvZmZzZXQgY291bnRlciBzdGlsbCBnb2luZyB1cAorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfZGF0ZXRpbWV0eihzZWxmKToKKworICAgICAgICBjbGFzcyBDKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgdGhlQW5zd2VyID0gNDIKKworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd3MpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBrd3MuY29weSgpCisgICAgICAgICAgICAgICAgZXh0cmEgPSB0ZW1wLnBvcCgnZXh0cmEnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYudGhlY2xhc3MuX19uZXdfXyhjbHMsICphcmdzLCAqKnRlbXApCisgICAgICAgICAgICAgICAgcmVzdWx0LmV4dHJhID0gZXh0cmEKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgIGRlZiBuZXdtZXRoKHNlbGYsIHN0YXJ0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQgKyBzZWxmLmhvdXIgKyBzZWxmLnllYXIKKworICAgICAgICBhcmdzID0gMjAwMiwgMTIsIDMxLCA0LCA1LCA2LCA1MDAsIEZpeGVkT2Zmc2V0KC0zMDAsICJFU1QiLCAxKQorCisgICAgICAgIGR0MSA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIGR0MiA9IEMoKmFyZ3MsICoqeydleHRyYSc6IDd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLl9fY2xhc3NfXywgQykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIudGhlQW5zd2VyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIuZXh0cmEsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQxLnV0Y29mZnNldCgpLCBkdDIudXRjb2Zmc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLm5ld21ldGgoLTcpLCBkdDEuaG91ciArIGR0MS55ZWFyIC0gNykKKworIyBQYWluIHRvIHNldCB1cCBEU1QtYXdhcmUgdHppbmZvIGNsYXNzZXMuCisKK2RlZiBmaXJzdF9zdW5kYXlfb25fb3JfYWZ0ZXIoZHQpOgorICAgIGRheXNfdG9fZ28gPSA2IC0gZHQud2Vla2RheSgpCisgICAgaWYgZGF5c190b19nbzoKKyAgICAgICAgZHQgKz0gdGltZWRlbHRhKGRheXNfdG9fZ28pCisgICAgcmV0dXJuIGR0CisKK1pFUk8gPSB0aW1lZGVsdGEoMCkKK0hPVVIgPSB0aW1lZGVsdGEoaG91cnM9MSkKK0RBWSA9IHRpbWVkZWx0YShkYXlzPTEpCisjIEluIHRoZSBVUywgRFNUIHN0YXJ0cyBhdCAyYW0gKHN0YW5kYXJkIHRpbWUpIG9uIHRoZSBmaXJzdCBTdW5kYXkgaW4gQXByaWwuCitEU1RTVEFSVCA9IGRhdGV0aW1lKDEsIDQsIDEsIDIpCisjIGFuZCBlbmRzIGF0IDJhbSAoRFNUIHRpbWU7IDFhbSBzdGFuZGFyZCB0aW1lKSBvbiB0aGUgbGFzdCBTdW5kYXkgb2YgT2N0LAorIyB3aGljaCBpcyB0aGUgZmlyc3QgU3VuZGF5IG9uIG9yIGFmdGVyIE9jdCAyNS4gIEJlY2F1c2Ugd2UgdmlldyAxOk1NIGFzCisjIGJlaW5nIHN0YW5kYXJkIHRpbWUgb24gdGhhdCBkYXksIHRoZXJlIGlzIG5vIHNwZWxsaW5nIGluIGxvY2FsIHRpbWUgb2YKKyMgdGhlIGxhc3QgaG91ciBvZiBEU1QgKHRoYXQncyAxOk1NIERTVCwgYnV0IDE6TU0gaXMgdGFrZW4gYXMgc3RhbmRhcmQgdGltZSkuCitEU1RFTkQgPSBkYXRldGltZSgxLCAxMCwgMjUsIDEpCisKK2NsYXNzIFVTVGltZVpvbmUodHppbmZvKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3VycywgcmVwcm5hbWUsIHN0ZG5hbWUsIGRzdG5hbWUpOgorICAgICAgICBzZWxmLnN0ZG9mZnNldCA9IHRpbWVkZWx0YShob3Vycz1ob3VycykKKyAgICAgICAgc2VsZi5yZXBybmFtZSA9IHJlcHJuYW1lCisgICAgICAgIHNlbGYuc3RkbmFtZSA9IHN0ZG5hbWUKKyAgICAgICAgc2VsZi5kc3RuYW1lID0gZHN0bmFtZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yZXBybmFtZQorCisgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6CisgICAgICAgIGlmIHNlbGYuZHN0KGR0KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRzdG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN0ZG5hbWUKKworICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOgorICAgICAgICByZXR1cm4gc2VsZi5zdGRvZmZzZXQgKyBzZWxmLmRzdChkdCkKKworICAgIGRlZiBkc3Qoc2VsZiwgZHQpOgorICAgICAgICBpZiBkdCBpcyBOb25lIG9yIGR0LnR6aW5mbyBpcyBOb25lOgorICAgICAgICAgICAgIyBBbiBleGNlcHRpb24gaW5zdGVhZCBtYXkgYmUgc2Vuc2libGUgaGVyZSwgaW4gb25lIG9yIG1vcmUgb2YKKyAgICAgICAgICAgICMgdGhlIGNhc2VzLgorICAgICAgICAgICAgcmV0dXJuIFpFUk8KKyAgICAgICAgYXNzZXJ0IGR0LnR6aW5mbyBpcyBzZWxmCisKKyAgICAgICAgIyBGaW5kIGZpcnN0IFN1bmRheSBpbiBBcHJpbC4KKyAgICAgICAgc3RhcnQgPSBmaXJzdF9zdW5kYXlfb25fb3JfYWZ0ZXIoRFNUU1RBUlQucmVwbGFjZSh5ZWFyPWR0LnllYXIpKQorICAgICAgICBhc3NlcnQgc3RhcnQud2Vla2RheSgpID09IDYgYW5kIHN0YXJ0Lm1vbnRoID09IDQgYW5kIHN0YXJ0LmRheSA8PSA3CisKKyAgICAgICAgIyBGaW5kIGxhc3QgU3VuZGF5IGluIE9jdG9iZXIuCisgICAgICAgIGVuZCA9IGZpcnN0X3N1bmRheV9vbl9vcl9hZnRlcihEU1RFTkQucmVwbGFjZSh5ZWFyPWR0LnllYXIpKQorICAgICAgICBhc3NlcnQgZW5kLndlZWtkYXkoKSA9PSA2IGFuZCBlbmQubW9udGggPT0gMTAgYW5kIGVuZC5kYXkgPj0gMjUKKworICAgICAgICAjIENhbid0IGNvbXBhcmUgbmFpdmUgdG8gYXdhcmUgb2JqZWN0cywgc28gc3RyaXAgdGhlIHRpbWV6b25lIGZyb20KKyAgICAgICAgIyBkdCBmaXJzdC4KKyAgICAgICAgaWYgc3RhcnQgPD0gZHQucmVwbGFjZSh0emluZm89Tm9uZSkgPCBlbmQ6CisgICAgICAgICAgICByZXR1cm4gSE9VUgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFpFUk8KKworRWFzdGVybiAgPSBVU1RpbWVab25lKC01LCAiRWFzdGVybiIsICAiRVNUIiwgIkVEVCIpCitDZW50cmFsICA9IFVTVGltZVpvbmUoLTYsICJDZW50cmFsIiwgICJDU1QiLCAiQ0RUIikKK01vdW50YWluID0gVVNUaW1lWm9uZSgtNywgIk1vdW50YWluIiwgIk1TVCIsICJNRFQiKQorUGFjaWZpYyAgPSBVU1RpbWVab25lKC04LCAiUGFjaWZpYyIsICAiUFNUIiwgIlBEVCIpCit1dGNfcmVhbCA9IEZpeGVkT2Zmc2V0KDAsICJVVEMiLCAwKQorIyBGb3IgYmV0dGVyIHRlc3QgY292ZXJhZ2UsIHdlIHdhbnQgYW5vdGhlciBmbGF2b3Igb2YgVVRDIHRoYXQncyB3ZXN0IG9mCisjIHRoZSBFYXN0ZXJuIGFuZCBQYWNpZmljIHRpbWV6b25lcy4KK3V0Y19mYWtlID0gRml4ZWRPZmZzZXQoLTEyKjYwLCAiVVRDZmFrZSIsIDApCisKK2NsYXNzIFRlc3RUaW1lem9uZUNvbnZlcnNpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZSBEU1Qgc3dpdGNoIHRpbWVzIGZvciAyMDAyLCBpbiBzdGQgdGltZS4KKyAgICBkc3RvbiA9IGRhdGV0aW1lKDIwMDIsIDQsIDcsIDIpCisgICAgZHN0b2ZmID0gZGF0ZXRpbWUoMjAwMiwgMTAsIDI3LCAxKQorCisgICAgdGhlY2xhc3MgPSBkYXRldGltZQorCisgICAgIyBDaGVjayBhIHRpbWUgdGhhdCdzIGluc2lkZSBEU1QuCisgICAgZGVmIGNoZWNraW5zaWRlKHNlbGYsIGR0LCB0eiwgdXRjLCBkc3RvbiwgZHN0b2ZmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kc3QoKSwgSE9VUikKKworICAgICAgICAjIENvbnZlcnNpb24gdG8gb3VyIG93biB0aW1lem9uZSBpcyBhbHdheXMgYW4gaWRlbnRpdHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuYXN0aW1lem9uZSh0eiksIGR0KQorCisgICAgICAgIGFzdXRjID0gZHQuYXN0aW1lem9uZSh1dGMpCisgICAgICAgIHRoZXJlX2FuZF9iYWNrID0gYXN1dGMuYXN0aW1lem9uZSh0eikKKworICAgICAgICAjIENvbnZlcnNpb24gdG8gVVRDIGFuZCBiYWNrIGlzbid0IGFsd2F5cyBhbiBpZGVudGl0eSBoZXJlLAorICAgICAgICAjIGJlY2F1c2UgdGhlcmUgYXJlIHJlZHVuZGFudCBzcGVsbGluZ3MgKGluIGxvY2FsIHRpbWUpIG9mCisgICAgICAgICMgVVRDIHRpbWUgd2hlbiBEU1QgYmVnaW5zOiAgdGhlIGNsb2NrIGp1bXBzIGZyb20gMTo1OTo1OQorICAgICAgICAjIHRvIDM6MDA6MDAsIGFuZCBhIGxvY2FsIHRpbWUgb2YgMjpNTTpTUyBkb2Vzbid0IHJlYWxseQorICAgICAgICAjIG1ha2Ugc2Vuc2UgdGhlbi4gIFRoZSBjbGFzc2VzIGFib3ZlIHRyZWF0IDI6TU06U1MgYXMKKyAgICAgICAgIyBkYXlsaWdodCB0aW1lIHRoZW4gKGl0J3MgImFmdGVyIDJhbSIpLCByZWFsbHkgYW4gYWxpYXMKKyAgICAgICAgIyBmb3IgMTpNTTpTUyBzdGFuZGFyZCB0aW1lLiAgVGhlIGxhdHRlciBmb3JtIGlzIHdoYXQKKyAgICAgICAgIyBjb252ZXJzaW9uIGJhY2sgZnJvbSBVVEMgcHJvZHVjZXMuCisgICAgICAgIGlmIGR0LmRhdGUoKSA9PSBkc3Rvbi5kYXRlKCkgYW5kIGR0LmhvdXIgPT0gMjoKKyAgICAgICAgICAgICMgV2UncmUgaW4gdGhlIHJlZHVuZGFudCBob3VyLCBhbmQgY29taW5nIGJhY2sgZnJvbQorICAgICAgICAgICAgIyBVVEMgZ2l2ZXMgdGhlIDE6TU06U1Mgc3RhbmRhcmQtdGltZSBzcGVsbGluZy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlcmVfYW5kX2JhY2sgKyBIT1VSLCBkdCkKKyAgICAgICAgICAgICMgQWx0aG91Z2ggZHVyaW5nIHdhcyBjb25zaWRlcmVkIHRvIGJlIGluIGRheWxpZ2h0CisgICAgICAgICAgICAjIHRpbWUsIHRoZXJlX2FuZF9iYWNrIGlzIG5vdC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlcmVfYW5kX2JhY2suZHN0KCksIFpFUk8pCisgICAgICAgICAgICAjIFRoZXkncmUgdGhlIHNhbWUgdGltZXMgaW4gVVRDLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVyZV9hbmRfYmFjay5hc3RpbWV6b25lKHV0YyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0LmFzdGltZXpvbmUodXRjKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2UncmUgbm90IGluIHRoZSByZWR1bmRhbnQgaG91ci4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIHRoZXJlX2FuZF9iYWNrKQorCisgICAgICAgICMgQmVjYXVzZSB3ZSBoYXZlIGEgcmVkdW5kYW50IHNwZWxsaW5nIHdoZW4gRFNUIGJlZ2lucywgdGhlcmUgaXMKKyAgICAgICAgIyAodW5mb3J0dW5hdGVseSkgYW4gaG91ciB3aGVuIERTVCBlbmRzIHRoYXQgY2FuJ3QgYmUgc3BlbGxlZCBhdCBhbGwgaW4KKyAgICAgICAgIyBsb2NhbCB0aW1lLiAgV2hlbiBEU1QgZW5kcywgdGhlIGNsb2NrIGp1bXBzIGZyb20gMTo1OSBiYWNrIHRvIDE6MDAKKyAgICAgICAgIyBhZ2Fpbi4gIFRoZSBob3VyIDE6TU0gRFNUIGhhcyBubyBzcGVsbGluZyB0aGVuOiAgMTpNTSBpcyB0YWtlbiB0byBiZQorICAgICAgICAjIHN0YW5kYXJkIHRpbWUuICAxOk1NIERTVCA9PSAwOk1NIEVTVCwgYnV0IDA6TU0gaXMgdGFrZW4gdG8gYmUKKyAgICAgICAgIyBkYXlsaWdodCB0aW1lLiAgVGhlIGhvdXIgMTpNTSBkYXlsaWdodCA9PSAwOk1NIHN0YW5kYXJkIGNhbid0IGJlCisgICAgICAgICMgZXhwcmVzc2VkIGluIGxvY2FsIHRpbWUuICBOZXZlcnRoZWxlc3MsIHdlIHdhbnQgY29udmVyc2lvbiBiYWNrCisgICAgICAgICMgZnJvbSBVVEMgdG8gbWltaWMgdGhlIGxvY2FsIGNsb2NrJ3MgInJlcGVhdCBhbiBob3VyIiBiZWhhdmlvci4KKyAgICAgICAgbmV4dGhvdXJfdXRjID0gYXN1dGMgKyBIT1VSCisgICAgICAgIG5leHRob3VyX3R6ID0gbmV4dGhvdXJfdXRjLmFzdGltZXpvbmUodHopCisgICAgICAgIGlmIGR0LmRhdGUoKSA9PSBkc3RvZmYuZGF0ZSgpIGFuZCBkdC5ob3VyID09IDA6CisgICAgICAgICAgICAjIFdlJ3JlIGluIHRoZSBob3VyIGJlZm9yZSB0aGUgbGFzdCBEU1QgaG91ci4gIFRoZSBsYXN0IERTVCBob3VyCisgICAgICAgICAgICAjIGlzIGluZWZmYWJsZS4gIFdlIHdhbnQgdGhlIGNvbnZlcnNpb24gYmFjayB0byByZXBlYXQgMTpNTS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dGhvdXJfdHosIGR0LnJlcGxhY2UoaG91cj0xKSkKKyAgICAgICAgICAgIG5leHRob3VyX3V0YyArPSBIT1VSCisgICAgICAgICAgICBuZXh0aG91cl90eiA9IG5leHRob3VyX3V0Yy5hc3RpbWV6b25lKHR6KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0aG91cl90eiwgZHQucmVwbGFjZShob3VyPTEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0aG91cl90eiAtIGR0LCBIT1VSKQorCisgICAgIyBDaGVjayBhIHRpbWUgdGhhdCdzIG91dHNpZGUgRFNULgorICAgIGRlZiBjaGVja291dHNpZGUoc2VsZiwgZHQsIHR6LCB1dGMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmRzdCgpLCBaRVJPKQorCisgICAgICAgICMgQ29udmVyc2lvbiB0byBvdXIgb3duIHRpbWV6b25lIGlzIGFsd2F5cyBhbiBpZGVudGl0eS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5hc3RpbWV6b25lKHR6KSwgZHQpCisKKyAgICAgICAgIyBDb252ZXJ0aW5nIHRvIFVUQyBhbmQgYmFjayBpcyBhbiBpZGVudGl0eSB0b28uCisgICAgICAgIGFzdXRjID0gZHQuYXN0aW1lem9uZSh1dGMpCisgICAgICAgIHRoZXJlX2FuZF9iYWNrID0gYXN1dGMuYXN0aW1lem9uZSh0eikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgdGhlcmVfYW5kX2JhY2spCisKKyAgICBkZWYgY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoc2VsZiwgdHosIHV0Yyk6CisgICAgICAgIGRzdG9uID0gc2VsZi5kc3Rvbi5yZXBsYWNlKHR6aW5mbz10eikKKyAgICAgICAgIyBCZWNhdXNlIDE6TU0gb24gdGhlIGRheSBEU1QgZW5kcyBpcyB0YWtlbiBhcyBiZWluZyBzdGFuZGFyZCB0aW1lLAorICAgICAgICAjIHRoZXJlIGlzIG5vIHNwZWxsaW5nIGluIHR6IGZvciB0aGUgbGFzdCBob3VyIG9mIGRheWxpZ2h0IHRpbWUuCisgICAgICAgICMgRm9yIHB1cnBvc2VzIG9mIHRoZSB0ZXN0LCB0aGUgbGFzdCBob3VyIG9mIERTVCBpcyAwOk1NLCB3aGljaCBpcworICAgICAgICAjIHRha2VuIGFzIGJlaW5nIGRheWxpZ2h0IHRpbWUgKGFuZCAxOk1NIGlzIHRha2VuIGFzIGJlaW5nIHN0YW5kYXJkCisgICAgICAgICMgdGltZSkuCisgICAgICAgIGRzdG9mZiA9IHNlbGYuZHN0b2ZmLnJlcGxhY2UodHppbmZvPXR6KQorICAgICAgICBmb3IgZGVsdGEgaW4gKHRpbWVkZWx0YSh3ZWVrcz0xMyksCisgICAgICAgICAgICAgICAgICAgICAgREFZLAorICAgICAgICAgICAgICAgICAgICAgIEhPVVIsCisgICAgICAgICAgICAgICAgICAgICAgdGltZWRlbHRhKG1pbnV0ZXM9MSksCisgICAgICAgICAgICAgICAgICAgICAgdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0xKSk6CisKKyAgICAgICAgICAgIHNlbGYuY2hlY2tpbnNpZGUoZHN0b24sIHR6LCB1dGMsIGRzdG9uLCBkc3RvZmYpCisgICAgICAgICAgICBmb3IgZHVyaW5nIGluIGRzdG9uICsgZGVsdGEsIGRzdG9mZiAtIGRlbHRhOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tpbnNpZGUoZHVyaW5nLCB0eiwgdXRjLCBkc3RvbiwgZHN0b2ZmKQorCisgICAgICAgICAgICBzZWxmLmNoZWNrb3V0c2lkZShkc3RvZmYsIHR6LCB1dGMpCisgICAgICAgICAgICBmb3Igb3V0c2lkZSBpbiBkc3RvbiAtIGRlbHRhLCBkc3RvZmYgKyBkZWx0YToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrb3V0c2lkZShvdXRzaWRlLCB0eiwgdXRjKQorCisgICAgZGVmIHRlc3RfZWFzeShzZWxmKToKKyAgICAgICAgIyBEZXNwaXRlIHRoZSBuYW1lIG9mIHRoaXMgdGVzdCwgdGhlIGVuZGNhc2VzIGFyZSBleGNydWNpYXRpbmcuCisgICAgICAgIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoRWFzdGVybiwgdXRjX3JlYWwpCisgICAgICAgIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoUGFjaWZpYywgdXRjX3JlYWwpCisgICAgICAgIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoRWFzdGVybiwgdXRjX2Zha2UpCisgICAgICAgIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoUGFjaWZpYywgdXRjX2Zha2UpCisgICAgICAgICMgVGhlIG5leHQgaXMgcmVhbGx5IGRhbmNpbmcgbmVhciB0aGUgZWRnZS4gIEl0IHdvcmtzIGJlY2F1c2UKKyAgICAgICAgIyBQYWNpZmljIGFuZCBFYXN0ZXJuIGFyZSBmYXIgZW5vdWdoIGFwYXJ0IHRoYXQgdGhlaXIgInByb2JsZW0KKyAgICAgICAgIyBob3VycyIgZG9uJ3Qgb3ZlcmxhcC4KKyAgICAgICAgc2VsZi5jb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhFYXN0ZXJuLCBQYWNpZmljKQorICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKFBhY2lmaWMsIEVhc3Rlcm4pCisgICAgICAgICMgT1RPSCwgdGhlc2UgZmFpbCEgIERvbid0IGVuYWJsZSB0aGVtLiAgVGhlIGRpZmZpY3VsdHkgaXMgdGhhdAorICAgICAgICAjIHRoZSBlZGdlIGNhc2UgdGVzdHMgYXNzdW1lIHRoYXQgZXZlcnkgaG91ciBpcyByZXByZXNlbnRhYmxlIGluCisgICAgICAgICMgdGhlICJ1dGMiIGNsYXNzLiAgVGhpcyBpcyBhbHdheXMgdHJ1ZSBmb3IgYSBmaXhlZC1vZmZzZXQgdHppbmZvCisgICAgICAgICMgY2xhc3MgKGxrZSB1dGNfcmVhbCBhbmQgdXRjX2Zha2UpLCBidXQgbm90IGZvciBFYXN0ZXJuIG9yIENlbnRyYWwuCisgICAgICAgICMgRm9yIHRoZXNlIGFkamFjZW50IERTVC1hd2FyZSB0aW1lIHpvbmVzLCB0aGUgcmFuZ2Ugb2YgdGltZSBvZmZzZXRzCisgICAgICAgICMgdGVzdGVkIGVuZHMgdXAgY3JlYXRpbmcgaG91cnMgaW4gdGhlIG9uZSB0aGF0IGFyZW4ndCByZXByZXNlbnRhYmxlCisgICAgICAgICMgaW4gdGhlIG90aGVyLiAgRm9yIHRoZSBzYW1lIHJlYXNvbiwgd2Ugd291bGQgc2VlIGZhaWx1cmVzIGluIHRoZQorICAgICAgICAjIEVhc3Rlcm4gdnMgUGFjaWZpYyB0ZXN0cyB0b28gaWYgd2UgYWRkZWQgMypIT1VSIHRvIHRoZSBsaXN0IG9mCisgICAgICAgICMgb2Zmc2V0IGRlbHRhcyBpbiBjb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YygpLgorICAgICAgICAjCisgICAgICAgICMgc2VsZi5jb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhFYXN0ZXJuLCBDZW50cmFsKSAgIyBjYW4ndCB3b3JrCisgICAgICAgICMgc2VsZi5jb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhDZW50cmFsLCBFYXN0ZXJuKSAgIyBjYW4ndCB3b3JrCisKKyAgICBkZWYgdGVzdF90cmlja3koc2VsZik6CisgICAgICAgICMgMjI6MDAgb24gZGF5IGJlZm9yZSBkYXlsaWdodCBzdGFydHMuCisgICAgICAgIGZvdXJiYWNrID0gc2VsZi5kc3RvbiAtIHRpbWVkZWx0YShob3Vycz00KQorICAgICAgICBuaW5ld2VzdCA9IEZpeGVkT2Zmc2V0KC05KjYwLCAiLTA5MDAiLCAwKQorICAgICAgICBmb3VyYmFjayA9IGZvdXJiYWNrLnJlcGxhY2UodHppbmZvPW5pbmV3ZXN0KQorICAgICAgICAjIDIyOjAwLTA5MDAgaXMgNzowMCBVVEMgPT0gMjowMCBFU1QgPT0gMzowMCBEU1QuICBTaW5jZSBpdCdzICJhZnRlcgorICAgICAgICAjIDIiLCB3ZSBzaG91bGQgZ2V0IHRoZSAzIHNwZWxsaW5nLgorICAgICAgICAjIElmIHdlIHBsdWcgMjI6MDAgdGhlIGRheSBiZWZvcmUgaW50byBFYXN0ZXJuLCBpdCAibG9va3MgbGlrZSBzdGQKKyAgICAgICAgIyB0aW1lIiwgc28gaXRzIG9mZnNldCBpcyByZXR1cm5lZCBhcyAtNSwgYW5kIC01IC0gLTkgPSA0LiAgQWRkaW5nIDQKKyAgICAgICAgIyB0byAyMjowMCBsYW5kcyBvbiAyOjAwLCB3aGljaCBtYWtlcyBubyBzZW5zZSBpbiBsb2NhbCB0aW1lICh0aGUKKyAgICAgICAgIyBsb2NhbCBjbG9jayBqdW1wcyBmcm9tIDEgdG8gMykuICBUaGUgcG9pbnQgaGVyZSBpcyB0byBtYWtlIHN1cmUgd2UKKyAgICAgICAgIyBnZXQgdGhlIDMgc3BlbGxpbmcuCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5kc3Rvbi5yZXBsYWNlKGhvdXI9MykKKyAgICAgICAgZ290ID0gZm91cmJhY2suYXN0aW1lem9uZShFYXN0ZXJuKS5yZXBsYWNlKHR6aW5mbz1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICAgICAgIyBTaW1pbGFyLCBidXQgbWFwIHRvIDY6MDAgVVRDID09IDE6MDAgRVNUID09IDI6MDAgRFNULiAgSW4gdGhhdAorICAgICAgICAjIGNhc2Ugd2Ugd2FudCB0aGUgMTowMCBzcGVsbGluZy4KKyAgICAgICAgc2l4dXRjID0gc2VsZi5kc3Rvbi5yZXBsYWNlKGhvdXI9NiwgdHppbmZvPXV0Y19yZWFsKQorICAgICAgICAjIE5vdyA2OjAwICJsb29rcyBsaWtlIGRheWxpZ2h0Iiwgc28gdGhlIG9mZnNldCB3cnQgRWFzdGVybiBpcyAtNCwKKyAgICAgICAgIyBhbmQgYWRkaW5nIC00LTAgPT0gLTQgZ2l2ZXMgdGhlIDI6MDAgc3BlbGxpbmcuICBXZSB3YW50IHRoZSAxOjAwIEVTVAorICAgICAgICAjIHNwZWxsaW5nLgorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZHN0b24ucmVwbGFjZShob3VyPTEpCisgICAgICAgIGdvdCA9IHNpeHV0Yy5hc3RpbWV6b25lKEVhc3Rlcm4pLnJlcGxhY2UodHppbmZvPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgICAgICAjIE5vdyBvbiB0aGUgZGF5IERTVCBlbmRzLCB3ZSB3YW50ICJyZXBlYXQgYW4gaG91ciIgYmVoYXZpb3IuCisgICAgICAgICMgIFVUQyAgNDpNTSAgNTpNTSAgNjpNTSAgNzpNTSAgY2hlY2tpbmcgdGhlc2UKKyAgICAgICAgIyAgRVNUIDIzOk1NICAwOk1NICAxOk1NICAyOk1NCisgICAgICAgICMgIEVEVCAgMDpNTSAgMTpNTSAgMjpNTSAgMzpNTQorICAgICAgICAjIHdhbGwgIDA6TU0gIDE6TU0gIDE6TU0gIDI6TU0gIGFnYWluc3QgdGhlc2UKKyAgICAgICAgZm9yIHV0YyBpbiB1dGNfcmVhbCwgdXRjX2Zha2U6CisgICAgICAgICAgICBmb3IgdHogaW4gRWFzdGVybiwgUGFjaWZpYzoKKyAgICAgICAgICAgICAgICBmaXJzdF9zdGRfaG91ciA9IHNlbGYuZHN0b2ZmIC0gdGltZWRlbHRhKGhvdXJzPTIpICMgMjM6TU0KKyAgICAgICAgICAgICAgICAjIENvbnZlcnQgdGhhdCB0byBVVEMuCisgICAgICAgICAgICAgICAgZmlyc3Rfc3RkX2hvdXIgLT0gdHoudXRjb2Zmc2V0KE5vbmUpCisgICAgICAgICAgICAgICAgIyBBZGp1c3QgZm9yIHBvc3NpYmx5IGZha2UgVVRDLgorICAgICAgICAgICAgICAgIGFzdXRjID0gZmlyc3Rfc3RkX2hvdXIgKyB1dGMudXRjb2Zmc2V0KE5vbmUpCisgICAgICAgICAgICAgICAgIyBGaXJzdCBVVEMgaG91ciB0byBjb252ZXJ0OyB0aGlzIGlzIDQ6MDAgd2hlbiB1dGM9dXRjX3JlYWwgJgorICAgICAgICAgICAgICAgICMgdHo9RWFzdGVybi4KKyAgICAgICAgICAgICAgICBhc3V0Y2Jhc2UgPSBhc3V0Yy5yZXBsYWNlKHR6aW5mbz11dGMpCisgICAgICAgICAgICAgICAgZm9yIHR6aG91ciBpbiAoMCwgMSwgMSwgMik6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkYmFzZSA9IHNlbGYuZHN0b2ZmLnJlcGxhY2UoaG91cj10emhvdXIpCisgICAgICAgICAgICAgICAgICAgIGZvciBtaW51dGUgaW4gMCwgMzAsIDU5OgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZGJhc2UucmVwbGFjZShtaW51dGU9bWludXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgYXN1dGMgPSBhc3V0Y2Jhc2UucmVwbGFjZShtaW51dGU9bWludXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgYXN0eiA9IGFzdXRjLmFzdGltZXpvbmUodHopCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdHoucmVwbGFjZSh0emluZm89Tm9uZSksIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICBhc3V0Y2Jhc2UgKz0gSE9VUgorCisKKyAgICBkZWYgdGVzdF9ib2d1c19kc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIG9rKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIEhPVVIKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gSE9VUgorCisgICAgICAgIG5vdyA9IHNlbGYudGhlY2xhc3Mubm93KCkucmVwbGFjZSh0emluZm89dXRjX3JlYWwpCisgICAgICAgICMgRG9lc24ndCBibG93IHVwLgorICAgICAgICBub3cuYXN0aW1lem9uZShvaygpKQorCisgICAgICAgICMgRG9lcyBibG93IHVwLgorICAgICAgICBjbGFzcyBub3Rvayhvayk6CisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbm93LmFzdGltZXpvbmUsIG5vdG9rKCkpCisKKyAgICBkZWYgdGVzdF9mcm9tdXRjKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEVhc3Rlcm4uZnJvbXV0YykgICAjIG5vdCBlbm91Z2ggYXJncworICAgICAgICBub3cgPSBkYXRldGltZS51dGNub3coKS5yZXBsYWNlKHR6aW5mbz11dGNfcmVhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRWFzdGVybi5mcm9tdXRjLCBub3cpICMgd3JvbmcgdHppbmZvCisgICAgICAgIG5vdyA9IG5vdy5yZXBsYWNlKHR6aW5mbz1FYXN0ZXJuKSAgICMgaW5zZXJ0IGNvcnJlY3QgdHppbmZvCisgICAgICAgIGVub3cgPSBFYXN0ZXJuLmZyb211dGMobm93KSAgICAgICAgICMgZG9lc24ndCBibG93IHVwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5vdy50emluZm8sIEVhc3Rlcm4pICMgaGFzIHJpZ2h0IHR6aW5mbyBtZW1iZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBFYXN0ZXJuLmZyb211dGMsIG5vdywgbm93KSAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBFYXN0ZXJuLmZyb211dGMsIGRhdGUudG9kYXkoKSkgIyB3cm9uZyB0eXBlCisKKyAgICAgICAgIyBBbHdheXMgY29udmVydHMgVVRDIHRvIHN0YW5kYXJkIHRpbWUuCisgICAgICAgIGNsYXNzIEZhdXhVU1RpbWVab25lKFVTVGltZVpvbmUpOgorICAgICAgICAgICAgZGVmIGZyb211dGMoc2VsZiwgZHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBkdCArIHNlbGYuc3Rkb2Zmc2V0CisgICAgICAgIEZFYXN0ZXJuICA9IEZhdXhVU1RpbWVab25lKC01LCAiRkVhc3Rlcm4iLCAgIkZFU1QiLCAiRkVEVCIpCisKKyAgICAgICAgIyAgVVRDICA0Ok1NICA1Ok1NICA2Ok1NICA3Ok1NICA4Ok1NICA5Ok1NCisgICAgICAgICMgIEVTVCAyMzpNTSAgMDpNTSAgMTpNTSAgMjpNTSAgMzpNTSAgNDpNTQorICAgICAgICAjICBFRFQgIDA6TU0gIDE6TU0gIDI6TU0gIDM6TU0gIDQ6TU0gIDU6TU0KKworICAgICAgICAjIENoZWNrIGFyb3VuZCBEU1Qgc3RhcnQuCisgICAgICAgIHN0YXJ0ID0gc2VsZi5kc3Rvbi5yZXBsYWNlKGhvdXI9NCwgdHppbmZvPUVhc3Rlcm4pCisgICAgICAgIGZzdGFydCA9IHN0YXJ0LnJlcGxhY2UodHppbmZvPUZFYXN0ZXJuKQorICAgICAgICBmb3Igd2FsbCBpbiAyMywgMCwgMSwgMywgNCwgNToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc3RhcnQucmVwbGFjZShob3VyPXdhbGwpCisgICAgICAgICAgICBpZiB3YWxsID09IDIzOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkIC09IHRpbWVkZWx0YShkYXlzPTEpCisgICAgICAgICAgICBnb3QgPSBFYXN0ZXJuLmZyb211dGMoc3RhcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICAgICAgICAgIGV4cGVjdGVkID0gZnN0YXJ0ICsgRkVhc3Rlcm4uc3Rkb2Zmc2V0CisgICAgICAgICAgICBnb3QgPSBGRWFzdGVybi5mcm9tdXRjKGZzdGFydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgICAgICAgICAgIyBFbnN1cmUgYXN0aW1lem9uZSgpIGNhbGxzIGZyb211dGMoKSB0b28uCisgICAgICAgICAgICBnb3QgPSBmc3RhcnQucmVwbGFjZSh0emluZm89dXRjX3JlYWwpLmFzdGltZXpvbmUoRkVhc3Rlcm4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICAgICAgICAgIHN0YXJ0ICs9IEhPVVIKKyAgICAgICAgICAgIGZzdGFydCArPSBIT1VSCisKKyAgICAgICAgIyBDaGVjayBhcm91bmQgRFNUIGVuZC4KKyAgICAgICAgc3RhcnQgPSBzZWxmLmRzdG9mZi5yZXBsYWNlKGhvdXI9NCwgdHppbmZvPUVhc3Rlcm4pCisgICAgICAgIGZzdGFydCA9IHN0YXJ0LnJlcGxhY2UodHppbmZvPUZFYXN0ZXJuKQorICAgICAgICBmb3Igd2FsbCBpbiAwLCAxLCAxLCAyLCAzLCA0OgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdGFydC5yZXBsYWNlKGhvdXI9d2FsbCkKKyAgICAgICAgICAgIGdvdCA9IEVhc3Rlcm4uZnJvbXV0YyhzdGFydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgICAgICAgICAgZXhwZWN0ZWQgPSBmc3RhcnQgKyBGRWFzdGVybi5zdGRvZmZzZXQKKyAgICAgICAgICAgIGdvdCA9IEZFYXN0ZXJuLmZyb211dGMoZnN0YXJ0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgICAgICAgICAjIEVuc3VyZSBhc3RpbWV6b25lKCkgY2FsbHMgZnJvbXV0YygpIHRvby4KKyAgICAgICAgICAgIGdvdCA9IGZzdGFydC5yZXBsYWNlKHR6aW5mbz11dGNfcmVhbCkuYXN0aW1lem9uZShGRWFzdGVybikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgICAgICAgICAgc3RhcnQgKz0gSE9VUgorICAgICAgICAgICAgZnN0YXJ0ICs9IEhPVVIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBvZGRiYWxscworCitjbGFzcyBPZGRiYWxscyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9idWdfMTAyODMwNihzZWxmKToKKyAgICAgICAgIyBUcnlpbmcgdG8gY29tcGFyZSBhIGRhdGUgdG8gYSBkYXRldGltZSBzaG91bGQgYWN0IGxpa2UgYSBtaXhlZC0KKyAgICAgICAgIyB0eXBlIGNvbXBhcmlzb24sIGRlc3BpdGUgdGhhdCBkYXRldGltZSBpcyBhIHN1YmNsYXNzIG9mIGRhdGUuCisgICAgICAgIGFzX2RhdGUgPSBkYXRlLnRvZGF5KCkKKyAgICAgICAgYXNfZGF0ZXRpbWUgPSBkYXRldGltZS5jb21iaW5lKGFzX2RhdGUsIHRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzX2RhdGUgIT0gYXNfZGF0ZXRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc19kYXRldGltZSAhPSBhc19kYXRlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGFzX2RhdGUgPT0gYXNfZGF0ZXRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYXNfZGF0ZXRpbWUgPT0gYXNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGUgPCBhc19kYXRldGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGV0aW1lIDwgYXNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGUgPD0gYXNfZGF0ZXRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRldGltZSA8PSBhc19kYXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZSA+IGFzX2RhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZXRpbWUgPiBhc19kYXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZSA+PSBhc19kYXRldGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGV0aW1lID49IGFzX2RhdGUpCisKKyAgICAgICAgIyBOZXZlcnRoZWxzcywgY29tcGFyaXNvbiBzaG91bGQgd29yayB3aXRoIHRoZSBiYXNlLWNsYXNzIChkYXRlKQorICAgICAgICAjIHByb2plY3Rpb24gaWYgdXNlIG9mIGEgZGF0ZSBtZXRob2QgaXMgZm9yY2VkLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXNfZGF0ZS5fX2VxX18oYXNfZGF0ZXRpbWUpKQorICAgICAgICBkaWZmZXJlbnRfZGF5ID0gKGFzX2RhdGUuZGF5ICsgMSkgJSAyMCArIDEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBhc19kYXRlLl9fZXFfXyhhc19kYXRldGltZS5yZXBsYWNlKGRheT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50X2RheSkpKQorCisgICAgICAgICMgQW5kIGRhdGUgc2hvdWxkIGNvbXBhcmUgd2l0aCBvdGhlciBzdWJjbGFzc2VzIG9mIGRhdGUuICBJZiBhCisgICAgICAgICMgc3ViY2xhc3Mgd2FudHMgdG8gc3RvcCB0aGlzLCBpdCdzIHVwIHRvIHRoZSBzdWJjbGFzcyB0byBkbyBzby4KKyAgICAgICAgZGF0ZV9zYyA9IFN1YmNsYXNzRGF0ZShhc19kYXRlLnllYXIsIGFzX2RhdGUubW9udGgsIGFzX2RhdGUuZGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzX2RhdGUsIGRhdGVfc2MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZV9zYywgYXNfZGF0ZSkKKworICAgICAgICAjIERpdHRvIGZvciBkYXRldGltZXMuCisgICAgICAgIGRhdGV0aW1lX3NjID0gU3ViY2xhc3NEYXRldGltZShhc19kYXRldGltZS55ZWFyLCBhc19kYXRldGltZS5tb250aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzX2RhdGUuZGF5LCAwLCAwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzX2RhdGV0aW1lLCBkYXRldGltZV9zYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRldGltZV9zYywgYXNfZGF0ZXRpbWUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kYm0ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kYm0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiMGI1YwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RibS5weQpAQCAtMCwwICsxLDQyIEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitkYm0gPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnZGJtJykKKworY2xhc3MgRGJtVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBzZWxmLmQgPSBkYm0ub3BlbihzZWxmLmZpbGVuYW1lLCAnYycpCisgICAgICAgIHNlbGYuZC5jbG9zZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBzdWZmaXggaW4gWycnLCAnLnBhZycsICcuZGlyJywgJy5kYiddOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lICsgc3VmZml4KQorCisgICAgZGVmIHRlc3Rfa2V5cyhzZWxmKToKKyAgICAgICAgc2VsZi5kID0gZGJtLm9wZW4oc2VsZi5maWxlbmFtZSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5rZXlzKCksIFtdKQorICAgICAgICBhID0gWygnYScsICdiJyksICgnMTIzNDU2Nzg5MTAnLCAnMDE5MjM3NDEwOTgyMzQwOTEyODQwMTk4MjQyJyldCisgICAgICAgIGZvciBrLCB2IGluIGE6CisgICAgICAgICAgICBzZWxmLmRba10gPSB2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNlbGYuZC5rZXlzKCkpLCBzb3J0ZWQoayBmb3IgKGssIHYpIGluIGEpKQorICAgICAgICBmb3IgaywgdiBpbiBhOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBzZWxmLmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZFtrXSwgdikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigneHh4Jywgc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLmRbJ3h4eCddKQorICAgICAgICBzZWxmLmQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbW9kZXMoc2VsZik6CisgICAgICAgIGZvciBtb2RlIGluIFsncicsICdydycsICd3JywgJ24nXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmQgPSBkYm0ub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKQorICAgICAgICAgICAgICAgIHNlbGYuZC5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgZGJtLmVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KERibVRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTE4NGVmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQpAQCAtMCwwICsxLDIzNTEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisjIFdyaXR0ZW4gYnkgRXJpYyBQcmljZSA8ZXByaWNlIGF0IHRqaHNzdC5lZHU+CisjICAgIGFuZCBGYWN1bmRvIEJhdGlzdGEgPGZhY3VuZG8gYXQgdGFuaXF1ZXRpbC5jb20uYXI+CisjICAgIGFuZCBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+CisjICAgIGFuZCBBYWh6IChhYWh6IGF0IHBvYm94LmNvbSkKKyMgICAgYW5kIFRpbSBQZXRlcnMKKworIiIiCitUaGVzZSBhcmUgdGhlIHRlc3QgY2FzZXMgZm9yIHRoZSBEZWNpbWFsIG1vZHVsZS4KKworVGhlcmUgYXJlIHR3byBncm91cHMgb2YgdGVzdHMsIEFyaXRobWV0aWMgYW5kIEJlaGF2aW91ci4gVGhlIGZvcm1lciB0ZXN0Cit0aGUgRGVjaW1hbCBhcml0aG1ldGljIHVzaW5nIHRoZSB0ZXN0cyBwcm92aWRlZCBieSBNaWtlIENvd2xpc2hhdy4gVGhlIGxhdHRlcgordGVzdCB0aGUgcHl0aG9uaWMgYmVoYXZpb3VyIGFjY29yZGluZyB0byBQRVAgMzI3LgorCitDb3dsaXNoYXcncyB0ZXN0cyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOgorCisgICB3d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsL2RlY3Rlc3QuemlwCisKK1RoaXMgdGVzdCBtb2R1bGUgY2FuIGJlIGNhbGxlZCBmcm9tIGNvbW1hbmQgbGluZSB3aXRoIG9uZSBwYXJhbWV0ZXIgKEFyaXRobWV0aWMKK29yIEJlaGF2aW91cikgdG8gdGVzdCBlYWNoIHBhcnQsIG9yIHdpdGhvdXQgcGFyYW1ldGVyIHRvIHRlc3QgYm90aCBwYXJ0cy4gSWYKK3lvdSdyZSB3b3JraW5nIHRocm91Z2ggSURMRSwgeW91IGNhbiBpbXBvcnQgdGhpcyB0ZXN0IG1vZHVsZSBhbmQgY2FsbCB0ZXN0X21haW4oKQord2l0aCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudC4KKyIiIgorCitpbXBvcnQgbWF0aAoraW1wb3J0IG9zLCBzeXMKK2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IHBpY2tsZSwgY29weQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIGRlY2ltYWwgaW1wb3J0ICoKK2ltcG9ydCBudW1iZXJzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAocnVuX3VuaXR0ZXN0LCBydW5fZG9jdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19yZXNvdXJjZV9lbmFibGVkLCBjaGVja19weTNrX3dhcm5pbmdzKQoraW1wb3J0IHJhbmRvbQordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKKyMgVXNlZnVsIFRlc3QgQ29uc3RhbnQKK1NpZ25hbHMgPSB0dXBsZShnZXRjb250ZXh0KCkuZmxhZ3Mua2V5cygpKQorCisjIFNpZ25hbHMgb3JkZXJlZCB3aXRoIHJlc3BlY3QgdG8gcHJlY2VkZW5jZTogd2hlbiBhbiBvcGVyYXRpb24KKyMgcHJvZHVjZXMgbXVsdGlwbGUgc2lnbmFscywgc2lnbmFscyBvY2N1cnJpbmcgbGF0ZXIgaW4gdGhlIGxpc3QKKyMgc2hvdWxkIGJlIGhhbmRsZWQgYmVmb3JlIHRob3NlIG9jY3VycmluZyBlYXJsaWVyIGluIHRoZSBsaXN0LgorT3JkZXJlZFNpZ25hbHMgPSAoQ2xhbXBlZCwgUm91bmRlZCwgSW5leGFjdCwgU3Vibm9ybWFsLAorICAgICAgICAgICAgICAgICAgVW5kZXJmbG93LCBPdmVyZmxvdywgRGl2aXNpb25CeVplcm8sIEludmFsaWRPcGVyYXRpb24pCisKKyMgVGVzdHMgYXJlIGJ1aWx0IGFyb3VuZCB0aGVzZSBhc3N1bWVkIGNvbnRleHQgZGVmYXVsdHMuCisjIHRlc3RfbWFpbigpIHJlc3RvcmVzIHRoZSBvcmlnaW5hbCBjb250ZXh0LgorZGVmIGluaXQoKToKKyAgICBnbG9iYWwgT1JJR0lOQUxfQ09OVEVYVAorICAgIE9SSUdJTkFMX0NPTlRFWFQgPSBnZXRjb250ZXh0KCkuY29weSgpCisgICAgRGVmYXVsdFRlc3RDb250ZXh0ID0gQ29udGV4dCgKKyAgICAgICAgcHJlYyA9IDksCisgICAgICAgIHJvdW5kaW5nID0gUk9VTkRfSEFMRl9FVkVOLAorICAgICAgICB0cmFwcyA9IGRpY3QuZnJvbWtleXMoU2lnbmFscywgMCkKKyAgICAgICAgKQorICAgIHNldGNvbnRleHQoRGVmYXVsdFRlc3RDb250ZXh0KQorCisjIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcworcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKAorICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKworVEVTVERBVEFESVIgPSAnZGVjaW1hbHRlc3RkYXRhJworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmaWxlID0gc3lzLmFyZ3ZbMF0KK2Vsc2U6CisgICAgZmlsZSA9IF9fZmlsZV9fCit0ZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpIG9yIG9zLmN1cmRpcgorZGlyZWN0b3J5ID0gdGVzdGRpciArIG9zLnNlcCArIFRFU1REQVRBRElSICsgb3Muc2VwCisKK3NraXBfZXhwZWN0ZWQgPSBub3Qgb3MucGF0aC5pc2RpcihkaXJlY3RvcnkpCisKKyMgbGlzdCBvZiBpbmRpdmlkdWFsIC5kZWNUZXN0IHRlc3QgaWRzIHRoYXQgY29ycmVzcG9uZCB0byB0ZXN0cyB0aGF0CisjIHdlJ3JlIHNraXBwaW5nIGZvciBvbmUgcmVhc29uIG9yIGFub3RoZXIuCitza2lwcGVkX3Rlc3RfaWRzID0gc2V0KFsKKyAgICAjIFNraXAgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgc2NhbGViIHRlc3RzLgorICAgICdzY2J4MTY0JywKKyAgICAnc2NieDE2NScsCisKKyAgICAjIEZvciBzb21lIG9wZXJhdGlvbnMgKGN1cnJlbnRseSBleHAsIGxuLCBsb2cxMCwgcG93ZXIpLCB0aGUgZGVjTnVtYmVyCisgICAgIyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW1wb3NlcyBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBvbiB0aGUgY29udGV4dAorICAgICMgYW5kIG9wZXJhbmRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbjsKKyAgICAjIGhvd2V2ZXIsIHRoZSBlZmZlY3Qgb2YgdGhlc2UgcmVzdHJpY3Rpb25zIGRvZXMgc2hvdyB1cCBpbiBzb21lIG9mIHRoZQorICAgICMgdGVzdGNhc2VzLiAgV2Ugc2tpcCB0ZXN0Y2FzZXMgdGhhdCB2aW9sYXRlIHRoZXNlIHJlc3RyaWN0aW9ucywgc2luY2UKKyAgICAjIERlY2ltYWwgYmVoYXZlcyBkaWZmZXJlbnRseSBmcm9tIGRlY051bWJlciBmb3IgdGhlc2UgdGVzdGNhc2VzIHNvIHRoZXNlCisgICAgIyB0ZXN0Y2FzZXMgd291bGQgb3RoZXJ3aXNlIGZhaWwuCisgICAgJ2V4cHg5MDEnLAorICAgICdleHB4OTAyJywKKyAgICAnZXhweDkwMycsCisgICAgJ2V4cHg5MDUnLAorICAgICdsbng5MDEnLAorICAgICdsbng5MDInLAorICAgICdsbng5MDMnLAorICAgICdsbng5MDUnLAorICAgICdsb2d4OTAxJywKKyAgICAnbG9neDkwMicsCisgICAgJ2xvZ3g5MDMnLAorICAgICdsb2d4OTA1JywKKyAgICAncG93eDExODMnLAorICAgICdwb3d4MTE4NCcsCisgICAgJ3Bvd3g0MDAxJywKKyAgICAncG93eDQwMDInLAorICAgICdwb3d4NDAwMycsCisgICAgJ3Bvd3g0MDA1JywKKyAgICAncG93eDQwMDgnLAorICAgICdwb3d4NDAxMCcsCisgICAgJ3Bvd3g0MDEyJywKKyAgICAncG93eDQwMTQnLAorICAgIF0pCisKKyMgTWFrZSBzdXJlIGl0IGFjdHVhbGx5IHJhaXNlcyBlcnJvcnMgd2hlbiBub3QgZXhwZWN0ZWQgYW5kIGNhdWdodCBpbiBmbGFncworIyBTbG93ZXIsIHNpbmNlIGl0IHJ1bnMgc29tZSB0aGluZ3Mgc2V2ZXJhbCB0aW1lcy4KK0VYVEVOREVERVJST1JURVNUID0gRmFsc2UKKworI01hcCB0aGUgdGVzdCBjYXNlcycgZXJyb3IgbmFtZXMgdG8gdGhlIGFjdHVhbCBlcnJvcnMKK0Vycm9yTmFtZXMgPSB7J2NsYW1wZWQnIDogQ2xhbXBlZCwKKyAgICAgICAgICAgICAgJ2NvbnZlcnNpb25fc3ludGF4JyA6IEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICdkaXZpc2lvbl9ieV96ZXJvJyA6IERpdmlzaW9uQnlaZXJvLAorICAgICAgICAgICAgICAnZGl2aXNpb25faW1wb3NzaWJsZScgOiBJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAnZGl2aXNpb25fdW5kZWZpbmVkJyA6IEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICdpbmV4YWN0JyA6IEluZXhhY3QsCisgICAgICAgICAgICAgICdpbnZhbGlkX2NvbnRleHQnIDogSW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgJ2ludmFsaWRfb3BlcmF0aW9uJyA6IEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICdvdmVyZmxvdycgOiBPdmVyZmxvdywKKyAgICAgICAgICAgICAgJ3JvdW5kZWQnIDogUm91bmRlZCwKKyAgICAgICAgICAgICAgJ3N1Ym5vcm1hbCcgOiBTdWJub3JtYWwsCisgICAgICAgICAgICAgICd1bmRlcmZsb3cnIDogVW5kZXJmbG93fQorCisKK2RlZiBOb25mdW5jdGlvbigqYXJncyk6CisgICAgIiIiRG9lc24ndCBkbyBhbnl0aGluZy4iIiIKKyAgICByZXR1cm4gTm9uZQorCitSb3VuZGluZ0RpY3QgPSB7J2NlaWxpbmcnIDogUk9VTkRfQ0VJTElORywgI01hcHMgdGVzdC1jYXNlIG5hbWVzIHRvIHJvdW5kaW5ncy4KKyAgICAgICAgICAgICAgICAnZG93bicgOiBST1VORF9ET1dOLAorICAgICAgICAgICAgICAgICdmbG9vcicgOiBST1VORF9GTE9PUiwKKyAgICAgICAgICAgICAgICAnaGFsZl9kb3duJyA6IFJPVU5EX0hBTEZfRE9XTiwKKyAgICAgICAgICAgICAgICAnaGFsZl9ldmVuJyA6IFJPVU5EX0hBTEZfRVZFTiwKKyAgICAgICAgICAgICAgICAnaGFsZl91cCcgOiBST1VORF9IQUxGX1VQLAorICAgICAgICAgICAgICAgICd1cCcgOiBST1VORF9VUCwKKyAgICAgICAgICAgICAgICAnMDV1cCcgOiBST1VORF8wNVVQfQorCisjIE5hbWUgYWRhcHRlciB0byBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgRGVjaW1hbCBhbmQgQ29udGV4dAorIyBpbnRlcmZhY2Ugd2l0aG91dCBjaGFuZ2luZyB0aGUgdGVzdCBmaWxlcyBmcm9tIENvd2xpc2hhdworbmFtZUFkYXB0ZXIgPSB7J2FuZCc6J2xvZ2ljYWxfYW5kJywKKyAgICAgICAgICAgICAgICdhcHBseSc6J19hcHBseScsCisgICAgICAgICAgICAgICAnY2xhc3MnOidudW1iZXJfY2xhc3MnLAorICAgICAgICAgICAgICAgJ2NvbXBhcmVzaWcnOidjb21wYXJlX3NpZ25hbCcsCisgICAgICAgICAgICAgICAnY29tcGFyZXRvdGFsJzonY29tcGFyZV90b3RhbCcsCisgICAgICAgICAgICAgICAnY29tcGFyZXRvdG1hZyc6J2NvbXBhcmVfdG90YWxfbWFnJywKKyAgICAgICAgICAgICAgICdjb3B5JzonY29weV9kZWNpbWFsJywKKyAgICAgICAgICAgICAgICdjb3B5YWJzJzonY29weV9hYnMnLAorICAgICAgICAgICAgICAgJ2NvcHluZWdhdGUnOidjb3B5X25lZ2F0ZScsCisgICAgICAgICAgICAgICAnY29weXNpZ24nOidjb3B5X3NpZ24nLAorICAgICAgICAgICAgICAgJ2RpdmlkZWludCc6J2RpdmlkZV9pbnQnLAorICAgICAgICAgICAgICAgJ2ludmVydCc6J2xvZ2ljYWxfaW52ZXJ0JywKKyAgICAgICAgICAgICAgICdpc2Nhbm9uaWNhbCc6J2lzX2Nhbm9uaWNhbCcsCisgICAgICAgICAgICAgICAnaXNmaW5pdGUnOidpc19maW5pdGUnLAorICAgICAgICAgICAgICAgJ2lzaW5maW5pdGUnOidpc19pbmZpbml0ZScsCisgICAgICAgICAgICAgICAnaXNuYW4nOidpc19uYW4nLAorICAgICAgICAgICAgICAgJ2lzbm9ybWFsJzonaXNfbm9ybWFsJywKKyAgICAgICAgICAgICAgICdpc3FuYW4nOidpc19xbmFuJywKKyAgICAgICAgICAgICAgICdpc3NpZ25lZCc6J2lzX3NpZ25lZCcsCisgICAgICAgICAgICAgICAnaXNzbmFuJzonaXNfc25hbicsCisgICAgICAgICAgICAgICAnaXNzdWJub3JtYWwnOidpc19zdWJub3JtYWwnLAorICAgICAgICAgICAgICAgJ2lzemVybyc6J2lzX3plcm8nLAorICAgICAgICAgICAgICAgJ21heG1hZyc6J21heF9tYWcnLAorICAgICAgICAgICAgICAgJ21pbm1hZyc6J21pbl9tYWcnLAorICAgICAgICAgICAgICAgJ25leHRtaW51cyc6J25leHRfbWludXMnLAorICAgICAgICAgICAgICAgJ25leHRwbHVzJzonbmV4dF9wbHVzJywKKyAgICAgICAgICAgICAgICduZXh0dG93YXJkJzonbmV4dF90b3dhcmQnLAorICAgICAgICAgICAgICAgJ29yJzonbG9naWNhbF9vcicsCisgICAgICAgICAgICAgICAncmVkdWNlJzonbm9ybWFsaXplJywKKyAgICAgICAgICAgICAgICdyZW1haW5kZXJuZWFyJzoncmVtYWluZGVyX25lYXInLAorICAgICAgICAgICAgICAgJ3NhbWVxdWFudHVtJzonc2FtZV9xdWFudHVtJywKKyAgICAgICAgICAgICAgICdzcXVhcmVyb290Jzonc3FydCcsCisgICAgICAgICAgICAgICAndG9lbmcnOid0b19lbmdfc3RyaW5nJywKKyAgICAgICAgICAgICAgICd0b2ludGVncmFsJzondG9faW50ZWdyYWxfdmFsdWUnLAorICAgICAgICAgICAgICAgJ3RvaW50ZWdyYWx4JzondG9faW50ZWdyYWxfZXhhY3QnLAorICAgICAgICAgICAgICAgJ3Rvc2NpJzondG9fc2NpX3N0cmluZycsCisgICAgICAgICAgICAgICAneG9yJzonbG9naWNhbF94b3InLAorICAgICAgICAgICAgICB9CisKKyMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcmV0dXJuIFRydWUvRmFsc2UgcmF0aGVyIHRoYW4gYSBEZWNpbWFsIGluc3RhbmNlCisKK0xPR0lDQUxfRlVOQ1RJT05TID0gKAorICAgICdpc19jYW5vbmljYWwnLAorICAgICdpc19maW5pdGUnLAorICAgICdpc19pbmZpbml0ZScsCisgICAgJ2lzX25hbicsCisgICAgJ2lzX25vcm1hbCcsCisgICAgJ2lzX3FuYW4nLAorICAgICdpc19zaWduZWQnLAorICAgICdpc19zbmFuJywKKyAgICAnaXNfc3Vibm9ybWFsJywKKyAgICAnaXNfemVybycsCisgICAgJ3NhbWVfcXVhbnR1bScsCisgICAgKQorCitjbGFzcyBEZWNpbWFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQ2xhc3Mgd2hpY2ggdGVzdHMgdGhlIERlY2ltYWwgY2xhc3MgYWdhaW5zdCB0aGUgdGVzdCBjYXNlcy4KKworICAgIENoYW5nZWQgZm9yIHVuaXR0ZXN0LgorICAgICIiIgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jb250ZXh0ID0gQ29udGV4dCgpCisgICAgICAgIHNlbGYuaWdub3JlX2xpc3QgPSBbJyMnXQorICAgICAgICAjIEJhc2ljYWxseSwgYSAjIG1lYW5zIHJldHVybiBOYU4gSW52YWxpZE9wZXJhdGlvbi4KKyAgICAgICAgIyBEaWZmZXJlbnQgZnJvbSBhIHNOYU4gaW4gdHJpbQorCisgICAgICAgIHNlbGYuQ2hhbmdlRGljdCA9IHsncHJlY2lzaW9uJyA6IHNlbGYuY2hhbmdlX3ByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAncm91bmRpbmcnIDogc2VsZi5jaGFuZ2Vfcm91bmRpbmdfbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICdtYXhleHBvbmVudCcgOiBzZWxmLmNoYW5nZV9tYXhfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgJ21pbmV4cG9uZW50JyA6IHNlbGYuY2hhbmdlX21pbl9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAnY2xhbXAnIDogc2VsZi5jaGFuZ2VfY2xhbXB9CisKKyAgICBkZWYgZXZhbF9maWxlKHNlbGYsIGZpbGUpOgorICAgICAgICBnbG9iYWwgc2tpcF9leHBlY3RlZAorICAgICAgICBpZiBza2lwX2V4cGVjdGVkOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIG9wZW4oZmlsZSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgnXHJcbicsICcnKS5yZXBsYWNlKCdcbicsICcnKQorICAgICAgICAgICAgICAgICNwcmludCBsaW5lCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ID0gc2VsZi5ldmFsX2xpbmUobGluZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRGVjaW1hbEV4Y2VwdGlvbiBhcyBleGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICNFeGNlcHRpb24gcmFpc2VkIHdoZXJlIHRoZXJlIHNob3VsZG4ndCBoYXZlIGJlZW4gb25lLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4Y2VwdGlvbiAiJytleGNlcHRpb24uX19jbGFzc19fLl9fbmFtZV9fICsgJyIgcmFpc2VkIG9uIGxpbmUgJytsaW5lKQorCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGV2YWxfbGluZShzZWxmLCBzKToKKyAgICAgICAgaWYgcy5maW5kKCcgLT4gJykgPj0gMCBhbmQgc1s6Ml0gIT0gJy0tJyBhbmQgbm90IHMuc3RhcnRzd2l0aCgnICAtLScpOgorICAgICAgICAgICAgcyA9IChzLnNwbGl0KCctPicpWzBdICsgJy0+JyArCisgICAgICAgICAgICAgICAgIHMuc3BsaXQoJy0+JylbMV0uc3BsaXQoJy0tJylbMF0pLnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHMgPSBzLnNwbGl0KCctLScpWzBdLnN0cmlwKCkKKworICAgICAgICBmb3IgaWdub3JlIGluIHNlbGYuaWdub3JlX2xpc3Q6CisgICAgICAgICAgICBpZiBzLmZpbmQoaWdub3JlKSA+PSAwOgorICAgICAgICAgICAgICAgICNwcmludCBzLnNwbGl0KClbMF0sICdOb3RJbXBsZW1lbnRlZC0tJywgaWdub3JlCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgJzonIGluIHM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ldmFsX2RpcmVjdGl2ZShzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXZhbF9lcXVhdGlvbihzKQorCisgICAgZGVmIGV2YWxfZGlyZWN0aXZlKHNlbGYsIHMpOgorICAgICAgICBmdW5jdCwgdmFsdWUgPSBtYXAobGFtYmRhIHg6IHguc3RyaXAoKS5sb3dlcigpLCBzLnNwbGl0KCc6JykpCisgICAgICAgIGlmIGZ1bmN0ID09ICdyb3VuZGluZyc6CisgICAgICAgICAgICB2YWx1ZSA9IFJvdW5kaW5nRGljdFt2YWx1ZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGludCh2YWx1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBmdW5jdCA9IHNlbGYuQ2hhbmdlRGljdC5nZXQoZnVuY3QsIE5vbmZ1bmN0aW9uKQorICAgICAgICBmdW5jdCh2YWx1ZSkKKworICAgIGRlZiBldmFsX2VxdWF0aW9uKHNlbGYsIHMpOgorICAgICAgICAjZ2xvYmFsIERFRkFVTFRfUFJFQ0lTSU9OCisgICAgICAgICNwcmludCBERUZBVUxUX1BSRUNJU0lPTgorCisgICAgICAgIGlmIG5vdCBURVNUX0FMTCBhbmQgcmFuZG9tLnJhbmRvbSgpIDwgMC45MDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFNpZGVzID0gcy5zcGxpdCgnLT4nKQorICAgICAgICAgICAgTCA9IFNpZGVzWzBdLnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgaWQgPSBMWzBdCisgICAgICAgICAgICBpZiBERUJVRzoKKyAgICAgICAgICAgICAgICBwcmludCAiVGVzdCAiLCBpZCwKKyAgICAgICAgICAgIGZ1bmN0ID0gTFsxXS5sb3dlcigpCisgICAgICAgICAgICB2YWxzdGVtcCA9IExbMjpdCisgICAgICAgICAgICBMID0gU2lkZXNbMV0uc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICBhbnMgPSBMWzBdCisgICAgICAgICAgICBleGNlcHRpb25zID0gTFsxOl0KKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yLCBJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRPcGVyYXRpb24KKyAgICAgICAgZGVmIEZpeFF1b3Rlcyh2YWwpOgorICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIicnIiwgJ1NpbmdsZVF1b3RlJykucmVwbGFjZSgnIiInLCAnRG91YmxlUXVvdGUnKQorICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIiciLCAnJykucmVwbGFjZSgnIicsICcnKQorICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJ1NpbmdsZVF1b3RlJywgIiciKS5yZXBsYWNlKCdEb3VibGVRdW90ZScsICciJykKKyAgICAgICAgICAgIHJldHVybiB2YWwKKworICAgICAgICBpZiBpZCBpbiBza2lwcGVkX3Rlc3RfaWRzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm5hbWUgPSBuYW1lQWRhcHRlci5nZXQoZnVuY3QsIGZ1bmN0KQorICAgICAgICBpZiBmbmFtZSA9PSAncmVzY2FsZSc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZnVuY3QgPSBnZXRhdHRyKHNlbGYuY29udGV4dCwgZm5hbWUpCisgICAgICAgIHZhbHMgPSBbXQorICAgICAgICBjb25nbG9tZXJhdGUgPSAnJworICAgICAgICBxdW90ZSA9IDAKKyAgICAgICAgdGhlaXJleGNlcHRpb25zID0gW0Vycm9yTmFtZXNbeC5sb3dlcigpXSBmb3IgeCBpbiBleGNlcHRpb25zXQorCisgICAgICAgIGZvciBleGNlcHRpb24gaW4gU2lnbmFsczoKKyAgICAgICAgICAgIHNlbGYuY29udGV4dC50cmFwc1tleGNlcHRpb25dID0gMSAjQ2F0Y2ggdGhlc2UgYnVncy4uLgorICAgICAgICBmb3IgZXhjZXB0aW9uIGluIHRoZWlyZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHNlbGYuY29udGV4dC50cmFwc1tleGNlcHRpb25dID0gMAorICAgICAgICBmb3IgaSwgdmFsIGluIGVudW1lcmF0ZSh2YWxzdGVtcCk6CisgICAgICAgICAgICBpZiB2YWwuY291bnQoIiciKSAlIDIgPT0gMToKKyAgICAgICAgICAgICAgICBxdW90ZSA9IDEgLSBxdW90ZQorICAgICAgICAgICAgaWYgcXVvdGU6CisgICAgICAgICAgICAgICAgY29uZ2xvbWVyYXRlID0gY29uZ2xvbWVyYXRlICsgJyAnICsgdmFsCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsID0gY29uZ2xvbWVyYXRlICsgdmFsCisgICAgICAgICAgICAgICAgY29uZ2xvbWVyYXRlID0gJycKKyAgICAgICAgICAgIHYgPSBGaXhRdW90ZXModmFsKQorICAgICAgICAgICAgaWYgZm5hbWUgaW4gKCd0b19zY2lfc3RyaW5nJywgJ3RvX2VuZ19zdHJpbmcnKToKKyAgICAgICAgICAgICAgICBpZiBFWFRFTkRFREVSUk9SVEVTVDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGVycm9yIGluIHRoZWlyZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC50cmFwc1tlcnJvcl0gPSAxCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Qoc2VsZi5jb250ZXh0LmNyZWF0ZV9kZWNpbWFsKHYpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTaWduYWxzLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmFpc2VkICVzIGluICVzIHdoZW4gJXMgZGlzYWJsZWQiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZSwgcywgZXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZCBub3QgcmFpc2UgJXMgaW4gJXMiICUgKGVycm9yLCBzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC50cmFwc1tlcnJvcl0gPSAwCisgICAgICAgICAgICAgICAgdiA9IHNlbGYuY29udGV4dC5jcmVhdGVfZGVjaW1hbCh2KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ID0gRGVjaW1hbCh2LCBzZWxmLmNvbnRleHQpCisgICAgICAgICAgICB2YWxzLmFwcGVuZCh2KQorCisgICAgICAgIGFucyA9IEZpeFF1b3RlcyhhbnMpCisKKyAgICAgICAgaWYgRVhURU5ERURFUlJPUlRFU1QgYW5kIGZuYW1lIG5vdCBpbiAoJ3RvX3NjaV9zdHJpbmcnLCAndG9fZW5nX3N0cmluZycpOgorICAgICAgICAgICAgZm9yIGVycm9yIGluIHRoZWlyZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQudHJhcHNbZXJyb3JdID0gMQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZnVuY3QoKnZhbHMpCisgICAgICAgICAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZXhjZXB0IFNpZ25hbHMsIGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmFpc2VkICVzIGluICVzIHdoZW4gJXMgZGlzYWJsZWQiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUsIHMsIGVycm9yKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZCBub3QgcmFpc2UgJXMgaW4gJXMiICUgKGVycm9yLCBzKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQudHJhcHNbZXJyb3JdID0gMAorCisgICAgICAgICAgICAjIGFzIGFib3ZlLCBidXQgYWRkIHRyYXBzIGN1bXVsYXRpdmVseSwgdG8gY2hlY2sgcHJlY2VkZW5jZQorICAgICAgICAgICAgb3JkZXJlZF9lcnJvcnMgPSBbZSBmb3IgZSBpbiBPcmRlcmVkU2lnbmFscyBpZiBlIGluIHRoZWlyZXhjZXB0aW9uc10KKyAgICAgICAgICAgIGZvciBlcnJvciBpbiBvcmRlcmVkX2Vycm9yczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQudHJhcHNbZXJyb3JdID0gMQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZnVuY3QoKnZhbHMpCisgICAgICAgICAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZXhjZXB0IFNpZ25hbHMsIGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmFpc2VkICVzIGluICVzOyBleHBlY3RlZCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUoZSksIHMsIGVycm9yKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZCBub3QgcmFpc2UgJXMgaW4gJXMiICUgKGVycm9yLCBzKSkKKyAgICAgICAgICAgICMgcmVzZXQgdHJhcHMKKyAgICAgICAgICAgIGZvciBlcnJvciBpbiBvcmRlcmVkX2Vycm9yczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQudHJhcHNbZXJyb3JdID0gMAorCisKKyAgICAgICAgaWYgREVCVUc6CisgICAgICAgICAgICBwcmludCAiLS0iLCBzZWxmLmNvbnRleHQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gc3RyKGZ1bmN0KCp2YWxzKSkKKyAgICAgICAgICAgIGlmIGZuYW1lIGluIExPR0lDQUxfRlVOQ1RJT05TOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cihpbnQoZXZhbChyZXN1bHQpKSkgIyAnVHJ1ZScsICdGYWxzZScgLT4gJzEnLCAnMCcKKyAgICAgICAgZXhjZXB0IFNpZ25hbHMsIGVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJSYWlzZWQgJXMgaW4gJXMiICUgKGVycm9yLCBzKSkKKyAgICAgICAgZXhjZXB0OiAjQ2F0Y2ggYW55IGVycm9yIGxvbmcgZW5vdWdoIHRvIHN0YXRlIHRoZSB0ZXN0IGNhc2UuCisgICAgICAgICAgICBwcmludCAiRVJST1I6IiwgcworICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBteWV4Y2VwdGlvbnMgPSBzZWxmLmdldGV4Y2VwdGlvbnMoKQorICAgICAgICBzZWxmLmNvbnRleHQuY2xlYXJfZmxhZ3MoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBhbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0luY29ycmVjdCBhbnN3ZXIgZm9yICcgKyBzICsgJyAtLSBnb3QgJyArIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKG15ZXhjZXB0aW9ucywgdGhlaXJleGNlcHRpb25zLAorICAgICAgICAgICAgICAnSW5jb3JyZWN0IGZsYWdzIHNldCBpbiAnICsgcyArICcgLS0gZ290ICcgKyBzdHIobXlleGNlcHRpb25zKSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZ2V0ZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtlIGZvciBlIGluIFNpZ25hbHMgaWYgc2VsZi5jb250ZXh0LmZsYWdzW2VdXQorCisgICAgZGVmIGNoYW5nZV9wcmVjaXNpb24oc2VsZiwgcHJlYyk6CisgICAgICAgIHNlbGYuY29udGV4dC5wcmVjID0gcHJlYworICAgIGRlZiBjaGFuZ2Vfcm91bmRpbmdfbWV0aG9kKHNlbGYsIHJvdW5kaW5nKToKKyAgICAgICAgc2VsZi5jb250ZXh0LnJvdW5kaW5nID0gcm91bmRpbmcKKyAgICBkZWYgY2hhbmdlX21pbl9leHBvbmVudChzZWxmLCBleHApOgorICAgICAgICBzZWxmLmNvbnRleHQuRW1pbiA9IGV4cAorICAgIGRlZiBjaGFuZ2VfbWF4X2V4cG9uZW50KHNlbGYsIGV4cCk6CisgICAgICAgIHNlbGYuY29udGV4dC5FbWF4ID0gZXhwCisgICAgZGVmIGNoYW5nZV9jbGFtcChzZWxmLCBjbGFtcCk6CisgICAgICAgIHNlbGYuY29udGV4dC5fY2xhbXAgPSBjbGFtcAorCisKKworIyBUaGUgZm9sbG93aW5nIGNsYXNzZXMgdGVzdCB0aGUgYmVoYXZpb3VyIG9mIERlY2ltYWwgYWNjb3JkaW5nIHRvIFBFUCAzMjcKKworY2xhc3MgRGVjaW1hbEV4cGxpY2l0Q29uc3RydWN0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgJycnVW5pdCB0ZXN0cyBmb3IgRXhwbGljaXQgQ29uc3RydWN0aW9uIGNhc2VzIG9mIERlY2ltYWwuJycnCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9lbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKCksIERlY2ltYWwoIjAiKSkKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Zyb21fTm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBEZWNpbWFsLCBOb25lKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfZnJvbV9pbnQoc2VsZik6CisKKyAgICAgICAgI3Bvc2l0aXZlCisgICAgICAgIGQgPSBEZWNpbWFsKDQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzQ1JykKKworICAgICAgICAjdmVyeSBsYXJnZSBwb3NpdGl2ZQorICAgICAgICBkID0gRGVjaW1hbCg1MDAwMDAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCAnNTAwMDAwMTIzJykKKworICAgICAgICAjbmVnYXRpdmUKKyAgICAgICAgZCA9IERlY2ltYWwoLTQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJy00NScpCisKKyAgICAgICAgI3plcm8KKyAgICAgICAgZCA9IERlY2ltYWwoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICcwJykKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Zyb21fc3RyaW5nKHNlbGYpOgorCisgICAgICAgICNlbXB0eQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKCcnKSksICdOYU4nKQorCisgICAgICAgICNpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCgnNDUnKSksICc0NScpCisKKyAgICAgICAgI2Zsb2F0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoJzQ1LjM0JykpLCAnNDUuMzQnKQorCisgICAgICAgICNlbmdpbmVlciBub3RhdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKCc0NWUyJykpLCAnNC41RSszJykKKworICAgICAgICAjanVzdCBub3QgYSBudW1iZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCgndWdseScpKSwgJ05hTicpCisKKyAgICAgICAgI2xlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgcGVybWl0dGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoJzEuM0U0IFxuJykpLCAnMS4zRSs0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCgnICAtNy44OScpKSwgJy03Ljg5JykKKworICAgICAgICAjdW5pY29kZSBzdHJpbmdzIHNob3VsZCBiZSBwZXJtaXR0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCh1JzBFLTAxNycpKSwgJzBFLTE3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCh1JzQ1JykpLCAnNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKHUnLUluZicpKSwgJy1JbmZpbml0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwodSdOYU4xMjMnKSksICdOYU4xMjMnKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfZnJvbV90dXBsZXMoc2VsZik6CisKKyAgICAgICAgI3plcm8KKyAgICAgICAgZCA9IERlY2ltYWwoICgwLCAoMCwpLCAwKSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCAnMCcpCisKKyAgICAgICAgI2ludAorICAgICAgICBkID0gRGVjaW1hbCggKDEsICg0LCA1KSwgMCkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJy00NScpCisKKyAgICAgICAgI2Zsb2F0CisgICAgICAgIGQgPSBEZWNpbWFsKCAoMCwgKDQsIDUsIDMsIDQpLCAtMikgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzQ1LjM0JykKKworICAgICAgICAjd2VpcmQKKyAgICAgICAgZCA9IERlY2ltYWwoICgxLCAoNCwgMywgNCwgOSwgMSwgMywgNSwgMywgNCksIC0yNSkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJy00LjM0OTEzNTM0RS0xNycpCisKKyAgICAgICAgI3dyb25nIG51bWJlciBvZiBpdGVtcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEZWNpbWFsLCAoMSwgKDQsIDMsIDQsIDksIDEpKSApCisKKyAgICAgICAgI2JhZCBzaWduCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERlY2ltYWwsICg4LCAoNCwgMywgNCwgOSwgMSksIDIpICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKDAuLCAoNCwgMywgNCwgOSwgMSksIDIpICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKERlY2ltYWwoMSksICg0LCAzLCA0LCA5LCAxKSwgMikpCisKKyAgICAgICAgI2JhZCBleHAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKDEsICg0LCAzLCA0LCA5LCAxKSwgJ3dyb25nIScpICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKDEsICg0LCAzLCA0LCA5LCAxKSwgMC4pICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKDEsICg0LCAzLCA0LCA5LCAxKSwgJzEnKSApCisKKyAgICAgICAgI2JhZCBjb2VmZmljaWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKDEsICg0LCAzLCA0LCBOb25lLCAxKSwgMikgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEZWNpbWFsLCAoMSwgKDQsIC0zLCA0LCA5LCAxKSwgMikgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEZWNpbWFsLCAoMSwgKDQsIDEwLCA0LCA5LCAxKSwgMikgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEZWNpbWFsLCAoMSwgKDQsIDMsIDQsICdhJywgMSksIDIpICkKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Zyb21fYm9vbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKERlY2ltYWwoMCkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKERlY2ltYWwoMSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoRmFsc2UpLCBEZWNpbWFsKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoVHJ1ZSksIERlY2ltYWwoMSkpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9mcm9tX0RlY2ltYWwoc2VsZik6CisKKyAgICAgICAgI3Bvc2l0aXZlCisgICAgICAgIGQgPSBEZWNpbWFsKDQ1KQorICAgICAgICBlID0gRGVjaW1hbChkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisKKyAgICAgICAgI3ZlcnkgbGFyZ2UgcG9zaXRpdmUKKyAgICAgICAgZCA9IERlY2ltYWwoNTAwMDAwMTIzKQorICAgICAgICBlID0gRGVjaW1hbChkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJzUwMDAwMDEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorCisgICAgICAgICNuZWdhdGl2ZQorICAgICAgICBkID0gRGVjaW1hbCgtNDUpCisgICAgICAgIGUgPSBEZWNpbWFsKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAnLTQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisKKyAgICAgICAgI3plcm8KKyAgICAgICAgZCA9IERlY2ltYWwoMCkKKyAgICAgICAgZSA9IERlY2ltYWwoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9mcm9tX2Zsb2F0KHNlbGYpOgorICAgICAgICByID0gRGVjaW1hbCgwLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyKSwgRGVjaW1hbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIociksCisgICAgICAgICAgICAgICAgJzAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1NzgyNzAyMTE4MTU4MzQwNDU0MTAxNTYyNScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEZWNpbWFsKGZsb2F0KCduYW4nKSkuaXNfcW5hbigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbChmbG9hdCgnaW5mJykpLmlzX2luZmluaXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEZWNpbWFsKGZsb2F0KCctaW5mJykpLmlzX2luZmluaXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoZmxvYXQoJ25hbicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJ05hTicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbChmbG9hdCgnaW5mJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnSW5maW5pdHknKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoZmxvYXQoJy1pbmYnKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCctSW5maW5pdHknKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoZmxvYXQoJy0wLjAnKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCctMCcpKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjAwKToKKyAgICAgICAgICAgIHggPSByYW5kb20uZXhwb3ZhcmlhdGUoMC4wMSkgKiAocmFuZG9tLnJhbmRvbSgpICogMi4wIC0gMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBmbG9hdChEZWNpbWFsKHgpKSkgIyByb3VuZHRyaXAKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2NvbnRleHRfY3JlYXRlX2RlY2ltYWwoc2VsZik6CisKKyAgICAgICAgbmMgPSBjb3B5LmNvcHkoZ2V0Y29udGV4dCgpKQorICAgICAgICBuYy5wcmVjID0gMworCisgICAgICAgICMgZW1wdHkKKyAgICAgICAgZCA9IERlY2ltYWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzAnKQorICAgICAgICBkID0gbmMuY3JlYXRlX2RlY2ltYWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzAnKQorCisgICAgICAgICMgZnJvbSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbmMuY3JlYXRlX2RlY2ltYWwsIE5vbmUpCisKKyAgICAgICAgIyBmcm9tIGludAorICAgICAgICBkID0gbmMuY3JlYXRlX2RlY2ltYWwoNDU2KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgRGVjaW1hbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYy5jcmVhdGVfZGVjaW1hbCg0NTY3OCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbmMuY3JlYXRlX2RlY2ltYWwoJzQ1N0UrMicpKQorCisgICAgICAgICMgZnJvbSBzdHJpbmcKKyAgICAgICAgZCA9IERlY2ltYWwoJzQ1Njc4OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCAnNDU2Nzg5JykKKyAgICAgICAgZCA9IG5jLmNyZWF0ZV9kZWNpbWFsKCc0NTY3ODknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzQuNTdFKzUnKQorICAgICAgICAjIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2Ugc2hvdWxkIHJlc3VsdCBpbiBhIE5hTjsKKyAgICAgICAgIyBzcGFjZXMgYXJlIGFscmVhZHkgY2hlY2tlZCBpbiBDb3dsaXNoYXcncyB0ZXN0LXN1aXRlLCBzbworICAgICAgICAjIGhlcmUgd2UganVzdCBjaGVjayB0aGF0IGEgdHJhaWxpbmcgbmV3bGluZSByZXN1bHRzIGluIGEgTmFOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG5jLmNyZWF0ZV9kZWNpbWFsKCczLjE0XG4nKSksICdOYU4nKQorCisgICAgICAgICMgZnJvbSB0dXBsZXMKKyAgICAgICAgZCA9IERlY2ltYWwoICgxLCAoNCwgMywgNCwgOSwgMSwgMywgNSwgMywgNCksIC0yNSkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJy00LjM0OTEzNTM0RS0xNycpCisgICAgICAgIGQgPSBuYy5jcmVhdGVfZGVjaW1hbCggKDEsICg0LCAzLCA0LCA5LCAxLCAzLCA1LCAzLCA0KSwgLTI1KSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCAnLTQuMzVFLTE3JykKKworICAgICAgICAjIGZyb20gRGVjaW1hbAorICAgICAgICBwcmV2ZGVjID0gRGVjaW1hbCg1MDAwMDAxMjMpCisgICAgICAgIGQgPSBEZWNpbWFsKHByZXZkZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCAnNTAwMDAwMTIzJykKKyAgICAgICAgZCA9IG5jLmNyZWF0ZV9kZWNpbWFsKHByZXZkZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCAnNS4wMEUrOCcpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2RpZ2l0cyhzZWxmKToKKyAgICAgICAgdGVzdF92YWx1ZXMgPSB7CisgICAgICAgICAgICB1J1x1ZmYxMSc6ICcxJywKKyAgICAgICAgICAgIHUnXHUwNjYwLlx1MDY2MFx1MDY2M1x1MDY2N1x1MDY2MmUtXHUwNjYzJyA6ICcwLjAwMDAzNzInLAorICAgICAgICAgICAgdSctbmFuXHUwYzY4XHUwYzZhXHUwYzY2XHUwYzY2JyA6ICctTmFOMjQwMCcsCisgICAgICAgICAgICB9CisgICAgICAgIGZvciBpbnB1dCwgZXhwZWN0ZWQgaW4gdGVzdF92YWx1ZXMuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoaW5wdXQpKSwgZXhwZWN0ZWQpCisKKworY2xhc3MgRGVjaW1hbEltcGxpY2l0Q29uc3RydWN0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgJycnVW5pdCB0ZXN0cyBmb3IgSW1wbGljaXQgQ29uc3RydWN0aW9uIGNhc2VzIG9mIERlY2ltYWwuJycnCisKKyAgICBkZWYgdGVzdF9pbXBsaWNpdF9mcm9tX05vbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgJ0RlY2ltYWwoNSkgKyBOb25lJywgZ2xvYmFscygpKQorCisgICAgZGVmIHRlc3RfaW1wbGljaXRfZnJvbV9pbnQoc2VsZik6CisgICAgICAgICNub3JtYWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCg1KSArIDQ1KSwgJzUwJykKKyAgICAgICAgI2V4Y2VlZGluZyBwcmVjaXNpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDUpICsgMTIzNDU2Nzg5MDAwLCBEZWNpbWFsKDEyMzQ1Njc4OTAwMCkpCisKKyAgICBkZWYgdGVzdF9pbXBsaWNpdF9mcm9tX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnRGVjaW1hbCg1KSArICIzIicsIGdsb2JhbHMoKSkKKworICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2Zyb21fZmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgJ0RlY2ltYWwoNSkgKyAyLjInLCBnbG9iYWxzKCkpCisKKyAgICBkZWYgdGVzdF9pbXBsaWNpdF9mcm9tX0RlY2ltYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCg1KSArIERlY2ltYWwoNDUpLCBEZWNpbWFsKDUwKSkKKworICAgIGRlZiB0ZXN0X3JvcChzZWxmKToKKyAgICAgICAgIyBBbGxvdyBvdGhlciBjbGFzc2VzIHRvIGJlIHRyYWluZWQgdG8gaW50ZXJhY3Qgd2l0aCBEZWNpbWFscworICAgICAgICBjbGFzcyBFOgorICAgICAgICAgICAgZGVmIF9fZGl2bW9kX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZGl2bW9kICcgKyBzdHIob3RoZXIpCisgICAgICAgICAgICBkZWYgX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHIob3RoZXIpICsgJyByZGl2bW9kJworICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdsdCAnICsgc3RyKG90aGVyKQorICAgICAgICAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdndCAnICsgc3RyKG90aGVyKQorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdsZSAnICsgc3RyKG90aGVyKQorICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZSAnICsgc3RyKG90aGVyKQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdlcSAnICsgc3RyKG90aGVyKQorICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICduZSAnICsgc3RyKG90aGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKEUoKSwgRGVjaW1hbCgxMCkpLCAnZGl2bW9kIDEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoRGVjaW1hbCgxMCksIEUoKSksICcxMCByZGl2bW9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCdEZWNpbWFsKDEwKSA8IEUoKScpLCAnZ3QgMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ0RlY2ltYWwoMTApID4gRSgpJyksICdsdCAxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnRGVjaW1hbCgxMCkgPD0gRSgpJyksICdnZSAxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnRGVjaW1hbCgxMCkgPj0gRSgpJyksICdsZSAxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnRGVjaW1hbCgxMCkgPT0gRSgpJyksICdlcSAxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnRGVjaW1hbCgxMCkgIT0gRSgpJyksICduZSAxMCcpCisKKyAgICAgICAgIyBpbnNlcnQgb3BlcmF0b3IgbWV0aG9kcyBhbmQgdGhlbiBleGVyY2lzZSB0aGVtCisgICAgICAgIG9wbGlzdCA9IFsKKyAgICAgICAgICAgICgnKycsICdfX2FkZF9fJywgJ19fcmFkZF9fJyksCisgICAgICAgICAgICAoJy0nLCAnX19zdWJfXycsICdfX3JzdWJfXycpLAorICAgICAgICAgICAgKCcqJywgJ19fbXVsX18nLCAnX19ybXVsX18nKSwKKyAgICAgICAgICAgICgnJScsICdfX21vZF9fJywgJ19fcm1vZF9fJyksCisgICAgICAgICAgICAoJy8vJywgJ19fZmxvb3JkaXZfXycsICdfX3JmbG9vcmRpdl9fJyksCisgICAgICAgICAgICAoJyoqJywgJ19fcG93X18nLCAnX19ycG93X18nKQorICAgICAgICBdCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgaWYgMSAvIDIgPT0gMDoKKyAgICAgICAgICAgICAgICAjIHRlc3Rpbmcgd2l0aCBjbGFzc2ljIGRpdmlzaW9uLCBzbyBhZGQgX19kaXZfXworICAgICAgICAgICAgICAgIG9wbGlzdC5hcHBlbmQoKCcvJywgJ19fZGl2X18nLCAnX19yZGl2X18nKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyB0ZXN0aW5nIHdpdGggLVFuZXcsIHNvIGFkZCBfX3RydWVkaXZfXworICAgICAgICAgICAgICAgIG9wbGlzdC5hcHBlbmQoKCcvJywgJ19fdHJ1ZWRpdl9fJywgJ19fcnRydWVkaXZfXycpKQorCisgICAgICAgIGZvciBzeW0sIGxvcCwgcm9wIGluIG9wbGlzdDoKKyAgICAgICAgICAgIHNldGF0dHIoRSwgbG9wLCBsYW1iZGEgc2VsZiwgb3RoZXI6ICdzdHInICsgbG9wICsgc3RyKG90aGVyKSkKKyAgICAgICAgICAgIHNldGF0dHIoRSwgcm9wLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHN0cihvdGhlcikgKyByb3AgKyAnc3RyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnRSgpJyArIHN5bSArICdEZWNpbWFsKDEwKScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyJyArIGxvcCArICcxMCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ0RlY2ltYWwoMTApJyArIHN5bSArICdFKCknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwJyArIHJvcCArICdzdHInKQorCisKK2NsYXNzIERlY2ltYWxGb3JtYXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAnJydVbml0IHRlc3RzIGZvciB0aGUgZm9ybWF0IGZ1bmN0aW9uLicnJworICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmcoc2VsZik6CisgICAgICAgICMgdHJpcGxlcyBnaXZpbmcgYSBmb3JtYXQsIGEgRGVjaW1hbCwgYW5kIHRoZSBleHBlY3RlZCByZXN1bHQKKyAgICAgICAgdGVzdF92YWx1ZXMgPSBbCisgICAgICAgICAgICAoJ2UnLCAnMEUtMTUnLCAnMGUtMTUnKSwKKyAgICAgICAgICAgICgnZScsICcyLjNFLTE1JywgJzIuM2UtMTUnKSwKKyAgICAgICAgICAgICgnZScsICcyLjMwRSsyJywgJzIuMzBlKzInKSwgIyBwcmVzZXJ2ZSBzaWduaWZpY2FudCB6ZXJvcworICAgICAgICAgICAgKCdlJywgJzIuMzAwMDBFLTE1JywgJzIuMzAwMDBlLTE1JyksCisgICAgICAgICAgICAoJ2UnLCAnMS4yMzQ1Njc4OTEyMzQ1Njc4OWU0MCcsICcxLjIzNDU2Nzg5MTIzNDU2Nzg5ZSs0MCcpLAorICAgICAgICAgICAgKCdlJywgJzEuNScsICcxLjVlKzAnKSwKKyAgICAgICAgICAgICgnZScsICcwLjE1JywgJzEuNWUtMScpLAorICAgICAgICAgICAgKCdlJywgJzAuMDE1JywgJzEuNWUtMicpLAorICAgICAgICAgICAgKCdlJywgJzAuMDAwMDAwMDAwMDAxNScsICcxLjVlLTEyJyksCisgICAgICAgICAgICAoJ2UnLCAnMTUuMCcsICcxLjUwZSsxJyksCisgICAgICAgICAgICAoJ2UnLCAnLTE1JywgJy0xLjVlKzEnKSwKKyAgICAgICAgICAgICgnZScsICcwJywgJzBlKzAnKSwKKyAgICAgICAgICAgICgnZScsICcwRTEnLCAnMGUrMScpLAorICAgICAgICAgICAgKCdlJywgJzAuMCcsICcwZS0xJyksCisgICAgICAgICAgICAoJ2UnLCAnMC4wMCcsICcwZS0yJyksCisgICAgICAgICAgICAoJy42ZScsICcwRS0xNScsICcwLjAwMDAwMGUtOScpLAorICAgICAgICAgICAgKCcuNmUnLCAnMCcsICcwLjAwMDAwMGUrNicpLAorICAgICAgICAgICAgKCcuNmUnLCAnOS45OTk5OTknLCAnOS45OTk5OTllKzAnKSwKKyAgICAgICAgICAgICgnLjZlJywgJzkuOTk5OTk5OScsICcxLjAwMDAwMGUrMScpLAorICAgICAgICAgICAgKCcuNmUnLCAnLTEuMjNlNScsICctMS4yMzAwMDBlKzUnKSwKKyAgICAgICAgICAgICgnLjZlJywgJzEuMjM0NTY3ODllLTMnLCAnMS4yMzQ1NjhlLTMnKSwKKyAgICAgICAgICAgICgnZicsICcwJywgJzAnKSwKKyAgICAgICAgICAgICgnZicsICcwLjAnLCAnMC4wJyksCisgICAgICAgICAgICAoJ2YnLCAnMEUtMicsICcwLjAwJyksCisgICAgICAgICAgICAoJ2YnLCAnMC4wMEUtOCcsICcwLjAwMDAwMDAwMDAnKSwKKyAgICAgICAgICAgICgnZicsICcwRTEnLCAnMCcpLCAjIGxvc2VzIGV4cG9uZW50IGluZm9ybWF0aW9uCisgICAgICAgICAgICAoJ2YnLCAnMy4yRTEnLCAnMzInKSwKKyAgICAgICAgICAgICgnZicsICczLjJFMicsICczMjAnKSwKKyAgICAgICAgICAgICgnZicsICczLjIwRTInLCAnMzIwJyksCisgICAgICAgICAgICAoJ2YnLCAnMy4yMDBFMicsICczMjAuMCcpLAorICAgICAgICAgICAgKCdmJywgJzMuMkUtNicsICcwLjAwMDAwMzInKSwKKyAgICAgICAgICAgICgnLjZmJywgJzBFLTE1JywgJzAuMDAwMDAwJyksICMgYWxsIHplcm9zIHRyZWF0ZWQgZXF1YWxseQorICAgICAgICAgICAgKCcuNmYnLCAnMEUxJywgJzAuMDAwMDAwJyksCisgICAgICAgICAgICAoJy42ZicsICcwJywgJzAuMDAwMDAwJyksCisgICAgICAgICAgICAoJy4wZicsICcwJywgJzAnKSwgIyBubyBkZWNpbWFsIHBvaW50CisgICAgICAgICAgICAoJy4wZicsICcwZS0yJywgJzAnKSwKKyAgICAgICAgICAgICgnLjBmJywgJzMuMTQxNTkyNjUnLCAnMycpLAorICAgICAgICAgICAgKCcuMWYnLCAnMy4xNDE1OTI2NScsICczLjEnKSwKKyAgICAgICAgICAgICgnLjRmJywgJzMuMTQxNTkyNjUnLCAnMy4xNDE2JyksCisgICAgICAgICAgICAoJy42ZicsICczLjE0MTU5MjY1JywgJzMuMTQxNTkzJyksCisgICAgICAgICAgICAoJy43ZicsICczLjE0MTU5MjY1JywgJzMuMTQxNTkyNicpLCAjIHJvdW5kLWhhbGYtZXZlbiEKKyAgICAgICAgICAgICgnLjhmJywgJzMuMTQxNTkyNjUnLCAnMy4xNDE1OTI2NScpLAorICAgICAgICAgICAgKCcuOWYnLCAnMy4xNDE1OTI2NScsICczLjE0MTU5MjY1MCcpLAorCisgICAgICAgICAgICAoJ2cnLCAnMCcsICcwJyksCisgICAgICAgICAgICAoJ2cnLCAnMC4wJywgJzAuMCcpLAorICAgICAgICAgICAgKCdnJywgJzBFMScsICcwZSsxJyksCisgICAgICAgICAgICAoJ0cnLCAnMEUxJywgJzBFKzEnKSwKKyAgICAgICAgICAgICgnZycsICcwRS01JywgJzAuMDAwMDAnKSwKKyAgICAgICAgICAgICgnZycsICcwRS02JywgJzAuMDAwMDAwJyksCisgICAgICAgICAgICAoJ2cnLCAnMEUtNycsICcwZS03JyksCisgICAgICAgICAgICAoJ2cnLCAnLTBFMicsICctMGUrMicpLAorICAgICAgICAgICAgKCcuMGcnLCAnMy4xNDE1OTI2NScsICczJyksICAjIDAgc2lnIGZpZyAtPiAxIHNpZyBmaWcKKyAgICAgICAgICAgICgnLjFnJywgJzMuMTQxNTkyNjUnLCAnMycpLAorICAgICAgICAgICAgKCcuMmcnLCAnMy4xNDE1OTI2NScsICczLjEnKSwKKyAgICAgICAgICAgICgnLjVnJywgJzMuMTQxNTkyNjUnLCAnMy4xNDE2JyksCisgICAgICAgICAgICAoJy43ZycsICczLjE0MTU5MjY1JywgJzMuMTQxNTkzJyksCisgICAgICAgICAgICAoJy44ZycsICczLjE0MTU5MjY1JywgJzMuMTQxNTkyNicpLCAjIHJvdW5kLWhhbGYtZXZlbiEKKyAgICAgICAgICAgICgnLjlnJywgJzMuMTQxNTkyNjUnLCAnMy4xNDE1OTI2NScpLAorICAgICAgICAgICAgKCcuMTBnJywgJzMuMTQxNTkyNjUnLCAnMy4xNDE1OTI2NScpLCAjIGRvbid0IHBhZAorCisgICAgICAgICAgICAoJyUnLCAnMEUxJywgJzAlJyksCisgICAgICAgICAgICAoJyUnLCAnMEUwJywgJzAlJyksCisgICAgICAgICAgICAoJyUnLCAnMEUtMScsICcwJScpLAorICAgICAgICAgICAgKCclJywgJzBFLTInLCAnMCUnKSwKKyAgICAgICAgICAgICgnJScsICcwRS0zJywgJzAuMCUnKSwKKyAgICAgICAgICAgICgnJScsICcwRS00JywgJzAuMDAlJyksCisKKyAgICAgICAgICAgICgnLjMlJywgJzAnLCAnMC4wMDAlJyksICMgYWxsIHplcm9zIHRyZWF0ZWQgZXF1YWxseQorICAgICAgICAgICAgKCcuMyUnLCAnMEUxMCcsICcwLjAwMCUnKSwKKyAgICAgICAgICAgICgnLjMlJywgJzBFLTEwJywgJzAuMDAwJScpLAorICAgICAgICAgICAgKCcuMyUnLCAnMi4zNCcsICcyMzQuMDAwJScpLAorICAgICAgICAgICAgKCcuMyUnLCAnMS4yMzQ1NjcnLCAnMTIzLjQ1NyUnKSwKKyAgICAgICAgICAgICgnLjAlJywgJzEuMjMnLCAnMTIzJScpLAorCisgICAgICAgICAgICAoJ2UnLCAnTmFOJywgJ05hTicpLAorICAgICAgICAgICAgKCdmJywgJy1OYU4xMjMnLCAnLU5hTjEyMycpLAorICAgICAgICAgICAgKCcrZycsICdOYU40NTYnLCAnK05hTjQ1NicpLAorICAgICAgICAgICAgKCcuM2UnLCAnSW5mJywgJ0luZmluaXR5JyksCisgICAgICAgICAgICAoJy4xNmYnLCAnLUluZicsICctSW5maW5pdHknKSwKKyAgICAgICAgICAgICgnLjBnJywgJy1zTmFOJywgJy1zTmFOJyksCisKKyAgICAgICAgICAgICgnJywgJzEuMDAnLCAnMS4wMCcpLAorCisgICAgICAgICAgICAjIHRlc3QgYWxpZ25tZW50IGFuZCBwYWRkaW5nCisgICAgICAgICAgICAoJzYnLCAnMTIzJywgJyAgIDEyMycpLAorICAgICAgICAgICAgKCc8NicsICcxMjMnLCAnMTIzICAgJyksCisgICAgICAgICAgICAoJz42JywgJzEyMycsICcgICAxMjMnKSwKKyAgICAgICAgICAgICgnXjYnLCAnMTIzJywgJyAxMjMgICcpLAorICAgICAgICAgICAgKCc9KzYnLCAnMTIzJywgJysgIDEyMycpLAorICAgICAgICAgICAgKCcjPDEwJywgJ05hTicsICdOYU4jIyMjIyMjJyksCisgICAgICAgICAgICAoJyM8MTAnLCAnLTQuMycsICctNC4zIyMjIyMjJyksCisgICAgICAgICAgICAoJyM8KzEwJywgJzAuMDEzMCcsICcrMC4wMTMwIyMjJyksCisgICAgICAgICAgICAoJyM8IDEwJywgJzAuMDEzMCcsICcgMC4wMTMwIyMjJyksCisgICAgICAgICAgICAoJ0A+MTAnLCAnLUluZicsICdALUluZmluaXR5JyksCisgICAgICAgICAgICAoJyM+NScsICctSW5mJywgJy1JbmZpbml0eScpLAorICAgICAgICAgICAgKCc/XjUnLCAnMTIzJywgJz8xMjM/JyksCisgICAgICAgICAgICAoJyVeNicsICcxMjMnLCAnJTEyMyUlJyksCisgICAgICAgICAgICAoJyBeNicsICctNDUuNicsICctNDUuNiAnKSwKKyAgICAgICAgICAgICgnLz0xMCcsICctNDUuNicsICctLy8vLy80NS42JyksCisgICAgICAgICAgICAoJy89KzEwJywgJzQ1LjYnLCAnKy8vLy8vNDUuNicpLAorICAgICAgICAgICAgKCcvPSAxMCcsICc0NS42JywgJyAvLy8vLzQ1LjYnKSwKKworICAgICAgICAgICAgIyB0aG91c2FuZHMgc2VwYXJhdG9yCisgICAgICAgICAgICAoJywnLCAnMTIzNDU2NycsICcxLDIzNCw1NjcnKSwKKyAgICAgICAgICAgICgnLCcsICcxMjM0NTYnLCAnMTIzLDQ1NicpLAorICAgICAgICAgICAgKCcsJywgJzEyMzQ1JywgJzEyLDM0NScpLAorICAgICAgICAgICAgKCcsJywgJzEyMzQnLCAnMSwyMzQnKSwKKyAgICAgICAgICAgICgnLCcsICcxMjMnLCAnMTIzJyksCisgICAgICAgICAgICAoJywnLCAnMTInLCAnMTInKSwKKyAgICAgICAgICAgICgnLCcsICcxJywgJzEnKSwKKyAgICAgICAgICAgICgnLCcsICcwJywgJzAnKSwKKyAgICAgICAgICAgICgnLCcsICctMTIzNDU2NycsICctMSwyMzQsNTY3JyksCisgICAgICAgICAgICAoJywnLCAnLTEyMzQ1NicsICctMTIzLDQ1NicpLAorICAgICAgICAgICAgKCc3LCcsICcxMjM0NTYnLCAnMTIzLDQ1NicpLAorICAgICAgICAgICAgKCc4LCcsICcxMjM0NTYnLCAnIDEyMyw0NTYnKSwKKyAgICAgICAgICAgICgnMDgsJywgJzEyMzQ1NicsICcwLDEyMyw0NTYnKSwgIyBzcGVjaWFsIGNhc2U6IGV4dHJhIDAgbmVlZGVkCisgICAgICAgICAgICAoJyswOCwnLCAnMTIzNDU2JywgJysxMjMsNDU2JyksICMgYnV0IG5vdCBpZiB0aGVyZSdzIGEgc2lnbgorICAgICAgICAgICAgKCcgMDgsJywgJzEyMzQ1NicsICcgMTIzLDQ1NicpLAorICAgICAgICAgICAgKCcwOCwnLCAnLTEyMzQ1NicsICctMTIzLDQ1NicpLAorICAgICAgICAgICAgKCcrMDksJywgJzEyMzQ1NicsICcrMCwxMjMsNDU2JyksCisgICAgICAgICAgICAjIC4uLiB3aXRoIGZyYWN0aW9uYWwgcGFydC4uLgorICAgICAgICAgICAgKCcwNywnLCAnMTIzNC41NicsICcxLDIzNC41NicpLAorICAgICAgICAgICAgKCcwOCwnLCAnMTIzNC41NicsICcxLDIzNC41NicpLAorICAgICAgICAgICAgKCcwOSwnLCAnMTIzNC41NicsICcwMSwyMzQuNTYnKSwKKyAgICAgICAgICAgICgnMDEwLCcsICcxMjM0LjU2JywgJzAwMSwyMzQuNTYnKSwKKyAgICAgICAgICAgICgnMDExLCcsICcxMjM0LjU2JywgJzAsMDAxLDIzNC41NicpLAorICAgICAgICAgICAgKCcwMTIsJywgJzEyMzQuNTYnLCAnMCwwMDEsMjM0LjU2JyksCisgICAgICAgICAgICAoJzA4LC4xZicsICcxMjM0LjUnLCAnMDEsMjM0LjUnKSwKKyAgICAgICAgICAgICMgbm8gdGhvdXNhbmRzIHNlcGFyYXRvcnMgaW4gZnJhY3Rpb24gcGFydAorICAgICAgICAgICAgKCcsJywgJzEuMjM0NTY3ODknLCAnMS4yMzQ1Njc4OScpLAorICAgICAgICAgICAgKCcsJScsICcxMjMuNDU2Nzg5JywgJzEyLDM0NS42Nzg5JScpLAorICAgICAgICAgICAgKCcsZScsICcxMjM0NTYnLCAnMS4yMzQ1NmUrNScpLAorICAgICAgICAgICAgKCcsRScsICcxMjM0NTYnLCAnMS4yMzQ1NkUrNScpLAorCisgICAgICAgICAgICAjIGlzc3VlIDY4NTAKKyAgICAgICAgICAgICgnYT0tNy4wJywgJzAuMTIzNDUnLCAnYWFhYTAuMScpLAorICAgICAgICAgICAgXQorICAgICAgICBmb3IgZm10LCBkLCByZXN1bHQgaW4gdGVzdF92YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChEZWNpbWFsKGQpLCBmbXQpLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9uX2Zvcm1hdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBsb2NhbGUgaW1wb3J0IENIQVJfTUFYCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgU2V0IHVwIHNvbWUgbG9jYWxlY29udi1saWtlIGRpY3Rpb25hcmllcworICAgICAgICBlbl9VUyA9IHsKKyAgICAgICAgICAgICdkZWNpbWFsX3BvaW50JyA6ICcuJywKKyAgICAgICAgICAgICdncm91cGluZycgOiBbMywgMywgMF0sCisgICAgICAgICAgICAndGhvdXNhbmRzX3NlcCc6ICcsJworICAgICAgICAgICAgfQorCisgICAgICAgIGZyX0ZSID0geworICAgICAgICAgICAgJ2RlY2ltYWxfcG9pbnQnIDogJywnLAorICAgICAgICAgICAgJ2dyb3VwaW5nJyA6IFtDSEFSX01BWF0sCisgICAgICAgICAgICAndGhvdXNhbmRzX3NlcCcgOiAnJworICAgICAgICAgICAgfQorCisgICAgICAgIHJ1X1JVID0geworICAgICAgICAgICAgJ2RlY2ltYWxfcG9pbnQnIDogJywnLAorICAgICAgICAgICAgJ2dyb3VwaW5nJyA6IFszLCAzLCAwXSwKKyAgICAgICAgICAgICd0aG91c2FuZHNfc2VwJyA6ICcgJworICAgICAgICAgICAgfQorCisgICAgICAgIGNyYXp5ID0geworICAgICAgICAgICAgJ2RlY2ltYWxfcG9pbnQnIDogJyYnLAorICAgICAgICAgICAgJ2dyb3VwaW5nJyA6IFsxLCA0LCAyLCBDSEFSX01BWF0sCisgICAgICAgICAgICAndGhvdXNhbmRzX3NlcCcgOiAnLScKKyAgICAgICAgICAgIH0KKworCisgICAgICAgIGRlZiBnZXRfZm10KHgsIGxvY2FsZSwgZm10PSduJyk6CisgICAgICAgICAgICByZXR1cm4gRGVjaW1hbC5fX2Zvcm1hdF9fKERlY2ltYWwoeCksIGZtdCwgX2xvY2FsZWNvbnY9bG9jYWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdChEZWNpbWFsKCcxMi43JyksIGVuX1VTKSwgJzEyLjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoRGVjaW1hbCgnMTIuNycpLCBmcl9GUiksICcxMiw3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KERlY2ltYWwoJzEyLjcnKSwgcnVfUlUpLCAnMTIsNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdChEZWNpbWFsKCcxMi43JyksIGNyYXp5KSwgJzEtMiY3JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5LCBlbl9VUyksICcxMjMsNDU2LDc4OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIGZyX0ZSKSwgJzEyMzQ1Njc4OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIHJ1X1JVKSwgJzEyMyA0NTYgNzg5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OTAxMjMsIGNyYXp5KSwgJzEyMzQ1Ni03OC05MDEyLTMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIGVuX1VTLCAnLjZuJyksICcxLjIzNDU3ZSs4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OSwgZnJfRlIsICcuNm4nKSwgJzEsMjM0NTdlKzgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5LCBydV9SVSwgJy42bicpLCAnMSwyMzQ1N2UrOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIGNyYXp5LCAnLjZuJyksICcxJjIzNDU3ZSs4JykKKworICAgICAgICAjIHplcm8gcGFkZGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNCwgZnJfRlIsICcwM24nKSwgJzEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNCwgZnJfRlIsICcwNG4nKSwgJzEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNCwgZnJfRlIsICcwNW4nKSwgJzAxMjM0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQsIGZyX0ZSLCAnMDZuJyksICcwMDEyMzQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NSwgZW5fVVMsICcwNW4nKSwgJzEyLDM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NSwgZW5fVVMsICcwNm4nKSwgJzEyLDM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NSwgZW5fVVMsICcwN24nKSwgJzAxMiwzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDUsIGVuX1VTLCAnMDhuJyksICcwLDAxMiwzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDUsIGVuX1VTLCAnMDluJyksICcwLDAxMiwzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDUsIGVuX1VTLCAnMDEwbicpLCAnMDAsMDEyLDM0NScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwNm4nKSwgJzEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwN24nKSwgJzEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwOG4nKSwgJzEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwOW4nKSwgJzAxLTIzNDUtNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTYsIGNyYXp5LCAnMDEwbicpLCAnMC0wMS0yMzQ1LTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzAxMW4nKSwgJzAtMDEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwMTJuJyksICcwMC0wMS0yMzQ1LTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzAxM24nKSwgJzAwMC0wMS0yMzQ1LTYnKQorCisKK2NsYXNzIERlY2ltYWxBcml0aG1ldGljT3BlcmF0b3JzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgJycnVW5pdCB0ZXN0cyBmb3IgYWxsIGFyaXRobWV0aWMgb3BlcmF0b3JzLCBiaW5hcnkgYW5kIHVuYXJ5LicnJworCisgICAgZGVmIHRlc3RfYWRkaXRpb24oc2VsZik6CisKKyAgICAgICAgZDEgPSBEZWNpbWFsKCctMTEuMScpCisgICAgICAgIGQyID0gRGVjaW1hbCgnMjIuMicpCisKKyAgICAgICAgI3R3byBEZWNpbWFscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxK2QyLCBEZWNpbWFsKCcxMS4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIrZDEsIERlY2ltYWwoJzExLjEnKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCBsZWZ0CisgICAgICAgIGMgPSBkMSArIDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBEZWNpbWFsKCctNi4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgcmlnaHQKKyAgICAgICAgYyA9IDUgKyBkMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIERlY2ltYWwoJy02LjEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjaW5saW5lIHdpdGggZGVjaW1hbAorICAgICAgICBkMSArPSBkMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBEZWNpbWFsKCcxMS4xJykpCisKKyAgICAgICAgI2lubGluZSB3aXRoIG90aGVyIHR5cGUKKyAgICAgICAgZDEgKz0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBEZWNpbWFsKCcxNi4xJykpCisKKyAgICBkZWYgdGVzdF9zdWJ0cmFjdGlvbihzZWxmKToKKworICAgICAgICBkMSA9IERlY2ltYWwoJy0xMS4xJykKKyAgICAgICAgZDIgPSBEZWNpbWFsKCcyMi4yJykKKworICAgICAgICAjdHdvIERlY2ltYWxzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEtZDIsIERlY2ltYWwoJy0zMy4zJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDItZDEsIERlY2ltYWwoJzMzLjMnKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCBsZWZ0CisgICAgICAgIGMgPSBkMSAtIDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBEZWNpbWFsKCctMTYuMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYyksIHR5cGUoZDEpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIHJpZ2h0CisgICAgICAgIGMgPSA1IC0gZDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBEZWNpbWFsKCcxNi4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI2lubGluZSB3aXRoIGRlY2ltYWwKKyAgICAgICAgZDEgLT0gZDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnLTMzLjMnKSkKKworICAgICAgICAjaW5saW5lIHdpdGggb3RoZXIgdHlwZQorICAgICAgICBkMSAtPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJy0zOC4zJykpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsaWNhdGlvbihzZWxmKToKKworICAgICAgICBkMSA9IERlY2ltYWwoJy01JykKKyAgICAgICAgZDIgPSBEZWNpbWFsKCczJykKKworICAgICAgICAjdHdvIERlY2ltYWxzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEqZDIsIERlY2ltYWwoJy0xNScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyKmQxLCBEZWNpbWFsKCctMTUnKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCBsZWZ0CisgICAgICAgIGMgPSBkMSAqIDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBEZWNpbWFsKCctMjUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCByaWdodAorICAgICAgICBjID0gNSAqIGQxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnLTI1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI2lubGluZSB3aXRoIGRlY2ltYWwKKyAgICAgICAgZDEgKj0gZDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnLTE1JykpCisKKyAgICAgICAgI2lubGluZSB3aXRoIG90aGVyIHR5cGUKKyAgICAgICAgZDEgKj0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBEZWNpbWFsKCctNzUnKSkKKworICAgIGRlZiB0ZXN0X2RpdmlzaW9uKHNlbGYpOgorCisgICAgICAgIGQxID0gRGVjaW1hbCgnLTUnKQorICAgICAgICBkMiA9IERlY2ltYWwoJzInKQorCisgICAgICAgICN0d28gRGVjaW1hbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS9kMiwgRGVjaW1hbCgnLTIuNScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyL2QxLCBEZWNpbWFsKCctMC40JykpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgbGVmdAorICAgICAgICBjID0gZDEgLyA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnLTEuMjUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCByaWdodAorICAgICAgICBjID0gNCAvIGQxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnLTAuOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYyksIHR5cGUoZDEpKQorCisgICAgICAgICNpbmxpbmUgd2l0aCBkZWNpbWFsCisgICAgICAgIGQxIC89IGQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJy0yLjUnKSkKKworICAgICAgICAjaW5saW5lIHdpdGggb3RoZXIgdHlwZQorICAgICAgICBkMSAvPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJy0wLjYyNScpKQorCisgICAgZGVmIHRlc3RfZmxvb3JfZGl2aXNpb24oc2VsZik6CisKKyAgICAgICAgZDEgPSBEZWNpbWFsKCc1JykKKyAgICAgICAgZDIgPSBEZWNpbWFsKCcyJykKKworICAgICAgICAjdHdvIERlY2ltYWxzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEvL2QyLCBEZWNpbWFsKCcyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIvL2QxLCBEZWNpbWFsKCcwJykpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgbGVmdAorICAgICAgICBjID0gZDEgLy8gNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIERlY2ltYWwoJzEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCByaWdodAorICAgICAgICBjID0gNyAvLyBkMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIERlY2ltYWwoJzEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjaW5saW5lIHdpdGggZGVjaW1hbAorICAgICAgICBkMSAvLz0gZDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnMicpKQorCisgICAgICAgICNpbmxpbmUgd2l0aCBvdGhlciB0eXBlCisgICAgICAgIGQxIC8vPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJzEnKSkKKworICAgIGRlZiB0ZXN0X3Bvd2VyaW5nKHNlbGYpOgorCisgICAgICAgIGQxID0gRGVjaW1hbCgnNScpCisgICAgICAgIGQyID0gRGVjaW1hbCgnMicpCisKKyAgICAgICAgI3R3byBEZWNpbWFscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxKipkMiwgRGVjaW1hbCgnMjUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMioqZDEsIERlY2ltYWwoJzMyJykpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgbGVmdAorICAgICAgICBjID0gZDEgKiogNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIERlY2ltYWwoJzYyNScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYyksIHR5cGUoZDEpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIHJpZ2h0CisgICAgICAgIGMgPSA3ICoqIGQxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnMTY4MDcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjaW5saW5lIHdpdGggZGVjaW1hbAorICAgICAgICBkMSAqKj0gZDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnMjUnKSkKKworICAgICAgICAjaW5saW5lIHdpdGggb3RoZXIgdHlwZQorICAgICAgICBkMSAqKj0gNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBEZWNpbWFsKCczOTA2MjUnKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKworICAgICAgICBkMSA9IERlY2ltYWwoJzUnKQorICAgICAgICBkMiA9IERlY2ltYWwoJzInKQorCisgICAgICAgICN0d28gRGVjaW1hbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSVkMiwgRGVjaW1hbCgnMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyJWQxLCBEZWNpbWFsKCcyJykpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgbGVmdAorICAgICAgICBjID0gZDEgJSA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYyksIHR5cGUoZDEpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIHJpZ2h0CisgICAgICAgIGMgPSA3ICUgZDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBEZWNpbWFsKCcyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI2lubGluZSB3aXRoIGRlY2ltYWwKKyAgICAgICAgZDEgJT0gZDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnMScpKQorCisgICAgICAgICNpbmxpbmUgd2l0aCBvdGhlciB0eXBlCisgICAgICAgIGQxICU9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnMScpKQorCisgICAgZGVmIHRlc3RfZmxvb3JfZGl2X21vZHVsZShzZWxmKToKKworICAgICAgICBkMSA9IERlY2ltYWwoJzUnKQorICAgICAgICBkMiA9IERlY2ltYWwoJzInKQorCisgICAgICAgICN0d28gRGVjaW1hbHMKKyAgICAgICAgKHAsIHEpID0gZGl2bW9kKGQxLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBEZWNpbWFsKCcyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgRGVjaW1hbCgnMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocCksIHR5cGUoZDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocSksIHR5cGUoZDEpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIGxlZnQKKyAgICAgICAgKHAsIHEpID0gZGl2bW9kKGQxLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIERlY2ltYWwoJzEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCBEZWNpbWFsKCcxJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShwKSwgdHlwZShkMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShxKSwgdHlwZShkMSkpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgcmlnaHQKKyAgICAgICAgKHAsIHEpID0gZGl2bW9kKDcsIGQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIERlY2ltYWwoJzEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCBEZWNpbWFsKCcyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShwKSwgdHlwZShkMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShxKSwgdHlwZShkMSkpCisKKyAgICBkZWYgdGVzdF91bmFyeV9vcGVyYXRvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoK0RlY2ltYWwoNDUpLCBEZWNpbWFsKCs0NSkpICAgICAgICAgICAjICArCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLURlY2ltYWwoNDUpLCBEZWNpbWFsKC00NSkpICAgICAgICAgICAjICAtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKERlY2ltYWwoNDUpKSwgYWJzKERlY2ltYWwoLTQ1KSkpICAjIGFicworCisgICAgZGVmIHRlc3RfbmFuX2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICAjIGNvbXBhcmlzb25zIGludm9sdmluZyBzaWduYWxpbmcgbmFucyBzaWduYWwgSW52YWxpZE9wZXJhdGlvbgorCisgICAgICAgICMgb3JkZXIgY29tcGFyaXNvbnMgKDwsIDw9LCA+LCA+PSkgaW52b2x2aW5nIG9ubHkgcXVpZXQgbmFucworICAgICAgICAjIGFsc28gc2lnbmFsIEludmFsaWRPcGVyYXRpb24KKworICAgICAgICAjIGVxdWFsaXR5IGNvbXBhcmlzb25zICg9PSwgIT0pIGludm9sdmluZyBvbmx5IHF1aWV0IG5hbnMKKyAgICAgICAgIyBkb24ndCBzaWduYWwsIGJ1dCByZXR1cm4gRmFsc2Ugb3IgVHJ1ZSByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgbiA9IERlY2ltYWwoJ05hTicpCisgICAgICAgIHMgPSBEZWNpbWFsKCdzTmFOJykKKyAgICAgICAgaSA9IERlY2ltYWwoJ0luZicpCisgICAgICAgIGYgPSBEZWNpbWFsKCcyJykKKworICAgICAgICBxbmFuX3BhaXJzID0gKG4sIG4pLCAobiwgaSksIChpLCBuKSwgKG4sIGYpLCAoZiwgbikKKyAgICAgICAgc25hbl9wYWlycyA9IChzLCBuKSwgKG4sIHMpLCAocywgaSksIChpLCBzKSwgKHMsIGYpLCAoZiwgcyksIChzLCBzKQorICAgICAgICBvcmRlcl9vcHMgPSBvcGVyYXRvci5sdCwgb3BlcmF0b3IubGUsIG9wZXJhdG9yLmd0LCBvcGVyYXRvci5nZQorICAgICAgICBlcXVhbGl0eV9vcHMgPSBvcGVyYXRvci5lcSwgb3BlcmF0b3IubmUKKworICAgICAgICAjIHJlc3VsdHMgd2hlbiBJbnZhbGlkT3BlcmF0aW9uIGlzIG5vdCB0cmFwcGVkCisgICAgICAgIGZvciB4LCB5IGluIHFuYW5fcGFpcnMgKyBzbmFuX3BhaXJzOgorICAgICAgICAgICAgZm9yIG9wIGluIG9yZGVyX29wcyArIGVxdWFsaXR5X29wczoKKyAgICAgICAgICAgICAgICBnb3QgPSBvcCh4LCB5KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gVHJ1ZSBpZiBvcCBpcyBvcGVyYXRvci5uZSBlbHNlIEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhleHBlY3RlZCwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHswIXJ9IGZvciBvcGVyYXRvci57MX0oezIhcn0sIHszIXJ9KTsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvdCB7NCFyfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIG9wLl9fbmFtZV9fLCB4LCB5LCBnb3QpKQorCisgICAgICAgICMgcmVwZWF0IHRoZSBhYm92ZSwgYnV0IHRoaXMgdGltZSB0cmFwIHRoZSBJbnZhbGlkT3BlcmF0aW9uCisgICAgICAgIHdpdGggbG9jYWxjb250ZXh0KCkgYXMgY3R4OgorICAgICAgICAgICAgY3R4LnRyYXBzW0ludmFsaWRPcGVyYXRpb25dID0gMQorCisgICAgICAgICAgICBmb3IgeCwgeSBpbiBxbmFuX3BhaXJzOgorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBlcXVhbGl0eV9vcHM6CisgICAgICAgICAgICAgICAgICAgIGdvdCA9IG9wKHgsIHkpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gVHJ1ZSBpZiBvcCBpcyBvcGVyYXRvci5uZSBlbHNlIEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhwZWN0ZWQsIGdvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgezAhcn0gZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0b3IuezF9KHsyIXJ9LCB7MyFyfSk7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IHs0IXJ9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIG9wLl9fbmFtZV9fLCB4LCB5LCBnb3QpKQorCisgICAgICAgICAgICBmb3IgeCwgeSBpbiBzbmFuX3BhaXJzOgorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBlcXVhbGl0eV9vcHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEludmFsaWRPcGVyYXRpb24sIG9wZXJhdG9yLmVxLCB4LCB5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbnZhbGlkT3BlcmF0aW9uLCBvcGVyYXRvci5uZSwgeCwgeSkKKworICAgICAgICAgICAgZm9yIHgsIHkgaW4gcW5hbl9wYWlycyArIHNuYW5fcGFpcnM6CisgICAgICAgICAgICAgICAgZm9yIG9wIGluIG9yZGVyX29wczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW52YWxpZE9wZXJhdGlvbiwgb3AsIHgsIHkpCisKKyAgICBkZWYgdGVzdF9jb3B5X3NpZ24oc2VsZik6CisgICAgICAgIGQgPSBEZWNpbWFsKDEpLmNvcHlfc2lnbihEZWNpbWFsKC0yKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoMSkuY29weV9zaWduKC0yKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBEZWNpbWFsKDEpLmNvcHlfc2lnbiwgJy0yJykKKworIyBUaGUgZm9sbG93aW5nIGFyZSB0d28gZnVuY3Rpb25zIHVzZWQgdG8gdGVzdCB0aHJlYWRpbmcgaW4gdGhlIG5leHQgY2xhc3MKKworZGVmIHRoZnVuYzEoY2xzKToKKyAgICBkMSA9IERlY2ltYWwoMSkKKyAgICBkMyA9IERlY2ltYWwoMykKKyAgICB0ZXN0MSA9IGQxL2QzCisgICAgY2xzLnN5bmNocm8ud2FpdCgpCisgICAgdGVzdDIgPSBkMS9kMworICAgIGNscy5maW5pc2gxLnNldCgpCisKKyAgICBjbHMuYXNzZXJ0RXF1YWwodGVzdDEsIERlY2ltYWwoJzAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMycpKQorICAgIGNscy5hc3NlcnRFcXVhbCh0ZXN0MiwgRGVjaW1hbCgnMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzJykpCisgICAgcmV0dXJuCisKK2RlZiB0aGZ1bmMyKGNscyk6CisgICAgZDEgPSBEZWNpbWFsKDEpCisgICAgZDMgPSBEZWNpbWFsKDMpCisgICAgdGVzdDEgPSBkMS9kMworICAgIHRoaXNjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisgICAgdGhpc2NvbnRleHQucHJlYyA9IDE4CisgICAgdGVzdDIgPSBkMS9kMworICAgIGNscy5zeW5jaHJvLnNldCgpCisgICAgY2xzLmZpbmlzaDIuc2V0KCkKKworICAgIGNscy5hc3NlcnRFcXVhbCh0ZXN0MSwgRGVjaW1hbCgnMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzJykpCisgICAgY2xzLmFzc2VydEVxdWFsKHRlc3QyLCBEZWNpbWFsKCcwLjMzMzMzMzMzMzMzMzMzMzMzMycpKQorICAgIHJldHVybgorCisKK2NsYXNzIERlY2ltYWxVc2VPZkNvbnRleHRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAnJydVbml0IHRlc3RzIGZvciBVc2Ugb2YgQ29udGV4dCBjYXNlcyBpbiBEZWNpbWFsLicnJworCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICB0aHJlYWRpbmcgPSBOb25lCisKKyAgICAjIFRha2UgY2FyZSBleGVjdXRpbmcgdGhpcyB0ZXN0IGZyb20gSURMRSwgdGhlcmUncyBhbiBpc3N1ZSBpbiB0aHJlYWRpbmcKKyAgICAjIHRoYXQgaGFuZ3MgSURMRSBhbmQgSSBjb3VsZG4ndCBmaW5kIGl0CisKKyAgICBkZWYgdGVzdF90aHJlYWRpbmcoc2VsZik6CisgICAgICAgICNUZXN0IHRoZSAidGhyZWFkaW5nIGlzb2xhdGlvbiIgb2YgYSBDb250ZXh0LgorCisgICAgICAgIHNlbGYuc3luY2hybyA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuZmluaXNoMSA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuZmluaXNoMiA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgdGgxID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9dGhmdW5jMSwgYXJncz0oc2VsZiwpKQorICAgICAgICB0aDIgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD10aGZ1bmMyLCBhcmdzPShzZWxmLCkpCisKKyAgICAgICAgdGgxLnN0YXJ0KCkKKyAgICAgICAgdGgyLnN0YXJ0KCkKKworICAgICAgICBzZWxmLmZpbmlzaDEud2FpdCgpCisgICAgICAgIHNlbGYuZmluaXNoMi53YWl0KCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiB0aHJlYWRpbmcgaXMgTm9uZToKKyAgICAgICAgZGVsIHRlc3RfdGhyZWFkaW5nCisKKworY2xhc3MgRGVjaW1hbFVzYWJpbGl0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJ1VuaXQgdGVzdHMgZm9yIFVzYWJpbGl0eSBjYXNlcyBvZiBEZWNpbWFsLicnJworCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbl9vcGVyYXRvcnMoc2VsZik6CisKKyAgICAgICAgZGEgPSBEZWNpbWFsKCcyMy40MicpCisgICAgICAgIGRiID0gRGVjaW1hbCgnMjMuNDInKQorICAgICAgICBkYyA9IERlY2ltYWwoJzQ1JykKKworICAgICAgICAjdHdvIERlY2ltYWxzCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkYywgZGEpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGRjLCBkYSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGRhLCBkYykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZGEsIGRjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhLCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYSwgZGMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGRhLCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGEsIGRiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChkYyxkYSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGRhLGRjKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGRhLGRiKSwgMCkKKworICAgICAgICAjYSBEZWNpbWFsIGFuZCBhbiBpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGRjLCAyMykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDIzLCBkYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYywgNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGRjLDIzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoMjMsZGMpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZGMsNDUpLCAwKQorCisgICAgICAgICNhIERlY2ltYWwgYW5kIHVuY29tcGFyYWJsZQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhLCAndWdseScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGEsIDMyLjcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGEsIG9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhLCBvYmplY3QpCisKKyAgICAgICAgIyBzb3J0YWJsZQorICAgICAgICBhID0gbWFwKERlY2ltYWwsIHhyYW5nZSgxMDApKQorICAgICAgICBiID0gIGFbOl0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoYSkKKyAgICAgICAgYS5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorCisgICAgICAgICMgd2l0aCBOb25lCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEZWNpbWFsKDEpIDwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEZWNpbWFsKDEpID4gTm9uZSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfZmxvYXRfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgZGEgPSBEZWNpbWFsKCcwLjI1JykKKyAgICAgICAgZGIgPSBEZWNpbWFsKCczLjAnKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoZGEsIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZGEsIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGRiLCAwLjI1KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkYiwgMC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYSwgMS41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhLCAwLjI1KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoMy4wLCBkYSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMy4wLCBkYSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDAuMjUsIGRiKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgwLjI1LCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgwLjI1LCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLjAsIGRiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKDAuMSwgRGVjaW1hbCgnMC4xJykpCisKKyAgICBkZWYgdGVzdF9jb3B5X2FuZF9kZWVwY29weV9tZXRob2RzKHNlbGYpOgorICAgICAgICBkID0gRGVjaW1hbCgnNDMuMjQnKQorICAgICAgICBjID0gY29weS5jb3B5KGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQoYyksIGlkKGQpKQorICAgICAgICBkYyA9IGNvcHkuZGVlcGNvcHkoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChkYyksIGlkKGQpKQorCisgICAgZGVmIHRlc3RfaGFzaF9tZXRob2Qoc2VsZik6CisgICAgICAgICNqdXN0IHRoYXQgaXQncyBoYXNoYWJsZQorICAgICAgICBoYXNoKERlY2ltYWwoMjMpKQorICAgICAgICBoYXNoKERlY2ltYWwoJ0luZmluaXR5JykpCisgICAgICAgIGhhc2goRGVjaW1hbCgnLUluZmluaXR5JykpCisgICAgICAgIGhhc2goRGVjaW1hbCgnbmFuMTIzJykpCisgICAgICAgIGhhc2goRGVjaW1hbCgnLU5hTicpKQorCisgICAgICAgIHRlc3RfdmFsdWVzID0gW0RlY2ltYWwoc2lnbiooMioqbSArIG4pKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgbSBpbiBbMCwgMTQsIDE1LCAxNiwgMTcsIDMwLCAzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLCAzMywgNjIsIDYzLCA2NCwgNjUsIDY2XQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiByYW5nZSgtMTAsIDEwKQorICAgICAgICAgICAgICAgICAgICAgICBmb3Igc2lnbiBpbiBbLTEsIDFdXQorICAgICAgICB0ZXN0X3ZhbHVlcy5leHRlbmQoWworICAgICAgICAgICAgICAgIERlY2ltYWwoIi0wIiksICMgemVyb3MKKyAgICAgICAgICAgICAgICBEZWNpbWFsKCIwLjAwIiksCisgICAgICAgICAgICAgICAgRGVjaW1hbCgiLTAuMDAwIiksCisgICAgICAgICAgICAgICAgRGVjaW1hbCgiMEUxMCIpLAorICAgICAgICAgICAgICAgIERlY2ltYWwoIi0wRTEyIiksCisgICAgICAgICAgICAgICAgRGVjaW1hbCgiMTAuMCIpLCAjIG5lZ2F0aXZlIGV4cG9uZW50CisgICAgICAgICAgICAgICAgRGVjaW1hbCgiLTIzLjAwMDAwIiksCisgICAgICAgICAgICAgICAgRGVjaW1hbCgiMTIzMEUxMDAiKSwgIyBwb3NpdGl2ZSBleHBvbmVudAorICAgICAgICAgICAgICAgIERlY2ltYWwoIi00LjU2NzhFNTAiKSwKKyAgICAgICAgICAgICAgICAjIGEgdmFsdWUgZm9yIHdoaWNoIGhhc2gobikgIT0gaGFzaChuICUgKDIqKjY0LTEpKQorICAgICAgICAgICAgICAgICMgaW4gUHl0aG9uIHByZS0yLjYKKyAgICAgICAgICAgICAgICBEZWNpbWFsKDIqKjY0ICsgMioqMzIgLSAxKSwKKyAgICAgICAgICAgICAgICAjIHNlbGVjdGlvbiBvZiB2YWx1ZXMgd2hpY2ggZmFpbCB3aXRoIHRoZSBvbGQgKGJlZm9yZQorICAgICAgICAgICAgICAgICMgdmVyc2lvbiAyLjYpIGxvbmcuX19oYXNoX18KKyAgICAgICAgICAgICAgICBEZWNpbWFsKCIxLjYzNEUxMDAiKSwKKyAgICAgICAgICAgICAgICBEZWNpbWFsKCI5MC42OTdFMTAwIiksCisgICAgICAgICAgICAgICAgRGVjaW1hbCgiMTg4LjgzRTEwMCIpLAorICAgICAgICAgICAgICAgIERlY2ltYWwoIjE2NTIuOUUxMDAiKSwKKyAgICAgICAgICAgICAgICBEZWNpbWFsKCI1NjUzMUUxMDAiKSwKKyAgICAgICAgICAgICAgICBdKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBoYXNoKGQpID09IGhhc2goaW50KGQpKSBmb3IgaW50ZWdyYWwgdmFsdWVzCisgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0X3ZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh2YWx1ZSksIGhhc2goaW50KHZhbHVlKSkpCisKKyAgICAgICAgI3RoZSBzYW1lIGhhc2ggdGhhdCB0byBhbiBpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKERlY2ltYWwoMjMpKSwgaGFzaCgyMykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgRGVjaW1hbCgnc05hTicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzaChEZWNpbWFsKCdJbmYnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNoKERlY2ltYWwoJy1JbmYnKSkpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBoYXNoZXMgb2YgYSBEZWNpbWFsIGZsb2F0IG1hdGNoIHdoZW4gdGhleQorICAgICAgICAjIHJlcHJlc2VudCBleGFjdGx5IHRoZSBzYW1lIHZhbHVlcworICAgICAgICB0ZXN0X3N0cmluZ3MgPSBbJ2luZicsICctSW5mJywgJzAuMCcsICctLjBlMScsCisgICAgICAgICAgICAgICAgICAgICAgICAnMzQuMCcsICcyLjUnLCAnMTEyMzkwLjYyNScsICctMC41MTU2MjUnXQorICAgICAgICBmb3IgcyBpbiB0ZXN0X3N0cmluZ3M6CisgICAgICAgICAgICBmID0gZmxvYXQocykKKyAgICAgICAgICAgIGQgPSBEZWNpbWFsKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZiksIGhhc2goZCkpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaGFzaCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUKKyAgICAgICAgIyBjdXJyZW50IGNvbnRleHQgKGlzc3VlICMxNzU3KQorICAgICAgICBjID0gZ2V0Y29udGV4dCgpCisgICAgICAgIG9sZF9wcmVjaXNpb24gPSBjLnByZWMKKyAgICAgICAgeCA9IERlY2ltYWwoIjEyMzQ1Njc4OS4xIikKKworICAgICAgICBjLnByZWMgPSA2CisgICAgICAgIGgxID0gaGFzaCh4KQorICAgICAgICBjLnByZWMgPSAxMAorICAgICAgICBoMiA9IGhhc2goeCkKKyAgICAgICAgYy5wcmVjID0gMTYKKyAgICAgICAgaDMgPSBoYXNoKHgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoMSwgaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEsIGgzKQorICAgICAgICBjLnByZWMgPSBvbGRfcHJlY2lzaW9uCisKKyAgICBkZWYgdGVzdF9taW5fYW5kX21heF9tZXRob2RzKHNlbGYpOgorCisgICAgICAgIGQxID0gRGVjaW1hbCgnMTUuMzInKQorICAgICAgICBkMiA9IERlY2ltYWwoJzI4LjUnKQorICAgICAgICBsMSA9IDE1CisgICAgICAgIGwyID0gMjgKKworICAgICAgICAjYmV0d2VlbiBEZWNpbWFscworICAgICAgICBzZWxmLmFzc2VydElzKG1pbihkMSxkMiksIGQxKQorICAgICAgICBzZWxmLmFzc2VydElzKG1pbihkMixkMSksIGQxKQorICAgICAgICBzZWxmLmFzc2VydElzKG1heChkMSxkMiksIGQyKQorICAgICAgICBzZWxmLmFzc2VydElzKG1heChkMixkMSksIGQyKQorCisgICAgICAgICNiZXR3ZWVuIERlY2ltYWwgYW5kIGxvbmcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4oZDEsbDIpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4obDIsZDEpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgobDEsZDIpLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgoZDIsbDEpLCBkMikKKworICAgIGRlZiB0ZXN0X2FzX25vbnplcm8oc2VsZik6CisgICAgICAgICNhcyBmYWxzZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKERlY2ltYWwoMCkpCisgICAgICAgICNhcyB0cnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEZWNpbWFsKCcwLjM3MicpKQorCisgICAgZGVmIHRlc3RfdG9zdHJpbmdfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgI1Rlc3Qgc3RyIGFuZCByZXByIG1ldGhvZHMuCisKKyAgICAgICAgZCA9IERlY2ltYWwoJzE1LjMyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICcxNS4zMicpICAgICAgICAgICAgICAgIyBzdHIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQpLCAiRGVjaW1hbCgnMTUuMzInKSIpICAgIyByZXByCisKKyAgICAgICAgIyByZXN1bHQgdHlwZSBvZiBzdHJpbmcgbWV0aG9kcyBzaG91bGQgYmUgc3RyLCBub3QgdW5pY29kZQorICAgICAgICB1bmljb2RlX2lucHV0cyA9IFt1JzEyMy40JywgdScwLjVFMicsIHUnSW5maW5pdHknLCB1J3NOYU4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1Jy0wLjBFMTAwJywgdSctTmFOMDAxJywgdSctSW5mJ10KKworICAgICAgICBmb3IgdSBpbiB1bmljb2RlX2lucHV0czoKKyAgICAgICAgICAgIGQgPSBEZWNpbWFsKHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3RyKGQpKSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlcHIoZCkpLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZC50b19lbmdfc3RyaW5nKCkpLCBzdHIpCisKKyAgICBkZWYgdGVzdF90b251bV9tZXRob2RzKHNlbGYpOgorICAgICAgICAjVGVzdCBmbG9hdCwgaW50IGFuZCBsb25nIG1ldGhvZHMuCisKKyAgICAgICAgZDEgPSBEZWNpbWFsKCc2NicpCisgICAgICAgIGQyID0gRGVjaW1hbCgnMTUuMzInKQorCisgICAgICAgICNpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZDEpLCA2NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZDIpLCAxNSkKKworICAgICAgICAjbG9uZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZDEpLCA2NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGQyKSwgMTUpCisKKyAgICAgICAgI2Zsb2F0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoZDEpLCA2NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChkMiksIDE1LjMyKQorCisgICAgZGVmIHRlc3RfbmFuX3RvX2Zsb2F0KHNlbGYpOgorICAgICAgICAjIFRlc3QgY29udmVyc2lvbnMgb2YgZGVjaW1hbCBOQU5zIHRvIGZsb2F0LgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTU1NDQKKyAgICAgICAgZm9yIHMgaW4gKCduYW4nLCAnbmFuMTIzNCcsICctbmFuJywgJy1uYW4yNDY4Jyk6CisgICAgICAgICAgICBmID0gZmxvYXQoRGVjaW1hbChzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGYpKQorCisgICAgZGVmIHRlc3Rfc25hbl90b19mbG9hdChzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCdzbmFuJywgJy1zbmFuJywgJ3NuYW4xMzU3JywgJy1zbmFuMTIzNCcpOgorICAgICAgICAgICAgZCA9IERlY2ltYWwocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCBkKQorCisgICAgZGVmIHRlc3RfZXZhbF9yb3VuZF90cmlwKHNlbGYpOgorCisgICAgICAgICN3aXRoIHplcm8KKyAgICAgICAgZCA9IERlY2ltYWwoICgwLCAoMCwpLCAwKSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZXZhbChyZXByKGQpKSkKKworICAgICAgICAjaW50CisgICAgICAgIGQgPSBEZWNpbWFsKCAoMSwgKDQsIDUpLCAwKSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZXZhbChyZXByKGQpKSkKKworICAgICAgICAjZmxvYXQKKyAgICAgICAgZCA9IERlY2ltYWwoICgwLCAoNCwgNSwgMywgNCksIC0yKSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZXZhbChyZXByKGQpKSkKKworICAgICAgICAjd2VpcmQKKyAgICAgICAgZCA9IERlY2ltYWwoICgxLCAoNCwgMywgNCwgOSwgMSwgMywgNSwgMywgNCksIC0yNSkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGV2YWwocmVwcihkKSkpCisKKyAgICBkZWYgdGVzdF9hc190dXBsZShzZWxmKToKKworICAgICAgICAjd2l0aCB6ZXJvCisgICAgICAgIGQgPSBEZWNpbWFsKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5hc190dXBsZSgpLCAoMCwgKDAsKSwgMCkgKQorCisgICAgICAgICNpbnQKKyAgICAgICAgZCA9IERlY2ltYWwoLTQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDEsICg0LCA1KSwgMCkgKQorCisgICAgICAgICNjb21wbGljYXRlZCBzdHJpbmcKKyAgICAgICAgZCA9IERlY2ltYWwoIi00LjM0OTEzNTM0RS0xNyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5hc190dXBsZSgpLCAoMSwgKDQsIDMsIDQsIDksIDEsIDMsIDUsIDMsIDQpLCAtMjUpICkKKworICAgICAgICAjaW5mCisgICAgICAgIGQgPSBEZWNpbWFsKCJJbmZpbml0eSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5hc190dXBsZSgpLCAoMCwgKDAsKSwgJ0YnKSApCisKKyAgICAgICAgI2xlYWRpbmcgemVyb3MgaW4gY29lZmZpY2llbnQgc2hvdWxkIGJlIHN0cmlwcGVkCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMCwgKDAsIDAsIDQsIDAsIDUsIDMsIDQpLCAtMikgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDAsICg0LCAwLCA1LCAzLCA0KSwgLTIpICkKKyAgICAgICAgZCA9IERlY2ltYWwoICgxLCAoMCwgMCwgMCksIDM3KSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5hc190dXBsZSgpLCAoMSwgKDAsKSwgMzcpKQorICAgICAgICBkID0gRGVjaW1hbCggKDEsICgpLCAzNykgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDEsICgwLCksIDM3KSkKKworICAgICAgICAjbGVhZGluZyB6ZXJvcyBpbiBOYU4gZGlhZ25vc3RpYyBpbmZvIHNob3VsZCBiZSBzdHJpcHBlZAorICAgICAgICBkID0gRGVjaW1hbCggKDAsICgwLCAwLCA0LCAwLCA1LCAzLCA0KSwgJ24nKSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5hc190dXBsZSgpLCAoMCwgKDQsIDAsIDUsIDMsIDQpLCAnbicpICkKKyAgICAgICAgZCA9IERlY2ltYWwoICgxLCAoMCwgMCwgMCksICdOJykgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDEsICgpLCAnTicpICkKKyAgICAgICAgZCA9IERlY2ltYWwoICgxLCAoKSwgJ24nKSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5hc190dXBsZSgpLCAoMSwgKCksICduJykgKQorCisgICAgICAgICNjb2VmZmljaWVudCBpbiBpbmZpbml0eSBzaG91bGQgYmUgaWdub3JlZAorICAgICAgICBkID0gRGVjaW1hbCggKDAsICg0LCA1LCAzLCA0KSwgJ0YnKSApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5hc190dXBsZSgpLCAoMCwgKDAsKSwgJ0YnKSkKKyAgICAgICAgZCA9IERlY2ltYWwoICgxLCAoMCwgMiwgNywgMSksICdGJykgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDEsICgwLCksICdGJykpCisKKyAgICBkZWYgdGVzdF9pbW11dGFiaWxpdHlfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgIyBEbyBvcGVyYXRpb25zIGFuZCBjaGVjayB0aGF0IGl0IGRpZG4ndCBjaGFuZ2UgY2hhbmdlIGludGVybmFsIG9iamVjdHMuCisKKyAgICAgICAgZDEgPSBEZWNpbWFsKCctMjVlNTUnKQorICAgICAgICBiMSA9IERlY2ltYWwoJy0yNWU1NScpCisgICAgICAgIGQyID0gRGVjaW1hbCgnMzNlKzMzJykKKyAgICAgICAgYjIgPSBEZWNpbWFsKCczM2UrMzMnKQorCisgICAgICAgIGRlZiBjaGVja1NhbWVEZWMob3BlcmF0aW9uLCB1c2VPdGhlcj1GYWxzZSk6CisgICAgICAgICAgICBpZiB1c2VPdGhlcjoKKyAgICAgICAgICAgICAgICBldmFsKCJkMS4iICsgb3BlcmF0aW9uICsgIihkMikiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuX3NpZ24sIGIxLl9zaWduKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuX2ludCwgYjEuX2ludCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLl9leHAsIGIxLl9leHApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5fc2lnbiwgYjIuX3NpZ24pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5faW50LCBiMi5faW50KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuX2V4cCwgYjIuX2V4cCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXZhbCgiZDEuIiArIG9wZXJhdGlvbiArICIoKSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5fc2lnbiwgYjEuX3NpZ24pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5faW50LCBiMS5faW50KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuX2V4cCwgYjEuX2V4cCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIERlY2ltYWwoZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuX3NpZ24sIGIxLl9zaWduKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLl9pbnQsIGIxLl9pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuX2V4cCwgYjEuX2V4cCkKKworICAgICAgICBjaGVja1NhbWVEZWMoIl9fYWJzX18iKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fYWRkX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fZGl2X18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fZGl2bW9kX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fZXFfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19uZV9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2xlX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fbHRfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19nZV9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2d0X18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fZmxvYXRfXyIpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19mbG9vcmRpdl9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2hhc2hfXyIpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19pbnRfXyIpCisgICAgICAgIGNoZWNrU2FtZURlYygiX190cnVuY19fIikKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2xvbmdfXyIpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19tb2RfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19tdWxfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19uZWdfXyIpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19ub256ZXJvX18iKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fcG9zX18iKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fcG93X18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fcmFkZF9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX3JkaXZfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19yZGl2bW9kX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fcmVwcl9fIikKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX3JmbG9vcmRpdl9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX3Jtb2RfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19ybXVsX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fcnBvd19fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX3JzdWJfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19zdHJfXyIpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19zdWJfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX190cnVlZGl2X18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoImFkanVzdGVkIikKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJhc190dXBsZSIpCisgICAgICAgIGNoZWNrU2FtZURlYygiY29tcGFyZSIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygibWF4IiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJtaW4iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIm5vcm1hbGl6ZSIpCisgICAgICAgIGNoZWNrU2FtZURlYygicXVhbnRpemUiLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoInJlbWFpbmRlcl9uZWFyIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJzYW1lX3F1YW50dW0iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoInNxcnQiKQorICAgICAgICBjaGVja1NhbWVEZWMoInRvX2VuZ19zdHJpbmciKQorICAgICAgICBjaGVja1NhbWVEZWMoInRvX2ludGVncmFsIikKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nKHNlbGYpOgorICAgICAgICAjIERpZmZlcmVudCBiZWhhdmlvdXJzIHdoZW4gc3ViY2xhc3NpbmcgRGVjaW1hbAorCisgICAgICAgIGNsYXNzIE15RGVjaW1hbChEZWNpbWFsKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkMSA9IE15RGVjaW1hbCgxKQorICAgICAgICBkMiA9IE15RGVjaW1hbCgyKQorICAgICAgICBkID0gZDEgKyBkMgorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZCksIERlY2ltYWwpCisKKyAgICAgICAgZCA9IGQxLm1heChkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGQpLCBEZWNpbWFsKQorCisgICAgZGVmIHRlc3RfaW1wbGljaXRfY29udGV4dChzZWxmKToKKyAgICAgICAgIyBDaGVjayByZXN1bHRzIHdoZW4gY29udGV4dCBnaXZlbiBpbXBsaWNpdGx5LiAgKElzc3VlIDI0NzgpCisgICAgICAgIGMgPSBnZXRjb250ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCgwKS5zcXJ0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihjLnNxcnQoRGVjaW1hbCgwKSkpKQorCisgICAgZGVmIHRlc3RfY29udmVyc2lvbnNfZnJvbV9pbnQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBtZXRob2RzIHRha2luZyBhIHNlY29uZCBEZWNpbWFsIGFyZ3VtZW50IHdpbGwKKyAgICAgICAgIyBhbHdheXMgYWNjZXB0IGFuIGludGVnZXIgaW4gcGxhY2Ugb2YgYSBEZWNpbWFsLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoNCkuY29tcGFyZSgzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDQpLmNvbXBhcmUoRGVjaW1hbCgzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCg0KS5jb21wYXJlX3NpZ25hbCgzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDQpLmNvbXBhcmVfc2lnbmFsKERlY2ltYWwoMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoNCkuY29tcGFyZV90b3RhbCgzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDQpLmNvbXBhcmVfdG90YWwoRGVjaW1hbCgzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCg0KS5jb21wYXJlX3RvdGFsX21hZygzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDQpLmNvbXBhcmVfdG90YWxfbWFnKERlY2ltYWwoMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoMTAxMDEpLmxvZ2ljYWxfYW5kKDEwMDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoMTAxMDEpLmxvZ2ljYWxfYW5kKERlY2ltYWwoMTAwMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoMTAxMDEpLmxvZ2ljYWxfb3IoMTAwMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCgxMDEwMSkubG9naWNhbF9vcihEZWNpbWFsKDEwMDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDEwMTAxKS5sb2dpY2FsX3hvcigxMDAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDEwMTAxKS5sb2dpY2FsX3hvcihEZWNpbWFsKDEwMDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDU2NykubWF4KDEyMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg1NjcpLm1heChEZWNpbWFsKDEyMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoNTY3KS5tYXhfbWFnKDEyMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg1NjcpLm1heF9tYWcoRGVjaW1hbCgxMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDU2NykubWluKDEyMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg1NjcpLm1pbihEZWNpbWFsKDEyMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoNTY3KS5taW5fbWFnKDEyMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg1NjcpLm1pbl9tYWcoRGVjaW1hbCgxMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDU2NykubmV4dF90b3dhcmQoMTIzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDU2NykubmV4dF90b3dhcmQoRGVjaW1hbCgxMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDEyMzQpLnF1YW50aXplKDEwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCgxMjM0KS5xdWFudGl6ZShEZWNpbWFsKDEwMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoNzY4KS5yZW1haW5kZXJfbmVhcigxMjM0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDc2OCkucmVtYWluZGVyX25lYXIoRGVjaW1hbCgxMjM0KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCgxMjMpLnJvdGF0ZSgxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDEyMykucm90YXRlKERlY2ltYWwoMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoMTIzNCkuc2FtZV9xdWFudHVtKDEwMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoMTIzNCkuc2FtZV9xdWFudHVtKERlY2ltYWwoMTAwMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoJzkuMTIzJykuc2NhbGViKC0xMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoJzkuMTIzJykuc2NhbGViKERlY2ltYWwoLTEwMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoNDU2KS5zaGlmdCgtMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg0NTYpLnNoaWZ0KERlY2ltYWwoLTEpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoLTEyKS5mbWEoRGVjaW1hbCg0NSksIDY3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKC0xMikuZm1hKERlY2ltYWwoNDUpLCBEZWNpbWFsKDY3KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCgtMTIpLmZtYSg0NSwgNjcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoLTEyKS5mbWEoRGVjaW1hbCg0NSksIERlY2ltYWwoNjcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKC0xMikuZm1hKDQ1LCBEZWNpbWFsKDY3KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCgtMTIpLmZtYShEZWNpbWFsKDQ1KSwgRGVjaW1hbCg2NykpKQorCisKK2NsYXNzIERlY2ltYWxQeXRob25BUEl0ZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hYmMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKERlY2ltYWwsIG51bWJlcnMuTnVtYmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKERlY2ltYWwsIG51bWJlcnMuUmVhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShEZWNpbWFsKDApLCBudW1iZXJzLk51bWJlcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKERlY2ltYWwoMCksIG51bWJlcnMuUmVhbCkKKworICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgZCA9IERlY2ltYWwoJy0zLjE0MTU5MDAwMCcpCisgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoZCkKKyAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCisKKyAgICBkZWYgdGVzdF9pbnQoc2VsZik6CisgICAgICAgIGZvciB4IGluIHJhbmdlKC0yNTAsIDI1MCk6CisgICAgICAgICAgICBzID0gJyUwLjJmJyAlICh4IC8gMTAwLjApCisgICAgICAgICAgICAjIHNob3VsZCB3b3JrIHRoZSBzYW1lIGFzIGZvciBmbG9hdHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KERlY2ltYWwocykpLCBpbnQoZmxvYXQocykpKQorICAgICAgICAgICAgIyBzaG91bGQgd29yayB0aGUgc2FtZSBhcyB0b19pbnRlZ3JhbCBpbiB0aGUgUk9VTkRfRE9XTiBtb2RlCisgICAgICAgICAgICBkID0gRGVjaW1hbChzKQorICAgICAgICAgICAgciA9IGQudG9faW50ZWdyYWwoUk9VTkRfRE9XTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbChpbnQoZCkpLCByKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgRGVjaW1hbCgnLW5hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsIERlY2ltYWwoJ3NuYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgaW50LCBEZWNpbWFsKCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgaW50LCBEZWNpbWFsKCctaW5mJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9uZywgRGVjaW1hbCgnLW5hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb25nLCBEZWNpbWFsKCdzbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxvbmcsIERlY2ltYWwoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsb25nLCBEZWNpbWFsKCctaW5mJykpCisKKyAgICBkZWYgdGVzdF90cnVuYyhzZWxmKToKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UoLTI1MCwgMjUwKToKKyAgICAgICAgICAgIHMgPSAnJTAuMmYnICUgKHggLyAxMDAuMCkKKyAgICAgICAgICAgICMgc2hvdWxkIHdvcmsgdGhlIHNhbWUgYXMgZm9yIGZsb2F0cworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRGVjaW1hbChzKSksIGludChmbG9hdChzKSkpCisgICAgICAgICAgICAjIHNob3VsZCB3b3JrIHRoZSBzYW1lIGFzIHRvX2ludGVncmFsIGluIHRoZSBST1VORF9ET1dOIG1vZGUKKyAgICAgICAgICAgIGQgPSBEZWNpbWFsKHMpCisgICAgICAgICAgICByID0gZC50b19pbnRlZ3JhbChST1VORF9ET1dOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKG1hdGgudHJ1bmMoZCkpLCByKQorCisgICAgZGVmIHRlc3RfZnJvbV9mbG9hdChzZWxmKToKKworICAgICAgICBjbGFzcyAgTXlEZWNpbWFsKERlY2ltYWwpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHIgPSBNeURlY2ltYWwuZnJvbV9mbG9hdCgwLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyKSwgTXlEZWNpbWFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihyKSwKKyAgICAgICAgICAgICAgICAnMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1JykKKyAgICAgICAgYmlnaW50ID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNeURlY2ltYWwuZnJvbV9mbG9hdChiaWdpbnQpLCBNeURlY2ltYWwoYmlnaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE15RGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCduYW4nKSkuaXNfcW5hbigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ2luZicpKS5pc19pbmZpbml0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJy1pbmYnKSkuaXNfaW5maW5pdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ25hbicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJ05hTicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ2luZicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJ0luZmluaXR5JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihNeURlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnLWluZicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJy1JbmZpbml0eScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBNeURlY2ltYWwuZnJvbV9mbG9hdCwgJ2FiYycpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIwMCk6CisgICAgICAgICAgICB4ID0gcmFuZG9tLmV4cG92YXJpYXRlKDAuMDEpICogKHJhbmRvbS5yYW5kb20oKSAqIDIuMCAtIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgZmxvYXQoTXlEZWNpbWFsLmZyb21fZmxvYXQoeCkpKSAjIHJvdW5kdHJpcAorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdChzZWxmKToKKyAgICAgICAgY29udGV4dCA9IENvbnRleHQocHJlYz01LCByb3VuZGluZz1ST1VORF9ET1dOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KG1hdGgucGkpLAorICAgICAgICAgICAgRGVjaW1hbCgnMy4xNDE1JykKKyAgICAgICAgKQorICAgICAgICBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHJvdW5kaW5nPVJPVU5EX1VQKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KG1hdGgucGkpLAorICAgICAgICAgICAgRGVjaW1hbCgnMy4xNDE2JykKKyAgICAgICAgKQorICAgICAgICBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHRyYXBzPVtJbmV4YWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBJbmV4YWN0LAorICAgICAgICAgICAgY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0LAorICAgICAgICAgICAgbWF0aC5waQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoLTAuMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEZWNpbWFsKCctMCcpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCgxLjApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRGVjaW1hbCgnMScpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCgxMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEZWNpbWFsKCcxMCcpIikKKworY2xhc3MgQ29udGV4dEFQSXRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBlID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjKSkKKyAgICAgICAgZm9yIGsgaW4gdmFycyhjKToKKyAgICAgICAgICAgIHYxID0gdmFycyhjKVtrXQorICAgICAgICAgICAgdjIgPSB2YXJzKGUpW2tdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYxLCB2MikKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5X3dpdGhfb3RoZXJfdHlwZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oRGVjaW1hbCgxMCksIFsnYScsIDEuMCwgRGVjaW1hbCgxMCksICgxLDIpLCB7fV0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oRGVjaW1hbCgxMCksIFsnYScsIDEuMCwgKDEsMiksIHt9XSkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgICMgQWxsIGNvcGllcyBzaG91bGQgYmUgZGVlcAorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGMpLCBpZChkKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChjLmZsYWdzKSwgaWQoZC5mbGFncykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYy50cmFwcyksIGlkKGQudHJhcHMpKQorCisgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmFicyhEZWNpbWFsKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmFicygtMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5hYnMsICctMScpCisKKyAgICBkZWYgdGVzdF9hZGQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuYWRkKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hZGQoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hZGQoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hZGQoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5hZGQsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmFkZCwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb21wYXJlKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZShEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmUoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3NpZ25hbChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV9zaWduYWwoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfc2lnbmFsKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZV9zaWduYWwsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfc2lnbmFsLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvdGFsKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvbXBhcmVfdG90YWwoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWwoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbCgxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfdG90YWwsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfdG90YWwsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG90YWxfbWFnKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvbXBhcmVfdG90YWxfbWFnKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsX21hZygxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWxfbWFnKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbF9tYWcoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3RvdGFsX21hZywgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZV90b3RhbF9tYWcsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2NvcHlfYWJzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvcHlfYWJzKERlY2ltYWwoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9hYnMoLTEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29weV9hYnMsICctMScpCisKKyAgICBkZWYgdGVzdF9jb3B5X2RlY2ltYWwoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29weV9kZWNpbWFsKERlY2ltYWwoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9kZWNpbWFsKC0xKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfZGVjaW1hbCwgJy0xJykKKworICAgIGRlZiB0ZXN0X2NvcHlfbmVnYXRlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvcHlfbmVnYXRlKERlY2ltYWwoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9uZWdhdGUoLTEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29weV9uZWdhdGUsICctMScpCisKKyAgICBkZWYgdGVzdF9jb3B5X3NpZ24oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29weV9zaWduKERlY2ltYWwoMSksIERlY2ltYWwoLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9zaWduKDEsIC0yKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfc2lnbihEZWNpbWFsKDEpLCAtMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb3B5X3NpZ24oMSwgRGVjaW1hbCgtMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29weV9zaWduLCAnMScsIC0yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29weV9zaWduLCAxLCAnLTInKQorCisgICAgZGVmIHRlc3RfZGl2aWRlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmRpdmlkZShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2aWRlLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5kaXZpZGUsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X2RpdmlkZV9pbnQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuZGl2aWRlX2ludChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlX2ludCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZV9pbnQoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZpZGVfaW50KDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2aWRlX2ludCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2aWRlX2ludCwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfZGl2bW9kKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmRpdm1vZChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2bW9kKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2bW9kKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2bW9kKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2bW9kLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5kaXZtb2QsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X2V4cChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5leHAoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leHAoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZXhwLCAnMTAnKQorCisgICAgZGVmIHRlc3RfZm1hKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmZtYShEZWNpbWFsKDIpLCBEZWNpbWFsKDMpLCBEZWNpbWFsKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKDIsIDMsIDQpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKERlY2ltYWwoMiksIDMsIDQpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKDIsIERlY2ltYWwoMyksIDQpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKDIsIDMsIERlY2ltYWwoNCkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm1hKERlY2ltYWwoMiksIERlY2ltYWwoMyksIDQpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZm1hLCAnMicsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5mbWEsIDIsICczJywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmZtYSwgMiwgMywgJzQnKQorCisgICAgZGVmIHRlc3RfaXNfZmluaXRlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX2Zpbml0ZShEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX2Zpbml0ZSgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19maW5pdGUsICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19pbmZpbml0ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19pbmZpbml0ZShEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX2luZmluaXRlKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX2luZmluaXRlLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfbmFuKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX25hbihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX25hbigxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19uYW4sICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19ub3JtYWwoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfbm9ybWFsKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfbm9ybWFsKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX25vcm1hbCwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX3FuYW4oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfcW5hbihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX3FuYW4oMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfcW5hbiwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX3NpZ25lZChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19zaWduZWQoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19zaWduZWQoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfc2lnbmVkLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfc25hbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19zbmFuKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfc25hbigxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19zbmFuLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfc3Vibm9ybWFsKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX3N1Ym5vcm1hbChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX3N1Ym5vcm1hbCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19zdWJub3JtYWwsICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc196ZXJvKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX3plcm8oRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc196ZXJvKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX3plcm8sICcxMCcpCisKKyAgICBkZWYgdGVzdF9sbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sbihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxuKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxuLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbG9nMTAoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG9nMTAoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2cxMCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2cxMCwgJzEwJykKKworICAgIGRlZiB0ZXN0X2xvZ2Ioc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG9nYihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2IoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9nYiwgJzEwJykKKworICAgIGRlZiB0ZXN0X2xvZ2ljYWxfYW5kKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2ljYWxfYW5kKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX2FuZCgxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfYW5kKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9hbmQoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX2FuZCwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF9hbmQsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2xvZ2ljYWxfaW52ZXJ0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2ljYWxfaW52ZXJ0KERlY2ltYWwoMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX2ludmVydCgxMDAwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfaW52ZXJ0LCAnMTAwMCcpCisKKyAgICBkZWYgdGVzdF9sb2dpY2FsX29yKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2ljYWxfb3IoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfb3IoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX29yKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9vcigxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfb3IsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfb3IsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2xvZ2ljYWxfeG9yKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2ljYWxfeG9yKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX3hvcigxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfeG9yKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF94b3IoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX3hvciwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF94b3IsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X21heChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5tYXgoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heCgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1heCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWF4LCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9tYXhfbWFnKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm1heF9tYWcoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heF9tYWcoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXhfbWFnKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWF4X21hZygxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1heF9tYWcsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1heF9tYWcsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X21pbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5taW4oRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbigxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbihEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbigxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbiwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWluLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9taW5fbWFnKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm1pbl9tYWcoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbl9tYWcoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW5fbWFnKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWluX21hZygxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbl9tYWcsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbl9tYWcsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X21pbnVzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm1pbnVzKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWludXMoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWludXMsICcxMCcpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBseShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5tdWx0aXBseShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubXVsdGlwbHkoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tdWx0aXBseShEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm11bHRpcGx5KDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubXVsdGlwbHksICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm11bHRpcGx5LCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9uZXh0X21pbnVzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm5leHRfbWludXMoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0X21pbnVzKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm5leHRfbWludXMsICcxMCcpCisKKyAgICBkZWYgdGVzdF9uZXh0X3BsdXMoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubmV4dF9wbHVzKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dF9wbHVzKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm5leHRfcGx1cywgJzEwJykKKworICAgIGRlZiB0ZXN0X25leHRfdG93YXJkKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm5leHRfdG93YXJkKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0X3Rvd2FyZCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5leHRfdG93YXJkKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dF90b3dhcmQoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5uZXh0X3Rvd2FyZCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubmV4dF90b3dhcmQsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X25vcm1hbGl6ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5ub3JtYWxpemUoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5ub3JtYWxpemUoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubm9ybWFsaXplLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbnVtYmVyX2NsYXNzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5udW1iZXJfY2xhc3MoMTIzKSwgYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgxMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm51bWJlcl9jbGFzcygwKSwgYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5udW1iZXJfY2xhc3MoLTQ1KSwgYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgtNDUpKSkKKworICAgIGRlZiB0ZXN0X3Bvd2VyKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnBvd2VyKERlY2ltYWwoMSksIERlY2ltYWwoNCksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3dlcigxLCA0LCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvd2VyKERlY2ltYWwoMSksIDQsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucG93ZXIoMSwgRGVjaW1hbCg0KSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3dlcigxLCA0LCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvd2VyKERlY2ltYWwoMSksIERlY2ltYWwoNCksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucG93ZXIsICcxJywgNCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnBvd2VyLCAxLCAnNCcsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5wb3dlciwgMSwgNCwgJzInKQorCisgICAgZGVmIHRlc3RfcGx1cyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5wbHVzKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucGx1cygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5wbHVzLCAnMTAnKQorCisgICAgZGVmIHRlc3RfcXVhbnRpemUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMucXVhbnRpemUoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnF1YW50aXplKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucXVhbnRpemUoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5xdWFudGl6ZSgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnF1YW50aXplLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5xdWFudGl6ZSwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfcmVtYWluZGVyKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnJlbWFpbmRlcihEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucmVtYWluZGVyLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5yZW1haW5kZXIsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3JlbWFpbmRlcl9uZWFyKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnJlbWFpbmRlcl9uZWFyKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yZW1haW5kZXJfbmVhcigxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcl9uZWFyKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyX25lYXIoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5yZW1haW5kZXJfbmVhciwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucmVtYWluZGVyX25lYXIsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3JvdGF0ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5yb3RhdGUoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJvdGF0ZSgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJvdGF0ZShEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJvdGF0ZSgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJvdGF0ZSwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucm90YXRlLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9zcXJ0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnNxcnQoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zcXJ0KDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNxcnQsICcxMCcpCisKKyAgICBkZWYgdGVzdF9zYW1lX3F1YW50dW0oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuc2FtZV9xdWFudHVtKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zYW1lX3F1YW50dW0oMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zYW1lX3F1YW50dW0oRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zYW1lX3F1YW50dW0oMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zYW1lX3F1YW50dW0sICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNhbWVfcXVhbnR1bSwgMSwgJzInKQorCisgICAgZGVmIHRlc3Rfc2NhbGViKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnNjYWxlYihEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2NhbGViKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2NhbGViKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2NhbGViKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2NhbGViLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zY2FsZWIsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3NoaWZ0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnNoaWZ0KERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zaGlmdCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNoaWZ0KERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2hpZnQoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zaGlmdCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2hpZnQsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3N1YnRyYWN0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnN1YnRyYWN0KERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zdWJ0cmFjdCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnN1YnRyYWN0KERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc3VidHJhY3QoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zdWJ0cmFjdCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc3VidHJhY3QsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3RvX2VuZ19zdHJpbmcoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMudG9fZW5nX3N0cmluZyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRvX2VuZ19zdHJpbmcoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMudG9fZW5nX3N0cmluZywgJzEwJykKKworICAgIGRlZiB0ZXN0X3RvX3NjaV9zdHJpbmcoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMudG9fc2NpX3N0cmluZyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRvX3NjaV9zdHJpbmcoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMudG9fc2NpX3N0cmluZywgJzEwJykKKworICAgIGRlZiB0ZXN0X3RvX2ludGVncmFsX2V4YWN0KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnRvX2ludGVncmFsX2V4YWN0KERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMudG9faW50ZWdyYWxfZXhhY3QoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMudG9faW50ZWdyYWxfZXhhY3QsICcxMCcpCisKKyAgICBkZWYgdGVzdF90b19pbnRlZ3JhbF92YWx1ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRvX2ludGVncmFsX3ZhbHVlKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnRvX2ludGVncmFsX3ZhbHVlLCAnMTAnKQorCitjbGFzcyBXaXRoU3RhdGVtZW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBDYW4ndCBkbyB0aGVzZSBhcyBkb2NzdHJpbmdzIHVudGlsIFB5dGhvbiAyLjYKKyAgICAjIGFzIGRvY3Rlc3QgY2FuJ3QgaGFuZGxlIF9fZnV0dXJlX18gc3RhdGVtZW50cworCisgICAgZGVmIHRlc3RfbG9jYWxjb250ZXh0KHNlbGYpOgorICAgICAgICAjIFVzZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBpbiB0aGUgYmxvY2sKKyAgICAgICAgb3JpZ19jdHggPSBnZXRjb250ZXh0KCkKKyAgICAgICAgd2l0aCBsb2NhbGNvbnRleHQoKSBhcyBlbnRlcl9jdHg6CisgICAgICAgICAgICBzZXRfY3R4ID0gZ2V0Y29udGV4dCgpCisgICAgICAgIGZpbmFsX2N0eCA9IGdldGNvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydElzKG9yaWdfY3R4LCBmaW5hbF9jdHgsICdkaWQgbm90IHJlc3RvcmUgY29udGV4dCBjb3JyZWN0bHknKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdfY3R4LCBzZXRfY3R4LCAnZGlkIG5vdCBjb3B5IHRoZSBjb250ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZXRfY3R4LCBlbnRlcl9jdHgsICdfX2VudGVyX18gcmV0dXJuZWQgd3JvbmcgY29udGV4dCcpCisKKyAgICBkZWYgdGVzdF9sb2NhbGNvbnRleHRhcmcoc2VsZik6CisgICAgICAgICMgVXNlIGEgY29weSBvZiB0aGUgc3VwcGxpZWQgY29udGV4dCBpbiB0aGUgYmxvY2sKKyAgICAgICAgb3JpZ19jdHggPSBnZXRjb250ZXh0KCkKKyAgICAgICAgbmV3X2N0eCA9IENvbnRleHQocHJlYz00MikKKyAgICAgICAgd2l0aCBsb2NhbGNvbnRleHQobmV3X2N0eCkgYXMgZW50ZXJfY3R4OgorICAgICAgICAgICAgc2V0X2N0eCA9IGdldGNvbnRleHQoKQorICAgICAgICBmaW5hbF9jdHggPSBnZXRjb250ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcmlnX2N0eCwgZmluYWxfY3R4LCAnZGlkIG5vdCByZXN0b3JlIGNvbnRleHQgY29ycmVjdGx5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRfY3R4LnByZWMsIG5ld19jdHgucHJlYywgJ2RpZCBub3Qgc2V0IGNvcnJlY3QgY29udGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobmV3X2N0eCwgc2V0X2N0eCwgJ2RpZCBub3QgY29weSB0aGUgY29udGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2V0X2N0eCwgZW50ZXJfY3R4LCAnX19lbnRlcl9fIHJldHVybmVkIHdyb25nIGNvbnRleHQnKQorCitjbGFzcyBDb250ZXh0RmxhZ3ModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZsYWdzX2lycmVsZXZhbnQoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgcmVzdWx0IChudW1lcmljIHJlc3VsdCArIGZsYWdzIHJhaXNlZCkgb2YgYW4KKyAgICAgICAgIyBhcml0aG1ldGljIG9wZXJhdGlvbiBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgY3VycmVudCBmbGFncworCisgICAgICAgIGNvbnRleHQgPSBDb250ZXh0KHByZWM9OSwgRW1pbiA9IC05OTk5OTk5OTksIEVtYXggPSA5OTk5OTk5OTksCisgICAgICAgICAgICAgICAgICAgIHJvdW5kaW5nPVJPVU5EX0hBTEZfRVZFTiwgdHJhcHM9W10sIGZsYWdzPVtdKQorCisgICAgICAgICMgb3BlcmF0aW9ucyB0aGF0IHJhaXNlIHZhcmlvdXMgZmxhZ3MsIGluIHRoZSBmb3JtIChmdW5jdGlvbiwgYXJnbGlzdCkKKyAgICAgICAgb3BlcmF0aW9ucyA9IFsKKyAgICAgICAgICAgIChjb250ZXh0Ll9hcHBseSwgW0RlY2ltYWwoIjEwMEUtMTAwMDAwMDAwOSIpXSksCisgICAgICAgICAgICAoY29udGV4dC5zcXJ0LCBbRGVjaW1hbCgyKV0pLAorICAgICAgICAgICAgKGNvbnRleHQuYWRkLCBbRGVjaW1hbCgiMS4yMzQ1Njc4OSIpLCBEZWNpbWFsKCI5Ljg3NjU0MzIxIildKSwKKyAgICAgICAgICAgIChjb250ZXh0Lm11bHRpcGx5LCBbRGVjaW1hbCgiMS4yMzQ1Njc4OSIpLCBEZWNpbWFsKCI5Ljg3NjU0MzIxIildKSwKKyAgICAgICAgICAgIChjb250ZXh0LnN1YnRyYWN0LCBbRGVjaW1hbCgiMS4yMzQ1Njc4OSIpLCBEZWNpbWFsKCI5Ljg3NjU0MzIxIildKSwKKyAgICAgICAgICAgIF0KKworICAgICAgICAjIHRyeSB2YXJpb3VzIGZsYWdzIGluZGl2aWR1YWxseSwgdGhlbiBhIHdob2xlIGxvdCBhdCBvbmNlCisgICAgICAgIGZsYWdzZXRzID0gW1tJbmV4YWN0XSwgW1JvdW5kZWRdLCBbVW5kZXJmbG93XSwgW0NsYW1wZWRdLCBbU3Vibm9ybWFsXSwKKyAgICAgICAgICAgICAgICAgICAgW0luZXhhY3QsIFJvdW5kZWQsIFVuZGVyZmxvdywgQ2xhbXBlZCwgU3Vibm9ybWFsXV0KKworICAgICAgICBmb3IgZm4sIGFyZ3MgaW4gb3BlcmF0aW9uczoKKyAgICAgICAgICAgICMgZmluZCBhbnN3ZXIgYW5kIGZsYWdzIHJhaXNlZCB1c2luZyBhIGNsZWFuIGNvbnRleHQKKyAgICAgICAgICAgIGNvbnRleHQuY2xlYXJfZmxhZ3MoKQorICAgICAgICAgICAgYW5zID0gZm4oKmFyZ3MpCisgICAgICAgICAgICBmbGFncyA9IFtrIGZvciBrLCB2IGluIGNvbnRleHQuZmxhZ3MuaXRlbXMoKSBpZiB2XQorCisgICAgICAgICAgICBmb3IgZXh0cmFfZmxhZ3MgaW4gZmxhZ3NldHM6CisgICAgICAgICAgICAgICAgIyBzZXQgZmxhZ3MsIGJlZm9yZSBjYWxsaW5nIG9wZXJhdGlvbgorICAgICAgICAgICAgICAgIGNvbnRleHQuY2xlYXJfZmxhZ3MoKQorICAgICAgICAgICAgICAgIGZvciBmbGFnIGluIGV4dHJhX2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihmbGFnKQorICAgICAgICAgICAgICAgIG5ld19hbnMgPSBmbigqYXJncykKKworICAgICAgICAgICAgICAgICMgZmxhZ3MgdGhhdCB3ZSBleHBlY3QgdG8gYmUgc2V0IGFmdGVyIHRoZSBvcGVyYXRpb24KKyAgICAgICAgICAgICAgICBleHBlY3RlZF9mbGFncyA9IGxpc3QoZmxhZ3MpCisgICAgICAgICAgICAgICAgZm9yIGZsYWcgaW4gZXh0cmFfZmxhZ3M6CisgICAgICAgICAgICAgICAgICAgIGlmIGZsYWcgbm90IGluIGV4cGVjdGVkX2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmxhZ3MuYXBwZW5kKGZsYWcpCisKKyAgICAgICAgICAgICAgICAjIGZsYWdzIHdlIGFjdHVhbGx5IGdvdAorICAgICAgICAgICAgICAgIG5ld19mbGFncyA9IFtrIGZvciBrLHYgaW4gY29udGV4dC5mbGFncy5pdGVtcygpIGlmIHZdCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFucywgbmV3X2FucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYXRpb24gcHJvZHVjZXMgZGlmZmVyZW50IGFuc3dlcnMgZGVwZW5kaW5nIG9uIGZsYWdzIHNldDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXMsIGdvdCAlcy4iICUgKGFucywgbmV3X2FucykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKG5ld19mbGFncywgZXhwZWN0ZWRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiByYWlzZXMgZGlmZmVyZW50IGZsYWdzIGRlcGVuZGluZyBvbiBmbGFncyBzZXQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlcywgZ290ICVzIiAlIChleHBlY3RlZF9mbGFncywgbmV3X2ZsYWdzKSkKKworZGVmIHRlc3RfbWFpbihhcml0aD1GYWxzZSwgdmVyYm9zZT1Ob25lLCB0b2RvX3Rlc3RzPU5vbmUsIGRlYnVnPU5vbmUpOgorICAgICIiIiBFeGVjdXRlIHRoZSB0ZXN0cy4KKworICAgIFJ1bnMgYWxsIGFyaXRobWV0aWMgdGVzdHMgaWYgYXJpdGggaXMgVHJ1ZSBvciBpZiB0aGUgImRlY2ltYWwiIHJlc291cmNlCisgICAgaXMgZW5hYmxlZCBpbiByZWdydGVzdC5weQorICAgICIiIgorCisgICAgaW5pdCgpCisgICAgZ2xvYmFsIFRFU1RfQUxMLCBERUJVRworICAgIFRFU1RfQUxMID0gYXJpdGggb3IgaXNfcmVzb3VyY2VfZW5hYmxlZCgnZGVjaW1hbCcpCisgICAgREVCVUcgPSBkZWJ1ZworCisgICAgaWYgdG9kb190ZXN0cyBpcyBOb25lOgorICAgICAgICB0ZXN0X2NsYXNzZXMgPSBbCisgICAgICAgICAgICBEZWNpbWFsRXhwbGljaXRDb25zdHJ1Y3Rpb25UZXN0LAorICAgICAgICAgICAgRGVjaW1hbEltcGxpY2l0Q29uc3RydWN0aW9uVGVzdCwKKyAgICAgICAgICAgIERlY2ltYWxBcml0aG1ldGljT3BlcmF0b3JzVGVzdCwKKyAgICAgICAgICAgIERlY2ltYWxGb3JtYXRUZXN0LAorICAgICAgICAgICAgRGVjaW1hbFVzZU9mQ29udGV4dFRlc3QsCisgICAgICAgICAgICBEZWNpbWFsVXNhYmlsaXR5VGVzdCwKKyAgICAgICAgICAgIERlY2ltYWxQeXRob25BUEl0ZXN0cywKKyAgICAgICAgICAgIENvbnRleHRBUEl0ZXN0cywKKyAgICAgICAgICAgIERlY2ltYWxUZXN0LAorICAgICAgICAgICAgV2l0aFN0YXRlbWVudFRlc3QsCisgICAgICAgICAgICBDb250ZXh0RmxhZ3MKKyAgICAgICAgXQorICAgIGVsc2U6CisgICAgICAgIHRlc3RfY2xhc3NlcyA9IFtEZWNpbWFsVGVzdF0KKworICAgICMgRHluYW1pY2FsbHkgYnVpbGQgY3VzdG9tIHRlc3QgZGVmaW5pdGlvbiBmb3IgZWFjaCBmaWxlIGluIHRoZSB0ZXN0CisgICAgIyBkaXJlY3RvcnkgYW5kIGFkZCB0aGUgZGVmaW5pdGlvbnMgdG8gdGhlIERlY2ltYWxUZXN0IGNsYXNzLiAgVGhpcworICAgICMgcHJvY2VkdXJlIGluc3VyZXMgdGhhdCBuZXcgZmlsZXMgZG8gbm90IGdldCBza2lwcGVkLgorICAgIGZvciBmaWxlbmFtZSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CisgICAgICAgIGlmICcuZGVjVGVzdCcgbm90IGluIGZpbGVuYW1lIG9yIGZpbGVuYW1lLnN0YXJ0c3dpdGgoIi4iKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGhlYWQsIHRhaWwgPSBmaWxlbmFtZS5zcGxpdCgnLicpCisgICAgICAgIGlmIHRvZG9fdGVzdHMgaXMgbm90IE5vbmUgYW5kIGhlYWQgbm90IGluIHRvZG9fdGVzdHM6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0ZXN0ZXIgPSBsYW1iZGEgc2VsZiwgZj1maWxlbmFtZTogc2VsZi5ldmFsX2ZpbGUoZGlyZWN0b3J5ICsgZikKKyAgICAgICAgc2V0YXR0cihEZWNpbWFsVGVzdCwgJ3Rlc3RfJyArIGhlYWQsIHRlc3RlcikKKyAgICAgICAgZGVsIGZpbGVuYW1lLCBoZWFkLCB0YWlsLCB0ZXN0ZXIKKworCisgICAgdHJ5OgorICAgICAgICBydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgaWYgdG9kb190ZXN0cyBpcyBOb25lOgorICAgICAgICAgICAgaW1wb3J0IGRlY2ltYWwgYXMgRGVjaW1hbE1vZHVsZQorICAgICAgICAgICAgcnVuX2RvY3Rlc3QoRGVjaW1hbE1vZHVsZSwgdmVyYm9zZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBzZXRjb250ZXh0KE9SSUdJTkFMX0NPTlRFWFQpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IG9wdHBhcnNlCisgICAgcCA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigidGVzdF9kZWNpbWFsLnB5IFstLWRlYnVnXSBbey0tc2tpcCB8IHRlc3QxIFt0ZXN0MiBbLi4uXV19XSIpCisgICAgcC5hZGRfb3B0aW9uKCctLWRlYnVnJywgJy1kJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nc2hvd3MgdGhlIHRlc3QgbnVtYmVyIGFuZCBjb250ZXh0IGJlZm9yZSBlYWNoIHRlc3QnKQorICAgIHAuYWRkX29wdGlvbignLS1za2lwJywgICctcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J3NraXAgb3ZlciA5MCUgb2YgdGhlIGFyaXRobWV0aWMgdGVzdHMnKQorICAgIChvcHQsIGFyZ3MpID0gcC5wYXJzZV9hcmdzKCkKKworICAgIGlmIG9wdC5za2lwOgorICAgICAgICB0ZXN0X21haW4oYXJpdGg9RmFsc2UsIHZlcmJvc2U9VHJ1ZSkKKyAgICBlbGlmIGFyZ3M6CisgICAgICAgIHRlc3RfbWFpbihhcml0aD1UcnVlLCB2ZXJib3NlPVRydWUsIHRvZG9fdGVzdHM9YXJncywgZGVidWc9b3B0LmRlYnVnKQorICAgIGVsc2U6CisgICAgICAgIHRlc3RfbWFpbihhcml0aD1UcnVlLCB2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kZWNvcmF0b3JzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVjb3JhdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjJiYzMwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVjb3JhdG9ycy5weQpAQCAtMCwwICsxLDMwOSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitkZWYgZnVuY2F0dHJzKCoqa3dkcyk6CisgICAgZGVmIGRlY29yYXRlKGZ1bmMpOgorICAgICAgICBmdW5jLl9fZGljdF9fLnVwZGF0ZShrd2RzKQorICAgICAgICByZXR1cm4gZnVuYworICAgIHJldHVybiBkZWNvcmF0ZQorCitjbGFzcyBNaXNjRGVjb3JhdG9ycyAob2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGF1dGhvcihuYW1lKToKKyAgICAgICAgZGVmIGRlY29yYXRlKGZ1bmMpOgorICAgICAgICAgICAgZnVuYy5fX2RpY3RfX1snYXV0aG9yJ10gPSBuYW1lCisgICAgICAgICAgICByZXR1cm4gZnVuYworICAgICAgICByZXR1cm4gZGVjb3JhdGUKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBEYmNoZWNrRXJyb3IgKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cHJzdHIsIGZ1bmMsIGFyZ3MsIGt3ZHMpOgorICAgICAgICAjIEEgcmVhbCB2ZXJzaW9uIG9mIHRoaXMgd291bGQgc2V0IGF0dHJpYnV0ZXMgaGVyZQorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgImRiY2hlY2sgJXIgZmFpbGVkIChmdW5jPSVzIGFyZ3M9JXMga3dkcz0lcykiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHByc3RyLCBmdW5jLCBhcmdzLCBrd2RzKSkKKworCitkZWYgZGJjaGVjayhleHByc3RyLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKToKKyAgICAiRGVjb3JhdG9yIHRvIGltcGxlbWVudCBkZWJ1Z2dpbmcgYXNzZXJ0aW9ucyIKKyAgICBkZWYgZGVjb3JhdGUoZnVuYyk6CisgICAgICAgIGV4cHIgPSBjb21waWxlKGV4cHJzdHIsICJkYmNoZWNrLSVzIiAlIGZ1bmMuZnVuY19uYW1lLCAiZXZhbCIpCisgICAgICAgIGRlZiBjaGVjaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIGlmIG5vdCBldmFsKGV4cHIsIGdsb2JhbHMsIGxvY2Fscyk6CisgICAgICAgICAgICAgICAgcmFpc2UgRGJjaGVja0Vycm9yKGV4cHJzdHIsIGZ1bmMsIGFyZ3MsIGt3ZHMpCisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2RzKQorICAgICAgICByZXR1cm4gY2hlY2sKKyAgICByZXR1cm4gZGVjb3JhdGUKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgY291bnRjYWxscyhjb3VudHMpOgorICAgICJEZWNvcmF0b3IgdG8gY291bnQgY2FsbHMgdG8gYSBmdW5jdGlvbiIKKyAgICBkZWYgZGVjb3JhdGUoZnVuYyk6CisgICAgICAgIGZ1bmNfbmFtZSA9IGZ1bmMuZnVuY19uYW1lCisgICAgICAgIGNvdW50c1tmdW5jX25hbWVdID0gMAorICAgICAgICBkZWYgY2FsbCgqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIGNvdW50c1tmdW5jX25hbWVdICs9IDEKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3ZHMpCisgICAgICAgIGNhbGwuZnVuY19uYW1lID0gZnVuY19uYW1lCisgICAgICAgIHJldHVybiBjYWxsCisgICAgcmV0dXJuIGRlY29yYXRlCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIG1lbW9pemUoZnVuYyk6CisgICAgc2F2ZWQgPSB7fQorICAgIGRlZiBjYWxsKCphcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNhdmVkW2FyZ3NdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJlcyA9IGZ1bmMoKmFyZ3MpCisgICAgICAgICAgICBzYXZlZFthcmdzXSA9IHJlcworICAgICAgICAgICAgcmV0dXJuIHJlcworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBVbmhhc2hhYmxlIGFyZ3VtZW50CisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncykKKyAgICBjYWxsLmZ1bmNfbmFtZSA9IGZ1bmMuZnVuY19uYW1lCisgICAgcmV0dXJuIGNhbGwKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0RGVjb3JhdG9ycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaW5nbGUoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oKTogcmV0dXJuIDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5mb28oKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQygpLmZvbygpLCA0MikKKworICAgIGRlZiB0ZXN0X3N0YXRpY21ldGhvZF9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgbm90YW1ldGhvZCh4KToKKyAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbm90YW1ldGhvZCwgMSkKKworICAgIGRlZiB0ZXN0X2RvdHRlZChzZWxmKToKKyAgICAgICAgZGVjb3JhdG9ycyA9IE1pc2NEZWNvcmF0b3JzKCkKKyAgICAgICAgQGRlY29yYXRvcnMuYXV0aG9yKCdDbGVlc2UnKQorICAgICAgICBkZWYgZm9vKCk6IHJldHVybiA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uYXV0aG9yLCAnQ2xlZXNlJykKKworICAgIGRlZiB0ZXN0X2FyZ2Zvcm1zKHNlbGYpOgorICAgICAgICAjIEEgZmV3IHRlc3RzIG9mIGFyZ3VtZW50IHBhc3NpbmcsIGFzIHdlIHVzZSByZXN0cmljdGVkIGZvcm0KKyAgICAgICAgIyBvZiBleHByZXNzaW9ucyBmb3IgZGVjb3JhdG9ycy4KKworICAgICAgICBkZWYgbm90ZWFyZ3MoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICBkZWYgZGVjb3JhdGUoZnVuYyk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihmdW5jLCAnZGJ2YWwnLCAoYXJncywga3dkcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMKKyAgICAgICAgICAgIHJldHVybiBkZWNvcmF0ZQorCisgICAgICAgIGFyZ3MgPSAoICdOb3cnLCAnaXMnLCAndGhlJywgJ3RpbWUnICkKKyAgICAgICAga3dkcyA9IGRpY3Qob25lPTEsIHR3bz0yKQorICAgICAgICBAbm90ZWFyZ3MoKmFyZ3MsICoqa3dkcykKKyAgICAgICAgZGVmIGYxKCk6IHJldHVybiA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYxKCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYxLmRidmFsLCAoYXJncywga3dkcykpCisKKyAgICAgICAgQG5vdGVhcmdzKCd0ZXJyeScsICdnaWxsaWFtJywgZXJpYz0naWRsZScsIGpvaG49J2NsZWVzZScpCisgICAgICAgIGRlZiBmMigpOiByZXR1cm4gODQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMigpLCA4NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5kYnZhbCwgKCgndGVycnknLCAnZ2lsbGlhbScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QoZXJpYz0naWRsZScsIGpvaG49J2NsZWVzZScpKSkKKworICAgICAgICBAbm90ZWFyZ3MoMSwgMiwpCisgICAgICAgIGRlZiBmMygpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjMuZGJ2YWwsICgoMSwgMiksIHt9KSkKKworICAgIGRlZiB0ZXN0X2RiY2hlY2soc2VsZik6CisgICAgICAgIEBkYmNoZWNrKCdhcmdzWzFdIGlzIG5vdCBOb25lJykKKyAgICAgICAgZGVmIGYoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYSArIGIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDEsIDIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEYmNoZWNrRXJyb3IsIGYsIDEsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9tZW1vaXplKHNlbGYpOgorICAgICAgICBjb3VudHMgPSB7fQorCisgICAgICAgIEBtZW1vaXplCisgICAgICAgIEBjb3VudGNhbGxzKGNvdW50cykKKyAgICAgICAgZGVmIGRvdWJsZSh4KToKKyAgICAgICAgICAgIHJldHVybiB4ICogMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdWJsZS5mdW5jX25hbWUsICdkb3VibGUnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRzLCBkaWN0KGRvdWJsZT0wKSkKKworICAgICAgICAjIE9ubHkgdGhlIGZpcnN0IGNhbGwgd2l0aCBhIGdpdmVuIGFyZ3VtZW50IGJ1bXBzIHRoZSBjYWxsIGNvdW50OgorICAgICAgICAjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG91YmxlKDIpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50c1snZG91YmxlJ10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG91YmxlKDIpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50c1snZG91YmxlJ10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG91YmxlKDMpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50c1snZG91YmxlJ10sIDIpCisKKyAgICAgICAgIyBVbmhhc2hhYmxlIGFyZ3VtZW50cyBkbyBub3QgZ2V0IG1lbW9pemVkOgorICAgICAgICAjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG91YmxlKFsxMF0pLCBbMTAsIDEwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudHNbJ2RvdWJsZSddLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdWJsZShbMTBdKSwgWzEwLCAxMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRzWydkb3VibGUnXSwgNCkKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHN5bnRheCByZXN0cmljdGlvbnMgLSB0aGVzZSBhcmUgYWxsIGNvbXBpbGUtdGltZSBlcnJvcnM6CisgICAgICAgICMKKyAgICAgICAgZm9yIGV4cHIgaW4gWyAiMSsyIiwgInhbM10iLCAiKDEsIDIpIiBdOgorICAgICAgICAgICAgIyBTYW5pdHkgY2hlY2s6IGlzIGV4cHIgaXMgYSB2YWxpZCBleHByZXNzaW9uIGJ5IGl0c2VsZj8KKyAgICAgICAgICAgIGNvbXBpbGUoZXhwciwgInRlc3RleHByIiwgImV4ZWMiKQorCisgICAgICAgICAgICBjb2Rlc3RyID0gIkAlc1xuZGVmIGYoKTogcGFzcyIgJSBleHByCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgY29kZXN0ciwgInRlc3QiLCAiZXhlYyIpCisKKyAgICAgICAgIyBZb3UgY2FuJ3QgcHV0IG11bHRpcGxlIGRlY29yYXRvcnMgb24gYSBzaW5nbGUgbGluZToKKyAgICAgICAgIworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkBmMSBAZjJcbmRlZiBmKCk6IHBhc3MiLCAidGVzdCIsICJleGVjIikKKworICAgICAgICAjIFRlc3QgcnVudGltZSBlcnJvcnMKKworICAgICAgICBkZWYgdW5pbXAoZnVuYyk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIGNvbnRleHQgPSBkaWN0KG51bGx2YWw9Tm9uZSwgdW5pbXA9dW5pbXApCisKKyAgICAgICAgZm9yIGV4cHIsIGV4YyBpbiBbICgidW5kZWYiLCBOYW1lRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJudWxsdmFsIiwgVHlwZUVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgibnVsbHZhbC5hdHRyIiwgQXR0cmlidXRlRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ1bmltcCIsIE5vdEltcGxlbWVudGVkRXJyb3IpXToKKyAgICAgICAgICAgIGNvZGVzdHIgPSAiQCVzXG5kZWYgZigpOiBwYXNzXG5hc3NlcnQgZigpIGlzIE5vbmUiICUgZXhwcgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoY29kZXN0ciwgInRlc3QiLCAiZXhlYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIGV2YWwsIGNvZGUsIGNvbnRleHQpCisKKyAgICBkZWYgdGVzdF9kb3VibGUoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIEBmdW5jYXR0cnMoYWJjPTEsIHh5ej0iaGFoYSIpCisgICAgICAgICAgICBAZnVuY2F0dHJzKGJvb2g9NDIpCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiByZXR1cm4gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDKCkuZm9vKCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuZm9vLmFiYywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmZvby54eXosICJoYWhhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmZvby5ib29oLCA0MikKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluIHRoZSBwcm9wZXIgb3JkZXIgdG8gdGhlIGZ1bmN0aW9uCisgICAgICAgICMgdGhleSBhcmUgZGVjb3JhdGluZy4KKyAgICAgICAgZGVmIGNhbGxudW0obnVtKToKKyAgICAgICAgICAgICIiIkRlY29yYXRvciBmYWN0b3J5IHRoYXQgcmV0dXJucyBhIGRlY29yYXRvciB0aGF0IHJlcGxhY2VzIHRoZQorICAgICAgICAgICAgcGFzc2VkLWluIGZ1bmN0aW9uIHdpdGggb25lIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgJ251bSciIiIKKyAgICAgICAgICAgIGRlZiBkZWNvKGZ1bmMpOgorICAgICAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IG51bQorICAgICAgICAgICAgcmV0dXJuIGRlY28KKyAgICAgICAgQGNhbGxudW0oMikKKyAgICAgICAgQGNhbGxudW0oMSkKKyAgICAgICAgZGVmIGZvbygpOiByZXR1cm4gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKSwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXBwbGljYXRpb24gb3JkZXIgb2YgZGVjb3JhdG9ycyBpcyBpbmNvcnJlY3QiKQorCisgICAgZGVmIHRlc3RfZXZhbF9vcmRlcihzZWxmKToKKyAgICAgICAgIyBFdmFsdWF0aW5nIGEgZGVjb3JhdGVkIGZ1bmN0aW9uIGludm9sdmVzIGZvdXIgc3RlcHMgZm9yIGVhY2gKKyAgICAgICAgIyBkZWNvcmF0b3ItbWFrZXIgKHRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBkZWNvcmF0b3IpOgorICAgICAgICAjCisgICAgICAgICMgICAgMTogRXZhbHVhdGUgdGhlIGRlY29yYXRvci1tYWtlciBuYW1lCisgICAgICAgICMgICAgMjogRXZhbHVhdGUgdGhlIGRlY29yYXRvci1tYWtlciBhcmd1bWVudHMgKGlmIGFueSkKKyAgICAgICAgIyAgICAzOiBDYWxsIHRoZSBkZWNvcmF0b3ItbWFrZXIgdG8gbWFrZSBhIGRlY29yYXRvcgorICAgICAgICAjICAgIDQ6IENhbGwgdGhlIGRlY29yYXRvcgorICAgICAgICAjCisgICAgICAgICMgV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZGVjb3JhdG9ycywgdGhlc2Ugc3RlcHMgc2hvdWxkIGJlCisgICAgICAgICMgcGVyZm9ybWVkIGluIHRoZSBhYm92ZSBvcmRlciBmb3IgZWFjaCBkZWNvcmF0b3IsIGJ1dCB3ZSBzaG91bGQKKyAgICAgICAgIyBpdGVyYXRlIHRocm91Z2ggdGhlIGRlY29yYXRvcnMgaW4gdGhlIHJldmVyc2Ugb2YgdGhlIG9yZGVyIHRoZXkKKyAgICAgICAgIyBhcHBlYXIgaW4gdGhlIHNvdXJjZS4KKworICAgICAgICBhY3Rpb25zID0gW10KKworICAgICAgICBkZWYgbWFrZV9kZWNvcmF0b3IodGFnKToKKyAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKCdtYWtlZGVjJyArIHRhZykKKyAgICAgICAgICAgIGRlZiBkZWNvcmF0ZShmdW5jKToKKyAgICAgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZCgnY2FsbGRlYycgKyB0YWcpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMKKyAgICAgICAgICAgIHJldHVybiBkZWNvcmF0ZQorCisgICAgICAgIGNsYXNzIE5hbWVMb29rdXBUcmFjZXIgKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHNlbGYuaW5kZXggPSBpbmRleAorCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgZm5hbWUpOgorICAgICAgICAgICAgICAgIGlmIGZuYW1lID09ICdtYWtlX2RlY29yYXRvcic6CisgICAgICAgICAgICAgICAgICAgIG9wbmFtZSwgcmVzID0gKCdldmFsbmFtZScsIG1ha2VfZGVjb3JhdG9yKQorICAgICAgICAgICAgICAgIGVsaWYgZm5hbWUgPT0gJ2FyZyc6CisgICAgICAgICAgICAgICAgICAgIG9wbmFtZSwgcmVzID0gKCdldmFsYXJncycsIHN0cihzZWxmLmluZGV4KSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJVbmtub3duIGF0dHJuYW1lICVzIiAlIGZuYW1lCisgICAgICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQoJyVzJWQnICUgKG9wbmFtZSwgc2VsZi5pbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIGMxLCBjMiwgYzMgPSBtYXAoTmFtZUxvb2t1cFRyYWNlciwgWyAxLCAyLCAzIF0pCisKKyAgICAgICAgZXhwZWN0ZWRfYWN0aW9ucyA9IFsgJ2V2YWxuYW1lMScsICdldmFsYXJnczEnLCAnbWFrZWRlYzEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZhbG5hbWUyJywgJ2V2YWxhcmdzMicsICdtYWtlZGVjMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmFsbmFtZTMnLCAnZXZhbGFyZ3MzJywgJ21ha2VkZWMzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbGxkZWMzJywgJ2NhbGxkZWMyJywgJ2NhbGxkZWMxJyBdCisKKyAgICAgICAgYWN0aW9ucyA9IFtdCisgICAgICAgIEBjMS5tYWtlX2RlY29yYXRvcihjMS5hcmcpCisgICAgICAgIEBjMi5tYWtlX2RlY29yYXRvcihjMi5hcmcpCisgICAgICAgIEBjMy5tYWtlX2RlY29yYXRvcihjMy5hcmcpCisgICAgICAgIGRlZiBmb28oKTogcmV0dXJuIDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKCksIDQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9ucywgZXhwZWN0ZWRfYWN0aW9ucykKKworICAgICAgICAjIFRlc3QgdGhlIGVxdWl2YWxlbmNlIGNsYWltIGluIGNoYXB0ZXIgNyBvZiB0aGUgcmVmZXJlbmNlIG1hbnVhbC4KKyAgICAgICAgIworICAgICAgICBhY3Rpb25zID0gW10KKyAgICAgICAgZGVmIGJhcigpOiByZXR1cm4gNDIKKyAgICAgICAgYmFyID0gYzEubWFrZV9kZWNvcmF0b3IoYzEuYXJnKShjMi5tYWtlX2RlY29yYXRvcihjMi5hcmcpKGMzLm1ha2VfZGVjb3JhdG9yKGMzLmFyZykoYmFyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFyKCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbnMsIGV4cGVjdGVkX2FjdGlvbnMpCisKK2NsYXNzIFRlc3RDbGFzc0RlY29yYXRvcnModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBkZWYgcGxhaW4oeCk6CisgICAgICAgICAgICB4LmV4dHJhID0gJ0hlbGxvJworICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgQHBsYWluCisgICAgICAgIGNsYXNzIEMob2JqZWN0KTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuZXh0cmEsICdIZWxsbycpCisKKyAgICBkZWYgdGVzdF9kb3VibGUoc2VsZik6CisgICAgICAgIGRlZiB0ZW4oeCk6CisgICAgICAgICAgICB4LmV4dHJhID0gMTAKKyAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgIGRlZiBhZGRfZml2ZSh4KToKKyAgICAgICAgICAgIHguZXh0cmEgKz0gNQorICAgICAgICAgICAgcmV0dXJuIHgKKworICAgICAgICBAYWRkX2ZpdmUKKyAgICAgICAgQHRlbgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmV4dHJhLCAxNSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBkZWYgYXBwbGllZF9maXJzdCh4KToKKyAgICAgICAgICAgIHguZXh0cmEgPSAnZmlyc3QnCisgICAgICAgICAgICByZXR1cm4geAorICAgICAgICBkZWYgYXBwbGllZF9zZWNvbmQoeCk6CisgICAgICAgICAgICB4LmV4dHJhID0gJ3NlY29uZCcKKyAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgIEBhcHBsaWVkX3NlY29uZAorICAgICAgICBAYXBwbGllZF9maXJzdAorICAgICAgICBjbGFzcyBDKG9iamVjdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmV4dHJhLCAnc2Vjb25kJykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdERlY29yYXRvcnMpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Q2xhc3NEZWNvcmF0b3JzKQorCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kZWZhdWx0ZGljdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDc2MGI5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkKQEAgLTAsMCArMSwxODEgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0LiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBjb3B5CitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKKworZGVmIGZvb2JhcigpOgorICAgIHJldHVybiBsaXN0CisKK2NsYXNzIFRlc3REZWZhdWx0RGljdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgZDEgPSBkZWZhdWx0ZGljdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuZGVmYXVsdF9mYWN0b3J5LCBOb25lKQorICAgICAgICBkMS5kZWZhdWx0X2ZhY3RvcnkgPSBsaXN0CisgICAgICAgIGQxWzEyXS5hcHBlbmQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIHsxMjogWzQyXX0pCisgICAgICAgIGQxWzEyXS5hcHBlbmQoMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIHsxMjogWzQyLCAyNF19KQorICAgICAgICBkMVsxM10KKyAgICAgICAgZDFbMTRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIHsxMjogWzQyLCAyNF0sIDEzOiBbXSwgMTQ6IFtdfSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWzEyXSBpcyBub3QgZDFbMTNdIGlzIG5vdCBkMVsxNF0pCisgICAgICAgIGQyID0gZGVmYXVsdGRpY3QobGlzdCwgZm9vPTEsIGJhcj0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmRlZmF1bHRfZmFjdG9yeSwgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiwgeyJmb28iOiAxLCAiYmFyIjogMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbImZvbyJdLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyWyJiYXIiXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMls0Ml0sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28iLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vIiwgZDIua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJiYXIiLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYmFyIiwgZDIua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydEluKDQyLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbig0MiwgZDIua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEyLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMiwgZDIua2V5cygpKQorICAgICAgICBkMi5kZWZhdWx0X2ZhY3RvcnkgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZGVmYXVsdF9mYWN0b3J5LCBOb25lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkMlsxNV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoMTUsKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZDJbMTVdIGRpZG4ndCByYWlzZSBLZXlFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVmYXVsdGRpY3QsIDEpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nKHNlbGYpOgorICAgICAgICBkMSA9IGRlZmF1bHRkaWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQxLl9fbWlzc2luZ19fLCA0MikKKyAgICAgICAgZDEuZGVmYXVsdF9mYWN0b3J5ID0gbGlzdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLl9fbWlzc2luZ19fKDQyKSwgW10pCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBkMSA9IGRlZmF1bHRkaWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5kZWZhdWx0X2ZhY3RvcnksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkMSksICJkZWZhdWx0ZGljdChOb25lLCB7fSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwocmVwcihkMSkpLCBkMSkKKyAgICAgICAgZDFbMTFdID0gNDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQxKSwgImRlZmF1bHRkaWN0KE5vbmUsIHsxMTogNDF9KSIpCisgICAgICAgIGQyID0gZGVmYXVsdGRpY3QoaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmRlZmF1bHRfZmFjdG9yeSwgaW50KQorICAgICAgICBkMlsxMl0gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZDIpLCAiZGVmYXVsdGRpY3QoPHR5cGUgJ2ludCc+LCB7MTI6IDQyfSkiKQorICAgICAgICBkZWYgZm9vKCk6IHJldHVybiA0MworICAgICAgICBkMyA9IGRlZmF1bHRkaWN0KGZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQzLmRlZmF1bHRfZmFjdG9yeSBpcyBmb28pCisgICAgICAgIGQzWzEzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZDMpLCAiZGVmYXVsdGRpY3QoJXMsIHsxMzogNDN9KSIgJSByZXByKGZvbykpCisKKyAgICBkZWYgdGVzdF9wcmludChzZWxmKToKKyAgICAgICAgZDEgPSBkZWZhdWx0ZGljdCgpCisgICAgICAgIGRlZiBmb28oKTogcmV0dXJuIDQyCisgICAgICAgIGQyID0gZGVmYXVsdGRpY3QoZm9vLCB7MTogMn0pCisgICAgICAgICMgTk9URTogV2UgY2FuJ3QgdXNlIHRlbXBmaWxlLltOYW1lZF1UZW1wb3JhcnlGaWxlIHNpbmNlIHRoaXMKKyAgICAgICAgIyBjb2RlIG11c3QgZXhlcmNpc2UgdGhlIHRwX3ByaW50IEMgY29kZSwgd2hpY2ggb25seSBnZXRzCisgICAgICAgICMgaW52b2tlZCBmb3IgKnJlYWwqIGZpbGVzLgorICAgICAgICB0Zm4gPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3Blbih0Zm4sICJ3KyIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJpbnQgPj5mLCBkMQorICAgICAgICAgICAgICAgIHByaW50ID4+ZiwgZDIKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgcmVwcihkMSkgKyAiXG4iKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCByZXByKGQyKSArICJcbiIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRmbikKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGQxID0gZGVmYXVsdGRpY3QoKQorICAgICAgICBkMiA9IGQxLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZDIpLCBkZWZhdWx0ZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIHt9KQorICAgICAgICBkMS5kZWZhdWx0X2ZhY3RvcnkgPSBsaXN0CisgICAgICAgIGQzID0gZDEuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkMyksIGRlZmF1bHRkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQzLmRlZmF1bHRfZmFjdG9yeSwgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMywge30pCisgICAgICAgIGQxWzQyXQorICAgICAgICBkNCA9IGQxLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZDQpLCBkZWZhdWx0ZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkNC5kZWZhdWx0X2ZhY3RvcnksIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDQsIHs0MjogW119KQorICAgICAgICBkNFsxMl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkNCwgezQyOiBbXSwgMTI6IFtdfSkKKworICAgICAgICAjIElzc3VlIDY2Mzc6IENvcHkgZmFpbHMgZm9yIGVtcHR5IGRlZmF1bHQgZGljdAorICAgICAgICBkID0gZGVmYXVsdGRpY3QoKQorICAgICAgICBkWydhJ10gPSA0MgorICAgICAgICBlID0gZC5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWydhJ10sIDQyKQorCisgICAgZGVmIHRlc3Rfc2hhbGxvd19jb3B5KHNlbGYpOgorICAgICAgICBkMSA9IGRlZmF1bHRkaWN0KGZvb2JhciwgezE6IDF9KQorICAgICAgICBkMiA9IGNvcHkuY29weShkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIGZvb2JhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiwgZDEpCisgICAgICAgIGQxLmRlZmF1bHRfZmFjdG9yeSA9IGxpc3QKKyAgICAgICAgZDIgPSBjb3B5LmNvcHkoZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZGVmYXVsdF9mYWN0b3J5LCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBkMSkKKworICAgIGRlZiB0ZXN0X2RlZXBfY29weShzZWxmKToKKyAgICAgICAgZDEgPSBkZWZhdWx0ZGljdChmb29iYXIsIHsxOiBbMV19KQorICAgICAgICBkMiA9IGNvcHkuZGVlcGNvcHkoZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZGVmYXVsdF9mYWN0b3J5LCBmb29iYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZDFbMV0gaXMgbm90IGQyWzFdKQorICAgICAgICBkMS5kZWZhdWx0X2ZhY3RvcnkgPSBsaXN0CisgICAgICAgIGQyID0gY29weS5kZWVwY29weShkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGQxKQorCisgICAgZGVmIHRlc3Rfa2V5ZXJyb3Jfd2l0aG91dF9mYWN0b3J5KHNlbGYpOgorICAgICAgICBkMSA9IGRlZmF1bHRkaWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZDFbKDEsKV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzWzBdLCAoMSwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBLZXlFcnJvciIpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfcmVwcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZTIwNDU6IHN0YWNrIG92ZXJmbG93IHdoZW4gZGVmYXVsdF9mYWN0b3J5IGlzIGEgYm91bmQgbWV0aG9kCisgICAgICAgIGNsYXNzIHN1YihkZWZhdWx0ZGljdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5kZWZhdWx0X2ZhY3RvcnkgPSBzZWxmLl9mYWN0b3J5CisgICAgICAgICAgICBkZWYgX2ZhY3Rvcnkoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGQgPSBzdWIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihkKS5zdGFydHN3aXRoKAorICAgICAgICAgICAgImRlZmF1bHRkaWN0KDxib3VuZCBtZXRob2Qgc3ViLl9mYWN0b3J5IG9mIGRlZmF1bHRkaWN0KC4uLiIpKQorCisgICAgICAgICMgTk9URTogcHJpbnRpbmcgYSBzdWJjbGFzcyBvZiBhIGJ1aWx0aW4gdHlwZSBkb2VzIG5vdCBjYWxsIGl0cworICAgICAgICAjIHRwX3ByaW50IHNsb3QuIFNvIHRoaXMgcGFydCBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSB0ZXN0IGFzIGFib3ZlLgorICAgICAgICB0Zm4gPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3Blbih0Zm4sICJ3KyIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJpbnQgPj5mLCBkCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRmbikKKworICAgIGRlZiB0ZXN0X2NhbGxhYmxlX2FyZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWZhdWx0ZGljdCwge30pCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3REZWZhdWx0RGljdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTVhMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKQEAgLTAsMCArMSw4MDMgQEAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBzZXFfdGVzdHMKK2ltcG9ydCBnYworaW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBjb3B5CitpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJ1Y3QKKworQklHID0gMTAwMDAwCisKK2RlZiBmYWlsKCk6CisgICAgcmFpc2UgU3ludGF4RXJyb3IKKyAgICB5aWVsZCAxCisKK2NsYXNzIEJhZENtcDoKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKK2NsYXNzIE11dGF0ZUNtcDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVxdWUsIHJlc3VsdCk6CisgICAgICAgIHNlbGYuZGVxdWUgPSBkZXF1ZQorICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzZWxmLmRlcXVlLmNsZWFyKCkKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0CisKK2NsYXNzIFRlc3RCYXNpYyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSh4cmFuZ2UoLTUxMjUsIC01MDAwKSkKKyAgICAgICAgZC5fX2luaXRfXyh4cmFuZ2UoMjAwKSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDIwMCwgNDAwKToKKyAgICAgICAgICAgIGQuYXBwZW5kKGkpCisgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHhyYW5nZSgtMjAwLCAwKSk6CisgICAgICAgICAgICBkLmFwcGVuZGxlZnQoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCByYW5nZSgtMjAwLCA0MDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgNjAwKQorCisgICAgICAgIGxlZnQgPSBbZC5wb3BsZWZ0KCkgZm9yIGkgaW4geHJhbmdlKDI1MCldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVmdCwgcmFuZ2UoLTIwMCwgNTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIHJhbmdlKDUwLCA0MDApKQorCisgICAgICAgIHJpZ2h0ID0gW2QucG9wKCkgZm9yIGkgaW4geHJhbmdlKDI1MCldCisgICAgICAgIHJpZ2h0LnJldmVyc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJpZ2h0LCByYW5nZSgxNTAsIDQwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoNTAsIDE1MCkpCisKKyAgICBkZWYgdGVzdF9tYXhsZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRlcXVlLCAnYWJjJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRlcXVlLCAnYWJjJywgLTIpCisgICAgICAgIGl0ID0gaXRlcihyYW5nZSgxMCkpCisgICAgICAgIGQgPSBkZXF1ZShpdCwgbWF4bGVuPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZCksICdkZXF1ZShbNywgOCwgOV0sIG1heGxlbj0zKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoNywgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRlcXVlKHJhbmdlKDEwKSwgMykpCisgICAgICAgIGQuYXBwZW5kKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIHJhbmdlKDgsIDExKSkKKyAgICAgICAgZC5hcHBlbmRsZWZ0KDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoNywgMTApKQorICAgICAgICBkLmV4dGVuZChbMTAsIDExXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCByYW5nZSg5LCAxMikpCisgICAgICAgIGQuZXh0ZW5kbGVmdChbOCwgN10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoNywgMTApKQorICAgICAgICBkID0gZGVxdWUoeHJhbmdlKDIwMCksIG1heGxlbj0xMCkKKyAgICAgICAgZC5hcHBlbmQoZCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQgPj4gZm8sIGQsCisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZCgpLCByZXByKGQpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgICAgIGQgPSBkZXF1ZShyYW5nZSgxMCksIG1heGxlbj1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZCksICdkZXF1ZShbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0pJykKKyAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50ID4+IGZvLCBkLAorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWQoKSwgcmVwcihkKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X21heGxlbl96ZXJvKHNlbGYpOgorICAgICAgICBpdCA9IGl0ZXIocmFuZ2UoMTAwKSkKKyAgICAgICAgZGVxdWUoaXQsIG1heGxlbj0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKKworICAgICAgICBpdCA9IGl0ZXIocmFuZ2UoMTAwKSkKKyAgICAgICAgZCA9IGRlcXVlKG1heGxlbj0wKQorICAgICAgICBkLmV4dGVuZChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCisKKyAgICAgICAgaXQgPSBpdGVyKHJhbmdlKDEwMCkpCisgICAgICAgIGQgPSBkZXF1ZShtYXhsZW49MCkKKyAgICAgICAgZC5leHRlbmRsZWZ0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKKworICAgIGRlZiB0ZXN0X21heGxlbl9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVxdWUoKS5tYXhsZW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVxdWUoJ2FiYycpLm1heGxlbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXF1ZSgnYWJjJywgbWF4bGVuPTQpLm1heGxlbiwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXF1ZSgnYWJjJywgbWF4bGVuPTIpLm1heGxlbiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXF1ZSgnYWJjJywgbWF4bGVuPTApLm1heGxlbiwgMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkID0gZGVxdWUoJ2FiYycpCisgICAgICAgICAgICBkLm1heGxlbiA9IDEwCisKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCcnLCAnYWJyYWNhZGFicmEnLCAnc2ltc2FsYWJpbScqNTAwKydhYmMnKToKKyAgICAgICAgICAgIHMgPSBsaXN0KHMpCisgICAgICAgICAgICBkID0gZGVxdWUocykKKyAgICAgICAgICAgIGZvciBsZXR0ZXIgaW4gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQobGV0dGVyKSwgZC5jb3VudChsZXR0ZXIpLCAocywgZCwgbGV0dGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmNvdW50KSAgICAgICAjIHRvbyBmZXcgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuY291bnQsIDEsIDIpICMgdG9vIG1hbnkgYXJncworICAgICAgICBjbGFzcyBCYWRDb21wYXJlOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgQXJpdGhtZXRpY0Vycm9yCisgICAgICAgIGQgPSBkZXF1ZShbMSwgMiwgQmFkQ29tcGFyZSgpLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJpdGhtZXRpY0Vycm9yLCBkLmNvdW50LCAyKQorICAgICAgICBkID0gZGVxdWUoWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcml0aG1ldGljRXJyb3IsIGQuY291bnQsIEJhZENvbXBhcmUoKSkKKyAgICAgICAgY2xhc3MgTXV0YXRpbmdDb21wYXJlOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgc2VsZi5kLnBvcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgbSA9IE11dGF0aW5nQ29tcGFyZSgpCisgICAgICAgIGQgPSBkZXF1ZShbMSwgMiwgMywgbSwgNCwgNV0pCisgICAgICAgIG0uZCA9IGQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBkLmNvdW50LCAzKQorCisgICAgICAgICMgdGVzdCBpc3N1ZTExMDA0CisgICAgICAgICMgYmxvY2sgYWR2YW5jZSBmYWlsZWQgYWZ0ZXIgcm90YXRpb24gYWxpZ25lZCBlbGVtZW50cyBvbiByaWdodCBzaWRlIG9mIGJsb2NrCisgICAgICAgIGQgPSBkZXF1ZShbTm9uZV0qMTYpCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihkKSk6CisgICAgICAgICAgICBkLnJvdGF0ZSgtMSkKKyAgICAgICAgZC5yb3RhdGUoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvdW50KDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY291bnQoTm9uZSksIDE2KQorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSgneGFiYycpOyBkLnBvcGxlZnQoKQorICAgICAgICBmb3IgZSBpbiBbZCwgZGVxdWUoJ2FiYycpLCBkZXF1ZSgnYWInKSwgZGVxdWUoKSwgbGlzdChkKV06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQ9PWUsIHR5cGUoZCk9PXR5cGUoZSkgYW5kIGxpc3QoZCk9PWxpc3QoZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQhPWUsIG5vdCh0eXBlKGQpPT10eXBlKGUpIGFuZCBsaXN0KGQpPT1saXN0KGUpKSkKKworICAgICAgICBhcmdzID0gbWFwKGRlcXVlLCAoJycsICdhJywgJ2InLCAnYWInLCAnYmEnLCAnYWJjJywgJ3hiYScsICd4YWJjJywgJ2NiYScpKQorICAgICAgICBmb3IgeCBpbiBhcmdzOgorICAgICAgICAgICAgZm9yIHkgaW4gYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPT0geSwgbGlzdCh4KSA9PSBsaXN0KHkpLCAoeCx5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggIT0geSwgbGlzdCh4KSAhPSBsaXN0KHkpLCAoeCx5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPCAgeSwgbGlzdCh4KSA8ICBsaXN0KHkpLCAoeCx5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPD0geSwgbGlzdCh4KSA8PSBsaXN0KHkpLCAoeCx5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPiAgeSwgbGlzdCh4KSA+ICBsaXN0KHkpLCAoeCx5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPj0geSwgbGlzdCh4KSA+PSBsaXN0KHkpLCAoeCx5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh4LHkpLCBjbXAobGlzdCh4KSxsaXN0KHkpKSwgKHgseSkpCisKKyAgICBkZWYgdGVzdF9leHRlbmQoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5leHRlbmQsIDEpCisgICAgICAgIGQuZXh0ZW5kKCdiY2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoJ2FiY2QnKSkKKyAgICAgICAgZC5leHRlbmQoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KCdhYmNkYWJjZCcpKQorCisgICAgZGVmIHRlc3RfaWFkZChzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCdhJykKKyAgICAgICAgZCArPSAnYmNkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoJ2FiY2QnKSkKKyAgICAgICAgZCArPSBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdCgnYWJjZGFiY2QnKSkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGxlZnQoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5leHRlbmRsZWZ0LCAxKQorICAgICAgICBkLmV4dGVuZGxlZnQoJ2JjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChyZXZlcnNlZCgnYWJjZCcpKSkKKyAgICAgICAgZC5leHRlbmRsZWZ0KGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdCgnYWJjZGRjYmEnKSkKKyAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgZC5leHRlbmRsZWZ0KHJhbmdlKDEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QocmV2ZXJzZWQocmFuZ2UoMTAwMCkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGQuZXh0ZW5kbGVmdCwgZmFpbCgpKQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgbiA9IDIwMAorICAgICAgICBkID0gZGVxdWUoeHJhbmdlKG4pKQorICAgICAgICBsID0gcmFuZ2UobikKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG4pOgorICAgICAgICAgICAgZC5wb3BsZWZ0KCkKKyAgICAgICAgICAgIGwucG9wKDApCisgICAgICAgICAgICBpZiByYW5kb20ucmFuZG9tKCkgPCAwLjU6CisgICAgICAgICAgICAgICAgZC5hcHBlbmQoaSkKKyAgICAgICAgICAgICAgICBsLmFwcGVuZChpKQorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKDEtbGVuKGwpLCBsZW4obCkpOgorICAgICAgICAgICAgICAgIGFzc2VydCBkW2pdID09IGxbal0KKworICAgICAgICBkID0gZGVxdWUoJ3N1cGVybWFuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzBdLCAncycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFstMV0sICduJykKKyAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZC5fX2dldGl0ZW1fXywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZC5fX2dldGl0ZW1fXywgLTEpCisKKyAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBuID0gMjAwCisgICAgICAgIGQgPSBkZXF1ZSh4cmFuZ2UobikpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShuKToKKyAgICAgICAgICAgIGRbaV0gPSAxMCAqIGkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBbMTAqaSBmb3IgaSBpbiB4cmFuZ2UobildKQorICAgICAgICBsID0gbGlzdChkKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMS1uLCAwLCAtMSk6CisgICAgICAgICAgICBkW2ldID0gNyppCisgICAgICAgICAgICBsW2ldID0gNyppCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbCkKKworICAgIGRlZiB0ZXN0X2RlbGl0ZW0oc2VsZik6CisgICAgICAgIG4gPSA1MDAgICAgICAgICAjIE8obioqMikgdGVzdCwgZG9uJ3QgbWFrZSB0aGlzIHRvbyBiaWcKKyAgICAgICAgZCA9IGRlcXVlKHhyYW5nZShuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZC5fX2RlbGl0ZW1fXywgLW4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZC5fX2RlbGl0ZW1fXywgbikKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG4pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIG4taSkKKyAgICAgICAgICAgIGogPSByYW5kb20ucmFuZHJhbmdlKC1sZW4oZCksIGxlbihkKSkKKyAgICAgICAgICAgIHZhbCA9IGRbal0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odmFsLCBkKQorICAgICAgICAgICAgZGVsIGRbal0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odmFsLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKKworICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6CisgICAgICAgIG4gPSA1MDAgICAgICAgICAjIE8obioqMikgdGVzdCwgZG9uJ3QgbWFrZSB0aGlzIHRvbyBiaWcKKyAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZG9tKCkgZm9yIGkgaW4gcmFuZ2UobildCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgZCA9IGRlcXVlKGRhdGFbOmldKQorICAgICAgICAgICAgciA9IGQucmV2ZXJzZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QocmV2ZXJzZWQoZGF0YVs6aV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMociwgTm9uZSkKKyAgICAgICAgICAgIGQucmV2ZXJzZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGRhdGFbOmldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQucmV2ZXJzZSwgMSkgICAgICAgICAgIyBBcml0eSBpcyB6ZXJvCisKKyAgICBkZWYgdGVzdF9yb3RhdGUoc2VsZik6CisgICAgICAgIHMgPSB0dXBsZSgnYWJjZGUnKQorICAgICAgICBuID0gbGVuKHMpCisKKyAgICAgICAgZCA9IGRlcXVlKHMpCisgICAgICAgIGQucm90YXRlKDEpICAgICAgICAgICAgICMgdmVyaWZ5IHJvdCgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oZCksICdlYWJjZCcpCisKKyAgICAgICAgZCA9IGRlcXVlKHMpCisgICAgICAgIGQucm90YXRlKC0xKSAgICAgICAgICAgICMgdmVyaWZ5IHJvdCgtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKGQpLCAnYmNkZWEnKQorICAgICAgICBkLnJvdGF0ZSgpICAgICAgICAgICAgICAjIGNoZWNrIGRlZmF1bHQgdG8gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGQpLCBzKQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZShuKjMpOgorICAgICAgICAgICAgZCA9IGRlcXVlKHMpCisgICAgICAgICAgICBlID0gZGVxdWUoZCkKKyAgICAgICAgICAgIGQucm90YXRlKGkpICAgICAgICAgIyBjaGVjayB2cy4gcm90KDEpIG4gdGltZXMKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZShpKToKKyAgICAgICAgICAgICAgICBlLnJvdGF0ZSgxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShkKSwgdHVwbGUoZSkpCisgICAgICAgICAgICBkLnJvdGF0ZSgtaSkgICAgICAgICMgY2hlY2sgdGhhdCBpdCB3b3JrcyBpbiByZXZlcnNlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGQpLCBzKQorICAgICAgICAgICAgZS5yb3RhdGUobi1pKSAgICAgICAjIGNoZWNrIHRoYXQgaXQgd3JhcHMgZm9yd2FyZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShlKSwgcykKKworICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobiozKToKKyAgICAgICAgICAgIGQgPSBkZXF1ZShzKQorICAgICAgICAgICAgZSA9IGRlcXVlKGQpCisgICAgICAgICAgICBkLnJvdGF0ZSgtaSkKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZShpKToKKyAgICAgICAgICAgICAgICBlLnJvdGF0ZSgtMSkgICAgIyBjaGVjayB2cy4gcm90KC0xKSBuIHRpbWVzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGQpLCB0dXBsZShlKSkKKyAgICAgICAgICAgIGQucm90YXRlKGkpICAgICAgICAgIyBjaGVjayB0aGF0IGl0IHdvcmtzIGluIHJldmVyc2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoZCksIHMpCisgICAgICAgICAgICBlLnJvdGF0ZShpLW4pICAgICAgICMgY2hlY2sgdGhhdCBpdCB3cmFwcyBiYWNrYXJvdW5kCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGUpLCBzKQorCisgICAgICAgIGQgPSBkZXF1ZShzKQorICAgICAgICBlID0gZGVxdWUocykKKyAgICAgICAgZS5yb3RhdGUoQklHKzE3KSAgICAgICAgIyB2ZXJpZnkgb24gbG9uZyBzZXJpZXMgb2Ygcm90YXRlcworICAgICAgICBkciA9IGQucm90YXRlCisgICAgICAgIGZvciBpIGluIHhyYW5nZShCSUcrMTcpOgorICAgICAgICAgICAgZHIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGQpLCB0dXBsZShlKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQucm90YXRlLCAneCcpICAgIyBXcm9uZyBhcmcgdHlwZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQucm90YXRlLCAxLCAxMCkgIyBUb28gbWFueSBhcmdzCisKKyAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgZC5yb3RhdGUoKSAgICAgICAgICAgICAgIyByb3RhdGUgYW4gZW1wdHkgZGVxdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkZXF1ZSgpKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoJ2FiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDIpCisgICAgICAgIGQucG9wbGVmdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAxKQorICAgICAgICBkLnBvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBkLnBvcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisgICAgICAgIGQuYXBwZW5kKCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDEpCisgICAgICAgIGQuYXBwZW5kbGVmdCgnZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAyKQorICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisKKyAgICBkZWYgdGVzdF91bmRlcmZsb3coc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGQucG9wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBkLnBvcGxlZnQpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKHhyYW5nZSgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMTAwKQorICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgW10pCisgICAgICAgIGQuY2xlYXIoKSAgICAgICAgICAgICAgICMgY2xlYXIgYW4gZW10cHkgZGVxdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBbXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCdhYmNkZWZnaGNpaicpCisgICAgICAgIGQucmVtb3ZlKCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkZXF1ZSgnYWJkZWZnaGNpaicpKQorICAgICAgICBkLnJlbW92ZSgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGVxdWUoJ2FiZGVmZ2hpaicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkLnJlbW92ZSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRlcXVlKCdhYmRlZmdoaWonKSkKKworICAgICAgICAjIEhhbmRsZSBjb21wYXJpc29uIGVycm9ycworICAgICAgICBkID0gZGVxdWUoWydhJywgJ2InLCBCYWRDbXAoKSwgJ2MnXSkKKyAgICAgICAgZSA9IGRlcXVlKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZC5yZW1vdmUsICdjJykKKyAgICAgICAgZm9yIHgsIHkgaW4gemlwKGQsIGUpOgorICAgICAgICAgICAgIyB2ZXJpZnkgdGhhdCBvcmlnaW5hbCBvcmRlciBhbmQgdmFsdWVzIGFyZSByZXRhaW5lZC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHkpCisKKyAgICAgICAgIyBIYW5kbGUgZXZpbCBtdXRhdG9yCisgICAgICAgIGZvciBtYXRjaCBpbiAoVHJ1ZSwgRmFsc2UpOgorICAgICAgICAgICAgZCA9IGRlcXVlKFsnYWInXSkKKyAgICAgICAgICAgIGQuZXh0ZW5kKFtNdXRhdGVDbXAoZCwgbWF0Y2gpLCAnYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZC5yZW1vdmUsICdjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGVxdWUoKSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSh4cmFuZ2UoMjAwKSkKKyAgICAgICAgZSA9IGV2YWwocmVwcihkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorICAgICAgICBkLmFwcGVuZChkKQorICAgICAgICBzZWxmLmFzc2VydEluKCcuLi4nLCByZXByKGQpKQorCisgICAgZGVmIHRlc3RfcHJpbnQoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSh4cmFuZ2UoMjAwKSkKKyAgICAgICAgZC5hcHBlbmQoZCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQgPj4gZm8sIGQsCisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZCgpLCByZXByKGQpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZXF1ZSwgJ2FiYycsIDIsIDMpOworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlcXVlLCAxKTsKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgZGVxdWUoJ2FiYycpKQorCisgICAgZGVmIHRlc3RfbG9uZ19zdGVhZHlzdGF0ZV9xdWV1ZV9wb3BsZWZ0KHNlbGYpOgorICAgICAgICBmb3Igc2l6ZSBpbiAoMCwgMSwgMiwgMTAwLCAxMDAwKToKKyAgICAgICAgICAgIGQgPSBkZXF1ZSh4cmFuZ2Uoc2l6ZSkpCisgICAgICAgICAgICBhcHBlbmQsIHBvcCA9IGQuYXBwZW5kLCBkLnBvcGxlZnQKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzaXplLCBCSUcpOgorICAgICAgICAgICAgICAgIGFwcGVuZChpKQorICAgICAgICAgICAgICAgIHggPSBwb3AoKQorICAgICAgICAgICAgICAgIGlmIHggIT0gaSAtIHNpemU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgaS1zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCByYW5nZShCSUctc2l6ZSwgQklHKSkKKworICAgIGRlZiB0ZXN0X2xvbmdfc3RlYWR5c3RhdGVfcXVldWVfcG9wcmlnaHQoc2VsZik6CisgICAgICAgIGZvciBzaXplIGluICgwLCAxLCAyLCAxMDAsIDEwMDApOgorICAgICAgICAgICAgZCA9IGRlcXVlKHJldmVyc2VkKHhyYW5nZShzaXplKSkpCisgICAgICAgICAgICBhcHBlbmQsIHBvcCA9IGQuYXBwZW5kbGVmdCwgZC5wb3AKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzaXplLCBCSUcpOgorICAgICAgICAgICAgICAgIGFwcGVuZChpKQorICAgICAgICAgICAgICAgIHggPSBwb3AoKQorICAgICAgICAgICAgICAgIGlmIHggIT0gaSAtIHNpemU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgaS1zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKGxpc3QoZCkpKSwgcmFuZ2UoQklHLXNpemUsIEJJRykpCisKKyAgICBkZWYgdGVzdF9iaWdfcXVldWVfcG9wbGVmdChzZWxmKToKKyAgICAgICAgcGFzcworICAgICAgICBkID0gZGVxdWUoKQorICAgICAgICBhcHBlbmQsIHBvcCA9IGQuYXBwZW5kLCBkLnBvcGxlZnQKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKEJJRyk6CisgICAgICAgICAgICBhcHBlbmQoaSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKEJJRyk6CisgICAgICAgICAgICB4ID0gcG9wKCkKKyAgICAgICAgICAgIGlmIHggIT0gaToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGkpCisKKyAgICBkZWYgdGVzdF9iaWdfcXVldWVfcG9wcmlnaHQoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSgpCisgICAgICAgIGFwcGVuZCwgcG9wID0gZC5hcHBlbmRsZWZ0LCBkLnBvcAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoQklHKToKKyAgICAgICAgICAgIGFwcGVuZChpKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoQklHKToKKyAgICAgICAgICAgIHggPSBwb3AoKQorICAgICAgICAgICAgaWYgeCAhPSBpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgaSkKKworICAgIGRlZiB0ZXN0X2JpZ19zdGFja19yaWdodChzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgYXBwZW5kLCBwb3AgPSBkLmFwcGVuZCwgZC5wb3AKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKEJJRyk6CisgICAgICAgICAgICBhcHBlbmQoaSkKKyAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQoeHJhbmdlKEJJRykpOgorICAgICAgICAgICAgeCA9IHBvcCgpCisgICAgICAgICAgICBpZiB4ICE9IGk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKKworICAgIGRlZiB0ZXN0X2JpZ19zdGFja19sZWZ0KHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoKQorICAgICAgICBhcHBlbmQsIHBvcCA9IGQuYXBwZW5kbGVmdCwgZC5wb3BsZWZ0CisgICAgICAgIGZvciBpIGluIHhyYW5nZShCSUcpOgorICAgICAgICAgICAgYXBwZW5kKGkpCisgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHhyYW5nZShCSUcpKToKKyAgICAgICAgICAgIHggPSBwb3AoKQorICAgICAgICAgICAgaWYgeCAhPSBpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfaXRlcl9pbml0KHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoeHJhbmdlKDIwMCkpCisgICAgICAgIGUgPSBkZXF1ZShkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGQpLCBpZChlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoeHJhbmdlKDIwMCkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGQsIGkpCisgICAgICAgICAgICBlID0gcGlja2xlLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGQpLCBpZChlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworIyMgICAgZGVmIHRlc3RfcGlja2xlX3JlY3Vyc2l2ZShzZWxmKToKKyMjICAgICAgICBkID0gZGVxdWUoJ2FiYycpCisjIyAgICAgICAgZC5hcHBlbmQoZCkKKyMjICAgICAgICBmb3IgaSBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorIyMgICAgICAgICAgICBlID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhkLCBpKSkKKyMjICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisjIyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQoZSksIGlkKGVbLTFdKSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5KHNlbGYpOgorICAgICAgICBtdXQgPSBbMTBdCisgICAgICAgIGQgPSBkZXF1ZShbbXV0XSkKKyAgICAgICAgZSA9IGNvcHkuZGVlcGNvcHkoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorICAgICAgICBtdXRbMF0gPSAxMQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGQpLCBpZChlKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgbXV0ID0gWzEwXQorICAgICAgICBkID0gZGVxdWUoW211dF0pCisgICAgICAgIGUgPSBjb3B5LmNvcHkoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorICAgICAgICBtdXRbMF0gPSAxMQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGQpLCBpZChlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZWQoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnYWJjZCcsIHhyYW5nZSgyMDAwKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQoZGVxdWUocykpKSwgbGlzdChyZXZlcnNlZChzKSkpCisKKyAgICBkZWYgdGVzdF9nY19kb2VzbnRfYmxvd3VwKHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gYXNzZXJ0LWZhaWwgaW4gZGVxdWVfdHJhdmVyc2UoKSB1bmRlciBhIGRlYnVnCisgICAgICAgICMgYnVpbGQsIG9yIHJ1biB3aWxkIHdpdGggYSBOVUxMIHBvaW50ZXIgaW4gYSByZWxlYXNlIGJ1aWxkLgorICAgICAgICBkID0gZGVxdWUoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgIGQuYXBwZW5kKDEpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5lcl9pdGVyYXRvcihzZWxmKToKKyAgICAgICAgIyBCdWcgIzM2ODA6IHRwX3RyYXZlcnNlIHdhcyBub3QgaW1wbGVtZW50ZWQgZm9yIGRlcXVlIGl0ZXJhdG9yIG9iamVjdHMKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIG9iaiA9IEMoKQorICAgICAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYob2JqKQorICAgICAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGRlcXVlKFtvYmosIDFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb250YWluZXIgPSByZXZlcnNlZChkZXF1ZShbb2JqLCAxXSkpCisgICAgICAgICAgICBvYmoueCA9IGl0ZXIoY29udGFpbmVyKQorICAgICAgICAgICAgZGVsIG9iaiwgY29udGFpbmVyCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWYoKSBpcyBOb25lLCAiQ3ljbGUgd2FzIG5vdCBjb2xsZWN0ZWQiKQorCisgICAgY2hlY2tfc2l6ZW9mID0gdGVzdF9zdXBwb3J0LmNoZWNrX3NpemVvZgorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zaXplb2Yoc2VsZik6CisgICAgICAgIEJMT0NLTEVOID0gNjIKKyAgICAgICAgYmFzZXNpemUgPSB0ZXN0X3N1cHBvcnQuY2FsY29ianNpemUoJzJQNFBsUCcpCisgICAgICAgIGJsb2Nrc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZSgnMlAlZFAnICUgQkxPQ0tMRU4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqZWN0Ll9fc2l6ZW9mX18oZGVxdWUoKSksIGJhc2VzaXplKQorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCisgICAgICAgIGNoZWNrKGRlcXVlKCksIGJhc2VzaXplICsgYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKKyAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKEJMT0NLTEVOIC8vIDIpKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCisgICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAvLyAyICsgMSkpLCBiYXNlc2l6ZSArIDIgKiBibG9ja3NpemUpCisgICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqICg0MiAqIEJMT0NLTEVOKSksIGJhc2VzaXplICsgNDMgKiBibG9ja3NpemUpCisKK2NsYXNzIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgorICAgICAgICAgICAgZm9yIGcgaW4gKHNlcV90ZXN0cy5TZXF1ZW5jZSwgc2VxX3Rlc3RzLkl0ZXJGdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHNlcV90ZXN0cy5JdGVyR2VuLCBzZXFfdGVzdHMuSXRlckZ1bmNTdG9wLAorICAgICAgICAgICAgICAgICAgICAgIHNlcV90ZXN0cy5pdGVybXVsdGksIHNlcV90ZXN0cy5pdGVyZnVuYyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRlcXVlKGcocykpKSwgbGlzdChnKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVxdWUsIHNlcV90ZXN0cy5JdGVyTmV4dE9ubHkocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlcXVlLCBzZXFfdGVzdHMuSXRlck5vTmV4dChzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBkZXF1ZSwgc2VxX3Rlc3RzLkl0ZXJHZW5FeGMocykpCisKKyAgICBkZWYgdGVzdF9pdGVyX3dpdGhfYWx0ZXJlZF9kYXRhKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoJ2FiY2RlZmcnKQorICAgICAgICBpdCA9IGl0ZXIoZCkKKyAgICAgICAgZC5wb3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGl0Lm5leHQpCisKKyAgICBkZWYgdGVzdF9ydW50aW1lX2Vycm9yX29uX2VtcHR5X2RlcXVlKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoKQorICAgICAgICBpdCA9IGl0ZXIoZCkKKyAgICAgICAgZC5hcHBlbmQoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgaXQubmV4dCkKKworY2xhc3MgRGVxdWUoZGVxdWUpOgorICAgIHBhc3MKKworY2xhc3MgRGVxdWVXaXRoQmFkSXRlcihkZXF1ZSk6CisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IKKworY2xhc3MgVGVzdFN1YmNsYXNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgZCA9IERlcXVlKHhyYW5nZSgyNSkpCisgICAgICAgIGQuX19pbml0X18oeHJhbmdlKDIwMCkpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgyMDAsIDQwMCk6CisgICAgICAgICAgICBkLmFwcGVuZChpKQorICAgICAgICBmb3IgaSBpbiByZXZlcnNlZCh4cmFuZ2UoLTIwMCwgMCkpOgorICAgICAgICAgICAgZC5hcHBlbmRsZWZ0KGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoLTIwMCwgNDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDYwMCkKKworICAgICAgICBsZWZ0ID0gW2QucG9wbGVmdCgpIGZvciBpIGluIHhyYW5nZSgyNTApXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlZnQsIHJhbmdlKC0yMDAsIDUwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCByYW5nZSg1MCwgNDAwKSkKKworICAgICAgICByaWdodCA9IFtkLnBvcCgpIGZvciBpIGluIHhyYW5nZSgyNTApXQorICAgICAgICByaWdodC5yZXZlcnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyaWdodCwgcmFuZ2UoMTUwLCA0MDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIHJhbmdlKDUwLCAxNTApKQorCisgICAgICAgIGQuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKKworICAgIGRlZiB0ZXN0X2NvcHlfcGlja2xlKHNlbGYpOgorCisgICAgICAgIGQgPSBEZXF1ZSgnYWJjJykKKworICAgICAgICBlID0gZC5fX2NvcHlfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkKSwgdHlwZShlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorCisgICAgICAgIGUgPSBEZXF1ZShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworICAgICAgICBzID0gcGlja2xlLmR1bXBzKGQpCisgICAgICAgIGUgPSBwaWNrbGUubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkKSwgdHlwZShlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorCisgICAgICAgIGQgPSBEZXF1ZSgnYWJjZGUnLCBtYXhsZW49NCkKKworICAgICAgICBlID0gZC5fX2NvcHlfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkKSwgdHlwZShlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorCisgICAgICAgIGUgPSBEZXF1ZShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworICAgICAgICBzID0gcGlja2xlLmR1bXBzKGQpCisgICAgICAgIGUgPSBwaWNrbGUubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkKSwgdHlwZShlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorCisjIyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisjIyAgICAgICAgZCA9IERlcXVlKCdhYmMnKQorIyMgICAgICAgIGQuYXBwZW5kKGQpCisjIworIyMgICAgICAgIGUgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGQpKQorIyMgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorIyMgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkKSwgdHlwZShlKSkKKyMjICAgICAgICBkZCA9IGQucG9wKCkKKyMjICAgICAgICBlZSA9IGUucG9wKCkKKyMjICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKGUpLCBpZChlZSkpCisjIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorIyMKKyMjICAgICAgICBkLnggPSBkCisjIyAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoZCkpCisjIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChlKSwgaWQoZS54KSkKKyMjCisjIyAgICAgICAgZCA9IERlcXVlV2l0aEJhZEl0ZXIoJ2FiYycpCisjIyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwaWNrbGUuZHVtcHMsIGQpCisKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoJ2dhbGxhaGFkJykKKyAgICAgICAgcCA9IHdlYWtyZWYucHJveHkoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIHN0cihkKSkKKyAgICAgICAgZCA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVmZXJlbmNlRXJyb3IsIHN0ciwgcCkKKworICAgIGRlZiB0ZXN0X3N0cmFuZ2Vfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFgoZGVxdWUpOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyKFtdKQorICAgICAgICBkMSA9IFgoWzEsMiwzXSkKKyAgICAgICAgZDIgPSBYKFs0LDUsNl0pCisgICAgICAgIGQxID09IGQyICAgIyBub3QgY2xlYXIgaWYgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSBUcnVlIG9yIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICMgYnV0IGl0IHVzZWQgdG8gZ2l2ZSBhIFN5c3RlbUVycm9yCisKKworY2xhc3MgU3ViY2xhc3NXaXRoS3dhcmdzKGRlcXVlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmV3YXJnPTEpOgorICAgICAgICBkZXF1ZS5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBUZXN0U3ViY2xhc3NXaXRoS3dhcmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zdWJjbGFzc193aXRoX2t3YXJncyhzZWxmKToKKyAgICAgICAgIyBTRiBidWcgIzE0ODY2NjMgLS0gdGhpcyB1c2VkIHRvIGVycm9uZW91c2x5IHJhaXNlIGEgVHlwZUVycm9yCisgICAgICAgIFN1YmNsYXNzV2l0aEt3YXJncyhuZXdhcmc9MSkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitsaWJyZWZ0ZXN0ID0gIiIiCitFeGFtcGxlIGZyb20gdGhlIExpYnJhcnkgUmVmZXJlbmNlOiAgRG9jL2xpYi9saWJjb2xsZWN0aW9ucy50ZXgKKworPj4+IGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCis+Pj4gZCA9IGRlcXVlKCdnaGknKSAgICAgICAgICAgICAgICAgIyBtYWtlIGEgbmV3IGRlcXVlIHdpdGggdGhyZWUgaXRlbXMKKz4+PiBmb3IgZWxlbSBpbiBkOiAgICAgICAgICAgICAgICAgICAjIGl0ZXJhdGUgb3ZlciB0aGUgZGVxdWUncyBlbGVtZW50cworLi4uICAgICBwcmludCBlbGVtLnVwcGVyKCkKK0cKK0gKK0kKKz4+PiBkLmFwcGVuZCgnaicpICAgICAgICAgICAgICAgICAgICAjIGFkZCBhIG5ldyBlbnRyeSB0byB0aGUgcmlnaHQgc2lkZQorPj4+IGQuYXBwZW5kbGVmdCgnZicpICAgICAgICAgICAgICAgICMgYWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBsZWZ0IHNpZGUKKz4+PiBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkZXF1ZQorZGVxdWUoWydmJywgJ2cnLCAnaCcsICdpJywgJ2onXSkKKz4+PiBkLnBvcCgpICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybiBhbmQgcmVtb3ZlIHRoZSByaWdodG1vc3QgaXRlbQorJ2onCis+Pj4gZC5wb3BsZWZ0KCkgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm4gYW5kIHJlbW92ZSB0aGUgbGVmdG1vc3QgaXRlbQorJ2YnCis+Pj4gbGlzdChkKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaXN0IHRoZSBjb250ZW50cyBvZiB0aGUgZGVxdWUKK1snZycsICdoJywgJ2knXQorPj4+IGRbMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGVlayBhdCBsZWZ0bW9zdCBpdGVtCisnZycKKz4+PiBkWy0xXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBlZWsgYXQgcmlnaHRtb3N0IGl0ZW0KKydpJworPj4+IGxpc3QocmV2ZXJzZWQoZCkpICAgICAgICAgICAgICAgICMgbGlzdCB0aGUgY29udGVudHMgb2YgYSBkZXF1ZSBpbiByZXZlcnNlCitbJ2knLCAnaCcsICdnJ10KKz4+PiAnaCcgaW4gZCAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlYXJjaCB0aGUgZGVxdWUKK1RydWUKKz4+PiBkLmV4dGVuZCgnamtsJykgICAgICAgICAgICAgICAgICAjIGFkZCBtdWx0aXBsZSBlbGVtZW50cyBhdCBvbmNlCis+Pj4gZAorZGVxdWUoWydnJywgJ2gnLCAnaScsICdqJywgJ2snLCAnbCddKQorPj4+IGQucm90YXRlKDEpICAgICAgICAgICAgICAgICAgICAgICMgcmlnaHQgcm90YXRpb24KKz4+PiBkCitkZXF1ZShbJ2wnLCAnZycsICdoJywgJ2knLCAnaicsICdrJ10pCis+Pj4gZC5yb3RhdGUoLTEpICAgICAgICAgICAgICAgICAgICAgIyBsZWZ0IHJvdGF0aW9uCis+Pj4gZAorZGVxdWUoWydnJywgJ2gnLCAnaScsICdqJywgJ2snLCAnbCddKQorPj4+IGRlcXVlKHJldmVyc2VkKGQpKSAgICAgICAgICAgICAgICMgbWFrZSBhIG5ldyBkZXF1ZSBpbiByZXZlcnNlIG9yZGVyCitkZXF1ZShbJ2wnLCAnaycsICdqJywgJ2knLCAnaCcsICdnJ10pCis+Pj4gZC5jbGVhcigpICAgICAgICAgICAgICAgICAgICAgICAgIyBlbXB0eSB0aGUgZGVxdWUKKz4+PiBkLnBvcCgpICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbm5vdCBwb3AgZnJvbSBhbiBlbXB0eSBkZXF1ZQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8cHlzaGVsbCM2PiIsIGxpbmUgMSwgaW4gLXRvcGxldmVsLQorICAgIGQucG9wKCkKK0luZGV4RXJyb3I6IHBvcCBmcm9tIGFuIGVtcHR5IGRlcXVlCisKKz4+PiBkLmV4dGVuZGxlZnQoJ2FiYycpICAgICAgICAgICAgICAjIGV4dGVuZGxlZnQoKSByZXZlcnNlcyB0aGUgaW5wdXQgb3JkZXIKKz4+PiBkCitkZXF1ZShbJ2MnLCAnYicsICdhJ10pCisKKworCis+Pj4gZGVmIGRlbGV0ZV9udGgoZCwgbik6CisuLi4gICAgIGQucm90YXRlKC1uKQorLi4uICAgICBkLnBvcGxlZnQoKQorLi4uICAgICBkLnJvdGF0ZShuKQorLi4uCis+Pj4gZCA9IGRlcXVlKCdhYmNkZWYnKQorPj4+IGRlbGV0ZV9udGgoZCwgMikgICAjIHJlbW92ZSB0aGUgZW50cnkgYXQgZFsyXQorPj4+IGQKK2RlcXVlKFsnYScsICdiJywgJ2QnLCAnZScsICdmJ10pCisKKworCis+Pj4gZGVmIHJvdW5kcm9iaW4oKml0ZXJhYmxlcyk6CisuLi4gICAgIHBlbmRpbmcgPSBkZXF1ZShpdGVyKGkpIGZvciBpIGluIGl0ZXJhYmxlcykKKy4uLiAgICAgd2hpbGUgcGVuZGluZzoKKy4uLiAgICAgICAgIHRhc2sgPSBwZW5kaW5nLnBvcGxlZnQoKQorLi4uICAgICAgICAgdHJ5OgorLi4uICAgICAgICAgICAgIHlpZWxkIHRhc2submV4dCgpCisuLi4gICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKy4uLiAgICAgICAgICAgICBjb250aW51ZQorLi4uICAgICAgICAgcGVuZGluZy5hcHBlbmQodGFzaykKKy4uLgorCis+Pj4gZm9yIHZhbHVlIGluIHJvdW5kcm9iaW4oJ2FiYycsICdkJywgJ2VmZ2gnKToKKy4uLiAgICAgcHJpbnQgdmFsdWUKKy4uLgorYQorZAorZQorYgorZgorYworZworaAorCisKKz4+PiBkZWYgbWFrZXRyZWUoaXRlcmFibGUpOgorLi4uICAgICBkID0gZGVxdWUoaXRlcmFibGUpCisuLi4gICAgIHdoaWxlIGxlbihkKSA+IDE6CisuLi4gICAgICAgICBwYWlyID0gW2QucG9wbGVmdCgpLCBkLnBvcGxlZnQoKV0KKy4uLiAgICAgICAgIGQuYXBwZW5kKHBhaXIpCisuLi4gICAgIHJldHVybiBsaXN0KGQpCisuLi4KKz4+PiBwcmludCBtYWtldHJlZSgnYWJjZGVmZ2gnKQorW1tbWydhJywgJ2InXSwgWydjJywgJ2QnXV0sIFtbJ2UnLCAnZiddLCBbJ2cnLCAnaCddXV1dCisKKyIiIgorCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworX190ZXN0X18gPSB7J2xpYnJlZnRlc3QnIDogbGlicmVmdGVzdH0KKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGltcG9ydCBzeXMKKyAgICB0ZXN0X2NsYXNzZXMgPSAoCisgICAgICAgIFRlc3RCYXNpYywKKyAgICAgICAgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3MsCisgICAgICAgIFRlc3RTdWJjbGFzcywKKyAgICAgICAgVGVzdFN1YmNsYXNzV2l0aEt3YXJncywKKyAgICApCisKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludCBjb3VudHMKKworICAgICMgZG9jdGVzdHMKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfZGVxdWUKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9kZXF1ZSwgdmVyYm9zZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kZXNjci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzY2NGFjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKQEAgLTAsMCArMSw0NzI3IEBACitpbXBvcnQgX19idWlsdGluX18KK2ltcG9ydCBnYworaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworY2xhc3MgT3BlcmF0b3JzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmJpbm9wcyA9IHsKKyAgICAgICAgICAgICdhZGQnOiAnKycsCisgICAgICAgICAgICAnc3ViJzogJy0nLAorICAgICAgICAgICAgJ211bCc6ICcqJywKKyAgICAgICAgICAgICdkaXYnOiAnLycsCisgICAgICAgICAgICAnZGl2bW9kJzogJ2Rpdm1vZCcsCisgICAgICAgICAgICAncG93JzogJyoqJywKKyAgICAgICAgICAgICdsc2hpZnQnOiAnPDwnLAorICAgICAgICAgICAgJ3JzaGlmdCc6ICc+PicsCisgICAgICAgICAgICAnYW5kJzogJyYnLAorICAgICAgICAgICAgJ3hvcic6ICdeJywKKyAgICAgICAgICAgICdvcic6ICd8JywKKyAgICAgICAgICAgICdjbXAnOiAnY21wJywKKyAgICAgICAgICAgICdsdCc6ICc8JywKKyAgICAgICAgICAgICdsZSc6ICc8PScsCisgICAgICAgICAgICAnZXEnOiAnPT0nLAorICAgICAgICAgICAgJ25lJzogJyE9JywKKyAgICAgICAgICAgICdndCc6ICc+JywKKyAgICAgICAgICAgICdnZSc6ICc+PScsCisgICAgICAgIH0KKworICAgICAgICBmb3IgbmFtZSwgZXhwciBpbiBzZWxmLmJpbm9wcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgZXhwci5pc2xvd2VyKCk6CisgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIgKyAiKGEsIGIpIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHByID0gJ2EgJXMgYicgJSBleHByCisgICAgICAgICAgICBzZWxmLmJpbm9wc1tuYW1lXSA9IGV4cHIKKworICAgICAgICBzZWxmLnVub3BzID0geworICAgICAgICAgICAgJ3Bvcyc6ICcrJywKKyAgICAgICAgICAgICduZWcnOiAnLScsCisgICAgICAgICAgICAnYWJzJzogJ2FicycsCisgICAgICAgICAgICAnaW52ZXJ0JzogJ34nLAorICAgICAgICAgICAgJ2ludCc6ICdpbnQnLAorICAgICAgICAgICAgJ2xvbmcnOiAnbG9uZycsCisgICAgICAgICAgICAnZmxvYXQnOiAnZmxvYXQnLAorICAgICAgICAgICAgJ29jdCc6ICdvY3QnLAorICAgICAgICAgICAgJ2hleCc6ICdoZXgnLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIG5hbWUsIGV4cHIgaW4gc2VsZi51bm9wcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgZXhwci5pc2xvd2VyKCk6CisgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIgKyAiKGEpIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHByID0gJyVzIGEnICUgZXhwcgorICAgICAgICAgICAgc2VsZi51bm9wc1tuYW1lXSA9IGV4cHIKKworICAgIGRlZiB1bm9wX3Rlc3Qoc2VsZiwgYSwgcmVzLCBleHByPSJsZW4oYSkiLCBtZXRoPSJfX2xlbl9fIik6CisgICAgICAgIGQgPSB7J2EnOiBhfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZXhwciwgZCksIHJlcykKKyAgICAgICAgdCA9IHR5cGUoYSkKKyAgICAgICAgbSA9IGdldGF0dHIodCwgbWV0aCkKKworICAgICAgICAjIEZpbmQgbWV0aG9kIGluIHBhcmVudCBjbGFzcworICAgICAgICB3aGlsZSBtZXRoIG5vdCBpbiB0Ll9fZGljdF9fOgorICAgICAgICAgICAgdCA9IHQuX19iYXNlc19fWzBdCisgICAgICAgICMgaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gUHlQeSksICdtJyBjYW4gYmUgYSByZWd1bGFyIHVuYm91bmQKKyAgICAgICAgIyBtZXRob2Qgb2JqZWN0OyB0aGUgZ2V0YXR0cigpIGJlbG93IG9idGFpbnMgaXRzIHVuZGVybHlpbmcgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtLCAnaW1fZnVuYycsIG0pLCB0Ll9fZGljdF9fW21ldGhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0oYSksIHJlcykKKyAgICAgICAgYm0gPSBnZXRhdHRyKGEsIG1ldGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm0oKSwgcmVzKQorCisgICAgZGVmIGJpbm9wX3Rlc3Qoc2VsZiwgYSwgYiwgcmVzLCBleHByPSJhK2IiLCBtZXRoPSJfX2FkZF9fIik6CisgICAgICAgIGQgPSB7J2EnOiBhLCAnYic6IGJ9CisKKyAgICAgICAgIyBYWFggSGFjayBzbyB0aGlzIHBhc3NlcyBiZWZvcmUgMi4zIHdoZW4gLVFuZXcgaXMgc3BlY2lmaWVkLgorICAgICAgICBpZiBtZXRoID09ICJfX2Rpdl9fIiBhbmQgMS8yID09IDAuNToKKyAgICAgICAgICAgIG1ldGggPSAiX190cnVlZGl2X18iCisKKyAgICAgICAgaWYgbWV0aCA9PSAnX19kaXZtb2RfXyc6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZXhwciwgZCksIHJlcykKKyAgICAgICAgdCA9IHR5cGUoYSkKKyAgICAgICAgbSA9IGdldGF0dHIodCwgbWV0aCkKKyAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKKyAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQorICAgICAgICAjIGluIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuIFB5UHkpLCAnbScgY2FuIGJlIGEgcmVndWxhciB1bmJvdW5kCisgICAgICAgICMgbWV0aG9kIG9iamVjdDsgdGhlIGdldGF0dHIoKSBiZWxvdyBvYnRhaW5zIGl0cyB1bmRlcmx5aW5nIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobSwgJ2ltX2Z1bmMnLCBtKSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtKGEsIGIpLCByZXMpCisgICAgICAgIGJtID0gZ2V0YXR0cihhLCBtZXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJtKGIpLCByZXMpCisKKyAgICBkZWYgdGVybm9wX3Rlc3Qoc2VsZiwgYSwgYiwgYywgcmVzLCBleHByPSJhW2I6Y10iLCBtZXRoPSJfX2dldHNsaWNlX18iKToKKyAgICAgICAgZCA9IHsnYSc6IGEsICdiJzogYiwgJ2MnOiBjfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZXhwciwgZCksIHJlcykKKyAgICAgICAgdCA9IHR5cGUoYSkKKyAgICAgICAgbSA9IGdldGF0dHIodCwgbWV0aCkKKyAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKKyAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQorICAgICAgICAjIGluIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuIFB5UHkpLCAnbScgY2FuIGJlIGEgcmVndWxhciB1bmJvdW5kCisgICAgICAgICMgbWV0aG9kIG9iamVjdDsgdGhlIGdldGF0dHIoKSBiZWxvdyBvYnRhaW5zIGl0cyB1bmRlcmx5aW5nIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobSwgJ2ltX2Z1bmMnLCBtKSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtKGEsIGIsIGMpLCByZXMpCisgICAgICAgIGJtID0gZ2V0YXR0cihhLCBtZXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJtKGIsIGMpLCByZXMpCisKKyAgICBkZWYgc2V0b3BfdGVzdChzZWxmLCBhLCBiLCByZXMsIHN0bXQ9ImErPWIiLCBtZXRoPSJfX2lhZGRfXyIpOgorICAgICAgICBkID0geydhJzogZGVlcGNvcHkoYSksICdiJzogYn0KKyAgICAgICAgZXhlYyBzdG10IGluIGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIHJlcykKKyAgICAgICAgdCA9IHR5cGUoYSkKKyAgICAgICAgbSA9IGdldGF0dHIodCwgbWV0aCkKKyAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKKyAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQorICAgICAgICAjIGluIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuIFB5UHkpLCAnbScgY2FuIGJlIGEgcmVndWxhciB1bmJvdW5kCisgICAgICAgICMgbWV0aG9kIG9iamVjdDsgdGhlIGdldGF0dHIoKSBiZWxvdyBvYnRhaW5zIGl0cyB1bmRlcmx5aW5nIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobSwgJ2ltX2Z1bmMnLCBtKSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgZFsnYSddID0gZGVlcGNvcHkoYSkKKyAgICAgICAgbShkWydhJ10sIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCByZXMpCisgICAgICAgIGRbJ2EnXSA9IGRlZXBjb3B5KGEpCisgICAgICAgIGJtID0gZ2V0YXR0cihkWydhJ10sIG1ldGgpCisgICAgICAgIGJtKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCByZXMpCisKKyAgICBkZWYgc2V0Mm9wX3Rlc3Qoc2VsZiwgYSwgYiwgYywgcmVzLCBzdG10PSJhW2JdPWMiLCBtZXRoPSJfX3NldGl0ZW1fXyIpOgorICAgICAgICBkID0geydhJzogZGVlcGNvcHkoYSksICdiJzogYiwgJ2MnOiBjfQorICAgICAgICBleGVjIHN0bXQgaW4gZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgcmVzKQorICAgICAgICB0ID0gdHlwZShhKQorICAgICAgICBtID0gZ2V0YXR0cih0LCBtZXRoKQorICAgICAgICB3aGlsZSBtZXRoIG5vdCBpbiB0Ll9fZGljdF9fOgorICAgICAgICAgICAgdCA9IHQuX19iYXNlc19fWzBdCisgICAgICAgICMgaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gUHlQeSksICdtJyBjYW4gYmUgYSByZWd1bGFyIHVuYm91bmQKKyAgICAgICAgIyBtZXRob2Qgb2JqZWN0OyB0aGUgZ2V0YXR0cigpIGJlbG93IG9idGFpbnMgaXRzIHVuZGVybHlpbmcgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtLCAnaW1fZnVuYycsIG0pLCB0Ll9fZGljdF9fW21ldGhdKQorICAgICAgICBkWydhJ10gPSBkZWVwY29weShhKQorICAgICAgICBtKGRbJ2EnXSwgYiwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIHJlcykKKyAgICAgICAgZFsnYSddID0gZGVlcGNvcHkoYSkKKyAgICAgICAgYm0gPSBnZXRhdHRyKGRbJ2EnXSwgbWV0aCkKKyAgICAgICAgYm0oYiwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIHJlcykKKworICAgIGRlZiBzZXQzb3BfdGVzdChzZWxmLCBhLCBiLCBjLCBkLCByZXMsIHN0bXQ9ImFbYjpjXT1kIiwgbWV0aD0iX19zZXRzbGljZV9fIik6CisgICAgICAgIGRpY3Rpb25hcnkgPSB7J2EnOiBkZWVwY29weShhKSwgJ2InOiBiLCAnYyc6IGMsICdkJzogZH0KKyAgICAgICAgZXhlYyBzdG10IGluIGRpY3Rpb25hcnkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0aW9uYXJ5WydhJ10sIHJlcykKKyAgICAgICAgdCA9IHR5cGUoYSkKKyAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKKyAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQorICAgICAgICBtID0gZ2V0YXR0cih0LCBtZXRoKQorICAgICAgICAjIGluIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuIFB5UHkpLCAnbScgY2FuIGJlIGEgcmVndWxhciB1bmJvdW5kCisgICAgICAgICMgbWV0aG9kIG9iamVjdDsgdGhlIGdldGF0dHIoKSBiZWxvdyBvYnRhaW5zIGl0cyB1bmRlcmx5aW5nIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobSwgJ2ltX2Z1bmMnLCBtKSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgZGljdGlvbmFyeVsnYSddID0gZGVlcGNvcHkoYSkKKyAgICAgICAgbShkaWN0aW9uYXJ5WydhJ10sIGIsIGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdGlvbmFyeVsnYSddLCByZXMpCisgICAgICAgIGRpY3Rpb25hcnlbJ2EnXSA9IGRlZXBjb3B5KGEpCisgICAgICAgIGJtID0gZ2V0YXR0cihkaWN0aW9uYXJ5WydhJ10sIG1ldGgpCisgICAgICAgIGJtKGIsIGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdGlvbmFyeVsnYSddLCByZXMpCisKKyAgICBkZWYgdGVzdF9saXN0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGxpc3Qgb3BlcmF0aW9ucy4uLgorICAgICAgICAjIEFzc2VydHMgYXJlIHdpdGhpbiBpbmRpdmlkdWFsIHRlc3QgbWV0aG9kcworICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoWzFdLCBbMl0sIFsxLDJdLCAiYStiIiwgIl9fYWRkX18iKQorICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoWzEsMiwzXSwgMiwgMSwgImIgaW4gYSIsICJfX2NvbnRhaW5zX18iKQorICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoWzEsMiwzXSwgNCwgMCwgImIgaW4gYSIsICJfX2NvbnRhaW5zX18iKQorICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoWzEsMiwzXSwgMSwgMiwgImFbYl0iLCAiX19nZXRpdGVtX18iKQorICAgICAgICBzZWxmLnRlcm5vcF90ZXN0KFsxLDIsM10sIDAsIDIsIFsxLDJdLCAiYVtiOmNdIiwgIl9fZ2V0c2xpY2VfXyIpCisgICAgICAgIHNlbGYuc2V0b3BfdGVzdChbMV0sIFsyXSwgWzEsMl0sICJhKz1iIiwgIl9faWFkZF9fIikKKyAgICAgICAgc2VsZi5zZXRvcF90ZXN0KFsxLDJdLCAzLCBbMSwyLDEsMiwxLDJdLCAiYSo9YiIsICJfX2ltdWxfXyIpCisgICAgICAgIHNlbGYudW5vcF90ZXN0KFsxLDIsM10sIDMsICJsZW4oYSkiLCAiX19sZW5fXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChbMSwyXSwgMywgWzEsMiwxLDIsMSwyXSwgImEqYiIsICJfX211bF9fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KFsxLDJdLCAzLCBbMSwyLDEsMiwxLDJdLCAiYiphIiwgIl9fcm11bF9fIikKKyAgICAgICAgc2VsZi5zZXQyb3BfdGVzdChbMSwyXSwgMSwgMywgWzEsM10sICJhW2JdPWMiLCAiX19zZXRpdGVtX18iKQorICAgICAgICBzZWxmLnNldDNvcF90ZXN0KFsxLDIsMyw0XSwgMSwgMywgWzUsNl0sIFsxLDUsNiw0XSwgImFbYjpjXT1kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX3NldHNsaWNlX18iKQorCisgICAgZGVmIHRlc3RfZGljdHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkaWN0IG9wZXJhdGlvbnMuLi4KKyAgICAgICAgaWYgaGFzYXR0cihkaWN0LCAnX19jbXBfXycpOiAgICMgUHlQeSBoYXMgb25seSByaWNoIGNvbXBhcmlzb24gb24gZGljdHMKKyAgICAgICAgICAgIHNlbGYuYmlub3BfdGVzdCh7MToyfSwgezI6MX0sIC0xLCAiY21wKGEsYikiLCAiX19jbXBfXyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoezE6Mn0sIHsyOjF9LCBUcnVlLCAiYSA8IGIiLCAiX19sdF9fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHsxOjIsMzo0fSwgMSwgMSwgImIgaW4gYSIsICJfX2NvbnRhaW5zX18iKQorICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoezE6MiwzOjR9LCAyLCAwLCAiYiBpbiBhIiwgIl9fY29udGFpbnNfXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdCh7MToyLDM6NH0sIDEsIDIsICJhW2JdIiwgIl9fZ2V0aXRlbV9fIikKKworICAgICAgICBkID0gezE6MiwgMzo0fQorICAgICAgICBsMSA9IFtdCisgICAgICAgIGZvciBpIGluIGQua2V5cygpOgorICAgICAgICAgICAgbDEuYXBwZW5kKGkpCisgICAgICAgIGwgPSBbXQorICAgICAgICBmb3IgaSBpbiBpdGVyKGQpOgorICAgICAgICAgICAgbC5hcHBlbmQoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBsMSkKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGZvciBpIGluIGQuX19pdGVyX18oKToKKyAgICAgICAgICAgIGwuYXBwZW5kKGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgbDEpCisgICAgICAgIGwgPSBbXQorICAgICAgICBmb3IgaSBpbiBkaWN0Ll9faXRlcl9fKGQpOgorICAgICAgICAgICAgbC5hcHBlbmQoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBsMSkKKyAgICAgICAgZCA9IHsxOjIsIDM6NH0KKyAgICAgICAgc2VsZi51bm9wX3Rlc3QoZCwgMiwgImxlbihhKSIsICJfX2xlbl9fIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHJlcHIoZCksIHt9KSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGQuX19yZXByX18oKSwge30pLCBkKQorICAgICAgICBzZWxmLnNldDJvcF90ZXN0KHsxOjIsMzo0fSwgMiwgMywgezE6MiwyOjMsMzo0fSwgImFbYl09YyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiX19zZXRpdGVtX18iKQorCisgICAgIyBUZXN0cyBmb3IgdW5hcnkgYW5kIGJpbmFyeSBvcGVyYXRvcnMKKyAgICBkZWYgbnVtYmVyX29wZXJhdG9ycyhzZWxmLCBhLCBiLCBza2lwPVtdKToKKyAgICAgICAgZGljdCA9IHsnYSc6IGEsICdiJzogYn0KKworICAgICAgICBmb3IgbmFtZSwgZXhwciBpbiBzZWxmLmJpbm9wcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gc2tpcDoKKyAgICAgICAgICAgICAgICBuYW1lID0gIl9fJXNfXyIgJSBuYW1lCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihhLCBuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcmVzID0gZXZhbChleHByLCBkaWN0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoYSwgYiwgcmVzLCBleHByLCBuYW1lKQorCisgICAgICAgIGZvciBuYW1lLCBleHByIGluIHNlbGYudW5vcHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHNraXA6CisgICAgICAgICAgICAgICAgbmFtZSA9ICJfXyVzX18iICUgbmFtZQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoYSwgbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IGV2YWwoZXhwciwgZGljdCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51bm9wX3Rlc3QoYSwgcmVzLCBleHByLCBuYW1lKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGludCBvcGVyYXRpb25zLi4uCisgICAgICAgIHNlbGYubnVtYmVyX29wZXJhdG9ycygxMDAsIDMpCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjcmFzaGVzIGluIFB5dGhvbiAyLjIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSkuX19ub256ZXJvX18oKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCkuX19ub256ZXJvX18oKSwgMCkKKyAgICAgICAgIyBUaGlzIHJldHVybnMgJ05vdEltcGxlbWVudGVkJyBpbiBQeXRob24gMi4yCisgICAgICAgIGNsYXNzIEMoaW50KToKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDKDVMKSwgNSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgQygpICsgIiIKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiTm90SW1wbGVtZW50ZWQgc2hvdWxkIGhhdmUgY2F1c2VkIFR5cGVFcnJvciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEMoc3lzLm1heGludCsxKQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIE92ZXJmbG93RXJyb3IiKQorCisgICAgZGVmIHRlc3RfbG9uZ3Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBsb25nIG9wZXJhdGlvbnMuLi4KKyAgICAgICAgc2VsZi5udW1iZXJfb3BlcmF0b3JzKDEwMEwsIDNMKQorCisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZmxvYXQgb3BlcmF0aW9ucy4uLgorICAgICAgICBzZWxmLm51bWJlcl9vcGVyYXRvcnMoMTAwLjAsIDMuMCkKKworICAgIGRlZiB0ZXN0X2NvbXBsZXhlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNvbXBsZXggb3BlcmF0aW9ucy4uLgorICAgICAgICBzZWxmLm51bWJlcl9vcGVyYXRvcnMoMTAwLjBqLCAzLjBqLCBza2lwPVsnbHQnLCAnbGUnLCAnZ3QnLCAnZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50JywgJ2xvbmcnLCAnZmxvYXQnXSkKKworICAgICAgICBjbGFzcyBOdW1iZXIoY29tcGxleCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ3ByZWMnXQorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wbGV4Ll9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgICAgICAgICByZXN1bHQucHJlYyA9IGt3ZHMuZ2V0KCdwcmVjJywgMTIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHByZWMgPSBzZWxmLnByZWMKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmltYWcgPT0gMC4wOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiUuKmciICUgKHByZWMsIHNlbGYucmVhbCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJlYWwgPT0gMC4wOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiUuKmdqIiAlIChwcmVjLCBzZWxmLmltYWcpCisgICAgICAgICAgICAgICAgcmV0dXJuICIoJS4qZyslLipnaikiICUgKHByZWMsIHNlbGYucmVhbCwgcHJlYywgc2VsZi5pbWFnKQorICAgICAgICAgICAgX19zdHJfXyA9IF9fcmVwcl9fCisKKyAgICAgICAgYSA9IE51bWJlcigzLjE0LCBwcmVjPTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhKSwgIjMuMTQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucHJlYywgNikKKworICAgICAgICBhID0gTnVtYmVyKGEsIHByZWM9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEpLCAiMy4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnByZWMsIDIpCisKKyAgICAgICAgYSA9IE51bWJlcigyMzQuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEpLCAiMjM0LjUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucHJlYywgMTIpCisKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0aGUgbW9kdWxlICd4eHN1YnR5cGUnIGlzIGludGVybmFsIikKKyAgICBkZWYgdGVzdF9zcGFtX2xpc3RzKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc3BhbWxpc3Qgb3BlcmF0aW9ucy4uLgorICAgICAgICBpbXBvcnQgY29weSwgeHhzdWJ0eXBlIGFzIHNwYW0KKworICAgICAgICBkZWYgc3BhbWxpc3QobCwgbWVtbz1Ob25lKToKKyAgICAgICAgICAgIGltcG9ydCB4eHN1YnR5cGUgYXMgc3BhbQorICAgICAgICAgICAgcmV0dXJuIHNwYW0uc3BhbWxpc3QobCkKKworICAgICAgICAjIFRoaXMgaXMgYW4gdWdseSBoYWNrOgorICAgICAgICBjb3B5Ll9kZWVwY29weV9kaXNwYXRjaFtzcGFtLnNwYW1saXN0XSA9IHNwYW1saXN0CisKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHNwYW1saXN0KFsxXSksIHNwYW1saXN0KFsyXSksIHNwYW1saXN0KFsxLDJdKSwgImErYiIsCisgICAgICAgICAgICAgICAgICAgICAgICJfX2FkZF9fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHNwYW1saXN0KFsxLDIsM10pLCAyLCAxLCAiYiBpbiBhIiwgIl9fY29udGFpbnNfXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChzcGFtbGlzdChbMSwyLDNdKSwgNCwgMCwgImIgaW4gYSIsICJfX2NvbnRhaW5zX18iKQorICAgICAgICBzZWxmLmJpbm9wX3Rlc3Qoc3BhbWxpc3QoWzEsMiwzXSksIDEsIDIsICJhW2JdIiwgIl9fZ2V0aXRlbV9fIikKKyAgICAgICAgc2VsZi50ZXJub3BfdGVzdChzcGFtbGlzdChbMSwyLDNdKSwgMCwgMiwgc3BhbWxpc3QoWzEsMl0pLCAiYVtiOmNdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldHNsaWNlX18iKQorICAgICAgICBzZWxmLnNldG9wX3Rlc3Qoc3BhbWxpc3QoWzFdKSwgc3BhbWxpc3QoWzJdKSwgc3BhbWxpc3QoWzEsMl0pLCAiYSs9YiIsCisgICAgICAgICAgICAgICAgICAgICAgICJfX2lhZGRfXyIpCisgICAgICAgIHNlbGYuc2V0b3BfdGVzdChzcGFtbGlzdChbMSwyXSksIDMsIHNwYW1saXN0KFsxLDIsMSwyLDEsMl0pLCAiYSo9YiIsCisgICAgICAgICAgICAgICAgICAgICAgICJfX2ltdWxfXyIpCisgICAgICAgIHNlbGYudW5vcF90ZXN0KHNwYW1saXN0KFsxLDIsM10pLCAzLCAibGVuKGEpIiwgIl9fbGVuX18iKQorICAgICAgICBzZWxmLmJpbm9wX3Rlc3Qoc3BhbWxpc3QoWzEsMl0pLCAzLCBzcGFtbGlzdChbMSwyLDEsMiwxLDJdKSwgImEqYiIsCisgICAgICAgICAgICAgICAgICAgICAgICJfX211bF9fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHNwYW1saXN0KFsxLDJdKSwgMywgc3BhbWxpc3QoWzEsMiwxLDIsMSwyXSksICJiKmEiLAorICAgICAgICAgICAgICAgICAgICAgICAiX19ybXVsX18iKQorICAgICAgICBzZWxmLnNldDJvcF90ZXN0KHNwYW1saXN0KFsxLDJdKSwgMSwgMywgc3BhbWxpc3QoWzEsM10pLCAiYVtiXT1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX3NldGl0ZW1fXyIpCisgICAgICAgIHNlbGYuc2V0M29wX3Rlc3Qoc3BhbWxpc3QoWzEsMiwzLDRdKSwgMSwgMywgc3BhbWxpc3QoWzUsNl0pLAorICAgICAgICAgICAgICAgICAgIHNwYW1saXN0KFsxLDUsNiw0XSksICJhW2I6Y109ZCIsICJfX3NldHNsaWNlX18iKQorICAgICAgICAjIFRlc3Qgc3ViY2xhc3NpbmcKKyAgICAgICAgY2xhc3MgQyhzcGFtLnNwYW1saXN0KToKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZik6IHJldHVybiAxCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmZvbygpLCAxKQorICAgICAgICBhLmFwcGVuZCgxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgWzEwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5nZXRzdGF0ZSgpLCAwKQorICAgICAgICBhLnNldHN0YXRlKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0c3RhdGUoKSwgNDIpCisKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0aGUgbW9kdWxlICd4eHN1YnR5cGUnIGlzIGludGVybmFsIikKKyAgICBkZWYgdGVzdF9zcGFtX2RpY3RzKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc3BhbWRpY3Qgb3BlcmF0aW9ucy4uLgorICAgICAgICBpbXBvcnQgY29weSwgeHhzdWJ0eXBlIGFzIHNwYW0KKyAgICAgICAgZGVmIHNwYW1kaWN0KGQsIG1lbW89Tm9uZSk6CisgICAgICAgICAgICBpbXBvcnQgeHhzdWJ0eXBlIGFzIHNwYW0KKyAgICAgICAgICAgIHNkID0gc3BhbS5zcGFtZGljdCgpCisgICAgICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2Rba10gPSB2CisgICAgICAgICAgICByZXR1cm4gc2QKKyAgICAgICAgIyBUaGlzIGlzIGFuIHVnbHkgaGFjazoKKyAgICAgICAgY29weS5fZGVlcGNvcHlfZGlzcGF0Y2hbc3BhbS5zcGFtZGljdF0gPSBzcGFtZGljdAorCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChzcGFtZGljdCh7MToyfSksIHNwYW1kaWN0KHsyOjF9KSwgLTEsICJjbXAoYSxiKSIsCisgICAgICAgICAgICAgICAgICAgICAgICJfX2NtcF9fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHNwYW1kaWN0KHsxOjIsMzo0fSksIDEsIDEsICJiIGluIGEiLCAiX19jb250YWluc19fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHNwYW1kaWN0KHsxOjIsMzo0fSksIDIsIDAsICJiIGluIGEiLCAiX19jb250YWluc19fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHNwYW1kaWN0KHsxOjIsMzo0fSksIDEsIDIsICJhW2JdIiwgIl9fZ2V0aXRlbV9fIikKKyAgICAgICAgZCA9IHNwYW1kaWN0KHsxOjIsMzo0fSkKKyAgICAgICAgbDEgPSBbXQorICAgICAgICBmb3IgaSBpbiBkLmtleXMoKToKKyAgICAgICAgICAgIGwxLmFwcGVuZChpKQorICAgICAgICBsID0gW10KKyAgICAgICAgZm9yIGkgaW4gaXRlcihkKToKKyAgICAgICAgICAgIGwuYXBwZW5kKGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgbDEpCisgICAgICAgIGwgPSBbXQorICAgICAgICBmb3IgaSBpbiBkLl9faXRlcl9fKCk6CisgICAgICAgICAgICBsLmFwcGVuZChpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIGwxKQorICAgICAgICBsID0gW10KKyAgICAgICAgZm9yIGkgaW4gdHlwZShzcGFtZGljdCh7fSkpLl9faXRlcl9fKGQpOgorICAgICAgICAgICAgbC5hcHBlbmQoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBsMSkKKyAgICAgICAgc3RyYWlnaHRkID0gezE6MiwgMzo0fQorICAgICAgICBzcGFtZCA9IHNwYW1kaWN0KHN0cmFpZ2h0ZCkKKyAgICAgICAgc2VsZi51bm9wX3Rlc3Qoc3BhbWQsIDIsICJsZW4oYSkiLCAiX19sZW5fXyIpCisgICAgICAgIHNlbGYudW5vcF90ZXN0KHNwYW1kLCByZXByKHN0cmFpZ2h0ZCksICJyZXByKGEpIiwgIl9fcmVwcl9fIikKKyAgICAgICAgc2VsZi5zZXQyb3BfdGVzdChzcGFtZGljdCh7MToyLDM6NH0pLCAyLCAzLCBzcGFtZGljdCh7MToyLDI6MywzOjR9KSwKKyAgICAgICAgICAgICAgICAgICAiYVtiXT1jIiwgIl9fc2V0aXRlbV9fIikKKyAgICAgICAgIyBUZXN0IHN1YmNsYXNzaW5nCisgICAgICAgIGNsYXNzIEMoc3BhbS5zcGFtZGljdCk6CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiByZXR1cm4gMQorICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pdGVtcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmZvbygpLCAxKQorICAgICAgICBhWydmb28nXSA9ICdiYXInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pdGVtcygpLCBbKCdmb28nLCAnYmFyJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0c3RhdGUoKSwgMCkKKyAgICAgICAgYS5zZXRzdGF0ZSgxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5nZXRzdGF0ZSgpLCAxMDApCisKK2NsYXNzIENsYXNzUHJvcGVydGllc0FuZE1ldGhvZHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcHl0aG9uX2RpY3RzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgUHl0aG9uIHN1YmNsYXNzIG9mIGRpY3QuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZGljdCwgZGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh7fSwgZGljdCkKKyAgICAgICAgZCA9IGRpY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5fX2NsYXNzX18gaXMgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQsIGRpY3QpCisgICAgICAgIGNsYXNzIEMoZGljdCk6CisgICAgICAgICAgICBzdGF0ZSA9IC0xCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZl9sb2NhbCwgKmEsICoqa3cpOgorICAgICAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGEpLCAxKQorICAgICAgICAgICAgICAgICAgICBzZWxmX2xvY2FsLnN0YXRlID0gYVswXQorICAgICAgICAgICAgICAgIGlmIGt3OgorICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBrdy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZl9sb2NhbFt2XSA9IGsKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldChrZXksIDApCisgICAgICAgICAgICBkZWYgX19zZXRpdGVtX18oc2VsZl9sb2NhbCwga2V5LCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtleSwgdHlwZSgwKSkKKyAgICAgICAgICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGZfbG9jYWwsIGtleSwgdmFsdWUpCisgICAgICAgICAgICBkZWYgc2V0c3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZQorICAgICAgICAgICAgZGVmIGdldHN0YXRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMsIGRpY3QpKQorICAgICAgICBhMSA9IEMoMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTEuc3RhdGUsIDEyKQorICAgICAgICBhMiA9IEMoZm9vPTEsIGJhcj0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEyWzFdID09ICdmb28nIGFuZCBhMlsyXSwgJ2JhcicpCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnN0YXRlLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmdldHN0YXRlKCksIC0xKQorICAgICAgICBhLnNldHN0YXRlKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5zdGF0ZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmdldHN0YXRlKCksIDApCisgICAgICAgIGEuc2V0c3RhdGUoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5zdGF0ZSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5nZXRzdGF0ZSgpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzQyXSwgMCkKKyAgICAgICAgYVs0Ml0gPSAyNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbNDJdLCAyNCkKKyAgICAgICAgTiA9IDUwCisgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgYVtpXSA9IEMoKQorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoTik6CisgICAgICAgICAgICAgICAgYVtpXVtqXSA9IGkqagorICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVtpXVtqXSwgaSpqKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX2xpc3RzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgUHl0aG9uIHN1YmNsYXNzIG9mIGxpc3QuLi4KKyAgICAgICAgY2xhc3MgQyhsaXN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdC5fX2dldGl0ZW1fXyhzZWxmLCBpKSArIDEwMAorICAgICAgICAgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGksIGopCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgYS5leHRlbmQoWzAsMSwyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzBdLCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxXSwgMTAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMl0sIDEwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzEwMDoyMDBdLCAoMTAwLDIwMCkpCisKKyAgICBkZWYgdGVzdF9tZXRhY2xhc3Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBfX21ldGFjbGFzc19fLi4uCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gdHlwZQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX19zdGF0ZSA9IDAKKyAgICAgICAgICAgIGRlZiBnZXRzdGF0ZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3N0YXRlCisgICAgICAgICAgICBkZWYgc2V0c3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIHNlbGYuX19zdGF0ZSA9IHN0YXRlCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmdldHN0YXRlKCksIDApCisgICAgICAgIGEuc2V0c3RhdGUoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5nZXRzdGF0ZSgpLCAxMCkKKyAgICAgICAgY2xhc3MgRDoKKyAgICAgICAgICAgIGNsYXNzIF9fbWV0YWNsYXNzX18odHlwZSk6CisgICAgICAgICAgICAgICAgZGVmIG15c2VsZihjbHMpOiByZXR1cm4gY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5teXNlbGYoKSwgRCkKKyAgICAgICAgZCA9IEQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuX19jbGFzc19fLCBEKQorICAgICAgICBjbGFzcyBNMSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QpOgorICAgICAgICAgICAgICAgIGRpY3RbJ19fc3BhbV9fJ10gPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE0xCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX3NwYW1fXywgMSkKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX19zcGFtX18sIDEpCisKKyAgICAgICAgY2xhc3MgX2luc3RhbmNlKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE0yKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KToKKyAgICAgICAgICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLmJhc2VzID0gYmFzZXMKKyAgICAgICAgICAgICAgICBzZWxmLmRpY3QgPSBkaWN0CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBpdCA9IF9pbnN0YW5jZSgpCisgICAgICAgICAgICAgICAgIyBFYXJseSBiaW5kaW5nIG9mIG1ldGhvZHMKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5LnN0YXJ0c3dpdGgoIl9fIik6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKGl0LCBrZXksIHNlbGYuZGljdFtrZXldLl9fZ2V0X18oaXQsIHNlbGYpKQorICAgICAgICAgICAgICAgIHJldHVybiBpdAorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE0yCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm5hbWUsICdDJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmJhc2VzLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc3BhbScsIEMuZGljdCkKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc3BhbSgpLCA0MikKKworICAgICAgICAjIE1vcmUgbWV0YWNsYXNzIGV4YW1wbGVzCisKKyAgICAgICAgY2xhc3MgYXV0b3N1cGVyKHR5cGUpOgorICAgICAgICAgICAgIyBBdXRvbWF0aWNhbGx5IGFkZCBfX3N1cGVyIHRvIHRoZSBjbGFzcworICAgICAgICAgICAgIyBUaGlzIHRyaWNrIG9ubHkgd29ya3MgZm9yIGR5bmFtaWMgY2xhc3NlcworICAgICAgICAgICAgZGVmIF9fbmV3X18obWV0YWNsYXNzLCBuYW1lLCBiYXNlcywgZGljdCk6CisgICAgICAgICAgICAgICAgY2xzID0gc3VwZXIoYXV0b3N1cGVyLCBtZXRhY2xhc3MpLl9fbmV3X18obWV0YWNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGJhc2VzLCBkaWN0KQorICAgICAgICAgICAgICAgICMgTmFtZSBtYW5nbGluZyBmb3IgX19zdXBlciByZW1vdmVzIGxlYWRpbmcgdW5kZXJzY29yZXMKKyAgICAgICAgICAgICAgICB3aGlsZSBuYW1lWzoxXSA9PSAiXyI6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lWzE6XQorICAgICAgICAgICAgICAgIGlmIG5hbWU6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiXyVzX19zdXBlciIgJSBuYW1lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJfX3N1cGVyIgorICAgICAgICAgICAgICAgIHNldGF0dHIoY2xzLCBuYW1lLCBzdXBlcihjbHMpKQorICAgICAgICAgICAgICAgIHJldHVybiBjbHMKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhdXRvc3VwZXIKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQSIKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQiIgKyBzZWxmLl9fc3VwZXIubWV0aCgpCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBkZWYgbWV0aChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMiICsgc2VsZi5fX3N1cGVyLm1ldGgoKQorICAgICAgICBjbGFzcyBEKEMsIEIpOgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJEIiArIHNlbGYuX19zdXBlci5tZXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkubWV0aCgpLCAiRENCQSIpCisgICAgICAgIGNsYXNzIEUoQiwgQyk6CisgICAgICAgICAgICBkZWYgbWV0aChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkUiICsgc2VsZi5fX3N1cGVyLm1ldGgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5tZXRoKCksICJFQkNBIikKKworICAgICAgICBjbGFzcyBhdXRvcHJvcGVydHkodHlwZSk6CisgICAgICAgICAgICAjIEF1dG9tYXRpY2FsbHkgY3JlYXRlIHByb3BlcnR5IGF0dHJpYnV0ZXMgd2hlbiBtZXRob2RzCisgICAgICAgICAgICAjIG5hbWVkIF9nZXRfeCBhbmQvb3IgX3NldF94IGFyZSBmb3VuZAorICAgICAgICAgICAgZGVmIF9fbmV3X18obWV0YWNsYXNzLCBuYW1lLCBiYXNlcywgZGljdCk6CisgICAgICAgICAgICAgICAgaGl0cyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsIGluIGRpY3QuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCJfZ2V0XyIpOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5WzU6XQorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0LCBzZXQgPSBoaXRzLmdldChrZXksIChOb25lLCBOb25lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldCA9IHZhbAorICAgICAgICAgICAgICAgICAgICAgICAgaGl0c1trZXldID0gZ2V0LCBzZXQKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkuc3RhcnRzd2l0aCgiX3NldF8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleVs1Ol0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdldCwgc2V0ID0gaGl0cy5nZXQoa2V5LCAoTm9uZSwgTm9uZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSB2YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpdHNba2V5XSA9IGdldCwgc2V0CisgICAgICAgICAgICAgICAgZm9yIGtleSwgKGdldCwgc2V0KSBpbiBoaXRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBkaWN0W2tleV0gPSBwcm9wZXJ0eShnZXQsIHNldCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoYXV0b3Byb3BlcnR5LCBtZXRhY2xhc3MpLl9fbmV3X18obWV0YWNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgYmFzZXMsIGRpY3QpCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYXV0b3Byb3BlcnR5CisgICAgICAgICAgICBkZWYgX2dldF94KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAtc2VsZi5fX3gKKyAgICAgICAgICAgIGRlZiBfc2V0X3goc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi5fX3ggPSAteAorICAgICAgICBhID0gQSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihhLCAieCIpKQorICAgICAgICBhLnggPSAxMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEueCwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fQV9feCwgLTEyKQorCisgICAgICAgIGNsYXNzIG11bHRpbWV0YWNsYXNzKGF1dG9wcm9wZXJ0eSwgYXV0b3N1cGVyKToKKyAgICAgICAgICAgICMgTWVyZ2Ugb2YgbXVsdGlwbGUgY29vcGVyYXRpbmcgbWV0YWNsYXNzZXMKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBtdWx0aW1ldGFjbGFzcworICAgICAgICAgICAgZGVmIF9nZXRfeChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEiCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBkZWYgX2dldF94KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQiIgKyBzZWxmLl9fc3VwZXIuX2dldF94KCkKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIGRlZiBfZ2V0X3goc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDIiArIHNlbGYuX19zdXBlci5fZ2V0X3goKQorICAgICAgICBjbGFzcyBEKEMsIEIpOgorICAgICAgICAgICAgZGVmIF9nZXRfeChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkQiICsgc2VsZi5fX3N1cGVyLl9nZXRfeCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRCgpLngsICJEQ0JBIikKKworICAgICAgICAjIE1ha2Ugc3VyZSB0eXBlKHgpIGRvZXNuJ3QgY2FsbCB4Ll9fY2xhc3NfXy5fX2luaXRfXworICAgICAgICBjbGFzcyBUKHR5cGUpOgorICAgICAgICAgICAgY291bnRlciA9IDAKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgVC5jb3VudGVyICs9IDEKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBUCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVC5jb3VudGVyLCAxKQorICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhKSwgQykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChULmNvdW50ZXIsIDEpCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOiBwYXNzCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgdHJ5OiBjKCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoImNhbGxpbmcgb2JqZWN0IHcvbyBjYWxsIG1ldGhvZCBzaG91bGQgcmFpc2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgIlR5cGVFcnJvciIpCisKKyAgICAgICAgIyBUZXN0aW5nIGNvZGUgdG8gZmluZCBtb3N0IGRlcml2ZWQgYmFzZWNsYXNzCisgICAgICAgIGNsYXNzIEEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLl9fbmV3X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gQQorCisgICAgICAgICMgVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3Mgb2YgRCBpcyBBIHJhdGhlciB0aGFuIHR5cGUuCisgICAgICAgIGNsYXNzIEQoQiwgQyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfc3ViY2xhc3NlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIFB5dGhvbiBzdWJjbGFzcyBvZiBtb2R1bGUuLi4KKyAgICAgICAgbG9nID0gW10KKyAgICAgICAgTVQgPSB0eXBlKHN5cykKKyAgICAgICAgY2xhc3MgTU0oTVQpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIE1ULl9faW5pdF9fKHNlbGYsIG5hbWUpCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBsb2cuYXBwZW5kKCgiZ2V0YXR0ciIsIG5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBNVC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpCisgICAgICAgICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIGxvZy5hcHBlbmQoKCJzZXRhdHRyIiwgbmFtZSwgdmFsdWUpKQorICAgICAgICAgICAgICAgIE1ULl9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQorICAgICAgICAgICAgZGVmIF9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGxvZy5hcHBlbmQoKCJkZWxhdHRyIiwgbmFtZSkpCisgICAgICAgICAgICAgICAgTVQuX19kZWxhdHRyX18oc2VsZiwgbmFtZSkKKyAgICAgICAgYSA9IE1NKCJhIikKKyAgICAgICAgYS5mb28gPSAxMgorICAgICAgICB4ID0gYS5mb28KKyAgICAgICAgZGVsIGEuZm9vCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLCBbKCJzZXRhdHRyIiwgImZvbyIsIDEyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImdldGF0dHIiLCAiZm9vIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkZWxhdHRyIiwgImZvbyIpXSkKKworICAgICAgICAjIGh0dHA6Ly9weXRob24ub3JnL3NmLzExNzQ3MTIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgTW9kdWxlKHR5cGVzLk1vZHVsZVR5cGUsIHN0cik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbmhlcml0aW5nIGZyb20gTW9kdWxlVHlwZSBhbmQgc3RyIGF0IHRoZSBzYW1lIHRpbWUgIgorICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgZmFpbCIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9pbmhlcml0ZW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIG11bHRpcGxlIGluaGVyaXRhbmNlLi4uCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fc3RhdGUgPSAwCisgICAgICAgICAgICBkZWYgZ2V0c3RhdGUoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zdGF0ZQorICAgICAgICAgICAgZGVmIHNldHN0YXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fc3RhdGUgPSBzdGF0ZQorICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5nZXRzdGF0ZSgpLCAwKQorICAgICAgICBhLnNldHN0YXRlKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0c3RhdGUoKSwgMTApCisgICAgICAgIGNsYXNzIEQoZGljdCwgQyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgdHlwZSh7fSkuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBDLl9faW5pdF9fKHNlbGYpCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmtleXMoKSwgW10pCisgICAgICAgIGRbImhlbGxvIl0gPSAid29ybGQiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pdGVtcygpLCBbKCJoZWxsbyIsICJ3b3JsZCIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyJoZWxsbyJdLCAid29ybGQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0c3RhdGUoKSwgMCkKKyAgICAgICAgZC5zZXRzdGF0ZSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldHN0YXRlKCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuX19tcm9fXywgKEQsIGRpY3QsIEMsIG9iamVjdCkpCisKKyAgICAgICAgIyBTRiBidWcgIzQ0MjgzMworICAgICAgICBjbGFzcyBOb2RlKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuZm9vKCkpCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiMjMiCisgICAgICAgIGNsYXNzIEZyYWcoTm9kZSwgbGlzdCk6CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiNDIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9kZSgpLl9faW50X18oKSwgMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KE5vZGUoKSksIDIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZyYWcoKS5fX2ludF9fKCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChGcmFnKCkpLCA0MikKKworICAgICAgICAjIE1JIG1peGluZyBjbGFzc2ljIGFuZCBuZXctc3R5bGUgY2xhc3Nlcy4KKworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgeCA9IDEKKworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICB4ID0gMgorCisgICAgICAgIGNsYXNzIEQoQiwgQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC54LCAxKQorCisgICAgICAgICMgQ2xhc3NpYyBNUk8gaXMgcHJlc2VydmVkIGZvciBhIGNsYXNzaWMgYmFzZSBjbGFzcy4KKyAgICAgICAgY2xhc3MgRShELCBvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUuX19tcm9fXywgKEUsIEQsIEIsIEEsIEMsIG9iamVjdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRS54LCAxKQorCisgICAgICAgICMgQnV0IHdpdGggYSBtaXggb2YgY2xhc3NpYyBiYXNlcywgdGhlaXIgTVJPcyBhcmUgY29tYmluZWQgdXNpbmcKKyAgICAgICAgIyBuZXctc3R5bGUgTVJPLgorICAgICAgICBjbGFzcyBGKEIsIEMsIG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRi5fX21yb19fLCAoRiwgQiwgQywgQSwgb2JqZWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGLngsIDIpCisKKyAgICAgICAgIyBUcnkgc29tZXRoaW5nIGVsc2UuCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgY21ldGhvZChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMgYSIKKyAgICAgICAgICAgIGRlZiBhbGxfbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQyBiIgorCisgICAgICAgIGNsYXNzIE0xKEMsIG9iamVjdCk6CisgICAgICAgICAgICBkZWYgbTFtZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNMSBhIgorICAgICAgICAgICAgZGVmIGFsbF9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNMSBiIgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTTEuX19tcm9fXywgKE0xLCBDLCBvYmplY3QpKQorICAgICAgICBtID0gTTEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uY21ldGhvZCgpLCAiQyBhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm0xbWV0aG9kKCksICJNMSBhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmFsbF9tZXRob2QoKSwgIk0xIGIiKQorCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBkZWYgZG1ldGhvZChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkQgYSIKKyAgICAgICAgICAgIGRlZiBhbGxfbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiRCBiIgorCisgICAgICAgIGNsYXNzIE0yKEQsIG9iamVjdCk6CisgICAgICAgICAgICBkZWYgbTJtZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNMiBhIgorICAgICAgICAgICAgZGVmIGFsbF9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNMiBiIgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTTIuX19tcm9fXywgKE0yLCBELCBDLCBvYmplY3QpKQorICAgICAgICBtID0gTTIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uY21ldGhvZCgpLCAiQyBhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmRtZXRob2QoKSwgIkQgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tMm1ldGhvZCgpLCAiTTIgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5hbGxfbWV0aG9kKCksICJNMiBiIikKKworICAgICAgICBjbGFzcyBNMyhNMSwgTTIsIG9iamVjdCk6CisgICAgICAgICAgICBkZWYgbTNtZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNMyBhIgorICAgICAgICAgICAgZGVmIGFsbF9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNMyBiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE0zLl9fbXJvX18sIChNMywgTTEsIE0yLCBELCBDLCBvYmplY3QpKQorICAgICAgICBtID0gTTMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uY21ldGhvZCgpLCAiQyBhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmRtZXRob2QoKSwgIkQgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tMW1ldGhvZCgpLCAiTTEgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tMm1ldGhvZCgpLCAiTTIgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tM21ldGhvZCgpLCAiTTMgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5hbGxfbWV0aG9kKCksICJNMyBiIikKKworICAgICAgICBjbGFzcyBDbGFzc2ljOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBOZXcoQ2xhc3NpYyk6CisgICAgICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IHR5cGUKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibmV3IGNsYXNzIHdpdGggb25seSBjbGFzc2ljIGJhc2VzIC0gc2hvdWxkbid0IGJlIikKKworICAgIGRlZiB0ZXN0X2RpYW1vbmRfaW5oZXJpdGVuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBtdWx0aXBsZSBpbmhlcml0YW5jZSBzcGVjaWFsIGNhc2VzLi4uCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOiByZXR1cm4gIkEiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQSgpLnNwYW0oKSwgIkEiKQorICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgZGVmIGJvbyhzZWxmKTogcmV0dXJuICJCIgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6IHJldHVybiAiQiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCKCkuc3BhbSgpLCAiQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQigpLmJvbygpLCAiQiIpCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBkZWYgYm9vKHNlbGYpOiByZXR1cm4gIkMiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQygpLnNwYW0oKSwgIkEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMoKS5ib28oKSwgIkMiKQorICAgICAgICBjbGFzcyBEKEIsIEMpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRCgpLnNwYW0oKSwgIkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQoKS5ib28oKSwgIkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuX19tcm9fXywgKEQsIEIsIEMsIEEsIG9iamVjdCkpCisgICAgICAgIGNsYXNzIEUoQywgQik6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFKCkuc3BhbSgpLCAiQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRSgpLmJvbygpLCAiQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRS5fX21yb19fLCAoRSwgQywgQiwgQSwgb2JqZWN0KSkKKyAgICAgICAgIyBNUk8gb3JkZXIgZGlzYWdyZWVtZW50CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIEYoRCwgRSk6IHBhc3MKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgTVJPIG9yZGVyIGRpc2FncmVlbWVudCAoRikiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBHKEUsIEQpOiBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIE1STyBvcmRlciBkaXNhZ3JlZW1lbnQgKEcpIikKKworICAgICMgc2VlIHRocmVhZCBweXRob24tZGV2LzIwMDItT2N0b2Jlci8wMjkwMzUuaHRtbAorICAgIGRlZiB0ZXN0X2V4NV9mcm9tX2MzX3N3aXRjaChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGV4NSBmcm9tIEMzIHN3aXRjaCBkaXNjdXNzaW9uLi4uCisgICAgICAgIGNsYXNzIEEob2JqZWN0KTogcGFzcworICAgICAgICBjbGFzcyBCKG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOiBwYXNzCisgICAgICAgIGNsYXNzIFgoQSk6IHBhc3MKKyAgICAgICAgY2xhc3MgWShBKTogcGFzcworICAgICAgICBjbGFzcyBaKFgsQixZLEMpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWi5fX21yb19fLCAoWiwgWCwgQiwgWSwgQSwgQywgb2JqZWN0KSkKKworICAgICMgc2VlICJBIE1vbm90b25pYyBTdXBlcmNsYXNzIExpbmVhcml6YXRpb24gZm9yIER5bGFuIiwKKyAgICAjIGJ5IEtpbSBCYXJyZXR0IGV0IGFsLiAoT09QU0xBIDE5OTYpCisgICAgZGVmIHRlc3RfbW9ub3RvbmljaXR5KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgTVJPIG1vbm90b25pY2l0eS4uLgorICAgICAgICBjbGFzcyBCb2F0KG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgRGF5Qm9hdChCb2F0KTogcGFzcworICAgICAgICBjbGFzcyBXaGVlbEJvYXQoQm9hdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgRW5naW5lTGVzcyhEYXlCb2F0KTogcGFzcworICAgICAgICBjbGFzcyBTbWFsbE11bHRpaHVsbChEYXlCb2F0KTogcGFzcworICAgICAgICBjbGFzcyBQZWRhbFdoZWVsQm9hdChFbmdpbmVMZXNzLFdoZWVsQm9hdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgU21hbGxDYXRhbWFyYW4oU21hbGxNdWx0aWh1bGwpOiBwYXNzCisgICAgICAgIGNsYXNzIFBlZGFsbyhQZWRhbFdoZWVsQm9hdCxTbWFsbENhdGFtYXJhbik6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBlZGFsV2hlZWxCb2F0Ll9fbXJvX18sCisgICAgICAgICAgICAgIChQZWRhbFdoZWVsQm9hdCwgRW5naW5lTGVzcywgRGF5Qm9hdCwgV2hlZWxCb2F0LCBCb2F0LCBvYmplY3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNtYWxsQ2F0YW1hcmFuLl9fbXJvX18sCisgICAgICAgICAgICAgIChTbWFsbENhdGFtYXJhbiwgU21hbGxNdWx0aWh1bGwsIERheUJvYXQsIEJvYXQsIG9iamVjdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGVkYWxvLl9fbXJvX18sCisgICAgICAgICAgICAgIChQZWRhbG8sIFBlZGFsV2hlZWxCb2F0LCBFbmdpbmVMZXNzLCBTbWFsbENhdGFtYXJhbiwKKyAgICAgICAgICAgICAgIFNtYWxsTXVsdGlodWxsLCBEYXlCb2F0LCBXaGVlbEJvYXQsIEJvYXQsIG9iamVjdCkpCisKKyAgICAjIHNlZSAiQSBNb25vdG9uaWMgU3VwZXJjbGFzcyBMaW5lYXJpemF0aW9uIGZvciBEeWxhbiIsCisgICAgIyBieSBLaW0gQmFycmV0dCBldCBhbC4gKE9PUFNMQSAxOTk2KQorICAgIGRlZiB0ZXN0X2NvbnNpc3RlbmN5X3dpdGhfZXBnKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgY29uc2lzdGVuY3kgd2l0aCBFUEcuLi4KKyAgICAgICAgY2xhc3MgUGFuZShvYmplY3QpOiBwYXNzCisgICAgICAgIGNsYXNzIFNjcm9sbGluZ01peGluKG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgRWRpdGluZ01peGluKG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgU2Nyb2xsYWJsZVBhbmUoUGFuZSxTY3JvbGxpbmdNaXhpbik6IHBhc3MKKyAgICAgICAgY2xhc3MgRWRpdGFibGVQYW5lKFBhbmUsRWRpdGluZ01peGluKTogcGFzcworICAgICAgICBjbGFzcyBFZGl0YWJsZVNjcm9sbGFibGVQYW5lKFNjcm9sbGFibGVQYW5lLEVkaXRhYmxlUGFuZSk6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVkaXRhYmxlU2Nyb2xsYWJsZVBhbmUuX19tcm9fXywKKyAgICAgICAgICAgICAgKEVkaXRhYmxlU2Nyb2xsYWJsZVBhbmUsIFNjcm9sbGFibGVQYW5lLCBFZGl0YWJsZVBhbmUsIFBhbmUsCisgICAgICAgICAgICAgICAgU2Nyb2xsaW5nTWl4aW4sIEVkaXRpbmdNaXhpbiwgb2JqZWN0KSkKKworICAgIGRlZiB0ZXN0X21yb19kaXNhZ3JlZW1lbnQoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBlcnJvciBtZXNzYWdlcyBmb3IgTVJPIGRpc2FncmVlbWVudC4uLgorICAgICAgICBtcm9fZXJyX21zZyA9ICIiIkNhbm5vdCBjcmVhdGUgYSBjb25zaXN0ZW50IG1ldGhvZCByZXNvbHV0aW9uCitvcmRlciAoTVJPKSBmb3IgYmFzZXMgIiIiCisKKyAgICAgICAgZGVmIHJhaXNlcyhleGMsIGV4cGVjdGVkLCBjYWxsYWJsZSwgKmFyZ3MpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNhbGxhYmxlKCphcmdzKQorICAgICAgICAgICAgZXhjZXB0IGV4YywgbXNnOgorICAgICAgICAgICAgICAgICMgdGhlIGV4YWN0IG1zZyBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbiBpbXBsIGRldGFpbAorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RyKG1zZykuc3RhcnRzd2l0aChleHBlY3RlZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk1lc3NhZ2UgJXIsIGV4cGVjdGVkICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cihtc2cpLCBleHBlY3RlZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgJXMiICUgZXhjKQorCisgICAgICAgIGNsYXNzIEEob2JqZWN0KTogcGFzcworICAgICAgICBjbGFzcyBCKEEpOiBwYXNzCisgICAgICAgIGNsYXNzIEMob2JqZWN0KTogcGFzcworCisgICAgICAgICMgVGVzdCBzb21lIHZlcnkgc2ltcGxlIGVycm9ycworICAgICAgICByYWlzZXMoVHlwZUVycm9yLCAiZHVwbGljYXRlIGJhc2UgY2xhc3MgQSIsCisgICAgICAgICAgICAgICB0eXBlLCAiWCIsIChBLCBBKSwge30pCisgICAgICAgIHJhaXNlcyhUeXBlRXJyb3IsIG1yb19lcnJfbXNnLAorICAgICAgICAgICAgICAgdHlwZSwgIlgiLCAoQSwgQiksIHt9KQorICAgICAgICByYWlzZXMoVHlwZUVycm9yLCBtcm9fZXJyX21zZywKKyAgICAgICAgICAgICAgIHR5cGUsICJYIiwgKEEsIEMsIEIpLCB7fSkKKyAgICAgICAgIyBUZXN0IGEgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IGVycm9yCisgICAgICAgIGNsYXNzIEdyaWRMYXlvdXQob2JqZWN0KTogcGFzcworICAgICAgICBjbGFzcyBIb3Jpem9udGFsR3JpZChHcmlkTGF5b3V0KTogcGFzcworICAgICAgICBjbGFzcyBWZXJ0aWNhbEdyaWQoR3JpZExheW91dCk6IHBhc3MKKyAgICAgICAgY2xhc3MgSFZHcmlkKEhvcml6b250YWxHcmlkLCBWZXJ0aWNhbEdyaWQpOiBwYXNzCisgICAgICAgIGNsYXNzIFZIR3JpZChWZXJ0aWNhbEdyaWQsIEhvcml6b250YWxHcmlkKTogcGFzcworICAgICAgICByYWlzZXMoVHlwZUVycm9yLCBtcm9fZXJyX21zZywKKyAgICAgICAgICAgICAgIHR5cGUsICJDb25mdXNlZEdyaWQiLCAoSFZHcmlkLCBWSEdyaWQpLCB7fSkKKworICAgIGRlZiB0ZXN0X29iamVjdF9jbGFzcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIG9iamVjdCBjbGFzcy4uLgorICAgICAgICBhID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fY2xhc3NfXywgb2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYSksIG9iamVjdCkKKyAgICAgICAgYiA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJmb28iKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYS5mb28gPSAxMgorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJvYmplY3QoKSBzaG91bGQgbm90IGFsbG93IHNldHRpbmcgYSBmb28gYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iamVjdCgpLCAiX19kaWN0X18iKSkKKworICAgICAgICBjbGFzcyBDZGljdChvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB4ID0gQ2RpY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHt9KQorICAgICAgICB4LmZvbyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmZvbywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB7J2Zvbyc6IDF9KQorCisgICAgZGVmIHRlc3Rfc2xvdHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBfX3Nsb3RzX18uLi4KKyAgICAgICAgY2xhc3MgQzAob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFtdCisgICAgICAgIHggPSBDMCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih4LCAiX19kaWN0X18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHgsICJmb28iKSkKKworICAgICAgICBjbGFzcyBDMShvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KKyAgICAgICAgeCA9IEMxKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHgsICJfX2RpY3RfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoeCwgImEiKSkKKyAgICAgICAgeC5hID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYSwgMSkKKyAgICAgICAgeC5hID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYSwgTm9uZSkKKyAgICAgICAgZGVsIHguYQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoeCwgImEiKSkKKworICAgICAgICBjbGFzcyBDMyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJywgJ2InLCAnYyddCisgICAgICAgIHggPSBDMygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih4LCAiX19kaWN0X18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHgsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih4LCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoeCwgJ2MnKSkKKyAgICAgICAgeC5hID0gMQorICAgICAgICB4LmIgPSAyCisgICAgICAgIHguYyA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5iLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYywgMykKKworICAgICAgICBjbGFzcyBDNChvYmplY3QpOgorICAgICAgICAgICAgIiIiVmFsaWRhdGUgbmFtZSBtYW5nbGluZyIiIgorICAgICAgICAgICAgX19zbG90c19fID0gWydfX2EnXQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fYSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fYQorICAgICAgICB4ID0gQzQoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHgsICdfX2RpY3RfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoeCwgJ19fYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZ2V0KCksIDUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHguX19hID0gNgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkRvdWJsZSB1bmRlcnNjb3JlZCBuYW1lcyBub3QgbWFuZ2xlZCIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgc2xvdCBuYW1lcyBhcmUgcHJvcGVyIGlkZW50aWZpZXJzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbTm9uZV0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiW05vbmVdIHNsb3RzIG5vdCBjYXVnaHQiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICAgICAgX19zbG90c19fID0gWyJmb28gYmFyIl0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiWydmb28gYmFyJ10gc2xvdHMgbm90IGNhdWdodCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbImZvb1wwYmFyIl0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiWydmb29cXDBiYXInXSBzbG90cyBub3QgY2F1Z2h0IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiMSJdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlsnMSddIHNsb3RzIG5vdCBjYXVnaHQiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICAgICAgX19zbG90c19fID0gWyIiXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJbJyddIHNsb3RzIG5vdCBjYXVnaHQiKQorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbImEiLCAiYV9iIiwgIl9hIiwgIkEwMTIzNDU2Nzg5WiJdCisgICAgICAgICMgWFhYKG5ub3J3aXR6KTogd2FzIHRoZXJlIHN1cHBvc2VkIHRvIGJlIHNvbWV0aGluZyB0ZXN0ZWQKKyAgICAgICAgIyBmcm9tIHRoZSBjbGFzcyBhYm92ZT8KKworICAgICAgICAjIFRlc3QgYSBzaW5nbGUgc3RyaW5nIGlzIG5vdCBleHBhbmRlZCBhcyBhIHNlcXVlbmNlLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAiYWJjIgorICAgICAgICBjID0gQygpCisgICAgICAgIGMuYWJjID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYWJjLCA1KQorCisgICAgICAgICMgVGVzdCB1bmljb2RlIHNsb3QgbmFtZXMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdW5pY29kZQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUZXN0IGEgc2luZ2xlIHVuaWNvZGUgc3RyaW5nIGlzIG5vdCBleHBhbmRlZCBhcyBhIHNlcXVlbmNlLgorICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IHVuaWNvZGUoImFiYyIpCisgICAgICAgICAgICBjID0gQygpCisgICAgICAgICAgICBjLmFiYyA9IDUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hYmMsIDUpCisKKyAgICAgICAgICAgICMgX3VuaWNvZGVfdG9fc3RyaW5nIHVzZWQgdG8gbW9kaWZ5IHNsb3RzIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcworICAgICAgICAgICAgc2xvdHMgPSAodW5pY29kZSgiZm9vIiksIHVuaWNvZGUoImJhciIpKQorICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IHNsb3RzCisgICAgICAgICAgICB4ID0gQygpCisgICAgICAgICAgICB4LmZvbyA9IDUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc2xvdHNbMF0pLCB1bmljb2RlKQorICAgICAgICAgICAgIyB0aGlzIHVzZWQgdG8gbGVhayByZWZlcmVuY2VzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbdW5pY2hyKDEyOCldCisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVW5pY29kZUVuY29kZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiW3VuaWNocigxMjgpXSBzbG90cyBub3QgY2F1Z2h0IikKKworICAgICAgICAjIFRlc3QgbGVha3MKKyAgICAgICAgY2xhc3MgQ291bnRlZChvYmplY3QpOgorICAgICAgICAgICAgY291bnRlciA9IDAgICAgIyBjb3VudHMgdGhlIG51bWJlciBvZiBpbnN0YW5jZXMgYWxpdmUKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBDb3VudGVkLmNvdW50ZXIgKz0gMQorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgQ291bnRlZC5jb3VudGVyIC09IDEKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJywgJ2InLCAnYyddCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeC5hID0gQ291bnRlZCgpCisgICAgICAgIHguYiA9IENvdW50ZWQoKQorICAgICAgICB4LmMgPSBDb3VudGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDMpCisgICAgICAgIGRlbCB4CisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDApCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHggPSBEKCkKKyAgICAgICAgeC5hID0gQ291bnRlZCgpCisgICAgICAgIHgueiA9IENvdW50ZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMikKKyAgICAgICAgZGVsIHgKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMCkKKyAgICAgICAgY2xhc3MgRShEKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnZSddCisgICAgICAgIHggPSBFKCkKKyAgICAgICAgeC5hID0gQ291bnRlZCgpCisgICAgICAgIHgueiA9IENvdW50ZWQoKQorICAgICAgICB4LmUgPSBDb3VudGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDMpCisgICAgICAgIGRlbCB4CisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDApCisKKyAgICAgICAgIyBUZXN0IGN5Y2xpY2FsIGxlYWtzIFtTRiBidWcgNTE5NjIxXQorICAgICAgICBjbGFzcyBGKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnLCAnYiddCisgICAgICAgIHMgPSBGKCkKKyAgICAgICAgcy5hID0gW0NvdW50ZWQoKSwgc10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDEpCisgICAgICAgIHMgPSBOb25lCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDApCisKKyAgICAgICAgIyBUZXN0IGxvb2t1cCBsZWFrcyBbU0YgYnVnIDU3MjU2N10KKyAgICAgICAgaWYgaGFzYXR0cihnYywgJ2dldF9vYmplY3RzJyk6CisgICAgICAgICAgICBjbGFzcyBHKG9iamVjdCk6CisgICAgICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgICAgICBnID0gRygpCisgICAgICAgICAgICBvcmlnX29iamVjdHMgPSBsZW4oZ2MuZ2V0X29iamVjdHMoKSkKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgZz09ZworICAgICAgICAgICAgbmV3X29iamVjdHMgPSBsZW4oZ2MuZ2V0X29iamVjdHMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ19vYmplY3RzLCBuZXdfb2JqZWN0cykKKworICAgICAgICBjbGFzcyBIKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnLCAnYiddCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5hID0gMQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IDIKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGZfKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGZfLmEsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmXy5iLCAyKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoJ3N0ZGVycicpIGFzIHM6CisgICAgICAgICAgICBoID0gSCgpCisgICAgICAgICAgICBkZWwgaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgJycpCisKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gImEiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFgoKS5hCisKKyAgICBkZWYgdGVzdF9zbG90c19zcGVjaWFsKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgX19kaWN0X18gYW5kIF9fd2Vha3JlZl9fIGluIF9fc2xvdHNfXy4uLgorICAgICAgICBjbGFzcyBEKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbIl9fZGljdF9fIl0KKyAgICAgICAgYSA9IEQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiX19kaWN0X18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJfX3dlYWtyZWZfXyIpKQorICAgICAgICBhLmZvbyA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2RpY3RfXywgeyJmb28iOiA0Mn0pCisKKyAgICAgICAgY2xhc3MgVyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJfX3dlYWtyZWZfXyJdCisgICAgICAgIGEgPSBXKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgIl9fd2Vha3JlZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAiX19kaWN0X18iKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYS5mb28gPSA0MgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBiZSBhbGxvd2VkIHRvIHNldCBhLmZvbyIpCisKKyAgICAgICAgY2xhc3MgQzEoVywgRCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbXQorICAgICAgICBhID0gQzEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiX19kaWN0X18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgIl9fd2Vha3JlZl9fIikpCisgICAgICAgIGEuZm9vID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZGljdF9fLCB7ImZvbyI6IDQyfSkKKworICAgICAgICBjbGFzcyBDMihELCBXKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFtdCisgICAgICAgIGEgPSBDMigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGEsICJfX2RpY3RfXyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiX193ZWFrcmVmX18iKSkKKyAgICAgICAgYS5mb28gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19kaWN0X18sIHsiZm9vIjogNDJ9KQorCisgICAgZGVmIHRlc3Rfc2xvdHNfZGVzY3JpcHRvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZTIxMTU6IHNsb3QgZGVzY3JpcHRvcnMgZGlkIG5vdCBjb3JyZWN0bHkgY2hlY2sKKyAgICAgICAgIyB0aGUgdHlwZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0CisgICAgICAgIGltcG9ydCBhYmMKKyAgICAgICAgY2xhc3MgTXlBQkM6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICJhIgorCisgICAgICAgIGNsYXNzIFVucmVsYXRlZChvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBNeUFCQy5yZWdpc3RlcihVbnJlbGF0ZWQpCisKKyAgICAgICAgdSA9IFVucmVsYXRlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1LCBNeUFCQykKKworICAgICAgICAjIFRoaXMgdXNlZCB0byBjcmFzaAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIE15QUJDLmEuX19zZXRfXywgdSwgMykKKworICAgIGRlZiB0ZXN0X21ldGFjbGFzc19jbXAoc2VsZik6CisgICAgICAgICMgU2VlIGJ1ZyA3NDkxLgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gTQorICAgICAgICBzZWxmLmFzc2VydFRydWUoWCA8IE0pCisKKyAgICBkZWYgdGVzdF9keW5hbWljcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNsYXNzIGF0dHJpYnV0ZSBwcm9wYWdhdGlvbi4uLgorICAgICAgICBjbGFzcyBEKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEUoRCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEYoRCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIEQuZm9vID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZm9vLCAxKQorICAgICAgICAjIFRlc3QgdGhhdCBkeW5hbWljIGF0dHJpYnV0ZXMgYXJlIGluaGVyaXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUuZm9vLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYuZm9vLCAxKQorICAgICAgICAjIFRlc3QgZHluYW1pYyBpbnN0YW5jZXMKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAiZm9vYmFyIikpCisgICAgICAgIEMuZm9vYmFyID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZm9vYmFyLCAyKQorICAgICAgICBDLm1ldGhvZCA9IGxhbWJkYSBzZWxmOiA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEubWV0aG9kKCksIDQyKQorICAgICAgICBDLl9fcmVwcl9fID0gbGFtYmRhIHNlbGY6ICJDKCkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhKSwgIkMoKSIpCisgICAgICAgIEMuX19pbnRfXyA9IGxhbWJkYSBzZWxmOiAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoYSksIDEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmZvb2JhciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJzcGFtIikpCisgICAgICAgIGRlZiBteWdldGF0dHIoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBpZiBuYW1lID09ICJzcGFtIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gInNwYW0iCisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICBDLl9fZ2V0YXR0cl9fID0gbXlnZXRhdHRyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5zcGFtLCAic3BhbSIpCisgICAgICAgIGEubmV3ID0gMTIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLm5ldywgMTIpCisgICAgICAgIGRlZiBteXNldGF0dHIoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICAgICAgaWYgbmFtZSA9PSAic3BhbSI6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpCisgICAgICAgIEMuX19zZXRhdHRyX18gPSBteXNldGF0dHIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYS5zcGFtID0gIm5vdCBzcGFtIgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIEF0dHJpYnV0ZUVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnNwYW0sICJzcGFtIikKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZCA9IEQoKQorICAgICAgICBkLmZvbyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbywgMSkKKworICAgICAgICAjIFRlc3QgaGFuZGxpbmcgb2YgaW50KnNlcSBhbmQgc2VxKmludAorICAgICAgICBjbGFzcyBJKGludCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiKkkoMiksICJhYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSSgyKSoiYSIsICJhYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMipJKDMpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEkoMykqMiwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJKDMpKkkoMiksIDYpCisKKyAgICAgICAgIyBUZXN0IGhhbmRsaW5nIG9mIGxvbmcqc2VxIGFuZCBzZXEqbG9uZworICAgICAgICBjbGFzcyBMKGxvbmcpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIipMKDJMKSwgImFhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMKDJMKSoiYSIsICJhYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMipMKDMpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwoMykqMiwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMKDMpKkwoMiksIDYpCisKKyAgICAgICAgIyBUZXN0IGNvbXBhcmlzb24gb2YgY2xhc3NlcyB3aXRoIGR5bmFtaWMgbWV0YWNsYXNzZXMKKyAgICAgICAgY2xhc3MgZHluYW1pY21ldGFjbGFzcyh0eXBlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3Mgc29tZWNsYXNzOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGR5bmFtaWNtZXRhY2xhc3MKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzb21lY2xhc3MsIG9iamVjdCkKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGVycm9ycy4uLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBDKGxpc3QsIGRpY3QpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaW5oZXJpdGFuY2UgZnJvbSBib3RoIGxpc3QgYW5kIGRpY3Qgc2hvdWxkIGJlIGlsbGVnYWwiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0LCBOb25lKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImluaGVyaXRhbmNlIGZyb20gbm9uLXR5cGUgc2hvdWxkIGJlIGlsbGVnYWwiKQorICAgICAgICBjbGFzcyBDbGFzc2ljOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIEModHlwZShsZW4pKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImluaGVyaXRhbmNlIGZyb20gQ0Z1bmN0aW9uIHNob3VsZCBiZSBpbGxlZ2FsIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICAgICAgX19zbG90c19fID0gMQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJfX3Nsb3RzX18gPSAxIHNob3VsZCBiZSBpbGxlZ2FsIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICAgICAgX19zbG90c19fID0gWzFdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIl9fc2xvdHNfXyA9IFsxXSBzaG91bGQgYmUgaWxsZWdhbCIpCisKKyAgICAgICAgY2xhc3MgTTEodHlwZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE0yKHR5cGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBBMShvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE0xCisgICAgICAgIGNsYXNzIEEyKG9iamVjdCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gTTIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgQihBMSwgQTIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZmluZGluZyB0aGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBzaG91bGQgaGF2ZSBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfY2xhc3NtZXRob2RzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgY2xhc3MgbWV0aG9kcy4uLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZm9vKCphKTogcmV0dXJuIGEKKyAgICAgICAgICAgIGdvbyA9IGNsYXNzbWV0aG9kKGZvbykKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuZ29vKDEpLCAoQywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nb28oMSksIChDLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZvbygxKSwgKGMsIDEpKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkID0gRCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5nb28oMSksIChELCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdvbygxKSwgKEQsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vKDEpLCAoZCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5mb28oZCwgMSksIChkLCAxKSkKKyAgICAgICAgIyBUZXN0IGZvciBhIHNwZWNpZmljIGNyYXNoIChTRiBidWcgNTI4MTMyKQorICAgICAgICBkZWYgZihjbHMsIGFyZyk6IHJldHVybiAoY2xzLCBhcmcpCisgICAgICAgIGZmID0gY2xhc3NtZXRob2QoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZi5fX2dldF9fKDAsIGludCkoNDIpLCAoaW50LCA0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmYuX19nZXRfXygwKSg0MiksIChpbnQsIDQyKSkKKworICAgICAgICAjIFRlc3Qgc3VwZXIoKSB3aXRoIGNsYXNzbWV0aG9kcyAoU0YgYnVnIDUzNTQ0NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmdvby5pbV9zZWxmLCBDKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZ29vLmltX3NlbGYsIEQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VwZXIoRCxEKS5nb28uaW1fc2VsZiwgRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdXBlcihELGQpLmdvby5pbV9zZWxmLCBEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1cGVyKEQsRCkuZ29vKCksIChELCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VwZXIoRCxkKS5nb28oKSwgKEQsKSkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGEgbm9uLWNhbGxhYmxlIHdpbGwgcmFpc2UKKyAgICAgICAgbWV0aCA9IGNsYXNzbWV0aG9kKDEpLl9fZ2V0X18oMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgY2xhc3NtZXRob2QoKSBkb2Vzbid0IGFsbG93IGtleXdvcmQgYXJncworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzc21ldGhvZChmLCBrdz0xKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJjbGFzc21ldGhvZCBzaG91bGRuJ3QgYWNjZXB0IGtleXdvcmQgYXJncyIpCisKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0aGUgbW9kdWxlICd4eHN1YnR5cGUnIGlzIGludGVybmFsIikKKyAgICBkZWYgdGVzdF9jbGFzc21ldGhvZHNfaW5fYyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIEMtYmFzZWQgY2xhc3MgbWV0aG9kcy4uLgorICAgICAgICBpbXBvcnQgeHhzdWJ0eXBlIGFzIHNwYW0KKyAgICAgICAgYSA9ICgxLCAyLCAzKQorICAgICAgICBkID0geydhYmMnOiAxMjN9CisgICAgICAgIHgsIGExLCBkMSA9IHNwYW0uc3BhbWxpc3QuY2xhc3NtZXRoKCphLCAqKmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgc3BhbS5zcGFtbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkMSkKKyAgICAgICAgeCwgYTEsIGQxID0gc3BhbS5zcGFtbGlzdCgpLmNsYXNzbWV0aCgqYSwgKipkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHNwYW0uc3BhbWxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZDEpCisgICAgICAgIHNwYW1fY20gPSBzcGFtLnNwYW1saXN0Ll9fZGljdF9fWydjbGFzc21ldGgnXQorICAgICAgICB4MiwgYTIsIGQyID0gc3BhbV9jbShzcGFtLnNwYW1saXN0LCAqYSwgKipkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgyLCBzcGFtLnNwYW1saXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEyLCBhMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiwgZDEpCisgICAgICAgIGNsYXNzIFN1YlNwYW0oc3BhbS5zcGFtbGlzdCk6IHBhc3MKKyAgICAgICAgeDIsIGEyLCBkMiA9IHNwYW1fY20oU3ViU3BhbSwgKmEsICoqZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4MiwgU3ViU3BhbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMiwgYTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGQxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzcGFtX2NtKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc3BhbV9jbShzcGFtLnNwYW1saXN0KCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNwYW1fY20obGlzdCkKKworICAgIGRlZiB0ZXN0X3N0YXRpY21ldGhvZHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzdGF0aWMgbWV0aG9kcy4uLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZm9vKCphKTogcmV0dXJuIGEKKyAgICAgICAgICAgIGdvbyA9IHN0YXRpY21ldGhvZChmb28pCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmdvbygxKSwgKDEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdvbygxKSwgKDEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZvbygxKSwgKGMsIDEsKSkKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZCA9IEQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZ29vKDEpLCAoMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ29vKDEpLCAoMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vKDEpLCAoZCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5mb28oZCwgMSksIChkLCAxKSkKKworICAgIEB0ZXN0X3N1cHBvcnQuaW1wbF9kZXRhaWwoInRoZSBtb2R1bGUgJ3h4c3VidHlwZScgaXMgaW50ZXJuYWwiKQorICAgIGRlZiB0ZXN0X3N0YXRpY21ldGhvZHNfaW5fYyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIEMtYmFzZWQgc3RhdGljIG1ldGhvZHMuLi4KKyAgICAgICAgaW1wb3J0IHh4c3VidHlwZSBhcyBzcGFtCisgICAgICAgIGEgPSAoMSwgMiwgMykKKyAgICAgICAgZCA9IHsiYWJjIjogMTIzfQorICAgICAgICB4LCBhMSwgZDEgPSBzcGFtLnNwYW1saXN0LnN0YXRpY21ldGgoKmEsICoqZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGQxKQorICAgICAgICB4LCBhMSwgZDIgPSBzcGFtLnNwYW1saXN0KCkuc3RhdGljbWV0aCgqYSwgKipkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZDEpCisKKyAgICBkZWYgdGVzdF9jbGFzc2ljKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgY2xhc3NpYyBjbGFzc2VzLi4uCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgZm9vKCphKTogcmV0dXJuIGEKKyAgICAgICAgICAgIGdvbyA9IGNsYXNzbWV0aG9kKGZvbykKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuZ29vKDEpLCAoQywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nb28oMSksIChDLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZvbygxKSwgKGMsIDEpKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkID0gRCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5nb28oMSksIChELCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdvbygxKSwgKEQsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vKDEpLCAoZCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5mb28oZCwgMSksIChkLCAxKSkKKyAgICAgICAgY2xhc3MgRTogIyAqbm90KiBzdWJjbGFzc2luZyBmcm9tIEMKKyAgICAgICAgICAgIGZvbyA9IEMuZm9vCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRSgpLmZvbywgQy5mb28pICMgaS5lLiwgdW5ib3VuZAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihDLmZvby5fX2dldF9fKEMoKSkpLnN0YXJ0c3dpdGgoIjxib3VuZCBtZXRob2QgIikpCisKKyAgICBkZWYgdGVzdF9jb21wYXR0cihzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNvbXB1dGVkIGF0dHJpYnV0ZXMuLi4KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgY2xhc3MgY29tcHV0ZWRfYXR0cmlidXRlKG9iamVjdCk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdldCwgc2V0PU5vbmUsIGRlbGV0ZT1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2dldCA9IGdldAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9fc2V0ID0gc2V0CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19kZWxldGUgPSBkZWxldGUKKyAgICAgICAgICAgICAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIHR5cGU9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fZ2V0KG9iaikKKyAgICAgICAgICAgICAgICBkZWYgX19zZXRfXyhzZWxmLCBvYmosIHZhbHVlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zZXQob2JqLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBkZWYgX19kZWxldGVfXyhzZWxmLCBvYmopOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2RlbGV0ZShvYmopCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fX3ggPSAwCisgICAgICAgICAgICBkZWYgX19nZXRfeChzZWxmKToKKyAgICAgICAgICAgICAgICB4ID0gc2VsZi5fX3gKKyAgICAgICAgICAgICAgICBzZWxmLl9feCA9IHgrMQorICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgICAgICBkZWYgX19zZXRfeChzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLl9feCA9IHgKKyAgICAgICAgICAgIGRlZiBfX2RlbGV0ZV94KHNlbGYpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9feAorICAgICAgICAgICAgeCA9IGNvbXB1dGVkX2F0dHJpYnV0ZShfX2dldF94LCBfX3NldF94LCBfX2RlbGV0ZV94KQorICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS54LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEueCwgMSkKKyAgICAgICAgYS54ID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLngsIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEueCwgMTEpCisgICAgICAgIGRlbCBhLngKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKGEsICd4JyksIDApCisKKyAgICBkZWYgdGVzdF9uZXdzbG90cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIF9fbmV3X18gc2xvdCBvdmVycmlkZS4uLgorICAgICAgICBjbGFzcyBDKGxpc3QpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICBzZWxmID0gbGlzdC5fX25ld19fKGNscykKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gc2VsZi5mb28gKyAyCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmZvbywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fY2xhc3NfXywgQykKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYiA9IEQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZm9vLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuX19jbGFzc19fLCBEKQorCisgICAgZGVmIHRlc3RfYWx0bXJvKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbXJvKCkgYW5kIG92ZXJyaWRpbmcgaXQuLi4KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgZGVmIGYoc2VsZik6IHJldHVybiAiQSIKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIGRlZiBmKHNlbGYpOiByZXR1cm4gIkMiCisgICAgICAgIGNsYXNzIEQoQiwgQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5tcm8oKSwgW0QsIEIsIEMsIEEsIG9iamVjdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5fX21yb19fLCAoRCwgQiwgQywgQSwgb2JqZWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuZigpLCAiQyIpCisKKyAgICAgICAgY2xhc3MgUGVydmVyc2VNZXRhVHlwZSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBtcm8oY2xzKToKKyAgICAgICAgICAgICAgICBMID0gdHlwZS5tcm8oY2xzKQorICAgICAgICAgICAgICAgIEwucmV2ZXJzZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEwKKyAgICAgICAgY2xhc3MgWChELEIsQyxBKToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBQZXJ2ZXJzZU1ldGFUeXBlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5fX21yb19fLCAob2JqZWN0LCBBLCBDLCBCLCBELCBYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCkuZigpLCAiQSIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgICAgIGNsYXNzIF9fbWV0YWNsYXNzX18odHlwZSk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBtcm8oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NlbGYsIGRpY3QsIG9iamVjdF0KKyAgICAgICAgICAgICMgSW4gQ1B5dGhvbiwgdGhlIGNsYXNzIGNyZWF0aW9uIGFib3ZlIGFscmVhZHkgcmFpc2VzCisgICAgICAgICAgICAjIFR5cGVFcnJvciwgYXMgYSBwcm90ZWN0aW9uIGFnYWluc3QgdGhlIGZhY3QgdGhhdAorICAgICAgICAgICAgIyBpbnN0YW5jZXMgb2YgWCB3b3VsZCBzZWdmYXVsdCBpdC4gIEluIG90aGVyIFB5dGhvbgorICAgICAgICAgICAgIyBpbXBsZW1lbnRhdGlvbnMgaXQgd291bGQgYmUgb2sgdG8gbGV0IHRoZSBjbGFzcyBYCisgICAgICAgICAgICAjIGJlIGNyZWF0ZWQsIGJ1dCBpbnN0ZWFkIGdldCBhIGNsZWFuIFR5cGVFcnJvciBvbiB0aGUKKyAgICAgICAgICAgICMgX19zZXRpdGVtX18gYmVsb3cuCisgICAgICAgICAgICB4ID0gb2JqZWN0Ll9fbmV3X18oWCkKKyAgICAgICAgICAgIHhbNV0gPSA2CisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRldmlvdXMgbXJvKCkgcmV0dXJuIG5vdCBjYXVnaHQiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgICAgICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgorICAgICAgICAgICAgICAgICAgICBkZWYgbXJvKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsxXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJub24tY2xhc3MgbXJvKCkgcmV0dXJuIG5vdCBjYXVnaHQiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgICAgICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgorICAgICAgICAgICAgICAgICAgICBkZWYgbXJvKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm9uLXNlcXVlbmNlIG1ybygpIHJldHVybiBub3QgY2F1Z2h0IikKKworICAgIGRlZiB0ZXN0X292ZXJsb2FkaW5nKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgb3BlcmF0b3Igb3ZlcmxvYWRpbmcuLi4KKworICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICAiSW50ZXJtZWRpYXRlIGNsYXNzIGJlY2F1c2Ugb2JqZWN0IGRvZXNuJ3QgaGF2ZSBhIF9fc2V0YXR0cl9fIgorCisgICAgICAgIGNsYXNzIEMoQik6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiZm9vIjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiZ2V0YXR0ciIsIG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiZm9vIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRhdHRyID0gKG5hbWUsIHZhbHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBCLl9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQorICAgICAgICAgICAgZGVmIF9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gImZvbyI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsYXR0ciA9IG5hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQi5fX2RlbGF0dHJfXyhzZWxmLCBuYW1lKQorCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCJnZXRpdGVtIiwga2V5KQorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0aXRlbSA9IChrZXksIHZhbHVlKQorICAgICAgICAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxpdGVtID0ga2V5CisKKyAgICAgICAgICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiZ2V0c2xpY2UiLCBpLCBqKQorICAgICAgICAgICAgZGVmIF9fc2V0c2xpY2VfXyhzZWxmLCBpLCBqLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRzbGljZSA9IChpLCBqLCB2YWx1ZSkKKyAgICAgICAgICAgIGRlZiBfX2RlbHNsaWNlX18oc2VsZiwgaSwgaik6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxzbGljZSA9IChpLCBqKQorCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmZvbywgKCJnZXRhdHRyIiwgImZvbyIpKQorICAgICAgICBhLmZvbyA9IDEyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5zZXRhdHRyLCAoImZvbyIsIDEyKSkKKyAgICAgICAgZGVsIGEuZm9vCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZWxhdHRyLCAiZm9vIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTJdLCAoImdldGl0ZW0iLCAxMikpCisgICAgICAgIGFbMTJdID0gMjEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnNldGl0ZW0sICgxMiwgMjEpKQorICAgICAgICBkZWwgYVsxMl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmRlbGl0ZW0sIDEyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswOjEwXSwgKCJnZXRzbGljZSIsIDAsIDEwKSkKKyAgICAgICAgYVswOjEwXSA9ICJmb28iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5zZXRzbGljZSwgKDAsIDEwLCAiZm9vIikpCisgICAgICAgIGRlbCBhWzA6MTBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZWxzbGljZSwgKDAsIDEwKSkKKworICAgIGRlZiB0ZXN0X21ldGhvZHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBtZXRob2RzLi4uCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLngKKyAgICAgICAgYzEgPSBDKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYzEuZm9vKCksIDEpCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBib28gPSBDLmZvbworICAgICAgICAgICAgZ29vID0gYzEuZm9vCisgICAgICAgIGQyID0gRCgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmZvbygpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmJvbygpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmdvbygpLCAxKQorICAgICAgICBjbGFzcyBFKG9iamVjdCk6CisgICAgICAgICAgICBmb28gPSBDLmZvbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5mb28sIEMuZm9vKSAjIGkuZS4sIHVuYm91bmQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoQy5mb28uX19nZXRfXyhDKDEpKSkuc3RhcnRzd2l0aCgiPGJvdW5kIG1ldGhvZCAiKSkKKworICAgIGRlZiB0ZXN0X3NwZWNpYWxfbWV0aG9kX2xvb2t1cChzZWxmKToKKyAgICAgICAgIyBUaGUgbG9va3VwIG9mIHNwZWNpYWwgbWV0aG9kcyBieXBhc3NlcyBfX2dldGF0dHJfXyBhbmQKKyAgICAgICAgIyBfX2dldGF0dHJpYnV0ZV9fLCBidXQgdGhleSBzdGlsbCBjYW4gYmUgZGVzY3JpcHRvcnMuCisKKyAgICAgICAgZGVmIHJ1bl9jb250ZXh0KG1hbmFnZXIpOgorICAgICAgICAgICAgd2l0aCBtYW5hZ2VyOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGlkZW4oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBkZWYgaGVsbG8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gImhlbGxvIgorICAgICAgICBkZWYgZW1wdHlfc2VxKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGRlZiB6ZXJvKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZGVmIGNvbXBsZXhfbnVtKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIDFqCisgICAgICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICBkZWYgcmV0dXJuX3RydWUoc2VsZiwgdGhpbmc9Tm9uZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBkZWYgZG9faXNpbnN0YW5jZShvYmopOgorICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoaW50LCBvYmopCisgICAgICAgIGRlZiBkb19pc3N1YmNsYXNzKG9iaik6CisgICAgICAgICAgICByZXR1cm4gaXNzdWJjbGFzcyhpbnQsIG9iaikKKyAgICAgICAgZGVmIHN3YWxsb3coKmFyZ3MpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgZG9fZGljdF9taXNzaW5nKGNoZWNrZXIpOgorICAgICAgICAgICAgY2xhc3MgRGljdFN1YihjaGVja2VyLl9fY2xhc3NfXywgZGljdCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEaWN0U3ViKClbImhpIl0sIDQpCisgICAgICAgIGRlZiBzb21lX251bWJlcihzZWxmXywga2V5KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LCAiaGkiKQorICAgICAgICAgICAgcmV0dXJuIDQKKyAgICAgICAgZGVmIGZvcm1hdF9pbXBsKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgcmV0dXJuICJoZWxsbyIKKworICAgICAgICAjIEl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBldmVyeSBzcGVjaWFsIG1ldGhvZCB0ZXN0ZWQgaGVyZSwgYnV0IEknbQorICAgICAgICAjIG9ubHkgbGlzdGluZyB0aGUgb25lcyBJIGNhbiByZW1lbWJlciBvdXRzaWRlIG9mIHR5cGVvYmplY3QuYywgc2luY2UgaXQKKyAgICAgICAgIyBkb2VzIGl0IHJpZ2h0LgorICAgICAgICBzcGVjaWFscyA9IFsKKyAgICAgICAgICAgICgiX191bmljb2RlX18iLCB1bmljb2RlLCBoZWxsbywgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19yZXZlcnNlZF9fIiwgcmV2ZXJzZWQsIGVtcHR5X3NlcSwgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19sZW5ndGhfaGludF9fIiwgbGlzdCwgemVybywgc2V0KCksCisgICAgICAgICAgICAgeyJfX2l0ZXJfXyIgOiBpZGVuLCAibmV4dCIgOiBzdG9wfSksCisgICAgICAgICAgICAoIl9fc2l6ZW9mX18iLCBzeXMuZ2V0c2l6ZW9mLCB6ZXJvLCBzZXQoKSwge30pLAorICAgICAgICAgICAgKCJfX2luc3RhbmNlY2hlY2tfXyIsIGRvX2lzaW5zdGFuY2UsIHJldHVybl90cnVlLCBzZXQoKSwge30pLAorICAgICAgICAgICAgKCJfX21pc3NpbmdfXyIsIGRvX2RpY3RfbWlzc2luZywgc29tZV9udW1iZXIsCisgICAgICAgICAgICAgc2V0KCgiX19jbGFzc19fIiwpKSwge30pLAorICAgICAgICAgICAgKCJfX3N1YmNsYXNzY2hlY2tfXyIsIGRvX2lzc3ViY2xhc3MsIHJldHVybl90cnVlLAorICAgICAgICAgICAgIHNldCgoIl9fYmFzZXNfXyIsKSksIHt9KSwKKyAgICAgICAgICAgICgiX19lbnRlcl9fIiwgcnVuX2NvbnRleHQsIGlkZW4sIHNldCgpLCB7Il9fZXhpdF9fIiA6IHN3YWxsb3d9KSwKKyAgICAgICAgICAgICgiX19leGl0X18iLCBydW5fY29udGV4dCwgc3dhbGxvdywgc2V0KCksIHsiX19lbnRlcl9fIiA6IGlkZW59KSwKKyAgICAgICAgICAgICgiX19jb21wbGV4X18iLCBjb21wbGV4LCBjb21wbGV4X251bSwgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19mb3JtYXRfXyIsIGZvcm1hdCwgZm9ybWF0X2ltcGwsIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fZGlyX18iLCBkaXIsIGVtcHR5X3NlcSwgc2V0KCksIHt9KSwKKyAgICAgICAgICAgIF0KKworICAgICAgICBjbGFzcyBDaGVja2VyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0ciwgdGVzdD1zZWxmKToKKyAgICAgICAgICAgICAgICB0ZXN0LmZhaWwoIl9fZ2V0YXR0cl9fIGNhbGxlZCB3aXRoIHswfSIuZm9ybWF0KGF0dHIpKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgYXR0ciwgdGVzdD1zZWxmKToKKyAgICAgICAgICAgICAgICBpZiBhdHRyIG5vdCBpbiBvazoKKyAgICAgICAgICAgICAgICAgICAgdGVzdC5mYWlsKCJfX2dldGF0dHJpYnV0ZV9fIGNhbGxlZCB3aXRoIHswfSIuZm9ybWF0KGF0dHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBhdHRyKQorICAgICAgICBjbGFzcyBTcGVjaWFsRGVzY3Iob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbXBsKToKKyAgICAgICAgICAgICAgICBzZWxmLmltcGwgPSBpbXBsCisgICAgICAgICAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIG93bmVyKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW1wbC5fX2dldF9fKG9iaiwgb3duZXIpCisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEVyckRlc2NyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIG93bmVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBNeUV4Y2VwdGlvbgorCisgICAgICAgIGZvciBuYW1lLCBydW5uZXIsIG1ldGhfaW1wbCwgb2ssIGVudiBpbiBzcGVjaWFsczoKKyAgICAgICAgICAgIGNsYXNzIFgoQ2hlY2tlcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZm9yIGF0dHIsIG9iaiBpbiBlbnYuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihYLCBhdHRyLCBvYmopCisgICAgICAgICAgICBzZXRhdHRyKFgsIG5hbWUsIG1ldGhfaW1wbCkKKyAgICAgICAgICAgIHJ1bm5lcihYKCkpCisKKyAgICAgICAgICAgIHJlY29yZCA9IFtdCisgICAgICAgICAgICBjbGFzcyBYKENoZWNrZXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZvciBhdHRyLCBvYmogaW4gZW52Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoWCwgYXR0ciwgb2JqKQorICAgICAgICAgICAgc2V0YXR0cihYLCBuYW1lLCBTcGVjaWFsRGVzY3IobWV0aF9pbXBsKSkKKyAgICAgICAgICAgIHJ1bm5lcihYKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgWzFdLCBuYW1lKQorCisgICAgICAgICAgICBjbGFzcyBYKENoZWNrZXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZvciBhdHRyLCBvYmogaW4gZW52Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoWCwgYXR0ciwgb2JqKQorICAgICAgICAgICAgc2V0YXR0cihYLCBuYW1lLCBFcnJEZXNjcigpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bm5lcihYKCkpCisgICAgICAgICAgICBleGNlcHQgTXlFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInswIXJ9IGRpZG4ndCByYWlzZSIuZm9ybWF0KG5hbWUpKQorCisgICAgZGVmIHRlc3Rfc3BlY2lhbHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzcGVjaWFsIG9wZXJhdG9ycy4uLgorICAgICAgICAjIFRlc3Qgb3BlcmF0b3JzIGxpa2UgX19oYXNoX18gZm9yIHdoaWNoIGEgYnVpbHQtaW4gZGVmYXVsdCBleGlzdHMKKworICAgICAgICAjIFRlc3QgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHN0YXRpYyBjbGFzc2VzCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICBpZiAwIDw9IGkgPCAxMDogcmV0dXJuIGkKKyAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgICAgIGMxID0gQygpCisgICAgICAgIGMyID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgbm90IGMxKSAjIFdoYXQ/CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYzEpLCBpZChjMikpCisgICAgICAgIGhhc2goYzEpCisgICAgICAgIGhhc2goYzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGMxLCBjMiksIGNtcChpZChjMSksIGlkKGMyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYzEsIGMxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgIT0gYzIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYzEgIT0gYzEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYzEgPT0gYzIpCisgICAgICAgICMgTm90ZSB0aGF0IHRoZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIHN0ci9yZXByLCBhbmQgdGhhdCB2YXJpZXMKKyAgICAgICAgIyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIHRlc3QgaXMgcnVuIHN0YW5kYWxvbmUgb3IgZnJvbSBhIGZyYW1ld29yay4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihjMSkuZmluZCgnQyBvYmplY3QgYXQgJykgPj0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYzEpLCByZXByKGMxKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtMSwgYzEpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgYzEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIGMxKQorICAgICAgICAjIFRlc3QgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGR5bmFtaWMgY2xhc3NlcworICAgICAgICBjbGFzcyBEKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgaWYgMCA8PSBpIDwgMTA6IHJldHVybiBpCisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICBkMSA9IEQoKQorICAgICAgICBkMiA9IEQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG5vdCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkMSksIGlkKGQyKSkKKyAgICAgICAgaGFzaChkMSkKKyAgICAgICAgaGFzaChkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZDEsIGQyKSwgY21wKGlkKGQxKSwgaWQoZDIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZDEsIGQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGQxICE9IGQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGQxID09IGQyKQorICAgICAgICAjIE5vdGUgdGhhdCB0aGUgbW9kdWxlIG5hbWUgYXBwZWFycyBpbiBzdHIvcmVwciwgYW5kIHRoYXQgdmFyaWVzCisgICAgICAgICMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyB0ZXN0IGlzIHJ1biBzdGFuZGFsb25lIG9yIGZyb20gYSBmcmFtZXdvcmsuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoZDEpLmZpbmQoJ0Qgb2JqZWN0IGF0ICcpID49IDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQxKSwgcmVwcihkMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIGQxKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIGQxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBkMSkKKyAgICAgICAgIyBUZXN0IG92ZXJyaWRkZW4gYmVoYXZpb3IgZm9yIHN0YXRpYyBjbGFzc2VzCisgICAgICAgIGNsYXNzIFByb3h5KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBub3Qgbm90IHNlbGYueAorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYueCkKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnggPT0gb3RoZXIKKyAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnggIT0gb3RoZXIKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYueCwgb3RoZXIueCkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiUHJveHk6JXMiICUgc2VsZi54CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJQcm94eSglcikiICUgc2VsZi54CisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgaW4gc2VsZi54CisgICAgICAgIHAwID0gUHJveHkoMCkKKyAgICAgICAgcDEgPSBQcm94eSgxKQorICAgICAgICBwXzEgPSBQcm94eSgtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBub3QgcDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChwMCksIGhhc2goMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDAsIHAwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAwLCBwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBwMCAhPSBwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3QgcDAsIHAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChwMCwgcDEpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAocDAsIHAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAocDAsIHBfMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHAwKSwgIlByb3h5OjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocDApLCAiUHJveHkoMCkiKQorICAgICAgICBwMTAgPSBQcm94eShyYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIHAxMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBwMTApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIHAxMCkKKyAgICAgICAgIyBUZXN0IG92ZXJyaWRkZW4gYmVoYXZpb3IgZm9yIGR5bmFtaWMgY2xhc3NlcworICAgICAgICBjbGFzcyBEUHJveHkob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vdCBub3Qgc2VsZi54CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi54KQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYueCA9PSBvdGhlcgorICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYueCAhPSBvdGhlcgorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi54LCBvdGhlci54KQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJEUHJveHk6JXMiICUgc2VsZi54CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJEUHJveHkoJXIpIiAlIHNlbGYueAorICAgICAgICAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGluIHNlbGYueAorICAgICAgICBwMCA9IERQcm94eSgwKQorICAgICAgICBwMSA9IERQcm94eSgxKQorICAgICAgICBwXzEgPSBEUHJveHkoLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgbm90IHAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocDApLCBoYXNoKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAwLCBwMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwMCwgcDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobm90IHAwLCBwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3QgcDAsIHAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChwMCwgcDEpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAocDAsIHAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAocDAsIHBfMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHAwKSwgIkRQcm94eTowIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHAwKSwgIkRQcm94eSgwKSIpCisgICAgICAgIHAxMCA9IERQcm94eShyYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIHAxMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBwMTApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIHAxMCkKKworICAgICAgICAjIFNhZmV0eSB0ZXN0IGZvciBfX2NtcF9fCisgICAgICAgIGRlZiB1bnNhZmVjbXAoYSwgYik6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihhLCAnX19jbXBfXycpOgorICAgICAgICAgICAgICAgIHJldHVybiAgICMgc29tZSB0eXBlcyBkb24ndCBoYXZlIGEgX19jbXBfXyBhbnkgbW9yZSAoc28gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IGRvZXNuJ3QgbWFrZSBzZW5zZSBhbnkgbW9yZSksIG9yIG1heWJlIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIG5ldmVyIGhhZCBhIF9fY21wX18gYXQgYWxsLCBlLmcuIGluIFB5UHkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhLl9fY2xhc3NfXy5fX2NtcF9fKGEsIGIpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYWxsb3cgJXMuX19jbXBfXyglciwgJXIpIiAlICgKKyAgICAgICAgICAgICAgICAgICAgYS5fX2NsYXNzX18sIGEsIGIpKQorCisgICAgICAgIHVuc2FmZWNtcCh1IjEyMyIsICIxMjMiKQorICAgICAgICB1bnNhZmVjbXAoIjEyMyIsIHUiMTIzIikKKyAgICAgICAgdW5zYWZlY21wKDEsIDEuMCkKKyAgICAgICAgdW5zYWZlY21wKDEuMCwgMSkKKyAgICAgICAgdW5zYWZlY21wKDEsIDFMKQorICAgICAgICB1bnNhZmVjbXAoMUwsIDEpCisKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJjdXN0b20gbG9naWMgZm9yIHByaW50aW5nIHRvIHJlYWwgZmlsZSBvYmplY3RzIikKKyAgICBkZWYgdGVzdF9yZWN1cnNpb25zXzEoc2VsZik6CisgICAgICAgICMgVGVzdGluZyByZWN1cnNpb24gY2hlY2tzIC4uLgorICAgICAgICBjbGFzcyBMZXR0ZXIoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgbGV0dGVyKToKKyAgICAgICAgICAgICAgICBpZiBsZXR0ZXIgPT0gJ0VQUyc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5fX25ld19fKGNscywgbGV0dGVyKQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRVBTJworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICMgc3lzLnN0ZG91dCBuZWVkcyB0byBiZSB0aGUgb3JpZ2luYWwgdG8gdHJpZ2dlciB0aGUgcmVjdXJzaW9uIGJ1ZworICAgICAgICB0ZXN0X3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc3lzLnN0ZG91dCA9IHRlc3Rfc3VwcG9ydC5nZXRfb3JpZ2luYWxfc3Rkb3V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBub3RoaW5nIHNob3VsZCBhY3R1YWxseSBiZSBwcmludGVkLCB0aGlzIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIHByaW50IExldHRlcigndycpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGEgUnVudGltZUVycm9yIGZvciBwcmludCByZWN1cnNpb24iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHRlc3Rfc3Rkb3V0CisKKyAgICBkZWYgdGVzdF9yZWN1cnNpb25zXzIoc2VsZik6CisgICAgICAgICMgQnVnICMxMjAyNTMzLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIEEuX19tdWxfXyA9IHR5cGVzLk1ldGhvZFR5cGUobGFtYmRhIHNlbGYsIHg6IHNlbGYgKiB4LCBOb25lLCBBKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBBKCkqMgorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBhIFJ1bnRpbWVFcnJvciIpCisKKyAgICBkZWYgdGVzdF93ZWFrcmVmcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHdlYWsgcmVmZXJlbmNlcy4uLgorICAgICAgICBpbXBvcnQgd2Vha3JlZgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocigpLCBjKQorICAgICAgICBkZWwgYworICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocigpLCBOb25lKQorICAgICAgICBkZWwgcgorICAgICAgICBjbGFzcyBOb1dlYWsob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnZm9vJ10KKyAgICAgICAgbm8gPSBOb1dlYWsoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3ZWFrcmVmLnJlZihubykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgbXNnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihtc2cpLmZpbmQoIndlYWsgcmVmZXJlbmNlIikgPj0gMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgid2Vha3JlZi5yZWYobm8pIHNob3VsZCBiZSBpbGxlZ2FsIikKKyAgICAgICAgY2xhc3MgV2VhayhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWydmb28nLCAnX193ZWFrcmVmX18nXQorICAgICAgICB5ZXMgPSBXZWFrKCkKKyAgICAgICAgciA9IHdlYWtyZWYucmVmKHllcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyKCksIHllcykKKyAgICAgICAgZGVsIHllcworICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocigpLCBOb25lKQorICAgICAgICBkZWwgcgorCisgICAgZGVmIHRlc3RfcHJvcGVydGllcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHByb3BlcnR5Li4uCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBnZXR4KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9feAorICAgICAgICAgICAgZGVmIHNldHgoc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuX194ID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBkZWx4KHNlbGYpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9feAorICAgICAgICAgICAgeCA9IHByb3BlcnR5KGdldHgsIHNldHgsIGRlbHgsIGRvYz0iSSdtIHRoZSB4IHByb3BlcnR5LiIpCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJ4IikpCisgICAgICAgIGEueCA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fQ19feCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS54LCA0MikKKyAgICAgICAgZGVsIGEueAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYSwgIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJfQ19feCIpKQorICAgICAgICBDLnguX19zZXRfXyhhLCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy54Ll9fZ2V0X18oYSksIDEwMCkKKyAgICAgICAgQy54Ll9fZGVsZXRlX18oYSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJ4IikpCisKKyAgICAgICAgcmF3ID0gQy5fX2RpY3RfX1sneCddCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyYXcsIHByb3BlcnR5KQorCisgICAgICAgIGF0dHJzID0gZGlyKHJhdykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX19kb2NfXyIsIGF0dHJzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmZ2V0IiwgYXR0cnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZzZXQiLCBhdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZmRlbCIsIGF0dHJzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3Ll9fZG9jX18sICJJJ20gdGhlIHggcHJvcGVydHkuIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJhdy5mZ2V0IGlzIEMuX19kaWN0X19bJ2dldHgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJhdy5mc2V0IGlzIEMuX19kaWN0X19bJ3NldHgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJhdy5mZGVsIGlzIEMuX19kaWN0X19bJ2RlbHgnXSkKKworICAgICAgICBmb3IgYXR0ciBpbiAiX19kb2NfXyIsICJmZ2V0IiwgImZzZXQiLCAiZmRlbCI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihyYXcsIGF0dHIsIDQyKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgbXNnOgorICAgICAgICAgICAgICAgIGlmIHN0cihtc2cpLmZpbmQoJ3JlYWRvbmx5JykgPCAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIndoZW4gc2V0dGluZyByZWFkb25seSBhdHRyICVyIG9uIGEgcHJvcGVydHksICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IHVuZXhwZWN0ZWQgVHlwZUVycm9yIG1zZyAlciIgJSAoYXR0ciwgc3RyKG1zZykpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIFR5cGVFcnJvciBmcm9tIHRyeWluZyB0byBzZXQgcmVhZG9ubHkgJXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dHIgb24gYSBwcm9wZXJ0eSIgJSBhdHRyKQorCisgICAgICAgIGNsYXNzIEQob2JqZWN0KToKKyAgICAgICAgICAgIF9fZ2V0aXRlbV9fID0gcHJvcGVydHkobGFtYmRhIHM6IDEvMCkKKworICAgICAgICBkID0gRCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIGQ6CisgICAgICAgICAgICAgICAgc3RyKGkpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3IgZnJvbSBiYWQgcHJvcGVydHkiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydGllc19kb2NfYXR0cmliKHNlbGYpOgorICAgICAgICBjbGFzcyBFKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0dGVyKHNlbGYpOgorICAgICAgICAgICAgICAgICJnZXR0ZXIgbWV0aG9kIgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBkZWYgc2V0dGVyKHNlbGZfLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgInNldHRlciBtZXRob2QiCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcHJvcCA9IHByb3BlcnR5KGdldHRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcC5fX2RvY19fLCAiZ2V0dGVyIG1ldGhvZCIpCisgICAgICAgICAgICBwcm9wMiA9IHByb3BlcnR5KGZzZXQ9c2V0dGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9wMi5fX2RvY19fLCBOb25lKQorCisgICAgZGVmIHRlc3RfdGVzdGNhcGlfbm9fc2VnZmF1bHQoc2VsZik6CisgICAgICAgICMgdGhpcyBzZWdmYXVsdGVkIGluIDIuNWIyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgICAgIHAgPSBwcm9wZXJ0eShfdGVzdGNhcGkudGVzdF93aXRoX2RvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X3Byb3BlcnRpZXNfcGx1cyhzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZm9vID0gcHJvcGVydHkoZG9jPSJoZWxsbyIpCisgICAgICAgICAgICBAZm9vLmdldHRlcgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZm9vCisgICAgICAgICAgICBAZm9vLnNldHRlcgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZm9vID0gYWJzKHZhbHVlKQorICAgICAgICAgICAgQGZvby5kZWxldGVyCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9mb28KKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuZm9vLl9fZG9jX18sICJoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjLCAiZm9vIikpCisgICAgICAgIGMuZm9vID0gLTQyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGMsICdfZm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fZm9vLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZvbywgNDIpCisgICAgICAgIGRlbCBjLmZvbworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYywgJ19mb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGMsICJmb28iKSkKKworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgQEMuZm9vLmRlbGV0ZXIKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZm9vCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgZC5mb28gPSAyNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vLCAyNCkKKyAgICAgICAgZGVsIGQuZm9vCisgICAgICAgIGRlbCBkLmZvbworCisgICAgICAgIGNsYXNzIEUob2JqZWN0KToKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZm9vCisgICAgICAgICAgICBAZm9vLnNldHRlcgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBAZm9vLnNldHRlcgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZm9vID0gYWJzKHZhbHVlKQorICAgICAgICAgICAgQGZvby5kZWxldGVyCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYsIHZhbHVlPU5vbmUpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9mb28KKworICAgICAgICBlID0gRSgpCisgICAgICAgIGUuZm9vID0gLTQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5mb28sIDQyKQorICAgICAgICBkZWwgZS5mb28KKworICAgICAgICBjbGFzcyBGKEUpOgorICAgICAgICAgICAgQEUuZm9vLmRlbGV0ZXIKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZik6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2ZvbworICAgICAgICAgICAgQGZvby5zZXR0ZXIKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZvbyA9IG1heCgwLCB2YWx1ZSkKKyAgICAgICAgZiA9IEYoKQorICAgICAgICBmLmZvbyA9IC0xMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZm9vLCAwKQorICAgICAgICBkZWwgZi5mb28KKworICAgIGRlZiB0ZXN0X2RpY3RfY29uc3RydWN0b3JzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZGljdCBjb25zdHJ1Y3RvciAuLi4KKyAgICAgICAgZCA9IGRpY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHt9KQorICAgICAgICBkID0gZGljdCh7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7fSkKKyAgICAgICAgZCA9IGRpY3QoezE6IDIsICdhJzogJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7MTogMiwgJ2EnOiAnYid9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRpY3QoZC5pdGVtcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkaWN0KGQuaXRlcml0ZW1zKCkpKQorICAgICAgICBkID0gZGljdCh7J29uZSc6MSwgJ3R3byc6Mn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGljdChvbmU9MSwgdHdvPTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRpY3QoKipkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkaWN0KHsib25lIjogMX0sIHR3bz0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkaWN0KFsoInR3byIsIDIpXSwgb25lPTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRpY3QoWygib25lIiwgMTAwKSwgKCJ0d28iLCAyMDApXSwgKipkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkaWN0KCoqZCkpCisKKyAgICAgICAgZm9yIGJhZGFyZyBpbiAwLCAwTCwgMGosICIwIiwgWzBdLCAoMCwpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpY3QoYmFkYXJnKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBiYWRhcmcgPT0gIjAiOgorICAgICAgICAgICAgICAgICAgICAjIEl0J3MgYSBzZXF1ZW5jZSwgYW5kIGl0cyBlbGVtZW50cyBhcmUgYWxzbyBzZXF1ZW5jZXMgKGdvdHRhCisgICAgICAgICAgICAgICAgICAgICMgbG92ZSBzdHJpbmdzIDx3aW5rPiksIGJ1dCB0aGV5IGFyZW4ndCBvZiBsZW5ndGggMiwgc28gdGhpcworICAgICAgICAgICAgICAgICAgICAjIG9uZSBzZWVtZWQgYmV0dGVyIGFzIGEgVmFsdWVFcnJvciB0aGFuIGEgVHlwZUVycm9yLgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBUeXBlRXJyb3IgZnJvbSBkaWN0KCVyKSIgJSBiYWRhcmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gVHlwZUVycm9yIGZyb20gZGljdCglcikiICUgYmFkYXJnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRpY3Qoe30sIHt9KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBUeXBlRXJyb3IgZnJvbSBkaWN0KHt9LCB7fSkiKQorCisgICAgICAgIGNsYXNzIE1hcHBpbmc6CisgICAgICAgICAgICAjIExhY2tzIGEgLmtleXMoKSBtZXRob2Q7IHdpbGwgYmUgYWRkZWQgbGF0ZXIuCisgICAgICAgICAgICBkaWN0ID0gezE6MiwgMzo0LCAnYSc6MWp9CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGljdChNYXBwaW5nKCkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIFR5cGVFcnJvciBmcm9tIGRpY3QoaW5jb21wbGV0ZSBtYXBwaW5nKSIpCisKKyAgICAgICAgTWFwcGluZy5rZXlzID0gbGFtYmRhIHNlbGY6IHNlbGYuZGljdC5rZXlzKCkKKyAgICAgICAgTWFwcGluZy5fX2dldGl0ZW1fXyA9IGxhbWJkYSBzZWxmLCBpOiBzZWxmLmRpY3RbaV0KKyAgICAgICAgZCA9IGRpY3QoTWFwcGluZygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIE1hcHBpbmcuZGljdCkKKworICAgICAgICAjIEluaXQgZnJvbSBzZXF1ZW5jZSBvZiBpdGVyYWJsZSBvYmplY3RzLCBlYWNoIHByb2R1Y2luZyBhIDItc2VxdWVuY2UuCisgICAgICAgIGNsYXNzIEFkZHJlc3NCb29rRW50cnk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlyc3QsIGxhc3QpOgorICAgICAgICAgICAgICAgIHNlbGYuZmlyc3QgPSBmaXJzdAorICAgICAgICAgICAgICAgIHNlbGYubGFzdCA9IGxhc3QKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcihbc2VsZi5maXJzdCwgc2VsZi5sYXN0XSkKKworICAgICAgICBkID0gZGljdChbQWRkcmVzc0Jvb2tFbnRyeSgnVGltJywgJ1dhcnNhdycpLAorICAgICAgICAgICAgICAgICAgQWRkcmVzc0Jvb2tFbnRyeSgnQmFycnknLCAnUGV0ZXJzJyksCisgICAgICAgICAgICAgICAgICBBZGRyZXNzQm9va0VudHJ5KCdUaW0nLCAnUGV0ZXJzJyksCisgICAgICAgICAgICAgICAgICBBZGRyZXNzQm9va0VudHJ5KCdCYXJyeScsICdXYXJzYXcnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydCYXJyeSc6ICdXYXJzYXcnLCAnVGltJzogJ1BldGVycyd9KQorCisgICAgICAgIGQgPSBkaWN0KHppcChyYW5nZSg0KSwgcmFuZ2UoMSwgNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRpY3QoWyhpLCBpKzEpIGZvciBpIGluIHJhbmdlKDQpXSkpCisKKyAgICAgICAgIyBCYWQgc2VxdWVuY2UgbGVuZ3Rocy4KKyAgICAgICAgZm9yIGJhZCBpbiBbKCd0b29zaG9ydCcsKV0sIFsoJ3RvbycsICdsb25nJywgJ2J5IDEnKV06CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGljdChiYWQpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gVmFsdWVFcnJvciBmcm9tIGRpY3QoJXIpIiAlIGJhZCkKKworICAgIGRlZiB0ZXN0X2RpcihzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGRpcigpIC4uLgorICAgICAgICBqdW5rID0gMTIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoKSwgWydqdW5rJywgJ3NlbGYnXSkKKyAgICAgICAgZGVsIGp1bmsKKworICAgICAgICAjIEp1c3QgbWFrZSBzdXJlIHRoZXNlIGRvbid0IGJsb3cgdXAhCisgICAgICAgIGZvciBhcmcgaW4gMiwgMkwsIDJqLCAyZTAsIFsyXSwgIjIiLCB1IjIiLCAoMiwpLCB7MjoyfSwgdHlwZSwgc2VsZi50ZXN0X2RpcjoKKyAgICAgICAgICAgIGRpcihhcmcpCisKKyAgICAgICAgIyBUcnkgY2xhc3NpYyBjbGFzc2VzLgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgQ2RhdGEgPSAxCisgICAgICAgICAgICBkZWYgQ21ldGhvZChzZWxmKTogcGFzcworCisgICAgICAgIGNzdHVmZiA9IFsnQ2RhdGEnLCAnQ21ldGhvZCcsICdfX2RvY19fJywgJ19fbW9kdWxlX18nXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihDKSwgY3N0dWZmKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKEMuQ21ldGhvZCkpCisKKyAgICAgICAgYyA9IEMoKSAgIyBjLl9fZG9jX18gaXMgYW4gb2RkIHRoaW5nIHRvIHNlZSBoZXJlOyBkaXR0byBjLl9fbW9kdWxlX18uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKGMpLCBjc3R1ZmYpCisKKyAgICAgICAgYy5jZGF0YSA9IDIKKyAgICAgICAgYy5jbWV0aG9kID0gbGFtYmRhIHNlbGY6IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoYyksIGNzdHVmZiArIFsnY2RhdGEnLCAnY21ldGhvZCddKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKGMuQ21ldGhvZCkpCisKKyAgICAgICAgY2xhc3MgQShDKToKKyAgICAgICAgICAgIEFkYXRhID0gMQorICAgICAgICAgICAgZGVmIEFtZXRob2Qoc2VsZik6IHBhc3MKKworICAgICAgICBhc3R1ZmYgPSBbJ0FkYXRhJywgJ0FtZXRob2QnXSArIGNzdHVmZgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihBKSwgYXN0dWZmKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKEEuQW1ldGhvZCkpCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoYSksIGFzdHVmZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihhLkFtZXRob2QpKQorICAgICAgICBhLmFkYXRhID0gNDIKKyAgICAgICAgYS5hbWV0aG9kID0gbGFtYmRhIHNlbGY6IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoYSksIGFzdHVmZiArIFsnYWRhdGEnLCAnYW1ldGhvZCddKQorCisgICAgICAgICMgVGhlIHNhbWUsIGJ1dCB3aXRoIG5ldy1zdHlsZSBjbGFzc2VzLiAgU2luY2UgdGhlc2UgaGF2ZSBvYmplY3QgYXMgYQorICAgICAgICAjIGJhc2UgY2xhc3MsIGEgbG90IG1vcmUgZ2V0cyBzdWNrZWQgaW4uCisgICAgICAgIGRlZiBpbnRlcmVzdGluZyhzdHJpbmdzKToKKyAgICAgICAgICAgIHJldHVybiBbcyBmb3IgcyBpbiBzdHJpbmdzIGlmIG5vdCBzLnN0YXJ0c3dpdGgoJ18nKV0KKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBDZGF0YSA9IDEKKyAgICAgICAgICAgIGRlZiBDbWV0aG9kKHNlbGYpOiBwYXNzCisKKyAgICAgICAgY3N0dWZmID0gWydDZGF0YScsICdDbWV0aG9kJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmVzdGluZyhkaXIoQykpLCBjc3R1ZmYpCisKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihjKSksIGNzdHVmZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihDLkNtZXRob2QpKQorCisgICAgICAgIGMuY2RhdGEgPSAyCisgICAgICAgIGMuY21ldGhvZCA9IGxhbWJkYSBzZWxmOiAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJlc3RpbmcoZGlyKGMpKSwgY3N0dWZmICsgWydjZGF0YScsICdjbWV0aG9kJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltX3NlbGYnLCBkaXIoYy5DbWV0aG9kKSkKKworICAgICAgICBjbGFzcyBBKEMpOgorICAgICAgICAgICAgQWRhdGEgPSAxCisgICAgICAgICAgICBkZWYgQW1ldGhvZChzZWxmKTogcGFzcworCisgICAgICAgIGFzdHVmZiA9IFsnQWRhdGEnLCAnQW1ldGhvZCddICsgY3N0dWZmCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJlc3RpbmcoZGlyKEEpKSwgYXN0dWZmKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKEEuQW1ldGhvZCkpCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmVzdGluZyhkaXIoYSkpLCBhc3R1ZmYpCisgICAgICAgIGEuYWRhdGEgPSA0MgorICAgICAgICBhLmFtZXRob2QgPSBsYW1iZGEgc2VsZjogMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihhKSksIGFzdHVmZiArIFsnYWRhdGEnLCAnYW1ldGhvZCddKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKGEuQW1ldGhvZCkpCisKKyAgICAgICAgIyBUcnkgYSBtb2R1bGUgc3ViY2xhc3MuCisgICAgICAgIGNsYXNzIE0odHlwZShzeXMpKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbWluc3RhbmNlID0gTSgibSIpCisgICAgICAgIG1pbnN0YW5jZS5iID0gMgorICAgICAgICBtaW5zdGFuY2UuYSA9IDEKKyAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBkaXIobWluc3RhbmNlKSBpZiB4IG5vdCBpbiBbIl9fbmFtZV9fIiwgIl9fZG9jX18iXV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcywgWydhJywgJ2InXSkKKworICAgICAgICBjbGFzcyBNMihNKToKKyAgICAgICAgICAgIGRlZiBnZXRkaWN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTm90IGEgZGljdCEiCisgICAgICAgICAgICBfX2RpY3RfXyA9IHByb3BlcnR5KGdldGRpY3QpCisKKyAgICAgICAgbTJpbnN0YW5jZSA9IE0yKCJtMiIpCisgICAgICAgIG0yaW5zdGFuY2UuYiA9IDIKKyAgICAgICAgbTJpbnN0YW5jZS5hID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yaW5zdGFuY2UuX19kaWN0X18sICJOb3QgYSBkaWN0ISIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRpcihtMmluc3RhbmNlKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVHdvIGVzc2VudGlhbGx5IGZlYXR1cmVsZXNzIG9iamVjdHMsIGp1c3QgaW5oZXJpdGluZyBzdHVmZiBmcm9tCisgICAgICAgICMgb2JqZWN0LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihOb3RJbXBsZW1lbnRlZCksIGRpcihFbGxpcHNpcykpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgorICAgICAgICAgICAgIyBOb25lIGRpZmZlcnMgaW4gUHlQeTogaXQgaGFzIGEgX19ub256ZXJvX18KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKE5vbmUpLCBkaXIoRWxsaXBzaXMpKQorCisgICAgICAgICMgTmFzdHkgdGVzdCBjYXNlIGZvciBwcm94aWVkIG9iamVjdHMKKyAgICAgICAgY2xhc3MgV3JhcHBlcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaik6CisgICAgICAgICAgICAgICAgc2VsZi5fX29iaiA9IG9iagorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiV3JhcHBlciglcykiICUgcmVwcihzZWxmLl9fb2JqKQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFdyYXBwZXIoc2VsZi5fX29ialtrZXldKQorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9fb2JqKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBXcmFwcGVyKGdldGF0dHIoc2VsZi5fX29iaiwgbmFtZSkpCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0Y2xhc3Moc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFdyYXBwZXIodHlwZShzZWxmKSkKKyAgICAgICAgICAgIF9fY2xhc3NfXyA9IHByb3BlcnR5KF9fZ2V0Y2xhc3MpCisKKyAgICAgICAgZGlyKEMoKSkgIyBUaGlzIHVzZWQgdG8gc2VnZmF1bHQKKworICAgIGRlZiB0ZXN0X3N1cGVycyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHN1cGVyLi4uCisKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZiwgYSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJBKCVyKSIgJSBhCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBKCkubWV0aCgxKSwgIkEoMSkiKQorCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fX3N1cGVyID0gc3VwZXIoQiwgc2VsZikKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYsIGEpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQiglcikiICUgYSArIHNlbGYuX19zdXBlci5tZXRoKGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCKCkubWV0aCgyKSwgIkIoMilBKDIpIikKKworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZiwgYSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDKCVyKSIgJSBhICsgc2VsZi5fX3N1cGVyLm1ldGgoYSkKKyAgICAgICAgQy5fQ19fc3VwZXIgPSBzdXBlcihDKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQygpLm1ldGgoMyksICJDKDMpQSgzKSIpCisKKyAgICAgICAgY2xhc3MgRChDLCBCKToKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYsIGEpOgorICAgICAgICAgICAgICAgIHJldHVybiAiRCglcikiICUgYSArIHN1cGVyKEQsIHNlbGYpLm1ldGgoYSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQoKS5tZXRoKDQpLCAiRCg0KUMoNClCKDQpQSg0KSIpCisKKyAgICAgICAgIyBUZXN0IGZvciBzdWJjbGFzc2luZyBzdXBlcgorCisgICAgICAgIGNsYXNzIG15c3VwZXIoc3VwZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIobXlzdXBlciwgc2VsZikuX19pbml0X18oKmFyZ3MpCisKKyAgICAgICAgY2xhc3MgRShEKToKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYsIGEpOgorICAgICAgICAgICAgICAgIHJldHVybiAiRSglcikiICUgYSArIG15c3VwZXIoRSwgc2VsZikubWV0aChhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRSgpLm1ldGgoNSksICJFKDUpRCg1KUMoNSlCKDUpQSg1KSIpCisKKyAgICAgICAgY2xhc3MgRihFKToKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYsIGEpOgorICAgICAgICAgICAgICAgIHMgPSBzZWxmLl9fc3VwZXIgIyA9PSBteXN1cGVyKEYsIHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuICJGKCVyKVslc10iICUgKGEsIHMuX19jbGFzc19fLl9fbmFtZV9fKSArIHMubWV0aChhKQorICAgICAgICBGLl9GX19zdXBlciA9IG15c3VwZXIoRikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoKS5tZXRoKDYpLCAiRig2KVtteXN1cGVyXUUoNilEKDYpQyg2KUIoNilBKDYpIikKKworICAgICAgICAjIE1ha2Ugc3VyZSBjZXJ0YWluIGVycm9ycyBhcmUgcmFpc2VkCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VwZXIoRCwgNDIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBhbGxvdyBzdXBlcihELCA0MikiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKEQsIEMoKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGFsbG93IHN1cGVyKEQsIEMoKSkiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKEQpLl9fZ2V0X18oMTIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBhbGxvdyBzdXBlcihEKS5fX2dldF9fKDEyKSIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VwZXIoRCkuX19nZXRfXyhDKCkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBhbGxvdyBzdXBlcihEKS5fX2dldF9fKEMoKSkiKQorCisgICAgICAgICMgTWFrZSBzdXJlIGRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlIG92ZXJyaWRkZW4gYW5kIGFjY2Vzc2VkIHZpYSBzdXBlcgorICAgICAgICAjIChuZXcgZmVhdHVyZSBpbiBQeXRob24gMi4zKQorCisgICAgICAgIGNsYXNzIEREYmFzZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldHgoc2VsZik6IHJldHVybiA0MgorICAgICAgICAgICAgeCA9IHByb3BlcnR5KGdldHgpCisKKyAgICAgICAgY2xhc3MgRERzdWIoRERiYXNlKToKKyAgICAgICAgICAgIGRlZiBnZXR4KHNlbGYpOiByZXR1cm4gImhlbGxvIgorICAgICAgICAgICAgeCA9IHByb3BlcnR5KGdldHgpCisKKyAgICAgICAgZGQgPSBERHN1YigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGQueCwgImhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdXBlcihERHN1YiwgZGQpLngsIDQyKQorCisgICAgICAgICMgRW5zdXJlIHRoYXQgc3VwZXIoKSBsb29rdXAgb2YgZGVzY3JpcHRvciBmcm9tIGNsYXNzbWV0aG9kCisgICAgICAgICMgd29ya3MgKFNGIElEIyA3NDM2MjcpCisKKyAgICAgICAgY2xhc3MgQmFzZShvYmplY3QpOgorICAgICAgICAgICAgYVByb3AgPSBwcm9wZXJ0eShsYW1iZGEgc2VsZjogImZvbyIpCisKKyAgICAgICAgY2xhc3MgU3ViKEJhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVzdChrbGFzcyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFN1YixrbGFzcykuYVByb3AKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFN1Yi50ZXN0KCksIEJhc2UuYVByb3ApCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBzdXBlcigpIGRvZXNuJ3QgYWxsb3cga2V5d29yZCBhcmdzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKEJhc2UsIGt3PTEpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJzdXBlciBzaG91bGRuJ3QgYWNjZXB0IGtleXdvcmQgYXJncyIpCisKKyAgICBkZWYgdGVzdF9iYXNpY19pbmhlcml0YW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGluaGVyaXRhbmNlIGZyb20gYmFzaWMgdHlwZXMuLi4KKworICAgICAgICBjbGFzcyBoZXhpbnQoaW50KToKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaGV4KHNlbGYpCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhleGludChpbnQuX19hZGRfXyhzZWxmLCBvdGhlcikpCisgICAgICAgICAgICAjIChOb3RlIHRoYXQgb3ZlcnJpZGluZyBfX3JhZGRfXyBkb2Vzbid0IHdvcmssCisgICAgICAgICAgICAjIGJlY2F1c2UgdGhlIGludCB0eXBlIGdldHMgZmlyc3QgZGlicy4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoZXhpbnQoNykgKyA5KSwgIjB4MTAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaGV4aW50KDEwMDApICsgNyksICIweDNlZiIpCisgICAgICAgIGEgPSBoZXhpbnQoMTIzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgMTIzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGEpLCAxMjM0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChhKS5fX2NsYXNzX18gaXMgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goMTIzNDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKCthKS5fX2NsYXNzX18gaXMgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPj4gMCkuX19jbGFzc19fIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDw8IDApLl9fY2xhc3NfXyBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoaGV4aW50KDApIDw8IDEyKS5fX2NsYXNzX18gaXMgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGhleGludCgwKSA+PiAxMikuX19jbGFzc19fIGlzIGludCkKKworICAgICAgICBjbGFzcyBvY3Rsb25nKGxvbmcpOgorICAgICAgICAgICAgX19zbG90c19fID0gW10KKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHMgPSBvY3Qoc2VsZikKKyAgICAgICAgICAgICAgICBpZiBzWy0xXSA9PSAnTCc6CisgICAgICAgICAgICAgICAgICAgIHMgPSBzWzotMV0KKyAgICAgICAgICAgICAgICByZXR1cm4gcworICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzdXBlcihvY3Rsb25nLCBzZWxmKS5fX2FkZF9fKG90aGVyKSkKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihvY3Rsb25nKDMpICsgNSksICIwMTAiKQorICAgICAgICAjIChOb3RlIHRoYXQgb3ZlcnJpZGluZyBfX3JhZGRfXyBoZXJlIG9ubHkgc2VlbXMgdG8gd29yaworICAgICAgICAjIGJlY2F1c2UgdGhlIGV4YW1wbGUgdXNlcyBhIHNob3J0IGludCBsZWZ0IGFyZ3VtZW50LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoNSArIG9jdGxvbmcoMzAwMCkpLCAiMDU2NzUiKQorICAgICAgICBhID0gb2N0bG9uZygxMjM0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCAxMjM0NUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhhKSwgMTIzNDVMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goMTIzNDVMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvbmcoYSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoK2EpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKC1hKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgtb2N0bG9uZygwKSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+PiAwKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDw8IDApLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgLSAwKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICogMSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqKiAxKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIC8vIDEpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKDEgKiBhKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIHwgMCkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSBeIDApLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgJiAtMUwpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKG9jdGxvbmcoMCkgPDwgMTIpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKG9jdGxvbmcoMCkgPj4gMTIpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKG9jdGxvbmcoMCkpLl9fY2xhc3NfXyBpcyBsb25nKQorCisgICAgICAgICMgQmVjYXVzZSBvY3Rsb25nIG92ZXJyaWRlcyBfX2FkZF9fLCB3ZSBjYW4ndCBjaGVjayB0aGUgYWJzZW5jZSBvZiArMAorICAgICAgICAjIG9wdGltaXphdGlvbnMgdXNpbmcgb2N0bG9uZy4KKyAgICAgICAgY2xhc3MgbG9uZ2Nsb25lKGxvbmcpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gbG9uZ2Nsb25lKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSArIDApLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKDAgKyBhKS5fX2NsYXNzX18gaXMgbG9uZykKKworICAgICAgICAjIENoZWNrIHRoYXQgbmVnYXRpdmUgY2xvbmVzIGRvbid0IHNlZ2ZhdWx0CisgICAgICAgIGEgPSBsb25nY2xvbmUoLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2RpY3RfXywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhhKSwgLTEpICAjIHNlbGYuYXNzZXJ0VHJ1ZSBQeU51bWJlcl9Mb25nKCkgY29waWVzIHRoZSBzaWduIGJpdAorCisgICAgICAgIGNsYXNzIHByZWNmbG9hdChmbG9hdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ3ByZWMnXQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTAuMCwgcHJlYz0xMik6CisgICAgICAgICAgICAgICAgc2VsZi5wcmVjID0gaW50KHByZWMpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlLipnIiAlIChzZWxmLnByZWMsIHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihwcmVjZmxvYXQoMS4xKSksICIxLjEiKQorICAgICAgICBhID0gcHJlY2Zsb2F0KDEyMzQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIDEyMzQ1LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoYSksIDEyMzQ1LjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbG9hdChhKS5fX2NsYXNzX18gaXMgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaCgxMjM0NS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgrYSkuX19jbGFzc19fIGlzIGZsb2F0KQorCisgICAgICAgIGNsYXNzIG1hZGNvbXBsZXgoY29tcGxleCk6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlLjE3Z2olKy4xN2ciICUgKHNlbGYuaW1hZywgc2VsZi5yZWFsKQorICAgICAgICBhID0gbWFkY29tcGxleCgtMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEpLCAiNGotMyIpCisgICAgICAgIGJhc2UgPSBjb21wbGV4KC0zLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLCBjb21wbGV4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleChhKSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KGEpLl9fY2xhc3NfXywgY29tcGxleCkKKyAgICAgICAgYSA9IG1hZGNvbXBsZXgoYSkgICMganVzdCB0cnlpbmcgYW5vdGhlciBmb3JtIG9mIHRoZSBjb25zdHJ1Y3RvcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYSksICI0ai0zIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgoYSksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleChhKS5fX2NsYXNzX18sIGNvbXBsZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaChiYXNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoK2EpLl9fY2xhc3NfXywgY29tcGxleCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSArIDApLl9fY2xhc3NfXywgY29tcGxleCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgMCwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSAtIDApLl9fY2xhc3NfXywgY29tcGxleCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gMCwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSAqIDEpLl9fY2xhc3NfXywgY29tcGxleCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICogMSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSAvIDEpLl9fY2xhc3NfXywgY29tcGxleCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC8gMSwgYmFzZSkKKworICAgICAgICBjbGFzcyBtYWR0dXBsZSh0dXBsZSk6CisgICAgICAgICAgICBfcmV2ID0gTm9uZQorICAgICAgICAgICAgZGVmIHJldihzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9yZXYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZXYKKyAgICAgICAgICAgICAgICBMID0gbGlzdChzZWxmKQorICAgICAgICAgICAgICAgIEwucmV2ZXJzZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fcmV2ID0gc2VsZi5fX2NsYXNzX18oTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV2CisgICAgICAgIGEgPSBtYWR0dXBsZSgoMSwyLDMsNCw1LDYsNyw4LDksMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgKDEsMiwzLDQsNSw2LDcsOCw5LDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucmV2KCksIG1hZHR1cGxlKCgwLDksOCw3LDYsNSw0LDMsMiwxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5yZXYoKS5yZXYoKSwgbWFkdHVwbGUoKDEsMiwzLDQsNSw2LDcsOCw5LDApKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNTEyKToKKyAgICAgICAgICAgIHQgPSBtYWR0dXBsZShyYW5nZShpKSkKKyAgICAgICAgICAgIHUgPSB0LnJldigpCisgICAgICAgICAgICB2ID0gdS5yZXYoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCB0KQorICAgICAgICBhID0gbWFkdHVwbGUoKDEsMiwzLDQsNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoYSksICgxLDIsMyw0LDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHVwbGUoYSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goKDEsMiwzLDQsNSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYVs6XS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqIDEpLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICogMCkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKyAoKSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBhID0gbWFkdHVwbGUoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoYSksICgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHVwbGUoYSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKyBhKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqIDApLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICogMSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKiAyKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhWzpdLl9fY2xhc3NfXyBpcyB0dXBsZSkKKworICAgICAgICBjbGFzcyBtYWRzdHJpbmcoc3RyKToKKyAgICAgICAgICAgIF9yZXYgPSBOb25lCisgICAgICAgICAgICBkZWYgcmV2KHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3JldiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JldgorICAgICAgICAgICAgICAgIEwgPSBsaXN0KHNlbGYpCisgICAgICAgICAgICAgICAgTC5yZXZlcnNlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXYgPSBzZWxmLl9fY2xhc3NfXygiIi5qb2luKEwpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZXYKKyAgICAgICAgcyA9IG1hZHN0cmluZygiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZXYoKSwgbWFkc3RyaW5nKCJ6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmV2KCkucmV2KCksIG1hZHN0cmluZygiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgIHMgPSBtYWRzdHJpbmcoIiIuam9pbihtYXAoY2hyLCByYW5nZShpKSkpKQorICAgICAgICAgICAgdCA9IHMucmV2KCkKKyAgICAgICAgICAgIHUgPSB0LnJldigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIHMpCisgICAgICAgIHMgPSBtYWRzdHJpbmcoIjEyMzQ1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocyksICIxMjM0NSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIocykuX19jbGFzc19fIGlzIHN0cikKKworICAgICAgICBiYXNlID0gIlx4MDAiICogNQorICAgICAgICBzID0gbWFkc3RyaW5nKGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocyksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIocykuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHMpLCBoYXNoKGJhc2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtzOiAxfVtiYXNlXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YmFzZTogMX1bc10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocyArICIiKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAiIiwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgiIiArIHMpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIgKyBzLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHMgKiAwKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKiAwLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzICogMSkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICogMSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzICogMikuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICogMiwgYmFzZSArIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzWzpdLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1s6XSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNbMDowXS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbMDowXSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0cmlwKCkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmxzdHJpcCgpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5sc3RyaXAoKSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMucnN0cmlwKCkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJzdHJpcCgpLCBiYXNlKQorICAgICAgICBpZGVudGl0eXRhYiA9ICcnLmpvaW4oW2NocihpKSBmb3IgaSBpbiByYW5nZSgyNTYpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiKSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiLCAieCIpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy50cmFuc2xhdGUoaWRlbnRpdHl0YWIsICJ4IiksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy50cmFuc2xhdGUoaWRlbnRpdHl0YWIsICJceDAwIiksICIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5yZXBsYWNlKCJ4IiwgIngiKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmVwbGFjZSgieCIsICJ4IiksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmxqdXN0KGxlbihzKSkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmxqdXN0KGxlbihzKSksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnJqdXN0KGxlbihzKSkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJqdXN0KGxlbihzKSksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmNlbnRlcihsZW4ocykpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jZW50ZXIobGVuKHMpKSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMubG93ZXIoKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMubG93ZXIoKSwgYmFzZSkKKworICAgICAgICBjbGFzcyBtYWR1bmljb2RlKHVuaWNvZGUpOgorICAgICAgICAgICAgX3JldiA9IE5vbmUKKyAgICAgICAgICAgIGRlZiByZXYoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fcmV2IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV2CisgICAgICAgICAgICAgICAgTCA9IGxpc3Qoc2VsZikKKyAgICAgICAgICAgICAgICBMLnJldmVyc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX3JldiA9IHNlbGYuX19jbGFzc19fKHUiIi5qb2luKEwpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZXYKKyAgICAgICAgdSA9IG1hZHVuaWNvZGUoIkFCQ0RFRiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgdSJBQkNERUYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUucmV2KCksIG1hZHVuaWNvZGUodSJGRURDQkEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnJldigpLnJldigpLCBtYWR1bmljb2RlKHUiQUJDREVGIikpCisgICAgICAgIGJhc2UgPSB1IjEyMzQ1IgorICAgICAgICB1ID0gbWFkdW5pY29kZShiYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUodSksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmljb2RlKHUpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godSksIGhhc2goYmFzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe3U6IDF9W2Jhc2VdLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtiYXNlOiAxfVt1XSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuc3RyaXAoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnN0cmlwKCksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmxzdHJpcCgpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUubHN0cmlwKCksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnJzdHJpcCgpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUucnN0cmlwKCksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnJlcGxhY2UodSJ4IiwgdSJ4IikuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5yZXBsYWNlKHUieCIsIHUieCIpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5yZXBsYWNlKHUieHkiLCB1Inh5IikuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5yZXBsYWNlKHUieHkiLCB1Inh5IiksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmNlbnRlcihsZW4odSkpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuY2VudGVyKGxlbih1KSksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmxqdXN0KGxlbih1KSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5sanVzdChsZW4odSkpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5yanVzdChsZW4odSkpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUucmp1c3QobGVuKHUpKSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUubG93ZXIoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Lmxvd2VyKCksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnVwcGVyKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS51cHBlcigpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5jYXBpdGFsaXplKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5jYXBpdGFsaXplKCksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnRpdGxlKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS50aXRsZSgpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHUgKyB1IiIpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUgKyB1IiIsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgodSIiICsgdSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIiICsgdSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCh1ICogMCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSAqIDAsIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCh1ICogMSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSAqIDEsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgodSAqIDIpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUgKiAyLCBiYXNlICsgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVbOl0uX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVs6XSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVbMDowXS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzA6MF0sIHUiIikKKworICAgICAgICBjbGFzcyBzdWJsaXN0KGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gc3VibGlzdChyYW5nZSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCByYW5nZSg1KSkKKyAgICAgICAgYS5hcHBlbmQoImhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCByYW5nZSg1KSArIFsiaGVsbG8iXSkKKyAgICAgICAgYVs1XSA9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCByYW5nZSg2KSkKKyAgICAgICAgYS5leHRlbmQocmFuZ2UoNiwgMjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHJhbmdlKDIwKSkKKyAgICAgICAgYVstNTpdID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCByYW5nZSgxNSkpCisgICAgICAgIGRlbCBhWzEwOjE1XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgcmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYSksIHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzBdLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOV0sIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMTBdLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTFdLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjVdLCByYW5nZSg1KSkKKworICAgICAgICBjbGFzcyBDb3VudGVkSW5wdXQoZmlsZSk6CisgICAgICAgICAgICAiIiJDb3VudHMgbGluZXMgcmVhZCBieSBzZWxmLnJlYWRsaW5lKCkuCisKKyAgICAgICAgICAgIHNlbGYubGluZW5vIGlzIHRoZSAwLWJhc2VkIG9yZGluYWwgb2YgdGhlIGxhc3QgbGluZSByZWFkLCB1cCB0bworICAgICAgICAgICAgYSBtYXhpbXVtIG9mIG9uZSBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZmlsZS4KKworICAgICAgICAgICAgc2VsZi5hdGVvZiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBmaW5hbCAiIiBsaW5lIGhhcyBiZWVuIHJlYWQsCisgICAgICAgICAgICBhdCB3aGljaCBwb2ludCBzZWxmLmxpbmVubyBzdG9wcyBpbmNyZW1lbnRpbmcsIGFuZCBmdXJ0aGVyIGNhbGxzCisgICAgICAgICAgICB0byByZWFkbGluZSgpIGNvbnRpbnVlIHRvIHJldHVybiAiIi4KKyAgICAgICAgICAgICIiIgorCisgICAgICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgICAgICBhdGVvZiA9IDAKKyAgICAgICAgICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmF0ZW9mOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgICAgICAgICBzID0gZmlsZS5yZWFkbGluZShzZWxmKQorICAgICAgICAgICAgICAgICMgTmV4dCBsaW5lIHdvcmtzIHRvby4KKyAgICAgICAgICAgICAgICAjIHMgPSBzdXBlcihDb3VudGVkSW5wdXQsIHNlbGYpLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxpbmVubyArPSAxCisgICAgICAgICAgICAgICAgaWYgcyA9PSAiIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hdGVvZiA9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gcworCisgICAgICAgIGYgPSBmaWxlKG5hbWU9dGVzdF9zdXBwb3J0LlRFU1RGTiwgbW9kZT0ndycpCisgICAgICAgIGxpbmVzID0gWydhXG4nLCAnYlxuJywgJ2NcbiddCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGVsaW5lcyhsaW5lcykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZiA9IENvdW50ZWRJbnB1dCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgZm9yIChpLCBleHBlY3RlZCkgaW4gemlwKHJhbmdlKDEsIDUpICsgWzRdLCBsaW5lcyArIDIgKiBbIiJdKToKKyAgICAgICAgICAgICAgICBnb3QgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmxpbmVubywgaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYXRlb2YsIChpID4gbGVuKGxpbmVzKSkpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9rZXl3b3JkcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGtleXdvcmQgYXJncyB0byBiYXNpYyB0eXBlIGNvbnN0cnVjdG9ycyAuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoeD0xKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh4PTIpLCAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyh4PTMpLCAzTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KGltYWc9NDIsIHJlYWw9NjY2KSwgY29tcGxleCg2NjYsIDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIob2JqZWN0PTUwMCksICc1MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoc3RyaW5nPSdhYmMnLCBlcnJvcnM9J3N0cmljdCcpLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoc2VxdWVuY2U9cmFuZ2UoMykpLCAoMCwgMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZXF1ZW5jZT0oMCwgMSwgMikpLCByYW5nZSgzKSkKKyAgICAgICAgIyBub3RlOiBhcyBvZiBQeXRob24gMi4zLCBkaWN0KCkgbm8gbG9uZ2VyIGhhcyBhbiAiaXRlbXMiIGtleXdvcmQgYXJnCisKKyAgICAgICAgZm9yIGNvbnN0cnVjdG9yIGluIChpbnQsIGZsb2F0LCBsb25nLCBjb21wbGV4LCBzdHIsIHVuaWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGUsIGxpc3QsIGZpbGUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKGJvZ3VzX2tleXdvcmRfYXJnPTEpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBUeXBlRXJyb3IgZnJvbSBib2d1cyBrZXl3b3JkIGFyZ3VtZW50IHRvICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgY29uc3RydWN0b3IpCisKKyAgICBkZWYgdGVzdF9zdHJfc3ViY2xhc3NfYXNfZGljdF9rZXkoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBhIHN0ciBzdWJjbGFzcyB1c2VkIGFzIGRpY3Qga2V5IC4uCisKKyAgICAgICAgY2xhc3MgY2lzdHIoc3RyKToKKyAgICAgICAgICAgICIiIlN1YmxjYXNzIG9mIHN0ciB0aGF0IGNvbXB1dGVzIF9fZXFfXyBjYXNlLWluc2Vuc2l0aXZlbHkuCisKKyAgICAgICAgICAgIEFsc28gY29tcHV0ZXMgYSBoYXNoIGNvZGUgb2YgdGhlIHN0cmluZyBpbiBjYW5vbmljYWwgZm9ybS4KKyAgICAgICAgICAgICIiIgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuY2Fub25pY2FsID0gdmFsdWUubG93ZXIoKQorICAgICAgICAgICAgICAgIHNlbGYuaGFzaGNvZGUgPSBoYXNoKHNlbGYuY2Fub25pY2FsKQorCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgY2lzdHIpOgorICAgICAgICAgICAgICAgICAgICBvdGhlciA9IGNpc3RyKG90aGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNhbm9uaWNhbCA9PSBvdGhlci5jYW5vbmljYWwKKworICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhc2hjb2RlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaXN0cignQUJDJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhQmMnLCBjaXN0cignQUJDJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNpc3RyKCdBQkMnKSksICdBQkMnKQorCisgICAgICAgIGQgPSB7Y2lzdHIoJ29uZScpOiAxLCBjaXN0cigndHdvJyk6IDIsIGNpc3RyKCd0SHJlZScpOiAzfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbY2lzdHIoJ29uZScpXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2Npc3RyKCd0V28nKV0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtjaXN0cignVEhyRUUnKV0sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oY2lzdHIoJ09OZScpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KGNpc3RyKCd0aHJFRScpKSwgMykKKworICAgIGRlZiB0ZXN0X2NsYXNzaWNfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBjbGFzc2ljIGNvbXBhcmlzb25zLi4uCisgICAgICAgIGNsYXNzIGNsYXNzaWM6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZm9yIGJhc2UgaW4gKGNsYXNzaWMsIGludCwgb2JqZWN0KToKKyAgICAgICAgICAgIGNsYXNzIEMoYmFzZSk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGludCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLnZhbHVlLCBvdGhlci52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KSBvciBpc2luc3RhbmNlKG90aGVyLCBsb25nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi52YWx1ZSwgb3RoZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisKKyAgICAgICAgICAgIGMxID0gQygxKQorICAgICAgICAgICAgYzIgPSBDKDIpCisgICAgICAgICAgICBjMyA9IEMoMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYzEsIDEpCisgICAgICAgICAgICBjID0gezE6IGMxLCAyOiBjMiwgMzogYzN9CisgICAgICAgICAgICBmb3IgeCBpbiAxLCAyLCAzOgorICAgICAgICAgICAgICAgIGZvciB5IGluIDEsIDIsIDM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbXAoY1t4XSwgY1t5XSkgPT0gY21wKHgsIHkpLCAieD0lZCwgeT0lZCIgJSAoeCwgeSkpCisgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiAiPCIsICI8PSIsICI9PSIsICIhPSIsICI+IiwgIj49IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCJjW3hdICVzIGNbeV0iICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIng9JWQsIHk9JWQiICUgKHgsIHkpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY21wKGNbeF0sIHkpID09IGNtcCh4LCB5KSwgIng9JWQsIHk9JWQiICUgKHgsIHkpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY21wKHgsIGNbeV0pID09IGNtcCh4LCB5KSwgIng9JWQsIHk9JWQiICUgKHgsIHkpKQorCisgICAgZGVmIHRlc3RfcmljaF9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHJpY2ggY29tcGFyaXNvbnMuLi4KKyAgICAgICAgY2xhc3MgWihjb21wbGV4KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgeiA9IFooMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6LCAxKzBqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDErMGosIHopCisgICAgICAgIGNsYXNzIFpaKGNvbXBsZXgpOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWJzKHNlbGYgLSBvdGhlcikgPD0gMWUtNgorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICB6eiA9IFpaKDEuMDAwMDAwMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6eiwgMSswaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxKzBqLCB6eikKKworICAgICAgICBjbGFzcyBjbGFzc2ljOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgYmFzZSBpbiAoY2xhc3NpYywgaW50LCBvYmplY3QsIGxpc3QpOgorICAgICAgICAgICAgY2xhc3MgQyhiYXNlKToKKyAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gaW50KHZhbHVlKQorICAgICAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGZfLCBvdGhlcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGNhbGwgX19jbXBfXyIpCisgICAgICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBpbnQpIG9yIGlzaW5zdGFuY2Uob3RoZXIsIGxvbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgIT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KSBvciBpc2luc3RhbmNlKG90aGVyLCBsb25nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlICE9IG90aGVyCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDwgb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KSBvciBpc2luc3RhbmNlKG90aGVyLCBsb25nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDwgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KSBvciBpc2luc3RhbmNlKG90aGVyLCBsb25nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDw9IG90aGVyCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID4gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KSBvciBpc2luc3RhbmNlKG90aGVyLCBsb25nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID4gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPj0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KSBvciBpc2luc3RhbmNlKG90aGVyLCBsb25nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgYzEgPSBDKDEpCisgICAgICAgICAgICBjMiA9IEMoMikKKyAgICAgICAgICAgIGMzID0gQygzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjMSwgMSkKKyAgICAgICAgICAgIGMgPSB7MTogYzEsIDI6IGMyLCAzOiBjM30KKyAgICAgICAgICAgIGZvciB4IGluIDEsIDIsIDM6CisgICAgICAgICAgICAgICAgZm9yIHkgaW4gMSwgMiwgMzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIG9wIGluICI8IiwgIjw9IiwgIj09IiwgIiE9IiwgIj4iLCAiPj0iOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2YWwoImNbeF0gJXMgY1t5XSIgJSBvcCkgPT0gZXZhbCgieCAlcyB5IiAlIG9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieD0lZCwgeT0lZCIgJSAoeCwgeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgiY1t4XSAlcyB5IiAlIG9wKSA9PSBldmFsKCJ4ICVzIHkiICUgb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCJ4ICVzIGNbeV0iICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIng9JWQsIHk9JWQiICUgKHgsIHkpKQorCisgICAgZGVmIHRlc3RfY29lcmNpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgY29lcmNpb25zLi4uCisgICAgICAgIGNsYXNzIEkoaW50KTogcGFzcworICAgICAgICBjb2VyY2UoSSgwKSwgMCkKKyAgICAgICAgY29lcmNlKDAsIEkoMCkpCisgICAgICAgIGNsYXNzIEwobG9uZyk6IHBhc3MKKyAgICAgICAgY29lcmNlKEwoMCksIDApCisgICAgICAgIGNvZXJjZShMKDApLCAwTCkKKyAgICAgICAgY29lcmNlKDAsIEwoMCkpCisgICAgICAgIGNvZXJjZSgwTCwgTCgwKSkKKyAgICAgICAgY2xhc3MgRihmbG9hdCk6IHBhc3MKKyAgICAgICAgY29lcmNlKEYoMCksIDApCisgICAgICAgIGNvZXJjZShGKDApLCAwTCkKKyAgICAgICAgY29lcmNlKEYoMCksIDAuKQorICAgICAgICBjb2VyY2UoMCwgRigwKSkKKyAgICAgICAgY29lcmNlKDBMLCBGKDApKQorICAgICAgICBjb2VyY2UoMC4sIEYoMCkpCisgICAgICAgIGNsYXNzIEMoY29tcGxleCk6IHBhc3MKKyAgICAgICAgY29lcmNlKEMoMCksIDApCisgICAgICAgIGNvZXJjZShDKDApLCAwTCkKKyAgICAgICAgY29lcmNlKEMoMCksIDAuKQorICAgICAgICBjb2VyY2UoQygwKSwgMGopCisgICAgICAgIGNvZXJjZSgwLCBDKDApKQorICAgICAgICBjb2VyY2UoMEwsIEMoMCkpCisgICAgICAgIGNvZXJjZSgwLiwgQygwKSkKKyAgICAgICAgY29lcmNlKDBqLCBDKDApKQorCisgICAgZGVmIHRlc3RfZGVzY3Jkb2Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkZXNjcmlwdG9yIGRvYyBzdHJpbmdzLi4uCisgICAgICAgIGRlZiBjaGVjayhkZXNjciwgd2hhdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2NyLl9fZG9jX18sIHdoYXQpCisgICAgICAgIGNoZWNrKGZpbGUuY2xvc2VkLCAiVHJ1ZSBpZiB0aGUgZmlsZSBpcyBjbG9zZWQiKSAjIGdldHNldCBkZXNjcmlwdG9yCisgICAgICAgIGNoZWNrKGZpbGUubmFtZSwgImZpbGUgbmFtZSIpICMgbWVtYmVyIGRlc2NyaXB0b3IKKworICAgIGRlZiB0ZXN0X2RvY19kZXNjcmlwdG9yKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgX19kb2NfXyBkZXNjcmlwdG9yLi4uCisgICAgICAgICMgU0YgYnVnIDU0Mjk4NAorICAgICAgICBjbGFzcyBEb2NEZXNjcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqZWN0LCBvdHlwZSk6CisgICAgICAgICAgICAgICAgaWYgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBvYmplY3QuX19jbGFzc19fLl9fbmFtZV9fICsgJyBpbnN0YW5jZScKKyAgICAgICAgICAgICAgICBpZiBvdHlwZToKKyAgICAgICAgICAgICAgICAgICAgb3R5cGUgPSBvdHlwZS5fX25hbWVfXworICAgICAgICAgICAgICAgIHJldHVybiAnb2JqZWN0PSVzOyB0eXBlPSVzJyAlIChvYmplY3QsIG90eXBlKQorICAgICAgICBjbGFzcyBPbGRDbGFzczoKKyAgICAgICAgICAgIF9fZG9jX18gPSBEb2NEZXNjcigpCisgICAgICAgIGNsYXNzIE5ld0NsYXNzKG9iamVjdCk6CisgICAgICAgICAgICBfX2RvY19fID0gRG9jRGVzY3IoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE9sZENsYXNzLl9fZG9jX18sICdvYmplY3Q9Tm9uZTsgdHlwZT1PbGRDbGFzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT2xkQ2xhc3MoKS5fX2RvY19fLCAnb2JqZWN0PU9sZENsYXNzIGluc3RhbmNlOyB0eXBlPU9sZENsYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOZXdDbGFzcy5fX2RvY19fLCAnb2JqZWN0PU5vbmU7IHR5cGU9TmV3Q2xhc3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5ld0NsYXNzKCkuX19kb2NfXywgJ29iamVjdD1OZXdDbGFzcyBpbnN0YW5jZTsgdHlwZT1OZXdDbGFzcycpCisKKyAgICBkZWYgdGVzdF9zZXRfY2xhc3Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBfX2NsYXNzX18gYXNzaWdubWVudC4uLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgRChvYmplY3QpOiBwYXNzCisgICAgICAgIGNsYXNzIEUob2JqZWN0KTogcGFzcworICAgICAgICBjbGFzcyBGKEQsIEUpOiBwYXNzCisgICAgICAgIGZvciBjbHMgaW4gQywgRCwgRSwgRjoKKyAgICAgICAgICAgIGZvciBjbHMyIGluIEMsIEQsIEUsIEY6CisgICAgICAgICAgICAgICAgeCA9IGNscygpCisgICAgICAgICAgICAgICAgeC5fX2NsYXNzX18gPSBjbHMyCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguX19jbGFzc19fIGlzIGNsczIpCisgICAgICAgICAgICAgICAgeC5fX2NsYXNzX18gPSBjbHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5fX2NsYXNzX18gaXMgY2xzKQorICAgICAgICBkZWYgY2FudCh4LCBDKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4Ll9fY2xhc3NfXyA9IEMKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBhbGxvdyAlci5fX2NsYXNzX18gPSAlciIgJSAoeCwgQykpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsYXR0cih4LCAiX19jbGFzc19fIikKKyAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBhbGxvdyBkZWwgJXIuX19jbGFzc19fIiAlIHgpCisgICAgICAgIGNhbnQoQygpLCBsaXN0KQorICAgICAgICBjYW50KGxpc3QoKSwgQykKKyAgICAgICAgY2FudChDKCksIDEpCisgICAgICAgIGNhbnQoQygpLCBvYmplY3QpCisgICAgICAgIGNhbnQob2JqZWN0KCksIGxpc3QpCisgICAgICAgIGNhbnQobGlzdCgpLCBvYmplY3QpCisgICAgICAgIGNsYXNzIEludChpbnQpOiBfX3Nsb3RzX18gPSBbXQorICAgICAgICBjYW50KDIsIEludCkKKyAgICAgICAgY2FudChJbnQoKSwgaW50KQorICAgICAgICBjYW50KFRydWUsIGludCkKKyAgICAgICAgY2FudCgyLCBib29sKQorICAgICAgICBvID0gb2JqZWN0KCkKKyAgICAgICAgY2FudChvLCB0eXBlKDEpKQorICAgICAgICBjYW50KG8sIHR5cGUoTm9uZSkpCisgICAgICAgIGRlbCBvCisgICAgICAgIGNsYXNzIEcob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiYSIsICJiIl0KKyAgICAgICAgY2xhc3MgSChvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJiIiwgImEiXQorICAgICAgICB0cnk6CisgICAgICAgICAgICB1bmljb2RlCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBjbGFzcyBJKG9iamVjdCk6CisgICAgICAgICAgICAgICAgX19zbG90c19fID0gWyJhIiwgImIiXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xhc3MgSShvYmplY3QpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFt1bmljb2RlKCJhIiksIHVuaWNvZGUoImIiKV0KKyAgICAgICAgY2xhc3MgSihvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJjIiwgImIiXQorICAgICAgICBjbGFzcyBLKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbImEiLCAiYiIsICJkIl0KKyAgICAgICAgY2xhc3MgTChIKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiZSJdCisgICAgICAgIGNsYXNzIE0oSSk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbImUiXQorICAgICAgICBjbGFzcyBOKEopOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJfX3dlYWtyZWZfXyJdCisgICAgICAgIGNsYXNzIFAoSik6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbIl9fZGljdF9fIl0KKyAgICAgICAgY2xhc3MgUShKKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgUihKKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiX19kaWN0X18iLCAiX193ZWFrcmVmX18iXQorCisgICAgICAgIGZvciBjbHMsIGNsczIgaW4gKChHLCBIKSwgKEcsIEkpLCAoSSwgSCksIChRLCBSKSwgKFIsIFEpKToKKyAgICAgICAgICAgIHggPSBjbHMoKQorICAgICAgICAgICAgeC5hID0gMQorICAgICAgICAgICAgeC5fX2NsYXNzX18gPSBjbHMyCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5fX2NsYXNzX18gaXMgY2xzMiwKKyAgICAgICAgICAgICAgICAgICAiYXNzaWduaW5nICVyIGFzIF9fY2xhc3NfXyBmb3IgJXIgc2lsZW50bHkgZmFpbGVkIiAlIChjbHMyLCB4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAxKQorICAgICAgICAgICAgeC5fX2NsYXNzX18gPSBjbHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4Ll9fY2xhc3NfXyBpcyBjbHMsCisgICAgICAgICAgICAgICAgICAgImFzc2lnbmluZyAlciBhcyBfX2NsYXNzX18gZm9yICVyIHNpbGVudGx5IGZhaWxlZCIgJSAoY2xzLCB4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAxKQorICAgICAgICBmb3IgY2xzIGluIEcsIEosIEssIEwsIE0sIE4sIFAsIFIsIGxpc3QsIEludDoKKyAgICAgICAgICAgIGZvciBjbHMyIGluIEcsIEosIEssIEwsIE0sIE4sIFAsIFIsIGxpc3QsIEludDoKKyAgICAgICAgICAgICAgICBpZiBjbHMgaXMgY2xzMjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBjYW50KGNscygpLCBjbHMyKQorCisgICAgICAgICMgSXNzdWU1MjgzOiB3aGVuIF9fY2xhc3NfXyBjaGFuZ2VzIGluIF9fZGVsX18sIHRoZSB3cm9uZworICAgICAgICAjIHR5cGUgZ2V0cyBERUNSRUYnZC4KKyAgICAgICAgY2xhc3MgTyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IE8KKyAgICAgICAgbCA9IFtBKCkgZm9yIHggaW4gcmFuZ2UoMTAwKV0KKyAgICAgICAgZGVsIGwKKworICAgIGRlZiB0ZXN0X3NldF9kaWN0KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgX19kaWN0X18gYXNzaWdubWVudC4uLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6IHBhc3MKKyAgICAgICAgYSA9IEMoKQorICAgICAgICBhLl9fZGljdF9fID0geydiJzogMX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmIsIDEpCisgICAgICAgIGRlZiBjYW50KHgsIGRpY3QpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHguX19kaWN0X18gPSBkaWN0CisgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYWxsb3cgJXIuX19kaWN0X18gPSAlciIgJSAoeCwgZGljdCkpCisgICAgICAgIGNhbnQoYSwgTm9uZSkKKyAgICAgICAgY2FudChhLCBbXSkKKyAgICAgICAgY2FudChhLCAxKQorICAgICAgICBkZWwgYS5fX2RpY3RfXyAjIERlbGV0aW5nIF9fZGljdF9fIGlzIGFsbG93ZWQKKworICAgICAgICBjbGFzcyBCYXNlKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiB2ZXJpZnlfZGljdF9yZWFkb25seSh4KToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgeCBoYXMgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyBpbmhlcml0aW5nIGZyb20gQmFzZS4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgY2FudCh4LCB7fSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgeC5fX2RpY3RfXworICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGFsbG93IGRlbCAlci5fX2RpY3RfXyIgJSB4KQorICAgICAgICAgICAgZGljdF9kZXNjciA9IEJhc2UuX19kaWN0X19bIl9fZGljdF9fIl0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkaWN0X2Rlc2NyLl9fc2V0X18oeCwge30pCisgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWN0X2Rlc2NyIGFsbG93ZWQgYWNjZXNzIHRvICVyJ3MgZGljdCIgJSB4KQorCisgICAgICAgICMgQ2xhc3NlcyBkb24ndCBhbGxvdyBfX2RpY3RfXyBhc3NpZ25tZW50IGFuZCBoYXZlIHJlYWRvbmx5IGRpY3RzCisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUsIEJhc2UpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNZXRhMihCYXNlLCB0eXBlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRChvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE1ldGExCisgICAgICAgIGNsYXNzIEUob2JqZWN0KToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhMgorICAgICAgICBmb3IgY2xzIGluIEMsIEQsIEU6CisgICAgICAgICAgICB2ZXJpZnlfZGljdF9yZWFkb25seShjbHMpCisgICAgICAgICAgICBjbGFzc19kaWN0ID0gY2xzLl9fZGljdF9fCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2xhc3NfZGljdFsic3BhbSJdID0gImVnZ3MiCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlcidzIF9fZGljdF9fIGNhbiBiZSBtb2RpZmllZCIgJSBjbHMpCisKKyAgICAgICAgIyBNb2R1bGVzIGFsc28gZGlzYWxsb3cgX19kaWN0X18gYXNzaWdubWVudAorICAgICAgICBjbGFzcyBNb2R1bGUxKHR5cGVzLk1vZHVsZVR5cGUsIEJhc2UpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNb2R1bGUyKEJhc2UsIHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgTW9kdWxlVHlwZSBpbiBNb2R1bGUxLCBNb2R1bGUyOgorICAgICAgICAgICAgbW9kID0gTW9kdWxlVHlwZSgic3BhbSIpCisgICAgICAgICAgICB2ZXJpZnlfZGljdF9yZWFkb25seShtb2QpCisgICAgICAgICAgICBtb2QuX19kaWN0X19bInNwYW0iXSA9ICJlZ2dzIgorCisgICAgICAgICMgRXhjZXB0aW9uJ3MgX19kaWN0X18gY2FuIGJlIHJlcGxhY2VkLCBidXQgbm90IGRlbGV0ZWQKKyAgICAgICAgIyAoYXQgbGVhc3Qgbm90IGFueSBtb3JlIHRoYW4gcmVndWxhciBleGNlcHRpb24ncyBfX2RpY3RfXyBjYW4KKyAgICAgICAgIyBiZSBkZWxldGVkOyBvbiBDUHl0aG9uIGl0IGlzIG5vdCB0aGUgY2FzZSwgd2hlcmVhcyBvbiBQeVB5IHRoZXkKKyAgICAgICAgIyBjYW4sIGp1c3QgbGlrZSBhbnkgb3RoZXIgbmV3LXN0eWxlIGluc3RhbmNlJ3MgX19kaWN0X18uKQorICAgICAgICBkZWYgY2FuX2RlbGV0ZV9kaWN0KGUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBlLl9fZGljdF9fCisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBjbGFzcyBFeGNlcHRpb24xKEV4Y2VwdGlvbiwgQmFzZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEV4Y2VwdGlvbjIoQmFzZSwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIEV4Y2VwdGlvblR5cGUgaW4gRXhjZXB0aW9uLCBFeGNlcHRpb24xLCBFeGNlcHRpb24yOgorICAgICAgICAgICAgZSA9IEV4Y2VwdGlvblR5cGUoKQorICAgICAgICAgICAgZS5fX2RpY3RfXyA9IHsiYSI6IDF9CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FuX2RlbGV0ZV9kaWN0KGUpLCBjYW5fZGVsZXRlX2RpY3QoVmFsdWVFcnJvcigpKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBwaWNrbGluZyBhbmQgY29weWluZyBuZXctc3R5bGUgY2xhc3NlcyBhbmQgb2JqZWN0cy4uLgorICAgICAgICBpbXBvcnQgcGlja2xlLCBjUGlja2xlCisKKyAgICAgICAgZGVmIHNvcnRlZGl0ZW1zKGQpOgorICAgICAgICAgICAgTCA9IGQuaXRlbXMoKQorICAgICAgICAgICAgTC5zb3J0KCkKKyAgICAgICAgICAgIHJldHVybiBMCisKKyAgICAgICAgZ2xvYmFsIEMKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgorICAgICAgICAgICAgICAgIHN1cGVyKEMsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQyglciwgJXIpIiAlIChzZWxmLmEsIHNlbGYuYikKKworICAgICAgICBnbG9iYWwgQzEKKyAgICAgICAgY2xhc3MgQzEobGlzdCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihDMSwgY2xzKS5fX25ld19fKGNscykKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuYSwgc2VsZi5iKQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMSglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEMyCisgICAgICAgIGNsYXNzIEMyKGludCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsIHZhbD0wKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoQzIsIGNscykuX19uZXdfXyhjbHMsIHZhbCkKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuYSwgc2VsZi5iLCBpbnQoc2VsZikpCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYiwgdmFsPTApOgorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMiglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKKworICAgICAgICBnbG9iYWwgQzMKKyAgICAgICAgY2xhc3MgQzMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZvbworICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisKKyAgICAgICAgZ2xvYmFsIEM0Y2xhc3NpYywgQzQKKyAgICAgICAgY2xhc3MgQzRjbGFzc2ljOiAjIGNsYXNzaWMKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQzQoQzRjbGFzc2ljLCBvYmplY3QpOiAjIG1peGVkIGluaGVyaXRhbmNlCisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZm9yIHAgaW4gcGlja2xlLCBjUGlja2xlOgorICAgICAgICAgICAgZm9yIGJpbiBpbiAwLCAxOgorICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gQywgQzEsIEMyOgorICAgICAgICAgICAgICAgICAgICBzID0gcC5kdW1wcyhjbHMsIGJpbikKKyAgICAgICAgICAgICAgICAgICAgY2xzMiA9IHAubG9hZHMocykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNsczIgaXMgY2xzKQorCisgICAgICAgICAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQorICAgICAgICAgICAgICAgIGIgPSBDMigiaGVsbG8iLCAid29ybGQiLCA0MikKKyAgICAgICAgICAgICAgICBzID0gcC5kdW1wcygoYSwgYiksIGJpbikKKyAgICAgICAgICAgICAgICB4LCB5ID0gcC5sb2FkcyhzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2NsYXNzX18sIGEuX19jbGFzc19fKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeC5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGEuX19kaWN0X18pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2NsYXNzX18sIGIuX19jbGFzc19fKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeS5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGIuX19kaWN0X18pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih4KSwgcmVwcihhKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeSksIHJlcHIoYikpCisgICAgICAgICAgICAgICAgIyBUZXN0IGZvciBfX2dldHN0YXRlX18gYW5kIF9fc2V0c3RhdGVfXyBvbiBuZXcgc3R5bGUgY2xhc3MKKyAgICAgICAgICAgICAgICB1ID0gQzMoNDIpCisgICAgICAgICAgICAgICAgcyA9IHAuZHVtcHModSwgYmluKQorICAgICAgICAgICAgICAgIHYgPSBwLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ll9fY2xhc3NfXywgdi5fX2NsYXNzX18pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZvbywgdi5mb28pCisgICAgICAgICAgICAgICAgIyBUZXN0IGZvciBwaWNrbGFiaWxpdHkgb2YgaHlicmlkIGNsYXNzCisgICAgICAgICAgICAgICAgdSA9IEM0KCkKKyAgICAgICAgICAgICAgICB1LmZvbyA9IDQyCisgICAgICAgICAgICAgICAgcyA9IHAuZHVtcHModSwgYmluKQorICAgICAgICAgICAgICAgIHYgPSBwLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ll9fY2xhc3NfXywgdi5fX2NsYXNzX18pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZvbywgdi5mb28pCisKKyAgICAgICAgIyBUZXN0aW5nIGNvcHkuZGVlcGNvcHkoKQorICAgICAgICBpbXBvcnQgY29weQorICAgICAgICBmb3IgY2xzIGluIEMsIEMxLCBDMjoKKyAgICAgICAgICAgIGNsczIgPSBjb3B5LmRlZXBjb3B5KGNscykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbHMyIGlzIGNscykKKworICAgICAgICBhID0gQzEoMSwgMik7IGEuYXBwZW5kKDQyKTsgYS5hcHBlbmQoMjQpCisgICAgICAgIGIgPSBDMigiaGVsbG8iLCAid29ybGQiLCA0MikKKyAgICAgICAgeCwgeSA9IGNvcHkuZGVlcGNvcHkoKGEsIGIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCBhLl9fY2xhc3NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh4Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYS5fX2RpY3RfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2NsYXNzX18sIGIuX19jbGFzc19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHkuX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhiLl9fZGljdF9fKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHgpLCByZXByKGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeSksIHJlcHIoYikpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfc2xvdHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBwaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fIC4uLgorICAgICAgICBpbXBvcnQgcGlja2xlLCBjUGlja2xlCisgICAgICAgICMgUGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyBidXQgd2l0aG91dCBfX2dldHN0YXRlX18gc2hvdWxkIGZhaWwKKyAgICAgICAgZ2xvYmFsIEIsIEMsIEQsIEUKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgYmFzZSBpbiBbb2JqZWN0LCBCXToKKyAgICAgICAgICAgIGNsYXNzIEMoYmFzZSk6CisgICAgICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KKyAgICAgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhDKCkpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbDogcGlja2xlIEMgaW5zdGFuY2UgLSAlcyIgJSBiYXNlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNQaWNrbGUuZHVtcHMoQygpKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGZhaWw6IGNQaWNrbGUgQyBpbnN0YW5jZSAtICVzIiAlIGJhc2UpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBmYWlsOiBwaWNrbGUgRCBpbnN0YW5jZSAtICVzIiAlIGJhc2UpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY1BpY2tsZS5kdW1wcyhEKCkpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbDogY1BpY2tsZSBEIGluc3RhbmNlIC0gJXMiICUgYmFzZSkKKyAgICAgICAgICAgICMgR2l2ZSBDIGEgbmljZSBnZW5lcmljIF9fZ2V0c3RhdGVfXyBhbmQgX19zZXRzdGF0ZV9fCisgICAgICAgICAgICBjbGFzcyBDKGJhc2UpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCisgICAgICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHNlbGYuX19kaWN0X18uY29weSgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgICAgICAgICBmb3IgY2xzIGluIHNlbGYuX19jbGFzc19fLl9fbXJvX186CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc24gaW4gY2xzLl9fZGljdF9fLmdldCgnX19zbG90c19fJywgKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFtzbl0gPSBnZXRhdHRyKHNlbGYsIHNuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZAorICAgICAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgZCk6CisgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIGQuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgdikKKyAgICAgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBOb3cgaXQgc2hvdWxkIHdvcmsKKyAgICAgICAgICAgIHggPSBDKCkKKyAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKHksICdhJyksIDApCisgICAgICAgICAgICB5ID0gY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKHksICdhJyksIDApCisgICAgICAgICAgICB4LmEgPSA0MgorICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSwgNDIpCisgICAgICAgICAgICB5ID0gY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIDQyKQorICAgICAgICAgICAgeCA9IEQoKQorICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgIHguYiA9IDEwMAorICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSArIHkuYiwgMTQyKQorICAgICAgICAgICAgeSA9IGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hICsgeS5iLCAxNDIpCisgICAgICAgICAgICAjIEEgc3ViY2xhc3MgdGhhdCBhZGRzIGEgc2xvdCBzaG91bGQgYWxzbyB3b3JrCisgICAgICAgICAgICBjbGFzcyBFKEMpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYiddCisgICAgICAgICAgICB4ID0gRSgpCisgICAgICAgICAgICB4LmEgPSA0MgorICAgICAgICAgICAgeC5iID0gImZvbyIKKyAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIHguYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5iLCB4LmIpCisgICAgICAgICAgICB5ID0gY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIHguYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5iLCB4LmIpCisKKyAgICBkZWYgdGVzdF9iaW5hcnlfb3BlcmF0b3Jfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBvdmVycmlkZXMgb2YgYmluYXJ5IG9wZXJhdGlvbnMuLi4KKyAgICAgICAgY2xhc3MgSShpbnQpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiSSglcikiICUgaW50KHNlbGYpCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIEkoaW50KHNlbGYpICsgaW50KG90aGVyKSkKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworICAgICAgICAgICAgZGVmIF9fcG93X18oc2VsZiwgb3RoZXIsIG1vZD1Ob25lKToKKyAgICAgICAgICAgICAgICBpZiBtb2QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEkocG93KGludChzZWxmKSwgaW50KG90aGVyKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEkocG93KGludChzZWxmKSwgaW50KG90aGVyKSwgaW50KG1vZCkpKQorICAgICAgICAgICAgZGVmIF9fcnBvd19fKHNlbGYsIG90aGVyLCBtb2Q9Tm9uZSk6CisgICAgICAgICAgICAgICAgaWYgbW9kIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJKHBvdyhpbnQob3RoZXIpLCBpbnQoc2VsZiksIG1vZCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEkocG93KGludChvdGhlciksIGludChzZWxmKSwgaW50KG1vZCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihJKDEpICsgSSgyKSksICJJKDMpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKEkoMSkgKyAyKSwgIkkoMykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoMSArIEkoMikpLCAiSSgzKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihJKDIpICoqIEkoMykpLCAiSSg4KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigyICoqIEkoMykpLCAiSSg4KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihJKDIpICoqIDMpLCAiSSg4KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihwb3coSSgyKSwgSSgzKSwgSSg1KSkpLCAiSSgzKSIpCisgICAgICAgIGNsYXNzIFMoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmxvd2VyKCkgPT0gb3RoZXIubG93ZXIoKQorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3Byb3BhZ2F0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcHJvcGFnYXRpb24gb2Ygc2xvdCBmdW5jdGlvbnMgdG8gc3ViY2xhc3Nlcy4uLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEQoQiwgQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgb3JpZ19oYXNoID0gaGFzaChkKSAjIHJlbGF0ZWQgdG8gaWQoZCkgaW4gcGxhdGZvcm0tZGVwZW5kZW50IHdheXMKKyAgICAgICAgQS5fX2hhc2hfXyA9IGxhbWJkYSBzZWxmOiA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIDQyKQorICAgICAgICBDLl9faGFzaF9fID0gbGFtYmRhIHNlbGY6IDMxNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIDMxNCkKKyAgICAgICAgQi5fX2hhc2hfXyA9IGxhbWJkYSBzZWxmOiAxNDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCAxNDQpCisgICAgICAgIEQuX19oYXNoX18gPSBsYW1iZGEgc2VsZjogMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgMTAwKQorICAgICAgICBELl9faGFzaF9fID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGQpCisgICAgICAgIGRlbCBELl9faGFzaF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgMTQ0KQorICAgICAgICBCLl9faGFzaF9fID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGQpCisgICAgICAgIGRlbCBCLl9faGFzaF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgMzE0KQorICAgICAgICBDLl9faGFzaF9fID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGQpCisgICAgICAgIGRlbCBDLl9faGFzaF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgNDIpCisgICAgICAgIEEuX19oYXNoX18gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgZCkKKyAgICAgICAgZGVsIEEuX19oYXNoX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBvcmlnX2hhc2gpCisgICAgICAgIGQuZm9vID0gNDIKKyAgICAgICAgZC5iYXIgPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmJhciwgNDIpCisgICAgICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgaWYgbmFtZSA9PSAiZm9vIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMjQKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQorICAgICAgICBBLl9fZ2V0YXR0cmlidXRlX18gPSBfX2dldGF0dHJpYnV0ZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28sIDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYmFyLCA0MikKKyAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgaWYgbmFtZSBpbiAoInNwYW0iLCAiZm9vIiwgImJhciIpOgorICAgICAgICAgICAgICAgIHJldHVybiAiaGVsbG8iCisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgbmFtZQorICAgICAgICBCLl9fZ2V0YXR0cl9fID0gX19nZXRhdHRyX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNwYW0sICJoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28sIDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYmFyLCA0MikKKyAgICAgICAgZGVsIEEuX19nZXRhdHRyaWJ1dGVfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vLCA0MikKKyAgICAgICAgZGVsIGQuZm9vCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28sICJoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5iYXIsIDQyKQorICAgICAgICBkZWwgQi5fX2dldGF0dHJfXworICAgICAgICB0cnk6CisgICAgICAgICAgICBkLmZvbworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImQuZm9vIHNob3VsZCBiZSB1bmRlZmluZWQgbm93IikKKworICAgICAgICAjIFRlc3QgYSBuYXN0eSBidWcgaW4gcmVjdXJzZV9kb3duX3N1YmNsYXNzZXMoKQorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlbCBCCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgQS5fX3NldGl0ZW1fXyA9IGxhbWJkYSAqYTogTm9uZSAjIGNyYXNoCisKKyAgICBkZWYgdGVzdF9idWZmZXJfaW5oZXJpdGFuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdGluZyB0aGF0IGJ1ZmZlciBpbnRlcmZhY2UgaXMgaW5oZXJpdGVkIC4uLgorCisgICAgICAgIGltcG9ydCBiaW5hc2NpaQorICAgICAgICAjIFNGIGJ1ZyBbIzQ3MDA0MF0gUGFyc2VUdXBsZSB0IyB2cyBzdWJjbGFzc2VzLgorCisgICAgICAgIGNsYXNzIE15U3RyKHN0cik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGJhc2UgPSAnYWJjJworICAgICAgICBtID0gTXlTdHIoYmFzZSkKKyAgICAgICAgIyBiMmFfaGV4IHVzZXMgdGhlIGJ1ZmZlciBpbnRlcmZhY2UgdG8gZ2V0IGl0cyBhcmd1bWVudCdzIHZhbHVlLCB2aWEKKyAgICAgICAgIyBQeUFyZ19QYXJzZVR1cGxlICd0IycgY29kZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfaGV4KG0pLCBiaW5hc2NpaS5iMmFfaGV4KGJhc2UpKQorCisgICAgICAgICMgSXQncyBub3QgY2xlYXIgdGhhdCB1bmljb2RlIHdpbGwgY29udGludWUgdG8gc3VwcG9ydCB0aGUgY2hhcmFjdGVyCisgICAgICAgICMgYnVmZmVyIGludGVyZmFjZSwgYW5kIHRoaXMgdGVzdCB3aWxsIGZhaWwgaWYgdGhhdCdzIHRha2VuIGF3YXkuCisgICAgICAgIGNsYXNzIE15VW5pKHVuaWNvZGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBiYXNlID0gdSdhYmMnCisgICAgICAgIG0gPSBNeVVuaShiYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmIyYV9oZXgobSksIGJpbmFzY2lpLmIyYV9oZXgoYmFzZSkpCisKKyAgICAgICAgY2xhc3MgTXlJbnQoaW50KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbSA9IE15SW50KDQyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiaW5hc2NpaS5iMmFfaGV4KG0pCisgICAgICAgICAgICBzZWxmLmZhaWwoJ3N1YmNsYXNzIG9mIGludCBzaG91bGQgbm90IGhhdmUgYSBidWZmZXIgaW50ZXJmYWNlJykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3N0cl9vZl9zdHJfc3ViY2xhc3Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBfX3N0cl9fIGRlZmluZWQgaW4gc3ViY2xhc3Mgb2Ygc3RyIC4uLgorICAgICAgICBpbXBvcnQgYmluYXNjaWkKKyAgICAgICAgaW1wb3J0IGNTdHJpbmdJTworCisgICAgICAgIGNsYXNzIG9jdGV0c3RyaW5nKHN0cik6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYmluYXNjaWkuYjJhX2hleChzZWxmKQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmICsgIiByZXByIgorCisgICAgICAgIG8gPSBvY3RldHN0cmluZygnQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShvKSwgb2N0ZXRzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzdHIobykpLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXByKG8pKSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZChvKSwgMHg0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobyksICc0MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvKSwgJ0EgcmVwcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5fX3N0cl9fKCksICc0MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5fX3JlcHJfXygpLCAnQSByZXByJykKKworICAgICAgICBjYXB0dXJlID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgIyBDYWxsaW5nIHN0cigpIG9yIG5vdCBleGVyY2lzZXMgZGlmZmVyZW50IGludGVybmFsIHBhdGhzLgorICAgICAgICBwcmludCA+PiBjYXB0dXJlLCBvCisgICAgICAgIHByaW50ID4+IGNhcHR1cmUsIHN0cihvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmUuZ2V0dmFsdWUoKSwgJzQxXG40MVxuJykKKyAgICAgICAgY2FwdHVyZS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9rZXl3b3JkX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGtleXdvcmQgYXJndW1lbnRzIHRvIF9faW5pdF9fLCBfX2NhbGxfXy4uLgorICAgICAgICBkZWYgZihhKTogcmV0dXJuIGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fY2FsbF9fKGE9NDIpLCA0MikKKyAgICAgICAgYSA9IFtdCisgICAgICAgIGxpc3QuX19pbml0X18oYSwgc2VxdWVuY2U9WzAsIDEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFswLCAxLCAyXSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9jYWxsKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcmVjdXJzaXZlIF9fY2FsbF9fKCkgYnkgc2V0dGluZyB0byBpbnN0YW5jZSBvZiBjbGFzcy4uLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgQS5fX2NhbGxfXyA9IEEoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBBKCkoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJSZWN1cnNpb24gbGltaXQgc2hvdWxkIGhhdmUgYmVlbiByZWFjaGVkIGZvciBfX2NhbGxfXygpIikKKworICAgIGRlZiB0ZXN0X2RlbGV0ZV9ob29rKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgX19kZWxfXyBob29rLi4uCisgICAgICAgIGxvZyA9IFtdCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGxvZy5hcHBlbmQoMSkKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZywgW10pCisgICAgICAgIGRlbCBjCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2csIFsxXSkKKworICAgICAgICBjbGFzcyBEKG9iamVjdCk6IHBhc3MKKyAgICAgICAgZCA9IEQoKQorICAgICAgICB0cnk6IGRlbCBkWzBdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJpbnZhbGlkIGRlbCgpIGRpZG4ndCByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfaGFzaF9pbmhlcml0YW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGhhc2ggb2YgbXV0YWJsZSBzdWJjbGFzc2VzLi4uCisKKyAgICAgICAgY2xhc3MgbXlkaWN0KGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkID0gbXlkaWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaGFzaChkKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJoYXNoKCkgb2YgZGljdCBzdWJjbGFzcyBzaG91bGQgZmFpbCIpCisKKyAgICAgICAgY2xhc3MgbXlsaXN0KGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkID0gbXlsaXN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaGFzaChkKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJoYXNoKCkgb2YgbGlzdCBzdWJjbGFzcyBzaG91bGQgZmFpbCIpCisKKyAgICBkZWYgdGVzdF9zdHJfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgdHJ5OiAnYScgKyA1CisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCInJyArIDUgZG9lc24ndCByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgICAgIHRyeTogJycuc3BsaXQoJycpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiJycuc3BsaXQoJycpIGRvZXNuJ3QgcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAgICAgdHJ5OiAnJy5qb2luKFswXSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIicnLmpvaW4oWzBdKSBkb2Vzbid0IHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICAgICAgdHJ5OiAnJy5yaW5kZXgoJzUnKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIicnLnJpbmRleCgnNScpIGRvZXNuJ3QgcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAgICAgdHJ5OiAnJShuKXMnICUgTm9uZQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiJyUobilzJyAlIE5vbmUgZG9lc24ndCByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgICAgIHRyeTogJyUobicgJSB7fQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIiclKG4nICUge30gJycgZG9lc24ndCByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICAgICB0cnk6ICclKnMnICUgKCdhYmMnKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiJyUqcycgJSAoJ2FiYycpIGRvZXNuJ3QgcmFpc2UgVHlwZUVycm9yIikKKworICAgICAgICB0cnk6ICclKi4qcycgJSAoJ2FiYycsIDUpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCInJSouKnMnICUgKCdhYmMnLCA1KSBkb2Vzbid0IHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICAgICAgdHJ5OiAnJXMnICUgKDEsIDIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCInJXMnICUgKDEsIDIpIGRvZXNuJ3QgcmFpc2UgVHlwZUVycm9yIikKKworICAgICAgICB0cnk6ICclJyAlIE5vbmUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCInJScgJSBOb25lIGRvZXNuJ3QgcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnNTM0MjUzJy5pc2RpZ2l0KCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzUzNDI1M3gnLmlzZGlnaXQoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWMnICUgNSwgJ1x4MDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclYycgJSAnNScsICc1JykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlY3Vyc2l2ZShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGRlZXBjb3B5IG9mIHJlY3Vyc2l2ZSBvYmplY3RzLi4uCisgICAgICAgIGNsYXNzIE5vZGU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBOb2RlKCkKKyAgICAgICAgYiA9IE5vZGUoKQorICAgICAgICBhLmIgPSBiCisgICAgICAgIGIuYSA9IGEKKyAgICAgICAgeiA9IGRlZXBjb3B5KGEpICMgVGhpcyBibGV3IHVwIGJlZm9yZQorCisgICAgZGVmIHRlc3RfdW5pbnRpYWxpemVkX21vZHVsZXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyB1bmluaXRpYWxpemVkIG1vZHVsZSBvYmplY3RzLi4uCisgICAgICAgIGZyb20gdHlwZXMgaW1wb3J0IE1vZHVsZVR5cGUgYXMgTQorICAgICAgICBtID0gTS5fX25ld19fKE0pCisgICAgICAgIHN0cihtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2F0dHIobSwgIl9fbmFtZV9fIiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihtLCAiX19maWxlX18iKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKG0sICJmb28iKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLl9fZGljdF9fKSAgICMgTm9uZSBvciB7fSBhcmUgYm90aCByZWFzb25hYmxlIGFuc3dlcnMKKyAgICAgICAgbS5mb28gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2RpY3RfXywgeyJmb28iOiAxfSkKKworICAgIGRlZiB0ZXN0X2Z1bm55X25ldyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIF9fbmV3X18gcmV0dXJuaW5nIHNvbWV0aGluZyB1bmV4cGVjdGVkLi4uCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYXJnKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgc3RyKTogcmV0dXJuIFsxLCAyLCAzXQorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIGludCk6IHJldHVybiBvYmplY3QuX19uZXdfXyhEKQorICAgICAgICAgICAgICAgIGVsc2U6IHJldHVybiBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGFyZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMoIjEiKSwgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQoIjEiKSwgWzEsIDIsIDNdKQorICAgICAgICBkID0gRChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vLCBOb25lKQorICAgICAgICBkID0gQygxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoZCwgRCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28sIDEpCisgICAgICAgIGQgPSBEKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShkLCBEKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbywgMSkKKworICAgIGRlZiB0ZXN0X2ltdWxfYnVnKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZm9yIF9faW11bF9fIHByb2JsZW1zLi4uCisgICAgICAgICMgU0YgYnVnIDU0NDY0NworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbXVsX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZiwgb3RoZXIpCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeSA9IHgKKyAgICAgICAgeSAqPSAxLjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCAoeCwgMS4wKSkKKyAgICAgICAgeSA9IHgKKyAgICAgICAgeSAqPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgKHgsIDIpKQorICAgICAgICB5ID0geAorICAgICAgICB5ICo9IDNMCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgKHgsIDNMKSkKKyAgICAgICAgeSA9IHgKKyAgICAgICAgeSAqPSAxTDw8MTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgKHgsIDFMPDwxMDApKQorICAgICAgICB5ID0geAorICAgICAgICB5ICo9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCAoeCwgTm9uZSkpCisgICAgICAgIHkgPSB4CisgICAgICAgIHkgKj0gImZvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCAoeCwgImZvbyIpKQorCisgICAgZGVmIHRlc3RfY29weV9zZXRzdGF0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHRoYXQgY29weS4qY29weSgpIGNvcnJlY3RseSB1c2VzIF9fc2V0c3RhdGVfXy4uLgorICAgICAgICBpbXBvcnQgY29weQorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vPU5vbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICAgICAgc2VsZi5fX2ZvbyA9IGZvbworICAgICAgICAgICAgZGVmIHNldGZvbyhzZWxmLCBmb289Tm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBnZXRmb28oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19mb28KKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtzZWxmLmZvb10KKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZl8sIGxzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmXy5fX2ZvbyA9IHNlbGZfLmZvbyA9IGxzdFswXQorICAgICAgICBhID0gQyg0MikKKyAgICAgICAgYS5zZXRmb28oMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5mb28sIDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0Zm9vKCksIDQyKQorICAgICAgICBiID0gY29weS5jb3B5KGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5mb28sIDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ2V0Zm9vKCksIDI0KQorICAgICAgICBiID0gY29weS5kZWVwY29weShhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZm9vLCAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdldGZvbygpLCAyNCkKKworICAgIGRlZiB0ZXN0X3NsaWNlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNhc2VzIHdpdGggc2xpY2VzIGFuZCBvdmVycmlkZGVuIF9fZ2V0aXRlbV9fIC4uLgorCisgICAgICAgICMgU3RyaW5ncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJoZWxsbyJbOjRdLCAiaGVsbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImhlbGxvIltzbGljZSg0KV0sICJoZWxsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIuX19nZXRpdGVtX18oImhlbGxvIiwgc2xpY2UoNCkpLCAiaGVsbCIpCisgICAgICAgIGNsYXNzIFMoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyLl9fZ2V0aXRlbV9fKHNlbGYsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUygiaGVsbG8iKVs6NF0sICJoZWxsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTKCJoZWxsbyIpW3NsaWNlKDQpXSwgImhlbGwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFMoImhlbGxvIikuX19nZXRpdGVtX18oc2xpY2UoNCkpLCAiaGVsbCIpCisgICAgICAgICMgVHVwbGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEsMiwzKVs6Ml0sICgxLDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLDIsMylbc2xpY2UoMildLCAoMSwyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZS5fX2dldGl0ZW1fXygoMSwyLDMpLCBzbGljZSgyKSksICgxLDIpKQorICAgICAgICBjbGFzcyBUKHR1cGxlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUuX19nZXRpdGVtX18oc2VsZiwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUKCgxLDIsMykpWzoyXSwgKDEsMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVCgoMSwyLDMpKVtzbGljZSgyKV0sICgxLDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFQoKDEsMiwzKSkuX19nZXRpdGVtX18oc2xpY2UoMikpLCAoMSwyKSkKKyAgICAgICAgIyBMaXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLDIsM11bOjJdLCBbMSwyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwyLDNdW3NsaWNlKDIpXSwgWzEsMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdC5fX2dldGl0ZW1fXyhbMSwyLDNdLCBzbGljZSgyKSksIFsxLDJdKQorICAgICAgICBjbGFzcyBMKGxpc3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0Ll9fZ2V0aXRlbV9fKHNlbGYsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTChbMSwyLDNdKVs6Ml0sIFsxLDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwoWzEsMiwzXSlbc2xpY2UoMildLCBbMSwyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMKFsxLDIsM10pLl9fZ2V0aXRlbV9fKHNsaWNlKDIpKSwgWzEsMl0pCisgICAgICAgICMgTm93IGRvIGxpc3RzIGFuZCBfX3NldGl0ZW1fXworICAgICAgICBhID0gTChbMSwyLDNdKQorICAgICAgICBhW3NsaWNlKDEsIDMpXSA9IFszLDJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgWzEsMywyXSkKKyAgICAgICAgYVtzbGljZSgwLCAyLCAxKV0gPSBbMywxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFszLDEsMl0pCisgICAgICAgIGEuX19zZXRpdGVtX18oc2xpY2UoMSwgMyksIFsyLDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFszLDIsMV0pCisgICAgICAgIGEuX19zZXRpdGVtX18oc2xpY2UoMCwgMiwgMSksIFsyLDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFsyLDMsMV0pCisKKyAgICBkZWYgdGVzdF9zdWJ0eXBlX3Jlc3VycmVjdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHJlc3VycmVjdGlvbiBvZiBuZXctc3R5bGUgaW5zdGFuY2UuLi4KKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBjb250YWluZXIgPSBbXQorCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlc3VycmVjdCB0aGUgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICBDLmNvbnRhaW5lci5hcHBlbmQoc2VsZikKKworICAgICAgICBjID0gQygpCisgICAgICAgIGMuYXR0ciA9IDQyCisKKyAgICAgICAgIyBUaGUgbW9zdCBpbnRlcmVzdGluZyB0aGluZyBoZXJlIGlzIHdoZXRoZXIgdGhpcyBibG93cyB1cCwgZHVlIHRvCisgICAgICAgICMgZmxhd2VkIEdDIHRyYWNraW5nIGxvZ2ljIGluIHR5cGVvYmplY3QuYydzIGNhbGxfZmluYWxpemVyKCkgKGEgMi4yLjEKKyAgICAgICAgIyBidWcpLgorICAgICAgICBkZWwgYworCisgICAgICAgICMgSWYgdGhhdCBkaWRuJ3QgYmxvdyB1cCwgaXQncyBhbHNvIGludGVyZXN0aW5nIHRvIHNlZSB3aGV0aGVyIGNsZWFyaW5nCisgICAgICAgICMgdGhlIGxhc3QgY29udGFpbmVyIHNsb3Qgd29ya3M6IHRoYXQgd2lsbCBhdHRlbXB0IHRvIGRlbGV0ZSBjIGFnYWluLAorICAgICAgICAjIHdoaWNoIHdpbGwgY2F1c2UgYyB0byBnZXQgYXBwZW5kZWQgYmFjayB0byB0aGUgY29udGFpbmVyIGFnYWluCisgICAgICAgICMgImR1cmluZyIgdGhlIGRlbC4gIChPbiBub24tQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbnMsIGhvd2V2ZXIsIF9fZGVsX18KKyAgICAgICAgIyBpcyB0eXBpY2FsbHkgbm90IGNhbGxlZCBhZ2Fpbi4pCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oQy5jb250YWluZXIpLCAxKQorICAgICAgICBkZWwgQy5jb250YWluZXJbLTFdCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oQy5jb250YWluZXIpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmNvbnRhaW5lclstMV0uYXR0ciwgNDIpCisKKyAgICAgICAgIyBNYWtlIGMgbW9ydGFsIGFnYWluLCBzbyB0aGF0IHRoZSB0ZXN0IGZyYW1ld29yayB3aXRoIC1sIGRvZXNuJ3QgcmVwb3J0CisgICAgICAgICMgaXQgYXMgYSBsZWFrLgorICAgICAgICBkZWwgQy5fX2RlbF9fCisKKyAgICBkZWYgdGVzdF9zbG90c190cmFzaChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHNsb3QgdHJhc2guLi4KKyAgICAgICAgIyBEZWFsbG9jYXRpbmcgZGVlcGx5IG5lc3RlZCBzbG90dGVkIHRyYXNoIGNhdXNlZCBzdGFjayBvdmVyZmxvd3MKKyAgICAgICAgY2xhc3MgdHJhc2gob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsneCddCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICBvID0gTm9uZQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoNTAwMDApOgorICAgICAgICAgICAgbyA9IHRyYXNoKG8pCisgICAgICAgIGRlbCBvCisKKyAgICBkZWYgdGVzdF9zbG90c19tdWx0aXBsZV9pbmhlcml0YW5jZShzZWxmKToKKyAgICAgICAgIyBTRiBidWcgNTc1MjI5LCBtdWx0aXBsZSBpbmhlcml0YW5jZSB3LyBzbG90cyBkdW1wcyBjb3JlCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXz0oKQorICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMoQSxCKSA6CisgICAgICAgICAgICBfX3Nsb3RzX189KCkKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmNoZWNrX2ltcGxfZGV0YWlsKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19iYXNpY3NpemVfXywgQi5fX2Jhc2ljc2l6ZV9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihDLCAnX19kaWN0X18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoQywgJ19fd2Vha3JlZl9fJykpCisgICAgICAgIEMoKS54ID0gMgorCisgICAgZGVmIHRlc3Rfcm11bChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNvcnJlY3QgaW52b2NhdGlvbiBvZiBfX3JtdWxfXy4uLgorICAgICAgICAjIFNGIHBhdGNoIDU5MjY0NgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19tdWxfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJtdWwiCisgICAgICAgICAgICBkZWYgX19ybXVsX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAicm11bCIKKyAgICAgICAgYSA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEqMiwgIm11bCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSoyLjIsICJtdWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIqYSwgInJtdWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIuMiphLCAicm11bCIpCisKKyAgICBkZWYgdGVzdF9pcG93KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgY29ycmVjdCBpbnZvY2F0aW9uIG9mIF9faXBvd19fLi4uCisgICAgICAgICMgW1NGIGJ1ZyA2MjAxNzldCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2lwb3dfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gQygpCisgICAgICAgIGEgKio9IDIKKworICAgIGRlZiB0ZXN0X211dGFibGVfYmFzZXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBtdXRhYmxlIGJhc2VzLi4uCisKKyAgICAgICAgIyBzdHVmZiB0aGF0IHNob3VsZCB3b3JrOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgICAgICAgICBpZiBhdHRyID09ICdhJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoQzIsIHNlbGYpLl9fZ2V0YXR0cmlidXRlX18oYXR0cikKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEUoRCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgZSA9IEUoKQorICAgICAgICBELl9fYmFzZXNfXyA9IChDLCkKKyAgICAgICAgRC5fX2Jhc2VzX18gPSAoQzIsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubWV0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubWV0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQzIuX19zdWJjbGFzc2VzX18oKSwgW0RdKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBELl9fYmFzZXNfXworICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBkZWxldGUgLl9fYmFzZXNfXyIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgRC5fX2Jhc2VzX18gPSAoKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBtc2c6CisgICAgICAgICAgICBpZiBzdHIobXNnKSA9PSAiYSBuZXctc3R5bGUgY2xhc3MgY2FuJ3QgaGF2ZSBvbmx5IGNsYXNzaWMgYmFzZXMiOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXJyb3IgbWVzc2FnZSBmb3IgLl9fYmFzZXNfXyA9ICgpIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gc2V0IC5fX2Jhc2VzX18gdG8gKCkiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEQuX19iYXNlc19fID0gKEQsKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBhY3R1YWxseSwgd2UnbGwgaGF2ZSBjcmFzaGVkIGJ5IGhlcmUuLi4KKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gY3JlYXRlIGluaGVyaXRhbmNlIGN5Y2xlcyIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgRC5fX2Jhc2VzX18gPSAoQywgQykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkbid0IGRldGVjdCByZXBlYXRlZCBiYXNlIGNsYXNzZXMiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEQuX19iYXNlc19fID0gKEUsKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBjcmVhdGUgaW5oZXJpdGFuY2UgY3ljbGVzIikKKworICAgICAgICAjIGxldCdzIHRocm93IGEgY2xhc3NpYyBjbGFzcyBpbnRvIHRoZSBtaXg6CisgICAgICAgIGNsYXNzIENsYXNzaWM6CisgICAgICAgICAgICBkZWYgbWV0aDIoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDMKKworICAgICAgICBELl9fYmFzZXNfXyA9IChDLCBDbGFzc2ljKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5tZXRoMigpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubWV0aDIoKSwgMykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZC5hCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYXR0cmlidXRlIHNob3VsZCBoYXZlIHZhbmlzaGVkIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBELl9fYmFzZXNfXyA9IChDbGFzc2ljLCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibmV3LXN0eWxlIGNsYXNzIG11c3QgaGF2ZSBhIG5ldy1zdHlsZSBiYXNlIikKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5fYmFzZXMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGFsbCB0aGUgYnVpbHRpbiB0eXBlcyBjYW4gaGF2ZSB0aGVpciBiYXNlIHF1ZXJpZWQgd2l0aG91dAorICAgICAgICAjIHNlZ2ZhdWx0aW5nLiBTZWUgaXNzdWUgIzU3ODcuCisgICAgICAgIGJ1aWx0aW5fdHlwZXMgPSBbdHAgZm9yIHRwIGluIF9fYnVpbHRpbl9fLl9fZGljdF9fLml0ZXJ2YWx1ZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHAsIHR5cGUpXQorICAgICAgICBmb3IgdHAgaW4gYnVpbHRpbl90eXBlczoKKyAgICAgICAgICAgIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHRwLCAiX19iYXNlc19fIikKKyAgICAgICAgICAgIGlmIHRwIGlzIG5vdCBvYmplY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHAuX19iYXNlc19fKSwgMSwgdHApCisKKyAgICAgICAgY2xhc3MgTChsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBMLl9fYmFzZXNfXyA9IChkaWN0LCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IHR1cm4gbGlzdCBzdWJjbGFzcyBpbnRvIGRpY3Qgc3ViY2xhc3MiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxpc3QuX19iYXNlc19fID0gKGRpY3QsKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBhc3NpZ24gdG8gbGlzdC5fX2Jhc2VzX18iKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEQuX19iYXNlc19fID0gKEMsIGxpc3QpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgMCwgImJlc3RfYmFzZSBjYWxjdWxhdGlvbiBmb3VuZCB3YW50aW5nIgorCisKKyAgICBkZWYgdGVzdF9tdXRhYmxlX2Jhc2VzX3dpdGhfZmFpbGluZ19tcm8oc2VsZik6CisgICAgICAgICMgVGVzdGluZyBtdXRhYmxlIGJhc2VzIHdpdGggZmFpbGluZyBtcm8uLi4KKyAgICAgICAgY2xhc3MgV29ya09uY2UodHlwZSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhzZWxmLCBuYW1lLCBiYXNlcywgbnMpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IDAKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoV29ya09uY2UsIHNlbGYpLl9fbmV3X18oV29ya09uY2UsIG5hbWUsIGJhc2VzLCBucykKKyAgICAgICAgICAgIGRlZiBtcm8oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5mbGFnID4gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiYm96byIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZsYWcgKz0gMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS5tcm8oc2VsZikKKworICAgICAgICBjbGFzcyBXb3JrQWx3YXlzKHR5cGUpOgorICAgICAgICAgICAgZGVmIG1ybyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCAubXJvKClzIGFyZW4ndCBjYWxsZWQKKyAgICAgICAgICAgICAgICAjIHdpdGggYW4gZXhjZXB0aW9uIHNldCAod2hpY2ggd2FzIHBvc3NpYmxlIGF0IG9uZSBwb2ludCkuCisgICAgICAgICAgICAgICAgIyBBbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgcHJpbnRlZCBpbiBhIGRlYnVnIGJ1aWxkLgorICAgICAgICAgICAgICAgICMgV2hhdCdzIGEgZ29vZCB3YXkgdG8gdGVzdCBmb3IgdGhpcz8KKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS5tcm8oc2VsZikKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQzIob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEUoRCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgRihEKToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBXb3JrT25jZQorCisgICAgICAgIGNsYXNzIEcoRCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gV29ya0Fsd2F5cworCisgICAgICAgICMgSW1tZWRpYXRlIHN1YmNsYXNzZXMgaGF2ZSB0aGVpciBtcm8ncyBhZGp1c3RlZCBpbiBhbHBoYWJldGljYWwKKyAgICAgICAgIyBvcmRlciwgc28gRSdzIHdpbGwgZ2V0IGFkanVzdGVkIGJlZm9yZSBhZGp1c3RpbmcgRidzIGZhaWxzLiAgV2UKKyAgICAgICAgIyBjaGVjayBoZXJlIHRoYXQgRSdzIGdldHMgcmVzdG9yZWQuCisKKyAgICAgICAgRV9tcm9fYmVmb3JlID0gRS5fX21yb19fCisgICAgICAgIERfbXJvX2JlZm9yZSA9IEQuX19tcm9fXworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEQuX19iYXNlc19fID0gKEMyLCkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRS5fX21yb19fLCBFX21yb19iZWZvcmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuX19tcm9fXywgRF9tcm9fYmVmb3JlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleGNlcHRpb24gbm90IHByb3BhZ2F0ZWQiKQorCisgICAgZGVmIHRlc3RfbXV0YWJsZV9iYXNlc19jYXRjaF9tcm9fY29uZmxpY3Qoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBtdXRhYmxlIGJhc2VzIGNhdGNoIG1ybyBjb25mbGljdC4uLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEMoQSwgQik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgRChBLCBCKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBFKEMsIEQpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEMuX19iYXNlc19fID0gKEIsIEEpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRpZG4ndCBjYXRjaCBNUk8gY29uZmxpY3QiKQorCisgICAgZGVmIHRlc3RfbXV0YWJsZV9uYW1lcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIG11dGFibGUgbmFtZXMuLi4KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgQy5fX21vZHVsZV9fIGNvdWxkIGJlICd0ZXN0X2Rlc2NyJyBvciAnX19tYWluX18nCisgICAgICAgIG1vZCA9IEMuX19tb2R1bGVfXworCisgICAgICAgIEMuX19uYW1lX18gPSAnRCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoQy5fX21vZHVsZV9fLCBDLl9fbmFtZV9fKSwgKG1vZCwgJ0QnKSkKKworICAgICAgICBDLl9fbmFtZV9fID0gJ0QuRScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoQy5fX21vZHVsZV9fLCBDLl9fbmFtZV9fKSwgKG1vZCwgJ0QuRScpKQorCisgICAgZGVmIHRlc3RfZXZpbF90eXBlX25hbWUoc2VsZik6CisgICAgICAgICMgQSBiYWRseSBwbGFjZWQgUHlfREVDUkVGIGluIHR5cGVfc2V0X25hbWUgbGVkIHRvIGFyYml0cmFyeSBjb2RlCisgICAgICAgICMgZXhlY3V0aW9uIHdoaWxlIHRoZSB0eXBlIHN0cnVjdHVyZSB3YXMgbm90IGluIGEgc2FuZSBzdGF0ZSwgYW5kIGEKKyAgICAgICAgIyBwb3NzaWJsZSBzZWdtZW50YXRpb24gZmF1bHQgYXMgYSByZXN1bHQuICBTZWUgYnVnICMxNjQ0Ny4KKyAgICAgICAgY2xhc3MgTmFzdHkoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIEMuX19uYW1lX18gPSAib3RoZXIiCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEMuX19uYW1lX18gPSBOYXN0eSgiYWJjIikKKyAgICAgICAgQy5fX25hbWVfXyA9ICJub3JtYWwiCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19yaWdodF9vcChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNvcnJlY3QgZGlzcGF0Y2ggb2Ygc3ViY2xhc3Mgb3ZlcmxvYWRpbmcgX19yPG9wPl9fLi4uCisKKyAgICAgICAgIyBUaGlzIGNvZGUgdGVzdHMgdmFyaW91cyBjYXNlcyB3aGVyZSByaWdodC1kaXNwYXRjaCBvZiBhIHN1YmNsYXNzCisgICAgICAgICMgc2hvdWxkIGJlIHByZWZlcnJlZCBvdmVyIGxlZnQtZGlzcGF0Y2ggb2YgYSBiYXNlIGNsYXNzLgorCisgICAgICAgICMgQ2FzZSAxOiBzdWJjbGFzcyBvZiBpbnQ7IHRoaXMgdGVzdHMgY29kZSBpbiBhYnN0cmFjdC5jOjpiaW5hcnlfb3AxKCkKKworICAgICAgICBjbGFzcyBCKGludCk6CisgICAgICAgICAgICBkZWYgX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkIuX19mbG9vcmRpdl9fIgorICAgICAgICAgICAgZGVmIF9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQi5fX3JmbG9vcmRpdl9fIgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQigxKSAvLyAxLCAiQi5fX2Zsb29yZGl2X18iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLy8gQigxKSwgIkIuX19yZmxvb3JkaXZfXyIpCisKKyAgICAgICAgIyBDYXNlIDI6IHN1YmNsYXNzIG9mIG9iamVjdDsgdGhpcyBpcyBqdXN0IHRoZSBiYXNlbGluZSBmb3IgY2FzZSAzCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDLl9fZmxvb3JkaXZfXyIKKyAgICAgICAgICAgIGRlZiBfX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMuX19yZmxvb3JkaXZfXyIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMoKSAvLyAxLCAiQy5fX2Zsb29yZGl2X18iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLy8gQygpLCAiQy5fX3JmbG9vcmRpdl9fIikKKworICAgICAgICAjIENhc2UgMzogc3ViY2xhc3Mgb2YgbmV3LXN0eWxlIGNsYXNzOyBoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcKKworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJELl9fZmxvb3JkaXZfXyIKKyAgICAgICAgICAgIGRlZiBfX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkQuX19yZmxvb3JkaXZfXyIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQoKSAvLyBDKCksICJELl9fZmxvb3JkaXZfXyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQygpIC8vIEQoKSwgIkQuX19yZmxvb3JkaXZfXyIpCisKKyAgICAgICAgIyBDYXNlIDQ6IHRoaXMgZGlkbid0IHdvcmsgcmlnaHQgaW4gMi4yLjIgYW5kIDIuM2ExCisKKyAgICAgICAgY2xhc3MgRShDKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUuX19yZmxvb3JkaXZfXywgQy5fX3JmbG9vcmRpdl9fKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRSgpIC8vIDEsICJDLl9fZmxvb3JkaXZfXyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSAvLyBFKCksICJDLl9fcmZsb29yZGl2X18iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKSAvLyBDKCksICJDLl9fZmxvb3JkaXZfXyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQygpIC8vIEUoKSwgIkMuX19mbG9vcmRpdl9fIikgIyBUaGlzIG9uZSB3b3VsZCBmYWlsCisKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0ZXN0aW5nIGFuIGludGVybmFsIGtpbmQgb2YgbWV0aG9kIG9iamVjdCIpCisgICAgZGVmIHRlc3RfbWV0aF9jbGFzc19nZXQoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBfX2dldF9fIG1ldGhvZCBvZiBNRVRIX0NMQVNTIEMgbWV0aG9kcy4uLgorICAgICAgICAjIEZ1bGwgY292ZXJhZ2Ugb2YgZGVzY3JvYmplY3QuYzo6Y2xhc3NtZXRob2RfZ2V0KCkKKworICAgICAgICAjIEJhc2VsaW5lCisgICAgICAgIGFyZyA9IFsxLCAyLCAzXQorICAgICAgICByZXMgPSB7MTogTm9uZSwgMjogTm9uZSwgMzogTm9uZX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0LmZyb21rZXlzKGFyZyksIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7fS5mcm9ta2V5cyhhcmcpLCByZXMpCisKKyAgICAgICAgIyBOb3cgZ2V0IHRoZSBkZXNjcmlwdG9yCisgICAgICAgIGRlc2NyID0gZGljdC5fX2RpY3RfX1siZnJvbWtleXMiXQorCisgICAgICAgICMgTW9yZSBiYXNlbGluZSB1c2luZyB0aGUgZGVzY3JpcHRvciBkaXJlY3RseQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2NyLl9fZ2V0X18oTm9uZSwgZGljdCkoYXJnKSwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2NyLl9fZ2V0X18oe30pKGFyZyksIHJlcykKKworICAgICAgICAjIE5vdyBjaGVjayB2YXJpb3VzIGVycm9yIGNhc2VzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlc2NyLl9fZ2V0X18oTm9uZSwgTm9uZSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGhhdmUgYWxsb3dlZCBkZXNjci5fX2dldF9fKE5vbmUsIE5vbmUpIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVzY3IuX19nZXRfXyg0MikKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGhhdmUgYWxsb3dlZCBkZXNjci5fX2dldF9fKDQyKSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlc2NyLl9fZ2V0X18oTm9uZSwgNDIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBoYXZlIGFsbG93ZWQgZGVzY3IuX19nZXRfXyhOb25lLCA0MikiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXNjci5fX2dldF9fKE5vbmUsIGludCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGhhdmUgYWxsb3dlZCBkZXNjci5fX2dldF9fKE5vbmUsIGludCkiKQorCisgICAgZGVmIHRlc3RfaXNpbnN0X2lzY2xhc3Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBwcm94eSBpc2luc3RhbmNlKCkgYW5kIGlzY2xhc3MoKS4uLgorICAgICAgICBjbGFzcyBQcm94eShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaik6CisgICAgICAgICAgICAgICAgc2VsZi5fX29iaiA9IG9iagorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJfUHJveHlfXyIpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9fb2JqLCBuYW1lKQorICAgICAgICAjIFRlc3Qgd2l0aCBhIGNsYXNzaWMgY2xhc3MKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IEMoKQorICAgICAgICBwYSA9IFByb3h5KGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhLCBDKSAgIyBCYXNlbGluZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGEsIEMpICMgVGVzdAorICAgICAgICAjIFRlc3Qgd2l0aCBhIGNsYXNzaWMgc3ViY2xhc3MKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IEQoKQorICAgICAgICBwYSA9IFByb3h5KGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhLCBDKSAgIyBCYXNlbGluZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGEsIEMpICMgVGVzdAorICAgICAgICAjIFRlc3Qgd2l0aCBhIG5ldy1zdHlsZSBjbGFzcworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgcGEgPSBQcm94eShhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgQykgICMgQmFzZWxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhLCBDKSAjIFRlc3QKKyAgICAgICAgIyBUZXN0IHdpdGggYSBuZXctc3R5bGUgc3ViY2xhc3MKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IEQoKQorICAgICAgICBwYSA9IFByb3h5KGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhLCBDKSAgIyBCYXNlbGluZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGEsIEMpICMgVGVzdAorCisgICAgZGVmIHRlc3RfcHJveHlfc3VwZXIoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzdXBlcigpIGZvciBhIHByb3h5IG9iamVjdC4uLgorICAgICAgICBjbGFzcyBQcm94eShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaik6CisgICAgICAgICAgICAgICAgc2VsZi5fX29iaiA9IG9iagorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJfUHJveHlfXyIpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9fb2JqLCBuYW1lKQorCisgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQi5mIgorCisgICAgICAgIGNsYXNzIEMoQik6CisgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoQywgc2VsZikuZigpICsgIi0+Qy5mIgorCisgICAgICAgIG9iaiA9IEMoKQorICAgICAgICBwID0gUHJveHkob2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19kaWN0X19bImYiXShwKSwgIkIuZi0+Qy5mIikKKworICAgIGRlZiB0ZXN0X2NhcmxvdmVycmUoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBwcm9oaWJpdGlvbiBvZiBDYXJsbyBWZXJyZSdzIGhhY2suLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqZWN0Ll9fc2V0YXR0cl9fKHN0ciwgImZvbyIsIDQyKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDYXJsbyBWZXJyZSBfX3NldGF0dHJfXyBzdWNjZWVkZWQhIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqZWN0Ll9fZGVsYXR0cl9fKHN0ciwgImxvd2VyIikKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQ2FybG8gVmVycmUgX19kZWxhdHRyX18gc3VjY2VlZGVkISIpCisKKyAgICBkZWYgdGVzdF93ZWFrcmVmX3NlZ2ZhdWx0KHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgd2Vha3JlZiBzZWdmYXVsdC4uLgorICAgICAgICAjIFNGIDc0MjkxMQorICAgICAgICBpbXBvcnQgd2Vha3JlZgorCisgICAgICAgIGNsYXNzIFByb3Zva2VyOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZmVycmVudCk6CisgICAgICAgICAgICAgICAgc2VsZi5yZWYgPSB3ZWFrcmVmLnJlZihyZWZlcnJlbnQpCisKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHggPSBzZWxmLnJlZigpCisKKyAgICAgICAgY2xhc3MgT29wcyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG8gPSBPb3BzKCkKKyAgICAgICAgby53aGF0ZXZlciA9IFByb3Zva2VyKG8pCisgICAgICAgIGRlbCBvCisKKyAgICBkZWYgdGVzdF93cmFwcGVyX3NlZ2ZhdWx0KHNlbGYpOgorICAgICAgICAjIFNGIDkyNzI0ODogZGVlcGx5IG5lc3RlZCB3cmFwcGVycyBjb3VsZCBjYXVzZSBzdGFjayBvdmVyZmxvdworICAgICAgICBmID0gbGFtYmRhOk5vbmUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMDAwMDApOgorICAgICAgICAgICAgZiA9IGYuX19jYWxsX18KKyAgICAgICAgZiA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2ZpbGVfZmF1bHQoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzeXMuc3Rkb3V0IGlzIGNoYW5nZWQgaW4gZ2V0YXR0ci4uLgorICAgICAgICB0ZXN0X3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgY2xhc3MgU3Rkb3V0R3VhcmQ6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5fX3N0ZG91dF9fCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJQcmVtYXR1cmUgYWNjZXNzIHRvIHN5cy5zdGRvdXQuJXMiICUgYXR0cikKKyAgICAgICAgc3lzLnN0ZG91dCA9IFN0ZG91dEd1YXJkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQgIk9vcHMhIgorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHRlc3Rfc3Rkb3V0CisKKyAgICBkZWYgdGVzdF92aWNpb3VzX2Rlc2NyaXB0b3Jfbm9uc2Vuc2Uoc2VsZik6CisgICAgICAgICMgVGVzdGluZyB2aWNpb3VzX2Rlc2NyaXB0b3Jfbm9uc2Vuc2UuLi4KKworICAgICAgICAjIEEgcG90ZW50aWFsIHNlZ2ZhdWx0IHNwb3R0ZWQgYnkgVGhvbWFzIFdvdXRlcnMgaW4gbWFpbCB0bworICAgICAgICAjIHB5dGhvbi1kZXYgMjAwMy0wNC0xNywgdHVybmVkIGludG8gYW4gZXhhbXBsZSAmIGZpeGVkIGJ5IE1pY2hhZWwKKyAgICAgICAgIyBIdWRzb24ganVzdCBsZXNzIHRoYW4gZm91ciBtb250aHMgbGF0ZXIuLi4KKworICAgICAgICBjbGFzcyBFdmlsKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2goJ2F0dHInKQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgZGVsIEMuYXR0cgorICAgICAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgY2xhc3MgRGVzY3Iob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iLCB0eXBlPU5vbmUpOgorICAgICAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgYXR0ciA9IERlc2NyKCkKKworICAgICAgICBjID0gQygpCisgICAgICAgIGMuX19kaWN0X19bRXZpbCgpXSA9IDAKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYXR0ciwgMSkKKyAgICAgICAgIyB0aGlzIG1ha2VzIGEgY3Jhc2ggbW9yZSBsaWtlbHk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKGMsICdhdHRyJyksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgIyBTRiAxMTU1OTM4CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAxMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBGb28oKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWQgbm90IHRlc3QgX19pbml0X18oKSBmb3IgTm9uZSByZXR1cm4iKQorCisgICAgZGVmIHRlc3RfbWV0aG9kX3dyYXBwZXIoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBtZXRob2Qtd3JhcHBlciBvYmplY3RzLi4uCisgICAgICAgICMgPHR5cGUgJ21ldGhvZC13cmFwcGVyJz4gZGlkIG5vdCBzdXBwb3J0IGFueSByZWZsZWN0aW9uIGJlZm9yZSAyLjUKKworICAgICAgICBsID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLl9fYWRkX18sIGwuX19hZGRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLl9fYWRkX18sIFtdLl9fYWRkX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsLl9fYWRkX18gIT0gWzVdLl9fYWRkX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsLl9fYWRkX18gIT0gbC5fX211bF9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fLl9fbmFtZV9fID09ICdfX2FkZF9fJykKKyAgICAgICAgaWYgaGFzYXR0cihsLl9fYWRkX18sICdfX3NlbGZfXycpOgorICAgICAgICAgICAgIyBDUHl0aG9uCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fLl9fc2VsZl9fIGlzIGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fLl9fb2JqY2xhc3NfXyBpcyBsaXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQeXRob24gaW1wbGVtZW50YXRpb25zIHdoZXJlIFtdLl9fYWRkX18gaXMgYSBub3JtYWwgYm91bmQgbWV0aG9kCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fLmltX3NlbGYgaXMgbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsLl9fYWRkX18uaW1fY2xhc3MgaXMgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLl9fYWRkX18uX19kb2NfXywgbGlzdC5fX2FkZF9fLl9fZG9jX18pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhhc2gobC5fX2FkZF9fKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBUeXBlRXJyb3IgZnJvbSBoYXNoKFtdLl9fYWRkX18pIikKKworICAgICAgICB0ID0gKCkKKyAgICAgICAgdCArPSAoNywpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2FkZF9fLCAoNywpLl9fYWRkX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0Ll9fYWRkX18pLCBoYXNoKCg3LCkuX19hZGRfXykpCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBOb3RJbXBsZW1lbnRlZC4uLgorICAgICAgICAjIGFsbCBiaW5hcnkgbWV0aG9kcyBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gYSBOb3RJbXBsZW1lbnRlZAorICAgICAgICBpbXBvcnQgb3BlcmF0b3IKKworICAgICAgICBkZWYgc3BlY2lhbG1ldGhvZChzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBkZWYgY2hlY2soZXhwciwgeCwgeSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhlYyBleHByIGluIHsneCc6IHgsICd5JzogeSwgJ29wZXJhdG9yJzogb3BlcmF0b3J9CisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBUeXBlRXJyb3IgZnJvbSAlciIgJSAoZXhwciwpKQorCisgICAgICAgIE4xID0gc3lzLm1heGludCArIDFMICAgICMgbWlnaHQgdHJpZ2dlciBPdmVyZmxvd0Vycm9ycyBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVHlwZUVycm9ycworICAgICAgICBOMiA9IHN5cy5tYXhpbnQgICAgICAgICAjIGlmIHNpemVvZihpbnQpIDwgc2l6ZW9mKGxvbmcpLCBtaWdodCB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBWYWx1ZUVycm9ycyBpbnN0ZWFkIG9mIFR5cGVFcnJvcnMKKyAgICAgICAgZm9yIG1ldGFjbGFzcyBpbiBbdHlwZSwgdHlwZXMuQ2xhc3NUeXBlXToKKyAgICAgICAgICAgIGZvciBuYW1lLCBleHByLCBpZXhwciBpbiBbCisgICAgICAgICAgICAgICAgICAgICgnX19hZGRfXycsICAgICAgJ3ggKyB5JywgICAgICAgICAgICAgICAgICAgJ3ggKz0geScpLAorICAgICAgICAgICAgICAgICAgICAoJ19fc3ViX18nLCAgICAgICd4IC0geScsICAgICAgICAgICAgICAgICAgICd4IC09IHknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdfX211bF9fJywgICAgICAneCAqIHknLCAgICAgICAgICAgICAgICAgICAneCAqPSB5JyksCisgICAgICAgICAgICAgICAgICAgICgnX190cnVlZGl2X18nLCAgJ29wZXJhdG9yLnRydWVkaXYoeCwgeSknLCAgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICgnX19mbG9vcmRpdl9fJywgJ29wZXJhdG9yLmZsb29yZGl2KHgsIHkpJywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICgnX19kaXZfXycsICAgICAgJ3ggLyB5JywgICAgICAgICAgICAgICAgICAgJ3ggLz0geScpLAorICAgICAgICAgICAgICAgICAgICAoJ19fbW9kX18nLCAgICAgICd4ICUgeScsICAgICAgICAgICAgICAgICAgICd4ICU9IHknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdfX2Rpdm1vZF9fJywgICAnZGl2bW9kKHgsIHkpJywgICAgICAgICAgICBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgKCdfX3Bvd19fJywgICAgICAneCAqKiB5JywgICAgICAgICAgICAgICAgICAneCAqKj0geScpLAorICAgICAgICAgICAgICAgICAgICAoJ19fbHNoaWZ0X18nLCAgICd4IDw8IHknLCAgICAgICAgICAgICAgICAgICd4IDw8PSB5JyksCisgICAgICAgICAgICAgICAgICAgICgnX19yc2hpZnRfXycsICAgJ3ggPj4geScsICAgICAgICAgICAgICAgICAgJ3ggPj49IHknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdfX2FuZF9fJywgICAgICAneCAmIHknLCAgICAgICAgICAgICAgICAgICAneCAmPSB5JyksCisgICAgICAgICAgICAgICAgICAgICgnX19vcl9fJywgICAgICAgJ3ggfCB5JywgICAgICAgICAgICAgICAgICAgJ3ggfD0geScpLAorICAgICAgICAgICAgICAgICAgICAoJ19feG9yX18nLCAgICAgICd4IF4geScsICAgICAgICAgICAgICAgICAgICd4IF49IHknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdfX2NvZXJjZV9fJywgICAnY29lcmNlKHgsIHkpJywgICAgICAgICAgICBOb25lKV06CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnX19jb2VyY2VfXyc6CisgICAgICAgICAgICAgICAgICAgIHJuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJuYW1lID0gJ19fcicgKyBuYW1lWzI6XQorICAgICAgICAgICAgICAgIEEgPSBtZXRhY2xhc3MoJ0EnLCAoKSwge25hbWU6IHNwZWNpYWxtZXRob2R9KQorICAgICAgICAgICAgICAgIEIgPSBtZXRhY2xhc3MoJ0InLCAoKSwge3JuYW1lOiBzcGVjaWFsbWV0aG9kfSkKKyAgICAgICAgICAgICAgICBhID0gQSgpCisgICAgICAgICAgICAgICAgYiA9IEIoKQorICAgICAgICAgICAgICAgIGNoZWNrKGV4cHIsIGEsIGEpCisgICAgICAgICAgICAgICAgY2hlY2soZXhwciwgYSwgYikKKyAgICAgICAgICAgICAgICBjaGVjayhleHByLCBiLCBhKQorICAgICAgICAgICAgICAgIGNoZWNrKGV4cHIsIGIsIGIpCisgICAgICAgICAgICAgICAgY2hlY2soZXhwciwgYSwgTjEpCisgICAgICAgICAgICAgICAgY2hlY2soZXhwciwgYSwgTjIpCisgICAgICAgICAgICAgICAgY2hlY2soZXhwciwgTjEsIGIpCisgICAgICAgICAgICAgICAgY2hlY2soZXhwciwgTjIsIGIpCisgICAgICAgICAgICAgICAgaWYgaWV4cHI6CisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGlleHByLCBhLCBhKQorICAgICAgICAgICAgICAgICAgICBjaGVjayhpZXhwciwgYSwgYikKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaWV4cHIsIGIsIGEpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGlleHByLCBiLCBiKQorICAgICAgICAgICAgICAgICAgICBjaGVjayhpZXhwciwgYSwgTjEpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGlleHByLCBhLCBOMikKKyAgICAgICAgICAgICAgICAgICAgaW5hbWUgPSAnX19pJyArIG5hbWVbMjpdCisgICAgICAgICAgICAgICAgICAgIEMgPSBtZXRhY2xhc3MoJ0MnLCAoKSwge2luYW1lOiBzcGVjaWFsbWV0aG9kfSkKKyAgICAgICAgICAgICAgICAgICAgYyA9IEMoKQorICAgICAgICAgICAgICAgICAgICBjaGVjayhpZXhwciwgYywgYSkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaWV4cHIsIGMsIGIpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGlleHByLCBjLCBOMSkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaWV4cHIsIGMsIE4yKQorCisgICAgZGVmIHRlc3RfYXNzaWduX3NsaWNlKHNlbGYpOgorICAgICAgICAjIGNldmFsLmMncyBhc3NpZ25fc2xpY2UgdXNlZCB0byBjaGVjayBmb3IKKyAgICAgICAgIyB0cC0+dHBfYXNfc2VxdWVuY2UtPnNxX3NsaWNlIGluc3RlYWQgb2YKKyAgICAgICAgIyB0cC0+dHBfYXNfc2VxdWVuY2UtPnNxX2Fzc19zbGljZQorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3NldHNsaWNlX18oc2VsZiwgc3RhcnQsIHN0b3AsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgICAgICBjID0gQygpCisgICAgICAgIGNbMToyXSA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnZhbHVlLCAzKQorCisgICAgZGVmIHRlc3Rfc2V0X2FuZF9ub19nZXQoc2VsZik6CisgICAgICAgICMgU2VlCisgICAgICAgICMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDEwLUphbnVhcnkvMDk1NjM3Lmh0bWwKKyAgICAgICAgY2xhc3MgRGVzY3Iob2JqZWN0KToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgICAgICAgICAgZGVmIF9fc2V0X18oc2VsZiwgb2JqLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgb2JqLl9fZGljdF9fW3NlbGYubmFtZV0gPSB2YWx1ZQorICAgICAgICBkZXNjciA9IERlc2NyKCJhIikKKworICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBhID0gZGVzY3IKKworICAgICAgICB4ID0gWCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeC5hLCBkZXNjcikKKyAgICAgICAgeC5hID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDQyKQorCisgICAgICAgICMgQWxzbyBjaGVjayB0eXBlX2dldGF0dHJvIGZvciBjb3JyZWN0bmVzcy4KKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE1ldGEKKyAgICAgICAgWC5hID0gNDIKKyAgICAgICAgTWV0YS5hID0gRGVzY3IoImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYSwgNDIpCisKKyAgICBkZWYgdGVzdF9nZXRhdHRyX2hvb2tzKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDQyMzAKKworICAgICAgICBjbGFzcyBEZXNjcmlwdG9yKG9iamVjdCk6CisgICAgICAgICAgICBjb3VudGVyID0gMAorICAgICAgICAgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCBvYmp0eXBlPU5vbmUpOgorICAgICAgICAgICAgICAgIGRlZiBnZXR0ZXIobmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnRlciArPSAxCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcgorCisgICAgICAgIGRlc2NyID0gRGVzY3JpcHRvcigpCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIF9fZ2V0YXR0cmlidXRlX18gPSBkZXNjcgorICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICBfX2dldGF0dHJfXyA9IGRlc2NyCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIF9fZ2V0YXR0cmlidXRlX18gPSBkZXNjcgorICAgICAgICAgICAgX19nZXRhdHRyX18gPSBkZXNjcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBBKCksICJhdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXNjci5jb3VudGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgQigpLCAiYXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzY3IuY291bnRlciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIEMoKSwgImF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2NyLmNvdW50ZXIsIDQpCisKKyAgICAgICAgY2xhc3MgRXZpbEdldGF0dHJpYnV0ZShvYmplY3QpOgorICAgICAgICAgICAgIyBUaGlzIHVzZWQgdG8gc2VnZmF1bHQKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgZGVsIEV2aWxHZXRhdHRyaWJ1dGUuX19nZXRhdHRyX18KKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgRXZpbEdldGF0dHJpYnV0ZSgpLCAiYXR0ciIpCisKKyAgICBkZWYgdGVzdF90eXBlX19fZ2V0YXR0cmlidXRlX18oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZS5fX2dldGF0dHJpYnV0ZV9fLCBsaXN0LCB0eXBlKQorCisgICAgZGVmIHRlc3RfYWJzdHJhY3RtZXRob2RzKHNlbGYpOgorICAgICAgICAjIHR5cGUgcHJldGVuZHMgbm90IHRvIGhhdmUgX19hYnN0cmFjdG1ldGhvZHNfXy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIHR5cGUsICJfX2Fic3RyYWN0bWV0aG9kc19fIikKKyAgICAgICAgY2xhc3MgbWV0YSh0eXBlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIG1ldGEsICJfX2Fic3RyYWN0bWV0aG9kc19fIikKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBYLl9fYWJzdHJhY3RtZXRob2RzX18KKworICAgIGRlZiB0ZXN0X3Byb3h5X2NhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIEZha2VTdHIob2JqZWN0KToKKyAgICAgICAgICAgIF9fY2xhc3NfXyA9IHN0cgorCisgICAgICAgIGZha2Vfc3RyID0gRmFrZVN0cigpCisgICAgICAgICMgaXNpbnN0YW5jZSgpIHJlYWRzIF9fY2xhc3NfXyBvbiBuZXcgc3R5bGUgY2xhc3NlcworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmYWtlX3N0ciwgc3RyKSkKKworICAgICAgICAjIGNhbGwgYSBtZXRob2QgZGVzY3JpcHRvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzdHIuc3BsaXQoZmFrZV9zdHIpCisKKyAgICAgICAgIyBjYWxsIGEgc2xvdCB3cmFwcGVyIGRlc2NyaXB0b3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc3RyLl9fYWRkX18oZmFrZV9zdHIsICJhYmMiKQorCisgICAgZGVmIHRlc3RfcmVwcl9hc19zdHIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExNjAzOiBjcmFzaCBvciBpbmZpbml0ZSBsb29wIHdoZW4gcmViaW5kaW5nIF9fc3RyX18gYXMKKyAgICAgICAgIyBfX3JlcHJfXy4KKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIEZvby5fX3JlcHJfXyA9IEZvby5fX3N0cl9fCisgICAgICAgIGZvbyA9IEZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc3RyLCBmb28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcmVwciwgZm9vKQorCisgICAgZGVmIHRlc3RfbWl4aW5nX3Nsb3Rfd3JhcHBlcnMoc2VsZik6CisgICAgICAgIGNsYXNzIFgoZGljdCk6CisgICAgICAgICAgICBfX3NldGF0dHJfXyA9IGRpY3QuX19zZXRpdGVtX18KKyAgICAgICAgeCA9IFgoKQorICAgICAgICB4LnkgPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbInkiXSwgNDIpCisKKyAgICBkZWYgdGVzdF9jeWNsZV90aHJvdWdoX2RpY3Qoc2VsZik6CisgICAgICAgICMgU2VlIGJ1ZyAjMTQ2OTYyOQorICAgICAgICBjbGFzcyBYKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGRpY3QuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLl9fZGljdF9fID0gc2VsZgorICAgICAgICB4ID0gWCgpCisgICAgICAgIHguYXR0ciA9IDQyCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoeCkKKyAgICAgICAgZGVsIHgKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cigpKQorICAgICAgICBmb3IgbyBpbiBnYy5nZXRfb2JqZWN0cygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh0eXBlKG8pLCBYKQorCitjbGFzcyBEaWN0UHJveHlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgbWV0aChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuQyA9IEMKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2RpY3RfcHJveHkoeycsIHJlcHIodmFycyhzZWxmLkMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiJ21ldGgnOiIsIHJlcHIodmFycyhzZWxmLkMpKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJfa2V5cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGRpY3QtcHJveHkgaXRlcmtleXMuLi4KKyAgICAgICAga2V5cyA9IFsga2V5IGZvciBrZXkgaW4gc2VsZi5DLl9fZGljdF9fLml0ZXJrZXlzKCkgXQorICAgICAgICBrZXlzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIFsnX19kaWN0X18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywKKyAgICAgICAgICAgICdfX3dlYWtyZWZfXycsICdtZXRoJ10pCisKKyAgICBkZWYgdGVzdF9pdGVyX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGRpY3QtcHJveHkgaXRlcnZhbHVlcy4uLgorICAgICAgICB2YWx1ZXMgPSBbIHZhbHVlcyBmb3IgdmFsdWVzIGluIHNlbGYuQy5fX2RpY3RfXy5pdGVydmFsdWVzKCkgXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZXMpLCA1KQorCisgICAgZGVmIHRlc3RfaXRlcl9pdGVtcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGRpY3QtcHJveHkgaXRlcml0ZW1zLi4uCisgICAgICAgIGtleXMgPSBbIGtleSBmb3IgKGtleSwgdmFsdWUpIGluIHNlbGYuQy5fX2RpY3RfXy5pdGVyaXRlbXMoKSBdCisgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgWydfX2RpY3RfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLAorICAgICAgICAgICAgJ19fd2Vha3JlZl9fJywgJ21ldGgnXSkKKworICAgIGRlZiB0ZXN0X2RpY3RfdHlwZV93aXRoX21ldGFjbGFzcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHR5cGUgb2YgX19kaWN0X18gd2hlbiBfX21ldGFjbGFzc19fIHNldC4uLgorICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAjIEluIDIuM2ExLCBDLl9fZGljdF9fIHdhcyBhIHJlYWwgZGljdCByYXRoZXIgdGhhbiBhIGRpY3QgcHJveHkKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShDLl9fZGljdF9fKSwgdHlwZShCLl9fZGljdF9fKSkKKworCitjbGFzcyBQVHlwZXNMb25nSW5pdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhpcyBpcyBpbiBpdHMgb3duIFRlc3RDYXNlIHNvIHRoYXQgaXQgY2FuIGJlIHJ1biBiZWZvcmUgYW55IG90aGVyIHRlc3RzLgorICAgIGRlZiB0ZXN0X3B5dHlwZV9sb25nX3JlYWR5KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgU0YgYnVnIDU1MTQxMiAuLi4KKworICAgICAgICAjIFRoaXMgZHVtcHMgY29yZSB3aGVuIFNGIGJ1ZyA1NTE0MTIgaXNuJ3QgZml4ZWQgLS0KKyAgICAgICAgIyBidXQgb25seSB3aGVuIHRlc3RfZGVzY3IucHkgaXMgcnVuIHNlcGFyYXRlbHkuCisgICAgICAgICMgKFRoYXQgY2FuJ3QgYmUgaGVscGVkIC0tIGFzIHNvb24gYXMgUHlUeXBlX1JlYWR5KCkKKyAgICAgICAgIyBpcyBjYWxsZWQgZm9yIFB5TG9uZ19UeXBlLCB0aGUgYnVnIGlzIGdvbmUuKQorICAgICAgICBjbGFzcyBVc2VyTG9uZyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcG93X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcG93KDBMLCBVc2VyTG9uZygpLCAwTCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgQW5vdGhlciBzZWdmYXVsdCBvbmx5IHdoZW4gcnVuIGVhcmx5CisgICAgICAgICMgKGJlZm9yZSBQeVR5cGVfUmVhZHkodHVwbGUpIGlzIGNhbGxlZCkKKyAgICAgICAgdHlwZS5tcm8odHVwbGUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGRlcHJlY2F0aW9ucyA9IFsocidjb21wbGV4IGRpdm1vZFwoXCksIC8vIGFuZCAlIGFyZSBkZXByZWNhdGVkJCcsCisgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpXQorICAgIGlmIHN5cy5weTNrd2FybmluZzoKKyAgICAgICAgZGVwcmVjYXRpb25zICs9IFsKKyAgICAgICAgICAgICgiY2xhc3NpYyAoaW50fGxvbmcpIGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICgiY29lcmNlLi4gbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoIi4rX18oZ2V0fHNldHxkZWwpc2xpY2VfXyBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKV0KKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygqZGVwcmVjYXRpb25zKToKKyAgICAgICAgIyBSdW4gYWxsIGxvY2FsIHRlc3QgY2FzZXMsIHdpdGggUFR5cGVzTG9uZ0luaXRUZXN0IGZpcnN0LgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFBUeXBlc0xvbmdJbml0VGVzdCwgT3BlcmF0b3JzVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1Byb3BlcnRpZXNBbmRNZXRob2RzLCBEaWN0UHJveHlUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVzY3J0dXQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kZXNjcnR1dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2ZmMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGVzY3J0dXQucHkKQEAgLTAsMCArMSw0OTcgQEAKKyMgVGhpcyBjb250YWlucyBtb3N0IG9mIHRoZSBleGVjdXRhYmxlIGV4YW1wbGVzIGZyb20gR3VpZG8ncyBkZXNjcgorIyB0dXRvcmlhbCwgb25jZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5weXRob24ub3JnLzIuMi9kZXNjcmludHJvLmh0bWwKKyMKKyMgQSBmZXcgZXhhbXBsZXMgbGVmdCBpbXBsaWNpdCBpbiB0aGUgd3JpdGV1cCB3ZXJlIGZsZXNoZWQgb3V0LCBhIGZldyB3ZXJlCisjIHNraXBwZWQgZHVlIHRvIGxhY2sgb2YgaW50ZXJlc3QgKGUuZy4sIGZha2luZyBzdXBlcigpIGJ5IGhhbmQgaXNuJ3QKKyMgb2YgbXVjaCBpbnRlcmVzdCBhbnltb3JlKSwgYW5kIGEgZmV3IHdlcmUgZmlkZGxlZCB0byBtYWtlIHRoZSBvdXRwdXQKKyMgZGV0ZXJtaW5pc3RpYy4KKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgc29ydGRpY3QKK2ltcG9ydCBwcHJpbnQKKworY2xhc3MgZGVmYXVsdGRpY3QoZGljdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIGRpY3QuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5kZWZhdWx0ID0gZGVmYXVsdAorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBkaWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdAorCisgICAgZGVmIGdldChzZWxmLCBrZXksICphcmdzKToKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICBhcmdzID0gKHNlbGYuZGVmYXVsdCwpCisgICAgICAgIHJldHVybiBkaWN0LmdldChzZWxmLCBrZXksICphcmdzKQorCisgICAgZGVmIG1lcmdlKHNlbGYsIG90aGVyKToKKyAgICAgICAgZm9yIGtleSBpbiBvdGhlcjoKKyAgICAgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCisKK3Rlc3RfMSA9ICIiIgorCitIZXJlJ3MgdGhlIG5ldyB0eXBlIGF0IHdvcms6CisKKyAgICA+Pj4gcHJpbnQgZGVmYXVsdGRpY3QgICAgICAgICAgICAgICAjIHNob3cgb3VyIHR5cGUKKyAgICA8Y2xhc3MgJ3Rlc3QudGVzdF9kZXNjcnR1dC5kZWZhdWx0ZGljdCc+CisgICAgPj4+IHByaW50IHR5cGUoZGVmYXVsdGRpY3QpICAgICAgICAgIyBpdHMgbWV0YXR5cGUKKyAgICA8dHlwZSAndHlwZSc+CisgICAgPj4+IGEgPSBkZWZhdWx0ZGljdChkZWZhdWx0PTAuMCkgICAgIyBjcmVhdGUgYW4gaW5zdGFuY2UKKyAgICA+Pj4gcHJpbnQgYSAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgdGhlIGluc3RhbmNlCisgICAge30KKyAgICA+Pj4gcHJpbnQgdHlwZShhKSAgICAgICAgICAgICAgICAgICAjIHNob3cgaXRzIHR5cGUKKyAgICA8Y2xhc3MgJ3Rlc3QudGVzdF9kZXNjcnR1dC5kZWZhdWx0ZGljdCc+CisgICAgPj4+IHByaW50IGEuX19jbGFzc19fICAgICAgICAgICAgICAgIyBzaG93IGl0cyBjbGFzcworICAgIDxjbGFzcyAndGVzdC50ZXN0X2Rlc2NydHV0LmRlZmF1bHRkaWN0Jz4KKyAgICA+Pj4gcHJpbnQgdHlwZShhKSBpcyBhLl9fY2xhc3NfXyAgICAjIGl0cyB0eXBlIGlzIGl0cyBjbGFzcworICAgIFRydWUKKyAgICA+Pj4gYVsxXSA9IDMuMjUgICAgICAgICAgICAgICAgICAgICAjIG1vZGlmeSB0aGUgaW5zdGFuY2UKKyAgICA+Pj4gcHJpbnQgYSAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgdGhlIG5ldyB2YWx1ZQorICAgIHsxOiAzLjI1fQorICAgID4+PiBwcmludCBhWzFdICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgbmV3IGl0ZW0KKyAgICAzLjI1CisgICAgPj4+IHByaW50IGFbMF0gICAgICAgICAgICAgICAgICAgICAgIyBhIG5vbi1leGlzdGVudCBpdGVtCisgICAgMC4wCisgICAgPj4+IGEubWVyZ2UoezE6MTAwLCAyOjIwMH0pICAgICAgICAgIyB1c2UgYSBkaWN0IG1ldGhvZAorICAgID4+PiBwcmludCBzb3J0ZGljdChhKSAgICAgICAgICAgICAgICMgc2hvdyB0aGUgcmVzdWx0CisgICAgezE6IDMuMjUsIDI6IDIwMH0KKyAgICA+Pj4KKworV2UgY2FuIGFsc28gdXNlIHRoZSBuZXcgdHlwZSBpbiBjb250ZXh0cyB3aGVyZSBjbGFzc2ljIG9ubHkgYWxsb3dzICJyZWFsIgorZGljdGlvbmFyaWVzLCBzdWNoIGFzIHRoZSBsb2NhbHMvZ2xvYmFscyBkaWN0aW9uYXJpZXMgZm9yIHRoZSBleGVjCitzdGF0ZW1lbnQgb3IgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGV2YWwoKToKKworICAgID4+PiBkZWYgc29ydGVkKHNlcSk6CisgICAgLi4uICAgICBzZXEuc29ydChrZXk9c3RyKQorICAgIC4uLiAgICAgcmV0dXJuIHNlcQorICAgID4+PiBwcmludCBzb3J0ZWQoYS5rZXlzKCkpCisgICAgWzEsIDJdCisgICAgPj4+IGV4ZWMgInggPSAzOyBwcmludCB4IiBpbiBhCisgICAgMworICAgID4+PiBwcmludCBzb3J0ZWQoYS5rZXlzKCkpCisgICAgWzEsIDIsICdfX2J1aWx0aW5zX18nLCAneCddCisgICAgPj4+IHByaW50IGFbJ3gnXQorICAgIDMKKyAgICA+Pj4KKworTm93IEknbGwgc2hvdyB0aGF0IGRlZmF1bHRkaWN0IGluc3RhbmNlcyBoYXZlIGR5bmFtaWMgaW5zdGFuY2UgdmFyaWFibGVzLAoranVzdCBsaWtlIGNsYXNzaWMgY2xhc3NlczoKKworICAgID4+PiBhLmRlZmF1bHQgPSAtMQorICAgID4+PiBwcmludCBhWyJub3dheSJdCisgICAgLTEKKyAgICA+Pj4gYS5kZWZhdWx0ID0gLTEwMDAKKyAgICA+Pj4gcHJpbnQgYVsibm93YXkiXQorICAgIC0xMDAwCisgICAgPj4+ICdkZWZhdWx0JyBpbiBkaXIoYSkKKyAgICBUcnVlCisgICAgPj4+IGEueDEgPSAxMDAKKyAgICA+Pj4gYS54MiA9IDIwMAorICAgID4+PiBwcmludCBhLngxCisgICAgMTAwCisgICAgPj4+IGQgPSBkaXIoYSkKKyAgICA+Pj4gJ2RlZmF1bHQnIGluIGQgYW5kICd4MScgaW4gZCBhbmQgJ3gyJyBpbiBkCisgICAgVHJ1ZQorICAgID4+PiBwcmludCBzb3J0ZGljdChhLl9fZGljdF9fKQorICAgIHsnZGVmYXVsdCc6IC0xMDAwLCAneDEnOiAxMDAsICd4Mic6IDIwMH0KKyAgICA+Pj4KKyIiIgorCitjbGFzcyBkZWZhdWx0ZGljdDIoZGljdCk6CisgICAgX19zbG90c19fID0gWydkZWZhdWx0J10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICBkaWN0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHQKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCAqYXJncyk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgYXJncyA9IChzZWxmLmRlZmF1bHQsKQorICAgICAgICByZXR1cm4gZGljdC5nZXQoc2VsZiwga2V5LCAqYXJncykKKworICAgIGRlZiBtZXJnZShzZWxmLCBvdGhlcik6CisgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6CisgICAgICAgICAgICBpZiBrZXkgbm90IGluIHNlbGY6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQorCit0ZXN0XzIgPSAiIiIKKworVGhlIF9fc2xvdHNfXyBkZWNsYXJhdGlvbiB0YWtlcyBhIGxpc3Qgb2YgaW5zdGFuY2UgdmFyaWFibGVzLCBhbmQgcmVzZXJ2ZXMKK3NwYWNlIGZvciBleGFjdGx5IHRoZXNlIGluIHRoZSBpbnN0YW5jZS4gV2hlbiBfX3Nsb3RzX18gaXMgdXNlZCwgb3RoZXIKK2luc3RhbmNlIHZhcmlhYmxlcyBjYW5ub3QgYmUgYXNzaWduZWQgdG86CisKKyAgICA+Pj4gYSA9IGRlZmF1bHRkaWN0MihkZWZhdWx0PTAuMCkKKyAgICA+Pj4gYVsxXQorICAgIDAuMAorICAgID4+PiBhLmRlZmF1bHQgPSAtMQorICAgID4+PiBhWzFdCisgICAgLTEKKyAgICA+Pj4gYS54MSA9IDEKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CisgICAgQXR0cmlidXRlRXJyb3I6ICdkZWZhdWx0ZGljdDInIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICd4MScKKyAgICA+Pj4KKworIiIiCisKK3Rlc3RfMyA9ICIiIgorCitJbnRyb3NwZWN0aW5nIGluc3RhbmNlcyBvZiBidWlsdC1pbiB0eXBlcworCitGb3IgaW5zdGFuY2Ugb2YgYnVpbHQtaW4gdHlwZXMsIHguX19jbGFzc19fIGlzIG5vdyB0aGUgc2FtZSBhcyB0eXBlKHgpOgorCisgICAgPj4+IHR5cGUoW10pCisgICAgPHR5cGUgJ2xpc3QnPgorICAgID4+PiBbXS5fX2NsYXNzX18KKyAgICA8dHlwZSAnbGlzdCc+CisgICAgPj4+IGxpc3QKKyAgICA8dHlwZSAnbGlzdCc+CisgICAgPj4+IGlzaW5zdGFuY2UoW10sIGxpc3QpCisgICAgVHJ1ZQorICAgID4+PiBpc2luc3RhbmNlKFtdLCBkaWN0KQorICAgIEZhbHNlCisgICAgPj4+IGlzaW5zdGFuY2UoW10sIG9iamVjdCkKKyAgICBUcnVlCisgICAgPj4+CisKK1VuZGVyIHRoZSBuZXcgcHJvcG9zYWwsIHRoZSBfX21ldGhvZHNfXyBhdHRyaWJ1dGUgbm8gbG9uZ2VyIGV4aXN0czoKKworICAgID4+PiBbXS5fX21ldGhvZHNfXworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KKyAgICBBdHRyaWJ1dGVFcnJvcjogJ2xpc3QnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdfX21ldGhvZHNfXycKKyAgICA+Pj4KKworSW5zdGVhZCwgeW91IGNhbiBnZXQgdGhlIHNhbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgbGlzdCB0eXBlOgorCisgICAgPj4+IHBwcmludC5wcHJpbnQoZGlyKGxpc3QpKSAgICAjIGxpa2UgbGlzdC5fX2RpY3RfXy5rZXlzKCksIGJ1dCBzb3J0ZWQKKyAgICBbJ19fYWRkX18nLAorICAgICAnX19jbGFzc19fJywKKyAgICAgJ19fY29udGFpbnNfXycsCisgICAgICdfX2RlbGF0dHJfXycsCisgICAgICdfX2RlbGl0ZW1fXycsCisgICAgICdfX2RlbHNsaWNlX18nLAorICAgICAnX19kb2NfXycsCisgICAgICdfX2VxX18nLAorICAgICAnX19mb3JtYXRfXycsCisgICAgICdfX2dlX18nLAorICAgICAnX19nZXRhdHRyaWJ1dGVfXycsCisgICAgICdfX2dldGl0ZW1fXycsCisgICAgICdfX2dldHNsaWNlX18nLAorICAgICAnX19ndF9fJywKKyAgICAgJ19faGFzaF9fJywKKyAgICAgJ19faWFkZF9fJywKKyAgICAgJ19faW11bF9fJywKKyAgICAgJ19faW5pdF9fJywKKyAgICAgJ19faXRlcl9fJywKKyAgICAgJ19fbGVfXycsCisgICAgICdfX2xlbl9fJywKKyAgICAgJ19fbHRfXycsCisgICAgICdfX211bF9fJywKKyAgICAgJ19fbmVfXycsCisgICAgICdfX25ld19fJywKKyAgICAgJ19fcmVkdWNlX18nLAorICAgICAnX19yZWR1Y2VfZXhfXycsCisgICAgICdfX3JlcHJfXycsCisgICAgICdfX3JldmVyc2VkX18nLAorICAgICAnX19ybXVsX18nLAorICAgICAnX19zZXRhdHRyX18nLAorICAgICAnX19zZXRpdGVtX18nLAorICAgICAnX19zZXRzbGljZV9fJywKKyAgICAgJ19fc2l6ZW9mX18nLAorICAgICAnX19zdHJfXycsCisgICAgICdfX3N1YmNsYXNzaG9va19fJywKKyAgICAgJ2FwcGVuZCcsCisgICAgICdjb3VudCcsCisgICAgICdleHRlbmQnLAorICAgICAnaW5kZXgnLAorICAgICAnaW5zZXJ0JywKKyAgICAgJ3BvcCcsCisgICAgICdyZW1vdmUnLAorICAgICAncmV2ZXJzZScsCisgICAgICdzb3J0J10KKworVGhlIG5ldyBpbnRyb3NwZWN0aW9uIEFQSSBnaXZlcyBtb3JlIGluZm9ybWF0aW9uIHRoYW4gdGhlIG9sZCBvbmU6ICBpbgorYWRkaXRpb24gdG8gdGhlIHJlZ3VsYXIgbWV0aG9kcywgaXQgYWxzbyBzaG93cyB0aGUgbWV0aG9kcyB0aGF0IGFyZQorbm9ybWFsbHkgaW52b2tlZCB0aHJvdWdoIHNwZWNpYWwgbm90YXRpb25zLCBlLmcuIF9faWFkZF9fICgrPSksIF9fbGVuX18KKyhsZW4pLCBfX25lX18gKCE9KS4gWW91IGNhbiBpbnZva2UgYW55IG1ldGhvZCBmcm9tIHRoaXMgbGlzdCBkaXJlY3RseToKKworICAgID4+PiBhID0gWyd0aWMnLCAndGFjJ10KKyAgICA+Pj4gbGlzdC5fX2xlbl9fKGEpICAgICAgICAgICMgc2FtZSBhcyBsZW4oYSkKKyAgICAyCisgICAgPj4+IGEuX19sZW5fXygpICAgICAgICAgICAgICAjIGRpdHRvCisgICAgMgorICAgID4+PiBsaXN0LmFwcGVuZChhLCAndG9lJykgICAgIyBzYW1lIGFzIGEuYXBwZW5kKCd0b2UnKQorICAgID4+PiBhCisgICAgWyd0aWMnLCAndGFjJywgJ3RvZSddCisgICAgPj4+CisKK1RoaXMgaXMganVzdCBsaWtlIGl0IGlzIGZvciB1c2VyLWRlZmluZWQgY2xhc3Nlcy4KKyIiIgorCit0ZXN0XzQgPSAiIiIKKworU3RhdGljIG1ldGhvZHMgYW5kIGNsYXNzIG1ldGhvZHMKKworVGhlIG5ldyBpbnRyb3NwZWN0aW9uIEFQSSBtYWtlcyBpdCBwb3NzaWJsZSB0byBhZGQgc3RhdGljIG1ldGhvZHMgYW5kIGNsYXNzCittZXRob2RzLiBTdGF0aWMgbWV0aG9kcyBhcmUgZWFzeSB0byBkZXNjcmliZTogdGhleSBiZWhhdmUgcHJldHR5IG11Y2ggbGlrZQorc3RhdGljIG1ldGhvZHMgaW4gQysrIG9yIEphdmEuIEhlcmUncyBhbiBleGFtcGxlOgorCisgICAgPj4+IGNsYXNzIEM6CisgICAgLi4uCisgICAgLi4uICAgICBAc3RhdGljbWV0aG9kCisgICAgLi4uICAgICBkZWYgZm9vKHgsIHkpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJzdGF0aWNtZXRob2QiLCB4LCB5CisKKyAgICA+Pj4gQy5mb28oMSwgMikKKyAgICBzdGF0aWNtZXRob2QgMSAyCisgICAgPj4+IGMgPSBDKCkKKyAgICA+Pj4gYy5mb28oMSwgMikKKyAgICBzdGF0aWNtZXRob2QgMSAyCisKK0NsYXNzIG1ldGhvZHMgdXNlIGEgc2ltaWxhciBwYXR0ZXJuIHRvIGRlY2xhcmUgbWV0aG9kcyB0aGF0IHJlY2VpdmUgYW4KK2ltcGxpY2l0IGZpcnN0IGFyZ3VtZW50IHRoYXQgaXMgdGhlICpjbGFzcyogZm9yIHdoaWNoIHRoZXkgYXJlIGludm9rZWQuCisKKyAgICA+Pj4gY2xhc3MgQzoKKyAgICAuLi4gICAgIEBjbGFzc21ldGhvZAorICAgIC4uLiAgICAgZGVmIGZvbyhjbHMsIHkpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJjbGFzc21ldGhvZCIsIGNscywgeQorCisgICAgPj4+IEMuZm9vKDEpCisgICAgY2xhc3NtZXRob2QgdGVzdC50ZXN0X2Rlc2NydHV0LkMgMQorICAgID4+PiBjID0gQygpCisgICAgPj4+IGMuZm9vKDEpCisgICAgY2xhc3NtZXRob2QgdGVzdC50ZXN0X2Rlc2NydHV0LkMgMQorCisgICAgPj4+IGNsYXNzIEQoQyk6CisgICAgLi4uICAgICBwYXNzCisKKyAgICA+Pj4gRC5mb28oMSkKKyAgICBjbGFzc21ldGhvZCB0ZXN0LnRlc3RfZGVzY3J0dXQuRCAxCisgICAgPj4+IGQgPSBEKCkKKyAgICA+Pj4gZC5mb28oMSkKKyAgICBjbGFzc21ldGhvZCB0ZXN0LnRlc3RfZGVzY3J0dXQuRCAxCisKK1RoaXMgcHJpbnRzICJjbGFzc21ldGhvZCBfX21haW5fXy5EIDEiIGJvdGggdGltZXM7IGluIG90aGVyIHdvcmRzLCB0aGUKK2NsYXNzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgb2YgZm9vKCkgaXMgdGhlIGNsYXNzIGludm9sdmVkIGluIHRoZQorY2FsbCwgbm90IHRoZSBjbGFzcyBpbnZvbHZlZCBpbiB0aGUgZGVmaW5pdGlvbiBvZiBmb28oKS4KKworQnV0IG5vdGljZSB0aGlzOgorCisgICAgPj4+IGNsYXNzIEUoQyk6CisgICAgLi4uICAgICBAY2xhc3NtZXRob2QKKyAgICAuLi4gICAgIGRlZiBmb28oY2xzLCB5KTogIyBvdmVycmlkZSBDLmZvbworICAgIC4uLiAgICAgICAgIHByaW50ICJFLmZvbygpIGNhbGxlZCIKKyAgICAuLi4gICAgICAgICBDLmZvbyh5KQorCisgICAgPj4+IEUuZm9vKDEpCisgICAgRS5mb28oKSBjYWxsZWQKKyAgICBjbGFzc21ldGhvZCB0ZXN0LnRlc3RfZGVzY3J0dXQuQyAxCisgICAgPj4+IGUgPSBFKCkKKyAgICA+Pj4gZS5mb28oMSkKKyAgICBFLmZvbygpIGNhbGxlZAorICAgIGNsYXNzbWV0aG9kIHRlc3QudGVzdF9kZXNjcnR1dC5DIDEKKworSW4gdGhpcyBleGFtcGxlLCB0aGUgY2FsbCB0byBDLmZvbygpIGZyb20gRS5mb28oKSB3aWxsIHNlZSBjbGFzcyBDIGFzIGl0cworZmlyc3QgYXJndW1lbnQsIG5vdCBjbGFzcyBFLiBUaGlzIGlzIHRvIGJlIGV4cGVjdGVkLCBzaW5jZSB0aGUgY2FsbAorc3BlY2lmaWVzIHRoZSBjbGFzcyBDLiBCdXQgaXQgc3RyZXNzZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBjbGFzcworbWV0aG9kcyBhbmQgbWV0aG9kcyBkZWZpbmVkIGluIG1ldGFjbGFzc2VzICh3aGVyZSBhbiB1cGNhbGwgdG8gYSBtZXRhbWV0aG9kCit3b3VsZCBwYXNzIHRoZSB0YXJnZXQgY2xhc3MgYXMgYW4gZXhwbGljaXQgZmlyc3QgYXJndW1lbnQpLgorIiIiCisKK3Rlc3RfNSA9ICIiIgorCitBdHRyaWJ1dGVzIGRlZmluZWQgYnkgZ2V0L3NldCBtZXRob2RzCisKKworICAgID4+PiBjbGFzcyBwcm9wZXJ0eShvYmplY3QpOgorICAgIC4uLgorICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdldCwgc2V0PU5vbmUpOgorICAgIC4uLiAgICAgICAgIHNlbGYuX19nZXQgPSBnZXQKKyAgICAuLi4gICAgICAgICBzZWxmLl9fc2V0ID0gc2V0CisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19nZXRfXyhzZWxmLCBpbnN0LCB0eXBlPU5vbmUpOgorICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLl9fZ2V0KGluc3QpCisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19zZXRfXyhzZWxmLCBpbnN0LCB2YWx1ZSk6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5fX3NldCBpcyBOb25lOgorICAgIC4uLiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgInRoaXMgYXR0cmlidXRlIGlzIHJlYWQtb25seSIKKyAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fX3NldChpbnN0LCB2YWx1ZSkKKworTm93IGxldCdzIGRlZmluZSBhIGNsYXNzIHdpdGggYW4gYXR0cmlidXRlIHggZGVmaW5lZCBieSBhIHBhaXIgb2YgbWV0aG9kcywKK2dldHgoKSBhbmQgc2V0eCgpOgorCisgICAgPj4+IGNsYXNzIEMob2JqZWN0KToKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAuLi4gICAgICAgICBzZWxmLl9feCA9IDAKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBnZXR4KHNlbGYpOgorICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLl9feAorICAgIC4uLgorICAgIC4uLiAgICAgZGVmIHNldHgoc2VsZiwgeCk6CisgICAgLi4uICAgICAgICAgaWYgeCA8IDA6IHggPSAwCisgICAgLi4uICAgICAgICAgc2VsZi5fX3ggPSB4CisgICAgLi4uCisgICAgLi4uICAgICB4ID0gcHJvcGVydHkoZ2V0eCwgc2V0eCkKKworSGVyZSdzIGEgc21hbGwgZGVtb25zdHJhdGlvbjoKKworICAgID4+PiBhID0gQygpCisgICAgPj4+IGEueCA9IDEwCisgICAgPj4+IHByaW50IGEueAorICAgIDEwCisgICAgPj4+IGEueCA9IC0xMAorICAgID4+PiBwcmludCBhLngKKyAgICAwCisgICAgPj4+CisKK0htbSAtLSBwcm9wZXJ0eSBpcyBidWlsdGluIG5vdywgc28gbGV0J3MgdHJ5IGl0IHRoYXQgd2F5IHRvby4KKworICAgID4+PiBkZWwgcHJvcGVydHkgICMgdW5tYXNrIHRoZSBidWlsdGluCisgICAgPj4+IHByb3BlcnR5CisgICAgPHR5cGUgJ3Byb3BlcnR5Jz4KKworICAgID4+PiBjbGFzcyBDKG9iamVjdCk6CisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgLi4uICAgICAgICAgc2VsZi5fX3ggPSAwCisgICAgLi4uICAgICBkZWYgZ2V0eChzZWxmKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fX3gKKyAgICAuLi4gICAgIGRlZiBzZXR4KHNlbGYsIHgpOgorICAgIC4uLiAgICAgICAgIGlmIHggPCAwOiB4ID0gMAorICAgIC4uLiAgICAgICAgIHNlbGYuX194ID0geAorICAgIC4uLiAgICAgeCA9IHByb3BlcnR5KGdldHgsIHNldHgpCisKKworICAgID4+PiBhID0gQygpCisgICAgPj4+IGEueCA9IDEwCisgICAgPj4+IHByaW50IGEueAorICAgIDEwCisgICAgPj4+IGEueCA9IC0xMAorICAgID4+PiBwcmludCBhLngKKyAgICAwCisgICAgPj4+CisiIiIKKwordGVzdF82ID0gIiIiCisKK01ldGhvZCByZXNvbHV0aW9uIG9yZGVyCisKK1RoaXMgZXhhbXBsZSBpcyBpbXBsaWNpdCBpbiB0aGUgd3JpdGV1cC4KKworPj4+IGNsYXNzIEE6ICAgICMgY2xhc3NpYyBjbGFzcworLi4uICAgICBkZWYgc2F2ZShzZWxmKToKKy4uLiAgICAgICAgIHByaW50ICJjYWxsZWQgQS5zYXZlKCkiCis+Pj4gY2xhc3MgQihBKToKKy4uLiAgICAgcGFzcworPj4+IGNsYXNzIEMoQSk6CisuLi4gICAgIGRlZiBzYXZlKHNlbGYpOgorLi4uICAgICAgICAgcHJpbnQgImNhbGxlZCBDLnNhdmUoKSIKKz4+PiBjbGFzcyBEKEIsIEMpOgorLi4uICAgICBwYXNzCisKKz4+PiBEKCkuc2F2ZSgpCitjYWxsZWQgQS5zYXZlKCkKKworPj4+IGNsYXNzIEEob2JqZWN0KTogICMgbmV3IGNsYXNzCisuLi4gICAgIGRlZiBzYXZlKHNlbGYpOgorLi4uICAgICAgICAgcHJpbnQgImNhbGxlZCBBLnNhdmUoKSIKKz4+PiBjbGFzcyBCKEEpOgorLi4uICAgICBwYXNzCis+Pj4gY2xhc3MgQyhBKToKKy4uLiAgICAgZGVmIHNhdmUoc2VsZik6CisuLi4gICAgICAgICBwcmludCAiY2FsbGVkIEMuc2F2ZSgpIgorPj4+IGNsYXNzIEQoQiwgQyk6CisuLi4gICAgIHBhc3MKKworPj4+IEQoKS5zYXZlKCkKK2NhbGxlZCBDLnNhdmUoKQorIiIiCisKK2NsYXNzIEEob2JqZWN0KToKKyAgICBkZWYgbShzZWxmKToKKyAgICAgICAgcmV0dXJuICJBIgorCitjbGFzcyBCKEEpOgorICAgIGRlZiBtKHNlbGYpOgorICAgICAgICByZXR1cm4gIkIiICsgc3VwZXIoQiwgc2VsZikubSgpCisKK2NsYXNzIEMoQSk6CisgICAgZGVmIG0oc2VsZik6CisgICAgICAgIHJldHVybiAiQyIgKyBzdXBlcihDLCBzZWxmKS5tKCkKKworY2xhc3MgRChDLCBCKToKKyAgICBkZWYgbShzZWxmKToKKyAgICAgICAgcmV0dXJuICJEIiArIHN1cGVyKEQsIHNlbGYpLm0oKQorCisKK3Rlc3RfNyA9ICIiIgorCitDb29wZXJhdGl2ZSBtZXRob2RzIGFuZCAic3VwZXIiCisKKz4+PiBwcmludCBEKCkubSgpICMgIkRDQkEiCitEQ0JBCisiIiIKKwordGVzdF84ID0gIiIiCisKK0JhY2t3YXJkcyBpbmNvbXBhdGliaWxpdGllcworCis+Pj4gY2xhc3MgQToKKy4uLiAgICAgZGVmIGZvbyhzZWxmKToKKy4uLiAgICAgICAgIHByaW50ICJjYWxsZWQgQS5mb28oKSIKKworPj4+IGNsYXNzIEIoQSk6CisuLi4gICAgIHBhc3MKKworPj4+IGNsYXNzIEMoQSk6CisuLi4gICAgIGRlZiBmb28oc2VsZik6CisuLi4gICAgICAgICBCLmZvbyhzZWxmKQorCis+Pj4gQygpLmZvbygpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgLi4uCitUeXBlRXJyb3I6IHVuYm91bmQgbWV0aG9kIGZvbygpIG11c3QgYmUgY2FsbGVkIHdpdGggQiBpbnN0YW5jZSBhcyBmaXJzdCBhcmd1bWVudCAoZ290IEMgaW5zdGFuY2UgaW5zdGVhZCkKKworPj4+IGNsYXNzIEMoQSk6CisuLi4gICAgIGRlZiBmb28oc2VsZik6CisuLi4gICAgICAgICBBLmZvbyhzZWxmKQorPj4+IEMoKS5mb28oKQorY2FsbGVkIEEuZm9vKCkKKyIiIgorCitfX3Rlc3RfXyA9IHsidHV0MSI6IHRlc3RfMSwKKyAgICAgICAgICAgICJ0dXQyIjogdGVzdF8yLAorICAgICAgICAgICAgInR1dDMiOiB0ZXN0XzMsCisgICAgICAgICAgICAidHV0NCI6IHRlc3RfNCwKKyAgICAgICAgICAgICJ0dXQ1IjogdGVzdF81LAorICAgICAgICAgICAgInR1dDYiOiB0ZXN0XzYsCisgICAgICAgICAgICAidHV0NyI6IHRlc3RfNywKKyAgICAgICAgICAgICJ0dXQ4IjogdGVzdF84fQorCisjIE1hZ2ljIHRlc3QgbmFtZSB0aGF0IHJlZ3J0ZXN0LnB5IGludm9rZXMgKmFmdGVyKiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUuCisjIFRoaXMgd29ybXMgYXJvdW5kIGEgYm9vdHN0cmFwIHByb2JsZW0uCisjIE5vdGUgdGhhdCBkb2N0ZXN0IGFuZCByZWdydGVzdCBib3RoIGxvb2sgaW4gc3lzLmFyZ3YgZm9yIGEgIi12IiBhcmd1bWVudCwKKyMgc28gdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBpbiBib3RoIHdheXMgb2YgcnVubmluZyByZWdydGVzdC4KK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICAjIE9ic2N1cmU6ICBpbXBvcnQgdGhpcyBtb2R1bGUgYXMgdGVzdC50ZXN0X2Rlc2NydHV0IGluc3RlYWQgb2YgYXMKKyAgICAjIHBsYWluIHRlc3RfZGVzY3J0dXQgYmVjYXVzZSB0aGUgbmFtZSBvZiB0aGlzIG1vZHVsZSB3b3JrcyBpdHMgd2F5CisgICAgIyBpbnRvIHRoZSBkb2N0ZXN0IGV4YW1wbGVzLCBhbmQgdW5sZXNzIHRoZSBmdWxsIHRlc3QudGVzdF9kZXNjcnR1dAorICAgICMgYnVzaW5lc3MgaXMgdXNlZCB0aGUgbmFtZSBjYW4gY2hhbmdlIGRlcGVuZGluZyBvbiBob3cgdGhlIHRlc3QgaXMKKyAgICAjIGludm9rZWQuCisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHRlc3RfZGVzY3J0dXQKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9kZXNjcnR1dCwgdmVyYm9zZSkKKworIyBUaGlzIHBhcnQgaXNuJ3QgbmVlZGVkIGZvciByZWdydGVzdCwgYnV0IGZvciBydW5uaW5nIHRoZSB0ZXN0IGRpcmVjdGx5LgoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oMSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RpY3QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kaWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDBmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kaWN0LnB5CkBAIC0wLDAgKzEsNzA0IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCBVc2VyRGljdCwgcmFuZG9tLCBzdHJpbmcKK2ltcG9ydCBnYywgd2Vha3JlZgorCisKK2NsYXNzIERpY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgIyBjYWxsaW5nIGJ1aWx0LWluIHR5cGVzIHdpdGhvdXQgYXJndW1lbnQgbXVzdCByZXR1cm4gZW1wdHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGRpY3QoKSwge30pCisKKyAgICBkZWYgdGVzdF9saXRlcmFsX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGxpdGVyYWwgY29uc3RydWN0b3IgZm9yIGRpZmZlcmVudCBzaXplZCBkaWN0cworICAgICAgICAjICh0byBleGVyY2lzZSB0aGUgQlVJTERfTUFQIG9wYXJnKS4KKyAgICAgICAgZm9yIG4gaW4gKDAsIDEsIDYsIDI1NiwgNDAwKToKKyAgICAgICAgICAgIGl0ZW1zID0gWygnJy5qb2luKHJhbmRvbS5zYW1wbGUoc3RyaW5nLmxldHRlcnMsIDgpKSwgaSkKKyAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG4pXQorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoaXRlbXMpCisgICAgICAgICAgICBmb3JtYXR0ZWRfaXRlbXMgPSAoJ3shcn06IHs6ZH0nLmZvcm1hdChrLCB2KSBmb3IgaywgdiBpbiBpdGVtcykKKyAgICAgICAgICAgIGRpY3RsaXRlcmFsID0gJ3snICsgJywgJy5qb2luKGZvcm1hdHRlZF9pdGVtcykgKyAnfScKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChkaWN0bGl0ZXJhbCksIGRpY3QoaXRlbXMpKQorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhub3Qge30sIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh7MTogMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbCh7fSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woezE6IDJ9KSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQua2V5cygpLCBbXSkKKyAgICAgICAgZCA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgayA9IGQua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmhhc19rZXkoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuaGFzX2tleSgnYicpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5rZXlzLCBOb25lKQorCisgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnZhbHVlcygpLCBbXSkKKyAgICAgICAgZCA9IHsxOjJ9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52YWx1ZXMoKSwgWzJdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC52YWx1ZXMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9pdGVtcyhzZWxmKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pdGVtcygpLCBbXSkKKworICAgICAgICBkID0gezE6Mn0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLml0ZW1zKCksIFsoMSwgMildKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5pdGVtcywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2hhc19rZXkoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGQuaGFzX2tleSgnYScpKQorICAgICAgICBkID0geydhJzogMSwgJ2InOiAyfQorICAgICAgICBrID0gZC5rZXlzKCkKKyAgICAgICAgay5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBbJ2EnLCAnYiddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5oYXNfa2V5KQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnYScgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBub3QgaW4gZCkKKyAgICAgICAgZCA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2InLCBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdjJywgZCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuX19jb250YWluc19fKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAyKQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgZCA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYiddLCAyKQorICAgICAgICBkWydjJ10gPSAzCisgICAgICAgIGRbJ2EnXSA9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydjJ10sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCA0KQorICAgICAgICBkZWwgZFsnYiddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydhJzogNCwgJ2MnOiAzfSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuX19nZXRpdGVtX18pCisKKyAgICAgICAgY2xhc3MgQmFkRXEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDI0CisKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGRbQmFkRXEoKV0gPSA0MgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5fX2dldGl0ZW1fXywgMjMpCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBjbGFzcyBCYWRIYXNoKG9iamVjdCk6CisgICAgICAgICAgICBmYWlsID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZhaWw6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgeCA9IEJhZEhhc2goKQorICAgICAgICBkW3hdID0gNDIKKyAgICAgICAgeC5mYWlsID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQuX19nZXRpdGVtX18sIHgpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgZCA9IHsxOjEsIDI6MiwgMzozfQorICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7fSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuY2xlYXIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBkLnVwZGF0ZSh7MToxMDB9KQorICAgICAgICBkLnVwZGF0ZSh7MjoyMH0pCisgICAgICAgIGQudXBkYXRlKHsxOjEsIDI6MiwgMzozfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7MToxLCAyOjIsIDM6M30pCisKKyAgICAgICAgZC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsxOjEsIDI6MiwgMzozfSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIGQudXBkYXRlLCBOb25lKQorCisgICAgICAgIGNsYXNzIFNpbXBsZVVzZXJEaWN0OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZCA9IHsxOjEsIDI6MiwgMzozfQorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZC5rZXlzKCkKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kW2ldCisgICAgICAgIGQuY2xlYXIoKQorICAgICAgICBkLnVwZGF0ZShTaW1wbGVVc2VyRGljdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsxOjEsIDI6MiwgMzozfSkKKworICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcworCisgICAgICAgIGQuY2xlYXIoKQorICAgICAgICBjbGFzcyBGYWlsaW5nVXNlckRpY3Q6CisgICAgICAgICAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLnVwZGF0ZSwgRmFpbGluZ1VzZXJEaWN0KCkpCisKKyAgICAgICAgY2xhc3MgRmFpbGluZ1VzZXJEaWN0OgorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgY2xhc3MgQm9nb25JdGVyOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmkgPSAxCisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2EnCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGMKKyAgICAgICAgICAgICAgICByZXR1cm4gQm9nb25JdGVyKCkKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiBrZXkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLnVwZGF0ZSwgRmFpbGluZ1VzZXJEaWN0KCkpCisKKyAgICAgICAgY2xhc3MgRmFpbGluZ1VzZXJEaWN0OgorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgY2xhc3MgQm9nb25JdGVyOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmkgPSBvcmQoJ2EnKQorICAgICAgICAgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaSA8PSBvcmQoJ3onKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydG4gPSBjaHIoc2VsZi5pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ0bgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgICAgIHJldHVybiBCb2dvbkl0ZXIoKQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgZC51cGRhdGUsIEZhaWxpbmdVc2VyRGljdCgpKQorCisgICAgICAgIGNsYXNzIGJhZHNlcShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Yywge30udXBkYXRlLCBiYWRzZXEoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB7fS51cGRhdGUsIFsoMSwgMiwgMyldKQorCisgICAgZGVmIHRlc3RfZnJvbWtleXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdC5mcm9ta2V5cygnYWJjJyksIHsnYSc6Tm9uZSwgJ2InOk5vbmUsICdjJzpOb25lfSkKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZC5mcm9ta2V5cygnYWJjJyksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cygnYWJjJyksIHsnYSc6Tm9uZSwgJ2InOk5vbmUsICdjJzpOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKCg0LDUpLDApLCB7NDowLCA1OjB9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZnJvbWtleXMoW10pLCB7fSkKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKGcoKSksIHsxOk5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHt9LmZyb21rZXlzLCAzKQorICAgICAgICBjbGFzcyBkaWN0bGlrZShkaWN0KTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3RsaWtlLmZyb21rZXlzKCdhJyksIHsnYSc6Tm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdGxpa2UoKS5mcm9ta2V5cygnYScpLCB7J2EnOk5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGljdGxpa2UuZnJvbWtleXMoJ2EnKSwgZGljdGxpa2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkaWN0bGlrZSgpLmZyb21rZXlzKCdhJyksIGRpY3RsaWtlKQorICAgICAgICBjbGFzcyBteWRpY3QoZGljdCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBVc2VyRGljdC5Vc2VyRGljdCgpCisgICAgICAgIHVkID0gbXlkaWN0LmZyb21rZXlzKCdhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWQsIHsnYSc6Tm9uZSwgJ2InOk5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodWQsIFVzZXJEaWN0LlVzZXJEaWN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpY3QuZnJvbWtleXMpCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBjbGFzcyBiYWRkaWN0MShkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgYmFkZGljdDEuZnJvbWtleXMsIFsxXSkKKworICAgICAgICBjbGFzcyBCYWRTZXEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGRpY3QuZnJvbWtleXMsIEJhZFNlcSgpKQorCisgICAgICAgIGNsYXNzIGJhZGRpY3QyKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBiYWRkaWN0Mi5mcm9ta2V5cywgWzFdKQorCisgICAgICAgICMgdGVzdCBmYXN0IHBhdGggZm9yIGRpY3Rpb25hcnkgaW5wdXRzCisgICAgICAgIGQgPSBkaWN0KHppcChyYW5nZSg2KSwgcmFuZ2UoNikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QuZnJvbWtleXMoZCwgMCksIGRpY3QoemlwKHJhbmdlKDYpLCBbMF0qNikpKQorCisgICAgICAgIGNsYXNzIGJhZGRpY3QzKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZAorICAgICAgICBkID0ge2kgOiBpIGZvciBpIGluIHJhbmdlKDEwKX0KKyAgICAgICAgcmVzID0gZC5jb3B5KCkKKyAgICAgICAgcmVzLnVwZGF0ZShhPU5vbmUsIGI9Tm9uZSwgYz1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZGRpY3QzLmZyb21rZXlzKHsiYSIsICJiIiwgImMifSksIHJlcykKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGQgPSB7MToxLCAyOjIsIDM6M30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvcHkoKSwgezE6MSwgMjoyLCAzOjN9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt9LmNvcHkoKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5jb3B5LCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLmdldCgnYycpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdjJywgMyksIDMpCisgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5nZXQoJ2MnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYycsIDMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2EnLCAzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmdldCwgTm9uZSwgTm9uZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CisgICAgICAgICMgZGljdC5zZXRkZWZhdWx0KCkKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5zZXRkZWZhdWx0KCdrZXkwJyksIE5vbmUpCisgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5MCcsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKGQuc2V0ZGVmYXVsdCgna2V5MCcpLCBOb25lKQorICAgICAgICBkLnNldGRlZmF1bHQoJ2tleScsIFtdKS5hcHBlbmQoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydrZXknXVswXSwgMykKKyAgICAgICAgZC5zZXRkZWZhdWx0KCdrZXknLCBbXSkuYXBwZW5kKDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRbJ2tleSddKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLnNldGRlZmF1bHQpCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBjbGFzcyBCYWRIYXNoKG9iamVjdCk6CisgICAgICAgICAgICBmYWlsID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZhaWw6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgeCA9IEJhZEhhc2goKQorICAgICAgICBkW3hdID0gNDIKKyAgICAgICAgeC5mYWlsID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQuc2V0ZGVmYXVsdCwgeCwgW10pCisKKyAgICBkZWYgdGVzdF9zZXRkZWZhdWx0X2F0b21pYyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTM1MjE6IHNldGRlZmF1bHQoKSBjYWxscyBfX2hhc2hfXyBhbmQgX19lcV9fIG9ubHkgb25jZS4KKyAgICAgICAgY2xhc3MgSGFzaGVkKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5oYXNoX2NvdW50ID0gMAorICAgICAgICAgICAgICAgIHNlbGYuZXFfY291bnQgPSAwCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5oYXNoX2NvdW50ICs9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHNlbGYuZXFfY291bnQgKz0gMQorICAgICAgICAgICAgICAgIHJldHVybiBpZChzZWxmKSA9PSBpZChvdGhlcikKKyAgICAgICAgaGFzaGVkMSA9IEhhc2hlZCgpCisgICAgICAgIHkgPSB7aGFzaGVkMTogNX0KKyAgICAgICAgaGFzaGVkMiA9IEhhc2hlZCgpCisgICAgICAgIHkuc2V0ZGVmYXVsdChoYXNoZWQyLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoZWQxLmhhc2hfY291bnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaGVkMi5oYXNoX2NvdW50LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2hlZDEuZXFfY291bnQgKyBoYXNoZWQyLmVxX2NvdW50LCAxKQorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgIyBkaWN0LnBvcGl0ZW0oKQorICAgICAgICBmb3IgY29weW1vZGUgaW4gLTEsICsxOgorICAgICAgICAgICAgIyAtMTogYiBoYXMgc2FtZSBzdHJ1Y3R1cmUgYXMgYQorICAgICAgICAgICAgIyArMTogYiBpcyBhLmNvcHkoKQorICAgICAgICAgICAgZm9yIGxvZzJzaXplIGluIHJhbmdlKDEyKToKKyAgICAgICAgICAgICAgICBzaXplID0gMioqbG9nMnNpemUKKyAgICAgICAgICAgICAgICBhID0ge30KKyAgICAgICAgICAgICAgICBiID0ge30KKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzaXplKToKKyAgICAgICAgICAgICAgICAgICAgYVtyZXByKGkpXSA9IGkKKyAgICAgICAgICAgICAgICAgICAgaWYgY29weW1vZGUgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYltyZXByKGkpXSA9IGkKKyAgICAgICAgICAgICAgICBpZiBjb3B5bW9kZSA+IDA6CisgICAgICAgICAgICAgICAgICAgIGIgPSBhLmNvcHkoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNpemUpOgorICAgICAgICAgICAgICAgICAgICBrYSwgdmEgPSB0YSA9IGEucG9waXRlbSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmEsIGludChrYSkpCisgICAgICAgICAgICAgICAgICAgIGtiLCB2YiA9IHRiID0gYi5wb3BpdGVtKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YiwgaW50KGtiKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb3B5bW9kZSA8IDAgYW5kIHRhICE9IHRiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIpCisKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcGl0ZW0pCisKKyAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CisgICAgICAgICMgVGVzdHMgZm9yIHBvcCB3aXRoIHNwZWNpZmllZCBrZXkKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGssIHYgPSAnYWJjJywgJ2RlZicKKyAgICAgICAgZFtrXSA9IHYKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9wLCAnZ2hpJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGspLCB2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3AsIGspCisKKyAgICAgICAgIyB2ZXJpZnkgbG9uZ3MvaW50cyBnZXQgc2FtZSB2YWx1ZSB3aGVuIGtleSA+IDMyIGJpdHMKKyAgICAgICAgIyAoZm9yIDY0LWJpdCBhcmNocykuICBTZWUgU0YgYnVnICM2ODk2NTkuCisgICAgICAgIHggPSA0NTAzNTk5NjI3MzcwNDk2TAorICAgICAgICB5ID0gNDUwMzU5OTYyNzM3MDQ5NgorICAgICAgICBoID0ge3g6ICdhbnl0aGluZycsIHk6ICdzb21ldGhpbmcgZWxzZSd9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaFt4XSwgaFt5XSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGssIHYpLCB2KQorICAgICAgICBkW2tdID0gdgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGssIDEpLCB2KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5wb3ApCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBjbGFzcyBCYWRIYXNoKG9iamVjdCk6CisgICAgICAgICAgICBmYWlsID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZhaWw6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgeCA9IEJhZEhhc2goKQorICAgICAgICBkW3hdID0gNDIKKyAgICAgICAgeC5mYWlsID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQucG9wLCB4KQorCisgICAgZGVmIHRlc3RfbXV0YXRpbmdpdGVyYXRpb24oc2VsZik6CisgICAgICAgICMgY2hhbmdpbmcgZGljdCBzaXplIGR1cmluZyBpdGVyYXRpb24KKyAgICAgICAgZCA9IHt9CisgICAgICAgIGRbMV0gPSAxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGZvciBpIGluIGQ6CisgICAgICAgICAgICAgICAgZFtpKzFdID0gMQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkKSwgJ3t9JykKKyAgICAgICAgZFsxXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQpLCAnezE6IDJ9JykKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGRbMV0gPSBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkKSwgJ3sxOiB7Li4ufX0nKQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkUmVwcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisKKyAgICAgICAgZCA9IHsxOiBCYWRSZXByKCl9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgcmVwciwgZCkKKworICAgIGRlZiB0ZXN0X2xlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHt9IDwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoezE6IDJ9IDwgezFMOiAyTH0pCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBjbGFzcyBCYWRDbXAob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgZDEgPSB7QmFkQ21wKCk6IDF9CisgICAgICAgIGQyID0gezE6IDF9CisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGMpOgorICAgICAgICAgICAgZDEgPCBkMgorCisgICAgZGVmIHRlc3RfbWlzc2luZyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgZGljdCBkb2Vzbid0IGhhdmUgYSBfX21pc3NpbmdfXyBtZXRob2QKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGRpY3QsICJfX21pc3NpbmdfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoe30sICJfX21pc3NpbmdfXyIpKQorICAgICAgICAjIFRlc3Qgc2V2ZXJhbCBjYXNlczoKKyAgICAgICAgIyAoRCkgc3ViY2xhc3MgZGVmaW5lcyBfX21pc3NpbmdfXyBtZXRob2QgcmV0dXJuaW5nIGEgdmFsdWUKKyAgICAgICAgIyAoRSkgc3ViY2xhc3MgZGVmaW5lcyBfX21pc3NpbmdfXyBtZXRob2QgcmFpc2luZyBSdW50aW1lRXJyb3IKKyAgICAgICAgIyAoRikgc3ViY2xhc3Mgc2V0cyBfX21pc3NpbmdfXyBpbnN0YW5jZSB2YXJpYWJsZSAobm8gZWZmZWN0KQorICAgICAgICAjIChHKSBzdWJjbGFzcyBkb2Vzbid0IGRlZmluZSBfX21pc3NpbmdfXyBhdCBhIGFsbAorICAgICAgICBjbGFzcyBEKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIGQgPSBEKHsxOiAyLCAzOiA0fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzFdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbM10sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMiwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigyLCBkLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzJdLCA0MikKKworICAgICAgICBjbGFzcyBFKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKGtleSkKKyAgICAgICAgZSA9IEUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGVbNDJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24uYXJncywgKDQyLCkpCisKKyAgICAgICAgY2xhc3MgRihkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIEFuIGluc3RhbmNlIHZhcmlhYmxlIF9fbWlzc2luZ19fIHNob3VsZCBoYXZlIG5vIGVmZmVjdAorICAgICAgICAgICAgICAgIHNlbGYuX19taXNzaW5nX18gPSBsYW1iZGEga2V5OiBOb25lCisgICAgICAgIGYgPSBGKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGZbNDJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24uYXJncywgKDQyLCkpCisKKyAgICAgICAgY2xhc3MgRyhkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZyA9IEcoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKSBhcyBjOgorICAgICAgICAgICAgZ1s0Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5hcmdzLCAoNDIsKSkKKworICAgIGRlZiB0ZXN0X3R1cGxlX2tleWVycm9yKHNlbGYpOgorICAgICAgICAjIFNGICMxNTc2NjU3CisgICAgICAgIGQgPSB7fQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKSBhcyBjOgorICAgICAgICAgICAgZFsoMSwpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLmFyZ3MsICgoMSwpLCkpCisKKyAgICBkZWYgdGVzdF9iYWRfa2V5KHNlbGYpOgorICAgICAgICAjIERpY3Rpb25hcnkgbG9va3VwcyBzaG91bGQgZmFpbCBpZiBfX2NtcF9fKCkgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgY2xhc3MgQ3VzdG9tRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkRGljdEtleToKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9fY2xhc3NfXykKKworICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ3VzdG9tRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyCisKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHgxID0gQmFkRGljdEtleSgpCisgICAgICAgIHgyID0gQmFkRGljdEtleSgpCisgICAgICAgIGRbeDFdID0gMQorICAgICAgICBmb3Igc3RtdCBpbiBbJ2RbeDJdID0gMicsCisgICAgICAgICAgICAgICAgICAgICAneiA9IGRbeDJdJywKKyAgICAgICAgICAgICAgICAgICAgICd4MiBpbiBkJywKKyAgICAgICAgICAgICAgICAgICAgICdkLmhhc19rZXkoeDIpJywKKyAgICAgICAgICAgICAgICAgICAgICdkLmdldCh4MiknLAorICAgICAgICAgICAgICAgICAgICAgJ2Quc2V0ZGVmYXVsdCh4MiwgNDIpJywKKyAgICAgICAgICAgICAgICAgICAgICdkLnBvcCh4MiknLAorICAgICAgICAgICAgICAgICAgICAgJ2QudXBkYXRlKHt4MjogMn0pJ106CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEN1c3RvbUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgZXhlYyBzdG10IGluIGxvY2FscygpCisKKyAgICBkZWYgdGVzdF9yZXNpemUxKHNlbGYpOgorICAgICAgICAjIERpY3QgcmVzaXppbmcgYnVnLCBmb3VuZCBieSBKYWNrIEphbnNlbiBpbiAyLjIgQ1ZTIGRldmVsb3BtZW50LgorICAgICAgICAjIFRoaXMgdmVyc2lvbiBnb3QgYW4gYXNzZXJ0IGZhaWx1cmUgaW4gZGVidWcgYnVpbGQsIGluZmluaXRlIGxvb3AgaW4KKyAgICAgICAgIyByZWxlYXNlIGJ1aWxkLiAgVW5mb3J0dW5hdGVseSwgcHJvdm9raW5nIHRoaXMga2luZCBvZiBzdHVmZiByZXF1aXJlcworICAgICAgICAjIGEgbWl4IG9mIGluc2VydHMgYW5kIGRlbGV0ZXMgaGl0dGluZyBleGFjdGx5IHRoZSByaWdodCBoYXNoIGNvZGVzIGluCisgICAgICAgICMgZXhhY3RseSB0aGUgcmlnaHQgb3JkZXIsIGFuZCBJIGNhbid0IHRoaW5rIG9mIGEgcmFuZG9taXplZCBhcHByb2FjaAorICAgICAgICAjIHRoYXQgd291bGQgYmUgKmxpa2VseSogdG8gaGl0IGEgZmFpbGluZyBjYXNlIGluIHJlYXNvbmFibGUgdGltZS4KKworICAgICAgICBkID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBkW2ldID0gaQorICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIGRlbCBkW2ldCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUsIDkpOiAgIyBpPT04IHdhcyB0aGUgcHJvYmxlbQorICAgICAgICAgICAgZFtpXSA9IGkKKworICAgIGRlZiB0ZXN0X3Jlc2l6ZTIoc2VsZik6CisgICAgICAgICMgQW5vdGhlciBkaWN0IHJlc2l6aW5nIGJ1ZyAoU0YgYnVnICMxNDU2MjA5KS4KKyAgICAgICAgIyBUaGlzIGNhdXNlZCBTZWdtZW50YXRpb24gZmF1bHRzIG9yIElsbGVnYWwgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgcmVzaXppbmc6CisgICAgICAgICAgICAgICAgICAgIGQuY2xlYXIoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBkID0ge30KKyAgICAgICAgcmVzaXppbmcgPSBGYWxzZQorICAgICAgICBkW1goKV0gPSAxCisgICAgICAgIGRbWCgpXSA9IDIKKyAgICAgICAgZFtYKCldID0gMworICAgICAgICBkW1goKV0gPSA0CisgICAgICAgIGRbWCgpXSA9IDUKKyAgICAgICAgIyBub3cgdHJpZ2dlciBhIHJlc2l6ZQorICAgICAgICByZXNpemluZyA9IFRydWUKKyAgICAgICAgZFs5XSA9IDYKKworICAgIGRlZiB0ZXN0X2VtcHR5X3ByZXNpemVkX2RpY3RfaW5fZnJlZWxpc3Qoc2VsZik6CisgICAgICAgICMgQnVnICMzNTM3OiBpZiBhbiBlbXB0eSBidXQgcHJlc2l6ZWQgZGljdCB3aXRoIGEgc2l6ZSBsYXJnZXIKKyAgICAgICAgIyB0aGFuIDcgd2FzIGluIHRoZSBmcmVlbGlzdCwgaXQgdHJpZ2dlcmVkIGFuIGFzc2VydGlvbiBmYWlsdXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgZCA9IHsnYSc6IDEgLy8gMCwgJ2InOiBOb25lLCAnYyc6IE5vbmUsICdkJzogTm9uZSwgJ2UnOiBOb25lLAorICAgICAgICAgICAgICAgICAnZic6IE5vbmUsICdnJzogTm9uZSwgJ2gnOiBOb25lfQorICAgICAgICBkID0ge30KKworICAgIGRlZiB0ZXN0X2NvbnRhaW5lcl9pdGVyYXRvcihzZWxmKToKKyAgICAgICAgIyBCdWcgIzM2ODA6IHRwX3RyYXZlcnNlIHdhcyBub3QgaW1wbGVtZW50ZWQgZm9yIGRpY3RpdGVyIG9iamVjdHMKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpdGVyYXRvcnMgPSAoZGljdC5pdGVyaXRlbXMsIGRpY3QuaXRlcnZhbHVlcywgZGljdC5pdGVya2V5cykKKyAgICAgICAgZm9yIGkgaW4gaXRlcmF0b3JzOgorICAgICAgICAgICAgb2JqID0gQygpCisgICAgICAgICAgICByZWYgPSB3ZWFrcmVmLnJlZihvYmopCisgICAgICAgICAgICBjb250YWluZXIgPSB7b2JqOiAxfQorICAgICAgICAgICAgb2JqLnggPSBpKGNvbnRhaW5lcikKKyAgICAgICAgICAgIGRlbCBvYmosIGNvbnRhaW5lcgorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlZigpLCBOb25lLCAiQ3ljbGUgd2FzIG5vdCBjb2xsZWN0ZWQiKQorCisgICAgZGVmIF9ub3RfdHJhY2tlZChzZWxmLCB0KToKKyAgICAgICAgIyBOZXN0ZWQgY29udGFpbmVycyBjYW4gdGFrZSBzZXZlcmFsIGNvbGxlY3Rpb25zIHRvIHVudHJhY2sKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQodCksIHQpCisKKyAgICBkZWYgX3RyYWNrZWQoc2VsZiwgdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKHQpLCB0KQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKHQpLCB0KQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF90cmFja19saXRlcmFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IEdDLW9wdGltaXphdGlvbiBvZiBkaWN0IGxpdGVyYWxzCisgICAgICAgIHgsIHksIHosIHcgPSAxLjUsICJhIiwgKDEsIE5vbmUpLCBbXQorCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKHt9KQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7eDooKSwgeTp4LCB6OjF9KQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7MTogImEiLCAiYiI6IDJ9KQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7MTogMiwgKE5vbmUsIFRydWUsIEZhbHNlLCAoKSk6IGludH0pCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKHsxOiBvYmplY3QoKX0pCisKKyAgICAgICAgIyBEaWN0cyB3aXRoIG11dGFibGUgZWxlbWVudHMgYXJlIGFsd2F5cyB0cmFja2VkLCBldmVuIGlmIHRob3NlCisgICAgICAgICMgZWxlbWVudHMgYXJlIG5vdCB0cmFja2VkIHJpZ2h0IG5vdy4KKyAgICAgICAgc2VsZi5fdHJhY2tlZCh7MTogW119KQorICAgICAgICBzZWxmLl90cmFja2VkKHsxOiAoW10sKX0pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoezE6IHt9fSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh7MTogc2V0KCl9KQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF90cmFja19keW5hbWljKHNlbGYpOgorICAgICAgICAjIFRlc3QgR0Mtb3B0aW1pemF0aW9uIG9mIGR5bmFtaWNhbGx5LWNyZWF0ZWQgZGljdHMKKyAgICAgICAgY2xhc3MgTXlPYmplY3Qob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgeCwgeSwgeiwgdywgbyA9IDEuNSwgImEiLCAoMSwgb2JqZWN0KCkpLCBbXSwgTXlPYmplY3QoKQorCisgICAgICAgIGQgPSBkaWN0KCkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZFsxXSA9ICJhIgorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBkW3ldID0gMgorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBkW3pdID0gMworICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkLmNvcHkoKSkKKyAgICAgICAgZFs0XSA9IHcKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorICAgICAgICBzZWxmLl90cmFja2VkKGQuY29weSgpKQorICAgICAgICBkWzRdID0gTm9uZQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkLmNvcHkoKSkKKworICAgICAgICAjIGRkIGlzbid0IHRyYWNrZWQgcmlnaHQgbm93LCBidXQgaXQgbWF5IG11dGF0ZSBhbmQgdGhlcmVmb3JlIGQKKyAgICAgICAgIyB3aGljaCBjb250YWlucyBpdCBtdXN0IGJlIHRyYWNrZWQuCisgICAgICAgIGQgPSBkaWN0KCkKKyAgICAgICAgZGQgPSBkaWN0KCkKKyAgICAgICAgZFsxXSA9IGRkCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGRkKQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisgICAgICAgIGRkWzFdID0gZAorICAgICAgICBzZWxmLl90cmFja2VkKGRkKQorCisgICAgICAgIGQgPSBkaWN0LmZyb21rZXlzKFt4LCB5LCB6XSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZGQgPSBkaWN0KCkKKyAgICAgICAgZGQudXBkYXRlKGQpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGRkKQorICAgICAgICBkID0gZGljdC5mcm9ta2V5cyhbeCwgeSwgeiwgb10pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoZCkKKyAgICAgICAgZGQgPSBkaWN0KCkKKyAgICAgICAgZGQudXBkYXRlKGQpCisgICAgICAgIHNlbGYuX3RyYWNrZWQoZGQpCisKKyAgICAgICAgZCA9IGRpY3QoeD14LCB5PXksIHo9eikKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZCA9IGRpY3QoeD14LCB5PXksIHo9eiwgdz13KQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisgICAgICAgIGQgPSBkaWN0KCkKKyAgICAgICAgZC51cGRhdGUoeD14LCB5PXksIHo9eikKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZC51cGRhdGUodz13KQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisKKyAgICAgICAgZCA9IGRpY3QoWyh4LCB5KSwgKHosIDEpXSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZCA9IGRpY3QoWyh4LCB5KSwgKHosIHcpXSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorICAgICAgICBkID0gZGljdCgpCisgICAgICAgIGQudXBkYXRlKFsoeCwgeSksICh6LCAxKV0pCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGQudXBkYXRlKFsoeCwgeSksICh6LCB3KV0pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoZCkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfc3VidHlwZXMoc2VsZik6CisgICAgICAgICMgRGljdCBzdWJ0eXBlcyBhcmUgYWx3YXlzIHRyYWNrZWQKKyAgICAgICAgY2xhc3MgTXlEaWN0KGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl90cmFja2VkKE15RGljdCgpKQorCisKK2Zyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cworCitjbGFzcyBHZW5lcmFsTWFwcGluZ1Rlc3RzKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKyAgICB0eXBlMnRlc3QgPSBkaWN0CisKK2NsYXNzIERpY3QoZGljdCk6CisgICAgcGFzcworCitjbGFzcyBTdWJjbGFzc01hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgdHlwZTJ0ZXN0ID0gRGljdAorCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgKCdkaWN0KC5oYXNfa2V5Li58IGluZXF1YWxpdHkgY29tcGFyaXNvbnMpIG5vdCBzdXBwb3J0ZWQgaW4gMy54JywKKyAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICAgICAgRGljdFRlc3QsCisgICAgICAgICAgICBHZW5lcmFsTWFwcGluZ1Rlc3RzLAorICAgICAgICAgICAgU3ViY2xhc3NNYXBwaW5nVGVzdHMsCisgICAgICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGljdGNvbXBzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGljdGNvbXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Y2JiMmMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kaWN0Y29tcHMucHkKQEAgLTAsMCArMSw5MSBAQAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKKworIyBGb3Igc2NvcGUgdGVzdGluZy4KK2cgPSAiR2xvYmFsIHZhcmlhYmxlIgorCisKK2NsYXNzIERpY3RDb21wcmVoZW5zaW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gezA6IDEwLCAxOiAxMSwgMjogMTIsIDM6IDEzLCA0OiAxNCwgNTogMTUsIDY6IDE2LCA3OiAxNywKKyAgICAgICAgICAgICAgICAgICAgODogMTgsIDk6IDE5fQorICAgICAgICBhY3R1YWwgPSB7azogayArIDEwIGZvciBrIGluIHJhbmdlKDEwKX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgICAgIGV4cGVjdGVkID0gezA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDl9CisgICAgICAgIGFjdHVhbCA9IHtrOiB2IGZvciBrIGluIHJhbmdlKDEwKSBmb3IgdiBpbiByYW5nZSgxMCkgaWYgayA9PSB2fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zY29wZV9pc29sYXRpb24oc2VsZik6CisgICAgICAgIGsgPSAiTG9jYWwgVmFyaWFibGUiCisKKyAgICAgICAgZXhwZWN0ZWQgPSB7MDogTm9uZSwgMTogTm9uZSwgMjogTm9uZSwgMzogTm9uZSwgNDogTm9uZSwgNTogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgNjogTm9uZSwgNzogTm9uZSwgODogTm9uZSwgOTogTm9uZX0KKyAgICAgICAgYWN0dWFsID0ge2s6IE5vbmUgZm9yIGsgaW4gcmFuZ2UoMTApfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgIkxvY2FsIFZhcmlhYmxlIikKKworICAgICAgICBleHBlY3RlZCA9IHs5OiAxLCAxODogMiwgMTk6IDIsIDI3OiAzLCAyODogMywgMjk6IDMsIDM2OiA0LCAzNzogNCwKKyAgICAgICAgICAgICAgICAgICAgMzg6IDQsIDM5OiA0LCA0NTogNSwgNDY6IDUsIDQ3OiA1LCA0ODogNSwgNDk6IDUsIDU0OiA2LAorICAgICAgICAgICAgICAgICAgICA1NTogNiwgNTY6IDYsIDU3OiA2LCA1ODogNiwgNTk6IDYsIDYzOiA3LCA2NDogNywgNjU6IDcsCisgICAgICAgICAgICAgICAgICAgIDY2OiA3LCA2NzogNywgNjg6IDcsIDY5OiA3LCA3MjogOCwgNzM6IDgsIDc0OiA4LCA3NTogOCwKKyAgICAgICAgICAgICAgICAgICAgNzY6IDgsIDc3OiA4LCA3ODogOCwgNzk6IDgsIDgxOiA5LCA4MjogOSwgODM6IDksIDg0OiA5LAorICAgICAgICAgICAgICAgICAgICA4NTogOSwgODY6IDksIDg3OiA5LCA4ODogOSwgODk6IDl9CisgICAgICAgIGFjdHVhbCA9IHtrOiB2IGZvciB2IGluIHJhbmdlKDEwKSBmb3IgayBpbiByYW5nZSh2ICogOSwgdiAqIDEwKX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCAiTG9jYWwgVmFyaWFibGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zY29wZV9pc29sYXRpb25fZnJvbV9nbG9iYWwoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gezA6IE5vbmUsIDE6IE5vbmUsIDI6IE5vbmUsIDM6IE5vbmUsIDQ6IE5vbmUsIDU6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgIDY6IE5vbmUsIDc6IE5vbmUsIDg6IE5vbmUsIDk6IE5vbmV9CisgICAgICAgIGFjdHVhbCA9IHtnOiBOb25lIGZvciBnIGluIHJhbmdlKDEwKX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcsICJHbG9iYWwgdmFyaWFibGUiKQorCisgICAgICAgIGV4cGVjdGVkID0gezk6IDEsIDE4OiAyLCAxOTogMiwgMjc6IDMsIDI4OiAzLCAyOTogMywgMzY6IDQsIDM3OiA0LAorICAgICAgICAgICAgICAgICAgICAzODogNCwgMzk6IDQsIDQ1OiA1LCA0NjogNSwgNDc6IDUsIDQ4OiA1LCA0OTogNSwgNTQ6IDYsCisgICAgICAgICAgICAgICAgICAgIDU1OiA2LCA1NjogNiwgNTc6IDYsIDU4OiA2LCA1OTogNiwgNjM6IDcsIDY0OiA3LCA2NTogNywKKyAgICAgICAgICAgICAgICAgICAgNjY6IDcsIDY3OiA3LCA2ODogNywgNjk6IDcsIDcyOiA4LCA3MzogOCwgNzQ6IDgsIDc1OiA4LAorICAgICAgICAgICAgICAgICAgICA3NjogOCwgNzc6IDgsIDc4OiA4LCA3OTogOCwgODE6IDksIDgyOiA5LCA4MzogOSwgODQ6IDksCisgICAgICAgICAgICAgICAgICAgIDg1OiA5LCA4NjogOSwgODc6IDksIDg4OiA5LCA4OTogOX0KKyAgICAgICAgYWN0dWFsID0ge2c6IHYgZm9yIHYgaW4gcmFuZ2UoMTApIGZvciBnIGluIHJhbmdlKHYgKiA5LCB2ICogMTApfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcsICJHbG9iYWwgdmFyaWFibGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9nbG9iYWxfdmlzaWJpbGl0eShzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSB7MDogJ0dsb2JhbCB2YXJpYWJsZScsIDE6ICdHbG9iYWwgdmFyaWFibGUnLAorICAgICAgICAgICAgICAgICAgICAyOiAnR2xvYmFsIHZhcmlhYmxlJywgMzogJ0dsb2JhbCB2YXJpYWJsZScsCisgICAgICAgICAgICAgICAgICAgIDQ6ICdHbG9iYWwgdmFyaWFibGUnLCA1OiAnR2xvYmFsIHZhcmlhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgNjogJ0dsb2JhbCB2YXJpYWJsZScsIDc6ICdHbG9iYWwgdmFyaWFibGUnLAorICAgICAgICAgICAgICAgICAgICA4OiAnR2xvYmFsIHZhcmlhYmxlJywgOTogJ0dsb2JhbCB2YXJpYWJsZSd9CisgICAgICAgIGFjdHVhbCA9IHtrOiBnIGZvciBrIGluIHJhbmdlKDEwKX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfbG9jYWxfdmlzaWJpbGl0eShzZWxmKToKKyAgICAgICAgdiA9ICJMb2NhbCB2YXJpYWJsZSIKKyAgICAgICAgZXhwZWN0ZWQgPSB7MDogJ0xvY2FsIHZhcmlhYmxlJywgMTogJ0xvY2FsIHZhcmlhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgMjogJ0xvY2FsIHZhcmlhYmxlJywgMzogJ0xvY2FsIHZhcmlhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgNDogJ0xvY2FsIHZhcmlhYmxlJywgNTogJ0xvY2FsIHZhcmlhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgNjogJ0xvY2FsIHZhcmlhYmxlJywgNzogJ0xvY2FsIHZhcmlhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgODogJ0xvY2FsIHZhcmlhYmxlJywgOTogJ0xvY2FsIHZhcmlhYmxlJ30KKyAgICAgICAgYWN0dWFsID0ge2s6IHYgZm9yIGsgaW4gcmFuZ2UoMTApfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgIkxvY2FsIHZhcmlhYmxlIikKKworICAgIGRlZiB0ZXN0X2lsbGVnYWxfYXNzaWdubWVudChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChTeW50YXhFcnJvciwgImNhbid0IGFzc2lnbiIpOgorICAgICAgICAgICAgY29tcGlsZSgie3g6IHkgZm9yIHksIHggaW4gKCgxLCAyKSwgKDMsIDQpKX0gPSA1IiwgIjx0ZXN0PiIsCisgICAgICAgICAgICAgICAgICAgICJleGVjIikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFN5bnRheEVycm9yLCAiY2FuJ3QgYXNzaWduIik6CisgICAgICAgICAgICBjb21waWxlKCJ7eDogeSBmb3IgeSwgeCBpbiAoKDEsIDIpLCAoMywgNCkpfSArPSA1IiwgIjx0ZXN0PiIsCisgICAgICAgICAgICAgICAgICAgICJleGVjIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTAzNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGljdHZpZXdzLnB5CkBAIC0wLDAgKzEsMTU0IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIERpY3RTZXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yc19ub3RfY2FsbGFibGUoc2VsZik6CisgICAgICAgIGt0ID0gdHlwZSh7fS52aWV3a2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGt0LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBrdCkKKyAgICAgICAgaXQgPSB0eXBlKHt9LnZpZXdpdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGl0LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpdCkKKyAgICAgICAgdnQgPSB0eXBlKHt9LnZpZXd2YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2dCwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdnQpCisKKyAgICBkZWYgdGVzdF9kaWN0X2tleXMoc2VsZik6CisgICAgICAgIGQgPSB7MTogMTAsICJhIjogIkFCQyJ9CisgICAgICAgIGtleXMgPSBkLnZpZXdrZXlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGtleXMpLCBzZXQoWzEsICJhIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIHNldChbMSwgImEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5cywgc2V0KFsxLCAiYSIsICJiIl0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleXMsIHNldChbMSwgImIiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5cywgc2V0KFsxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5cywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMSwga2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYSIsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIloiLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmlld2tleXMoKSwgZC52aWV3a2V5cygpKQorICAgICAgICBlID0gezE6IDExLCAiYSI6ICJkZWYifQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmlld2tleXMoKSwgZS52aWV3a2V5cygpKQorICAgICAgICBkZWwgZVsiYSJdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZC52aWV3a2V5cygpLCBlLnZpZXdrZXlzKCkpCisKKyAgICBkZWYgdGVzdF9kaWN0X2l0ZW1zKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBpdGVtcyA9IGQudmlld2l0ZW1zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXRlbXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChpdGVtcyksIHNldChbKDEsIDEwKSwgKCJhIiwgIkFCQyIpXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIHNldChbKDEsIDEwKSwgKCJhIiwgIkFCQyIpXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaXRlbXMsIHNldChbKDEsIDEwKSwgKCJhIiwgIkFCQyIpLCAianVuayJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpdGVtcywgc2V0KFsoMSwgMTApLCAoImEiLCAiZGVmIildKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpdGVtcywgc2V0KFsoMSwgMTApXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaXRlbXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEluKCgxLCAxMCksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydEluKCgiYSIsICJBQkMiKSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKDEsIDExKSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKCksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgxLCksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgxLCAyLCAzKSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52aWV3aXRlbXMoKSwgZC52aWV3aXRlbXMoKSkKKyAgICAgICAgZSA9IGQuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52aWV3aXRlbXMoKSwgZS52aWV3aXRlbXMoKSkKKyAgICAgICAgZVsiYSJdID0gImRlZiIKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkLnZpZXdpdGVtcygpLCBlLnZpZXdpdGVtcygpKQorCisgICAgZGVmIHRlc3RfZGljdF9taXhlZF9rZXlzX2l0ZW1zKHNlbGYpOgorICAgICAgICBkID0geygxLCAxKTogMTEsICgyLCAyKTogMjJ9CisgICAgICAgIGUgPSB7MTogMSwgMjogMn0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnZpZXdrZXlzKCksIGUudmlld2l0ZW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZC52aWV3aXRlbXMoKSwgZS52aWV3a2V5cygpKQorCisgICAgZGVmIHRlc3RfZGljdF92YWx1ZXMoc2VsZik6CisgICAgICAgIGQgPSB7MTogMTAsICJhIjogIkFCQyJ9CisgICAgICAgIHZhbHVlcyA9IGQudmlld3ZhbHVlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHZhbHVlcyksIHNldChbMTAsICJBQkMiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlcyksIDIpCisKKyAgICBkZWYgdGVzdF9kaWN0X3JlcHIoc2VsZik6CisgICAgICAgIGQgPSB7MTogMTAsICJhIjogIkFCQyJ9CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXByKGQpLCBzdHIpCisgICAgICAgIHIgPSByZXByKGQudmlld2l0ZW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyID09ICJkaWN0X2l0ZW1zKFsoJ2EnLCAnQUJDJyksICgxLCAxMCldKSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPT0gImRpY3RfaXRlbXMoWygxLCAxMCksICgnYScsICdBQkMnKV0pIikKKyAgICAgICAgciA9IHJlcHIoZC52aWV3a2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uociwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUociA9PSAiZGljdF9rZXlzKFsnYScsIDFdKSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPT0gImRpY3Rfa2V5cyhbMSwgJ2EnXSkiKQorICAgICAgICByID0gcmVwcihkLnZpZXd2YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gImRpY3RfdmFsdWVzKFsnQUJDJywgMTBdKSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPT0gImRpY3RfdmFsdWVzKFsxMCwgJ0FCQyddKSIpCisKKyAgICBkZWYgdGVzdF9rZXlzX3NldF9vcGVyYXRpb25zKHNlbGYpOgorICAgICAgICBkMSA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgZDIgPSB7J2InOiAzLCAnYyc6IDJ9CisgICAgICAgIGQzID0geydkJzogNCwgJ2UnOiA1fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgJiBkMS52aWV3a2V5cygpLCB7J2EnLCAnYid9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgJiBkMi52aWV3a2V5cygpLCB7J2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgZDMudmlld2tleXMoKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSAmIHNldChkMS52aWV3a2V5cygpKSwgeydhJywgJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgc2V0KGQyLnZpZXdrZXlzKCkpLCB7J2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgc2V0KGQzLnZpZXdrZXlzKCkpLCBzZXQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBkMS52aWV3a2V5cygpLCB7J2EnLCAnYid9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBkMi52aWV3a2V5cygpLCB7J2EnLCAnYicsICdjJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSB8IGQzLnZpZXdrZXlzKCksIHsnYScsICdiJywgJ2QnLCAnZSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBzZXQoZDEudmlld2tleXMoKSksIHsnYScsICdiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSB8IHNldChkMi52aWV3a2V5cygpKSwgeydhJywgJ2InLCAnYyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBzZXQoZDMudmlld2tleXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydhJywgJ2InLCAnZCcsICdlJ30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIF4gZDEudmlld2tleXMoKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSBeIGQyLnZpZXdrZXlzKCksIHsnYScsICdjJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSBeIGQzLnZpZXdrZXlzKCksIHsnYScsICdiJywgJ2QnLCAnZSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBzZXQoZDEudmlld2tleXMoKSksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBzZXQoZDIudmlld2tleXMoKSksIHsnYScsICdjJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSBeIHNldChkMy52aWV3a2V5cygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnLCAnYicsICdkJywgJ2UnfSkKKworICAgIGRlZiB0ZXN0X2l0ZW1zX3NldF9vcGVyYXRpb25zKHNlbGYpOgorICAgICAgICBkMSA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgZDIgPSB7J2EnOiAyLCAnYic6IDJ9CisgICAgICAgIGQzID0geydkJzogNCwgJ2UnOiA1fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZDEudmlld2l0ZW1zKCkgJiBkMS52aWV3aXRlbXMoKSwgeygnYScsIDEpLCAoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgJiBkMi52aWV3aXRlbXMoKSwgeygnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSAmIGQzLnZpZXdpdGVtcygpLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSAmIHNldChkMS52aWV3aXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgJiBzZXQoZDIudmlld2l0ZW1zKCkpLCB7KCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpICYgc2V0KGQzLnZpZXdpdGVtcygpKSwgc2V0KCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IGQxLnZpZXdpdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIHwgZDIudmlld2l0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2EnLCAyKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIHwgZDMudmlld2l0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKSwgKCdkJywgNCksICgnZScsIDUpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IHNldChkMS52aWV3aXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgfCBzZXQoZDIudmlld2l0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdhJywgMiksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IHNldChkMy52aWV3aXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKSwgKCdkJywgNCksICgnZScsIDUpfSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIF4gZDEudmlld2l0ZW1zKCksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIF4gZDIudmlld2l0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2EnLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgXiBkMy52aWV3aXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7KCdhJywgMSksICgnYicsIDIpLCAoJ2QnLCA0KSwgKCdlJywgNSl9KQorCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChEaWN0U2V0VGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwYmY5OQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkKQEAgLTAsMCArMSwyNzIgQEAKK2ltcG9ydCBkaWZmbGliCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBkb2N0ZXN0CitpbXBvcnQgc3lzCisKKworY2xhc3MgVGVzdFdpdGhBc2NpaSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfb25lX2luc2VydChzZWxmKToKKyAgICAgICAgc20gPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCAnYicgKiAxMDAsICdhJyArICdiJyAqIDEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzbS5yYXRpbygpLCAwLjk5NSwgcGxhY2VzPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzbS5nZXRfb3Bjb2RlcygpKSwKKyAgICAgICAgICAgIFsgICAoJ2luc2VydCcsIDAsIDAsIDAsIDEpLAorICAgICAgICAgICAgICAgICgnZXF1YWwnLCAwLCAxMDAsIDEsIDEwMSldKQorICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsICdiJyAqIDEwMCwgJ2InICogNTAgKyAnYScgKyAnYicgKiA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzbS5yYXRpbygpLCAwLjk5NSwgcGxhY2VzPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzbS5nZXRfb3Bjb2RlcygpKSwKKyAgICAgICAgICAgIFsgICAoJ2VxdWFsJywgMCwgNTAsIDAsIDUwKSwKKyAgICAgICAgICAgICAgICAoJ2luc2VydCcsIDUwLCA1MCwgNTAsIDUxKSwKKyAgICAgICAgICAgICAgICAoJ2VxdWFsJywgNTAsIDEwMCwgNTEsIDEwMSldKQorCisgICAgZGVmIHRlc3Rfb25lX2RlbGV0ZShzZWxmKToKKyAgICAgICAgc20gPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCAnYScgKiA0MCArICdjJyArICdiJyAqIDQwLCAnYScgKiA0MCArICdiJyAqIDQwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNtLnJhdGlvKCksIDAuOTk0LCBwbGFjZXM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNtLmdldF9vcGNvZGVzKCkpLAorICAgICAgICAgICAgWyAgICgnZXF1YWwnLCAwLCA0MCwgMCwgNDApLAorICAgICAgICAgICAgICAgICgnZGVsZXRlJywgNDAsIDQxLCA0MCwgNDApLAorICAgICAgICAgICAgICAgICgnZXF1YWwnLCA0MSwgODEsIDQwLCA4MCldKQorCisKK2NsYXNzIFRlc3RBdXRvanVuayh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIHRoZSBhdXRvanVuayBwYXJhbWV0ZXIgYWRkZWQgaW4gMi43IiIiCisgICAgZGVmIHRlc3Rfb25lX2luc2VydF9ob21vZ2Vub3VzX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIEJ5IGRlZmF1bHQgYXV0b2p1bms9VHJ1ZSBhbmQgdGhlIGhldXJpc3RpYyBraWNrcyBpbiBmb3IgYSBzZXF1ZW5jZQorICAgICAgICAjIG9mIGxlbmd0aCAyMDArCisgICAgICAgIHNlcTEgPSAnYicgKiAyMDAKKyAgICAgICAgc2VxMiA9ICdhJyArICdiJyAqIDIwMAorCisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgc2VxMSwgc2VxMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzbS5yYXRpbygpLCAwLCBwbGFjZXM9MykKKworICAgICAgICAjIE5vdyB0dXJuIHRoZSBoZXVyaXN0aWMgb2ZmCisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgc2VxMSwgc2VxMiwgYXV0b2p1bms9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc20ucmF0aW8oKSwgMC45OTc1LCBwbGFjZXM9MykKKworCitjbGFzcyBUZXN0U0ZidWdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9yYXRpb19mb3JfbnVsbF9zZXFuKHNlbGYpOgorICAgICAgICAjIENoZWNrIGNsZWFyaW5nIG9mIFNGIGJ1ZyA3NjMwMjMKKyAgICAgICAgcyA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsIFtdLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJhdGlvKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5xdWlja19yYXRpbygpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmVhbF9xdWlja19yYXRpbygpLCAxKQorCisgICAgZGVmIHRlc3RfY29tcGFyaW5nX2VtcHR5X2xpc3RzKHNlbGYpOgorICAgICAgICAjIENoZWNrIGZpeCBmb3IgYnVnICM5Nzk3OTQKKyAgICAgICAgZ3JvdXBfZ2VuID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgW10sIFtdKS5nZXRfZ3JvdXBlZF9vcGNvZGVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgZ3JvdXBfZ2VuLm5leHQpCisgICAgICAgIGRpZmZfZ2VuID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoW10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBkaWZmX2dlbi5uZXh0KQorCisgICAgZGVmIHRlc3RfYWRkZWRfdGFiX2hpbnQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgZml4IGZvciBidWcgIzE0ODg5NDMKKyAgICAgICAgZGlmZiA9IGxpc3QoZGlmZmxpYi5EaWZmZXIoKS5jb21wYXJlKFsiXHRJIGFtIGEgYnVnZ3kiXSxbIlx0XHRJIGFtIGEgYnVnIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCItIFx0SSBhbSBhIGJ1Z2d5IiwgZGlmZlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPyAgICAgICAgICAgIC0tXG4iLCBkaWZmWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIrIFx0XHRJIGFtIGEgYnVnIiwgZGlmZlsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPyArXG4iLCBkaWZmWzNdKQorCitwYXRjaDkxNDU3NV9mcm9tMSA9ICIiIgorICAgMS4gQmVhdXRpZnVsIGlzIGJlVFRlciB0aGFuIHVnbHkuCisgICAyLiBFeHBsaWNpdCBpcyBiZXR0ZXIgdGhhbiBpbXBsaWNpdC4KKyAgIDMuIFNpbXBsZSBpcyBiZXR0ZXIgdGhhbiBjb21wbGV4LgorICAgNC4gQ29tcGxleCBpcyBiZXR0ZXIgdGhhbiBjb21wbGljYXRlZC4KKyIiIgorCitwYXRjaDkxNDU3NV90bzEgPSAiIiIKKyAgIDEuIEJlYXV0aWZ1bCBpcyBiZXR0ZXIgdGhhbiB1Z2x5LgorICAgMy4gICBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KKyAgIDQuIENvbXBsaWNhdGVkIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCisgICA1LiBGbGF0IGlzIGJldHRlciB0aGFuIG5lc3RlZC4KKyIiIgorCitwYXRjaDkxNDU3NV9mcm9tMiA9ICIiIgorXHRcdExpbmUgMTogcHJlY2VlZGVkIGJ5IGZyb206W3R0XSB0bzpbc3Nzc10KKyAgXHRcdExpbmUgMjogcHJlY2VlZGVkIGJ5IGZyb206W3NzdHRdIHRvOltzc3NzdF0KKyAgXHQgXHRMaW5lIDM6IHByZWNlZWRlZCBieSBmcm9tOltzc3RzdF0gdG86W3Nzc3Nzc10KK0xpbmUgNDogIFx0aGFzIGZyb206W3NzdF0gdG86W3Nzc10gYWZ0ZXIgOgorTGluZSA1OiBoYXMgZnJvbTpbdF0gdG86W3NzXSBhdCBlbmRcdAorIiIiCisKK3BhdGNoOTE0NTc1X3RvMiA9ICIiIgorICAgIExpbmUgMTogcHJlY2VlZGVkIGJ5IGZyb206W3R0XSB0bzpbc3Nzc10KKyAgICBcdExpbmUgMjogcHJlY2VlZGVkIGJ5IGZyb206W3NzdHRdIHRvOltzc3NzdF0KKyAgICAgIExpbmUgMzogcHJlY2VlZGVkIGJ5IGZyb206W3NzdHN0XSB0bzpbc3Nzc3NzXQorTGluZSA0OiAgIGhhcyBmcm9tOltzc3RdIHRvOltzc3NdIGFmdGVyIDoKK0xpbmUgNTogaGFzIGZyb206W3RdIHRvOltzc10gYXQgZW5kCisiIiIKKworcGF0Y2g5MTQ1NzVfZnJvbTMgPSAiIiJsaW5lIDAKKzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2ODkwMTIzNDUKK2xpbmUgMQorbGluZSAyCitsaW5lIDMKK2xpbmUgNCAgIGNoYW5nZWQKK2xpbmUgNSAgIGNoYW5nZWQKK2xpbmUgNiAgIGNoYW5nZWQKK2xpbmUgNworbGluZSA4ICBzdWJ0cmFjdGVkCitsaW5lIDkKKzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2ODkwMTIzNDUKK3Nob3J0IGxpbmUKK2p1c3QgZml0cyBpbiEhCitqdXN0IGZpdHMgaW4gdHdvIGxpbmVzIHl1cCEhCit0aGUgZW5kIiIiCisKK3BhdGNoOTE0NTc1X3RvMyA9ICIiImxpbmUgMAorMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY4OTAxMjM0NQorbGluZSAxCitsaW5lIDIgICAgYWRkZWQKK2xpbmUgMworbGluZSA0ICAgY2hhbkdFZAorbGluZSA1YSAgY2hhbkdlZAorbGluZSA2YSAgY2hhbmdFZAorbGluZSA3CitsaW5lIDgKK2xpbmUgOQorMTIzNDU2Nzg5MAorYW5vdGhlciBsb25nIGxpbmUgdGhhdCBuZWVkcyB0byBiZSB3cmFwcGVkCitqdXN0IGZpdFMgaW4hIQoranVzdCBmaXRzIGluIHR3byBsaW5lUyB5dXAhIQordGhlIGVuZCIiIgorCitjbGFzcyBUZXN0U0ZwYXRjaGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2h0bWxfZGlmZihzZWxmKToKKyAgICAgICAgIyBDaGVjayBTRiBwYXRjaCA5MTQ1NzUgZm9yIGdlbmVyYXRpbmcgSFRNTCBkaWZmZXJlbmNlcworICAgICAgICBmMWEgPSAoKHBhdGNoOTE0NTc1X2Zyb20xICsgJzEyM1xuJyoxMCkqMykKKyAgICAgICAgdDFhID0gKHBhdGNoOTE0NTc1X3RvMSArICcxMjNcbicqMTApKjMKKyAgICAgICAgZjFiID0gJzQ1NlxuJyoxMCArIGYxYQorICAgICAgICB0MWIgPSAnNDU2XG4nKjEwICsgdDFhCisgICAgICAgIGYxYSA9IGYxYS5zcGxpdGxpbmVzKCkKKyAgICAgICAgdDFhID0gdDFhLnNwbGl0bGluZXMoKQorICAgICAgICBmMWIgPSBmMWIuc3BsaXRsaW5lcygpCisgICAgICAgIHQxYiA9IHQxYi5zcGxpdGxpbmVzKCkKKyAgICAgICAgZjIgPSBwYXRjaDkxNDU3NV9mcm9tMi5zcGxpdGxpbmVzKCkKKyAgICAgICAgdDIgPSBwYXRjaDkxNDU3NV90bzIuc3BsaXRsaW5lcygpCisgICAgICAgIGYzID0gcGF0Y2g5MTQ1NzVfZnJvbTMKKyAgICAgICAgdDMgPSBwYXRjaDkxNDU3NV90bzMKKyAgICAgICAgaSA9IGRpZmZsaWIuSHRtbERpZmYoKQorICAgICAgICBqID0gZGlmZmxpYi5IdG1sRGlmZih0YWJzaXplPTIpCisgICAgICAgIGsgPSBkaWZmbGliLkh0bWxEaWZmKHdyYXBjb2x1bW49MTQpCisKKyAgICAgICAgZnVsbCA9IGkubWFrZV9maWxlKGYxYSx0MWEsJ2Zyb20nLCd0bycsY29udGV4dD1GYWxzZSxudW1saW5lcz01KQorICAgICAgICB0YWJsZXMgPSAnXG4nLmpvaW4oCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgJzxoMj5Db250ZXh0IChmaXJzdCBkaWZmIHdpdGhpbiBudW1saW5lcz01KGRlZmF1bHQpKTwvaDI+JywKKyAgICAgICAgICAgICBpLm1ha2VfdGFibGUoZjFhLHQxYSwnZnJvbScsJ3RvJyxjb250ZXh0PVRydWUpLAorICAgICAgICAgICAgICc8aDI+Q29udGV4dCAoZmlyc3QgZGlmZiBhZnRlciBudW1saW5lcz01KGRlZmF1bHQpKTwvaDI+JywKKyAgICAgICAgICAgICBpLm1ha2VfdGFibGUoZjFiLHQxYiwnZnJvbScsJ3RvJyxjb250ZXh0PVRydWUpLAorICAgICAgICAgICAgICc8aDI+Q29udGV4dCAobnVtbGluZXM9Nik8L2gyPicsCisgICAgICAgICAgICAgaS5tYWtlX3RhYmxlKGYxYSx0MWEsJ2Zyb20nLCd0bycsY29udGV4dD1UcnVlLG51bWxpbmVzPTYpLAorICAgICAgICAgICAgICc8aDI+Q29udGV4dCAobnVtbGluZXM9MCk8L2gyPicsCisgICAgICAgICAgICAgaS5tYWtlX3RhYmxlKGYxYSx0MWEsJ2Zyb20nLCd0bycsY29udGV4dD1UcnVlLG51bWxpbmVzPTApLAorICAgICAgICAgICAgICc8aDI+U2FtZSBDb250ZXh0PC9oMj4nLAorICAgICAgICAgICAgIGkubWFrZV90YWJsZShmMWEsZjFhLCdmcm9tJywndG8nLGNvbnRleHQ9VHJ1ZSksCisgICAgICAgICAgICAgJzxoMj5TYW1lIEZ1bGw8L2gyPicsCisgICAgICAgICAgICAgaS5tYWtlX3RhYmxlKGYxYSxmMWEsJ2Zyb20nLCd0bycsY29udGV4dD1GYWxzZSksCisgICAgICAgICAgICAgJzxoMj5FbXB0eSBDb250ZXh0PC9oMj4nLAorICAgICAgICAgICAgIGkubWFrZV90YWJsZShbXSxbXSwnZnJvbScsJ3RvJyxjb250ZXh0PVRydWUpLAorICAgICAgICAgICAgICc8aDI+RW1wdHkgRnVsbDwvaDI+JywKKyAgICAgICAgICAgICBpLm1ha2VfdGFibGUoW10sW10sJ2Zyb20nLCd0bycsY29udGV4dD1GYWxzZSksCisgICAgICAgICAgICAgJzxoMj50YWJzaXplPTI8L2gyPicsCisgICAgICAgICAgICAgai5tYWtlX3RhYmxlKGYyLHQyKSwKKyAgICAgICAgICAgICAnPGgyPnRhYnNpemU9ZGVmYXVsdDwvaDI+JywKKyAgICAgICAgICAgICBpLm1ha2VfdGFibGUoZjIsdDIpLAorICAgICAgICAgICAgICc8aDI+Q29udGV4dCAod3JhcGNvbHVtbj0xNCxudW1saW5lcz0wKTwvaDI+JywKKyAgICAgICAgICAgICBrLm1ha2VfdGFibGUoZjMuc3BsaXRsaW5lcygpLHQzLnNwbGl0bGluZXMoKSxjb250ZXh0PVRydWUsbnVtbGluZXM9MCksCisgICAgICAgICAgICAgJzxoMj53cmFwY29sdW1uPTE0LHNwbGl0bGluZXMoKTwvaDI+JywKKyAgICAgICAgICAgICBrLm1ha2VfdGFibGUoZjMuc3BsaXRsaW5lcygpLHQzLnNwbGl0bGluZXMoKSksCisgICAgICAgICAgICAgJzxoMj53cmFwY29sdW1uPTE0LHNwbGl0bGluZXMoVHJ1ZSk8L2gyPicsCisgICAgICAgICAgICAgay5tYWtlX3RhYmxlKGYzLnNwbGl0bGluZXMoVHJ1ZSksdDMuc3BsaXRsaW5lcyhUcnVlKSksCisgICAgICAgICAgICAgXSkKKyAgICAgICAgYWN0dWFsID0gZnVsbC5yZXBsYWNlKCc8L2JvZHk+JywnXG4lc1xuPC9ib2R5PicgJSB0YWJsZXMpCisKKyAgICAgICAgIyB0ZW1wb3JhcmlseSB1bmNvbW1lbnQgbmV4dCB0d28gbGluZXMgdG8gYmFzZWxpbmUgdGhpcyB0ZXN0CisgICAgICAgICN3aXRoIG9wZW4oJ3Rlc3RfZGlmZmxpYl9leHBlY3QuaHRtbCcsJ3cnKSBhcyBmcDoKKyAgICAgICAgIyAgICBmcC53cml0ZShhY3R1YWwpCisKKyAgICAgICAgd2l0aCBvcGVuKGZpbmRmaWxlKCd0ZXN0X2RpZmZsaWJfZXhwZWN0Lmh0bWwnKSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZnAucmVhZCgpKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaW9uX2xpbWl0KHNlbGYpOgorICAgICAgICAjIENoZWNrIGlmIHRoZSBwcm9ibGVtIGRlc2NyaWJlZCBpbiBwYXRjaCAjMTQxMzcxMSBleGlzdHMuCisgICAgICAgIGxpbWl0ID0gc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCkKKyAgICAgICAgb2xkID0gWyhpJTIgYW5kICJLOiVkIiBvciAiVjpBOiVkIikgJSBpIGZvciBpIGluIHJhbmdlKGxpbWl0KjIpXQorICAgICAgICBuZXcgPSBbKGklMiBhbmQgIks6JWQiIG9yICJWOkI6JWQiKSAlIGkgZm9yIGkgaW4gcmFuZ2UobGltaXQqMildCisgICAgICAgIGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsIG9sZCwgbmV3KS5nZXRfb3Bjb2RlcygpCisKKworY2xhc3MgVGVzdE91dHB1dEZvcm1hdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdGFiX2RlbGltaXRlcihzZWxmKToKKyAgICAgICAgYXJncyA9IFsnb25lJywgJ3R3bycsICdPcmlnaW5hbCcsICdDdXJyZW50JywKKyAgICAgICAgICAgICcyMDA1LTAxLTI2IDIzOjMwOjUwJywgJzIwMTAtMDQtMDIgMTA6MjA6NTInXQorICAgICAgICB1ZCA9IGRpZmZsaWIudW5pZmllZF9kaWZmKCphcmdzLCBsaW5ldGVybT0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHVkKVswOjJdLCBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tIE9yaWdpbmFsXHQyMDA1LTAxLTI2IDIzOjMwOjUwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIrKysgQ3VycmVudFx0MjAxMC0wNC0wMiAxMDoyMDo1MiJdKQorICAgICAgICBjZCA9IGRpZmZsaWIuY29udGV4dF9kaWZmKCphcmdzLCBsaW5ldGVybT0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNkKVswOjJdLCBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiKioqIE9yaWdpbmFsXHQyMDA1LTAxLTI2IDIzOjMwOjUwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0gQ3VycmVudFx0MjAxMC0wNC0wMiAxMDoyMDo1MiJdKQorCisgICAgZGVmIHRlc3Rfbm9fdHJhaWxpbmdfdGFiX29uX2VtcHR5X2ZpbGVkYXRlKHNlbGYpOgorICAgICAgICBhcmdzID0gWydvbmUnLCAndHdvJywgJ09yaWdpbmFsJywgJ0N1cnJlbnQnXQorICAgICAgICB1ZCA9IGRpZmZsaWIudW5pZmllZF9kaWZmKCphcmdzLCBsaW5ldGVybT0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHVkKVswOjJdLCBbIi0tLSBPcmlnaW5hbCIsICIrKysgQ3VycmVudCJdKQorCisgICAgICAgIGNkID0gZGlmZmxpYi5jb250ZXh0X2RpZmYoKmFyZ3MsIGxpbmV0ZXJtPScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY2QpWzA6Ml0sIFsiKioqIE9yaWdpbmFsIiwgIi0tLSBDdXJyZW50Il0pCisKKyAgICBkZWYgdGVzdF9yYW5nZV9mb3JtYXRfdW5pZmllZChzZWxmKToKKyAgICAgICAgIyBQZXIgdGhlIGRpZmYgc3BlYyBhdCBodHRwOi8vd3d3LnVuaXgub3JnL3NpbmdsZV91bml4X3NwZWNpZmljYXRpb24vCisgICAgICAgIHNwZWMgPSAnJydcCisgICAgICAgICAgIEVhY2ggPHJhbmdlPiBmaWVsZCBzaGFsbCBiZSBvZiB0aGUgZm9ybToKKyAgICAgICAgICAgICAlMWQiLCA8YmVnaW5uaW5nIGxpbmUgbnVtYmVyPiAgaWYgdGhlIHJhbmdlIGNvbnRhaW5zIGV4YWN0bHkgb25lIGxpbmUsCisgICAgICAgICAgIGFuZDoKKyAgICAgICAgICAgICIlMWQsJTFkIiwgPGJlZ2lubmluZyBsaW5lIG51bWJlcj4sIDxudW1iZXIgb2YgbGluZXM+IG90aGVyd2lzZS4KKyAgICAgICAgICAgSWYgYSByYW5nZSBpcyBlbXB0eSwgaXRzIGJlZ2lubmluZyBsaW5lIG51bWJlciBzaGFsbCBiZSB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgIHRoZSBsaW5lIGp1c3QgYmVmb3JlIHRoZSByYW5nZSwgb3IgMCBpZiB0aGUgZW1wdHkgcmFuZ2Ugc3RhcnRzIHRoZSBmaWxlLgorICAgICAgICAnJycKKyAgICAgICAgZm10ID0gZGlmZmxpYi5fZm9ybWF0X3JhbmdlX3VuaWZpZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQoMywzKSwgJzMsMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10KDMsNCksICc0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQoMyw1KSwgJzQsMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10KDMsNiksICc0LDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCgwLDApLCAnMCwwJykKKworICAgIGRlZiB0ZXN0X3JhbmdlX2Zvcm1hdF9jb250ZXh0KHNlbGYpOgorICAgICAgICAjIFBlciB0aGUgZGlmZiBzcGVjIGF0IGh0dHA6Ly93d3cudW5peC5vcmcvc2luZ2xlX3VuaXhfc3BlY2lmaWNhdGlvbi8KKyAgICAgICAgc3BlYyA9ICcnJ1wKKyAgICAgICAgICAgVGhlIHJhbmdlIG9mIGxpbmVzIGluIGZpbGUxIHNoYWxsIGJlIHdyaXR0ZW4gaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQKKyAgICAgICAgICAgaWYgdGhlIHJhbmdlIGNvbnRhaW5zIHR3byBvciBtb3JlIGxpbmVzOgorICAgICAgICAgICAgICAgIioqKiAlZCwlZCAqKioqXG4iLCA8YmVnaW5uaW5nIGxpbmUgbnVtYmVyPiwgPGVuZGluZyBsaW5lIG51bWJlcj4KKyAgICAgICAgICAgYW5kIHRoZSBmb2xsb3dpbmcgZm9ybWF0IG90aGVyd2lzZToKKyAgICAgICAgICAgICAgICIqKiogJWQgKioqKlxuIiwgPGVuZGluZyBsaW5lIG51bWJlcj4KKyAgICAgICAgICAgVGhlIGVuZGluZyBsaW5lIG51bWJlciBvZiBhbiBlbXB0eSByYW5nZSBzaGFsbCBiZSB0aGUgbnVtYmVyIG9mIHRoZSBwcmVjZWRpbmcgbGluZSwKKyAgICAgICAgICAgb3IgMCBpZiB0aGUgcmFuZ2UgaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLgorCisgICAgICAgICAgIE5leHQsIHRoZSByYW5nZSBvZiBsaW5lcyBpbiBmaWxlMiBzaGFsbCBiZSB3cml0dGVuIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0CisgICAgICAgICAgIGlmIHRoZSByYW5nZSBjb250YWlucyB0d28gb3IgbW9yZSBsaW5lczoKKyAgICAgICAgICAgICAgICItLS0gJWQsJWQgLS0tLVxuIiwgPGJlZ2lubmluZyBsaW5lIG51bWJlcj4sIDxlbmRpbmcgbGluZSBudW1iZXI+CisgICAgICAgICAgIGFuZCB0aGUgZm9sbG93aW5nIGZvcm1hdCBvdGhlcndpc2U6CisgICAgICAgICAgICAgICAiLS0tICVkIC0tLS1cbiIsIDxlbmRpbmcgbGluZSBudW1iZXI+CisgICAgICAgICcnJworICAgICAgICBmbXQgPSBkaWZmbGliLl9mb3JtYXRfcmFuZ2VfY29udGV4dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCgzLDMpLCAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10KDMsNCksICc0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQoMyw1KSwgJzQsNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10KDMsNiksICc0LDYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCgwLDApLCAnMCcpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGRpZmZsaWIuSHRtbERpZmYuX2RlZmF1bHRfcHJlZml4ID0gMAorICAgIERvY3Rlc3RzID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoZGlmZmxpYikKKyAgICBydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3RXaXRoQXNjaWksIFRlc3RBdXRvanVuaywgVGVzdFNGcGF0Y2hlcywgVGVzdFNGYnVncywKKyAgICAgICAgVGVzdE91dHB1dEZvcm1hdCwgRG9jdGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RpZmZsaWJfZXhwZWN0Lmh0bWwgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kaWZmbGliX2V4cGVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYjZkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kaWZmbGliX2V4cGVjdC5odG1sCkBAIC0wLDAgKzEsNTI2IEBACisKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCisgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorCis8aHRtbD4KKworPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIgorICAgICAgICAgIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorICAgIDx0aXRsZT48L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgIHRhYmxlLmRpZmYge2ZvbnQtZmFtaWx5OkNvdXJpZXI7IGJvcmRlcjptZWRpdW07fQorICAgICAgICAuZGlmZl9oZWFkZXIge2JhY2tncm91bmQtY29sb3I6I2UwZTBlMH0KKyAgICAgICAgdGQuZGlmZl9oZWFkZXIge3RleHQtYWxpZ246cmlnaHR9CisgICAgICAgIC5kaWZmX25leHQge2JhY2tncm91bmQtY29sb3I6I2MwYzBjMH0KKyAgICAgICAgLmRpZmZfYWRkIHtiYWNrZ3JvdW5kLWNvbG9yOiNhYWZmYWF9CisgICAgICAgIC5kaWZmX2NoZyB7YmFja2dyb3VuZC1jb2xvcjojZmZmZjc3fQorICAgICAgICAuZGlmZl9zdWIge2JhY2tncm91bmQtY29sb3I6I2ZmYWFhYX0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKyAgICAKKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ190bzBfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDx0aGVhZD48dHI+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+ZnJvbTwvdGg+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+dG88L3RoPjwvdHI+PC90aGVhZD4KKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8wX18wIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8wX18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMF9fMCI+ZjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzBfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMF9fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF82Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF82Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF85Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF85Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8xMCI+MTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8xMSI+MTE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzExIj4xMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzBfXzEiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMTIiPjEyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8xMyI+MTM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzE0Ij4xNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMTYiPjE2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8wX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMF9fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMTciPjE3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+dHQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzE4Ij4xODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NS4mbmJzcDtGbGF0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7bmVzdGVkLjwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzIxIj4yMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMjEiPjIxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMjIiPjIyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8yMiI+MjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8yMyI+MjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzIzIj4yMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzI0Ij4yNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMjQiPjI0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMjUiPjI1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8yNSI+MjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8yNiI+MjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzI2Ij4yNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzBfXzIiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzI3Ij4yNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMjciPjI3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMjgiPjI4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8yOCI+Mjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8yOSI+Mjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzI5Ij4yOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzMwIj4zMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMzAiPjMwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMzEiPjMxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8zMSI+MzE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8wX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMzIiPjMyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+VFQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8wX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8zMyI+MzM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMzMiPjMzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzM1Ij4zNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzM1Ij4zNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8zNiI+MzY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzM2Ij4zNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzM3Ij4zNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMzciPjM3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMzgiPjM4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8zOCI+Mzg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8zOSI+Mzk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzM5Ij4zOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzQwIj40MDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfNDAiPjQwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfNDEiPjQxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF80MSI+NDE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF80MiI+NDI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzQyIj40MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzQzIj40MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfNDMiPjQzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfNDQiPjQ0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF80NCI+NDQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF80NSI+NDU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzQ1Ij40NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIHN1bW1hcnk9IkxlZ2VuZHMiPgorICAgICAgICA8dHI+IDx0aCBjb2xzcGFuPSIyIj4gTGVnZW5kcyA8L3RoPiA8L3RyPgorICAgICAgICA8dHI+IDx0ZD4gPHRhYmxlIGJvcmRlcj0iIiBzdW1tYXJ5PSJDb2xvcnMiPgorICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGg+IENvbG9ycyA8L3RoPiA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDtBZGRlZCZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX2NoZyI+Q2hhbmdlZDwvdGQ+IDwvdHI+CisgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9zdWIiPkRlbGV0ZWQ8L3RkPiA8L3RyPgorICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPgorICAgICAgICAgICAgIDx0ZD4gPHRhYmxlIGJvcmRlcj0iIiBzdW1tYXJ5PSJMaW5rcyI+CisgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj4gTGlua3MgPC90aD4gPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPihmKWlyc3QgY2hhbmdlPC90ZD4gPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPihuKWV4dCBjaGFuZ2U8L3RkPiA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGQ+KHQpb3A8L3RkPiA8L3RyPgorICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPiA8L3RyPgorICAgIDwvdGFibGU+CisKKzxoMj5Db250ZXh0IChmaXJzdCBkaWZmIHdpdGhpbiBudW1saW5lcz01KGRlZmF1bHQpKTwvaDI+CisKKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ190bzFfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDx0aGVhZD48dHI+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+ZnJvbTwvdGg+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+dG88L3RoPjwvdHI+PC90aGVhZD4KKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xX18wIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xX18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMV9fMCI+ZjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzFfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMV9fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV82Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV82Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV85Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV85Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8xMCI+MTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PiAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMV9fMSI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMTIiPjEyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8xMyI+MTM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzE0Ij4xNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8xNSI+MTU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzFfXzIiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMTciPjE3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+VFQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8xNyI+MTc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMTgiPjE4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzE5Ij4xOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzE4Ij4xODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8yMCI+MjA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzE5Ij4xOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxpY2F0ZWQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4Ljwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8yMCI+MjA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMjEiPjIxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8yMSI+MjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8yMiI+MjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzIyIj4yMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzIzIj4yMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMjMiPjIzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMjQiPjI0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8yNCI+MjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8yNSI+MjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzI1Ij4yNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+ICAgICAgICAKKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xX18yIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8yNyI+Mjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzI3Ij4yNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzI4Ij4yODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMjgiPjI4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMjkiPjI5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8yOSI+Mjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8zMCI+MzA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzMwIj4zMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzMxIj4zMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMzEiPjMxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMV9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMV9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8zMiI+MzI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMzMiPjMzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzM0Ij4zNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzMzIj4zMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzM0Ij4zNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxpY2F0ZWQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4Ljwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMzYiPjM2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8zNiI+MzY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8zNyI+Mzc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzM3Ij4zNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzM4Ij4zODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMzgiPjM4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMzkiPjM5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8zOSI+Mzk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV80MCI+NDA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzQwIj40MDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzxoMj5Db250ZXh0IChmaXJzdCBkaWZmIGFmdGVyIG51bWxpbmVzPTUoZGVmYXVsdCkpPC9oMj4KKworICAgIDx0YWJsZSBjbGFzcz0iZGlmZiIgaWQ9ImRpZmZsaWJfY2hnX3RvMl9fdG9wIgorICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPHRoZWFkPjx0cj48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj5mcm9tPC90aD48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj50bzwvdGg+PC90cj48L3RoZWFkPgorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzJfXzAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+NDU2PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+NDU2PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjQ1NjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjQ1NjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj40NTY8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj40NTY8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj40NTY8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjQ1NjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8xMSI+MTE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8yX18xIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMl9fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMTIiPjEyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+dHQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8xMyI+MTM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NS4mbmJzcDtGbGF0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7bmVzdGVkLjwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMTYiPjE2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMTciPjE3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8xNyI+MTc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzE4Ij4xODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzE5Ij4xOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMTkiPjE5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8yMCI+MjA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PiAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMl9fMSI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMjIiPjIyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8yMiI+MjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8yMyI+MjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzIzIj4yMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzI0Ij4yNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMjQiPjI0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMjUiPjI1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8yNSI+MjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8yNiI+MjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzI2Ij4yNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzJfXzIiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMjciPjI3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+VFQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8yX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8yNyI+Mjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMjgiPjI4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzI5Ij4yOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzI4Ij4yODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8zMCI+MzA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzI5Ij4yOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxpY2F0ZWQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4Ljwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8zMCI+MzA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMzEiPjMxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8zMSI+MzE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8zMiI+MzI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzMzIj4zMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMzMiPjMzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8zNCI+MzQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzM1Ij4zNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+ICAgICAgICAKKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8yX18yIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8zNyI+Mzc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzM3Ij4zNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzM4Ij4zODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMzgiPjM4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMzkiPjM5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8zOSI+Mzk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl80MCI+NDA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzQwIj40MDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzQxIj40MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfNDEiPjQxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMl9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzQyIj40MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMl9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl80MiI+NDI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfNDMiPjQzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzQ0Ij40NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzQzIj40MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl80NSI+NDU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzQ0Ij40NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxpY2F0ZWQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4Ljwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl80NSI+NDU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfNDYiPjQ2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl80NiI+NDY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl80NyI+NDc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzQ3Ij40NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzQ4Ij40ODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfNDgiPjQ4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfNDkiPjQ5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl80OSI+NDk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl81MCI+NTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzUwIj41MDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzxoMj5Db250ZXh0IChudW1saW5lcz02KTwvaDI+CisKKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ190bzNfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDx0aGVhZD48dHI+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+ZnJvbTwvdGg+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+dG88L3RoPjwvdHI+PC90aGVhZD4KKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8zX18wIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8zX18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvM19fMCI+ZjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzNfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvM19fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM182Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM182Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM185Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM185Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18xMCI+MTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8zX18xIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18xMSI+MTE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzExIj4xMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMTIiPjEyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18xMyI+MTM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzE0Ij4xNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMTYiPjE2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8zX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvM19fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMTciPjE3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+dHQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzE4Ij4xODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NS4mbmJzcDtGbGF0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7bmVzdGVkLjwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzIxIj4yMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMjEiPjIxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMjIiPjIyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18yMiI+MjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18yMyI+MjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzIzIj4yMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzI0Ij4yNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMjQiPjI0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMjUiPjI1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18yNSI+MjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8zX18yIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18yNiI+MjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzI2Ij4yNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzI3Ij4yNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMjciPjI3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMjgiPjI4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18yOCI+Mjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18yOSI+Mjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzI5Ij4yOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzMwIj4zMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMzAiPjMwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMzEiPjMxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18zMSI+MzE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8zX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMzIiPjMyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+VFQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8zX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18zMyI+MzM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMzMiPjMzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzM1Ij4zNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzM1Ij4zNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18zNiI+MzY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzM2Ij4zNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzM3Ij4zNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMzciPjM3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMzgiPjM4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18zOCI+Mzg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18zOSI+Mzk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzM5Ij4zOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzQwIj40MDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfNDAiPjQwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfNDEiPjQxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM180MSI+NDE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+Cis8aDI+Q29udGV4dCAobnVtbGluZXM9MCk8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG80X190b3AiCisgICAgICAgICAgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgcnVsZXM9Imdyb3VwcyIgPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8dGhlYWQ+PHRyPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPmZyb208L3RoPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPnRvPC90aD48L3RyPjwvdGhlYWQ+CisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvNF9fMCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvNF9fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNF8yIj4yPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+VFQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG80X18xIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNF8yIj4yPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+dHQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb200XzMiPjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTRfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG80XzMiPjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTRfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzRfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxpY2F0ZWQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4Ljwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNF81Ij41PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NS4mbmJzcDtGbGF0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7bmVzdGVkLjwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+ICAgICAgICAKKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG80X18xIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG80X18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb200XzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvNF9fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzRfMTciPjE3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+dHQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb200XzE4Ij4xODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNF8xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNF8xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTRfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNF8xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzRfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NS4mbmJzcDtGbGF0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7bmVzdGVkLjwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+ICAgICAgICAKKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG80X18yIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG80X190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTRfMzIiPjMyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+VFQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG80X190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG80XzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNF8zMyI+MzM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTRfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzRfMzMiPjMzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb200XzM1Ij4zNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzRfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG80XzM1Ij4zNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+Cis8aDI+U2FtZSBDb250ZXh0PC9oMj4KKworICAgIDx0YWJsZSBjbGFzcz0iZGlmZiIgaWQ9ImRpZmZsaWJfY2hnX3RvNV9fdG9wIgorICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPHRoZWFkPjx0cj48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj5mcm9tPC90aD48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj50bzwvdGg+PC90cj48L3RoZWFkPgorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzVfX3RvcCI+dDwvYT48L3RkPjx0ZD48L3RkPjx0ZD4mbmJzcDtObyBEaWZmZXJlbmNlcyBGb3VuZCZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzVfX3RvcCI+dDwvYT48L3RkPjx0ZD48L3RkPjx0ZD4mbmJzcDtObyBEaWZmZXJlbmNlcyBGb3VuZCZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorPGgyPlNhbWUgRnVsbDwvaDI+CisKKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ190bzZfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDx0aGVhZD48dHI+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+ZnJvbTwvdGg+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+dG88L3RoPjwvdHI+PC90aGVhZD4KKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG82X190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG82X190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8yIj4yPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZVRUZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmVUVGVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl80Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl81Ij41PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl81Ij41PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8xMSI+MTE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8xNSI+MTU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMTYiPjE2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMTciPjE3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZVRUZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMTciPjE3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZVRUZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzE4Ij4xODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzE4Ij4xODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8yMCI+MjA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8yMSI+MjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzIxIj4yMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzIyIj4yMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMjIiPjIyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMjMiPjIzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8yMyI+MjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8yNCI+MjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzI0Ij4yNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzI1Ij4yNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMjUiPjI1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMjYiPjI2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8yNiI+MjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8yNyI+Mjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzI3Ij4yNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzI4Ij4yODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMjgiPjI4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMjkiPjI5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8yOSI+Mjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8zMCI+MzA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzMwIj4zMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzMxIj4zMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMzEiPjMxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMzIiPjMyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZVRUZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMzIiPjMyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZVRUZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzMzIj4zMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzMzIj4zMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8zNCI+MzQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8zNCI+MzQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMzUiPjM1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8zNiI+MzY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzM2Ij4zNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzM3Ij4zNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMzciPjM3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMzgiPjM4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8zOCI+Mzg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8zOSI+Mzk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzM5Ij4zOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzQwIj40MDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfNDAiPjQwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfNDEiPjQxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl80MSI+NDE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl80MiI+NDI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzQyIj40MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzQzIj40MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfNDMiPjQzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfNDQiPjQ0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl80NCI+NDQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl80NSI+NDU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzQ1Ij40NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzxoMj5FbXB0eSBDb250ZXh0PC9oMj4KKworICAgIDx0YWJsZSBjbGFzcz0iZGlmZiIgaWQ9ImRpZmZsaWJfY2hnX3RvN19fdG9wIgorICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPHRoZWFkPjx0cj48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj5mcm9tPC90aD48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj50bzwvdGg+PC90cj48L3RoZWFkPgorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzdfX3RvcCI+dDwvYT48L3RkPjx0ZD48L3RkPjx0ZD4mbmJzcDtObyBEaWZmZXJlbmNlcyBGb3VuZCZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzdfX3RvcCI+dDwvYT48L3RkPjx0ZD48L3RkPjx0ZD4mbmJzcDtObyBEaWZmZXJlbmNlcyBGb3VuZCZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorPGgyPkVtcHR5IEZ1bGw8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG84X190b3AiCisgICAgICAgICAgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgcnVsZXM9Imdyb3VwcyIgPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8dGhlYWQ+PHRyPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPmZyb208L3RoPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPnRvPC90aD48L3RyPjwvdGhlYWQ+CisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvOF9fdG9wIj50PC9hPjwvdGQ+PHRkPjwvdGQ+PHRkPiZuYnNwO0VtcHR5IEZpbGUmbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG84X190b3AiPnQ8L2E+PC90ZD48dGQ+PC90ZD48dGQ+Jm5ic3A7RW1wdHkgRmlsZSZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorPGgyPnRhYnNpemU9MjwvaDI+CisKKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ190bzlfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIAorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzlfXzAiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzlfXzAiPmY8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTlfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG85X18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvOV8xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvOV9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb205XzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+TGluZSZuYnNwOzE6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOlt0dF0mbmJzcDt0bzpbc3Nzc108L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG85X190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG85XzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+TGluZSZuYnNwOzE6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOlt0dF0mbmJzcDt0bzpbc3Nzc108L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb205XzMiPjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7Jm5ic3A7TGluZSZuYnNwOzI6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOltzc3R0XSZuYnNwO3RvOltzc3NzdF08L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzlfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDsmbmJzcDtMaW5lJm5ic3A7MjombmJzcDtwcmVjZWVkZWQmbmJzcDtieSZuYnNwO2Zyb206W3NzdHRdJm5ic3A7dG86W3Nzc3N0XTwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTlfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj5MaW5lJm5ic3A7MzombmJzcDtwcmVjZWVkZWQmbmJzcDtieSZuYnNwO2Zyb206W3NzdHN0XSZuYnNwO3RvOltzc3Nzc3NdPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG85XzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+TGluZSZuYnNwOzM6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOltzc3RzdF0mbmJzcDt0bzpbc3Nzc3NzXTwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTlfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5MaW5lJm5ic3A7NDombmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOzwvc3Bhbj5oYXMmbmJzcDtmcm9tOltzc3RdJm5ic3A7dG86W3Nzc10mbmJzcDthZnRlciZuYnNwOzo8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzlfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5MaW5lJm5ic3A7NDombmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOzwvc3Bhbj5oYXMmbmJzcDtmcm9tOltzc3RdJm5ic3A7dG86W3Nzc10mbmJzcDthZnRlciZuYnNwOzo8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb205XzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+TGluZSZuYnNwOzU6Jm5ic3A7aGFzJm5ic3A7ZnJvbTpbdF0mbmJzcDt0bzpbc3NdJm5ic3A7YXQmbmJzcDtlbmQ8c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzlfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5MaW5lJm5ic3A7NTombmJzcDtoYXMmbmJzcDtmcm9tOlt0XSZuYnNwO3RvOltzc10mbmJzcDthdCZuYnNwO2VuZDwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorPGgyPnRhYnNpemU9ZGVmYXVsdDwvaDI+CisKKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ190bzEwX190b3AiCisgICAgICAgICAgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgcnVsZXM9Imdyb3VwcyIgPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICAKKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xMF9fMCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTBfXzAiPmY8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEwXzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTBfXzAiPmY8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMF8xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTBfX3RvcCI+dDwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTBfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj5MaW5lJm5ic3A7MTombmJzcDtwcmVjZWVkZWQmbmJzcDtieSZuYnNwO2Zyb206W3R0XSZuYnNwO3RvOltzc3NzXTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEwX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMF8yIj4yPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPkxpbmUmbmJzcDsxOiZuYnNwO3ByZWNlZWRlZCZuYnNwO2J5Jm5ic3A7ZnJvbTpbdHRdJm5ic3A7dG86W3Nzc3NdPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTBfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtMaW5lJm5ic3A7MjombmJzcDtwcmVjZWVkZWQmbmJzcDtieSZuYnNwO2Zyb206W3NzdHRdJm5ic3A7dG86W3Nzc3N0XTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTBfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtMaW5lJm5ic3A7MjombmJzcDtwcmVjZWVkZWQmbmJzcDtieSZuYnNwO2Zyb206W3NzdHRdJm5ic3A7dG86W3Nzc3N0XTwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEwXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+TGluZSZuYnNwOzM6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOltzc3RzdF0mbmJzcDt0bzpbc3Nzc3NzXTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTBfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj5MaW5lJm5ic3A7MzombmJzcDtwcmVjZWVkZWQmbmJzcDtieSZuYnNwO2Zyb206W3NzdHN0XSZuYnNwO3RvOltzc3Nzc3NdPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTBfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5MaW5lJm5ic3A7NDombmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj5oYXMmbmJzcDtmcm9tOltzc3RdJm5ic3A7dG86W3Nzc10mbmJzcDthZnRlciZuYnNwOzo8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEwXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+TGluZSZuYnNwOzQ6Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDs8L3NwYW4+aGFzJm5ic3A7ZnJvbTpbc3N0XSZuYnNwO3RvOltzc3NdJm5ic3A7YWZ0ZXImbmJzcDs6PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTBfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5MaW5lJm5ic3A7NTombmJzcDtoYXMmbmJzcDtmcm9tOlt0XSZuYnNwO3RvOltzc10mbmJzcDthdCZuYnNwO2VuZDxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTBfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5MaW5lJm5ic3A7NTombmJzcDtoYXMmbmJzcDtmcm9tOlt0XSZuYnNwO3RvOltzc10mbmJzcDthdCZuYnNwO2VuZDwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorPGgyPkNvbnRleHQgKHdyYXBjb2x1bW49MTQsbnVtbGluZXM9MCk8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG8xMV9fdG9wIgorICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMTFfXzAiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzExX18xIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMV80Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+bGluZSZuYnNwOzI8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTFfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMV80Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+bGluZSZuYnNwOzImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDthZGRlPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+ZDwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+ICAgICAgICAKKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xMV9fMSI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTFfXzIiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTExXzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzQmbmJzcDsmbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5nPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzExX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTFfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NCZuYnNwOyZuYnNwOyZuYnNwO2NoYW48c3BhbiBjbGFzcz0iZGlmZl9jaGciPkc8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5lPC9zcGFuPmQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5FPC9zcGFuPmQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMV83Ij43PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs1PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDs8L3NwYW4+Jm5ic3A7Jm5ic3A7Y2hhbjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Zzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzExXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPmE8L3NwYW4+Jm5ic3A7Jm5ic3A7Y2hhbjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Rzwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9jaGciPjwvc3Bhbj5lZDwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9jaGciPjwvc3Bhbj5lZDwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTExXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzY8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOzwvc3Bhbj4mbmJzcDsmbmJzcDtjaGFuZzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTFfOCI+ODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+YTwvc3Bhbj4mbmJzcDsmbmJzcDtjaGFuZzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+ZTwvc3Bhbj5kPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+RTwvc3Bhbj5kPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PiAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMTFfXzIiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzExX18zIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMV8xMCI+MTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj5saW5lJm5ic3A7OCZuYnNwOyZuYnNwO3N1YnRyYTwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMV9fMyI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzExXzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmxpbmUmbmJzcDs4PC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Y3RlZDwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDs8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+ICAgICAgICAKKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xMV9fMyI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTFfX3RvcCI+dDwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTFfMTIiPjEyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+MTIzNDU2Nzg5MDEyMzQ8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTFfX3RvcCI+dDwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzExXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPjEyMzQ1Njc4OTA8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj41Njc4OTAxMjM0NTY4OTwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDs8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPjAxMjM0NTwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDs8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMV8xMyI+MTM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj5zaG9ydCZuYnNwO2xpbmU8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMV8xMyI+MTM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj5hbm90aGVyJm5ic3A7bG9uZyZuYnNwO2w8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj5pbmUmbmJzcDt0aGF0Jm5ic3A7bmVlZHM8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDt0byZuYnNwO2JlJm5ic3A7d3JhcHBlZDwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMV8xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+anVzdCZuYnNwO2ZpdDxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+czwvc3Bhbj4mbmJzcDtpbiEhPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMV8xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+anVzdCZuYnNwO2ZpdDxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Uzwvc3Bhbj4mbmJzcDtpbiEhPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTFfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXRzJm5ic3A7aW4mbmJzcDt0PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMV8xNSI+MTU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+anVzdCZuYnNwO2ZpdHMmbmJzcDtpbiZuYnNwO3Q8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj53byZuYnNwO2xpbmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnM8L3NwYW4+Jm5ic3A7eXVwISE8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+d28mbmJzcDtsaW5lPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5TPC9zcGFuPiZuYnNwO3l1cCEhPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+Cis8aDI+d3JhcGNvbHVtbj0xNCxzcGxpdGxpbmVzKCk8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG8xMl9fdG9wIgorICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMTJfXzAiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEyX18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMl8xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDswPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTJfXzAiPmY8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMl8xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDswPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM0NTY3ODkwMTIzNDwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM0NTY3ODkwMTIzNDwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjU2Nzg5MDEyMzQ1Njg5PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjU2Nzg5MDEyMzQ1Njg5PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xMl9fMSI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjAxMjM0NTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4wMTIzNDU8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMl8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDsxPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMl8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDsxPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMl9fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPmxpbmUmbmJzcDsyPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEyX18xIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmxpbmUmbmJzcDsyJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7YWRkZTwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmQ8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTJfXzIiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzQmbmJzcDsmbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5nPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEyX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NCZuYnNwOyZuYnNwOyZuYnNwO2NoYW48c3BhbiBjbGFzcz0iZGlmZl9jaGciPkc8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5lPC9zcGFuPmQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5FPC9zcGFuPmQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzEyX18yIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7PC9zcGFuPiZuYnNwOyZuYnNwO2NoYW48c3BhbiBjbGFzcz0iZGlmZl9jaGciPmc8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMl83Ij43PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs1PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5hPC9zcGFuPiZuYnNwOyZuYnNwO2NoYW48c3BhbiBjbGFzcz0iZGlmZl9jaGciPkc8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj48L3NwYW4+ZWQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj48L3NwYW4+ZWQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMl84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs2PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDs8L3NwYW4+Jm5ic3A7Jm5ic3A7Y2hhbmc8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEyXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzY8c3BhbiBjbGFzcz0iZGlmZl9jaGciPmE8L3NwYW4+Jm5ic3A7Jm5ic3A7Y2hhbmc8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzEyX18zIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5lPC9zcGFuPmQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5FPC9zcGFuPmQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMl85Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs3PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMl85Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs3PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMl9fMyI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+bGluZSZuYnNwOzgmbmJzcDsmbmJzcDtzdWJ0cmE8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTJfXzMiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMl8xMCI+MTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj5saW5lJm5ic3A7ODwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPmN0ZWQ8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs5PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMl8xMSI+MTE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzk8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEyX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPjEyMzQ1Njc4OTAxMjM0PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEyX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMl8xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4xMjM0NTY3ODkwPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+NTY3ODkwMTIzNDU2ODk8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4wMTIzNDU8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+c2hvcnQmbmJzcDtsaW5lPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+YW5vdGhlciZuYnNwO2xvbmcmbmJzcDtsPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+aW5lJm5ic3A7dGhhdCZuYnNwO25lZWRzPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7dG8mbmJzcDtiZSZuYnNwO3dyYXBwZWQ8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXQ8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnM8L3NwYW4+Jm5ic3A7aW4hITwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXQ8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlM8L3NwYW4+Jm5ic3A7aW4hITwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5qdXN0Jm5ic3A7Zml0cyZuYnNwO2luJm5ic3A7dDwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXRzJm5ic3A7aW4mbmJzcDt0PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+d28mbmJzcDtsaW5lPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5zPC9zcGFuPiZuYnNwO3l1cCEhPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPndvJm5ic3A7bGluZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Uzwvc3Bhbj4mbmJzcDt5dXAhITwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj50aGUmbmJzcDtlbmQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEyXzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj50aGUmbmJzcDtlbmQ8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzxoMj53cmFwY29sdW1uPTE0LHNwbGl0bGluZXMoVHJ1ZSk8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG8xM19fdG9wIgorICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMTNfXzAiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEzX18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xM18xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDswPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTNfXzAiPmY8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xM18xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDswPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM0NTY3ODkwMTIzNDwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM0NTY3ODkwMTIzNDwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjU2Nzg5MDEyMzQ1Njg5PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjU2Nzg5MDEyMzQ1Njg5PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xM19fMSI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjAxMjM0NTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4wMTIzNDU8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xM18zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDsxPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xM18zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDsxPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xM19fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPmxpbmUmbmJzcDsyPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEzX18xIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmxpbmUmbmJzcDsyJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7YWRkZTwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmQ8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTNfXzIiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzQmbmJzcDsmbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5nPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEzX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NCZuYnNwOyZuYnNwOyZuYnNwO2NoYW48c3BhbiBjbGFzcz0iZGlmZl9jaGciPkc8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5lPC9zcGFuPmQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5FPC9zcGFuPmQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzEzX18yIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7PC9zcGFuPiZuYnNwOyZuYnNwO2NoYW48c3BhbiBjbGFzcz0iZGlmZl9jaGciPmc8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xM183Ij43PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs1PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5hPC9zcGFuPiZuYnNwOyZuYnNwO2NoYW48c3BhbiBjbGFzcz0iZGlmZl9jaGciPkc8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj48L3NwYW4+ZWQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj48L3NwYW4+ZWQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xM184Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs2PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDs8L3NwYW4+Jm5ic3A7Jm5ic3A7Y2hhbmc8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEzXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzY8c3BhbiBjbGFzcz0iZGlmZl9jaGciPmE8L3NwYW4+Jm5ic3A7Jm5ic3A7Y2hhbmc8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzEzX18zIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5lPC9zcGFuPmQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5FPC9zcGFuPmQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xM185Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs3PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xM185Ij45PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs3PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xM19fMyI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+bGluZSZuYnNwOzgmbmJzcDsmbmJzcDtzdWJ0cmE8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTNfXzMiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xM18xMCI+MTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj5saW5lJm5ic3A7ODwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPmN0ZWQ8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs5PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xM18xMSI+MTE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzk8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEzX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPjEyMzQ1Njc4OTAxMjM0PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEzX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xM18xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4xMjM0NTY3ODkwPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+NTY3ODkwMTIzNDU2ODk8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4wMTIzNDU8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+c2hvcnQmbmJzcDtsaW5lPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+YW5vdGhlciZuYnNwO2xvbmcmbmJzcDtsPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+aW5lJm5ic3A7dGhhdCZuYnNwO25lZWRzPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7dG8mbmJzcDtiZSZuYnNwO3dyYXBwZWQ8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXQ8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnM8L3NwYW4+Jm5ic3A7aW4hITwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXQ8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlM8L3NwYW4+Jm5ic3A7aW4hITwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5qdXN0Jm5ic3A7Zml0cyZuYnNwO2luJm5ic3A7dDwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXRzJm5ic3A7aW4mbmJzcDt0PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+d28mbmJzcDtsaW5lPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5zPC9zcGFuPiZuYnNwO3l1cCEhPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPndvJm5ic3A7bGluZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Uzwvc3Bhbj4mbmJzcDt5dXAhITwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj50aGUmbmJzcDtlbmQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEzXzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj50aGUmbmJzcDtlbmQ8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RpcmNhY2hlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGlyY2FjaGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZDMxYwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RpcmNhY2hlLnB5CkBAIC0wLDAgKzEsNzcgQEAKKyIiIgorICBUZXN0IGNhc2VzIGZvciB0aGUgZGlyY2FjaGUgbW9kdWxlCisgIE5pY2sgTWF0aGV3c29uCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK2RpcmNhY2hlID0gaW1wb3J0X21vZHVsZSgnZGlyY2FjaGUnLCBkZXByZWNhdGVkPVRydWUpCitpbXBvcnQgb3MsIHRpbWUsIHN5cywgdGVtcGZpbGUKKworCitjbGFzcyBEaXJjYWNoZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3IgZm5hbWUgaW4gb3MubGlzdGRpcihzZWxmLnRlbXBkaXIpOgorICAgICAgICAgICAgc2VsZi5kZWxUZW1wKGZuYW1lKQorICAgICAgICBvcy5ybWRpcihzZWxmLnRlbXBkaXIpCisKKyAgICBkZWYgd3JpdGVUZW1wKHNlbGYsIGZuYW1lKToKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgZm5hbWUpLCAndycpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIG1rZGlyVGVtcChzZWxmLCBmbmFtZSk6CisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsIGZuYW1lKSkKKworICAgIGRlZiBkZWxUZW1wKHNlbGYsIGZuYW1lKToKKyAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCBmbmFtZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmbmFtZSk6CisgICAgICAgICAgICBvcy5ybWRpcihmbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLnVubGluayhmbmFtZSkKKworICAgIGRlZiB0ZXN0X2xpc3RkaXIoc2VsZik6CisgICAgICAgICMjIFNVQ0NFU1NGVUwgQ0FTRVMKKyAgICAgICAgZW50cmllcyA9IGRpcmNhY2hlLmxpc3RkaXIoc2VsZi50ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXMsIFtdKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBjYWNoZSBpcyBhY3R1YWxseSBjYWNoaW5nLCBub3QganVzdCBwYXNzaW5nIHRocm91Z2guCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikgaXMgZW50cmllcykKKworICAgICAgICAjIERpcmVjdG9yaWVzIGFyZW4ndCAiZmlsZXMiIG9uIFdpbmRvd3MsIGFuZCBkaXJlY3RvcnkgbXRpbWUgaGFzCisgICAgICAgICMgbm90aGluZyB0byBkbyB3aXRoIHdoZW4gZmlsZXMgdW5kZXIgYSBkaXJlY3RvcnkgZ2V0IGNyZWF0ZWQuCisgICAgICAgICMgVGhhdCBpcywgdGhpcyB0ZXN0IGNhbid0IHBvc3NpYmx5IHdvcmsgdW5kZXIgV2luZG93cyAtLSBkaXJjYWNoZQorICAgICAgICAjIGlzIG9ubHkgZ29vZCBmb3IgY2FwdHVyaW5nIGEgb25lLXNob3Qgc25hcHNob3QgdGhlcmUuCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSBub3QgaW4gKCd3aW4nLCAnb3MyJyk6CisgICAgICAgICAgICAjIFNhZGx5LCBkaXJjYWNoZSBoYXMgdGhlIHNhbWUgZ3JhbnVsYXJpdHkgYXMgc3RhdC5tdGltZSwgYW5kIHNvCisgICAgICAgICAgICAjIGNhbid0IG5vdGljZSBhbnkgY2hhbmdlcyB0aGF0IG9jY3VycmVkIHdpdGhpbiAxIHNlYyBvZiB0aGUgbGFzdAorICAgICAgICAgICAgIyB0aW1lIGl0IGV4YW1pbmVkIGEgZGlyZWN0b3J5LgorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAgICAgc2VsZi53cml0ZVRlbXAoInRlc3QxIikKKyAgICAgICAgICAgIGVudHJpZXMgPSBkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cmllcywgWyd0ZXN0MSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmNhY2hlLmxpc3RkaXIoc2VsZi50ZW1wZGlyKSBpcyBlbnRyaWVzKQorCisgICAgICAgICMjIFVOU1VDQ0VTU0ZVTCBDQVNFUworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBkaXJjYWNoZS5saXN0ZGlyLCBzZWxmLnRlbXBkaXIrIl9ub25leGlzdGVudCIpCisKKyAgICBkZWYgdGVzdF9hbm5vdGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZVRlbXAoInRlc3QyIikKKyAgICAgICAgc2VsZi5ta2RpclRlbXAoIkEiKQorICAgICAgICBsc3QgPSBbJ0EnLCAndGVzdDInLCAndGVzdF9ub25leGlzdGVudCddCisgICAgICAgIGRpcmNhY2hlLmFubm90YXRlKHNlbGYudGVtcGRpciwgbHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgWydBLycsICd0ZXN0MicsICd0ZXN0X25vbmV4aXN0ZW50J10pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRyeToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KERpcmNhY2hlVGVzdHMpCisgICAgZmluYWxseToKKyAgICAgICAgZGlyY2FjaGUucmVzZXQoKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Rpcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Rpcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2U0Yjc5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGlzLnB5CkBAIC0wLDAgKzEsMTUxIEBACisjIE1pbmltYWwgdGVzdHMgZm9yIGRpcyBtb2R1bGUKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBkaXMKK2ltcG9ydCBTdHJpbmdJTworCisKK2RlZiBfZihhKToKKyAgICBwcmludCBhCisgICAgcmV0dXJuIDEKKworZGlzX2YgPSAiIiJcCisgJS00ZCAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDAgKGEpCisgICAgICAgICAgICAgIDMgUFJJTlRfSVRFTQorICAgICAgICAgICAgICA0IFBSSU5UX05FV0xJTkUKKworICUtNGQgICAgICAgICA1IExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgICAgICA4IFJFVFVSTl9WQUxVRQorIiIiJShfZi5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAxLAorICAgICBfZi5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAyKQorCisKK2RlZiBidWc3MDg5MDEoKToKKyAgICBmb3IgcmVzIGluIHJhbmdlKDEsCisgICAgICAgICAgICAgICAgICAgICAxMCk6CisgICAgICAgIHBhc3MKKworZGlzX2J1ZzcwODkwMSA9ICIiIlwKKyAlLTRkICAgICAgICAgMCBTRVRVUF9MT09QICAgICAgICAgICAgICAyMyAodG8gMjYpCisgICAgICAgICAgICAgIDMgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKHJhbmdlKQorICAgICAgICAgICAgICA2IExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQorCisgJS00ZCAgICAgICAgIDkgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDEwKQorICAgICAgICAgICAgIDEyIENBTExfRlVOQ1RJT04gICAgICAgICAgICAyCisgICAgICAgICAgICAgMTUgR0VUX0lURVIKKyAgICAgICAgPj4gICAxNiBGT1JfSVRFUiAgICAgICAgICAgICAgICAgNiAodG8gMjUpCisgICAgICAgICAgICAgMTkgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDAgKHJlcykKKworICUtNGQgICAgICAgIDIyIEpVTVBfQUJTT0xVVEUgICAgICAgICAgIDE2CisgICAgICAgID4+ICAgMjUgUE9QX0JMT0NLCisgICAgICAgID4+ICAgMjYgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgICAgICAgMjkgUkVUVVJOX1ZBTFVFCisiIiIlKGJ1ZzcwODkwMS5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAxLAorICAgICBidWc3MDg5MDEuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vICsgMiwKKyAgICAgYnVnNzA4OTAxLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubyArIDMpCisKKworZGVmIGJ1ZzEzMzM5ODIoeD1bXSk6CisgICAgYXNzZXJ0IDAsIChbcyBmb3IgcyBpbiB4XSArCisgICAgICAgICAgICAgIDEpCisgICAgcGFzcworCitkaXNfYnVnMTMzMzk4MiA9ICIiIlwKKyAlLTRkICAgICAgICAgMCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMCkKKyAgICAgICAgICAgICAgMyBQT1BfSlVNUF9JRl9UUlVFICAgICAgICA0MQorICAgICAgICAgICAgICA2IExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChBc3NlcnRpb25FcnJvcikKKyAgICAgICAgICAgICAgOSBCVUlMRF9MSVNUICAgICAgICAgICAgICAgMAorICAgICAgICAgICAgIDEyIExPQURfRkFTVCAgICAgICAgICAgICAgICAwICh4KQorICAgICAgICAgICAgIDE1IEdFVF9JVEVSCisgICAgICAgID4+ICAgMTYgRk9SX0lURVIgICAgICAgICAgICAgICAgMTIgKHRvIDMxKQorICAgICAgICAgICAgIDE5IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAxIChzKQorICAgICAgICAgICAgIDIyIExPQURfRkFTVCAgICAgICAgICAgICAgICAxIChzKQorICAgICAgICAgICAgIDI1IExJU1RfQVBQRU5EICAgICAgICAgICAgICAyCisgICAgICAgICAgICAgMjggSlVNUF9BQlNPTFVURSAgICAgICAgICAgMTYKKworICUtNGQgICA+PiAgIDMxIExPQURfQ09OU1QgICAgICAgICAgICAgICAyICgxKQorICAgICAgICAgICAgIDM0IEJJTkFSWV9BREQKKyAgICAgICAgICAgICAzNSBDQUxMX0ZVTkNUSU9OICAgICAgICAgICAgMQorICAgICAgICAgICAgIDM4IFJBSVNFX1ZBUkFSR1MgICAgICAgICAgICAxCisKKyAlLTRkICAgPj4gICA0MSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKKyAgICAgICAgICAgICA0NCBSRVRVUk5fVkFMVUUKKyIiIiUoYnVnMTMzMzk4Mi5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAxLAorICAgICBidWcxMzMzOTgyLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubyArIDIsCisgICAgIGJ1ZzEzMzM5ODIuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vICsgMykKKworX0JJR19MSU5FTk9fRk9STUFUID0gIiIiXAorJTNkICAgICAgICAgICAwIExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChzcGFtKQorICAgICAgICAgICAgICAzIFBPUF9UT1AKKyAgICAgICAgICAgICAgNCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKKyAgICAgICAgICAgICAgNyBSRVRVUk5fVkFMVUUKKyIiIgorCitjbGFzcyBEaXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGRvX2Rpc2Fzc2VtYmx5X3Rlc3Qoc2VsZiwgZnVuYywgZXhwZWN0ZWQpOgorICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc3lzLnN0ZG91dCA9IHMKKyAgICAgICAgZGlzLmRpcyhmdW5jKQorICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKKyAgICAgICAgZ290ID0gcy5nZXR2YWx1ZSgpCisgICAgICAgICMgVHJpbSB0cmFpbGluZyBibGFua3MgKGlmIGFueSkuCisgICAgICAgIGxpbmVzID0gZ290LnNwbGl0KCdcbicpCisgICAgICAgIGxpbmVzID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gbGluZXNdCisgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQuc3BsaXQoIlxuIikKKyAgICAgICAgaW1wb3J0IGRpZmZsaWIKKyAgICAgICAgaWYgZXhwZWN0ZWQgIT0gbGluZXM6CisgICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgImV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGF0aW9uOlxuIiArCisgICAgICAgICAgICAgICAgIlxuIi5qb2luKGRpZmZsaWIubmRpZmYoZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMpKSkKKworICAgIGRlZiB0ZXN0X29wbWFwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG1hcFsiU1RPUF9DT0RFIl0sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlzLm9wbWFwWyJMT0FEX0NPTlNUIl0sIGRpcy5oYXNjb25zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihkaXMub3BtYXBbIlNUT1JFX05BTUUiXSwgZGlzLmhhc25hbWUpCisKKyAgICBkZWYgdGVzdF9vcG5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbmFtZVtkaXMub3BtYXBbIkxPQURfRkFTVCJdXSwgIkxPQURfRkFTVCIpCisKKyAgICBkZWYgdGVzdF9ib3VuZGFyaWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG1hcFsiRVhURU5ERURfQVJHIl0sIGRpcy5FWFRFTkRFRF9BUkcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbWFwWyJTVE9SRV9OQU1FIl0sIGRpcy5IQVZFX0FSR1VNRU5UKQorCisgICAgZGVmIHRlc3RfZGlzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX2Rpc2Fzc2VtYmx5X3Rlc3QoX2YsIGRpc19mKQorCisgICAgZGVmIHRlc3RfYnVnXzcwODkwMShzZWxmKToKKyAgICAgICAgc2VsZi5kb19kaXNhc3NlbWJseV90ZXN0KGJ1ZzcwODkwMSwgZGlzX2J1ZzcwODkwMSkKKworICAgIGRlZiB0ZXN0X2J1Z18xMzMzOTgyKHNlbGYpOgorICAgICAgICAjIFRoaXMgb25lIGlzIGNoZWNraW5nIGJ5dGVjb2RlcyBnZW5lcmF0ZWQgZm9yIGFuIGBhc3NlcnRgIHN0YXRlbWVudCwKKyAgICAgICAgIyBzbyBmYWlscyBpZiB0aGUgdGVzdHMgYXJlIHJ1biB3aXRoIC1PLiAgU2tpcCB0aGlzIHRlc3QgdGhlbi4KKyAgICAgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICAgICAgc2VsZi5kb19kaXNhc3NlbWJseV90ZXN0KGJ1ZzEzMzM5ODIsIGRpc19idWcxMzMzOTgyKQorCisgICAgZGVmIHRlc3RfYmlnX2xpbmVub3Moc2VsZik6CisgICAgICAgIGRlZiBmdW5jKGNvdW50KToKKyAgICAgICAgICAgIG5hbWVzcGFjZSA9IHt9CisgICAgICAgICAgICBmdW5jID0gImRlZiBmb28oKTpcbiAiICsgIiIuam9pbihbIlxuICJdICogY291bnQgKyBbInNwYW1cbiJdKQorICAgICAgICAgICAgZXhlYyBmdW5jIGluIG5hbWVzcGFjZQorICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVsnZm9vJ10KKworICAgICAgICAjIFRlc3QgYWxsIHNtYWxsIHJhbmdlcworICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMSwgMzAwKToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gX0JJR19MSU5FTk9fRk9STUFUICUgKGkgKyAyKQorICAgICAgICAgICAgc2VsZi5kb19kaXNhc3NlbWJseV90ZXN0KGZ1bmMoaSksIGV4cGVjdGVkKQorCisgICAgICAgICMgVGVzdCBzb21lIGxhcmdlciByYW5nZXMgdG9vCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgzMDAsIDUwMDAsIDEwKToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gX0JJR19MSU5FTk9fRk9STUFUICUgKGkgKyAyKQorICAgICAgICAgICAgc2VsZi5kb19kaXNhc3NlbWJseV90ZXN0KGZ1bmMoaSksIGV4cGVjdGVkKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KERpc1Rlc3RzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Rpc3R1dGlscy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Rpc3R1dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWNiYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZGlzdHV0aWxzLnB5CkBAIC0wLDAgKzEsMTggQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuCisKK1RoZSB0ZXN0cyBmb3IgZGlzdHV0aWxzIGFyZSBkZWZpbmVkIGluIHRoZSBkaXN0dXRpbHMudGVzdHMgcGFja2FnZTsKK3RoZSB0ZXN0X3N1aXRlKCkgZnVuY3Rpb24gdGhlcmUgcmV0dXJucyBhIHRlc3Qgc3VpdGUgdGhhdCdzIHJlYWR5IHRvCitiZSBydW4uCisiIiIKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBkaXN0dXRpbHMudGVzdHMKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChkaXN0dXRpbHMudGVzdHMudGVzdF9zdWl0ZSgpKQorICAgIHRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kbC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNjlhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kbC5weQpAQCAtMCwwICsxLDM5IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJUZXN0IGRsbW9kdWxlLmMKKyAgIFJvZ2VyIEUuIE1hc3NlICByZXZpc2VkIHN0cmF0ZWd5IGJ5IEJhcnJ5IFdhcnNhdworIiIiCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKK2RsID0gaW1wb3J0X21vZHVsZSgnZGwnLCBkZXByZWNhdGVkPVRydWUpCisKK3NoYXJlZGxpYnMgPSBbCisgICAgKCcvdXNyL2xpYi9saWJjLnNvJywgJ2dldHBpZCcpLAorICAgICgnL2xpYi9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisgICAgKCcvdXNyL2Jpbi9jeWd3aW4xLmRsbCcsICdnZXRwaWQnKSwKKyAgICAoJy91c3IvbGliL2xpYmMuZHlsaWInLCAnZ2V0cGlkJyksCisgICAgXQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgZm9yIHMsIGZ1bmMgaW4gc2hhcmVkbGliczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAndHJ5aW5nIHRvIG9wZW46JywgcywKKyAgICAgICAgICAgIGwgPSBkbC5vcGVuKHMpCisgICAgICAgIGV4Y2VwdCBkbC5lcnJvciwgZXJyOgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAnZmFpbGVkJywgcmVwcihzdHIoZXJyKSkKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ3N1Y2NlZWRlZC4uLicsCisgICAgICAgICAgICBsLmNhbGwoZnVuYykKKyAgICAgICAgICAgIGwuY2xvc2UoKQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAnd29ya2VkIScKKyAgICAgICAgICAgIGJyZWFrCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICdDb3VsZCBub3Qgb3BlbiBhbnkgc2hhcmVkIGxpYnJhcmllcycKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTA1N2M4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQpAQCAtMCwwICsxLDI3MDEgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisiIiIKK1Rlc3Qgc2NyaXB0IGZvciBkb2N0ZXN0LgorIiIiCisKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgZG9jdGVzdAorCisjIE5PVEU6IFRoZXJlIGFyZSBzb21lIGFkZGl0aW9uYWwgdGVzdHMgcmVsYXRpbmcgdG8gaW50ZXJhY3Rpb24gd2l0aAorIyAgICAgICB6aXBpbXBvcnQgaW4gdGhlIHRlc3RfemlwaW1wb3J0X3N1cHBvcnQgdGVzdCBtb2R1bGUuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIFNhbXBsZSBPYmplY3RzICh1c2VkIGJ5IHRlc3QgY2FzZXMpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBzYW1wbGVfZnVuYyh2KToKKyAgICAiIiIKKyAgICBCbGFoIGJsYWgKKworICAgID4+PiBwcmludCBzYW1wbGVfZnVuYygyMikKKyAgICA0NAorCisgICAgWWVlIGhhIQorICAgICIiIgorICAgIHJldHVybiB2K3YKKworY2xhc3MgU2FtcGxlQ2xhc3M6CisgICAgIiIiCisgICAgPj4+IHByaW50IDEKKyAgICAxCisKKyAgICA+Pj4gIyBjb21tZW50cyBnZXQgaWdub3JlZC4gIHNvIGFyZSBlbXB0eSBQUzEgYW5kIFBTMiBwcm9tcHRzOgorICAgID4+PgorICAgIC4uLgorCisgICAgTXVsdGlsaW5lIGV4YW1wbGU6CisgICAgPj4+IHNjID0gU2FtcGxlQ2xhc3MoMykKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgIC4uLiAgICAgc2MgPSBzYy5kb3VibGUoKQorICAgIC4uLiAgICAgcHJpbnQgc2MuZ2V0KCksCisgICAgNiAxMiAyNCA0OCA5NiAxOTIgMzg0IDc2OCAxNTM2IDMwNzIKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsKToKKyAgICAgICAgIiIiCisgICAgICAgID4+PiBwcmludCBTYW1wbGVDbGFzcygxMikuZ2V0KCkKKyAgICAgICAgMTIKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgZG91YmxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgPj4+IHByaW50IFNhbXBsZUNsYXNzKDEyKS5kb3VibGUoKS5nZXQoKQorICAgICAgICAyNAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIFNhbXBsZUNsYXNzKHNlbGYudmFsICsgc2VsZi52YWwpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgPj4+IHByaW50IFNhbXBsZUNsYXNzKC01KS5nZXQoKQorICAgICAgICAtNQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsCisKKyAgICBkZWYgYV9zdGF0aWNtZXRob2Qodik6CisgICAgICAgICIiIgorICAgICAgICA+Pj4gcHJpbnQgU2FtcGxlQ2xhc3MuYV9zdGF0aWNtZXRob2QoMTApCisgICAgICAgIDExCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdisxCisgICAgYV9zdGF0aWNtZXRob2QgPSBzdGF0aWNtZXRob2QoYV9zdGF0aWNtZXRob2QpCisKKyAgICBkZWYgYV9jbGFzc21ldGhvZChjbHMsIHYpOgorICAgICAgICAiIiIKKyAgICAgICAgPj4+IHByaW50IFNhbXBsZUNsYXNzLmFfY2xhc3NtZXRob2QoMTApCisgICAgICAgIDEyCisgICAgICAgID4+PiBwcmludCBTYW1wbGVDbGFzcygwKS5hX2NsYXNzbWV0aG9kKDEwKQorICAgICAgICAxMgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHYrMgorICAgIGFfY2xhc3NtZXRob2QgPSBjbGFzc21ldGhvZChhX2NsYXNzbWV0aG9kKQorCisgICAgYV9wcm9wZXJ0eSA9IHByb3BlcnR5KGdldCwgZG9jPSIiIgorICAgICAgICA+Pj4gcHJpbnQgU2FtcGxlQ2xhc3MoMjIpLmFfcHJvcGVydHkKKyAgICAgICAgMjIKKyAgICAgICAgIiIiKQorCisgICAgY2xhc3MgTmVzdGVkQ2xhc3M6CisgICAgICAgICIiIgorICAgICAgICA+Pj4geCA9IFNhbXBsZUNsYXNzLk5lc3RlZENsYXNzKDUpCisgICAgICAgID4+PiB5ID0geC5zcXVhcmUoKQorICAgICAgICA+Pj4gcHJpbnQgeS5nZXQoKQorICAgICAgICAyNQorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbD0wKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgPj4+IHByaW50IFNhbXBsZUNsYXNzLk5lc3RlZENsYXNzKCkuZ2V0KCkKKyAgICAgICAgICAgIDAKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgc2VsZi52YWwgPSB2YWwKKyAgICAgICAgZGVmIHNxdWFyZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcyhzZWxmLnZhbCpzZWxmLnZhbCkKKyAgICAgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbAorCitjbGFzcyBTYW1wbGVOZXdTdHlsZUNsYXNzKG9iamVjdCk6CisgICAgciIiIgorICAgID4+PiBwcmludCAnMVxuMlxuMycKKyAgICAxCisgICAgMgorICAgIDMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsKToKKyAgICAgICAgIiIiCisgICAgICAgID4+PiBwcmludCBTYW1wbGVOZXdTdHlsZUNsYXNzKDEyKS5nZXQoKQorICAgICAgICAxMgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiBkb3VibGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICA+Pj4gcHJpbnQgU2FtcGxlTmV3U3R5bGVDbGFzcygxMikuZG91YmxlKCkuZ2V0KCkKKyAgICAgICAgMjQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBTYW1wbGVOZXdTdHlsZUNsYXNzKHNlbGYudmFsICsgc2VsZi52YWwpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgPj4+IHByaW50IFNhbXBsZU5ld1N0eWxlQ2xhc3MoLTUpLmdldCgpCisgICAgICAgIC01CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi52YWwKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgRmFrZSBzdGRpbiAoZm9yIHRlc3RpbmcgaW50ZXJhY3RpdmUgZGVidWdnaW5nKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBfRmFrZUlucHV0OgorICAgICIiIgorICAgIEEgZmFrZSBpbnB1dCBzdHJlYW0gZm9yIHBkYidzIGludGVyYWN0aXZlIGRlYnVnZ2VyLiAgV2hlbmV2ZXIgYQorICAgIGxpbmUgaXMgcmVhZCwgcHJpbnQgaXQgKHRvIHNpbXVsYXRlIHRoZSB1c2VyIHR5cGluZyBpdCksIGFuZCB0aGVuCisgICAgcmV0dXJuIGl0LiAgVGhlIHNldCBvZiBsaW5lcyB0byByZXR1cm4gaXMgc3BlY2lmaWVkIGluIHRoZQorICAgIGNvbnN0cnVjdG9yOyB0aGV5IHNob3VsZCBub3QgaGF2ZSB0cmFpbGluZyBuZXdsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZXMpOgorICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMKKworICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgbGluZSA9IHNlbGYubGluZXMucG9wKDApCisgICAgICAgIHByaW50IGxpbmUKKyAgICAgICAgcmV0dXJuIGxpbmUrJ1xuJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBUZXN0IENhc2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiB0ZXN0X0V4YW1wbGUoKTogciIiIgorVW5pdCB0ZXN0cyBmb3IgdGhlIGBFeGFtcGxlYCBjbGFzcy4KKworRXhhbXBsZSBpcyBhIHNpbXBsZSBjb250YWluZXIgY2xhc3MgdGhhdCBob2xkczoKKyAgLSBgc291cmNlYDogQSBzb3VyY2Ugc3RyaW5nLgorICAtIGB3YW50YDogQW4gZXhwZWN0ZWQgb3V0cHV0IHN0cmluZy4KKyAgLSBgZXhjX21zZ2A6IEFuIGV4cGVjdGVkIGV4Y2VwdGlvbiBtZXNzYWdlIHN0cmluZyAob3IgTm9uZSBpZiBubworICAgIGV4Y2VwdGlvbiBpcyBleHBlY3RlZCkuCisgIC0gYGxpbmVub2A6IEEgbGluZSBudW1iZXIgKHdpdGhpbiB0aGUgZG9jc3RyaW5nKS4KKyAgLSBgaW5kZW50YDogVGhlIGV4YW1wbGUncyBpbmRlbnRhdGlvbiBpbiB0aGUgaW5wdXQgc3RyaW5nLgorICAtIGBvcHRpb25zYDogQW4gb3B0aW9uIGRpY3Rpb25hcnksIG1hcHBpbmcgb3B0aW9uIGZsYWdzIHRvIFRydWUgb3IKKyAgICBGYWxzZS4KKworVGhlc2UgYXR0cmlidXRlcyBhcmUgc2V0IGJ5IHRoZSBjb25zdHJ1Y3Rvci4gIGBzb3VyY2VgIGFuZCBgd2FudGAgYXJlCityZXF1aXJlZDsgdGhlIG90aGVyIGF0dHJpYnV0ZXMgYWxsIGhhdmUgZGVmYXVsdCB2YWx1ZXM6CisKKyAgICA+Pj4gZXhhbXBsZSA9IGRvY3Rlc3QuRXhhbXBsZSgncHJpbnQgMScsICcxXG4nKQorICAgID4+PiAoZXhhbXBsZS5zb3VyY2UsIGV4YW1wbGUud2FudCwgZXhhbXBsZS5leGNfbXNnLAorICAgIC4uLiAgZXhhbXBsZS5saW5lbm8sIGV4YW1wbGUuaW5kZW50LCBleGFtcGxlLm9wdGlvbnMpCisgICAgKCdwcmludCAxXG4nLCAnMVxuJywgTm9uZSwgMCwgMCwge30pCisKK1RoZSBmaXJzdCB0aHJlZSBhdHRyaWJ1dGVzIChgc291cmNlYCwgYHdhbnRgLCBhbmQgYGV4Y19tc2dgKSBtYXkgYmUKK3NwZWNpZmllZCBwb3NpdGlvbmFsbHk7IHRoZSByZW1haW5pbmcgYXJndW1lbnRzIHNob3VsZCBiZSBzcGVjaWZpZWQgYXMKK2tleXdvcmQgYXJndW1lbnRzOgorCisgICAgPj4+IGV4Y19tc2cgPSAnSW5kZXhFcnJvcjogcG9wIGZyb20gYW4gZW1wdHkgbGlzdCcKKyAgICA+Pj4gZXhhbXBsZSA9IGRvY3Rlc3QuRXhhbXBsZSgnW10ucG9wKCknLCAnJywgZXhjX21zZywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm89NSwgaW5kZW50PTQsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZG9jdGVzdC5FTExJUFNJUzogVHJ1ZX0pCisgICAgPj4+IChleGFtcGxlLnNvdXJjZSwgZXhhbXBsZS53YW50LCBleGFtcGxlLmV4Y19tc2csCisgICAgLi4uICBleGFtcGxlLmxpbmVubywgZXhhbXBsZS5pbmRlbnQsIGV4YW1wbGUub3B0aW9ucykKKyAgICAoJ1tdLnBvcCgpXG4nLCAnJywgJ0luZGV4RXJyb3I6IHBvcCBmcm9tIGFuIGVtcHR5IGxpc3RcbicsIDUsIDQsIHs4OiBUcnVlfSkKKworVGhlIGNvbnN0cnVjdG9yIG5vcm1hbGl6ZXMgdGhlIGBzb3VyY2VgIHN0cmluZyB0byBlbmQgaW4gYSBuZXdsaW5lOgorCisgICAgU291cmNlIHNwYW5zIGEgc2luZ2xlIGxpbmU6IG5vIHRlcm1pbmF0aW5nIG5ld2xpbmUuCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50IDEnLCAnMVxuJykKKyAgICA+Pj4gZS5zb3VyY2UsIGUud2FudAorICAgICgncHJpbnQgMVxuJywgJzFcbicpCisKKyAgICA+Pj4gZSA9IGRvY3Rlc3QuRXhhbXBsZSgncHJpbnQgMVxuJywgJzFcbicpCisgICAgPj4+IGUuc291cmNlLCBlLndhbnQKKyAgICAoJ3ByaW50IDFcbicsICcxXG4nKQorCisgICAgU291cmNlIHNwYW5zIG11bHRpcGxlIGxpbmVzOiByZXF1aXJlIHRlcm1pbmF0aW5nIG5ld2xpbmUuCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50IDE7XG5wcmludCAyXG4nLCAnMVxuMlxuJykKKyAgICA+Pj4gZS5zb3VyY2UsIGUud2FudAorICAgICgncHJpbnQgMTtcbnByaW50IDJcbicsICcxXG4yXG4nKQorCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50IDE7XG5wcmludCAyJywgJzFcbjJcbicpCisgICAgPj4+IGUuc291cmNlLCBlLndhbnQKKyAgICAoJ3ByaW50IDE7XG5wcmludCAyXG4nLCAnMVxuMlxuJykKKworICAgIEVtcHR5IHNvdXJjZSBzdHJpbmcgKHdoaWNoIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gcmVhbCBleGFtcGxlcykKKyAgICA+Pj4gZSA9IGRvY3Rlc3QuRXhhbXBsZSgnJywgJycpCisgICAgPj4+IGUuc291cmNlLCBlLndhbnQKKyAgICAoJ1xuJywgJycpCisKK1RoZSBjb25zdHJ1Y3RvciBub3JtYWxpemVzIHRoZSBgd2FudGAgc3RyaW5nIHRvIGVuZCBpbiBhIG5ld2xpbmUsCit1bmxlc3MgaXQncyB0aGUgZW1wdHkgc3RyaW5nOgorCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50IDEnLCAnMVxuJykKKyAgICA+Pj4gZS5zb3VyY2UsIGUud2FudAorICAgICgncHJpbnQgMVxuJywgJzFcbicpCisKKyAgICA+Pj4gZSA9IGRvY3Rlc3QuRXhhbXBsZSgncHJpbnQgMScsICcxJykKKyAgICA+Pj4gZS5zb3VyY2UsIGUud2FudAorICAgICgncHJpbnQgMVxuJywgJzFcbicpCisKKyAgICA+Pj4gZSA9IGRvY3Rlc3QuRXhhbXBsZSgncHJpbnQnLCAnJykKKyAgICA+Pj4gZS5zb3VyY2UsIGUud2FudAorICAgICgncHJpbnRcbicsICcnKQorCitUaGUgY29uc3RydWN0b3Igbm9ybWFsaXplcyB0aGUgYGV4Y19tc2dgIHN0cmluZyB0byBlbmQgaW4gYSBuZXdsaW5lLAordW5sZXNzIGl0J3MgYE5vbmVgOgorCisgICAgTWVzc2FnZSBzcGFucyBvbmUgbGluZQorICAgID4+PiBleGNfbXNnID0gJ0luZGV4RXJyb3I6IHBvcCBmcm9tIGFuIGVtcHR5IGxpc3QnCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ1tdLnBvcCgpJywgJycsIGV4Y19tc2cpCisgICAgPj4+IGUuZXhjX21zZworICAgICdJbmRleEVycm9yOiBwb3AgZnJvbSBhbiBlbXB0eSBsaXN0XG4nCisKKyAgICA+Pj4gZXhjX21zZyA9ICdJbmRleEVycm9yOiBwb3AgZnJvbSBhbiBlbXB0eSBsaXN0XG4nCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ1tdLnBvcCgpJywgJycsIGV4Y19tc2cpCisgICAgPj4+IGUuZXhjX21zZworICAgICdJbmRleEVycm9yOiBwb3AgZnJvbSBhbiBlbXB0eSBsaXN0XG4nCisKKyAgICBNZXNzYWdlIHNwYW5zIG11bHRpcGxlIGxpbmVzCisgICAgPj4+IGV4Y19tc2cgPSAnVmFsdWVFcnJvcjogMVxuICAyJworICAgID4+PiBlID0gZG9jdGVzdC5FeGFtcGxlKCdyYWlzZSBWYWx1ZUVycm9yKCIxXG4gIDIiKScsICcnLCBleGNfbXNnKQorICAgID4+PiBlLmV4Y19tc2cKKyAgICAnVmFsdWVFcnJvcjogMVxuICAyXG4nCisKKyAgICA+Pj4gZXhjX21zZyA9ICdWYWx1ZUVycm9yOiAxXG4gIDJcbicKKyAgICA+Pj4gZSA9IGRvY3Rlc3QuRXhhbXBsZSgncmFpc2UgVmFsdWVFcnJvcigiMVxuICAyIiknLCAnJywgZXhjX21zZykKKyAgICA+Pj4gZS5leGNfbXNnCisgICAgJ1ZhbHVlRXJyb3I6IDFcbiAgMlxuJworCisgICAgRW1wdHkgKGJ1dCBub24tTm9uZSkgZXhjZXB0aW9uIG1lc3NhZ2UgKHdoaWNoIHNob3VsZCBuZXZlciBhcHBlYXIKKyAgICBpbiByZWFsIGV4YW1wbGVzKQorICAgID4+PiBleGNfbXNnID0gJycKKyAgICA+Pj4gZSA9IGRvY3Rlc3QuRXhhbXBsZSgncmFpc2UgWCgpJywgJycsIGV4Y19tc2cpCisgICAgPj4+IGUuZXhjX21zZworICAgICdcbicKKworQ29tcGFyZSBgRXhhbXBsZWA6CisgICAgPj4+IGV4YW1wbGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50IDEnLCAnMVxuJykKKyAgICA+Pj4gc2FtZV9leGFtcGxlID0gZG9jdGVzdC5FeGFtcGxlKCdwcmludCAxJywgJzFcbicpCisgICAgPj4+IG90aGVyX2V4YW1wbGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50IDQyJywgJzQyXG4nKQorICAgID4+PiBleGFtcGxlID09IHNhbWVfZXhhbXBsZQorICAgIFRydWUKKyAgICA+Pj4gZXhhbXBsZSAhPSBzYW1lX2V4YW1wbGUKKyAgICBGYWxzZQorICAgID4+PiBoYXNoKGV4YW1wbGUpID09IGhhc2goc2FtZV9leGFtcGxlKQorICAgIFRydWUKKyAgICA+Pj4gZXhhbXBsZSA9PSBvdGhlcl9leGFtcGxlCisgICAgRmFsc2UKKyAgICA+Pj4gZXhhbXBsZSAhPSBvdGhlcl9leGFtcGxlCisgICAgVHJ1ZQorIiIiCisKK2RlZiB0ZXN0X0RvY1Rlc3QoKTogciIiIgorVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0YCBjbGFzcy4KKworRG9jVGVzdCBpcyBhIGNvbGxlY3Rpb24gb2YgZXhhbXBsZXMsIGV4dHJhY3RlZCBmcm9tIGEgZG9jc3RyaW5nLCBhbG9uZword2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUgZG9jc3RyaW5nIGNvbWVzIGZyb20gKGEgbmFtZSwKK2ZpbGVuYW1lLCBhbmQgbGluZSBudW1iZXIpLiAgVGhlIGRvY3N0cmluZyBpcyBwYXJzZWQgYnkgdGhlIGBEb2NUZXN0YAorY29uc3RydWN0b3I6CisKKyAgICA+Pj4gZG9jc3RyaW5nID0gJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgMTIKKyAgICAuLi4gICAgIDEyCisgICAgLi4uCisgICAgLi4uIE5vbi1leGFtcGxlIHRleHQuCisgICAgLi4uCisgICAgLi4uICAgICA+Pj4gcHJpbnQgJ2Fub3RoZXJcZXhhbXBsZScKKyAgICAuLi4gICAgIGFub3RoZXIKKyAgICAuLi4gICAgIGV4YW1wbGUKKyAgICAuLi4gJycnCisgICAgPj4+IGdsb2JzID0ge30gIyBnbG9iYWxzIHRvIHJ1biB0aGUgdGVzdCBpbi4KKyAgICA+Pj4gcGFyc2VyID0gZG9jdGVzdC5Eb2NUZXN0UGFyc2VyKCkKKyAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2NzdHJpbmcsIGdsb2JzLCAnc29tZV90ZXN0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZV9maWxlJywgMjApCisgICAgPj4+IHByaW50IHRlc3QKKyAgICA8RG9jVGVzdCBzb21lX3Rlc3QgZnJvbSBzb21lX2ZpbGU6MjAgKDIgZXhhbXBsZXMpPgorICAgID4+PiBsZW4odGVzdC5leGFtcGxlcykKKyAgICAyCisgICAgPj4+IGUxLCBlMiA9IHRlc3QuZXhhbXBsZXMKKyAgICA+Pj4gKGUxLnNvdXJjZSwgZTEud2FudCwgZTEubGluZW5vKQorICAgICgncHJpbnQgMTJcbicsICcxMlxuJywgMSkKKyAgICA+Pj4gKGUyLnNvdXJjZSwgZTIud2FudCwgZTIubGluZW5vKQorICAgICgicHJpbnQgJ2Fub3RoZXJcXGV4YW1wbGUnXG4iLCAnYW5vdGhlclxuZXhhbXBsZVxuJywgNikKKworU291cmNlIGluZm9ybWF0aW9uIChuYW1lLCBmaWxlbmFtZSwgYW5kIGxpbmUgbnVtYmVyKSBpcyBhdmFpbGFibGUgYXMKK2F0dHJpYnV0ZXMgb24gdGhlIGRvY3Rlc3Qgb2JqZWN0OgorCisgICAgPj4+ICh0ZXN0Lm5hbWUsIHRlc3QuZmlsZW5hbWUsIHRlc3QubGluZW5vKQorICAgICgnc29tZV90ZXN0JywgJ3NvbWVfZmlsZScsIDIwKQorCitUaGUgbGluZSBudW1iZXIgb2YgYW4gZXhhbXBsZSB3aXRoaW4gaXRzIGNvbnRhaW5pbmcgZmlsZSBpcyBmb3VuZCBieQorYWRkaW5nIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZXhhbXBsZSBhbmQgdGhlIGxpbmUgbnVtYmVyIG9mIGl0cworY29udGFpbmluZyB0ZXN0OgorCisgICAgPj4+IHRlc3QubGluZW5vICsgZTEubGluZW5vCisgICAgMjEKKyAgICA+Pj4gdGVzdC5saW5lbm8gKyBlMi5saW5lbm8KKyAgICAyNgorCitJZiB0aGUgZG9jc3RyaW5nIGNvbnRhaW5zIGluY29uc2lzdGFudCBsZWFkaW5nIHdoaXRlc3BhY2UgaW4gdGhlCitleHBlY3RlZCBvdXRwdXQgb2YgYW4gZXhhbXBsZSwgdGhlbiBgRG9jVGVzdGAgd2lsbCByYWlzZSBhIFZhbHVlRXJyb3I6CisKKyAgICA+Pj4gZG9jc3RyaW5nID0gcicnJworICAgIC4uLiAgICAgICA+Pj4gcHJpbnQgJ2JhZFxuaW5kZW50YXRpb24nCisgICAgLi4uICAgICAgIGJhZAorICAgIC4uLiAgICAgaW5kZW50YXRpb24KKyAgICAuLi4gICAgICcnJworICAgID4+PiBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jc3RyaW5nLCBnbG9icywgJ3NvbWVfdGVzdCcsICdmaWxlbmFtZScsIDApCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFZhbHVlRXJyb3I6IGxpbmUgNCBvZiB0aGUgZG9jc3RyaW5nIGZvciBzb21lX3Rlc3QgaGFzIGluY29uc2lzdGVudCBsZWFkaW5nIHdoaXRlc3BhY2U6ICdpbmRlbnRhdGlvbicKKworSWYgdGhlIGRvY3N0cmluZyBjb250YWlucyBpbmNvbnNpc3RlbnQgbGVhZGluZyB3aGl0ZXNwYWNlIG9uCitjb250aW51YXRpb24gbGluZXMsIHRoZW4gYERvY1Rlc3RgIHdpbGwgcmFpc2UgYSBWYWx1ZUVycm9yOgorCisgICAgPj4+IGRvY3N0cmluZyA9IHInJycKKyAgICAuLi4gICAgICAgPj4+IHByaW50ICgnYmFkIGluZGVudGF0aW9uJywKKyAgICAuLi4gICAgIC4uLiAgICAgICAgICAyKQorICAgIC4uLiAgICAgICAoJ2JhZCcsICdpbmRlbnRhdGlvbicpCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gcGFyc2VyLmdldF9kb2N0ZXN0KGRvY3N0cmluZywgZ2xvYnMsICdzb21lX3Rlc3QnLCAnZmlsZW5hbWUnLCAwKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiBsaW5lIDIgb2YgdGhlIGRvY3N0cmluZyBmb3Igc29tZV90ZXN0IGhhcyBpbmNvbnNpc3RlbnQgbGVhZGluZyB3aGl0ZXNwYWNlOiAnLi4uICAgICAgICAgIDIpJworCitJZiB0aGVyZSdzIG5vIGJsYW5rIHNwYWNlIGFmdGVyIGEgUFMxIHByb21wdCAoJz4+PicpLCB0aGVuIGBEb2NUZXN0YAord2lsbCByYWlzZSBhIFZhbHVlRXJyb3I6CisKKyAgICA+Pj4gZG9jc3RyaW5nID0gJz4+PnByaW50IDFcbjEnCisgICAgPj4+IHBhcnNlci5nZXRfZG9jdGVzdChkb2NzdHJpbmcsIGdsb2JzLCAnc29tZV90ZXN0JywgJ2ZpbGVuYW1lJywgMCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVmFsdWVFcnJvcjogbGluZSAxIG9mIHRoZSBkb2NzdHJpbmcgZm9yIHNvbWVfdGVzdCBsYWNrcyBibGFuayBhZnRlciA+Pj46ICc+Pj5wcmludCAxJworCitJZiB0aGVyZSdzIG5vIGJsYW5rIHNwYWNlIGFmdGVyIGEgUFMyIHByb21wdCAoJy4uLicpLCB0aGVuIGBEb2NUZXN0YAord2lsbCByYWlzZSBhIFZhbHVlRXJyb3I6CisKKyAgICA+Pj4gZG9jc3RyaW5nID0gJz4+PiBpZiAxOlxuLi4ucHJpbnQgMVxuMScKKyAgICA+Pj4gcGFyc2VyLmdldF9kb2N0ZXN0KGRvY3N0cmluZywgZ2xvYnMsICdzb21lX3Rlc3QnLCAnZmlsZW5hbWUnLCAwKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiBsaW5lIDIgb2YgdGhlIGRvY3N0cmluZyBmb3Igc29tZV90ZXN0IGxhY2tzIGJsYW5rIGFmdGVyIC4uLjogJy4uLnByaW50IDEnCisKK0NvbXBhcmUgYERvY1Rlc3RgOgorCisgICAgPj4+IGRvY3N0cmluZyA9ICcnJworICAgIC4uLiAgICAgPj4+IHByaW50IDEyCisgICAgLi4uICAgICAxMgorICAgIC4uLiAnJycKKyAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2NzdHJpbmcsIGdsb2JzLCAnc29tZV90ZXN0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZV90ZXN0JywgMjApCisgICAgPj4+IHNhbWVfdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2NzdHJpbmcsIGdsb2JzLCAnc29tZV90ZXN0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb21lX3Rlc3QnLCAyMCkKKyAgICA+Pj4gdGVzdCA9PSBzYW1lX3Rlc3QKKyAgICBUcnVlCisgICAgPj4+IHRlc3QgIT0gc2FtZV90ZXN0CisgICAgRmFsc2UKKyAgICA+Pj4gaGFzaCh0ZXN0KSA9PSBoYXNoKHNhbWVfdGVzdCkKKyAgICBUcnVlCisgICAgPj4+IGRvY3N0cmluZyA9ICcnJworICAgIC4uLiAgICAgPj4+IHByaW50IDQyCisgICAgLi4uICAgICA0MgorICAgIC4uLiAnJycKKyAgICA+Pj4gb3RoZXJfdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2NzdHJpbmcsIGdsb2JzLCAnb3RoZXJfdGVzdCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ290aGVyX2ZpbGUnLCAxMCkKKyAgICA+Pj4gdGVzdCA9PSBvdGhlcl90ZXN0CisgICAgRmFsc2UKKyAgICA+Pj4gdGVzdCAhPSBvdGhlcl90ZXN0CisgICAgVHJ1ZQorCitDb21wYXJlIGBEb2NUZXN0Q2FzZWA6CisKKyAgICA+Pj4gRG9jVGVzdENhc2UgPSBkb2N0ZXN0LkRvY1Rlc3RDYXNlCisgICAgPj4+IHRlc3RfY2FzZSA9IERvY1Rlc3RDYXNlKHRlc3QpCisgICAgPj4+IHNhbWVfdGVzdF9jYXNlID0gRG9jVGVzdENhc2Uoc2FtZV90ZXN0KQorICAgID4+PiBvdGhlcl90ZXN0X2Nhc2UgPSBEb2NUZXN0Q2FzZShvdGhlcl90ZXN0KQorICAgID4+PiB0ZXN0X2Nhc2UgPT0gc2FtZV90ZXN0X2Nhc2UKKyAgICBUcnVlCisgICAgPj4+IHRlc3RfY2FzZSAhPSBzYW1lX3Rlc3RfY2FzZQorICAgIEZhbHNlCisgICAgPj4+IGhhc2godGVzdF9jYXNlKSA9PSBoYXNoKHNhbWVfdGVzdF9jYXNlKQorICAgIFRydWUKKyAgICA+Pj4gdGVzdCA9PSBvdGhlcl90ZXN0X2Nhc2UKKyAgICBGYWxzZQorICAgID4+PiB0ZXN0ICE9IG90aGVyX3Rlc3RfY2FzZQorICAgIFRydWUKKworIiIiCisKK2RlZiB0ZXN0X0RvY1Rlc3RGaW5kZXIoKTogciIiIgorVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0RmluZGVyYCBjbGFzcy4KKworRG9jVGVzdEZpbmRlciBpcyB1c2VkIHRvIGV4dHJhY3QgRG9jVGVzdHMgZnJvbSBhbiBvYmplY3QncyBkb2NzdHJpbmcKK2FuZCB0aGUgZG9jc3RyaW5ncyBvZiBpdHMgY29udGFpbmVkIG9iamVjdHMuICBJdCBjYW4gYmUgdXNlZCB3aXRoCittb2R1bGVzLCBmdW5jdGlvbnMsIGNsYXNzZXMsIG1ldGhvZHMsIHN0YXRpY21ldGhvZHMsIGNsYXNzbWV0aG9kcywgYW5kCitwcm9wZXJ0aWVzLgorCitGaW5kaW5nIFRlc3RzIGluIEZ1bmN0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0ZvciBhIGZ1bmN0aW9uIHdob3NlIGRvY3N0cmluZyBjb250YWlucyBleGFtcGxlcywgRG9jVGVzdEZpbmRlci5maW5kKCkKK3dpbGwgcmV0dXJuIGEgc2luZ2xlIHRlc3QgKGZvciB0aGF0IGZ1bmN0aW9uJ3MgZG9jc3RyaW5nKToKKworICAgID4+PiBmaW5kZXIgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKQorCitXZSdsbCBzaW11bGF0ZSBhIF9fZmlsZV9fIGF0dHIgdGhhdCBlbmRzIGluIHB5YzoKKworICAgID4+PiBpbXBvcnQgdGVzdC50ZXN0X2RvY3Rlc3QKKyAgICA+Pj4gb2xkID0gdGVzdC50ZXN0X2RvY3Rlc3QuX19maWxlX18KKyAgICA+Pj4gdGVzdC50ZXN0X2RvY3Rlc3QuX19maWxlX18gPSAndGVzdF9kb2N0ZXN0LnB5YycKKworICAgID4+PiB0ZXN0cyA9IGZpbmRlci5maW5kKHNhbXBsZV9mdW5jKQorCisgICAgPj4+IHByaW50IHRlc3RzICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIFs8RG9jVGVzdCBzYW1wbGVfZnVuYyBmcm9tIC4uLjoxNyAoMSBleGFtcGxlKT5dCisKK1RoZSBleGFjdCBuYW1lIGRlcGVuZHMgb24gaG93IHRlc3RfZG9jdGVzdCB3YXMgaW52b2tlZCwgc28gYWxsb3cgZm9yCitsZWFkaW5nIHBhdGggY29tcG9uZW50cy4KKworICAgID4+PiB0ZXN0c1swXS5maWxlbmFtZSAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICcuLi50ZXN0X2RvY3Rlc3QucHknCisKKyAgICA+Pj4gdGVzdC50ZXN0X2RvY3Rlc3QuX19maWxlX18gPSBvbGQKKworCisgICAgPj4+IGUgPSB0ZXN0c1swXS5leGFtcGxlc1swXQorICAgID4+PiAoZS5zb3VyY2UsIGUud2FudCwgZS5saW5lbm8pCisgICAgKCdwcmludCBzYW1wbGVfZnVuYygyMilcbicsICc0NFxuJywgMykKKworQnkgZGVmYXVsdCwgdGVzdHMgYXJlIGNyZWF0ZWQgZm9yIG9iamVjdHMgd2l0aCBubyBkb2NzdHJpbmc6CisKKyAgICA+Pj4gZGVmIG5vX2RvY3N0cmluZyh2KToKKyAgICAuLi4gICAgIHBhc3MKKyAgICA+Pj4gZmluZGVyLmZpbmQobm9fZG9jc3RyaW5nKQorICAgIFtdCisKK0hvd2V2ZXIsIHRoZSBvcHRpb25hbCBhcmd1bWVudCBgZXhjbHVkZV9lbXB0eWAgdG8gdGhlIERvY1Rlc3RGaW5kZXIKK2NvbnN0cnVjdG9yIGNhbiBiZSB1c2VkIHRvIGV4Y2x1ZGUgdGVzdHMgZm9yIG9iamVjdHMgd2l0aCBlbXB0eQorZG9jc3RyaW5nczoKKworICAgID4+PiBkZWYgbm9fZG9jc3RyaW5nKHYpOgorICAgIC4uLiAgICAgcGFzcworICAgID4+PiBleGNsX2VtcHR5X2ZpbmRlciA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcihleGNsdWRlX2VtcHR5PVRydWUpCisgICAgPj4+IGV4Y2xfZW1wdHlfZmluZGVyLmZpbmQobm9fZG9jc3RyaW5nKQorICAgIFtdCisKK0lmIHRoZSBmdW5jdGlvbiBoYXMgYSBkb2NzdHJpbmcgd2l0aCBubyBleGFtcGxlcywgdGhlbiBhIHRlc3Qgd2l0aCBubworZXhhbXBsZXMgaXMgcmV0dXJuZWQuICAoVGhpcyBsZXRzIGBEb2NUZXN0UnVubmVyYCBjb2xsZWN0IHN0YXRpc3RpY3MKK2Fib3V0IHdoaWNoIGZ1bmN0aW9ucyBoYXZlIG5vIHRlc3RzIC0tIGJ1dCBpcyB0aGF0IHVzZWZ1bD8gIEFuZCBzaG91bGQKK2FuIGVtcHR5IHRlc3QgYWxzbyBiZSBjcmVhdGVkIHdoZW4gdGhlcmUncyBubyBkb2NzdHJpbmc/KQorCisgICAgPj4+IGRlZiBub19leGFtcGxlcyh2KToKKyAgICAuLi4gICAgICcnJyBubyBkb2N0ZXN0IGV4YW1wbGVzICcnJworICAgID4+PiBmaW5kZXIuZmluZChub19leGFtcGxlcykgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICBbPERvY1Rlc3Qgbm9fZXhhbXBsZXMgZnJvbSAuLi46MSAobm8gZXhhbXBsZXMpPl0KKworRmluZGluZyBUZXN0cyBpbiBDbGFzc2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0ZvciBhIGNsYXNzLCBEb2NUZXN0RmluZGVyIHdpbGwgY3JlYXRlIGEgdGVzdCBmb3IgdGhlIGNsYXNzJ3MKK2RvY3N0cmluZywgYW5kIHdpbGwgcmVjdXJzaXZlbHkgZXhwbG9yZSBpdHMgY29udGVudHMsIGluY2x1ZGluZworbWV0aG9kcywgY2xhc3NtZXRob2RzLCBzdGF0aWNtZXRob2RzLCBwcm9wZXJ0aWVzLCBhbmQgbmVzdGVkIGNsYXNzZXMuCisKKyAgICA+Pj4gZmluZGVyID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkKKyAgICA+Pj4gdGVzdHMgPSBmaW5kZXIuZmluZChTYW1wbGVDbGFzcykKKyAgICA+Pj4gZm9yIHQgaW4gdGVzdHM6CisgICAgLi4uICAgICBwcmludCAnJTJzICAlcycgJSAobGVuKHQuZXhhbXBsZXMpLCB0Lm5hbWUpCisgICAgIDMgIFNhbXBsZUNsYXNzCisgICAgIDMgIFNhbXBsZUNsYXNzLk5lc3RlZENsYXNzCisgICAgIDEgIFNhbXBsZUNsYXNzLk5lc3RlZENsYXNzLl9faW5pdF9fCisgICAgIDEgIFNhbXBsZUNsYXNzLl9faW5pdF9fCisgICAgIDIgIFNhbXBsZUNsYXNzLmFfY2xhc3NtZXRob2QKKyAgICAgMSAgU2FtcGxlQ2xhc3MuYV9wcm9wZXJ0eQorICAgICAxICBTYW1wbGVDbGFzcy5hX3N0YXRpY21ldGhvZAorICAgICAxICBTYW1wbGVDbGFzcy5kb3VibGUKKyAgICAgMSAgU2FtcGxlQ2xhc3MuZ2V0CisKK05ldy1zdHlsZSBjbGFzc2VzIGFyZSBhbHNvIHN1cHBvcnRlZDoKKworICAgID4+PiB0ZXN0cyA9IGZpbmRlci5maW5kKFNhbXBsZU5ld1N0eWxlQ2xhc3MpCisgICAgPj4+IGZvciB0IGluIHRlc3RzOgorICAgIC4uLiAgICAgcHJpbnQgJyUycyAgJXMnICUgKGxlbih0LmV4YW1wbGVzKSwgdC5uYW1lKQorICAgICAxICBTYW1wbGVOZXdTdHlsZUNsYXNzCisgICAgIDEgIFNhbXBsZU5ld1N0eWxlQ2xhc3MuX19pbml0X18KKyAgICAgMSAgU2FtcGxlTmV3U3R5bGVDbGFzcy5kb3VibGUKKyAgICAgMSAgU2FtcGxlTmV3U3R5bGVDbGFzcy5nZXQKKworRmluZGluZyBUZXN0cyBpbiBNb2R1bGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0ZvciBhIG1vZHVsZSwgRG9jVGVzdEZpbmRlciB3aWxsIGNyZWF0ZSBhIHRlc3QgZm9yIHRoZSBjbGFzcydzCitkb2NzdHJpbmcsIGFuZCB3aWxsIHJlY3Vyc2l2ZWx5IGV4cGxvcmUgaXRzIGNvbnRlbnRzLCBpbmNsdWRpbmcKK2Z1bmN0aW9ucywgY2xhc3NlcywgYW5kIHRoZSBgX190ZXN0X19gIGRpY3Rpb25hcnksIGlmIGl0IGV4aXN0czoKKworICAgID4+PiAjIEEgbW9kdWxlCisgICAgPj4+IGltcG9ydCB0eXBlcworICAgID4+PiBtID0gdHlwZXMuTW9kdWxlVHlwZSgnc29tZV9tb2R1bGUnKQorICAgID4+PiBkZWYgdHJpcGxlKHZhbCk6CisgICAgLi4uICAgICAnJycKKyAgICAuLi4gICAgID4+PiBwcmludCB0cmlwbGUoMTEpCisgICAgLi4uICAgICAzMworICAgIC4uLiAgICAgJycnCisgICAgLi4uICAgICByZXR1cm4gdmFsKjMKKyAgICA+Pj4gbS5fX2RpY3RfXy51cGRhdGUoeworICAgIC4uLiAgICAgJ3NhbXBsZV9mdW5jJzogc2FtcGxlX2Z1bmMsCisgICAgLi4uICAgICAnU2FtcGxlQ2xhc3MnOiBTYW1wbGVDbGFzcywKKyAgICAuLi4gICAgICdfX2RvY19fJzogJycnCisgICAgLi4uICAgICAgICAgTW9kdWxlIGRvY3N0cmluZy4KKyAgICAuLi4gICAgICAgICAgICAgPj4+IHByaW50ICdtb2R1bGUnCisgICAgLi4uICAgICAgICAgICAgIG1vZHVsZQorICAgIC4uLiAgICAgICAgICcnJywKKyAgICAuLi4gICAgICdfX3Rlc3RfXyc6IHsKKyAgICAuLi4gICAgICAgICAnZCc6ICc+Pj4gcHJpbnQgNlxuNlxuPj4+IHByaW50IDdcbjdcbicsCisgICAgLi4uICAgICAgICAgJ2MnOiB0cmlwbGV9fSkKKworICAgID4+PiBmaW5kZXIgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKQorICAgID4+PiAjIFVzZSBtb2R1bGU9dGVzdC50ZXN0X2RvY3Rlc3QsIHRvIHByZXZlbnQgZG9jdGVzdCBmcm9tCisgICAgPj4+ICMgaWdub3JpbmcgdGhlIG9iamVjdHMgc2luY2UgdGhleSB3ZXJlbid0IGRlZmluZWQgaW4gbS4KKyAgICA+Pj4gaW1wb3J0IHRlc3QudGVzdF9kb2N0ZXN0CisgICAgPj4+IHRlc3RzID0gZmluZGVyLmZpbmQobSwgbW9kdWxlPXRlc3QudGVzdF9kb2N0ZXN0KQorICAgID4+PiBmb3IgdCBpbiB0ZXN0czoKKyAgICAuLi4gICAgIHByaW50ICclMnMgICVzJyAlIChsZW4odC5leGFtcGxlcyksIHQubmFtZSkKKyAgICAgMSAgc29tZV9tb2R1bGUKKyAgICAgMyAgc29tZV9tb2R1bGUuU2FtcGxlQ2xhc3MKKyAgICAgMyAgc29tZV9tb2R1bGUuU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3MKKyAgICAgMSAgc29tZV9tb2R1bGUuU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3MuX19pbml0X18KKyAgICAgMSAgc29tZV9tb2R1bGUuU2FtcGxlQ2xhc3MuX19pbml0X18KKyAgICAgMiAgc29tZV9tb2R1bGUuU2FtcGxlQ2xhc3MuYV9jbGFzc21ldGhvZAorICAgICAxICBzb21lX21vZHVsZS5TYW1wbGVDbGFzcy5hX3Byb3BlcnR5CisgICAgIDEgIHNvbWVfbW9kdWxlLlNhbXBsZUNsYXNzLmFfc3RhdGljbWV0aG9kCisgICAgIDEgIHNvbWVfbW9kdWxlLlNhbXBsZUNsYXNzLmRvdWJsZQorICAgICAxICBzb21lX21vZHVsZS5TYW1wbGVDbGFzcy5nZXQKKyAgICAgMSAgc29tZV9tb2R1bGUuX190ZXN0X18uYworICAgICAyICBzb21lX21vZHVsZS5fX3Rlc3RfXy5kCisgICAgIDEgIHNvbWVfbW9kdWxlLnNhbXBsZV9mdW5jCisKK0R1cGxpY2F0ZSBSZW1vdmFsCit+fn5+fn5+fn5+fn5+fn5+fgorSWYgYSBzaW5nbGUgb2JqZWN0IGlzIGxpc3RlZCB0d2ljZSAodW5kZXIgZGlmZmVyZW50IG5hbWVzKSwgdGhlbiB0ZXN0cword2lsbCBvbmx5IGJlIGdlbmVyYXRlZCBmb3IgaXQgb25jZToKKworICAgID4+PiBmcm9tIHRlc3QgaW1wb3J0IGRvY3Rlc3RfYWxpYXNlcworICAgID4+PiBhc3NlcnQgZG9jdGVzdF9hbGlhc2VzLlR3b05hbWVzLmYKKyAgICA+Pj4gYXNzZXJ0IGRvY3Rlc3RfYWxpYXNlcy5Ud29OYW1lcy5nCisgICAgPj4+IHRlc3RzID0gZXhjbF9lbXB0eV9maW5kZXIuZmluZChkb2N0ZXN0X2FsaWFzZXMpCisgICAgPj4+IHByaW50IGxlbih0ZXN0cykKKyAgICAyCisgICAgPj4+IHByaW50IHRlc3RzWzBdLm5hbWUKKyAgICB0ZXN0LmRvY3Rlc3RfYWxpYXNlcy5Ud29OYW1lcworCisgICAgVHdvTmFtZXMuZiBhbmQgVHdvTmFtZXMuZyBhcmUgYm91bmQgdG8gdGhlIHNhbWUgb2JqZWN0LgorICAgIFdlIGNhbid0IGd1ZXNzIHdoaWNoIHdpbGwgYmUgZm91bmQgaW4gZG9jdGVzdCdzIHRyYXZlcnNhbCBvZgorICAgIFR3b05hbWVzLl9fZGljdF9fIGZpcnN0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGZvciBlaXRoZXIuCisKKyAgICA+Pj4gdGVzdHNbMV0ubmFtZS5zcGxpdCgnLicpWy0xXSBpbiBbJ2YnLCAnZyddCisgICAgVHJ1ZQorCitFbXB0eSBUZXN0cworfn5+fn5+fn5+fn4KK0J5IGRlZmF1bHQsIGFuIG9iamVjdCB3aXRoIG5vIGRvY3Rlc3RzIGRvZXNuJ3QgY3JlYXRlIGFueSB0ZXN0czoKKworICAgID4+PiB0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoU2FtcGxlQ2xhc3MpCisgICAgPj4+IGZvciB0IGluIHRlc3RzOgorICAgIC4uLiAgICAgcHJpbnQgJyUycyAgJXMnICUgKGxlbih0LmV4YW1wbGVzKSwgdC5uYW1lKQorICAgICAzICBTYW1wbGVDbGFzcworICAgICAzICBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcworICAgICAxICBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcy5fX2luaXRfXworICAgICAxICBTYW1wbGVDbGFzcy5fX2luaXRfXworICAgICAyICBTYW1wbGVDbGFzcy5hX2NsYXNzbWV0aG9kCisgICAgIDEgIFNhbXBsZUNsYXNzLmFfcHJvcGVydHkKKyAgICAgMSAgU2FtcGxlQ2xhc3MuYV9zdGF0aWNtZXRob2QKKyAgICAgMSAgU2FtcGxlQ2xhc3MuZG91YmxlCisgICAgIDEgIFNhbXBsZUNsYXNzLmdldAorCitCeSBkZWZhdWx0LCB0aGF0IGV4Y2x1ZGVkIG9iamVjdHMgd2l0aCBubyBkb2N0ZXN0cy4gIGV4Y2x1ZGVfZW1wdHk9RmFsc2UKK3RlbGxzIGl0IHRvIGluY2x1ZGUgKGVtcHR5KSB0ZXN0cyBmb3Igb2JqZWN0cyB3aXRoIG5vIGRvY3Rlc3RzLiAgVGhpcyBmZWF0dXJlCitpcyByZWFsbHkgdG8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGluIHdoYXQgZG9jdGVzdC5tYXN0ZXIuc3VtbWFyaXplKCkKK2Rpc3BsYXlzLgorCisgICAgPj4+IHRlc3RzID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKGV4Y2x1ZGVfZW1wdHk9RmFsc2UpLmZpbmQoU2FtcGxlQ2xhc3MpCisgICAgPj4+IGZvciB0IGluIHRlc3RzOgorICAgIC4uLiAgICAgcHJpbnQgJyUycyAgJXMnICUgKGxlbih0LmV4YW1wbGVzKSwgdC5uYW1lKQorICAgICAzICBTYW1wbGVDbGFzcworICAgICAzICBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcworICAgICAxICBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcy5fX2luaXRfXworICAgICAwICBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcy5nZXQKKyAgICAgMCAgU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3Muc3F1YXJlCisgICAgIDEgIFNhbXBsZUNsYXNzLl9faW5pdF9fCisgICAgIDIgIFNhbXBsZUNsYXNzLmFfY2xhc3NtZXRob2QKKyAgICAgMSAgU2FtcGxlQ2xhc3MuYV9wcm9wZXJ0eQorICAgICAxICBTYW1wbGVDbGFzcy5hX3N0YXRpY21ldGhvZAorICAgICAxICBTYW1wbGVDbGFzcy5kb3VibGUKKyAgICAgMSAgU2FtcGxlQ2xhc3MuZ2V0CisKK1R1cm5pbmcgb2ZmIFJlY3Vyc2lvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CitEb2NUZXN0RmluZGVyIGNhbiBiZSB0b2xkIG5vdCB0byBsb29rIGZvciB0ZXN0cyBpbiBjb250YWluZWQgb2JqZWN0cwordXNpbmcgdGhlIGByZWN1cnNlYCBmbGFnOgorCisgICAgPj4+IHRlc3RzID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKHJlY3Vyc2U9RmFsc2UpLmZpbmQoU2FtcGxlQ2xhc3MpCisgICAgPj4+IGZvciB0IGluIHRlc3RzOgorICAgIC4uLiAgICAgcHJpbnQgJyUycyAgJXMnICUgKGxlbih0LmV4YW1wbGVzKSwgdC5uYW1lKQorICAgICAzICBTYW1wbGVDbGFzcworCitMaW5lIG51bWJlcnMKK35+fn5+fn5+fn5+fgorRG9jVGVzdEZpbmRlciBmaW5kcyB0aGUgbGluZSBudW1iZXIgb2YgZWFjaCBleGFtcGxlOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgJycnCisgICAgLi4uICAgICA+Pj4geCA9IDEyCisgICAgLi4uCisgICAgLi4uICAgICBzb21lIHRleHQKKyAgICAuLi4KKyAgICAuLi4gICAgID4+PiAjIGV4YW1wbGVzIGFyZSBub3QgY3JlYXRlZCBmb3IgY29tbWVudHMgJiBiYXJlIHByb21wdHMuCisgICAgLi4uICAgICA+Pj4KKyAgICAuLi4gICAgIC4uLgorICAgIC4uLgorICAgIC4uLiAgICAgPj4+IGZvciB4IGluIHJhbmdlKDEwKToKKyAgICAuLi4gICAgIC4uLiAgICAgcHJpbnQgeCwKKyAgICAuLi4gICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkKKyAgICAuLi4gICAgID4+PiB4Ly8yCisgICAgLi4uICAgICA2CisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gW2UubGluZW5vIGZvciBlIGluIHRlc3QuZXhhbXBsZXNdCisgICAgWzEsIDksIDEyXQorIiIiCisKK2RlZiB0ZXN0X0RvY1Rlc3RQYXJzZXIoKTogciIiIgorVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0UGFyc2VyYCBjbGFzcy4KKworRG9jVGVzdFBhcnNlciBpcyB1c2VkIHRvIHBhcnNlIGRvY3N0cmluZ3MgY29udGFpbmluZyBkb2N0ZXN0IGV4YW1wbGVzLgorCitUaGUgYHBhcnNlYCBtZXRob2QgZGl2aWRlcyBhIGRvY3N0cmluZyBpbnRvIGV4YW1wbGVzIGFuZCBpbnRlcnZlbmluZwordGV4dDoKKworICAgID4+PiBzID0gJycnCisgICAgLi4uICAgICA+Pj4geCwgeSA9IDIsIDMgICMgbm8gb3V0cHV0IGV4cGVjdGVkCisgICAgLi4uICAgICA+Pj4gaWYgMToKKyAgICAuLi4gICAgIC4uLiAgICAgcHJpbnQgeAorICAgIC4uLiAgICAgLi4uICAgICBwcmludCB5CisgICAgLi4uICAgICAyCisgICAgLi4uICAgICAzCisgICAgLi4uCisgICAgLi4uICAgICBTb21lIHRleHQuCisgICAgLi4uICAgICA+Pj4geCt5CisgICAgLi4uICAgICA1CisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gcGFyc2VyID0gZG9jdGVzdC5Eb2NUZXN0UGFyc2VyKCkKKyAgICA+Pj4gZm9yIHBpZWNlIGluIHBhcnNlci5wYXJzZShzKToKKyAgICAuLi4gICAgIGlmIGlzaW5zdGFuY2UocGllY2UsIGRvY3Rlc3QuRXhhbXBsZSk6CisgICAgLi4uICAgICAgICAgcHJpbnQgJ0V4YW1wbGU6JywgKHBpZWNlLnNvdXJjZSwgcGllY2Uud2FudCwgcGllY2UubGluZW5vKQorICAgIC4uLiAgICAgZWxzZToKKyAgICAuLi4gICAgICAgICBwcmludCAnICAgVGV4dDonLCBgcGllY2VgCisgICAgICAgVGV4dDogJ1xuJworICAgIEV4YW1wbGU6ICgneCwgeSA9IDIsIDMgICMgbm8gb3V0cHV0IGV4cGVjdGVkXG4nLCAnJywgMSkKKyAgICAgICBUZXh0OiAnJworICAgIEV4YW1wbGU6ICgnaWYgMTpcbiAgICBwcmludCB4XG4gICAgcHJpbnQgeVxuJywgJzJcbjNcbicsIDIpCisgICAgICAgVGV4dDogJ1xuU29tZSB0ZXh0LlxuJworICAgIEV4YW1wbGU6ICgneCt5XG4nLCAnNVxuJywgOSkKKyAgICAgICBUZXh0OiAnJworCitUaGUgYGdldF9leGFtcGxlc2AgbWV0aG9kIHJldHVybnMganVzdCB0aGUgZXhhbXBsZXM6CisKKyAgICA+Pj4gZm9yIHBpZWNlIGluIHBhcnNlci5nZXRfZXhhbXBsZXMocyk6CisgICAgLi4uICAgICBwcmludCAocGllY2Uuc291cmNlLCBwaWVjZS53YW50LCBwaWVjZS5saW5lbm8pCisgICAgKCd4LCB5ID0gMiwgMyAgIyBubyBvdXRwdXQgZXhwZWN0ZWRcbicsICcnLCAxKQorICAgICgnaWYgMTpcbiAgICBwcmludCB4XG4gICAgcHJpbnQgeVxuJywgJzJcbjNcbicsIDIpCisgICAgKCd4K3lcbicsICc1XG4nLCA5KQorCitUaGUgYGdldF9kb2N0ZXN0YCBtZXRob2QgY3JlYXRlcyBhIFRlc3QgZnJvbSB0aGUgZXhhbXBsZXMsIGFsb25nIHdpdGggdGhlCitnaXZlbiBhcmd1bWVudHM6CisKKyAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChzLCB7fSwgJ25hbWUnLCAnZmlsZW5hbWUnLCBsaW5lbm89NSkKKyAgICA+Pj4gKHRlc3QubmFtZSwgdGVzdC5maWxlbmFtZSwgdGVzdC5saW5lbm8pCisgICAgKCduYW1lJywgJ2ZpbGVuYW1lJywgNSkKKyAgICA+Pj4gZm9yIHBpZWNlIGluIHRlc3QuZXhhbXBsZXM6CisgICAgLi4uICAgICBwcmludCAocGllY2Uuc291cmNlLCBwaWVjZS53YW50LCBwaWVjZS5saW5lbm8pCisgICAgKCd4LCB5ID0gMiwgMyAgIyBubyBvdXRwdXQgZXhwZWN0ZWRcbicsICcnLCAxKQorICAgICgnaWYgMTpcbiAgICBwcmludCB4XG4gICAgcHJpbnQgeVxuJywgJzJcbjNcbicsIDIpCisgICAgKCd4K3lcbicsICc1XG4nLCA5KQorIiIiCisKK2NsYXNzIHRlc3RfRG9jVGVzdFJ1bm5lcjoKKyAgICBkZWYgYmFzaWNzKCk6IHIiIiIKK1VuaXQgdGVzdHMgZm9yIHRoZSBgRG9jVGVzdFJ1bm5lcmAgY2xhc3MuCisKK0RvY1Rlc3RSdW5uZXIgaXMgdXNlZCB0byBydW4gRG9jVGVzdCB0ZXN0IGNhc2VzLCBhbmQgdG8gYWNjdW11bGF0ZQorc3RhdGlzdGljcy4gIEhlcmUncyBhIHNpbXBsZSBEb2NUZXN0IGNhc2Ugd2UgY2FuIHVzZToKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgICcnJworICAgIC4uLiAgICAgPj4+IHggPSAxMgorICAgIC4uLiAgICAgPj4+IHByaW50IHgKKyAgICAuLi4gICAgIDEyCisgICAgLi4uICAgICA+Pj4geC8vMgorICAgIC4uLiAgICAgNgorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisKK1RoZSBtYWluIERvY1Rlc3RSdW5uZXIgaW50ZXJmYWNlIGlzIHRoZSBgcnVuYCBtZXRob2QsIHdoaWNoIHJ1bnMgYQorZ2l2ZW4gRG9jVGVzdCBjYXNlIGluIGEgZ2l2ZW4gbmFtZXNwYWNlIChnbG9icykuICBJdCByZXR1cm5zIGEgdHVwbGUKK2AoZix0KWAsIHdoZXJlIGBmYCBpcyB0aGUgbnVtYmVyIG9mIGZhaWxlZCB0ZXN0cyBhbmQgYHRgIGlzIHRoZSBudW1iZXIKK29mIHRyaWVkIHRlc3RzLgorCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTMpCisKK0lmIGFueSBleGFtcGxlIHByb2R1Y2VzIGluY29ycmVjdCBvdXRwdXQsIHRoZW4gdGhlIHRlc3QgcnVubmVyIHJlcG9ydHMKK3RoZSBmYWlsdXJlIGFuZCBwcm9jZWVkcyB0byB0aGUgbmV4dCBleGFtcGxlOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgJycnCisgICAgLi4uICAgICA+Pj4geCA9IDEyCisgICAgLi4uICAgICA+Pj4gcHJpbnQgeAorICAgIC4uLiAgICAgMTQKKyAgICAuLi4gICAgID4+PiB4Ly8yCisgICAgLi4uICAgICA2CisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9VHJ1ZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgVHJ5aW5nOgorICAgICAgICB4ID0gMTIKKyAgICBFeHBlY3Rpbmcgbm90aGluZworICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICBwcmludCB4CisgICAgRXhwZWN0aW5nOgorICAgICAgICAxNAorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA0LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IHgKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgMTQKKyAgICBHb3Q6CisgICAgICAgIDEyCisgICAgVHJ5aW5nOgorICAgICAgICB4Ly8yCisgICAgRXhwZWN0aW5nOgorICAgICAgICA2CisgICAgb2sKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTMpCisiIiIKKyAgICBkZWYgdmVyYm9zZV9mbGFnKCk6IHIiIiIKK1RoZSBgdmVyYm9zZWAgZmxhZyBtYWtlcyB0aGUgdGVzdCBydW5uZXIgZ2VuZXJhdGUgbW9yZSBkZXRhaWxlZAorb3V0cHV0OgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgJycnCisgICAgLi4uICAgICA+Pj4geCA9IDEyCisgICAgLi4uICAgICA+Pj4gcHJpbnQgeAorICAgIC4uLiAgICAgMTIKKyAgICAuLi4gICAgID4+PiB4Ly8yCisgICAgLi4uICAgICA2CisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKworICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1UcnVlKS5ydW4odGVzdCkKKyAgICBUcnlpbmc6CisgICAgICAgIHggPSAxMgorICAgIEV4cGVjdGluZyBub3RoaW5nCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgIHByaW50IHgKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDEyCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgIHgvLzIKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDYKKyAgICBvaworICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MykKKworSWYgdGhlIGB2ZXJib3NlYCBmbGFnIGlzIHVuc3BlY2lmaWVkLCB0aGVuIHRoZSBvdXRwdXQgd2lsbCBiZSB2ZXJib3NlCitpZmYgYC12YCBhcHBlYXJzIGluIHN5cy5hcmd2OgorCisgICAgPj4+ICMgU2F2ZSB0aGUgcmVhbCBzeXMuYXJndiBsaXN0LgorICAgID4+PiBvbGRfYXJndiA9IHN5cy5hcmd2CisKKyAgICA+Pj4gIyBJZiAtdiBkb2VzIG5vdCBhcHBlYXIgaW4gc3lzLmFyZ3YsIHRoZW4gb3V0cHV0IGlzbid0IHZlcmJvc2UuCisgICAgPj4+IHN5cy5hcmd2ID0gWyd0ZXN0J10KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKCkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0zKQorCisgICAgPj4+ICMgSWYgLXYgZG9lcyBhcHBlYXIgaW4gc3lzLmFyZ3YsIHRoZW4gb3V0cHV0IGlzIHZlcmJvc2UuCisgICAgPj4+IHN5cy5hcmd2ID0gWyd0ZXN0JywgJy12J10KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKCkucnVuKHRlc3QpCisgICAgVHJ5aW5nOgorICAgICAgICB4ID0gMTIKKyAgICBFeHBlY3Rpbmcgbm90aGluZworICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICBwcmludCB4CisgICAgRXhwZWN0aW5nOgorICAgICAgICAxMgorICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICB4Ly8yCisgICAgRXhwZWN0aW5nOgorICAgICAgICA2CisgICAgb2sKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTMpCisKKyAgICA+Pj4gIyBSZXN0b3JlIHN5cy5hcmd2CisgICAgPj4+IHN5cy5hcmd2ID0gb2xkX2FyZ3YKKworSW4gdGhlIHJlbWFpbmluZyBleGFtcGxlcywgdGhlIHRlc3QgcnVubmVyJ3MgdmVyYm9zaXR5IHdpbGwgYmUKK2V4cGxpY2l0bHkgc2V0LCB0byBlbnN1cmUgdGhhdCB0aGUgdGVzdCBiZWhhdmlvciBpcyBjb25zaXN0ZW50LgorICAgICIiIgorICAgIGRlZiBleGNlcHRpb25zKCk6IHIiIiIKK1Rlc3RzIG9mIGBEb2NUZXN0UnVubmVyYCdzIGV4Y2VwdGlvbiBoYW5kbGluZy4KKworQW4gZXhwZWN0ZWQgZXhjZXB0aW9uIGlzIHNwZWNpZmllZCB3aXRoIGEgdHJhY2ViYWNrIG1lc3NhZ2UuICBUaGUKK2xpbmVzIGJldHdlZW4gdGhlIGZpcnN0IGxpbmUgYW5kIHRoZSB0eXBlL3ZhbHVlIG1heSBiZSBvbWl0dGVkIG9yCityZXBsYWNlZCB3aXRoIGFueSBvdGhlciBzdHJpbmc6CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICAnJycKKyAgICAuLi4gICAgID4+PiB4ID0gMTIKKyAgICAuLi4gICAgID4+PiBwcmludCB4Ly8wCisgICAgLi4uICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uICAgICBaZXJvRGl2aXNpb25FcnJvcjogaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybworICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisKK0FuIGV4YW1wbGUgbWF5IG5vdCBnZW5lcmF0ZSBvdXRwdXQgYmVmb3JlIGl0IHJhaXNlcyBhbiBleGNlcHRpb247IGlmCitpdCBkb2VzLCB0aGVuIHRoZSB0cmFjZWJhY2sgbWVzc2FnZSB3aWxsIG5vdCBiZSByZWNvZ25pemVkIGFzCitzaWduYWxpbmcgYW4gZXhwZWN0ZWQgZXhjZXB0aW9uLCBzbyB0aGUgZXhhbXBsZSB3aWxsIGJlIHJlcG9ydGVkIGFzIGFuCit1bmV4cGVjdGVkIGV4Y2VwdGlvbjoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgICcnJworICAgIC4uLiAgICAgPj4+IHggPSAxMgorICAgIC4uLiAgICAgPj4+IHByaW50ICdwcmUtZXhjZXB0aW9uIG91dHB1dCcsIHgvLzAKKyAgICAuLi4gICAgIHByZS1leGNlcHRpb24gb3V0cHV0CisgICAgLi4uICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uICAgICBaZXJvRGl2aXNpb25FcnJvcjogaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybworICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNCwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCAncHJlLWV4Y2VwdGlvbiBvdXRwdXQnLCB4Ly8wCisgICAgRXhjZXB0aW9uIHJhaXNlZDoKKyAgICAgICAgLi4uCisgICAgICAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnRlZ2VyIGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCitFeGNlcHRpb24gbWVzc2FnZXMgbWF5IGNvbnRhaW4gbmV3bGluZXM6CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gcmFpc2UgVmFsdWVFcnJvciwgJ211bHRpXG5saW5lXG5tZXNzYWdlJworICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgVmFsdWVFcnJvcjogbXVsdGkKKyAgICAuLi4gICAgIGxpbmUKKyAgICAuLi4gICAgIG1lc3NhZ2UKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQorCitJZiBhbiBleGNlcHRpb24gaXMgZXhwZWN0ZWQsIGJ1dCBhbiBleGNlcHRpb24gd2l0aCB0aGUgd3JvbmcgdHlwZSBvcgorbWVzc2FnZSBpcyByYWlzZWQsIHRoZW4gaXQgaXMgcmVwb3J0ZWQgYXMgYSBmYWlsdXJlOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IHJhaXNlIFZhbHVlRXJyb3IsICdtZXNzYWdlJworICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgVmFsdWVFcnJvcjogd3JvbmcgbWVzc2FnZQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMywgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAnbWVzc2FnZScKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICBWYWx1ZUVycm9yOiB3cm9uZyBtZXNzYWdlCisgICAgR290OgorICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgICAgICBWYWx1ZUVycm9yOiBtZXNzYWdlCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQorCitIb3dldmVyLCBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCBjYW4gYmUgdXNlZCB0byBhbGxvdyBhIG1pc21hdGNoIGluIHRoZQorZGV0YWlsOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IHJhaXNlIFZhbHVlRXJyb3IsICdtZXNzYWdlJyAjZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCisgICAgLi4uICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uICAgICBWYWx1ZUVycm9yOiB3cm9uZyBtZXNzYWdlCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKworSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwgYWxzbyBpZ25vcmVzIGRpZmZlcmVuY2UgaW4gZXhjZXB0aW9uIGZvcm1hdHRpbmcKK2JldHdlZW4gUHl0aG9uIHZlcnNpb25zLiBGb3IgZXhhbXBsZSwgaW4gUHl0aG9uIDMueCwgdGhlIG1vZHVsZSBwYXRoIG9mCit0aGUgZXhjZXB0aW9uIGlzIGluIHRoZSBvdXRwdXQsIGJ1dCB0aGlzIHdpbGwgZmFpbCB1bmRlciBQeXRob24gMjoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBmcm9tIGh0dHBsaWIgaW1wb3J0IEhUVFBFeGNlcHRpb24KKyAgICAuLi4gICAgID4+PiByYWlzZSBIVFRQRXhjZXB0aW9uKCdtZXNzYWdlJykKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIGh0dHBsaWIuSFRUUEV4Y2VwdGlvbjogbWVzc2FnZQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNCwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICByYWlzZSBIVFRQRXhjZXB0aW9uKCdtZXNzYWdlJykKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICBodHRwbGliLkhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICBHb3Q6CisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgLi4uCisgICAgICAgIEhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK0J1dCBpbiBQeXRob24gMiB0aGUgbW9kdWxlIHBhdGggaXMgbm90IGluY2x1ZGVkLCBhbiB0aGVyZWZvcmUgYSB0ZXN0IG11c3QgbG9vaworbGlrZSB0aGUgZm9sbG93aW5nIHRlc3QgdG8gc3VjY2VlZCBpbiBQeXRob24gMi4gQnV0IHRoYXQgdGVzdCB3aWxsIGZhaWwgdW5kZXIKK1B5dGhvbiAzLgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IGZyb20gaHR0cGxpYiBpbXBvcnQgSFRUUEV4Y2VwdGlvbgorICAgIC4uLiAgICAgPj4+IHJhaXNlIEhUVFBFeGNlcHRpb24oJ21lc3NhZ2UnKQorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgSFRUUEV4Y2VwdGlvbjogbWVzc2FnZQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisKK0hvd2V2ZXIsIHdpdGggSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwsIHRoZSBtb2R1bGUgbmFtZSBvZiB0aGUgZXhjZXB0aW9uCisoaWYgYW55KSB3aWxsIGJlIGlnbm9yZWQ6CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gZnJvbSBodHRwbGliIGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgLi4uICAgICA+Pj4gcmFpc2UgSFRUUEV4Y2VwdGlvbignbWVzc2FnZScpICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIEhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorCitUaGUgbW9kdWxlIHBhdGggd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIHNvIHR3byBkaWZmZXJlbnQgbW9kdWxlIHBhdGhzIHdpbGwKK3N0aWxsIHBhc3MgaWYgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwgaXMgZ2l2ZW4uIFRoaXMgaXMgaW50ZW50aW9uYWwsIHNvIGl0IGNhbgorYmUgdXNlZCB3aGVuIGV4Y2VwdGlvbnMgaGF2ZSBjaGFuZ2VkIG1vZHVsZS4KKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBmcm9tIGh0dHBsaWIgaW1wb3J0IEhUVFBFeGNlcHRpb24KKyAgICAuLi4gICAgID4+PiByYWlzZSBIVFRQRXhjZXB0aW9uKCdtZXNzYWdlJykgI2RvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgZm9vLmJhci5IVFRQRXhjZXB0aW9uOiBtZXNzYWdlCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKworQnV0IElHTk9SRV9FWENFUFRJT05fREVUQUlMIGRvZXMgbm90IGFsbG93IGEgbWlzbWF0Y2ggaW4gdGhlIGV4Y2VwdGlvbiB0eXBlOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IHJhaXNlIFZhbHVlRXJyb3IsICdtZXNzYWdlJyAjZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCisgICAgLi4uICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uICAgICBUeXBlRXJyb3I6IHdyb25nIHR5cGUKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDMsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ21lc3NhZ2UnICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICBUeXBlRXJyb3I6IHdyb25nIHR5cGUKKyAgICBHb3Q6CisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgLi4uCisgICAgICAgIFZhbHVlRXJyb3I6IG1lc3NhZ2UKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTEpCisKK0lmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYnV0IG5vdCBleHBlY3RlZCwgdGhlbiBpdCBpcyByZXBvcnRlZCBhcyBhbgordW5leHBlY3RlZCBleGNlcHRpb246CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gMS8vMAorICAgIC4uLiAgICAgMAorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMywgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAxLy8wCisgICAgRXhjZXB0aW9uIHJhaXNlZDoKKyAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICAgICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludGVnZXIgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm8KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTEpCisiIiIKKyAgICBkZWYgZGlzcGxheWhvb2soKTogciIiIgorVGVzdCB0aGF0IGNoYW5naW5nIHN5cy5kaXNwbGF5aG9vayBkb2Vzbid0IG1hdHRlciBmb3IgZG9jdGVzdC4KKworICAgID4+PiBpbXBvcnQgc3lzCisgICAgPj4+IG9yaWdfZGlzcGxheWhvb2sgPSBzeXMuZGlzcGxheWhvb2sKKyAgICA+Pj4gZGVmIG15X2Rpc3BsYXlob29rKHgpOgorICAgIC4uLiAgICAgcHJpbnQoJ2hpIScpCisgICAgPj4+IHN5cy5kaXNwbGF5aG9vayA9IG15X2Rpc3BsYXlob29rCisgICAgPj4+IGRlZiBmKCk6CisgICAgLi4uICAgICAnJycKKyAgICAuLi4gICAgID4+PiAzCisgICAgLi4uICAgICAzCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gciA9IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICA+Pj4gcG9zdF9kaXNwbGF5aG9vayA9IHN5cy5kaXNwbGF5aG9vaworCisgICAgV2UgbmVlZCB0byByZXN0b3JlIHN5cy5kaXNwbGF5aG9vayBub3csIHNvIHRoYXQgd2UnbGwgYmUgYWJsZSB0byB0ZXN0CisgICAgcmVzdWx0cy4KKworICAgID4+PiBzeXMuZGlzcGxheWhvb2sgPSBvcmlnX2Rpc3BsYXlob29rCisKKyAgICBPaywgbm93IHdlIGNhbiBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgaXMgb2suCisKKyAgICA+Pj4gcgorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKyAgICA+Pj4gcG9zdF9kaXNwbGF5aG9vayBpcyBteV9kaXNwbGF5aG9vaworICAgIFRydWUKKyIiIgorICAgIGRlZiBvcHRpb25mbGFncygpOiByIiIiCitUZXN0cyBvZiBgRG9jVGVzdFJ1bm5lcmAncyBvcHRpb24gZmxhZyBoYW5kbGluZy4KKworU2V2ZXJhbCBvcHRpb24gZmxhZ3MgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiB0aGUgdGVzdAorcnVubmVyLiAgVGhlc2UgYXJlIGRlZmluZWQgYXMgbW9kdWxlIGNvbnN0YW50cyBpbiBkb2N0ZXN0LCBhbmQgcGFzc2VkCit0byB0aGUgRG9jVGVzdFJ1bm5lciBjb25zdHJ1Y3RvciAobXVsdGlwbGUgY29uc3RhbnRzIHNob3VsZCBiZSBPUmVkCit0b2dldGhlcikuCisKK1RoZSBET05UX0FDQ0VQVF9UUlVFX0ZPUl8xIGZsYWcgZGlzYWJsZXMgbWF0Y2hlcyBiZXR3ZWVuIFRydWUvRmFsc2UKK2FuZCAxLzA6CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICAnPj4+IFRydWVcbjFcbicKKworICAgID4+PiAjIFdpdGhvdXQgdGhlIGZsYWc6CisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTEpCisKKyAgICA+Pj4gIyBXaXRoIHRoZSBmbGFnOgorICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBmbGFncyA9IGRvY3Rlc3QuRE9OVF9BQ0NFUFRfVFJVRV9GT1JfMQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSAyLCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIFRydWUKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgMQorICAgIEdvdDoKKyAgICAgICAgVHJ1ZQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKKworVGhlIERPTlRfQUNDRVBUX0JMQU5LTElORSBmbGFnIGRpc2FibGVzIHRoZSBtYXRjaCBiZXR3ZWVuIGJsYW5rIGxpbmVzCithbmQgdGhlICc8QkxBTktMSU5FPicgbWFya2VyOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgJz4+PiBwcmludCAiYVxcblxcbmIiXG5hXG48QkxBTktMSU5FPlxuYlxuJworCisgICAgPj4+ICMgV2l0aG91dCB0aGUgZmxhZzoKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKworICAgID4+PiAjIFdpdGggdGhlIGZsYWc6CisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5ET05UX0FDQ0VQVF9CTEFOS0xJTkUKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMiwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCAiYVxuXG5iIgorICAgIEV4cGVjdGVkOgorICAgICAgICBhCisgICAgICAgIDxCTEFOS0xJTkU+CisgICAgICAgIGIKKyAgICBHb3Q6CisgICAgICAgIGEKKyAgICA8QkxBTktMSU5FPgorICAgICAgICBiCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQorCitUaGUgTk9STUFMSVpFX1dISVRFU1BBQ0UgZmxhZyBjYXVzZXMgYWxsIHNlcXVlbmNlcyBvZiB3aGl0ZXNwYWNlIHRvIGJlCit0cmVhdGVkIGFzIGVxdWFsOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgJz4+PiBwcmludCAxLCAyLCAzXG4gIDEgICAyXG4gMycKKworICAgID4+PiAjIFdpdGhvdXQgdGhlIGZsYWc6CisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMiwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCAxLCAyLCAzCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICAgMSAgIDIKKyAgICAgICAgIDMKKyAgICBHb3Q6CisgICAgICAgIDEgMiAzCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQorCisgICAgPj4+ICMgV2l0aCB0aGUgZmxhZzoKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0Lk5PUk1BTElaRV9XSElURVNQQUNFCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlLCBvcHRpb25mbGFncz1mbGFncykucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQorCisgICAgQW4gZXhhbXBsZSBmcm9tIHRoZSBkb2NzOgorICAgID4+PiBwcmludCByYW5nZSgyMCkgI2RvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIFswLCAgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwKKyAgICAxMCwgIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTldCisKK1RoZSBFTExJUFNJUyBmbGFnIGNhdXNlcyBlbGxpcHNpcyBtYXJrZXIgKCIuLi4iKSBpbiB0aGUgZXhwZWN0ZWQKK291dHB1dCB0byBtYXRjaCBhbnkgc3Vic3RyaW5nIGluIHRoZSBhY3R1YWwgb3V0cHV0OgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgJz4+PiBwcmludCByYW5nZSgxNSlcblswLCAxLCAyLCAuLi4sIDE0XVxuJworCisgICAgPj4+ICMgV2l0aG91dCB0aGUgZmxhZzoKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSAyLCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IHJhbmdlKDE1KQorICAgIEV4cGVjdGVkOgorICAgICAgICBbMCwgMSwgMiwgLi4uLCAxNF0KKyAgICBHb3Q6CisgICAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTRdCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQorCisgICAgPj4+ICMgV2l0aCB0aGUgZmxhZzoKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkVMTElQU0lTCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlLCBvcHRpb25mbGFncz1mbGFncykucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQorCisgICAgLi4uIGFsc28gbWF0Y2hlcyBub3RoaW5nOgorCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgLi4uICAgICBwcmludCBpKioyLCAjZG9jdGVzdDogK0VMTElQU0lTCisgICAgMCAxLi4uNC4uLjkgMTYgLi4uIDM2IDQ5IDY0IC4uLiA5ODAxCisKKyAgICAuLi4gY2FuIGJlIHN1cnByaXNpbmc7IGUuZy4sIHRoaXMgdGVzdCBwYXNzZXM6CisKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMjEpOiAjZG9jdGVzdDogK0VMTElQU0lTCisgICAgLi4uICAgICBwcmludCBpLAorICAgIDAgMSAyIC4uLjEuLi4yLi4uMAorCisgICAgRXhhbXBsZXMgZnJvbSB0aGUgZG9jczoKKworICAgID4+PiBwcmludCByYW5nZSgyMCkgIyBkb2N0ZXN0OitFTExJUFNJUworICAgIFswLCAxLCAuLi4sIDE4LCAxOV0KKworICAgID4+PiBwcmludCByYW5nZSgyMCkgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAuLi4gICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCisgICAgWzAsICAgIDEsIC4uLiwgICAxOCwgICAgMTldCisKK1RoZSBTS0lQIGZsYWcgY2F1c2VzIGFuIGV4YW1wbGUgdG8gYmUgc2tpcHBlZCBlbnRpcmVseS4gIEkuZS4sIHRoZQorZXhhbXBsZSBpcyBub3QgcnVuLiAgSXQgY2FuIGJlIHVzZWZ1bCBpbiBjb250ZXh0cyB3aGVyZSBkb2N0ZXN0CitleGFtcGxlcyBzZXJ2ZSBhcyBib3RoIGRvY3VtZW50YXRpb24gYW5kIHRlc3QgY2FzZXMsIGFuZCBhbiBleGFtcGxlCitzaG91bGQgYmUgaW5jbHVkZWQgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMsIGJ1dCBzaG91bGQgbm90IGJlCitjaGVja2VkIChlLmcuLCBiZWNhdXNlIGl0cyBvdXRwdXQgaXMgcmFuZG9tLCBvciBkZXBlbmRzIG9uIHJlc291cmNlcword2hpY2ggd291bGQgYmUgdW5hdmFpbGFibGUuKSAgVGhlIFNLSVAgZmxhZyBjYW4gYWxzbyBiZSB1c2VkIGZvcgorJ2NvbW1lbnRpbmcgb3V0JyBicm9rZW4gZXhhbXBsZXMuCisKKyAgICA+Pj4gaW1wb3J0IHVuYXZhaWxhYmxlX3Jlc291cmNlICAgICAgICAgICAjIGRvY3Rlc3Q6ICtTS0lQCisgICAgPj4+IHVuYXZhaWxhYmxlX3Jlc291cmNlLmRvX3NvbWV0aGluZygpICAgIyBkb2N0ZXN0OiArU0tJUAorICAgID4+PiB1bmF2YWlsYWJsZV9yZXNvdXJjZS5ibG93X3VwKCkgICAgICAgICMgZG9jdGVzdDogK1NLSVAKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgIFVuY2hlY2tlZEJsb3dVcEVycm9yOiAgTm9ib2R5IGNoZWNrcyBtZS4KKworICAgID4+PiBpbXBvcnQgcmFuZG9tCisgICAgPj4+IHByaW50IHJhbmRvbS5yYW5kb20oKSAjIGRvY3Rlc3Q6ICtTS0lQCisgICAgMC43MjEyMTY5MjM4ODkKKworVGhlIFJFUE9SVF9VRElGRiBmbGFnIGNhdXNlcyBmYWlsdXJlcyB0aGF0IGludm9sdmUgbXVsdGktbGluZSBleHBlY3RlZAorYW5kIGFjdHVhbCBvdXRwdXRzIHRvIGJlIGRpc3BsYXllZCB1c2luZyBhIHVuaWZpZWQgZGlmZjoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBwcmludCAnXG4nLmpvaW4oJ2FiY2RlZmcnKQorICAgIC4uLiAgICAgYQorICAgIC4uLiAgICAgQgorICAgIC4uLiAgICAgYworICAgIC4uLiAgICAgZAorICAgIC4uLiAgICAgZgorICAgIC4uLiAgICAgZworICAgIC4uLiAgICAgaAorICAgIC4uLiAgICAgJycnCisKKyAgICA+Pj4gIyBXaXRob3V0IHRoZSBmbGFnOgorICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDMsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcHJpbnQgJ1xuJy5qb2luKCdhYmNkZWZnJykKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgYQorICAgICAgICBCCisgICAgICAgIGMKKyAgICAgICAgZAorICAgICAgICBmCisgICAgICAgIGcKKyAgICAgICAgaAorICAgIEdvdDoKKyAgICAgICAgYQorICAgICAgICBiCisgICAgICAgIGMKKyAgICAgICAgZAorICAgICAgICBlCisgICAgICAgIGYKKyAgICAgICAgZworICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKKworICAgID4+PiAjIFdpdGggdGhlIGZsYWc6CisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5SRVBPUlRfVURJRkYKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMywgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCAnXG4nLmpvaW4oJ2FiY2RlZmcnKQorICAgIERpZmZlcmVuY2VzICh1bmlmaWVkIGRpZmYgd2l0aCAtZXhwZWN0ZWQgK2FjdHVhbCk6CisgICAgICAgIEBAIC0xLDcgKzEsNyBAQAorICAgICAgICAgYQorICAgICAgICAtQgorICAgICAgICArYgorICAgICAgICAgYworICAgICAgICAgZAorICAgICAgICArZQorICAgICAgICAgZgorICAgICAgICAgZworICAgICAgICAtaAorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKKworVGhlIFJFUE9SVF9DRElGRiBmbGFnIGNhdXNlcyBmYWlsdXJlcyB0aGF0IGludm9sdmUgbXVsdGktbGluZSBleHBlY3RlZAorYW5kIGFjdHVhbCBvdXRwdXRzIHRvIGJlIGRpc3BsYXllZCB1c2luZyBhIGNvbnRleHQgZGlmZjoKKworICAgID4+PiAjIFJldXNlIGYoKSBmcm9tIHRoZSBSRVBPUlRfVURJRkYgZXhhbXBsZSwgYWJvdmUuCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5SRVBPUlRfQ0RJRkYKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMywgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCAnXG4nLmpvaW4oJ2FiY2RlZmcnKQorICAgIERpZmZlcmVuY2VzIChjb250ZXh0IGRpZmYgd2l0aCBleHBlY3RlZCBmb2xsb3dlZCBieSBhY3R1YWwpOgorICAgICAgICAqKioqKioqKioqKioqKioKKyAgICAgICAgKioqIDEsNyAqKioqCisgICAgICAgICAgYQorICAgICAgICAhIEIKKyAgICAgICAgICBjCisgICAgICAgICAgZAorICAgICAgICAgIGYKKyAgICAgICAgICBnCisgICAgICAgIC0gaAorICAgICAgICAtLS0gMSw3IC0tLS0KKyAgICAgICAgICBhCisgICAgICAgICEgYgorICAgICAgICAgIGMKKyAgICAgICAgICBkCisgICAgICAgICsgZQorICAgICAgICAgIGYKKyAgICAgICAgICBnCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQorCisKK1RoZSBSRVBPUlRfTkRJRkYgZmxhZyBjYXVzZXMgZmFpbHVyZXMgdG8gdXNlIHRoZSBkaWZmbGliLkRpZmZlciBhbGdvcml0aG0KK3VzZWQgYnkgdGhlIHBvcHVsYXIgbmRpZmYucHkgdXRpbGl0eS4gIFRoaXMgZG9lcyBpbnRyYWxpbmUgZGlmZmVyZW5jZQorbWFya2luZywgYXMgd2VsbCBhcyBpbnRlcmxpbmUgZGlmZmVyZW5jZXMuCisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgImEgYiAgYyBkIGUgZiBnIGggaSAgIGogayBsIG0iCisgICAgLi4uICAgICBhIGIgYyBkIGUgZiBnIGggaSBqIGsgMSBtCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LlJFUE9SVF9ORElGRgorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSAzLCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50ICJhIGIgIGMgZCBlIGYgZyBoIGkgICBqIGsgbCBtIgorICAgIERpZmZlcmVuY2VzIChuZGlmZiB3aXRoIC1leHBlY3RlZCArYWN0dWFsKToKKyAgICAgICAgLSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgMSBtCisgICAgICAgID8gICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgKyBhIGIgIGMgZCBlIGYgZyBoIGkgICBqIGsgbCBtCisgICAgICAgID8gICAgICsgICAgICAgICAgICAgICsrICAgIF4KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTEpCisKK1RoZSBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIHN1cHByZXNzZXMgcmVzdWx0IG91dHB1dCBhZnRlciB0aGUgZmlyc3QKK2ZhaWxpbmcgZXhhbXBsZToKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBwcmludCAxICMgZmlyc3Qgc3VjY2VzcworICAgIC4uLiAgICAgMQorICAgIC4uLiAgICAgPj4+IHByaW50IDIgIyBmaXJzdCBmYWlsdXJlCisgICAgLi4uICAgICAyMDAKKyAgICAuLi4gICAgID4+PiBwcmludCAzICMgc2Vjb25kIGZhaWx1cmUKKyAgICAuLi4gICAgIDMwMAorICAgIC4uLiAgICAgPj4+IHByaW50IDQgIyBzZWNvbmQgc3VjY2VzcworICAgIC4uLiAgICAgNAorICAgIC4uLiAgICAgPj4+IHByaW50IDUgIyB0aGlyZCBmYWlsdXJlCisgICAgLi4uICAgICA1MDAKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBmbGFncyA9IGRvY3Rlc3QuUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IDIgIyBmaXJzdCBmYWlsdXJlCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIDIwMAorICAgIEdvdDoKKyAgICAgICAgMgorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0zLCBhdHRlbXB0ZWQ9NSkKKworSG93ZXZlciwgb3V0cHV0IGZyb20gYHJlcG9ydF9zdGFydGAgaXMgbm90IHN1cHByZXNzZWQ6CisKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9VHJ1ZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIFRyeWluZzoKKyAgICAgICAgcHJpbnQgMSAjIGZpcnN0IHN1Y2Nlc3MKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDEKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgcHJpbnQgMiAjIGZpcnN0IGZhaWx1cmUKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDIwMAorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IDIgIyBmaXJzdCBmYWlsdXJlCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIDIwMAorICAgIEdvdDoKKyAgICAgICAgMgorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0zLCBhdHRlbXB0ZWQ9NSkKKworRm9yIHRoZSBwdXJwb3NlcyBvZiBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFLCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMKK2NvdW50IGFzIGZhaWx1cmVzOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IHByaW50IDEgIyBmaXJzdCBzdWNjZXNzCisgICAgLi4uICAgICAxCisgICAgLi4uICAgICA+Pj4gcmFpc2UgVmFsdWVFcnJvcigyKSAjIGZpcnN0IGZhaWx1cmUKKyAgICAuLi4gICAgIDIwMAorICAgIC4uLiAgICAgPj4+IHByaW50IDMgIyBzZWNvbmQgZmFpbHVyZQorICAgIC4uLiAgICAgMzAwCisgICAgLi4uICAgICA+Pj4gcHJpbnQgNCAjIHNlY29uZCBzdWNjZXNzCisgICAgLi4uICAgICA0CisgICAgLi4uICAgICA+Pj4gcHJpbnQgNSAjIHRoaXJkIGZhaWx1cmUKKyAgICAuLi4gICAgIDUwMAorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5SRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlLCBvcHRpb25mbGFncz1mbGFncykucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDUsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigyKSAjIGZpcnN0IGZhaWx1cmUKKyAgICBFeGNlcHRpb24gcmFpc2VkOgorICAgICAgICAuLi4KKyAgICAgICAgVmFsdWVFcnJvcjogMgorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0zLCBhdHRlbXB0ZWQ9NSkKKworTmV3IG9wdGlvbiBmbGFncyBjYW4gYWxzbyBiZSByZWdpc3RlcmVkLCB2aWEgcmVnaXN0ZXJfb3B0aW9uZmxhZygpLiAgSGVyZQord2UgcmVhY2ggaW50byBkb2N0ZXN0J3MgaW50ZXJuYWxzIGEgYml0LgorCisgICAgPj4+IHVubGlrZWx5ID0gIlVOTElLRUxZX09QVElPTl9OQU1FIgorICAgID4+PiB1bmxpa2VseSBpbiBkb2N0ZXN0Lk9QVElPTkZMQUdTX0JZX05BTUUKKyAgICBGYWxzZQorICAgID4+PiBuZXdfZmxhZ192YWx1ZSA9IGRvY3Rlc3QucmVnaXN0ZXJfb3B0aW9uZmxhZyh1bmxpa2VseSkKKyAgICA+Pj4gdW5saWtlbHkgaW4gZG9jdGVzdC5PUFRJT05GTEFHU19CWV9OQU1FCisgICAgVHJ1ZQorCitCZWZvcmUgMi40LjQvMi41LCByZWdpc3RlcmluZyBhIG5hbWUgbW9yZSB0aGFuIG9uY2UgZXJyb25lb3VzbHkgY3JlYXRlZAorbW9yZSB0aGFuIG9uZSBmbGFnIHZhbHVlLiAgSGVyZSB3ZSB2ZXJpZnkgdGhhdCdzIGZpeGVkOgorCisgICAgPj4+IHJlZHVuZGFudF9mbGFnX3ZhbHVlID0gZG9jdGVzdC5yZWdpc3Rlcl9vcHRpb25mbGFnKHVubGlrZWx5KQorICAgID4+PiByZWR1bmRhbnRfZmxhZ192YWx1ZSA9PSBuZXdfZmxhZ192YWx1ZQorICAgIFRydWUKKworQ2xlYW4gdXAuCisgICAgPj4+IGRlbCBkb2N0ZXN0Lk9QVElPTkZMQUdTX0JZX05BTUVbdW5saWtlbHldCisKKyAgICAiIiIKKworICAgIGRlZiBvcHRpb25fZGlyZWN0aXZlcygpOiByIiIiCitUZXN0cyBvZiBgRG9jVGVzdFJ1bm5lcmAncyBvcHRpb24gZGlyZWN0aXZlIG1lY2hhbmlzbS4KKworT3B0aW9uIGRpcmVjdGl2ZXMgY2FuIGJlIHVzZWQgdG8gdHVybiBvcHRpb24gZmxhZ3Mgb24gb3Igb2ZmIGZvciBhCitzaW5nbGUgZXhhbXBsZS4gIFRvIHR1cm4gYW4gb3B0aW9uIG9uIGZvciBhbiBleGFtcGxlLCBmb2xsb3cgdGhhdAorZXhhbXBsZSB3aXRoIGEgY29tbWVudCBvZiB0aGUgZm9ybSBgYCMgZG9jdGVzdDogK09QVElPTmBgOgorCisgICAgPj4+IGRlZiBmKHgpOiByJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgcmFuZ2UoMTApICAgICAgICMgc2hvdWxkIGZhaWw6IG5vIGVsbGlwc2lzCisgICAgLi4uICAgICBbMCwgMSwgLi4uLCA5XQorICAgIC4uLgorICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKSAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIC4uLiAgICAgWzAsIDEsIC4uLiwgOV0KKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDIsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcHJpbnQgcmFuZ2UoMTApICAgICAgICMgc2hvdWxkIGZhaWw6IG5vIGVsbGlwc2lzCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIFswLCAxLCAuLi4sIDldCisgICAgR290OgorICAgICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK1RvIHR1cm4gYW4gb3B0aW9uIG9mZiBmb3IgYW4gZXhhbXBsZSwgZm9sbG93IHRoYXQgZXhhbXBsZSB3aXRoIGEKK2NvbW1lbnQgb2YgdGhlIGZvcm0gYGAjIGRvY3Rlc3Q6IC1PUFRJT05gYDoKKworICAgID4+PiBkZWYgZih4KTogcicnJworICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKQorICAgIC4uLiAgICAgWzAsIDEsIC4uLiwgOV0KKyAgICAuLi4KKyAgICAuLi4gICAgID4+PiAjIHNob3VsZCBmYWlsOiBubyBlbGxpcHNpcworICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKSAgICAgICAjIGRvY3Rlc3Q6IC1FTExJUFNJUworICAgIC4uLiAgICAgWzAsIDEsIC4uLiwgOV0KKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzPWRvY3Rlc3QuRUxMSVBTSVMpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA2LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IHJhbmdlKDEwKSAgICAgICAjIGRvY3Rlc3Q6IC1FTExJUFNJUworICAgIEV4cGVjdGVkOgorICAgICAgICBbMCwgMSwgLi4uLCA5XQorICAgIEdvdDoKKyAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCitPcHRpb24gZGlyZWN0aXZlcyBhZmZlY3Qgb25seSB0aGUgZXhhbXBsZSB0aGF0IHRoZXkgYXBwZWFyIHdpdGg7IHRoZXkKK2RvIG5vdCBjaGFuZ2UgdGhlIG9wdGlvbnMgZm9yIHN1cnJvdW5kaW5nIGV4YW1wbGVzOgorCisgICAgPj4+IGRlZiBmKHgpOiByJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgcmFuZ2UoMTApICAgICAgICMgU2hvdWxkIGZhaWw6IG5vIGVsbGlwc2lzCisgICAgLi4uICAgICBbMCwgMSwgLi4uLCA5XQorICAgIC4uLgorICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKSAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIC4uLiAgICAgWzAsIDEsIC4uLiwgOV0KKyAgICAuLi4KKyAgICAuLi4gICAgID4+PiBwcmludCByYW5nZSgxMCkgICAgICAgIyBTaG91bGQgZmFpbDogbm8gZWxsaXBzaXMKKyAgICAuLi4gICAgIFswLCAxLCAuLi4sIDldCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSAyLCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IHJhbmdlKDEwKSAgICAgICAjIFNob3VsZCBmYWlsOiBubyBlbGxpcHNpcworICAgIEV4cGVjdGVkOgorICAgICAgICBbMCwgMSwgLi4uLCA5XQorICAgIEdvdDoKKyAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDgsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcHJpbnQgcmFuZ2UoMTApICAgICAgICMgU2hvdWxkIGZhaWw6IG5vIGVsbGlwc2lzCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIFswLCAxLCAuLi4sIDldCisgICAgR290OgorICAgICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MiwgYXR0ZW1wdGVkPTMpCisKK011bHRpcGxlIG9wdGlvbnMgbWF5IGJlIG1vZGlmaWVkIGJ5IGEgc2luZ2xlIG9wdGlvbiBkaXJlY3RpdmUuICBUaGV5CittYXkgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UsIGNvbW1hcywgb3IgYm90aDoKKworICAgID4+PiBkZWYgZih4KTogcicnJworICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKSAgICAgICAjIFNob3VsZCBmYWlsCisgICAgLi4uICAgICBbMCwgMSwgIC4uLiwgICA5XQorICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKSAgICAgICAjIFNob3VsZCBzdWNjZWVkCisgICAgLi4uICAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMgK05PUk1BTElaRV9XSElURVNQQUNFCisgICAgLi4uICAgICBbMCwgMSwgIC4uLiwgICA5XQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMiwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCByYW5nZSgxMCkgICAgICAgIyBTaG91bGQgZmFpbAorICAgIEV4cGVjdGVkOgorICAgICAgICBbMCwgMSwgIC4uLiwgICA5XQorICAgIEdvdDoKKyAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCisgICAgPj4+IGRlZiBmKHgpOiByJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgcmFuZ2UoMTApICAgICAgICMgU2hvdWxkIGZhaWwKKyAgICAuLi4gICAgIFswLCAxLCAgLi4uLCAgIDldCisgICAgLi4uICAgICA+Pj4gcHJpbnQgcmFuZ2UoMTApICAgICAgICMgU2hvdWxkIHN1Y2NlZWQKKyAgICAuLi4gICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUywrTk9STUFMSVpFX1dISVRFU1BBQ0UKKyAgICAuLi4gICAgIFswLCAxLCAgLi4uLCAgIDldCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSAyLCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IHJhbmdlKDEwKSAgICAgICAjIFNob3VsZCBmYWlsCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIFswLCAxLCAgLi4uLCAgIDldCisgICAgR290OgorICAgICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKKyAgICA+Pj4gZGVmIGYoeCk6IHInJycKKyAgICAuLi4gICAgID4+PiBwcmludCByYW5nZSgxMCkgICAgICAgIyBTaG91bGQgZmFpbAorICAgIC4uLiAgICAgWzAsIDEsICAuLi4sICAgOV0KKyAgICAuLi4gICAgID4+PiBwcmludCByYW5nZSgxMCkgICAgICAgIyBTaG91bGQgc3VjY2VlZAorICAgIC4uLiAgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTLCArTk9STUFMSVpFX1dISVRFU1BBQ0UKKyAgICAuLi4gICAgIFswLCAxLCAgLi4uLCAgIDldCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSAyLCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IHJhbmdlKDEwKSAgICAgICAjIFNob3VsZCBmYWlsCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIFswLCAxLCAgLi4uLCAgIDldCisgICAgR290OgorICAgICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK1RoZSBvcHRpb24gZGlyZWN0aXZlIG1heSBiZSBwdXQgb24gdGhlIGxpbmUgZm9sbG93aW5nIHRoZSBzb3VyY2UsIGFzCitsb25nIGFzIGEgY29udGludWF0aW9uIHByb21wdCBpcyB1c2VkOgorCisgICAgPj4+IGRlZiBmKHgpOiByJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgcmFuZ2UoMTApCisgICAgLi4uICAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAuLi4gICAgIFswLCAxLCAuLi4sIDldCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKworRm9yIGV4YW1wbGVzIHdpdGggbXVsdGktbGluZSBzb3VyY2UsIHRoZSBvcHRpb24gZGlyZWN0aXZlIG1heSBhcHBlYXIKK2F0IHRoZSBlbmQgb2YgYW55IGxpbmU6CisKKyAgICA+Pj4gZGVmIGYoeCk6IHInJycKKyAgICAuLi4gICAgID4+PiBmb3IgeCBpbiByYW5nZSgxMCk6ICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgLi4uICAgICAuLi4gICAgIHByaW50IHgsCisgICAgLi4uICAgICAwIDEgMiAuLi4gOQorICAgIC4uLgorICAgIC4uLiAgICAgPj4+IGZvciB4IGluIHJhbmdlKDEwKToKKyAgICAuLi4gICAgIC4uLiAgICAgcHJpbnQgeCwgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgLi4uICAgICAwIDEgMiAuLi4gOQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisKK0lmIG1vcmUgdGhhbiBvbmUgbGluZSBvZiBhbiBleGFtcGxlIHdpdGggbXVsdGktbGluZSBzb3VyY2UgaGFzIGFuCitvcHRpb24gZGlyZWN0aXZlLCB0aGVuIHRoZXkgYXJlIGNvbWJpbmVkOgorCisgICAgPj4+IGRlZiBmKHgpOiByJycnCisgICAgLi4uICAgICBTaG91bGQgZmFpbCAob3B0aW9uIGRpcmVjdGl2ZSBub3Qgb24gdGhlIGxhc3QgbGluZSk6CisgICAgLi4uICAgICAgICAgPj4+IGZvciB4IGluIHJhbmdlKDEwKTogIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAuLi4gICAgICAgICAuLi4gICAgIHByaW50IHgsICAgICAgICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIC4uLiAgICAgICAgIDAgIDEgICAgMi4uLjkKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQorCitJdCBpcyBhbiBlcnJvciB0byBoYXZlIGEgY29tbWVudCBvZiB0aGUgZm9ybSBgYCMgZG9jdGVzdDpgYCB0aGF0IGlzCisqbm90KiBmb2xsb3dlZCBieSB3b3JkcyBvZiB0aGUgZm9ybSBgYCtPUFRJT05gYCBvciBgYC1PUFRJT05gYCwgd2hlcmUKK2BgT1BUSU9OYGAgaXMgYW4gb3B0aW9uIHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCB3aXRoCitgcmVnaXN0ZXJfb3B0aW9uYDoKKworICAgID4+PiAjIEVycm9yOiBPcHRpb24gbm90IHJlZ2lzdGVyZWQKKyAgICA+Pj4gcyA9ICc+Pj4gcHJpbnQgMTIgICAjZG9jdGVzdDogK0JBRE9QVElPTicKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpLmdldF9kb2N0ZXN0KHMsIHt9LCAncycsICdzLnB5JywgMCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVmFsdWVFcnJvcjogbGluZSAxIG9mIHRoZSBkb2N0ZXN0IGZvciBzIGhhcyBhbiBpbnZhbGlkIG9wdGlvbjogJytCQURPUFRJT04nCisKKyAgICA+Pj4gIyBFcnJvcjogTm8gKyBvciAtIHByZWZpeAorICAgID4+PiBzID0gJz4+PiBwcmludCAxMiAgICNkb2N0ZXN0OiBFTExJUFNJUycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpLmdldF9kb2N0ZXN0KHMsIHt9LCAncycsICdzLnB5JywgMCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVmFsdWVFcnJvcjogbGluZSAxIG9mIHRoZSBkb2N0ZXN0IGZvciBzIGhhcyBhbiBpbnZhbGlkIG9wdGlvbjogJ0VMTElQU0lTJworCitJdCBpcyBhbiBlcnJvciB0byB1c2UgYW4gb3B0aW9uIGRpcmVjdGl2ZSBvbiBhIGxpbmUgdGhhdCBjb250YWlucyBubworc291cmNlOgorCisgICAgPj4+IHMgPSAnPj4+ICMgZG9jdGVzdDogK0VMTElQU0lTJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0UGFyc2VyKCkuZ2V0X2RvY3Rlc3Qocywge30sICdzJywgJ3MucHknLCAwKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiBsaW5lIDAgb2YgdGhlIGRvY3Rlc3QgZm9yIHMgaGFzIGFuIG9wdGlvbiBkaXJlY3RpdmUgb24gYSBsaW5lIHdpdGggbm8gZXhhbXBsZTogJyMgZG9jdGVzdDogK0VMTElQU0lTJworCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF91bmljb2RlX291dHB1dChzZWxmKTogciIiIgorCitDaGVjayB0aGF0IHVuaWNvZGUgb3V0cHV0IHdvcmtzOgorCisgICAgPj4+IHUnXHhlOScKKyAgICB1J1x4ZTknCisKK0lmIHdlIHJldHVybiB1bmljb2RlLCBTcG9vZk91dCdzIGJ1ZiB2YXJpYWJsZSBiZWNvbWVzIGF1dG9tYWdpY2FsbHkKK2NvbnZlcnRlZCB0byB1bmljb2RlLiBUaGlzIG1lYW5zIGFsbCBzdWJzZXF1ZW50IG91dHB1dCBiZWNvbWVzIGNvbnZlcnRlZAordG8gdW5pY29kZSwgYW5kIGlmIHRoZSBvdXRwdXQgY29udGFpbnMgbm9uLWFzY2lpIGNoYXJhY3RlcnMgdGhhdCBmYWlsZWQuCitJdCB1c2VkIHRvIGJlIHRoYXQgdGhpcyBzdGF0ZSBjaGFuZ2UgY2FycmllZCBvbiBiZXR3ZWVuIHRlc3RzLCBtZWFuaW5nCit0ZXN0cyB3b3VsZCBmYWlsIGlmIHVuaWNvZGUgaGFzIGJlZW4gb3V0cHV0IHByZXZpb3VzbHkgaW4gdGhlIHRlc3RydW4uCitUaGlzIHRlc3QgdGVzdHMgdGhhdCB0aGlzIGlzIG5vIGxvbmdlciBzbzoKKworICAgID4+PiBwcmludCB1J2FiYycKKyAgICBhYmMKKworQW5kIHRoZW4gcmV0dXJuIGEgc3RyaW5nIHdpdGggbm9uLWFzY2lpIGNoYXJhY3RlcnM6CisKKyAgICA+Pj4gcHJpbnQgdSdceGU5Jy5lbmNvZGUoJ3V0Zi04JykKKyAgICDDqQorCisgICAgIiIiCisKKworZGVmIHRlc3RfdGVzdHNvdXJjZSgpOiByIiIiCitVbml0IHRlc3RzIGZvciBgdGVzdHNvdXJjZSgpYC4KKworVGhlIHRlc3Rzb3VyY2UoKSBmdW5jdGlvbiB0YWtlcyBhIG1vZHVsZSBhbmQgYSBuYW1lLCBmaW5kcyB0aGUgKGZpcnN0KQordGVzdCB3aXRoIHRoYXQgbmFtZSBpbiB0aGF0IG1vZHVsZSwgYW5kIGNvbnZlcnRzIGl0IHRvIGEgc2NyaXB0LiBUaGUKK2V4YW1wbGUgY29kZSBpcyBjb252ZXJ0ZWQgdG8gcmVndWxhciBQeXRob24gY29kZS4gIFRoZSBzdXJyb3VuZGluZword29yZHMgYW5kIGV4cGVjdGVkIG91dHB1dCBhcmUgY29udmVydGVkIHRvIGNvbW1lbnRzOgorCisgICAgPj4+IGltcG9ydCB0ZXN0LnRlc3RfZG9jdGVzdAorICAgID4+PiBuYW1lID0gJ3Rlc3QudGVzdF9kb2N0ZXN0LnNhbXBsZV9mdW5jJworICAgID4+PiBwcmludCBkb2N0ZXN0LnRlc3Rzb3VyY2UodGVzdC50ZXN0X2RvY3Rlc3QsIG5hbWUpCisgICAgIyBCbGFoIGJsYWgKKyAgICAjCisgICAgcHJpbnQgc2FtcGxlX2Z1bmMoMjIpCisgICAgIyBFeHBlY3RlZDoKKyAgICAjIyA0NAorICAgICMKKyAgICAjIFllZSBoYSEKKyAgICA8QkxBTktMSU5FPgorCisgICAgPj4+IG5hbWUgPSAndGVzdC50ZXN0X2RvY3Rlc3QuU2FtcGxlTmV3U3R5bGVDbGFzcycKKyAgICA+Pj4gcHJpbnQgZG9jdGVzdC50ZXN0c291cmNlKHRlc3QudGVzdF9kb2N0ZXN0LCBuYW1lKQorICAgIHByaW50ICcxXG4yXG4zJworICAgICMgRXhwZWN0ZWQ6CisgICAgIyMgMQorICAgICMjIDIKKyAgICAjIyAzCisgICAgPEJMQU5LTElORT4KKworICAgID4+PiBuYW1lID0gJ3Rlc3QudGVzdF9kb2N0ZXN0LlNhbXBsZUNsYXNzLmFfY2xhc3NtZXRob2QnCisgICAgPj4+IHByaW50IGRvY3Rlc3QudGVzdHNvdXJjZSh0ZXN0LnRlc3RfZG9jdGVzdCwgbmFtZSkKKyAgICBwcmludCBTYW1wbGVDbGFzcy5hX2NsYXNzbWV0aG9kKDEwKQorICAgICMgRXhwZWN0ZWQ6CisgICAgIyMgMTIKKyAgICBwcmludCBTYW1wbGVDbGFzcygwKS5hX2NsYXNzbWV0aG9kKDEwKQorICAgICMgRXhwZWN0ZWQ6CisgICAgIyMgMTIKKyAgICA8QkxBTktMSU5FPgorIiIiCisKK2RlZiB0ZXN0X2RlYnVnKCk6IHIiIiIKKworQ3JlYXRlIGEgZG9jc3RyaW5nIHRoYXQgd2Ugd2FudCB0byBkZWJ1ZzoKKworICAgID4+PiBzID0gJycnCisgICAgLi4uICAgICA+Pj4geCA9IDEyCisgICAgLi4uICAgICA+Pj4gcHJpbnQgeAorICAgIC4uLiAgICAgMTIKKyAgICAuLi4gICAgICcnJworCitDcmVhdGUgc29tZSBmYWtlIHN0ZGluIGlucHV0LCB0byBmZWVkIHRvIHRoZSBkZWJ1Z2dlcjoKKworICAgID4+PiBpbXBvcnQgdGVtcGZpbGUKKyAgICA+Pj4gcmVhbF9zdGRpbiA9IHN5cy5zdGRpbgorICAgID4+PiBzeXMuc3RkaW4gPSBfRmFrZUlucHV0KFsnbmV4dCcsICdwcmludCB4JywgJ2NvbnRpbnVlJ10pCisKK1J1biB0aGUgZGVidWdnZXIgb24gdGhlIGRvY3N0cmluZywgYW5kIHRoZW4gcmVzdG9yZSBzeXMuc3RkaW4uCisKKyAgICA+Pj4gdHJ5OiBkb2N0ZXN0LmRlYnVnX3NyYyhzKQorICAgIC4uLiBmaW5hbGx5OiBzeXMuc3RkaW4gPSByZWFsX3N0ZGluCisgICAgPiA8c3RyaW5nPigxKTxtb2R1bGU+KCkKKyAgICAoUGRiKSBuZXh0CisgICAgMTIKKyAgICAtLVJldHVybi0tCisgICAgPiA8c3RyaW5nPigxKTxtb2R1bGU+KCktPk5vbmUKKyAgICAoUGRiKSBwcmludCB4CisgICAgMTIKKyAgICAoUGRiKSBjb250aW51ZQorCisiIiIKKworZGVmIHRlc3RfcGRiX3NldF90cmFjZSgpOgorICAgICIiIlVzaW5nIHBkYi5zZXRfdHJhY2UgZnJvbSBhIGRvY3Rlc3QuCisKKyAgICBZb3UgY2FuIHVzZSBwZGIuc2V0X3RyYWNlIGZyb20gYSBkb2N0ZXN0LiAgVG8gZG8gc28sIHlvdSBtdXN0CisgICAgcmV0cmlldmUgdGhlIHNldF90cmFjZSBmdW5jdGlvbiBmcm9tIHRoZSBwZGIgbW9kdWxlIGF0IHRoZSB0aW1lCisgICAgeW91IHVzZSBpdC4gIFRoZSBkb2N0ZXN0IG1vZHVsZSBjaGFuZ2VzIHN5cy5zdGRvdXQgc28gdGhhdCBpdCBjYW4KKyAgICBjYXB0dXJlIHByb2dyYW0gb3V0cHV0LiAgSXQgYWxzbyB0ZW1wb3JhcmlseSByZXBsYWNlcyBwZGIuc2V0X3RyYWNlCisgICAgd2l0aCBhIHZlcnNpb24gdGhhdCByZXN0b3JlcyBzdGRvdXQuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgeW91IHRvCisgICAgc2VlIGRlYnVnZ2VyIG91dHB1dC4KKworICAgICAgPj4+IGRvYyA9ICcnJworICAgICAgLi4uID4+PiB4ID0gNDIKKyAgICAgIC4uLiA+Pj4gcmFpc2UgRXhjZXB0aW9uKCdjbMOpJykKKyAgICAgIC4uLiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4gRXhjZXB0aW9uOiBjbMOpCisgICAgICAuLi4gPj4+IGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQorICAgICAgLi4uICcnJworICAgICAgPj4+IHBhcnNlciA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpCisgICAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIHt9LCAiZm9vLWLDpHJAYmF6IiwgImZvby1iw6RyQGJhei5weSIsIDApCisgICAgICA+Pj4gcnVubmVyID0gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpCisKKyAgICBUbyBkZW1vbnN0cmF0ZSB0aGlzLCB3ZSdsbCBjcmVhdGUgYSBmYWtlIHN0YW5kYXJkIGlucHV0IHRoYXQKKyAgICBjYXB0dXJlcyBvdXIgZGVidWdnZXIgaW5wdXQ6CisKKyAgICAgID4+PiBpbXBvcnQgdGVtcGZpbGUKKyAgICAgID4+PiByZWFsX3N0ZGluID0gc3lzLnN0ZGluCisgICAgICA+Pj4gc3lzLnN0ZGluID0gX0Zha2VJbnB1dChbCisgICAgICAuLi4gICAgJ3ByaW50IHgnLCAgIyBwcmludCBkYXRhIGRlZmluZWQgYnkgdGhlIGV4YW1wbGUKKyAgICAgIC4uLiAgICAnY29udGludWUnLCAjIHN0b3AgZGVidWdnaW5nCisgICAgICAuLi4gICAgJyddKQorCisgICAgICA+Pj4gdHJ5OiBydW5uZXIucnVuKHRlc3QpCisgICAgICAuLi4gZmluYWxseTogc3lzLnN0ZGluID0gcmVhbF9zdGRpbgorICAgICAgLS1SZXR1cm4tLQorICAgICAgPiA8ZG9jdGVzdCBmb28tYsOkckBiYXpbMl0+KDEpPG1vZHVsZT4oKS0+Tm9uZQorICAgICAgLT4gaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCisgICAgICAoUGRiKSBwcmludCB4CisgICAgICA0MgorICAgICAgKFBkYikgY29udGludWUKKyAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MykKKworICAgICAgWW91IGNhbiBhbHNvIHB1dCBwZGIuc2V0X3RyYWNlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gYSB0ZXN0OgorCisgICAgICA+Pj4gZGVmIGNhbGxzX3NldF90cmFjZSgpOgorICAgICAgLi4uICAgIHk9MgorICAgICAgLi4uICAgIGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQorCisgICAgICA+Pj4gZG9jID0gJycnCisgICAgICAuLi4gPj4+IHg9MQorICAgICAgLi4uID4+PiBjYWxsc19zZXRfdHJhY2UoKQorICAgICAgLi4uICcnJworICAgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCBnbG9iYWxzKCksICJmb28tYsOkckBiYXoiLCAiZm9vLWLDpHJAYmF6LnB5IiwgMCkKKyAgICAgID4+PiByZWFsX3N0ZGluID0gc3lzLnN0ZGluCisgICAgICA+Pj4gc3lzLnN0ZGluID0gX0Zha2VJbnB1dChbCisgICAgICAuLi4gICAgJ3ByaW50IHknLCAgIyBwcmludCBkYXRhIGRlZmluZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgICAuLi4gICAgJ3VwJywgICAgICAgIyBvdXQgb2YgZnVuY3Rpb24KKyAgICAgIC4uLiAgICAncHJpbnQgeCcsICAjIHByaW50IGRhdGEgZGVmaW5lZCBieSB0aGUgZXhhbXBsZQorICAgICAgLi4uICAgICdjb250aW51ZScsICMgc3RvcCBkZWJ1Z2dpbmcKKyAgICAgIC4uLiAgICAnJ10pCisKKyAgICAgID4+PiB0cnk6CisgICAgICAuLi4gICAgIHJ1bm5lci5ydW4odGVzdCkKKyAgICAgIC4uLiBmaW5hbGx5OgorICAgICAgLi4uICAgICBzeXMuc3RkaW4gPSByZWFsX3N0ZGluCisgICAgICAtLVJldHVybi0tCisgICAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZVs4XT4oMyljYWxsc19zZXRfdHJhY2UoKS0+Tm9uZQorICAgICAgLT4gaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCisgICAgICAoUGRiKSBwcmludCB5CisgICAgICAyCisgICAgICAoUGRiKSB1cAorICAgICAgPiA8ZG9jdGVzdCBmb28tYsOkckBiYXpbMV0+KDEpPG1vZHVsZT4oKQorICAgICAgLT4gY2FsbHNfc2V0X3RyYWNlKCkKKyAgICAgIChQZGIpIHByaW50IHgKKyAgICAgIDEKKyAgICAgIChQZGIpIGNvbnRpbnVlCisgICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisKKyAgICBEdXJpbmcgaW50ZXJhY3RpdmUgZGVidWdnaW5nLCBzb3VyY2UgY29kZSBpcyBzaG93biwgZXZlbiBmb3IKKyAgICBkb2N0ZXN0IGV4YW1wbGVzOgorCisgICAgICA+Pj4gZG9jID0gJycnCisgICAgICAuLi4gPj4+IGRlZiBmKHgpOgorICAgICAgLi4uIC4uLiAgICAgZyh4KjIpCisgICAgICAuLi4gPj4+IGRlZiBnKHgpOgorICAgICAgLi4uIC4uLiAgICAgcHJpbnQgeCszCisgICAgICAuLi4gLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKKyAgICAgIC4uLiA+Pj4gZigzKQorICAgICAgLi4uICcnJworICAgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCBnbG9iYWxzKCksICJmb28tYsOkckBiYXoiLCAiZm9vLWLDpHJAYmF6LnB5IiwgMCkKKyAgICAgID4+PiByZWFsX3N0ZGluID0gc3lzLnN0ZGluCisgICAgICA+Pj4gc3lzLnN0ZGluID0gX0Zha2VJbnB1dChbCisgICAgICAuLi4gICAgJ2xpc3QnLCAgICAgIyBsaXN0IHNvdXJjZSBmcm9tIGV4YW1wbGUgMgorICAgICAgLi4uICAgICduZXh0JywgICAgICMgcmV0dXJuIGZyb20gZygpCisgICAgICAuLi4gICAgJ2xpc3QnLCAgICAgIyBsaXN0IHNvdXJjZSBmcm9tIGV4YW1wbGUgMQorICAgICAgLi4uICAgICduZXh0JywgICAgICMgcmV0dXJuIGZyb20gZigpCisgICAgICAuLi4gICAgJ2xpc3QnLCAgICAgIyBsaXN0IHNvdXJjZSBmcm9tIGV4YW1wbGUgMworICAgICAgLi4uICAgICdjb250aW51ZScsICMgc3RvcCBkZWJ1Z2dpbmcKKyAgICAgIC4uLiAgICAnJ10pCisgICAgICA+Pj4gdHJ5OiBydW5uZXIucnVuKHRlc3QpCisgICAgICAuLi4gZmluYWxseTogc3lzLnN0ZGluID0gcmVhbF9zdGRpbgorICAgICAgLi4uICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCisgICAgICAtLVJldHVybi0tCisgICAgICA+IDxkb2N0ZXN0IGZvby1iw6RyQGJhelsxXT4oMylnKCktPk5vbmUKKyAgICAgIC0+IGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQorICAgICAgKFBkYikgbGlzdAorICAgICAgICAxICAgICBkZWYgZyh4KToKKyAgICAgICAgMiAgICAgICAgIHByaW50IHgrMworICAgICAgICAzICAtPiAgICAgaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCisgICAgICBbRU9GXQorICAgICAgKFBkYikgbmV4dAorICAgICAgLS1SZXR1cm4tLQorICAgICAgPiA8ZG9jdGVzdCBmb28tYsOkckBiYXpbMF0+KDIpZigpLT5Ob25lCisgICAgICAtPiBnKHgqMikKKyAgICAgIChQZGIpIGxpc3QKKyAgICAgICAgMSAgICAgZGVmIGYoeCk6CisgICAgICAgIDIgIC0+ICAgICBnKHgqMikKKyAgICAgIFtFT0ZdCisgICAgICAoUGRiKSBuZXh0CisgICAgICAtLVJldHVybi0tCisgICAgICA+IDxkb2N0ZXN0IGZvby1iw6RyQGJhelsyXT4oMSk8bW9kdWxlPigpLT5Ob25lCisgICAgICAtPiBmKDMpCisgICAgICAoUGRiKSBsaXN0CisgICAgICAgIDEgIC0+IGYoMykKKyAgICAgIFtFT0ZdCisgICAgICAoUGRiKSBjb250aW51ZQorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgRmlsZSAiZm9vLWLDpHJAYmF6LnB5IiwgbGluZSA3LCBpbiBmb28tYsOkckBiYXoKKyAgICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAgIGYoMykKKyAgICAgIEV4cGVjdGVkIG5vdGhpbmcKKyAgICAgIEdvdDoKKyAgICAgICAgICA5CisgICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTMpCisgICAgICAiIiIKKworZGVmIHRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWQoKToKKyAgICAiIiJUaGlzIGlsbHVzdHJhdGVzIG1vcmUtZGVtYW5kaW5nIHVzZSBvZiBzZXRfdHJhY2Ugd2l0aCBuZXN0ZWQgZnVuY3Rpb25zLgorCisgICAgPj4+IGNsYXNzIEMob2JqZWN0KToKKyAgICAuLi4gICAgIGRlZiBjYWxsc19zZXRfdHJhY2Uoc2VsZik6CisgICAgLi4uICAgICAgICAgeSA9IDEKKyAgICAuLi4gICAgICAgICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgICAgICBzZWxmLmYxKCkKKyAgICAuLi4gICAgICAgICB5ID0gMgorICAgIC4uLiAgICAgZGVmIGYxKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHggPSAxCisgICAgLi4uICAgICAgICAgc2VsZi5mMigpCisgICAgLi4uICAgICAgICAgeCA9IDIKKyAgICAuLi4gICAgIGRlZiBmMihzZWxmKToKKyAgICAuLi4gICAgICAgICB6ID0gMQorICAgIC4uLiAgICAgICAgIHogPSAyCisKKyAgICA+Pj4gY2FsbHNfc2V0X3RyYWNlID0gQygpLmNhbGxzX3NldF90cmFjZQorCisgICAgPj4+IGRvYyA9ICcnJworICAgIC4uLiA+Pj4gYSA9IDEKKyAgICAuLi4gPj4+IGNhbGxzX3NldF90cmFjZSgpCisgICAgLi4uICcnJworICAgID4+PiBwYXJzZXIgPSBkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIoKQorICAgID4+PiBydW5uZXIgPSBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkKKyAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIGdsb2JhbHMoKSwgImZvby1iw6RyQGJheiIsICJmb28tYsOkckBiYXoucHkiLCAwKQorICAgID4+PiByZWFsX3N0ZGluID0gc3lzLnN0ZGluCisgICAgPj4+IHN5cy5zdGRpbiA9IF9GYWtlSW5wdXQoWworICAgIC4uLiAgICAncHJpbnQgeScsICAjIHByaW50IGRhdGEgZGVmaW5lZCBpbiB0aGUgZnVuY3Rpb24KKyAgICAuLi4gICAgJ3N0ZXAnLCAnc3RlcCcsICdzdGVwJywgJ3N0ZXAnLCAnc3RlcCcsICdzdGVwJywgJ3ByaW50IHonLAorICAgIC4uLiAgICAndXAnLCAncHJpbnQgeCcsCisgICAgLi4uICAgICd1cCcsICdwcmludCB5JywKKyAgICAuLi4gICAgJ3VwJywgJ3ByaW50IGZvbycsCisgICAgLi4uICAgICdjb250aW51ZScsICMgc3RvcCBkZWJ1Z2dpbmcKKyAgICAuLi4gICAgJyddKQorCisgICAgPj4+IHRyeToKKyAgICAuLi4gICAgIHJ1bm5lci5ydW4odGVzdCkKKyAgICAuLi4gZmluYWxseToKKyAgICAuLi4gICAgIHN5cy5zdGRpbiA9IHJlYWxfc3RkaW4KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWRbMF0+KDUpY2FsbHNfc2V0X3RyYWNlKCkKKyAgICAtPiBzZWxmLmYxKCkKKyAgICAoUGRiKSBwcmludCB5CisgICAgMQorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X2RvY3Rlc3QudGVzdF9wZGJfc2V0X3RyYWNlX25lc3RlZFswXT4oNylmMSgpCisgICAgLT4gZGVmIGYxKHNlbGYpOgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWRbMF0+KDgpZjEoKQorICAgIC0+IHggPSAxCisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X2RvY3Rlc3QudGVzdF9wZGJfc2V0X3RyYWNlX25lc3RlZFswXT4oOSlmMSgpCisgICAgLT4gc2VsZi5mMigpCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfZG9jdGVzdC50ZXN0X3BkYl9zZXRfdHJhY2VfbmVzdGVkWzBdPigxMSlmMigpCisgICAgLT4gZGVmIGYyKHNlbGYpOgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWRbMF0+KDEyKWYyKCkKKyAgICAtPiB6ID0gMQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWRbMF0+KDEzKWYyKCkKKyAgICAtPiB6ID0gMgorICAgIChQZGIpIHByaW50IHoKKyAgICAxCisgICAgKFBkYikgdXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWRbMF0+KDkpZjEoKQorICAgIC0+IHNlbGYuZjIoKQorICAgIChQZGIpIHByaW50IHgKKyAgICAxCisgICAgKFBkYikgdXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWRbMF0+KDUpY2FsbHNfc2V0X3RyYWNlKCkKKyAgICAtPiBzZWxmLmYxKCkKKyAgICAoUGRiKSBwcmludCB5CisgICAgMQorICAgIChQZGIpIHVwCisgICAgPiA8ZG9jdGVzdCBmb28tYsOkckBiYXpbMV0+KDEpPG1vZHVsZT4oKQorICAgIC0+IGNhbGxzX3NldF90cmFjZSgpCisgICAgKFBkYikgcHJpbnQgZm9vCisgICAgKioqIE5hbWVFcnJvcjogbmFtZSAnZm9vJyBpcyBub3QgZGVmaW5lZAorICAgIChQZGIpIGNvbnRpbnVlCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorIiIiCisKK2RlZiB0ZXN0X0RvY1Rlc3RTdWl0ZSgpOgorICAgICIiIkRvY1Rlc3RTdWl0ZSBjcmVhdGVzIGEgdW5pdHRlc3QgdGVzdCBzdWl0ZSBmcm9tIGEgZG9jdGVzdC4KKworICAgICAgIFdlIGNyZWF0ZSBhIFN1aXRlIGJ5IHByb3ZpZGluZyBhIG1vZHVsZS4gIEEgbW9kdWxlIGNhbiBiZSBwcm92aWRlZAorICAgICAgIGJ5IHBhc3NpbmcgYSBtb2R1bGUgb2JqZWN0OgorCisgICAgICAgICA+Pj4gaW1wb3J0IHVuaXR0ZXN0CisgICAgICAgICA+Pj4gaW1wb3J0IHRlc3Quc2FtcGxlX2RvY3Rlc3QKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKHRlc3Quc2FtcGxlX2RvY3Rlc3QpCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz00PgorCisgICAgICAgV2UgY2FuIGFsc28gc3VwcGx5IHRoZSBtb2R1bGUgYnkgbmFtZToKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3QnKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KKworICAgICAgIFRoZSBtb2R1bGUgbmVlZCBub3QgY29udGFpbiBhbnkgZG9jdGVzdCBleGFtcGxlczoKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jdGVzdHMnKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTAgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKworICAgICAgIEhvd2V2ZXIsIGlmIERvY1Rlc3RTdWl0ZSBmaW5kcyBubyBkb2NzdHJpbmdzLCBpdCByYWlzZXMgYW4gZXJyb3I6CisKKyAgICAgICAgID4+PiB0cnk6CisgICAgICAgICAuLi4gICAgIGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0X25vX2RvY3N0cmluZ3MnKQorICAgICAgICAgLi4uIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAuLi4gICAgIGVycm9yID0gZQorCisgICAgICAgICA+Pj4gcHJpbnQoZXJyb3IuYXJnc1sxXSkKKyAgICAgICAgIGhhcyBubyBkb2NzdHJpbmdzCisKKyAgICAgICBZb3UgY2FuIHByZXZlbnQgdGhpcyBlcnJvciBieSBwYXNzaW5nIGEgRG9jVGVzdEZpbmRlciBpbnN0YW5jZSB3aXRoCisgICAgICAgdGhlIGBleGNsdWRlX2VtcHR5YCBrZXl3b3JkIGFyZ3VtZW50IHNldCB0byBGYWxzZToKKworICAgICAgICAgPj4+IGZpbmRlciA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcihleGNsdWRlX2VtcHR5PUZhbHNlKQorICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jc3RyaW5ncycsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2ZpbmRlcj1maW5kZXIpCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MCBlcnJvcnM9MCBmYWlsdXJlcz0wPgorCisgICAgICAgV2UgY2FuIHVzZSB0aGUgY3VycmVudCBtb2R1bGU6CisKKyAgICAgICAgID4+PiBzdWl0ZSA9IHRlc3Quc2FtcGxlX2RvY3Rlc3QudGVzdF9zdWl0ZSgpCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz00PgorCisgICAgICAgV2UgY2FuIHN1cHBseSBnbG9iYWwgdmFyaWFibGVzLiAgSWYgd2UgcGFzcyBnbG9icywgdGhleSB3aWxsIGJlCisgICAgICAgdXNlZCBpbnN0ZWFkIG9mIHRoZSBtb2R1bGUgZ2xvYmFscy4gIEhlcmUgd2UnbGwgcGFzcyBhbiBlbXB0eQorICAgICAgIGdsb2JhbHMsIHRyaWdnZXJpbmcgYW4gZXh0cmEgZXJyb3I6CisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JywgZ2xvYnM9e30pCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz01PgorCisgICAgICAgQWx0ZXJuYXRpdmVseSwgd2UgY2FuIHByb3ZpZGUgZXh0cmEgZ2xvYmFscy4gIEhlcmUgd2UnbGwgbWFrZSBhbgorICAgICAgIGVycm9yIGdvIGF3YXkgYnkgcHJvdmlkaW5nIGFuIGV4dHJhIGdsb2JhbCB2YXJpYWJsZToKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3QnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFnbG9icz17J3knOiAxfSkKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTM+CisKKyAgICAgICBZb3UgY2FuIHBhc3Mgb3B0aW9uIGZsYWdzLiAgSGVyZSB3ZSdsbCBjYXVzZSBhbiBleHRyYSBlcnJvcgorICAgICAgIGJ5IGRpc2FibGluZyB0aGUgYmxhbmstbGluZSBmZWF0dXJlOgorCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uZmxhZ3M9ZG9jdGVzdC5ET05UX0FDQ0VQVF9CTEFOS0xJTkUpCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz01PgorCisgICAgICAgWW91IGNhbiBzdXBwbHkgc2V0VXAgYW5kIHRlYXJEb3duIGZ1bmN0aW9uczoKKworICAgICAgICAgPj4+IGRlZiBzZXRVcCh0KToKKyAgICAgICAgIC4uLiAgICAgaW1wb3J0IHRlc3QudGVzdF9kb2N0ZXN0CisgICAgICAgICAuLi4gICAgIHRlc3QudGVzdF9kb2N0ZXN0LnNpbGx5U2V0dXAgPSBUcnVlCisKKyAgICAgICAgID4+PiBkZWYgdGVhckRvd24odCk6CisgICAgICAgICAuLi4gICAgIGltcG9ydCB0ZXN0LnRlc3RfZG9jdGVzdAorICAgICAgICAgLi4uICAgICBkZWwgdGVzdC50ZXN0X2RvY3Rlc3Quc2lsbHlTZXR1cAorCisgICAgICAgSGVyZSwgd2UgaW5zdGFsbGVkIGEgc2lsbHkgdmFyaWFibGUgdGhhdCB0aGUgdGVzdCBleHBlY3RzOgorCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdCcsCisgICAgICAgICAuLi4gICAgICBzZXRVcD1zZXRVcCwgdGVhckRvd249dGVhckRvd24pCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz0zPgorCisgICAgICAgQnV0IHRoZSB0ZWFyRG93biByZXN0b3JlcyBzYW5pdHk6CisKKyAgICAgICAgID4+PiBpbXBvcnQgdGVzdC50ZXN0X2RvY3Rlc3QKKyAgICAgICAgID4+PiB0ZXN0LnRlc3RfZG9jdGVzdC5zaWxseVNldHVwCisgICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgICAuLi4KKyAgICAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2lsbHlTZXR1cCcKKworICAgICAgIFRoZSBzZXRVcCBhbmQgdGVhckRvd24gZnVudGlvbnMgYXJlIHBhc3NlZCB0ZXN0IG9iamVjdHMuIEhlcmUKKyAgICAgICB3ZSdsbCB1c2UgdGhlIHNldFVwIGZ1bmN0aW9uIHRvIHN1cHBseSB0aGUgbWlzc2luZyB2YXJpYWJsZSB5OgorCisgICAgICAgICA+Pj4gZGVmIHNldFVwKHRlc3QpOgorICAgICAgICAgLi4uICAgICB0ZXN0Lmdsb2JzWyd5J10gPSAxCisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0Jywgc2V0VXA9c2V0VXApCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz0zPgorCisgICAgICAgSGVyZSwgd2UgZGlkbid0IG5lZWQgdG8gdXNlIGEgdGVhckRvd24gZnVuY3Rpb24gYmVjYXVzZSB3ZQorICAgICAgIG1vZGlmaWVkIHRoZSB0ZXN0IGdsb2JhbHMsIHdoaWNoIGFyZSBhIGNvcHkgb2YgdGhlCisgICAgICAgc2FtcGxlX2RvY3Rlc3QgbW9kdWxlIGRpY3Rpb25hcnkuICBUaGUgdGVzdCBnbG9iYWxzIGFyZQorICAgICAgIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBmb3IgdXMgYWZ0ZXIgYSB0ZXN0LgorICAgICAgICIiIgorCitkZWYgdGVzdF9Eb2NGaWxlU3VpdGUoKToKKyAgICAiIiJXZSBjYW4gdGVzdCB0ZXN0cyBmb3VuZCBpbiB0ZXh0IGZpbGVzIHVzaW5nIGEgRG9jRmlsZVN1aXRlLgorCisgICAgICAgV2UgY3JlYXRlIGEgc3VpdGUgYnkgcHJvdmlkaW5nIHRoZSBuYW1lcyBvZiBvbmUgb3IgbW9yZSB0ZXh0CisgICAgICAgZmlsZXMgdGhhdCBpbmNsdWRlIGV4YW1wbGVzOgorCisgICAgICAgICA+Pj4gaW1wb3J0IHVuaXR0ZXN0CisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgndGVzdF9kb2N0ZXN0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0Mi50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JykKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTM+CisKKyAgICAgICBUaGUgdGVzdCBmaWxlcyBhcmUgbG9va2VkIGZvciBpbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisgICAgICAgY2FsbGluZyBtb2R1bGUuICBBIHBhY2thZ2Uga2V5d29yZCBhcmd1bWVudCBjYW4gYmUgcHJvdmlkZWQgdG8KKyAgICAgICBzcGVjaWZ5IGEgZGlmZmVyZW50IHJlbGF0aXZlIGxvY2F0aW9uLgorCisgICAgICAgICA+Pj4gaW1wb3J0IHVuaXR0ZXN0CisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgndGVzdF9kb2N0ZXN0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0Mi50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9J3Rlc3QnKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KKworICAgICAgIFN1cHBvcnQgZm9yIHVzaW5nIGEgcGFja2FnZSdzIF9fbG9hZGVyX18uZ2V0X2RhdGEoKSBpcyBhbHNvCisgICAgICAgcHJvdmlkZWQuCisKKyAgICAgICAgID4+PiBpbXBvcnQgdW5pdHRlc3QsIHBrZ3V0aWwsIHRlc3QKKyAgICAgICAgID4+PiBhZGRlZF9sb2FkZXIgPSBGYWxzZQorICAgICAgICAgPj4+IGlmIG5vdCBoYXNhdHRyKHRlc3QsICdfX2xvYWRlcl9fJyk6CisgICAgICAgICAuLi4gICAgIHRlc3QuX19sb2FkZXJfXyA9IHBrZ3V0aWwuZ2V0X2xvYWRlcih0ZXN0KQorICAgICAgICAgLi4uICAgICBhZGRlZF9sb2FkZXIgPSBUcnVlCisgICAgICAgICA+Pj4gdHJ5OgorICAgICAgICAgLi4uICAgICBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCd0ZXN0X2RvY3Rlc3QudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0Mi50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3Q0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZT0ndGVzdCcpCisgICAgICAgICAuLi4gICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICAuLi4gZmluYWxseToKKyAgICAgICAgIC4uLiAgICAgaWYgYWRkZWRfbG9hZGVyOgorICAgICAgICAgLi4uICAgICAgICAgZGVsIHRlc3QuX19sb2FkZXJfXworICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTM+CisKKyAgICAgICAnLycgc2hvdWxkIGJlIHVzZWQgYXMgYSBwYXRoIHNlcGFyYXRvci4gIEl0IHdpbGwgYmUgY29udmVydGVkCisgICAgICAgdG8gYSBuYXRpdmUgc2VwYXJhdG9yIGF0IHJ1biB0aW1lOgorCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgnLi4vdGVzdC90ZXN0X2RvY3Rlc3QudHh0JykKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTE+CisKKyAgICAgICBJZiBEb2NGaWxlU3VpdGUgaXMgdXNlZCBmcm9tIGFuIGludGVyYWN0aXZlIHNlc3Npb24sIHRoZW4gZmlsZXMKKyAgICAgICBhcmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBvZiBzeXMuYXJndlswXToKKworICAgICAgICAgPj4+IGltcG9ydCB0eXBlcywgb3MucGF0aCwgdGVzdC50ZXN0X2RvY3Rlc3QKKyAgICAgICAgID4+PiBzYXZlX2FyZ3YgPSBzeXMuYXJndgorICAgICAgICAgPj4+IHN5cy5hcmd2ID0gW3Rlc3QudGVzdF9kb2N0ZXN0Ll9fZmlsZV9fXQorICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdC50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZT10eXBlcy5Nb2R1bGVUeXBlKCdfX21haW5fXycpKQorICAgICAgICAgPj4+IHN5cy5hcmd2ID0gc2F2ZV9hcmd2CisKKyAgICAgICBCeSBzZXR0aW5nIGBtb2R1bGVfcmVsYXRpdmU9RmFsc2VgLCBvcy1zcGVjaWZpYyBwYXRocyBtYXkgYmUKKyAgICAgICB1c2VkIChpbmNsdWRpbmcgYWJzb2x1dGUgcGF0aHMgYW5kIHBhdGhzIHJlbGF0aXZlIHRvIHRoZQorICAgICAgIHdvcmtpbmcgZGlyZWN0b3J5KToKKworICAgICAgICAgPj4+ICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSB0ZXN0IHBhY2thZ2UuCisgICAgICAgICA+Pj4gdGVzdF9kb2N0ZXN0X3BhdGggPSBvcy5wYXRoLmFic3BhdGgodGVzdC50ZXN0X2RvY3Rlc3QuX19maWxlX18pCisgICAgICAgICA+Pj4gdGVzdF9wa2dfcGF0aCA9IG9zLnBhdGguc3BsaXQodGVzdF9kb2N0ZXN0X3BhdGgpWzBdCisKKyAgICAgICAgID4+PiAjIFVzZSBpdCB0byBmaW5kIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRlc3RfZG9jdGVzdC50eHQuCisgICAgICAgICA+Pj4gdGVzdF9maWxlID0gb3MucGF0aC5qb2luKHRlc3RfcGtnX3BhdGgsICd0ZXN0X2RvY3Rlc3QudHh0JykKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUodGVzdF9maWxlLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MSBlcnJvcnM9MCBmYWlsdXJlcz0xPgorCisgICAgICAgSXQgaXMgYW4gZXJyb3IgdG8gc3BlY2lmeSBgcGFja2FnZWAgd2hlbiBgbW9kdWxlX3JlbGF0aXZlPUZhbHNlYDoKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUodGVzdF9maWxlLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPSd0ZXN0JykKKyAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgIFZhbHVlRXJyb3I6IFBhY2thZ2UgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIGZvciBtb2R1bGUtcmVsYXRpdmUgcGF0aHMuCisKKyAgICAgICBZb3UgY2FuIHNwZWNpZnkgaW5pdGlhbCBnbG9iYWwgdmFyaWFibGVzOgorCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgndGVzdF9kb2N0ZXN0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0Mi50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JzPXsnZmF2b3JpdGVfY29sb3InOiAnYmx1ZSd9KQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KKworICAgICAgIEluIHRoaXMgY2FzZSwgd2Ugc3VwcGxpZWQgYSBtaXNzaW5nIGZhdm9yaXRlIGNvbG9yLiBZb3UgY2FuCisgICAgICAgcHJvdmlkZSBkb2N0ZXN0IG9wdGlvbnM6CisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCd0ZXN0X2RvY3Rlc3QudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3QyLnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzPWRvY3Rlc3QuRE9OVF9BQ0NFUFRfQkxBTktMSU5FLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYnM9eydmYXZvcml0ZV9jb2xvcic6ICdibHVlJ30pCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0zPgorCisgICAgICAgQW5kLCB5b3UgY2FuIHByb3ZpZGUgc2V0VXAgYW5kIHRlYXJEb3duIGZ1bmN0aW9uczoKKworICAgICAgICAgPj4+IGRlZiBzZXRVcCh0KToKKyAgICAgICAgIC4uLiAgICAgaW1wb3J0IHRlc3QudGVzdF9kb2N0ZXN0CisgICAgICAgICAuLi4gICAgIHRlc3QudGVzdF9kb2N0ZXN0LnNpbGx5U2V0dXAgPSBUcnVlCisKKyAgICAgICAgID4+PiBkZWYgdGVhckRvd24odCk6CisgICAgICAgICAuLi4gICAgIGltcG9ydCB0ZXN0LnRlc3RfZG9jdGVzdAorICAgICAgICAgLi4uICAgICBkZWwgdGVzdC50ZXN0X2RvY3Rlc3Quc2lsbHlTZXR1cAorCisgICAgICAgSGVyZSwgd2UgaW5zdGFsbGVkIGEgc2lsbHkgdmFyaWFibGUgdGhhdCB0aGUgdGVzdCBleHBlY3RzOgorCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgndGVzdF9kb2N0ZXN0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0Mi50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFVwPXNldFVwLCB0ZWFyRG93bj10ZWFyRG93bikKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CisKKyAgICAgICBCdXQgdGhlIHRlYXJEb3duIHJlc3RvcmVzIHNhbml0eToKKworICAgICAgICAgPj4+IGltcG9ydCB0ZXN0LnRlc3RfZG9jdGVzdAorICAgICAgICAgPj4+IHRlc3QudGVzdF9kb2N0ZXN0LnNpbGx5U2V0dXAKKyAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgIC4uLgorICAgICAgICAgQXR0cmlidXRlRXJyb3I6ICdtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzaWxseVNldHVwJworCisgICAgICAgVGhlIHNldFVwIGFuZCB0ZWFyRG93biBmdW50aW9ucyBhcmUgcGFzc2VkIHRlc3Qgb2JqZWN0cy4KKyAgICAgICBIZXJlLCB3ZSdsbCB1c2UgYSBzZXRVcCBmdW5jdGlvbiB0byBzZXQgdGhlIGZhdm9yaXRlIGNvbG9yIGluCisgICAgICAgdGVzdF9kb2N0ZXN0LnR4dDoKKworICAgICAgICAgPj4+IGRlZiBzZXRVcCh0ZXN0KToKKyAgICAgICAgIC4uLiAgICAgdGVzdC5nbG9ic1snZmF2b3JpdGVfY29sb3InXSA9ICdibHVlJworCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgndGVzdF9kb2N0ZXN0LnR4dCcsIHNldFVwPXNldFVwKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKworICAgICAgIEhlcmUsIHdlIGRpZG4ndCBuZWVkIHRvIHVzZSBhIHRlYXJEb3duIGZ1bmN0aW9uIGJlY2F1c2Ugd2UKKyAgICAgICBtb2RpZmllZCB0aGUgdGVzdCBnbG9iYWxzLiAgVGhlIHRlc3QgZ2xvYmFscyBhcmUKKyAgICAgICBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgZm9yIHVzIGFmdGVyIGEgdGVzdC4KKworICAgICAgIFRlc3RzIGluIGEgZmlsZSBydW4gdXNpbmcgYERvY0ZpbGVTdWl0ZWAgY2FuIGFsc28gYWNjZXNzIHRoZQorICAgICAgIGBfX2ZpbGVfX2AgZ2xvYmFsLCB3aGljaCBpcyBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIGZpbGUKKyAgICAgICBjb250YWluaW5nIHRoZSB0ZXN0czoKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdDMudHh0JykKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTA+CisKKyAgICAgICBJZiB0aGUgdGVzdHMgY29udGFpbiBub24tQVNDSUkgY2hhcmFjdGVycywgd2UgaGF2ZSB0byBzcGVjaWZ5IHdoaWNoCisgICAgICAgZW5jb2RpbmcgdGhlIGZpbGUgaXMgZW5jb2RlZCB3aXRoLiBXZSBkbyBzbyBieSB1c2luZyB0aGUgYGVuY29kaW5nYAorICAgICAgIHBhcmFtZXRlcjoKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdC50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDIudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3Q0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KKworICAgICAgICIiIgorCitkZWYgdGVzdF90cmFpbGluZ19zcGFjZV9pbl90ZXN0KCk6CisgICAgIiIiCisgICAgVHJhaWxpbmcgc3BhY2VzIGluIGV4cGVjdGVkIG91dHB1dCBhcmUgc2lnbmlmaWNhbnQ6CisKKyAgICAgID4+PiB4LCB5ID0gJ2ZvbycsICcnCisgICAgICA+Pj4gcHJpbnQgeCwgeQorICAgICAgZm9vIFxuCisgICAgIiIiCisKKworZGVmIHRlc3RfdW5pdHRlc3RfcmVwb3J0ZmxhZ3MoKToKKyAgICAiIiJEZWZhdWx0IHVuaXR0ZXN0IHJlcG9ydGluZyBmbGFncyBjYW4gYmUgc2V0IHRvIGNvbnRyb2wgcmVwb3J0aW5nCisKKyAgICBIZXJlLCB3ZSdsbCBzZXQgdGhlIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgb3B0aW9uIHNvIHdlIHNlZQorICAgIG9ubHkgdGhlIGZpcnN0IGZhaWx1cmUgb2YgZWFjaCB0ZXN0LiAgRmlyc3QsIHdlJ2xsIGxvb2sgYXQgdGhlCisgICAgb3V0cHV0IHdpdGhvdXQgdGhlIGZsYWcuICBUaGUgZmlsZSB0ZXN0X2RvY3Rlc3QudHh0IGZpbGUgaGFzIHR3bworICAgIHRlc3RzLiBUaGV5IGJvdGggZmFpbCBpZiBibGFuayBsaW5lcyBhcmUgZGlzYWJsZWQ6CisKKyAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCd0ZXN0X2RvY3Rlc3QudHh0JywKKyAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uZmxhZ3M9ZG9jdGVzdC5ET05UX0FDQ0VQVF9CTEFOS0xJTkUpCisgICAgICA+Pj4gaW1wb3J0IHVuaXR0ZXN0CisgICAgICA+Pj4gcmVzdWx0ID0gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgID4+PiBwcmludCByZXN1bHQuZmFpbHVyZXNbMF1bMV0gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAgIFRyYWNlYmFjayAuLi4KKyAgICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAgIGZhdm9yaXRlX2NvbG9yCisgICAgICAuLi4KKyAgICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAgIGlmIDE6CisgICAgICAuLi4KKworICAgIE5vdGUgdGhhdCB3ZSBzZWUgYm90aCBmYWlsdXJlcyBkaXNwbGF5ZWQuCisKKyAgICAgID4+PiBvbGQgPSBkb2N0ZXN0LnNldF91bml0dGVzdF9yZXBvcnRmbGFncygKKyAgICAgIC4uLiAgICBkb2N0ZXN0LlJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUpCisKKyAgICBOb3csIHdoZW4gd2UgcnVuIHRoZSB0ZXN0OgorCisgICAgICA+Pj4gcmVzdWx0ID0gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgID4+PiBwcmludCByZXN1bHQuZmFpbHVyZXNbMF1bMV0gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAgIFRyYWNlYmFjayAuLi4KKyAgICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAgIGZhdm9yaXRlX2NvbG9yCisgICAgICBFeGNlcHRpb24gcmFpc2VkOgorICAgICAgICAgIC4uLgorICAgICAgICAgIE5hbWVFcnJvcjogbmFtZSAnZmF2b3JpdGVfY29sb3InIGlzIG5vdCBkZWZpbmVkCisgICAgICA8QkxBTktMSU5FPgorICAgICAgPEJMQU5LTElORT4KKworICAgIFdlIGdldCBvbmx5IHRoZSBmaXJzdCBmYWlsdXJlLgorCisgICAgSWYgd2UgZ2l2ZSBhbnkgcmVwb3J0aW5nIG9wdGlvbnMgd2hlbiB3ZSBzZXQgdXAgdGhlIHRlc3RzLAorICAgIGhvd2V2ZXI6CisKKyAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCd0ZXN0X2RvY3Rlc3QudHh0JywKKyAgICAgIC4uLiAgICAgb3B0aW9uZmxhZ3M9ZG9jdGVzdC5ET05UX0FDQ0VQVF9CTEFOS0xJTkUgfCBkb2N0ZXN0LlJFUE9SVF9ORElGRikKKworICAgIFRoZW4gdGhlIGRlZmF1bHQgZXBvcnRpbmcgb3B0aW9ucyBhcmUgaWdub3JlZDoKKworICAgICAgPj4+IHJlc3VsdCA9IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICA+Pj4gcHJpbnQgcmVzdWx0LmZhaWx1cmVzWzBdWzFdICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgICBUcmFjZWJhY2sgLi4uCisgICAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgICBmYXZvcml0ZV9jb2xvcgorICAgICAgLi4uCisgICAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgICBpZiAxOgorICAgICAgICAgICAgIHByaW50ICdhJworICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgcHJpbnQgJ2InCisgICAgICBEaWZmZXJlbmNlcyAobmRpZmYgd2l0aCAtZXhwZWN0ZWQgK2FjdHVhbCk6CisgICAgICAgICAgICBhCisgICAgICAgICAgLSA8QkxBTktMSU5FPgorICAgICAgICAgICsKKyAgICAgICAgICAgIGIKKyAgICAgIDxCTEFOS0xJTkU+CisgICAgICA8QkxBTktMSU5FPgorCisKKyAgICBUZXN0IHJ1bm5lcnMgY2FuIHJlc3RvcmUgdGhlIGZvcm1hdHRpbmcgZmxhZ3MgYWZ0ZXIgdGhleSBydW46CisKKyAgICAgID4+PiBpZ25vcmVkID0gZG9jdGVzdC5zZXRfdW5pdHRlc3RfcmVwb3J0ZmxhZ3Mob2xkKQorCisgICAgIiIiCisKK2RlZiB0ZXN0X3Rlc3RmaWxlKCk6IHIiIiIKK1Rlc3RzIGZvciB0aGUgYHRlc3RmaWxlKClgIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbiBydW5zIGFsbCB0aGUKK2RvY3Rlc3QgZXhhbXBsZXMgaW4gYSBnaXZlbiBmaWxlLiAgSW4gaXRzIHNpbXBsZSBpbnZva2F0aW9uLCBpdCBpcworY2FsbGVkIHdpdGggdGhlIG5hbWUgb2YgYSBmaWxlLCB3aGljaCBpcyB0YWtlbiB0byBiZSByZWxhdGl2ZSB0byB0aGUKK2NhbGxpbmcgbW9kdWxlLiAgVGhlIHJldHVybiB2YWx1ZSBpcyAoI2ZhaWx1cmVzLCAjdGVzdHMpLgorCitXZSBkb24ndCB3YW50IGAtdmAgaW4gc3lzLmFyZ3YgZm9yIHRoZXNlIHRlc3RzLgorCisgICAgPj4+IHNhdmVfYXJndiA9IHN5cy5hcmd2CisgICAgPj4+IGlmICctdicgaW4gc3lzLmFyZ3Y6CisgICAgLi4uICAgICBzeXMuYXJndiA9IFthcmcgZm9yIGFyZyBpbiBzYXZlX2FyZ3YgaWYgYXJnICE9ICctdiddCisKKworICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKCd0ZXN0X2RvY3Rlc3QudHh0JykgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiLi4uIiwgbGluZSA2LCBpbiB0ZXN0X2RvY3Rlc3QudHh0CisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIGZhdm9yaXRlX2NvbG9yCisgICAgRXhjZXB0aW9uIHJhaXNlZDoKKyAgICAgICAgLi4uCisgICAgICAgIE5hbWVFcnJvcjogbmFtZSAnZmF2b3JpdGVfY29sb3InIGlzIG5vdCBkZWZpbmVkCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIDEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgICAgIDEgb2YgICAyIGluIHRlc3RfZG9jdGVzdC50eHQKKyAgICAqKipUZXN0IEZhaWxlZCoqKiAxIGZhaWx1cmVzLgorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MikKKyAgICA+Pj4gZG9jdGVzdC5tYXN0ZXIgPSBOb25lICAjIFJlc2V0IG1hc3Rlci4KKworKE5vdGU6IHdlJ2xsIGJlIGNsZWFyaW5nIGRvY3Rlc3QubWFzdGVyIGFmdGVyIGVhY2ggY2FsbCB0bworYGRvY3Rlc3QudGVzdGZpbGVgLCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBtdWx0aXBsZSB0ZXN0cyB3aXRoIHRoZQorc2FtZSBuYW1lLikKKworR2xvYmFscyBtYXkgYmUgc3BlY2lmaWVkIHdpdGggdGhlIGBnbG9ic2AgYW5kIGBleHRyYWdsb2JzYCBwYXJhbWV0ZXJzOgorCisgICAgPj4+IGdsb2JzID0geydmYXZvcml0ZV9jb2xvcic6ICdibHVlJ30KKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZSgndGVzdF9kb2N0ZXN0LnR4dCcsIGdsb2JzPWdsb2JzKQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKyAgICA+Pj4gZG9jdGVzdC5tYXN0ZXIgPSBOb25lICAjIFJlc2V0IG1hc3Rlci4KKworICAgID4+PiBleHRyYWdsb2JzID0geydmYXZvcml0ZV9jb2xvcic6ICdyZWQnfQorICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKCd0ZXN0X2RvY3Rlc3QudHh0JywgZ2xvYnM9Z2xvYnMsCisgICAgLi4uICAgICAgICAgICAgICAgICAgZXh0cmFnbG9icz1leHRyYWdsb2JzKSAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi4iLCBsaW5lIDYsIGluIHRlc3RfZG9jdGVzdC50eHQKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgZmF2b3JpdGVfY29sb3IKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgJ2JsdWUnCisgICAgR290OgorICAgICAgICAncmVkJworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAxIGl0ZW1zIGhhZCBmYWlsdXJlczoKKyAgICAgICAxIG9mICAgMiBpbiB0ZXN0X2RvY3Rlc3QudHh0CisgICAgKioqVGVzdCBGYWlsZWQqKiogMSBmYWlsdXJlcy4KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKK1RoZSBmaWxlIG1heSBiZSBtYWRlIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gbW9kdWxlIG9yIHBhY2thZ2UsIHVzaW5nIHRoZQorb3B0aW9uYWwgYG1vZHVsZV9yZWxhdGl2ZWAgcGFyYW1ldGVyOgorCisgICAgPj4+IGRvY3Rlc3QudGVzdGZpbGUoJ3Rlc3RfZG9jdGVzdC50eHQnLCBnbG9icz1nbG9icywKKyAgICAuLi4gICAgICAgICAgICAgICAgICBtb2R1bGVfcmVsYXRpdmU9J3Rlc3QnKQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKyAgICA+Pj4gZG9jdGVzdC5tYXN0ZXIgPSBOb25lICAjIFJlc2V0IG1hc3Rlci4KKworVmVyYm9zaXR5IGNhbiBiZSBpbmNyZWFzZWQgd2l0aCB0aGUgb3B0aW9uYWwgYHZlcmJvc2VgIHBhcmFtZXRlcjoKKworICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKCd0ZXN0X2RvY3Rlc3QudHh0JywgZ2xvYnM9Z2xvYnMsIHZlcmJvc2U9VHJ1ZSkKKyAgICBUcnlpbmc6CisgICAgICAgIGZhdm9yaXRlX2NvbG9yCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYmx1ZScKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgaWYgMToKKyAgICAgICAgICAgcHJpbnQgJ2EnCisgICAgICAgICAgIHByaW50CisgICAgICAgICAgIHByaW50ICdiJworICAgIEV4cGVjdGluZzoKKyAgICAgICAgYQorICAgICAgICA8QkxBTktMSU5FPgorICAgICAgICBiCisgICAgb2sKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgMiB0ZXN0cyBpbiB0ZXN0X2RvY3Rlc3QudHh0CisgICAgMiB0ZXN0cyBpbiAxIGl0ZW1zLgorICAgIDIgcGFzc2VkIGFuZCAwIGZhaWxlZC4KKyAgICBUZXN0IHBhc3NlZC4KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKK1RoZSBuYW1lIG9mIHRoZSB0ZXN0IG1heSBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgb3B0aW9uYWwgYG5hbWVgCitwYXJhbWV0ZXI6CisKKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZSgndGVzdF9kb2N0ZXN0LnR4dCcsIG5hbWU9J25ld25hbWUnKQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi4iLCBsaW5lIDYsIGluIG5ld25hbWUKKyAgICAuLi4KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKK1RoZSBzdW1tYXJ5IHJlcG9ydCBtYXkgYmUgc3VwcHJlc3NlZCB3aXRoIHRoZSBvcHRpb25hbCBgcmVwb3J0YAorcGFyYW1ldGVyOgorCisgICAgPj4+IGRvY3Rlc3QudGVzdGZpbGUoJ3Rlc3RfZG9jdGVzdC50eHQnLCByZXBvcnQ9RmFsc2UpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgIi4uLiIsIGxpbmUgNiwgaW4gdGVzdF9kb2N0ZXN0LnR4dAorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBmYXZvcml0ZV9jb2xvcgorICAgIEV4Y2VwdGlvbiByYWlzZWQ6CisgICAgICAgIC4uLgorICAgICAgICBOYW1lRXJyb3I6IG5hbWUgJ2Zhdm9yaXRlX2NvbG9yJyBpcyBub3QgZGVmaW5lZAorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MikKKyAgICA+Pj4gZG9jdGVzdC5tYXN0ZXIgPSBOb25lICAjIFJlc2V0IG1hc3Rlci4KKworVGhlIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQgYHJhaXNlX29uX2Vycm9yYCBjYW4gYmUgdXNlZCB0byByYWlzZSBhbgorZXhjZXB0aW9uIG9uIHRoZSBmaXJzdCBlcnJvciAod2hpY2ggbWF5IGJlIHVzZWZ1bCBmb3IgcG9zdG1vcnRlbQorZGVidWdnaW5nKToKKworICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKCd0ZXN0X2RvY3Rlc3QudHh0JywgcmFpc2Vfb25fZXJyb3I9VHJ1ZSkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVW5leHBlY3RlZEV4Y2VwdGlvbjogLi4uCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKK0lmIHRoZSB0ZXN0cyBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCB0aGUgdGVzdHMgbWlnaHQgZmFpbCwgc2luY2UKK2l0J3MgdW5rbm93biB3aGljaCBlbmNvZGluZyBpcyB1c2VkLiBUaGUgZW5jb2RpbmcgY2FuIGJlIHNwZWNpZmllZAordXNpbmcgdGhlIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQgYGVuY29kaW5nYDoKKworICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKCd0ZXN0X2RvY3Rlc3Q0LnR4dCcpICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgIi4uLiIsIGxpbmUgNywgaW4gdGVzdF9kb2N0ZXN0NC50eHQKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgdScuLi4nCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIHUnZlx4ZjZceGY2JworICAgIEdvdDoKKyAgICAgICAgdSdmXHhjM1x4YjZceGMzXHhiNicKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgLi4uCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIDEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgICAgIDIgb2YgICA0IGluIHRlc3RfZG9jdGVzdDQudHh0CisgICAgKioqVGVzdCBGYWlsZWQqKiogMiBmYWlsdXJlcy4KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MiwgYXR0ZW1wdGVkPTQpCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZSgndGVzdF9kb2N0ZXN0NC50eHQnLCBlbmNvZGluZz0ndXRmLTgnKQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9NCkKKyAgICA+Pj4gZG9jdGVzdC5tYXN0ZXIgPSBOb25lICAjIFJlc2V0IG1hc3Rlci4KKworU3dpdGNoIHRoZSBtb2R1bGUgZW5jb2RpbmcgdG8gJ3V0Zi04JyB0byB0ZXN0IHRoZSB2ZXJib3NlIG91dHB1dCB3aXRob3V0Citib3RoZXJpbmcgd2l0aCB0aGUgY3VycmVudCBzeXMuc3Rkb3V0IGVuY29kaW5nLgorCisgICAgPj4+IGRvY3Rlc3QuX2VuY29kaW5nLCBzYXZlZF9lbmNvZGluZyA9ICd1dGYtOCcsIGRvY3Rlc3QuX2VuY29kaW5nCisgICAgPj4+IGRvY3Rlc3QudGVzdGZpbGUoJ3Rlc3RfZG9jdGVzdDQudHh0JywgZW5jb2Rpbmc9J3V0Zi04JywgdmVyYm9zZT1UcnVlKQorICAgIFRyeWluZzoKKyAgICAgICAgdSdmw7bDticKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIHUnZlx4ZjZceGY2JworICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICB1J2LEhXInCisgICAgRXhwZWN0aW5nOgorICAgICAgICB1J2JcdTAxMDVyJworICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICAnZsO2w7YnCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnZlx4YzNceGI2XHhjM1x4YjYnCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICdixIVyJworICAgIEV4cGVjdGluZzoKKyAgICAgICAgJ2JceGM0XHg4NXInCisgICAgb2sKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgNCB0ZXN0cyBpbiB0ZXN0X2RvY3Rlc3Q0LnR4dAorICAgIDQgdGVzdHMgaW4gMSBpdGVtcy4KKyAgICA0IHBhc3NlZCBhbmQgMCBmYWlsZWQuCisgICAgVGVzdCBwYXNzZWQuCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD00KQorICAgID4+PiBkb2N0ZXN0Ll9lbmNvZGluZyA9IHNhdmVkX2VuY29kaW5nCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisgICAgPj4+IHN5cy5hcmd2ID0gc2F2ZV9hcmd2CisiIiIKKworIyBvbGRfdGVzdDEsIC4uLiB1c2VkIHRvIGxpdmUgaW4gZG9jdGVzdC5weSwgYnV0IGNsdXR0ZXJlZCBpdC4gIE5vdGUKKyMgdGhhdCB0aGVzZSB1c2UgdGhlIGRlcHJlY2F0ZWQgZG9jdGVzdC5UZXN0ZXIsIHNvIHNob3VsZCBnbyBhd2F5IChvcgorIyBiZSByZXdyaXR0ZW4pIHNvbWVkYXkuCisKK2RlZiBvbGRfdGVzdDEoKTogciIiIgorPj4+IGZyb20gZG9jdGVzdCBpbXBvcnQgVGVzdGVyCis+Pj4gdCA9IFRlc3RlcihnbG9icz17J3gnOiA0Mn0sIHZlcmJvc2U9MCkKKz4+PiB0LnJ1bnN0cmluZyhyJycnCisuLi4gICAgICA+Pj4geCA9IHggKiAyCisuLi4gICAgICA+Pj4gcHJpbnQgeAorLi4uICAgICAgNDIKKy4uLiAnJycsICdYWVonKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorTGluZSAzLCBpbiBYWVoKK0ZhaWxlZCBleGFtcGxlOgorICAgIHByaW50IHgKK0V4cGVjdGVkOgorICAgIDQyCitHb3Q6CisgICAgODQKK1Rlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MikKKz4+PiB0LnJ1bnN0cmluZygiPj4+IHggPSB4ICogMlxuPj4+IHByaW50IHhcbjg0XG4iLCAnZXhhbXBsZTInKQorVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorPj4+IHQuc3VtbWFyaXplKCkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgMSBvZiAgIDIgaW4gWFlaCisqKipUZXN0IEZhaWxlZCoqKiAxIGZhaWx1cmVzLgorVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD00KQorPj4+IHQuc3VtbWFyaXplKHZlcmJvc2U9MSkKKzEgaXRlbXMgcGFzc2VkIGFsbCB0ZXN0czoKKyAgIDIgdGVzdHMgaW4gZXhhbXBsZTIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgMSBvZiAgIDIgaW4gWFlaCis0IHRlc3RzIGluIDIgaXRlbXMuCiszIHBhc3NlZCBhbmQgMSBmYWlsZWQuCisqKipUZXN0IEZhaWxlZCoqKiAxIGZhaWx1cmVzLgorVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD00KQorIiIiCisKK2RlZiBvbGRfdGVzdDIoKTogciIiIgorICAgICAgICA+Pj4gZnJvbSBkb2N0ZXN0IGltcG9ydCBUZXN0ZXIKKyAgICAgICAgPj4+IHQgPSBUZXN0ZXIoZ2xvYnM9e30sIHZlcmJvc2U9MSkKKyAgICAgICAgPj4+IHRlc3QgPSByJycnCisgICAgICAgIC4uLiAgICAjIGp1c3QgYW4gZXhhbXBsZQorICAgICAgICAuLi4gICAgPj4+IHggPSAxICsgMgorICAgICAgICAuLi4gICAgPj4+IHgKKyAgICAgICAgLi4uICAgIDMKKyAgICAgICAgLi4uICcnJworICAgICAgICA+Pj4gdC5ydW5zdHJpbmcodGVzdCwgIkV4YW1wbGUiKQorICAgICAgICBSdW5uaW5nIHN0cmluZyBFeGFtcGxlCisgICAgICAgIFRyeWluZzoKKyAgICAgICAgICAgIHggPSAxICsgMgorICAgICAgICBFeHBlY3Rpbmcgbm90aGluZworICAgICAgICBvaworICAgICAgICBUcnlpbmc6CisgICAgICAgICAgICB4CisgICAgICAgIEV4cGVjdGluZzoKKyAgICAgICAgICAgIDMKKyAgICAgICAgb2sKKyAgICAgICAgMCBvZiAyIGV4YW1wbGVzIGZhaWxlZCBpbiBzdHJpbmcgRXhhbXBsZQorICAgICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisiIiIKKworZGVmIG9sZF90ZXN0MygpOiByIiIiCisgICAgICAgID4+PiBmcm9tIGRvY3Rlc3QgaW1wb3J0IFRlc3RlcgorICAgICAgICA+Pj4gdCA9IFRlc3RlcihnbG9icz17fSwgdmVyYm9zZT0wKQorICAgICAgICA+Pj4gZGVmIF9mKCk6CisgICAgICAgIC4uLiAgICAgJycnVHJpdmlhbCBkb2NzdHJpbmcgZXhhbXBsZS4KKyAgICAgICAgLi4uICAgICA+Pj4gYXNzZXJ0IDIgPT0gMgorICAgICAgICAuLi4gICAgICcnJworICAgICAgICAuLi4gICAgIHJldHVybiAzMgorICAgICAgICAuLi4KKyAgICAgICAgPj4+IHQucnVuZG9jKF9mKSAgIyBleHBlY3QgMCBmYWlsdXJlcyBpbiAxIGV4YW1wbGUKKyAgICAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQorIiIiCisKK2RlZiBvbGRfdGVzdDQoKTogIiIiCisgICAgICAgID4+PiBpbXBvcnQgdHlwZXMKKyAgICAgICAgPj4+IG0xID0gdHlwZXMuTW9kdWxlVHlwZSgnX20xJykKKyAgICAgICAgPj4+IG0yID0gdHlwZXMuTW9kdWxlVHlwZSgnX20yJykKKyAgICAgICAgPj4+IHRlc3RfZGF0YSA9IFwiIiIKKyAgICAgICAgLi4uIGRlZiBfZigpOgorICAgICAgICAuLi4gICAgICcnJz4+PiBhc3NlcnQgMSA9PSAxCisgICAgICAgIC4uLiAgICAgJycnCisgICAgICAgIC4uLiBkZWYgZygpOgorICAgICAgICAuLi4gICAgJycnPj4+IGFzc2VydCAyICE9IDEKKyAgICAgICAgLi4uICAgICcnJworICAgICAgICAuLi4gY2xhc3MgSDoKKyAgICAgICAgLi4uICAgICcnJz4+PiBhc3NlcnQgMiA+IDEKKyAgICAgICAgLi4uICAgICcnJworICAgICAgICAuLi4gICAgZGVmIGJhcihzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAnJyc+Pj4gYXNzZXJ0IDEgPCAyCisgICAgICAgIC4uLiAgICAgICAgJycnCisgICAgICAgIC4uLiBcIiIiCisgICAgICAgID4+PiBleGVjIHRlc3RfZGF0YSBpbiBtMS5fX2RpY3RfXworICAgICAgICA+Pj4gZXhlYyB0ZXN0X2RhdGEgaW4gbTIuX19kaWN0X18KKyAgICAgICAgPj4+IG0xLl9fZGljdF9fLnVwZGF0ZSh7ImYyIjogbTIuX2YsICJnMiI6IG0yLmcsICJoMiI6IG0yLkh9KQorCisgICAgICAgIFRlc3RzIHRoYXQgb2JqZWN0cyBvdXRzaWRlIG0xIGFyZSBleGNsdWRlZDoKKworICAgICAgICA+Pj4gZnJvbSBkb2N0ZXN0IGltcG9ydCBUZXN0ZXIKKyAgICAgICAgPj4+IHQgPSBUZXN0ZXIoZ2xvYnM9e30sIHZlcmJvc2U9MCkKKyAgICAgICAgPj4+IHQucnVuZGljdChtMS5fX2RpY3RfXywgInJ1bmRpY3RfdGVzdCIsIG0xKSAgIyBmMiBhbmQgZzIgYW5kIGgyIHNraXBwZWQKKyAgICAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD00KQorCisgICAgICAgIE9uY2UgbW9yZSwgbm90IGV4Y2x1ZGluZyBzdHVmZiBvdXRzaWRlIG0xOgorCisgICAgICAgID4+PiB0ID0gVGVzdGVyKGdsb2JzPXt9LCB2ZXJib3NlPTApCisgICAgICAgID4+PiB0LnJ1bmRpY3QobTEuX19kaWN0X18sICJydW5kaWN0X3Rlc3RfcHZ0IikgICMgTm9uZSBhcmUgc2tpcHBlZC4KKyAgICAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD04KQorCisgICAgICAgIFRoZSBleGNsdXNpb24gb2Ygb2JqZWN0cyBmcm9tIG91dHNpZGUgdGhlIGRlc2lnbmF0ZWQgbW9kdWxlIGlzCisgICAgICAgIG1lYW50IHRvIGJlIGludm9rZWQgYXV0b21hZ2ljYWxseSBieSB0ZXN0bW9kLgorCisgICAgICAgID4+PiBkb2N0ZXN0LnRlc3Rtb2QobTEsIHZlcmJvc2U9RmFsc2UpCisgICAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9NCkKKyIiIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBNYWluCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIENoZWNrIHRoZSBkb2N0ZXN0IGNhc2VzIGluIGRvY3Rlc3QgaXRzZWxmOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdChkb2N0ZXN0LCB2ZXJib3NpdHk9VHJ1ZSkKKworICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9kb2N0ZXN0CisKKyAgICAjIElnbm9yZSBhbGwgd2FybmluZ3MgYWJvdXQgdGhlIHVzZSBvZiBjbGFzcyBUZXN0ZXIgaW4gdGhpcyBtb2R1bGUuCisgICAgZGVwcmVjYXRpb25zID0gW10KKyAgICBpZiBfX2RlYnVnX186CisgICAgICAgIGRlcHJlY2F0aW9ucy5hcHBlbmQoKCJjbGFzcyBUZXN0ZXIgaXMgZGVwcmVjYXRlZCIsIERlcHJlY2F0aW9uV2FybmluZykpCisgICAgaWYgc3lzLnB5M2t3YXJuaW5nOgorICAgICAgICBkZXByZWNhdGlvbnMgKz0gWygiYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQiLCBTeW50YXhXYXJuaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoImV4ZWNmaWxlLi4gbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZyldCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKmRlcHJlY2F0aW9ucyk6CisgICAgICAgICMgQ2hlY2sgdGhlIGRvY3Rlc3QgY2FzZXMgZGVmaW5lZCBoZXJlOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9kb2N0ZXN0LCB2ZXJib3NpdHk9VHJ1ZSkKKworaW1wb3J0IHN5cworZGVmIHRlc3RfY292ZXJhZ2UoY292ZXJkaXIpOgorICAgIHRyYWNlID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RyYWNlJykKKyAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXgsXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT0wLCBjb3VudD0xKQorICAgIHRyYWNlci5ydW4oJ3JlbG9hZChkb2N0ZXN0KTsgdGVzdF9tYWluKCknKQorICAgIHIgPSB0cmFjZXIucmVzdWx0cygpCisgICAgcHJpbnQgJ1dyaXRpbmcgY292ZXJhZ2UgcmVzdWx0cy4uLicKKyAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgY292ZXJkaXI9Y292ZXJkaXIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaWYgJy1jJyBpbiBzeXMuYXJndjoKKyAgICAgICAgdGVzdF9jb3ZlcmFnZSgnL3RtcC9kb2N0ZXN0LmNvdmVyJykKKyAgICBlbHNlOgorICAgICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGU4NTFlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGhpcyBpcyBhIHNhbXBsZSBkb2N0ZXN0IGluIGEgdGV4dCBmaWxlLgorCitJbiB0aGlzIGV4YW1wbGUsIHdlJ2xsIHJlbHkgb24gYSBnbG9iYWwgdmFyaWFibGUgYmVpbmcgc2V0IGZvciB1cworYWxyZWFkeToKKworICA+Pj4gZmF2b3JpdGVfY29sb3IKKyAgJ2JsdWUnCisKK1dlIGNhbiBtYWtlIHRoaXMgZmFpbCBieSBkaXNhYmxpbmcgdGhlIGJsYW5rLWxpbmUgZmVhdHVyZS4KKworICA+Pj4gaWYgMToKKyAgLi4uICAgIHByaW50ICdhJworICAuLi4gICAgcHJpbnQKKyAgLi4uICAgIHByaW50ICdiJworICBhCisgIDxCTEFOS0xJTkU+CisgIGIKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZG9jdGVzdDIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNDNiYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QyLnB5CkBAIC0wLDAgKzEsMTI0IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQordSIiIkEgbW9kdWxlIHRvIHRlc3Qgd2hldGhlciBkb2N0ZXN0IHJlY29nbml6ZXMgc29tZSAyLjIgZmVhdHVyZXMsCitsaWtlIHN0YXRpYyBhbmQgY2xhc3MgbWV0aG9kcy4KKworPj4+IHByaW50ICd5dXAnICAjIDEKK3l1cAorCitXZSBpbmNsdWRlIHNvbWUgKHJhbmRvbSkgZW5jb2RlZCAodXRmLTgpIHRleHQgaW4gdGhlIHRleHQgc3Vycm91bmRpbmcKK3RoZSBleGFtcGxlLiAgSXQgc2hvdWxkIGJlIGlnbm9yZWQ6CisKK9CJ0IrQiNCB0IIKKworIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2lmIHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW5ub3QgdGVzdCBkb2NzdHJpbmdzIHdpdGggLU8yIikKKworY2xhc3MgQyhvYmplY3QpOgorICAgIHUiIiJDbGFzcyBDLgorCisgICAgPj4+IHByaW50IEMoKSAgIyAyCisgICAgNDIKKworCisgICAgV2UgaW5jbHVkZSBzb21lIChyYW5kb20pIGVuY29kZWQgKHV0Zi04KSB0ZXh0IGluIHRoZSB0ZXh0IHN1cnJvdW5kaW5nCisgICAgdGhlIGV4YW1wbGUuICBJdCBzaG91bGQgYmUgaWdub3JlZDoKKworICAgICAgICDQidCK0IjQgdCCCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIiIiQy5fX2luaXRfXy4KKworICAgICAgICA+Pj4gcHJpbnQgQygpICMgMworICAgICAgICA0MgorICAgICAgICAiIiIKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgPj4+IHByaW50IEMoKSAjIDQKKyAgICAgICAgNDIKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiNDIiCisKKyAgICBjbGFzcyBEKG9iamVjdCk6CisgICAgICAgICIiIkEgbmVzdGVkIEQgY2xhc3MuCisKKyAgICAgICAgPj4+IHByaW50ICJJbiBEISIgICAjIDUKKyAgICAgICAgSW4gRCEKKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVmIG5lc3RlZChzZWxmKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgPj4+IHByaW50IDMgIyA2CisgICAgICAgICAgICAzCisgICAgICAgICAgICAiIiIKKworICAgIGRlZiBnZXR4KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgPj4+IGMgPSBDKCkgICAgIyA3CisgICAgICAgID4+PiBjLnggPSAxMiAgICMgOAorICAgICAgICA+Pj4gcHJpbnQgYy54ICAjIDkKKyAgICAgICAgLTEyCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gLXNlbGYuX3gKKworICAgIGRlZiBzZXR4KHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiCisgICAgICAgID4+PiBjID0gQygpICAgICAjIDEwCisgICAgICAgID4+PiBjLnggPSAxMiAgICAjIDExCisgICAgICAgID4+PiBwcmludCBjLnggICAjIDEyCisgICAgICAgIC0xMgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5feCA9IHZhbHVlCisKKyAgICB4ID0gcHJvcGVydHkoZ2V0eCwgc2V0eCwgZG9jPSIiIlwKKyAgICAgICAgPj4+IGMgPSBDKCkgICAgIyAxMworICAgICAgICA+Pj4gYy54ID0gMTIgICAjIDE0CisgICAgICAgID4+PiBwcmludCBjLnggICMgMTUKKyAgICAgICAgLTEyCisgICAgICAgICIiIikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3RhdG0oKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgc3RhdGljIG1ldGhvZC4KKworICAgICAgICA+Pj4gcHJpbnQgQy5zdGF0bSgpICAgICMgMTYKKyAgICAgICAgNjY2CisgICAgICAgID4+PiBwcmludCBDKCkuc3RhdG0oKSAgIyAxNworICAgICAgICA2NjYKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiA2NjYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjbHNtKGNscywgdmFsKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgY2xhc3MgbWV0aG9kLgorCisgICAgICAgID4+PiBwcmludCBDLmNsc20oMjIpICAgICMgMTgKKyAgICAgICAgMjIKKyAgICAgICAgPj4+IHByaW50IEMoKS5jbHNtKDIzKSAgIyAxOQorICAgICAgICAyMworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHZhbAorCitkZWYgdGVzdF9tYWluKCk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2RvY3Rlc3QyCisgICAgRVhQRUNURUQgPSAxOQorICAgIGYsIHQgPSB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9kb2N0ZXN0MikKKyAgICBpZiB0ICE9IEVYUEVDVEVEOgorICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCgiZXhwZWN0ZWQgJWQgdGVzdHMgdG8gcnVuLCBub3QgJWQiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVYUEVDVEVELCB0KSkKKworIyBQb2xsdXRlIHRoZSBuYW1lc3BhY2Ugd2l0aCBhIGJ1bmNoIG9mIGltcG9ydGVkIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcywKKyMgdG8gbWFrZSBzdXJlIHRoZXkgZG9uJ3QgZ2V0IHRlc3RlZC4KK2Zyb20gZG9jdGVzdCBpbXBvcnQgKgorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0Mi50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0Mi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxNDg1NgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QyLnR4dApAQCAtMCwwICsxLDE0IEBACitUaGlzIGlzIGEgc2FtcGxlIGRvY3Rlc3QgaW4gYSB0ZXh0IGZpbGUuCisKK0luIHRoaXMgZXhhbXBsZSwgd2UnbGwgcmVseSBvbiBzb21lIHNpbGx5IHNldHVwOgorCisgID4+PiBpbXBvcnQgdGVzdC50ZXN0X2RvY3Rlc3QKKyAgPj4+IHRlc3QudGVzdF9kb2N0ZXN0LnNpbGx5U2V0dXAKKyAgVHJ1ZQorCitUaGlzIHRlc3QgYWxzbyBoYXMgc29tZSAocmFuZG9tKSBlbmNvZGVkICh1dGYtOCkgdW5pY29kZSB0ZXh0OgorCisgIMOvwrvCv8OQwonDkMKKw5DCiMOQwoHDkMKCCisKK1RoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0gaW4gdGhlIHRlY3Qgc3Vycm91bmRpbmcgdGhlIGV4YW1wbGVzLCBidXQKK3dlIGluY2x1ZGUgaXQgaGVyZSAoaW4gdGhpcyB0ZXN0IHRleHQgZmlsZSkgdG8gbWFrZSBzdXJlLiA6KQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZG9jdGVzdDMudHh0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZG9jdGVzdDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YTk2ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0My50eHQKQEAgLTAsMCArMSw1IEBACisKK0hlcmUgd2UgY2hlY2sgdGhhdCBgX19maWxlX19gIGlzIHByb3ZpZGVkOgorCisgID4+PiB0eXBlKF9fZmlsZV9fKQorICA8dHlwZSAnc3RyJz4KZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3Q0LnR4dCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3Q0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjE5ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZG9jdGVzdDQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1RoaXMgaXMgYSBzYW1wbGUgZG9jdGVzdCBpbiBhIHRleHQgZmlsZSB0aGF0IGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorVGhpcyBmaWxlIGlzIGVuY29kZWQgdXNpbmcgVVRGLTguCisKK0luIG9yZGVyIHRvIGdldCB0aGlzIHRlc3QgdG8gcGFzcywgd2UgaGF2ZSB0byBtYW51YWxseSBzcGVjaWZ5IHRoZQorZW5jb2RpbmcuCisKKyAgPj4+IHUnZsO2w7YnCisgIHUnZlx4ZjZceGY2JworCisgID4+PiB1J2LEhXInCisgIHUnYlx1MDEwNXInCisKKyAgPj4+ICdmw7bDticKKyAgJ2ZceGMzXHhiNlx4YzNceGI2JworCisgID4+PiAnYsSFcicKKyAgJ2JceGM0XHg4NXInCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kb2N4bWxycGMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kb2N4bWxycGMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMTgwMwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQpAQCAtMCwwICsxLDIwMSBAQAorZnJvbSBEb2NYTUxSUENTZXJ2ZXIgaW1wb3J0IERvY1hNTFJQQ1NlcnZlcgoraW1wb3J0IGh0dHBsaWIKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKK2ltcG9ydCB0aW1lCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdW5pdHRlc3QKKworUE9SVCA9IE5vbmUKKworZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKToKKyAgICAjIElmIHdlIHNraXAgdGhlIHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBhIHJlcXVlc3QgYmVjYXVzZSB0aGUKKyAgICAjIHRoZSBzZXJ2ZXIgY3JlYXRlZCBpbiBzZXRVcCBibG9ja3MgZXhwZWN0aW5nIG9uZSB0byBjb21lIGluLgorICAgIGlmIG5vdCBjb25kaXRpb246CisgICAgICAgIHJldHVybiBsYW1iZGEgZnVuYzogZnVuYworICAgIGRlZiBkZWNvcmF0b3IoZnVuYyk6CisgICAgICAgIGRlZiBtYWtlX3JlcXVlc3RfYW5kX3NraXAoc2VsZik6CisgICAgICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCisgICAgICAgICAgICBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChyZWFzb24pCisgICAgICAgIHJldHVybiBtYWtlX3JlcXVlc3RfYW5kX3NraXAKKyAgICByZXR1cm4gZGVjb3JhdG9yCisKKworZGVmIHNlcnZlcihldnQsIG51bXJlcXVlc3RzKToKKyAgICBzZXJ2ID0gRG9jWE1MUlBDU2VydmVyKCgibG9jYWxob3N0IiwgMCksIGxvZ1JlcXVlc3RzPUZhbHNlKQorCisgICAgdHJ5OgorICAgICAgICBnbG9iYWwgUE9SVAorICAgICAgICBQT1JUID0gc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQorCisgICAgICAgICMgQWRkIHNvbWUgZG9jdW1lbnRhdGlvbgorICAgICAgICBzZXJ2LnNldF9zZXJ2ZXJfdGl0bGUoIkRvY1hNTFJQQ1NlcnZlciBUZXN0IERvY3VtZW50YXRpb24iKQorICAgICAgICBzZXJ2LnNldF9zZXJ2ZXJfbmFtZSgiRG9jWE1MUlBDU2VydmVyIFRlc3QgRG9jcyIpCisgICAgICAgIHNlcnYuc2V0X3NlcnZlcl9kb2N1bWVudGF0aW9uKAorICAgICAgICAgICAgIlRoaXMgaXMgYW4gWE1MLVJQQyBzZXJ2ZXIncyBkb2N1bWVudGF0aW9uLCBidXQgdGhlIHNlcnZlciAiCisgICAgICAgICAgICAiY2FuIGJlIHVzZWQgYnkgUE9TVGluZyB0byAvUlBDMi4gVHJ5IHNlbGYuYWRkLCB0b28uIikKKworICAgICAgICAjIENyZWF0ZSBhbmQgcmVnaXN0ZXIgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCisgICAgICAgIGNsYXNzIFRlc3RDbGFzcyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIHRlc3RfbWV0aG9kKHNlbGYsIGFyZyk6CisgICAgICAgICAgICAgICAgIiIiVGVzdCBtZXRob2QncyBkb2NzLiBUaGlzIG1ldGhvZCB0cnVseSBkb2VzIHZlcnkgbGl0dGxlLiIiIgorICAgICAgICAgICAgICAgIHNlbGYuYXJnID0gYXJnCisKKyAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9ucygpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UoVGVzdENsYXNzKCkpCisKKyAgICAgICAgZGVmIGFkZCh4LCB5KToKKyAgICAgICAgICAgICIiIkFkZCB0d28gaW5zdGFuY2VzIHRvZ2V0aGVyLiBUaGlzIGZvbGxvd3MgUEVQMDA4LCBidXQgaGFzIG5vdGhpbmcKKyAgICAgICAgICAgIHRvIGRvIHdpdGggUkZDMTk1Mi4gQ2FzZSBzaG91bGQgbWF0dGVyOiBwRXAwMDggYW5kIHJGQzE5NTIuICBUaGluZ3MKKyAgICAgICAgICAgIHRoYXQgc3RhcnQgd2l0aCBodHRwIGFuZCBmdHAgc2hvdWxkIGJlIGF1dG8tbGlua2VkLCB0b286CisgICAgICAgICAgICBodHRwOi8vZ29vZ2xlLmNvbS4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgcmV0dXJuIHggKyB5CisKKyAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihhZGQpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgsIHk6IHgteSkKKworICAgICAgICB3aGlsZSBudW1yZXF1ZXN0cyA+IDA6CisgICAgICAgICAgICBzZXJ2LmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgICAgIG51bXJlcXVlc3RzIC09IDEKKyAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBzZXJ2LnNlcnZlcl9jbG9zZSgpCisgICAgICAgIFBPUlQgPSBOb25lCisgICAgICAgIGV2dC5zZXQoKQorCitjbGFzcyBEb2NYTUxSUENIVFRQR0VUU2VydmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKyAgICAgICAgIyBFbmFibGUgc2VydmVyIGZlZWRiYWNrCisgICAgICAgIERvY1hNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gVHJ1ZQorCisgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPShzZWxmLmV2dCwgMSkpLnN0YXJ0KCkKKworICAgICAgICAjIHdhaXQgZm9yIHBvcnQgdG8gYmUgYXNzaWduZWQKKyAgICAgICAgbiA9IDEwMDAKKyAgICAgICAgd2hpbGUgbiA+IDAgYW5kIFBPUlQgaXMgTm9uZToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDEpCisgICAgICAgICAgICBuIC09IDEKKworICAgICAgICBzZWxmLmNsaWVudCA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oImxvY2FsaG9zdDolZCIgJSBQT1JUKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisKKyAgICAgICAgIyBEaXNhYmxlIHNlcnZlciBmZWVkYmFjaworICAgICAgICBEb2NYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IEZhbHNlCisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKworICAgIGRlZiB0ZXN0X3ZhbGlkX2dldF9yZXNwb25zZShzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi8iKQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1cywgMjAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLmdldGhlYWRlcigiQ29udGVudC10eXBlIiksICJ0ZXh0L2h0bWwiKQorCisgICAgICAgICMgU2VydmVyIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgd2UgZG9uJ3Qgc3RhcnQgdG8gcmVhZCB0aGUgZGF0YQorICAgICAgICByZXNwb25zZS5yZWFkKCkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfZ2V0X3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiL3NwYW0iKQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1cywgNDA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLmdldGhlYWRlcigiQ29udGVudC10eXBlIiksICJ0ZXh0L3BsYWluIikKKworICAgICAgICByZXNwb25zZS5yZWFkKCkKKworICAgIGRlZiB0ZXN0X2xhbWJkYShzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGF0IGxhbWJkYSBmdW5jdGlvbmFsaXR5IHN0YXlzIHRoZSBzYW1lLiAgVGhlIG91dHB1dCBwcm9kdWNlZAorICAgICAgICBjdXJyZW50bHkgaXMsIEkgc3VzcGVjdCBpbnZhbGlkIGJlY2F1c2Ugb2YgdGhlIHVuZW5jb2RlZCBicmFja2V0cyBpbiB0aGUKKyAgICAgICAgSFRNTCwgIjxsYW1iZGE+Ii4KKworICAgICAgICBUaGUgc3VidHJhY3Rpb24gbGFtYmRhIG1ldGhvZCBpcyB0ZXN0ZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0cmVzcG9uc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzxkbD48ZHQ+PGEgbmFtZT0iLSZsdDtsYW1iZGEmZ3Q7Ij48c3Ryb25nPicKKyAgICAgICAgICAgICAgICAgICAgICAnJmx0O2xhbWJkYSZndDs8L3N0cm9uZz48L2E+KHgsIHkpPC9kdD48L2RsPicsCisgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVhZCgpKQorCisgICAgQG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9hdXRvbGlua2luZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGF0IHRoZSBzZXJ2ZXIgY29ycmVjdGx5IGF1dG9tYXRpY2FsbHkgd3JhcHMgcmVmZXJlbmNlcyB0bworICAgICAgICBQRVBTIGFuZCBSRkNzIHdpdGggbGlua3MsIGFuZCB0aGF0IGl0IGxpbmtpZmllcyB0ZXh0IHN0YXJ0aW5nIHdpdGgKKyAgICAgICAgaHR0cCBvciBmdHAgcHJvdG9jb2wgcHJlZml4ZXMuCisKKyAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSAiYWRkIiBtZXRob2QgY29udGFpbnMgdGhlIHRlc3QgbWF0ZXJpYWwuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0cmVzcG9uc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICAoJzxkbD48ZHQ+PGEgbmFtZT0iLWFkZCI+PHN0cm9uZz5hZGQ8L3N0cm9uZz48L2E+KHgsIHkpPC9kdD48ZGQ+JworICAgICAgICAgICAgICc8dHQ+QWRkJm5ic3A7dHdvJm5ic3A7aW5zdGFuY2VzJm5ic3A7dG9nZXRoZXIuJm5ic3A7VGhpcyZuYnNwOycKKyAgICAgICAgICAgICAnZm9sbG93cyZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDAwOC8iPicKKyAgICAgICAgICAgICAnUEVQMDA4PC9hPiwmbmJzcDtidXQmbmJzcDtoYXMmbmJzcDtub3RoaW5nPGJyPlxudG8mbmJzcDtkbyZuYnNwOycKKyAgICAgICAgICAgICAnd2l0aCZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzE5NTIudHh0Ij4nCisgICAgICAgICAgICAgJ1JGQzE5NTI8L2E+LiZuYnNwO0Nhc2UmbmJzcDtzaG91bGQmbmJzcDttYXR0ZXI6Jm5ic3A7cEVwMDA4Jm5ic3A7JworICAgICAgICAgICAgICdhbmQmbmJzcDtyRkMxOTUyLiZuYnNwOyZuYnNwO1RoaW5nczxicj5cbnRoYXQmbmJzcDtzdGFydCZuYnNwOycKKyAgICAgICAgICAgICAnd2l0aCZuYnNwO2h0dHAmbmJzcDthbmQmbmJzcDtmdHAmbmJzcDtzaG91bGQmbmJzcDtiZSZuYnNwOycKKyAgICAgICAgICAgICAnYXV0by1saW5rZWQsJm5ic3A7dG9vOjxicj5cbjxhIGhyZWY9Imh0dHA6Ly9nb29nbGUuY29tIj4nCisgICAgICAgICAgICAgJ2h0dHA6Ly9nb29nbGUuY29tPC9hPi48L3R0PjwvZGQ+PC9kbD4nKSwgcmVzcG9uc2UucmVhZCgpKQorCisgICAgQG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9zeXN0ZW1fbWV0aG9kcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGUgcHJlY2Vuc2Ugb2YgdGhyZWUgY29uc2VjdXRpdmUgc3lzdGVtLiogbWV0aG9kcy4KKworICAgICAgICBUaGlzIGFsc28gdGVzdHMgdGhlaXIgdXNlIG9mIHBhcmFtZXRlciB0eXBlIHJlY29nbml0aW9uIGFuZCB0aGUKKyAgICAgICAgc3lzdGVtcyByZWxhdGVkIHRvIHRoYXQgcHJvY2Vzcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgICgnPGRsPjxkdD48YSBuYW1lPSItc3lzdGVtLmxpc3RNZXRob2RzIj48c3Ryb25nPnN5c3RlbS5saXN0TWV0aG9kcycKKyAgICAgICAgICAgICAnPC9zdHJvbmc+PC9hPigpPC9kdD48ZGQ+PHR0PjxhIGhyZWY9IiMtc3lzdGVtLmxpc3RNZXRob2RzIj5zeXN0ZW0nCisgICAgICAgICAgICAgJy5saXN0TWV0aG9kczwvYT4oKSZuYnNwOz0mZ3Q7Jm5ic3A7W1wnYWRkXCcsJm5ic3A7XCdzdWJ0cmFjdFwnLCcKKyAgICAgICAgICAgICAnJm5ic3A7XCdtdWx0aXBsZVwnXTxicj5cbiZuYnNwOzxicj5cblJldHVybnMmbmJzcDthJm5ic3A7bGlzdCcKKyAgICAgICAgICAgICAnJm5ic3A7b2YmbmJzcDt0aGUmbmJzcDttZXRob2RzJm5ic3A7c3VwcG9ydGVkJm5ic3A7YnkmbmJzcDt0aGUnCisgICAgICAgICAgICAgJyZuYnNwO3NlcnZlci48L3R0PjwvZGQ+PC9kbD5cbiA8ZGw+PGR0PjxhIG5hbWU9Ii1zeXN0ZW0ubWV0aG9kSGVscCI+JworICAgICAgICAgICAgICc8c3Ryb25nPnN5c3RlbS5tZXRob2RIZWxwPC9zdHJvbmc+PC9hPihtZXRob2RfbmFtZSk8L2R0PjxkZD48dHQ+JworICAgICAgICAgICAgICc8YSBocmVmPSIjLXN5c3RlbS5tZXRob2RIZWxwIj5zeXN0ZW0ubWV0aG9kSGVscDwvYT4oXCdhZGRcJykmbmJzcDsnCisgICAgICAgICAgICAgJz0mZ3Q7Jm5ic3A7IkFkZHMmbmJzcDt0d28mbmJzcDtpbnRlZ2VycyZuYnNwO3RvZ2V0aGVyIjxicj5cbiZuYnNwOycKKyAgICAgICAgICAgICAnPGJyPlxuUmV0dXJucyZuYnNwO2EmbmJzcDtzdHJpbmcmbmJzcDtjb250YWluaW5nJm5ic3A7ZG9jdW1lbnRhdGlvbicKKyAgICAgICAgICAgICAnJm5ic3A7Zm9yJm5ic3A7dGhlJm5ic3A7c3BlY2lmaWVkJm5ic3A7bWV0aG9kLjwvdHQ+PC9kZD48L2RsPlxuICcKKyAgICAgICAgICAgICAnPGRsPjxkdD48YSBuYW1lPSItc3lzdGVtLm1ldGhvZFNpZ25hdHVyZSI+PHN0cm9uZz5zeXN0ZW0uJworICAgICAgICAgICAgICdtZXRob2RTaWduYXR1cmU8L3N0cm9uZz48L2E+KG1ldGhvZF9uYW1lKTwvZHQ+PGRkPjx0dD48YSBocmVmPSIjLScKKyAgICAgICAgICAgICAnc3lzdGVtLm1ldGhvZFNpZ25hdHVyZSI+c3lzdGVtLm1ldGhvZFNpZ25hdHVyZTwvYT4oXCdhZGRcJykmbmJzcDsnCisgICAgICAgICAgICAgJz0mZ3Q7Jm5ic3A7W2RvdWJsZSwmbmJzcDtpbnQsJm5ic3A7aW50XTxicj5cbiZuYnNwOzxicj5cblJldHVybnMnCisgICAgICAgICAgICAgJyZuYnNwO2EmbmJzcDtsaXN0Jm5ic3A7ZGVzY3JpYmluZyZuYnNwO3RoZSZuYnNwO3NpZ25hdHVyZSZuYnNwO29mJworICAgICAgICAgICAgICcmbmJzcDt0aGUmbmJzcDttZXRob2QuJm5ic3A7SW4mbmJzcDt0aGU8YnI+XG5hYm92ZSZuYnNwO2V4YW1wbGUsJworICAgICAgICAgICAgICcmbmJzcDt0aGUmbmJzcDthZGQmbmJzcDttZXRob2QmbmJzcDt0YWtlcyZuYnNwO3R3byZuYnNwO2ludGVnZXJzJworICAgICAgICAgICAgICcmbmJzcDthcyZuYnNwO2FyZ3VtZW50czxicj5cbmFuZCZuYnNwO3JldHVybnMmbmJzcDthJm5ic3A7ZG91YmxlJworICAgICAgICAgICAgICcmbmJzcDtyZXN1bHQuPGJyPlxuJm5ic3A7PGJyPlxuVGhpcyZuYnNwO3NlcnZlciZuYnNwO2RvZXMmbmJzcDsnCisgICAgICAgICAgICAgJ05PVCZuYnNwO3N1cHBvcnQmbmJzcDtzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlLjwvdHQ+PC9kZD48L2RsPicpLAorICAgICAgICAgICAgcmVzcG9uc2UucmVhZCgpKQorCisgICAgZGVmIHRlc3RfYXV0b2xpbmtfZG90dGVkX21ldGhvZHMoc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhhdCBzZWxmZG90IHZhbHVlcyBhcmUgbWFkZSBzdHJvbmcgYXV0b21hdGljYWxseSBpbiB0aGUKKyAgICAgICAgZG9jdW1lbnRhdGlvbi4iIiIKKyAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi8iKQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKKworICAgICAgICBzZWxmLmFzc2VydEluKCIiIlRyeSZuYnNwO3NlbGYuPHN0cm9uZz5hZGQ8L3N0cm9uZz4sJm5ic3A7dG9vLiIiIiwKKyAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWFkKCkpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KERvY1hNTFJQQ0hUVFBHRVRTZXJ2ZXIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2R1bWJkYm0ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kdW1iZGJtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MWZhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kdW1iZGJtLnB5CkBAIC0wLDAgKzEsMTc5IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJUZXN0IHNjcmlwdCBmb3IgdGhlIGR1bWJkYm0gbW9kdWxlCisgICBPcmlnaW5hbCBieSBSb2dlciBFLiBNYXNzZQorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZHVtYmRibQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworX2ZuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorCitkZWYgX2RlbGV0ZV9maWxlcygpOgorICAgIGZvciBleHQgaW4gWyIuZGlyIiwgIi5kYXQiLCAiLmJhayJdOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoX2ZuYW1lICsgZXh0KQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworY2xhc3MgRHVtYkRCTVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBfZGljdCA9IHsnMCc6ICcnLAorICAgICAgICAgICAgICdhJzogJ1B5dGhvbjonLAorICAgICAgICAgICAgICdiJzogJ1Byb2dyYW1taW5nJywKKyAgICAgICAgICAgICAnYyc6ICd0aGUnLAorICAgICAgICAgICAgICdkJzogJ3dheScsCisgICAgICAgICAgICAgJ2YnOiAnR3VpZG8nLAorICAgICAgICAgICAgICdnJzogJ2ludGVuZGVkJworICAgICAgICAgICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzKQorCisgICAgZGVmIHRlc3RfZHVtYmRibV9jcmVhdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGR1bWJkYm0ub3BlbihfZm5hbWUsICdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmtleXMoKSwgW10pCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fZGljdDoKKyAgICAgICAgICAgIGZba2V5XSA9IHNlbGYuX2RpY3Rba2V5XQorICAgICAgICBzZWxmLnJlYWRfaGVscGVyKGYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZHVtYmRibV9jcmVhdGlvbl9tb2RlKHNlbGYpOgorICAgICAgICAjIE9uIHBsYXRmb3JtcyB3aXRob3V0IGNobW9kLCBkb24ndCBkbyBhbnl0aGluZy4KKyAgICAgICAgaWYgbm90IChoYXNhdHRyKG9zLCAnY2htb2QnKSBhbmQgaGFzYXR0cihvcywgJ3VtYXNrJykpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2xkX3VtYXNrID0gb3MudW1hc2soMDAwMikKKyAgICAgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAnYycsIDA2MzcpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVtYXNrKG9sZF91bWFzaykKKworICAgICAgICBleHBlY3RlZF9tb2RlID0gMDYzNQorICAgICAgICBpZiBvcy5uYW1lICE9ICdwb3NpeCc6CisgICAgICAgICAgICAjIFdpbmRvd3Mgb25seSBzdXBwb3J0cyBzZXR0aW5nIHRoZSByZWFkLW9ubHkgYXR0cmlidXRlLgorICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBmYWlsLCBidXQgZG9lc24ndCB3b3JrIGxpa2UgVW5peCBlaXRoZXIuCisgICAgICAgICAgICBleHBlY3RlZF9tb2RlID0gMDY2NgorCisgICAgICAgIGltcG9ydCBzdGF0CisgICAgICAgIHN0ID0gb3Muc3RhdChfZm5hbWUgKyAnLmRhdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCBleHBlY3RlZF9tb2RlKQorICAgICAgICBzdCA9IG9zLnN0YXQoX2ZuYW1lICsgJy5kaXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgZXhwZWN0ZWRfbW9kZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3R3aWNlKHNlbGYpOgorICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSkKKyAgICAgICAgZlsnYSddID0gJ2InCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZlsnYSddLCAnYicpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2R1bWJkYm1fbW9kaWZpY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmluaXRfZGIoKQorICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSwgJ3cnKQorICAgICAgICBzZWxmLl9kaWN0WydnJ10gPSBmWydnJ10gPSAiaW5kZW50ZWQiCisgICAgICAgIHNlbGYucmVhZF9oZWxwZXIoZikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9kdW1iZGJtX3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYuaW5pdF9kYigpCisgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAncicpCisgICAgICAgIHNlbGYucmVhZF9oZWxwZXIoZikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9kdW1iZGJtX2tleXMoc2VsZik6CisgICAgICAgIHNlbGYuaW5pdF9kYigpCisgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lKQorICAgICAgICBrZXlzID0gc2VsZi5rZXlzX2hlbHBlcihmKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3dyaXRlX3JlYWQoc2VsZik6CisgICAgICAgICMgdGVzdCBmb3IgYnVnICM0ODI0NjAKKyAgICAgICAgZiA9IGR1bWJkYm0ub3BlbihfZm5hbWUpCisgICAgICAgIGZbJzEnXSA9ICdoZWxsbycKKyAgICAgICAgZlsnMSddID0gJ2hlbGxvMicKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZbJzEnXSwgJ2hlbGxvMicpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbGluZV9lbmRpbmdzKHNlbGYpOgorICAgICAgICAjIHRlc3QgZm9yIGJ1ZyAjMTE3Mjc2MzogZHVtYmRibSB3b3VsZCBkaWUgaWYgdGhlIGxpbmUgZW5kaW5ncworICAgICAgICAjIHdlcmVuJ3Qgd2hhdCB3YXMgZXhwZWN0ZWQuCisgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lKQorICAgICAgICBmWycxJ10gPSAnaGVsbG8nCisgICAgICAgIGZbJzInXSA9ICdoZWxsbzInCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgTWFuZ2xlIHRoZSBmaWxlIGJ5IGFkZGluZyBcciBiZWZvcmUgZWFjaCBuZXdsaW5lCisgICAgICAgIGRhdGEgPSBvcGVuKF9mbmFtZSArICcuZGlyJykucmVhZCgpCisgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJ1xuJywgJ1xyXG4nKQorICAgICAgICBvcGVuKF9mbmFtZSArICcuZGlyJywgJ3diJykud3JpdGUoZGF0YSkKKworICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmWycxJ10sICdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZlsnMiddLCAnaGVsbG8yJykKKworCisgICAgZGVmIHJlYWRfaGVscGVyKHNlbGYsIGYpOgorICAgICAgICBrZXlzID0gc2VsZi5rZXlzX2hlbHBlcihmKQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2RpY3Q6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RpY3Rba2V5XSwgZltrZXldKQorCisgICAgZGVmIGluaXRfZGIoc2VsZik6CisgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAndycpCisgICAgICAgIGZvciBrIGluIHNlbGYuX2RpY3Q6CisgICAgICAgICAgICBmW2tdID0gc2VsZi5fZGljdFtrXQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBrZXlzX2hlbHBlcihzZWxmLCBmKToKKyAgICAgICAga2V5cyA9IGYua2V5cygpCisgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgIGRrZXlzID0gc2VsZi5fZGljdC5rZXlzKCkKKyAgICAgICAgZGtleXMuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgZGtleXMpCisgICAgICAgIHJldHVybiBrZXlzCisKKyAgICAjIFBlcmZvcm0gcmFuZG9taXplZCBvcGVyYXRpb25zLiAgVGhpcyBkb2Vzbid0IG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQKKyAgICAjIHdoYXQgKm1pZ2h0KiBmYWlsLgorICAgIGRlZiB0ZXN0X3JhbmRvbShzZWxmKToKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICBkID0ge30gICMgbWlycm9yIHRoZSBkYXRhYmFzZQorICAgICAgICBmb3IgZHVtbXkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSkKKyAgICAgICAgICAgIGZvciBkdW1teSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgICAgIGsgPSByYW5kb20uY2hvaWNlKCdhYmNkZWZnaGlqa2xtJykKKyAgICAgICAgICAgICAgICBpZiByYW5kb20ucmFuZG9tKCkgPCAwLjI6CisgICAgICAgICAgICAgICAgICAgIGlmIGsgaW4gZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBkW2tdCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgZltrXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHYgPSByYW5kb20uY2hvaWNlKCdhYmMnKSAqIHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDApCisgICAgICAgICAgICAgICAgICAgIGRba10gPSB2CisgICAgICAgICAgICAgICAgICAgIGZba10gPSB2CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZltrXSwgdikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gZC5pdGVtcygpCisgICAgICAgICAgICBleHBlY3RlZC5zb3J0KCkKKyAgICAgICAgICAgIGdvdCA9IGYuaXRlbXMoKQorICAgICAgICAgICAgZ290LnNvcnQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIF9kZWxldGVfZmlsZXMoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBfZGVsZXRlX2ZpbGVzKCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRyeToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChEdW1iREJNVGVzdENhc2UpCisgICAgZmluYWxseToKKyAgICAgICAgX2RlbGV0ZV9maWxlcygpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2R1bW15X3RocmVhZC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2R1bW15X3RocmVhZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWJkZDNjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkLnB5CkBAIC0wLDAgKzEsMTgyIEBACisiIiJHZW5lcmljIHRocmVhZCB0ZXN0cy4KKworTWVhbnQgdG8gYmUgdXNlZCBieSBkdW1teV90aHJlYWQgYW5kIHRocmVhZC4gIFRvIGFsbG93IGZvciBkaWZmZXJlbnQgbW9kdWxlcwordG8gYmUgdXNlZCwgdGVzdF9tYWluKCkgY2FuIGJlIGNhbGxlZCB3aXRoIHRoZSBtb2R1bGUgdG8gdXNlIGFzIHRoZSB0aHJlYWQKK2ltcGxlbWVudGF0aW9uIGFzIGl0cyBzb2xlIGFyZ3VtZW50LgorCisiIiIKK2ltcG9ydCBkdW1teV90aHJlYWQgYXMgX3RocmVhZAoraW1wb3J0IHRpbWUKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitERUxBWSA9IDAgIyBTZXQgPiAwIHdoZW4gdGVzdGluZyBhIG1vZHVsZSBvdGhlciB0aGFuIGR1bW15X3RocmVhZCwgc3VjaCBhcworICAgICAgICAgICMgdGhlICd0aHJlYWQnIG1vZHVsZS4KKworY2xhc3MgTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGxvY2sgb2JqZWN0cy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSBsb2NrCisgICAgICAgIHNlbGYubG9jayA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpCisKKyAgICBkZWYgdGVzdF9pbml0bG9jayhzZWxmKToKKyAgICAgICAgI01ha2Ugc3VyZSBsb2NrcyBzdGFydCBsb2NrZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmxvY2subG9ja2VkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAiTG9jayBvYmplY3QgaXMgbm90IGluaXRpYWxpemVkIHVubG9ja2VkLiIpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2VsZi5sb2NrLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmxvY2suYWNxdWlyZSgpCisgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmxvY2subG9ja2VkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAiTG9jayBvYmplY3QgZGlkIG5vdCByZWxlYXNlIHByb3Blcmx5LiIpCisKKyAgICBkZWYgdGVzdF9pbXByb3Blcl9yZWxlYXNlKHNlbGYpOgorICAgICAgICAjTWFrZSBzdXJlIHJlbGVhc2Ugb2YgYW4gdW5sb2NrZWQgdGhyZWFkIHJhaXNlcyBfdGhyZWFkLmVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKF90aHJlYWQuZXJyb3IsIHNlbGYubG9jay5yZWxlYXNlKQorCisgICAgZGVmIHRlc3RfY29uZF9hY3F1aXJlX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgICNNYWtlIHN1cmUgdGhlIGNvbmRpdGlvbmFsIGFjcXVpcmluZyBvZiB0aGUgbG9jayB3b3Jrcy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9jay5hY3F1aXJlKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbmRpdGlvbmFsIGFjcXVpcmluZyBvZiB0aGUgbG9jayBmYWlsZWQuIikKKworICAgIGRlZiB0ZXN0X2NvbmRfYWNxdWlyZV9mYWlsKHNlbGYpOgorICAgICAgICAjVGVzdCBhY3F1aXJpbmcgbG9ja2VkIGxvY2sgcmV0dXJucyBGYWxzZQorICAgICAgICBzZWxmLmxvY2suYWNxdWlyZSgwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYubG9jay5hY3F1aXJlKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbmRpdGlvbmFsIGFjcXVpcmluZyBvZiBhIGxvY2tlZCBsb2NrIGluY29ycmVjdGx5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3VjY2VlZGVkLiIpCisKKyAgICBkZWYgdGVzdF91bmNvbmRfYWNxdWlyZV9zdWNjZXNzKHNlbGYpOgorICAgICAgICAjTWFrZSBzdXJlIHVuY29uZGl0aW9uYWwgYWNxdWlyaW5nIG9mIGEgbG9jayB3b3Jrcy4KKyAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb2NrLmxvY2tlZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIlVuY29uZGlvbmFsIGxvY2tpbmcgZmFpbGVkLiIpCisKKyAgICBkZWYgdGVzdF91bmNvbmRfYWNxdWlyZV9yZXR1cm5fdmFsKHNlbGYpOgorICAgICAgICAjTWFrZSBzdXJlIHRoYXQgYW4gdW5jb25kaXRpb25hbCBsb2NraW5nIHJldHVybnMgVHJ1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9jay5hY3F1aXJlKDEpIGlzIFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAiVW5jb25kaXRpb25hbCBsb2NraW5nIGRpZCBub3QgcmV0dXJuIFRydWUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9jay5hY3F1aXJlKCkgaXMgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3VuY29uZF9hY3F1aXJlX2Jsb2NraW5nKHNlbGYpOgorICAgICAgICAjTWFrZSBzdXJlIHRoYXQgdW5jb25kaXRpb25hbCBhY3F1aXJpbmcgb2YgYSBsb2NrZWQgbG9jayBibG9ja3MuCisgICAgICAgIGRlZiBkZWxheV91bmxvY2sodG9fdW5sb2NrLCBkZWxheSk6CisgICAgICAgICAgICAiIiJIb2xkIG9uIHRvIGxvY2sgZm9yIGEgc2V0IGFtb3VudCBvZiB0aW1lIGJlZm9yZSB1bmxvY2tpbmcuIiIiCisgICAgICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQorICAgICAgICAgICAgdG9fdW5sb2NrLnJlbGVhc2UoKQorCisgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKCkKKyAgICAgICAgc3RhcnRfdGltZSA9IGludCh0aW1lLnRpbWUoKSkKKyAgICAgICAgX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKGRlbGF5X3VubG9jaywoc2VsZi5sb2NrLCBERUxBWSkpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHByaW50ICIqKiogV2FpdGluZyBmb3IgdGhyZWFkIHRvIHJlbGVhc2UgdGhlIGxvY2sgIlwKKyAgICAgICAgICAgICIoYXBwcm94LiAlcyBzZWMuKSAqKioiICUgREVMQVkKKyAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoKQorICAgICAgICBlbmRfdGltZSA9IGludCh0aW1lLnRpbWUoKSkKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiZG9uZSIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmRfdGltZSAtIHN0YXJ0X3RpbWUpID49IERFTEFZLAorICAgICAgICAgICAgICAgICAgICAgICAgIkJsb2NraW5nIGJ5IHVuY29uZGl0aW9uYWwgYWNxdWlyaW5nIGZhaWxlZC4iKQorCitjbGFzcyBNaXNjVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIk1pc2NlbGxhbmVvdXMgdGVzdHMuIiIiCisKKyAgICBkZWYgdGVzdF9leGl0KHNlbGYpOgorICAgICAgICAjTWFrZSBzdXJlIF90aHJlYWQuZXhpdCgpIHJhaXNlcyBTeXN0ZW1FeGl0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIF90aHJlYWQuZXhpdCkKKworICAgIGRlZiB0ZXN0X2lkZW50KHNlbGYpOgorICAgICAgICAjVGVzdCBzYW5pdHkgb2YgX3RocmVhZC5nZXRfaWRlbnQoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoX3RocmVhZC5nZXRfaWRlbnQoKSwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuZ2V0X2lkZW50KCkgcmV0dXJuZWQgYSBub24taW50ZWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfdGhyZWFkLmdldF9pZGVudCgpICE9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAiX3RocmVhZC5nZXRfaWRlbnQoKSByZXR1cm5lZCAwIikKKworICAgIGRlZiB0ZXN0X0xvY2tUeXBlKHNlbGYpOgorICAgICAgICAjTWFrZSBzdXJlIF90aHJlYWQuTG9ja1R5cGUgaXMgdGhlIHNhbWUgdHlwZSBhcyBfdGhyZWFkLmFsbG9jYXRlX2xvY2tlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKF90aHJlYWQuYWxsb2NhdGVfbG9jaygpLCBfdGhyZWFkLkxvY2tUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuTG9ja1R5cGUgaXMgbm90IGFuIGluc3RhbmNlIG9mIHdoYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIHJldHVybmVkIGJ5IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpIikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdF9tYWluKHNlbGYpOgorICAgICAgICAjQ2FsbGluZyBzdGFydF9uZXdfdGhyZWFkIHdpdGggYSBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIGludGVycnVwdF9tYWluCisgICAgICAgICMgc2hvdWxkIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0IHVwb24gY29tcGxldGlvbi4KKyAgICAgICAgZGVmIGNhbGxfaW50ZXJydXB0KCk6CisgICAgICAgICAgICBfdGhyZWFkLmludGVycnVwdF9tYWluKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfaW50ZXJydXB0LCB0dXBsZSgpKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0X2luX21haW4oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgaWYgaW50ZXJydXB0X21haW4gaXMgY2FsbGVkIGluIG1haW4gdGhyZWF0IHRoYXQKKyAgICAgICAgIyBLZXlib2FyZEludGVycnVwdCBpcyByYWlzZWQgaW5zdGFudGx5LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgX3RocmVhZC5pbnRlcnJ1cHRfbWFpbikKKworY2xhc3MgVGhyZWFkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhyZWFkIGNyZWF0aW9uLiIiIgorCisgICAgZGVmIHRlc3RfYXJnX3Bhc3Npbmcoc2VsZik6CisgICAgICAgICNNYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXIgcGFzc2luZyB3b3Jrcy4KKyAgICAgICAgZGVmIGFyZ190ZXN0ZXIocXVldWUsIGFyZzE9RmFsc2UsIGFyZzI9RmFsc2UpOgorICAgICAgICAgICAgIiIiVXNlIHRvIHRlc3QgX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKCkgcGFzc2VzIGFyZ3MgcHJvcGVybHkuIiIiCisgICAgICAgICAgICBxdWV1ZS5wdXQoKGFyZzEsIGFyZzIpKQorCisgICAgICAgIHRlc3RpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgxKQorICAgICAgICBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoYXJnX3Rlc3RlciwgKHRlc3RpbmdfcXVldWUsIFRydWUsIFRydWUpKQorICAgICAgICByZXN1bHQgPSB0ZXN0aW5nX3F1ZXVlLmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHRbMF0gYW5kIHJlc3VsdFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCBwYXNzaW5nIGZvciB0aHJlYWQgY3JlYXRpb24gdXNpbmcgdHVwbGUgZmFpbGVkIikKKyAgICAgICAgX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKGFyZ190ZXN0ZXIsIHR1cGxlKCksIHsncXVldWUnOnRlc3RpbmdfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyZzEnOlRydWUsICdhcmcyJzpUcnVlfSkKKyAgICAgICAgcmVzdWx0ID0gdGVzdGluZ19xdWV1ZS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0WzBdIGFuZCByZXN1bHRbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgcGFzc2luZyBmb3IgdGhyZWFkIGNyZWF0aW9uIHVzaW5nIGt3YXJncyBmYWlsZWQiKQorICAgICAgICBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoYXJnX3Rlc3RlciwgKHRlc3RpbmdfcXVldWUsIFRydWUpLCB7J2FyZzInOlRydWV9KQorICAgICAgICByZXN1bHQgPSB0ZXN0aW5nX3F1ZXVlLmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHRbMF0gYW5kIHJlc3VsdFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCBwYXNzaW5nIGZvciB0aHJlYWQgY3JlYXRpb24gdXNpbmcgYm90aCB0dXBsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIGt3YXJncyBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfbXVsdGlfY3JlYXRpb24oc2VsZik6CisgICAgICAgICNNYWtlIHN1cmUgbXVsdGlwbGUgdGhyZWFkcyBjYW4gYmUgY3JlYXRlZC4KKyAgICAgICAgZGVmIHF1ZXVlX21hcmsocXVldWUsIGRlbGF5KToKKyAgICAgICAgICAgICIiIldhaXQgZm9yIGBgZGVsYXlgYCBzZWNvbmRzIGFuZCB0aGVuIHB1dCBzb21ldGhpbmcgaW50byBgYHF1ZXVlYGAiIiIKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoZGVsYXkpCisgICAgICAgICAgICBxdWV1ZS5wdXQoX3RocmVhZC5nZXRfaWRlbnQoKSkKKworICAgICAgICB0aHJlYWRfY291bnQgPSA1CisgICAgICAgIHRlc3RpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSh0aHJlYWRfY291bnQpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHByaW50ICIqKiogVGVzdGluZyBtdWx0aXBsZSB0aHJlYWQgY3JlYXRpb24gIlwKKyAgICAgICAgICAgICIod2lsbCB0YWtlIGFwcHJveC4gJXMgdG8gJXMgc2VjLikgKioqIiAlIChERUxBWSwgdGhyZWFkX2NvdW50KQorICAgICAgICBmb3IgY291bnQgaW4geHJhbmdlKHRocmVhZF9jb3VudCk6CisgICAgICAgICAgICBpZiBERUxBWToKKyAgICAgICAgICAgICAgICBsb2NhbF9kZWxheSA9IHJvdW5kKHJhbmRvbS5yYW5kb20oKSwgMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9jYWxfZGVsYXkgPSAwCisgICAgICAgICAgICBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQocXVldWVfbWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdGluZ19xdWV1ZSwgbG9jYWxfZGVsYXkpKQorICAgICAgICB0aW1lLnNsZWVwKERFTEFZKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdkb25lJworICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdGluZ19xdWV1ZS5xc2l6ZSgpID09IHRocmVhZF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJOb3QgYWxsICVzIHRocmVhZHMgZXhlY3V0ZWQgcHJvcGVybHkgYWZ0ZXIgJXMgc2VjLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHRocmVhZF9jb3VudCwgREVMQVkpKQorCitkZWYgdGVzdF9tYWluKGltcG9ydGVkX21vZHVsZT1Ob25lKToKKyAgICBnbG9iYWwgX3RocmVhZCwgREVMQVkKKyAgICBpZiBpbXBvcnRlZF9tb2R1bGU6CisgICAgICAgIF90aHJlYWQgPSBpbXBvcnRlZF9tb2R1bGUKKyAgICAgICAgREVMQVkgPSAyCisgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgIHByaW50CisgICAgICAgIHByaW50ICIqKiogVXNpbmcgJXMgYXMgX3RocmVhZCBtb2R1bGUgKioqIiAlIF90aHJlYWQKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KExvY2tUZXN0cywgTWlzY1Rlc3RzLCBUaHJlYWRUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkaW5nLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNTlkNWYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9kdW1teV90aHJlYWRpbmcucHkKQEAgLTAsMCArMSw2MyBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGR1bW15X3RocmVhZGluZyBhcyBfdGhyZWFkaW5nCitpbXBvcnQgdGltZQorCitjbGFzcyBEdW1teVRocmVhZGluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIFRlc3RUaHJlYWQoX3RocmVhZGluZy5UaHJlYWQpOgorCisgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICBnbG9iYWwgcnVubmluZworICAgICAgICAgICAgZ2xvYmFsIHNlbWEKKyAgICAgICAgICAgIGdsb2JhbCBtdXRleAorICAgICAgICAgICAgIyBVbmNvbW1lbnQgaWYgdGVzdGluZyBhbm90aGVyIG1vZHVsZSwgc3VjaCBhcyB0aGUgcmVhbCAndGhyZWFkaW5nJworICAgICAgICAgICAgIyBtb2R1bGUuCisgICAgICAgICAgICAjZGVsYXkgPSByYW5kb20ucmFuZG9tKCkgKiAyCisgICAgICAgICAgICBkZWxheSA9IDAKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICd0YXNrJywgc2VsZi5uYW1lLCAnd2lsbCBydW4gZm9yJywgZGVsYXksICdzZWMnCisgICAgICAgICAgICBzZW1hLmFjcXVpcmUoKQorICAgICAgICAgICAgbXV0ZXguYWNxdWlyZSgpCisgICAgICAgICAgICBydW5uaW5nICs9IDEKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50IHJ1bm5pbmcsICd0YXNrcyBhcmUgcnVubmluZycKKyAgICAgICAgICAgIG11dGV4LnJlbGVhc2UoKQorICAgICAgICAgICAgdGltZS5zbGVlcChkZWxheSkKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICd0YXNrJywgc2VsZi5uYW1lLCAnZG9uZScKKyAgICAgICAgICAgIG11dGV4LmFjcXVpcmUoKQorICAgICAgICAgICAgcnVubmluZyAtPSAxCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCBzZWxmLm5hbWUsICdpcyBmaW5pc2hlZC4nLCBydW5uaW5nLCAndGFza3MgYXJlIHJ1bm5pbmcnCisgICAgICAgICAgICBtdXRleC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHNlbWEucmVsZWFzZSgpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubnVtdGFza3MgPSAxMAorICAgICAgICBnbG9iYWwgc2VtYQorICAgICAgICBzZW1hID0gX3RocmVhZGluZy5Cb3VuZGVkU2VtYXBob3JlKHZhbHVlPTMpCisgICAgICAgIGdsb2JhbCBtdXRleAorICAgICAgICBtdXRleCA9IF90aHJlYWRpbmcuUkxvY2soKQorICAgICAgICBnbG9iYWwgcnVubmluZworICAgICAgICBydW5uaW5nID0gMAorICAgICAgICBzZWxmLnRocmVhZHMgPSBbXQorCisgICAgZGVmIHRlc3RfdGFza3Moc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYubnVtdGFza3MpOgorICAgICAgICAgICAgdCA9IHNlbGYuVGVzdFRocmVhZChuYW1lPSI8dGhyZWFkICVkPiIlaSkKKyAgICAgICAgICAgIHNlbGYudGhyZWFkcy5hcHBlbmQodCkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ3dhaXRpbmcgZm9yIGFsbCB0YXNrcyB0byBjb21wbGV0ZScKKyAgICAgICAgZm9yIHQgaW4gc2VsZi50aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnYWxsIHRhc2tzIGRvbmUnCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KER1bW15VGhyZWFkaW5nVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2VtYWlsLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZW1haWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2ZTBiMAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2VtYWlsLnB5CkBAIC0wLDAgKzEsMTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZW1haWwgcGFja2FnZSB1bml0IHRlc3RzCisKKyMgVGhlIHNwZWNpZmljIHRlc3RzIG5vdyBsaXZlIGluIExpYi9lbWFpbC90ZXN0Citmcm9tIGVtYWlsLnRlc3QudGVzdF9lbWFpbCBpbXBvcnQgc3VpdGUKK2Zyb20gZW1haWwudGVzdC50ZXN0X2VtYWlsX3JlbmFtZWQgaW1wb3J0IHN1aXRlIGFzIHN1aXRlMgorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3Qoc3VpdGUoKSkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KHN1aXRlMigpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3MucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1MWY4MQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2VtYWlsX2NvZGVjcy5weQpAQCAtMCwwICsxLDE1IEBACisjIENvcHlyaWdodCAoQykgMjAwMiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorIyBlbWFpbCBwYWNrYWdlIHVuaXQgdGVzdHMgZm9yIChvcHRpb25hbCkgQXNpYW4gY29kZWNzCisKKyMgVGhlIHNwZWNpZmljIHRlc3RzIG5vdyBsaXZlIGluIExpYi9lbWFpbC90ZXN0Citmcm9tIGVtYWlsLnRlc3QgaW1wb3J0IHRlc3RfZW1haWxfY29kZWNzCitmcm9tIGVtYWlsLnRlc3QgaW1wb3J0IHRlc3RfZW1haWxfY29kZWNzX3JlbmFtZWQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdWl0ZSA9IHRlc3RfZW1haWxfY29kZWNzLnN1aXRlKCkKKyAgICBzdWl0ZS5hZGRUZXN0KHRlc3RfZW1haWxfY29kZWNzX3JlbmFtZWQuc3VpdGUoKSkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KHN1aXRlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9lbWFpbF9yZW5hbWVkLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZW1haWxfcmVuYW1lZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzgxNGRmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZW1haWxfcmVuYW1lZC5weQpAQCAtMCwwICsxLDEyIEBACisjIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGVtYWlsIHBhY2thZ2UgdW5pdCB0ZXN0cworCisjIFRoZSBzcGVjaWZpYyB0ZXN0cyBub3cgbGl2ZSBpbiBMaWIvZW1haWwvdGVzdAorZnJvbSBlbWFpbC50ZXN0LnRlc3RfZW1haWxfcmVuYW1lZCBpbXBvcnQgc3VpdGUKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KHN1aXRlKCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjlmZjc5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CkBAIC0wLDAgKzEsMjU1IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgRzoKKyAgICAnU2VxdWVuY2UgdXNpbmcgX19nZXRpdGVtX18nCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXFuW2ldCisKK2NsYXNzIEk6CisgICAgJ1NlcXVlbmNlIHVzaW5nIGl0ZXJhdG9yIHByb3RvY29sJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPj0gbGVuKHNlbGYuc2Vxbik6IHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgdiA9IHNlbGYuc2VxbltzZWxmLmldCisgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgIHJldHVybiB2CisKK2NsYXNzIElnOgorICAgICdTZXF1ZW5jZSB1c2luZyBpdGVyYXRvciBwcm90b2NvbCBkZWZpbmVkIHdpdGggYSBnZW5lcmF0b3InCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGZvciB2YWwgaW4gc2VsZi5zZXFuOgorICAgICAgICAgICAgeWllbGQgdmFsCisKK2NsYXNzIFg6CisgICAgJ01pc3NpbmcgX19nZXRpdGVtX18gYW5kIF9faXRlcl9fJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaSA+PSBsZW4oc2VsZi5zZXFuKTogcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICB2ID0gc2VsZi5zZXFuW3NlbGYuaV0KKyAgICAgICAgc2VsZi5pICs9IDEKKyAgICAgICAgcmV0dXJuIHYKKworY2xhc3MgRToKKyAgICAnVGVzdCBwcm9wYWdhdGlvbiBvZiBleGNlcHRpb25zJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAzIC8vIDAKKworY2xhc3MgTjoKKyAgICAnSXRlcmF0b3IgbWlzc2luZyBuZXh0KCknCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIEVudW1lcmF0ZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGVudW0gPSBlbnVtZXJhdGUKKyAgICBzZXEsIHJlcyA9ICdhYmMnLCBbKDAsJ2EnKSwgKDEsJ2InKSwgKDIsJ2MnKV0KKworICAgIGRlZiB0ZXN0X2Jhc2ljZnVuY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzZWxmLmVudW0oc2VsZi5zZXEpKSwgc2VsZi5lbnVtKQorICAgICAgICBlID0gc2VsZi5lbnVtKHNlbGYuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZXIoZSksIGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLmVudW0oc2VsZi5zZXEpKSwgc2VsZi5yZXMpCisgICAgICAgIHNlbGYuZW51bS5fX2RvY19fCisKKyAgICBkZWYgdGVzdF9nZXRpdGVtc2VxbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNlbGYuZW51bShHKHNlbGYuc2VxKSkpLCBzZWxmLnJlcykKKyAgICAgICAgZSA9IHNlbGYuZW51bShHKCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgZS5uZXh0KQorCisgICAgZGVmIHRlc3RfaXRlcmF0b3JzZXFuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc2VsZi5lbnVtKEkoc2VsZi5zZXEpKSksIHNlbGYucmVzKQorICAgICAgICBlID0gc2VsZi5lbnVtKEkoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBlLm5leHQpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRvcmdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNlbGYuZW51bShJZyhzZWxmLnNlcSkpKSwgc2VsZi5yZXMpCisgICAgICAgIGUgPSBzZWxmLmVudW0oSWcoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBlLm5leHQpCisKKyAgICBkZWYgdGVzdF9ub25pdGVyYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmVudW0sIFgoc2VsZi5zZXEpKQorCisgICAgZGVmIHRlc3RfaWxsZm9ybWVkaXRlcmFibGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgc2VsZi5lbnVtKE4oc2VsZi5zZXEpKSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9wcm9wYWdhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIHNlbGYuZW51bShFKHNlbGYuc2VxKSkpCisKKyAgICBkZWYgdGVzdF9hcmd1bWVudGNoZWNrKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZW51bSkgIyBubyBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmVudW0sIDEpICMgd3JvbmcgdHlwZSAobm90IGl0ZXJhYmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZW51bSwgJ2FiYycsICdhJykgIyB3cm9uZyB0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5lbnVtLCAnYWJjJywgMiwgMykgIyB0b28gbWFueSBhcmd1bWVudHMKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHVwbGVfcmV1c2Uoc2VsZik6CisgICAgICAgICMgVGVzdHMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIHdoZXJlIHR1cGxlIGlzIHJldXNlZAorICAgICAgICAjIHdoZW5ldmVyIG5vdGhpbmcgZWxzZSBob2xkcyBhIHJlZmVyZW5jZSB0byBpdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBsaXN0KGVudW1lcmF0ZShzZWxmLnNlcSkpKSkpLCBsZW4oc2VsZi5zZXEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBlbnVtZXJhdGUoc2VsZi5zZXEpKSkpLCBtaW4oMSxsZW4oc2VsZi5zZXEpKSkKKworY2xhc3MgTXlFbnVtKGVudW1lcmF0ZSk6CisgICAgcGFzcworCitjbGFzcyBTdWJjbGFzc1Rlc3RDYXNlKEVudW1lcmF0ZVRlc3RDYXNlKToKKworICAgIGVudW0gPSBNeUVudW0KKworY2xhc3MgVGVzdEVtcHR5KEVudW1lcmF0ZVRlc3RDYXNlKToKKworICAgIHNlcSwgcmVzID0gJycsIFtdCisKK2NsYXNzIFRlc3RCaWcoRW51bWVyYXRlVGVzdENhc2UpOgorCisgICAgc2VxID0gcmFuZ2UoMTAsMjAwMDAsMikKKyAgICByZXMgPSB6aXAocmFuZ2UoMjAwMDApLCBzZXEpCisKK2NsYXNzIFRlc3RSZXZlcnNlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgaWYgaSA8IDU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIoaSkKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNQorICAgICAgICBmb3IgZGF0YSBpbiAnYWJjJywgcmFuZ2UoNSksIHR1cGxlKGVudW1lcmF0ZSgnYWJjJykpLCBBKCksIHhyYW5nZSgxLDE3LDUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRhdGEpWzo6LTFdLCBsaXN0KHJldmVyc2VkKGRhdGEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXZlcnNlZCwge30pCisgICAgICAgICMgZG9uJ3QgYWxsb3cga2V5d29yZCBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXZlcnNlZCwgW10sIGE9MSkKKworICAgIGRlZiB0ZXN0X2NsYXNzaWNfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19yZXZlcnNlZF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBbMiwgMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKEEoKSkpLCBbMiwgMV0pCisKKyAgICBkZWYgdGVzdF94cmFuZ2Vfb3B0aW1pemF0aW9uKHNlbGYpOgorICAgICAgICB4ID0geHJhbmdlKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXZlcnNlZCh4KSksIHR5cGUoaXRlcih4KSkpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbm90IGFuIGludGVyZmFjZSByZXF1aXJlbWVudAorICAgICAgICBmcm9tIHRlc3QudGVzdF9pdGVybGVuIGltcG9ydCBsZW4KKyAgICAgICAgZm9yIHMgaW4gKCdoZWxsbycsIHR1cGxlKCdoZWxsbycpLCBsaXN0KCdoZWxsbycpLCB4cmFuZ2UoNSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV2ZXJzZWQocykpLCBsZW4ocykpCisgICAgICAgICAgICByID0gcmV2ZXJzZWQocykKKyAgICAgICAgICAgIGxpc3QocikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLCAwKQorICAgICAgICBjbGFzcyBTZXFXaXRoV2VpcmRMZW46CisgICAgICAgICAgICBjYWxsZWQgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuY2FsbGVkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEwCisgICAgICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4CisgICAgICAgIHIgPSByZXZlcnNlZChTZXFXaXRoV2VpcmRMZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxlbiwgcikKKworCisgICAgZGVmIHRlc3RfZ2Moc2VsZik6CisgICAgICAgIGNsYXNzIFNlcToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAxMAorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXgKKyAgICAgICAgcyA9IFNlcSgpCisgICAgICAgIHIgPSByZXZlcnNlZChzKQorICAgICAgICBzLnIgPSByCisKKyAgICBkZWYgdGVzdF9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJldmVyc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJldmVyc2VkLCBbXSwgJ2V4dHJhJykKKworICAgIGRlZiB0ZXN0X2J1ZzEyMjk0Mjkoc2VsZik6CisgICAgICAgICMgdGhpcyBidWcgd2FzIG5ldmVyIGluIHJldmVyc2VkLCBpdCB3YXMgaW4KKyAgICAgICAgIyBQeU9iamVjdF9DYWxsTWV0aG9kLCBhbmQgcmV2ZXJzZWRfbmV3IGNhbGxzIHRoYXQgc29tZXRpbWVzLgorICAgICAgICBpZiBub3QgaGFzYXR0cihzeXMsICJnZXRyZWZjb3VudCIpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHIgPSBmLl9fcmV2ZXJzZWRfXyA9IG9iamVjdCgpCisgICAgICAgIHJjID0gc3lzLmdldHJlZmNvdW50KHIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXZlcnNlZChmKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm9uLWNhbGxhYmxlIF9fcmV2ZXJzZWRfXyBkaWRuJ3QgcmFpc2UhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgc3lzLmdldHJlZmNvdW50KHIpKQorCisgICAgZGVmIHRlc3Rfb2JqbWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyBPYmplY3RzIG11c3QgaGF2ZSBfX2xlbl9fKCkgYW5kIF9fZ2V0aXRlbV9fKCkgaW1wbGVtZW50ZWQuCisgICAgICAgIGNsYXNzIE5vTGVuKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZik6IHJldHVybiAxCisgICAgICAgIG5sID0gTm9MZW4oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJldmVyc2VkLCBubCkKKworICAgICAgICBjbGFzcyBOb0dldEl0ZW0ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gMgorICAgICAgICBuZ2kgPSBOb0dldEl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJldmVyc2VkLCBuZ2kpCisKKworY2xhc3MgRW51bWVyYXRlU3RhcnRUZXN0Q2FzZShFbnVtZXJhdGVUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpY2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBlID0gc2VsZi5lbnVtKHNlbGYuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZXIoZSksIGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLmVudW0oc2VsZi5zZXEpKSwgc2VsZi5yZXMpCisKKworY2xhc3MgVGVzdFN0YXJ0KEVudW1lcmF0ZVN0YXJ0VGVzdENhc2UpOgorCisgICAgZW51bSA9IGxhbWJkYSBzZWxmLCBpOiBlbnVtZXJhdGUoaSwgc3RhcnQ9MTEpCisgICAgc2VxLCByZXMgPSAnYWJjJywgWygxMSwgJ2EnKSwgKDEyLCAnYicpLCAoMTMsICdjJyldCisKKworY2xhc3MgVGVzdExvbmdTdGFydChFbnVtZXJhdGVTdGFydFRlc3RDYXNlKToKKworICAgIGVudW0gPSBsYW1iZGEgc2VsZiwgaTogZW51bWVyYXRlKGksIHN0YXJ0PXN5cy5tYXhpbnQrMSkKKyAgICBzZXEsIHJlcyA9ICdhYmMnLCBbKHN5cy5tYXhpbnQrMSwnYScpLCAoc3lzLm1heGludCsyLCdiJyksCisgICAgICAgICAgICAgICAgICAgICAgIChzeXMubWF4aW50KzMsJ2MnKV0KKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludCBjb3VudHMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZW9mLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZW9mLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MzkxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9lb2YucHkKQEAgLTAsMCArMSwzMiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIiIidGVzdCBzY3JpcHQgZm9yIGEgZmV3IG5ldyBpbnZhbGlkIHRva2VuIGNhdGNoZXMiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBFT0ZUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfRU9GQyhzZWxmKToKKyAgICAgICAgZXhwZWN0ID0gIkVPTCB3aGlsZSBzY2FubmluZyBzdHJpbmcgbGl0ZXJhbCAoPHN0cmluZz4sIGxpbmUgMSkiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2YWwoIiIiJ3RoaXMgaXMgYSB0ZXN0XAorICAgICAgICAgICAgIiIiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG1zZyksIGV4cGVjdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkCisKKyAgICBkZWYgdGVzdF9FT0ZTKHNlbGYpOgorICAgICAgICBleHBlY3QgPSAoIkVPRiB3aGlsZSBzY2FubmluZyB0cmlwbGUtcXVvdGVkIHN0cmluZyBsaXRlcmFsICIKKyAgICAgICAgICAgICAgICAgICIoPHN0cmluZz4sIGxpbmUgMSkiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmFsKCIiIicnJ3RoaXMgaXMgYSB0ZXN0IiIiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG1zZyksIGV4cGVjdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEVPRlRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9lcG9sbC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NmQ5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQpAQCAtMCwwICsxLDIyMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiBUd2lzdGVkIE1hdHJpeCBMYWJvcmF0b3JpZXMuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworIyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyMgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworIyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisjIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyMgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorIyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisjIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorIyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorIyBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisjIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyMgT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisjIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIiIiCitUZXN0cyBmb3IgZXBvbGwgd3JhcHBlci4KKyIiIgoraW1wb3J0IHNvY2tldAoraW1wb3J0IGVycm5vCitpbXBvcnQgdGltZQoraW1wb3J0IHNlbGVjdAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpZiBub3QgaGFzYXR0cihzZWxlY3QsICJlcG9sbCIpOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0ZXN0IHdvcmtzIG9ubHkgb24gTGludXggMi42IikKKwordHJ5OgorICAgIHNlbGVjdC5lcG9sbCgpCitleGNlcHQgSU9FcnJvciwgZToKKyAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NZUzoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgZXBvbGwoKSIpCisgICAgcmFpc2UKKworY2xhc3MgVGVzdEVQb2xsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJTb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJTb2NrZXQuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICBzZWxmLnNlcnZlclNvY2tldC5saXN0ZW4oMSkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9ucyA9IFtzZWxmLnNlcnZlclNvY2tldF0KKworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igc2t0IGluIHNlbGYuY29ubmVjdGlvbnM6CisgICAgICAgICAgICBza3QuY2xvc2UoKQorCisgICAgZGVmIF9jb25uZWN0ZWRfcGFpcihzZWxmKToKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZWxmLnNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FSU5QUk9HUkVTUykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCisgICAgICAgIHNlcnZlciwgYWRkciA9IHNlbGYuc2VydmVyU29ja2V0LmFjY2VwdCgpCisKKyAgICAgICAgc2VsZi5jb25uZWN0aW9ucy5leHRlbmQoKGNsaWVudCwgc2VydmVyKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudCwgc2VydmVyCisKKyAgICBkZWYgdGVzdF9jcmVhdGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVwID0gc2VsZWN0LmVwb2xsKDE2KQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKHN0cihlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVwLmZpbGVubygpID4gMCwgZXAuZmlsZW5vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXAuY2xvc2VkKQorICAgICAgICBlcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGVwLmZpbGVubykKKworICAgIGRlZiB0ZXN0X2JhZGNyZWF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxlY3QuZXBvbGwsIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxlY3QuZXBvbGwsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxlY3QuZXBvbGwsIFsnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCB7fSkKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgc2VydmVyLCBjbGllbnQgPSBzZWxmLl9jb25uZWN0ZWRfcGFpcigpCisKKyAgICAgICAgZXAgPSBzZWxlY3QuZXBvbGwoMikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXAucmVnaXN0ZXIoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgICAgIGVwLnJlZ2lzdGVyKGNsaWVudC5maWxlbm8oKSwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBlcC5jbG9zZSgpCisKKyAgICAgICAgIyBhZGRpbmcgYnkgb2JqZWN0IHcvIGZpbGVubyB3b3JrcywgdG9vLgorICAgICAgICBlcCA9IHNlbGVjdC5lcG9sbCgyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlcC5yZWdpc3RlcihzZXJ2ZXIsIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQorICAgICAgICAgICAgZXAucmVnaXN0ZXIoY2xpZW50LCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGVwLmNsb3NlKCkKKworICAgICAgICBlcCA9IHNlbGVjdC5lcG9sbCgyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFR5cGVFcnJvcjogYXJndW1lbnQgbXVzdCBiZSBhbiBpbnQsIG9yIGhhdmUgYSBmaWxlbm8oKSBtZXRob2QuCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGVwLnJlZ2lzdGVyLCBvYmplY3QoKSwKKyAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXAucmVnaXN0ZXIsIE5vbmUsCisgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgICAgICAjIFZhbHVlRXJyb3I6IGZpbGUgZGVzY3JpcHRvciBjYW5ub3QgYmUgYSBuZWdhdGl2ZSBpbnRlZ2VyICgtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGVwLnJlZ2lzdGVyLCAtMSwKKyAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgICAgICMgSU9FcnJvcjogW0Vycm5vIDldIEJhZCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGVwLnJlZ2lzdGVyLCAxMDAwMCwKKyAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgICAgICMgcmVnaXN0ZXJpbmcgdHdpY2UgYWxzbyByYWlzZXMgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICBlcC5yZWdpc3RlcihzZXJ2ZXIsIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZXAucmVnaXN0ZXIsIHNlcnZlciwKKyAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGVwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Zyb21mZChzZWxmKToKKyAgICAgICAgc2VydmVyLCBjbGllbnQgPSBzZWxmLl9jb25uZWN0ZWRfcGFpcigpCisKKyAgICAgICAgZXAgPSBzZWxlY3QuZXBvbGwoMikKKyAgICAgICAgZXAyID0gc2VsZWN0LmVwb2xsLmZyb21mZChlcC5maWxlbm8oKSkKKworICAgICAgICBlcDIucmVnaXN0ZXIoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgZXAyLnJlZ2lzdGVyKGNsaWVudC5maWxlbm8oKSwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisKKyAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQorICAgICAgICBldmVudHMyID0gZXAyLnBvbGwoMC45LCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihldmVudHMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihldmVudHMyKSwgMikKKworICAgICAgICBlcC5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVwMi5wb2xsKDEsIDQpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVCQURGLCBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJlcG9sbCBvbiBjbG9zZWQgZmQgZGlkbid0IHJhaXNlIEVCQURGIikKKworICAgIGRlZiB0ZXN0X2NvbnRyb2xfYW5kX3dhaXQoc2VsZik6CisgICAgICAgIGNsaWVudCwgc2VydmVyID0gc2VsZi5fY29ubmVjdGVkX3BhaXIoKQorCisgICAgICAgIGVwID0gc2VsZWN0LmVwb2xsKDE2KQorICAgICAgICBlcC5yZWdpc3RlcihzZXJ2ZXIuZmlsZW5vKCksCisgICAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQgfCBzZWxlY3QuRVBPTExFVCkKKyAgICAgICAgZXAucmVnaXN0ZXIoY2xpZW50LmZpbGVubygpLAorICAgICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUIHwgc2VsZWN0LkVQT0xMRVQpCisKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQorICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4xLCB0aGVuIC0gbm93KQorCisgICAgICAgIGV2ZW50cy5zb3J0KCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbKGNsaWVudC5maWxlbm8oKSwgc2VsZWN0LkVQT0xMT1VUKSwKKyAgICAgICAgICAgICAgICAgICAgKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LkVQT0xMT1VUKV0KKyAgICAgICAgZXhwZWN0ZWQuc29ydCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRoZW4gLSBub3cgPiAwLjAxLCB0aGVuIC0gbm93KQorCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwodGltZW91dD0yLjEsIG1heGV2ZW50cz00KQorICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldmVudHMpCisKKyAgICAgICAgY2xpZW50LnNlbmQoIkhlbGxvISIpCisgICAgICAgIHNlcnZlci5zZW5kKCJ3b3JsZCEhISIpCisKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQorICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSkKKworICAgICAgICBldmVudHMuc29ydCgpCisgICAgICAgIGV4cGVjdGVkID0gWyhjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKSwKKyAgICAgICAgICAgICAgICAgICAgKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpXQorICAgICAgICBleHBlY3RlZC5zb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAgICAgZXAudW5yZWdpc3RlcihjbGllbnQuZmlsZW5vKCkpCisgICAgICAgIGVwLm1vZGlmeShzZXJ2ZXIuZmlsZW5vKCksIHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQorICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSkKKworICAgICAgICBleHBlY3RlZCA9IFsoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGVjdC5lcG9sbCwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGVjdC5lcG9sbCgpLnJlZ2lzdGVyLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4pCisKKyAgICBkZWYgdGVzdF91bnJlZ2lzdGVyX2Nsb3NlZChzZWxmKToKKyAgICAgICAgc2VydmVyLCBjbGllbnQgPSBzZWxmLl9jb25uZWN0ZWRfcGFpcigpCisgICAgICAgIGZkID0gc2VydmVyLmZpbGVubygpCisgICAgICAgIGVwID0gc2VsZWN0LmVwb2xsKDE2KQorICAgICAgICBlcC5yZWdpc3RlcihzZXJ2ZXIpCisKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQorICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorICAgICAgICBlcC51bnJlZ2lzdGVyKGZkKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RVBvbGwpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZXJybm8ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmI4OTE4ZgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5CkBAIC0wLDAgKzEsNDAgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIlRlc3QgdGhlIGVycm5vIG1vZHVsZQorICAgUm9nZXIgRS4gTWFzc2UKKyIiIgorCitpbXBvcnQgZXJybm8KK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworc3RkX2NfZXJyb3JzID0gZnJvemVuc2V0KFsnRURPTScsICdFUkFOR0UnXSkKKworY2xhc3MgRXJybm9BdHRyaWJ1dGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mb3JfaW1wcm9wZXJfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyBObyB1bmV4cGVjdGVkIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIG9uIHRoZSBtb2R1bGUuCisgICAgICAgIGZvciBlcnJvcl9jb2RlIGluIHN0ZF9jX2Vycm9yczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVycm5vLCBlcnJvcl9jb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJybm8gaXMgbWlzc2luZyAlcyIgJSBlcnJvcl9jb2RlKQorCisgICAgZGVmIHRlc3RfdXNpbmdfZXJyb3Jjb2RlKHNlbGYpOgorICAgICAgICAjIEV2ZXJ5IGtleSB2YWx1ZSBpbiBlcnJuby5lcnJvcmNvZGUgc2hvdWxkIGJlIG9uIHRoZSBtb2R1bGUuCisgICAgICAgIGZvciB2YWx1ZSBpbiBlcnJuby5lcnJvcmNvZGUuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJybm8sIHZhbHVlKSwgJ25vICVzIGF0dHIgaW4gZXJybm8nICUgdmFsdWUpCisKKworY2xhc3MgRXJyb3Jjb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlc19pbl9lcnJvcmNvZGUoc2VsZik6CisgICAgICAgIGZvciBhdHRyaWJ1dGUgaW4gZXJybm8uX19kaWN0X18uaXRlcmtleXMoKToKKyAgICAgICAgICAgIGlmIGF0dHJpYnV0ZS5pc3VwcGVyKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihnZXRhdHRyKGVycm5vLCBhdHRyaWJ1dGUpLCBlcnJuby5lcnJvcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8gJXMgYXR0ciBpbiBlcnJuby5lcnJvcmNvZGUnICUgYXR0cmlidXRlKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEVycm5vQXR0cmlidXRlVGVzdHMsIEVycm9yY29kZVRlc3RzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbl92YXJpYXRpb25zLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9uX3ZhcmlhdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZlNzVlOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbl92YXJpYXRpb25zLnB5CkBAIC0wLDAgKzEsMTgwIEBACisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIEV4Y2VwdGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90cnlfZXhjZXB0X2Vsc2VfZmluYWxseShzZWxmKToKKyAgICAgICAgaGl0X2V4Y2VwdCA9IEZhbHNlCisgICAgICAgIGhpdF9lbHNlID0gRmFsc2UKKyAgICAgICAgaGl0X2ZpbmFsbHkgPSBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiwgJ255YWEhJworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoaXRfZXhjZXB0ID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGl0X2Vsc2UgPSBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBoaXRfZmluYWxseSA9IFRydWUKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2V4Y2VwdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9maW5hbGx5KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhpdF9lbHNlKQorCisgICAgZGVmIHRlc3RfdHJ5X2V4Y2VwdF9lbHNlX2ZpbmFsbHlfbm9fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBoaXRfZXhjZXB0ID0gRmFsc2UKKyAgICAgICAgaGl0X2Vsc2UgPSBGYWxzZQorICAgICAgICBoaXRfZmluYWxseSA9IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoaXRfZXhjZXB0ID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGl0X2Vsc2UgPSBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBoaXRfZmluYWxseSA9IFRydWUKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhpdF9leGNlcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfZmluYWxseSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9lbHNlKQorCisgICAgZGVmIHRlc3RfdHJ5X2V4Y2VwdF9maW5hbGx5KHNlbGYpOgorICAgICAgICBoaXRfZXhjZXB0ID0gRmFsc2UKKyAgICAgICAgaGl0X2ZpbmFsbHkgPSBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiwgJ3lhcnIhJworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoaXRfZXhjZXB0ID0gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaGl0X2ZpbmFsbHkgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9leGNlcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfZmluYWxseSkKKworICAgIGRlZiB0ZXN0X3RyeV9leGNlcHRfZmluYWxseV9ub19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGhpdF9leGNlcHQgPSBGYWxzZQorICAgICAgICBoaXRfZmluYWxseSA9IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoaXRfZXhjZXB0ID0gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaGl0X2ZpbmFsbHkgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoaXRfZXhjZXB0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2ZpbmFsbHkpCisKKyAgICBkZWYgdGVzdF90cnlfZXhjZXB0KHNlbGYpOgorICAgICAgICBoaXRfZXhjZXB0ID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sICdhaG95IScKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaGl0X2V4Y2VwdCA9IFRydWUKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2V4Y2VwdCkKKworICAgIGRlZiB0ZXN0X3RyeV9leGNlcHRfbm9fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBoaXRfZXhjZXB0ID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGhpdF9leGNlcHQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoaXRfZXhjZXB0KQorCisgICAgZGVmIHRlc3RfdHJ5X2V4Y2VwdF9lbHNlKHNlbGYpOgorICAgICAgICBoaXRfZXhjZXB0ID0gRmFsc2UKKyAgICAgICAgaGl0X2Vsc2UgPSBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiwgJ2ZvbyEnCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGhpdF9leGNlcHQgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoaXRfZWxzZSA9IFRydWUKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhpdF9lbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2V4Y2VwdCkKKworICAgIGRlZiB0ZXN0X3RyeV9leGNlcHRfZWxzZV9ub19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGhpdF9leGNlcHQgPSBGYWxzZQorICAgICAgICBoaXRfZWxzZSA9IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoaXRfZXhjZXB0ID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGl0X2Vsc2UgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoaXRfZXhjZXB0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2Vsc2UpCisKKyAgICBkZWYgdGVzdF90cnlfZmluYWxseV9ub19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGhpdF9maW5hbGx5ID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBoaXRfZmluYWxseSA9IFRydWUKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2ZpbmFsbHkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWQoc2VsZik6CisgICAgICAgIGhpdF9maW5hbGx5ID0gRmFsc2UKKyAgICAgICAgaGl0X2lubmVyX2V4Y2VwdCA9IEZhbHNlCisgICAgICAgIGhpdF9pbm5lcl9maW5hbGx5ID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCAnaW5uZXIgZXhjZXB0aW9uJworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGhpdF9pbm5lcl9leGNlcHQgPSBUcnVlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGhpdF9pbm5lcl9maW5hbGx5ID0gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaGl0X2ZpbmFsbHkgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9pbm5lcl9leGNlcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfaW5uZXJfZmluYWxseSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9maW5hbGx5KQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2Vsc2Uoc2VsZik6CisgICAgICAgIGhpdF9lbHNlID0gRmFsc2UKKyAgICAgICAgaGl0X2ZpbmFsbHkgPSBGYWxzZQorICAgICAgICBoaXRfZXhjZXB0ID0gRmFsc2UKKyAgICAgICAgaGl0X2lubmVyX2V4Y2VwdCA9IEZhbHNlCisgICAgICAgIGhpdF9pbm5lcl9lbHNlID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGhpdF9pbm5lcl9leGNlcHQgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhpdF9pbm5lcl9lbHNlID0gVHJ1ZQorCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sICdvdXRlciBleGNlcHRpb24nCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGhpdF9leGNlcHQgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoaXRfZWxzZSA9IFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGhpdF9maW5hbGx5ID0gVHJ1ZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGl0X2lubmVyX2V4Y2VwdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9pbm5lcl9lbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhpdF9lbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2ZpbmFsbHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfZXhjZXB0KQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvblRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg1Y2JhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQpAQCAtMCwwICsxLDY0NiBAQAorIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCA1LCBidWlsdC1pbiBleGNlcHRpb25zCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcGlja2xlLCBjUGlja2xlCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChURVNURk4sIHVubGluaywgcnVuX3VuaXR0ZXN0LCBjYXB0dXJlZF9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MsIGNweXRob25fb25seSkKK2Zyb20gdGVzdC50ZXN0X3BlcDM1MiBpbXBvcnQgaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCisKKyMgWFhYIFRoaXMgaXMgbm90IHJlYWxseSBlbm91Z2gsIGVhY2ggKm9wZXJhdGlvbiogc2hvdWxkIGJlIHRlc3RlZCEKKworY2xhc3MgRXhjZXB0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RSZWxvYWQoc2VsZik6CisgICAgICAgICMgUmVsb2FkaW5nIHRoZSBidWlsdC1pbiBleGNlcHRpb25zIG1vZHVsZSBmYWlsZWQgcHJpb3IgdG8gUHkyLjIsIHdoaWxlIGl0CisgICAgICAgICMgc2hvdWxkIGFjdCB0aGUgc2FtZSBhcyByZWxvYWRpbmcgYnVpbHQtaW4gc3lzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIGltcCBpbXBvcnQgcmVsb2FkCisgICAgICAgICAgICBpbXBvcnQgZXhjZXB0aW9ucworICAgICAgICAgICAgcmVsb2FkKGV4Y2VwdGlvbnMpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVsb2FkaW5nIGV4Y2VwdGlvbnM6ICVzIiAlIGUpCisKKyAgICBkZWYgcmFpc2VfY2F0Y2goc2VsZiwgZXhjLCBleGNuYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgZXhjLCAic3BhbSIKKyAgICAgICAgZXhjZXB0IGV4YywgZXJyOgorICAgICAgICAgICAgYnVmMSA9IHN0cihlcnIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIGV4Yygic3BhbSIpCisgICAgICAgIGV4Y2VwdCBleGMsIGVycjoKKyAgICAgICAgICAgIGJ1ZjIgPSBzdHIoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZjEsIGJ1ZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLl9fbmFtZV9fLCBleGNuYW1lKQorCisgICAgZGVmIHRlc3RSYWlzaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKEF0dHJpYnV0ZUVycm9yLCAiQXR0cmlidXRlRXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgc3lzLCAidW5kZWZpbmVkX2F0dHJpYnV0ZSIpCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChFT0ZFcnJvciwgIkVPRkVycm9yIikKKyAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3cnKQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIGZwID0gb3BlbihURVNURk4sICdyJykKKyAgICAgICAgc2F2ZXN0ZGluID0gc3lzLnN0ZGluCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeXMuc3RkaW4gPSBmcAorICAgICAgICAgICAgICAgIHggPSByYXdfaW5wdXQoKQorICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IHNhdmVzdGRpbgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKElPRXJyb3IsICJJT0Vycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgb3BlbiwgJ3RoaXMgZmlsZSBkb2VzIG5vdCBleGlzdCcsICdyJykKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKEltcG9ydEVycm9yLCAiSW1wb3J0RXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgX19pbXBvcnRfXywgInVuZGVmaW5lZF9tb2R1bGUiKQorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goSW5kZXhFcnJvciwgIkluZGV4RXJyb3IiKQorICAgICAgICB4ID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgeC5fX2dldGl0ZW1fXywgMTApCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChLZXlFcnJvciwgIktleUVycm9yIikKKyAgICAgICAgeCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCB4Ll9fZ2V0aXRlbV9fLCAna2V5JykKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKEtleWJvYXJkSW50ZXJydXB0LCAiS2V5Ym9hcmRJbnRlcnJ1cHQiKQorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goTWVtb3J5RXJyb3IsICJNZW1vcnlFcnJvciIpCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChOYW1lRXJyb3IsICJOYW1lRXJyb3IiKQorICAgICAgICB0cnk6IHggPSB1bmRlZmluZWRfdmFyaWFibGUKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjogcGFzcworCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goT3ZlcmZsb3dFcnJvciwgIk92ZXJmbG93RXJyb3IiKQorICAgICAgICB4ID0gMQorICAgICAgICBmb3IgZHVtbXkgaW4gcmFuZ2UoMTI4KToKKyAgICAgICAgICAgIHggKz0geCAgIyB0aGlzIHNpbXBseSBzaG91bGRuJ3QgYmxvdyB1cAorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goUnVudGltZUVycm9yLCAiUnVudGltZUVycm9yIikKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKFN5bnRheEVycm9yLCAiU3ludGF4RXJyb3IiKQorICAgICAgICB0cnk6IGV4ZWMgJy9cbicKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOiBwYXNzCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChJbmRlbnRhdGlvbkVycm9yLCAiSW5kZW50YXRpb25FcnJvciIpCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChUYWJFcnJvciwgIlRhYkVycm9yIikKKyAgICAgICAgIyBjYW4gb25seSBiZSB0ZXN0ZWQgdW5kZXIgLXR0LCBhbmQgaXMgdGhlIG9ubHkgdGVzdCBmb3IgLXR0CisgICAgICAgICN0cnk6IGNvbXBpbGUoInRyeTpcblx0MS8wXG4gICAgXHQxLzBcbmZpbmFsbHk6XG4gcGFzc1xuIiwgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICAjZXhjZXB0IFRhYkVycm9yOiBwYXNzCisgICAgICAgICNlbHNlOiBzZWxmLmZhaWwoIlRhYkVycm9yIG5vdCByYWlzZWQiKQorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goU3lzdGVtRXJyb3IsICJTeXN0ZW1FcnJvciIpCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChTeXN0ZW1FeGl0LCAiU3lzdGVtRXhpdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIHN5cy5leGl0LCAwKQorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goVHlwZUVycm9yLCAiVHlwZUVycm9yIikKKyAgICAgICAgdHJ5OiBbXSArICgpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKFZhbHVlRXJyb3IsICJWYWx1ZUVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2hyLCAxMDAwMCkKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKFplcm9EaXZpc2lvbkVycm9yLCAiWmVyb0RpdmlzaW9uRXJyb3IiKQorICAgICAgICB0cnk6IHggPSAxIC8vIDAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOiBwYXNzCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChFeGNlcHRpb24sICJFeGNlcHRpb24iKQorICAgICAgICB0cnk6IHggPSAxIC8vIDAKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZTogcGFzcworCisgICAgZGVmIHRlc3RTeW50YXhFcnJvck1lc3NhZ2Uoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIHRoZSByaWdodCBleGNlcHRpb24gbWVzc2FnZSBpcyByYWlzZWQgZm9yIGVhY2ggb2YKKyAgICAgICAgIyB0aGVzZSBjb2RlIGZyYWdtZW50cworCisgICAgICAgIGRlZiBja21zZyhzcmMsIG1zZyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29tcGlsZShzcmMsICc8ZnJhZ21lbnQ+JywgJ2V4ZWMnKQorICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBlOgorICAgICAgICAgICAgICAgIGlmIGUubXNnICE9IG1zZzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCAlcywgZ290ICVzIiAlIChtc2csIGUubXNnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJmYWlsZWQgdG8gZ2V0IGV4cGVjdGVkIFN5bnRheEVycm9yIikKKworICAgICAgICBzID0gJycnd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlJycnCisKKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CisgICAgICAgICAgICBja21zZyhzLCAiJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlIikKKworICAgICAgICBzID0gJycnaWYgMToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcycnJworCisgICAgICAgIGNrbXNnKHMsICInY29udGludWUnIG5vdCBwcm9wZXJseSBpbiBsb29wIikKKyAgICAgICAgY2ttc2coImNvbnRpbnVlXG4iLCAiJ2NvbnRpbnVlJyBub3QgcHJvcGVybHkgaW4gbG9vcCIpCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RTZXR0aW5nRXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhhdCBzZXR0aW5nIGFuIGV4Y2VwdGlvbiBhdCB0aGUgQyBsZXZlbCB3b3JrcyBldmVuIGlmIHRoZQorICAgICAgICAjIGV4Y2VwdGlvbiBvYmplY3QgY2FuJ3QgYmUgY29uc3RydWN0ZWQuCisKKyAgICAgICAgY2xhc3MgQmFkRXhjZXB0aW9uOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGZfKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJjYW4ndCBpbnN0YW50aWF0ZSBCYWRFeGNlcHRpb24iCisKKyAgICAgICAgZGVmIHRlc3RfY2FwaTEoKToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBfdGVzdGNhcGkucmFpc2VfZXhjZXB0aW9uKEJhZEV4Y2VwdGlvbiwgMSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBleGMsIGVyciwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgIGNvID0gdGIudGJfZnJhbWUuZl9jb2RlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19uYW1lLCAidGVzdF9jYXBpMSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvLmNvX2ZpbGVuYW1lLmVuZHN3aXRoKCd0ZXN0X2V4Y2VwdGlvbnMnK29zLmV4dHNlcCsncHknKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBleGNlcHRpb24iKQorCisgICAgICAgIGRlZiB0ZXN0X2NhcGkyKCk6CisgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX2V4Y2VwdGlvbihCYWRFeGNlcHRpb24sIDApCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgZXhjLCBlcnIsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBjbyA9IHRiLnRiX2ZyYW1lLmZfY29kZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28uY29fbmFtZSwgIl9faW5pdF9fIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY28uY29fZmlsZW5hbWUuZW5kc3dpdGgoJ3Rlc3RfZXhjZXB0aW9ucycrb3MuZXh0c2VwKydweScpKQorICAgICAgICAgICAgICAgIGNvMiA9IHRiLnRiX2ZyYW1lLmZfYmFjay5mX2NvZGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvMi5jb19uYW1lLCAidGVzdF9jYXBpMiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgZXhjZXB0aW9uIikKKworICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKKyAgICAgICAgICAgIHRlc3RfY2FwaTEoKQorICAgICAgICAgICAgdGVzdF9jYXBpMigpCisKKyAgICBkZWYgdGVzdF9XaW5kb3dzRXJyb3Ioc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFdpbmRvd3NFcnJvcgorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoV2luZG93c0Vycm9yKDEwMDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMDAxIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFdpbmRvd3NFcnJvcigxMDAxLCAibWVzc2FnZSIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbRXJyb3IgMTAwMV0gbWVzc2FnZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFdpbmRvd3NFcnJvcigxMDAxLCAibWVzc2FnZSIpLmVycm5vLCAyMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoV2luZG93c0Vycm9yKDEwMDEsICJtZXNzYWdlIikud2luZXJyb3IsIDEwMDEpCisKKyAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCisgICAgZGVmIHRlc3RBdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhhdCBleGNlcHRpb24gYXR0cmlidXRlcyBhcmUgaGFwcHkKKworICAgICAgICBleGNlcHRpb25MaXN0ID0gWworICAgICAgICAgICAgKEJhc2VFeGNlcHRpb24sICgpLCB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgpfSksCisgICAgICAgICAgICAoQmFzZUV4Y2VwdGlvbiwgKDEsICksIHsnbWVzc2FnZScgOiAxLCAnYXJncycgOiAoMSwpfSksCisgICAgICAgICAgICAoQmFzZUV4Y2VwdGlvbiwgKCdmb28nLCksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICdmb28nLCAnYXJncycgOiAoJ2ZvbycsKX0pLAorICAgICAgICAgICAgKEJhc2VFeGNlcHRpb24sICgnZm9vJywgMSksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2ZvbycsIDEpfSksCisgICAgICAgICAgICAoU3lzdGVtRXhpdCwgKCdmb28nLCksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICdmb28nLCAnYXJncycgOiAoJ2ZvbycsKSwgJ2NvZGUnIDogJ2Zvbyd9KSwKKyAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsKSwKKyAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJ2ZvbycsICdhcmdzJyA6ICgnZm9vJywpLCAnZmlsZW5hbWUnIDogTm9uZSwKKyAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6IE5vbmUsICdzdHJlcnJvcicgOiBOb25lfSksCisgICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJyksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCisgICAgICAgICAgICAgICAgICdlcnJubycgOiAnZm9vJywgJ3N0cmVycm9yJyA6ICdiYXInfSksCisgICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKCdmb28nLCAnYmFyJyksICdmaWxlbmFtZScgOiAnYmF6JywKKyAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6ICdmb28nLCAnc3RyZXJyb3InIDogJ2Jhcid9KSwKKyAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKSwKKyAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgnZm9vJywgJ2JhcicsICdiYXonLCAncXV1eCcpfSksCisgICAgICAgICAgICAoRW52aXJvbm1lbnRFcnJvciwgKCdlcnJub1N0cicsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKCdlcnJub1N0cicsICdzdHJFcnJvclN0cicpLAorICAgICAgICAgICAgICAgICAnc3RyZXJyb3InIDogJ3N0ckVycm9yU3RyJywgJ2Vycm5vJyA6ICdlcnJub1N0cicsCisgICAgICAgICAgICAgICAgICdmaWxlbmFtZScgOiAnZmlsZW5hbWVTdHInfSksCisgICAgICAgICAgICAoRW52aXJvbm1lbnRFcnJvciwgKDEsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKDEsICdzdHJFcnJvclN0cicpLCAnZXJybm8nIDogMSwKKyAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICdmaWxlbmFtZScgOiAnZmlsZW5hbWVTdHInfSksCisgICAgICAgICAgICAoU3ludGF4RXJyb3IsICgpLCB7J21lc3NhZ2UnIDogJycsICdtc2cnIDogTm9uZSwgJ3RleHQnIDogTm9uZSwKKyAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogTm9uZSwgJ2xpbmVubycgOiBOb25lLCAnb2Zmc2V0JyA6IE5vbmUsCisgICAgICAgICAgICAgICAgJ3ByaW50X2ZpbGVfYW5kX2xpbmUnIDogTm9uZX0pLAorICAgICAgICAgICAgKFN5bnRheEVycm9yLCAoJ21zZ1N0cicsKSwKKyAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJ21zZ1N0cicsICdhcmdzJyA6ICgnbXNnU3RyJywpLCAndGV4dCcgOiBOb25lLAorICAgICAgICAgICAgICAgICAncHJpbnRfZmlsZV9hbmRfbGluZScgOiBOb25lLCAnbXNnJyA6ICdtc2dTdHInLAorICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogTm9uZSwgJ2xpbmVubycgOiBOb25lLCAnb2Zmc2V0JyA6IE5vbmV9KSwKKyAgICAgICAgICAgIChTeW50YXhFcnJvciwgKCdtc2dTdHInLCAoJ2ZpbGVuYW1lU3RyJywgJ2xpbmVub1N0cicsICdvZmZzZXRTdHInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHRTdHInKSksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnb2Zmc2V0JyA6ICdvZmZzZXRTdHInLCAndGV4dCcgOiAndGV4dFN0cicsCisgICAgICAgICAgICAgICAgICdhcmdzJyA6ICgnbXNnU3RyJywgKCdmaWxlbmFtZVN0cicsICdsaW5lbm9TdHInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2Zmc2V0U3RyJywgJ3RleHRTdHInKSksCisgICAgICAgICAgICAgICAgICdwcmludF9maWxlX2FuZF9saW5lJyA6IE5vbmUsICdtc2cnIDogJ21zZ1N0cicsCisgICAgICAgICAgICAgICAgICdmaWxlbmFtZScgOiAnZmlsZW5hbWVTdHInLCAnbGluZW5vJyA6ICdsaW5lbm9TdHInfSksCisgICAgICAgICAgICAoU3ludGF4RXJyb3IsICgnbXNnU3RyJywgJ2ZpbGVuYW1lU3RyJywgJ2xpbmVub1N0cicsICdvZmZzZXRTdHInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHRTdHInLCAncHJpbnRfZmlsZV9hbmRfbGluZVN0cicpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ3RleHQnIDogTm9uZSwKKyAgICAgICAgICAgICAgICAgJ2FyZ3MnIDogKCdtc2dTdHInLCAnZmlsZW5hbWVTdHInLCAnbGluZW5vU3RyJywgJ29mZnNldFN0cicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dFN0cicsICdwcmludF9maWxlX2FuZF9saW5lU3RyJyksCisgICAgICAgICAgICAgICAgICdwcmludF9maWxlX2FuZF9saW5lJyA6IE5vbmUsICdtc2cnIDogJ21zZ1N0cicsCisgICAgICAgICAgICAgICAgICdmaWxlbmFtZScgOiBOb25lLCAnbGluZW5vJyA6IE5vbmUsICdvZmZzZXQnIDogTm9uZX0pLAorICAgICAgICAgICAgKFVuaWNvZGVFcnJvciwgKCksIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKCksfSksCisgICAgICAgICAgICAoVW5pY29kZUVuY29kZUVycm9yLCAoJ2FzY2lpJywgdSdhJywgMCwgMSwgJ29yZGluYWwgbm90IGluIHJhbmdlJyksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2FzY2lpJywgdSdhJywgMCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkaW5hbCBub3QgaW4gcmFuZ2UnKSwKKyAgICAgICAgICAgICAgICAgJ2VuY29kaW5nJyA6ICdhc2NpaScsICdvYmplY3QnIDogdSdhJywKKyAgICAgICAgICAgICAgICAgJ3N0YXJ0JyA6IDAsICdyZWFzb24nIDogJ29yZGluYWwgbm90IGluIHJhbmdlJ30pLAorICAgICAgICAgICAgKFVuaWNvZGVEZWNvZGVFcnJvciwgKCdhc2NpaScsICdceGZmJywgMCwgMSwgJ29yZGluYWwgbm90IGluIHJhbmdlJyksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2FzY2lpJywgJ1x4ZmYnLCAwLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRpbmFsIG5vdCBpbiByYW5nZScpLAorICAgICAgICAgICAgICAgICAnZW5jb2RpbmcnIDogJ2FzY2lpJywgJ29iamVjdCcgOiAnXHhmZicsCisgICAgICAgICAgICAgICAgICdzdGFydCcgOiAwLCAncmVhc29uJyA6ICdvcmRpbmFsIG5vdCBpbiByYW5nZSd9KSwKKyAgICAgICAgICAgIChVbmljb2RlVHJhbnNsYXRlRXJyb3IsICh1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIiksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAodSdcdTMwNDInLCAwLCAxLCAnb3VjaCcpLAorICAgICAgICAgICAgICAgICAnb2JqZWN0JyA6IHUnXHUzMDQyJywgJ3JlYXNvbicgOiAnb3VjaCcsCisgICAgICAgICAgICAgICAgICdzdGFydCcgOiAwLCAnZW5kJyA6IDF9KSwKKyAgICAgICAgXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGNlcHRpb25MaXN0LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAoV2luZG93c0Vycm9yLCAoMSwgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKDEsICdzdHJFcnJvclN0cicpLAorICAgICAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICd3aW5lcnJvcicgOiAxLAorICAgICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6IDIyLCAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJ30pCisgICAgICAgICAgICApCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZm9yIGV4YywgYXJncywgZXhwZWN0ZWQgaW4gZXhjZXB0aW9uTGlzdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBleGMoKmFyZ3MpCisgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGUpIGlzIG5vdCBleGM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIyBWZXJpZnkgbW9kdWxlIG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZSkuX19tb2R1bGVfXywgJ2V4Y2VwdGlvbnMnKQorICAgICAgICAgICAgICAgICMgVmVyaWZ5IG5vIHJlZiBsZWFrcyBpbiBFeGNfc3RyKCkKKyAgICAgICAgICAgICAgICBzID0gc3RyKGUpCisgICAgICAgICAgICAgICAgZm9yIGNoZWNrQXJnTmFtZSBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGdldGF0dHIoZSwgY2hlY2tBcmdOYW1lKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihleHBlY3RlZFtjaGVja0FyZ05hbWVdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uICIlcyIsIGF0dHJpYnV0ZSAiJXMiJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXByKGUpLCBjaGVja0FyZ05hbWUpKQorCisgICAgICAgICAgICAgICAgIyB0ZXN0IGZvciBwaWNrbGluZyBzdXBwb3J0CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGlja2xlLCBjUGlja2xlOgorICAgICAgICAgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocC5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgPSBwLmxvYWRzKHAuZHVtcHMoZSwgcHJvdG9jb2wpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNoZWNrQXJnTmFtZSBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSByZXByKGdldGF0dHIobmV3LCBjaGVja0FyZ05hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgPSByZXByKGV4cGVjdGVkW2NoZWNrQXJnTmFtZV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIHdhbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGlja2xlZCAiJXIiLCBhdHRyaWJ1dGUgIiVzIicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUsIGNoZWNrQXJnTmFtZSkpCisKKworICAgIGRlZiB0ZXN0RGVwcmVjYXRlZE1lc3NhZ2VBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgQWNjZXNzaW5nIEJhc2VFeGNlcHRpb24ubWVzc2FnZSBhbmQgcmVseWluZyBvbiBpdHMgdmFsdWUgc2V0IGJ5CisgICAgICAgICMgQmFzZUV4Y2VwdGlvbi5fX2luaXRfXyB0cmlnZ2VycyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcuCisgICAgICAgIGV4YyA9IEJhc2VFeGNlcHRpb24oImZvbyIpCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCJCYXNlRXhjZXB0aW9uLm1lc3NhZ2UgaGFzIGJlZW4gZGVwcmVjYXRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcyBvZiBQeXRob24gMi42IiwgRGVwcmVjYXRpb25XYXJuaW5nKSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLm1lc3NhZ2UsICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMSkKKworICAgIGRlZiB0ZXN0UmVndWxhck1lc3NhZ2VBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgQWNjZXNzaW5nIEJhc2VFeGNlcHRpb24ubWVzc2FnZSBhZnRlciBleHBsaWNpdGx5IHNldHRpbmcgYSB2YWx1ZQorICAgICAgICAjIGZvciBpdCBkb2VzIG5vdCB0cmlnZ2VyIGEgZGVwcmVjYXRpb24gd2FybmluZy4KKyAgICAgICAgZXhjID0gQmFzZUV4Y2VwdGlvbigiZm9vIikKKyAgICAgICAgZXhjLm1lc3NhZ2UgPSAiYmFyIgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5tZXNzYWdlLCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDApCisgICAgICAgICMgRGVsZXRpbmcgdGhlIG1lc3NhZ2UgaXMgc3VwcG9ydGVkLCB0b28uCisgICAgICAgIGRlbCBleGMubWVzc2FnZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGV4Yy5tZXNzYWdlCisKKyAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCisgICAgZGVmIHRlc3RQaWNrbGVNZXNzYWdlQXR0cmlidXRlKHNlbGYpOgorICAgICAgICAjIFBpY2tsaW5nIHdpdGggbWVzc2FnZSBhdHRyaWJ1dGUgbXVzdCB3b3JrLCBhcyB3ZWxsLgorICAgICAgICBlID0gRXhjZXB0aW9uKCJmb28iKQorICAgICAgICBmID0gRXhjZXB0aW9uKCJmb28iKQorICAgICAgICBmLm1lc3NhZ2UgPSAiYmFyIgorICAgICAgICBmb3IgcCBpbiBwaWNrbGUsIGNQaWNrbGU6CisgICAgICAgICAgICBlcCA9IHAubG9hZHMocC5kdW1wcyhlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXAubWVzc2FnZSwgImZvbyIpCisgICAgICAgICAgICBmcCA9IHAubG9hZHMocC5kdW1wcyhmKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAubWVzc2FnZSwgImJhciIpCisKKyAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCisgICAgZGVmIHRlc3RTbGljaW5nKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB5b3UgY2FuIHNsaWNlIGFuIGV4Y2VwdGlvbiBkaXJlY3RseSBpbnN0ZWFkIG9mIHJlcXVpcmluZworICAgICAgICAjIGdvaW5nIHRocm91Z2ggdGhlICdhcmdzJyBhdHRyaWJ1dGUuCisgICAgICAgIGFyZ3MgPSAoMSwgMiwgMykKKyAgICAgICAgZXhjID0gQmFzZUV4Y2VwdGlvbigqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNbOl0sIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmFyZ3NbOl0sIGFyZ3MpCisKKyAgICBkZWYgdGVzdEtleXdvcmRBcmdzKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhhdCBidWlsdGluIGV4Y2VwdGlvbiBkb24ndCB0YWtlIGtleXdvcmQgYXJncywKKyAgICAgICAgIyBidXQgdXNlci1kZWZpbmVkIHN1YmNsYXNzZXMgY2FuIGlmIHRoZXkgd2FudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEJhc2VFeGNlcHRpb24sIGE9MSkKKworICAgICAgICBjbGFzcyBEZXJpdmVkRXhjZXB0aW9uKEJhc2VFeGNlcHRpb24pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZhbmN5X2FyZyk6CisgICAgICAgICAgICAgICAgQmFzZUV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuZmFuY3lfYXJnID0gZmFuY3lfYXJnCisKKyAgICAgICAgeCA9IERlcml2ZWRFeGNlcHRpb24oZmFuY3lfYXJnPTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZmFuY3lfYXJnLCA0MikKKworICAgIGRlZiB0ZXN0SW5maW5pdGVSZWN1cnNpb24oc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICByZXR1cm4gZigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZikKKworICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBnKCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgICMgVGhlIHRlc3QgcHJpbnRzIGFuIHVucmFpc2FibGUgcmVjdXJzaW9uIGVycm9yIHdoZW4KKyAgICAgICAgIyBkb2luZyAiZXhjZXB0IFZhbHVlRXJyb3IiLCB0aGlzIGlzIGJlY2F1c2Ugc3ViY2xhc3MKKyAgICAgICAgIyBjaGVja2luZyBoYXMgcmVjdXJzaW9uIGNoZWNraW5nIHRvby4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGcoKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgS2V5RXJyb3IiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBLZXlFcnJvciIpCisKKyAgICBkZWYgdGVzdFVuaWNvZGVTdHJVc2FnZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYm90aCBpbnN0YW5jZXMgYW5kIGNsYXNzZXMgaGF2ZSBhIHN0ciBhbmQgdW5pY29kZQorICAgICAgICAjIHJlcHJlc2VudGF0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmljb2RlKEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoRXhjZXB0aW9uKCdhJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pY29kZShFeGNlcHRpb24odSdhJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pY29kZShFeGNlcHRpb24odSdceGUxJykpKQorCisgICAgZGVmIHRlc3RVbmljb2RlQ2hhbmdlQXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgNzMwOS4gVGhpcyB3YXMgYSBjcmFzaGVyLgorCisgICAgICAgIHUgPSBVbmljb2RlRW5jb2RlRXJyb3IoJ2JheicsIHUneHh4eHgnLCAxLCA1LCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICInYmF6JyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVycyBpbiBwb3NpdGlvbiAxLTQ6IGZvbyIpCisgICAgICAgIHUuZW5kID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1KSwgIidiYXonIGNvZGVjIGNhbid0IGVuY29kZSBjaGFyYWN0ZXIgdSdcXHg3OCcgaW4gcG9zaXRpb24gMTogZm9vIikKKyAgICAgICAgdS5lbmQgPSA1CisgICAgICAgIHUucmVhc29uID0gMHgzNDUzNDUzNDUzNDUzNDUzNDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICInYmF6JyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVycyBpbiBwb3NpdGlvbiAxLTQ6IDk2NTIzMDk1MTQ0MzY4NTcyNDk5NyIpCisgICAgICAgIHUuZW5jb2RpbmcgPSA0MDAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiJzQwMDAnIGNvZGVjIGNhbid0IGVuY29kZSBjaGFyYWN0ZXJzIGluIHBvc2l0aW9uIDEtNDogOTY1MjMwOTUxNDQzNjg1NzI0OTk3IikKKyAgICAgICAgdS5zdGFydCA9IDEwMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICInNDAwMCcgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb24gMTAwMC00OiA5NjUyMzA5NTE0NDM2ODU3MjQ5OTciKQorCisgICAgICAgIHUgPSBVbmljb2RlRGVjb2RlRXJyb3IoJ2JheicsICd4eHh4eCcsIDEsIDUsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1KSwgIidiYXonIGNvZGVjIGNhbid0IGRlY29kZSBieXRlcyBpbiBwb3NpdGlvbiAxLTQ6IGZvbyIpCisgICAgICAgIHUuZW5kID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1KSwgIidiYXonIGNvZGVjIGNhbid0IGRlY29kZSBieXRlIDB4NzggaW4gcG9zaXRpb24gMTogZm9vIikKKyAgICAgICAgdS5lbmQgPSA1CisgICAgICAgIHUucmVhc29uID0gMHgzNDUzNDUzNDUzNDUzNDUzNDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICInYmF6JyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZXMgaW4gcG9zaXRpb24gMS00OiA5NjUyMzA5NTE0NDM2ODU3MjQ5OTciKQorICAgICAgICB1LmVuY29kaW5nID0gNDAwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1KSwgIic0MDAwJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZXMgaW4gcG9zaXRpb24gMS00OiA5NjUyMzA5NTE0NDM2ODU3MjQ5OTciKQorICAgICAgICB1LnN0YXJ0ID0gMTAwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1KSwgIic0MDAwJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZXMgaW4gcG9zaXRpb24gMTAwMC00OiA5NjUyMzA5NTE0NDM2ODU3MjQ5OTciKQorCisgICAgICAgIHUgPSBVbmljb2RlVHJhbnNsYXRlRXJyb3IodSd4eHh4JywgMSwgNSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb24gMS00OiBmb28iKQorICAgICAgICB1LmVuZCA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICJjYW4ndCB0cmFuc2xhdGUgY2hhcmFjdGVyIHUnXFx4NzgnIGluIHBvc2l0aW9uIDE6IGZvbyIpCisgICAgICAgIHUuZW5kID0gNQorICAgICAgICB1LnJlYXNvbiA9IDB4MzQ1MzQ1MzQ1MzQ1MzQ1MzQ1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb24gMS00OiA5NjUyMzA5NTE0NDM2ODU3MjQ5OTciKQorICAgICAgICB1LnN0YXJ0ID0gMTAwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1KSwgImNhbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXJzIGluIHBvc2l0aW9uIDEwMDAtNDogOTY1MjMwOTUxNDQzNjg1NzI0OTk3IikKKworICAgIGRlZiB0ZXN0X2JhZGlzaW5zdGFuY2Uoc2VsZik6CisgICAgICAgICMgQnVnICMyNTQyOiBpZiBpc3N1YmNsYXNzKGUsIE15RXhjZXB0aW9uKSByYWlzZXMgYW4gZXhjZXB0aW9uLAorICAgICAgICAjIGl0IHNob3VsZCBiZSBpZ25vcmVkCisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19zdWJjbGFzc2NoZWNrX18oY2xzLCBzdWJjbGFzcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisKKyAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhCisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigpCisgICAgICAgICAgICBleGNlcHQgTXlFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleGNlcHRpb24gc2hvdWxkIG5vdCBiZSBhIE15RXhjZXB0aW9uIikKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgS2V5RXJyb3IiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBLZXlFcnJvciIpCisKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZygpCisgICAgICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBlLCB2LCB0YiA9IGcoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUgaXMgUnVudGltZUVycm9yLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibWF4aW11bSByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQiLCBzdHIodikpCisKKyAgICBkZWYgdGVzdF9uZXdfcmV0dXJuc19pbnZhbGlkX2luc3RhbmNlKHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAjMTE2MjcuCisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0KCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICByYWlzZSBNeUV4Y2VwdGlvbgorCisgICAgZGVmIHRlc3RfYXNzZXJ0X3dpdGhfdHVwbGVfYXJnKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICgzLCkKKyAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIigzLCkiKQorCisgICAgZGVmIHRlc3RfYmFkX2V4Y2VwdGlvbl9jbGVhcmluZyhzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgMTY0NDU6IHVzZSBvZiBQeV9YREVDUkVGIGluc3RlYWQgb2YgUHlfQ0xFQVIgaW4KKyAgICAgICAgIyBCYXNlRXhjZXB0aW9uX3NldF9tZXNzYWdlIGdhdmUgYSBwb3NzaWJsZSB3YXkgdG8gc2VnZmF1bHQgdGhlCisgICAgICAgICMgaW50ZXJwcmV0ZXIuCisgICAgICAgIGNsYXNzIE5hc3R5KHN0cik6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhtZXNzYWdlKToKKyAgICAgICAgICAgICAgICBkZWwgZS5tZXNzYWdlCisKKyAgICAgICAgZSA9IFZhbHVlRXJyb3IoTmFzdHkoIm1zZyIpKQorICAgICAgICBlLmFyZ3MgPSAoKQorICAgICAgICBkZWwgZS5tZXNzYWdlCisKKworIyBIZWxwZXIgY2xhc3MgdXNlZCBieSBUZXN0U2FtZVN0ckFuZFVuaWNvZGVNc2cKK2NsYXNzIEV4Y1dpdGhPdmVycmlkZGVuU3RyKEV4Y2VwdGlvbik6CisgICAgIiIiU3ViY2xhc3Mgb2YgRXhjZXB0aW9uIHRoYXQgYWNjZXB0cyBhIGtleXdvcmQgJ21zZycgYXJnIHRoYXQgaXMKKyAgICByZXR1cm5lZCBieSBfX3N0cl9fLiAnbXNnJyB3b24ndCBiZSBpbmNsdWRlZCBpbiBzZWxmLmFyZ3MiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5tc2cgPSBrd2FyZ3MucG9wKCdtc2cnKSAjIG1zZyBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQKKyAgICAgICAgc3VwZXIoRXhjV2l0aE92ZXJyaWRkZW5TdHIsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubXNnCisKKworY2xhc3MgVGVzdFNhbWVTdHJBbmRVbmljb2RlTXNnKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJ1bmljb2RlKGVycikgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBtZXNzYWdlIG9mIHN0cihlcnIpLiBTZWUgIzYxMDgiIiIKKworICAgIGRlZiBjaGVja19zYW1lX21zZyhzZWxmLCBleGMsIG1zZyk6CisgICAgICAgICIiIkhlbHBlciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBzdHIoZXhjKSA9PSB1bmljb2RlKGV4YykgPT0gbXNnIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGV4YyksIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXhjKSwgdW5pY29kZShleGMpKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbl9leGNlcHRpb25zKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBzYW1lIG1zZyBmb3IgYnVpbHQtaW4gZXhjZXB0aW9ucyIiIgorICAgICAgICAjIFRoZXNlIGV4Y2VwdGlvbnMgaW1wbGVtZW50IGEgX19zdHJfXyBtZXRob2QgdGhhdCB1c2VzIHRoZSBhcmdzCisgICAgICAgICMgdG8gY3JlYXRlIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UuIHVuaWNvZGUoZSkgc2hvdWxkIHJldHVybiB0aGUgc2FtZQorICAgICAgICAjIG1lc3NhZ2UuCisgICAgICAgIGV4Y2VwdGlvbnMgPSBbCisgICAgICAgICAgICBTeW50YXhFcnJvcignaW52YWxpZCBzeW50YXgnLCAoJzxzdHJpbmc+JywgMSwgMywgJzIrKjMnKSksCisgICAgICAgICAgICBJT0Vycm9yKDIsICdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyksCisgICAgICAgICAgICBLZXlFcnJvcignYm90aCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBxdW90ZXMnKSwKKyAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvcignYXNjaWknLCAnXHhjM1x4YTAnLCAwLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpJyksCisgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoJ2FzY2lpJywgdSdcdTEyMzQnLCAwLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpJykKKyAgICAgICAgXQorICAgICAgICBmb3IgZXhjZXB0aW9uIGluIGV4Y2VwdGlvbnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihleGNlcHRpb24pLCB1bmljb2RlKGV4Y2VwdGlvbikpCisKKyAgICBkZWYgdGVzdF8wX2FyZ3Moc2VsZik6CisgICAgICAgICIiIkNoZWNrIHNhbWUgbXNnIGZvciBFeGNlcHRpb24gd2l0aCAwIGFyZ3MiIiIKKyAgICAgICAgIyBzdHIoKSBhbmQgdW5pY29kZSgpIG9uIGFuIEV4Y2VwdGlvbiB3aXRoIG5vIGFyZ3Mgc2hvdWxkIHJldHVybiBhbgorICAgICAgICAjIGVtcHR5IHN0cmluZworICAgICAgICBzZWxmLmNoZWNrX3NhbWVfbXNnKEV4Y2VwdGlvbigpLCAnJykKKworICAgIGRlZiB0ZXN0XzBfYXJnc193aXRoX292ZXJyaWRkZW5fX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgc2FtZSBtc2cgZm9yIGV4Y2VwdGlvbnMgd2l0aCAwIGFyZ3MgYW5kIG92ZXJyaWRkZW4gX19zdHJfXyIiIgorICAgICAgICAjIHN0cigpIGFuZCB1bmljb2RlKCkgb24gYW4gZXhjZXB0aW9uIHdpdGggb3ZlcnJpZGRlbiBfX3N0cl9fIHRoYXQKKyAgICAgICAgIyByZXR1cm5zIGFuIGFzY2lpLW9ubHkgc3RyaW5nIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nCisgICAgICAgIGZvciBtc2cgaW4gKCdmb28nLCB1J2ZvbycpOgorICAgICAgICAgICAgc2VsZi5jaGVja19zYW1lX21zZyhFeGNXaXRoT3ZlcnJpZGRlblN0cihtc2c9bXNnKSwgbXNnKQorCisgICAgICAgICMgaWYgX19zdHJfXyByZXR1cm5zIGEgbm9uLWFzY2lpIHVuaWNvZGUgc3RyaW5nIHN0cigpIHNob3VsZCBmYWlsCisgICAgICAgICMgYnV0IHVuaWNvZGUoKSBzaG91bGQgcmV0dXJuIHRoZSB1bmljb2RlIHN0cmluZworICAgICAgICBlID0gRXhjV2l0aE92ZXJyaWRkZW5TdHIobXNnPXUnZlx4ZjZceGY2JykgIyBubyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgc3RyLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoZSksIHUnZlx4ZjZceGY2JykKKworICAgIGRlZiB0ZXN0XzFfYXJnKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBzYW1lIG1zZyBmb3IgRXhjZXB0aW9ucyB3aXRoIDEgYXJnIiIiCisgICAgICAgIGZvciBhcmcgaW4gKCdmb28nLCB1J2ZvbycpOgorICAgICAgICAgICAgc2VsZi5jaGVja19zYW1lX21zZyhFeGNlcHRpb24oYXJnKSwgYXJnKQorCisgICAgICAgICMgaWYgX19zdHJfXyBpcyBub3Qgb3ZlcnJpZGRlbiBhbmQgc2VsZi5hcmdzWzBdIGlzIGEgbm9uLWFzY2lpIHVuaWNvZGUKKyAgICAgICAgIyBzdHJpbmcsIHN0cigpIHNob3VsZCB0cnkgdG8gcmV0dXJuIHN0cihzZWxmLmFyZ3NbMF0pIGFuZCBmYWlsLgorICAgICAgICAjIHVuaWNvZGUoKSBzaG91bGQgcmV0dXJuIHVuaWNvZGUoc2VsZi5hcmdzWzBdKSBhbmQgc3VjY2VlZC4KKyAgICAgICAgZSA9IEV4Y2VwdGlvbih1J2ZceGY2XHhmNicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgc3RyLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoZSksIHUnZlx4ZjZceGY2JykKKworICAgIGRlZiB0ZXN0XzFfYXJnX3dpdGhfb3ZlcnJpZGRlbl9fX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBzYW1lIG1zZyBmb3IgZXhjZXB0aW9ucyB3aXRoIG92ZXJyaWRkZW4gX19zdHJfXyBhbmQgMSBhcmciIiIKKyAgICAgICAgIyB3aGVuIF9fc3RyX18gaXMgb3ZlcnJpZGRlbiBhbmQgX191bmljb2RlX18gaXMgbm90IGltcGxlbWVudGVkCisgICAgICAgICMgdW5pY29kZShlKSByZXR1cm5zIHRoZSBzYW1lIGFzIHVuaWNvZGUoZS5fX3N0cl9fKCkpLgorICAgICAgICBmb3IgbXNnIGluICgnZm9vJywgdSdmb28nKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FtZV9tc2coRXhjV2l0aE92ZXJyaWRkZW5TdHIoJ2FyZycsIG1zZz1tc2cpLCBtc2cpCisKKyAgICAgICAgIyBpZiBfX3N0cl9fIHJldHVybnMgYSBub24tYXNjaWkgdW5pY29kZSBzdHJpbmcsIHN0cigpIHNob3VsZCBmYWlsCisgICAgICAgICMgYnV0IHVuaWNvZGUoKSBzaG91bGQgc3VjY2VlZC4KKyAgICAgICAgZSA9IEV4Y1dpdGhPdmVycmlkZGVuU3RyKCdhcmcnLCBtc2c9dSdmXHhmNlx4ZjYnKSAjIDEgYXJnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgc3RyLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoZSksIHUnZlx4ZjZceGY2JykKKworICAgIGRlZiB0ZXN0X21hbnlfYXJncyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgc2FtZSBtc2cgZm9yIEV4Y2VwdGlvbnMgd2l0aCBtYW55IGFyZ3MiIiIKKyAgICAgICAgYXJnc2xpc3QgPSBbCisgICAgICAgICAgICAoMywgJ2ZvbycpLAorICAgICAgICAgICAgKDEsIHUnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgKDQsIHUnZlx4ZjZceGY2JywgdSdiYXInLCAnYmF6JykKKyAgICAgICAgXQorICAgICAgICAjIGJvdGggc3RyKCkgYW5kIHVuaWNvZGUoKSBzaG91bGQgcmV0dXJuIGEgcmVwcigpIG9mIHRoZSBhcmdzCisgICAgICAgIGZvciBhcmdzIGluIGFyZ3NsaXN0OgorICAgICAgICAgICAgc2VsZi5jaGVja19zYW1lX21zZyhFeGNlcHRpb24oKmFyZ3MpLCByZXByKGFyZ3MpKQorCisgICAgZGVmIHRlc3RfbWFueV9hcmdzX3dpdGhfb3ZlcnJpZGRlbl9fX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBzYW1lIG1zZyBmb3IgZXhjZXB0aW9ucyB3aXRoIG92ZXJyaWRkZW4gX19zdHJfXyBhbmQgbWFueSBhcmdzIiIiCisgICAgICAgICMgaWYgX19zdHJfXyByZXR1cm5zIGFuIGFzY2lpIHN0cmluZyAvIGFzY2lpIHVuaWNvZGUgc3RyaW5nCisgICAgICAgICMgYm90aCBzdHIoKSBhbmQgdW5pY29kZSgpIHNob3VsZCBzdWNjZWVkCisgICAgICAgIGZvciBtc2cgaW4gKCdmb28nLCB1J2ZvbycpOgorICAgICAgICAgICAgZSA9IEV4Y1dpdGhPdmVycmlkZGVuU3RyKCdhcmcxJywgdSdhcmcyJywgdSdmXHhmNlx4ZjYnLCBtc2c9bXNnKQorICAgICAgICAgICAgc2VsZi5jaGVja19zYW1lX21zZyhlLCBtc2cpCisKKyAgICAgICAgIyBpZiBfX3N0cl9fIHJldHVybnMgYSBub24tYXNjaWkgdW5pY29kZSBzdHJpbmcsIHN0cigpIHNob3VsZCBmYWlsCisgICAgICAgICMgYnV0IHVuaWNvZGUoKSBzaG91bGQgc3VjY2VlZAorICAgICAgICBlID0gRXhjV2l0aE92ZXJyaWRkZW5TdHIoJ2FyZzEnLCB1J2ZceGY2XHhmNicsIHUnYXJnMycsICMgMyBhcmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9dSdmXHhmNlx4ZjYnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIHN0ciwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKGUpLCB1J2ZceGY2XHhmNicpCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX3dpdGhfZG9jKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIGRvYzIgPSAiVGhpcyBpcyBhIHRlc3QgZG9jc3RyaW5nLiIKKyAgICAgICAgZG9jNCA9ICJUaGlzIGlzIGFub3RoZXIgdGVzdCBkb2NzdHJpbmcuIgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUVycm9yLCBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjEiKQorCisgICAgICAgICMgdGVzdCBiYXNpYyB1c2FnZSBvZiBQeUVycl9OZXdFeGNlcHRpb24KKyAgICAgICAgZXJyb3IxID0gX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKCJfdGVzdGNhcGkuZXJyb3IxIikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGVycm9yMSksIHR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGVycm9yMSwgRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZXJyb3IxLl9fZG9jX18pCisKKyAgICAgICAgIyB0ZXN0IHdpdGggZ2l2ZW4gZG9jc3RyaW5nCisgICAgICAgIGVycm9yMiA9IF90ZXN0Y2FwaS5tYWtlX2V4Y2VwdGlvbl93aXRoX2RvYygiX3Rlc3RjYXBpLmVycm9yMiIsIGRvYzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3IyLl9fZG9jX18sIGRvYzIpCisKKyAgICAgICAgIyB0ZXN0IHdpdGggZXhwbGljaXQgYmFzZSAod2l0aG91dCBkb2NzdHJpbmcpCisgICAgICAgIGVycm9yMyA9IF90ZXN0Y2FwaS5tYWtlX2V4Y2VwdGlvbl93aXRoX2RvYygiX3Rlc3RjYXBpLmVycm9yMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlPWVycm9yMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXJyb3IzLCBlcnJvcjIpKQorCisgICAgICAgICMgdGVzdCB3aXRoIGV4cGxpY2l0IGJhc2UgdHVwbGUKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlcnJvcjQgPSBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MoIl90ZXN0Y2FwaS5lcnJvcjQiLCBkb2M0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yMywgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGVycm9yNCwgZXJyb3IzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXJyb3I0LCBDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcjQuX19kb2NfXywgZG9jNCkKKworICAgICAgICAjIHRlc3Qgd2l0aCBleHBsaWNpdCBkaWN0aW9uYXJ5CisgICAgICAgIGVycm9yNSA9IF90ZXN0Y2FwaS5tYWtlX2V4Y2VwdGlvbl93aXRoX2RvYygiX3Rlc3RjYXBpLmVycm9yNSIsICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I0LCB7J2EnOiAxfSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXJyb3I1LCBlcnJvcjQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yNS5hLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yNS5fX2RvY19fLCAiIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvblRlc3RzLCBUZXN0U2FtZVN0ckFuZFVuaWNvZGVNc2cpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZTA5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5CkBAIC0wLDAgKzEsMzE5IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCisiIiJEb2N0ZXN0IGZvciBtZXRob2QvZnVuY3Rpb24gY2FsbHMuCisKK1dlJ3JlIGdvaW5nIHRoZSB1c2UgdGhlc2UgdHlwZXMgZm9yIGV4dHJhIHRlc3RpbmcKKworICAgID4+PiBmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAorICAgID4+PiBmcm9tIFVzZXJEaWN0IGltcG9ydCBVc2VyRGljdAorCitXZSdyZSBkZWZpbmluZyBmb3VyIGhlbHBlciBmdW5jdGlvbnMKKworICAgID4+PiBkZWYgZShhLGIpOgorICAgIC4uLiAgICAgcHJpbnQgYSwgYgorCisgICAgPj4+IGRlZiBmKCphLCAqKmspOgorICAgIC4uLiAgICAgcHJpbnQgYSwgdGVzdF9zdXBwb3J0LnNvcnRkaWN0KGspCisKKyAgICA+Pj4gZGVmIGcoeCwgKnksICoqeik6CisgICAgLi4uICAgICBwcmludCB4LCB5LCB0ZXN0X3N1cHBvcnQuc29ydGRpY3QoeikKKworICAgID4+PiBkZWYgaChqPTEsIGE9MiwgaD0zKToKKyAgICAuLi4gICAgIHByaW50IGosIGEsIGgKKworQXJndW1lbnQgbGlzdCBleGFtcGxlcworCisgICAgPj4+IGYoKQorICAgICgpIHt9CisgICAgPj4+IGYoMSkKKyAgICAoMSwpIHt9CisgICAgPj4+IGYoMSwgMikKKyAgICAoMSwgMikge30KKyAgICA+Pj4gZigxLCAyLCAzKQorICAgICgxLCAyLCAzKSB7fQorICAgID4+PiBmKDEsIDIsIDMsICooNCwgNSkpCisgICAgKDEsIDIsIDMsIDQsIDUpIHt9CisgICAgPj4+IGYoMSwgMiwgMywgKls0LCA1XSkKKyAgICAoMSwgMiwgMywgNCwgNSkge30KKyAgICA+Pj4gZigxLCAyLCAzLCAqVXNlckxpc3QoWzQsIDVdKSkKKyAgICAoMSwgMiwgMywgNCwgNSkge30KKworSGVyZSB3ZSBhZGQga2V5d29yZCBhcmd1bWVudHMKKworICAgID4+PiBmKDEsIDIsIDMsICoqeydhJzo0LCAnYic6NX0pCisgICAgKDEsIDIsIDMpIHsnYSc6IDQsICdiJzogNX0KKyAgICA+Pj4gZigxLCAyLCAzLCAqWzQsIDVdLCAqKnsnYSc6NiwgJ2InOjd9KQorICAgICgxLCAyLCAzLCA0LCA1KSB7J2EnOiA2LCAnYic6IDd9CisgICAgPj4+IGYoMSwgMiwgMywgeD00LCB5PTUsICooNiwgNyksICoqeydhJzo4LCAnYic6IDl9KQorICAgICgxLCAyLCAzLCA2LCA3KSB7J2EnOiA4LCAnYic6IDksICd4JzogNCwgJ3knOiA1fQorCisgICAgPj4+IGYoMSwgMiwgMywgKipVc2VyRGljdChhPTQsIGI9NSkpCisgICAgKDEsIDIsIDMpIHsnYSc6IDQsICdiJzogNX0KKyAgICA+Pj4gZigxLCAyLCAzLCAqKDQsIDUpLCAqKlVzZXJEaWN0KGE9NiwgYj03KSkKKyAgICAoMSwgMiwgMywgNCwgNSkgeydhJzogNiwgJ2InOiA3fQorICAgID4+PiBmKDEsIDIsIDMsIHg9NCwgeT01LCAqKDYsIDcpLCAqKlVzZXJEaWN0KGE9OCwgYj05KSkKKyAgICAoMSwgMiwgMywgNiwgNykgeydhJzogOCwgJ2InOiA5LCAneCc6IDQsICd5JzogNX0KKworRXhhbXBsZXMgd2l0aCBpbnZhbGlkIGFyZ3VtZW50cyAoVHlwZUVycm9ycykuIFdlJ3JlIGFsc28gdGVzdGluZyB0aGUgZnVuY3Rpb24KK25hbWVzIGluIHRoZSBleGNlcHRpb24gbWVzc2FnZXMuCisKK1ZlcmlmeSBjbGVhcmluZyBvZiBTRiBidWcgIzczMzY2NworCisgICAgPj4+IGUoYz00KQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZSgpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJ2MnCisKKyAgICA+Pj4gZygpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBnKCkgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudCAoMCBnaXZlbikKKworICAgID4+PiBnKCooKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGcoKSB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50ICgwIGdpdmVuKQorCisgICAgPj4+IGcoKigpLCAqKnt9KQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZygpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pCisKKyAgICA+Pj4gZygxKQorICAgIDEgKCkge30KKyAgICA+Pj4gZygxLCAyKQorICAgIDEgKDIsKSB7fQorICAgID4+PiBnKDEsIDIsIDMpCisgICAgMSAoMiwgMykge30KKyAgICA+Pj4gZygxLCAyLCAzLCAqKDQsIDUpKQorICAgIDEgKDIsIDMsIDQsIDUpIHt9CisKKyAgICA+Pj4gY2xhc3MgTm90aGluZzogcGFzcworICAgIC4uLgorICAgID4+PiBnKCpOb3RoaW5nKCkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBnKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGEgc2VxdWVuY2UsIG5vdCBpbnN0YW5jZQorCisgICAgPj4+IGNsYXNzIE5vdGhpbmc6CisgICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIDUKKyAgICAuLi4KKworICAgID4+PiBnKCpOb3RoaW5nKCkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBnKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGEgc2VxdWVuY2UsIG5vdCBpbnN0YW5jZQorCisgICAgPj4+IGNsYXNzIE5vdGhpbmcoKToKKyAgICAuLi4gICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gNQorICAgIC4uLiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgIC4uLiAgICAgICAgIGlmIGk8MzogcmV0dXJuIGkKKyAgICAuLi4gICAgICAgICBlbHNlOiByYWlzZSBJbmRleEVycm9yKGkpCisgICAgLi4uCisKKyAgICA+Pj4gZygqTm90aGluZygpKQorICAgIDAgKDEsIDIpIHt9CisKKyAgICA+Pj4gY2xhc3MgTm90aGluZzoKKyAgICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmKTogc2VsZi5jID0gMAorICAgIC4uLiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gc2VsZgorICAgIC4uLiAgICAgZGVmIG5leHQoc2VsZik6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5jID09IDQ6CisgICAgLi4uICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAuLi4gICAgICAgICBjID0gc2VsZi5jCisgICAgLi4uICAgICAgICAgc2VsZi5jICs9IDEKKyAgICAuLi4gICAgICAgICByZXR1cm4gYworICAgIC4uLgorCisgICAgPj4+IGcoKk5vdGhpbmcoKSkKKyAgICAwICgxLCAyLCAzKSB7fQorCitNYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gZG9lc24ndCBzdG9tcCB0aGUgZGljdGlvbmFyeQorCisgICAgPj4+IGQgPSB7J2EnOiAxLCAnYic6IDIsICdjJzogM30KKyAgICA+Pj4gZDIgPSBkLmNvcHkoKQorICAgID4+PiBnKDEsIGQ9NCwgKipkKQorICAgIDEgKCkgeydhJzogMSwgJ2InOiAyLCAnYyc6IDMsICdkJzogNH0KKyAgICA+Pj4gZCA9PSBkMgorICAgIFRydWUKKworV2hhdCBhYm91dCB3aWxsZnVsIG1pc2NvbmR1Y3Q/CisKKyAgICA+Pj4gZGVmIHNhYm90ZXVyKCoqa3cpOgorICAgIC4uLiAgICAga3dbJ3gnXSA9ICdtJworICAgIC4uLiAgICAgcmV0dXJuIGt3CisKKyAgICA+Pj4gZCA9IHt9CisgICAgPj4+IGt3ID0gc2Fib3RldXIoYT0xLCAqKmQpCisgICAgPj4+IGQKKyAgICB7fQorCisKKyAgICA+Pj4gZygxLCAyLCAzLCAqKnsneCc6IDQsICd5JzogNX0pCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBnKCkgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCAneCcKKworICAgID4+PiBmKCoqezE6Mn0pCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkga2V5d29yZHMgbXVzdCBiZSBzdHJpbmdzCisKKyAgICA+Pj4gaCgqKnsnZSc6IDJ9KQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogaCgpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJ2UnCisKKyAgICA+Pj4gaCgqaCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGgoKSBhcmd1bWVudCBhZnRlciAqIG11c3QgYmUgYSBzZXF1ZW5jZSwgbm90IGZ1bmN0aW9uCisKKyAgICA+Pj4gZGlyKCpoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZGlyKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGEgc2VxdWVuY2UsIG5vdCBmdW5jdGlvbgorCisgICAgPj4+IE5vbmUoKmgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBOb25lVHlwZSBvYmplY3QgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGEgc2VxdWVuY2UsIFwKK25vdCBmdW5jdGlvbgorCisgICAgPj4+IGgoKipoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogaCgpIGFyZ3VtZW50IGFmdGVyICoqIG11c3QgYmUgYSBtYXBwaW5nLCBub3QgZnVuY3Rpb24KKworICAgID4+PiBkaXIoKipoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZGlyKCkgYXJndW1lbnQgYWZ0ZXIgKiogbXVzdCBiZSBhIG1hcHBpbmcsIG5vdCBmdW5jdGlvbgorCisgICAgPj4+IE5vbmUoKipoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogTm9uZVR5cGUgb2JqZWN0IGFyZ3VtZW50IGFmdGVyICoqIG11c3QgYmUgYSBtYXBwaW5nLCBcCitub3QgZnVuY3Rpb24KKworICAgID4+PiBkaXIoYj0xLCAqKnsnYic6IDF9KQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZGlyKCkgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCAnYicKKworQW5vdGhlciBoZWxwZXIgZnVuY3Rpb24KKworICAgID4+PiBkZWYgZjIoKmEsICoqYik6CisgICAgLi4uICAgICByZXR1cm4gYSwgYgorCisKKyAgICA+Pj4gZCA9IHt9CisgICAgPj4+IGZvciBpIGluIHhyYW5nZSg1MTIpOgorICAgIC4uLiAgICAga2V5ID0gJ2slZCcgJSBpCisgICAgLi4uICAgICBkW2tleV0gPSBpCisgICAgPj4+IGEsIGIgPSBmMigxLCAqKDIsMyksICoqZCkKKyAgICA+Pj4gbGVuKGEpLCBsZW4oYiksIGIgPT0gZAorICAgICgzLCA1MTIsIFRydWUpCisKKyAgICA+Pj4gY2xhc3MgRm9vOgorICAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmLCBhcmcxLCBhcmcyKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gYXJnMSthcmcyCisKKyAgICA+Pj4geCA9IEZvbygpCisgICAgPj4+IEZvby5tZXRob2QoKih4LCAxLCAyKSkKKyAgICAzCisgICAgPj4+IEZvby5tZXRob2QoeCwgKigxLCAyKSkKKyAgICAzCisgICAgPj4+IEZvby5tZXRob2QoKigxLCAyLCAzKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IHVuYm91bmQgbWV0aG9kIG1ldGhvZCgpIG11c3QgYmUgY2FsbGVkIHdpdGggRm9vIGluc3RhbmNlIGFzIFwKK2ZpcnN0IGFyZ3VtZW50IChnb3QgaW50IGluc3RhbmNlIGluc3RlYWQpCisKKyAgICA+Pj4gRm9vLm1ldGhvZCgxLCAqWzIsIDNdKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogdW5ib3VuZCBtZXRob2QgbWV0aG9kKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBGb28gaW5zdGFuY2UgYXMgXAorZmlyc3QgYXJndW1lbnQgKGdvdCBpbnQgaW5zdGFuY2UgaW5zdGVhZCkKKworQSBQeUNGdW5jdGlvbiB0aGF0IHRha2VzIG9ubHkgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHNob3VsZCBhbGxvdyBhbgorZW1wdHkga2V5d29yZCBkaWN0aW9uYXJ5IHRvIHBhc3Mgd2l0aG91dCBhIGNvbXBsYWludCwgYnV0IHJhaXNlIGEKK1R5cGVFcnJvciBpZiB0ZSBkaWN0aW9uYXJ5IGlzIG5vdCBlbXB0eQorCisgICAgPj4+IHRyeToKKyAgICAuLi4gICAgIHNpbGVuY2UgPSBpZCgxLCAqe30pCisgICAgLi4uICAgICBUcnVlCisgICAgLi4uIGV4Y2VwdDoKKyAgICAuLi4gICAgIEZhbHNlCisgICAgVHJ1ZQorCisgICAgPj4+IGlkKDEsICoqeydmb28nOiAxfSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGlkKCkgdGFrZXMgbm8ga2V5d29yZCBhcmd1bWVudHMKKworQSBjb3JuZXIgY2FzZSBvZiBrZXl3b3JkIGRpY3Rpb25hcnkgaXRlbXMgYmVpbmcgZGVsZXRlZCBkdXJpbmcKK3RoZSBmdW5jdGlvbiBjYWxsIHNldHVwLiBTZWUgPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDE2Pi4KKworICAgID4+PiBjbGFzcyBOYW1lKHN0cik6CisgICAgLi4uICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgICBkZWwgeFtzZWxmXQorICAgIC4uLiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAuLi4gICAgICAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgICAgICByZXR1cm4gc3RyLl9fZXFfXyhzZWxmLCBvdGhlcikKKyAgICAuLi4gICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gc3RyLl9faGFzaF9fKHNlbGYpCisKKyAgICA+Pj4geCA9IHtOYW1lKCJhIik6MSwgTmFtZSgiYiIpOjJ9CisgICAgPj4+IGRlZiBmKGEsIGIpOgorICAgIC4uLiAgICAgcHJpbnQgYSxiCisgICAgPj4+IGYoKip4KQorICAgIDEgMgorCitBIG9ic2N1cmUgbWVzc2FnZToKKworICAgID4+PiBkZWYgZihhLCBiKToKKyAgICAuLi4gICAgcGFzcworICAgID4+PiBmKGI9MSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGYoKSB0YWtlcyBleGFjdGx5IDIgYXJndW1lbnRzICgxIGdpdmVuKQorCitUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgaW4gaW5jbHVkZXMga2V5d29yZHM6CisKKyAgICA+Pj4gZGVmIGYoYSk6CisgICAgLi4uICAgIHBhc3MKKyAgICA+Pj4gZig2LCBhPTQsICooMSwgMiwgMykpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgdGFrZXMgZXhhY3RseSAxIGFyZ3VtZW50ICg1IGdpdmVuKQorIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBFeHRDYWxsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bmljb2RlX2tleXdvcmRzKHNlbGYpOgorICAgICAgICBkZWYgZihhKToKKyAgICAgICAgICAgIHJldHVybiBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigqKnt1J2EnOiA0fSksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgKip7dSdzdMO2cmVuJzogNH0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgKip7dSdzb21lTG9uZ1N0cmluZyc6Mn0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYoYT00LCAqKnt1J2EnOiA0fSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZHVwbGljYXRlIGFyZ3VtZW50cyBkaWRuJ3QgcmFpc2UiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3Qoc3lzLm1vZHVsZXNbX19uYW1lX19dLCBUcnVlKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRXh0Q2FsbFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EzNWY2MQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CkBAIC0wLDAgKzEsMTI1IEBACisiIiJUZXN0IHByb2dyYW0gZm9yIHRoZSBmY250bCBDIG1vZHVsZS4KKworT1MvMitFTVggZG9lc24ndCBzdXBwb3J0IHRoZSBmaWxlIGxvY2tpbmcgb3BlcmF0aW9ucy4KKworIiIiCitpbXBvcnQgb3MKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBfdGVzdGNhcGkKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKHZlcmJvc2UsIFRFU1RGTiwgdW5saW5rLCBydW5fdW5pdHRlc3QsCisgICAgaW1wb3J0X21vZHVsZSkKKworIyBTa2lwIHRlc3QgaWYgbm8gZm5jdGwgbW9kdWxlLgorZmNudGwgPSBpbXBvcnRfbW9kdWxlKCdmY250bCcpCisKKworIyBUT0RPIC0gV3JpdGUgdGVzdHMgZm9yIGZsb2NrKCkgYW5kIGxvY2tmKCkuCisKK2RlZiBnZXRfbG9ja2RhdGEoKToKKyAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnYXRoZW9zJyk6CisgICAgICAgIHN0YXJ0X2xlbiA9ICJxcSIKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5PX0xBUkdFRklMRQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzdGFydF9sZW4gPSAibGwiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGFydF9sZW4gPSAicXEiCisKKyAgICBpZiAoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoKCduZXRic2QnLCAnZnJlZWJzZCcsICdvcGVuYnNkJywgJ2JzZG9zJykpCisgICAgICAgIG9yIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJyk6CisgICAgICAgIGlmIHN0cnVjdC5jYWxjc2l6ZSgnbCcpID09IDg6CisgICAgICAgICAgICBvZmZfdCA9ICdsJworICAgICAgICAgICAgcGlkX3QgPSAnaScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9mZl90ID0gJ2x4eHh4JworICAgICAgICAgICAgcGlkX3QgPSAnbCcKKyAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjayhvZmZfdCArIG9mZl90ICsgcGlkX3QgKyAnaGgnLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZfV1JMQ0ssIDApCisgICAgZWxpZiBzeXMucGxhdGZvcm0gaW4gWydhaXgzJywgJ2FpeDQnLCAnaHAtdXhCJywgJ3VuaXh3YXJlNyddOgorICAgICAgICBsb2NrZGF0YSA9IHN0cnVjdC5wYWNrKCdoaGxsbGlpJywgZmNudGwuRl9XUkxDSywgMCwgMCwgMCwgMCwgMCwgMCkKKyAgICBlbGlmIHN5cy5wbGF0Zm9ybSBpbiBbJ29zMmVteCddOgorICAgICAgICBsb2NrZGF0YSA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBsb2NrZGF0YSA9IHN0cnVjdC5wYWNrKCdoaCcrc3RhcnRfbGVuKydoaCcsIGZjbnRsLkZfV1JMQ0ssIDAsIDAsIDAsIDAsIDApCisgICAgaWYgbG9ja2RhdGE6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnc3RydWN0LnBhY2s6ICcsIHJlcHIobG9ja2RhdGEpCisgICAgcmV0dXJuIGxvY2tkYXRhCisKK2xvY2tkYXRhID0gZ2V0X2xvY2tkYXRhKCkKKworCitjbGFzcyBUZXN0RmNudGwodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmYgPSBOb25lCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZiBhbmQgbm90IHNlbGYuZi5jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICB1bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZmNudGxfZmlsZW5vKHNlbGYpOgorICAgICAgICAjIHRoZSBleGFtcGxlIGZyb20gdGhlIGxpYnJhcnkgZG9jcworICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3cnKQorICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdTdGF0dXMgZnJvbSBmY250bCB3aXRoIE9fTk9OQkxPQ0s6ICcsIHJ2CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gWydvczJlbXgnXToKKyAgICAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZmNudGxfZmlsZV9kZXNjcmlwdG9yKHNlbGYpOgorICAgICAgICAjIGFnYWluLCBidXQgcGFzcyB0aGUgZmlsZSByYXRoZXIgdGhhbiBudW1lcmljIGRlc2NyaXB0b3IKKyAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICd3JykKKyAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gWydvczJlbXgnXToKKyAgICAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9mY250bF9iYWRfZmlsZShzZWxmKToKKyAgICAgICAgY2xhc3MgRjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbik6CisgICAgICAgICAgICAgICAgc2VsZi5mbiA9IGZuCisgICAgICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZjbnRsLmZjbnRsLCAtMSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmNudGwuZmNudGwsIEYoLTEpLCBmY250bC5GX1NFVEZMLCBvcy5PX05PTkJMT0NLKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZjbnRsLmZjbnRsLCAnc3BhbScsIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmNudGwuZmNudGwsIEYoJ3NwYW0nKSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKKyAgICAgICAgIyBJc3N1ZSAxNTk4OQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmY250bC5mY250bCwgX3Rlc3RjYXBpLklOVF9NQVggKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmNudGwuZmNudGwsIEYoX3Rlc3RjYXBpLklOVF9NQVggKyAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZjbnRsLmZjbnRsLCBfdGVzdGNhcGkuSU5UX01JTiAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5GX1NFVEZMLCBvcy5PX05PTkJMT0NLKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmY250bC5mY250bCwgRihfdGVzdGNhcGkuSU5UX01JTiAtIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKKworICAgIGRlZiB0ZXN0X2ZjbnRsXzY0X2JpdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTMwOTM1MjogZmNudGwgc2hvdWxkbid0IGZhaWwgd2hlbiB0aGUgdGhpcmQgYXJnIGZpdHMgaW4gYQorICAgICAgICAjIEMgJ2xvbmcnIGJ1dCBub3QgaW4gYSBDICdpbnQnLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQgPSBmY250bC5GX05PVElGWQorICAgICAgICAgICAgIyBUaGlzIGZsYWcgaXMgbGFyZ2VyIHRoYW4gMioqMzEgaW4gNjQtYml0IGJ1aWxkcworICAgICAgICAgICAgZmxhZ3MgPSBmY250bC5ETl9NVUxUSVNIT1QKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiRl9OT1RJRlkgb3IgRE5fTVVMVElTSE9UIHVuYXZhaWxhYmxlIikKKyAgICAgICAgZmQgPSBvcy5vcGVuKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoVEVTVEZOKSksIG9zLk9fUkRPTkxZKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmY250bC5mY250bChmZCwgY21kLCBmbGFncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdEZjbnRsKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9maWxlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZhNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZmlsZS5weQpAQCAtMCwwICsxLDM0NyBAQAorIyBOT1RFOiB0aGlzIGZpbGUgdGVzdHMgdGhlIG5ldyBgaW9gIGxpYnJhcnkgYmFja3BvcnRlZCBmcm9tIFB5dGhvbiAzLnguCisjIFNpbWlsYXIgdGVzdHMgZm9yIHRoZSBidWlsdGluIGZpbGUgb2JqZWN0IGNhbiBiZSBmb3VuZCBpbiB0ZXN0X2ZpbGUyay5weS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKKworaW1wb3J0IGlvCitpbXBvcnQgX3B5aW8gYXMgcHlpbworCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKKworY2xhc3MgQXV0b0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBmaWxlIHRlc3RzIGZvciB3aGljaCBhIHRlc3QgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IHNldCB1cAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmYgPSBzZWxmLm9wZW4oVEVTVEZOLCAnd2InKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmY6CisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorCisgICAgZGVmIHRlc3RXZWFrUmVmcyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd2VhayByZWZlcmVuY2VzCisgICAgICAgIHAgPSBwcm94eShzZWxmLmYpCisgICAgICAgIHAud3JpdGUoYid0ZXN0c3RyaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCBwLnRlbGwoKSkKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWZlcmVuY2VFcnJvciwgZ2V0YXR0ciwgcCwgJ3RlbGwnKQorCisgICAgZGVmIHRlc3RBdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSBleHBlY3RlZCBhdHRyaWJ1dGVzIGV4aXN0CisgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgZi5uYW1lICAgICAjIG1lcmVseSBzaG91bGRuJ3QgYmxvdyB1cAorICAgICAgICBmLm1vZGUgICAgICMgZGl0dG8KKyAgICAgICAgZi5jbG9zZWQgICAjIGRpdHRvCisKKyAgICBkZWYgdGVzdFJlYWRpbnRvKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSByZWFkaW50bworICAgICAgICBzZWxmLmYud3JpdGUoYicxMicpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIGEgPSBhcnJheSgnYicsIGIneCcqMTApCisgICAgICAgIHNlbGYuZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCisgICAgICAgIG4gPSBzZWxmLmYucmVhZGludG8oYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEyJywgYS50b3N0cmluZygpWzpuXSkKKworICAgIGRlZiB0ZXN0UmVhZGludG9fdGV4dChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgcmVhZGludG8gcmVmdXNlcyB0ZXh0IGZpbGVzCisgICAgICAgIGEgPSBhcnJheSgnYicsIGIneCcqMTApCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IHNlbGYub3BlbihURVNURk4sICdyJykKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLmYsICJyZWFkaW50byIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYucmVhZGludG8sIGEpCisKKyAgICBkZWYgdGVzdFdyaXRlbGluZXNVc2VyTGlzdChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGluc3RhbmNlIHNlcXVlbmNlCisgICAgICAgIGwgPSBVc2VyTGlzdChbYicxJywgYicyJ10pCisgICAgICAgIHNlbGYuZi53cml0ZWxpbmVzKGwpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCisgICAgICAgIGJ1ZiA9IHNlbGYuZi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGInMTInKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzSW50ZWdlcnMoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHdyaXRlbGluZXMgd2l0aCBpbnRlZ2VycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLCBbMSwgMiwgM10pCisKKyAgICBkZWYgdGVzdFdyaXRlbGluZXNJbnRlZ2Vyc1VzZXJMaXN0KHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggaW50ZWdlcnMgaW4gVXNlckxpc3QKKyAgICAgICAgbCA9IFVzZXJMaXN0KFsxLDIsM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIGwpCisKKyAgICBkZWYgdGVzdFdyaXRlbGluZXNOb25TdHJpbmcoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHdyaXRlbGluZXMgd2l0aCBub24tc3RyaW5nIG9iamVjdAorICAgICAgICBjbGFzcyBOb25TdHJpbmc6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW05vblN0cmluZygpLCBOb25TdHJpbmcoKV0pCisKKyAgICBkZWYgdGVzdEVycm9ycyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCisKKyAgICAgICAgaWYgaGFzYXR0cihmLCAicmVhZGludG8iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChJT0Vycm9yLCBUeXBlRXJyb3IpLCBmLnJlYWRpbnRvLCAiIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0TWV0aG9kcyhzZWxmKToKKyAgICAgICAgbWV0aG9kcyA9IFsoJ2ZpbGVubycsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ2ZsdXNoJywgKCkpLAorICAgICAgICAgICAgICAgICAgICgnaXNhdHR5JywgKCkpLAorICAgICAgICAgICAgICAgICAgICgnbmV4dCcsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ3JlYWQnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCd3cml0ZScsIChiIiIsKSksCisgICAgICAgICAgICAgICAgICAgKCdyZWFkbGluZScsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ3JlYWRsaW5lcycsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ3NlZWsnLCAoMCwpKSwKKyAgICAgICAgICAgICAgICAgICAoJ3RlbGwnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCd3cml0ZScsIChiIiIsKSksCisgICAgICAgICAgICAgICAgICAgKCd3cml0ZWxpbmVzJywgKFtdLCkpLAorICAgICAgICAgICAgICAgICAgICgnX19pdGVyX18nLCAoKSksCisgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2F0aGVvcycpOgorICAgICAgICAgICAgbWV0aG9kcy5hcHBlbmQoKCd0cnVuY2F0ZScsICgpKSkKKworICAgICAgICAjIF9fZXhpdF9fIHNob3VsZCBjbG9zZSB0aGUgZmlsZQorICAgICAgICBzZWxmLmYuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZi5jbG9zZWQpCisKKyAgICAgICAgZm9yIG1ldGhvZG5hbWUsIGFyZ3MgaW4gbWV0aG9kczoKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5mLCBtZXRob2RuYW1lKQorICAgICAgICAgICAgIyBzaG91bGQgcmFpc2Ugb24gY2xvc2VkIGZpbGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ldGhvZCwgKmFyZ3MpCisKKyAgICAgICAgIyBmaWxlIGlzIGNsb3NlZCwgX19leGl0X18gc2hvdWxkbid0IGRvIGFueXRoaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpLCBOb25lKQorICAgICAgICAjIGl0IG11c3QgYWxzbyByZXR1cm4gTm9uZSBpZiBhbiBleGNlcHRpb24gd2FzIGdpdmVuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5fX2V4aXRfXygqc3lzLmV4Y19pbmZvKCkpLCBOb25lKQorCisgICAgZGVmIHRlc3RSZWFkV2hlbldyaXRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi5yZWFkKQorCitjbGFzcyBDQXV0b0ZpbGVUZXN0cyhBdXRvRmlsZVRlc3RzKToKKyAgICBvcGVuID0gaW8ub3BlbgorCitjbGFzcyBQeUF1dG9GaWxlVGVzdHMoQXV0b0ZpbGVUZXN0cyk6CisgICAgb3BlbiA9IHN0YXRpY21ldGhvZChweWlvLm9wZW4pCisKKworY2xhc3MgT3RoZXJGaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RNb2RlU3RyaW5ncyhzZWxmKToKKyAgICAgICAgIyBjaGVjayBpbnZhbGlkIG1vZGUgc3RyaW5ncworICAgICAgICBmb3IgbW9kZSBpbiAoIiIsICJhVSIsICJ3VSsiKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCclciBpcyBhbiBpbnZhbGlkIGZpbGUgbW9kZScgJSBtb2RlKQorCisgICAgZGVmIHRlc3RTdGRpbihzZWxmKToKKyAgICAgICAgIyBUaGlzIGNhdXNlcyB0aGUgaW50ZXJwcmV0ZXIgdG8gZXhpdCBvbiBPU0YxIHY1LjEuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnb3NmMVY1JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChJT0Vycm9yLCBWYWx1ZUVycm9yKSwgc3lzLnN0ZGluLnNlZWssIC0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoKAorICAgICAgICAgICAgICAgICcgIFNraXBwaW5nIHN5cy5zdGRpbi5zZWVrKC0xKSwgaXQgbWF5IGNyYXNoIHRoZSBpbnRlcnByZXRlci4nCisgICAgICAgICAgICAgICAgJyBUZXN0IG1hbnVhbGx5LicpLCBmaWxlPXN5cy5fX3N0ZG91dF9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVmFsdWVFcnJvciksIHN5cy5zdGRpbi50cnVuY2F0ZSkKKworICAgIGRlZiB0ZXN0QmFkTW9kZUFyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB0aGF0IHdlIGdldCBhIHNlbnNpYmxlIGVycm9yIG1lc3NhZ2UgZm9yIGJhZCBtb2RlIGFyZ3VtZW50CisgICAgICAgIGJhZF9tb2RlID0gInF3ZXJ0eSIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sIGJhZF9tb2RlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSAhPSAwOgorICAgICAgICAgICAgICAgIHMgPSBzdHIobXNnKQorICAgICAgICAgICAgICAgIGlmIFRFU1RGTiBpbiBzIG9yIGJhZF9tb2RlIG5vdCBpbiBzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImJhZCBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkIG1vZGU6ICVzIiAlIHMpCisgICAgICAgICAgICAjIGlmIG1zZy5hcmdzWzBdID09IDAsIHdlJ3JlIHByb2JhYmx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhlcmUgbWF5IGJlCisgICAgICAgICAgICAjIG5vIG9idmlvdXMgd2F5IHRvIGRpc2NvdmVyIHdoeSBvcGVuKCkgZmFpbGVkLgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGVycm9yIGZvciBpbnZhbGlkIG1vZGU6ICVzIiAlIGJhZF9tb2RlKQorCisgICAgZGVmIHRlc3RTZXRCdWZmZXJTaXplKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgYnVmZmVyIHNpemUgZG9lc24ndCBjYXVzZQorICAgICAgICAjIG1pc2JlaGF2aW91ciBlc3BlY2lhbGx5IHdpdGggcmVwZWF0ZWQgY2xvc2UoKSBjYWxscworICAgICAgICBmb3IgcyBpbiAoLTEsIDAsIDEsIDUxMik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICd3YicsIHMpCisgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocykuZW5jb2RlKCJhc2NpaSIpKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncmInLCBzKQorICAgICAgICAgICAgICAgIGQgPSBpbnQoZi5yZWFkKCkuZGVjb2RlKCJhc2NpaSIpKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3Igc2V0dGluZyBidWZmZXIgc2l6ZSAlZDogJXMnICUgKHMsIHN0cihtc2cpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgcykKKworICAgIGRlZiB0ZXN0VHJ1bmNhdGVPbldpbmRvd3Moc2VsZik6CisgICAgICAgICMgU0YgYnVnIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvODAxNjMxPgorICAgICAgICAjICJmaWxlLnRydW5jYXRlIGZhdWx0IG9uIHdpbmRvd3MiCisKKyAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKyAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICd3YicpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZShiJzEyMzQ1Njc4OTAxJykgICAjIDExIGJ5dGVzCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sJ3JiKycpCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKDUpCisgICAgICAgICAgICBpZiBkYXRhICE9IGInMTIzNDUnOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVhZCBvbiBmaWxlIG9wZW5lZCBmb3IgdXBkYXRlIGZhaWxlZCAlciIgJSBkYXRhKQorICAgICAgICAgICAgaWYgZi50ZWxsKCkgIT0gNToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgcG9zIGFmdGVyIHJlYWQgd3JvbmcgJWQiICUgZi50ZWxsKCkpCisKKyAgICAgICAgICAgIGYudHJ1bmNhdGUoKQorICAgICAgICAgICAgaWYgZi50ZWxsKCkgIT0gNToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgcG9zIGFmdGVyIGZ0cnVuY2F0ZSB3cm9uZyAlZCIgJSBmLnRlbGwoKSkKKworICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzaXplID0gb3MucGF0aC5nZXRzaXplKFRFU1RGTikKKyAgICAgICAgICAgIGlmIHNpemUgIT0gNToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgc2l6ZSBhZnRlciBmdHJ1bmNhdGUgd3JvbmcgJWQiICUgc2l6ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0SXRlcmF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGNvbXBsZXggaW50ZXJhY3Rpb24gd2hlbiBtaXhpbmcgZmlsZS1pdGVyYXRpb24gYW5kIHRoZQorICAgICAgICAjIHZhcmlvdXMgcmVhZCogbWV0aG9kcy4KKyAgICAgICAgZGF0YW9mZnNldCA9IDE2Mzg0CisgICAgICAgIGZpbGxlciA9IGIiaGFtXG4iCisgICAgICAgIGFzc2VydCBub3QgZGF0YW9mZnNldCAlIGxlbihmaWxsZXIpLCBcCisgICAgICAgICAgICAiZGF0YW9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIGxlbihmaWxsZXIpIgorICAgICAgICBuY2h1bmtzID0gZGF0YW9mZnNldCAvLyBsZW4oZmlsbGVyKQorICAgICAgICB0ZXN0bGluZXMgPSBbCisgICAgICAgICAgICBiInNwYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCisgICAgICAgICAgICBiImVnZ3MsIHNwYW0sIGhhbSBhbmQgc3BhbVxuIiwKKyAgICAgICAgICAgIGIic2F1c3NhZ2VzLCBzcGFtLCBzcGFtIGFuZCBlZ2dzXG4iLAorICAgICAgICAgICAgYiJzcGFtLCBoYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCisgICAgICAgICAgICBiInNwYW0sIHNwYW0sIHNwYW0sIHNwYW0sIHNwYW0sIGhhbSwgc3BhbVxuIiwKKyAgICAgICAgICAgIGIid29uZGVyZnVsIHNwYWFhYWFhbS5cbiIKKyAgICAgICAgXQorICAgICAgICBtZXRob2RzID0gWygicmVhZGxpbmUiLCAoKSksICgicmVhZCIsICgpKSwgKCJyZWFkbGluZXMiLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCJyZWFkaW50byIsIChhcnJheSgiYiIsIGIiICIqMTAwKSwpKV0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFByZXBhcmUgdGhlIHRlc3RmaWxlCisgICAgICAgICAgICBiYWcgPSBzZWxmLm9wZW4oVEVTVEZOLCAid2IiKQorICAgICAgICAgICAgYmFnLndyaXRlKGZpbGxlciAqIG5jaHVua3MpCisgICAgICAgICAgICBiYWcud3JpdGVsaW5lcyh0ZXN0bGluZXMpCisgICAgICAgICAgICBiYWcuY2xvc2UoKQorICAgICAgICAgICAgIyBUZXN0IGZvciBhcHByb3ByaWF0ZSBlcnJvcnMgbWl4aW5nIHJlYWQqIGFuZCBpdGVyYXRpb24KKyAgICAgICAgICAgIGZvciBtZXRob2RuYW1lLCBhcmdzIGluIG1ldGhvZHM6CisgICAgICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCisgICAgICAgICAgICAgICAgaWYgbmV4dChmKSAhPSBmaWxsZXI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCwgIkJyb2tlbiB0ZXN0ZmlsZSIKKyAgICAgICAgICAgICAgICBtZXRoID0gZ2V0YXR0cihmLCBtZXRob2RuYW1lKQorICAgICAgICAgICAgICAgIG1ldGgoKmFyZ3MpICAjIFRoaXMgc2ltcGx5IHNob3VsZG4ndCBmYWlsCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgICMgVGVzdCB0byBzZWUgaWYgaGFybWxlc3MgKGJ5IGFjY2lkZW50KSBtaXhpbmcgb2YgcmVhZCogYW5kCisgICAgICAgICAgICAjIGl0ZXJhdGlvbiBzdGlsbCB3b3Jrcy4gVGhpcyBkZXBlbmRzIG9uIHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbAorICAgICAgICAgICAgIyBpdGVyYXRpb24gYnVmZmVyIChjdXJyZW50bHkgODE5MiwpIGJ1dCB3ZSBjYW4gdGVzdCBpdCBpbiBhCisgICAgICAgICAgICAjIGZsZXhpYmxlIG1hbm5lci4gIEVhY2ggbGluZSBpbiB0aGUgYmFnIG8nIGhhbSBpcyA0IGJ5dGVzCisgICAgICAgICAgICAjICgiaCIsICJhIiwgIm0iLCAiXG4iKSwgc28gNDA5NiBsaW5lcyBvZiB0aGF0IHNob3VsZCBnZXQgdXMKKyAgICAgICAgICAgICMgZXhhY3RseSBvbiB0aGUgYnVmZmVyIGJvdW5kYXJ5IGZvciBhbnkgcG93ZXItb2YtMiBidWZmZXJzaXplCisgICAgICAgICAgICAjIGJldHdlZW4gNCBhbmQgMTYzODQgKGluY2x1c2l2ZSkuCisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5jaHVua3MpOgorICAgICAgICAgICAgICAgIG5leHQoZikKKyAgICAgICAgICAgIHRlc3RsaW5lID0gdGVzdGxpbmVzLnBvcCgwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmUoKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCisgICAgICAgICAgICBpZiBsaW5lICE9IHRlc3RsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmUoKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisgICAgICAgICAgICB0ZXN0bGluZSA9IHRlc3RsaW5lcy5wb3AoMCkKKyAgICAgICAgICAgIGJ1ZiA9IGFycmF5KCJiIiwgYiJceDAwIiAqIGxlbih0ZXN0bGluZSkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi5yZWFkaW50byhidWYpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRpbnRvKCkgYWZ0ZXIgbmV4dCgpIHdpdGggc3VwcG9zZWRseSBlbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24tYnVmZmVyIGZhaWxlZCBhbnl3YXkiKQorICAgICAgICAgICAgbGluZSA9IGJ1Zi50b3N0cmluZygpCisgICAgICAgICAgICBpZiBsaW5lICE9IHRlc3RsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGludG8oKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisKKyAgICAgICAgICAgIHRlc3RsaW5lID0gdGVzdGxpbmVzLnBvcCgwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWQobGVuKHRlc3RsaW5lKSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZCgpIGFmdGVyIG5leHQoKSB3aXRoIHN1cHBvc2VkbHkgZW1wdHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uLWJ1ZmZlciBmYWlsZWQgYW55d2F5IikKKyAgICAgICAgICAgIGlmIGxpbmUgIT0gdGVzdGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkbGluZXMoKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCisgICAgICAgICAgICBpZiBsaW5lcyAhPSB0ZXN0bGluZXM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkbGluZXMoKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisgICAgICAgICAgICAjIFJlYWRpbmcgYWZ0ZXIgaXRlcmF0aW9uIGhpdCBFT0Ygc2hvdWxkbid0IGh1cnQgZWl0aGVyCisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgZi5yZWFkaW50byhidWYpCisgICAgICAgICAgICAgICAgICAgIGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkKiBmYWlsZWQgYWZ0ZXIgbmV4dCgpIGNvbnN1bWVkIGZpbGUiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKK2NsYXNzIENPdGhlckZpbGVUZXN0cyhPdGhlckZpbGVUZXN0cyk6CisgICAgb3BlbiA9IGlvLm9wZW4KKworY2xhc3MgUHlPdGhlckZpbGVUZXN0cyhPdGhlckZpbGVUZXN0cyk6CisgICAgb3BlbiA9IHN0YXRpY21ldGhvZChweWlvLm9wZW4pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgSGlzdG9yaWNhbGx5LCB0aGVzZSB0ZXN0cyBoYXZlIGJlZW4gc2xvcHB5IGFib3V0IHJlbW92aW5nIFRFU1RGTi4KKyAgICAjIFNvIGdldCByaWQgb2YgaXQgbm8gbWF0dGVyIHdoYXQuCisgICAgdHJ5OgorICAgICAgICBydW5fdW5pdHRlc3QoQ0F1dG9GaWxlVGVzdHMsIFB5QXV0b0ZpbGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgIENPdGhlckZpbGVUZXN0cywgUHlPdGhlckZpbGVUZXN0cykKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZmlsZTJrLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZmlsZTJrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjMzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9maWxlMmsucHkKQEAgLTAsMCArMSw4MzIgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5Cit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0Citmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAorCitjbGFzcyBBdXRvRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIGZpbGUgdGVzdHMgZm9yIHdoaWNoIGEgdGVzdCBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHVwCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAnd2InKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmY6CisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorCisgICAgZGVmIHRlc3RXZWFrUmVmcyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd2VhayByZWZlcmVuY2VzCisgICAgICAgIHAgPSBwcm94eShzZWxmLmYpCisgICAgICAgIHAud3JpdGUoJ3Rlc3RzdHJpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIHAudGVsbCgpKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBnZXRhdHRyLCBwLCAndGVsbCcpCisKKyAgICBkZWYgdGVzdEF0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IGV4cGVjdGVkIGF0dHJpYnV0ZXMgZXhpc3QKKyAgICAgICAgZiA9IHNlbGYuZgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzb2Z0c3BhY2UgPSBmLnNvZnRzcGFjZQorICAgICAgICBmLm5hbWUgICAgICMgbWVyZWx5IHNob3VsZG4ndCBibG93IHVwCisgICAgICAgIGYubW9kZSAgICAgIyBkaXR0bworICAgICAgICBmLmNsb3NlZCAgICMgZGl0dG8KKworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAjIHZlcmlmeSBzb2Z0c3BhY2UgaXMgd3JpdGFibGUKKyAgICAgICAgICAgIGYuc29mdHNwYWNlID0gc29mdHNwYWNlICAgICMgbWVyZWx5IHNob3VsZG4ndCBibG93IHVwCisKKyAgICAgICAgIyB2ZXJpZnkgdGhlIG90aGVycyBhcmVuJ3QKKyAgICAgICAgZm9yIGF0dHIgaW4gJ25hbWUnLCAnbW9kZScsICdjbG9zZWQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpLCBzZXRhdHRyLCBmLCBhdHRyLCAnb29wcycpCisKKyAgICBkZWYgdGVzdFJlYWRpbnRvKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSByZWFkaW50bworICAgICAgICBzZWxmLmYud3JpdGUoJzEyJykKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgYSA9IGFycmF5KCdjJywgJ3gnKjEwKQorICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgbiA9IHNlbGYuZi5yZWFkaW50byhhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxMicsIGEudG9zdHJpbmcoKVs6bl0pCisKKyAgICBkZWYgdGVzdFdyaXRlbGluZXNVc2VyTGlzdChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGluc3RhbmNlIHNlcXVlbmNlCisgICAgICAgIGwgPSBVc2VyTGlzdChbJzEnLCAnMiddKQorICAgICAgICBzZWxmLmYud3JpdGVsaW5lcyhsKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgYnVmID0gc2VsZi5mLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgJzEyJykKKworICAgIGRlZiB0ZXN0V3JpdGVsaW5lc0ludGVnZXJzKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggaW50ZWdlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgWzEsIDIsIDNdKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzSW50ZWdlcnNVc2VyTGlzdChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGludGVnZXJzIGluIFVzZXJMaXN0CisgICAgICAgIGwgPSBVc2VyTGlzdChbMSwyLDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLCBsKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzTm9uU3RyaW5nKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggbm9uLXN0cmluZyBvYmplY3QKKyAgICAgICAgY2xhc3MgTm9uU3RyaW5nOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtOb25TdHJpbmcoKSwgTm9uU3RyaW5nKCldKQorCisgICAgZGVmIHRlc3RSZXByKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSByZXByIHdvcmtzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHNlbGYuZikuc3RhcnRzd2l0aCgiPG9wZW4gZmlsZSAnIiArIFRFU1RGTikpCisgICAgICAgICMgc2VlIGlzc3VlICMxNDE2MQorICAgICAgICAjIFdpbmRvd3MgZG9lc24ndCBsaWtlIFxyXG5cdCIgaW4gdGhlIGZpbGUgbmFtZSwgYnV0ICcgaXMgb2sKKyAgICAgICAgZm5hbWUgPSAneHhccnh4XG54eFwneHgieHgnIGlmIHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiIGVsc2UgInh4J3h4IgorICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5yZW1vdmUsIGZuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZikuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgIjxvcGVuIGZpbGUgJXIsIG1vZGUgJ3cnIGF0IiAlIGZuYW1lKSkKKworICAgIGRlZiB0ZXN0RXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgZiA9IHNlbGYuZgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRpbnRvLCAiIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0TWV0aG9kcyhzZWxmKToKKyAgICAgICAgbWV0aG9kcyA9IFsnZmlsZW5vJywgJ2ZsdXNoJywgJ2lzYXR0eScsICduZXh0JywgJ3JlYWQnLCAncmVhZGludG8nLAorICAgICAgICAgICAgICAgICAgICdyZWFkbGluZScsICdyZWFkbGluZXMnLCAnc2VlaycsICd0ZWxsJywgJ3RydW5jYXRlJywKKyAgICAgICAgICAgICAgICAgICAnd3JpdGUnLCAnX19pdGVyX18nXQorICAgICAgICBkZXByZWNhdGVkX21ldGhvZHMgPSBbJ3hyZWFkbGluZXMnXQorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnYXRoZW9zJyk6CisgICAgICAgICAgICBtZXRob2RzLnJlbW92ZSgndHJ1bmNhdGUnKQorCisgICAgICAgICMgX19leGl0X18gc2hvdWxkIGNsb3NlIHRoZSBmaWxlCisgICAgICAgIHNlbGYuZi5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mLmNsb3NlZCkKKworICAgICAgICBmb3IgbWV0aG9kbmFtZSBpbiBtZXRob2RzOgorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLmYsIG1ldGhvZG5hbWUpCisgICAgICAgICAgICAjIHNob3VsZCByYWlzZSBvbiBjbG9zZWQgZmlsZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aG9kKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBmb3IgbWV0aG9kbmFtZSBpbiBkZXByZWNhdGVkX21ldGhvZHM6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLmYsIG1ldGhvZG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aG9kKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgW10pCisKKyAgICAgICAgIyBmaWxlIGlzIGNsb3NlZCwgX19leGl0X18gc2hvdWxkbid0IGRvIGFueXRoaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpLCBOb25lKQorICAgICAgICAjIGl0IG11c3QgYWxzbyByZXR1cm4gTm9uZSBpZiBhbiBleGNlcHRpb24gd2FzIGdpdmVuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5fX2V4aXRfXygqc3lzLmV4Y19pbmZvKCkpLCBOb25lKQorCisgICAgZGVmIHRlc3RSZWFkV2hlbldyaXRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi5yZWFkKQorCisgICAgZGVmIHRlc3ROYXN0eVdyaXRlbGluZXNHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGRlZiBuYXN0eSgpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAgICAgaWYgaSA9PSAzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHlpZWxkIHN0cihpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgbmFzdHkoKSkKKworICAgIGRlZiB0ZXN0SXNzdWU1Njc3KHNlbGYpOgorICAgICAgICAjIFJlbWFyazogRG8gbm90IHBlcmZvcm0gbW9yZSB0aGFuIG9uZSB0ZXN0IHBlciBvcGVuIGZpbGUsCisgICAgICAgICMgc2luY2UgdGhhdCBkb2VzIE5PVCBjYXRjaCB0aGUgcmVhZGxpbmUgZXJyb3Igb24gV2luZG93cy4KKyAgICAgICAgZGF0YSA9ICd4eHgnCisgICAgICAgIGZvciBtb2RlIGluIFsndycsICd3YicsICdhJywgJ2FiJ106CisgICAgICAgICAgICBmb3IgYXR0ciBpbiBbJ3JlYWQnLCAncmVhZGxpbmUnLCAncmVhZGxpbmVzJ106CisgICAgICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICAgICAgc2VsZi5mLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZ2V0YXR0cihzZWxmLmYsIGF0dHIpKQorICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisKKyAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgc2VsZi5mLndyaXRlKGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBsYW1iZGE6IFtsaW5lIGZvciBsaW5lIGluIHNlbGYuZl0pCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZShkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLnJlYWRpbnRvLCBieXRlYXJyYXkobGVuKGRhdGEpKSkKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisKKyAgICAgICAgZm9yIG1vZGUgaW4gWydyJywgJ3JiJywgJ1UnLCAnVWInLCAnVXInLCAnclUnLCAncmJVJywgJ3JVYiddOgorICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYud3JpdGUsIGRhdGEpCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLCBbZGF0YSwgZGF0YV0pCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi50cnVuY2F0ZSkKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisKK2NsYXNzIE90aGVyRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0T3BlbkRpcihzZWxmKToKKyAgICAgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpcgorICAgICAgICBmb3IgbW9kZSBpbiAoTm9uZSwgInciKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBtb2RlOgorICAgICAgICAgICAgICAgICAgICBmID0gb3Blbih0aGlzX2RpciwgbW9kZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmID0gb3Blbih0aGlzX2RpcikKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbGVuYW1lLCB0aGlzX2RpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJvcGVuaW5nIGEgZGlyZWN0b3J5IGRpZG4ndCByYWlzZSBhbiBJT0Vycm9yIikKKworICAgIGRlZiB0ZXN0TW9kZVN0cmluZ3Moc2VsZik6CisgICAgICAgICMgY2hlY2sgaW52YWxpZCBtb2RlIHN0cmluZ3MKKyAgICAgICAgZm9yIG1vZGUgaW4gKCIiLCAiYVUiLCAid1UrIik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJyVyIGlzIGFuIGludmFsaWQgZmlsZSBtb2RlJyAlIG1vZGUpCisKKyAgICAgICAgIyBTb21lIGludmFsaWQgbW9kZXMgZmFpbCBvbiBXaW5kb3dzLCBidXQgcGFzcyBvbiBVbml4CisgICAgICAgICMgSXNzdWUzOTY1OiBhdm9pZCBhIGNyYXNoIG9uIFdpbmRvd3Mgd2hlbiBmaWxlbmFtZSBpcyB1bmljb2RlCisgICAgICAgIGZvciBuYW1lIGluIChURVNURk4sIHVuaWNvZGUoVEVTVEZOKSwgdW5pY29kZShURVNURk4gKyAnXHQnKSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgInJyIikKKyAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0U3RkaW4oc2VsZik6CisgICAgICAgICMgVGhpcyBjYXVzZXMgdGhlIGludGVycHJldGVyIHRvIGV4aXQgb24gT1NGMSB2NS4xLgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ29zZjFWNSc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzeXMuc3RkaW4uc2VlaywgLTEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCA+PnN5cy5fX3N0ZG91dF9fLCAoCisgICAgICAgICAgICAgICAgJyAgU2tpcHBpbmcgc3lzLnN0ZGluLnNlZWsoLTEpLCBpdCBtYXkgY3Jhc2ggdGhlIGludGVycHJldGVyLicKKyAgICAgICAgICAgICAgICAnIFRlc3QgbWFudWFsbHkuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc3lzLnN0ZGluLnRydW5jYXRlKQorCisgICAgZGVmIHRlc3RVbmljb2RlT3BlbihzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgcmVwciB3b3JrcyBmb3IgdW5pY29kZSB0b28KKyAgICAgICAgZiA9IG9wZW4odW5pY29kZShURVNURk4pLCAidyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGYpLnN0YXJ0c3dpdGgoIjxvcGVuIGZpbGUgdSciICsgVEVTVEZOKSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdEJhZE1vZGVBcmd1bWVudChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCB3ZSBnZXQgYSBzZW5zaWJsZSBlcnJvciBtZXNzYWdlIGZvciBiYWQgbW9kZSBhcmd1bWVudAorICAgICAgICBiYWRfbW9kZSA9ICJxd2VydHkiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgYmFkX21vZGUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CisgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSAhPSAwOgorICAgICAgICAgICAgICAgIHMgPSBzdHIobXNnKQorICAgICAgICAgICAgICAgIGlmIFRFU1RGTiBpbiBzIG9yIGJhZF9tb2RlIG5vdCBpbiBzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImJhZCBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkIG1vZGU6ICVzIiAlIHMpCisgICAgICAgICAgICAjIGlmIG1zZy5hcmdzWzBdID09IDAsIHdlJ3JlIHByb2JhYmx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhlcmUgbWF5CisgICAgICAgICAgICAjIGJlIG5vIG9idmlvdXMgd2F5IHRvIGRpc2NvdmVyIHdoeSBvcGVuKCkgZmFpbGVkLgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGVycm9yIGZvciBpbnZhbGlkIG1vZGU6ICVzIiAlIGJhZF9tb2RlKQorCisgICAgZGVmIHRlc3RTZXRCdWZmZXJTaXplKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgYnVmZmVyIHNpemUgZG9lc24ndCBjYXVzZQorICAgICAgICAjIG1pc2JlaGF2aW91ciBlc3BlY2lhbGx5IHdpdGggcmVwZWF0ZWQgY2xvc2UoKSBjYWxscworICAgICAgICBmb3IgcyBpbiAoLTEsIDAsIDEsIDUxMik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycsIHMpCisgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocykpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAncicsIHMpCisgICAgICAgICAgICAgICAgZCA9IGludChmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvciBzZXR0aW5nIGJ1ZmZlciBzaXplICVkOiAlcycgJSAocywgc3RyKG1zZykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzKQorCisgICAgZGVmIHRlc3RUcnVuY2F0ZU9uV2luZG93cyhzZWxmKToKKyAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgICAgICBkZWYgYnVnODAxNjMxKCk6CisgICAgICAgICAgICAjIFNGIGJ1ZyA8aHR0cDovL3d3dy5weXRob24ub3JnL3NmLzgwMTYzMT4KKyAgICAgICAgICAgICMgImZpbGUudHJ1bmNhdGUgZmF1bHQgb24gd2luZG93cyIKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgICAgIGYud3JpdGUoJzEyMzQ1Njc4OTAxJykgICAjIDExIGJ5dGVzCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCdyYisnKQorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCg1KQorICAgICAgICAgICAgaWYgZGF0YSAhPSAnMTIzNDUnOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVhZCBvbiBmaWxlIG9wZW5lZCBmb3IgdXBkYXRlIGZhaWxlZCAlciIgJSBkYXRhKQorICAgICAgICAgICAgaWYgZi50ZWxsKCkgIT0gNToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgcG9zIGFmdGVyIHJlYWQgd3JvbmcgJWQiICUgZi50ZWxsKCkpCisKKyAgICAgICAgICAgIGYudHJ1bmNhdGUoKQorICAgICAgICAgICAgaWYgZi50ZWxsKCkgIT0gNToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgcG9zIGFmdGVyIGZ0cnVuY2F0ZSB3cm9uZyAlZCIgJSBmLnRlbGwoKSkKKworICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzaXplID0gb3MucGF0aC5nZXRzaXplKFRFU1RGTikKKyAgICAgICAgICAgIGlmIHNpemUgIT0gNToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgc2l6ZSBhZnRlciBmdHJ1bmNhdGUgd3JvbmcgJWQiICUgc2l6ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBidWc4MDE2MzEoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0SXRlcmF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGNvbXBsZXggaW50ZXJhY3Rpb24gd2hlbiBtaXhpbmcgZmlsZS1pdGVyYXRpb24gYW5kIHRoZQorICAgICAgICAjIHZhcmlvdXMgcmVhZCogbWV0aG9kcy4gT3N0ZW5zaWJseSwgdGhlIG1peHR1cmUgY291bGQganVzdCBiZSB0ZXN0ZWQKKyAgICAgICAgIyB0byB3b3JrIHdoZW4gaXQgc2hvdWxkIHdvcmsgYWNjb3JkaW5nIHRvIHRoZSBQeXRob24gbGFuZ3VhZ2UsCisgICAgICAgICMgaW5zdGVhZCBvZiBmYWlsIHdoZW4gaXQgc2hvdWxkIGZhaWwgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IENQeXRob24KKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbi4gIFBlb3BsZSBkb24ndCBhbHdheXMgcHJvZ3JhbSBQeXRob24gdGhlIHdheSB0aGV5CisgICAgICAgICMgc2hvdWxkLCB0aG91Z2gsIGFuZCB0aGUgaW1wbGVtZW5hdGlvbiBtaWdodCBjaGFuZ2UgaW4gc3VidGxlIHdheXMsCisgICAgICAgICMgc28gd2UgZXhwbGljaXRseSB0ZXN0IGZvciBlcnJvcnMsIHRvbzsgdGhlIHRlc3Qgd2lsbCBqdXN0IGhhdmUgdG8KKyAgICAgICAgIyBiZSB1cGRhdGVkIHdoZW4gdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZXMuCisgICAgICAgIGRhdGFvZmZzZXQgPSAxNjM4NAorICAgICAgICBmaWxsZXIgPSAiaGFtXG4iCisgICAgICAgIGFzc2VydCBub3QgZGF0YW9mZnNldCAlIGxlbihmaWxsZXIpLCBcCisgICAgICAgICAgICAiZGF0YW9mZnNldCBtdXN0IGJlIG11bHRpcGxlIG9mIGxlbihmaWxsZXIpIgorICAgICAgICBuY2h1bmtzID0gZGF0YW9mZnNldCAvLyBsZW4oZmlsbGVyKQorICAgICAgICB0ZXN0bGluZXMgPSBbCisgICAgICAgICAgICAic3BhbSwgc3BhbSBhbmQgZWdnc1xuIiwKKyAgICAgICAgICAgICJlZ2dzLCBzcGFtLCBoYW0gYW5kIHNwYW1cbiIsCisgICAgICAgICAgICAic2F1c3NhZ2VzLCBzcGFtLCBzcGFtIGFuZCBlZ2dzXG4iLAorICAgICAgICAgICAgInNwYW0sIGhhbSwgc3BhbSBhbmQgZWdnc1xuIiwKKyAgICAgICAgICAgICJzcGFtLCBzcGFtLCBzcGFtLCBzcGFtLCBzcGFtLCBoYW0sIHNwYW1cbiIsCisgICAgICAgICAgICAid29uZGVyZnVsIHNwYWFhYWFhbS5cbiIKKyAgICAgICAgXQorICAgICAgICBtZXRob2RzID0gWygicmVhZGxpbmUiLCAoKSksICgicmVhZCIsICgpKSwgKCJyZWFkbGluZXMiLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCJyZWFkaW50byIsIChhcnJheSgiYyIsICIgIioxMDApLCkpXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgUHJlcGFyZSB0aGUgdGVzdGZpbGUKKyAgICAgICAgICAgIGJhZyA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgICAgICBiYWcud3JpdGUoZmlsbGVyICogbmNodW5rcykKKyAgICAgICAgICAgIGJhZy53cml0ZWxpbmVzKHRlc3RsaW5lcykKKyAgICAgICAgICAgIGJhZy5jbG9zZSgpCisgICAgICAgICAgICAjIFRlc3QgZm9yIGFwcHJvcHJpYXRlIGVycm9ycyBtaXhpbmcgcmVhZCogYW5kIGl0ZXJhdGlvbgorICAgICAgICAgICAgZm9yIG1ldGhvZG5hbWUsIGFyZ3MgaW4gbWV0aG9kczoKKyAgICAgICAgICAgICAgICBmID0gb3BlbihURVNURk4pCisgICAgICAgICAgICAgICAgaWYgZi5uZXh0KCkgIT0gZmlsbGVyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwsICJCcm9rZW4gdGVzdGZpbGUiCisgICAgICAgICAgICAgICAgbWV0aCA9IGdldGF0dHIoZiwgbWV0aG9kbmFtZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1ldGgoKmFyZ3MpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzJXIgYWZ0ZXIgbmV4dCgpIGRpZG4ndCByYWlzZSBWYWx1ZUVycm9yIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZG5hbWUsIGFyZ3MpKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAjIFRlc3QgdG8gc2VlIGlmIGhhcm1sZXNzIChieSBhY2NpZGVudCkgbWl4aW5nIG9mIHJlYWQqIGFuZAorICAgICAgICAgICAgIyBpdGVyYXRpb24gc3RpbGwgd29ya3MuIFRoaXMgZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwKKyAgICAgICAgICAgICMgaXRlcmF0aW9uIGJ1ZmZlciAoY3VycmVudGx5IDgxOTIsKSBidXQgd2UgY2FuIHRlc3QgaXQgaW4gYQorICAgICAgICAgICAgIyBmbGV4aWJsZSBtYW5uZXIuICBFYWNoIGxpbmUgaW4gdGhlIGJhZyBvJyBoYW0gaXMgNCBieXRlcworICAgICAgICAgICAgIyAoImgiLCAiYSIsICJtIiwgIlxuIiksIHNvIDQwOTYgbGluZXMgb2YgdGhhdCBzaG91bGQgZ2V0IHVzCisgICAgICAgICAgICAjIGV4YWN0bHkgb24gdGhlIGJ1ZmZlciBib3VuZGFyeSBmb3IgYW55IHBvd2VyLW9mLTIgYnVmZmVyc2l6ZQorICAgICAgICAgICAgIyBiZXR3ZWVuIDQgYW5kIDE2Mzg0IChpbmNsdXNpdmUpLgorICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmNodW5rcyk6CisgICAgICAgICAgICAgICAgZi5uZXh0KCkKKyAgICAgICAgICAgIHRlc3RsaW5lID0gdGVzdGxpbmVzLnBvcCgwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmUoKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCisgICAgICAgICAgICBpZiBsaW5lICE9IHRlc3RsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmUoKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisgICAgICAgICAgICB0ZXN0bGluZSA9IHRlc3RsaW5lcy5wb3AoMCkKKyAgICAgICAgICAgIGJ1ZiA9IGFycmF5KCJjIiwgIlx4MDAiICogbGVuKHRlc3RsaW5lKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLnJlYWRpbnRvKGJ1ZikKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGludG8oKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCisgICAgICAgICAgICBsaW5lID0gYnVmLnRvc3RyaW5nKCkKKyAgICAgICAgICAgIGlmIGxpbmUgIT0gdGVzdGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkaW50bygpIGFmdGVyIG5leHQoKSB3aXRoIGVtcHR5IGJ1ZmZlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQuIEdvdCAlciwgZXhwZWN0ZWQgJXIiICUgKGxpbmUsIHRlc3RsaW5lKSkKKworICAgICAgICAgICAgdGVzdGxpbmUgPSB0ZXN0bGluZXMucG9wKDApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZChsZW4odGVzdGxpbmUpKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkKCkgYWZ0ZXIgbmV4dCgpIHdpdGggc3VwcG9zZWRseSBlbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24tYnVmZmVyIGZhaWxlZCBhbnl3YXkiKQorICAgICAgICAgICAgaWYgbGluZSAhPSB0ZXN0bGluZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWQoKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lcygpIGFmdGVyIG5leHQoKSB3aXRoIHN1cHBvc2VkbHkgZW1wdHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uLWJ1ZmZlciBmYWlsZWQgYW55d2F5IikKKyAgICAgICAgICAgIGlmIGxpbmVzICE9IHRlc3RsaW5lczoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lcygpIGFmdGVyIG5leHQoKSB3aXRoIGVtcHR5IGJ1ZmZlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQuIEdvdCAlciwgZXhwZWN0ZWQgJXIiICUgKGxpbmUsIHRlc3RsaW5lKSkKKyAgICAgICAgICAgICMgUmVhZGluZyBhZnRlciBpdGVyYXRpb24gaGl0IEVPRiBzaG91bGRuJ3QgaHVydCBlaXRoZXIKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgZi5yZWFkaW50byhidWYpCisgICAgICAgICAgICAgICAgICAgIGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkKiBmYWlsZWQgYWZ0ZXIgbmV4dCgpIGNvbnN1bWVkIGZpbGUiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKK2NsYXNzIEZpbGVTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0RXhpdChzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgZXhpdGluZyB3aXRoIGNvbnRleHQgY2FsbHMgc3ViY2xhc3MnIGNsb3NlCisgICAgICAgIGNsYXNzIEMoZmlsZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuc3ViY2xhc3NfY2xvc2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmaWxlLl9faW5pdF9fKHNlbGYsICphcmdzKQorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc3ViY2xhc3NfY2xvc2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2Uoc2VsZikKKworICAgICAgICB3aXRoIEMoVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLnN1YmNsYXNzX2Nsb3NlZCkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgRmlsZVRocmVhZGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZXNlIHRlc3RzIGNoZWNrIHRoZSBhYmlsaXR5IHRvIGNhbGwgdmFyaW91cyBtZXRob2RzIG9mIGZpbGUgb2JqZWN0cworICAgICMgKGluY2x1ZGluZyBjbG9zZSgpKSBjb25jdXJyZW50bHkgd2l0aG91dCBjcmFzaGluZyB0aGUgUHl0aG9uIGludGVycHJldGVyLgorICAgICMgU2VlICM4MTU2NDYsICM1OTU2MDEKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgICAgICBzZWxmLmYgPSBOb25lCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBURVNURk4KKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIlxuIi5qb2luKCIwMTIzNDU2Nzg5IikpCisgICAgICAgIHNlbGYuX2NvdW50X2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuY2xvc2VfY291bnQgPSAwCisgICAgICAgIHNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudCA9IDAKKyAgICAgICAgc2VsZi51c2VfYnVmZmVyaW5nID0gRmFsc2UKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgKEVudmlyb25tZW50RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisKKyAgICBkZWYgX2NyZWF0ZV9maWxlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnVzZV9idWZmZXJpbmc6CisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3KyIsIGJ1ZmZlcmluZz0xMDI0KjE2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mID0gb3BlbihzZWxmLmZpbGVuYW1lLCAidysiKQorCisgICAgZGVmIF9jbG9zZV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX2NvdW50X2xvY2s6CisgICAgICAgICAgICBzZWxmLmNsb3NlX2NvdW50ICs9IDEKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgorICAgICAgICAgICAgc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50ICs9IDEKKworICAgIGRlZiBfY2xvc2VfYW5kX3Jlb3Blbl9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9jbG9zZV9maWxlKCkKKyAgICAgICAgIyBpZiBjbG9zZSByYWlzZXMgYW4gZXhjZXB0aW9uIHRoYXRzIGZpbmUsIHNlbGYuZiByZW1haW5zIHZhbGlkIHNvCisgICAgICAgICMgd2UgZG9uJ3QgbmVlZCB0byByZW9wZW4uCisgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKCkKKworICAgIGRlZiBfcnVuX3dvcmtlcnMoc2VsZiwgZnVuYywgbmJfd29ya2VycywgZHVyYXRpb249MC4yKToKKyAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb3VudCA9IDAKKyAgICAgICAgICAgIHNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudCA9IDAKKyAgICAgICAgc2VsZi5kb19jb250aW51ZSA9IFRydWUKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5iX3dvcmtlcnMpOgorICAgICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mdW5jKQorICAgICAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCisgICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGR1cmF0aW9uLzEwMCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuX2NvdW50X2xvY2s6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VfY291bnQtc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50ID4gbmJfd29ya2VycysxOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ1EnLAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoZHVyYXRpb24pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmRvX2NvbnRpbnVlID0gRmFsc2UKKyAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgdC5qb2luKCkKKworICAgIGRlZiBfdGVzdF9jbG9zZV9vcGVuX2lvKHNlbGYsIGlvX2Z1bmMsIG5iX3dvcmtlcnM9NSk6CisgICAgICAgIGRlZiB3b3JrZXIoKToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKCkKKyAgICAgICAgICAgIGZ1bmNzID0gaXRlcnRvb2xzLmN5Y2xlKCgKKyAgICAgICAgICAgICAgICBsYW1iZGE6IGlvX2Z1bmMoKSwKKyAgICAgICAgICAgICAgICBsYW1iZGE6IHNlbGYuX2Nsb3NlX2FuZF9yZW9wZW5fZmlsZSgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIGZvciBmIGluIGZ1bmNzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRvX2NvbnRpbnVlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl9ydW5fd29ya2Vycyh3b3JrZXIsIG5iX3dvcmtlcnMpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgIyBVc2VmdWwgdmVyYm9zZSBzdGF0aXN0aWNzIHdoZW4gdHVuaW5nIHRoaXMgdGVzdCB0byB0YWtlCisgICAgICAgICAgICAjIGxlc3MgdGltZSB0byBydW4gYnV0IHN0aWxsIGVuc3VyaW5nIHRoYXQgaXRzIHN0aWxsIHVzZWZ1bC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgdGhlIHBlcmNlbnQgb2YgY2xvc2UgY2FsbHMgdGhhdCByYWlzZWQgYW4gZXJyb3IKKyAgICAgICAgICAgIHBlcmNlbnQgPSAxMDAuIC0gMTAwLipzZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQvc2VsZi5jbG9zZV9jb3VudAorICAgICAgICAgICAgcHJpbnQgc2VsZi5jbG9zZV9jb3VudCwgKCclLjRmICcgJSBwZXJjZW50KSwKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW4oc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9mbHVzaChzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi5mbHVzaCgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9pdGVyKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgbGlzdChpdGVyKHNlbGYuZikpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9pc2F0dHkoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYuaXNhdHR5KCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3ByaW50KHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5mLCAnJworICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcHJpbnRfYnVmZmVyZWQoc2VsZik6CisgICAgICAgIHNlbGYudXNlX2J1ZmZlcmluZyA9IFRydWUKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHByaW50ID4+IHNlbGYuZiwgJycKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3JlYWQoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYucmVhZCgwKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcmVhZGludG8oc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBhID0gYXJyYXkoJ2MnLCAneHh4eHgnKQorICAgICAgICAgICAgc2VsZi5mLnJlYWRpbnRvKGEpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9yZWFkbGluZShzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3NlZWsoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYuc2VlaygwLCAwKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fdGVsbChzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi50ZWxsKCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3RydW5jYXRlKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLnRydW5jYXRlKCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3dyaXRlKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLndyaXRlKCcnKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fd3JpdGVsaW5lcyhzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZWxpbmVzKCcnKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICd0ZXN0IHJlcXVpcmVzIGEgcG9zaXggc3lzdGVtLicpCitjbGFzcyBUZXN0RmlsZVNpZ25hbEVJTlRSKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3RfcmVhZGluZyhzZWxmLCBkYXRhX3RvX3dyaXRlLCByZWFkX2FuZF92ZXJpZnlfY29kZSwgbWV0aG9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlKToKKyAgICAgICAgIiIiR2VuZXJpYyBidWZmZXJlZCByZWFkIG1ldGhvZCB0ZXN0IGhhcm5lc3MgdG8gdmVyaWZ5IEVJTlRSIGJlaGF2aW9yLgorCisgICAgICAgIEFsc28gdmFsaWRhdGVzIHRoYXQgUHl0aG9uIHNpZ25hbCBoYW5kbGVycyBhcmUgcnVuIGR1cmluZyB0aGUgcmVhZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZGF0YV90b193cml0ZTogU3RyaW5nIHRvIHdyaXRlIHRvIHRoZSBjaGlsZCBwcm9jZXNzIGZvciByZWFkaW5nCisgICAgICAgICAgICAgICAgYmVmb3JlIHNlbmRpbmcgaXQgYSBzaWduYWwsIGNvbmZpcm1pbmcgdGhlIHNpZ25hbCB3YXMgaGFuZGxlZCwKKyAgICAgICAgICAgICAgICB3cml0aW5nIGEgZmluYWwgbmV3bGluZSBjaGFyIGFuZCBjbG9zaW5nIHRoZSBpbmZpbGUgcGlwZS4KKyAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlOiBTaW5nbGUgImxpbmUiIG9mIGNvZGUgdG8gcmVhZCBmcm9tIGEgZmlsZQorICAgICAgICAgICAgICAgIG9iamVjdCBuYW1lZCAnaW5maWxlJyBhbmQgdmFsaWRhdGUgdGhlIHJlc3VsdC4gIFRoaXMgd2lsbCBiZQorICAgICAgICAgICAgICAgIGV4ZWN1dGVkIGFzIHBhcnQgb2YgYSBweXRob24gc3VicHJvY2VzcyBmZWQgZGF0YV90b193cml0ZS4KKyAgICAgICAgICAgIG1ldGhvZF9uYW1lOiBUaGUgbmFtZSBvZiB0aGUgcmVhZCBtZXRob2QgYmVpbmcgdGVzdGVkLCBmb3IgdXNlIGluCisgICAgICAgICAgICAgICAgYW4gZXJyb3IgbWVzc2FnZSBvbiBmYWlsdXJlLgorICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzOiBJZiBUcnVlLCBpbmZpbGUgd2lsbCBiZSBvcGVuZWQgaW4gdW5pdmVyc2FsCisgICAgICAgICAgICAgICAgbmV3bGluZSBtb2RlIGluIHRoZSBjaGlsZCBwcm9jZXNzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgdW5pdmVyc2FsX25ld2xpbmVzOgorICAgICAgICAgICAgIyBUZXN0IHRoZSBcclxuIC0+IFxuIGNvbnZlcnNpb24gd2hpbGUgd2UncmUgYXQgaXQuCisgICAgICAgICAgICBkYXRhX3RvX3dyaXRlID0gZGF0YV90b193cml0ZS5yZXBsYWNlKCdcbicsICdcclxuJykKKyAgICAgICAgICAgIGluZmlsZV9zZXR1cF9jb2RlID0gJ2luZmlsZSA9IG9zLmZkb3BlbihzeXMuc3RkaW4uZmlsZW5vKCksICJyVSIpJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5maWxlX3NldHVwX2NvZGUgPSAnaW5maWxlID0gc3lzLnN0ZGluJworICAgICAgICAjIFRvdGFsIHBpcGUgSU8gaW4gdGhpcyBmdW5jdGlvbiBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gcG9zaXggT1MKKyAgICAgICAgIyBwaXBlIGJ1ZmZlciBzaXplIG9mIDUxMiBieXRlcy4gIE5vIHdyaXRlciBzaG91bGQgYmxvY2suCisgICAgICAgIGFzc2VydCBsZW4oZGF0YV90b193cml0ZSkgPCA1MTIsICdkYXRhX3RvX3dyaXRlIG11c3QgZml0IGluIHBpcGUgYnVmLicKKworICAgICAgICBjaGlsZF9jb2RlID0gKAorICAgICAgICAgICAgICdpbXBvcnQgb3MsIHNpZ25hbCwgc3lzIDsnCisgICAgICAgICAgICAgJ3NpZ25hbC5zaWduYWwoJworICAgICAgICAgICAgICAgICAgICAgJ3NpZ25hbC5TSUdJTlQsIGxhbWJkYSBzLCBmOiBzeXMuc3RkZXJyLndyaXRlKCIkXFxuIikpIDsnCisgICAgICAgICAgICAgKyBpbmZpbGVfc2V0dXBfY29kZSArICcgOycgKworICAgICAgICAgICAgICdhc3NlcnQgaXNpbnN0YW5jZShpbmZpbGUsIGZpbGUpIDsnCisgICAgICAgICAgICAgJ3N5cy5zdGRlcnIud3JpdGUoIkdvLlxcbiIpIDsnCisgICAgICAgICAgICAgKyByZWFkX2FuZF92ZXJpZnlfY29kZSkKKyAgICAgICAgcmVhZGVyX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgY2hpbGRfY29kZV0sCisgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICMgV2FpdCBmb3IgdGhlIHNpZ25hbCBoYW5kbGVyIHRvIGJlIGluc3RhbGxlZC4KKyAgICAgICAgZ28gPSByZWFkZXJfcHJvY2Vzcy5zdGRlcnIucmVhZCg0KQorICAgICAgICBpZiBnbyAhPSAnR28uXG4nOgorICAgICAgICAgICAgcmVhZGVyX3Byb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoJ0Vycm9yIGZyb20gJXMgcHJvY2VzcyB3aGlsZSBhd2FpdGluZyAiR28iOlxuJXMnICUgKAorICAgICAgICAgICAgICAgICAgICBtZXRob2RfbmFtZSwgZ28rcmVhZGVyX3Byb2Nlc3Muc3RkZXJyLnJlYWQoKSkpCisgICAgICAgIHJlYWRlcl9wcm9jZXNzLnN0ZGluLndyaXRlKGRhdGFfdG9fd3JpdGUpCisgICAgICAgIHNpZ25hbHNfc2VudCA9IDAKKyAgICAgICAgcmxpc3QgPSBbXQorICAgICAgICAjIFdlIGRvbid0IGtub3cgd2hlbiB0aGUgcmVhZF9hbmRfdmVyaWZ5X2NvZGUgaW4gb3VyIGNoaWxkIGlzIGFjdHVhbGx5CisgICAgICAgICMgZXhlY3V0aW5nIHdpdGhpbiB0aGUgcmVhZCBzeXN0ZW0gY2FsbCB3ZSB3YW50IHRvIGludGVycnVwdC4gIFRoaXMKKyAgICAgICAgIyBsb29wIHdhaXRzIGZvciBhIGJpdCBiZWZvcmUgc2VuZGluZyB0aGUgZmlyc3Qgc2lnbmFsIHRvIGluY3JlYXNlCisgICAgICAgICMgdGhlIGxpa2VsaWhvb2Qgb2YgdGhhdC4gIEltcGxlbWVudGF0aW9ucyB3aXRob3V0IGNvcnJlY3QgRUlOVFIKKyAgICAgICAgIyBhbmQgc2lnbmFsIGhhbmRsaW5nIHVzdWFsbHkgZmFpbCB0aGlzIHRlc3QuCisgICAgICAgIHdoaWxlIG5vdCBybGlzdDoKKyAgICAgICAgICAgIHJsaXN0LCBfLCBfID0gc2VsZWN0LnNlbGVjdChbcmVhZGVyX3Byb2Nlc3Muc3RkZXJyXSwgKCksICgpLCAwLjA1KQorICAgICAgICAgICAgcmVhZGVyX3Byb2Nlc3Muc2VuZF9zaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgICMgR2l2ZSB0aGUgc3VicHJvY2VzcyB0aW1lIHRvIGhhbmRsZSBpdCBiZWZvcmUgd2UgbG9vcCBhcm91bmQgYW5kCisgICAgICAgICAgICAjIHNlbmQgYW5vdGhlciBvbmUuICBPbiBPU1ggdGhlIHNlY29uZCBzaWduYWwgaGFwcGVuaW5nIGNsb3NlIHRvCisgICAgICAgICAgICAjIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmaXJzdCB3YXMgY2F1c2luZyB0aGUgc3VicHJvY2VzcyB0byBjcmFzaAorICAgICAgICAgICAgIyB2aWEgdGhlIE9TJ3MgZGVmYXVsdCBTSUdJTlQgaGFuZGxlci4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgc2lnbmFsc19zZW50ICs9IDEKKyAgICAgICAgICAgIGlmIHNpZ25hbHNfc2VudCA+IDIwMDoKKyAgICAgICAgICAgICAgICByZWFkZXJfcHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImZhaWxlZCB0byBoYW5kbGUgc2lnbmFsIGR1cmluZyAlcy4iICUgbWV0aG9kX25hbWUpCisgICAgICAgICMgVGhpcyBhc3N1bWVzIGFueXRoaW5nIHVuZXhwZWN0ZWQgdGhhdCB3cml0ZXMgdG8gc3RkZXJyIHdpbGwgYWxzbworICAgICAgICAjIHdyaXRlIGEgbmV3bGluZS4gIFRoYXQgaXMgdHJ1ZSBvZiB0aGUgdHJhY2ViYWNrIHByaW50aW5nIGNvZGUuCisgICAgICAgIHNpZ25hbF9saW5lID0gcmVhZGVyX3Byb2Nlc3Muc3RkZXJyLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgc2lnbmFsX2xpbmUgIT0gJyRcbic6CisgICAgICAgICAgICByZWFkZXJfcHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRXJyb3IgZnJvbSAlcyBwcm9jZXNzIHdoaWxlIGF3YWl0aW5nIHNpZ25hbDpcbiVzJyAlICgKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kX25hbWUsIHNpZ25hbF9saW5lK3JlYWRlcl9wcm9jZXNzLnN0ZGVyci5yZWFkKCkpKQorICAgICAgICAjIFdlIGFwcGVuZCBhIG5ld2xpbmUgdG8gb3VyIGlucHV0IHNvIHRoYXQgYSByZWFkbGluZSBjYWxsIGNhbgorICAgICAgICAjIGVuZCBvbiBpdHMgb3duIGJlZm9yZSB0aGUgRU9GIGlzIHNlZW4uCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcmVhZGVyX3Byb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXQ9J1xuJykKKyAgICAgICAgaWYgcmVhZGVyX3Byb2Nlc3MucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgc2VsZi5mYWlsKCclcygpIHByb2Nlc3MgZXhpdGVkIHJjPSVkLlxuU1RET1VUOlxuJXNcblNUREVSUjpcbiVzJyAlICgKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kX25hbWUsIHJlYWRlcl9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSk6CisgICAgICAgICIiImZpbGUucmVhZGxpbmUgbXVzdCBoYW5kbGUgc2lnbmFscyBhbmQgbm90IGxvc2UgZGF0YS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkaW5nKAorICAgICAgICAgICAgICAgIGRhdGFfdG9fd3JpdGU9J2hlbGxvLCB3b3JsZCEnLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPSgKKyAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lID0gaW5maWxlLnJlYWRsaW5lKCkgOycKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZF9saW5lID0gImhlbGxvLCB3b3JsZCFcXG4iIDsnCisgICAgICAgICAgICAgICAgICAgICAgICAnYXNzZXJ0IGxpbmUgPT0gZXhwZWN0ZWRfbGluZSwgKCcKKyAgICAgICAgICAgICAgICAgICAgICAgICcicmVhZCAlciBleHBlY3RlZCAlciIgJSAobGluZSwgZXhwZWN0ZWRfbGluZSkpJworICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgbWV0aG9kX25hbWU9J3JlYWRsaW5lJywKKyAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9dW5pdmVyc2FsX25ld2xpbmVzKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfd2l0aF91bml2ZXJzYWxfbmV3bGluZXMoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9yZWFkbGluZSh1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UpOgorICAgICAgICAiIiJmaWxlLnJlYWRsaW5lcyBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT0naGVsbG9cbndvcmxkIScsCisgICAgICAgICAgICAgICAgcmVhZF9hbmRfdmVyaWZ5X2NvZGU9KAorICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbmVzID0gaW5maWxlLnJlYWRsaW5lcygpIDsnCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWRfbGluZXMgPSBbImhlbGxvXFxuIiwgIndvcmxkIVxcbiJdIDsnCisgICAgICAgICAgICAgICAgICAgICAgICAnYXNzZXJ0IGxpbmVzID09IGV4cGVjdGVkX2xpbmVzLCAoJworICAgICAgICAgICAgICAgICAgICAgICAgJyJyZWFkbGluZXMgcmV0dXJuZWQgd3JvbmcgZGF0YS5cXG4iICcKKyAgICAgICAgICAgICAgICAgICAgICAgICciZ290IGxpbmVzICVyXFxuZXhwZWN0ZWQgICVyIiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnJSAobGluZXMsIGV4cGVjdGVkX2xpbmVzKSknCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBtZXRob2RfbmFtZT0ncmVhZGxpbmVzJywKKyAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9dW5pdmVyc2FsX25ld2xpbmVzKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX3dpdGhfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfcmVhZGxpbmVzKHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorCisgICAgZGVmIHRlc3RfcmVhZGFsbChzZWxmKToKKyAgICAgICAgIiIiVW5ib3VuZGVkIGZpbGUucmVhZCgpIG11c3QgaGFuZGxlIHNpZ25hbHMgYW5kIG5vdCBsb3NlIGRhdGEuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGluZygKKyAgICAgICAgICAgICAgICBkYXRhX3RvX3dyaXRlPSdoZWxsbywgd29ybGQhYWJjZGVmZ2hpamtsbScsCisgICAgICAgICAgICAgICAgcmVhZF9hbmRfdmVyaWZ5X2NvZGU9KAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEgPSBpbmZpbGUucmVhZCgpIDsnCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWRfZGF0YSA9ICJoZWxsbywgd29ybGQhYWJjZGVmZ2hpamtsbVxcbiI7JworICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2VydCBkYXRhID09IGV4cGVjdGVkX2RhdGEsICgnCisgICAgICAgICAgICAgICAgICAgICAgICAnInJlYWQgJXIgZXhwZWN0ZWQgJXIiICUgKGRhdGEsIGV4cGVjdGVkX2RhdGEpKScKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lPSd1bmJvdW5kZWQgcmVhZCcpCisKKyAgICBkZWYgdGVzdF9yZWFkaW50byhzZWxmKToKKyAgICAgICAgIiIiZmlsZS5yZWFkaW50byBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT0naGVsbG8sIHdvcmxkIScsCisgICAgICAgICAgICAgICAgcmVhZF9hbmRfdmVyaWZ5X2NvZGU9KAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEgPSBieXRlYXJyYXkoNTApIDsnCisgICAgICAgICAgICAgICAgICAgICAgICAnbnVtX3JlYWQgPSBpbmZpbGUucmVhZGludG8oZGF0YSkgOycKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZF9kYXRhID0gImhlbGxvLCB3b3JsZCFcXG4iOycKKyAgICAgICAgICAgICAgICAgICAgICAgICdhc3NlcnQgZGF0YVs6bnVtX3JlYWRdID09IGV4cGVjdGVkX2RhdGEsICgnCisgICAgICAgICAgICAgICAgICAgICAgICAnInJlYWQgJXIgZXhwZWN0ZWQgJXIiICUgKGRhdGEsIGV4cGVjdGVkX2RhdGEpKScKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lPSdyZWFkaW50bycpCisKKworY2xhc3MgU3Rkb3V0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbW92ZV9zdGRvdXRfb25fd3JpdGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgMzI0Mjogc3lzLnN0ZG91dCBjYW4gYmUgcmVwbGFjZWQgKGFuZCBmcmVlZCkgZHVyaW5nIGEKKyAgICAgICAgIyBwcmludCBzdGF0ZW1lbnQ7IHByZXZlbnQgYSBzZWdmYXVsdCBpbiB0aGlzIGNhc2UKKyAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CisKKyAgICAgICAgY2xhc3MgRmlsZToKKyAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgICAgICAgICBpZiAnXG4nIGluIGRhdGE6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBGaWxlKCkKKyAgICAgICAgICAgIHByaW50ICJzb21lIHRleHQiCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKKworICAgIGRlZiB0ZXN0X2RlbF9zdGRvdXRfYmVmb3JlX3ByaW50KHNlbGYpOgorICAgICAgICAjIElzc3VlIDQ1OTc6ICdwcmludCcgd2l0aCBubyBhcmd1bWVudCB3YXNuJ3QgcmVwb3J0aW5nIHdoZW4KKyAgICAgICAgIyBzeXMuc3Rkb3V0IHdhcyBkZWxldGVkLgorICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgZGVsIHN5cy5zdGRvdXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJsb3N0IHN5cy5zdGRvdXQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBSdW50aW1lRXJyb3IiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgICAgIGRlZiBnZXRfbWVzc2FnZShlbmNvZGluZywgKmNvZGUpOgorICAgICAgICAgICAgY29kZSA9ICdcbicuam9pbihjb2RlKQorICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgICAgIGVudlsnUFlUSE9OSU9FTkNPRElORyddID0gZW5jb2RpbmcKKyAgICAgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgY29kZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy5yZXR1cm5jb2RlLCAwKQorICAgICAgICAgICAgcmV0dXJuIHN0ZG91dAorCisgICAgICAgIGRlZiBjaGVja19tZXNzYWdlKHRleHQsIGVuY29kaW5nLCBleHBlY3RlZCk6CisgICAgICAgICAgICBzdGRvdXQgPSBnZXRfbWVzc2FnZShlbmNvZGluZywKKyAgICAgICAgICAgICAgICAiaW1wb3J0IHN5cyIsCisgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQud3JpdGUoJXIpIiAlIHRleHQsCisgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQuZmx1c2goKSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgZXhwZWN0ZWQpCisKKyAgICAgICAgIyB0ZXN0IHRoZSBlbmNvZGluZworICAgICAgICBjaGVja19tZXNzYWdlKHUnMTVcdTIwYWMnLCAiaXNvLTg4NTktMTUiLCAiMTVceGE0IikKKyAgICAgICAgY2hlY2tfbWVzc2FnZSh1JzE1XHUyMGFjJywgInV0Zi04IiwgJzE1XHhlMlx4ODJceGFjJykKKyAgICAgICAgY2hlY2tfbWVzc2FnZSh1JzE1XHUyMGFjJywgInV0Zi0xNi1sZSIsICcxXHgwMDVceDAwXHhhY1x4MjAnKQorCisgICAgICAgICMgdGVzdCB0aGUgZXJyb3IgaGFuZGxlcgorICAgICAgICBjaGVja19tZXNzYWdlKHUnMTVcdTIwYWMnLCAiaXNvLTg4NTktMTppZ25vcmUiLCAiMTUiKQorICAgICAgICBjaGVja19tZXNzYWdlKHUnMTVcdTIwYWMnLCAiaXNvLTg4NTktMTpyZXBsYWNlIiwgIjE1PyIpCisgICAgICAgIGNoZWNrX21lc3NhZ2UodScxNVx1MjBhYycsICJpc28tODg1OS0xOmJhY2tzbGFzaHJlcGxhY2UiLCAiMTVcXHUyMGFjIikKKworICAgICAgICAjIHRlc3QgdGhlIGJ1ZmZlciBBUEkKKyAgICAgICAgZm9yIG9ianR5cGUgaW4gKCdidWZmZXInLCAnYnl0ZWFycmF5Jyk6CisgICAgICAgICAgICBzdGRvdXQgPSBnZXRfbWVzc2FnZSgnYXNjaWknLAorICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzJywKKyAgICAgICAgICAgICAgICByJ3N5cy5zdGRvdXQud3JpdGUoJXMoIlx4ZTkiKSknICUgb2JqdHlwZSwKKyAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCAiXHhlOSIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgSGlzdG9yaWNhbGx5LCB0aGVzZSB0ZXN0cyBoYXZlIGJlZW4gc2xvcHB5IGFib3V0IHJlbW92aW5nIFRFU1RGTi4KKyAgICAjIFNvIGdldCByaWQgb2YgaXQgbm8gbWF0dGVyIHdoYXQuCisgICAgdHJ5OgorICAgICAgICBydW5fdW5pdHRlc3QoQXV0b0ZpbGVUZXN0cywgT3RoZXJGaWxlVGVzdHMsIEZpbGVTdWJjbGFzc1Rlc3RzLAorICAgICAgICAgICAgRmlsZVRocmVhZGluZ1Rlc3RzLCBUZXN0RmlsZVNpZ25hbEVJTlRSLCBTdGRvdXRUZXN0cykKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZmlsZV9laW50ci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ZpbGVfZWludHIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiZmYzYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ZpbGVfZWludHIucHkKQEAgLTAsMCArMSwyMzkgQEAKKyMgV3JpdHRlbiB0byB0ZXN0IGludGVycnVwdGVkIHN5c3RlbSBjYWxscyBpbnRlcmZlcmluZyB3aXRoIG91ciBtYW55IGJ1ZmZlcmVkCisjIElPIGltcGxlbWVudGF0aW9ucy4gIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjI2OAorIworIyBUaGlzIHRlc3RzIHRoZSAnX2lvJyBtb2R1bGUuICBTaW1pbGFyIHRlc3RzIGZvciBQeXRob24gMi54J3Mgb2xkZXIKKyMgZGVmYXVsdCBmaWxlIEkvTyBpbXBsZW1lbnRhdGlvbiBleGlzdCB3aXRoaW4gdGVzdF9maWxlMmsucHkuCisjCisjIEl0IHdhcyBzdWdnZXN0ZWQgdGhhdCB0aGlzIGNvZGUgY291bGQgYmUgbWVyZ2VkIGludG8gdGVzdF9pbyBhbmQgdGhlIHRlc3RzCisjIG1hZGUgdG8gd29yayB1c2luZyB0aGUgc2FtZSBtZXRob2QgYXMgdGhlIGV4aXN0aW5nIHNpZ25hbCB0ZXN0cyBpbiB0ZXN0X2lvLgorIyBJIHdhcyB1bmFibGUgdG8gZ2V0IHNpbmdsZSBwcm9jZXNzIHRlc3RzIHVzaW5nIGFsYXJtIG9yIHNldGl0aW1lciB0aGF0IHdheQorIyB0byByZXByb2R1Y2UgdGhlIEVJTlRSIHByb2JsZW1zLiAgVGhpcyBwcm9jZXNzIGJhc2VkIHRlc3Qgc3VpdGUgcmVwcm9kdWNlcworIyB0aGUgcHJvYmxlbXMgcHJpb3IgdG8gdGhlIGlzc3VlMTIyNjggcGF0Y2ggcmVsaWFibHkgb24gTGludXggYW5kIE9TWC4KKyMgIC0gZ3JlZ29yeS5wLnNtaXRoCisKK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCisjIFRlc3QgaW1wb3J0IGFsbCBvZiB0aGUgdGhpbmdzIHdlJ3JlIGFib3V0IHRvIHRyeSB0ZXN0aW5nIHVwIGZyb250LgorZnJvbSBfaW8gaW1wb3J0IEZpbGVJTworCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgJ3Rlc3RzIHJlcXVpcmVzIGEgcG9zaXggc3lzdGVtLicpCitjbGFzcyBUZXN0RmlsZUlPU2lnbmFsSW50ZXJydXB0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MgYW5kIHNlbGYuX3Byb2Nlc3MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfZ2VuZXJhdGVfaW5maWxlX3NldHVwX2NvZGUoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGluZmlsZSA9IC4uLiBsaW5lIG9mIGNvZGUgZm9yIHRoZSByZWFkZXIgcHJvY2Vzcy4KKworICAgICAgICBzdWJjbGFzc2VzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gdGVzdCBkaWZmZXJlbnQgSU8gb2JqZWN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAoJ2ltcG9ydCBfaW8gOycKKyAgICAgICAgICAgICAgICAnaW5maWxlID0gX2lvLkZpbGVJTyhzeXMuc3RkaW4uZmlsZW5vKCksICJyYiIpJykKKworICAgIGRlZiBmYWlsX3dpdGhfcHJvY2Vzc19pbmZvKHNlbGYsIHdoeSwgc3Rkb3V0PWInJywgc3RkZXJyPWInJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tdW5pY2F0ZT1UcnVlKToKKyAgICAgICAgIiIiQSBjb21tb24gd2F5IHRvIGNsZWFudXAgYW5kIGZhaWwgd2l0aCB1c2VmdWwgZGVidWcgb3V0cHV0LgorCisgICAgICAgIEtpbGxzIHRoZSBwcm9jZXNzIGlmIGl0IGlzIHN0aWxsIHJ1bm5pbmcsIGNvbGxlY3RzIHJlbWFpbmluZyBvdXRwdXQKKyAgICAgICAgYW5kIGZhaWxzIHRoZSB0ZXN0IHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIG91dHB1dC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgd2h5OiBUZXh0IHRvIGdvIGFmdGVyICJFcnJvciBmcm9tIElPIHByb2Nlc3MiIGluIHRoZSBtZXNzYWdlLgorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnI6IHN0YW5kYXJkIG91dHB1dCBhbmQgZXJyb3IgZnJvbSB0aGUgcHJvY2VzcyBzbworICAgICAgICAgICAgICAgIGZhciB0byBpbmNsdWRlIGluIHRoZSBlcnJvciBtZXNzYWdlLgorICAgICAgICAgICAgY29tbXVuaWNhdGU6IGJvb2wsIHdoZW4gVHJ1ZSB3ZSBjYWxsIGNvbW11bmljYXRlKCkgb24gdGhlIHByb2Nlc3MKKyAgICAgICAgICAgICAgICBhZnRlciBraWxsaW5nIGl0IHRvIGdhdGhlciBhZGRpdGlvbmFsIG91dHB1dC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkgICMgZ2l2ZSBpdCB0aW1lIHRvIGZpbmlzaCBwcmludGluZyB0aGUgZXJyb3IuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy50ZXJtaW5hdGUoKSAgIyBFbnN1cmUgaXQgZGllcy4KKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgY29tbXVuaWNhdGU6CisgICAgICAgICAgICBzdGRvdXRfZW5kLCBzdGRlcnJfZW5kID0gc2VsZi5fcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBzdGRvdXQgKz0gc3Rkb3V0X2VuZAorICAgICAgICAgICAgc3RkZXJyICs9IHN0ZGVycl9lbmQKKyAgICAgICAgc2VsZi5mYWlsKCdFcnJvciBmcm9tIElPIHByb2Nlc3MgJXM6XG5TVERPVVQ6XG4lc1NUREVSUjpcbiVzXG4nICUKKyAgICAgICAgICAgICAgICAgICh3aHksIHN0ZG91dC5kZWNvZGUoKSwgc3RkZXJyLmRlY29kZSgpKSkKKworICAgIGRlZiBfdGVzdF9yZWFkaW5nKHNlbGYsIGRhdGFfdG9fd3JpdGUsIHJlYWRfYW5kX3ZlcmlmeV9jb2RlKToKKyAgICAgICAgIiIiR2VuZXJpYyBidWZmZXJlZCByZWFkIG1ldGhvZCB0ZXN0IGhhcm5lc3MgdG8gdmFsaWRhdGUgRUlOVFIgYmVoYXZpb3IuCisKKyAgICAgICAgQWxzbyB2YWxpZGF0ZXMgdGhhdCBQeXRob24gc2lnbmFsIGhhbmRsZXJzIGFyZSBydW4gZHVyaW5nIHRoZSByZWFkLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBkYXRhX3RvX3dyaXRlOiBTdHJpbmcgdG8gd3JpdGUgdG8gdGhlIGNoaWxkIHByb2Nlc3MgZm9yIHJlYWRpbmcKKyAgICAgICAgICAgICAgICBiZWZvcmUgc2VuZGluZyBpdCBhIHNpZ25hbCwgY29uZmlybWluZyB0aGUgc2lnbmFsIHdhcyBoYW5kbGVkLAorICAgICAgICAgICAgICAgIHdyaXRpbmcgYSBmaW5hbCBuZXdsaW5lIGFuZCBjbG9zaW5nIHRoZSBpbmZpbGUgcGlwZS4KKyAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlOiBTaW5nbGUgImxpbmUiIG9mIGNvZGUgdG8gcmVhZCBmcm9tIGEgZmlsZQorICAgICAgICAgICAgICAgIG9iamVjdCBuYW1lZCAnaW5maWxlJyBhbmQgdmFsaWRhdGUgdGhlIHJlc3VsdC4gIFRoaXMgd2lsbCBiZQorICAgICAgICAgICAgICAgIGV4ZWN1dGVkIGFzIHBhcnQgb2YgYSBweXRob24gc3VicHJvY2VzcyBmZWQgZGF0YV90b193cml0ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGluZmlsZV9zZXR1cF9jb2RlID0gc2VsZi5fZ2VuZXJhdGVfaW5maWxlX3NldHVwX2NvZGUoKQorICAgICAgICAjIFRvdGFsIHBpcGUgSU8gaW4gdGhpcyBmdW5jdGlvbiBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gcG9zaXggT1MKKyAgICAgICAgIyBwaXBlIGJ1ZmZlciBzaXplIG9mIDUxMiBieXRlcy4gIE5vIHdyaXRlciBzaG91bGQgYmxvY2suCisgICAgICAgIGFzc2VydCBsZW4oZGF0YV90b193cml0ZSkgPCA1MTIsICdkYXRhX3RvX3dyaXRlIG11c3QgZml0IGluIHBpcGUgYnVmLicKKworICAgICAgICAjIFN0YXJ0IGEgc3VicHJvY2VzcyB0byBjYWxsIG91ciByZWFkIG1ldGhvZCB3aGlsZSBoYW5kbGluZyBhIHNpZ25hbC4KKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAnLXUnLCAnLWMnLAorICAgICAgICAgICAgICAgICAnaW1wb3J0IGlvLCBzaWduYWwsIHN5cyA7JworICAgICAgICAgICAgICAgICAnc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhbWJkYSBzLCBmOiBzeXMuc3RkZXJyLndyaXRlKCIkXFxuIikpIDsnCisgICAgICAgICAgICAgICAgICsgaW5maWxlX3NldHVwX2NvZGUgKyAnIDsnICsKKyAgICAgICAgICAgICAgICAgJ3N5cy5zdGRlcnIud3JpdGUoIldvcm0gU2lnbiFcXG4iKSA7JworICAgICAgICAgICAgICAgICArIHJlYWRfYW5kX3ZlcmlmeV9jb2RlICsgJyA7JyArCisgICAgICAgICAgICAgICAgICdpbmZpbGUuY2xvc2UoKScKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorCisgICAgICAgICMgV2FpdCBmb3IgdGhlIHNpZ25hbCBoYW5kbGVyIHRvIGJlIGluc3RhbGxlZC4KKyAgICAgICAgd29ybV9zaWduID0gc2VsZi5fcHJvY2Vzcy5zdGRlcnIucmVhZChsZW4oYidXb3JtIFNpZ24hXG4nKSkKKyAgICAgICAgaWYgd29ybV9zaWduICE9IGInV29ybSBTaWduIVxuJzogICMgU2VlIGFsc28sIER1bmUgYnkgRnJhbmsgSGVyYmVydC4KKyAgICAgICAgICAgIHNlbGYuZmFpbF93aXRoX3Byb2Nlc3NfaW5mbygnd2hpbGUgYXdhaXRpbmcgYSBzaWduJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9d29ybV9zaWduKQorICAgICAgICBzZWxmLl9wcm9jZXNzLnN0ZGluLndyaXRlKGRhdGFfdG9fd3JpdGUpCisKKyAgICAgICAgc2lnbmFsc19zZW50ID0gMAorICAgICAgICBybGlzdCA9IFtdCisgICAgICAgICMgV2UgZG9uJ3Qga25vdyB3aGVuIHRoZSByZWFkX2FuZF92ZXJpZnlfY29kZSBpbiBvdXIgY2hpbGQgaXMgYWN0dWFsbHkKKyAgICAgICAgIyBleGVjdXRpbmcgd2l0aGluIHRoZSByZWFkIHN5c3RlbSBjYWxsIHdlIHdhbnQgdG8gaW50ZXJydXB0LiAgVGhpcworICAgICAgICAjIGxvb3Agd2FpdHMgZm9yIGEgYml0IGJlZm9yZSBzZW5kaW5nIHRoZSBmaXJzdCBzaWduYWwgdG8gaW5jcmVhc2UKKyAgICAgICAgIyB0aGUgbGlrZWxpaG9vZCBvZiB0aGF0LiAgSW1wbGVtZW50YXRpb25zIHdpdGhvdXQgY29ycmVjdCBFSU5UUgorICAgICAgICAjIGFuZCBzaWduYWwgaGFuZGxpbmcgdXN1YWxseSBmYWlsIHRoaXMgdGVzdC4KKyAgICAgICAgd2hpbGUgbm90IHJsaXN0OgorICAgICAgICAgICAgcmxpc3QsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzZWxmLl9wcm9jZXNzLnN0ZGVycl0sICgpLCAoKSwgMC4wNSkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Muc2VuZF9zaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgIHNpZ25hbHNfc2VudCArPSAxCisgICAgICAgICAgICBpZiBzaWduYWxzX3NlbnQgPiAyMDA6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3JlYWRlciBwcm9jZXNzIGZhaWxlZCB0byBoYW5kbGUgb3VyIHNpZ25hbHMuJykKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgYW55dGhpbmcgdW5leHBlY3RlZCB0aGF0IHdyaXRlcyB0byBzdGRlcnIgd2lsbCBhbHNvCisgICAgICAgICMgd3JpdGUgYSBuZXdsaW5lLiAgVGhhdCBpcyB0cnVlIG9mIHRoZSB0cmFjZWJhY2sgcHJpbnRpbmcgY29kZS4KKyAgICAgICAgc2lnbmFsX2xpbmUgPSBzZWxmLl9wcm9jZXNzLnN0ZGVyci5yZWFkbGluZSgpCisgICAgICAgIGlmIHNpZ25hbF9saW5lICE9IGInJFxuJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbF93aXRoX3Byb2Nlc3NfaW5mbygnd2hpbGUgYXdhaXRpbmcgc2lnbmFsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c2lnbmFsX2xpbmUpCisKKyAgICAgICAgIyBXZSBhcHBlbmQgYSBuZXdsaW5lIHRvIG91ciBpbnB1dCBzbyB0aGF0IGEgcmVhZGxpbmUgY2FsbCBjYW4KKyAgICAgICAgIyBlbmQgb24gaXRzIG93biBiZWZvcmUgdGhlIEVPRiBpcyBzZWVuIGFuZCBzbyB0aGF0IHdlJ3JlIHRlc3RpbmcKKyAgICAgICAgIyB0aGUgcmVhZCBjYWxsIHRoYXQgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGJlZm9yZSB0aGUgZW5kIG9mCisgICAgICAgICMgdGhlIGRhdGEgc3RyZWFtIGhhcyBiZWVuIHJlYWNoZWQuCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fcHJvY2Vzcy5jb21tdW5pY2F0ZShpbnB1dD1iJ1xuJykKKyAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2RlOgorICAgICAgICAgICAgc2VsZi5mYWlsX3dpdGhfcHJvY2Vzc19pbmZvKAorICAgICAgICAgICAgICAgICAgICAnZXhpdGVkIHJjPSVkJyAlIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIsIGNvbW11bmljYXRlPUZhbHNlKQorICAgICAgICAjIFBBU1MhCisKKyAgICAjIFN0cmluZyBmb3JtYXQgZm9yIHRoZSByZWFkX2FuZF92ZXJpZnlfY29kZSB1c2VkIGJ5IHJlYWQgbWV0aG9kcy4KKyAgICBfUkVBRElOR19DT0RFX1RFTVBMQVRFID0gKAorICAgICAgICAgICAgJ2dvdCA9IGluZmlsZS57cmVhZF9tZXRob2RfbmFtZX0oKSA7JworICAgICAgICAgICAgJ2V4cGVjdGVkID0ge2V4cGVjdGVkIXJ9IDsnCisgICAgICAgICAgICAnYXNzZXJ0IGdvdCA9PSBleHBlY3RlZCwgKCcKKyAgICAgICAgICAgICAgICAgICAgJyJ7cmVhZF9tZXRob2RfbmFtZX0gcmV0dXJuZWQgd3JvbmcgZGF0YS5cXG4iJworICAgICAgICAgICAgICAgICAgICAnImdvdCBkYXRhICVyXFxuZXhwZWN0ZWQgJXIiICUgKGdvdCwgZXhwZWN0ZWQpKScKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICAiIiJyZWFkbGluZSgpIG11c3QgaGFuZGxlIHNpZ25hbHMgYW5kIG5vdCBsb3NlIGRhdGEuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGluZygKKyAgICAgICAgICAgICAgICBkYXRhX3RvX3dyaXRlPWInaGVsbG8sIHdvcmxkIScsCisgICAgICAgICAgICAgICAgcmVhZF9hbmRfdmVyaWZ5X2NvZGU9c2VsZi5fUkVBRElOR19DT0RFX1RFTVBMQVRFLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbWV0aG9kX25hbWU9J3JlYWRsaW5lJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPWInaGVsbG8sIHdvcmxkIVxuJykpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgICIiInJlYWRsaW5lcygpIG11c3QgaGFuZGxlIHNpZ25hbHMgYW5kIG5vdCBsb3NlIGRhdGEuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGluZygKKyAgICAgICAgICAgICAgICBkYXRhX3RvX3dyaXRlPWInaGVsbG9cbndvcmxkIScsCisgICAgICAgICAgICAgICAgcmVhZF9hbmRfdmVyaWZ5X2NvZGU9c2VsZi5fUkVBRElOR19DT0RFX1RFTVBMQVRFLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbWV0aG9kX25hbWU9J3JlYWRsaW5lcycsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1bYidoZWxsb1xuJywgYid3b3JsZCFcbiddKSkKKworICAgIGRlZiB0ZXN0X3JlYWRhbGwoc2VsZik6CisgICAgICAgICIiInJlYWRhbGwoKSBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT1iJ2hlbGxvXG53b3JsZCEnLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPXNlbGYuX1JFQURJTkdfQ09ERV9URU1QTEFURS5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX21ldGhvZF9uYW1lPSdyZWFkYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPWInaGVsbG9cbndvcmxkIVxuJykpCisgICAgICAgICMgcmVhZCgpIGlzIHRoZSBzYW1lIHRoaW5nIGFzIHJlYWRhbGwoKS4KKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkaW5nKAorICAgICAgICAgICAgICAgIGRhdGFfdG9fd3JpdGU9YidoZWxsb1xud29ybGQhJywKKyAgICAgICAgICAgICAgICByZWFkX2FuZF92ZXJpZnlfY29kZT1zZWxmLl9SRUFESU5HX0NPREVfVEVNUExBVEUuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9tZXRob2RfbmFtZT0ncmVhZCcsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1iJ2hlbGxvXG53b3JsZCFcbicpKQorCisKK2NsYXNzIFRlc3RCdWZmZXJlZElPU2lnbmFsSW50ZXJydXB0KFRlc3RGaWxlSU9TaWduYWxJbnRlcnJ1cHQpOgorICAgIGRlZiBfZ2VuZXJhdGVfaW5maWxlX3NldHVwX2NvZGUoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGluZmlsZSA9IC4uLiBsaW5lIG9mIGNvZGUgdG8gbWFrZSBhIEJ1ZmZlcmVkUmVhZGVyLiIiIgorICAgICAgICByZXR1cm4gKCdpbmZpbGUgPSBpby5vcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgInJiIikgOycKKyAgICAgICAgICAgICAgICAnaW1wb3J0IF9pbyA7YXNzZXJ0IGlzaW5zdGFuY2UoaW5maWxlLCBfaW8uQnVmZmVyZWRSZWFkZXIpJykKKworICAgIGRlZiB0ZXN0X3JlYWRhbGwoc2VsZik6CisgICAgICAgICIiIkJ1ZmZlcmVkUmVhZGVyLnJlYWQoKSBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT1iJ2hlbGxvXG53b3JsZCEnLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPXNlbGYuX1JFQURJTkdfQ09ERV9URU1QTEFURS5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX21ldGhvZF9uYW1lPSdyZWFkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPWInaGVsbG9cbndvcmxkIVxuJykpCisKKworY2xhc3MgVGVzdFRleHRJT1NpZ25hbEludGVycnVwdChUZXN0RmlsZUlPU2lnbmFsSW50ZXJydXB0KToKKyAgICBkZWYgX2dlbmVyYXRlX2luZmlsZV9zZXR1cF9jb2RlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBpbmZpbGUgPSAuLi4gbGluZSBvZiBjb2RlIHRvIG1ha2UgYSBUZXh0SU9XcmFwcGVyLiIiIgorICAgICAgICByZXR1cm4gKCdpbmZpbGUgPSBpby5vcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgInJ0IiwgbmV3bGluZT1Ob25lKSA7JworICAgICAgICAgICAgICAgICdpbXBvcnQgX2lvIDthc3NlcnQgaXNpbnN0YW5jZShpbmZpbGUsIF9pby5UZXh0SU9XcmFwcGVyKScpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgIiIicmVhZGxpbmUoKSBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT1iJ2hlbGxvLCB3b3JsZCEnLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPXNlbGYuX1JFQURJTkdfQ09ERV9URU1QTEFURS5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX21ldGhvZF9uYW1lPSdyZWFkbGluZScsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD0naGVsbG8sIHdvcmxkIVxuJykpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgICIiInJlYWRsaW5lcygpIG11c3QgaGFuZGxlIHNpZ25hbHMgYW5kIG5vdCBsb3NlIGRhdGEuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGluZygKKyAgICAgICAgICAgICAgICBkYXRhX3RvX3dyaXRlPWInaGVsbG9cclxud29ybGQhJywKKyAgICAgICAgICAgICAgICByZWFkX2FuZF92ZXJpZnlfY29kZT1zZWxmLl9SRUFESU5HX0NPREVfVEVNUExBVEUuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9tZXRob2RfbmFtZT0ncmVhZGxpbmVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPVsnaGVsbG9cbicsICd3b3JsZCFcbiddKSkKKworICAgIGRlZiB0ZXN0X3JlYWRhbGwoc2VsZik6CisgICAgICAgICIiInJlYWQoKSBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT1iJ2hlbGxvXG53b3JsZCEnLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPXNlbGYuX1JFQURJTkdfQ09ERV9URU1QTEFURS5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX21ldGhvZF9uYW1lPSdyZWFkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPSJoZWxsb1xud29ybGQhXG4iKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgIHRjIGZvciB0YyBpbiBnbG9iYWxzKCkudmFsdWVzKCkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGMsIHR5cGUpIGFuZCBpc3N1YmNsYXNzKHRjLCB1bml0dGVzdC5UZXN0Q2FzZSldCisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0X2Nhc2VzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MzllZGUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CkBAIC0wLDAgKzEsMTM0IEBACisKK2ltcG9ydCBvcywgZmlsZWNtcCwgc2h1dGlsLCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBGaWxlQ29tcGFyZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi5uYW1lX3NhbWUgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgJy1zYW1lJworICAgICAgICBzZWxmLm5hbWVfZGlmZiA9IHRlc3Rfc3VwcG9ydC5URVNURk4gKyAnLWRpZmYnCisgICAgICAgIGRhdGEgPSAnQ29udGVudHMgb2YgZmlsZSBnbyBoZXJlLlxuJworICAgICAgICBmb3IgbmFtZSBpbiBbc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSwgc2VsZi5uYW1lX2RpZmZdOgorICAgICAgICAgICAgb3V0cHV0ID0gb3BlbihuYW1lLCAndycpCisgICAgICAgICAgICBvdXRwdXQud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIG91dHB1dC5jbG9zZSgpCisKKyAgICAgICAgb3V0cHV0ID0gb3BlbihzZWxmLm5hbWVfZGlmZiwgJ2ErJykKKyAgICAgICAgb3V0cHV0LndyaXRlKCdBbiBleHRyYSBsaW5lLlxuJykKKyAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5kaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MudW5saW5rKHNlbGYubmFtZSkKKyAgICAgICAgb3MudW5saW5rKHNlbGYubmFtZV9zYW1lKQorICAgICAgICBvcy51bmxpbmsoc2VsZi5uYW1lX2RpZmYpCisKKyAgICBkZWYgdGVzdF9tYXRjaGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGl0c2VsZiBmYWlscyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lLCBzaGFsbG93PUZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZmlsZSB0byBpdHNlbGYgZmFpbHMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWUsIHNoYWxsb3c9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGlkZW50aWNhbCBmaWxlIGZhaWxzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZmlsZSB0byBpZGVudGljYWwgZmlsZSBmYWlscyIpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfZGlmZiksCisgICAgICAgICAgICAgICAgICAgICJNaXNtYXRjaGVkIGZpbGVzIGNvbXBhcmUgYXMgZXF1YWwiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5kaXIpLAorICAgICAgICAgICAgICAgICAgICAiRmlsZSBhbmQgZGlyZWN0b3J5IGNvbXBhcmUgYXMgZXF1YWwiKQorCitjbGFzcyBEaXJDb21wYXJlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgIHNlbGYuZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2RpcicpCisgICAgICAgIHNlbGYuZGlyX3NhbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyLXNhbWUnKQorICAgICAgICBzZWxmLmRpcl9kaWZmID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Rpci1kaWZmJykKKyAgICAgICAgc2VsZi5jYXNlaW5zZW5zaXRpdmUgPSBvcy5wYXRoLm5vcm1jYXNlKCdBJykgPT0gb3MucGF0aC5ub3JtY2FzZSgnYScpCisgICAgICAgIGRhdGEgPSAnQ29udGVudHMgb2YgZmlsZSBnbyBoZXJlLlxuJworICAgICAgICBmb3IgZGlyIGluIFtzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgc2VsZi5kaXJfZGlmZl06CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpciwgVHJ1ZSkKKyAgICAgICAgICAgIG9zLm1rZGlyKGRpcikKKyAgICAgICAgICAgIGlmIHNlbGYuY2FzZWluc2Vuc2l0aXZlIGFuZCBkaXIgaXMgc2VsZi5kaXJfc2FtZToKKyAgICAgICAgICAgICAgICBmbiA9ICdGaUxlJyAgICAgIyBWZXJpZnkgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZuID0gJ2ZpbGUnCisgICAgICAgICAgICBvdXRwdXQgPSBvcGVuKG9zLnBhdGguam9pbihkaXIsIGZuKSwgJ3cnKQorICAgICAgICAgICAgb3V0cHV0LndyaXRlKGRhdGEpCisgICAgICAgICAgICBvdXRwdXQuY2xvc2UoKQorCisgICAgICAgIG91dHB1dCA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGlyX2RpZmYsICdmaWxlMicpLCAndycpCisgICAgICAgIG91dHB1dC53cml0ZSgnQW4gZXh0cmEgZmlsZS5cbicpCisgICAgICAgIG91dHB1dC5jbG9zZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXIpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJfc2FtZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcl9kaWZmKQorCisgICAgZGVmIHRlc3RfY21wZmlsZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpciwgWydmaWxlJ10pID09CisgICAgICAgICAgICAgICAgICAgICAgICAoWydmaWxlJ10sIFtdLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGRpcmVjdG9yeSB0byBpdHNlbGYgZmFpbHMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgWydmaWxlJ10pID09CisgICAgICAgICAgICAgICAgICAgICAgICAoWydmaWxlJ10sIFtdLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGRpcmVjdG9yeSB0byBzYW1lIGZhaWxzIikKKworICAgICAgICAjIFRyeSBpdCB3aXRoIHNoYWxsb3c9RmFsc2UKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyLCBbJ2ZpbGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhbGxvdz1GYWxzZSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIChbJ2ZpbGUnXSwgW10sIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZGlyZWN0b3J5IHRvIGl0c2VsZiBmYWlscyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBbJ2ZpbGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhbGxvdz1GYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGRpcmVjdG9yeSB0byBzYW1lIGZhaWxzIikKKworICAgICAgICAjIEFkZCBkaWZmZXJlbnQgZmlsZTIKKyAgICAgICAgb3V0cHV0ID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdmaWxlMicpLCAndycpCisgICAgICAgIG91dHB1dC53cml0ZSgnRGlmZmVyZW50IGNvbnRlbnRzLlxuJykKKyAgICAgICAgb3V0cHV0LmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydmaWxlJywgJ2ZpbGUyJ10pID09CisgICAgICAgICAgICAgICAgICAgIChbJ2ZpbGUnXSwgWydmaWxlMiddLCBbXSksCisgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgbWlzbWF0Y2hlZCBkaXJlY3RvcmllcyBmYWlscyIpCisKKworICAgIGRlZiB0ZXN0X2RpcmNtcChzZWxmKToKKyAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIGZvciBjb21wYXJpc29uIG9mIHR3byBpZGVudGljYWwgZGlyZWN0b3JpZXMKKyAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lKQorICAgICAgICBpZiBzZWxmLmNhc2VpbnNlbnNpdGl2ZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2QubGVmdF9saXN0LCBkLnJpZ2h0X2xpc3RdLFtbJ2ZpbGUnXSwgWydGaUxlJ11dKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbZC5sZWZ0X2xpc3QsIGQucmlnaHRfbGlzdF0sW1snZmlsZSddLCBbJ2ZpbGUnXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmNvbW1vbiA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQubGVmdF9vbmx5ID09IGQucmlnaHRfb25seSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2FtZV9maWxlcyA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuZGlmZl9maWxlcyA9PSBbXSkKKworICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgZm9yIGNvbXBhcmlzb24gb2YgdHdvIGRpZmZlcmVudCBkaXJlY3RvcmllcworICAgICAgICBkID0gZmlsZWNtcC5kaXJjbXAoc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmxlZnRfbGlzdCA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQucmlnaHRfbGlzdCA9PSBbJ2ZpbGUnLCAnZmlsZTInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuY29tbW9uID09IFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5sZWZ0X29ubHkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnJpZ2h0X29ubHkgPT0gWydmaWxlMiddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5zYW1lX2ZpbGVzID09IFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5kaWZmX2ZpbGVzID09IFtdKQorCisgICAgICAgICMgQWRkIGRpZmZlcmVudCBmaWxlMgorICAgICAgICBvdXRwdXQgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpciwgJ2ZpbGUyJyksICd3JykKKyAgICAgICAgb3V0cHV0LndyaXRlKCdEaWZmZXJlbnQgY29udGVudHMuXG4nKQorICAgICAgICBvdXRwdXQuY2xvc2UoKQorICAgICAgICBkID0gZmlsZWNtcC5kaXJjbXAoc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnNhbWVfZmlsZXMgPT0gWydmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmRpZmZfZmlsZXMgPT0gWydmaWxlMiddKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEZpbGVDb21wYXJlVGVzdENhc2UsIERpckNvbXBhcmVUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YWVkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKQEAgLTAsMCArMSwyMjUgQEAKKycnJworVGVzdHMgZm9yIGZpbGVpbnB1dCBtb2R1bGUuCitOaWNrIE1hdGhld3NvbgorJycnCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVEVTVEZOLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHVubGluayBhcyBzYWZlX3VubGluaworaW1wb3J0IHN5cywgcmUKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIGZpbGVpbnB1dCBpbXBvcnQgRmlsZUlucHV0LCBob29rX2VuY29kZWQKKworIyBUaGUgZmlsZWlucHV0IG1vZHVsZSBoYXMgMiBpbnRlcmZhY2VzOiB0aGUgRmlsZUlucHV0IGNsYXNzIHdoaWNoIGRvZXMKKyMgYWxsIHRoZSB3b3JrLCBhbmQgYSBmZXcgZnVuY3Rpb25zIChpbnB1dCwgZXRjLikgdGhhdCB1c2UgYSBnbG9iYWwgX3N0YXRlCisjIHZhcmlhYmxlLiAgV2Ugb25seSB0ZXN0IHRoZSBGaWxlSW5wdXQgY2xhc3MsIHNpbmNlIHRoZSBvdGhlciBmdW5jdGlvbnMKKyMgb25seSBwcm92aWRlIGEgdGhpbiBmYWNhZGUgb3ZlciBGaWxlSW5wdXQuCisKKyMgV3JpdGUgbGluZXMgKGEgbGlzdCBvZiBsaW5lcykgdG8gdGVtcCBmaWxlIG51bWJlciBpLCBhbmQgcmV0dXJuIHRoZQorIyB0ZW1wIGZpbGUncyBuYW1lLgorZGVmIHdyaXRlVG1wKGksIGxpbmVzLCBtb2RlPSd3Jyk6ICAjIG9wZW5pbmcgaW4gdGV4dCBtb2RlIGlzIHRoZSBkZWZhdWx0CisgICAgbmFtZSA9IFRFU1RGTiArIHN0cihpKQorICAgIGYgPSBvcGVuKG5hbWUsIG1vZGUpCisgICAgZi53cml0ZWxpbmVzKGxpbmVzKQorICAgIGYuY2xvc2UoKQorICAgIHJldHVybiBuYW1lCisKK2RlZiByZW1vdmVfdGVtcGZpbGVzKCpuYW1lcyk6CisgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgIHNhZmVfdW5saW5rKG5hbWUpCisKK2NsYXNzIEJ1ZmZlclNpemVzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2J1ZmZlcl9zaXplcyhzZWxmKToKKyAgICAgICAgIyBGaXJzdCwgcnVuIHRoZSB0ZXN0cyB3aXRoIGRlZmF1bHQgYW5kIHRlZW55IGJ1ZmZlciBzaXplLgorICAgICAgICBmb3Igcm91bmQsIGJzIGluICgwLCAwKSwgKDEsIDMwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiTGluZSAlcyBvZiBmaWxlIDFcbiIgJSAoaSsxKSBmb3IgaSBpbiByYW5nZSgxNSldKQorICAgICAgICAgICAgICAgIHQyID0gd3JpdGVUbXAoMiwgWyJMaW5lICVzIG9mIGZpbGUgMlxuIiAlIChpKzEpIGZvciBpIGluIHJhbmdlKDEwKV0pCisgICAgICAgICAgICAgICAgdDMgPSB3cml0ZVRtcCgzLCBbIkxpbmUgJXMgb2YgZmlsZSAzXG4iICUgKGkrMSkgZm9yIGkgaW4gcmFuZ2UoNSldKQorICAgICAgICAgICAgICAgIHQ0ID0gd3JpdGVUbXAoNCwgWyJMaW5lICVzIG9mIGZpbGUgNFxuIiAlIChpKzEpIGZvciBpIGluIHJhbmdlKDEpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlcl9zaXplX3Rlc3QodDEsIHQyLCB0MywgdDQsIGJzLCByb3VuZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSwgdDIsIHQzLCB0NCkKKworICAgIGRlZiBidWZmZXJfc2l6ZV90ZXN0KHNlbGYsIHQxLCB0MiwgdDMsIHQ0LCBicz0wLCByb3VuZD0wKToKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShyJ0xJTkUgKFxkKykgT0YgRklMRSAoXGQrKScpCisKKyAgICAgICAgc3RhcnQgPSAxICsgcm91bmQqNgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJyVzLiBTaW1wbGUgaXRlcmF0aW9uIChicz0lcyknICUgKHN0YXJ0KzAsIGJzKQorICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz0odDEsIHQyLCB0MywgdDQpLCBidWZzaXplPWJzKQorICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgIGZpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCAzMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s0XSwgJ0xpbmUgNSBvZiBmaWxlIDFcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXNbMzBdLCAnTGluZSAxIG9mIGZpbGUgNFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5saW5lbm8oKSwgMzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5hbWUoKSwgdDQpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICclcy4gU3RhdHVzIHZhcmlhYmxlcyAoYnM9JXMpJyAlIChzdGFydCsxLCBicykKKyAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9KHQxLCB0MiwgdDMsIHQ0KSwgYnVmc2l6ZT1icykKKyAgICAgICAgcyA9ICJ4IgorICAgICAgICB3aGlsZSBzIGFuZCBzICE9ICdMaW5lIDYgb2YgZmlsZSAyXG4nOgorICAgICAgICAgICAgcyA9IGZpLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5maWxlbmFtZSgpLCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5saW5lbm8oKSwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZWxpbmVubygpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpLmlzZmlyc3RsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmkuaXNzdGRpbigpKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnJXMuIE5leHRmaWxlIChicz0lcyknICUgKHN0YXJ0KzIsIGJzKQorICAgICAgICBmaS5uZXh0ZmlsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkucmVhZGxpbmUoKSwgJ0xpbmUgMSBvZiBmaWxlIDNcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDIyKQorICAgICAgICBmaS5jbG9zZSgpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICclcy4gU3RkaW4gKGJzPSVzKScgJSAoc3RhcnQrMywgYnMpCisgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPSh0MSwgdDIsIHQzLCB0NCwgJy0nKSwgYnVmc2l6ZT1icykKKyAgICAgICAgc2F2ZXN0ZGluID0gc3lzLnN0ZGluCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IFN0cmluZ0lPKCJMaW5lIDEgb2Ygc3RkaW5cbkxpbmUgMiBvZiBzdGRpblxuIikKKyAgICAgICAgICAgIGxpbmVzID0gbGlzdChmaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgMzMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWzMyXSwgJ0xpbmUgMiBvZiBzdGRpblxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5hbWUoKSwgJzxzdGRpbj4nKQorICAgICAgICAgICAgZmkubmV4dGZpbGUoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZGluID0gc2F2ZXN0ZGluCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICclcy4gQm91bmRhcnkgY29uZGl0aW9ucyAoYnM9JXMpJyAlIChzdGFydCs0LCBicykKKyAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9KHQxLCB0MiwgdDMsIHQ0KSwgYnVmc2l6ZT1icykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5saW5lbm8oKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5maWxlbmFtZSgpLCBOb25lKQorICAgICAgICBmaS5uZXh0ZmlsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5hbWUoKSwgTm9uZSkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJyVzLiBJbnBsYWNlIChicz0lcyknICUgKHN0YXJ0KzUsIGJzKQorICAgICAgICBzYXZlc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz0odDEsIHQyLCB0MywgdDQpLCBpbnBsYWNlPTEsIGJ1ZnNpemU9YnMpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmaToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdLnVwcGVyKCkKKyAgICAgICAgICAgICAgICBwcmludCBsaW5lCisgICAgICAgICAgICBmaS5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZXN0ZG91dAorCisgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPSh0MSwgdDIsIHQzLCB0NCksIGJ1ZnNpemU9YnMpCisgICAgICAgIGZvciBsaW5lIGluIGZpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWy0xXSwgJ1xuJykKKyAgICAgICAgICAgIG0gPSBwYXQubWF0Y2gobGluZVs6LTFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChtLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQobS5ncm91cCgxKSksIGZpLmZpbGVsaW5lbm8oKSkKKyAgICAgICAgZmkuY2xvc2UoKQorCitjbGFzcyBGaWxlSW5wdXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfemVyb19ieXRlX2ZpbGVzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiIl0pCisgICAgICAgICAgICB0MiA9IHdyaXRlVG1wKDIsIFsiIl0pCisgICAgICAgICAgICB0MyA9IHdyaXRlVG1wKDMsIFsiVGhlIG9ubHkgbGluZSB0aGVyZSBpcy5cbiJdKQorICAgICAgICAgICAgdDQgPSB3cml0ZVRtcCg0LCBbIiJdKQorICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9KHQxLCB0MiwgdDMsIHQ0KSkKKworICAgICAgICAgICAgbGluZSA9IGZpLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgJ1RoZSBvbmx5IGxpbmUgdGhlcmUgaXMuXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5saW5lbm8oKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZWxpbmVubygpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5maWxlbmFtZSgpLCB0MykKKworICAgICAgICAgICAgbGluZSA9IGZpLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVsaW5lbm8oKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5hbWUoKSwgdDQpCisgICAgICAgICAgICBmaS5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxLCB0MiwgdDMsIHQ0KQorCisgICAgZGVmIHRlc3RfZmlsZXNfdGhhdF9kb250X2VuZF93aXRoX25ld2xpbmUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgWyJBXG5CXG5DIl0pCisgICAgICAgICAgICB0MiA9IHdyaXRlVG1wKDIsIFsiRFxuRVxuRiJdKQorICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9KHQxLCB0MikpCisgICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIkFcbiIsICJCXG4iLCAiQyIsICJEXG4iLCAiRVxuIiwgIkYiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZWxpbmVubygpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5saW5lbm8oKSwgNikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlbW92ZV90ZW1wZmlsZXModDEsIHQyKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9maWxlbmFtZXMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgWyJBXG5CIl0pCisgICAgICAgICAgICBlbmNvZGluZyA9IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQorICAgICAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9ICdhc2NpaScKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPXVuaWNvZGUodDEsIGVuY29kaW5nKSkKKyAgICAgICAgICAgIGxpbmVzID0gbGlzdChmaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsiQVxuIiwgIkIiXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlbW92ZV90ZW1wZmlsZXModDEpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgWyJBXG5CIl0pCisgICAgICAgICAgICB0MiA9IHdyaXRlVG1wKDIsIFsiQ1xuRCJdKQorICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9KHQxLCB0MikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVubygpLCAtMSkKKyAgICAgICAgICAgIGxpbmUgPSBmaS5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZmkuZmlsZW5vKCksIC0xKQorICAgICAgICAgICAgZmkubmV4dGZpbGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5maWxlbm8oKSwgLTEpCisgICAgICAgICAgICBsaW5lID0gbGlzdChmaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5vKCksIC0xKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSwgdDIpCisKKyAgICBkZWYgdGVzdF9vcGVuaW5nX21vZGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgaW52YWxpZCBtb2RlLCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQobW9kZT0idyIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGVJbnB1dCBzaG91bGQgcmVqZWN0IGludmFsaWQgbW9kZSBhcmd1bWVudCIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHRyeSBvcGVuaW5nIGluIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUKKyAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgWyJBXG5CXHJcbkNcckQiXSwgbW9kZT0id2IiKQorICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9dDEsIG1vZGU9IlUiKQorICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJBXG4iLCAiQlxuIiwgIkNcbiIsICJEIl0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQorCisgICAgZGVmIHRlc3RfZmlsZV9vcGVuaW5nX2hvb2soc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgY2Fubm90IHVzZSBvcGVuaG9vayBhbmQgaW5wbGFjZSBtb2RlCisgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChpbnBsYWNlPTEsIG9wZW5ob29rPWxhbWJkYSBmLG06IE5vbmUpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGVJbnB1dCBzaG91bGQgcmFpc2UgaWYgYm90aCBpbnBsYWNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCBvcGVuaG9vayBhcmd1bWVudHMgYXJlIGdpdmVuIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KG9wZW5ob29rPTEpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGVJbnB1dCBzaG91bGQgY2hlY2sgb3Blbmhvb2sgZm9yIGJlaW5nIGNhbGxhYmxlIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgWyJBXG5CIl0sIG1vZGU9IndiIikKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPXQxLCBvcGVuaG9vaz1ob29rX2VuY29kZWQoInJvdDEzIikpCisgICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIk5cbiIsICJPIl0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEJ1ZmZlclNpemVzVGVzdHMsIEZpbGVJbnB1dFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0Y2VjMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQpAQCAtMCwwICsxLDQ3OSBAQAorIyBBZGFwdGVkIGZyb20gdGVzdF9maWxlLnB5IGJ5IERhbmllbCBTdHV0emJhY2gKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5Citmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0CitpbXBvcnQgX3Rlc3RjYXBpCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdCwgbWFrZV9iYWRfZmQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHB5M2tfYnl0ZXMgYXMgYnl0ZXMKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBydW5fcHl0aG9uCisKK2Zyb20gX2lvIGltcG9ydCBGaWxlSU8gYXMgX0ZpbGVJTworCitjbGFzcyBBdXRvRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIGZpbGUgdGVzdHMgZm9yIHdoaWNoIGEgdGVzdCBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHVwCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAndycpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZjoKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisKKyAgICBkZWYgdGVzdFdlYWtSZWZzKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3ZWFrIHJlZmVyZW5jZXMKKyAgICAgICAgcCA9IHByb3h5KHNlbGYuZikKKyAgICAgICAgcC53cml0ZShieXRlcyhyYW5nZSgxMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIHAudGVsbCgpKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBnZXRhdHRyLCBwLCAndGVsbCcpCisKKyAgICBkZWYgdGVzdFNlZWtUZWxsKHNlbGYpOgorICAgICAgICBzZWxmLmYud3JpdGUoYnl0ZXMocmFuZ2UoMjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCAyMCkKKyAgICAgICAgc2VsZi5mLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCAwKQorICAgICAgICBzZWxmLmYuc2VlaygxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCAxMCkKKyAgICAgICAgc2VsZi5mLnNlZWsoNSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCAxNSkKKyAgICAgICAgc2VsZi5mLnNlZWsoLTUsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMTApCisgICAgICAgIHNlbGYuZi5zZWVrKC01LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIDE1KQorCisgICAgZGVmIHRlc3RBdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSBleHBlY3RlZCBhdHRyaWJ1dGVzIGV4aXN0CisgICAgICAgIGYgPSBzZWxmLmYKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgIndiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNsb3NlZCwgRmFsc2UpCisKKyAgICAgICAgIyB2ZXJpZnkgdGhlIGF0dHJpYnV0ZXMgYXJlIHJlYWRvbmx5CisgICAgICAgIGZvciBhdHRyIGluICdtb2RlJywgJ2Nsb3NlZCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyLCBmLCBhdHRyLCAnb29wcycpCisKKyAgICBkZWYgdGVzdFJlYWRpbnRvKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSByZWFkaW50bworICAgICAgICBzZWxmLmYud3JpdGUoYiJceDAxXHgwMiIpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIGEgPSBhcnJheShiJ2InLCBiJ3gnKjEwKQorICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3InKQorICAgICAgICBuID0gc2VsZi5mLnJlYWRpbnRvKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJyYXkoYidiJywgWzEsIDJdKSwgYVs6bl0pCisKKyAgICBkZWYgdGVzdFdyaXRlbGluZXNMaXN0KHNlbGYpOgorICAgICAgICBsID0gW2InMTIzJywgYic0NTYnXQorICAgICAgICBzZWxmLmYud3JpdGVsaW5lcyhsKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgYnVmID0gc2VsZi5mLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYicxMjM0NTYnKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzVXNlckxpc3Qoc2VsZik6CisgICAgICAgIGwgPSBVc2VyTGlzdChbYicxMjMnLCBiJzQ1NiddKQorICAgICAgICBzZWxmLmYud3JpdGVsaW5lcyhsKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgYnVmID0gc2VsZi5mLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYicxMjM0NTYnKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzRXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgTm9uZSkKKworICAgIGRlZiB0ZXN0X25vbmVfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5mLndyaXRlKGIiaGlcbmJ5ZVxuYWJjIikKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYucmVhZChOb25lKSwgYiJoaVxuYnllXG5hYmMiKQorICAgICAgICBzZWxmLmYuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5yZWFkbGluZShOb25lKSwgYiJoaVxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYucmVhZGxpbmVzKE5vbmUpLCBbYiJieWVcbiIsIGIiYWJjIl0pCisKKyAgICBkZWYgdGVzdFJlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLmYpLCAiPF9pby5GaWxlSU8gbmFtZT0lciBtb2RlPSclcyc+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5mLm5hbWUsIHNlbGYuZi5tb2RlKSkKKyAgICAgICAgZGVsIHNlbGYuZi5uYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLmYpLCAiPF9pby5GaWxlSU8gZmQ9JXIgbW9kZT0nJXMnPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuZi5maWxlbm8oKSwgc2VsZi5mLm1vZGUpKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi5mKSwgIjxfaW8uRmlsZUlPIFtjbG9zZWRdPiIpCisKKyAgICBkZWYgdGVzdEVycm9ycyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZgorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWQsIDEwKSAjIE9wZW4gZm9yIHJlYWRpbmcKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKyAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkaW50bywgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisKKyAgICBkZWYgdGVzdE1ldGhvZHMoc2VsZik6CisgICAgICAgIG1ldGhvZHMgPSBbJ2ZpbGVubycsICdpc2F0dHknLCAncmVhZCcsICdyZWFkaW50bycsCisgICAgICAgICAgICAgICAgICAgJ3NlZWsnLCAndGVsbCcsICd0cnVuY2F0ZScsICd3cml0ZScsICdzZWVrYWJsZScsCisgICAgICAgICAgICAgICAgICAgJ3JlYWRhYmxlJywgJ3dyaXRhYmxlJ10KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2F0aGVvcycpOgorICAgICAgICAgICAgbWV0aG9kcy5yZW1vdmUoJ3RydW5jYXRlJykKKworICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mLmNsb3NlZCkKKworICAgICAgICBmb3IgbWV0aG9kbmFtZSBpbiBtZXRob2RzOgorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLmYsIG1ldGhvZG5hbWUpCisgICAgICAgICAgICAjIHNob3VsZCByYWlzZSBvbiBjbG9zZWQgZmlsZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aG9kKQorCisgICAgZGVmIHRlc3RPcGVuZGlyKHNlbGYpOgorICAgICAgICAjIElzc3VlIDM3MDM6IG9wZW5pbmcgYSBkaXJlY3Rvcnkgc2hvdWxkIGZpbGwgdGhlIGVycm5vCisgICAgICAgICMgV2luZG93cyBhbHdheXMgcmV0dXJucyAiW0Vycm5vIDEzXTogUGVybWlzc2lvbiBkZW5pZWQKKyAgICAgICAgIyBVbml4IGNhbGxzIGRpcmNoZWNrKCkgYW5kIHJldHVybnMgIltFcnJubyAyMV06IElzIGEgZGlyZWN0b3J5IgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfRmlsZUlPKCcuJywgJ3InKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLmVycm5vLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbGVuYW1lLCAiLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBJT0Vycm9yIikKKworICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAidGVzdCBvbmx5IHdvcmtzIG9uIGEgUE9TSVgtbGlrZSBzeXN0ZW0iKQorICAgIGRlZiB0ZXN0T3BlbkRpckZEKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oJy4nLCBvcy5PX1JET05MWSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIF9GaWxlSU8oZmQsICdyJykKKyAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSVNESVIpCisKKyAgICAjQSBzZXQgb2YgZnVuY3Rpb25zIHRlc3RpbmcgdGhhdCB3ZSBnZXQgZXhwZWN0ZWQgYmVoYXZpb3VyIGlmIHNvbWVvbmUgaGFzCisgICAgI21hbnVhbGx5IGNsb3NlZCB0aGUgaW50ZXJuYWwgZmlsZSBkZXNjcmlwdG9yLiAgRmlyc3QsIGEgZGVjb3JhdG9yOgorICAgIGRlZiBDbG9zZWRGRChmdW5jKToKKyAgICAgICAgQHdyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYpOgorICAgICAgICAgICAgI2ZvcmNpYmx5IGNsb3NlIHRoZSBmZCBiZWZvcmUgaW52b2tpbmcgdGhlIHByb2JsZW0gZnVuY3Rpb24KKyAgICAgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgICAgIG9zLmNsb3NlKGYuZmlsZW5vKCkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCBmKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIKKworICAgIGRlZiBDbG9zZWRGRFJhaXNlcyhmdW5jKToKKyAgICAgICAgQHdyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYpOgorICAgICAgICAgICAgI2ZvcmNpYmx5IGNsb3NlIHRoZSBmZCBiZWZvcmUgaW52b2tpbmcgdGhlIHByb2JsZW0gZnVuY3Rpb24KKyAgICAgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgICAgIG9zLmNsb3NlKGYuZmlsZW5vKCkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCBmKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVCQURGKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBJT0Vycm9yIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiB3cmFwcGVyCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZShzZWxmLCBmKToKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRXcml0ZShzZWxmLCBmKToKKyAgICAgICAgZi53cml0ZSgnYScpCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRTZWVrKHNlbGYsIGYpOgorICAgICAgICBmLnNlZWsoMCkKKworICAgIEBDbG9zZWRGRFJhaXNlcworICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFRlbGwoc2VsZiwgZik6CisgICAgICAgIGYudGVsbCgpCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRUcnVuY2F0ZShzZWxmLCBmKToKKyAgICAgICAgZi50cnVuY2F0ZSgwKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkU2Vla2FibGUoc2VsZiwgZik6CisgICAgICAgIGYuc2Vla2FibGUoKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkUmVhZGFibGUoc2VsZiwgZik6CisgICAgICAgIGYucmVhZGFibGUoKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkV3JpdGFibGUoc2VsZiwgZik6CisgICAgICAgIGYud3JpdGFibGUoKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkRmlsZW5vKHNlbGYsIGYpOgorICAgICAgICBmLmZpbGVubygpCisKKyAgICBAQ2xvc2VkRkQKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRJc2F0dHkoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pc2F0dHkoKSwgRmFsc2UpCisKKyAgICBkZWYgUmVvcGVuRm9yUmVhZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCisgICAgICAgIG9zLmNsb3NlKHNlbGYuZi5maWxlbm8oKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuZgorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkUmVhZChzZWxmLCBmKToKKyAgICAgICAgZiA9IHNlbGYuUmVvcGVuRm9yUmVhZCgpCisgICAgICAgIGYucmVhZCgxKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkUmVhZGFsbChzZWxmLCBmKToKKyAgICAgICAgZiA9IHNlbGYuUmVvcGVuRm9yUmVhZCgpCisgICAgICAgIGYucmVhZGFsbCgpCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRSZWFkaW50byhzZWxmLCBmKToKKyAgICAgICAgZiA9IHNlbGYuUmVvcGVuRm9yUmVhZCgpCisgICAgICAgIGEgPSBhcnJheShiJ2InLCBiJ3gnKjEwKQorICAgICAgICBmLnJlYWRpbnRvKGEpCisKK2NsYXNzIE90aGVyRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0QWJsZXMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgInciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRhYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sICJyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAiYSsiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRhYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmlzYXR0eSgpLCBGYWxzZSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGYgPSBfRmlsZUlPKCIvZGV2L3R0eSIsICJhIikKKyAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBXaGVuIHJ1biBpbiBhIGNyb24gam9iIHRoZXJlIGp1c3QgYXJlbid0IGFueQorICAgICAgICAgICAgICAgICAgICAjIHR0eXMsIHNvIHNraXAgdGhlIHRlc3QuICBUaGlzIGFsc28gaGFuZGxlcyBvdGhlcgorICAgICAgICAgICAgICAgICAgICAjIE9TJ2VzIHRoYXQgZG9uJ3Qgc3VwcG9ydCAvZGV2L3R0eS4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIiBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAnYnNkJyBub3QgaW4gc3lzLnBsYXRmb3JtIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnc3Vub3MnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU29tZWhvdyAvZGV2L3R0eSBhcHBlYXJzIHNlZWthYmxlIG9uIHNvbWUgQlNEcworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaXNhdHR5KCksIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0TW9kZVN0cmluZ3Moc2VsZik6CisgICAgICAgICMgY2hlY2sgaW52YWxpZCBtb2RlIHN0cmluZ3MKKyAgICAgICAgZm9yIG1vZGUgaW4gKCIiLCAiYVUiLCAid1UrIiwgInJ3IiwgInJ0Iik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJyVyIGlzIGFuIGludmFsaWQgZmlsZSBtb2RlJyAlIG1vZGUpCisKKyAgICBkZWYgdGVzdFVuaWNvZGVPcGVuKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSByZXByIHdvcmtzIGZvciB1bmljb2RlIHRvbworICAgICAgICBmID0gX0ZpbGVJTyhzdHIoVEVTVEZOKSwgInciKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0Qnl0ZXNPcGVuKHNlbGYpOgorICAgICAgICAjIE9wZW5pbmcgYSBieXRlcyBmaWxlbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbiA9IFRFU1RGTi5lbmNvZGUoImFzY2lpIikKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICMgU2tpcCB0ZXN0CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZiA9IF9GaWxlSU8oZm4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZShiImFiYyIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJhYmMiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0SW52YWxpZEZkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfRmlsZUlPLCAtMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIF9GaWxlSU8sIG1ha2VfYmFkX2ZkKCkpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgaW1wb3J0IG1zdmNydAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbXN2Y3J0LmdldF9vc2ZoYW5kbGUsIG1ha2VfYmFkX2ZkKCkpCisgICAgICAgICMgSXNzdWUgMTU5ODkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfRmlsZUlPLCBfdGVzdGNhcGkuSU5UX01BWCArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX0ZpbGVJTywgX3Rlc3RjYXBpLklOVF9NSU4gLSAxKQorCisgICAgZGVmIHRlc3RCYWRNb2RlQXJndW1lbnQoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHRoYXQgd2UgZ2V0IGEgc2Vuc2libGUgZXJyb3IgbWVzc2FnZSBmb3IgYmFkIG1vZGUgYXJndW1lbnQKKyAgICAgICAgYmFkX21vZGUgPSAicXdlcnR5IgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sIGJhZF9tb2RlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSAhPSAwOgorICAgICAgICAgICAgICAgIHMgPSBzdHIobXNnKQorICAgICAgICAgICAgICAgIGlmIFRFU1RGTiBpbiBzIG9yIGJhZF9tb2RlIG5vdCBpbiBzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImJhZCBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkIG1vZGU6ICVzIiAlIHMpCisgICAgICAgICAgICAjIGlmIG1zZy5hcmdzWzBdID09IDAsIHdlJ3JlIHByb2JhYmx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhlcmUgbWF5IGJlCisgICAgICAgICAgICAjIG5vIG9idmlvdXMgd2F5IHRvIGRpc2NvdmVyIHdoeSBvcGVuKCkgZmFpbGVkLgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGVycm9yIGZvciBpbnZhbGlkIG1vZGU6ICVzIiAlIGJhZF9tb2RlKQorCisgICAgZGVmIHRlc3RUcnVuY2F0ZShzZWxmKToKKyAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAndycpCisgICAgICAgIGYud3JpdGUoYnl0ZXMoYnl0ZWFycmF5KHJhbmdlKDEwKSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxMCkKKyAgICAgICAgZi50cnVuY2F0ZSg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCwgb3MuU0VFS19FTkQpLCA1KQorICAgICAgICBmLnRydW5jYXRlKDE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwLCBvcy5TRUVLX0VORCksIDE1KQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VHJ1bmNhdGVPbldpbmRvd3Moc2VsZik6CisgICAgICAgIGRlZiBidWc4MDE2MzEoKToKKyAgICAgICAgICAgICMgU0YgYnVnIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvODAxNjMxPgorICAgICAgICAgICAgIyAiZmlsZS50cnVuY2F0ZSBmYXVsdCBvbiB3aW5kb3dzIgorICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAndycpCisgICAgICAgICAgICBmLndyaXRlKGJ5dGVzKHJhbmdlKDExKSkpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCdyKycpCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKDUpCisgICAgICAgICAgICBpZiBkYXRhICE9IGJ5dGVzKHJhbmdlKDUpKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJlYWQgb24gZmlsZSBvcGVuZWQgZm9yIHVwZGF0ZSBmYWlsZWQgJXIiICUgZGF0YSkKKyAgICAgICAgICAgIGlmIGYudGVsbCgpICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHBvcyBhZnRlciByZWFkIHdyb25nICVkIiAlIGYudGVsbCgpKQorCisgICAgICAgICAgICBmLnRydW5jYXRlKCkKKyAgICAgICAgICAgIGlmIGYudGVsbCgpICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHBvcyBhZnRlciBmdHJ1bmNhdGUgd3JvbmcgJWQiICUgZi50ZWxsKCkpCisKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2l6ZSA9IG9zLnBhdGguZ2V0c2l6ZShURVNURk4pCisgICAgICAgICAgICBpZiBzaXplICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHNpemUgYWZ0ZXIgZnRydW5jYXRlIHdyb25nICVkIiAlIHNpemUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnVnODAxNjMxKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdEFwcGVuZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAnd2InKQorICAgICAgICAgICAgZi53cml0ZShiJ3NwYW0nKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICdhYicpCisgICAgICAgICAgICBmLndyaXRlKGInZWdncycpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgICAgIGQgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGInc3BhbWVnZ3MnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RJbnZhbGlkSW5pdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfRmlsZUlPLCAiMSIsIDAsIDApCisKKyAgICBkZWYgdGVzdFdhcm5pbmdzKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcud2FybmluZ3MsIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfRmlsZUlPLCBbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfRmlsZUlPLCAiL3NvbWUvaW52YWxpZC9uYW1lIiwgInJ0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCisKKyAgICBkZWYgdGVzdF9zdXJyb2dhdGVzKHNlbGYpOgorICAgICAgICAjIElzc3VlICM4NDM4OiB0cnkgdG8gb3BlbiBhIGZpbGVuYW1lIGNvbnRhaW5pbmcgc3Vycm9nYXRlcy4KKyAgICAgICAgIyBJdCBzaG91bGQgZWl0aGVyIGZhaWwgYmVjYXVzZSB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIHRoZSBmaWxlbmFtZQorICAgICAgICAjIGNhbid0IGJlIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nLCBidXQgbm90IGJlY2F1c2UKKyAgICAgICAgIyBvZiBhIExvb2t1cEVycm9yIGZvciB0aGUgZXJyb3IgaGFuZGxlciAic3Vycm9nYXRlZXNjYXBlIi4KKyAgICAgICAgZmlsZW5hbWUgPSB1J1x1ZGM4MC50eHQnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggX0ZpbGVJTyhmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgKFVuaWNvZGVFbmNvZGVFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgU3Bhd24gYSBzZXBhcmF0ZSBQeXRob24gcHJvY2VzcyB3aXRoIGEgZGlmZmVyZW50ICJmaWxlIHN5c3RlbQorICAgICAgICAjIGRlZmF1bHQgZW5jb2RpbmciLCB0byBleGVyY2lzZSB0aGlzIGZ1cnRoZXIuCisgICAgICAgIGVudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgICAgICAgZW52W2InTENfQ1RZUEUnXSA9IGInQycKKyAgICAgICAgXywgb3V0ID0gcnVuX3B5dGhvbignLWMnLCAnaW1wb3J0IF9pbzsgX2lvLkZpbGVJTyglciknICUgZmlsZW5hbWUsIGVudj1lbnYpCisgICAgICAgIGlmICgnVW5pY29kZUVuY29kZUVycm9yJyBub3QgaW4gb3V0IGFuZCBub3QKKyAgICAgICAgICAgICAgICAoICgnSU9FcnJvcjogW0Vycm5vIDJdIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknIGluIG91dCkgb3IKKyAgICAgICAgICAgICAgICAgICgnSU9FcnJvcjogW0Vycm5vIDIyXSBJbnZhbGlkIGFyZ3VtZW50JyBpbiBvdXQpICkgKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnQmFkIG91dHB1dDogJXInICUgb3V0KQorCisgICAgZGVmIHRlc3RVbmNsb3NlZEZET25FeGNlcHRpb24oc2VsZik6CisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKEV4Y2VwdGlvbik6IHBhc3MKKyAgICAgICAgY2xhc3MgTXlGaWxlSU8oX0ZpbGVJTyk6CisgICAgICAgICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gIm5hbWUiOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBNeUV4Y2VwdGlvbigiYmxvY2tlZCBzZXR0aW5nIG5hbWUiKQorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihNeUZpbGVJTywgc2VsZikuX19zZXRhdHRyX18obmFtZSwgdmFsdWUpCisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE15RXhjZXB0aW9uLCBNeUZpbGVJTywgZmQpCisgICAgICAgIG9zLmNsb3NlKGZkKSAgIyBzaG91bGQgbm90IHJhaXNlIE9TRXJyb3IoRUJBREYpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIEhpc3RvcmljYWxseSwgdGhlc2UgdGVzdHMgaGF2ZSBiZWVuIHNsb3BweSBhYm91dCByZW1vdmluZyBURVNURk4uCisgICAgIyBTbyBnZXQgcmlkIG9mIGl0IG5vIG1hdHRlciB3aGF0LgorICAgIHRyeToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KEF1dG9GaWxlVGVzdHMsIE90aGVyRmlsZVRlc3RzKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6CisgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mbG9hdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDYzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQpAQCAtMCwwICsxLDE0MDIgQEAKKworaW1wb3J0IHVuaXR0ZXN0LCBzdHJ1Y3QKK2ltcG9ydCBvcworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBtYXRoCitmcm9tIG1hdGggaW1wb3J0IGlzaW5mLCBpc25hbiwgY29weXNpZ24sIGxkZXhwCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBmcmFjdGlvbnMKK2ltcG9ydCBzeXMKKworSU5GID0gZmxvYXQoImluZiIpCitOQU4gPSBmbG9hdCgibmFuIikKKworaGF2ZV9nZXRmb3JtYXQgPSBoYXNhdHRyKGZsb2F0LCAiX19nZXRmb3JtYXRfXyIpCityZXF1aXJlc19nZXRmb3JtYXQgPSB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfZ2V0Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgX19nZXRmb3JtYXRfXyIpCityZXF1aXJlc19zZXRmb3JtYXQgPSB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoZmxvYXQsICJfX3NldGZvcm1hdF9fIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyBfX3NldGZvcm1hdF9fIikKKyMgZGVjb3JhdG9yIGZvciBza2lwcGluZyB0ZXN0cyBvbiBub24tSUVFRSA3NTQgcGxhdGZvcm1zCityZXF1aXJlc19JRUVFXzc1NCA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoaGF2ZV9nZXRmb3JtYXQgYW5kCisgICAgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorCisjbG9jYXRlIGZpbGUgd2l0aCBmbG9hdCBmb3JtYXQgdGVzdCB2YWx1ZXMKK3Rlc3RfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIKK2Zvcm1hdF90ZXN0ZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ2Zvcm1hdGZsb2F0X3Rlc3RjYXNlcy50eHQnKQorCitjbGFzcyBHZW5lcmFsRmxvYXRDYXNlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgzLjE0KSwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgzMTQpLCAzMTQuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgzMTRMKSwgMzE0LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIiAgMy4xNCAgIiksIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiICAweDMuMSAgIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIgIC0weDMucC0xICAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIiAgKzB4My5wLTEgICIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiKyszLjE0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIrLTMuMTQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi0rMy4xNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLS0zLjE0IikKKyAgICAgICAgIyBjaGVjayB0aGF0IHdlIGRvbid0IGFjY2VwdCBhbHRlcm5hdGUgZXhwb25lbnQgbWFya2VycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi0xLjdkMjkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIjNELTE0IikKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQodW5pY29kZSgiICAzLjE0ICAiKSksIDMuMTQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHVuaWNvZGUoIiAgXHUwNjYzLlx1MDY2MVx1MDY2NCAgIiwncmF3LXVuaWNvZGUtZXNjYXBlJykpLCAzLjE0KQorCisgICAgICAgICMgZXh0cmEgbG9uZyBzdHJpbmdzIHNob3VsZCBubyBsb25nZXIgYmUgYSBwcm9ibGVtCisgICAgICAgICMgKGluIDIuNiwgbG9uZyB1bmljb2RlIGlucHV0cyB0byBmbG9hdCByYWlzZWQgVmFsdWVFcnJvcikKKyAgICAgICAgZmxvYXQoJy4nICsgJzEnKjEwMDApCisgICAgICAgIGZsb2F0KHVuaWNvZGUoJy4nICsgJzEnKjEwMDApKQorCisgICAgZGVmIGNoZWNrX2NvbnZlcnNpb25fdG9faW50KHNlbGYsIHgpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGludCh4KSBoYXMgdGhlIGNvcnJlY3QgdmFsdWUgYW5kIHR5cGUsIGZvciBhIGZsb2F0IHguIiIiCisgICAgICAgIG4gPSBpbnQoeCkKKyAgICAgICAgaWYgeCA+PSAwLjA6CisgICAgICAgICAgICAjIHggPj0gMCBhbmQgbiA9IGludCh4KSAgPT0+ICBuIDw9IHggPCBuICsgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobiwgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh4LCBuICsgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgeCA8IDAgYW5kIG4gPSBpbnQoeCkgID09PiAgbiA+PSB4ID4gbiAtIDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG4sIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoeCwgbiAtIDEpCisKKyAgICAgICAgIyBSZXN1bHQgc2hvdWxkIGJlIGFuIGludCBpZiB3aXRoaW4gcmFuZ2UsIGVsc2UgYSBsb25nLgorICAgICAgICBpZiAtc3lzLm1heGludC0xIDw9IG4gPD0gc3lzLm1heGludDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShuKSwgaW50KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG4pLCBsb25nKQorCisgICAgICAgICMgRG91YmxlIGNoZWNrLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaW50KG4pKSwgdHlwZShuKSkKKworICAgIGRlZiB0ZXN0X2NvbnZlcnNpb25fdG9faW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgZmxvYXRzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgYW4gaW50IGNvbnZlcnQgdG8gdHlwZQorICAgICAgICAjIGludCwgbm90IGxvbmcuICAoaXNzdWUgIzExMTQ0LikKKyAgICAgICAgYm91bmRhcnkgPSBmbG9hdChzeXMubWF4aW50ICsgMSkKKyAgICAgICAgZXBzaWxvbiA9IDIqKi1zeXMuZmxvYXRfaW5mby5tYW50X2RpZyAqIGJvdW5kYXJ5CisKKyAgICAgICAgIyBUaGVzZSAyIGZsb2F0cyBhcmUgZWl0aGVyIHNpZGUgb2YgdGhlIHBvc2l0aXZlIGludC9sb25nIGJvdW5kYXJ5IG9uCisgICAgICAgICMgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBzeXN0ZW1zLgorICAgICAgICBzZWxmLmNoZWNrX2NvbnZlcnNpb25fdG9faW50KGJvdW5kYXJ5IC0gZXBzaWxvbikKKyAgICAgICAgc2VsZi5jaGVja19jb252ZXJzaW9uX3RvX2ludChib3VuZGFyeSkKKworICAgICAgICAjIFRoZXNlIGZsb2F0cyBhcmUgZWl0aGVyIHNpZGUgb2YgdGhlIG5lZ2F0aXZlIGxvbmcvaW50IGJvdW5kYXJ5IG9uCisgICAgICAgICMgNjQtYml0IHN5c3RlbXMuLi4KKyAgICAgICAgc2VsZi5jaGVja19jb252ZXJzaW9uX3RvX2ludCgtYm91bmRhcnkgLSAyKmVwc2lsb24pCisgICAgICAgIHNlbGYuY2hlY2tfY29udmVyc2lvbl90b19pbnQoLWJvdW5kYXJ5KQorCisgICAgICAgICMgLi4uIGFuZCB0aGVzZSBvbmVzIGFyZSBlaXRoZXIgc2lkZSBvZiB0aGUgbmVnYXRpdmUgbG9uZy9pbnQKKyAgICAgICAgIyBib3VuZGFyeSBvbiAzMi1iaXQgc3lzdGVtcy4KKyAgICAgICAgc2VsZi5jaGVja19jb252ZXJzaW9uX3RvX2ludCgtYm91bmRhcnkgLSAxLjApCisgICAgICAgIHNlbGYuY2hlY2tfY29udmVyc2lvbl90b19pbnQoLWJvdW5kYXJ5IC0gMS4wICsgMiplcHNpbG9uKQorCisgICAgQHRlc3Rfc3VwcG9ydC5ydW5fd2l0aF9sb2NhbGUoJ0xDX05VTUVSSUMnLCAnZnJfRlInLCAnZGVfREUnKQorICAgIGRlZiB0ZXN0X2Zsb2F0X3dpdGhfY29tbWEoc2VsZik6CisgICAgICAgICMgc2V0IGxvY2FsZSB0byBzb21ldGhpbmcgdGhhdCBkb2Vzbid0IHVzZSAnLicgZm9yIHRoZSBkZWNpbWFsIHBvaW50CisgICAgICAgICMgZmxvYXQgbXVzdCBub3QgYWNjZXB0IHRoZSBsb2NhbGUgc3BlY2lmaWMgZGVjaW1hbCBwb2ludCBidXQKKyAgICAgICAgIyBpdCBzdGlsbCBoYXMgdG8gYWNjZXB0IHRoZSBub3JtYWwgcHl0aG9uIHN5bnRheAorICAgICAgICBpbXBvcnQgbG9jYWxlCisgICAgICAgIGlmIG5vdCBsb2NhbGUubG9jYWxlY29udigpWydkZWNpbWFsX3BvaW50J10gPT0gJywnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgiICAzLjE0ICAiKSwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgiKzMuMTQgICIpLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KCItMy4xNCAgIiksIC0zLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KCIuMTQgICIpLCAuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIjMuICAiKSwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KCIzLmUzICAiKSwgMzAwMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KCIzLjJlMyAgIiksIDMyMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgiMi41ZS0xICAiKSwgMC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgiNWUtMSIpLCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiICAzLDE0ICAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIiAgKzMsMTQgICIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiICAtMywxNCAgIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIgIDB4My4xICAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIiAgLTB4My5wLTEgICIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiICArMHgzLnAtMSAgIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgiICAyNS5lLTEgICIpLCAyLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9zdXBwb3J0LmZjbXAoZmxvYXQoIiAgLjI1ZS0xICAiKSwgLjAyNSksIDApCisKKyAgICBkZWYgdGVzdF9mbG9hdGNvbnZlcnNpb24oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgY2FsbHMgdG8gX19mbG9hdF9fKCkgd29yayBwcm9wZXJseQorICAgICAgICBjbGFzcyBGb28wOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIuCisKKyAgICAgICAgY2xhc3MgRm9vMShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIuCisKKyAgICAgICAgY2xhc3MgRm9vMihmbG9hdCk6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0Mi4KKworICAgICAgICBjbGFzcyBGb28zKGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgdmFsdWU9MC4pOgorICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdC5fX25ld19fKGNscywgMip2YWx1ZSkKKworICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGNsYXNzIEZvbzQoZmxvYXQpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICAjIElzc3VlIDU3NTk6IF9fZmxvYXRfXyBub3QgY2FsbGVkIG9uIHN0ciBzdWJjbGFzc2VzICh0aG91Z2ggaXQgaXMgb24KKyAgICAgICAgIyB1bmljb2RlIHN1YmNsYXNzZXMpLgorICAgICAgICBjbGFzcyBGb29TdHIoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHN0cihzZWxmKSkgKyAxCisKKyAgICAgICAgY2xhc3MgRm9vVW5pY29kZSh1bmljb2RlKToKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHVuaWNvZGUoc2VsZikpICsgMQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoRm9vMCgpKSwgNDIuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvbzEoKSksIDQyLikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdChGb28yKCkpLCA0Mi4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoRm9vMygyMSkpLCA0Mi4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQsIEZvbzQoNDIpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvb1VuaWNvZGUoJzgnKSksIDkuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvb1N0cignOCcpKSwgOS4pCisKKyAgICBkZWYgdGVzdF9pc19pbnRlZ2VyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCgxLjEpLmlzX2ludGVnZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgxLikuaXNfaW50ZWdlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCJuYW4iKS5pc19pbnRlZ2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmxvYXQoImluZiIpLmlzX2ludGVnZXIoKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0YXNyYXRpbyhzZWxmKToKKyAgICAgICAgZm9yIGYsIHJhdGlvIGluIFsKKyAgICAgICAgICAgICAgICAoMC44NzUsICg3LCA4KSksCisgICAgICAgICAgICAgICAgKC0wLjg3NSwgKC03LCA4KSksCisgICAgICAgICAgICAgICAgKDAuMCwgKDAsIDEpKSwKKyAgICAgICAgICAgICAgICAoMTEuNSwgKDIzLCAyKSksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFzX2ludGVnZXJfcmF0aW8oKSwgcmF0aW8pCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMDApOgorICAgICAgICAgICAgZiA9IHJhbmRvbS5yYW5kb20oKQorICAgICAgICAgICAgZiAqPSAxMCAqKiByYW5kb20ucmFuZGludCgtMTAwLCAxMDApCisgICAgICAgICAgICBuLCBkID0gZi5hc19pbnRlZ2VyX3JhdGlvKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQobikuX190cnVlZGl2X18oZCksIGYpCisKKyAgICAgICAgUiA9IGZyYWN0aW9ucy5GcmFjdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFIoMCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgUigqZmxvYXQoMC4wKS5hc19pbnRlZ2VyX3JhdGlvKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFIoNSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgUigqZmxvYXQoMi41KS5hc19pbnRlZ2VyX3JhdGlvKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFIoMSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgUigqZmxvYXQoMC41KS5hc19pbnRlZ2VyX3JhdGlvKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFIoNDcyODc3OTYwODczOTAyMSwgMjI1MTc5OTgxMzY4NTI0OCksCisgICAgICAgICAgICAgICAgICAgICAgICAgUigqZmxvYXQoMi4xKS5hc19pbnRlZ2VyX3JhdGlvKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFIoLTQ3Mjg3Nzk2MDg3MzkwMjEsIDIyNTE3OTk4MTM2ODUyNDgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFIoKmZsb2F0KC0yLjEpLmFzX2ludGVnZXJfcmF0aW8oKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUigtMjEwMCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgUigqZmxvYXQoLTIxMDAuMCkuYXNfaW50ZWdlcl9yYXRpbygpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCgnaW5mJykuYXNfaW50ZWdlcl9yYXRpbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQoJy1pbmYnKS5hc19pbnRlZ2VyX3JhdGlvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCgnbmFuJykuYXNfaW50ZWdlcl9yYXRpbykKKworICAgIGRlZiBhc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihzZWxmLCBhLCBiKToKKyAgICAgICAgIyBmYWlsIHVubGVzcyBhID09IGIgYW5kIGEgYW5kIGIgaGF2ZSB0aGUgc2FtZSBzaWduIGJpdDsKKyAgICAgICAgIyB0aGUgb25seSBkaWZmZXJlbmNlIGZyb20gYXNzZXJ0RXF1YWwgaXMgdGhhdCB0aGlzIHRlc3QKKyAgICAgICAgIyBkaXN0aW5ndWlzaGVzIC0wLjAgYW5kIDAuMC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSwgY29weXNpZ24oMS4wLCBhKSksIChiLCBjb3B5c2lnbigxLjAsIGIpKSkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zsb2F0X21vZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBiZWhhdmlvdXIgb2YgJSBvcGVyYXRvciBmb3IgSUVFRSA3NTQgc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgIyBJbiBwYXJ0aWN1bGFyLCBjaGVjayBzaWducyBvZiB6ZXJvcy4KKyAgICAgICAgbW9kID0gb3BlcmF0b3IubW9kCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoLTEuMCwgMS4wKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgtMWUtMTAwLCAxLjApLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKC0wLjAsIDEuMCksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMC4wLCAxLjApLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKDFlLTEwMCwgMS4wKSwgMWUtMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgxLjAsIDEuMCksIDAuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgtMS4wLCAtMS4wKSwgLTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoLTFlLTEwMCwgLTEuMCksIC0xZS0xMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKC0wLjAsIC0xLjApLCAtMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgwLjAsIC0xLjApLCAtMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgxZS0xMDAsIC0xLjApLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgxLjAsIC0xLjApLCAtMC4wKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZmxvYXRfcG93KHNlbGYpOgorICAgICAgICAjIHRlc3QgYnVpbHRpbiBwb3cgYW5kICoqIG9wZXJhdG9yIGZvciBJRUVFIDc1NCBzcGVjaWFsIGNhc2VzLgorICAgICAgICAjIFNwZWNpYWwgY2FzZXMgdGFrZW4gZnJvbSBzZWN0aW9uIEYuOS40LjQgb2YgdGhlIEM5OSBzcGVjaWZpY2F0aW9uCisKKyAgICAgICAgZm9yIHBvd19vcCBpbiBwb3csIG9wZXJhdG9yLnBvdzoKKyAgICAgICAgICAgICMgeCoqTkFOIGlzIE5BTiBmb3IgYW55IHggZXhjZXB0IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoLUlORiwgTkFOKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC0yLjAsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgtMS4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoLTAuNSwgTkFOKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC0wLjAsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgwLjAsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgwLjUsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgyLjAsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChJTkYsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIE5BTikpKQorCisgICAgICAgICAgICAjIE5BTioqeSBpcyBOQU4gZm9yIGFueSB5IGV4Y2VwdCArLTAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCAtSU5GKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgLTIuMCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIC0xLjApKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCAtMC41KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgMC41KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgMS4wKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgMi4wKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgSU5GKSkpCisKKyAgICAgICAgICAgICMgKCstMCkqKnkgcmFpc2VzIFplcm9EaXZpc2lvbkVycm9yIGZvciB5IGEgbmVnYXRpdmUgb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBwb3dfb3AsIC0wLjAsIC0xLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAwLjAsIC0xLjApCisKKyAgICAgICAgICAgICMgKCstMCkqKnkgcmFpc2VzIFplcm9EaXZpc2lvbkVycm9yIGZvciB5IGZpbml0ZSBhbmQgbmVnYXRpdmUKKyAgICAgICAgICAgICMgYnV0IG5vdCBhbiBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgLTAuMCwgLTIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBwb3dfb3AsIC0wLjAsIC0wLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAwLjAsIC0yLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAwLjAsIC0wLjUpCisKKyAgICAgICAgICAgICMgKCstMCkqKnkgaXMgKy0wIGZvciB5IGEgcG9zaXRpdmUgb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDEuMCksIC0wLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIDEuMCksIDAuMCkKKworICAgICAgICAgICAgIyAoKy0wKSoqeSBpcyAwIGZvciB5IGZpbml0ZSBhbmQgcG9zaXRpdmUgYnV0IG5vdCBhbiBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgMi4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAwLjUpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIDIuMCksIDAuMCkKKworICAgICAgICAgICAgIyAoLTEpKiorLWluZiBpcyAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtSU5GKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgSU5GKSwgMS4wKQorCisgICAgICAgICAgICAjIDEqKnkgaXMgMSBmb3IgYW55IHksIGV2ZW4gaWYgeSBpcyBhbiBpbmZpbml0eSBvciBuYW4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLUlORiksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTEuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTAuNSksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAwLjUpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDEuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgMi4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCBJTkYpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIE5BTiksIDEuMCkKKworICAgICAgICAgICAgIyB4KiorLTAgaXMgMSBmb3IgYW55IHgsIGV2ZW4gaWYgeCBpcyBhIHplcm8sIGluZmluaXR5LCBvciBuYW4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjUsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC41LCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChOQU4sIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjUsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC41LCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoTkFOLCAtMC4wKSwgMS4wKQorCisgICAgICAgICAgICAjIHgqKnkgcmFpc2VzIFZhbHVlRXJyb3IgZm9yIGZpbml0ZSBuZWdhdGl2ZSB4IGFuZCBub24taW50ZWdyYWwgeQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMi4wLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMi4wLCAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0xLjAsIC0wLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0xLjAsIDAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTAuNSwgLTAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTAuNSwgMC41KQorCisgICAgICAgICAgICAjIHgqKi1JTkYgaXMgSU5GIGZvciBhYnMoeCkgPCAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAtSU5GKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgLUlORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgLUlORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgLUlORiksIElORikKKworICAgICAgICAgICAgIyB4KiotSU5GIGlzIDAgZm9yIGFicyh4KSA+IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIC1JTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtSU5GKSwgMC4wKQorCisgICAgICAgICAgICAjIHgqKklORiBpcyAwIGZvciBhYnMoeCkgPCAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCBJTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCBJTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIElORiksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgSU5GKSwgMC4wKQorCisgICAgICAgICAgICAjIHgqKklORiBpcyBJTkYgZm9yIGFicyh4KSA+IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIElORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIElORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgSU5GKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCBJTkYpLCBJTkYpCisKKyAgICAgICAgICAgICMgKC1JTkYpKip5IGlzIC0wLjAgZm9yIHkgYSBuZWdhdGl2ZSBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgLTEuMCksIC0wLjApCisKKyAgICAgICAgICAgICMgKC1JTkYpKip5IGlzIDAuMCBmb3IgeSBuZWdhdGl2ZSBidXQgbm90IGFuIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAtMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgLTIuMCksIDAuMCkKKworICAgICAgICAgICAgIyAoLUlORikqKnkgaXMgLUlORiBmb3IgeSBhIHBvc2l0aXZlIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAxLjApLCAtSU5GKQorCisgICAgICAgICAgICAjICgtSU5GKSoqeSBpcyBJTkYgZm9yIHkgcG9zaXRpdmUgYnV0IG5vdCBhbiBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgMC41KSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgMi4wKSwgSU5GKQorCisgICAgICAgICAgICAjIElORioqeSBpcyBJTkYgZm9yIHkgcG9zaXRpdmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgMC41KSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAxLjApLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIDIuMCksIElORikKKworICAgICAgICAgICAgIyBJTkYqKnkgaXMgMC4wIGZvciB5IG5lZ2F0aXZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIC0yLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIC0xLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIC0wLjUpLCAwLjApCisKKyAgICAgICAgICAgICMgYmFzaWMgY2hlY2tzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBzcGVjaWFsIGNhc2VzIGFib3ZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtMi4wKSwgMC4yNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIC0xLjApLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIDEuMCksIC0yLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAyLjApLCA0LjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtMi4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLTEuMCksIC0xLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgMS4wKSwgLTEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTIuMCksIDAuMjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0xLjApLCAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgMS4wKSwgMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAyLjApLCA0LjApCisKKyAgICAgICAgICAgICMgMSAqKiBsYXJnZSBhbmQgLTEgKiogbGFyZ2U7IHNvbWUgbGlibXMgYXBwYXJlbnRseQorICAgICAgICAgICAgIyBoYXZlIHByb2JsZW1zIHdpdGggdGhlc2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTFlMTAwKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAxZTEwMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIC0xZTEwMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDFlMTAwKSwgMS4wKQorCisgICAgICAgICAgICAjIGNoZWNrIHNpZ24gZm9yIHJlc3VsdHMgdGhhdCB1bmRlcmZsb3cgdG8gMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTIwMDAuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTIuMCwgLTIwMDAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIC0yMDAxLjApLCAtMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMjAwMC4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMjAwMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMjAwMS4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuNSwgMjAwMC4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMC41LCAyMDAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAyMDAxLjApLCAtMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC41LCAyMDAwLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjUsIDIwMDAuNSksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgMjAwMS4wKSwgMC4wKQorCisgICAgICAgICAgICAjIGNoZWNrIHdlIGRvbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBmb3Igc3Vibm9ybWFsIHJlc3VsdHMsCisgICAgICAgICAgICAjIGFuZCB2YWxpZGF0ZSBzaWducy4gIFRlc3RzIGN1cnJlbnRseSBkaXNhYmxlZCwgc2luY2UKKyAgICAgICAgICAgICMgdGhleSBmYWlsIG9uIHN5c3RlbXMgd2hlcmUgYSBzdWJub3JtYWwgcmVzdWx0IGZyb20gcG93CisgICAgICAgICAgICAjIGlzIGZsdXNoZWQgdG8gemVybyAoZS5nLiBEZWJpYW4vaWE2NC4pCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA8IHBvd19vcCgwLjUsIDEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoLTAuNSwgMTA0OCkgPCAxZS0zMTUpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA8IHBvd19vcCgwLjUsIDEwNDcpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPiBwb3dfb3AoLTAuNSwgMTA0NykgPiAtMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMi4wLCAtMTA0OCkgPCAxZS0zMTUpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA8IHBvd19vcCgtMi4wLCAtMTA0OCkgPCAxZS0zMTUpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA8IHBvd19vcCgyLjAsIC0xMDQ3KSA8IDFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wID4gcG93X29wKC0yLjAsIC0xMDQ3KSA+IC0xZS0zMTUpCisKKworQHJlcXVpcmVzX3NldGZvcm1hdAorY2xhc3MgRm9ybWF0RnVuY3Rpb25zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNhdmVfZm9ybWF0cyA9IHsnZG91YmxlJzpmbG9hdC5fX2dldGZvcm1hdF9fKCdkb3VibGUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zsb2F0JzpmbG9hdC5fX2dldGZvcm1hdF9fKCdmbG9hdCcpfQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmbG9hdC5fX3NldGZvcm1hdF9fKCdkb3VibGUnLCBzZWxmLnNhdmVfZm9ybWF0c1snZG91YmxlJ10pCisgICAgICAgIGZsb2F0Ll9fc2V0Zm9ybWF0X18oJ2Zsb2F0Jywgc2VsZi5zYXZlX2Zvcm1hdHNbJ2Zsb2F0J10pCisKKyAgICBkZWYgdGVzdF9nZXRmb3JtYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZmxvYXQuX19nZXRmb3JtYXRfXygnZG91YmxlJyksCisgICAgICAgICAgICAgICAgICAgICAgWyd1bmtub3duJywgJ0lFRUUsIGJpZy1lbmRpYW4nLCAnSUVFRSwgbGl0dGxlLWVuZGlhbiddKQorICAgICAgICBzZWxmLmFzc2VydEluKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oJ2Zsb2F0JyksCisgICAgICAgICAgICAgICAgICAgICAgWyd1bmtub3duJywgJ0lFRUUsIGJpZy1lbmRpYW4nLCAnSUVFRSwgbGl0dGxlLWVuZGlhbiddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdC5fX2dldGZvcm1hdF9fLCAnY2hpY2tlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQuX19nZXRmb3JtYXRfXywgMSkKKworICAgIGRlZiB0ZXN0X3NldGZvcm1hdChzZWxmKToKKyAgICAgICAgZm9yIHQgaW4gJ2RvdWJsZScsICdmbG9hdCc6CisgICAgICAgICAgICBmbG9hdC5fX3NldGZvcm1hdF9fKHQsICd1bmtub3duJykKKyAgICAgICAgICAgIGlmIHNlbGYuc2F2ZV9mb3JtYXRzW3RdID09ICdJRUVFLCBiaWctZW5kaWFuJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdC5fX3NldGZvcm1hdF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQsICdJRUVFLCBsaXR0bGUtZW5kaWFuJykKKyAgICAgICAgICAgIGVsaWYgc2VsZi5zYXZlX2Zvcm1hdHNbdF0gPT0gJ0lFRUUsIGxpdHRsZS1lbmRpYW4nOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0Ll9fc2V0Zm9ybWF0X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCwgJ0lFRUUsIGJpZy1lbmRpYW4nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdC5fX3NldGZvcm1hdF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQsICdJRUVFLCBiaWctZW5kaWFuJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdC5fX3NldGZvcm1hdF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQsICdJRUVFLCBsaXR0bGUtZW5kaWFuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0Ll9fc2V0Zm9ybWF0X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LCAnY2hpY2tlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0Ll9fc2V0Zm9ybWF0X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICdjaGlja2VuJywgJ3Vua25vd24nKQorCitCRV9ET1VCTEVfSU5GID0gJ1x4N2ZceGYwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworTEVfRE9VQkxFX0lORiA9ICcnLmpvaW4ocmV2ZXJzZWQoQkVfRE9VQkxFX0lORikpCitCRV9ET1VCTEVfTkFOID0gJ1x4N2ZceGY4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworTEVfRE9VQkxFX05BTiA9ICcnLmpvaW4ocmV2ZXJzZWQoQkVfRE9VQkxFX05BTikpCisKK0JFX0ZMT0FUX0lORiA9ICdceDdmXHg4MFx4MDBceDAwJworTEVfRkxPQVRfSU5GID0gJycuam9pbihyZXZlcnNlZChCRV9GTE9BVF9JTkYpKQorQkVfRkxPQVRfTkFOID0gJ1x4N2ZceGMwXHgwMFx4MDAnCitMRV9GTE9BVF9OQU4gPSAnJy5qb2luKHJldmVyc2VkKEJFX0ZMT0FUX05BTikpCisKKyMgb24gbm9uLUlFRUUgcGxhdGZvcm1zLCBhdHRlbXB0aW5nIHRvIHVucGFjayBhIGJpdCBwYXR0ZXJuCisjIHJlcHJlc2VudGluZyBhbiBpbmZpbml0eSBvciBhIE5hTiBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uLgorCitAcmVxdWlyZXNfc2V0Zm9ybWF0CitjbGFzcyBVbmtub3duRm9ybWF0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zYXZlX2Zvcm1hdHMgPSB7J2RvdWJsZSc6ZmxvYXQuX19nZXRmb3JtYXRfXygnZG91YmxlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmbG9hdCc6ZmxvYXQuX19nZXRmb3JtYXRfXygnZmxvYXQnKX0KKyAgICAgICAgZmxvYXQuX19zZXRmb3JtYXRfXygnZG91YmxlJywgJ3Vua25vd24nKQorICAgICAgICBmbG9hdC5fX3NldGZvcm1hdF9fKCdmbG9hdCcsICd1bmtub3duJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZmxvYXQuX19zZXRmb3JtYXRfXygnZG91YmxlJywgc2VsZi5zYXZlX2Zvcm1hdHNbJ2RvdWJsZSddKQorICAgICAgICBmbG9hdC5fX3NldGZvcm1hdF9fKCdmbG9hdCcsIHNlbGYuc2F2ZV9mb3JtYXRzWydmbG9hdCddKQorCisgICAgZGVmIHRlc3RfZG91YmxlX3NwZWNpYWxzX2RvbnRfdW5wYWNrKHNlbGYpOgorICAgICAgICBmb3IgZm10LCBkYXRhIGluIFsoJz5kJywgQkVfRE9VQkxFX0lORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPmQnLCBCRV9ET1VCTEVfTkFOKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZCcsIExFX0RPVUJMRV9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxkJywgTEVfRE9VQkxFX05BTildOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RydWN0LnVucGFjaywgZm10LCBkYXRhKQorCisgICAgZGVmIHRlc3RfZmxvYXRfc3BlY2lhbHNfZG9udF91bnBhY2soc2VsZik6CisgICAgICAgIGZvciBmbXQsIGRhdGEgaW4gWygnPmYnLCBCRV9GTE9BVF9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJz5mJywgQkVfRkxPQVRfTkFOKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZicsIExFX0ZMT0FUX0lORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGYnLCBMRV9GTE9BVF9OQU4pXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cnVjdC51bnBhY2ssIGZtdCwgZGF0YSkKKworCisjIG9uIGFuIElFRUUgcGxhdGZvcm0sIGFsbCB3ZSBndWFyYW50ZWUgaXMgdGhhdCBiaXQgcGF0dGVybnMKKyMgcmVwcmVzZW50aW5nIGluZmluaXRpZXMgb3IgTmFOcyBkbyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uOyBhbGwgZWxzZQorIyBpcyBhY2NpZGVudCAodG9kYXkpLgorIyBsZXQncyBhbHNvIHRyeSB0byBndWFyYW50ZWUgdGhhdCAtMC4wIGFuZCAwLjAgZG9uJ3QgZ2V0IGNvbmZ1c2VkLgorCitjbGFzcyBJRUVFRm9ybWF0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZG91YmxlX3NwZWNpYWxzX2RvX3VucGFjayhzZWxmKToKKyAgICAgICAgZm9yIGZtdCwgZGF0YSBpbiBbKCc+ZCcsIEJFX0RPVUJMRV9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJz5kJywgQkVfRE9VQkxFX05BTiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGQnLCBMRV9ET1VCTEVfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZCcsIExFX0RPVUJMRV9OQU4pXToKKyAgICAgICAgICAgIHN0cnVjdC51bnBhY2soZm10LCBkYXRhKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZmxvYXRfc3BlY2lhbHNfZG9fdW5wYWNrKHNlbGYpOgorICAgICAgICBmb3IgZm10LCBkYXRhIGluIFsoJz5mJywgQkVfRkxPQVRfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc+ZicsIEJFX0ZMT0FUX05BTiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGYnLCBMRV9GTE9BVF9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxmJywgTEVfRkxPQVRfTkFOKV06CisgICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKGZtdCwgZGF0YSkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X25lZ2F0aXZlX3plcm8oc2VsZik6CisgICAgICAgIGRlZiBwb3NfcG9zKCk6CisgICAgICAgICAgICByZXR1cm4gMC4wLCBtYXRoLmF0YW4yKDAuMCwgLTEpCisgICAgICAgIGRlZiBwb3NfbmVnKCk6CisgICAgICAgICAgICByZXR1cm4gMC4wLCBtYXRoLmF0YW4yKC0wLjAsIC0xKQorICAgICAgICBkZWYgbmVnX3BvcygpOgorICAgICAgICAgICAgcmV0dXJuIC0wLjAsIG1hdGguYXRhbjIoMC4wLCAtMSkKKyAgICAgICAgZGVmIG5lZ19uZWcoKToKKyAgICAgICAgICAgIHJldHVybiAtMC4wLCBtYXRoLmF0YW4yKC0wLjAsIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc19wb3MoKSwgbmVnX3BvcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc19uZWcoKSwgbmVnX25lZygpKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfdW5kZXJmbG93X3NpZ24oc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCAtMWUtMTAwMCBnaXZlcyAtMC4wLCBub3QgMC4wCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigtMWUtMTAwMCwgLTEpLCBtYXRoLmF0YW4yKC0wLjAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKGZsb2F0KCctMWUtMTAwMCcpLCAtMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aC5hdGFuMigtMC4wLCAtMSkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgICMgdGhlc2Ugc2hvdWxkIGJlIHJld3JpdHRlbiB0byB1c2UgYm90aCBmb3JtYXQoeCwgc3BlYykgYW5kCisgICAgICAgICMgeC5fX2Zvcm1hdF9fKHNwZWMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMC4wLCAnZicpLCAnMC4wMDAwMDAnKQorCisgICAgICAgICMgdGhlIGRlZmF1bHQgaXMgJ2cnLCBleGNlcHQgZm9yIGVtcHR5IGZvcm1hdCBzcGVjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDAuMCwgJycpLCAnMC4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMC4wMSwgJycpLCAnMC4wMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDAuMDEsICdnJyksICcwLjAxJykKKworICAgICAgICAjIGVtcHR5IHByZXNlbnRhdGlvbiB0eXBlIHNob3VsZCBmb3JtYXQgaW4gdGhlIHNhbWUgd2F5IGFzIHN0cgorICAgICAgICAjIChpc3N1ZSA1OTIwKQorICAgICAgICB4ID0gMTAwLzcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHgsICcnKSwgc3RyKHgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh4LCAnLScpLCBzdHIoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHgsICc+JyksIHN0cih4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeCwgJzInKSwgc3RyKHgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuMCwgJ2YnKSwgJzEuMDAwMDAwJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS4wLCAnZicpLCAnLTEuMDAwMDAwJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCggMS4wLCAnIGYnKSwgJyAxLjAwMDAwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjAsICcgZicpLCAnLTEuMDAwMDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoIDEuMCwgJytmJyksICcrMS4wMDAwMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS4wLCAnK2YnKSwgJy0xLjAwMDAwMCcpCisKKyAgICAgICAgIyAlIGZvcm1hdHRpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuMCwgJyUnKSwgJy0xMDAuMDAwMDAwJScpCisKKyAgICAgICAgIyBjb252ZXJzaW9uIHRvIHN0cmluZyBzaG91bGQgZmFpbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDMuMCwgInMiKQorCisgICAgICAgICMgb3RoZXIgZm9ybWF0IHNwZWNpZmllcnMgc2hvdWxkbid0IHdvcmsgb24gZmxvYXRzLAorICAgICAgICAjICBpbiBwYXJ0aWN1bGFyIGludCBzcGVjaWZpZXJzCisgICAgICAgIGZvciBmb3JtYXRfc3BlYyBpbiAoW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ2EnKSwgb3JkKCd6JykrMSldICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnQScpLCBvcmQoJ1onKSsxKV0pOgorICAgICAgICAgICAgaWYgbm90IGZvcm1hdF9zcGVjIGluICdlRWZGZ0duJSc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLjAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMS4wLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIC0xLjAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMWUxMDAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgLTFlMTAwLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDFlLTEwMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAtMWUtMTAwLCBmb3JtYXRfc3BlYykKKworICAgICAgICAjIGlzc3VlIDMzODI6ICdmJyBhbmQgJ0YnIHdpdGggaW5mJ3MgYW5kIG5hbidzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoSU5GKSwgJ2luZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoSU5GKSwgJ0lORicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoLUlORiksICctaW5mJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdCgtSU5GKSwgJy1JTkYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KE5BTiksICduYW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KE5BTiksICdOQU4nKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZm9ybWF0X3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oZm9ybWF0X3Rlc3RmaWxlKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG9wZW4oZm9ybWF0X3Rlc3RmaWxlKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy0tJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbGhzLCByaHMgPSBtYXAoc3RyLnN0cmlwLCBsaW5lLnNwbGl0KCctPicpKQorICAgICAgICAgICAgICAgIGZtdCwgYXJnID0gbGhzLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBhcmcgPSBmbG9hdChhcmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQgJSBhcmcsIHJocykKKyAgICAgICAgICAgICAgICBpZiBub3QgbWF0aC5pc25hbihhcmcpIGFuZCBjb3B5c2lnbigxLjAsIGFyZykgPiAwLjA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10ICUgLWFyZywgJy0nICsgcmhzKQorCisgICAgZGVmIHRlc3RfaXNzdWU1ODY0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxMjMuNDU2LCAnLjQnKSwgJzEyMy41JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMTIzNC41NiwgJy40JyksICcxLjIzNWUrMDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxMjM0NS42LCAnLjQnKSwgJzEuMjM1ZSswNCcpCisKK2NsYXNzIFJlcHJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZmxvYXRzX2ZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdmbG9hdGluZ19wb2ludHMudHh0JykpCisgICAgICAgIGZvciBsaW5lIGluIGZsb2F0c19maWxlOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGxpbmUgb3IgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHYgPSBldmFsKGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIGV2YWwocmVwcih2KSkpCisgICAgICAgIGZsb2F0c19maWxlLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3lzLCAnZmxvYXRfcmVwcl9zdHlsZScsICcnKSA9PSAnc2hvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWVzIG9ubHkgd2hlbiB1c2luZyBzaG9ydCBmbG9hdCByZXByIHN0eWxlIikKKyAgICBkZWYgdGVzdF9zaG9ydF9yZXByKHNlbGYpOgorICAgICAgICAjIHRlc3Qgc2hvcnQgZmxvYXQgcmVwciBpbnRyb2R1Y2VkIGluIFB5dGhvbiAzLjEuICBPbmUgYXNwZWN0CisgICAgICAgICMgb2YgdGhpcyByZXByIGlzIHRoYXQgd2UgZ2V0IHNvbWUgZGVncmVlIG9mIHN0ciAtPiBmbG9hdCAtPgorICAgICAgICAjIHN0ciByb3VuZHRyaXBwaW5nLiAgSW4gcGFydGljdWxhciwgZm9yIGFueSBudW1lcmljIHN0cmluZworICAgICAgICAjIGNvbnRhaW5pbmcgMTUgb3IgZmV3ZXIgc2lnbmlmaWNhbnQgZGlnaXRzLCB0aG9zZSBleGFjdCBzYW1lCisgICAgICAgICMgZGlnaXRzIChtb2R1bG8gdHJhaWxpbmcgemVyb3MpIHNob3VsZCBhcHBlYXIgaW4gdGhlIG91dHB1dC4KKyAgICAgICAgIyBObyBtb3JlIHJlcHIoMC4wMykgLT4gIjAuMDI5OTk5OTk5OTk5OTk5OTk5IiEKKworICAgICAgICB0ZXN0X3N0cmluZ3MgPSBbCisgICAgICAgICAgICAjIG91dHB1dCBhbHdheXMgaW5jbHVkZXMgKmVpdGhlciogYSBkZWNpbWFsIHBvaW50IGFuZCBhdAorICAgICAgICAgICAgIyBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgdGhhdCBwb2ludCwgb3IgYW4gZXhwb25lbnQuCisgICAgICAgICAgICAnMC4wJywKKyAgICAgICAgICAgICcxLjAnLAorICAgICAgICAgICAgJzAuMDEnLAorICAgICAgICAgICAgJzAuMDInLAorICAgICAgICAgICAgJzAuMDMnLAorICAgICAgICAgICAgJzAuMDQnLAorICAgICAgICAgICAgJzAuMDUnLAorICAgICAgICAgICAgJzEuMjM0NTY3ODknLAorICAgICAgICAgICAgJzEwLjAnLAorICAgICAgICAgICAgJzEwMC4wJywKKyAgICAgICAgICAgICMgdmFsdWVzID49IDFlMTYgZ2V0IGFuIGV4cG9uZW50Li4uCisgICAgICAgICAgICAnMTAwMDAwMDAwMDAwMDAwMC4wJywKKyAgICAgICAgICAgICc5OTk5OTk5OTk5OTk5OTkwLjAnLAorICAgICAgICAgICAgJzFlKzE2JywKKyAgICAgICAgICAgICcxZSsxNycsCisgICAgICAgICAgICAjIC4uLiBhbmQgc28gZG8gdmFsdWVzIDwgMWUtNAorICAgICAgICAgICAgJzAuMDAxJywKKyAgICAgICAgICAgICcwLjAwMTAwMScsCisgICAgICAgICAgICAnMC4wMDAxMDAwMDAwMDAwMDAwMScsCisgICAgICAgICAgICAnMC4wMDAxJywKKyAgICAgICAgICAgICc5Ljk5OTk5OTk5OTk5OWUtMDUnLAorICAgICAgICAgICAgJzFlLTA1JywKKyAgICAgICAgICAgICMgdmFsdWVzIGRlc2lnbmVkIHRvIHByb3Zva2UgZmFpbHVyZSBpZiB0aGUgRlBVIHJvdW5kaW5nCisgICAgICAgICAgICAjIHByZWNpc2lvbiBpc24ndCBzZXQgY29ycmVjdGx5CisgICAgICAgICAgICAnOC43MjI5Mzc3MTExMDM2MWUrMjUnLAorICAgICAgICAgICAgJzcuNDcwMDUzMDczNDIzMTNlKzI2JywKKyAgICAgICAgICAgICcyLjg2NDM4MDAwNDM5Njk4ZSsyOCcsCisgICAgICAgICAgICAnOC44OTE0MjkwNTI0NjE3OWUrMjgnLAorICAgICAgICAgICAgJzMuMDg1NzgwODcwNzkyMzJlKzM1JywKKyAgICAgICAgICAgIF0KKworICAgICAgICBmb3IgcyBpbiB0ZXN0X3N0cmluZ3M6CisgICAgICAgICAgICBuZWdzID0gJy0nK3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcmVwcihmbG9hdChzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5lZ3MsIHJlcHIoZmxvYXQobmVncykpKQorCisKK0ByZXF1aXJlc19JRUVFXzc1NAorY2xhc3MgUm91bmRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2Vjb25kX2FyZ3VtZW50X3R5cGUoc2VsZik6CisgICAgICAgICMgYW55IHR5cGUgd2l0aCBhbiBfX2luZGV4X18gbWV0aG9kIHNob3VsZCBiZSBwZXJtaXR0ZWQgYXMKKyAgICAgICAgIyBhIHNlY29uZCBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDEyLjM0LCBUcnVlKSwgMTIuMykKKworICAgICAgICBjbGFzcyBNeUluZGV4KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOiByZXR1cm4gNAorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjEyMzQ1NiwgTXlJbmRleCgpKSwgLTAuMTIzNSkKKyAgICAgICAgIyBidXQgZmxvYXRzIHNob3VsZCBiZSBpbGxlZ2FsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIDMuMTQxNTksIDIuMCkKKworICAgIGRlZiB0ZXN0X2luZl9uYW4oc2VsZik6CisgICAgICAgICMgcm91bmRpbmcgYW4gaW5maW5pdHkgb3IgbmFuIHJldHVybnMgdGhlIHNhbWUgbnVtYmVyOworICAgICAgICAjIChpbiBweTNrLCByb3VuZGluZyBhbiBpbmZpbml0eSBvciBuYW4gcmFpc2VzIGFuIGVycm9yLAorICAgICAgICAjICBzaW5jZSB0aGUgcmVzdWx0IGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgbG9uZykuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC1JTkYpLCAtSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyb3VuZChOQU4pKSkKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoLTUsIDUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZChJTkYsIG4pLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC1JTkYsIG4pLCAtSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocm91bmQoTkFOLCBuKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgSU5GLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIC1JTkYsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgTkFOLCAiY2VjaSBuJ2VzdCBwYXMgdW4gaW50ZWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIC0wLjAsIDFqKQorCisgICAgZGVmIHRlc3RfbGFyZ2VfbihzZWxmKToKKyAgICAgICAgZm9yIG4gaW4gWzMyNCwgMzI1LCA0MDAsIDIqKjMxLTEsIDIqKjMxLCAyKiozMiwgMioqMTAwXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMTIzLjQ1NiwgbiksIDEyMy40NTYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xMjMuNDU2LCBuKSwgLTEyMy40NTYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlMzAwLCBuKSwgMWUzMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlLTMyMCwgbiksIDFlLTMyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZTE1MCwgMzAwKSwgMWUxNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUzMDAsIDMwNyksIDFlMzAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0zLjE0MTUsIDMwOCksIC0zLjE0MTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUxNTAsIDMwOSksIDFlMTUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEuNGUtMzE1LCAzMTUpLCAxZS0zMTUpCisKKyAgICBkZWYgdGVzdF9zbWFsbF9uKHNlbGYpOgorICAgICAgICBmb3IgbiBpbiBbLTMwOCwgLTMwOSwgLTQwMCwgMS0yKiozMSwgLTIqKjMxLCAtMioqMzEtMSwgLTIqKjEwMF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEyMy40NTYsIG4pLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xMjMuNDU2LCBuKSwgLTAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUzMDAsIG4pLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlLTMyMCwgbiksIDAuMCkKKworICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByb3VuZCwgMS42ZTMwOCwgLTMwOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcm91bmQsIC0xLjdlMzA4LCAtMzA4KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzeXMsICdmbG9hdF9yZXByX3N0eWxlJywgJycpID09ICdzaG9ydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgYXBwbGllcyBvbmx5IHdoZW4gdXNpbmcgc2hvcnQgZmxvYXQgcmVwciBzdHlsZSIpCisgICAgZGVmIHRlc3RfcHJldmlvdXNfcm91bmRfYnVncyhzZWxmKToKKyAgICAgICAgIyBwYXJ0aWN1bGFyIGNhc2VzIHRoYXQgaGF2ZSBvY2N1cnJlZCBpbiBidWcgcmVwb3J0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDU2Mjk0OTk1MzQyMTMxMi41LCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNTYyOTQ5OTUzNDIxMzEyLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNTYyOTQ5OTUzNDIxMzEuNSwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgNTYyOTQ5OTUzNDIxMzEuNSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3lzLCAnZmxvYXRfcmVwcl9zdHlsZScsICcnKSA9PSAnc2hvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IGFwcGxpZXMgb25seSB3aGVuIHVzaW5nIHNob3J0IGZsb2F0IHJlcHIgc3R5bGUiKQorICAgIGRlZiB0ZXN0X2hhbGZ3YXlfY2FzZXMoc2VsZik6CisgICAgICAgICMgSGFsZndheSBjYXNlcyBuZWVkIHNwZWNpYWwgYXR0ZW50aW9uLCBzaW5jZSB0aGUgY3VycmVudAorICAgICAgICAjIGltcGxlbWVudGF0aW9uIGhhcyB0byBkZWFsIHdpdGggdGhlbSBzcGVjaWFsbHkuICBOb3RlIHRoYXQKKyAgICAgICAgIyAyLnggcm91bmRzIGhhbGZ3YXkgdmFsdWVzIHVwIChpLmUuLCBhd2F5IGZyb20gemVybykgd2hpbGUKKyAgICAgICAgIyAzLnggZG9lcyByb3VuZC1oYWxmLXRvLWV2ZW4uCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC4xMjUsIDIpLCAwLjEzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDAuMzc1LCAyKSwgMC4zOCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjYyNSwgMiksIDAuNjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC44NzUsIDIpLCAwLjg4KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjEyNSwgMiksIC0wLjEzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjM3NSwgMiksIC0wLjM4KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjYyNSwgMiksIC0wLjYzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjg3NSwgMiksIC0wLjg4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC4yNSwgMSksIDAuMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjc1LCAxKSwgMC44KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjI1LCAxKSwgLTAuMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMC43NSwgMSksIC0wLjgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtNi41LCAwKSwgLTcuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtNS41LCAwKSwgLTYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMS41LCAwKSwgLTIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMC41LCAwKSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgwLjUsIDApLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMS41LCAwKSwgMi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDIuNSwgMCksIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgzLjUsIDApLCA0LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNC41LCAwKSwgNS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDUuNSwgMCksIDYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg2LjUsIDApLCA3LjApCisKKyAgICAgICAgIyBzYW1lIGJ1dCB3aXRob3V0IGFuIGV4cGxpY2l0IHNlY29uZCBhcmd1bWVudDsgaW4gMy54IHRoZXNlCisgICAgICAgICMgd2lsbCBnaXZlIGludGVnZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTYuNSksIC03LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTUuNSksIC02LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTEuNSksIC0yLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTAuNSksIC0xLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMC41KSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEuNSksIDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgyLjUpLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMy41KSwgNC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDQuNSksIDUuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1LjUpLCA2LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNi41KSwgNy4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTI1LjAsIC0xKSwgLTMwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTE1LjAsIC0xKSwgLTIwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTUuMCwgLTEpLCAtMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1LjAsIC0xKSwgMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxNS4wLCAtMSksIDIwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMjUuMCwgLTEpLCAzMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDM1LjAsIC0xKSwgNDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg0NS4wLCAtMSksIDUwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNTUuMCwgLTEpLCA2MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDY1LjAsIC0xKSwgNzAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg3NS4wLCAtMSksIDgwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoODUuMCwgLTEpLCA5MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDk1LjAsIC0xKSwgMTAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMTIzMjUuMCwgLTEpLCAxMjMzMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMzUwLjAsIC0yKSwgNDAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNDUwLjAsIC0yKSwgNTAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjVlMjEsIC0yMSksIDFlMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMS41ZTIxLCAtMjEpLCAyZTIxKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDIuNWUyMSwgLTIxKSwgM2UyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCg1LjVlMjEsIC0yMSksIDZlMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoOC41ZTIxLCAtMjEpLCA5ZTIxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTEuNWUyMiwgLTIyKSwgLTJlMjIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTAuNWUyMiwgLTIyKSwgLTFlMjIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC41ZTIyLCAtMjIpLCAxZTIyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDEuNWUyMiwgLTIyKSwgMmUyMikKKworCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZm9ybWF0X3NwZWNpYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9ybWF0dGluZyBvZiBuYW5zIGFuZCBpbmZzLgorCisgICAgICAgIGRlZiB0ZXN0KGZtdCwgdmFsdWUsIGV4cGVjdGVkKToKKyAgICAgICAgICAgICMgVGVzdCB3aXRoIGJvdGggJSBhbmQgZm9ybWF0KCkuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCAlIHZhbHVlLCBleHBlY3RlZCwgZm10KQorICAgICAgICAgICAgaWYgbm90ICcjJyBpbiBmbXQ6CisgICAgICAgICAgICAgICAgIyBVbnRpbCBpc3N1ZSA3MDk0IGlzIGltcGxlbWVudGVkLCBmb3JtYXQoKSBmb3IgZmxvYXRzIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAjICBzdXBwb3J0ICcjJyBmb3JtYXR0aW5nCisgICAgICAgICAgICAgICAgZm10ID0gZm10WzE6XSAjIHN0cmlwIG9mZiB0aGUgJQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHZhbHVlLCBmbXQpLCBleHBlY3RlZCwgZm10KQorCisgICAgICAgIGZvciBmbXQgaW4gWyclZScsICclZicsICclZycsICclLjBlJywgJyUuNmYnLCAnJS4yMGcnLAorICAgICAgICAgICAgICAgICAgICAnJSNlJywgJyUjZicsICclI2cnLCAnJSMuMjBlJywgJyUjLjE1ZicsICclIy4zZyddOgorICAgICAgICAgICAgcGZtdCA9ICclKycgKyBmbXRbMTpdCisgICAgICAgICAgICBzZm10ID0gJyUgJyArIGZtdFsxOl0KKyAgICAgICAgICAgIHRlc3QoZm10LCBJTkYsICdpbmYnKQorICAgICAgICAgICAgdGVzdChmbXQsIC1JTkYsICctaW5mJykKKyAgICAgICAgICAgIHRlc3QoZm10LCBOQU4sICduYW4nKQorICAgICAgICAgICAgdGVzdChmbXQsIC1OQU4sICduYW4nKQorICAgICAgICAgICAgIyBXaGVuIGFza2luZyBmb3IgYSBzaWduLCBpdCdzIGFsd2F5cyBwcm92aWRlZC4gbmFucyBhcmUKKyAgICAgICAgICAgICMgIGFsd2F5cyBwb3NpdGl2ZS4KKyAgICAgICAgICAgIHRlc3QocGZtdCwgSU5GLCAnK2luZicpCisgICAgICAgICAgICB0ZXN0KHBmbXQsIC1JTkYsICctaW5mJykKKyAgICAgICAgICAgIHRlc3QocGZtdCwgTkFOLCAnK25hbicpCisgICAgICAgICAgICB0ZXN0KHBmbXQsIC1OQU4sICcrbmFuJykKKyAgICAgICAgICAgICMgV2hlbiB1c2luZyAnICcgZm9yIGEgc2lnbiBjb2RlLCBvbmx5IGluZnMgY2FuIGJlIG5lZ2F0aXZlLgorICAgICAgICAgICAgIyAgT3RoZXJzIGhhdmUgYSBzcGFjZS4KKyAgICAgICAgICAgIHRlc3Qoc2ZtdCwgSU5GLCAnIGluZicpCisgICAgICAgICAgICB0ZXN0KHNmbXQsIC1JTkYsICctaW5mJykKKyAgICAgICAgICAgIHRlc3Qoc2ZtdCwgTkFOLCAnIG5hbicpCisgICAgICAgICAgICB0ZXN0KHNmbXQsIC1OQU4sICcgbmFuJykKKworCisjIEJlZ2lubmluZyB3aXRoIFB5dGhvbiAyLjYgZmxvYXQgaGFzIGNyb3NzIHBsYXRmb3JtIGNvbXBhdGlibGUKKyMgd2F5cyB0byBjcmVhdGUgYW5kIHJlcHJlc2VudCBpbmYgYW5kIG5hbgorY2xhc3MgSW5mTmFuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW5mX2Zyb21fc3RyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoImluZiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5mKGZsb2F0KCIraW5mIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoIi1pbmYiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luZihmbG9hdCgiaW5maW5pdHkiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luZihmbG9hdCgiK2luZmluaXR5IikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoIi1pbmZpbml0eSIpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoImluZiIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiK2luZiIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiLWluZiIpKSwgIi1pbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoImluZmluaXR5IikpLCAiaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCIraW5maW5pdHkiKSksICJpbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIi1pbmZpbml0eSIpKSwgIi1pbmYiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiSU5GIikpLCAiaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCIrSW5mIikpLCAiaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCItaU5GIikpLCAiLWluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiSW5maW5pdHkiKSksICJpbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIitpTmZJbkl0WSIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiLUlORklOSVRZIikpLCAiLWluZiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZmxvYXQoImluZiIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZsb2F0KCIraW5mIikpLCAiaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZmxvYXQoIi1pbmYiKSksICItaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZmxvYXQoImluZmluaXR5IikpLCAiaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZmxvYXQoIitpbmZpbml0eSIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZsb2F0KCItaW5maW5pdHkiKSksICItaW5mIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgImluZm8iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIitpbmZvIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICItaW5mbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiaW4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIitpbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLWluIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICJpbmZpbml0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIrSW5maW4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi1JTkZJIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICJpbmZpbml0eXMiKQorCisgICAgZGVmIHRlc3RfaW5mX2FzX3N0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKDFlMzAwICogMWUzMDApLCAiaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKC0xZTMwMCAqIDFlMzAwKSwgIi1pbmYiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKDFlMzAwICogMWUzMDApLCAiaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoLTFlMzAwICogMWUzMDApLCAiLWluZiIpCisKKyAgICBkZWYgdGVzdF9uYW5fZnJvbV9zdHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihmbG9hdCgibmFuIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oZmxvYXQoIituYW4iKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihmbG9hdCgiLW5hbiIpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIm5hbiIpKSwgIm5hbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiK25hbiIpKSwgIm5hbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiLW5hbiIpKSwgIm5hbiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCJOQU4iKSksICJuYW4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIitOQW4iKSksICJuYW4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIi1OYU4iKSksICJuYW4iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZsb2F0KCJuYW4iKSksICJuYW4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmbG9hdCgiK25hbiIpKSwgIm5hbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZsb2F0KCItbmFuIikpLCAibmFuIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIm5hbmEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIituYW5hIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICItbmFuYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAibmEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIituYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLW5hIikKKworICAgIGRlZiB0ZXN0X25hbl9hc19zdHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigxZTMwMCAqIDFlMzAwICogMCksICJuYW4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoLTFlMzAwICogMWUzMDAgKiAwKSwgIm5hbiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoMWUzMDAgKiAxZTMwMCAqIDApLCAibmFuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoLTFlMzAwICogMWUzMDAgKiAwKSwgIm5hbiIpCisKKyAgICBkZWYgbm90ZXN0X2Zsb2F0X25hbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE5BTi5pc19uYW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShJTkYuaXNfbmFuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKDAuKS5pc19uYW4oKSkKKworICAgIGRlZiBub3Rlc3RfZmxvYXRfaW5mKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoSU5GLmlzX2luZigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKE5BTi5pc19pbmYoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoMC4pLmlzX2luZigpKQorCisgICAgZGVmIHRlc3RfaGFzaF9pbmYoc2VsZik6CisgICAgICAgICMgdGhlIGFjdHVhbCB2YWx1ZXMgaGVyZSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgYW4KKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGJ1dCB0aGV5IG5lZWQgdG8gYmUKKyAgICAgICAgIyBpZGVudGljYWwgdG8gdGhvc2UgdXNlZCBpbiB0aGUgRGVjaW1hbCBtb2R1bGUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChmbG9hdCgnaW5mJykpLCAzMTQxNTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChmbG9hdCgnLWluZicpKSwgLTI3MTgyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGZsb2F0KCduYW4nKSksIDApCisKKworZnJvbUhleCA9IGZsb2F0LmZyb21oZXgKK3RvSGV4ID0gZmxvYXQuaGV4CitjbGFzcyBIZXhGbG9hdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBNQVggPSBmcm9tSGV4KCcweC5mZmZmZmZmZmZmZmZmOHArMTAyNCcpICAjIG1heCBub3JtYWwKKyAgICBNSU4gPSBmcm9tSGV4KCcweDFwLTEwMjInKSAgICAgICAgICAgICAgICAjIG1pbiBub3JtYWwKKyAgICBUSU5ZID0gZnJvbUhleCgnMHgwLjAwMDAwMDAwMDAwMDFwLTEwMjInKSAjIG1pbiBzdWJub3JtYWwKKyAgICBFUFMgPSBmcm9tSGV4KCcweDAuMDAwMDAwMDAwMDAwMXAwJykgIyBkaWZmIGJldHdlZW4gMS4wIGFuZCBuZXh0IGZsb2F0IHVwCisKKyAgICBkZWYgaWRlbnRpY2FsKHNlbGYsIHgsIHkpOgorICAgICAgICAjIGNoZWNrIHRoYXQgZmxvYXRzIHggYW5kIHkgYXJlIGlkZW50aWNhbCwgb3IgdGhhdCBib3RoCisgICAgICAgICMgYXJlIE5hTnMKKyAgICAgICAgaWYgaXNuYW4oeCkgb3IgaXNuYW4oeSk6CisgICAgICAgICAgICBpZiBpc25hbih4KSA9PSBpc25hbih5KToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiB4ID09IHkgYW5kICh4ICE9IDAuMCBvciBjb3B5c2lnbigxLjAsIHgpID09IGNvcHlzaWduKDEuMCwgeSkpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZmFpbCgnJXIgbm90IGlkZW50aWNhbCB0byAlcicgJSAoeCwgeSkpCisKKyAgICBkZWYgdGVzdF9lbmRzKHNlbGYpOgorICAgICAgICBzZWxmLmlkZW50aWNhbChzZWxmLk1JTiwgbGRleHAoMS4wLCAtMTAyMikpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKHNlbGYuVElOWSwgbGRleHAoMS4wLCAtMTA3NCkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKHNlbGYuRVBTLCBsZGV4cCgxLjAsIC01MikpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKHNlbGYuTUFYLCAyLioobGRleHAoMS4wLCAxMDIzKSAtIGxkZXhwKDEuMCwgOTcwKSkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2lucHV0cyhzZWxmKToKKyAgICAgICAgaW52YWxpZF9pbnB1dHMgPSBbCisgICAgICAgICAgICAnaW5maScsICAgIyBtaXNzcGVsdCBpbmZpbml0aWVzIGFuZCBuYW5zCisgICAgICAgICAgICAnLUluZmluaXQnLAorICAgICAgICAgICAgJysraW5mJywKKyAgICAgICAgICAgICctK0luZicsCisgICAgICAgICAgICAnLS1uYW4nLAorICAgICAgICAgICAgJystTmFOJywKKyAgICAgICAgICAgICdzbmFuJywKKyAgICAgICAgICAgICdOYU5zJywKKyAgICAgICAgICAgICdubmEnLAorICAgICAgICAgICAgJ2FuJywKKyAgICAgICAgICAgICduZicsCisgICAgICAgICAgICAnbmZpbml0eScsCisgICAgICAgICAgICAnaW5pdHknLAorICAgICAgICAgICAgJ2lpbml0eScsCisgICAgICAgICAgICAnMHhuYW4nLAorICAgICAgICAgICAgJycsCisgICAgICAgICAgICAnICcsCisgICAgICAgICAgICAneDEuMHAwJywKKyAgICAgICAgICAgICcweFgxLjBwMCcsCisgICAgICAgICAgICAnKyAweDEuMHAwJywgIyBpbnRlcm5hbCB3aGl0ZXNwYWNlCisgICAgICAgICAgICAnLSAweDEuMHAwJywKKyAgICAgICAgICAgICcwIHgxLjBwMCcsCisgICAgICAgICAgICAnMHggMS4wcDAnLAorICAgICAgICAgICAgJzB4MSAyLjBwMCcsCisgICAgICAgICAgICAnKzB4MSAuMHAwJywKKyAgICAgICAgICAgICcweDEuIDBwMCcsCisgICAgICAgICAgICAnLTB4MS4wIDFwMCcsCisgICAgICAgICAgICAnLTB4MS4wIHAwJywKKyAgICAgICAgICAgICcrMHgxLjBwICswJywKKyAgICAgICAgICAgICcweDEuMHAgLTAnLAorICAgICAgICAgICAgJzB4MS4wcCAwJywKKyAgICAgICAgICAgICcrMHgxLjBwKyAwJywKKyAgICAgICAgICAgICctMHgxLjBwLSAwJywKKyAgICAgICAgICAgICcrKzB4MS4wcC0wJywgIyBkb3VibGUgc2lnbnMKKyAgICAgICAgICAgICctLTB4MS4wcDAnLAorICAgICAgICAgICAgJystMHgxLjBwKzAnLAorICAgICAgICAgICAgJy0rMHgxLjBwMCcsCisgICAgICAgICAgICAnMHgxLjBwKyswJywKKyAgICAgICAgICAgICcrMHgxLjBwKy0wJywKKyAgICAgICAgICAgICctMHgxLjBwLSswJywKKyAgICAgICAgICAgICcweDEuMHAtLTAnLAorICAgICAgICAgICAgJzB4MS4wLnAwJywKKyAgICAgICAgICAgICcweC5wMCcsICMgbm8gaGV4IGRpZ2l0cyBiZWZvcmUgb3IgYWZ0ZXIgcG9pbnQKKyAgICAgICAgICAgICcweDEscDAnLCAjIHdyb25nIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyCisgICAgICAgICAgICAnMHgxcGEnLAorICAgICAgICAgICAgdScweDFwXHVmZjEwJywgICMgZnVsbHdpZHRoIFVuaWNvZGUgZGlnaXRzCisgICAgICAgICAgICB1J1x1ZmYxMHgxcDAnLAorICAgICAgICAgICAgdScweFx1ZmYxMXAwJywKKyAgICAgICAgICAgIHUnMHgxLlx1ZmYxMHAwJywKKyAgICAgICAgICAgICcweDFwMCBcbiAweDJwMCcsCisgICAgICAgICAgICAnMHgxcDBcMCAweDFwMCcsICAjIGVtYmVkZGVkIG51bGwgYnl0ZSBpcyBub3QgZW5kIG9mIHN0cmluZworICAgICAgICAgICAgXQorICAgICAgICBmb3IgeCBpbiBpbnZhbGlkX2lucHV0czoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmcm9tSGV4KHgpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhwZWN0ZWQgZmxvYXQuZnJvbWhleCglcikgdG8gcmFpc2UgVmFsdWVFcnJvcjsgJworICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290ICVyIGluc3RlYWQnICUgKHgsIHJlc3VsdCkpCisKKworICAgIGRlZiB0ZXN0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIHZhbHVlX3BhaXJzID0gWworICAgICAgICAgICAgKCdpbmYnLCBJTkYpLAorICAgICAgICAgICAgKCctSW5maW5pdHknLCAtSU5GKSwKKyAgICAgICAgICAgICgnbmFuJywgTkFOKSwKKyAgICAgICAgICAgICgnMS4wJywgMS4wKSwKKyAgICAgICAgICAgICgnLTB4LjInLCAtMC4xMjUpLAorICAgICAgICAgICAgKCctMC4wJywgLTAuMCkKKyAgICAgICAgICAgIF0KKyAgICAgICAgd2hpdGVzcGFjZSA9IFsKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJyAnLAorICAgICAgICAgICAgJ1x0JywKKyAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAnXG4gXHQnLAorICAgICAgICAgICAgJ1xmJywKKyAgICAgICAgICAgICdcdicsCisgICAgICAgICAgICAnXHInCisgICAgICAgICAgICBdCisgICAgICAgIGZvciBpbnAsIGV4cGVjdGVkIGluIHZhbHVlX3BhaXJzOgorICAgICAgICAgICAgZm9yIGxlYWQgaW4gd2hpdGVzcGFjZToKKyAgICAgICAgICAgICAgICBmb3IgdHJhaWwgaW4gd2hpdGVzcGFjZToKKyAgICAgICAgICAgICAgICAgICAgZ290ID0gZnJvbUhleChsZWFkICsgaW5wICsgdHJhaWwpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaWRlbnRpY2FsKGdvdCwgZXhwZWN0ZWQpCisKKworICAgIGRlZiB0ZXN0X2Zyb21faGV4KHNlbGYpOgorICAgICAgICBNSU4gPSBzZWxmLk1JTjsKKyAgICAgICAgTUFYID0gc2VsZi5NQVg7CisgICAgICAgIFRJTlkgPSBzZWxmLlRJTlk7CisgICAgICAgIEVQUyA9IHNlbGYuRVBTOworCisgICAgICAgICMgdHdvIHNwZWxsaW5ncyBvZiBpbmZpbml0eSwgd2l0aCBvcHRpb25hbCBzaWduczsgY2FzZS1pbnNlbnNpdGl2ZQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCdpbmYnKSwgSU5GKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcrSW5mJyksIElORikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLUlORicpLCAtSU5GKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCdpTmYnKSwgSU5GKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCdJbmZpbml0eScpLCBJTkYpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJytJTkZJTklUWScpLCBJTkYpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy1pbmZpbml0eScpLCAtSU5GKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctaU5GaU5pdFknKSwgLUlORikKKworICAgICAgICAjIG5hbnMgd2l0aCBvcHRpb25hbCBzaWduOyBjYXNlIGluc2Vuc2l0aXZlCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJ25hbicpLCBOQU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJytOYU4nKSwgTkFOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctTmFOJyksIE5BTikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLW5BTicpLCBOQU4pCisKKyAgICAgICAgIyB2YXJpYXRpb25zIGluIGlucHV0IGZvcm1hdAorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcxJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnKzEnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcxLicpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzEuMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzEuMHAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMDEnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwMS4nKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcrMHgxLjAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDFwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMXAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxUDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDFQMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS5wMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweC4xcDQnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweC4xcDA0JyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMXAwMDQnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDFwKzAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDFQLTAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcrMHgxcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAxcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDFwMDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KHUnMHgxcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcgMHgxcDAgJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnXG4gMHgxcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDFwMCBcdCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4YXAwJyksIDEwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4QXAwJyksIDEwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4YVAwJyksIDEwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4QVAwJyksIDEwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4YmVwMCcpLCAxOTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhCZXAwJyksIDE5MC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweGJFcDAnKSwgMTkwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYQkUwUC00JyksIDE5MC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweEJFcDAnKSwgMTkwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4Qi5FcDQnKSwgMTkwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LkJFcDgnKSwgMTkwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LjBCRXAxMicpLCAxOTAuMCkKKworICAgICAgICAjIG1vdmluZyB0aGUgcG9pbnQgYXJvdW5kCisgICAgICAgIHBpID0gZnJvbUhleCgnMHgxLjkyMWZiNTQ0NDJkMThwMScpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LjAwNjQ4N2VkNTExMGI0NnAxMScpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMDBjOTBmZGFhMjIxNjhjcDEwJyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweC4wMTkyMWZiNTQ0NDJkMThwOScpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMDMyNDNmNmE4ODg1YTNwOCcpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMDY0ODdlZDUxMTBiNDZwNycpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMGM5MGZkYWEyMjE2OGNwNicpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMTkyMWZiNTQ0NDJkMThwNScpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMzI0M2Y2YTg4ODVhM3A0JyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweC42NDg3ZWQ1MTEwYjQ2cDMnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LmM5MGZkYWEyMjE2OGNwMicpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjkyMWZiNTQ0NDJkMThwMScpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgzLjI0M2Y2YTg4ODVhM3AwJyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDYuNDg3ZWQ1MTEwYjQ2cC0xJyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweGMuOTBmZGFhMjIxNjhjcC0yJyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDE5LjIxZmI1NDQ0MmQxOHAtMycpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgzMi40M2Y2YTg4ODVhM3AtNCcpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHg2NC44N2VkNTExMGI0NnAtNScpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhjOS4wZmRhYTIyMTY4Y3AtNicpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxOTIuMWZiNTQ0NDJkMThwLTcnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MzI0LjNmNmE4ODg1YTNwLTgnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4NjQ4LjdlZDUxMTBiNDZwLTknKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4YzkwLmZkYWEyMjE2OGNwLTEwJyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDE5MjEuZmI1NDQ0MmQxOHAtMTEnKSwgcGkpCisgICAgICAgICMgLi4uCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MTkyMWZiNTQ0NDJkMS44cC00NycpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgzMjQzZjZhODg4NWEzcC00OCcpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHg2NDg3ZWQ1MTEwYjQ2cC00OScpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhjOTBmZGFhMjIxNjhjcC01MCcpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxOTIxZmI1NDQ0MmQxOHAtNTEnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MzI0M2Y2YTg4ODVhMzBwLTUyJyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDY0ODdlZDUxMTBiNDYwcC01MycpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhjOTBmZGFhMjIxNjhjMHAtNTQnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MTkyMWZiNTQ0NDJkMTgwcC01NScpLCBwaSkKKworCisgICAgICAgICMgcmVzdWx0cyB0aGF0IHNob3VsZCBvdmVyZmxvdy4uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnLTB4MXAxMDI0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJzB4MXArMTAyNScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcrMFgxcDEwMzAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnLTB4MXArMTEwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcwWDFwMTIzNDU2Nzg5MTIzNDU2Nzg5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJyswWC44cCsxMDI1JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJysweDAuOHAxMDI1JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJy0weDAuNHAxMDI2JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJzBYMnArMTAyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcweDIucDEwMjMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnLTB4Mi4wcCsxMDIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJyswWDRwKzEwMjInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnMHgxLmZmZmZmZmZmZmZmZmZmcCsxMDIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJy0wWDEuZmZmZmZmZmZmZmZmZjlwMTAyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcwWDEuZmZmZmZmZmZmZmZmZjhwMTAyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcrMHgzLmZmZmZmZmZmZmZmZmZwMTAyMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcweDNmZmZmZmZmZmZmZmZmcCs5NzAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnMHgxMDAwMDAwMDAwMDAwMDAwMHA5NjAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnLTBYZmZmZmZmZmZmZmZmZmZmZnA5NjAnKQorCisgICAgICAgICMgLi4uYW5kIHRob3NlIHRoYXQgcm91bmQgdG8gKy1tYXggZmxvYXQKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnKzB4MS5mZmZmZmZmZmZmZmZmcCsxMDIzJyksIE1BWCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYMS5mZmZmZmZmZmZmZmZmN3AxMDIzJyksIC1NQVgpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMS5mZmZmZmZmZmZmZmZmN2ZmZmZmZmZmZmZmZmZwMTAyMycpLCBNQVgpCisKKyAgICAgICAgIyB6ZXJvcworICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDBwMCcpLCAwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MHAxMDAwJyksIDAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTB4MHAxMDIzJyksIC0wLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMHAxMDI0JyksIDAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTB4MHAxMDI1JyksIC0wLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMHAyMDAwJyksIDAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwcDEyMzQ1Njc4OTEyMzQ1Njc4OScpLCAwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWDBwLTAnKSwgLTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYMHAtMTAwMCcpLCAtMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDBwLTEwMjMnKSwgMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMFgwcC0xMDI0JyksIC0wLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDBwLTEwMjUnKSwgLTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTB4MHAtMTA3MicpLCAtMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDBwLTEwNzMnKSwgMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHgwcC0xMDc0JyksIC0wLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MHAtMTA3NScpLCAwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMHAtMTA3NicpLCAwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWDBwLTIwMDAnKSwgLTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTB4MHAtMTIzNDU2Nzg5MTIzNDU2Nzg5JyksIC0wLjApCisKKyAgICAgICAgIyB2YWx1ZXMgdGhhdCBzaG91bGQgdW5kZXJmbG93IHRvIDAKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxcC0xMDc1JyksIDAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYMXAtMTA3NScpLCAtMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHgxcC0xMjM0NTY3ODkxMjM0NTY3ODknKSwgLTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDAwMDAxcC0xMDc1JyksIFRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDEuMXAtMTA3NScpLCAtVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLmZmZmZmZmZmZmZmZmZmZmZmcC0xMDc1JyksIFRJTlkpCisKKyAgICAgICAgIyBjaGVjayByb3VuZC1oYWxmLWV2ZW4gaXMgd29ya2luZyBjb3JyZWN0bHkgbmVhciAwIC4uLgorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDFwLTEwNzYnKSwgMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDJwLTEwNzYnKSwgMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDNwLTEwNzYnKSwgVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHg0cC0xMDc2JyksIFRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYNXAtMTA3NicpLCBUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDZwLTEwNzYnKSwgMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDdwLTEwNzYnKSwgMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDhwLTEwNzYnKSwgMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDlwLTEwNzYnKSwgMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweGFwLTEwNzYnKSwgMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWGJwLTEwNzYnKSwgMypUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweGNwLTEwNzYnKSwgMypUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWGRwLTEwNzYnKSwgMypUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWGVwLTEwNzYnKSwgNCpUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweGZwLTEwNzYnKSwgNCpUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEwcC0xMDc2JyksIDQqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTB4MXAtMTA3NicpLCAtMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMFgycC0xMDc2JyksIC0wLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDNwLTEwNzYnKSwgLVRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWDRwLTEwNzYnKSwgLVRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDVwLTEwNzYnKSwgLVRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDZwLTEwNzYnKSwgLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYN3AtMTA3NicpLCAtMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMFg4cC0xMDc2JyksIC0yKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWDlwLTEwNzYnKSwgLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYYXAtMTA3NicpLCAtMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHhicC0xMDc2JyksIC0zKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weGNwLTEwNzYnKSwgLTMqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYZHAtMTA3NicpLCAtMypUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHhlcC0xMDc2JyksIC00KlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWGZwLTEwNzYnKSwgLTQqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYMTBwLTEwNzYnKSwgLTQqVElOWSkKKworICAgICAgICAjIC4uLiBhbmQgbmVhciBNSU4gLi4uCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZkNnAtMTAyMicpLCBNSU4tMypUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZDhwLTEwMjInKSwgTUlOLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmRhcC0xMDIyJyksIE1JTi0yKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZkY3AtMTAyMicpLCBNSU4tMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZGVwLTEwMjInKSwgTUlOLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmUwcC0xMDIyJyksIE1JTi0yKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZlMnAtMTAyMicpLCBNSU4tMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZTRwLTEwMjInKSwgTUlOLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmU2cC0xMDIyJyksIE1JTi0yKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZlOHAtMTAyMicpLCBNSU4tMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZWFwLTEwMjInKSwgTUlOLVRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZlY3AtMTAyMicpLCBNSU4tVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmVlcC0xMDIyJyksIE1JTi1USU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZjBwLTEwMjInKSwgTUlOLVRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZmMnAtMTAyMicpLCBNSU4tVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmY0cC0xMDIyJyksIE1JTi1USU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZjZwLTEwMjInKSwgTUlOLVRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZmOHAtMTAyMicpLCBNSU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZmYXAtMTAyMicpLCBNSU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZmY3AtMTAyMicpLCBNSU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZmZXAtMTAyMicpLCBNSU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwMHAtMTAyMicpLCBNSU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwMnAtMTAyMicpLCBNSU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwNHAtMTAyMicpLCBNSU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwNnAtMTAyMicpLCBNSU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwOHAtMTAyMicpLCBNSU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwYXAtMTAyMicpLCBNSU4rVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDBjcC0xMDIyJyksIE1JTitUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMGVwLTEwMjInKSwgTUlOK1RJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAxMHAtMTAyMicpLCBNSU4rVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDEycC0xMDIyJyksIE1JTitUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMTRwLTEwMjInKSwgTUlOK1RJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAxNnAtMTAyMicpLCBNSU4rVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDE4cC0xMDIyJyksIE1JTisyKlRJTlkpCisKKyAgICAgICAgIyAuLi4gYW5kIG5lYXIgMS4wLgorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZjBwMCcpLCAxLjAtRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZjFwMCcpLCAxLjAtRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDAuZmZmZmZmZmZmZmZmZjJwMCcpLCAxLjAtRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZjNwMCcpLCAxLjAtRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDAuZmZmZmZmZmZmZmZmZjRwMCcpLCAxLjAtRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDAuZmZmZmZmZmZmZmZmZjVwMCcpLCAxLjAtRVBTLzIpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMC5mZmZmZmZmZmZmZmZmNnAwJyksIDEuMC1FUFMvMikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmY3cDAnKSwgMS4wLUVQUy8yKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZjhwMCcpLCAxLjAtRVBTLzIpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMC5mZmZmZmZmZmZmZmZmOXAwJyksIDEuMC1FUFMvMikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgwLmZmZmZmZmZmZmZmZmZhcDAnKSwgMS4wLUVQUy8yKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZmJwMCcpLCAxLjAtRVBTLzIpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMC5mZmZmZmZmZmZmZmZmY3AwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmZkcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDAuZmZmZmZmZmZmZmZmZmVwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZmZnAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDAwcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMDFwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwMnAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDAzcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDRwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMS4wMDAwMDAwMDAwMDAwNXAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDA2cDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMDdwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwN2ZmZmZmZmZmZmZmZmZmZmZmZmZmcDAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDhwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMXAwJyksCisgICAgICAgICAgICAgICAgICAgICAgIDErRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMDlwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMGFwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMGJwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMGNwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMGRwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMGVwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMGZwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMTBwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMTFwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMTJwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMTNwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMTRwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMTVwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMTZwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMTdwMCcpLCAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMTdmZmZmZmZmZmZmZmZmZmZmZmZmZnAwJyksCisgICAgICAgICAgICAgICAgICAgICAgIDEuMCtFUFMpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAxOHAwJyksIDEuMCsyKkVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDE4MDAwMDAwMDAwMDAwMDAwMDAxcDAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgMS4wKzIqRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMTlwMCcpLCAxLjArMipFUFMpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMS4wMDAwMDAwMDAwMDAxYXAwJyksIDEuMCsyKkVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDFicDAnKSwgMS4wKzIqRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMWNwMCcpLCAxLjArMipFUFMpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAxZHAwJyksIDEuMCsyKkVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDFlcDAnKSwgMS4wKzIqRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMWZwMCcpLCAxLjArMipFUFMpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAyMHAwJyksIDEuMCsyKkVQUykKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgZGVmIHJvdW5kdHJpcCh4KToKKyAgICAgICAgICAgIHJldHVybiBmcm9tSGV4KHRvSGV4KHgpKQorCisgICAgICAgIGZvciB4IGluIFtOQU4sIElORiwgc2VsZi5NQVgsIHNlbGYuTUlOLCBzZWxmLk1JTi1zZWxmLlRJTlksIHNlbGYuVElOWSwgMC4wXToKKyAgICAgICAgICAgIHNlbGYuaWRlbnRpY2FsKHgsIHJvdW5kdHJpcCh4KSkKKyAgICAgICAgICAgIHNlbGYuaWRlbnRpY2FsKC14LCByb3VuZHRyaXAoLXgpKQorCisgICAgICAgICMgZnJvbUhleCh0b0hleCh4KSkgc2hvdWxkIGV4YWN0bHkgcmVjb3ZlciB4LCBmb3IgYW55IG5vbi1OYU4gZmxvYXQgeC4KKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwMDApOgorICAgICAgICAgICAgZSA9IHJhbmRvbS5yYW5kcmFuZ2UoLTEyMDAsIDEyMDApCisgICAgICAgICAgICBtID0gcmFuZG9tLnJhbmRvbSgpCisgICAgICAgICAgICBzID0gcmFuZG9tLmNob2ljZShbMS4wLCAtMS4wXSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4ID0gcypsZGV4cChtLCBlKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmlkZW50aWNhbCh4LCBmcm9tSGV4KHRvSGV4KHgpKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgR2VuZXJhbEZsb2F0Q2FzZXMsCisgICAgICAgIEZvcm1hdEZ1bmN0aW9uc1Rlc3RDYXNlLAorICAgICAgICBVbmtub3duRm9ybWF0VGVzdENhc2UsCisgICAgICAgIElFRUVGb3JtYXRUZXN0Q2FzZSwKKyAgICAgICAgUmVwclRlc3RDYXNlLAorICAgICAgICBSb3VuZFRlc3RDYXNlLAorICAgICAgICBJbmZOYW5UZXN0LAorICAgICAgICBIZXhGbG9hdFRlc3RDYXNlLAorICAgICAgICApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ZubWF0Y2gucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mbm1hdGNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZWM1MGQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mbm1hdGNoLnB5CkBAIC0wLDAgKzEsNzIgQEAKKyIiIlRlc3QgY2FzZXMgZm9yIHRoZSBmbm1hdGNoIG1vZHVsZS4iIiIKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gsIGZubWF0Y2hjYXNlLCBfTUFYQ0FDSEUsIF9jYWNoZQorZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoLCBmbm1hdGNoY2FzZSwgX01BWENBQ0hFLCBfY2FjaGUsIF9wdXJnZQorCisKK2NsYXNzIEZubWF0Y2hUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIF9wdXJnZSgpCisKKyAgICBkZWYgY2hlY2tfbWF0Y2goc2VsZiwgZmlsZW5hbWUsIHBhdHRlcm4sIHNob3VsZF9tYXRjaD0xLCBmbj1mbm1hdGNoKToKKyAgICAgICAgaWYgc2hvdWxkX21hdGNoOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZuKGZpbGVuYW1lLCBwYXR0ZXJuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXIgdG8gbWF0Y2ggcGF0dGVybiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgcGF0dGVybikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZuKGZpbGVuYW1lLCBwYXR0ZXJuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXIgbm90IHRvIG1hdGNoIHBhdHRlcm4gJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIHBhdHRlcm4pKQorCisgICAgZGVmIHRlc3RfZm5tYXRjaChzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX21hdGNoCisgICAgICAgIGNoZWNrKCdhYmMnLCAnYWJjJykKKyAgICAgICAgY2hlY2soJ2FiYycsICc/Kj8nKQorICAgICAgICBjaGVjaygnYWJjJywgJz8/PyonKQorICAgICAgICBjaGVjaygnYWJjJywgJyo/Pz8nKQorICAgICAgICBjaGVjaygnYWJjJywgJz8/PycpCisgICAgICAgIGNoZWNrKCdhYmMnLCAnKicpCisgICAgICAgIGNoZWNrKCdhYmMnLCAnYWJbY2RdJykKKyAgICAgICAgY2hlY2soJ2FiYycsICdhYlshZGVdJykKKyAgICAgICAgY2hlY2soJ2FiYycsICdhYltkZV0nLCAwKQorICAgICAgICBjaGVjaygnYScsICc/PycsIDApCisgICAgICAgIGNoZWNrKCdhJywgJ2InLCAwKQorCisgICAgICAgICMgdGhlc2UgdGVzdCB0aGF0ICdcJyBpcyBoYW5kbGVkIGNvcnJlY3RseSBpbiBjaGFyYWN0ZXIgc2V0czsKKyAgICAgICAgIyBzZWUgU0YgYnVnICM0MDk2NTEKKyAgICAgICAgY2hlY2soJ1xcJywgcidbXF0nKQorICAgICAgICBjaGVjaygnYScsIHInWyFcXScpCisgICAgICAgIGNoZWNrKCdcXCcsIHInWyFcXScsIDApCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgZmlsZW5hbWVzIHdpdGggbmV3bGluZXMgaW4gdGhlbSBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTY2NjUKKyAgICAgICAgY2hlY2soJ2Zvb1xuYmFyJywgJ2ZvbyonKQorICAgICAgICBjaGVjaygnZm9vXG5iYXJcbicsICdmb28qJykKKyAgICAgICAgY2hlY2soJ1xuZm9vJywgJ2ZvbyonLCBGYWxzZSkKKyAgICAgICAgY2hlY2soJ1xuJywgJyonKQorCisgICAgZGVmIHRlc3RfZm5tYXRjaGNhc2Uoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19tYXRjaAorICAgICAgICBjaGVjaygnQWJDJywgJ2FiYycsIDAsIGZubWF0Y2hjYXNlKQorICAgICAgICBjaGVjaygnYWJjJywgJ0FiQycsIDAsIGZubWF0Y2hjYXNlKQorCisgICAgZGVmIHRlc3RfY2FjaGVfY2xlYXJpbmcoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBjYWNoZXMgZG8gbm90IGdyb3cgdG9vIGxhcmdlCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc4NDYKKworICAgICAgICAjIHN0cmluZyBwYXR0ZXJuIGNhY2hlCisgICAgICAgIGZvciBpIGluIHJhbmdlKF9NQVhDQUNIRSArIDEpOgorICAgICAgICAgICAgZm5tYXRjaCgnZm9vJywgJz8nICogaSkKKworICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChsZW4oX2NhY2hlKSwgX01BWENBQ0hFKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChGbm1hdGNoVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZm9yazEucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTMwNjY3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKQEAgLTAsMCArMSw3MSBAQAorIiIiVGhpcyB0ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCBmb3JrKCkgYmVoYXZpb3IuCisiIiIKKworaW1wb3J0IGltcAoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuLCBnZXRfYXR0cmlidXRlLCBpbXBvcnRfbW9kdWxlCit0aHJlYWRpbmcgPSBpbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQorCisjU2tpcCB0ZXN0IGlmIGZvcmsgZG9lcyBub3QgZXhpc3QuCitnZXRfYXR0cmlidXRlKG9zLCAnZm9yaycpCisKKworY2xhc3MgRm9ya1Rlc3QoRm9ya1dhaXQpOgorICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICMgd2FpdHBpZCgpIHNob3VsZG4ndCBoYW5nLCBidXQgc29tZSBvZiB0aGUgYnVpbGRib3RzIHNlZW0gdG8gaGFuZworICAgICAgICAgICAgIyBpbiB0aGUgZm9ya2luZyB0ZXN0cy4gIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBmaXggdGhlIHByb2JsZW0uCisgICAgICAgICAgICBzcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKGNwaWQsIG9zLldOT0hBTkcpCisgICAgICAgICAgICBpZiBzcGlkID09IGNwaWQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMS4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BpZCwgY3BpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJjYXVzZSA9ICVkLCBleGl0ID0gJWQiICUgKHN0YXR1cyYweGZmLCBzdGF0dXM+PjgpKQorCisgICAgZGVmIHRlc3RfaW1wb3J0X2xvY2tfZm9yayhzZWxmKToKKyAgICAgICAgaW1wb3J0X3N0YXJ0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBmYWtlX21vZHVsZV9uYW1lID0gImZha2UgdGVzdCBtb2R1bGUiCisgICAgICAgIHBhcnRpYWxfbW9kdWxlID0gInBhcnRpYWwiCisgICAgICAgIGNvbXBsZXRlX21vZHVsZSA9ICJjb21wbGV0ZSIKKyAgICAgICAgZGVmIGltcG9ydGVyKCk6CisgICAgICAgICAgICBpbXAuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW2Zha2VfbW9kdWxlX25hbWVdID0gcGFydGlhbF9tb2R1bGUKKyAgICAgICAgICAgIGltcG9ydF9zdGFydGVkLnNldCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICMgR2l2ZSB0aGUgb3RoZXIgdGhyZWFkIHRpbWUgdG8gdHJ5IGFuZCBhY3F1aXJlLgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbZmFrZV9tb2R1bGVfbmFtZV0gPSBjb21wbGV0ZV9tb2R1bGUKKyAgICAgICAgICAgIGltcC5yZWxlYXNlX2xvY2soKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aW1wb3J0ZXIpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBpbXBvcnRfc3RhcnRlZC53YWl0KCkKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBwaWQ6CisgICAgICAgICAgICAgICAgbSA9IF9faW1wb3J0X18oZmFrZV9tb2R1bGVfbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBtID09IGNvbXBsZXRlX21vZHVsZToKKyAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcy5fZXhpdCgxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgICAgICMgRXhpdGNvZGUgMSBtZWFucyB0aGUgY2hpbGQgZ290IGEgcGFydGlhbCBtb2R1bGUgKGJhZC4pIE5vCisgICAgICAgICAgICAgICAgIyBleGl0Y29kZSAoYnV0IGEgaGFuZywgd2hpY2ggbWFuaWZlc3RzIGFzICdnb3QgcGlkIDAnKQorICAgICAgICAgICAgICAgICMgbWVhbnMgdGhlIGNoaWxkIGRlYWRsb2NrZWQgKGFsc28gYmFkLikKKyAgICAgICAgICAgICAgICBzZWxmLndhaXRfaW1wbChwaWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEZvcmtUZXN0KQorICAgIHJlYXBfY2hpbGRyZW4oKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzMGVmYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQpAQCAtMCwwICsxLDMwNyBAQAoraW1wb3J0IHN5cworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaGF2ZV91bmljb2RlLCBUZXN0RmFpbGVkCitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQgYXMgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworbWF4c2l6ZSA9IHRlc3Rfc3VwcG9ydC5NQVhfUHlfc3NpemVfdAorCisjIHRlc3Qgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0b3IgKEkgYW0gbm90IHN1cmUgaWYgdGhpcyBpcyBiZWluZyB0ZXN0ZWQKKyMgZWxzZXdoZXJlIGJ1dCwgc3VyZWx5LCBzb21lIG9mIHRoZSBnaXZlbiBjYXNlcyBhcmUgKm5vdCogdGVzdGVkIGJlY2F1c2UKKyMgdGhleSBjcmFzaCBweXRob24pCisjIHRlc3Qgb24gdW5pY29kZSBzdHJpbmdzIGFzIHdlbGwKKworZGVmIHRlc3Rmb3JtYXQoZm9ybWF0c3RyLCBhcmdzLCBvdXRwdXQ9Tm9uZSwgbGltaXQ9Tm9uZSwgb3ZlcmZsb3dvaz1GYWxzZSk6CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgcHJpbnQgIiVzICUlICVzID0/ICVzIC4uLiIgJVwKKyAgICAgICAgICAgICAgICAocmVwcihmb3JtYXRzdHIpLCByZXByKGFyZ3MpLCByZXByKG91dHB1dCkpLAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIiVzICUlICVzIHdvcmtzPyAuLi4iICUgKHJlcHIoZm9ybWF0c3RyKSwgcmVwcihhcmdzKSksCisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBmb3JtYXRzdHIgJSBhcmdzCisgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgIGlmIG5vdCBvdmVyZmxvd29rOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdvdmVyZmxvdyAodGhpcyBpcyBmaW5lKScKKyAgICBlbHNlOgorICAgICAgICBpZiBvdXRwdXQgYW5kIGxpbWl0IGlzIE5vbmUgYW5kIHJlc3VsdCAhPSBvdXRwdXQ6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICdubycKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlciAlJSAlciA9PSAlciAhPSAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0c3RyLCBhcmdzLCByZXN1bHQsIG91dHB1dCkpCisgICAgICAgICMgd2hlbiAnbGltaXQnIGlzIHNwZWNpZmllZCwgaXQgZGV0ZXJtaW5lcyBob3cgbWFueSBjaGFyYWN0ZXJzCisgICAgICAgICMgbXVzdCBtYXRjaCBleGFjdGx5OyBsZW5ndGhzIG11c3QgYWx3YXlzIG1hdGNoLgorICAgICAgICAjIGV4OiBsaW1pdD01LCAnMTIzNDU2NzgnIG1hdGNoZXMgJzEyMzQ1X19fJworICAgICAgICAjIChtYWlubHkgZm9yIGZsb2F0aW5nIHBvaW50IGZvcm1hdCB0ZXN0cyBmb3Igd2hpY2ggYW4gZXhhY3QgbWF0Y2gKKyAgICAgICAgIyBjYW4ndCBiZSBndWFyYW50ZWVkIGR1ZSB0byByb3VuZGluZyBhbmQgcmVwcmVzZW50YXRpb24gZXJyb3JzKQorICAgICAgICBlbGlmIG91dHB1dCBhbmQgbGltaXQgaXMgbm90IE5vbmUgYW5kICgKKyAgICAgICAgICAgICAgICBsZW4ocmVzdWx0KSE9bGVuKG91dHB1dCkgb3IgcmVzdWx0WzpsaW1pdF0hPW91dHB1dFs6bGltaXRdKToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ25vJworICAgICAgICAgICAgcHJpbnQgIiVzICUlICVzID09ICVzICE9ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgIChyZXByKGZvcm1hdHN0ciksIHJlcHIoYXJncyksIHJlcHIocmVzdWx0KSwgcmVwcihvdXRwdXQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAneWVzJworCisKK2RlZiB0ZXN0Ym90aChmb3JtYXRzdHIsICphcmdzLCAqKmt3YXJncyk6CisgICAgdGVzdGZvcm1hdChmb3JtYXRzdHIsICphcmdzLCAqKmt3YXJncykKKyAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgIHRlc3Rmb3JtYXQodW5pY29kZShmb3JtYXRzdHIpLCAqYXJncywgKiprd2FyZ3MpCisKKworY2xhc3MgRm9ybWF0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICB0ZXN0Ym90aCgiJS4xZCIsICgxLCksICIxIikKKyAgICAgICAgdGVzdGJvdGgoIiUuKmQiLCAoc3lzLm1heGludCwxKSwgb3ZlcmZsb3dvaz1UcnVlKSAgIyBleHBlY3Qgb3ZlcmZsb3cKKyAgICAgICAgdGVzdGJvdGgoIiUuMTAwZCIsICgxLCksICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAxJywgb3ZlcmZsb3dvaz1UcnVlKQorICAgICAgICB0ZXN0Ym90aCgiJSMuMTE3eCIsICgxLCksICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgICAgICAgICAgICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgICAgICAgICAgICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsCisgICAgICAgICAgICAgICAgIG92ZXJmbG93b2s9VHJ1ZSkKKyAgICAgICAgdGVzdGJvdGgoIiUjLjExOHgiLCAoMSwpLCAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJywKKyAgICAgICAgICAgICAgICAgb3ZlcmZsb3dvaz1UcnVlKQorCisgICAgICAgIHRlc3Rib3RoKCIlZiIsICgxLjAsKSwgIjEuMDAwMDAwIikKKyAgICAgICAgIyB0aGVzZSBhcmUgdHJ5aW5nIHRvIHRlc3QgdGhlIGxpbWl0cyBvZiB0aGUgaW50ZXJuYWwgbWFnaWMtbnVtYmVyLWxlbmd0aAorICAgICAgICAjIGZvcm1hdHRpbmcgYnVmZmVyLCBpZiB0aGF0IG51bWJlciBjaGFuZ2VzIHRoZW4gdGhlc2UgdGVzdHMgYXJlIGxlc3MKKyAgICAgICAgIyBlZmZlY3RpdmUKKyAgICAgICAgdGVzdGJvdGgoIiUjLipnIiwgKDEwOSwgLTEuZSs0OS8zLikpCisgICAgICAgIHRlc3Rib3RoKCIlIy4qZyIsICgxMTAsIC0xLmUrNDkvMy4pKQorICAgICAgICB0ZXN0Ym90aCgiJSMuKmciLCAoMTEwLCAtMS5lKzEwMC8zLikpCisKKyAgICAgICAgIyB0ZXN0IHNvbWUgcmlkaWN1bG91c2x5IGxhcmdlIHByZWNpc2lvbiwgZXhwZWN0IG92ZXJmbG93CisgICAgICAgIHRlc3Rib3RoKCclMTIuKmYnLCAoMTIzNDU2LCAxLjApKQorCisgICAgICAgICMgY2hlY2sgZm9yIGludGVybmFsIG92ZXJmbG93IHZhbGlkYXRpb24gb24gbGVuZ3RoIG9mIHByZWNpc2lvbgorICAgICAgICAjIHRoZXNlIHRlc3RzIHNob3VsZCBubyBsb25nZXIgY2F1c2Ugb3ZlcmZsb3cgaW4gUHl0aG9uCisgICAgICAgICMgMi43LzMuMSBhbmQgbGF0ZXIuCisgICAgICAgIHRlc3Rib3RoKCIlIy4qZyIsICgxMTAsIC0xLmUrMTAwLzMuKSkKKyAgICAgICAgdGVzdGJvdGgoIiUjLipHIiwgKDExMCwgLTEuZSsxMDAvMy4pKQorICAgICAgICB0ZXN0Ym90aCgiJSMuKmYiLCAoMTEwLCAtMS5lKzEwMC8zLikpCisgICAgICAgIHRlc3Rib3RoKCIlIy4qRiIsICgxMTAsIC0xLmUrMTAwLzMuKSkKKworICAgICAgICAjIEZvcm1hdHRpbmcgb2YgbG9uZyBpbnRlZ2Vycy4gT3ZlcmZsb3cgaXMgbm90IG9rCisgICAgICAgIHRlc3Rib3RoKCIleCIsIDEwTCwgImEiKQorICAgICAgICB0ZXN0Ym90aCgiJXgiLCAxMDAwMDAwMDAwMDBMLCAiMTc0ODc2ZTgwMCIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIDEwTCwgIjEyIikKKyAgICAgICAgdGVzdGJvdGgoIiVvIiwgMTAwMDAwMDAwMDAwTCwgIjEzNTEwMzU1NjQwMDAiKQorICAgICAgICB0ZXN0Ym90aCgiJWQiLCAxMEwsICIxMCIpCisgICAgICAgIHRlc3Rib3RoKCIlZCIsIDEwMDAwMDAwMDAwMEwsICIxMDAwMDAwMDAwMDAiKQorCisgICAgICAgIGJpZyA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MEwKKyAgICAgICAgdGVzdGJvdGgoIiVkIiwgYmlnLCAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiVkIiwgLWJpZywgIi0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Ym90aCgiJTVkIiwgLWJpZywgIi0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Ym90aCgiJTMxZCIsIC1iaWcsICItMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUzMmQiLCAtYmlnLCAiIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Ym90aCgiJS0zMmQiLCAtYmlnLCAiLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCAiKQorICAgICAgICB0ZXN0Ym90aCgiJTAzMmQiLCAtYmlnLCAiLTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Ym90aCgiJS0wMzJkIiwgLWJpZywgIi0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgIikKKyAgICAgICAgdGVzdGJvdGgoIiUwMzRkIiwgLWJpZywgIi0wMDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Ym90aCgiJTAzNGQiLCBiaWcsICIwMDAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUwKzM0ZCIsIGJpZywgIiswMDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Ym90aCgiJSszNGQiLCBiaWcsICIgICArMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUzNGQiLCBiaWcsICIgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUuMmQiLCBiaWcsICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Ym90aCgiJS4zMGQiLCBiaWcsICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Ym90aCgiJS4zMWQiLCBiaWcsICIwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUzMi4zMWQiLCBiaWcsICIgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCisgICAgICAgIHRlc3Rib3RoKCIlZCIsIGZsb2F0KGJpZyksICIxMjM0NTZfX19fX19fX19fX19fX19fX19fX19fX18iLCA2KQorCisgICAgICAgIGJpZyA9IDB4MTIzNDU2Nzg5MGFiY2RlZjEyMzQ1TCAgIyAyMSBoZXggZGlnaXRzCisgICAgICAgIHRlc3Rib3RoKCIleCIsIGJpZywgIjEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIleCIsIC1iaWcsICItMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiU1eCIsIC1iaWcsICItMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUyMngiLCAtYmlnLCAiLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlMjN4IiwgLWJpZywgIiAtMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUtMjN4IiwgLWJpZywgIi0xMjM0NTY3ODkwYWJjZGVmMTIzNDUgIikKKyAgICAgICAgdGVzdGJvdGgoIiUwMjN4IiwgLWJpZywgIi0wMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUtMDIzeCIsIC1iaWcsICItMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1ICIpCisgICAgICAgIHRlc3Rib3RoKCIlMDI1eCIsIC1iaWcsICItMDAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUwMjV4IiwgYmlnLCAiMDAwMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlMCsyNXgiLCBiaWcsICIrMDAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUrMjV4IiwgYmlnLCAiICAgKzEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlMjV4IiwgYmlnLCAiICAgIDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlLjJ4IiwgYmlnLCAiMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUuMjF4IiwgYmlnLCAiMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUuMjJ4IiwgYmlnLCAiMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlMjMuMjJ4IiwgYmlnLCAiIDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJS0yMy4yMngiLCBiaWcsICIwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1ICIpCisgICAgICAgIHRlc3Rib3RoKCIlWCIsIGJpZywgIjEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlI1giLCBiaWcsICIwWDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlI3giLCBiaWcsICIweDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlI3giLCAtYmlnLCAiLTB4MTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUjLjIzeCIsIC1iaWcsICItMHgwMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlIysuMjN4IiwgYmlnLCAiKzB4MDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJSMgLjIzeCIsIGJpZywgIiAweDAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUjKy4yM1giLCBiaWcsICIrMFgwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlIy0rLjIzWCIsIGJpZywgIiswWDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUjLSsyNi4yM1giLCBiaWcsICIrMFgwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlIy0rMjcuMjNYIiwgYmlnLCAiKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUgIikKKyAgICAgICAgdGVzdGJvdGgoIiUjKzI3LjIzWCIsIGJpZywgIiArMFgwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCisgICAgICAgICMgbmV4dCBvbmUgZ2V0cyB0d28gbGVhZGluZyB6ZXJvZXMgZnJvbSBwcmVjaXNpb24sIGFuZCBhbm90aGVyIGZyb20gdGhlCisgICAgICAgICMgMCBmbGFnIGFuZCB0aGUgd2lkdGgKKyAgICAgICAgdGVzdGJvdGgoIiUjKzAyNy4yM1giLCBiaWcsICIrMFgwMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQorICAgICAgICAjIHNhbWUsIGV4Y2VwdCBubyAwIGZsYWcKKyAgICAgICAgdGVzdGJvdGgoIiUjKzI3LjIzWCIsIGJpZywgIiArMFgwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIleCIsIGZsb2F0KGJpZyksICIxMjM0NTZfX19fX19fX19fX19fX18iLCA2KQorCisgICAgICAgIGJpZyA9IDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MEwgICMgMzIgb2N0YWwgZGlnaXRzCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIGJpZywgIjEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiVvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlNW8iLCAtYmlnLCAiLTEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUzM28iLCAtYmlnLCAiLTEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUzNG8iLCAtYmlnLCAiIC0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlLTM0byIsIC1iaWcsICItMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAgIikKKyAgICAgICAgdGVzdGJvdGgoIiUwMzRvIiwgLWJpZywgIi0wMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJS0wMzRvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCAiKQorICAgICAgICB0ZXN0Ym90aCgiJTAzNm8iLCAtYmlnLCAiLTAwMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUwMzZvIiwgYmlnLCAiMDAwMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUwKzM2byIsIGJpZywgIiswMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlKzM2byIsIGJpZywgIiAgICsxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMzZvIiwgYmlnLCAiICAgIDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUuMm8iLCBiaWcsICIxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlLjMybyIsIGJpZywgIjEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUuMzNvIiwgYmlnLCAiMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUzNC4zM28iLCBiaWcsICIgMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUtMzQuMzNvIiwgYmlnLCAiMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwICIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIGJpZywgIjEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUjbyIsIGJpZywgIjAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlI28iLCAtYmlnLCAiLTAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlIy4zNG8iLCAtYmlnLCAiLTAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJSMrLjM0byIsIGJpZywgIiswMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUjIC4zNG8iLCBiaWcsICIgMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlIysuMzRvIiwgYmlnLCAiKzAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJSMtKy4zNG8iLCBiaWcsICIrMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlIy0rMzcuMzRvIiwgYmlnLCAiKzAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAgICIpCisgICAgICAgIHRlc3Rib3RoKCIlIyszNy4zNG8iLCBiaWcsICIgICswMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgIyBuZXh0IG9uZSBnZXRzIG9uZSBsZWFkaW5nIHplcm8gZnJvbSBwcmVjaXNpb24KKyAgICAgICAgdGVzdGJvdGgoIiUuMzNvIiwgYmlnLCAiMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgIyBiYXNlIG1hcmtlciBzaG91bGRuJ3QgY2hhbmdlIHRoYXQsIHNpbmNlICIwIiBpcyByZWR1bmRhbnQKKyAgICAgICAgdGVzdGJvdGgoIiUjLjMzbyIsIGJpZywgIjAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgICMgYnV0IHJlZHVjZSBwcmVjaXNpb24sIGFuZCBiYXNlIG1hcmtlciBzaG91bGQgYWRkIGEgemVybworICAgICAgICB0ZXN0Ym90aCgiJSMuMzJvIiwgYmlnLCAiMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgIyBvbmUgbGVhZGluZyB6ZXJvIGZyb20gcHJlY2lzaW9uLCBhbmQgYW5vdGhlciBmcm9tICIwIiBmbGFnICYgd2lkdGgKKyAgICAgICAgdGVzdGJvdGgoIiUwMzQuMzNvIiwgYmlnLCAiMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgICMgYmFzZSBtYXJrZXIgc2hvdWxkbid0IGNoYW5nZSB0aGF0CisgICAgICAgIHRlc3Rib3RoKCIlMCMzNC4zM28iLCBiaWcsICIwMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiVvIiwgZmxvYXQoYmlnKSwgIjEyMzQ1Nl9fX19fX19fX19fX19fX19fX19fX19fX19fIiwgNikKKworICAgICAgICAjIFNvbWUgc21hbGwgaW50cywgaW4gYm90aCBQeXRob24gaW50IGFuZCBsb25nIGZsYXZvcnMpLgorICAgICAgICB0ZXN0Ym90aCgiJWQiLCA0MiwgIjQyIikKKyAgICAgICAgdGVzdGJvdGgoIiVkIiwgLTQyLCAiLTQyIikKKyAgICAgICAgdGVzdGJvdGgoIiVkIiwgNDJMLCAiNDIiKQorICAgICAgICB0ZXN0Ym90aCgiJWQiLCAtNDJMLCAiLTQyIikKKyAgICAgICAgdGVzdGJvdGgoIiVkIiwgNDIuMCwgIjQyIikKKyAgICAgICAgdGVzdGJvdGgoIiUjeCIsIDEsICIweDEiKQorICAgICAgICB0ZXN0Ym90aCgiJSN4IiwgMUwsICIweDEiKQorICAgICAgICB0ZXN0Ym90aCgiJSNYIiwgMSwgIjBYMSIpCisgICAgICAgIHRlc3Rib3RoKCIlI1giLCAxTCwgIjBYMSIpCisgICAgICAgIHRlc3Rib3RoKCIlI3giLCAxLjAsICIweDEiKQorICAgICAgICB0ZXN0Ym90aCgiJSNvIiwgMSwgIjAxIikKKyAgICAgICAgdGVzdGJvdGgoIiUjbyIsIDFMLCAiMDEiKQorICAgICAgICB0ZXN0Ym90aCgiJSNvIiwgMCwgIjAiKQorICAgICAgICB0ZXN0Ym90aCgiJSNvIiwgMEwsICIwIikKKyAgICAgICAgdGVzdGJvdGgoIiVvIiwgMCwgIjAiKQorICAgICAgICB0ZXN0Ym90aCgiJW8iLCAwTCwgIjAiKQorICAgICAgICB0ZXN0Ym90aCgiJWQiLCAwLCAiMCIpCisgICAgICAgIHRlc3Rib3RoKCIlZCIsIDBMLCAiMCIpCisgICAgICAgIHRlc3Rib3RoKCIlI3giLCAwLCAiMHgwIikKKyAgICAgICAgdGVzdGJvdGgoIiUjeCIsIDBMLCAiMHgwIikKKyAgICAgICAgdGVzdGJvdGgoIiUjWCIsIDAsICIwWDAiKQorICAgICAgICB0ZXN0Ym90aCgiJSNYIiwgMEwsICIwWDAiKQorCisgICAgICAgIHRlc3Rib3RoKCIleCIsIDB4NDIsICI0MiIpCisgICAgICAgIHRlc3Rib3RoKCIleCIsIC0weDQyLCAiLTQyIikKKyAgICAgICAgdGVzdGJvdGgoIiV4IiwgMHg0MkwsICI0MiIpCisgICAgICAgIHRlc3Rib3RoKCIleCIsIC0weDQyTCwgIi00MiIpCisgICAgICAgIHRlc3Rib3RoKCIleCIsIGZsb2F0KDB4NDIpLCAiNDIiKQorCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIDA0MiwgIjQyIikKKyAgICAgICAgdGVzdGJvdGgoIiVvIiwgLTA0MiwgIi00MiIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIDA0MkwsICI0MiIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIC0wNDJMLCAiLTQyIikKKyAgICAgICAgdGVzdGJvdGgoIiVvIiwgZmxvYXQoMDQyKSwgIjQyIikKKworICAgICAgICAjIGFsdGVybmF0ZSBmbG9hdCBmb3JtYXR0aW5nCisgICAgICAgIHRlc3Rmb3JtYXQoJyVnJywgMS4xLCAnMS4xJykKKyAgICAgICAgdGVzdGZvcm1hdCgnJSNnJywgMS4xLCAnMS4xMDAwMCcpCisKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTUxNi4KKyAgICAgICAgY2xhc3MgSW50RmFpbHMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQKKyAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIGZzdCA9IEludEZhaWxzKCkKKyAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCBmc3QsICcwJykKKworICAgICAgICAjIFRlc3QgZXhjZXB0aW9uIGZvciB1bmtub3duIGZvcm1hdCBjaGFyYWN0ZXJzCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnVGVzdGluZyBleGNlcHRpb25zJworCisgICAgICAgIGRlZiB0ZXN0X2V4Yyhmb3JtYXRzdHIsIGFyZ3MsIGV4Y2VwdGlvbiwgZXhjbXNnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0Zm9ybWF0KGZvcm1hdHN0ciwgYXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBleGNlcHRpb24sIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBzdHIoZXhjKSA9PSBleGNtc2c6CisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAieWVzIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICdubycKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ1VuZXhwZWN0ZWQgJywgZXhjZXB0aW9uLCAnOicsIHJlcHIoc3RyKGV4YykpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgJ25vJworICAgICAgICAgICAgICAgIHByaW50ICdVbmV4cGVjdGVkIGV4Y2VwdGlvbicKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCAnZGlkIG5vdCBnZXQgZXhwZWN0ZWQgZXhjZXB0aW9uOiAlcycgJSBleGNtc2cKKworICAgICAgICB0ZXN0X2V4YygnYWJjICVhJywgMSwgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXIgJ2EnICgweDYxKSBhdCBpbmRleCA1IikKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgdGVzdF9leGModW5pY29kZSgnYWJjICVcdTMwMDAnLCdyYXctdW5pY29kZS1lc2NhcGUnKSwgMSwgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICc/JyAoMHgzMDAwKSBhdCBpbmRleCA1IikKKworICAgICAgICB0ZXN0X2V4YygnJWQnLCAnMScsIFR5cGVFcnJvciwgIiVkIGZvcm1hdDogYSBudW1iZXIgaXMgcmVxdWlyZWQsIG5vdCBzdHIiKQorICAgICAgICB0ZXN0X2V4YygnJWcnLCAnMScsIFR5cGVFcnJvciwgImZsb2F0IGFyZ3VtZW50IHJlcXVpcmVkLCBub3Qgc3RyIikKKyAgICAgICAgdGVzdF9leGMoJ25vIGZvcm1hdCcsICcxJywgVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBzdHJpbmcgZm9ybWF0dGluZyIpCisgICAgICAgIHRlc3RfZXhjKCdubyBmb3JtYXQnLCB1JzEnLCBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIHN0cmluZyBmb3JtYXR0aW5nIikKKyAgICAgICAgdGVzdF9leGModSdubyBmb3JtYXQnLCAnMScsIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKQorICAgICAgICB0ZXN0X2V4Yyh1J25vIGZvcm1hdCcsIHUnMScsIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKQorCisgICAgICAgIGNsYXNzIEZvb2Jhcihsb25nKToKKyAgICAgICAgICAgIGRlZiBfX29jdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgUmV0dXJuaW5nIGEgbm9uLXN0cmluZyBzaG91bGQgbm90IGJsb3cgdXAuCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgKyAxCisKKyAgICAgICAgdGVzdF9leGMoJyVvJywgRm9vYmFyKCksIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCwgbG9uZyBmb3VuZCIpCisKKyAgICAgICAgaWYgbWF4c2l6ZSA9PSAyKiozMS0xOgorICAgICAgICAgICAgIyBjcmFzaGVzIDIuMi4xIGFuZCBlYXJsaWVyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICIlKmQiJShtYXhzaXplLCAtMTI3KQorICAgICAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgJyIlKmQiJShtYXhzaXplLCAtMTI3KSBzaG91bGQgZmFpbCcKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRm9ybWF0VGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnBmb3JtYXQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mcGZvcm1hdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmRlM2IwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnBmb3JtYXQucHkKQEAgLTAsMCArMSw3NiBAQAorJycnCisgICBUZXN0cyBmb3IgZnBmb3JtYXQgbW9kdWxlCisgICBOaWNrIE1hdGhld3NvbgorJycnCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCB1bml0dGVzdAorZnBmb3JtYXQgPSBpbXBvcnRfbW9kdWxlKCdmcGZvcm1hdCcsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2ZpeCwgc2NpLCBOb3RBTnVtYmVyID0gZnBmb3JtYXQuZml4LCBmcGZvcm1hdC5zY2ksIGZwZm9ybWF0Lk5vdEFOdW1iZXIKKworU3RyaW5nVHlwZSA9IHR5cGUoJycpCisKKyMgVGVzdCB0aGUgb2xkIGFuZCBvYnNvbGVzY2VudCBmcGZvcm1hdCBtb2R1bGUuCisjCisjIChJdCdzIG9ic29sZXNjZW50IGJlY2F1c2UgZml4KG4sZCkgPT0gIiUuKmYiJShkLG4pIGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaShuLGQpID09ICIlLiplIiUoZCxuKQorIyAgZm9yIGFsbCByZWFzb25hYmxlIG51bWVyaWMgbiBhbmQgZCwgZXhjZXB0IHRoYXQgc2NpIGdpdmVzIDMgZXhwb25lbnQKKyMgIGRpZ2l0cyBpbnN0ZWFkIG9mIDIuCisjCisjIERpZmZlcmVuY2VzIG9ubHkgb2NjdXIgZm9yIHVucmVhc29uYWJsZSBuIGFuZCBkLiAgICA8LjIgd2luaz4pCisKK2NsYXNzIEZwZm9ybWF0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tGaXgoc2VsZiwgbiwgZGlnaXRzKToKKyAgICAgICAgcmVzdWx0ID0gZml4KG4sIGRpZ2l0cykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuLCBTdHJpbmdUeXBlKToKKyAgICAgICAgICAgIG4gPSByZXByKG4pCisgICAgICAgIGV4cGVjdGVkID0gIiUuKmYiICUgKGRpZ2l0cywgZmxvYXQobikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgZGVmIGNoZWNrU2NpKHNlbGYsIG4sIGRpZ2l0cyk6CisgICAgICAgIHJlc3VsdCA9IHNjaShuLCBkaWdpdHMpCisgICAgICAgIGlmIGlzaW5zdGFuY2UobiwgU3RyaW5nVHlwZSk6CisgICAgICAgICAgICBuID0gcmVwcihuKQorICAgICAgICBleHBlY3RlZCA9ICIlLiplIiAlIChkaWdpdHMsIGZsb2F0KG4pKQorICAgICAgICAjIGFkZCB0aGUgZXh0cmEgMCBpZiBuZWVkZWQKKyAgICAgICAgbnVtLCBleHAgPSBleHBlY3RlZC5zcGxpdCgiZSIpCisgICAgICAgIGlmIGxlbihleHApIDwgNDoKKyAgICAgICAgICAgIGV4cCA9IGV4cFswXSArICIwIiArIGV4cFsxOl0KKyAgICAgICAgZXhwZWN0ZWQgPSAiJXNlJXMiICUgKG51bSwgZXhwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2Nhc2VzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeCgxMDAuMC8zLCAzKSwgJzMzLjMzMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2NpKDEwMC4wLzMsIDMpLCAnMy4zMzNlKzAwMScpCisKKyAgICBkZWYgdGVzdF9yZWFzb25hYmxlX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZm9yIGQgaW4gcmFuZ2UoNyk6CisgICAgICAgICAgICBmb3IgdmFsIGluICgxMDAwLjAvMywgMTAwMCwgMTAwMC4wLCAuMDAyLCAxLjAvMywgMWUxMCk6CisgICAgICAgICAgICAgICAgZm9yIHJlYWxWYWwgaW4gKHZhbCwgMS4wL3ZhbCwgLXZhbCwgLTEuMC92YWwpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRml4KHJlYWxWYWwsIGQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tTY2kocmVhbFZhbCwgZCkKKworICAgIGRlZiB0ZXN0X2ZhaWxpbmdfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIE5vdyBmb3IgJ3VucmVhc29uYWJsZSBuIGFuZCBkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeCgxLjAsIDEwMDApLCAnMS4nKygnMCcqMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2NpKCIxIisoJzAnKjEwMDApLCAwKSwgJzFlKzEwMDAnKQorCisgICAgICAgICMgVGhpcyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQuICBzY2kgcmFpc2VzIGFuIGV4Y2VwdGlvbjsgZml4IGRvZXNuJ3QuCisgICAgICAgIHlhY2h0ID0gIlRocm9hdHdvYmJsZXIgTWFuZ3JvdmUiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4KHlhY2h0LCAxMCksIHlhY2h0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzY2koeWFjaHQsIDEwKQorICAgICAgICBleGNlcHQgTm90QU51bWJlcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIG9uIG5vbi1udW1lcmljIHNjaSIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChGcGZvcm1hdFRlc3QpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDliYjAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkKQEAgLTAsMCArMSw2MDUgQEAKKyIiIlRlc3RzIGZvciBMaWIvZnJhY3Rpb25zLnB5LiIiIgorCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAoraW1wb3J0IG1hdGgKK2ltcG9ydCBudW1iZXJzCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBmcmFjdGlvbnMKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb3B5IGltcG9ydCBjb3B5LCBkZWVwY29weQorZnJvbSBjUGlja2xlIGltcG9ydCBkdW1wcywgbG9hZHMKK0YgPSBmcmFjdGlvbnMuRnJhY3Rpb24KK2djZCA9IGZyYWN0aW9ucy5nY2QKKworIyBkZWNvcmF0b3IgZm9yIHNraXBwaW5nIHRlc3RzIG9uIG5vbi1JRUVFIDc1NCBwbGF0Zm9ybXMKK3JlcXVpcmVzX0lFRUVfNzU0ID0gdW5pdHRlc3Quc2tpcFVubGVzcygKKyAgICBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisKK2NsYXNzIER1bW15RmxvYXQob2JqZWN0KToKKyAgICAiIiJEdW1teSBmbG9hdCBjbGFzcyBmb3IgdGVzdGluZyBjb21wYXJpc29ucyB3aXRoIEZyYWN0aW9ucyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRHVtbXlGbG9hdCBjYW4gb25seSBiZSBpbml0aWFsaXplZCBmcm9tIGZsb2F0IikKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyAgICBkZWYgX3JpY2hjbXAoc2VsZiwgb3RoZXIsIG9wKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgbnVtYmVycy5SYXRpb25hbCk6CisgICAgICAgICAgICByZXR1cm4gb3AoRi5mcm9tX2Zsb2F0KHNlbGYudmFsdWUpLCBvdGhlcikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG90aGVyLCBEdW1teUZsb2F0KToKKyAgICAgICAgICAgIHJldHVybiBvcChzZWxmLnZhbHVlLCBvdGhlci52YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLl9yaWNoY21wKG90aGVyLCBvcGVyYXRvci5lcSkKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKTogcmV0dXJuIHNlbGYuX3JpY2hjbXAob3RoZXIsIG9wZXJhdG9yLmxlKQorICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOiByZXR1cm4gc2VsZi5fcmljaGNtcChvdGhlciwgb3BlcmF0b3IubHQpCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLl9yaWNoY21wKG90aGVyLCBvcGVyYXRvci5nZSkKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKTogcmV0dXJuIHNlbGYuX3JpY2hjbXAob3RoZXIsIG9wZXJhdG9yLmd0KQorCisgICAgIyBzaG91bGRuJ3QgYmUgY2FsbGluZyBfX2Zsb2F0X18gYXQgYWxsIHdoZW4gZG9pbmcgY29tcGFyaXNvbnMKKyAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICBhc3NlcnQgRmFsc2UsICJfX2Zsb2F0X18gc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wYXJpc29ucyIKKworICAgICMgc2FtZSBnb2VzIGZvciBzdWJ0cmFjdGlvbgorICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiX19zdWJfXyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBhcmlzb25zIgorICAgIF9fcnN1Yl9fID0gX19zdWJfXworCisgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgIF9faGFzaF9fID0gTm9uZQorCisKK2NsYXNzIER1bW15UmF0aW9uYWwob2JqZWN0KToKKyAgICAiIiJUZXN0IGNvbXBhcmlzb24gb2YgRnJhY3Rpb24gd2l0aCBhIG5haXZlIHJhdGlvbmFsIGltcGxlbWVudGF0aW9uLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bSwgZGVuKToKKyAgICAgICAgZyA9IGdjZChudW0sIGRlbikKKyAgICAgICAgc2VsZi5udW0gPSBudW0gLy8gZworICAgICAgICBzZWxmLmRlbiA9IGRlbiAvLyBnCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZnJhY3Rpb25zLkZyYWN0aW9uKToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5udW0gPT0gb3RoZXIuX251bWVyYXRvciBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kZW4gPT0gb3RoZXIuX2Rlbm9taW5hdG9yKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuKHNlbGYubnVtICogb3RoZXIuX2Rlbm9taW5hdG9yIDwgc2VsZi5kZW4gKiBvdGhlci5fbnVtZXJhdG9yKQorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybihzZWxmLm51bSAqIG90aGVyLl9kZW5vbWluYXRvciA+IHNlbGYuZGVuICogb3RoZXIuX251bWVyYXRvcikKKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4oc2VsZi5udW0gKiBvdGhlci5fZGVub21pbmF0b3IgPD0gc2VsZi5kZW4gKiBvdGhlci5fbnVtZXJhdG9yKQorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybihzZWxmLm51bSAqIG90aGVyLl9kZW5vbWluYXRvciA+PSBzZWxmLmRlbiAqIG90aGVyLl9udW1lcmF0b3IpCisKKyAgICAjIHRoaXMgY2xhc3MgaXMgZm9yIHRlc3RpbmcgY29tcGFyaXNvbnM7IGNvbnZlcnNpb24gdG8gZmxvYXQKKyAgICAjIHNob3VsZCBuZXZlciBiZSB1c2VkIGZvciBhIGNvbXBhcmlzb24sIHNpbmNlIGl0IGxvc2VzIGFjY3VyYWN5CisgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiX19mbG9hdF9fIHNob3VsZCBub3QgYmUgaW52b2tlZCIKKworICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworCitjbGFzcyBEdW1teUZyYWN0aW9uKGZyYWN0aW9ucy5GcmFjdGlvbik6CisgICAgIiIiRHVtbXkgRnJhY3Rpb24gc3ViY2xhc3MgZm9yIGNvcHkgYW5kIGRlZXBjb3B5IHRlc3RpbmcuIiIiCisKK2NsYXNzIEdjZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RNaXNjKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdjZCgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIGdjZCgtMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2NkKDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBnY2QoMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdjZCg3LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgZ2NkKDcsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoLTIzLCAxNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTIsIGdjZCgxMjAsIDg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMTIsIGdjZCg4NCwgLTEyMCkpCisKKworZGVmIF9jb21wb25lbnRzKHIpOgorICAgIHJldHVybiAoci5udW1lcmF0b3IsIHIuZGVub21pbmF0b3IpCisKKworY2xhc3MgRnJhY3Rpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFscyhzZWxmLCBleHBlY3RlZCwgYWN0dWFsKToKKyAgICAgICAgIiIiQXNzZXJ0cyB0aGF0IGJvdGggdGhlIHR5cGVzIGFuZCB2YWx1ZXMgYXJlIHRoZSBzYW1lLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZXhwZWN0ZWQpLCB0eXBlKGFjdHVhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworICAgIGRlZiBhc3NlcnRSYWlzZXNNZXNzYWdlKHNlbGYsIGV4Y190eXBlLCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhYmxlLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJBc3NlcnRzIHRoYXQgY2FsbGFibGUoKmFyZ3MsICoqa3dhcmdzKSByYWlzZXMgZXhjX3R5cGUobWVzc2FnZSkuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhbGxhYmxlKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IGV4Y190eXBlLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCBzdHIoZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIiVzIG5vdCByYWlzZWQiICUgZXhjX3R5cGUuX19uYW1lX18pCisKKyAgICBkZWYgdGVzdEluaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAxKSwgX2NvbXBvbmVudHMoRig3KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDcsIDMpLCBfY29tcG9uZW50cyhGKEYoNywgMykpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMSwgMSksIF9jb21wb25lbnRzKEYoLTEsIDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEsIDEpLCBfY29tcG9uZW50cyhGKDEsIC0xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEsIDEpLCBfY29tcG9uZW50cyhGKC0yLCAtMikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLCAyKSwgX2NvbXBvbmVudHMoRig1LCAxMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAxNSksIF9jb21wb25lbnRzKEYoNywgMTUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAqKjIzLCAxKSwgX2NvbXBvbmVudHMoRigxMCoqMjMpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgzLCA3NyksIF9jb21wb25lbnRzKEYoRigzLCA3KSwgMTEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTksIDUpLCBfY29tcG9uZW50cyhGKDIsIEYoLTEwLCA5KSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgyNDg2LCAyNDg1KSwgX2NvbXBvbmVudHMoRihGKDIyLCA3KSwgRigzNTUsIDExMykpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoWmVyb0RpdmlzaW9uRXJyb3IsICJGcmFjdGlvbigxMiwgMCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRiwgMTIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgMS41ICsgM2opCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCAiMy8yIiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCAzLCAwaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCAzLCAxaikKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0SW5pdEZyb21GbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSwgMiksIF9jb21wb25lbnRzKEYoMi41KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGKC0wLjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMzYwMjg3OTcwMTg5NjM5NywgMzYwMjg3OTcwMTg5NjM5NjgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoMC4xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJ25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnLWluZicpKQorCisgICAgZGVmIHRlc3RJbml0RnJvbURlY2ltYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDExLCAxMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcxLjEnKSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAyMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMy41ZS0yJykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcuMDAwZTIwJykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQorCisgICAgZGVmIHRlc3RGcm9tU3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1LCAxKSwgX2NvbXBvbmVudHMoRigiNSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMywgMiksIF9jb21wb25lbnRzKEYoIjMvMiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMywgMiksIF9jb21wb25lbnRzKEYoIiBcbiAgKzMvMiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTMsIDIpLCBfY29tcG9uZW50cyhGKCItMy8yICAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEzLCAyKSwgX2NvbXBvbmVudHMoRigiICAgIDAxMy8wMiBcbiAgIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMywgMiksIF9jb21wb25lbnRzKEYodSIgICAgMDEzLzAyIFxuICAiKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTYsIDUpLCBfY29tcG9uZW50cyhGKCIgMy4yICIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTE2LCA1KSwgX2NvbXBvbmVudHMoRih1IiAtMy4yICIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTMsIDEpLCBfY29tcG9uZW50cyhGKHUiIC0zLiAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDMsIDUpLCBfY29tcG9uZW50cyhGKHUiIC42ICIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSwgMzEyNSksIF9jb21wb25lbnRzKEYoIjMyLmUtNSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAwMDAwMCwgMSksIF9jb21wb25lbnRzKEYoIjFFKzA2IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMTIzMDAsIDEpLCBfY29tcG9uZW50cyhGKCItMS4yM2U0IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigiIC4wZSswXHQiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGKCItMC4wMDBlMCIpKSkKKworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFplcm9EaXZpc2lvbkVycm9yLCAiRnJhY3Rpb24oMywgMCkiLAorICAgICAgICAgICAgRiwgIjMvMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnMy8nIiwKKyAgICAgICAgICAgIEYsICIzLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnLzInIiwKKyAgICAgICAgICAgIEYsICIvMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnMyAvMiciLAorICAgICAgICAgICAgRiwgIjMgLzIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICAjIERlbm9taW5hdG9ycyBkb24ndCBuZWVkIGEgc2lnbi4KKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnMy8rMiciLAorICAgICAgICAgICAgRiwgIjMvKzIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICAjIEltaXRhdGUgZmxvYXQncyBwYXJzaW5nLgorICAgICAgICAgICAgVmFsdWVFcnJvciwgIkludmFsaWQgbGl0ZXJhbCBmb3IgRnJhY3Rpb246ICcrIDMvMiciLAorICAgICAgICAgICAgRiwgIisgMy8yIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgIyBBdm9pZCB0cmVhdGluZyAnLicgYXMgYSByZWdleCBzcGVjaWFsIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnM2EyJyIsCisgICAgICAgICAgICBGLCAiM2EyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgIyBEb24ndCBhY2NlcHQgY29tYmluYXRpb25zIG9mIGRlY2ltYWxzIGFuZCBmcmFjdGlvbnMuCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzMvNy4yJyIsCisgICAgICAgICAgICBGLCAiMy83LjIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICAjIERvbid0IGFjY2VwdCBjb21iaW5hdGlvbnMgb2YgZGVjaW1hbHMgYW5kIGZyYWN0aW9ucy4KKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnMy4yLzcnIiwKKyAgICAgICAgICAgIEYsICIzLjIvNyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgICMgQWxsb3cgMy4gYW5kIC4zLCBidXQgbm90IC4KKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnLiciLAorICAgICAgICAgICAgRiwgIi4iKQorCisgICAgZGVmIHRlc3RJbW11dGFibGUoc2VsZik6CisgICAgICAgIHIgPSBGKDcsIDMpCisgICAgICAgIHIuX19pbml0X18oMiwgMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDcsIDMpLCBfY29tcG9uZW50cyhyKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgciwgJ251bWVyYXRvcicsIDEyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgciwgJ2Rlbm9taW5hdG9yJywgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNywgMyksIF9jb21wb25lbnRzKHIpKQorCisgICAgICAgICMgQnV0IGlmIHlvdSBfcmVhbGx5XyBuZWVkIHRvOgorICAgICAgICByLl9udW1lcmF0b3IgPSA0CisgICAgICAgIHIuX2Rlbm9taW5hdG9yID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg0LCAyKSwgX2NvbXBvbmVudHMocikpCisgICAgICAgICMgV2hpY2ggYnJlYWtzIHNvbWUgaW1wb3J0YW50IG9wZXJhdGlvbnM6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoRig0LCAyKSwgcikKKworICAgIGRlZiB0ZXN0RnJvbUZsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYuZnJvbV9mbG9hdCwgMys0aikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMTApKSkKKyAgICAgICAgYmlnaW50ID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiaWdpbnQsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoYmlnaW50KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoLTAuMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwgMSksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgxMC4wKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC01LCAyKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KC0yLjUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoOTk5OTk5OTk5OTk5OTk5OTE2MTEzOTIsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgxZTIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMTAqKjIzKSwgZmxvYXQoRi5mcm9tX2Zsb2F0KDFlMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMzYwMjg3OTcwMTg5NjM5NywgMTEyNTg5OTkwNjg0MjYyNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KDMuMikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMuMiwgZmxvYXQoRi5mcm9tX2Zsb2F0KDMuMikpKQorCisgICAgICAgIGluZiA9IDFlMTAwMAorICAgICAgICBuYW4gPSBpbmYgLSBpbmYKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBGLmZyb21fZmxvYXQsIGluZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgLWluZiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgRi5mcm9tX2Zsb2F0LCAtaW5mKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBuYW4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgbmFuKQorCisgICAgZGVmIHRlc3RGcm9tRGVjaW1hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLmZyb21fZGVjaW1hbCwgMys0aikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDEwLCAxKSwgRi5mcm9tX2RlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMCksIEYuZnJvbV9kZWNpbWFsKERlY2ltYWwoIi0wIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoNSwgMTApLCBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCIwLjUiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRig1LCAxMDAwKSwgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiNWUtMyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDUwMDApLCBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCI1ZTMiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSAtIEYoMSwgMTAqKjMwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCIwLiIgKyAiOSIgKiAzMCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgiaW5mIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwsIERlY2ltYWwoIi1pbmYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgibmFuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHNOYU4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIEYuZnJvbV9kZWNpbWFsLCBEZWNpbWFsKCJzbmFuIikpCisKKyAgICBkZWYgdGVzdExpbWl0RGVub21pbmF0b3Ioc2VsZik6CisgICAgICAgIHJwaSA9IEYoJzMuMTQxNTkyNjUzNTg5NzkzMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnBpLmxpbWl0X2Rlbm9taW5hdG9yKDEwMDAwKSwgRigzNTUsIDExMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXJwaS5saW1pdF9kZW5vbWluYXRvcigxMDAwMCksIEYoLTM1NSwgMTEzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChycGkubGltaXRfZGVub21pbmF0b3IoMTEzKSwgRigzNTUsIDExMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnBpLmxpbWl0X2Rlbm9taW5hdG9yKDExMiksIEYoMzMzLCAxMDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMjAxLCAyMDApLmxpbWl0X2Rlbm9taW5hdG9yKDEwMCksIEYoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigyMDEsIDIwMCkubGltaXRfZGVub21pbmF0b3IoMTAxKSwgRigxMDIsIDEwMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigwKS5saW1pdF9kZW5vbWluYXRvcigxMDAwMCksIEYoMCkpCisgICAgICAgIGZvciBpIGluICgwLCAtMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwgIm1heF9kZW5vbWluYXRvciBzaG91bGQgYmUgYXQgbGVhc3QgMSIsCisgICAgICAgICAgICAgICAgRigxKS5saW1pdF9kZW5vbWluYXRvciwgaSkKKworICAgIGRlZiB0ZXN0Q29udmVyc2lvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoLTEsIG1hdGgudHJ1bmMoRigtMTEsIDEwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoLTEsIGludChGKC0xMSwgMTApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxLCBtYXRoLnRydW5jKEYoMTEsIDEwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGJvb2woRigwLCAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgYm9vbChGKDMsIDIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEsIGZsb2F0KEYoMSwgMTApKSkKKworICAgICAgICAjIENoZWNrIHRoYXQgX19mbG9hdF9fIGlzbid0IGltcGxlbWVudGVkIGJ5IGNvbnZlcnRpbmcgdGhlCisgICAgICAgICMgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciB0byBmbG9hdCBiZWZvcmUgZGl2aWRpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCBsb25nKCcyJyo0MDArJzcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgyLjAvMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQoRihsb25nKCcyJyo0MDArJzcnKSwgbG9uZygnMycqNDAwKycxJykpKSkKKworICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSswaiwgY29tcGxleChGKDEsMTApKSkKKworCisgICAgZGVmIHRlc3RBcml0aG1ldGljKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMSwgMiksIEYoMSwgMTApICsgRigyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKC0zLCAxMCksIEYoMSwgMTApIC0gRigyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDEsIDI1KSwgRigxLCAxMCkgKiBGKDIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMSwgNCksIEYoMSwgMTApIC8gRigyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygyLCBGKDksIDEwKSAvLyBGKDIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDEwKioyMywgRigxMCoqMjMsIDEpIC8vIEYoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigyLCAzKSwgRigtNywgMykgJSBGKDMsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoOCwgMjcpLCBGKDIsIDMpICoqIEYoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigyNywgOCksIEYoMiwgMykgKiogRigtMykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMi4wLCBGKDQpICoqIEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigxLCAxKSwgK0YoMSwgMSkpCisgICAgICAgICMgV2lsbCByZXR1cm4gMWogaW4gMy4wOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3csIEYoLTEpLCBGKDEsIDIpKQorCisgICAgZGVmIHRlc3RNaXhlZEFyaXRobWV0aWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoRigxMSwgMTApLCBGKDEsIDEwKSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMS4xLCBGKDEsIDEwKSArIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxLjEgKyAwaiwgRigxLCAxMCkgKyAoMS4wICsgMGopKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoMTEsIDEwKSwgMSArIEYoMSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDEuMSwgMS4wICsgRigxLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMS4xICsgMGosICgxLjAgKyAwaikgKyBGKDEsIDEwKSkKKworICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoLTksIDEwKSwgRigxLCAxMCkgLSAxKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKC0wLjksIEYoMSwgMTApIC0gMS4wKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKC0wLjkgKyAwaiwgRigxLCAxMCkgLSAoMS4wICsgMGopKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoOSwgMTApLCAxIC0gRigxLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMC45LCAxLjAgLSBGKDEsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjkgKyAwaiwgKDEuMCArIDBqKSAtIEYoMSwgMTApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoRigxLCAxMCksIEYoMSwgMTApICogMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEsIEYoMSwgMTApICogMS4wKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSArIDBqLCBGKDEsIDEwKSAqICgxLjAgKyAwaikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoRigxLCAxMCksIDEgKiBGKDEsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEsIDEuMCAqIEYoMSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSArIDBqLCAoMS4wICsgMGopICogRigxLCAxMCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhGKDEsIDEwKSwgRigxLCAxMCkgLyAxKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSwgRigxLCAxMCkgLyAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMC4xICsgMGosIEYoMSwgMTApIC8gKDEuMCArIDBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhGKDEwLCAxKSwgMSAvIEYoMSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDEwLjAsIDEuMCAvIEYoMSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDEwLjAgKyAwaiwgKDEuMCArIDBqKSAvIEYoMSwgMTApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMCwgRigxLCAxMCkgLy8gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjAsIEYoMSwgMTApIC8vIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxMCwgMSAvLyBGKDEsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxMCoqMjMsIDEwKioyMiAvLyBGKDEsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxMC4wLCAxLjAgLy8gRigxLCAxMCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhGKDEsIDEwKSwgRigxLCAxMCkgJSAxKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSwgRigxLCAxMCkgJSAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoRigwLCAxKSwgMSAlIEYoMSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMCwgMS4wICUgRigxLCAxMCkpCisKKyAgICAgICAgIyBObyBuZWVkIGZvciBkaXZtb2Qgc2luY2Ugd2UgZG9uJ3Qgb3ZlcnJpZGUgaXQuCisKKyAgICAgICAgIyAqKiBoYXMgbW9yZSBpbnRlcmVzdGluZyBjb252ZXJzaW9uIHJ1bGVzLgorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoMTAwLCAxKSwgRigxLCAxMCkgKiogLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoRigxMDAsIDEpLCBGKDEwLCAxKSAqKiAyKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSwgRigxLCAxMCkgKiogMS4wKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSArIDBqLCBGKDEsIDEwKSAqKiAoMS4wICsgMGopKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDQgLCAyICoqIEYoMiwgMSkpCisgICAgICAgICMgV2lsbCByZXR1cm4gMWogaW4gMy4wOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3csICgtMSksIEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoRigxLCA0KSAsIDIgKiogRigtMiwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMi4wICwgNCAqKiBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMjUsIDIuMCAqKiBGKC0yLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxLjAgKyAwaiwgKDEuMCArIDBqKSAqKiBGKDEsIDEwKSkKKworICAgIGRlZiB0ZXN0TWl4aW5nV2l0aERlY2ltYWwoc2VsZik6CisgICAgICAgICMgRGVjaW1hbCByZWZ1c2VzIG1peGVkIGNvbXBhcmlzb25zLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgICAidW5zdXBwb3J0ZWQgb3BlcmFuZCB0eXBlKHMpIGZvciArOiAnRnJhY3Rpb24nIGFuZCAnRGVjaW1hbCciLAorICAgICAgICAgICAgb3BlcmF0b3IuYWRkLCBGKDMsMTEpLCBEZWNpbWFsKCczLjE0MTU5MjYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgInVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZShzKSBmb3IgKzogJ0RlY2ltYWwnIGFuZCAnRnJhY3Rpb24nIiwKKyAgICAgICAgICAgIG9wZXJhdG9yLmFkZCwgRGVjaW1hbCgnMy4xNDE1OTI2JyksIEYoMywxMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoRig1LCAyKSwgRGVjaW1hbCgnMi41JykpCisKKyAgICBkZWYgdGVzdENvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8IEYoMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA8IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpIDw9IEYoMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpIDw9IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigyLCAzKSA8PSBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA9PSBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMSwgMikgPT0gRigxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpICE9IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpICE9IEYoMSwgMykpCisKKyAgICBkZWYgdGVzdENvbXBhcmlzb25zRHVtbXlSYXRpb25hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPT0gRHVtbXlSYXRpb25hbCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPT0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID09IER1bW15UmF0aW9uYWwoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRHVtbXlSYXRpb25hbCgzLCA0KSA9PSBGKDEsIDIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpIDwgRHVtbXlSYXRpb25hbCgzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpIDwgRHVtbXlSYXRpb25hbCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpIDwgRHVtbXlSYXRpb25hbCgxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID4gRHVtbXlSYXRpb25hbCgzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID4gRHVtbXlSYXRpb25hbCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPiBEdW1teVJhdGlvbmFsKDEsIDcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8PSBEdW1teVJhdGlvbmFsKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8PSBEdW1teVJhdGlvbmFsKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMSwgMikgPD0gRHVtbXlSYXRpb25hbCgxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID49IER1bW15UmF0aW9uYWwoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpID49IER1bW15UmF0aW9uYWwoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpID49IER1bW15UmF0aW9uYWwoMSwgNykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPCBGKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPCBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPCBGKDEsIDcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPiBGKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPiBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRHVtbXlSYXRpb25hbCgxLCAyKSA+IEYoMSwgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpIDw9IEYoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpIDw9IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRHVtbXlSYXRpb25hbCgxLCAyKSA8PSBGKDEsIDcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPj0gRigzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPj0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPj0gRigxLCA3KSkKKworICAgIGRlZiB0ZXN0Q29tcGFyaXNvbnNEdW1teUZsb2F0KHNlbGYpOgorICAgICAgICB4ID0gRHVtbXlGbG9hdCgxLi8zLikKKyAgICAgICAgeSA9IEYoMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggIT0geSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggPCB5IG9yIHggPiB5KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHggPT0geSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4IDw9IHkgYW5kIHggPj0geSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgIT0geCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgPCB4IG9yIHkgPiB4KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHkgPT0geCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh5IDw9IHggYW5kIHkgPj0geCkKKworICAgIGRlZiB0ZXN0TWl4ZWRMZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoMiA8IEYoNSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMiA8IEYoNCwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDUsIDIpIDwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDQsIDIpIDwgMikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8IDAuNikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpIDwgMC40KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMC40IDwgRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgwLjUgPCBGKDEsIDIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmxvYXQoJ2luZicpIDwgRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsb2F0KCctaW5mJykgPCBGKDAsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbG9hdCgnbmFuJykgPCBGKC0zLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPCBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxNywgMTIpIDwgZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDE0NCwgLTg5KSA8IGZsb2F0KCduYW4nKSkKKworICAgIGRlZiB0ZXN0TWl4ZWRMZXNzRXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjUgPD0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgwLjYgPD0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPD0gMC41KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMSwgMikgPD0gMC40KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMiA8PSBGKDQsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDIgPD0gRigzLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoNCwgMikgPD0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDUsIDIpIDw9IDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbG9hdCgnaW5mJykgPD0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsb2F0KCctaW5mJykgPD0gRigwLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmxvYXQoJ25hbicpIDw9IEYoLTMsIDcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8PSBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxNywgMTIpIDw9IGZsb2F0KCctaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxNDQsIC04OSkgPD0gZmxvYXQoJ25hbicpKQorCisgICAgZGVmIHRlc3RCaWdGbG9hdENvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICAjIEJlY2F1c2UgMTAqKjIzIGNhbid0IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBmbG9hdDoKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEwKioyMykgPT0gZmxvYXQoMTAqKjIzKSkKKyAgICAgICAgIyBUaGUgZmlyc3QgdGVzdCBkZW1vbnN0cmF0ZXMgd2h5IHRoZXNlIGFyZSBpbXBvcnRhbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMWUyMyA8IGZsb2F0KEYobWF0aC50cnVuYygxZTIzKSArIDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDFlMjMgPCBGKG1hdGgudHJ1bmMoMWUyMykgKyAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgxZTIzIDw9IEYobWF0aC50cnVuYygxZTIzKSAtIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMWUyMyA+IEYobWF0aC50cnVuYygxZTIzKSAtIDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDFlMjMgPj0gRihtYXRoLnRydW5jKDFlMjMpICsgMSkpCisKKyAgICBkZWYgdGVzdEJpZ0NvbXBsZXhDb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEwKioyMykgPT0gY29tcGxleCgxMCoqMjMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmd0LCBGKDEwKioyMyksIGNvbXBsZXgoMTAqKjIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSwgRigxMCoqMjMpLCBjb21wbGV4KDEwKioyMykpCisKKyAgICAgICAgeCA9IEYoMywgOCkKKyAgICAgICAgeiA9IGNvbXBsZXgoMC4zNzUsIDAuMCkKKyAgICAgICAgdyA9IGNvbXBsZXgoMC4zNzUsIDAuMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggPT0geikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4ICE9IHopCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCA9PSB3KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCAhPSB3KQorICAgICAgICBmb3Igb3AgaW4gb3BlcmF0b3IubHQsIG9wZXJhdG9yLmxlLCBvcGVyYXRvci5ndCwgb3BlcmF0b3IuZ2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCB4LCB6KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgeiwgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3AsIHgsIHcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCB3LCB4KQorCisgICAgZGVmIHRlc3RNaXhlZEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoMC41ID09IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMC42ID09IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpID09IDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID09IDAuNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIgPT0gRig0LCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgyID09IEYoMywgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDQsIDIpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRig1LCAyKSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoNSwgMikgPT0gZmxvYXQoJ25hbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCduYW4nKSA9PSBGKDMsIDcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoNSwgMikgPT0gZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCctaW5mJykgPT0gRigyLCA1KSkKKworICAgIGRlZiB0ZXN0U3RyaW5naWZpY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGcmFjdGlvbig3LCAzKSIsIHJlcHIoRig3LCAzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZyYWN0aW9uKDYyODMxODUzMDcsIDIwMDAwMDAwMDApIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByKEYoJzMuMTQxNTkyNjUzNScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRnJhY3Rpb24oLTEsIDEwMDAwMDAwMDAwMDAwMDAwMDAwMCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoRigxLCAtMTAqKjIwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjcvMyIsIHN0cihGKDcsIDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiNyIsIHN0cihGKDcsIDEpKSkKKworICAgIGRlZiB0ZXN0SGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKDIuNSksIGhhc2goRig1LCAyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCgxMCoqNTApLCBoYXNoKEYoMTAqKjUwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaGFzaChmbG9hdCgxMCoqMjMpKSwgaGFzaChGKDEwKioyMykpKQorCisgICAgZGVmIHRlc3RBcHByb3hpbWF0ZVBpKHNlbGYpOgorICAgICAgICAjIEFsZ29yaXRobSBib3Jyb3dlZCBmcm9tCisgICAgICAgICMgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWIvZGVjaW1hbC1yZWNpcGVzLmh0bWwKKyAgICAgICAgdGhyZWUgPSBGKDMpCisgICAgICAgIGxhc3RzLCB0LCBzLCBuLCBuYSwgZCwgZGEgPSAwLCB0aHJlZSwgMywgMSwgMCwgMCwgMjQKKyAgICAgICAgd2hpbGUgYWJzKHMgLSBsYXN0cykgPiBGKDEsIDEwKio5KToKKyAgICAgICAgICAgIGxhc3RzID0gcworICAgICAgICAgICAgbiwgbmEgPSBuK25hLCBuYSs4CisgICAgICAgICAgICBkLCBkYSA9IGQrZGEsIGRhKzMyCisgICAgICAgICAgICB0ID0gKHQgKiBuKSAvIGQKKyAgICAgICAgICAgIHMgKz0gdAorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKG1hdGgucGksIHMpCisKKyAgICBkZWYgdGVzdEFwcHJveGltYXRlQ29zMShzZWxmKToKKyAgICAgICAgIyBBbGdvcml0aG0gYm9ycm93ZWQgZnJvbQorICAgICAgICAjIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGliL2RlY2ltYWwtcmVjaXBlcy5odG1sCisgICAgICAgIHggPSBGKDEpCisgICAgICAgIGksIGxhc3RzLCBzLCBmYWN0LCBudW0sIHNpZ24gPSAwLCAwLCBGKDEpLCAxLCAxLCAxCisgICAgICAgIHdoaWxlIGFicyhzIC0gbGFzdHMpID4gRigxLCAxMCoqOSk6CisgICAgICAgICAgICBsYXN0cyA9IHMKKyAgICAgICAgICAgIGkgKz0gMgorICAgICAgICAgICAgZmFjdCAqPSBpICogKGktMSkKKyAgICAgICAgICAgIG51bSAqPSB4ICogeAorICAgICAgICAgICAgc2lnbiAqPSAtMQorICAgICAgICAgICAgcyArPSBudW0gLyBmYWN0ICogc2lnbgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKG1hdGguY29zKDEpLCBzKQorCisgICAgZGVmIHRlc3RfY29weV9kZWVwY29weV9waWNrbGUoc2VsZik6CisgICAgICAgIHIgPSBGKDEzLCA3KQorICAgICAgICBkciA9IER1bW15RnJhY3Rpb24oMTMsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgbG9hZHMoZHVtcHMocikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHIpLCBpZChjb3B5KHIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChyKSwgaWQoZGVlcGNvcHkocikpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGRyKSwgaWQoY29weShkcikpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGRyKSwgaWQoZGVlcGNvcHkoZHIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhkciwgY29weShkcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoZHIsIGRlZXBjb3B5KGRyKSkKKworICAgIGRlZiB0ZXN0X3Nsb3RzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDQ5OTgKKyAgICAgICAgciA9IEYoMTMsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCByLCAnYScsIDEwKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEZyYWN0aW9uVGVzdCwgR2NkVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWY1OTkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKQEAgLTAsMCArMSw0NyBAQAorIyBUZXN0IHRoZSBmcm96ZW4gbW9kdWxlIGRlZmluZWQgaW4gZnJvemVuLmMuCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgcnVuX3VuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKKworY2xhc3MgRnJvemVuVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Zyb3plbihzZWxmKToKKworICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgX19oZWxsb19fCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIHg6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19oZWxsb19fIGZhaWxlZDoiICsgc3RyKHgpKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18KKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgeDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fIGZhaWxlZDoiICsgc3RyKHgpKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18uc3BhbQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCB4OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uc3BhbSBmYWlsZWQ6IiArIHN0cih4KSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fLmZvbworICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5mb28gc2hvdWxkIGhhdmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdIZWxsbyB3b3JsZC4uLlxuSGVsbG8gd29ybGQuLi5cbkhlbGxvIHdvcmxkLi4uXG4nKQorCisgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19oZWxsb19fJ10KKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX3BoZWxsb19fJ10KKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX3BoZWxsb19fLnNwYW0nXQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoRnJvemVuVGVzdHMpCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyZThhNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQpAQCAtMCwwICsxLDc3OCBAQAorIiIiVGVzdCBzY3JpcHQgZm9yIGZ0cGxpYiBtb2R1bGUuIiIiCisKKyMgTW9kaWZpZWQgYnkgR2lhbXBhb2xvIFJvZG9sYScgdG8gdGVzdCBGVFAgY2xhc3MsIElQdjYgYW5kIFRMUworIyBlbnZpcm9ubWVudAorCitpbXBvcnQgZnRwbGliCitpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCBhc3luY2hhdAoraW1wb3J0IHNvY2tldAoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcwordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgSE9TVAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCisKKworIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgb3ZlciB0aGUgZGF0YSBjaGFubmVsIHdoZW4KKyMgUkVUUiwgTElTVCBhbmQgTkxTVCBjb21tYW5kcyBhcmUgaXNzdWVkCitSRVRSX0RBVEEgPSAnYWJjZGUxMjM0NVxyXG4nICogMTAwMAorTElTVF9EQVRBID0gJ2Zvb1xyXG5iYXJcclxuJworTkxTVF9EQVRBID0gJ2Zvb1xyXG5iYXJcclxuJworCisKK2NsYXNzIER1bW15RFRQSGFuZGxlcihhc3luY2hhdC5hc3luY19jaGF0KToKKyAgICBkdHBfY29ubl9jbG9zZWQgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4sIGJhc2VjbGFzcyk6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgc2VsZi5iYXNlY2xhc3MgPSBiYXNlY2xhc3MKKyAgICAgICAgc2VsZi5iYXNlY2xhc3MubGFzdF9yZWNlaXZlZF9kYXRhID0gJycKKworICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5iYXNlY2xhc3MubGFzdF9yZWNlaXZlZF9kYXRhICs9IHNlbGYucmVjdigxMDI0KQorCisgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKKyAgICAgICAgIyBYWFg6IHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgbWFueSB0aW1lcyBpbiBhIHJvdyBmb3IgYSBzaW5nbGUKKyAgICAgICAgIyBjb25uZWN0aW9uLCBpbmNsdWRpbmcgaW4gY2xlYXItdGV4dCAobm9uLVRMUykgbW9kZS4KKyAgICAgICAgIyAoYmVoYXZpb3VyIHdpdG5lc3NlZCB3aXRoIHRlc3RfZGF0YV9jb25uZWN0aW9uKQorICAgICAgICBpZiBub3Qgc2VsZi5kdHBfY29ubl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLmJhc2VjbGFzcy5wdXNoKCcyMjYgdHJhbnNmZXIgY29tcGxldGUnKQorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmR0cF9jb25uX2Nsb3NlZCA9IFRydWUKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKworY2xhc3MgRHVtbXlGVFBIYW5kbGVyKGFzeW5jaGF0LmFzeW5jX2NoYXQpOgorCisgICAgZHRwX2hhbmRsZXIgPSBEdW1teURUUEhhbmRsZXIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKKyAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKCJcclxuIikKKyAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQorICAgICAgICBzZWxmLmR0cCA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X3JlY2VpdmVkX2NtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X3JlY2VpdmVkX2RhdGEgPSAnJworICAgICAgICBzZWxmLm5leHRfcmVzcG9uc2UgPSAnJworICAgICAgICBzZWxmLnJlc3QgPSBOb25lCisgICAgICAgIHNlbGYucHVzaCgnMjIwIHdlbGNvbWUnKQorCisgICAgZGVmIGNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5pbl9idWZmZXIuYXBwZW5kKGRhdGEpCisKKyAgICBkZWYgZm91bmRfdGVybWluYXRvcihzZWxmKToKKyAgICAgICAgbGluZSA9ICcnLmpvaW4oc2VsZi5pbl9idWZmZXIpCisgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KKyAgICAgICAgaWYgc2VsZi5uZXh0X3Jlc3BvbnNlOgorICAgICAgICAgICAgc2VsZi5wdXNoKHNlbGYubmV4dF9yZXNwb25zZSkKKyAgICAgICAgICAgIHNlbGYubmV4dF9yZXNwb25zZSA9ICcnCisgICAgICAgIGNtZCA9IGxpbmUuc3BsaXQoJyAnKVswXS5sb3dlcigpCisgICAgICAgIHNlbGYubGFzdF9yZWNlaXZlZF9jbWQgPSBjbWQKKyAgICAgICAgc3BhY2UgPSBsaW5lLmZpbmQoJyAnKQorICAgICAgICBpZiBzcGFjZSAhPSAtMToKKyAgICAgICAgICAgIGFyZyA9IGxpbmVbc3BhY2UgKyAxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZyA9ICIiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2NtZF8nICsgY21kKToKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZiwgJ2NtZF8nICsgY21kKQorICAgICAgICAgICAgbWV0aG9kKGFyZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHVzaCgnNTUwIGNvbW1hbmQgIiVzIiBub3QgdW5kZXJzdG9vZC4nICVjbWQpCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisgICAgZGVmIHB1c2goc2VsZiwgZGF0YSk6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQucHVzaChzZWxmLCBkYXRhICsgJ1xyXG4nKQorCisgICAgZGVmIGNtZF9wb3J0KHNlbGYsIGFyZyk6CisgICAgICAgIGFkZHIgPSBtYXAoaW50LCBhcmcuc3BsaXQoJywnKSkKKyAgICAgICAgaXAgPSAnJWQuJWQuJWQuJWQnICV0dXBsZShhZGRyWzo0XSkKKyAgICAgICAgcG9ydCA9IChhZGRyWzRdICogMjU2KSArIGFkZHJbNV0KKyAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIocywgYmFzZWNsYXNzPXNlbGYpCisgICAgICAgIHNlbGYucHVzaCgnMjAwIGFjdGl2ZSBkYXRhIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKQorCisgICAgZGVmIGNtZF9wYXN2KHNlbGYsIGFyZyk6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKKyAgICAgICAgc29jay5saXN0ZW4oNSkKKyAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICBpcCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVs6Ml0KKyAgICAgICAgaXAgPSBpcC5yZXBsYWNlKCcuJywgJywnKQorICAgICAgICBwMSwgcDIgPSBkaXZtb2QocG9ydCwgMjU2KQorICAgICAgICBzZWxmLnB1c2goJzIyNyBlbnRlcmluZyBwYXNzaXZlIG1vZGUgKCVzLCVkLCVkKScgJShpcCwgcDEsIHAyKSkKKyAgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkKKyAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKGNvbm4sIGJhc2VjbGFzcz1zZWxmKQorCisgICAgZGVmIGNtZF9lcHJ0KHNlbGYsIGFyZyk6CisgICAgICAgIGFmLCBpcCwgcG9ydCA9IGFyZy5zcGxpdChhcmdbMF0pWzE6LTFdCisgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKKyAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIocywgYmFzZWNsYXNzPXNlbGYpCisgICAgICAgIHNlbGYucHVzaCgnMjAwIGFjdGl2ZSBkYXRhIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKQorCisgICAgZGVmIGNtZF9lcHN2KHNlbGYsIGFyZyk6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikKKyAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKKyAgICAgICAgc29jay5saXN0ZW4oNSkKKyAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgIHNlbGYucHVzaCgnMjI5IGVudGVyaW5nIGV4dGVuZGVkIHBhc3NpdmUgbW9kZSAofHx8JWR8KScgJXBvcnQpCisgICAgICAgIGNvbm4sIGFkZHIgPSBzb2NrLmFjY2VwdCgpCisgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihjb25uLCBiYXNlY2xhc3M9c2VsZikKKworICAgIGRlZiBjbWRfZWNobyhzZWxmLCBhcmcpOgorICAgICAgICAjIHNlbmRzIGJhY2sgdGhlIHJlY2VpdmVkIHN0cmluZyAodXNlZCBieSB0aGUgdGVzdCBzdWl0ZSkKKyAgICAgICAgc2VsZi5wdXNoKGFyZykKKworICAgIGRlZiBjbWRfdXNlcihzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzMzMSB1c2VybmFtZSBvaycpCisKKyAgICBkZWYgY21kX3Bhc3Moc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcyMzAgcGFzc3dvcmQgb2snKQorCisgICAgZGVmIGNtZF9hY2N0KHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMjMwIGFjY3Qgb2snKQorCisgICAgZGVmIGNtZF9ybmZyKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMzUwIHJuZnIgb2snKQorCisgICAgZGVmIGNtZF9ybnRvKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMjUwIHJudG8gb2snKQorCisgICAgZGVmIGNtZF9kZWxlKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMjUwIGRlbGUgb2snKQorCisgICAgZGVmIGNtZF9jd2Qoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcyNTAgY3dkIG9rJykKKworICAgIGRlZiBjbWRfc2l6ZShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzI1MCAxMDAwJykKKworICAgIGRlZiBjbWRfbWtkKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMjU3ICIlcyInICVhcmcpCisKKyAgICBkZWYgY21kX3JtZChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzI1MCBybWQgb2snKQorCisgICAgZGVmIGNtZF9wd2Qoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcyNTcgInB3ZCBvayInKQorCisgICAgZGVmIGNtZF90eXBlKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMjAwIHR5cGUgb2snKQorCisgICAgZGVmIGNtZF9xdWl0KHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMjIxIHF1aXQgb2snKQorICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBjbWRfc3RvcihzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzEyNSBzdG9yIG9rJykKKworICAgIGRlZiBjbWRfcmVzdChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnJlc3QgPSBhcmcKKyAgICAgICAgc2VsZi5wdXNoKCczNTAgcmVzdCBvaycpCisKKyAgICBkZWYgY21kX3JldHIoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcxMjUgcmV0ciBvaycpCisgICAgICAgIGlmIHNlbGYucmVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9mZnNldCA9IGludChzZWxmLnJlc3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvZmZzZXQgPSAwCisgICAgICAgIHNlbGYuZHRwLnB1c2goUkVUUl9EQVRBW29mZnNldDpdKQorICAgICAgICBzZWxmLmR0cC5jbG9zZV93aGVuX2RvbmUoKQorICAgICAgICBzZWxmLnJlc3QgPSBOb25lCisKKyAgICBkZWYgY21kX2xpc3Qoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcxMjUgbGlzdCBvaycpCisgICAgICAgIHNlbGYuZHRwLnB1c2goTElTVF9EQVRBKQorICAgICAgICBzZWxmLmR0cC5jbG9zZV93aGVuX2RvbmUoKQorCisgICAgZGVmIGNtZF9ubHN0KHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMTI1IG5sc3Qgb2snKQorICAgICAgICBzZWxmLmR0cC5wdXNoKE5MU1RfREFUQSkKKyAgICAgICAgc2VsZi5kdHAuY2xvc2Vfd2hlbl9kb25lKCkKKworCitjbGFzcyBEdW1teUZUUFNlcnZlcihhc3luY29yZS5kaXNwYXRjaGVyLCB0aHJlYWRpbmcuVGhyZWFkKToKKworICAgIGhhbmRsZXIgPSBEdW1teUZUUEhhbmRsZXIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzLCBhZj1zb2NrZXQuQUZfSU5FVCk6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoYWYsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5iaW5kKGFkZHJlc3MpCisgICAgICAgIHNlbGYubGlzdGVuKDUpCisgICAgICAgIHNlbGYuYWN0aXZlID0gRmFsc2UKKyAgICAgICAgc2VsZi5hY3RpdmVfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzoyXQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuYWN0aXZlCisgICAgICAgIHNlbGYuX19mbGFnID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5zdGFydChzZWxmKQorICAgICAgICBzZWxmLl9fZmxhZy53YWl0KCkKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuYWN0aXZlID0gVHJ1ZQorICAgICAgICBzZWxmLl9fZmxhZy5zZXQoKQorICAgICAgICB3aGlsZSBzZWxmLmFjdGl2ZSBhbmQgYXN5bmNvcmUuc29ja2V0X21hcDoKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlX2xvY2suYWNxdWlyZSgpCisgICAgICAgICAgICBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4xLCBjb3VudD0xKQorICAgICAgICAgICAgc2VsZi5hY3RpdmVfbG9jay5yZWxlYXNlKCkKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKGlnbm9yZV9hbGw9VHJ1ZSkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5hY3RpdmUKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQorICAgICAgICBzZWxmLmpvaW4oKQorCisgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6CisgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLmFjY2VwdCgpCisgICAgICAgIHNlbGYuaGFuZGxlciA9IHNlbGYuaGFuZGxlcihjb25uKQorICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgaGFuZGxlX3JlYWQgPSBoYW5kbGVfY29ubmVjdAorCisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKworCitpZiBzc2wgaXMgbm90IE5vbmU6CisKKyAgICBDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAia2V5Y2VydC5wZW0iKQorCisgICAgY2xhc3MgU1NMQ29ubmVjdGlvbihvYmplY3QsIGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorICAgICAgICAiIiJBbiBhc3luY29yZS5kaXNwYXRjaGVyIHN1YmNsYXNzIHN1cHBvcnRpbmcgVExTL1NTTC4iIiIKKworICAgICAgICBfc3NsX2FjY2VwdGluZyA9IEZhbHNlCisgICAgICAgIF9zc2xfY2xvc2luZyA9IEZhbHNlCisKKyAgICAgICAgZGVmIHNlY3VyZV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrZXQsIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUsIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gVHJ1ZQorCisgICAgICAgIGRlZiBfZG9fc3NsX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IEZhbHNlCisKKyAgICAgICAgZGVmIF9kb19zc2xfc2h1dGRvd24oc2VsZik6CisgICAgICAgICAgICBzZWxmLl9zc2xfY2xvc2luZyA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNlbGYuc29ja2V0LnVud3JhcCgpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAjIEFueSAic29ja2V0IGVycm9yIiBjb3JyZXNwb25kcyB0byBhIFNTTF9FUlJPUl9TWVNDQUxMIHJldHVybgorICAgICAgICAgICAgICAgICMgZnJvbSBPcGVuU1NMJ3MgU1NMX3NodXRkb3duKCksIGNvcnJlc3BvbmRpbmcgdG8gYQorICAgICAgICAgICAgICAgICMgY2xvc2VkIHNvY2tldCBjb25kaXRpb24uIFNlZSBhbHNvOgorICAgICAgICAgICAgICAgICMgaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL29wZW5zc2wtdXNlcnNAb3BlbnNzbC5vcmcvbXNnNjA3MTAuaHRtbAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuX3NzbF9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgICAgIHN1cGVyKFNTTENvbm5lY3Rpb24sIHNlbGYpLmNsb3NlKCkKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWRfZXZlbnQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zc2xfY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfc2h1dGRvd24oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5oYW5kbGVfcmVhZF9ldmVudCgpCisKKyAgICAgICAgZGVmIGhhbmRsZV93cml0ZV9ldmVudChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3NzbF9hY2NlcHRpbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbGlmIHNlbGYuX3NzbF9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9zaHV0ZG93bigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1cGVyKFNTTENvbm5lY3Rpb24sIHNlbGYpLmhhbmRsZV93cml0ZV9ldmVudCgpCisKKyAgICAgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFNTTENvbm5lY3Rpb24sIHNlbGYpLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9FT0YsIHNzbC5TU0xfRVJST1JfWkVST19SRVRVUk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgZGVmIHJlY3Yoc2VsZiwgYnVmZmVyX3NpemUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5yZWN2KGJ1ZmZlcl9zaXplKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfRU9GLCBzc2wuU1NMX0VSUk9SX1pFUk9fUkVUVVJOKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHNlbGYuc29ja2V0LCBzc2wuU1NMU29ja2V0KSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5fc3Nsb2JqIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfc2h1dGRvd24oKQorCisKKyAgICBjbGFzcyBEdW1teVRMU19EVFBIYW5kbGVyKFNTTENvbm5lY3Rpb24sIER1bW15RFRQSGFuZGxlcik6CisgICAgICAgICIiIkEgRHVtbXlEVFBIYW5kbGVyIHN1YmNsYXNzIHN1cHBvcnRpbmcgVExTL1NTTC4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubiwgYmFzZWNsYXNzKToKKyAgICAgICAgICAgIER1bW15RFRQSGFuZGxlci5fX2luaXRfXyhzZWxmLCBjb25uLCBiYXNlY2xhc3MpCisgICAgICAgICAgICBpZiBzZWxmLmJhc2VjbGFzcy5zZWN1cmVfZGF0YV9jaGFubmVsOgorICAgICAgICAgICAgICAgIHNlbGYuc2VjdXJlX2Nvbm5lY3Rpb24oKQorCisKKyAgICBjbGFzcyBEdW1teVRMU19GVFBIYW5kbGVyKFNTTENvbm5lY3Rpb24sIER1bW15RlRQSGFuZGxlcik6CisgICAgICAgICIiIkEgRHVtbXlGVFBIYW5kbGVyIHN1YmNsYXNzIHN1cHBvcnRpbmcgVExTL1NTTC4iIiIKKworICAgICAgICBkdHBfaGFuZGxlciA9IER1bW15VExTX0RUUEhhbmRsZXIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgICAgICBEdW1teUZUUEhhbmRsZXIuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgICAgIHNlbGYuc2VjdXJlX2RhdGFfY2hhbm5lbCA9IEZhbHNlCisKKyAgICAgICAgZGVmIGNtZF9hdXRoKHNlbGYsIGxpbmUpOgorICAgICAgICAgICAgIiIiU2V0IHVwIHNlY3VyZSBjb250cm9sIGNoYW5uZWwuIiIiCisgICAgICAgICAgICBzZWxmLnB1c2goJzIzNCBBVVRIIFRMUyBzdWNjZXNzZnVsJykKKyAgICAgICAgICAgIHNlbGYuc2VjdXJlX2Nvbm5lY3Rpb24oKQorCisgICAgICAgIGRlZiBjbWRfcGJzeihzZWxmLCBsaW5lKToKKyAgICAgICAgICAgICIiIk5lZ290aWF0ZSBzaXplIG9mIGJ1ZmZlciBmb3Igc2VjdXJlIGRhdGEgdHJhbnNmZXIuCisgICAgICAgICAgICBGb3IgVExTL1NTTCB0aGUgb25seSB2YWxpZCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciBpcyAnMCcuCisgICAgICAgICAgICBBbnkgb3RoZXIgdmFsdWUgaXMgYWNjZXB0ZWQgYnV0IGlnbm9yZWQuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHNlbGYucHVzaCgnMjAwIFBCU1o9MCBzdWNjZXNzZnVsLicpCisKKyAgICAgICAgZGVmIGNtZF9wcm90KHNlbGYsIGxpbmUpOgorICAgICAgICAgICAgIiIiU2V0dXAgdW4vc2VjdXJlIGRhdGEgY2hhbm5lbC4iIiIKKyAgICAgICAgICAgIGFyZyA9IGxpbmUudXBwZXIoKQorICAgICAgICAgICAgaWYgYXJnID09ICdDJzoKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzIwMCBQcm90ZWN0aW9uIHNldCB0byBDbGVhcicpCisgICAgICAgICAgICAgICAgc2VsZi5zZWN1cmVfZGF0YV9jaGFubmVsID0gRmFsc2UKKyAgICAgICAgICAgIGVsaWYgYXJnID09ICdQJzoKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzIwMCBQcm90ZWN0aW9uIHNldCB0byBQcml2YXRlJykKKyAgICAgICAgICAgICAgICBzZWxmLnNlY3VyZV9kYXRhX2NoYW5uZWwgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgiNTAyIFVucmVjb2duaXplZCBQUk9UIHR5cGUgKHVzZSBDIG9yIFApLiIpCisKKworICAgIGNsYXNzIER1bW15VExTX0ZUUFNlcnZlcihEdW1teUZUUFNlcnZlcik6CisgICAgICAgIGhhbmRsZXIgPSBEdW1teVRMU19GVFBIYW5kbGVyCisKKworY2xhc3MgVGVzdEZUUENsYXNzKFRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVCwgMCkpCisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQKHRpbWVvdXQ9MTApCisgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQuY2xvc2UoKQorICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIGRlZiB0ZXN0X2dldHdlbGNvbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQuZ2V0d2VsY29tZSgpLCAnMjIwIHdlbGNvbWUnKQorCisgICAgZGVmIHRlc3Rfc2FuaXRpemUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQuc2FuaXRpemUoJ2ZvbycpLCByZXByKCdmb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5zYW5pdGl6ZSgncGFzcyAxMjM0NScpLCByZXByKCdwYXNzICoqKioqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQuc2FuaXRpemUoJ1BBU1MgMTIzNDUnKSwgcmVwcignUEFTUyAqKioqKicpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnRwbGliLmVycm9yX3RlbXAsIHNlbGYuY2xpZW50LnNlbmRjbWQsICdlY2hvIDQwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ0cGxpYi5lcnJvcl90ZW1wLCBzZWxmLmNsaWVudC5zZW5kY21kLCAnZWNobyA0OTknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdHBsaWIuZXJyb3JfcGVybSwgc2VsZi5jbGllbnQuc2VuZGNtZCwgJ2VjaG8gNTAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnRwbGliLmVycm9yX3Blcm0sIHNlbGYuY2xpZW50LnNlbmRjbWQsICdlY2hvIDU5OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ0cGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQuc2VuZGNtZCwgJ2VjaG8gOTk5JykKKworICAgIGRlZiB0ZXN0X2FsbF9lcnJvcnMoc2VsZik6CisgICAgICAgIGV4Y2VwdGlvbnMgPSAoZnRwbGliLmVycm9yX3JlcGx5LCBmdHBsaWIuZXJyb3JfdGVtcCwgZnRwbGliLmVycm9yX3Blcm0sCisgICAgICAgICAgICAgICAgICAgICAgZnRwbGliLmVycm9yX3Byb3RvLCBmdHBsaWIuRXJyb3IsIElPRXJyb3IsIEVPRkVycm9yKQorICAgICAgICBmb3IgeCBpbiBleGNlcHRpb25zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIHgoJ2V4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gYWxsX2Vycm9ycyBzZXQnKQorICAgICAgICAgICAgZXhjZXB0IGZ0cGxpYi5hbGxfZXJyb3JzOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3NldF9wYXN2KHNlbGYpOgorICAgICAgICAjIHBhc3NpdmUgbW9kZSBpcyBzdXBwb3NlZCB0byBiZSBlbmFibGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2xpZW50LnBhc3NpdmVzZXJ2ZXIpCisgICAgICAgIHNlbGYuY2xpZW50LnNldF9wYXN2KFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaWVudC5wYXNzaXZlc2VydmVyKQorICAgICAgICBzZWxmLmNsaWVudC5zZXRfcGFzdihGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmNsaWVudC5wYXNzaXZlc2VydmVyKQorCisgICAgZGVmIHRlc3Rfdm9pZGNtZChzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQudm9pZGNtZCgnZWNobyAyMDAnKQorICAgICAgICBzZWxmLmNsaWVudC52b2lkY21kKCdlY2hvIDI5OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ0cGxpYi5lcnJvcl9yZXBseSwgc2VsZi5jbGllbnQudm9pZGNtZCwgJ2VjaG8gMTk5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnRwbGliLmVycm9yX3JlcGx5LCBzZWxmLmNsaWVudC52b2lkY21kLCAnZWNobyAzMDAnKQorCisgICAgZGVmIHRlc3RfbG9naW4oc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LmxvZ2luKCkKKworICAgIGRlZiB0ZXN0X2FjY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LmFjY3QoJ3Bhc3N3ZCcpCisKKyAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnJlbmFtZSgnYScsICdiJykKKyAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlci5uZXh0X3Jlc3BvbnNlID0gJzIwMCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnRwbGliLmVycm9yX3JlcGx5LCBzZWxmLmNsaWVudC5yZW5hbWUsICdhJywgJ2InKQorCisgICAgZGVmIHRlc3RfZGVsZXRlKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5kZWxldGUoJ2ZvbycpCisgICAgICAgIHNlbGYuc2VydmVyLmhhbmRsZXIubmV4dF9yZXNwb25zZSA9ICcxOTknCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ0cGxpYi5lcnJvcl9yZXBseSwgc2VsZi5jbGllbnQuZGVsZXRlLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X3NpemUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnNpemUoJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9ta2Qoc2VsZik6CisgICAgICAgIGRpciA9IHNlbGYuY2xpZW50Lm1rZCgnL2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyLCAnL2ZvbycpCisKKyAgICBkZWYgdGVzdF9ybWQoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnJtZCgnZm9vJykKKworICAgIGRlZiB0ZXN0X3B3ZChzZWxmKToKKyAgICAgICAgZGlyID0gc2VsZi5jbGllbnQucHdkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIsICdwd2Qgb2snKQorCisgICAgZGVmIHRlc3RfcXVpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5xdWl0KCksICcyMjEgcXVpdCBvaycpCisgICAgICAgICMgRW5zdXJlIHRoZSBjb25uZWN0aW9uIGdldHMgY2xvc2VkOyBzb2NrIGF0dHJpYnV0ZSBzaG91bGQgYmUgTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnNvY2ssIE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZXRyYmluYXJ5KHNlbGYpOgorICAgICAgICByZWNlaXZlZCA9IFtdCisgICAgICAgIHNlbGYuY2xpZW50LnJldHJiaW5hcnkoJ3JldHInLCByZWNlaXZlZC5hcHBlbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihyZWNlaXZlZCksIFJFVFJfREFUQSkKKworICAgIGRlZiB0ZXN0X3JldHJiaW5hcnlfcmVzdChzZWxmKToKKyAgICAgICAgZm9yIHJlc3QgaW4gKDAsIDEwLCAyMCk6CisgICAgICAgICAgICByZWNlaXZlZCA9IFtdCisgICAgICAgICAgICBzZWxmLmNsaWVudC5yZXRyYmluYXJ5KCdyZXRyJywgcmVjZWl2ZWQuYXBwZW5kLCByZXN0PXJlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4ocmVjZWl2ZWQpLCBSRVRSX0RBVEFbcmVzdDpdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J3Jlc3QgdGVzdCBjYXNlICVkICVkICVkJyAlIChyZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oJycuam9pbihyZWNlaXZlZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oUkVUUl9EQVRBW3Jlc3Q6XSkpKQorCisgICAgZGVmIHRlc3RfcmV0cmxpbmVzKHNlbGYpOgorICAgICAgICByZWNlaXZlZCA9IFtdCisgICAgICAgIHNlbGYuY2xpZW50LnJldHJsaW5lcygncmV0cicsIHJlY2VpdmVkLmFwcGVuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKHJlY2VpdmVkKSwgUkVUUl9EQVRBLnJlcGxhY2UoJ1xyXG4nLCAnJykpCisKKyAgICBkZWYgdGVzdF9zdG9yYmluYXJ5KHNlbGYpOgorICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oUkVUUl9EQVRBKQorICAgICAgICBzZWxmLmNsaWVudC5zdG9yYmluYXJ5KCdzdG9yJywgZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLmxhc3RfcmVjZWl2ZWRfZGF0YSwgUkVUUl9EQVRBKQorICAgICAgICAjIHRlc3QgbmV3IGNhbGxiYWNrIGFyZworICAgICAgICBmbGFnID0gW10KKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHNlbGYuY2xpZW50LnN0b3JiaW5hcnkoJ3N0b3InLCBmLCBjYWxsYmFjaz1sYW1iZGEgeDogZmxhZy5hcHBlbmQoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbGFnKQorCisgICAgZGVmIHRlc3Rfc3RvcmJpbmFyeV9yZXN0KHNlbGYpOgorICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oUkVUUl9EQVRBKQorICAgICAgICBmb3IgciBpbiAoMzAsICczMCcpOgorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmNsaWVudC5zdG9yYmluYXJ5KCdzdG9yJywgZiwgcmVzdD1yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLnJlc3QsIHN0cihyKSkKKworICAgIGRlZiB0ZXN0X3N0b3JsaW5lcyhzZWxmKToKKyAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKFJFVFJfREFUQS5yZXBsYWNlKCdcclxuJywgJ1xuJykpCisgICAgICAgIHNlbGYuY2xpZW50LnN0b3JsaW5lcygnc3RvcicsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlci5sYXN0X3JlY2VpdmVkX2RhdGEsIFJFVFJfREFUQSkKKyAgICAgICAgIyB0ZXN0IG5ldyBjYWxsYmFjayBhcmcKKyAgICAgICAgZmxhZyA9IFtdCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBzZWxmLmNsaWVudC5zdG9ybGluZXMoJ3N0b3IgZm9vJywgZiwgY2FsbGJhY2s9bGFtYmRhIHg6IGZsYWcuYXBwZW5kKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmxhZykKKworICAgIGRlZiB0ZXN0X25sc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50Lm5sc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50Lm5sc3QoKSwgTkxTVF9EQVRBLnNwbGl0KCdcclxuJylbOi0xXSkKKworICAgIGRlZiB0ZXN0X2RpcihzZWxmKToKKyAgICAgICAgbCA9IFtdCisgICAgICAgIHNlbGYuY2xpZW50LmRpcihsYW1iZGEgeDogbC5hcHBlbmQoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihsKSwgTElTVF9EQVRBLnJlcGxhY2UoJ1xyXG4nLCAnJykpCisKKyAgICBkZWYgdGVzdF9tYWtlcG9ydChzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQubWFrZXBvcnQoKQorICAgICAgICAjIElQdjQgaXMgaW4gdXNlLCBqdXN0IG1ha2Ugc3VyZSBzZW5kX2VwcnQgaGFzIG5vdCBiZWVuIHVzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLmxhc3RfcmVjZWl2ZWRfY21kLCAncG9ydCcpCisKKyAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKKyAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgIyBJUHY0IGlzIGluIHVzZSwganVzdCBtYWtlIHN1cmUgc2VuZF9lcHN2IGhhcyBub3QgYmVlbiB1c2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlci5sYXN0X3JlY2VpdmVkX2NtZCwgJ3Bhc3YnKQorCisKK2NsYXNzIFRlc3RJUHY2RW52aXJvbm1lbnQoVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15RlRQU2VydmVyKChIT1NULCAwKSwgYWY9c29ja2V0LkFGX0lORVQ2KQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCgpCisgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQuY2xvc2UoKQorICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIGRlZiB0ZXN0X2FmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LmFmLCBzb2NrZXQuQUZfSU5FVDYpCisKKyAgICBkZWYgdGVzdF9tYWtlcG9ydChzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQubWFrZXBvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLmhhbmRsZXIubGFzdF9yZWNlaXZlZF9jbWQsICdlcHJ0JykKKworICAgIGRlZiB0ZXN0X21ha2VwYXN2KHNlbGYpOgorICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5jbGllbnQubWFrZXBhc3YoKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgMTApCisgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLmhhbmRsZXIubGFzdF9yZWNlaXZlZF9jbWQsICdlcHN2JykKKworICAgIGRlZiB0ZXN0X3RyYW5zZmVyKHNlbGYpOgorICAgICAgICBkZWYgcmV0cigpOgorICAgICAgICAgICAgcmVjZWl2ZWQgPSBbXQorICAgICAgICAgICAgc2VsZi5jbGllbnQucmV0cmJpbmFyeSgncmV0cicsIHJlY2VpdmVkLmFwcGVuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihyZWNlaXZlZCksIFJFVFJfREFUQSkKKyAgICAgICAgc2VsZi5jbGllbnQuc2V0X3Bhc3YoVHJ1ZSkKKyAgICAgICAgcmV0cigpCisgICAgICAgIHNlbGYuY2xpZW50LnNldF9wYXN2KEZhbHNlKQorICAgICAgICByZXRyKCkKKworCitjbGFzcyBUZXN0VExTX0ZUUENsYXNzTWl4aW4oVGVzdEZUUENsYXNzKToKKyAgICAiIiJSZXBlYXQgVGVzdEZUUENsYXNzIHRlc3RzIHN0YXJ0aW5nIHRoZSBUTFMgbGF5ZXIgZm9yIGJvdGggY29udHJvbAorICAgIGFuZCBkYXRhIGNvbm5lY3Rpb25zIGZpcnN0LgorICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15VExTX0ZUUFNlcnZlcigoSE9TVCwgMCkpCisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgICMgZW5hYmxlIFRMUworICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgc2VsZi5jbGllbnQucHJvdF9wKCkKKworCitjbGFzcyBUZXN0VExTX0ZUUENsYXNzKFRlc3RDYXNlKToKKyAgICAiIiJTcGVjaWZpYyBUTFNfRlRQIGNsYXNzIHRlc3RzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15VExTX0ZUUFNlcnZlcigoSE9TVCwgMCkpCisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9jb250cm9sX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuY2xpZW50LnNvY2ssIHNzbC5TU0xTb2NrZXQpCisKKyAgICBkZWYgdGVzdF9kYXRhX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICMgY2xlYXIgdGV4dAorICAgICAgICBzb2NrID0gc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQudm9pZHJlc3AoKSwgIjIyNiB0cmFuc2ZlciBjb21wbGV0ZSIpCisKKyAgICAgICAgIyBzZWN1cmVkLCBhZnRlciBQUk9UIFAKKyAgICAgICAgc2VsZi5jbGllbnQucHJvdF9wKCkKKyAgICAgICAgc29jayA9IHNlbGYuY2xpZW50LnRyYW5zZmVyY21kKCdsaXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNvY2ssIHNzbC5TU0xTb2NrZXQpCisgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnZvaWRyZXNwKCksICIyMjYgdHJhbnNmZXIgY29tcGxldGUiKQorCisgICAgICAgICMgUFJPVCBDIGlzIGlzc3VlZCwgdGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBpbiBjbGVhcnRleHQgYWdhaW4KKyAgICAgICAgc2VsZi5jbGllbnQucHJvdF9jKCkKKyAgICAgICAgc29jayA9IHNlbGYuY2xpZW50LnRyYW5zZmVyY21kKCdsaXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHNvY2ssIHNzbC5TU0xTb2NrZXQpCisgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnZvaWRyZXNwKCksICIyMjYgdHJhbnNmZXIgY29tcGxldGUiKQorCisgICAgZGVmIHRlc3RfbG9naW4oc2VsZik6CisgICAgICAgICMgbG9naW4oKSBpcyBzdXBwb3NlZCB0byBpbXBsaWNpdGx5IHNlY3VyZSB0aGUgY29udHJvbCBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzZWxmLmNsaWVudC5sb2dpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IEFVVEggVExTIGRvZXNuJ3QgZ2V0IGlzc3VlZCBhZ2FpbgorICAgICAgICBzZWxmLmNsaWVudC5sb2dpbigpCisKKyAgICBkZWYgdGVzdF9hdXRoX2lzc3VlZF90d2ljZShzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LmF1dGgpCisKKyAgICBkZWYgdGVzdF9hdXRoX3NzbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jbGllbnQuc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfU1NMdjMKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5jbGllbnQuYXV0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnNzbF92ZXJzaW9uID0gc3NsLlBST1RPQ09MX1RMU3YxCisKKworY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5zZXJ2ZXIsIGFyZ3M9KHNlbGYuZXZ0LHNlbGYuc29jaykpLnN0YXJ0KCkKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgc2VydmVyIHRvIGJlIHJlYWR5LgorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgc2VsZi5ldnQuY2xlYXIoKQorICAgICAgICBmdHBsaWIuRlRQLnBvcnQgPSBzZWxmLnBvcnQKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisKKyAgICBkZWYgc2VydmVyKHNlbGYsIGV2dCwgc2Vydik6CisgICAgICAgICMgVGhpcyBtZXRob2Qgc2V0cyB0aGUgZXZ0IDMgdGltZXM6CisgICAgICAgICMgIDEpIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgcmVhZHkgdG8gYmUgYWNjZXB0ZWQuCisgICAgICAgICMgIDIpIHdoZW4gaXQgaXMgc2FmZSBmb3IgdGhlIGNhbGxlciB0byBjbG9zZSB0aGUgY29ubmVjdGlvbgorICAgICAgICAjICAzKSB3aGVuIHdlIGhhdmUgY2xvc2VkIHRoZSBzb2NrZXQKKyAgICAgICAgc2Vydi5saXN0ZW4oNSkKKyAgICAgICAgIyAoMSkgU2lnbmFsIHRoZSBjYWxsZXIgdGhhdCB3ZSBhcmUgcmVhZHkgdG8gYWNjZXB0IHRoZSBjb25uZWN0aW9uLgorICAgICAgICBldnQuc2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlcnYuYWNjZXB0KCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29ubi5zZW5kKCIxIEhvbGEgbXVuZG9cbiIpCisgICAgICAgICAgICAjICgyKSBTaWduYWwgdGhlIGNhbGxlciB0aGF0IGl0IGlzIHNhZmUgdG8gY2xvc2UgdGhlIHNvY2tldC4KKyAgICAgICAgICAgIGV2dC5zZXQoKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZXJ2LmNsb3NlKCkKKyAgICAgICAgICAgICMgKDMpIFNpZ25hbCB0aGUgY2FsbGVyIHRoYXQgd2UgYXJlIGRvbmUuCisgICAgICAgICAgICBldnQuc2V0KCkKKworICAgIGRlZiB0ZXN0VGltZW91dERlZmF1bHQoc2VsZik6CisgICAgICAgICMgZGVmYXVsdCAtLSB1c2UgZ2xvYmFsIHNvY2tldCB0aW1lb3V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMzApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ0cCA9IGZ0cGxpYi5GVFAoImxvY2FsaG9zdCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHAuc29jay5nZXR0aW1lb3V0KCksIDMwKQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgZnRwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dE5vbmUoc2VsZik6CisgICAgICAgICMgbm8gdGltZW91dCAtLSBkbyBub3QgdXNlIGdsb2JhbCBzb2NrZXQgdGltZW91dAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdHAgPSBmdHBsaWIuRlRQKCJsb2NhbGhvc3QiLCB0aW1lb3V0PU5vbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ0cC5zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgZnRwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dFZhbHVlKHNlbGYpOgorICAgICAgICAjIGEgdmFsdWUKKyAgICAgICAgZnRwID0gZnRwbGliLkZUUChIT1NULCB0aW1lb3V0PTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBmdHAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RUaW1lb3V0Q29ubmVjdChzZWxmKToKKyAgICAgICAgZnRwID0gZnRwbGliLkZUUCgpCisgICAgICAgIGZ0cC5jb25uZWN0KEhPU1QsIHRpbWVvdXQ9MzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIGZ0cC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXREaWZmZXJlbnRPcmRlcihzZWxmKToKKyAgICAgICAgZnRwID0gZnRwbGliLkZUUCh0aW1lb3V0PTMwKQorICAgICAgICBmdHAuY29ubmVjdChIT1NUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBmdHAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RUaW1lb3V0RGlyZWN0QWNjZXNzKHNlbGYpOgorICAgICAgICBmdHAgPSBmdHBsaWIuRlRQKCkKKyAgICAgICAgZnRwLnRpbWVvdXQgPSAzMAorICAgICAgICBmdHAuY29ubmVjdChIT1NUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBmdHAuY2xvc2UoKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0cyA9IFtUZXN0RlRQQ2xhc3MsIFRlc3RUaW1lb3V0c10KKyAgICBpZiBzb2NrZXQuaGFzX2lwdjY6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIER1bW15RlRQU2VydmVyKChIT1NULCAwKSwgYWY9c29ja2V0LkFGX0lORVQ2KQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVzdHMuYXBwZW5kKFRlc3RJUHY2RW52aXJvbm1lbnQpCisKKyAgICBpZiBzc2wgaXMgbm90IE5vbmU6CisgICAgICAgIHRlc3RzLmV4dGVuZChbVGVzdFRMU19GVFBDbGFzc01peGluLCBUZXN0VExTX0ZUUENsYXNzXSkKKworICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgdHJ5OgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKyAgICBmaW5hbGx5OgorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnRocmVhZF9pbmZvKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjM5Y2EyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CkBAIC0wLDAgKzEsMzUzIEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgRnVuY0F0dHJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBGOgorICAgICAgICAgICAgZGVmIGEoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgYigpOgorICAgICAgICAgICAgcmV0dXJuIDMKKyAgICAgICAgc2VsZi5mID0gRgorICAgICAgICBzZWxmLmZpID0gRigpCisgICAgICAgIHNlbGYuYiA9IGIKKworICAgIGRlZiBjYW5ub3Rfc2V0X2F0dHIoc2VsZiwgb2JqLCBuYW1lLCB2YWx1ZSwgZXhjZXB0aW9ucyk6CisgICAgICAgICMgSGVscGVyIG1ldGhvZCBmb3Igb3RoZXIgdGVzdHMuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNldGF0dHIob2JqLCBuYW1lLCB2YWx1ZSkKKyAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbnM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBiZSBhYmxlIHRvIHNldCAlcyB0byAlciIgJSAobmFtZSwgdmFsdWUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWxhdHRyKG9iaiwgbmFtZSkKKyAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbnM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBiZSBhYmxlIHRvIGRlbCAlcyIgJSBuYW1lKQorCisKK2NsYXNzIEZ1bmN0aW9uUHJvcGVydGllc1Rlc3QoRnVuY0F0dHJzVGVzdCk6CisgICAgIyBJbmNsdWRlIHRoZSBleHRlcm5hbCBzZXRVcCBtZXRob2QgdGhhdCBpcyBjb21tb24gdG8gYWxsIHRlc3RzCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX21vZHVsZV9fLCBfX25hbWVfXykKKworICAgIGRlZiB0ZXN0X2Rpcl9pbmNsdWRlc19jb3JyZWN0X2F0dHJzKHNlbGYpOgorICAgICAgICBzZWxmLmIua25vd25fYXR0ciA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRJbigna25vd25fYXR0cicsIGRpcihzZWxmLmIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNldCBhdHRyaWJ1dGVzIG5vdCBpbiBkaXIgbGlzdGluZyBvZiBtZXRob2QiKQorICAgICAgICAjIFRlc3Qgb24gdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3Qgb2YgbWV0aG9kCisgICAgICAgIHNlbGYuZi5hLmltX2Z1bmMua25vd25fYXR0ciA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRJbigna25vd25fYXR0cicsIGRpcihzZWxmLmYuYSksCisgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGF0dHJpYnV0ZSBvbiB1bmJvdW5kIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3Mgbm90IGluIGRpciIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2tub3duX2F0dHInLCBkaXIoc2VsZi5maS5hKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgYXR0cmlidXRlIG9uIHVuYm91bmQgbWV0aG9kIGltcGxlbWVudGF0aW9ucywgIgorICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBzaG93IHVwIGluIG5leHQgZGlyIikKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9mdW5jdGlvbl9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgIyBCb2R5IG9mIGBkdXBsaWNhdGUnIGlzIHRoZSBleGFjdCBzYW1lIGFzIHNlbGYuYgorICAgICAgICBkZWYgZHVwbGljYXRlKCk6CisgICAgICAgICAgICAnbXkgZG9jc3RyaW5nJworICAgICAgICAgICAgcmV0dXJuIDMKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmIsIGR1cGxpY2F0ZSkKKworICAgIGRlZiB0ZXN0X2NvcHlpbmdfZnVuY19jb2RlKHNlbGYpOgorICAgICAgICBkZWYgdGVzdCgpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdCgpLCBOb25lKQorICAgICAgICB0ZXN0LmZ1bmNfY29kZSA9IHNlbGYuYi5mdW5jX2NvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0KCksIDMpICMgc2VsZi5iIGFsd2F5cyByZXR1cm5zIDMsIGFyYml0cmFyaWx5CisKKyAgICBkZWYgdGVzdF9mdW5jX2dsb2JhbHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5iLmZ1bmNfZ2xvYmFscywgZ2xvYmFscygpKQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmIsICdmdW5jX2dsb2JhbHMnLCAyLCBUeXBlRXJyb3IpCisKKyAgICBkZWYgdGVzdF9mdW5jX2Nsb3N1cmUoc2VsZik6CisgICAgICAgIGEgPSAxMgorICAgICAgICBkZWYgZigpOiBwcmludCBhCisgICAgICAgIGMgPSBmLmZ1bmNfY2xvc3VyZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICAjIGRvbid0IGhhdmUgYSB0eXBlIG9iamVjdCBoYW5keQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbMF0uX19jbGFzc19fLl9fbmFtZV9fLCAiY2VsbCIpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKGYsICJmdW5jX2Nsb3N1cmUiLCBjLCBUeXBlRXJyb3IpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9jZWxsKHNlbGYpOgorICAgICAgICBkZWYgZigpOiBwcmludCBhCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuZnVuY19jbG9zdXJlWzBdLmNlbGxfY29udGVudHMKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBiZSBhYmxlIHRvIHJlYWQgYW4gZW1wdHkgY2VsbCIpCisgICAgICAgIGEgPSAxMgorCisgICAgZGVmIHRlc3RfZnVuY19uYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX25hbWVfXywgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5mdW5jX25hbWUsICdiJykKKyAgICAgICAgc2VsZi5iLl9fbmFtZV9fID0gJ2MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fbmFtZV9fLCAnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfbmFtZSwgJ2MnKQorICAgICAgICBzZWxmLmIuZnVuY19uYW1lID0gJ2QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fbmFtZV9fLCAnZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfbmFtZSwgJ2QnKQorICAgICAgICAjIF9fbmFtZV9fIGFuZCBmdW5jX25hbWUgbXVzdCBiZSBhIHN0cmluZworICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmIsICdfX25hbWVfXycsIDcsIFR5cGVFcnJvcikKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5iLCAnZnVuY19uYW1lJywgNywgVHlwZUVycm9yKQorICAgICAgICAjIF9fbmFtZV9fIG11c3QgYmUgYXZhaWxhYmxlIHdoZW4gaW4gcmVzdHJpY3RlZCBtb2RlLiBFeGVjIHdpbGwgcmFpc2UKKyAgICAgICAgIyBBdHRyaWJ1dGVFcnJvciBpZiBfX25hbWVfXyBpcyBub3QgYXZhaWxhYmxlIG9uIGYuCisgICAgICAgIHMgPSAiIiJkZWYgZigpOiBwYXNzXG5mLl9fbmFtZV9fIiIiCisgICAgICAgIGV4ZWMgcyBpbiB7J19fYnVpbHRpbnNfXyc6IHt9fQorICAgICAgICAjIFRlc3Qgb24gbWV0aG9kcywgdG9vCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmEuX19uYW1lX18sICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpLmEuX19uYW1lX18sICdhJykKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5mLmEsICJfX25hbWVfXyIsICdhJywgQXR0cmlidXRlRXJyb3IpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZmkuYSwgIl9fbmFtZV9fIiwgJ2EnLCBBdHRyaWJ1dGVFcnJvcikKKworICAgIGRlZiB0ZXN0X2Z1bmNfY29kZShzZWxmKToKKyAgICAgICAgbnVtX29uZSwgbnVtX3R3byA9IDcsIDgKKyAgICAgICAgZGVmIGEoKTogcGFzcworICAgICAgICBkZWYgYigpOiByZXR1cm4gMTIKKyAgICAgICAgZGVmIGMoKTogcmV0dXJuIG51bV9vbmUKKyAgICAgICAgZGVmIGQoKTogcmV0dXJuIG51bV90d28KKyAgICAgICAgZGVmIGUoKTogcmV0dXJuIG51bV9vbmUsIG51bV90d28KKyAgICAgICAgZm9yIGZ1bmMgaW4gW2EsIGIsIGMsIGQsIGVdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGZ1bmMuZnVuY19jb2RlKSwgdHlwZXMuQ29kZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYygpLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQoKSwgOCkKKyAgICAgICAgZC5mdW5jX2NvZGUgPSBjLmZ1bmNfY29kZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZnVuY19jb2RlLCBkLmZ1bmNfY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjKCksIDcpCisgICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChkKCksIDcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGIuZnVuY19jb2RlID0gYy5mdW5jX2NvZGUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImZ1bmNfY29kZSB3aXRoIGRpZmZlcmVudCBudW1iZXJzIG9mIGZyZWUgdmFycyBzaG91bGQgIgorICAgICAgICAgICAgICAgICAgICAgICJub3QgYmUgcG9zc2libGUiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlLmZ1bmNfY29kZSA9IGQuZnVuY19jb2RlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJmdW5jX2NvZGUgd2l0aCBkaWZmZXJlbnQgbnVtYmVycyBvZiBmcmVlIHZhcnMgc2hvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgICAibm90IGJlIHBvc3NpYmxlIikKKworICAgIGRlZiB0ZXN0X2JsYW5rX2Z1bmNfZGVmYXVsdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfZGVmYXVsdHMsIE5vbmUpCisgICAgICAgIGRlbCBzZWxmLmIuZnVuY19kZWZhdWx0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5mdW5jX2RlZmF1bHRzLCBOb25lKQorCisgICAgZGVmIHRlc3RfZnVuY19kZWZhdWx0X2FyZ3Moc2VsZik6CisgICAgICAgIGRlZiBmaXJzdF9mdW5jKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGErYgorICAgICAgICBkZWYgc2Vjb25kX2Z1bmMoYT0xLCBiPTIpOgorICAgICAgICAgICAgcmV0dXJuIGErYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X2Z1bmMuZnVuY19kZWZhdWx0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWNvbmRfZnVuYy5mdW5jX2RlZmF1bHRzLCAoMSwgMikpCisgICAgICAgIGZpcnN0X2Z1bmMuZnVuY19kZWZhdWx0cyA9ICgxLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X2Z1bmMuZnVuY19kZWZhdWx0cywgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X2Z1bmMoKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9mdW5jKDMpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X2Z1bmMoMywgNSksIDgpCisgICAgICAgIGRlbCBzZWNvbmRfZnVuYy5mdW5jX2RlZmF1bHRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kX2Z1bmMuZnVuY19kZWZhdWx0cywgTm9uZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2Vjb25kX2Z1bmMoKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJmdW5jX2RlZmF1bHRzIGRvZXMgbm90IHVwZGF0ZTsgZGVsZXRpbmcgaXQgZG9lcyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmUgcmVxdWlyZW1lbnQiKQorCisKK2NsYXNzIEluc3RhbmNlbWV0aG9kQXR0clRlc3QoRnVuY0F0dHJzVGVzdCk6CisgICAgZGVmIHRlc3RfaW1fY2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmEuaW1fY2xhc3MsIHNlbGYuZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpLmEuaW1fY2xhc3MsIHNlbGYuZikKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5mLmEsICJpbV9jbGFzcyIsIHNlbGYuZiwgVHlwZUVycm9yKQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmZpLmEsICJpbV9jbGFzcyIsIHNlbGYuZiwgVHlwZUVycm9yKQorCisgICAgZGVmIHRlc3RfaW1fZnVuYyhzZWxmKToKKyAgICAgICAgc2VsZi5mLmIgPSBzZWxmLmIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuYi5pbV9mdW5jLCBzZWxmLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5iLmltX2Z1bmMsIHNlbGYuYikKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5mLmIsICJpbV9mdW5jIiwgc2VsZi5iLCBUeXBlRXJyb3IpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZmkuYiwgImltX2Z1bmMiLCBzZWxmLmIsIFR5cGVFcnJvcikKKworICAgIGRlZiB0ZXN0X2ltX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmEuaW1fc2VsZiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpLmEuaW1fc2VsZiwgc2VsZi5maSkKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5mLmEsICJpbV9zZWxmIiwgTm9uZSwgVHlwZUVycm9yKQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmZpLmEsICJpbV9zZWxmIiwgc2VsZi5maSwgVHlwZUVycm9yKQorCisgICAgZGVmIHRlc3RfaW1fZnVuY19ub25fbWV0aG9kKHNlbGYpOgorICAgICAgICAjIEJlaGF2aW9yIHNob3VsZCBiZSB0aGUgc2FtZSB3aGVuIGEgbWV0aG9kIGlzIGFkZGVkIHZpYSBhbiBhdHRyCisgICAgICAgICMgYXNzaWdubWVudAorICAgICAgICBzZWxmLmYuaWQgPSB0eXBlcy5NZXRob2RUeXBlKGlkLCBOb25lLCBzZWxmLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5pZCgpLCBpZChzZWxmLmZpKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmZpLmlkKCksIGlkKHNlbGYuZikpCisgICAgICAgICMgVGVzdCB1c2FnZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmYuaWQudW5rbm93bl9hdHRyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidXNpbmcgdW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisgICAgICAgICMgVGVzdCBhc3NpZ25tZW50IGFuZCBkZWxldGlvbgorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmYuaWQsICd1bmtub3duX2F0dHInLCAyLCBBdHRyaWJ1dGVFcnJvcikKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5maS5pZCwgJ3Vua25vd25fYXR0cicsIDIsIEF0dHJpYnV0ZUVycm9yKQorCisgICAgZGVmIHRlc3RfaW1wbGljaXRfbWV0aG9kX3Byb3BlcnRpZXMoc2VsZik6CisgICAgICAgIHNlbGYuZi5hLmltX2Z1bmMua25vd25fYXR0ciA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuYS5rbm93bl9hdHRyLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmkuYS5rbm93bl9hdHRyLCA3KQorCisKK2NsYXNzIEFyYml0cmFyeUZ1bmN0aW9uQXR0clRlc3QoRnVuY0F0dHJzVGVzdCk6CisgICAgZGVmIHRlc3Rfc2V0X2F0dHIoc2VsZik6CisgICAgICAgICMgc2V0dGluZyBhdHRyaWJ1dGVzIG9ubHkgd29ya3Mgb24gZnVuY3Rpb24gb2JqZWN0cworICAgICAgICBzZWxmLmIua25vd25fYXR0ciA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIua25vd25fYXR0ciwgNykKKyAgICAgICAgZm9yIGZ1bmMgaW4gW3NlbGYuZi5hLCBzZWxmLmZpLmFdOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMua25vd25fYXR0ciA9IDcKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2V0dGluZyBhdHRyaWJ1dGVzIG9uIG1ldGhvZHMgc2hvdWxkIHJhaXNlIGVycm9yIikKKworICAgIGRlZiB0ZXN0X2RlbGV0ZV91bmtub3duX2F0dHIoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmIudW5rbm93bl9hdHRyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGVsZXRpbmcgdW5rbm93biBhdHRyaWJ1dGUgc2hvdWxkIHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICBkZWYgdGVzdF9zZXR0aW5nX2F0dHJzX2R1cGxpY2F0ZXMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZi5hLmtsYXNzID0gc2VsZi5mCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2V0dGluZyBhcmJpdHJhcnkgYXR0cmlidXRlIGluIHVuYm91bmQgZnVuY3Rpb24gIgorICAgICAgICAgICAgICAgICAgICAgICIgc2hvdWxkIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKKyAgICAgICAgc2VsZi5mLmEuaW1fZnVuYy5rbGFzcyA9IHNlbGYuZgorICAgICAgICBmb3IgbWV0aG9kIGluIFtzZWxmLmYuYSwgc2VsZi5maS5hLCBzZWxmLmZpLmEuaW1fZnVuY106CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGhvZC5rbGFzcywgc2VsZi5mKQorCisgICAgZGVmIHRlc3RfdW5zZXRfYXR0cihzZWxmKToKKyAgICAgICAgZm9yIGZ1bmMgaW4gW3NlbGYuYiwgc2VsZi5mLmEsIHNlbGYuZmkuYV06CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnVuYy5ub25fZXhpc3RlbnRfYXR0cgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1c2luZyB1bmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIHJhaXNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkF0dHJpYnV0ZUVycm9yIikKKworCitjbGFzcyBGdW5jdGlvbkRpY3RzVGVzdChGdW5jQXR0cnNUZXN0KToKKyAgICBkZWYgdGVzdF9zZXR0aW5nX2RpY3RfdG9faW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5iLCAnX19kaWN0X18nLCBOb25lLCBUeXBlRXJyb3IpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuYiwgJ2Z1bmNfZGljdCcsIE5vbmUsIFR5cGVFcnJvcikKKyAgICAgICAgZnJvbSBVc2VyRGljdCBpbXBvcnQgVXNlckRpY3QKKyAgICAgICAgZCA9IFVzZXJEaWN0KHsna25vd25fYXR0cic6IDd9KQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmYuYS5pbV9mdW5jLCAnX19kaWN0X18nLCBkLCBUeXBlRXJyb3IpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZmkuYS5pbV9mdW5jLCAnX19kaWN0X18nLCBkLCBUeXBlRXJyb3IpCisKKyAgICBkZWYgdGVzdF9zZXR0aW5nX2RpY3RfdG9fdmFsaWQoc2VsZik6CisgICAgICAgIGQgPSB7J2tub3duX2F0dHInOiA3fQorICAgICAgICBzZWxmLmIuX19kaWN0X18gPSBkCisgICAgICAgICMgU2V0dGluZyBkaWN0IGlzIG9ubHkgcG9zc2libGUgb24gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0cworICAgICAgICBzZWxmLmYuYS5pbV9mdW5jLl9fZGljdF9fID0gZAorICAgICAgICAjIFRlc3QgYXNzaWdubWVudAorICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuYi5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLCBzZWxmLmIuZnVuY19kaWN0KQorICAgICAgICAjIC4uLiBhbmQgb24gYWxsIHRoZSBkaWZmZXJlbnQgd2F5cyBvZiByZWZlcmVuY2luZyB0aGUgbWV0aG9kJ3MgZnVuYworICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuZi5hLmltX2Z1bmMuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZCwgc2VsZi5mLmEuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZCwgc2VsZi5maS5hLmltX2Z1bmMuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZCwgc2VsZi5maS5hLl9fZGljdF9fKQorICAgICAgICAjIFRlc3QgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIua25vd25fYXR0ciwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19kaWN0X19bJ2tub3duX2F0dHInXSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuZnVuY19kaWN0Wydrbm93bl9hdHRyJ10sIDcpCisgICAgICAgICMgLi4uIGFuZCBhZ2Fpbiwgb24gYWxsIHRoZSBkaWZmZXJlbnQgbWV0aG9kJ3MgbmFtZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuYS5pbV9mdW5jLmtub3duX2F0dHIsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmEua25vd25fYXR0ciwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpLmEuaW1fZnVuYy5rbm93bl9hdHRyLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmkuYS5rbm93bl9hdHRyLCA3KQorCisgICAgZGVmIHRlc3RfZGVsZXRlX2Z1bmNfZGljdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuYi5fX2RpY3RfXworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJkZWxldGluZyBmdW5jdGlvbiBkaWN0aW9uYXJ5IHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5iLmZ1bmNfZGljdAorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJkZWxldGluZyBmdW5jdGlvbiBkaWN0aW9uYXJ5IHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfdW5hc3NpZ25lZF9kaWN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX2RpY3RfXywge30pCisKKyAgICBkZWYgdGVzdF9mdW5jX2FzX2RpY3Rfa2V5KHNlbGYpOgorICAgICAgICB2YWx1ZSA9ICJTb21lIHN0cmluZyIKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGRbc2VsZi5iXSA9IHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtzZWxmLmJdLCB2YWx1ZSkKKworCitjbGFzcyBGdW5jdGlvbkRvY3N0cmluZ1Rlc3QoRnVuY0F0dHJzVGVzdCk6CisgICAgZGVmIHRlc3Rfc2V0X2RvY3N0cmluZ19hdHRyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX2RvY19fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5mdW5jX2RvYywgTm9uZSkKKyAgICAgICAgZG9jc3RyID0gIkEgdGVzdCBtZXRob2QgdGhhdCBkb2VzIG5vdGhpbmciCisgICAgICAgIHNlbGYuYi5fX2RvY19fID0gc2VsZi5mLmEuaW1fZnVuYy5fX2RvY19fID0gZG9jc3RyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fZG9jX18sIGRvY3N0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuZnVuY19kb2MsIGRvY3N0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuYS5fX2RvY19fLCBkb2NzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5hLl9fZG9jX18sIGRvY3N0cikKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5mLmEsICJfX2RvY19fIiwgZG9jc3RyLCBBdHRyaWJ1dGVFcnJvcikKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5maS5hLCAiX19kb2NfXyIsIGRvY3N0ciwgQXR0cmlidXRlRXJyb3IpCisKKyAgICBkZWYgdGVzdF9kZWxldGVfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmIuX19kb2NfXyA9ICJUaGUgZG9jc3RyaW5nIgorICAgICAgICBkZWwgc2VsZi5iLl9fZG9jX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19kb2NfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuZnVuY19kb2MsIE5vbmUpCisgICAgICAgIHNlbGYuYi5mdW5jX2RvYyA9ICJUaGUgZG9jc3RyaW5nIgorICAgICAgICBkZWwgc2VsZi5iLmZ1bmNfZG9jCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfZG9jLCBOb25lKQorCisKK2NsYXNzIFN0YXRpY01ldGhvZEF0dHJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZnVuY19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYyA9IGNsYXNzbWV0aG9kKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLl9fZnVuY19fIGlzIGYpCisKKyAgICAgICAgcyA9IHN0YXRpY21ldGhvZChmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5fX2Z1bmNfXyBpcyBmKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEZ1bmN0aW9uUHJvcGVydGllc1Rlc3QsIEluc3RhbmNlbWV0aG9kQXR0clRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmJpdHJhcnlGdW5jdGlvbkF0dHJUZXN0LCBGdW5jdGlvbkRpY3RzVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uRG9jc3RyaW5nVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY01ldGhvZEF0dHJzVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzI0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTAsMCArMSw0OTcgQEAKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2ltcG9ydCBwaWNrbGUKKworQHN0YXRpY21ldGhvZAorZGVmIFB5dGhvblBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgorICAgICdQdXJlIFB5dGhvbiBhcHByb3hpbWF0aW9uIG9mIHBhcnRpYWwoKScKKyAgICBkZWYgbmV3ZnVuYygqZmFyZ3MsICoqZmtleXdvcmRzKToKKyAgICAgICAgbmV3a2V5d29yZHMgPSBrZXl3b3Jkcy5jb3B5KCkKKyAgICAgICAgbmV3a2V5d29yZHMudXBkYXRlKGZrZXl3b3JkcykKKyAgICAgICAgcmV0dXJuIGZ1bmMoKihhcmdzICsgZmFyZ3MpLCAqKm5ld2tleXdvcmRzKQorICAgIG5ld2Z1bmMuZnVuYyA9IGZ1bmMKKyAgICBuZXdmdW5jLmFyZ3MgPSBhcmdzCisgICAgbmV3ZnVuYy5rZXl3b3JkcyA9IGtleXdvcmRzCisgICAgcmV0dXJuIG5ld2Z1bmMKKworZGVmIGNhcHR1cmUoKmFyZ3MsICoqa3cpOgorICAgICIiImNhcHR1cmUgYWxsIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzIiIiCisgICAgcmV0dXJuIGFyZ3MsIGt3CisKK2RlZiBzaWduYXR1cmUocGFydCk6CisgICAgIiIiIHJldHVybiB0aGUgc2lnbmF0dXJlIG9mIGEgcGFydGlhbCBvYmplY3QgIiIiCisgICAgcmV0dXJuIChwYXJ0LmZ1bmMsIHBhcnQuYXJncywgcGFydC5rZXl3b3JkcywgcGFydC5fX2RpY3RfXykKKworY2xhc3MgVGVzdFBhcnRpYWwodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdGhldHlwZSA9IGZ1bmN0b29scy5wYXJ0aWFsCisKKyAgICBkZWYgdGVzdF9iYXNpY19leGFtcGxlcyhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoMywgNCwgYj0zMCwgYz00MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgxLCAyLCAzLCA0KSwgZGljdChhPTEwLCBiPTMwLCBjPTQwKSkpCisgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUobWFwLCBsYW1iZGEgeDogeCoxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKFsxLDIsMyw0XSksIFsxMCwgMjAsIDMwLCA0MF0pCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgICMgYXR0cmlidXRlcyBzaG91bGQgYmUgcmVhZGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmZ1bmMsIGNhcHR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hcmdzLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5rZXl3b3JkcywgZGljdChhPTEwLCBiPTIwKSkKKyAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBub3QgYmUgd3JpdGFibGUKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi50aGV0eXBlLCB0eXBlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHAsICdmdW5jJywgbWFwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHAsICdhcmdzJywgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHAsICdrZXl3b3JkcycsIGRpY3QoYT0xLCBiPTIpKQorCisgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoaGV4KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgcC5fX2RpY3RfXworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQorCisgICAgZGVmIHRlc3RfYXJndW1lbnRfY2hlY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGV0eXBlKSAgICAgIyBuZWVkIGF0IGxlYXN0IGEgZnVuYyBhcmcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50aGV0eXBlKDIpKCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRmlyc3QgYXJnIG5vdCBjaGVja2VkIGZvciBjYWxsYWJpbGl0eScpCisKKyAgICBkZWYgdGVzdF9wcm90ZWN0aW9uX29mX2NhbGxlcnNfZGljdF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgIyBhIGNhbGxlcidzIGRpY3Rpb25hcnkgc2hvdWxkIG5vdCBiZSBhbHRlcmVkIGJ5IHBhcnRpYWwKKyAgICAgICAgZGVmIGZ1bmMoYT0xMCwgYj0yMCk6CisgICAgICAgICAgICByZXR1cm4gYQorICAgICAgICBkID0geydhJzozfQorICAgICAgICBwID0gc2VsZi50aGV0eXBlKGZ1bmMsIGE9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCoqZCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydhJzozfSkKKyAgICAgICAgcChiPTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydhJzozfSkKKworICAgIGRlZiB0ZXN0X2FyZ19jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgICMgZXhlcmNpc2Ugc3BlY2lhbCBjb2RlIHBhdGhzIGZvciB6ZXJvIGFyZ3MgaW4gZWl0aGVyIHBhcnRpYWwKKyAgICAgICAgIyBvYmplY3Qgb3IgdGhlIGNhbGxlcgorICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDEsMiksICgoMSwyKSwge30pKQorICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKDEsMiksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsNCksICgoMSwyLDMsNCksIHt9KSkKKworICAgIGRlZiB0ZXN0X2t3X2NvbWJpbmF0aW9ucyhzZWxmKToKKyAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIG5vIGtleXdvcmQgYXJncyBpbgorICAgICAgICAjIGVpdGhlciB0aGUgcGFydGlhbCBvYmplY3Qgb3IgdGhlIGNhbGxlcgorICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKGE9MSksICgoKSwgeydhJzoxfSkpCisgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgYT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7J2EnOjF9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKGI9MiksICgoKSwgeydhJzoxLCAnYic6Mn0pKQorICAgICAgICAjIGtleXdvcmQgYXJncyBpbiB0aGUgY2FsbCBvdmVycmlkZSB0aG9zZSBpbiB0aGUgcGFydGlhbCBvYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKGE9MywgYj0yKSwgKCgpLCB7J2EnOjMsICdiJzoyfSkpCisKKyAgICBkZWYgdGVzdF9wb3NpdGlvbmFsKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgY29ycmVjdGx5CisgICAgICAgIGZvciBhcmdzIGluIFsoKSwgKDAsKSwgKDAsMSksICgwLDEsMiksICgwLDEsMiwzKV06CisgICAgICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBhcmdzICsgKCd4JywpCisgICAgICAgICAgICBnb3QsIGVtcHR5ID0gcCgneCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgPT0gZ290IGFuZCBlbXB0eSA9PSB7fSkKKworICAgIGRlZiB0ZXN0X2tleXdvcmQoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGtleXdvcmQgYXJndW1lbnRzIGFyZSBjYXB0dXJlZCBjb3JyZWN0bHkKKyAgICAgICAgZm9yIGEgaW4gWydhJywgMCwgTm9uZSwgMy41XToKKyAgICAgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgYT1hKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J2EnOmEsJ3gnOk5vbmV9CisgICAgICAgICAgICBlbXB0eSwgZ290ID0gcCh4PU5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgPT0gZ290IGFuZCBlbXB0eSA9PSAoKSkKKworICAgIGRlZiB0ZXN0X25vX3NpZGVfZWZmZWN0cyhzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cyB0aGF0IGFmZmVjdCBzdWJzZXF1ZW50IGNhbGxzCisgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgMCwgYT0xKQorICAgICAgICBhcmdzMSwga3cxID0gcCgxLCBiPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcmdzMSA9PSAoMCwxKSBhbmQga3cxID09IHsnYSc6MSwnYic6Mn0pCisgICAgICAgIGFyZ3MyLCBrdzIgPSBwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3MyID09ICgwLCkgYW5kIGt3MiA9PSB7J2EnOjF9KQorCisgICAgZGVmIHRlc3RfZXJyb3JfcHJvcGFnYXRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKHgsIHkpOgorICAgICAgICAgICAgeCAvLyB5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiwgMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiwgMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiksIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiwgeT0wKSwgMSkKKworICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoaW50LCBiYXNlPTE2KQorICAgICAgICBwID0gcHJveHkoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZ1bmMsIHAuZnVuYykKKyAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVmZXJlbmNlRXJyb3IsIGdldGF0dHIsIHAsICdmdW5jJykKKworICAgIGRlZiB0ZXN0X3dpdGhfYm91bmRfYW5kX3VuYm91bmRfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgZGF0YSA9IG1hcChzdHIsIHJhbmdlKDEwKSkKKyAgICAgICAgam9pbiA9IHNlbGYudGhldHlwZShzdHIuam9pbiwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQorICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKCcnLmpvaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi50aGV0eXBlKHNpZ25hdHVyZSwgJ2FzZGYnLCBiYXI9VHJ1ZSkKKyAgICAgICAgZi5hZGRfc29tZXRoaW5nX3RvX19kaWN0X18gPSBUcnVlCisgICAgICAgIGZfY29weSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKGYpLCBzaWduYXR1cmUoZl9jb3B5KSkKKworICAgICMgSXNzdWUgNjA4MzogUmVmZXJlbmNlIGNvdW50aW5nIGJ1ZworICAgIGRlZiB0ZXN0X3NldHN0YXRlX3JlZmNvdW50KHNlbGYpOgorICAgICAgICBjbGFzcyBCYWRTZXF1ZW5jZToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1heAorICAgICAgICAgICAgICAgIGVsaWYga2V5ID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0dXBsZShyYW5nZSgxMDAwMDAwKSkKKyAgICAgICAgICAgICAgICBlbGlmIGtleSBpbiAoMiwgMyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fQorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgICAgICBmID0gc2VsZi50aGV0eXBlKG9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIGYuX19zZXRzdGF0ZV9fLCBCYWRTZXF1ZW5jZSgpKQorCitjbGFzcyBQYXJ0aWFsU3ViY2xhc3MoZnVuY3Rvb2xzLnBhcnRpYWwpOgorICAgIHBhc3MKKworY2xhc3MgVGVzdFBhcnRpYWxTdWJjbGFzcyhUZXN0UGFydGlhbCk6CisKKyAgICB0aGV0eXBlID0gUGFydGlhbFN1YmNsYXNzCisKK2NsYXNzIFRlc3RQeXRob25QYXJ0aWFsKFRlc3RQYXJ0aWFsKToKKworICAgIHRoZXR5cGUgPSBQeXRob25QYXJ0aWFsCisKKyAgICAjIHRoZSBweXRob24gdmVyc2lvbiBpc24ndCBwaWNrbGFibGUKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6IHBhc3MKKyAgICBkZWYgdGVzdF9zZXRzdGF0ZV9yZWZjb3VudChzZWxmKTogcGFzcworCitjbGFzcyBUZXN0VXBkYXRlV3JhcHBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfd3JhcHBlcihzZWxmLCB3cmFwcGVyLCB3cmFwcGVkLAorICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbmVkPWZ1bmN0b29scy5XUkFQUEVSX0FTU0lHTk1FTlRTLAorICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQ9ZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUyk6CisgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyB3ZXJlIGFzc2lnbmVkCisgICAgICAgIGZvciBuYW1lIGluIGFzc2lnbmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIod3JhcHBlciwgbmFtZSkgaXMgZ2V0YXR0cih3cmFwcGVkLCBuYW1lKSkKKyAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIHdlcmUgdXBkYXRlZAorICAgICAgICBmb3IgbmFtZSBpbiB1cGRhdGVkOgorICAgICAgICAgICAgd3JhcHBlcl9hdHRyID0gZ2V0YXR0cih3cmFwcGVyLCBuYW1lKQorICAgICAgICAgICAgd3JhcHBlZF9hdHRyID0gZ2V0YXR0cih3cmFwcGVkLCBuYW1lKQorICAgICAgICAgICAgZm9yIGtleSBpbiB3cmFwcGVkX2F0dHI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZWRfYXR0cltrZXldIGlzIHdyYXBwZXJfYXR0cltrZXldKQorCisgICAgZGVmIF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGYuYXR0ciA9ICdUaGlzIGlzIGFsc28gYSB0ZXN0JworICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZikKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIsIGYKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlKHNlbGYpOgorICAgICAgICB3cmFwcGVyLCBmID0gc2VsZi5fZGVmYXVsdF91cGRhdGUoKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhbHNvIGEgdGVzdCcpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZV9kb2Moc2VsZik6CisgICAgICAgIHdyYXBwZXIsIGYgPSBzZWxmLl9kZWZhdWx0X3VwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2RvY19fLCAnVGhpcyBpcyBhIHRlc3QnKQorCisgICAgZGVmIHRlc3Rfbm9fdXBkYXRlKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYWxzbyBhIHRlc3QnCisgICAgICAgIGRlZiB3cmFwcGVyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmLCAoKSwgKCkpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmLCAoKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ3dyYXBwZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHdyYXBwZXIsICdhdHRyJykpCisKKyAgICBkZWYgdGVzdF9zZWxlY3RpdmVfdXBkYXRlKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhIGRpZmZlcmVudCB0ZXN0JworICAgICAgICBmLmRpY3RfYXR0ciA9IGRpY3QoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd3JhcHBlci5kaWN0X2F0dHIgPSB7fQorICAgICAgICBhc3NpZ24gPSAoJ2F0dHInLCkKKyAgICAgICAgdXBkYXRlID0gKCdkaWN0X2F0dHInLCkKKyAgICAgICAgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIGYsIGFzc2lnbiwgdXBkYXRlKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZiwgYXNzaWduLCB1cGRhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ3dyYXBwZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGEgZGlmZmVyZW50IHRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuZGljdF9hdHRyLCBmLmRpY3RfYXR0cikKKworICAgIEB0ZXN0X3N1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2J1aWx0aW5fdXBkYXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAjMTU3NjI0MQorICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgbWF4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICdtYXgnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3JhcHBlci5fX2RvY19fLnN0YXJ0c3dpdGgoJ21heCgnKSkKKworY2xhc3MgVGVzdFdyYXBzKFRlc3RVcGRhdGVXcmFwcGVyKToKKworICAgIGRlZiBfZGVmYXVsdF91cGRhdGUoc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgorICAgICAgICAgICAgcGFzcworICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhbHNvIGEgdGVzdCcKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmKQorICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlKHNlbGYpOgorICAgICAgICB3cmFwcGVyID0gc2VsZi5fZGVmYXVsdF91cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICdmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGFsc28gYSB0ZXN0JykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlX2RvYyhzZWxmKToKKyAgICAgICAgd3JhcHBlciA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sICdUaGlzIGlzIGEgdGVzdCcpCisKKyAgICBkZWYgdGVzdF9ub191cGRhdGUoc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgorICAgICAgICAgICAgcGFzcworICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhbHNvIGEgdGVzdCcKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmLCAoKSwgKCkpCisgICAgICAgIGRlZiB3cmFwcGVyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmLCAoKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ3dyYXBwZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHdyYXBwZXIsICdhdHRyJykpCisKKyAgICBkZWYgdGVzdF9zZWxlY3RpdmVfdXBkYXRlKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhIGRpZmZlcmVudCB0ZXN0JworICAgICAgICBmLmRpY3RfYXR0ciA9IGRpY3QoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgZGVmIGFkZF9kaWN0X2F0dHIoZik6CisgICAgICAgICAgICBmLmRpY3RfYXR0ciA9IHt9CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBhc3NpZ24gPSAoJ2F0dHInLCkKKyAgICAgICAgdXBkYXRlID0gKCdkaWN0X2F0dHInLCkKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmLCBhc3NpZ24sIHVwZGF0ZSkKKyAgICAgICAgQGFkZF9kaWN0X2F0dHIKKyAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYsIGFzc2lnbiwgdXBkYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICd3cmFwcGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhIGRpZmZlcmVudCB0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmRpY3RfYXR0ciwgZi5kaWN0X2F0dHIpCisKKworY2xhc3MgVGVzdFJlZHVjZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIGNsYXNzIFNxdWFyZXM6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXgpOgorICAgICAgICAgICAgICAgIHNlbGYubWF4ID0gbWF4CisgICAgICAgICAgICAgICAgc2VsZi5zb2ZhciA9IFtdCisKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gbGVuKHNlbGYuc29mYXIpCisKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgMCA8PSBpIDwgc2VsZi5tYXg6IHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgICAgICAgICBuID0gbGVuKHNlbGYuc29mYXIpCisgICAgICAgICAgICAgICAgd2hpbGUgbiA8PSBpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNvZmFyLmFwcGVuZChuKm4pCisgICAgICAgICAgICAgICAgICAgIG4gKz0gMQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvZmFyW2ldCisKKyAgICAgICAgcmVkdWNlID0gZnVuY3Rvb2xzLnJlZHVjZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShsYW1iZGEgeCwgeTogeCt5LCBbJ2EnLCAnYicsICdjJ10sICcnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZWR1Y2UobGFtYmRhIHgsIHk6IHgreSwgW1snYScsICdjJ10sIFtdLCBbJ2QnLCAndyddXSwgW10pLAorICAgICAgICAgICAgWydhJywnYycsJ2QnLCd3J10KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShsYW1iZGEgeCwgeTogeCp5LCByYW5nZSgyLDgpLCAxKSwgNTA0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlZHVjZShsYW1iZGEgeCwgeTogeCp5LCByYW5nZSgyLDIxKSwgMUwpLAorICAgICAgICAgICAgMjQzMjkwMjAwODE3NjY0MDAwMEwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShsYW1iZGEgeCwgeTogeCt5LCBTcXVhcmVzKDEwKSksIDI4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UobGFtYmRhIHgsIHk6IHgreSwgU3F1YXJlcygxMCksIDApLCAyODUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGxhbWJkYSB4LCB5OiB4K3ksIFNxdWFyZXMoMCksIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIDQyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIDQyLCA0MiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKDQyLCAiMSIpLCAiMSIpICMgZnVuYyBpcyBuZXZlciBjYWxsZWQgd2l0aCBvbmUgaXRlbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZSg0MiwgIiIsICIxIiksICIxIikgIyBmdW5jIGlzIG5ldmVyIGNhbGxlZCB3aXRoIG9uZSBpdGVtCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCA0MiwgKDQyLCA0MikpCisKK2NsYXNzIFRlc3RDbXBUb0tleSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY21wX3RvX2tleShzZWxmKToKKyAgICAgICAgZGVmIG15Y21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIHkgLSB4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJhbmdlKDUpLCBrZXk9ZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbNCwgMywgMiwgMSwgMF0pCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBkZWYgbXljbXAoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4geSAtIHgKKyAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApCisgICAgICAgIGsgPSBrZXkoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaChrKSkKKworY2xhc3MgVGVzdFRvdGFsT3JkZXJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbHQoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID4gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2xlKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDwgQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPiBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorCisgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ3Qoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+IG90aGVyLnZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID4gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2dlKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPj0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDwgQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPiBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorCisgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbm9fb3ZlcndyaXRlKHNlbGYpOgorICAgICAgICAjIG5ldyBtZXRob2RzIHNob3VsZCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQShzdHIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYSIpIDwgQSgiYiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYiIpID4gQSgiYSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYSIpIDw9IEEoImIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImIiKSA+PSBBKCJhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKCJiIikgPD0gQSgiYiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYiIpID49IEEoImIiKSkKKworICAgIGRlZiB0ZXN0X25vX29wZXJhdGlvbnNfZGVmaW5lZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfYnVnXzEwMDQyKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIFRlc3RUTzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUZXN0VE8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGVzdFRPKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBUZXN0VE8oOCkgPD0gKCkKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3RfY2xhc3NlcyA9ICgKKyAgICAgICAgVGVzdFBhcnRpYWwsCisgICAgICAgIFRlc3RQYXJ0aWFsU3ViY2xhc3MsCisgICAgICAgIFRlc3RQeXRob25QYXJ0aWFsLAorICAgICAgICBUZXN0VXBkYXRlV3JhcHBlciwKKyAgICAgICAgVGVzdFRvdGFsT3JkZXJpbmcsCisgICAgICAgIFRlc3RXcmFwcywKKyAgICAgICAgVGVzdFJlZHVjZSwKKyAgICApCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorCisgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGY5YzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CkBAIC0wLDAgKzEsMTE5IEBACisjIFRlc3QgdmFyaW91cyBmbGF2b3JzIG9mIGxlZ2FsIGFuZCBpbGxlZ2FsIGZ1dHVyZSBzdGF0ZW1lbnRzCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCByZQorCityeCA9IHJlLmNvbXBpbGUoJ1woKFxTKykucHksIGxpbmUgKFxkKyknKQorCitkZWYgZ2V0X2Vycm9yX2xvY2F0aW9uKG1zZyk6CisgICAgbW8gPSByeC5zZWFyY2goc3RyKG1zZykpCisgICAgcmV0dXJuIG1vLmdyb3VwKDEsIDIpCisKK2NsYXNzIEZ1dHVyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZnV0dXJlMShzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubG9hZCgndGVzdF9mdXR1cmUxJykKKyAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2Z1dHVyZTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X2Z1dHVyZTEucmVzdWx0LCA2KQorCisgICAgZGVmIHRlc3RfZnV0dXJlMihzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubG9hZCgndGVzdF9mdXR1cmUyJykKKyAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2Z1dHVyZTIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X2Z1dHVyZTIucmVzdWx0LCA2KQorCisgICAgZGVmIHRlc3RfZnV0dXJlMyhzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubG9hZCgndGVzdF9mdXR1cmUzJykKKyAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2Z1dHVyZTMKKworICAgIGRlZiB0ZXN0X2JhZGZ1dHVyZTMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTMKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmUzIiwgJzMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCisKKyAgICBkZWYgdGVzdF9iYWRmdXR1cmU0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmU0CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlNCIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCisgICAgZGVmIHRlc3RfYmFkZnV0dXJlNShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBiYWRzeW50YXhfZnV0dXJlNQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm9yX2xvY2F0aW9uKG1zZyksICgiYmFkc3ludGF4X2Z1dHVyZTUiLCAnNCcpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKKworICAgIGRlZiB0ZXN0X2JhZGZ1dHVyZTYoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTYKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmU2IiwgJzMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCisKKyAgICBkZWYgdGVzdF9iYWRmdXR1cmU3KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmU3CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlNyIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCisgICAgZGVmIHRlc3RfYmFkZnV0dXJlOChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBiYWRzeW50YXhfZnV0dXJlOAorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm9yX2xvY2F0aW9uKG1zZyksICgiYmFkc3ludGF4X2Z1dHVyZTgiLCAnMycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKKworICAgIGRlZiB0ZXN0X2JhZGZ1dHVyZTkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTkKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmU5IiwgJzMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJoYWNrKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhhdCB0aGUgcGFyc2VyLmM6OmZ1dHVyZV9oYWNrIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkCisgICAgICAgICMgTm90ZTogYWx0aG91Z2ggdGhpcyB0ZXN0IG11c3QgcGFzcywgaXQncyBub3QgdGVzdGluZyB0aGUgb3JpZ2luYWwKKyAgICAgICAgIyAgICAgICBidWcgYXMgb2YgMi42IHNpbmNlIHRoZSB3aXRoIHN0YXRlbWVudCBpcyBub3Qgb3B0aW9uYWwgYW5kCisgICAgICAgICMgICAgICAgdGhlIHBhcnNlciBoYWNrIGRpc2FibGVkLiBJZiBhIG5ldyBrZXl3b3JkIGlzIGludHJvZHVjZWQgaW4KKyAgICAgICAgIyAgICAgICAyLjYsIGNoYW5nZSB0aGlzIHRvIHJlZmVyIHRvIHRoZSBuZXcgZnV0dXJlIGltcG9ydC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbjsgcHJpbnQgMCIKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzeW50YXggZXJyb3IgZGlkbid0IG9jY3VyIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IChwcmludF9mdW5jdGlvbik7IHByaW50IDAiCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic3ludGF4IGVycm9yIGRpZG4ndCBvY2N1ciIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9mZWF0dXJlcyhzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubG9hZCgidGVzdC50ZXN0X2Z1dHVyZTUiKQorICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfZnV0dXJlNQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9saXRlcmFsc19leGVjKHNlbGYpOgorICAgICAgICBzY29wZSA9IHt9CisgICAgICAgIGV4ZWMgImZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFsczsgeCA9ICcnIiBpbiBzY29wZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2NvcGVbIngiXSwgdW5pY29kZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChGdXR1cmVUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdXR1cmUxLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnV0dXJlMS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTdjMmUwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnV0dXJlMS5weQpAQCAtMCwwICsxLDExIEBACisiIiJUaGlzIGlzIGEgdGVzdCIiIgorCisjIEltcG9ydCB0aGUgbmFtZSBuZXN0ZWRfc2NvcGVzIHR3aWNlIHRvIHRyaWdnZXIgU0YgYnVnICM0MDczOTQgKHJlZ3Jlc3Npb24pLgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBuZXN0ZWRfc2NvcGVzLCBuZXN0ZWRfc2NvcGVzCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCityZXN1bHQgPSBmKDIpKDQpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdXR1cmUyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnV0dXJlMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWViNzMxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnV0dXJlMi5weQpAQCAtMCwwICsxLDEwIEBACisiIiJUaGlzIGlzIGEgdGVzdCIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXM7IGltcG9ydCBzdHJpbmcKKworZGVmIGYoeCk6CisgICAgZGVmIGcoeSk6CisgICAgICAgIHJldHVybiB4ICsgeQorICAgIHJldHVybiBnCisKK3Jlc3VsdCA9IGYoMikoNCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z1dHVyZTMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdXR1cmUzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMjM1NjcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdXR1cmUzLnB5CkBAIC0wLDAgKzEsMzAgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK3ggPSAyCitkZWYgbmVzdGVyKCk6CisgICAgeCA9IDMKKyAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgcmV0dXJuIHgKKyAgICByZXR1cm4gaW5uZXIoKQorCisKK2NsYXNzIFRlc3RGdXR1cmUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZmxvb3JfZGl2X29wZXJhdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcgLy8gMiwgMykKKworICAgIGRlZiB0ZXN0X3RydWVfZGl2X2FzX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoNyAvIDIsIDMuNSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9zY29wZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmVzdGVyKCksIDMpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RGdXR1cmUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z1dHVyZTQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdXR1cmU0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjhhZGQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdXR1cmU0LnB5CkBAIC0wLDAgKzEsNDcgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFRlc3RGdXR1cmUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRUeXBlKHNlbGYsIG9iaiwgdHlwKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUob2JqKSBpcyB0eXAsCisgICAgICAgICAgICAidHlwZSglcikgaXMgJXIsIG5vdCAlciIgJSAob2JqLCB0eXBlKG9iaiksIHR5cCkpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX3N0cmluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSgiIiwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKCcnLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUociIiLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUocicnLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUoIiIiICIiIiwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKCcnJyAnJycsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZShyIiIiICIiIiwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHInJycgJycnLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUodSIiLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUodScnLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUodXIiIiwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHVyJycsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSh1IiIiICIiIiwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHUnJycgJycnLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUodXIiIiIgIiIiLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUodXInJycgJycnLCB1bmljb2RlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZShiIiIsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKGInJywgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUoYnIiIiwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUoYnInJywgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUoYiIiIiAiIiIsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKGInJycgJycnLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZShiciIiIiAiIiIsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKGJyJycnICcnJywgc3RyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSgnJyAnJywgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKCcnIHUnJywgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHUnJyAnJywgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHUnJyB1JycsIHVuaWNvZGUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RGdXR1cmUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z1dHVyZTUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdXR1cmU1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ODQwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9mdXR1cmU1LnB5CkBAIC0wLDAgKzEsMjEgQEAKKyMgQ2hlY2sgdGhhdCBtdWx0aXBsZSBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZC4KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscywgcHJpbnRfZnVuY3Rpb24KKworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIC4gaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIFRlc3RNdWx0aXBsZUZlYXR1cmVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgiIiwgdW5pY29kZSkKKworICAgIGRlZiB0ZXN0X3ByaW50X2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHM6CisgICAgICAgICAgICBwcmludCgiZm9vIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgImZvb1xuIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0TXVsdGlwbGVGZWF0dXJlcykKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z1dHVyZV9idWlsdGlucy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2Z1dHVyZV9idWlsdGlucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmMzNzg4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZnV0dXJlX2J1aWx0aW5zLnB5CkBAIC0wLDAgKzEsMzggQEAKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCwgdW5pdHRlc3QKKworIyB3ZSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBmdXR1cmUgYnVpbHRpbnM6Citmcm9tIGZ1dHVyZV9idWlsdGlucyBpbXBvcnQgaGV4LCBvY3QsIG1hcCwgemlwLCBmaWx0ZXIKKworY2xhc3MgQnVpbHRpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2hleChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoMCksICcweDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleCgxNiksICcweDEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoMTZMKSwgJzB4MTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleCgtMTYpLCAnLTB4MTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleCgtMTZMKSwgJy0weDEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoZXgsIHt9KQorCisgICAgZGVmIHRlc3Rfb2N0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgwKSwgJzBvMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2N0KDEwMCksICcwbzE0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2N0KDEwMEwpLCAnMG8xNDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgtMTAwKSwgJy0wbzE0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2N0KC0xMDBMKSwgJy0wbzE0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb2N0LCAoKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJ0b29scyhzZWxmKToKKyAgICAgICAgZnJvbSBpdGVydG9vbHMgaW1wb3J0IGltYXAsIGl6aXAsIGlmaWx0ZXIKKyAgICAgICAgIyBXZSB3aWxsIGFzc3VtZSB0aGF0IHRoZSBpdGVydG9vbHMgZnVuY3Rpb25zIHdvcmssIHNvIHByb3ZpZGVkCisgICAgICAgICMgdGhhdCB3ZSd2ZSBnb3QgaWRlbnRpY2FsIGNvcHBpZXMsIHdlIHdpbGwgd29yayEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAsIGltYXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwLCBpemlwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlciwgaWZpbHRlcikKKyAgICAgICAgIyBUZXN0aW5nIHRoYXQgZmlsdGVyKE5vbmUsIHN0dWZmKSByYWlzZXMgYSB3YXJuaW5nIGxpdmVzIGluCisgICAgICAgICMgdGVzdF9weTNrd2Fybi5weQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQnVpbHRpblRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2djLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ4NzRjMwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2djLnB5CkBAIC0wLDAgKzEsNzA4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBnYworaW1wb3J0IHdlYWtyZWYKKwordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKKyMjIyBTdXBwb3J0IGNvZGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCdWcgMTA1NTgyMCBoYXMgc2V2ZXJhbCB0ZXN0cyBvZiBsb25nc3RhbmRpbmcgYnVncyBpbnZvbHZpbmcgd2Vha3JlZnMgYW5kCisjIGN5Y2xpYyBnYy4KKworIyBBbiBpbnN0YW5jZSBvZiBDMTA1NTgyMCBoYXMgYSBzZWxmLWxvb3AsIHNvIGJlY29tZXMgY3ljbGljIHRyYXNoIHdoZW4KKyMgdW5yZWFjaGFibGUuCitjbGFzcyBDMTA1NTgyMChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpKToKKyAgICAgICAgc2VsZi5pID0gaQorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmCisKK2NsYXNzIEdDX0RldGVjdG9yKG9iamVjdCk6CisgICAgIyBDcmVhdGUgYW4gaW5zdGFuY2UgSS4gIFRoZW4gZ2MgaGFzbid0IGhhcHBlbmVkIGFnYWluIHNvIGxvbmcgYXMKKyAgICAjIEkuZ2NfaGFwcGVuZWQgaXMgZmFsc2UuCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZ2NfaGFwcGVuZWQgPSBGYWxzZQorCisgICAgICAgIGRlZiBpdF9oYXBwZW5lZChpZ25vcmVkKToKKyAgICAgICAgICAgIHNlbGYuZ2NfaGFwcGVuZWQgPSBUcnVlCisKKyAgICAgICAgIyBDcmVhdGUgYSBwaWVjZSBvZiBjeWNsaWMgdHJhc2ggdGhhdCB0cmlnZ2VycyBpdF9oYXBwZW5lZCB3aGVuCisgICAgICAgICMgZ2MgY29sbGVjdHMgaXQuCisgICAgICAgIHNlbGYud3IgPSB3ZWFrcmVmLnJlZihDMTA1NTgyMCg2NjYpLCBpdF9oYXBwZW5lZCkKKworCisjIyMgVGVzdHMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgR0NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbGlzdChzZWxmKToKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGwuYXBwZW5kKGwpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBkZWwgbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmNvbGxlY3QoKSwgMSkKKworICAgIGRlZiB0ZXN0X2RpY3Qoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBkWzFdID0gZAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVsIGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5jb2xsZWN0KCksIDEpCisKKyAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKKyAgICAgICAgIyBzaW5jZSB0dXBsZXMgYXJlIGltbXV0YWJsZSB3ZSBjbG9zZSB0aGUgbG9vcCB3aXRoIGEgbGlzdAorICAgICAgICBsID0gW10KKyAgICAgICAgdCA9IChsLCkKKyAgICAgICAgbC5hcHBlbmQodCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlbCB0CisgICAgICAgIGRlbCBsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuY29sbGVjdCgpLCAyKQorCisgICAgZGVmIHRlc3RfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIEEuYSA9IEEKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlbCBBCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQorCisgICAgZGVmIHRlc3RfbmV3c3R5bGVjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVsIEEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCisKKyAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IEEoKQorICAgICAgICBhLmEgPSBhCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBkZWwgYQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGdjLmNvbGxlY3QoKSwgMCkKKworICAgIGRlZiB0ZXN0X25ld2luc3RhbmNlKHNlbGYpOgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgYS5hID0gYQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCisgICAgICAgIGNsYXNzIEIobGlzdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMoQiwgQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgYS5hID0gYQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCisgICAgICAgIGRlbCBCLCBDCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQorICAgICAgICBBLmEgPSBBKCkKKyAgICAgICAgZGVsIEEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQorCisgICAgZGVmIHRlc3RfbWV0aG9kKHNlbGYpOgorICAgICAgICAjIFRyaWNreTogc2VsZi5fX2luaXRfXyBpcyBhIGJvdW5kIG1ldGhvZCwgaXQgcmVmZXJlbmNlcyB0aGUgaW5zdGFuY2UuCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5pbml0ID0gc2VsZi5fX2luaXRfXworICAgICAgICBhID0gQSgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBkZWwgYQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGdjLmNvbGxlY3QoKSwgMCkKKworICAgIGRlZiB0ZXN0X2ZpbmFsaXplcihzZWxmKToKKyAgICAgICAgIyBBKCkgaXMgdW5jb2xsZWN0YWJsZSBpZiBpdCBpcyBwYXJ0IG9mIGEgY3ljbGUsIG1ha2Ugc3VyZSBpdCBzaG93cyB1cAorICAgICAgICAjIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcworICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gQSgpCisgICAgICAgIGEuYSA9IGEKKyAgICAgICAgaWRfYSA9IGlkKGEpCisgICAgICAgIGIgPSBCKCkKKyAgICAgICAgYi5iID0gYgorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVsIGEKKyAgICAgICAgZGVsIGIKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCisgICAgICAgIGZvciBvYmogaW4gZ2MuZ2FyYmFnZToKKyAgICAgICAgICAgIGlmIGlkKG9iaikgPT0gaWRfYToKKyAgICAgICAgICAgICAgICBkZWwgb2JqLmEKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgZmluZCBvYmogaW4gZ2FyYmFnZSAoZmluYWxpemVyKSIpCisgICAgICAgIGdjLmdhcmJhZ2UucmVtb3ZlKG9iaikKKworICAgIGRlZiB0ZXN0X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKKyAgICAgICAgIyBBKCkgaXMgdW5jb2xsZWN0YWJsZSBpZiBpdCBpcyBwYXJ0IG9mIGEgY3ljbGUsIG1ha2Ugc3VyZSBpdCBzaG93cyB1cAorICAgICAgICAjIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOiBwYXNzCisgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IEEoKQorICAgICAgICBhLmEgPSBhCisgICAgICAgIGlkX2EgPSBpZChhKQorICAgICAgICBiID0gQigpCisgICAgICAgIGIuYiA9IGIKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlbCBhCisgICAgICAgIGRlbCBiCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQorICAgICAgICBmb3Igb2JqIGluIGdjLmdhcmJhZ2U6CisgICAgICAgICAgICBpZiBpZChvYmopID09IGlkX2E6CisgICAgICAgICAgICAgICAgZGVsIG9iai5hCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkbid0IGZpbmQgb2JqIGluIGdhcmJhZ2UgKGZpbmFsaXplcikiKQorICAgICAgICBnYy5nYXJiYWdlLnJlbW92ZShvYmopCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgIyBUcmlja3k6IGYgLT4gZCAtPiBmLCBjb2RlIHNob3VsZCBjYWxsIGQuY2xlYXIoKSBhZnRlciB0aGUgZXhlYyB0bworICAgICAgICAjIGJyZWFrIHRoZSBjeWNsZS4KKyAgICAgICAgZCA9IHt9CisgICAgICAgIGV4ZWMoImRlZiBmKCk6IHBhc3NcbiIpIGluIGQKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlbCBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuY29sbGVjdCgpLCAyKQorCisgICAgZGVmIHRlc3RfZnJhbWUoc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuY29sbGVjdCgpLCAxKQorCisgICAgZGVmIHRlc3Rfc2F2ZWFsbChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBjeWNsaWMgZ2FyYmFnZSBsaWtlIGxpc3RzIHNob3cgdXAgaW4gZ2MuZ2FyYmFnZSBpZiB0aGUKKyAgICAgICAgIyBTQVZFQUxMIG9wdGlvbiBpcyBlbmFibGVkLgorCisgICAgICAgICMgRmlyc3QgbWFrZSBzdXJlIHdlIGRvbid0IHNhdmUgYXdheSBvdGhlciBzdHVmZiB0aGF0IGp1c3QgaGFwcGVucyB0bworICAgICAgICAjIGJlIHdhaXRpbmcgZm9yIGNvbGxlY3Rpb24uCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAjIGlmIHRoaXMgZmFpbHMsIHNvbWVvbmUgZWxzZSBjcmVhdGVkIGltbW9ydGFsIHRyYXNoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuZ2FyYmFnZSwgW10pCisKKyAgICAgICAgTCA9IFtdCisgICAgICAgIEwuYXBwZW5kKEwpCisgICAgICAgIGlkX0wgPSBpZChMKQorCisgICAgICAgIGRlYnVnID0gZ2MuZ2V0X2RlYnVnKCkKKyAgICAgICAgZ2Muc2V0X2RlYnVnKGRlYnVnIHwgZ2MuREVCVUdfU0FWRUFMTCkKKyAgICAgICAgZGVsIEwKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdjLnNldF9kZWJ1ZyhkZWJ1ZykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnYy5nYXJiYWdlKSwgMSkKKyAgICAgICAgb2JqID0gZ2MuZ2FyYmFnZS5wb3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG9iaiksIGlkX0wpCisKKyAgICBkZWYgdGVzdF9kZWwoc2VsZik6CisgICAgICAgICMgX19kZWxfXyBtZXRob2RzIGNhbiB0cmlnZ2VyIGNvbGxlY3Rpb24sIG1ha2UgdGhpcyB0byBoYXBwZW4KKyAgICAgICAgdGhyZXNob2xkcyA9IGdjLmdldF90aHJlc2hvbGQoKQorICAgICAgICBnYy5lbmFibGUoKQorICAgICAgICBnYy5zZXRfdGhyZXNob2xkKDEpCisKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGRpcihzZWxmKQorICAgICAgICBhID0gQSgpCisgICAgICAgIGRlbCBhCisKKyAgICAgICAgZ2MuZGlzYWJsZSgpCisgICAgICAgIGdjLnNldF90aHJlc2hvbGQoKnRocmVzaG9sZHMpCisKKyAgICBkZWYgdGVzdF9kZWxfbmV3Y2xhc3Moc2VsZik6CisgICAgICAgICMgX19kZWxfXyBtZXRob2RzIGNhbiB0cmlnZ2VyIGNvbGxlY3Rpb24sIG1ha2UgdGhpcyB0byBoYXBwZW4KKyAgICAgICAgdGhyZXNob2xkcyA9IGdjLmdldF90aHJlc2hvbGQoKQorICAgICAgICBnYy5lbmFibGUoKQorICAgICAgICBnYy5zZXRfdGhyZXNob2xkKDEpCisKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgZGlyKHNlbGYpCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgZGVsIGEKKworICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgZ2Muc2V0X3RocmVzaG9sZCgqdGhyZXNob2xkcykKKworICAgICMgVGhlIGZvbGxvd2luZyB0d28gdGVzdHMgYXJlIGZyYWdpbGU6CisgICAgIyBUaGV5IHByZWNpc2VseSBjb3VudCB0aGUgbnVtYmVyIG9mIGFsbG9jYXRpb25zLAorICAgICMgd2hpY2ggaXMgaGlnaGx5IGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4KKyAgICAjIEZvciBleGFtcGxlOgorICAgICMgLSBkaXNwb3NlZCB0dXBsZXMgYXJlIG5vdCBmcmVlZCwgYnV0IHJldXNlZAorICAgICMgLSB0aGUgY2FsbCB0byBhc3NlcnRFcXVhbCBzb21laG93IGF2b2lkcyBidWlsZGluZyBpdHMgYXJncyB0dXBsZQorICAgIGRlZiB0ZXN0X2dldF9jb3VudChzZWxmKToKKyAgICAgICAgIyBBdm9pZCBmdXR1cmUgYWxsb2NhdGlvbiBvZiBtZXRob2Qgb2JqZWN0CisgICAgICAgIGFzc2VydEVxdWFsID0gc2VsZi5fYmFzZUFzc2VydEVxdWFsCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBhc3NlcnRFcXVhbChnYy5nZXRfY291bnQoKSwgKDAsIDAsIDApKQorICAgICAgICBhID0gZGljdCgpCisgICAgICAgICMgc2luY2UgZ2MuY29sbGVjdCgpLCB3ZSBjcmVhdGVkIHR3byBvYmplY3RzOgorICAgICAgICAjIHRoZSBkaWN0LCBhbmQgdGhlIHR1cGxlIHJldHVybmVkIGJ5IGdldF9jb3VudCgpCisgICAgICAgIGFzc2VydEVxdWFsKGdjLmdldF9jb3VudCgpLCAoMiwgMCwgMCkpCisKKyAgICBkZWYgdGVzdF9jb2xsZWN0X2dlbmVyYXRpb25zKHNlbGYpOgorICAgICAgICAjIEF2b2lkIGZ1dHVyZSBhbGxvY2F0aW9uIG9mIG1ldGhvZCBvYmplY3QKKyAgICAgICAgYXNzZXJ0RXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBhID0gZGljdCgpCisgICAgICAgIGdjLmNvbGxlY3QoMCkKKyAgICAgICAgYXNzZXJ0RXF1YWwoZ2MuZ2V0X2NvdW50KCksICgwLCAxLCAwKSkKKyAgICAgICAgZ2MuY29sbGVjdCgxKQorICAgICAgICBhc3NlcnRFcXVhbChnYy5nZXRfY291bnQoKSwgKDAsIDAsIDEpKQorICAgICAgICBnYy5jb2xsZWN0KDIpCisgICAgICAgIGFzc2VydEVxdWFsKGdjLmdldF9jb3VudCgpLCAoMCwgMCwgMCkpCisKKyAgICBkZWYgdGVzdF90cmFzaGNhbihzZWxmKToKKyAgICAgICAgY2xhc3MgT3VjaDoKKyAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBPdWNoLm4gPSBPdWNoLm4gKyAxCisgICAgICAgICAgICAgICAgaWYgT3VjaC5uICUgMTcgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICAgICAgIyAidHJhc2hjYW4iIGlzIGEgaGFjayB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IHdoZW4gZGVhbGxvY2F0aW5nCisgICAgICAgICMgdmVyeSBkZWVwbHkgbmVzdGVkIHR1cGxlcyBldGMuICBJdCB3b3JrcyBpbiBwYXJ0IGJ5IGFidXNpbmcgdGhlCisgICAgICAgICMgdHlwZSBwb2ludGVyIGFuZCByZWZjb3VudCBmaWVsZHMsIGFuZCB0aGF0IGNhbiB5aWVsZCBob3JyaWJsZQorICAgICAgICAjIHByb2JsZW1zIHdoZW4gZ2MgdHJpZXMgdG8gdHJhdmVyc2UgdGhlIHN0cnVjdHVyZXMuCisgICAgICAgICMgSWYgdGhpcyB0ZXN0IGZhaWxzIChhcyBpdCBkb2VzIGluIDIuMCwgMi4xIGFuZCAyLjIpLCBpdCB3aWxsCisgICAgICAgICMgbW9zdCBsaWtlbHkgZGllIHZpYSBzZWdmYXVsdC4KKworICAgICAgICAjIE5vdGU6ICBJbiAyLjMgdGhlIHBvc3NpYmlsaXR5IGZvciBjb21waWxpbmcgd2l0aG91dCBjeWNsaWMgZ2Mgd2FzCisgICAgICAgICMgcmVtb3ZlZCwgYW5kIHRoYXQgaW4gdHVybiBhbGxvd3MgdGhlIHRyYXNoY2FuIG1lY2hhbmlzbSB0byB3b3JrCisgICAgICAgICMgdmlhIG11Y2ggc2ltcGxlciBtZWFucyAoZS5nLiwgaXQgbmV2ZXIgYWJ1c2VzIHRoZSB0eXBlIHBvaW50ZXIgb3IKKyAgICAgICAgIyByZWZjb3VudCBmaWVsZHMgYW55bW9yZSkuICBTaW5jZSBpdCdzIG11Y2ggbGVzcyBsaWtlbHkgdG8gY2F1c2UgYQorICAgICAgICAjIHByb2JsZW0gbm93LCB0aGUgdmFyaW91cyBjb25zdGFudHMgaW4gdGhpcyBleHBlbnNpdmUgKHdlIGZvcmNlIGEgbG90CisgICAgICAgICMgb2YgZnVsbCBjb2xsZWN0aW9ucykgdGVzdCBhcmUgY3V0IGJhY2sgZnJvbSB0aGUgMi4yIHZlcnNpb24uCisgICAgICAgIGdjLmVuYWJsZSgpCisgICAgICAgIE4gPSAxNTAKKyAgICAgICAgZm9yIGNvdW50IGluIHJhbmdlKDIpOgorICAgICAgICAgICAgdCA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKKyAgICAgICAgICAgICAgICB0ID0gW3QsIE91Y2goKV0KKyAgICAgICAgICAgIHUgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6CisgICAgICAgICAgICAgICAgdSA9IFt1LCBPdWNoKCldCisgICAgICAgICAgICB2ID0ge30KKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgIHYgPSB7MTogdiwgMjogT3VjaCgpfQorICAgICAgICBnYy5kaXNhYmxlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRlc3QgbWVhbmluZ2xlc3Mgb24gYnVpbGRzIHdpdGhvdXQgdGhyZWFkcyIpCisgICAgZGVmIHRlc3RfdHJhc2hjYW5fdGhyZWFkcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTM5OTI6IHRyYXNoY2FuIG1lY2hhbmlzbSBzaG91bGQgYmUgdGhyZWFkLXNhZmUKKyAgICAgICAgTkVTVElORyA9IDYwCisgICAgICAgIE5fVEhSRUFEUyA9IDIKKworICAgICAgICBkZWYgc2xlZXBlcl9nZW4oKToKKyAgICAgICAgICAgICIiIkEgZ2VuZXJhdG9yIHRoYXQgcmVsZWFzZXMgdGhlIEdJTCB3aGVuIGNsb3NlZCBvciBkZWFsbG9jJ2VkLiIiIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDAwMDEpCisKKyAgICAgICAgY2xhc3MgQyhsaXN0KToKKyAgICAgICAgICAgICMgQXBwZW5kaW5nIHRvIGEgbGlzdCBpcyBhdG9taWMsIHdoaWNoIGF2b2lkcyB0aGUgdXNlIG9mIGEgbG9jay4KKyAgICAgICAgICAgIGluaXRzID0gW10KKyAgICAgICAgICAgIGRlbHMgPSBbXQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFsaXN0KToKKyAgICAgICAgICAgICAgICBzZWxmWzpdID0gYWxpc3QKKyAgICAgICAgICAgICAgICBDLmluaXRzLmFwcGVuZChOb25lKQorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBUaGlzIF9fZGVsX18gaXMgY2FsbGVkIGJ5IHN1YnR5cGVfZGVhbGxvYygpLgorICAgICAgICAgICAgICAgIEMuZGVscy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICAjIGBnYCB3aWxsIHJlbGVhc2UgdGhlIEdJTCB3aGVuIGdhcmJhZ2UtY29sbGVjdGVkLiAgVGhpcworICAgICAgICAgICAgICAgICMgaGVscHMgYXNzZXJ0IHN1YnR5cGVfZGVhbGxvYydzIGJlaGF2aW91ciB3aGVuIHRocmVhZHMKKyAgICAgICAgICAgICAgICAjIHN3aXRjaCBpbiB0aGUgbWlkZGxlIG9mIGl0LgorICAgICAgICAgICAgICAgIGcgPSBzbGVlcGVyX2dlbigpCisgICAgICAgICAgICAgICAgbmV4dChnKQorICAgICAgICAgICAgICAgICMgTm93IHRoYXQgX19kZWxfXyBpcyBmaW5pc2hlZCwgc3VidHlwZV9kZWFsbG9jIHdpbGwgcHJvY2VlZAorICAgICAgICAgICAgICAgICMgdG8gY2FsbCBsaXN0X2RlYWxsb2MsIHdoaWNoIGFsc28gdXNlcyB0aGUgdHJhc2hjYW4gbWVjaGFuaXNtLgorCisgICAgICAgIGRlZiBtYWtlX25lc3RlZCgpOgorICAgICAgICAgICAgIiIiQ3JlYXRlIGEgc3VmZmljaWVudGx5IG5lc3RlZCBjb250YWluZXIgb2JqZWN0IHNvIHRoYXQgdGhlCisgICAgICAgICAgICB0cmFzaGNhbiBtZWNoYW5pc20gaXMgaW52b2tlZCB3aGVuIGRlYWxsb2NhdGluZyBpdC4iIiIKKyAgICAgICAgICAgIHggPSBDKFtdKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTkVTVElORyk6CisgICAgICAgICAgICAgICAgeCA9IFtDKFt4XSldCisgICAgICAgICAgICBkZWwgeAorCisgICAgICAgIGRlZiBydW5fdGhyZWFkKCk6CisgICAgICAgICAgICAiIiJFeGVyY2lzZSBtYWtlX25lc3RlZCgpIGluIGEgbG9vcC4iIiIKKyAgICAgICAgICAgIHdoaWxlIG5vdCBleGl0OgorICAgICAgICAgICAgICAgIG1ha2VfbmVzdGVkKCkKKworICAgICAgICBvbGRfY2hlY2tpbnRlcnZhbCA9IHN5cy5nZXRjaGVja2ludGVydmFsKCkKKyAgICAgICAgc3lzLnNldGNoZWNraW50ZXJ2YWwoMykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhpdCA9IEZhbHNlCisgICAgICAgICAgICB0aHJlYWRzID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE5fVEhSRUFEUyk6CisgICAgICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1bl90aHJlYWQpCisgICAgICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodCkKKyAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEuMCkKKyAgICAgICAgICAgIGV4aXQgPSBUcnVlCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc2V0Y2hlY2tpbnRlcnZhbChvbGRfY2hlY2tpbnRlcnZhbCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEMuaW5pdHMpLCBsZW4oQy5kZWxzKSkKKworICAgIGRlZiB0ZXN0X2Jvb20oc2VsZik6CisgICAgICAgIGNsYXNzIEJvb206CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgc29tZWF0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuYXR0cgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKyAgICAgICAgYSA9IEJvb20oKQorICAgICAgICBiID0gQm9vbSgpCisgICAgICAgIGEuYXR0ciA9IGIKKyAgICAgICAgYi5hdHRyID0gYQorCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYXJiYWdlbGVuID0gbGVuKGdjLmdhcmJhZ2UpCisgICAgICAgIGRlbCBhLCBiCisgICAgICAgICMgYTwtPmIgYXJlIGluIGEgdHJhc2ggY3ljbGUgbm93LiAgQ29sbGVjdGlvbiB3aWxsIGludm9rZQorICAgICAgICAjIEJvb20uX19nZXRhdHRyX18gKHRvIHNlZSB3aGV0aGVyIGEgYW5kIGIgaGF2ZSBfX2RlbF9fIG1ldGhvZHMpLCBhbmQKKyAgICAgICAgIyBfX2dldGF0dHJfXyBkZWxldGVzIHRoZSBpbnRlcm5hbCAiYXR0ciIgYXR0cmlidXRlcyBhcyBhIHNpZGUgZWZmZWN0LgorICAgICAgICAjIFRoYXQgY2F1c2VzIHRoZSB0cmFzaCBjeWNsZSB0byBnZXQgcmVjbGFpbWVkIHZpYSByZWZjb3VudHMgZmFsbGluZyB0bworICAgICAgICAjIDAsIHRodXMgbXV0YXRpbmcgdGhlIHRyYXNoIGdyYXBoIGFzIGEgc2lkZSBlZmZlY3Qgb2YgbWVyZWx5IGFza2luZworICAgICAgICAjIHdoZXRoZXIgX19kZWxfXyBleGlzdHMuICBUaGlzIHVzZWQgdG8gKGJlZm9yZSAyLjNiMSkgY3Jhc2ggUHl0aG9uLgorICAgICAgICAjIE5vdyBfX2dldGF0dHJfXyBpc24ndCBjYWxsZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuY29sbGVjdCgpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnYy5nYXJiYWdlKSwgZ2FyYmFnZWxlbikKKworICAgIGRlZiB0ZXN0X2Jvb20yKHNlbGYpOgorICAgICAgICBjbGFzcyBCb29tMjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSAwCisKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBzb21lYXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICBzZWxmLnggKz0gMQorICAgICAgICAgICAgICAgIGlmIHNlbGYueCA+IDE6CisgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLmF0dHIKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorCisgICAgICAgIGEgPSBCb29tMigpCisgICAgICAgIGIgPSBCb29tMigpCisgICAgICAgIGEuYXR0ciA9IGIKKyAgICAgICAgYi5hdHRyID0gYQorCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYXJiYWdlbGVuID0gbGVuKGdjLmdhcmJhZ2UpCisgICAgICAgIGRlbCBhLCBiCisgICAgICAgICMgTXVjaCBsaWtlIHRlc3RfYm9vbSgpLCBleGNlcHQgdGhhdCBfX2dldGF0dHJfXyBkb2Vzbid0IGJyZWFrIHRoZQorICAgICAgICAjIGN5Y2xlIHVudGlsIHRoZSBzZWNvbmQgdGltZSBnYyBjaGVja3MgZm9yIF9fZGVsX18uICBBcyBvZiAyLjNiMSwKKyAgICAgICAgIyB0aGVyZSBpc24ndCBhIHNlY29uZCB0aW1lLCBzbyB0aGlzIHNpbXBseSBjbGVhbnMgdXAgdGhlIHRyYXNoIGN5Y2xlLgorICAgICAgICAjIFdlIGV4cGVjdCBhLCBiLCBhLl9fZGljdF9fIGFuZCBiLl9fZGljdF9fICg0IG9iamVjdHMpIHRvIGdldAorICAgICAgICAjIHJlY2xhaW1lZCB0aGlzIHdheS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5jb2xsZWN0KCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdjLmdhcmJhZ2UpLCBnYXJiYWdlbGVuKQorCisgICAgZGVmIHRlc3RfYm9vbV9uZXcoc2VsZik6CisgICAgICAgICMgYm9vbV9fbmV3IGFuZCBib29tMl9uZXcgYXJlIGV4YWN0bHkgbGlrZSBib29tIGFuZCBib29tMiwgZXhjZXB0IHVzZQorICAgICAgICAjIG5ldy1zdHlsZSBjbGFzc2VzLgorCisgICAgICAgIGNsYXNzIEJvb21fTmV3KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgc29tZWF0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuYXR0cgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKyAgICAgICAgYSA9IEJvb21fTmV3KCkKKyAgICAgICAgYiA9IEJvb21fTmV3KCkKKyAgICAgICAgYS5hdHRyID0gYgorICAgICAgICBiLmF0dHIgPSBhCisKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdhcmJhZ2VsZW4gPSBsZW4oZ2MuZ2FyYmFnZSkKKyAgICAgICAgZGVsIGEsIGIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5jb2xsZWN0KCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdjLmdhcmJhZ2UpLCBnYXJiYWdlbGVuKQorCisgICAgZGVmIHRlc3RfYm9vbTJfbmV3KHNlbGYpOgorICAgICAgICBjbGFzcyBCb29tMl9OZXcob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSAwCisKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBzb21lYXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICBzZWxmLnggKz0gMQorICAgICAgICAgICAgICAgIGlmIHNlbGYueCA+IDE6CisgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLmF0dHIKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorCisgICAgICAgIGEgPSBCb29tMl9OZXcoKQorICAgICAgICBiID0gQm9vbTJfTmV3KCkKKyAgICAgICAgYS5hdHRyID0gYgorICAgICAgICBiLmF0dHIgPSBhCisKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdhcmJhZ2VsZW4gPSBsZW4oZ2MuZ2FyYmFnZSkKKyAgICAgICAgZGVsIGEsIGIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5jb2xsZWN0KCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdjLmdhcmJhZ2UpLCBnYXJiYWdlbGVuKQorCisgICAgZGVmIHRlc3RfZ2V0X3JlZmVyZW50cyhzZWxmKToKKyAgICAgICAgYWxpc3QgPSBbMSwgMywgNV0KKyAgICAgICAgZ290ID0gZ2MuZ2V0X3JlZmVyZW50cyhhbGlzdCkKKyAgICAgICAgZ290LnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgYWxpc3QpCisKKyAgICAgICAgYXR1cGxlID0gdHVwbGUoYWxpc3QpCisgICAgICAgIGdvdCA9IGdjLmdldF9yZWZlcmVudHMoYXR1cGxlKQorICAgICAgICBnb3Quc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBhbGlzdCkKKworICAgICAgICBhZGljdCA9IHsxOiAzLCA1OiA3fQorICAgICAgICBleHBlY3RlZCA9IFsxLCAzLCA1LCA3XQorICAgICAgICBnb3QgPSBnYy5nZXRfcmVmZXJlbnRzKGFkaWN0KQorICAgICAgICBnb3Quc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworICAgICAgICBnb3QgPSBnYy5nZXRfcmVmZXJlbnRzKFsxLCAyXSwgezM6IDR9LCAoMCwgMCwgMCkpCisgICAgICAgIGdvdC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIFswLCAwXSArIHJhbmdlKDUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuZ2V0X3JlZmVyZW50cygxLCAnYScsIDRqKSwgW10pCisKKyAgICBkZWYgdGVzdF9pc190cmFja2VkKHNlbGYpOgorICAgICAgICAjIEF0b21pYyBidWlsdC1pbiB0eXBlcyBhcmUgbm90IHRyYWNrZWQsIHVzZXItZGVmaW5lZCBvYmplY3RzIGFuZAorICAgICAgICAjIG11dGFibGUgY29udGFpbmVycyBhcmUuCisgICAgICAgICMgTk9URTogdHlwZXMgd2l0aCBzcGVjaWFsIG9wdGltaXphdGlvbnMgKGUuZy4gdHVwbGUpIGhhdmUgdGVzdHMKKyAgICAgICAgIyBpbiB0aGVpciBvd24gdGVzdCBmaWxlcyBpbnN0ZWFkLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZCgxLjAgKyA1LjBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKFRydWUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoRmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHUiYSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoYnl0ZWFycmF5KCJhIikpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQodHlwZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChpbnQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQob2JqZWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKG9iamVjdCgpKSkKKworICAgICAgICBjbGFzcyBPbGRTdHlsZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTmV3U3R5bGUob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoZ2MpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChPbGRTdHlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKE9sZFN0eWxlKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChOZXdTdHlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKE5ld1N0eWxlKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKHNldCgpKSkKKworICAgIGRlZiB0ZXN0X2J1ZzEwNTU4MjBiKHNlbGYpOgorICAgICAgICAjIENvcnJlc3BvbmRzIHRvIHRlbXAyYi5weSBpbiB0aGUgYnVnIHJlcG9ydC4KKworICAgICAgICBvdWNoID0gW10KKyAgICAgICAgZGVmIGNhbGxiYWNrKGlnbm9yZWQpOgorICAgICAgICAgICAgb3VjaFs6XSA9IFt3cigpIGZvciB3ciBpbiBXUnNdCisKKyAgICAgICAgQ3MgPSBbQzEwNTU4MjAoaSkgZm9yIGkgaW4gcmFuZ2UoMildCisgICAgICAgIFdScyA9IFt3ZWFrcmVmLnJlZihjLCBjYWxsYmFjaykgZm9yIGMgaW4gQ3NdCisgICAgICAgIGMgPSBOb25lCisKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91Y2gpLCAwKQorICAgICAgICAjIE1ha2UgdGhlIHR3byBpbnN0YW5jZXMgdHJhc2gsIGFuZCBjb2xsZWN0IGFnYWluLiAgVGhlIGJ1ZyB3YXMgdGhhdAorICAgICAgICAjIHRoZSBjYWxsYmFjayBtYXRlcmlhbGl6ZWQgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIGFuIGluc3RhbmNlLCBidXQgZ2MKKyAgICAgICAgIyBjbGVhcmVkIHRoZSBpbnN0YW5jZSdzIGRpY3QgYW55d2F5LgorICAgICAgICBDcyA9IE5vbmUKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91Y2gpLCAyKSAgIyBlbHNlIHRoZSBjYWxsYmFja3MgZGlkbid0IHJ1bgorICAgICAgICBmb3IgeCBpbiBvdWNoOgorICAgICAgICAgICAgIyBJZiB0aGUgY2FsbGJhY2sgcmVzdXJyZWN0ZWQgb25lIG9mIHRoZXNlIGd1eXMsIHRoZSBpbnN0YW5jZQorICAgICAgICAgICAgIyB3b3VsZCBiZSBkYW1hZ2VkLCB3aXRoIGFuIGVtcHR5IF9fZGljdF9fLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBOb25lKQorCitjbGFzcyBHQ1RvZ2dsaW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZ2MuZW5hYmxlKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZ2MuZGlzYWJsZSgpCisKKyAgICBkZWYgdGVzdF9idWcxMDU1ODIwYyhzZWxmKToKKyAgICAgICAgIyBDb3JyZXNwb25kcyB0byB0ZW1wMmMucHkgaW4gdGhlIGJ1ZyByZXBvcnQuICBUaGlzIGlzIHByZXR0eQorICAgICAgICAjIGVsYWJvcmF0ZS4KKworICAgICAgICBjMCA9IEMxMDU1ODIwKDApCisgICAgICAgICMgTW92ZSBjMCBpbnRvIGdlbmVyYXRpb24gMi4KKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICAgICAgYzEgPSBDMTA1NTgyMCgxKQorICAgICAgICBjMS5rZWVwX2MwX2FsaXZlID0gYzAKKyAgICAgICAgZGVsIGMwLmxvb3AgIyBub3cgb25seSBjMSBrZWVwcyBjMCBhbGl2ZQorCisgICAgICAgIGMyID0gQzEwNTU4MjAoMikKKyAgICAgICAgYzJ3ciA9IHdlYWtyZWYucmVmKGMyKSAjIG5vIGNhbGxiYWNrIQorCisgICAgICAgIG91Y2ggPSBbXQorICAgICAgICBkZWYgY2FsbGJhY2soaWdub3JlZCk6CisgICAgICAgICAgICBvdWNoWzpdID0gW2Myd3IoKV0KKworICAgICAgICAjIFRoZSBjYWxsYmFjayBnZXRzIGFzc29jaWF0ZWQgd2l0aCBhIHdyIG9uIGFuIG9iamVjdCBpbiBnZW5lcmF0aW9uIDIuCisgICAgICAgIGMwd3IgPSB3ZWFrcmVmLnJlZihjMCwgY2FsbGJhY2spCisKKyAgICAgICAgYzAgPSBjMSA9IGMyID0gTm9uZQorCisgICAgICAgICMgV2hhdCB3ZSd2ZSBzZXQgdXA6ICBjMCwgYzEsIGFuZCBjMiBhcmUgYWxsIHRyYXNoIG5vdy4gIGMwIGlzIGluCisgICAgICAgICMgZ2VuZXJhdGlvbiAyLiAgVGhlIG9ubHkgdGhpbmcga2VlcGluZyBpdCBhbGl2ZSBpcyB0aGF0IGMxIHBvaW50cyB0bworICAgICAgICAjIGl0LiBjMSBhbmQgYzIgYXJlIGluIGdlbmVyYXRpb24gMCwgYW5kIGFyZSBpbiBzZWxmLWxvb3BzLiAgVGhlcmUncyBhCisgICAgICAgICMgZ2xvYmFsIHdlYWtyZWYgdG8gYzIgKGMyd3IpLCBidXQgdGhhdCB3ZWFrcmVmIGhhcyBubyBjYWxsYmFjay4KKyAgICAgICAgIyBUaGVyZSdzIGFsc28gYSBnbG9iYWwgd2Vha3JlZiB0byBjMCAoYzB3ciksIGFuZCB0aGF0IGRvZXMgaGF2ZSBhCisgICAgICAgICMgY2FsbGJhY2ssIGFuZCB0aGF0IGNhbGxiYWNrIHJlZmVyZW5jZXMgYzIgdmlhIGMyd3IoKS4KKyAgICAgICAgIworICAgICAgICAjICAgICAgICAgICAgICAgYzAgaGFzIGEgd3Igd2l0aCBjYWxsYmFjaywgd2hpY2ggcmVmZXJlbmNlcyBjMndyCisgICAgICAgICMgICAgICAgICAgICAgICBeCisgICAgICAgICMgICAgICAgICAgICAgICB8CisgICAgICAgICMgICAgICAgICAgICAgICB8ICAgICBHZW5lcmF0aW9uIDIgYWJvdmUgZG90cworICAgICAgICAjLiAuIC4gLiAuIC4gLiAufC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuCisgICAgICAgICMgICAgICAgICAgICAgICB8ICAgICBHZW5lcmF0aW9uIDAgYmVsb3cgZG90cworICAgICAgICAjICAgICAgICAgICAgICAgfAorICAgICAgICAjICAgICAgICAgICAgICAgfAorICAgICAgICAjICAgICAgICAgICAgXi0+YzEgICBeLT5jMiBoYXMgYSB3ciBidXQgbm8gY2FsbGJhY2sKKyAgICAgICAgIyAgICAgICAgICAgIHwgIHwgICAgfCAgfAorICAgICAgICAjICAgICAgICAgICAgPC0tdiAgICA8LS12CisgICAgICAgICMKKyAgICAgICAgIyBTbyB0aGlzIGlzIHRoZSBuaWdodG1hcmU6ICB3aGVuIGdlbmVyYXRpb24gMCBnZXRzIGNvbGxlY3RlZCwgd2Ugc2VlCisgICAgICAgICMgdGhhdCBjMiBoYXMgYSBjYWxsYmFjay1mcmVlIHdlYWtyZWYsIGFuZCBjMSBkb2Vzbid0IGV2ZW4gaGF2ZSBhCisgICAgICAgICMgd2Vha3JlZi4gIENvbGxlY3RpbmcgZ2VuZXJhdGlvbiAwIGRvZXNuJ3Qgc2VlIGMwIGF0IGFsbCwgYW5kIGMwIGlzCisgICAgICAgICMgdGhlIG9ubHkgb2JqZWN0IHRoYXQgaGFzIGEgd2Vha3JlZiB3aXRoIGEgY2FsbGJhY2suICBnYyBjbGVhcnMgYzEKKyAgICAgICAgIyBhbmQgYzIuICBDbGVhcmluZyBjMSBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIGRyb3BwaW5nIHRoZSByZWZjb3VudCBvbgorICAgICAgICAjIGMwIHRvIDAsIHNvIGMwIGdvZXMgYXdheSAoZGVzcGl0ZSB0aGF0IGl0J3MgaW4gYW4gb2xkZXIgZ2VuZXJhdGlvbikKKyAgICAgICAgIyBhbmQgYzAncyB3ciBjYWxsYmFjayB0cmlnZ2Vycy4gIFRoYXQgaW4gdHVybiBtYXRlcmlhbGl6ZXMgYSByZWZlcmVuY2UKKyAgICAgICAgIyB0byBjMiB2aWEgYzJ3cigpLCBidXQgYzIgZ2V0cyBjbGVhcmVkIGFueXdheSBieSBnYy4KKworICAgICAgICAjIFdlIHdhbnQgdG8gbGV0IGdjIGhhcHBlbiAibmF0dXJhbGx5IiwgdG8gcHJlc2VydmUgdGhlIGRpc3RpbmN0aW9uCisgICAgICAgICMgYmV0d2VlbiBnZW5lcmF0aW9ucy4KKyAgICAgICAganVuayA9IFtdCisgICAgICAgIGkgPSAwCisgICAgICAgIGRldGVjdG9yID0gR0NfRGV0ZWN0b3IoKQorICAgICAgICB3aGlsZSBub3QgZGV0ZWN0b3IuZ2NfaGFwcGVuZWQ6CisgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgIGlmIGkgPiAxMDAwMDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImdjIGRpZG4ndCBoYXBwZW4gYWZ0ZXIgMTAwMDAgaXRlcmF0aW9ucyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdWNoKSwgMCkKKyAgICAgICAgICAgIGp1bmsuYXBwZW5kKFtdKSAgIyB0aGlzIHdpbGwgZXZlbnR1YWxseSB0cmlnZ2VyIGdjCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3VjaCksIDEpICAjIGVsc2UgdGhlIGNhbGxiYWNrIHdhc24ndCBpbnZva2VkCisgICAgICAgIGZvciB4IGluIG91Y2g6CisgICAgICAgICAgICAjIElmIHRoZSBjYWxsYmFjayByZXN1cnJlY3RlZCBjMiwgdGhlIGluc3RhbmNlIHdvdWxkIGJlIGRhbWFnZWQsCisgICAgICAgICAgICAjIHdpdGggYW4gZW1wdHkgX19kaWN0X18uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9idWcxMDU1ODIwZChzZWxmKToKKyAgICAgICAgIyBDb3JyZXNwb25kcyB0byB0ZW1wMmQucHkgaW4gdGhlIGJ1ZyByZXBvcnQuICBUaGlzIGlzIHZlcnkgbXVjaCBsaWtlCisgICAgICAgICMgdGVzdF9idWcxMDU1ODIwYywgYnV0IHVzZXMgYSBfX2RlbF9fIG1ldGhvZCBpbnN0ZWFkIG9mIGEgd2Vha3JlZgorICAgICAgICAjIGNhbGxiYWNrIHRvIHNuZWFrIGluIGEgcmVzdXJyZWN0aW9uIG9mIGN5Y2xpYyB0cmFzaC4KKworICAgICAgICBvdWNoID0gW10KKyAgICAgICAgY2xhc3MgRChDMTA1NTgyMCk6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBvdWNoWzpdID0gW2Myd3IoKV0KKworICAgICAgICBkMCA9IEQoMCkKKyAgICAgICAgIyBNb3ZlIGFsbCB0aGUgYWJvdmUgaW50byBnZW5lcmF0aW9uIDIuCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgICAgIGMxID0gQzEwNTU4MjAoMSkKKyAgICAgICAgYzEua2VlcF9kMF9hbGl2ZSA9IGQwCisgICAgICAgIGRlbCBkMC5sb29wICMgbm93IG9ubHkgYzEga2VlcHMgZDAgYWxpdmUKKworICAgICAgICBjMiA9IEMxMDU1ODIwKDIpCisgICAgICAgIGMyd3IgPSB3ZWFrcmVmLnJlZihjMikgIyBubyBjYWxsYmFjayEKKworICAgICAgICBkMCA9IGMxID0gYzIgPSBOb25lCisKKyAgICAgICAgIyBXaGF0IHdlJ3ZlIHNldCB1cDogIGQwLCBjMSwgYW5kIGMyIGFyZSBhbGwgdHJhc2ggbm93LiAgZDAgaXMgaW4KKyAgICAgICAgIyBnZW5lcmF0aW9uIDIuICBUaGUgb25seSB0aGluZyBrZWVwaW5nIGl0IGFsaXZlIGlzIHRoYXQgYzEgcG9pbnRzIHRvCisgICAgICAgICMgaXQuICBjMSBhbmQgYzIgYXJlIGluIGdlbmVyYXRpb24gMCwgYW5kIGFyZSBpbiBzZWxmLWxvb3BzLiAgVGhlcmUncworICAgICAgICAjIGEgZ2xvYmFsIHdlYWtyZWYgdG8gYzIgKGMyd3IpLCBidXQgdGhhdCB3ZWFrcmVmIGhhcyBubyBjYWxsYmFjay4KKyAgICAgICAgIyBUaGVyZSBhcmUgbm8gb3RoZXIgd2Vha3JlZnMuCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICAgICAgICAgIGQwIGhhcyBhIF9fZGVsX18gbWV0aG9kIHRoYXQgcmVmZXJlbmNlcyBjMndyCisgICAgICAgICMgICAgICAgICAgICAgICBeCisgICAgICAgICMgICAgICAgICAgICAgICB8CisgICAgICAgICMgICAgICAgICAgICAgICB8ICAgICBHZW5lcmF0aW9uIDIgYWJvdmUgZG90cworICAgICAgICAjLiAuIC4gLiAuIC4gLiAufC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuCisgICAgICAgICMgICAgICAgICAgICAgICB8ICAgICBHZW5lcmF0aW9uIDAgYmVsb3cgZG90cworICAgICAgICAjICAgICAgICAgICAgICAgfAorICAgICAgICAjICAgICAgICAgICAgICAgfAorICAgICAgICAjICAgICAgICAgICAgXi0+YzEgICBeLT5jMiBoYXMgYSB3ciBidXQgbm8gY2FsbGJhY2sKKyAgICAgICAgIyAgICAgICAgICAgIHwgIHwgICAgfCAgfAorICAgICAgICAjICAgICAgICAgICAgPC0tdiAgICA8LS12CisgICAgICAgICMKKyAgICAgICAgIyBTbyB0aGlzIGlzIHRoZSBuaWdodG1hcmU6ICB3aGVuIGdlbmVyYXRpb24gMCBnZXRzIGNvbGxlY3RlZCwgd2Ugc2VlCisgICAgICAgICMgdGhhdCBjMiBoYXMgYSBjYWxsYmFjay1mcmVlIHdlYWtyZWYsIGFuZCBjMSBkb2Vzbid0IGV2ZW4gaGF2ZSBhCisgICAgICAgICMgd2Vha3JlZi4gIENvbGxlY3RpbmcgZ2VuZXJhdGlvbiAwIGRvZXNuJ3Qgc2VlIGQwIGF0IGFsbC4gIGdjIGNsZWFycworICAgICAgICAjIGMxIGFuZCBjMi4gIENsZWFyaW5nIGMxIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgZHJvcHBpbmcgdGhlIHJlZmNvdW50CisgICAgICAgICMgb24gZDAgdG8gMCwgc28gZDAgZ29lcyBhd2F5IChkZXNwaXRlIHRoYXQgaXQncyBpbiBhbiBvbGRlcgorICAgICAgICAjIGdlbmVyYXRpb24pIGFuZCBkMCdzIF9fZGVsX18gdHJpZ2dlcnMuICBUaGF0IGluIHR1cm4gbWF0ZXJpYWxpemVzCisgICAgICAgICMgYSByZWZlcmVuY2UgdG8gYzIgdmlhIGMyd3IoKSwgYnV0IGMyIGdldHMgY2xlYXJlZCBhbnl3YXkgYnkgZ2MuCisKKyAgICAgICAgIyBXZSB3YW50IHRvIGxldCBnYyBoYXBwZW4gIm5hdHVyYWxseSIsIHRvIHByZXNlcnZlIHRoZSBkaXN0aW5jdGlvbgorICAgICAgICAjIGJldHdlZW4gZ2VuZXJhdGlvbnMuCisgICAgICAgIGRldGVjdG9yID0gR0NfRGV0ZWN0b3IoKQorICAgICAgICBqdW5rID0gW10KKyAgICAgICAgaSA9IDAKKyAgICAgICAgd2hpbGUgbm90IGRldGVjdG9yLmdjX2hhcHBlbmVkOgorICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICBpZiBpID4gMTAwMDA6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJnYyBkaWRuJ3QgaGFwcGVuIGFmdGVyIDEwMDAwIGl0ZXJhdGlvbnMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3VjaCksIDApCisgICAgICAgICAgICBqdW5rLmFwcGVuZChbXSkgICMgdGhpcyB3aWxsIGV2ZW50dWFsbHkgdHJpZ2dlciBnYworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91Y2gpLCAxKSAgIyBlbHNlIF9fZGVsX18gd2Fzbid0IGludm9rZWQKKyAgICAgICAgZm9yIHggaW4gb3VjaDoKKyAgICAgICAgICAgICMgSWYgX19kZWxfXyByZXN1cnJlY3RlZCBjMiwgdGhlIGluc3RhbmNlIHdvdWxkIGJlIGRhbWFnZWQsIHdpdGggYW4KKyAgICAgICAgICAgICMgZW1wdHkgX19kaWN0X18uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIE5vbmUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBlbmFibGVkID0gZ2MuaXNlbmFibGVkKCkKKyAgICBnYy5kaXNhYmxlKCkKKyAgICBhc3NlcnQgbm90IGdjLmlzZW5hYmxlZCgpCisgICAgZGVidWcgPSBnYy5nZXRfZGVidWcoKQorICAgIGdjLnNldF9kZWJ1ZyhkZWJ1ZyAmIH5nYy5ERUJVR19MRUFLKSAjIHRoaXMgdGVzdCBpcyBzdXBwb3NlZCB0byBsZWFrCisKKyAgICB0cnk6CisgICAgICAgIGdjLmNvbGxlY3QoKSAjIERlbGV0ZSAybmQgZ2VuZXJhdGlvbiBnYXJiYWdlCisgICAgICAgIHJ1bl91bml0dGVzdChHQ1Rlc3RzLCBHQ1RvZ2dsaW5nVGVzdHMpCisgICAgZmluYWxseToKKyAgICAgICAgZ2Muc2V0X2RlYnVnKGRlYnVnKQorICAgICAgICAjIHRlc3QgZ2MuZW5hYmxlKCkgZXZlbiBpZiBHQyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAicmVzdG9yaW5nIGF1dG9tYXRpYyBjb2xsZWN0aW9uIgorICAgICAgICAjIG1ha2Ugc3VyZSB0byBhbHdheXMgdGVzdCBnYy5lbmFibGUoKQorICAgICAgICBnYy5lbmFibGUoKQorICAgICAgICBhc3NlcnQgZ2MuaXNlbmFibGVkKCkKKyAgICAgICAgaWYgbm90IGVuYWJsZWQ6CisgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2RiLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2RiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMDJiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9nZGIucHkKQEAgLTAsMCArMSw3NjEgQEAKKyMgVmVyaWZ5IHRoYXQgZ2RiIGNhbiBwcmV0dHktcHJpbnQgdGhlIHZhcmlvdXMgUHlPYmplY3QqIHR5cGVzCisjCisjIFRoZSBjb2RlIGZvciB0ZXN0aW5nIGdkYiB3YXMgYWRhcHRlZCBmcm9tIHNpbWlsYXIgd29yayBpbiBVbmxhZGVuIFN3YWxsb3cncworIyBMaWIvdGVzdC90ZXN0X2ppdF9nZGIucHkKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXNjb25maWcKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBmaW5kZmlsZQorCit0cnk6CisgICAgZ2RiX3ZlcnNpb24sIF8gPSBzdWJwcm9jZXNzLlBvcGVuKFsiZ2RiIiwgIi0tdmVyc2lvbiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpCitleGNlcHQgT1NFcnJvcjoKKyAgICAjIFRoaXMgaXMgd2hhdCAibm8gZ2RiIiBsb29rcyBsaWtlLiAgVGhlcmUgbWF5LCBob3dldmVyLCBiZSBvdGhlcgorICAgICMgZXJyb3JzIHRoYXQgbWFuaWZlc3QgdGhpcyB3YXkgdG9vLgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDb3VsZG4ndCBmaW5kIGdkYiBvbiB0aGUgcGF0aCIpCitnZGJfdmVyc2lvbl9udW1iZXIgPSByZS5zZWFyY2goIl5HTlUgZ2RiIFteXGRdKihcZCspXC4oXGQpIiwgZ2RiX3ZlcnNpb24pCitnZGJfbWFqb3JfdmVyc2lvbiA9IGludChnZGJfdmVyc2lvbl9udW1iZXIuZ3JvdXAoMSkpCitnZGJfbWlub3JfdmVyc2lvbiA9IGludChnZGJfdmVyc2lvbl9udW1iZXIuZ3JvdXAoMikpCitpZiBnZGJfbWFqb3JfdmVyc2lvbiA8IDc6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImdkYiB2ZXJzaW9ucyBiZWZvcmUgNy4wIGRpZG4ndCBzdXBwb3J0IHB5dGhvbiBlbWJlZGRpbmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBTYXc6XG4iICsgZ2RiX3ZlcnNpb24pCisKKyMgTG9jYXRpb24gb2YgY3VzdG9tIGhvb2tzIGZpbGUgaW4gYSByZXBvc2l0b3J5IGNoZWNrb3V0LgorY2hlY2tvdXRfaG9va19wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbi1nZGIucHknKQorCitkZWYgcnVuX2dkYigqYXJncywgKiplbnZfdmFycyk6CisgICAgIiIiUnVucyBnZGIgaW4gLS1iYXRjaCBtb2RlIHdpdGggdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIGdpdmVuIGJ5ICphcmdzLgorCisgICAgUmV0dXJucyBpdHMgKHN0ZG91dCwgc3RkZXJyKQorICAgICIiIgorICAgIGlmIGVudl92YXJzOgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnYudXBkYXRlKGVudl92YXJzKQorICAgIGVsc2U6CisgICAgICAgIGVudiA9IE5vbmUKKyAgICBiYXNlX2NtZCA9ICgnZ2RiJywgJy0tYmF0Y2gnKQorICAgIGlmIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24pID49ICg3LCA0KToKKyAgICAgICAgYmFzZV9jbWQgKz0gKCctaWV4JywgJ2FkZC1hdXRvLWxvYWQtc2FmZS1wYXRoICcgKyBjaGVja291dF9ob29rX3BhdGgpCisgICAgb3V0LCBlcnIgPSBzdWJwcm9jZXNzLlBvcGVuKGJhc2VfY21kICsgYXJncywKKyAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgZW52PWVudiwKKyAgICAgICAgKS5jb21tdW5pY2F0ZSgpCisgICAgcmV0dXJuIG91dCwgZXJyCisKKyMgVmVyaWZ5IHRoYXQgImdkYiIgd2FzIGJ1aWx0IHdpdGggdGhlIGVtYmVkZGVkIHB5dGhvbiBzdXBwb3J0IGVuYWJsZWQ6CitnZGJweV92ZXJzaW9uLCBfID0gcnVuX2dkYigiLS1ldmFsLWNvbW1hbmQ9cHl0aG9uIGltcG9ydCBzeXM7IHByaW50IHN5cy52ZXJzaW9uX2luZm8iKQoraWYgbm90IGdkYnB5X3ZlcnNpb246CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImdkYiBub3QgYnVpbHQgd2l0aCBlbWJlZGRlZCBweXRob24gc3VwcG9ydCIpCisKKyMgVmVyaWZ5IHRoYXQgImdkYiIgY2FuIGxvYWQgb3VyIGN1c3RvbSBob29rcy4gIEluIHRoZW9yeSB0aGlzIHNob3VsZCBuZXZlcgorIyBmYWlsLCBidXQgd2UgZG9uJ3QgaGFuZGxlIHRoZSBjYXNlIG9mIHRoZSBob29rcyBmaWxlIG5vdCBleGlzdGluZyBpZiB0aGUKKyMgdGVzdHMgYXJlIHJ1biBmcm9tIGFuIGluc3RhbGxlZCBQeXRob24gKHdlJ2xsIHByb2R1Y2UgZmFpbHVyZXMgaW4gdGhhdCBjYXNlKS4KK2NtZCA9IFsnLS1hcmdzJywgc3lzLmV4ZWN1dGFibGVdCitfLCBnZGJweV9lcnJvcnMgPSBydW5fZ2RiKCctLWFyZ3MnLCBzeXMuZXhlY3V0YWJsZSkKK2lmICJhdXRvLWxvYWRpbmcgaGFzIGJlZW4gZGVjbGluZWQiIGluIGdkYnB5X2Vycm9yczoKKyAgICBtc2cgPSAiZ2RiIHNlY3VyaXR5IHNldHRpbmdzIHByZXZlbnQgdXNlIG9mIGN1c3RvbSBob29rczogIgorCitkZWYgcHl0aG9uX2lzX29wdGltaXplZCgpOgorICAgIGNmbGFncyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKVsnUFlfQ0ZMQUdTJ10KKyAgICBmaW5hbF9vcHQgPSAiIgorICAgIGZvciBvcHQgaW4gY2ZsYWdzLnNwbGl0KCk6CisgICAgICAgIGlmIG9wdC5zdGFydHN3aXRoKCctTycpOgorICAgICAgICAgICAgZmluYWxfb3B0ID0gb3B0CisgICAgcmV0dXJuIChmaW5hbF9vcHQgYW5kIGZpbmFsX29wdCAhPSAnLU8wJykKKworZGVmIGdkYl9oYXNfZnJhbWVfc2VsZWN0KCk6CisgICAgIyBEb2VzIHRoaXMgYnVpbGQgb2YgZ2RiIGhhdmUgZ2RiLkZyYW1lLnNlbGVjdCA/CisgICAgc3Rkb3V0LCBfID0gcnVuX2dkYigiLS1ldmFsLWNvbW1hbmQ9cHl0aG9uIHByaW50KGRpcihnZGIuRnJhbWUpKSIpCisgICAgbSA9IHJlLm1hdGNoKHInLipcWyguKilcXS4qJywgc3Rkb3V0KQorICAgIGlmIG5vdCBtOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVW5hYmxlIHRvIHBhcnNlIG91dHB1dCBmcm9tIGdkYi5GcmFtZS5zZWxlY3QgdGVzdCIpCisgICAgZ2RiX2ZyYW1lX2RpciA9IG0uZ3JvdXAoMSkuc3BsaXQoJywgJykKKyAgICByZXR1cm4gIidzZWxlY3QnIiBpbiBnZGJfZnJhbWVfZGlyCisKK0hBU19QWVVQX1BZRE9XTiA9IGdkYl9oYXNfZnJhbWVfc2VsZWN0KCkKKworY2xhc3MgRGVidWdnZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IHRoYXQgdGhlIGRlYnVnZ2VyIGNhbiBkZWJ1ZyBQeXRob24uIiIiCisKKyAgICBkZWYgZ2V0X3N0YWNrX3RyYWNlKHNlbGYsIHNvdXJjZT1Ob25lLCBzY3JpcHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQ9J1B5T2JqZWN0X1ByaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3NpdGU9RmFsc2UpOgorICAgICAgICAnJycKKyAgICAgICAgUnVuICdweXRob24gLWMgU09VUkNFJyB1bmRlciBnZGIgd2l0aCBhIGJyZWFrcG9pbnQuCisKKyAgICAgICAgU3VwcG9ydCBpbmplY3RpbmcgY29tbWFuZHMgYWZ0ZXIgdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZAorCisgICAgICAgIFJldHVybnMgdGhlIHN0ZG91dCBmcm9tIGdkYgorCisgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludDogaWYgcHJvdmlkZWQsIGEgbGlzdCBvZiBzdHJpbmdzOiBnZGIgY29tbWFuZHMKKyAgICAgICAgJycnCisgICAgICAgICMgV2UgdXNlICJzZXQgYnJlYWtwb2ludCBwZW5kaW5nIHllcyIgdG8gYXZvaWQgYmxvY2tpbmcgd2l0aCBhOgorICAgICAgICAjICAgRnVuY3Rpb24gImZvbyIgbm90IGRlZmluZWQuCisgICAgICAgICMgICBNYWtlIGJyZWFrcG9pbnQgcGVuZGluZyBvbiBmdXR1cmUgc2hhcmVkIGxpYnJhcnkgbG9hZD8gKHkgb3IgW25dKQorICAgICAgICAjIGVycm9yLCB3aGljaCB0eXBpY2FsbHkgaGFwcGVucyBweXRob24gaXMgZHluYW1pY2FsbHkgbGlua2VkICh0aGUKKyAgICAgICAgIyBicmVha3BvaW50cyBvZiBpbnRlcmVzdCBhcmUgdG8gYmUgZm91bmQgaW4gdGhlIHNoYXJlZCBsaWJyYXJ5KQorICAgICAgICAjIFdoZW4gdGhpcyBoYXBwZW5zLCB3ZSBzdGlsbCBnZXQ6CisgICAgICAgICMgICBGdW5jdGlvbiAiUHlPYmplY3RfUHJpbnQiIG5vdCBkZWZpbmVkLgorICAgICAgICAjIGVtaXR0ZWQgdG8gc3RkZXJyIGVhY2ggdGltZSwgYWxhcy4KKworICAgICAgICAjIEluaXRpYWxseSBJIGhhZCAiLS1ldmFsLWNvbW1hbmQ9Y29udGludWUiIGhlcmUsIGJ1dCByZW1vdmVkIGl0IHRvCisgICAgICAgICMgYXZvaWQgcmVwZWF0ZWQgcHJpbnQgYnJlYWtwb2ludHMgd2hlbiB0cmF2ZXJzaW5nIGhpZXJhcmNoaWNhbCBkYXRhCisgICAgICAgICMgc3RydWN0dXJlcworCisgICAgICAgICMgR2VuZXJhdGUgYSBsaXN0IG9mIGNvbW1hbmRzIGluIGdkYidzIGxhbmd1YWdlOgorICAgICAgICBjb21tYW5kcyA9IFsnc2V0IGJyZWFrcG9pbnQgcGVuZGluZyB5ZXMnLAorICAgICAgICAgICAgICAgICAgICAnYnJlYWsgJXMnICUgYnJlYWtwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgJ3J1biddCisgICAgICAgIGlmIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludDoKKyAgICAgICAgICAgIGNvbW1hbmRzICs9IGNtZHNfYWZ0ZXJfYnJlYWtwb2ludAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWFuZHMgKz0gWydiYWNrdHJhY2UnXQorCisgICAgICAgICMgcHJpbnQgY29tbWFuZHMKKworICAgICAgICAjIFVzZSAiY29tbWFuZHMiIHRvIGdlbmVyYXRlIHRoZSBhcmd1bWVudHMgd2l0aCB3aGljaCB0byBpbnZva2UgImdkYiI6CisgICAgICAgIGFyZ3MgPSBbImdkYiIsICItLWJhdGNoIl0KKyAgICAgICAgYXJncyArPSBbJy0tZXZhbC1jb21tYW5kPSVzJyAlIGNtZCBmb3IgY21kIGluIGNvbW1hbmRzXQorICAgICAgICBhcmdzICs9IFsiLS1hcmdzIiwKKyAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGVdCisKKyAgICAgICAgaWYgbm90IGltcG9ydF9zaXRlOgorICAgICAgICAgICAgIyAtUyBzdXBwcmVzc2VzIHRoZSBkZWZhdWx0ICdpbXBvcnQgc2l0ZScKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItUyJdCisKKyAgICAgICAgaWYgc291cmNlOgorICAgICAgICAgICAgYXJncyArPSBbIi1jIiwgc291cmNlXQorICAgICAgICBlbGlmIHNjcmlwdDoKKyAgICAgICAgICAgIGFyZ3MgKz0gW3NjcmlwdF0KKworICAgICAgICAjIHByaW50IGFyZ3MKKyAgICAgICAgIyBwcmludCAnICcuam9pbihhcmdzKQorCisgICAgICAgICMgVXNlICJhcmdzIiB0byBpbnZva2UgZ2RiLCBjYXB0dXJpbmcgc3Rkb3V0LCBzdGRlcnI6CisgICAgICAgIG91dCwgZXJyID0gcnVuX2dkYigqYXJncywgUFlUSE9OSEFTSFNFRUQ9JzAnKQorCisgICAgICAgIGVycmxpbmVzID0gZXJyLnNwbGl0bGluZXMoKQorICAgICAgICB1bmV4cGVjdGVkX2VycmxpbmVzID0gW10KKworICAgICAgICAjIElnbm9yZSBzb21lIGJlbmlnbiBtZXNzYWdlcyBvbiBzdGRlcnIuCisgICAgICAgIGlnbm9yZV9wYXR0ZXJucyA9ICgKKyAgICAgICAgICAgICdGdW5jdGlvbiAiJXMiIG5vdCBkZWZpbmVkLicgJSBicmVha3BvaW50LAorICAgICAgICAgICAgIndhcm5pbmc6IG5vIGxvYWRhYmxlIHNlY3Rpb25zIGZvdW5kIGluIGFkZGVkIHN5bWJvbC1maWxlIgorICAgICAgICAgICAgIiBzeXN0ZW0tc3VwcGxpZWQgRFNPIiwKKyAgICAgICAgICAgICJ3YXJuaW5nOiBVbmFibGUgdG8gZmluZCBsaWJ0aHJlYWRfZGIgbWF0Y2hpbmciCisgICAgICAgICAgICAiIGluZmVyaW9yJ3MgdGhyZWFkIGxpYnJhcnksIHRocmVhZCBkZWJ1Z2dpbmcgd2lsbCIKKyAgICAgICAgICAgICIgbm90IGJlIGF2YWlsYWJsZS4iLAorICAgICAgICAgICAgIndhcm5pbmc6IENhbm5vdCBpbml0aWFsaXplIHRocmVhZCBkZWJ1Z2dpbmciCisgICAgICAgICAgICAiIGxpYnJhcnk6IERlYnVnZ2VyIHNlcnZpY2UgZmFpbGVkIiwKKyAgICAgICAgICAgICd3YXJuaW5nOiBDb3VsZCBub3QgbG9hZCBzaGFyZWQgbGlicmFyeSBzeW1ib2xzIGZvciAnCisgICAgICAgICAgICAnbGludXgtdmRzby5zbycsCisgICAgICAgICAgICAnd2FybmluZzogQ291bGQgbm90IGxvYWQgc2hhcmVkIGxpYnJhcnkgc3ltYm9scyBmb3IgJworICAgICAgICAgICAgJ2xpbnV4LWdhdGUuc28nLAorICAgICAgICAgICAgJ0RvIHlvdSBuZWVkICJzZXQgc29saWItc2VhcmNoLXBhdGgiIG9yICcKKyAgICAgICAgICAgICcic2V0IHN5c3Jvb3QiPycsCisgICAgICAgICAgICApCisgICAgICAgIGZvciBsaW5lIGluIGVycmxpbmVzOgorICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChpZ25vcmVfcGF0dGVybnMpOgorICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRfZXJybGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICAgICAgIyBFbnN1cmUgbm8gdW5leHBlY3RlZCBlcnJvciBtZXNzYWdlczoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmV4cGVjdGVkX2VycmxpbmVzLCBbXSkKKyAgICAgICAgcmV0dXJuIG91dAorCisgICAgZGVmIGdldF9nZGJfcmVwcihzZWxmLCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9zaXRlPUZhbHNlKToKKyAgICAgICAgIyBHaXZlbiBhbiBpbnB1dCBweXRob24gc291cmNlIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEsCisgICAgICAgICMgcnVuICJweXRob24gLWMncHJpbnQgREFUQSciIHVuZGVyIGdkYiB3aXRoIGEgYnJlYWtwb2ludCBvbgorICAgICAgICAjIFB5T2JqZWN0X1ByaW50IGFuZCBzY3JhcGUgb3V0IGdkYidzIHJlcHJlc2VudGF0aW9uIG9mIHRoZSAib3AiCisgICAgICAgICMgcGFyYW1ldGVyLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGdkYiBkaXNwbGF5cyB0aGUgc2FtZSBzdHJpbmcKKyAgICAgICAgIworICAgICAgICAjIEZvciBhIG5lc3RlZCBzdHJ1Y3R1cmUsIHRoZSBmaXJzdCB0aW1lIHdlIGhpdCB0aGUgYnJlYWtwb2ludCB3aWxsCisgICAgICAgICMgZ2l2ZSB1cyB0aGUgdG9wLWxldmVsIHN0cnVjdHVyZQorICAgICAgICBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc291cmNlLCBicmVha3BvaW50PSdQeU9iamVjdF9QcmludCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Y21kc19hZnRlcl9icmVha3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3NpdGU9aW1wb3J0X3NpdGUpCisgICAgICAgICMgZ2RiIGNhbiBpbnNlcnQgYWRkaXRpb25hbCAnXG4nIGFuZCBzcGFjZSBjaGFyYWN0ZXJzIGluIHZhcmlvdXMgcGxhY2VzCisgICAgICAgICMgaW4gaXRzIG91dHB1dCwgZGVwZW5kaW5nIG9uIHRoZSB3aWR0aCBvZiB0aGUgdGVybWluYWwgaXQncyBjb25uZWN0ZWQKKyAgICAgICAgIyB0byAodXNpbmcgaXRzICJ3cmFwX2hlcmUiIGZ1bmN0aW9uKQorICAgICAgICBtID0gcmUubWF0Y2goJy4qIzBccytQeU9iamVjdF9QcmludFxzK1woXHMqb3BcPVxzKiguKj8pLFxzK2ZwPS4qXCkuKicsCisgICAgICAgICAgICAgICAgICAgICBnZGJfb3V0cHV0LCByZS5ET1RBTEwpCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIGdkYiBvdXRwdXQ6ICVyXG4lcycgJSAoZ2RiX291dHB1dCwgZ2RiX291dHB1dCkpCisgICAgICAgIHJldHVybiBtLmdyb3VwKDEpLCBnZGJfb3V0cHV0CisKKyAgICBkZWYgYXNzZXJ0RW5kc1dpdGgoc2VsZiwgYWN0dWFsLCBleHBfZW5kKToKKyAgICAgICAgJycnRW5zdXJlIHRoYXQgdGhlIGdpdmVuICJhY3R1YWwiIHN0cmluZyBlbmRzIHdpdGggImV4cF9lbmQiJycnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhY3R1YWwuZW5kc3dpdGgoZXhwX2VuZCksCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9JyVyIGRpZCBub3QgZW5kIHdpdGggJXInICUgKGFjdHVhbCwgZXhwX2VuZCkpCisKKyAgICBkZWYgYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhzZWxmLCBhY3R1YWwsIHBhdHRlcm4pOgorICAgICAgICBtID0gcmUubWF0Y2gocGF0dGVybiwgYWN0dWFsLCByZS5ET1RBTEwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLCBtc2c9JyVyIGRpZCBub3QgbWF0Y2ggJXInICUgKGFjdHVhbCwgcGF0dGVybikpCisKKyAgICBkZWYgZ2V0X3NhbXBsZV9zY3JpcHQoc2VsZik6CisgICAgICAgIHJldHVybiBmaW5kZmlsZSgnZ2RiX3NhbXBsZS5weScpCisKK2NsYXNzIFByZXR0eVByaW50VGVzdHMoRGVidWdnZXJUZXN0cyk6CisgICAgZGVmIHRlc3RfZ2V0dGluZ19iYWNrdHJhY2Uoc2VsZik6CisgICAgICAgIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9zdGFja190cmFjZSgncHJpbnQgNDInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1B5T2JqZWN0X1ByaW50JyBpbiBnZGJfb3V0cHV0KQorCisgICAgZGVmIGFzc2VydEdkYlJlcHIoc2VsZiwgdmFsLCBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Tm9uZSk6CisgICAgICAgICMgRW5zdXJlIHRoYXQgZ2RiJ3MgcmVuZGVyaW5nIG9mIHRoZSB2YWx1ZSBpbiBhIGRlYnVnZ2VkIHByb2Nlc3MKKyAgICAgICAgIyBtYXRjaGVzIHJlcHIodmFsdWUpIGluIHRoaXMgcHJvY2VzczoKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcigncHJpbnQgJyArIHJlcHIodmFsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsIHJlcHIodmFsKSwgZ2RiX291dHB1dCkKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHZhcmlvdXMgImludCIgdmFsdWVzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigwKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoLTcpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzeXMubWF4aW50KQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoLXN5cy5tYXhpbnQpCisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdmFyaW91cyAibG9uZyIgdmFsdWVzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoMEwpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigxMDAwMDAwMDAwMDAwTCkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKC0xTCkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKC0xMDAwMDAwMDAwMDAwMDAwTCkKKworICAgIGRlZiB0ZXN0X3NpbmdsZXRvbnMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBUcnVlLCBGYWxzZSBhbmQgTm9uZScKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKE5vbmUpCisKKyAgICBkZWYgdGVzdF9kaWN0cyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGRpY3Rpb25hcmllcycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHt9KQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigieydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOjQyfSIpCisKKyAgICBkZWYgdGVzdF9saXN0cyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGxpc3RzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihyYW5nZSg1KSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ3Moc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBzdHJpbmdzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcignQW5kIG5vdyBmb3Igc29tZXRoaW5nIGhvcGVmdWxseSB0aGUgc2FtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcignc3RyaW5nIHdpdGggZW1iZWRkZWQgTlVMIGhlcmUgXDAgYW5kIHRoZW4gc29tZSBtb3JlIHRleHQnKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoJ3RoaXMgaXMgYnl0ZSAyNTU6XHhmZiBhbmQgYnl0ZSAxMjg6XHg4MCcpCisKKyAgICBkZWYgdGVzdF90dXBsZXMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiB0dXBsZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih0dXBsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKDEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCgnZm9vJywgJ2JhcicsICdiYXonKSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiB1bmljb2RlIHZhbHVlcycKKyAgICAgICAgIyBUZXN0IHRoZSBlbXB0eSB1bmljb2RlIHN0cmluZzoKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHUnJykKKworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodSdoZWxsbyB3b3JsZCcpCisKKyAgICAgICAgIyBUZXN0IHByaW50aW5nIGEgc2luZ2xlIGNoYXJhY3RlcjoKKyAgICAgICAgIyAgICBVKzI2MjAgU0tVTEwgQU5EIENST1NTQk9ORVMKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHUnXHUyNjIwJykKKworICAgICAgICAjIFRlc3QgcHJpbnRpbmcgYSBKYXBhbmVzZSB1bmljb2RlIHN0cmluZworICAgICAgICAjIChJIGJlbGlldmUgdGhpcyByZWFkcyAibW9qaWJha2UiLCB1c2luZyAzIGNoYXJhY3RlcnMgZnJvbSB0aGUgQ0pLCisgICAgICAgICMgVW5pZmllZCBJZGVvZ3JhcGhzIGFyZWEsIGZvbGxvd2VkIGJ5IFUrMzA1MSBISVJBR0FOQSBMRVRURVIgS0UpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih1J1x1NjU4N1x1NWI1N1x1NTMxNlx1MzA1MScpCisKKyAgICAgICAgIyBUZXN0IGEgY2hhcmFjdGVyIG91dHNpZGUgdGhlIEJNUDoKKyAgICAgICAgIyAgICBVKzFEMTIxIE1VU0lDQUwgU1lNQk9MIEMgQ0xFRgorICAgICAgICAjIFRoaXMgaXM6CisgICAgICAgICMgVVRGLTg6IDB4RjAgMHg5RCAweDg0IDB4QTEKKyAgICAgICAgIyBVVEYtMTY6IDB4RDgzNCAweEREMjEKKyAgICAgICAgIyBUaGlzIHdpbGwgb25seSB3b3JrIG9uIHdpZGUtdW5pY29kZSBidWlsZHM6CisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih1IlxVMDAwMUQxMjEiKQorCisgICAgZGVmIHRlc3Rfc2V0cyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHNldHMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoKSkKKyAgICAgICAgcmVwID0gc2VsZi5nZXRfZ2RiX3JlcHIoInByaW50IHNldChbJ2EnLCAnYiddKSIpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuc3RhcnRzd2l0aCgic2V0KFsiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5lbmRzd2l0aCgiXSkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHJlcCksIHsnYScsICdiJ30pCisgICAgICAgIHJlcCA9IHNlbGYuZ2V0X2dkYl9yZXByKCJwcmludCBzZXQoWzQsIDVdKSIpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuc3RhcnRzd2l0aCgic2V0KFsiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5lbmRzd2l0aCgiXSkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHJlcCksIHs0LCA1fSkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IHdlIGhhbmRsZWQgc2V0cyBjb250YWluaW5nIHRoZSAiZHVtbXkiIGtleSB2YWx1ZSwKKyAgICAgICAgIyB3aGljaCBoYXBwZW5zIG9uIGRlbGV0aW9uOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJ3MgPSBzZXQoWydhJywnYiddKQorcy5wb3AoKQorcHJpbnQgcycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgInNldChbJ2InXSkiKQorCisgICAgZGVmIHRlc3RfZnJvemVuc2V0cyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGZyb3plbnNldHMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoKSkKKyAgICAgICAgcmVwID0gc2VsZi5nZXRfZ2RiX3JlcHIoInByaW50IGZyb3plbnNldChbJ2EnLCAnYiddKSIpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuc3RhcnRzd2l0aCgiZnJvemVuc2V0KFsiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5lbmRzd2l0aCgiXSkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHJlcCksIHsnYScsICdiJ30pCisgICAgICAgIHJlcCA9IHNlbGYuZ2V0X2dkYl9yZXByKCJwcmludCBmcm96ZW5zZXQoWzQsIDVdKSIpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuc3RhcnRzd2l0aCgiZnJvemVuc2V0KFsiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5lbmRzd2l0aCgiXSkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHJlcCksIHs0LCA1fSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBhIFJ1bnRpbWVFcnJvcgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJwordHJ5OgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiSSBhbSBhbiBlcnJvciIpCitleGNlcHQgUnVudGltZUVycm9yLCBlOgorICAgIHByaW50IGUKKycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9ucy5SdW50aW1lRXJyb3IoJ0kgYW0gYW4gZXJyb3InLCkiKQorCisKKyAgICAgICAgIyBUZXN0IGRpdmlzaW9uIGJ5IHplcm86CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycnCit0cnk6CisgICAgYSA9IDEgLyAwCitleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IsIGU6CisgICAgcHJpbnQgZQorJycnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb25zLlplcm9EaXZpc2lvbkVycm9yKCdpbnRlZ2VyIGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvJywpIikKKworICAgIGRlZiB0ZXN0X2NsYXNzaWNfY2xhc3Moc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBjbGFzc2ljIGNsYXNzIGluc3RhbmNlcycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbzoKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vLmFuX2ludCA9IDQyCitwcmludCBmb28nJycpCisgICAgICAgIG0gPSByZS5tYXRjaChyJzxGb29cKGFuX2ludD00MlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLCBnZGJfcmVwcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0sCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J1VuZXhwZWN0ZWQgY2xhc3NpYy1jbGFzcyByZW5kZXJpbmcgJXInICUgZ2RiX3JlcHIpCisKKyAgICBkZWYgdGVzdF9tb2Rlcm5fY2xhc3Moc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBuZXctc3R5bGUgY2xhc3MgaW5zdGFuY2VzJworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vKG9iamVjdCk6CisgICAgcGFzcworZm9vID0gRm9vKCkKK2Zvby5hbl9pbnQgPSA0MgorcHJpbnQgZm9vJycnKQorICAgICAgICBtID0gcmUubWF0Y2gocic8Rm9vXChhbl9pbnQ9NDJcKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywgZ2RiX3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdVbmV4cGVjdGVkIG5ldy1zdHlsZSBjbGFzcyByZW5kZXJpbmcgJXInICUgZ2RiX3JlcHIpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZ19saXN0KHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgYW4gaW5zdGFuY2Ugb2YgYSBsaXN0IHN1YmNsYXNzJworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vKGxpc3QpOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28gKz0gWzEsIDIsIDNdCitmb28uYW5faW50ID0gNDIKK3ByaW50IGZvbycnJykKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInPEZvb1woYW5faW50PTQyXCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsIGdkYl9yZXByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nVW5leHBlY3RlZCBuZXctc3R5bGUgY2xhc3MgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NpbmdfdHVwbGUoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBhbiBpbnN0YW5jZSBvZiBhIHR1cGxlIHN1YmNsYXNzJworICAgICAgICAjIFRoaXMgc2hvdWxkIGV4ZXJjaXNlIHRoZSBuZWdhdGl2ZSB0cF9kaWN0b2Zmc2V0IGNvZGUgaW4gdGhlCisgICAgICAgICMgbmV3LXN0eWxlIGNsYXNzIHN1cHBvcnQKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbyh0dXBsZSk6CisgICAgcGFzcworZm9vID0gRm9vKCgxLCAyLCAzKSkKK2Zvby5hbl9pbnQgPSA0MgorcHJpbnQgZm9vJycnKQorICAgICAgICBtID0gcmUubWF0Y2gocic8Rm9vXChhbl9pbnQ9NDJcKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywgZ2RiX3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdVbmV4cGVjdGVkIG5ldy1zdHlsZSBjbGFzcyByZW5kZXJpbmcgJXInICUgZ2RiX3JlcHIpCisKKyAgICBkZWYgYXNzZXJ0U2FuZShzZWxmLCBzb3VyY2UsIGNvcnJ1cHRpb24sIGV4cHZhbHVlPU5vbmUsIGV4cHR5cGU9Tm9uZSk6CisgICAgICAgICcnJ1J1biBQeXRob24gdW5kZXIgZ2RiLCBjb3JydXB0aW5nIHZhcmlhYmxlcyBpbiB0aGUgaW5mZXJpb3IgcHJvY2VzcworICAgICAgICBpbW1lZGlhdGVseSBiZWZvcmUgdGFraW5nIGEgYmFja3RyYWNlLgorCisgICAgICAgIFZlcmlmeSB0aGF0IHRoZSB2YXJpYWJsZSdzIHJlcHJlc2VudGF0aW9uIGlzIHRoZSBleHBlY3RlZCBmYWlsc2FmZQorICAgICAgICByZXByZXNlbnRhdGlvbicnJworICAgICAgICBpZiBjb3JydXB0aW9uOgorICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVtjb3JydXB0aW9uLCAnYmFja3RyYWNlJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ2JhY2t0cmFjZSddCisKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcihzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Y21kc19hZnRlcl9icmVha3BvaW50KQorCisgICAgICAgIGlmIGV4cHZhbHVlOgorICAgICAgICAgICAgaWYgZ2RiX3JlcHIgPT0gcmVwcihleHB2YWx1ZSk6CisgICAgICAgICAgICAgICAgIyBnZGIgbWFuYWdlZCB0byBwcmludCB0aGUgdmFsdWUgaW4gc3BpdGUgb2YgdGhlIGNvcnJ1cHRpb247CisgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGdvb2QgKHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODMzMCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBleHB0eXBlOgorICAgICAgICAgICAgcGF0dGVybiA9ICc8JyArIGV4cHR5cGUgKyAnIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE1hdGNoIGFueXRoaW5nIGZvciB0aGUgdHlwZSBuYW1lOyAweERFQURCRUVGIGNvdWxkIHBvaW50IHRvCisgICAgICAgICAgICAjIHNvbWV0aGluZyBhcmJpdHJhcnkgKHNlZSAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTgzMzApCisgICAgICAgICAgICBwYXR0ZXJuID0gJzwuKiBhdCByZW1vdGUgMHhbMC05YS1mXSs+JworCisgICAgICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBnZGJfcmVwcikKKyAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZ2RiIHJlcHJlc2VudGF0aW9uOiAlclxuJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgZGVmIHRlc3RfTlVMTF9wdHIoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIE5VTEwgUHlPYmplY3QqIGlzIGhhbmRsZWQgZ3JhY2VmdWxseScKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSAoCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcigncHJpbnQgNDInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsnc2V0IHZhcmlhYmxlIG9wPTAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja3RyYWNlJ10pCisgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgJzB4MCcpCisKKyAgICBkZWYgdGVzdF9OVUxMX29iX3R5cGUoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIFB5T2JqZWN0KiB3aXRoIE5VTEwgb2JfdHlwZSBpcyBoYW5kbGVkIGdyYWNlZnVsbHknCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgncHJpbnQgNDInLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NldCBvcC0+b2JfdHlwZT0wJykKKworICAgIGRlZiB0ZXN0X2NvcnJ1cHRfb2JfdHlwZShzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IGEgUHlPYmplY3QqIHdpdGggYSBjb3JydXB0IG9iX3R5cGUgaXMgaGFuZGxlZCBncmFjZWZ1bGx5JworICAgICAgICBzZWxmLmFzc2VydFNhbmUoJ3ByaW50IDQyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZXQgb3AtPm9iX3R5cGU9MHhERUFEQkVFRicsCisgICAgICAgICAgICAgICAgICAgICAgICBleHB2YWx1ZT00MikKKworICAgIGRlZiB0ZXN0X2NvcnJ1cHRfdHBfZmxhZ3Moc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIFB5T2JqZWN0KiB3aXRoIGEgdHlwZSB3aXRoIGNvcnJ1cHQgdHBfZmxhZ3MgaXMgaGFuZGxlZCcKKyAgICAgICAgc2VsZi5hc3NlcnRTYW5lKCdwcmludCA0MicsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2V0IG9wLT5vYl90eXBlLT50cF9mbGFncz0weDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwdmFsdWU9NDIpCisKKyAgICBkZWYgdGVzdF9jb3JydXB0X3RwX25hbWUoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIFB5T2JqZWN0KiB3aXRoIGEgdHlwZSB3aXRoIGNvcnJ1cHQgdHBfbmFtZSBpcyBoYW5kbGVkJworICAgICAgICBzZWxmLmFzc2VydFNhbmUoJ3ByaW50IDQyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZXQgb3AtPm9iX3R5cGUtPnRwX25hbWU9MHhERUFEQkVFRicsCisgICAgICAgICAgICAgICAgICAgICAgICBleHB2YWx1ZT00MikKKworICAgIGRlZiB0ZXN0X05VTExfaW5zdGFuY2VfZGljdChzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IGEgUHlJbnN0YW5jZU9iamVjdCB3aXRoIHdpdGggYSBOVUxMIGluX2RpY3QgaXMgaGFuZGxlZCcKKyAgICAgICAgc2VsZi5hc3NlcnRTYW5lKCcnJworY2xhc3MgRm9vOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28uYW5faW50ID0gNDIKK3ByaW50IGZvbycnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZXQgKChQeUluc3RhbmNlT2JqZWN0KilvcCktPmluX2RpY3QgPSAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHR5cGU9J0ZvbycpCisKKyAgICBkZWYgdGVzdF9idWlsdGluc19oZWxwKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgdGhlIG5ldy1zdHlsZSBjbGFzcyBfSGVscGVyIGluIHNpdGUucHkgY2FuIGJlIGhhbmRsZWQnCisgICAgICAgICMgKHRoaXMgd2FzIHRoZSBpc3N1ZSBjYXVzaW5nIHRyYWNlYmFja3MgaW4KKyAgICAgICAgIyAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTgwMzIjbXNnMTAwNTM3ICkKKworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCdwcmludCBfX2J1aWx0aW5zX18uaGVscCcsIGltcG9ydF9zaXRlPVRydWUpCisgICAgICAgIG0gPSByZS5tYXRjaChyJzxfSGVscGVyIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLCBnZGJfcmVwcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0sCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J1VuZXhwZWN0ZWQgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIHRlc3Rfc2VsZnJlZmVyZW50aWFsX2xpc3Qoc2VsZik6CisgICAgICAgICcnJ0Vuc3VyZSB0aGF0IGEgcmVmZXJlbmNlIGxvb3AgaW52b2x2aW5nIGEgbGlzdCBkb2Vzbid0IGxlYWQgcHJveHl2YWwKKyAgICAgICAgaW50byBhbiBpbmZpbml0ZSBsb29wOicnJworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCJhID0gWzMsIDQsIDVdIDsgYS5hcHBlbmQoYSkgOyBwcmludCBhIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAnWzMsIDQsIDUsIFsuLi5dXScpCisKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcigiYSA9IFszLCA0LCA1XSA7IGIgPSBbYV0gOyBhLmFwcGVuZChiKSA7IHByaW50IGEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICdbMywgNCwgNSwgW1suLi5dXV0nKQorCisgICAgZGVmIHRlc3Rfc2VsZnJlZmVyZW50aWFsX2RpY3Qoc2VsZik6CisgICAgICAgICcnJ0Vuc3VyZSB0aGF0IGEgcmVmZXJlbmNlIGxvb3AgaW52b2x2aW5nIGEgZGljdCBkb2Vzbid0IGxlYWQgcHJveHl2YWwKKyAgICAgICAgaW50byBhbiBpbmZpbml0ZSBsb29wOicnJworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCJhID0ge30gOyBiID0geydiYXInOmF9IDsgYVsnZm9vJ10gPSBiIDsgcHJpbnQgYSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgInsnZm9vJzogeydiYXInOiB7Li4ufX19IikKKworICAgIGRlZiB0ZXN0X3NlbGZyZWZlcmVudGlhbF9vbGRfc3R5bGVfaW5zdGFuY2Uoc2VsZik6CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb286CisgICAgcGFzcworZm9vID0gRm9vKCkKK2Zvby5hbl9hdHRyID0gZm9vCitwcmludCBmb28nJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnPEZvb1woYW5fYXR0cj08XC5cLlwuPlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3JlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZ2RiIHJlcHJlc2VudGF0aW9uOiAlclxuJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZGJfcmVwciwgZ2RiX291dHB1dCkpCisKKyAgICBkZWYgdGVzdF9zZWxmcmVmZXJlbnRpYWxfbmV3X3N0eWxlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vKG9iamVjdCk6CisgICAgcGFzcworZm9vID0gRm9vKCkKK2Zvby5hbl9hdHRyID0gZm9vCitwcmludCBmb28nJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnPEZvb1woYW5fYXR0cj08XC5cLlwuPlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3JlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZ2RiIHJlcHJlc2VudGF0aW9uOiAlclxuJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZGJfcmVwciwgZ2RiX291dHB1dCkpCisKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbyhvYmplY3QpOgorICAgIHBhc3MKK2EgPSBGb28oKQorYiA9IEZvbygpCithLmFuX2F0dHIgPSBiCitiLmFuX2F0dHIgPSBhCitwcmludCBhJycnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxGb29cKGFuX2F0dHI9PEZvb1woYW5fYXR0cj08XC5cLlwuPlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz5cKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgZGVmIHRlc3RfdHJ1bmNhdGlvbihzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGF0IHZlcnkgbG9uZyBvdXRwdXQgaXMgdHJ1bmNhdGVkJworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCdwcmludCByYW5nZSgxMDAwKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkxLCAxOTIsIDE5MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIyMjQsIDIyNSwgMjI2Li4uKHRydW5jYXRlZCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZGJfcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCArIGxlbignLi4uKHRydW5jYXRlZCknKSkKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5fZnVuY3Rpb24oc2VsZik6CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJ3ByaW50IGxlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICc8YnVpbHQtaW4gZnVuY3Rpb24gbGVuPicpCisKKyAgICBkZWYgdGVzdF9idWlsdGluX21ldGhvZChzZWxmKToKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignaW1wb3J0IHN5czsgcHJpbnQgc3lzLnN0ZG91dC5yZWFkbGluZXMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxidWlsdC1pbiBtZXRob2QgcmVhZGxpbmVzIG9mIGZpbGUgb2JqZWN0IGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3JlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZ2RiIHJlcHJlc2VudGF0aW9uOiAlclxuJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZGJfcmVwciwgZ2RiX291dHB1dCkpCisKKyAgICBkZWYgdGVzdF9mcmFtZXMoc2VsZik6CisgICAgICAgIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9zdGFja190cmFjZSgnJycKK2RlZiBmb28oYSwgYiwgYyk6CisgICAgcGFzcworCitmb28oMywgNCwgNSkKK3ByaW50IGZvby5fX2NvZGVfXycnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQ9J1B5T2JqZWN0X1ByaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3ByaW50IChQeUZyYW1lT2JqZWN0KikoKChQeUNvZGVPYmplY3QqKW9wKS0+Y29fem9tYmllZnJhbWUpJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInLipccytcJDEgPVxzK0ZyYW1lIDB4WzAtOWEtZl0rLCBmb3IgZmlsZSA8c3RyaW5nPiwgbGluZSAzLCBpbiBmb28gXChcKVxzKy4qJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5ET1RBTEwpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZ2RiIHJlcHJlc2VudGF0aW9uOiAlclxuJXMnICUgKGdkYl9vdXRwdXQsIGdkYl9vdXRwdXQpKQorCitAdW5pdHRlc3Quc2tpcElmKHB5dGhvbl9pc19vcHRpbWl6ZWQoKSwKKyAgICAgICAgICAgICAgICAgIlB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zIikKK2NsYXNzIFB5TGlzdFRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIGRlZiBhc3NlcnRMaXN0aW5nKHNlbGYsIGV4cGVjdGVkLCBhY3R1YWwpOgorICAgICAgICBzZWxmLmFzc2VydEVuZHNXaXRoKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9iYXNpY19jb21tYW5kKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoYXQgdGhlICJweS1saXN0IiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktbGlzdCddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdGluZygnICAgNSAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICA2ICAgIGRlZiBiYXIoYSwgYiwgYyk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgNyAgICAgICAgYmF6KGEsIGIsIGMpXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgOCAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICA5ICAgIGRlZiBiYXooKmFyZ3MpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyA+MTAgICAgICAgIHByaW50KDQyKVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgMTEgICAgXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAxMiAgICBmb28oMSwgMiwgMylcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidCkKKworICAgIGRlZiB0ZXN0X29uZV9hYnNfYXJnKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSAicHktbGlzdCIgY29tbWFuZCB3aXRoIG9uZSBhYnNvbHV0ZSBhcmd1bWVudCcKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWxpc3QgOSddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdGluZygnICAgOSAgICBkZWYgYmF6KCphcmdzKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgPjEwICAgICAgICBwcmludCg0MilcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIDExICAgIFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgMTIgICAgZm9vKDEsIDIsIDMpXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnQpCisKKyAgICBkZWYgdGVzdF90d29fYWJzX2FyZ3Moc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlICJweS1saXN0IiBjb21tYW5kIHdpdGggdHdvIGFic29sdXRlIGFyZ3VtZW50cycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWxpc3QgMSwzJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0aW5nKCcgICAxICAgICMgU2FtcGxlIHNjcmlwdCBmb3IgdXNlIGJ5IHRlc3RfZ2RiLnB5XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgMiAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAzICAgIGRlZiBmb28oYSwgYiwgYyk6XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnQpCisKK2NsYXNzIFN0YWNrTmF2aWdhdGlvblRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihweXRob25faXNfb3B0aW1pemVkKCksCisgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHdhcyBjb21waWxlZCB3aXRoIG9wdGltaXphdGlvbnMiKQorICAgIGRlZiB0ZXN0X3B5dXBfY29tbWFuZChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGF0IHRoZSAicHktdXAiIGNvbW1hbmQgd29ya3MnCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS11cCddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJycnXi4qCisjWzAtOV0rIEZyYW1lIDB4WzAtOWEtZl0rLCBmb3IgZmlsZSAuKmdkYl9zYW1wbGUucHksIGxpbmUgNywgaW4gYmFyIFwoYT0xLCBiPTIsIGM9M1wpCisgICAgYmF6XChhLCBiLCBjXCkKKyQnJycpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUFlVUF9QWURPV04sICJ0ZXN0IHJlcXVpcmVzIHB5LXVwL3B5LWRvd24gY29tbWFuZHMiKQorICAgIGRlZiB0ZXN0X2Rvd25fYXRfYm90dG9tKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IGhhbmRsaW5nIG9mICJweS1kb3duIiBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWRvd24nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFbmRzV2l0aChidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIGZpbmQgYSBuZXdlciBweXRob24gZnJhbWVcbicpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUFlVUF9QWURPV04sICJ0ZXN0IHJlcXVpcmVzIHB5LXVwL3B5LWRvd24gY29tbWFuZHMiKQorICAgIGRlZiB0ZXN0X3VwX2F0X3RvcChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSBoYW5kbGluZyBvZiAicHktdXAiIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktdXAnXSAqIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RW5kc1dpdGgoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBmaW5kIGFuIG9sZGVyIHB5dGhvbiBmcmFtZVxuJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihweXRob25faXNfb3B0aW1pemVkKCksCisgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHdhcyBjb21waWxlZCB3aXRoIG9wdGltaXphdGlvbnMiKQorICAgIGRlZiB0ZXN0X3VwX3RoZW5fZG93bihzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSAicHktdXAiIGZvbGxvd2VkIGJ5ICJweS1kb3duIicKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJywgJ3B5LWRvd24nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicnJ14uKgorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDcsIGluIGJhciBcKGE9MSwgYj0yLCBjPTNcKQorICAgIGJhelwoYSwgYiwgY1wpCisjWzAtOV0rIEZyYW1lIDB4WzAtOWEtZl0rLCBmb3IgZmlsZSAuKmdkYl9zYW1wbGUucHksIGxpbmUgMTAsIGluIGJheiBcKGFyZ3M9XCgxLCAyLCAzXClcKQorICAgIHByaW50XCg0MlwpCiskJycnKQorCitjbGFzcyBQeUJ0VGVzdHMoRGVidWdnZXJUZXN0cyk6CisgICAgQHVuaXR0ZXN0LnNraXBJZihweXRob25faXNfb3B0aW1pemVkKCksCisgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHdhcyBjb21waWxlZCB3aXRoIG9wdGltaXphdGlvbnMiKQorICAgIGRlZiB0ZXN0X2Jhc2ljX2NvbW1hbmQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB0aGUgInB5LWJ0IiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktYnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicnJ14uKgorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDcsIGluIGJhciBcKGE9MSwgYj0yLCBjPTNcKQorICAgIGJhelwoYSwgYiwgY1wpCisjWzAtOV0rIEZyYW1lIDB4WzAtOWEtZl0rLCBmb3IgZmlsZSAuKmdkYl9zYW1wbGUucHksIGxpbmUgNCwgaW4gZm9vIFwoYT0xLCBiPTIsIGM9M1wpCisgICAgYmFyXChhLCBiLCBjXCkKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSAxMiwgaW4gPG1vZHVsZT4gXChcKQorICAgIGZvb1woMSwgMiwgM1wpCisnJycpCisKK2NsYXNzIFB5UHJpbnRUZXN0cyhEZWJ1Z2dlclRlc3RzKToKKyAgICBAdW5pdHRlc3Quc2tpcElmKHB5dGhvbl9pc19vcHRpbWl6ZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICJQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggb3B0aW1pemF0aW9ucyIpCisgICAgZGVmIHRlc3RfYmFzaWNfY29tbWFuZChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGF0IHRoZSAicHktcHJpbnQiIGNvbW1hbmQgd29ya3MnCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1wcmludCBhcmdzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmxvY2FsICdhcmdzJyA9IFwoMSwgMiwgM1wpXG4uKiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUFlVUF9QWURPV04sICJ0ZXN0IHJlcXVpcmVzIHB5LXVwL3B5LWRvd24gY29tbWFuZHMiKQorICAgIEB1bml0dGVzdC5za2lwSWYocHl0aG9uX2lzX29wdGltaXplZCgpLAorICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zIikKKyAgICBkZWYgdGVzdF9wcmludF9hZnRlcl91cChzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJywgJ3B5LXByaW50IGMnLCAncHktcHJpbnQgYicsICdweS1wcmludCBhJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmxvY2FsICdjJyA9IDNcbmxvY2FsICdiJyA9IDJcbmxvY2FsICdhJyA9IDFcbi4qIikKKworICAgIEB1bml0dGVzdC5za2lwSWYocHl0aG9uX2lzX29wdGltaXplZCgpLAorICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zIikKKyAgICBkZWYgdGVzdF9wcmludGluZ19nbG9iYWwoc2VsZik6CisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1wcmludCBfX25hbWVfXyddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5nbG9iYWwgJ19fbmFtZV9fJyA9ICdfX21haW5fXydcbi4qIikKKworICAgIEB1bml0dGVzdC5za2lwSWYocHl0aG9uX2lzX29wdGltaXplZCgpLAorICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zIikKKyAgICBkZWYgdGVzdF9wcmludGluZ19idWlsdGluKHNlbGYpOgorICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktcHJpbnQgbGVuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmJ1aWx0aW4gJ2xlbicgPSA8YnVpbHQtaW4gZnVuY3Rpb24gbGVuPlxuLioiKQorCitjbGFzcyBQeUxvY2Fsc1Rlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIEB1bml0dGVzdC5za2lwSWYocHl0aG9uX2lzX29wdGltaXplZCgpLAorICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zIikKKyAgICBkZWYgdGVzdF9iYXNpY19jb21tYW5kKHNlbGYpOgorICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktbG9jYWxzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmFyZ3MgPSBcKDEsIDIsIDNcKVxuLioiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKHB5dGhvbl9pc19vcHRpbWl6ZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICJQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggb3B0aW1pemF0aW9ucyIpCisgICAgZGVmIHRlc3RfbG9jYWxzX2FmdGVyX3VwKHNlbGYpOgorICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktdXAnLCAncHktbG9jYWxzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmEgPSAxXG5iID0gMlxuYyA9IDNcbi4qIikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChQcmV0dHlQcmludFRlc3RzLAorICAgICAgICAgICAgICAgICBQeUxpc3RUZXN0cywKKyAgICAgICAgICAgICAgICAgU3RhY2tOYXZpZ2F0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgIFB5QnRUZXN0cywKKyAgICAgICAgICAgICAgICAgUHlQcmludFRlc3RzLAorICAgICAgICAgICAgICAgICBQeUxvY2Fsc1Rlc3RzCisgICAgICAgICAgICAgICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2RibS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dkYm0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxNjlhMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dkYm0ucHkKQEAgLTAsMCArMSw4MiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmssIGltcG9ydF9tb2R1bGUKK2dkYm0gPSBpbXBvcnRfbW9kdWxlKCdnZGJtJykKKworCitmaWxlbmFtZSA9IFRFU1RGTgorCitjbGFzcyBUZXN0R2RibSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZyA9IE5vbmUKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5nLmNsb3NlKCkKKyAgICAgICAgdW5saW5rKGZpbGVuYW1lKQorCisgICAgZGVmIHRlc3Rfa2V5X21ldGhvZHMoc2VsZik6CisgICAgICAgIHNlbGYuZyA9IGdkYm0ub3BlbihmaWxlbmFtZSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZy5rZXlzKCksIFtdKQorICAgICAgICBzZWxmLmdbJ2EnXSA9ICdiJworICAgICAgICBzZWxmLmdbJzEyMzQ1Njc4OTEwJ10gPSAnMDE5MjM3NDEwOTgyMzQwOTEyODQwMTk4MjQyJworICAgICAgICBrZXlfc2V0ID0gc2V0KHNlbGYuZy5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5X3NldCwgZnJvemVuc2V0KFsnYScsICcxMjM0NTY3ODkxMCddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZy5oYXNfa2V5KCdhJykpCisgICAgICAgIGtleSA9IHNlbGYuZy5maXJzdGtleSgpCisgICAgICAgIHdoaWxlIGtleToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBrZXlfc2V0KQorICAgICAgICAgICAga2V5X3NldC5yZW1vdmUoa2V5KQorICAgICAgICAgICAga2V5ID0gc2VsZi5nLm5leHRrZXkoa2V5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLmdbJ3h4eCddKQorCisgICAgZGVmIHRlc3RfZXJyb3JfY29uZGl0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUcnkgdG8gb3BlbiBhIG5vbi1leGlzdGVudCBkYXRhYmFzZS4KKyAgICAgICAgdW5saW5rKGZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhnZGJtLmVycm9yLCBnZGJtLm9wZW4sIGZpbGVuYW1lLCAncicpCisgICAgICAgICMgVHJ5IHRvIGFjY2VzcyBhIGNsb3NlZCBkYXRhYmFzZS4KKyAgICAgICAgc2VsZi5nID0gZ2RibS5vcGVuKGZpbGVuYW1lLCAnYycpCisgICAgICAgIHNlbGYuZy5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGdkYm0uZXJyb3IsIGxhbWJkYTogc2VsZi5nWydhJ10pCisgICAgICAgICMgdHJ5IHBhc3MgYW4gaW52YWxpZCBvcGVuIGZsYWcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZ2RibS5lcnJvciwgbGFtYmRhOiBnZGJtLm9wZW4oZmlsZW5hbWUsICdyeCcpLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBmbGFnIHBhcmFtZXRlciBvcGVuKCkgYnkgdHJ5aW5nIGFsbCBzdXBwb3J0ZWQgZmxhZyBtb2Rlcy4KKyAgICAgICAgYWxsID0gc2V0KGdkYm0ub3Blbl9mbGFncykKKyAgICAgICAgIyBUZXN0IHN0YW5kYXJkIGZsYWdzIChwcmVzdW1hYmx5ICJjcnduIikuCisgICAgICAgIG1vZGVzID0gYWxsIC0gc2V0KCdmc3UnKQorICAgICAgICBmb3IgbW9kZSBpbiBzb3J0ZWQobW9kZXMpOgorICAgICAgICAgICAgc2VsZi5nID0gZ2RibS5vcGVuKGZpbGVuYW1lLCBtb2RlKQorICAgICAgICAgICAgc2VsZi5nLmNsb3NlKCkKKworICAgICAgICAjIFRlc3QgYWRkaXRpb25hbCBmbGFncyAocHJlc3VtYWJseSAiZnN1IikuCisgICAgICAgIGZsYWdzID0gYWxsIC0gc2V0KCdjcnduJykKKyAgICAgICAgZm9yIG1vZGUgaW4gbW9kZXM6CisgICAgICAgICAgICBmb3IgZmxhZyBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBzZWxmLmcgPSBnZGJtLm9wZW4oZmlsZW5hbWUsIG1vZGUgKyBmbGFnKQorICAgICAgICAgICAgICAgIHNlbGYuZy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9yZW9yZ2FuaXplKHNlbGYpOgorICAgICAgICBzZWxmLmcgPSBnZGJtLm9wZW4oZmlsZW5hbWUsICdjJykKKyAgICAgICAgc2l6ZTAgPSBvcy5wYXRoLmdldHNpemUoZmlsZW5hbWUpCisKKyAgICAgICAgc2VsZi5nWyd4J10gPSAneCcgKiAxMDAwMAorICAgICAgICBzaXplMSA9IG9zLnBhdGguZ2V0c2l6ZShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemUwIDwgc2l6ZTEpCisKKyAgICAgICAgZGVsIHNlbGYuZ1sneCddCisgICAgICAgICMgJ3NpemUnIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGV2ZW4gYWZ0ZXIgZGVsZXRpbmcgYW4gZW50cnkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKGZpbGVuYW1lKSwgc2l6ZTEpCisKKyAgICAgICAgc2VsZi5nLnJlb3JnYW5pemUoKQorICAgICAgICBzaXplMiA9IG9zLnBhdGguZ2V0c2l6ZShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemUxID4gc2l6ZTIgPj0gc2l6ZTApCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0R2RibSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczOTlmNwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKQEAgLTAsMCArMSwxOTA3IEBACit0dXRvcmlhbF90ZXN0cyA9ICIiIgorTGV0J3MgdHJ5IGEgc2ltcGxlIGdlbmVyYXRvcjoKKworICAgID4+PiBkZWYgZigpOgorICAgIC4uLiAgICB5aWVsZCAxCisgICAgLi4uICAgIHlpZWxkIDIKKworICAgID4+PiBmb3IgaSBpbiBmKCk6CisgICAgLi4uICAgICBwcmludCBpCisgICAgMQorICAgIDIKKyAgICA+Pj4gZyA9IGYoKQorICAgID4+PiBnLm5leHQoKQorICAgIDEKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICAyCisKKyJGYWxsaW5nIG9mZiB0aGUgZW5kIiBzdG9wcyB0aGUgZ2VuZXJhdG9yOgorCisgICAgPj4+IGcubmV4dCgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPworICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gZworICAgIFN0b3BJdGVyYXRpb24KKworInJldHVybiIgYWxzbyBzdG9wcyB0aGUgZ2VuZXJhdG9yOgorCisgICAgPj4+IGRlZiBmKCk6CisgICAgLi4uICAgICB5aWVsZCAxCisgICAgLi4uICAgICByZXR1cm4KKyAgICAuLi4gICAgIHlpZWxkIDIgIyBuZXZlciByZWFjaGVkCisgICAgLi4uCisgICAgPj4+IGcgPSBmKCkKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICAxCisgICAgPj4+IGcubmV4dCgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPworICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMywgaW4gZgorICAgIFN0b3BJdGVyYXRpb24KKyAgICA+Pj4gZy5uZXh0KCkgIyBvbmNlIHN0b3BwZWQsIGNhbid0IGJlIHJlc3VtZWQKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CisgICAgU3RvcEl0ZXJhdGlvbgorCisicmFpc2UgU3RvcEl0ZXJhdGlvbiIgc3RvcHMgdGhlIGdlbmVyYXRvciB0b286CisKKyAgICA+Pj4gZGVmIGYoKToKKyAgICAuLi4gICAgIHlpZWxkIDEKKyAgICAuLi4gICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAuLi4gICAgIHlpZWxkIDIgIyBuZXZlciByZWFjaGVkCisgICAgLi4uCisgICAgPj4+IGcgPSBmKCkKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICAxCisgICAgPj4+IGcubmV4dCgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPworICAgIFN0b3BJdGVyYXRpb24KKyAgICA+Pj4gZy5uZXh0KCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CisgICAgU3RvcEl0ZXJhdGlvbgorCitIb3dldmVyLCB0aGV5IGFyZSBub3QgZXhhY3RseSBlcXVpdmFsZW50OgorCisgICAgPj4+IGRlZiBnMSgpOgorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIHJldHVybgorICAgIC4uLiAgICAgZXhjZXB0OgorICAgIC4uLiAgICAgICAgIHlpZWxkIDEKKyAgICAuLi4KKyAgICA+Pj4gbGlzdChnMSgpKQorICAgIFtdCisKKyAgICA+Pj4gZGVmIGcyKCk6CisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgIC4uLiAgICAgZXhjZXB0OgorICAgIC4uLiAgICAgICAgIHlpZWxkIDQyCisgICAgPj4+IHByaW50IGxpc3QoZzIoKSkKKyAgICBbNDJdCisKK1RoaXMgbWF5IGJlIHN1cnByaXNpbmcgYXQgZmlyc3Q6CisKKyAgICA+Pj4gZGVmIGczKCk6CisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgcmV0dXJuCisgICAgLi4uICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgIHlpZWxkIDEKKyAgICAuLi4KKyAgICA+Pj4gbGlzdChnMygpKQorICAgIFsxXQorCitMZXQncyBjcmVhdGUgYW4gYWx0ZXJuYXRlIHJhbmdlKCkgZnVuY3Rpb24gaW1wbGVtZW50ZWQgYXMgYSBnZW5lcmF0b3I6CisKKyAgICA+Pj4gZGVmIHlyYW5nZShuKToKKyAgICAuLi4gICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgIC4uLiAgICAgICAgIHlpZWxkIGkKKyAgICAuLi4KKyAgICA+Pj4gbGlzdCh5cmFuZ2UoNSkpCisgICAgWzAsIDEsIDIsIDMsIDRdCisKK0dlbmVyYXRvcnMgYWx3YXlzIHJldHVybiB0byB0aGUgbW9zdCByZWNlbnQgY2FsbGVyOgorCisgICAgPj4+IGRlZiBjcmVhdG9yKCk6CisgICAgLi4uICAgICByID0geXJhbmdlKDUpCisgICAgLi4uICAgICBwcmludCAiY3JlYXRvciIsIHIubmV4dCgpCisgICAgLi4uICAgICByZXR1cm4gcgorICAgIC4uLgorICAgID4+PiBkZWYgY2FsbGVyKCk6CisgICAgLi4uICAgICByID0gY3JlYXRvcigpCisgICAgLi4uICAgICBmb3IgaSBpbiByOgorICAgIC4uLiAgICAgICAgICAgICBwcmludCAiY2FsbGVyIiwgaQorICAgIC4uLgorICAgID4+PiBjYWxsZXIoKQorICAgIGNyZWF0b3IgMAorICAgIGNhbGxlciAxCisgICAgY2FsbGVyIDIKKyAgICBjYWxsZXIgMworICAgIGNhbGxlciA0CisKK0dlbmVyYXRvcnMgY2FuIGNhbGwgb3RoZXIgZ2VuZXJhdG9yczoKKworICAgID4+PiBkZWYgenJhbmdlKG4pOgorICAgIC4uLiAgICAgZm9yIGkgaW4geXJhbmdlKG4pOgorICAgIC4uLiAgICAgICAgIHlpZWxkIGkKKyAgICAuLi4KKyAgICA+Pj4gbGlzdCh6cmFuZ2UoNSkpCisgICAgWzAsIDEsIDIsIDMsIDRdCisKKyIiIgorCisjIFRoZSBleGFtcGxlcyBmcm9tIFBFUCAyNTUuCisKK3BlcF90ZXN0cyA9ICIiIgorCitTcGVjaWZpY2F0aW9uOiAgWWllbGQKKworICAgIFJlc3RyaWN0aW9uOiAgQSBnZW5lcmF0b3IgY2Fubm90IGJlIHJlc3VtZWQgd2hpbGUgaXQgaXMgYWN0aXZlbHkKKyAgICBydW5uaW5nOgorCisgICAgPj4+IGRlZiBnKCk6CisgICAgLi4uICAgICBpID0gbWUubmV4dCgpCisgICAgLi4uICAgICB5aWVsZCBpCisgICAgPj4+IG1lID0gZygpCisgICAgPj4+IG1lLm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgLi4uCisgICAgICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMiwgaW4gZworICAgIFZhbHVlRXJyb3I6IGdlbmVyYXRvciBhbHJlYWR5IGV4ZWN1dGluZworCitTcGVjaWZpY2F0aW9uOiBSZXR1cm4KKworICAgIE5vdGUgdGhhdCByZXR1cm4gaXNuJ3QgYWx3YXlzIGVxdWl2YWxlbnQgdG8gcmFpc2luZyBTdG9wSXRlcmF0aW9uOiAgdGhlCisgICAgZGlmZmVyZW5jZSBsaWVzIGluIGhvdyBlbmNsb3NpbmcgdHJ5L2V4Y2VwdCBjb25zdHJ1Y3RzIGFyZSB0cmVhdGVkLgorICAgIEZvciBleGFtcGxlLAorCisgICAgICAgID4+PiBkZWYgZjEoKToKKyAgICAgICAgLi4uICAgICB0cnk6CisgICAgICAgIC4uLiAgICAgICAgIHJldHVybgorICAgICAgICAuLi4gICAgIGV4Y2VwdDoKKyAgICAgICAgLi4uICAgICAgICB5aWVsZCAxCisgICAgICAgID4+PiBwcmludCBsaXN0KGYxKCkpCisgICAgICAgIFtdCisKKyAgICBiZWNhdXNlLCBhcyBpbiBhbnkgZnVuY3Rpb24sIHJldHVybiBzaW1wbHkgZXhpdHMsIGJ1dAorCisgICAgICAgID4+PiBkZWYgZjIoKToKKyAgICAgICAgLi4uICAgICB0cnk6CisgICAgICAgIC4uLiAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgLi4uICAgICBleGNlcHQ6CisgICAgICAgIC4uLiAgICAgICAgIHlpZWxkIDQyCisgICAgICAgID4+PiBwcmludCBsaXN0KGYyKCkpCisgICAgICAgIFs0Ml0KKworICAgIGJlY2F1c2UgU3RvcEl0ZXJhdGlvbiBpcyBjYXB0dXJlZCBieSBhIGJhcmUgImV4Y2VwdCIsIGFzIGlzIGFueQorICAgIGV4Y2VwdGlvbi4KKworU3BlY2lmaWNhdGlvbjogR2VuZXJhdG9ycyBhbmQgRXhjZXB0aW9uIFByb3BhZ2F0aW9uCisKKyAgICA+Pj4gZGVmIGYoKToKKyAgICAuLi4gICAgIHJldHVybiAxLy8wCisgICAgPj4+IGRlZiBnKCk6CisgICAgLi4uICAgICB5aWVsZCBmKCkgICMgdGhlIHplcm8gZGl2aXNpb24gZXhjZXB0aW9uIHByb3BhZ2F0ZXMKKyAgICAuLi4gICAgIHlpZWxkIDQyICAgIyBhbmQgd2UnbGwgbmV2ZXIgZ2V0IGhlcmUKKyAgICA+Pj4gayA9IGcoKQorICAgID4+PiBrLm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIGcKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIGYKKyAgICBaZXJvRGl2aXNpb25FcnJvcjogaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybworICAgID4+PiBrLm5leHQoKSAgIyBhbmQgdGhlIGdlbmVyYXRvciBjYW5ub3QgYmUgcmVzdW1lZAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KKyAgICBTdG9wSXRlcmF0aW9uCisgICAgPj4+CisKK1NwZWNpZmljYXRpb246IFRyeS9FeGNlcHQvRmluYWxseQorCisgICAgPj4+IGRlZiBmKCk6CisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgeWllbGQgMQorICAgIC4uLiAgICAgICAgIHRyeToKKyAgICAuLi4gICAgICAgICAgICAgeWllbGQgMgorICAgIC4uLiAgICAgICAgICAgICAxLy8wCisgICAgLi4uICAgICAgICAgICAgIHlpZWxkIDMgICMgbmV2ZXIgZ2V0IGhlcmUKKyAgICAuLi4gICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgLi4uICAgICAgICAgICAgIHlpZWxkIDQKKyAgICAuLi4gICAgICAgICAgICAgeWllbGQgNQorICAgIC4uLiAgICAgICAgICAgICByYWlzZQorICAgIC4uLiAgICAgICAgIGV4Y2VwdDoKKyAgICAuLi4gICAgICAgICAgICAgeWllbGQgNgorICAgIC4uLiAgICAgICAgIHlpZWxkIDcgICAgICMgdGhlICJyYWlzZSIgYWJvdmUgc3RvcHMgdGhpcworICAgIC4uLiAgICAgZXhjZXB0OgorICAgIC4uLiAgICAgICAgIHlpZWxkIDgKKyAgICAuLi4gICAgIHlpZWxkIDkKKyAgICAuLi4gICAgIHRyeToKKyAgICAuLi4gICAgICAgICB4ID0gMTIKKyAgICAuLi4gICAgIGZpbmFsbHk6CisgICAgLi4uICAgICAgICAgeWllbGQgMTAKKyAgICAuLi4gICAgIHlpZWxkIDExCisgICAgPj4+IHByaW50IGxpc3QoZigpKQorICAgIFsxLCAyLCA0LCA1LCA4LCA5LCAxMCwgMTFdCisgICAgPj4+CisKK0d1aWRvJ3MgYmluYXJ5IHRyZWUgZXhhbXBsZS4KKworICAgID4+PiAjIEEgYmluYXJ5IHRyZWUgY2xhc3MuCisgICAgPj4+IGNsYXNzIFRyZWU6CisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwsIGxlZnQ9Tm9uZSwgcmlnaHQ9Tm9uZSk6CisgICAgLi4uICAgICAgICAgc2VsZi5sYWJlbCA9IGxhYmVsCisgICAgLi4uICAgICAgICAgc2VsZi5sZWZ0ID0gbGVmdAorICAgIC4uLiAgICAgICAgIHNlbGYucmlnaHQgPSByaWdodAorICAgIC4uLgorICAgIC4uLiAgICAgZGVmIF9fcmVwcl9fKHNlbGYsIGxldmVsPTAsIGluZGVudD0iICAgICIpOgorICAgIC4uLiAgICAgICAgIHMgPSBsZXZlbCppbmRlbnQgKyByZXByKHNlbGYubGFiZWwpCisgICAgLi4uICAgICAgICAgaWYgc2VsZi5sZWZ0OgorICAgIC4uLiAgICAgICAgICAgICBzID0gcyArICJcXG4iICsgc2VsZi5sZWZ0Ll9fcmVwcl9fKGxldmVsKzEsIGluZGVudCkKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLnJpZ2h0OgorICAgIC4uLiAgICAgICAgICAgICBzID0gcyArICJcXG4iICsgc2VsZi5yaWdodC5fX3JlcHJfXyhsZXZlbCsxLCBpbmRlbnQpCisgICAgLi4uICAgICAgICAgcmV0dXJuIHMKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gaW5vcmRlcihzZWxmKQorCisgICAgPj4+ICMgQ3JlYXRlIGEgVHJlZSBmcm9tIGEgbGlzdC4KKyAgICA+Pj4gZGVmIHRyZWUobGlzdCk6CisgICAgLi4uICAgICBuID0gbGVuKGxpc3QpCisgICAgLi4uICAgICBpZiBuID09IDA6CisgICAgLi4uICAgICAgICAgcmV0dXJuIFtdCisgICAgLi4uICAgICBpID0gbiAvLyAyCisgICAgLi4uICAgICByZXR1cm4gVHJlZShsaXN0W2ldLCB0cmVlKGxpc3RbOmldKSwgdHJlZShsaXN0W2krMTpdKSkKKworICAgID4+PiAjIFNob3cgaXQgb2ZmOiBjcmVhdGUgYSB0cmVlLgorICAgID4+PiB0ID0gdHJlZSgiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiKQorCisgICAgPj4+ICMgQSByZWN1cnNpdmUgZ2VuZXJhdG9yIHRoYXQgZ2VuZXJhdGVzIFRyZWUgbGFiZWxzIGluIGluLW9yZGVyLgorICAgID4+PiBkZWYgaW5vcmRlcih0KToKKyAgICAuLi4gICAgIGlmIHQ6CisgICAgLi4uICAgICAgICAgZm9yIHggaW4gaW5vcmRlcih0LmxlZnQpOgorICAgIC4uLiAgICAgICAgICAgICB5aWVsZCB4CisgICAgLi4uICAgICAgICAgeWllbGQgdC5sYWJlbAorICAgIC4uLiAgICAgICAgIGZvciB4IGluIGlub3JkZXIodC5yaWdodCk6CisgICAgLi4uICAgICAgICAgICAgIHlpZWxkIHgKKworICAgID4+PiAjIFNob3cgaXQgb2ZmOiBjcmVhdGUgYSB0cmVlLgorICAgID4+PiB0ID0gdHJlZSgiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiKQorICAgID4+PiAjIFByaW50IHRoZSBub2RlcyBvZiB0aGUgdHJlZSBpbiBpbi1vcmRlci4KKyAgICA+Pj4gZm9yIHggaW4gdDoKKyAgICAuLi4gICAgIHByaW50IHgsCisgICAgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaCisKKyAgICA+Pj4gIyBBIG5vbi1yZWN1cnNpdmUgZ2VuZXJhdG9yLgorICAgID4+PiBkZWYgaW5vcmRlcihub2RlKToKKyAgICAuLi4gICAgIHN0YWNrID0gW10KKyAgICAuLi4gICAgIHdoaWxlIG5vZGU6CisgICAgLi4uICAgICAgICAgd2hpbGUgbm9kZS5sZWZ0OgorICAgIC4uLiAgICAgICAgICAgICBzdGFjay5hcHBlbmQobm9kZSkKKyAgICAuLi4gICAgICAgICAgICAgbm9kZSA9IG5vZGUubGVmdAorICAgIC4uLiAgICAgICAgIHlpZWxkIG5vZGUubGFiZWwKKyAgICAuLi4gICAgICAgICB3aGlsZSBub3Qgbm9kZS5yaWdodDoKKyAgICAuLi4gICAgICAgICAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgICAgICAgICAgbm9kZSA9IHN0YWNrLnBvcCgpCisgICAgLi4uICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgIC4uLiAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgLi4uICAgICAgICAgICAgIHlpZWxkIG5vZGUubGFiZWwKKyAgICAuLi4gICAgICAgICBub2RlID0gbm9kZS5yaWdodAorCisgICAgPj4+ICMgRXhlcmNpc2UgdGhlIG5vbi1yZWN1cnNpdmUgZ2VuZXJhdG9yLgorICAgID4+PiBmb3IgeCBpbiB0OgorICAgIC4uLiAgICAgcHJpbnQgeCwKKyAgICBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFoKKworIiIiCisKKyMgRXhhbXBsZXMgZnJvbSBJdGVyYXRvci1MaXN0IGFuZCBQeXRob24tRGV2IGFuZCBjLmwucHkuCisKK2VtYWlsX3Rlc3RzID0gIiIiCisKK1RoZSBkaWZmZXJlbmNlIGJldHdlZW4geWllbGRpbmcgTm9uZSBhbmQgcmV0dXJuaW5nIGl0LgorCis+Pj4gZGVmIGcoKToKKy4uLiAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisuLi4gICAgICAgICB5aWVsZCBOb25lCisuLi4gICAgIHlpZWxkIE5vbmUKKy4uLiAgICAgcmV0dXJuCis+Pj4gbGlzdChnKCkpCitbTm9uZSwgTm9uZSwgTm9uZSwgTm9uZV0KKworRW5zdXJlIHRoYXQgZXhwbGljaXRseSByYWlzaW5nIFN0b3BJdGVyYXRpb24gYWN0cyBsaWtlIGFueSBvdGhlciBleGNlcHRpb24KK2luIHRyeS9leGNlcHQsIG5vdCBsaWtlIGEgcmV0dXJuLgorCis+Pj4gZGVmIGcoKToKKy4uLiAgICAgeWllbGQgMQorLi4uICAgICB0cnk6CisuLi4gICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisuLi4gICAgIGV4Y2VwdDoKKy4uLiAgICAgICAgIHlpZWxkIDIKKy4uLiAgICAgeWllbGQgMworPj4+IGxpc3QoZygpKQorWzEsIDIsIDNdCisKK05leHQgb25lIHdhcyBwb3N0ZWQgdG8gYy5sLnB5LgorCis+Pj4gZGVmIGdjb21iKHgsIGspOgorLi4uICAgICAiR2VuZXJhdGUgYWxsIGNvbWJpbmF0aW9ucyBvZiBrIGVsZW1lbnRzIGZyb20gbGlzdCB4LiIKKy4uLgorLi4uICAgICBpZiBrID4gbGVuKHgpOgorLi4uICAgICAgICAgcmV0dXJuCisuLi4gICAgIGlmIGsgPT0gMDoKKy4uLiAgICAgICAgIHlpZWxkIFtdCisuLi4gICAgIGVsc2U6CisuLi4gICAgICAgICBmaXJzdCwgcmVzdCA9IHhbMF0sIHhbMTpdCisuLi4gICAgICAgICAjIEEgY29tYmluYXRpb24gZG9lcyBvciBkb2Vzbid0IGNvbnRhaW4gZmlyc3QuCisuLi4gICAgICAgICAjIElmIGl0IGRvZXMsIHRoZSByZW1haW5kZXIgaXMgYSBrLTEgY29tYiBvZiByZXN0LgorLi4uICAgICAgICAgZm9yIGMgaW4gZ2NvbWIocmVzdCwgay0xKToKKy4uLiAgICAgICAgICAgICBjLmluc2VydCgwLCBmaXJzdCkKKy4uLiAgICAgICAgICAgICB5aWVsZCBjCisuLi4gICAgICAgICAjIElmIGl0IGRvZXNuJ3QgY29udGFpbiBmaXJzdCwgaXQncyBhIGsgY29tYiBvZiByZXN0LgorLi4uICAgICAgICAgZm9yIGMgaW4gZ2NvbWIocmVzdCwgayk6CisuLi4gICAgICAgICAgICAgeWllbGQgYworCis+Pj4gc2VxID0gcmFuZ2UoMSwgNSkKKz4+PiBmb3IgayBpbiByYW5nZShsZW4oc2VxKSArIDIpOgorLi4uICAgICBwcmludCAiJWQtY29tYnMgb2YgJXM6IiAlIChrLCBzZXEpCisuLi4gICAgIGZvciBjIGluIGdjb21iKHNlcSwgayk6CisuLi4gICAgICAgICBwcmludCAiICAgIiwgYworMC1jb21icyBvZiBbMSwgMiwgMywgNF06CisgICAgW10KKzEtY29tYnMgb2YgWzEsIDIsIDMsIDRdOgorICAgIFsxXQorICAgIFsyXQorICAgIFszXQorICAgIFs0XQorMi1jb21icyBvZiBbMSwgMiwgMywgNF06CisgICAgWzEsIDJdCisgICAgWzEsIDNdCisgICAgWzEsIDRdCisgICAgWzIsIDNdCisgICAgWzIsIDRdCisgICAgWzMsIDRdCiszLWNvbWJzIG9mIFsxLCAyLCAzLCA0XToKKyAgICBbMSwgMiwgM10KKyAgICBbMSwgMiwgNF0KKyAgICBbMSwgMywgNF0KKyAgICBbMiwgMywgNF0KKzQtY29tYnMgb2YgWzEsIDIsIDMsIDRdOgorICAgIFsxLCAyLCAzLCA0XQorNS1jb21icyBvZiBbMSwgMiwgMywgNF06CisKK0Zyb20gdGhlIEl0ZXJhdG9ycyBsaXN0LCBhYm91dCB0aGUgdHlwZXMgb2YgdGhlc2UgdGhpbmdzLgorCis+Pj4gZGVmIGcoKToKKy4uLiAgICAgeWllbGQgMQorLi4uCis+Pj4gdHlwZShnKQorPHR5cGUgJ2Z1bmN0aW9uJz4KKz4+PiBpID0gZygpCis+Pj4gdHlwZShpKQorPHR5cGUgJ2dlbmVyYXRvcic+Cis+Pj4gW3MgZm9yIHMgaW4gZGlyKGkpIGlmIG5vdCBzLnN0YXJ0c3dpdGgoJ18nKV0KK1snY2xvc2UnLCAnZ2lfY29kZScsICdnaV9mcmFtZScsICdnaV9ydW5uaW5nJywgJ25leHQnLCAnc2VuZCcsICd0aHJvdyddCis+Pj4gZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgSEFWRV9ET0NTVFJJTkdTCis+Pj4gcHJpbnQoaS5uZXh0Ll9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ3gubmV4dCgpIC0+IHRoZSBuZXh0IHZhbHVlLCBvciByYWlzZSBTdG9wSXRlcmF0aW9uJykKK3gubmV4dCgpIC0+IHRoZSBuZXh0IHZhbHVlLCBvciByYWlzZSBTdG9wSXRlcmF0aW9uCis+Pj4gaXRlcihpKSBpcyBpCitUcnVlCis+Pj4gaW1wb3J0IHR5cGVzCis+Pj4gaXNpbnN0YW5jZShpLCB0eXBlcy5HZW5lcmF0b3JUeXBlKQorVHJ1ZQorCitBbmQgbW9yZSwgYWRkZWQgbGF0ZXIuCisKKz4+PiBpLmdpX3J1bm5pbmcKKzAKKz4+PiB0eXBlKGkuZ2lfZnJhbWUpCis8dHlwZSAnZnJhbWUnPgorPj4+IGkuZ2lfcnVubmluZyA9IDQyCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorVHlwZUVycm9yOiByZWFkb25seSBhdHRyaWJ1dGUKKz4+PiBkZWYgZygpOgorLi4uICAgICB5aWVsZCBtZS5naV9ydW5uaW5nCis+Pj4gbWUgPSBnKCkKKz4+PiBtZS5naV9ydW5uaW5nCiswCis+Pj4gbWUubmV4dCgpCisxCis+Pj4gbWUuZ2lfcnVubmluZworMAorCitBIGNsZXZlciB1bmlvbi1maW5kIGltcGxlbWVudGF0aW9uIGZyb20gYy5sLnB5LCBkdWUgdG8gRGF2aWQgRXBwc3RlaW4uCitTZW50OiBGcmlkYXksIEp1bmUgMjksIDIwMDEgMTI6MTYgUE0KK1RvOiBweXRob24tbGlzdEBweXRob24ub3JnCitTdWJqZWN0OiBSZTogUEVQIDI1NTogU2ltcGxlIEdlbmVyYXRvcnMKKworPj4+IGNsYXNzIGRpc2pvaW50U2V0OgorLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisuLi4gICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisuLi4gICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKKy4uLiAgICAgICAgIHNlbGYuZ2VuZXJhdG9yID0gc2VsZi5nZW5lcmF0ZSgpCisuLi4KKy4uLiAgICAgZGVmIGdlbmVyYXRlKHNlbGYpOgorLi4uICAgICAgICAgd2hpbGUgbm90IHNlbGYucGFyZW50OgorLi4uICAgICAgICAgICAgIHlpZWxkIHNlbGYKKy4uLiAgICAgICAgIGZvciB4IGluIHNlbGYucGFyZW50LmdlbmVyYXRvcjoKKy4uLiAgICAgICAgICAgICB5aWVsZCB4CisuLi4KKy4uLiAgICAgZGVmIGZpbmQoc2VsZik6CisuLi4gICAgICAgICByZXR1cm4gc2VsZi5nZW5lcmF0b3IubmV4dCgpCisuLi4KKy4uLiAgICAgZGVmIHVuaW9uKHNlbGYsIHBhcmVudCk6CisuLi4gICAgICAgICBpZiBzZWxmLnBhcmVudDoKKy4uLiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJTb3JyeSwgSSdtIG5vdCBhIHJvb3QhIikKKy4uLiAgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CisuLi4KKy4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6CisuLi4gICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKKz4+PiBuYW1lcyA9ICJBQkNERUZHSElKS0xNIgorPj4+IHNldHMgPSBbZGlzam9pbnRTZXQobmFtZSkgZm9yIG5hbWUgaW4gbmFtZXNdCis+Pj4gcm9vdHMgPSBzZXRzWzpdCisKKz4+PiBpbXBvcnQgcmFuZG9tCis+Pj4gZ2VuID0gcmFuZG9tLldpY2htYW5uSGlsbCg0MikKKz4+PiB3aGlsZSAxOgorLi4uICAgICBmb3IgcyBpbiBzZXRzOgorLi4uICAgICAgICAgcHJpbnQgIiVzLT4lcyIgJSAocywgcy5maW5kKCkpLAorLi4uICAgICBwcmludAorLi4uICAgICBpZiBsZW4ocm9vdHMpID4gMToKKy4uLiAgICAgICAgIHMxID0gZ2VuLmNob2ljZShyb290cykKKy4uLiAgICAgICAgIHJvb3RzLnJlbW92ZShzMSkKKy4uLiAgICAgICAgIHMyID0gZ2VuLmNob2ljZShyb290cykKKy4uLiAgICAgICAgIHMxLnVuaW9uKHMyKQorLi4uICAgICAgICAgcHJpbnQgIm1lcmdlZCIsIHMxLCAiaW50byIsIHMyCisuLi4gICAgIGVsc2U6CisuLi4gICAgICAgICBicmVhaworQS0+QSBCLT5CIEMtPkMgRC0+RCBFLT5FIEYtPkYgRy0+RyBILT5IIEktPkkgSi0+SiBLLT5LIEwtPkwgTS0+TQorbWVyZ2VkIEQgaW50byBHCitBLT5BIEItPkIgQy0+QyBELT5HIEUtPkUgRi0+RiBHLT5HIEgtPkggSS0+SSBKLT5KIEstPksgTC0+TCBNLT5NCittZXJnZWQgQyBpbnRvIEYKK0EtPkEgQi0+QiBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5MIE0tPk0KK21lcmdlZCBMIGludG8gQQorQS0+QSBCLT5CIEMtPkYgRC0+RyBFLT5FIEYtPkYgRy0+RyBILT5IIEktPkkgSi0+SiBLLT5LIEwtPkEgTS0+TQorbWVyZ2VkIEggaW50byBFCitBLT5BIEItPkIgQy0+RiBELT5HIEUtPkUgRi0+RiBHLT5HIEgtPkUgSS0+SSBKLT5KIEstPksgTC0+QSBNLT5NCittZXJnZWQgQiBpbnRvIEUKK0EtPkEgQi0+RSBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+RSBJLT5JIEotPkogSy0+SyBMLT5BIE0tPk0KK21lcmdlZCBKIGludG8gRworQS0+QSBCLT5FIEMtPkYgRC0+RyBFLT5FIEYtPkYgRy0+RyBILT5FIEktPkkgSi0+RyBLLT5LIEwtPkEgTS0+TQorbWVyZ2VkIEUgaW50byBHCitBLT5BIEItPkcgQy0+RiBELT5HIEUtPkcgRi0+RiBHLT5HIEgtPkcgSS0+SSBKLT5HIEstPksgTC0+QSBNLT5NCittZXJnZWQgTSBpbnRvIEcKK0EtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5JIEotPkcgSy0+SyBMLT5BIE0tPkcKK21lcmdlZCBJIGludG8gSworQS0+QSBCLT5HIEMtPkYgRC0+RyBFLT5HIEYtPkYgRy0+RyBILT5HIEktPksgSi0+RyBLLT5LIEwtPkEgTS0+RworbWVyZ2VkIEsgaW50byBBCitBLT5BIEItPkcgQy0+RiBELT5HIEUtPkcgRi0+RiBHLT5HIEgtPkcgSS0+QSBKLT5HIEstPkEgTC0+QSBNLT5HCittZXJnZWQgRiBpbnRvIEEKK0EtPkEgQi0+RyBDLT5BIEQtPkcgRS0+RyBGLT5BIEctPkcgSC0+RyBJLT5BIEotPkcgSy0+QSBMLT5BIE0tPkcKK21lcmdlZCBBIGludG8gRworQS0+RyBCLT5HIEMtPkcgRC0+RyBFLT5HIEYtPkcgRy0+RyBILT5HIEktPkcgSi0+RyBLLT5HIEwtPkcgTS0+RworCisiIiIKKyMgRW1hY3MgdHVyZCAnCisKKyMgRnVuIHRlc3RzIChmb3Igc3VmZmljaWVudGx5IHdhcnBlZCBub3Rpb25zIG9mICJmdW4iKS4KKworZnVuX3Rlc3RzID0gIiIiCisKK0J1aWxkIHVwIHRvIGEgcmVjdXJzaXZlIFNpZXZlIG9mIEVyYXRvc3RoZW5lcyBnZW5lcmF0b3IuCisKKz4+PiBkZWYgZmlyc3RuKGcsIG4pOgorLi4uICAgICByZXR1cm4gW2cubmV4dCgpIGZvciBpIGluIHJhbmdlKG4pXQorCis+Pj4gZGVmIGludHNmcm9tKGkpOgorLi4uICAgICB3aGlsZSAxOgorLi4uICAgICAgICAgeWllbGQgaQorLi4uICAgICAgICAgaSArPSAxCisKKz4+PiBmaXJzdG4oaW50c2Zyb20oNSksIDcpCitbNSwgNiwgNywgOCwgOSwgMTAsIDExXQorCis+Pj4gZGVmIGV4Y2x1ZGVfbXVsdGlwbGVzKG4sIGludHMpOgorLi4uICAgICBmb3IgaSBpbiBpbnRzOgorLi4uICAgICAgICAgaWYgaSAlIG46CisuLi4gICAgICAgICAgICAgeWllbGQgaQorCis+Pj4gZmlyc3RuKGV4Y2x1ZGVfbXVsdGlwbGVzKDMsIGludHNmcm9tKDEpKSwgNikKK1sxLCAyLCA0LCA1LCA3LCA4XQorCis+Pj4gZGVmIHNpZXZlKGludHMpOgorLi4uICAgICBwcmltZSA9IGludHMubmV4dCgpCisuLi4gICAgIHlpZWxkIHByaW1lCisuLi4gICAgIG5vdF9kaXZpc2libGVfYnlfcHJpbWUgPSBleGNsdWRlX211bHRpcGxlcyhwcmltZSwgaW50cykKKy4uLiAgICAgZm9yIHAgaW4gc2lldmUobm90X2RpdmlzaWJsZV9ieV9wcmltZSk6CisuLi4gICAgICAgICB5aWVsZCBwCisKKz4+PiBwcmltZXMgPSBzaWV2ZShpbnRzZnJvbSgyKSkKKz4+PiBmaXJzdG4ocHJpbWVzLCAyMCkKK1syLCAzLCA1LCA3LCAxMSwgMTMsIDE3LCAxOSwgMjMsIDI5LCAzMSwgMzcsIDQxLCA0MywgNDcsIDUzLCA1OSwgNjEsIDY3LCA3MV0KKworCitBbm90aGVyIGZhbW91cyBwcm9ibGVtOiAgZ2VuZXJhdGUgYWxsIGludGVnZXJzIG9mIHRoZSBmb3JtCisgICAgMioqaSAqIDMqKmogICogNSoqaworaW4gaW5jcmVhc2luZyBvcmRlciwgd2hlcmUgaSxqLGsgPj0gMC4gIFRyaWNraWVyIHRoYW4gaXQgbWF5IGxvb2sgYXQgZmlyc3QhCitUcnkgd3JpdGluZyBpdCB3aXRob3V0IGdlbmVyYXRvcnMsIGFuZCBjb3JyZWN0bHksIGFuZCB3aXRob3V0IGdlbmVyYXRpbmcKKzMgaW50ZXJuYWwgcmVzdWx0cyBmb3IgZWFjaCByZXN1bHQgb3V0cHV0LgorCis+Pj4gZGVmIHRpbWVzKG4sIGcpOgorLi4uICAgICBmb3IgaSBpbiBnOgorLi4uICAgICAgICAgeWllbGQgbiAqIGkKKz4+PiBmaXJzdG4odGltZXMoMTAsIGludHNmcm9tKDEpKSwgMTApCitbMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MCwgMTAwXQorCis+Pj4gZGVmIG1lcmdlKGcsIGgpOgorLi4uICAgICBuZyA9IGcubmV4dCgpCisuLi4gICAgIG5oID0gaC5uZXh0KCkKKy4uLiAgICAgd2hpbGUgMToKKy4uLiAgICAgICAgIGlmIG5nIDwgbmg6CisuLi4gICAgICAgICAgICAgeWllbGQgbmcKKy4uLiAgICAgICAgICAgICBuZyA9IGcubmV4dCgpCisuLi4gICAgICAgICBlbGlmIG5nID4gbmg6CisuLi4gICAgICAgICAgICAgeWllbGQgbmgKKy4uLiAgICAgICAgICAgICBuaCA9IGgubmV4dCgpCisuLi4gICAgICAgICBlbHNlOgorLi4uICAgICAgICAgICAgIHlpZWxkIG5nCisuLi4gICAgICAgICAgICAgbmcgPSBnLm5leHQoKQorLi4uICAgICAgICAgICAgIG5oID0gaC5uZXh0KCkKKworVGhlIGZvbGxvd2luZyB3b3JrcywgYnV0IGlzIGRvaW5nIGEgd2hhbGUgb2YgYSBsb3Qgb2YgcmVkdW5kYW50IHdvcmsgLS0KK2l0J3Mgbm90IGNsZWFyIGhvdyB0byBnZXQgdGhlIGludGVybmFsIHVzZXMgb2YgbTIzNSB0byBzaGFyZSBhIHNpbmdsZQorZ2VuZXJhdG9yLiAgTm90ZSB0aGF0IG1lX3RpbWVzMiAoZXRjKSBlYWNoIG5lZWQgdG8gc2VlIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlCityZXN1bHQgc2VxdWVuY2UuICBTbyB0aGlzIGlzIGFuIGV4YW1wbGUgd2hlcmUgbGF6eSBsaXN0cyBhcmUgbW9yZSBuYXR1cmFsCisoeW91IGNhbiBsb29rIGF0IHRoZSBoZWFkIG9mIGEgbGF6eSBsaXN0IGFueSBudW1iZXIgb2YgdGltZXMpLgorCis+Pj4gZGVmIG0yMzUoKToKKy4uLiAgICAgeWllbGQgMQorLi4uICAgICBtZV90aW1lczIgPSB0aW1lcygyLCBtMjM1KCkpCisuLi4gICAgIG1lX3RpbWVzMyA9IHRpbWVzKDMsIG0yMzUoKSkKKy4uLiAgICAgbWVfdGltZXM1ID0gdGltZXMoNSwgbTIzNSgpKQorLi4uICAgICBmb3IgaSBpbiBtZXJnZShtZXJnZShtZV90aW1lczIsCisuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIG1lX3RpbWVzMyksCisuLi4gICAgICAgICAgICAgICAgICAgIG1lX3RpbWVzNSk6CisuLi4gICAgICAgICB5aWVsZCBpCisKK0Rvbid0IHByaW50ICJ0b28gbWFueSIgb2YgdGhlc2UgLS0gdGhlIGltcGxlbWVudGF0aW9uIGFib3ZlIGlzIGV4dHJlbWVseQoraW5lZmZpY2llbnQ6ICBlYWNoIGNhbGwgb2YgbTIzNSgpIGxlYWRzIHRvIDMgcmVjdXJzaXZlIGNhbGxzLCBhbmQgaW4KK3R1cm4gZWFjaCBvZiB0aG9zZSAzIG1vcmUsIGFuZCBzbyBvbiwgYW5kIHNvIG9uLCB1bnRpbCB3ZSd2ZSBkZXNjZW5kZWQKK2Vub3VnaCBsZXZlbHMgdG8gc2F0aXNmeSB0aGUgcHJpbnQgc3RtdHMuICBWZXJ5IG9kZDogIHdoZW4gSSBwcmludGVkIDUKK2xpbmVzIG9mIHJlc3VsdHMgYmVsb3csIHRoaXMgbWFuYWdlZCB0byBzY3JldyB1cCBXaW45OCdzIG1hbGxvYyBpbiAidGhlCit1c3VhbCIgd2F5LCBpLmUuIHRoZSBoZWFwIGdyZXcgb3ZlciA0TWIgc28gV2luOTggc3RhcnRlZCBmcmFnbWVudGluZworYWRkcmVzcyBzcGFjZSwgYW5kIGl0ICpsb29rZWQqIGxpa2UgYSB2ZXJ5IHNsb3cgbGVhay4KKworPj4+IHJlc3VsdCA9IG0yMzUoKQorPj4+IGZvciBpIGluIHJhbmdlKDMpOgorLi4uICAgICBwcmludCBmaXJzdG4ocmVzdWx0LCAxNSkKK1sxLCAyLCAzLCA0LCA1LCA2LCA4LCA5LCAxMCwgMTIsIDE1LCAxNiwgMTgsIDIwLCAyNF0KK1syNSwgMjcsIDMwLCAzMiwgMzYsIDQwLCA0NSwgNDgsIDUwLCA1NCwgNjAsIDY0LCA3MiwgNzUsIDgwXQorWzgxLCA5MCwgOTYsIDEwMCwgMTA4LCAxMjAsIDEyNSwgMTI4LCAxMzUsIDE0NCwgMTUwLCAxNjAsIDE2MiwgMTgwLCAxOTJdCisKK0hlaC4gIEhlcmUncyBvbmUgd2F5IHRvIGdldCBhIHNoYXJlZCBsaXN0LCBjb21wbGV0ZSB3aXRoIGFuIGV4Y3J1Y2lhdGluZworbmFtZXNwYWNlIHJlbmFtaW5nIHRyaWNrLiAgVGhlICpwcmV0dHkqIHBhcnQgaXMgdGhhdCB0aGUgdGltZXMoKSBhbmQgbWVyZ2UoKQorZnVuY3Rpb25zIGNhbiBiZSByZXVzZWQgYXMtaXMsIGJlY2F1c2UgdGhleSBvbmx5IGFzc3VtZSB0aGVpciBzdHJlYW0KK2FyZ3VtZW50cyBhcmUgaXRlcmFibGUgLS0gYSBMYXp5TGlzdCBpcyB0aGUgc2FtZSBhcyBhIGdlbmVyYXRvciB0byB0aW1lcygpLgorCis+Pj4gY2xhc3MgTGF6eUxpc3Q6CisuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnKToKKy4uLiAgICAgICAgIHNlbGYuc29mYXIgPSBbXQorLi4uICAgICAgICAgc2VsZi5mZXRjaCA9IGcubmV4dAorLi4uCisuLi4gICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKy4uLiAgICAgICAgIHNvZmFyLCBmZXRjaCA9IHNlbGYuc29mYXIsIHNlbGYuZmV0Y2gKKy4uLiAgICAgICAgIHdoaWxlIGkgPj0gbGVuKHNvZmFyKToKKy4uLiAgICAgICAgICAgICBzb2Zhci5hcHBlbmQoZmV0Y2goKSkKKy4uLiAgICAgICAgIHJldHVybiBzb2ZhcltpXQorCis+Pj4gZGVmIG0yMzUoKToKKy4uLiAgICAgeWllbGQgMQorLi4uICAgICAjIEdhY2s6ICBtMjM1IGJlbG93IGFjdHVhbGx5IHJlZmVycyB0byBhIExhenlMaXN0LgorLi4uICAgICBtZV90aW1lczIgPSB0aW1lcygyLCBtMjM1KQorLi4uICAgICBtZV90aW1lczMgPSB0aW1lcygzLCBtMjM1KQorLi4uICAgICBtZV90aW1lczUgPSB0aW1lcyg1LCBtMjM1KQorLi4uICAgICBmb3IgaSBpbiBtZXJnZShtZXJnZShtZV90aW1lczIsCisuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIG1lX3RpbWVzMyksCisuLi4gICAgICAgICAgICAgICAgICAgIG1lX3RpbWVzNSk6CisuLi4gICAgICAgICB5aWVsZCBpCisKK1ByaW50IGFzIG1hbnkgb2YgdGhlc2UgYXMgeW91IGxpa2UgLS0gKnRoaXMqIGltcGxlbWVudGF0aW9uIGlzIG1lbW9yeS0KK2VmZmljaWVudC4KKworPj4+IG0yMzUgPSBMYXp5TGlzdChtMjM1KCkpCis+Pj4gZm9yIGkgaW4gcmFuZ2UoNSk6CisuLi4gICAgIHByaW50IFttMjM1W2pdIGZvciBqIGluIHJhbmdlKDE1KmksIDE1KihpKzEpKV0KK1sxLCAyLCAzLCA0LCA1LCA2LCA4LCA5LCAxMCwgMTIsIDE1LCAxNiwgMTgsIDIwLCAyNF0KK1syNSwgMjcsIDMwLCAzMiwgMzYsIDQwLCA0NSwgNDgsIDUwLCA1NCwgNjAsIDY0LCA3MiwgNzUsIDgwXQorWzgxLCA5MCwgOTYsIDEwMCwgMTA4LCAxMjAsIDEyNSwgMTI4LCAxMzUsIDE0NCwgMTUwLCAxNjAsIDE2MiwgMTgwLCAxOTJdCitbMjAwLCAyMTYsIDIyNSwgMjQwLCAyNDMsIDI1MCwgMjU2LCAyNzAsIDI4OCwgMzAwLCAzMjAsIDMyNCwgMzYwLCAzNzUsIDM4NF0KK1s0MDAsIDQwNSwgNDMyLCA0NTAsIDQ4MCwgNDg2LCA1MDAsIDUxMiwgNTQwLCA1NzYsIDYwMCwgNjI1LCA2NDAsIDY0OCwgNjc1XQorCitZZSBvbGRlIEZpYm9uYWNjaSBnZW5lcmF0b3IsIExhenlMaXN0IHN0eWxlLgorCis+Pj4gZGVmIGZpYmdlbihhLCBiKToKKy4uLgorLi4uICAgICBkZWYgc3VtKGcsIGgpOgorLi4uICAgICAgICAgd2hpbGUgMToKKy4uLiAgICAgICAgICAgICB5aWVsZCBnLm5leHQoKSArIGgubmV4dCgpCisuLi4KKy4uLiAgICAgZGVmIHRhaWwoZyk6CisuLi4gICAgICAgICBnLm5leHQoKSAgICAjIHRocm93IGZpcnN0IGF3YXkKKy4uLiAgICAgICAgIGZvciB4IGluIGc6CisuLi4gICAgICAgICAgICAgeWllbGQgeAorLi4uCisuLi4gICAgIHlpZWxkIGEKKy4uLiAgICAgeWllbGQgYgorLi4uICAgICBmb3IgcyBpbiBzdW0oaXRlcihmaWIpLAorLi4uICAgICAgICAgICAgICAgICAgdGFpbChpdGVyKGZpYikpKToKKy4uLiAgICAgICAgIHlpZWxkIHMKKworPj4+IGZpYiA9IExhenlMaXN0KGZpYmdlbigxLCAyKSkKKz4+PiBmaXJzdG4oaXRlcihmaWIpLCAxNykKK1sxLCAyLCAzLCA1LCA4LCAxMywgMjEsIDM0LCA1NSwgODksIDE0NCwgMjMzLCAzNzcsIDYxMCwgOTg3LCAxNTk3LCAyNTg0XQorCisKK1J1bm5pbmcgYWZ0ZXIgeW91ciB0YWlsIHdpdGggaXRlcnRvb2xzLnRlZSAobmV3IGluIHZlcnNpb24gMi40KQorCitUaGUgYWxnb3JpdGhtcyAibTIzNSIgKEhhbW1pbmcpIGFuZCBGaWJvbmFjY2kgcHJlc2VudGVkIGFib3ZlIGFyZSBib3RoCitleGFtcGxlcyBvZiBhIHdob2xlIGZhbWlseSBvZiBGUCAoZnVuY3Rpb25hbCBwcm9ncmFtbWluZykgYWxnb3JpdGhtcword2hlcmUgYSBmdW5jdGlvbiBwcm9kdWNlcyBhbmQgcmV0dXJucyBhIGxpc3Qgd2hpbGUgdGhlIHByb2R1Y3Rpb24gYWxnb3JpdGhtCitzdXBwb3NlIHRoZSBsaXN0IGFzIGFscmVhZHkgcHJvZHVjZWQgYnkgcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCitGb3IgdGhlc2UgYWxnb3JpdGhtcyB0byB3b3JrLCB0aGV5IG11c3Q6CisKKy0gcHJvZHVjZSBhdCBsZWFzdCBhIGZpcnN0IGVsZW1lbnQgd2l0aG91dCBwcmVzdXBwb3NpbmcgdGhlIGV4aXN0ZW5jZSBvZgorICB0aGUgcmVzdCBvZiB0aGUgbGlzdAorLSBwcm9kdWNlIHRoZWlyIGVsZW1lbnRzIGluIGEgbGF6eSBtYW5uZXIKKworVG8gd29yayBlZmZpY2llbnRseSwgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBtdXN0IG5vdCBiZSByZWNvbXB1dGVkIG92ZXIKK2FuZCBvdmVyIGFnYWluLiBUaGlzIGlzIGVuc3VyZWQgaW4gbW9zdCBGUCBsYW5ndWFnZXMgYXMgYSBidWlsdC1pbiBmZWF0dXJlLgorSW4gcHl0aG9uLCB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgbWFpbnRhaW4gYSBsaXN0IG9mIGFscmVhZHkgY29tcHV0ZWQgcmVzdWx0cworYW5kIGFiYW5kb24gZ2VudWluZSByZWN1cnNpdml0eS4KKworVGhpcyBpcyB3aGF0IGhhZCBiZWVuIGF0dGVtcHRlZCBhYm92ZSB3aXRoIHRoZSBMYXp5TGlzdCBjbGFzcy4gT25lIHByb2JsZW0KK3dpdGggdGhhdCBjbGFzcyBpcyB0aGF0IGl0IGtlZXBzIGEgbGlzdCBvZiBhbGwgb2YgdGhlIGdlbmVyYXRlZCByZXN1bHRzIGFuZAordGhlcmVmb3JlIGNvbnRpbnVhbGx5IGdyb3dzLiBUaGlzIHBhcnRpYWxseSBkZWZlYXRzIHRoZSBnb2FsIG9mIHRoZSBnZW5lcmF0b3IKK2NvbmNlcHQsIHZpei4gcHJvZHVjZSB0aGUgcmVzdWx0cyBvbmx5IGFzIG5lZWRlZCBpbnN0ZWFkIG9mIHByb2R1Y2luZyB0aGVtCithbGwgYW5kIHRoZXJlYnkgd2FzdGluZyBtZW1vcnkuCisKK1RoYW5rcyB0byBpdGVydG9vbHMudGVlLCBpdCBpcyBub3cgY2xlYXIgImhvdyB0byBnZXQgdGhlIGludGVybmFsIHVzZXMgb2YKK20yMzUgdG8gc2hhcmUgYSBzaW5nbGUgZ2VuZXJhdG9yIi4KKworPj4+IGZyb20gaXRlcnRvb2xzIGltcG9ydCB0ZWUKKz4+PiBkZWYgbTIzNSgpOgorLi4uICAgICBkZWYgX20yMzUoKToKKy4uLiAgICAgICAgIHlpZWxkIDEKKy4uLiAgICAgICAgIGZvciBuIGluIG1lcmdlKHRpbWVzKDIsIG0yKSwKKy4uLiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKHRpbWVzKDMsIG0zKSwKKy4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzKDUsIG01KSkpOgorLi4uICAgICAgICAgICAgIHlpZWxkIG4KKy4uLiAgICAgbTEgPSBfbTIzNSgpCisuLi4gICAgIG0yLCBtMywgbTUsIG1SZXMgPSB0ZWUobTEsIDQpCisuLi4gICAgIHJldHVybiBtUmVzCisKKz4+PiBpdCA9IG0yMzUoKQorPj4+IGZvciBpIGluIHJhbmdlKDUpOgorLi4uICAgICBwcmludCBmaXJzdG4oaXQsIDE1KQorWzEsIDIsIDMsIDQsIDUsIDYsIDgsIDksIDEwLCAxMiwgMTUsIDE2LCAxOCwgMjAsIDI0XQorWzI1LCAyNywgMzAsIDMyLCAzNiwgNDAsIDQ1LCA0OCwgNTAsIDU0LCA2MCwgNjQsIDcyLCA3NSwgODBdCitbODEsIDkwLCA5NiwgMTAwLCAxMDgsIDEyMCwgMTI1LCAxMjgsIDEzNSwgMTQ0LCAxNTAsIDE2MCwgMTYyLCAxODAsIDE5Ml0KK1syMDAsIDIxNiwgMjI1LCAyNDAsIDI0MywgMjUwLCAyNTYsIDI3MCwgMjg4LCAzMDAsIDMyMCwgMzI0LCAzNjAsIDM3NSwgMzg0XQorWzQwMCwgNDA1LCA0MzIsIDQ1MCwgNDgwLCA0ODYsIDUwMCwgNTEyLCA1NDAsIDU3NiwgNjAwLCA2MjUsIDY0MCwgNjQ4LCA2NzVdCisKK1RoZSAidGVlIiBmdW5jdGlvbiBkb2VzIGp1c3Qgd2hhdCB3ZSB3YW50LiBJdCBpbnRlcm5hbGx5IGtlZXBzIGEgZ2VuZXJhdGVkCityZXN1bHQgZm9yIGFzIGxvbmcgYXMgaXQgaGFzIG5vdCBiZWVuICJjb25zdW1lZCIgZnJvbSBhbGwgb2YgdGhlIGR1cGxpY2F0ZWQKK2l0ZXJhdG9ycywgd2hlcmV1cG9uIGl0IGlzIGRlbGV0ZWQuIFlvdSBjYW4gdGhlcmVmb3JlIHByaW50IHRoZSBoYW1taW5nCitzZXF1ZW5jZSBkdXJpbmcgaG91cnMgd2l0aG91dCBpbmNyZWFzaW5nIG1lbW9yeSB1c2FnZSwgb3IgdmVyeSBsaXR0bGUuCisKK1RoZSBiZWF1dHkgb2YgaXQgaXMgdGhhdCByZWN1cnNpdmUgcnVubmluZy1hZnRlci10aGVpci10YWlsIEZQIGFsZ29yaXRobXMKK2FyZSBxdWl0ZSBzdHJhaWdodGZvcndhcmRseSBleHByZXNzZWQgd2l0aCB0aGlzIFB5dGhvbiBpZGlvbS4KKworWWUgb2xkZSBGaWJvbmFjY2kgZ2VuZXJhdG9yLCB0ZWUgc3R5bGUuCisKKz4+PiBkZWYgZmliKCk6CisuLi4KKy4uLiAgICAgZGVmIF9pc3VtKGcsIGgpOgorLi4uICAgICAgICAgd2hpbGUgMToKKy4uLiAgICAgICAgICAgICB5aWVsZCBnLm5leHQoKSArIGgubmV4dCgpCisuLi4KKy4uLiAgICAgZGVmIF9maWIoKToKKy4uLiAgICAgICAgIHlpZWxkIDEKKy4uLiAgICAgICAgIHlpZWxkIDIKKy4uLiAgICAgICAgIGZpYlRhaWwubmV4dCgpICMgdGhyb3cgZmlyc3QgYXdheQorLi4uICAgICAgICAgZm9yIHJlcyBpbiBfaXN1bShmaWJIZWFkLCBmaWJUYWlsKToKKy4uLiAgICAgICAgICAgICB5aWVsZCByZXMKKy4uLgorLi4uICAgICByZWFsZmliID0gX2ZpYigpCisuLi4gICAgIGZpYkhlYWQsIGZpYlRhaWwsIGZpYlJlcyA9IHRlZShyZWFsZmliLCAzKQorLi4uICAgICByZXR1cm4gZmliUmVzCisKKz4+PiBmaXJzdG4oZmliKCksIDE3KQorWzEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwLCA5ODcsIDE1OTcsIDI1ODRdCisKKyIiIgorCisjIHN5bnRheF90ZXN0cyBtb3N0bHkgcHJvdm9rZXMgU3ludGF4RXJyb3JzLiAgQWxzbyBmaWRkbGluZyB3aXRoICNpZiAwCisjIGhhY2tlcnkuCisKK3N5bnRheF90ZXN0cyA9ICIiIgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgcmV0dXJuIDIyCisuLi4gICAgIHlpZWxkIDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4KK1N5bnRheEVycm9yOiAncmV0dXJuJyB3aXRoIGFyZ3VtZW50IGluc2lkZSBnZW5lcmF0b3IgKDxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLnN5bnRheFswXT4sIGxpbmUgMykKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHlpZWxkIDEKKy4uLiAgICAgcmV0dXJuIDIyCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uCitTeW50YXhFcnJvcjogJ3JldHVybicgd2l0aCBhcmd1bWVudCBpbnNpZGUgZ2VuZXJhdG9yICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5zeW50YXhbMV0+LCBsaW5lIDMpCisKKyJyZXR1cm4gTm9uZSIgaXMgbm90IHRoZSBzYW1lIGFzICJyZXR1cm4iIGluIGEgZ2VuZXJhdG9yOgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgeWllbGQgMQorLi4uICAgICByZXR1cm4gTm9uZQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLgorU3ludGF4RXJyb3I6ICdyZXR1cm4nIHdpdGggYXJndW1lbnQgaW5zaWRlIGdlbmVyYXRvciAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uc3ludGF4WzJdPiwgbGluZSAzKQorCitUaGVzZSBhcmUgZmluZToKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHlpZWxkIDEKKy4uLiAgICAgcmV0dXJuCisKKz4+PiBkZWYgZigpOgorLi4uICAgICB0cnk6CisuLi4gICAgICAgICB5aWVsZCAxCisuLi4gICAgIGZpbmFsbHk6CisuLi4gICAgICAgICBwYXNzCisKKz4+PiBkZWYgZigpOgorLi4uICAgICB0cnk6CisuLi4gICAgICAgICB0cnk6CisuLi4gICAgICAgICAgICAgMS8vMAorLi4uICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorLi4uICAgICAgICAgICAgIHlpZWxkIDY2NgorLi4uICAgICAgICAgZXhjZXB0OgorLi4uICAgICAgICAgICAgIHBhc3MKKy4uLiAgICAgZmluYWxseToKKy4uLiAgICAgICAgIHBhc3MKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHRyeToKKy4uLiAgICAgICAgIHRyeToKKy4uLiAgICAgICAgICAgICB5aWVsZCAxMgorLi4uICAgICAgICAgICAgIDEvLzAKKy4uLiAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKy4uLiAgICAgICAgICAgICB5aWVsZCA2NjYKKy4uLiAgICAgICAgIGV4Y2VwdDoKKy4uLiAgICAgICAgICAgICB0cnk6CisuLi4gICAgICAgICAgICAgICAgIHggPSAxMgorLi4uICAgICAgICAgICAgIGZpbmFsbHk6CisuLi4gICAgICAgICAgICAgICAgIHlpZWxkIDEyCisuLi4gICAgIGV4Y2VwdDoKKy4uLiAgICAgICAgIHJldHVybgorPj4+IGxpc3QoZigpKQorWzEyLCA2NjZdCisKKz4+PiBkZWYgZigpOgorLi4uICAgIHlpZWxkCis+Pj4gdHlwZShmKCkpCis8dHlwZSAnZ2VuZXJhdG9yJz4KKworCis+Pj4gZGVmIGYoKToKKy4uLiAgICBpZiAwOgorLi4uICAgICAgICB5aWVsZAorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIGlmIDA6CisuLi4gICAgICAgICB5aWVsZCAxCis+Pj4gdHlwZShmKCkpCis8dHlwZSAnZ2VuZXJhdG9yJz4KKworPj4+IGRlZiBmKCk6CisuLi4gICAgaWYgIiI6CisuLi4gICAgICAgIHlpZWxkIE5vbmUKKz4+PiB0eXBlKGYoKSkKKzx0eXBlICdnZW5lcmF0b3InPgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgcmV0dXJuCisuLi4gICAgIHRyeToKKy4uLiAgICAgICAgIGlmIHg9PTQ6CisuLi4gICAgICAgICAgICAgcGFzcworLi4uICAgICAgICAgZWxpZiAwOgorLi4uICAgICAgICAgICAgIHRyeToKKy4uLiAgICAgICAgICAgICAgICAgMS8vMAorLi4uICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKy4uLiAgICAgICAgICAgICAgICAgcGFzcworLi4uICAgICAgICAgICAgIGVsc2U6CisuLi4gICAgICAgICAgICAgICAgIGlmIDA6CisuLi4gICAgICAgICAgICAgICAgICAgICB3aGlsZSAxMjoKKy4uLiAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IDEKKy4uLiAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCAyICMgZG9uJ3QgYmxpbmsKKy4uLiAgICAgICAgICAgICAgICAgICAgICAgICBmKGEsIGIsIGMsIGQsIGUpCisuLi4gICAgICAgICBlbHNlOgorLi4uICAgICAgICAgICAgIHBhc3MKKy4uLiAgICAgZXhjZXB0OgorLi4uICAgICAgICAgeCA9IDEKKy4uLiAgICAgcmV0dXJuCis+Pj4gdHlwZShmKCkpCis8dHlwZSAnZ2VuZXJhdG9yJz4KKworPj4+IGRlZiBmKCk6CisuLi4gICAgIGlmIDA6CisuLi4gICAgICAgICBkZWYgZygpOgorLi4uICAgICAgICAgICAgIHlpZWxkIDEKKy4uLgorPj4+IHR5cGUoZigpKQorPHR5cGUgJ05vbmVUeXBlJz4KKworPj4+IGRlZiBmKCk6CisuLi4gICAgIGlmIDA6CisuLi4gICAgICAgICBjbGFzcyBDOgorLi4uICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKy4uLiAgICAgICAgICAgICAgICAgeWllbGQgMQorLi4uICAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorLi4uICAgICAgICAgICAgICAgICB5aWVsZCAyCis+Pj4gdHlwZShmKCkpCis8dHlwZSAnTm9uZVR5cGUnPgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgaWYgMDoKKy4uLiAgICAgICAgIHJldHVybgorLi4uICAgICBpZiAwOgorLi4uICAgICAgICAgeWllbGQgMgorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIGlmIDA6CisuLi4gICAgICAgICBsYW1iZGEgeDogIHggICAgICAgICMgc2hvdWxkbid0IHRyaWdnZXIgaGVyZQorLi4uICAgICAgICAgcmV0dXJuICAgICAgICAgICAgICAjIG9yIGhlcmUKKy4uLiAgICAgICAgIGRlZiBmKGkpOgorLi4uICAgICAgICAgICAgIHJldHVybiAyKmkgICAgICAjIG9yIGhlcmUKKy4uLiAgICAgICAgIGlmIDA6CisuLi4gICAgICAgICAgICAgcmV0dXJuIDMgICAgICAgICMgYnV0ICp0aGlzKiBzdWNrcyAobGluZSA4KQorLi4uICAgICBpZiAwOgorLi4uICAgICAgICAgeWllbGQgMiAgICAgICAgICAgICAjIGJlY2F1c2UgaXQncyBhIGdlbmVyYXRvciAobGluZSAxMCkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKK1N5bnRheEVycm9yOiAncmV0dXJuJyB3aXRoIGFyZ3VtZW50IGluc2lkZSBnZW5lcmF0b3IgKDxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLnN5bnRheFsyNF0+LCBsaW5lIDEwKQorCitUaGlzIG9uZSBjYXVzZWQgYSBjcmFzaCAoc2VlIFNGIGJ1ZyA1Njc1MzgpOgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisuLi4gICAgICAgICB0cnk6CisuLi4gICAgICAgICAgICAgY29udGludWUKKy4uLiAgICAgICAgIGZpbmFsbHk6CisuLi4gICAgICAgICAgICAgeWllbGQgaQorLi4uCis+Pj4gZyA9IGYoKQorPj4+IHByaW50IGcubmV4dCgpCiswCis+Pj4gcHJpbnQgZy5uZXh0KCkKKzEKKz4+PiBwcmludCBnLm5leHQoKQorMgorPj4+IHByaW50IGcubmV4dCgpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CitTdG9wSXRlcmF0aW9uCisKKworVGVzdCB0aGUgZ2lfY29kZSBhdHRyaWJ1dGUKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHlpZWxkIDUKKy4uLgorPj4+IGcgPSBmKCkKKz4+PiBnLmdpX2NvZGUgaXMgZi5mdW5jX2NvZGUKK1RydWUKKz4+PiBnLm5leHQoKQorNQorPj4+IGcubmV4dCgpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CitTdG9wSXRlcmF0aW9uCis+Pj4gZy5naV9jb2RlIGlzIGYuZnVuY19jb2RlCitUcnVlCisKKworVGVzdCB0aGUgX19uYW1lX18gYXR0cmlidXRlIGFuZCB0aGUgcmVwcigpCisKKz4+PiBkZWYgZigpOgorLi4uICAgIHlpZWxkIDUKKy4uLgorPj4+IGcgPSBmKCkKKz4+PiBnLl9fbmFtZV9fCisnZicKKz4+PiByZXByKGcpICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworJzxnZW5lcmF0b3Igb2JqZWN0IGYgYXQgLi4uPicKKworTGFtYmRhcyBzaG91bGRuJ3QgaGF2ZSB0aGVpciB1c3VhbCByZXR1cm4gYmVoYXZpb3IuCisKKz4+PiB4ID0gbGFtYmRhOiAoeWllbGQgMSkKKz4+PiBsaXN0KHgoKSkKK1sxXQorCis+Pj4geCA9IGxhbWJkYTogKCh5aWVsZCAxKSwgKHlpZWxkIDIpKQorPj4+IGxpc3QoeCgpKQorWzEsIDJdCisiIiIKKworIyBjb25qb2luIGlzIGEgc2ltcGxlIGJhY2t0cmFja2luZyBnZW5lcmF0b3IsIG5hbWVkIGluIGhvbm9yIG9mIEljb24ncworIyAiY29uanVuY3Rpb24iIGNvbnRyb2wgc3RydWN0dXJlLiAgUGFzcyBhIGxpc3Qgb2Ygbm8tYXJndW1lbnQgZnVuY3Rpb25zCisjIHRoYXQgcmV0dXJuIGl0ZXJhYmxlIG9iamVjdHMuICBFYXNpZXN0IHRvIGV4cGxhaW4gYnkgZXhhbXBsZTogIGFzc3VtZSB0aGUKKyMgZnVuY3Rpb24gbGlzdCBbeCwgeSwgel0gaXMgcGFzc2VkLiAgVGhlbiBjb25qb2luIGFjdHMgbGlrZToKKyMKKyMgZGVmIGcoKToKKyMgICAgIHZhbHVlcyA9IFtOb25lXSAqIDMKKyMgICAgIGZvciB2YWx1ZXNbMF0gaW4geCgpOgorIyAgICAgICAgIGZvciB2YWx1ZXNbMV0gaW4geSgpOgorIyAgICAgICAgICAgICBmb3IgdmFsdWVzWzJdIGluIHooKToKKyMgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlcworIworIyBTbyBzb21lIDMtbGlzdHMgb2YgdmFsdWVzICptYXkqIGJlIGdlbmVyYXRlZCwgZWFjaCB0aW1lIHdlIHN1Y2Nlc3NmdWxseQorIyBnZXQgaW50byB0aGUgaW5uZXJtb3N0IGxvb3AuICBJZiBhbiBpdGVyYXRvciBmYWlscyAoaXMgZXhoYXVzdGVkKSBiZWZvcmUKKyMgdGhlbiwgaXQgImJhY2t0cmFja3MiIHRvIGdldCB0aGUgbmV4dCB2YWx1ZSBmcm9tIHRoZSBuZWFyZXN0IGVuY2xvc2luZworIyBpdGVyYXRvciAodGhlIG9uZSAidG8gdGhlIGxlZnQiKSwgYW5kIHN0YXJ0cyBhbGwgb3ZlciBhZ2FpbiBhdCB0aGUgbmV4dAorIyBzbG90IChwdW1wcyBhIGZyZXNoIGl0ZXJhdG9yKS4gIE9mIGNvdXJzZSB0aGlzIGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlCisjIGl0ZXJhdG9ycyBoYXZlIHNpZGUtZWZmZWN0cywgc28gdGhhdCB3aGljaCB2YWx1ZXMgKmNhbiogYmUgZ2VuZXJhdGVkIGF0CisjIGVhY2ggc2xvdCBkZXBlbmQgb24gdGhlIHZhbHVlcyBpdGVyYXRlZCBhdCBwcmV2aW91cyBzbG90cy4KKworZGVmIHNpbXBsZV9jb25qb2luKGdzKToKKworICAgIHZhbHVlcyA9IFtOb25lXSAqIGxlbihncykKKworICAgIGRlZiBnZW4oaSk6CisgICAgICAgIGlmIGkgPj0gbGVuKGdzKToKKyAgICAgICAgICAgIHlpZWxkIHZhbHVlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHZhbHVlc1tpXSBpbiBnc1tpXSgpOgorICAgICAgICAgICAgICAgIGZvciB4IGluIGdlbihpKzEpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB4CisKKyAgICBmb3IgeCBpbiBnZW4oMCk6CisgICAgICAgIHlpZWxkIHgKKworIyBUaGF0IHdvcmtzIGZpbmUsIGJ1dCByZWN1cnNpbmcgYSBsZXZlbCBhbmQgY2hlY2tpbmcgaSBhZ2FpbnN0IGxlbihncykgZm9yCisjIGVhY2ggaXRlbSBwcm9kdWNlZCBpcyBpbmVmZmljaWVudC4gIEJ5IGRvaW5nIG1hbnVhbCBsb29wIHVucm9sbGluZyBhY3Jvc3MKKyMgZ2VuZXJhdG9yIGJvdW5kYXJpZXMsIGl0J3MgcG9zc2libGUgdG8gZWxpbWluYXRlIG1vc3Qgb2YgdGhhdCBvdmVyaGVhZC4KKyMgVGhpcyBpc24ndCB3b3J0aCB0aGUgYm90aGVyICppbiBnZW5lcmFsKiBmb3IgZ2VuZXJhdG9ycywgYnV0IGNvbmpvaW4oKSBpcworIyBhIGNvcmUgYnVpbGRpbmcgYmxvY2sgZm9yIHNvbWUgQ1BVLWludGVuc2l2ZSBnZW5lcmF0b3IgYXBwbGljYXRpb25zLgorCitkZWYgY29uam9pbihncyk6CisKKyAgICBuID0gbGVuKGdzKQorICAgIHZhbHVlcyA9IFtOb25lXSAqIG4KKworICAgICMgRG8gb25lIGxvb3AgbmVzdCBhdCB0aW1lIHJlY3Vyc2l2ZWx5LCB1bnRpbCB0aGUgIyBvZiBsb29wIG5lc3RzCisgICAgIyByZW1haW5pbmcgaXMgZGl2aXNpYmxlIGJ5IDMuCisKKyAgICBkZWYgZ2VuKGkpOgorICAgICAgICBpZiBpID49IG46CisgICAgICAgICAgICB5aWVsZCB2YWx1ZXMKKworICAgICAgICBlbGlmIChuLWkpICUgMzoKKyAgICAgICAgICAgIGlwMSA9IGkrMQorICAgICAgICAgICAgZm9yIHZhbHVlc1tpXSBpbiBnc1tpXSgpOgorICAgICAgICAgICAgICAgIGZvciB4IGluIGdlbihpcDEpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB4CisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciB4IGluIF9nZW4zKGkpOgorICAgICAgICAgICAgICAgIHlpZWxkIHgKKworICAgICMgRG8gdGhyZWUgbG9vcCBuZXN0cyBhdCBhIHRpbWUsIHJlY3Vyc2luZyBvbmx5IGlmIGF0IGxlYXN0IHRocmVlIG1vcmUKKyAgICAjIHJlbWFpbi4gIERvbid0IGNhbGwgZGlyZWN0bHk6ICB0aGlzIGlzIGFuIGludGVybmFsIG9wdGltaXphdGlvbiBmb3IKKyAgICAjIGdlbidzIHVzZS4KKworICAgIGRlZiBfZ2VuMyhpKToKKyAgICAgICAgYXNzZXJ0IGkgPCBuIGFuZCAobi1pKSAlIDMgPT0gMAorICAgICAgICBpcDEsIGlwMiwgaXAzID0gaSsxLCBpKzIsIGkrMworICAgICAgICBnLCBnMSwgZzIgPSBnc1tpIDogaXAzXQorCisgICAgICAgIGlmIGlwMyA+PSBuOgorICAgICAgICAgICAgIyBUaGVzZSBhcmUgdGhlIGxhc3QgdGhyZWUsIHNvIHdlIGNhbiB5aWVsZCB2YWx1ZXMgZGlyZWN0bHkuCisgICAgICAgICAgICBmb3IgdmFsdWVzW2ldIGluIGcoKToKKyAgICAgICAgICAgICAgICBmb3IgdmFsdWVzW2lwMV0gaW4gZzEoKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHZhbHVlc1tpcDJdIGluIGcyKCk6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZXMKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBdCBsZWFzdCA2IGxvb3AgbmVzdHMgcmVtYWluOyBwZWVsIG9mZiAzIGFuZCByZWN1cnNlIGZvciB0aGUKKyAgICAgICAgICAgICMgcmVzdC4KKyAgICAgICAgICAgIGZvciB2YWx1ZXNbaV0gaW4gZygpOgorICAgICAgICAgICAgICAgIGZvciB2YWx1ZXNbaXAxXSBpbiBnMSgpOgorICAgICAgICAgICAgICAgICAgICBmb3IgdmFsdWVzW2lwMl0gaW4gZzIoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIF9nZW4zKGlwMyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgeAorCisgICAgZm9yIHggaW4gZ2VuKDApOgorICAgICAgICB5aWVsZCB4CisKKyMgQW5kIG9uZSBtb3JlIGFwcHJvYWNoOiAgRm9yIGJhY2t0cmFja2luZyBhcHBzIGxpa2UgdGhlIEtuaWdodCdzIFRvdXIKKyMgc29sdmVyIGJlbG93LCB0aGUgbnVtYmVyIG9mIGJhY2t0cmFja2luZyBsZXZlbHMgY2FuIGJlIGVub3Jtb3VzIChvbmUKKyMgbGV2ZWwgcGVyIHNxdWFyZSwgZm9yIHRoZSBLbmlnaHQncyBUb3VyLCBzbyB0aGF0IGUuZy4gYSAxMDB4MTAwIGJvYXJkCisjIG5lZWRzIDEwLDAwMCBsZXZlbHMpLiAgSW4gc3VjaCBjYXNlcyBQeXRob24gaXMgbGlrZWx5IHRvIHJ1biBvdXQgb2YKKyMgc3RhY2sgc3BhY2UgZHVlIHRvIHJlY3Vyc2lvbi4gIFNvIGhlcmUncyBhIHJlY3Vyc2lvbi1mcmVlIHZlcnNpb24gb2YKKyMgY29uam9pbiB0b28uCisjIE5PVEUgV0VMTDogIFRoaXMgYWxsb3dzIGxhcmdlIHByb2JsZW1zIHRvIGJlIHNvbHZlZCB3aXRoIG9ubHkgdHJpdmlhbAorIyBkZW1hbmRzIG9uIHN0YWNrIHNwYWNlLiAgV2l0aG91dCBleHBsaWNpdGx5IHJlc3VtYWJsZSBnZW5lcmF0b3JzLCB0aGlzIGlzCisjIG11Y2ggaGFyZGVyIHRvIGFjaGlldmUuICBPVE9ILCB0aGlzIGlzIG11Y2ggc2xvd2VyICh1cCB0byBhIGZhY3RvciBvZiAyKQorIyB0aGFuIHRoZSBmYW5jeSB1bnJvbGxlZCByZWN1cnNpdmUgY29uam9pbi4KKworZGVmIGZsYXRfY29uam9pbihncyk6ICAjIHJlbmFtZSB0byBjb25qb2luIHRvIHJ1biB0ZXN0cyB3aXRoIHRoaXMgaW5zdGVhZAorICAgIG4gPSBsZW4oZ3MpCisgICAgdmFsdWVzID0gW05vbmVdICogbgorICAgIGl0ZXJzICA9IFtOb25lXSAqIG4KKyAgICBfU3RvcEl0ZXJhdGlvbiA9IFN0b3BJdGVyYXRpb24gICMgbWFrZSBsb2NhbCBiZWNhdXNlIGNhdWdodCBhICpsb3QqCisgICAgaSA9IDAKKyAgICB3aGlsZSAxOgorICAgICAgICAjIERlc2NlbmQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIGkgPCBuOgorICAgICAgICAgICAgICAgIGl0ID0gaXRlcnNbaV0gPSBnc1tpXSgpLm5leHQKKyAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBpdCgpCisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgIGV4Y2VwdCBfU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBpID09IG4KKyAgICAgICAgICAgIHlpZWxkIHZhbHVlcworCisgICAgICAgICMgQmFja3RyYWNrIHVudGlsIGFuIG9sZGVyIGl0ZXJhdG9yIGNhbiBiZSByZXN1bWVkLgorICAgICAgICBpIC09IDEKKyAgICAgICAgd2hpbGUgaSA+PSAwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlc1tpXSA9IGl0ZXJzW2ldKCkKKyAgICAgICAgICAgICAgICAjIFN1Y2Nlc3MhICBTdGFydCBmcmVzaCBhdCBuZXh0IGxldmVsLgorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgX1N0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgIyBDb250aW51ZSBiYWNrdHJhY2tpbmcuCisgICAgICAgICAgICAgICAgaSAtPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgaSA8IDAKKyAgICAgICAgICAgIGJyZWFrCisKKyMgQSBjb25qb2luLWJhc2VkIE4tUXVlZW5zIHNvbHZlci4KKworY2xhc3MgUXVlZW5zOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKKyAgICAgICAgc2VsZi5uID0gbgorICAgICAgICByYW5nZW4gPSByYW5nZShuKQorCisgICAgICAgICMgQXNzaWduIGEgdW5pcXVlIGludCB0byBlYWNoIGNvbHVtbiBhbmQgZGlhZ29uYWwuCisgICAgICAgICMgY29sdW1uczogIG4gb2YgdGhvc2UsIHJhbmdlKG4pLgorICAgICAgICAjIE5XLVNFIGRpYWdvbmFsczogMm4tMSBvZiB0aGVzZSwgaS1qIHVuaXF1ZSBhbmQgaW52YXJpYW50IGFsb25nCisgICAgICAgICMgZWFjaCwgc21hbGxlc3QgaS1qIGlzIDAtKG4tMSkgPSAxLW4sIHNvIGFkZCBuLTEgdG8gc2hpZnQgdG8gMC0KKyAgICAgICAgIyBiYXNlZC4KKyAgICAgICAgIyBORS1TVyBkaWFnb25hbHM6IDJuLTEgb2YgdGhlc2UsIGkraiB1bmlxdWUgYW5kIGludmFyaWFudCBhbG9uZworICAgICAgICAjIGVhY2gsIHNtYWxsZXN0IGkraiBpcyAwLCBsYXJnZXN0IGlzIDJuLTIuCisKKyAgICAgICAgIyBGb3IgZWFjaCBzcXVhcmUsIGNvbXB1dGUgYSBiaXQgdmVjdG9yIG9mIHRoZSBjb2x1bW5zIGFuZAorICAgICAgICAjIGRpYWdvbmFscyBpdCBjb3ZlcnMsIGFuZCBmb3IgZWFjaCByb3cgY29tcHV0ZSBhIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgIyBnZW5lcmF0ZXMgdGhlIHBvc3NpYmxpdGllcyBmb3IgdGhlIGNvbHVtbnMgaW4gdGhhdCByb3cuCisgICAgICAgIHNlbGYucm93Z2VuZXJhdG9ycyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlbjoKKyAgICAgICAgICAgIHJvd3VzZXMgPSBbKDFMIDw8IGopIHwgICAgICAgICAgICAgICAgICAjIGNvbHVtbiBvcmRpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAobiArIGktaiArIG4tMSkpIHwgICAgIyBOVy1TRSBvcmRpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICgxTCA8PCAobiArIDIqbi0xICsgaStqKSkgICAgIyBORS1TVyBvcmRpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2VuXQorCisgICAgICAgICAgICBkZWYgcm93Z2VuKHJvd3VzZXM9cm93dXNlcyk6CisgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2VuOgorICAgICAgICAgICAgICAgICAgICB1c2VzID0gcm93dXNlc1tqXQorICAgICAgICAgICAgICAgICAgICBpZiB1c2VzICYgc2VsZi51c2VkID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVzZWQgfD0gdXNlcworICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgagorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51c2VkICY9IH51c2VzCisKKyAgICAgICAgICAgIHNlbGYucm93Z2VuZXJhdG9ycy5hcHBlbmQocm93Z2VuKQorCisgICAgIyBHZW5lcmF0ZSBzb2x1dGlvbnMuCisgICAgZGVmIHNvbHZlKHNlbGYpOgorICAgICAgICBzZWxmLnVzZWQgPSAwCisgICAgICAgIGZvciByb3cyY29sIGluIGNvbmpvaW4oc2VsZi5yb3dnZW5lcmF0b3JzKToKKyAgICAgICAgICAgIHlpZWxkIHJvdzJjb2wKKworICAgIGRlZiBwcmludHNvbHV0aW9uKHNlbGYsIHJvdzJjb2wpOgorICAgICAgICBuID0gc2VsZi5uCisgICAgICAgIGFzc2VydCBuID09IGxlbihyb3cyY29sKQorICAgICAgICBzZXAgPSAiKyIgKyAiLSsiICogbgorICAgICAgICBwcmludCBzZXAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICBzcXVhcmVzID0gWyIgIiBmb3IgaiBpbiByYW5nZShuKV0KKyAgICAgICAgICAgIHNxdWFyZXNbcm93MmNvbFtpXV0gPSAiUSIKKyAgICAgICAgICAgIHByaW50ICJ8IiArICJ8Ii5qb2luKHNxdWFyZXMpICsgInwiCisgICAgICAgICAgICBwcmludCBzZXAKKworIyBBIGNvbmpvaW4tYmFzZWQgS25pZ2h0J3MgVG91ciBzb2x2ZXIuICBUaGlzIGlzIHByZXR0eSBzb3BoaXN0aWNhdGVkCisjIChlLmcuLCB3aGVuIHVzZWQgd2l0aCBmbGF0X2NvbmpvaW4gYWJvdmUsIGFuZCBwYXNzaW5nIGhhcmQ9MSB0byB0aGUKKyMgY29uc3RydWN0b3IsIGEgMjAweDIwMCBLbmlnaHQncyBUb3VyIHdhcyBmb3VuZCBxdWlja2x5IC0tIG5vdGUgdGhhdCB3ZSdyZQorIyBjcmVhdGluZyAxMHMgb2YgdGhvdXNhbmRzIG9mIGdlbmVyYXRvcnMgdGhlbiEpLCBhbmQgaXMgbGVuZ3RoeS4KKworY2xhc3MgS25pZ2h0czoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbSwgbiwgaGFyZD0wKToKKyAgICAgICAgc2VsZi5tLCBzZWxmLm4gPSBtLCBuCisKKyAgICAgICAgIyBzb2x2ZSgpIHdpbGwgc2V0IHVwIHN1Y2NzW2ldIHRvIGJlIGEgbGlzdCBvZiBzcXVhcmUgI2kncworICAgICAgICAjIHN1Y2Nlc3NvcnMuCisgICAgICAgIHN1Y2NzID0gc2VsZi5zdWNjcyA9IFtdCisKKyAgICAgICAgIyBSZW1vdmUgaTAgZnJvbSBlYWNoIG9mIGl0cyBzdWNjZXNzb3IncyBzdWNjZXNzb3IgbGlzdHMsIGkuZS4KKyAgICAgICAgIyBzdWNjZXNzb3JzIGNhbid0IGdvIGJhY2sgdG8gaTAgYWdhaW4uICBSZXR1cm4gMCBpZiB3ZSBjYW4KKyAgICAgICAgIyBkZXRlY3QgdGhpcyBtYWtlcyBhIHNvbHV0aW9uIGltcG9zc2libGUsIGVsc2UgcmV0dXJuIDEuCisKKyAgICAgICAgZGVmIHJlbW92ZV9mcm9tX3N1Y2Nlc3NvcnMoaTAsIGxlbj1sZW4pOgorICAgICAgICAgICAgIyBJZiB3ZSByZW1vdmUgYWxsIGV4aXRzIGZyb20gYSBmcmVlIHNxdWFyZSwgd2UncmUgZGVhZDoKKyAgICAgICAgICAgICMgZXZlbiBpZiB3ZSBtb3ZlIHRvIGl0IG5leHQsIHdlIGNhbid0IGxlYXZlIGl0IGFnYWluLgorICAgICAgICAgICAgIyBJZiB3ZSBjcmVhdGUgYSBzcXVhcmUgd2l0aCBvbmUgZXhpdCwgd2UgbXVzdCB2aXNpdCBpdCBuZXh0OworICAgICAgICAgICAgIyBlbHNlIHNvbWVib2R5IGVsc2Ugd2lsbCBoYXZlIHRvIHZpc2l0IGl0LCBhbmQgc2luY2UgdGhlcmUncworICAgICAgICAgICAgIyBvbmx5IG9uZSBhZGphY2VudCwgdGhlcmUgd29uJ3QgYmUgYSB3YXkgdG8gbGVhdmUgaXQgYWdhaW4uCisgICAgICAgICAgICAjIEZpbmVsbHksIGlmIHdlIGNyZWF0ZSBtb3JlIHRoYW4gb25lIGZyZWUgc3F1YXJlIHdpdGggYQorICAgICAgICAgICAgIyBzaW5nbGUgZXhpdCwgd2UgY2FuIG9ubHkgbW92ZSB0byBvbmUgb2YgdGhlbSBuZXh0LCBsZWF2aW5nCisgICAgICAgICAgICAjIHRoZSBvdGhlciBvbmUgYSBkZWFkIGVuZC4KKyAgICAgICAgICAgIG5lMCA9IG5lMSA9IDAKKyAgICAgICAgICAgIGZvciBpIGluIHN1Y2NzW2kwXToKKyAgICAgICAgICAgICAgICBzID0gc3VjY3NbaV0KKyAgICAgICAgICAgICAgICBzLnJlbW92ZShpMCkKKyAgICAgICAgICAgICAgICBlID0gbGVuKHMpCisgICAgICAgICAgICAgICAgaWYgZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBuZTAgKz0gMQorICAgICAgICAgICAgICAgIGVsaWYgZSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBuZTEgKz0gMQorICAgICAgICAgICAgcmV0dXJuIG5lMCA9PSAwIGFuZCBuZTEgPCAyCisKKyAgICAgICAgIyBQdXQgaTAgYmFjayBpbiBlYWNoIG9mIGl0cyBzdWNjZXNzb3IncyBzdWNjZXNzb3IgbGlzdHMuCisKKyAgICAgICAgZGVmIGFkZF90b19zdWNjZXNzb3JzKGkwKToKKyAgICAgICAgICAgIGZvciBpIGluIHN1Y2NzW2kwXToKKyAgICAgICAgICAgICAgICBzdWNjc1tpXS5hcHBlbmQoaTApCisKKyAgICAgICAgIyBHZW5lcmF0ZSB0aGUgZmlyc3QgbW92ZS4KKyAgICAgICAgZGVmIGZpcnN0KCk6CisgICAgICAgICAgICBpZiBtIDwgMSBvciBuIDwgMToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgIyBTaW5jZSB3ZSdyZSBsb29raW5nIGZvciBhIGN5Y2xlLCBpdCBkb2Vzbid0IG1hdHRlciB3aGVyZSB3ZQorICAgICAgICAgICAgIyBzdGFydC4gIFN0YXJ0aW5nIGluIGEgY29ybmVyIG1ha2VzIHRoZSAybmQgbW92ZSBlYXN5LgorICAgICAgICAgICAgY29ybmVyID0gc2VsZi5jb29yZHMyaW5kZXgoMCwgMCkKKyAgICAgICAgICAgIHJlbW92ZV9mcm9tX3N1Y2Nlc3NvcnMoY29ybmVyKQorICAgICAgICAgICAgc2VsZi5sYXN0aWogPSBjb3JuZXIKKyAgICAgICAgICAgIHlpZWxkIGNvcm5lcgorICAgICAgICAgICAgYWRkX3RvX3N1Y2Nlc3NvcnMoY29ybmVyKQorCisgICAgICAgICMgR2VuZXJhdGUgdGhlIHNlY29uZCBtb3Zlcy4KKyAgICAgICAgZGVmIHNlY29uZCgpOgorICAgICAgICAgICAgY29ybmVyID0gc2VsZi5jb29yZHMyaW5kZXgoMCwgMCkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmxhc3RpaiA9PSBjb3JuZXIgICMgaS5lLiwgd2Ugc3RhcnRlZCBpbiB0aGUgY29ybmVyCisgICAgICAgICAgICBpZiBtIDwgMyBvciBuIDwgMzoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGFzc2VydCBsZW4oc3VjY3NbY29ybmVyXSkgPT0gMgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuY29vcmRzMmluZGV4KDEsIDIpIGluIHN1Y2NzW2Nvcm5lcl0KKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvb3JkczJpbmRleCgyLCAxKSBpbiBzdWNjc1tjb3JuZXJdCisgICAgICAgICAgICAjIE9ubHkgdHdvIGNob2ljZXMuICBXaGljaGV2ZXIgd2UgcGljaywgdGhlIG90aGVyIG11c3QgYmUgdGhlCisgICAgICAgICAgICAjIHNxdWFyZSBwaWNrZWQgb24gbW92ZSBtKm4sIGFzIGl0J3MgdGhlIG9ubHkgd2F5IHRvIGdldCBiYWNrCisgICAgICAgICAgICAjIHRvICgwLCAwKS4gIFNhdmUgaXRzIGluZGV4IGluIHNlbGYuZmluYWwgc28gdGhhdCBtb3ZlcyBiZWZvcmUKKyAgICAgICAgICAgICMgdGhlIGxhc3Qga25vdyBpdCBtdXN0IGJlIGtlcHQgZnJlZS4KKyAgICAgICAgICAgIGZvciBpLCBqIGluICgxLCAyKSwgKDIsIDEpOgorICAgICAgICAgICAgICAgIHRoaXMgID0gc2VsZi5jb29yZHMyaW5kZXgoaSwgaikKKyAgICAgICAgICAgICAgICBmaW5hbCA9IHNlbGYuY29vcmRzMmluZGV4KDMtaSwgMy1qKQorICAgICAgICAgICAgICAgIHNlbGYuZmluYWwgPSBmaW5hbAorCisgICAgICAgICAgICAgICAgcmVtb3ZlX2Zyb21fc3VjY2Vzc29ycyh0aGlzKQorICAgICAgICAgICAgICAgIHN1Y2NzW2ZpbmFsXS5hcHBlbmQoY29ybmVyKQorICAgICAgICAgICAgICAgIHNlbGYubGFzdGlqID0gdGhpcworICAgICAgICAgICAgICAgIHlpZWxkIHRoaXMKKyAgICAgICAgICAgICAgICBzdWNjc1tmaW5hbF0ucmVtb3ZlKGNvcm5lcikKKyAgICAgICAgICAgICAgICBhZGRfdG9fc3VjY2Vzc29ycyh0aGlzKQorCisgICAgICAgICMgR2VuZXJhdGUgbW92ZXMgMyB0aHJ1IG0qbi0xLgorICAgICAgICBkZWYgYWR2YW5jZShsZW49bGVuKToKKyAgICAgICAgICAgICMgSWYgc29tZSBzdWNjZXNzb3IgaGFzIG9ubHkgb25lIGV4aXQsIG11c3QgdGFrZSBpdC4KKyAgICAgICAgICAgICMgRWxzZSBmYXZvciBzdWNjZXNzb3JzIHdpdGggZmV3ZXIgZXhpdHMuCisgICAgICAgICAgICBjYW5kaWRhdGVzID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIHN1Y2NzW3NlbGYubGFzdGlqXToKKyAgICAgICAgICAgICAgICBlID0gbGVuKHN1Y2NzW2ldKQorICAgICAgICAgICAgICAgIGFzc2VydCBlID4gMCwgImVsc2UgcmVtb3ZlX2Zyb21fc3VjY2Vzc29ycygpIHBydW5pbmcgZmxhd2VkIgorICAgICAgICAgICAgICAgIGlmIGUgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFsoZSwgaSldCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoKGUsIGkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnNvcnQoKQorCisgICAgICAgICAgICBmb3IgZSwgaSBpbiBjYW5kaWRhdGVzOgorICAgICAgICAgICAgICAgIGlmIGkgIT0gc2VsZi5maW5hbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlX2Zyb21fc3VjY2Vzc29ycyhpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFzdGlqID0gaQorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgICAgICAgICBhZGRfdG9fc3VjY2Vzc29ycyhpKQorCisgICAgICAgICMgR2VuZXJhdGUgbW92ZXMgMyB0aHJ1IG0qbi0xLiAgQWx0ZXJuYXRpdmUgdmVyc2lvbiB1c2luZyBhCisgICAgICAgICMgc3Ryb25nZXIgKGJ1dCBtb3JlIGV4cGVuc2l2ZSkgaGV1cmlzdGljIHRvIG9yZGVyIHN1Y2Nlc3NvcnMuCisgICAgICAgICMgU2luY2UgdGhlICMgb2YgYmFja3RyYWNraW5nIGxldmVscyBpcyBtKm4sIGEgcG9vciBtb3ZlIGVhcmx5IG9uCisgICAgICAgICMgY2FuIHRha2UgZW9ucyB0byB1bmRvLiAgU21hbGxlc3Qgc3F1YXJlIGJvYXJkIGZvciB3aGljaCB0aGlzCisgICAgICAgICMgbWF0dGVycyBhIGxvdCBpcyA1Mng1Mi4KKyAgICAgICAgZGVmIGFkdmFuY2VfaGFyZCh2bWlkPShtLTEpLzIuMCwgaG1pZD0obi0xKS8yLjAsIGxlbj1sZW4pOgorICAgICAgICAgICAgIyBJZiBzb21lIHN1Y2Nlc3NvciBoYXMgb25seSBvbmUgZXhpdCwgbXVzdCB0YWtlIGl0LgorICAgICAgICAgICAgIyBFbHNlIGZhdm9yIHN1Y2Nlc3NvcnMgd2l0aCBmZXdlciBleGl0cy4KKyAgICAgICAgICAgICMgQnJlYWsgdGllcyB2aWEgbWF4IGRpc3RhbmNlIGZyb20gYm9hcmQgY2VudGVycG9pbnQgKGZhdm9yCisgICAgICAgICAgICAjIGNvcm5lcnMgYW5kIGVkZ2VzIHdoZW5ldmVyIHBvc3NpYmxlKS4KKyAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gc3VjY3Nbc2VsZi5sYXN0aWpdOgorICAgICAgICAgICAgICAgIGUgPSBsZW4oc3VjY3NbaV0pCisgICAgICAgICAgICAgICAgYXNzZXJ0IGUgPiAwLCAiZWxzZSByZW1vdmVfZnJvbV9zdWNjZXNzb3JzKCkgcHJ1bmluZyBmbGF3ZWQiCisgICAgICAgICAgICAgICAgaWYgZSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gWyhlLCAwLCBpKV0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpMSwgajEgPSBzZWxmLmluZGV4MmNvb3JkcyhpKQorICAgICAgICAgICAgICAgIGQgPSAoaTEgLSB2bWlkKSoqMiArIChqMSAtIGhtaWQpKioyCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoKGUsIC1kLCBpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5zb3J0KCkKKworICAgICAgICAgICAgZm9yIGUsIGQsIGkgaW4gY2FuZGlkYXRlczoKKyAgICAgICAgICAgICAgICBpZiBpICE9IHNlbGYuZmluYWw6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZV9mcm9tX3N1Y2Nlc3NvcnMoaSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhc3RpaiA9IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3N1Y2Nlc3NvcnMoaSkKKworICAgICAgICAjIEdlbmVyYXRlIHRoZSBsYXN0IG1vdmUuCisgICAgICAgIGRlZiBsYXN0KCk6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5maW5hbCBpbiBzdWNjc1tzZWxmLmxhc3Rpal0KKyAgICAgICAgICAgIHlpZWxkIHNlbGYuZmluYWwKKworICAgICAgICBpZiBtKm4gPCA0OgorICAgICAgICAgICAgc2VsZi5zcXVhcmVnZW5lcmF0b3JzID0gW2ZpcnN0XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zcXVhcmVnZW5lcmF0b3JzID0gW2ZpcnN0LCBzZWNvbmRdICsgXAorICAgICAgICAgICAgICAgIFtoYXJkIGFuZCBhZHZhbmNlX2hhcmQgb3IgYWR2YW5jZV0gKiAobSpuIC0gMykgKyBcCisgICAgICAgICAgICAgICAgW2xhc3RdCisKKyAgICBkZWYgY29vcmRzMmluZGV4KHNlbGYsIGksIGopOgorICAgICAgICBhc3NlcnQgMCA8PSBpIDwgc2VsZi5tCisgICAgICAgIGFzc2VydCAwIDw9IGogPCBzZWxmLm4KKyAgICAgICAgcmV0dXJuIGkgKiBzZWxmLm4gKyBqCisKKyAgICBkZWYgaW5kZXgyY29vcmRzKHNlbGYsIGluZGV4KToKKyAgICAgICAgYXNzZXJ0IDAgPD0gaW5kZXggPCBzZWxmLm0gKiBzZWxmLm4KKyAgICAgICAgcmV0dXJuIGRpdm1vZChpbmRleCwgc2VsZi5uKQorCisgICAgZGVmIF9pbml0X2JvYXJkKHNlbGYpOgorICAgICAgICBzdWNjcyA9IHNlbGYuc3VjY3MKKyAgICAgICAgZGVsIHN1Y2NzWzpdCisgICAgICAgIG0sIG4gPSBzZWxmLm0sIHNlbGYubgorICAgICAgICBjMmkgPSBzZWxmLmNvb3JkczJpbmRleAorCisgICAgICAgIG9mZnNldHMgPSBbKCAxLCAgMiksICggMiwgIDEpLCAoIDIsIC0xKSwgKCAxLCAtMiksCisgICAgICAgICAgICAgICAgICAgKC0xLCAtMiksICgtMiwgLTEpLCAoLTIsICAxKSwgKC0xLCAgMildCisgICAgICAgIHJhbmdlbiA9IHJhbmdlKG4pCisgICAgICAgIGZvciBpIGluIHJhbmdlKG0pOgorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2VuOgorICAgICAgICAgICAgICAgIHMgPSBbYzJpKGkraW8sIGoram8pIGZvciBpbywgam8gaW4gb2Zmc2V0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIDAgPD0gaStpbyA8IG0gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA8PSBqK2pvIDwgbl0KKyAgICAgICAgICAgICAgICBzdWNjcy5hcHBlbmQocykKKworICAgICMgR2VuZXJhdGUgc29sdXRpb25zLgorICAgIGRlZiBzb2x2ZShzZWxmKToKKyAgICAgICAgc2VsZi5faW5pdF9ib2FyZCgpCisgICAgICAgIGZvciB4IGluIGNvbmpvaW4oc2VsZi5zcXVhcmVnZW5lcmF0b3JzKToKKyAgICAgICAgICAgIHlpZWxkIHgKKworICAgIGRlZiBwcmludHNvbHV0aW9uKHNlbGYsIHgpOgorICAgICAgICBtLCBuID0gc2VsZi5tLCBzZWxmLm4KKyAgICAgICAgYXNzZXJ0IGxlbih4KSA9PSBtKm4KKyAgICAgICAgdyA9IGxlbihzdHIobSpuKSkKKyAgICAgICAgZm9ybWF0ID0gIiUiICsgc3RyKHcpICsgImQiCisKKyAgICAgICAgc3F1YXJlcyA9IFtbTm9uZV0gKiBuIGZvciBpIGluIHJhbmdlKG0pXQorICAgICAgICBrID0gMQorICAgICAgICBmb3IgaSBpbiB4OgorICAgICAgICAgICAgaTEsIGoxID0gc2VsZi5pbmRleDJjb29yZHMoaSkKKyAgICAgICAgICAgIHNxdWFyZXNbaTFdW2oxXSA9IGZvcm1hdCAlIGsKKyAgICAgICAgICAgIGsgKz0gMQorCisgICAgICAgIHNlcCA9ICIrIiArICgiLSIgKiB3ICsgIisiKSAqIG4KKyAgICAgICAgcHJpbnQgc2VwCisgICAgICAgIGZvciBpIGluIHJhbmdlKG0pOgorICAgICAgICAgICAgcm93ID0gc3F1YXJlc1tpXQorICAgICAgICAgICAgcHJpbnQgInwiICsgInwiLmpvaW4ocm93KSArICJ8IgorICAgICAgICAgICAgcHJpbnQgc2VwCisKK2NvbmpvaW5fdGVzdHMgPSAiIiIKKworR2VuZXJhdGUgdGhlIDMtYml0IGJpbmFyeSBudW1iZXJzIGluIG9yZGVyLiAgVGhpcyBpbGx1c3RyYXRlcyBkdW1iZXN0LQorcG9zc2libGUgdXNlIG9mIGNvbmpvaW4sIGp1c3QgdG8gZ2VuZXJhdGUgdGhlIGZ1bGwgY3Jvc3MtcHJvZHVjdC4KKworPj4+IGZvciBjIGluIGNvbmpvaW4oW2xhbWJkYTogaXRlcigoMCwgMSkpXSAqIDMpOgorLi4uICAgICBwcmludCBjCitbMCwgMCwgMF0KK1swLCAwLCAxXQorWzAsIDEsIDBdCitbMCwgMSwgMV0KK1sxLCAwLCAwXQorWzEsIDAsIDFdCitbMSwgMSwgMF0KK1sxLCAxLCAxXQorCitGb3IgZWZmaWNpZW5jeSBpbiB0eXBpY2FsIGJhY2t0cmFja2luZyBhcHBzLCBjb25qb2luKCkgeWllbGRzIHRoZSBzYW1lIGxpc3QKK29iamVjdCBlYWNoIHRpbWUuICBTbyBpZiB5b3Ugd2FudCB0byBzYXZlIGF3YXkgYSBmdWxsIGFjY291bnQgb2YgaXRzCitnZW5lcmF0ZWQgc2VxdWVuY2UsIHlvdSBuZWVkIHRvIGNvcHkgaXRzIHJlc3VsdHMuCisKKz4+PiBkZWYgZ2VuY29weShpdGVyYXRvcik6CisuLi4gICAgIGZvciB4IGluIGl0ZXJhdG9yOgorLi4uICAgICAgICAgeWllbGQgeFs6XQorCis+Pj4gZm9yIG4gaW4gcmFuZ2UoMTApOgorLi4uICAgICBhbGwgPSBsaXN0KGdlbmNvcHkoY29uam9pbihbbGFtYmRhOiBpdGVyKCgwLCAxKSldICogbikpKQorLi4uICAgICBwcmludCBuLCBsZW4oYWxsKSwgYWxsWzBdID09IFswXSAqIG4sIGFsbFstMV0gPT0gWzFdICogbgorMCAxIFRydWUgVHJ1ZQorMSAyIFRydWUgVHJ1ZQorMiA0IFRydWUgVHJ1ZQorMyA4IFRydWUgVHJ1ZQorNCAxNiBUcnVlIFRydWUKKzUgMzIgVHJ1ZSBUcnVlCis2IDY0IFRydWUgVHJ1ZQorNyAxMjggVHJ1ZSBUcnVlCis4IDI1NiBUcnVlIFRydWUKKzkgNTEyIFRydWUgVHJ1ZQorCitBbmQgcnVuIGFuIDgtcXVlZW5zIHNvbHZlci4KKworPj4+IHEgPSBRdWVlbnMoOCkKKz4+PiBMSU1JVCA9IDIKKz4+PiBjb3VudCA9IDAKKz4+PiBmb3Igcm93MmNvbCBpbiBxLnNvbHZlKCk6CisuLi4gICAgIGNvdW50ICs9IDEKKy4uLiAgICAgaWYgY291bnQgPD0gTElNSVQ6CisuLi4gICAgICAgICBwcmludCAiU29sdXRpb24iLCBjb3VudAorLi4uICAgICAgICAgcS5wcmludHNvbHV0aW9uKHJvdzJjb2wpCitTb2x1dGlvbiAxCisrLSstKy0rLSstKy0rLSstKworfFF8IHwgfCB8IHwgfCB8IHwKKystKy0rLSstKy0rLSstKy0rCit8IHwgfCB8IHxRfCB8IHwgfAorKy0rLSstKy0rLSstKy0rLSsKK3wgfCB8IHwgfCB8IHwgfFF8CisrLSstKy0rLSstKy0rLSstKworfCB8IHwgfCB8IHxRfCB8IHwKKystKy0rLSstKy0rLSstKy0rCit8IHwgfFF8IHwgfCB8IHwgfAorKy0rLSstKy0rLSstKy0rLSsKK3wgfCB8IHwgfCB8IHxRfCB8CisrLSstKy0rLSstKy0rLSstKworfCB8UXwgfCB8IHwgfCB8IHwKKystKy0rLSstKy0rLSstKy0rCit8IHwgfCB8UXwgfCB8IHwgfAorKy0rLSstKy0rLSstKy0rLSsKK1NvbHV0aW9uIDIKKystKy0rLSstKy0rLSstKy0rCit8UXwgfCB8IHwgfCB8IHwgfAorKy0rLSstKy0rLSstKy0rLSsKK3wgfCB8IHwgfCB8UXwgfCB8CisrLSstKy0rLSstKy0rLSstKworfCB8IHwgfCB8IHwgfCB8UXwKKystKy0rLSstKy0rLSstKy0rCit8IHwgfFF8IHwgfCB8IHwgfAorKy0rLSstKy0rLSstKy0rLSsKK3wgfCB8IHwgfCB8IHxRfCB8CisrLSstKy0rLSstKy0rLSstKworfCB8IHwgfFF8IHwgfCB8IHwKKystKy0rLSstKy0rLSstKy0rCit8IHxRfCB8IHwgfCB8IHwgfAorKy0rLSstKy0rLSstKy0rLSsKK3wgfCB8IHwgfFF8IHwgfCB8CisrLSstKy0rLSstKy0rLSstKworCis+Pj4gcHJpbnQgY291bnQsICJzb2x1dGlvbnMgaW4gYWxsLiIKKzkyIHNvbHV0aW9ucyBpbiBhbGwuCisKK0FuZCBydW4gYSBLbmlnaHQncyBUb3VyIG9uIGEgMTB4MTAgYm9hcmQuICBOb3RlIHRoYXQgdGhlcmUgYXJlIGFib3V0CisyMCwwMDAgc29sdXRpb25zIGV2ZW4gb24gYSA2eDYgYm9hcmQsIHNvIGRvbid0IGRhcmUgcnVuIHRoaXMgdG8gZXhoYXVzdGlvbi4KKworPj4+IGsgPSBLbmlnaHRzKDEwLCAxMCkKKz4+PiBMSU1JVCA9IDIKKz4+PiBjb3VudCA9IDAKKz4+PiBmb3IgeCBpbiBrLnNvbHZlKCk6CisuLi4gICAgIGNvdW50ICs9IDEKKy4uLiAgICAgaWYgY291bnQgPD0gTElNSVQ6CisuLi4gICAgICAgICBwcmludCAiU29sdXRpb24iLCBjb3VudAorLi4uICAgICAgICAgay5wcmludHNvbHV0aW9uKHgpCisuLi4gICAgIGVsc2U6CisuLi4gICAgICAgICBicmVhaworU29sdXRpb24gMQorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgIDF8IDU4fCAyN3wgMzR8ICAzfCA0MHwgMjl8IDEwfCAgNXwgIDh8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCAyNnwgMzV8ICAyfCA1N3wgMjh8IDMzfCAgNHwgIDd8IDMwfCAxMXwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDU5fDEwMHwgNzN8IDM2fCA0MXwgNTZ8IDM5fCAzMnwgIDl8ICA2fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgNzR8IDI1fCA2MHwgNTV8IDcyfCAzN3wgNDJ8IDQ5fCAxMnwgMzF8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCA2MXwgODZ8IDk5fCA3NnwgNjN8IDUyfCA0N3wgMzh8IDQzfCA1MHwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDI0fCA3NXwgNjJ8IDg1fCA1NHwgNzF8IDY0fCA1MXwgNDh8IDEzfAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgODd8IDk4fCA5MXwgODB8IDc3fCA4NHwgNTN8IDQ2fCA2NXwgNDR8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCA5MHwgMjN8IDg4fCA5NXwgNzB8IDc5fCA2OHwgODN8IDE0fCAxN3wKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDk3fCA5MnwgMjF8IDc4fCA4MXwgOTR8IDE5fCAxNnwgNDV8IDY2fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgMjJ8IDg5fCA5NnwgOTN8IDIwfCA2OXwgODJ8IDY3fCAxOHwgMTV8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworU29sdXRpb24gMgorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgIDF8IDU4fCAyN3wgMzR8ICAzfCA0MHwgMjl8IDEwfCAgNXwgIDh8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCAyNnwgMzV8ICAyfCA1N3wgMjh8IDMzfCAgNHwgIDd8IDMwfCAxMXwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDU5fDEwMHwgNzN8IDM2fCA0MXwgNTZ8IDM5fCAzMnwgIDl8ICA2fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgNzR8IDI1fCA2MHwgNTV8IDcyfCAzN3wgNDJ8IDQ5fCAxMnwgMzF8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCA2MXwgODZ8IDk5fCA3NnwgNjN8IDUyfCA0N3wgMzh8IDQzfCA1MHwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDI0fCA3NXwgNjJ8IDg1fCA1NHwgNzF8IDY0fCA1MXwgNDh8IDEzfAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgODd8IDk4fCA4OXwgODB8IDc3fCA4NHwgNTN8IDQ2fCA2NXwgNDR8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCA5MHwgMjN8IDkyfCA5NXwgNzB8IDc5fCA2OHwgODN8IDE0fCAxN3wKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDk3fCA4OHwgMjF8IDc4fCA4MXwgOTR8IDE5fCAxNnwgNDV8IDY2fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgMjJ8IDkxfCA5NnwgOTN8IDIwfCA2OXwgODJ8IDY3fCAxOHwgMTV8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworIiIiCisKK3dlYWtyZWZfdGVzdHMgPSAiIiJcCitHZW5lcmF0b3JzIGFyZSB3ZWFrbHkgcmVmZXJlbmNhYmxlOgorCis+Pj4gaW1wb3J0IHdlYWtyZWYKKz4+PiBkZWYgZ2VuKCk6CisuLi4gICAgIHlpZWxkICdmb28hJworLi4uCis+Pj4gd3IgPSB3ZWFrcmVmLnJlZihnZW4pCis+Pj4gd3IoKSBpcyBnZW4KK1RydWUKKz4+PiBwID0gd2Vha3JlZi5wcm94eShnZW4pCisKK0dlbmVyYXRvci1pdGVyYXRvcnMgYXJlIHdlYWtseSByZWZlcmVuY2FibGUgYXMgd2VsbDoKKworPj4+IGdpID0gZ2VuKCkKKz4+PiB3ciA9IHdlYWtyZWYucmVmKGdpKQorPj4+IHdyKCkgaXMgZ2kKK1RydWUKKz4+PiBwID0gd2Vha3JlZi5wcm94eShnaSkKKz4+PiBsaXN0KHApCitbJ2ZvbyEnXQorCisiIiIKKworY29yb3V0aW5lX3Rlc3RzID0gIiIiXAorU2VuZGluZyBhIHZhbHVlIGludG8gYSBzdGFydGVkIGdlbmVyYXRvcjoKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHByaW50ICh5aWVsZCAxKQorLi4uICAgICB5aWVsZCAyCis+Pj4gZyA9IGYoKQorPj4+IGcubmV4dCgpCisxCis+Pj4gZy5zZW5kKDQyKQorNDIKKzIKKworU2VuZGluZyBhIHZhbHVlIGludG8gYSBuZXcgZ2VuZXJhdG9yIHByb2R1Y2VzIGEgVHlwZUVycm9yOgorCis+Pj4gZigpLnNlbmQoImZvbyIpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisuLi4KK1R5cGVFcnJvcjogY2FuJ3Qgc2VuZCBub24tTm9uZSB2YWx1ZSB0byBhIGp1c3Qtc3RhcnRlZCBnZW5lcmF0b3IKKworCitZaWVsZCBieSBpdHNlbGYgeWllbGRzIE5vbmU6CisKKz4+PiBkZWYgZigpOiB5aWVsZAorPj4+IGxpc3QoZigpKQorW05vbmVdCisKKworCitBbiBvYnNjZW5lIGFidXNlIG9mIGEgeWllbGQgZXhwcmVzc2lvbiB3aXRoaW4gYSBnZW5lcmF0b3IgZXhwcmVzc2lvbjoKKworPj4+IGxpc3QoKHlpZWxkIDIxKSBmb3IgaSBpbiByYW5nZSg0KSkKK1syMSwgTm9uZSwgMjEsIE5vbmUsIDIxLCBOb25lLCAyMSwgTm9uZV0KKworQW5kIGEgbW9yZSBzYW5lLCBidXQgc3RpbGwgd2VpcmQgdXNhZ2U6CisKKz4+PiBkZWYgZigpOiBsaXN0KGkgZm9yIGkgaW4gWyh5aWVsZCAyNildKQorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKworQSB5aWVsZCBleHByZXNzaW9uIHdpdGggYXVnbWVudGVkIGFzc2lnbm1lbnQuCisKKz4+PiBkZWYgY29yb3V0aW5lKHNlcSk6CisuLi4gICAgIGNvdW50ID0gMAorLi4uICAgICB3aGlsZSBjb3VudCA8IDIwMDoKKy4uLiAgICAgICAgIGNvdW50ICs9IHlpZWxkCisuLi4gICAgICAgICBzZXEuYXBwZW5kKGNvdW50KQorPj4+IHNlcSA9IFtdCis+Pj4gYyA9IGNvcm91dGluZShzZXEpCis+Pj4gYy5uZXh0KCkKKz4+PiBwcmludCBzZXEKK1tdCis+Pj4gYy5zZW5kKDEwKQorPj4+IHByaW50IHNlcQorWzEwXQorPj4+IGMuc2VuZCgxMCkKKz4+PiBwcmludCBzZXEKK1sxMCwgMjBdCis+Pj4gYy5zZW5kKDEwKQorPj4+IHByaW50IHNlcQorWzEwLCAyMCwgMzBdCisKKworQ2hlY2sgc29tZSBzeW50YXggZXJyb3JzIGZvciB5aWVsZCBleHByZXNzaW9uczoKKworPj4+IGY9bGFtYmRhOiAoeWllbGQgMSksKHlpZWxkIDIpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjFdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6ICd5aWVsZCcgb3V0c2lkZSBmdW5jdGlvbgorCis+Pj4gZGVmIGYoKTogcmV0dXJuIGxhbWJkYSB4PSh5aWVsZCk6IDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCitTeW50YXhFcnJvcjogJ3JldHVybicgd2l0aCBhcmd1bWVudCBpbnNpZGUgZ2VuZXJhdG9yICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjJdPiwgbGluZSAxKQorCis+Pj4gZGVmIGYoKTogeCA9IHlpZWxkID0geQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLi4KKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzIzXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIHlpZWxkIGV4cHJlc3Npb24gbm90IHBvc3NpYmxlCisKKz4+PiBkZWYgZigpOiAoeWllbGQgYmFyKSA9IHkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyNF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIHlpZWxkIGV4cHJlc3Npb24KKworPj4+IGRlZiBmKCk6ICh5aWVsZCBiYXIpICs9IHkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyNV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIHlpZWxkIGV4cHJlc3Npb24KKworCitOb3cgY2hlY2sgc29tZSB0aHJvdygpIGNvbmRpdGlvbnM6CisKKz4+PiBkZWYgZigpOgorLi4uICAgICB3aGlsZSBUcnVlOgorLi4uICAgICAgICAgdHJ5OgorLi4uICAgICAgICAgICAgIHByaW50ICh5aWVsZCkKKy4uLiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLHY6CisuLi4gICAgICAgICAgICAgcHJpbnQgImNhdWdodCBWYWx1ZUVycm9yICglcykiICUgKHYpLAorPj4+IGltcG9ydCBzeXMKKz4+PiBnID0gZigpCis+Pj4gZy5uZXh0KCkKKworPj4+IGcudGhyb3coVmFsdWVFcnJvcikgIyB0eXBlIG9ubHkKK2NhdWdodCBWYWx1ZUVycm9yICgpCisKKz4+PiBnLnRocm93KFZhbHVlRXJyb3IoInh5eiIpKSAgIyB2YWx1ZSBvbmx5CitjYXVnaHQgVmFsdWVFcnJvciAoeHl6KQorCis+Pj4gZy50aHJvdyhWYWx1ZUVycm9yLCBWYWx1ZUVycm9yKDEpKSAgICMgdmFsdWUrbWF0Y2hpbmcgdHlwZQorY2F1Z2h0IFZhbHVlRXJyb3IgKDEpCisKKz4+PiBnLnRocm93KFZhbHVlRXJyb3IsIFR5cGVFcnJvcigxKSkgICMgbWlzbWF0Y2hlZCB0eXBlLCByZXdyYXBwZWQKK2NhdWdodCBWYWx1ZUVycm9yICgxKQorCis+Pj4gZy50aHJvdyhWYWx1ZUVycm9yLCBWYWx1ZUVycm9yKDEpLCBOb25lKSAgICMgZXhwbGljaXQgTm9uZSB0cmFjZWJhY2sKK2NhdWdodCBWYWx1ZUVycm9yICgxKQorCis+Pj4gZy50aHJvdyhWYWx1ZUVycm9yKDEpLCAiZm9vIikgICAgICAgIyBiYWQgYXJncworVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLi4KK1R5cGVFcnJvcjogaW5zdGFuY2UgZXhjZXB0aW9uIG1heSBub3QgaGF2ZSBhIHNlcGFyYXRlIHZhbHVlCisKKz4+PiBnLnRocm93KFZhbHVlRXJyb3IsICJmb28iLCAyMykgICAgICAjIGJhZCBhcmdzCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorVHlwZUVycm9yOiB0aHJvdygpIHRoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSB0cmFjZWJhY2sgb2JqZWN0CisKKz4+PiBkZWYgdGhyb3coZyxleGMpOgorLi4uICAgICB0cnk6CisuLi4gICAgICAgICByYWlzZSBleGMKKy4uLiAgICAgZXhjZXB0OgorLi4uICAgICAgICAgZy50aHJvdygqc3lzLmV4Y19pbmZvKCkpCis+Pj4gdGhyb3coZyxWYWx1ZUVycm9yKSAjIGRvIGl0IHdpdGggdHJhY2ViYWNrIGluY2x1ZGVkCitjYXVnaHQgVmFsdWVFcnJvciAoKQorCis+Pj4gZy5zZW5kKDEpCisxCisKKz4+PiB0aHJvdyhnLFR5cGVFcnJvcikgICMgdGVybWluYXRlIHRoZSBnZW5lcmF0b3IKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCitUeXBlRXJyb3IKKworPj4+IHByaW50IGcuZ2lfZnJhbWUKK05vbmUKKworPj4+IGcuc2VuZCgyKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLi4KK1N0b3BJdGVyYXRpb24KKworPj4+IGcudGhyb3coVmFsdWVFcnJvciw2KSAgICAgICAjIHRocm93IG9uIGNsb3NlZCBnZW5lcmF0b3IKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCitWYWx1ZUVycm9yOiA2CisKKz4+PiBmKCkudGhyb3coVmFsdWVFcnJvciw3KSAgICAgIyB0aHJvdyBvbiBqdXN0LW9wZW5lZCBnZW5lcmF0b3IKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCitWYWx1ZUVycm9yOiA3CisKKz4+PiBmKCkudGhyb3coImFiYyIpICAgICAjIHRocm93IG9uIGp1c3Qtb3BlbmVkIGdlbmVyYXRvcgorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLi4KK1R5cGVFcnJvcjogZXhjZXB0aW9ucyBtdXN0IGJlIGNsYXNzZXMsIG9yIGluc3RhbmNlcywgbm90IHN0cgorCitOb3cgbGV0J3MgdHJ5IGNsb3NpbmcgYSBnZW5lcmF0b3I6CisKKz4+PiBkZWYgZigpOgorLi4uICAgICB0cnk6IHlpZWxkCisuLi4gICAgIGV4Y2VwdCBHZW5lcmF0b3JFeGl0OgorLi4uICAgICAgICAgcHJpbnQgImV4aXRpbmciCisKKz4+PiBnID0gZigpCis+Pj4gZy5uZXh0KCkKKz4+PiBnLmNsb3NlKCkKK2V4aXRpbmcKKz4+PiBnLmNsb3NlKCkgICMgc2hvdWxkIGJlIG5vLW9wIG5vdworCis+Pj4gZigpLmNsb3NlKCkgICMgY2xvc2Ugb24ganVzdC1vcGVuZWQgZ2VuZXJhdG9yIHNob3VsZCBiZSBmaW5lCisKKz4+PiBkZWYgZigpOiB5aWVsZCAgICAgICMgYW4gZXZlbiBzaW1wbGVyIGdlbmVyYXRvcgorPj4+IGYoKS5jbG9zZSgpICAgICAgICAgIyBjbG9zZSBiZWZvcmUgb3BlbmluZworPj4+IGcgPSBmKCkKKz4+PiBnLm5leHQoKQorPj4+IGcuY2xvc2UoKSAgICAgICAgICAgIyBjbG9zZSBub3JtYWxseQorCitBbmQgZmluYWxpemF0aW9uOgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgdHJ5OiB5aWVsZAorLi4uICAgICBmaW5hbGx5OgorLi4uICAgICAgICAgcHJpbnQgImV4aXRpbmciCisKKz4+PiBnID0gZigpCis+Pj4gZy5uZXh0KCkKKz4+PiBkZWwgZworZXhpdGluZworCis+Pj4gY2xhc3MgY29udGV4dChvYmplY3QpOgorLi4uICAgIGRlZiBfX2VudGVyX18oc2VsZik6IHBhc3MKKy4uLiAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOiBwcmludCAnZXhpdGluZycKKz4+PiBkZWYgZigpOgorLi4uICAgICB3aXRoIGNvbnRleHQoKToKKy4uLiAgICAgICAgICB5aWVsZAorPj4+IGcgPSBmKCkKKz4+PiBnLm5leHQoKQorPj4+IGRlbCBnCitleGl0aW5nCisKKworR2VuZXJhdG9yRXhpdCBpcyBub3QgY2F1Z2h0IGJ5IGV4Y2VwdCBFeGNlcHRpb246CisKKz4+PiBkZWYgZigpOgorLi4uICAgICB0cnk6IHlpZWxkCisuLi4gICAgIGV4Y2VwdCBFeGNlcHRpb246IHByaW50ICdleGNlcHQnCisuLi4gICAgIGZpbmFsbHk6IHByaW50ICdmaW5hbGx5JworCis+Pj4gZyA9IGYoKQorPj4+IGcubmV4dCgpCis+Pj4gZGVsIGcKK2ZpbmFsbHkKKworCitOb3cgbGV0J3MgdHJ5IHNvbWUgaWxsLWJlaGF2ZWQgZ2VuZXJhdG9yczoKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHRyeTogeWllbGQKKy4uLiAgICAgZXhjZXB0IEdlbmVyYXRvckV4aXQ6CisuLi4gICAgICAgICB5aWVsZCAiZm9vISIKKz4+PiBnID0gZigpCis+Pj4gZy5uZXh0KCkKKz4+PiBnLmNsb3NlKCkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCitSdW50aW1lRXJyb3I6IGdlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQKKz4+PiBnLmNsb3NlKCkKKworCitPdXIgaWxsLWJlaGF2ZWQgY29kZSBzaG91bGQgYmUgaW52b2tlZCBkdXJpbmcgR0M6CisKKz4+PiBpbXBvcnQgc3lzLCBTdHJpbmdJTworPj4+IG9sZCwgc3lzLnN0ZGVyciA9IHN5cy5zdGRlcnIsIFN0cmluZ0lPLlN0cmluZ0lPKCkKKz4+PiBnID0gZigpCis+Pj4gZy5uZXh0KCkKKz4+PiBkZWwgZworPj4+IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdGFydHN3aXRoKAorLi4uICAgICAiRXhjZXB0aW9uIFJ1bnRpbWVFcnJvcjogJ2dlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQnIGluICIKKy4uLiApCitUcnVlCis+Pj4gc3lzLnN0ZGVyciA9IG9sZAorCisKK0FuZCBlcnJvcnMgdGhyb3duIGR1cmluZyBjbG9zaW5nIHNob3VsZCBwcm9wYWdhdGU6CisKKz4+PiBkZWYgZigpOgorLi4uICAgICB0cnk6IHlpZWxkCisuLi4gICAgIGV4Y2VwdCBHZW5lcmF0b3JFeGl0OgorLi4uICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmaWUhIikKKz4+PiBnID0gZigpCis+Pj4gZy5uZXh0KCkKKz4+PiBnLmNsb3NlKCkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCitUeXBlRXJyb3I6IGZpZSEKKworCitFbnN1cmUgdGhhdCB2YXJpb3VzIHlpZWxkIGV4cHJlc3Npb24gY29uc3RydWN0cyBtYWtlIHRoZWlyCitlbmNsb3NpbmcgZnVuY3Rpb24gYSBnZW5lcmF0b3I6CisKKz4+PiBkZWYgZigpOiB4ICs9IHlpZWxkCis+Pj4gdHlwZShmKCkpCis8dHlwZSAnZ2VuZXJhdG9yJz4KKworPj4+IGRlZiBmKCk6IHggPSB5aWVsZAorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKz4+PiBkZWYgZigpOiBsYW1iZGEgeD0oeWllbGQpOiAxCis+Pj4gdHlwZShmKCkpCis8dHlwZSAnZ2VuZXJhdG9yJz4KKworPj4+IGRlZiBmKCk6IHg9KGkgZm9yIGkgaW4gKHlpZWxkKSBpZiAoeWllbGQpKQorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKz4+PiBkZWYgZihkKTogZFsoeWllbGQgImEiKV0gPSBkWyh5aWVsZCAiYiIpXSA9IDI3Cis+Pj4gZGF0YSA9IFsxLDJdCis+Pj4gZyA9IGYoZGF0YSkKKz4+PiB0eXBlKGcpCis8dHlwZSAnZ2VuZXJhdG9yJz4KKz4+PiBnLnNlbmQoTm9uZSkKKydhJworPj4+IGRhdGEKK1sxLCAyXQorPj4+IGcuc2VuZCgwKQorJ2InCis+Pj4gZGF0YQorWzI3LCAyXQorPj4+IHRyeTogZy5zZW5kKDEpCisuLi4gZXhjZXB0IFN0b3BJdGVyYXRpb246IHBhc3MKKz4+PiBkYXRhCitbMjcsIDI3XQorCisiIiIKKworcmVmbGVha3NfdGVzdHMgPSAiIiIKK1ByaW9yIHRvIGFkZGluZyBjeWNsZS1HQyBzdXBwb3J0IHRvIGl0ZXJ0b29scy50ZWUsIHRoaXMgY29kZSB3b3VsZCBsZWFrCityZWZlcmVuY2VzLiBXZSBhZGQgaXQgdG8gdGhlIHN0YW5kYXJkIHN1aXRlIHNvIHRoZSByb3V0aW5lIHJlZmxlYWstdGVzdHMKK3dvdWxkIHRyaWdnZXIgaWYgaXQgc3RhcnRzIGJlaW5nIHVuY2xlYW5hYmxlIGFnYWluLgorCis+Pj4gaW1wb3J0IGl0ZXJ0b29scworPj4+IGRlZiBsZWFrKCk6CisuLi4gICAgIGNsYXNzIGdlbjoKKy4uLiAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKy4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZgorLi4uICAgICAgICAgZGVmIG5leHQoc2VsZik6CisuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYuaXRlbQorLi4uICAgICBnID0gZ2VuKCkKKy4uLiAgICAgaGVhZCwgdGFpbCA9IGl0ZXJ0b29scy50ZWUoZykKKy4uLiAgICAgZy5pdGVtID0gaGVhZAorLi4uICAgICByZXR1cm4gaGVhZAorPj4+IGl0ID0gbGVhaygpCisKK01ha2Ugc3VyZSB0byBhbHNvIHRlc3QgdGhlIGludm9sdmVtZW50IG9mIHRoZSB0ZWUtaW50ZXJuYWwgdGVlZGF0YW9iamVjdCwKK3doaWNoIHN0b3JlcyByZXR1cm5lZCBpdGVtcy4KKworPj4+IGl0ZW0gPSBpdC5uZXh0KCkKKworCisKK1RoaXMgdGVzdCBsZWFrZWQgYXQgb25lIHBvaW50IGR1ZSB0byBnZW5lcmF0b3IgZmluYWxpemF0aW9uL2Rlc3RydWN0aW9uLgorSXQgd2FzIGNvcGllZCBmcm9tIExpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZW5lcmF0b3JfY3ljbGUucHkgYmVmb3JlIHRoZSBmaWxlCit3YXMgcmVtb3ZlZC4KKworPj4+IGRlZiBsZWFrKCk6CisuLi4gICAgZGVmIGdlbigpOgorLi4uICAgICAgICB3aGlsZSBUcnVlOgorLi4uICAgICAgICAgICAgeWllbGQgZworLi4uICAgIGcgPSBnZW4oKQorCis+Pj4gbGVhaygpCisKKworCitUaGlzIHRlc3QgaXNuJ3QgcmVhbGx5IGdlbmVyYXRvciByZWxhdGVkLCBidXQgcmF0aGVyIGV4Y2VwdGlvbi1pbi1jbGVhbnVwCityZWxhdGVkLiBUaGUgY29yb3V0aW5lIHRlc3RzIChhYm92ZSkganVzdCBoYXBwZW4gdG8gY2F1c2UgYW4gZXhjZXB0aW9uIGluCit0aGUgZ2VuZXJhdG9yJ3MgX19kZWxfXyAodHBfZGVsKSBtZXRob2QuIFdlIGNhbiBhbHNvIHRlc3QgZm9yIHRoaXMKK2V4cGxpY2l0bHksIHdpdGhvdXQgZ2VuZXJhdG9ycy4gV2UgZG8gaGF2ZSB0byByZWRpcmVjdCBzdGRlcnIgdG8gYXZvaWQKK3ByaW50aW5nIHdhcm5pbmdzIGFuZCB0byBkb3VibGVjaGVjayB0aGF0IHdlIGFjdHVhbGx5IHRlc3RlZCB3aGF0IHdlIHdhbnRlZAordG8gdGVzdC4KKworPj4+IGltcG9ydCBzeXMsIFN0cmluZ0lPCis+Pj4gb2xkID0gc3lzLnN0ZGVycgorPj4+IHRyeToKKy4uLiAgICAgc3lzLnN0ZGVyciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKy4uLiAgICAgY2xhc3MgTGVha2VyOgorLi4uICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisuLi4gICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisuLi4KKy4uLiAgICAgbCA9IExlYWtlcigpCisuLi4gICAgIGRlbCBsCisuLi4gICAgIGVyciA9IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCisuLi4gICAgIGVyci5zdGFydHN3aXRoKAorLi4uICAgICAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6IFJ1bnRpbWVFcnJvcigpIGluIDwiCisuLi4gICAgICkKKy4uLiAgICAgZXJyLmVuZHN3aXRoKCI+IGlnbm9yZWQiKQorLi4uICAgICBsZW4oZXJyLnNwbGl0bGluZXMoKSkKKy4uLiBmaW5hbGx5OgorLi4uICAgICBzeXMuc3RkZXJyID0gb2xkCitUcnVlCitUcnVlCisxCisKKworCitUaGVzZSByZWZsZWFrIHRlc3RzIHNob3VsZCBwZXJoYXBzIGJlIGluIGEgdGVzdGZpbGUgb2YgdGhlaXIgb3duLAordGVzdF9nZW5lcmF0b3JzIGp1c3QgaGFwcGVuZWQgdG8gYmUgdGhlIHRlc3QgdGhhdCBkcmV3IHRoZXNlIG91dC4KKworIiIiCisKK19fdGVzdF9fID0geyJ0dXQiOiAgICAgIHR1dG9yaWFsX3Rlc3RzLAorICAgICAgICAgICAgInBlcCI6ICAgICAgcGVwX3Rlc3RzLAorICAgICAgICAgICAgImVtYWlsIjogICAgZW1haWxfdGVzdHMsCisgICAgICAgICAgICAiZnVuIjogICAgICBmdW5fdGVzdHMsCisgICAgICAgICAgICAic3ludGF4IjogICBzeW50YXhfdGVzdHMsCisgICAgICAgICAgICAiY29uam9pbiI6ICBjb25qb2luX3Rlc3RzLAorICAgICAgICAgICAgIndlYWtyZWYiOiAgd2Vha3JlZl90ZXN0cywKKyAgICAgICAgICAgICJjb3JvdXRpbmUiOiAgY29yb3V0aW5lX3Rlc3RzLAorICAgICAgICAgICAgInJlZmxlYWtzIjogcmVmbGVha3NfdGVzdHMsCisgICAgICAgICAgICB9CisKKyMgTWFnaWMgdGVzdCBuYW1lIHRoYXQgcmVncnRlc3QucHkgaW52b2tlcyAqYWZ0ZXIqIGltcG9ydGluZyB0aGlzIG1vZHVsZS4KKyMgVGhpcyB3b3JtcyBhcm91bmQgYSBib290c3RyYXAgcHJvYmxlbS4KKyMgTm90ZSB0aGF0IGRvY3Rlc3QgYW5kIHJlZ3J0ZXN0IGJvdGggbG9vayBpbiBzeXMuYXJndiBmb3IgYSAiLXYiIGFyZ3VtZW50LAorIyBzbyB0aGlzIHdvcmtzIGFzIGV4cGVjdGVkIGluIGJvdGggd2F5cyBvZiBydW5uaW5nIHJlZ3J0ZXN0LgorZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCB0ZXN0X2dlbmVyYXRvcnMKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9nZW5lcmF0b3JzLCB2ZXJib3NlKQorCisjIFRoaXMgcGFydCBpc24ndCBuZWVkZWQgZm9yIHJlZ3J0ZXN0LCBidXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3QgZGlyZWN0bHkuCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigxKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTc1YjU2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKQEAgLTAsMCArMSwyNTYgQEAKKyIiIgorVGVzdHMgY29tbW9uIHRvIGdlbmVyaWNwYXRoLCBtYWNwYXRoLCBudHBhdGggYW5kIHBvc2l4cGF0aAorIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBvcworaW1wb3J0IGdlbmVyaWNwYXRoCitpbXBvcnQgc3lzCisKKworZGVmIHNhZmVfcm1kaXIoZGlybmFtZSk6CisgICAgdHJ5OgorICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBwYXNzCisKKworY2xhc3MgR2VuZXJpY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlIHBhdGggbW9kdWxlIHRvIGJlIHRlc3RlZAorICAgIHBhdGhtb2R1bGUgPSBnZW5lcmljcGF0aAorICAgIGNvbW1vbl9hdHRyaWJ1dGVzID0gWydjb21tb25wcmVmaXgnLCAnZ2V0c2l6ZScsICdnZXRhdGltZScsICdnZXRjdGltZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldG10aW1lJywgJ2V4aXN0cycsICdpc2RpcicsICdpc2ZpbGUnXQorICAgIGF0dHJpYnV0ZXMgPSBbXQorCisgICAgZGVmIHRlc3Rfbm9fYXJndW1lbnQoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIHNlbGYuY29tbW9uX2F0dHJpYnV0ZXMgKyBzZWxmLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLnBhdGhtb2R1bGUsIGF0dHIpKCkKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWwoInt9Lnt9KCkgZGlkIG5vdCByYWlzZSBhIFR5cGVFcnJvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLnBhdGhtb2R1bGUuX19uYW1lX18sIGF0dHIpKQorCisgICAgZGVmIHRlc3RfY29tbW9ucHJlZml4KHNlbGYpOgorICAgICAgICBjb21tb25wcmVmaXggPSBzZWxmLnBhdGhtb2R1bGUuY29tbW9ucHJlZml4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoW10pLAorICAgICAgICAgICAgIiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbnNvbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKSwKKyAgICAgICAgICAgICIvaG9tZS9zd2VuIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9lZ2dzIl0pLAorICAgICAgICAgICAgIi9ob21lL3N3ZW4vIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pLAorICAgICAgICAgICAgIi9ob21lL3N3ZW4vc3BhbSIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiaG9tZTpzd2Vuc29uOnNwYW0iLCAiaG9tZTpzd2VuOnNwYW0iXSksCisgICAgICAgICAgICAiaG9tZTpzd2VuIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoWyI6aG9tZTpzd2VuOnNwYW0iLCAiOmhvbWU6c3dlbjplZ2dzIl0pLAorICAgICAgICAgICAgIjpob21lOnN3ZW46IgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoWyI6aG9tZTpzd2VuOnNwYW0iLCAiOmhvbWU6c3dlbjpzcGFtIl0pLAorICAgICAgICAgICAgIjpob21lOnN3ZW46c3BhbSIKKyAgICAgICAgKQorCisgICAgICAgIHRlc3RsaXN0ID0gWycnLCAnYWJjJywgJ1hiY2QnLCAnWGInLCAnWFknLCAnYWJjZCcsCisgICAgICAgICAgICAgICAgICAgICdhWGMnLCAnYWJkJywgJ2FiJywgJ2FYJywgJ2FiY1gnXQorICAgICAgICBmb3IgczEgaW4gdGVzdGxpc3Q6CisgICAgICAgICAgICBmb3IgczIgaW4gdGVzdGxpc3Q6CisgICAgICAgICAgICAgICAgcCA9IGNvbW1vbnByZWZpeChbczEsIHMyXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczEuc3RhcnRzd2l0aChwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczIuc3RhcnRzd2l0aChwKSkKKyAgICAgICAgICAgICAgICBpZiBzMSAhPSBzMjoKKyAgICAgICAgICAgICAgICAgICAgbiA9IGxlbihwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHMxW246bisxXSwgczJbbjpuKzFdKQorCisgICAgZGVmIHRlc3RfZ2V0c2l6ZShzZWxmKToKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhdGhtb2R1bGUuZ2V0c2l6ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgMykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X3RpbWUoc2VsZik6CisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJhYiIpCisgICAgICAgICAgICBmLndyaXRlKCJiYXIiKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKQorICAgICAgICAgICAgZCA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgImZvb2JhciIpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKAorICAgICAgICAgICAgICAgIHNlbGYucGF0aG1vZHVsZS5nZXRjdGltZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhtb2R1bGUuZ2V0bXRpbWUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgICkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2V4aXN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucGF0aG1vZHVsZSA9PSBnZW5lcmljcGF0aDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5sZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9pc2RpcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJmb28iKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKKyAgICAgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2FmZV9ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfaXNmaWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJmb28iKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICAgICAgb3Mucm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzYWZlX3JtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKworIyBGb2xsb3dpbmcgVGVzdENhc2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJ1biBmcm9tIHRlc3RfZ2VuZXJpY3BhdGguCisjIEl0IGlzIGluaGVyaXRlZCBieSBvdGhlciB0ZXN0IG1vZHVsZXMgKG1hY3BhdGgsIG50cGF0aCwgcG9zaXhwYXRoKS4KKworY2xhc3MgQ29tbW9uVGVzdChHZW5lcmljVGVzdCk6CisgICAgIyBUaGUgcGF0aCBtb2R1bGUgdG8gYmUgdGVzdGVkCisgICAgcGF0aG1vZHVsZSA9IE5vbmUKKyAgICBjb21tb25fYXR0cmlidXRlcyA9IEdlbmVyaWNUZXN0LmNvbW1vbl9hdHRyaWJ1dGVzICsgWworICAgICAgICAjIFByb3BlcnRpZXMKKyAgICAgICAgJ2N1cmRpcicsICdwYXJkaXInLCAnZXh0c2VwJywgJ3NlcCcsCisgICAgICAgICdwYXRoc2VwJywgJ2RlZnBhdGgnLCAnYWx0c2VwJywgJ2Rldm51bGwnLAorICAgICAgICAjIE1ldGhvZHMKKyAgICAgICAgJ25vcm1jYXNlJywgJ3NwbGl0ZHJpdmUnLCAnZXhwYW5kdmFycycsICdub3JtcGF0aCcsICdhYnNwYXRoJywKKyAgICAgICAgJ2pvaW4nLCAnc3BsaXQnLCAnc3BsaXRleHQnLCAnaXNhYnMnLCAnYmFzZW5hbWUnLCAnZGlybmFtZScsCisgICAgICAgICdsZXhpc3RzJywgJ2lzbGluaycsICdpc21vdW50JywgJ2V4cGFuZHVzZXInLCAnbm9ybXBhdGgnLCAncmVhbHBhdGgnLAorICAgIF0KKworICAgIGRlZiB0ZXN0X25vcm1jYXNlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgbm9ybWNhc2UoKSBpcyBpZGVtcG90ZW50CisgICAgICAgIHAgPSAiRm9PLy4vQmFSIgorICAgICAgICBwID0gc2VsZi5wYXRobW9kdWxlLm5vcm1jYXNlKHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgc2VsZi5wYXRobW9kdWxlLm5vcm1jYXNlKHApKQorCisgICAgZGVmIHRlc3Rfc3BsaXRkcml2ZShzZWxmKToKKyAgICAgICAgIyBzcGxpdGRyaXZlIGZvciBub24tTlQgcGF0aHMKKyAgICAgICAgc3BsaXRkcml2ZSA9IHNlbGYucGF0aG1vZHVsZS5zcGxpdGRyaXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkcml2ZSgiL2Zvby9iYXIiKSwgKCIiLCAiL2Zvby9iYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRyaXZlKCJmb286YmFyIiksICgiIiwgImZvbzpiYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRyaXZlKCI6Zm9vOmJhciIpLCAoIiIsICI6Zm9vOmJhciIpKQorCisgICAgZGVmIHRlc3RfZXhwYW5kdmFycyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5wYXRobW9kdWxlLl9fbmFtZV9fID09ICdtYWNwYXRoJzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ21hY3BhdGguZXhwYW5kdmFycyBpcyBhIHN0dWInKQorICAgICAgICBleHBhbmR2YXJzID0gc2VsZi5wYXRobW9kdWxlLmV4cGFuZHZhcnMKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudi5jbGVhcigpCisgICAgICAgICAgICBlbnZbImZvbyJdID0gImJhciIKKyAgICAgICAgICAgIGVudlsie2ZvbyJdID0gImJhejEiCisgICAgICAgICAgICBlbnZbIntmb299Il0gPSAiYmF6MiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiZm9vIiksICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkZm9vIGJhciIpLCAiYmFyIGJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiR7Zm9vfWJhciIpLCAiYmFyYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJFtmb29dYmFyIiksICIkW2Zvb11iYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkYmFyIGJhciIpLCAiJGJhciBiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkP2JhciIpLCAiJD9iYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIke2Zvb31iYXIiKSwgImJhcmJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRmb299YmFyIiksICJiYXJ9YmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJHtmb28iKSwgIiR7Zm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJHt7Zm9vfX0iKSwgImJhejF9IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJGZvbyRmb28iKSwgImJhcmJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRiYXIkYmFyIiksICIkYmFyJGJhciIpCisKKyAgICBkZWYgdGVzdF9hYnNwYXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28iLCBzZWxmLnBhdGhtb2R1bGUuYWJzcGF0aCgiZm9vIikpCisKKyAgICAgICAgIyBBYnNwYXRoIHJldHVybnMgYnl0ZXMgd2hlbiB0aGUgYXJnIGlzIGJ5dGVzCisgICAgICAgIGZvciBwYXRoIGluICgnJywgJ2ZvbycsICdmXHhmMlx4ZjInLCAnL2ZvbycsICdDOlxcJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5wYXRobW9kdWxlLmFic3BhdGgocGF0aCksIHN0cikKKworICAgIGRlZiB0ZXN0X3JlYWxwYXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28iLCBzZWxmLnBhdGhtb2R1bGUucmVhbHBhdGgoImZvbyIpKQorCisgICAgZGVmIHRlc3Rfbm9ybXBhdGhfaXNzdWU1ODI3KHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBub3JtcGF0aCBwcmVzZXJ2ZXMgdW5pY29kZQorICAgICAgICBmb3IgcGF0aCBpbiAodScnLCB1Jy4nLCB1Jy8nLCB1J1xcJywgdScvLy9mb28vLi8vYmFyLy8nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnBhdGhtb2R1bGUubm9ybXBhdGgocGF0aCksIHVuaWNvZGUpCisKKyAgICBkZWYgdGVzdF9hYnNwYXRoX2lzc3VlMzQyNihzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGFic3BhdGggcmV0dXJucyB1bmljb2RlIHdoZW4gdGhlIGFyZyBpcyB1bmljb2RlCisgICAgICAgICMgd2l0aCBib3RoIEFTQ0lJIGFuZCBub24tQVNDSUkgY3dkcy4KKyAgICAgICAgYWJzcGF0aCA9IHNlbGYucGF0aG1vZHVsZS5hYnNwYXRoCisgICAgICAgIGZvciBwYXRoIGluICh1JycsIHUnZnV1JywgdSdmXHhmOVx4ZjknLCB1Jy9mdXUnLCB1J1U6XFwnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhYnNwYXRoKHBhdGgpLCB1bmljb2RlKQorCisgICAgICAgIHVuaWN3ZCA9IHUnXHhlN3dceGYwJworICAgICAgICB0cnk6CisgICAgICAgICAgICBmc2VuY29kaW5nID0gdGVzdF9zdXBwb3J0LlRFU1RGTl9FTkNPRElORyBvciAiYXNjaWkiCisgICAgICAgICAgICB1bmljd2QuZW5jb2RlKGZzZW5jb2RpbmcpCisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFVuaWNvZGVFbmNvZGVFcnJvcik6CisgICAgICAgICAgICAjIEZTIGVuY29kaW5nIGlzIHByb2JhYmx5IEFTQ0lJCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50ZW1wX2N3ZCh1bmljd2QpOgorICAgICAgICAgICAgICAgIGZvciBwYXRoIGluICh1JycsIHUnZnV1JywgdSdmXHhmOVx4ZjknLCB1Jy9mdXUnLCB1J1U6XFwnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFic3BhdGgocGF0aCksIHVuaWNvZGUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJywKKyAgICAgICAgIk1hYyBPUyBYIGRlbmllcyB0aGUgY3JlYXRpb24gb2YgYSBkaXJlY3Rvcnkgd2l0aCBhbiBpbnZhbGlkIHV0ZjggbmFtZSIpCisgICAgZGVmIHRlc3Rfbm9uYXNjaWlfYWJzcGF0aChzZWxmKToKKyAgICAgICAgIyBUZXN0IG5vbi1BU0NJSSwgbm9uLVVURjggYnl0ZXMgaW4gdGhlIHBhdGguCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRlbXBfY3dkKCdceGU3d1x4ZjAnKToKKyAgICAgICAgICAgIHNlbGYudGVzdF9hYnNwYXRoKCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChHZW5lcmljVGVzdCkKKworCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1OTNhMwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkKQEAgLTAsMCArMSwyODMgQEAKK2RvY3Rlc3RzID0gIiIiCisKK1Rlc3Qgc2ltcGxlIGxvb3Agd2l0aCBjb25kaXRpb25hbAorCisgICAgPj4+IHN1bShpKmkgZm9yIGkgaW4gcmFuZ2UoMTAwKSBpZiBpJjEgPT0gMSkKKyAgICAxNjY2NTAKKworVGVzdCBzaW1wbGUgbmVzdGluZworCisgICAgPj4+IGxpc3QoKGksaikgZm9yIGkgaW4gcmFuZ2UoMykgZm9yIGogaW4gcmFuZ2UoNCkgKQorICAgIFsoMCwgMCksICgwLCAxKSwgKDAsIDIpLCAoMCwgMyksICgxLCAwKSwgKDEsIDEpLCAoMSwgMiksICgxLCAzKSwgKDIsIDApLCAoMiwgMSksICgyLCAyKSwgKDIsIDMpXQorCitUZXN0IG5lc3Rpbmcgd2l0aCB0aGUgaW5uZXIgZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gdGhlIG91dGVyCisKKyAgICA+Pj4gbGlzdCgoaSxqKSBmb3IgaSBpbiByYW5nZSg0KSBmb3IgaiBpbiByYW5nZShpKSApCisgICAgWygxLCAwKSwgKDIsIDApLCAoMiwgMSksICgzLCAwKSwgKDMsIDEpLCAoMywgMildCisKK01ha2Ugc3VyZSB0aGUgaW5kdWN0aW9uIHZhcmlhYmxlIGlzIG5vdCBleHBvc2VkCisKKyAgICA+Pj4gaSA9IDIwCisgICAgPj4+IHN1bShpKmkgZm9yIGkgaW4gcmFuZ2UoMTAwKSkKKyAgICAzMjgzNTAKKyAgICA+Pj4gaQorICAgIDIwCisKK1Rlc3QgZmlyc3QgY2xhc3MKKworICAgID4+PiBnID0gKGkqaSBmb3IgaSBpbiByYW5nZSg0KSkKKyAgICA+Pj4gdHlwZShnKQorICAgIDx0eXBlICdnZW5lcmF0b3InPgorICAgID4+PiBsaXN0KGcpCisgICAgWzAsIDEsIDQsIDldCisKK1Rlc3QgZGlyZWN0IGNhbGxzIHRvIG5leHQoKQorCisgICAgPj4+IGcgPSAoaSppIGZvciBpIGluIHJhbmdlKDMpKQorICAgID4+PiBnLm5leHQoKQorICAgIDAKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICAxCisgICAgPj4+IGcubmV4dCgpCisgICAgNAorICAgID4+PiBnLm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxweXNoZWxsIzIxPiIsIGxpbmUgMSwgaW4gLXRvcGxldmVsLQorICAgICAgICBnLm5leHQoKQorICAgIFN0b3BJdGVyYXRpb24KKworRG9lcyBpdCBzdGF5IHN0b3BwZWQ/CisKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8cHlzaGVsbCMyMT4iLCBsaW5lIDEsIGluIC10b3BsZXZlbC0KKyAgICAgICAgZy5uZXh0KCkKKyAgICBTdG9wSXRlcmF0aW9uCisgICAgPj4+IGxpc3QoZykKKyAgICBbXQorCitUZXN0IHJ1bm5pbmcgZ2VuIHdoZW4gZGVmaW5pbmcgZnVuY3Rpb24gaXMgb3V0IG9mIHNjb3BlCisKKyAgICA+Pj4gZGVmIGYobik6CisgICAgLi4uICAgICByZXR1cm4gKGkqaSBmb3IgaSBpbiB4cmFuZ2UobikpCisgICAgPj4+IGxpc3QoZigxMCkpCisgICAgWzAsIDEsIDQsIDksIDE2LCAyNSwgMzYsIDQ5LCA2NCwgODFdCisKKyAgICA+Pj4gZGVmIGYobik6CisgICAgLi4uICAgICByZXR1cm4gKChpLGopIGZvciBpIGluIHhyYW5nZSgzKSBmb3IgaiBpbiB4cmFuZ2UobikpCisgICAgPj4+IGxpc3QoZig0KSkKKyAgICBbKDAsIDApLCAoMCwgMSksICgwLCAyKSwgKDAsIDMpLCAoMSwgMCksICgxLCAxKSwgKDEsIDIpLCAoMSwgMyksICgyLCAwKSwgKDIsIDEpLCAoMiwgMiksICgyLCAzKV0KKyAgICA+Pj4gZGVmIGYobik6CisgICAgLi4uICAgICByZXR1cm4gKChpLGopIGZvciBpIGluIHhyYW5nZSgzKSBmb3IgaiBpbiB4cmFuZ2UoNCkgaWYgaiBpbiB4cmFuZ2UobikpCisgICAgPj4+IGxpc3QoZig0KSkKKyAgICBbKDAsIDApLCAoMCwgMSksICgwLCAyKSwgKDAsIDMpLCAoMSwgMCksICgxLCAxKSwgKDEsIDIpLCAoMSwgMyksICgyLCAwKSwgKDIsIDEpLCAoMiwgMiksICgyLCAzKV0KKyAgICA+Pj4gbGlzdChmKDIpKQorICAgIFsoMCwgMCksICgwLCAxKSwgKDEsIDApLCAoMSwgMSksICgyLCAwKSwgKDIsIDEpXQorCitWZXJpZnkgdGhhdCBwYXJlbnRoZXNpcyBhcmUgcmVxdWlyZWQgaW4gYSBzdGF0ZW1lbnQKKworICAgID4+PiBkZWYgZihuKToKKyAgICAuLi4gICAgIHJldHVybiBpKmkgZm9yIGkgaW4geHJhbmdlKG4pCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIC4uLgorICAgIFN5bnRheEVycm9yOiBpbnZhbGlkIHN5bnRheAorCitWZXJpZnkgdGhhdCBwYXJlbnRoZXNpcyBhcmUgcmVxdWlyZWQgd2hlbiB1c2VkIGFzIGEga2V5d29yZCBhcmd1bWVudCB2YWx1ZQorCisgICAgPj4+IGRpY3QoYSA9IGkgZm9yIGkgaW4geHJhbmdlKDEwKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgLi4uCisgICAgU3ludGF4RXJyb3I6IGludmFsaWQgc3ludGF4CisKK1ZlcmlmeSB0aGF0IHBhcmVudGhlc2lzIGFyZSByZXF1aXJlZCB3aGVuIHVzZWQgYXMgYSBrZXl3b3JkIGFyZ3VtZW50IHZhbHVlCisKKyAgICA+Pj4gZGljdChhID0gKGkgZm9yIGkgaW4geHJhbmdlKDEwKSkpICNkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICB7J2EnOiA8Z2VuZXJhdG9yIG9iamVjdCA8Z2VuZXhwcj4gYXQgLi4uPn0KKworVmVyaWZ5IGVhcmx5IGJpbmRpbmcgZm9yIHRoZSBvdXRlcm1vc3QgZm9yLWV4cHJlc3Npb24KKworICAgID4+PiB4PTEwCisgICAgPj4+IGcgPSAoaSppIGZvciBpIGluIHJhbmdlKHgpKQorICAgID4+PiB4ID0gNQorICAgID4+PiBsaXN0KGcpCisgICAgWzAsIDEsIDQsIDksIDE2LCAyNSwgMzYsIDQ5LCA2NCwgODFdCisKK1ZlcmlmeSB0aGF0IHRoZSBvdXRlcm1vc3QgZm9yLWV4cHJlc3Npb24gbWFrZXMgYW4gaW1tZWRpYXRlIGNoZWNrCitmb3IgaXRlcmFiaWxpdHkKKworICAgID4+PiAoaSBmb3IgaSBpbiA2KQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxweXNoZWxsIzQ+IiwgbGluZSAxLCBpbiAtdG9wbGV2ZWwtCisgICAgICAgIChpIGZvciBpIGluIDYpCisgICAgVHlwZUVycm9yOiAnaW50JyBvYmplY3QgaXMgbm90IGl0ZXJhYmxlCisKK1ZlcmlmeSBsYXRlIGJpbmRpbmcgZm9yIHRoZSBvdXRlcm1vc3QgaWYtZXhwcmVzc2lvbgorCisgICAgPj4+IGluY2x1ZGUgPSAoMiw0LDYsOCkKKyAgICA+Pj4gZyA9IChpKmkgZm9yIGkgaW4gcmFuZ2UoMTApIGlmIGkgaW4gaW5jbHVkZSkKKyAgICA+Pj4gaW5jbHVkZSA9ICgxLDMsNSw3LDkpCisgICAgPj4+IGxpc3QoZykKKyAgICBbMSwgOSwgMjUsIDQ5LCA4MV0KKworVmVyaWZ5IGxhdGUgYmluZGluZyBmb3IgdGhlIGlubmVybW9zdCBmb3ItZXhwcmVzc2lvbgorCisgICAgPj4+IGcgPSAoKGksaikgZm9yIGkgaW4gcmFuZ2UoMykgZm9yIGogaW4gcmFuZ2UoeCkpCisgICAgPj4+IHggPSA0CisgICAgPj4+IGxpc3QoZykKKyAgICBbKDAsIDApLCAoMCwgMSksICgwLCAyKSwgKDAsIDMpLCAoMSwgMCksICgxLCAxKSwgKDEsIDIpLCAoMSwgMyksICgyLCAwKSwgKDIsIDEpLCAoMiwgMiksICgyLCAzKV0KKworVmVyaWZ5IHJlLXVzZSBvZiB0dXBsZXMgKGEgc2lkZSBiZW5lZml0IG9mIHVzaW5nIGdlbmV4cHMgb3ZlciBsaXN0Y29tcHMpCisKKyAgICA+Pj4gdHVwbGVpZHMgPSBtYXAoaWQsICgoaSxpKSBmb3IgaSBpbiB4cmFuZ2UoMTApKSkKKyAgICA+Pj4gaW50KG1heCh0dXBsZWlkcykgLSBtaW4odHVwbGVpZHMpKQorICAgIDAKKworVmVyaWZ5IHRoYXQgc3ludGF4IGVycm9yJ3MgYXJlIHJhaXNlZCBmb3IgZ2VuZXhwcyB1c2VkIGFzIGx2YWx1ZXMKKworICAgID4+PiAoeSBmb3IgeSBpbiAoMSwyKSkgPSAxMAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAuLi4KKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5leHBzLl9fdGVzdF9fLmRvY3Rlc3RzWzQwXT4iLCBsaW5lIDEKKyAgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGdlbmVyYXRvciBleHByZXNzaW9uCisKKyAgICA+Pj4gKHkgZm9yIHkgaW4gKDEsMikpICs9IDEwCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIC4uLgorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmV4cHMuX190ZXN0X18uZG9jdGVzdHNbNDFdPiIsIGxpbmUgMQorICAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZ2VuZXJhdG9yIGV4cHJlc3Npb24KKworCisjIyMjIyMjIyMjIyBUZXN0cyBib3Jyb3dlZCBmcm9tIG9yIGluc3BpcmVkIGJ5IHRlc3RfZ2VuZXJhdG9ycy5weSAjIyMjIyMjIyMjIyMKKworTWFrZSBhIGdlbmVyYXRvciB0aGF0IGFjdHMgbGlrZSByYW5nZSgpCisKKyAgICA+Pj4geXJhbmdlID0gbGFtYmRhIG46ICAoaSBmb3IgaSBpbiB4cmFuZ2UobikpCisgICAgPj4+IGxpc3QoeXJhbmdlKDEwKSkKKyAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKworR2VuZXJhdG9ycyBhbHdheXMgcmV0dXJuIHRvIHRoZSBtb3N0IHJlY2VudCBjYWxsZXI6CisKKyAgICA+Pj4gZGVmIGNyZWF0b3IoKToKKyAgICAuLi4gICAgIHIgPSB5cmFuZ2UoNSkKKyAgICAuLi4gICAgIHByaW50ICJjcmVhdG9yIiwgci5uZXh0KCkKKyAgICAuLi4gICAgIHJldHVybiByCisgICAgPj4+IGRlZiBjYWxsZXIoKToKKyAgICAuLi4gICAgIHIgPSBjcmVhdG9yKCkKKyAgICAuLi4gICAgIGZvciBpIGluIHI6CisgICAgLi4uICAgICAgICAgICAgIHByaW50ICJjYWxsZXIiLCBpCisgICAgPj4+IGNhbGxlcigpCisgICAgY3JlYXRvciAwCisgICAgY2FsbGVyIDEKKyAgICBjYWxsZXIgMgorICAgIGNhbGxlciAzCisgICAgY2FsbGVyIDQKKworR2VuZXJhdG9ycyBjYW4gY2FsbCBvdGhlciBnZW5lcmF0b3JzOgorCisgICAgPj4+IGRlZiB6cmFuZ2Uobik6CisgICAgLi4uICAgICBmb3IgaSBpbiB5cmFuZ2Uobik6CisgICAgLi4uICAgICAgICAgeWllbGQgaQorICAgID4+PiBsaXN0KHpyYW5nZSg1KSkKKyAgICBbMCwgMSwgMiwgMywgNF0KKworCitWZXJpZnkgdGhhdCBhIGdlbiBleHAgY2Fubm90IGJlIHJlc3VtZWQgd2hpbGUgaXQgaXMgYWN0aXZlbHkgcnVubmluZzoKKworICAgID4+PiBnID0gKG1lLm5leHQoKSBmb3IgaSBpbiB4cmFuZ2UoMTApKQorICAgID4+PiBtZSA9IGcKKyAgICA+Pj4gbWUubmV4dCgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHB5c2hlbGwjMzA+IiwgbGluZSAxLCBpbiAtdG9wbGV2ZWwtCisgICAgICAgIG1lLm5leHQoKQorICAgICAgRmlsZSAiPHB5c2hlbGwjMjg+IiwgbGluZSAxLCBpbiA8Z2VuZXJhdG9yIGV4cHJlc3Npb24+CisgICAgICAgIGcgPSAobWUubmV4dCgpIGZvciBpIGluIHhyYW5nZSgxMCkpCisgICAgVmFsdWVFcnJvcjogZ2VuZXJhdG9yIGFscmVhZHkgZXhlY3V0aW5nCisKK1ZlcmlmeSBleGNlcHRpb24gcHJvcGFnYXRpb24KKworICAgID4+PiBnID0gKDEwIC8vIGkgZm9yIGkgaW4gKDUsIDAsIDIpKQorICAgID4+PiBnLm5leHQoKQorICAgIDIKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8cHlzaGVsbCMzNz4iLCBsaW5lIDEsIGluIC10b3BsZXZlbC0KKyAgICAgICAgZy5uZXh0KCkKKyAgICAgIEZpbGUgIjxweXNoZWxsIzM1PiIsIGxpbmUgMSwgaW4gPGdlbmVyYXRvciBleHByZXNzaW9uPgorICAgICAgICBnID0gKDEwIC8vIGkgZm9yIGkgaW4gKDUsIDAsIDIpKQorICAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnRlZ2VyIGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvCisgICAgPj4+IGcubmV4dCgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHB5c2hlbGwjMzg+IiwgbGluZSAxLCBpbiAtdG9wbGV2ZWwtCisgICAgICAgIGcubmV4dCgpCisgICAgU3RvcEl0ZXJhdGlvbgorCitNYWtlIHN1cmUgdGhhdCBOb25lIGlzIGEgdmFsaWQgcmV0dXJuIHZhbHVlCisKKyAgICA+Pj4gbGlzdChOb25lIGZvciBpIGluIHhyYW5nZSgxMCkpCisgICAgW05vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmVdCisKK0NoZWNrIHRoYXQgZ2VuZXJhdG9yIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQKKworICAgID4+PiBnID0gKGkqaSBmb3IgaSBpbiByYW5nZSgzKSkKKyAgICA+Pj4gZXhwZWN0ZWQgPSBzZXQoWydnaV9mcmFtZScsICdnaV9ydW5uaW5nJywgJ25leHQnXSkKKyAgICA+Pj4gc2V0KGF0dHIgZm9yIGF0dHIgaW4gZGlyKGcpIGlmIG5vdCBhdHRyLnN0YXJ0c3dpdGgoJ19fJykpID49IGV4cGVjdGVkCisgICAgVHJ1ZQorCisgICAgPj4+IGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IEhBVkVfRE9DU1RSSU5HUworICAgID4+PiBwcmludChnLm5leHQuX19kb2NfXyBpZiBIQVZFX0RPQ1NUUklOR1MgZWxzZSAneC5uZXh0KCkgLT4gdGhlIG5leHQgdmFsdWUsIG9yIHJhaXNlIFN0b3BJdGVyYXRpb24nKQorICAgIHgubmV4dCgpIC0+IHRoZSBuZXh0IHZhbHVlLCBvciByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgPj4+IGltcG9ydCB0eXBlcworICAgID4+PiBpc2luc3RhbmNlKGcsIHR5cGVzLkdlbmVyYXRvclR5cGUpCisgICAgVHJ1ZQorCitDaGVjayB0aGUgX19pdGVyX18gc2xvdCBpcyBkZWZpbmVkIHRvIHJldHVybiBzZWxmCisKKyAgICA+Pj4gaXRlcihnKSBpcyBnCisgICAgVHJ1ZQorCitWZXJpZnkgdGhhdCB0aGUgcnVubmluZyBmbGFnIGlzIHNldCBwcm9wZXJseQorCisgICAgPj4+IGcgPSAobWUuZ2lfcnVubmluZyBmb3IgaSBpbiAoMCwxKSkKKyAgICA+Pj4gbWUgPSBnCisgICAgPj4+IG1lLmdpX3J1bm5pbmcKKyAgICAwCisgICAgPj4+IG1lLm5leHQoKQorICAgIDEKKyAgICA+Pj4gbWUuZ2lfcnVubmluZworICAgIDAKKworVmVyaWZ5IHRoYXQgZ2VuZXhwcyBhcmUgd2Vha2x5IHJlZmVyZW5jYWJsZQorCisgICAgPj4+IGltcG9ydCB3ZWFrcmVmCisgICAgPj4+IGcgPSAoaSppIGZvciBpIGluIHJhbmdlKDQpKQorICAgID4+PiB3ciA9IHdlYWtyZWYucmVmKGcpCisgICAgPj4+IHdyKCkgaXMgZworICAgIFRydWUKKyAgICA+Pj4gcCA9IHdlYWtyZWYucHJveHkoZykKKyAgICA+Pj4gbGlzdChwKQorICAgIFswLCAxLCA0LCA5XQorCisKKyIiIgorCisKK19fdGVzdF9fID0geydkb2N0ZXN0cycgOiBkb2N0ZXN0c30KKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGltcG9ydCBzeXMKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9nZW5leHBzCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZ2VuZXhwcywgdmVyYm9zZSkKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZ2VuZXhwcywgdmVyYm9zZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludCBjb3VudHMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2V0YXJncy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjNWFhMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MucHkKQEAgLTAsMCArMSwzMSBAQAorIiIiCitUZXN0IHRoZSBpbnRlcm5hbCBnZXRhcmdzLmMgaW1wbGVtZW50YXRpb24KKworIFB5QXJnX1BhcnNlVHVwbGUoKSBpcyBkZWZpbmVkIGhlcmUuCisKK1RoZSB0ZXN0IGhlcmUgaXMgbm90IGludGVuZGVkIHRvIHRlc3QgYWxsIG9mIHRoZSBtb2R1bGUsIGp1c3QgdGhlCitzaW5nbGUgY2FzZSB0aGF0IGZhaWxlZCBiZXR3ZWVuIDIuMSBhbmQgMi4yYTIuCisiIiIKKworIyBtYXJzaGFsLmxvYWRzKCkgdXNlcyBQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpsb2FkcyIpCisjIFRoZSBzIGNvZGUgd2lsbCBjYXVzZSBhIFVuaWNvZGUgY29udmVyc2lvbiB0byBvY2N1ci4gIFRoaXMgdGVzdAorIyB2ZXJpZnkgdGhhdCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCBwcm9wZXJseSBmcm9tIHRoZSBDIGNvZGUgYmFjayB0bworIyBQeXRob24uCisKK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIEdldEFyZ3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIElmIHRoZSBlbmNvZGluZyBzdWNjZWVkcyB1c2luZyB0aGUgY3VycmVudCBkZWZhdWx0IGVuY29kaW5nLAorICAgICMgdGhpcyB0ZXN0IHdpbGwgZmFpbCBiZWNhdXNlIGl0IGRvZXMgbm90IHRlc3QgdGhlIHJpZ2h0IHBhcnQgb2YgdGhlCisgICAgIyBQeUFyZ19QYXJzZVR1cGxlKCkgaW1wbGVtZW50YXRpb24uCisgICAgZGVmIHRlc3Rfd2l0aF9tYXJzaGFsKHNlbGYpOgorICAgICAgICBhcmcgPSB1bmljb2RlKHInXDIyMicsICd1bmljb2RlLWVzY2FwZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgbWFyc2hhbC5sb2FkcywgYXJnKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChHZXRBcmdzVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDYyOTZiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKQEAgLTAsMCArMSwzMzUgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2tleXdvcmRzCitpbXBvcnQgd2FybmluZ3MKKworIiIiCis+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvdW50ZXJwcm9wb3NhbC4gVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZgorPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KKz4KKz4gQ29kZSBDIHR5cGUgUmFuZ2UgY2hlY2sKKz4KKz4gYiB1bnNpZ25lZCBjaGFyIDAuLlVDSEFSX01BWAorPiBoIHNpZ25lZCBzaG9ydCBTSFJUX01JTi4uU0hSVF9NQVgKKz4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKKz4gSCB1bnNpZ25lZCBzaG9ydCBub25lICoqCis+IGsgKiB1bnNpZ25lZCBsb25nIG5vbmUKKz4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAorCisKKz4gaSBpbnQgSU5UX01JTi4uSU5UX01BWAorPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCisKKz4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCis+IEwgbG9uZyBsb25nIExMT05HX01JTi4uTExPTkdfTUFYCisKKz4gTm90ZXM6Cis+Cis+ICogTmV3IGZvcm1hdCBjb2Rlcy4KKz4KKz4gKiogQ2hhbmdlZCBmcm9tIHByZXZpb3VzICJyYW5nZS1hbmQtYS1oYWxmIiB0byAibm9uZSI7IHRoZQorPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgorCitQbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgordW5zaWduZWQgbG9uZyBhbmQgUHlJbnRfQXNMb25nTG9uZ01hc2soKSAtPiB1bnNpZ25lZAorbG9uZyBsb25nIChpZiB0aGF0IGV4aXN0cykuCisiIiIKKworTEFSR0UgPSAweDdGRkZGRkZGCitWRVJZX0xBUkdFID0gMHhGRjAwMDAxMjEyMTIxMjEyMTIxMjEyNDJMCisKK2Zyb20gX3Rlc3RjYXBpIGltcG9ydCBVQ0hBUl9NQVgsIFVTSFJUX01BWCwgVUlOVF9NQVgsIFVMT05HX01BWCwgSU5UX01BWCwgXAorICAgICBJTlRfTUlOLCBMT05HX01JTiwgTE9OR19NQVgsIFBZX1NTSVpFX1RfTUlOLCBQWV9TU0laRV9UX01BWCwgXAorICAgICBTSFJUX01JTiwgU0hSVF9NQVgKKworIyBmYWtlLCB0aGV5IGFyZSBub3QgZGVmaW5lZCBpbiBQeXRob24ncyBoZWFkZXIgZmlsZXMKK0xMT05HX01BWCA9IDIqKjYzLTEKK0xMT05HX01JTiA9IC0yKio2MworVUxMT05HX01BWCA9IDIqKjY0LTEKKworY2xhc3MgTG9uZzoKKyAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDk5TAorCitjbGFzcyBJbnQ6CisgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgIHJldHVybiA5OQorCitjbGFzcyBVbnNpZ25lZF9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYihzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfYgorICAgICAgICAjIGIgcmV0dXJucyAndW5zaWduZWQgY2hhcicsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nICgwIC4uLiBVQ0hBUl9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19iLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2IoTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19iKEludCgpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2IsIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfYigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVQ0hBUl9NQVgsIGdldGFyZ3NfYihVQ0hBUl9NQVgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2IsIFVDSEFSX01BWCArIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19iKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19iKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfYiwgVkVSWV9MQVJHRSkKKworICAgIGRlZiB0ZXN0X0Ioc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0IKKyAgICAgICAgIyBCIHJldHVybnMgJ3Vuc2lnbmVkIGNoYXInLCBubyByYW5nZSBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfQiwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19CKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfQihJbnQoKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVQ0hBUl9NQVgsIGdldGFyZ3NfQigtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoLTFMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoVUNIQVJfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoVUNIQVJfTUFYKzEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfQig0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfQig0MkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVDSEFSX01BWCAmIFZFUllfTEFSR0UsIGdldGFyZ3NfQihWRVJZX0xBUkdFKSkKKworICAgIGRlZiB0ZXN0X0goc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0gKKyAgICAgICAgIyBIIHJldHVybnMgJ3Vuc2lnbmVkIHNob3J0Jywgbm8gcmFuZ2UgY2hlY2tpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0gsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSChMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0goSW50KCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVVNIUlRfTUFYLCBnZXRhcmdzX0goLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVU0hSVF9NQVgsIGdldGFyZ3NfSChVU0hSVF9NQVgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSChVU0hSVF9NQVgrMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19IKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19IKDQyTCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWRVJZX0xBUkdFICYgVVNIUlRfTUFYLCBnZXRhcmdzX0goVkVSWV9MQVJHRSkpCisKKyAgICBkZWYgdGVzdF9JKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19JCisgICAgICAgICMgSSByZXR1cm5zICd1bnNpZ25lZCBpbnQnLCBubyByYW5nZSBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfSSwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19JKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSShJbnQoKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVSU5UX01BWCwgZ2V0YXJnc19JKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0koMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUlOVF9NQVgsIGdldGFyZ3NfSShVSU5UX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19JKFVJTlRfTUFYKzEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSSg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSSg0MkwpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVkVSWV9MQVJHRSAmIFVJTlRfTUFYLCBnZXRhcmdzX0koVkVSWV9MQVJHRSkpCisKKyAgICBkZWYgdGVzdF9rKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19rCisgICAgICAgICMgayByZXR1cm5zICd1bnNpZ25lZCBsb25nJywgbm8gcmFuZ2UgY2hlY2tpbmcKKyAgICAgICAgIyBpdCBkb2VzIG5vdCBhY2NlcHQgZmxvYXQsIG9yIGluc3RhbmNlcyB3aXRoIF9faW50X18KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2ssIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19rLCBMb25nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19rLCBJbnQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVMT05HX01BWCwgZ2V0YXJnc19rKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2soMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUxPTkdfTUFYLCBnZXRhcmdzX2soVUxPTkdfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2soVUxPTkdfTUFYKzEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfayg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfayg0MkwpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVkVSWV9MQVJHRSAmIFVMT05HX01BWCwgZ2V0YXJnc19rKFZFUllfTEFSR0UpKQorCitjbGFzcyBTaWduZWRfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2goc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2gKKyAgICAgICAgIyBoIHJldHVybnMgJ3Nob3J0JywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKFNIUlRfTUlOIC4uLiBTSFJUX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2gsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfaChMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2goSW50KCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaCwgU0hSVF9NSU4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTSFJUX01JTiwgZ2V0YXJnc19oKFNIUlRfTUlOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTSFJUX01BWCwgZ2V0YXJnc19oKFNIUlRfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19oLCBTSFJUX01BWCsxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfaCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfaCg0MkwpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2gsIFZFUllfTEFSR0UpCisKKyAgICBkZWYgdGVzdF9pKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19pCisgICAgICAgICMgaSByZXR1cm5zICdpbnQnLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoSU5UX01JTiAuLi4gSU5UX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2ksIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfaShMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2koSW50KCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaSwgSU5UX01JTi0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKElOVF9NSU4sIGdldGFyZ3NfaShJTlRfTUlOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJTlRfTUFYLCBnZXRhcmdzX2koSU5UX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaSwgSU5UX01BWCsxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfaSg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfaSg0MkwpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2ksIFZFUllfTEFSR0UpCisKKyAgICBkZWYgdGVzdF9sKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19sCisgICAgICAgICMgbCByZXR1cm5zICdsb25nJywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKExPTkdfTUlOIC4uLiBMT05HX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2wsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfbChMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2woSW50KCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbCwgTE9OR19NSU4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMT05HX01JTiwgZ2V0YXJnc19sKExPTkdfTUlOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMT05HX01BWCwgZ2V0YXJnc19sKExPTkdfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19sLCBMT05HX01BWCsxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfbCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfbCg0MkwpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2wsIFZFUllfTEFSR0UpCisKKyAgICBkZWYgdGVzdF9uKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19uCisgICAgICAgICMgbiByZXR1cm5zICdQeV9zc2l6ZV90JywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcKKyAgICAgICAgIyAoUFlfU1NJWkVfVF9NSU4gLi4uIFBZX1NTSVpFX1RfTUFYKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfbiwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19uKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfbihJbnQoKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19uLCBQWV9TU0laRV9UX01JTi0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBZX1NTSVpFX1RfTUlOLCBnZXRhcmdzX24oUFlfU1NJWkVfVF9NSU4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBZX1NTSVpFX1RfTUFYLCBnZXRhcmdzX24oUFlfU1NJWkVfVF9NQVgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX24sIFBZX1NTSVpFX1RfTUFYKzEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19uKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19uKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbiwgVkVSWV9MQVJHRSkKKworCitjbGFzcyBMb25nTG9uZ19UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfTChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfTAorICAgICAgICAjIEwgcmV0dXJucyAnbG9uZyBsb25nJywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKExMT05HX01JTgorICAgICAgICAjIC4uLiBMTE9OR19NQVgpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKAorICAgICAgICAgICAgICAgICJpZ25vcmUiLAorICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIsCisgICAgICAgICAgICAgICAgbW9kdWxlPV9fbmFtZV9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBnZXRhcmdzX0woMy4xNCkpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKAorICAgICAgICAgICAgICAgICJlcnJvciIsCisgICAgICAgICAgICAgICAgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9Ii4qaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0IiwKKyAgICAgICAgICAgICAgICBtb2R1bGU9InVuaXR0ZXN0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZywgZ2V0YXJnc19MLCAzLjE0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19MLCAiSGVsbG8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0woTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19MKEludCgpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX0wsIExMT05HX01JTi0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExMT05HX01JTiwgZ2V0YXJnc19MKExMT05HX01JTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTExPTkdfTUFYLCBnZXRhcmdzX0woTExPTkdfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19MLCBMTE9OR19NQVgrMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0woNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0woNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19MLCBWRVJZX0xBUkdFKQorCisgICAgZGVmIHRlc3RfSyhzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfSworICAgICAgICAjIEsgcmV0dXJuICd1bnNpZ25lZCBsb25nIGxvbmcnLCBubyByYW5nZSBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfSywgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ssIExvbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ssIEludCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVMTE9OR19NQVgsIGdldGFyZ3NfSyhVTExPTkdfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0soMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19LKFVMTE9OR19NQVgrMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19LKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19LKDQyTCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWRVJZX0xBUkdFICYgVUxMT05HX01BWCwgZ2V0YXJnc19LKFZFUllfTEFSR0UpKQorCisKK2NsYXNzIFR1cGxlX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfdHVwbGUKKworICAgICAgICByZXQgPSBnZXRhcmdzX3R1cGxlKDEsICgyLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsICgxLDIsMykpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgaW52YWxpZCB0dXBsZSBhcmd1bWVudHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5CisgICAgICAgIGNsYXNzIHNlcToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfdHVwbGUsIDEsIHNlcSgpKQorCitjbGFzcyBLZXl3b3Jkc19UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcG9zaXRpb25hbF9hcmdzKHNlbGYpOgorICAgICAgICAjIHVzaW5nIGFsbCBwb3NpdGlvbmFsIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGdldGFyZ3Nfa2V5d29yZHMoKDEsMiksIDMsICg0LCg1LDYpKSwgKDcsOCw5KSwgMTApLAorICAgICAgICAgICAgKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKQorICAgICAgICAgICAgKQorICAgIGRlZiB0ZXN0X21peGVkX2FyZ3Moc2VsZik6CisgICAgICAgICMgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKCgxLDIpLCAzLCAoNCwoNSw2KSksIGFyZzQ9KDcsOCw5KSwgYXJnNT0xMCksCisgICAgICAgICAgICAoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApCisgICAgICAgICAgICApCisgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmdzKHNlbGYpOgorICAgICAgICAjIGFsbCBrZXl3b3JkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcyhhcmcxPSgxLDIpLCBhcmcyPTMsIGFyZzM9KDQsKDUsNikpLCBhcmc0PSg3LDgsOSksIGFyZzU9MTApLAorICAgICAgICAgICAgKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKQorICAgICAgICAgICAgKQorICAgIGRlZiB0ZXN0X29wdGlvbmFsX2FyZ3Moc2VsZik6CisgICAgICAgICMgbWlzc2luZyBvcHRpb25hbCBrZXl3b3JkIGFyZ3MsIHNraXBwaW5nIHR1cGxlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcyhhcmcxPSgxLDIpLCBhcmcyPTMsIGFyZzU9MTApLAorICAgICAgICAgICAgKDEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEwKQorICAgICAgICAgICAgKQorICAgIGRlZiB0ZXN0X3JlcXVpcmVkX2FyZ3Moc2VsZik6CisgICAgICAgICMgcmVxdWlyZWQgYXJnIG1pc3NpbmcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcyhhcmcxPSgxLDIpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAiUmVxdWlyZWQgYXJndW1lbnQgJ2FyZzInIChwb3MgMikgbm90IGZvdW5kIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnVHlwZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkJykKKyAgICBkZWYgdGVzdF90b29fbWFueV9hcmdzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKCgxLDIpLDMsKDQsKDUsNikpLCg3LDgsOSksMTAsMTExKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAiZnVuY3Rpb24gdGFrZXMgYXQgbW9zdCA1IGFyZ3VtZW50cyAoNiBnaXZlbikiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdUeXBlRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQnKQorICAgIGRlZiB0ZXN0X2ludmFsaWRfa2V5d29yZChzZWxmKToKKyAgICAgICAgIyBleHRyYW5lb3VzIGtleXdvcmQgYXJnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdldGFyZ3Nfa2V5d29yZHMoKDEsMiksMyxhcmc1PTEwLGFyZzY2Nj02NjYpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICInYXJnNjY2JyBpcyBhbiBpbnZhbGlkIGtleXdvcmQgYXJndW1lbnQgZm9yIHRoaXMgZnVuY3Rpb24iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdUeXBlRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQnKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbU2lnbmVkX1Rlc3RDYXNlLCBVbnNpZ25lZF9UZXN0Q2FzZSwgVHVwbGVfVGVzdENhc2UsIEtleXdvcmRzX1Rlc3RDYXNlXQorICAgIHRyeToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfTCwgZ2V0YXJnc19LCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzICMgUFlfTE9OR19MT05HIG5vdCBhdmFpbGFibGUKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cy5hcHBlbmQoTG9uZ0xvbmdfVGVzdENhc2UpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dldG9wdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dldG9wdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTI0Mjg3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2V0b3B0LnB5CkBAIC0wLDAgKzEsMTg3IEBACisjIHRlc3RfZ2V0b3B0LnB5CisjIERhdmlkIEdvb2RnZXIgPGRnb29kZ2VyQGJpZ2Zvb3QuY29tPiAyMDAwLTA4LTE5CisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl9kb2N0ZXN0LCBydW5fdW5pdHRlc3QsIEVudmlyb25tZW50VmFyR3VhcmQKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgZ2V0b3B0CisKK3NlbnRpbmVsID0gb2JqZWN0KCkKKworY2xhc3MgR2V0b3B0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5lbnYgPSBFbnZpcm9ubWVudFZhckd1YXJkKCkKKyAgICAgICAgaWYgIlBPU0lYTFlfQ09SUkVDVCIgaW4gc2VsZi5lbnY6CisgICAgICAgICAgICBkZWwgc2VsZi5lbnZbIlBPU0lYTFlfQ09SUkVDVCJdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZW52Ll9fZXhpdF9fKCkKKyAgICAgICAgZGVsIHNlbGYuZW52CisKKyAgICBkZWYgYXNzZXJ0RXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZ2V0b3B0LkdldG9wdEVycm9yLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgdGVzdF9zaG9ydF9oYXNfYXJnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0b3B0LnNob3J0X2hhc19hcmcoJ2EnLCAnYTonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnZXRvcHQuc2hvcnRfaGFzX2FyZygnYScsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXJyb3IoZ2V0b3B0LnNob3J0X2hhc19hcmcsICdhJywgJ2InKQorCisgICAgZGVmIHRlc3RfbG9uZ19oYXNfYXJncyhzZWxmKToKKyAgICAgICAgaGFzX2FyZywgb3B0aW9uID0gZ2V0b3B0LmxvbmdfaGFzX2FyZ3MoJ2FiYycsIFsnYWJjPSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzX2FyZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24sICdhYmMnKQorCisgICAgICAgIGhhc19hcmcsIG9wdGlvbiA9IGdldG9wdC5sb25nX2hhc19hcmdzKCdhYmMnLCBbJ2FiYyddKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc19hcmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9uLCAnYWJjJykKKworICAgICAgICBoYXNfYXJnLCBvcHRpb24gPSBnZXRvcHQubG9uZ19oYXNfYXJncygnYWJjJywgWydhYmNkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzX2FyZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24sICdhYmNkJykKKworICAgICAgICBzZWxmLmFzc2VydEVycm9yKGdldG9wdC5sb25nX2hhc19hcmdzLCAnYWJjJywgWydkZWYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihnZXRvcHQubG9uZ19oYXNfYXJncywgJ2FiYycsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVycm9yKGdldG9wdC5sb25nX2hhc19hcmdzLCAnYWJjJywgWydhYmNkJywnYWJjZGUnXSkKKworICAgIGRlZiB0ZXN0X2RvX3Nob3J0cyhzZWxmKToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5kb19zaG9ydHMoW10sICdhJywgJ2EnLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5kb19zaG9ydHMoW10sICdhMScsICdhOicsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy1hJywgJzEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisKKyAgICAgICAgI29wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fc2hvcnRzKFtdLCAnYT0xJywgJ2E6JywgW10pCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy1hJywgJzEnKV0pCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtdKQorCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fc2hvcnRzKFtdLCAnYScsICdhOicsIFsnMSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy1hJywgJzEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5kb19zaG9ydHMoW10sICdhJywgJ2E6JywgWycxJywgJzInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcxJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnMiddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXJyb3IoZ2V0b3B0LmRvX3Nob3J0cywgW10sICdhMScsICdhJywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXJyb3IoZ2V0b3B0LmRvX3Nob3J0cywgW10sICdhJywgJ2E6JywgW10pCisKKyAgICBkZWYgdGVzdF9kb19sb25ncyhzZWxmKToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5kb19sb25ncyhbXSwgJ2FiYycsIFsnYWJjJ10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy0tYWJjJywgJycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbXSkKKworICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmRvX2xvbmdzKFtdLCAnYWJjPTEnLCBbJ2FiYz0nXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLS1hYmMnLCAnMScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbXSkKKworICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmRvX2xvbmdzKFtdLCAnYWJjPTEnLCBbJ2FiY2Q9J10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy0tYWJjZCcsICcxJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtdKQorCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fbG9uZ3MoW10sICdhYmMnLCBbJ2FiJywgJ2FiYycsICdhYmNkJ10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy0tYWJjJywgJycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbXSkKKworICAgICAgICAjIE11Y2ggbGlrZSB0aGUgcHJlY2VkaW5nLCBleGNlcHQgd2l0aCBhIG5vbi1hbHBoYSBjaGFyYWN0ZXIgKCItIikgaW4KKyAgICAgICAgIyBvcHRpb24gbmFtZSB0aGF0IHByZWNlZGVzICI9IjsgZmFpbGVkIGluCisgICAgICAgICMgaHR0cDovL3B5dGhvbi5vcmcvc2YvMTI2ODYzCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fbG9uZ3MoW10sICdmb289NDInLCBbJ2Zvby1iYXInLCAnZm9vPScsXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLS1mb28nLCAnNDInKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihnZXRvcHQuZG9fbG9uZ3MsIFtdLCAnYWJjPTEnLCBbJ2FiYyddLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihnZXRvcHQuZG9fbG9uZ3MsIFtdLCAnYWJjJywgWydhYmM9J10sIFtdKQorCisgICAgZGVmIHRlc3RfZ2V0b3B0KHNlbGYpOgorICAgICAgICAjIG5vdGU6IHRoZSBlbXB0eSBzdHJpbmcgYmV0d2VlbiAnLWEnIGFuZCAnLS1iZXRhJyBpcyBzaWduaWZpY2FudDoKKyAgICAgICAgIyBpdCBzaW11bGF0ZXMgYW4gZW1wdHkgc3RyaW5nIG9wdGlvbiBhcmd1bWVudCAoJy1hICIiJykgb24gdGhlCisgICAgICAgICMgY29tbWFuZCBsaW5lLgorICAgICAgICBjbWRsaW5lID0gWyctYScsICcxJywgJy1iJywgJy0tYWxwaGE9MicsICctLWJldGEnLCAnLWEnLCAnMycsICctYScsCisgICAgICAgICAgICAgICAgICAgJycsICctLWJldGEnLCAnYXJnMScsICdhcmcyJ10KKworICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChjbWRsaW5lLCAnYTpiJywgWydhbHBoYT0nLCAnYmV0YSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy1hJywgJzEnKSwgKCctYicsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCctLWFscGhhJywgJzInKSwgKCctLWJldGEnLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLWEnLCAnMycpLCAoJy1hJywgJycpLCAoJy0tYmV0YScsICcnKV0pCisgICAgICAgICMgTm90ZSBhbWJpZ3VpdHkgb2YgKCctYicsICcnKSBhbmQgKCctYScsICcnKSBhYm92ZS4gVGhpcyBtdXN0IGJlCisgICAgICAgICMgYWNjb3VudGVkIGZvciBpbiB0aGUgY29kZSB0aGF0IGNhbGxzIGdldG9wdCgpLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnYXJnMScsICdhcmcyJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihnZXRvcHQuZ2V0b3B0LCBjbWRsaW5lLCAnYTpiJywgWydhbHBoYScsICdiZXRhJ10pCisKKyAgICBkZWYgdGVzdF9nbnVfZ2V0b3B0KHNlbGYpOgorICAgICAgICAjIFRlc3QgaGFuZGxpbmcgb2YgR05VIHN0eWxlIHNjYW5uaW5nIG1vZGUuCisgICAgICAgIGNtZGxpbmUgPSBbJy1hJywgJ2FyZzEnLCAnLWInLCAnMScsICctLWFscGhhJywgJy0tYmV0YT0yJ10KKworICAgICAgICAjIEdOVSBzdHlsZQorICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdudV9nZXRvcHQoY21kbGluZSwgJ2FiOicsIFsnYWxwaGEnLCAnYmV0YT0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJ2FyZzEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcnKSwgKCctYicsICcxJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLS1hbHBoYScsICcnKSwgKCctLWJldGEnLCAnMicpXSkKKworICAgICAgICAjIHJlY29nbml6ZSAiLSIgYXMgYW4gYXJndW1lbnQKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KFsnLWEnLCAnLScsICctYicsICctJ10sICdhYjonLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJy0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcnKSwgKCctYicsICctJyldKQorCisgICAgICAgICMgUG9zaXggc3R5bGUgdmlhICsKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KGNtZGxpbmUsICcrYWI6JywgWydhbHBoYScsICdiZXRhPSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy1hJywgJycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJ2FyZzEnLCAnLWInLCAnMScsICctLWFscGhhJywgJy0tYmV0YT0yJ10pCisKKyAgICAgICAgIyBQb3NpeCBzdHlsZSB2aWEgUE9TSVhMWV9DT1JSRUNUCisgICAgICAgIHNlbGYuZW52WyJQT1NJWExZX0NPUlJFQ1QiXSA9ICIxIgorICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdudV9nZXRvcHQoY21kbGluZSwgJ2FiOicsIFsnYWxwaGEnLCAnYmV0YT0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWydhcmcxJywgJy1iJywgJzEnLCAnLS1hbHBoYScsICctLWJldGE9MiddKQorCisgICAgZGVmIHRlc3RfbGlicmVmX2V4YW1wbGVzKHNlbGYpOgorICAgICAgICBzID0gIiIiCisgICAgICAgIEV4YW1wbGVzIGZyb20gdGhlIExpYnJhcnkgUmVmZXJlbmNlOiAgRG9jL2xpYi9saWJnZXRvcHQudGV4CisKKyAgICAgICAgQW4gZXhhbXBsZSB1c2luZyBvbmx5IFVuaXggc3R5bGUgb3B0aW9uczoKKworCisgICAgICAgID4+PiBpbXBvcnQgZ2V0b3B0CisgICAgICAgID4+PiBhcmdzID0gJy1hIC1iIC1jZm9vIC1kIGJhciBhMSBhMicuc3BsaXQoKQorICAgICAgICA+Pj4gYXJncworICAgICAgICBbJy1hJywgJy1iJywgJy1jZm9vJywgJy1kJywgJ2JhcicsICdhMScsICdhMiddCisgICAgICAgID4+PiBvcHRsaXN0LCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzLCAnYWJjOmQ6JykKKyAgICAgICAgPj4+IG9wdGxpc3QKKyAgICAgICAgWygnLWEnLCAnJyksICgnLWInLCAnJyksICgnLWMnLCAnZm9vJyksICgnLWQnLCAnYmFyJyldCisgICAgICAgID4+PiBhcmdzCisgICAgICAgIFsnYTEnLCAnYTInXQorCisgICAgICAgIFVzaW5nIGxvbmcgb3B0aW9uIG5hbWVzIGlzIGVxdWFsbHkgZWFzeToKKworCisgICAgICAgID4+PiBzID0gJy0tY29uZGl0aW9uPWZvbyAtLXRlc3RpbmcgLS1vdXRwdXQtZmlsZSBhYmMuZGVmIC14IGExIGEyJworICAgICAgICA+Pj4gYXJncyA9IHMuc3BsaXQoKQorICAgICAgICA+Pj4gYXJncworICAgICAgICBbJy0tY29uZGl0aW9uPWZvbycsICctLXRlc3RpbmcnLCAnLS1vdXRwdXQtZmlsZScsICdhYmMuZGVmJywgJy14JywgJ2ExJywgJ2EyJ10KKyAgICAgICAgPj4+IG9wdGxpc3QsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICd4JywgWworICAgICAgICAuLi4gICAgICdjb25kaXRpb249JywgJ291dHB1dC1maWxlPScsICd0ZXN0aW5nJ10pCisgICAgICAgID4+PiBvcHRsaXN0CisgICAgICAgIFsoJy0tY29uZGl0aW9uJywgJ2ZvbycpLCAoJy0tdGVzdGluZycsICcnKSwgKCctLW91dHB1dC1maWxlJywgJ2FiYy5kZWYnKSwgKCcteCcsICcnKV0KKyAgICAgICAgPj4+IGFyZ3MKKyAgICAgICAgWydhMScsICdhMiddCisgICAgICAgICIiIgorCisgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgibGlicmVmdGVzdCIsIHMpCisgICAgICAgIHJ1bl9kb2N0ZXN0KG0sIHZlcmJvc2UpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTQ2Mjkoc2VsZik6CisgICAgICAgIGxvbmdvcHRzLCBzaG9ydG9wdHMgPSBnZXRvcHQuZ2V0b3B0KFsnLS1oZWxwPSddLCAnJywgWydoZWxwPSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmdvcHRzLCBbKCctLWhlbHAnLCAnJyldKQorICAgICAgICBsb25nb3B0cywgc2hvcnRvcHRzID0gZ2V0b3B0LmdldG9wdChbJy0taGVscD14J10sICcnLCBbJ2hlbHA9J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZ29wdHMsIFsoJy0taGVscCcsICd4JyldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhnZXRvcHQuR2V0b3B0RXJyb3IsIGdldG9wdC5nZXRvcHQsIFsnLS1oZWxwPSddLCAnJywgWydoZWxwJ10pCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoR2V0b3B0VGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dldHRleHQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9nZXR0ZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMzY5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9nZXR0ZXh0LnB5CkBAIC0wLDAgKzEsNDY3IEBACitpbXBvcnQgb3MKK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBnZXR0ZXh0CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCisjIFRPRE86CisjICAtIEFkZCBuZXcgdGVzdHMsIGZvciBleGFtcGxlIGZvciAiZGdldHRleHQiCisjICAtIFJlbW92ZSBkdW1teSB0ZXN0cywgZm9yIGV4YW1wbGUgdGVzdGluZyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVzCisjICAgIGhhcyBubyBzZW5zZSwgaXQgd291bGQgaGF2ZSBpZiB3ZSB3ZXJlIHRlc3RpbmcgYSBwYXJzZXIgKGkuZS4gcHlnZXR0ZXh0KQorIyAgLSBUZXN0cyBzaG91bGQgaGF2ZSBvbmx5IG9uZSBhc3NlcnQuCisKK0dOVV9NT19EQVRBID0gJycnXAorM2hJRWxRQUFBQUFHQUFBQUhBQUFBRXdBQUFBTEFBQUFmQUFBQUFBQUFBQ29BQUFBRlFBQUFLa0FBQUFqQUFBQXZ3QUFBS0VBQUFEagorQUFBQUJ3QUFBSVVCQUFBTEFBQUFqUUVBQUVVQkFBQ1pBUUFBRmdBQUFOOENBQUFlQUFBQTlnSUFBS0VBQUFBVkF3QUFCUUFBQUxjRAorQUFBSkFBQUF2UU1BQUFFQUFBQURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFCUUFBQUFZQUFBQUNBQUFBQUZKaAorZVcxdmJtUWdUSFY0ZFhKNUlGbGhZMmd0ZEFCVWFHVnlaU0JwY3lBbGN5Qm1hV3hsQUZSb1pYSmxJR0Z5WlNBbGN5Qm1hV3hsY3dCVQorYUdseklHMXZaSFZzWlNCd2NtOTJhV1JsY3lCcGJuUmxjbTVoZEdsdmJtRnNhWHBoZEdsdmJpQmhibVFnYkc5allXeHBlbUYwYVc5dQorQ25OMWNIQnZjblFnWm05eUlIbHZkWElnVUhsMGFHOXVJSEJ5YjJkeVlXMXpJR0o1SUhCeWIzWnBaR2x1WnlCaGJpQnBiblJsY21aaAorWTJVZ2RHOGdkR2hsSUVkT1ZRcG5aWFIwWlhoMElHMWxjM05oWjJVZ1kyRjBZV3h2WnlCc2FXSnlZWEo1TGdCdGRXeHNkWE5yQUc1MQorWkdkbElHNTFaR2RsQUZCeWIycGxZM1F0U1dRdFZtVnljMmx2YmpvZ01pNHdDbEJQTFZKbGRtbHphVzl1TFVSaGRHVTZJREl3TURBdAorTURndE1qa2dNVEk2TVRrdE1EUTZNREFLVEdGemRDMVVjbUZ1YzJ4aGRHOXlPaUJLTGlCRVlYWnBaQ0JKWXNPaHc3RmxlaUE4YWkxaworWVhacFpFQnViMjl6TG1aeVBncE1ZVzVuZFdGblpTMVVaV0Z0T2lCWVdDQThjSGwwYUc5dUxXUmxka0J3ZVhSb2IyNHViM0puUGdwTgorU1UxRkxWWmxjbk5wYjI0NklERXVNQXBEYjI1MFpXNTBMVlI1Y0dVNklIUmxlSFF2Y0d4aGFXNDdJR05vWVhKelpYUTlhWE52TFRnNAorTlRrdE1RcERiMjUwWlc1MExWUnlZVzV6Wm1WeUxVVnVZMjlrYVc1bk9pQnViMjVsQ2tkbGJtVnlZWFJsWkMxQ2VUb2djSGxuWlhSMAorWlhoMExuQjVJREV1TVFwUWJIVnlZV3d0Um05eWJYTTZJRzV3YkhWeVlXeHpQVEk3SUhCc2RYSmhiRDF1SVQweE93b0FWR2h5YjJGMAorZDI5aVlteGxjaUJOWVc1bmNtOTJaUUJJWVhrZ0pYTWdabWxqYUdWeWJ3QklZWGtnSlhNZ1ptbGphR1Z5YjNNQVIzVjJaaUI2WW5GbworZVhJZ1kyVmlhWFp4Y21ZZ2RtRm5jbVZoYm1kMlltRnVlWFp0Ym1kMlltRWdibUZ4SUhsaWNHNTVkbTF1WjNaaVlRcG1hR05qWW1WbgorSUhOaVpTQnNZbWhsSUVOc1ozVmlZU0JqWldKMFpXNTZaaUJ2YkNCalpXSnBkbkYyWVhRZ2JtRWdkbUZuY21WemJuQnlJR2RpSUdkMQorY2lCVVFVZ0tkSEpuWjNKclp5QjZjbVptYm5SeUlIQnVaMjU1WW5RZ2VYWnZaVzVsYkM0QVltRmpiMjRBZDJsdWF5QjNhVzVyQUE9PQorJycnCisKK1VNT19EQVRBID0gJycnXAorM2hJRWxRQUFBQUFDQUFBQUhBQUFBQ3dBQUFBRkFBQUFQQUFBQUFBQUFBQlFBQUFBQkFBQUFGRUFBQUFQQVFBQVZnQUFBQVFBQUFCbQorQVFBQUFRQUFBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFZV0xEbmdCUWNtOXFaV04wTFVsa0xWWmxjbk5wYjI0NklESXVNQXBRVHkxUworWlhacGMybHZiaTFFWVhSbE9pQXlNREF6TFRBMExURXhJREV5T2pReUxUQTBNREFLVEdGemRDMVVjbUZ1YzJ4aGRHOXlPaUJDWVhKeQorZVNCQkxpQlhRWEp6WVhjZ1BHSmhjbko1UUhCNWRHaHZiaTV2Y21jK0NreGhibWQxWVdkbExWUmxZVzA2SUZoWUlEeHdlWFJvYjI0dAorWkdWMlFIQjVkR2h2Ymk1dmNtYytDazFKVFVVdFZtVnljMmx2YmpvZ01TNHdDa052Ym5SbGJuUXRWSGx3WlRvZ2RHVjRkQzl3YkdGcAorYmpzZ1kyaGhjbk5sZEQxMWRHWXRPQXBEYjI1MFpXNTBMVlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5PaUEzWW1sMENrZGxibVZ5WVhSbAorWkMxQ2VUb2diV0Z1ZFdGc2JIa0tBTUtrZVhvQQorJycnCisKK01NT19EQVRBID0gJycnXAorM2hJRWxRQUFBQUFCQUFBQUhBQUFBQ1FBQUFBREFBQUFMQUFBQUFBQUFBQTRBQUFBZUFFQUFEa0FBQUFCQUFBQUFBQUFBQUFBQUFBQQorVUhKdmFtVmpkQzFKWkMxV1pYSnphVzl1T2lCT2J5QlFjbTlxWldOMElEQXVNQXBRVDFRdFEzSmxZWFJwYjI0dFJHRjBaVG9nVjJWaworSUVSbFl5QXhNU0F3TnpvME5Eb3hOU0F5TURBeUNsQlBMVkpsZG1semFXOXVMVVJoZEdVNklESXdNREl0TURndE1UUWdNREU2TVRnNgorTlRnck1EQTZNREFLVEdGemRDMVVjbUZ1YzJ4aGRHOXlPaUJLYjJodUlFUnZaU0E4YW1SdlpVQmxlR0Z0Y0d4bExtTnZiVDRLU21GdQorWlNCR2IyOWlZWElnUEdwbWIyOWlZWEpBWlhoaGJYQnNaUzVqYjIwK0NreGhibWQxWVdkbExWUmxZVzA2SUhoNElEeDRlRUJsZUdGdAorY0d4bExtTnZiVDRLVFVsTlJTMVdaWEp6YVc5dU9pQXhMakFLUTI5dWRHVnVkQzFVZVhCbE9pQjBaWGgwTDNCc1lXbHVPeUJqYUdGeQorYzJWMFBXbHpieTA0T0RVNUxURTFDa052Ym5SbGJuUXRWSEpoYm5ObVpYSXRSVzVqYjJScGJtYzZJSEYxYjNSbFpDMXdjbWx1ZEdGaQorYkdVS1IyVnVaWEpoZEdWa0xVSjVPaUJ3ZVdkbGRIUmxlSFF1Y0hrZ01TNHpDZ0E9CisnJycKKworTE9DQUxFRElSID0gb3MucGF0aC5qb2luKCd4eCcsICdMQ19NRVNTQUdFUycpCitNT0ZJTEUgPSBvcy5wYXRoLmpvaW4oTE9DQUxFRElSLCAnZ2V0dGV4dC5tbycpCitVTU9GSUxFID0gb3MucGF0aC5qb2luKExPQ0FMRURJUiwgJ3VnZXR0ZXh0Lm1vJykKK01NT0ZJTEUgPSBvcy5wYXRoLmpvaW4oTE9DQUxFRElSLCAnbWV0YWRhdGEubW8nKQorCisKK2NsYXNzIEdldHRleHRCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihMT0NBTEVESVIpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoTE9DQUxFRElSKQorICAgICAgICB3aXRoIG9wZW4oTU9GSUxFLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGJhc2U2NC5kZWNvZGVzdHJpbmcoR05VX01PX0RBVEEpKQorICAgICAgICB3aXRoIG9wZW4oVU1PRklMRSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShiYXNlNjQuZGVjb2Rlc3RyaW5nKFVNT19EQVRBKSkKKyAgICAgICAgd2l0aCBvcGVuKE1NT0ZJTEUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoYmFzZTY0LmRlY29kZXN0cmluZyhNTU9fREFUQSkpCisKKyAgICAgICAgc2VsZi5lbnYgPSB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpCisgICAgICAgIHNlbGYuZW52WydMQU5HVUFHRSddID0gJ3h4JworICAgICAgICBnZXR0ZXh0Ll90cmFuc2xhdGlvbnMuY2xlYXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmVudi5fX2V4aXRfXygpCisgICAgICAgIGRlbCBzZWxmLmVudgorICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguc3BsaXQoTE9DQUxFRElSKVswXSkKKworCitjbGFzcyBHZXR0ZXh0VGVzdENhc2UxKEdldHRleHRCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBHZXR0ZXh0QmFzZVRlc3Quc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5sb2NhbGVkaXIgPSBvcy5jdXJkaXIKKyAgICAgICAgc2VsZi5tb2ZpbGUgPSBNT0ZJTEUKKyAgICAgICAgZ2V0dGV4dC5pbnN0YWxsKCdnZXR0ZXh0Jywgc2VsZi5sb2NhbGVkaXIpCisKKyAgICBkZWYgdGVzdF9zb21lX3RyYW5zbGF0aW9ucyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgdGVzdCBzb21lIHRyYW5zbGF0aW9ucworICAgICAgICBlcShfKCdhbGJhdHJvc3MnKSwgJ2FsYmF0cm9zcycpCisgICAgICAgIGVxKF8odSdtdWxsdXNrJyksICdiYWNvbicpCisgICAgICAgIGVxKF8ocidSYXltb25kIEx1eHVyeSBZYWNoLXQnKSwgJ1Rocm9hdHdvYmJsZXIgTWFuZ3JvdmUnKQorICAgICAgICBlcShfKHVyJ251ZGdlIG51ZGdlJyksICd3aW5rIHdpbmsnKQorCisgICAgZGVmIHRlc3RfZG91YmxlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgZG91YmxlIHF1b3RlcworICAgICAgICBlcShfKCJhbGJhdHJvc3MiKSwgJ2FsYmF0cm9zcycpCisgICAgICAgIGVxKF8odSJtdWxsdXNrIiksICdiYWNvbicpCisgICAgICAgIGVxKF8ociJSYXltb25kIEx1eHVyeSBZYWNoLXQiKSwgJ1Rocm9hdHdvYmJsZXIgTWFuZ3JvdmUnKQorICAgICAgICBlcShfKHVyIm51ZGdlIG51ZGdlIiksICd3aW5rIHdpbmsnKQorCisgICAgZGVmIHRlc3RfdHJpcGxlX3NpbmdsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIHRyaXBsZSBzaW5nbGUgcXVvdGVzCisgICAgICAgIGVxKF8oJycnYWxiYXRyb3NzJycnKSwgJ2FsYmF0cm9zcycpCisgICAgICAgIGVxKF8odScnJ211bGx1c2snJycpLCAnYmFjb24nKQorICAgICAgICBlcShfKHInJydSYXltb25kIEx1eHVyeSBZYWNoLXQnJycpLCAnVGhyb2F0d29iYmxlciBNYW5ncm92ZScpCisgICAgICAgIGVxKF8odXInJydudWRnZSBudWRnZScnJyksICd3aW5rIHdpbmsnKQorCisgICAgZGVmIHRlc3RfdHJpcGxlX2RvdWJsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIHRyaXBsZSBkb3VibGUgcXVvdGVzCisgICAgICAgIGVxKF8oIiIiYWxiYXRyb3NzIiIiKSwgJ2FsYmF0cm9zcycpCisgICAgICAgIGVxKF8odSIiIm11bGx1c2siIiIpLCAnYmFjb24nKQorICAgICAgICBlcShfKHIiIiJSYXltb25kIEx1eHVyeSBZYWNoLXQiIiIpLCAnVGhyb2F0d29iYmxlciBNYW5ncm92ZScpCisgICAgICAgIGVxKF8odXIiIiJudWRnZSBudWRnZSIiIiksICd3aW5rIHdpbmsnKQorCisgICAgZGVmIHRlc3RfbXVsdGlsaW5lX3N0cmluZ3Moc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIG11bHRpbGluZSBzdHJpbmdzCisgICAgICAgIGVxKF8oJycnVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIGxvY2FsaXphdGlvbgorc3VwcG9ydCBmb3IgeW91ciBQeXRob24gcHJvZ3JhbXMgYnkgcHJvdmlkaW5nIGFuIGludGVyZmFjZSB0byB0aGUgR05VCitnZXR0ZXh0IG1lc3NhZ2UgY2F0YWxvZyBsaWJyYXJ5LicnJyksCisgICAgICAgICAgICcnJ0d1dmYgemJxaHlyIGNlYml2cXJmIHZhZ3JlYW5ndmJhbnl2bW5ndmJhIG5hcSB5YnBueXZtbmd2YmEKK2ZoY2NiZWcgc2JlIGxiaGUgQ2xndWJhIGNlYnRlbnpmIG9sIGNlYml2cXZhdCBuYSB2YWdyZXNucHIgZ2IgZ3VyIFRBSAordHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4nJycpCisKKyAgICBkZWYgdGVzdF90aGVfYWx0ZXJuYXRpdmVfaW50ZXJmYWNlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyB0ZXN0IHRoZSBhbHRlcm5hdGl2ZSBpbnRlcmZhY2UKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYubW9maWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKKyAgICAgICAgIyBJbnN0YWxsIHRoZSB0cmFuc2xhdGlvbiBvYmplY3QKKyAgICAgICAgdC5pbnN0YWxsKCkKKyAgICAgICAgZXEoXygnbnVkZ2UgbnVkZ2UnKSwgJ3dpbmsgd2luaycpCisgICAgICAgICMgVHJ5IHVuaWNvZGUgcmV0dXJuIHR5cGUKKyAgICAgICAgdC5pbnN0YWxsKHVuaWNvZGU9VHJ1ZSkKKyAgICAgICAgZXEoXygnbXVsbHVzaycpLCAnYmFjb24nKQorICAgICAgICAjIFRlc3QgaW5zdGFsbGF0aW9uIG9mIG90aGVyIG1ldGhvZHMKKyAgICAgICAgaW1wb3J0IF9fYnVpbHRpbl9fCisgICAgICAgIHQuaW5zdGFsbCh1bmljb2RlPVRydWUsIG5hbWVzPVsiZ2V0dGV4dCIsICJsZ2V0dGV4dCJdKQorICAgICAgICBlcShfLCB0LnVnZXR0ZXh0KQorICAgICAgICBlcShfX2J1aWx0aW5fXy5nZXR0ZXh0LCB0LnVnZXR0ZXh0KQorICAgICAgICBlcShsZ2V0dGV4dCwgdC5sZ2V0dGV4dCkKKyAgICAgICAgZGVsIF9fYnVpbHRpbl9fLmdldHRleHQKKyAgICAgICAgZGVsIF9fYnVpbHRpbl9fLmxnZXR0ZXh0CisKKworY2xhc3MgR2V0dGV4dFRlc3RDYXNlMihHZXR0ZXh0QmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgR2V0dGV4dEJhc2VUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYubG9jYWxlZGlyID0gb3MuY3VyZGlyCisgICAgICAgICMgU2V0IHVwIHRoZSBiaW5kaW5ncworICAgICAgICBnZXR0ZXh0LmJpbmR0ZXh0ZG9tYWluKCdnZXR0ZXh0Jywgc2VsZi5sb2NhbGVkaXIpCisgICAgICAgIGdldHRleHQudGV4dGRvbWFpbignZ2V0dGV4dCcpCisgICAgICAgICMgRm9yIGNvbnZlbmllbmNlCisgICAgICAgIHNlbGYuXyA9IGdldHRleHQuZ2V0dGV4dAorCisgICAgZGVmIHRlc3RfYmluZHRleHRkb21haW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0dGV4dC5iaW5kdGV4dGRvbWFpbignZ2V0dGV4dCcpLCBzZWxmLmxvY2FsZWRpcikKKworICAgIGRlZiB0ZXN0X3RleHRkb21haW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0dGV4dC50ZXh0ZG9tYWluKCksICdnZXR0ZXh0JykKKworICAgIGRlZiB0ZXN0X3NvbWVfdHJhbnNsYXRpb25zKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyB0ZXN0IHNvbWUgdHJhbnNsYXRpb25zCisgICAgICAgIGVxKHNlbGYuXygnYWxiYXRyb3NzJyksICdhbGJhdHJvc3MnKQorICAgICAgICBlcShzZWxmLl8odSdtdWxsdXNrJyksICdiYWNvbicpCisgICAgICAgIGVxKHNlbGYuXyhyJ1JheW1vbmQgTHV4dXJ5IFlhY2gtdCcpLCAnVGhyb2F0d29iYmxlciBNYW5ncm92ZScpCisgICAgICAgIGVxKHNlbGYuXyh1cidudWRnZSBudWRnZScpLCAnd2luayB3aW5rJykKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIGRvdWJsZSBxdW90ZXMKKyAgICAgICAgZXEoc2VsZi5fKCJhbGJhdHJvc3MiKSwgJ2FsYmF0cm9zcycpCisgICAgICAgIGVxKHNlbGYuXyh1Im11bGx1c2siKSwgJ2JhY29uJykKKyAgICAgICAgZXEoc2VsZi5fKHIiUmF5bW9uZCBMdXh1cnkgWWFjaC10IiksICdUaHJvYXR3b2JibGVyIE1hbmdyb3ZlJykKKyAgICAgICAgZXEoc2VsZi5fKHVyIm51ZGdlIG51ZGdlIiksICd3aW5rIHdpbmsnKQorCisgICAgZGVmIHRlc3RfdHJpcGxlX3NpbmdsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIHRyaXBsZSBzaW5nbGUgcXVvdGVzCisgICAgICAgIGVxKHNlbGYuXygnJydhbGJhdHJvc3MnJycpLCAnYWxiYXRyb3NzJykKKyAgICAgICAgZXEoc2VsZi5fKHUnJydtdWxsdXNrJycnKSwgJ2JhY29uJykKKyAgICAgICAgZXEoc2VsZi5fKHInJydSYXltb25kIEx1eHVyeSBZYWNoLXQnJycpLCAnVGhyb2F0d29iYmxlciBNYW5ncm92ZScpCisgICAgICAgIGVxKHNlbGYuXyh1cicnJ251ZGdlIG51ZGdlJycnKSwgJ3dpbmsgd2luaycpCisKKyAgICBkZWYgdGVzdF90cmlwbGVfZG91YmxlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgdHJpcGxlIGRvdWJsZSBxdW90ZXMKKyAgICAgICAgZXEoc2VsZi5fKCIiImFsYmF0cm9zcyIiIiksICdhbGJhdHJvc3MnKQorICAgICAgICBlcShzZWxmLl8odSIiIm11bGx1c2siIiIpLCAnYmFjb24nKQorICAgICAgICBlcShzZWxmLl8ociIiIlJheW1vbmQgTHV4dXJ5IFlhY2gtdCIiIiksICdUaHJvYXR3b2JibGVyIE1hbmdyb3ZlJykKKyAgICAgICAgZXEoc2VsZi5fKHVyIiIibnVkZ2UgbnVkZ2UiIiIpLCAnd2luayB3aW5rJykKKworICAgIGRlZiB0ZXN0X211bHRpbGluZV9zdHJpbmdzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBtdWx0aWxpbmUgc3RyaW5ncworICAgICAgICBlcShzZWxmLl8oJycnVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIGxvY2FsaXphdGlvbgorc3VwcG9ydCBmb3IgeW91ciBQeXRob24gcHJvZ3JhbXMgYnkgcHJvdmlkaW5nIGFuIGludGVyZmFjZSB0byB0aGUgR05VCitnZXR0ZXh0IG1lc3NhZ2UgY2F0YWxvZyBsaWJyYXJ5LicnJyksCisgICAgICAgICAgICcnJ0d1dmYgemJxaHlyIGNlYml2cXJmIHZhZ3JlYW5ndmJhbnl2bW5ndmJhIG5hcSB5YnBueXZtbmd2YmEKK2ZoY2NiZWcgc2JlIGxiaGUgQ2xndWJhIGNlYnRlbnpmIG9sIGNlYml2cXZhdCBuYSB2YWdyZXNucHIgZ2IgZ3VyIFRBSAordHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4nJycpCisKKworY2xhc3MgUGx1cmFsRm9ybXNUZXN0Q2FzZShHZXR0ZXh0QmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgR2V0dGV4dEJhc2VUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYubW9maWxlID0gTU9GSUxFCisKKyAgICBkZWYgdGVzdF9wbHVyYWxfZm9ybXMxKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgeCA9IGdldHRleHQubmdldHRleHQoJ1RoZXJlIGlzICVzIGZpbGUnLCAnVGhlcmUgYXJlICVzIGZpbGVzJywgMSkKKyAgICAgICAgZXEoeCwgJ0hheSAlcyBmaWNoZXJvJykKKyAgICAgICAgeCA9IGdldHRleHQubmdldHRleHQoJ1RoZXJlIGlzICVzIGZpbGUnLCAnVGhlcmUgYXJlICVzIGZpbGVzJywgMikKKyAgICAgICAgZXEoeCwgJ0hheSAlcyBmaWNoZXJvcycpCisKKyAgICBkZWYgdGVzdF9wbHVyYWxfZm9ybXMyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYubW9maWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKKyAgICAgICAgeCA9IHQubmdldHRleHQoJ1RoZXJlIGlzICVzIGZpbGUnLCAnVGhlcmUgYXJlICVzIGZpbGVzJywgMSkKKyAgICAgICAgZXEoeCwgJ0hheSAlcyBmaWNoZXJvJykKKyAgICAgICAgeCA9IHQubmdldHRleHQoJ1RoZXJlIGlzICVzIGZpbGUnLCAnVGhlcmUgYXJlICVzIGZpbGVzJywgMikKKyAgICAgICAgZXEoeCwgJ0hheSAlcyBmaWNoZXJvcycpCisKKyAgICBkZWYgdGVzdF9odShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGYgPSBnZXR0ZXh0LmMycHkoJzAnKQorICAgICAgICBzID0gJycuam9pbihbIHN0cihmKHgpKSBmb3IgeCBpbiByYW5nZSgyMDApIF0pCisgICAgICAgIGVxKHMsICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpCisKKyAgICBkZWYgdGVzdF9kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGYgPSBnZXR0ZXh0LmMycHkoJ24gIT0gMScpCisgICAgICAgIHMgPSAnJy5qb2luKFsgc3RyKGYoeCkpIGZvciB4IGluIHJhbmdlKDIwMCkgXSkKKyAgICAgICAgZXEocywgIjEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIikKKworICAgIGRlZiB0ZXN0X2ZyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZiA9IGdldHRleHQuYzJweSgnbj4xJykKKyAgICAgICAgcyA9ICcnLmpvaW4oWyBzdHIoZih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwKSBdKQorICAgICAgICBlcShzLCAiMDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEiKQorCisgICAgZGVmIHRlc3RfZ2Qoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmID0gZ2V0dGV4dC5jMnB5KCduPT0xID8gMCA6IG49PTIgPyAxIDogMicpCisgICAgICAgIHMgPSAnJy5qb2luKFsgc3RyKGYoeCkpIGZvciB4IGluIHJhbmdlKDIwMCkgXSkKKyAgICAgICAgZXEocywgIjIwMTIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIikKKworICAgIGRlZiB0ZXN0X2dkMihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgVGVzdHMgdGhlIGNvbWJpbmF0aW9uIG9mIHBhcmVudGhlc2VzIGFuZCAiPzoiCisgICAgICAgIGYgPSBnZXR0ZXh0LmMycHkoJ249PTEgPyAwIDogKG49PTIgPyAxIDogMiknKQorICAgICAgICBzID0gJycuam9pbihbIHN0cihmKHgpKSBmb3IgeCBpbiByYW5nZSgyMDApIF0pCisgICAgICAgIGVxKHMsICIyMDEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiIpCisKKyAgICBkZWYgdGVzdF9sdChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGYgPSBnZXR0ZXh0LmMycHkoJ24lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMicpCisgICAgICAgIHMgPSAnJy5qb2luKFsgc3RyKGYoeCkpIGZvciB4IGluIHJhbmdlKDIwMCkgXSkKKyAgICAgICAgZXEocywgIjIwMTExMTExMTEyMjIyMjIyMjIyMjAxMTExMTExMTIwMTExMTExMTEyMDExMTExMTExMjAxMTExMTExMTIwMTExMTExMTEyMDExMTExMTExMjAxMTExMTExMTIwMTExMTExMTEyMDExMTExMTExMjIyMjIyMjIyMjIwMTExMTExMTEyMDExMTExMTExMjAxMTExMTExMTIwMTExMTExMTEyMDExMTExMTExMjAxMTExMTExMTIwMTExMTExMTEyMDExMTExMTExIikKKworICAgIGRlZiB0ZXN0X3J1KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZiA9IGdldHRleHQuYzJweSgnbiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuJTEwPD00ICYmIChuJTEwMDwxMCB8fCBuJTEwMD49MjApID8gMSA6IDInKQorICAgICAgICBzID0gJycuam9pbihbIHN0cihmKHgpKSBmb3IgeCBpbiByYW5nZSgyMDApIF0pCisgICAgICAgIGVxKHMsICIyMDExMTIyMjIyMjIyMjIyMjIyMjIwMTExMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIyMjIyMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMiIpCisKKyAgICBkZWYgdGVzdF9wbChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGYgPSBnZXR0ZXh0LmMycHkoJ249PTEgPyAwIDogbiUxMD49MiAmJiBuJTEwPD00ICYmIChuJTEwMDwxMCB8fCBuJTEwMD49MjApID8gMSA6IDInKQorICAgICAgICBzID0gJycuam9pbihbIHN0cihmKHgpKSBmb3IgeCBpbiByYW5nZSgyMDApIF0pCisgICAgICAgIGVxKHMsICIyMDExMTIyMjIyMjIyMjIyMjIyMjIyMTExMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMjIyMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMiIpCisKKyAgICBkZWYgdGVzdF9zbChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGYgPSBnZXR0ZXh0LmMycHkoJ24lMTAwPT0xID8gMCA6IG4lMTAwPT0yID8gMSA6IG4lMTAwPT0zIHx8IG4lMTAwPT00ID8gMiA6IDMnKQorICAgICAgICBzID0gJycuam9pbihbIHN0cihmKHgpKSBmb3IgeCBpbiByYW5nZSgyMDApIF0pCisgICAgICAgIGVxKHMsICIzMDEyMjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzAxMjIzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyIpCisKKyAgICBkZWYgdGVzdF9zZWN1cml0eShzZWxmKToKKyAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKKyAgICAgICAgIyBUZXN0IGZvciBhIGRhbmdlcm91cyBleHByZXNzaW9uCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBnZXR0ZXh0LmMycHksICJvcy5jaG1vZCgnL2V0Yy9wYXNzd2QnLDA3NzcpIikKKworCitjbGFzcyBVbmljb2RlVHJhbnNsYXRpb25zVGVzdChHZXR0ZXh0QmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgR2V0dGV4dEJhc2VUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIHdpdGggb3BlbihVTU9GSUxFLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYudCA9IGdldHRleHQuR05VVHJhbnNsYXRpb25zKGZwKQorICAgICAgICBzZWxmLl8gPSBzZWxmLnQudWdldHRleHQKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfbXNnaWQoc2VsZik6CisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShzZWxmLl8oJycpLCB1bmljb2RlKSkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2Uoc2VsZi5fKHUnJyksIHVuaWNvZGUpKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9tc2dzdHIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShzZWxmLl8odSdhYlx4ZGUnKSwgdSdceGE0eXonKQorCisKK2NsYXNzIFdlaXJkTWV0YWRhdGFUZXN0KEdldHRleHRCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBHZXR0ZXh0QmFzZVRlc3Quc2V0VXAoc2VsZikKKyAgICAgICAgd2l0aCBvcGVuKE1NT0ZJTEUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYudCA9IGdldHRleHQuR05VVHJhbnNsYXRpb25zKGZwKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYudGVhckRvd24oKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgdGVzdF93ZWlyZF9tZXRhZGF0YShzZWxmKToKKyAgICAgICAgaW5mbyA9IHNlbGYudC5pbmZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydsYXN0LXRyYW5zbGF0b3InXSwKKyAgICAgICAgICAgJ0pvaG4gRG9lIDxqZG9lQGV4YW1wbGUuY29tPlxuSmFuZSBGb29iYXIgPGpmb29iYXJAZXhhbXBsZS5jb20+JykKKworCitjbGFzcyBEdW1teUdOVVRyYW5zbGF0aW9ucyhnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyk6CisgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdmb28nCisKKworY2xhc3MgR2V0dGV4dENhY2hlVGVzdENhc2UoR2V0dGV4dEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF9jYWNoZShzZWxmKToKKyAgICAgICAgc2VsZi5sb2NhbGVkaXIgPSBvcy5jdXJkaXIKKyAgICAgICAgc2VsZi5tb2ZpbGUgPSBNT0ZJTEUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZXR0ZXh0Ll90cmFuc2xhdGlvbnMpLCAwKQorCisgICAgICAgIHQgPSBnZXR0ZXh0LnRyYW5zbGF0aW9uKCdnZXR0ZXh0Jywgc2VsZi5sb2NhbGVkaXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2V0dGV4dC5fdHJhbnNsYXRpb25zKSwgMSkKKworICAgICAgICB0ID0gZ2V0dGV4dC50cmFuc2xhdGlvbignZ2V0dGV4dCcsIHNlbGYubG9jYWxlZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc189RHVtbXlHTlVUcmFuc2xhdGlvbnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2V0dGV4dC5fdHJhbnNsYXRpb25zKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Ll9fY2xhc3NfXywgRHVtbXlHTlVUcmFuc2xhdGlvbnMpCisKKyAgICAgICAgIyBDYWxsaW5nIGl0IGFnYWluIGRvZXNuJ3QgYWRkIHRvIHRoZSBjYWNoZQorCisgICAgICAgIHQgPSBnZXR0ZXh0LnRyYW5zbGF0aW9uKCdnZXR0ZXh0Jywgc2VsZi5sb2NhbGVkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzXz1EdW1teUdOVVRyYW5zbGF0aW9ucykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZXR0ZXh0Ll90cmFuc2xhdGlvbnMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuX19jbGFzc19fLCBEdW1teUdOVVRyYW5zbGF0aW9ucykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQorCisKKyMgRm9yIHJlZmVyZW5jZSwgaGVyZSdzIHRoZSAucG8gZmlsZSB1c2VkIHRvIGNyZWF0ZWQgdGhlIEdOVV9NT19EQVRBIGFib3ZlLgorIworIyBUaGUgb3JpZ2luYWwgdmVyc2lvbiB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgc291cmNlcyB3aXRoCisjIHB5Z2V0dGV4dC4gTGF0ZXIgaXQgd2FzIG1hbnVhbGx5IG1vZGlmaWVkIHRvIGFkZCBwbHVyYWwgZm9ybXMgc3VwcG9ydC4KKworJycnCisjIER1bW15IHRyYW5zbGF0aW9uIGZvciB0aGUgUHl0aG9uIHRlc3RfZ2V0dGV4dC5weSBtb2R1bGUuCisjIENvcHlyaWdodCAoQykgMjAwMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorIyBCYXJyeSBXYXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+LCAyMDAwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogMi4wXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMy0wNC0xMSAxNDozMi0wNDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKLiBEYXZpZCBJYmFuZXogPGotZGF2aWRAbm9vcy5mcj5cbiIKKyJMYW5ndWFnZS1UZWFtOiBYWCA8cHl0aG9uLWRldkBweXRob24ub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4xXG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9biE9MTtcbiIKKworIzogdGVzdF9nZXR0ZXh0LnB5OjE5IHRlc3RfZ2V0dGV4dC5weToyNSB0ZXN0X2dldHRleHQucHk6MzEgdGVzdF9nZXR0ZXh0LnB5OjM3CisjOiB0ZXN0X2dldHRleHQucHk6NTEgdGVzdF9nZXR0ZXh0LnB5OjgwIHRlc3RfZ2V0dGV4dC5weTo4NiB0ZXN0X2dldHRleHQucHk6OTIKKyM6IHRlc3RfZ2V0dGV4dC5weTo5OAorbXNnaWQgIm51ZGdlIG51ZGdlIgorbXNnc3RyICJ3aW5rIHdpbmsiCisKKyM6IHRlc3RfZ2V0dGV4dC5weToxNiB0ZXN0X2dldHRleHQucHk6MjIgdGVzdF9nZXR0ZXh0LnB5OjI4IHRlc3RfZ2V0dGV4dC5weTozNAorIzogdGVzdF9nZXR0ZXh0LnB5Ojc3IHRlc3RfZ2V0dGV4dC5weTo4MyB0ZXN0X2dldHRleHQucHk6ODkgdGVzdF9nZXR0ZXh0LnB5Ojk1Cittc2dpZCAiYWxiYXRyb3NzIgorbXNnc3RyICIiCisKKyM6IHRlc3RfZ2V0dGV4dC5weToxOCB0ZXN0X2dldHRleHQucHk6MjQgdGVzdF9nZXR0ZXh0LnB5OjMwIHRlc3RfZ2V0dGV4dC5weTozNgorIzogdGVzdF9nZXR0ZXh0LnB5Ojc5IHRlc3RfZ2V0dGV4dC5weTo4NSB0ZXN0X2dldHRleHQucHk6OTEgdGVzdF9nZXR0ZXh0LnB5Ojk3Cittc2dpZCAiUmF5bW9uZCBMdXh1cnkgWWFjaC10IgorbXNnc3RyICJUaHJvYXR3b2JibGVyIE1hbmdyb3ZlIgorCisjOiB0ZXN0X2dldHRleHQucHk6MTcgdGVzdF9nZXR0ZXh0LnB5OjIzIHRlc3RfZ2V0dGV4dC5weToyOSB0ZXN0X2dldHRleHQucHk6MzUKKyM6IHRlc3RfZ2V0dGV4dC5weTo1NiB0ZXN0X2dldHRleHQucHk6NzggdGVzdF9nZXR0ZXh0LnB5Ojg0IHRlc3RfZ2V0dGV4dC5weTo5MAorIzogdGVzdF9nZXR0ZXh0LnB5Ojk2Cittc2dpZCAibXVsbHVzayIKK21zZ3N0ciAiYmFjb24iCisKKyM6IHRlc3RfZ2V0dGV4dC5weTo0MCB0ZXN0X2dldHRleHQucHk6MTAxCittc2dpZCAiIgorIlRoaXMgbW9kdWxlIHByb3ZpZGVzIGludGVybmF0aW9uYWxpemF0aW9uIGFuZCBsb2NhbGl6YXRpb25cbiIKKyJzdXBwb3J0IGZvciB5b3VyIFB5dGhvbiBwcm9ncmFtcyBieSBwcm92aWRpbmcgYW4gaW50ZXJmYWNlIHRvIHRoZSBHTlVcbiIKKyJnZXR0ZXh0IG1lc3NhZ2UgY2F0YWxvZyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorIkd1dmYgemJxaHlyIGNlYml2cXJmIHZhZ3JlYW5ndmJhbnl2bW5ndmJhIG5hcSB5YnBueXZtbmd2YmFcbiIKKyJmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVzbnByIGdiIGd1ciBUQUhcbiIKKyJ0cmdncmtnIHpyZmZudHIgcG5nbnlidCB5dm9lbmVsLiIKKworIyBNYW51YWxseSBhZGRlZCwgYXMgbmVpdGhlciBweWdldHRleHQgbm9yIHhnZXR0ZXh0IHN1cHBvcnQgcGx1cmFsIGZvcm1zCisjIGluIFB5dGhvbi4KK21zZ2lkICJUaGVyZSBpcyAlcyBmaWxlIgorbXNnaWRfcGx1cmFsICJUaGVyZSBhcmUgJXMgZmlsZXMiCittc2dzdHJbMF0gIkhheSAlcyBmaWNoZXJvIgorbXNnc3RyWzFdICJIYXkgJXMgZmljaGVyb3MiCisnJycKKworIyBIZXJlJ3MgdGhlIHNlY29uZCBleGFtcGxlIHBvIGZpbGUgZXhhbXBsZSwgdXNlZCB0byBnZW5lcmF0ZSB0aGUgVU1PX0RBVEEKKyMgY29udGFpbmluZyB1dGYtOCBlbmNvZGVkIFVuaWNvZGUgc3RyaW5ncworCisnJycKKyMgRHVtbXkgdHJhbnNsYXRpb24gZm9yIHRoZSBQeXRob24gdGVzdF9nZXR0ZXh0LnB5IG1vZHVsZS4KKyMgQ29weXJpZ2h0IChDKSAyMDAxIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIEJhcnJ5IFdhcnNhdyA8YmFycnlAcHl0aG9uLm9yZz4sIDIwMDAuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiAyLjBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAzLTA0LTExIDEyOjQyLTA0MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEJhcnJ5IEEuIFdBcnNhdyA8YmFycnlAcHl0aG9uLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBYWCA8cHl0aG9uLWRldkBweXRob24ub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdFxuIgorIkdlbmVyYXRlZC1CeTogbWFudWFsbHlcbiIKKworIzogbm9maWxlOjAKK21zZ2lkICJhYlx4YzNceDllIgorbXNnc3RyICJceGMyXHhhNHl6IgorJycnCisKKyMgSGVyZSdzIHRoZSB0aGlyZCBleGFtcGxlIHBvIGZpbGUsIHVzZWQgdG8gZ2VuZXJhdGUgTU1PX0RBVEEKKworJycnCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBObyBQcm9qZWN0IDAuMFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiBXZWQgRGVjIDExIDA3OjQ0OjE1IDIwMDJcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAyLTA4LTE0IDAxOjE4OjU4KzAwOjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKb2huIERvZSA8amRvZUBleGFtcGxlLmNvbT5cbiIKKyJKYW5lIEZvb2JhciA8amZvb2JhckBleGFtcGxlLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiB4eCA8eHhAZXhhbXBsZS5jb20+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMTVcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlXG4iCisiR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4zXG4iCisnJycKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dsLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ2wucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzkyNjRlZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dsLnB5CkBAIC0wLDAgKzEsMTU1IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJWZXJ5IHNpbXBsZSB0ZXN0IHNjcmlwdCBmb3IgdGhlIFNHSSBnbCBsaWJyYXJ5IGV4dGVuc2lvbiBtb2R1bGUKKyAgICB0YWtlbiBtb3N0bHkgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgICBSb2dlciBFLiBNYXNzZQorIiIiCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCB0aW1lCitnbCA9IGltcG9ydF9tb2R1bGUoJ2dsJykKK0dMID0gaW1wb3J0X21vZHVsZSgnR0wnKQorCitnbGF0dHJzID0gWydSR0Jjb2xvcicsICdSR0JjdXJzb3InLCAnUkdCbW9kZScsICdSR0JyYW5nZScsICdSR0J3cml0ZW1hc2snLAorJ19fZG9jX18nLCAnX19uYW1lX18nLCAnYWRkdG9wdXAnLCAnYWx0Z2V0bWF0cml4JywgJ2FyYycsICdhcmNmJywKKydhcmNmaScsICdhcmNmcycsICdhcmNpJywgJ2FyY3MnLCAnYXR0YWNoY3Vyc29yJywgJ2JhY2tidWZmZXInLAorJ2JhY2tmYWNlJywgJ2Jib3gyJywgJ2Jib3gyaScsICdiYm94MnMnLCAnYmduY2xvc2VkbGluZScsICdiZ25saW5lJywKKydiZ25wb2ludCcsICdiZ25wb2x5Z29uJywgJ2JnbnN1cmZhY2UnLCAnYmdudG1lc2gnLCAnYmdudHJpbScsCisnYmxhbmtzY3JlZW4nLCAnYmxhbmt0aW1lJywgJ2JsZW5kZnVuY3Rpb24nLCAnYmxpbmsnLCAnYzNmJywgJ2MzaScsCisnYzNzJywgJ2M0ZicsICdjNGknLCAnYzRzJywgJ2NhbGxvYmonLCAnY2hhcnN0cicsICdjaHVua3NpemUnLCAnY2lyYycsCisnY2lyY2YnLCAnY2lyY2ZpJywgJ2NpcmNmcycsICdjaXJjaScsICdjaXJjcycsICdjbGVhcicsCisnY2xlYXJoaXRjb2RlJywgJ2Nsa29mZicsICdjbGtvbicsICdjbG9zZW9iaicsICdjbW9kZScsICdjbW92JywKKydjbW92MicsICdjbW92MmknLCAnY21vdjJzJywgJ2Ntb3ZpJywgJ2Ntb3ZzJywgJ2NvbG9yJywgJ2NvbG9yZicsCisnY29tcGFjdGlmeScsICdjb25jYXZlJywgJ2NwYWNrJywgJ2NydicsICdjcnZuJywgJ2N1cm9yaWdpbicsCisnY3Vyc29mZicsICdjdXJzb24nLCAnY3Vyc3R5cGUnLCAnY3VydmViYXNpcycsICdjdXJ2ZWl0JywKKydjdXJ2ZXByZWNpc2lvbicsICdjeWNsZW1hcCcsICdjemNsZWFyJywgJ2RlZmJhc2lzJywgJ2RlZmN1cnNvcicsCisnZGVmbGluZXN0eWxlJywgJ2RlbG9iaicsICdkZWx0YWcnLCAnZGVwdGhjdWUnLCAnZGV2cG9ydCcsICdkZ2xjbG9zZScsCisnZGdsb3BlbicsICdkaXRoZXInLCAnZG9wdXAnLCAnZG91YmxlYnVmZmVyJywgJ2RyYXcnLCAnZHJhdzInLAorJ2RyYXcyaScsICdkcmF3MnMnLCAnZHJhd2knLCAnZHJhd21vZGUnLCAnZHJhd3MnLCAnZWRpdG9iaicsCisnZW5kY2xvc2VkbGluZScsICdlbmRmdWxsc2NybicsICdlbmRsaW5lJywgJ2VuZHBpY2snLCAnZW5kcG9pbnQnLAorJ2VuZHBvbHlnb24nLCAnZW5kcHVwbW9kZScsICdlbmRzZWxlY3QnLCAnZW5kc3VyZmFjZScsICdlbmR0bWVzaCcsCisnZW5kdHJpbScsICdmaW5pc2gnLCAnZm9udCcsICdmb3JlZ3JvdW5kJywgJ2ZyZWVwdXAnLCAnZnJvbnRidWZmZXInLAorJ2Z1ZGdlJywgJ2Z1bGxzY3JuJywgJ2dSR0Jjb2xvcicsICdnUkdCbWFzaycsICdnYW1tYXJhbXAnLCAnZ2JlZ2luJywKKydnY29uZmlnJywgJ2dlbm9iaicsICdnZW50YWcnLCAnZ2V0YmFja2ZhY2UnLCAnZ2V0YnVmZmVyJywKKydnZXRidXR0b24nLCAnZ2V0Y21tb2RlJywgJ2dldGNvbG9yJywgJ2dldGNwb3MnLCAnZ2V0Y3Vyc29yJywKKydnZXRkY20nLCAnZ2V0ZGVwdGgnLCAnZ2V0ZGVzY2VuZGVyJywgJ2dldGRpc3BsYXltb2RlJywgJ2dldGRyYXdtb2RlJywKKydnZXRmb250JywgJ2dldGdkZXNjJywgJ2dldGdwb3MnLCAnZ2V0aGVpZ2h0JywgJ2dldGhpdGNvZGUnLAorJ2dldGxzYmFja3VwJywgJ2dldGxzcmVwZWF0JywgJ2dldGxzdHlsZScsICdnZXRsd2lkdGgnLCAnZ2V0bWFwJywKKydnZXRtYXRyaXgnLCAnZ2V0bWNvbG9yJywgJ2dldG1tb2RlJywgJ2dldG1vbml0b3InLAorJ2dldG51cmJzcHJvcGVydHknLCAnZ2V0b3Blbm9iaicsICdnZXRvcmlnaW4nLCAnZ2V0b3RoZXJtb25pdG9yJywKKydnZXRwYXR0ZXJuJywgJ2dldHBsYW5lcycsICdnZXRwb3J0JywgJ2dldHJlc2V0bHMnLCAnZ2V0c2NybWFzaycsCisnZ2V0c2hhZGUnLCAnZ2V0c2l6ZScsICdnZXRzbScsICdnZXR0cCcsICdnZXR2YWx1YXRvcicsICdnZXR2aWRlbycsCisnZ2V0dmlld3BvcnQnLCAnZ2V0d3JpdGVtYXNrJywgJ2dldHpidWZmZXInLCAnZ2V3cml0ZScsICdnZmx1c2gnLAorJ2dpbml0JywgJ2dsY29tcGF0JywgJ2dyZXNldCcsICdnc2VsZWN0JywgJ2dzeW5jJywgJ2d2ZXJzaW9uJywKKydpY29uc2l6ZScsICdpY29udGl0bGUnLCAnaW1ha2ViYWNrZ3JvdW5kJywgJ2luaXRuYW1lcycsICdpc21leCcsCisnaXNvYmonLCAnaXNxdWV1ZWQnLCAnaXN0YWcnLCAna2VlcGFzcGVjdCcsICdsUkdCcmFuZ2UnLCAnbGFtcG9mZicsCisnbGFtcG9uJywgJ2xpbmVzbW9vdGgnLCAnbGluZXdpZHRoJywgJ2xtYmluZCcsICdsbWNvbG9yJywgJ2xtZGVmJywKKydsb2FkbWF0cml4JywgJ2xvYWRuYW1lJywgJ2xvZ2ljb3AnLCAnbG9va2F0JywgJ2xyZWN0cmVhZCcsCisnbHJlY3R3cml0ZScsICdsc2JhY2t1cCcsICdsc2V0ZGVwdGgnLCAnbHNoYWRlcmFuZ2UnLCAnbHNyZXBlYXQnLAorJ21ha2VvYmonLCAnbWFrZXRhZycsICdtYXBjb2xvcicsICdtYXB3JywgJ21hcHcyJywgJ21heHNpemUnLAorJ21pbnNpemUnLCAnbW1vZGUnLCAnbW92ZScsICdtb3ZlMicsICdtb3ZlMmknLCAnbW92ZTJzJywgJ21vdmVpJywKKydtb3ZlcycsICdtdWx0aW1hcCcsICdtdWx0bWF0cml4JywgJ24zZicsICduZXdwdXAnLCAnbmV3dGFnJywKKydub2JvcmRlcicsICdub2lzZScsICdub3BvcnQnLCAnbm9ybWFsJywgJ251cmJzY3VydmUnLCAnbnVyYnNzdXJmYWNlJywKKydudmFycmF5JywgJ29iamRlbGV0ZScsICdvYmppbnNlcnQnLCAnb2JqcmVwbGFjZScsICdvbmVtYXAnLCAnb3J0aG8nLAorJ29ydGhvMicsICdvdmVybGF5JywgJ3BhY2tyZWN0JywgJ3BhZ2Vjb2xvcicsICdwYWdld3JpdGVtYXNrJywKKydwYXNzdGhyb3VnaCcsICdwYXRjaCcsICdwYXRjaGJhc2lzJywgJ3BhdGNoY3VydmVzJywgJ3BhdGNocHJlY2lzaW9uJywKKydwY2xvcycsICdwZHInLCAncGRyMicsICdwZHIyaScsICdwZHIycycsICdwZHJpJywgJ3BkcnMnLAorJ3BlcnNwZWN0aXZlJywgJ3BpY2snLCAncGlja3NpemUnLCAncGl4bW9kZScsICdwbXYnLCAncG12MicsICdwbXYyaScsCisncG12MnMnLCAncG12aScsICdwbXZzJywgJ3BudCcsICdwbnQyJywgJ3BudDJpJywgJ3BudDJzJywgJ3BudGknLAorJ3BudHMnLCAncG50c21vb3RoJywgJ3BvbGFydmlldycsICdwb2xmJywgJ3BvbGYyJywgJ3BvbGYyaScsICdwb2xmMnMnLAorJ3BvbGZpJywgJ3BvbGZzJywgJ3BvbHknLCAncG9seTInLCAncG9seTJpJywgJ3BvbHkycycsICdwb2x5aScsCisncG9seXMnLCAncG9wYXR0cmlidXRlcycsICdwb3BtYXRyaXgnLCAncG9wbmFtZScsICdwb3B2aWV3cG9ydCcsCisncHJlZnBvc2l0aW9uJywgJ3ByZWZzaXplJywgJ3B1cG1vZGUnLCAncHVzaGF0dHJpYnV0ZXMnLCAncHVzaG1hdHJpeCcsCisncHVzaG5hbWUnLCAncHVzaHZpZXdwb3J0JywgJ3B3bGN1cnZlJywgJ3FkZXZpY2UnLCAncWVudGVyJywgJ3FnZXRmZCcsCisncXJlYWQnLCAncXJlc2V0JywgJ3F0ZXN0JywgJ3JjcnYnLCAncmNydm4nLCAncmRyJywgJ3JkcjInLCAncmRyMmknLAorJ3JkcjJzJywgJ3JkcmknLCAncmRycycsICdyZWFkZGlzcGxheScsICdyZWFkc291cmNlJywgJ3JlY3QnLAorJ3JlY3Rjb3B5JywgJ3JlY3RmJywgJ3JlY3RmaScsICdyZWN0ZnMnLCAncmVjdGknLCAncmVjdHMnLCAncmVjdHpvb20nLAorJ3Jlc2V0bHMnLCAncmVzaGFwZXZpZXdwb3J0JywgJ3JpbmdiZWxsJywgJ3JtdicsICdybXYyJywgJ3JtdjJpJywKKydybXYycycsICdybXZpJywgJ3JtdnMnLCAncm90JywgJ3JvdGF0ZScsICdycGF0Y2gnLCAncnBkcicsICdycGRyMicsCisncnBkcjJpJywgJ3JwZHIycycsICdycGRyaScsICdycGRycycsICdycG12JywgJ3JwbXYyJywgJ3JwbXYyaScsCisncnBtdjJzJywgJ3JwbXZpJywgJ3JwbXZzJywgJ3Nib3gnLCAnc2JveGYnLCAnc2JveGZpJywgJ3Nib3hmcycsCisnc2JveGknLCAnc2JveHMnLCAnc2NhbGUnLCAnc2NyZWVuc3BhY2UnLCAnc2NybWFzaycsICdzZXRiZWxsJywKKydzZXRjdXJzb3InLCAnc2V0ZGVwdGgnLCAnc2V0bGluZXN0eWxlJywgJ3NldG1hcCcsICdzZXRtb25pdG9yJywKKydzZXRudXJic3Byb3BlcnR5JywgJ3NldHBhdHRlcm4nLCAnc2V0cHVwJywgJ3NldHNoYWRlJywgJ3NldHZhbHVhdG9yJywKKydzZXR2aWRlbycsICdzaGFkZW1vZGVsJywgJ3NoYWRlcmFuZ2UnLCAnc2luZ2xlYnVmZmVyJywgJ3Ntb290aGxpbmUnLAorJ3NwY2xvcycsICdzcGxmJywgJ3NwbGYyJywgJ3NwbGYyaScsICdzcGxmMnMnLCAnc3BsZmknLCAnc3BsZnMnLAorJ3N0ZXB1bml0JywgJ3N0cndpZHRoJywgJ3N1YnBpeGVsJywgJ3N3YXBidWZmZXJzJywgJ3N3YXBpbnRlcnZhbCcsCisnc3dhcHRtZXNoJywgJ3N3aW5vcGVuJywgJ3RleHRjb2xvcicsICd0ZXh0aW5pdCcsICd0ZXh0cG9ydCcsCisndGV4dHdyaXRlbWFzaycsICd0aWUnLCAndHBvZmYnLCAndHBvbicsICd0cmFuc2xhdGUnLCAndW5kZXJsYXknLAorJ3VucGFja3JlY3QnLCAndW5xZGV2aWNlJywgJ3YyZCcsICd2MmYnLCAndjJpJywgJ3YycycsICd2M2QnLCAndjNmJywKKyd2M2knLCAndjNzJywgJ3Y0ZCcsICd2NGYnLCAndjRpJywgJ3Y0cycsICd2YXJyYXknLCAndmlkZW9jbWQnLAorJ3ZpZXdwb3J0JywgJ3ZuYXJyYXknLCAnd2luYXR0YWNoJywgJ3dpbmNsb3NlJywgJ3dpbmNvbnN0cmFpbnRzJywKKyd3aW5kZXB0aCcsICd3aW5kb3cnLCAnd2luZ2V0JywgJ3dpbm1vdmUnLCAnd2lub3BlbicsICd3aW5wb3AnLAorJ3dpbnBvc2l0aW9uJywgJ3dpbnB1c2gnLCAnd2luc2V0JywgJ3dpbnRpdGxlJywgJ3dtcGFjaycsICd3cml0ZW1hc2snLAorJ3dyaXRlcGl4ZWxzJywgJ3hmcHQnLCAneGZwdDInLCAneGZwdDJpJywgJ3hmcHQycycsICd4ZnB0NCcsICd4ZnB0NGknLAorJ3hmcHQ0cycsICd4ZnB0aScsICd4ZnB0cycsICd6YnVmZmVyJywgJ3pjbGVhcicsICd6ZHJhdycsICd6ZnVuY3Rpb24nLAorJ3pzb3VyY2UnLCAnendyaXRlbWFzayddCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIGluc3VyZSB0aGF0IHdlIGF0IGxlYXN0IGhhdmUgYW4gWCBkaXNwbGF5IGJlZm9yZSBjb250aW51aW5nLgorICAgIGltcG9ydCBvcworICAgIHRyeToKKyAgICAgICAgZGlzcGxheSA9IG9zLmVudmlyb25bJ0RJU1BMQVknXQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJObyAkRElTUExBWSAtLSBza2lwcGluZyBnbCB0ZXN0IgorCisgICAgIyB0b3VjaCBhbGwgdGhlIGF0dHJpYnV0ZXMgb2YgZ2wgd2l0aG91dCBkb2luZyBhbnl0aGluZworICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdUb3VjaGluZyBnbCBtb2R1bGUgYXR0cmlidXRlcy4uLicKKyAgICBmb3IgYXR0ciBpbiBnbGF0dHJzOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ3RvdWNoaW5nOiAnLCBhdHRyCisgICAgICAgIGdldGF0dHIoZ2wsIGF0dHIpCisKKyAgICAjIGNyZWF0ZSBhIHNtYWxsICdDcmlzc2Nyb3NzJyB3aW5kb3cKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnQ3JlYXRpbmcgYSBzbWFsbCAiQ3Jpc3NDcm9zcyIgd2luZG93Li4uJworICAgICAgICBwcmludCAnZm9yZWdyb3VuZCcKKyAgICBnbC5mb3JlZ3JvdW5kKCkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAncHJlZnBvc2l0aW9uJworICAgIGdsLnByZWZwb3NpdGlvbig1MDAsIDkwMCwgNTAwLCA5MDApCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ3dpbm9wZW4gIkNyaXNzQ3Jvc3MiJworICAgIHcgPSBnbC53aW5vcGVuKCdDcmlzc0Nyb3NzJykKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnY2xlYXInCisgICAgZ2wuY2xlYXIoKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdvcnRobzInCisgICAgZ2wub3J0aG8yKDAuMCwgNDAwLjAsIDAuMCwgNDAwLjApCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2NvbG9yIFdISVRFJworICAgIGdsLmNvbG9yKEdMLldISVRFKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdjb2xvciBSRUQnCisgICAgZ2wuY29sb3IoR0wuUkVEKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdiZ25saW5lJworICAgIGdsLmJnbmxpbmUoKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICd2MmYnCisgICAgZ2wudjJmKDAuMCwgMC4wKQorICAgIGdsLnYyZig0MDAuMCwgNDAwLjApCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2VuZGxpbmUnCisgICAgZ2wuZW5kbGluZSgpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2JnbmxpbmUnCisgICAgZ2wuYmdubGluZSgpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ3YyaScKKyAgICBnbC52MmkoNDAwLCAwKQorICAgIGdsLnYyaSgwLCA0MDApCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2VuZGxpbmUnCisgICAgZ2wuZW5kbGluZSgpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ0Rpc3BsYXlpbmcgd2luZG93IGZvciAyIHNlY29uZHMuLi4nCisgICAgdGltZS5zbGVlcCgyKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICd3aW5jbG9zZScKKyAgICBnbC53aW5jbG9zZSh3KQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dsb2IucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9nbG9iLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNjBkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CkBAIC0wLDAgKzEsMTgxIEBACitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4KKworCitkZWYgZnNkZWNvZGUocyk6CisgICAgcmV0dXJuIHVuaWNvZGUocywgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpKQorCisKK2NsYXNzIEdsb2JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgbm9ybShzZWxmLCAqcGFydHMpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAqcGFydHMpKQorCisgICAgZGVmIG1rdGVtcChzZWxmLCAqcGFydHMpOgorICAgICAgICBmaWxlbmFtZSA9IHNlbGYubm9ybSgqcGFydHMpCisgICAgICAgIGJhc2UsIGZpbGUgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYmFzZSk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhiYXNlKQorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3cnKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wZGlyID0gVEVTVEZOICsgIl9kaXIiCisgICAgICAgIHNlbGYubWt0ZW1wKCdhJywgJ0QnKQorICAgICAgICBzZWxmLm1rdGVtcCgnYWFiJywgJ0YnKQorICAgICAgICBzZWxmLm1rdGVtcCgnLmFhJywgJ0cnKQorICAgICAgICBzZWxmLm1rdGVtcCgnLmJiJywgJ0gnKQorICAgICAgICBzZWxmLm1rdGVtcCgnYWFhJywgJ3p6ekYnKQorICAgICAgICBzZWxmLm1rdGVtcCgnWlpaJykKKyAgICAgICAgc2VsZi5ta3RlbXAoJ2EnLCAnYmNkJywgJ0VGJykKKyAgICAgICAgc2VsZi5ta3RlbXAoJ2EnLCAnYmNkJywgJ2VmZycsICdoYScpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdzeW1saW5rJyk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNlbGYubm9ybSgnYnJva2VuJyksIHNlbGYubm9ybSgnc3ltMScpKQorICAgICAgICAgICAgb3Muc3ltbGluaygnYnJva2VuJywgc2VsZi5ub3JtKCdzeW0yJykpCisgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguam9pbignYScsICdiY2QnKSwgc2VsZi5ub3JtKCdzeW0zJykpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50ZW1wZGlyKQorCisgICAgZGVmIGdsb2Ioc2VsZiwgKnBhcnRzKToKKyAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAxOgorICAgICAgICAgICAgcGF0dGVybiA9IHBhcnRzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXR0ZXJuID0gb3MucGF0aC5qb2luKCpwYXJ0cykKKyAgICAgICAgcCA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsIHBhdHRlcm4pCisgICAgICAgIHJlcyA9IGdsb2IuZ2xvYihwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZ2xvYi5pZ2xvYihwKSksIHJlcykKKyAgICAgICAgdXJlcyA9IFtmc2RlY29kZSh4KSBmb3IgeCBpbiByZXNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYi5nbG9iKGZzZGVjb2RlKHApKSwgdXJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGdsb2IuaWdsb2IoZnNkZWNvZGUocCkpKSwgdXJlcykKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIGFzc2VydFNlcXVlbmNlc0VxdWFsX25vb3JkZXIoc2VsZiwgbDEsIGwyKToKKyAgICAgICAgbDEgPSBsaXN0KGwxKQorICAgICAgICBsMiA9IGxpc3QobDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGwxKSwgc2V0KGwyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobDEpLCBzb3J0ZWQobDIpKQorCisgICAgZGVmIHRlc3RfZ2xvYl9saXRlcmFsKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0U2VxdWVuY2VzRXF1YWxfbm9vcmRlcgorICAgICAgICBlcShzZWxmLmdsb2IoJ2EnKSwgW3NlbGYubm9ybSgnYScpXSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdhJywgJ0QnKSwgW3NlbGYubm9ybSgnYScsICdEJyldKQorICAgICAgICBlcShzZWxmLmdsb2IoJ2FhYicpLCBbc2VsZi5ub3JtKCdhYWInKV0pCisgICAgICAgIGVxKHNlbGYuZ2xvYignenltdXJneScpLCBbXSkKKworICAgICAgICByZXMgPSBnbG9iLmdsb2IoJyonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt0eXBlKHIpIGZvciByIGluIHJlc30sIHtzdHJ9KQorICAgICAgICByZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKG9zLmN1cmRpciwgJyonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7dHlwZShyKSBmb3IgciBpbiByZXN9LCB7c3RyfSkKKworICAgICAgICAjIHRlc3QgcmV0dXJuIHR5cGVzIGFyZSB1bmljb2RlLCBidXQgb25seSBpZiBvcy5saXN0ZGlyCisgICAgICAgICMgcmV0dXJucyB1bmljb2RlIGZpbGVuYW1lcworICAgICAgICB0bXAgPSBvcy5saXN0ZGlyKGZzZGVjb2RlKG9zLmN1cmRpcikpCisgICAgICAgIGlmIHt0eXBlKHgpIGZvciB4IGluIHRtcH0gPT0ge3VuaWNvZGV9OgorICAgICAgICAgICAgcmVzID0gZ2xvYi5nbG9iKHUnKicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt0eXBlKHIpIGZvciByIGluIHJlc30sIHt1bmljb2RlfSkKKyAgICAgICAgICAgIHJlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oZnNkZWNvZGUob3MuY3VyZGlyKSwgdScqJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt0eXBlKHIpIGZvciByIGluIHJlc30sIHt1bmljb2RlfSkKKworICAgIGRlZiB0ZXN0X2dsb2Jfb25lX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydFNlcXVlbmNlc0VxdWFsX25vb3JkZXIKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdhKicpLCBtYXAoc2VsZi5ub3JtLCBbJ2EnLCAnYWFiJywgJ2FhYSddKSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCcqYScpLCBtYXAoc2VsZi5ub3JtLCBbJ2EnLCAnYWFhJ10pKQorICAgICAgICBlcShzZWxmLmdsb2IoJy4qJyksIG1hcChzZWxmLm5vcm0sIFsnLmFhJywgJy5iYiddKSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCc/YWEnKSwgbWFwKHNlbGYubm9ybSwgWydhYWEnXSkpCisgICAgICAgIGVxKHNlbGYuZ2xvYignYWE/JyksIG1hcChzZWxmLm5vcm0sIFsnYWFhJywgJ2FhYiddKSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdhYVthYl0nKSwgbWFwKHNlbGYubm9ybSwgWydhYWEnLCAnYWFiJ10pKQorICAgICAgICBlcShzZWxmLmdsb2IoJypxJyksIFtdKQorCisgICAgZGVmIHRlc3RfZ2xvYl9uZXN0ZWRfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0U2VxdWVuY2VzRXF1YWxfbm9vcmRlcgorICAgICAgICBpZiBvcy5wYXRoLm5vcm1jYXNlKCJhYkNEIikgPT0gImFiQ0QiOgorICAgICAgICAgICAgIyBjYXNlLXNlbnNpdGl2ZSBmaWxlc3lzdGVtCisgICAgICAgICAgICBlcShzZWxmLmdsb2IoJ2EnLCAnYmNkJywgJ0UqJyksIFtzZWxmLm5vcm0oJ2EnLCAnYmNkJywgJ0VGJyldKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0KKyAgICAgICAgICAgIGVxKHNlbGYuZ2xvYignYScsICdiY2QnLCAnRSonKSwgW3NlbGYubm9ybSgnYScsICdiY2QnLCAnRUYnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubm9ybSgnYScsICdiY2QnLCAnZWZnJyldKQorICAgICAgICBlcShzZWxmLmdsb2IoJ2EnLCAnYmNkJywgJypnJyksIFtzZWxmLm5vcm0oJ2EnLCAnYmNkJywgJ2VmZycpXSkKKworICAgIGRlZiB0ZXN0X2dsb2JfZGlyZWN0b3J5X25hbWVzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0U2VxdWVuY2VzRXF1YWxfbm9vcmRlcgorICAgICAgICBlcShzZWxmLmdsb2IoJyonLCAnRCcpLCBbc2VsZi5ub3JtKCdhJywgJ0QnKV0pCisgICAgICAgIGVxKHNlbGYuZ2xvYignKicsICcqYScpLCBbXSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdhJywgJyonLCAnKicsICcqYScpLAorICAgICAgICAgICBbc2VsZi5ub3JtKCdhJywgJ2JjZCcsICdlZmcnLCAnaGEnKV0pCisgICAgICAgIGVxKHNlbGYuZ2xvYignP2E/JywgJypGJyksIFtzZWxmLm5vcm0oJ2FhYScsICd6enpGJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5vcm0oJ2FhYicsICdGJyldKQorCisgICAgZGVmIHRlc3RfZ2xvYl9kaXJlY3Rvcnlfd2l0aF90cmFpbGluZ19zbGFzaChzZWxmKToKKyAgICAgICAgIyBQYXR0ZXJucyBlbmRpbmcgd2l0aCBhIHNsYXNoIHNob3VsZG4ndCBtYXRjaCBub24tZGlycworICAgICAgICByZXMgPSBnbG9iLmdsb2Ioc2VsZi5ub3JtKCdaKlonKSArIG9zLnNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFtdKQorICAgICAgICByZXMgPSBnbG9iLmdsb2Ioc2VsZi5ub3JtKCdaWlonKSArIG9zLnNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFtdKQorICAgICAgICAjIFdoZW4gdGhlcmUgaXMgYSB3aWxkY2FyZCBwYXR0ZXJuIHdoaWNoIGVuZHMgd2l0aCBvcy5zZXAsIGdsb2IoKQorICAgICAgICAjIGRvZXNuJ3QgYmxvdyB1cC4KKyAgICAgICAgcmVzID0gZ2xvYi5nbG9iKHNlbGYubm9ybSgnYWEqJykgKyBvcy5zZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDIpCisgICAgICAgICMgZWl0aGVyIG9mIHRoZXNlIHJlc3VsdHMgaXMgcmVhc29uYWJsZQorICAgICAgICBzZWxmLmFzc2VydEluKHNldChyZXMpLCBbCisgICAgICAgICAgICAgICAgICAgICAge3NlbGYubm9ybSgnYWFhJyksIHNlbGYubm9ybSgnYWFiJyl9LAorICAgICAgICAgICAgICAgICAgICAgIHtzZWxmLm5vcm0oJ2FhYScpICsgb3Muc2VwLCBzZWxmLm5vcm0oJ2FhYicpICsgb3Muc2VwfSwKKyAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZ2xvYl91bmljb2RlX2RpcmVjdG9yeV93aXRoX3RyYWlsaW5nX3NsYXNoKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgdGVzdF9nbG9iX2RpcmVjdG9yeV93aXRoX3RyYWlsaW5nX3NsYXNoLCBidXQgd2l0aCBhbgorICAgICAgICAjIHVuaWNvZGUgYXJndW1lbnQuCisgICAgICAgIHJlcyA9IGdsb2IuZ2xvYihmc2RlY29kZShzZWxmLm5vcm0oJ1oqWicpICsgb3Muc2VwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFtdKQorICAgICAgICByZXMgPSBnbG9iLmdsb2IoZnNkZWNvZGUoc2VsZi5ub3JtKCdaWlonKSArIG9zLnNlcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKKyAgICAgICAgcmVzID0gZ2xvYi5nbG9iKGZzZGVjb2RlKHNlbGYubm9ybSgnYWEqJykgKyBvcy5zZXApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAyKQorICAgICAgICAjIGVpdGhlciBvZiB0aGVzZSByZXN1bHRzIGlzIHJlYXNvbmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZXQocmVzKSwgWworICAgICAgICAgICAgICAgICAgICAgIHtmc2RlY29kZShzZWxmLm5vcm0oJ2FhYScpKSwgZnNkZWNvZGUoc2VsZi5ub3JtKCdhYWInKSl9LAorICAgICAgICAgICAgICAgICAgICAgIHtmc2RlY29kZShzZWxmLm5vcm0oJ2FhYScpICsgb3Muc2VwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZnNkZWNvZGUoc2VsZi5ub3JtKCdhYWInKSArIG9zLnNlcCl9LAorICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3ltbGluaycpLCAiUmVxdWlyZXMgc3ltbGluayBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF9nbG9iX3N5bWxpbmtzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0U2VxdWVuY2VzRXF1YWxfbm9vcmRlcgorICAgICAgICBlcShzZWxmLmdsb2IoJ3N5bTMnKSwgW3NlbGYubm9ybSgnc3ltMycpXSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdzeW0zJywgJyonKSwgW3NlbGYubm9ybSgnc3ltMycsICdFRicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ub3JtKCdzeW0zJywgJ2VmZycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmdsb2IoJ3N5bTMnICsgb3Muc2VwKSwKKyAgICAgICAgICAgICAgICAgICAgICBbW3NlbGYubm9ybSgnc3ltMycpXSwgW3NlbGYubm9ybSgnc3ltMycpICsgb3Muc2VwXV0pCisgICAgICAgIGVxKHNlbGYuZ2xvYignKicsICcqRicpLAorICAgICAgICAgICBbc2VsZi5ub3JtKCdhYWEnLCAnenp6RicpLCBzZWxmLm5vcm0oJ2FhYicsICdGJyksCisgICAgICAgICAgICBzZWxmLm5vcm0oJ3N5bTMnLCAnRUYnKV0pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3ltbGluaycpLCAiUmVxdWlyZXMgc3ltbGluayBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF9nbG9iX2Jyb2tlbl9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydFNlcXVlbmNlc0VxdWFsX25vb3JkZXIKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdzeW0qJyksIFtzZWxmLm5vcm0oJ3N5bTEnKSwgc2VsZi5ub3JtKCdzeW0yJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ub3JtKCdzeW0zJyldKQorICAgICAgICBlcShzZWxmLmdsb2IoJ3N5bTEnKSwgW3NlbGYubm9ybSgnc3ltMScpXSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdzeW0yJyksIFtzZWxmLm5vcm0oJ3N5bTInKV0pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3QiKQorICAgIGRlZiB0ZXN0X2dsb2JfbWFnaWNfaW5fZHJpdmUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRTZXF1ZW5jZXNFcXVhbF9ub29yZGVyCisgICAgICAgIGVxKGdsb2IuZ2xvYignKjonKSwgW10pCisgICAgICAgIGVxKGdsb2IuZ2xvYih1Jyo6JyksIFtdKQorICAgICAgICBlcShnbG9iLmdsb2IoJz86JyksIFtdKQorICAgICAgICBlcShnbG9iLmdsb2IodSc/OicpLCBbXSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEdsb2JUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9nbG9iYWwucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9nbG9iYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjYjE5MwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dsb2JhbC5weQpAQCAtMCwwICsxLDUyIEBACisiIiJWZXJpZnkgdGhhdCB3YXJuaW5ncyBhcmUgaXNzdWVkIGZvciBnbG9iYWwgc3RhdGVtZW50cyBmb2xsb3dpbmcgdXNlLiIiIgorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3N5bnRheF9lcnJvcgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKKworCitjbGFzcyBHbG9iYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdDEoc2VsZik6CisgICAgICAgIHByb2dfdGV4dF8xID0gIiIiXAorZGVmIHdyb25nMSgpOgorICAgIGEgPSAxCisgICAgYiA9IDIKKyAgICBnbG9iYWwgYQorICAgIGdsb2JhbCBiCisiIiIKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsIHByb2dfdGV4dF8xKQorCisgICAgZGVmIHRlc3QyKHNlbGYpOgorICAgICAgICBwcm9nX3RleHRfMiA9ICIiIlwKK2RlZiB3cm9uZzIoKToKKyAgICBwcmludCB4CisgICAgZ2xvYmFsIHgKKyIiIgorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgcHJvZ190ZXh0XzIpCisKKyAgICBkZWYgdGVzdDMoc2VsZik6CisgICAgICAgIHByb2dfdGV4dF8zID0gIiIiXAorZGVmIHdyb25nMygpOgorICAgIHByaW50IHgKKyAgICB4ID0gMgorICAgIGdsb2JhbCB4CisiIiIKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsIHByb2dfdGV4dF8zKQorCisgICAgZGVmIHRlc3Q0KHNlbGYpOgorICAgICAgICBwcm9nX3RleHRfNCA9ICIiIlwKK2dsb2JhbCB4Cit4ID0gMgorIiIiCisgICAgICAgICMgdGhpcyBzaG91bGQgd29yaworICAgICAgICBjb21waWxlKHByb2dfdGV4dF80LCAiPHRlc3Qgc3RyaW5nPiIsICJleGVjIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCBtb2R1bGU9Ijx0ZXN0IHN0cmluZz4iKQorICAgICAgICBydW5fdW5pdHRlc3QoR2xvYmFsVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2Y2MwODQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CkBAIC0wLDAgKzEsMTAyMSBAQAorIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCAxLCBncmFtbWFyLgorIyBUaGlzIGp1c3QgdGVzdHMgd2hldGhlciB0aGUgcGFyc2VyIGFjY2VwdHMgdGhlbSBhbGwuCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfc3ludGF4X2Vycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19weTNrX3dhcm5pbmdzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKKyMgdGVzdGluZyBpbXBvcnQgKgorZnJvbSBzeXMgaW1wb3J0ICoKKworCitjbGFzcyBUb2tlblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0QmFja3NsYXNoKHNlbGYpOgorICAgICAgICAjIEJhY2tzbGFzaCBtZWFucyBsaW5lIGNvbnRpbnVhdGlvbjoKKyAgICAgICAgeCA9IDEgXAorICAgICAgICArIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAyLCAnYmFja3NsYXNoIGZvciBsaW5lIGNvbnRpbnVhdGlvbicpCisKKyAgICAgICAgIyBCYWNrc2xhc2ggZG9lcyBub3QgbWVhbnMgY29udGludWF0aW9uIGluIGNvbW1lbnRzIDpcCisgICAgICAgIHggPSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMCwgJ2JhY2tzbGFzaCBlbmRpbmcgY29tbWVudCcpCisKKyAgICBkZWYgdGVzdFBsYWluSW50ZWdlcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmZiwgMjU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAzNzcsIDI1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyMTQ3NDgzNjQ3LCAwMTc3Nzc3Nzc3NzcpCisgICAgICAgICMgIjB4IiBpcyBub3QgYSB2YWxpZCBsaXRlcmFsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiMHgiKQorICAgICAgICBmcm9tIHN5cyBpbXBvcnQgbWF4aW50CisgICAgICAgIGlmIG1heGludCA9PSAyMTQ3NDgzNjQ3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMjE0NzQ4MzY0Ny0xLCAtMDIwMDAwMDAwMDAwKQorICAgICAgICAgICAgIyBYWFggLTIxNDc0ODM2NDgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwMzc3Nzc3Nzc3NzcgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDB4ZmZmZmZmZmYgPiAwKQorICAgICAgICAgICAgZm9yIHMgaW4gJzIxNDc0ODM2NDgnLCAnMDQwMDAwMDAwMDAwJywgJzB4MTAwMDAwMDAwJzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHggPSBldmFsKHMpCisgICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiT3ZlcmZsb3dFcnJvciBvbiBodWdlIGludGVnZXIgbGl0ZXJhbCAlciIgJSBzKQorICAgICAgICBlbGlmIG1heGludCA9PSA5MjIzMzcyMDM2ODU0Nzc1ODA3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtOTIyMzM3MjAzNjg1NDc3NTgwNy0xLCAtMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDB4ZmZmZmZmZmZmZmZmZmZmZiA+IDApCisgICAgICAgICAgICBmb3IgcyBpbiAnOTIyMzM3MjAzNjg1NDc3NTgwOCcsICcwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICcweDEwMDAwMDAwMDAwMDAwMDAwJzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHggPSBldmFsKHMpCisgICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiT3ZlcmZsb3dFcnJvciBvbiBodWdlIGludGVnZXIgbGl0ZXJhbCAlciIgJSBzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdXZWlyZCBtYXhpbnQgdmFsdWUgJXInICUgbWF4aW50KQorCisgICAgZGVmIHRlc3RMb25nSW50ZWdlcnMoc2VsZik6CisgICAgICAgIHggPSAwTAorICAgICAgICB4ID0gMGwKKyAgICAgICAgeCA9IDB4ZmZmZmZmZmZmZmZmZmZmZkwKKyAgICAgICAgeCA9IDB4ZmZmZmZmZmZmZmZmZmZmZmwKKyAgICAgICAgeCA9IDA3Nzc3Nzc3Nzc3Nzc3Nzc3N0wKKyAgICAgICAgeCA9IDA3Nzc3Nzc3Nzc3Nzc3Nzc3N2wKKyAgICAgICAgeCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MEwKKyAgICAgICAgeCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MGwKKworICAgIGRlZiB0ZXN0RmxvYXRzKHNlbGYpOgorICAgICAgICB4ID0gMy4xNAorICAgICAgICB4ID0gMzE0LgorICAgICAgICB4ID0gMC4zMTQKKyAgICAgICAgIyBYWFggeCA9IDAwMC4zMTQKKyAgICAgICAgeCA9IC4zMTQKKyAgICAgICAgeCA9IDNlMTQKKyAgICAgICAgeCA9IDNFMTQKKyAgICAgICAgeCA9IDNlLTE0CisgICAgICAgIHggPSAzZSsxNAorICAgICAgICB4ID0gMy5lMTQKKyAgICAgICAgeCA9IC4zZTE0CisgICAgICAgIHggPSAzLjFlNAorCisgICAgZGVmIHRlc3RTdHJpbmdMaXRlcmFscyhzZWxmKToKKyAgICAgICAgeCA9ICcnOyB5ID0gIiI7IHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMCBhbmQgeCA9PSB5KQorICAgICAgICB4ID0gJ1wnJzsgeSA9ICInIjsgc2VsZi5hc3NlcnRUcnVlKGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzOSkKKyAgICAgICAgeCA9ICciJzsgeSA9ICJcIiI7IHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMSBhbmQgeCA9PSB5IGFuZCBvcmQoeCkgPT0gMzQpCisgICAgICAgIHggPSAiZG9lc24ndCBcInNocmlua1wiIGRvZXMgaXQiCisgICAgICAgIHkgPSAnZG9lc25cJ3QgInNocmluayIgZG9lcyBpdCcKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQorICAgICAgICB4ID0gImRvZXMgXCJzaHJpbmtcIiBkb2Vzbid0IGl0IgorICAgICAgICB5ID0gJ2RvZXMgInNocmluayIgZG9lc25cJ3QgaXQnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMjQgYW5kIHggPT0geSkKKyAgICAgICAgeCA9ICIiIgorVGhlICJxdWljayIKK2Jyb3duIGZveAoranVtcHMgb3ZlcgordGhlICdsYXp5JyBkb2cuCisiIiIKKyAgICAgICAgeSA9ICdcblRoZSAicXVpY2siXG5icm93biBmb3hcbmp1bXBzIG92ZXJcbnRoZSBcJ2xhenlcJyBkb2cuXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgeSA9ICcnJworVGhlICJxdWljayIKK2Jyb3duIGZveAoranVtcHMgb3ZlcgordGhlICdsYXp5JyBkb2cuCisnJycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICB5ID0gIlxuXAorVGhlIFwicXVpY2tcIlxuXAorYnJvd24gZm94XG5cCitqdW1wcyBvdmVyXG5cCit0aGUgJ2xhenknIGRvZy5cblwKKyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICB5ID0gJ1xuXAorVGhlIFwicXVpY2tcIlxuXAorYnJvd24gZm94XG5cCitqdW1wcyBvdmVyXG5cCit0aGUgXCdsYXp5XCcgZG9nLlxuXAorJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisKKworY2xhc3MgR3JhbW1hclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgc2luZ2xlX2lucHV0OiBORVdMSU5FIHwgc2ltcGxlX3N0bXQgfCBjb21wb3VuZF9zdG10IE5FV0xJTkUKKyAgICAjIFhYWCBjYW4ndCB0ZXN0IGluIGEgc2NyaXB0IC0tIHRoaXMgcnVsZSBpcyBvbmx5IHVzZWQgd2hlbiBpbnRlcmFjdGl2ZQorCisgICAgIyBmaWxlX2lucHV0OiAoTkVXTElORSB8IHN0bXQpKiBFTkRNQVJLRVIKKyAgICAjIEJlaW5nIHRlc3RlZCBhcyB0aGlzIHZlcnkgbW9tZW50IHRoaXMgdmVyeSBtb2R1bGUKKworICAgICMgZXhwcl9pbnB1dDogdGVzdGxpc3QgTkVXTElORQorICAgICMgWFhYIEhhcmQgdG8gdGVzdCAtLSB1c2VkIG9ubHkgaW4gY2FsbHMgdG8gaW5wdXQoKQorCisgICAgZGVmIHRlc3RFdmFsSW5wdXQoc2VsZik6CisgICAgICAgICMgdGVzdGxpc3QgRU5ETUFSS0VSCisgICAgICAgIHggPSBldmFsKCcxLCAwIG9yIDEnKQorCisgICAgZGVmIHRlc3RGdW5jZGVmKHNlbGYpOgorICAgICAgICAjIyMgJ2RlZicgTkFNRSBwYXJhbWV0ZXJzICc6JyBzdWl0ZQorICAgICAgICAjIyMgcGFyYW1ldGVyczogJygnIFt2YXJhcmdzbGlzdF0gJyknCisgICAgICAgICMjIyB2YXJhcmdzbGlzdDogKGZwZGVmIFsnPScgdGVzdF0gJywnKSogKCcqJyBOQU1FIFsnLCcgKCcqKid8JyonICcqJykgTkFNRV0KKyAgICAgICAgIyMjICAgICAgICAgICAgfCAoJyoqJ3wnKicgJyonKSBOQU1FKQorICAgICAgICAjIyMgICAgICAgICAgICB8IGZwZGVmIFsnPScgdGVzdF0gKCcsJyBmcGRlZiBbJz0nIHRlc3RdKSogWycsJ10KKyAgICAgICAgIyMjIGZwZGVmOiBOQU1FIHwgJygnIGZwbGlzdCAnKScKKyAgICAgICAgIyMjIGZwbGlzdDogZnBkZWYgKCcsJyBmcGRlZikqIFsnLCddCisgICAgICAgICMjIyBhcmdsaXN0OiAoYXJndW1lbnQgJywnKSogKGFyZ3VtZW50IHwgKicgdGVzdCBbJywnICcqKicgdGVzdF0gfCAnKionIHRlc3QpCisgICAgICAgICMjIyBhcmd1bWVudDogW3Rlc3QgJz0nXSB0ZXN0ICAgIyBSZWFsbHkgW2tleXdvcmQgJz0nXSB0ZXN0CisgICAgICAgIGRlZiBmMSgpOiBwYXNzCisgICAgICAgIGYxKCkKKyAgICAgICAgZjEoKigpKQorICAgICAgICBmMSgqKCksICoqe30pCisgICAgICAgIGRlZiBmMihvbmVfYXJndW1lbnQpOiBwYXNzCisgICAgICAgIGRlZiBmMyh0d28sIGFyZ3VtZW50cyk6IHBhc3MKKyAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICBleGVjKCdkZWYgZjQodHdvLCAoY29tcG91bmQsIChhcmd1bWVudCwgbGlzdCkpKTogcGFzcycpCisgICAgICAgIGV4ZWMoJ2RlZiBmNSgoY29tcG91bmQsIGZpcnN0KSwgdHdvKTogcGFzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ29uZV9hcmd1bWVudCcsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMy5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgndHdvJywgJ2FyZ3VtZW50cycpKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmNC5mdW5jX2NvZGUuY29fdmFybmFtZXMsCisgICAgICAgICAgICAgICAgICAgKCd0d28nLCAnKGNvbXBvdW5kLCAoYXJndW1lbnQsIGxpc3QpKScsICdjb21wb3VuZCcsICdhcmd1bWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaXN0JywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmNS5mdW5jX2NvZGUuY29fdmFybmFtZXMsCisgICAgICAgICAgICAgICAgICAgKCcoY29tcG91bmQsIGZpcnN0KScsICd0d28nLCAnY29tcG91bmQnLCAnZmlyc3QnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjQuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgICAgICAgKCd0d28nLCAnLjEnLCAnY29tcG91bmQnLCAnYXJndW1lbnQnLCAgJ2xpc3QnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjUuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgICAgICAgKCcuMCcsICd0d28nLCAnY29tcG91bmQnLCAnZmlyc3QnKSkKKyAgICAgICAgZGVmIGExKG9uZV9hcmcsKTogcGFzcworICAgICAgICBkZWYgYTIodHdvLCBhcmdzLCk6IHBhc3MKKyAgICAgICAgZGVmIHYwKCpyZXN0KTogcGFzcworICAgICAgICBkZWYgdjEoYSwgKnJlc3QpOiBwYXNzCisgICAgICAgIGRlZiB2MihhLCBiLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICBleGVjKCdkZWYgdjMoYSwgKGIsIGMpLCAqcmVzdCk6IHJldHVybiBhLCBiLCBjLCByZXN0JykKKworICAgICAgICBmMSgpCisgICAgICAgIGYyKDEpCisgICAgICAgIGYyKDEsKQorICAgICAgICBmMygxLCAyKQorICAgICAgICBmMygxLCAyLCkKKyAgICAgICAgZjQoMSwgKDIsICgzLCA0KSkpCisgICAgICAgIHYwKCkKKyAgICAgICAgdjAoMSkKKyAgICAgICAgdjAoMSwpCisgICAgICAgIHYwKDEsMikKKyAgICAgICAgdjAoMSwyLDMsNCw1LDYsNyw4LDksMCkKKyAgICAgICAgdjEoMSkKKyAgICAgICAgdjEoMSwpCisgICAgICAgIHYxKDEsMikKKyAgICAgICAgdjEoMSwyLDMpCisgICAgICAgIHYxKDEsMiwzLDQsNSw2LDcsOCw5LDApCisgICAgICAgIHYyKDEsMikKKyAgICAgICAgdjIoMSwyLDMpCisgICAgICAgIHYyKDEsMiwzLDQpCisgICAgICAgIHYyKDEsMiwzLDQsNSw2LDcsOCw5LDApCisgICAgICAgIHYzKDEsKDIsMykpCisgICAgICAgIHYzKDEsKDIsMyksNCkKKyAgICAgICAgdjMoMSwoMiwzKSw0LDUsNiw3LDgsOSwwKQorCisgICAgICAgICMgY2V2YWwgdW5wYWNrcyB0aGUgZm9ybWFsIGFyZ3VtZW50cyBpbnRvIHRoZSBmaXJzdCBhcmdjb3VudCBuYW1lczsKKyAgICAgICAgIyB0aHVzLCB0aGUgbmFtZXMgbmVzdGVkIGluc2lkZSB0dXBsZXMgbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlc2UgbmFtZXMuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYzLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdhJywgJyhiLCBjKScsICdyZXN0JywgJ2InLCAnYycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2My5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgnYScsICcuMScsICdyZXN0JywgJ2InLCAnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYzKDEsICgyLCAzKSwgNCksICgxLCAyLCAzLCAoNCwpKSkKKyAgICAgICAgZGVmIGQwMShhPTEpOiBwYXNzCisgICAgICAgIGQwMSgpCisgICAgICAgIGQwMSgxKQorICAgICAgICBkMDEoKigxLCkpCisgICAgICAgIGQwMSgqKnsnYSc6Mn0pCisgICAgICAgIGRlZiBkMTEoYSwgYj0xKTogcGFzcworICAgICAgICBkMTEoMSkKKyAgICAgICAgZDExKDEsIDIpCisgICAgICAgIGQxMSgxLCAqKnsnYic6Mn0pCisgICAgICAgIGRlZiBkMjEoYSwgYiwgYz0xKTogcGFzcworICAgICAgICBkMjEoMSwgMikKKyAgICAgICAgZDIxKDEsIDIsIDMpCisgICAgICAgIGQyMSgqKDEsIDIsIDMpKQorICAgICAgICBkMjEoMSwgKigyLCAzKSkKKyAgICAgICAgZDIxKDEsIDIsICooMywpKQorICAgICAgICBkMjEoMSwgMiwgKip7J2MnOjN9KQorICAgICAgICBkZWYgZDAyKGE9MSwgYj0yKTogcGFzcworICAgICAgICBkMDIoKQorICAgICAgICBkMDIoMSkKKyAgICAgICAgZDAyKDEsIDIpCisgICAgICAgIGQwMigqKDEsIDIpKQorICAgICAgICBkMDIoMSwgKigyLCkpCisgICAgICAgIGQwMigxLCAqKnsnYic6Mn0pCisgICAgICAgIGQwMigqKnsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIGRlZiBkMTIoYSwgYj0xLCBjPTIpOiBwYXNzCisgICAgICAgIGQxMigxKQorICAgICAgICBkMTIoMSwgMikKKyAgICAgICAgZDEyKDEsIDIsIDMpCisgICAgICAgIGRlZiBkMjIoYSwgYiwgYz0xLCBkPTIpOiBwYXNzCisgICAgICAgIGQyMigxLCAyKQorICAgICAgICBkMjIoMSwgMiwgMykKKyAgICAgICAgZDIyKDEsIDIsIDMsIDQpCisgICAgICAgIGRlZiBkMDF2KGE9MSwgKnJlc3QpOiBwYXNzCisgICAgICAgIGQwMXYoKQorICAgICAgICBkMDF2KDEpCisgICAgICAgIGQwMXYoMSwgMikKKyAgICAgICAgZDAxdigqKDEsIDIsIDMsIDQpKQorICAgICAgICBkMDF2KCooMSwpKQorICAgICAgICBkMDF2KCoqeydhJzoyfSkKKyAgICAgICAgZGVmIGQxMXYoYSwgYj0xLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgZDExdigxKQorICAgICAgICBkMTF2KDEsIDIpCisgICAgICAgIGQxMXYoMSwgMiwgMykKKyAgICAgICAgZGVmIGQyMXYoYSwgYiwgYz0xLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgZDIxdigxLCAyKQorICAgICAgICBkMjF2KDEsIDIsIDMpCisgICAgICAgIGQyMXYoMSwgMiwgMywgNCkKKyAgICAgICAgZDIxdigqKDEsIDIsIDMsIDQpKQorICAgICAgICBkMjF2KDEsIDIsICoqeydjJzogM30pCisgICAgICAgIGRlZiBkMDJ2KGE9MSwgYj0yLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgZDAydigpCisgICAgICAgIGQwMnYoMSkKKyAgICAgICAgZDAydigxLCAyKQorICAgICAgICBkMDJ2KDEsIDIsIDMpCisgICAgICAgIGQwMnYoMSwgKigyLCAzLCA0KSkKKyAgICAgICAgZDAydigqKnsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIGRlZiBkMTJ2KGEsIGI9MSwgYz0yLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgZDEydigxKQorICAgICAgICBkMTJ2KDEsIDIpCisgICAgICAgIGQxMnYoMSwgMiwgMykKKyAgICAgICAgZDEydigxLCAyLCAzLCA0KQorICAgICAgICBkMTJ2KCooMSwgMiwgMywgNCkpCisgICAgICAgIGQxMnYoMSwgMiwgKigzLCA0LCA1KSkKKyAgICAgICAgZDEydigxLCAqKDIsKSwgKip7J2MnOiAzfSkKKyAgICAgICAgZGVmIGQyMnYoYSwgYiwgYz0xLCBkPTIsICpyZXN0KTogcGFzcworICAgICAgICBkMjJ2KDEsIDIpCisgICAgICAgIGQyMnYoMSwgMiwgMykKKyAgICAgICAgZDIydigxLCAyLCAzLCA0KQorICAgICAgICBkMjJ2KDEsIDIsIDMsIDQsIDUpCisgICAgICAgIGQyMnYoKigxLCAyLCAzLCA0KSkKKyAgICAgICAgZDIydigxLCAyLCAqKDMsIDQsIDUpKQorICAgICAgICBkMjJ2KDEsICooMiwgMyksICoqeydkJzogNH0pCisgICAgICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgZXhlYygnZGVmIGQzMXYoKHgpKTogcGFzcycpCisgICAgICAgIGV4ZWMoJ2RlZiBkMzJ2KCh4LCkpOiBwYXNzJykKKyAgICAgICAgZDMxdigxKQorICAgICAgICBkMzJ2KCgxLCkpCisKKyAgICAgICAgIyBrZXl3b3JkIGFyZ3VtZW50cyBhZnRlciAqYXJnbGlzdAorICAgICAgICBkZWYgZigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MsIGt3YXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMSwgeD0yLCAqWzMsIDRdLCB5PTUpLCAoKDEsIDMsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsneCc6MiwgJ3knOjV9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICJmKDEsICooMiwzKSwgNCkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgImYoMSwgeD0yLCAqKDMsNCksIHg9NSkiKQorCisgICAgICAgICMgQ2hlY2sgYXN0IGVycm9ycyBpbiAqYXJncyBhbmQgKmt3YXJncworICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImYoKmcoMT0yKSkiKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImYoKipnKDE9MikpIikKKworICAgIGRlZiB0ZXN0TGFtYmRlZihzZWxmKToKKyAgICAgICAgIyMjIGxhbWJkZWY6ICdsYW1iZGEnIFt2YXJhcmdzbGlzdF0gJzonIHRlc3QKKyAgICAgICAgbDEgPSBsYW1iZGEgOiAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEoKSwgMCkKKyAgICAgICAgbDIgPSBsYW1iZGEgOiBhW2RdICMgWFhYIGp1c3QgdGVzdGluZyB0aGUgZXhwcmVzc2lvbgorICAgICAgICBsMyA9IGxhbWJkYSA6IFsyIDwgeCBmb3IgeCBpbiBbLTEsIDMsIDBMXV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMygpLCBbMCwgMSwgMF0pCisgICAgICAgIGw0ID0gbGFtYmRhIHggPSBsYW1iZGEgeSA9IGxhbWJkYSB6PTEgOiB6IDogeSgpIDogeCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDQoKSwgMSkKKyAgICAgICAgbDUgPSBsYW1iZGEgeCwgeSwgej0yOiB4ICsgeSArIHoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsNSgxLCAyKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsNSgxLCAyLCAzKSwgNikKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJsYW1iZGEgeDogeCA9IDIiKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImxhbWJkYSAoTm9uZSwpOiBOb25lIikKKworICAgICMjIyBzdG10OiBzaW1wbGVfc3RtdCB8IGNvbXBvdW5kX3N0bXQKKyAgICAjIFRlc3RlZCBiZWxvdworCisgICAgZGVmIHRlc3RTaW1wbGVTdG10KHNlbGYpOgorICAgICAgICAjIyMgc2ltcGxlX3N0bXQ6IHNtYWxsX3N0bXQgKCc7JyBzbWFsbF9zdG10KSogWyc7J10KKyAgICAgICAgeCA9IDE7IHBhc3M7IGRlbCB4CisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgICMgdmVyaWZ5IHN0YXRlbWVudHMgdGhhdCBlbmQgd2l0aCBzZW1pLWNvbG9ucworICAgICAgICAgICAgeCA9IDE7IHBhc3M7IGRlbCB4OworICAgICAgICBmb28oKQorCisgICAgIyMjIHNtYWxsX3N0bXQ6IGV4cHJfc3RtdCB8IHByaW50X3N0bXQgIHwgcGFzc19zdG10IHwgZGVsX3N0bXQgfCBmbG93X3N0bXQgfCBpbXBvcnRfc3RtdCB8IGdsb2JhbF9zdG10IHwgYWNjZXNzX3N0bXQgfCBleGVjX3N0bXQKKyAgICAjIFRlc3RlZCBiZWxvdworCisgICAgZGVmIHRlc3RFeHByU3RtdChzZWxmKToKKyAgICAgICAgIyAoZXhwcmxpc3QgJz0nKSogZXhwcmxpc3QKKyAgICAgICAgMQorICAgICAgICAxLCAyLCAzCisgICAgICAgIHggPSAxCisgICAgICAgIHggPSAxLCAyLCAzCisgICAgICAgIHggPSB5ID0geiA9IDEsIDIsIDMKKyAgICAgICAgeCwgeSwgeiA9IDEsIDIsIDMKKyAgICAgICAgYWJjID0gYSwgYiwgYyA9IHgsIHksIHogPSB4eXogPSAxLCAyLCAoMywgNCkKKworICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgInggKyAxID0gMSIpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiYSArIDEgPSBiICsgMiIpCisKKyAgICBkZWYgdGVzdFByaW50U3RtdChzZWxmKToKKyAgICAgICAgIyAncHJpbnQnICh0ZXN0ICcsJykqIFt0ZXN0XQorICAgICAgICBpbXBvcnQgU3RyaW5nSU8KKworICAgICAgICAjIENhbid0IHRlc3QgcHJpbnRpbmcgdG8gcmVhbCBzdGRvdXQgd2l0aG91dCBjb21wYXJpbmcgb3V0cHV0CisgICAgICAgICMgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbiB1bml0dGVzdC4KKyAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisKKyAgICAgICAgcHJpbnQgMSwgMiwgMworICAgICAgICBwcmludCAxLCAyLCAzLAorICAgICAgICBwcmludAorICAgICAgICBwcmludCAwIG9yIDEsIDAgb3IgMSwKKyAgICAgICAgcHJpbnQgMCBvciAxCisKKyAgICAgICAgIyAncHJpbnQnICc+PicgdGVzdCAnLCcKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZG91dCwgMSwgMiwgMworICAgICAgICBwcmludCA+PiBzeXMuc3Rkb3V0LCAxLCAyLCAzLAorICAgICAgICBwcmludCA+PiBzeXMuc3Rkb3V0CisgICAgICAgIHByaW50ID4+IHN5cy5zdGRvdXQsIDAgb3IgMSwgMCBvciAxLAorICAgICAgICBwcmludCA+PiBzeXMuc3Rkb3V0LCAwIG9yIDEKKworICAgICAgICAjIHRlc3QgcHJpbnRpbmcgdG8gYW4gaW5zdGFuY2UKKyAgICAgICAgY2xhc3MgR3VscDoKKyAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBtc2cpOiBwYXNzCisKKyAgICAgICAgZ3VscCA9IEd1bHAoKQorICAgICAgICBwcmludCA+PiBndWxwLCAxLCAyLCAzCisgICAgICAgIHByaW50ID4+IGd1bHAsIDEsIDIsIDMsCisgICAgICAgIHByaW50ID4+IGd1bHAKKyAgICAgICAgcHJpbnQgPj4gZ3VscCwgMCBvciAxLCAwIG9yIDEsCisgICAgICAgIHByaW50ID4+IGd1bHAsIDAgb3IgMQorCisgICAgICAgICMgdGVzdCBwcmludCA+PiBOb25lCisgICAgICAgIGRlZiBkcml2ZXIoKToKKyAgICAgICAgICAgIG9sZHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBHdWxwKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZWxsbWUoR3VscCgpKQorICAgICAgICAgICAgICAgIHRlbGxtZSgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBvbGRzdGRvdXQKKworICAgICAgICAjIHdlIHNob3VsZCBzZWUgdGhpcyBvbmNlCisgICAgICAgIGRlZiB0ZWxsbWUoZmlsZT1zeXMuc3Rkb3V0KToKKyAgICAgICAgICAgIHByaW50ID4+IGZpbGUsICdoZWxsbyB3b3JsZCcKKworICAgICAgICBkcml2ZXIoKQorCisgICAgICAgICMgd2Ugc2hvdWxkIG5vdCBzZWUgdGhpcyBhdCBhbGwKKyAgICAgICAgZGVmIHRlbGxtZShmaWxlPU5vbmUpOgorICAgICAgICAgICAgcHJpbnQgPj4gZmlsZSwgJ2dvb2RieWUgdW5pdmVyc2UnCisKKyAgICAgICAgZHJpdmVyKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5zdGRvdXQuZ2V0dmFsdWUoKSwgJycnXAorMSAyIDMKKzEgMiAzCisxIDEgMQorMSAyIDMKKzEgMiAzCisxIDEgMQoraGVsbG8gd29ybGQKKycnJykKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisKKyAgICAgICAgIyBzeW50YXggZXJyb3JzCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAncHJpbnQgLCcpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAncHJpbnQgPj4geCwnKQorCisgICAgZGVmIHRlc3REZWxTdG10KHNlbGYpOgorICAgICAgICAjICdkZWwnIGV4cHJsaXN0CisgICAgICAgIGFiYyA9IFsxLDIsM10KKyAgICAgICAgeCwgeSwgeiA9IGFiYworICAgICAgICB4eXogPSB4LCB5LCB6CisKKyAgICAgICAgZGVsIGFiYworICAgICAgICBkZWwgeCwgeSwgKHosIHh5eikKKworICAgIGRlZiB0ZXN0UGFzc1N0bXQoc2VsZik6CisgICAgICAgICMgJ3Bhc3MnCisgICAgICAgIHBhc3MKKworICAgICMgZmxvd19zdG10OiBicmVha19zdG10IHwgY29udGludWVfc3RtdCB8IHJldHVybl9zdG10IHwgcmFpc2Vfc3RtdAorICAgICMgVGVzdGVkIGJlbG93CisKKyAgICBkZWYgdGVzdEJyZWFrU3RtdChzZWxmKToKKyAgICAgICAgIyAnYnJlYWsnCisgICAgICAgIHdoaWxlIDE6IGJyZWFrCisKKyAgICBkZWYgdGVzdENvbnRpbnVlU3RtdChzZWxmKToKKyAgICAgICAgIyAnY29udGludWUnCisgICAgICAgIGkgPSAxCisgICAgICAgIHdoaWxlIGk6IGkgPSAwOyBjb250aW51ZQorCisgICAgICAgIG1zZyA9ICIiCisgICAgICAgIHdoaWxlIG5vdCBtc2c6CisgICAgICAgICAgICBtc2cgPSAib2siCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBtc2cgPSAiY29udGludWUgZmFpbGVkIHRvIGNvbnRpbnVlIGluc2lkZSB0cnkiCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbXNnID0gImNvbnRpbnVlIGluc2lkZSB0cnkgY2FsbGVkIGV4Y2VwdCBibG9jayIKKyAgICAgICAgaWYgbXNnICE9ICJvayI6CisgICAgICAgICAgICBzZWxmLmZhaWwobXNnKQorCisgICAgICAgIG1zZyA9ICIiCisgICAgICAgIHdoaWxlIG5vdCBtc2c6CisgICAgICAgICAgICBtc2cgPSAiZmluYWxseSBibG9jayBub3QgY2FsbGVkIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG1zZyA9ICJvayIKKyAgICAgICAgaWYgbXNnICE9ICJvayI6CisgICAgICAgICAgICBzZWxmLmZhaWwobXNnKQorCisgICAgZGVmIHRlc3RfYnJlYWtfY29udGludWVfbG9vcChzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3Qgd2FycmFudHMgYW4gZXhwbGFuYXRpb24uIEl0IGlzIGEgdGVzdCBzcGVjaWZpY2FsbHkgZm9yIFNGIGJ1Z3MKKyAgICAgICAgIyAjNDYzMzU5IGFuZCAjNDYyOTM3LiBUaGUgYnVnIGlzIHRoYXQgYSAnYnJlYWsnIHN0YXRlbWVudCBleGVjdXRlZCBvcgorICAgICAgICAjIGV4Y2VwdGlvbiByYWlzZWQgaW5zaWRlIGEgdHJ5L2V4Y2VwdCBpbnNpZGUgYSBsb29wLCAqYWZ0ZXIqIGEgY29udGludWUKKyAgICAgICAgIyBzdGF0ZW1lbnQgaGFzIGJlZW4gZXhlY3V0ZWQgaW4gdGhhdCBsb29wLCB3aWxsIGNhdXNlIHRoZSB3cm9uZyBudW1iZXIgb2YKKyAgICAgICAgIyBhcmd1bWVudHMgdG8gYmUgcG9wcGVkIG9mZiB0aGUgc3RhY2sgYW5kIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHJlc2V0IHRvCisgICAgICAgICMgYSB2ZXJ5IHNtYWxsIG51bWJlciAodXN1YWxseSAwLikgQmVjYXVzZSBvZiB0aGlzLCB0aGUgZm9sbG93aW5nIHRlc3QKKyAgICAgICAgIyAqbXVzdCogd3JpdHRlbiBhcyBhIGZ1bmN0aW9uLCBhbmQgdGhlIHRyYWNraW5nIHZhcnMgKm11c3QqIGJlIGZ1bmN0aW9uCisgICAgICAgICMgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMuIE90aGVyd2lzZSwgdGhlIHRlc3Qgd2lsbCBsb29wIGFuZCBsb29wLgorCisgICAgICAgIGRlZiB0ZXN0X2lubmVyKGV4dHJhX2J1cm5pbmdfb2lsID0gMSwgY291bnQ9MCk6CisgICAgICAgICAgICBiaWdfaGlwcG8gPSAyCisgICAgICAgICAgICB3aGlsZSBiaWdfaGlwcG86CisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaWYgZXh0cmFfYnVybmluZ19vaWwgYW5kIGJpZ19oaXBwbyA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfYnVybmluZ19vaWwgLT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgYmlnX2hpcHBvIC09IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBpZiBjb3VudCA+IDIgb3IgYmlnX2hpcHBvICE9IDE6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJjb250aW51ZSB0aGVuIGJyZWFrIGluIHRyeS9leGNlcHQgaW4gbG9vcCBicm9rZW4hIikKKyAgICAgICAgdGVzdF9pbm5lcigpCisKKyAgICBkZWYgdGVzdFJldHVybihzZWxmKToKKyAgICAgICAgIyAncmV0dXJuJyBbdGVzdGxpc3RdCisgICAgICAgIGRlZiBnMSgpOiByZXR1cm4KKyAgICAgICAgZGVmIGcyKCk6IHJldHVybiAxCisgICAgICAgIGcxKCkKKyAgICAgICAgeCA9IGcyKCkKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJjbGFzcyBmb286cmV0dXJuIDEiKQorCisgICAgZGVmIHRlc3RZaWVsZChzZWxmKToKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJjbGFzcyBmb286eWllbGQgMSIpCisKKyAgICBkZWYgdGVzdFJhaXNlKHNlbGYpOgorICAgICAgICAjICdyYWlzZScgdGVzdCBbJywnIHRlc3RdCisgICAgICAgIHRyeTogcmFpc2UgUnVudGltZUVycm9yLCAnanVzdCB0ZXN0aW5nJworICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOiBwYXNzCisgICAgICAgIHRyeTogcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OiBwYXNzCisKKyAgICBkZWYgdGVzdEltcG9ydChzZWxmKToKKyAgICAgICAgIyAnaW1wb3J0JyBkb3R0ZWRfYXNfbmFtZXMKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpbXBvcnQgdGltZSwgc3lzCisgICAgICAgICMgJ2Zyb20nIGRvdHRlZF9uYW1lICdpbXBvcnQnICgnKicgfCAnKCcgaW1wb3J0X2FzX25hbWVzICcpJyB8IGltcG9ydF9hc19uYW1lcykKKyAgICAgICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lCisgICAgICAgIGZyb20gdGltZSBpbXBvcnQgKHRpbWUpCisgICAgICAgICMgbm90IHRlc3RhYmxlIGluc2lkZSBhIGZ1bmN0aW9uLCBidXQgYWxyZWFkeSBkb25lIGF0IHRvcCBvZiB0aGUgbW9kdWxlCisgICAgICAgICMgZnJvbSBzeXMgaW1wb3J0ICoKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IHBhdGgsIGFyZ3YKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IChwYXRoLCBhcmd2KQorICAgICAgICBmcm9tIHN5cyBpbXBvcnQgKHBhdGgsIGFyZ3YsKQorCisgICAgZGVmIHRlc3RHbG9iYWwoc2VsZik6CisgICAgICAgICMgJ2dsb2JhbCcgTkFNRSAoJywnIE5BTUUpKgorICAgICAgICBnbG9iYWwgYQorICAgICAgICBnbG9iYWwgYSwgYgorICAgICAgICBnbG9iYWwgb25lLCB0d28sIHRocmVlLCBmb3VyLCBmaXZlLCBzaXgsIHNldmVuLCBlaWdodCwgbmluZSwgdGVuCisKKyAgICBkZWYgdGVzdEV4ZWMoc2VsZik6CisgICAgICAgICMgJ2V4ZWMnIGV4cHIgWydpbicgZXhwciBbJywnIGV4cHJdXQorICAgICAgICB6ID0gTm9uZQorICAgICAgICBkZWwgegorICAgICAgICBleGVjICd6PTErMVxuJworICAgICAgICBpZiB6ICE9IDI6IHNlbGYuZmFpbCgnZXhlYyBcJ3o9MSsxXCdcXG4nKQorICAgICAgICBkZWwgegorICAgICAgICBleGVjICd6PTErMScKKyAgICAgICAgaWYgeiAhPSAyOiBzZWxmLmZhaWwoJ2V4ZWMgXCd6PTErMVwnJykKKyAgICAgICAgeiA9IE5vbmUKKyAgICAgICAgZGVsIHoKKyAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgIGlmIGhhc2F0dHIodHlwZXMsICJVbmljb2RlVHlwZSIpOgorICAgICAgICAgICAgZXhlYyByIiIiaWYgMToKKyAgICAgICAgICAgIGV4ZWMgdSd6PTErMVxuJworICAgICAgICAgICAgaWYgeiAhPSAyOiBzZWxmLmZhaWwoJ2V4ZWMgdVwnej0xKzFcJ1xcbicpCisgICAgICAgICAgICBkZWwgegorICAgICAgICAgICAgZXhlYyB1J3o9MSsxJworICAgICAgICAgICAgaWYgeiAhPSAyOiBzZWxmLmZhaWwoJ2V4ZWMgdVwnej0xKzFcJycpIiIiCisgICAgICAgIGcgPSB7fQorICAgICAgICBleGVjICd6ID0gMScgaW4gZworICAgICAgICBpZiAnX19idWlsdGluc19fJyBpbiBnOiBkZWwgZ1snX19idWlsdGluc19fJ10KKyAgICAgICAgaWYgZyAhPSB7J3onOiAxfTogc2VsZi5mYWlsKCdleGVjIFwneiA9IDFcJyBpbiBnJykKKyAgICAgICAgZyA9IHt9CisgICAgICAgIGwgPSB7fQorCisgICAgICAgIGV4ZWMgJ2dsb2JhbCBhOyBhID0gMTsgYiA9IDInIGluIGcsIGwKKyAgICAgICAgaWYgJ19fYnVpbHRpbnNfXycgaW4gZzogZGVsIGdbJ19fYnVpbHRpbnNfXyddCisgICAgICAgIGlmICdfX2J1aWx0aW5zX18nIGluIGw6IGRlbCBsWydfX2J1aWx0aW5zX18nXQorICAgICAgICBpZiAoZywgbCkgIT0gKHsnYSc6MX0sIHsnYic6Mn0pOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdleGVjIC4uLiBpbiBnICglcyksIGwgKCVzKScgJShnLGwpKQorCisgICAgZGVmIHRlc3RBc3NlcnQoc2VsZik6CisgICAgICAgICMgYXNzZXJ0VHJ1ZXN0bXQ6ICdhc3NlcnQnIHRlc3QgWycsJyB0ZXN0XQorICAgICAgICBhc3NlcnQgMQorICAgICAgICBhc3NlcnQgMSwgMQorICAgICAgICBhc3NlcnQgbGFtYmRhIHg6eAorICAgICAgICBhc3NlcnQgMSwgbGFtYmRhIHg6eCsxCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0IFRydWUKKyAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoIidhc3NlcnQgVHJ1ZScgc2hvdWxkIG5vdCBoYXZlIHJhaXNlZCBhbiBBc3NlcnRpb25FcnJvciIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0IFRydWUsICd0aGlzIHNob3VsZCBhbHdheXMgcGFzcycKKyAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoIidhc3NlcnQgVHJ1ZSwgbXNnJyBzaG91bGQgbm90IGhhdmUgIgorICAgICAgICAgICAgICAgICAgICAgICJyYWlzZWQgYW4gQXNzZXJ0aW9uRXJyb3IiKQorCisgICAgIyB0aGVzZSB0ZXN0cyBmYWlsIGlmIHB5dGhvbiBpcyBydW4gd2l0aCAtTywgc28gY2hlY2sgX19kZWJ1Z19fCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoX19kZWJ1Z19fLCAiV29uJ3Qgd29yayBpZiBfX2RlYnVnX18gaXMgRmFsc2UiKQorICAgIGRlZiB0ZXN0QXNzZXJ0MihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0IDAsICJtc2ciCisgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAibXNnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQXNzZXJ0aW9uRXJyb3Igbm90IHJhaXNlZCBieSBhc3NlcnQgMCIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0IEZhbHNlCisgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZS5hcmdzKSwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQXNzZXJ0aW9uRXJyb3Igbm90IHJhaXNlZCBieSAnYXNzZXJ0IEZhbHNlJyIpCisKKworICAgICMjIyBjb21wb3VuZF9zdG10OiBpZl9zdG10IHwgd2hpbGVfc3RtdCB8IGZvcl9zdG10IHwgdHJ5X3N0bXQgfCBmdW5jZGVmIHwgY2xhc3NkZWYKKyAgICAjIFRlc3RlZCBiZWxvdworCisgICAgZGVmIHRlc3RJZihzZWxmKToKKyAgICAgICAgIyAnaWYnIHRlc3QgJzonIHN1aXRlICgnZWxpZicgdGVzdCAnOicgc3VpdGUpKiBbJ2Vsc2UnICc6JyBzdWl0ZV0KKyAgICAgICAgaWYgMTogcGFzcworICAgICAgICBpZiAxOiBwYXNzCisgICAgICAgIGVsc2U6IHBhc3MKKyAgICAgICAgaWYgMDogcGFzcworICAgICAgICBlbGlmIDA6IHBhc3MKKyAgICAgICAgaWYgMDogcGFzcworICAgICAgICBlbGlmIDA6IHBhc3MKKyAgICAgICAgZWxpZiAwOiBwYXNzCisgICAgICAgIGVsaWYgMDogcGFzcworICAgICAgICBlbHNlOiBwYXNzCisKKyAgICBkZWYgdGVzdFdoaWxlKHNlbGYpOgorICAgICAgICAjICd3aGlsZScgdGVzdCAnOicgc3VpdGUgWydlbHNlJyAnOicgc3VpdGVdCisgICAgICAgIHdoaWxlIDA6IHBhc3MKKyAgICAgICAgd2hpbGUgMDogcGFzcworICAgICAgICBlbHNlOiBwYXNzCisKKyAgICAgICAgIyBJc3N1ZTE5MjA6ICJ3aGlsZSAwIiBpcyBvcHRpbWl6ZWQgYXdheSwKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgImVsc2UiIGNsYXVzZSBpcyBzdGlsbCBwcmVzZW50LgorICAgICAgICB4ID0gMAorICAgICAgICB3aGlsZSAwOgorICAgICAgICAgICAgeCA9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHggPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMikKKworICAgIGRlZiB0ZXN0Rm9yKHNlbGYpOgorICAgICAgICAjICdmb3InIGV4cHJsaXN0ICdpbicgZXhwcmxpc3QgJzonIHN1aXRlIFsnZWxzZScgJzonIHN1aXRlXQorICAgICAgICBmb3IgaSBpbiAxLCAyLCAzOiBwYXNzCisgICAgICAgIGZvciBpLCBqLCBrIGluICgpOiBwYXNzCisgICAgICAgIGVsc2U6IHBhc3MKKyAgICAgICAgY2xhc3MgU3F1YXJlczoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXgpOgorICAgICAgICAgICAgICAgIHNlbGYubWF4ID0gbWF4CisgICAgICAgICAgICAgICAgc2VsZi5zb2ZhciA9IFtdCisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIGxlbihzZWxmLnNvZmFyKQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIGlmIG5vdCAwIDw9IGkgPCBzZWxmLm1heDogcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5zb2ZhcikKKyAgICAgICAgICAgICAgICB3aGlsZSBuIDw9IGk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29mYXIuYXBwZW5kKG4qbikKKyAgICAgICAgICAgICAgICAgICAgbiA9IG4rMQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvZmFyW2ldCisgICAgICAgIG4gPSAwCisgICAgICAgIGZvciB4IGluIFNxdWFyZXMoMTApOiBuID0gbit4CisgICAgICAgIGlmIG4gIT0gMjg1OgorICAgICAgICAgICAgc2VsZi5mYWlsKCdmb3Igb3ZlciBncm93aW5nIHNlcXVlbmNlJykKKworICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgeCwgaW4gWygxLCksICgyLCksICgzLCldOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWzEsIDIsIDNdKQorCisgICAgZGVmIHRlc3RUcnkoc2VsZik6CisgICAgICAgICMjIyB0cnlfc3RtdDogJ3RyeScgJzonIHN1aXRlIChleGNlcHRfY2xhdXNlICc6JyBzdWl0ZSkrIFsnZWxzZScgJzonIHN1aXRlXQorICAgICAgICAjIyMgICAgICAgICB8ICd0cnknICc6JyBzdWl0ZSAnZmluYWxseScgJzonIHN1aXRlCisgICAgICAgICMjIyBleGNlcHRfY2xhdXNlOiAnZXhjZXB0JyBbZXhwciBbKCdhcycgfCAnLCcpIGV4cHJdXQorICAgICAgICB0cnk6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6IDEvMAorICAgICAgICBleGNlcHQgRU9GRXJyb3I6IHBhc3MKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBtc2c6IHBhc3MKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciwgbXNnOiBwYXNzCisgICAgICAgIGV4Y2VwdDogcGFzcworICAgICAgICBlbHNlOiBwYXNzCisgICAgICAgIHRyeTogMS8wCisgICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIFR5cGVFcnJvciwgWmVyb0RpdmlzaW9uRXJyb3IpOiBwYXNzCisgICAgICAgIHRyeTogMS8wCisgICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIFR5cGVFcnJvciwgWmVyb0RpdmlzaW9uRXJyb3IpLCBtc2c6IHBhc3MKKyAgICAgICAgdHJ5OiBwYXNzCisgICAgICAgIGZpbmFsbHk6IHBhc3MKKworICAgIGRlZiB0ZXN0U3VpdGUoc2VsZik6CisgICAgICAgICMgc2ltcGxlX3N0bXQgfCBORVdMSU5FIElOREVOVCBORVdMSU5FKiAoc3RtdCBORVdMSU5FKikrIERFREVOVAorICAgICAgICBpZiAxOiBwYXNzCisgICAgICAgIGlmIDE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIDE6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjCisgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjCisKKyAgICBkZWYgdGVzdFRlc3Qoc2VsZik6CisgICAgICAgICMjIyBhbmRfdGVzdCAoJ29yJyBhbmRfdGVzdCkqCisgICAgICAgICMjIyBhbmRfdGVzdDogbm90X3Rlc3QgKCdhbmQnIG5vdF90ZXN0KSoKKyAgICAgICAgIyMjIG5vdF90ZXN0OiAnbm90JyBub3RfdGVzdCB8IGNvbXBhcmlzb24KKyAgICAgICAgaWYgbm90IDE6IHBhc3MKKyAgICAgICAgaWYgMSBhbmQgMTogcGFzcworICAgICAgICBpZiAxIG9yIDE6IHBhc3MKKyAgICAgICAgaWYgbm90IG5vdCBub3QgMTogcGFzcworICAgICAgICBpZiBub3QgMSBhbmQgMSBhbmQgMTogcGFzcworICAgICAgICBpZiAxIGFuZCAxIG9yIDEgYW5kIDEgYW5kIDEgb3Igbm90IDEgYW5kIDE6IHBhc3MKKworICAgIGRlZiB0ZXN0Q29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgIyMjIGNvbXBhcmlzb246IGV4cHIgKGNvbXBfb3AgZXhwcikqCisgICAgICAgICMjIyBjb21wX29wOiAnPCd8Jz4nfCc9PSd8Jz49J3wnPD0nfCc8Pid8JyE9J3wnaW4nfCdub3QnICdpbid8J2lzJ3wnaXMnICdub3QnCisgICAgICAgIGlmIDE6IHBhc3MKKyAgICAgICAgeCA9ICgxID09IDEpCisgICAgICAgIGlmIDEgPT0gMTogcGFzcworICAgICAgICBpZiAxICE9IDE6IHBhc3MKKyAgICAgICAgaWYgMSA8IDE6IHBhc3MKKyAgICAgICAgaWYgMSA+IDE6IHBhc3MKKyAgICAgICAgaWYgMSA8PSAxOiBwYXNzCisgICAgICAgIGlmIDEgPj0gMTogcGFzcworICAgICAgICBpZiAxIGlzIDE6IHBhc3MKKyAgICAgICAgaWYgMSBpcyBub3QgMTogcGFzcworICAgICAgICBpZiAxIGluICgpOiBwYXNzCisgICAgICAgIGlmIDEgbm90IGluICgpOiBwYXNzCisgICAgICAgIGlmIDEgPCAxID4gMSA9PSAxID49IDEgPD0gMSAhPSAxIGluIDEgbm90IGluIDEgaXMgMSBpcyBub3QgMTogcGFzcworICAgICAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgIGlmIGV2YWwoJzEgPD4gMScpOiBwYXNzCisgICAgICAgIGlmIGV2YWwoJzEgPCAxID4gMSA9PSAxID49IDEgPD0gMSA8PiAxICE9IDEgaW4gMSBub3QgaW4gMSBpcyAxIGlzIG5vdCAxJyk6IHBhc3MKKworICAgIGRlZiB0ZXN0QmluYXJ5TWFza09wcyhzZWxmKToKKyAgICAgICAgeCA9IDEgJiAxCisgICAgICAgIHggPSAxIF4gMQorICAgICAgICB4ID0gMSB8IDEKKworICAgIGRlZiB0ZXN0U2hpZnRPcHMoc2VsZik6CisgICAgICAgIHggPSAxIDw8IDEKKyAgICAgICAgeCA9IDEgPj4gMQorICAgICAgICB4ID0gMSA8PCAxID4+IDEKKworICAgIGRlZiB0ZXN0QWRkaXRpdmVPcHMoc2VsZik6CisgICAgICAgIHggPSAxCisgICAgICAgIHggPSAxICsgMQorICAgICAgICB4ID0gMSAtIDEgLSAxCisgICAgICAgIHggPSAxIC0gMSArIDEgLSAxICsgMQorCisgICAgZGVmIHRlc3RNdWx0aXBsaWNhdGl2ZU9wcyhzZWxmKToKKyAgICAgICAgeCA9IDEgKiAxCisgICAgICAgIHggPSAxIC8gMQorICAgICAgICB4ID0gMSAlIDEKKyAgICAgICAgeCA9IDEgLyAxICogMSAlIDEKKworICAgIGRlZiB0ZXN0VW5hcnlPcHMoc2VsZik6CisgICAgICAgIHggPSArMQorICAgICAgICB4ID0gLTEKKyAgICAgICAgeCA9IH4xCisgICAgICAgIHggPSB+MSBeIDEgJiAxIHwgMSAmIDEgXiAtMQorICAgICAgICB4ID0gLTEqMS8xICsgMSoxIC0gLS0tMSoxCisKKyAgICBkZWYgdGVzdFNlbGVjdG9ycyhzZWxmKToKKyAgICAgICAgIyMjIHRyYWlsZXI6ICcoJyBbdGVzdGxpc3RdICcpJyB8ICdbJyBzdWJzY3JpcHQgJ10nIHwgJy4nIE5BTUUKKyAgICAgICAgIyMjIHN1YnNjcmlwdDogZXhwciB8IFtleHByXSAnOicgW2V4cHJdCisKKyAgICAgICAgaW1wb3J0IHN5cywgdGltZQorICAgICAgICBjID0gc3lzLnBhdGhbMF0KKyAgICAgICAgeCA9IHRpbWUudGltZSgpCisgICAgICAgIHggPSBzeXMubW9kdWxlc1sndGltZSddLnRpbWUoKQorICAgICAgICBhID0gJzAxMjM0JworICAgICAgICBjID0gYVswXQorICAgICAgICBjID0gYVstMV0KKyAgICAgICAgcyA9IGFbMDo1XQorICAgICAgICBzID0gYVs6NV0KKyAgICAgICAgcyA9IGFbMDpdCisgICAgICAgIHMgPSBhWzpdCisgICAgICAgIHMgPSBhWy01Ol0KKyAgICAgICAgcyA9IGFbOi0xXQorICAgICAgICBzID0gYVstNDotM10KKyAgICAgICAgIyBBIHJvdWdoIHRlc3Qgb2YgU0YgYnVnIDEzMzM5ODIuICBodHRwOi8vcHl0aG9uLm9yZy9zZi8xMzMzOTgyCisgICAgICAgICMgVGhlIHRlc3RpbmcgaGVyZSBpcyBmYWlybHkgaW5jb21wbGV0ZS4KKyAgICAgICAgIyBUZXN0IGNhc2VzIHNob3VsZCBpbmNsdWRlOiBjb21tYXMgd2l0aCAxIGFuZCAyIGNvbG9ucworICAgICAgICBkID0ge30KKyAgICAgICAgZFsxXSA9IDEKKyAgICAgICAgZFsxLF0gPSAyCisgICAgICAgIGRbMSwyXSA9IDMKKyAgICAgICAgZFsxLDIsM10gPSA0CisgICAgICAgIEwgPSBsaXN0KGQpCisgICAgICAgIEwuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEwpLCAnWzEsICgxLCksICgxLCAyKSwgKDEsIDIsIDMpXScpCisKKyAgICBkZWYgdGVzdEF0b21zKHNlbGYpOgorICAgICAgICAjIyMgYXRvbTogJygnIFt0ZXN0bGlzdF0gJyknIHwgJ1snIFt0ZXN0bGlzdF0gJ10nIHwgJ3snIFtkaWN0bWFrZXJdICd9JyB8ICdgJyB0ZXN0bGlzdCAnYCcgfCBOQU1FIHwgTlVNQkVSIHwgU1RSSU5HCisgICAgICAgICMjIyBkaWN0b3JzZXRtYWtlcjogKHRlc3QgJzonIHRlc3QgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10pIHwgKHRlc3QgKCcsJyB0ZXN0KSogWycsJ10pCisKKyAgICAgICAgeCA9ICgxKQorICAgICAgICB4ID0gKDEgb3IgMiBvciAzKQorICAgICAgICB4ID0gKDEgb3IgMiBvciAzLCAyLCAzKQorCisgICAgICAgIHggPSBbXQorICAgICAgICB4ID0gWzFdCisgICAgICAgIHggPSBbMSBvciAyIG9yIDNdCisgICAgICAgIHggPSBbMSBvciAyIG9yIDMsIDIsIDNdCisgICAgICAgIHggPSBbXQorCisgICAgICAgIHggPSB7fQorICAgICAgICB4ID0geydvbmUnOiAxfQorICAgICAgICB4ID0geydvbmUnOiAxLH0KKyAgICAgICAgeCA9IHsnb25lJyBvciAndHdvJzogMSBvciAyfQorICAgICAgICB4ID0geydvbmUnOiAxLCAndHdvJzogMn0KKyAgICAgICAgeCA9IHsnb25lJzogMSwgJ3R3byc6IDIsfQorICAgICAgICB4ID0geydvbmUnOiAxLCAndHdvJzogMiwgJ3RocmVlJzogMywgJ2ZvdXInOiA0LCAnZml2ZSc6IDUsICdzaXgnOiA2fQorCisgICAgICAgIHggPSB7J29uZSd9CisgICAgICAgIHggPSB7J29uZScsIDEsfQorICAgICAgICB4ID0geydvbmUnLCAndHdvJywgJ3RocmVlJ30KKyAgICAgICAgeCA9IHsyLCAzLCA0LH0KKworICAgICAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgIHggPSBldmFsKCdgeGAnKQorICAgICAgICB4ID0gZXZhbCgnYDEgb3IgMiBvciAzYCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnYDEsMmAnKSwgJygxLCAyKScpCisKKyAgICAgICAgeCA9IHgKKyAgICAgICAgeCA9ICd4JworICAgICAgICB4ID0gMTIzCisKKyAgICAjIyMgZXhwcmxpc3Q6IGV4cHIgKCcsJyBleHByKSogWycsJ10KKyAgICAjIyMgdGVzdGxpc3Q6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10KKyAgICAjIFRoZXNlIGhhdmUgYmVlbiBleGVyY2lzZWQgZW5vdWdoIGFib3ZlCisKKyAgICBkZWYgdGVzdENsYXNzZGVmKHNlbGYpOgorICAgICAgICAjICdjbGFzcycgTkFNRSBbJygnIFt0ZXN0bGlzdF0gJyknXSAnOicgc3VpdGUKKyAgICAgICAgY2xhc3MgQjogcGFzcworICAgICAgICBjbGFzcyBCMigpOiBwYXNzCisgICAgICAgIGNsYXNzIEMxKEIpOiBwYXNzCisgICAgICAgIGNsYXNzIEMyKEIpOiBwYXNzCisgICAgICAgIGNsYXNzIEQoQzEsIEMyLCBCKTogcGFzcworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIG1ldGgxKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgbWV0aDIoc2VsZiwgYXJnKTogcGFzcworICAgICAgICAgICAgZGVmIG1ldGgzKHNlbGYsIGExLCBhMik6IHBhc3MKKyAgICAgICAgIyBkZWNvcmF0b3I6ICdAJyBkb3R0ZWRfbmFtZSBbICcoJyBbYXJnbGlzdF0gJyknIF0gTkVXTElORQorICAgICAgICAjIGRlY29yYXRvcnM6IGRlY29yYXRvcisKKyAgICAgICAgIyBkZWNvcmF0ZWQ6IGRlY29yYXRvcnMgKGNsYXNzZGVmIHwgZnVuY2RlZikKKyAgICAgICAgZGVmIGNsYXNzX2RlY29yYXRvcih4KToKKyAgICAgICAgICAgIHguZGVjb3JhdGVkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgQGNsYXNzX2RlY29yYXRvcgorICAgICAgICBjbGFzcyBHOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEcuZGVjb3JhdGVkLCBUcnVlKQorCisgICAgZGVmIHRlc3REaWN0Y29tcHMoc2VsZik6CisgICAgICAgICMgZGljdG9yc2V0bWFrZXI6ICggKHRlc3QgJzonIHRlc3QgKGNvbXBfZm9yIHwKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10pKSB8CisgICAgICAgICMgICAgICAgICAgICAgICAgICAgKHRlc3QgKGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10pKSApCisgICAgICAgIG51bXMgPSBbMSwgMiwgM10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7aTppKzEgZm9yIGkgaW4gbnVtc30sIHsxOiAyLCAyOiAzLCAzOiA0fSkKKworICAgIGRlZiB0ZXN0TGlzdGNvbXBzKHNlbGYpOgorICAgICAgICAjIGxpc3QgY29tcHJlaGVuc2lvbiB0ZXN0cworICAgICAgICBudW1zID0gWzEsIDIsIDMsIDQsIDVdCisgICAgICAgIHN0cnMgPSBbIkFwcGxlIiwgIkJhbmFuYSIsICJDb2NvbnV0Il0KKyAgICAgICAgc3BjcyA9IFsiICBBcHBsZSIsICIgQmFuYW5hICIsICJDb2NvICBudXQgICJdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbcy5zdHJpcCgpIGZvciBzIGluIHNwY3NdLCBbJ0FwcGxlJywgJ0JhbmFuYScsICdDb2NvICBudXQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMyAqIHggZm9yIHggaW4gbnVtc10sIFszLCA2LCA5LCAxMiwgMTVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt4IGZvciB4IGluIG51bXMgaWYgeCA+IDJdLCBbMywgNCwgNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhpLCBzKSBmb3IgaSBpbiBudW1zIGZvciBzIGluIHN0cnNdLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoMSwgJ0FwcGxlJyksICgxLCAnQmFuYW5hJyksICgxLCAnQ29jb251dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ0FwcGxlJyksICgyLCAnQmFuYW5hJyksICgyLCAnQ29jb251dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ0FwcGxlJyksICgzLCAnQmFuYW5hJyksICgzLCAnQ29jb251dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ0FwcGxlJyksICg0LCAnQmFuYW5hJyksICg0LCAnQ29jb251dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ0FwcGxlJyksICg1LCAnQmFuYW5hJyksICg1LCAnQ29jb251dCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGksIHMpIGZvciBpIGluIG51bXMgZm9yIHMgaW4gW2YgZm9yIGYgaW4gc3RycyBpZiAibiIgaW4gZl1dLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoMSwgJ0JhbmFuYScpLCAoMSwgJ0NvY29udXQnKSwgKDIsICdCYW5hbmEnKSwgKDIsICdDb2NvbnV0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnQmFuYW5hJyksICgzLCAnQ29jb251dCcpLCAoNCwgJ0JhbmFuYScpLCAoNCwgJ0NvY29udXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdCYW5hbmEnKSwgKDUsICdDb2NvbnV0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsobGFtYmRhIGE6W2EqKmkgZm9yIGkgaW4gcmFuZ2UoYSsxKV0pKGopIGZvciBqIGluIHJhbmdlKDUpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbWzFdLCBbMSwgMV0sIFsxLCAyLCA0XSwgWzEsIDMsIDksIDI3XSwgWzEsIDQsIDE2LCA2NCwgMjU2XV0pCisKKyAgICAgICAgZGVmIHRlc3RfaW5fZnVuYyhsKToKKyAgICAgICAgICAgIHJldHVybiBbTm9uZSA8IHggPCAzIGZvciB4IGluIGwgaWYgeCA+IDJdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X2luX2Z1bmMobnVtcyksIFtGYWxzZSwgRmFsc2UsIEZhbHNlXSkKKworICAgICAgICBkZWYgdGVzdF9uZXN0ZWRfZnJvbnQoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW1t5IGZvciB5IGluIFt4LCB4ICsgMV1dIGZvciB4IGluIFsxLDMsNV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWzEsIDJdLCBbMywgNF0sIFs1LCA2XV0pCisKKyAgICAgICAgdGVzdF9uZXN0ZWRfZnJvbnQoKQorCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiW2ksIHMgZm9yIGkgaW4gbnVtcyBmb3IgcyBpbiBzdHJzXSIpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiW3ggaWYgeV0iKQorCisgICAgICAgIHN1cHBsaWVycyA9IFsKKyAgICAgICAgICAoMSwgIkJvZWluZyIpLAorICAgICAgICAgICgyLCAiRm9yZCIpLAorICAgICAgICAgICgzLCAiTWFjZG9uYWxkcyIpCisgICAgICAgIF0KKworICAgICAgICBwYXJ0cyA9IFsKKyAgICAgICAgICAoMTAsICJBaXJsaW5lciIpLAorICAgICAgICAgICgyMCwgIkVuZ2luZSIpLAorICAgICAgICAgICgzMCwgIkNoZWVzZWJ1cmdlciIpCisgICAgICAgIF0KKworICAgICAgICBzdXBwYXJ0ID0gWworICAgICAgICAgICgxLCAxMCksICgxLCAyMCksICgyLCAyMCksICgzLCAzMCkKKyAgICAgICAgXQorCisgICAgICAgIHggPSBbCisgICAgICAgICAgKHNuYW1lLCBwbmFtZSkKKyAgICAgICAgICAgIGZvciAoc25vLCBzbmFtZSkgaW4gc3VwcGxpZXJzCisgICAgICAgICAgICAgIGZvciAocG5vLCBwbmFtZSkgaW4gcGFydHMKKyAgICAgICAgICAgICAgICBmb3IgKHNwX3Nubywgc3BfcG5vKSBpbiBzdXBwYXJ0CisgICAgICAgICAgICAgICAgICBpZiBzbm8gPT0gc3Bfc25vIGFuZCBwbm8gPT0gc3BfcG5vCisgICAgICAgIF0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIFsoJ0JvZWluZycsICdBaXJsaW5lcicpLCAoJ0JvZWluZycsICdFbmdpbmUnKSwgKCdGb3JkJywgJ0VuZ2luZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ01hY2RvbmFsZHMnLCAnQ2hlZXNlYnVyZ2VyJyldKQorCisgICAgZGVmIHRlc3RHZW5leHBzKHNlbGYpOgorICAgICAgICAjIGdlbmVyYXRvciBleHByZXNzaW9uIHRlc3RzCisgICAgICAgIGcgPSAoW3ggZm9yIHggaW4gcmFuZ2UoMTApXSBmb3IgeCBpbiByYW5nZSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLm5leHQoKSwgW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZy5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnc2hvdWxkIHByb2R1Y2UgU3RvcEl0ZXJhdGlvbiBleGNlcHRpb24nKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhID0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBnID0gKGEgZm9yIGQgaW4gYSkKKyAgICAgICAgICAgIGcubmV4dCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoJ3Nob3VsZCBwcm9kdWNlIFR5cGVFcnJvcicpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KCh4LCB5KSBmb3IgeCBpbiAnYWJjZCcgZm9yIHkgaW4gJ2FiY2QnKSwgWyh4LCB5KSBmb3IgeCBpbiAnYWJjZCcgZm9yIHkgaW4gJ2FiY2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KCh4LCB5KSBmb3IgeCBpbiAnYWInIGZvciB5IGluICd4eScpLCBbKHgsIHkpIGZvciB4IGluICdhYicgZm9yIHkgaW4gJ3h5J10pCisKKyAgICAgICAgYSA9IFt4IGZvciB4IGluIHJhbmdlKDEwKV0KKyAgICAgICAgYiA9ICh4IGZvciB4IGluICh5IGZvciB5IGluIGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShiKSwgc3VtKFt4IGZvciB4IGluIHJhbmdlKDEwKV0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHgqKjIgZm9yIHggaW4gcmFuZ2UoMTApKSwgc3VtKFt4KioyIGZvciB4IGluIHJhbmdlKDEwKV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4KnggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHglMiksIHN1bShbeCp4IGZvciB4IGluIHJhbmdlKDEwKSBpZiB4JTJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCBmb3IgeCBpbiAoeSBmb3IgeSBpbiByYW5nZSgxMCkpKSwgc3VtKFt4IGZvciB4IGluIHJhbmdlKDEwKV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4IGZvciB4IGluICh5IGZvciB5IGluICh6IGZvciB6IGluIHJhbmdlKDEwKSkpKSwgc3VtKFt4IGZvciB4IGluIHJhbmdlKDEwKV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4IGZvciB4IGluIFt5IGZvciB5IGluICh6IGZvciB6IGluIHJhbmdlKDEwKSldKSwgc3VtKFt4IGZvciB4IGluIHJhbmdlKDEwKV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4IGZvciB4IGluICh5IGZvciB5IGluICh6IGZvciB6IGluIHJhbmdlKDEwKSBpZiBUcnVlKSkgaWYgVHJ1ZSksIHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCBmb3IgeCBpbiAoeSBmb3IgeSBpbiAoeiBmb3IgeiBpbiByYW5nZSgxMCkgaWYgVHJ1ZSkgaWYgRmFsc2UpIGlmIFRydWUpLCAwKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImZvbyh4IGZvciB4IGluIHJhbmdlKDEwKSwgMTAwKSIpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiZm9vKDEwMCwgeCBmb3IgeCBpbiByYW5nZSgxMCkpIikKKworICAgIGRlZiB0ZXN0Q29tcHJlaGVuc2lvblNwZWNpYWxzKHNlbGYpOgorICAgICAgICAjIHRlc3QgZm9yIG91dG1vc3QgaXRlcmFibGUgcHJlY29tcHV0YXRpb24KKyAgICAgICAgeCA9IDEwOyBnID0gKGkgZm9yIGkgaW4gcmFuZ2UoeCkpOyB4ID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KGcpKSwgMTApCisKKyAgICAgICAgIyBUaGlzIHNob3VsZCBob2xkLCBzaW5jZSB3ZSdyZSBvbmx5IHByZWNvbXB1dGluZyBvdXRtb3N0IGl0ZXJhYmxlLgorICAgICAgICB4ID0gMTA7IHQgPSBGYWxzZTsgZyA9ICgoaSxqKSBmb3IgaSBpbiByYW5nZSh4KSBpZiB0IGZvciBqIGluIHJhbmdlKHgpKQorICAgICAgICB4ID0gNTsgdCA9IFRydWU7CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhpLGopIGZvciBpIGluIHJhbmdlKDEwKSBmb3IgaiBpbiByYW5nZSg1KV0sIGxpc3QoZykpCisKKyAgICAgICAgIyBHcmFtbWFyIGFsbG93cyBtdWx0aXBsZSBhZGphY2VudCAnaWYncyBpbiBsaXN0Y29tcHMgYW5kIGdlbmV4cHMsCisgICAgICAgICMgZXZlbiB0aG91Z2ggaXQncyBzaWxseS4gTWFrZSBzdXJlIGl0IHdvcmtzIChpZmVsc2UgYnJva2UgdGhpcy4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyB4IGZvciB4IGluIHJhbmdlKDEwKSBpZiB4ICUgMiBpZiB4ICUgMyBdLCBbMSwgNSwgN10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4IGZvciB4IGluIHJhbmdlKDEwKSBpZiB4ICUgMiBpZiB4ICUgMyksIFsxLCA1LCA3XSkKKworICAgICAgICAjIHZlcmlmeSB1bnBhY2tpbmcgc2luZ2xlIGVsZW1lbnQgdHVwbGVzIGluIGxpc3Rjb21wL2dlbmV4cC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbeCBmb3IgeCwgaW4gWyg0LCksICg1LCksICg2LCldXSwgWzQsIDUsIDZdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCBmb3IgeCwgaW4gWyg3LCksICg4LCksICg5LCldKSwgWzcsIDgsIDldKQorCisgICAgZGVmIHRlc3Rfd2l0aF9zdGF0ZW1lbnQoc2VsZik6CisgICAgICAgIGNsYXNzIG1hbmFnZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgxLCAyKQorICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2l0aCBtYW5hZ2VyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggbWFuYWdlcigpIGFzIHg6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggbWFuYWdlcigpIGFzICh4LCB5KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBtYW5hZ2VyKCksIG1hbmFnZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgeCwgbWFuYWdlcigpIGFzIHk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggbWFuYWdlcigpIGFzIHgsIG1hbmFnZXIoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0SWZFbHNlRXhwcihzZWxmKToKKyAgICAgICAgIyBUZXN0IGlmZWxzZSBleHByZXNzaW9ucyBpbiB2YXJpb3VzIGNhc2VzCisgICAgICAgIGRlZiBfY2hlY2tldmFsKG1zZywgcmV0KToKKyAgICAgICAgICAgICJoZWxwZXIgdG8gY2hlY2sgdGhhdCBldmFsdWF0aW9uIG9mIGV4cHJlc3Npb25zIGlzIGRvbmUgY29ycmVjdGx5IgorICAgICAgICAgICAgcHJpbnQgeAorICAgICAgICAgICAgcmV0dXJuIHJldAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyB4KCkgZm9yIHggaW4gbGFtYmRhOiBUcnVlLCBsYW1iZGE6IEZhbHNlIGlmIHgoKSBdLCBbVHJ1ZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyB4KCkgZm9yIHggaW4gKGxhbWJkYTogVHJ1ZSwgbGFtYmRhOiBGYWxzZSkgaWYgeCgpIF0sIFtUcnVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbIHgoRmFsc2UpIGZvciB4IGluIChsYW1iZGEgeDogRmFsc2UgaWYgeCBlbHNlIFRydWUsIGxhbWJkYSB4OiBUcnVlIGlmIHggZWxzZSBGYWxzZSkgaWYgeChGYWxzZSkgXSwgW1RydWVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1IGlmIDEgZWxzZSBfY2hlY2tldmFsKCJjaGVjayAxIiwgMCkpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChfY2hlY2tldmFsKCJjaGVjayAyIiwgMCkgaWYgMCBlbHNlIDUpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1IGFuZCA2IGlmIDAgZWxzZSAxKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoKDUgYW5kIDYpIGlmIDAgZWxzZSAxKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSBhbmQgKDYgaWYgMSBlbHNlIDEpKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCBvciBfY2hlY2tldmFsKCJjaGVjayAzIiwgMikgaWYgMCBlbHNlIDMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxIG9yIF9jaGVja2V2YWwoImNoZWNrIDQiLCAyKSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgNSIsIDMpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCBvciA1IGlmIDEgZWxzZSBfY2hlY2tldmFsKCJjaGVjayA2IiwgMykpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChub3QgNSBpZiAxIGVsc2UgMSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChub3QgNSBpZiAwIGVsc2UgMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDYgKyAxIGlmIDEgZWxzZSAyKSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiAtIDEgaWYgMSBlbHNlIDIpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2ICogMiBpZiAxIGVsc2UgNCksIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2IC8gMiBpZiAxIGVsc2UgMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDYgPCA0IGlmIDAgZWxzZSAyKSwgMikKKworICAgIGRlZiB0ZXN0X3BhcmVuX2V2YWx1YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTYgLy8gKDQgLy8gMiksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDE2IC8vIDQpIC8vIDIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTYgLy8gNCAvLyAyLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRmFsc2UgaXMgKDIgaXMgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKEZhbHNlIGlzIDIpIGlzIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRmFsc2UgaXMgMiBpcyAzKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoImJhY2txdW90ZSBub3Qgc3VwcG9ydGVkIiwgU3ludGF4V2FybmluZyksCisgICAgICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICAgICAgKCJwYXJlbnRoZXNpemVkIGFyZ3VtZW50IG5hbWVzIGFyZSBpbnZhbGlkIiwgU3ludGF4V2FybmluZyksCisgICAgICAgICAgICAoImNsYXNzaWMgaW50IGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICgiLisgbm90IHN1cHBvcnRlZCBpbiAzLngiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KFRva2VuVGVzdHMsIEdyYW1tYXJUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ3JwLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ3JwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDJiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ncnAucHkKQEAgLTAsMCArMSw5NyBAQAorIiIiVGVzdCBzY3JpcHQgZm9yIHRoZSBncnAgbW9kdWxlLiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2dycCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdncnAnKQorCitjbGFzcyBHcm91cERhdGFiYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX3ZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIyBjaGVjayB0aGF0IGEgZ3JwIHR1cGxlIGhhcyB0aGUgZW50cmllcyBhbmQKKyAgICAgICAgIyBhdHRyaWJ1dGVzIHByb21pc2VkIGJ5IHRoZSBkb2NzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVswXSwgdmFsdWUuZ3JfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLmdyX25hbWUsIGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbMV0sIHZhbHVlLmdyX3Bhc3N3ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLmdyX3Bhc3N3ZCwgYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsyXSwgdmFsdWUuZ3JfZ2lkKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsdWUuZ3JfZ2lkLCAobG9uZywgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVszXSwgdmFsdWUuZ3JfbWVtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsdWUuZ3JfbWVtLCBsaXN0KQorCisgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgorICAgICAgICBlbnRyaWVzID0gZ3JwLmdldGdyYWxsKCkKKworICAgICAgICBmb3IgZSBpbiBlbnRyaWVzOgorICAgICAgICAgICAgc2VsZi5jaGVja192YWx1ZShlKQorCisgICAgICAgIGlmIGxlbihlbnRyaWVzKSA+IDEwMDA6ICAjIEh1Z2UgZ3JvdXAgZmlsZSAoTklTPykgLS0gc2tpcCB0aGUgcmVzdAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIGUgaW4gZW50cmllczoKKyAgICAgICAgICAgIGUyID0gZ3JwLmdldGdyZ2lkKGUuZ3JfZ2lkKQorICAgICAgICAgICAgc2VsZi5jaGVja192YWx1ZShlMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTIuZ3JfZ2lkLCBlLmdyX2dpZCkKKyAgICAgICAgICAgIG5hbWUgPSBlLmdyX25hbWUKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnKycpIG9yIG5hbWUuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgICMgTklTLXJlbGF0ZWQgZW50cnkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZTIgPSBncnAuZ2V0Z3JuYW0obmFtZSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdmFsdWUoZTIpCisgICAgICAgICAgICAjIFRoZXJlIGFyZSBpbnN0YW5jZXMgd2hlcmUgZ2V0Z3JhbGwoKSByZXR1cm5zIGdyb3VwIG5hbWVzIGluCisgICAgICAgICAgICAjIGxvd2VyY2FzZSB3aGlsZSBnZXRncmdpZCgpIHJldHVybnMgcHJvcGVyIGNhc2luZy4KKyAgICAgICAgICAgICMgRGlzY292ZXJlZCBvbiBVYnVudHUgNS4wNCAoY3VzdG9tKS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTIuZ3JfbmFtZS5sb3dlcigpLCBuYW1lLmxvd2VyKCkpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ3JwLmdldGdyZ2lkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdycC5nZXRncm5hbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBncnAuZ2V0Z3JhbGwsIDQyKQorCisgICAgICAgICMgdHJ5IHRvIGdldCBzb21lIGVycm9ycworICAgICAgICBieW5hbWVzID0ge30KKyAgICAgICAgYnlnaWRzID0ge30KKyAgICAgICAgZm9yIChuLCBwLCBnLCBtZW0pIGluIGdycC5nZXRncmFsbCgpOgorICAgICAgICAgICAgaWYgbm90IG4gb3IgbiA9PSAnKyc6CisgICAgICAgICAgICAgICAgY29udGludWUgIyBza2lwIE5JUyBlbnRyaWVzIGV0Yy4KKyAgICAgICAgICAgIGJ5bmFtZXNbbl0gPSBnCisgICAgICAgICAgICBieWdpZHNbZ10gPSBuCisKKyAgICAgICAgYWxsbmFtZXMgPSBieW5hbWVzLmtleXMoKQorICAgICAgICBuYW1laSA9IDAKKyAgICAgICAgZmFrZW5hbWUgPSBhbGxuYW1lc1tuYW1laV0KKyAgICAgICAgd2hpbGUgZmFrZW5hbWUgaW4gYnluYW1lczoKKyAgICAgICAgICAgIGNoYXJzID0gbGlzdChmYWtlbmFtZSkKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY2hhcnMpKToKKyAgICAgICAgICAgICAgICBpZiBjaGFyc1tpXSA9PSAneic6CisgICAgICAgICAgICAgICAgICAgIGNoYXJzW2ldID0gJ0EnCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBjaGFyc1tpXSA9PSAnWic6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2hhcnNbaV0gPSBjaHIob3JkKGNoYXJzW2ldKSArIDEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5hbWVpID0gbmFtZWkgKyAxCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmYWtlbmFtZSA9IGFsbG5hbWVzW25hbWVpXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIHNob3VsZCBuZXZlciBoYXBwZW4uLi4gaWYgc28sIGp1c3QgZm9yZ2V0IGl0CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmYWtlbmFtZSA9ICcnLmpvaW4oY2hhcnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGdycC5nZXRncm5hbSwgZmFrZW5hbWUpCisKKyAgICAgICAgIyBDaG9vc2UgYSBub24tZXhpc3RlbnQgZ2lkLgorICAgICAgICBmYWtlZ2lkID0gNDEyNworICAgICAgICB3aGlsZSBmYWtlZ2lkIGluIGJ5Z2lkczoKKyAgICAgICAgICAgIGZha2VnaWQgPSAoZmFrZWdpZCAqIDMpICUgMHgxMDAwMAorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBncnAuZ2V0Z3JnaWQsIGZha2VnaWQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEdyb3VwRGF0YWJhc2VUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfZ3ppcC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2d6aXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyYzU2ZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2d6aXAucHkKQEAgLTAsMCArMSwzMDQgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIlRlc3Qgc2NyaXB0IGZvciB0aGUgZ3ppcCBtb2R1bGUuCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IG9zCitpbXBvcnQgaW8KK2ltcG9ydCBzdHJ1Y3QKK2d6aXAgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnZ3ppcCcpCisKK2RhdGExID0gIiIiICBpbnQgbGVuZ3RoPURFRkFVTFRBTExPQywgZXJyID0gWl9PSzsKKyAgUHlPYmplY3QgKlJldFZhbDsKKyAgaW50IGZsdXNobW9kZSA9IFpfRklOSVNIOworICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RvdGFsX291dDsKKworIiIiCisKK2RhdGEyID0gIiIiLyogemxpYm1vZHVsZS5jIC0tIGd6aXAtY29tcGF0aWJsZSBkYXRhIGNvbXByZXNzaW9uICovCisvKiBTZWUgaHR0cDovL3d3dy5nemlwLm9yZy96bGliLworLyogU2VlIGh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwgZm9yIFdpbmRvd3MgKi8KKyIiIgorCisKK2NsYXNzIFRlc3RHemlwKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBmaWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YTEgKiA1MCkKKworICAgICAgICAgICAgIyBUcnkgZmx1c2ggYW5kIGZpbGVuby4KKyAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICAgICAgZi5maWxlbm8oKQorICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgJ2ZzeW5jJyk6CisgICAgICAgICAgICAgICAgb3MuZnN5bmMoZi5maWxlbm8oKSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgVGVzdCBtdWx0aXBsZSBjbG9zZSgpIGNhbGxzLgorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCisgICAgICAgICMgVHJ5IHJlYWRpbmcuCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicpIGFzIGY6CisgICAgICAgICAgICBkID0gZi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkYXRhMSo1MCkKKworICAgIGRlZiB0ZXN0X3JlYWRfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgorICAgICAgICAjIElzc3VlICM1MTQ4OiBSZWFkaW5nIGJyZWFrcyB3aGVuIG1vZGUgY29udGFpbnMgJ1UnLgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JVJykgYXMgZjoKKyAgICAgICAgICAgIGQgPSBmLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRhdGExKjUwKQorCisgICAgZGVmIHRlc3RfaW9fb25fY2xvc2VkX29iamVjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgSS9PIG9wZXJhdGlvbnMgb24gY2xvc2VkIEd6aXBGaWxlIG9iamVjdHMgcmFpc2UgYQorICAgICAgICAjIFZhbHVlRXJyb3IsIGp1c3QgbGlrZSB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMgb24gZmlsZSBvYmplY3RzLgorCisgICAgICAgICMgV3JpdGUgdG8gYSBmaWxlLCBvcGVuIGl0IGZvciByZWFkaW5nLCB0aGVuIGNsb3NlIGl0LgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZi5yZWFkKDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYudGVsbCgpCisgICAgICAgICMgT3BlbiB0aGUgZmlsZSBmb3Igd3JpdGluZywgdGhlbiBjbG9zZSBpdC4KKyAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYud3JpdGUoJycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmLmZsdXNoKCkKKworICAgIGRlZiB0ZXN0X2FwcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKKyAgICAgICAgIyBBcHBlbmQgdG8gdGhlIHByZXZpb3VzIGZpbGUKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdhYicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEyICogMTUpCisKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkID0gZi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCAoZGF0YTEqNTApICsgKGRhdGEyKjE1KSkKKworICAgIGRlZiB0ZXN0X21hbnlfYXBwZW5kKHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMTA3NDI2MSB3YXMgdHJpZ2dlcmVkIHdoZW4gcmVhZGluZyBhIGZpbGUgdGhhdCBjb250YWluZWQKKyAgICAgICAgIyBtYW55LCBtYW55IG1lbWJlcnMuICBDcmVhdGUgc3VjaCBhIGZpbGUgYW5kIHZlcmlmeSB0aGF0IHJlYWRpbmcgaXQKKyAgICAgICAgIyB3b3Jrcy4KKyAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgJ3diJywgOSkgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ2EnKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAyMDApOgorICAgICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIiwgOSkgYXMgZjogIyBhcHBlbmQKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdhJykKKworICAgICAgICAjIFRyeSByZWFkaW5nIHRoZSBmaWxlCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIHpnZmlsZToKKyAgICAgICAgICAgIGNvbnRlbnRzID0gIiIKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgenR4dCA9IHpnZmlsZS5yZWFkKDgxOTIpCisgICAgICAgICAgICAgICAgY29udGVudHMgKz0genR4dAorICAgICAgICAgICAgICAgIGlmIG5vdCB6dHh0OiBicmVhaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCAnYScqMjAxKQorCisgICAgZGVmIHRlc3RfYnVmZmVyZWRfcmVhZGVyKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3NDcxOiBhIEd6aXBGaWxlIGNhbiBiZSB3cmFwcGVkIGluIGEgQnVmZmVyZWRSZWFkZXIgZm9yCisgICAgICAgICMgcGVyZm9ybWFuY2UuCisgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCisKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICB3aXRoIGlvLkJ1ZmZlcmVkUmVhZGVyKGYpIGFzIHI6CisgICAgICAgICAgICAgICAgbGluZXMgPSBbbGluZSBmb3IgbGluZSBpbiByXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIDUwICogZGF0YTEuc3BsaXRsaW5lcyhUcnVlKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorICAgICAgICAjIFRyeSAucmVhZGxpbmUoKSB3aXRoIHZhcnlpbmcgbGluZSBsZW5ndGhzCisKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBsaW5lX2xlbmd0aCA9IDAKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgTCA9IGYucmVhZGxpbmUobGluZV9sZW5ndGgpCisgICAgICAgICAgICAgICAgaWYgbm90IEwgYW5kIGxpbmVfbGVuZ3RoICE9IDA6IGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihMKSA8PSBsaW5lX2xlbmd0aCkKKyAgICAgICAgICAgICAgICBsaW5lX2xlbmd0aCA9IChsaW5lX2xlbmd0aCArIDEpICUgNTAKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKKyAgICAgICAgIyBUcnkgLnJlYWRsaW5lcygpCisKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBMID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBMID0gZi5yZWFkbGluZXMoMTUwKQorICAgICAgICAgICAgICAgIGlmIEwgPT0gW106IGJyZWFrCisKKyAgICBkZWYgdGVzdF9zZWVrX3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCisgICAgICAgICMgVHJ5IHNlZWssIHJlYWQgdGVzdAorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBmOgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBvbGRwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgIGxpbmUxID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUxOiBicmVhaworICAgICAgICAgICAgICAgIG5ld3BvcyA9IGYudGVsbCgpCisgICAgICAgICAgICAgICAgZi5zZWVrKG9sZHBvcykgICMgbmVnYXRpdmUgc2VlaworICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lMSk+MTA6CisgICAgICAgICAgICAgICAgICAgIGFtb3VudCA9IDEwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50ID0gbGVuKGxpbmUxKQorICAgICAgICAgICAgICAgIGxpbmUyID0gZi5yZWFkKGFtb3VudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxWzphbW91bnRdLCBsaW5lMikKKyAgICAgICAgICAgICAgICBmLnNlZWsobmV3cG9zKSAgIyBwb3NpdGl2ZSBzZWVrCisKKyAgICBkZWYgdGVzdF9zZWVrX3doZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKKyAgICAgICAgIyBUcnkgc2Vlayh3aGVuY2U9MSksIHJlYWQgdGVzdAorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBmOgorICAgICAgICAgICAgZi5yZWFkKDEwKQorICAgICAgICAgICAgZi5zZWVrKDEwLCB3aGVuY2U9MSkKKyAgICAgICAgICAgIHkgPSBmLnJlYWQoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgZGF0YTFbMjA6MzBdKQorCisgICAgZGVmIHRlc3Rfc2Vla193cml0ZShzZWxmKToKKyAgICAgICAgIyBUcnkgc2Vlaywgd3JpdGUgdGVzdAorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZm9yIHBvcyBpbiByYW5nZSgwLCAyNTYsIDE2KToKKyAgICAgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ0daXG4nKQorCisgICAgZGVmIHRlc3RfbW9kZShzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3JiJykKKworICAgIGRlZiB0ZXN0XzE2NDc0ODQoc2VsZik6CisgICAgICAgIGZvciBtb2RlIGluICgnd2InLCAncmInKToKKyAgICAgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGYsICJuYW1lIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsIHNlbGYuZmlsZW5hbWUpCisKKyAgICBkZWYgdGVzdF9tdGltZShzZWxmKToKKyAgICAgICAgbXRpbWUgPSAxMjM0NTY3ODkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3JywgbXRpbWUgPSBtdGltZSkgYXMgZldyaXRlOgorICAgICAgICAgICAgZldyaXRlLndyaXRlKGRhdGExKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSkgYXMgZlJlYWQ6CisgICAgICAgICAgICBkYXRhUmVhZCA9IGZSZWFkLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhUmVhZCwgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihmUmVhZCwgJ210aW1lJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZSZWFkLm10aW1lLCBtdGltZSkKKworICAgIGRlZiB0ZXN0X21ldGFkYXRhKHNlbGYpOgorICAgICAgICBtdGltZSA9IDEyMzQ1Njc4OQorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycsIG10aW1lID0gbXRpbWUpIGFzIGZXcml0ZToKKyAgICAgICAgICAgIGZXcml0ZS53cml0ZShkYXRhMSkKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZlJlYWQ6CisgICAgICAgICAgICAjIHNlZSBSRkMgMTk1MjogaHR0cDovL3d3dy5mYXFzLm9yZy9yZmNzL3JmYzE5NTIuaHRtbAorCisgICAgICAgICAgICBpZEJ5dGVzID0gZlJlYWQucmVhZCgyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZEJ5dGVzLCAnXHgxZlx4OGInKSAjIGd6aXAgSUQKKworICAgICAgICAgICAgY21CeXRlID0gZlJlYWQucmVhZCgxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbUJ5dGUsICdceDA4JykgIyBkZWZsYXRlCisKKyAgICAgICAgICAgIGZsYWdzQnl0ZSA9IGZSZWFkLnJlYWQoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZ3NCeXRlLCAnXHgwOCcpICMgb25seSB0aGUgRk5BTUUgZmxhZyBpcyBzZXQKKworICAgICAgICAgICAgbXRpbWVCeXRlcyA9IGZSZWFkLnJlYWQoNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWVCeXRlcywgc3RydWN0LnBhY2soJzxpJywgbXRpbWUpKSAjIGxpdHRsZS1lbmRpYW4KKworICAgICAgICAgICAgeGZsQnl0ZSA9IGZSZWFkLnJlYWQoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeGZsQnl0ZSwgJ1x4MDInKSAjIG1heGltdW0gY29tcHJlc3Npb24KKworICAgICAgICAgICAgb3NCeXRlID0gZlJlYWQucmVhZCgxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvc0J5dGUsICdceGZmJykgIyBPUyAidW5rbm93biIgKE9TLWluZGVwZW5kZW50KQorCisgICAgICAgICAgICAjIFNpbmNlIHRoZSBGTkFNRSBmbGFnIGlzIHNldCwgdGhlIHplcm8tdGVybWluYXRlZCBmaWxlbmFtZSBmb2xsb3dzLgorICAgICAgICAgICAgIyBSRkMgMTk1MiBzcGVjaWZpZXMgdGhhdCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBmaWxlLCBpZiBhbnkuCisgICAgICAgICAgICAjIEhvd2V2ZXIsIHRoZSBnemlwIG1vZHVsZSBkZWZhdWx0cyB0byBzdG9yaW5nIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQKKyAgICAgICAgICAgICMgZmlsZSBpbiB0aGlzIGZpZWxkLgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZpbGVuYW1lLmVuY29kZSgnTGF0aW4tMScpICsgJ1x4MDAnCisgICAgICAgICAgICBuYW1lQnl0ZXMgPSBmUmVhZC5yZWFkKGxlbihleHBlY3RlZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVCeXRlcywgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICMgU2luY2Ugbm8gb3RoZXIgZmxhZ3Mgd2VyZSBzZXQsIHRoZSBoZWFkZXIgZW5kcyBoZXJlLgorICAgICAgICAgICAgIyBSYXRoZXIgdGhhbiBwcm9jZXNzIHRoZSBjb21wcmVzc2VkIGRhdGEsIGxldCdzIHNlZWsgdG8gdGhlIHRyYWlsZXIuCisgICAgICAgICAgICBmUmVhZC5zZWVrKG9zLnN0YXQoc2VsZi5maWxlbmFtZSkuc3Rfc2l6ZSAtIDgpCisKKyAgICAgICAgICAgIGNyYzMyQnl0ZXMgPSBmUmVhZC5yZWFkKDQpICMgQ1JDMzIgb2YgdW5jb21wcmVzc2VkIGRhdGEgW2RhdGExXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmMzMkJ5dGVzLCAnXHhhZlx4ZDdkXHg4MycpCisKKyAgICAgICAgICAgIGlzaXplQnl0ZXMgPSBmUmVhZC5yZWFkKDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaXplQnl0ZXMsIHN0cnVjdC5wYWNrKCc8aScsIGxlbihkYXRhMSkpKQorCisgICAgZGVmIHRlc3Rfd2l0aF9vcGVuKHNlbGYpOgorICAgICAgICAjIEd6aXBGaWxlIHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIieHh4IikKKyAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgInJiIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2VudGVyX18gb24gYSBjbG9zZWQgZmlsZSBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiMSAvLyAwIGRpZG4ndCByYWlzZSBhbiBleGNlcHRpb24iKQorCisgICAgZGVmIHRlc3RfemVyb19wYWRkZWRfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGExICogNTApCisKKyAgICAgICAgIyBQYWQgdGhlIGZpbGUgd2l0aCB6ZXJvZXMKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJhYiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJceDAwIiAqIDUwKQorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZCA9IGYucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRhdGExICogNTAsICJJbmNvcnJlY3QgZGF0YSBpbiBmaWxlIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfZnJvbV9mZG9wZW4oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEzNzgxOiBDcmVhdGluZyBhIEd6aXBGaWxlIHVzaW5nIGEgZmlsZW9iaiBmcm9tIG9zLmZkb3BlbigpCisgICAgICAgICMgc2hvdWxkIG5vdCBlbWJlZCB0aGUgZmFrZSBmaWxlbmFtZSAiPGZkb3Blbj4iIGluIHRoZSBvdXRwdXQgZmlsZS4KKyAgICAgICAgZmQgPSBvcy5vcGVuKHNlbGYuZmlsZW5hbWUsIG9zLk9fV1JPTkxZIHwgb3MuT19DUkVBVCkKKyAgICAgICAgd2l0aCBvcy5mZG9wZW4oZmQsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1mLCBtb2RlPSJ3IikgYXMgZzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcubmFtZSwgIiIpCisKKyAgICBkZWYgdGVzdF9yZWFkX3dpdGhfZXh0cmEoc2VsZik6CisgICAgICAgICMgR3ppcCBkYXRhIHdpdGggYW4gZXh0cmEgZmllbGQKKyAgICAgICAgZ3pkYXRhID0gKGInXHgxZlx4OGJceDA4XHgwNFx4YjJceDE3Y1FceDAyXHhmZicKKyAgICAgICAgICAgICAgICAgIGInXHgwNVx4MDBFeHRyYScKKyAgICAgICAgICAgICAgICAgIGInXHgwYkktLlx4MDFceDAwMlx4ZDFNeFx4MDRceDAwXHgwMFx4MDAnKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKGd6ZGF0YSkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiJ1Rlc3QnKQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0R3ppcCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaGFzaC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2hhc2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjN2RjYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2hhc2gucHkKQEAgLTAsMCArMSwyNDggQEAKKyMgdGVzdCB0aGUgaW52YXJpYW50IHRoYXQKKyMgICBpZmYgYT09YiB0aGVuIGhhc2goYSk9PWhhc2goYikKKyMKKyMgQWxzbyB0ZXN0IHRoYXQgaGFzaCBpbXBsZW1lbnRhdGlvbnMgYXJlIGluaGVyaXRlZCBhcyBleHBlY3RlZAorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgSGFzaGFibGUKKworSVNfNjRCSVQgPSAoc3RydWN0LmNhbGNzaXplKCdsJykgPT0gOCkKKworCitjbGFzcyBIYXNoRXF1YWxpdHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2FtZV9oYXNoKHNlbGYsICpvYmpsaXN0KToKKyAgICAgICAgIyBIYXNoIGVhY2ggb2JqZWN0IGdpdmVuIGFuZCBmYWlsIGlmCisgICAgICAgICMgdGhlIGhhc2ggdmFsdWVzIGFyZSBub3QgYWxsIHRoZSBzYW1lLgorICAgICAgICBoYXNoZWQgPSBtYXAoaGFzaCwgb2JqbGlzdCkKKyAgICAgICAgZm9yIGggaW4gaGFzaGVkWzE6XToKKyAgICAgICAgICAgIGlmIGggIT0gaGFzaGVkWzBdOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaGFzaGVkIHZhbHVlcyBkaWZmZXI6ICVyIiAlIChvYmpsaXN0LCkpCisKKyAgICBkZWYgdGVzdF9udW1lcmljX2xpdGVyYWxzKHNlbGYpOgorICAgICAgICBzZWxmLnNhbWVfaGFzaCgxLCAxTCwgMS4wLCAxLjArMC4waikKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goMCwgMEwsIDAuMCwgMC4wKzAuMGopCisgICAgICAgIHNlbGYuc2FtZV9oYXNoKC0xLCAtMUwsIC0xLjAsIC0xLjArMC4waikKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goLTIsIC0yTCwgLTIuMCwgLTIuMCswLjBqKQorCisgICAgZGVmIHRlc3RfY29lcmNlZF9pbnRlZ2VycyhzZWxmKToKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KDEpLCBsb25nKDEpLCBmbG9hdCgxKSwgY29tcGxleCgxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KCcxJyksIGZsb2F0KCcxLjAnKSkKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KC0yKiozMSksIGxvbmcoLTIqKjMxKSwgZmxvYXQoLTIqKjMxKSkKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KDEtMioqMzEpLCBsb25nKDEtMioqMzEpLCBmbG9hdCgxLTIqKjMxKSkKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KDIqKjMxLTEpLCBsb25nKDIqKjMxLTEpLCBmbG9hdCgyKiozMS0xKSkKKyAgICAgICAgIyBmb3IgNjQtYml0IHBsYXRmb3JtcworICAgICAgICBzZWxmLnNhbWVfaGFzaChpbnQoMioqMzEpLCBsb25nKDIqKjMxKSwgZmxvYXQoMioqMzEpKQorICAgICAgICBzZWxmLnNhbWVfaGFzaChpbnQoLTIqKjYzKSwgbG9uZygtMioqNjMpLCBmbG9hdCgtMioqNjMpKQorICAgICAgICBzZWxmLnNhbWVfaGFzaChpbnQoMS0yKio2MyksIGxvbmcoMS0yKio2MykpCisgICAgICAgIHNlbGYuc2FtZV9oYXNoKGludCgyKio2My0xKSwgbG9uZygyKio2My0xKSkKKyAgICAgICAgc2VsZi5zYW1lX2hhc2gobG9uZygyKio2MyksIGZsb2F0KDIqKjYzKSkKKworICAgIGRlZiB0ZXN0X2NvZXJjZWRfZmxvYXRzKHNlbGYpOgorICAgICAgICBzZWxmLnNhbWVfaGFzaChsb25nKDEuMjNlMzAwKSwgZmxvYXQoMS4yM2UzMDApKQorICAgICAgICBzZWxmLnNhbWVfaGFzaChmbG9hdCgwLjUpLCBjb21wbGV4KDAuNSwgMC4wKSkKKworCitfZGVmYXVsdF9oYXNoID0gb2JqZWN0Ll9faGFzaF9fCitjbGFzcyBEZWZhdWx0SGFzaChvYmplY3QpOiBwYXNzCisKK19GSVhFRF9IQVNIX1ZBTFVFID0gNDIKK2NsYXNzIEZpeGVkSGFzaChvYmplY3QpOgorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIF9GSVhFRF9IQVNIX1ZBTFVFCisKK2NsYXNzIE9ubHlFcXVhbGl0eShvYmplY3QpOgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZiBpcyBvdGhlcgorICAgICMgVHJpY2sgdG8gc3VwcHJlc3MgUHkzayB3YXJuaW5nIGluIDIueAorICAgIF9faGFzaF9fID0gTm9uZQorZGVsIE9ubHlFcXVhbGl0eS5fX2hhc2hfXworCitjbGFzcyBPbmx5SW5lcXVhbGl0eShvYmplY3QpOgorICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZiBpcyBub3Qgb3RoZXIKKworY2xhc3MgT25seUNtcChvYmplY3QpOgorICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGNtcChpZChzZWxmKSwgaWQob3RoZXIpKQorICAgICMgVHJpY2sgdG8gc3VwcHJlc3MgUHkzayB3YXJuaW5nIGluIDIueAorICAgIF9faGFzaF9fID0gTm9uZQorZGVsIE9ubHlDbXAuX19oYXNoX18KKworY2xhc3MgSW5oZXJpdGVkSGFzaFdpdGhFcXVhbGl0eShGaXhlZEhhc2gsIE9ubHlFcXVhbGl0eSk6IHBhc3MKK2NsYXNzIEluaGVyaXRlZEhhc2hXaXRoSW5lcXVhbGl0eShGaXhlZEhhc2gsIE9ubHlJbmVxdWFsaXR5KTogcGFzcworY2xhc3MgSW5oZXJpdGVkSGFzaFdpdGhDbXAoRml4ZWRIYXNoLCBPbmx5Q21wKTogcGFzcworCitjbGFzcyBOb0hhc2gob2JqZWN0KToKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworY2xhc3MgSGFzaEluaGVyaXRhbmNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZmF1bHRfZXhwZWN0ZWQgPSBbb2JqZWN0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0SGFzaCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgT25seUVxdWFsaXR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICBPbmx5SW5lcXVhbGl0eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgT25seUNtcCgpLAorICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgZml4ZWRfZXhwZWN0ZWQgPSBbRml4ZWRIYXNoKCksCisgICAgICAgICAgICAgICAgICAgICAgSW5oZXJpdGVkSGFzaFdpdGhFcXVhbGl0eSgpLAorICAgICAgICAgICAgICAgICAgICAgIEluaGVyaXRlZEhhc2hXaXRoSW5lcXVhbGl0eSgpLAorICAgICAgICAgICAgICAgICAgICAgIEluaGVyaXRlZEhhc2hXaXRoQ21wKCksCisgICAgICAgICAgICAgICAgICAgICAgXQorICAgIGVycm9yX2V4cGVjdGVkID0gW05vSGFzaCgpXQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9oYXNoKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIHNlbGYuZGVmYXVsdF9leHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChvYmopLCBfZGVmYXVsdF9oYXNoKG9iaikpCisKKyAgICBkZWYgdGVzdF9maXhlZF9oYXNoKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIHNlbGYuZml4ZWRfZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gob2JqKSwgX0ZJWEVEX0hBU0hfVkFMVUUpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9oYXNoKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIHNlbGYuZXJyb3JfZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIG9iaikKKworICAgIGRlZiB0ZXN0X2hhc2hhYmxlKHNlbGYpOgorICAgICAgICBvYmplY3RzID0gKHNlbGYuZGVmYXVsdF9leHBlY3RlZCArCisgICAgICAgICAgICAgICAgICAgc2VsZi5maXhlZF9leHBlY3RlZCkKKyAgICAgICAgZm9yIG9iaiBpbiBvYmplY3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iaiwgSGFzaGFibGUpCisKKyAgICBkZWYgdGVzdF9ub3RfaGFzaGFibGUoc2VsZik6CisgICAgICAgIGZvciBvYmogaW4gc2VsZi5lcnJvcl9leHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShvYmosIEhhc2hhYmxlKQorCisKKyMgSXNzdWUgIzQ3MDE6IENoZWNrIHRoYXQgc29tZSBidWlsdGluIHR5cGVzIGFyZSBjb3JyZWN0bHkgaGFzaGFibGUKKyMgIChUaGlzIHRlc3Qgb25seSB1c2VkIHRvIGZhaWwgaW4gUHl0aG9uIDMuMCwgYnV0IGhhcyBiZWVuIGluY2x1ZGVkCisjICAgaW4gMi54IGFsb25nIHdpdGggdGhlIGxhenkgY2FsbCB0byBQeVR5cGVfUmVhZHkgaW4gUHlPYmplY3RfSGFzaCkKK2NsYXNzIERlZmF1bHRJdGVyU2VxKG9iamVjdCk6CisgICAgc2VxID0gcmFuZ2UoMTApCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5zZXEpCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VxW2luZGV4XQorCitjbGFzcyBIYXNoQnVpbHRpbnNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaGFzaGVzX3RvX2NoZWNrID0gW3hyYW5nZSgxMCksCisgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmF0ZSh4cmFuZ2UoMTApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaXRlcihEZWZhdWx0SXRlclNlcSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaXRlcihsYW1iZGE6IDAsIDApLAorICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgIGRlZiB0ZXN0X2hhc2hlcyhzZWxmKToKKyAgICAgICAgX2RlZmF1bHRfaGFzaCA9IG9iamVjdC5fX2hhc2hfXworICAgICAgICBmb3Igb2JqIGluIHNlbGYuaGFzaGVzX3RvX2NoZWNrOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKG9iaiksIF9kZWZhdWx0X2hhc2gob2JqKSkKKworY2xhc3MgSGFzaFJhbmRvbWl6YXRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIEVhY2ggc3ViY2xhc3Mgc2hvdWxkIGRlZmluZSBhIGZpZWxkICJyZXByXyIsIGNvbnRhaW5pbmcgdGhlIHJlcHIoKSBvZgorICAgICMgYW4gb2JqZWN0IHRvIGJlIHRlc3RlZAorCisgICAgZGVmIGdldF9oYXNoX2NvbW1hbmQoc2VsZiwgcmVwcl8pOgorICAgICAgICByZXR1cm4gJ3ByaW50KGhhc2goJXMpKScgJSByZXByXworCisgICAgZGVmIGdldF9oYXNoKHNlbGYsIHJlcHJfLCBzZWVkPU5vbmUpOgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBpZiBzZWVkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW52WydQWVRIT05IQVNIU0VFRCddID0gc3RyKHNlZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnYucG9wKCdQWVRIT05IQVNIU0VFRCcsIE5vbmUpCisgICAgICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBzZWxmLmdldF9oYXNoX2NvbW1hbmQocmVwcl8pXQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRfbGluZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIG91dCA9IHRlc3Rfc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKG91dCkKKyAgICAgICAgcmV0dXJuIGludChvdXQuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X3JhbmRvbWl6ZWRfaGFzaChzZWxmKToKKyAgICAgICAgIyB0d28gcnVucyBzaG91bGQgcmV0dXJuIGRpZmZlcmVudCBoYXNoZXMKKyAgICAgICAgcnVuMSA9IHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXywgc2VlZD0ncmFuZG9tJykKKyAgICAgICAgcnVuMiA9IHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXywgc2VlZD0ncmFuZG9tJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChydW4xLCBydW4yKQorCitjbGFzcyBTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cyhIYXNoUmFuZG9taXphdGlvblRlc3RzKToKKyAgICBkZWYgdGVzdF9udWxsX2hhc2goc2VsZik6CisgICAgICAgICMgUFlUSE9OSEFTSFNFRUQ9MCBkaXNhYmxlcyB0aGUgcmFuZG9taXplZCBoYXNoCisgICAgICAgIGlmIElTXzY0QklUOgorICAgICAgICAgICAga25vd25faGFzaF9vZl9vYmogPSAxNDUzMDc5NzI5MTg4MDk4MjExCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrbm93bl9oYXNoX29mX29iaiA9IC0xNjAwOTI1NTMzCisKKyAgICAgICAgIyBSYW5kb21pemF0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQ6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfKSwga25vd25faGFzaF9vZl9vYmopCisKKyAgICAgICAgIyBJdCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSBzZWVkIHRvIDA6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfLCBzZWVkPTApLCBrbm93bl9oYXNoX29mX29iaikKKworICAgIGRlZiB0ZXN0X2ZpeGVkX2hhc2goc2VsZik6CisgICAgICAgICMgdGVzdCBhIGZpeGVkIHNlZWQgZm9yIHRoZSByYW5kb21pemVkIGhhc2gKKyAgICAgICAgIyBOb3RlIHRoYXQgYWxsIHR5cGVzIHNoYXJlIHRoZSBzYW1lIHZhbHVlczoKKyAgICAgICAgaWYgSVNfNjRCSVQ6CisgICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICAgICAgICAgIGggPSAtNDQxMDkxMTUwMjMwMzg3ODUwOQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoID0gLTM1NzAxNTA5Njk0Nzk5OTQxMzAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6CisgICAgICAgICAgICAgICAgaCA9IC0yMDYwNzY3OTkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaCA9IC0xMDI0MDE0NDU3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfLCBzZWVkPTQyKSwgaCkKKworY2xhc3MgU3RySGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cyk6CisgICAgcmVwcl8gPSByZXByKCdhYmMnKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goIiIpLCAwKQorCitjbGFzcyBVbmljb2RlSGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cyk6CisgICAgcmVwcl8gPSByZXByKHUnYWJjJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHUiIiksIDApCisKK2NsYXNzIEJ1ZmZlckhhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMpOgorICAgIHJlcHJfID0gJ2J1ZmZlcigiYWJjIiknCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChidWZmZXIoIiIpKSwgMCkKKworY2xhc3MgRGF0ZXRpbWVUZXN0cyhIYXNoUmFuZG9taXphdGlvblRlc3RzKToKKyAgICBkZWYgZ2V0X2hhc2hfY29tbWFuZChzZWxmLCByZXByXyk6CisgICAgICAgIHJldHVybiAnaW1wb3J0IGRhdGV0aW1lOyBwcmludChoYXNoKCVzKSknICUgcmVwcl8KKworY2xhc3MgRGF0ZXRpbWVEYXRlVGVzdHMoRGF0ZXRpbWVUZXN0cyk6CisgICAgcmVwcl8gPSByZXByKGRhdGV0aW1lLmRhdGUoMTA2NiwgMTAsIDE0KSkKKworY2xhc3MgRGF0ZXRpbWVEYXRldGltZVRlc3RzKERhdGV0aW1lVGVzdHMpOgorICAgIHJlcHJfID0gcmVwcihkYXRldGltZS5kYXRldGltZSgxLCAyLCAzLCA0LCA1LCA2LCA3KSkKKworY2xhc3MgRGF0ZXRpbWVUaW1lVGVzdHMoRGF0ZXRpbWVUZXN0cyk6CisgICAgcmVwcl8gPSByZXByKGRhdGV0aW1lLnRpbWUoMCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoSGFzaEVxdWFsaXR5VGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoSW5oZXJpdGFuY2VUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2hCdWlsdGluc1Rlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RySGFzaFJhbmRvbWl6YXRpb25UZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVIYXNoUmFuZG9taXphdGlvblRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVySGFzaFJhbmRvbWl6YXRpb25UZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGV0aW1lRGF0ZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZXRpbWVEYXRldGltZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZXRpbWVUaW1lVGVzdHMpCisKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjM2NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQpAQCAtMCwwICsxLDM5OSBAQAorIyBUZXN0IGhhc2hsaWIgbW9kdWxlCisjCisjICRJZCQKKyMKKyMgIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQorIyAgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorIworCitpbXBvcnQgYXJyYXkKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgXzRHLCBwcmVjaXNpb25iaWdtZW10ZXN0CisKKyMgV2VyZSB3ZSBjb21waWxlZCAtLXdpdGgtcHlkZWJ1ZyBvciB3aXRoICNkZWZpbmUgUHlfREVCVUc/CitDT01QSUxFRF9XSVRIX1BZREVCVUcgPSBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKQorCisKK2RlZiBoZXhzdHIocyk6CisgICAgaW1wb3J0IHN0cmluZworICAgIGggPSBzdHJpbmcuaGV4ZGlnaXRzCisgICAgciA9ICcnCisgICAgZm9yIGMgaW4gczoKKyAgICAgICAgaSA9IG9yZChjKQorICAgICAgICByID0gciArIGhbKGkgPj4gNCkgJiAweEZdICsgaFtpICYgMHhGXQorICAgIHJldHVybiByCisKKworY2xhc3MgSGFzaExpYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdXBwb3J0ZWRfaGFzaF9uYW1lcyA9ICggJ21kNScsICdNRDUnLCAnc2hhMScsICdTSEExJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTIyNCcsICdTSEEyMjQnLCAnc2hhMjU2JywgJ1NIQTI1NicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzODQnLCAnU0hBMzg0JywgJ3NoYTUxMicsICdTSEE1MTInICkKKworICAgIF93YXJuX29uX2V4dGVuc2lvbl9pbXBvcnQgPSBDT01QSUxFRF9XSVRIX1BZREVCVUcKKworICAgIGRlZiBfY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSk6CisgICAgICAgICIiIkltcG9ydCBhIG1vZHVsZSBhbmQgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIGl0IG9yIE5vbmUgb24gZmFpbHVyZS4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYygnaW1wb3J0ICcrbW9kdWxlX25hbWUpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZXJyb3I6CisgICAgICAgICAgICBpZiBzZWxmLl93YXJuX29uX2V4dGVuc2lvbl9pbXBvcnQ6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybignRGlkIGEgQyBleHRlbnNpb24gZmFpbCB0byBjb21waWxlPyAlcycgJSBlcnJvcikKKyAgICAgICAgcmV0dXJuIGxvY2FscygpLmdldChtb2R1bGVfbmFtZSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBhbGdvcml0aG1zID0gc2V0KCkKKyAgICAgICAgZm9yIGFsZ29yaXRobSBpbiBzZWxmLnN1cHBvcnRlZF9oYXNoX25hbWVzOgorICAgICAgICAgICAgYWxnb3JpdGhtcy5hZGQoYWxnb3JpdGhtLmxvd2VyKCkpCisgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3QgPSB7fQorICAgICAgICBmb3IgYWxnb3JpdGhtIGluIGFsZ29yaXRobXM6CisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W2FsZ29yaXRobV0gPSBzZXQoKQorCisgICAgICAgICMgRm9yIGVhY2ggYWxnb3JpdGhtLCB0ZXN0IHRoZSBkaXJlY3QgY29uc3RydWN0b3IgYW5kIHRoZSB1c2UKKyAgICAgICAgIyBvZiBoYXNobGliLm5ldyBnaXZlbiB0aGUgYWxnb3JpdGhtIG5hbWUuCisgICAgICAgIGZvciBhbGdvcml0aG0sIGNvbnN0cnVjdG9ycyBpbiBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0Lml0ZW1zKCk6CisgICAgICAgICAgICBjb25zdHJ1Y3RvcnMuYWRkKGdldGF0dHIoaGFzaGxpYiwgYWxnb3JpdGhtKSkKKyAgICAgICAgICAgIGRlZiBfdGVzdF9hbGdvcml0aG1fdmlhX2hhc2hsaWJfbmV3KGRhdGE9Tm9uZSwgX2FsZz1hbGdvcml0aG0pOgorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hsaWIubmV3KF9hbGcpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hsaWIubmV3KF9hbGcsIGRhdGEpCisgICAgICAgICAgICBjb25zdHJ1Y3RvcnMuYWRkKF90ZXN0X2FsZ29yaXRobV92aWFfaGFzaGxpYl9uZXcpCisKKyAgICAgICAgX2hhc2hsaWIgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfaGFzaGxpYicpCisgICAgICAgIGlmIF9oYXNobGliOgorICAgICAgICAgICAgIyBUaGVzZSB0d28gYWxnb3JpdGhtcyBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQgd2hlbiB0aGlzIG1vZHVsZQorICAgICAgICAgICAgIyBpcyBjb21waWxlZC4gIElmIG5vdCwgc29tZXRoaW5nIHdhcyBjb21waWxlZCB3cm9uZy4KKyAgICAgICAgICAgIGFzc2VydCBoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9tZDUnKQorICAgICAgICAgICAgYXNzZXJ0IGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX3NoYTEnKQorICAgICAgICAgICAgZm9yIGFsZ29yaXRobSwgY29uc3RydWN0b3JzIGluIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3QuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGdldGF0dHIoX2hhc2hsaWIsICdvcGVuc3NsXycrYWxnb3JpdGhtLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIGNvbnN0cnVjdG9yOgorICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcnMuYWRkKGNvbnN0cnVjdG9yKQorCisgICAgICAgIF9tZDUgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfbWQ1JykKKyAgICAgICAgaWYgX21kNToKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ21kNSddLmFkZChfbWQ1Lm5ldykKKyAgICAgICAgX3NoYSA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGEnKQorICAgICAgICBpZiBfc2hhOgorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMSddLmFkZChfc2hhLm5ldykKKyAgICAgICAgX3NoYTI1NiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGEyNTYnKQorICAgICAgICBpZiBfc2hhMjU2OgorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjI0J10uYWRkKF9zaGEyNTYuc2hhMjI0KQorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjU2J10uYWRkKF9zaGEyNTYuc2hhMjU2KQorICAgICAgICBfc2hhNTEyID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTUxMicpCisgICAgICAgIGlmIF9zaGE1MTI6CisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEzODQnXS5hZGQoX3NoYTUxMi5zaGEzODQpCisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGE1MTInXS5hZGQoX3NoYTUxMi5zaGE1MTIpCisKKyAgICAgICAgc3VwZXIoSGFzaExpYlRlc3RDYXNlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgdGVzdF9oYXNoX2FycmF5KHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoImIiLCByYW5nZSgxMCkpCisgICAgICAgIGNvbnN0cnVjdG9ycyA9IHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3QuaXRlcnZhbHVlcygpCisgICAgICAgIGZvciBjb25zIGluIGl0ZXJ0b29scy5jaGFpbi5mcm9tX2l0ZXJhYmxlKGNvbnN0cnVjdG9ycyk6CisgICAgICAgICAgICBjID0gY29ucyhhKQorICAgICAgICAgICAgYy5oZXhkaWdlc3QoKQorCisgICAgZGVmIHRlc3RfYWxnb3JpdGhtc19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaGxpYi5hbGdvcml0aG1zLAorICAgICAgICAgICAgdHVwbGUoW19hbGdvIGZvciBfYWxnbyBpbiBzZWxmLnN1cHBvcnRlZF9oYXNoX25hbWVzIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYWxnby5pc2xvd2VyKCldKSkKKworICAgIGRlZiB0ZXN0X3Vua25vd25faGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaGFzaGxpYi5uZXcsICdzcGFtIHNwYW0gc3BhbSBzcGFtIHNwYW0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2hsaWIubmV3LCAxKQorCisgICAgZGVmIHRlc3RfZ2V0X2J1aWx0aW5fY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGdldF9idWlsdGluX2NvbnN0cnVjdG9yID0gaGFzaGxpYi5fX2RpY3RfX1sKKyAgICAgICAgICAgICAgICAnX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciddCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldF9idWlsdGluX2NvbnN0cnVjdG9yLCAndGVzdCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBfbWQ1CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBUaGlzIGZvcmNlcyBhbiBJbXBvcnRFcnJvciBmb3IgImltcG9ydCBfbWQ1IiBzdGF0ZW1lbnRzCisgICAgICAgIHN5cy5tb2R1bGVzWydfbWQ1J10gPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldF9idWlsdGluX2NvbnN0cnVjdG9yLCAnbWQ1JykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmICdfbWQ1JyBpbiBsb2NhbHMoKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snX21kNSddID0gX21kNQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19tZDUnXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldF9idWlsdGluX2NvbnN0cnVjdG9yLCAzKQorCisgICAgZGVmIHRlc3RfaGV4ZGlnZXN0KHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLnN1cHBvcnRlZF9oYXNoX25hbWVzOgorICAgICAgICAgICAgaCA9IGhhc2hsaWIubmV3KG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGV4c3RyKGguZGlnZXN0KCkpID09IGguaGV4ZGlnZXN0KCkpCisKKyAgICBkZWYgdGVzdF9sYXJnZV91cGRhdGUoc2VsZik6CisgICAgICAgIGFhcyA9ICdhJyAqIDEyOAorICAgICAgICBiZWVzID0gJ2InICogMTI3CisgICAgICAgIGNlZXMgPSAnYycgKiAxMjYKKyAgICAgICAgYWJjcyA9IGFhcyArIGJlZXMgKyBjZWVzCisKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lczoKKyAgICAgICAgICAgIG0xID0gaGFzaGxpYi5uZXcobmFtZSkKKyAgICAgICAgICAgIG0xLnVwZGF0ZShhYXMpCisgICAgICAgICAgICBtMS51cGRhdGUoYmVlcykKKyAgICAgICAgICAgIG0xLnVwZGF0ZShjZWVzKQorCisgICAgICAgICAgICBtMiA9IGhhc2hsaWIubmV3KG5hbWUpCisgICAgICAgICAgICBtMi51cGRhdGUoYWJjcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTEuZGlnZXN0KCksIG0yLmRpZ2VzdCgpLCBuYW1lKycgdXBkYXRlIHByb2JsZW0uJykKKworICAgICAgICAgICAgbTMgPSBoYXNobGliLm5ldyhuYW1lLCBhYmNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5kaWdlc3QoKSwgbTMuZGlnZXN0KCksIG5hbWUrJyBuZXcgcHJvYmxlbS4nKQorCisgICAgZGVmIGNoZWNrKHNlbGYsIG5hbWUsIGRhdGEsIGRpZ2VzdCk6CisgICAgICAgIGNvbnN0cnVjdG9ycyA9IHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbbmFtZV0KKyAgICAgICAgIyAyIGlzIGZvciBoYXNobGliLm5hbWUoLi4uKSBhbmQgaGFzaGxpYi5uZXcobmFtZSwgLi4uKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oY29uc3RydWN0b3JzKSwgMikKKyAgICAgICAgZm9yIGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yIGluIGNvbnN0cnVjdG9yczoKKyAgICAgICAgICAgIGNvbXB1dGVkID0gaGFzaF9vYmplY3RfY29uc3RydWN0b3IoZGF0YSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkLCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICJIYXNoIGFsZ29yaXRobSAlcyBjb25zdHJ1Y3RlZCB1c2luZyAlcyByZXR1cm5lZCBoZXhkaWdlc3QiCisgICAgICAgICAgICAgICAgICAgICIgJXIgZm9yICVkIGJ5dGUgaW5wdXQgZGF0YSB0aGF0IHNob3VsZCBoYXZlIGhhc2hlZCB0byAlci4iCisgICAgICAgICAgICAgICAgICAgICUgKG5hbWUsIGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCwgbGVuKGRhdGEpLCBkaWdlc3QpKQorCisgICAgZGVmIGNoZWNrX3VwZGF0ZShzZWxmLCBuYW1lLCBkYXRhLCBkaWdlc3QpOgorICAgICAgICBjb25zdHJ1Y3RvcnMgPSBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W25hbWVdCisgICAgICAgICMgMiBpcyBmb3IgaGFzaGxpYi5uYW1lKC4uLikgYW5kIGhhc2hsaWIubmV3KG5hbWUsIC4uLikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKGNvbnN0cnVjdG9ycyksIDIpCisgICAgICAgIGZvciBoYXNoX29iamVjdF9jb25zdHJ1Y3RvciBpbiBjb25zdHJ1Y3RvcnM6CisgICAgICAgICAgICBoID0gaGFzaF9vYmplY3RfY29uc3RydWN0b3IoKQorICAgICAgICAgICAgaC51cGRhdGUoZGF0YSkKKyAgICAgICAgICAgIGNvbXB1dGVkID0gaC5oZXhkaWdlc3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQsIGRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgIkhhc2ggYWxnb3JpdGhtICVzIHVzaW5nICVzIHdoZW4gdXBkYXRlZCByZXR1cm5lZCBoZXhkaWdlc3QiCisgICAgICAgICAgICAgICAgICAgICIgJXIgZm9yICVkIGJ5dGUgaW5wdXQgZGF0YSB0aGF0IHNob3VsZCBoYXZlIGhhc2hlZCB0byAlci4iCisgICAgICAgICAgICAgICAgICAgICUgKG5hbWUsIGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCwgbGVuKGRhdGEpLCBkaWdlc3QpKQorCisgICAgZGVmIGNoZWNrX3VuaWNvZGUoc2VsZiwgYWxnb3JpdGhtX25hbWUpOgorICAgICAgICAjIFVuaWNvZGUgb2JqZWN0cyBhcmUgbm90IGFsbG93ZWQgYXMgaW5wdXQuCisgICAgICAgIGV4cGVjdGVkID0gaGFzaGxpYi5uZXcoYWxnb3JpdGhtX25hbWUsIHN0cih1J3NwYW0nKSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgc2VsZi5jaGVjayhhbGdvcml0aG1fbmFtZSwgdSdzcGFtJywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAjIEluIHB5dGhvbiAyLnggdW5pY29kZSBpcyBhdXRvLWVuY29kZWQgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nCisgICAgICAgICMgd2hlbiBwYXNzZWQgdG8gaGFzaGxpYiBmdW5jdGlvbnMuCisgICAgICAgIHNlbGYuY2hlY2tfdW5pY29kZSgnbWQ1JykKKyAgICAgICAgc2VsZi5jaGVja191bmljb2RlKCdzaGExJykKKyAgICAgICAgc2VsZi5jaGVja191bmljb2RlKCdzaGEyMjQnKQorICAgICAgICBzZWxmLmNoZWNrX3VuaWNvZGUoJ3NoYTI1NicpCisgICAgICAgIHNlbGYuY2hlY2tfdW5pY29kZSgnc2hhMzg0JykKKyAgICAgICAgc2VsZi5jaGVja191bmljb2RlKCdzaGE1MTInKQorCisgICAgZGVmIHRlc3RfY2FzZV9tZDVfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnbWQ1JywgJycsICdkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZScpCisKKyAgICBkZWYgdGVzdF9jYXNlX21kNV8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdtZDUnLCAnYWJjJywgJzkwMDE1MDk4M2NkMjRmYjBkNjk2M2Y3ZDI4ZTE3ZjcyJykKKworICAgIGRlZiB0ZXN0X2Nhc2VfbWQ1XzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ21kNScsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScsCisgICAgICAgICAgICAgICAgICAgJ2QxNzRhYjk4ZDI3N2Q5ZjVhNTYxMWMyYzlmNDE5ZDlmJykKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzRHICsgNSwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfY2FzZV9tZDVfaHVnZShzZWxmLCBzaXplKToKKyAgICAgICAgaWYgc2l6ZSA9PSBfNEcgKyA1OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2soJ21kNScsICdBJypzaXplLCAnYzlhZjJkZmYzNzQ2OGNlNWRmZWU4ZjJjZmMwYTljNmQnKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAjIDMyLWJpdCBhcmNoCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV80RyArIDUsIG1lbXVzZT0xKQorICAgIGRlZiB0ZXN0X2Nhc2VfbWQ1X2h1Z2VfdXBkYXRlKHNlbGYsIHNpemUpOgorICAgICAgICBpZiBzaXplID09IF80RyArIDU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja191cGRhdGUoJ21kNScsICdBJypzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2M5YWYyZGZmMzc0NjhjZTVkZmVlOGYyY2ZjMGE5YzZkJykKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MgIyAzMi1iaXQgYXJjaAorCisgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fNEcgLSAxLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9jYXNlX21kNV91aW50bWF4KHNlbGYsIHNpemUpOgorICAgICAgICBpZiBzaXplID09IF80RyAtIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVjaygnbWQ1JywgJ0EnKnNpemUsICcyODEzOGQzMDZmZjFiODI4MWYxYTkwNjdlMWExYTJiMycpCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzICMgMzItYml0IGFyY2gKKworICAgICMgdXNlIHRoZSB0aHJlZSBleGFtcGxlcyBmcm9tIEZlZGVyYWwgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBTdGFuZGFyZHMKKyAgICAjIFB1YmxpY2F0aW9uIDE4MC0xLCBTZWN1cmUgSGFzaCBTdGFuZGFyZCwgIDE5OTUgQXByaWwgMTcKKyAgICAjIGh0dHA6Ly93d3cuaXRsLm5pc3QuZ292L2Rpdjg5Ny9wdWJzL2ZpcDE4MC0xLmh0bQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGExXzAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTEnLCAiIiwKKyAgICAgICAgICAgICAgICAgICAiZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTFfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMScsICJhYmMiLAorICAgICAgICAgICAgICAgICAgICJhOTk5M2UzNjQ3MDY4MTZhYmEzZTI1NzE3ODUwYzI2YzljZDBkODlkIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMV8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGExJywgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIiwKKyAgICAgICAgICAgICAgICAgICAiODQ5ODNlNDQxYzNiZDI2ZWJhYWU0YWExZjk1MTI5ZTVlNTQ2NzBmMSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTFfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMScsICJhIiAqIDEwMDAwMDAsCisgICAgICAgICAgICAgICAgICAgIjM0YWE5NzNjZDRjNGRhYTRmNjFlZWIyYmRiYWQyNzMxNjUzNDAxNmYiKQorCisgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fNEcgKyA1LCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTFfaHVnZShzZWxmLCBzaXplKToKKyAgICAgICAgaWYgc2l6ZSA9PSBfNEcgKyA1OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2soJ3NoYTEnLCAnQScqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc4N2Q3NDVjNTBlNmIyODc5ZmZhMGZiMmM5MzBlOWZiZmUwZGM5YTViJykKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MgIyAzMi1iaXQgYXJjaAorCisgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fNEcgKyA1LCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTFfaHVnZV91cGRhdGUoc2VsZiwgc2l6ZSk6CisgICAgICAgIGlmIHNpemUgPT0gXzRHICsgNToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3VwZGF0ZSgnc2hhMScsICdBJypzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgJzg3ZDc0NWM1MGU2YjI4NzlmZmEwZmIyYzkzMGU5ZmJmZTBkYzlhNWInKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAjIDMyLWJpdCBhcmNoCisKKyAgICAjIHVzZSB0aGUgZXhhbXBsZXMgZnJvbSBGZWRlcmFsIEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgU3RhbmRhcmRzCisgICAgIyBQdWJsaWNhdGlvbiAxODAtMiwgU2VjdXJlIEhhc2ggU3RhbmRhcmQsICAyMDAyIEF1Z3VzdCAxCisgICAgIyBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTgwLTIvZmlwczE4MC0yLnBkZgorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEyMjRfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMjI0JywgIiIsCisgICAgICAgICAgImQxNGEwMjhjMmEzYTJiYzk0NzYxMDJiYjI4ODIzNGM0MTVhMmIwMWY4MjhlYTYyYWM1YjNlNDJmIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMjI0XzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTIyNCcsICJhYmMiLAorICAgICAgICAgICIyMzA5N2QyMjM0MDVkODIyODY0MmE0NzdiZGEyNTViMzJhYWRiY2U0YmRhMGIzZjdlMzZjOWRhNyIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTIyNF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEyMjQnLAorICAgICAgICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisgICAgICAgICAgIjc1Mzg4YjE2NTEyNzc2Y2M1ZGJhNWRhMWZkODkwMTUwYjBjNjQ1NWNiNGY1OGIxOTUyNTIyNTI1IikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMjI0XzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTIyNCcsICJhIiAqIDEwMDAwMDAsCisgICAgICAgICAgIjIwNzk0NjU1OTgwYzkxZDhiYmI0YzFlYTk3NjE4YTRiZjAzZjQyNTgxOTQ4YjJlZTRlZTdhZDY3IikKKworCisgICAgZGVmIHRlc3RfY2FzZV9zaGEyNTZfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMjU2JywgIiIsCisgICAgICAgICAgImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEyNTZfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMjU2JywgImFiYyIsCisgICAgICAgICAgImJhNzgxNmJmOGYwMWNmZWE0MTQxNDBkZTVkYWUyMjIzYjAwMzYxYTM5NjE3N2E5Y2I0MTBmZjYxZjIwMDE1YWQiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEyNTZfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMjU2JywKKyAgICAgICAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAorICAgICAgICAgICIyNDhkNmE2MWQyMDYzOGI4ZTVjMDI2OTMwYzNlNjAzOWEzM2NlNDU5NjRmZjIxNjdmNmVjZWRkNDE5ZGIwNmMxIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMjU2XzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTI1NicsICJhIiAqIDEwMDAwMDAsCisgICAgICAgICAgImNkYzc2ZTVjOTkxNGZiOTI4MWExYzdlMjg0ZDczZTY3ZjE4MDlhNDhhNDk3MjAwZTA0NmQzOWNjYzcxMTJjZDAiKQorCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTM4NF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzODQnLCAiIiwKKyAgICAgICAgICAiMzhiMDYwYTc1MWFjOTYzODRjZDkzMjdlYjFiMWUzNmEyMWZkYjcxMTE0YmUwNzQzNGMwY2M3YmY2M2Y2ZTFkYSIrCisgICAgICAgICAgIjI3NGVkZWJmZTc2ZjY1ZmJkNTFhZDJmMTQ4OThiOTViIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMzg0XzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTM4NCcsICJhYmMiLAorICAgICAgICAgICJjYjAwNzUzZjQ1YTM1ZThiYjVhMDNkNjk5YWM2NTAwNzI3MmMzMmFiMGVkZWQxNjMxYThiNjA1YTQzZmY1YmVkIisKKyAgICAgICAgICAiODA4NjA3MmJhMWU3Y2MyMzU4YmFlY2ExMzRjODI1YTciKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzODRfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMzg0JywKKyAgICAgICAgICAgICAgICAgICAiYWJjZGVmZ2hiY2RlZmdoaWNkZWZnaGlqZGVmZ2hpamtlZmdoaWprbGZnaGlqa2xtZ2hpamtsbW4iKworICAgICAgICAgICAgICAgICAgICJoaWprbG1ub2lqa2xtbm9wamtsbW5vcHFrbG1ub3Bxcmxtbm9wcXJzbW5vcHFyc3Rub3BxcnN0dSIsCisgICAgICAgICAgIjA5MzMwYzMzZjcxMTQ3ZTgzZDE5MmZjNzgyY2QxYjQ3NTMxMTFiMTczYjNiMDVkMjJmYTA4MDg2ZTNiMGY3MTIiKworICAgICAgICAgICJmY2M3YzcxYTU1N2UyZGI5NjZjM2U5ZmE5MTc0NjAzOSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTM4NF8zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzODQnLCAiYSIgKiAxMDAwMDAwLAorICAgICAgICAgICI5ZDBlMTgwOTcxNjQ3NGNiMDg2ZTgzNGUzMTBhNGExY2VkMTQ5ZTljMDBmMjQ4NTI3OTcyY2VjNTcwNGMyYTViIisKKyAgICAgICAgICAiMDdiOGIzZGMzOGVjYzRlYmFlOTdkZGQ4N2YzZDg5ODUiKQorCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTUxMl8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGE1MTInLCAiIiwKKyAgICAgICAgICAiY2Y4M2UxMzU3ZWVmYjhiZGYxNTQyODUwZDY2ZDgwMDdkNjIwZTQwNTBiNTcxNWRjODNmNGE5MjFkMzZjZTljZSIrCisgICAgICAgICAgIjQ3ZDBkMTNjNWQ4NWYyYjBmZjgzMThkMjg3N2VlYzJmNjNiOTMxYmQ0NzQxN2E4MWE1MzgzMjdhZjkyN2RhM2UiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGE1MTJfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhNTEyJywgImFiYyIsCisgICAgICAgICAgImRkYWYzNWExOTM2MTdhYmFjYzQxNzM0OWFlMjA0MTMxMTJlNmZhNGU4OWE5N2VhMjBhOWVlZWU2NGI1NWQzOWEiKworICAgICAgICAgICIyMTkyOTkyYTI3NGZjMWE4MzZiYTNjMjNhM2ZlZWJiZDQ1NGQ0NDIzNjQzY2U4MGUyYTlhYzk0ZmE1NGNhNDlmIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhNTEyXzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTUxMicsCisgICAgICAgICAgICAgICAgICAgImFiY2RlZmdoYmNkZWZnaGljZGVmZ2hpamRlZmdoaWprZWZnaGlqa2xmZ2hpamtsbWdoaWprbG1uIisKKyAgICAgICAgICAgICAgICAgICAiaGlqa2xtbm9pamtsbW5vcGprbG1ub3Bxa2xtbm9wcXJsbW5vcHFyc21ub3BxcnN0bm9wcXJzdHUiLAorICAgICAgICAgICI4ZTk1OWI3NWRhZTMxM2RhOGNmNGY3MjgxNGZjMTQzZjhmNzc3OWM2ZWI5ZjdmYTE3Mjk5YWVhZGI2ODg5MDE4IisKKyAgICAgICAgICAiNTAxZDI4OWU0OTAwZjdlNDMzMWI5OWRlYzRiNTQzM2FjN2QzMjllZWI2ZGQyNjU0NWU5NmU1NWI4NzRiZTkwOSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTUxMl8zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGE1MTInLCAiYSIgKiAxMDAwMDAwLAorICAgICAgICAgICJlNzE4NDgzZDBjZTc2OTY0NGUyZTQyYzdiYzE1YjQ2MzhlMWY5OGIxM2IyMDQ0Mjg1NjMyYTgwM2FmYTk3M2ViIisKKyAgICAgICAgICAiZGUwZmYyNDQ4NzdlYTYwYTRjYjA0MzJjZTU3N2MzMWJlYjAwOWM1YzJjNDlhYTJlNGVhZGIyMTdhZDhjYzA5YiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEB0ZXN0X3N1cHBvcnQucmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3RfdGhyZWFkZWRfaGFzaGluZyhzZWxmKToKKyAgICAgICAgIyBVcGRhdGluZyB0aGUgc2FtZSBoYXNoIG9iamVjdCBmcm9tIHNldmVyYWwgdGhyZWFkcyBhdCBvbmNlCisgICAgICAgICMgdXNpbmcgZGF0YSBjaHVuayBzaXplcyBjb250YWluaW5nIHRoZSBzYW1lIGJ5dGUgc2VxdWVuY2VzLgorICAgICAgICAjCisgICAgICAgICMgSWYgdGhlIGludGVybmFsIGxvY2tzIGFyZSB3b3JraW5nIHRvIHByZXZlbnQgbXVsdGlwbGUKKyAgICAgICAgIyB1cGRhdGVzIG9uIHRoZSBzYW1lIG9iamVjdCBmcm9tIHJ1bm5pbmcgYXQgb25jZSwgdGhlIHJlc3VsdGluZworICAgICAgICAjIGhhc2ggd2lsbCBiZSB0aGUgc2FtZSBhcyBkb2luZyBpdCBzaW5nbGUgdGhyZWFkZWQgdXBmcm9udC4KKyAgICAgICAgaGFzaGVyID0gaGFzaGxpYi5zaGExKCkKKyAgICAgICAgbnVtX3RocmVhZHMgPSA1CisgICAgICAgIHNtYWxsZXN0X2RhdGEgPSAnc3dpbmVmbHUnCisgICAgICAgIGRhdGEgPSBzbWFsbGVzdF9kYXRhKjIwMDAwMAorICAgICAgICBleHBlY3RlZF9oYXNoID0gaGFzaGxpYi5zaGExKGRhdGEqbnVtX3RocmVhZHMpLmhleGRpZ2VzdCgpCisKKyAgICAgICAgZGVmIGhhc2hfaW5fY2h1bmtzKGNodW5rX3NpemUsIGV2ZW50KToKKyAgICAgICAgICAgIGluZGV4ID0gMAorICAgICAgICAgICAgd2hpbGUgaW5kZXggPCBsZW4oZGF0YSk6CisgICAgICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZShkYXRhW2luZGV4OmluZGV4K2NodW5rX3NpemVdKQorICAgICAgICAgICAgICAgIGluZGV4ICs9IGNodW5rX3NpemUKKyAgICAgICAgICAgIGV2ZW50LnNldCgpCisKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgZm9yIHRocmVhZG51bSBpbiB4cmFuZ2UobnVtX3RocmVhZHMpOgorICAgICAgICAgICAgY2h1bmtfc2l6ZSA9IGxlbihkYXRhKSAvLyAoMTAqKnRocmVhZG51bSkKKyAgICAgICAgICAgIGFzc2VydCBjaHVua19zaXplID4gMAorICAgICAgICAgICAgYXNzZXJ0IGNodW5rX3NpemUgJSBsZW4oc21hbGxlc3RfZGF0YSkgPT0gMAorICAgICAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChldmVudCkKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWhhc2hfaW5fY2h1bmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjaHVua19zaXplLCBldmVudCkpLnN0YXJ0KCkKKworICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgorICAgICAgICAgICAgZXZlbnQud2FpdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9oYXNoLCBoYXNoZXIuaGV4ZGlnZXN0KCkpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhhc2hMaWJUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaGVhcHEucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9oZWFwcS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2I4OGYwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaGVhcHEucHkKQEAgLTAsMCArMSw0MTkgQEAKKyIiIlVuaXR0ZXN0cyBmb3IgaGVhcHEuIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByYW5kb20KKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlLCBza2lwVW5sZXNzCisKK3B5X2hlYXBxID0gdGVzdF9zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2hlYXBxJywgYmxvY2tlZD1bJ19oZWFwcSddKQorY19oZWFwcSA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdoZWFwcScsIGZyZXNoPVsnX2hlYXBxJ10pCisKKyMgX2hlYXBxLm5sYXJnZXN0L25zbWFsbGVzdCBhcmUgc2F2ZWQgaW4gaGVhcHEuX25sYXJnZXN0L19zbWFsbGVzdCB3aGVuCisjIF9oZWFwcSBpcyBpbXBvcnRlZCwgc28gY2hlY2sgdGhlbSB0aGVyZQorZnVuY19uYW1lcyA9IFsnaGVhcGlmeScsICdoZWFwcG9wJywgJ2hlYXBwdXNoJywgJ2hlYXBwdXNocG9wJywKKyAgICAgICAgICAgICAgJ2hlYXByZXBsYWNlJywgJ19ubGFyZ2VzdCcsICdfbnNtYWxsZXN0J10KKworY2xhc3MgVGVzdE1vZHVsZXMoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3B5X2Z1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIGZuYW1lIGluIGZ1bmNfbmFtZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocHlfaGVhcHEsIGZuYW1lKS5fX21vZHVsZV9fLCAnaGVhcHEnKQorCisgICAgQHNraXBVbmxlc3MoY19oZWFwcSwgJ3JlcXVpcmVzIF9oZWFwcScpCisgICAgZGVmIHRlc3RfY19mdW5jdGlvbnMoc2VsZik6CisgICAgICAgIGZvciBmbmFtZSBpbiBmdW5jX25hbWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKGNfaGVhcHEsIGZuYW1lKS5fX21vZHVsZV9fLCAnX2hlYXBxJykKKworCitjbGFzcyBUZXN0SGVhcChUZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gTm9uZQorCisgICAgZGVmIHRlc3RfcHVzaF9wb3Aoc2VsZik6CisgICAgICAgICMgMSkgUHVzaCAyNTYgcmFuZG9tIG51bWJlcnMgYW5kIHBvcCB0aGVtIG9mZiwgdmVyaWZ5aW5nIGFsbCdzIE9LLgorICAgICAgICBoZWFwID0gW10KKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIHNlbGYuY2hlY2tfaW52YXJpYW50KGhlYXApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICBpdGVtID0gcmFuZG9tLnJhbmRvbSgpCisgICAgICAgICAgICBkYXRhLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcHB1c2goaGVhcCwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfaW52YXJpYW50KGhlYXApCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICB3aGlsZSBoZWFwOgorICAgICAgICAgICAgaXRlbSA9IHNlbGYubW9kdWxlLmhlYXBwb3AoaGVhcCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfaW52YXJpYW50KGhlYXApCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChpdGVtKQorICAgICAgICBkYXRhX3NvcnRlZCA9IGRhdGFbOl0KKyAgICAgICAgZGF0YV9zb3J0ZWQuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YV9zb3J0ZWQsIHJlc3VsdHMpCisgICAgICAgICMgMikgQ2hlY2sgdGhhdCB0aGUgaW52YXJpYW50IGhvbGRzIGZvciBhIHNvcnRlZCBhcnJheQorICAgICAgICBzZWxmLmNoZWNrX2ludmFyaWFudChyZXN1bHRzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tb2R1bGUuaGVhcHB1c2gsIFtdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubW9kdWxlLmhlYXBwdXNoLCBOb25lLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1vZHVsZS5oZWFwcG9wLCBOb25lKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgY2hlY2tfaW52YXJpYW50KHNlbGYsIGhlYXApOgorICAgICAgICAjIENoZWNrIHRoZSBoZWFwIGludmFyaWFudC4KKyAgICAgICAgZm9yIHBvcywgaXRlbSBpbiBlbnVtZXJhdGUoaGVhcCk6CisgICAgICAgICAgICBpZiBwb3M6ICMgcG9zIDAgaGFzIG5vIHBhcmVudAorICAgICAgICAgICAgICAgIHBhcmVudHBvcyA9IChwb3MtMSkgPj4gMQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoZWFwW3BhcmVudHBvc10gPD0gaXRlbSkKKworICAgIGRlZiB0ZXN0X2hlYXBpZnkoc2VsZik6CisgICAgICAgIGZvciBzaXplIGluIHJhbmdlKDMwKToKKyAgICAgICAgICAgIGhlYXAgPSBbcmFuZG9tLnJhbmRvbSgpIGZvciBkdW1teSBpbiByYW5nZShzaXplKV0KKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmhlYXBpZnkoaGVhcCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfaW52YXJpYW50KGhlYXApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1vZHVsZS5oZWFwaWZ5LCBOb25lKQorCisgICAgZGVmIHRlc3RfbmFpdmVfbmJlc3Qoc2VsZik6CisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDAwKSBmb3IgaSBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgaGVhcCA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIGRhdGE6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5oZWFwcHVzaChoZWFwLCBpdGVtKQorICAgICAgICAgICAgaWYgbGVuKGhlYXApID4gMTA6CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcHBvcChoZWFwKQorICAgICAgICBoZWFwLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYXAsIHNvcnRlZChkYXRhKVstMTA6XSkKKworICAgIGRlZiBoZWFwaXRlcihzZWxmLCBoZWFwKToKKyAgICAgICAgIyBBbiBpdGVyYXRvciByZXR1cm5pbmcgYSBoZWFwJ3MgZWxlbWVudHMsIHNtYWxsZXN0LWZpcnN0LgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYubW9kdWxlLmhlYXBwb3AoaGVhcCkKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9uYmVzdChzZWxmKToKKyAgICAgICAgIyBMZXNzLW5haXZlICJOLWJlc3QiIGFsZ29yaXRobSwgbXVjaCBmYXN0ZXIgKGlmIGxlbihkYXRhKSBpcyBiaWcKKyAgICAgICAgIyBlbm91Z2ggPHdpbms+KSB0aGFuIHNvcnRpbmcgYWxsIG9mIGRhdGEuICBIb3dldmVyLCBpZiB3ZSBoYWQgYSBtYXgKKyAgICAgICAgIyBoZWFwIGluc3RlYWQgb2YgYSBtaW4gaGVhcCwgaXQgY291bGQgZ28gZmFzdGVyIHN0aWxsIHZpYQorICAgICAgICAjIGhlYXBpZnknaW5nIGFsbCBvZiBkYXRhIChsaW5lYXIgdGltZSksIHRoZW4gZG9pbmcgMTAgaGVhcHBvcHMKKyAgICAgICAgIyAoMTAgbG9nLXRpbWUgc3RlcHMpLgorICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwMCkgZm9yIGkgaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGhlYXAgPSBkYXRhWzoxMF0KKyAgICAgICAgc2VsZi5tb2R1bGUuaGVhcGlmeShoZWFwKQorICAgICAgICBmb3IgaXRlbSBpbiBkYXRhWzEwOl06CisgICAgICAgICAgICBpZiBpdGVtID4gaGVhcFswXTogICMgdGhpcyBnZXRzIHJhcmVyIHRoZSBsb25nZXIgd2UgcnVuCisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UoaGVhcCwgaXRlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNlbGYuaGVhcGl0ZXIoaGVhcCkpLCBzb3J0ZWQoZGF0YSlbLTEwOl0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1vZHVsZS5oZWFwcmVwbGFjZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1vZHVsZS5oZWFwcmVwbGFjZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UsIFtdLCBOb25lKQorCisgICAgZGVmIHRlc3RfbmJlc3Rfd2l0aF9wdXNocG9wKHNlbGYpOgorICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwMCkgZm9yIGkgaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGhlYXAgPSBkYXRhWzoxMF0KKyAgICAgICAgc2VsZi5tb2R1bGUuaGVhcGlmeShoZWFwKQorICAgICAgICBmb3IgaXRlbSBpbiBkYXRhWzEwOl06CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5oZWFwcHVzaHBvcChoZWFwLCBpdGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc2VsZi5oZWFwaXRlcihoZWFwKSksIHNvcnRlZChkYXRhKVstMTA6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1vZHVsZS5oZWFwcHVzaHBvcChbXSwgJ3gnKSwgJ3gnKQorCisgICAgZGVmIHRlc3RfaGVhcHB1c2hwb3Aoc2VsZik6CisgICAgICAgIGggPSBbXQorICAgICAgICB4ID0gc2VsZi5tb2R1bGUuaGVhcHB1c2hwb3AoaCwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGgsIHgpLCAoW10sIDEwKSkKKworICAgICAgICBoID0gWzEwXQorICAgICAgICB4ID0gc2VsZi5tb2R1bGUuaGVhcHB1c2hwb3AoaCwgMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoaCwgeCksIChbMTBdLCAxMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGhbMF0pLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh4KSwgZmxvYXQpCisKKyAgICAgICAgaCA9IFsxMF07CisgICAgICAgIHggPSBzZWxmLm1vZHVsZS5oZWFwcHVzaHBvcChoLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChoLCB4KSwgKFsxMF0sIDkpKQorCisgICAgICAgIGggPSBbMTBdOworICAgICAgICB4ID0gc2VsZi5tb2R1bGUuaGVhcHB1c2hwb3AoaCwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGgsIHgpLCAoWzExXSwgMTApKQorCisgICAgZGVmIHRlc3RfaGVhcHNvcnQoc2VsZik6CisgICAgICAgICMgRXhlcmNpc2UgZXZlcnl0aGluZyB3aXRoIHJlcGVhdGVkIGhlYXBzb3J0IGNoZWNrcworICAgICAgICBmb3IgdHJpYWwgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICBzaXplID0gcmFuZG9tLnJhbmRyYW5nZSg1MCkKKyAgICAgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyNSkgZm9yIGkgaW4gcmFuZ2Uoc2l6ZSldCisgICAgICAgICAgICBpZiB0cmlhbCAmIDE6ICAgICAjIEhhbGYgb2YgdGhlIHRpbWUsIHVzZSBoZWFwaWZ5CisgICAgICAgICAgICAgICAgaGVhcCA9IGRhdGFbOl0KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5oZWFwaWZ5KGhlYXApCisgICAgICAgICAgICBlbHNlOiAgICAgICAgICAgICAjIFRoZSByZXN0IG9mIHRoZSB0aW1lLCB1c2UgaGVhcHB1c2gKKyAgICAgICAgICAgICAgICBoZWFwID0gW10KKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBkYXRhOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5oZWFwcHVzaChoZWFwLCBpdGVtKQorICAgICAgICAgICAgaGVhcF9zb3J0ZWQgPSBbc2VsZi5tb2R1bGUuaGVhcHBvcChoZWFwKSBmb3IgaSBpbiByYW5nZShzaXplKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhcF9zb3J0ZWQsIHNvcnRlZChkYXRhKSkKKworICAgIGRlZiB0ZXN0X21lcmdlKHNlbGYpOgorICAgICAgICBpbnB1dHMgPSBbXQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UocmFuZG9tLnJhbmRyYW5nZSg1KSk6CisgICAgICAgICAgICByb3cgPSBzb3J0ZWQocmFuZG9tLnJhbmRyYW5nZSgxMDAwKSBmb3IgaiBpbiByYW5nZShyYW5kb20ucmFuZHJhbmdlKDEwKSkpCisgICAgICAgICAgICBpbnB1dHMuYXBwZW5kKHJvdykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoY2hhaW4oKmlucHV0cykpLCBsaXN0KHNlbGYubW9kdWxlLm1lcmdlKCppbnB1dHMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNlbGYubW9kdWxlLm1lcmdlKCkpLCBbXSkKKworICAgIGRlZiB0ZXN0X21lcmdlX3N0YWJpbGl0eShzZWxmKToKKyAgICAgICAgY2xhc3MgSW50KGludCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlucHV0cyA9IFtbXSwgW10sIFtdLCBbXV0KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjAwMDApOgorICAgICAgICAgICAgc3RyZWFtID0gcmFuZG9tLnJhbmRyYW5nZSg0KQorICAgICAgICAgICAgeCA9IHJhbmRvbS5yYW5kcmFuZ2UoNTAwKQorICAgICAgICAgICAgb2JqID0gSW50KHgpCisgICAgICAgICAgICBvYmoucGFpciA9ICh4LCBzdHJlYW0pCisgICAgICAgICAgICBpbnB1dHNbc3RyZWFtXS5hcHBlbmQob2JqKQorICAgICAgICBmb3Igc3RyZWFtIGluIGlucHV0czoKKyAgICAgICAgICAgIHN0cmVhbS5zb3J0KCkKKyAgICAgICAgcmVzdWx0ID0gW2kucGFpciBmb3IgaSBpbiBzZWxmLm1vZHVsZS5tZXJnZSgqaW5wdXRzKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNvcnRlZChyZXN1bHQpKQorCisgICAgZGVmIHRlc3RfbnNtYWxsZXN0KHNlbGYpOgorICAgICAgICBkYXRhID0gWyhyYW5kb20ucmFuZHJhbmdlKDIwMDApLCBpKSBmb3IgaSBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZm9yIGYgaW4gKE5vbmUsIGxhbWJkYSB4OiAgeFswXSAqIDU0NyAlIDIwMDApOgorICAgICAgICAgICAgZm9yIG4gaW4gKDAsIDEsIDIsIDEwLCAxMDAsIDQwMCwgOTk5LCAxMDAwLCAxMTAwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLm5zbWFsbGVzdChuLCBkYXRhKSwgc29ydGVkKGRhdGEpWzpuXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLm5zbWFsbGVzdChuLCBkYXRhLCBrZXk9ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQoZGF0YSwga2V5PWYpWzpuXSkKKworICAgIGRlZiB0ZXN0X25sYXJnZXN0KHNlbGYpOgorICAgICAgICBkYXRhID0gWyhyYW5kb20ucmFuZHJhbmdlKDIwMDApLCBpKSBmb3IgaSBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZm9yIGYgaW4gKE5vbmUsIGxhbWJkYSB4OiAgeFswXSAqIDU0NyAlIDIwMDApOgorICAgICAgICAgICAgZm9yIG4gaW4gKDAsIDEsIDIsIDEwLCAxMDAsIDQwMCwgOTk5LCAxMDAwLCAxMTAwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLm5sYXJnZXN0KG4sIGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkKGRhdGEsIHJldmVyc2U9VHJ1ZSlbOm5dKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tb2R1bGUubmxhcmdlc3QobiwgZGF0YSwga2V5PWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkKGRhdGEsIGtleT1mLCByZXZlcnNlPVRydWUpWzpuXSkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmlzb25fb3BlcmF0b3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUgMzA1MTogTWFrZSBzdXJlIGhlYXBxIHdvcmtzIHdpdGggYm90aCBfX2x0X18gYW5kIF9fbGVfXworICAgICAgICBkZWYgaHNvcnQoZGF0YSwgY29tcCk6CisgICAgICAgICAgICBkYXRhID0gbWFwKGNvbXAsIGRhdGEpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5oZWFwaWZ5KGRhdGEpCisgICAgICAgICAgICByZXR1cm4gW3NlbGYubW9kdWxlLmhlYXBwb3AoZGF0YSkueCBmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpXQorICAgICAgICBjbGFzcyBMVDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi54ID4gb3RoZXIueAorICAgICAgICBjbGFzcyBMRToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi54ID49IG90aGVyLngKKyAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZG9tKCkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0KKyAgICAgICAgdGFyZ2V0ID0gc29ydGVkKGRhdGEsIHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoc29ydChkYXRhLCBMVCksIHRhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoc29ydChkYXRhLCBMRSksIHRhcmdldCkKKworCitjbGFzcyBUZXN0SGVhcFB5dGhvbihUZXN0SGVhcCk6CisgICAgbW9kdWxlID0gcHlfaGVhcHEKKworCitAc2tpcFVubGVzcyhjX2hlYXBxLCAncmVxdWlyZXMgX2hlYXBxJykKK2NsYXNzIFRlc3RIZWFwQyhUZXN0SGVhcCk6CisgICAgbW9kdWxlID0gY19oZWFwcQorCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgTGVuT25seToKKyAgICAiRHVtbXkgc2VxdWVuY2UgY2xhc3MgZGVmaW5pbmcgX19sZW5fXyBidXQgbm90IF9fZ2V0aXRlbV9fLiIKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDEwCisKK2NsYXNzIEdldE9ubHk6CisgICAgIkR1bW15IHNlcXVlbmNlIGNsYXNzIGRlZmluaW5nIF9fZ2V0aXRlbV9fIGJ1dCBub3QgX19sZW5fXy4iCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5keCk6CisgICAgICAgIHJldHVybiAxMAorCitjbGFzcyBDbXBFcnI6CisgICAgIkR1bW15IGVsZW1lbnQgdGhhdCBhbHdheXMgcmFpc2VzIGFuIGVycm9yIGR1cmluZyBjb21wYXJpc29uIgorICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKKworZGVmIFIoc2Vxbik6CisgICAgJ1JlZ3VsYXIgZ2VuZXJhdG9yJworICAgIGZvciBpIGluIHNlcW46CisgICAgICAgIHlpZWxkIGkKKworY2xhc3MgRzoKKyAgICAnU2VxdWVuY2UgdXNpbmcgX19nZXRpdGVtX18nCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXFuW2ldCisKK2NsYXNzIEk6CisgICAgJ1NlcXVlbmNlIHVzaW5nIGl0ZXJhdG9yIHByb3RvY29sJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPj0gbGVuKHNlbGYuc2Vxbik6IHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgdiA9IHNlbGYuc2VxbltzZWxmLmldCisgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgIHJldHVybiB2CisKK2NsYXNzIElnOgorICAgICdTZXF1ZW5jZSB1c2luZyBpdGVyYXRvciBwcm90b2NvbCBkZWZpbmVkIHdpdGggYSBnZW5lcmF0b3InCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGZvciB2YWwgaW4gc2VsZi5zZXFuOgorICAgICAgICAgICAgeWllbGQgdmFsCisKK2NsYXNzIFg6CisgICAgJ01pc3NpbmcgX19nZXRpdGVtX18gYW5kIF9faXRlcl9fJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaSA+PSBsZW4oc2VsZi5zZXFuKTogcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICB2ID0gc2VsZi5zZXFuW3NlbGYuaV0KKyAgICAgICAgc2VsZi5pICs9IDEKKyAgICAgICAgcmV0dXJuIHYKKworY2xhc3MgTjoKKyAgICAnSXRlcmF0b3IgbWlzc2luZyBuZXh0KCknCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIEU6CisgICAgJ1Rlc3QgcHJvcGFnYXRpb24gb2YgZXhjZXB0aW9ucycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgMyAvLyAwCisKK2NsYXNzIFM6CisgICAgJ1Rlc3QgaW1tZWRpYXRlIHN0b3AnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBwYXNzCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbiwgaW1hcAorZGVmIEwoc2Vxbik6CisgICAgJ1Rlc3QgbXVsdGlwbGUgdGllcnMgb2YgaXRlcmF0b3JzJworICAgIHJldHVybiBjaGFpbihpbWFwKGxhbWJkYSB4OngsIFIoSWcoRyhzZXFuKSkpKSkKKworY2xhc3MgU2lkZUVmZmVjdExUOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgaGVhcCk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLmhlYXAgPSBoZWFwCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc2VsZi5oZWFwWzpdID0gW10KKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQorCisKK2NsYXNzIFRlc3RFcnJvckhhbmRsaW5nKFRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF9ub25fc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwaWZ5LCBzZWxmLm1vZHVsZS5oZWFwcG9wKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgZiwgMTApCisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwcHVzaCwgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UsCisgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5ubGFyZ2VzdCwgc2VsZi5tb2R1bGUubnNtYWxsZXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgZiwgMTAsIDEwKQorCisgICAgZGVmIHRlc3RfbGVuX29ubHkoc2VsZik6CisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwaWZ5LCBzZWxmLm1vZHVsZS5oZWFwcG9wKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgZiwgTGVuT25seSgpKQorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuaGVhcHB1c2gsIHNlbGYubW9kdWxlLmhlYXByZXBsYWNlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgZiwgTGVuT25seSgpLCAxMCkKKyAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLm5sYXJnZXN0LCBzZWxmLm1vZHVsZS5uc21hbGxlc3QpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAyLCBMZW5Pbmx5KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfb25seShzZWxmKToKKyAgICAgICAgc2VxID0gW0NtcEVycigpLCBDbXBFcnIoKSwgQ21wRXJyKCldCisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwaWZ5LCBzZWxmLm1vZHVsZS5oZWFwcG9wKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBmLCBzZXEpCisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwcHVzaCwgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGYsIHNlcSwgMTApCisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5ubGFyZ2VzdCwgc2VsZi5tb2R1bGUubnNtYWxsZXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBmLCAyLCBzZXEpCisKKyAgICBkZWYgdGVzdF9hcmdfcGFyc2luZyhzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmhlYXBpZnksIHNlbGYubW9kdWxlLmhlYXBwb3AsCisgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5oZWFwcHVzaCwgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UsCisgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5ubGFyZ2VzdCwgc2VsZi5tb2R1bGUubnNtYWxsZXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgZiwgMTApCisKKyAgICBkZWYgdGVzdF9pdGVyYWJsZV9hcmdzKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUubmxhcmdlc3QsIHNlbGYubW9kdWxlLm5zbWFsbGVzdCk6CisgICAgICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgorICAgICAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgTCwgUik6CisgICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjb21wYXJpbmcgdW5lcXVhbCB0eXBlcyBub3Qgc3VwcG9ydGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMiwgZyhzKSksIGYoMixzKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMiwgUyhzKSksIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgMiwgWChzKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIDIsIE4ocykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGYsIDIsIEUocykpCisKKyAgICAjIElzc3VlICMxNzI3ODogdGhlIGhlYXAgbWF5IGNoYW5nZSBzaXplIHdoaWxlIGl0J3MgYmVpbmcgd2Fsa2VkLgorCisgICAgZGVmIHRlc3RfaGVhcHB1c2hfbXV0YXRpbmdfaGVhcChzZWxmKToKKyAgICAgICAgaGVhcCA9IFtdCisgICAgICAgIGhlYXAuZXh0ZW5kKFNpZGVFZmZlY3RMVChpLCBoZWFwKSBmb3IgaSBpbiByYW5nZSgyMDApKQorICAgICAgICAjIFB5dGhvbiB2ZXJzaW9uIHJhaXNlcyBJbmRleEVycm9yLCBDIHZlcnNpb24gUnVudGltZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKEluZGV4RXJyb3IsIFJ1bnRpbWVFcnJvcikpOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcHB1c2goaGVhcCwgU2lkZUVmZmVjdExUKDUsIGhlYXApKQorCisgICAgZGVmIHRlc3RfaGVhcHBvcF9tdXRhdGluZ19oZWFwKHNlbGYpOgorICAgICAgICBoZWFwID0gW10KKyAgICAgICAgaGVhcC5leHRlbmQoU2lkZUVmZmVjdExUKGksIGhlYXApIGZvciBpIGluIHJhbmdlKDIwMCkpCisgICAgICAgICMgUHl0aG9uIHZlcnNpb24gcmFpc2VzIEluZGV4RXJyb3IsIEMgdmVyc2lvbiBSdW50aW1lRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoSW5kZXhFcnJvciwgUnVudGltZUVycm9yKSk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5oZWFwcG9wKGhlYXApCisKKworY2xhc3MgVGVzdEVycm9ySGFuZGxpbmdQeXRob24oVGVzdEVycm9ySGFuZGxpbmcpOgorICAgIG1vZHVsZSA9IHB5X2hlYXBxCisKKworQHNraXBVbmxlc3MoY19oZWFwcSwgJ3JlcXVpcmVzIF9oZWFwcScpCitjbGFzcyBUZXN0RXJyb3JIYW5kbGluZ0MoVGVzdEVycm9ySGFuZGxpbmcpOgorICAgIG1vZHVsZSA9IGNfaGVhcHEKKworCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3RfY2xhc3NlcyA9IFtUZXN0TW9kdWxlcywgVGVzdEhlYXBQeXRob24sIFRlc3RIZWFwQywKKyAgICAgICAgICAgICAgICAgICAgVGVzdEVycm9ySGFuZGxpbmdQeXRob24sIFRlc3RFcnJvckhhbmRsaW5nQ10KKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludCBjb3VudHMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaG1hYy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2htYWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxNDhlOQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2htYWMucHkKQEAgLTAsMCArMSwzMTQgQEAKK2ltcG9ydCBobWFjCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFRlc3RWZWN0b3JzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbWQ1X3ZlY3RvcnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgSE1BQyBtb2R1bGUgYWdhaW5zdCB0ZXN0IHZlY3RvcnMgZnJvbSB0aGUgUkZDLgorCisgICAgICAgIGRlZiBtZDV0ZXN0KGtleSwgZGF0YSwgZGlnZXN0KToKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdC51cHBlcigpKQorCisgICAgICAgIG1kNXRlc3QoY2hyKDB4MGIpICogMTYsCisgICAgICAgICAgICAgICAgIkhpIFRoZXJlIiwKKyAgICAgICAgICAgICAgICAiOTI5NDcyN0EzNjM4QkIxQzEzRjQ4RUY4MTU4QkZDOUQiKQorCisgICAgICAgIG1kNXRlc3QoIkplZmUiLAorICAgICAgICAgICAgICAgICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IiwKKyAgICAgICAgICAgICAgICAiNzUwYzc4M2U2YWIwYjUwM2VhYTg2ZTMxMGE1ZGI3MzgiKQorCisgICAgICAgIG1kNXRlc3QoY2hyKDB4QUEpKjE2LAorICAgICAgICAgICAgICAgIGNocigweEREKSo1MCwKKyAgICAgICAgICAgICAgICAiNTZiZTM0NTIxZDE0NGM4OGRiYjhjNzMzZjBlOGIzZjYiKQorCisgICAgICAgIG1kNXRlc3QoIiIuam9pbihbY2hyKGkpIGZvciBpIGluIHJhbmdlKDEsIDI2KV0pLAorICAgICAgICAgICAgICAgIGNocigweENEKSAqIDUwLAorICAgICAgICAgICAgICAgICI2OTdlYWYwYWNhM2EzYWVhM2E3NTE2NDc0NmZmYWE3OSIpCisKKyAgICAgICAgbWQ1dGVzdChjaHIoMHgwQykgKiAxNiwKKyAgICAgICAgICAgICAgICAiVGVzdCBXaXRoIFRydW5jYXRpb24iLAorICAgICAgICAgICAgICAgICI1NjQ2MWVmMjM0MmVkYzAwZjliYWI5OTU2OTBlZmQ0YyIpCisKKyAgICAgICAgbWQ1dGVzdChjaHIoMHhBQSkgKiA4MCwKKyAgICAgICAgICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKyAgICAgICAgICAgICAgICAiNmIxYWI3ZmU0YmQ3YmY4ZjBiNjJlNmNlNjFiOWQwY2QiKQorCisgICAgICAgIG1kNXRlc3QoY2hyKDB4QUEpICogODAsCisgICAgICAgICAgICAgICAgKCJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5ICIKKyAgICAgICAgICAgICAgICAgImFuZCBMYXJnZXIgVGhhbiBPbmUgQmxvY2stU2l6ZSBEYXRhIiksCisgICAgICAgICAgICAgICAgIjZmNjMwZmFkNjdjZGEwZWUxZmIxZjU2MmRiM2FhNTNlIikKKworICAgIGRlZiB0ZXN0X3NoYV92ZWN0b3JzKHNlbGYpOgorICAgICAgICBkZWYgc2hhdGVzdChrZXksIGRhdGEsIGRpZ2VzdCk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hsaWIuc2hhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKworICAgICAgICBzaGF0ZXN0KGNocigweDBiKSAqIDIwLAorICAgICAgICAgICAgICAgICJIaSBUaGVyZSIsCisgICAgICAgICAgICAgICAgImI2MTczMTg2NTUwNTcyNjRlMjhiYzBiNmZiMzc4YzhlZjE0NmJlMDAiKQorCisgICAgICAgIHNoYXRlc3QoIkplZmUiLAorICAgICAgICAgICAgICAgICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IiwKKyAgICAgICAgICAgICAgICAiZWZmY2RmNmFlNWViMmZhMmQyNzQxNmQ1ZjE4NGRmOWMyNTlhN2M3OSIpCisKKyAgICAgICAgc2hhdGVzdChjaHIoMHhBQSkqMjAsCisgICAgICAgICAgICAgICAgY2hyKDB4REQpKjUwLAorICAgICAgICAgICAgICAgICIxMjVkNzM0MmI5YWMxMWNkOTFhMzlhZjQ4YWExN2I0ZjYzZjE3NWQzIikKKworICAgICAgICBzaGF0ZXN0KCIiLmpvaW4oW2NocihpKSBmb3IgaSBpbiByYW5nZSgxLCAyNildKSwKKyAgICAgICAgICAgICAgICBjaHIoMHhDRCkgKiA1MCwKKyAgICAgICAgICAgICAgICAiNGM5MDA3ZjQwMjYyNTBjNmJjODQxNGY5YmY1MGM4NmMyZDcyMzVkYSIpCisKKyAgICAgICAgc2hhdGVzdChjaHIoMHgwQykgKiAyMCwKKyAgICAgICAgICAgICAgICAiVGVzdCBXaXRoIFRydW5jYXRpb24iLAorICAgICAgICAgICAgICAgICI0YzFhMDM0MjRiNTVlMDdmZTdmMjdiZTFkNThiYjkzMjRhOWE1YTA0IikKKworICAgICAgICBzaGF0ZXN0KGNocigweEFBKSAqIDgwLAorICAgICAgICAgICAgICAgICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IC0gSGFzaCBLZXkgRmlyc3QiLAorICAgICAgICAgICAgICAgICJhYTRhZTVlMTUyNzJkMDBlOTU3MDU2MzdjZThhM2I1NWVkNDAyMTEyIikKKworICAgICAgICBzaGF0ZXN0KGNocigweEFBKSAqIDgwLAorICAgICAgICAgICAgICAgICgiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAiCisgICAgICAgICAgICAgICAgICJhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0YSIpLAorICAgICAgICAgICAgICAgICJlOGU5OWQwZjQ1MjM3ZDc4NmQ2YmJhYTc5NjVjNzgwOGJiZmYxYTkxIikKKworICAgIGRlZiBfcmZjNDIzMV90ZXN0X2Nhc2VzKHNlbGYsIGhhc2hmdW5jKToKKyAgICAgICAgZGVmIGhtYWN0ZXN0KGtleSwgZGF0YSwgaGV4ZGlnZXN0cyk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hmdW5jKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLmxvd2VyKCksIGhleGRpZ2VzdHNbaGFzaGZ1bmNdKQorCisgICAgICAgICMgNC4yLiAgVGVzdCBDYXNlIDEKKyAgICAgICAgaG1hY3Rlc3Qoa2V5ID0gJ1x4MGInKjIwLAorICAgICAgICAgICAgICAgICBkYXRhID0gJ0hpIFRoZXJlJywKKyAgICAgICAgICAgICAgICAgaGV4ZGlnZXN0cyA9IHsKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTIyNDogJzg5NmZiMTEyOGFiYmRmMTk2ODMyMTA3Y2Q0OWRmMzNmJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNDdiNGIxMTY5OTEyYmE0ZjUzNjg0YjIyJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTI1NjogJ2IwMzQ0YzYxZDhkYjM4NTM1Y2E4YWZjZWFmMGJmMTJiJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnODgxZGMyMDBjOTgzM2RhNzI2ZTkzNzZjMmUzMmNmZjcnLAorICAgICAgICAgICAgICAgICAgIGhhc2hsaWIuc2hhMzg0OiAnYWZkMDM5NDRkODQ4OTU2MjZiMDgyNWY0YWI0NjkwN2YnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxNWY5ZGFkYmU0MTAxZWM2ODJhYTAzNGM3Y2ViYzU5YycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhZWE5ZWE5MDc2ZWRlN2Y0YWYxNTJlOGIyZmE5Y2I2JywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTUxMjogJzg3YWE3Y2RlYTVlZjYxOWQ0ZmYwYjQyNDFhMWQ2Y2IwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMjM3OWY0ZTJjZTRlYzI3ODdhZDBiMzA1NDVlMTdjZGUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYWE4MzNiN2Q2YjhhNzAyMDM4YjI3NGVhZWEzZjRlNCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlOWQ5MTRlZWI2MWYxNzAyZTY5NmMyMDNhMTI2ODU0JywKKyAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAjIDQuMy4gIFRlc3QgQ2FzZSAyCisgICAgICAgIGhtYWN0ZXN0KGtleSA9ICdKZWZlJywKKyAgICAgICAgICAgICAgICAgZGF0YSA9ICd3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/JywKKyAgICAgICAgICAgICAgICAgaGV4ZGlnZXN0cyA9IHsKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTIyNDogJ2EzMGUwMTA5OGJjNmRiYmY0NTY5MGYzYTdlOWU2ZDBmJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOGJiZWEyYTM5ZTYxNDgwMDhmZDA1ZTQ0JywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTI1NjogJzViZGNjMTQ2YmY2MDc1NGU2YTA0MjQyNjA4OTU3NWM3JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNWEwMDNmMDg5ZDI3Mzk4MzlkZWM1OGI5NjRlYzM4NDMnLAorICAgICAgICAgICAgICAgICAgIGhhc2hsaWIuc2hhMzg0OiAnYWY0NWQyZTM3NjQ4NDAzMTYxN2Y3OGQyYjU4YTZiMWInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc5YzdlZjQ2NGY1YTAxYjQ3ZTQyZWMzNzM2MzIyNDQ1ZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzhlMjI0MGNhNWU2OWUyYzc4YjMyMzllY2ZhYjIxNjQ5JywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTUxMjogJzE2NGI3YTdiZmNmODE5ZTJlMzk1ZmJlNzNiNTZlMGEzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnODdiZDY0MjIyZTgzMWZkNjEwMjcwY2Q3ZWEyNTA1NTQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc5NzU4YmY3NWMwNWE5OTRhNmQwMzRmNjVmOGYwZTZmZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhZWFiMWEzNGQ0YTZiNGI2MzZlMDcwYTM4YmNlNzM3JywKKyAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAjIDQuNC4gIFRlc3QgQ2FzZSAzCisgICAgICAgIGhtYWN0ZXN0KGtleSA9ICdceGFhJyoyMCwKKyAgICAgICAgICAgICAgICAgZGF0YSA9ICdceGRkJyo1MCwKKyAgICAgICAgICAgICAgICAgaGV4ZGlnZXN0cyA9IHsKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTIyNDogJzdmYjNjYjM1ODhjNmMxZjZmZmE5Njk0ZDdkNmFkMjY0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTM2NWIwYzFmNjVkNjlkMWVjODMzM2VhJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTI1NjogJzc3M2VhOTFlMzY4MDBlNDY4NTRkYjhlYmQwOTE4MWE3JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMjk1OTA5OGIzZWY4YzEyMmQ5NjM1NTE0Y2VkNTY1ZmUnLAorICAgICAgICAgICAgICAgICAgIGhhc2hsaWIuc2hhMzg0OiAnODgwNjI2MDhkM2U2YWQ4YTBhYTJhY2UwMTRjOGE4NmYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwYWE2MzVkOTQ3YWM5ZmViZTgzZWY0ZTU1OTY2MTQ0YicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzJhNWFiMzlkYzEzODE0Yjk0ZTNhYjZlMTAxYTM0ZjI3JywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTUxMjogJ2ZhNzNiMDA4OWQ1NmEyODRlZmIwZjA3NTZjODkwYmU5JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYjFiNWRiZGQ4ZWU4MWEzNjU1ZjgzZTMzYjIyNzlkMzknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZjNlODQ4Mjc5YTcyMmM4MDZiNDg1YTQ3ZTY3YzgwNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2I5NDZhMzM3YmVlODk0MjY3NDI3ODg1OWUxMzI5MmZiJywKKyAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAjIDQuNS4gIFRlc3QgQ2FzZSA0CisgICAgICAgIGhtYWN0ZXN0KGtleSA9ICcnLmpvaW4oW2Nocih4KSBmb3IgeCBpbiB4cmFuZ2UoMHgwMSwgMHgxOSsxKV0pLAorICAgICAgICAgICAgICAgICBkYXRhID0gJ1x4Y2QnKjUwLAorICAgICAgICAgICAgICAgICBoZXhkaWdlc3RzID0geworICAgICAgICAgICAgICAgICAgIGhhc2hsaWIuc2hhMjI0OiAnNmMxMTUwNjg3NDAxM2NhYzZhMmFiYzFiYjM4MjYyN2MnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlYzZhOTBkODZlZmMwMTJkZTdhZmVjNWEnLAorICAgICAgICAgICAgICAgICAgIGhhc2hsaWIuc2hhMjU2OiAnODI1NThhMzg5YTQ0M2MwZWE0Y2M4MTk4OTlmMjA4M2EnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc4NWYwZmFhM2U1NzhmODA3N2EyZTNmZjQ2NzI5NjY1YicsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEzODQ6ICczZThhNjliNzc4M2MyNTg1MTkzM2FiNjI5MGFmNmNhNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzdhOTk4MTQ4MDg1MDAwOWNjNTU3N2M2ZTFmNTczYjRlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNjgwMWRkMjNjNGE3ZDY3OWNjZjhhMzg2YzY3NGNmZmInLAorICAgICAgICAgICAgICAgICAgIGhhc2hsaWIuc2hhNTEyOiAnYjBiYTQ2NTYzNzQ1OGM2OTkwZTVhOGM1ZjYxZDRhZjcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlNTc2ZDk3ZmY5NGI4NzJkZTc2ZjgwNTAzNjFlZTNkYicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E5MWNhNWMxMWFhMjVlYjRkNjc5Mjc1Y2M1Nzg4MDYzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYTVmMTk3NDExMjBjNGYyZGUyYWRlYmViMTBhMjk4ZGQnLAorICAgICAgICAgICAgICAgICB9KQorCisgICAgICAgICMgNC43LiAgVGVzdCBDYXNlIDYKKyAgICAgICAgaG1hY3Rlc3Qoa2V5ID0gJ1x4YWEnKjEzMSwKKyAgICAgICAgICAgICAgICAgZGF0YSA9ICdUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpeicKKyAgICAgICAgICAgICAgICAgICAgICAgICdlIEtleSAtIEhhc2ggS2V5IEZpcnN0JywKKyAgICAgICAgICAgICAgICAgaGV4ZGlnZXN0cyA9IHsKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTIyNDogJzk1ZTlhMGRiOTYyMDk1YWRhZWJlOWIyZDZmMGRiY2UyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZDQ5OWYxMTJmMmQyYjcyNzNmYTY4NzBlJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTI1NjogJzYwZTQzMTU5MWVlMGI2N2YwZDhhMjZhYWNiZjViNzdmJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOGUwYmM2MjEzNzI4YzUxNDA1NDYwNDBmMGVlMzdmNTQnLAorICAgICAgICAgICAgICAgICAgIGhhc2hsaWIuc2hhMzg0OiAnNGVjZTA4NDQ4NTgxM2U5MDg4ZDJjNjNhMDQxYmM1YjQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc0ZjllZjEwMTJhMmI1ODhmM2NkMTFmMDUwMzNhYzRjNicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzBjMmVmNmFiNDAzMGZlODI5NjI0OGRmMTYzZjQ0OTUyJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTUxMjogJzgwYjI0MjYzYzdjMWEzZWJiNzE0OTNjMWRkN2JlOGI0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOWI0NmQxZjQxYjRhZWVjMTEyMWIwMTM3ODNmOGYzNTInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc2YjU2ZDAzN2UwNWYyNTk4YmQwZmQyMjE1ZDZhMWU1MicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk1ZTY0ZjczZjYzZjBhZWM4YjkxNWE5ODVkNzg2NTk4JywKKyAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAjIDQuOC4gIFRlc3QgQ2FzZSA3CisgICAgICAgIGhtYWN0ZXN0KGtleSA9ICdceGFhJyoxMzEsCisgICAgICAgICAgICAgICAgIGRhdGEgPSAnVGhpcyBpcyBhIHRlc3QgdXNpbmcgYSBsYXJnZXIgdGgnCisgICAgICAgICAgICAgICAgICAgICAgICAnYW4gYmxvY2stc2l6ZSBrZXkgYW5kIGEgbGFyZ2VyIHQnCisgICAgICAgICAgICAgICAgICAgICAgICAnaGFuIGJsb2NrLXNpemUgZGF0YS4gVGhlIGtleSBuZWUnCisgICAgICAgICAgICAgICAgICAgICAgICAnZHMgdG8gYmUgaGFzaGVkIGJlZm9yZSBiZWluZyB1c2UnCisgICAgICAgICAgICAgICAgICAgICAgICAnZCBieSB0aGUgSE1BQyBhbGdvcml0aG0uJywKKyAgICAgICAgICAgICAgICAgaGV4ZGlnZXN0cyA9IHsKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTIyNDogJzNhODU0MTY2YWM1ZDlmMDIzZjU0ZDUxN2QwYjM5ZGJkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTQ2NzcwZGI5YzJiOTVjOWY2ZjU2NWQxJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTI1NjogJzliMDlmZmE3MWI5NDJmY2IyNzYzNWZiY2Q1YjBlOTQ0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmZkYzYzNjQ0ZjA3MTM5MzhhN2Y1MTUzNWMzYTM1ZTInLAorICAgICAgICAgICAgICAgICAgIGhhc2hsaWIuc2hhMzg0OiAnNjYxNzE3OGU5NDFmMDIwZDM1MWUyZjI1NGU4ZmQzMmMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc2MDI0MjBmZWIwYjhmYjlhZGNjZWJiODI0NjFlOTljNScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E2NzhjYzMxZTc5OTE3NmQzODYwZTYxMTBjNDY1MjNlJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTUxMjogJ2UzN2I2YTc3NWRjODdkYmFhNGRmYTlmOTZlNWUzZmZkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGViZDcxZjg4NjcyODk4NjVkZjVhMzJkMjBjZGM5NDQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiNjAyMmNhYzNjNDk4MmIxMGQ1ZWViNTVjM2U0ZGUxNScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEzNDY3NmZiNmRlMDQ0NjA2NWM5NzQ0MGZhOGM2YTU4JywKKyAgICAgICAgICAgICAgICAgfSkKKworICAgIGRlZiB0ZXN0X3NoYTIyNF9yZmM0MjMxKHNlbGYpOgorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyMjQpCisKKyAgICBkZWYgdGVzdF9zaGEyNTZfcmZjNDIzMShzZWxmKToKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjU2KQorCisgICAgZGVmIHRlc3Rfc2hhMzg0X3JmYzQyMzEoc2VsZik6CisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTM4NCkKKworICAgIGRlZiB0ZXN0X3NoYTUxMl9yZmM0MjMxKHNlbGYpOgorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGE1MTIpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfYmxvY2tfc2l6ZV93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ja0NyYXp5SGFzaChvYmplY3QpOgorICAgICAgICAgICAgIiIiQWluJ3Qgbm8gYmxvY2tfc2l6ZSBhdHRyaWJ1dGUgaGVyZS4iIiIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5feCA9IGhhc2hsaWIuc2hhMSgqYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLmRpZ2VzdF9zaXplID0gc2VsZi5feC5kaWdlc3Rfc2l6ZQorICAgICAgICAgICAgZGVmIHVwZGF0ZShzZWxmLCB2KToKKyAgICAgICAgICAgICAgICBzZWxmLl94LnVwZGF0ZSh2KQorICAgICAgICAgICAgZGVmIGRpZ2VzdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5feC5kaWdlc3QoKQorCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZXJyb3InLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZVdhcm5pbmcpOgorICAgICAgICAgICAgICAgIGhtYWMuSE1BQygnYScsICdiJywgZGlnZXN0bW9kPU1vY2tDcmF6eUhhc2gpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeHBlY3RlZCB3YXJuaW5nIGFib3V0IG1pc3NpbmcgYmxvY2tfc2l6ZScpCisKKyAgICAgICAgICAgIE1vY2tDcmF6eUhhc2guYmxvY2tfc2l6ZSA9IDEKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZVdhcm5pbmcpOgorICAgICAgICAgICAgICAgIGhtYWMuSE1BQygnYScsICdiJywgZGlnZXN0bW9kPU1vY2tDcmF6eUhhc2gpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeHBlY3RlZCB3YXJuaW5nIGFib3V0IHNtYWxsIGJsb2NrX3NpemUnKQorCisKKworY2xhc3MgQ29uc3RydWN0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3JtYWwoc2VsZik6CisgICAgICAgICMgU3RhbmRhcmQgY29uc3RydWN0b3IgY2FsbC4KKyAgICAgICAgZmFpbGVkID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKCJrZXkiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlN0YW5kYXJkIGNvbnN0cnVjdG9yIGNhbGwgcmFpc2VkIGV4Y2VwdGlvbi4iKQorCisgICAgZGVmIHRlc3Rfd2l0aHRleHQoc2VsZik6CisgICAgICAgICMgQ29uc3RydWN0b3IgY2FsbCB3aXRoIHRleHQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoImtleSIsICJoYXNoIHRoaXMhIikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dCBhcmd1bWVudCByYWlzZWQgZXhjZXB0aW9uLiIpCisKKyAgICBkZWYgdGVzdF93aXRobW9kdWxlKHNlbGYpOgorICAgICAgICAjIENvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0IGFuZCBkaWdlc3QgbW9kdWxlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKCJrZXkiLCAiIiwgaGFzaGxpYi5zaGExKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCBoYXNobGliLnNoYTEgcmFpc2VkIGV4Y2VwdGlvbi4iKQorCitjbGFzcyBTYW5pdHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2lzX21kNShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGlmIEhNQUMgZGVmYXVsdHMgdG8gTUQ1IGFsZ29yaXRobS4KKyAgICAgICAgIyBOT1RFOiB0aGlzIHdoaXRlYm94IHRlc3QgZGVwZW5kcyBvbiB0aGUgaG1hYyBjbGFzcyBpbnRlcm5hbHMKKyAgICAgICAgaCA9IGhtYWMuSE1BQygia2V5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguZGlnZXN0X2NvbnMgPT0gaGFzaGxpYi5tZDUpCisKKyAgICBkZWYgdGVzdF9leGVyY2lzZV9hbGxfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyBFeGVyY2lzaW5nIGFsbCBtZXRob2RzIG9uY2UuCisgICAgICAgICMgVGhpcyBtdXN0IG5vdCByYWlzZSBhbnkgZXhjZXB0aW9ucworICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKCJteSBzZWNyZXQga2V5IikKKyAgICAgICAgICAgIGgudXBkYXRlKCJjb21wdXRlIHRoZSBoYXNoIG9mIHRoaXMgdGV4dCEiKQorICAgICAgICAgICAgZGlnID0gaC5kaWdlc3QoKQorICAgICAgICAgICAgZGlnID0gaC5oZXhkaWdlc3QoKQorICAgICAgICAgICAgaDIgPSBoLmNvcHkoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nIG5vcm1hbCB1c2FnZSBvZiBITUFDIGNsYXNzLiIpCisKK2NsYXNzIENvcHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgaWYgYXR0cmlidXRlcyBhcmUgb2Ygc2FtZSB0eXBlLgorICAgICAgICBoMSA9IGhtYWMuSE1BQygia2V5IikKKyAgICAgICAgaDIgPSBoMS5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxLmRpZ2VzdF9jb25zID09IGgyLmRpZ2VzdF9jb25zLAorICAgICAgICAgICAgImRpZ2VzdCBjb25zdHJ1Y3RvcnMgZG9uJ3QgbWF0Y2guIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoaDEuaW5uZXIpID09IHR5cGUoaDIuaW5uZXIpLAorICAgICAgICAgICAgIlR5cGVzIG9mIGlubmVyIGRvbid0IG1hdGNoLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGgxLm91dGVyKSA9PSB0eXBlKGgyLm91dGVyKSwKKyAgICAgICAgICAgICJUeXBlcyBvZiBvdXRlciBkb24ndCBtYXRjaC4iKQorCisgICAgZGVmIHRlc3RfcmVhbGNvcHkoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBpZiB0aGUgY29weSBtZXRob2QgY3JlYXRlZCBhIHJlYWwgY29weS4KKyAgICAgICAgaDEgPSBobWFjLkhNQUMoImtleSIpCisgICAgICAgIGgyID0gaDEuY29weSgpCisgICAgICAgICMgVXNpbmcgaWQoKSBpbiBjYXNlIHNvbWVib2R5IGhhcyBvdmVycmlkZGVuIF9fY21wX18uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZChoMSkgIT0gaWQoaDIpLCAiTm8gcmVhbCBjb3B5IG9mIHRoZSBITUFDIGluc3RhbmNlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZChoMS5pbm5lcikgIT0gaWQoaDIuaW5uZXIpLAorICAgICAgICAgICAgIk5vIHJlYWwgY29weSBvZiB0aGUgYXR0cmlidXRlICdpbm5lcicuIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlkKGgxLm91dGVyKSAhPSBpZChoMi5vdXRlciksCisgICAgICAgICAgICAiTm8gcmVhbCBjb3B5IG9mIHRoZSBhdHRyaWJ1dGUgJ291dGVyJy4iKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBpZiB0aGUgY29weSBoYXMgdGhlIHNhbWUgZGlnZXN0cy4KKyAgICAgICAgaDEgPSBobWFjLkhNQUMoImtleSIpCisgICAgICAgIGgxLnVwZGF0ZSgic29tZSByYW5kb20gdGV4dCIpCisgICAgICAgIGgyID0gaDEuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMS5kaWdlc3QoKSA9PSBoMi5kaWdlc3QoKSwKKyAgICAgICAgICAgICJEaWdlc3Qgb2YgY29weSBkb2Vzbid0IG1hdGNoIG9yaWdpbmFsIGRpZ2VzdC4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEuaGV4ZGlnZXN0KCkgPT0gaDIuaGV4ZGlnZXN0KCksCisgICAgICAgICAgICAiSGV4ZGlnZXN0IG9mIGNvcHkgZG9lc24ndCBtYXRjaCBvcmlnaW5hbCBoZXhkaWdlc3QuIikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3RWZWN0b3JzVGVzdENhc2UsCisgICAgICAgIENvbnN0cnVjdG9yVGVzdENhc2UsCisgICAgICAgIFNhbml0eVRlc3RDYXNlLAorICAgICAgICBDb3B5VGVzdENhc2UKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2hvdHNob3QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ob3RzaG90LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYTk3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ob3RzaG90LnB5CkBAIC0wLDAgKzEsMTU4IEBACitpbXBvcnQgb3MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgX2hvdHNob3QKK2ltcG9ydCBnYworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIFNpbGVuY2UgUHkzayB3YXJuaW5nCitob3RzaG90ID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2hvdHNob3QnLCBkZXByZWNhdGVkPVRydWUpCitmcm9tIGhvdHNob3QubG9nIGltcG9ydCBFTlRFUiwgRVhJVCwgTElORQorZnJvbSBob3RzaG90IGltcG9ydCBzdGF0cworCisKK2RlZiBzaG9ydGZpbGVuYW1lKGZuKToKKyAgICAjIFdlIHVzZSBhIHJlYWxseSBzaG9ydGVuZWQgZmlsZW5hbWUgc2luY2UgYW4gZXhhY3QgbWF0Y2ggaXMgbWFkZSwKKyAgICAjIGFuZCB0aGUgc291cmNlIG1heSBiZSBlaXRoZXIgYSBQeXRob24gc291cmNlIGZpbGUgb3IgYQorICAgICMgcHJlLWNvbXBpbGVkIGJ5dGVjb2RlIGZpbGUuCisgICAgaWYgZm46CisgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZm4pKVswXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmbgorCisKK2NsYXNzIFVubGlua2luZ0xvZ1JlYWRlcihob3RzaG90LmxvZy5Mb2dSZWFkZXIpOgorICAgICIiIkV4dGVuZCB0aGUgTG9nUmVhZGVyIHNvIHRoZSBsb2cgZmlsZSBpcyB1bmxpbmtlZCB3aGVuIHdlJ3JlCisgICAgZG9uZSB3aXRoIGl0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZ2ZuKToKKyAgICAgICAgc2VsZi5fX2xvZ2ZuID0gbG9nZm4KKyAgICAgICAgaG90c2hvdC5sb2cuTG9nUmVhZGVyLl9faW5pdF9fKHNlbGYsIGxvZ2ZuKQorCisgICAgZGVmIG5leHQoc2VsZiwgaW5kZXg9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBob3RzaG90LmxvZy5Mb2dSZWFkZXIubmV4dChzZWxmKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX19sb2dmbikKKyAgICAgICAgICAgIHJhaXNlCisKKworY2xhc3MgSG90U2hvdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgbmV3X3Byb2ZpbGVyKHNlbGYsIGxpbmVldmVudHM9MCwgbGluZXRpbWluZ3M9MSk6CisgICAgICAgIHNlbGYubG9nZm4gPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIHJldHVybiBob3RzaG90LlByb2ZpbGUoc2VsZi5sb2dmbiwgbGluZWV2ZW50cywgbGluZXRpbWluZ3MpCisKKyAgICBkZWYgZ2V0X2xvZ3JlYWRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIFVubGlua2luZ0xvZ1JlYWRlcihzZWxmLmxvZ2ZuKQorCisgICAgZGVmIGdldF9ldmVudHNfd290aW1lKHNlbGYpOgorICAgICAgICBMID0gW10KKyAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZ2V0X2xvZ3JlYWRlcigpOgorICAgICAgICAgICAgd2hhdCwgKGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNuYW1lKSwgdGRlbHRhID0gZXZlbnQKKyAgICAgICAgICAgIEwuYXBwZW5kKCh3aGF0LCAoc2hvcnRmaWxlbmFtZShmaWxlbmFtZSksIGxpbmVubywgZnVuY25hbWUpKSkKKyAgICAgICAgcmV0dXJuIEwKKworICAgIGRlZiBjaGVja19ldmVudHMoc2VsZiwgZXhwZWN0ZWQpOgorICAgICAgICBldmVudHMgPSBzZWxmLmdldF9ldmVudHNfd290aW1lKCkKKyAgICAgICAgaWYgZXZlbnRzICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKAorICAgICAgICAgICAgICAgICJldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RhdGlvbjsgZ290OlxuJXNcbmV4cGVjdGVkOlxuJXMiCisgICAgICAgICAgICAgICAgJSAocHByaW50LnBmb3JtYXQoZXZlbnRzKSwgcHByaW50LnBmb3JtYXQoZXhwZWN0ZWQpKSkKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCBjYWxsYWJsZSwgZXZlbnRzLCBwcm9maWxlcj1Ob25lKToKKyAgICAgICAgaWYgcHJvZmlsZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHByb2ZpbGVyID0gc2VsZi5uZXdfcHJvZmlsZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHByb2ZpbGVyLl9wcm9mLmNsb3NlZCkKKyAgICAgICAgcHJvZmlsZXIucnVuY2FsbChjYWxsYWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBwcm9maWxlci5fcHJvZi5jbG9zZWQpCisgICAgICAgIHByb2ZpbGVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2ZpbGVyLl9wcm9mLmNsb3NlZCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZXZlbnRzKQorCisgICAgZGVmIHRlc3RfYWRkaW5mbyhzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICBwLmFkZGluZm8oInRlc3Qta2V5IiwgInRlc3QtdmFsdWUiKQorICAgICAgICBwcm9maWxlciA9IHNlbGYubmV3X3Byb2ZpbGVyKCkKKyAgICAgICAgcHJvZmlsZXIucnVuY2FsbChmLCBwcm9maWxlcikKKyAgICAgICAgcHJvZmlsZXIuY2xvc2UoKQorICAgICAgICBsb2cgPSBzZWxmLmdldF9sb2dyZWFkZXIoKQorICAgICAgICBpbmZvID0gbG9nLl9pbmZvCisgICAgICAgIGxpc3QobG9nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mb1sidGVzdC1rZXkiXSA9PSBbInRlc3QtdmFsdWUiXSkKKworICAgIGRlZiB0ZXN0X2xpbmVfbnVtYmVycyhzZWxmKToKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHkgPSAyCisgICAgICAgICAgICB4ID0gMQorICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgZigpCisgICAgICAgIGZfbGluZW5vID0gZi5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgZ19saW5lbm8gPSBnLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubworICAgICAgICBldmVudHMgPSBbKEVOVEVSLCAoInRlc3RfaG90c2hvdCIsIGdfbGluZW5vLCAiZyIpKSwKKyAgICAgICAgICAgICAgICAgIChMSU5FLCAgKCJ0ZXN0X2hvdHNob3QiLCBnX2xpbmVubysxLCAiZyIpKSwKKyAgICAgICAgICAgICAgICAgIChFTlRFUiwgKCJ0ZXN0X2hvdHNob3QiLCBmX2xpbmVubywgImYiKSksCisgICAgICAgICAgICAgICAgICAoTElORSwgICgidGVzdF9ob3RzaG90IiwgZl9saW5lbm8rMSwgImYiKSksCisgICAgICAgICAgICAgICAgICAoTElORSwgICgidGVzdF9ob3RzaG90IiwgZl9saW5lbm8rMiwgImYiKSksCisgICAgICAgICAgICAgICAgICAoRVhJVCwgICgidGVzdF9ob3RzaG90IiwgZl9saW5lbm8sICJmIikpLAorICAgICAgICAgICAgICAgICAgKEVYSVQsICAoInRlc3RfaG90c2hvdCIsIGdfbGluZW5vLCAiZyIpKSwKKyAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5ydW5fdGVzdChnLCBldmVudHMsIHNlbGYubmV3X3Byb2ZpbGVyKGxpbmVldmVudHM9MSkpCisKKyAgICBkZWYgdGVzdF9zdGFydF9zdG9wKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBkb24ndCByZXR1cm4gTlVMTCBpbiB0aGUgc3RhcnQoKSBhbmQgc3RvcCgpCisgICAgICAgICMgbWV0aG9kcyB3aGVuIHRoZXJlIGlzbid0IGFuIGVycm9yLiAgQnVnIGluIDIuMiBub3RlZCBieQorICAgICAgICAjIEFudGhvbnkgQmF4dGVyLgorICAgICAgICBwcm9maWxlciA9IHNlbGYubmV3X3Byb2ZpbGVyKCkKKyAgICAgICAgcHJvZmlsZXIuc3RhcnQoKQorICAgICAgICBwcm9maWxlci5zdG9wKCkKKyAgICAgICAgcHJvZmlsZXIuY2xvc2UoKQorICAgICAgICBvcy51bmxpbmsoc2VsZi5sb2dmbikKKworICAgIGRlZiB0ZXN0X2JhZF9zeXNfcGF0aChzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgb3JpZ19wYXRoID0gc3lzLnBhdGgKKyAgICAgICAgY292ZXJhZ2UgPSBob3RzaG90Ll9ob3RzaG90LmNvdmVyYWdlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgdmVyaWZ5IHdlIHJlcXVpcmUgYSBsaXN0IGZvciBzeXMucGF0aAorICAgICAgICAgICAgc3lzLnBhdGggPSAnYWJjJworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb3ZlcmFnZSwgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgd2UgcmVxdWlyZSBzeXMucGF0aCBleGlzdHMKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb3ZlcmFnZSwgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5wYXRoID0gb3JpZ19wYXRoCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0ZXN0X3N1cHBvcnQuVEVTVEZOKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2xvZ3JlYWRlcl9lb2ZfZXJyb3Ioc2VsZik6CisgICAgICAgIGVtcHR5ZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChJT0Vycm9yLCBFT0ZFcnJvciksIF9ob3RzaG90LmxvZ3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5ZmlsZS5uYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZW1wdHlmaWxlLmNsb3NlKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9sb2FkX3N0YXRzKHNlbGYpOgorICAgICAgICBkZWYgc3RhcnQocHJvZik6CisgICAgICAgICAgICBwcm9mLnN0YXJ0KCkKKyAgICAgICAgIyBNYWtlIHN1cmUgc3RhdHMgY2FuIGJlIGxvYWRlZCB3aGVuIHN0YXJ0IGFuZCBzdG9wIG9mIHByb2ZpbGVyCisgICAgICAgICMgYXJlIG5vdCBleGVjdXRlZCBpbiB0aGUgc2FtZSBzdGFjayBmcmFtZS4KKyAgICAgICAgcHJvZmlsZXIgPSBzZWxmLm5ld19wcm9maWxlcigpCisgICAgICAgIHN0YXJ0KHByb2ZpbGVyKQorICAgICAgICBwcm9maWxlci5zdG9wKCkKKyAgICAgICAgcHJvZmlsZXIuY2xvc2UoKQorICAgICAgICBzdGF0cy5sb2FkKHNlbGYubG9nZm4pCisgICAgICAgIG9zLnVubGluayhzZWxmLmxvZ2ZuKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhvdFNob3RUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9odG1sbGliLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaHRtbGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzgxM2IwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaHRtbGxpYi5weQpAQCAtMCwwICsxLDY5IEBACitpbXBvcnQgZm9ybWF0dGVyCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2h0bWxsaWIgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnaHRtbGxpYicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworCitjbGFzcyBBbmNob3JDb2xsZWN0b3IoaHRtbGxpYi5IVE1MUGFyc2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9fYW5jaG9ycyA9IFtdCisgICAgICAgIGh0bWxsaWIuSFRNTFBhcnNlci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKKworICAgIGRlZiBnZXRfYW5jaG9yX2luZm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fYW5jaG9ycworCisgICAgZGVmIGFuY2hvcl9iZ24oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9fYW5jaG9ycy5hcHBlbmQoYXJncykKKworY2xhc3MgRGVjbENvbGxlY3RvcihodG1sbGliLkhUTUxQYXJzZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX19kZWNscyA9IFtdCisgICAgICAgIGh0bWxsaWIuSFRNTFBhcnNlci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKKworICAgIGRlZiBnZXRfZGVjbF9pbmZvKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2RlY2xzCisKKyAgICBkZWYgdW5rbm93bl9kZWNsKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9fZGVjbHMuYXBwZW5kKGRhdGEpCisKKworY2xhc3MgSFRNTFBhcnNlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9hbmNob3JfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBTZWUgU0YgYnVnICM0NjcwNTkuCisgICAgICAgIHBhcnNlciA9IEFuY2hvckNvbGxlY3Rvcihmb3JtYXR0ZXIuTnVsbEZvcm1hdHRlcigpLCB2ZXJib3NlPTEpCisgICAgICAgIHBhcnNlci5mZWVkKAorICAgICAgICAgICAgIiIiPGEgaHJlZj0naHR0cDovL2Zvby5vcmcvJyBuYW1lPSdzcGxhdCc+IDwvYT4KKyAgICAgICAgICAgIDxhIGhyZWY9J2h0dHA6Ly93d3cucHl0aG9uLm9yZy8nPiA8L2E+CisgICAgICAgICAgICA8YSBuYW1lPSdmcm9iJz4gPC9hPgorICAgICAgICAgICAgIiIiKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRfYW5jaG9yX2luZm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdodHRwOi8vZm9vLm9yZy8nLCAnc3BsYXQnLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL3d3dy5weXRob24ub3JnLycsICcnLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnJywgJ2Zyb2InLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9kZWNsX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgU2VlIFNGIHBhdGNoICM1NDUzMDAKKyAgICAgICAgcGFyc2VyID0gRGVjbENvbGxlY3Rvcihmb3JtYXR0ZXIuTnVsbEZvcm1hdHRlcigpLCB2ZXJib3NlPTEpCisgICAgICAgIHBhcnNlci5mZWVkKAorICAgICAgICAgICAgIiIiPGh0bWw+CisgICAgICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgIGhhbGxvCisgICAgICAgICAgICA8IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT4KKyAgICAgICAgICAgIDwvYm9keT4KKyAgICAgICAgICAgIDwvaHRtbD4KKyAgICAgICAgICAgICIiIikKKyAgICAgICAgcGFyc2VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0X2RlY2xfaW5mbygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiaWYgIXN1cHBvcnRFbXB0eVBhcmFzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZGlmIgorICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChIVE1MUGFyc2VyVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjNDYxZgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKQEAgLTAsMCArMSw2MTAgQEAKKyIiIlRlc3RzIGZvciBIVE1MUGFyc2VyLnB5LiIiIgorCitpbXBvcnQgSFRNTFBhcnNlcgoraW1wb3J0IHBwcmludAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIEV2ZW50Q29sbGVjdG9yKEhUTUxQYXJzZXIuSFRNTFBhcnNlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZXZlbnRzID0gW10KKyAgICAgICAgc2VsZi5hcHBlbmQgPSBzZWxmLmV2ZW50cy5hcHBlbmQKKyAgICAgICAgSFRNTFBhcnNlci5IVE1MUGFyc2VyLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgZ2V0X2V2ZW50cyhzZWxmKToKKyAgICAgICAgIyBOb3JtYWxpemUgdGhlIGxpc3Qgb2YgZXZlbnRzIHNvIHRoYXQgYnVmZmVyIGFydGVmYWN0cyBkb24ndAorICAgICAgICAjIHNlcGFyYXRlIHJ1bnMgb2YgY29udGlndW91cyBjaGFyYWN0ZXJzLgorICAgICAgICBMID0gW10KKyAgICAgICAgcHJldnR5cGUgPSBOb25lCisgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50czoKKyAgICAgICAgICAgIHR5cGUgPSBldmVudFswXQorICAgICAgICAgICAgaWYgdHlwZSA9PSBwcmV2dHlwZSA9PSAiZGF0YSI6CisgICAgICAgICAgICAgICAgTFstMV0gPSAoImRhdGEiLCBMWy0xXVsxXSArIGV2ZW50WzFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBMLmFwcGVuZChldmVudCkKKyAgICAgICAgICAgIHByZXZ0eXBlID0gdHlwZQorICAgICAgICBzZWxmLmV2ZW50cyA9IEwKKyAgICAgICAgcmV0dXJuIEwKKworICAgICMgc3RydWN0dXJlIG1hcmt1cAorCisgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCB0YWcsIGF0dHJzKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJzdGFydHRhZyIsIHRhZywgYXR0cnMpKQorCisgICAgZGVmIGhhbmRsZV9zdGFydGVuZHRhZyhzZWxmLCB0YWcsIGF0dHJzKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJzdGFydGVuZHRhZyIsIHRhZywgYXR0cnMpKQorCisgICAgZGVmIGhhbmRsZV9lbmR0YWcoc2VsZiwgdGFnKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJlbmR0YWciLCB0YWcpKQorCisgICAgIyBhbGwgb3RoZXIgbWFya3VwCisKKyAgICBkZWYgaGFuZGxlX2NvbW1lbnQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiY29tbWVudCIsIGRhdGEpKQorCisgICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImNoYXJyZWYiLCBkYXRhKSkKKworICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJkYXRhIiwgZGF0YSkpCisKKyAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiZGVjbCIsIGRhdGEpKQorCisgICAgZGVmIGhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiZW50aXR5cmVmIiwgZGF0YSkpCisKKyAgICBkZWYgaGFuZGxlX3BpKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoInBpIiwgZGF0YSkpCisKKyAgICBkZWYgdW5rbm93bl9kZWNsKHNlbGYsIGRlY2wpOgorICAgICAgICBzZWxmLmFwcGVuZCgoInVua25vd24gZGVjbCIsIGRlY2wpKQorCisKK2NsYXNzIEV2ZW50Q29sbGVjdG9yRXh0cmEoRXZlbnRDb2xsZWN0b3IpOgorCisgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCB0YWcsIGF0dHJzKToKKyAgICAgICAgRXZlbnRDb2xsZWN0b3IuaGFuZGxlX3N0YXJ0dGFnKHNlbGYsIHRhZywgYXR0cnMpCisgICAgICAgIHNlbGYuYXBwZW5kKCgic3RhcnR0YWdfdGV4dCIsIHNlbGYuZ2V0X3N0YXJ0dGFnX3RleHQoKSkpCisKKworY2xhc3MgVGVzdENhc2VCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfcnVuX2NoZWNrKHNlbGYsIHNvdXJjZSwgZXhwZWN0ZWRfZXZlbnRzLCBjb2xsZWN0b3I9RXZlbnRDb2xsZWN0b3IpOgorICAgICAgICBwYXJzZXIgPSBjb2xsZWN0b3IoKQorICAgICAgICBmb3IgcyBpbiBzb3VyY2U6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChzKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorICAgICAgICBldmVudHMgPSBwYXJzZXIuZ2V0X2V2ZW50cygpCisgICAgICAgIGlmIGV2ZW50cyAhPSBleHBlY3RlZF9ldmVudHM6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlY2VpdmVkIGV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGV2ZW50c1xuIgorICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZDpcbiIgKyBwcHJpbnQucGZvcm1hdChleHBlY3RlZF9ldmVudHMpICsKKyAgICAgICAgICAgICAgICAgICAgICAiXG5SZWNlaXZlZDpcbiIgKyBwcHJpbnQucGZvcm1hdChldmVudHMpKQorCisgICAgZGVmIF9ydW5fY2hlY2tfZXh0cmEoc2VsZiwgc291cmNlLCBldmVudHMpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soc291cmNlLCBldmVudHMsIEV2ZW50Q29sbGVjdG9yRXh0cmEpCisKKyAgICBkZWYgX3BhcnNlX2Vycm9yKHNlbGYsIHNvdXJjZSk6CisgICAgICAgIGRlZiBwYXJzZShzb3VyY2U9c291cmNlKToKKyAgICAgICAgICAgIHBhcnNlciA9IEhUTUxQYXJzZXIuSFRNTFBhcnNlcigpCisgICAgICAgICAgICBwYXJzZXIuZmVlZChzb3VyY2UpCisgICAgICAgICAgICBwYXJzZXIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhIVE1MUGFyc2VyLkhUTUxQYXJzZUVycm9yLCBwYXJzZSkKKworCitjbGFzcyBIVE1MUGFyc2VyVGVzdENhc2UoVGVzdENhc2VCYXNlKToKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fb25seShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8P3Byb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24+IiwgWworICAgICAgICAgICAgKCJwaSIsICJwcm9jZXNzaW5nIGluc3RydWN0aW9uIiksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjw/cHJvY2Vzc2luZyBpbnN0cnVjdGlvbiA/PiIsIFsKKyAgICAgICAgICAgICgicGkiLCAicHJvY2Vzc2luZyBpbnN0cnVjdGlvbiA/IiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX2h0bWwoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiIiIKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAnZm9vJz4KKzxIVE1MPiZlbnRpdHk7JiMzMjsKKzwhLS1jb21tZW50MWEKKy0+PC9mb28+PGJhcj4mbHQ7PD9waT8+PC9mb288YmFyCitjb21tZW50MWItLT4KKzxJbWcgc1JjPSdCYXInIGlzTUFQPnNhbXBsZQordGV4dAorJiN4MjAxQzsKKzwhLS1jb21tZW50MmEtLSAtLWNvbW1lbnQyYi0tPgorPC9IdG1sPgorIiIiLCBbCisgICAgKCJkYXRhIiwgIlxuIiksCisgICAgKCJkZWNsIiwgIkRPQ1RZUEUgaHRtbCBQVUJMSUMgJ2ZvbyciKSwKKyAgICAoImRhdGEiLCAiXG4iKSwKKyAgICAoInN0YXJ0dGFnIiwgImh0bWwiLCBbXSksCisgICAgKCJlbnRpdHlyZWYiLCAiZW50aXR5IiksCisgICAgKCJjaGFycmVmIiwgIjMyIiksCisgICAgKCJkYXRhIiwgIlxuIiksCisgICAgKCJjb21tZW50IiwgImNvbW1lbnQxYVxuLT48L2Zvbz48YmFyPiZsdDs8P3BpPz48L2ZvbzxiYXJcbmNvbW1lbnQxYiIpLAorICAgICgiZGF0YSIsICJcbiIpLAorICAgICgic3RhcnR0YWciLCAiaW1nIiwgWygic3JjIiwgIkJhciIpLCAoImlzbWFwIiwgTm9uZSldKSwKKyAgICAoImRhdGEiLCAic2FtcGxlXG50ZXh0XG4iKSwKKyAgICAoImNoYXJyZWYiLCAieDIwMUMiKSwKKyAgICAoImRhdGEiLCAiXG4iKSwKKyAgICAoImNvbW1lbnQiLCAiY29tbWVudDJhLS0gLS1jb21tZW50MmIiKSwKKyAgICAoImRhdGEiLCAiXG4iKSwKKyAgICAoImVuZHRhZyIsICJodG1sIiksCisgICAgKCJkYXRhIiwgIlxuIiksCisgICAgXSkKKworICAgIGRlZiB0ZXN0X3VuY2xvc2VkX2VudGl0eXJlZihzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCImZW50aXR5cmVmIGZvbyIsIFsKKyAgICAgICAgICAgICgiZW50aXR5cmVmIiwgImVudGl0eXJlZiIpLAorICAgICAgICAgICAgKCJkYXRhIiwgIiBmb28iKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9iYWRfbmVzdGluZyhzZWxmKToKKyAgICAgICAgIyBTdHJhbmdlbHksIHRoaXMgKmlzKiBzdXBwb3NlZCB0byB0ZXN0IHRoYXQgb3ZlcmxhcHBpbmcKKyAgICAgICAgIyBlbGVtZW50cyBhcmUgYWxsb3dlZC4gIEhUTUxQYXJzZXIgaXMgbW9yZSBnZWFyZWQgdG93YXJkCisgICAgICAgICMgbGV4aW5nIHRoZSBpbnB1dCB0aGF0IHBhcnNpbmcgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8YT48Yj48L2E+PC9iPiIsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFtdKSwKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYiIsIFtdKSwKKyAgICAgICAgICAgICgiZW5kdGFnIiwgImEiKSwKKyAgICAgICAgICAgICgiZW5kdGFnIiwgImIiKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9iYXJlX2FtcGVyc2FuZHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygidGhpcyB0ZXh0ICYgY29udGFpbnMgJiBhbXBlcnNhbmRzICYiLCBbCisgICAgICAgICAgICAoImRhdGEiLCAidGhpcyB0ZXh0ICYgY29udGFpbnMgJiBhbXBlcnNhbmRzICYiKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9iYXJlX3BvaW50eV9icmFja2V0cyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCJ0aGlzIDwgdGV4dCA+IGNvbnRhaW5zIDwgYmFyZT5wb2ludHk8IGJyYWNrZXRzIiwgWworICAgICAgICAgICAgKCJkYXRhIiwgInRoaXMgPCB0ZXh0ID4gY29udGFpbnMgPCBiYXJlPnBvaW50eTwgYnJhY2tldHMiKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX2RlY2xhcmF0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8IXNwYWNlciB0eXBlPSJibG9jayIgaGVpZ2h0PSIyNSI+JywKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2NvbW1lbnQnLCAnc3BhY2VyIHR5cGU9ImJsb2NrIiBoZWlnaHQ9IjI1IicpXSkKKworICAgIGRlZiB0ZXN0X3N0YXJ0dGFnX2VuZF9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCIiIjxhIGI9JzwnPiIiIiwgWygic3RhcnR0YWciLCAiYSIsIFsoImIiLCAiPCIpXSldKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIiIiPGEgYj0nPic+IiIiLCBbKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICI+IildKV0pCisKKyAgICBkZWYgdGVzdF9idWZmZXJfYXJ0ZWZhY3RzKHNlbGYpOgorICAgICAgICBvdXRwdXQgPSBbKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICI8IildKV0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPGEgYj0nPCc+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPGEgIiwgImI9JzwnPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjxhIGIiLCAiPSc8Jz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8YSBiPSIsICInPCc+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPGEgYj0nPCIsICInPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjxhIGI9JzwnIiwgIj4iXSwgb3V0cHV0KQorCisgICAgICAgIG91dHB1dCA9IFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgIj4iKV0pXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8YSBiPSc+Jz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8YSAiLCAiYj0nPic+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPGEgYiIsICI9Jz4nPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjxhIGI9IiwgIic+Jz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8YSBiPSc+IiwgIic+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPGEgYj0nPiciLCAiPiJdLCBvdXRwdXQpCisKKyAgICAgICAgb3V0cHV0ID0gWygiY29tbWVudCIsICJhYmMiKV0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiIiwgIjwhLS1hYmMtLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8IiwgIiEtLWFiYy0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjwhIiwgIi0tYWJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPCEtIiwgIi1hYmMtLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8IS0tIiwgImFiYy0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjwhLS1hIiwgImJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPCEtLWFiIiwgImMtLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8IS0tYWJjIiwgIi0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjwhLS1hYmMtIiwgIi0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPCEtLWFiYy0tIiwgIj4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8IS0tYWJjLS0+IiwgIiJdLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9zdGFydHRhZ19qdW5rX2NoYXJzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjwvPiIsIFtdKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjwvJD4iLCBbKCdjb21tZW50JywgJyQnKV0pCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPC8iLCBbKCdkYXRhJywgJzwvJyldKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjwvYSIsIFsoJ2RhdGEnLCAnPC9hJyldKQorICAgICAgICAjIFhYWCB0aGlzIG1pZ2h0IGJlIHdyb25nCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPGE8YT4iLCBbKCdkYXRhJywgJzxhJyksICgnc3RhcnR0YWcnLCAnYScsIFtdKV0pCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPC9hPGE+IiwgWygnZW5kdGFnJywgJ2E8YScpXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8ISIsIFsoJ2RhdGEnLCAnPCEnKV0pCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPGEiLCBbKCdkYXRhJywgJzxhJyldKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxhIGZvbz0nYmFyJyIsIFsoJ2RhdGEnLCAiPGEgZm9vPSdiYXInIildKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxhIGZvbz0nYmFyIiwgWygnZGF0YScsICI8YSBmb289J2JhciIpXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8YSBmb289Jz4nIiwgWygnZGF0YScsICI8YSBmb289Jz4nIildKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxhIGZvbz0nPiIsIFsoJ2RhdGEnLCAiPGEgZm9vPSc+IildKQorCisgICAgZGVmIHRlc3RfdmFsaWRfZG9jdHlwZXMoc2VsZik6CisgICAgICAgICMgZnJvbSBodHRwOi8vd3d3LnczLm9yZy9RQS8yMDAyLzA0L3ZhbGlkLWR0ZC1saXN0Lmh0bWwKKyAgICAgICAgZHRkcyA9IFsnSFRNTCcsICAjIEhUTUw1IGRvY3R5cGUKKyAgICAgICAgICAgICAgICAoJ0hUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAnCisgICAgICAgICAgICAgICAgICciaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCInKSwKKyAgICAgICAgICAgICAgICAoJ0hUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgJworICAgICAgICAgICAgICAgICAnImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCInKSwKKyAgICAgICAgICAgICAgICAoJ2h0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgJworICAgICAgICAgICAgICAgICAnImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiJyksCisgICAgICAgICAgICAgICAgKCdodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIgJworICAgICAgICAgICAgICAgICAnImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLWZyYW1lc2V0LmR0ZCInKSwKKyAgICAgICAgICAgICAgICAoJ21hdGggUFVCTElDICItLy9XM0MvL0RURCBNYXRoTUwgMi4wLy9FTiIgJworICAgICAgICAgICAgICAgICAnImh0dHA6Ly93d3cudzMub3JnL01hdGgvRFREL21hdGhtbDIvbWF0aG1sMi5kdGQiJyksCisgICAgICAgICAgICAgICAgKCdodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgJworICAgICAgICAgICAgICAgICAnWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIiAnCisgICAgICAgICAgICAgICAgICciaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNC94aHRtbC1tYXRoLXN2Zy94aHRtbC1tYXRoLXN2Zy5kdGQiJyksCisgICAgICAgICAgICAgICAgKCdzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgJworICAgICAgICAgICAgICAgICAnImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCInKSwKKyAgICAgICAgICAgICAgICAnaHRtbCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iJywKKyAgICAgICAgICAgICAgICAnaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiInXQorICAgICAgICBmb3IgZHRkIGluIGR0ZHM6CisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjwhRE9DVFlQRSAlcz4iICUgZHRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2RlY2wnLCAnRE9DVFlQRSAnICsgZHRkKV0pCisKKyAgICBkZWYgdGVzdF9zbGFzaGVzX2luX3N0YXJ0dGFnKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzxhIGZvbz0idmFyIi8+JywgWygnc3RhcnRlbmR0YWcnLCAnYScsIFsoJ2ZvbycsICd2YXInKV0pXSkKKyAgICAgICAgaHRtbCA9ICgnPGltZyB3aWR0aD05MDIgaGVpZ2h0PTI1MHB4ICcKKyAgICAgICAgICAgICAgICAnc3JjPSIvc2l0ZXMvZGVmYXVsdC9maWxlcy9pbWFnZXMvaG9tZXBhZ2UvZm9vLmpwZyIgJworICAgICAgICAgICAgICAgICcvKndoYXQgYW0gSSBkb2luZyBoZXJlKi8gLz4nKQorICAgICAgICBleHBlY3RlZCA9IFsoCisgICAgICAgICAgICAnc3RhcnRlbmR0YWcnLCAnaW1nJywKKyAgICAgICAgICAgIFsoJ3dpZHRoJywgJzkwMicpLCAoJ2hlaWdodCcsICcyNTBweCcpLAorICAgICAgICAgICAgICgnc3JjJywgJy9zaXRlcy9kZWZhdWx0L2ZpbGVzL2ltYWdlcy9ob21lcGFnZS9mb28uanBnJyksCisgICAgICAgICAgICAgKCcqd2hhdCcsIE5vbmUpLCAoJ2FtJywgTm9uZSksICgnaScsIE5vbmUpLAorICAgICAgICAgICAgICgnZG9pbmcnLCBOb25lKSwgKCdoZXJlKicsIE5vbmUpXQorICAgICAgICApXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCisgICAgICAgIGh0bWwgPSAoJzxhIC8gL2Zvby8gLyAvPS8gLyAvYmFyLyAvIC8+JworICAgICAgICAgICAgICAgICc8YSAvIC9mb28vIC8gLz0vIC8gL2Jhci8gLyA+JykKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAoJ3N0YXJ0ZW5kdGFnJywgJ2EnLCBbKCdmb28nLCBOb25lKSwgKCc9JywgTm9uZSksICgnYmFyJywgTm9uZSldKSwKKyAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYScsIFsoJ2ZvbycsIE5vbmUpLCAoJz0nLCBOb25lKSwgKCdiYXInLCBOb25lKV0pCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQorICAgICAgICAjc2VlIGlzc3VlICMxNDUzOAorICAgICAgICBodG1sID0gKCc8bWV0YT48bWV0YSAvID48bWV0YSAvLyA+PG1ldGEgLyAvID4nCisgICAgICAgICAgICAgICAgJzxtZXRhLz48bWV0YSAvPjxtZXRhIC8vPjxtZXRhLy8+JykKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ21ldGEnLCBbXSksICgnc3RhcnR0YWcnLCAnbWV0YScsIFtdKSwKKyAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnbWV0YScsIFtdKSwgKCdzdGFydHRhZycsICdtZXRhJywgW10pLAorICAgICAgICAgICAgKCdzdGFydGVuZHRhZycsICdtZXRhJywgW10pLCAoJ3N0YXJ0ZW5kdGFnJywgJ21ldGEnLCBbXSksCisgICAgICAgICAgICAoJ3N0YXJ0ZW5kdGFnJywgJ21ldGEnLCBbXSksICgnc3RhcnRlbmR0YWcnLCAnbWV0YScsIFtdKSwKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9kZWNsYXJhdGlvbl9qdW5rX2NoYXJzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjwhRE9DVFlQRSBmb28gJCA+IiwgWygnZGVjbCcsICdET0NUWVBFIGZvbyAkICcpXSkKKworICAgIGRlZiB0ZXN0X3N0YXJ0ZW5kdGFnKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxwLz4iLCBbCisgICAgICAgICAgICAoInN0YXJ0ZW5kdGFnIiwgInAiLCBbXSksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxwPjwvcD4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgInAiLCBbXSksCisgICAgICAgICAgICAoImVuZHRhZyIsICJwIiksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxwPjxpbWcgc3JjPSdmb28nIC8+PC9wPiIsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAicCIsIFtdKSwKKyAgICAgICAgICAgICgic3RhcnRlbmR0YWciLCAiaW1nIiwgWygic3JjIiwgImZvbyIpXSksCisgICAgICAgICAgICAoImVuZHRhZyIsICJwIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9lbmRfdGFncyhzZWxmKToKKyAgICAgICAgIyBBIGNvbGxlY3Rpb24gb2YgYnJva2VuIGVuZCB0YWdzLiA8YnI+IGlzIHVzZWQgYXMgc2VwYXJhdG9yLgorICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS90b2tlbml6YXRpb24uaHRtbCNlbmQtdGFnLW9wZW4tc3RhdGUKKyAgICAgICAgIyBhbmQgIzEzOTkzCisgICAgICAgIGh0bWwgPSAoJzxicj48L2xhYmVsPC9wPjxicj48L2RpdiBlbmQgdG1BZC1sZWFkZXJCb2FyZD48YnI+PC88aDQ+PGJyPicKKyAgICAgICAgICAgICAgICAnPC9saSBjbGFzcz0idW5pdCI+PGJyPjwvbGlcclxuXHRcdFx0XHRcdFx0PC91bD48YnI+PC8+PGJyPicpCisgICAgICAgIGV4cGVjdGVkID0gWygnc3RhcnR0YWcnLCAnYnInLCBbXSksCisgICAgICAgICAgICAgICAgICAgICMgPCBpcyBwYXJ0IG9mIHRoZSBuYW1lLCAvIGlzIGRpc2NhcmRlZCwgcCBpcyBhbiBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnbGFiZWw8JyksCisgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYnInLCBbXSksCisgICAgICAgICAgICAgICAgICAgICMgdGV4dCBhbmQgYXR0cmlidXRlcyBhcmUgZGlzY2FyZGVkCisgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ2RpdicpLAorICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2JyJywgW10pLAorICAgICAgICAgICAgICAgICAgICAjIGNvbW1lbnQgYmVjYXVzZSB0aGUgZmlyc3QgY2hhciBhZnRlciA8LyBpcyBub3QgYS16QS1aCisgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICc8aDQnKSwKKyAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdicicsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgIyBhdHRyaWJ1dGVzIGFyZSBkaXNjYXJkZWQKKyAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnbGknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdicicsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgIyBldmVyeXRoaW5nIHRpbGwgdWwgKGluY2x1ZGVkKSBpcyBkaXNjYXJkZWQKKyAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnbGknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdicicsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgIyA8Lz4gaXMgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2JyJywgW10pXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9icm9rZW5faW52YWxpZF9lbmRfdGFnKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgdGVjaG5pY2FsbHkgd3JvbmcgKHRoZSAiPiBzaG91bGRuJ3QgYmUgaW5jbHVkZWQgaW4gdGhlICdkYXRhJykKKyAgICAgICAgIyBidXQgaXMgcHJvYmFibHkgbm90IHdvcnRoIGZpeGluZyBpdCAoaW4gYWRkaXRpb24gdG8gYWxsIHRoZSBjYXNlcyBvZgorICAgICAgICAjIHRoZSBwcmV2aW91cyB0ZXN0LCBpdCB3b3VsZCByZXF1aXJlIGEgZnVsbCBhdHRyaWJ1dGUgcGFyc2luZykuCisgICAgICAgICMgc2VlICMxMzk5MworICAgICAgICBodG1sID0gJzxiPlRoaXM8L2IgYXR0cj0iPiI+IGNvbmZ1c2VzIHRoZSBwYXJzZXInCisgICAgICAgIGV4cGVjdGVkID0gWygnc3RhcnR0YWcnLCAnYicsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgKCdkYXRhJywgJ1RoaXMnKSwKKyAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnYicpLAorICAgICAgICAgICAgICAgICAgICAoJ2RhdGEnLCAnIj4gY29uZnVzZXMgdGhlIHBhcnNlcicpXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9nZXRfc3RhcnR0YWdfdGV4dChzZWxmKToKKyAgICAgICAgcyA9ICIiIjxmb286YmFyICAgXG4gICBvbmU9IjEiXHR0d289MiAgID4iIiIKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrX2V4dHJhKHMsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiZm9vOmJhciIsIFsoIm9uZSIsICIxIiksICgidHdvIiwgIjIiKV0pLAorICAgICAgICAgICAgKCJzdGFydHRhZ190ZXh0IiwgcyldKQorCisgICAgZGVmIHRlc3RfY2RhdGFfY29udGVudChzZWxmKToKKyAgICAgICAgY29udGVudHMgPSBbCisgICAgICAgICAgICAnPCEtLSBub3QgYSBjb21tZW50IC0tPiAmbm90LWFuLWVudGl0eS1yZWY7JywKKyAgICAgICAgICAgICI8bm90IGE9J3N0YXJ0IHRhZyc+IiwKKyAgICAgICAgICAgICc8YSBocmVmPSIiIC8+IDxwPiA8c3Bhbj48L3NwYW4+JywKKyAgICAgICAgICAgICdmb28gPSAiPC9zY3IiICsgImlwdD4iOycsCisgICAgICAgICAgICAnZm9vID0gIjwvU0NSSVBUIiArICI+IjsnLAorICAgICAgICAgICAgJ2ZvbyA9IDxcbi9zY3JpcHQ+ICcsCisgICAgICAgICAgICAnPCEtLSBkb2N1bWVudC53cml0ZSgiPC9zY3IiICsgImlwdD4iKTsgLS0+JywKKyAgICAgICAgICAgICgnXG4vLzwhW0NEQVRBW1xuJworICAgICAgICAgICAgICdkb2N1bWVudC53cml0ZShcJzxzXCcrXCdjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiICcKKyAgICAgICAgICAgICAnc3JjPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3I9XCcrbmV3ICcKKyAgICAgICAgICAgICAnRGF0ZSgpLmdldFRpbWUoKStcJyI+PFxcL3NcJytcJ2NyaXB0PlwnKTtcbi8vXV0+JyksCisgICAgICAgICAgICAnXG48IS0tIC8vXG52YXIgZm9vID0gMy4xNDtcbi8vIC0tPlxuJywKKyAgICAgICAgICAgICdmb28gPSAiPC9zdHkiICsgImxlPiI7JywKKyAgICAgICAgICAgIHUnPCEtLSBcdTI2MDMgLS0+JywKKyAgICAgICAgICAgICMgdGhlc2UgdHdvIHNob3VsZCBiZSBpbnZhbGlkIGFjY29yZGluZyB0byB0aGUgSFRNTCA1IHNwZWMsCisgICAgICAgICAgICAjIHNlY3Rpb24gOC4xLjIuMgorICAgICAgICAgICAgIydmb28gPSA8L1xuc2NyaXB0PicsCisgICAgICAgICAgICAjJ2ZvbyA9IDwvIHNjcmlwdD4nLAorICAgICAgICBdCisgICAgICAgIGVsZW1lbnRzID0gWydzY3JpcHQnLCAnc3R5bGUnLCAnU0NSSVBUJywgJ1NUWUxFJywgJ1NjcmlwdCcsICdTdHlsZSddCisgICAgICAgIGZvciBjb250ZW50IGluIGNvbnRlbnRzOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CisgICAgICAgICAgICAgICAgZWxlbWVudF9sb3dlciA9IGVsZW1lbnQubG93ZXIoKQorICAgICAgICAgICAgICAgIHMgPSB1Jzx7ZWxlbWVudH0+e2NvbnRlbnR9PC97ZWxlbWVudH0+Jy5mb3JtYXQoZWxlbWVudD1lbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD1jb250ZW50KQorICAgICAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjayhzLCBbKCJzdGFydHRhZyIsIGVsZW1lbnRfbG93ZXIsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGF0YSIsIGNvbnRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJlbmR0YWciLCBlbGVtZW50X2xvd2VyKV0pCisKKyAgICBkZWYgdGVzdF9jZGF0YV93aXRoX2Nsb3NpbmdfdGFncyhzZWxmKToKKyAgICAgICAgIyBzZWUgaXNzdWUgIzEzMzU4CisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgSFRNTFBhcnNlciBjYWxscyBoYW5kbGVfZGF0YSBvbmx5IG9uY2UgZm9yIGVhY2ggQ0RBVEEuCisgICAgICAgICMgVGhlIG5vcm1hbCBldmVudCBjb2xsZWN0b3Igbm9ybWFsaXplcyB0aGUgZXZlbnRzIGluIGdldF9ldmVudHMsCisgICAgICAgICMgc28gd2Ugb3ZlcnJpZGUgaXQgdG8gcmV0dXJuIHRoZSBvcmlnaW5hbCBsaXN0IG9mIGV2ZW50cy4KKyAgICAgICAgY2xhc3MgQ29sbGVjdG9yKEV2ZW50Q29sbGVjdG9yKToKKyAgICAgICAgICAgIGRlZiBnZXRfZXZlbnRzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmV2ZW50cworCisgICAgICAgIGNvbnRlbnQgPSAiIiI8IS0tIG5vdCBhIGNvbW1lbnQgLS0+ICZub3QtYW4tZW50aXR5LXJlZjsKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiIgLz4gPC9wPjxwPiAmYW1wOyA8c3Bhbj48L3NwYW4+PC9zdHlsZT4KKyAgICAgICAgICAgICAgICAgICc8L3NjcmlwdCcgKyAnPicgPC9odG1sPiA8L2hlYWQ+IDwvc2NyaXB0ZXI+ISIiIgorICAgICAgICBmb3IgZWxlbWVudCBpbiBbJyBzY3JpcHQnLCAnc2NyaXB0ICcsICcgc2NyaXB0ICcsCisgICAgICAgICAgICAgICAgICAgICAgICAnXG5zY3JpcHQnLCAnc2NyaXB0XG4nLCAnXG5zY3JpcHRcbiddOgorICAgICAgICAgICAgcyA9IHUnPHNjcmlwdD57Y29udGVudH08L3tlbGVtZW50fT4nLmZvcm1hdChlbGVtZW50PWVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9Y29udGVudCkKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjayhzLCBbKCJzdGFydHRhZyIsICJzY3JpcHQiLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGF0YSIsIGNvbnRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImVuZHRhZyIsICJzY3JpcHQiKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPUNvbGxlY3RvcikKKworICAgIGRlZiB0ZXN0X21hbGZvcm1hdHRlZF9jaGFycmVmKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxwPiYjYmFkOzwvcD4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgInAiLCBbXSksCisgICAgICAgICAgICAoImRhdGEiLCAiJiNiYWQ7IiksCisgICAgICAgICAgICAoImVuZHRhZyIsICJwIiksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF91bmVzY2FwZV9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gSFRNTFBhcnNlci5IVE1MUGFyc2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIudW5lc2NhcGUoJyYjYmFkOycpLCcmI2JhZDsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci51bmVzY2FwZSgnJiMwMDM4OycpLCcmJykKKworCisKK2NsYXNzIEF0dHJpYnV0ZXNUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgorCisgICAgZGVmIHRlc3RfYXR0cl9zeW50YXgoc2VsZik6CisgICAgICAgIG91dHB1dCA9IFsKKyAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgInYiKSwgKCJjIiwgInYiKSwgKCJkIiwgInYiKSwgKCJlIiwgTm9uZSldKQorICAgICAgICBdCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiIiI8YSBiPSd2JyBjPSJ2IiBkPXYgZT4iIiIsIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCIiIjxhICBiID0gJ3YnIGMgPSAidiIgZCA9IHYgZT4iIiIsIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCIiIjxhXG5iXG49XG4ndidcbmNcbj1cbiJ2IlxuZFxuPVxudlxuZT4iIiIsIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCIiIjxhXHRiXHQ9XHQndidcdGNcdD1cdCJ2Ilx0ZFx0PVx0dlx0ZT4iIiIsIG91dHB1dCkKKworICAgIGRlZiB0ZXN0X2F0dHJfdmFsdWVzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIiIiPGEgYj0neHh4XG5cdHh4eCcgYz0ieXl5XHRcbnl5eSIgZD0nXHR4eXpcbic+IiIiLAorICAgICAgICAgICAgICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsIFsoImIiLCAieHh4XG5cdHh4eCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCAieXl5XHRcbnl5eSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImQiLCAiXHR4eXpcbiIpXSldKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIiIiPGEgYj0nJyBjPSIiPiIiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgIiIpLCAoImMiLCAiIildKV0pCisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBTRiBwYXRjaCAjNjY5NjgzLgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxlIGE9cmdiKDEsMiwzKT4iLAorICAgICAgICAgICAgICAgICAgICAgICAgWygic3RhcnR0YWciLCAiZSIsIFsoImEiLCAicmdiKDEsMiwzKSIpXSldKQorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgU0YgYnVnICM5MjE2NTcuCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygKKyAgICAgICAgICAgICI8YSBocmVmPW1haWx0bzp4eXpAZXhhbXBsZS5jb20+IiwKKyAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJocmVmIiwgIm1haWx0bzp4eXpAZXhhbXBsZS5jb20iKV0pXSkKKworICAgIGRlZiB0ZXN0X2F0dHJfbm9uYXNjaWkoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlIDczMTEKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKAorICAgICAgICAgICAgdSI8aW1nIHNyYz0vZm9vL2Jhci5wbmcgYWx0PVx1NGUyZFx1NjU4Nz4iLAorICAgICAgICAgICAgWygic3RhcnR0YWciLCAiaW1nIiwgWygic3JjIiwgIi9mb28vYmFyLnBuZyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYWx0IiwgdSJcdTRlMmRcdTY1ODciKV0pXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKAorICAgICAgICAgICAgdSI8YSB0aXRsZT0nXHUzMGM2XHUzMGI5XHUzMGM4JyBocmVmPSdcdTMwYzZcdTMwYjlcdTMwYzguaHRtbCc+IiwKKyAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJ0aXRsZSIsIHUiXHUzMGM2XHUzMGI5XHUzMGM4IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaHJlZiIsIHUiXHUzMGM2XHUzMGI5XHUzMGM4Lmh0bWwiKV0pXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKAorICAgICAgICAgICAgdSc8YSB0aXRsZT0iXHUzMGM2XHUzMGI5XHUzMGM4IiBocmVmPSJcdTMwYzZcdTMwYjlcdTMwYzguaHRtbCI+JywKKyAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJ0aXRsZSIsIHUiXHUzMGM2XHUzMGI5XHUzMGM4IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaHJlZiIsIHUiXHUzMGM2XHUzMGI5XHUzMGM4Lmh0bWwiKV0pXSkKKworICAgIGRlZiB0ZXN0X2F0dHJfZW50aXR5X3JlcGxhY2VtZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soCisgICAgICAgICAgICAiPGEgYj0nJmFtcDsmZ3Q7Jmx0OyZxdW90OyZhcG9zOyc+IiwKKyAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgIiY+PFwiJyIpXSldKQorCisgICAgZGVmIHRlc3RfYXR0cl9mdW5reV9uYW1lcyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKAorICAgICAgICAgICAgIjxhIGEuYj0ndicgYzpkPXYgZS1mPXY+IiwKKyAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJhLmIiLCAidiIpLCAoImM6ZCIsICJ2IiksICgiZS1mIiwgInYiKV0pXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKAorICAgICAgICAgICAgIjxhICQ+PGIgJD0lPjxjIFw9Lz4iLAorICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsIFsoIiQiLCBOb25lKV0pLAorICAgICAgICAgICAgICgic3RhcnR0YWciLCAiYiIsIFsoIiQiLCAiJSIpXSksCisgICAgICAgICAgICAgKCJzdGFydHRhZyIsICJjIiwgWygiXFwiLCAiLyIpXSldKQorCisgICAgZGVmIHRlc3RfZW50aXR5cmVmc19pbl9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soCisgICAgICAgICAgICAiPGh0bWwgZm9vPScmZXVybzsmYW1wOyYjOTc7JiN4NjE7JnVuc3VwcG9ydGVkOyc+IiwKKyAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImh0bWwiLCBbKCJmb28iLCB1Ilx1MjBBQyZhYSZ1bnN1cHBvcnRlZDsiKV0pXSkKKworICAgIGRlZiB0ZXN0X2VudGl0aWVzX2luX2F0dHJpYnV0ZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBzZWUgIzEyMDAzMTMKKyAgICAgICAgZm9yIGVudGl0eSBpbiBbJyYnLCAnJmFtcDsnLCAnJiMzODsnLCAnJiN4MjY7J106CisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzxhIGhyZWY9IiVzIj4nICUgZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJocmVmIiwgIiYiKV0pXSkKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPGEgaHJlZj0nJXMnPiIgJSBlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsIFsoImhyZWYiLCAiJiIpXSldKQorICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8YSBocmVmPSVzPiIgJSBlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsIFsoImhyZWYiLCAiJiIpXSldKQorCisgICAgZGVmIHRlc3RfbWFsZm9ybWVkX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgICMgc2VlICMxMzM1NworICAgICAgICBodG1sID0gKAorICAgICAgICAgICAgIjxhIGhyZWY9dGVzdCdzdHlsZT0nY29sb3I6cmVkO2JhZDEnPnRlc3QgLSBiYWQxPC9hPiIKKyAgICAgICAgICAgICI8YSBocmVmPXRlc3QnK3N0eWxlPSdjb2xvcjpyZWQ7YmEyJz50ZXN0IC0gYmFkMjwvYT4iCisgICAgICAgICAgICAiPGEgaHJlZj10ZXN0JyZuYnNwO3N0eWxlPSdjb2xvcjpyZWQ7YmFkMyc+dGVzdCAtIGJhZDM8L2E+IgorICAgICAgICAgICAgIjxhIGhyZWYgPSB0ZXN0JyZuYnNwO3N0eWxlPSdjb2xvcjpyZWQ7YmFkNCcgID50ZXN0IC0gYmFkNDwvYT4iCisgICAgICAgICkKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2EnLCBbKCdocmVmJywgInRlc3Qnc3R5bGU9J2NvbG9yOnJlZDtiYWQxJyIpXSksCisgICAgICAgICAgICAoJ2RhdGEnLCAndGVzdCAtIGJhZDEnKSwgKCdlbmR0YWcnLCAnYScpLAorICAgICAgICAgICAgKCdzdGFydHRhZycsICdhJywgWygnaHJlZicsICJ0ZXN0JytzdHlsZT0nY29sb3I6cmVkO2JhMiciKV0pLAorICAgICAgICAgICAgKCdkYXRhJywgJ3Rlc3QgLSBiYWQyJyksICgnZW5kdGFnJywgJ2EnKSwKKyAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYScsIFsoJ2hyZWYnLCB1InRlc3QnXHhhMHN0eWxlPSdjb2xvcjpyZWQ7YmFkMyciKV0pLAorICAgICAgICAgICAgKCdkYXRhJywgJ3Rlc3QgLSBiYWQzJyksICgnZW5kdGFnJywgJ2EnKSwKKyAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYScsIFsoJ2hyZWYnLCB1InRlc3QnXHhhMHN0eWxlPSdjb2xvcjpyZWQ7YmFkNCciKV0pLAorICAgICAgICAgICAgKCdkYXRhJywgJ3Rlc3QgLSBiYWQ0JyksICgnZW5kdGFnJywgJ2EnKQorICAgICAgICBdCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X21hbGZvcm1lZF9hZGphY2VudF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTI2MjkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8eD48eSB6PSIibyIiIC8+PC94PicsCisgICAgICAgICAgICAgICAgICAgICAgICBbKCdzdGFydHRhZycsICd4JywgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnc3RhcnRlbmR0YWcnLCAneScsIFsoJ3onLCAnJyksICgnbyIiJywgTm9uZSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2VuZHRhZycsICd4JyldKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzx4Pjx5IHo9IiIiIiAvPjwveD4nLAorICAgICAgICAgICAgICAgICAgICAgICAgWygnc3RhcnR0YWcnLCAneCcsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0ZW5kdGFnJywgJ3knLCBbKCd6JywgJycpLCAoJyIiJywgTm9uZSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2VuZHRhZycsICd4JyldKQorCisgICAgIyBzZWUgIzc1NTY3MCBmb3IgdGhlIGZvbGxvd2luZyAzIHRlc3RzCisgICAgZGVmIHRlc3RfYWRqYWNlbnRfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8YSB3aWR0aD0iMTAwJSJjZWxsc3BhY2luZz0wPicsCisgICAgICAgICAgICAgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWygid2lkdGgiLCAiMTAwJSIpLCAoImNlbGxzcGFjaW5nIiwiMCIpXSldKQorCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGEgaWQ9ImZvbyJjbGFzcz0iYmFyIj4nLAorICAgICAgICAgICAgICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoImlkIiwgImZvbyIpLCAoImNsYXNzIiwiYmFyIildKV0pCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2F0dHJpYnV0ZV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8YSB2PT4nLAorICAgICAgICAgICAgICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsIFsoInYiLCAiIildKV0pCisKKyAgICBkZWYgdGVzdF9qYXZhc2NyaXB0X2F0dHJpYnV0ZV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8YSBocmVmPWphdmFzY3JpcHQ6cG9wdXAoJy9wb3B1cC9oZWxwLmh0bWwnKT4iLAorICAgICAgICAgICAgICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoImhyZWYiLCAiamF2YXNjcmlwdDpwb3B1cCgnL3BvcHVwL2hlbHAuaHRtbCcpIildKV0pCisKKyAgICBkZWYgdGVzdF9lbmRfdGFnX2luX2F0dHJpYnV0ZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBzZWUgIzE3NDU3NjEKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8YSBocmVmPSdodHRwOi8vd3d3LmV4YW1wbGUub3JnL1wiPjsnPnNwYW08L2E+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbKCJocmVmIiwgImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvXCI+OyIpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJkYXRhIiwgInNwYW0iKSwgKCJlbmR0YWciLCAiYSIpXSkKKworICAgIGRlZiB0ZXN0X2NvbW1lbnRzKHNlbGYpOgorICAgICAgICBodG1sID0gKCI8IS0tIEknbSBhIHZhbGlkIGNvbW1lbnQgLS0+IgorICAgICAgICAgICAgICAgICc8IS0tbWUgdG9vIS0tPicKKyAgICAgICAgICAgICAgICAnPCEtLS0tLS0+JworICAgICAgICAgICAgICAgICc8IS0tLS0+JworICAgICAgICAgICAgICAgICc8IS0tLS1JIGhhdmUgbWFueSBoeXBoZW5zLS0tLT4nCisgICAgICAgICAgICAgICAgJzwhLS0gSSBoYXZlIGEgPiBpbiB0aGUgbWlkZGxlIC0tPicKKyAgICAgICAgICAgICAgICAnPCEtLSBhbmQgSSBoYXZlIC0tIGluIHRoZSBtaWRkbGUhIC0tPicpCisgICAgICAgIGV4cGVjdGVkID0gWygnY29tbWVudCcsICIgSSdtIGEgdmFsaWQgY29tbWVudCAiKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb21tZW50JywgJ21lIHRvbyEnKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb21tZW50JywgJy0tJyksCisgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb21tZW50JywgJy0tSSBoYXZlIG1hbnkgaHlwaGVucy0tJyksCisgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICcgSSBoYXZlIGEgPiBpbiB0aGUgbWlkZGxlICcpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnIGFuZCBJIGhhdmUgLS0gaW4gdGhlIG1pZGRsZSEgJyldCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Jyb2tlbl9jb21tZW50cyhzZWxmKToKKyAgICAgICAgaHRtbCA9ICgnPCEgbm90IHJlYWxseSBhIGNvbW1lbnQgPicKKyAgICAgICAgICAgICAgICAnPCEgbm90IGEgY29tbWVudCBlaXRoZXIgLS0+JworICAgICAgICAgICAgICAgICc8ISAtLSBjbG9zZSBlbm91Z2ggLS0+JworICAgICAgICAgICAgICAgICc8IT48ITwtLSB0aGlzIHdhcyBhbiBlbXB0eSBjb21tZW50PicKKyAgICAgICAgICAgICAgICAnPCEhISBhbm90aGVyIGJvZ3VzIGNvbW1lbnQgISEhPicpCisgICAgICAgIGV4cGVjdGVkID0gWworICAgICAgICAgICAgKCdjb21tZW50JywgJyBub3QgcmVhbGx5IGEgY29tbWVudCAnKSwKKyAgICAgICAgICAgICgnY29tbWVudCcsICcgbm90IGEgY29tbWVudCBlaXRoZXIgLS0nKSwKKyAgICAgICAgICAgICgnY29tbWVudCcsICcgLS0gY2xvc2UgZW5vdWdoIC0tJyksCisgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnJyksCisgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnPC0tIHRoaXMgd2FzIGFuIGVtcHR5IGNvbW1lbnQnKSwKKyAgICAgICAgICAgICgnY29tbWVudCcsICchISBhbm90aGVyIGJvZ3VzIGNvbW1lbnQgISEhJyksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfY29uZGNvbXMoc2VsZik6CisgICAgICAgIGh0bWwgPSAoJzwhLS1baWYgSUUgJiAhKGx0ZSBJRSA4KV0+YXJlblwndDwhW2VuZGlmXS0tPicKKyAgICAgICAgICAgICAgICAnPCEtLVtpZiBJRSA4XT5jb25kY29tczwhW2VuZGlmXS0tPicKKyAgICAgICAgICAgICAgICAnPCEtLVtpZiBsdGUgSUUgN10+cHJldHR5PzwhW2VuZGlmXS0tPicpCisgICAgICAgIGV4cGVjdGVkID0gWygnY29tbWVudCcsICJbaWYgSUUgJiAhKGx0ZSBJRSA4KV0+YXJlbid0PCFbZW5kaWZdIiksCisgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICdbaWYgSUUgOF0+Y29uZGNvbXM8IVtlbmRpZl0nKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb21tZW50JywgJ1tpZiBsdGUgSUUgN10+cHJldHR5PzwhW2VuZGlmXScpXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9icm9rZW5fY29uZGNvbXMoc2VsZik6CisgICAgICAgICMgdGhlc2UgY29uZGNvbXMgYXJlIG1pc3NpbmcgdGhlICctLScgYWZ0ZXIgJzwhJyBhbmQgYmVmb3JlIHRoZSAnPicKKyAgICAgICAgaHRtbCA9ICgnPCFbaWYgIShJRSldPmJyb2tlbiBjb25kY29tPCFbZW5kaWZdPicKKyAgICAgICAgICAgICAgICAnPCFbaWYgISBJRV0+PGxpbmsgaHJlZj0iZmF2aWNvbi50aWZmIi8+PCFbZW5kaWZdPicKKyAgICAgICAgICAgICAgICAnPCFbaWYgIUlFIDZdPjxpbWcgc3JjPSJmaXJlZm94LnBuZyIgLz48IVtlbmRpZl0+JworICAgICAgICAgICAgICAgICc8IVtpZiAhaWUgNl0+PGI+Zm9vPC9iPjwhW2VuZGlmXT4nCisgICAgICAgICAgICAgICAgJzwhW2lmICghSUUpfChsdCBJRSA5KV0+PGltZyBzcmM9Im1hbW1vdGguYm1wIiAvPjwhW2VuZGlmXT4nKQorICAgICAgICAjIEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3BlY3Mgc2VjdGlvbnMgIjguMi40LjQ0IEJvZ3VzIGNvbW1lbnQgc3RhdGUiCisgICAgICAgICMgYW5kICI4LjIuNC40NSBNYXJrdXAgZGVjbGFyYXRpb24gb3BlbiBzdGF0ZSIsIGNvbW1lbnQgdG9rZW5zIHNob3VsZAorICAgICAgICAjIGJlIGVtaXR0ZWQgaW5zdGVhZCBvZiAndW5rbm93biBkZWNsJywgYnV0IGNhbGxpbmcgdW5rbm93bl9kZWNsCisgICAgICAgICMgcHJvdmlkZXMgbW9yZSBmbGV4aWJpbGl0eS4KKyAgICAgICAgIyBTZWUgYWxzbyBMaWIvX21hcmt1cGJhc2UucHk6cGFyc2VfZGVjbGFyYXRpb24KKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAoJ3Vua25vd24gZGVjbCcsICdpZiAhKElFKScpLAorICAgICAgICAgICAgKCdkYXRhJywgJ2Jyb2tlbiBjb25kY29tJyksCisgICAgICAgICAgICAoJ3Vua25vd24gZGVjbCcsICdlbmRpZicpLAorICAgICAgICAgICAgKCd1bmtub3duIGRlY2wnLCAnaWYgISBJRScpLAorICAgICAgICAgICAgKCdzdGFydGVuZHRhZycsICdsaW5rJywgWygnaHJlZicsICdmYXZpY29uLnRpZmYnKV0pLAorICAgICAgICAgICAgKCd1bmtub3duIGRlY2wnLCAnZW5kaWYnKSwKKyAgICAgICAgICAgICgndW5rbm93biBkZWNsJywgJ2lmICFJRSA2JyksCisgICAgICAgICAgICAoJ3N0YXJ0ZW5kdGFnJywgJ2ltZycsIFsoJ3NyYycsICdmaXJlZm94LnBuZycpXSksCisgICAgICAgICAgICAoJ3Vua25vd24gZGVjbCcsICdlbmRpZicpLAorICAgICAgICAgICAgKCd1bmtub3duIGRlY2wnLCAnaWYgIWllIDYnKSwKKyAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYicsIFtdKSwKKyAgICAgICAgICAgICgnZGF0YScsICdmb28nKSwKKyAgICAgICAgICAgICgnZW5kdGFnJywgJ2InKSwKKyAgICAgICAgICAgICgndW5rbm93biBkZWNsJywgJ2VuZGlmJyksCisgICAgICAgICAgICAoJ3Vua25vd24gZGVjbCcsICdpZiAoIUlFKXwobHQgSUUgOSknKSwKKyAgICAgICAgICAgICgnc3RhcnRlbmR0YWcnLCAnaW1nJywgWygnc3JjJywgJ21hbW1vdGguYm1wJyldKSwKKyAgICAgICAgICAgICgndW5rbm93biBkZWNsJywgJ2VuZGlmJykKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoSFRNTFBhcnNlclRlc3RDYXNlLCBBdHRyaWJ1dGVzVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4MWEyYwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKQEAgLTAsMCArMSw1MzIgQEAKK2ltcG9ydCBodHRwbGliCitpbXBvcnQgYXJyYXkKK2ltcG9ydCBodHRwbGliCitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBlcnJubworCitpbXBvcnQgdW5pdHRlc3QKK1Rlc3RDYXNlID0gdW5pdHRlc3QuVGVzdENhc2UKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCisKK2NsYXNzIEZha2VTb2NrZXQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGZpbGVjbGFzcz1TdHJpbmdJTy5TdHJpbmdJTyk6CisgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKyAgICAgICAgc2VsZi5maWxlY2xhc3MgPSBmaWxlY2xhc3MKKyAgICAgICAgc2VsZi5kYXRhID0gJycKKworICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmRhdGEgKz0gJycuam9pbihkYXRhKQorCisgICAgZGVmIG1ha2VmaWxlKHNlbGYsIG1vZGUsIGJ1ZnNpemU9Tm9uZSk6CisgICAgICAgIGlmIG1vZGUgIT0gJ3InIGFuZCBtb2RlICE9ICdyYic6CisgICAgICAgICAgICByYWlzZSBodHRwbGliLlVuaW1wbGVtZW50ZWRGaWxlTW9kZSgpCisgICAgICAgIHJldHVybiBzZWxmLmZpbGVjbGFzcyhzZWxmLnRleHQpCisKK2NsYXNzIEVQaXBlU29ja2V0KEZha2VTb2NrZXQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIHBpcGVfdHJpZ2dlcik6CisgICAgICAgICMgV2hlbiBzZW5kYWxsKCkgaXMgY2FsbGVkIHdpdGggcGlwZV90cmlnZ2VyLCByYWlzZSBFUElQRS4KKyAgICAgICAgRmFrZVNvY2tldC5fX2luaXRfXyhzZWxmLCB0ZXh0KQorICAgICAgICBzZWxmLnBpcGVfdHJpZ2dlciA9IHBpcGVfdHJpZ2dlcgorCisgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIHNlbGYucGlwZV90cmlnZ2VyIGluIGRhdGE6CisgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJybm8uRVBJUEUsICJnb3RjaGEiKQorICAgICAgICBzZWxmLmRhdGEgKz0gZGF0YQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKK2NsYXNzIE5vRU9GU3RyaW5nSU8oU3RyaW5nSU8uU3RyaW5nSU8pOgorICAgICIiIkxpa2UgU3RyaW5nSU8sIGJ1dCByYWlzZXMgQXNzZXJ0aW9uRXJyb3Igb24gRU9GLgorCisgICAgVGhpcyBpcyB1c2VkIGJlbG93IHRvIHRlc3QgdGhhdCBodHRwbGliIGRvZXNuJ3QgdHJ5IHRvIHJlYWQKKyAgICBtb3JlIGZyb20gdGhlIHVuZGVybHlpbmcgZmlsZSB0aGFuIGl0IHNob3VsZC4KKyAgICAiIiIKKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgZGF0YSA9IFN0cmluZ0lPLlN0cmluZ0lPLnJlYWQoc2VsZiwgbikKKyAgICAgICAgaWYgZGF0YSA9PSAnJzoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdjYWxsZXIgdHJpZWQgdG8gcmVhZCBwYXN0IEVPRicpCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGVuZ3RoPU5vbmUpOgorICAgICAgICBkYXRhID0gU3RyaW5nSU8uU3RyaW5nSU8ucmVhZGxpbmUoc2VsZiwgbGVuZ3RoKQorICAgICAgICBpZiBkYXRhID09ICcnOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2NhbGxlciB0cmllZCB0byByZWFkIHBhc3QgRU9GJykKKyAgICAgICAgcmV0dXJuIGRhdGEKKworCitjbGFzcyBIZWFkZXJUZXN0cyhUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYXV0b19oZWFkZXJzKHNlbGYpOgorICAgICAgICAjIFNvbWUgaGVhZGVycyBhcmUgYWRkZWQgYXV0b21hdGljYWxseSwgYnV0IHNob3VsZCBub3QgYmUgYWRkZWQgYnkKKyAgICAgICAgIyAucmVxdWVzdCgpIGlmIHRoZXkgYXJlIGV4cGxpY2l0bHkgc2V0LgorCisgICAgICAgIGNsYXNzIEhlYWRlckNvdW50aW5nQnVmZmVyKGxpc3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuY291bnQgPSB7fQorICAgICAgICAgICAgZGVmIGFwcGVuZChzZWxmLCBpdGVtKToKKyAgICAgICAgICAgICAgICBrdiA9IGl0ZW0uc3BsaXQoJzonKQorICAgICAgICAgICAgICAgIGlmIGxlbihrdikgPiAxOgorICAgICAgICAgICAgICAgICAgICAjIGl0ZW0gaXMgYSAnS2V5OiBWYWx1ZScgaGVhZGVyIHN0cmluZworICAgICAgICAgICAgICAgICAgICBsY0tleSA9IGt2WzBdLmxvd2VyKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudC5zZXRkZWZhdWx0KGxjS2V5LCAwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50W2xjS2V5XSArPSAxCisgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZiwgaXRlbSkKKworICAgICAgICBmb3IgZXhwbGljaXRfaGVhZGVyIGluIFRydWUsIEZhbHNlOgorICAgICAgICAgICAgZm9yIGhlYWRlciBpbiAnQ29udGVudC1sZW5ndGgnLCAnSG9zdCcsICdBY2NlcHQtZW5jb2RpbmcnOgorICAgICAgICAgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgICAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldCgnYmxhaGJsYWhibGFoJykKKyAgICAgICAgICAgICAgICBjb25uLl9idWZmZXIgPSBIZWFkZXJDb3VudGluZ0J1ZmZlcigpCisKKyAgICAgICAgICAgICAgICBib2R5ID0gJ3NwYW1zcGFtc3BhbScKKyAgICAgICAgICAgICAgICBoZWFkZXJzID0ge30KKyAgICAgICAgICAgICAgICBpZiBleHBsaWNpdF9oZWFkZXI6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbaGVhZGVyXSA9IHN0cihsZW4oYm9keSkpCisgICAgICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5LCBoZWFkZXJzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5fYnVmZmVyLmNvdW50W2hlYWRlci5sb3dlcigpXSwgMSkKKworICAgIGRlZiB0ZXN0X2NvbnRlbnRfbGVuZ3RoXzAoc2VsZik6CisKKyAgICAgICAgY2xhc3MgQ29udGVudExlbmd0aENoZWNrZXIobGlzdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgbGlzdC5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuY29udGVudF9sZW5ndGggPSBOb25lCisgICAgICAgICAgICBkZWYgYXBwZW5kKHNlbGYsIGl0ZW0pOgorICAgICAgICAgICAgICAgIGt2ID0gaXRlbS5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICAgICAgaWYgbGVuKGt2KSA+IDEgYW5kIGt2WzBdLmxvd2VyKCkgPT0gJ2NvbnRlbnQtbGVuZ3RoJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250ZW50X2xlbmd0aCA9IGt2WzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChzZWxmLCBpdGVtKQorCisgICAgICAgICMgUE9TVCB3aXRoIGVtcHR5IGJvZHkKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLl9idWZmZXIgPSBDb250ZW50TGVuZ3RoQ2hlY2tlcigpCisgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5fYnVmZmVyLmNvbnRlbnRfbGVuZ3RoLCAnMCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnSGVhZGVyIENvbnRlbnQtTGVuZ3RoIG5vdCBzZXQnKQorCisgICAgICAgICMgUFVUIHJlcXVlc3Qgd2l0aCBlbXB0eSBib2R5CisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIGNvbm4uc29jayA9IEZha2VTb2NrZXQoTm9uZSkKKyAgICAgICAgY29ubi5fYnVmZmVyID0gQ29udGVudExlbmd0aENoZWNrZXIoKQorICAgICAgICBjb25uLnJlcXVlc3QoJ1BVVCcsICcvJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5fYnVmZmVyLmNvbnRlbnRfbGVuZ3RoLCAnMCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnSGVhZGVyIENvbnRlbnQtTGVuZ3RoIG5vdCBzZXQnKQorCisgICAgZGVmIHRlc3RfcHV0aGVhZGVyKHNlbGYpOgorICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgIGNvbm4ucHV0cmVxdWVzdCgnR0VUJywnLycpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdDb250ZW50LWxlbmd0aCcsNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnQ29udGVudC1sZW5ndGg6IDQyJyBpbiBjb25uLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9pcHY2aG9zdF9oZWFkZXIoc2VsZik6CisgICAgICAgICMgRGVmYXVsdCBob3N0IGhlYWRlciBvbiBJUHY2IHRyYW5zYWN0aW9uIHNob3VsZCB3cmFwcGVkIGJ5IFtdIGlmCisgICAgICAgICMgaXRzIGFjdHVhbCBJUHY2IGFkZHJlc3MKKyAgICAgICAgZXhwZWN0ZWQgPSAnR0VUIC9mb28gSFRUUC8xLjFcclxuSG9zdDogWzIwMDE6Ol06ODFcclxuJyBcCisgICAgICAgICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZzogaWRlbnRpdHlcclxuXHJcbicKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ1syMDAxOjpdOjgxJykKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoJycpCisgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnL2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLmRhdGEuc3RhcnRzd2l0aChleHBlY3RlZCkpCisKKyAgICAgICAgZXhwZWN0ZWQgPSAnR0VUIC9mb28gSFRUUC8xLjFcclxuSG9zdDogWzIwMDE6MTAyQTo6XVxyXG4nIFwKKyAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nOiBpZGVudGl0eVxyXG5cclxuJworICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignWzIwMDE6MTAyQTo6XScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KCcnKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGNvbm4ucmVxdWVzdCgnR0VUJywgJy9mb28nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5kYXRhLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpKQorCisKK2NsYXNzIEJhc2ljVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc3RhdHVzX2xpbmVzKHNlbGYpOgorICAgICAgICAjIFRlc3QgSFRUUCBzdGF0dXMgbGluZXMKKworICAgICAgICBib2R5ID0gIkhUVFAvMS4xIDIwMCBPa1xyXG5cclxuVGV4dCIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2spCisgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCAnVGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmlzY2xvc2VkKCkpCisKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSA0MDAuMTAwIE5vdCBPa1xyXG5cclxuVGV4dCIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGh0dHBsaWIuQmFkU3RhdHVzTGluZSwgcmVzcC5iZWdpbikKKworICAgIGRlZiB0ZXN0X2JhZF9zdGF0dXNfcmVwcihzZWxmKToKKyAgICAgICAgZXhjID0gaHR0cGxpYi5CYWRTdGF0dXNMaW5lKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZXhjKSwgJycnQmFkU3RhdHVzTGluZSgiXCdcJyIsKScnJykKKworICAgIGRlZiB0ZXN0X3BhcnRpYWxfcmVhZHMoc2VsZik6CisgICAgICAgICMgaWYgd2UgaGF2ZSBhIGxlbmd0aCwgdGhlIHN5c3RlbSBrbm93cyB3aGVuIHRvIGNsb3NlIGl0c2VsZgorICAgICAgICAjIHNhbWUgYmVoYXZpb3VyIHRoYW4gd2hlbiB3ZSByZWFkIHRoZSB3aG9sZSB0aGluZyB3aXRoIHJlYWQoKQorICAgICAgICBib2R5ID0gIkhUVFAvMS4xIDIwMCBPa1xyXG5Db250ZW50LUxlbmd0aDogNFxyXG5cclxuVGV4dCIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2spCisgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgyKSwgJ1RlJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXNwLmlzY2xvc2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKDIpLCAneHQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5pc2Nsb3NlZCgpKQorCisgICAgZGVmIHRlc3RfcGFydGlhbF9yZWFkc19ub19jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgIyB3aGVuIG5vIGxlbmd0aCBpcyBwcmVzZW50LCB0aGUgc29ja2V0IHNob3VsZCBiZSBncmFjZWZ1bGx5IGNsb3NlZCB3aGVuCisgICAgICAgICMgYWxsIGRhdGEgd2FzIHJlYWQKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSAyMDAgT2tcclxuXHJcblRleHQiCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoMiksICdUZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzcC5pc2Nsb3NlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgyKSwgJ3h0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoMSksICcnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5pc2Nsb3NlZCgpKQorCisgICAgZGVmIHRlc3RfcGFydGlhbF9yZWFkc19pbmNvbXBsZXRlX2JvZHkoc2VsZik6CisgICAgICAgICMgaWYgdGhlIHNlcnZlciBzaHV0cyBkb3duIHRoZSBjb25uZWN0aW9uIGJlZm9yZSB0aGUgd2hvbGUKKyAgICAgICAgIyBjb250ZW50LWxlbmd0aCBpcyBkZWxpdmVyZWQsIHRoZSBzb2NrZXQgaXMgZ3JhY2VmdWxseSBjbG9zZWQKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSAyMDAgT2tcclxuQ29udGVudC1MZW5ndGg6IDEwXHJcblxyXG5UZXh0IgorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChib2R5KQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaykKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKDIpLCAnVGUnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3AuaXNjbG9zZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoMiksICd4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKDEpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3AuaXNjbG9zZWQoKSkKKworICAgIGRlZiB0ZXN0X2hvc3RfcG9ydChzZWxmKToKKyAgICAgICAgIyBDaGVjayBpbnZhbGlkIGhvc3RfcG9ydAorCisgICAgICAgICMgTm90ZSB0aGF0IGh0dHBsaWIgZG9lcyBub3QgYWNjZXB0IHVzZXI6cGFzc3dvcmRAIGluIHRoZSBob3N0LXBvcnQuCisgICAgICAgIGZvciBocCBpbiAoInd3dy5weXRob24ub3JnOmFiYyIsICJ1c2VyOnBhc3N3b3JkQHd3dy5weXRob24ub3JnIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhodHRwbGliLkludmFsaWRVUkwsIGh0dHBsaWIuSFRUUCwgaHApCisKKyAgICAgICAgZm9yIGhwLCBoLCBwIGluICgoIltmZTgwOjoyMDc6ZTlmZjpmZTliXTo4MDAwIiwgImZlODA6OjIwNzplOWZmOmZlOWIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICA4MDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoInd3dy5weXRob24ub3JnOjgwIiwgInd3dy5weXRob24ub3JnIiwgODApLAorICAgICAgICAgICAgICAgICAgICAgICAgICgid3d3LnB5dGhvbi5vcmciLCAid3d3LnB5dGhvbi5vcmciLCA4MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJ3d3cucHl0aG9uLm9yZzoiLCAid3d3LnB5dGhvbi5vcmciLCA4MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJbZmU4MDo6MjA3OmU5ZmY6ZmU5Yl0iLCAiZmU4MDo6MjA3OmU5ZmY6ZmU5YiIsIDgwKSk6CisgICAgICAgICAgICBodHRwID0gaHR0cGxpYi5IVFRQKGhwKQorICAgICAgICAgICAgYyA9IGh0dHAuX2Nvbm4KKyAgICAgICAgICAgIGlmIGggIT0gYy5ob3N0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiSG9zdCBpbmNvcnJlY3RseSBwYXJzZWQ6ICVzICE9ICVzIiAlIChoLCBjLmhvc3QpKQorICAgICAgICAgICAgaWYgcCAhPSBjLnBvcnQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQb3J0IGluY29ycmVjdGx5IHBhcnNlZDogJXMgIT0gJXMiICUgKHAsIGMuaG9zdCkpCisKKyAgICBkZWYgdGVzdF9yZXNwb25zZV9oZWFkZXJzKHNlbGYpOgorICAgICAgICAjIHRlc3QgcmVzcG9uc2Ugd2l0aCBtdWx0aXBsZSBtZXNzYWdlIGhlYWRlcnMgd2l0aCB0aGUgc2FtZSBmaWVsZCBuYW1lLgorICAgICAgICB0ZXh0ID0gKCdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAgICAgICAgICdTZXQtQ29va2llOiBDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7JworICAgICAgICAgICAgICAgICcgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIlxyXG4nCisgICAgICAgICAgICAgICAgJ1NldC1Db29raWU6IFBhcnRfTnVtYmVyPSJSb2NrZXRfTGF1bmNoZXJfMDAwMSI7IFZlcnNpb249IjEiOycKKyAgICAgICAgICAgICAgICAnIFBhdGg9Ii9hY21lIlxyXG4nCisgICAgICAgICAgICAgICAgJ1xyXG4nCisgICAgICAgICAgICAgICAgJ05vIGJvZHlcclxuJykKKyAgICAgICAgaGRyID0gKCdDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFZlcnNpb249IjEiOyBQYXRoPSIvYWNtZSInCisgICAgICAgICAgICAgICAnLCAnCisgICAgICAgICAgICAgICAnUGFydF9OdW1iZXI9IlJvY2tldF9MYXVuY2hlcl8wMDAxIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpCisgICAgICAgIHMgPSBGYWtlU29ja2V0KHRleHQpCisgICAgICAgIHIgPSBodHRwbGliLkhUVFBSZXNwb25zZShzKQorICAgICAgICByLmJlZ2luKCkKKyAgICAgICAgY29va2llcyA9IHIuZ2V0aGVhZGVyKCJTZXQtQ29va2llIikKKyAgICAgICAgaWYgY29va2llcyAhPSBoZHI6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm11bHRpcGxlIGhlYWRlcnMgbm90IGNvbWJpbmVkIHByb3Blcmx5IikKKworICAgIGRlZiB0ZXN0X3JlYWRfaGVhZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGxpYnJhcnkgZG9lc24ndCBhdHRlbXB0IHRvIHJlYWQgYW55IGRhdGEKKyAgICAgICAgIyBmcm9tIGEgSEVBRCByZXF1ZXN0LiAgKFRpY2tsZXMgU0YgYnVnICM2MjIwNDIuKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldCgKKyAgICAgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoOiAxNDQzMlxyXG4nCisgICAgICAgICAgICAnXHJcbicsCisgICAgICAgICAgICBOb0VPRlN0cmluZ0lPKQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJIRUFEIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIGlmIHJlc3AucmVhZCgpICE9ICIiOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWQgbm90IGV4cGVjdCByZXNwb25zZSBmcm9tIEhFQUQgcmVxdWVzdCIpCisKKyAgICBkZWYgdGVzdF9zZW5kX2ZpbGUoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ0dFVCAvZm9vIEhUVFAvMS4xXHJcbkhvc3Q6IGV4YW1wbGUuY29tXHJcbicgXAorICAgICAgICAgICAgICAgICAgICdBY2NlcHQtRW5jb2Rpbmc6IGlkZW50aXR5XHJcbkNvbnRlbnQtTGVuZ3RoOicKKworICAgICAgICBib2R5ID0gb3BlbihfX2ZpbGVfXywgJ3JiJykKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBjb25uLnJlcXVlc3QoJ0dFVCcsICcvZm9vJywgYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suZGF0YS5zdGFydHN3aXRoKGV4cGVjdGVkKSkKKworICAgIGRlZiB0ZXN0X3NlbmQoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ3RoaXMgaXMgYSB0ZXN0IHRoaXMgaXMgb25seSBhIHRlc3QnCisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgY29ubi5zZW5kKGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBzb2NrLmRhdGEpCisgICAgICAgIHNvY2suZGF0YSA9ICcnCisgICAgICAgIGNvbm4uc2VuZChhcnJheS5hcnJheSgnYycsIGV4cGVjdGVkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgc29jay5kYXRhKQorICAgICAgICBzb2NrLmRhdGEgPSAnJworICAgICAgICBjb25uLnNlbmQoU3RyaW5nSU8uU3RyaW5nSU8oZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBzb2NrLmRhdGEpCisKKyAgICBkZWYgdGVzdF9jaHVua2VkKHNlbGYpOgorICAgICAgICBjaHVua2VkX3N0YXJ0ID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nCisgICAgICAgICAgICAnVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcclxuXHJcbicKKyAgICAgICAgICAgICdhXHJcbicKKyAgICAgICAgICAgICdoZWxsbyB3b3JsXHJcbicKKyAgICAgICAgICAgICcxXHJcbicKKyAgICAgICAgICAgICdkXHJcbicKKyAgICAgICAgKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgJzBcclxuJykKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKCksICdoZWxsbyB3b3JsZCcpCisgICAgICAgIHJlc3AuY2xvc2UoKQorCisgICAgICAgIGZvciB4IGluICgnJywgJ2Zvb1xyXG4nKToKKyAgICAgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGNodW5rZWRfc3RhcnQgKyB4KQorICAgICAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKKyAgICAgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3AucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgaHR0cGxpYi5JbmNvbXBsZXRlUmVhZCwgaToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkucGFydGlhbCwgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaSksJ0luY29tcGxldGVSZWFkKDExIGJ5dGVzIHJlYWQpJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpKSwnSW5jb21wbGV0ZVJlYWQoMTEgYnl0ZXMgcmVhZCknKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0luY29tcGxldGVSZWFkIGV4cGVjdGVkJykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmVzcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jaHVua2VkX2hlYWQoc2VsZik6CisgICAgICAgIGNodW5rZWRfc3RhcnQgPSAoCisgICAgICAgICAgICAnSFRUUC8xLjEgMjAwIE9LXHJcbicKKyAgICAgICAgICAgICdUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG5cclxuJworICAgICAgICAgICAgJ2FcclxuJworICAgICAgICAgICAgJ2hlbGxvIHdvcmxkXHJcbicKKyAgICAgICAgICAgICcxXHJcbicKKyAgICAgICAgICAgICdkXHJcbicKKyAgICAgICAgKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgJzBcclxuJykKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iSEVBRCIpCisgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnN0YXR1cywgMjAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhc29uLCAnT0snKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5pc2Nsb3NlZCgpKQorCisgICAgZGVmIHRlc3RfbmVnYXRpdmVfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KCdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGg6IC0xXHJcblxyXG5IZWxsb1xyXG4nKQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJHRVQiKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoKSwgJ0hlbGxvXHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmlzY2xvc2VkKCkpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3JlYWQoc2VsZik6CisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KCdIVFRQLzEuMSAyMDAgT0tcclxuQ29udGVudC1MZW5ndGg6IDEwXHJcblxyXG5IZWxsb1xyXG4nKQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJHRVQiKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcC5yZWFkKCkKKyAgICAgICAgZXhjZXB0IGh0dHBsaWIuSW5jb21wbGV0ZVJlYWQgYXMgaToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5wYXJ0aWFsLCAnSGVsbG9cclxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluY29tcGxldGVSZWFkKDcgYnl0ZXMgcmVhZCwgMyBtb3JlIGV4cGVjdGVkKSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluY29tcGxldGVSZWFkKDcgYnl0ZXMgcmVhZCwgMyBtb3JlIGV4cGVjdGVkKSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5pc2Nsb3NlZCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdJbmNvbXBsZXRlUmVhZCBleHBlY3RlZCcpCisKKyAgICBkZWYgdGVzdF9lcGlwZShzZWxmKToKKyAgICAgICAgc29jayA9IEVQaXBlU29ja2V0KAorICAgICAgICAgICAgIkhUVFAvMS4wIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkXHJcbiIKKyAgICAgICAgICAgICJDb250ZW50LXR5cGU6IHRleHQvaHRtbFxyXG4iCisgICAgICAgICAgICAiV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09XCJleGFtcGxlXCJcclxuIiwKKyAgICAgICAgICAgIGIiQ29udGVudC1MZW5ndGgiKQorICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbigiZXhhbXBsZS5jb20iKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBjb25uLnJlcXVlc3QoIlBVVCIsICIvdXJsIiwgImJvZHkiKSkKKyAgICAgICAgcmVzcCA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQwMSwgcmVzcC5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkJhc2ljIHJlYWxtPVwiZXhhbXBsZVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwLmdldGhlYWRlcigid3d3LWF1dGhlbnRpY2F0ZSIpKQorCisgICAgZGVmIHRlc3RfZmlsZW5vYXR0cihzZWxmKToKKyAgICAgICAgIyBKdXN0IHRlc3QgdGhlIGZpbGVubyBhdHRyaWJ1dGUgaW4gdGhlIEhUVFBSZXNwb25zZSBPYmplY3QuCisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9rXHJcblxyXG5UZXh0IgorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChib2R5KQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVzcCwnZmlsZW5vJyksCisgICAgICAgICAgICAgICAgJ0hUVFBSZXNwb25zZSBzaG91bGQgZXhwb3NlIGEgZmlsZW5vIGF0dHJpYnV0ZScpCisKKyAgICAjIFRlc3QgbGluZXMgb3ZlcmZsb3dpbmcgdGhlIG1heCBsaW5lIHNpemUgKF9NQVhMSU5FIGluIGh0dHAuY2xpZW50KQorCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3dpbmdfc3RhdHVzX2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcFRlc3QoImRpc2FibGVkIGZvciBIVFRQIDAuOSBzdXBwb3J0IikKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSAyMDAgT2siICsgImsiICogNjU1MzYgKyAiXHJcbiIKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKEZha2VTb2NrZXQoYm9keSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChodHRwbGliLkxpbmVUb29Mb25nLCBodHRwbGliLkJhZFN0YXR1c0xpbmUpLCByZXNwLmJlZ2luKQorCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3dpbmdfaGVhZGVyX2xpbmUoc2VsZik6CisgICAgICAgIGJvZHkgPSAoCisgICAgICAgICAgICAnSFRUUC8xLjEgMjAwIE9LXHJcbicKKyAgICAgICAgICAgICdYLUZvbzogYmFyJyArICdyJyAqIDY1NTM2ICsgJ1xyXG5cclxuJworICAgICAgICApCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShGYWtlU29ja2V0KGJvZHkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhodHRwbGliLkxpbmVUb29Mb25nLCByZXNwLmJlZ2luKQorCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3dpbmdfY2h1bmtlZF9saW5lKHNlbGYpOgorICAgICAgICBib2R5ID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nCisgICAgICAgICAgICAnVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcclxuXHJcbicKKyAgICAgICAgICAgICsgJzAnICogNjU1MzYgKyAnYVxyXG4nCisgICAgICAgICAgICAnaGVsbG8gd29ybGRcclxuJworICAgICAgICAgICAgJzBcclxuJworICAgICAgICApCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShGYWtlU29ja2V0KGJvZHkpKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHR0cGxpYi5MaW5lVG9vTG9uZywgcmVzcC5yZWFkKQorCisgICAgZGVmIHRlc3RfZWFybHlfZW9mKHNlbGYpOgorICAgICAgICAjIFRlc3QgaHR0cHJlc3BvbnNlIHdpdGggbm8gXHJcbiB0ZXJtaW5hdGlvbiwKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSAyMDAgT2siCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmlzY2xvc2VkKCkpCisKK2NsYXNzIE9mZmxpbmVUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9yZXNwb25zZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHR0cGxpYi5yZXNwb25zZXNbaHR0cGxpYi5OT1RfRk9VTkRdLCAiTm90IEZvdW5kIikKKworCitjbGFzcyBTb3VyY2VBZGRyZXNzVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zZXJ2KQorICAgICAgICBzZWxmLnNvdXJjZV9wb3J0ID0gdGVzdF9zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICBzZWxmLnNlcnYubGlzdGVuKDUpCisgICAgICAgIHNlbGYuY29ubiA9IE5vbmUKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb25uOgorICAgICAgICAgICAgc2VsZi5jb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuY29ubiA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ID0gTm9uZQorCisgICAgZGVmIHRlc3RIVFRQQ29ubmVjdGlvblNvdXJjZUFkZHJlc3Moc2VsZik6CisgICAgICAgIHNlbGYuY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oSE9TVCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPSgnJywgc2VsZi5zb3VyY2VfcG9ydCkpCisgICAgICAgIHNlbGYuY29ubi5jb25uZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbm4uc29jay5nZXRzb2NrbmFtZSgpWzFdLCBzZWxmLnNvdXJjZV9wb3J0KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihodHRwbGliLCAnSFRUUFNDb25uZWN0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAnaHR0cGxpYi5IVFRQU0Nvbm5lY3Rpb24gbm90IGRlZmluZWQnKQorICAgIGRlZiB0ZXN0SFRUUFNDb25uZWN0aW9uU291cmNlQWRkcmVzcyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25uID0gaHR0cGxpYi5IVFRQU0Nvbm5lY3Rpb24oSE9TVCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPSgnJywgc2VsZi5zb3VyY2VfcG9ydCkpCisgICAgICAgICMgV2UgZG9uJ3QgdGVzdCBhbnl0aGluZyBoZXJlIG90aGVyIHRoZSBjb25zdHJ1Y3RvciBub3QgYmFyZmluZyBhcworICAgICAgICAjIHRoaXMgY29kZSBkb2Vzbid0IGRlYWwgd2l0aCBzZXR0aW5nIHVwIGFuIGFjdGl2ZSBydW5uaW5nIFNTTCBzZXJ2ZXIKKyAgICAgICAgIyBmb3IgYW4gc3NsX3dyYXBwZWQgY29ubmVjdCgpIHRvIGFjdHVhbGx5IHJldHVybiBmcm9tLgorCisKK2NsYXNzIFRpbWVvdXRUZXN0KFRlc3RDYXNlKToKKyAgICBQT1JUID0gTm9uZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIFRpbWVvdXRUZXN0LlBPUlQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc2VydikKKyAgICAgICAgc2VsZi5zZXJ2Lmxpc3Rlbig1KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYuY2xvc2UoKQorICAgICAgICBzZWxmLnNlcnYgPSBOb25lCisKKyAgICBkZWYgdGVzdFRpbWVvdXRBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICcnJ1RoaXMgd2lsbCBwcm92ZSB0aGF0IHRoZSB0aW1lb3V0IGdldHMgdGhyb3VnaAorICAgICAgICBIVFRQQ29ubmVjdGlvbiBhbmQgaW50byB0aGUgc29ja2V0LgorICAgICAgICAnJycKKyAgICAgICAgIyBkZWZhdWx0IC0tIHVzZSBnbG9iYWwgc29ja2V0IHRpbWVvdXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaHR0cENvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKEhPU1QsIFRpbWVvdXRUZXN0LlBPUlQpCisgICAgICAgICAgICBodHRwQ29ubi5jb25uZWN0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHBDb25uLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyAgICAgICAgaHR0cENvbm4uY2xvc2UoKQorCisgICAgICAgICMgbm8gdGltZW91dCAtLSBkbyBub3QgdXNlIGdsb2JhbCBzb2NrZXQgZGVmYXVsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBodHRwQ29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oSE9TVCwgVGltZW91dFRlc3QuUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PU5vbmUpCisgICAgICAgICAgICBodHRwQ29ubi5jb25uZWN0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHBDb25uLnNvY2suZ2V0dGltZW91dCgpLCBOb25lKQorICAgICAgICBodHRwQ29ubi5jbG9zZSgpCisKKyAgICAgICAgIyBhIHZhbHVlCisgICAgICAgIGh0dHBDb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihIT1NULCBUaW1lb3V0VGVzdC5QT1JULCB0aW1lb3V0PTMwKQorICAgICAgICBodHRwQ29ubi5jb25uZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwQ29ubi5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIGh0dHBDb25uLmNsb3NlKCkKKworCitjbGFzcyBIVFRQU1RpbWVvdXRUZXN0KFRlc3RDYXNlKToKKyMgWFhYIEhlcmUgc2hvdWxkIGJlIHRlc3RzIGZvciBIVFRQUywgdGhlcmUgaXNuJ3QgYW55IHJpZ2h0IG5vdyEKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgICMgc2ltcGxlIHRlc3QgdG8gY2hlY2sgaXQncyBzdG9yaW5nIGl0CisgICAgICAgIGlmIGhhc2F0dHIoaHR0cGxpYiwgJ0hUVFBTQ29ubmVjdGlvbicpOgorICAgICAgICAgICAgaCA9IGh0dHBsaWIuSFRUUFNDb25uZWN0aW9uKEhPU1QsIFRpbWVvdXRUZXN0LlBPUlQsIHRpbWVvdXQ9MzApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgudGltZW91dCwgMzApCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKGh0dHBsaWIsICdIVFRQUycpLCAnaHR0cGxpYi5IVFRQUyBub3QgYXZhaWxhYmxlJykKKyAgICBkZWYgdGVzdF9ob3N0X3BvcnQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgaW52YWxpZCBob3N0X3BvcnQKKworICAgICAgICAjIE5vdGUgdGhhdCBodHRwbGliIGRvZXMgbm90IGFjY2VwdCB1c2VyOnBhc3N3b3JkQCBpbiB0aGUgaG9zdC1wb3J0LgorICAgICAgICBmb3IgaHAgaW4gKCJ3d3cucHl0aG9uLm9yZzphYmMiLCAidXNlcjpwYXNzd29yZEB3d3cucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHR0cGxpYi5JbnZhbGlkVVJMLCBodHRwbGliLkhUVFAsIGhwKQorCisgICAgICAgIGZvciBocCwgaCwgcCBpbiAoKCJbZmU4MDo6MjA3OmU5ZmY6ZmU5Yl06ODAwMCIsICJmZTgwOjoyMDc6ZTlmZjpmZTliIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgODAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJweXBpLnB5dGhvbi5vcmc6NDQzIiwgInB5cGkucHl0aG9uLm9yZyIsIDQ0MyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJweXBpLnB5dGhvbi5vcmciLCAicHlwaS5weXRob24ub3JnIiwgNDQzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoInB5cGkucHl0aG9uLm9yZzoiLCAicHlwaS5weXRob24ub3JnIiwgNDQzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoIltmZTgwOjoyMDc6ZTlmZjpmZTliXSIsICJmZTgwOjoyMDc6ZTlmZjpmZTliIiwgNDQzKSk6CisgICAgICAgICAgICBodHRwID0gaHR0cGxpYi5IVFRQUyhocCkKKyAgICAgICAgICAgIGMgPSBodHRwLl9jb25uCisgICAgICAgICAgICBpZiBoICE9IGMuaG9zdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkhvc3QgaW5jb3JyZWN0bHkgcGFyc2VkOiAlcyAhPSAlcyIgJSAoaCwgYy5ob3N0KSkKKyAgICAgICAgICAgIGlmIHAgIT0gYy5wb3J0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUG9ydCBpbmNvcnJlY3RseSBwYXJzZWQ6ICVzICE9ICVzIiAlIChwLCBjLmhvc3QpKQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhlYWRlclRlc3RzLCBPZmZsaW5lVGVzdCwgQmFzaWNUZXN0LCBUaW1lb3V0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBTVGltZW91dFRlc3QsIFNvdXJjZUFkZHJlc3NUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2VkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQpAQCAtMCwwICsxLDUzNyBAQAorIiIiVW5pdHRlc3RzIGZvciB0aGUgdmFyaW91cyBIVFRQU2VydmVyIG1vZHVsZXMuCisKK1dyaXR0ZW4gYnkgQ29keSBBLlcuIFNvbWVydmlsbGUgPGNvZHktc29tZXJ2aWxsZUB1YnVudHUuY29tPiwKK0pvc2lwIER6b2xvbmdhLCBhbmQgTWljaGFlbCBPdHRlbmVkZXIgZm9yIHRoZSAyMDA3LzA4IEdIT1AgY29udGVzdC4KKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IGJhc2U2NAoraW1wb3J0IHNodXRpbAoraW1wb3J0IHVybGxpYgoraW1wb3J0IGh0dHBsaWIKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgQ0dJSFRUUFNlcnZlcgorCisKK2Zyb20gQmFzZUhUVFBTZXJ2ZXIgaW1wb3J0IEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsIEhUVFBTZXJ2ZXIKK2Zyb20gU2ltcGxlSFRUUFNlcnZlciBpbXBvcnQgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCitmcm9tIENHSUhUVFBTZXJ2ZXIgaW1wb3J0IENHSUhUVFBSZXF1ZXN0SGFuZGxlcgorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKwordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCisKKworY2xhc3MgTm9Mb2dSZXF1ZXN0SGFuZGxlcjoKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgKmFyZ3MpOgorICAgICAgICAjIGRvbid0IHdyaXRlIGxvZyBtZXNzYWdlcyB0byBzdGRlcnIKKyAgICAgICAgcGFzcworCitjbGFzcyBTb2NrZXRsZXNzUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X2NhbGxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYucHJvdG9jb2xfdmVyc2lvbiA9ICJIVFRQLzEuMSIKKworICAgIGRlZiBkb19HRVQoc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X2NhbGxlZCA9IFRydWUKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAgICBzZWxmLndmaWxlLndyaXRlKGInPGh0bWw+PGJvZHk+RGF0YTwvYm9keT48L2h0bWw+XHJcbicpCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm10LCAqYXJncyk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBUZXN0U2VydmVyVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X29iamVjdCwgcmVxdWVzdF9oYW5kbGVyKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnJlcXVlc3RfaGFuZGxlciA9IHJlcXVlc3RfaGFuZGxlcgorICAgICAgICBzZWxmLnRlc3Rfb2JqZWN0ID0gdGVzdF9vYmplY3QKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gSFRUUFNlcnZlcigoJycsIDApLCBzZWxmLnJlcXVlc3RfaGFuZGxlcikKKyAgICAgICAgc2VsZi50ZXN0X29iamVjdC5QT1JUID0gc2VsZi5zZXJ2ZXIuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KKyAgICAgICAgc2VsZi50ZXN0X29iamVjdC5zZXJ2ZXJfc3RhcnRlZC5zZXQoKQorICAgICAgICBzZWxmLnRlc3Rfb2JqZWN0ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZV9mb3JldmVyKDAuMDUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZXJfY2xvc2UoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyLnNodXRkb3duKCkKKworCitjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgICAgICBvcy5lbnZpcm9uID0gdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKQorICAgICAgICBzZWxmLnNlcnZlcl9zdGFydGVkID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi50aHJlYWQgPSBUZXN0U2VydmVyVGhyZWFkKHNlbGYsIHNlbGYucmVxdWVzdF9oYW5kbGVyKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisgICAgICAgIHNlbGYuc2VydmVyX3N0YXJ0ZWQud2FpdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGhyZWFkLnN0b3AoKQorICAgICAgICBvcy5lbnZpcm9uLl9fZXhpdF9fKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQorCisgICAgZGVmIHJlcXVlc3Qoc2VsZiwgdXJpLCBtZXRob2Q9J0dFVCcsIGJvZHk9Tm9uZSwgaGVhZGVycz17fSk6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlbGYuUE9SVCkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlcXVlc3QobWV0aG9kLCB1cmksIGJvZHksIGhlYWRlcnMpCisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uZ2V0cmVzcG9uc2UoKQorCitjbGFzcyBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEJhc2VIVFRQU2VydmVyIGZvY3Vzc2luZyBvbgorICAgIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuCisgICAgIiIiCisKKyAgICBIVFRQUmVzcG9uc2VNYXRjaCA9IHJlLmNvbXBpbGUoJ0hUVFAvMS5bMC05XSsgMjAwIE9LJykKKworICAgIGRlZiBzZXRVcCAoc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlciA9IFNvY2tldGxlc3NSZXF1ZXN0SGFuZGxlcigpCisKKyAgICBkZWYgc2VuZF90eXBpY2FsX3JlcXVlc3Qoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIGlucHV0X21zZyA9IFN0cmluZ0lPKG1lc3NhZ2UpCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJmaWxlID0gaW5wdXRfbXNnCisgICAgICAgIHNlbGYuaGFuZGxlci53ZmlsZSA9IG91dHB1dAorICAgICAgICBzZWxmLmhhbmRsZXIuaGFuZGxlX29uZV9yZXF1ZXN0KCkKKyAgICAgICAgb3V0cHV0LnNlZWsoMCkKKyAgICAgICAgcmV0dXJuIG91dHB1dC5yZWFkbGluZXMoKQorCisgICAgZGVmIHZlcmlmeV9nZXRfY2FsbGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5oYW5kbGVyLmdldF9jYWxsZWQpCisKKyAgICBkZWYgdmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMoc2VsZiwgaGVhZGVycyk6CisgICAgICAgIGZvciBmaWVsZE5hbWUgaW4gJ1NlcnZlcjogJywgJ0RhdGU6ICcsICdDb250ZW50LVR5cGU6ICc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShoLnN0YXJ0c3dpdGgoZmllbGROYW1lKSBmb3IgaCBpbiBoZWFkZXJzKSwgMSkKKworICAgIGRlZiB2ZXJpZnlfaHR0cF9zZXJ2ZXJfcmVzcG9uc2Uoc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICBtYXRjaCA9IHNlbGYuSFRUUFJlc3BvbnNlTWF0Y2guc2VhcmNoKHJlc3BvbnNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2ggaXMgbm90IE5vbmUpCisKKyAgICBkZWYgdGVzdF9odHRwXzFfMShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdCgnR0VUIC8gSFRUUC8xLjFcclxuXHJcbicpCisgICAgICAgIHNlbGYudmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHJlc3VsdFswXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCisgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sICc8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKworICAgIGRlZiB0ZXN0X2h0dHBfMV8wKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KCdHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykKKyAgICAgICAgc2VsZi52ZXJpZnlfaHR0cF9zZXJ2ZXJfcmVzcG9uc2UocmVzdWx0WzBdKQorICAgICAgICBzZWxmLnZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHJlc3VsdFsxOi0xXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy0xXSwgJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorCisgICAgZGVmIHRlc3RfaHR0cF8wXzkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoJ0dFVCAvIEhUVFAvMC45XHJcblxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKKworICAgIGRlZiB0ZXN0X3dpdGhfY29udGludWVfMV8wKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KCdHRVQgLyBIVFRQLzEuMFxyXG5FeHBlY3Q6IDEwMC1jb250aW51ZVxyXG5cclxuJykKKyAgICAgICAgc2VsZi52ZXJpZnlfaHR0cF9zZXJ2ZXJfcmVzcG9uc2UocmVzdWx0WzBdKQorICAgICAgICBzZWxmLnZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHJlc3VsdFsxOi0xXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy0xXSwgJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorCisgICAgZGVmIHRlc3RfcmVxdWVzdF9sZW5ndGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEwNzE0OiBodWdlIHJlcXVlc3QgbGluZXMgYXJlIGRpc2NhcmRlZCwgdG8gYXZvaWQgRGVuaWFsCisgICAgICAgICMgb2YgU2VydmljZSBhdHRhY2tzLgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUICcgKyBiJ3gnICogNjU1MzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBiJ0hUVFAvMS4xIDQxNCBSZXF1ZXN0LVVSSSBUb28gTG9uZ1xyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQorCisKK2NsYXNzIEJhc2VIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKyAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIHByb3RvY29sX3ZlcnNpb24gPSAnSFRUUC8xLjEnCisgICAgICAgIGRlZmF1bHRfcmVxdWVzdF92ZXJzaW9uID0gJ0hUVFAvMS4xJworCisgICAgICAgIGRlZiBkb19URVNUKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwNCkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCisgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKworICAgICAgICBkZWYgZG9fS0VFUChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDQpCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJykKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0Nvbm5lY3Rpb24nLCAna2VlcC1hbGl2ZScpCisgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKworICAgICAgICBkZWYgZG9fS0VZRVJST1Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoOTk5KQorCisgICAgICAgIGRlZiBkb19DVVNUT00oc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoOTk5KQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb25uZWN0aW9uJywgJ2Nsb3NlJykKKyAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBCYXNlVGVzdENhc2Uuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5jb24gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdsb2NhbGhvc3QnLCBzZWxmLlBPUlQpCisgICAgICAgIHNlbGYuY29uLmNvbm5lY3QoKQorCisgICAgZGVmIHRlc3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTAxKQorCisgICAgZGVmIHRlc3RfcmVxdWVzdF9saW5lX3RyaW1taW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJ0hUVFAvMS4xXG4nCisgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDEpCisKKyAgICBkZWYgdGVzdF92ZXJzaW9uX2JvZ3VzKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJ0ZVQkFSJworICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDAwKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9kaWdpdHMoc2VsZik6CisgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnSFRUUC85LjkuOScKKyAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwMCkKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9uZV9nZXQoc2VsZik6CisgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnJworICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTAxKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9ub25lKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJycKKyAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnUFVUJywgJy8nKQorICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwMCkKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25faW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuID0gOTkKKyAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICdIVFRQLzkuOScKKyAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwNSkKKworICAgIGRlZiB0ZXN0X3NlbmRfYmxhbmsoc2VsZik6CisgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnJworICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCcnLCAnJykKKyAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDApCisKKyAgICBkZWYgdGVzdF9oZWFkZXJfY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgc2VsZi5jb24ucHV0aGVhZGVyKCdDb25uZWN0aW9uJywgJ2Nsb3NlJykKKyAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDEpCisKKyAgICBkZWYgdGVzdF9oZWFkX2tlZXBfYWxpdmUoc2VsZik6CisgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnSFRUUC8xLjEnCisgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgc2VsZi5jb24ucHV0aGVhZGVyKCdDb25uZWN0aW9uJywgJ2tlZXAtYWxpdmUnKQorICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZXIoc2VsZik6CisgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ1RFU1QnLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAyMDQpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5faGVhZGVyX2tlZXBfYWxpdmUoc2VsZik6CisgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0tFRVAnLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0aGVhZGVyKCdDb25uZWN0aW9uJyksICdrZWVwLWFsaXZlJykKKyAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnVEVTVCcsICcvJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY29uLmNsb3NlKQorCisgICAgZGVmIHRlc3RfaW50ZXJuYWxfa2V5X2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdLRVlFUlJPUicsICcvJykKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDk5OSkKKworICAgIGRlZiB0ZXN0X3JldHVybl9jdXN0b21fc3RhdHVzKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdDVVNUT00nLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCisKKworY2xhc3MgU2ltcGxlSFRUUFNlcnZlclRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisgICAgY2xhc3MgcmVxdWVzdF9oYW5kbGVyKE5vTG9nUmVxdWVzdEhhbmRsZXIsIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgQmFzZVRlc3RDYXNlLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgYmFzZXRlbXBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgb3MuY2hkaXIoYmFzZXRlbXBkaXIpCisgICAgICAgIHNlbGYuZGF0YSA9ICdXZSBhcmUgdGhlIGtuaWdodHMgd2hvIHNheSBOaSEnCisgICAgICAgIHNlbGYudGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPWJhc2V0ZW1wZGlyKQorICAgICAgICBzZWxmLnRlbXBkaXJfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi50ZW1wZGlyKQorICAgICAgICB0ZW1wID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAndGVzdCcpLCAnd2InKQorICAgICAgICB0ZW1wLndyaXRlKHNlbGYuZGF0YSkKKyAgICAgICAgdGVtcC5jbG9zZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYuY3dkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50ZW1wZGlyKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgQmFzZVRlc3RDYXNlLnRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24oc2VsZiwgcmVzcG9uc2UsIHN0YXR1cywgZGF0YT1Ob25lKToKKyAgICAgICAgYm9keSA9IHJlc3BvbnNlLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcG9uc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlc3BvbnNlLnJlYXNvbikKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYm9keSkKKworICAgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICAgICAgI2NvbnN0cnVjdHMgdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBIVFRQU2VydmVyCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJy90ZXN0JykKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMjAwLCBkYXRhPXNlbGYuZGF0YSkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3Qoc2VsZi50ZW1wZGlyX25hbWUgKyAnLycpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDIwMCkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3Qoc2VsZi50ZW1wZGlyX25hbWUpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDMwMSkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy9UaGlzRG9lc05vdEV4aXN0JykKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNDA0KQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgnLycgKyAnVGhpc0RvZXNOb3RFeGlzdCcgKyAnLycpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDQwNCkKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcGRpcl9uYW1lLCAnaW5kZXguaHRtbCcpLCAndycpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJyArIHNlbGYudGVtcGRpcl9uYW1lICsgJy8nKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAyMDApCisKKyAgICAgICAgIyBjaG1vZCgpIGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZCBvbiBXaW5kb3dzLCBhbmQgZmlsZXN5c3RlbQorICAgICAgICAjIHBlcm1pc3Npb25zIGFyZSBpZ25vcmVkIGJ5IHJvb3Qgb24gVW5peC4KKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnIGFuZCBvcy5nZXRldWlkKCkgIT0gMDoKKyAgICAgICAgICAgIG9zLmNobW9kKHNlbGYudGVtcGRpciwgMCkKKyAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJy8nKQorICAgICAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNDA0KQorICAgICAgICAgICAgb3MuY2htb2Qoc2VsZi50ZW1wZGlyLCAwNzU1KQorCisgICAgZGVmIHRlc3RfaGVhZChzZWxmKToKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoCisgICAgICAgICAgICBzZWxmLnRlbXBkaXJfbmFtZSArICcvdGVzdCcsIG1ldGhvZD0nSEVBRCcpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5nZXRoZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGxlbihzZWxmLmRhdGEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5nZXRoZWFkZXIoJ2NvbnRlbnQtdHlwZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9yZXF1ZXN0cyhzZWxmKToKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy8nLCBtZXRob2Q9J0ZPTycpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDUwMSkKKyAgICAgICAgIyByZXF1ZXN0cyBtdXN0IGJlIGNhc2Ugc2Vuc2l0aXZlLHNvIHRoaXMgc2hvdWxkIGZhaWwgdG9vCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJywgbWV0aG9kPSdnZXQnKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA1MDEpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJywgbWV0aG9kPSdHRVRzJykKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNTAxKQorCisKK2NnaV9maWxlMSA9ICIiIlwKKyMhJXMKKworcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sIgorcHJpbnQKK3ByaW50ICJIZWxsbyBXb3JsZCIKKyIiIgorCitjZ2lfZmlsZTIgPSAiIiJcCisjISVzCitpbXBvcnQgY2dpCisKK3ByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbCIKK3ByaW50CisKK2Zvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKCkKK3ByaW50ICIlJXMsICUlcywgJSVzIiAlJSAoZm9ybS5nZXRmaXJzdCgic3BhbSIpLCBmb3JtLmdldGZpcnN0KCJlZ2dzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0Zmlyc3QoImJhY29uIikpCisiIiIKKworCitAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIob3MsICdnZXRldWlkJykgYW5kIG9zLmdldGV1aWQoKSA9PSAwLAorICAgICAgICAiVGhpcyB0ZXN0IGNhbid0IGJlIHJ1biByZWxpYWJseSBhcyByb290IChpc3N1ZSAjMTMzMDgpLiIpCitjbGFzcyBDR0lIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKyAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgQ0dJSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBCYXNlVGVzdENhc2Uuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5wYXJlbnRfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYuY2dpX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnBhcmVudF9kaXIsICdjZ2ktYmluJykKKyAgICAgICAgb3MubWtkaXIoc2VsZi5jZ2lfZGlyKQorCisgICAgICAgICMgVGhlIHNoZWJhbmcgbGluZSBzaG91bGQgYmUgcHVyZSBBU0NJSTogdXNlIHN5bWxpbmsgaWYgcG9zc2libGUuCisgICAgICAgICMgU2VlIGlzc3VlICM3NjY4LgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc3ltbGluaycpOgorICAgICAgICAgICAgc2VsZi5weXRob25leGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJlbnRfZGlyLCAncHl0aG9uJykKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc3lzLmV4ZWN1dGFibGUsIHNlbGYucHl0aG9uZXhlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5weXRob25leGUgPSBzeXMuZXhlY3V0YWJsZQorCisgICAgICAgIHNlbGYuZmlsZTFfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmNnaV9kaXIsICdmaWxlMS5weScpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGUxX3BhdGgsICd3JykgYXMgZmlsZTE6CisgICAgICAgICAgICBmaWxlMS53cml0ZShjZ2lfZmlsZTEgJSBzZWxmLnB5dGhvbmV4ZSkKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5maWxlMV9wYXRoLCAwNzc3KQorCisgICAgICAgIHNlbGYuZmlsZTJfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmNnaV9kaXIsICdmaWxlMi5weScpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGUyX3BhdGgsICd3JykgYXMgZmlsZTI6CisgICAgICAgICAgICBmaWxlMi53cml0ZShjZ2lfZmlsZTIgJSBzZWxmLnB5dGhvbmV4ZSkKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5maWxlMl9wYXRoLCAwNzc3KQorCisgICAgICAgIHNlbGYuY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5wYXJlbnRfZGlyKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jaGRpcihzZWxmLmN3ZCkKKyAgICAgICAgICAgIGlmIHNlbGYucHl0aG9uZXhlICE9IHN5cy5leGVjdXRhYmxlOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLnB5dGhvbmV4ZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGUxX3BhdGgpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlMl9wYXRoKQorICAgICAgICAgICAgb3Mucm1kaXIoc2VsZi5jZ2lfZGlyKQorICAgICAgICAgICAgb3Mucm1kaXIoc2VsZi5wYXJlbnRfZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgQmFzZVRlc3RDYXNlLnRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgdGVzdF91cmxfY29sbGFwc2VfcGF0aChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgdGFpbCBpcyB0aGUgbGFzdCBwb3J0aW9uIGFuZCBoZWFkIGlzIHRoZSByZXN0IG9uIHByb3BlciB1cmxzCisgICAgICAgIHRlc3RfdmVjdG9ycyA9IHsKKyAgICAgICAgICAgICcnOiAnLy8nLAorICAgICAgICAgICAgJy4uJzogSW5kZXhFcnJvciwKKyAgICAgICAgICAgICcvLi8vLi4nOiBJbmRleEVycm9yLAorICAgICAgICAgICAgJy8nOiAnLy8nLAorICAgICAgICAgICAgJy8vJzogJy8vJywKKyAgICAgICAgICAgICcvXFwnOiAnLy9cXCcsCisgICAgICAgICAgICAnLy4vLyc6ICcvLycsCisgICAgICAgICAgICAnY2dpLWJpbi9maWxlMS5weSc6ICcvY2dpLWJpbi9maWxlMS5weScsCisgICAgICAgICAgICAnL2NnaS1iaW4vZmlsZTEucHknOiAnL2NnaS1iaW4vZmlsZTEucHknLAorICAgICAgICAgICAgJ2EnOiAnLy9hJywKKyAgICAgICAgICAgICcvYSc6ICcvL2EnLAorICAgICAgICAgICAgJy8vYSc6ICcvL2EnLAorICAgICAgICAgICAgJy4vYSc6ICcvL2EnLAorICAgICAgICAgICAgJy4vQzovJzogJy9DOi8nLAorICAgICAgICAgICAgJy9hL2InOiAnL2EvYicsCisgICAgICAgICAgICAnL2EvYi8nOiAnL2EvYi8nLAorICAgICAgICAgICAgJy9hL2IvLic6ICcvYS9iLycsCisgICAgICAgICAgICAnL2EvYi9jLy4uJzogJy9hL2IvJywKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZCc6ICcvYS9iL2QnLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vZic6ICcvYS9iL2QvZicsCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi8uLi9mJzogJy9hL2IvZicsCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi8uLy4vLi8uLi8vZic6ICcvYS9iL2YnLAorICAgICAgICAgICAgJy4uL2EvYi9jLy4uL2QvZS8uLi8uLy4vLi8uLi8vZic6IEluZGV4RXJyb3IsCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi8uLi8uLi9mJzogJy9hL2YnLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi4vLi4vLi4vZic6ICcvL2YnLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi4vLi4vLi4vLi4vZic6IEluZGV4RXJyb3IsCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi8uLi8uLi8uLi9mLy4uJzogJy8vJywKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZC9lLy4uLy4uLy4uLy4uL2YvLi4vLic6ICcvLycsCisgICAgICAgIH0KKyAgICAgICAgZm9yIHBhdGgsIGV4cGVjdGVkIGluIHRlc3RfdmVjdG9ycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIHR5cGUpIGFuZCBpc3N1YmNsYXNzKGV4cGVjdGVkLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHSUhUVFBTZXJ2ZXIuX3VybF9jb2xsYXBzZV9wYXRoLCBwYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBDR0lIVFRQU2VydmVyLl91cmxfY29sbGFwc2VfcGF0aChwYXRoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0ncGF0aCA9ICVyXG5Hb3Q6ICAgICVyXG5XYW50ZWQ6ICVyJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aCwgYWN0dWFsLCBleHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdF9oZWFkZXJzX2FuZF9jb250ZW50KHNlbGYpOgorICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGUxLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ0hlbGxvIFdvcmxkXG4nLCAndGV4dC9odG1sJywgMjAwKSwKKyAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCisKKyAgICBkZWYgdGVzdF9wb3N0KHNlbGYpOgorICAgICAgICBwYXJhbXMgPSB1cmxsaWIudXJsZW5jb2RlKHsnc3BhbScgOiAxLCAnZWdncycgOiAncHl0aG9uJywgJ2JhY29uJyA6IDEyMzQ1Nn0pCisgICAgICAgIGhlYWRlcnMgPSB7J0NvbnRlbnQtdHlwZScgOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30KKyAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMi5weScsICdQT1NUJywgcGFyYW1zLCBoZWFkZXJzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnJlYWQoKSwgJzEsIHB5dGhvbiwgMTIzNDU2XG4nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZHVyaShzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9pbnZhbGlkJykKKyAgICAgICAgcmVzLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwNCkKKworICAgIGRlZiB0ZXN0X2F1dGhvcml6YXRpb24oc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSB7J0F1dGhvcml6YXRpb24nIDogJ0Jhc2ljICVzJyAlCisgICAgICAgICAgICAgICAgICAgYmFzZTY0LmI2NGVuY29kZSgndXNlcm5hbWU6cGFzcycpfQorICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGUxLnB5JywgJ0dFVCcsIGhlYWRlcnM9aGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ0hlbGxvIFdvcmxkXG4nLCAndGV4dC9odG1sJywgMjAwKSwKKyAgICAgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorCisgICAgZGVmIHRlc3Rfbm9fbGVhZGluZ19zbGFzaChzZWxmKToKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjI1NAorICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJ2NnaS1iaW4vZmlsZTEucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnSGVsbG8gV29ybGRcbicsICd0ZXh0L2h0bWwnLCAyMDApLAorICAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCisKKyAgICBkZWYgdGVzdF9vc19lbnZpcm9uX2lzX25vdF9hbHRlcmVkKHNlbGYpOgorICAgICAgICBzaWduYXR1cmUgPSAiVGVzdCBDR0kgU2VydmVyIgorICAgICAgICBvcy5lbnZpcm9uWydTRVJWRVJfU09GVFdBUkUnXSA9IHNpZ25hdHVyZQorICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGUxLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYidIZWxsbyBXb3JsZFxuJywgJ3RleHQvaHRtbCcsIDIwMCksCisgICAgICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5lbnZpcm9uWydTRVJWRVJfU09GVFdBUkUnXSwgc2lnbmF0dXJlKQorCisKK2NsYXNzIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIgVGVzdCB1cmwgcGFyc2luZyAiIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudHJhbnNsYXRlZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIHNlbGYudHJhbnNsYXRlZCA9IG9zLnBhdGguam9pbihzZWxmLnRyYW5zbGF0ZWQsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuaGFuZGxlciA9IFNvY2tldGxlc3NSZXF1ZXN0SGFuZGxlcigpCisKKyAgICBkZWYgdGVzdF9xdWVyeV9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGgoJy9maWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvZmlsZW5hbWU/Zm9vPWJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvZmlsZW5hbWU/YT1iJnNwYW09ZWdncyN6b3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKworICAgIGRlZiB0ZXN0X3N0YXJ0X3dpdGhfZG91YmxlX3NsYXNoKHNlbGYpOgorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvL2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGgoJy8vZmlsZW5hbWU/Zm9vPWJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0cnk6CisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VIVFRQU2VydmVyVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlSFRUUFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHSUhUVFBTZXJ2ZXJUZXN0Q2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLmNoZGlyKGN3ZCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW1hZ2VvcC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ltYWdlb3AucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTYzMjBmYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ltYWdlb3AucHkKQEAgLTAsMCArMSwyMTEgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIiIiVGVzdCBzY3JpcHQgZm9yIHRoZSBpbWFnZW9wIG1vZHVsZS4gIFRoaXMgaGFzIHRoZSBzaWRlCisgICBlZmZlY3Qgb2YgcGFydGlhbGx5IHRlc3RpbmcgdGhlIGltZ2ZpbGUgbW9kdWxlIGFzIHdlbGwuCisgICBSb2dlciBFLiBNYXNzZQorIiIiCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHVubGluaywgaW1wb3J0X21vZHVsZSwgcnVuX3VuaXR0ZXN0CisKK2ltYWdlb3AgPSBpbXBvcnRfbW9kdWxlKCdpbWFnZW9wJywgZGVwcmVjYXRlZD1UcnVlKQoraW1wb3J0IHV1LCBvcywgdW5pdHRlc3QKKworCitTSVpFUyA9ICgxLCAyLCAzLCA0KQorX1ZBTFVFUyA9ICgxLCAyLCAyKioxMCwgMioqMTUtMSwgMioqMTUsIDIqKjE1KzEsIDIqKjMxLTIsIDIqKjMxLTEpCitWQUxVRVMgPSB0dXBsZSggLXggZm9yIHggaW4gcmV2ZXJzZWQoX1ZBTFVFUykgKSArICgwLCkgKyBfVkFMVUVTCitBQUFBQSA9ICJBIiAqIDEwMjQKK01BWF9MRU4gPSAyKioyMAorCisKK2NsYXNzIElucHV0VmFsaWRhdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY2hlY2soc2VsZiwgbmFtZSwgc2l6ZT1Ob25lLCAqZXh0cmEpOgorICAgICAgICBmdW5jID0gZ2V0YXR0cihpbWFnZW9wLCBuYW1lKQorICAgICAgICBmb3IgaGVpZ2h0IGluIFZBTFVFUzoKKyAgICAgICAgICAgIGZvciB3aWR0aCBpbiBWQUxVRVM6CisgICAgICAgICAgICAgICAgc3RybGVuID0gYWJzKHdpZHRoICogaGVpZ2h0KQorICAgICAgICAgICAgICAgIGlmIHNpemU6CisgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAqPSBzaXplCisgICAgICAgICAgICAgICAgaWYgc3RybGVuIDwgTUFYX0xFTjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9ICJBIiAqIHN0cmxlbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBBQUFBQQorICAgICAgICAgICAgICAgIGlmIHNpemU6CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyA9IChkYXRhLCBzaXplLCB3aWR0aCwgaGVpZ2h0KSArIGV4dHJhCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzID0gKGRhdGEsIHdpZHRoLCBoZWlnaHQpICsgZXh0cmEKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZ1bmMoKmFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIGltYWdlb3AuZXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgY2hlY2tfc2l6ZShzZWxmLCBuYW1lLCAqZXh0cmEpOgorICAgICAgICBmb3Igc2l6ZSBpbiBTSVpFUzoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrKG5hbWUsIHNpemUsICpleHRyYSkKKworICAgIGRlZiBjaGVjayhzZWxmLCBuYW1lLCAqZXh0cmEpOgorICAgICAgICBzZWxmLl9jaGVjayhuYW1lLCBOb25lLCAqZXh0cmEpCisKKyAgICBkZWYgdGVzdF9pbnB1dF92YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3NpemUoImNyb3AiLCAwLCAwLCAwLCAwKQorICAgICAgICBzZWxmLmNoZWNrX3NpemUoInNjYWxlIiwgMSwgMCkKKyAgICAgICAgc2VsZi5jaGVja19zaXplKCJzY2FsZSIsIC0xLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja19zaXplKCJ0b3ZpZGVvIikKKyAgICAgICAgc2VsZi5jaGVjaygiZ3JleTJtb25vIiwgMTI4KQorICAgICAgICBzZWxmLmNoZWNrKCJncmV5MmdyZXk0IikKKyAgICAgICAgc2VsZi5jaGVjaygiZ3JleTJncmV5MiIpCisgICAgICAgIHNlbGYuY2hlY2soImRpdGhlcjJtb25vIikKKyAgICAgICAgc2VsZi5jaGVjaygiZGl0aGVyMmdyZXkyIikKKyAgICAgICAgc2VsZi5jaGVjaygibW9ubzJncmV5IiwgMCwgMCkKKyAgICAgICAgc2VsZi5jaGVjaygiZ3JleTIyZ3JleSIpCisgICAgICAgIHNlbGYuY2hlY2soInJnYjJyZ2I4IikgIyBubGVuKjQgPT0gbGVuCisgICAgICAgIHNlbGYuY2hlY2soInJnYjgycmdiIikKKyAgICAgICAgc2VsZi5jaGVjaygicmdiMmdyZXkiKQorICAgICAgICBzZWxmLmNoZWNrKCJncmV5MnJnYiIpCisKKworZGVmIHRlc3RfbWFpbigpOgorCisgICAgcnVuX3VuaXR0ZXN0KElucHV0VmFsaWRhdGlvblRlc3RzKQorCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgaW1nZmlsZQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIENyZWF0ZSBiaW5hcnkgdGVzdCBmaWxlcworICAgIHV1LmRlY29kZShnZXRfcXVhbGlmaWVkX3BhdGgoJ3Rlc3RyZ2InK29zLmV4dHNlcCsndXVlJyksICd0ZXN0Jytvcy5leHRzZXArJ3JnYicpCisKKyAgICBpbWFnZSwgd2lkdGgsIGhlaWdodCA9IGdldGltYWdlKCd0ZXN0Jytvcy5leHRzZXArJ3JnYicpCisKKyAgICAjIFJldHVybiB0aGUgc2VsZWN0ZWQgcGFydCBvZiBpbWFnZSwgd2hpY2ggc2hvdWxkIGJ5IHdpZHRoIGJ5IGhlaWdodAorICAgICMgaW4gc2l6ZSBhbmQgY29uc2lzdCBvZiBwaXhlbHMgb2YgcHNpemUgYnl0ZXMuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2Nyb3AnCisgICAgbmV3aW1hZ2UgPSBpbWFnZW9wLmNyb3AgKGltYWdlLCA0LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCAxLCAxKQorCisgICAgIyBSZXR1cm4gaW1hZ2Ugc2NhbGVkIHRvIHNpemUgbmV3d2lkdGggYnkgbmV3aGVpZ2h0LiBObyBpbnRlcnBvbGF0aW9uCisgICAgIyBpcyBkb25lLCBzY2FsaW5nIGlzIGRvbmUgYnkgc2ltcGxlLW1pbmRlZCBwaXhlbCBkdXBsaWNhdGlvbiBvciByZW1vdmFsLgorICAgICMgVGhlcmVmb3JlLCBjb21wdXRlci1nZW5lcmF0ZWQgaW1hZ2VzIG9yIGRpdGhlcmVkIGltYWdlcyB3aWxsCisgICAgIyBub3QgbG9vayBuaWNlIGFmdGVyIHNjYWxpbmcuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ3NjYWxlJworICAgIHNjYWxlaW1hZ2UgPSBpbWFnZW9wLnNjYWxlKGltYWdlLCA0LCB3aWR0aCwgaGVpZ2h0LCAxLCAxKQorCisgICAgIyBSdW4gYSB2ZXJ0aWNhbCBsb3ctcGFzcyBmaWx0ZXIgb3ZlciBhbiBpbWFnZS4gSXQgZG9lcyBzbyBieSBjb21wdXRpbmcKKyAgICAjIGVhY2ggZGVzdGluYXRpb24gcGl4ZWwgYXMgdGhlIGF2ZXJhZ2Ugb2YgdHdvIHZlcnRpY2FsbHktYWxpZ25lZCBzb3VyY2UKKyAgICAjIHBpeGVscy4gVGhlIG1haW4gdXNlIG9mIHRoaXMgcm91dGluZSBpcyB0byBmb3Jlc3RhbGwgZXhjZXNzaXZlIGZsaWNrZXIKKyAgICAjIGlmIHRoZSBpbWFnZSB0d28gdmVydGljYWxseS1hbGlnbmVkIHNvdXJjZSBwaXhlbHMsICBoZW5jZSB0aGUgbmFtZS4KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAndG92aWRlbycKKyAgICB2aWRlb2ltYWdlID0gaW1hZ2VvcC50b3ZpZGVvIChpbWFnZSwgNCwgd2lkdGgsIGhlaWdodCkKKworICAgICMgQ29udmVydCBhbiByZ2IgaW1hZ2UgdG8gYW4gOCBiaXQgcmdiCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ3JnYjJyZ2I4JworICAgIGdyZXlpbWFnZSA9IGltYWdlb3AucmdiMnJnYjgoaW1hZ2UsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENvbnZlcnQgYW4gOCBiaXQgcmdiIGltYWdlIHRvIGEgMjQgYml0IHJnYiBpbWFnZQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdyZ2I4MnJnYicKKyAgICBpbWFnZSA9IGltYWdlb3AucmdiODJyZ2IoZ3JleWltYWdlLCB3aWR0aCwgaGVpZ2h0KQorCisgICAgIyBDb252ZXJ0IGFuIHJnYiBpbWFnZSB0byBhbiA4IGJpdCBncmV5c2NhbGUgaW1hZ2UKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAncmdiMmdyZXknCisgICAgZ3JleWltYWdlID0gaW1hZ2VvcC5yZ2IyZ3JleShpbWFnZSwgd2lkdGgsIGhlaWdodCkKKworICAgICMgQ29udmVydCBhbiA4IGJpdCBncmV5c2NhbGUgaW1hZ2UgdG8gYSAyNCBiaXQgcmdiIGltYWdlCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2dyZXkycmdiJworICAgIGltYWdlID0gaW1hZ2VvcC5ncmV5MnJnYihncmV5aW1hZ2UsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENvbnZlcnQgYSA4LWJpdCBkZWVwIGdyZXlzY2FsZSBpbWFnZSB0byBhIDEtYml0IGRlZXAgaW1hZ2UgYnkKKyAgICAjIHRocmVzaG9sZGluZyBhbGwgdGhlIHBpeGVscy4gVGhlIHJlc3VsdGluZyBpbWFnZSBpcyB0aWdodGx5IHBhY2tlZAorICAgICMgYW5kIGlzIHByb2JhYmx5IG9ubHkgdXNlZnVsIGFzIGFuIGFyZ3VtZW50IHRvIG1vbm8yZ3JleS4KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnZ3JleTJtb25vJworICAgIG1vbm9pbWFnZSA9IGltYWdlb3AuZ3JleTJtb25vIChncmV5aW1hZ2UsIHdpZHRoLCBoZWlnaHQsIDApCisKKyAgICAjIG1vbm9pbWFnZSwgd2lkdGgsIGhlaWdodCA9IGdldGltYWdlKCdtb25vdGVzdC5yZ2InKQorICAgICMgQ29udmVydCBhIDEtYml0IG1vbm9jaHJvbWUgaW1hZ2UgdG8gYW4gOCBiaXQgZ3JleXNjYWxlIG9yIGNvbG9yIGltYWdlLgorICAgICMgQWxsIHBpeGVscyB0aGF0IGFyZSB6ZXJvLXZhbHVlZCBvbiBpbnB1dCBnZXQgdmFsdWUgcDAgb24gb3V0cHV0IGFuZAorICAgICMgYWxsIG9uZS12YWx1ZSBpbnB1dCBwaXhlbHMgZ2V0IHZhbHVlIHAxIG9uIG91dHB1dC4gVG8gY29udmVydCBhCisgICAgIyBtb25vY2hyb21lICBibGFjay1hbmQtd2hpdGUgaW1hZ2UgdG8gZ3JleXNjYWxlIHBhc3MgdGhlIHZhbHVlcyAwIGFuZAorICAgICMgMjU1IHJlc3BlY3RpdmVseS4KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnbW9ubzJncmV5JworICAgIGdyZXlpbWFnZSA9IGltYWdlb3AubW9ubzJncmV5IChtb25vaW1hZ2UsIHdpZHRoLCBoZWlnaHQsIDAsIDI1NSkKKworICAgICMgQ29udmVydCBhbiA4LWJpdCBncmV5c2NhbGUgaW1hZ2UgdG8gYSAxLWJpdCBtb25vY2hyb21lIGltYWdlIHVzaW5nIGEKKyAgICAjIChzaW1wbGUtbWluZGVkKSBkaXRoZXJpbmcgYWxnb3JpdGhtLgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdkaXRoZXIybW9ubycKKyAgICBtb25vaW1hZ2UgPSBpbWFnZW9wLmRpdGhlcjJtb25vIChncmV5aW1hZ2UsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENvbnZlcnQgYW4gOC1iaXQgZ3JleXNjYWxlIGltYWdlIHRvIGEgNC1iaXQgZ3JleXNjYWxlIGltYWdlIHdpdGhvdXQKKyAgICAjIGRpdGhlcmluZy4KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnZ3JleTJncmV5NCcKKyAgICBncmV5NGltYWdlID0gaW1hZ2VvcC5ncmV5MmdyZXk0IChncmV5aW1hZ2UsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENvbnZlcnQgYW4gOC1iaXQgZ3JleXNjYWxlIGltYWdlIHRvIGEgMi1iaXQgZ3JleXNjYWxlIGltYWdlIHdpdGhvdXQKKyAgICAjIGRpdGhlcmluZy4KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnZ3JleTJncmV5MicKKyAgICBncmV5MmltYWdlID0gaW1hZ2VvcC5ncmV5MmdyZXkyIChncmV5aW1hZ2UsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENvbnZlcnQgYW4gOC1iaXQgZ3JleXNjYWxlIGltYWdlIHRvIGEgMi1iaXQgZ3JleXNjYWxlIGltYWdlIHdpdGgKKyAgICAjIGRpdGhlcmluZy4gQXMgZm9yIGRpdGhlcjJtb25vLCB0aGUgZGl0aGVyaW5nIGFsZ29yaXRobSBpcyBjdXJyZW50bHkKKyAgICAjIHZlcnkgc2ltcGxlLgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdkaXRoZXIyZ3JleTInCisgICAgZ3JleTJpbWFnZSA9IGltYWdlb3AuZGl0aGVyMmdyZXkyIChncmV5aW1hZ2UsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENvbnZlcnQgYSA0LWJpdCBncmV5c2NhbGUgaW1hZ2UgdG8gYW4gOC1iaXQgZ3JleXNjYWxlIGltYWdlLgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdncmV5NDJncmV5JworICAgIGdyZXlpbWFnZSA9IGltYWdlb3AuZ3JleTQyZ3JleSAoZ3JleTRpbWFnZSwgd2lkdGgsIGhlaWdodCkKKworICAgICMgQ29udmVydCBhIDItYml0IGdyZXlzY2FsZSBpbWFnZSB0byBhbiA4LWJpdCBncmV5c2NhbGUgaW1hZ2UuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2dyZXkyMmdyZXknCisgICAgaW1hZ2UgPSBpbWFnZW9wLmdyZXkyMmdyZXkgKGdyZXkyaW1hZ2UsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENsZWFudXAKKyAgICB1bmxpbmsoJ3Rlc3QnK29zLmV4dHNlcCsncmdiJykKKworZGVmIGdldGltYWdlKG5hbWUpOgorICAgICIiInJldHVybiBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YKKyAgICAgICBpbWFnZSAoaW4gJ2ltZ2ZpbGUnIGZvcm1hdCkgd2lkdGggYW5kIGhlaWdodAorICAgICIiIgorICAgIGltcG9ydCBpbWdmaWxlCisgICAgdHJ5OgorICAgICAgICBzaXplcyA9IGltZ2ZpbGUuZ2V0c2l6ZXMobmFtZSkKKyAgICBleGNlcHQgaW1nZmlsZS5lcnJvcjoKKyAgICAgICAgbmFtZSA9IGdldF9xdWFsaWZpZWRfcGF0aChuYW1lKQorICAgICAgICBzaXplcyA9IGltZ2ZpbGUuZ2V0c2l6ZXMobmFtZSkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnaW1nZmlsZSBvcGVuaW5nIHRlc3QgaW1hZ2U6ICVzLCBzaXplczogJXMnICUgKG5hbWUsIHN0cihzaXplcykpCisKKyAgICBpbWFnZSA9IGltZ2ZpbGUucmVhZChuYW1lKQorICAgIHJldHVybiAoaW1hZ2UsIHNpemVzWzBdLCBzaXplc1sxXSkKKworZGVmIGdldF9xdWFsaWZpZWRfcGF0aChuYW1lKToKKyAgICAiIiIgcmV0dXJuIGEgbW9yZSBxdWFsaWZpZWQgcGF0aCB0byBuYW1lIiIiCisgICAgaW1wb3J0IHN5cworICAgIGltcG9ydCBvcworICAgIHBhdGggPSBzeXMucGF0aAorICAgIHRyeToKKyAgICAgICAgcGF0aCA9IFtvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pXSArIHBhdGgKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZm9yIGRpciBpbiBwYXRoOgorICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihkaXIsIG5hbWUpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBmdWxsbmFtZQorICAgIHJldHVybiBuYW1lCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjIxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CkBAIC0wLDAgKzEsMjQwIEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisjIElmIHdlIGVuZCB1cCB3aXRoIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIHRlc3RzIHRoYXQgZG9uJ3QgcmVxdWlyZQorIyB0aHJlYWRpbmcsIHRoaXMgdGVzdCBtb2R1bGUgc2hvdWxkIGJlIHNwbGl0LiAgUmlnaHQgbm93IHdlIHNraXAKKyMgdGhlbSBhbGwgaWYgd2UgZG9uJ3QgaGF2ZSB0aHJlYWRpbmcuCit0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCisKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKK2ltcG9ydCBpbWFwbGliCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IFNvY2tldFNlcnZlcgoraW1wb3J0IHRpbWUKKworZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHJlYXBfdGhyZWFkcywgdmVyYm9zZSwgdHJhbnNpZW50X2ludGVybmV0CitpbXBvcnQgdW5pdHRlc3QKKwordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK0NFUlRGSUxFID0gTm9uZQorCisKK2NsYXNzIFRlc3RJbWFwbGliKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3RoYXRfVGltZTJJbnRlcm5hbGRhdGVfcmV0dXJuc19hX3Jlc3VsdChzZWxmKToKKyAgICAgICAgIyBXZSBjYW4gY2hlY2sgb25seSB0aGF0IGl0IHN1Y2Nlc3NmdWxseSBwcm9kdWNlcyBhIHJlc3VsdCwKKyAgICAgICAgIyBub3QgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSByZXN1bHQgaXRzZWxmLCBzaW5jZSB0aGUgcmVzdWx0CisgICAgICAgICMgZGVwZW5kcyBvbiB0aGUgdGltZXpvbmUgdGhlIG1hY2hpbmUgaXMgaW4uCisgICAgICAgIHRpbWV2YWx1ZXMgPSBbMjAwMDAwMDAwMCwgMjAwMDAwMDAwMC4wLCB0aW1lLmxvY2FsdGltZSgyMDAwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAnIjE4LU1heS0yMDMzIDA1OjMzOjIwICswMjAwIiddCisKKyAgICAgICAgZm9yIHQgaW4gdGltZXZhbHVlczoKKyAgICAgICAgICAgIGltYXBsaWIuVGltZTJJbnRlcm5hbGRhdGUodCkKKworCitpZiBzc2w6CisKKyAgICBjbGFzcyBTZWN1cmVUQ1BTZXJ2ZXIoU29ja2V0U2VydmVyLlRDUFNlcnZlcik6CisKKyAgICAgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAgICAgbmV3c29ja2V0LCBmcm9tYWRkciA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCisgICAgICAgICAgICBjb25uc3RyZWFtID0gc3NsLndyYXBfc29ja2V0KG5ld3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUpCisgICAgICAgICAgICByZXR1cm4gY29ubnN0cmVhbSwgZnJvbWFkZHIKKworICAgIElNQVA0X1NTTCA9IGltYXBsaWIuSU1BUDRfU1NMCisKK2Vsc2U6CisKKyAgICBjbGFzcyBTZWN1cmVUQ1BTZXJ2ZXI6CisgICAgICAgIHBhc3MKKworICAgIElNQVA0X1NTTCA9IE5vbmUKKworCitjbGFzcyBTaW1wbGVJTUFQSGFuZGxlcihTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIpOgorCisgICAgdGltZW91dCA9IDEKKworICAgIGRlZiBfc2VuZChzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlNFTlQ6IiwgbWVzc2FnZS5zdHJpcCgpCisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUobWVzc2FnZSkKKworICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgICMgU2VuZCBhIHdlbGNvbWUgbWVzc2FnZS4KKyAgICAgICAgc2VsZi5fc2VuZCgnKiBPSyBJTUFQNHJldjFcclxuJykKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICMgR2F0aGVyIHVwIGlucHV0IHVudGlsIHdlIHJlY2VpdmUgYSBsaW5lIHRlcm1pbmF0b3Igb3Igd2UgdGltZW91dC4KKyAgICAgICAgICAgICMgQWNjdW11bGF0ZSByZWFkKDEpIGJlY2F1c2UgaXQncyBzaW1wbGVyIHRvIGhhbmRsZSB0aGUgZGlmZmVyZW5jZXMKKyAgICAgICAgICAgICMgYmV0d2VlbiBuYWtlZCBzb2NrZXRzIGFuZCBTU0wgc29ja2V0cy4KKyAgICAgICAgICAgIGxpbmUgPSAnJworICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxmLnJmaWxlLnJlYWQoMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFydCA9PSAnJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTmFrZWQgc29ja2V0cyByZXR1cm4gZW1wdHkgc3RyaW5ncy4uCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgbGluZSArPSBwYXJ0CisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgLi5idXQgU1NMU29ja2V0cyByYWlzZSBleGNlcHRpb25zLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCdcclxuJyk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICdHT1Q6JywgbGluZS5zdHJpcCgpCisgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgIHRhZyA9IHNwbGl0bGluZVswXQorICAgICAgICAgICAgY21kID0gc3BsaXRsaW5lWzFdCisgICAgICAgICAgICBhcmdzID0gc3BsaXRsaW5lWzI6XQorCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdjbWRfJXMnICUgKGNtZCwpKToKKyAgICAgICAgICAgICAgICBnZXRhdHRyKHNlbGYsICdjbWRfJXMnICUgKGNtZCwpKSh0YWcsIGFyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbmQoJyVzIEJBRCAlcyB1bmtub3duXHJcbicgJSAodGFnLCBjbWQpKQorCisgICAgZGVmIGNtZF9DQVBBQklMSVRZKHNlbGYsIHRhZywgYXJncyk6CisgICAgICAgIHNlbGYuX3NlbmQoJyogQ0FQQUJJTElUWSBJTUFQNHJldjFcclxuJykKKyAgICAgICAgc2VsZi5fc2VuZCgnJXMgT0sgQ0FQQUJJTElUWSBjb21wbGV0ZWRcclxuJyAlICh0YWcsKSkKKworCitjbGFzcyBCYXNlVGhyZWFkZWROZXR3b3JrZWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgbWFrZV9zZXJ2ZXIoc2VsZiwgYWRkciwgaGRscik6CisKKyAgICAgICAgY2xhc3MgTXlTZXJ2ZXIoc2VsZi5zZXJ2ZXJfY2xhc3MpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgImNyZWF0aW5nIHNlcnZlciIKKyAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoYWRkciwgaGRscikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKSkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgInNlcnZlciBjcmVhdGVkIgorICAgICAgICAgICAgcHJpbnQgIkFERFIgPSIsIGFkZHIKKyAgICAgICAgICAgIHByaW50ICJDTEFTUyA9Iiwgc2VsZi5zZXJ2ZXJfY2xhc3MKKyAgICAgICAgICAgIHByaW50ICJIRExSID0iLCBzZXJ2ZXIuUmVxdWVzdEhhbmRsZXJDbGFzcworCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKAorICAgICAgICAgICAgbmFtZT0nJXMgc2VydmluZycgJSBzZWxmLnNlcnZlcl9jbGFzcywKKyAgICAgICAgICAgIHRhcmdldD1zZXJ2ZXIuc2VydmVfZm9yZXZlciwKKyAgICAgICAgICAgICMgU2hvcnQgcG9sbCBpbnRlcnZhbCB0byBtYWtlIHRoZSB0ZXN0IGZpbmlzaCBxdWlja2x5LgorICAgICAgICAgICAgIyBUaW1lIGJldHdlZW4gcmVxdWVzdHMgaXMgc2hvcnQgZW5vdWdoIHRoYXQgd2Ugd29uJ3Qgd2FrZQorICAgICAgICAgICAgIyB1cCBzcHVyaW91c2x5IHRvbyBtYW55IHRpbWVzLgorICAgICAgICAgICAga3dhcmdzPXsncG9sbF9pbnRlcnZhbCc6MC4wMX0pCisgICAgICAgIHQuZGFlbW9uID0gVHJ1ZSAgIyBJbiBjYXNlIHRoaXMgZnVuY3Rpb24gcmFpc2VzLgorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgInNlcnZlciBydW5uaW5nIgorICAgICAgICByZXR1cm4gc2VydmVyLCB0CisKKyAgICBkZWYgcmVhcF9zZXJ2ZXIoc2VsZiwgc2VydmVyLCB0aHJlYWQpOgorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAid2FpdGluZyBmb3Igc2VydmVyIgorICAgICAgICBzZXJ2ZXIuc2h1dGRvd24oKQorICAgICAgICB0aHJlYWQuam9pbigpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJkb25lIgorCisgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHJlYXBlZF9zZXJ2ZXIoc2VsZiwgaGRscik6CisgICAgICAgIHNlcnZlciwgdGhyZWFkID0gc2VsZi5tYWtlX3NlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgaGRscikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgc2VydmVyCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnJlYXBfc2VydmVyKHNlcnZlciwgdGhyZWFkKQorCisgICAgQHJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKFNpbXBsZUlNQVBIYW5kbGVyKSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICBjbGllbnQgPSBzZWxmLmltYXBfY2xhc3MoKnNlcnZlci5zZXJ2ZXJfYWRkcmVzcykKKyAgICAgICAgICAgIGNsaWVudC5zaHV0ZG93bigpCisKKyAgICBAcmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3RfaXNzdWU1OTQ5KHNlbGYpOgorCisgICAgICAgIGNsYXNzIEVPRkhhbmRsZXIoU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgICAgICAgICAgIyBFT0Ygd2l0aG91dCBzZW5kaW5nIGEgY29tcGxldGUgd2VsY29tZSBtZXNzYWdlLgorICAgICAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoJyogT0snKQorCisgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKEVPRkhhbmRsZXIpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGltYXBsaWIuSU1BUDQuYWJvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYXBfY2xhc3MsICpzZXJ2ZXIuc2VydmVyX2FkZHJlc3MpCisKKworY2xhc3MgVGhyZWFkZWROZXR3b3JrZWRUZXN0cyhCYXNlVGhyZWFkZWROZXR3b3JrZWRUZXN0cyk6CisKKyAgICBzZXJ2ZXJfY2xhc3MgPSBTb2NrZXRTZXJ2ZXIuVENQU2VydmVyCisgICAgaW1hcF9jbGFzcyA9IGltYXBsaWIuSU1BUDQKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wsICJTU0wgbm90IGF2YWlsYWJsZSIpCitjbGFzcyBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzU1NMKEJhc2VUaHJlYWRlZE5ldHdvcmtlZFRlc3RzKToKKworICAgIHNlcnZlcl9jbGFzcyA9IFNlY3VyZVRDUFNlcnZlcgorICAgIGltYXBfY2xhc3MgPSBJTUFQNF9TU0wKKworCitjbGFzcyBSZW1vdGVJTUFQVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaG9zdCA9ICdjeXJ1cy5hbmRyZXcuY211LmVkdScKKyAgICBwb3J0ID0gMTQzCisgICAgdXNlcm5hbWUgPSAnYW5vbnltb3VzJworICAgIHBhc3N3b3JkID0gJ3Bhc3MnCisgICAgaW1hcF9jbGFzcyA9IGltYXBsaWIuSU1BUDQKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgd2l0aCB0cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5ob3N0KToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5pbWFwX2NsYXNzKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLmxvZ291dCgpCisKKyAgICBkZWYgdGVzdF9sb2dpbmNhcGEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnTE9HSU5ESVNBQkxFRCcgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQorCisgICAgZGVmIHRlc3RfYW5vbmxvZ2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0FVVEg9QU5PTllNT1VTJyBpbiBzZWxmLnNlcnZlci5jYXBhYmlsaXRpZXMpCisgICAgICAgIHJzID0gc2VsZi5zZXJ2ZXIubG9naW4oc2VsZi51c2VybmFtZSwgc2VsZi5wYXNzd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyc1swXSwgJ09LJykKKworICAgIGRlZiB0ZXN0X2xvZ291dChzZWxmKToKKyAgICAgICAgcnMgPSBzZWxmLnNlcnZlci5sb2dvdXQoKQorICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyc1swXSwgJ0JZRScpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLCAiU1NMIG5vdCBhdmFpbGFibGUiKQorY2xhc3MgUmVtb3RlSU1BUF9TU0xUZXN0KFJlbW90ZUlNQVBUZXN0KToKKyAgICBwb3J0ID0gOTkzCisgICAgaW1hcF9jbGFzcyA9IElNQVA0X1NTTAorCisgICAgZGVmIHRlc3RfbG9naW5jYXBhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdMT0dJTkRJU0FCTEVEJyBpbiBzZWxmLnNlcnZlci5jYXBhYmlsaXRpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnQVVUSD1QTEFJTicgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0cyA9IFtUZXN0SW1hcGxpYl0KKworICAgIGlmIHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpOgorICAgICAgICBpZiBzc2w6CisgICAgICAgICAgICBnbG9iYWwgQ0VSVEZJTEUKKyAgICAgICAgICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleWNlcnQucGVtIikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhDRVJURklMRSk6CisgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKCJDYW4ndCByZWFkIGNlcnRpZmljYXRlIGZpbGVzISIpCisgICAgICAgIHRlc3RzLmV4dGVuZChbCisgICAgICAgICAgICBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzLCBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzU1NMLAorICAgICAgICAgICAgUmVtb3RlSU1BUFRlc3QsIFJlbW90ZUlNQVBfU1NMVGVzdCwKKyAgICAgICAgXSkKKworICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnbmV0d29yayddCisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ltZ2ZpbGUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbWdmaWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM5ZTg5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbWdmaWxlLnB5CkBAIC0wLDAgKzEsMTE5IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIlNpbXBsZSB0ZXN0IHNjcmlwdCBmb3IgaW1nZmlsZS5jCisgICBSb2dlciBFLiBNYXNzZQorIiIiCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHVubGluaywgZmluZGZpbGUsIGltcG9ydF9tb2R1bGUKKworaW1nZmlsZSA9IGltcG9ydF9tb2R1bGUoJ2ltZ2ZpbGUnLCBkZXByZWNhdGVkPVRydWUpCitpbXBvcnQgdXUKKworCitkZWYgdGVzdGltYWdlKG5hbWUpOgorICAgICIiIlJ1biB0aHJvdWdoIHRoZSBpbWdmaWxlJ3MgYmF0dGVyeSBvZiBwb3NzaWJsZSBtZXRob2RzCisgICAgICAgb24gdGhlIGltYWdlIHBhc3NlZCBpbiBuYW1lLgorICAgICIiIgorCisgICAgaW1wb3J0IHN5cworICAgIGltcG9ydCBvcworCisgICAgb3V0cHV0ZmlsZSA9ICcvdG1wL2RlbGV0ZW1lJworCisgICAgIyB0cnkgb3BlbmluZyB0aGUgbmFtZSBkaXJlY3RseQorICAgIHRyeToKKyAgICAgICAgIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0dXBsZSAoeCwgeSwgeikgd2hlcmUgeCBhbmQgeSBhcmUgdGhlIHNpemUKKyAgICAgICAgIyBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzIGFuZCB6IGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsLiBPbmx5CisgICAgICAgICMgMyBieXRlIFJHQiBwaXhlbHMgYW5kIDEgYnl0ZSBncmV5c2NhbGUgcGl4ZWxzIGFyZSBzdXBwb3J0ZWQuCisgICAgICAgIHNpemVzID0gaW1nZmlsZS5nZXRzaXplcyhuYW1lKQorICAgIGV4Y2VwdCBpbWdmaWxlLmVycm9yOgorICAgICAgICAjIGdldCBhIG1vcmUgcXVhbGlmaWVkIHBhdGggY29tcG9uZW50IG9mIHRoZSBzY3JpcHQuLi4KKyAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgIG91cm5hbWUgPSBzeXMuYXJndlswXQorICAgICAgICBlbHNlOiAjIC4uLm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIG1vZHVsZQorICAgICAgICAgICAgb3VybmFtZSA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXS5fX2ZpbGVfXworCisgICAgICAgIHBhcnRzID0gb3VybmFtZS5zcGxpdChvcy5zZXApCisgICAgICAgIHBhcnRzWy0xXSA9IG5hbWUKKyAgICAgICAgbmFtZSA9IG9zLnNlcC5qb2luKHBhcnRzKQorICAgICAgICBzaXplcyA9IGltZ2ZpbGUuZ2V0c2l6ZXMobmFtZSkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnT3BlbmluZyB0ZXN0IGltYWdlOiAlcywgc2l6ZXM6ICVzJyAlIChuYW1lLCBzdHIoc2l6ZXMpKQorICAgICMgVGhpcyBmdW5jdGlvbiByZWFkcyBhbmQgZGVjb2RlcyB0aGUgaW1hZ2Ugb24gdGhlIHNwZWNpZmllZCBmaWxlLAorICAgICMgYW5kIHJldHVybnMgaXQgYXMgYSBweXRob24gc3RyaW5nLiBUaGUgc3RyaW5nIGhhcyBlaXRoZXIgMSBieXRlCisgICAgIyBncmV5c2NhbGUgcGl4ZWxzIG9yIDQgYnl0ZSBSR0JBIHBpeGVscy4gVGhlIGJvdHRvbSBsZWZ0IHBpeGVsCisgICAgIyBpcyB0aGUgZmlyc3QgaW4gdGhlIHN0cmluZy4gVGhpcyBmb3JtYXQgaXMgc3VpdGFibGUgdG8gcGFzcworICAgICMgdG8gZ2wubHJlY3R3cml0ZSwgZm9yIGluc3RhbmNlLgorICAgIGltYWdlID0gaW1nZmlsZS5yZWFkKG5hbWUpCisKKyAgICAjIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBSR0Igb3IgZ3JleXNjYWxlIGRhdGEgaW4gZGF0YSB0bworICAgICMgaW1hZ2UgZmlsZSBmaWxlLiB4IGFuZCB5IGdpdmUgdGhlIHNpemUgb2YgdGhlIGltYWdlLCB6IGlzCisgICAgIyAxIGZvciAxIGJ5dGUgZ3JleXNjYWxlIGltYWdlcyBvciAzIGZvciBSR0IgaW1hZ2VzICh3aGljaAorICAgICMgYXJlIHN0b3JlZCBhcyA0IGJ5dGUgdmFsdWVzIG9mIHdoaWNoIG9ubHkgdGhlIGxvd2VyIHRocmVlCisgICAgIyBieXRlcyBhcmUgdXNlZCkuIFRoZXNlIGFyZSB0aGUgZm9ybWF0cyByZXR1cm5lZCBieSBnbC5scmVjdHJlYWQuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ1dyaXRpbmcgb3V0cHV0IGZpbGUnCisgICAgaW1nZmlsZS53cml0ZSAob3V0cHV0ZmlsZSwgaW1hZ2UsIHNpemVzWzBdLCBzaXplc1sxXSwgc2l6ZXNbMl0pCisKKworICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdPcGVuaW5nIHNjYWxlZCB0ZXN0IGltYWdlOiAlcywgc2l6ZXM6ICVzJyAlIChuYW1lLCBzdHIoc2l6ZXMpKQorICAgICMgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gcmVhZCBidXQgaXQgcmV0dXJucyBhbiBpbWFnZSB0aGF0CisgICAgIyBpcyBzY2FsZWQgdG8gdGhlIGdpdmVuIHggYW5kIHkgc2l6ZXMuIElmIHRoZSBmaWx0ZXIgYW5kIGJsdXIKKyAgICAjIHBhcmFtZXRlcnMgYXJlIG9taXR0ZWQgc2NhbGluZyBpcyBkb25lIGJ5IHNpbXBseSBkcm9wcGluZworICAgICMgb3IgZHVwbGljYXRpbmcgcGl4ZWxzLCBzbyB0aGUgcmVzdWx0IHdpbGwgYmUgbGVzcyB0aGFuIHBlcmZlY3QsCisgICAgIyBlc3BlY2lhbGx5IGZvciBjb21wdXRlci1nZW5lcmF0ZWQgaW1hZ2VzLiAgQWx0ZXJuYXRpdmVseSwKKyAgICAjIHlvdSBjYW4gc3BlY2lmeSBhIGZpbHRlciB0byB1c2UgdG8gc21vb3RoZW4gdGhlIGltYWdlIGFmdGVyCisgICAgIyBzY2FsaW5nLiBUaGUgZmlsdGVyIGZvcm1zIHN1cHBvcnRlZCBhcmUgJ2ltcHVsc2UnLCAnYm94JywKKyAgICAjICd0cmlhbmdsZScsICdxdWFkcmF0aWMnIGFuZCAnZ2F1c3NpYW4nLiBJZiBhIGZpbHRlciBpcworICAgICMgc3BlY2lmaWVkIGJsdXIgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlCisgICAgIyBibHVycmluZXNzIG9mIHRoZSBmaWx0ZXIuIEl0IGRlZmF1bHRzIHRvIDEuMC4gIHJlYWRzY2FsZWQKKyAgICAjIG1ha2VzIG5vIGF0dGVtcHQgdG8ga2VlcCB0aGUgYXNwZWN0IHJhdGlvIGNvcnJlY3QsIHNvIHRoYXQKKyAgICAjIGlzIHRoZSB1c2VycycgcmVzcG9uc2liaWxpdHkuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ0ZpbHRlcmluZyB3aXRoICJpbXB1bHNlIicKKyAgICBzaW1hZ2UgPSBpbWdmaWxlLnJlYWRzY2FsZWQgKG5hbWUsIHNpemVzWzBdLzIsIHNpemVzWzFdLzIsICdpbXB1bHNlJywgMi4wKQorCisgICAgIyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBnbG9iYWwgZmxhZyB3aGljaCBkZWZpbmVzIHdoZXRoZXIgdGhlCisgICAgIyBzY2FuIGxpbmVzIG9mIHRoZSBpbWFnZSBhcmUgcmVhZCBvciB3cml0dGVuIGZyb20gYm90dG9tIHRvCisgICAgIyB0b3AgKGZsYWcgaXMgemVybywgY29tcGF0aWJsZSB3aXRoIFNHSSBHTCkgb3IgZnJvbSB0b3AgdG8KKyAgICAjIGJvdHRvbShmbGFnIGlzIG9uZSwgY29tcGF0aWJsZSB3aXRoIFgpLiBUaGUgZGVmYXVsdCBpcyB6ZXJvLgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdTd2l0Y2hpbmcgdG8gWCBjb21wYXRpYmlsaXR5JworICAgIGltZ2ZpbGUudHRvYiAoMSkKKworICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdGaWx0ZXJpbmcgd2l0aCAidHJpYW5nbGUiJworICAgIHNpbWFnZSA9IGltZ2ZpbGUucmVhZHNjYWxlZCAobmFtZSwgc2l6ZXNbMF0vMiwgc2l6ZXNbMV0vMiwgJ3RyaWFuZ2xlJywgMy4wKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdTd2l0Y2hpbmcgYmFjayB0byBTR0kgY29tcGF0aWJpbGl0eScKKyAgICBpbWdmaWxlLnR0b2IgKDApCisKKyAgICBpZiB2ZXJib3NlOiBwcmludCAnRmlsdGVyaW5nIHdpdGggInF1YWRyYXRpYyInCisgICAgc2ltYWdlID0gaW1nZmlsZS5yZWFkc2NhbGVkIChuYW1lLCBzaXplc1swXS8yLCBzaXplc1sxXS8yLCAncXVhZHJhdGljJykKKyAgICBpZiB2ZXJib3NlOiBwcmludCAnRmlsdGVyaW5nIHdpdGggImdhdXNzaWFuIicKKyAgICBzaW1hZ2UgPSBpbWdmaWxlLnJlYWRzY2FsZWQgKG5hbWUsIHNpemVzWzBdLzIsIHNpemVzWzFdLzIsICdnYXVzc2lhbicsIDEuMCkKKworICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdXcml0aW5nIG91dHB1dCBmaWxlJworICAgIGltZ2ZpbGUud3JpdGUgKG91dHB1dGZpbGUsIHNpbWFnZSwgc2l6ZXNbMF0vMiwgc2l6ZXNbMV0vMiwgc2l6ZXNbMl0pCisKKyAgICBvcy51bmxpbmsob3V0cHV0ZmlsZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisKKyAgICB1dS5kZWNvZGUoZmluZGZpbGUoJ3Rlc3RyZ2IudXVlJyksICd0ZXN0LnJnYicpCisgICAgdXUuZGVjb2RlKGZpbmRmaWxlKCdncmV5cmdiLnV1ZScpLCAnZ3JleXRlc3QucmdiJykKKworICAgICMgVGVzdCBhIDMgYnl0ZSBjb2xvciBpbWFnZQorICAgIHRlc3RpbWFnZSgndGVzdC5yZ2InKQorCisgICAgIyBUZXN0IGEgMSBieXRlIGdyZXlzY2FsZSBpbWFnZQorICAgIHRlc3RpbWFnZSgnZ3JleXRlc3QucmdiJykKKworICAgIHVubGluaygndGVzdC5yZ2InKQorICAgIHVubGluaygnZ3JleXRlc3QucmdiJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW1wLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW1wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZTQ0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbXAucHkKQEAgLTAsMCArMSw4MSBAQAoraW1wb3J0IGltcAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIExvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJWZXJ5IGJhc2ljIHRlc3Qgb2YgaW1wb3J0IGxvY2sgZnVuY3Rpb25zLiIiIgorCisgICAgZGVmIHZlcmlmeV9sb2NrX3N0YXRlKHNlbGYsIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXAubG9ja19oZWxkKCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgaW1wLmxvY2tfaGVsZCgpIHRvIGJlICVyIiAlIGV4cGVjdGVkKQorICAgIGRlZiB0ZXN0TG9jayhzZWxmKToKKyAgICAgICAgTE9PUFMgPSA1MAorCisgICAgICAgICMgVGhlIGltcG9ydCBsb2NrIG1heSBhbHJlYWR5IGJlIGhlbGQsIGUuZy4gaWYgdGhlIHRlc3Qgc3VpdGUgaXMgcnVuCisgICAgICAgICMgdmlhICJpbXBvcnQgdGVzdC5hdXRvdGVzdCIuCisgICAgICAgIGxvY2tfaGVsZF9hdF9zdGFydCA9IGltcC5sb2NrX2hlbGQoKQorICAgICAgICBzZWxmLnZlcmlmeV9sb2NrX3N0YXRlKGxvY2tfaGVsZF9hdF9zdGFydCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShMT09QUyk6CisgICAgICAgICAgICBpbXAuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2xvY2tfc3RhdGUoVHJ1ZSkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShMT09QUyk6CisgICAgICAgICAgICBpbXAucmVsZWFzZV9sb2NrKCkKKworICAgICAgICAjIFRoZSBvcmlnaW5hbCBzdGF0ZSBzaG91bGQgYmUgcmVzdG9yZWQgbm93LgorICAgICAgICBzZWxmLnZlcmlmeV9sb2NrX3N0YXRlKGxvY2tfaGVsZF9hdF9zdGFydCkKKworICAgICAgICBpZiBub3QgbG9ja19oZWxkX2F0X3N0YXJ0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcC5yZWxlYXNlX2xvY2soKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVsZWFzZV9sb2NrKCkgd2l0aG91dCBsb2NrIHNob3VsZCByYWlzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1bnRpbWVFcnJvciIpCisKK2NsYXNzIFJlbG9hZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlZlcnkgYmFzaWMgdGVzdHMgdG8gbWFrZSBzdXJlIHRoYXQgaW1wLnJlbG9hZCgpIG9wZXJhdGVzIGp1c3QgbGlrZQorICAgIHJlbG9hZCgpLiIiIgorCisgICAgZGVmIHRlc3Rfc291cmNlKHNlbGYpOgorICAgICAgICAjIFhYWCAobmNvZ2hsYW4pOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQKKyAgICAgICAgIyBoZXJlLCBidXQgdGhhdCBicmVha3MgYmVjYXVzZSB0aGUgb3MgbW9kdWxlIHJlZ2lzdGVycyBzb21lCisgICAgICAgICMgaGFuZGxlcnMgaW4gY29weV9yZWcgb24gaW1wb3J0LiBTaW5jZSBDbGVhbkltcG9ydCBkb2Vzbid0CisgICAgICAgICMgcmV2ZXJ0IHRoYXQgcmVnaXN0cmF0aW9uLCB0aGUgbW9kdWxlIGlzIGxlZnQgaW4gYSBicm9rZW4KKyAgICAgICAgIyBzdGF0ZSBhZnRlciByZXZlcnNpb24uIFJlaW5pdGlhbGlzaW5nIHRoZSBtb2R1bGUgY29udGVudHMKKyAgICAgICAgIyBhbmQganVzdCByZXZlcnRpbmcgb3MuZW52aXJvbiB0byBpdHMgcHJldmlvdXMgc3RhdGUgaXMgYW4gT0sKKyAgICAgICAgIyB3b3JrYXJvdW5kCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wLnJlbG9hZChvcykKKworICAgIGRlZiB0ZXN0X2V4dGVuc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQoJ3RpbWUnKToKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICAgICBpbXAucmVsb2FkKHRpbWUpCisKKyAgICBkZWYgdGVzdF9idWlsdGluKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5DbGVhbkltcG9ydCgnbWFyc2hhbCcpOgorICAgICAgICAgICAgaW1wb3J0IG1hcnNoYWwKKyAgICAgICAgICAgIGltcC5yZWxvYWQobWFyc2hhbCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbCisgICAgICAgIFJlbG9hZFRlc3RzLAorICAgIF0KKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB0aHJlYWQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cy5hcHBlbmQoTG9ja1Rlc3RzKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3ZGExMAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQpAQCAtMCwwICsxLDY1MCBAQAoraW1wb3J0IGVycm5vCitpbXBvcnQgaW1wCitpbXBvcnQgbWFyc2hhbAoraW1wb3J0IG9zCitpbXBvcnQgcHlfY29tcGlsZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0YXQKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRleHR3cmFwCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0ICh1bmxpbmssIFRFU1RGTiwgdW5sb2FkLCBydW5fdW5pdHRlc3QsIHJtdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19qeXRob24sIGNoZWNrX3dhcm5pbmdzLCBFbnZpcm9ubWVudFZhckd1YXJkKQorZnJvbSB0ZXN0IGltcG9ydCBzeW1saW5rX3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlcgorCitkZWYgX2ZpbGVzKG5hbWUpOgorICAgIHJldHVybiAobmFtZSArIG9zLmV4dHNlcCArICJweSIsCisgICAgICAgICAgICBuYW1lICsgb3MuZXh0c2VwICsgInB5YyIsCisgICAgICAgICAgICBuYW1lICsgb3MuZXh0c2VwICsgInB5byIsCisgICAgICAgICAgICBuYW1lICsgb3MuZXh0c2VwICsgInB5dyIsCisgICAgICAgICAgICBuYW1lICsgIiRweS5jbGFzcyIpCisKK2RlZiBjaG1vZF9maWxlcyhuYW1lKToKKyAgICBmb3IgZiBpbiBfZmlsZXMobmFtZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNobW9kKGYsIDA2MDApCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIHJlbW92ZV9maWxlcyhuYW1lKToKKyAgICBmb3IgZiBpbiBfZmlsZXMobmFtZSk6CisgICAgICAgIHVubGluayhmKQorCisKK2NsYXNzIEltcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICBzZXRVcCA9IHRlYXJEb3duCisKKyAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2aXR5KHNlbGYpOgorICAgICAgICAjIEJyaWVmIGRpZ3Jlc3Npb24gdG8gdGVzdCB0aGF0IGltcG9ydCBpcyBjYXNlLXNlbnNpdGl2ZTogIGlmIHdlIGdvdAorICAgICAgICAjIHRoaXMgZmFyLCB3ZSBrbm93IGZvciBzdXJlIHRoYXQgInJhbmRvbSIgZXhpc3RzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgUkFuRG9NCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IG9mIFJBbkRvTSBzaG91bGQgaGF2ZSBmYWlsZWQgKGNhc2UgbWlzbWF0Y2gpIikKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9jb25zdChzZWxmKToKKyAgICAgICAgIyBBbm90aGVyIGJyaWVmIGRpZ3Jlc3Npb24gdG8gdGVzdCB0aGUgYWNjdXJhY3kgb2YgbWFuaWZlc3QgZmxvYXQKKyAgICAgICAgIyBjb25zdGFudHMuCisgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgZG91YmxlX2NvbnN0ICAjIGRvbid0IGJsaW5rIC0tIHRoYXQgKndhcyogdGhlIHRlc3QKKworICAgIGRlZiB0ZXN0X2ltcG9ydChzZWxmKToKKyAgICAgICAgZGVmIHRlc3Rfd2l0aF9leHRlbnNpb24oZXh0KToKKyAgICAgICAgICAgICMgVGhlIGV4dGVuc2lvbiBpcyBub3JtYWxseSAiLnB5IiwgcGVyaGFwcyAiLnB5dyIuCisgICAgICAgICAgICBzb3VyY2UgPSBURVNURk4gKyBleHQKKyAgICAgICAgICAgIHB5byA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweW8iCisgICAgICAgICAgICBpZiBpc19qeXRob246CisgICAgICAgICAgICAgICAgcHljID0gVEVTVEZOICsgIiRweS5jbGFzcyIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHljID0gVEVTVEZOICsgb3MuZXh0c2VwICsgInB5YyIKKworICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGYsICgiIyBUaGlzIHRlc3RzIFB5dGhvbidzIGFiaWxpdHkgdG8gaW1wb3J0IGEiLCBleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlLiIpCisgICAgICAgICAgICAgICAgYSA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkKKyAgICAgICAgICAgICAgICBiID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwKQorICAgICAgICAgICAgICAgIHByaW50ID4+IGYsICJhID0iLCBhCisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZiwgImIgPSIsIGIKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZCA9IF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgZnJvbSAlcyBmYWlsZWQ6ICVzIiAlIChleHQsIGVycikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmEsIGEsCisgICAgICAgICAgICAgICAgICAgICJtb2R1bGUgbG9hZGVkICglcykgYnV0IGNvbnRlbnRzIGludmFsaWQiICUgbW9kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmIsIGIsCisgICAgICAgICAgICAgICAgICAgICJtb2R1bGUgbG9hZGVkICglcykgYnV0IGNvbnRlbnRzIGludmFsaWQiICUgbW9kKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB1bmxpbmsoc291cmNlKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgorICAgICAgICAgICAgICAgICAgICBpbXAucmVsb2FkKG1vZCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IGZyb20gLnB5Yy8ucHlvIGZhaWxlZDogJXMiICUgZXJyKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB1bmxpbmsocHljKQorICAgICAgICAgICAgICAgIHVubGluayhweW8pCisgICAgICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKworICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X3dpdGhfZXh0ZW5zaW9uKG9zLmV4dHNlcCArICJweSIpCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgICAgICAgICAgICAgZm9yIGV4dCBpbiBbIi5QWSIsICIuUHkiLCAiLnBZIiwgIi5weXciLCAiLlBZVyIsICIucFl3Il06CisgICAgICAgICAgICAgICAgICAgIHRlc3Rfd2l0aF9leHRlbnNpb24oZXh0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsCisgICAgICAgICJ0ZXN0IG1lYW5pbmdmdWwgb25seSBvbiBwb3NpeCBzeXN0ZW1zIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLAorICAgICAgICAidGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlbiB3cml0aW5nIGJ5dGVjb2RlIikKKyAgICBkZWYgdGVzdF9leGVjdXRlX2JpdF9ub3RfY29waWVkKHNlbGYpOgorICAgICAgICAjIElzc3VlIDYwNzA6IHVuZGVyIHBvc2l4IC5weWMgZmlsZXMgZ290IHRoZWlyIGV4ZWN1dGUgYml0IHNldCBpZgorICAgICAgICAjIHRoZSAucHkgZmlsZSBoYWQgdGhlIGV4ZWN1dGUgYml0IHNldCwgYnV0IHRoZXkgYXJlbid0IGV4ZWN1dGFibGUuCisgICAgICAgIG9sZG1hc2sgPSBvcy51bWFzaygwMjIpCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZuYW1lID0gVEVTVEZOICsgb3MuZXh0c2VwICsgInB5IgorICAgICAgICAgICAgZiA9IG9wZW4oZm5hbWUsICd3JykuY2xvc2UoKQorICAgICAgICAgICAgb3MuY2htb2QoZm5hbWUsIChzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVhVU1IgfCBzdGF0LlNfSVhHUlAgfCBzdGF0LlNfSVhPVEgpKQorICAgICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCisgICAgICAgICAgICBmbiA9IGZuYW1lICsgJ2MnCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOgorICAgICAgICAgICAgICAgIGZuID0gZm5hbWUgKyAnbycKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIl9faW1wb3J0X18gZGlkIG5vdCByZXN1bHQgaW4gY3JlYXRpb24gb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVpdGhlciBhIC5weWMgb3IgLnB5byBmaWxlIikKKyAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUocy5zdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSVVNSIHwgc3RhdC5TX0lSR1JQIHwgc3RhdC5TX0lST1RIKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW1hc2sob2xkbWFzaykKKyAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCisgICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLAorICAgICAgICAidGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlbiB3cml0aW5nIGJ5dGVjb2RlIikKKyAgICBkZWYgdGVzdF9yZXdyaXRlX3B5Y193aXRoX3JlYWRfb25seV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgSXNzdWUgNjA3NDogYSBsb25nIHRpbWUgYWdvIG9uIHBvc2l4LCBhbmQgbW9yZSByZWNlbnRseSBvbiBXaW5kb3dzLAorICAgICAgICAjIGEgcmVhZCBvbmx5IHNvdXJjZSBmaWxlIHJlc3VsdGVkIGluIGEgcmVhZCBvbmx5IHB5YyBmaWxlLCB3aGljaAorICAgICAgICAjIGxlZCB0byBwcm9ibGVtcyB3aXRoIHVwZGF0aW5nIGl0IGxhdGVyCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisgICAgICAgIGZuYW1lID0gVEVTVEZOICsgb3MuZXh0c2VwICsgInB5IgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdyaXRlIGEgUHl0aG9uIGZpbGUsIG1ha2UgaXQgcmVhZC1vbmx5IGFuZCBpbXBvcnQgaXQKKyAgICAgICAgICAgIHdpdGggb3BlbihmbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoInggPSAnb3JpZ2luYWwnXG4iKQorICAgICAgICAgICAgIyBUd2VhayB0aGUgbXRpbWUgb2YgdGhlIHNvdXJjZSB0byBlbnN1cmUgcHljIGdldHMgdXBkYXRlZCBsYXRlcgorICAgICAgICAgICAgcyA9IG9zLnN0YXQoZm5hbWUpCisgICAgICAgICAgICBvcy51dGltZShmbmFtZSwgKHMuc3RfYXRpbWUsIHMuc3RfbXRpbWUtMTAwMDAwMDAwKSkKKyAgICAgICAgICAgIG9zLmNobW9kKGZuYW1lLCAwNDAwKQorICAgICAgICAgICAgbTEgPSBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTEueCwgJ29yaWdpbmFsJykKKyAgICAgICAgICAgICMgQ2hhbmdlIHRoZSBmaWxlIGFuZCB0aGVuIHJlaW1wb3J0IGl0CisgICAgICAgICAgICBvcy5jaG1vZChmbmFtZSwgMDYwMCkKKyAgICAgICAgICAgIHdpdGggb3BlbihmbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoInggPSAncmV3cml0dGVuJ1xuIikKKyAgICAgICAgICAgIHVubG9hZChURVNURk4pCisgICAgICAgICAgICBtMiA9IF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMi54LCAncmV3cml0dGVuJykKKyAgICAgICAgICAgICMgTm93IGRlbGV0ZSB0aGUgc291cmNlIGZpbGUgYW5kIGNoZWNrIHRoZSBweWMgd2FzIHJld3JpdHRlbgorICAgICAgICAgICAgdW5saW5rKGZuYW1lKQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgICAgIG0zID0gX19pbXBvcnRfXyhURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0zLngsICdyZXdyaXR0ZW4nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY2htb2RfZmlsZXMoVEVTVEZOKQorICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzKFRFU1RGTikKKyAgICAgICAgICAgIHVubG9hZChURVNURk4pCisgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKworICAgIGRlZiB0ZXN0X2ltcF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIGltcCBtb2R1bGUgY2FuIGNvcnJlY3RseSBsb2FkIGFuZCBmaW5kIC5weSBmaWxlcworCisgICAgICAgICMgWFhYIChuY29naGxhbik6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHRlc3Rfc3VwcG9ydC5DbGVhbkltcG9ydAorICAgICAgICAjIGhlcmUsIGJ1dCB0aGF0IGJyZWFrcyBiZWNhdXNlIHRoZSBvcyBtb2R1bGUgcmVnaXN0ZXJzIHNvbWUKKyAgICAgICAgIyBoYW5kbGVycyBpbiBjb3B5X3JlZyBvbiBpbXBvcnQuIFNpbmNlIENsZWFuSW1wb3J0IGRvZXNuJ3QKKyAgICAgICAgIyByZXZlcnQgdGhhdCByZWdpc3RyYXRpb24sIHRoZSBtb2R1bGUgaXMgbGVmdCBpbiBhIGJyb2tlbgorICAgICAgICAjIHN0YXRlIGFmdGVyIHJldmVyc2lvbi4gUmVpbml0aWFsaXNpbmcgdGhlIG1vZHVsZSBjb250ZW50cworICAgICAgICAjIGFuZCBqdXN0IHJldmVydGluZyBvcy5lbnZpcm9uIHRvIGl0cyBwcmV2aW91cyBzdGF0ZSBpcyBhbiBPSworICAgICAgICAjIHdvcmthcm91bmQKKyAgICAgICAgb3JpZ19wYXRoID0gb3MucGF0aAorICAgICAgICBvcmlnX2dldGVudiA9IG9zLmdldGVudgorICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKToKKyAgICAgICAgICAgIHggPSBpbXAuZmluZF9tb2R1bGUoIm9zIikKKyAgICAgICAgICAgIG5ld19vcyA9IGltcC5sb2FkX21vZHVsZSgib3MiLCAqeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3MsIG5ld19vcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3JpZ19wYXRoLCBuZXdfb3MucGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob3JpZ19nZXRlbnYsIG5ld19vcy5nZXRlbnYpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfd2l0aF9sYXJnZV9zdGFjayhzZWxmLCBtb2R1bGU9J2xvbmdsaXN0Jyk6CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTYxODU4LgorICAgICAgICBmaWxlbmFtZSA9IG1vZHVsZSArIG9zLmV4dHNlcCArICdweScKKworICAgICAgICAjIENyZWF0ZSBhIGZpbGUgd2l0aCBhIGxpc3Qgb2YgNjUwMDAgZWxlbWVudHMuCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3crJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ2QgPSBbXG4nKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNjUwMDApOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyIiLFxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ10nKQorCisgICAgICAgICMgQ29tcGlsZSAmIHJlbW92ZSAucHkgZmlsZSwgd2Ugb25seSBuZWVkIC5weWMgKG9yIC5weW8pLgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlbmFtZSkKKyAgICAgICAgdW5saW5rKGZpbGVuYW1lKQorCisgICAgICAgICMgTmVlZCB0byBiZSBhYmxlIHRvIGxvYWQgZnJvbSBjdXJyZW50IGRpci4KKyAgICAgICAgc3lzLnBhdGguYXBwZW5kKCcnKQorCisgICAgICAgICMgVGhpcyB1c2VkIHRvIGNyYXNoLgorICAgICAgICBleGVjICdpbXBvcnQgJyArIG1vZHVsZQorCisgICAgICAgICMgQ2xlYW51cC4KKyAgICAgICAgZGVsIHN5cy5wYXRoWy0xXQorICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnYycpCisgICAgICAgIHVubGluayhmaWxlbmFtZSArICdvJykKKworICAgIGRlZiB0ZXN0X2ZhaWxpbmdfaW1wb3J0X3N0aWNrcyhzZWxmKToKKyAgICAgICAgc291cmNlID0gVEVTVEZOICsgb3MuZXh0c2VwICsgInB5IgorICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CisgICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEgLy8gMCIKKworICAgICAgICAjIE5ldyBpbiAyLjQsIHdlIHNob3VsZG4ndCBiZSBhYmxlIHRvIGltcG9ydCB0aGF0IG5vIG1hdHRlciBob3cgb2Z0ZW4KKyAgICAgICAgIyB3ZSB0cnkuCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIFsxLCAyLCAzXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgX19pbXBvcnRfXywgVEVTVEZOKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oVEVTVEZOLCBzeXMubW9kdWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYW1hZ2VkIG1vZHVsZSBpbiBzeXMubW9kdWxlcyBvbiAlaSB0cnkiICUgaSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2ZhaWxpbmdfcmVsb2FkKHNlbGYpOgorICAgICAgICAjIEEgZmFpbGluZyByZWxvYWQgc2hvdWxkIGxlYXZlIHRoZSBtb2R1bGUgb2JqZWN0IGluIHN5cy5tb2R1bGVzLgorICAgICAgICBzb3VyY2UgPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHkiCisgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIHByaW50ID4+IGYsICJhID0gMSIKKyAgICAgICAgICAgIHByaW50ID4+IGYsICJiID0gMiIKKworICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oVEVTVEZOLCBzeXMubW9kdWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmEsIDEsICJtb2R1bGUgaGFzIHdyb25nIGF0dHJpYnV0ZSB2YWx1ZXMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYiwgMiwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCisKKyAgICAgICAgICAgICMgT24gV2luWFAsIGp1c3QgcmVwbGFjaW5nIHRoZSAucHkgZmlsZSB3YXNuJ3QgZW5vdWdoIHRvCisgICAgICAgICAgICAjIGNvbnZpbmNlIHJlbG9hZCgpIHRvIHJlcGFyc2UgaXQuICBNYXliZSB0aGUgdGltZXN0YW1wIGRpZG4ndAorICAgICAgICAgICAgIyBtb3ZlIGVub3VnaC4gIFdlIGZvcmNlIGl0IHRvIGdldCByZXBhcnNlZCBieSByZW1vdmluZyB0aGUKKyAgICAgICAgICAgICMgY29tcGlsZWQgZmlsZSB0b28uCisgICAgICAgICAgICByZW1vdmVfZmlsZXMoVEVTVEZOKQorCisgICAgICAgICAgICAjIE5vdyBkYW1hZ2UgdGhlIG1vZHVsZS4KKyAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEwIgorICAgICAgICAgICAgICAgIHByaW50ID4+IGYsICJiID0gMjAvLzAiCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBpbXAucmVsb2FkLCBtb2QpCisKKyAgICAgICAgICAgICMgQnV0IHdlIHN0aWxsIGV4cGVjdCB0aGUgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzLgorICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kLCBOb25lLCAiZXhwZWN0ZWQgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzIikKKworICAgICAgICAgICAgIyBXZSBzaG91bGQgaGF2ZSByZXBsYWNlZCBhIHcvIDEwLCBidXQgdGhlIG9sZCBiIHZhbHVlIHNob3VsZAorICAgICAgICAgICAgIyBzdGljay4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmEsIDEwLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmIsIDIsICJtb2R1bGUgaGFzIHdyb25nIGF0dHJpYnV0ZSB2YWx1ZXMiKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKyAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCisgICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQorCisgICAgZGVmIHRlc3RfaW5maW5pdGVfcmVsb2FkKHNlbGYpOgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU3NDIzNDIgcmVwb3J0cyB0aGF0IFB5dGhvbiBzZWdmYXVsdHMKKyAgICAgICAgIyAoaW5maW5pdGUgcmVjdXJzaW9uIGluIEMpIHdoZW4gZmFjZWQgd2l0aCBzZWxmLXJlY3Vyc2l2ZSByZWxvYWQoKWluZy4KKworICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGluZmluaXRlX3JlbG9hZAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisKKyAgICBkZWYgdGVzdF9pbXBvcnRfbmFtZV9iaW5kaW5nKHNlbGYpOgorICAgICAgICAjIGltcG9ydCB4LnkueiBiaW5kcyB4IGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZS4KKyAgICAgICAgaW1wb3J0IHRlc3QgYXMgeAorICAgICAgICBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4LCB0ZXN0LCB4Ll9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cih0ZXN0LnRlc3Rfc3VwcG9ydCwgIl9fZmlsZV9fIikpCisKKyAgICAgICAgIyBpbXBvcnQgeC55LnogYXMgdyBiaW5kcyB6IGFzIHcuCisgICAgICAgIGltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCBhcyB5CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeSwgdGVzdC50ZXN0X3N1cHBvcnQsIHkuX19uYW1lX18pCisKKyAgICBkZWYgdGVzdF9pbXBvcnRfaW5pdGxlc3NfZGlyZWN0b3J5X3dhcm5pbmcoc2VsZik6CisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBJbXBvcnRXYXJuaW5nKSk6CisgICAgICAgICAgICAjIEp1c3QgYSByYW5kb20gbm9uLXBhY2thZ2UgZGlyZWN0b3J5IHdlIGFsd2F5cyBleHBlY3QgdG8gYmUKKyAgICAgICAgICAgICMgc29tZXdoZXJlIGluIHN5cy5wYXRoLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgX19pbXBvcnRfXywgInNpdGUtcGFja2FnZXMiKQorCisgICAgZGVmIHRlc3RfaW1wb3J0X2J5X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKFRFU1RGTikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIF9faW1wb3J0X18ocGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiSW1wb3J0IGJ5IGZpbGVuYW1lIGlzIG5vdCBzdXBwb3J0ZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjLmV4Y2VwdGlvbi5hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfaW1wb3J0X2luX2RlbF9kb2VzX25vdF9jcmFzaChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA0MjM2CisgICAgICAgIHRlc3RmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoJycsIFRFU1RGTiwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgIGltcG9ydCBpbXAKKyAgICAgICAgICAgIHN5cy5hcmd2Lmluc2VydCgwLCBDKCkpCisgICAgICAgICAgICAiIiIpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sodGVzdGZuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdW5saW5rKHRlc3RmbikKKworICAgIGRlZiB0ZXN0X2J1Zzc3MzIoc2VsZik6CisgICAgICAgIHNvdXJjZSA9IFRFU1RGTiArICcucHknCisgICAgICAgIG9zLm1rZGlyKHNvdXJjZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEltcG9ydEVycm9yLCBJT0Vycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcC5maW5kX21vZHVsZSwgVEVTVEZOLCBbIi4iXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJtZGlyKHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3RpbWVzdGFtcF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgIyBBIG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAgbGFyZ2VyIHRoYW4gMioqMzIgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0KKyAgICAgICAgIyB3aGVuIGltcG9ydGluZyBhIG1vZHVsZSAoaXNzdWUgIzExMjM1KS4KKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc291cmNlID0gVEVTVEZOICsgIi5weSIKKyAgICAgICAgICAgIGNvbXBpbGVkID0gc291cmNlICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCisgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnV0aW1lKHNvdXJjZSwgKDIgKiogMzMgLSA1LCAyICoqIDMzIC0gNSkpCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3Qgc2V0IG1vZGlmaWNhdGlvbiB0aW1lIHRvIGxhcmdlIGludGVnZXIiKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGdldGF0dHIoZXJybm8sICdFT1ZFUkZMT1cnLCBOb25lKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3Qgc2V0IG1vZGlmaWNhdGlvbiB0aW1lIHRvIGxhcmdlIGludGVnZXIgKHt9KSIuZm9ybWF0KGUpKQorICAgICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCisgICAgICAgICAgICAjIFRoZSBweWMgZmlsZSB3YXMgY3JlYXRlZC4KKyAgICAgICAgICAgIG9zLnN0YXQoY29tcGlsZWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKyAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCisKKyAgICBkZWYgdGVzdF9weWNfbXRpbWUoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgaXNzdWUgIzEzODYzOiAucHljIHRpbWVzdGFtcCBzb21ldGltZXMgaW5jb3JyZWN0IG9uIFdpbmRvd3MuCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgSmFuIDEsIDIwMTI7IEp1bCAxLCAyMDEyLgorICAgICAgICAgICAgbXRpbWVzID0gMTMyNTM3NjAwMCwgMTM0MTEwMDgwMAorCisgICAgICAgICAgICAjIERpZmZlcmVudCBuYW1lcyB0byBhdm9pZCBydW5uaW5nIGludG8gaW1wb3J0IGNhY2hpbmcuCisgICAgICAgICAgICB0YWlscyA9ICJzcGFtIiwgImVnZ3MiCisgICAgICAgICAgICBmb3IgbXRpbWUsIHRhaWwgaW4gemlwKG10aW1lcywgdGFpbHMpOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IFRFU1RGTiArIHRhaWwKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBtb2R1bGUgKyAiLnB5IgorICAgICAgICAgICAgICAgIGNvbXBpbGVkID0gc291cmNlICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCisKKyAgICAgICAgICAgICAgICAjIENyZWF0ZSBhIG5ldyBQeXRob24gZmlsZSB3aXRoIHRoZSBnaXZlbiBtdGltZS4KKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiMgSnVzdCB0ZXN0aW5nXG54PTEsIDIsIDNcbiIpCisgICAgICAgICAgICAgICAgb3MudXRpbWUoc291cmNlLCAobXRpbWUsIG10aW1lKSkKKworICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgdGhlIC5weWMvbyBmaWxlOyBpZiBpdCBjb3VsZG4ndCBiZSBjcmVhdGVkCisgICAgICAgICAgICAgICAgIyBmb3Igc29tZSByZWFzb24sIHNraXAgdGhlIHRlc3QuCisgICAgICAgICAgICAgICAgbSA9IF9faW1wb3J0X18obW9kdWxlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjb21waWxlZCk6CisgICAgICAgICAgICAgICAgICAgIHVubGluayhzb3VyY2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkbid0IGNyZWF0ZSAucHljLy5weW8gZmlsZS4iKQorCisgICAgICAgICAgICAgICAgIyBBY3R1YWwgbW9kaWZpY2F0aW9uIHRpbWUgb2YgLnB5IGZpbGUuCisgICAgICAgICAgICAgICAgbXRpbWUxID0gaW50KG9zLnN0YXQoc291cmNlKS5zdF9tdGltZSkgJiAweGZmZmZmZmZmCisKKyAgICAgICAgICAgICAgICAjIG10aW1lIHRoYXQgd2FzIGVuY29kZWQgaW4gdGhlIC5weWMgZmlsZS4KKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29tcGlsZWQsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIG10aW1lMiA9IHN0cnVjdC51bnBhY2soJzxMJywgZi5yZWFkKDgpWzQ6XSlbMF0KKworICAgICAgICAgICAgICAgIHVubGluayhjb21waWxlZCkKKyAgICAgICAgICAgICAgICB1bmxpbmsoc291cmNlKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdGltZTEsIG10aW1lMikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5wYXRoLnBvcCgwKQorCisKK2NsYXNzIFB5Y1Jld3JpdGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgdGhhdCB0aGUgYGNvX2ZpbGVuYW1lYCBhdHRyaWJ1dGUgb24gY29kZSBvYmplY3RzIGFsd2F5cyBwb2ludHMKKyAgICAjIHRvIHRoZSByaWdodCBmaWxlLCBldmVuIHdoZW4gdmFyaW91cyB0aGluZ3MgaGFwcGVuIChlLmcuIGJvdGggdGhlIC5weQorICAgICMgYW5kIHRoZSAucHljIGZpbGUgYXJlIHJlbmFtZWQpLgorCisgICAgbW9kdWxlX25hbWUgPSAidW5saWtlbHlfbW9kdWxlX25hbWUiCisgICAgbW9kdWxlX3NvdXJjZSA9ICIiIgoraW1wb3J0IHN5cworY29kZV9maWxlbmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2NvZGUuY29fZmlsZW5hbWUKK21vZHVsZV9maWxlbmFtZSA9IF9fZmlsZV9fCitjb25zdGFudCA9IDEKK2RlZiBmdW5jKCk6CisgICAgcGFzcworZnVuY19maWxlbmFtZSA9IGZ1bmMuZnVuY19jb2RlLmNvX2ZpbGVuYW1lCisiIiIKKyAgICBkaXJfbmFtZSA9IG9zLnBhdGguYWJzcGF0aChURVNURk4pCisgICAgZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKGRpcl9uYW1lLCBtb2R1bGVfbmFtZSkgKyBvcy5leHRzZXAgKyAicHkiCisgICAgY29tcGlsZWRfbmFtZSA9IGZpbGVfbmFtZSArICgiYyIgaWYgX19kZWJ1Z19fIGVsc2UgIm8iKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5vcmlnX21vZHVsZSA9IHN5cy5tb2R1bGVzLnBvcChzZWxmLm1vZHVsZV9uYW1lLCBOb25lKQorICAgICAgICBvcy5ta2RpcihzZWxmLmRpcl9uYW1lKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlX25hbWUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoc2VsZi5tb2R1bGVfc291cmNlKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgc2VsZi5kaXJfbmFtZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoCisgICAgICAgIGlmIHNlbGYub3JpZ19tb2R1bGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzeXMubW9kdWxlc1tzZWxmLm1vZHVsZV9uYW1lXSA9IHNlbGYub3JpZ19tb2R1bGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVubG9hZChzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICB1bmxpbmsoc2VsZi5maWxlX25hbWUpCisgICAgICAgIHVubGluayhzZWxmLmNvbXBpbGVkX25hbWUpCisgICAgICAgIHJtdHJlZShzZWxmLmRpcl9uYW1lKQorCisgICAgZGVmIGltcG9ydF9tb2R1bGUoc2VsZik6CisgICAgICAgIG5zID0gZ2xvYmFscygpCisgICAgICAgIF9faW1wb3J0X18oc2VsZi5tb2R1bGVfbmFtZSwgbnMsIG5zKQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbc2VsZi5tb2R1bGVfbmFtZV0KKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgbW9kID0gc2VsZi5pbXBvcnRfbW9kdWxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QubW9kdWxlX2ZpbGVuYW1lLCBzZWxmLmZpbGVfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuY29kZV9maWxlbmFtZSwgc2VsZi5maWxlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmZ1bmNfZmlsZW5hbWUsIHNlbGYuZmlsZV9uYW1lKQorICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc2VsZi5tb2R1bGVfbmFtZV0KKyAgICAgICAgbW9kID0gc2VsZi5pbXBvcnRfbW9kdWxlKCkKKyAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QubW9kdWxlX2ZpbGVuYW1lLCBzZWxmLmNvbXBpbGVkX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmNvZGVfZmlsZW5hbWUsIHNlbGYuZmlsZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5mdW5jX2ZpbGVuYW1lLCBzZWxmLmZpbGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X2luY29ycmVjdF9jb2RlX25hbWUoc2VsZik6CisgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLmZpbGVfbmFtZSwgZGZpbGU9ImFub3RoZXJfbW9kdWxlLnB5IikKKyAgICAgICAgbW9kID0gc2VsZi5pbXBvcnRfbW9kdWxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QubW9kdWxlX2ZpbGVuYW1lLCBzZWxmLmNvbXBpbGVkX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmNvZGVfZmlsZW5hbWUsIHNlbGYuZmlsZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5mdW5jX2ZpbGVuYW1lLCBzZWxmLmZpbGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV93aXRob3V0X3NvdXJjZShzZWxmKToKKyAgICAgICAgdGFyZ2V0ID0gImFub3RoZXJfbW9kdWxlLnB5IgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5maWxlX25hbWUsIGRmaWxlPXRhcmdldCkKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuZmlsZV9uYW1lKQorICAgICAgICBtb2QgPSBzZWxmLmltcG9ydF9tb2R1bGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5tb2R1bGVfZmlsZW5hbWUsIHNlbGYuY29tcGlsZWRfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuY29kZV9maWxlbmFtZSwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5mdW5jX2ZpbGVuYW1lLCB0YXJnZXQpCisKKyAgICBkZWYgdGVzdF9mb3JlaWduX2NvZGUoc2VsZik6CisgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLmZpbGVfbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29tcGlsZWRfbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGhlYWRlciA9IGYucmVhZCg4KQorICAgICAgICAgICAgY29kZSA9IG1hcnNoYWwubG9hZChmKQorICAgICAgICBjb25zdGFudHMgPSBsaXN0KGNvZGUuY29fY29uc3RzKQorICAgICAgICBmb3JlaWduX2NvZGUgPSB0ZXN0X21haW4uZnVuY19jb2RlCisgICAgICAgIHBvcyA9IGNvbnN0YW50cy5pbmRleCgxKQorICAgICAgICBjb25zdGFudHNbcG9zXSA9IGZvcmVpZ25fY29kZQorICAgICAgICBjb2RlID0gdHlwZShjb2RlKShjb2RlLmNvX2FyZ2NvdW50LCBjb2RlLmNvX25sb2NhbHMsIGNvZGUuY29fc3RhY2tzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLmNvX2ZsYWdzLCBjb2RlLmNvX2NvZGUsIHR1cGxlKGNvbnN0YW50cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuY29fbmFtZXMsIGNvZGUuY29fdmFybmFtZXMsIGNvZGUuY29fZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuY29fbmFtZSwgY29kZS5jb19maXJzdGxpbmVubywgY29kZS5jb19sbm90YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuY29fZnJlZXZhcnMsIGNvZGUuY29fY2VsbHZhcnMpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNvbXBpbGVkX25hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGhlYWRlcikKKyAgICAgICAgICAgIG1hcnNoYWwuZHVtcChjb2RlLCBmKQorICAgICAgICBtb2QgPSBzZWxmLmltcG9ydF9tb2R1bGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5jb25zdGFudC5jb19maWxlbmFtZSwgZm9yZWlnbl9jb2RlLmNvX2ZpbGVuYW1lKQorCisKK2NsYXNzIFBhdGhzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHBhdGggPSBURVNURk4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3MubWtkaXIoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLnN5c3BhdGggPSBzeXMucGF0aFs6XQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBybXRyZWUoc2VsZi5wYXRoKQorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYuc3lzcGF0aAorCisgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjkzLgorICAgIGRlZiB0ZXN0X3RyYWlsaW5nX3NsYXNoKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYucGF0aCwgJ3Rlc3RfdHJhaWxpbmdfc2xhc2gucHknKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgidGVzdGRhdGEgPSAndGVzdF90cmFpbGluZ19zbGFzaCciKQorICAgICAgICBzeXMucGF0aC5hcHBlbmQoc2VsZi5wYXRoKycvJykKKyAgICAgICAgbW9kID0gX19pbXBvcnRfXygidGVzdF90cmFpbGluZ19zbGFzaCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLnRlc3RkYXRhLCAndGVzdF90cmFpbGluZ19zbGFzaCcpCisgICAgICAgIHVubG9hZCgidGVzdF90cmFpbGluZ19zbGFzaCIpCisKKyAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM2NzcuCisgICAgZGVmIF90ZXN0X1VOQ19wYXRoKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYucGF0aCwgJ3Rlc3RfdHJhaWxpbmdfc2xhc2gucHknKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgidGVzdGRhdGEgPSAndGVzdF90cmFpbGluZ19zbGFzaCciKQorICAgICAgICAjIENyZWF0ZSB0aGUgVU5DIHBhdGgsIGxpa2UgXFxteWhvc3RcYyRcZm9vXGJhci4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzZWxmLnBhdGgpCisgICAgICAgIGltcG9ydCBzb2NrZXQKKyAgICAgICAgaG4gPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQorICAgICAgICBkcml2ZSA9IHBhdGhbMF0KKyAgICAgICAgdW5jID0gIlxcXFwlc1xcJXMkIiUoaG4sIGRyaXZlKQorICAgICAgICB1bmMgKz0gcGF0aFsyOl0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubGlzdGRpcih1bmMpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FUEVSTSwgZXJybm8uRUFDQ0VTKToKKyAgICAgICAgICAgICAgICAjIFNlZSBpc3N1ZSAjMTUzMzgKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3QgYWNjZXNzIGFkbWluaXN0cmF0aXZlIHNoYXJlICVyIiAlICh1bmMsKSkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHN5cy5wYXRoLmFwcGVuZChwYXRoKQorICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKCJ0ZXN0X3RyYWlsaW5nX3NsYXNoIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QudGVzdGRhdGEsICd0ZXN0X3RyYWlsaW5nX3NsYXNoJykKKyAgICAgICAgdW5sb2FkKCJ0ZXN0X3RyYWlsaW5nX3NsYXNoIikKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICB0ZXN0X1VOQ19wYXRoID0gX3Rlc3RfVU5DX3BhdGgKKworCitjbGFzcyBSZWxhdGl2ZUltcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5sb2FkKCJ0ZXN0LnJlbGltcG9ydCIpCisgICAgc2V0VXAgPSB0ZWFyRG93bgorCisgICAgZGVmIHRlc3RfcmVsaW1wb3J0X3N0YXIoc2VsZik6CisgICAgICAgICMgVGhpcyB3aWxsIGltcG9ydCAqIGZyb20gLnRlc3RfaW1wb3J0LgorICAgICAgICBmcm9tIC4gaW1wb3J0IHJlbGltcG9ydAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZWxpbXBvcnQsICJSZWxhdGl2ZUltcG9ydFRlc3RzIikpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTMyMjEoc2VsZik6CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzIyMS4KKyAgICAgICAgZGVmIGNoZWNrX2Fic29sdXRlKCk6CisgICAgICAgICAgICBleGVjICJmcm9tIG9zIGltcG9ydCBwYXRoIiBpbiBucworICAgICAgICBkZWYgY2hlY2tfcmVsYXRpdmUoKToKKyAgICAgICAgICAgIGV4ZWMgImZyb20gLiBpbXBvcnQgcmVsaW1wb3J0IiBpbiBucworCisgICAgICAgICMgQ2hlY2sgYm90aCBPSyB3aXRoIF9fcGFja2FnZV9fIGFuZCBfX25hbWVfXyBjb3JyZWN0CisgICAgICAgIG5zID0gZGljdChfX3BhY2thZ2VfXz0ndGVzdCcsIF9fbmFtZV9fPSd0ZXN0Lm5vdGFyZWFsbW9kdWxlJykKKyAgICAgICAgY2hlY2tfYWJzb2x1dGUoKQorICAgICAgICBjaGVja19yZWxhdGl2ZSgpCisKKyAgICAgICAgIyBDaGVjayBib3RoIE9LIHdpdGggb25seSBfX25hbWVfXyB3cm9uZworICAgICAgICBucyA9IGRpY3QoX19wYWNrYWdlX189J3Rlc3QnLCBfX25hbWVfXz0nbm90YXJlYWxwa2cubm90YXJlYWxtb2R1bGUnKQorICAgICAgICBjaGVja19hYnNvbHV0ZSgpCisgICAgICAgIGNoZWNrX3JlbGF0aXZlKCkKKworICAgICAgICAjIENoZWNrIHJlbGF0aXZlIGZhaWxzIHdpdGggb25seSBfX3BhY2thZ2VfXyB3cm9uZworICAgICAgICBucyA9IGRpY3QoX19wYWNrYWdlX189J2ZvbycsIF9fbmFtZV9fPSd0ZXN0Lm5vdGFyZWFsbW9kdWxlJykKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJy4rZm9vJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgIGNoZWNrX2Fic29sdXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIGNoZWNrX3JlbGF0aXZlKQorCisgICAgICAgICMgQ2hlY2sgcmVsYXRpdmUgZmFpbHMgd2l0aCBfX3BhY2thZ2VfXyBhbmQgX19uYW1lX18gd3JvbmcKKyAgICAgICAgbnMgPSBkaWN0KF9fcGFja2FnZV9fPSdmb28nLCBfX25hbWVfXz0nbm90YXJlYWxwa2cubm90YXJlYWxtb2R1bGUnKQorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnLitmb28nLCBSdW50aW1lV2FybmluZykpOgorICAgICAgICAgICAgY2hlY2tfYWJzb2x1dGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvciwgY2hlY2tfcmVsYXRpdmUpCisKKyAgICAgICAgIyBDaGVjayBib3RoIGZhaWwgd2l0aCBwYWNrYWdlIHNldCB0byBhIG5vbi1zdHJpbmcKKyAgICAgICAgbnMgPSBkaWN0KF9fcGFja2FnZV9fPW9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjaGVja19hYnNvbHV0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2hlY2tfcmVsYXRpdmUpCisKKyAgICBkZWYgdGVzdF9hYnNvbHV0ZV9pbXBvcnRfd2l0aG91dF9mdXR1cmUoc2VsZik6CisgICAgICAgICMgSWYgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0IHN5bnRheCBpcyB1c2VkLCB0aGVuIGRvIG5vdCB0cnkKKyAgICAgICAgIyB0byBwZXJmb3JtIGFuIGFic29sdXRlIGltcG9ydCBpbiB0aGUgZmFjZSBvZiBmYWlsdXJlLgorICAgICAgICAjIElzc3VlICM3OTAyLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGZyb20gLm9zIGltcG9ydCBzZXAKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0IHRyaWdnZXJlZCBhbiAiCisgICAgICAgICAgICAgICAgICAgICAgImltcGxpY2l0IGFic29sdXRlIGltcG9ydCIpCisKKworY2xhc3MgVGVzdFN5bWJvbGljYWxseUxpbmtlZFBhY2thZ2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHBhY2thZ2VfbmFtZSA9ICdzYW1wbGUnCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYudGFnZ2VkKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50YWdnZWQpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYucGFja2FnZV9uYW1lKToKKyAgICAgICAgICAgIHN5bWxpbmtfc3VwcG9ydC5yZW1vdmVfc3ltbGluayhzZWxmLnBhY2thZ2VfbmFtZSkKKyAgICAgICAgc2VsZi5vcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KKworICAgICAgICAjIGNyZWF0ZSBhIHNhbXBsZSBwYWNrYWdlOyBpbWFnaW5lIHlvdSBoYXZlIGEgcGFja2FnZSB3aXRoIGEgdGFnIGFuZAorICAgICAgICAjICB5b3Ugd2FudCB0byBzeW1ib2xpY2FsbHkgbGluayBpdCBmcm9tIGl0cyB1bnRhZ2dlZCBuYW1lLgorICAgICAgICBvcy5ta2RpcihzZWxmLnRhZ2dlZCkKKyAgICAgICAgaW5pdF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGFnZ2VkLCAnX19pbml0X18ucHknKQorICAgICAgICBvcGVuKGluaXRfZmlsZSwgJ3cnKS5jbG9zZSgpCisgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhpbml0X2ZpbGUpCisKKyAgICAgICAgIyBub3cgY3JlYXRlIGEgc3ltbGluayB0byB0aGUgdGFnZ2VkIHBhY2thZ2UKKyAgICAgICAgIyBzYW1wbGUgLT4gc2FtcGxlLXRhZ2dlZAorICAgICAgICBzeW1saW5rX3N1cHBvcnQuc3ltbGluayhzZWxmLnRhZ2dlZCwgc2VsZi5wYWNrYWdlX25hbWUpCisKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNkaXIoc2VsZi5wYWNrYWdlX25hbWUpCisgICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlX25hbWUsICdfX2luaXRfXy5weScpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRhZ2dlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFja2FnZV9uYW1lICsgJy10YWdnZWQnCisKKyAgICAjIHJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWU2NzI3CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoCisgICAgICAgIG5vdCBoYXNhdHRyKHN5cywgJ2dldHdpbmRvd3N2ZXJzaW9uJykKKyAgICAgICAgb3Igc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkgPj0gKDYsIDApLAorICAgICAgICAiV2luZG93cyBWaXN0YSBvciBsYXRlciByZXF1aXJlZCIpCisgICAgQHN5bWxpbmtfc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCisgICAgZGVmIHRlc3Rfc3ltbGlua2VkX2Rpcl9pbXBvcnRhYmxlKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBzYW1wbGUgY2FuIG9ubHkgYmUgaW1wb3J0ZWQgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgIHN5cy5wYXRoWzpdID0gWycuJ10KKworICAgICAgICAjIGFuZCB0cnkgdG8gaW1wb3J0IHRoZSBwYWNrYWdlCisgICAgICAgIF9faW1wb3J0X18oc2VsZi5wYWNrYWdlX25hbWUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgbm93IGNsZWFudXAKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5wYWNrYWdlX25hbWUpOgorICAgICAgICAgICAgc3ltbGlua19zdXBwb3J0LnJlbW92ZV9zeW1saW5rKHNlbGYucGFja2FnZV9uYW1lKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnRhZ2dlZCk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGFnZ2VkKQorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYub3JpZ19zeXNfcGF0aAorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgcnVuX3VuaXR0ZXN0KEltcG9ydFRlc3RzLCBQeWNSZXdyaXRpbmdUZXN0cywgUGF0aHNUZXN0cywKKyAgICAgICAgUmVsYXRpdmVJbXBvcnRUZXN0cywgVGVzdFN5bWJvbGljYWxseUxpbmtlZFBhY2thZ2UpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgIyBUZXN0IG5lZWRzIHRvIGJlIGEgcGFja2FnZSwgc28gd2UgY2FuIGRvIHJlbGF0aXZlIGltcG9ydHMuCisgICAgZnJvbSB0ZXN0LnRlc3RfaW1wb3J0IGltcG9ydCB0ZXN0X21haW4KKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmFiMWYyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKQEAgLTAsMCArMSwyNTUgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCBpbXAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK3Rlc3Rfc3JjID0gIiIiXAorZGVmIGdldF9uYW1lKCk6CisgICAgcmV0dXJuIF9fbmFtZV9fCitkZWYgZ2V0X2ZpbGUoKToKKyAgICByZXR1cm4gX19maWxlX18KKyIiIgorCithYnNpbXAgPSAiaW1wb3J0IHN1YlxuIgorcmVsaW1wID0gImZyb20gLiBpbXBvcnQgc3ViXG4iCitkZWVwcmVsaW1wID0gImZyb20gLi4uLiBpbXBvcnQgc3ViXG4iCitmdXRpbXAgPSAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnRcbiIKKworcmVsb2FkX3NyYyA9IHRlc3Rfc3JjKyIiIlwKK3JlbG9hZGVkID0gVHJ1ZQorIiIiCisKK3Rlc3RfY28gPSBjb21waWxlKHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCityZWxvYWRfY28gPSBjb21waWxlKHJlbG9hZF9zcmMsICI8Pz8/PiIsICJleGVjIikKKwordGVzdDJfb2xkYWJzX2NvID0gY29tcGlsZShhYnNpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQordGVzdDJfbmV3YWJzX2NvID0gY29tcGlsZShmdXRpbXAgKyBhYnNpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQordGVzdDJfbmV3cmVsX2NvID0gY29tcGlsZShyZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQordGVzdDJfZGVlcHJlbF9jbyA9IGNvbXBpbGUoZGVlcHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCit0ZXN0Ml9mdXRyZWxfY28gPSBjb21waWxlKGZ1dGltcCArIHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCisKK3Rlc3RfcGF0aCA9ICIhISFfdGVzdF8hISEiCisKKworY2xhc3MgVGVzdEltcG9ydGVyOgorCisgICAgbW9kdWxlcyA9IHsKKyAgICAgICAgImhvb2t0ZXN0bW9kdWxlIjogKEZhbHNlLCB0ZXN0X2NvKSwKKyAgICAgICAgImhvb2t0ZXN0cGFja2FnZSI6IChUcnVlLCB0ZXN0X2NvKSwKKyAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIiOiAoVHJ1ZSwgdGVzdF9jbyksCisgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlciI6IChUcnVlLCB0ZXN0X2NvKSwKKyAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5vbGRhYnMiOiAoRmFsc2UsIHRlc3QyX29sZGFic19jbyksCisgICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3YWJzIjogKEZhbHNlLCB0ZXN0Ml9uZXdhYnNfY28pLAorICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld3JlbCI6IChGYWxzZSwgdGVzdDJfbmV3cmVsX2NvKSwKKyAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCI6IChUcnVlLCB0ZXN0Ml9kZWVwcmVsX2NvKSwKKyAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5mdXRyZWwiOiAoRmFsc2UsIHRlc3QyX2Z1dHJlbF9jbyksCisgICAgICAgICJzdWIiOiAoRmFsc2UsIHRlc3RfY28pLAorICAgICAgICAicmVsb2FkbW9kdWxlIjogKEZhbHNlLCB0ZXN0X2NvKSwKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD10ZXN0X3BhdGgpOgorICAgICAgICBpZiBwYXRoICE9IHRlc3RfcGF0aDoKKyAgICAgICAgICAgICMgaWYgb3V0IGNsYXNzIGlzIG9uIHN5cy5wYXRoX2hvb2tzLCB3ZSBtdXN0IHJhaXNlCisgICAgICAgICAgICAjIEltcG9ydEVycm9yIGZvciBhbnkgcGF0aCBpdGVtIHRoYXQgd2UgY2FuJ3QgaGFuZGxlLgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLm1vZHVsZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIGlzcGtnLCBjb2RlID0gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLGltcC5uZXdfbW9kdWxlKGZ1bGxuYW1lKSkKKyAgICAgICAgbW9kLl9fZmlsZV9fID0gIjwlcz4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmCisgICAgICAgIGlmIGlzcGtnOgorICAgICAgICAgICAgbW9kLl9fcGF0aF9fID0gc2VsZi5fZ2V0X19wYXRoX18oKQorICAgICAgICBleGVjIGNvZGUgaW4gbW9kLl9fZGljdF9fCisgICAgICAgIHJldHVybiBtb2QKKworCitjbGFzcyBNZXRhSW1wb3J0ZXIoVGVzdEltcG9ydGVyKToKKyAgICBkZWYgX2dldF9fcGF0aF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gW10KKworY2xhc3MgUGF0aEltcG9ydGVyKFRlc3RJbXBvcnRlcik6CisgICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGhdCisKKworY2xhc3MgSW1wb3J0QmxvY2tlcjoKKyAgICAiIiJQbGFjZSBhbiBJbXBvcnRCbG9ja2VyIGluc3RhbmNlIG9uIHN5cy5tZXRhX3BhdGggYW5kIHlvdQorICAgIGNhbiBiZSBzdXJlIHRoZSBtb2R1bGVzIHlvdSBzcGVjaWZpZWQgY2FuJ3QgYmUgaW1wb3J0ZWQsIGV2ZW4KKyAgICBpZiBpdCdzIGEgYnVpbHRpbi4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKm5hbWVzdG9ibG9jayk6CisgICAgICAgIHNlbGYubmFtZXN0b2Jsb2NrID0gZGljdC5mcm9ta2V5cyhuYW1lc3RvYmxvY2spCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLm5hbWVzdG9ibG9jazoKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHJldHVybiBOb25lCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IsICJJIGRhcmUgeW91IgorCisKK2NsYXNzIEltcFdyYXBwZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD1Ob25lKToKKyAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZSBhbmQgbm90IG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgIHN1Ym5hbWUgPSBmdWxsbmFtZS5zcGxpdCgiLiIpWy0xXQorICAgICAgICBpZiBzdWJuYW1lICE9IGZ1bGxuYW1lIGFuZCBzZWxmLnBhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIHNlbGYucGF0aCBpcyBOb25lOgorICAgICAgICAgICAgcGF0aCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGggPSBbc2VsZi5wYXRoXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlLCBmaWxlbmFtZSwgc3R1ZmYgPSBpbXAuZmluZF9tb2R1bGUoc3VibmFtZSwgcGF0aCkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIEltcExvYWRlcihmaWxlLCBmaWxlbmFtZSwgc3R1ZmYpCisKKworY2xhc3MgSW1wTG9hZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGZpbGVuYW1lLCBzdHVmZik6CisgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuc3R1ZmYgPSBzdHVmZgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKGZ1bGxuYW1lLCBzZWxmLmZpbGUsIHNlbGYuZmlsZW5hbWUsIHNlbGYuc3R1ZmYpCisgICAgICAgIGlmIHNlbGYuZmlsZToKKyAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCisgICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZiAgIyBmb3IgaW50cm9zcGVjdGlvbgorICAgICAgICByZXR1cm4gbW9kCisKKworY2xhc3MgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBzZWxmLm1ldGFfcGF0aCA9IHN5cy5tZXRhX3BhdGhbOl0KKyAgICAgICAgc2VsZi5wYXRoX2hvb2tzID0gc3lzLnBhdGhfaG9va3NbOl0KKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQorICAgICAgICBzZWxmLm1vZHVsZXNfYmVmb3JlID0gc3lzLm1vZHVsZXMuY29weSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5wYXRoCisgICAgICAgIHN5cy5tZXRhX3BhdGhbOl0gPSBzZWxmLm1ldGFfcGF0aAorICAgICAgICBzeXMucGF0aF9ob29rc1s6XSA9IHNlbGYucGF0aF9ob29rcworICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCisgICAgICAgIHN5cy5tb2R1bGVzLmNsZWFyKCkKKyAgICAgICAgc3lzLm1vZHVsZXMudXBkYXRlKHNlbGYubW9kdWxlc19iZWZvcmUpCisKKworY2xhc3MgSW1wb3J0SG9va3NUZXN0Q2FzZShJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgZG9UZXN0SW1wb3J0cyhzZWxmLCBpbXBvcnRlcj1Ob25lKToKKyAgICAgICAgaW1wb3J0IGhvb2t0ZXN0bW9kdWxlCisgICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UKKyAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIKKyAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3Rtb2R1bGUuZ2V0X25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3Rtb2R1bGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5nZXRfbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuZ2V0X25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuZ2V0X25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIiKQorICAgICAgICBpZiBpbXBvcnRlcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3Rtb2R1bGUuX19sb2FkZXJfXywgaW1wb3J0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5fX2xvYWRlcl9fLCBpbXBvcnRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5fX2xvYWRlcl9fLCBpbXBvcnRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuX19sb2FkZXJfXywgaW1wb3J0ZXIpCisKKyAgICAgICAgVGVzdEltcG9ydGVyLm1vZHVsZXNbJ3JlbG9hZG1vZHVsZSddID0gKEZhbHNlLCB0ZXN0X2NvKQorICAgICAgICBpbXBvcnQgcmVsb2FkbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihyZWxvYWRtb2R1bGUsJ3JlbG9hZGVkJykpCisKKyAgICAgICAgVGVzdEltcG9ydGVyLm1vZHVsZXNbJ3JlbG9hZG1vZHVsZSddID0gKEZhbHNlLCByZWxvYWRfY28pCisgICAgICAgIGltcC5yZWxvYWQocmVsb2FkbW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZWxvYWRtb2R1bGUsJ3JlbG9hZGVkJykpCisKKyAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uub2xkYWJzLmdldF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5vbGRhYnMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMuc3ViLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCisKKyAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3cmVsLmdldF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdyZWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwuc3ViLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCisKKyAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCBhcyBzdWJlc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJlc3QuZ2V0X25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuc3ViZXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJlc3Quc3ViLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCisKKyAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZnV0cmVsLmdldF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5mdXRyZWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwuc3ViLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCisKKyAgICAgICAgaW1wb3J0IHN1YgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yi5nZXRfbmFtZSgpLCAic3ViIikKKworICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm5ld2FicworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMuZ2V0X25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld2FicyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld2Ficy5zdWIsIHN1YikKKworICAgIGRlZiB0ZXN0TWV0YVBhdGgoc2VsZik6CisgICAgICAgIGkgPSBNZXRhSW1wb3J0ZXIoKQorICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpKQorICAgICAgICBzZWxmLmRvVGVzdEltcG9ydHMoaSkKKworICAgIGRlZiB0ZXN0UGF0aEhvb2soc2VsZik6CisgICAgICAgIHN5cy5wYXRoX2hvb2tzLmFwcGVuZChQYXRoSW1wb3J0ZXIpCisgICAgICAgIHN5cy5wYXRoLmFwcGVuZCh0ZXN0X3BhdGgpCisgICAgICAgIHNlbGYuZG9UZXN0SW1wb3J0cygpCisKKyAgICBkZWYgdGVzdEJsb2NrZXIoc2VsZik6CisgICAgICAgIG1uYW1lID0gImV4Y2VwdGlvbnMiICAjIGFuIGFyYml0cmFyeSBoYXJtbGVzcyBidWlsdGluIG1vZHVsZQorICAgICAgICB0ZXN0X3N1cHBvcnQudW5sb2FkKG1uYW1lKQorICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChJbXBvcnRCbG9ja2VyKG1uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIG1uYW1lKQorCisgICAgZGVmIHRlc3RJbXBXcmFwcGVyKHNlbGYpOgorICAgICAgICBpID0gSW1wV3JhcHBlcigpCisgICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGkpCisgICAgICAgIHN5cy5wYXRoX2hvb2tzLmFwcGVuZChJbXBXcmFwcGVyKQorICAgICAgICBtbmFtZXMgPSAoImNvbG9yc3lzIiwgInVybHBhcnNlIiwgImRpc3R1dGlscy5jb3JlIiwgImNvbXBpbGVyLm1pc2MiKQorICAgICAgICBmb3IgbW5hbWUgaW4gbW5hbWVzOgorICAgICAgICAgICAgcGFyZW50ID0gbW5hbWUuc3BsaXQoIi4iKVswXQorICAgICAgICAgICAgZm9yIG4gaW4gc3lzLm1vZHVsZXMua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIG4uc3RhcnRzd2l0aChwYXJlbnQpOgorICAgICAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbl0KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJUaGUgY29tcGlsZXIgcGFja2FnZSBpcyBkZXByZWNhdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgcmVtb3ZlZCIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgZm9yIG1uYW1lIGluIG1uYW1lczoKKyAgICAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhtbmFtZSwgZ2xvYmFscygpLCBsb2NhbHMoKSwgWyJfX2R1bW15X18iXSkKKyAgICAgICAgICAgICAgICBtLl9fbG9hZGVyX18gICMgdG8gbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhbmRsZWQgdGhlIGltcG9ydAorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEltcG9ydEhvb2tzVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWQ4ZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliLnB5CkBAIC0wLDAgKzEsMTc2IEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiB1bmNhY2hlKCpuYW1lcyk6CisgICAgIiIiVW5jYWNoZSBhIG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzLgorCisgICAgQSBiYXNpYyBzYW5pdHkgY2hlY2sgaXMgcGVyZm9ybWVkIHRvIHByZXZlbnQgdW5jYWNoaW5nIG1vZHVsZXMgdGhhdCBlaXRoZXIKKyAgICBjYW5ub3Qvc2hvdWxkbid0IGJlIHVuY2FjaGVkLgorCisgICAgIiIiCisgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgIGlmIG5hbWUgaW4gKCdzeXMnLCAnbWFyc2hhbCcsICdpbXAnKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgImNhbm5vdCB1bmNhY2hlIHswfSBhcyBpdCB3aWxsIGJyZWFrIF9pbXBvcnRsaWIiLmZvcm1hdChuYW1lKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgaW1wb3J0X3N0YXRlKCoqa3dhcmdzKToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gbWFuYWdlIHRoZSB2YXJpb3VzIGltcG9ydGVycyBhbmQgc3RvcmVkIHN0YXRlIGluIHRoZQorICAgIHN5cyBtb2R1bGUuCisKKyAgICBUaGUgJ21vZHVsZXMnIGF0dHJpYnV0ZSBpcyBub3Qgc3VwcG9ydGVkIGFzIHRoZSBpbnRlcnByZXRlciBzdGF0ZSBzdG9yZXMgYQorICAgIHBvaW50ZXIgdG8gdGhlIGRpY3QgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgdXNlcyBpbnRlcm5hbGx5OworICAgIHJlYXNzaWduaW5nIHRvIHN5cy5tb2R1bGVzIGRvZXMgbm90IGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LgorCisgICAgIiIiCisgICAgb3JpZ2luYWxzID0ge30KKyAgICB0cnk6CisgICAgICAgIGZvciBhdHRyLCBkZWZhdWx0IGluICgoJ21ldGFfcGF0aCcsIFtdKSwgKCdwYXRoJywgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdwYXRoX2hvb2tzJywgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdwYXRoX2ltcG9ydGVyX2NhY2hlJywge30pKToKKyAgICAgICAgICAgIG9yaWdpbmFsc1thdHRyXSA9IGdldGF0dHIoc3lzLCBhdHRyKQorICAgICAgICAgICAgaWYgYXR0ciBpbiBrd2FyZ3M6CisgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0ga3dhcmdzW2F0dHJdCisgICAgICAgICAgICAgICAgZGVsIGt3YXJnc1thdHRyXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSBkZWZhdWx0CisgICAgICAgICAgICBzZXRhdHRyKHN5cywgYXR0ciwgbmV3X3ZhbHVlKQorICAgICAgICBpZiBsZW4oa3dhcmdzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICd1bnJlY29nbml6ZWQgYXJndW1lbnRzOiB7MH0nLmZvcm1hdChrd2FyZ3Mua2V5cygpKSkKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gb3JpZ2luYWxzLml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKHN5cywgYXR0ciwgdmFsdWUpCisKKworY2xhc3MgbW9ja19tb2R1bGVzKG9iamVjdCk6CisKKyAgICAiIiJBIG1vY2sgaW1wb3J0ZXIvbG9hZGVyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICpuYW1lcyk6CisgICAgICAgIHNlbGYubW9kdWxlcyA9IHt9CisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoJy5fX2luaXRfXycpOgorICAgICAgICAgICAgICAgIGltcG9ydF9uYW1lID0gbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbXBvcnRfbmFtZSA9IG5hbWVbOi1sZW4oJy5fX2luaXRfXycpXQorICAgICAgICAgICAgaWYgJy4nIG5vdCBpbiBuYW1lOgorICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBOb25lCisgICAgICAgICAgICBlbGlmIGltcG9ydF9uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAgcGFja2FnZSA9IG5hbWUucnNwbGl0KCcuJywgMSlbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFja2FnZSA9IGltcG9ydF9uYW1lCisgICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShpbXBvcnRfbmFtZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gJzxtb2NrIF9fZmlsZV9fPicKKyAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHBhY2thZ2UKKyAgICAgICAgICAgIG1vZHVsZS5hdHRyID0gbmFtZQorICAgICAgICAgICAgaWYgaW1wb3J0X25hbWUgIT0gbmFtZToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbJzxtb2NrIF9fcGF0aF9fPiddCisgICAgICAgICAgICBzZWxmLm1vZHVsZXNbaW1wb3J0X25hbWVdID0gbW9kdWxlCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZXNbbmFtZV0KKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgbm90IGluIHNlbGYubW9kdWxlczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgbm90IGluIHNlbGYubW9kdWxlczoKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMubW9kdWxlc1tmdWxsbmFtZV0gPSBzZWxmLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fdW5jYWNoZSA9IHVuY2FjaGUoKnNlbGYubW9kdWxlcy5rZXlzKCkpCisgICAgICAgIHNlbGYuX3VuY2FjaGUuX19lbnRlcl9fKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgorICAgICAgICBzZWxmLl91bmNhY2hlLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCisKKworCitjbGFzcyBJbXBvcnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlLiIiIgorCisgICAgZGVmIHRlc3RfbW9kdWxlX2ltcG9ydChzZWxmKToKKyAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIHRvcC1sZXZlbCBtb2R1bGUuCisgICAgICAgIHdpdGggbW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnKSBhcyBtb2NrOgorICAgICAgICAgICAgd2l0aCBpbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICd0b3BfbGV2ZWwnKQorCisgICAgZGVmIHRlc3RfYWJzb2x1dGVfcGFja2FnZV9pbXBvcnQoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBvcnRpbmcgYSBtb2R1bGUgZnJvbSBhIHBhY2thZ2Ugd2l0aCBhbiBhYnNvbHV0ZSBuYW1lLgorICAgICAgICBwa2dfbmFtZSA9ICdwa2cnCisgICAgICAgIHBrZ19sb25nX25hbWUgPSAnezB9Ll9faW5pdF9fJy5mb3JtYXQocGtnX25hbWUpCisgICAgICAgIG5hbWUgPSAnezB9Lm1vZCcuZm9ybWF0KHBrZ19uYW1lKQorICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgorICAgICAgICAgICAgd2l0aCBpbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKKworICAgIGRlZiB0ZXN0X3NoYWxsb3dfcmVsYXRpdmVfcGFja2FnZV9pbXBvcnQoc2VsZik6CisgICAgICAgIG1vZHVsZXMgPSBbJ2EuX19pbml0X18nLCAnYS5iLl9faW5pdF9fJywgJ2EuYi5jLl9faW5pdF9fJywgJ2EuYi5jLmQnXQorICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuZCcsICdhLmIuYycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdhLmIuYy5kJykKKworICAgIGRlZiB0ZXN0X2RlZXBfcmVsYXRpdmVfcGFja2FnZV9pbXBvcnQoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBvcnRpbmcgYSBtb2R1bGUgZnJvbSBhIHBhY2thZ2UgdGhyb3VnaCBhIHJlbGF0dmUgaW1wb3J0LgorICAgICAgICBtb2R1bGVzID0gWydhLl9faW5pdF9fJywgJ2EuYi5fX2luaXRfXycsICdhLmMnXQorICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuLmMnLCAnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ2EuYycpCisKKyAgICBkZWYgdGVzdF9hYnNvbHV0ZV9pbXBvcnRfd2l0aF9wYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSBwYWNrYWdlIHdpdGggYW4gYWJzb2x1dGUgbmFtZSB3aXRoCisgICAgICAgICMgdGhlICdwYWNrYWdlJyBhcmd1bWVudCBnaXZlbi4KKyAgICAgICAgcGtnX25hbWUgPSAncGtnJworICAgICAgICBwa2dfbG9uZ19uYW1lID0gJ3swfS5fX2luaXRfXycuZm9ybWF0KHBrZ19uYW1lKQorICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKKyAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBuYW1lKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfaW1wb3J0X3dvX3BhY2thZ2Uoc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUgaW1wb3J0cyBjYW5ub3QgaGFwcGVuIHdpdGhvdXQgdGhlICdwYWNrYWdlJyBhcmd1bWVudCBiZWluZworICAgICAgICAjIHNldC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSwgJy5zdXBwb3J0JykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisgICAgcnVuX3VuaXR0ZXN0KEltcG9ydE1vZHVsZVRlc3RzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2luZGV4LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyYjQ0MgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2luZGV4LnB5CkBAIC0wLDAgKzEsMzIzIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgb3BlcmF0b3IKK2Zyb20gc3lzIGltcG9ydCBtYXhpbnQKK21heHNpemUgPSB0ZXN0X3N1cHBvcnQuTUFYX1B5X3NzaXplX3QKK21pbnNpemUgPSAtbWF4c2l6ZS0xCisKK2NsYXNzIG9sZHN0eWxlOgorICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmluZAorCitjbGFzcyBuZXdzdHlsZShvYmplY3QpOgorICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmluZAorCitjbGFzcyBUcmFwSW50KGludCk6CisgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworY2xhc3MgVHJhcExvbmcobG9uZyk6CisgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubyA9IG9sZHN0eWxlKCkKKyAgICAgICAgc2VsZi5uID0gbmV3c3R5bGUoKQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuby5pbmQgPSAtMgorICAgICAgICBzZWxmLm4uaW5kID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmluZGV4KHNlbGYubyksIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmluZGV4KHNlbGYubiksIDIpCisKKyAgICBkZWYgdGVzdF9zbGljZShzZWxmKToKKyAgICAgICAgc2VsZi5vLmluZCA9IDEKKyAgICAgICAgc2VsZi5uLmluZCA9IDIKKyAgICAgICAgc2xjID0gc2xpY2Uoc2VsZi5vLCBzZWxmLm8sIHNlbGYubykKKyAgICAgICAgY2hlY2tfc2xjID0gc2xpY2UoMSwgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGMuaW5kaWNlcyhzZWxmLm8pLCBjaGVja19zbGMuaW5kaWNlcygxKSkKKyAgICAgICAgc2xjID0gc2xpY2Uoc2VsZi5uLCBzZWxmLm4sIHNlbGYubikKKyAgICAgICAgY2hlY2tfc2xjID0gc2xpY2UoMiwgMiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGMuaW5kaWNlcyhzZWxmLm4pLCBjaGVja19zbGMuaW5kaWNlcygyKSkKKworICAgIGRlZiB0ZXN0X3dyYXBwZXJzKHNlbGYpOgorICAgICAgICBzZWxmLm8uaW5kID0gNAorICAgICAgICBzZWxmLm4uaW5kID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYgLl9faW5kZXhfXygpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC03TC5fX2luZGV4X18oKSwgLTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vLl9faW5kZXhfXygpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubi5fX2luZGV4X18oKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLl9faW5kZXhfXygpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLl9faW5kZXhfXygpLCAwKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NlcyhzZWxmKToKKyAgICAgICAgciA9IHJhbmdlKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbVHJhcEludCg1KTpUcmFwSW50KDEwKV0sIHJbNToxMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocltUcmFwTG9uZyg1KTpUcmFwTG9uZygxMCldLCByWzU6MTBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKFRyYXBJbnQoKSkuaW5kaWNlcygwKSwgKDAsMCwxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShUcmFwTG9uZygwKSkuaW5kaWNlcygwKSwgKDAsMCwxKSkKKworICAgIGRlZiB0ZXN0X2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLm8uaW5kID0gJ2R1bWInCisgICAgICAgIHNlbGYubi5pbmQgPSAnYmFkJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4LCBzZWxmLm8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXgsIHNlbGYubikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzbGljZShzZWxmLm8pLmluZGljZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2xpY2Uoc2VsZi5uKS5pbmRpY2VzLCAwKQorCisKK2NsYXNzIFNlcVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoaXMgdGVzdCBjYXNlIGlzbid0IHJ1biBkaXJlY3RseS4gSXQganVzdCBkZWZpbmVzIGNvbW1vbiB0ZXN0cworICAgICMgdG8gdGhlIGRpZmZlcmVudCBzZXF1ZW5jZSB0eXBlcyBiZWxvdworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vID0gb2xkc3R5bGUoKQorICAgICAgICBzZWxmLm4gPSBuZXdzdHlsZSgpCisgICAgICAgIHNlbGYubzIgPSBvbGRzdHlsZSgpCisgICAgICAgIHNlbGYubjIgPSBuZXdzdHlsZSgpCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5vLmluZCA9IC0yCisgICAgICAgIHNlbGYubi5pbmQgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5uXSwgc2VsZi5zZXFbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5vXSwgc2VsZi5zZXFbLTJdKQorCisgICAgZGVmIHRlc3Rfc2xpY2Uoc2VsZik6CisgICAgICAgIHNlbGYuby5pbmQgPSAxCisgICAgICAgIHNlbGYubzIuaW5kID0gMworICAgICAgICBzZWxmLm4uaW5kID0gMgorICAgICAgICBzZWxmLm4yLmluZCA9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVtzZWxmLm86c2VsZi5vMl0sIHNlbGYuc2VxWzE6M10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5uOnNlbGYubjJdLCBzZWxmLnNlcVsyOjRdKQorCisgICAgZGVmIHRlc3Rfc2xpY2VfYnVnNzUzMihzZWxmKToKKyAgICAgICAgc2VxbGVuID0gbGVuKHNlbGYuc2VxKQorICAgICAgICBzZWxmLm8uaW5kID0gaW50KHNlcWxlbiAqIDEuNSkKKyAgICAgICAgc2VsZi5uLmluZCA9IHNlcWxlbiArIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVtzZWxmLm86XSwgc2VsZi5zZXFbMDowXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVs6c2VsZi5vXSwgc2VsZi5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5uOl0sIHNlbGYuc2VxWzA6MF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbOnNlbGYubl0sIHNlbGYuc2VxKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuc2VxLCBDbGFzc2ljU2VxKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIFRoZXNlIHRlc3RzIGZhaWwgZm9yIENsYXNzaWNTZXEgKHNlZSBidWcgIzc1MzIpCisgICAgICAgIHNlbGYubzIuaW5kID0gLXNlcWxlbiAtIDIKKyAgICAgICAgc2VsZi5uMi5pbmQgPSAtaW50KHNlcWxlbiAqIDEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVtzZWxmLm8yOl0sIHNlbGYuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxWzpzZWxmLm8yXSwgc2VsZi5zZXFbMDowXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVtzZWxmLm4yOl0sIHNlbGYuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxWzpzZWxmLm4yXSwgc2VsZi5zZXFbMDowXSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKKyAgICAgICAgc2VsZi5vLmluZCA9IDMKKyAgICAgICAgc2VsZi5uLmluZCA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcSAqIHNlbGYubywgc2VsZi5zZXEgKiAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxICogc2VsZi5uLCBzZWxmLnNlcSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vICogc2VsZi5zZXEsIHNlbGYuc2VxICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4gKiBzZWxmLnNlcSwgc2VsZi5zZXEgKiAyKQorCisgICAgZGVmIHRlc3Rfd3JhcHBlcnMoc2VsZik6CisgICAgICAgIHNlbGYuby5pbmQgPSA0CisgICAgICAgIHNlbGYubi5pbmQgPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXEuX19nZXRpdGVtX18oc2VsZi5vKSwgc2VsZi5zZXFbNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXEuX19tdWxfXyhzZWxmLm8pLCBzZWxmLnNlcSAqIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXEuX19ybXVsX18oc2VsZi5vKSwgc2VsZi5zZXEgKiA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxLl9fZ2V0aXRlbV9fKHNlbGYubiksIHNlbGYuc2VxWzVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxLl9fbXVsX18oc2VsZi5uKSwgc2VsZi5zZXEgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxLl9fcm11bF9fKHNlbGYubiksIHNlbGYuc2VxICogNSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbVHJhcEludCgpXSwgc2VsZi5zZXFbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbVHJhcExvbmcoKV0sIHNlbGYuc2VxWzBdKQorCisgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuby5pbmQgPSAnZHVtYicKKyAgICAgICAgc2VsZi5uLmluZCA9ICdiYWQnCisgICAgICAgIGluZGV4b2JqID0gbGFtYmRhIHgsIG9iajogb2JqLnNlcVt4XQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluZGV4b2JqLCBzZWxmLm8sIHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5kZXhvYmosIHNlbGYubiwgc2VsZikKKyAgICAgICAgc2xpY2VvYmogPSBsYW1iZGEgeCwgb2JqOiBvYmouc2VxW3g6XQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNsaWNlb2JqLCBzZWxmLm8sIHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2xpY2VvYmosIHNlbGYubiwgc2VsZikKKworCitjbGFzcyBMaXN0VGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IFswLDEwLDIwLDMwLDQwLDUwXQorCisgICAgZGVmIHRlc3Rfc2V0ZGVsaXRlbShzZWxmKToKKyAgICAgICAgc2VsZi5vLmluZCA9IC0yCisgICAgICAgIHNlbGYubi5pbmQgPSAyCisgICAgICAgIGxzdCA9IGxpc3QoJ2FiIWNkZWZnaGkhaicpCisgICAgICAgIGRlbCBsc3Rbc2VsZi5vXQorICAgICAgICBkZWwgbHN0W3NlbGYubl0KKyAgICAgICAgbHN0W3NlbGYub10gPSAnWCcKKyAgICAgICAgbHN0W3NlbGYubl0gPSAnWScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIGxpc3QoJ2FiWWRlZmdoWGonKSkKKworICAgICAgICBsc3QgPSBbNSwgNiwgNywgOCwgOSwgMTAsIDExXQorICAgICAgICBsc3QuX19zZXRpdGVtX18oc2VsZi5uLCAiaGVyZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbNSwgNiwgImhlcmUiLCA4LCA5LCAxMCwgMTFdKQorICAgICAgICBsc3QuX19kZWxpdGVtX18oc2VsZi5uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgWzUsIDYsIDgsIDksIDEwLCAxMV0pCisKKyAgICBkZWYgdGVzdF9pbnBsYWNlX3JlcGVhdChzZWxmKToKKyAgICAgICAgc2VsZi5vLmluZCA9IDIKKyAgICAgICAgc2VsZi5uLmluZCA9IDMKKyAgICAgICAgbHN0ID0gWzYsIDRdCisgICAgICAgIGxzdCAqPSBzZWxmLm8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFs2LCA0LCA2LCA0XSkKKyAgICAgICAgbHN0ICo9IHNlbGYubgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgWzYsIDQsIDYsIDRdICogMykKKworICAgICAgICBsc3QgPSBbNSwgNiwgNywgOCwgOSwgMTFdCisgICAgICAgIGwyID0gbHN0Ll9faW11bF9fKHNlbGYubikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsMiwgbHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgWzUsIDYsIDcsIDgsIDksIDExXSAqIDMpCisKKworY2xhc3MgX0Jhc2VTZXE6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUpOgorICAgICAgICBzZWxmLl9saXN0ID0gbGlzdChpdGVyYWJsZSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlcHIoc2VsZi5fbGlzdCkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlzdCA9PSBvdGhlcgorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fbGlzdCkKKworICAgIGRlZiBfX211bF9fKHNlbGYsIG4pOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5fbGlzdCpuKQorICAgIF9fcm11bF9fID0gX19tdWxfXworCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3RbaW5kZXhdCisKKworY2xhc3MgX0dldFNsaWNlTWl4aW46CisKKyAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGopOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlzdC5fX2dldHNsaWNlX18oaSwgaikKKworCitjbGFzcyBDbGFzc2ljU2VxKF9CYXNlU2VxKTogcGFzcworY2xhc3MgTmV3U2VxKF9CYXNlU2VxLCBvYmplY3QpOiBwYXNzCitjbGFzcyBDbGFzc2ljU2VxRGVwcmVjYXRlZChfR2V0U2xpY2VNaXhpbiwgQ2xhc3NpY1NlcSk6IHBhc3MKK2NsYXNzIE5ld1NlcURlcHJlY2F0ZWQoX0dldFNsaWNlTWl4aW4sIE5ld1NlcSk6IHBhc3MKKworCitjbGFzcyBUdXBsZVRlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSAoMCwxMCwyMCwzMCw0MCw1MCkKKworY2xhc3MgU3RyaW5nVGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9ICJ0aGlzIGlzIGEgdGVzdCIKKworY2xhc3MgQnl0ZUFycmF5VGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IGJ5dGVhcnJheSgidGhpcyBpcyBhIHRlc3QiKQorCitjbGFzcyBVbmljb2RlVGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IHUidGhpcyBpcyBhIHRlc3QiCisKK2NsYXNzIENsYXNzaWNTZXFUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gQ2xhc3NpY1NlcSgoMCwxMCwyMCwzMCw0MCw1MCkpCisKK2NsYXNzIE5ld1NlcVRlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSBOZXdTZXEoKDAsMTAsMjAsMzAsNDAsNTApKQorCitjbGFzcyBDbGFzc2ljU2VxRGVwcmVjYXRlZFRlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSBDbGFzc2ljU2VxRGVwcmVjYXRlZCgoMCwxMCwyMCwzMCw0MCw1MCkpCisKK2NsYXNzIE5ld1NlcURlcHJlY2F0ZWRUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gTmV3U2VxRGVwcmVjYXRlZCgoMCwxMCwyMCwzMCw0MCw1MCkpCisKKworY2xhc3MgWFJhbmdlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfeHJhbmdlKHNlbGYpOgorICAgICAgICBuID0gbmV3c3R5bGUoKQorICAgICAgICBuLmluZCA9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4cmFuZ2UoMSwgMjApW25dLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhyYW5nZSgxLCAyMCkuX19nZXRpdGVtX18obiksIDYpCisKK2NsYXNzIE92ZXJmbG93VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBvcyA9IDIqKjEwMAorICAgICAgICBzZWxmLm5lZyA9IC1zZWxmLnBvcworCisgICAgZGVmIHRlc3RfbGFyZ2VfbG9uZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wb3MuX19pbmRleF9fKCksIHNlbGYucG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmVnLl9faW5kZXhfXygpLCBzZWxmLm5lZykKKworICAgIGRlZiBfZ2V0aXRlbV9oZWxwZXIoc2VsZiwgYmFzZSk6CisgICAgICAgIGNsYXNzIEdldEl0ZW0oYmFzZSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF4aW50ICMgY2Fubm90IHJldHVybiBsb25nIGhlcmUKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiBrZXkKKyAgICAgICAgeCA9IEdldEl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5wb3NdLCBzZWxmLnBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W3NlbGYubmVnXSwgc2VsZi5uZWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvc10uaW5kaWNlcyhtYXhzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbWF4c2l6ZSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvczoxXS5pbmRpY2VzKG1heHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBtYXhzaXplLCAxKSkKKworICAgIGRlZiBfZ2V0c2xpY2VfaGVscGVyX2RlcHJlY2F0ZWQoc2VsZiwgYmFzZSk6CisgICAgICAgIGNsYXNzIEdldEl0ZW0oYmFzZSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF4aW50ICMgY2Fubm90IHJldHVybiBsb25nIGhlcmUKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiBrZXkKKyAgICAgICAgICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGksIGoKKyAgICAgICAgeCA9IEdldEl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5wb3NdLCBzZWxmLnBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W3NlbGYubmVnXSwgc2VsZi5uZWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvc10sIChtYXhpbnQrbWluc2l6ZSwgbWF4c2l6ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvczoxXS5pbmRpY2VzKG1heHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBtYXhzaXplLCAxKSkKKworICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIHNlbGYuX2dldGl0ZW1faGVscGVyKG9iamVjdCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5fZ2V0c2xpY2VfaGVscGVyX2RlcHJlY2F0ZWQob2JqZWN0KQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbV9jbGFzc2ljKHNlbGYpOgorICAgICAgICBjbGFzcyBFbXB0eTogcGFzcworICAgICAgICAjIFhYWCBUaGlzIHRlc3QgZmFpbHMgKHNlZSBidWcgIzc1MzIpCisgICAgICAgICNzZWxmLl9nZXRpdGVtX2hlbHBlcihFbXB0eSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5fZ2V0c2xpY2VfaGVscGVyX2RlcHJlY2F0ZWQoRW1wdHkpCisKKyAgICBkZWYgdGVzdF9zZXF1ZW5jZV9yZXBlYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxhbWJkYTogImEiICogc2VsZi5wb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxhbWJkYTogImEiICogc2VsZi5uZWcpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIEJhc2VUZXN0Q2FzZSwKKyAgICAgICAgTGlzdFRlc3RDYXNlLAorICAgICAgICBUdXBsZVRlc3RDYXNlLAorICAgICAgICBCeXRlQXJyYXlUZXN0Q2FzZSwKKyAgICAgICAgU3RyaW5nVGVzdENhc2UsCisgICAgICAgIFVuaWNvZGVUZXN0Q2FzZSwKKyAgICAgICAgQ2xhc3NpY1NlcVRlc3RDYXNlLAorICAgICAgICBOZXdTZXFUZXN0Q2FzZSwKKyAgICAgICAgWFJhbmdlVGVzdENhc2UsCisgICAgICAgIE92ZXJmbG93VGVzdENhc2UsCisgICAgKQorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgIENsYXNzaWNTZXFEZXByZWNhdGVkVGVzdENhc2UsCisgICAgICAgICAgICBOZXdTZXFEZXByZWNhdGVkVGVzdENhc2UsCisgICAgICAgICkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGRjZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQpAQCAtMCwwICsxLDg0NSBAQAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCBkYXRldGltZQorZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKK2Zyb20gVXNlckRpY3QgaW1wb3J0IFVzZXJEaWN0CisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfcHkza193YXJuaW5ncworCit3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwgU3ludGF4V2FybmluZyksCisgICAgICAgIHF1aWV0PVRydWUpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIgYXMgbW9kCisgICAgZnJvbSB0ZXN0IGltcG9ydCBpbnNwZWN0X2ZvZGRlcjIgYXMgbW9kMgorCisjIEMgbW9kdWxlIGZvciB0ZXN0X2ZpbmRzb3VyY2VfYmluYXJ5CitpbXBvcnQgdW5pY29kZWRhdGEKKworIyBGdW5jdGlvbnMgdGVzdGVkIGluIHRoaXMgc3VpdGU6CisjIGlzbW9kdWxlLCBpc2NsYXNzLCBpc21ldGhvZCwgaXNmdW5jdGlvbiwgaXN0cmFjZWJhY2ssIGlzZnJhbWUsIGlzY29kZSwKKyMgaXNidWlsdGluLCBpc3JvdXRpbmUsIGlzZ2VuZXJhdG9yLCBpc2dlbmVyYXRvcmZ1bmN0aW9uLCBnZXRtZW1iZXJzLAorIyBnZXRkb2MsIGdldGZpbGUsIGdldG1vZHVsZSwgZ2V0c291cmNlZmlsZSwgZ2V0Y29tbWVudHMsIGdldHNvdXJjZSwKKyMgZ2V0Y2xhc3N0cmVlLCBnZXRhcmdzcGVjLCBnZXRhcmd2YWx1ZXMsIGZvcm1hdGFyZ3NwZWMsIGZvcm1hdGFyZ3ZhbHVlcywKKyMgY3VycmVudGZyYW1lLCBzdGFjaywgdHJhY2UsIGlzZGF0YWRlc2NyaXB0b3IKKworIyBOT1RFOiBUaGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIHRlc3RzIHJlbGF0aW5nIHRvIGludGVyYWN0aW9uIHdpdGgKKyMgICAgICAgemlwaW1wb3J0IGluIHRoZSB0ZXN0X3ppcGltcG9ydF9zdXBwb3J0IHRlc3QgbW9kdWxlLgorCittb2RmaWxlID0gbW9kLl9fZmlsZV9fCitpZiBtb2RmaWxlLmVuZHN3aXRoKCgnYycsICdvJykpOgorICAgIG1vZGZpbGUgPSBtb2RmaWxlWzotMV0KKworaW1wb3J0IF9fYnVpbHRpbl9fCisKK3RyeToKKyAgICAxIC8vIDAKK2V4Y2VwdDoKKyAgICB0YiA9IHN5cy5leGNfdHJhY2ViYWNrCisKK2dpdCA9IG1vZC5TdHVwaWRHaXQoKQorCitjbGFzcyBJc1Rlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwcmVkaWNhdGVzID0gc2V0KFtpbnNwZWN0LmlzYnVpbHRpbiwgaW5zcGVjdC5pc2NsYXNzLCBpbnNwZWN0LmlzY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmlzZnJhbWUsIGluc3BlY3QuaXNmdW5jdGlvbiwgaW5zcGVjdC5pc21ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmlzbW9kdWxlLCBpbnNwZWN0LmlzdHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNnZW5lcmF0b3IsIGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbl0pCisKKyAgICBkZWYgaXN0ZXN0KHNlbGYsIHByZWRpY2F0ZSwgZXhwKToKKyAgICAgICAgb2JqID0gZXZhbChleHApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcmVkaWNhdGUob2JqKSwgJyVzKCVzKScgJSAocHJlZGljYXRlLl9fbmFtZV9fLCBleHApKQorCisgICAgICAgIGZvciBvdGhlciBpbiBzZWxmLnByZWRpY2F0ZXMgLSBzZXQoW3ByZWRpY2F0ZV0pOgorICAgICAgICAgICAgaWYgcHJlZGljYXRlID09IGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbiBhbmRcCisgICAgICAgICAgICAgICBvdGhlciA9PSBpbnNwZWN0LmlzZnVuY3Rpb246CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3RoZXIob2JqKSwgJ25vdCAlcyglcyknICUgKG90aGVyLl9fbmFtZV9fLCBleHApKQorCitkZWYgZ2VuZXJhdG9yX2Z1bmN0aW9uX2V4YW1wbGUoc2VsZik6CisgICAgZm9yIGkgaW4geHJhbmdlKDIpOgorICAgICAgICB5aWVsZCBpCisKK2NsYXNzIFRlc3RQcmVkaWNhdGVzKElzVGVzdEJhc2UpOgorICAgIGRlZiB0ZXN0X3NpeHRlZW4oc2VsZik6CisgICAgICAgIGNvdW50ID0gbGVuKGZpbHRlcihsYW1iZGEgeDp4LnN0YXJ0c3dpdGgoJ2lzJyksIGRpcihpbnNwZWN0KSkpCisgICAgICAgICMgVGhpcyB0ZXN0IGlzIGhlcmUgZm9yIHJlbWVtYmVyIHlvdSB0byB1cGRhdGUgRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKKyAgICAgICAgIyB3aGljaCBjbGFpbXMgdGhlcmUgYXJlIDE2IHN1Y2ggZnVuY3Rpb25zCisgICAgICAgIGV4cGVjdGVkID0gMTYKKyAgICAgICAgZXJyX21zZyA9ICJUaGVyZSBhcmUgJWQgKG5vdCAlZCkgaXMqIGZ1bmN0aW9ucyIgJSAoY291bnQsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBleHBlY3RlZCwgZXJyX21zZykKKworCisgICAgZGVmIHRlc3RfZXhjbHVkaW5nX3ByZWRpY2F0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNidWlsdGluLCAnc3lzLmV4aXQnKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzYnVpbHRpbiwgJ1tdLmFwcGVuZCcpCisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNjb2RlLCAnbW9kLnNwYW0uZnVuY19jb2RlJykKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2ZyYW1lLCAndGIudGJfZnJhbWUnKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzZnVuY3Rpb24sICdtb2Quc3BhbScpCisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNtZXRob2QsICdtb2QuU3R1cGlkR2l0LmFidXNlJykKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc21ldGhvZCwgJ2dpdC5hcmd1ZScpCisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNtb2R1bGUsICdtb2QnKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzdHJhY2ViYWNrLCAndGInKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzZGF0YWRlc2NyaXB0b3IsICdfX2J1aWx0aW5fXy5maWxlLmNsb3NlZCcpCisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNkYXRhZGVzY3JpcHRvciwgJ19fYnVpbHRpbl9fLmZpbGUuc29mdHNwYWNlJykKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2dlbmVyYXRvciwgJyh4IGZvciB4IGluIHhyYW5nZSgyKSknKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24sICdnZW5lcmF0b3JfZnVuY3Rpb25fZXhhbXBsZScpCisgICAgICAgIGlmIGhhc2F0dHIodHlwZXMsICdHZXRTZXREZXNjcmlwdG9yVHlwZScpOgorICAgICAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2dldHNldGRlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSh0Yi50Yl9mcmFtZSkuZl9sb2NhbHMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzZ2V0c2V0ZGVzY3JpcHRvcih0eXBlKHRiLnRiX2ZyYW1lKS5mX2xvY2FscykpCisgICAgICAgIGlmIGhhc2F0dHIodHlwZXMsICdNZW1iZXJEZXNjcmlwdG9yVHlwZScpOgorICAgICAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc21lbWJlcmRlc2NyaXB0b3IsICdkYXRldGltZS50aW1lZGVsdGEuZGF5cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNtZW1iZXJkZXNjcmlwdG9yKGRhdGV0aW1lLnRpbWVkZWx0YS5kYXlzKSkKKworICAgIGRlZiB0ZXN0X2lzcm91dGluZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNyb3V0aW5lKG1vZC5zcGFtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNyb3V0aW5lKFtdLmNvdW50KSkKKworICAgIGRlZiB0ZXN0X2lzY2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNjbGFzcywgJ21vZC5TdHVwaWRHaXQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5pc2NsYXNzKGxpc3QpKQorCisgICAgICAgIGNsYXNzIG5ld3N0eWxlKG9iamVjdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNjbGFzcyhuZXdzdHlsZSkpCisKKyAgICAgICAgY2xhc3MgQ3VzdG9tR2V0YXR0cihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2NsYXNzKEN1c3RvbUdldGF0dHIoKSkpCisKKyAgICBkZWYgdGVzdF9nZXRfc2xvdF9tZW1iZXJzKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAoImEiLCAiYiIpCisKKyAgICAgICAgeCA9IEMoKQorICAgICAgICB4LmEgPSA0MgorICAgICAgICBtZW1iZXJzID0gZGljdChpbnNwZWN0LmdldG1lbWJlcnMoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCBtZW1iZXJzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdiJywgbWVtYmVycykKKworICAgIGRlZiB0ZXN0X2lzYWJzdHJhY3Qoc2VsZik6CisgICAgICAgIGZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorCisgICAgICAgIGNsYXNzIEFic3RyYWN0Q2xhc3NFeGFtcGxlKG9iamVjdCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgICAgICAgICBAYWJzdHJhY3RtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIENsYXNzRXhhbXBsZShBYnN0cmFjdENsYXNzRXhhbXBsZSk6CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhID0gQ2xhc3NFeGFtcGxlKCkKKworICAgICAgICAjIFRlc3QgZ2VuZXJhbCBiZWhhdmlvdXIuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LmlzYWJzdHJhY3QoQWJzdHJhY3RDbGFzc0V4YW1wbGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNhYnN0cmFjdChDbGFzc0V4YW1wbGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNhYnN0cmFjdChhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzYWJzdHJhY3QoaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzYWJzdHJhY3QoNSkpCisKKworY2xhc3MgVGVzdEludGVycHJldGVyU3RhY2soSXNUZXN0QmFzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBnaXQuYWJ1c2UoNywgOCwgOSkKKworICAgIGRlZiB0ZXN0X2FidXNlX2RvbmUoc2VsZik6CisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXN0cmFjZWJhY2ssICdnaXQuZXhbMl0nKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzZnJhbWUsICdtb2QuZnInKQorCisgICAgZGVmIHRlc3Rfc3RhY2soc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obW9kLnN0KSA+PSA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5zdFswXVsxOl0sCisgICAgICAgICAgICAgKG1vZGZpbGUsIDE2LCAnZWdncycsIFsnICAgIHN0ID0gaW5zcGVjdC5zdGFjaygpXG4nXSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLnN0WzFdWzE6XSwKKyAgICAgICAgICAgICAobW9kZmlsZSwgOSwgJ3NwYW0nLCBbJyAgICBlZ2dzKGIgKyBkLCBjICsgZilcbiddLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Quc3RbMl1bMTpdLAorICAgICAgICAgICAgIChtb2RmaWxlLCA0MywgJ2FyZ3VlJywgWycgICAgICAgICAgICBzcGFtKGEsIGIsIGMpXG4nXSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLnN0WzNdWzE6XSwKKyAgICAgICAgICAgICAobW9kZmlsZSwgMzksICdhYnVzZScsIFsnICAgICAgICBzZWxmLmFyZ3VlKGEsIGIsIGMpXG4nXSwgMCkpCisKKyAgICBkZWYgdGVzdF90cmFjZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2l0LnRyKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXQudHJbMF1bMTpdLCAobW9kZmlsZSwgNDMsICdhcmd1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICAgICAgICAgICAgc3BhbShhLCBiLCBjKVxuJ10sIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdC50clsxXVsxOl0sIChtb2RmaWxlLCA5LCAnc3BhbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICAgIGVnZ3MoYiArIGQsIGMgKyBmKVxuJ10sIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdC50clsyXVsxOl0sIChtb2RmaWxlLCAxOCwgJ2VnZ3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgICBxID0geSAvLyAwXG4nXSwgMCkpCisKKyAgICBkZWYgdGVzdF9mcmFtZShzZWxmKToKKyAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGxvY2FscyA9IGluc3BlY3QuZ2V0YXJndmFsdWVzKG1vZC5mcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJ3gnLCAneSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcmFyZ3MsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFya3csIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxzLCB7J3gnOiAxMSwgJ3AnOiAxMSwgJ3knOiAxNH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5mb3JtYXRhcmd2YWx1ZXMoYXJncywgdmFyYXJncywgdmFya3csIGxvY2FscyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyh4PTExLCB5PTE0KScpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19mcmFtZShzZWxmKToKKyAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGxvY2FscyA9IGluc3BlY3QuZ2V0YXJndmFsdWVzKG1vZC5mci5mX2JhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWydhJywgJ2InLCAnYycsICdkJywgWydlJywgWydmJ11dXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJhcmdzLCAnZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFya3csICdoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmZvcm1hdGFyZ3ZhbHVlcyhhcmdzLCB2YXJhcmdzLCB2YXJrdywgbG9jYWxzKSwKKyAgICAgICAgICAgICAnKGE9NywgYj04LCBjPTksIGQ9MywgKGU9NCwgKGY9NSwpKSwgKmc9KCksICoqaD17fSknKQorCitjbGFzcyBHZXRTb3VyY2VCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZS4KKyAgICBmb2RkZXJGaWxlID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICB3aXRoIG9wZW4oaW5zcGVjdC5nZXRzb3VyY2VmaWxlKHNlbGYuZm9kZGVyRmlsZSkpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBmcC5yZWFkKCkKKworICAgIGRlZiBzb3VyY2VyYW5nZShzZWxmLCB0b3AsIGJvdHRvbSk6CisgICAgICAgIGxpbmVzID0gc2VsZi5zb3VyY2Uuc3BsaXQoIlxuIikKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lc1t0b3AtMTpib3R0b21dKSArICJcbiIKKworICAgIGRlZiBhc3NlcnRTb3VyY2VFcXVhbChzZWxmLCBvYmosIHRvcCwgYm90dG9tKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZShvYmopLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlcmFuZ2UodG9wLCBib3R0b20pKQorCitjbGFzcyBUZXN0UmV0cmlldmluZ1NvdXJjZUNvZGUoR2V0U291cmNlQmFzZSk6CisgICAgZm9kZGVyRmlsZSA9IG1vZAorCisgICAgZGVmIHRlc3RfZ2V0Y2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xhc3NlcyA9IGluc3BlY3QuZ2V0bWVtYmVycyhtb2QsIGluc3BlY3QuaXNjbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ0Zlc3RlcmluZ0dvYicsIG1vZC5GZXN0ZXJpbmdHb2IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ01hbG9kb3JvdXNQZXJ2ZXJ0JywgbW9kLk1hbG9kb3JvdXNQZXJ2ZXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdQYXJyb3REcm9wcGluZ3MnLCBtb2QuUGFycm90RHJvcHBpbmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdTdHVwaWRHaXQnLCBtb2QuU3R1cGlkR2l0KV0pCisgICAgICAgIHRyZWUgPSBpbnNwZWN0LmdldGNsYXNzdHJlZShbY2xzWzFdIGZvciBjbHMgaW4gY2xhc3Nlc10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZC5QYXJyb3REcm9wcGluZ3MsICgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZC5TdHVwaWRHaXQsICgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2QuTWFsb2Rvcm91c1BlcnZlcnQsIChtb2QuU3R1cGlkR2l0LCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2QuRmVzdGVyaW5nR29iLCAobW9kLk1hbG9kb3JvdXNQZXJ2ZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLlBhcnJvdERyb3BwaW5ncykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZ2V0ZnVuY3Rpb25zKHNlbGYpOgorICAgICAgICBmdW5jdGlvbnMgPSBpbnNwZWN0LmdldG1lbWJlcnMobW9kLCBpbnNwZWN0LmlzZnVuY3Rpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb25zLCBbKCdlZ2dzJywgbW9kLmVnZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnc3BhbScsIG1vZC5zcGFtKV0pCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9nZXRkb2Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRkb2MobW9kKSwgJ0EgbW9kdWxlIGRvY3N0cmluZy4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0ZG9jKG1vZC5TdHVwaWRHaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdBIGxvbmdlcixcblxuaW5kZW50ZWRcblxuZG9jc3RyaW5nLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRkb2MoZ2l0LmFidXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQW5vdGhlclxuXG5kb2NzdHJpbmdcblxuY29udGFpbmluZ1xuXG50YWJzJykKKworICAgIGRlZiB0ZXN0X2NsZWFuZG9jKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuY2xlYW5kb2MoJ0FuXG4gICAgaW5kZW50ZWRcbiAgICBkb2NzdHJpbmcuJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuXG5pbmRlbnRlZFxuZG9jc3RyaW5nLicpCisKKyAgICBkZWYgdGVzdF9nZXRjb21tZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGNvbW1lbnRzKG1vZCksICcjIGxpbmUgMVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGNvbW1lbnRzKG1vZC5TdHVwaWRHaXQpLCAnIyBsaW5lIDIwXG4nKQorCisgICAgZGVmIHRlc3RfZ2V0bW9kdWxlKHNlbGYpOgorICAgICAgICAjIENoZWNrIGFjdHVhbCBtb2R1bGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldG1vZHVsZShtb2QpLCBtb2QpCisgICAgICAgICMgQ2hlY2sgY2xhc3MgKHVzZXMgX19tb2R1bGVfXyBhdHRyaWJ1dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRtb2R1bGUobW9kLlN0dXBpZEdpdCksIG1vZCkKKyAgICAgICAgIyBDaGVjayBhIG1ldGhvZCAobm8gX19tb2R1bGVfXyBhdHRyaWJ1dGUsIGZhbGxzIGJhY2sgdG8gZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRtb2R1bGUobW9kLlN0dXBpZEdpdC5hYnVzZSksIG1vZCkKKyAgICAgICAgIyBEbyBpdCBhZ2FpbiAoY2hlY2sgdGhlIGNhY2hpbmcgaXNuJ3QgYnJva2VuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0bW9kdWxlKG1vZC5TdHVwaWRHaXQuYWJ1c2UpLCBtb2QpCisgICAgICAgICMgQ2hlY2sgYSBidWlsdGluCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRtb2R1bGUoc3RyKSwgc3lzLm1vZHVsZXNbIl9fYnVpbHRpbl9fIl0pCisgICAgICAgICMgQ2hlY2sgZmlsZW5hbWUgb3ZlcnJpZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldG1vZHVsZShOb25lLCBtb2RmaWxlKSwgbW9kKQorCisgICAgZGVmIHRlc3RfZ2V0c291cmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKGdpdC5hYnVzZSwgMjksIDM5KQorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZC5TdHVwaWRHaXQsIDIxLCA0NikKKworICAgIGRlZiB0ZXN0X2dldHNvdXJjZWZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2VmaWxlKG1vZC5zcGFtKSwgbW9kZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZWZpbGUoZ2l0LmFidXNlKSwgbW9kZmlsZSkKKyAgICAgICAgZm4gPSAiX25vbl9leGlzdGluZ19maWxlbmFtZV91c2VkX2Zvcl9zb3VyY2VmaWxlX3Rlc3QucHkiCisgICAgICAgIGNvID0gY29tcGlsZSgiTm9uZSIsIGZuLCAiZXhlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2VmaWxlKGNvKSwgTm9uZSkKKyAgICAgICAgbGluZWNhY2hlLmNhY2hlW2NvLmNvX2ZpbGVuYW1lXSA9ICgxLCBOb25lLCAiTm9uZSIsIGNvLmNvX2ZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlZmlsZShjbyksIGZuKQorCisgICAgZGVmIHRlc3RfZ2V0ZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGZpbGUobW9kLlN0dXBpZEdpdCksIG1vZC5fX2ZpbGVfXykKKworICAgIGRlZiB0ZXN0X2dldG1vZHVsZV9yZWN1cnNpb24oc2VsZik6CisgICAgICAgIGZyb20gdHlwZXMgaW1wb3J0IE1vZHVsZVR5cGUKKyAgICAgICAgbmFtZSA9ICdfX2luc3BlY3RfZHVtbXknCisgICAgICAgIG0gPSBzeXMubW9kdWxlc1tuYW1lXSA9IE1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgbS5fX2ZpbGVfXyA9ICI8c3RyaW5nPiIgIyBob3BlZnVsbHkgbm90IGEgcmVhbCBmaWxlbmFtZS4uLgorICAgICAgICBtLl9fbG9hZGVyX18gPSAiZHVtbXkiICAjIHByZXRlbmQgdGhlIGZpbGVuYW1lIGlzIHVuZGVyc3Rvb2QgYnkgYSBsb2FkZXIKKyAgICAgICAgZXhlYyAiZGVmIHgoKTogcGFzcyIgaW4gbS5fX2RpY3RfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlZmlsZShtLnguZnVuY19jb2RlKSwgJzxzdHJpbmc+JykKKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgIGluc3BlY3QuZ2V0bW9kdWxlKGNvbXBpbGUoJ2E9MTAnLCcnLCdzaW5nbGUnKSkKKworICAgIGRlZiB0ZXN0X3Byb2NlZWRfd2l0aF9mYWtlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAnJydkb2N0ZXN0IG1vbmtleXBhdGNoZXMgbGluZWNhY2hlIHRvIGVuYWJsZSBpbnNwZWN0aW9uJycnCisgICAgICAgIGZuLCBzb3VyY2UgPSAnPHRlc3Q+JywgJ2RlZiB4KCk6IHBhc3NcbicKKyAgICAgICAgZ2V0bGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMKKyAgICAgICAgZGVmIG1vbmtleShmaWxlbmFtZSwgbW9kdWxlX2dsb2JhbHM9Tm9uZSk6CisgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSBmbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldGxpbmVzKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscykKKyAgICAgICAgbGluZWNhY2hlLmdldGxpbmVzID0gbW9ua2V5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5zID0ge30KKyAgICAgICAgICAgIGV4ZWMgY29tcGlsZShzb3VyY2UsIGZuLCAnc2luZ2xlJykgaW4gbnMKKyAgICAgICAgICAgIGluc3BlY3QuZ2V0c291cmNlKG5zWyJ4Il0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsaW5lY2FjaGUuZ2V0bGluZXMgPSBnZXRsaW5lcworCitjbGFzcyBUZXN0RGVjb3JhdG9ycyhHZXRTb3VyY2VCYXNlKToKKyAgICBmb2RkZXJGaWxlID0gbW9kMgorCisgICAgZGVmIHRlc3Rfd3JhcHBlZF9kZWNvcmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi53cmFwcGVkLCAxNCwgMTcpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNpbmdfZGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIuZ29uZSwgOSwgMTApCisKK2NsYXNzIFRlc3RPbmVsaW5lcnMoR2V0U291cmNlQmFzZSk6CisgICAgZm9kZGVyRmlsZSA9IG1vZDIKKyAgICBkZWYgdGVzdF9vbmVsaW5lX2xhbWJkYShzZWxmKToKKyAgICAgICAgIyBUZXN0IGluc3BlY3QuZ2V0c291cmNlIHdpdGggYSBvbmUtbGluZSBsYW1iZGEgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5vbGwsIDI1LCAyNSkKKworICAgIGRlZiB0ZXN0X3RocmVlbGluZV9sYW1iZGEoc2VsZik6CisgICAgICAgICMgVGVzdCBpbnNwZWN0LmdldHNvdXJjZSB3aXRoIGEgdGhyZWUtbGluZSBsYW1iZGEgZnVuY3Rpb24sCisgICAgICAgICMgd2hlcmUgdGhlIHNlY29uZCBhbmQgdGhpcmQgbGluZXMgYXJlIF9ub3RfIGluZGVudGVkLgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIudGxsLCAyOCwgMzApCisKKyAgICBkZWYgdGVzdF90d29saW5lX2luZGVudGVkX2xhbWJkYShzZWxmKToKKyAgICAgICAgIyBUZXN0IGluc3BlY3QuZ2V0c291cmNlIHdpdGggYSB0d28tbGluZSBsYW1iZGEgZnVuY3Rpb24sCisgICAgICAgICMgd2hlcmUgdGhlIHNlY29uZCBsaW5lIF9pc18gaW5kZW50ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi50bGxpLCAzMywgMzQpCisKKyAgICBkZWYgdGVzdF9vbmVsaW5lZnVuYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGluc3BlY3QuZ2V0c291cmNlIHdpdGggYSByZWd1bGFyIG9uZS1saW5lIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIub25lbGluZWZ1bmMsIDM3LCAzNykKKworICAgIGRlZiB0ZXN0X21hbnlhcmdzKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW5zcGVjdC5nZXRzb3VyY2Ugd2l0aCBhIHJlZ3VsYXIgZnVuY3Rpb24gd2hlcmUKKyAgICAgICAgIyB0aGUgYXJndW1lbnRzIGFyZSBvbiB0d28gbGluZXMgYW5kIF9ub3RfIGluZGVudGVkIGFuZAorICAgICAgICAjIHRoZSBib2R5IG9uIHRoZSBzZWNvbmQgbGluZSB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cy4KKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLm1hbnlhcmdzLCA0MCwgNDEpCisKKyAgICBkZWYgdGVzdF90d29saW5lZnVuYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGluc3BlY3QuZ2V0c291cmNlIHdpdGggYSByZWd1bGFyIGZ1bmN0aW9uIHdoZXJlCisgICAgICAgICMgdGhlIGJvZHkgaXMgb24gdHdvIGxpbmVzLCBmb2xsb3dpbmcgdGhlIGFyZ3VtZW50IGxpc3QgYW5kCisgICAgICAgICMgY29udGludWVkIG9uIHRoZSBuZXh0IGxpbmUgYnkgYSBcXC4KKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLnR3b2xpbmVmdW5jLCA0NCwgNDUpCisKKyAgICBkZWYgdGVzdF9sYW1iZGFfaW5fbGlzdChzZWxmKToKKyAgICAgICAgIyBUZXN0IGluc3BlY3QuZ2V0c291cmNlIHdpdGggYSBvbmUtbGluZSBsYW1iZGEgZnVuY3Rpb24KKyAgICAgICAgIyBkZWZpbmVkIGluIGEgbGlzdCwgaW5kZW50ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5hWzFdLCA0OSwgNDkpCisKKyAgICBkZWYgdGVzdF9hbm9ueW1vdXMoc2VsZik6CisgICAgICAgICMgVGVzdCBpbnNwZWN0LmdldHNvdXJjZSB3aXRoIGEgbGFtYmRhIGZ1bmN0aW9uIGRlZmluZWQKKyAgICAgICAgIyBhcyBhcmd1bWVudCB0byBhbm90aGVyIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIuYW5vbnltb3VzLCA1NSwgNTUpCisKK2NsYXNzIFRlc3RCdWdneUNhc2VzKEdldFNvdXJjZUJhc2UpOgorICAgIGZvZGRlckZpbGUgPSBtb2QyCisKKyAgICBkZWYgdGVzdF93aXRoX2NvbW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi53aXRoX2NvbW1lbnQsIDU4LCA1OSkKKworICAgIGRlZiB0ZXN0X211bHRpbGluZV9zaWcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5tdWx0aWxpbmVfc2lnWzBdLCA2MywgNjQpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfY2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5mdW5jNjkoKS5mdW5jNzEsIDcxLCA3MikKKworICAgIGRlZiB0ZXN0X29uZV9saW5lcl9mb2xsb3dlZF9ieV9ub25fbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLmZ1bmM3NywgNzcsIDc3KQorCisgICAgZGVmIHRlc3Rfb25lX2xpbmVyX2RlZGVudF9ub25fbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLmNsczgyLmZ1bmM4MywgODMsIDgzKQorCisgICAgZGVmIHRlc3Rfd2l0aF9jb21tZW50X2luc3RlYWRfb2ZfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIuZnVuYzg4LCA4OCwgOTApCisKKyAgICBkZWYgdGVzdF9tZXRob2RfaW5fZHluYW1pY19jbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLm1ldGhvZF9pbl9keW5hbWljX2NsYXNzLCA5NSwgOTcpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKAorICAgICAgICBub3QgaGFzYXR0cih1bmljb2RlZGF0YSwgJ19fZmlsZV9fJykgb3IKKyAgICAgICAgICAgIHVuaWNvZGVkYXRhLl9fZmlsZV9fWy00Ol0gaW4gKCIucHljIiwgIi5weW8iKSwKKyAgICAgICAgInVuaWNvZGVkYXRhIGlzIG5vdCBhbiBleHRlcm5hbCBiaW5hcnkgbW9kdWxlIikKKyAgICBkZWYgdGVzdF9maW5kc291cmNlX2JpbmFyeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIHVuaWNvZGVkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIHVuaWNvZGVkYXRhKQorCisgICAgZGVmIHRlc3RfZmluZHNvdXJjZV9jb2RlX2luX2xpbmVjYWNoZShzZWxmKToKKyAgICAgICAgbGluZXMgPSBbIng9MSJdCisgICAgICAgIGNvID0gY29tcGlsZShsaW5lc1swXSwgIl9keW5hbWljYWxseV9jcmVhdGVkX2ZpbGUiLCAiZXhlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgY28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCBjbykKKyAgICAgICAgbGluZWNhY2hlLmNhY2hlW2NvLmNvX2ZpbGVuYW1lXSA9ICgxLCBOb25lLCBsaW5lcywgY28uY29fZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5maW5kc291cmNlKGNvKSwgKGxpbmVzLDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlKGNvKSwgbGluZXNbMF0pCisKKyAgICBkZWYgdGVzdF9maW5kc291cmNlX3dpdGhvdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGZvciBmbmFtZSBpbiBbJycsICc8c3RyaW5nPiddOgorICAgICAgICAgICAgY28gPSBjb21waWxlKCd4PTEnLCBmbmFtZSwgImV4ZWMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCBjbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCBjbykKKworCitjbGFzcyBfQnJva2VuRGF0YURlc2NyaXB0b3Iob2JqZWN0KToKKyAgICAiIiIKKyAgICBBIGJyb2tlbiBkYXRhIGRlc2NyaXB0b3IuIFNlZSBidWcgIzE3ODUuCisgICAgIiIiCisgICAgZGVmIF9fZ2V0X18oKmFyZ3MpOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldF9fIGRhdGEgZGVzY3JpcHRvcnMiKQorCisgICAgZGVmIF9fc2V0X18oKmFyZ3MpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKworICAgIGRlZiBfX2dldGF0dHJfXygqYXJncyk6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0YXR0cl9fIGRhdGEgZGVzY3JpcHRvcnMiKQorCisKK2NsYXNzIF9Ccm9rZW5NZXRob2REZXNjcmlwdG9yKG9iamVjdCk6CisgICAgIiIiCisgICAgQSBicm9rZW4gbWV0aG9kIGRlc2NyaXB0b3IuIFNlZSBidWcgIzE3ODUuCisgICAgIiIiCisgICAgZGVmIF9fZ2V0X18oKmFyZ3MpOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldF9fIG1ldGhvZCBkZXNjcmlwdG9ycyIpCisKKyAgICBkZWYgX19nZXRhdHRyX18oKmFyZ3MpOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldGF0dHJfXyBtZXRob2QgZGVzY3JpcHRvcnMiKQorCisKKyMgSGVscGVyIGZvciB0ZXN0aW5nIGNsYXNzaWZ5X2NsYXNzX2F0dHJzLgorZGVmIGF0dHJzX3dvX29ianMoY2xzKToKKyAgICByZXR1cm4gW3RbOjNdIGZvciB0IGluIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoY2xzKV0KKworCitjbGFzcyBUZXN0Q2xhc3Nlc0FuZEZ1bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY2xhc3NpY19tcm8oc2VsZik6CisgICAgICAgICMgVGVzdCBjbGFzc2ljLWNsYXNzIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyLgorICAgICAgICBjbGFzcyBBOiAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6IHBhc3MKKyAgICAgICAgY2xhc3MgQyhBKTogcGFzcworICAgICAgICBjbGFzcyBEKEIsIEMpOiBwYXNzCisKKyAgICAgICAgZXhwZWN0ZWQgPSAoRCwgQiwgQSwgQykKKyAgICAgICAgZ290ID0gaW5zcGVjdC5nZXRtcm8oRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgZGVmIHRlc3RfbmV3c3R5bGVfbXJvKHNlbGYpOgorICAgICAgICAjIFRoZSBzYW1lIHcvIG5ldy1jbGFzcyBNUk8uCisgICAgICAgIGNsYXNzIEEob2JqZWN0KTogICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOiBwYXNzCisgICAgICAgIGNsYXNzIEMoQSk6IHBhc3MKKyAgICAgICAgY2xhc3MgRChCLCBDKTogcGFzcworCisgICAgICAgIGV4cGVjdGVkID0gKEQsIEIsIEMsIEEsIG9iamVjdCkKKyAgICAgICAgZ290ID0gaW5zcGVjdC5nZXRtcm8oRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgZGVmIGFzc2VydEFyZ1NwZWNFcXVhbHMoc2VsZiwgcm91dGluZSwgYXJnc19lLCB2YXJhcmdzX2UgPSBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmt3X2UgPSBOb25lLCBkZWZhdWx0c19lID0gTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgPSBOb25lKToKKyAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzID0gaW5zcGVjdC5nZXRhcmdzcGVjKHJvdXRpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgYXJnc19lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcmFyZ3MsIHZhcmFyZ3NfZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJrdywgdmFya3dfZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWZhdWx0cywgZGVmYXVsdHNfZSkKKyAgICAgICAgaWYgZm9ybWF0dGVkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkKQorCisgICAgZGVmIHRlc3RfZ2V0YXJnc3BlYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBcmdTcGVjRXF1YWxzKG1vZC5lZ2dzLCBbJ3gnLCAneSddLCBmb3JtYXR0ZWQgPSAnKHgsIHkpJykKKworICAgICAgICBzZWxmLmFzc2VydEFyZ1NwZWNFcXVhbHMobW9kLnNwYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2EnLCAnYicsICdjJywgJ2QnLCBbJ2UnLCBbJ2YnXV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2cnLCAnaCcsICgzLCAoNCwgKDUsKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhhLCBiLCBjLCBkPTMsIChlLCAoZiwpKT0oNCwgKDUsKSksICpnLCAqKmgpJykKKworICAgIGRlZiB0ZXN0X2dldGFyZ3NwZWNfbWV0aG9kKHNlbGYpOgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgbShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0QXJnU3BlY0VxdWFscyhBLm0sIFsnc2VsZiddKQorCisgICAgZGVmIHRlc3RfZ2V0YXJnc3BlY19zdWJsaXN0b2ZvbmUoc2VsZik6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICAgICAgICAgICgicGFyZW50aGVzaXplZCBhcmd1bWVudCBuYW1lcyBhcmUgaW52YWxpZCIsIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgICAgIGV4ZWMgJ2RlZiBzdWJsaXN0T2ZPbmUoKGZvbywpKTogcmV0dXJuIDEnCisgICAgICAgICAgICBzZWxmLmFzc2VydEFyZ1NwZWNFcXVhbHMoc3VibGlzdE9mT25lLCBbWydmb28nXV0pCisKKyAgICAgICAgICAgIGV4ZWMgJ2RlZiBmYWtlU3VibGlzdE9mT25lKChmb28pKTogcmV0dXJuIDEnCisgICAgICAgICAgICBzZWxmLmFzc2VydEFyZ1NwZWNFcXVhbHMoZmFrZVN1Ymxpc3RPZk9uZSwgWydmb28nXSkKKworCisgICAgZGVmIF9jbGFzc2lmeV90ZXN0KHNlbGYsIG5ld3N0eWxlKToKKyAgICAgICAgIiIiSGVscGVyIGZvciB0ZXN0aW5nIHRoYXQgY2xhc3NpZnlfY2xhc3NfYXR0cnMgZmluZHMgYSBidW5jaCBvZgorICAgICAgICBkaWZmZXJlbnQga2luZHMgb2YgYXR0cmlidXRlcyBvbiBhIGdpdmVuIGNsYXNzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbmV3c3R5bGU6CisgICAgICAgICAgICBiYXNlID0gb2JqZWN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbGFzcyBiYXNlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBBKGJhc2UpOgorICAgICAgICAgICAgZGVmIHMoKTogcGFzcworICAgICAgICAgICAgcyA9IHN0YXRpY21ldGhvZChzKQorCisgICAgICAgICAgICBkZWYgYyhjbHMpOiBwYXNzCisgICAgICAgICAgICBjID0gY2xhc3NtZXRob2QoYykKKworICAgICAgICAgICAgZGVmIGdldHAoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIHAgPSBwcm9wZXJ0eShnZXRwKQorCisgICAgICAgICAgICBkZWYgbShzZWxmKTogcGFzcworCisgICAgICAgICAgICBkZWYgbTEoc2VsZik6IHBhc3MKKworICAgICAgICAgICAgZGF0YWJsb2IgPSAnMScKKworICAgICAgICAgICAgZGQgPSBfQnJva2VuRGF0YURlc2NyaXB0b3IoKQorICAgICAgICAgICAgbWQgPSBfQnJva2VuTWV0aG9kRGVzY3JpcHRvcigpCisKKyAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGNsYXNzIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdwJywgJ3Byb3BlcnR5JywgQSksIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20xJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbWQnLCAnbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBtZXRob2QgZGVzY3JpcHRvcicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkZCcsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhIGRlc2NyaXB0b3InKQorCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBkZWYgbShzZWxmKTogcGFzcworCisgICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhCKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbScsICdtZXRob2QnLCBCKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtMScsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkYXRhYmxvYicsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ21kJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgbWV0aG9kIGRlc2NyaXB0b3InKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZGQnLCAnZGF0YScsIEEpLCBhdHRycywgJ21pc3NpbmcgZGF0YSBkZXNjcmlwdG9yJykKKworCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBkZWYgbShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGMoc2VsZik6IHBhc3MKKworICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoQykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdjJywgJ21ldGhvZCcsIEMpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3AnLCAncHJvcGVydHknLCBBKSwgYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20nLCAnbWV0aG9kJywgQyksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbTEnLCAnbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpLCBhdHRycywgJ21pc3NpbmcgZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtZCcsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIG1ldGhvZCBkZXNjcmlwdG9yJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RkJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEgZGVzY3JpcHRvcicpCisKKyAgICAgICAgY2xhc3MgRChCLCBDKToKKyAgICAgICAgICAgIGRlZiBtMShzZWxmKTogcGFzcworCisgICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhEKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKKyAgICAgICAgaWYgbmV3c3R5bGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdtZXRob2QnLCBDKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGNsYXNzIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdwJywgJ3Byb3BlcnR5JywgQSksIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtJywgJ21ldGhvZCcsIEIpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20xJywgJ21ldGhvZCcsIEQpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbWQnLCAnbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBtZXRob2QgZGVzY3JpcHRvcicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkZCcsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhIGRlc2NyaXB0b3InKQorCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9vbGRzdHlsZShzZWxmKToKKyAgICAgICAgIiIiY2xhc3NpZnlfY2xhc3NfYXR0cnMgZmluZHMgc3RhdGljIG1ldGhvZHMsIGNsYXNzIG1ldGhvZHMsCisgICAgICAgIHByb3BlcnRpZXMsIG5vcm1hbCBtZXRob2RzLCBhbmQgZGF0YSBhdHRyaWJ1dGVzIG9uIGFuIG9sZC1zdHlsZQorICAgICAgICBjbGFzcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NsYXNzaWZ5X3Rlc3QoRmFsc2UpCisKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X25ld3N0eWxlKHNlbGYpOgorICAgICAgICAiIiJKdXN0IGxpa2UgdGVzdF9jbGFzc2lmeV9vbGRzdHlsZSwgYnV0IGZvciBhIG5ldy1zdHlsZSBjbGFzcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NsYXNzaWZ5X3Rlc3QoVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X2J1aWx0aW5fdHlwZXMoc2VsZik6CisgICAgICAgICMgU2ltcGxlIHNhbml0eSBjaGVjayB0aGF0IGFsbCBidWlsdC1pbiB0eXBlcyBjYW4gaGF2ZSB0aGVpcgorICAgICAgICAjIGF0dHJpYnV0ZXMgY2xhc3NpZmllZC4KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKF9fYnVpbHRpbl9fKToKKyAgICAgICAgICAgIGJ1aWx0aW4gPSBnZXRhdHRyKF9fYnVpbHRpbl9fLCBuYW1lKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShidWlsdGluLCB0eXBlKToKKyAgICAgICAgICAgICAgICBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKGJ1aWx0aW4pCisKKyAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX21ldGhvZChzZWxmKToKKyAgICAgICAgIyBPbGQtc3R5bGUgY2xhc3NlcworICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdmJywgQi5mKSwgaW5zcGVjdC5nZXRtZW1iZXJzKEIpKQorICAgICAgICAjIGNvbnRyYXJ5IHRvIHNwZWMsIGlzbWV0aG9kKCkgaXMgYWxzbyBUcnVlIGZvciB1bmJvdW5kIG1ldGhvZHMKKyAgICAgICAgIyAoc2VlICMxNzg1KQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIEIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhCLCBpbnNwZWN0LmlzbWV0aG9kKSkKKyAgICAgICAgYiA9IEIoKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIGIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBiLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoYiwgaW5zcGVjdC5pc21ldGhvZCkpCisKKyAgICAgICAgIyBOZXctc3R5bGUgY2xhc3NlcworICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBCLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoQikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdmJywgQi5mKSwgaW5zcGVjdC5nZXRtZW1iZXJzKEIsIGluc3BlY3QuaXNtZXRob2QpKQorICAgICAgICBiID0gQigpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdmJywgYi5mKSwgaW5zcGVjdC5nZXRtZW1iZXJzKGIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIGIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhiLCBpbnNwZWN0LmlzbWV0aG9kKSkKKworCitjbGFzcyBUZXN0R2V0Y2FsbGFyZ3NGdW5jdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyB0dXBsZSBwYXJhbWV0ZXJzIGFyZSBuYW1lZCAnLjEnLCAnLjInLCBldGMuCisgICAgaXNfdHVwbGVuYW1lID0gcmUuY29tcGlsZShyJ15cLlxkKyQnKS5tYXRjaAorCisgICAgZGVmIGFzc2VydEVxdWFsQ2FsbEFyZ3Moc2VsZiwgZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICBsb2NzID0gZGljdChsb2NzIG9yIHt9LCBmdW5jPWZ1bmMpCisgICAgICAgIHIxID0gZXZhbCgnZnVuYyglcyknICUgY2FsbF9wYXJhbXNfc3RyaW5nLCBOb25lLCBsb2NzKQorICAgICAgICByMiA9IGV2YWwoJ2luc3BlY3QuZ2V0Y2FsbGFyZ3MoZnVuYywgJXMpJyAlIGNhbGxfcGFyYW1zX3N0cmluZywgTm9uZSwKKyAgICAgICAgICAgICAgICAgIGxvY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocjEsIHIyKQorCisgICAgZGVmIGFzc2VydEVxdWFsRXhjZXB0aW9uKHNlbGYsIGZ1bmMsIGNhbGxfcGFyYW1fc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICBsb2NzID0gZGljdChsb2NzIG9yIHt9LCBmdW5jPWZ1bmMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2YWwoJ2Z1bmMoJXMpJyAlIGNhbGxfcGFyYW1fc3RyaW5nLCBOb25lLCBsb2NzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBleDE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4Y2VwdGlvbiBub3QgcmFpc2VkJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZhbCgnaW5zcGVjdC5nZXRjYWxsYXJncyhmdW5jLCAlcyknICUgY2FsbF9wYXJhbV9zdHJpbmcsIE5vbmUsCisgICAgICAgICAgICAgICAgIGxvY3MpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4MjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhjZXB0aW9uIG5vdCByYWlzZWQnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZXgxKSwgdHlwZShleDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihleDEpLCBzdHIoZXgyKSkKKworICAgIGRlZiBtYWtlQ2FsbGFibGUoc2VsZiwgc2lnbmF0dXJlKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGl0cyBsb2NhbHMoKSwgZXhjbHVkaW5nIHRoZQorICAgICAgICBhdXRvZ2VuZXJhdGVkICcuMScsICcuMicsIGV0Yy4gdHVwbGUgcGFyYW0gbmFtZXMgKGlmIGFueSkuIiIiCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwgU3ludGF4V2FybmluZyksCisgICAgICAgICAgICBxdWlldD1UcnVlKToKKyAgICAgICAgICAgIGNvZGUgPSAoImxhbWJkYSAlczogZGljdChpIGZvciBpIGluIGxvY2FscygpLml0ZW1zKCkgIgorICAgICAgICAgICAgICAgICAgICAiaWYgbm90IGlzX3R1cGxlbmFtZShpWzBdKSkiKQorICAgICAgICAgICAgcmV0dXJuIGV2YWwoY29kZSAlIHNpZ25hdHVyZSwgeydpc190dXBsZW5hbWUnIDogc2VsZi5pc190dXBsZW5hbWV9KQorCisgICAgZGVmIHRlc3RfcGxhaW4oc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdhPTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MywgYT0yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCBiPTMnKQorICAgICAgICAjIGV4cGFuZCAqaXRlcmFibGUgLyAqKm1hcHBpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKDIsKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKlsyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKigyLCAzKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKlsyLCAzXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKip7ImEiOjJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTMsICoqeyJhIjoyfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgKip7ImIiOjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKnsiYiI6MywgImEiOjJ9JykKKyAgICAgICAgIyBleHBhbmQgVXNlckxpc3QgLyBVc2VyRGljdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJypVc2VyTGlzdChbMl0pJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqVXNlckxpc3QoWzIsIDNdKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKipVc2VyRGljdChhPTIpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAqKlVzZXJEaWN0KGI9MyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MiwgKipVc2VyRGljdChhPTMpJykKKyAgICAgICAgIyB1bmljb2RlIGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqe3UiYSI6Mn0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MywgKip7dSJhIjoyfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgKip7dSJiIjozfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKip7dSJiIjozLCB1ImEiOjJ9JykKKworICAgIGRlZiB0ZXN0X3ZhcmFyZ3Moc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0xLCAqYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKigyLDMsNCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsICpbMyw0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgKlVzZXJMaXN0KFs0XSknKQorCisgICAgZGVmIHRlc3RfdmFya3coc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0xLCAqKmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2E9MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgYj0zLCBjPTQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MywgYT0yLCBjPTQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2M9NCwgKip7ImEiOjIsICJiIjozfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgYz00LCAqKnsiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MiwgKip7ImEiOjMsICJjIjo0fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKipVc2VyRGljdChhPTIsIGI9MywgYz00KScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgYz00LCAqKlVzZXJEaWN0KGI9MyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MiwgKipVc2VyRGljdChhPTMsIGM9NCknKQorICAgICAgICAjIHVuaWNvZGUga2V5d29yZCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYz00LCAqKnt1ImEiOjIsIHUiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIGM9NCwgKip7dSJiIjozfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYj0yLCAqKnt1ImEiOjMsIHUiYyI6NH0nKQorCisgICAgZGVmIHRlc3RfdmFya3dfb25seShzZWxmKToKKyAgICAgICAgIyBpc3N1ZTExMjU2OgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJyoqYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdhPTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2E9MSwgYj0yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdjPTMsICoqeyJhIjogMSwgImIiOiAyfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKipVc2VyRGljdChhPTEsIGI9MiknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2M9MywgKipVc2VyRGljdChhPTEsIGI9MiknKQorCisgICAgZGVmIHRlc3RfdHVwbGVhcmdzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJyhiLGMpLCAoZCwoZSxmKSk9KDAsWzEsMl0pJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcoMiwzKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnWzIsM10nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ1VzZXJMaXN0KFsyLDNdKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKDIsMyksICg0LCg1LDYpKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKDIsMyksICg0LFs1LDZdKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKDIsMyksIFs0LFVzZXJMaXN0KFs1LDZdKV0nKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZmVhdHVyZXMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0yLCAoYywoZCxlKSk9KDMsWzQsNV0pLCAqZiwgKipnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzLCAoNCxbNSw2XSksIDcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMsICpbKDQsWzUsNl0pLCA3XSwgeD04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzLCB4PTgsICpbKDQsWzUsNl0pLCA3XScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgeD04LCAqWzMsICg0LFs1LDZdKSwgN10sIHk9OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAneD04LCAqWzIsIDMsICg0LFs1LDZdKV0sIHk9OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAneD04LCAqVXNlckxpc3QoWzIsIDMsICg0LFs1LDZdKV0pLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKip7InkiOjksICJ6IjoxMH0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIHg9OCwgKlVzZXJMaXN0KFszLCAoNCxbNSw2XSldKSwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyoqVXNlckRpY3QoeT05LCB6PTEwKScpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIGYwID0gc2VsZi5tYWtlQ2FsbGFibGUoJycpCisgICAgICAgIGYxID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGInKQorICAgICAgICBmMiA9IHNlbGYubWFrZUNhbGxhYmxlKCdhLCBiPTEnKQorICAgICAgICAjIGYwIHRha2VzIG5vIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYwLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjAsICd4PTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYwLCAnMSx4PTEnKQorICAgICAgICAjIGYxIHRha2VzIGV4YWN0bHkgMiBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjEsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMSwgJ2E9MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjEsICdiPTMnKQorICAgICAgICAjIGYyIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMiwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjIsICdiPTMnKQorICAgICAgICBmb3IgZiBpbiBmMSwgZjI6CisgICAgICAgICAgICAjIGYxL2YyIHRha2VzIGV4YWN0bHkvYXQgbW9zdCAyIGFyZ3VtZW50cworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMiwgMywgNCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxLCAyLCAzLCBhPTEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMiwgMywgNCwgYz01JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIDMsIDQsIGE9MSwgYz01JykKKyAgICAgICAgICAgICMgZiBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICdjPTInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMiwgYz0zJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIDMsIGM9NCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCBjPTQsIGI9MycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcqKnt1Ilx1MDNjMFx1MDNiOSI6IDR9JykKKyAgICAgICAgICAgICMgZiBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxLCBhPTInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMSwgKip7ImEiOjJ9JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzEsIDIsIGI9MycpCisgICAgICAgICAgICAjIFhYWDogUHl0aG9uIGluY29uc2lzdGVuY3kKKyAgICAgICAgICAgICMgLSBmb3IgZnVuY3Rpb25zIGFuZCBib3VuZCBtZXRob2RzOiB1bmV4cGVjdGVkIGtleXdvcmQgJ2MnCisgICAgICAgICAgICAjIC0gZm9yIHVuYm91bmQgbWV0aG9kczogbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkICdhJworICAgICAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzEsIGM9MywgYT0yJykKKyAgICAgICAgZiA9IHNlbGYubWFrZUNhbGxhYmxlKCcoYSxiKT0oMCwxKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICdbMV0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcoMSwyLDMpJykKKyAgICAgICAgIyBpc3N1ZTExMjU2OgorICAgICAgICBmMyA9IHNlbGYubWFrZUNhbGxhYmxlKCcqKmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYzLCAnMSwgMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjMsICcxLCAyLCBhPTEsIGI9MicpCisKK2NsYXNzIFRlc3RHZXRjYWxsYXJnc01ldGhvZHMoVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2xzID0gRm9vCisgICAgICAgIHNlbGYuaW5zdCA9IEZvbygpCisKKyAgICBkZWYgbWFrZUNhbGxhYmxlKHNlbGYsIHNpZ25hdHVyZSk6CisgICAgICAgIGFzc2VydCAnc2VsZicgbm90IGluIHNpZ25hdHVyZQorICAgICAgICBtayA9IHN1cGVyKFRlc3RHZXRjYWxsYXJnc01ldGhvZHMsIHNlbGYpLm1ha2VDYWxsYWJsZQorICAgICAgICBzZWxmLmNscy5tZXRob2QgPSBtaygnc2VsZiwgJyArIHNpZ25hdHVyZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuaW5zdC5tZXRob2QKKworY2xhc3MgVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMoVGVzdEdldGNhbGxhcmdzTWV0aG9kcyk6CisKKyAgICBkZWYgbWFrZUNhbGxhYmxlKHNlbGYsIHNpZ25hdHVyZSk6CisgICAgICAgIHN1cGVyKFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzLCBzZWxmKS5tYWtlQ2FsbGFibGUoc2lnbmF0dXJlKQorICAgICAgICByZXR1cm4gc2VsZi5jbHMubWV0aG9kCisKKyAgICBkZWYgYXNzZXJ0RXF1YWxDYWxsQXJncyhzZWxmLCBmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3M9Tm9uZSk6CisgICAgICAgIHJldHVybiBzdXBlcihUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgc2VsZikuYXNzZXJ0RXF1YWxDYWxsQXJncygKKyAgICAgICAgICAgICpzZWxmLl9nZXRBc3NlcnRFcXVhbFBhcmFtcyhmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3MpKQorCisgICAgZGVmIGFzc2VydEVxdWFsRXhjZXB0aW9uKHNlbGYsIGZ1bmMsIGNhbGxfcGFyYW1zX3N0cmluZywgbG9jcz1Ob25lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzLCBzZWxmKS5hc3NlcnRFcXVhbEV4Y2VwdGlvbigKKyAgICAgICAgICAgICpzZWxmLl9nZXRBc3NlcnRFcXVhbFBhcmFtcyhmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3MpKQorCisgICAgZGVmIF9nZXRBc3NlcnRFcXVhbFBhcmFtcyhzZWxmLCBmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3M9Tm9uZSk6CisgICAgICAgIGFzc2VydCAnaW5zdCcgbm90IGluIGNhbGxfcGFyYW1zX3N0cmluZworICAgICAgICBsb2NzID0gZGljdChsb2NzIG9yIHt9LCBpbnN0PXNlbGYuaW5zdCkKKyAgICAgICAgcmV0dXJuIChmdW5jLCAnaW5zdCwnICsgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0RGVjb3JhdG9ycywgVGVzdFJldHJpZXZpbmdTb3VyY2VDb2RlLCBUZXN0T25lbGluZXJzLCBUZXN0QnVnZ3lDYXNlcywKKyAgICAgICAgVGVzdEludGVycHJldGVyU3RhY2ssIFRlc3RDbGFzc2VzQW5kRnVuY3Rpb25zLCBUZXN0UHJlZGljYXRlcywKKyAgICAgICAgVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zLCBUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzLAorICAgICAgICBUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW50LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NWY5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbnQucHkKQEAgLTAsMCArMSw0NjcgQEAKK2ltcG9ydCBzeXMKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBoYXZlX3VuaWNvZGUKK2ltcG9ydCBtYXRoCisKK0wgPSBbCisgICAgICAgICgnMCcsIDApLAorICAgICAgICAoJzEnLCAxKSwKKyAgICAgICAgKCc5JywgOSksCisgICAgICAgICgnMTAnLCAxMCksCisgICAgICAgICgnOTknLCA5OSksCisgICAgICAgICgnMTAwJywgMTAwKSwKKyAgICAgICAgKCczMTQnLCAzMTQpLAorICAgICAgICAoJyAzMTQnLCAzMTQpLAorICAgICAgICAoJzMxNCAnLCAzMTQpLAorICAgICAgICAoJyAgXHRcdCAgMzE0ICBcdFx0ICAnLCAzMTQpLAorICAgICAgICAocmVwcihzeXMubWF4aW50KSwgc3lzLm1heGludCksCisgICAgICAgICgnICAxeCcsIFZhbHVlRXJyb3IpLAorICAgICAgICAoJyAgMSAgJywgMSksCisgICAgICAgICgnICAxXDAyICAnLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKCcnLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKCcgJywgVmFsdWVFcnJvciksCisgICAgICAgICgnICBcdFx0ICAnLCBWYWx1ZUVycm9yKQorXQoraWYgaGF2ZV91bmljb2RlOgorICAgIEwgKz0gWworICAgICAgICAodW5pY29kZSgnMCcpLCAwKSwKKyAgICAgICAgKHVuaWNvZGUoJzEnKSwgMSksCisgICAgICAgICh1bmljb2RlKCc5JyksIDkpLAorICAgICAgICAodW5pY29kZSgnMTAnKSwgMTApLAorICAgICAgICAodW5pY29kZSgnOTknKSwgOTkpLAorICAgICAgICAodW5pY29kZSgnMTAwJyksIDEwMCksCisgICAgICAgICh1bmljb2RlKCczMTQnKSwgMzE0KSwKKyAgICAgICAgKHVuaWNvZGUoJyAzMTQnKSwgMzE0KSwKKyAgICAgICAgKHVuaWNvZGUoJ1x1MDY2M1x1MDY2MVx1MDY2NCAnLCdyYXctdW5pY29kZS1lc2NhcGUnKSwgMzE0KSwKKyAgICAgICAgKHVuaWNvZGUoJyAgXHRcdCAgMzE0ICBcdFx0ICAnKSwgMzE0KSwKKyAgICAgICAgKHVuaWNvZGUoJyAgMXgnKSwgVmFsdWVFcnJvciksCisgICAgICAgICh1bmljb2RlKCcgIDEgICcpLCAxKSwKKyAgICAgICAgKHVuaWNvZGUoJyAgMVwwMiAgJyksIFZhbHVlRXJyb3IpLAorICAgICAgICAodW5pY29kZSgnJyksIFZhbHVlRXJyb3IpLAorICAgICAgICAodW5pY29kZSgnICcpLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKHVuaWNvZGUoJyAgXHRcdCAgJyksIFZhbHVlRXJyb3IpLAorICAgICAgICAodW5pY2hyKDB4MjAwKSwgVmFsdWVFcnJvciksCitdCisKK2NsYXNzIEludExvbmdDb21tb25UZXN0cyhvYmplY3QpOgorCisgICAgIiIiTWl4aW4gb2YgdGVzdCBjYXNlcyB0byBzaGFyZSBiZXR3ZWVuIGJvdGggdGVzdF9pbnQgYW5kIHRlc3RfbG9uZy4iIiIKKworICAgICMgQ2hhbmdlIHRvIGludCBvciBsb25nIGluIHRoZSBUZXN0Q2FzZSBzdWJjbGFzcy4KKyAgICBudHlwZSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5udHlwZSgpLCAwKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmdzKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW52b2tpbmcgY29uc3RydWN0b3IgdXNpbmcga2V5d29yZCBhcmd1bWVudHMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5udHlwZSh4PTEuMiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5udHlwZSgnMTAwJywgYmFzZT0yKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm50eXBlKHg9JzEwMCcsIGJhc2U9MiksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5udHlwZSwgYmFzZT0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm50eXBlLCBiYXNlPTApCisKK2NsYXNzIEludFRlc3RDYXNlcyhJbnRMb25nQ29tbW9uVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIG50eXBlID0gaW50CisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoMzE0KSwgMzE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgzLjE0KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoMzE0TCksIDMxNCkKKyAgICAgICAgIyBDaGVjayB0aGF0IGNvbnZlcnNpb24gZnJvbSBmbG9hdCB0cnVuY2F0ZXMgdG93YXJkcyB6ZXJvCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KC0zLjE0KSwgLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KDMuOSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KC0zLjkpLCAtMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoMy41KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoLTMuNSksIC0zKQorICAgICAgICAjIERpZmZlcmVudCBiYXNlOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgiMTAiLDE2KSwgMTZMKQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh1bmljb2RlKCIxMCIpLDE2KSwgMTZMKQorICAgICAgICAjIFRlc3QgY29udmVyc2lvbiBmcm9tIHN0cmluZ3MgYW5kIHZhcmlvdXMgYW5vbWFsaWVzCisgICAgICAgIGZvciBzLCB2IGluIEw6CisgICAgICAgICAgICBmb3Igc2lnbiBpbiAiIiwgIisiLCAiLSI6CisgICAgICAgICAgICAgICAgZm9yIHByZWZpeCBpbiAiIiwgIiAiLCAiXHQiLCAiICBcdFx0ICAiOgorICAgICAgICAgICAgICAgICAgICBzcyA9IHByZWZpeCArIHNpZ24gKyBzCisgICAgICAgICAgICAgICAgICAgIHZ2ID0gdgorICAgICAgICAgICAgICAgICAgICBpZiBzaWduID09ICItIiBhbmQgdiBpcyBub3QgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZ2ID0gLXYKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc3MpLCB2dikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHY6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcyA9IHJlcHIoLTEtc3lzLm1heGludCkKKyAgICAgICAgeCA9IGludChzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgrMSwgLXN5cy5tYXhpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBpbnQpCisgICAgICAgICMgc2hvdWxkIHJldHVybiBsb25nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHNbMTpdKSwgc3lzLm1heGludCsxKQorCisgICAgICAgICMgc2hvdWxkIHJldHVybiBsb25nCisgICAgICAgIHggPSBpbnQoMWUxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBsb25nKQorICAgICAgICB4ID0gaW50KC0xZTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxvbmcpCisKKworICAgICAgICAjIFNGIGJ1ZyA0MzQxODY6ICAweDgwMDAwMDAwLzIgIT0gMHg4MDAwMDAwMD4+MS4KKyAgICAgICAgIyBXb3JrZWQgYnkgYWNjaWRlbnQgaW4gV2luZG93cyByZWxlYXNlIGJ1aWxkLCBidXQgZmFpbGVkIGluIGRlYnVnIGJ1aWxkLgorICAgICAgICAjIEZhaWxlZCBpbiBhbGwgTGludXggYnVpbGRzLgorICAgICAgICB4ID0gLTEtc3lzLm1heGludAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPj4gMSwgeC8vMikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcxMjNcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzUzJywgNDApCisKKyAgICAgICAgIyBTRiBidWcgMTU0NTQ5NzogZW1iZWRkZWQgTlVMcyB3ZXJlIG5vdCBkZXRlY3RlZCB3aXRoCisgICAgICAgICMgZXhwbGljaXQgYmFzZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcxMjNcMCcsIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcxMjNceDAwIDI0NScsIDIwKQorCisgICAgICAgIHggPSBpbnQoJzEnICogNjAwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbG9uZykKKworICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICB4ID0gaW50KHVuaWNocigweDY2MSkgKiA2MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbG9uZykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgMSwgMTIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAxMjMnLCAwKSwgODMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcweDEyMycsIDE2KSwgMjkxKQorCisgICAgICAgICMgQnVnIDE2Nzk6ICIweCIgaXMgbm90IGEgdmFsaWQgaGV4IGxpdGVyYWwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAiMHgiLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAiMHgiLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgIjBvIiwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAiMG8iLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgIjBiIiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAiMGIiLCAwKQorCisKKyAgICAgICAgIyBTRiBidWcgMTMzNDY2MjogaW50KHN0cmluZywgYmFzZSkgd3JvbmcgYW5zd2VycworICAgICAgICAjIFZhcmlvdXMgcmVwcmVzZW50YXRpb25zIG9mIDIqKjMyIGV2YWx1YXRlZCB0byAwCisgICAgICAgICMgcmF0aGVyIHRoYW4gMioqMzIgaW4gcHJldmlvdXMgdmVyc2lvbnMKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJywgMiksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAyMDAyMDIyMjAxMjIxMTExMjExJywgMyksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAwMDAwMDAwMDAwMDAwMDAnLCA0KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCczMjI0NDAwMjQyMzE0MScsIDUpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzE1NTAxMDQwMTU1MDQnLCA2KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcyMTEzMDE0MjIzNTQnLCA3KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0MDAwMDAwMDAwMCcsIDgpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEyMDY4NjU3NDU0JywgOSksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNDI5NDk2NzI5NicsIDEwKSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxOTA0NDQwNTU0JywgMTEpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzliYTQ2MTU5NCcsIDEyKSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc1MzVhNzk4ODknLCAxMyksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMmNhNWI3NDY0JywgMTQpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzFhMjBkY2Q4MScsIDE1KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDAwMDAwMDAnLCAxNiksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnYTdmZmRhOTEnLCAxNyksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNzA0aGU3ZzQnLCAxOCksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNGY1YWZmNjYnLCAxOSksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMzcyM2FpNGcnLCAyMCksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMjgxZDU1aTQnLCAyMSksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMWZqOGIxODQnLCAyMiksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTYwNms3aWMnLCAyMyksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnbWI5OTRhZycsIDI0KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCdoZWsybWdsJywgMjUpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJ2RuY2hibm0nLCAyNiksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnYjI4anBkbScsIDI3KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc4cGZnaWg0JywgMjgpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzc2YmVpZ2cnLCAyOSksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNXFtY3BxZycsIDMwKSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0cTBqdG80JywgMzEpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzQwMDAwMDAnLCAzMiksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnM2Fva3E5NCcsIDMzKSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcycWh4amxpJywgMzQpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzJicjQ1cWInLCAzNSksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMXoxNDF6NCcsIDM2KSwgNDI5NDk2NzI5NkwpCisKKyAgICAgICAgIyB0ZXN0cyB3aXRoIGJhc2UgMAorICAgICAgICAjIHRoaXMgZmFpbHMgb24gMy4wLCBidXQgaW4gMi54IHRoZSBvbGQgb2N0YWwgc3ludGF4IGlzIGFsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJyAwMTIzICAnLCAwKSwgODMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcgMDEyMyAgJywgMCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMDAwJywgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwbzEyMycsIDApLCA4MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzB4MTIzJywgMCksIDI5MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzBiMTAwJywgMCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcgME8xMjMgICAnLCAwKSwgODMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcgMFgxMjMgICcsIDApLCAyOTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcgMEIxMDAgJywgMCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwJywgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcrMCcsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnLTAnLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAwJywgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzA4JywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnLTAxMjM5NScsIDApCisKKyAgICAgICAgIyB3aXRob3V0IGJhc2Ugc3RpbGwgYmFzZSAxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMDEyMycpLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwMTIzJywgMTApLCAxMjMpCisKKyAgICAgICAgIyB0ZXN0cyB3aXRoIHByZWZpeCBhbmQgYmFzZSAhPSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcweDEyMycsIDE2KSwgMjkxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMG8xMjMnLCA4KSwgODMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwYjEwMCcsIDIpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMFgxMjMnLCAxNiksIDI5MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzBPMTIzJywgOCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMEIxMDAnLCAyKSwgNCkKKworICAgICAgICAjIHRoZSBjb2RlIGhhcyBzcGVjaWFsIGNoZWNrcyBmb3IgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUKKyAgICAgICAgIyAgdHlwZSBwcmVmaXgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMGIyJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMGIwMicsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzBCMicsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzBCMDInLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcwbzgnLCA4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcwbzA4JywgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnME84JywgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnME8wOCcsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzB4ZycsIDE2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcweDBnJywgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzBYZycsIDE2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcwWDBnJywgMTYpCisKKyAgICAgICAgIyBTRiBidWcgMTMzNDY2MjogaW50KHN0cmluZywgYmFzZSkgd3JvbmcgYW5zd2VycworICAgICAgICAjIENoZWNrcyBmb3IgcHJvcGVyIGV2YWx1YXRpb24gb2YgMioqMzIgKyAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnLCAyKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDIwMDIwMjIyMDEyMjExMTEyMTInLCAzKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDAwMDAwMDAwMDAwMDAwMScsIDQpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzMyMjQ0MDAyNDIzMTQyJywgNSksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTU1MDEwNDAxNTUwNScsIDYpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzIxMTMwMTQyMjM1NScsIDcpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzQwMDAwMDAwMDAxJywgOCksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTIwNjg2NTc0NTUnLCA5KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0Mjk0OTY3Mjk3JywgMTApLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzE5MDQ0NDA1NTUnLCAxMSksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnOWJhNDYxNTk1JywgMTIpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzUzNWE3OTg4YScsIDEzKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcyY2E1Yjc0NjUnLCAxNCksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMWEyMGRjZDgyJywgMTUpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMDAwMDAwMScsIDE2KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCdhN2ZmZGE5MicsIDE3KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc3MDRoZTdnNScsIDE4KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0ZjVhZmY2NycsIDE5KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCczNzIzYWk0aCcsIDIwKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcyODFkNTVpNScsIDIxKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxZmo4YjE4NScsIDIyKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxNjA2azdpZCcsIDIzKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCdtYjk5NGFoJywgMjQpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJ2hlazJtZ20nLCAyNSksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnZG5jaGJubicsIDI2KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCdiMjhqcGRuJywgMjcpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzhwZmdpaDUnLCAyOCksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNzZiZWlnaCcsIDI5KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc1cW1jcHFoJywgMzApLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzRxMGp0bzUnLCAzMSksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNDAwMDAwMScsIDMyKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCczYW9rcTk1JywgMzMpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzJxaHhqbGonLCAzNCksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMmJyNDVxYycsIDM1KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxejE0MXo1JywgMzYpLCA0Mjk0OTY3Mjk3TCkKKworICAgIGRlZiB0ZXN0X2JpdF9sZW5ndGgoc2VsZik6CisgICAgICAgIHRpbnkgPSAxZS0xMAorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoLTY1MDAwLCA2NTAwMCk6CisgICAgICAgICAgICBrID0geC5iaXRfbGVuZ3RoKCkKKyAgICAgICAgICAgICMgQ2hlY2sgZXF1aXZhbGVuY2Ugd2l0aCBQeXRob24gdmVyc2lvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBsZW4oYmluKHgpLmxzdHJpcCgnLTBiJykpKQorICAgICAgICAgICAgIyBCZWhhdmlvdXIgYXMgc3BlY2lmaWVkIGluIHRoZSBkb2NzCisgICAgICAgICAgICBpZiB4ICE9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKihrLTEpIDw9IGFicyh4KSA8IDIqKmspCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgMCkKKyAgICAgICAgICAgICMgQWx0ZXJuYXRpdmUgZGVmaW5pdGlvbjogeC5iaXRfbGVuZ3RoKCkgPT0gMSArIGZsb29yKGxvZ18yKHgpKQorICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgICMgV2hlbiB4IGlzIGFuIGV4YWN0IHBvd2VyIG9mIDIsIG51bWVyaWMgZXJyb3JzIGNhbgorICAgICAgICAgICAgICAgICMgY2F1c2UgZmxvb3IobG9nKHgpL2xvZygyKSkgdG8gYmUgb25lIHRvbyBzbWFsbDsgZm9yCisgICAgICAgICAgICAgICAgIyBzbWFsbCB4IHRoaXMgY2FuIGJlIGZpeGVkIGJ5IGFkZGluZyBhIHNtYWxsIHF1YW50aXR5CisgICAgICAgICAgICAgICAgIyB0byB0aGUgcXVvdGllbnQgYmVmb3JlIHRha2luZyB0aGUgZmxvb3IuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCAxICsgbWF0aC5mbG9vcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGgubG9nKGFicyh4KSkvbWF0aC5sb2coMikgKyB0aW55KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwKS5iaXRfbGVuZ3RoKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEpLmJpdF9sZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEpLmJpdF9sZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMikuYml0X2xlbmd0aCgpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMikuYml0X2xlbmd0aCgpLCAyKQorICAgICAgICBmb3IgaSBpbiBbMiwgMywgMTUsIDE2LCAxNywgMzEsIDMyLCAzMywgNjMsIDY0XToKKyAgICAgICAgICAgIGEgPSAyKippCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLTEpLmJpdF9sZW5ndGgoKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEtYSkuYml0X2xlbmd0aCgpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtYSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhKzEpLmJpdF9sZW5ndGgoKSwgaSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLWEtMSkuYml0X2xlbmd0aCgpLCBpKzEpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisgICAgZGVmIHRlc3RfZmxvYXRfY29udmVyc2lvbihzZWxmKToKKyAgICAgICAgIyB2YWx1ZXMgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGZsb2F0cworICAgICAgICBleGFjdF92YWx1ZXMgPSBbLTIsIC0xLCAwLCAxLCAyLCAyKio1MiwgMioqNTMtMSwgMioqNTMsIDIqKjUzKzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgMioqNTMrNCwgMioqNTQtNCwgMioqNTQtMiwgMioqNjMsIC0yKio2MywgMioqNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTIqKjY0LCAxMCoqMjAsIDEwKioyMSwgMTAqKjIyXQorICAgICAgICBmb3IgdmFsdWUgaW4gZXhhY3RfdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoaW50KHZhbHVlKSkpLCB2YWx1ZSkKKworICAgICAgICAjIHRlc3Qgcm91bmQtaGFsZi10by1ldmVuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzEpKSwgMioqNTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzIpKSwgMioqNTMrMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTMrMykpLCAyKio1Mys0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1Mys1KSksIDIqKjUzKzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzYpKSwgMioqNTMrNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTMrNykpLCAyKio1Mys4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My0xKSksIC0yKio1MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoLTIqKjUzLTIpKSwgLTIqKjUzLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My0zKSksIC0yKio1My00KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgtMioqNTMtNSkpLCAtMioqNTMtNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoLTIqKjUzLTYpKSwgLTIqKjUzLTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My03KSksIC0yKio1My04KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0LTIpKSwgMioqNTQtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQtMSkpLCAyKio1NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrMikpLCAyKio1NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrMykpLCAyKio1NCs0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1NCs1KSksIDIqKjU0KzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzYpKSwgMioqNTQrOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrMTApKSwgMioqNTQrOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrMTEpKSwgMioqNTQrMTIpCisKKyAgICBkZWYgdGVzdF92YWxpZF9ub25fbnVtZXJpY19pbnB1dF90eXBlc19mb3JfeChzZWxmKToKKyAgICAgICAgIyBUZXN0IHBvc3NpYmxlIHZhbGlkIG5vbi1udW1lcmljIHR5cGVzIGZvciB4LCBpbmNsdWRpbmcgc3ViY2xhc3NlcworICAgICAgICAjIG9mIHRoZSBhbGxvd2VkIGJ1aWx0LWluIHR5cGVzLgorICAgICAgICBjbGFzcyBDdXN0b21TdHIoc3RyKTogcGFzcworICAgICAgICB2YWx1ZXMgPSBbJzEwMCcsIEN1c3RvbVN0cignMTAwJyldCisKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgY2xhc3MgQ3VzdG9tVW5pY29kZSh1bmljb2RlKTogcGFzcworICAgICAgICAgICAgdmFsdWVzICs9IFt1bmljb2RlKCcxMDAnKSwgQ3VzdG9tVW5pY29kZSh1bmljb2RlKCcxMDAnKSldCisKKyAgICAgICAgZm9yIHggaW4gdmFsdWVzOgorICAgICAgICAgICAgbXNnID0gJ3ggaGFzIHZhbHVlICVzIGFuZCB0eXBlICVzJyAlICh4LCB0eXBlKHgpLl9fbmFtZV9fKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHgpLCAxMDAsIG1zZz1tc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoeCwgMiksIDQsIG1zZz1tc2cpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZvciAlcyBnb3QgVHlwZUVycm9yOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKHgpLl9fbmFtZV9fLCBlcnIpKQorCisgICAgZGVmIHRlc3RfZXJyb3Jfb25fc3RyaW5nX2Zsb2F0X2Zvcl94KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcxLjInKQorCisgICAgZGVmIHRlc3RfZXJyb3Jfb25fYnl0ZWFycmF5X2Zvcl94KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgYnl0ZWFycmF5KCcxMDAnKSwgMikKKworICAgIGRlZiB0ZXN0X2Vycm9yX29uX2ludmFsaWRfaW50X2Jhc2VzKHNlbGYpOgorICAgICAgICBmb3IgYmFzZSBpbiBbLTEsIDEsIDEwMDBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMTAwJywgYmFzZSkKKworICAgIGRlZiB0ZXN0X2Vycm9yX29uX3N0cmluZ19iYXNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgMTAwLCBiYXNlPSdmb28nKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zbWFsbF9pbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKGludCgnMTAnKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW50KCctMScpLCAtMSkKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnQodScxMCcpLCAxMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW50KHUnLTEnKSwgLTEpCisKKyAgICBkZWYgdGVzdF9pbnRjb252ZXJzaW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgX19pbnRfXygpCisgICAgICAgIGNsYXNzIENsYXNzaWNNaXNzaW5nTWV0aG9kczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGludCwgQ2xhc3NpY01pc3NpbmdNZXRob2RzKCkpCisKKyAgICAgICAgY2xhc3MgTWlzc2luZ01ldGhvZHMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIE1pc3NpbmdNZXRob2RzKCkpCisKKyAgICAgICAgY2xhc3MgRm9vMDoKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGNsYXNzIEZvbzEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGNsYXNzIEZvbzIoaW50KToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGNsYXNzIEZvbzMoaW50KToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgY2xhc3MgRm9vNChpbnQpOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyTAorCisgICAgICAgIGNsYXNzIEZvbzUoaW50KToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0Mi4KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChGb28wKCkpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRm9vMSgpKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KEZvbzIoKSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChGb28zKCkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChGb280KCkpLCA0MkwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBGb281KCkpCisKKyAgICAgICAgY2xhc3MgQ2xhc3NpYzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGJhc2UgaW4gKG9iamVjdCwgQ2xhc3NpYyk6CisgICAgICAgICAgICBjbGFzcyBJbnRPdmVycmlkZXNUcnVuYyhiYXNlKToKKyAgICAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xMgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoSW50T3ZlcnJpZGVzVHJ1bmMoKSksIDQyKQorCisgICAgICAgICAgICBjbGFzcyBKdXN0VHJ1bmMoYmFzZSk6CisgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChKdXN0VHJ1bmMoKSksIDQyKQorCisgICAgICAgICAgICBmb3IgdHJ1bmNfcmVzdWx0X2Jhc2UgaW4gKG9iamVjdCwgQ2xhc3NpYyk6CisgICAgICAgICAgICAgICAgY2xhc3MgSW50ZWdyYWwodHJ1bmNfcmVzdWx0X2Jhc2UpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgICAgICAgICAgY2xhc3MgVHJ1bmNSZXR1cm5zTm9uSW50KGJhc2UpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX190cnVuY19fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVncmFsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChUcnVuY1JldHVybnNOb25JbnQoKSksIDQyKQorCisgICAgICAgICAgICAgICAgY2xhc3MgTm9uSW50ZWdyYWwodHJ1bmNfcmVzdWx0X2Jhc2UpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX190cnVuY19fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHdlIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25JbnRlZ3JhbCgpCisKKyAgICAgICAgICAgICAgICBjbGFzcyBUcnVuY1JldHVybnNOb25JbnRlZ3JhbChiYXNlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25JbnRlZ3JhbCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpbnQoVHJ1bmNSZXR1cm5zTm9uSW50ZWdyYWwoKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX190cnVuY19fIHJldHVybmVkIG5vbi1JbnRlZ3JhbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAodHlwZSBOb25JbnRlZ3JhbCkiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciB3aXRoICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJhc2UsIHRydW5jX3Jlc3VsdF9iYXNlKSwpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEludFRlc3RDYXNlcykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW50X2xpdGVyYWwucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pbnRfbGl0ZXJhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjVjYzdjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW50X2xpdGVyYWwucHkKQEAgLTAsMCArMSwxODggQEAKKyIiIlRlc3QgY29ycmVjdCB0cmVhdG1lbnQgb2YgaGV4L29jdCBjb25zdGFudHMuCisKK1RoaXMgaXMgY29tcGxleCBiZWNhdXNlIG9mIGNoYW5nZXMgZHVlIHRvIFBFUCAyMzcuCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIFRlc3RIZXhPY3RCaW4odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaGV4X2Jhc2VsaW5lKHNlbGYpOgorICAgICAgICAjIEEgZmV3IHVwcGVyL2xvd2VyY2FzZSB0ZXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4MCwgMFgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4MSwgMFgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4MTIzNDU2Nzg5YWJjZGVmLCAwWDEyMzQ1Njc4OWFiY2RlZikKKyAgICAgICAgIyBCYXNlbGluZSB0ZXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4MCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDEwLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDdmZmZmZmZmLCAyMTQ3NDgzNjQ3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4N2ZmZmZmZmZmZmZmZmZmZiwgOTIyMzM3MjAzNjg1NDc3NTgwNykKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgcGFyZW50aGVzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDB4MCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgweDEwKSwgLTE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMHg3ZmZmZmZmZiksIC0yMTQ3NDgzNjQ3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMHg3ZmZmZmZmZmZmZmZmZmZmKSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDcpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTB4MCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMHgxMCwgLTE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0weDdmZmZmZmZmLCAtMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMHg3ZmZmZmZmZmZmZmZmZmZmLCAtOTIyMzM3MjAzNjg1NDc3NTgwNykKKworICAgIGRlZiB0ZXN0X2hleF91bnNpZ25lZChzZWxmKToKKyAgICAgICAgIyBQb3NpdGl2ZSBjb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDgwMDAwMDAwLCAyMTQ3NDgzNjQ4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZmZmZmZmZmLCA0Mjk0OTY3Mjk1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgcGFyZW50aGVzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDB4ODAwMDAwMDApLCAtMjE0NzQ4MzY0OEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgweGZmZmZmZmZmKSwgLTQyOTQ5NjcyOTVMKQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBOTyBwYXJlbnRoZXNlcworICAgICAgICAjIFRoaXMgZmFpbGVkIGluIFB5dGhvbiAyLjIgdGhyb3VnaCAyLjIuMiBhbmQgaW4gMi4zYTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMHg4MDAwMDAwMCwgLTIxNDc0ODM2NDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0weGZmZmZmZmZmLCAtNDI5NDk2NzI5NUwpCisKKyAgICAgICAgIyBQb3NpdGl2ZSBjb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDgwMDAwMDAwMDAwMDAwMDAsIDkyMjMzNzIwMzY4NTQ3NzU4MDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMTg0NDY3NDQwNzM3MDk1NTE2MTVMKQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMHg4MDAwMDAwMDAwMDAwMDAwKSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMHhmZmZmZmZmZmZmZmZmZmZmKSwgLTE4NDQ2NzQ0MDczNzA5NTUxNjE1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgTk8gcGFyZW50aGVzZXMKKyAgICAgICAgIyBUaGlzIGZhaWxlZCBpbiBQeXRob24gMi4yIHRocm91Z2ggMi4yLjIgYW5kIGluIDIuM2ExCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTB4ODAwMDAwMDAwMDAwMDAwMCwgLTkyMjMzNzIwMzY4NTQ3NzU4MDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0weGZmZmZmZmZmZmZmZmZmZmYsIC0xODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisKKyAgICBkZWYgdGVzdF9vY3RfYmFzZWxpbmUoc2VsZik6CisgICAgICAgICMgQmFzZWxpbmUgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwMjAsIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAxNzc3Nzc3Nzc3NywgMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3LCA5MjIzMzcyMDM2ODU0Nzc1ODA3KQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMDIwKSwgLTE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMDE3Nzc3Nzc3Nzc3KSwgLTIxNDc0ODM2NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3KSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDcpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTAwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wMjAsIC0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMDE3Nzc3Nzc3Nzc3LCAtMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMDc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NywgLTkyMjMzNzIwMzY4NTQ3NzU4MDcpCisKKyAgICBkZWYgdGVzdF9vY3RfYmFzZWxpbmVfbmV3KHNlbGYpOgorICAgICAgICAjIEEgZmV3IHVwcGVyL2xvd2VyY2FzZSB0ZXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvMCwgME8wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvMSwgME8xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvMTIzNDU2NywgME8xMjM0NTY3KQorICAgICAgICAjIEJhc2VsaW5lIHRlc3RzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMG8wLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvMjAsIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvMTc3Nzc3Nzc3NzcsIDIxNDc0ODM2NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMG83Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcsIDkyMjMzNzIwMzY4NTQ3NzU4MDcpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwbzApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMG8yMCksIC0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBvMTc3Nzc3Nzc3NzcpLCAtMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBvNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3KSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDcpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBvMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMG8yMCwgLTE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wbzE3Nzc3Nzc3Nzc3LCAtMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMG83Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcsIC05MjIzMzcyMDM2ODU0Nzc1ODA3KQorCisgICAgZGVmIHRlc3Rfb2N0X3Vuc2lnbmVkKHNlbGYpOgorICAgICAgICAjIFBvc2l0aXZlIGNvbnN0YW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAyMDAwMDAwMDAwMCwgMjE0NzQ4MzY0OEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMDM3Nzc3Nzc3Nzc3LCA0Mjk0OTY3Mjk1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgcGFyZW50aGVzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDAyMDAwMDAwMDAwMCksIC0yMTQ3NDgzNjQ4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDAzNzc3Nzc3Nzc3NyksIC00Mjk0OTY3Mjk1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgTk8gcGFyZW50aGVzZXMKKyAgICAgICAgIyBUaGlzIGZhaWxlZCBpbiBQeXRob24gMi4yIHRocm91Z2ggMi4yLjIgYW5kIGluIDIuM2ExCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTAyMDAwMDAwMDAwMCwgLTIxNDc0ODM2NDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wMzc3Nzc3Nzc3NzcsIC00Mjk0OTY3Mjk1TCkKKworICAgICAgICAjIFBvc2l0aXZlIGNvbnN0YW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCA5MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwMTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NywgMTg0NDY3NDQwNzM3MDk1NTE2MTVMKQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDApLCAtOTIyMzM3MjAzNjg1NDc3NTgwOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwMTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NyksIC0xODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgICMgVGhpcyBmYWlsZWQgaW4gUHl0aG9uIDIuMiB0aHJvdWdoIDIuMi4yIGFuZCBpbiAyLjNhMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgLTkyMjMzNzIwMzY4NTQ3NzU4MDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wMTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NywgLTE4NDQ2NzQ0MDczNzA5NTUxNjE1TCkKKworICAgIGRlZiB0ZXN0X29jdF91bnNpZ25lZF9uZXcoc2VsZik6CisgICAgICAgICMgUG9zaXRpdmUgY29uc3RhbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMG8yMDAwMDAwMDAwMCwgMjE0NzQ4MzY0OEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMG8zNzc3Nzc3Nzc3NywgNDI5NDk2NzI5NUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwbzIwMDAwMDAwMDAwKSwgLTIxNDc0ODM2NDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMG8zNzc3Nzc3Nzc3NyksIC00Mjk0OTY3Mjk1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgTk8gcGFyZW50aGVzZXMKKyAgICAgICAgIyBUaGlzIGZhaWxlZCBpbiBQeXRob24gMi4yIHRocm91Z2ggMi4yLjIgYW5kIGluIDIuM2ExCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBvMjAwMDAwMDAwMDAsIC0yMTQ3NDgzNjQ4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMG8zNzc3Nzc3Nzc3NywgLTQyOTQ5NjcyOTVMKQorCisgICAgICAgICMgUG9zaXRpdmUgY29uc3RhbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMG8xMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCA5MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwbzE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcsIDE4NDQ2NzQ0MDczNzA5NTUxNjE1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgcGFyZW50aGVzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBvMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCksIC05MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBvMTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NyksIC0xODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgICMgVGhpcyBmYWlsZWQgaW4gUHl0aG9uIDIuMiB0aHJvdWdoIDIuMi4yIGFuZCBpbiAyLjNhMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wbzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIC05MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMG8xNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3LCAtMTg0NDY3NDQwNzM3MDk1NTE2MTVMKQorCisgICAgZGVmIHRlc3RfYmluX2Jhc2VsaW5lKHNlbGYpOgorICAgICAgICAjIEEgZmV3IHVwcGVyL2xvd2VyY2FzZSB0ZXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMCwgMEIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMSwgMEIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMTAxMDEwMTAxMDEsIDBCMTAxMDEwMTAxMDEpCisgICAgICAgICMgQmFzZWxpbmUgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwYjAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMGIxMDAwMCwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExLCAyMTQ3NDgzNjQ3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExLCA5MjIzMzcyMDM2ODU0Nzc1ODA3KQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMGIwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBiMTAwMDApLCAtMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEpLCAtMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExKSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDcpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBiMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMGIxMDAwMCwgLTE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEsIC0yMTQ3NDgzNjQ3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDcpCisKKyAgICBkZWYgdGVzdF9iaW5fdW5zaWduZWQoc2VsZik6CisgICAgICAgICMgUG9zaXRpdmUgY29uc3RhbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMGIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgMjE0NzQ4MzY0OEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSwgNDI5NDk2NzI5NUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwYjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKSwgLTIxNDc0ODM2NDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSksIC00Mjk0OTY3Mjk1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgTk8gcGFyZW50aGVzZXMKKyAgICAgICAgIyBUaGlzIGZhaWxlZCBpbiBQeXRob24gMi4yIHRocm91Z2ggMi4yLjIgYW5kIGluIDIuM2ExCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIC0yMTQ3NDgzNjQ4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSwgLTQyOTQ5NjcyOTVMKQorCisgICAgICAgICMgUG9zaXRpdmUgY29uc3RhbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMGIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCA5MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEsIDE4NDQ2NzQ0MDczNzA5NTUxNjE1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgcGFyZW50aGVzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCksIC05MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSksIC0xODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgICMgVGhpcyBmYWlsZWQgaW4gUHl0aG9uIDIuMiB0aHJvdWdoIDIuMi4yIGFuZCBpbiAyLjNhMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wYjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIC05MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExLCAtMTg0NDY3NDQwNzM3MDk1NTE2MTVMKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0SGV4T2N0QmluKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pby5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2lvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYTA1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pby5weQpAQCAtMCwwICsxLDMwODMgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIHRoZSBpbyBtb2R1bGUuIiIiCisKKyMgVGVzdHMgb2YgaW8gYXJlIHNjYXR0ZXJlZCBvdmVyIHRoZSB0ZXN0IHN1aXRlOgorIyAqIHRlc3RfYnVmaW8gLSB0ZXN0cyBmaWxlIGJ1ZmZlcmluZworIyAqIHRlc3RfbWVtb3J5aW8gLSB0ZXN0cyBCeXRlc0lPIGFuZCBTdHJpbmdJTworIyAqIHRlc3RfZmlsZWlvIC0gdGVzdHMgRmlsZUlPCisjICogdGVzdF9maWxlIC0gdGVzdHMgdGhlIGZpbGUgaW50ZXJmYWNlCisjICogdGVzdF9pbyAtIHRlc3RzIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgaW8gbW9kdWxlCisjICogdGVzdF91bml2bmV3bGluZXMgLSB0ZXN0cyB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0CisjICogdGVzdF9sYXJnZWZpbGUgLSB0ZXN0cyBvcGVyYXRpb25zIG9uIGEgZmlsZSBncmVhdGVyIHRoYW4gMioqMzIgYnl0ZXMKKyMgICAgIChvbmx5IGVuYWJsZWQgd2l0aCAtdWxhcmdlZmlsZSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQVRURU5USU9OIFRFU1QgV1JJVEVSUyEhIQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2hlbiB3cml0aW5nIHRlc3RzIGZvciBpbywgaXQncyBpbXBvcnRhbnQgdG8gdGVzdCBib3RoIHRoZSBDIGFuZCBQeXRob24KKyMgaW1wbGVtZW50YXRpb25zLiBUaGlzIGlzIHVzdWFsbHkgZG9uZSBieSB3cml0aW5nIGEgYmFzZSB0ZXN0IHRoYXQgcmVmZXJzIHRvCisjIHRoZSB0eXBlIGl0IGlzIHRlc3RpbmcgYXMgYSBhdHRyaWJ1dGUuIFRoZW4gaXQgcHJvdmlkZXMgY3VzdG9tIHN1YmNsYXNzZXMgdG8KKyMgdGVzdCBib3RoIGltcGxlbWVudGF0aW9ucy4gVGhpcyBmaWxlIGhhcyBsb3RzIG9mIGV4YW1wbGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBhcnJheQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IGFiYworaW1wb3J0IHNpZ25hbAoraW1wb3J0IGVycm5vCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY3ljbGUsIGNvdW50Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQorZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK2ltcG9ydCBjb250ZXh0bGliCisKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBpbyAgIyBDIGltcGxlbWVudGF0aW9uIG9mIGlvCitpbXBvcnQgX3B5aW8gYXMgcHlpbyAjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBpbwordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCit0cnk6CisgICAgaW1wb3J0IGZjbnRsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZmNudGwgPSBOb25lCisKK19fbWV0YWNsYXNzX18gPSB0eXBlCitieXRlcyA9IHN1cHBvcnQucHkza19ieXRlcworCitkZWYgX2RlZmF1bHRfY2h1bmtfc2l6ZSgpOgorICAgICIiIkdldCB0aGUgZGVmYXVsdCBUZXh0SU9XcmFwcGVyIGNodW5rIHNpemUiIiIKKyAgICB3aXRoIGlvLm9wZW4oX19maWxlX18sICJyIiwgZW5jb2Rpbmc9ImxhdGluMSIpIGFzIGY6CisgICAgICAgIHJldHVybiBmLl9DSFVOS19TSVpFCisKKworY2xhc3MgTW9ja1Jhd0lPV2l0aG91dFJlYWQ6CisgICAgIiIiQSBSYXdJTyBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHJlYWQoKSwgc28gYXMgdG8gZXhlcmNpc2UgdGhlIGRlZmF1bHQKKyAgICBSYXdJTy5yZWFkKCkgd2hpY2ggY2FsbHMgcmVhZGludG8oKS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFkX3N0YWNrPSgpKToKKyAgICAgICAgc2VsZi5fcmVhZF9zdGFjayA9IGxpc3QocmVhZF9zdGFjaykKKyAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2sgPSBbXQorICAgICAgICBzZWxmLl9yZWFkcyA9IDAKKyAgICAgICAgc2VsZi5fZXh0cmFuZW91c19yZWFkcyA9IDAKKworICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2suYXBwZW5kKGJ5dGVzKGIpKQorICAgICAgICByZXR1cm4gbGVuKGIpCisKKyAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICByZXR1cm4gNDIKKworICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlKToKKyAgICAgICAgcmV0dXJuIDAgICAjIHdyb25nIGJ1dCB3ZSBnb3R0YSByZXR1cm4gc29tZXRoaW5nCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgcmV0dXJuIDAgICAjIHNhbWUgY29tbWVudCBhcyBhYm92ZQorCisgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGJ1Zik6CisgICAgICAgIHNlbGYuX3JlYWRzICs9IDEKKyAgICAgICAgbWF4X2xlbiA9IGxlbihidWYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9yZWFkX3N0YWNrWzBdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgc2VsZi5fZXh0cmFuZW91c19yZWFkcyArPSAxCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICBkZWwgc2VsZi5fcmVhZF9zdGFja1swXQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgbiA9IGxlbihkYXRhKQorICAgICAgICBpZiBsZW4oZGF0YSkgPD0gbWF4X2xlbjoKKyAgICAgICAgICAgIGRlbCBzZWxmLl9yZWFkX3N0YWNrWzBdCisgICAgICAgICAgICBidWZbOm5dID0gZGF0YQorICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJ1Zls6XSA9IGRhdGFbOm1heF9sZW5dCisgICAgICAgICAgICBzZWxmLl9yZWFkX3N0YWNrWzBdID0gZGF0YVttYXhfbGVuOl0KKyAgICAgICAgICAgIHJldHVybiBtYXhfbGVuCisKKyAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgorICAgICAgICByZXR1cm4gcG9zCisKK2NsYXNzIENNb2NrUmF3SU9XaXRob3V0UmVhZChNb2NrUmF3SU9XaXRob3V0UmVhZCwgaW8uUmF3SU9CYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFB5TW9ja1Jhd0lPV2l0aG91dFJlYWQoTW9ja1Jhd0lPV2l0aG91dFJlYWQsIHB5aW8uUmF3SU9CYXNlKToKKyAgICBwYXNzCisKKworY2xhc3MgTW9ja1Jhd0lPKE1vY2tSYXdJT1dpdGhvdXRSZWFkKToKKworICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgIHNlbGYuX3JlYWRzICs9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfc3RhY2sucG9wKDApCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhbmVvdXNfcmVhZHMgKz0gMQorICAgICAgICAgICAgcmV0dXJuIGIiIgorCitjbGFzcyBDTW9ja1Jhd0lPKE1vY2tSYXdJTywgaW8uUmF3SU9CYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFB5TW9ja1Jhd0lPKE1vY2tSYXdJTywgcHlpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBNaXNiZWhhdmVkUmF3SU8oTW9ja1Jhd0lPKToKKyAgICBkZWYgd3JpdGUoc2VsZiwgYik6CisgICAgICAgIHJldHVybiBNb2NrUmF3SU8ud3JpdGUoc2VsZiwgYikgKiAyCisKKyAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgICAgICByZXR1cm4gTW9ja1Jhd0lPLnJlYWQoc2VsZiwgbikgKiAyCisKKyAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZSk6CisgICAgICAgIHJldHVybiAtMTIzCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgcmV0dXJuIC00NTYKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBidWYpOgorICAgICAgICBNb2NrUmF3SU8ucmVhZGludG8oc2VsZiwgYnVmKQorICAgICAgICByZXR1cm4gbGVuKGJ1ZikgKiA1CisKK2NsYXNzIENNaXNiZWhhdmVkUmF3SU8oTWlzYmVoYXZlZFJhd0lPLCBpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworY2xhc3MgUHlNaXNiZWhhdmVkUmF3SU8oTWlzYmVoYXZlZFJhd0lPLCBweWlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIENsb3NlRmFpbHVyZUlPKE1vY2tSYXdJTyk6CisgICAgY2xvc2VkID0gMAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IDEKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKworY2xhc3MgQ0Nsb3NlRmFpbHVyZUlPKENsb3NlRmFpbHVyZUlPLCBpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworY2xhc3MgUHlDbG9zZUZhaWx1cmVJTyhDbG9zZUZhaWx1cmVJTywgcHlpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBNb2NrRmlsZUlPOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnJlYWRfaGlzdG9yeSA9IFtdCisgICAgICAgIHN1cGVyKE1vY2tGaWxlSU8sIHNlbGYpLl9faW5pdF9fKGRhdGEpCisKKyAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgICAgICByZXMgPSBzdXBlcihNb2NrRmlsZUlPLCBzZWxmKS5yZWFkKG4pCisgICAgICAgIHNlbGYucmVhZF9oaXN0b3J5LmFwcGVuZChOb25lIGlmIHJlcyBpcyBOb25lIGVsc2UgbGVuKHJlcykpCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKKyAgICAgICAgcmVzID0gc3VwZXIoTW9ja0ZpbGVJTywgc2VsZikucmVhZGludG8oYikKKyAgICAgICAgc2VsZi5yZWFkX2hpc3RvcnkuYXBwZW5kKHJlcykKKyAgICAgICAgcmV0dXJuIHJlcworCitjbGFzcyBDTW9ja0ZpbGVJTyhNb2NrRmlsZUlPLCBpby5CeXRlc0lPKToKKyAgICBwYXNzCisKK2NsYXNzIFB5TW9ja0ZpbGVJTyhNb2NrRmlsZUlPLCBweWlvLkJ5dGVzSU8pOgorICAgIHBhc3MKKworCitjbGFzcyBNb2NrTm9uQmxvY2tXcml0ZXJJTzoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2sgPSBbXQorICAgICAgICBzZWxmLl9ibG9ja2VyX2NoYXIgPSBOb25lCisKKyAgICBkZWYgcG9wX3dyaXR0ZW4oc2VsZik6CisgICAgICAgIHMgPSBiIiIuam9pbihzZWxmLl93cml0ZV9zdGFjaykKKyAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2tbOl0gPSBbXQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGJsb2NrX29uKHNlbGYsIGNoYXIpOgorICAgICAgICAiIiJCbG9jayB3aGVuIGEgZ2l2ZW4gY2hhciBpcyBlbmNvdW50ZXJlZC4iIiIKKyAgICAgICAgc2VsZi5fYmxvY2tlcl9jaGFyID0gY2hhcgorCisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICBiID0gYnl0ZXMoYikKKyAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIHNlbGYuX2Jsb2NrZXJfY2hhcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuID0gYi5pbmRleChzZWxmLl9ibG9ja2VyX2NoYXIpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG4gPiAwOgorICAgICAgICAgICAgICAgICAgICAjIHdyaXRlIGRhdGEgdXAgdG8gdGhlIGZpcnN0IGJsb2NrZXIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2suYXBwZW5kKGJbOm5dKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgY2FuY2VsIGJsb2NrZXIgYW5kIGluZGljYXRlIHdvdWxkIGJsb2NrCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jsb2NrZXJfY2hhciA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2suYXBwZW5kKGIpCisgICAgICAgIHJldHVybiBsZW4oYikKKworY2xhc3MgQ01vY2tOb25CbG9ja1dyaXRlcklPKE1vY2tOb25CbG9ja1dyaXRlcklPLCBpby5SYXdJT0Jhc2UpOgorICAgIEJsb2NraW5nSU9FcnJvciA9IGlvLkJsb2NraW5nSU9FcnJvcgorCitjbGFzcyBQeU1vY2tOb25CbG9ja1dyaXRlcklPKE1vY2tOb25CbG9ja1dyaXRlcklPLCBweWlvLlJhd0lPQmFzZSk6CisgICAgQmxvY2tpbmdJT0Vycm9yID0gcHlpby5CbG9ja2luZ0lPRXJyb3IKKworCitjbGFzcyBJT1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgd3JpdGVfb3BzKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYiJibGFoLiIpLCA1KQorICAgICAgICBmLnRydW5jYXRlKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDUpCisgICAgICAgIGYuc2VlaygwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZShiImJsYWguIiksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYiJIZWxsby4iKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoLTEsIDEpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYnl0ZWFycmF5KGIiIHdvcmxkXG5cblxuIikpLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGIiaCIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygtMSwgMiksIDEzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxMykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudHJ1bmNhdGUoMTIpLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5zZWVrLCAwLjApCisKKyAgICBkZWYgcmVhZF9vcHMoc2VsZiwgZiwgYnVmZmVyZWQ9RmFsc2UpOgorICAgICAgICBkYXRhID0gZi5yZWFkKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYiJoZWxsbyIpCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRpbnRvKGRhdGEpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIiIHdvcmwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGludG8oZGF0YSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRhdGEpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFbOjJdLCBiImRcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgyMCksIGIiaGVsbG8gd29ybGRcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkaW50byhieXRlYXJyYXkoYiJ4IikpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygtNiwgMiksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDUpLCBiIndvcmxkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMCksIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRpbnRvKGJ5dGVhcnJheSgpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoLTYsIDEpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCg1KSwgYiIgd29ybCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuc2VlaywgMC4wKQorICAgICAgICBpZiBidWZmZXJlZDoKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJoZWxsbyB3b3JsZFxuIikKKyAgICAgICAgICAgIGYuc2Vlayg2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJ3b3JsZFxuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiIikKKworICAgIExBUkdFID0gMioqMzEKKworICAgIGRlZiBsYXJnZV9maWxlX29wcyhzZWxmLCBmKToKKyAgICAgICAgYXNzZXJ0IGYucmVhZGFibGUoKQorICAgICAgICBhc3NlcnQgZi53cml0YWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKHNlbGYuTEFSR0UpLCBzZWxmLkxBUkdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBzZWxmLkxBUkdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYiJ4eHgiKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgc2VsZi5MQVJHRSArIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKC0xLCAxKSwgc2VsZi5MQVJHRSArIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50cnVuY2F0ZSgpLCBzZWxmLkxBUkdFICsgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgc2VsZi5MQVJHRSArIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDAsIDIpLCBzZWxmLkxBUkdFICsgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRydW5jYXRlKHNlbGYuTEFSR0UgKyAxKSwgc2VsZi5MQVJHRSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHNlbGYuTEFSR0UgKyAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwLCAyKSwgc2VsZi5MQVJHRSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKC0xLCAyKSwgc2VsZi5MQVJHRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMiksIGIieCIpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX29wZXJhdGlvbnMoc2VsZik6CisgICAgICAgICMgVHJ5IHdyaXRpbmcgb24gYSBmaWxlIG9wZW5lZCBpbiByZWFkIG1vZGUgYW5kIHZpY2UtdmVyc2EuCisgICAgICAgIGZvciBtb2RlIGluICgidyIsICJ3YiIpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIG1vZGUpIGFzIGZwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLnJlYWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZnAucmVhZGxpbmUpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLndyaXRlLCBiImJsYWgiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZnAud3JpdGVsaW5lcywgW2IiYmxhaFxuIl0pCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiciIpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZnAud3JpdGUsICJibGFoIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLndyaXRlbGluZXMsIFsiYmxhaFxuIl0pCisKKyAgICBkZWYgdGVzdF9yYXdfZmlsZV9pbyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRhYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVfb3BzKGYpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLnJlYWRfb3BzKGYpCisKKyAgICBkZWYgdGVzdF9idWZmZXJlZF9maWxlX2lvKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLndyaXRlX29wcyhmKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLnJlYWRfb3BzKGYsIFRydWUpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIiYWJjXG5kZWZcbnh5enp5XG5mb29ceDAwYmFyXG5hbm90aGVyIGxpbmUiKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCBiImFiY1xuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgxMCksIGIiZGVmXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKDIpLCBiInh5IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSg0KSwgYiJ6enlcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgYiJmb29ceDAwYmFyXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKE5vbmUpLCBiImFub3RoZXIgbGluZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZGxpbmUsIDUuMykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkbGluZSwgNS4zKQorCisgICAgZGVmIHRlc3RfcmF3X2J5dGVzX2lvKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgc2VsZi53cml0ZV9vcHMoZikKKyAgICAgICAgZGF0YSA9IGYuZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIiaGVsbG8gd29ybGRcbiIpCisgICAgICAgIGYgPSBzZWxmLkJ5dGVzSU8oZGF0YSkKKyAgICAgICAgc2VsZi5yZWFkX29wcyhmLCBUcnVlKQorCisgICAgZGVmIHRlc3RfbGFyZ2VfZmlsZV9vcHMoc2VsZik6CisgICAgICAgICMgT24gV2luZG93cyBhbmQgTWFjIE9TWCB0aGlzIHRlc3QgY29tc3VtZXMgbGFyZ2UgcmVzb3VyY2VzOyBJdCB0YWtlcworICAgICAgICAjIGEgbG9uZyB0aW1lIHRvIGJ1aWxkIHRoZSA+MkdCIGZpbGUgYW5kIHRha2VzID4yR0Igb2YgZGlzayBzcGFjZQorICAgICAgICAjIHRoZXJlZm9yZSB0aGUgcmVzb3VyY2UgbXVzdCBiZSBlbmFibGVkIHRvIHJ1biB0aGlzIHRlc3QuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicgb3Igc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgaWYgbm90IHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgibGFyZ2VmaWxlIik6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuVGVzdGluZyBsYXJnZSBmaWxlIG9wcyBza2lwcGVkIG9uICVzLiIgJSBzeXMucGxhdGZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIHByaW50KCJJdCByZXF1aXJlcyAlZCBieXRlcyBhbmQgYSBsb25nIHRpbWUuIiAlIHNlbGYuTEFSR0UsCisgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIHByaW50KCJVc2UgJ3JlZ3J0ZXN0LnB5IC11IGxhcmdlZmlsZSB0ZXN0X2lvJyB0byBydW4gaXQuIiwKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidytiIiwgMCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYubGFyZ2VfZmlsZV9vcHMoZikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3K2IiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5sYXJnZV9maWxlX29wcyhmKQorCisgICAgZGVmIHRlc3Rfd2l0aF9vcGVuKHNlbGYpOgorICAgICAgICBmb3IgYnVmc2l6ZSBpbiAoMCwgMSwgMTAwKToKKyAgICAgICAgICAgIGYgPSBOb25lCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmc2l6ZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGIieHh4IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jbG9zZWQsIFRydWUpCisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZzaXplKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2xvc2VkLCBUcnVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIjEgLy8gMCBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKKworICAgICMgaXNzdWUgNTAwOAorICAgIGRlZiB0ZXN0X2FwcGVuZF9tb2RlX3RlbGwoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInh4eCIpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiYWIiLCBidWZmZXJpbmc9MCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDMpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiYWIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJhIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLnRlbGwoKSA+IDApCisKKyAgICBkZWYgdGVzdF9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICByZWNvcmQgPSBbXQorICAgICAgICBjbGFzcyBNeUZpbGVJTyhzZWxmLkZpbGVJTyk6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmID0gc3VwZXIoTXlGaWxlSU8sIHNlbGYpLl9fZGVsX18KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlGaWxlSU8sIHNlbGYpLmNsb3NlKCkKKyAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDMpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlGaWxlSU8sIHNlbGYpLmZsdXNoKCkKKyAgICAgICAgZiA9IE15RmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICBmLndyaXRlKGIieHh4IikKKyAgICAgICAgZGVsIGYKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyLCAzXSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiInh4eCIpCisKKyAgICBkZWYgX2NoZWNrX2Jhc2VfZGVzdHJ1Y3RvcihzZWxmLCBiYXNlKToKKyAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgY2xhc3MgTXlJTyhiYXNlKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIFRoaXMgZXhlcmNpc2VzIHRoZSBhdmFpbGFiaWxpdHkgb2YgYXR0cmlidXRlcyBvbiBvYmplY3QKKyAgICAgICAgICAgICAgICAjIGRlc3RydWN0aW9uLgorICAgICAgICAgICAgICAgICMgKGluIHRoZSBDIHZlcnNpb24sIGNsb3NlKCkgaXMgY2FsbGVkIGJ5IHRoZSB0cF9kZWFsbG9jCisgICAgICAgICAgICAgICAgIyBmdW5jdGlvbiwgbm90IGJ5IF9fZGVsX18pCisgICAgICAgICAgICAgICAgc2VsZi5vbl9kZWwgPSAxCisgICAgICAgICAgICAgICAgc2VsZi5vbl9jbG9zZSA9IDIKKyAgICAgICAgICAgICAgICBzZWxmLm9uX2ZsdXNoID0gMworICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZChzZWxmLm9uX2RlbCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGYgPSBzdXBlcihNeUlPLCBzZWxmKS5fX2RlbF9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZChzZWxmLm9uX2Nsb3NlKQorICAgICAgICAgICAgICAgIHN1cGVyKE15SU8sIHNlbGYpLmNsb3NlKCkKKyAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKHNlbGYub25fZmx1c2gpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlJTywgc2VsZikuZmx1c2goKQorICAgICAgICBmID0gTXlJTygpCisgICAgICAgIGRlbCBmCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkLCBbMSwgMiwgM10pCisKKyAgICBkZWYgdGVzdF9JT0Jhc2VfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfYmFzZV9kZXN0cnVjdG9yKHNlbGYuSU9CYXNlKQorCisgICAgZGVmIHRlc3RfUmF3SU9CYXNlX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Jhc2VfZGVzdHJ1Y3RvcihzZWxmLlJhd0lPQmFzZSkKKworICAgIGRlZiB0ZXN0X0J1ZmZlcmVkSU9CYXNlX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Jhc2VfZGVzdHJ1Y3RvcihzZWxmLkJ1ZmZlcmVkSU9CYXNlKQorCisgICAgZGVmIHRlc3RfVGV4dElPQmFzZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19iYXNlX2Rlc3RydWN0b3Ioc2VsZi5UZXh0SU9CYXNlKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmx1c2hlcyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIieHh4IikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiInh4eCIpCisKKyAgICBkZWYgdGVzdF9hcnJheV93cml0ZXMoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShiJ2knLCByYW5nZSgxMCkpCisgICAgICAgIG4gPSBsZW4oYS50b3N0cmluZygpKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgMCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZShhKSwgbikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYSksIG4pCisKKyAgICBkZWYgdGVzdF9jbG9zZWZkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLm9wZW4sIHN1cHBvcnQuVEVTVEZOLCAndycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZmQ9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9yZWFkX2Nsb3NlZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoImVnZ1xuIikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIikgYXMgZjoKKyAgICAgICAgICAgIGZpbGUgPSBzZWxmLm9wZW4oZi5maWxlbm8oKSwgInIiLCBjbG9zZWZkPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlLnJlYWQoKSwgImVnZ1xuIikKKyAgICAgICAgICAgIGZpbGUuc2VlaygwKQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmaWxlLnJlYWQpCisKKyAgICBkZWYgdGVzdF9ub19jbG9zZWZkX3dpdGhfZmlsZW5hbWUoc2VsZik6CisgICAgICAgICMgY2FuJ3QgdXNlIGNsb3NlZmQgaW4gY29tYmluYXRpb24gd2l0aCBhIGZpbGUgbmFtZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLm9wZW4sIHN1cHBvcnQuVEVTVEZOLCAiciIsIGNsb3NlZmQ9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9jbG9zZWZkX2F0dHIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiImVnZ1xuIikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3LmNsb3NlZmQsIFRydWUpCisgICAgICAgICAgICBmaWxlID0gc2VsZi5vcGVuKGYuZmlsZW5vKCksICJyIiwgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZS5idWZmZXIucmF3LmNsb3NlZmQsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIEZpbGVJTyBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcworICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCisgICAgICAgIGYgPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgZi53cml0ZShiImFiY3h4eCIpCisgICAgICAgIGYuZiA9IGYKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBkZWwgZgorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiY3h4eCIpCisKKyAgICBkZWYgdGVzdF91bmJvdW5kZWRfZmlsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTE3NDYwNjogcmVhZGluZyBmcm9tIGFuIHVuYm91bmRlZCBzdHJlYW0gc3VjaCBhcyAvZGV2L3plcm8uCisgICAgICAgIHplcm8gPSAiL2Rldi96ZXJvIgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoemVybyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ7MH0gZG9lcyBub3QgZXhpc3QiLmZvcm1hdCh6ZXJvKSkKKyAgICAgICAgaWYgc3lzLm1heHNpemUgPiAweDdGRkZGRkZGOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBjYW4gb25seSBydW4gaW4gYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSIpCisgICAgICAgIGlmIHN1cHBvcnQucmVhbF9tYXhfbWVtdXNlIDwgc3VwcG9ydC5fMkc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IHJlcXVpcmVzIGF0IGxlYXN0IDJHQiBvZiBtZW1vcnkiKQorICAgICAgICB3aXRoIHNlbGYub3Blbih6ZXJvLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGYucmVhZCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oemVybywgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGYucmVhZCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oemVybywgInIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZi5yZWFkKQorCisgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQorICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgZi5mbHVzaCA9IGJhZF9mbHVzaAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5mbHVzaCkKKworICAgIGRlZiB0ZXN0X1Jhd0lPQmFzZV9yZWFkKHNlbGYpOgorICAgICAgICAjIEV4ZXJjaXNlIHRoZSBkZWZhdWx0IFJhd0lPQmFzZS5yZWFkKCkgaW1wbGVtZW50YXRpb24gKHdoaWNoIGNhbGxzCisgICAgICAgICMgcmVhZGludG8oKSBpbnRlcm5hbGx5KS4KKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJT1dpdGhvdXRSZWFkKChiImFiYyIsIGIiZCIsIE5vbmUsIGIiZWZnIiwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJhYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkKDIpLCBiImQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkKDIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiIikKKworICAgIGRlZiB0ZXN0X2ZpbGVpb19jbG9zZWZkKHNlbGYpOgorICAgICAgICAjIElzc3VlICM0ODQxCisgICAgICAgIHdpdGggc2VsZi5vcGVuKF9fZmlsZV9fLCAncmInKSBhcyBmMSwgXAorICAgICAgICAgICAgIHNlbGYub3BlbihfX2ZpbGVfXywgJ3JiJykgYXMgZjI6CisgICAgICAgICAgICBmaWxlaW8gPSBzZWxmLkZpbGVJTyhmMS5maWxlbm8oKSwgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgICAgICMgLl9faW5pdF9fKCkgbXVzdCBub3QgY2xvc2UgZjEKKyAgICAgICAgICAgIGZpbGVpby5fX2luaXRfXyhmMi5maWxlbm8oKSwgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgICAgIGYxLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICMgLmNsb3NlKCkgbXVzdCBub3QgY2xvc2UgZjIKKyAgICAgICAgICAgIGZpbGVpby5jbG9zZSgpCisgICAgICAgICAgICBmMi5yZWFkbGluZSgpCisKKworY2xhc3MgQ0lPVGVzdChJT1Rlc3QpOgorCisgICAgZGVmIHRlc3RfSU9CYXNlX2ZpbmFsaXplKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMjE0OTogc2VnbWVudGF0aW9uIGZhdWx0IG9uIF9QeUlPQmFzZV9maW5hbGl6ZSB3aGVuIGJvdGggYQorICAgICAgICAjIGNsYXNzIHdoaWNoIGluaGVyaXRzIElPQmFzZSBhbmQgYW4gb2JqZWN0IG9mIHRoaXMgY2xhc3MgYXJlIGNhdWdodAorICAgICAgICAjIGluIGEgcmVmZXJlbmNlIGN5Y2xlIGFuZCBjbG9zZSgpIGlzIGFscmVhZHkgaW4gdGhlIG1ldGhvZCBjYWNoZS4KKyAgICAgICAgY2xhc3MgTXlJTyhzZWxmLklPQmFzZSk6CisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgY3JlYXRlIGFuIGluc3RhbmNlIHRvIHBvcHVsYXRlIHRoZSBtZXRob2QgY2FjaGUKKyAgICAgICAgTXlJTygpCisgICAgICAgIG9iaiA9IE15SU8oKQorICAgICAgICBvYmoub2JqID0gb2JqCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYob2JqKQorICAgICAgICBkZWwgTXlJTworICAgICAgICBkZWwgb2JqCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorCitjbGFzcyBQeUlPVGVzdChJT1Rlc3QpOgorICAgIHRlc3RfYXJyYXlfd3JpdGVzID0gdW5pdHRlc3Quc2tpcCgKKyAgICAgICAgImxlbihhcnJheS5hcnJheSkgcmV0dXJucyBudW1iZXIgb2YgZWxlbWVudHMgcmF0aGVyIHRoYW4gYnl0ZWxlbmd0aCIKKyAgICApKElPVGVzdC50ZXN0X2FycmF5X3dyaXRlcykKKworCitjbGFzcyBDb21tb25CdWZmZXJlZFRlc3RzOgorICAgICMgVGVzdHMgY29tbW9uIHRvIEJ1ZmZlcmVkUmVhZGVyLCBCdWZmZXJlZFdyaXRlciBhbmQgQnVmZmVyZWRSYW5kb20KKworICAgIGRlZiB0ZXN0X2RldGFjaChzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWYgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhidWYuZGV0YWNoKCksIHJhdykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmLmRldGFjaCkKKworICAgIGRlZiB0ZXN0X2ZpbGVubyhzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBidWZpby5maWxlbm8oKSkKKworICAgIGRlZiB0ZXN0X25vX2ZpbGVubyhzZWxmKToKKyAgICAgICAgIyBYWFggd2lsbCB3ZSBhbHdheXMgaGF2ZSBmaWxlbm8oKSBmdW5jdGlvbj8gSWYgc28sIGtpbGwKKyAgICAgICAgIyB0aGlzIHRlc3QuIEVsc2UsIHdyaXRlIGl0LgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICMgSW52YWxpZCB3aGVuY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uc2VlaywgMCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLnNlZWssIDAsIDMpCisKKyAgICBkZWYgdGVzdF9vdmVycmlkZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICB0cCA9IHNlbGYudHAKKyAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgY2xhc3MgTXlCdWZmZXJlZElPKHRwKToKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGYgPSBzdXBlcihNeUJ1ZmZlcmVkSU8sIHNlbGYpLl9fZGVsX18KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlCdWZmZXJlZElPLCBzZWxmKS5jbG9zZSgpCisgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgzKQorICAgICAgICAgICAgICAgIHN1cGVyKE15QnVmZmVyZWRJTywgc2VsZikuZmx1c2goKQorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBNeUJ1ZmZlcmVkSU8ocmF3aW8pCisgICAgICAgIHdyaXRhYmxlID0gYnVmaW8ud3JpdGFibGUoKQorICAgICAgICBkZWwgYnVmaW8KKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgaWYgd3JpdGFibGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgWzEsIDIsIDNdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyXSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHVzYWJpbGl0eSBhcyBhIGNvbnRleHQgbWFuYWdlcgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBkZWYgX3dpdGgoKToKKyAgICAgICAgICAgIHdpdGggYnVmaW86CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBfd2l0aCgpCisgICAgICAgICMgYnVmaW8gc2hvdWxkIG5vdyBiZSBjbG9zZWQsIGFuZCB1c2luZyBpdCBhIHNlY29uZCB0aW1lIHNob3VsZCByYWlzZQorICAgICAgICAjIGEgVmFsdWVFcnJvci4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX3dpdGgpCisKKyAgICBkZWYgdGVzdF9lcnJvcl90aHJvdWdoX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBleGNlcHRpb24gc3RhdGUgaXMgbm90IG1vZGlmaWVkIGJ5IGEgZGVzdHJ1Y3RvciwKKyAgICAgICAgIyBldmVuIGlmIGNsb3NlKCkgZmFpbHMuCisgICAgICAgIHJhd2lvID0gc2VsZi5DbG9zZUZhaWx1cmVJTygpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzZWxmLnRwKHJhd2lvKS54eXp6eQorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGYpCisgICAgICAgIHMgPSBzLmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiBzOgorICAgICAgICAgICAgIyBUaGUgZGVzdHJ1Y3RvciAqbWF5KiBoYXZlIHByaW50ZWQgYW4gdW5yYWlzYWJsZSBlcnJvciwgY2hlY2sgaXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuc3BsaXRsaW5lcygpKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBJT0Vycm9yOiAiKSwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKCIgaWdub3JlZCIpLCBzKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBiID0gc2VsZi50cChyYXcpCisgICAgICAgIGNsc25hbWUgPSAiJXMuJXMiICUgKHNlbGYudHAuX19tb2R1bGVfXywgc2VsZi50cC5fX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGIpLCAiPCVzPiIgJSBjbHNuYW1lKQorICAgICAgICByYXcubmFtZSA9ICJkdW1teSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGIpLCAiPCVzIG5hbWU9dSdkdW1teSc+IiAlIGNsc25hbWUpCisgICAgICAgIHJhdy5uYW1lID0gYiJkdW1teSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGIpLCAiPCVzIG5hbWU9J2R1bW15Jz4iICUgY2xzbmFtZSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGRlZiBiYWRfZmx1c2goKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICByYXcuZmx1c2ggPSBiYWRfZmx1c2gKKyAgICAgICAgYiA9IHNlbGYudHAocmF3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGRlZiBiYWRfZmx1c2goKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2ZsdXNoJykKKyAgICAgICAgZGVmIGJhZF9jbG9zZSgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignY2xvc2UnKQorICAgICAgICByYXcuY2xvc2UgPSBiYWRfY2xvc2UKKyAgICAgICAgYiA9IHNlbGYudHAocmF3KQorICAgICAgICBiLmZsdXNoID0gYmFkX2ZsdXNoCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgZXJyOiAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgICAgICBiLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhjZXB0aW9uLmFyZ3MsICgnY2xvc2UnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBiID0gc2VsZi50cChyYXcpCisgICAgICAgIGIuY2xvc2UoKQorICAgICAgICBiLmNsb3NlKCkKKyAgICAgICAgYi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGIuZmx1c2gpCisKKyAgICBkZWYgdGVzdF9yZWFkb25seV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZiA9IHNlbGYudHAocmF3KQorICAgICAgICB4ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKSk6CisgICAgICAgICAgICBidWYucmF3ID0geAorCisKK2NsYXNzIFNpemVvZlRlc3Q6CisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zaXplb2Yoc2VsZik6CisgICAgICAgIGJ1ZnNpemUxID0gNDA5NgorICAgICAgICBidWZzaXplMiA9IDgxOTIKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZTEpCisgICAgICAgIHNpemUgPSBzeXMuZ2V0c2l6ZW9mKGJ1ZmlvKSAtIGJ1ZnNpemUxCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoYnVmaW8pLCBzaXplICsgYnVmc2l6ZTIpCisKKworY2xhc3MgQnVmZmVyZWRSZWFkZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBDb21tb25CdWZmZXJlZFRlc3RzKToKKyAgICByZWFkX21vZGUgPSAicmIiCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTyhbYiJhYmMiXSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBidWZpby5fX2luaXRfXyhyYXdpbykKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8sIGJ1ZmZlcl9zaXplPTEwMjQpCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvLCBidWZmZXJfc2l6ZT0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiYyIsIGJ1ZmlvLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMSkKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTyhbYiJhYmMiXSkKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiLCBidWZpby5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBmb3IgYXJnIGluIChOb25lLCA3KToKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmNkZWZnIiwgYnVmaW8ucmVhZChhcmcpKQorICAgICAgICAjIEludmFsaWQgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5yZWFkLCAtMikKKworICAgIGRlZiB0ZXN0X3JlYWQxKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImEiLCBidWZpby5yZWFkKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYiIsIGJ1ZmlvLnJlYWQxKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImMiLCBidWZpby5yZWFkMSgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImQiLCBidWZpby5yZWFkMSgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImVmZyIsIGJ1ZmlvLnJlYWQxKDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8uX3JlYWRzLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIiwgYnVmaW8ucmVhZDEoMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fcmVhZHMsIDQpCisgICAgICAgICMgSW52YWxpZCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLnJlYWQxLCAtMSkKKworICAgIGRlZiB0ZXN0X3JlYWRpbnRvKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgYiA9IGJ5dGVhcnJheSgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWRpbnRvKGIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiYWIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWRpbnRvKGIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiY2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWRpbnRvKGIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWRpbnRvKGIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiZ2YiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWRpbnRvKGIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiZ2YiKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBkZWYgYnVmaW8oKToKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGIiYWJjXG4iLCBiImRcbiIsIGIiZWYiKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRwKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvKCkucmVhZGxpbmVzKCksIFtiImFiY1xuIiwgYiJkXG4iLCBiImVmIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8oKS5yZWFkbGluZXMoNSksIFtiImFiY1xuIiwgYiJkXG4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpbygpLnJlYWRsaW5lcyhOb25lKSwgW2IiYWJjXG4iLCBiImRcbiIsIGIiZWYiXSkKKworICAgIGRlZiB0ZXN0X2J1ZmZlcmluZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGIiYWJjZGVmZ2hpIgorICAgICAgICBkbGVuID0gbGVuKGRhdGEpCisKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICBbIDEwMCwgWyAzLCAxLCA0LCA4IF0sIFsgZGxlbiwgMCBdIF0sCisgICAgICAgICAgICBbIDEwMCwgWyAzLCAzLCAzXSwgICAgIFsgZGxlbiBdICAgIF0sCisgICAgICAgICAgICBbICAgNCwgWyAxLCAyLCA0LCAyIF0sIFsgNCwgNCwgMSBdIF0sCisgICAgICAgIF0KKworICAgICAgICBmb3IgYnVmc2l6ZSwgYnVmX3JlYWRfc2l6ZXMsIHJhd19yZWFkX3NpemVzIGluIHRlc3RzOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tGaWxlSU8oZGF0YSkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZSkKKyAgICAgICAgICAgIHBvcyA9IDAKKyAgICAgICAgICAgIGZvciBuYnl0ZXMgaW4gYnVmX3JlYWRfc2l6ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkKG5ieXRlcyksIGRhdGFbcG9zOnBvcytuYnl0ZXNdKQorICAgICAgICAgICAgICAgIHBvcyArPSBuYnl0ZXMKKyAgICAgICAgICAgICMgdGhpcyBpcyBtaWxkbHkgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWRfaGlzdG9yeSwgcmF3X3JlYWRfc2l6ZXMpCisKKyAgICBkZWYgdGVzdF9yZWFkX25vbl9ibG9ja2luZyhzZWxmKToKKyAgICAgICAgIyBJbmplY3Qgc29tZSBOb25lJ3MgaW4gdGhlcmUgdG8gc2ltdWxhdGUgRVdPVUxEQkxPQ0sKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBOb25lLCBiImVmZyIsIE5vbmUsIE5vbmUsIE5vbmUpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmNkIiwgYnVmaW8ucmVhZCg2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImUiLCBidWZpby5yZWFkKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZmciLCBidWZpby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLCBidWZpby5wZWVrKDEpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShidWZpby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLCBidWZpby5yZWFkKCkpCisKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhIiwgTm9uZSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhIiwgcmF3aW8ucmVhZGFsbCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyYXdpby5yZWFkYWxsKCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3Bhc3RfZW9mKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjZGVmZyIsIGJ1ZmlvLnJlYWQoOTAwMCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX2FsbChzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiY2RlZmciLCBidWZpby5yZWFkKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX3Jlc291cmNlKCdjcHUnKQorICAgIGRlZiB0ZXN0X3RocmVhZHMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgV3JpdGUgb3V0IG1hbnkgYnl0ZXMgd2l0aCBleGFjdGx5IHRoZSBzYW1lIG51bWJlciBvZiAwJ3MsCisgICAgICAgICAgICAjIDEncy4uLiAyNTUncy4gVGhpcyB3aWxsIGhlbHAgdXMgY2hlY2sgdGhhdCBjb25jdXJyZW50IHJlYWRpbmcKKyAgICAgICAgICAgICMgZG9lc24ndCBkdXBsaWNhdGUgb3IgZm9yZ2V0IGNvbnRlbnRzLgorICAgICAgICAgICAgTiA9IDEwMDAKKyAgICAgICAgICAgIGwgPSBsaXN0KHJhbmdlKDI1NikpICogTgorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUobCkKKyAgICAgICAgICAgIHMgPSBieXRlcyhieXRlYXJyYXkobCkpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHMpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5yZWFkX21vZGUsIGJ1ZmZlcmluZz0wKSBhcyByYXc6CisgICAgICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgOCkKKyAgICAgICAgICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSW50cmEtYnVmZmVyIHJlYWQgdGhlbiBidWZmZXItZmx1c2hpbmcgcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gY3ljbGUoWzEsIDE5XSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGJ1ZmlvLnJlYWQobikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpc3QuYXBwZW5kKCkgaXMgYXRvbWljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICB0aHJlYWRzID0gW3RocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpIGZvciB4IGluIHJhbmdlKDIwKV0KKyAgICAgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDIpICMgeWllbGQKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAidGhlIGZvbGxvd2luZyBleGNlcHRpb25zIHdlcmUgY2F1Z2h0OiAlciIgJSBlcnJvcnMpCisgICAgICAgICAgICAgICAgcyA9IGInJy5qb2luKHJlc3VsdHMpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgICAgICAgICAgYyA9IGJ5dGVzKGJ5dGVhcnJheShbaV0pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoYyksIE4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5NaXNiZWhhdmVkUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby50ZWxsKQorCisgICAgZGVmIHRlc3Rfbm9fZXh0cmFuZW91c19yZWFkKHNlbGYpOgorICAgICAgICAjIElzc3VlICM5NTUwOyB3aGVuIHRoZSByYXcgSU8gb2JqZWN0IGhhcyBzYXRpc2ZpZWQgdGhlIHJlYWQgcmVxdWVzdCwKKyAgICAgICAgIyB3ZSBzaG91bGQgbm90IGlzc3VlIGFueSBhZGRpdGlvbmFsIHJlYWRzLCBvdGhlcndpc2UgaXQgbWF5IGJsb2NrCisgICAgICAgICMgKGUuZy4gc29ja2V0KS4KKyAgICAgICAgYnVmc2l6ZSA9IDE2CisgICAgICAgIGZvciBuIGluICgyLCBidWZzaXplIC0gMSwgYnVmc2l6ZSwgYnVmc2l6ZSArIDEsIGJ1ZnNpemUgKiAyKToKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IieCIgKiBuXSkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZChuKSwgYiJ4IiAqIG4pCisgICAgICAgICAgICAjIFNpbXBsZSBjYXNlOiBvbmUgcmF3IHJlYWQgaXMgZW5vdWdoIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIGZvciB7fToge30gIT0gMCIuZm9ybWF0KG4sIHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzKSkKKyAgICAgICAgICAgICMgQSBtb3JlIGNvbXBsZXggY2FzZSB3aGVyZSB0d28gcmF3IHJlYWRzIGFyZSBuZWVkZWQgdG8gc2F0aXNmeQorICAgICAgICAgICAgIyB0aGUgcmVxdWVzdC4KKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IieCIgKiAobiAtIDEpLCBiIngiXSkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZChuKSwgYiJ4IiAqIG4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIGZvciB7fToge30gIT0gMCIuZm9ybWF0KG4sIHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzKSkKKworCitjbGFzcyBDQnVmZmVyZWRSZWFkZXJUZXN0KEJ1ZmZlcmVkUmVhZGVyVGVzdCwgU2l6ZW9mVGVzdCk6CisgICAgdHAgPSBpby5CdWZmZXJlZFJlYWRlcgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyVGVzdC50ZXN0X2NvbnN0cnVjdG9yKHNlbGYpCisgICAgICAgICMgVGhlIGFsbG9jYXRpb24gY2FuIHN1Y2NlZWQgb24gMzItYml0IGJ1aWxkcywgZS5nLiB3aXRoIG1vcmUKKyAgICAgICAgIyB0aGFuIDJHQiBSQU0gYW5kIGEgNjQtYml0IGtlcm5lbC4KKyAgICAgICAgaWYgc3lzLm1heHNpemUgPiAweDdGRkZGRkZGOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgTWVtb3J5RXJyb3IsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgc3lzLm1heHNpemUpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTyhbYiJhYmMiXSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTE2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5yZWFkKQorCisgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pb19yZWFkKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgIyBfcHlpby5CdWZmZXJlZFJlYWRlciBzZWVtcyB0byBpbXBsZW1lbnQgcmVhZGluZyBkaWZmZXJlbnQsIHNvIHRoYXQKKyAgICAgICAgIyBjaGVja2luZyB0aGlzIGlzIG5vdCBzbyBlYXN5LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5yZWFkLCAxMCkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBDIEJ1ZmZlcmVkUmVhZGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZC4KKyAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW50byBnYy5nYXJiYWdlIGluc3RlYWQKKyAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCisgICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBmLmYgPSBmCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgZGVsIGYKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisKKyAgICBkZWYgdGVzdF9hcmdzX2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzI3NQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgIkJ1ZmZlcmVkUmVhZGVyIik6CisgICAgICAgICAgICBzZWxmLnRwKGlvLkJ5dGVzSU8oKSwgMTAyNCwgMTAyNCwgMTAyNCkKKworCitjbGFzcyBQeUJ1ZmZlcmVkUmVhZGVyVGVzdChCdWZmZXJlZFJlYWRlclRlc3QpOgorICAgIHRwID0gcHlpby5CdWZmZXJlZFJlYWRlcgorCisKK2NsYXNzIEJ1ZmZlcmVkV3JpdGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQ29tbW9uQnVmZmVyZWRUZXN0cyk6CisgICAgd3JpdGVfbW9kZSA9ICJ3YiIKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBidWZpby5fX2luaXRfXyhyYXdpbykKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8sIGJ1ZmZlcl9zaXplPTEwMjQpCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvLCBidWZmZXJfc2l6ZT0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBidWZpby53cml0ZShiImFiYyIpKQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTEpCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGJ1ZmlvLndyaXRlKGIiZ2hpIikpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIiIuam9pbihyYXdpby5fd3JpdGVfc3RhY2spLCBiImFiY2doaSIpCisKKyAgICBkZWYgdGVzdF9kZXRhY2hfZmx1c2goc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmID0gc2VsZi50cChyYXcpCisgICAgICAgIGJ1Zi53cml0ZShiImhvd2R5ISIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmF3Ll93cml0ZV9zdGFjaykKKyAgICAgICAgYnVmLmRldGFjaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3Ll93cml0ZV9zdGFjaywgW2IiaG93ZHkhIl0pCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgIyBXcml0ZSB0byB0aGUgYnVmZmVyZWQgSU8gYnV0IGRvbid0IG92ZXJmbG93IHRoZSBidWZmZXIuCisgICAgICAgIHdyaXRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHdyaXRlciwgOCkKKyAgICAgICAgYnVmaW8ud3JpdGUoYiJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdyaXRlci5fd3JpdGVfc3RhY2spCisKKyAgICBkZWYgdGVzdF93cml0ZV9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCA4KQorICAgICAgICBjb250ZW50cyA9IGIiYWJjZGVmZ2hpamtsbW5vcCIKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoMCwgbGVuKGNvbnRlbnRzKSwgMyk6CisgICAgICAgICAgICBidWZpby53cml0ZShjb250ZW50c1tuOm4rM10pCisgICAgICAgIGZsdXNoZWQgPSBiIiIuam9pbih3cml0ZXIuX3dyaXRlX3N0YWNrKQorICAgICAgICAjIEF0IGxlYXN0ICh0b3RhbCAtIDgpIGJ5dGVzIHdlcmUgaW1wbGljaXRseSBmbHVzaGVkLCBwZXJoYXBzIG1vcmUKKyAgICAgICAgIyBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmx1c2hlZC5zdGFydHN3aXRoKGNvbnRlbnRzWzotOF0pLCBmbHVzaGVkKQorCisgICAgZGVmIGNoZWNrX3dyaXRlcyhzZWxmLCBpbnRlcm1lZGlhdGVfZnVuYyk6CisgICAgICAgICMgTG90cyBvZiB3cml0ZXMsIHRlc3QgdGhlIGZsdXNoZWQgb3V0cHV0IGlzIGFzIGV4cGVjdGVkLgorICAgICAgICBjb250ZW50cyA9IGJ5dGVzKHJhbmdlKDI1NikpICogMTAwMAorICAgICAgICBuID0gMAorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cCh3cml0ZXIsIDEzKQorICAgICAgICAjIEdlbmVyYXRvciBvZiB3cml0ZSBzaXplczogcmVwZWF0IGVhY2ggTiAxNSB0aW1lcyB0aGVuIHByb2NlZWQgdG8gTisxCisgICAgICAgIGRlZiBnZW5fc2l6ZXMoKToKKyAgICAgICAgICAgIGZvciBzaXplIGluIGNvdW50KDEpOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDE1KToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc2l6ZQorICAgICAgICBzaXplcyA9IGdlbl9zaXplcygpCisgICAgICAgIHdoaWxlIG4gPCBsZW4oY29udGVudHMpOgorICAgICAgICAgICAgc2l6ZSA9IG1pbihuZXh0KHNpemVzKSwgbGVuKGNvbnRlbnRzKSAtIG4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGNvbnRlbnRzW246bitzaXplXSksIHNpemUpCisgICAgICAgICAgICBpbnRlcm1lZGlhdGVfZnVuYyhidWZpbykKKyAgICAgICAgICAgIG4gKz0gc2l6ZQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsCisgICAgICAgICAgICBiIiIuam9pbih3cml0ZXIuX3dyaXRlX3N0YWNrKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMobGFtYmRhIGJ1ZmlvOiBOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9mbHVzaGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyaXRlcyhsYW1iZGEgYnVmaW86IGJ1ZmlvLmZsdXNoKCkpCisKKyAgICBkZWYgdGVzdF93cml0ZXNfYW5kX3NlZWtzKHNlbGYpOgorICAgICAgICBkZWYgX3NlZWthYnMoYnVmaW8pOgorICAgICAgICAgICAgcG9zID0gYnVmaW8udGVsbCgpCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcyArIDEsIDApCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcyAtIDEsIDApCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcywgMCkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3NlZWthYnMpCisgICAgICAgIGRlZiBfc2Vla3JlbChidWZpbyk6CisgICAgICAgICAgICBwb3MgPSBidWZpby5zZWVrKDAsIDEpCisgICAgICAgICAgICBidWZpby5zZWVrKCsxLCAxKQorICAgICAgICAgICAgYnVmaW8uc2VlaygtMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsocG9zLCAwKQorICAgICAgICBzZWxmLmNoZWNrX3dyaXRlcyhfc2Vla3JlbCkKKworICAgIGRlZiB0ZXN0X3dyaXRlc19hbmRfdHJ1bmNhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyaXRlcyhsYW1iZGEgYnVmaW86IGJ1ZmlvLnRydW5jYXRlKGJ1ZmlvLnRlbGwoKSkpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ub25fYmxvY2tpbmcoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja05vbkJsb2NrV3JpdGVySU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCA4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJhYmNkIiksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJlZmdoaSIpLCA1KQorICAgICAgICAjIDEgYnl0ZSB3aWxsIGJlIHdyaXR0ZW4sIHRoZSByZXN0IHdpbGwgYmUgYnVmZmVyZWQKKyAgICAgICAgcmF3LmJsb2NrX29uKGIiayIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJqa2xtbiIpLCA1KQorCisgICAgICAgICMgOCBieXRlcyB3aWxsIGJlIHdyaXR0ZW4sIDggd2lsbCBiZSBidWZmZXJlZCBhbmQgdGhlIHJlc3Qgd2lsbCBiZSBsb3N0CisgICAgICAgIHJhdy5ibG9ja19vbihiIjAiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBidWZpby53cml0ZShiIm9wcXJ3eHl6MDEyMzQ1Njc4OSIpCisgICAgICAgIGV4Y2VwdCBzZWxmLkJsb2NraW5nSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgd3JpdHRlbiA9IGUuY2hhcmFjdGVyc193cml0dGVuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkJsb2NraW5nSU9FcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdHRlbiwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LnBvcF93cml0dGVuKCksCisgICAgICAgICAgICBiImFiY2RlZmdoaWprbG1ub3Bxcnd4eXoiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJBQkNERUZHSEkiKSwgOSkKKyAgICAgICAgcyA9IHJhdy5wb3Bfd3JpdHRlbigpCisgICAgICAgICMgUHJldmlvdXNseSBidWZmZXJlZCBieXRlcyB3ZXJlIGZsdXNoZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aChiIjAxMjM0NTY3QSIpLCBzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYW5kX3Jld2luZChzZWxmKToKKyAgICAgICAgcmF3ID0gaW8uQnl0ZXNJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJhYmNkZWYiKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50ZWxsKCksIDYpCisgICAgICAgIGJ1ZmlvLnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShiIlhZIiksIDIpCisgICAgICAgIGJ1ZmlvLnNlZWsoNiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZ2V0dmFsdWUoKSwgYiJYWWNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiMTIzNDU2IiksIDYpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZ2V0dmFsdWUoKSwgYiJYWWNkZWYxMjM0NTYiKQorCisgICAgZGVmIHRlc3RfZmx1c2goc2VsZik6CisgICAgICAgIHdyaXRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHdyaXRlciwgOCkKKyAgICAgICAgYnVmaW8ud3JpdGUoYiJhYmMiKQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiLCB3cml0ZXIuX3dyaXRlX3N0YWNrWzBdKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lcyhzZWxmKToKKyAgICAgICAgbCA9IFtiJ2FiJywgYidjZCcsIGInZWYnXQorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cCh3cml0ZXIsIDgpCisgICAgICAgIGJ1ZmlvLndyaXRlbGluZXMobCkKKyAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKHdyaXRlci5fd3JpdGVfc3RhY2spLCBiJ2FiY2RlZicpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzX3VzZXJsaXN0KHNlbGYpOgorICAgICAgICBsID0gVXNlckxpc3QoW2InYWInLCBiJ2NkJywgYidlZiddKQorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cCh3cml0ZXIsIDgpCisgICAgICAgIGJ1ZmlvLndyaXRlbGluZXMobCkKKyAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKHdyaXRlci5fd3JpdGVfc3RhY2spLCBiJ2FiY2RlZicpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzX2Vycm9yKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cCh3cml0ZXIsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnVmaW8ud3JpdGVsaW5lcywgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ1ZmlvLndyaXRlbGluZXMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cCh3cml0ZXIsIDgpCisgICAgICAgIGJ1ZmlvLndyaXRlKGIiYWJjIikKKyAgICAgICAgZGVsIGJ1ZmlvCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiLCB3cml0ZXIuX3dyaXRlX3N0YWNrWzBdKQorCisgICAgZGVmIHRlc3RfdHJ1bmNhdGUoc2VsZik6CisgICAgICAgICMgVHJ1bmNhdGUgaW1wbGljaXRseSBmbHVzaGVzIHRoZSBidWZmZXIuCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLndyaXRlX21vZGUsIGJ1ZmZlcmluZz0wKSBhcyByYXc6CisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCA4KQorICAgICAgICAgICAgYnVmaW8ud3JpdGUoYiJhYmNkZWYiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50cnVuY2F0ZSgzKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCA2KQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiYyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX3Jlc291cmNlKCdjcHUnKQorICAgIGRlZiB0ZXN0X3RocmVhZHMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgV3JpdGUgb3V0IG1hbnkgYnl0ZXMgZnJvbSBtYW55IHRocmVhZHMgYW5kIHRlc3QgdGhleSB3ZXJlCisgICAgICAgICAgICAjIGFsbCBmbHVzaGVkLgorICAgICAgICAgICAgTiA9IDEwMDAKKyAgICAgICAgICAgIGNvbnRlbnRzID0gYnl0ZXMocmFuZ2UoMjU2KSkgKiBOCisgICAgICAgICAgICBzaXplcyA9IGN5Y2xlKFsxLCAxOV0pCisgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgcXVldWUgPSBkZXF1ZSgpCisgICAgICAgICAgICB3aGlsZSBuIDwgbGVuKGNvbnRlbnRzKToKKyAgICAgICAgICAgICAgICBzaXplID0gbmV4dChzaXplcykKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQoY29udGVudHNbbjpuK3NpemVdKQorICAgICAgICAgICAgICAgIG4gKz0gc2l6ZQorICAgICAgICAgICAgZGVsIGNvbnRlbnRzCisgICAgICAgICAgICAjIFdlIHVzZSBhIHJlYWwgZmlsZSBvYmplY3QgYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8KKyAgICAgICAgICAgICMgZXhlcmNpc2Ugc2l0dWF0aW9ucyB3aGVyZSB0aGUgR0lMIGlzIHJlbGVhc2VkIGJlZm9yZQorICAgICAgICAgICAgIyB3cml0aW5nIHRoZSBidWZmZXIgdG8gdGhlIHJhdyBzdHJlYW1zLiBUaGlzIGlzIGluIGFkZGl0aW9uCisgICAgICAgICAgICAjIHRvIGNvbmN1cnJlbmN5IGlzc3VlcyBkdWUgdG8gc3dpdGNoaW5nIHRocmVhZHMgaW4gdGhlIG1pZGRsZQorICAgICAgICAgICAgIyBvZiBQeXRob24gY29kZS4KKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLndyaXRlX21vZGUsIGJ1ZmZlcmluZz0wKSBhcyByYXc6CisgICAgICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgOCkKKyAgICAgICAgICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcXVldWUucG9wbGVmdCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmlvLndyaXRlKHMpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKSBmb3IgeCBpbiByYW5nZSgyMCldCisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKSAjIHlpZWxkCisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgInRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyB3ZXJlIGNhdWdodDogJXIiICUgZXJyb3JzKQorICAgICAgICAgICAgICAgIGJ1ZmlvLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHMgPSBmLnJlYWQoKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoYnl0ZXMoW2ldKSksIE4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5NaXNiZWhhdmVkUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImFiY2RlZiIpCisKKyAgICBkZWYgdGVzdF9tYXhfYnVmZmVyX3NpemVfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIm1heF9idWZmZXJfc2l6ZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgOCwgMTIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBkZWYgYmFkX3dyaXRlKGIpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgIHJhdy53cml0ZSA9IGJhZF93cml0ZQorICAgICAgICBiID0gc2VsZi50cChyYXcpCisgICAgICAgIGIud3JpdGUoYidzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5jbG9zZWQpCisKKworY2xhc3MgQ0J1ZmZlcmVkV3JpdGVyVGVzdChCdWZmZXJlZFdyaXRlclRlc3QsIFNpemVvZlRlc3QpOgorICAgIHRwID0gaW8uQnVmZmVyZWRXcml0ZXIKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBCdWZmZXJlZFdyaXRlclRlc3QudGVzdF9jb25zdHJ1Y3RvcihzZWxmKQorICAgICAgICAjIFRoZSBhbGxvY2F0aW9uIGNhbiBzdWNjZWVkIG9uIDMyLWJpdCBidWlsZHMsIGUuZy4gd2l0aCBtb3JlCisgICAgICAgICMgdGhhbiAyR0IgUkFNIGFuZCBhIDY0LWJpdCBrZXJuZWwuCisgICAgICAgIGlmIHN5cy5tYXhzaXplID4gMHg3RkZGRkZGRjoKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgICAgICAgICBidWZpby5fX2luaXRfXywgcmF3aW8sIHN5cy5tYXhzaXplKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ud3JpdGUsIGIiZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImRlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImRlZiIpCisKKyAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgQyBCdWZmZXJlZFdyaXRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcworICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCisgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCisgICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQorICAgICAgICBmID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgZi53cml0ZShiIjEyM3h4eCIpCisgICAgICAgIGYueCA9IGYKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBkZWwgZgorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIjEyM3h4eCIpCisKKyAgICBkZWYgdGVzdF9hcmdzX2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzI3NQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgIkJ1ZmZlcmVkV3JpdGVyIik6CisgICAgICAgICAgICBzZWxmLnRwKGlvLkJ5dGVzSU8oKSwgMTAyNCwgMTAyNCwgMTAyNCkKKworCitjbGFzcyBQeUJ1ZmZlcmVkV3JpdGVyVGVzdChCdWZmZXJlZFdyaXRlclRlc3QpOgorICAgIHRwID0gcHlpby5CdWZmZXJlZFdyaXRlcgorCitjbGFzcyBCdWZmZXJlZFJXUGFpclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFpci5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9kZXRhY2goc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuVW5zdXBwb3J0ZWRPcGVyYXRpb24sIHBhaXIuZGV0YWNoKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfbWF4X2J1ZmZlcl9zaXplX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJtYXhfYnVmZmVyX3NpemUgaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCksIDgsIDEyKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfd2l0aF9ub3RfcmVhZGFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIE5vdFJlYWRhYmxlKE1vY2tSYXdJTyk6CisgICAgICAgICAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi50cCwgTm90UmVhZGFibGUoKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3dpdGhfbm90X3dyaXRlYWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTm90V3JpdGVhYmxlKE1vY2tSYXdJTyk6CisgICAgICAgICAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi50cCwgc2VsZi5Nb2NrUmF3SU8oKSwgTm90V3JpdGVhYmxlKCkpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmNkZWYiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIucmVhZCgzKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIucmVhZCgxKSwgYiJkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQoKSwgYiJlZiIpCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiYyIpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIucmVhZChOb25lKSwgYiJhYmMiKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBwYWlyID0gbGFtYmRhOiBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY1xuZGVmXG5oIiksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpcigpLnJlYWRsaW5lcygpLCBbYiJhYmNcbiIsIGIiZGVmXG4iLCBiImgiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyKCkucmVhZGxpbmVzKCksIFtiImFiY1xuIiwgYiJkZWZcbiIsIGIiaCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIoKS5yZWFkbGluZXMoNSksIFtiImFiY1xuIiwgYiJkZWZcbiJdKQorCisgICAgZGVmIHRlc3RfcmVhZDEoc2VsZik6CisgICAgICAgICMgLnJlYWQxKCkgaXMgZGVsZWdhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIHJlYWRlciBvYmplY3QsIHNvIHRoaXMgdGVzdAorICAgICAgICAjIGNhbiBiZSBzaGFsbG93LgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmNkZWYiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIucmVhZDEoMyksIGIiYWJjIikKKworICAgIGRlZiB0ZXN0X3JlYWRpbnRvKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmNkZWYiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpci5yZWFkaW50byhkYXRhKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiImFiY2RlIikKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICB3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCB3KQorCisgICAgICAgIHBhaXIud3JpdGUoYiJhYmMiKQorICAgICAgICBwYWlyLmZsdXNoKCkKKyAgICAgICAgcGFpci53cml0ZShiImRlZiIpCisgICAgICAgIHBhaXIuZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuX3dyaXRlX3N0YWNrLCBbYiJhYmMiLCBiImRlZiJdKQorCisgICAgZGVmIHRlc3RfcGVlayhzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjZGVmIiksIHNlbGYuTW9ja1Jhd0lPKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIucGVlaygzKS5zdGFydHN3aXRoKGIiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpci5yZWFkKDMpLCBiImFiYyIpCisKKyAgICBkZWYgdGVzdF9yZWFkYWJsZShzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIucmVhZGFibGUoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlYWJsZShzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIud3JpdGFibGUoKSkKKworICAgIGRlZiB0ZXN0X3NlZWthYmxlKHNlbGYpOgorICAgICAgICAjIEJ1ZmZlcmVkUldQYWlycyBhcmUgbmV2ZXIgc2Vla2FibGUsIGV2ZW4gaWYgdGhlaXIgcmVhZGVycyBhbmQgd3JpdGVycworICAgICAgICAjIGFyZS4KKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwYWlyLnNlZWthYmxlKCkpCisKKyAgICAjIC5mbHVzaCgpIGlzIGRlbGVnYXRlZCB0byB0aGUgdW5kZXJseWluZyB3cml0ZXIgb2JqZWN0IGFuZCBoYXMgYmVlbgorICAgICMgdGVzdGVkIGluIHRoZSB0ZXN0X3dyaXRlIG1ldGhvZC4KKworICAgIGRlZiB0ZXN0X2Nsb3NlX2FuZF9jbG9zZWQoc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFpci5jbG9zZWQpCisgICAgICAgIHBhaXIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFpci5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9pc2F0dHkoc2VsZik6CisgICAgICAgIGNsYXNzIFNlbGVjdGFibGVJc0F0dHkoTW9ja1Jhd0lPKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpc2F0dHkpOgorICAgICAgICAgICAgICAgIE1vY2tSYXdJTy5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuX2lzYXR0eSA9IGlzYXR0eQorCisgICAgICAgICAgICBkZWYgaXNhdHR5KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pc2F0dHkKKworICAgICAgICBwYWlyID0gc2VsZi50cChTZWxlY3RhYmxlSXNBdHR5KEZhbHNlKSwgU2VsZWN0YWJsZUlzQXR0eShGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFpci5pc2F0dHkoKSkKKworICAgICAgICBwYWlyID0gc2VsZi50cChTZWxlY3RhYmxlSXNBdHR5KFRydWUpLCBTZWxlY3RhYmxlSXNBdHR5KEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIuaXNhdHR5KCkpCisKKyAgICAgICAgcGFpciA9IHNlbGYudHAoU2VsZWN0YWJsZUlzQXR0eShGYWxzZSksIFNlbGVjdGFibGVJc0F0dHkoVHJ1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLmlzYXR0eSgpKQorCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKFNlbGVjdGFibGVJc0F0dHkoVHJ1ZSksIFNlbGVjdGFibGVJc0F0dHkoVHJ1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLmlzYXR0eSgpKQorCitjbGFzcyBDQnVmZmVyZWRSV1BhaXJUZXN0KEJ1ZmZlcmVkUldQYWlyVGVzdCk6CisgICAgdHAgPSBpby5CdWZmZXJlZFJXUGFpcgorCitjbGFzcyBQeUJ1ZmZlcmVkUldQYWlyVGVzdChCdWZmZXJlZFJXUGFpclRlc3QpOgorICAgIHRwID0gcHlpby5CdWZmZXJlZFJXUGFpcgorCisKK2NsYXNzIEJ1ZmZlcmVkUmFuZG9tVGVzdChCdWZmZXJlZFJlYWRlclRlc3QsIEJ1ZmZlcmVkV3JpdGVyVGVzdCk6CisgICAgcmVhZF9tb2RlID0gInJiKyIKKyAgICB3cml0ZV9tb2RlID0gIndiKyIKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBCdWZmZXJlZFJlYWRlclRlc3QudGVzdF9jb25zdHJ1Y3RvcihzZWxmKQorICAgICAgICBCdWZmZXJlZFdyaXRlclRlc3QudGVzdF9jb25zdHJ1Y3RvcihzZWxmKQorCisgICAgZGVmIHRlc3RfcmVhZF9hbmRfd3JpdGUoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKChiImFzZGYiLCBiImdoamsiKSkKKyAgICAgICAgcncgPSBzZWxmLnRwKHJhdywgOCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYXMiLCBydy5yZWFkKDIpKQorICAgICAgICBydy53cml0ZShiImRkZCIpCisgICAgICAgIHJ3LndyaXRlKGIiZWVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyYXcuX3dyaXRlX3N0YWNrKSAjIEJ1ZmZlciB3cml0ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImdoamsiLCBydy5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJkZGRlZWUiLCByYXcuX3dyaXRlX3N0YWNrWzBdKQorCisgICAgZGVmIHRlc3Rfc2Vla19hbmRfdGVsbChzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKGIiYXNkZmdoamtsIikKKyAgICAgICAgcncgPSBzZWxmLnRwKHJhdykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYXMiLCBydy5yZWFkKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHJ3LnRlbGwoKSkKKyAgICAgICAgcncuc2VlaygwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYXNkZiIsIHJ3LnJlYWQoNCkpCisKKyAgICAgICAgcncud3JpdGUoYiIxMjNmIikKKyAgICAgICAgcncuc2VlaygwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYXNkZjEyM2ZsIiwgcncucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDksIHJ3LnRlbGwoKSkKKyAgICAgICAgcncuc2VlaygtNCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBydy50ZWxsKCkpCisgICAgICAgIHJ3LnNlZWsoMiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBydy50ZWxsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJmbCIsIHJ3LnJlYWQoMTEpKQorICAgICAgICBydy5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhc2RmMTIzZmwiLCByYXcuZ2V0dmFsdWUoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJ3LnNlZWssIDAuMCkKKworICAgIGRlZiBjaGVja19mbHVzaF9hbmRfcmVhZChzZWxmLCByZWFkX2Z1bmMpOgorICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oYiJhYmNkZWZnaGkiKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYiIsIHJlYWRfZnVuYyhidWZpbywgMikpCisgICAgICAgIGJ1ZmlvLndyaXRlKGIiMTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZWYiLCByZWFkX2Z1bmMoYnVmaW8sIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGJ1ZmlvLnRlbGwoKSkKKyAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDYsIGJ1ZmlvLnRlbGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImdoaSIsIHJlYWRfZnVuYyhidWZpbykpCisgICAgICAgIHJhdy5zZWVrKDAsIDApCisgICAgICAgIHJhdy53cml0ZShiIlhZWiIpCisgICAgICAgICMgZmx1c2goKSByZXNldHMgdGhlIHJlYWQgYnVmZmVyCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgYnVmaW8uc2VlaygwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiWFlaIiwgcmVhZF9mdW5jKGJ1ZmlvLCAzKSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2FuZF9yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2FuZF9yZWFkKGxhbWJkYSBidWZpbywgKmFyZ3M6IGJ1ZmlvLnJlYWQoKmFyZ3MpKQorCisgICAgZGVmIHRlc3RfZmx1c2hfYW5kX3JlYWRpbnRvKHNlbGYpOgorICAgICAgICBkZWYgX3JlYWRpbnRvKGJ1ZmlvLCBuPS0xKToKKyAgICAgICAgICAgIGIgPSBieXRlYXJyYXkobiBpZiBuID49IDAgZWxzZSA5OTk5KQorICAgICAgICAgICAgbiA9IGJ1ZmlvLnJlYWRpbnRvKGIpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMoYls6bl0pCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfYW5kX3JlYWQoX3JlYWRpbnRvKQorCisgICAgZGVmIHRlc3RfZmx1c2hfYW5kX3BlZWsoc2VsZik6CisgICAgICAgIGRlZiBfcGVlayhidWZpbywgbj0tMSk6CisgICAgICAgICAgICAjIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgdGhlIGJ1ZmZlciBjYW4gY29udGFpbiB0aGUgd2hvbGUKKyAgICAgICAgICAgICMgcmF3IHN0cmVhbSwgb3RoZXJ3aXNlIHBlZWsoKSBjYW4gcmV0dXJuIGxlc3MuCisgICAgICAgICAgICBiID0gYnVmaW8ucGVlayhuKQorICAgICAgICAgICAgaWYgbiAhPSAtMToKKyAgICAgICAgICAgICAgICBiID0gYls6bl0KKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsobGVuKGIpLCAxKQorICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgc2VsZi5jaGVja19mbHVzaF9hbmRfcmVhZChfcGVlaykKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2FuZF93cml0ZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKGIiYWJjZGVmZ2hpIikKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdykKKworICAgICAgICBidWZpby53cml0ZShiIjEyMyIpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgYnVmaW8ud3JpdGUoYiI0NSIpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgYnVmaW8uc2VlaygwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMTIzNDVmZ2hpIiwgcmF3LmdldHZhbHVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIxMjM0NWZnaGkiLCBidWZpby5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF90aHJlYWRzKHNlbGYpOgorICAgICAgICBCdWZmZXJlZFJlYWRlclRlc3QudGVzdF90aHJlYWRzKHNlbGYpCisgICAgICAgIEJ1ZmZlcmVkV3JpdGVyVGVzdC50ZXN0X3RocmVhZHMoc2VsZikKKworICAgIGRlZiB0ZXN0X3dyaXRlc19hbmRfcGVlayhzZWxmKToKKyAgICAgICAgZGVmIF9wZWVrKGJ1ZmlvKToKKyAgICAgICAgICAgIGJ1ZmlvLnBlZWsoMSkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3BlZWspCisgICAgICAgIGRlZiBfcGVlayhidWZpbyk6CisgICAgICAgICAgICBwb3MgPSBidWZpby50ZWxsKCkKKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsoLTEsIDEpCisgICAgICAgICAgICBidWZpby5wZWVrKDEpCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcywgMCkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3BlZWspCisKKyAgICBkZWYgdGVzdF93cml0ZXNfYW5kX3JlYWRzKHNlbGYpOgorICAgICAgICBkZWYgX3JlYWQoYnVmaW8pOgorICAgICAgICAgICAgYnVmaW8uc2VlaygtMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnJlYWQoMSkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3JlYWQpCisKKyAgICBkZWYgdGVzdF93cml0ZXNfYW5kX3JlYWQxcyhzZWxmKToKKyAgICAgICAgZGVmIF9yZWFkMShidWZpbyk6CisgICAgICAgICAgICBidWZpby5zZWVrKC0xLCAxKQorICAgICAgICAgICAgYnVmaW8ucmVhZDEoMSkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3JlYWQxKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9yZWFkaW50b3Moc2VsZik6CisgICAgICAgIGRlZiBfcmVhZChidWZpbyk6CisgICAgICAgICAgICBidWZpby5zZWVrKC0xLCAxKQorICAgICAgICAgICAgYnVmaW8ucmVhZGludG8oYnl0ZWFycmF5KDEpKQorICAgICAgICBzZWxmLmNoZWNrX3dyaXRlcyhfcmVhZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2FmdGVyX3JlYWRhaGVhZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNjYyOTogd3JpdGluZyBhZnRlciB0aGUgYnVmZmVyIHdhcyBmaWxsZWQgYnkgcmVhZGFoZWFkIHNob3VsZAorICAgICAgICAjIGZpcnN0IHJld2luZCB0aGUgcmF3IHN0cmVhbS4KKyAgICAgICAgZm9yIG92ZXJ3cml0ZV9zaXplIGluIFsxLCA1XToKKyAgICAgICAgICAgIHJhdyA9IHNlbGYuQnl0ZXNJTyhiIkEiICogMTApCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCA0KQorICAgICAgICAgICAgIyBUcmlnZ2VyIHJlYWRhaGVhZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkKDEpLCBiIkEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50ZWxsKCksIDEpCisgICAgICAgICAgICAjIE92ZXJ3cml0aW5nIHNob3VsZCByZXdpbmQgdGhlIHJhdyBzdHJlYW0gaWYgaXQgbmVlZHMgc28KKyAgICAgICAgICAgIGJ1ZmlvLndyaXRlKGIiQiIgKiBvdmVyd3JpdGVfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCBvdmVyd3JpdGVfc2l6ZSArIDEpCisgICAgICAgICAgICAjIElmIHRoZSB3cml0ZSBzaXplIHdhcyBzbWFsbGVyIHRoYW4gdGhlIGJ1ZmZlciBzaXplLCBmbHVzaCgpIGFuZAorICAgICAgICAgICAgIyBjaGVjayB0aGF0IHJld2luZCBoYXBwZW5zLgorICAgICAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50ZWxsKCksIG92ZXJ3cml0ZV9zaXplICsgMSkKKyAgICAgICAgICAgIHMgPSByYXcuZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLAorICAgICAgICAgICAgICAgIGIiQSIgKyBiIkIiICogb3ZlcndyaXRlX3NpemUgKyBiIkEiICogKDkgLSBvdmVyd3JpdGVfc2l6ZSkpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZXdpbmRfd3JpdGUoc2VsZik6CisgICAgICAgICMgVmFyaW91cyBjb21iaW5hdGlvbnMgb2YgcmVhZGluZyAvIHdyaXRpbmcgLyBzZWVraW5nIGJhY2t3YXJkcyAvIHdyaXRpbmcgYWdhaW4KKyAgICAgICAgZGVmIG11dGF0ZShidWZpbywgcG9zMSwgcG9zMik6CisgICAgICAgICAgICBhc3NlcnQgcG9zMiA+PSBwb3MxCisgICAgICAgICAgICAjIEZpbGwgdGhlIGJ1ZmZlcgorICAgICAgICAgICAgYnVmaW8uc2Vlayhwb3MxKQorICAgICAgICAgICAgYnVmaW8ucmVhZChwb3MyIC0gcG9zMSkKKyAgICAgICAgICAgIGJ1ZmlvLndyaXRlKGInXHgwMicpCisgICAgICAgICAgICAjIFRoaXMgd3JpdGVzIGVhcmxpZXIgdGhhbiB0aGUgcHJldmlvdXMgd3JpdGUsIGJ1dCBzdGlsbCBpbnNpZGUKKyAgICAgICAgICAgICMgdGhlIGJ1ZmZlci4KKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsocG9zMSkKKyAgICAgICAgICAgIGJ1ZmlvLndyaXRlKGInXHgwMScpCisKKyAgICAgICAgYiA9IGIiXHg4MFx4ODFceDgyXHg4M1x4ODQiCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihiKSk6CisgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShpLCBsZW4oYikpOgorICAgICAgICAgICAgICAgIHJhdyA9IHNlbGYuQnl0ZXNJTyhiKQorICAgICAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcsIDEwMCkKKyAgICAgICAgICAgICAgICBtdXRhdGUoYnVmaW8sIGksIGopCisgICAgICAgICAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gYnl0ZWFycmF5KGIpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRbal0gPSAyCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRbaV0gPSAxCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHJlc3VsdCBmb3IgaT0lZCwgaj0lZCIgJSAoaSwgaikpCisKKyAgICBkZWYgdGVzdF90cnVuY2F0ZV9hZnRlcl9yZWFkX29yX3dyaXRlKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oYiJBIiAqIDEwKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZCgyKSwgYiJBQSIpICMgdGhlIHJlYWQgYnVmZmVyIGdldHMgZmlsbGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udHJ1bmNhdGUoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShiIkJCIiksIDIpICMgdGhlIHdyaXRlIGJ1ZmZlciBpbmNyZWFzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50cnVuY2F0ZSgpLCA0KQorCisgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKToKKyAgICAgICAgQnVmZmVyZWRSZWFkZXJUZXN0LnRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKQorICAgICAgICBCdWZmZXJlZFdyaXRlclRlc3QudGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpCisKKyAgICBkZWYgdGVzdF9pbnRlcmxlYXZlZF9yZWFkX3dyaXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGlzc3VlICMxMjIxMworICAgICAgICB3aXRoIHNlbGYuQnl0ZXNJTyhiJ2FiY2RlZmdoJykgYXMgcmF3OgorICAgICAgICAgICAgd2l0aCBzZWxmLnRwKHJhdywgMTAwKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoYiIxIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgYidiJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInMicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQxKDEpLCBiJ2QnKQorICAgICAgICAgICAgICAgIGYud3JpdGUoYiczJykKKyAgICAgICAgICAgICAgICBidWYgPSBieXRlYXJyYXkoMSkKKyAgICAgICAgICAgICAgICBmLnJlYWRpbnRvKGJ1ZikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYidmJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInNCcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoMSksIGInaCcpCisgICAgICAgICAgICAgICAgZi5mbHVzaCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZ2V0dmFsdWUoKSwgYicxYjJkM2Y0aCcpCisKKyAgICAgICAgd2l0aCBzZWxmLkJ5dGVzSU8oYidhYmMnKSBhcyByYXc6CisgICAgICAgICAgICB3aXRoIHNlbGYudHAocmF3LCAxMDApIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksIGInYScpCisgICAgICAgICAgICAgICAgZi53cml0ZShiIjIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCBiJ2MnKQorICAgICAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmdldHZhbHVlKCksIGInYTJjJykKKworICAgIGRlZiB0ZXN0X2ludGVybGVhdmVkX3JlYWRsaW5lX3dyaXRlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuQnl0ZXNJTyhiJ2FiXG5jZGVmXG5nXG4nKSBhcyByYXc6CisgICAgICAgICAgICB3aXRoIHNlbGYudHAocmF3KSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoYicxJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgYidiXG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoYicyJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgYidkZWZcbicpCisgICAgICAgICAgICAgICAgZi53cml0ZShiJzMnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCBiJ1xuJykKKyAgICAgICAgICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5nZXR2YWx1ZSgpLCBiJzFiXG4yZGVmXG4zXG4nKQorCisKK2NsYXNzIENCdWZmZXJlZFJhbmRvbVRlc3QoQ0J1ZmZlcmVkUmVhZGVyVGVzdCwgQ0J1ZmZlcmVkV3JpdGVyVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyZWRSYW5kb21UZXN0LCBTaXplb2ZUZXN0KToKKyAgICB0cCA9IGlvLkJ1ZmZlcmVkUmFuZG9tCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgQnVmZmVyZWRSYW5kb21UZXN0LnRlc3RfY29uc3RydWN0b3Ioc2VsZikKKyAgICAgICAgIyBUaGUgYWxsb2NhdGlvbiBjYW4gc3VjY2VlZCBvbiAzMi1iaXQgYnVpbGRzLCBlLmcuIHdpdGggbW9yZQorICAgICAgICAjIHRoYW4gMkdCIFJBTSBhbmQgYSA2NC1iaXQga2VybmVsLgorICAgICAgICBpZiBzeXMubWF4c2l6ZSA+IDB4N0ZGRkZGRkY6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgVmFsdWVFcnJvciksCisgICAgICAgICAgICAgICAgYnVmaW8uX19pbml0X18sIHJhd2lvLCBzeXMubWF4c2l6ZSkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgQ0J1ZmZlcmVkUmVhZGVyVGVzdC50ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKQorICAgICAgICBDQnVmZmVyZWRXcml0ZXJUZXN0LnRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpCisKKyAgICBkZWYgdGVzdF9hcmdzX2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzI3NQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgIkJ1ZmZlcmVkUmFuZG9tIik6CisgICAgICAgICAgICBzZWxmLnRwKGlvLkJ5dGVzSU8oKSwgMTAyNCwgMTAyNCwgMTAyNCkKKworCitjbGFzcyBQeUJ1ZmZlcmVkUmFuZG9tVGVzdChCdWZmZXJlZFJhbmRvbVRlc3QpOgorICAgIHRwID0gcHlpby5CdWZmZXJlZFJhbmRvbQorCisKKyMgVG8gZnVsbHkgZXhlcmNpc2Ugc2Vlay90ZWxsLCB0aGUgU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXIgaGFzIHRoZXNlCisjIHByb3BlcnRpZXM6CisjICAgLSBBIHNpbmdsZSBvdXRwdXQgY2hhcmFjdGVyIGNhbiBjb3JyZXNwb25kIHRvIG1hbnkgYnl0ZXMgb2YgaW5wdXQuCisjICAgLSBUaGUgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHRvIGNvbXBsZXRlIHRoZSBjaGFyYWN0ZXIgY2FuIGJlCisjICAgICB1bmRldGVybWluZWQgdW50aWwgdGhlIGxhc3QgaW5wdXQgYnl0ZSBpcyByZWNlaXZlZC4KKyMgICAtIFRoZSBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHByZXZpb3VzIGlucHV0LgorIyAgIC0gQSBzaW5nbGUgaW5wdXQgYnl0ZSBjYW4gY29ycmVzcG9uZCB0byBtYW55IGNoYXJhY3RlcnMgb2Ygb3V0cHV0LgorIyAgIC0gVGhlIG51bWJlciBvZiBvdXRwdXQgY2hhcmFjdGVycyBjYW4gYmUgdW5kZXRlcm1pbmVkIHVudGlsIHRoZQorIyAgICAgbGFzdCBpbnB1dCBieXRlIGlzIHJlY2VpdmVkLgorIyAgIC0gVGhlIG51bWJlciBvZiBvdXRwdXQgY2hhcmFjdGVycyBjYW4gdmFyeSBkZXBlbmRpbmcgb24gcHJldmlvdXMgaW5wdXQuCisKK2NsYXNzIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgICIiIgorICAgIEZvciB0ZXN0aW5nIHNlZWsvdGVsbCBiZWhhdmlvciB3aXRoIGEgc3RhdGVmdWwsIGJ1ZmZlcmluZyBkZWNvZGVyLgorCisgICAgSW5wdXQgaXMgYSBzZXF1ZW5jZSBvZiB3b3Jkcy4gIFdvcmRzIG1heSBiZSBmaXhlZC1sZW5ndGggKGxlbmd0aCBzZXQKKyAgICBieSBpbnB1dCkgb3IgdmFyaWFibGUtbGVuZ3RoIChwZXJpb2QtdGVybWluYXRlZCkuICBJbiB2YXJpYWJsZS1sZW5ndGgKKyAgICBtb2RlLCBleHRyYSBwZXJpb2RzIGFyZSBpZ25vcmVkLiAgUG9zc2libGUgd29yZHMgYXJlOgorICAgICAgLSAnaScgZm9sbG93ZWQgYnkgYSBudW1iZXIgc2V0cyB0aGUgaW5wdXQgbGVuZ3RoLCBJIChtYXhpbXVtIDk5KS4KKyAgICAgICAgV2hlbiBJIGlzIHNldCB0byAwLCB3b3JkcyBhcmUgc3BhY2UtdGVybWluYXRlZC4KKyAgICAgIC0gJ28nIGZvbGxvd2VkIGJ5IGEgbnVtYmVyIHNldHMgdGhlIG91dHB1dCBsZW5ndGgsIE8gKG1heGltdW0gOTkpLgorICAgICAgLSBBbnkgb3RoZXIgd29yZCBpcyBjb252ZXJ0ZWQgaW50byBhIHdvcmQgZm9sbG93ZWQgYnkgYSBwZXJpb2Qgb24KKyAgICAgICAgdGhlIG91dHB1dC4gIFRoZSBvdXRwdXQgd29yZCBjb25zaXN0cyBvZiB0aGUgaW5wdXQgd29yZCB0cnVuY2F0ZWQKKyAgICAgICAgb3IgcGFkZGVkIG91dCB3aXRoIGh5cGhlbnMgdG8gbWFrZSBpdHMgbGVuZ3RoIGVxdWFsIHRvIE8uICBJZiBPCisgICAgICAgIGlzIDAsIHRoZSB3b3JkIGlzIG91dHB1dCB2ZXJiYXRpbSB3aXRob3V0IHRydW5jYXRpbmcgb3IgcGFkZGluZy4KKyAgICBJIGFuZCBPIGFyZSBpbml0aWFsbHkgc2V0IHRvIDEuICBXaGVuIEkgY2hhbmdlcywgYW55IGJ1ZmZlcmVkIGlucHV0IGlzCisgICAgcmUtc2Nhbm5lZCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBJLiAgRU9GIGFsc28gdGVybWluYXRlcyB0aGUgbGFzdCB3b3JkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIuX19pbml0X18oc2VsZiwgZXJyb3JzKQorICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8U0lEICV4PicgJSBpZChzZWxmKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmkgPSAxCisgICAgICAgIHNlbGYubyA9IDEKKyAgICAgICAgc2VsZi5idWZmZXIgPSBieXRlYXJyYXkoKQorCisgICAgZGVmIGdldHN0YXRlKHNlbGYpOgorICAgICAgICBpLCBvID0gc2VsZi5pIF4gMSwgc2VsZi5vIF4gMSAjIHNvIHRoYXQgZmxhZ3MgPSAwIGFmdGVyIHJlc2V0KCkKKyAgICAgICAgcmV0dXJuIGJ5dGVzKHNlbGYuYnVmZmVyKSwgaSoxMDAgKyBvCisKKyAgICBkZWYgc2V0c3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBidWZmZXIsIGlvID0gc3RhdGUKKyAgICAgICAgc2VsZi5idWZmZXIgPSBieXRlYXJyYXkoYnVmZmVyKQorICAgICAgICBpLCBvID0gZGl2bW9kKGlvLCAxMDApCisgICAgICAgIHNlbGYuaSwgc2VsZi5vID0gaSBeIDEsIG8gXiAxCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIG91dHB1dCA9ICcnCisgICAgICAgIGZvciBiIGluIGlucHV0OgorICAgICAgICAgICAgaWYgc2VsZi5pID09IDA6ICMgdmFyaWFibGUtbGVuZ3RoLCB0ZXJtaW5hdGVkIHdpdGggcGVyaW9kCisgICAgICAgICAgICAgICAgaWYgYiA9PSAnLic6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuYnVmZmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHNlbGYucHJvY2Vzc193b3JkKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlci5hcHBlbmQoYikKKyAgICAgICAgICAgIGVsc2U6ICMgZml4ZWQtbGVuZ3RoLCB0ZXJtaW5hdGUgYWZ0ZXIgc2VsZi5pIGJ5dGVzCisgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKGIpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuYnVmZmVyKSA9PSBzZWxmLmk6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBzZWxmLnByb2Nlc3Nfd29yZCgpCisgICAgICAgIGlmIGZpbmFsIGFuZCBzZWxmLmJ1ZmZlcjogIyBFT0YgdGVybWluYXRlcyB0aGUgbGFzdCB3b3JkCisgICAgICAgICAgICBvdXRwdXQgKz0gc2VsZi5wcm9jZXNzX3dvcmQoKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgcHJvY2Vzc193b3JkKHNlbGYpOgorICAgICAgICBvdXRwdXQgPSAnJworICAgICAgICBpZiBzZWxmLmJ1ZmZlclswXSA9PSBvcmQoJ2knKToKKyAgICAgICAgICAgIHNlbGYuaSA9IG1pbig5OSwgaW50KHNlbGYuYnVmZmVyWzE6XSBvciAwKSkgIyBzZXQgaW5wdXQgbGVuZ3RoCisgICAgICAgIGVsaWYgc2VsZi5idWZmZXJbMF0gPT0gb3JkKCdvJyk6CisgICAgICAgICAgICBzZWxmLm8gPSBtaW4oOTksIGludChzZWxmLmJ1ZmZlclsxOl0gb3IgMCkpICMgc2V0IG91dHB1dCBsZW5ndGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuYnVmZmVyLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgaWYgbGVuKG91dHB1dCkgPCBzZWxmLm86CisgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICctJypzZWxmLm8gIyBwYWQgb3V0IHdpdGggaHlwaGVucworICAgICAgICAgICAgaWYgc2VsZi5vOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dFs6c2VsZi5vXSAjIHRydW5jYXRlIHRvIG91dHB1dCBsZW5ndGgKKyAgICAgICAgICAgIG91dHB1dCArPSAnLicKKyAgICAgICAgc2VsZi5idWZmZXIgPSBieXRlYXJyYXkoKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBjb2RlY0VuYWJsZWQgPSBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGxvb2t1cFRlc3REZWNvZGVyKGNscywgbmFtZSk6CisgICAgICAgIGlmIGNscy5jb2RlY0VuYWJsZWQgYW5kIG5hbWUgPT0gJ3Rlc3RfZGVjb2Rlcic6CisgICAgICAgICAgICBsYXRpbjEgPSBjb2RlY3MubG9va3VwKCdsYXRpbi0xJykKKyAgICAgICAgICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICAgICAgICAgIG5hbWU9J3Rlc3RfZGVjb2RlcicsIGVuY29kZT1sYXRpbjEuZW5jb2RlLCBkZWNvZGU9Tm9uZSwKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICBzdHJlYW1yZWFkZXI9Tm9uZSwgc3RyZWFtd3JpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPWNscykKKworIyBSZWdpc3RlciB0aGUgcHJldmlvdXMgZGVjb2RlciBmb3IgdGVzdGluZy4KKyMgRGlzYWJsZWQgYnkgZGVmYXVsdCwgdGVzdHMgd2lsbCBlbmFibGUgaXQuCitjb2RlY3MucmVnaXN0ZXIoU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXIubG9va3VwVGVzdERlY29kZXIpCisKKworY2xhc3MgU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBNYWtlIHN1cmUgdGhlIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyIGFjdHVhbGx5IHdvcmtzLgorICAgICIiIgorCisgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgIyBJPTEsIE89MSAoZml4ZWQtbGVuZ3RoIGlucHV0ID09IGZpeGVkLWxlbmd0aCBvdXRwdXQpCisgICAgICAgIChiJ2FiY2QnLCBGYWxzZSwgJ2EuYi5jLmQuJyksCisgICAgICAgICMgST0wLCBPPTAgKHZhcmlhYmxlLWxlbmd0aCBpbnB1dCwgdmFyaWFibGUtbGVuZ3RoIG91dHB1dCkKKyAgICAgICAgKGInb2lhYmNkJywgVHJ1ZSwgJ2FiY2QuJyksCisgICAgICAgICMgST0wLCBPPTAgKHNob3VsZCBpZ25vcmUgZXh0cmEgcGVyaW9kcykKKyAgICAgICAgKGInb2kuLi5hYmNkLi4uJywgVHJ1ZSwgJ2FiY2QuJyksCisgICAgICAgICMgST0wLCBPPTYgKHZhcmlhYmxlLWxlbmd0aCBpbnB1dCwgZml4ZWQtbGVuZ3RoIG91dHB1dCkKKyAgICAgICAgKGInaS5vNi54Lnh5ei50b29sb25ndG9maXQuJywgRmFsc2UsICd4LS0tLS0ueHl6LS0tLnRvb2xvbi4nKSwKKyAgICAgICAgIyBJPTIsIE89NiAoZml4ZWQtbGVuZ3RoIGlucHV0IDwgZml4ZWQtbGVuZ3RoIG91dHB1dCkKKyAgICAgICAgKGInaS5pMi5vNnh5eicsIFRydWUsICd4eS0tLS0uei0tLS0tLicpLAorICAgICAgICAjIEk9NiwgTz0zIChmaXhlZC1sZW5ndGggaW5wdXQgPiBmaXhlZC1sZW5ndGggb3V0cHV0KQorICAgICAgICAoYidpLm8zLmk2LmFiY2RlZmdoaWprbG1ub3AnLCBUcnVlLCAnYWJjLmdoaS5tbm8uJyksCisgICAgICAgICMgST0wLCB0aGVuIDM7IE89MjksIHRoZW4gMTUgKHdpdGggbG9uZ2VyIG91dHB1dCkKKyAgICAgICAgKGInaS5vMjkuYS5iLmNkZS5vMTUuYWJjZGVmZ2hpamFiY2RlZmdoaWouaTMuYS5iLmMuZC5laTAway5sLm0nLCBUcnVlLAorICAgICAgICAgJ2EtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLicgKworICAgICAgICAgJ2ItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLicgKworICAgICAgICAgJ2NkZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLicgKworICAgICAgICAgJ2FiY2RlZmdoaWphYmNkZS4nICsKKyAgICAgICAgICdhLmItLS0tLS0tLS0tLS0uJyArCisgICAgICAgICAnLmMuLS0tLS0tLS0tLS0tLicgKworICAgICAgICAgJ2QuZS0tLS0tLS0tLS0tLS4nICsKKyAgICAgICAgICdrLS0tLS0tLS0tLS0tLS0uJyArCisgICAgICAgICAnbC0tLS0tLS0tLS0tLS0tLicgKworICAgICAgICAgJ20tLS0tLS0tLS0tLS0tLS4nKQorICAgIF0KKworICAgIGRlZiB0ZXN0X2RlY29kZXIoc2VsZik6CisgICAgICAgICMgVHJ5IGEgZmV3IG9uZS1zaG90IHRlc3QgY2FzZXMuCisgICAgICAgIGZvciBpbnB1dCwgZW9mLCBvdXRwdXQgaW4gc2VsZi50ZXN0X2Nhc2VzOgorICAgICAgICAgICAgZCA9IFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kZWNvZGUoaW5wdXQsIGVvZiksIG91dHB1dCkKKworICAgICAgICAjIEFsc28gdGVzdCBhbiB1bmZpbmlzaGVkIGRlY29kZSwgZm9sbG93ZWQgYnkgZm9yY2luZyBFT0YuCisgICAgICAgIGQgPSBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2RlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kZWNvZGUoYidvaWFiY2QnKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kZWNvZGUoYicnLCAxKSwgJ2FiY2QuJykKKworY2xhc3MgVGV4dElPV3JhcHBlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RkYXRhID0gYiJBQUFcclxuQkJCXHJDQ0NcclxuREREXG5FRUVcclxuIgorICAgICAgICBzZWxmLm5vcm1hbGl6ZWQgPSBiIkFBQVxuQkJCXG5DQ0NcbkRERFxuRUVFXG4iLmRlY29kZSgiYXNjaWkiKQorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgciA9IHNlbGYuQnl0ZXNJTyhiIlx4YzNceGE5XG5cbiIpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHIsIDEwMDApCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYikKKyAgICAgICAgdC5fX2luaXRfXyhiLCBlbmNvZGluZz0ibGF0aW4xIiwgbmV3bGluZT0iXHJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5lbmNvZGluZywgImxhdGluMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5saW5lX2J1ZmZlcmluZywgRmFsc2UpCisgICAgICAgIHQuX19pbml0X18oYiwgZW5jb2Rpbmc9InV0ZjgiLCBsaW5lX2J1ZmZlcmluZz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZW5jb2RpbmcsICJ1dGY4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmxpbmVfYnVmZmVyaW5nLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJceGU5XG4iLCB0LnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5fX2luaXRfXywgYiwgbmV3bGluZT00MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5fX2luaXRfXywgYiwgbmV3bGluZT0neHl6enknKQorCisgICAgZGVmIHRlc3RfZGV0YWNoKHNlbGYpOgorICAgICAgICByID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIocikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuZGV0YWNoKCksIGIpCisKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0LndyaXRlKCJob3dkeSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoci5nZXR2YWx1ZSgpKQorICAgICAgICB0LmRldGFjaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXR2YWx1ZSgpLCBiImhvd2R5IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5kZXRhY2gpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oImhlbGxvIi5lbmNvZGUoInV0Zi04IikpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHJhdykKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0idXRmLTgiKQorICAgICAgICBtb2RuYW1lID0gc2VsZi5UZXh0SU9XcmFwcGVyLl9fbW9kdWxlX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8JXMuVGV4dElPV3JhcHBlciBlbmNvZGluZz0ndXRmLTgnPiIgJSBtb2RuYW1lKQorICAgICAgICByYXcubmFtZSA9ICJkdW1teSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8JXMuVGV4dElPV3JhcHBlciBuYW1lPXUnZHVtbXknIGVuY29kaW5nPSd1dGYtOCc+IiAlIG1vZG5hbWUpCisgICAgICAgIHJhdy5uYW1lID0gYiJkdW1teSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8JXMuVGV4dElPV3JhcHBlciBuYW1lPSdkdW1teScgZW5jb2Rpbmc9J3V0Zi04Jz4iICUgbW9kbmFtZSkKKworICAgIGRlZiB0ZXN0X2xpbmVfYnVmZmVyaW5nKHNlbGYpOgorICAgICAgICByID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIociwgMTAwMCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBuZXdsaW5lPSJcbiIsIGxpbmVfYnVmZmVyaW5nPVRydWUpCisgICAgICAgIHQud3JpdGUoIlgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0dmFsdWUoKSwgYiIiKSAgIyBObyBmbHVzaCBoYXBwZW5lZAorICAgICAgICB0LndyaXRlKCJZXG5aIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldHZhbHVlKCksIGIiWFlcbloiKSAgIyBBbGwgZ290IGZsdXNoZWQKKyAgICAgICAgdC53cml0ZSgiQVxyQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXR2YWx1ZSgpLCBiIlhZXG5aQVxyQiIpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGUgZW5jb2RpbmcgYXR0cmlidXRlIGlzIGFsd2F5cyBzZXQsIGFuZCB2YWxpZAorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0idXRmOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5lbmNvZGluZywgInV0ZjgiKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmVuY29kaW5nIGlzIG5vdCBOb25lKQorICAgICAgICBjb2RlY3MubG9va3VwKHQuZW5jb2RpbmcpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcnNfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIyAoMSkgZGVmYXVsdAorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKGIiYWJjXG5ceGZmXG4iKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdC5yZWFkKQorICAgICAgICAjICgyKSBleHBsaWNpdCBzdHJpY3QKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTyhiImFiY1xuXHhmZlxuIikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdC5yZWFkKQorICAgICAgICAjICgzKSBpZ25vcmUKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTyhiImFiY1xuXHhmZlxuIikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9Imlnbm9yZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZWFkKCksICJhYmNcblxuIikKKyAgICAgICAgIyAoNCkgcmVwbGFjZQorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKGIiYWJjXG5ceGZmXG4iKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0icmVwbGFjZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZWFkKCksICJhYmNcblx1ZmZmZFxuIikKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nX2Vycm9yc193cml0aW5nKHNlbGYpOgorICAgICAgICAjICgxKSBkZWZhdWx0CisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdC53cml0ZSwgIlx4ZmYiKQorICAgICAgICAjICgyKSBleHBsaWNpdCBzdHJpY3QKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJzdHJpY3QiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHQud3JpdGUsICJceGZmIikKKyAgICAgICAgIyAoMykgaWdub3JlCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZT0iXG4iKQorICAgICAgICB0LndyaXRlKCJhYmNceGZmZGVmXG4iKQorICAgICAgICB0LmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdldHZhbHVlKCksIGIiYWJjZGVmXG4iKQorICAgICAgICAjICg0KSByZXBsYWNlCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0icmVwbGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9IlxuIikKKyAgICAgICAgdC53cml0ZSgiYWJjXHhmZmRlZlxuIikKKyAgICAgICAgdC5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5nZXR2YWx1ZSgpLCBiImFiYz9kZWZcbiIpCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgaW5wdXRfbGluZXMgPSBbICJ1bml4XG4iLCAid2luZG93c1xyXG4iLCAib3M5XHIiLCAibGFzdFxuIiwgIm5vbmwiIF0KKworICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgIFsgTm9uZSwgWyAndW5peFxuJywgJ3dpbmRvd3NcbicsICdvczlcbicsICdsYXN0XG4nLCAnbm9ubCcgXSBdLAorICAgICAgICAgICAgWyAnJywgaW5wdXRfbGluZXMgXSwKKyAgICAgICAgICAgIFsgJ1xuJywgWyAidW5peFxuIiwgIndpbmRvd3NcclxuIiwgIm9zOVxybGFzdFxuIiwgIm5vbmwiIF0gXSwKKyAgICAgICAgICAgIFsgJ1xyXG4nLCBbICJ1bml4XG53aW5kb3dzXHJcbiIsICJvczlccmxhc3Rcbm5vbmwiIF0gXSwKKyAgICAgICAgICAgIFsgJ1xyJywgWyAidW5peFxud2luZG93c1xyIiwgIlxub3M5XHIiLCAibGFzdFxubm9ubCIgXSBdLAorICAgICAgICBdCisgICAgICAgIGVuY29kaW5ncyA9ICgKKyAgICAgICAgICAgICd1dGYtOCcsICdsYXRpbi0xJywKKyAgICAgICAgICAgICd1dGYtMTYnLCAndXRmLTE2LWxlJywgJ3V0Zi0xNi1iZScsCisgICAgICAgICAgICAndXRmLTMyJywgJ3V0Zi0zMi1sZScsICd1dGYtMzItYmUnLAorICAgICAgICApCisKKyAgICAgICAgIyBUcnkgYSByYW5nZSBvZiBidWZmZXIgc2l6ZXMgdG8gdGVzdCB0aGUgY2FzZSB3aGVyZSBcciBpcyB0aGUgbGFzdAorICAgICAgICAjIGNoYXJhY3RlciBpbiBUZXh0SU9XcmFwcGVyLl9wZW5kaW5nX2xpbmUuCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBlbmNvZGluZ3M6CisgICAgICAgICAgICAjIFhYWDogc3RyLmVuY29kZSgpIHNob3VsZCByZXR1cm4gYnl0ZXMKKyAgICAgICAgICAgIGRhdGEgPSBieXRlcygnJy5qb2luKGlucHV0X2xpbmVzKS5lbmNvZGUoZW5jb2RpbmcpKQorICAgICAgICAgICAgZm9yIGRvX3JlYWRzIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgZm9yIGJ1ZnNpemUgaW4gcmFuZ2UoMSwgMTApOgorICAgICAgICAgICAgICAgICAgICBmb3IgbmV3bGluZSwgZXhwX2xpbmVzIGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICAgICAgYnVmaW8gPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHNlbGYuQnl0ZXNJTyhkYXRhKSwgYnVmc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRpbyA9IHNlbGYuVGV4dElPV3JhcHBlcihidWZpbywgbmV3bGluZT1uZXdsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRvX3JlYWRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9saW5lcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSB0ZXh0aW8ucmVhZCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjMiA9PSAnJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMyKSwgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X2xpbmVzLmFwcGVuZChjMiArIHRleHRpby5yZWFkbGluZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RfbGluZXMgPSBsaXN0KHRleHRpbykKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGdvdF9saW5lLCBleHBfbGluZSBpbiB6aXAoZ290X2xpbmVzLCBleHBfbGluZXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290X2xpbmUsIGV4cF9saW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ290X2xpbmVzKSwgbGVuKGV4cF9saW5lcykpCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lc19pbnB1dChzZWxmKToKKyAgICAgICAgdGVzdGRhdGEgPSBiIkFBQVxuQkJceDAwQlxuQ0NDXHJERERcckVFRVxyXG5GRkZcclxuR0dHIgorICAgICAgICBub3JtYWxpemVkID0gdGVzdGRhdGEucmVwbGFjZShiIlxyXG4iLCBiIlxuIikucmVwbGFjZShiIlxyIiwgYiJcbiIpCisgICAgICAgIGZvciBuZXdsaW5lLCBleHBlY3RlZCBpbiBbCisgICAgICAgICAgICAoTm9uZSwgbm9ybWFsaXplZC5kZWNvZGUoImFzY2lpIikuc3BsaXRsaW5lcyhUcnVlKSksCisgICAgICAgICAgICAoIiIsIHRlc3RkYXRhLmRlY29kZSgiYXNjaWkiKS5zcGxpdGxpbmVzKFRydWUpKSwKKyAgICAgICAgICAgICgiXG4iLCBbIkFBQVxuIiwgIkJCXHgwMEJcbiIsICJDQ0NcckRERFxyRUVFXHJcbiIsICJGRkZcclxuIiwgIkdHRyJdKSwKKyAgICAgICAgICAgICgiXHJcbiIsIFsiQUFBXG5CQlx4MDBCXG5DQ0NcckRERFxyRUVFXHJcbiIsICJGRkZcclxuIiwgIkdHRyJdKSwKKyAgICAgICAgICAgICgiXHIiLCAgWyJBQUFcbkJCXHgwMEJcbkNDQ1xyIiwgIkRERFxyIiwgIkVFRVxyIiwgIlxuRkZGXHIiLCAiXG5HR0ciXSksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgYnVmID0gc2VsZi5CeXRlc0lPKHRlc3RkYXRhKQorICAgICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGJ1ZiwgZW5jb2Rpbmc9ImFzY2lpIiwgbmV3bGluZT1uZXdsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eHQucmVhZGxpbmVzKCksIGV4cGVjdGVkKQorICAgICAgICAgICAgdHh0LnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWQoKSwgIiIuam9pbihleHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lc19vdXRwdXQoc2VsZik6CisgICAgICAgIHRlc3RkaWN0ID0geworICAgICAgICAgICAgIiI6IGIiQUFBXG5CQkJcbkNDQ1xuWFxyWVxyXG5aIiwKKyAgICAgICAgICAgICJcbiI6IGIiQUFBXG5CQkJcbkNDQ1xuWFxyWVxyXG5aIiwKKyAgICAgICAgICAgICJcciI6IGIiQUFBXHJCQkJcckNDQ1xyWFxyWVxyXHJaIiwKKyAgICAgICAgICAgICJcclxuIjogYiJBQUFcclxuQkJCXHJcbkNDQ1xyXG5YXHJZXHJcclxuWiIsCisgICAgICAgICAgICB9CisgICAgICAgIHRlc3RzID0gWyhOb25lLCB0ZXN0ZGljdFtvcy5saW5lc2VwXSldICsgc29ydGVkKHRlc3RkaWN0Lml0ZW1zKCkpCisgICAgICAgIGZvciBuZXdsaW5lLCBleHBlY3RlZCBpbiB0ZXN0czoKKyAgICAgICAgICAgIGJ1ZiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmLCBlbmNvZGluZz0iYXNjaWkiLCBuZXdsaW5lPW5ld2xpbmUpCisgICAgICAgICAgICB0eHQud3JpdGUoIkFBQVxuQiIpCisgICAgICAgICAgICB0eHQud3JpdGUoIkJCXG5DQ0NcbiIpCisgICAgICAgICAgICB0eHQud3JpdGUoIlhccllcclxuWiIpCisgICAgICAgICAgICB0eHQuZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYuY2xvc2VkLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGJhc2UgPSBzZWxmLkJ5dGVzSU8KKyAgICAgICAgY2xhc3MgTXlCeXRlc0lPKGJhc2UpOgorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIGwuYXBwZW5kKHNlbGYuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICBiYXNlLmNsb3NlKHNlbGYpCisgICAgICAgIGIgPSBNeUJ5dGVzSU8oKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHQud3JpdGUoImFiYyIpCisgICAgICAgIGRlbCB0CisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2IiYWJjIl0sIGwpCisKKyAgICBkZWYgdGVzdF9vdmVycmlkZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICByZWNvcmQgPSBbXQorICAgICAgICBjbGFzcyBNeVRleHRJTyhzZWxmLlRleHRJT1dyYXBwZXIpOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZiA9IHN1cGVyKE15VGV4dElPLCBzZWxmKS5fX2RlbF9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgyKQorICAgICAgICAgICAgICAgIHN1cGVyKE15VGV4dElPLCBzZWxmKS5jbG9zZSgpCisgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgzKQorICAgICAgICAgICAgICAgIHN1cGVyKE15VGV4dElPLCBzZWxmKS5mbHVzaCgpCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0ID0gTXlUZXh0SU8oYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgZGVsIHQKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2Vycm9yX3Rocm91Z2hfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGV4Y2VwdGlvbiBzdGF0ZSBpcyBub3QgbW9kaWZpZWQgYnkgYSBkZXN0cnVjdG9yLAorICAgICAgICAjIGV2ZW4gaWYgY2xvc2UoKSBmYWlscy4KKyAgICAgICAgcmF3aW8gPSBzZWxmLkNsb3NlRmFpbHVyZUlPKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHNlbGYuVGV4dElPV3JhcHBlcihyYXdpbykueHl6enkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmKQorICAgICAgICBzID0gcy5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgczoKKyAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKKworICAgICMgU3lzdGVtYXRpYyB0ZXN0cyBvZiB0aGUgdGV4dCBJL08gQVBJCisKKyAgICBkZWYgdGVzdF9iYXNpY19pbyhzZWxmKToKKyAgICAgICAgZm9yIGNodW5rc2l6ZSBpbiAoMSwgMiwgMywgNCwgNSwgMTUsIDE2LCAxNywgMzEsIDMyLCAzMywgNjMsIDY0LCA2NSk6CisgICAgICAgICAgICBmb3IgZW5jIGluICJhc2NpaSIsICJsYXRpbjEiLCAidXRmOCIgOiMgLCAidXRmLTE2LWJlIiwgInV0Zi0xNi1sZSI6CisgICAgICAgICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIncrIiwgZW5jb2Rpbmc9ZW5jKQorICAgICAgICAgICAgICAgIGYuX0NIVU5LX1NJWkUgPSBjaHVua3NpemUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoImFiYyIpLCAzKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyKyIsIGVuY29kaW5nPWVuYykKKyAgICAgICAgICAgICAgICBmLl9DSFVOS19TSVpFID0gY2h1bmtzaXplCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiYWJjIikKKyAgICAgICAgICAgICAgICBjb29raWUgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDApLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKE5vbmUpLCAiYWJjIikKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgyKSwgImFiIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgImMiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCAiIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBjb29raWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCksIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCwgMiksIGNvb2tpZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoImRlZiIpLCAzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKGNvb2tpZSksIGNvb2tpZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiZGVmIikKKyAgICAgICAgICAgICAgICBpZiBlbmMuc3RhcnRzd2l0aCgidXRmIik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubXVsdGlfbGluZV90ZXN0KGYsIGVuYykKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBtdWx0aV9saW5lX3Rlc3Qoc2VsZiwgZiwgZW5jKToKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGYudHJ1bmNhdGUoKQorICAgICAgICBzYW1wbGUgPSAic1x4ZmZcdTBmZmZcdWZmZmYiCisgICAgICAgIHdsaW5lcyA9IFtdCisgICAgICAgIGZvciBzaXplIGluICgwLCAxLCAyLCAzLCA0LCA1LCAzMCwgMzEsIDMyLCAzMywgNjIsIDYzLCA2NCwgNjUsIDEwMDApOgorICAgICAgICAgICAgY2hhcnMgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2l6ZSk6CisgICAgICAgICAgICAgICAgY2hhcnMuYXBwZW5kKHNhbXBsZVtpICUgbGVuKHNhbXBsZSldKQorICAgICAgICAgICAgbGluZSA9ICIiLmpvaW4oY2hhcnMpICsgIlxuIgorICAgICAgICAgICAgd2xpbmVzLmFwcGVuZCgoZi50ZWxsKCksIGxpbmUpKQorICAgICAgICAgICAgZi53cml0ZShsaW5lKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgcmxpbmVzID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCisgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmxpbmVzLmFwcGVuZCgocG9zLCBsaW5lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChybGluZXMsIHdsaW5lcykKKworICAgIGRlZiB0ZXN0X3RlbGxpbmcoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3KyIsIGVuY29kaW5nPSJ1dGY4IikKKyAgICAgICAgcDAgPSBmLnRlbGwoKQorICAgICAgICBmLndyaXRlKCJceGZmXG4iKQorICAgICAgICBwMSA9IGYudGVsbCgpCisgICAgICAgIGYud3JpdGUoIlx4ZmZcbiIpCisgICAgICAgIHAyID0gZi50ZWxsKCkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgIlx4ZmZcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgIlx4ZmZcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAyKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgIlx4ZmZcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAyKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NlZWtpbmcoc2VsZik6CisgICAgICAgIGNodW5rX3NpemUgPSBfZGVmYXVsdF9jaHVua19zaXplKCkKKyAgICAgICAgcHJlZml4X3NpemUgPSBjaHVua19zaXplIC0gMgorICAgICAgICB1X3ByZWZpeCA9ICJhIiAqIHByZWZpeF9zaXplCisgICAgICAgIHByZWZpeCA9IGJ5dGVzKHVfcHJlZml4LmVuY29kZSgidXRmLTgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odV9wcmVmaXgpLCBsZW4ocHJlZml4KSkKKyAgICAgICAgdV9zdWZmaXggPSAiXHU4ODg4XG4iCisgICAgICAgIHN1ZmZpeCA9IGJ5dGVzKHVfc3VmZml4LmVuY29kZSgidXRmLTgiKSkKKyAgICAgICAgbGluZSA9IHByZWZpeCArIHN1ZmZpeAorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICBmLndyaXRlKGxpbmUqMikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAgICAgcyA9IGYucmVhZChwcmVmaXhfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBwcmVmaXguZGVjb2RlKCJhc2NpaSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwcmVmaXhfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksIHVfc3VmZml4KQorCisgICAgZGVmIHRlc3Rfc2Vla2luZ190b28oc2VsZik6CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBhIHNwZWNpZmljIGJ1ZworICAgICAgICBkYXRhID0gYidceGUwXHhiZlx4YmZcbicKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiLCBlbmNvZGluZz0idXRmLTgiKQorICAgICAgICBmLl9DSFVOS19TSVpFICAjIEp1c3QgdGVzdCB0aGF0IGl0IGV4aXN0cworICAgICAgICBmLl9DSFVOS19TSVpFID0gMgorICAgICAgICBmLnJlYWRsaW5lKCkKKyAgICAgICAgZi50ZWxsKCkKKworICAgIGRlZiB0ZXN0X3NlZWtfYW5kX3RlbGwoc2VsZik6CisgICAgICAgICNUZXN0IHNlZWsvdGVsbCB1c2luZyB0aGUgU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXIuCisgICAgICAgICMgTWFrZSB0ZXN0IGZhc3RlciBieSBkb2luZyBzbWFsbGVyIHNlZWtzCisgICAgICAgIENIVU5LX1NJWkUgPSAxMjgKKworICAgICAgICBkZWYgdGVzdF9zZWVrX2FuZF90ZWxsX3dpdGhfZGF0YShkYXRhLCBtaW5fcG9zPTApOgorICAgICAgICAgICAgIiIiVGVsbC9zZWVrIHRvIHZhcmlvdXMgcG9pbnRzIHdpdGhpbiBhIGRhdGEgc3RyZWFtIGFuZCBlbnN1cmUKKyAgICAgICAgICAgIHRoYXQgdGhlIGRlY29kZWQgZGF0YSByZXR1cm5lZCBieSByZWFkKCkgaXMgY29uc2lzdGVudC4iIiIKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpCisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIGVuY29kaW5nPSd0ZXN0X2RlY29kZXInKQorICAgICAgICAgICAgZi5fQ0hVTktfU0laRSA9IENIVU5LX1NJWkUKKyAgICAgICAgICAgIGRlY29kZWQgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1pbl9wb3MsIGxlbihkZWNvZGVkKSArIDEpOiAjIHNlZWsgcG9zaXRpb25zCisgICAgICAgICAgICAgICAgZm9yIGogaW4gWzEsIDUsIGxlbihkZWNvZGVkKSAtIGldOiAjIHJlYWQgbGVuZ3RocworICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBlbmNvZGluZz0ndGVzdF9kZWNvZGVyJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoaSksIGRlY29kZWRbOmldKQorICAgICAgICAgICAgICAgICAgICBjb29raWUgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChqKSwgZGVjb2RlZFtpOmkgKyBqXSkKKyAgICAgICAgICAgICAgICAgICAgZi5zZWVrKGNvb2tpZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGVjb2RlZFtpOl0pCisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgRW5hYmxlIHRoZSB0ZXN0IGRlY29kZXIuCisgICAgICAgIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyLmNvZGVjRW5hYmxlZCA9IDEKKworICAgICAgICAjIFJ1biB0aGUgdGVzdHMuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgVHJ5IGVhY2ggdGVzdCBjYXNlLgorICAgICAgICAgICAgZm9yIGlucHV0LCBfLCBfIGluIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyVGVzdC50ZXN0X2Nhc2VzOgorICAgICAgICAgICAgICAgIHRlc3Rfc2Vla19hbmRfdGVsbF93aXRoX2RhdGEoaW5wdXQpCisKKyAgICAgICAgICAgICMgUG9zaXRpb24gZWFjaCB0ZXN0IGNhc2Ugc28gdGhhdCBpdCBjcm9zc2VzIGEgY2h1bmsgYm91bmRhcnkuCisgICAgICAgICAgICBmb3IgaW5wdXQsIF8sIF8gaW4gU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXJUZXN0LnRlc3RfY2FzZXM6CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gQ0hVTktfU0laRSAtIGxlbihpbnB1dCkvLzIKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBiJy4nKm9mZnNldAorICAgICAgICAgICAgICAgICMgRG9uJ3QgYm90aGVyIHNlZWtpbmcgaW50byB0aGUgcHJlZml4ICh0YWtlcyB0b28gbG9uZykuCisgICAgICAgICAgICAgICAgbWluX3BvcyA9IG9mZnNldCoyCisgICAgICAgICAgICAgICAgdGVzdF9zZWVrX2FuZF90ZWxsX3dpdGhfZGF0YShwcmVmaXggKyBpbnB1dCwgbWluX3BvcykKKworICAgICAgICAjIEVuc3VyZSBvdXIgdGVzdCBkZWNvZGVyIHdvbid0IGludGVyZmVyZSB3aXRoIHN1YnNlcXVlbnQgdGVzdHMuCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2Rlci5jb2RlY0VuYWJsZWQgPSAwCisKKyAgICBkZWYgdGVzdF9lbmNvZGVkX3dyaXRlcyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICIxMjM0NTY3ODkwIgorICAgICAgICB0ZXN0cyA9ICgidXRmLTE2IiwKKyAgICAgICAgICAgICAgICAgInV0Zi0xNi1sZSIsCisgICAgICAgICAgICAgICAgICJ1dGYtMTYtYmUiLAorICAgICAgICAgICAgICAgICAidXRmLTMyIiwKKyAgICAgICAgICAgICAgICAgInV0Zi0zMi1sZSIsCisgICAgICAgICAgICAgICAgICJ1dGYtMzItYmUiKQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gdGVzdHM6CisgICAgICAgICAgICBidWYgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICAgICAgZiA9IHNlbGYuVGV4dElPV3JhcHBlcihidWYsIGVuY29kaW5nPWVuY29kaW5nKQorICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgQk9NIGlzIHdyaXR0ZW4gb25seSBvbmNlIChzZWUgaXNzdWUxNzUzKS4KKyAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSAqIDIpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYuZ2V0dmFsdWUoKSwgKGRhdGEgKiAyKS5lbmNvZGUoZW5jb2RpbmcpKQorCisgICAgZGVmIHRlc3RfdW5yZWFkYWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgVW5SZWFkYWJsZShzZWxmLkJ5dGVzSU8pOgorICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoVW5SZWFkYWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQucmVhZCkKKworICAgIGRlZiB0ZXN0X3JlYWRfb25lX2J5X29uZShzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiIkFBXHJcbkJCIikpCisgICAgICAgIHJlYWRzID0gIiIKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGMgPSB0eHQucmVhZCgxKQorICAgICAgICAgICAgaWYgbm90IGM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHJlYWRzICs9IGMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkcywgIkFBXG5CQiIpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYiJBQVxuQkJcbkNDIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWRsaW5lcygpLCBbIkFBXG4iLCAiQkJcbiIsICJDQyJdKQorICAgICAgICB0eHQuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dC5yZWFkbGluZXMoTm9uZSksIFsiQUFcbiIsICJCQlxuIiwgIkNDIl0pCisgICAgICAgIHR4dC5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWRsaW5lcyg1KSwgWyJBQVxuIiwgIkJCXG4iXSkKKworICAgICMgcmVhZCBpbiBhbW91bnRzIGVxdWFsIHRvIFRleHRJT1dyYXBwZXIuX0NIVU5LX1NJWkUgd2hpY2ggaXMgMTI4LgorICAgIGRlZiB0ZXN0X3JlYWRfYnlfY2h1bmsoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlICJcclxuIiBzdHJhZGRsZXMgMTI4IGNoYXIgYm91bmRhcnkuCisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYiJBIiAqIDEyNyArIGIiXHJcbkIiKSkKKyAgICAgICAgcmVhZHMgPSAiIgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9IHR4dC5yZWFkKDEyOCkKKyAgICAgICAgICAgIGlmIG5vdCBjOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZWFkcyArPSBjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZHMsICJBIioxMjcrIlxuQiIpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzKHNlbGYpOgorICAgICAgICBsID0gWydhYicsICdjZCcsICdlZiddCisgICAgICAgIGJ1ZiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihidWYpCisgICAgICAgIHR4dC53cml0ZWxpbmVzKGwpCisgICAgICAgIHR4dC5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksIGInYWJjZGVmJykKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXNfdXNlcmxpc3Qoc2VsZik6CisgICAgICAgIGwgPSBVc2VyTGlzdChbJ2FiJywgJ2NkJywgJ2VmJ10pCisgICAgICAgIGJ1ZiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihidWYpCisgICAgICAgIHR4dC53cml0ZWxpbmVzKGwpCisgICAgICAgIHR4dC5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksIGInYWJjZGVmJykKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eHQud3JpdGVsaW5lcywgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR4dC53cml0ZWxpbmVzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR4dC53cml0ZWxpbmVzLCBiJ2FiYycpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTEzOTVfMShzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKworICAgICAgICAjIHJlYWQgb25lIGNoYXIgYXQgYSB0aW1lCisgICAgICAgIHJlYWRzID0gIiIKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGMgPSB0eHQucmVhZCgxKQorICAgICAgICAgICAgaWYgbm90IGM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHJlYWRzICs9IGMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkcywgc2VsZi5ub3JtYWxpemVkKQorCisgICAgZGVmIHRlc3RfaXNzdWUxMzk1XzIoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHR4dC5fQ0hVTktfU0laRSA9IDQKKworICAgICAgICByZWFkcyA9ICIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjID0gdHh0LnJlYWQoNCkKKyAgICAgICAgICAgIGlmIG5vdCBjOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZWFkcyArPSBjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZHMsIHNlbGYubm9ybWFsaXplZCkKKworICAgIGRlZiB0ZXN0X2lzc3VlMTM5NV8zKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQuX0NIVU5LX1NJWkUgPSA0CisKKyAgICAgICAgcmVhZHMgPSB0eHQucmVhZCg0KQorICAgICAgICByZWFkcyArPSB0eHQucmVhZCg0KQorICAgICAgICByZWFkcyArPSB0eHQucmVhZGxpbmUoKQorICAgICAgICByZWFkcyArPSB0eHQucmVhZGxpbmUoKQorICAgICAgICByZWFkcyArPSB0eHQucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRzLCBzZWxmLm5vcm1hbGl6ZWQpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTEzOTVfNChzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdHh0Ll9DSFVOS19TSVpFID0gNAorCisgICAgICAgIHJlYWRzID0gdHh0LnJlYWQoNCkKKyAgICAgICAgcmVhZHMgKz0gdHh0LnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRzLCBzZWxmLm5vcm1hbGl6ZWQpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTEzOTVfNShzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdHh0Ll9DSFVOS19TSVpFID0gNAorCisgICAgICAgIHJlYWRzID0gdHh0LnJlYWQoNCkKKyAgICAgICAgcG9zID0gdHh0LnRlbGwoKQorICAgICAgICB0eHQuc2VlaygwKQorICAgICAgICB0eHQuc2Vlayhwb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWQoNCksICJCQkJcbiIpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTIyODIoc2VsZik6CisgICAgICAgIGJ1ZmZlciA9IHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZz0iYXNjaWkiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmZmVyLnNlZWthYmxlKCksIHR4dC5zZWVrYWJsZSgpKQorCisgICAgZGVmIHRlc3RfYXBwZW5kX2JvbShzZWxmKToKKyAgICAgICAgIyBUaGUgQk9NIGlzIG5vdCB3cml0dGVuIGFnYWluIHdoZW4gYXBwZW5kaW5nIHRvIGEgbm9uLWVtcHR5IGZpbGUKKyAgICAgICAgZmlsZW5hbWUgPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICBmb3IgY2hhcnNldCBpbiAoJ3V0Zi04LXNpZycsICd1dGYtMTYnLCAndXRmLTMyJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3cnLCBlbmNvZGluZz1jaGFyc2V0KSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ2FhYScpCisgICAgICAgICAgICAgICAgcG9zID0gZi50ZWxsKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdhYWEnLmVuY29kZShjaGFyc2V0KSkKKworICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICdhJywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCd4eHgnKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2FhYXh4eCcuZW5jb2RlKGNoYXJzZXQpKQorCisgICAgZGVmIHRlc3Rfc2Vla19ib20oc2VsZik6CisgICAgICAgICMgU2FtZSB0ZXN0LCBidXQgd2hlbiBzZWVraW5nIG1hbnVhbGx5CisgICAgICAgIGZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KKyAgICAgICAgZm9yIGNoYXJzZXQgaW4gKCd1dGYtOC1zaWcnLCAndXRmLTE2JywgJ3V0Zi0zMicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICd3JywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdhYWEnKQorICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3IrJywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ3p6eicpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgZi53cml0ZSgnYmJiJykKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdiYmJ6enonLmVuY29kZShjaGFyc2V0KSkKKworICAgIGRlZiB0ZXN0X2Vycm9yc19wcm9wZXJ0eShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5lcnJvcnMsICJzdHJpY3QiKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInciLCBlcnJvcnM9InJlcGxhY2UiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmVycm9ycywgInJlcGxhY2UiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdF90aHJlYWRzX3dyaXRlKHNlbGYpOgorICAgICAgICAjIElzc3VlNjc1MDogY29uY3VycmVudCB3cml0ZXMgY291bGQgZHVwbGljYXRlIGRhdGEKKyAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInciLCBidWZmZXJpbmc9MSkgYXMgZjoKKyAgICAgICAgICAgIGRlZiBydW4obik6CisgICAgICAgICAgICAgICAgdGV4dCA9ICJUaHJlYWQlMDNkXG4iICUgbgorICAgICAgICAgICAgICAgIGV2ZW50LndhaXQoKQorICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKKyAgICAgICAgICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhIG49eDogcnVuKG4pKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZSgyMCldCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKQorICAgICAgICAgICAgZXZlbnQuc2V0KCkKKyAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4pIGFzIGY6CisgICAgICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGZvciBuIGluIHJhbmdlKDIwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQuY291bnQoIlRocmVhZCUwM2RcbiIgJSBuKSwgMSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgdHh0LmZsdXNoID0gYmFkX2ZsdXNoCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHR4dC5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUodHh0LmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQuY2xvc2UoKQorICAgICAgICB0eHQuY2xvc2UoKQorICAgICAgICB0eHQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0eHQuZmx1c2gpCisKKyAgICBkZWYgdGVzdF9yZWFkb25seV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBidWYgPSBzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcikpOgorICAgICAgICAgICAgdHh0LmJ1ZmZlciA9IGJ1ZgorCisgICAgZGVmIHRlc3RfcmVhZF9ub25ieXRlcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcxMDYKKyAgICAgICAgIyBDcmFzaCB3aGVuIHVuZGVybHlpbmcgcmVhZCgpIHJldHVybnMgbm9uLWJ5dGVzCisgICAgICAgIGNsYXNzIE5vbmJ5dGVzU3RyZWFtKHNlbGYuU3RyaW5nSU8pOgorICAgICAgICAgICAgcmVhZDEgPSBzZWxmLlN0cmluZ0lPLnJlYWQKKyAgICAgICAgY2xhc3MgTm9uYnl0ZXNTdHJlYW0oc2VsZi5TdHJpbmdJTyk6CisgICAgICAgICAgICByZWFkMSA9IHNlbGYuU3RyaW5nSU8ucmVhZAorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKE5vbmJ5dGVzU3RyZWFtKCdhJykpCisgICAgICAgIHdpdGggc2VsZi5tYXliZVJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdC5yZWFkKDEpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoTm9uYnl0ZXNTdHJlYW0oJ2EnKSkKKyAgICAgICAgd2l0aCBzZWxmLm1heWJlUmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0LnJlYWRsaW5lKCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihOb25ieXRlc1N0cmVhbSgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVhZCgpLCB1J2EnKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9kZWNvZGVyKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzEwNgorICAgICAgICAjIENyYXNoIHdoZW4gZGVjb2RlciByZXR1cm5zIG5vbi1zdHJpbmcKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYidhYWFhYWEnKSwgbmV3bGluZT0nXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSdxdW9wcmlfY29kZWMnKQorICAgICAgICB3aXRoIHNlbGYubWF5YmVSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHQucmVhZCgxKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiJ2FhYWFhYScpLCBuZXdsaW5lPSdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J3F1b3ByaV9jb2RlYycpCisgICAgICAgIHdpdGggc2VsZi5tYXliZVJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdC5yZWFkbGluZSgpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKGInYWFhYWFhJyksIG5ld2xpbmU9J1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0ncXVvcHJpX2NvZGVjJykKKyAgICAgICAgd2l0aCBzZWxmLm1heWJlUmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0LnJlYWQoKQorCisKK2NsYXNzIENUZXh0SU9XcmFwcGVyVGVzdChUZXh0SU9XcmFwcGVyVGVzdCk6CisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgciA9IHNlbGYuQnl0ZXNJTyhiIlx4YzNceGE5XG5cbiIpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHIsIDEwMDApCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Ll9faW5pdF9fLCBiLCBuZXdsaW5lPTQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9J3h5enp5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5yZWFkKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIEMgVGV4dElPV3JhcHBlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcworICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCisgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGluIGdjLmdhcmJhZ2UgaW5zdGVhZC4KKyAgICAgICAgcmF3aW8gPSBpby5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHJhd2lvKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHQud3JpdGUoIjQ1NmRlZiIpCisgICAgICAgIHQueCA9IHQKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0KQorICAgICAgICBkZWwgdAorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIjQ1NmRlZiIpCisKKyAgICBkZWYgdGVzdF9yd3BhaXJfY2xlYXJlZF9iZWZvcmVfdGV4dGlvKHNlbGYpOgorICAgICAgICAjIElzc3VlIDEzMDcwOiBUZXh0SU9XcmFwcGVyJ3MgZmluYWxpemF0aW9uIHdvdWxkIGNyYXNoIHdoZW4gY2FsbGVkCisgICAgICAgICMgYWZ0ZXIgdGhlIHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyBCdWZmZXJlZFJXUGFpcidzIHdyaXRlciBnb3QKKyAgICAgICAgIyBjbGVhcmVkIGJ5IHRoZSBHQy4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBiMSA9IHNlbGYuQnVmZmVyZWRSV1BhaXIoc2VsZi5Nb2NrUmF3SU8oKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgICAgIHQxID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIxLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICAgICAgYjIgPSBzZWxmLkJ1ZmZlcmVkUldQYWlyKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgICAgICB0MiA9IHNlbGYuVGV4dElPV3JhcHBlcihiMiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgICAgICMgY2lyY3VsYXIgcmVmZXJlbmNlcworICAgICAgICAgICAgdDEuYnVkZHkgPSB0MgorICAgICAgICAgICAgdDIuYnVkZHkgPSB0MQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgbWF5YmVSYWlzZXMgPSB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXMKKworCitjbGFzcyBQeVRleHRJT1dyYXBwZXJUZXN0KFRleHRJT1dyYXBwZXJUZXN0KToKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiBtYXliZVJhaXNlcyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgeWllbGQKKworCitjbGFzcyBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfbmV3bGluZV9kZWNvZGluZ191dGY4KHNlbGYsIGRlY29kZXIpOgorICAgICAgICAjIFVURi04IHNwZWNpZmljIHRlc3RzIGZvciBhIG5ld2xpbmUgZGVjb2RlcgorICAgICAgICBkZWYgX2NoZWNrX2RlY29kZShiLCBzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAjIFdlIGV4ZXJjaXNlIGdldHN0YXRlKCkgLyBzZXRzdGF0ZSgpIGFzIHdlbGwgYXMgZGVjb2RlKCkKKyAgICAgICAgICAgIHN0YXRlID0gZGVjb2Rlci5nZXRzdGF0ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKGIsICoqa3dhcmdzKSwgcykKKyAgICAgICAgICAgIGRlY29kZXIuc2V0c3RhdGUoc3RhdGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKGIsICoqa3dhcmdzKSwgcykKKworICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHhlOFx4YTJceDg4JywgIlx1ODg4OCIpCisKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4ZTgnLCAiIikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4YTInLCAiIikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4ODgnLCAiXHU4ODg4IikKKworICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHhlOCcsICIiKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHhhMicsICIiKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHg4OCcsICJcdTg4ODgiKQorCisgICAgICAgIF9jaGVja19kZWNvZGUoYidceGU4JywgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgZGVjb2Rlci5kZWNvZGUsIGInJywgZmluYWw9VHJ1ZSkKKworICAgICAgICBkZWNvZGVyLnJlc2V0KCkKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1xuJywgIlxuIikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1xyJywgIiIpCisgICAgICAgIF9jaGVja19kZWNvZGUoYicnLCAiXG4iLCBmaW5hbD1UcnVlKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHInLCAiXG4iLCBmaW5hbD1UcnVlKQorCisgICAgICAgIF9jaGVja19kZWNvZGUoYidccicsICIiKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInYScsICJcbmEiKQorCisgICAgICAgIF9jaGVja19kZWNvZGUoYidcclxyXG4nLCAiXG5cbiIpCisgICAgICAgIF9jaGVja19kZWNvZGUoYidccicsICIiKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHInLCAiXG4iKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXG5hJywgIlxuYSIpCisKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4ZThceGEyXHg4OFxyXG4nLCAiXHU4ODg4XG4iKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHhlOFx4YTJceDg4JywgIlx1ODg4OCIpCisgICAgICAgIF9jaGVja19kZWNvZGUoYidcbicsICJcbiIpCisgICAgICAgIF9jaGVja19kZWNvZGUoYidceGU4XHhhMlx4ODhccicsICJcdTg4ODgiKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXG4nLCAiXG4iKQorCisgICAgZGVmIGNoZWNrX25ld2xpbmVfZGVjb2Rpbmcoc2VsZiwgZGVjb2RlciwgZW5jb2RpbmcpOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBpZiBlbmNvZGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKGVuY29kaW5nKSgpCisgICAgICAgICAgICBkZWYgX2RlY29kZV9ieXRld2lzZShzKToKKyAgICAgICAgICAgICAgICAjIERlY29kZSBvbmUgYnl0ZSBhdCBhIHRpbWUKKyAgICAgICAgICAgICAgICBmb3IgYiBpbiBlbmNvZGVyLmVuY29kZShzKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkZWNvZGVyLmRlY29kZShiKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVuY29kZXIgPSBOb25lCisgICAgICAgICAgICBkZWYgX2RlY29kZV9ieXRld2lzZShzKToKKyAgICAgICAgICAgICAgICAjIERlY29kZSBvbmUgY2hhciBhdCBhIHRpbWUKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiBzOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZXIuZGVjb2RlKGMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIubmV3bGluZXMsIE5vbmUpCisgICAgICAgIF9kZWNvZGVfYnl0ZXdpc2UoImFiY1xuXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIubmV3bGluZXMsICdcbicpCisgICAgICAgIF9kZWNvZGVfYnl0ZXdpc2UoIlxuYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCAoJ1xuJywgJ1xyXG4nKSkKKyAgICAgICAgX2RlY29kZV9ieXRld2lzZSgiYWJjXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIubmV3bGluZXMsICgnXG4nLCAnXHJcbicpKQorICAgICAgICBfZGVjb2RlX2J5dGV3aXNlKCJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIubmV3bGluZXMsICgnXHInLCAnXG4nLCAnXHJcbicpKQorICAgICAgICBfZGVjb2RlX2J5dGV3aXNlKCJhYmNcciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIuam9pbihyZXN1bHQpLCAiYWJjXG5cbmFiY2FiY1xuYWJjYWJjIikKKyAgICAgICAgZGVjb2Rlci5yZXNldCgpCisgICAgICAgIGlucHV0ID0gImFiYyIKKyAgICAgICAgaWYgZW5jb2RlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVuY29kZXIucmVzZXQoKQorICAgICAgICAgICAgaW5wdXQgPSBlbmNvZGVyLmVuY29kZShpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZShpbnB1dCksICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIubmV3bGluZXMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2RlY29kZXIoc2VsZik6CisgICAgICAgIGVuY29kaW5ncyA9ICgKKyAgICAgICAgICAgICMgTm9uZSBtZWFuaW5nIHRoZSBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyIHRha2VzIHVuaWNvZGUgaW5wdXQKKyAgICAgICAgICAgICMgcmF0aGVyIHRoYW4gYnl0ZXMgaW5wdXQKKyAgICAgICAgICAgIE5vbmUsICd1dGYtOCcsICdsYXRpbi0xJywKKyAgICAgICAgICAgICd1dGYtMTYnLCAndXRmLTE2LWxlJywgJ3V0Zi0xNi1iZScsCisgICAgICAgICAgICAndXRmLTMyJywgJ3V0Zi0zMi1sZScsICd1dGYtMzItYmUnLAorICAgICAgICApCisgICAgICAgIGZvciBlbmMgaW4gZW5jb2RpbmdzOgorICAgICAgICAgICAgZGVjb2RlciA9IGVuYyBhbmQgY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcihlbmMpKCkKKyAgICAgICAgICAgIGRlY29kZXIgPSBzZWxmLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoZGVjb2RlciwgdHJhbnNsYXRlPVRydWUpCisgICAgICAgICAgICBzZWxmLmNoZWNrX25ld2xpbmVfZGVjb2RpbmcoZGVjb2RlciwgZW5jKQorICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcigidXRmLTgiKSgpCisgICAgICAgIGRlY29kZXIgPSBzZWxmLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoZGVjb2RlciwgdHJhbnNsYXRlPVRydWUpCisgICAgICAgIHNlbGYuY2hlY2tfbmV3bGluZV9kZWNvZGluZ191dGY4KGRlY29kZXIpCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2J5dGVzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDU0MzM6IEV4Y2Vzc2l2ZSBvcHRpbWl6YXRpb24gaW4gSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcgorICAgICAgICBkZWYgX2NoZWNrKGRlYyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYy5uZXdsaW5lcywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjLmRlY29kZSgiXHUwRDAwIiksICJcdTBEMDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWMubmV3bGluZXMsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYy5kZWNvZGUoIlx1MEEwMCIpLCAiXHUwQTAwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjLm5ld2xpbmVzLCBOb25lKQorICAgICAgICBkZWMgPSBzZWxmLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgdHJhbnNsYXRlPUZhbHNlKQorICAgICAgICBfY2hlY2soZGVjKQorICAgICAgICBkZWMgPSBzZWxmLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgdHJhbnNsYXRlPVRydWUpCisgICAgICAgIF9jaGVjayhkZWMpCisKK2NsYXNzIENJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdChJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdCk6CisgICAgcGFzcworCitjbGFzcyBQeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJUZXN0KEluY3JlbWVudGFsTmV3bGluZURlY29kZXJUZXN0KToKKyAgICBwYXNzCisKKworIyBYWFggVGVzdHMgZm9yIG9wZW4oKQorCitjbGFzcyBNaXNjSU9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9fX2FsbF9fKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmlvLl9fYWxsX186CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKHNlbGYuaW8sIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqIGlzIG5vdCBOb25lLCBuYW1lKQorICAgICAgICAgICAgaWYgbmFtZSA9PSAib3BlbiI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgImVycm9yIiBpbiBuYW1lLmxvd2VyKCkgb3IgbmFtZSA9PSAiVW5zdXBwb3J0ZWRPcGVyYXRpb24iOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKG9iaiwgRXhjZXB0aW9uKSwgbmFtZSkKKyAgICAgICAgICAgIGVsaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgiU0VFS18iKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhvYmosIHNlbGYuSU9CYXNlKSkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgIndiIikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIlUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgICAgICAgICAgICBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmJ1ZmZlci5uYW1lLCAgICAgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3Lm5hbWUsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgICAgICAgICAgICAiVSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIubW9kZSwgICAgICJyYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3Lm1vZGUsICJyYiIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3KyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5tb2RlLCAgICAgICAgICAgICJ3KyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIubW9kZSwgICAgICJyYisiKSAjIERvZXMgaXQgcmVhbGx5IG1hdHRlcj8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmJ1ZmZlci5yYXcubW9kZSwgInJiKyIpCisKKyAgICAgICAgZyA9IHNlbGYub3BlbihmLmZpbGVubygpLCAid2IiLCBjbG9zZWZkPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcubW9kZSwgICAgICJ3YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5yYXcubW9kZSwgIndiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLm5hbWUsICAgICBmLmZpbGVubygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcucmF3Lm5hbWUsIGYuZmlsZW5vKCkpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBnLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2lvX2FmdGVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBmb3Iga3dhcmdzIGluIFsKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidyJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3YiJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3IiwgImJ1ZmZlcmluZyI6IDF9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3IiwgImJ1ZmZlcmluZyI6IDJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3YiIsICJidWZmZXJpbmciOiAwfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAiciJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyYiJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyIiwgImJ1ZmZlcmluZyI6IDF9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyIiwgImJ1ZmZlcmluZyI6IDJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyYiIsICJidWZmZXJpbmciOiAwfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidysifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidytiIn0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncrIiwgImJ1ZmZlcmluZyI6IDF9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3KyIsICJidWZmZXJpbmciOiAyfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidytiIiwgImJ1ZmZlcmluZyI6IDB9LAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICoqa3dhcmdzKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLmZsdXNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5maWxlbm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLmlzYXR0eSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYuX19pdGVyX18pCisgICAgICAgICAgICBpZiBoYXNhdHRyKGYsICJwZWVrIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5wZWVrLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkKQorICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAicmVhZDEiKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWQxLCAxMDI0KQorICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAicmVhZGFsbCIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGFsbCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkaW50bywgYnl0ZWFycmF5KDEwMjQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkbGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGxpbmVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5zZWVrLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi50ZWxsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi50cnVuY2F0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYud3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIiIgaWYgImIiIGluIGt3YXJnc1snbW9kZSddIGVsc2UgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLndyaXRlbGluZXMsIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgZikKKworICAgIGRlZiB0ZXN0X2Jsb2NraW5naW9lcnJvcihzZWxmKToKKyAgICAgICAgIyBWYXJpb3VzIEJsb2NraW5nSU9FcnJvciBpc3N1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkJsb2NraW5nSU9FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkJsb2NraW5nSU9FcnJvciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkJsb2NraW5nSU9FcnJvciwgMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkJsb2NraW5nSU9FcnJvciwgMSwgIiIsIE5vbmUpCisgICAgICAgIGIgPSBzZWxmLkJsb2NraW5nSU9FcnJvcigxLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmNoYXJhY3RlcnNfd3JpdHRlbiwgMCkKKyAgICAgICAgY2xhc3MgQyh1bmljb2RlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IEMoIiIpCisgICAgICAgIGIgPSBzZWxmLkJsb2NraW5nSU9FcnJvcigxLCBjKQorICAgICAgICBjLmIgPSBiCisgICAgICAgIGIuYyA9IGMKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihjKQorICAgICAgICBkZWwgYywgYgorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKworICAgIGRlZiB0ZXN0X2FiY3Moc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgdmlzaWJsZSBiYXNlIGNsYXNzZXMgYXJlIEFCQ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLklPQmFzZSwgYWJjLkFCQ01ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLlJhd0lPQmFzZSwgYWJjLkFCQ01ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLkJ1ZmZlcmVkSU9CYXNlLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuVGV4dElPQmFzZSwgYWJjLkFCQ01ldGEpCisKKyAgICBkZWYgX2NoZWNrX2FiY19pbmhlcml0YW5jZShzZWxmLCBhYmNtb2R1bGUpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLklPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuUmF3SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuVGV4dElPQmFzZSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLklPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuUmF3SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuVGV4dElPQmFzZSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5SYXdJT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLkJ1ZmZlcmVkSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5UZXh0SU9CYXNlKQorCisgICAgZGVmIHRlc3RfYWJjX2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wbGVtZW50YXRpb25zIGluaGVyaXQgZnJvbSB0aGVpciByZXNwZWN0aXZlIEFCQ3MKKyAgICAgICAgc2VsZi5fY2hlY2tfYWJjX2luaGVyaXRhbmNlKHNlbGYpCisKKyAgICBkZWYgdGVzdF9hYmNfaW5oZXJpdGFuY2Vfb2ZmaWNpYWwoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBsZW1lbnRhdGlvbnMgaW5oZXJpdCBmcm9tIHRoZSBvZmZpY2lhbCBBQkNzIG9mIHRoZQorICAgICAgICAjIGJhc2VsaW5lICJpbyIgbW9kdWxlLgorICAgICAgICBzZWxmLl9jaGVja19hYmNfaW5oZXJpdGFuY2UoaW8pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmY250bCwgJ2ZjbnRsIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X25vbmJsb2NrX3BpcGVfd3JpdGVfYmlnYnVmKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X25vbmJsb2NrX3BpcGVfd3JpdGUoMTYqMTAyNCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZjbnRsLCAnZmNudGwgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tfcGlwZV93cml0ZV9zbWFsbGJ1ZihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9ub25ibG9ja19waXBlX3dyaXRlKDEwMjQpCisKKyAgICBkZWYgX3NldF9ub25fYmxvY2tpbmcoc2VsZiwgZmQpOgorICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZsYWdzLCAtMSkKKyAgICAgICAgcmVzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsYWdzIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCisKKyAgICBkZWYgX3Rlc3Rfbm9uYmxvY2tfcGlwZV93cml0ZShzZWxmLCBidWZzaXplKToKKyAgICAgICAgc2VudCA9IFtdCisgICAgICAgIHJlY2VpdmVkID0gW10KKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLl9zZXRfbm9uX2Jsb2NraW5nKHIpCisgICAgICAgIHNlbGYuX3NldF9ub25fYmxvY2tpbmcodykKKworICAgICAgICAjIFRvIGV4ZXJjaXNlIGFsbCBjb2RlIHBhdGhzIGluIHRoZSBDIGltcGxlbWVudGF0aW9uIHdlIG5lZWQKKyAgICAgICAgIyB0byBwbGF5IHdpdGggYnVmZmVyIHNpemVzLiAgRm9yIGluc3RhbmNlLCBpZiB3ZSBjaG9vc2UgYQorICAgICAgICAjIGJ1ZmZlciBzaXplIGxlc3MgdGhhbiBvciBlcXVhbCB0byBfUElQRV9CVUYgKDQwOTYgb24gTGludXgpCisgICAgICAgICMgdGhlbiB3ZSB3aWxsIG5ldmVyIGdldCBhIHBhcnRpYWwgd3JpdGUgb2YgdGhlIGJ1ZmZlci4KKyAgICAgICAgcmYgPSBzZWxmLm9wZW4ociwgbW9kZT0ncmInLCBjbG9zZWZkPVRydWUsIGJ1ZmZlcmluZz1idWZzaXplKQorICAgICAgICB3ZiA9IHNlbGYub3Blbih3LCBtb2RlPSd3YicsIGNsb3NlZmQ9VHJ1ZSwgYnVmZmVyaW5nPWJ1ZnNpemUpCisKKyAgICAgICAgd2l0aCByZiwgd2Y6CisgICAgICAgICAgICBmb3IgTiBpbiA5OTk5LCA3MywgNzU3NDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBieXRlcyhbaSAlIDI2ICsgOTddKSAqIE4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQuYXBwZW5kKG1zZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHdmLndyaXRlKG1zZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICAgICAgICAgZXhjZXB0IHNlbGYuQmxvY2tpbmdJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FQUdBSU4pCisgICAgICAgICAgICAgICAgICAgIHNlbnRbLTFdID0gc2VudFstMV1bOmUuY2hhcmFjdGVyc193cml0dGVuXQorICAgICAgICAgICAgICAgICAgICByZWNlaXZlZC5hcHBlbmQocmYucmVhZCgpKQorICAgICAgICAgICAgICAgICAgICBtc2cgPSBiJ0JMT0NLRUQnCisgICAgICAgICAgICAgICAgICAgIHdmLndyaXRlKG1zZykKKyAgICAgICAgICAgICAgICAgICAgc2VudC5hcHBlbmQobXNnKQorCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2YuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxmLkJsb2NraW5nSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUFHQUlOKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuY2hhcmFjdGVyc193cml0dGVuLCAwKQorICAgICAgICAgICAgICAgICAgICByZWNlaXZlZC5hcHBlbmQocmYucmVhZCgpKQorCisgICAgICAgICAgICByZWNlaXZlZCArPSBpdGVyKHJmLnJlYWQsIE5vbmUpCisKKyAgICAgICAgc2VudCwgcmVjZWl2ZWQgPSBiJycuam9pbihzZW50KSwgYicnLmpvaW4ocmVjZWl2ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW50ID09IHJlY2VpdmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2YuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmYuY2xvc2VkKQorCitjbGFzcyBDTWlzY0lPVGVzdChNaXNjSU9UZXN0KToKKyAgICBpbyA9IGlvCisKK2NsYXNzIFB5TWlzY0lPVGVzdChNaXNjSU9UZXN0KToKKyAgICBpbyA9IHB5aW8KKworCitAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgJ1BPU0lYIHNpZ25hbHMgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgU2lnbmFsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9sZGFscm0gPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxmLmFsYXJtX2ludGVycnVwdCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5vbGRhbHJtKQorCisgICAgZGVmIGFsYXJtX2ludGVycnVwdChzZWxmLCBzaWcsIGZyYW1lKToKKyAgICAgICAgMSAvLyAwCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluICgnZnJlZWJzZDUnLCAnZnJlZWJzZDYnLCAnZnJlZWJzZDcnKSwKKyAgICAgICAgICAgICAgICAgICAgICdpc3N1ZSAjMTI0Mjk6IHNraXAgdGVzdCBvbiBGcmVlQlNEIDw9IDcnKQorICAgIGRlZiBjaGVja19pbnRlcnJ1cHRlZF93cml0ZShzZWxmLCBpdGVtLCBieXRlcywgKipmZG9wZW5fa3dhcmdzKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBhIHBhcnRpYWwgd3JpdGUsIHdoZW4gaXQgZ2V0cyBpbnRlcnJ1cHRlZCwgcHJvcGVybHkKKyAgICAgICAgaW52b2tlcyB0aGUgc2lnbmFsIGhhbmRsZXIsIGFuZCBidWJibGVzIHVwIHRoZSBleGNlcHRpb24gcmFpc2VkCisgICAgICAgIGluIHRoZSBsYXR0ZXIuIiIiCisgICAgICAgIHJlYWRfcmVzdWx0cyA9IFtdCisgICAgICAgIGRlZiBfcmVhZCgpOgorICAgICAgICAgICAgcyA9IG9zLnJlYWQociwgMSkKKyAgICAgICAgICAgIHJlYWRfcmVzdWx0cy5hcHBlbmQocykKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PV9yZWFkKQorICAgICAgICB0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aW8gPSBzZWxmLmlvLm9wZW4odywgKipmZG9wZW5fa3dhcmdzKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICMgRmlsbCB0aGUgcGlwZSBlbm91Z2ggdGhhdCB0aGUgd3JpdGUgd2lsbCBiZSBibG9ja2luZy4KKyAgICAgICAgICAgICMgSXQgd2lsbCBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgdGltZXIgYXJtZWQgYWJvdmUuICBTaW5jZSB0aGUKKyAgICAgICAgICAgICMgb3RoZXIgdGhyZWFkIGhhcyByZWFkIG9uZSBieXRlLCB0aGUgbG93LWxldmVsIHdyaXRlIHdpbGwKKyAgICAgICAgICAgICMgcmV0dXJuIHdpdGggYSBzdWNjZXNzZnVsIChwYXJ0aWFsKSByZXN1bHQgcmF0aGVyIHRoYW4gYW4gRUlOVFIuCisgICAgICAgICAgICAjIFRoZSBidWZmZXJlZCBJTyBsYXllciBtdXN0IGNoZWNrIGZvciBwZW5kaW5nIHNpZ25hbAorICAgICAgICAgICAgIyBoYW5kbGVycywgd2hpY2ggaW4gdGhpcyBjYXNlIHdpbGwgaW52b2tlIGFsYXJtX2ludGVycnVwdCgpLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICB3aW8ud3JpdGUsIGl0ZW0gKiAoc3VwcG9ydC5QSVBFX01BWF9TSVpFIC8vIGxlbihpdGVtKSArIDEpKQorICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgICMgV2UgZ290IG9uZSBieXRlLCBnZXQgYW5vdGhlciBvbmUgYW5kIGNoZWNrIHRoYXQgaXQgaXNuJ3QgYQorICAgICAgICAgICAgIyByZXBlYXQgb2YgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAgICAgIHJlYWRfcmVzdWx0cy5hcHBlbmQob3MucmVhZChyLCAxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF9yZXN1bHRzLCBbYnl0ZXNbMDoxXSwgYnl0ZXNbMToyXV0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgb3MuY2xvc2UocikKKyAgICAgICAgICAgICMgVGhpcyBpcyBkZWxpYmVyYXRlLiBJZiB3ZSBkaWRuJ3QgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAgICAgIyBiZWZvcmUgY2xvc2luZyB3aW8sIHdpbyB3b3VsZCB0cnkgdG8gZmx1c2ggaXRzIGludGVybmFsCisgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGJsb2NrIGFnYWluLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlZF93cml0ZV91bmJ1ZmZlcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3dyaXRlKGIieHkiLCBiInh5IiwgbW9kZT0id2IiLCBidWZmZXJpbmc9MCkKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVkX3dyaXRlX2J1ZmZlcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3dyaXRlKGIieHkiLCBiInh5IiwgbW9kZT0id2IiKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZWRfd3JpdGVfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZSgieHkiLCBiInh5IiwgbW9kZT0idyIsIGVuY29kaW5nPSJhc2NpaSIpCisKKyAgICBkZWYgY2hlY2tfcmVlbnRyYW50X3dyaXRlKHNlbGYsIGRhdGEsICoqZmRvcGVuX2t3YXJncyk6CisgICAgICAgIGRlZiBvbl9hbGFybSgqYXJncyk6CisgICAgICAgICAgICAjIFdpbGwgYmUgY2FsbGVkIHJlZW50cmFudGx5IGZyb20gdGhlIHNhbWUgdGhyZWFkCisgICAgICAgICAgICB3aW8ud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIDEvLzAKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb25fYWxhcm0pCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAjIEVpdGhlciB0aGUgcmVlbnRyYW50IGNhbGwgdG8gd2lvLndyaXRlKCkgZmFpbHMgd2l0aCBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAjIG9yIHRoZSBzaWduYWwgaGFuZGxlciByYWlzZXMgWmVyb0RpdmlzaW9uRXJyb3IuCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgUnVudGltZUVycm9yKSkgYXMgY206CisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpby53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgd2lvLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGJ1ZmZlciBkb2Vzbid0IGZpbGwgdXAgYW5kIGJsb2NrIGZ1cnRoZXIgd3JpdGVzCisgICAgICAgICAgICAgICAgICAgIG9zLnJlYWQociwgbGVuKGRhdGEpICogMTAwKQorICAgICAgICAgICAgZXhjID0gY20uZXhjZXB0aW9uCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4YywgUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGV4Yykuc3RhcnRzd2l0aCgicmVlbnRyYW50IGNhbGwiKSwgc3RyKGV4YykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3aW8uY2xvc2UoKQorICAgICAgICAgICAgb3MuY2xvc2UocikKKworICAgIGRlZiB0ZXN0X3JlZW50cmFudF93cml0ZV9idWZmZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWVudHJhbnRfd3JpdGUoYiJ4eSIsIG1vZGU9IndiIikKKworICAgIGRlZiB0ZXN0X3JlZW50cmFudF93cml0ZV90ZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlZW50cmFudF93cml0ZSgieHkiLCBtb2RlPSJ3IiwgZW5jb2Rpbmc9ImFzY2lpIikKKworICAgIGRlZiBjaGVja19pbnRlcnJ1cHRlZF9yZWFkX3JldHJ5KHNlbGYsIGRlY29kZSwgKipmZG9wZW5fa3dhcmdzKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBhIGJ1ZmZlcmVkIHJlYWQsIHdoZW4gaXQgZ2V0cyBpbnRlcnJ1cHRlZCAoZWl0aGVyCisgICAgICAgIHJldHVybmluZyBhIHBhcnRpYWwgcmVzdWx0IG9yIEVJTlRSKSwgcHJvcGVybHkgaW52b2tlcyB0aGUgc2lnbmFsCisgICAgICAgIGhhbmRsZXIgYW5kIHJldHJpZXMgaWYgdGhlIGxhdHRlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuIiIiCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgZmRvcGVuX2t3YXJnc1siY2xvc2VmZCJdID0gRmFsc2UKKyAgICAgICAgZGVmIGFsYXJtX2hhbmRsZXIoc2lnLCBmcmFtZSk6CisgICAgICAgICAgICBvcy53cml0ZSh3LCBiImJhciIpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGFsYXJtX2hhbmRsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJpbyA9IHNlbGYuaW8ub3BlbihyLCAqKmZkb3Blbl9rd2FyZ3MpCisgICAgICAgICAgICBvcy53cml0ZSh3LCBiImZvbyIpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgYmVoYXZpb3VyOgorICAgICAgICAgICAgIyAtIGZpcnN0IHJhdyByZWFkKCkgcmV0dXJucyBwYXJ0aWFsIGIiZm9vIgorICAgICAgICAgICAgIyAtIHNlY29uZCByYXcgcmVhZCgpIHJldHVybnMgRUlOVFIKKyAgICAgICAgICAgICMgLSB0aGlyZCByYXcgcmVhZCgpIHJldHVybnMgYiJiYXIiCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShyaW8ucmVhZCg2KSksICJmb29iYXIiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmlvLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICBvcy5jbG9zZShyKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZXJkX3JlYWRfcmV0cnlfYnVmZmVyZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfcmVhZF9yZXRyeShsYW1iZGEgeDogeC5kZWNvZGUoJ2xhdGluMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT0icmIiKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZXJkX3JlYWRfcmV0cnlfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF9yZWFkX3JldHJ5KGxhbWJkYSB4OiB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT0iciIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiBjaGVja19pbnRlcnJ1cHRlZF93cml0ZV9yZXRyeShzZWxmLCBpdGVtLCAqKmZkb3Blbl9rd2FyZ3MpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGEgYnVmZmVyZWQgd3JpdGUsIHdoZW4gaXQgZ2V0cyBpbnRlcnJ1cHRlZCAoZWl0aGVyCisgICAgICAgIHJldHVybmluZyBhIHBhcnRpYWwgcmVzdWx0IG9yIEVJTlRSKSwgcHJvcGVybHkgaW52b2tlcyB0aGUgc2lnbmFsCisgICAgICAgIGhhbmRsZXIgYW5kIHJldHJpZXMgaWYgdGhlIGxhdHRlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuIiIiCisgICAgICAgIHNlbGVjdCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgic2VsZWN0IikKKyAgICAgICAgIyBBIHF1YW50aXR5IHRoYXQgZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUgb2YgYW4gYW5vbnltb3VzIHBpcGUncworICAgICAgICAjIHdyaXRlIGVuZC4KKyAgICAgICAgTiA9IHN1cHBvcnQuUElQRV9NQVhfU0laRQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIGZkb3Blbl9rd2FyZ3NbImNsb3NlZmQiXSA9IEZhbHNlCisgICAgICAgICMgV2UgbmVlZCBhIHNlcGFyYXRlIHRocmVhZCB0byByZWFkIGZyb20gdGhlIHBpcGUgYW5kIGFsbG93IHRoZQorICAgICAgICAjIHdyaXRlKCkgdG8gZmluaXNoLiAgVGhpcyB0aHJlYWQgaXMgc3RhcnRlZCBhZnRlciB0aGUgU0lHQUxSTSBpcworICAgICAgICAjIHJlY2VpdmVkIChmb3JjaW5nIGEgZmlyc3QgRUlOVFIgaW4gd3JpdGUoKSkuCisgICAgICAgIHJlYWRfcmVzdWx0cyA9IFtdCisgICAgICAgIHdyaXRlX2ZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgZGVmIF9yZWFkKCk6CisgICAgICAgICAgICB3aGlsZSBub3Qgd3JpdGVfZmluaXNoZWQ6CisgICAgICAgICAgICAgICAgd2hpbGUgciBpbiBzZWxlY3Quc2VsZWN0KFtyXSwgW10sIFtdLCAxLjApWzBdOgorICAgICAgICAgICAgICAgICAgICBzID0gb3MucmVhZChyLCAxMDI0KQorICAgICAgICAgICAgICAgICAgICByZWFkX3Jlc3VsdHMuYXBwZW5kKHMpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fcmVhZCkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIGRlZiBhbGFybTEoc2lnLCBmcmFtZSk6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybTIpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgZGVmIGFsYXJtMihzaWcsIGZyYW1lKToKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybTEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpbyA9IHNlbGYuaW8ub3Blbih3LCAqKmZkb3Blbl9rd2FyZ3MpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgYmVoYXZpb3VyOgorICAgICAgICAgICAgIyAtIGZpcnN0IHJhdyB3cml0ZSgpIGlzIHBhcnRpYWwgKGJlY2F1c2Ugb2YgdGhlIGxpbWl0ZWQgcGlwZSBidWZmZXIKKyAgICAgICAgICAgICMgICBhbmQgdGhlIGZpcnN0IGFsYXJtKQorICAgICAgICAgICAgIyAtIHNlY29uZCByYXcgd3JpdGUoKSByZXR1cm5zIEVJTlRSIChiZWNhdXNlIG9mIHRoZSBzZWNvbmQgYWxhcm0pCisgICAgICAgICAgICAjIC0gc3Vic2VxdWVudCB3cml0ZSgpcyBhcmUgc3VjY2Vzc2Z1bCAoZWl0aGVyIHBhcnRpYWwgb3IgY29tcGxldGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE4sIHdpby53cml0ZShpdGVtICogTikpCisgICAgICAgICAgICB3aW8uZmx1c2goKQorICAgICAgICAgICAgd3JpdGVfZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOLCBzdW0obGVuKHgpIGZvciB4IGluIHJlYWRfcmVzdWx0cykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3cml0ZV9maW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICBvcy5jbG9zZShyKQorICAgICAgICAgICAgIyBUaGlzIGlzIGRlbGliZXJhdGUuIElmIHdlIGRpZG4ndCBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICAjIGJlZm9yZSBjbG9zaW5nIHdpbywgd2lvIHdvdWxkIHRyeSB0byBmbHVzaCBpdHMgaW50ZXJuYWwKKyAgICAgICAgICAgICMgYnVmZmVyLCBhbmQgY291bGQgYmxvY2sgKGluIGNhc2Ugb2YgZmFpbHVyZSkuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2lvLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF93cml0ZV9yZXRyeV9idWZmZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZV9yZXRyeShiIngiLCBtb2RlPSJ3YiIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlcmRfd3JpdGVfcmV0cnlfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZV9yZXRyeSgieCIsIG1vZGU9InciLCBlbmNvZGluZz0ibGF0aW4xIikKKworCitjbGFzcyBDU2lnbmFsc1Rlc3QoU2lnbmFsc1Rlc3QpOgorICAgIGlvID0gaW8KKworY2xhc3MgUHlTaWduYWxzVGVzdChTaWduYWxzVGVzdCk6CisgICAgaW8gPSBweWlvCisKKyAgICAjIEhhbmRsaW5nIHJlZW50cmFuY3kgaXNzdWVzIHdvdWxkIHNsb3cgZG93biBfcHlpbyBldmVuIG1vcmUsIHNvIHRoZQorICAgICMgdGVzdHMgYXJlIGRpc2FibGVkLgorICAgIHRlc3RfcmVlbnRyYW50X3dyaXRlX2J1ZmZlcmVkID0gTm9uZQorICAgIHRlc3RfcmVlbnRyYW50X3dyaXRlX3RleHQgPSBOb25lCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gKENJT1Rlc3QsIFB5SU9UZXN0LAorICAgICAgICAgICAgIENCdWZmZXJlZFJlYWRlclRlc3QsIFB5QnVmZmVyZWRSZWFkZXJUZXN0LAorICAgICAgICAgICAgIENCdWZmZXJlZFdyaXRlclRlc3QsIFB5QnVmZmVyZWRXcml0ZXJUZXN0LAorICAgICAgICAgICAgIENCdWZmZXJlZFJXUGFpclRlc3QsIFB5QnVmZmVyZWRSV1BhaXJUZXN0LAorICAgICAgICAgICAgIENCdWZmZXJlZFJhbmRvbVRlc3QsIFB5QnVmZmVyZWRSYW5kb21UZXN0LAorICAgICAgICAgICAgIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyVGVzdCwKKyAgICAgICAgICAgICBDSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QsIFB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QsCisgICAgICAgICAgICAgQ1RleHRJT1dyYXBwZXJUZXN0LCBQeVRleHRJT1dyYXBwZXJUZXN0LAorICAgICAgICAgICAgIENNaXNjSU9UZXN0LCBQeU1pc2NJT1Rlc3QsCisgICAgICAgICAgICAgQ1NpZ25hbHNUZXN0LCBQeVNpZ25hbHNUZXN0LAorICAgICAgICAgICAgICkKKworICAgICMgUHV0IHRoZSBuYW1lc3BhY2VzIG9mIHRoZSBJTyBtb2R1bGUgd2UgYXJlIHRlc3RpbmcgYW5kIHNvbWUgdXNlZnVsIG1vY2sKKyAgICAjIGNsYXNzZXMgaW4gdGhlIF9fZGljdF9fIG9mIGVhY2ggdGVzdC4KKyAgICBtb2NrcyA9IChNb2NrUmF3SU8sIE1pc2JlaGF2ZWRSYXdJTywgTW9ja0ZpbGVJTywgQ2xvc2VGYWlsdXJlSU8sCisgICAgICAgICAgICAgTW9ja05vbkJsb2NrV3JpdGVySU8sIE1vY2tSYXdJT1dpdGhvdXRSZWFkKQorICAgIGFsbF9tZW1iZXJzID0gaW8uX19hbGxfXyArIFsiSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciJdCisgICAgY19pb19ucyA9IGRpY3QoKG5hbWUsIGdldGF0dHIoaW8sIG5hbWUpKSBmb3IgbmFtZSBpbiBhbGxfbWVtYmVycykKKyAgICBweV9pb19ucyA9IGRpY3QoKG5hbWUsIGdldGF0dHIocHlpbywgbmFtZSkpIGZvciBuYW1lIGluIGFsbF9tZW1iZXJzKQorICAgIGdsb2JzID0gZ2xvYmFscygpCisgICAgY19pb19ucy51cGRhdGUoKHguX19uYW1lX18sIGdsb2JzWyJDIiArIHguX19uYW1lX19dKSBmb3IgeCBpbiBtb2NrcykKKyAgICBweV9pb19ucy51cGRhdGUoKHguX19uYW1lX18sIGdsb2JzWyJQeSIgKyB4Ll9fbmFtZV9fXSkgZm9yIHggaW4gbW9ja3MpCisgICAgIyBBdm9pZCB0dXJuaW5nIG9wZW4gaW50byBhIGJvdW5kIG1ldGhvZC4KKyAgICBweV9pb19uc1sib3BlbiJdID0gcHlpby5PcGVuV3JhcHBlcgorICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICBpZiB0ZXN0Ll9fbmFtZV9fLnN0YXJ0c3dpdGgoIkMiKToKKyAgICAgICAgICAgIGZvciBuYW1lLCBvYmogaW4gY19pb19ucy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIodGVzdCwgbmFtZSwgb2JqKQorICAgICAgICBlbGlmIHRlc3QuX19uYW1lX18uc3RhcnRzd2l0aCgiUHkiKToKKyAgICAgICAgICAgIGZvciBuYW1lLCBvYmogaW4gcHlfaW9fbnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHRlc3QsIG5hbWUsIG9iaikKKworICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTk2NWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKQEAgLTAsMCArMSw5MyBAQAoraW1wb3J0IGFycmF5CitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgZ2V0X2F0dHJpYnV0ZQoraW1wb3J0IG9zLCBzdHJ1Y3QKK2ZjbnRsID0gaW1wb3J0X21vZHVsZSgnZmNudGwnKQordGVybWlvcyA9IGltcG9ydF9tb2R1bGUoJ3Rlcm1pb3MnKQorZ2V0X2F0dHJpYnV0ZSh0ZXJtaW9zLCAnVElPQ0dQR1JQJykgI0Nhbid0IHJ1biB0ZXN0cyB3aXRob3V0IHRoaXMgZmVhdHVyZQorCit0cnk6CisgICAgdHR5ID0gb3BlbigiL2Rldi90dHkiLCAiciIpCitleGNlcHQgSU9FcnJvcjoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVW5hYmxlIHRvIG9wZW4gL2Rldi90dHkiKQorZWxzZToKKyAgICAjIFNraXAgaWYgYW5vdGhlciBwcm9jZXNzIGlzIGluIGZvcmVncm91bmQKKyAgICByID0gZmNudGwuaW9jdGwodHR5LCB0ZXJtaW9zLlRJT0NHUEdSUCwgIiAgICAiKQorICAgIHR0eS5jbG9zZSgpCisgICAgcnBncnAgPSBzdHJ1Y3QudW5wYWNrKCJpIiwgcilbMF0KKyAgICBpZiBycGdycCBub3QgaW4gKG9zLmdldHBncnAoKSwgb3MuZ2V0c2lkKDApKToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk5laXRoZXIgdGhlIHByb2Nlc3MgZ3JvdXAgbm9yIHRoZSBzZXNzaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZSBhdHRhY2hlZCB0byAvZGV2L3R0eSIpCisgICAgZGVsIHR0eSwgciwgcnBncnAKKwordHJ5OgorICAgIGltcG9ydCBwdHkKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwdHkgPSBOb25lCisKK2NsYXNzIElvY3RsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2lvY3RsKHNlbGYpOgorICAgICAgICAjIElmIHRoaXMgcHJvY2VzcyBoYXMgYmVlbiBwdXQgaW50byB0aGUgYmFja2dyb3VuZCwgVElPQ0dQR1JQIHJldHVybnMKKyAgICAgICAgIyB0aGUgc2Vzc2lvbiBJRCBpbnN0ZWFkIG9mIHRoZSBwcm9jZXNzIGdyb3VwIGlkLgorICAgICAgICBpZHMgPSAob3MuZ2V0cGdycCgpLCBvcy5nZXRzaWQoMCkpCisgICAgICAgIHR0eSA9IG9wZW4oIi9kZXYvdHR5IiwgInIiKQorICAgICAgICByID0gZmNudGwuaW9jdGwodHR5LCB0ZXJtaW9zLlRJT0NHUEdSUCwgIiAgICAiKQorICAgICAgICBycGdycCA9IHN0cnVjdC51bnBhY2soImkiLCByKVswXQorICAgICAgICBzZWxmLmFzc2VydEluKHJwZ3JwLCBpZHMpCisKKyAgICBkZWYgX2NoZWNrX2lvY3RsX211dGF0ZV9sZW4oc2VsZiwgbmJ5dGVzPU5vbmUpOgorICAgICAgICBidWYgPSBhcnJheS5hcnJheSgnaScpCisgICAgICAgIGludHNpemUgPSBidWYuaXRlbXNpemUKKyAgICAgICAgaWRzID0gKG9zLmdldHBncnAoKSwgb3MuZ2V0c2lkKDApKQorICAgICAgICAjIEEgZmlsbCB2YWx1ZSB1bmxpa2VseSB0byBiZSBpbiBgaWRzYAorICAgICAgICBmaWxsID0gLTEyMzQ1CisgICAgICAgIGlmIG5ieXRlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgRXh0ZW5kIHRoZSBidWZmZXIgc28gdGhhdCBpdCBpcyBleGFjdGx5IGBuYnl0ZXNgIGJ5dGVzIGxvbmcKKyAgICAgICAgICAgIGJ1Zi5leHRlbmQoW2ZpbGxdICogKG5ieXRlcyAvLyBpbnRzaXplKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZikgKiBpbnRzaXplLCBuYnl0ZXMpICAgIyBzYW5pdHkgY2hlY2sKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoZmlsbCkKKyAgICAgICAgd2l0aCBvcGVuKCIvZGV2L3R0eSIsICJyIikgYXMgdHR5OgorICAgICAgICAgICAgciA9IGZjbnRsLmlvY3RsKHR0eSwgdGVybWlvcy5USU9DR1BHUlAsIGJ1ZiwgMSkKKyAgICAgICAgcnBncnAgPSBidWZbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCAwKQorICAgICAgICBzZWxmLmFzc2VydEluKHJwZ3JwLCBpZHMpCisKKyAgICBkZWYgdGVzdF9pb2N0bF9tdXRhdGUoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2lvY3RsX211dGF0ZV9sZW4oKQorCisgICAgZGVmIHRlc3RfaW9jdGxfbXV0YXRlXzEwMjQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk3NTg6IGEgbXV0YWJsZSBidWZmZXIgb2YgZXhhY3RseSAxMDI0IGJ5dGVzIHdvdWxkbid0IGJlCisgICAgICAgICMgY29waWVkIGJhY2sgYWZ0ZXIgdGhlIHN5c3RlbSBjYWxsLgorICAgICAgICBzZWxmLl9jaGVja19pb2N0bF9tdXRhdGVfbGVuKDEwMjQpCisKKyAgICBkZWYgdGVzdF9pb2N0bF9tdXRhdGVfMjA0OChzZWxmKToKKyAgICAgICAgIyBUZXN0IHdpdGggYSBsYXJnZXIgYnVmZmVyLCBqdXN0IGZvciB0aGUgcmVjb3JkLgorICAgICAgICBzZWxmLl9jaGVja19pb2N0bF9tdXRhdGVfbGVuKDIwNDgpCisKKyAgICBkZWYgdGVzdF9pb2N0bF9zaWduZWRfdW5zaWduZWRfY29kZV9wYXJhbShzZWxmKToKKyAgICAgICAgaWYgbm90IHB0eToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdwdHkgbW9kdWxlIHJlcXVpcmVkJykKKyAgICAgICAgbWZkLCBzZmQgPSBwdHkub3BlbnB0eSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRlcm1pb3MuVElPQ1NXSU5TWiA8IDA6CisgICAgICAgICAgICAgICAgc2V0X3dpbnN6X29wY29kZV9tYXliZV9uZWcgPSB0ZXJtaW9zLlRJT0NTV0lOU1oKKyAgICAgICAgICAgICAgICBzZXRfd2luc3pfb3Bjb2RlX3BvcyA9IHRlcm1pb3MuVElPQ1NXSU5TWiAmIDB4ZmZmZmZmZmZMCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNldF93aW5zel9vcGNvZGVfcG9zID0gdGVybWlvcy5USU9DU1dJTlNaCisgICAgICAgICAgICAgICAgc2V0X3dpbnN6X29wY29kZV9tYXliZV9uZWcsID0gc3RydWN0LnVucGFjaygiaSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiSSIsIHRlcm1pb3MuVElPQ1NXSU5TWikpCisKKyAgICAgICAgICAgIG91cl93aW5zeiA9IHN0cnVjdC5wYWNrKCJISEhIIiw4MCwyNSwwLDApCisgICAgICAgICAgICAjIHRlc3QgYm90aCB3aXRoIGEgcG9zaXRpdmUgYW5kIHBvdGVudGlhbGx5IG5lZ2F0aXZlIGlvY3RsIGNvZGUKKyAgICAgICAgICAgIG5ld193aW5zeiA9IGZjbnRsLmlvY3RsKG1mZCwgc2V0X3dpbnN6X29wY29kZV9wb3MsIG91cl93aW5zeikKKyAgICAgICAgICAgIG5ld193aW5zeiA9IGZjbnRsLmlvY3RsKG1mZCwgc2V0X3dpbnN6X29wY29kZV9tYXliZV9uZWcsIG91cl93aW5zeikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKG1mZCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHNmZCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChJb2N0bFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pc2luc3RhbmNlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaXNpbnN0YW5jZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWIwODE2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaXNpbnN0YW5jZS5weQpAQCAtMCwwICsxLDI3NyBAQAorIyBUZXN0cyBzb21lIGNvcm5lciBjYXNlcyB3aXRoIGlzaW5zdGFuY2UoKSBhbmQgaXNzdWJjbGFzcygpLiAgV2hpbGUgdGhlc2UKKyMgdGVzdHMgdXNlIG5ldyBzdHlsZSBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzLCB0aGV5IGFjdHVhbGx5IGRvIHdoaXRlYm94CisjIHRlc3Rpbmcgb2YgZXJyb3IgY29uZGl0aW9ucyB1bmNvdmVyZWQgd2hlbiB1c2luZyBleHRlbnNpb24gdHlwZXMuCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBzeXMKKworCisMCitjbGFzcyBUZXN0SXNJbnN0YW5jZUV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCB0byBtYWtlIHN1cmUgdGhhdCBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIGFjY2Vzc2luZyB0aGUgaW5zdGFuY2UncworICAgICMgY2xhc3MncyBiYXNlcyBpcyBtYXNrZWQuICBUaGlzIHdhcyBhY3R1YWxseSBhIGJ1ZyBpbiBQeXRob24gMi4yIGFuZAorICAgICMgMi4yLjEgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXNuJ3QgY2F1Z2h0IGJ1dCBpdCBhbHNvIHdhc24ndCBiZWluZyBjbGVhcmVkCisgICAgIyAobGVhZGluZyB0byBhbiAidW5kZXRlY3RlZCBlcnJvciIgaW4gdGhlIGRlYnVnIGJ1aWxkKS4gIFNldCB1cCBpcywKKyAgICAjIGlzaW5zdGFuY2UoaW5zdCwgY2xzKSB3aGVyZToKKyAgICAjCisgICAgIyAtIGluc3QgaXNuJ3QgYW4gSW5zdGFuY2VUeXBlCisgICAgIyAtIGNscyBpc24ndCBhIENsYXNzVHlwZSwgYSBUeXBlVHlwZSwgb3IgYSBUdXBsZVR5cGUKKyAgICAjIC0gY2xzIGhhcyBhIF9fYmFzZXNfXyBhdHRyaWJ1dGUKKyAgICAjIC0gaW5zdCBoYXMgYSBfX2NsYXNzX18gYXR0cmlidXRlCisgICAgIyAtIGluc3QuX19jbGFzc19fIGFzIG5vIF9fYmFzZXNfXyBhdHRyaWJ1dGUKKyAgICAjCisgICAgIyBTb3VuZHMgY29tcGxpY2F0ZWQsIEkga25vdywgYnV0IHRoaXMgbWltaWNzIGEgc2l0dWF0aW9uIHdoZXJlIGFuCisgICAgIyBleHRlbnNpb24gdHlwZSByYWlzZXMgYW4gQXR0cmlidXRlRXJyb3Igd2hlbiBpdHMgX19iYXNlc19fIGF0dHJpYnV0ZSBpcworICAgICMgZ290dGVuLiAgSW4gdGhhdCBjYXNlLCBpc2luc3RhbmNlKCkgc2hvdWxkIHJldHVybiBGYWxzZS4KKyAgICBkZWYgdGVzdF9jbGFzc19oYXNfbm9fYmFzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIEkob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBnZXRjbGFzcyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIFRoaXMgbXVzdCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgaGFzIG5vIF9fYmFzZXNfXyBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgX19jbGFzc19fID0gcHJvcGVydHkoZ2V0Y2xhc3MpCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldGJhc2VzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoKQorICAgICAgICAgICAgX19iYXNlc19fID0gcHJvcGVydHkoZ2V0YmFzZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNpbnN0YW5jZShJKCksIEMoKSkpCisKKyAgICAjIExpa2UgYWJvdmUgZXhjZXB0IHRoYXQgaW5zdC5fX2NsYXNzX18uX19iYXNlc19fIHJhaXNlcyBhbiBleGNlcHRpb24KKyAgICAjIG90aGVyIHRoYW4gQXR0cmlidXRlRXJyb3IKKyAgICBkZWYgdGVzdF9iYXNlc19yYWlzZXNfb3RoZXJfdGhhbl9hdHRyaWJ1dGVfZXJyb3Ioc2VsZik6CisgICAgICAgIGNsYXNzIEUob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBnZXRiYXNlcyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgICAgIF9fYmFzZXNfXyA9IHByb3BlcnR5KGdldGJhc2VzKQorCisgICAgICAgIGNsYXNzIEkob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBnZXRjbGFzcyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRSgpCisgICAgICAgICAgICBfX2NsYXNzX18gPSBwcm9wZXJ0eShnZXRjbGFzcykKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0YmFzZXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgpCisgICAgICAgICAgICBfX2Jhc2VzX18gPSBwcm9wZXJ0eShnZXRiYXNlcykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGlzaW5zdGFuY2UsIEkoKSwgQygpKQorCisgICAgIyBIZXJlJ3MgYSBzaXR1YXRpb24gd2hlcmUgZ2V0YXR0cihjbHMsICdfX2Jhc2VzX18nKSByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICMgSWYgdGhhdCBleGNlcHRpb24gaXMgbm90IEF0dHJpYnV0ZUVycm9yLCBpdCBzaG91bGQgbm90IGdldCBtYXNrZWQKKyAgICBkZWYgdGVzdF9kb250X21hc2tfbm9uX2F0dHJpYnV0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgY2xhc3MgSTogcGFzcworCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBnZXRiYXNlcyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgICAgIF9fYmFzZXNfXyA9IHByb3BlcnR5KGdldGJhc2VzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgaXNpbnN0YW5jZSwgSSgpLCBDKCkpCisKKyAgICAjIExpa2UgYWJvdmUsIGV4Y2VwdCB0aGF0IGdldGF0dHIoY2xzLCAnX19iYXNlc19fJykgcmFpc2VzIGFuCisgICAgIyBBdHRyaWJ1dGVFcnJvciwgd2hpY2ggL3Nob3VsZC8gZ2V0IG1hc2tlZCBhcyBhIFR5cGVFcnJvcgorICAgIGRlZiB0ZXN0X21hc2tfYXR0cmlidXRlX2Vycm9yKHNlbGYpOgorICAgICAgICBjbGFzcyBJOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldGJhc2VzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisgICAgICAgICAgICBfX2Jhc2VzX18gPSBwcm9wZXJ0eShnZXRiYXNlcykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzaW5zdGFuY2UsIEkoKSwgQygpKQorCisKKwwKKyMgVGhlc2UgdGVzdHMgYXJlIHNpbWlsYXIgdG8gYWJvdmUsIGJ1dCB0aWNrbGUgY2VydGFpbiBjb2RlIHBhdGhzIGluCisjIGlzc3ViY2xhc3MoKSBpbnN0ZWFkIG9mIGlzaW5zdGFuY2UoKSAtLSByZWFsbHkgUHlPYmplY3RfSXNTdWJjbGFzcygpCisjIHZzLiBQeU9iamVjdF9Jc0luc3RhbmNlKCkuCitjbGFzcyBUZXN0SXNTdWJjbGFzc0V4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2RvbnRfbWFza19ub25fYXR0cmlidXRlX2Vycm9yKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0YmFzZXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBfX2Jhc2VzX18gPSBwcm9wZXJ0eShnZXRiYXNlcykKKworICAgICAgICBjbGFzcyBTKEMpOiBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBpc3N1YmNsYXNzLCBDKCksIFMoKSkKKworICAgIGRlZiB0ZXN0X21hc2tfYXR0cmlidXRlX2Vycm9yKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0YmFzZXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgICAgIF9fYmFzZXNfXyA9IHByb3BlcnR5KGdldGJhc2VzKQorCisgICAgICAgIGNsYXNzIFMoQyk6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzc3ViY2xhc3MsIEMoKSwgUygpKQorCisgICAgIyBMaWtlIGFib3ZlLCBidXQgdGVzdCB0aGUgc2Vjb25kIGJyYW5jaCwgd2hlcmUgdGhlIF9fYmFzZXNfXyBvZiB0aGUKKyAgICAjIHNlY29uZCBhcmcgKHRoZSBjbHMgYXJnKSBpcyB0ZXN0ZWQuICBUaGlzIG1lYW5zIHRoZSBmaXJzdCBhcmcgbXVzdAorICAgICMgcmV0dXJuIGEgdmFsaWQgX19iYXNlc19fLCBhbmQgaXQncyBva2F5IGZvciBpdCB0byBiZSBhIG5vcm1hbCAtLQorICAgICMgdW5yZWxhdGVkIGJ5IGluaGVyaXRhbmNlIC0tIGNsYXNzLgorICAgIGRlZiB0ZXN0X2RvbnRfbWFza19ub25fYXR0cmlidXRlX2Vycm9yX2luX2Nsc19hcmcoc2VsZik6CisgICAgICAgIGNsYXNzIEI6IHBhc3MKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0YmFzZXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBfX2Jhc2VzX18gPSBwcm9wZXJ0eShnZXRiYXNlcykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGlzc3ViY2xhc3MsIEIsIEMoKSkKKworICAgIGRlZiB0ZXN0X21hc2tfYXR0cmlidXRlX2Vycm9yX2luX2Nsc19hcmcoc2VsZik6CisgICAgICAgIGNsYXNzIEI6IHBhc3MKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0YmFzZXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgICAgIF9fYmFzZXNfXyA9IHByb3BlcnR5KGdldGJhc2VzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXNzdWJjbGFzcywgQiwgQygpKQorCisKKwwKKyMgbWV0YSBjbGFzc2VzIGZvciBjcmVhdGluZyBhYnN0cmFjdCBjbGFzc2VzIGFuZCBpbnN0YW5jZXMKK2NsYXNzIEFic3RyYWN0Q2xhc3Mob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmFzZXMpOgorICAgICAgICBzZWxmLmJhc2VzID0gYmFzZXMKKworICAgIGRlZiBnZXRiYXNlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzZXMKKyAgICBfX2Jhc2VzX18gPSBwcm9wZXJ0eShnZXRiYXNlcykKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIEFic3RyYWN0SW5zdGFuY2Uoc2VsZikKKworY2xhc3MgQWJzdHJhY3RJbnN0YW5jZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrbGFzcyk6CisgICAgICAgIHNlbGYua2xhc3MgPSBrbGFzcworCisgICAgZGVmIGdldGNsYXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5rbGFzcworICAgIF9fY2xhc3NfXyA9IHByb3BlcnR5KGdldGNsYXNzKQorCisjIGFic3RyYWN0IGNsYXNzZXMKK0Fic3RyYWN0U3VwZXIgPSBBYnN0cmFjdENsYXNzKGJhc2VzPSgpKQorCitBYnN0cmFjdENoaWxkID0gQWJzdHJhY3RDbGFzcyhiYXNlcz0oQWJzdHJhY3RTdXBlciwpKQorCisjIG5vcm1hbCBjbGFzc2VzCitjbGFzcyBTdXBlcjoKKyAgICBwYXNzCisKK2NsYXNzIENoaWxkKFN1cGVyKToKKyAgICBwYXNzCisKKyMgbmV3LXN0eWxlIGNsYXNzZXMKK2NsYXNzIE5ld1N1cGVyKG9iamVjdCk6CisgICAgcGFzcworCitjbGFzcyBOZXdDaGlsZChOZXdTdXBlcik6CisgICAgcGFzcworCisKKwwKK2NsYXNzIFRlc3RJc0luc3RhbmNlSXNTdWJjbGFzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0cyB0byBlbnN1cmUgdGhhdCBpc2luc3RhbmNlIGFuZCBpc3N1YmNsYXNzIHdvcmsgb24gYWJzdHJhY3QKKyAgICAjIGNsYXNzZXMgYW5kIGluc3RhbmNlcy4gIEJlZm9yZSB0aGUgMi4yIHJlbGVhc2UsIFR5cGVFcnJvcnMgd2VyZQorICAgICMgcmFpc2VkIHdoZW4gYm9vbGVhbiB2YWx1ZXMgc2hvdWxkIGhhdmUgYmVlbiByZXR1cm5lZC4gIFRoZSBidWcgd2FzCisgICAgIyB0cmlnZ2VyZWQgYnkgbWl4aW5nICdub3JtYWwnIGNsYXNzZXMgYW5kIGluc3RhbmNlcyB3ZXJlIHdpdGgKKyAgICAjICdhYnN0cmFjdCcgY2xhc3NlcyBhbmQgaW5zdGFuY2VzLiAgVGhpcyBjYXNlIHRyaWVzIHRvIHRlc3QgYWxsCisgICAgIyBjb21iaW5hdGlvbnMuCisKKyAgICBkZWYgdGVzdF9pc2luc3RhbmNlX25vcm1hbChzZWxmKToKKyAgICAgICAgIyBub3JtYWwgaW5zdGFuY2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNpbnN0YW5jZShTdXBlcigpLCBTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzaW5zdGFuY2UoU3VwZXIoKSwgQ2hpbGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc2luc3RhbmNlKFN1cGVyKCksIEFic3RyYWN0U3VwZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc2luc3RhbmNlKFN1cGVyKCksIEFic3RyYWN0Q2hpbGQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNpbnN0YW5jZShDaGlsZCgpLCBTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzaW5zdGFuY2UoQ2hpbGQoKSwgQWJzdHJhY3RTdXBlcikpCisKKyAgICBkZWYgdGVzdF9pc2luc3RhbmNlX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIGFic3RyYWN0IGluc3RhbmNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzaW5zdGFuY2UoQWJzdHJhY3RTdXBlcigpLCBBYnN0cmFjdFN1cGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNpbnN0YW5jZShBYnN0cmFjdFN1cGVyKCksIEFic3RyYWN0Q2hpbGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc2luc3RhbmNlKEFic3RyYWN0U3VwZXIoKSwgU3VwZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc2luc3RhbmNlKEFic3RyYWN0U3VwZXIoKSwgQ2hpbGQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNpbnN0YW5jZShBYnN0cmFjdENoaWxkKCksIEFic3RyYWN0Q2hpbGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzaW5zdGFuY2UoQWJzdHJhY3RDaGlsZCgpLCBBYnN0cmFjdFN1cGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNpbnN0YW5jZShBYnN0cmFjdENoaWxkKCksIFN1cGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNpbnN0YW5jZShBYnN0cmFjdENoaWxkKCksIENoaWxkKSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX25vcm1hbChzZWxmKToKKyAgICAgICAgIyBub3JtYWwgY2xhc3NlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoU3VwZXIsIFN1cGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNzdWJjbGFzcyhTdXBlciwgQWJzdHJhY3RTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzc3ViY2xhc3MoU3VwZXIsIENoaWxkKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoQ2hpbGQsIENoaWxkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKENoaWxkLCBTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzc3ViY2xhc3MoQ2hpbGQsIEFic3RyYWN0U3VwZXIpKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgICMgYWJzdHJhY3QgY2xhc3NlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoQWJzdHJhY3RTdXBlciwgQWJzdHJhY3RTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzc3ViY2xhc3MoQWJzdHJhY3RTdXBlciwgQWJzdHJhY3RDaGlsZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzc3ViY2xhc3MoQWJzdHJhY3RTdXBlciwgQ2hpbGQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNzdWJjbGFzcyhBYnN0cmFjdENoaWxkLCBBYnN0cmFjdENoaWxkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKEFic3RyYWN0Q2hpbGQsIEFic3RyYWN0U3VwZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc3N1YmNsYXNzKEFic3RyYWN0Q2hpbGQsIFN1cGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNzdWJjbGFzcyhBYnN0cmFjdENoaWxkLCBDaGlsZCkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc190dXBsZShzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdpdGggYSB0dXBsZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGNsYXNzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKENoaWxkLCAoQ2hpbGQsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNzdWJjbGFzcyhDaGlsZCwgKFN1cGVyLCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc3N1YmNsYXNzKFN1cGVyLCAoQ2hpbGQsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNzdWJjbGFzcyhTdXBlciwgKENoaWxkLCBTdXBlcikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc3N1YmNsYXNzKENoaWxkLCAoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNzdWJjbGFzcyhTdXBlciwgKENoaWxkLCAoU3VwZXIsKSkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNzdWJjbGFzcyhOZXdDaGlsZCwgKE5ld0NoaWxkLCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoTmV3Q2hpbGQsIChOZXdTdXBlciwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNzdWJjbGFzcyhOZXdTdXBlciwgKE5ld0NoaWxkLCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoTmV3U3VwZXIsIChOZXdDaGlsZCwgTmV3U3VwZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNzdWJjbGFzcyhOZXdDaGlsZCwgKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoTmV3U3VwZXIsIChOZXdDaGlsZCwgKE5ld1N1cGVyLCkpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoaW50LCAobG9uZywgKGZsb2F0LCBpbnQpKSkpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3Moc3RyLCAodW5pY29kZSwgKENoaWxkLCBOZXdDaGlsZCwgYmFzZXN0cmluZykpKSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlY3Vyc2lvbl9saW1pdChzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBpc3N1YmNsYXNzIHJhaXNlcyBSdW50aW1lRXJyb3IgYmVmb3JlIHRoZSBDIHN0YWNrIGlzCisgICAgICAgICMgYmxvd24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBibG93c3RhY2ssIGlzc3ViY2xhc3MsIHN0ciwgc3RyKQorCisgICAgZGVmIHRlc3RfaXNpbnN0YW5jZV9yZWN1cnNpb25fbGltaXQoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgaXNzdWJjbGFzcyByYWlzZXMgUnVudGltZUVycm9yIGJlZm9yZSB0aGUgQyBzdGFjayBpcworICAgICAgICAjIGJsb3duCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgYmxvd3N0YWNrLCBpc2luc3RhbmNlLCAnJywgc3RyKQorCitkZWYgYmxvd3N0YWNrKGZ4biwgYXJnLCBjb21wYXJlX3RvKToKKyAgICAjIE1ha2Ugc3VyZSB0aGF0IGNhbGxpbmcgaXNpbnN0YW5jZSB3aXRoIGEgZGVlcGx5IG5lc3RlZCB0dXBsZSBmb3IgaXRzCisgICAgIyBhcmd1bWVudCB3aWxsIHJhaXNlIFJ1bnRpbWVFcnJvciBldmVudHVhbGx5LgorICAgIHR1cGxlX2FyZyA9IChjb21wYXJlX3RvLCkKKyAgICBmb3IgY250IGluIHhyYW5nZShzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKSs1KToKKyAgICAgICAgdHVwbGVfYXJnID0gKHR1cGxlX2FyZywpCisgICAgICAgIGZ4bihhcmcsIHR1cGxlX2FyZykKKworDAorZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3RJc0luc3RhbmNlRXhjZXB0aW9ucywKKyAgICAgICAgVGVzdElzU3ViY2xhc3NFeGNlcHRpb25zLAorICAgICAgICBUZXN0SXNJbnN0YW5jZUlzU3ViY2xhc3MKKyAgICApCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaXRlci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2l0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjMzlkMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2l0ZXIucHkKQEAgLTAsMCArMSw5MzIgQEAKKyMgVGVzdCBpdGVyYXRvcnMuCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIHVubGluaywgaGF2ZV91bmljb2RlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19weTNrX3dhcm5pbmdzLCBjcHl0aG9uX29ubHkKKworIyBUZXN0IHJlc3VsdCBvZiB0cmlwbGUgbG9vcCAodG9vIGJpZyB0byBpbmxpbmUpCitUUklQTEVUUyA9IFsoMCwgMCwgMCksICgwLCAwLCAxKSwgKDAsIDAsIDIpLAorICAgICAgICAgICAgKDAsIDEsIDApLCAoMCwgMSwgMSksICgwLCAxLCAyKSwKKyAgICAgICAgICAgICgwLCAyLCAwKSwgKDAsIDIsIDEpLCAoMCwgMiwgMiksCisKKyAgICAgICAgICAgICgxLCAwLCAwKSwgKDEsIDAsIDEpLCAoMSwgMCwgMiksCisgICAgICAgICAgICAoMSwgMSwgMCksICgxLCAxLCAxKSwgKDEsIDEsIDIpLAorICAgICAgICAgICAgKDEsIDIsIDApLCAoMSwgMiwgMSksICgxLCAyLCAyKSwKKworICAgICAgICAgICAgKDIsIDAsIDApLCAoMiwgMCwgMSksICgyLCAwLCAyKSwKKyAgICAgICAgICAgICgyLCAxLCAwKSwgKDIsIDEsIDEpLCAoMiwgMSwgMiksCisgICAgICAgICAgICAoMiwgMiwgMCksICgyLCAyLCAxKSwgKDIsIDIsIDIpXQorCisjIEhlbHBlciBjbGFzc2VzCisKK2NsYXNzIEJhc2ljSXRlckNsYXNzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKKyAgICAgICAgc2VsZi5uID0gbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHJlcyA9IHNlbGYuaQorICAgICAgICBpZiByZXMgPj0gc2VsZi5uOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICBzZWxmLmkgPSByZXMgKyAxCisgICAgICAgIHJldHVybiByZXMKKworY2xhc3MgSXRlcmF0aW5nU2VxdWVuY2VDbGFzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbik6CisgICAgICAgIHNlbGYubiA9IG4KKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBCYXNpY0l0ZXJDbGFzcyhzZWxmLm4pCisKK2NsYXNzIFNlcXVlbmNlQ2xhc3M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgorICAgICAgICBzZWxmLm4gPSBuCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICBpZiAwIDw9IGkgPCBzZWxmLm46CisgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisjIE1haW4gdGVzdCBzdWl0ZQorCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIEhlbHBlciB0byBjaGVjayB0aGF0IGFuIGl0ZXJhdG9yIHJldHVybnMgYSBnaXZlbiBzZXF1ZW5jZQorICAgIGRlZiBjaGVja19pdGVyYXRvcihzZWxmLCBpdCwgc2VxKToKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWwgPSBpdC5uZXh0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXMuYXBwZW5kKHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHNlcSkKKworICAgICMgSGVscGVyIHRvIGNoZWNrIHRoYXQgYSBmb3IgbG9vcCBnZW5lcmF0ZXMgYSBnaXZlbiBzZXF1ZW5jZQorICAgIGRlZiBjaGVja19mb3JfbG9vcChzZWxmLCBleHByLCBzZXEpOgorICAgICAgICByZXMgPSBbXQorICAgICAgICBmb3IgdmFsIGluIGV4cHI6CisgICAgICAgICAgICByZXMuYXBwZW5kKHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHNlcSkKKworICAgICMgVGVzdCBiYXNpYyB1c2Ugb2YgaXRlcigpIGZ1bmN0aW9uCisgICAgZGVmIHRlc3RfaXRlcl9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVyYXRvcihpdGVyKHJhbmdlKDEwKSksIHJhbmdlKDEwKSkKKworICAgICMgVGVzdCB0aGF0IGl0ZXIoaXRlcih4KSkgaXMgdGhlIHNhbWUgYXMgaXRlcih4KQorICAgIGRlZiB0ZXN0X2l0ZXJfaWRlbXBvdGVuY3koc2VsZik6CisgICAgICAgIHNlcSA9IHJhbmdlKDEwKQorICAgICAgICBpdCA9IGl0ZXIoc2VxKQorICAgICAgICBpdDIgPSBpdGVyKGl0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXQgaXMgaXQyKQorCisgICAgIyBUZXN0IHRoYXQgZm9yIGxvb3BzIG92ZXIgaXRlcmF0b3JzIHdvcmsKKyAgICBkZWYgdGVzdF9pdGVyX2Zvcl9sb29wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKGl0ZXIocmFuZ2UoMTApKSwgcmFuZ2UoMTApKQorCisgICAgIyBUZXN0IHNldmVyYWwgaW5kZXBlbmRlbnQgaXRlcmF0b3JzIG92ZXIgdGhlIHNhbWUgbGlzdAorICAgIGRlZiB0ZXN0X2l0ZXJfaW5kZXBlbmRlbmNlKHNlbGYpOgorICAgICAgICBzZXEgPSByYW5nZSgzKQorICAgICAgICByZXMgPSBbXQorICAgICAgICBmb3IgaSBpbiBpdGVyKHNlcSk6CisgICAgICAgICAgICBmb3IgaiBpbiBpdGVyKHNlcSk6CisgICAgICAgICAgICAgICAgZm9yIGsgaW4gaXRlcihzZXEpOgorICAgICAgICAgICAgICAgICAgICByZXMuYXBwZW5kKChpLCBqLCBrKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFRSSVBMRVRTKQorCisgICAgIyBUZXN0IHRyaXBsZSBsaXN0IGNvbXByZWhlbnNpb24gdXNpbmcgaXRlcmF0b3JzCisgICAgZGVmIHRlc3RfbmVzdGVkX2NvbXByZWhlbnNpb25zX2l0ZXIoc2VsZik6CisgICAgICAgIHNlcSA9IHJhbmdlKDMpCisgICAgICAgIHJlcyA9IFsoaSwgaiwgaykKKyAgICAgICAgICAgICAgIGZvciBpIGluIGl0ZXIoc2VxKSBmb3IgaiBpbiBpdGVyKHNlcSkgZm9yIGsgaW4gaXRlcihzZXEpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgVFJJUExFVFMpCisKKyAgICAjIFRlc3QgdHJpcGxlIGxpc3QgY29tcHJlaGVuc2lvbiB3aXRob3V0IGl0ZXJhdG9ycworICAgIGRlZiB0ZXN0X25lc3RlZF9jb21wcmVoZW5zaW9uc19mb3Ioc2VsZik6CisgICAgICAgIHNlcSA9IHJhbmdlKDMpCisgICAgICAgIHJlcyA9IFsoaSwgaiwgaykgZm9yIGkgaW4gc2VxIGZvciBqIGluIHNlcSBmb3IgayBpbiBzZXFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBUUklQTEVUUykKKworICAgICMgVGVzdCBhIGNsYXNzIHdpdGggX19pdGVyX18gaW4gYSBmb3IgbG9vcAorICAgIGRlZiB0ZXN0X2l0ZXJfY2xhc3NfZm9yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKEl0ZXJhdGluZ1NlcXVlbmNlQ2xhc3MoMTApLCByYW5nZSgxMCkpCisKKyAgICAjIFRlc3QgYSBjbGFzcyB3aXRoIF9faXRlcl9fIHdpdGggZXhwbGljaXQgaXRlcigpCisgICAgZGVmIHRlc3RfaXRlcl9jbGFzc19pdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2l0ZXJhdG9yKGl0ZXIoSXRlcmF0aW5nU2VxdWVuY2VDbGFzcygxMCkpLCByYW5nZSgxMCkpCisKKyAgICAjIFRlc3QgZm9yIGxvb3Agb24gYSBzZXF1ZW5jZSBjbGFzcyB3aXRob3V0IF9faXRlcl9fCisgICAgZGVmIHRlc3Rfc2VxX2NsYXNzX2ZvcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfbG9vcChTZXF1ZW5jZUNsYXNzKDEwKSwgcmFuZ2UoMTApKQorCisgICAgIyBUZXN0IGl0ZXIoKSBvbiBhIHNlcXVlbmNlIGNsYXNzIHdpdGhvdXQgX19pdGVyX18KKyAgICBkZWYgdGVzdF9zZXFfY2xhc3NfaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVyYXRvcihpdGVyKFNlcXVlbmNlQ2xhc3MoMTApKSwgcmFuZ2UoMTApKQorCisgICAgIyBUZXN0IGEgbmV3X3N0eWxlIGNsYXNzIHdpdGggX19pdGVyX18gYnV0IG5vIG5leHQoKSBtZXRob2QKKyAgICBkZWYgdGVzdF9uZXdfc3R5bGVfaXRlcl9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgSXRlckNsYXNzKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpdGVyLCBJdGVyQ2xhc3MoKSkKKworICAgICMgVGVzdCB0d28tYXJndW1lbnQgaXRlcigpIHdpdGggY2FsbGFibGUgaW5zdGFuY2UKKyAgICBkZWYgdGVzdF9pdGVyX2NhbGxhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuaSA9IDAKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBpID0gc2VsZi5pCisgICAgICAgICAgICAgICAgc2VsZi5pID0gaSArIDEKKyAgICAgICAgICAgICAgICBpZiBpID4gMTAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yICMgRW1lcmdlbmN5IHN0b3AKKyAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICBzZWxmLmNoZWNrX2l0ZXJhdG9yKGl0ZXIoQygpLCAxMCksIHJhbmdlKDEwKSkKKworICAgICMgVGVzdCB0d28tYXJndW1lbnQgaXRlcigpIHdpdGggZnVuY3Rpb24KKyAgICBkZWYgdGVzdF9pdGVyX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBkZWYgc3BhbShzdGF0ZT1bMF0pOgorICAgICAgICAgICAgaSA9IHN0YXRlWzBdCisgICAgICAgICAgICBzdGF0ZVswXSA9IGkrMQorICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgc2VsZi5jaGVja19pdGVyYXRvcihpdGVyKHNwYW0sIDEwKSwgcmFuZ2UoMTApKQorCisgICAgIyBUZXN0IHR3by1hcmd1bWVudCBpdGVyKCkgd2l0aCBmdW5jdGlvbiB0aGF0IHJhaXNlcyBTdG9wSXRlcmF0aW9uCisgICAgZGVmIHRlc3RfaXRlcl9mdW5jdGlvbl9zdG9wKHNlbGYpOgorICAgICAgICBkZWYgc3BhbShzdGF0ZT1bMF0pOgorICAgICAgICAgICAgaSA9IHN0YXRlWzBdCisgICAgICAgICAgICBpZiBpID09IDEwOgorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgIHN0YXRlWzBdID0gaSsxCisgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICBzZWxmLmNoZWNrX2l0ZXJhdG9yKGl0ZXIoc3BhbSwgMjApLCByYW5nZSgxMCkpCisKKyAgICAjIFRlc3QgZXhjZXB0aW9uIHByb3BhZ2F0aW9uIHRocm91Z2ggZnVuY3Rpb24gaXRlcmF0b3IKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fZnVuY3Rpb24oc2VsZik6CisgICAgICAgIGRlZiBzcGFtKHN0YXRlPVswXSk6CisgICAgICAgICAgICBpID0gc3RhdGVbMF0KKyAgICAgICAgICAgIHN0YXRlWzBdID0gaSsxCisgICAgICAgICAgICBpZiBpID09IDEwOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHggaW4gaXRlcihzcGFtLCAyMCk6CisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZCh4KQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHJhbmdlKDEwKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFJ1bnRpbWVFcnJvciIpCisKKyAgICAjIFRlc3QgZXhjZXB0aW9uIHByb3BhZ2F0aW9uIHRocm91Z2ggc2VxdWVuY2UgaXRlcmF0b3IKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIGNsYXNzIE15U2VxdWVuY2VDbGFzcyhTZXF1ZW5jZUNsYXNzKToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICBpZiBpID09IDEwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgICAgICAgICByZXR1cm4gU2VxdWVuY2VDbGFzcy5fX2dldGl0ZW1fXyhzZWxmLCBpKQorICAgICAgICByZXMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgeCBpbiBNeVNlcXVlbmNlQ2xhc3MoMjApOgorICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoeCkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCByYW5nZSgxMCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBSdW50aW1lRXJyb3IiKQorCisgICAgIyBUZXN0IGZvciBTdG9wSXRlcmF0aW9uIGZyb20gX19nZXRpdGVtX18KKyAgICBkZWYgdGVzdF9zdG9wX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVNlcXVlbmNlQ2xhc3MoU2VxdWVuY2VDbGFzcyk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgaWYgaSA9PSAxMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgICAgIHJldHVybiBTZXF1ZW5jZUNsYXNzLl9fZ2V0aXRlbV9fKHNlbGYsIGkpCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX2xvb3AoTXlTZXF1ZW5jZUNsYXNzKDIwKSwgcmFuZ2UoMTApKQorCisgICAgIyBUZXN0IGEgYmlnIHJhbmdlCisgICAgZGVmIHRlc3RfaXRlcl9iaWdfcmFuZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZm9yX2xvb3AoaXRlcihyYW5nZSgxMDAwMCkpLCByYW5nZSgxMDAwMCkpCisKKyAgICAjIFRlc3QgYW4gZW1wdHkgbGlzdAorICAgIGRlZiB0ZXN0X2l0ZXJfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZm9yX2xvb3AoaXRlcihbXSksIFtdKQorCisgICAgIyBUZXN0IGEgdHVwbGUKKyAgICBkZWYgdGVzdF9pdGVyX3R1cGxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKGl0ZXIoKDAsMSwyLDMsNCw1LDYsNyw4LDkpKSwgcmFuZ2UoMTApKQorCisgICAgIyBUZXN0IGFuIHhyYW5nZQorICAgIGRlZiB0ZXN0X2l0ZXJfeHJhbmdlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKGl0ZXIoeHJhbmdlKDEwKSksIHJhbmdlKDEwKSkKKworICAgICMgVGVzdCBhIHN0cmluZworICAgIGRlZiB0ZXN0X2l0ZXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKGl0ZXIoImFiY2RlIiksIFsiYSIsICJiIiwgImMiLCAiZCIsICJlIl0pCisKKyAgICAjIFRlc3QgYSBVbmljb2RlIHN0cmluZworICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgZGVmIHRlc3RfaXRlcl91bmljb2RlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jaGVja19mb3JfbG9vcChpdGVyKHVuaWNvZGUoImFiY2RlIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdW5pY29kZSgiYSIpLCB1bmljb2RlKCJiIiksIHVuaWNvZGUoImMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUoImQiKSwgdW5pY29kZSgiZSIpXSkKKworICAgICMgVGVzdCBhIGRpcmVjdG9yeQorICAgIGRlZiB0ZXN0X2l0ZXJfZGljdChzZWxmKToKKyAgICAgICAgZGljdCA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGRpY3RbaV0gPSBOb25lCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX2xvb3AoZGljdCwgZGljdC5rZXlzKCkpCisKKyAgICAjIFRlc3QgYSBmaWxlCisgICAgZGVmIHRlc3RfaXRlcl9maWxlKHNlbGYpOgorICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiJWRcbiIgJSBpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKGYsIFsiMFxuIiwgIjFcbiIsICIyXG4iLCAiM1xuIiwgIjRcbiJdKQorICAgICAgICAgICAgc2VsZi5jaGVja19mb3JfbG9vcChmLCBbXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIFRlc3QgbGlzdCgpJ3MgdXNlIG9mIGl0ZXJhdG9ycy4KKyAgICBkZWYgdGVzdF9idWlsdGluX2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChTZXF1ZW5jZUNsYXNzKDUpKSwgcmFuZ2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChTZXF1ZW5jZUNsYXNzKDApKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgoKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMTAsIC0xLCAtMSkpLCByYW5nZSgxMCwgLTEsIC0xKSkKKworICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBkLmtleXMoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgNDIpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVkXG4iICUgaSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGYpLCBbIjBcbiIsICIxXG4iLCAiMlxuIiwgIjNcbiIsICI0XG4iXSkKKyAgICAgICAgICAgIGYuc2VlaygwLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIjBcbiIsICIxXG4iLCAiMlxuIiwgIjNcbiIsICI0XG4iXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIFRlc3QgdHVwbGVzKCkncyB1c2Ugb2YgaXRlcmF0b3JzLgorICAgIGRlZiB0ZXN0X2J1aWx0aW5fdHVwbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoU2VxdWVuY2VDbGFzcyg1KSksICgwLCAxLCAyLCAzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShTZXF1ZW5jZUNsYXNzKDApKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoW10pLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSgoKSksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKCJhYmMiKSwgKCJhIiwgImIiLCAiYyIpKQorCisgICAgICAgIGQgPSB7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGQpLCB0dXBsZShkLmtleXMoKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0dXBsZSwgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0dXBsZSwgNDIpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVkXG4iICUgaSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShmKSwgKCIwXG4iLCAiMVxuIiwgIjJcbiIsICIzXG4iLCAiNFxuIikpCisgICAgICAgICAgICBmLnNlZWsoMCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiMFxuIiwgIjFcbiIsICIyXG4iLCAiM1xuIiwgIjRcbiIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICMgVGVzdCBmaWx0ZXIoKSdzIHVzZSBvZiBpdGVyYXRvcnMuCisgICAgZGVmIHRlc3RfYnVpbHRpbl9maWx0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKE5vbmUsIFNlcXVlbmNlQ2xhc3MoNSkpLCByYW5nZSgxLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIoTm9uZSwgU2VxdWVuY2VDbGFzcygwKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihOb25lLCAoKSksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihOb25lLCAiYWJjIiksICJhYmMiKQorCisgICAgICAgIGQgPSB7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihOb25lLCBkKSwgZC5rZXlzKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmaWx0ZXIsIE5vbmUsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmlsdGVyLCBOb25lLCA0MikKKworICAgICAgICBjbGFzcyBCb29sZWFuOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRydXRoKToKKyAgICAgICAgICAgICAgICBzZWxmLnRydXRoID0gdHJ1dGgKKyAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50cnV0aAorICAgICAgICBiVHJ1ZSA9IEJvb2xlYW4oMSkKKyAgICAgICAgYkZhbHNlID0gQm9vbGVhbigwKQorCisgICAgICAgIGNsYXNzIFNlcToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi52YWxzID0gYXJncworICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGNsYXNzIFNlcUl0ZXI6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWxzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmFscyA9IHZhbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gc2VsZi5pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmkgPSBpICsgMQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSA8IGxlbihzZWxmLnZhbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHNbaV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgICAgIHJldHVybiBTZXFJdGVyKHNlbGYudmFscykKKworICAgICAgICBzZXEgPSBTZXEoKihbYlRydWUsIGJGYWxzZV0gKiAyNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKGxhbWJkYSB4OiBub3QgeCwgc2VxKSwgW2JGYWxzZV0qMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKGxhbWJkYSB4OiBub3QgeCwgaXRlcihzZXEpKSwgW2JGYWxzZV0qMjUpCisKKyAgICAjIFRlc3QgbWF4KCkgYW5kIG1pbigpJ3MgdXNlIG9mIGl0ZXJhdG9ycy4KKyAgICBkZWYgdGVzdF9idWlsdGluX21heF9taW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KFNlcXVlbmNlQ2xhc3MoNSkpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbihTZXF1ZW5jZUNsYXNzKDUpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoOCwgLTEpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbig4LCAtMSksIC0xKQorCisgICAgICAgIGQgPSB7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heChkKSwgInR3byIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKGQpLCAib25lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoZC5pdGVydmFsdWVzKCkpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbihpdGVyKGQuaXRlcnZhbHVlcygpKSksIDEpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoIm1lZGl1bSBsaW5lXG4iKQorICAgICAgICAgICAgZi53cml0ZSgieHRyYSBsYXJnZSBsaW5lXG4iKQorICAgICAgICAgICAgZi53cml0ZSgiaXR0eS1iaXR0eSBsaW5lXG4iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbihmKSwgIml0dHktYml0dHkgbGluZVxuIikKKyAgICAgICAgICAgIGYuc2VlaygwLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoZiksICJ4dHJhIGxhcmdlIGxpbmVcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBUZXN0IG1hcCgpJ3MgdXNlIG9mIGl0ZXJhdG9ycy4KKyAgICBkZWYgdGVzdF9idWlsdGluX21hcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAobGFtYmRhIHg6IHgrMSwgU2VxdWVuY2VDbGFzcyg1KSksIHJhbmdlKDEsIDYpKQorCisgICAgICAgIGQgPSB7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcChsYW1iZGEgaywgZD1kOiAoaywgZFtrXSksIGQpLCBkLml0ZW1zKCkpCisgICAgICAgIGRrZXlzID0gZC5rZXlzKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbKGkgPCBsZW4oZCkgYW5kIGRrZXlzW2ldIG9yIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgICAgICAgaSA8IGxlbihkKSBhbmQgZGtleXNbaV0gb3IgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSldCisKKyAgICAgICAgIyBEZXByZWNhdGVkIG1hcChOb25lLCAuLi4pCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAoTm9uZSwgU2VxdWVuY2VDbGFzcyg1KSksIHJhbmdlKDUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAoTm9uZSwgZCksIGQua2V5cygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAoTm9uZSwgZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlQ2xhc3MoNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyKGQuaXRlcmtleXMoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKworICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgICAgIGYud3JpdGUoInh5IiAqIGkgKyAiXG4iKSAjIGxpbmUgaSBoYXMgbGVuIDIqaSsxCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAiciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKGxlbiwgZiksIHJhbmdlKDEsIDIxLCAyKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIFRlc3QgemlwKCkncyB1c2Ugb2YgaXRlcmF0b3JzLgorICAgIGRlZiB0ZXN0X2J1aWx0aW5femlwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoKltdKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKCpbKDEsIDIpLCAnYWInXSksIFsoMSwgJ2EnKSwgKDIsICdiJyldKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgemlwLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHppcCwgcmFuZ2UoMTApLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6aXAsIHJhbmdlKDEwKSwgemlwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKEl0ZXJhdGluZ1NlcXVlbmNlQ2xhc3MoMykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwpLCAoMSwpLCAoMiwpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoU2VxdWVuY2VDbGFzcygzKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygwLCksICgxLCksICgyLCldKQorCisgICAgICAgIGQgPSB7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXRlbXMoKSwgemlwKGQsIGQuaXRlcnZhbHVlcygpKSkKKworICAgICAgICAjIEdlbmVyYXRlIGFsbCBpbnRzIHN0YXJ0aW5nIGF0IGNvbnN0cnVjdG9yIGFyZy4KKyAgICAgICAgY2xhc3MgSW50c0Zyb206CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnQpOgorICAgICAgICAgICAgICAgIHNlbGYuaSA9IHN0YXJ0CisKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgICAgICBpID0gc2VsZi5pCisgICAgICAgICAgICAgICAgc2VsZi5pID0gaSsxCisgICAgICAgICAgICAgICAgcmV0dXJuIGkKKworICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiYVxuIiAiYmJiXG4iICJjY1xuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoSW50c0Zyb20oMCksIGYsIEludHNGcm9tKC0xMDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygwLCAiYVxuIiwgLTEwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgImJiYlxuIiwgLTk5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAiY2NcbiIsIC05OCldKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCh4cmFuZ2UoNSkpLCBbKGksKSBmb3IgaSBpbiByYW5nZSg1KV0pCisKKyAgICAgICAgIyBDbGFzc2VzIHRoYXQgbGllIGFib3V0IHRoZWlyIGxlbmd0aHMuCisgICAgICAgIGNsYXNzIE5vR3Vlc3NMZW41OgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIGlmIGkgPj0gNToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICAgICAgICAgIHJldHVybiBpCisKKyAgICAgICAgY2xhc3MgR3Vlc3MzTGVuNShOb0d1ZXNzTGVuNSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMworCisgICAgICAgIGNsYXNzIEd1ZXNzMzBMZW41KE5vR3Vlc3NMZW41KToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAzMAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEd1ZXNzM0xlbjUoKSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEd1ZXNzMzBMZW41KCkpLCAzMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoTm9HdWVzc0xlbjUoKSksIHppcChyYW5nZSg1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKEd1ZXNzM0xlbjUoKSksIHppcChyYW5nZSg1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKEd1ZXNzMzBMZW41KCkpLCB6aXAocmFuZ2UoNSkpKQorCisgICAgICAgIGV4cGVjdGVkID0gWyhpLCBpKSBmb3IgaSBpbiByYW5nZSg1KV0KKyAgICAgICAgZm9yIHggaW4gTm9HdWVzc0xlbjUoKSwgR3Vlc3MzTGVuNSgpLCBHdWVzczMwTGVuNSgpOgorICAgICAgICAgICAgZm9yIHkgaW4gTm9HdWVzc0xlbjUoKSwgR3Vlc3MzTGVuNSgpLCBHdWVzczMwTGVuNSgpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKHgsIHkpLCBleHBlY3RlZCkKKworICAgICMgVGVzdCByZWR1Y2VzKCkncyB1c2Ugb2YgaXRlcmF0b3JzLgorICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfYnVpbHRpbl9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9idWlsdGluX3JlZHVjZSgpCisKKyAgICBkZWYgX3Rlc3RfYnVpbHRpbl9yZWR1Y2Uoc2VsZik6CisgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGFkZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFNlcXVlbmNlQ2xhc3MoNSkpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBTZXF1ZW5jZUNsYXNzKDUpLCA0MiksIDUyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgYWRkLCBTZXF1ZW5jZUNsYXNzKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFNlcXVlbmNlQ2xhc3MoMCksIDQyKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgU2VxdWVuY2VDbGFzcygxKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgU2VxdWVuY2VDbGFzcygxKSwgNDIpLCA0MikKKworICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBkKSwgIiIuam9pbihkLmtleXMoKSkpCisKKyAgICAjIFRoaXMgdGVzdCBjYXNlIHdpbGwgYmUgcmVtb3ZlZCBpZiB3ZSBkb24ndCBoYXZlIFVuaWNvZGUKKyAgICBkZWYgdGVzdF91bmljb2RlX2pvaW5fZW5kY2FzZShzZWxmKToKKworICAgICAgICAjIFRoaXMgY2xhc3MgaW5zZXJ0cyBhIFVuaWNvZGUgb2JqZWN0IGludG8gaXRzIGFyZ3VtZW50J3MgbmF0dXJhbAorICAgICAgICAjIGl0ZXJhdGlvbiwgaW4gdGhlIDNyZCBwb3NpdGlvbi4KKyAgICAgICAgY2xhc3MgT2hQaG9vZXk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VxKToKKyAgICAgICAgICAgICAgICBzZWxmLml0ID0gaXRlcihzZXEpCisgICAgICAgICAgICAgICAgc2VsZi5pID0gMAorCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgaSA9IHNlbGYuaQorICAgICAgICAgICAgICAgIHNlbGYuaSA9IGkrMQorICAgICAgICAgICAgICAgIGlmIGkgPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUoImZvb2xlZCB5b3UhIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pdC5uZXh0KCkKKworICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiYVxuIiArICJiXG4iICsgImNcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBmID0gb3BlbihURVNURk4sICJyIikKKyAgICAgICAgIyBOYXN0eTogIHN0cmluZy5qb2luKHMpIGNhbid0IGtub3cgd2hldGhlciB1bmljb2RlLmpvaW4oKSBpcyBuZWVkZWQKKyAgICAgICAgIyB1bnRpbCBpdCdzIHNlZW4gYWxsIG9mIHMncyBlbGVtZW50cy4gIEJ1dCBpbiB0aGlzIGNhc2UsIGYncworICAgICAgICAjIGl0ZXJhdG9yIGNhbm5vdCBiZSByZXN0YXJ0ZWQuICBTbyB3aGF0IHdlJ3JlIHRlc3RpbmcgaGVyZSBpcworICAgICAgICAjIHdoZXRoZXIgc3RyaW5nLmpvaW4oKSBjYW4gbWFuYWdlIHRvIHJlbWVtYmVyIGV2ZXJ5dGhpbmcgaXQncyBzZWVuCisgICAgICAgICMgYW5kIHBhc3MgdGhhdCBvbiB0byB1bmljb2RlLmpvaW4oKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ290ID0gIiAtICIuam9pbihPaFBob29leShmKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCB1bmljb2RlKCJhXG4gLSBiXG4gLSBmb29sZWQgeW91ISAtIGNcbiIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICBpZiBub3QgaGF2ZV91bmljb2RlOgorICAgICAgICBkZWYgdGVzdF91bmljb2RlX2pvaW5fZW5kY2FzZShzZWxmKTogcGFzcworCisgICAgIyBUZXN0IGl0ZXJhdG9ycyB3aXRoICd4IGluIHknIGFuZCAneCBub3QgaW4geScuCisgICAgZGVmIHRlc3RfaW5fYW5kX25vdF9pbihzZWxmKToKKyAgICAgICAgZm9yIHNjNSBpbiBJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDUpLCBTZXF1ZW5jZUNsYXNzKDUpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBzYzUpCisgICAgICAgICAgICBmb3IgaSBpbiAiYWJjIiwgLTEsIDUsIDQyLjQyLCAoMywgNCksIFtdLCB7MTogMX0sIDMtMTJqLCBzYzU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihpLCBzYzUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IDMgaW4gMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAzIG5vdCBpbiBtYXApCisKKyAgICAgICAgZCA9IHsib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDMsIDFqOiAyan0KKyAgICAgICAgZm9yIGsgaW4gZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaywgZC5pdGVydmFsdWVzKCkpCisgICAgICAgIGZvciB2IGluIGQudmFsdWVzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIGQuaXRlcnZhbHVlcygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbih2LCBkKQorICAgICAgICBmb3IgaywgdiBpbiBkLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigoaywgdiksIGQuaXRlcml0ZW1zKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCh2LCBrKSwgZC5pdGVyaXRlbXMoKSkKKworICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiYVxuIiAiYlxuIiAiY1xuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGNodW5rIGluICJhYmMiOgorICAgICAgICAgICAgICAgIGYuc2VlaygwLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oY2h1bmssIGYpCisgICAgICAgICAgICAgICAgZi5zZWVrKDAsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigoY2h1bmsgKyAiXG4iKSwgZikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIFRlc3QgaXRlcmF0b3JzIHdpdGggb3BlcmF0b3IuY291bnRPZiAoUHlTZXF1ZW5jZV9Db3VudCkuCisgICAgZGVmIHRlc3RfY291bnRPZihzZWxmKToKKyAgICAgICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgY291bnRPZgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50T2YoWzEsMiwyLDMsMiw1XSwgMiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRPZigoMSwyLDIsMywyLDUpLCAyKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudE9mKCIxMjIzMjUiLCAiMiIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50T2YoIjEyMjMyNSIsICI2IiksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb3VudE9mLCA0MiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb3VudE9mLCBjb3VudE9mLCBjb3VudE9mKQorCisgICAgICAgIGQgPSB7Im9uZSI6IDMsICJ0d28iOiAzLCAidGhyZWUiOiAzLCAxajogMmp9CisgICAgICAgIGZvciBrIGluIGQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50T2YoZCwgayksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRPZihkLml0ZXJ2YWx1ZXMoKSwgMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRPZihkLml0ZXJ2YWx1ZXMoKSwgMmopLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50T2YoZC5pdGVydmFsdWVzKCksIDFqKSwgMCkKKworICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiYVxuIiAiYlxuIiAiY1xuIiAiYlxuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGxldHRlciwgY291bnQgaW4gKCJhIiwgMSksICgiYiIsIDIpLCAoImMiLCAxKSwgKCJkIiwgMCk6CisgICAgICAgICAgICAgICAgZi5zZWVrKDAsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudE9mKGYsIGxldHRlciArICJcbiIpLCBjb3VudCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIFRlc3QgaXRlcmF0b3JzIHdpdGggb3BlcmF0b3IuaW5kZXhPZiAoUHlTZXF1ZW5jZV9JbmRleCkuCisgICAgZGVmIHRlc3RfaW5kZXhPZihzZWxmKToKKyAgICAgICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgaW5kZXhPZgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4T2YoWzEsMiwyLDMsMiw1XSwgMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXhPZigoMSwyLDIsMywyLDUpLCAyKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleE9mKCgxLDIsMiwzLDIsNSksIDMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4T2YoKDEsMiwyLDMsMiw1KSwgNSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGluZGV4T2YsICgxLDIsMiwzLDIsNSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGluZGV4T2YsICgxLDIsMiwzLDIsNSksIDYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleE9mKCIxMjIzMjUiLCAiMiIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4T2YoIjEyMjMyNSIsICI1IiksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGluZGV4T2YsICIxMjIzMjUiLCAiNiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbmRleE9mLCA0MiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbmRleE9mLCBpbmRleE9mLCBpbmRleE9mKQorCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJhXG4iICJiXG4iICJjXG4iICJkXG4iICJlXG4iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaXRlciA9IGl0ZXIoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXhPZihmaXRlciwgImJcbiIpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleE9mKGZpdGVyLCAiZFxuIiksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4T2YoZml0ZXIsICJlXG4iKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGluZGV4T2YsIGZpdGVyLCAiYVxuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWNsYXNzID0gSXRlcmF0aW5nU2VxdWVuY2VDbGFzcygzKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXhPZihpY2xhc3MsIGkpLCBpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbmRleE9mLCBpY2xhc3MsIC0xKQorCisgICAgIyBUZXN0IGl0ZXJhdG9ycyB3aXRoIGZpbGUud3JpdGVsaW5lcygpLgorICAgIGRlZiB0ZXN0X3dyaXRlbGluZXMoc2VsZik6CisgICAgICAgIGYgPSBmaWxlKFRFU1RGTiwgInciKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi53cml0ZWxpbmVzLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLndyaXRlbGluZXMsIDQyKQorCisgICAgICAgICAgICBmLndyaXRlbGluZXMoWyIxXG4iLCAiMlxuIl0pCisgICAgICAgICAgICBmLndyaXRlbGluZXMoKCIzXG4iLCAiNFxuIikpCisgICAgICAgICAgICBmLndyaXRlbGluZXMoeyc1XG4nOiBOb25lfSkKKyAgICAgICAgICAgIGYud3JpdGVsaW5lcyh7fSkKKworICAgICAgICAgICAgIyBUcnkgYSBiaWcgY2h1bmsgdG9vLgorICAgICAgICAgICAgY2xhc3MgSXRlcmF0b3I6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0LCBmaW5pc2gpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0ID0gc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5pc2ggPSBmaW5pc2gKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pID0gc2VsZi5zdGFydAorCisgICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaSA+PSBzZWxmLmZpbmlzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyKHNlbGYuaSkgKyAnXG4nCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgY2xhc3MgV2hhdGV2ZXI6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0LCBmaW5pc2gpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0ID0gc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5pc2ggPSBmaW5pc2gKKworICAgICAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdG9yKHNlbGYuc3RhcnQsIHNlbGYuZmluaXNoKQorCisgICAgICAgICAgICBmLndyaXRlbGluZXMoV2hhdGV2ZXIoNiwgNisyMDAwKSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBmID0gZmlsZShURVNURk4pCisgICAgICAgICAgICBleHBlY3RlZCA9IFtzdHIoaSkgKyAiXG4iIGZvciBpIGluIHJhbmdlKDEsIDIwMDYpXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGYpLCBleHBlY3RlZCkKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworCisgICAgIyBUZXN0IGl0ZXJhdG9ycyBvbiBSSFMgb2YgdW5wYWNraW5nIGFzc2lnbm1lbnRzLgorICAgIGRlZiB0ZXN0X3VucGFja19pdGVyKHNlbGYpOgorICAgICAgICBhLCBiID0gMSwgMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLCBiKSwgKDEsIDIpKQorCisgICAgICAgIGEsIGIsIGMgPSBJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEsIGIsIGMpLCAoMCwgMSwgMikpCisKKyAgICAgICAgdHJ5OiAgICAjIHRvbyBtYW55IHZhbHVlcworICAgICAgICAgICAgYSwgYiA9IEl0ZXJhdGluZ1NlcXVlbmNlQ2xhc3MoMykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBWYWx1ZUVycm9yIikKKworICAgICAgICB0cnk6ICAgICMgbm90IGVub3VnaCB2YWx1ZXMKKyAgICAgICAgICAgIGEsIGIsIGMgPSBJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgVmFsdWVFcnJvciIpCisKKyAgICAgICAgdHJ5OiAgICAjIG5vdCBpdGVyYWJsZQorICAgICAgICAgICAgYSwgYiwgYyA9IGxlbgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgVHlwZUVycm9yIikKKworICAgICAgICBhLCBiLCBjID0gezE6IDQyLCAyOiA0MiwgMzogNDJ9Lml0ZXJ2YWx1ZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLCBiLCBjKSwgKDQyLCA0MiwgNDIpKQorCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInciKQorICAgICAgICBsaW5lcyA9ICgiYVxuIiwgImJiXG4iLCAiY2NjXG4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAiciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEsIGIsIGMgPSBmCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLCBiLCBjKSwgbGluZXMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIChhLCBiKSwgKGMsKSA9IEl0ZXJhdGluZ1NlcXVlbmNlQ2xhc3MoMiksIHs0MjogMjR9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEsIGIsIGMpLCAoMCwgMSwgNDIpKQorCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfcmVmX2NvdW50aW5nX2JlaGF2aW9yKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgY2xzLmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgICAgICAgICBhc3NlcnQgY2xzLmNvdW50ID4gMAorICAgICAgICAgICAgICAgIGNscy5jb3VudCAtPSAxCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmNvdW50LCAxKQorICAgICAgICBkZWwgeAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuY291bnQsIDApCisgICAgICAgIGwgPSBbQygpLCBDKCksIEMoKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmNvdW50LCAzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhLCBiID0gaXRlcihsKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVsIGwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmNvdW50LCAwKQorCisKKyAgICAjIE1ha2Ugc3VyZSBTdG9wSXRlcmF0aW9uIGlzIGEgInNpbmsgc3RhdGUiLgorICAgICMgVGhpcyB0ZXN0cyB2YXJpb3VzIHRoaW5ncyB0aGF0IHdlcmVuJ3Qgc2luayBzdGF0ZXMgaW4gUHl0aG9uIDIuMi4xLAorICAgICMgcGx1cyB2YXJpb3VzIHRoaW5ncyB0aGF0IGFsd2F5cyB3ZXJlIGZpbmUuCisKKyAgICBkZWYgdGVzdF9zaW5rc3RhdGVfbGlzdChzZWxmKToKKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gZmFpbAorICAgICAgICBhID0gcmFuZ2UoNSkKKyAgICAgICAgYiA9IGl0ZXIoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCByYW5nZSg1KSkKKyAgICAgICAgYS5leHRlbmQocmFuZ2UoNSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFtdKQorCisgICAgZGVmIHRlc3Rfc2lua3N0YXRlX3R1cGxlKHNlbGYpOgorICAgICAgICBhID0gKDAsIDEsIDIsIDMsIDQpCisgICAgICAgIGIgPSBpdGVyKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgcmFuZ2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgW10pCisKKyAgICBkZWYgdGVzdF9zaW5rc3RhdGVfc3RyaW5nKHNlbGYpOgorICAgICAgICBhID0gImFiY2RlIgorICAgICAgICBiID0gaXRlcihhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFsnYScsICdiJywgJ2MnLCAnZCcsICdlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgW10pCisKKyAgICBkZWYgdGVzdF9zaW5rc3RhdGVfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgICMgVGhpcyB1c2VkIHRvIGZhaWwKKyAgICAgICAgYSA9IFNlcXVlbmNlQ2xhc3MoNSkKKyAgICAgICAgYiA9IGl0ZXIoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCByYW5nZSg1KSkKKyAgICAgICAgYS5uID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBbXSkKKworICAgIGRlZiB0ZXN0X3NpbmtzdGF0ZV9jYWxsYWJsZShzZWxmKToKKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gZmFpbAorICAgICAgICBkZWYgc3BhbShzdGF0ZT1bMF0pOgorICAgICAgICAgICAgaSA9IHN0YXRlWzBdCisgICAgICAgICAgICBzdGF0ZVswXSA9IGkrMQorICAgICAgICAgICAgaWYgaSA9PSAxMDoKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvciwgInNob3VsZG4ndCBoYXZlIGdvdHRlbiB0aGlzIGZhciIKKyAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIGIgPSBpdGVyKHNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgcmFuZ2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgW10pCisKKyAgICBkZWYgdGVzdF9zaW5rc3RhdGVfZGljdChzZWxmKToKKyAgICAgICAgIyBYWFggRm9yIGEgbW9yZSB0aG9yb3VnaCB0ZXN0LCBzZWUgdG93YXJkcyB0aGUgZW5kIG9mOgorICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwMi1KdWx5LzAyNjUxMi5odG1sCisgICAgICAgIGEgPSB7MToxLCAyOjIsIDA6MCwgNDo0LCAzOjN9CisgICAgICAgIGZvciBiIGluIGl0ZXIoYSksIGEuaXRlcmtleXMoKSwgYS5pdGVyaXRlbXMoKSwgYS5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICBiID0gaXRlcihhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdChiKSksIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFtdKQorCisgICAgZGVmIHRlc3Rfc2lua3N0YXRlX3lpZWxkKHNlbGYpOgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgIGIgPSBnZW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIHJhbmdlKDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFtdKQorCisgICAgZGVmIHRlc3Rfc2lua3N0YXRlX3JhbmdlKHNlbGYpOgorICAgICAgICBhID0geHJhbmdlKDUpCisgICAgICAgIGIgPSBpdGVyKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgcmFuZ2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgW10pCisKKyAgICBkZWYgdGVzdF9zaW5rc3RhdGVfZW51bWVyYXRlKHNlbGYpOgorICAgICAgICBhID0gcmFuZ2UoNSkKKyAgICAgICAgZSA9IGVudW1lcmF0ZShhKQorICAgICAgICBiID0gaXRlcihlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIHppcChyYW5nZSg1KSwgcmFuZ2UoNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFtdKQorCisgICAgZGVmIHRlc3RfMzcyMChzZWxmKToKKyAgICAgICAgIyBBdm9pZCBhIGNyYXNoLCB3aGVuIGFuIGl0ZXJhdG9yIGRlbGV0ZXMgaXRzIG5leHQoKSBtZXRob2QuCisgICAgICAgIGNsYXNzIEJhZEl0ZXJhdG9yKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgIGRlbCBCYWRJdGVyYXRvci5uZXh0CisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiBCYWRJdGVyYXRvcigpIDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9leHRlbmRpbmdfbGlzdF93aXRoX2l0ZXJhdG9yX2RvZXNfbm90X3NlZ2ZhdWx0KHNlbGYpOgorICAgICAgICAjIFRoZSBjb2RlIHRvIGV4dGVuZCBhIGxpc3Qgd2l0aCBhbiBpdGVyYXRvciBoYXMgYSBmYWlyCisgICAgICAgICMgYW1vdW50IG9mIG5vbnRyaXZpYWwgbG9naWMgaW4gdGVybXMgb2YgZ3Vlc3NpbmcgaG93CisgICAgICAgICMgbXVjaCBtZW1vcnkgdG8gYWxsb2NhdGUgaW4gYWR2YW5jZSwgInN0ZWFsaW5nIiByZWZzLAorICAgICAgICAjIGFuZCB0aGVuIHNocmlua2luZyBhdCB0aGUgZW5kLiAgVGhpcyBpcyBhIGJhc2ljIHNtb2tlCisgICAgICAgICMgdGVzdCBmb3IgdGhhdCBzY2VuYXJpby4KKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNTAwKToKKyAgICAgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgIGxzdCA9IFswXSAqIDUwMAorICAgICAgICBmb3IgaSBpbiByYW5nZSgyNDApOgorICAgICAgICAgICAgbHN0LnBvcCgwKQorICAgICAgICBsc3QuZXh0ZW5kKGdlbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCA3NjApCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGY0M2M3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQpAQCAtMCwwICsxLDI1NyBAQAorIiIiIFRlc3QgSXRlcmF0b3IgTGVuZ3RoIFRyYW5zcGFyZW5jeQorCitTb21lIGZ1bmN0aW9ucyBvciBtZXRob2RzIHdoaWNoIGFjY2VwdCBnZW5lcmFsIGl0ZXJhYmxlIGFyZ3VtZW50cyBoYXZlCitvcHRpb25hbCwgbW9yZSBlZmZpY2llbnQgY29kZSBwYXRocyBpZiB0aGV5IGtub3cgaG93IG1hbnkgaXRlbXMgdG8gZXhwZWN0LgorRm9yIGluc3RhbmNlLCBtYXAoZnVuYywgaXRlcmFibGUpLCB3aWxsIHByZS1hbGxvY2F0ZSB0aGUgZXhhY3QgYW1vdW50IG9mCitzcGFjZSByZXF1aXJlZCB3aGVuZXZlciB0aGUgaXRlcmFibGUgY2FuIHJlcG9ydCBpdHMgbGVuZ3RoLgorCitUaGUgZGVzaXJlZCBpbnZhcmlhbnQgaXM6ICBsZW4oaXQpPT1sZW4obGlzdChpdCkpLgorCitBIGNvbXBsaWNhdGlvbiBpcyB0aGF0IGFuIGl0ZXJhYmxlIGFuZCBpdGVyYXRvciBjYW4gYmUgdGhlIHNhbWUgb2JqZWN0LiBUbworbWFpbnRhaW4gdGhlIGludmFyaWFudCwgYW4gaXRlcmF0b3IgbmVlZHMgdG8gZHluYW1pY2FsbHkgdXBkYXRlIGl0cyBsZW5ndGguCitGb3IgaW5zdGFuY2UsIGFuIGl0ZXJhYmxlIHN1Y2ggYXMgeHJhbmdlKDEwKSBhbHdheXMgcmVwb3J0cyBpdHMgbGVuZ3RoIGFzIHRlbiwKK2J1dCBpdD1pdGVyKHhyYW5nZSgxMCkpIHN0YXJ0cyBhdCB0ZW4sIGFuZCB0aGVuIGdvZXMgdG8gbmluZSBhZnRlciBpdC5uZXh0KCkuCitIYXZpbmcgdGhpcyBjYXBhYmlsaXR5IG1lYW5zIHRoYXQgbWFwKCkgY2FuIGlnbm9yZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbgorbWFwKGZ1bmMsIGl0ZXJhYmxlKSBhbmQgbWFwKGZ1bmMsIGl0ZXIoaXRlcmFibGUpKS4KKworV2hlbiB0aGUgaXRlcmFibGUgaXMgaW1tdXRhYmxlLCB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN0cmFpZ2h0LWZvcndhcmRseQorcmVwb3J0IHRoZSBvcmlnaW5hbCBsZW5ndGggbWludXMgdGhlIGN1bXVsYXRpdmUgbnVtYmVyIG9mIGNhbGxzIHRvIG5leHQoKS4KK1RoaXMgaXMgdGhlIGNhc2UgZm9yIHR1cGxlcywgeHJhbmdlIG9iamVjdHMsIGFuZCBpdGVydG9vbHMucmVwZWF0KCkuCisKK1NvbWUgY29udGFpbmVycyBiZWNvbWUgdGVtcG9yYXJpbHkgaW1tdXRhYmxlIGR1cmluZyBpdGVyYXRpb24uICBUaGlzIGluY2x1ZGVzCitkaWN0cywgc2V0cywgYW5kIGNvbGxlY3Rpb25zLmRlcXVlLiAgVGhlaXIgaW1wbGVtZW50YXRpb24gaXMgZXF1YWxseSBzaW1wbGUKK3Rob3VnaCB0aGV5IG5lZWQgdG8gcGVybWFuZW50bHkgc2V0IHRoZWlyIGxlbmd0aCB0byB6ZXJvIHdoZW5ldmVyIHRoZXJlIGlzCithbiBhdHRlbXB0IHRvIGl0ZXJhdGUgYWZ0ZXIgYSBsZW5ndGggbXV0YXRpb24uCisKK1RoZSBzaXR1YXRpb24gc2xpZ2h0bHkgbW9yZSBpbnZvbHZlZCB3aGVuZXZlciBhbiBvYmplY3QgYWxsb3dzIGxlbmd0aCBtdXRhdGlvbgorZHVyaW5nIGl0ZXJhdGlvbi4gIExpc3RzIGFuZCBzZXF1ZW5jZSBpdGVyYXRvcnMgYXJlIGR5bmFtaWNhbGx5IHVwZGF0YWJsZS4KK1NvLCBpZiBhIGxpc3QgaXMgZXh0ZW5kZWQgZHVyaW5nIGl0ZXJhdGlvbiwgdGhlIGl0ZXJhdG9yIHdpbGwgY29udGludWUgdGhyb3VnaAordGhlIG5ldyBpdGVtcy4gIElmIGl0IHNocmlua3MgdG8gYSBwb2ludCBiZWZvcmUgdGhlIG1vc3QgcmVjZW50IGl0ZXJhdGlvbiwKK3RoZW4gbm8gZnVydGhlciBpdGVtcyBhcmUgYXZhaWxhYmxlIGFuZCB0aGUgbGVuZ3RoIGlzIHJlcG9ydGVkIGF0IHplcm8uCisKK1JldmVyc2VkIG9iamVjdHMgY2FuIGFsc28gYmUgd3JhcHBlZCBhcm91bmQgbXV0YWJsZSBvYmplY3RzOyBob3dldmVyLCBhbnkKK2FwcGVuZHMgYWZ0ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24gYXJlIGlnbm9yZWQuICBBbnkgb3RoZXIgYXBwcm9hY2ggbGVhZHMKK3RvIGNvbmZ1c2lvbiBhbmQgcG9zc2libHkgcmV0dXJuaW5nIHRoZSBzYW1lIGl0ZW0gbW9yZSB0aGFuIG9uY2UuCisKK1RoZSBpdGVyYXRvcnMgbm90IGxpc3RlZCBhYm92ZSwgc3VjaCBhcyBlbnVtZXJhdGUgYW5kIHRoZSBvdGhlciBpdGVydG9vbHMsCithcmUgbm90IGxlbmd0aCB0cmFuc3BhcmVudCBiZWNhdXNlIHRoZXkgaGF2ZSBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgoraXRlcmFibGVzIHRoYXQgcmVwb3J0IHN0YXRpYyBsZW5ndGggYW5kIGl0ZXJhdG9ycyB3aG9zZSBsZW5ndGggY2hhbmdlcyB3aXRoCitlYWNoIGNhbGwgKGkuZS4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBlbnVtZXJhdGUoJ2FiYycpIGFuZAorZW51bWVyYXRlKGl0ZXIoJ2FiYycpKS4KKworIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCByZXBlYXQKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCitmcm9tIF9fYnVpbHRpbl9fIGltcG9ydCBsZW4gYXMgX2xlbgorCituID0gMTAKKworZGVmIGxlbihvYmopOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIF9sZW4ob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgbm90ZTogdGhpcyBpcyBhbiBpbnRlcm5hbCB1bmRvY3VtZW50ZWQgQVBJLAorICAgICAgICAgICAgIyBkb24ndCByZWx5IG9uIGl0IGluIHlvdXIgb3duIHByb2dyYW1zCisgICAgICAgICAgICByZXR1cm4gb2JqLl9fbGVuZ3RoX2hpbnRfXygpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorCitjbGFzcyBUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbnZhcmlhbnQoc2VsZik6CisgICAgICAgIGl0ID0gc2VsZi5pdAorICAgICAgICBmb3IgaSBpbiByZXZlcnNlZCh4cmFuZ2UoMSwgbisxKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIGkpCisgICAgICAgICAgICBpdC5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBpdC5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisKK2NsYXNzIFRlc3RUZW1wb3JhcmlseUltbXV0YWJsZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucyk6CisKKyAgICBkZWYgdGVzdF9pbW11dGFibGVfZHVyaW5nX2l0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgIyBvYmplY3RzIHN1Y2ggYXMgZGVxdWVzLCBzZXRzLCBhbmQgZGljdGlvbmFyaWVzIGVuZm9yY2UKKyAgICAgICAgIyBsZW5ndGggaW1tdXRhYmlsaXR5ICBkdXJpbmcgaXRlcmF0aW9uCisKKyAgICAgICAgaXQgPSBzZWxmLml0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbikKKyAgICAgICAgaXQubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0xKQorICAgICAgICBzZWxmLm11dGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgaXQubmV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorCisjIyAtLS0tLS0tIENvbmNyZXRlIFR5cGUgVGVzdHMgLS0tLS0tLQorCitjbGFzcyBUZXN0UmVwZWF0KFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5pdCA9IHJlcGVhdChOb25lLCBuKQorCisgICAgZGVmIHRlc3Rfbm9fbGVuX2Zvcl9pbmZpbml0ZV9yZXBlYXQoc2VsZik6CisgICAgICAgICMgVGhlIHJlcGVhdCgpIG9iamVjdCBjYW4gYWxzbyBiZSBpbmZpbml0ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgcmVwZWF0KE5vbmUpKQorCitjbGFzcyBUZXN0WHJhbmdlKFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5pdCA9IGl0ZXIoeHJhbmdlKG4pKQorCitjbGFzcyBUZXN0WHJhbmdlQ3VzdG9tUmV2ZXJzZWQoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLml0ID0gcmV2ZXJzZWQoeHJhbmdlKG4pKQorCitjbGFzcyBUZXN0VHVwbGUoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLml0ID0gaXRlcih0dXBsZSh4cmFuZ2UobikpKQorCisjIyAtLS0tLS0tIFR5cGVzIHRoYXQgc2hvdWxkIG5vdCBiZSBtdXRhdGVkIGR1cmluZyBpdGVyYXRpb24gLS0tLS0tLQorCitjbGFzcyBUZXN0RGVxdWUoVGVzdFRlbXBvcmFyaWx5SW1tdXRhYmxlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKHhyYW5nZShuKSkKKyAgICAgICAgc2VsZi5pdCA9IGl0ZXIoZCkKKyAgICAgICAgc2VsZi5tdXRhdGUgPSBkLnBvcAorCitjbGFzcyBUZXN0RGVxdWVSZXZlcnNlZChUZXN0VGVtcG9yYXJpbHlJbW11dGFibGUpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoeHJhbmdlKG4pKQorICAgICAgICBzZWxmLml0ID0gcmV2ZXJzZWQoZCkKKyAgICAgICAgc2VsZi5tdXRhdGUgPSBkLnBvcAorCitjbGFzcyBUZXN0RGljdEtleXMoVGVzdFRlbXBvcmFyaWx5SW1tdXRhYmxlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZCA9IGRpY3QuZnJvbWtleXMoeHJhbmdlKG4pKQorICAgICAgICBzZWxmLml0ID0gaXRlcihkKQorICAgICAgICBzZWxmLm11dGF0ZSA9IGQucG9waXRlbQorCitjbGFzcyBUZXN0RGljdEl0ZW1zKFRlc3RUZW1wb3JhcmlseUltbXV0YWJsZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGQgPSBkaWN0LmZyb21rZXlzKHhyYW5nZShuKSkKKyAgICAgICAgc2VsZi5pdCA9IGQuaXRlcml0ZW1zKCkKKyAgICAgICAgc2VsZi5tdXRhdGUgPSBkLnBvcGl0ZW0KKworY2xhc3MgVGVzdERpY3RWYWx1ZXMoVGVzdFRlbXBvcmFyaWx5SW1tdXRhYmxlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZCA9IGRpY3QuZnJvbWtleXMoeHJhbmdlKG4pKQorICAgICAgICBzZWxmLml0ID0gZC5pdGVydmFsdWVzKCkKKyAgICAgICAgc2VsZi5tdXRhdGUgPSBkLnBvcGl0ZW0KKworY2xhc3MgVGVzdFNldChUZXN0VGVtcG9yYXJpbHlJbW11dGFibGUpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkID0gc2V0KHhyYW5nZShuKSkKKyAgICAgICAgc2VsZi5pdCA9IGl0ZXIoZCkKKyAgICAgICAgc2VsZi5tdXRhdGUgPSBkLnBvcAorCisjIyAtLS0tLS0tIFR5cGVzIHRoYXQgY2FuIG11dGF0ZSBkdXJpbmcgaXRlcmF0aW9uIC0tLS0tLS0KKworY2xhc3MgVGVzdExpc3QoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLml0ID0gaXRlcihyYW5nZShuKSkKKworICAgIGRlZiB0ZXN0X211dGF0aW9uKHNlbGYpOgorICAgICAgICBkID0gcmFuZ2UobikKKyAgICAgICAgaXQgPSBpdGVyKGQpCisgICAgICAgIGl0Lm5leHQoKQorICAgICAgICBpdC5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTIpCisgICAgICAgIGQuYXBwZW5kKG4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0xKSAgIyBncm93IHdpdGggYXBwZW5kCisgICAgICAgIGRbMTpdID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKKyAgICAgICAgZC5leHRlbmQoeHJhbmdlKDIwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorCitjbGFzcyBUZXN0TGlzdFJldmVyc2VkKFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5pdCA9IHJldmVyc2VkKHJhbmdlKG4pKQorCisgICAgZGVmIHRlc3RfbXV0YXRpb24oc2VsZik6CisgICAgICAgIGQgPSByYW5nZShuKQorICAgICAgICBpdCA9IHJldmVyc2VkKGQpCisgICAgICAgIGl0Lm5leHQoKQorICAgICAgICBpdC5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTIpCisgICAgICAgIGQuYXBwZW5kKG4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKSAgIyBpZ25vcmUgYXBwZW5kCisgICAgICAgIGRbMTpdID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkgICMgY29uZmlybSBpbnZhcmlhbnQKKyAgICAgICAgZC5leHRlbmQoeHJhbmdlKDIwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorCisjIyAtLSBDaGVjayB0byBtYWtlIHN1cmUgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgYnkgX19sZW5ndGhfaGludF9fKCkKKworCitjbGFzcyBCYWRMZW4ob2JqZWN0KToKKyAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdoZWxsbycpCisKK2NsYXNzIEJhZExlbmd0aEhpbnQob2JqZWN0KToKKyAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2hlbGxvJykKKworY2xhc3MgTm9uZUxlbmd0aEhpbnQob2JqZWN0KToKKyAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCitjbGFzcyBUZXN0TGVuZ3RoSGludEV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaXNzdWUxMjQyNjU3KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxpc3QsIEJhZExlbigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxpc3QsIEJhZExlbmd0aEhpbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBbXS5leHRlbmQsIEJhZExlbigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIFtdLmV4dGVuZCwgQmFkTGVuZ3RoSGludCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcCwgQmFkTGVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwLCBCYWRMZW5ndGhIaW50KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZmlsdGVyLCBOb25lLCBCYWRMZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmaWx0ZXIsIE5vbmUsIEJhZExlbmd0aEhpbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBtYXAsIGNociwgQmFkTGVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbWFwLCBjaHIsIEJhZExlbmd0aEhpbnQoKSkKKyAgICAgICAgYiA9IGJ5dGVhcnJheShyYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgYi5leHRlbmQsIEJhZExlbigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGIuZXh0ZW5kLCBCYWRMZW5ndGhIaW50KCkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2hpbnQoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGFuIGludmFsaWQgcmVzdWx0IGRvZXNuJ3QgbXVjay11cCB0aGUgd29ya3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE5vbmVMZW5ndGhIaW50KCkpLCBsaXN0KHJhbmdlKDEwKSkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHVuaXR0ZXN0cyA9IFsKKyAgICAgICAgVGVzdFJlcGVhdCwKKyAgICAgICAgVGVzdFhyYW5nZSwKKyAgICAgICAgVGVzdFhyYW5nZUN1c3RvbVJldmVyc2VkLAorICAgICAgICBUZXN0VHVwbGUsCisgICAgICAgIFRlc3REZXF1ZSwKKyAgICAgICAgVGVzdERlcXVlUmV2ZXJzZWQsCisgICAgICAgIFRlc3REaWN0S2V5cywKKyAgICAgICAgVGVzdERpY3RJdGVtcywKKyAgICAgICAgVGVzdERpY3RWYWx1ZXMsCisgICAgICAgIFRlc3RTZXQsCisgICAgICAgIFRlc3RMaXN0LAorICAgICAgICBUZXN0TGlzdFJldmVyc2VkLAorICAgICAgICBUZXN0TGVuZ3RoSGludEV4Y2VwdGlvbnMsCisgICAgXQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnVuaXR0ZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOWY0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKQEAgLTAsMCArMSwxNjY1IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIGl0ZXJ0b29scyBpbXBvcnQgKgorZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQorZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCitmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24KK2ltcG9ydCBzeXMKK2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IHJhbmRvbQoraW1wb3J0IGNvcHkKK2ltcG9ydCBwaWNrbGUKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK21heHNpemUgPSB0ZXN0X3N1cHBvcnQuTUFYX1B5X3NzaXplX3QKK21pbnNpemUgPSAtbWF4c2l6ZS0xCisKK2RlZiBvbmVhcmcoeCk6CisgICAgJ1Rlc3QgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50JworICAgIHJldHVybiAyKngKKworZGVmIGVycmZ1bmMoKmFyZ3MpOgorICAgICdUZXN0IGZ1bmN0aW9uIHRoYXQgcmFpc2VzIGFuIGVycm9yJworICAgIHJhaXNlIFZhbHVlRXJyb3IKKworZGVmIGdlbjMoKToKKyAgICAnTm9uLXJlc3RhcnRhYmxlIHNvdXJjZSBzZXF1ZW5jZScKKyAgICBmb3IgaSBpbiAoMCwgMSwgMik6CisgICAgICAgIHlpZWxkIGkKKworZGVmIGlzRXZlbih4KToKKyAgICAnVGVzdCBwcmVkaWNhdGUnCisgICAgcmV0dXJuIHglMj09MAorCitkZWYgaXNPZGQoeCk6CisgICAgJ1Rlc3QgcHJlZGljYXRlJworICAgIHJldHVybiB4JTI9PTEKKworY2xhc3MgU3RvcE5vdzoKKyAgICAnQ2xhc3MgZW11bGF0aW5nIGFuIGVtcHR5IGl0ZXJhYmxlLicKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworZGVmIHRha2Uobiwgc2VxKToKKyAgICAnQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHBhcnRpYWxseSBjb25zdW1pbmcgYSBsb25nIG9mIGluZmluaXRlIGl0ZXJhYmxlJworICAgIHJldHVybiBsaXN0KGlzbGljZShzZXEsIG4pKQorCitkZWYgcHJvZChpdGVyYWJsZSk6CisgICAgcmV0dXJuIHJlZHVjZShvcGVyYXRvci5tdWwsIGl0ZXJhYmxlLCAxKQorCitkZWYgZmFjdChuKToKKyAgICAnRmFjdG9yaWFsJworICAgIHJldHVybiBwcm9kKHJhbmdlKDEsIG4rMSkpCisKK2NsYXNzIFRlc3RCYXNpY09wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY2hhaW4oc2VsZik6CisKKyAgICAgICAgZGVmIGNoYWluMigqaXRlcmFibGVzKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiB2ZXJzaW9uIGluIHRoZSBkb2NzJworICAgICAgICAgICAgZm9yIGl0IGluIGl0ZXJhYmxlczoKKyAgICAgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBpdDoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbWVudAorCisgICAgICAgIGZvciBjIGluIChjaGFpbiwgY2hhaW4yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjKCdhYmMnLCAnZGVmJykpLCBsaXN0KCdhYmNkZWYnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjKCdhYmMnKSksIGxpc3QoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMoJycpKSwgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoNCwgYygnYWJjJywgJ2RlZicpKSwgbGlzdCgnYWJjZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LGMoMiwgMykpCisKKyAgICBkZWYgdGVzdF9jaGFpbl9mcm9tX2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY2hhaW4uZnJvbV9pdGVyYWJsZShbJ2FiYycsICdkZWYnXSkpLCBsaXN0KCdhYmNkZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNoYWluLmZyb21faXRlcmFibGUoWydhYmMnXSkpLCBsaXN0KCdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNoYWluLmZyb21faXRlcmFibGUoWycnXSkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDQsIGNoYWluLmZyb21faXRlcmFibGUoWydhYmMnLCAnZGVmJ10pKSwgbGlzdCgnYWJjZCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGNoYWluLmZyb21faXRlcmFibGUoWzIsIDNdKSkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5hdGlvbnMsICdhYmMnKSAgICAgICAjIG1pc3NpbmcgciBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmF0aW9ucywgJ2FiYycsIDIsIDEpICMgdG9vIG1hbnkgYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tYmluYXRpb25zLCBOb25lKSAgICAgICAgIyBwb29sIGlzIG5vdCBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21iaW5hdGlvbnMsICdhYmMnLCAtMikgICMgciBpcyBuZWdhdGl2ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tYmluYXRpb25zKCdhYmMnLCAzMikpLCBbXSkgICAgICMgciA+IG4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbWJpbmF0aW9ucyhyYW5nZSg0KSwgMykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwxLDIpLCAoMCwxLDMpLCAoMCwyLDMpLCAoMSwyLDMpXSkKKworICAgICAgICBkZWYgY29tYmluYXRpb25zMShpdGVyYWJsZSwgcik6CisgICAgICAgICAgICAnUHVyZSBweXRob24gdmVyc2lvbiBzaG93biBpbiB0aGUgZG9jcycKKyAgICAgICAgICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKKyAgICAgICAgICAgIG4gPSBsZW4ocG9vbCkKKyAgICAgICAgICAgIGlmIHIgPiBuOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaW5kaWNlcyA9IHJhbmdlKHIpCisgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKHIpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5kaWNlc1tpXSAhPSBpICsgbiAtIHI6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGluZGljZXNbaV0gKz0gMQorICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGkrMSwgcik6CisgICAgICAgICAgICAgICAgICAgIGluZGljZXNbal0gPSBpbmRpY2VzW2otMV0gKyAxCisgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCisgICAgICAgIGRlZiBjb21iaW5hdGlvbnMyKGl0ZXJhYmxlLCByKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiB2ZXJzaW9uIHNob3duIGluIHRoZSBkb2NzJworICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgZm9yIGluZGljZXMgaW4gcGVybXV0YXRpb25zKHJhbmdlKG4pLCByKToKKyAgICAgICAgICAgICAgICBpZiBzb3J0ZWQoaW5kaWNlcykgPT0gbGlzdChpbmRpY2VzKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCisgICAgICAgIGRlZiBjb21iaW5hdGlvbnMzKGl0ZXJhYmxlLCByKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiB2ZXJzaW9uIGZyb20gY3dyKCknCisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICBmb3IgaW5kaWNlcyBpbiBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChyYW5nZShuKSwgcik6CisgICAgICAgICAgICAgICAgaWYgbGVuKHNldChpbmRpY2VzKSkgPT0gcjoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCisgICAgICAgIGZvciBuIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgdmFsdWVzID0gWzUqeC0xMiBmb3IgeCBpbiByYW5nZShuKV0KKyAgICAgICAgICAgIGZvciByIGluIHJhbmdlKG4rMik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGlzdChjb21iaW5hdGlvbnModmFsdWVzLCByKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAwIGlmIHI+biBlbHNlIGZhY3QobikgLy8gZmFjdChyKSAvLyBmYWN0KG4tcikpICMgcmlnaHQgbnVtYmVyIG9mIGNvbWJzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgbGVuKHNldChyZXN1bHQpKSkgICAgICAgICAjIG5vIHJlcGVhdHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc29ydGVkKHJlc3VsdCkpICAgICAgICAgICAgICAgICMgbGV4aWNvZ3JhcGhpYyBvcmRlcgorICAgICAgICAgICAgICAgIGZvciBjIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIHIpICAgICAgICAgICAgICAgICAgICAgICAgICMgci1sZW5ndGggY29tYmluYXRpb25zCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChjKSksIHIpICAgICAgICAgICAgICAgICAgICAjIG5vIGR1cGxpY2F0ZSBlbGVtZW50cworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYyksIHNvcnRlZChjKSkgICAgICAgICAgICAgICAgIyBrZWVwIG9yaWdpbmFsIG9yZGVyaW5nCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwoZSBpbiB2YWx1ZXMgZm9yIGUgaW4gYykpICAgICAgICAgICAjIGVsZW1lbnRzIHRha2VuIGZyb20gaW5wdXQgaXRlcmFibGUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlIGZvciBlIGluIHZhbHVlcyBpZiBlIGluIGNdKSAgICAgICMgY29tYiBpcyBhIHN1YnNlcXVlbmNlIG9mIHRoZSBpbnB1dCBpdGVyYWJsZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGNvbWJpbmF0aW9uczEodmFsdWVzLCByKSkpICMgbWF0Y2hlcyBmaXJzdCBwdXJlIHB5dGhvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QoY29tYmluYXRpb25zMih2YWx1ZXMsIHIpKSkgIyBtYXRjaGVzIHNlY29uZCBwdXJlIHB5dGhvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QoY29tYmluYXRpb25zMyh2YWx1ZXMsIHIpKSkgIyBtYXRjaGVzIHNlY29uZCBwdXJlIHB5dGhvbiB2ZXJzaW9uCisKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0dXBsZSByZXVzZSBpcyBzcGVjaWZpYyB0byBDUHl0aG9uIikKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfdHVwbGVfcmV1c2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChtYXAoaWQsIGNvbWJpbmF0aW9ucygnYWJjZGUnLCAzKSkpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsZW4oc2V0KG1hcChpZCwgbGlzdChjb21iaW5hdGlvbnMoJ2FiY2RlJywgMykpKSkpLCAxKQorCisgICAgZGVmIHRlc3RfY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoc2VsZik6CisgICAgICAgIGN3ciA9IGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3dyLCAnYWJjJykgICAgICAgIyBtaXNzaW5nIHIgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjd3IsICdhYmMnLCAyLCAxKSAjIHRvbyBtYW55IGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN3ciwgTm9uZSkgICAgICAgICMgcG9vbCBpcyBub3QgaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3dyLCAnYWJjJywgLTIpICAjIHIgaXMgbmVnYXRpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGN3cignQUJDJywgMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ0EnLCdBJyksICgnQScsJ0InKSwgKCdBJywnQycpLCAoJ0InLCdCJyksICgnQicsJ0MnKSwgKCdDJywnQycpXSkKKworICAgICAgICBkZWYgY3dyMShpdGVyYWJsZSwgcik6CisgICAgICAgICAgICAnUHVyZSBweXRob24gdmVyc2lvbiBzaG93biBpbiB0aGUgZG9jcycKKyAgICAgICAgICAgICMgbnVtYmVyIGl0ZW1zIHJldHVybmVkOiAgKG4rci0xKSEgLyByISAvIChuLTEpISB3aGVuIG4+MAorICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgaWYgbm90IG4gYW5kIHI6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpbmRpY2VzID0gWzBdICogcgorICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShyKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGluZGljZXNbaV0gIT0gbiAtIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGluZGljZXNbaTpdID0gW2luZGljZXNbaV0gKyAxXSAqIChyIC0gaSkKKyAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisKKyAgICAgICAgZGVmIGN3cjIoaXRlcmFibGUsIHIpOgorICAgICAgICAgICAgJ1B1cmUgcHl0aG9uIHZlcnNpb24gc2hvd24gaW4gdGhlIGRvY3MnCisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICBmb3IgaW5kaWNlcyBpbiBwcm9kdWN0KHJhbmdlKG4pLCByZXBlYXQ9cik6CisgICAgICAgICAgICAgICAgaWYgc29ydGVkKGluZGljZXMpID09IGxpc3QoaW5kaWNlcyk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKworICAgICAgICBkZWYgbnVtY29tYnMobiwgcik6CisgICAgICAgICAgICBpZiBub3QgbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMCBpZiByIGVsc2UgMQorICAgICAgICAgICAgcmV0dXJuIGZhY3QobityLTEpIC8vIGZhY3QocikgLy8gZmFjdChuLTEpCisKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoNyk6CisgICAgICAgICAgICB2YWx1ZXMgPSBbNSp4LTEyIGZvciB4IGluIHJhbmdlKG4pXQorICAgICAgICAgICAgZm9yIHIgaW4gcmFuZ2UobisyKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBsaXN0KGN3cih2YWx1ZXMsIHIpKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgbnVtY29tYnMobiwgcikpICAgICAgICAgICAjIHJpZ2h0IG51bWJlciBvZiBjb21icworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIGxlbihzZXQocmVzdWx0KSkpICAgICAgICAgIyBubyByZXBlYXRzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNvcnRlZChyZXN1bHQpKSAgICAgICAgICAgICAgICAjIGxleGljb2dyYXBoaWMgb3JkZXIKKworICAgICAgICAgICAgICAgIHJlZ3VsYXJfY29tYnMgPSBsaXN0KGNvbWJpbmF0aW9ucyh2YWx1ZXMsIHIpKSAgICAgICAgICAgIyBjb21wYXJlIHRvIGNvbWJzIHdpdGhvdXQgcmVwbGFjZW1lbnQKKyAgICAgICAgICAgICAgICBpZiBuID09IDAgb3IgciA8PSAxOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgcmVndWxhcl9jb21icykgICAgICAgICAgICAjIGNhc2VzIHRoYXQgc2hvdWxkIGJlIGlkZW50aWNhbAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQocmVzdWx0KSA+PSBzZXQocmVndWxhcl9jb21icykpICAgICAjIHJlc3Qgc2hvdWxkIGJlIHN1cGVyc2V0cyBvZiByZWd1bGFyIGNvbWJzCisKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCByKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHItbGVuZ3RoIGNvbWJpbmF0aW9ucworICAgICAgICAgICAgICAgICAgICBub3J1bnMgPSBbayBmb3Igayx2IGluIGdyb3VwYnkoYyldICAgICAgICAgICAgICAgICAgIyBjb21ibyB3aXRob3V0IGNvbnNlY3V0aXZlIHJlcGVhdHMKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obm9ydW5zKSwgbGVuKHNldChub3J1bnMpKSkgICAgICMgbm8gcmVwZWF0cyBvdGhlciB0aGFuIGNvbnNlY3V0aXZlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjKSwgc29ydGVkKGMpKSAgICAgICAgICAgICAgICAjIGtlZXAgb3JpZ2luYWwgb3JkZXJpbmcKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbChlIGluIHZhbHVlcyBmb3IgZSBpbiBjKSkgICAgICAgICAgICMgZWxlbWVudHMgdGFrZW4gZnJvbSBpbnB1dCBpdGVyYWJsZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vcnVucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZSBmb3IgZSBpbiB2YWx1ZXMgaWYgZSBpbiBjXSkgICAgICMgY29tYiBpcyBhIHN1YnNlcXVlbmNlIG9mIHRoZSBpbnB1dCBpdGVyYWJsZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGN3cjEodmFsdWVzLCByKSkpICAgICAgICAgIyBtYXRjaGVzIGZpcnN0IHB1cmUgcHl0aG9uIHZlcnNpb24KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChjd3IyKHZhbHVlcywgcikpKSAgICAgICAgICMgbWF0Y2hlcyBzZWNvbmQgcHVyZSBweXRob24gdmVyc2lvbgorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidHVwbGUgcmV1c2UgaXMgc3BlY2lmaWMgdG8gQ1B5dGhvbiIpCisgICAgZGVmIHRlc3RfY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnRfdHVwbGVfcmV1c2Uoc2VsZik6CisgICAgICAgIGN3ciA9IGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChtYXAoaWQsIGN3cignYWJjZGUnLCAzKSkpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsZW4oc2V0KG1hcChpZCwgbGlzdChjd3IoJ2FiY2RlJywgMykpKSkpLCAxKQorCisgICAgZGVmIHRlc3RfcGVybXV0YXRpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBlcm11dGF0aW9ucykgICAgICAgICAgICAgICMgdG9vIGZldyBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwZXJtdXRhdGlvbnMsICdhYmMnLCAyLCAxKSAjIHRvbyBtYW55IGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBlcm11dGF0aW9ucywgTm9uZSkgICAgICAgICMgcG9vbCBpcyBub3QgaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGVybXV0YXRpb25zLCAnYWJjJywgLTIpICAjIHIgaXMgbmVnYXRpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBlcm11dGF0aW9ucygnYWJjJywgMzIpKSwgW10pICAgICAjIHIgPiBuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGVybXV0YXRpb25zLCAnYWJjJywgJ3MnKSAgIyByIGlzIG5vdCBhbiBpbnQgb3IgTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGVybXV0YXRpb25zKHJhbmdlKDMpLCAyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygwLDEpLCAoMCwyKSwgKDEsMCksICgxLDIpLCAoMiwwKSwgKDIsMSldKQorCisgICAgICAgIGRlZiBwZXJtdXRhdGlvbnMxKGl0ZXJhYmxlLCByPU5vbmUpOgorICAgICAgICAgICAgJ1B1cmUgcHl0aG9uIHZlcnNpb24gc2hvd24gaW4gdGhlIGRvY3MnCisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICByID0gbiBpZiByIGlzIE5vbmUgZWxzZSByCisgICAgICAgICAgICBpZiByID4gbjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGluZGljZXMgPSByYW5nZShuKQorICAgICAgICAgICAgY3ljbGVzID0gcmFuZ2Uobiwgbi1yLCAtMSkKKyAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlc1s6cl0pCisgICAgICAgICAgICB3aGlsZSBuOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKHIpKToKKyAgICAgICAgICAgICAgICAgICAgY3ljbGVzW2ldIC09IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgY3ljbGVzW2ldID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2k6XSA9IGluZGljZXNbaSsxOl0gKyBpbmRpY2VzW2k6aSsxXQorICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGVzW2ldID0gbiAtIGkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGogPSBjeWNsZXNbaV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaV0sIGluZGljZXNbLWpdID0gaW5kaWNlc1stal0sIGluZGljZXNbaV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlc1s6cl0pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRlZiBwZXJtdXRhdGlvbnMyKGl0ZXJhYmxlLCByPU5vbmUpOgorICAgICAgICAgICAgJ1B1cmUgcHl0aG9uIHZlcnNpb24gc2hvd24gaW4gdGhlIGRvY3MnCisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICByID0gbiBpZiByIGlzIE5vbmUgZWxzZSByCisgICAgICAgICAgICBmb3IgaW5kaWNlcyBpbiBwcm9kdWN0KHJhbmdlKG4pLCByZXBlYXQ9cik6CisgICAgICAgICAgICAgICAgaWYgbGVuKHNldChpbmRpY2VzKSkgPT0gcjoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCisgICAgICAgIGZvciBuIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgdmFsdWVzID0gWzUqeC0xMiBmb3IgeCBpbiByYW5nZShuKV0KKyAgICAgICAgICAgIGZvciByIGluIHJhbmdlKG4rMik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGlzdChwZXJtdXRhdGlvbnModmFsdWVzLCByKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAwIGlmIHI+biBlbHNlIGZhY3QobikgLy8gZmFjdChuLXIpKSAgICAgICMgcmlnaHQgbnVtYmVyIG9mIHBlcm1zCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgbGVuKHNldChyZXN1bHQpKSkgICAgICAgICAjIG5vIHJlcGVhdHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc29ydGVkKHJlc3VsdCkpICAgICAgICAgICAgICAgICMgbGV4aWNvZ3JhcGhpYyBvcmRlcgorICAgICAgICAgICAgICAgIGZvciBwIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocCksIHIpICAgICAgICAgICAgICAgICAgICAgICAgICMgci1sZW5ndGggcGVybXV0YXRpb25zCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChwKSksIHIpICAgICAgICAgICAgICAgICAgICAjIG5vIGR1cGxpY2F0ZSBlbGVtZW50cworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKGUgaW4gdmFsdWVzIGZvciBlIGluIHApKSAgICAgICAgICAgIyBlbGVtZW50cyB0YWtlbiBmcm9tIGlucHV0IGl0ZXJhYmxlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QocGVybXV0YXRpb25zMSh2YWx1ZXMsIHIpKSkgIyBtYXRjaGVzIGZpcnN0IHB1cmUgcHl0aG9uIHZlcnNpb24KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChwZXJtdXRhdGlvbnMyKHZhbHVlcywgcikpKSAjIG1hdGNoZXMgc2Vjb25kIHB1cmUgcHl0aG9uIHZlcnNpb24KKyAgICAgICAgICAgICAgICBpZiByID09IG46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KHBlcm11dGF0aW9ucyh2YWx1ZXMsIE5vbmUpKSkgIyB0ZXN0IHIgYXMgTm9uZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChwZXJtdXRhdGlvbnModmFsdWVzKSkpICAgICAgICMgdGVzdCBkZWZhdWx0IHIKKworICAgIEB0ZXN0X3N1cHBvcnQuaW1wbF9kZXRhaWwoInR1cGxlIHJlc3VzZSBpcyBDUHl0aG9uIHNwZWNpZmljIikKKyAgICBkZWYgdGVzdF9wZXJtdXRhdGlvbnNfdHVwbGVfcmV1c2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChtYXAoaWQsIHBlcm11dGF0aW9ucygnYWJjZGUnLCAzKSkpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsZW4oc2V0KG1hcChpZCwgbGlzdChwZXJtdXRhdGlvbnMoJ2FiY2RlJywgMykpKSkpLCAxKQorCisgICAgZGVmIHRlc3RfY29tYmluYXRvcmljcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBwcm9kdWN0KCksIHBlcm11dGF0aW9ucygpLAorICAgICAgICAjIGNvbWJpbmF0aW9ucygpIGFuZCBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgpLgorCisgICAgICAgIGZvciBuIGluIHJhbmdlKDYpOgorICAgICAgICAgICAgcyA9ICdBQkNERUZHJ1s6bl0KKyAgICAgICAgICAgIGZvciByIGluIHJhbmdlKDgpOgorICAgICAgICAgICAgICAgIHByb2QgPSBsaXN0KHByb2R1Y3QocywgcmVwZWF0PXIpKQorICAgICAgICAgICAgICAgIGN3ciA9IGxpc3QoY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQocywgcikpCisgICAgICAgICAgICAgICAgcGVybSA9IGxpc3QocGVybXV0YXRpb25zKHMsIHIpKQorICAgICAgICAgICAgICAgIGNvbWIgPSBsaXN0KGNvbWJpbmF0aW9ucyhzLCByKSkKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgc2l6ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHByb2QpLCBuKipyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN3ciksIChmYWN0KG4rci0xKSAvLyBmYWN0KHIpIC8vIGZhY3Qobi0xKSkgaWYgbiBlbHNlIChub3QgcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGVybSksIDAgaWYgcj5uIGVsc2UgZmFjdChuKSAvLyBmYWN0KG4tcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY29tYiksIDAgaWYgcj5uIGVsc2UgZmFjdChuKSAvLyBmYWN0KHIpIC8vIGZhY3Qobi1yKSkKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgbGV4aWNvZ3JhcGhpYyBvcmRlciB3aXRob3V0IHJlcGVhdGVkIHR1cGxlcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZCwgc29ydGVkKHNldChwcm9kKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjd3IsIHNvcnRlZChzZXQoY3dyKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtLCBzb3J0ZWQoc2V0KHBlcm0pKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIHNvcnRlZChzZXQoY29tYikpKQorCisgICAgICAgICAgICAgICAgIyBDaGVjayBpbnRlcnJlbGF0aW9uc2hpcHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN3ciwgW3QgZm9yIHQgaW4gcHJvZCBpZiBzb3J0ZWQodCk9PWxpc3QodCldKSAjIGN3cjogcHJvZHMgd2hpY2ggYXJlIHNvcnRlZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVybSwgW3QgZm9yIHQgaW4gcHJvZCBpZiBsZW4oc2V0KHQpKT09cl0pICAgICMgcGVybTogcHJvZHMgd2l0aCBubyBkdXBzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21iLCBbdCBmb3IgdCBpbiBwZXJtIGlmIHNvcnRlZCh0KT09bGlzdCh0KV0pICMgY29tYjogcGVybXMgdGhhdCBhcmUgc29ydGVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21iLCBbdCBmb3IgdCBpbiBjd3IgaWYgbGVuKHNldCh0KSk9PXJdKSAgICAgICMgY29tYjogY3dycyB3aXRob3V0IGR1cHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIGZpbHRlcihzZXQoY3dyKS5fX2NvbnRhaW5zX18sIHBlcm0pKSAgICAgIyBjb21iOiBwZXJtIHRoYXQgaXMgYSBjd3IKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIGZpbHRlcihzZXQocGVybSkuX19jb250YWluc19fLCBjd3IpKSAgICAgIyBjb21iOiBjd3IgdGhhdCBpcyBhIHBlcm0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIHNvcnRlZChzZXQoY3dyKSAmIHNldChwZXJtKSkpICAgICAgICAgICAgIyBjb21iOiBib3RoIGEgY3dyIGFuZCBhIHBlcm0KKworICAgIGRlZiB0ZXN0X2NvbXByZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoZGF0YT0nQUJDREVGJywgc2VsZWN0b3JzPVsxLDAsMSwwLDEsMV0pKSwgbGlzdCgnQUNFRicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pKSwgbGlzdCgnQUNFRicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoJ0FCQ0RFRicsIFswLDAsMCwwLDAsMF0pKSwgbGlzdCgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcygnQUJDREVGJywgWzEsMSwxLDEsMSwxXSkpLCBsaXN0KCdBQkNERUYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKCdBQkNERUYnLCBbMSwwLDFdKSksIGxpc3QoJ0FDJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcygnQUJDJywgWzAsMSwxLDEsMSwxXSkpLCBsaXN0KCdCQycpKQorICAgICAgICBuID0gMTAwMDAKKyAgICAgICAgZGF0YSA9IGNoYWluLmZyb21faXRlcmFibGUocmVwZWF0KHJhbmdlKDYpLCBuKSkKKyAgICAgICAgc2VsZWN0b3JzID0gY2hhaW4uZnJvbV9pdGVyYWJsZShyZXBlYXQoKDAsIDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKGRhdGEsIHNlbGVjdG9ycykpLCBbMSwzLDVdICogbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wcmVzcywgTm9uZSwgcmFuZ2UoNikpICAgICAgIyAxc3QgYXJnIG5vdCBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXByZXNzLCByYW5nZSg2KSwgTm9uZSkgICAgICAjIDJuZCBhcmcgbm90IGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcHJlc3MsIHJhbmdlKDYpKSAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcHJlc3MsIHJhbmdlKDYpLCBOb25lKSAgICAgICMgdG9vIG1hbnkgYXJncworCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKCdhYmMnLGNvdW50KCkpLCBbKCdhJywgMCksICgnYicsIDEpLCAoJ2MnLCAyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKCdhYmMnLGNvdW50KDMpKSwgWygnYScsIDMpLCAoJ2InLCA0KSwgKCdjJywgNSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMiwgemlwKCdhYmMnLGNvdW50KDMpKSksIFsoJ2EnLCAzKSwgKCdiJywgNCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMiwgemlwKCdhYmMnLGNvdW50KC0xKSkpLCBbKCdhJywgLTEpLCAoJ2InLCAwKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgyLCB6aXAoJ2FiYycsY291bnQoLTMpKSksIFsoJ2EnLCAtMyksICgnYicsIC0yKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY291bnQsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY291bnQsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZShjb3VudChtYXhzaXplLTUpLCAxMCkpLCByYW5nZShtYXhzaXplLTUsIG1heHNpemUrNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoY291bnQoLW1heHNpemUtNSksIDEwKSksIHJhbmdlKC1tYXhzaXplLTUsIC1tYXhzaXplKzUpKQorICAgICAgICBjID0gY291bnQoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoMyknKQorICAgICAgICBjLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYyksICdjb3VudCg0KScpCisgICAgICAgIGMgPSBjb3VudCgtOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTkpJykKKyAgICAgICAgYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvdW50KDEwLjI1KSksICdjb3VudCgxMC4yNSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dCgpLCAtOCkKKyAgICAgICAgZm9yIGkgaW4gKC1zeXMubWF4aW50LTUsIC1zeXMubWF4aW50KzUgLC0xMCwgLTEsIDAsIDEwLCBzeXMubWF4aW50LTUsIHN5cy5tYXhpbnQrNSk6CisgICAgICAgICAgICAjIFRlc3QgcmVwciAoaWdub3JpbmcgdGhlIEwgaW4gbG9uZ3MpCisgICAgICAgICAgICByMSA9IHJlcHIoY291bnQoaSkpLnJlcGxhY2UoJ0wnLCAnJykKKyAgICAgICAgICAgIHIyID0gJ2NvdW50KCVyKScuX19tb2RfXyhpKS5yZXBsYWNlKCdMJywgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMikKKworICAgICAgICAjIGNoZWNrIGNvcHksIGRlZXBjb3B5LCBwaWNrbGUKKyAgICAgICAgZm9yIHZhbHVlIGluIC0zLCAzLCBzeXMubWF4aW50LTUsIHN5cy5tYXhpbnQrNToKKyAgICAgICAgICAgIGMgPSBjb3VudCh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChjb3B5LmNvcHkoYykpLCB2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChjb3B5LmRlZXBjb3B5KGMpKSwgdmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjKSkpLCB2YWx1ZSkKKworICAgIGRlZiB0ZXN0X2NvdW50X3dpdGhfc3RyaWRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudCgyLDMpKSwgWygnYScsIDIpLCAoJ2InLCA1KSwgKCdjJywgOCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudChzdGFydD0yLHN0ZXA9MykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLCAyKSwgKCdiJywgNSksICgnYycsIDgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoc3RlcD0tMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLCAwKSwgKCdiJywgLTEpLCAoJ2MnLCAtMildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudCgyLDApKSwgWygnYScsIDIpLCAoJ2InLCAyKSwgKCdjJywgMildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudCgyLDEpKSwgWygnYScsIDIpLCAoJ2InLCAzKSwgKCdjJywgNCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMjAsIGNvdW50KG1heHNpemUtMTUsIDMpKSwgdGFrZSgyMCwgcmFuZ2UobWF4c2l6ZS0xNSwgbWF4c2l6ZSsxMDAsIDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIwLCBjb3VudCgtbWF4c2l6ZS0xNSwgMykpLCB0YWtlKDIwLCByYW5nZSgtbWF4c2l6ZS0xNSwtbWF4c2l6ZSsxMDAsIDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDMsIGNvdW50KDIsIDMuMjUtNGopKSwgWzIsIDUuMjUtNGosIDguNS04al0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgzLCBjb3VudChEZWNpbWFsKCcxLjEnKSwgRGVjaW1hbCgnLjEnKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWNpbWFsKCcxLjEnKSwgRGVjaW1hbCgnMS4yJyksIERlY2ltYWwoJzEuMycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDMsIGNvdW50KEZyYWN0aW9uKDIsMyksIEZyYWN0aW9uKDEsNykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbRnJhY3Rpb24oMiwzKSwgRnJhY3Rpb24oMTcsMjEpLCBGcmFjdGlvbigyMCwyMSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodGFrZSgzLCBjb3VudCgxMCwgMi41KSkpLCByZXByKFsxMCwgMTIuNSwgMTUuMF0pKQorICAgICAgICBjID0gY291bnQoMywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoMywgNSknKQorICAgICAgICBjLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYyksICdjb3VudCg4LCA1KScpCisgICAgICAgIGMgPSBjb3VudCgtOSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTksIDApJykKKyAgICAgICAgYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTksIDApJykKKyAgICAgICAgYyA9IGNvdW50KC05LCAtMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTksIC0zKScpCisgICAgICAgIGMubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC0xMiwgLTMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTEyLCAtMyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY291bnQoMTAuNSwgMS4yNSkpLCAnY291bnQoMTAuNSwgMS4yNSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY291bnQoMTAuNSwgMSkpLCAnY291bnQoMTAuNSknKSAgICAgICAgICAgIyBzdXBwcmVzcyBzdGVwPTEgd2hlbiBpdCdzIGFuIGludAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY291bnQoMTAuNSwgMS4wMCkpLCAnY291bnQoMTAuNSwgMS4wKScpICAgIyBkbyBzaG93IGZsb2F0IHZhbHVlcyBsaWxrZSAxLjAKKyAgICAgICAgZm9yIGkgaW4gKC1zeXMubWF4aW50LTUsIC1zeXMubWF4aW50KzUgLC0xMCwgLTEsIDAsIDEwLCBzeXMubWF4aW50LTUsIHN5cy5tYXhpbnQrNSk6CisgICAgICAgICAgICBmb3IgaiBpbiAgKC1zeXMubWF4aW50LTUsIC1zeXMubWF4aW50KzUgLC0xMCwgLTEsIDAsIDEsIDEwLCBzeXMubWF4aW50LTUsIHN5cy5tYXhpbnQrNSk6CisgICAgICAgICAgICAgICAgIyBUZXN0IHJlcHIgKGlnbm9yaW5nIHRoZSBMIGluIGxvbmdzKQorICAgICAgICAgICAgICAgIHIxID0gcmVwcihjb3VudChpLCBqKSkucmVwbGFjZSgnTCcsICcnKQorICAgICAgICAgICAgICAgIGlmIGogPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcjIgPSAoJ2NvdW50KCVyKScgJSBpKS5yZXBsYWNlKCdMJywgJycpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcjIgPSAoJ2NvdW50KCVyLCAlciknICUgKGksIGopKS5yZXBsYWNlKCdMJywgJycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCisKKyAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDEwLCBjeWNsZSgnYWJjJykpLCBsaXN0KCdhYmNhYmNhYmNhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjeWNsZSgnJykpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjeWNsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjeWNsZSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZShjeWNsZShnZW4zKCkpLDEwKSksIFswLDEsMiwwLDEsMiwwLDEsMiwwXSkKKworICAgIGRlZiB0ZXN0X2dyb3VwYnkoc2VsZik6CisgICAgICAgICMgQ2hlY2sgd2hldGhlciBpdCBhY2NlcHRzIGFyZ3VtZW50cyBjb3JyZWN0bHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgbGlzdChncm91cGJ5KFtdKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGxpc3QoZ3JvdXBieShbXSwga2V5PWlkKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgZ3JvdXBieSgnYWJjJywgW10pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdyb3VwYnksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ3JvdXBieSwgJ2FiYycsIGxhbWJkYSB4OngsIDEwKQorCisgICAgICAgICMgQ2hlY2sgbm9ybWFsIGlucHV0CisgICAgICAgIHMgPSBbKDAsIDEwLCAyMCksICgwLCAxMSwyMSksICgwLDEyLDIxKSwgKDEsMTMsMjEpLCAoMSwxNCwyMiksCisgICAgICAgICAgICAgKDIsMTUsMjIpLCAoMywxNiwyMyksICgzLDE3LDIzKV0KKyAgICAgICAgZHVwID0gW10KKyAgICAgICAgZm9yIGssIGcgaW4gZ3JvdXBieShzLCBsYW1iZGEgcjpyWzBdKToKKyAgICAgICAgICAgIGZvciBlbGVtIGluIGc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBlbGVtWzBdKQorICAgICAgICAgICAgICAgIGR1cC5hcHBlbmQoZWxlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBkdXApCisKKyAgICAgICAgIyBDaGVjayBuZXN0ZWQgY2FzZQorICAgICAgICBkdXAgPSBbXQorICAgICAgICBmb3IgaywgZyBpbiBncm91cGJ5KHMsIGxhbWJkYSByOnJbMF0pOgorICAgICAgICAgICAgZm9yIGlrLCBpZyBpbiBncm91cGJ5KGcsIGxhbWJkYSByOnJbMl0pOgorICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIGlnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIGVsZW1bMF0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWssIGVsZW1bMl0pCisgICAgICAgICAgICAgICAgICAgIGR1cC5hcHBlbmQoZWxlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBkdXApCisKKyAgICAgICAgIyBDaGVjayBjYXNlIHdoZXJlIGlubmVyIGl0ZXJhdG9yIGlzIG5vdCB1c2VkCisgICAgICAgIGtleXMgPSBbayBmb3IgaywgZyBpbiBncm91cGJ5KHMsIGxhbWJkYSByOnJbMF0pXQorICAgICAgICBleHBlY3RlZGtleXMgPSBzZXQoW3JbMF0gZm9yIHIgaW4gc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGtleXMpLCBleHBlY3RlZGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCBsZW4oZXhwZWN0ZWRrZXlzKSkKKworICAgICAgICAjIEV4ZXJjaXNlIHBpcGVzIGFuZCBmaWx0ZXJzIHN0eWxlCisgICAgICAgIHMgPSAnYWJyYWNhZGFicmEnCisgICAgICAgICMgc29ydCBzIHwgdW5pcQorICAgICAgICByID0gW2sgZm9yIGssIGcgaW4gZ3JvdXBieShzb3J0ZWQocykpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIFsnYScsICdiJywgJ2MnLCAnZCcsICdyJ10pCisgICAgICAgICMgc29ydCBzIHwgdW5pcSAtZAorICAgICAgICByID0gW2sgZm9yIGssIGcgaW4gZ3JvdXBieShzb3J0ZWQocykpIGlmIGxpc3QoaXNsaWNlKGcsMSwyKSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgWydhJywgJ2InLCAnciddKQorICAgICAgICAjIHNvcnQgcyB8IHVuaXEgLWMKKyAgICAgICAgciA9IFsobGVuKGxpc3QoZykpLCBrKSBmb3IgaywgZyBpbiBncm91cGJ5KHNvcnRlZChzKSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgWyg1LCAnYScpLCAoMiwgJ2InKSwgKDEsICdjJyksICgxLCAnZCcpLCAoMiwgJ3InKV0pCisgICAgICAgICMgc29ydCBzIHwgdW5pcSAtYyB8IHNvcnQgLXJuIHwgaGVhZCAtMworICAgICAgICByID0gc29ydGVkKFsobGVuKGxpc3QoZykpICwgaykgZm9yIGssIGcgaW4gZ3JvdXBieShzb3J0ZWQocykpXSwgcmV2ZXJzZT1UcnVlKVs6M10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCBbKDUsICdhJyksICgyLCAncicpLCAoMiwgJ2InKV0pCisKKyAgICAgICAgIyBpdGVyLm5leHQgZmFpbHVyZQorICAgICAgICBjbGFzcyBFeHBlY3RlZEVycm9yKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBkZWxheWVkX3JhaXNlKG49MCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKKyAgICAgICAgICAgICAgICB5aWVsZCAneW8nCisgICAgICAgICAgICByYWlzZSBFeHBlY3RlZEVycm9yCisgICAgICAgIGRlZiBndWxwKGl0ZXJhYmxlLCBrZXlwPU5vbmUsIGZ1bmM9bGlzdCk6CisgICAgICAgICAgICByZXR1cm4gW2Z1bmMoZykgZm9yIGssIGcgaW4gZ3JvdXBieShpdGVyYWJsZSwga2V5cCldCisKKyAgICAgICAgIyBpdGVyLm5leHQgZmFpbHVyZSBvbiBvdXRlciBvYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhwZWN0ZWRFcnJvciwgZ3VscCwgZGVsYXllZF9yYWlzZSgwKSkKKyAgICAgICAgIyBpdGVyLm5leHQgZmFpbHVyZSBvbiBpbm5lciBvYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhwZWN0ZWRFcnJvciwgZ3VscCwgZGVsYXllZF9yYWlzZSgxKSkKKworICAgICAgICAjIF9fY21wX18gZmFpbHVyZQorICAgICAgICBjbGFzcyBEdW1teUNtcDoKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIGRzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhwZWN0ZWRFcnJvcgorICAgICAgICBzID0gW0R1bW15Q21wKCksIER1bW15Q21wKCksIE5vbmVdCisKKyAgICAgICAgIyBfX2NtcF9fIGZhaWx1cmUgb24gb3V0ZXIgb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGVjdGVkRXJyb3IsIGd1bHAsIHMsIGZ1bmM9aWQpCisgICAgICAgICMgX19jbXBfXyBmYWlsdXJlIG9uIGlubmVyIG9iamVjdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeHBlY3RlZEVycm9yLCBndWxwLCBzKQorCisgICAgICAgICMga2V5ZnVuYyBmYWlsdXJlCisgICAgICAgIGRlZiBrZXlmdW5jKG9iaik6CisgICAgICAgICAgICBpZiBrZXlmdW5jLnNraXAgPiAwOgorICAgICAgICAgICAgICAgIGtleWZ1bmMuc2tpcCAtPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeHBlY3RlZEVycm9yCisKKyAgICAgICAgIyBrZXlmdW5jIGZhaWx1cmUgb24gb3V0ZXIgb2JqZWN0CisgICAgICAgIGtleWZ1bmMuc2tpcCA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhwZWN0ZWRFcnJvciwgZ3VscCwgW05vbmVdLCBrZXlmdW5jKQorICAgICAgICBrZXlmdW5jLnNraXAgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGVjdGVkRXJyb3IsIGd1bHAsIFtOb25lLCBOb25lXSwga2V5ZnVuYykKKworICAgIGRlZiB0ZXN0X2lmaWx0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpZmlsdGVyKGlzRXZlbiwgcmFuZ2UoNikpKSwgWzAsMiw0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlmaWx0ZXIoTm9uZSwgWzAsMSwwLDIsMF0pKSwgWzEsMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpZmlsdGVyKGJvb2wsIFswLDEsMCwyLDBdKSksIFsxLDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoNCwgaWZpbHRlcihpc0V2ZW4sIGNvdW50KCkpKSwgWzAsMiw0LDZdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlmaWx0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlciwgbGFtYmRhIHg6eCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpZmlsdGVyLCBsYW1iZGEgeDp4LCByYW5nZSg2KSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpZmlsdGVyLCBpc0V2ZW4sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlcihyYW5nZSg2KSwgcmFuZ2UoNikpLm5leHQpCisKKyAgICBkZWYgdGVzdF9pZmlsdGVyZmFsc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpZmlsdGVyZmFsc2UoaXNFdmVuLCByYW5nZSg2KSkpLCBbMSwzLDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaWZpbHRlcmZhbHNlKE5vbmUsIFswLDEsMCwyLDBdKSksIFswLDAsMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpZmlsdGVyZmFsc2UoYm9vbCwgWzAsMSwwLDIsMF0pKSwgWzAsMCwwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDQsIGlmaWx0ZXJmYWxzZShpc0V2ZW4sIGNvdW50KCkpKSwgWzEsMyw1LDddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlmaWx0ZXJmYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpZmlsdGVyZmFsc2UsIGxhbWJkYSB4OngpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlcmZhbHNlLCBsYW1iZGEgeDp4LCByYW5nZSg2KSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpZmlsdGVyZmFsc2UsIGlzRXZlbiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpZmlsdGVyZmFsc2UocmFuZ2UoNiksIHJhbmdlKDYpKS5uZXh0KQorCisgICAgZGVmIHRlc3RfaXppcChzZWxmKToKKyAgICAgICAgYW5zID0gWyh4LHkpIGZvciB4LCB5IGluIGl6aXAoJ2FiYycsY291bnQoKSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5zLCBbKCdhJywgMCksICgnYicsIDEpLCAoJ2MnLCAyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwKCdhYmMnLCByYW5nZSg2KSkpLCB6aXAoJ2FiYycsIHJhbmdlKDYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXAoJ2FiY2RlZicsIHJhbmdlKDMpKSksIHppcCgnYWJjZGVmJywgcmFuZ2UoMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMyxpemlwKCdhYmNkZWYnLCBjb3VudCgpKSksIHppcCgnYWJjZGVmJywgcmFuZ2UoMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcCgnYWJjZGVmJykpLCB6aXAoJ2FiY2RlZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcCgpKSwgemlwKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXppcCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpemlwLCByYW5nZSgzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbdHVwbGUobGlzdChwYWlyKSkgZm9yIHBhaXIgaW4gaXppcCgnYWJjJywgJ2RlZicpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB6aXAoJ2FiYycsICdkZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbcGFpciBmb3IgcGFpciBpbiBpemlwKCdhYmMnLCAnZGVmJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHppcCgnYWJjJywgJ2RlZicpKQorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidHVwbGUgcmV1c2UgaXMgc3BlY2lmaWMgdG8gQ1B5dGhvbiIpCisgICAgZGVmIHRlc3RfaXppcF90dXBsZV9yZXN1c2Uoc2VsZik6CisgICAgICAgIGlkcyA9IG1hcChpZCwgaXppcCgnYWJjJywgJ2RlZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbihpZHMpLCBtYXgoaWRzKSkKKyAgICAgICAgaWRzID0gbWFwKGlkLCBsaXN0KGl6aXAoJ2FiYycsICdkZWYnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QuZnJvbWtleXMoaWRzKSksIGxlbihpZHMpKQorCisgICAgZGVmIHRlc3RfaXppcGxvbmdlc3Qoc2VsZik6CisgICAgICAgIGZvciBhcmdzIGluIFsKKyAgICAgICAgICAgICAgICBbJ2FiYycsIHJhbmdlKDYpXSwKKyAgICAgICAgICAgICAgICBbcmFuZ2UoNiksICdhYmMnXSwKKyAgICAgICAgICAgICAgICBbcmFuZ2UoMTAwMCksIHJhbmdlKDIwMDAsMjEwMCksIHJhbmdlKDMwMDAsMzA1MCldLAorICAgICAgICAgICAgICAgIFtyYW5nZSgxMDAwKSwgcmFuZ2UoMCksIHJhbmdlKDMwMDAsMzA1MCksIHJhbmdlKDEyMDApLCByYW5nZSgxNTAwKV0sCisgICAgICAgICAgICAgICAgW3JhbmdlKDEwMDApLCByYW5nZSgwKSwgcmFuZ2UoMzAwMCwzMDUwKSwgcmFuZ2UoMTIwMCksIHJhbmdlKDE1MDApLCByYW5nZSgwKV0sCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgIyB0YXJnZXQgPSBtYXAoTm9uZSwgKmFyZ3MpIDwtIHRoaXMgcmFpc2VzIGEgcHkzayB3YXJuaW5nCisgICAgICAgICAgICAjIHRoaXMgaXMgdGhlIHJlcGxhY2VtZW50OgorICAgICAgICAgICAgdGFyZ2V0ID0gW3R1cGxlKFthcmdbaV0gaWYgaSA8IGxlbihhcmcpIGVsc2UgTm9uZSBmb3IgYXJnIGluIGFyZ3NdKQorICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1heChtYXAobGVuLCBhcmdzKSkpXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXBfbG9uZ2VzdCgqYXJncykpLCB0YXJnZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcF9sb25nZXN0KCphcmdzLCAqKnt9KSksIHRhcmdldCkKKyAgICAgICAgICAgIHRhcmdldCA9IFt0dXBsZSgoZSBpcyBOb25lIGFuZCAnWCcgb3IgZSkgZm9yIGUgaW4gdCkgZm9yIHQgaW4gdGFyZ2V0XSAgICMgUmVwbGFjZSBOb25lIGZpbGxzIHdpdGggJ1gnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcF9sb25nZXN0KCphcmdzLCAqKmRpY3QoZmlsbHZhbHVlPSdYJykpKSwgdGFyZ2V0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgzLGl6aXBfbG9uZ2VzdCgnYWJjZGVmJywgY291bnQoKSkpLCB6aXAoJ2FiY2RlZicsIHJhbmdlKDMpKSkgIyB0YWtlIDMgZnJvbSBpbmZpbml0ZSBpbnB1dAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwX2xvbmdlc3QoKSksIHppcCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcF9sb25nZXN0KFtdKSksIHppcChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwX2xvbmdlc3QoJ2FiY2RlZicpKSwgemlwKCdhYmNkZWYnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcF9sb25nZXN0KCdhYmMnLCAnZGVmZycsICoqe30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB6aXAobGlzdCgnYWJjJykgKyBbTm9uZV0sICdkZWZnJykpICAjIGVtcHR5IGtleXdvcmQgZGljdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGl6aXBfbG9uZ2VzdCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpemlwX2xvbmdlc3QsIHJhbmdlKDMpLCAzKQorCisgICAgICAgIGZvciBzdG10IGluIFsKKyAgICAgICAgICAgICJpemlwX2xvbmdlc3QoJ2FiYycsIGZ2PTEpIiwKKyAgICAgICAgICAgICJpemlwX2xvbmdlc3QoJ2FiYycsIGZpbGx2YWx1ZT0xLCBib2d1c19rZXl3b3JkPU5vbmUpIiwKKyAgICAgICAgXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBldmFsKHN0bXQsIGdsb2JhbHMoKSwgbG9jYWxzKCkpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdEaWQgbm90IHJhaXNlIFR5cGUgaW46ICAnICsgc3RtdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt0dXBsZShsaXN0KHBhaXIpKSBmb3IgcGFpciBpbiBpemlwX2xvbmdlc3QoJ2FiYycsICdkZWYnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgemlwKCdhYmMnLCAnZGVmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3BhaXIgZm9yIHBhaXIgaW4gaXppcF9sb25nZXN0KCdhYmMnLCAnZGVmJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHppcCgnYWJjJywgJ2RlZicpKQorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidHVwbGUgcmV1c2UgaXMgc3BlY2lmaWMgdG8gQ1B5dGhvbiIpCisgICAgZGVmIHRlc3RfaXppcF9sb25nZXN0X3R1cGxlX3JldXNlKHNlbGYpOgorICAgICAgICBpZHMgPSBtYXAoaWQsIGl6aXBfbG9uZ2VzdCgnYWJjJywgJ2RlZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbihpZHMpLCBtYXgoaWRzKSkKKyAgICAgICAgaWRzID0gbWFwKGlkLCBsaXN0KGl6aXBfbG9uZ2VzdCgnYWJjJywgJ2RlZicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljdC5mcm9ta2V5cyhpZHMpKSwgbGVuKGlkcykpCisKKyAgICBkZWYgdGVzdF9idWdfNzI0NChzZWxmKToKKworICAgICAgICBjbGFzcyBSZXBlYXRlcihvYmplY3QpOgorICAgICAgICAgICAgIyB0aGlzIGNsYXNzIGlzIHNpbWlsYXIgdG8gaXRlcnRvb2xzLnJlcGVhdAorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG8sIHQsIGUpOgorICAgICAgICAgICAgICAgIHNlbGYubyA9IG8KKyAgICAgICAgICAgICAgICBzZWxmLnQgPSBpbnQodCkKKyAgICAgICAgICAgICAgICBzZWxmLmUgPSBlCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6ICMgaXRzIGl0ZXJhdG9yIGlzIGl0c2VsZgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnQgPiAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnQgLT0gMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5vCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5lCisKKyAgICAgICAgIyBGb3JtZXJseSB0aGlzIGNvZGUgaW4gd291bGQgZmFpbCBpbiBkZWJ1ZyBtb2RlCisgICAgICAgICMgd2l0aCBVbmRldGVjdGVkIEVycm9yIGFuZCBTdG9wIEl0ZXJhdGlvbgorICAgICAgICByMSA9IFJlcGVhdGVyKDEsIDMsIFN0b3BJdGVyYXRpb24pCisgICAgICAgIHIyID0gUmVwZWF0ZXIoMiwgNCwgU3RvcEl0ZXJhdGlvbikKKyAgICAgICAgZGVmIHJ1bihyMSwgcjIpOgorICAgICAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgICAgIGZvciBpLCBqIGluIGl6aXBfbG9uZ2VzdChyMSwgcjIsIGZpbGx2YWx1ZT0wKToKKyAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoJ3N0ZG91dCcpOgorICAgICAgICAgICAgICAgICAgICBwcmludCAoaSwgaikKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKChpLCBqKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW4ocjEsIHIyKSwgWygxLDIpLCAoMSwyKSwgKDEsMiksICgwLDIpXSkKKworICAgICAgICAjIEZvcm1lcmx5LCB0aGUgUnVudGltZUVycm9yIHdvdWxkIGJlIGxvc3QKKyAgICAgICAgIyBhbmQgU3RvcEl0ZXJhdGlvbiB3b3VsZCBzdG9wIGFzIGV4cGVjdGVkCisgICAgICAgIHIxID0gUmVwZWF0ZXIoMSwgMywgUnVudGltZUVycm9yKQorICAgICAgICByMiA9IFJlcGVhdGVyKDIsIDQsIFN0b3BJdGVyYXRpb24pCisgICAgICAgIGl0ID0gaXppcF9sb25nZXN0KHIxLCByMiwgZmlsbHZhbHVlPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbmV4dCwgaXQpCisKKyAgICBkZWYgdGVzdF9wcm9kdWN0KHNlbGYpOgorICAgICAgICBmb3IgYXJncywgcmVzdWx0IGluIFsKKyAgICAgICAgICAgIChbXSwgWygpXSksICAgICAgICAgICAgICAgICAgICAgIyB6ZXJvIGl0ZXJhYmxlcworICAgICAgICAgICAgKFsnYWInXSwgWygnYScsKSwgKCdiJywpXSksICAgICAjIG9uZSBpdGVyYWJsZQorICAgICAgICAgICAgKFtyYW5nZSgyKSwgcmFuZ2UoMyldLCBbKDAsMCksICgwLDEpLCAoMCwyKSwgKDEsMCksICgxLDEpLCAoMSwyKV0pLCAgICAgIyB0d28gaXRlcmFibGVzCisgICAgICAgICAgICAoW3JhbmdlKDApLCByYW5nZSgyKSwgcmFuZ2UoMyldLCBbXSksICAgICAgICAgICAjIGZpcnN0IGl0ZXJhYmxlIHdpdGggemVybyBsZW5ndGgKKyAgICAgICAgICAgIChbcmFuZ2UoMiksIHJhbmdlKDApLCByYW5nZSgzKV0sIFtdKSwgICAgICAgICAgICMgbWlkZGxlIGl0ZXJhYmxlIHdpdGggemVybyBsZW5ndGgKKyAgICAgICAgICAgIChbcmFuZ2UoMiksIHJhbmdlKDMpLCByYW5nZSgwKV0sIFtdKSwgICAgICAgICAgICMgbGFzdCBpdGVyYWJsZSB3aXRoIHplcm8gbGVuZ3RoCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHByb2R1Y3QoKmFyZ3MpKSwgcmVzdWx0KQorICAgICAgICAgICAgZm9yIHIgaW4gcmFuZ2UoNCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHByb2R1Y3QoKihhcmdzKnIpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHByb2R1Y3QoKmFyZ3MsICoqZGljdChyZXBlYXQ9cikpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdChwcm9kdWN0KCpbcmFuZ2UoNyldKjYpKSksIDcqKjYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJvZHVjdCwgcmFuZ2UoNiksIE5vbmUpCisKKyAgICAgICAgZGVmIHByb2R1Y3QxKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcG9vbHMgPSBtYXAodHVwbGUsIGFyZ3MpICoga3dkcy5nZXQoJ3JlcGVhdCcsIDEpCisgICAgICAgICAgICBuID0gbGVuKHBvb2xzKQorICAgICAgICAgICAgaWYgbiA9PSAwOgorICAgICAgICAgICAgICAgIHlpZWxkICgpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBhbnkobGVuKHBvb2wpID09IDAgZm9yIHBvb2wgaW4gcG9vbHMpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaW5kaWNlcyA9IFswXSAqIG4KKyAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIHBvb2wsIGkgaW4gemlwKHBvb2xzLCBpbmRpY2VzKSkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobikpOiAgIyByaWdodCB0byBsZWZ0CisgICAgICAgICAgICAgICAgICAgIGlmIGluZGljZXNbaV0gPT0gbGVuKHBvb2xzW2ldKSAtIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2ldICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoaSsxLCBuKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbal0gPSAwCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIHBvb2wsIGkgaW4gemlwKHBvb2xzLCBpbmRpY2VzKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkZWYgcHJvZHVjdDIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAnUHVyZSBweXRob24gdmVyc2lvbiB1c2VkIGluIGRvY3MnCisgICAgICAgICAgICBwb29scyA9IG1hcCh0dXBsZSwgYXJncykgKiBrd2RzLmdldCgncmVwZWF0JywgMSkKKyAgICAgICAgICAgIHJlc3VsdCA9IFtbXV0KKyAgICAgICAgICAgIGZvciBwb29sIGluIHBvb2xzOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFt4K1t5XSBmb3IgeCBpbiByZXN1bHQgZm9yIHkgaW4gcG9vbF0KKyAgICAgICAgICAgIGZvciBwcm9kIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwcm9kKQorCisgICAgICAgIGFyZ3R5cGVzID0gWycnLCAnYWJjJywgJycsIHhyYW5nZSgwKSwgeHJhbmdlKDQpLCBkaWN0KGE9MSwgYj0yLCBjPTMpLAorICAgICAgICAgICAgICAgICAgICBzZXQoJ2FiY2RlZmcnKSwgcmFuZ2UoMTEpLCB0dXBsZShyYW5nZSgxMykpXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgYXJncyA9IFtyYW5kb20uY2hvaWNlKGFyZ3R5cGVzKSBmb3IgaiBpbiByYW5nZShyYW5kb20ucmFuZHJhbmdlKDUpKV0KKyAgICAgICAgICAgIGV4cGVjdGVkX2xlbiA9IHByb2QobWFwKGxlbiwgYXJncykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KHByb2R1Y3QoKmFyZ3MpKSksIGV4cGVjdGVkX2xlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwcm9kdWN0KCphcmdzKSksIGxpc3QocHJvZHVjdDEoKmFyZ3MpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwcm9kdWN0KCphcmdzKSksIGxpc3QocHJvZHVjdDIoKmFyZ3MpKSkKKyAgICAgICAgICAgIGFyZ3MgPSBtYXAoaXRlciwgYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QocHJvZHVjdCgqYXJncykpKSwgZXhwZWN0ZWRfbGVuKQorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidHVwbGUgcmV1c2UgaXMgc3BlY2lmaWMgdG8gQ1B5dGhvbiIpCisgICAgZGVmIHRlc3RfcHJvZHVjdF90dXBsZV9yZXVzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KG1hcChpZCwgcHJvZHVjdCgnYWJjJywgJ2RlZicpKSkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxlbihzZXQobWFwKGlkLCBsaXN0KHByb2R1Y3QoJ2FiYycsICdkZWYnKSkpKSksIDEpCisKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXBlYXQob2JqZWN0PSdhJywgdGltZXM9MykpLCBbJ2EnLCAnYScsICdhJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKHhyYW5nZSgzKSxyZXBlYXQoJ2EnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygwLCAnYScpLCAoMSwgJ2EnKSwgKDIsICdhJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmVwZWF0KCdhJywgMykpLCBbJ2EnLCAnYScsICdhJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgzLCByZXBlYXQoJ2EnKSksIFsnYScsICdhJywgJ2EnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJlcGVhdCgnYScsIDApKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXBlYXQoJ2EnLCAtMykpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXBlYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVwZWF0LCBOb25lLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlcGVhdCwgTm9uZSwgJ2EnKQorICAgICAgICByID0gcmVwZWF0KDErMGopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyKSwgJ3JlcGVhdCgoMSswaikpJykKKyAgICAgICAgciA9IHJlcGVhdCgxKzBqLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIociksICdyZXBlYXQoKDErMGopLCA1KScpCisgICAgICAgIGxpc3QocikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHIpLCAncmVwZWF0KCgxKzBqKSwgMCknKQorCisgICAgZGVmIHRlc3RfaW1hcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGltYXAob3BlcmF0b3IucG93LCByYW5nZSgzKSwgcmFuZ2UoMSw3KSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFswKioxLCAxKioyLCAyKiozXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGltYXAoTm9uZSwgJ2FiYycsIHJhbmdlKDUpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnYScsMCksKCdiJywxKSwoJ2MnLDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGltYXAoTm9uZSwgJ2FiYycsIGNvdW50KCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywwKSwoJ2InLDEpLCgnYycsMildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMixpbWFwKE5vbmUsICdhYmMnLCBjb3VudCgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnYScsMCksKCdiJywxKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpbWFwKG9wZXJhdG9yLnBvdywgW10pKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW1hcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbWFwLCBvcGVyYXRvci5uZWcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW1hcCgxMCwgcmFuZ2UoNSkpLm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGltYXAoZXJyZnVuYywgWzRdLCBbNV0pLm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW1hcChvbmVhcmcsIFs0XSwgWzVdKS5uZXh0KQorCisgICAgZGVmIHRlc3Rfc3Rhcm1hcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN0YXJtYXAob3BlcmF0b3IucG93LCB6aXAocmFuZ2UoMyksIHJhbmdlKDEsNykpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWzAqKjEsIDEqKjIsIDIqKjNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMywgc3Rhcm1hcChvcGVyYXRvci5wb3csIGl6aXAoY291bnQoKSwgY291bnQoMSkpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWzAqKjEsIDEqKjIsIDIqKjNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3Rhcm1hcChvcGVyYXRvci5wb3csIFtdKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3Rhcm1hcChvcGVyYXRvci5wb3csIFtpdGVyKFs0LDVdKV0pKSwgWzQqKjVdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIHN0YXJtYXAob3BlcmF0b3IucG93LCBbTm9uZV0pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0YXJtYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3Rhcm1hcCwgb3BlcmF0b3IucG93LCBbKDQsNSldLCAnZXh0cmEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0YXJtYXAoMTAsIFsoNCw1KV0pLm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0YXJtYXAoZXJyZnVuYywgWyg0LDUpXSkubmV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdGFybWFwKG9uZWFyZywgWyg0LDUpXSkubmV4dCkKKworICAgIGRlZiB0ZXN0X2lzbGljZShzZWxmKToKKyAgICAgICAgZm9yIGFyZ3MgaW4gWyAgICAgICAgICAjIGlzbGljZShhcmdzKSBzaG91bGQgYWdyZWUgd2l0aCByYW5nZShhcmdzKQorICAgICAgICAgICAgICAgICgxMCwgMjAsIDMpLAorICAgICAgICAgICAgICAgICgxMCwgMywgMjApLAorICAgICAgICAgICAgICAgICgxMCwgMjApLAorICAgICAgICAgICAgICAgICgxMCwgMyksCisgICAgICAgICAgICAgICAgKDIwLCkKKyAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZSh4cmFuZ2UoMTAwKSwgKmFyZ3MpKSwgcmFuZ2UoKmFyZ3MpKQorCisgICAgICAgIGZvciBhcmdzLCB0Z3RhcmdzIGluIFsgICMgU3RvcCB3aGVuIHNlcW4gaXMgZXhoYXVzdGVkCisgICAgICAgICAgICAgICAgKCgxMCwgMTEwLCAzKSwgKCgxMCwgMTAwLCAzKSkpLAorICAgICAgICAgICAgICAgICgoMTAsIDExMCksICgoMTAsIDEwMCkpKSwKKyAgICAgICAgICAgICAgICAoKDExMCwpLCAoMTAwLCkpCisgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoeHJhbmdlKDEwMCksICphcmdzKSksIHJhbmdlKCp0Z3RhcmdzKSkKKworICAgICAgICAjIFRlc3Qgc3RvcD1Ob25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoeHJhbmdlKDEwKSwgTm9uZSkpLCByYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoeHJhbmdlKDEwKSwgTm9uZSwgTm9uZSkpLCByYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoeHJhbmdlKDEwKSwgTm9uZSwgTm9uZSwgTm9uZSkpLCByYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoeHJhbmdlKDEwKSwgMiwgTm9uZSkpLCByYW5nZSgyLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoeHJhbmdlKDEwKSwgMSwgTm9uZSwgMikpLCByYW5nZSgxLCAxMCwgMikpCisKKyAgICAgICAgIyBUZXN0IG51bWJlciBvZiBpdGVtcyBjb25zdW1lZCAgICAgU0YgIzExNzE0MTcKKyAgICAgICAgaXQgPSBpdGVyKHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZShpdCwgMykpLCByYW5nZSgzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgcmFuZ2UoMywgMTApKQorCisgICAgICAgICMgVGVzdCBpbnZhbGlkIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzbGljZSwgeHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCksIDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGlzbGljZSwgeHJhbmdlKDEwKSwgLTUsIDEwLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCksIDEsIC01LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaXNsaWNlLCB4cmFuZ2UoMTApLCAxLCAxMCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGlzbGljZSwgeHJhbmdlKDEwKSwgMSwgMTAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGlzbGljZSwgeHJhbmdlKDEwKSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCksICdhJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaXNsaWNlLCB4cmFuZ2UoMTApLCAxLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGlzbGljZSwgeHJhbmdlKDEwKSwgJ2EnLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCksIDEsICdhJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdChpc2xpY2UoY291bnQoKSwgMSwgMTAsIG1heHNpemUpKSksIDEpCisKKyAgICAgICAgIyBJc3N1ZSAjMTAzMjM6ICBMZXNzIGlzbGljZSBpbiBhIHByZWRpY3RhYmxlIHN0YXRlCisgICAgICAgIGMgPSBjb3VudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoYywgMSwgMywgNTApKSwgWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYyksIDMpCisKKyAgICBkZWYgdGVzdF90YWtld2hpbGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBbMSwgMywgNSwgMjAsIDIsIDQsIDYsIDhdCisgICAgICAgIHVuZGVydGVuID0gbGFtYmRhIHg6IHg8MTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHRha2V3aGlsZSh1bmRlcnRlbiwgZGF0YSkpLCBbMSwgMywgNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh0YWtld2hpbGUodW5kZXJ0ZW4sIFtdKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRha2V3aGlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0YWtld2hpbGUsIG9wZXJhdG9yLnBvdykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0YWtld2hpbGUsIG9wZXJhdG9yLnBvdywgWyg0LDUpXSwgJ2V4dHJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0YWtld2hpbGUoMTAsIFsoNCw1KV0pLm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRha2V3aGlsZShlcnJmdW5jLCBbKDQsNSldKS5uZXh0KQorICAgICAgICB0ID0gdGFrZXdoaWxlKGJvb2wsIFsxLCAxLCAxLCAwLCAwLCAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHQpLCBbMSwgMSwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHQubmV4dCkKKworICAgIGRlZiB0ZXN0X2Ryb3B3aGlsZShzZWxmKToKKyAgICAgICAgZGF0YSA9IFsxLCAzLCA1LCAyMCwgMiwgNCwgNiwgOF0KKyAgICAgICAgdW5kZXJ0ZW4gPSBsYW1iZGEgeDogeDwxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHJvcHdoaWxlKHVuZGVydGVuLCBkYXRhKSksIFsyMCwgMiwgNCwgNiwgOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkcm9wd2hpbGUodW5kZXJ0ZW4sIFtdKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRyb3B3aGlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkcm9wd2hpbGUsIG9wZXJhdG9yLnBvdykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkcm9wd2hpbGUsIG9wZXJhdG9yLnBvdywgWyg0LDUpXSwgJ2V4dHJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkcm9wd2hpbGUoMTAsIFsoNCw1KV0pLm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRyb3B3aGlsZShlcnJmdW5jLCBbKDQsNSldKS5uZXh0KQorCisgICAgZGVmIHRlc3RfdGVlKHNlbGYpOgorICAgICAgICBuID0gMjAwCisgICAgICAgIGRlZiBpcmFuZ2Uobik6CisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uobik6CisgICAgICAgICAgICAgICAgeWllbGQgaQorCisgICAgICAgIGEsIGIgPSB0ZWUoW10pICAgICAgICAjIHRlc3QgZW1wdHkgaXRlcmF0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGEpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBbXSkKKworICAgICAgICBhLCBiID0gdGVlKGlyYW5nZShuKSkgIyB0ZXN0IDEwMCUgaW50ZXJsZWF2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoYSxiKSwgemlwKHJhbmdlKG4pLHJhbmdlKG4pKSkKKworICAgICAgICBhLCBiID0gdGVlKGlyYW5nZShuKSkgIyB0ZXN0IDAlIGludGVybGVhdmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhKSwgcmFuZ2UobikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgcmFuZ2UobikpCisKKyAgICAgICAgYSwgYiA9IHRlZShpcmFuZ2UobikpICMgdGVzdCBkZWFsbG9jIG9mIGxlYWRpbmcgaXRlcmF0b3IKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEubmV4dCgpLCBpKQorICAgICAgICBkZWwgYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIHJhbmdlKG4pKQorCisgICAgICAgIGEsIGIgPSB0ZWUoaXJhbmdlKG4pKSAjIHRlc3QgZGVhbGxvYyBvZiB0cmFpbGluZyBpdGVyYXRvcgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5uZXh0KCksIGkpCisgICAgICAgIGRlbCBiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhKSwgcmFuZ2UoMTAwLCBuKSkKKworICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoNSk6ICAgIyB0ZXN0IHJhbmRvbWx5IGludGVybGVhdmVkCisgICAgICAgICAgICBvcmRlciA9IFswXSpuICsgWzFdKm4KKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKG9yZGVyKQorICAgICAgICAgICAgbGlzdHMgPSAoW10sIFtdKQorICAgICAgICAgICAgaXRzID0gdGVlKGlyYW5nZShuKSkKKyAgICAgICAgICAgIGZvciBpIGluIG9yZGVyOgorICAgICAgICAgICAgICAgIHZhbHVlID0gaXRzW2ldLm5leHQoKQorICAgICAgICAgICAgICAgIGxpc3RzW2ldLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdHNbMF0sIHJhbmdlKG4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0c1sxXSwgcmFuZ2UobikpCisKKyAgICAgICAgIyB0ZXN0IGFyZ3VtZW50IGZvcm1hdCBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRlZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0ZWUsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGVlLCBbMSwyXSwgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRlZSwgWzEsMl0sIDMsICd4JykKKworICAgICAgICAjIHRlZSBvYmplY3Qgc2hvdWxkIGJlIGluc3RhbnRpYWJsZQorICAgICAgICBhLCBiID0gdGVlKCdhYmMnKQorICAgICAgICBjID0gdHlwZShhKSgnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMpLCBsaXN0KCdkZWYnKSkKKworICAgICAgICAjIHRlc3QgbG9uZy1sYWdnZWQgYW5kIG11bHRpLXdheSBzcGxpdAorICAgICAgICBhLCBiLCBjID0gdGVlKHhyYW5nZSgyMDAwKSwgMykKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEubmV4dCgpLCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIHJhbmdlKDIwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtjLm5leHQoKSwgYy5uZXh0KCldLCByYW5nZSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGEpLCByYW5nZSgxMDAsMjAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjKSwgcmFuZ2UoMiwyMDAwKSkKKworICAgICAgICAjIHRlc3QgdmFsdWVzIG9mIG4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0ZWUsICdhYmMnLCAnaW52YWxpZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRlZSwgW10sIC0xKQorICAgICAgICBmb3IgbiBpbiB4cmFuZ2UoNSk6CisgICAgICAgICAgICByZXN1bHQgPSB0ZWUoJ2FiYycsIG4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgdHVwbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCBuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAobGlzdCwgcmVzdWx0KSwgW2xpc3QoJ2FiYycpXSpuKQorCisgICAgICAgICMgdGVlIHBhc3MtdGhyb3VnaCB0byBjb3B5YWJsZSBpdGVyYXRvcgorICAgICAgICBhLCBiID0gdGVlKCdhYmMnKQorICAgICAgICBjLCBkID0gdGVlKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGMpCisKKyAgICAgICAgIyB0ZXN0IHRlZV9uZXcKKyAgICAgICAgdDEsIHQyID0gdGVlKCdhYmMnKQorICAgICAgICB0bmV3ID0gdHlwZSh0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0bmV3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRuZXcsIDEwKQorICAgICAgICB0MyA9IHRuZXcodDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaXN0KHQxKSA9PSBsaXN0KHQyKSA9PSBsaXN0KHQzKSA9PSBsaXN0KCdhYmMnKSkKKworICAgICAgICAjIHRlc3QgdGhhdCB0ZWUgb2JqZWN0cyBhcmUgd2VhayByZWZlcmVuY2FibGUKKyAgICAgICAgYSwgYiA9IHRlZSh4cmFuZ2UoMTApKQorICAgICAgICBwID0gcHJveHkoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHAsICdfX2NsYXNzX18nKSwgdHlwZShiKSkKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVmZXJlbmNlRXJyb3IsIGdldGF0dHIsIHAsICdfX2NsYXNzX18nKQorCisgICAgIyBJc3N1ZSAxMzQ1NDogQ3Jhc2ggd2hlbiBkZWxldGluZyBiYWNrd2FyZCBpdGVyYXRvciBmcm9tIHRlZSgpCisgICAgZGVmIHRlc3RfdGVlX2RlbF9iYWNrd2FyZChzZWxmKToKKyAgICAgICAgZm9yd2FyZCwgYmFja3dhcmQgPSB0ZWUocmVwZWF0KE5vbmUsIDIwMDAwMDAwKSkKKyAgICAgICAgYW55KGZvcndhcmQpICAjIGV4aGF1c3QgdGhlIGl0ZXJhdG9yCisgICAgICAgIGRlbCBiYWNrd2FyZAorCisgICAgZGVmIHRlc3RfU3RvcEl0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXppcCgpLm5leHQpCisKKyAgICAgICAgZm9yIGYgaW4gKGNoYWluLCBjeWNsZSwgaXppcCwgZ3JvdXBieSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBmKFtdKS5uZXh0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgZihTdG9wTm93KCkpLm5leHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXNsaWNlKFtdLCBOb25lKS5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBpc2xpY2UoU3RvcE5vdygpLCBOb25lKS5uZXh0KQorCisgICAgICAgIHAsIHEgPSB0ZWUoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHAubmV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgcS5uZXh0KQorICAgICAgICBwLCBxID0gdGVlKFN0b3BOb3coKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgcC5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBxLm5leHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgcmVwZWF0KE5vbmUsIDApLm5leHQpCisKKyAgICAgICAgZm9yIGYgaW4gKGlmaWx0ZXIsIGlmaWx0ZXJmYWxzZSwgaW1hcCwgdGFrZXdoaWxlLCBkcm9wd2hpbGUsIHN0YXJtYXApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgZihsYW1iZGEgeDp4LCBbXSkubmV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGYobGFtYmRhIHg6eCwgU3RvcE5vdygpKS5uZXh0KQorCitjbGFzcyBUZXN0RXhhbXBsZXModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2hhaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihjaGFpbignQUJDJywgJ0RFRicpKSwgJ0FCQ0RFRicpCisKKyAgICBkZWYgdGVzdF9jaGFpbl9mcm9tX2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oY2hhaW4uZnJvbV9pdGVyYWJsZShbJ0FCQycsICdERUYnXSkpLCAnQUJDREVGJykKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbWJpbmF0aW9ucygnQUJDRCcsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdBJywnQicpLCAoJ0EnLCdDJyksICgnQScsJ0QnKSwgKCdCJywnQycpLCAoJ0InLCdEJyksICgnQycsJ0QnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21iaW5hdGlvbnMocmFuZ2UoNCksIDMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKDAsMSwyKSwgKDAsMSwzKSwgKDAsMiwzKSwgKDEsMiwzKV0pCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCdBQkMnLCAyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnQScsJ0EnKSwgKCdBJywnQicpLCAoJ0EnLCdDJyksICgnQicsJ0InKSwgKCdCJywnQycpLCAoJ0MnLCdDJyldKQorCisgICAgZGVmIHRlc3RfY29tcHJlc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcygnQUJDREVGJywgWzEsMCwxLDAsMSwxXSkpLCBsaXN0KCdBQ0VGJykpCisKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZShjb3VudCgxMCksIDUpKSwgWzEwLCAxMSwgMTIsIDEzLCAxNF0pCisKKyAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZShjeWNsZSgnQUJDRCcpLCAxMikpLCBsaXN0KCdBQkNEQUJDREFCQ0QnKSkKKworICAgIGRlZiB0ZXN0X2Ryb3B3aGlsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRyb3B3aGlsZShsYW1iZGEgeDogeDw1LCBbMSw0LDYsNCwxXSkpLCBbNiw0LDFdKQorCisgICAgZGVmIHRlc3RfZ3JvdXBieShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBmb3IgaywgZyBpbiBncm91cGJ5KCdBQUFBQkJCQ0NEQUFCQkInKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCgnQUJDREFCJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhsaXN0KGcpKSBmb3IgaywgZyBpbiBncm91cGJ5KCdBQUFBQkJCQ0NEJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0KCdBQUFBJyksIGxpc3QoJ0JCQicpLCBsaXN0KCdDQycpLCBsaXN0KCdEJyldKQorCisgICAgZGVmIHRlc3RfaWZpbHRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlmaWx0ZXIobGFtYmRhIHg6IHglMiwgcmFuZ2UoMTApKSksIFsxLDMsNSw3LDldKQorCisgICAgZGVmIHRlc3RfaWZpbHRlcmZhbHNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaWZpbHRlcmZhbHNlKGxhbWJkYSB4OiB4JTIsIHJhbmdlKDEwKSkpLCBbMCwyLDQsNiw4XSkKKworICAgIGRlZiB0ZXN0X2ltYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpbWFwKHBvdywgKDIsMywxMCksICg1LDIsMykpKSwgWzMyLCA5LCAxMDAwXSkKKworICAgIGRlZiB0ZXN0X2lzbGljZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZSgnQUJDREVGRycsIDIpKSwgbGlzdCgnQUInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZSgnQUJDREVGRycsIDIsIDQpKSwgbGlzdCgnQ0QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZSgnQUJDREVGRycsIDIsIE5vbmUpKSwgbGlzdCgnQ0RFRkcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZSgnQUJDREVGRycsIDAsIE5vbmUsIDIpKSwgbGlzdCgnQUNFRycpKQorCisgICAgZGVmIHRlc3RfaXppcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXAoJ0FCQ0QnLCAneHknKSksIFsoJ0EnLCAneCcpLCAoJ0InLCAneScpXSkKKworICAgIGRlZiB0ZXN0X2l6aXBfbG9uZ2VzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXBfbG9uZ2VzdCgnQUJDRCcsICd4eScsIGZpbGx2YWx1ZT0nLScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdBJywgJ3gnKSwgKCdCJywgJ3knKSwgKCdDJywgJy0nKSwgKCdEJywgJy0nKV0pCisKKyAgICBkZWYgdGVzdF9wZXJtdXRhdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwZXJtdXRhdGlvbnMoJ0FCQ0QnLCAyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHR1cGxlLCAnQUIgQUMgQUQgQkEgQkMgQkQgQ0EgQ0IgQ0QgREEgREIgREMnLnNwbGl0KCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGVybXV0YXRpb25zKHJhbmdlKDMpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygwLDEsMiksICgwLDIsMSksICgxLDAsMiksICgxLDIsMCksICgyLDAsMSksICgyLDEsMCldKQorCisgICAgZGVmIHRlc3RfcHJvZHVjdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHByb2R1Y3QoJ0FCQ0QnLCAneHknKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHR1cGxlLCAnQXggQXkgQnggQnkgQ3ggQ3kgRHggRHknLnNwbGl0KCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocHJvZHVjdChyYW5nZSgyKSwgcmVwZWF0PTMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwwLDApLCAoMCwwLDEpLCAoMCwxLDApLCAoMCwxLDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgxLDAsMCksICgxLDAsMSksICgxLDEsMCksICgxLDEsMSldKQorCisgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmVwZWF0KDEwLCAzKSksIFsxMCwgMTAsIDEwXSkKKworICAgIGRlZiB0ZXN0X3N0YXBtYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdGFybWFwKHBvdywgWygyLDUpLCAoMywyKSwgKDEwLDMpXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFszMiwgOSwgMTAwMF0pCisKKyAgICBkZWYgdGVzdF90YWtld2hpbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh0YWtld2hpbGUobGFtYmRhIHg6IHg8NSwgWzEsNCw2LDQsMV0pKSwgWzEsNF0pCisKKworY2xhc3MgVGVzdEdDKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBtYWtlY3ljbGUoc2VsZiwgaXRlcmF0b3IsIGNvbnRhaW5lcik6CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoaXRlcmF0b3IpCisgICAgICAgIGl0ZXJhdG9yLm5leHQoKQorICAgICAgICBkZWwgY29udGFpbmVyLCBpdGVyYXRvcgorCisgICAgZGVmIHRlc3RfY2hhaW4oc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShjaGFpbihhKSwgYSkKKworICAgIGRlZiB0ZXN0X2NoYWluX2Zyb21faXRlcmFibGUoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShjaGFpbi5mcm9tX2l0ZXJhYmxlKFthXSksIGEpCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShjb21iaW5hdGlvbnMoWzEsMixhLDNdLCAzKSwgYSkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoWzEsMixhLDNdLCAzKSwgYSkKKworICAgIGRlZiB0ZXN0X2NvbXByZXNzKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMF0pLCBhKQorCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBJbnQgPSB0eXBlKCdJbnQnLCAoaW50LCksIGRpY3QoeD1hKSkKKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoY291bnQoSW50KDApLCBJbnQoMSkpLCBhKQorCisgICAgZGVmIHRlc3RfY3ljbGUoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShjeWNsZShbYV0qMiksIGEpCisKKyAgICBkZWYgdGVzdF9kcm9wd2hpbGUoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShkcm9wd2hpbGUoYm9vbCwgWzAsIGEsIGFdKSwgYSkKKworICAgIGRlZiB0ZXN0X2dyb3VwYnkoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShncm91cGJ5KFthXSoyLCBsYW1iZGEgeDp4KSwgYSkKKworICAgIGRlZiB0ZXN0X2lzc3VlMjI0NihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyMjQ2IC0tIHRoZSBfZ3JvdXBlciBpdGVyYXRvciB3YXMgbm90IGluY2x1ZGVkIGluIEdDCisgICAgICAgIG4gPSAxMAorICAgICAgICBrZXlmdW5jID0gbGFtYmRhIHg6IHgKKyAgICAgICAgZm9yIGksIGogaW4gZ3JvdXBieSh4cmFuZ2UobiksIGtleT1rZXlmdW5jKToKKyAgICAgICAgICAgIGtleWZ1bmMuX19kaWN0X18uc2V0ZGVmYXVsdCgneCcsW10pLmFwcGVuZChqKQorCisgICAgZGVmIHRlc3RfaWZpbHRlcihzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKGlmaWx0ZXIobGFtYmRhIHg6VHJ1ZSwgW2FdKjIpLCBhKQorCisgICAgZGVmIHRlc3RfaWZpbHRlcmZhbHNlKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoaWZpbHRlcmZhbHNlKGxhbWJkYSB4OkZhbHNlLCBhKSwgYSkKKworICAgIGRlZiB0ZXN0X2l6aXAoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShpemlwKFthXSoyLCBbYV0qMyksIGEpCisKKyAgICBkZWYgdGVzdF9pemlwX2xvbmdlc3Qoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShpemlwX2xvbmdlc3QoW2FdKjIsIFthXSozKSwgYSkKKyAgICAgICAgYiA9IFthLCBOb25lXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShpemlwX2xvbmdlc3QoW2FdKjIsIFthXSozLCBmaWxsdmFsdWU9YiksIGEpCisKKyAgICBkZWYgdGVzdF9pbWFwKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoaW1hcChsYW1iZGEgeDp4LCBbYV0qMiksIGEpCisKKyAgICBkZWYgdGVzdF9pc2xpY2Uoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShpc2xpY2UoW2FdKjIsIE5vbmUpLCBhKQorCisgICAgZGVmIHRlc3RfcGVybXV0YXRpb25zKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUocGVybXV0YXRpb25zKFsxLDIsYSwzXSwgMyksIGEpCisKKyAgICBkZWYgdGVzdF9wcm9kdWN0KHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUocHJvZHVjdChbMSwyLGEsM10sIHJlcGVhdD0zKSwgYSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKHJlcGVhdChhKSwgYSkKKworICAgIGRlZiB0ZXN0X3N0YXJtYXAoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShzdGFybWFwKGxhbWJkYSAqdDogdCwgWyhhLGEpXSoyKSwgYSkKKworICAgIGRlZiB0ZXN0X3Rha2V3aGlsZShzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKHRha2V3aGlsZShib29sLCBbMSwgMCwgYSwgYV0pLCBhKQorCitkZWYgUihzZXFuKToKKyAgICAnUmVndWxhciBnZW5lcmF0b3InCisgICAgZm9yIGkgaW4gc2VxbjoKKyAgICAgICAgeWllbGQgaQorCitjbGFzcyBHOgorICAgICdTZXF1ZW5jZSB1c2luZyBfX2dldGl0ZW1fXycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIHJldHVybiBzZWxmLnNlcW5baV0KKworY2xhc3MgSToKKyAgICAnU2VxdWVuY2UgdXNpbmcgaXRlcmF0b3IgcHJvdG9jb2wnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaSA+PSBsZW4oc2VsZi5zZXFuKTogcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICB2ID0gc2VsZi5zZXFuW3NlbGYuaV0KKyAgICAgICAgc2VsZi5pICs9IDEKKyAgICAgICAgcmV0dXJuIHYKKworY2xhc3MgSWc6CisgICAgJ1NlcXVlbmNlIHVzaW5nIGl0ZXJhdG9yIHByb3RvY29sIGRlZmluZWQgd2l0aCBhIGdlbmVyYXRvcicKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZm9yIHZhbCBpbiBzZWxmLnNlcW46CisgICAgICAgICAgICB5aWVsZCB2YWwKKworY2xhc3MgWDoKKyAgICAnTWlzc2luZyBfX2dldGl0ZW1fXyBhbmQgX19pdGVyX18nCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pID49IGxlbihzZWxmLnNlcW4pOiByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHYgPSBzZWxmLnNlcW5bc2VsZi5pXQorICAgICAgICBzZWxmLmkgKz0gMQorICAgICAgICByZXR1cm4gdgorCitjbGFzcyBOOgorICAgICdJdGVyYXRvciBtaXNzaW5nIG5leHQoKScKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworY2xhc3MgRToKKyAgICAnVGVzdCBwcm9wYWdhdGlvbiBvZiBleGNlcHRpb25zJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAzIC8vIDAKKworY2xhc3MgUzoKKyAgICAnVGVzdCBpbW1lZGlhdGUgc3RvcCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHBhc3MKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworZGVmIEwoc2Vxbik6CisgICAgJ1Rlc3QgbXVsdGlwbGUgdGllcnMgb2YgaXRlcmF0b3JzJworICAgIHJldHVybiBjaGFpbihpbWFwKGxhbWJkYSB4OngsIFIoSWcoRyhzZXFuKSkpKSkKKworCitjbGFzcyBUZXN0VmFyaW91c0l0ZXJhdG9yQXJncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jaGFpbihzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNoYWluKGcocykpKSwgbGlzdChnKHMpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY2hhaW4oZyhzKSwgZyhzKSkpLCBsaXN0KGcocykpK2xpc3QoZyhzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGNoYWluKFgocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBjaGFpbihOKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBjaGFpbihFKHMpKSkKKworICAgIGRlZiB0ZXN0X2NvbXByZXNzKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgorICAgICAgICAgICAgbiA9IGxlbihzKQorICAgICAgICAgICAgZm9yIGcgaW4gKEcsIEksIElnLCBTLCBMLCBSKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoZyhzKSwgcmVwZWF0KDEpKSksIGxpc3QoZyhzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXByZXNzLCBYKHMpLCByZXBlYXQoMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGNvbXByZXNzKE4ocyksIHJlcGVhdCgxKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgY29tcHJlc3MoRShzKSwgcmVwZWF0KDEpKSkKKworICAgIGRlZiB0ZXN0X3Byb2R1Y3Qoc2VsZik6CisgICAgICAgIGZvciBzIGluICgiMTIzIiwgIiIsIHJhbmdlKDEwMDApLCAoJ2RvJywgMS4yKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByb2R1Y3QsIFgocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByb2R1Y3QsIE4ocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcHJvZHVjdCwgRShzKSkKKworICAgIGRlZiB0ZXN0X2N5Y2xlKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgorICAgICAgICAgICAgZm9yIGcgaW4gKEcsIEksIElnLCBTLCBMLCBSKToKKyAgICAgICAgICAgICAgICB0Z3RsZW4gPSBsZW4ocykgKiAzCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsaXN0KGcocykpKjMKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBsaXN0KGlzbGljZShjeWNsZShnKHMpKSwgdGd0bGVuKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN5Y2xlLCBYKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBjeWNsZShOKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBjeWNsZShFKHMpKSkKKworICAgIGRlZiB0ZXN0X2dyb3VwYnkoc2VsZik6CisgICAgICAgIGZvciBzIGluIChyYW5nZSgxMCksIHJhbmdlKDApLCByYW5nZSgxMDAwKSwgKDcsMTEpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBmb3Igaywgc2IgaW4gZ3JvdXBieShnKHMpKV0sIGxpc3QoZyhzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdyb3VwYnksIFgocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGdyb3VwYnkoTihzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgZ3JvdXBieShFKHMpKSkKKworICAgIGRlZiB0ZXN0X2lmaWx0ZXIoc2VsZik6CisgICAgICAgIGZvciBzIGluIChyYW5nZSgxMCksIHJhbmdlKDApLCByYW5nZSgxMDAwKSwgKDcsMTEpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlmaWx0ZXIoaXNFdmVuLCBnKHMpKSksIGZpbHRlcihpc0V2ZW4sIGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpZmlsdGVyLCBpc0V2ZW4sIFgocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGlmaWx0ZXIoaXNFdmVuLCBOKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBpZmlsdGVyKGlzRXZlbiwgRShzKSkpCisKKyAgICBkZWYgdGVzdF9pZmlsdGVyZmFsc2Uoc2VsZik6CisgICAgICAgIGZvciBzIGluIChyYW5nZSgxMCksIHJhbmdlKDApLCByYW5nZSgxMDAwKSwgKDcsMTEpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlmaWx0ZXJmYWxzZShpc0V2ZW4sIGcocykpKSwgZmlsdGVyKGlzT2RkLCBnKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlcmZhbHNlLCBpc0V2ZW4sIFgocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGlmaWx0ZXJmYWxzZShpc0V2ZW4sIE4ocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIGlmaWx0ZXJmYWxzZShpc0V2ZW4sIEUocykpKQorCisgICAgZGVmIHRlc3RfaXppcChzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXAoZyhzKSkpLCB6aXAoZyhzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXAoZyhzKSwgZyhzKSkpLCB6aXAoZyhzKSwgZyhzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGl6aXAsIFgocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGl6aXAoTihzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgaXppcChFKHMpKSkKKworICAgIGRlZiB0ZXN0X2l6aXBsb25nZXN0KHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgorICAgICAgICAgICAgZm9yIGcgaW4gKEcsIEksIElnLCBTLCBMLCBSKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcF9sb25nZXN0KGcocykpKSwgemlwKGcocykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwX2xvbmdlc3QoZyhzKSwgZyhzKSkpLCB6aXAoZyhzKSwgZyhzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGl6aXBfbG9uZ2VzdCwgWChzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgaXppcF9sb25nZXN0KE4ocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIGl6aXBfbG9uZ2VzdChFKHMpKSkKKworICAgIGRlZiB0ZXN0X2ltYXAoc2VsZik6CisgICAgICAgIGZvciBzIGluIChyYW5nZSgxMCksIHJhbmdlKDApLCByYW5nZSgxMDApLCAoNywxMSksIHhyYW5nZSgyMCw1MCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpbWFwKG9uZWFyZywgZyhzKSkpLCBtYXAob25lYXJnLCBnKHMpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaW1hcChvcGVyYXRvci5wb3csIGcocyksIGcocykpKSwgbWFwKG9wZXJhdG9yLnBvdywgZyhzKSwgZyhzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGltYXAsIG9uZWFyZywgWChzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgaW1hcChvbmVhcmcsIE4ocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIGltYXAob25lYXJnLCBFKHMpKSkKKworICAgIGRlZiB0ZXN0X2lzbGljZShzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCIxMjM0NSIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgorICAgICAgICAgICAgZm9yIGcgaW4gKEcsIEksIElnLCBTLCBMLCBSKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKGcocyksMSxOb25lLDIpKSwgbGlzdChnKHMpKVsxOjoyXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXNsaWNlLCBYKHMpLCAxMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgaXNsaWNlKE4ocyksIDEwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBpc2xpY2UoRShzKSwgMTApKQorCisgICAgZGVmIHRlc3Rfc3Rhcm1hcChzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKHJhbmdlKDEwKSwgcmFuZ2UoMCksIHJhbmdlKDEwMCksICg3LDExKSwgeHJhbmdlKDIwLDUwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc3MgPSB6aXAocywgcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3Rhcm1hcChvcGVyYXRvci5wb3csIGcoc3MpKSksIG1hcChvcGVyYXRvci5wb3csIGcocyksIGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdGFybWFwLCBvcGVyYXRvci5wb3csIFgoc3MpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBzdGFybWFwKG9wZXJhdG9yLnBvdywgTihzcykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIHN0YXJtYXAob3BlcmF0b3IucG93LCBFKHNzKSkpCisKKyAgICBkZWYgdGVzdF90YWtld2hpbGUoc2VsZik6CisgICAgICAgIGZvciBzIGluIChyYW5nZSgxMCksIHJhbmdlKDApLCByYW5nZSgxMDAwKSwgKDcsMTEpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgdGd0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZWxlbSBpbiBnKHMpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNFdmVuKGVsZW0pOiBicmVhaworICAgICAgICAgICAgICAgICAgICB0Z3QuYXBwZW5kKGVsZW0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHRha2V3aGlsZShpc0V2ZW4sIGcocykpKSwgdGd0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0YWtld2hpbGUsIGlzRXZlbiwgWChzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgdGFrZXdoaWxlKGlzRXZlbiwgTihzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgdGFrZXdoaWxlKGlzRXZlbiwgRShzKSkpCisKKyAgICBkZWYgdGVzdF9kcm9wd2hpbGUoc2VsZik6CisgICAgICAgIGZvciBzIGluIChyYW5nZSgxMCksIHJhbmdlKDApLCByYW5nZSgxMDAwKSwgKDcsMTEpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgdGd0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZWxlbSBpbiBnKHMpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdGd0IGFuZCBpc09kZChlbGVtKTogY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdGd0LmFwcGVuZChlbGVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkcm9wd2hpbGUoaXNPZGQsIGcocykpKSwgdGd0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkcm9wd2hpbGUsIGlzT2RkLCBYKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBkcm9wd2hpbGUoaXNPZGQsIE4ocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIGRyb3B3aGlsZShpc09kZCwgRShzKSkpCisKKyAgICBkZWYgdGVzdF90ZWUoc2VsZik6CisgICAgICAgIGZvciBzIGluICgiMTIzIiwgIiIsIHJhbmdlKDEwMDApLCAoJ2RvJywgMS4yKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIGl0MSwgaXQyID0gdGVlKGcocykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0MSksIGxpc3QoZyhzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0MiksIGxpc3QoZyhzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRlZSwgWChzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgdGVlKE4ocykpWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIHRlZShFKHMpKVswXSkKKworY2xhc3MgTGVuZ3RoVHJhbnNwYXJlbmN5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKKyAgICAgICAgZnJvbSB0ZXN0LnRlc3RfaXRlcmxlbiBpbXBvcnQgbGVuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcGVhdChOb25lLCA1MCkpLCA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJlcGVhdChOb25lKSkKKworY2xhc3MgUmVncmVzc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NmXzc5MzgyNihzZWxmKToKKyAgICAgICAgIyBGaXggQXJtaW4gUmlnbydzIHN1Y2Nlc3NmdWwgZWZmb3J0cyB0byB3cmVhayBoYXZvYworCisgICAgICAgIGRlZiBtdXRhdGluZ3R1cGxlKHR1cGxlMSwgZiwgdHVwbGUyKToKKyAgICAgICAgICAgICMgdGhpcyBidWlsZHMgYSB0dXBsZSB0IHdoaWNoIGlzIGEgY29weSBvZiB0dXBsZTEsCisgICAgICAgICAgICAjIHRoZW4gY2FsbHMgZih0KSwgdGhlbiBtdXRhdGVzIHQgdG8gYmUgZXF1YWwgdG8gdHVwbGUyCisgICAgICAgICAgICAjIChuZWVkcyBsZW4odHVwbGUxKSA9PSBsZW4odHVwbGUyKSkuCisgICAgICAgICAgICBkZWYgZyh2YWx1ZSwgZmlyc3Q9WzFdKToKKyAgICAgICAgICAgICAgICBpZiBmaXJzdDoKKyAgICAgICAgICAgICAgICAgICAgZGVsIGZpcnN0WzpdCisgICAgICAgICAgICAgICAgICAgIGYoei5uZXh0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgICAgICBpdGVtcyA9IGxpc3QodHVwbGUyKQorICAgICAgICAgICAgaXRlbXNbMToxXSA9IGxpc3QodHVwbGUxKQorICAgICAgICAgICAgZ2VuID0gaW1hcChnLCBpdGVtcykKKyAgICAgICAgICAgIHogPSBpemlwKCpbZ2VuXSpsZW4odHVwbGUxKSkKKyAgICAgICAgICAgIHoubmV4dCgpCisKKyAgICAgICAgZGVmIGYodCk6CisgICAgICAgICAgICBnbG9iYWwgVAorICAgICAgICAgICAgVCA9IHQKKyAgICAgICAgICAgIGZpcnN0WzpdID0gbGlzdChUKQorCisgICAgICAgIGZpcnN0ID0gW10KKyAgICAgICAgbXV0YXRpbmd0dXBsZSgoMSwyLDMpLCBmLCAoNCw1LDYpKQorICAgICAgICBzZWNvbmQgPSBsaXN0KFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3QsIHNlY29uZCkKKworCisgICAgZGVmIHRlc3Rfc2ZfOTUwMDU3KHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGNoYWluKCkgYW5kIGN5Y2xlKCkgY2F0Y2ggZXhjZXB0aW9ucyBpbW1lZGlhdGVseQorICAgICAgICAjIHJhdGhlciB0aGFuIHdoZW4gc2hpZnRpbmcgYmV0d2VlbiBpbnB1dCBzb3VyY2VzCisKKyAgICAgICAgZGVmIGdlbjEoKToKKyAgICAgICAgICAgIGhpc3QuYXBwZW5kKDApCisgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICBoaXN0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IKKyAgICAgICAgICAgIGhpc3QuYXBwZW5kKDIpCisKKyAgICAgICAgZGVmIGdlbjIoeCk6CisgICAgICAgICAgICBoaXN0LmFwcGVuZCgzKQorICAgICAgICAgICAgeWllbGQgMgorICAgICAgICAgICAgaGlzdC5hcHBlbmQoNCkKKyAgICAgICAgICAgIGlmIHg6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCisgICAgICAgIGhpc3QgPSBbXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbGlzdCwgY2hhaW4oZ2VuMSgpLCBnZW4yKEZhbHNlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGlzdCwgWzAsMV0pCisKKyAgICAgICAgaGlzdCA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBsaXN0LCBjaGFpbihnZW4xKCksIGdlbjIoVHJ1ZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhpc3QsIFswLDFdKQorCisgICAgICAgIGhpc3QgPSBbXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbGlzdCwgY3ljbGUoZ2VuMSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoaXN0LCBbMCwxXSkKKworY2xhc3MgU3ViY2xhc3NXaXRoS3dhcmdzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfa2V5d29yZHNfaW5fc3ViY2xhc3Moc2VsZik6CisgICAgICAgICMgY291bnQgaXMgbm90IHN1YmNsYXNzYWJsZS4uLgorICAgICAgICBmb3IgY2xzIGluIChyZXBlYXQsIGl6aXAsIGlmaWx0ZXIsIGlmaWx0ZXJmYWxzZSwgY2hhaW4sIGltYXAsCisgICAgICAgICAgICAgICAgICAgIHN0YXJtYXAsIGlzbGljZSwgdGFrZXdoaWxlLCBkcm9wd2hpbGUsIGN5Y2xlLCBjb21wcmVzcyk6CisgICAgICAgICAgICBjbGFzcyBTdWJjbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXdhcmc9Tm9uZSwgKmFyZ3MpOgorICAgICAgICAgICAgICAgICAgICBjbHMuX19pbml0X18oc2VsZiwgKmFyZ3MpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgU3ViY2xhc3MobmV3YXJnPTEpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgIyB3ZSBleHBlY3QgdHlwZSBlcnJvcnMgYmVjYXVzZSBvZiB3cm9uZyBhcmd1bWVudCBjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oImRvZXMgbm90IHRha2Uga2V5d29yZCBhcmd1bWVudHMiLCBlcnIuYXJnc1swXSkKKworCitsaWJyZWZ0ZXN0ID0gIiIiIERvY3Rlc3QgZm9yIGV4YW1wbGVzIGluIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZTogbGliaXRlcnRvb2xzLnRleAorCisKKz4+PiBhbW91bnRzID0gWzEyMC4xNSwgNzY0LjA1LCA4MjMuMTRdCis+Pj4gZm9yIGNoZWNrbnVtLCBhbW91bnQgaW4gaXppcChjb3VudCgxMjAwKSwgYW1vdW50cyk6CisuLi4gICAgIHByaW50ICdDaGVjayAlZCBpcyBmb3IgJCUuMmYnICUgKGNoZWNrbnVtLCBhbW91bnQpCisuLi4KK0NoZWNrIDEyMDAgaXMgZm9yICQxMjAuMTUKK0NoZWNrIDEyMDEgaXMgZm9yICQ3NjQuMDUKK0NoZWNrIDEyMDIgaXMgZm9yICQ4MjMuMTQKKworPj4+IGltcG9ydCBvcGVyYXRvcgorPj4+IGZvciBjdWJlIGluIGltYXAob3BlcmF0b3IucG93LCB4cmFuZ2UoMSw0KSwgcmVwZWF0KDMpKToKKy4uLiAgICBwcmludCBjdWJlCisuLi4KKzEKKzgKKzI3CisKKz4+PiByZXBvcnRsaW5lcyA9IFsnRXVyb1B5dGhvbicsICdSb3N0ZXInLCAnJywgJ2FsZXgnLCAnJywgJ2xhdXJhJywgJycsICdtYXJ0aW4nLCAnJywgJ3dhbHRlcicsICcnLCAnc2FtdWVsZSddCis+Pj4gZm9yIG5hbWUgaW4gaXNsaWNlKHJlcG9ydGxpbmVzLCAzLCBOb25lLCAyKToKKy4uLiAgICBwcmludCBuYW1lLnRpdGxlKCkKKy4uLgorQWxleAorTGF1cmEKK01hcnRpbgorV2FsdGVyCitTYW11ZWxlCisKKz4+PiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyCis+Pj4gZCA9IGRpY3QoYT0xLCBiPTIsIGM9MSwgZD0yLCBlPTEsIGY9MiwgZz0zKQorPj4+IGRpID0gc29ydGVkKHNvcnRlZChkLml0ZXJpdGVtcygpKSwga2V5PWl0ZW1nZXR0ZXIoMSkpCis+Pj4gZm9yIGssIGcgaW4gZ3JvdXBieShkaSwgaXRlbWdldHRlcigxKSk6CisuLi4gICAgIHByaW50IGssIG1hcChpdGVtZ2V0dGVyKDApLCBnKQorLi4uCisxIFsnYScsICdjJywgJ2UnXQorMiBbJ2InLCAnZCcsICdmJ10KKzMgWydnJ10KKworIyBGaW5kIHJ1bnMgb2YgY29uc2VjdXRpdmUgbnVtYmVycyB1c2luZyBncm91cGJ5LiAgVGhlIGtleSB0byB0aGUgc29sdXRpb24KKyMgaXMgZGlmZmVyZW5jaW5nIHdpdGggYSByYW5nZSBzbyB0aGF0IGNvbnNlY3V0aXZlIG51bWJlcnMgYWxsIGFwcGVhciBpbgorIyBzYW1lIGdyb3VwLgorPj4+IGRhdGEgPSBbIDEsICA0LDUsNiwgMTAsIDE1LDE2LDE3LDE4LCAyMiwgMjUsMjYsMjcsMjhdCis+Pj4gZm9yIGssIGcgaW4gZ3JvdXBieShlbnVtZXJhdGUoZGF0YSksIGxhbWJkYSB0OnRbMF0tdFsxXSk6CisuLi4gICAgIHByaW50IG1hcChvcGVyYXRvci5pdGVtZ2V0dGVyKDEpLCBnKQorLi4uCitbMV0KK1s0LCA1LCA2XQorWzEwXQorWzE1LCAxNiwgMTcsIDE4XQorWzIyXQorWzI1LCAyNiwgMjcsIDI4XQorCis+Pj4gZGVmIHRha2UobiwgaXRlcmFibGUpOgorLi4uICAgICAiUmV0dXJuIGZpcnN0IG4gaXRlbXMgb2YgdGhlIGl0ZXJhYmxlIGFzIGEgbGlzdCIKKy4uLiAgICAgcmV0dXJuIGxpc3QoaXNsaWNlKGl0ZXJhYmxlLCBuKSkKKworPj4+IGRlZiBlbnVtZXJhdGUoaXRlcmFibGUsIHN0YXJ0PTApOgorLi4uICAgICByZXR1cm4gaXppcChjb3VudChzdGFydCksIGl0ZXJhYmxlKQorCis+Pj4gZGVmIHRhYnVsYXRlKGZ1bmN0aW9uLCBzdGFydD0wKToKKy4uLiAgICAgIlJldHVybiBmdW5jdGlvbigwKSwgZnVuY3Rpb24oMSksIC4uLiIKKy4uLiAgICAgcmV0dXJuIGltYXAoZnVuY3Rpb24sIGNvdW50KHN0YXJ0KSkKKworPj4+IGRlZiBudGgoaXRlcmFibGUsIG4sIGRlZmF1bHQ9Tm9uZSk6CisuLi4gICAgICJSZXR1cm5zIHRoZSBudGggaXRlbSBvciBhIGRlZmF1bHQgdmFsdWUiCisuLi4gICAgIHJldHVybiBuZXh0KGlzbGljZShpdGVyYWJsZSwgbiwgTm9uZSksIGRlZmF1bHQpCisKKz4+PiBkZWYgcXVhbnRpZnkoaXRlcmFibGUsIHByZWQ9Ym9vbCk6CisuLi4gICAgICJDb3VudCBob3cgbWFueSB0aW1lcyB0aGUgcHJlZGljYXRlIGlzIHRydWUiCisuLi4gICAgIHJldHVybiBzdW0oaW1hcChwcmVkLCBpdGVyYWJsZSkpCisKKz4+PiBkZWYgcGFkbm9uZShpdGVyYWJsZSk6CisuLi4gICAgICJSZXR1cm5zIHRoZSBzZXF1ZW5jZSBlbGVtZW50cyBhbmQgdGhlbiByZXR1cm5zIE5vbmUgaW5kZWZpbml0ZWx5IgorLi4uICAgICByZXR1cm4gY2hhaW4oaXRlcmFibGUsIHJlcGVhdChOb25lKSkKKworPj4+IGRlZiBuY3ljbGVzKGl0ZXJhYmxlLCBuKToKKy4uLiAgICAgIlJldHVybnMgdGhlIHNlcXVlbmNlIGVsZW1lbnRzIG4gdGltZXMiCisuLi4gICAgIHJldHVybiBjaGFpbigqcmVwZWF0KGl0ZXJhYmxlLCBuKSkKKworPj4+IGRlZiBkb3Rwcm9kdWN0KHZlYzEsIHZlYzIpOgorLi4uICAgICByZXR1cm4gc3VtKGltYXAob3BlcmF0b3IubXVsLCB2ZWMxLCB2ZWMyKSkKKworPj4+IGRlZiBmbGF0dGVuKGxpc3RPZkxpc3RzKToKKy4uLiAgICAgcmV0dXJuIGxpc3QoY2hhaW4uZnJvbV9pdGVyYWJsZShsaXN0T2ZMaXN0cykpCisKKz4+PiBkZWYgcmVwZWF0ZnVuYyhmdW5jLCB0aW1lcz1Ob25lLCAqYXJncyk6CisuLi4gICAgICJSZXBlYXQgY2FsbHMgdG8gZnVuYyB3aXRoIHNwZWNpZmllZCBhcmd1bWVudHMuIgorLi4uICAgICAiICAgRXhhbXBsZTogIHJlcGVhdGZ1bmMocmFuZG9tLnJhbmRvbSkiCisuLi4gICAgIGlmIHRpbWVzIGlzIE5vbmU6CisuLi4gICAgICAgICByZXR1cm4gc3Rhcm1hcChmdW5jLCByZXBlYXQoYXJncykpCisuLi4gICAgIGVsc2U6CisuLi4gICAgICAgICByZXR1cm4gc3Rhcm1hcChmdW5jLCByZXBlYXQoYXJncywgdGltZXMpKQorCis+Pj4gZGVmIHBhaXJ3aXNlKGl0ZXJhYmxlKToKKy4uLiAgICAgInMgLT4gKHMwLHMxKSwgKHMxLHMyKSwgKHMyLCBzMyksIC4uLiIKKy4uLiAgICAgYSwgYiA9IHRlZShpdGVyYWJsZSkKKy4uLiAgICAgZm9yIGVsZW0gaW4gYjoKKy4uLiAgICAgICAgIGJyZWFrCisuLi4gICAgIHJldHVybiBpemlwKGEsIGIpCisKKz4+PiBkZWYgZ3JvdXBlcihuLCBpdGVyYWJsZSwgZmlsbHZhbHVlPU5vbmUpOgorLi4uICAgICAiZ3JvdXBlcigzLCAnQUJDREVGRycsICd4JykgLS0+IEFCQyBERUYgR3h4IgorLi4uICAgICBhcmdzID0gW2l0ZXIoaXRlcmFibGUpXSAqIG4KKy4uLiAgICAgcmV0dXJuIGl6aXBfbG9uZ2VzdChmaWxsdmFsdWU9ZmlsbHZhbHVlLCAqYXJncykKKworPj4+IGRlZiByb3VuZHJvYmluKCppdGVyYWJsZXMpOgorLi4uICAgICAicm91bmRyb2JpbignQUJDJywgJ0QnLCAnRUYnKSAtLT4gQSBEIEUgQiBGIEMiCisuLi4gICAgICMgUmVjaXBlIGNyZWRpdGVkIHRvIEdlb3JnZSBTYWtraXMKKy4uLiAgICAgcGVuZGluZyA9IGxlbihpdGVyYWJsZXMpCisuLi4gICAgIG5leHRzID0gY3ljbGUoaXRlcihpdCkubmV4dCBmb3IgaXQgaW4gaXRlcmFibGVzKQorLi4uICAgICB3aGlsZSBwZW5kaW5nOgorLi4uICAgICAgICAgdHJ5OgorLi4uICAgICAgICAgICAgIGZvciBuZXh0IGluIG5leHRzOgorLi4uICAgICAgICAgICAgICAgICB5aWVsZCBuZXh0KCkKKy4uLiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorLi4uICAgICAgICAgICAgIHBlbmRpbmcgLT0gMQorLi4uICAgICAgICAgICAgIG5leHRzID0gY3ljbGUoaXNsaWNlKG5leHRzLCBwZW5kaW5nKSkKKworPj4+IGRlZiBwb3dlcnNldChpdGVyYWJsZSk6CisuLi4gICAgICJwb3dlcnNldChbMSwyLDNdKSAtLT4gKCkgKDEsKSAoMiwpICgzLCkgKDEsMikgKDEsMykgKDIsMykgKDEsMiwzKSIKKy4uLiAgICAgcyA9IGxpc3QoaXRlcmFibGUpCisuLi4gICAgIHJldHVybiBjaGFpbi5mcm9tX2l0ZXJhYmxlKGNvbWJpbmF0aW9ucyhzLCByKSBmb3IgciBpbiByYW5nZShsZW4ocykrMSkpCisKKz4+PiBkZWYgdW5pcXVlX2V2ZXJzZWVuKGl0ZXJhYmxlLCBrZXk9Tm9uZSk6CisuLi4gICAgICJMaXN0IHVuaXF1ZSBlbGVtZW50cywgcHJlc2VydmluZyBvcmRlci4gUmVtZW1iZXIgYWxsIGVsZW1lbnRzIGV2ZXIgc2Vlbi4iCisuLi4gICAgICMgdW5pcXVlX2V2ZXJzZWVuKCdBQUFBQkJCQ0NEQUFCQkInKSAtLT4gQSBCIEMgRAorLi4uICAgICAjIHVuaXF1ZV9ldmVyc2VlbignQUJCQ2NBRCcsIHN0ci5sb3dlcikgLS0+IEEgQiBDIEQKKy4uLiAgICAgc2VlbiA9IHNldCgpCisuLi4gICAgIHNlZW5fYWRkID0gc2Vlbi5hZGQKKy4uLiAgICAgaWYga2V5IGlzIE5vbmU6CisuLi4gICAgICAgICBmb3IgZWxlbWVudCBpbiBpdGVyYWJsZToKKy4uLiAgICAgICAgICAgICBpZiBlbGVtZW50IG5vdCBpbiBzZWVuOgorLi4uICAgICAgICAgICAgICAgICBzZWVuX2FkZChlbGVtZW50KQorLi4uICAgICAgICAgICAgICAgICB5aWVsZCBlbGVtZW50CisuLi4gICAgIGVsc2U6CisuLi4gICAgICAgICBmb3IgZWxlbWVudCBpbiBpdGVyYWJsZToKKy4uLiAgICAgICAgICAgICBrID0ga2V5KGVsZW1lbnQpCisuLi4gICAgICAgICAgICAgaWYgayBub3QgaW4gc2VlbjoKKy4uLiAgICAgICAgICAgICAgICAgc2Vlbl9hZGQoaykKKy4uLiAgICAgICAgICAgICAgICAgeWllbGQgZWxlbWVudAorCis+Pj4gZGVmIHVuaXF1ZV9qdXN0c2VlbihpdGVyYWJsZSwga2V5PU5vbmUpOgorLi4uICAgICAiTGlzdCB1bmlxdWUgZWxlbWVudHMsIHByZXNlcnZpbmcgb3JkZXIuIFJlbWVtYmVyIG9ubHkgdGhlIGVsZW1lbnQganVzdCBzZWVuLiIKKy4uLiAgICAgIyB1bmlxdWVfanVzdHNlZW4oJ0FBQUFCQkJDQ0RBQUJCQicpIC0tPiBBIEIgQyBEIEEgQgorLi4uICAgICAjIHVuaXF1ZV9qdXN0c2VlbignQUJCQ2NBRCcsIHN0ci5sb3dlcikgLS0+IEEgQiBDIEEgRAorLi4uICAgICByZXR1cm4gaW1hcChuZXh0LCBpbWFwKGl0ZW1nZXR0ZXIoMSksIGdyb3VwYnkoaXRlcmFibGUsIGtleSkpKQorCitUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBleGFtcGxlcyBidXQgaXQgdGVzdHMgdG8gbWFrZSBzdXJlIHRoZSBkZWZpbml0aW9ucworcGVyZm9ybSBhcyBwdXJwb3J0ZWQuCisKKz4+PiB0YWtlKDEwLCBjb3VudCgpKQorWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisKKz4+PiBsaXN0KGVudW1lcmF0ZSgnYWJjJykpCitbKDAsICdhJyksICgxLCAnYicpLCAoMiwgJ2MnKV0KKworPj4+IGxpc3QoaXNsaWNlKHRhYnVsYXRlKGxhbWJkYSB4OiAyKngpLCA0KSkKK1swLCAyLCA0LCA2XQorCis+Pj4gbnRoKCdhYmNkZScsIDMpCisnZCcKKworPj4+IG50aCgnYWJjZGUnLCA5KSBpcyBOb25lCitUcnVlCisKKz4+PiBxdWFudGlmeSh4cmFuZ2UoOTkpLCBsYW1iZGEgeDogeCUyPT0wKQorNTAKKworPj4+IGEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dCis+Pj4gZmxhdHRlbihhKQorWzEsIDIsIDMsIDQsIDUsIDZdCisKKz4+PiBsaXN0KHJlcGVhdGZ1bmMocG93LCA1LCAyLCAzKSkKK1s4LCA4LCA4LCA4LCA4XQorCis+Pj4gaW1wb3J0IHJhbmRvbQorPj4+IHRha2UoNSwgaW1hcChpbnQsIHJlcGVhdGZ1bmMocmFuZG9tLnJhbmRvbSkpKQorWzAsIDAsIDAsIDAsIDBdCisKKz4+PiBsaXN0KHBhaXJ3aXNlKCdhYmNkJykpCitbKCdhJywgJ2InKSwgKCdiJywgJ2MnKSwgKCdjJywgJ2QnKV0KKworPj4+IGxpc3QocGFpcndpc2UoW10pKQorW10KKworPj4+IGxpc3QocGFpcndpc2UoJ2EnKSkKK1tdCisKKz4+PiBsaXN0KGlzbGljZShwYWRub25lKCdhYmMnKSwgMCwgNikpCitbJ2EnLCAnYicsICdjJywgTm9uZSwgTm9uZSwgTm9uZV0KKworPj4+IGxpc3QobmN5Y2xlcygnYWJjJywgMykpCitbJ2EnLCAnYicsICdjJywgJ2EnLCAnYicsICdjJywgJ2EnLCAnYicsICdjJ10KKworPj4+IGRvdHByb2R1Y3QoWzEsMiwzXSwgWzQsNSw2XSkKKzMyCisKKz4+PiBsaXN0KGdyb3VwZXIoMywgJ2FiY2RlZmcnLCAneCcpKQorWygnYScsICdiJywgJ2MnKSwgKCdkJywgJ2UnLCAnZicpLCAoJ2cnLCAneCcsICd4JyldCisKKz4+PiBsaXN0KHJvdW5kcm9iaW4oJ2FiYycsICdkJywgJ2VmJykpCitbJ2EnLCAnZCcsICdlJywgJ2InLCAnZicsICdjJ10KKworPj4+IGxpc3QocG93ZXJzZXQoWzEsMiwzXSkpCitbKCksICgxLCksICgyLCksICgzLCksICgxLCAyKSwgKDEsIDMpLCAoMiwgMyksICgxLCAyLCAzKV0KKworPj4+IGFsbChsZW4obGlzdChwb3dlcnNldChyYW5nZShuKSkpKSA9PSAyKipuIGZvciBuIGluIHJhbmdlKDE4KSkKK1RydWUKKworPj4+IGxpc3QocG93ZXJzZXQoJ2FiY2RlJykpID09IHNvcnRlZChzb3J0ZWQoc2V0KHBvd2Vyc2V0KCdhYmNkZScpKSksIGtleT1sZW4pCitUcnVlCisKKz4+PiBsaXN0KHVuaXF1ZV9ldmVyc2VlbignQUFBQUJCQkNDREFBQkJCJykpCitbJ0EnLCAnQicsICdDJywgJ0QnXQorCis+Pj4gbGlzdCh1bmlxdWVfZXZlcnNlZW4oJ0FCQkNjQUQnLCBzdHIubG93ZXIpKQorWydBJywgJ0InLCAnQycsICdEJ10KKworPj4+IGxpc3QodW5pcXVlX2p1c3RzZWVuKCdBQUFBQkJCQ0NEQUFCQkInKSkKK1snQScsICdCJywgJ0MnLCAnRCcsICdBJywgJ0InXQorCis+Pj4gbGlzdCh1bmlxdWVfanVzdHNlZW4oJ0FCQkNjQUQnLCBzdHIubG93ZXIpKQorWydBJywgJ0InLCAnQycsICdBJywgJ0QnXQorCisiIiIKKworX190ZXN0X18gPSB7J2xpYnJlZnRlc3QnIDogbGlicmVmdGVzdH0KKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3RfY2xhc3NlcyA9IChUZXN0QmFzaWNPcHMsIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzLCBUZXN0R0MsCisgICAgICAgICAgICAgICAgICAgIFJlZ3Jlc3Npb25UZXN0cywgTGVuZ3RoVHJhbnNwYXJlbmN5LAorICAgICAgICAgICAgICAgICAgICBTdWJjbGFzc1dpdGhLd2FyZ3NUZXN0LCBUZXN0RXhhbXBsZXMpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorCisgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKKyAgICAjIGRvY3Rlc3QgdGhlIGV4YW1wbGVzIGluIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdChzeXMubW9kdWxlc1tfX25hbWVfX10sIHZlcmJvc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2pzb24ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9qc29uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOGYzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9qc29uLnB5CkBAIC0wLDAgKzEsMTcgQEAKKyIiIlRlc3RzIGZvciBqc29uLgorCitUaGUgdGVzdHMgZm9yIGpzb24gYXJlIGRlZmluZWQgaW4gdGhlIGpzb24udGVzdHMgcGFja2FnZTsKK3RoZSB0ZXN0X3N1aXRlKCkgZnVuY3Rpb24gdGhlcmUgcmV0dXJucyBhIHRlc3Qgc3VpdGUgdGhhdCdzIHJlYWR5IHRvCitiZSBydW4uCisiIiIKKworaW1wb3J0IGpzb24udGVzdHMKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoanNvbi50ZXN0cy50ZXN0X3N1aXRlKCkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOGZmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKQEAgLTAsMCArMSwxODcgQEAKKyIiIgorVGVzdHMgZm9yIGtxdWV1ZSB3cmFwcGVyLgorIiIiCitpbXBvcnQgc29ja2V0CitpbXBvcnQgZXJybm8KK2ltcG9ydCB0aW1lCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2lmIG5vdCBoYXNhdHRyKHNlbGVjdCwgImtxdWV1ZSIpOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0ZXN0IHdvcmtzIG9ubHkgb24gQlNEIikKKworY2xhc3MgVGVzdEtRdWV1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY3JlYXRlX3F1ZXVlKHNlbGYpOgorICAgICAgICBrcSA9IHNlbGVjdC5rcXVldWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoa3EuZmlsZW5vKCkgPiAwLCBrcS5maWxlbm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBrcS5jbG9zZWQpCisgICAgICAgIGtxLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtxLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwga3EuZmlsZW5vKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2V2ZW50KHNlbGYpOgorICAgICAgICBmZCA9IHN5cy5zdGRlcnIuZmlsZW5vKCkKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KGZkKQorICAgICAgICBvdGhlciA9IHNlbGVjdC5rZXZlbnQoMTAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5pZGVudCwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmlsdGVyLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmxhZ3MsIHNlbGVjdC5LUV9FVl9BREQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmZsYWdzLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmRhdGEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYudWRhdGEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYsIGV2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV2LCBvdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZXYsIG90aGVyKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldiA8IG90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3RoZXIgPj0gZXYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCBldiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsIGV2LCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgZXYsICJldiIpCisKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KGZkLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmlkZW50LCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5maWx0ZXIsIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmxhZ3MsIHNlbGVjdC5LUV9FVl9BREQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmZsYWdzLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmRhdGEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYudWRhdGEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYsIGV2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV2LCBvdGhlcikKKworICAgICAgICBldiA9IHNlbGVjdC5rZXZlbnQoZmQsIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsIHNlbGVjdC5LUV9FVl9PTkVTSE9UKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmlkZW50LCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5maWx0ZXIsIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmxhZ3MsIHNlbGVjdC5LUV9FVl9PTkVTSE9UKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZmbGFncywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5kYXRhLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LnVkYXRhLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LCBldikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChldiwgb3RoZXIpCisKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KDEsIDIsIDMsIDQsIDUsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuaWRlbnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmlsdGVyLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZsYWdzLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZmbGFncywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5kYXRhLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LnVkYXRhLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LCBldikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChldiwgb3RoZXIpCisKKyAgICAgICAgYmlnbnVtID0gc3lzLm1heHNpemUgKiAyICsgMQorICAgICAgICBldiA9IHNlbGVjdC5rZXZlbnQoYmlnbnVtLCAxLCAyLCAzLCBzeXMubWF4c2l6ZSwgYmlnbnVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmlkZW50LCBiaWdudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmlsdGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZsYWdzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZmbGFncywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5kYXRhLCBzeXMubWF4c2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi51ZGF0YSwgYmlnbnVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LCBldikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChldiwgb3RoZXIpCisKKyAgICBkZWYgdGVzdF9xdWV1ZV9ldmVudChzZWxmKToKKyAgICAgICAgc2VydmVyU29ja2V0ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlcnZlclNvY2tldC5iaW5kKCgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHNlcnZlclNvY2tldC5saXN0ZW4oMSkKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUlOUFJPR1JFU1MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbm5lY3Qgc2hvdWxkIGhhdmUgcmFpc2VkIEVJTlBST0dSRVNTIikKKyAgICAgICAgICAgIHBhc3MgIyBGcmVlQlNEIGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIGhlcmUKKyAgICAgICAgc2VydmVyLCBhZGRyID0gc2VydmVyU29ja2V0LmFjY2VwdCgpCisKKyAgICAgICAga3EgPSBzZWxlY3Qua3F1ZXVlKCkKKyAgICAgICAga3EyID0gc2VsZWN0LmtxdWV1ZS5mcm9tZmQoa3EuZmlsZW5vKCkpCisKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KHNlcnZlci5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfQUREIHwgc2VsZWN0LktRX0VWX0VOQUJMRSkKKyAgICAgICAga3EuY29udHJvbChbZXZdLCAwKQorICAgICAgICBldiA9IHNlbGVjdC5rZXZlbnQoc2VydmVyLmZpbGVubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0ZJTFRFUl9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0FERCB8IHNlbGVjdC5LUV9FVl9FTkFCTEUpCisgICAgICAgIGtxLmNvbnRyb2woW2V2XSwgMCkKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KGNsaWVudC5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfQUREIHwgc2VsZWN0LktRX0VWX0VOQUJMRSkKKyAgICAgICAga3EyLmNvbnRyb2woW2V2XSwgMCkKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KGNsaWVudC5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9BREQgfCBzZWxlY3QuS1FfRVZfRU5BQkxFKQorICAgICAgICBrcTIuY29udHJvbChbZXZdLCAwKQorCisgICAgICAgIGV2ZW50cyA9IGtxLmNvbnRyb2woTm9uZSwgNCwgMSkKKyAgICAgICAgZXZlbnRzID0gc2V0KChlLmlkZW50LCBlLmZpbHRlcikgZm9yIGUgaW4gZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgc2V0KFsKKyAgICAgICAgICAgIChjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUpLAorICAgICAgICAgICAgKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSldKSkKKworICAgICAgICBjbGllbnQuc2VuZCgiSGVsbG8hIikKKyAgICAgICAgc2VydmVyLnNlbmQoIndvcmxkISEhIikKKworICAgICAgICAjIFdlIG1heSBuZWVkIHRvIGNhbGwgaXQgc2V2ZXJhbCB0aW1lcworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBldmVudHMgPSBrcS5jb250cm9sKE5vbmUsIDQsIDEpCisgICAgICAgICAgICBpZiBsZW4oZXZlbnRzKSA9PSA0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEuMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgndGltZW91dCB3YWl0aW5nIGZvciBldmVudCBub3RpZmljYXRpb25zJykKKworICAgICAgICBldmVudHMgPSBzZXQoKGUuaWRlbnQsIGUuZmlsdGVyKSBmb3IgZSBpbiBldmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBzZXQoWworICAgICAgICAgICAgKGNsaWVudC5maWxlbm8oKSwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSksCisgICAgICAgICAgICAoY2xpZW50LmZpbGVubygpLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQpLAorICAgICAgICAgICAgKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSksCisgICAgICAgICAgICAoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQpXSkpCisKKyAgICAgICAgIyBSZW1vdmUgY29tcGxldGVseSBjbGllbnQsIGFuZCBzZXJ2ZXIgcmVhZCBwYXJ0CisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudChjbGllbnQuZmlsZW5vKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0RFTEVURSkKKyAgICAgICAga3EuY29udHJvbChbZXZdLCAwKQorICAgICAgICBldiA9IHNlbGVjdC5rZXZlbnQoY2xpZW50LmZpbGVubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0ZJTFRFUl9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0RFTEVURSkKKyAgICAgICAga3EuY29udHJvbChbZXZdLCAwKQorICAgICAgICBldiA9IHNlbGVjdC5rZXZlbnQoc2VydmVyLmZpbGVubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0ZJTFRFUl9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0RFTEVURSkKKyAgICAgICAga3EuY29udHJvbChbZXZdLCAwLCAwKQorCisgICAgICAgIGV2ZW50cyA9IGtxLmNvbnRyb2woW10sIDQsIDAuOTkpCisgICAgICAgIGV2ZW50cyA9IHNldCgoZS5pZGVudCwgZS5maWx0ZXIpIGZvciBlIGluIGV2ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIHNldChbCisgICAgICAgICAgICAoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFKV0pKQorCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisgICAgICAgIHNlcnZlclNvY2tldC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFBhaXIoc2VsZik6CisgICAgICAgIGtxID0gc2VsZWN0LmtxdWV1ZSgpCisgICAgICAgIGEsIGIgPSBzb2NrZXQuc29ja2V0cGFpcigpCisKKyAgICAgICAgYS5zZW5kKGInZm9vJykKKyAgICAgICAgZXZlbnQxID0gc2VsZWN0LmtldmVudChhLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQsIHNlbGVjdC5LUV9FVl9BREQgfCBzZWxlY3QuS1FfRVZfRU5BQkxFKQorICAgICAgICBldmVudDIgPSBzZWxlY3Qua2V2ZW50KGIsIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwgc2VsZWN0LktRX0VWX0FERCB8IHNlbGVjdC5LUV9FVl9FTkFCTEUpCisgICAgICAgIHIgPSBrcS5jb250cm9sKFtldmVudDEsIGV2ZW50Ml0sIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJbMF0uZmxhZ3MgJiBzZWxlY3QuS1FfRVZfRVJST1IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZWN2KHJbMF0uZGF0YSksIGInZm9vJykKKworICAgICAgICBhLmNsb3NlKCkKKyAgICAgICAgYi5jbG9zZSgpCisgICAgICAgIGtxLmNsb3NlKCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEtRdWV1ZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZGE4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkKQEAgLTAsMCArMSwyMDAgQEAKKyIiIlRlc3QgbGFyZ2VmaWxlIHN1cHBvcnQgb24gc3lzdGVtIHdoZXJlIHRoaXMgbWFrZXMgc2Vuc2UuCisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCB2ZXJib3NlLCByZXF1aXJlcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rCitpbXBvcnQgaW8gICMgQyBpbXBsZW1lbnRhdGlvbiBvZiBpbworaW1wb3J0IF9weWlvIGFzIHB5aW8gIyBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgaW8KKwordHJ5OgorICAgIGltcG9ydCBzaWduYWwKKyAgICAjIFRoZSBkZWZhdWx0IGhhbmRsZXIgZm9yIFNJR1hGU1ogaXMgdG8gYWJvcnQgdGhlIHByb2Nlc3MuCisgICAgIyBCeSBpZ25vcmluZyBpdCwgc3lzdGVtIGNhbGxzIGV4Y2VlZGluZyB0aGUgZmlsZSBzaXplIHJlc291cmNlCisgICAgIyBsaW1pdCB3aWxsIHJhaXNlIElPRXJyb3IgaW5zdGVhZCBvZiBjcmFzaGluZyB0aGUgaW50ZXJwcmV0ZXIuCisgICAgb2xkaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1hGU1osIHNpZ25hbC5TSUdfSUdOKQorZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgIHBhc3MKKworIyBjcmVhdGUgPjJHQiBmaWxlICgyR0IgPSAyMTQ3NDgzNjQ4IGJ5dGVzKQorc2l6ZSA9IDI1MDAwMDAwMDAKKworCitjbGFzcyBMYXJnZUZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgZWFjaCBmaWxlIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIGZvciBhIGxhcmdlCisgICAgKGkuZS4gPiAyR0IsIGRvICB3ZSBoYXZlIHRvIGNoZWNrID4gNEdCKSBmaWxlcy4KKworICAgIE5PVEU6IHRoZSBvcmRlciBvZiBleGVjdXRpb24gb2YgdGhlIHRlc3QgbWV0aG9kcyBpcyBpbXBvcnRhbnQhIHRlc3Rfc2VlaworICAgIG11c3QgcnVuIGZpcnN0IHRvIGNyZWF0ZSB0aGUgdGVzdCBmaWxlLiBGaWxlIGNsZWFudXAgbXVzdCBhbHNvIGJlIGhhbmRsZWQKKyAgICBvdXRzaWRlIHRoZSB0ZXN0IGluc3RhbmNlcyBiZWNhdXNlIG9mIHRoaXMuCisKKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X3NlZWsoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnY3JlYXRlIGxhcmdlIGZpbGUgdmlhIHNlZWsgKG1heSBiZSBzcGFyc2UgZmlsZSkgLi4uJykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiJ3onKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBmLnNlZWsoc2l6ZSkKKyAgICAgICAgICAgIGYud3JpdGUoYidhJykKKyAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgnY2hlY2sgZmlsZSBzaXplIHdpdGggb3MuZnN0YXQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5mc3RhdChmLmZpbGVubygpKVtzdGF0LlNUX1NJWkVdLCBzaXplKzEpCisKKyAgICBkZWYgdGVzdF9vc3N0YXQoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnY2hlY2sgZmlsZSBzaXplIHdpdGggb3Muc3RhdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChURVNURk4pW3N0YXQuU1RfU0laRV0sIHNpemUrMSkKKworICAgIGRlZiB0ZXN0X3NlZWtfcmVhZChzZWxmKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdwbGF5IGFyb3VuZCB3aXRoIHNlZWsoKSBhbmQgcmVhZCgpIHdpdGggdGhlIGJ1aWx0IGxhcmdlZmlsZScpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKFRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgYid6JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDEpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDApCisgICAgICAgICAgICBmLnNlZWsoMCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDApCisgICAgICAgICAgICBmLnNlZWsoNDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA0MikKKyAgICAgICAgICAgIGYuc2Vlayg0MiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDQyKQorICAgICAgICAgICAgZi5zZWVrKDQyLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgODQpCisgICAgICAgICAgICBmLnNlZWsoMCwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDg0KQorICAgICAgICAgICAgZi5zZWVrKDAsIDIpICAjIHNlZWsgZnJvbSB0aGUgZW5kCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBzaXplICsgMSArIDApCisgICAgICAgICAgICBmLnNlZWsoLTEwLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgc2l6ZSArIDEgLSAxMCkKKyAgICAgICAgICAgIGYuc2Vlaygtc2l6ZS0xLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkKKyAgICAgICAgICAgIGYuc2VlayhzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgc2l6ZSkKKyAgICAgICAgICAgICMgdGhlICdhJyB0aGF0IHdhcyB3cml0dGVuIGF0IHRoZSBlbmQgb2YgZmlsZSBhYm92ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksIGInYScpCisgICAgICAgICAgICBmLnNlZWsoLXNpemUtMSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCBiJ3onKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMSkKKworICAgIGRlZiB0ZXN0X2xzZWVrKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ3BsYXkgYXJvdW5kIHdpdGggb3MubHNlZWsoKSB3aXRoIHRoZSBidWlsdCBsYXJnZWZpbGUnKQorICAgICAgICB3aXRoIHNlbGYub3BlbihURVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxzZWVrKGYuZmlsZW5vKCksIDAsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCA0MiwgMCksIDQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCA0MiwgMSksIDg0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCAwLCAxKSwgODQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxzZWVrKGYuZmlsZW5vKCksIDAsIDIpLCBzaXplKzErMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHNlZWsoZi5maWxlbm8oKSwgLTEwLCAyKSwgc2l6ZSsxLTEwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCAtc2l6ZS0xLCAyKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHNlZWsoZi5maWxlbm8oKSwgc2l6ZSwgMCksIHNpemUpCisgICAgICAgICAgICAjIHRoZSAnYScgdGhhdCB3YXMgd3JpdHRlbiBhdCB0aGUgZW5kIG9mIGZpbGUgYWJvdmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCBiJ2EnKQorCisgICAgZGVmIHRlc3RfdHJ1bmNhdGUoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgndHJ5IHRydW5jYXRlJykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oVEVTVEZOLCAncitiJykgYXMgZjoKKyAgICAgICAgICAgICMgdGhpcyBpcyBhbHJlYWR5IGRlY2lkZWQgYmVmb3JlIHN0YXJ0IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUKKyAgICAgICAgICAgICMgYnV0IHdlIGRvIGl0IGFueXdheSBmb3IgZXh0cmEgcHJvdGVjdGlvbgorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZiwgJ3RydW5jYXRlJyk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9wZW4oKS50cnVuY2F0ZSgpIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0iKQorICAgICAgICAgICAgZi5zZWVrKDAsIDIpCisgICAgICAgICAgICAjIGVsc2Ugd2UndmUgbG9zdCB0cmFjayBvZiB0aGUgdHJ1ZSBzaXplCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBzaXplKzEpCisgICAgICAgICAgICAjIEN1dCBpdCBiYWNrIHZpYSBzZWVrICsgdHJ1bmNhdGUgd2l0aCBubyBhcmd1bWVudC4KKyAgICAgICAgICAgIG5ld3NpemUgPSBzaXplIC0gMTAKKyAgICAgICAgICAgIGYuc2VlayhuZXdzaXplKQorICAgICAgICAgICAgZi50cnVuY2F0ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBuZXdzaXplKSAgIyBlbHNlIHBvaW50ZXIgbW92ZWQKKyAgICAgICAgICAgIGYuc2VlaygwLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgbmV3c2l6ZSkgICMgZWxzZSB3YXNuJ3QgdHJ1bmNhdGVkCisgICAgICAgICAgICAjIEVuc3VyZSB0aGF0IHRydW5jYXRlKHNtYWxsZXIgdGhhbiB0cnVlIHNpemUpIHNocmlua3MKKyAgICAgICAgICAgICMgdGhlIGZpbGUuCisgICAgICAgICAgICBuZXdzaXplIC09IDEKKyAgICAgICAgICAgIGYuc2Vlayg0MikKKyAgICAgICAgICAgIGYudHJ1bmNhdGUobmV3c2l6ZSkKKyAgICAgICAgICAgIGlmIHNlbGYubmV3X2lvOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDQyKQorICAgICAgICAgICAgZi5zZWVrKDAsIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBuZXdzaXplKQorICAgICAgICAgICAgIyBYWFggdHJ1bmNhdGUobGFyZ2VyIHRoYW4gdHJ1ZSBzaXplKSBpcyBpbGwtZGVmaW5lZAorICAgICAgICAgICAgIyBhY3Jvc3MgcGxhdGZvcm07IGN1dCBpdCB3YWFhYWF5IGJhY2sKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgZi50cnVuY2F0ZSgxKQorICAgICAgICAgICAgaWYgc2VsZi5uZXdfaW86CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkgICAgICAgIyBlbHNlIHBvaW50ZXIgbW92ZWQKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZi5yZWFkKCkpLCAxKSAgIyBlbHNlIHdhc24ndCB0cnVuY2F0ZWQKKworICAgIGRlZiB0ZXN0X3NlZWthYmxlKHNlbGYpOgorICAgICAgICAjIElzc3VlICM1MDE2OyBzZWVrYWJsZSgpIGNhbiByZXR1cm4gRmFsc2Ugd2hlbiB0aGUgY3VycmVudCBwb3NpdGlvbgorICAgICAgICAjIGlzIG5lZ2F0aXZlIHdoZW4gdHJ1bmNhdGVkIHRvIGFuIGludC4KKyAgICAgICAgaWYgbm90IHNlbGYubmV3X2lvOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiYnVpbHRpbiBmaWxlIGRvZXNuJ3QgaGF2ZSBzZWVrYWJsZSgpIikKKyAgICAgICAgZm9yIHBvcyBpbiAoMioqMzEtMSwgMioqMzEsIDIqKjMxKzEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2Vlayhwb3MpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuc2Vla2FibGUoKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgIyBPbiBXaW5kb3dzIGFuZCBNYWMgT1NYIHRoaXMgdGVzdCBjb21zdW1lcyBsYXJnZSByZXNvdXJjZXM7IEl0CisgICAgIyB0YWtlcyBhIGxvbmcgdGltZSB0byBidWlsZCB0aGUgPjJHQiBmaWxlIGFuZCB0YWtlcyA+MkdCIG9mIGRpc2sKKyAgICAjIHNwYWNlIHRoZXJlZm9yZSB0aGUgcmVzb3VyY2UgbXVzdCBiZSBlbmFibGVkIHRvIHJ1biB0aGlzIHRlc3QuCisgICAgIyBJZiBub3QsIG5vdGhpbmcgYWZ0ZXIgdGhpcyBsaW5lIHN0YW56YSB3aWxsIGJlIGV4ZWN1dGVkLgorICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicgb3Igc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICByZXF1aXJlcygnbGFyZ2VmaWxlJywKKyAgICAgICAgICAgICAgICAgJ3Rlc3QgcmVxdWlyZXMgJXMgYnl0ZXMgYW5kIGEgbG9uZyB0aW1lIHRvIHJ1bicgJSBzdHIoc2l6ZSkpCisgICAgZWxzZToKKyAgICAgICAgIyBPbmx5IHJ1biBpZiB0aGUgY3VycmVudCBmaWxlc3lzdGVtIHN1cHBvcnRzIGxhcmdlIGZpbGVzLgorICAgICAgICAjIChTa2lwIHRoaXMgdGVzdCBvbiBXaW5kb3dzLCBzaW5jZSB3ZSBub3cgYWx3YXlzIHN1cHBvcnQKKyAgICAgICAgIyBsYXJnZSBmaWxlcy4pCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3diJywgYnVmZmVyaW5nPTApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgMioqMzEgPT0gMjE0NzQ4MzY0OAorICAgICAgICAgICAgZi5zZWVrKDIxNDc0ODM2NDkpCisgICAgICAgICAgICAjIFNlZWtpbmcgaXMgbm90IGVub3VnaCBvZiBhIHRlc3Q6IHlvdSBtdXN0IHdyaXRlIGFuZAorICAgICAgICAgICAgIyBmbHVzaCwgdG9vIQorICAgICAgICAgICAgZi53cml0ZShiJ3gnKQorICAgICAgICAgICAgZi5mbHVzaCgpCisgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGxhcmdlZmlsZSBzdXBwb3J0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBmb3IgX29wZW4sIHByZWZpeCBpbiBbKGlvLm9wZW4sICdDJyksIChweWlvLm9wZW4sICdQeScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlbiwgJ0J1aWx0aW4nKV06CisgICAgICAgIGNsYXNzIFRlc3RDYXNlKExhcmdlRmlsZVRlc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBUZXN0Q2FzZS5vcGVuID0gc3RhdGljbWV0aG9kKF9vcGVuKQorICAgICAgICBUZXN0Q2FzZS5uZXdfaW8gPSBfb3BlbiBpcyBub3Qgb3BlbgorICAgICAgICBUZXN0Q2FzZS5fX25hbWVfXyA9IHByZWZpeCArIExhcmdlRmlsZVRlc3QuX19uYW1lX18KKyAgICAgICAgc3VpdGUuYWRkVGVzdChUZXN0Q2FzZSgndGVzdF9zZWVrJykpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfb3NzdGF0JykpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfc2Vla19yZWFkJykpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3RfbHNlZWsnKSkKKyAgICAgICAgd2l0aCBfb3BlbihURVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBpZiBoYXNhdHRyKGYsICd0cnVuY2F0ZScpOgorICAgICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3RfdHJ1bmNhdGUnKSkKKyAgICAgICAgc3VpdGUuYWRkVGVzdChUZXN0Q2FzZSgndGVzdF9zZWVrYWJsZScpKQorICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgIHRyeToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KHN1aXRlKQorICAgIGZpbmFsbHk6CisgICAgICAgIHVubGluayhURVNURk4pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2xpYjJ0bzMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9saWIydG8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOWEyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9saWIydG8zLnB5CkBAIC0wLDAgKzEsMjEgQEAKKyMgU2tpcHBpbmcgdGVzdF9wYXJzZXIgYW5kIHRlc3RfYWxsX2ZpeGVycworIyBiZWNhdXNlIG9mIHJ1bm5pbmcKK2Zyb20gbGliMnRvMy50ZXN0cyBpbXBvcnQgKHRlc3RfZml4ZXJzLCB0ZXN0X3B5dHJlZSwgdGVzdF91dGlsLCB0ZXN0X3JlZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXJzZXIsIHRlc3RfbWFpbiBhcyB0ZXN0X21haW5fKQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworZGVmIHN1aXRlKCk6CisgICAgdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgIGZvciBtIGluICh0ZXN0X2ZpeGVycywgdGVzdF9weXRyZWUsdGVzdF91dGlsLCB0ZXN0X3JlZmFjdG9yLCB0ZXN0X3BhcnNlciwKKyAgICAgICAgICAgICAgdGVzdF9tYWluXyk6CisgICAgICAgIHRlc3RzLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pKQorICAgIHJldHVybiB0ZXN0cworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KHN1aXRlKCkpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjgwYTQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKQEAgLTAsMCArMSwxMzEgQEAKKyIiIiBUZXN0cyBmb3IgdGhlIGxpbmVjYWNoZSBtb2R1bGUgIiIiCisKK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zLnBhdGgKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKKworCitGSUxFTkFNRSA9IGxpbmVjYWNoZS5fX2ZpbGVfXworSU5WQUxJRF9OQU1FID0gJyFAJCkoIUAjXzEnCitFTVBUWSA9ICcnCitURVNUUyA9ICdpbnNwZWN0X2ZvZGRlciBpbnNwZWN0X2ZvZGRlcjIgbWFwcGluZ190ZXN0cycKK1RFU1RTID0gVEVTVFMuc3BsaXQoKQorVEVTVF9QQVRIID0gb3MucGF0aC5kaXJuYW1lKHN1cHBvcnQuX19maWxlX18pCitNT0RVTEVTID0gImxpbmVjYWNoZSBhYmMiLnNwbGl0KCkKK01PRFVMRV9QQVRIID0gb3MucGF0aC5kaXJuYW1lKEZJTEVOQU1FKQorCitTT1VSQ0VfMSA9ICcnJworIiBEb2NzdHJpbmcgIgorCitkZWYgZnVuY3Rpb24oKToKKyAgICByZXR1cm4gcmVzdWx0CisKKycnJworCitTT1VSQ0VfMiA9ICcnJworZGVmIGYoKToKKyAgICByZXR1cm4gMSArIDEKKworYSA9IGYoKQorCisnJycKKworU09VUkNFXzMgPSAnJycKK2RlZiBmKCk6CisgICAgcmV0dXJuIDMnJycgIyBObyBlbmRpbmcgbmV3bGluZQorCisKK2NsYXNzIExpbmVDYWNoZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2dldGxpbmUoc2VsZik6CisgICAgICAgIGdldGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZQorCisgICAgICAgICMgQmFkIHZhbHVlcyBmb3IgbGluZSBudW1iZXIgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRsaW5lKEZJTEVOQU1FLCAyKioxNSksIEVNUFRZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGxpbmUoRklMRU5BTUUsIC0xKSwgRU1QVFkpCisKKyAgICAgICAgIyBGbG9hdCB2YWx1ZXMgY3VycmVudGx5IHJhaXNlIFR5cGVFcnJvciwgc2hvdWxkIGl0PworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGxpbmUsIEZJTEVOQU1FLCAxLjEpCisKKyAgICAgICAgIyBCYWQgZmlsZW5hbWVzIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0bGluZShFTVBUWSwgMSksIEVNUFRZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGxpbmUoSU5WQUxJRF9OQU1FLCAxKSwgRU1QVFkpCisKKyAgICAgICAgIyBDaGVjayB3aGV0aGVyIGxpbmVzIGNvcnJlc3BvbmQgdG8gdGhvc2UgZnJvbSBmaWxlIGl0ZXJhdGlvbgorICAgICAgICBmb3IgZW50cnkgaW4gVEVTVFM6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihURVNUX1BBVEgsIGVudHJ5KSArICcucHknCisgICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKG9wZW4oZmlsZW5hbWUpKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoZmlsZW5hbWUsIGluZGV4ICsgMSkpCisKKyAgICAgICAgIyBDaGVjayBtb2R1bGUgbG9hZGluZworICAgICAgICBmb3IgZW50cnkgaW4gTU9EVUxFUzoKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKE1PRFVMRV9QQVRILCBlbnRyeSkgKyAnLnB5JworICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShvcGVuKGZpbGVuYW1lKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBnZXRsaW5lKGZpbGVuYW1lLCBpbmRleCArIDEpKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBib2d1cyBkYXRhIGlzbid0IHJldHVybmVkIChpc3N1ZSAjMTMwOTU2NykKKyAgICAgICAgZW1wdHkgPSBsaW5lY2FjaGUuZ2V0bGluZXMoJ2EvYi9jL19faW5pdF9fLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbXB0eSwgW10pCisKKyAgICBkZWYgdGVzdF9ub19lbmRpbmdfbmV3bGluZShzZWxmKToKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoU09VUkNFXzMpCisgICAgICAgIGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIlxuIiwgImRlZiBmKCk6XG4iLCAiICAgIHJldHVybiAzXG4iXSkKKworICAgIGRlZiB0ZXN0X2NsZWFyY2FjaGUoc2VsZik6CisgICAgICAgIGNhY2hlZCA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBURVNUUzoKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKFRFU1RfUEFUSCwgZW50cnkpICsgJy5weScKKyAgICAgICAgICAgIGNhY2hlZC5hcHBlbmQoZmlsZW5hbWUpCisgICAgICAgICAgICBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgMSkKKworICAgICAgICAjIEFyZSBhbGwgZmlsZXMgY2FjaGVkPworICAgICAgICBjYWNoZWRfZW1wdHkgPSBbZm4gZm9yIGZuIGluIGNhY2hlZCBpZiBmbiBub3QgaW4gbGluZWNhY2hlLmNhY2hlXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlZF9lbXB0eSwgW10pCisKKyAgICAgICAgIyBDYW4gd2UgY2xlYXIgdGhlIGNhY2hlPworICAgICAgICBsaW5lY2FjaGUuY2xlYXJjYWNoZSgpCisgICAgICAgIGNhY2hlZF9lbXB0eSA9IFtmbiBmb3IgZm4gaW4gY2FjaGVkIGlmIGZuIGluIGxpbmVjYWNoZS5jYWNoZV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZWRfZW1wdHksIFtdKQorCisgICAgZGVmIHRlc3RfY2hlY2tjYWNoZShzZWxmKToKKyAgICAgICAgZ2V0bGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lCisgICAgICAgICMgQ3JlYXRlIGEgc291cmNlIGZpbGUgYW5kIGNhY2hlIGl0cyBjb250ZW50cworICAgICAgICBzb3VyY2VfbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgJy5weScKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzb3VyY2VfbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9uYW1lLCAndycpIGFzIHNvdXJjZToKKyAgICAgICAgICAgIHNvdXJjZS53cml0ZShTT1VSQ0VfMSkKKyAgICAgICAgZ2V0bGluZShzb3VyY2VfbmFtZSwgMSkKKworICAgICAgICAjIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgY29udGVudHMKKyAgICAgICAgc291cmNlX2xpc3QgPSBbXQorICAgICAgICB3aXRoIG9wZW4oc291cmNlX25hbWUpIGFzIHNvdXJjZToKKyAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc291cmNlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoc291cmNlX25hbWUsIGluZGV4ICsgMSkpCisgICAgICAgICAgICAgICAgc291cmNlX2xpc3QuYXBwZW5kKGxpbmUpCisKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9uYW1lLCAndycpIGFzIHNvdXJjZToKKyAgICAgICAgICAgIHNvdXJjZS53cml0ZShTT1VSQ0VfMikKKworICAgICAgICAjIFRyeSB0byB1cGRhdGUgYSBib2d1cyBjYWNoZSBlbnRyeQorICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZSgnZHVtbXknKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgY2FjaGUgbWF0Y2hlcyB0aGUgb2xkIGNvbnRlbnRzCisgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc291cmNlX2xpc3QpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBnZXRsaW5lKHNvdXJjZV9uYW1lLCBpbmRleCArIDEpKQorCisgICAgICAgICMgVXBkYXRlIHRoZSBjYWNoZSBhbmQgY2hlY2sgd2hldGhlciBpdCBtYXRjaGVzIHRoZSBuZXcgc291cmNlIGZpbGUKKyAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoc291cmNlX25hbWUpCisgICAgICAgIHdpdGggb3Blbihzb3VyY2VfbmFtZSkgYXMgc291cmNlOgorICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShzb3VyY2UpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZ2V0bGluZShzb3VyY2VfbmFtZSwgaW5kZXggKyAxKSkKKyAgICAgICAgICAgICAgICBzb3VyY2VfbGlzdC5hcHBlbmQobGluZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KExpbmVDYWNoZVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9saW51eGF1ZGlvZGV2LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbGludXhhdWRpb2Rldi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWY0NmI0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbGludXhhdWRpb2Rldi5weQpAQCAtMCwwICsxLDk5IEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordGVzdF9zdXBwb3J0LnJlcXVpcmVzKCdhdWRpbycpCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBydW5fdW5pdHRlc3QKKworaW1wb3J0IGVycm5vCitpbXBvcnQgc3lzCitpbXBvcnQgYXVkaW9vcAoraW1wb3J0IHVuaXR0ZXN0CisKK2xpbnV4YXVkaW9kZXYgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnbGludXhhdWRpb2RldicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK3N1bmF1ZGlvID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3N1bmF1ZGlvJywgZGVwcmVjYXRlZD1UcnVlKQorCitTTkRfRk9STUFUX01VTEFXXzggPSAxCisKK2NsYXNzIExpbnV4QXVkaW9EZXZUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGV2ID0gbGludXhhdWRpb2Rldi5vcGVuKCd3JykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5kZXYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyBhdCBsZWFzdCBjaGVjayB0aGF0IHRoZXNlIG1ldGhvZHMgY2FuIGJlIGludm9rZWQKKyAgICAgICAgc2VsZi5kZXYuYnVmc2l6ZSgpCisgICAgICAgIHNlbGYuZGV2Lm9idWZjb3VudCgpCisgICAgICAgIHNlbGYuZGV2Lm9idWZmcmVlKCkKKyAgICAgICAgc2VsZi5kZXYuZ2V0cHRyKCkKKyAgICAgICAgc2VsZi5kZXYuZmlsZW5vKCkKKworICAgIGRlZiB0ZXN0X3BsYXlfc291bmRfZmlsZShzZWxmKToKKyAgICAgICAgcGF0aCA9IGZpbmRmaWxlKCJhdWRpb3Rlc3QuYXUiKQorICAgICAgICBmcCA9IG9wZW4ocGF0aCwgJ3InKQorICAgICAgICBzaXplLCBlbmMsIHJhdGUsIG5jaGFubmVscywgZXh0cmEgPSBzdW5hdWRpby5nZXRoZHIoZnApCisgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgZnAuY2xvc2UoKQorCisgICAgICAgIGlmIGVuYyAhPSBTTkRfRk9STUFUX01VTEFXXzg6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdCAuYXUgZmlsZSB3aXRoIDgtYml0IG11LWxhdyBzYW1wbGVzIikKKworICAgICAgICAjIGNvbnZlcnQgdGhlIGRhdGEgdG8gMTYtYml0IHNpZ25lZAorICAgICAgICBkYXRhID0gYXVkaW9vcC51bGF3MmxpbihkYXRhLCAyKQorCisgICAgICAgICMgc2V0IHRoZSBkYXRhIGZvcm1hdAorICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICAgICAgZm10ID0gbGludXhhdWRpb2Rldi5BRk1UX1MxNl9MRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm10ID0gbGludXhhdWRpb2Rldi5BRk1UX1MxNl9CRQorCisgICAgICAgICMgc2V0IHBhcmFtZXRlcnMgYmFzZWQgb24gLmF1IGZpbGUgaGVhZGVycworICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKHJhdGUsIDE2LCBuY2hhbm5lbHMsIGZtdCkKKyAgICAgICAgc2VsZi5kZXYud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5kZXYuZmx1c2goKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBzaXplID0gOAorICAgICAgICBmbXQgPSBsaW51eGF1ZGlvZGV2LkFGTVRfVTgKKyAgICAgICAgcmF0ZSA9IDgwMDAKKyAgICAgICAgbmNoYW5uZWxzID0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKC0xLCBzaXplLCBuY2hhbm5lbHMsIGZtdCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJleHBlY3RlZCByYXRlID49IDAsIG5vdCAtMSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZGV2LnNldHBhcmFtZXRlcnMocmF0ZSwgLTIsIG5jaGFubmVscywgZm10KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgImV4cGVjdGVkIHNhbXBsZSBzaXplID49IDAsIG5vdCAtMiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZGV2LnNldHBhcmFtZXRlcnMocmF0ZSwgc2l6ZSwgMywgZm10KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgIm5jaGFubmVscyBtdXN0IGJlIDEgb3IgMiwgbm90IDMiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKHJhdGUsIHNpemUsIG5jaGFubmVscywgMTc3KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgInVua25vd24gYXVkaW8gZW5jb2Rpbmc6IDE3NyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZGV2LnNldHBhcmFtZXRlcnMocmF0ZSwgc2l6ZSwgbmNoYW5uZWxzLCBsaW51eGF1ZGlvZGV2LkFGTVRfVTE2X0xFKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgImZvciBsaW5lYXIgdW5zaWduZWQgMTYtYml0IGxpdHRsZS1lbmRpYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXVkaW8sIGV4cGVjdGVkIHNhbXBsZSBzaXplIDE2LCBub3QgOCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZGV2LnNldHBhcmFtZXRlcnMocmF0ZSwgMTYsIG5jaGFubmVscywgZm10KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgImZvciBsaW5lYXIgdW5zaWduZWQgOC1iaXQgYXVkaW8sIGV4cGVjdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhbXBsZSBzaXplIDgsIG5vdCAxNiIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0cnk6CisgICAgICAgIGRzcCA9IGxpbnV4YXVkaW9kZXYub3BlbigndycpCisgICAgZXhjZXB0IGxpbnV4YXVkaW9kZXYuZXJyb3IsIG1zZzoKKyAgICAgICAgaWYgbXNnLmFyZ3NbMF0gaW4gKGVycm5vLkVBQ0NFUywgZXJybm8uRU5PRU5ULCBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KG1zZykKKyAgICAgICAgcmFpc2UKKyAgICBkc3AuY2xvc2UoKQorICAgIHJ1bl91bml0dGVzdChMaW51eEF1ZGlvRGV2VGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2xpc3QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9saXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMDgwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9saXN0LnB5CkBAIC0wLDAgKzEsNzggQEAKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBsaXN0X3Rlc3RzCisKK2NsYXNzIExpc3RUZXN0KGxpc3RfdGVzdHMuQ29tbW9uVGVzdCk6CisgICAgdHlwZTJ0ZXN0ID0gbGlzdAorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChbXSksIFtdKQorICAgICAgICBsMF8zID0gWzAsIDEsIDIsIDNdCisgICAgICAgIGwwXzNfYmlzID0gbGlzdChsMF8zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwwXzMsIGwwXzNfYmlzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobDBfMyBpcyBub3QgbDBfM19iaXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgoKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoKDAsIDEsIDIsIDMpKSwgWzAsIDEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoJycpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KCdzcGFtJyksIFsncycsICdwJywgJ2EnLCAnbSddKQorCisgICAgICAgIGlmIHN5cy5tYXhzaXplID09IDB4N2ZmZmZmZmY6CisgICAgICAgICAgICAjIFRoaXMgdGVzdCBjYW4gY3VycmVudGx5IG9ubHkgd29yayBvbiAzMi1iaXQgbWFjaGluZXMuCisgICAgICAgICAgICAjIFhYWCBJZi93aGVuIFB5U2VxdWVuY2VfTGVuZ3RoKCkgcmV0dXJucyBhIHNzaXplX3QsIGl0IHNob3VsZCBiZQorICAgICAgICAgICAgIyBYWFggcmUtZW5hYmxlZC4KKyAgICAgICAgICAgICMgVmVyaWZ5IGNsZWFyaW5nIG9mIGJ1ZyAjNTU2MDI1LgorICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbWF4IGRhdGEgc2l6ZSAoc3lzLm1heGludCkgPT0gbWF4CisgICAgICAgICAgICAjIGFkZHJlc3Mgc2l6ZSB0aGlzIGFsc28gYXNzdW1lcyB0aGF0IHRoZSBhZGRyZXNzIHNpemUgaXMgYXQKKyAgICAgICAgICAgICMgbGVhc3QgNCBieXRlcyB3aXRoIDggYnl0ZSBhZGRyZXNzZXMsIHRoZSBidWcgaXMgbm90IHdlbGwKKyAgICAgICAgICAgICMgdGVzdGVkCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIE5vdGU6IFRoaXMgdGVzdCBpcyBleHBlY3RlZCB0byBTRUdWIHVuZGVyIEN5Z3dpbiAxLjMuMTIgb3IKKyAgICAgICAgICAgICMgZWFybGllciBkdWUgdG8gYSBuZXdsaWIgYnVnLiAgU2VlIHRoZSBmb2xsb3dpbmcgbWFpbGluZyBsaXN0CisgICAgICAgICAgICAjIHRocmVhZCBmb3IgdGhlIGRldGFpbHM6CisKKyAgICAgICAgICAgICMgICAgIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvbmV3bGliLzIwMDIvbXNnMDAzNjkuaHRtbAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTWVtb3J5RXJyb3IsIGxpc3QsIHhyYW5nZShzeXMubWF4aW50IC8vIDIpKQorCisgICAgICAgICMgVGhpcyBjb2RlIHVzZWQgdG8gc2VnZmF1bHQgaW4gUHkyLjRhMworICAgICAgICB4ID0gW10KKyAgICAgICAgeC5leHRlbmQoLXkgZm9yIHkgaW4geCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBbXSkKKworICAgIGRlZiB0ZXN0X3RydXRoKHNlbGYpOgorICAgICAgICBzdXBlcihMaXN0VGVzdCwgc2VsZikudGVzdF90cnV0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShbNDJdKQorCisgICAgZGVmIHRlc3RfaWRlbnRpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShbXSBpcyBub3QgW10pCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgIHN1cGVyKExpc3RUZXN0LCBzZWxmKS50ZXN0X2xlbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFtdKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oWzBdKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oWzAsIDEsIDJdKSwgMykKKworICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgorICAgICAgICBsc3QgPSBbNCwgNSwgNiwgN10KKyAgICAgICAgbiA9IGludCgoc3lzLm1heGludCoyKzIpIC8vIGxlbihsc3QpKQorICAgICAgICBkZWYgbXVsKGEsIGIpOiByZXR1cm4gYSAqIGIKKyAgICAgICAgZGVmIGltdWwoYSwgYik6IGEgKj0gYgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoTWVtb3J5RXJyb3IsIE92ZXJmbG93RXJyb3IpLCBtdWwsIGxzdCwgbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE1lbW9yeUVycm9yLCBPdmVyZmxvd0Vycm9yKSwgaW11bCwgbHN0LCBuKQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChMaXN0VGVzdCkKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGltcG9ydCBzeXMKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTGlzdFRlc3QpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzU1OTIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKQEAgLTAsMCArMSw0MzggQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgdmVyYm9zZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgbG9jYWxlCitpbXBvcnQgc3lzCitpbXBvcnQgY29kZWNzCisKKworZW5VU19sb2NhbGUgPSBOb25lCisKK2RlZiBnZXRfZW5VU19sb2NhbGUoKToKKyAgICBnbG9iYWwgZW5VU19sb2NhbGUKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICB0bG9jcyA9ICgiZW5fVVMuVVRGLTgiLCAiZW5fVVMuSVNPODg1OS0xIiwgImVuX1VTIikKKyAgICAgICAgaWYgaW50KG9zLnVuYW1lKClbMl0uc3BsaXQoJy4nKVswXSkgPCAxMDoKKyAgICAgICAgICAgICMgVGhlIGxvY2FsZSB0ZXN0IHdvcmsgZmluZSBvbiBPU1ggMTAuNiwgSSAocm9uYWxkb3Vzc29yZW4pCisgICAgICAgICAgICAjIGhhdmVuJ3QgaGFkIHRpbWUgeWV0IHRvIHZlcmlmeSBpZiB0ZXN0cyB3b3JrIG9uIE9TWCAxMC41CisgICAgICAgICAgICAjICgxMC40IGlzIGtub3duIHRvIGJlIGJhZCkKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJMb2NhbGUgc3VwcG9ydCBvbiBNYWNPU1ggaXMgbWluaW1hbCIpCisgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgICAgICB0bG9jcyA9ICgiRW4iLCAiRW5nbGlzaCIpCisgICAgZWxzZToKKyAgICAgICAgdGxvY3MgPSAoImVuX1VTLlVURi04IiwgImVuX1VTLlVTLUFTQ0lJIiwgImVuX1VTIikKKyAgICBvbGRsb2NhbGUgPSBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19OVU1FUklDKQorICAgIGZvciB0bG9jIGluIHRsb2NzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19OVU1FUklDLCB0bG9jKQorICAgICAgICBleGNlcHQgbG9jYWxlLkVycm9yOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgICAgICJUZXN0IGxvY2FsZSBub3Qgc3VwcG9ydGVkICh0cmllZCAlcykiICUgKCcsICcuam9pbih0bG9jcykpKQorICAgIGVuVVNfbG9jYWxlID0gdGxvYworICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX05VTUVSSUMsIG9sZGxvY2FsZSkKKworCitjbGFzcyBCYXNlTG9jYWxpemVkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIworICAgICMgQmFzZSBjbGFzcyBmb3IgdGVzdHMgdXNpbmcgYSByZWFsIGxvY2FsZQorICAgICMKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRsb2NhbGUgPSBsb2NhbGUuc2V0bG9jYWxlKHNlbGYubG9jYWxlX3R5cGUpCisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUoc2VsZi5sb2NhbGVfdHlwZSwgZW5VU19sb2NhbGUpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAidGVzdGluZyB3aXRoIFwiJXNcIi4uLiIgJSBlblVTX2xvY2FsZSwKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShzZWxmLmxvY2FsZV90eXBlLCBzZWxmLm9sZGxvY2FsZSkKKworCitjbGFzcyBCYXNlQ29va2VkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIworICAgICMgQmFzZSBjbGFzcyBmb3IgdGVzdHMgdXNpbmcgY29va2VkIGxvY2FsZWNvbnYoKSB2YWx1ZXMKKyAgICAjCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGxvY2FsZS5fb3ZlcnJpZGVfbG9jYWxlY29udiA9IHNlbGYuY29va2VkX3ZhbHVlcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBsb2NhbGUuX292ZXJyaWRlX2xvY2FsZWNvbnYgPSB7fQorCisKK2NsYXNzIENDb29rZWRUZXN0KEJhc2VDb29rZWRUZXN0KToKKyAgICAjIEEgY29va2VkICJDIiBsb2NhbGUKKworICAgIGNvb2tlZF92YWx1ZXMgPSB7CisgICAgICAgICdjdXJyZW5jeV9zeW1ib2wnOiAnJywKKyAgICAgICAgJ2RlY2ltYWxfcG9pbnQnOiAnLicsCisgICAgICAgICdmcmFjX2RpZ2l0cyc6IDEyNywKKyAgICAgICAgJ2dyb3VwaW5nJzogW10sCisgICAgICAgICdpbnRfY3Vycl9zeW1ib2wnOiAnJywKKyAgICAgICAgJ2ludF9mcmFjX2RpZ2l0cyc6IDEyNywKKyAgICAgICAgJ21vbl9kZWNpbWFsX3BvaW50JzogJycsCisgICAgICAgICdtb25fZ3JvdXBpbmcnOiBbXSwKKyAgICAgICAgJ21vbl90aG91c2FuZHNfc2VwJzogJycsCisgICAgICAgICduX2NzX3ByZWNlZGVzJzogMTI3LAorICAgICAgICAnbl9zZXBfYnlfc3BhY2UnOiAxMjcsCisgICAgICAgICduX3NpZ25fcG9zbic6IDEyNywKKyAgICAgICAgJ25lZ2F0aXZlX3NpZ24nOiAnJywKKyAgICAgICAgJ3BfY3NfcHJlY2VkZXMnOiAxMjcsCisgICAgICAgICdwX3NlcF9ieV9zcGFjZSc6IDEyNywKKyAgICAgICAgJ3Bfc2lnbl9wb3NuJzogMTI3LAorICAgICAgICAncG9zaXRpdmVfc2lnbic6ICcnLAorICAgICAgICAndGhvdXNhbmRzX3NlcCc6ICcnCisgICAgfQorCitjbGFzcyBFblVTQ29va2VkVGVzdChCYXNlQ29va2VkVGVzdCk6CisgICAgIyBBIGNvb2tlZCAiZW5fVVMiIGxvY2FsZQorCisgICAgY29va2VkX3ZhbHVlcyA9IHsKKyAgICAgICAgJ2N1cnJlbmN5X3N5bWJvbCc6ICckJywKKyAgICAgICAgJ2RlY2ltYWxfcG9pbnQnOiAnLicsCisgICAgICAgICdmcmFjX2RpZ2l0cyc6IDIsCisgICAgICAgICdncm91cGluZyc6IFszLCAzLCAwXSwKKyAgICAgICAgJ2ludF9jdXJyX3N5bWJvbCc6ICdVU0QgJywKKyAgICAgICAgJ2ludF9mcmFjX2RpZ2l0cyc6IDIsCisgICAgICAgICdtb25fZGVjaW1hbF9wb2ludCc6ICcuJywKKyAgICAgICAgJ21vbl9ncm91cGluZyc6IFszLCAzLCAwXSwKKyAgICAgICAgJ21vbl90aG91c2FuZHNfc2VwJzogJywnLAorICAgICAgICAnbl9jc19wcmVjZWRlcyc6IDEsCisgICAgICAgICduX3NlcF9ieV9zcGFjZSc6IDAsCisgICAgICAgICduX3NpZ25fcG9zbic6IDEsCisgICAgICAgICduZWdhdGl2ZV9zaWduJzogJy0nLAorICAgICAgICAncF9jc19wcmVjZWRlcyc6IDEsCisgICAgICAgICdwX3NlcF9ieV9zcGFjZSc6IDAsCisgICAgICAgICdwX3NpZ25fcG9zbic6IDEsCisgICAgICAgICdwb3NpdGl2ZV9zaWduJzogJycsCisgICAgICAgICd0aG91c2FuZHNfc2VwJzogJywnCisgICAgfQorCisKK2NsYXNzIEZyRlJDb29rZWRUZXN0KEJhc2VDb29rZWRUZXN0KToKKyAgICAjIEEgY29va2VkICJmcl9GUiIgbG9jYWxlIHdpdGggYSBzcGFjZSBjaGFyYWN0ZXIgYXMgZGVjaW1hbCBzZXBhcmF0b3IKKyAgICAjIGFuZCBhIG5vbi1BU0NJSSBjdXJyZW5jeSBzeW1ib2wuCisKKyAgICBjb29rZWRfdmFsdWVzID0geworICAgICAgICAnY3VycmVuY3lfc3ltYm9sJzogJ1x4ZTJceDgyXHhhYycsCisgICAgICAgICdkZWNpbWFsX3BvaW50JzogJywnLAorICAgICAgICAnZnJhY19kaWdpdHMnOiAyLAorICAgICAgICAnZ3JvdXBpbmcnOiBbMywgMywgMF0sCisgICAgICAgICdpbnRfY3Vycl9zeW1ib2wnOiAnRVVSICcsCisgICAgICAgICdpbnRfZnJhY19kaWdpdHMnOiAyLAorICAgICAgICAnbW9uX2RlY2ltYWxfcG9pbnQnOiAnLCcsCisgICAgICAgICdtb25fZ3JvdXBpbmcnOiBbMywgMywgMF0sCisgICAgICAgICdtb25fdGhvdXNhbmRzX3NlcCc6ICcgJywKKyAgICAgICAgJ25fY3NfcHJlY2VkZXMnOiAwLAorICAgICAgICAnbl9zZXBfYnlfc3BhY2UnOiAxLAorICAgICAgICAnbl9zaWduX3Bvc24nOiAxLAorICAgICAgICAnbmVnYXRpdmVfc2lnbic6ICctJywKKyAgICAgICAgJ3BfY3NfcHJlY2VkZXMnOiAwLAorICAgICAgICAncF9zZXBfYnlfc3BhY2UnOiAxLAorICAgICAgICAncF9zaWduX3Bvc24nOiAxLAorICAgICAgICAncG9zaXRpdmVfc2lnbic6ICcnLAorICAgICAgICAndGhvdXNhbmRzX3NlcCc6ICcgJworICAgIH0KKworCitjbGFzcyBCYXNlRm9ybWF0dGluZ1Rlc3Qob2JqZWN0KToKKyAgICAjCisgICAgIyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgZm9ybWF0dGluZyB0ZXN0cworICAgICMKKworICAgIGRlZiBfdGVzdF9mb3JtYXRmdW5jKHNlbGYsIGZvcm1hdCwgdmFsdWUsIG91dCwgZnVuYywgKipmb3JtYXRfb3B0cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBmdW5jKGZvcm1hdCwgdmFsdWUsICoqZm9ybWF0X29wdHMpLCBvdXQpCisKKyAgICBkZWYgX3Rlc3RfZm9ybWF0KHNlbGYsIGZvcm1hdCwgdmFsdWUsIG91dCwgKipmb3JtYXRfb3B0cyk6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0ZnVuYyhmb3JtYXQsIHZhbHVlLCBvdXQsCisgICAgICAgICAgICBmdW5jPWxvY2FsZS5mb3JtYXQsICoqZm9ybWF0X29wdHMpCisKKyAgICBkZWYgX3Rlc3RfZm9ybWF0X3N0cmluZyhzZWxmLCBmb3JtYXQsIHZhbHVlLCBvdXQsICoqZm9ybWF0X29wdHMpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdGZ1bmMoZm9ybWF0LCB2YWx1ZSwgb3V0LAorICAgICAgICAgICAgZnVuYz1sb2NhbGUuZm9ybWF0X3N0cmluZywgKipmb3JtYXRfb3B0cykKKworICAgIGRlZiBfdGVzdF9jdXJyZW5jeShzZWxmLCB2YWx1ZSwgb3V0LCAqKmZvcm1hdF9vcHRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuY3VycmVuY3kodmFsdWUsICoqZm9ybWF0X29wdHMpLCBvdXQpCisKKworY2xhc3MgRW5VU051bWJlckZvcm1hdHRpbmcoQmFzZUZvcm1hdHRpbmdUZXN0KToKKyAgICAjIFhYWCB0aGVyZSBpcyBhIGdyb3VwaW5nICsgcGFkZGluZyBidWcgd2hlbiB0aGUgdGhvdXNhbmRzIHNlcGFyYXRvcgorICAgICMgaXMgZW1wdHkgYnV0IHRoZSBncm91cGluZyBhcnJheSBjb250YWlucyB2YWx1ZXMgKGUuZy4gU29sYXJpcyAxMCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXAgPSBsb2NhbGUubG9jYWxlY29udigpWyd0aG91c2FuZHNfc2VwJ10KKworICAgIGRlZiB0ZXN0X2dyb3VwaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJWYiLCAxMDI0LCBncm91cGluZz0xLCBvdXQ9JzElczAyNC4wMDAwMDAnICUgc2VsZi5zZXApCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlZiIsIDEwMiwgZ3JvdXBpbmc9MSwgb3V0PScxMDIuMDAwMDAwJykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiVmIiwgLTQyLCBncm91cGluZz0xLCBvdXQ9Jy00Mi4wMDAwMDAnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJStmIiwgLTQyLCBncm91cGluZz0xLCBvdXQ9Jy00Mi4wMDAwMDAnKQorCisgICAgZGVmIHRlc3RfZ3JvdXBpbmdfYW5kX3BhZGRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlMjAuZiIsIC00MiwgZ3JvdXBpbmc9MSwgb3V0PSctNDInLnJqdXN0KDIwKSkKKyAgICAgICAgaWYgc2VsZi5zZXA6CisgICAgICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJSsxMC5mIiwgLTQyMDAsIGdyb3VwaW5nPTEsCisgICAgICAgICAgICAgICAgb3V0PSgnLTQlczIwMCcgJSBzZWxmLnNlcCkucmp1c3QoMTApKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUtMTAuZiIsIC00MjAwLCBncm91cGluZz0xLAorICAgICAgICAgICAgICAgIG91dD0oJy00JXMyMDAnICUgc2VsZi5zZXApLmxqdXN0KDEwKSkKKworICAgIGRlZiB0ZXN0X2ludGVnZXJfZ3JvdXBpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlZCIsIDQyMDAsIGdyb3VwaW5nPVRydWUsIG91dD0nNCVzMjAwJyAlIHNlbGYuc2VwKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJStkIiwgNDIwMCwgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScrNCVzMjAwJyAlIHNlbGYuc2VwKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJStkIiwgLTQyMDAsIGdyb3VwaW5nPVRydWUsIG91dD0nLTQlczIwMCcgJSBzZWxmLnNlcCkKKworICAgIGRlZiB0ZXN0X2ludGVnZXJfZ3JvdXBpbmdfYW5kX3BhZGRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlMTBkIiwgNDIwMCwgZ3JvdXBpbmc9VHJ1ZSwKKyAgICAgICAgICAgIG91dD0oJzQlczIwMCcgJSBzZWxmLnNlcCkucmp1c3QoMTApKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS0xMGQiLCAtNDIwMCwgZ3JvdXBpbmc9VHJ1ZSwKKyAgICAgICAgICAgIG91dD0oJy00JXMyMDAnICUgc2VsZi5zZXApLmxqdXN0KDEwKSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiVmIiwgMTAyNCwgZ3JvdXBpbmc9MCwgb3V0PScxMDI0LjAwMDAwMCcpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlZiIsIDEwMiwgZ3JvdXBpbmc9MCwgb3V0PScxMDIuMDAwMDAwJykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiVmIiwgLTQyLCBncm91cGluZz0wLCBvdXQ9Jy00Mi4wMDAwMDAnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJStmIiwgLTQyLCBncm91cGluZz0wLCBvdXQ9Jy00Mi4wMDAwMDAnKQorCisgICAgZGVmIHRlc3RfcGFkZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUyMC5mIiwgLTQyLCBncm91cGluZz0wLCBvdXQ9Jy00Micucmp1c3QoMjApKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJSsxMC5mIiwgLTQyMDAsIGdyb3VwaW5nPTAsIG91dD0nLTQyMDAnLnJqdXN0KDEwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUtMTAuZiIsIDQyMDAsIGdyb3VwaW5nPTAsIG91dD0nNDIwMCcubGp1c3QoMTApKQorCisgICAgZGVmIHRlc3RfY29tcGxleF9mb3JtYXR0aW5nKHNlbGYpOgorICAgICAgICAjIFNwYWNlcyBpbiBmb3JtYXR0aW5nIHN0cmluZworICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdF9zdHJpbmcoIk9uZSBtaWxsaW9uIGlzICVpIiwgMTAwMDAwMCwgZ3JvdXBpbmc9MSwKKyAgICAgICAgICAgIG91dD0nT25lIG1pbGxpb24gaXMgMSVzMDAwJXMwMDAnICUgKHNlbGYuc2VwLCBzZWxmLnNlcCkpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0X3N0cmluZygiT25lICBtaWxsaW9uIGlzICVpIiwgMTAwMDAwMCwgZ3JvdXBpbmc9MSwKKyAgICAgICAgICAgIG91dD0nT25lICBtaWxsaW9uIGlzIDElczAwMCVzMDAwJyAlIChzZWxmLnNlcCwgc2VsZi5zZXApKQorICAgICAgICAjIERvdHMgaW4gZm9ybWF0dGluZyBzdHJpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXRfc3RyaW5nKCIuJWYuIiwgMTAwMC4wLCBvdXQ9Jy4xMDAwLjAwMDAwMC4nKQorICAgICAgICAjIFBhZGRpbmcKKyAgICAgICAgaWYgc2VsZi5zZXA6CisgICAgICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdF9zdHJpbmcoIi0tPiAgJTEwLjJmIiwgNDIwMCwgZ3JvdXBpbmc9MSwKKyAgICAgICAgICAgICAgICBvdXQ9Jy0tPiAgJyArICgnNCVzMjAwLjAwJyAlIHNlbGYuc2VwKS5yanVzdCgxMCkpCisgICAgICAgICMgQXN0ZXJpc2sgZm9ybWF0cworICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdF9zdHJpbmcoIiUxMC4qZiIsICgyLCAxMDAwKSwgZ3JvdXBpbmc9MCwKKyAgICAgICAgICAgIG91dD0nMTAwMC4wMCcucmp1c3QoMTApKQorICAgICAgICBpZiBzZWxmLnNlcDoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0X3N0cmluZygiJSouKmYiLCAoMTAsIDIsIDEwMDApLCBncm91cGluZz0xLAorICAgICAgICAgICAgICAgIG91dD0oJzElczAwMC4wMCcgJSBzZWxmLnNlcCkucmp1c3QoMTApKQorICAgICAgICAjIFRlc3QgbW9yZS1pbi1vbmUKKyAgICAgICAgaWYgc2VsZi5zZXA6CisgICAgICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdF9zdHJpbmcoImludCAlaSBmbG9hdCAlLjJmIHN0ciAlcyIsCisgICAgICAgICAgICAgICAgKDEwMDAsIDEwMDAuMCwgJ3N0cicpLCBncm91cGluZz0xLAorICAgICAgICAgICAgICAgIG91dD0naW50IDElczAwMCBmbG9hdCAxJXMwMDAuMDAgc3RyIHN0cicgJQorICAgICAgICAgICAgICAgIChzZWxmLnNlcCwgc2VsZi5zZXApKQorCisKK2NsYXNzIFRlc3RGb3JtYXRQYXR0ZXJuQXJnKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgaGFuZGxpbmcgb2YgcGF0dGVybiBhcmd1bWVudCBvZiBmb3JtYXQKKworICAgIGRlZiB0ZXN0X29ubHlPbmVQYXR0ZXJuKHNlbGYpOgorICAgICAgICAjIElzc3VlIDI1MjI6IGFjY2VwdCBleGFjdGx5IG9uZSAlIHBhdHRlcm4sIGFuZCBubyBleHRyYSBjaGFycy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVmXG4iLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVmXHIiLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVmXHJcbiIsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2NhbGUuZm9ybWF0LCAiICVmIiwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlZmciLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVeZyIsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2NhbGUuZm9ybWF0LCAiJWYlJSIsICdmb28nKQorCisKK2NsYXNzIFRlc3RMb2NhbGVGb3JtYXRTdHJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkdlbmVyYWwgdGVzdHMgb24gbG9jYWxlLmZvcm1hdF9zdHJpbmciIiIKKworICAgIGRlZiB0ZXN0X3BlcmNlbnRfZXNjYXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXRfc3RyaW5nKCclZiUlJywgMS4wKSwgJyVmJSUnICUgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXRfc3RyaW5nKCclZCAlZiUlZCcsICgxLCAxLjApKSwKKyAgICAgICAgICAgICclZCAlZiUlZCcgJSAoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuZm9ybWF0X3N0cmluZygnJShmb28pcyAlJWQnLCB7J2Zvbyc6ICdiYXInfSksCisgICAgICAgICAgICAoJyUoZm9vKXMgJSVkJyAlIHsnZm9vJzogJ2Jhcid9KSkKKworICAgIGRlZiB0ZXN0X21hcHBpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLmZvcm1hdF9zdHJpbmcoJyUoZm9vKXMgYmluZy4nLCB7J2Zvbyc6ICdiYXInfSksCisgICAgICAgICAgICAoJyUoZm9vKXMgYmluZy4nICUgeydmb28nOiAnYmFyJ30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXRfc3RyaW5nKCclKGZvbylzJywgeydmb28nOiAnYmFyJ30pLAorICAgICAgICAgICAgKCclKGZvbylzJyAlIHsnZm9vJzogJ2Jhcid9KSkKKworCisKK2NsYXNzIFRlc3ROdW1iZXJGb3JtYXR0aW5nKEJhc2VMb2NhbGl6ZWRUZXN0LCBFblVTTnVtYmVyRm9ybWF0dGluZyk6CisgICAgIyBUZXN0IG51bWJlciBmb3JtYXR0aW5nIHdpdGggYSByZWFsIEVuZ2xpc2ggbG9jYWxlLgorCisgICAgbG9jYWxlX3R5cGUgPSBsb2NhbGUuTENfTlVNRVJJQworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBCYXNlTG9jYWxpemVkVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBFblVTTnVtYmVyRm9ybWF0dGluZy5zZXRVcChzZWxmKQorCisKK2NsYXNzIFRlc3RFblVTTnVtYmVyRm9ybWF0dGluZyhFblVTQ29va2VkVGVzdCwgRW5VU051bWJlckZvcm1hdHRpbmcpOgorICAgICMgVGVzdCBudW1iZXIgZm9ybWF0dGluZyB3aXRoIGEgY29va2VkICJlbl9VUyIgbG9jYWxlLgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBFblVTQ29va2VkVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBFblVTTnVtYmVyRm9ybWF0dGluZy5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlc3RfY3VycmVuY3koc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY3VycmVuY3koNTAwMDAsICIkNTAwMDAuMDAiKQorICAgICAgICBzZWxmLl90ZXN0X2N1cnJlbmN5KDUwMDAwLCAiJDUwLDAwMC4wMCIsIGdyb3VwaW5nPVRydWUpCisgICAgICAgIHNlbGYuX3Rlc3RfY3VycmVuY3koNTAwMDAsICJVU0QgNTAsMDAwLjAwIiwKKyAgICAgICAgICAgIGdyb3VwaW5nPVRydWUsIGludGVybmF0aW9uYWw9VHJ1ZSkKKworCitjbGFzcyBUZXN0Q051bWJlckZvcm1hdHRpbmcoQ0Nvb2tlZFRlc3QsIEJhc2VGb3JtYXR0aW5nVGVzdCk6CisgICAgIyBUZXN0IG51bWJlciBmb3JtYXR0aW5nIHdpdGggYSBjb29rZWQgIkMiIGxvY2FsZS4KKworICAgIGRlZiB0ZXN0X2dyb3VwaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS4yZiIsIDEyMzQ1LjY3LCBncm91cGluZz1UcnVlLCBvdXQ9JzEyMzQ1LjY3JykKKworICAgIGRlZiB0ZXN0X2dyb3VwaW5nX2FuZF9wYWRkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJTkuMmYiLCAxMjM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScgMTIzNDUuNjcnKQorCisKK2NsYXNzIFRlc3RGckZSTnVtYmVyRm9ybWF0dGluZyhGckZSQ29va2VkVGVzdCwgQmFzZUZvcm1hdHRpbmdUZXN0KToKKyAgICAjIFRlc3QgbnVtYmVyIGZvcm1hdHRpbmcgd2l0aCBhIGNvb2tlZCAiZnJfRlIiIGxvY2FsZS4KKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfcG9pbnQoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlLjJmIiwgMTIzNDUuNjcsIG91dD0nMTIzNDUsNjcnKQorCisgICAgZGVmIHRlc3RfZ3JvdXBpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlLjJmIiwgMzQ1LjY3LCBncm91cGluZz1UcnVlLCBvdXQ9JzM0NSw2NycpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlLjJmIiwgMTIzNDUuNjcsIGdyb3VwaW5nPVRydWUsIG91dD0nMTIgMzQ1LDY3JykKKworICAgIGRlZiB0ZXN0X2dyb3VwaW5nX2FuZF9wYWRkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJTYuMmYiLCAzNDUuNjcsIGdyb3VwaW5nPVRydWUsIG91dD0nMzQ1LDY3JykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiU3LjJmIiwgMzQ1LjY3LCBncm91cGluZz1UcnVlLCBvdXQ9JyAzNDUsNjcnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJTguMmYiLCAxMjM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScxMiAzNDUsNjcnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJTkuMmYiLCAxMjM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScxMiAzNDUsNjcnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJTEwLjJmIiwgMTIzNDUuNjcsIGdyb3VwaW5nPVRydWUsIG91dD0nIDEyIDM0NSw2NycpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlLTYuMmYiLCAzNDUuNjcsIGdyb3VwaW5nPVRydWUsIG91dD0nMzQ1LDY3JykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUtNy4yZiIsIDM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PSczNDUsNjcgJykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUtOC4yZiIsIDEyMzQ1LjY3LCBncm91cGluZz1UcnVlLCBvdXQ9JzEyIDM0NSw2NycpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlLTkuMmYiLCAxMjM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScxMiAzNDUsNjcnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS0xMC4yZiIsIDEyMzQ1LjY3LCBncm91cGluZz1UcnVlLCBvdXQ9JzEyIDM0NSw2NyAnKQorCisgICAgZGVmIHRlc3RfaW50ZWdlcl9ncm91cGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiVkIiwgMjAwLCBncm91cGluZz1UcnVlLCBvdXQ9JzIwMCcpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlZCIsIDQyMDAsIGdyb3VwaW5nPVRydWUsIG91dD0nNCAyMDAnKQorCisgICAgZGVmIHRlc3RfaW50ZWdlcl9ncm91cGluZ19hbmRfcGFkZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiU0ZCIsIDQyMDAsIGdyb3VwaW5nPVRydWUsIG91dD0nNCAyMDAnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJTVkIiwgNDIwMCwgZ3JvdXBpbmc9VHJ1ZSwgb3V0PSc0IDIwMCcpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlMTBkIiwgNDIwMCwgZ3JvdXBpbmc9VHJ1ZSwgb3V0PSc0IDIwMCcucmp1c3QoMTApKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS00ZCIsIDQyMDAsIGdyb3VwaW5nPVRydWUsIG91dD0nNCAyMDAnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS01ZCIsIDQyMDAsIGdyb3VwaW5nPVRydWUsIG91dD0nNCAyMDAnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS0xMGQiLCA0MjAwLCBncm91cGluZz1UcnVlLCBvdXQ9JzQgMjAwJy5sanVzdCgxMCkpCisKKyAgICBkZWYgdGVzdF9jdXJyZW5jeShzZWxmKToKKyAgICAgICAgZXVybyA9IHUnXHUyMGFjJy5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5fdGVzdF9jdXJyZW5jeSg1MDAwMCwgIjUwMDAwLDAwICIgKyBldXJvKQorICAgICAgICBzZWxmLl90ZXN0X2N1cnJlbmN5KDUwMDAwLCAiNTAgMDAwLDAwICIgKyBldXJvLCBncm91cGluZz1UcnVlKQorICAgICAgICAjIFhYWCBpcyB0aGUgdHJhaWxpbmcgc3BhY2UgYSBidWc/CisgICAgICAgIHNlbGYuX3Rlc3RfY3VycmVuY3koNTAwMDAsICI1MCAwMDAsMDAgRVVSICIsCisgICAgICAgICAgICBncm91cGluZz1UcnVlLCBpbnRlcm5hdGlvbmFsPVRydWUpCisKKworY2xhc3MgVGVzdFN0cmluZ01ldGhvZHMoQmFzZUxvY2FsaXplZFRlc3QpOgorICAgIGxvY2FsZV90eXBlID0gbG9jYWxlLkxDX0NUWVBFCisKKyAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3N1bm9zNScgYW5kIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgICAgICMgVGVzdCBCU0QgUnVuZSBsb2NhbGUncyBidWcgZm9yIGlzY3R5cGUgZnVuY3Rpb25zLgorCisgICAgICAgIGRlZiB0ZXN0X2lzc3BhY2Uoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDIwJy5pc3NwYWNlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGEwJy5pc3NwYWNlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhhMScuaXNzcGFjZSgpLCBGYWxzZSkKKworICAgICAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhjMCcuaXNhbHBoYSgpLCBGYWxzZSkKKworICAgICAgICBkZWYgdGVzdF9pc2FsbnVtKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhjMCcuaXNhbG51bSgpLCBGYWxzZSkKKworICAgICAgICBkZWYgdGVzdF9pc3VwcGVyKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhjMCcuaXN1cHBlcigpLCBGYWxzZSkKKworICAgICAgICBkZWYgdGVzdF9pc2xvd2VyKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhjMCcuaXNsb3dlcigpLCBGYWxzZSkKKworICAgICAgICBkZWYgdGVzdF9sb3dlcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4Y2NceDg1Jy5sb3dlcigpLCAnXHhjY1x4ODUnKQorCisgICAgICAgIGRlZiB0ZXN0X3VwcGVyKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhlZFx4OTVceGEwJy51cHBlcigpLCAnXHhlZFx4OTVceGEwJykKKworICAgICAgICBkZWYgdGVzdF9zdHJpcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZWRceDk1XHhhMCcuc3RyaXAoKSwgJ1x4ZWRceDk1XHhhMCcpCisKKyAgICAgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGVjXHhhMFx4YmMnLnNwbGl0KCksIFsnXHhlY1x4YTBceGJjJ10pCisKKworY2xhc3MgVGVzdE1pc2NlbGxhbmVvdXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2dldHByZWZlcnJlZGVuY29kaW5nKHNlbGYpOgorICAgICAgICAjIEludm9rZSBnZXRwcmVmZXJyZWRlbmNvZGluZyB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgZXhjZXB0aW9ucy4KKyAgICAgICAgZW5jID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkKKyAgICAgICAgaWYgZW5jOgorICAgICAgICAgICAgIyBJZiBlbmNvZGluZyBub24tZW1wdHksIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZAorICAgICAgICAgICAgY29kZWNzLmxvb2t1cChlbmMpCisKKyAgICBpZiBoYXNhdHRyKGxvY2FsZSwgInN0cmNvbGwiKToKKyAgICAgICAgZGVmIHRlc3Rfc3RyY29sbF8zMzAzKHNlbGYpOgorICAgICAgICAgICAgIyB0ZXN0IGNyYXNoZXIgZnJvbSBidWcgIzMzMDMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbG9jYWxlLnN0cmNvbGwsIHUiYSIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zZXRsb2NhbGVfY2F0ZWdvcnkoc2VsZik6CisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCkKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfVElNRSkKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUpCisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NPTExBVEUpCisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX01PTkVUQVJZKQorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19OVU1FUklDKQorCisgICAgICAgICMgY3Jhc2hlciBmcm9tIGJ1ZyAjNzQxOQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhsb2NhbGUuRXJyb3IsIGxvY2FsZS5zZXRsb2NhbGUsIDEyMzQ1KQorCisgICAgZGVmIHRlc3RfZ2V0c2V0bG9jYWxlX2lzc3VlMTgxMyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTgxMzogc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgbG9jYWxlIHVuZGVyIGEgVHVya2lzaCBsb2NhbGUKKyAgICAgICAgb2xkbG9jYWxlID0gbG9jYWxlLmdldGxvY2FsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb2NhbGUuc2V0bG9jYWxlLCBsb2NhbGUuTENfQ1RZUEUsIG9sZGxvY2FsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUsICd0cl9UUicpCisgICAgICAgIGV4Y2VwdCBsb2NhbGUuRXJyb3I6CisgICAgICAgICAgICAjIFVuc3VwcG9ydGVkIGxvY2FsZSBvbiB0aGlzIHN5c3RlbQorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgndGVzdCBuZWVkcyBUdXJraXNoIGxvY2FsZScpCisgICAgICAgIGxvYyA9IGxvY2FsZS5nZXRsb2NhbGUoKQorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSwgbG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYywgbG9jYWxlLmdldGxvY2FsZSgpKQorCisgICAgZGVmIHRlc3Rfbm9ybWFsaXplX2lzc3VlMTI3NTIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE4MTMgY2F1c2VkIGEgcmVncmVzc2lvbiB3aGVyZSBsb2NhbGUubm9ybWFsaXplKCkgd291bGQgbm8KKyAgICAgICAgIyBsb25nZXIgYWNjZXB0IHVuaWNvZGUgc3RyaW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUubm9ybWFsaXplKHUnZW5fVVMnKSwgJ2VuX1VTLklTTzg4NTktMScpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gWworICAgICAgICBUZXN0TWlzY2VsbGFuZW91cywKKyAgICAgICAgVGVzdEZvcm1hdFBhdHRlcm5BcmcsCisgICAgICAgIFRlc3RMb2NhbGVGb3JtYXRTdHJpbmcsCisgICAgICAgIFRlc3RFblVTTnVtYmVyRm9ybWF0dGluZywKKyAgICAgICAgVGVzdENOdW1iZXJGb3JtYXR0aW5nLAorICAgICAgICBUZXN0RnJGUk51bWJlckZvcm1hdHRpbmcsCisgICAgXQorICAgICMgU2tpcFRlc3QgY2FuJ3QgYmUgcmFpc2VkIGluc2lkZSB1bml0dGVzdHMsIGhhbmRsZSBpdCBtYW51YWxseSBpbnN0ZWFkCisgICAgdHJ5OgorICAgICAgICBnZXRfZW5VU19sb2NhbGUoKQorICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdCBhcyBlOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIlNvbWUgdGVzdHMgd2lsbCBiZSBkaXNhYmxlZDogJXMiICUgZQorICAgIGVsc2U6CisgICAgICAgIHRlc3RzICs9IFtUZXN0TnVtYmVyRm9ybWF0dGluZywgVGVzdFN0cmluZ01ldGhvZHNdCisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFiYzQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKQEAgLTAsMCArMSwxOTk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDEtMjAxMyBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAorIyBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KKyMgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBWaW5heSBTYWppcAorIyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24KKyMgb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyMgVklOQVkgU0FKSVAgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORworIyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwKKyMgVklOQVkgU0FKSVAgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SCisjIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorIyBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorIyBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisiIiJUZXN0IGhhcm5lc3MgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZS4gUnVuIGFsbCB0ZXN0cy4KKworQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisiIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBsb2dnaW5nLmhhbmRsZXJzCitpbXBvcnQgbG9nZ2luZy5jb25maWcKKworaW1wb3J0IGNvZGVjcworaW1wb3J0IGNQaWNrbGUKK2ltcG9ydCBjU3RyaW5nSU8KK2ltcG9ydCBnYworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHJlCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc29ja2V0Citmcm9tIFNvY2tldFNlcnZlciBpbXBvcnQgVGhyZWFkaW5nVENQU2VydmVyLCBTdHJlYW1SZXF1ZXN0SGFuZGxlcgoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl93aXRoX2xvY2FsZSwgcnVuX3VuaXR0ZXN0CitpbXBvcnQgdGV4dHdyYXAKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IHdlYWtyZWYKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCitjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBsb2dnaW5nIHRlc3RzLiIiIgorCisgICAgbG9nX2Zvcm1hdCA9ICIlKG5hbWUpcyAtPiAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcdy5dKykgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgbWVzc2FnZV9udW0gPSAwCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIlNldHVwIHRoZSBkZWZhdWx0IGxvZ2dpbmcgc3RyZWFtIHRvIGFuIGludGVybmFsIFN0cmluZ0lPIGluc3RhbmNlLAorICAgICAgICBzbyB0aGF0IHdlIGNhbiBleGFtaW5lIGxvZyBvdXRwdXQgYXMgd2Ugd2FudC4iIiIKKyAgICAgICAgbG9nZ2VyX2RpY3QgPSBsb2dnaW5nLmdldExvZ2dlcigpLm1hbmFnZXIubG9nZ2VyRGljdAorICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcnMgPSBsb2dnaW5nLl9oYW5kbGVycy5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcl9saXN0ID0gbG9nZ2luZy5faGFuZGxlckxpc3RbOl0KKyAgICAgICAgICAgIHNlbGYuc2F2ZWRfbG9nZ2VycyA9IGxvZ2dlcl9kaWN0LmNvcHkoKQorICAgICAgICAgICAgc2VsZi5zYXZlZF9sZXZlbF9uYW1lcyA9IGxvZ2dpbmcuX2xldmVsTmFtZXMuY29weSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCisKKyAgICAgICAgIyBTZXQgdHdvIHVudXNlZCBsb2dnZXJzOiBvbmUgbm9uLUFTQ0lJIGFuZCBvbmUgVW5pY29kZS4KKyAgICAgICAgIyBUaGlzIGlzIHRvIHRlc3QgY29ycmVjdCBvcGVyYXRpb24gd2hlbiBzb3J0aW5nIGV4aXN0aW5nCisgICAgICAgICMgbG9nZ2VycyBpbiB0aGUgY29uZmlndXJhdGlvbiBjb2RlLiBTZWUgaXNzdWUgODIwMS4KKyAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoIlx4YWJceGQ3XHhiYiIpCisgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKHUiXHUwMTNmXHUwMGQ2XHUwMDQ3IikKKworICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIiIpCisgICAgICAgIHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCA9IHNlbGYucm9vdF9sb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKQorCisgICAgICAgIHNlbGYuc3RyZWFtID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5yb290X2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICBzZWxmLnJvb3RfaGRsciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzZWxmLnN0cmVhbSkKKyAgICAgICAgc2VsZi5yb290X2Zvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKHNlbGYubG9nX2Zvcm1hdCkKKyAgICAgICAgc2VsZi5yb290X2hkbHIuc2V0Rm9ybWF0dGVyKHNlbGYucm9vdF9mb3JtYXR0ZXIpCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnJvb3RfaGRscikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIiIiUmVtb3ZlIG91ciBsb2dnaW5nIHN0cmVhbSwgYW5kIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGxvZ2dpbmcKKyAgICAgICAgbGV2ZWwuIiIiCisgICAgICAgIHNlbGYuc3RyZWFtLmNsb3NlKCkKKyAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9oZGxyKQorICAgICAgICB3aGlsZSBzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzOgorICAgICAgICAgICAgaCA9IHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0KKyAgICAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihoKQorICAgICAgICAgICAgaC5jbG9zZSgpCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuc2V0TGV2ZWwoc2VsZi5vcmlnaW5hbF9sb2dnaW5nX2xldmVsKQorICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvZ2dpbmcuX2xldmVsTmFtZXMuY2xlYXIoKQorICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxOYW1lcy51cGRhdGUoc2VsZi5zYXZlZF9sZXZlbF9uYW1lcykKKyAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLmNsZWFyKCkKKyAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLnVwZGF0ZShzZWxmLnNhdmVkX2hhbmRsZXJzKQorICAgICAgICAgICAgbG9nZ2luZy5faGFuZGxlckxpc3RbOl0gPSBzZWxmLnNhdmVkX2hhbmRsZXJfbGlzdAorICAgICAgICAgICAgbG9nZ2VyRGljdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkubWFuYWdlci5sb2dnZXJEaWN0CisgICAgICAgICAgICBsb2dnZXJEaWN0LmNsZWFyKCkKKyAgICAgICAgICAgIGxvZ2dlckRpY3QudXBkYXRlKHNlbGYuc2F2ZWRfbG9nZ2VycykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKKworICAgIGRlZiBhc3NlcnRfbG9nX2xpbmVzKHNlbGYsIGV4cGVjdGVkX3ZhbHVlcywgc3RyZWFtPU5vbmUpOgorICAgICAgICAiIiJNYXRjaCB0aGUgY29sbGVjdGVkIGxvZyBsaW5lcyBhZ2FpbnN0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgc2VsZi5leHBlY3RlZF9sb2dfcGF0LCBhbmQgY29tcGFyZSB0aGUgZXh0cmFjdGVkIGdyb3VwIHZhbHVlcyB0bworICAgICAgICB0aGUgZXhwZWN0ZWRfdmFsdWVzIGxpc3Qgb2YgdHVwbGVzLiIiIgorICAgICAgICBzdHJlYW0gPSBzdHJlYW0gb3Igc2VsZi5zdHJlYW0KKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShzZWxmLmV4cGVjdGVkX2xvZ19wYXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0cmVhbS5yZXNldCgpCisgICAgICAgICAgICBhY3R1YWxfbGluZXMgPSBzdHJlYW0ucmVhZGxpbmVzKCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBTdHJpbmdJTy5TdHJpbmdJTyBsYWNrcyBhIHJlc2V0KCkgbWV0aG9kLgorICAgICAgICAgICAgYWN0dWFsX2xpbmVzID0gc3RyZWFtLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFjdHVhbF9saW5lcyksIGxlbihleHBlY3RlZF92YWx1ZXMpKQorICAgICAgICBmb3IgYWN0dWFsLCBleHBlY3RlZCBpbiB6aXAoYWN0dWFsX2xpbmVzLCBleHBlY3RlZF92YWx1ZXMpOgorICAgICAgICAgICAgbWF0Y2ggPSBwYXQuc2VhcmNoKGFjdHVhbCkKKyAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkxvZyBsaW5lIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHBhdHRlcm46XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKG1hdGNoLmdyb3VwcygpKSwgZXhwZWN0ZWQpCisgICAgICAgIHMgPSBzdHJlYW0ucmVhZCgpCisgICAgICAgIGlmIHM6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlJlbWFpbmluZyBvdXRwdXQgYXQgZW5kIG9mIGxvZyBzdHJlYW06XG4iICsgcykKKworICAgIGRlZiBuZXh0X21lc3NhZ2Uoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIGEgbWVzc2FnZSBjb25zaXN0aW5nIHNvbGVseSBvZiBhbiBhdXRvLWluY3JlbWVudGluZworICAgICAgICBpbnRlZ2VyLiIiIgorICAgICAgICBzZWxmLm1lc3NhZ2VfbnVtICs9IDEKKyAgICAgICAgcmV0dXJuICIlZCIgJSBzZWxmLm1lc3NhZ2VfbnVtCisKKworY2xhc3MgQnVpbHRpbkxldmVsc1Rlc3QoQmFzZVRlc3QpOgorICAgICIiIlRlc3QgYnVpbHRpbiBsZXZlbHMgYW5kIHRoZWlyIGluaGVyaXRhbmNlLiIiIgorCisgICAgZGVmIHRlc3RfZmxhdChzZWxmKToKKyAgICAgICAgI0xvZ2dpbmcgbGV2ZWxzIGluIGEgZmxhdCBsb2dnZXIgbmFtZXNwYWNlLgorICAgICAgICBtID0gc2VsZi5uZXh0X21lc3NhZ2UKKworICAgICAgICBFUlIgPSBsb2dnaW5nLmdldExvZ2dlcigiRVJSIikKKyAgICAgICAgRVJSLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisgICAgICAgIElORiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJJTkYiKQorICAgICAgICBJTkYuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgICAgICBERUIgPSBsb2dnaW5nLmdldExvZ2dlcigiREVCIikKKyAgICAgICAgREVCLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICAgICAgIyBUaGVzZSBzaG91bGQgbG9nLgorICAgICAgICBFUlIubG9nKGxvZ2dpbmcuQ1JJVElDQUwsIG0oKSkKKyAgICAgICAgRVJSLmVycm9yKG0oKSkKKworICAgICAgICBJTkYubG9nKGxvZ2dpbmcuQ1JJVElDQUwsIG0oKSkKKyAgICAgICAgSU5GLmVycm9yKG0oKSkKKyAgICAgICAgSU5GLndhcm4obSgpKQorICAgICAgICBJTkYuaW5mbyhtKCkpCisKKyAgICAgICAgREVCLmxvZyhsb2dnaW5nLkNSSVRJQ0FMLCBtKCkpCisgICAgICAgIERFQi5lcnJvcihtKCkpCisgICAgICAgIERFQi53YXJuIChtKCkpCisgICAgICAgIERFQi5pbmZvIChtKCkpCisgICAgICAgIERFQi5kZWJ1ZyhtKCkpCisKKyAgICAgICAgIyBUaGVzZSBzaG91bGQgbm90IGxvZy4KKyAgICAgICAgRVJSLndhcm4obSgpKQorICAgICAgICBFUlIuaW5mbyhtKCkpCisgICAgICAgIEVSUi5kZWJ1ZyhtKCkpCisKKyAgICAgICAgSU5GLmRlYnVnKG0oKSkKKworICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdFUlInLCAnQ1JJVElDQUwnLCAnMScpLAorICAgICAgICAgICAgKCdFUlInLCAnRVJST1InLCAnMicpLAorICAgICAgICAgICAgKCdJTkYnLCAnQ1JJVElDQUwnLCAnMycpLAorICAgICAgICAgICAgKCdJTkYnLCAnRVJST1InLCAnNCcpLAorICAgICAgICAgICAgKCdJTkYnLCAnV0FSTklORycsICc1JyksCisgICAgICAgICAgICAoJ0lORicsICdJTkZPJywgJzYnKSwKKyAgICAgICAgICAgICgnREVCJywgJ0NSSVRJQ0FMJywgJzcnKSwKKyAgICAgICAgICAgICgnREVCJywgJ0VSUk9SJywgJzgnKSwKKyAgICAgICAgICAgICgnREVCJywgJ1dBUk5JTkcnLCAnOScpLAorICAgICAgICAgICAgKCdERUInLCAnSU5GTycsICcxMCcpLAorICAgICAgICAgICAgKCdERUInLCAnREVCVUcnLCAnMTEnKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9leHBsaWNpdChzZWxmKToKKyAgICAgICAgIyBMb2dnaW5nIGxldmVscyBpbiBhIG5lc3RlZCBuYW1lc3BhY2UsIGFsbCBleHBsaWNpdGx5IHNldC4KKyAgICAgICAgbSA9IHNlbGYubmV4dF9tZXNzYWdlCisKKyAgICAgICAgSU5GID0gbG9nZ2luZy5nZXRMb2dnZXIoIklORiIpCisgICAgICAgIElORi5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgICAgIElORl9FUlIgID0gbG9nZ2luZy5nZXRMb2dnZXIoIklORi5FUlIiKQorICAgICAgICBJTkZfRVJSLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisKKyAgICAgICAgIyBUaGVzZSBzaG91bGQgbG9nLgorICAgICAgICBJTkZfRVJSLmxvZyhsb2dnaW5nLkNSSVRJQ0FMLCBtKCkpCisgICAgICAgIElORl9FUlIuZXJyb3IobSgpKQorCisgICAgICAgICMgVGhlc2Ugc2hvdWxkIG5vdCBsb2cuCisgICAgICAgIElORl9FUlIud2FybihtKCkpCisgICAgICAgIElORl9FUlIuaW5mbyhtKCkpCisgICAgICAgIElORl9FUlIuZGVidWcobSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORi5FUlInLCAnQ1JJVElDQUwnLCAnMScpLAorICAgICAgICAgICAgKCdJTkYuRVJSJywgJ0VSUk9SJywgJzInKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgICNMb2dnaW5nIGxldmVscyBpbiBhIG5lc3RlZCBuYW1lc3BhY2UsIGluaGVyaXRlZCBmcm9tIHBhcmVudCBsb2dnZXJzLgorICAgICAgICBtID0gc2VsZi5uZXh0X21lc3NhZ2UKKworICAgICAgICBJTkYgPSBsb2dnaW5nLmdldExvZ2dlcigiSU5GIikKKyAgICAgICAgSU5GLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICAgICAgSU5GX0VSUiAgPSBsb2dnaW5nLmdldExvZ2dlcigiSU5GLkVSUiIpCisgICAgICAgIElORl9FUlIuc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKKyAgICAgICAgSU5GX1VOREVGID0gbG9nZ2luZy5nZXRMb2dnZXIoIklORi5VTkRFRiIpCisgICAgICAgIElORl9FUlJfVU5ERUYgPSBsb2dnaW5nLmdldExvZ2dlcigiSU5GLkVSUi5VTkRFRiIpCisgICAgICAgIFVOREVGID0gbG9nZ2luZy5nZXRMb2dnZXIoIlVOREVGIikKKworICAgICAgICAjIFRoZXNlIHNob3VsZCBsb2cuCisgICAgICAgIElORl9VTkRFRi5sb2cobG9nZ2luZy5DUklUSUNBTCwgbSgpKQorICAgICAgICBJTkZfVU5ERUYuZXJyb3IobSgpKQorICAgICAgICBJTkZfVU5ERUYud2FybihtKCkpCisgICAgICAgIElORl9VTkRFRi5pbmZvKG0oKSkKKyAgICAgICAgSU5GX0VSUl9VTkRFRi5sb2cobG9nZ2luZy5DUklUSUNBTCwgbSgpKQorICAgICAgICBJTkZfRVJSX1VOREVGLmVycm9yKG0oKSkKKworICAgICAgICAjIFRoZXNlIHNob3VsZCBub3QgbG9nLgorICAgICAgICBJTkZfVU5ERUYuZGVidWcobSgpKQorICAgICAgICBJTkZfRVJSX1VOREVGLndhcm4obSgpKQorICAgICAgICBJTkZfRVJSX1VOREVGLmluZm8obSgpKQorICAgICAgICBJTkZfRVJSX1VOREVGLmRlYnVnKG0oKSkKKworICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkYuVU5ERUYnLCAnQ1JJVElDQUwnLCAnMScpLAorICAgICAgICAgICAgKCdJTkYuVU5ERUYnLCAnRVJST1InLCAnMicpLAorICAgICAgICAgICAgKCdJTkYuVU5ERUYnLCAnV0FSTklORycsICczJyksCisgICAgICAgICAgICAoJ0lORi5VTkRFRicsICdJTkZPJywgJzQnKSwKKyAgICAgICAgICAgICgnSU5GLkVSUi5VTkRFRicsICdDUklUSUNBTCcsICc1JyksCisgICAgICAgICAgICAoJ0lORi5FUlIuVU5ERUYnLCAnRVJST1InLCAnNicpLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX3dpdGhfdmlydHVhbF9wYXJlbnQoc2VsZik6CisgICAgICAgICMgTG9nZ2luZyBsZXZlbHMgd2hlbiBzb21lIHBhcmVudCBkb2VzIG5vdCBleGlzdCB5ZXQuCisgICAgICAgIG0gPSBzZWxmLm5leHRfbWVzc2FnZQorCisgICAgICAgIElORiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJJTkYiKQorICAgICAgICBHUkFORENISUxEID0gbG9nZ2luZy5nZXRMb2dnZXIoIklORi5CQURQQVJFTlQuVU5ERUYiKQorICAgICAgICBDSElMRCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJJTkYuQkFEUEFSRU5UIikKKyAgICAgICAgSU5GLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKworICAgICAgICAjIFRoZXNlIHNob3VsZCBsb2cuCisgICAgICAgIEdSQU5EQ0hJTEQubG9nKGxvZ2dpbmcuRkFUQUwsIG0oKSkKKyAgICAgICAgR1JBTkRDSElMRC5pbmZvKG0oKSkKKyAgICAgICAgQ0hJTEQubG9nKGxvZ2dpbmcuRkFUQUwsIG0oKSkKKyAgICAgICAgQ0hJTEQuaW5mbyhtKCkpCisKKyAgICAgICAgIyBUaGVzZSBzaG91bGQgbm90IGxvZy4KKyAgICAgICAgR1JBTkRDSElMRC5kZWJ1ZyhtKCkpCisgICAgICAgIENISUxELmRlYnVnKG0oKSkKKworICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkYuQkFEUEFSRU5ULlVOREVGJywgJ0NSSVRJQ0FMJywgJzEnKSwKKyAgICAgICAgICAgICgnSU5GLkJBRFBBUkVOVC5VTkRFRicsICdJTkZPJywgJzInKSwKKyAgICAgICAgICAgICgnSU5GLkJBRFBBUkVOVCcsICdDUklUSUNBTCcsICczJyksCisgICAgICAgICAgICAoJ0lORi5CQURQQVJFTlQnLCAnSU5GTycsICc0JyksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX25hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbG9nZ2luZy5nZXRMb2dnZXIsIGFueSkKKworY2xhc3MgQmFzaWNGaWx0ZXJUZXN0KEJhc2VUZXN0KToKKworICAgICIiIlRlc3QgdGhlIGJ1bmRsZWQgRmlsdGVyIGNsYXNzLiIiIgorCisgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgorICAgICAgICAjIE9ubHkgbWVzc2FnZXMgc2F0aXNmeWluZyB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIHBhc3MgdGhyb3VnaCB0aGUKKyAgICAgICAgIyAgZmlsdGVyLgorICAgICAgICBmaWx0ZXJfID0gbG9nZ2luZy5GaWx0ZXIoInNwYW0uZWdncyIpCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhhbmRsZXIuYWRkRmlsdGVyKGZpbHRlcl8pCisgICAgICAgICAgICBzcGFtID0gbG9nZ2luZy5nZXRMb2dnZXIoInNwYW0iKQorICAgICAgICAgICAgc3BhbV9lZ2dzID0gbG9nZ2luZy5nZXRMb2dnZXIoInNwYW0uZWdncyIpCisgICAgICAgICAgICBzcGFtX2VnZ3NfZmlzaCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzcGFtLmVnZ3MuZmlzaCIpCisgICAgICAgICAgICBzcGFtX2Jha2VkYmVhbnMgPSBsb2dnaW5nLmdldExvZ2dlcigic3BhbS5iYWtlZGJlYW5zIikKKworICAgICAgICAgICAgc3BhbS5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzcGFtX2VnZ3MuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKSAgIyBHb29kLgorICAgICAgICAgICAgc3BhbV9lZ2dzX2Zpc2guaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKSAgIyBHb29kLgorICAgICAgICAgICAgc3BhbV9iYWtlZGJlYW5zLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ3NwYW0uZWdncycsICdJTkZPJywgJzInKSwKKyAgICAgICAgICAgICAgICAoJ3NwYW0uZWdncy5maXNoJywgJ0lORk8nLCAnMycpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGhhbmRsZXIucmVtb3ZlRmlsdGVyKGZpbHRlcl8pCisKKworIworIyAgIEZpcnN0LCB3ZSBkZWZpbmUgb3VyIGxldmVscy4gVGhlcmUgY2FuIGJlIGFzIG1hbnkgYXMgeW91IHdhbnQgLSB0aGUgb25seQorIyAgICAgbGltaXRhdGlvbnMgYXJlIHRoYXQgdGhleSBzaG91bGQgYmUgaW50ZWdlcnMsIHRoZSBsb3dlc3Qgc2hvdWxkIGJlID4gMCBhbmQKKyMgICBsYXJnZXIgdmFsdWVzIG1lYW4gbGVzcyBpbmZvcm1hdGlvbiBiZWluZyBsb2dnZWQuIElmIHlvdSBuZWVkIHNwZWNpZmljCisjICAgbGV2ZWwgdmFsdWVzIHdoaWNoIGRvIG5vdCBmaXQgaW50byB0aGVzZSBsaW1pdGF0aW9ucywgeW91IGNhbiB1c2UgYQorIyAgIG1hcHBpbmcgZGljdGlvbmFyeSB0byBjb252ZXJ0IGJldHdlZW4geW91ciBhcHBsaWNhdGlvbiBsZXZlbHMgYW5kIHRoZQorIyAgIGxvZ2dpbmcgc3lzdGVtLgorIworU0lMRU5UICAgICAgPSAxMjAKK1RBQ0lUVVJOICAgID0gMTE5CitURVJTRSAgICAgICA9IDExOAorRUZGVVNJVkUgICAgPSAxMTcKK1NPQ0lBQkxFICAgID0gMTE2CitWRVJCT1NFICAgICA9IDExNQorVEFMS0FUSVZFICAgPSAxMTQKK0dBUlJVTE9VUyAgID0gMTEzCitDSEFUVEVSQk9YICA9IDExMgorQk9SSU5HICAgICAgPSAxMTEKKworTEVWRUxfUkFOR0UgPSByYW5nZShCT1JJTkcsIFNJTEVOVCArIDEpCisKKyMKKyMgICBOZXh0LCB3ZSBkZWZpbmUgbmFtZXMgZm9yIG91ciBsZXZlbHMuIFlvdSBkb24ndCBuZWVkIHRvIGRvIHRoaXMgLSBpbiB3aGljaAorIyAgIGNhc2UgdGhlIHN5c3RlbSB3aWxsIHVzZSAiTGV2ZWwgbiIgdG8gZGVub3RlIHRoZSB0ZXh0IGZvciB0aGUgbGV2ZWwuCisjCitteV9sb2dnaW5nX2xldmVscyA9IHsKKyAgICBTSUxFTlQgICAgICA6ICdTaWxlbnQnLAorICAgIFRBQ0lUVVJOICAgIDogJ1RhY2l0dXJuJywKKyAgICBURVJTRSAgICAgICA6ICdUZXJzZScsCisgICAgRUZGVVNJVkUgICAgOiAnRWZmdXNpdmUnLAorICAgIFNPQ0lBQkxFICAgIDogJ1NvY2lhYmxlJywKKyAgICBWRVJCT1NFICAgICA6ICdWZXJib3NlJywKKyAgICBUQUxLQVRJVkUgICA6ICdUYWxrYXRpdmUnLAorICAgIEdBUlJVTE9VUyAgIDogJ0dhcnJ1bG91cycsCisgICAgQ0hBVFRFUkJPWCAgOiAnQ2hhdHRlcmJveCcsCisgICAgQk9SSU5HICAgICAgOiAnQm9yaW5nJywKK30KKworY2xhc3MgR2FycnVsb3VzRmlsdGVyKGxvZ2dpbmcuRmlsdGVyKToKKworICAgICIiIkEgZmlsdGVyIHdoaWNoIGJsb2NrcyBnYXJydWxvdXMgbWVzc2FnZXMuIiIiCisKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIHJldHVybiByZWNvcmQubGV2ZWxubyAhPSBHQVJSVUxPVVMKKworY2xhc3MgVmVyeVNwZWNpZmljRmlsdGVyKGxvZ2dpbmcuRmlsdGVyKToKKworICAgICIiIkEgZmlsdGVyIHdoaWNoIGJsb2NrcyBzb2NpYWJsZSBhbmQgdGFjaXR1cm4gbWVzc2FnZXMuIiIiCisKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIHJldHVybiByZWNvcmQubGV2ZWxubyBub3QgaW4gW1NPQ0lBQkxFLCBUQUNJVFVSTl0KKworCitjbGFzcyBDdXN0b21MZXZlbHNBbmRGaWx0ZXJzVGVzdChCYXNlVGVzdCk6CisKKyAgICAiIiJUZXN0IHZhcmlvdXMgZmlsdGVyaW5nIHBvc3NpYmlsaXRpZXMgd2l0aCBjdXN0b20gbG9nZ2luZyBsZXZlbHMuIiIiCisKKyAgICAjIFNraXAgdGhlIGxvZ2dlciBuYW1lIGdyb3VwLgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIGZvciBrLCB2IGluIG15X2xvZ2dpbmdfbGV2ZWxzLml0ZW1zKCk6CisgICAgICAgICAgICBsb2dnaW5nLmFkZExldmVsTmFtZShrLCB2KQorCisgICAgZGVmIGxvZ19hdF9hbGxfbGV2ZWxzKHNlbGYsIGxvZ2dlcik6CisgICAgICAgIGZvciBsdmwgaW4gTEVWRUxfUkFOR0U6CisgICAgICAgICAgICBsb2dnZXIubG9nKGx2bCwgc2VsZi5uZXh0X21lc3NhZ2UoKSkKKworICAgIGRlZiB0ZXN0X2xvZ2dlcl9maWx0ZXIoc2VsZik6CisgICAgICAgICMgRmlsdGVyIGF0IGxvZ2dlciBsZXZlbC4KKyAgICAgICAgc2VsZi5yb290X2xvZ2dlci5zZXRMZXZlbChWRVJCT1NFKQorICAgICAgICAjIExldmVscyA+PSAnVmVyYm9zZScgYXJlIGdvb2QuCisgICAgICAgIHNlbGYubG9nX2F0X2FsbF9sZXZlbHMoc2VsZi5yb290X2xvZ2dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnVmVyYm9zZScsICc1JyksCisgICAgICAgICAgICAoJ1NvY2lhYmxlJywgJzYnKSwKKyAgICAgICAgICAgICgnRWZmdXNpdmUnLCAnNycpLAorICAgICAgICAgICAgKCdUZXJzZScsICc4JyksCisgICAgICAgICAgICAoJ1RhY2l0dXJuJywgJzknKSwKKyAgICAgICAgICAgICgnU2lsZW50JywgJzEwJyksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9oYW5kbGVyX2ZpbHRlcihzZWxmKToKKyAgICAgICAgIyBGaWx0ZXIgYXQgaGFuZGxlciBsZXZlbC4KKyAgICAgICAgc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXS5zZXRMZXZlbChTT0NJQUJMRSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBMZXZlbHMgPj0gJ1NvY2lhYmxlJyBhcmUgZ29vZC4KKyAgICAgICAgICAgIHNlbGYubG9nX2F0X2FsbF9sZXZlbHMoc2VsZi5yb290X2xvZ2dlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdTb2NpYWJsZScsICc2JyksCisgICAgICAgICAgICAgICAgKCdFZmZ1c2l2ZScsICc3JyksCisgICAgICAgICAgICAgICAgKCdUZXJzZScsICc4JyksCisgICAgICAgICAgICAgICAgKCdUYWNpdHVybicsICc5JyksCisgICAgICAgICAgICAgICAgKCdTaWxlbnQnLCAnMTAnKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdLnNldExldmVsKGxvZ2dpbmcuTk9UU0VUKQorCisgICAgZGVmIHRlc3Rfc3BlY2lmaWNfZmlsdGVycyhzZWxmKToKKyAgICAgICAgIyBTZXQgYSBzcGVjaWZpYyBmaWx0ZXIgb2JqZWN0IG9uIHRoZSBoYW5kbGVyLCBhbmQgdGhlbiBhZGQgYW5vdGhlcgorICAgICAgICAjICBmaWx0ZXIgb2JqZWN0IG9uIHRoZSBsb2dnZXIgaXRzZWxmLgorICAgICAgICBoYW5kbGVyID0gc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXQorICAgICAgICBzcGVjaWZpY19maWx0ZXIgPSBOb25lCisgICAgICAgIGdhcnIgPSBHYXJydWxvdXNGaWx0ZXIoKQorICAgICAgICBoYW5kbGVyLmFkZEZpbHRlcihnYXJyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmxvZ19hdF9hbGxfbGV2ZWxzKHNlbGYucm9vdF9sb2dnZXIpCisgICAgICAgICAgICBmaXJzdF9saW5lcyA9IFsKKyAgICAgICAgICAgICAgICAjIE5vdGljZSBob3cgJ0dhcnJ1bG91cycgaXMgbWlzc2luZworICAgICAgICAgICAgICAgICgnQm9yaW5nJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0NoYXR0ZXJib3gnLCAnMicpLAorICAgICAgICAgICAgICAgICgnVGFsa2F0aXZlJywgJzQnKSwKKyAgICAgICAgICAgICAgICAoJ1ZlcmJvc2UnLCAnNScpLAorICAgICAgICAgICAgICAgICgnU29jaWFibGUnLCAnNicpLAorICAgICAgICAgICAgICAgICgnRWZmdXNpdmUnLCAnNycpLAorICAgICAgICAgICAgICAgICgnVGVyc2UnLCAnOCcpLAorICAgICAgICAgICAgICAgICgnVGFjaXR1cm4nLCAnOScpLAorICAgICAgICAgICAgICAgICgnU2lsZW50JywgJzEwJyksCisgICAgICAgICAgICBdCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoZmlyc3RfbGluZXMpCisKKyAgICAgICAgICAgIHNwZWNpZmljX2ZpbHRlciA9IFZlcnlTcGVjaWZpY0ZpbHRlcigpCisgICAgICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEZpbHRlcihzcGVjaWZpY19maWx0ZXIpCisgICAgICAgICAgICBzZWxmLmxvZ19hdF9hbGxfbGV2ZWxzKHNlbGYucm9vdF9sb2dnZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoZmlyc3RfbGluZXMgKyBbCisgICAgICAgICAgICAgICAgIyBOb3Qgb25seSAnR2FycnVsb3VzJyBpcyBzdGlsbCBtaXNzaW5nLCBidXQgYWxzbyAnU29jaWFibGUnCisgICAgICAgICAgICAgICAgIyBhbmQgJ1RhY2l0dXJuJworICAgICAgICAgICAgICAgICgnQm9yaW5nJywgJzExJyksCisgICAgICAgICAgICAgICAgKCdDaGF0dGVyYm94JywgJzEyJyksCisgICAgICAgICAgICAgICAgKCdUYWxrYXRpdmUnLCAnMTQnKSwKKyAgICAgICAgICAgICAgICAoJ1ZlcmJvc2UnLCAnMTUnKSwKKyAgICAgICAgICAgICAgICAoJ0VmZnVzaXZlJywgJzE3JyksCisgICAgICAgICAgICAgICAgKCdUZXJzZScsICcxOCcpLAorICAgICAgICAgICAgICAgICgnU2lsZW50JywgJzIwJyksCisgICAgICAgIF0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzcGVjaWZpY19maWx0ZXI6CisgICAgICAgICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVGaWx0ZXIoc3BlY2lmaWNfZmlsdGVyKQorICAgICAgICAgICAgaGFuZGxlci5yZW1vdmVGaWx0ZXIoZ2FycikKKworCitjbGFzcyBNZW1vcnlIYW5kbGVyVGVzdChCYXNlVGVzdCk6CisKKyAgICAiIiJUZXN0cyBmb3IgdGhlIE1lbW9yeUhhbmRsZXIuIiIiCisKKyAgICAjIERvIG5vdCBib3RoZXIgd2l0aCBhIGxvZ2dlciBuYW1lIGdyb3VwLgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYubWVtX2hkbHIgPSBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIoMTAsIGxvZ2dpbmcuV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yb290X2hkbHIpCisgICAgICAgIHNlbGYubWVtX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdtZW0nKQorICAgICAgICBzZWxmLm1lbV9sb2dnZXIucHJvcGFnYXRlID0gMAorICAgICAgICBzZWxmLm1lbV9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLm1lbV9oZGxyKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLm1lbV9oZGxyLmNsb3NlKCkKKyAgICAgICAgQmFzZVRlc3QudGVhckRvd24oc2VsZikKKworICAgIGRlZiB0ZXN0X2ZsdXNoKHNlbGYpOgorICAgICAgICAjIFRoZSBtZW1vcnkgaGFuZGxlciBmbHVzaGVzIHRvIGl0cyB0YXJnZXQgaGFuZGxlciBiYXNlZCBvbiBzcGVjaWZpYworICAgICAgICAjICBjcml0ZXJpYSAobWVzc2FnZSBjb3VudCBhbmQgbWVzc2FnZSBsZXZlbCkuCisgICAgICAgIHNlbGYubWVtX2xvZ2dlci5kZWJ1ZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisgICAgICAgIHNlbGYubWVtX2xvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKyAgICAgICAgIyBUaGlzIHdpbGwgZmx1c2ggYmVjYXVzZSB0aGUgbGV2ZWwgaXMgPj0gbG9nZ2luZy5XQVJOSU5HCisgICAgICAgIHNlbGYubWVtX2xvZ2dlci53YXJuKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIGxpbmVzID0gWworICAgICAgICAgICAgKCdERUJVRycsICcxJyksCisgICAgICAgICAgICAoJ0lORk8nLCAnMicpLAorICAgICAgICAgICAgKCdXQVJOSU5HJywgJzMnKSwKKyAgICAgICAgXQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMobGluZXMpCisgICAgICAgIGZvciBuIGluICg0LCAxNCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg5KToKKyAgICAgICAgICAgICAgICBzZWxmLm1lbV9sb2dnZXIuZGVidWcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhsaW5lcykKKyAgICAgICAgICAgICMgVGhpcyB3aWxsIGZsdXNoIGJlY2F1c2UgaXQncyB0aGUgMTB0aCBtZXNzYWdlIHNpbmNlIHRoZSBsYXN0CisgICAgICAgICAgICAjICBmbHVzaC4KKyAgICAgICAgICAgIHNlbGYubWVtX2xvZ2dlci5kZWJ1ZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbGluZXMgPSBsaW5lcyArIFsoJ0RFQlVHJywgc3RyKGkpKSBmb3IgaSBpbiByYW5nZShuLCBuICsgMTApXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKGxpbmVzKQorCisgICAgICAgIHNlbGYubWVtX2xvZ2dlci5kZWJ1ZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMobGluZXMpCisKKworY2xhc3MgRXhjZXB0aW9uRm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKToKKyAgICAiIiJBIHNwZWNpYWwgZXhjZXB0aW9uIGZvcm1hdHRlci4iIiIKKyAgICBkZWYgZm9ybWF0RXhjZXB0aW9uKHNlbGYsIGVpKToKKyAgICAgICAgcmV0dXJuICJHb3QgYSBbJXNdIiAlIGVpWzBdLl9fbmFtZV9fCisKKworY2xhc3MgQ29uZmlnRmlsZVRlc3QoQmFzZVRlc3QpOgorCisgICAgIiIiUmVhZGluZyBsb2dnaW5nIGNvbmZpZyBmcm9tIGEgLmluaS1zdHlsZSBjb25maWcgZmlsZS4iIiIKKworICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3XSspIFwrXCsgKFtcd10rKSQiCisKKyAgICAjIGNvbmZpZzAgaXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLgorICAgIGNvbmZpZzAgPSAiIiIKKyAgICBbbG9nZ2Vyc10KKyAgICBrZXlzPXJvb3QKKworICAgIFtoYW5kbGVyc10KKyAgICBrZXlzPWhhbmQxCisKKyAgICBbZm9ybWF0dGVyc10KKyAgICBrZXlzPWZvcm0xCisKKyAgICBbbG9nZ2VyX3Jvb3RdCisgICAgbGV2ZWw9V0FSTklORworICAgIGhhbmRsZXJzPWhhbmQxCisKKyAgICBbaGFuZGxlcl9oYW5kMV0KKyAgICBjbGFzcz1TdHJlYW1IYW5kbGVyCisgICAgbGV2ZWw9Tk9UU0VUCisgICAgZm9ybWF0dGVyPWZvcm0xCisgICAgYXJncz0oc3lzLnN0ZG91dCwpCisKKyAgICBbZm9ybWF0dGVyX2Zvcm0xXQorICAgIGZvcm1hdD0lKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzCisgICAgZGF0ZWZtdD0KKyAgICAiIiIKKworICAgICMgY29uZmlnMSBhZGRzIGEgbGl0dGxlIHRvIHRoZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLgorICAgIGNvbmZpZzEgPSAiIiIKKyAgICBbbG9nZ2Vyc10KKyAgICBrZXlzPXJvb3QscGFyc2VyCisKKyAgICBbaGFuZGxlcnNdCisgICAga2V5cz1oYW5kMQorCisgICAgW2Zvcm1hdHRlcnNdCisgICAga2V5cz1mb3JtMQorCisgICAgW2xvZ2dlcl9yb290XQorICAgIGxldmVsPVdBUk5JTkcKKyAgICBoYW5kbGVycz0KKworICAgIFtsb2dnZXJfcGFyc2VyXQorICAgIGxldmVsPURFQlVHCisgICAgaGFuZGxlcnM9aGFuZDEKKyAgICBwcm9wYWdhdGU9MQorICAgIHF1YWxuYW1lPWNvbXBpbGVyLnBhcnNlcgorCisgICAgW2hhbmRsZXJfaGFuZDFdCisgICAgY2xhc3M9U3RyZWFtSGFuZGxlcgorICAgIGxldmVsPU5PVFNFVAorICAgIGZvcm1hdHRlcj1mb3JtMQorICAgIGFyZ3M9KHN5cy5zdGRvdXQsKQorCisgICAgW2Zvcm1hdHRlcl9mb3JtMV0KKyAgICBmb3JtYXQ9JShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcworICAgIGRhdGVmbXQ9CisgICAgIiIiCisKKyAgICAjIGNvbmZpZzFhIG1vdmVzIHRoZSBoYW5kbGVyIHRvIHRoZSByb290LgorICAgIGNvbmZpZzFhID0gIiIiCisgICAgW2xvZ2dlcnNdCisgICAga2V5cz1yb290LHBhcnNlcgorCisgICAgW2hhbmRsZXJzXQorICAgIGtleXM9aGFuZDEKKworICAgIFtmb3JtYXR0ZXJzXQorICAgIGtleXM9Zm9ybTEKKworICAgIFtsb2dnZXJfcm9vdF0KKyAgICBsZXZlbD1XQVJOSU5HCisgICAgaGFuZGxlcnM9aGFuZDEKKworICAgIFtsb2dnZXJfcGFyc2VyXQorICAgIGxldmVsPURFQlVHCisgICAgaGFuZGxlcnM9CisgICAgcHJvcGFnYXRlPTEKKyAgICBxdWFsbmFtZT1jb21waWxlci5wYXJzZXIKKworICAgIFtoYW5kbGVyX2hhbmQxXQorICAgIGNsYXNzPVN0cmVhbUhhbmRsZXIKKyAgICBsZXZlbD1OT1RTRVQKKyAgICBmb3JtYXR0ZXI9Zm9ybTEKKyAgICBhcmdzPShzeXMuc3Rkb3V0LCkKKworICAgIFtmb3JtYXR0ZXJfZm9ybTFdCisgICAgZm9ybWF0PSUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMKKyAgICBkYXRlZm10PQorICAgICIiIgorCisgICAgIyBjb25maWcyIGhhcyBhIHN1YnRsZSBjb25maWd1cmF0aW9uIGVycm9yIHRoYXQgc2hvdWxkIGJlIHJlcG9ydGVkCisgICAgY29uZmlnMiA9IGNvbmZpZzEucmVwbGFjZSgic3lzLnN0ZG91dCIsICJzeXMuc3Rib3V0IikKKworICAgICMgY29uZmlnMyBoYXMgYSBsZXNzIHN1YnRsZSBjb25maWd1cmF0aW9uIGVycm9yCisgICAgY29uZmlnMyA9IGNvbmZpZzEucmVwbGFjZSgiZm9ybWF0dGVyPWZvcm0xIiwgImZvcm1hdHRlcj1taXNzcGVsbGVkX25hbWUiKQorCisgICAgIyBjb25maWc0IHNwZWNpZmllcyBhIGN1c3RvbSBmb3JtYXR0ZXIgY2xhc3MgdG8gYmUgbG9hZGVkCisgICAgY29uZmlnNCA9ICIiIgorICAgIFtsb2dnZXJzXQorICAgIGtleXM9cm9vdAorCisgICAgW2hhbmRsZXJzXQorICAgIGtleXM9aGFuZDEKKworICAgIFtmb3JtYXR0ZXJzXQorICAgIGtleXM9Zm9ybTEKKworICAgIFtsb2dnZXJfcm9vdF0KKyAgICBsZXZlbD1OT1RTRVQKKyAgICBoYW5kbGVycz1oYW5kMQorCisgICAgW2hhbmRsZXJfaGFuZDFdCisgICAgY2xhc3M9U3RyZWFtSGFuZGxlcgorICAgIGxldmVsPU5PVFNFVAorICAgIGZvcm1hdHRlcj1mb3JtMQorICAgIGFyZ3M9KHN5cy5zdGRvdXQsKQorCisgICAgW2Zvcm1hdHRlcl9mb3JtMV0KKyAgICBjbGFzcz0iIiIgKyBfX25hbWVfXyArICIiIi5FeGNlcHRpb25Gb3JtYXR0ZXIKKyAgICBmb3JtYXQ9JShsZXZlbG5hbWUpczolKG5hbWUpczolKG1lc3NhZ2UpcworICAgIGRhdGVmbXQ9CisgICAgIiIiCisKKyAgICAjIGNvbmZpZzUgc3BlY2lmaWVzIGEgY3VzdG9tIGhhbmRsZXIgY2xhc3MgdG8gYmUgbG9hZGVkCisgICAgY29uZmlnNSA9IGNvbmZpZzEucmVwbGFjZSgnY2xhc3M9U3RyZWFtSGFuZGxlcicsICdjbGFzcz1sb2dnaW5nLlN0cmVhbUhhbmRsZXInKQorCisgICAgIyBjb25maWc2IHVzZXMgJywgJyBkZWxpbWl0ZXJzIGluIHRoZSBoYW5kbGVycyBhbmQgZm9ybWF0dGVycyBzZWN0aW9ucworICAgIGNvbmZpZzYgPSAiIiIKKyAgICBbbG9nZ2Vyc10KKyAgICBrZXlzPXJvb3QscGFyc2VyCisKKyAgICBbaGFuZGxlcnNdCisgICAga2V5cz1oYW5kMSwgaGFuZDIKKworICAgIFtmb3JtYXR0ZXJzXQorICAgIGtleXM9Zm9ybTEsIGZvcm0yCisKKyAgICBbbG9nZ2VyX3Jvb3RdCisgICAgbGV2ZWw9V0FSTklORworICAgIGhhbmRsZXJzPQorCisgICAgW2xvZ2dlcl9wYXJzZXJdCisgICAgbGV2ZWw9REVCVUcKKyAgICBoYW5kbGVycz1oYW5kMQorICAgIHByb3BhZ2F0ZT0xCisgICAgcXVhbG5hbWU9Y29tcGlsZXIucGFyc2VyCisKKyAgICBbaGFuZGxlcl9oYW5kMV0KKyAgICBjbGFzcz1TdHJlYW1IYW5kbGVyCisgICAgbGV2ZWw9Tk9UU0VUCisgICAgZm9ybWF0dGVyPWZvcm0xCisgICAgYXJncz0oc3lzLnN0ZG91dCwpCisKKyAgICBbaGFuZGxlcl9oYW5kMl0KKyAgICBjbGFzcz1TdHJlYW1IYW5kbGVyCisgICAgbGV2ZWw9Tk9UU0VUCisgICAgZm9ybWF0dGVyPWZvcm0xCisgICAgYXJncz0oc3lzLnN0ZGVyciwpCisKKyAgICBbZm9ybWF0dGVyX2Zvcm0xXQorICAgIGZvcm1hdD0lKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzCisgICAgZGF0ZWZtdD0KKworICAgIFtmb3JtYXR0ZXJfZm9ybTJdCisgICAgZm9ybWF0PSUobWVzc2FnZSlzCisgICAgZGF0ZWZtdD0KKyAgICAiIiIKKworICAgICMgY29uZmlnNyBhZGRzIGEgY29tcGlsZXIgbG9nZ2VyLgorICAgIGNvbmZpZzcgPSAiIiIKKyAgICBbbG9nZ2Vyc10KKyAgICBrZXlzPXJvb3QscGFyc2VyLGNvbXBpbGVyCisKKyAgICBbaGFuZGxlcnNdCisgICAga2V5cz1oYW5kMQorCisgICAgW2Zvcm1hdHRlcnNdCisgICAga2V5cz1mb3JtMQorCisgICAgW2xvZ2dlcl9yb290XQorICAgIGxldmVsPVdBUk5JTkcKKyAgICBoYW5kbGVycz1oYW5kMQorCisgICAgW2xvZ2dlcl9jb21waWxlcl0KKyAgICBsZXZlbD1ERUJVRworICAgIGhhbmRsZXJzPQorICAgIHByb3BhZ2F0ZT0xCisgICAgcXVhbG5hbWU9Y29tcGlsZXIKKworICAgIFtsb2dnZXJfcGFyc2VyXQorICAgIGxldmVsPURFQlVHCisgICAgaGFuZGxlcnM9CisgICAgcHJvcGFnYXRlPTEKKyAgICBxdWFsbmFtZT1jb21waWxlci5wYXJzZXIKKworICAgIFtoYW5kbGVyX2hhbmQxXQorICAgIGNsYXNzPVN0cmVhbUhhbmRsZXIKKyAgICBsZXZlbD1OT1RTRVQKKyAgICBmb3JtYXR0ZXI9Zm9ybTEKKyAgICBhcmdzPShzeXMuc3Rkb3V0LCkKKworICAgIFtmb3JtYXR0ZXJfZm9ybTFdCisgICAgZm9ybWF0PSUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMKKyAgICBkYXRlZm10PQorICAgICIiIgorCisgICAgZGlzYWJsZV90ZXN0ID0gIiIiCisgICAgW2xvZ2dlcnNdCisgICAga2V5cz1yb290CisKKyAgICBbaGFuZGxlcnNdCisgICAga2V5cz1zY3JlZW4KKworICAgIFtmb3JtYXR0ZXJzXQorICAgIGtleXM9CisKKyAgICBbbG9nZ2VyX3Jvb3RdCisgICAgbGV2ZWw9REVCVUcKKyAgICBoYW5kbGVycz1zY3JlZW4KKworICAgIFtoYW5kbGVyX3NjcmVlbl0KKyAgICBsZXZlbD1ERUJVRworICAgIGNsYXNzPVN0cmVhbUhhbmRsZXIKKyAgICBhcmdzPShzeXMuc3Rkb3V0LCkKKyAgICBmb3JtYXR0ZXI9CisgICAgIiIiCisKKyAgICBkZWYgYXBwbHlfY29uZmlnKHNlbGYsIGNvbmYsICoqa3dhcmdzKToKKyAgICAgICAgZmlsZSA9IGNTdHJpbmdJTy5TdHJpbmdJTyh0ZXh0d3JhcC5kZWRlbnQoY29uZikpCisgICAgICAgIGxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWcoZmlsZSwgKiprd2FyZ3MpCisKKyAgICBkZWYgdGVzdF9jb25maWcwX29rKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyBmaWxlIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICAjIFdvbid0IG91dHB1dCBhbnl0aGluZworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgICMgT3V0cHV0cyBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWcxX29rKHNlbGYsIGNvbmZpZz1jb25maWcxKToKKyAgICAgICAgIyBBIGNvbmZpZyBmaWxlIGRlZmluaW5nIGEgc3ViLXBhcnNlciBhcyB3ZWxsLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKGNvbmZpZykKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzJfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgZmlsZSB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzIpCisKKyAgICBkZWYgdGVzdF9jb25maWczX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIGZpbGUgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdGFuZGFyZEVycm9yLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWczKQorCisgICAgZGVmIHRlc3RfY29uZmlnNF9vayhzZWxmKToKKyAgICAgICAgIyBBIGNvbmZpZyBmaWxlIHNwZWNpZnlpbmcgYSBjdXN0b20gZm9ybWF0dGVyIGNsYXNzLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnNCkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigianVzdCB0ZXN0aW5nIikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAiRVJST1I6cm9vdDpqdXN0IHRlc3RpbmdcbkdvdCBhIFtSdW50aW1lRXJyb3JdXG4iKQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5CisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWc1X29rKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfY29uZmlnMV9vayhjb25maWc9c2VsZi5jb25maWc1KQorCisgICAgZGVmIHRlc3RfY29uZmlnNl9vayhzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZzFfb2soY29uZmlnPXNlbGYuY29uZmlnNikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzdfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxYSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBTZWUgaXNzdWUgIzExNDI0LiBjb21waWxlci1oeXBoZW5hdGVkIHNvcnRzCisgICAgICAgICAgICAjIGJldHdlZW4gY29tcGlsZXIgYW5kIGNvbXBpbGVyLnh5eiBhbmQgdGhpcworICAgICAgICAgICAgIyB3YXMgcHJldmVudGluZyBjb21waWxlci54eXogZnJvbSBiZWluZyBpbmNsdWRlZAorICAgICAgICAgICAgIyBpbiB0aGUgY2hpbGQgbG9nZ2VycyBvZiBjb21waWxlciBiZWNhdXNlIG9mIGFuCisgICAgICAgICAgICAjIG92ZXJ6ZWFsb3VzIGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9uLgorICAgICAgICAgICAgaHlwaGVuYXRlZCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdjb21waWxlci1oeXBoZW5hdGVkJykKKyAgICAgICAgICAgICMgQWxsIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgaHlwaGVuYXRlZC5jcml0aWNhbChzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgICAgICgnQ1JJVElDQUwnLCAnMycpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzcpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9nZ2VyLmRpc2FibGVkKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLmxleGVyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgICMgV2lsbCBub3QgYXBwZWFyCisgICAgICAgICAgICBoeXBoZW5hdGVkLmNyaXRpY2FsKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICc0JyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc1JyksCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzYnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzcnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9sb2dnZXJfZGlzYWJsaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9nZ2VyLmRpc2FibGVkKQorICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ2dlci5kaXNhYmxlZCkKKyAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5kaXNhYmxlX3Rlc3QsIGRpc2FibGVfZXhpc3RpbmdfbG9nZ2Vycz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2dnZXIuZGlzYWJsZWQpCisKK2NsYXNzIExvZ1JlY29yZFN0cmVhbUhhbmRsZXIoU3RyZWFtUmVxdWVzdEhhbmRsZXIpOgorCisgICAgIiIiSGFuZGxlciBmb3IgYSBzdHJlYW1pbmcgbG9nZ2luZyByZXF1ZXN0LiBJdCBzYXZlcyB0aGUgbG9nIG1lc3NhZ2UgaW4gdGhlCisgICAgVENQIHNlcnZlcidzICdsb2dfb3V0cHV0JyBhdHRyaWJ1dGUuIiIiCisKKyAgICBUQ1BfTE9HX0VORCA9ICIhISFFTkQhISEiCisKKyAgICBkZWYgaGFuZGxlKHNlbGYpOgorICAgICAgICAiIiJIYW5kbGUgbXVsdGlwbGUgcmVxdWVzdHMgLSBlYWNoIGV4cGVjdGVkIHRvIGJlIG9mIDQtYnl0ZSBsZW5ndGgsCisgICAgICAgIGZvbGxvd2VkIGJ5IHRoZSBMb2dSZWNvcmQgaW4gcGlja2xlIGZvcm1hdC4gTG9ncyB0aGUgcmVjb3JkCisgICAgICAgIGFjY29yZGluZyB0byB3aGF0ZXZlciBwb2xpY3kgaXMgY29uZmlndXJlZCBsb2NhbGx5LiIiIgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgY2h1bmsgPSBzZWxmLmNvbm5lY3Rpb24ucmVjdig0KQorICAgICAgICAgICAgaWYgbGVuKGNodW5rKSA8IDQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNsZW4gPSBzdHJ1Y3QudW5wYWNrKCI+TCIsIGNodW5rKVswXQorICAgICAgICAgICAgY2h1bmsgPSBzZWxmLmNvbm5lY3Rpb24ucmVjdihzbGVuKQorICAgICAgICAgICAgd2hpbGUgbGVuKGNodW5rKSA8IHNsZW46CisgICAgICAgICAgICAgICAgY2h1bmsgPSBjaHVuayArIHNlbGYuY29ubmVjdGlvbi5yZWN2KHNsZW4gLSBsZW4oY2h1bmspKQorICAgICAgICAgICAgb2JqID0gc2VsZi51bnBpY2tsZShjaHVuaykKKyAgICAgICAgICAgIHJlY29yZCA9IGxvZ2dpbmcubWFrZUxvZ1JlY29yZChvYmopCisgICAgICAgICAgICBzZWxmLmhhbmRsZV9sb2dfcmVjb3JkKHJlY29yZCkKKworICAgIGRlZiB1bnBpY2tsZShzZWxmLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIGNQaWNrbGUubG9hZHMoZGF0YSkKKworICAgIGRlZiBoYW5kbGVfbG9nX3JlY29yZChzZWxmLCByZWNvcmQpOgorICAgICAgICAjIElmIHRoZSBlbmQtb2YtbWVzc2FnZXMgc2VudGluZWwgaXMgc2VlbiwgdGVsbCB0aGUgc2VydmVyIHRvCisgICAgICAgICMgIHRlcm1pbmF0ZS4KKyAgICAgICAgaWYgc2VsZi5UQ1BfTE9HX0VORCBpbiByZWNvcmQubXNnOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuYWJvcnQgPSAxCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5zZXJ2ZXIubG9nX291dHB1dCArPSByZWNvcmQubXNnICsgIlxuIgorCisKK2NsYXNzIExvZ1JlY29yZFNvY2tldFJlY2VpdmVyKFRocmVhZGluZ1RDUFNlcnZlcik6CisKKyAgICAiIiJBIHNpbXBsZS1taW5kZWQgVENQIHNvY2tldC1iYXNlZCBsb2dnaW5nIHJlY2VpdmVyIHN1aXRhYmxlIGZvciB0ZXN0CisgICAgcHVycG9zZXMuIiIiCisKKyAgICBhbGxvd19yZXVzZV9hZGRyZXNzID0gMQorICAgIGxvZ19vdXRwdXQgPSAiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9bG9nZ2luZy5oYW5kbGVycy5ERUZBVUxUX1RDUF9MT0dHSU5HX1BPUlQsCisgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyPUxvZ1JlY29yZFN0cmVhbUhhbmRsZXIpOgorICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIuX19pbml0X18oc2VsZiwgKGhvc3QsIHBvcnQpLCBoYW5kbGVyKQorICAgICAgICBzZWxmLmFib3J0ID0gRmFsc2UKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gMC4xCisgICAgICAgIHNlbGYuZmluaXNoZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgZGVmIHNlcnZlX3VudGlsX3N0b3BwZWQoc2VsZik6CisgICAgICAgIHdoaWxlIG5vdCBzZWxmLmFib3J0OgorICAgICAgICAgICAgcmQsIHdyLCBleCA9IHNlbGVjdC5zZWxlY3QoW3NlbGYuc29ja2V0LmZpbGVubygpXSwgW10sIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0KQorICAgICAgICAgICAgaWYgcmQ6CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgICMgTm90aWZ5IHRoZSBtYWluIHRocmVhZCB0aGF0IHdlJ3JlIGFib3V0IHRvIGV4aXQKKyAgICAgICAgc2VsZi5maW5pc2hlZC5zZXQoKQorICAgICAgICAjIGNsb3NlIHRoZSBsaXN0ZW4gc29ja2V0CisgICAgICAgIHNlbGYuc2VydmVyX2Nsb3NlKCkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgU29ja2V0SGFuZGxlclRlc3QoQmFzZVRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgU29ja2V0SGFuZGxlciBvYmplY3RzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJTZXQgdXAgYSBUQ1Agc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBTb2NrZXRIYW5kbGVyCisgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKKyAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi50Y3BzZXJ2ZXIgPSBMb2dSZWNvcmRTb2NrZXRSZWNlaXZlcihwb3J0PTApCisgICAgICAgIHNlbGYucG9ydCA9IHNlbGYudGNwc2VydmVyLnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgIHNlbGYudGhyZWFkcyA9IFsKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnRjcHNlcnZlci5zZXJ2ZV91bnRpbF9zdG9wcGVkKV0KKyAgICAgICAgZm9yIHRocmVhZCBpbiBzZWxmLnRocmVhZHM6CisgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQorCisgICAgICAgIHNlbGYuc29ja19oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyKCdsb2NhbGhvc3QnLCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuc29ja19oZGxyLnNldEZvcm1hdHRlcihzZWxmLnJvb3RfZm9ybWF0dGVyKQorICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXSkKKyAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuc29ja19oZGxyKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAiIiJTaHV0ZG93biB0aGUgVENQIHNlcnZlci4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50Y3BzZXJ2ZXIuYWJvcnQgPSBUcnVlCisgICAgICAgICAgICBkZWwgc2VsZi50Y3BzZXJ2ZXIKKyAgICAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnNvY2tfaGRscikKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyLmNsb3NlKCkKKyAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gc2VsZi50aHJlYWRzOgorICAgICAgICAgICAgICAgIHRocmVhZC5qb2luKDIuMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIEJhc2VUZXN0LnRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgZ2V0X291dHB1dChzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBsb2cgb3V0cHV0IGFzIHJlY2VpdmVkIGJ5IHRoZSBUQ1Agc2VydmVyLiIiIgorICAgICAgICAjIFNpZ25hbCB0aGUgVENQIHJlY2VpdmVyIGFuZCB3YWl0IGZvciBpdCB0byB0ZXJtaW5hdGUuCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuY3JpdGljYWwoTG9nUmVjb3JkU3RyZWFtSGFuZGxlci5UQ1BfTE9HX0VORCkKKyAgICAgICAgc2VsZi50Y3BzZXJ2ZXIuZmluaXNoZWQud2FpdCgyLjApCisgICAgICAgIHJldHVybiBzZWxmLnRjcHNlcnZlci5sb2dfb3V0cHV0CisKKyAgICBkZWYgdGVzdF9vdXRwdXQoc2VsZik6CisgICAgICAgICMgVGhlIGxvZyBtZXNzYWdlIHNlbnQgdG8gdGhlIFNvY2tldEhhbmRsZXIgaXMgcHJvcGVybHkgcmVjZWl2ZWQuCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0Y3AiKQorICAgICAgICBsb2dnZXIuZXJyb3IoInNwYW0iKQorICAgICAgICBsb2dnZXIuZGVidWcoImVnZ3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X291dHB1dCgpLCAic3BhbVxuZWdnc1xuIikKKworCitjbGFzcyBNZW1vcnlUZXN0KEJhc2VUZXN0KToKKworICAgICIiIlRlc3QgbWVtb3J5IHBlcnNpc3RlbmNlIG9mIGxvZ2dlciBvYmplY3RzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgYSBkaWN0IHRvIHJlbWVtYmVyIHBvdGVudGlhbGx5IGRlc3Ryb3llZCBvYmplY3RzLiIiIgorICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLl9zdXJ2aXZvcnMgPSB7fQorCisgICAgZGVmIF93YXRjaF9mb3Jfc3Vydml2YWwoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJXYXRjaCB0aGUgZ2l2ZW4gb2JqZWN0cyBmb3Igc3Vydml2YWwsIGJ5IGNyZWF0aW5nIHdlYWtyZWZzIHRvCisgICAgICAgIHRoZW0uIiIiCisgICAgICAgIGZvciBvYmogaW4gYXJnczoKKyAgICAgICAgICAgIGtleSA9IGlkKG9iaiksIHJlcHIob2JqKQorICAgICAgICAgICAgc2VsZi5fc3Vydml2b3JzW2tleV0gPSB3ZWFrcmVmLnJlZihvYmopCisKKyAgICBkZWYgX2Fzc2VydFRydWVzdXJ2aXZhbChzZWxmKToKKyAgICAgICAgIiIiQXNzZXJ0IHRoYXQgYWxsIG9iamVjdHMgd2F0Y2hlZCBmb3Igc3Vydml2YWwgaGF2ZSBzdXJ2aXZlZC4iIiIKKyAgICAgICAgIyBUcmlnZ2VyIGN5Y2xlIGJyZWFraW5nLgorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVhZCA9IFtdCisgICAgICAgIGZvciAoaWRfLCByZXByXyksIHJlZiBpbiBzZWxmLl9zdXJ2aXZvcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHJlZigpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGVhZC5hcHBlbmQocmVwcl8pCisgICAgICAgIGlmIGRlYWQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIiVkIG9iamVjdHMgc2hvdWxkIGhhdmUgc3Vydml2ZWQgIgorICAgICAgICAgICAgICAgICJidXQgaGF2ZSBiZWVuIGRlc3Ryb3llZDogJXMiICUgKGxlbihkZWFkKSwgIiwgIi5qb2luKGRlYWQpKSkKKworICAgIGRlZiB0ZXN0X3BlcnNpc3RlbnRfbG9nZ2VycyhzZWxmKToKKyAgICAgICAgIyBMb2dnZXIgb2JqZWN0cyBhcmUgcGVyc2lzdGVudCBhbmQgcmV0YWluIHRoZWlyIGNvbmZpZ3VyYXRpb24sIGV2ZW4KKyAgICAgICAgIyAgaWYgdmlzaWJsZSByZWZlcmVuY2VzIGFyZSBkZXN0cm95ZWQuCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgICAgICBmb28gPSBsb2dnaW5nLmdldExvZ2dlcigiZm9vIikKKyAgICAgICAgc2VsZi5fd2F0Y2hfZm9yX3N1cnZpdmFsKGZvbykKKyAgICAgICAgZm9vLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZGVidWcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgZm9vLmRlYnVnKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ2ZvbycsICdERUJVRycsICcyJyksCisgICAgICAgIF0pCisgICAgICAgIGRlbCBmb28KKyAgICAgICAgIyBmb28gaGFzIHN1cnZpdmVkLgorICAgICAgICBzZWxmLl9hc3NlcnRUcnVlc3Vydml2YWwoKQorICAgICAgICAjIGZvbyBoYXMgcmV0YWluZWQgaXRzIHNldHRpbmdzLgorICAgICAgICBiYXIgPSBsb2dnaW5nLmdldExvZ2dlcigiZm9vIikKKyAgICAgICAgYmFyLmRlYnVnKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ2ZvbycsICdERUJVRycsICcyJyksCisgICAgICAgICAgICAoJ2ZvbycsICdERUJVRycsICczJyksCisgICAgICAgIF0pCisKKworY2xhc3MgRW5jb2RpbmdUZXN0KEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19wbGFpbl9maWxlKHNlbGYpOgorICAgICAgICAjIEluIFB5dGhvbiAyLngsIGEgcGxhaW4gZmlsZSBvYmplY3QgaXMgdHJlYXRlZCBhcyBoYXZpbmcgbm8gZW5jb2RpbmcuCisgICAgICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0ZXN0IikKKyAgICAgICAgZm4gPSB0ZW1wZmlsZS5ta3RlbXAoIi5sb2ciKQorICAgICAgICAjIHRoZSBub24tYXNjaWkgZGF0YSB3ZSB3cml0ZSB0byB0aGUgbG9nLgorICAgICAgICBkYXRhID0gImZvb1x4ODAiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGZuKQorICAgICAgICAgICAgbG9nLmFkZEhhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIHdyaXRlIG5vbi1hc2NpaSBkYXRhIHRvIHRoZSBsb2cuCisgICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoZGF0YSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbG9nLnJlbW92ZUhhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgICAgICAgICBoYW5kbGVyLmNsb3NlKCkKKyAgICAgICAgICAgICMgY2hlY2sgd2Ugd3JvdGUgZXhhY3RseSB0aG9zZSBieXRlcywgaWdub3JpbmcgdHJhaWxpbmcgXG4gZXRjCisgICAgICAgICAgICBmID0gb3BlbihmbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLnJzdHJpcCgpLCBkYXRhKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19jeXJpbGxpY191bmljb2RlKHNlbGYpOgorICAgICAgICBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigidGVzdCIpCisgICAgICAgICNHZXQgYSBtZXNzYWdlIGluIFVuaWNvZGU6IERvIHN2aWRhbnlhIGluIEN5cmlsbGljIChtZWFuaW5nIGdvb2RieWUpCisgICAgICAgIG1lc3NhZ2UgPSB1J1x1MDQzNFx1MDQzZSBcdTA0NDFcdTA0MzJcdTA0MzhcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzhcdTA0NGYnCisgICAgICAgICNFbnN1cmUgaXQncyB3cml0dGVuIGluIGEgQ3lyaWxsaWMgZW5jb2RpbmcKKyAgICAgICAgd3JpdGVyX2NsYXNzID0gY29kZWNzLmdldHdyaXRlcignY3AxMjUxJykKKyAgICAgICAgd3JpdGVyX2NsYXNzLmVuY29kaW5nID0gJ2NwMTI1MScKKyAgICAgICAgc3RyZWFtID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgd3JpdGVyID0gd3JpdGVyX2NsYXNzKHN0cmVhbSwgJ3N0cmljdCcpCisgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIod3JpdGVyKQorICAgICAgICBsb2cuYWRkSGFuZGxlcihoYW5kbGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2cud2FybmluZyhtZXNzYWdlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nLnJlbW92ZUhhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgICAgIGhhbmRsZXIuY2xvc2UoKQorICAgICAgICAjIGNoZWNrIHdlIHdyb3RlIGV4YWN0bHkgdGhvc2UgYnl0ZXMsIGlnbm9yaW5nIHRyYWlsaW5nIFxuIGV0YworICAgICAgICBzID0gc3RyZWFtLmdldHZhbHVlKCkKKyAgICAgICAgI0NvbXBhcmUgYWdhaW5zdCB3aGF0IHRoZSBkYXRhIHNob3VsZCBiZSB3aGVuIGVuY29kZWQgaW4gQ1AtMTI1MQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICdceGU0XHhlZSBceGYxXHhlMlx4ZThceGU0XHhlMFx4ZWRceGU4XHhmZlxuJykKKworCitjbGFzcyBXYXJuaW5nc1Rlc3QoQmFzZVRlc3QpOgorCisgICAgZGVmIHRlc3Rfd2FybmluZ3Moc2VsZik6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIGxvZ2dpbmcuY2FwdHVyZVdhcm5pbmdzKFRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgICAgIGZpbGUgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgICAgIGggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoZmlsZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigicHkud2FybmluZ3MiKQorICAgICAgICAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGgpCisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiSSdtIHdhcm5pbmcgeW91Li4uIikKKyAgICAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQorICAgICAgICAgICAgICAgIHMgPSBmaWxlLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5maW5kKCJVc2VyV2FybmluZzogSSdtIHdhcm5pbmcgeW91Li4uXG4iKSA+IDApCisKKyAgICAgICAgICAgICAgICAjU2VlIGlmIGFuIGV4cGxpY2l0IGZpbGUgdXNlcyB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAgICBmaWxlID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaG93d2FybmluZygiRXhwbGljaXQiLCBVc2VyV2FybmluZywgImR1bW15LnB5IiwgNDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSwgIkR1bW15IGxpbmUiKQorICAgICAgICAgICAgICAgIHMgPSBmaWxlLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsCisgICAgICAgICAgICAgICAgICAgICAgICAiZHVtbXkucHk6NDI6IFVzZXJXYXJuaW5nOiBFeHBsaWNpdFxuICBEdW1teSBsaW5lXG4iKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmNhcHR1cmVXYXJuaW5ncyhGYWxzZSkKKworCitkZWYgZm9ybWF0RnVuYyhmb3JtYXQsIGRhdGVmbXQ9Tm9uZSk6CisgICAgcmV0dXJuIGxvZ2dpbmcuRm9ybWF0dGVyKGZvcm1hdCwgZGF0ZWZtdCkKKworZGVmIGhhbmRsZXJGdW5jKCk6CisgICAgcmV0dXJuIGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisKK2NsYXNzIEN1c3RvbUhhbmRsZXIobG9nZ2luZy5TdHJlYW1IYW5kbGVyKToKKyAgICBwYXNzCisKK2NsYXNzIENvbmZpZ0RpY3RUZXN0KEJhc2VUZXN0KToKKworICAgICIiIlJlYWRpbmcgbG9nZ2luZyBjb25maWcgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCisKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcd10rKSBcK1wrIChbXHddKykkIgorCisgICAgIyBjb25maWcwIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KKyAgICBjb25maWcwID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnMSBhZGRzIGEgbGl0dGxlIHRvIHRoZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLgorICAgIGNvbmZpZzEgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWcyIGhhcyBhIHN1YnRsZSBjb25maWd1cmF0aW9uIGVycm9yIHRoYXQgc2hvdWxkIGJlIHJlcG9ydGVkCisgICAgY29uZmlnMiA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZGJvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgI0FzIGNvbmZpZzEgYnV0IHdpdGggYSBtaXNzcGVsdCBsZXZlbCBvbiBhIGhhbmRsZXIKKyAgICBjb25maWcyYSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTlRPU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKworICAgICNBcyBjb25maWcxIGJ1dCB3aXRoIGEgbWlzc3BlbHQgbGV2ZWwgb24gYSBsb2dnZXIKKyAgICBjb25maWcyYiA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXUkFOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzMgaGFzIGEgbGVzcyBzdWJ0bGUgY29uZmlndXJhdGlvbiBlcnJvcgorICAgIGNvbmZpZzMgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ21pc3NwZWxsZWRfbmFtZScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnNCBzcGVjaWZpZXMgYSBjdXN0b20gZm9ybWF0dGVyIGNsYXNzIHRvIGJlIGxvYWRlZAorICAgIGNvbmZpZzQgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICcoKScgOiBfX25hbWVfXyArICcuRXhjZXB0aW9uRm9ybWF0dGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzOiUobmFtZSlzOiUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgQXMgY29uZmlnNCBidXQgdXNpbmcgYW4gYWN0dWFsIGNhbGxhYmxlIHJhdGhlciB0aGFuIGEgc3RyaW5nCisgICAgY29uZmlnNGEgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICcoKScgOiBFeGNlcHRpb25Gb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpczolKG5hbWUpczolKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2Zvcm0yJyA6IHsKKyAgICAgICAgICAgICAgICAnKCknIDogX19uYW1lX18gKyAnLmZvcm1hdEZ1bmMnLAorICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdmb3JtMycgOiB7CisgICAgICAgICAgICAgICAgJygpJyA6IGZvcm1hdEZ1bmMsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpczolKG5hbWUpczolKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2hhbmQyJyA6IHsKKyAgICAgICAgICAgICAgICAnKCknIDogaGFuZGxlckZ1bmMsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzUgc3BlY2lmaWVzIGEgY3VzdG9tIGhhbmRsZXIgY2xhc3MgdG8gYmUgbG9hZGVkCisgICAgY29uZmlnNSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogX19uYW1lX18gKyAnLkN1c3RvbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWc2IHNwZWNpZmllcyBhIGN1c3RvbSBoYW5kbGVyIGNsYXNzIHRvIGJlIGxvYWRlZAorICAgICMgYnV0IGhhcyBiYWQgYXJndW1lbnRzCisgICAgY29uZmlnNiA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogX19uYW1lX18gKyAnLkN1c3RvbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgICAgICc5JyA6ICdpbnZhbGlkIHBhcmFtZXRlciBuYW1lJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICNjb25maWcgNyBkb2VzIG5vdCBkZWZpbmUgY29tcGlsZXIucGFyc2VyIGJ1dCBkZWZpbmVzIGNvbXBpbGVyLmxleGVyCisgICAgI3NvIGNvbXBpbGVyLnBhcnNlciBzaG91bGQgYmUgZGlzYWJsZWQgYWZ0ZXIgYXBwbHlpbmcgaXQKKyAgICBjb25maWc3ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5sZXhlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgY29uZmlnOCA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzJyA6IEZhbHNlLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2NvbXBpbGVyLmxleGVyJyA6IHsKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgY29uZmlnOSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICB9LAorICAgIH0KKworICAgIGNvbmZpZzlhID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdpbmNyZW1lbnRhbCcgOiBUcnVlLAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdJTkZPJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgfQorCisgICAgY29uZmlnOWIgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2luY3JlbWVudGFsJyA6IFRydWUsCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnSU5GTycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0lORk8nLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjQXMgY29uZmlnMSBidXQgd2l0aCBhIGZpbHRlciBhZGRlZAorICAgIGNvbmZpZzEwID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdmaWx0ZXJzJyA6IHsKKyAgICAgICAgICAgICdmaWx0MScgOiB7CisgICAgICAgICAgICAgICAgJ25hbWUnIDogJ2NvbXBpbGVyLnBhcnNlcicsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICAgICAgJ2ZpbHRlcnMnIDogWydmaWx0MSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2ZpbHRlcnMnIDogWydmaWx0MSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgIH0sCisgICAgfQorCisgICAgI0FzIGNvbmZpZzEgYnV0IHVzaW5nIGNmZzovLyByZWZlcmVuY2VzCisgICAgY29uZmlnMTEgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ3RydWVfZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcl9jb25maWdzJzogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnZm9ybWF0dGVycycgOiAnY2ZnOi8vdHJ1ZV9mb3JtYXR0ZXJzJywKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiAnY2ZnOi8vaGFuZGxlcl9jb25maWdzW2hhbmQxXScsCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICNBcyBjb25maWcxMSBidXQgbWlzc2luZyB0aGUgdmVyc2lvbiBrZXkKKyAgICBjb25maWcxMiA9IHsKKyAgICAgICAgJ3RydWVfZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcl9jb25maWdzJzogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnZm9ybWF0dGVycycgOiAnY2ZnOi8vdHJ1ZV9mb3JtYXR0ZXJzJywKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiAnY2ZnOi8vaGFuZGxlcl9jb25maWdzW2hhbmQxXScsCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICNBcyBjb25maWcxMSBidXQgdXNpbmcgYW4gdW5zdXBwb3J0ZWQgdmVyc2lvbgorICAgIGNvbmZpZzEzID0geworICAgICAgICAndmVyc2lvbic6IDIsCisgICAgICAgICd0cnVlX2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJfY29uZmlncyc6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnIDogJ2NmZzovL3RydWVfZm9ybWF0dGVycycsCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogJ2NmZzovL2hhbmRsZXJfY29uZmlnc1toYW5kMV0nLAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICBvdXRfb2Zfb3JkZXIgPSB7CisgICAgICAgICJ2ZXJzaW9uIjogMSwKKyAgICAgICAgImZvcm1hdHRlcnMiOiB7CisgICAgICAgICAgICAibXlTaW1wbGVGb3JtYXR0ZXIiOiB7CisgICAgICAgICAgICAgICAgImZvcm1hdCI6ICIlKGFzY3RpbWUpcyAoJShuYW1lKXMpICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIgorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiaGFuZGxlcnMiOiB7CisgICAgICAgICAgICAiZmlsZUdsb2JhbCI6IHsKKyAgICAgICAgICAgICAgICAiY2xhc3MiOiAibG9nZ2luZy5TdHJlYW1IYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAibGV2ZWwiOiAiREVCVUciLAorICAgICAgICAgICAgICAgICJmb3JtYXR0ZXIiOiAibXlTaW1wbGVGb3JtYXR0ZXIiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgImJ1ZmZlckdsb2JhbCI6IHsKKyAgICAgICAgICAgICAgICAiY2xhc3MiOiAibG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAiY2FwYWNpdHkiOiA1LAorICAgICAgICAgICAgICAgICJmb3JtYXR0ZXIiOiAibXlTaW1wbGVGb3JtYXR0ZXIiLAorICAgICAgICAgICAgICAgICJ0YXJnZXQiOiAiZmlsZUdsb2JhbCIsCisgICAgICAgICAgICAgICAgImxldmVsIjogIkRFQlVHIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgImxvZ2dlcnMiOiB7CisgICAgICAgICAgICAibXltb2R1bGUiOiB7CisgICAgICAgICAgICAgICAgImxldmVsIjogIkRFQlVHIiwKKyAgICAgICAgICAgICAgICAiaGFuZGxlcnMiOiBbImJ1ZmZlckdsb2JhbCJdLAorICAgICAgICAgICAgICAgICJwcm9wYWdhdGUiOiAidHJ1ZSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGRlZiBhcHBseV9jb25maWcoc2VsZiwgY29uZik6CisgICAgICAgIGxvZ2dpbmcuY29uZmlnLmRpY3RDb25maWcoY29uZikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzBfb2soc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICAjIFdvbid0IG91dHB1dCBhbnl0aGluZworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgICMgT3V0cHV0cyBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWcxX29rKHNlbGYsIGNvbmZpZz1jb25maWcxKToKKyAgICAgICAgIyBBIGNvbmZpZyBkZWZpbmluZyBhIHN1Yi1wYXJzZXIgYXMgd2VsbC4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhjb25maWcpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWcyX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzJhX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMmEpCisKKyAgICBkZWYgdGVzdF9jb25maWcyYl9mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzJiKQorCisgICAgZGVmIHRlc3RfY29uZmlnM19mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzMpCisKKyAgICBkZWYgdGVzdF9jb25maWc0X29rKHNlbGYpOgorICAgICAgICAjIEEgY29uZmlnIHNwZWNpZnlpbmcgYSBjdXN0b20gZm9ybWF0dGVyIGNsYXNzLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnNCkKKyAgICAgICAgICAgICNsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oImp1c3QgdGVzdGluZyIpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgIkVSUk9SOnJvb3Q6anVzdCB0ZXN0aW5nXG5Hb3QgYSBbUnVudGltZUVycm9yXVxuIikKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnNGFfb2soc2VsZik6CisgICAgICAgICMgQSBjb25maWcgc3BlY2lmeWluZyBhIGN1c3RvbSBmb3JtYXR0ZXIgY2xhc3MuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc0YSkKKyAgICAgICAgICAgICNsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oImp1c3QgdGVzdGluZyIpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgIkVSUk9SOnJvb3Q6anVzdCB0ZXN0aW5nXG5Hb3QgYSBbUnVudGltZUVycm9yXVxuIikKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnNV9vayhzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZzFfb2soY29uZmlnPXNlbGYuY29uZmlnNSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzZfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnNikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzdfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnNykKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ2dlci5kaXNhYmxlZCkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5sZXhlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICczJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgI1NhbWUgYXMgdGVzdF9jb25maWdfN19vayBidXQgZG9uJ3QgZGlzYWJsZSBvbGQgbG9nZ2Vycy4KKyAgICBkZWYgdGVzdF9jb25maWdfOF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzEpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc4KQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5sZXhlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICczJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzUnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzYnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWdfOV9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICNOb3RoaW5nIHdpbGwgYmUgb3V0cHV0IHNpbmNlIGJvdGggaGFuZGxlciBhbmQgbG9nZ2VyIGFyZSBzZXQgdG8gV0FSTklORworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnOWEpCisgICAgICAgICAgICAjTm90aGluZyB3aWxsIGJlIG91dHB1dCBzaW5jZSBib3RoIGhhbmRsZXIgaXMgc3RpbGwgc2V0IHRvIFdBUk5JTkcKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzliKQorICAgICAgICAgICAgI01lc3NhZ2Ugc2hvdWxkIG5vdyBiZSBvdXRwdXQKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICczJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorCisgICAgZGVmIHRlc3RfY29uZmlnXzEwX29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMTApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignY29tcGlsZXInKQorICAgICAgICAgICAgI05vdCBvdXRwdXQsIGJlY2F1c2UgZmlsdGVyZWQKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignY29tcGlsZXIubGV4ZXInKQorICAgICAgICAgICAgI05vdCBvdXRwdXQsIGJlY2F1c2UgZmlsdGVyZWQKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyLmNvZGVnZW4iKQorICAgICAgICAgICAgI091dHB1dCwgYXMgbm90IGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdXQVJOSU5HJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzQnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jb25maWcxMV9vayhzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZzFfb2soc2VsZi5jb25maWcxMSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzEyX2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzEyKQorCisgICAgZGVmIHRlc3RfY29uZmlnMTNfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMTMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdsaXN0ZW4oKSBuZWVkcyB0aHJlYWRpbmcgdG8gd29yaycpCisgICAgZGVmIHNldHVwX3ZpYV9saXN0ZW5lcihzZWxmLCB0ZXh0KToKKyAgICAgICAgIyBBc2sgZm9yIGEgcmFuZG9tbHkgYXNzaWduZWQgcG9ydCAoYnkgdXNpbmcgcG9ydCAwKQorICAgICAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDApCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LnJlYWR5LndhaXQoKQorICAgICAgICAjIE5vdyBnZXQgdGhlIHBvcnQgYWxsb2NhdGVkCisgICAgICAgIHBvcnQgPSB0LnBvcnQKKyAgICAgICAgdC5yZWFkeS5jbGVhcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMi4wKQorICAgICAgICAgICAgc29jay5jb25uZWN0KCgnbG9jYWxob3N0JywgcG9ydCkpCisKKyAgICAgICAgICAgIHNsZW4gPSBzdHJ1Y3QucGFjaygnPkwnLCBsZW4odGV4dCkpCisgICAgICAgICAgICBzID0gc2xlbiArIHRleHQKKyAgICAgICAgICAgIHNlbnRzb2ZhciA9IDAKKyAgICAgICAgICAgIGxlZnQgPSBsZW4ocykKKyAgICAgICAgICAgIHdoaWxlIGxlZnQgPiAwOgorICAgICAgICAgICAgICAgIHNlbnQgPSBzb2NrLnNlbmQoc1tzZW50c29mYXI6XSkKKyAgICAgICAgICAgICAgICBzZW50c29mYXIgKz0gc2VudAorICAgICAgICAgICAgICAgIGxlZnQgLT0gc2VudAorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0LnJlYWR5LndhaXQoMi4wKQorICAgICAgICAgICAgbG9nZ2luZy5jb25maWcuc3RvcExpc3RlbmluZygpCisgICAgICAgICAgICB0LmpvaW4oMi4wKQorCisgICAgZGVmIHRlc3RfbGlzdGVuX2NvbmZpZ18xMF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcihqc29uLmR1bXBzKHNlbGYuY29uZmlnMTApKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyLmxleGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlci5jb2RlZ2VuIikKKyAgICAgICAgICAgICNPdXRwdXQsIGFzIG5vdCBmaWx0ZXJlZAorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnV0FSTklORycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorCisgICAgZGVmIHRlc3RfbGlzdGVuX2NvbmZpZ18xX29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRleHR3cmFwLmRlZGVudChDb25maWdGaWxlVGVzdC5jb25maWcxKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworICAgIGRlZiB0ZXN0X291dF9vZl9vcmRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5vdXRfb2Zfb3JkZXIpCisgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLmdldExvZ2dlcignbXltb2R1bGUnKS5oYW5kbGVyc1swXQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaGFuZGxlci50YXJnZXQsIGxvZ2dpbmcuSGFuZGxlcikKKworY2xhc3MgTWFuYWdlclRlc3QoQmFzZVRlc3QpOgorICAgIGRlZiB0ZXN0X21hbmFnZXJfbG9nZ2VyY2xhc3Moc2VsZik6CisgICAgICAgIGxvZ2dlZCA9IFtdCisKKyAgICAgICAgY2xhc3MgTXlMb2dnZXIobG9nZ2luZy5Mb2dnZXIpOgorICAgICAgICAgICAgZGVmIF9sb2coc2VsZiwgbGV2ZWwsIG1zZywgYXJncywgZXhjX2luZm89Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VkLmFwcGVuZChtc2cpCisKKyAgICAgICAgbWFuID0gbG9nZ2luZy5NYW5hZ2VyKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWFuLnNldExvZ2dlckNsYXNzLCBpbnQpCisgICAgICAgIG1hbi5zZXRMb2dnZXJDbGFzcyhNeUxvZ2dlcikKKyAgICAgICAgbG9nZ2VyID0gbWFuLmdldExvZ2dlcigndGVzdCcpCisgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzaG91bGQgYXBwZWFyIGluIGxvZ2dlZCcpCisgICAgICAgIGxvZ2dpbmcud2FybmluZygnc2hvdWxkIG5vdCBhcHBlYXIgaW4gbG9nZ2VkJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dlZCwgWydzaG91bGQgYXBwZWFyIGluIGxvZ2dlZCddKQorCisKK2NsYXNzIENoaWxkTG9nZ2VyVGVzdChCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfY2hpbGRfbG9nZ2VycyhzZWxmKToKKyAgICAgICAgciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgbDEgPSBsb2dnaW5nLmdldExvZ2dlcignYWJjJykKKyAgICAgICAgbDIgPSBsb2dnaW5nLmdldExvZ2dlcignZGVmLmdoaScpCisgICAgICAgIGMxID0gci5nZXRDaGlsZCgneHl6JykKKyAgICAgICAgYzIgPSByLmdldENoaWxkKCd1dncueHl6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd4eXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd1dncueHl6JykpCisgICAgICAgIGMxID0gbDEuZ2V0Q2hpbGQoJ2RlZicpCisgICAgICAgIGMyID0gYzEuZ2V0Q2hpbGQoJ2doaScpCisgICAgICAgIGMzID0gbDEuZ2V0Q2hpbGQoJ2RlZi5naGknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmLmdoaScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgYzMpCisKKworY2xhc3MgSGFuZGxlclRlc3QoQmFzZVRlc3QpOgorCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICdXYXRjaGVkRmlsZUhhbmRsZXIgbm90IGFwcHJvcHJpYXRlIGZvciBXaW5kb3dzLicpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdF9yYWNlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNDYzMiByZWZlcnMuCisgICAgICAgIGRlZiByZW1vdmVfbG9vcChmbmFtZSwgdHJpZXMpOgorICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UodHJpZXMpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAwNCAqIHJhbmRvbS5yYW5kaW50KDAsIDQpKQorCisgICAgICAgIGRlbF9jb3VudCA9IDUwMAorICAgICAgICBsb2dfY291bnQgPSA1MDAKKworICAgICAgICBmb3IgZGVsYXkgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgIGZkLCBmbiA9IHRlbXBmaWxlLm1rc3RlbXAoJy5sb2cnLCAndGVzdF9sb2dnaW5nLTMtJykKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgcmVtb3ZlciA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJlbW92ZV9sb29wLCBhcmdzPShmbiwgZGVsX2NvdW50KSkKKyAgICAgICAgICAgIHJlbW92ZXIuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgcmVtb3Zlci5zdGFydCgpCisgICAgICAgICAgICBoID0gbG9nZ2luZy5oYW5kbGVycy5XYXRjaGVkRmlsZUhhbmRsZXIoZm4sIGRlbGF5PWRlbGF5KQorICAgICAgICAgICAgZiA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKGFzY3RpbWUpczogJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnKQorICAgICAgICAgICAgaC5zZXRGb3JtYXR0ZXIoZikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShsb2dfY291bnQpOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDA1KQorICAgICAgICAgICAgICAgICAgICByID0gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKHsnbXNnJzogJ3Rlc3RpbmcnIH0pCisgICAgICAgICAgICAgICAgICAgIGguaGFuZGxlKHIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlbW92ZXIuam9pbigpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuKQorCisKKyMgU2V0IHRoZSBsb2NhbGUgdG8gdGhlIHBsYXRmb3JtLWRlcGVuZGVudCBkZWZhdWx0LiAgSSBoYXZlIG5vIGlkZWEKKyMgd2h5IHRoZSB0ZXN0IGRvZXMgdGhpcywgYnV0IGluIGFueSBjYXNlIHdlIHNhdmUgdGhlIGN1cnJlbnQgbG9jYWxlCisjIGZpcnN0IGFuZCByZXN0b3JlIGl0IGF0IHRoZSBlbmQuCitAcnVuX3dpdGhfbG9jYWxlKCdMQ19BTEwnLCAnJykKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoQnVpbHRpbkxldmVsc1Rlc3QsIEJhc2ljRmlsdGVyVGVzdCwKKyAgICAgICAgICAgICAgICAgQ3VzdG9tTGV2ZWxzQW5kRmlsdGVyc1Rlc3QsIE1lbW9yeUhhbmRsZXJUZXN0LAorICAgICAgICAgICAgICAgICBDb25maWdGaWxlVGVzdCwgU29ja2V0SGFuZGxlclRlc3QsIE1lbW9yeVRlc3QsCisgICAgICAgICAgICAgICAgIEVuY29kaW5nVGVzdCwgV2FybmluZ3NUZXN0LCBDb25maWdEaWN0VGVzdCwgTWFuYWdlclRlc3QsCisgICAgICAgICAgICAgICAgIENoaWxkTG9nZ2VyVGVzdCwgSGFuZGxlclRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X2xvbmcucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9sb25nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwODQ3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9sb25nLnB5CkBAIC0wLDAgKzEsOTE2IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKKworaW1wb3J0IHJhbmRvbQoraW1wb3J0IG1hdGgKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2ludCwgdGVzdF9zdXBwb3J0CisKKyMgVXNlZCBmb3IgbGF6eSBmb3JtYXR0aW5nIG9mIGZhaWx1cmUgbWVzc2FnZXMKK2NsYXNzIEZybShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb3JtYXQsICphcmdzKToKKyAgICAgICAgc2VsZi5mb3JtYXQgPSBmb3JtYXQKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZvcm1hdCAlIHNlbGYuYXJncworCisjIFNISUZUIHNob3VsZCBtYXRjaCB0aGUgdmFsdWUgaW4gbG9uZ2ludHJlcHIuaCBmb3IgYmVzdCB0ZXN0aW5nLgorU0hJRlQgPSBzeXMubG9uZ19pbmZvLmJpdHNfcGVyX2RpZ2l0CitCQVNFID0gMiAqKiBTSElGVAorTUFTSyA9IEJBU0UgLSAxCitLQVJBVFNVQkFfQ1VUT0ZGID0gNzAgICAjIGZyb20gbG9uZ29iamVjdC5jCisKKyMgTWF4IG51bWJlciBvZiBiYXNlIEJBU0UgZGlnaXRzIHRvIHVzZSBpbiB0ZXN0IGNhc2VzLiAgRG91YmxpbmcKKyMgdGhpcyB3aWxsIG1vcmUgdGhhbiBkb3VibGUgdGhlIHJ1bnRpbWUuCitNQVhESUdJVFMgPSAxNQorCisjIGJ1aWxkIHNvbWUgc3BlY2lhbCB2YWx1ZXMKK3NwZWNpYWwgPSBtYXAobG9uZywgWzAsIDEsIDIsIEJBU0UsIEJBU0UgPj4gMV0pCitzcGVjaWFsLmFwcGVuZCgweDU1NTU1NTU1NTU1NTU1NTVMKQorc3BlY2lhbC5hcHBlbmQoMHhhYWFhYWFhYWFhYWFhYWFhTCkKKyMgIHNvbWUgc29saWQgc3RyaW5ncyBvZiBvbmUgYml0cworcDIgPSA0TCAgIyAwIGFuZCAxIGFscmVhZHkgYWRkZWQKK2ZvciBpIGluIHJhbmdlKDIqU0hJRlQpOgorICAgIHNwZWNpYWwuYXBwZW5kKHAyIC0gMSkKKyAgICBwMiA9IHAyIDw8IDEKK2RlbCBwMgorIyBhZGQgY29tcGxlbWVudHMgJiBuZWdhdGlvbnMKK3NwZWNpYWwgPSBzcGVjaWFsICsgbWFwKGxhbWJkYSB4OiB+eCwgc3BlY2lhbCkgKyBcCisgICAgICAgICAgICAgICAgICAgIG1hcChsYW1iZGEgeDogLXgsIHNwZWNpYWwpCisKK0wgPSBbCisgICAgICAgICgnMCcsIDApLAorICAgICAgICAoJzEnLCAxKSwKKyAgICAgICAgKCc5JywgOSksCisgICAgICAgICgnMTAnLCAxMCksCisgICAgICAgICgnOTknLCA5OSksCisgICAgICAgICgnMTAwJywgMTAwKSwKKyAgICAgICAgKCczMTQnLCAzMTQpLAorICAgICAgICAoJyAzMTQnLCAzMTQpLAorICAgICAgICAoJzMxNCAnLCAzMTQpLAorICAgICAgICAoJyAgXHRcdCAgMzE0ICBcdFx0ICAnLCAzMTQpLAorICAgICAgICAocmVwcihzeXMubWF4aW50KSwgc3lzLm1heGludCksCisgICAgICAgICgnICAxeCcsIFZhbHVlRXJyb3IpLAorICAgICAgICAoJyAgMSAgJywgMSksCisgICAgICAgICgnICAxXDAyICAnLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKCcnLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKCcgJywgVmFsdWVFcnJvciksCisgICAgICAgICgnICBcdFx0ICAnLCBWYWx1ZUVycm9yKQorXQoraWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICBMICs9IFsKKyAgICAgICAgKHVuaWNvZGUoJzAnKSwgMCksCisgICAgICAgICh1bmljb2RlKCcxJyksIDEpLAorICAgICAgICAodW5pY29kZSgnOScpLCA5KSwKKyAgICAgICAgKHVuaWNvZGUoJzEwJyksIDEwKSwKKyAgICAgICAgKHVuaWNvZGUoJzk5JyksIDk5KSwKKyAgICAgICAgKHVuaWNvZGUoJzEwMCcpLCAxMDApLAorICAgICAgICAodW5pY29kZSgnMzE0JyksIDMxNCksCisgICAgICAgICh1bmljb2RlKCcgMzE0JyksIDMxNCksCisgICAgICAgICh1bmljb2RlKCdcdTA2NjNcdTA2NjFcdTA2NjQgJywncmF3LXVuaWNvZGUtZXNjYXBlJyksIDMxNCksCisgICAgICAgICh1bmljb2RlKCcgIFx0XHQgIDMxNCAgXHRcdCAgJyksIDMxNCksCisgICAgICAgICh1bmljb2RlKCcgIDF4JyksIFZhbHVlRXJyb3IpLAorICAgICAgICAodW5pY29kZSgnICAxICAnKSwgMSksCisgICAgICAgICh1bmljb2RlKCcgIDFcMDIgICcpLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKHVuaWNvZGUoJycpLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKHVuaWNvZGUoJyAnKSwgVmFsdWVFcnJvciksCisgICAgICAgICh1bmljb2RlKCcgIFx0XHQgICcpLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKHVuaWNocigweDIwMCksIFZhbHVlRXJyb3IpLAorXQorCitjbGFzcyBMb25nVGVzdCh0ZXN0X2ludC5JbnRMb25nQ29tbW9uVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIG50eXBlID0gbG9uZworCisgICAgIyBHZXQgcXVhc2ktcmFuZG9tIGxvbmcgY29uc2lzdGluZyBvZiBuZGlnaXRzIGRpZ2l0cyAoaW4gYmFzZSBCQVNFKS4KKyAgICAjIHF1YXNpID09IHRoZSBtb3N0LXNpZ25pZmljYW50IGRpZ2l0IHdpbGwgbm90IGJlIDAsIGFuZCB0aGUgbnVtYmVyCisgICAgIyBpcyBjb25zdHJ1Y3RlZCB0byBjb250YWluIGxvbmcgc3RyaW5ncyBvZiAwIGFuZCAxIGJpdHMuICBUaGVzZSBhcmUKKyAgICAjIG1vcmUgbGlrZWx5IHRoYW4gcmFuZG9tIGJpdHMgdG8gcHJvdm9rZSBkaWdpdC1ib3VuZGFyeSBlcnJvcnMuCisgICAgIyBUaGUgc2lnbiBvZiB0aGUgbnVtYmVyIGlzIGFsc28gcmFuZG9tLgorCisgICAgZGVmIGdldHJhbihzZWxmLCBuZGlnaXRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5kaWdpdHMgPiAwKQorICAgICAgICBuYml0c19oaSA9IG5kaWdpdHMgKiBTSElGVAorICAgICAgICBuYml0c19sbyA9IG5iaXRzX2hpIC0gU0hJRlQgKyAxCisgICAgICAgIGFuc3dlciA9IDBMCisgICAgICAgIG5iaXRzID0gMAorICAgICAgICByID0gaW50KHJhbmRvbS5yYW5kb20oKSAqIChTSElGVCAqIDIpKSB8IDEgICMgZm9yY2UgMSBiaXRzIHRvIHN0YXJ0CisgICAgICAgIHdoaWxlIG5iaXRzIDwgbmJpdHNfbG86CisgICAgICAgICAgICBiaXRzID0gKHIgPj4gMSkgKyAxCisgICAgICAgICAgICBiaXRzID0gbWluKGJpdHMsIG5iaXRzX2hpIC0gbmJpdHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMSA8PSBiaXRzIDw9IFNISUZUKQorICAgICAgICAgICAgbmJpdHMgPSBuYml0cyArIGJpdHMKKyAgICAgICAgICAgIGFuc3dlciA9IGFuc3dlciA8PCBiaXRzCisgICAgICAgICAgICBpZiByICYgMToKKyAgICAgICAgICAgICAgICBhbnN3ZXIgPSBhbnN3ZXIgfCAoKDEgPDwgYml0cykgLSAxKQorICAgICAgICAgICAgciA9IGludChyYW5kb20ucmFuZG9tKCkgKiAoU0hJRlQgKiAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5iaXRzX2xvIDw9IG5iaXRzIDw9IG5iaXRzX2hpKQorICAgICAgICBpZiByYW5kb20ucmFuZG9tKCkgPCAwLjU6CisgICAgICAgICAgICBhbnN3ZXIgPSAtYW5zd2VyCisgICAgICAgIHJldHVybiBhbnN3ZXIKKworICAgICMgR2V0IHJhbmRvbSBsb25nIGNvbnNpc3Rpbmcgb2YgbmRpZ2l0cyByYW5kb20gZGlnaXRzIChyZWxhdGl2ZSB0byBiYXNlCisgICAgIyBCQVNFKS4gIFRoZSBzaWduIGJpdCBpcyBhbHNvIHJhbmRvbS4KKworICAgIGRlZiBnZXRyYW4yKG5kaWdpdHMpOgorICAgICAgICBhbnN3ZXIgPSAwTAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobmRpZ2l0cyk6CisgICAgICAgICAgICBhbnN3ZXIgPSAoYW5zd2VyIDw8IFNISUZUKSB8IHJhbmRvbS5yYW5kaW50KDAsIE1BU0spCisgICAgICAgIGlmIHJhbmRvbS5yYW5kb20oKSA8IDAuNToKKyAgICAgICAgICAgIGFuc3dlciA9IC1hbnN3ZXIKKyAgICAgICAgcmV0dXJuIGFuc3dlcgorCisgICAgZGVmIGNoZWNrX2RpdmlzaW9uKHNlbGYsIHgsIHkpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcSwgciA9IGRpdm1vZCh4LCB5KQorICAgICAgICBxMiwgcjIgPSB4Ly95LCB4JXkKKyAgICAgICAgcGFiLCBwYmEgPSB4KnksIHkqeAorICAgICAgICBlcShwYWIsIHBiYSwgRnJtKCJtdWx0aXBsaWNhdGlvbiBkb2VzIG5vdCBjb21tdXRlIGZvciAlciBhbmQgJXIiLCB4LCB5KSkKKyAgICAgICAgZXEocSwgcTIsIEZybSgiZGl2bW9kIHJldHVybnMgZGlmZmVyZW50IHF1b3RpZW50IHRoYW4gLyBmb3IgJXIgYW5kICVyIiwgeCwgeSkpCisgICAgICAgIGVxKHIsIHIyLCBGcm0oImRpdm1vZCByZXR1cm5zIGRpZmZlcmVudCBtb2QgdGhhbiAlJSBmb3IgJXIgYW5kICVyIiwgeCwgeSkpCisgICAgICAgIGVxKHgsIHEqeSArIHIsIEZybSgieCAhPSBxKnkgKyByIGFmdGVyIGRpdm1vZCBvbiB4PSVyLCB5PSVyIiwgeCwgeSkpCisgICAgICAgIGlmIHkgPiAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gciA8IHksIEZybSgiYmFkIG1vZCBmcm9tIGRpdm1vZCBvbiAlciBhbmQgJXIiLCB4LCB5KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IDwgciA8PSAwLCBGcm0oImJhZCBtb2QgZnJvbSBkaXZtb2Qgb24gJXIgYW5kICVyIiwgeCwgeSkpCisKKyAgICBkZWYgdGVzdF9kaXZpc2lvbihzZWxmKToKKyAgICAgICAgZGlnaXRzID0gcmFuZ2UoMSwgTUFYRElHSVRTKzEpICsgcmFuZ2UoS0FSQVRTVUJBX0NVVE9GRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FSQVRTVUJBX0NVVE9GRiArIDE0KQorICAgICAgICBkaWdpdHMuYXBwZW5kKEtBUkFUU1VCQV9DVVRPRkYgKiAzKQorICAgICAgICBmb3IgbGVueCBpbiBkaWdpdHM6CisgICAgICAgICAgICB4ID0gc2VsZi5nZXRyYW4obGVueCkKKyAgICAgICAgICAgIGZvciBsZW55IGluIGRpZ2l0czoKKyAgICAgICAgICAgICAgICB5ID0gc2VsZi5nZXRyYW4obGVueSkgb3IgMUwKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKHgsIHkpCisKKyAgICAgICAgIyBzcGVjaWZpYyBudW1iZXJzIGNob3NlbiB0byBleGVyY2lzZSBjb3JuZXIgY2FzZXMgb2YgdGhlCisgICAgICAgICMgY3VycmVudCBsb25nIGRpdmlzaW9uIGltcGxlbWVudGF0aW9uCisKKyAgICAgICAgIyAzMC1iaXQgY2FzZXMgaW52b2x2aW5nIGEgcXVvdGllbnQgZGlnaXQgZXN0aW1hdGUgb2YgQkFTRSsxCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oMTIzMTk0ODQxMjI5MDg3OTM5NTk2NjcwMjg4MUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE0NzM0MTM2NzEzMTQyODY5OEwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oODE1NDI3NzU2NDgxMjc1NDMwMzQyMzEyMDIxNTE1NTg3ODgzTCwKKyAgICAgICAgICAgICAgICAgICAgICAgNzA3MjcwODM2MDY5MDI3NzQ1TCkKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbig2Mjc5NzYwNzM2OTcwMTI4MjA4NDk0NDMzNjM1NjM1OTkwNDFMLAorICAgICAgICAgICAgICAgICAgICAgICA2NDM1ODg3OTg0OTYwNTcwMjBMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDExMTUxNDEzNzM2NTM3NTIzMDM3MTA5MzI3NTYzMjU1NzgwNjVMLAorICAgICAgICAgICAgICAgICAgICAgICAxMDM4NTU2MzM1MTcxNDUzOTM3NzI2ODgyNjI3TCkKKyAgICAgICAgIyAzMC1iaXQgY2FzZXMgdGhhdCByZXF1aXJlIHRoZSBwb3N0LXN1YnRyYWN0aW9uIGNvcnJlY3Rpb24gc3RlcAorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDkyMjQ5ODkwNTQwNTQzNjc1MTk0MDk4OTMyMDkzMDM2ODQ5NEwsCisgICAgICAgICAgICAgICAgICAgICAgIDk0OTk4NTg3MDY4Njc4NjEzNTYyNjk0MzM5NkwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oNzY4MjM1ODUzMzI4MDkxMTY3MjA0MDA5NjUyMTc0MDMxODQ0TCwKKyAgICAgICAgICAgICAgICAgICAgICAgMTA5MTU1NTU0MTE4MDM3MTU1NDQyNjU0NTI2NkwpCisKKyAgICAgICAgIyAxNS1iaXQgY2FzZXMgaW52b2x2aW5nIGEgcXVvdGllbnQgZGlnaXQgZXN0aW1hdGUgb2YgQkFTRSsxCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oMjAxNzIxODg5NDc0NDNMLCA2MTU2MTEzOTdMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDEwMjA5MDg1MzAyNzAxNTUwMjVMLCA5NTA3OTU3MTBMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDEyODU4OTU2NTcyMzExMjQwOEwsIDczNjM5MzcxOEwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oNjA5OTE5NzgwMjg1NzYxNTc1TCwgMTg2MTMyNzQ1NDY3ODRMKQorICAgICAgICAjIDE1LWJpdCBjYXNlcyB0aGF0IHJlcXVpcmUgdGhlIHBvc3Qtc3VidHJhY3Rpb24gY29ycmVjdGlvbiBzdGVwCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oNzEwMDMxNjgxNTc2Mzg4MDMyTCwgMjY3Njk0MDQzOTEzMDhMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDE5MzM2MjI2MTQyNjgyMjFMLCAzMDIxMjg1MzM0ODgzNkwpCisKKworCisgICAgZGVmIHRlc3Rfa2FyYXRzdWJhKHNlbGYpOgorICAgICAgICBkaWdpdHMgPSByYW5nZSgxLCA1KSArIHJhbmdlKEtBUkFUU1VCQV9DVVRPRkYsIEtBUkFUU1VCQV9DVVRPRkYgKyAxMCkKKyAgICAgICAgZGlnaXRzLmV4dGVuZChbS0FSQVRTVUJBX0NVVE9GRiAqIDEwLCBLQVJBVFNVQkFfQ1VUT0ZGICogMTAwXSkKKworICAgICAgICBiaXRzID0gW2RpZ2l0ICogU0hJRlQgZm9yIGRpZ2l0IGluIGRpZ2l0c10KKworICAgICAgICAjIFRlc3QgcHJvZHVjdHMgb2YgbG9uZyBzdHJpbmdzIG9mIDEgYml0cyAtLSAoMioqeC0xKSooMioqeS0xKSA9PQorICAgICAgICAjIDIqKih4K3kpIC0gMioqeCAtIDIqKnkgKyAxLCBzbyB0aGUgcHJvcGVyIHJlc3VsdCBpcyBlYXN5IHRvIGNoZWNrLgorICAgICAgICBmb3IgYWJpdHMgaW4gYml0czoKKyAgICAgICAgICAgIGEgPSAoMUwgPDwgYWJpdHMpIC0gMQorICAgICAgICAgICAgZm9yIGJiaXRzIGluIGJpdHM6CisgICAgICAgICAgICAgICAgaWYgYmJpdHMgPCBhYml0czoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBiID0gKDFMIDw8IGJiaXRzKSAtIDEKKyAgICAgICAgICAgICAgICB4ID0gYSAqIGIKKyAgICAgICAgICAgICAgICB5ID0gKCgxTCA8PCAoYWJpdHMgKyBiYml0cykpIC0KKyAgICAgICAgICAgICAgICAgICAgICgxTCA8PCBhYml0cykgLQorICAgICAgICAgICAgICAgICAgICAgKDFMIDw8IGJiaXRzKSArCisgICAgICAgICAgICAgICAgICAgICAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgRnJtKCJiYWQgcmVzdWx0IGZvciBhKmI6IGE9JXIsIGI9JXIsIHg9JXIsIHk9JXIiLCBhLCBiLCB4LCB5KSkKKworICAgIGRlZiBjaGVja19iaXRvcF9pZGVudGl0aWVzXzEoc2VsZiwgeCk6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcSh4ICYgMCwgMCwgRnJtKCJ4ICYgMCAhPSAwIGZvciB4PSVyIiwgeCkpCisgICAgICAgIGVxKHggfCAwLCB4LCBGcm0oInggfCAwICE9IHggZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoeCBeIDAsIHgsIEZybSgieCBeIDAgIT0geCBmb3IgeD0lciIsIHgpKQorICAgICAgICBlcSh4ICYgLTEsIHgsIEZybSgieCAmIC0xICE9IHggZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoeCB8IC0xLCAtMSwgRnJtKCJ4IHwgLTEgIT0gLTEgZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoeCBeIC0xLCB+eCwgRnJtKCJ4IF4gLTEgIT0gfnggZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoeCwgfn54LCBGcm0oInggIT0gfn54IGZvciB4PSVyIiwgeCkpCisgICAgICAgIGVxKHggJiB4LCB4LCBGcm0oInggJiB4ICE9IHggZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoeCB8IHgsIHgsIEZybSgieCB8IHggIT0geCBmb3IgeD0lciIsIHgpKQorICAgICAgICBlcSh4IF4geCwgMCwgRnJtKCJ4IF4geCAhPSAwIGZvciB4PSVyIiwgeCkpCisgICAgICAgIGVxKHggJiB+eCwgMCwgRnJtKCJ4ICYgfnggIT0gMCBmb3IgeD0lciIsIHgpKQorICAgICAgICBlcSh4IHwgfngsIC0xLCBGcm0oInggfCB+eCAhPSAtMSBmb3IgeD0lciIsIHgpKQorICAgICAgICBlcSh4IF4gfngsIC0xLCBGcm0oInggXiB+eCAhPSAtMSBmb3IgeD0lciIsIHgpKQorICAgICAgICBlcSgteCwgMSArIH54LCBGcm0oIm5vdCAteCA9PSAxICsgfnggZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoLXgsIH4oeC0xKSwgRnJtKCJub3QgLXggPT0gfih4LTEpIGZvcnggPSVyIiwgeCkpCisgICAgICAgIGZvciBuIGluIHhyYW5nZSgyKlNISUZUKToKKyAgICAgICAgICAgIHAyID0gMkwgKiogbgorICAgICAgICAgICAgZXEoeCA8PCBuID4+IG4sIHgsCisgICAgICAgICAgICAgICAgRnJtKCJ4IDw8IG4gPj4gbiAhPSB4IGZvciB4PSVyLCBuPSVyIiwgKHgsIG4pKSkKKyAgICAgICAgICAgIGVxKHggLy8gcDIsIHggPj4gbiwKKyAgICAgICAgICAgICAgICBGcm0oInggLy8gcDIgIT0geCA+PiBuIGZvciB4PSVyIG49JXIgcDI9JXIiLCAoeCwgbiwgcDIpKSkKKyAgICAgICAgICAgIGVxKHggKiBwMiwgeCA8PCBuLAorICAgICAgICAgICAgICAgIEZybSgieCAqIHAyICE9IHggPDwgbiBmb3IgeD0lciBuPSVyIHAyPSVyIiwgKHgsIG4sIHAyKSkpCisgICAgICAgICAgICBlcSh4ICYgLXAyLCB4ID4+IG4gPDwgbiwKKyAgICAgICAgICAgICAgICBGcm0oIm5vdCB4ICYgLXAyID09IHggPj4gbiA8PCBuIGZvciB4PSVyIG49JXIgcDI9JXIiLCAoeCwgbiwgcDIpKSkKKyAgICAgICAgICAgIGVxKHggJiAtcDIsIHggJiB+KHAyIC0gMSksCisgICAgICAgICAgICAgICAgRnJtKCJub3QgeCAmIC1wMiA9PSB4ICYgfihwMiAtIDEpIGZvciB4PSVyIG49JXIgcDI9JXIiLCAoeCwgbiwgcDIpKSkKKworICAgIGRlZiBjaGVja19iaXRvcF9pZGVudGl0aWVzXzIoc2VsZiwgeCwgeSk6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcSh4ICYgeSwgeSAmIHgsIEZybSgieCAmIHkgIT0geSAmIHggZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQorICAgICAgICBlcSh4IHwgeSwgeSB8IHgsIEZybSgieCB8IHkgIT0geSB8IHggZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQorICAgICAgICBlcSh4IF4geSwgeSBeIHgsIEZybSgieCBeIHkgIT0geSBeIHggZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQorICAgICAgICBlcSh4IF4geSBeIHgsIHksIEZybSgieCBeIHkgXiB4ICE9IHkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQorICAgICAgICBlcSh4ICYgeSwgfih+eCB8IH55KSwgRnJtKCJ4ICYgeSAhPSB+KH54IHwgfnkpIGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKKyAgICAgICAgZXEoeCB8IHksIH4ofnggJiB+eSksIEZybSgieCB8IHkgIT0gfih+eCAmIH55KSBmb3IgeD0lciwgeT0lciIsICh4LCB5KSkpCisgICAgICAgIGVxKHggXiB5LCAoeCB8IHkpICYgfih4ICYgeSksCisgICAgICAgICAgICAgRnJtKCJ4IF4geSAhPSAoeCB8IHkpICYgfih4ICYgeSkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQorICAgICAgICBlcSh4IF4geSwgKHggJiB+eSkgfCAofnggJiB5KSwKKyAgICAgICAgICAgICBGcm0oInggXiB5ID09ICh4ICYgfnkpIHwgKH54ICYgeSkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQorICAgICAgICBlcSh4IF4geSwgKHggfCB5KSAmICh+eCB8IH55KSwKKyAgICAgICAgICAgICBGcm0oInggXiB5ID09ICh4IHwgeSkgJiAofnggfCB+eSkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQorCisgICAgZGVmIGNoZWNrX2JpdG9wX2lkZW50aXRpZXNfMyhzZWxmLCB4LCB5LCB6KToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKCh4ICYgeSkgJiB6LCB4ICYgKHkgJiB6KSwKKyAgICAgICAgICAgICBGcm0oIih4ICYgeSkgJiB6ICE9IHggJiAoeSAmIHopIGZvciB4PSVyLCB5PSVyLCB6PSVyIiwgKHgsIHksIHopKSkKKyAgICAgICAgZXEoKHggfCB5KSB8IHosIHggfCAoeSB8IHopLAorICAgICAgICAgICAgIEZybSgiKHggfCB5KSB8IHogIT0geCB8ICh5IHwgeikgZm9yIHg9JXIsIHk9JXIsIHo9JXIiLCAoeCwgeSwgeikpKQorICAgICAgICBlcSgoeCBeIHkpIF4geiwgeCBeICh5IF4geiksCisgICAgICAgICAgICAgRnJtKCIoeCBeIHkpIF4geiAhPSB4IF4gKHkgXiB6KSBmb3IgeD0lciwgeT0lciwgej0lciIsICh4LCB5LCB6KSkpCisgICAgICAgIGVxKHggJiAoeSB8IHopLCAoeCAmIHkpIHwgKHggJiB6KSwKKyAgICAgICAgICAgICBGcm0oInggJiAoeSB8IHopICE9ICh4ICYgeSkgfCAoeCAmIHopIGZvciB4PSVyLCB5PSVyLCB6PSVyIiwgKHgsIHksIHopKSkKKyAgICAgICAgZXEoeCB8ICh5ICYgeiksICh4IHwgeSkgJiAoeCB8IHopLAorICAgICAgICAgICAgIEZybSgieCB8ICh5ICYgeikgIT0gKHggfCB5KSAmICh4IHwgeikgZm9yIHg9JXIsIHk9JXIsIHo9JXIiLCAoeCwgeSwgeikpKQorCisgICAgZGVmIHRlc3RfYml0b3BfaWRlbnRpdGllcyhzZWxmKToKKyAgICAgICAgZm9yIHggaW4gc3BlY2lhbDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfYml0b3BfaWRlbnRpdGllc18xKHgpCisgICAgICAgIGRpZ2l0cyA9IHhyYW5nZSgxLCBNQVhESUdJVFMrMSkKKyAgICAgICAgZm9yIGxlbnggaW4gZGlnaXRzOgorICAgICAgICAgICAgeCA9IHNlbGYuZ2V0cmFuKGxlbngpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2JpdG9wX2lkZW50aXRpZXNfMSh4KQorICAgICAgICAgICAgZm9yIGxlbnkgaW4gZGlnaXRzOgorICAgICAgICAgICAgICAgIHkgPSBzZWxmLmdldHJhbihsZW55KQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfYml0b3BfaWRlbnRpdGllc18yKHgsIHkpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19iaXRvcF9pZGVudGl0aWVzXzMoeCwgeSwgc2VsZi5nZXRyYW4oKGxlbnggKyBsZW55KS8vMikpCisKKyAgICBkZWYgc2xvd19mb3JtYXQoc2VsZiwgeCwgYmFzZSk6CisgICAgICAgIGlmICh4LCBiYXNlKSA9PSAoMCwgOCk6CisgICAgICAgICAgICAjIHRoaXMgaXMgYW4gb2RkYmFsbCEKKyAgICAgICAgICAgIHJldHVybiAiMEwiCisgICAgICAgIGRpZ2l0cyA9IFtdCisgICAgICAgIHNpZ24gPSAwCisgICAgICAgIGlmIHggPCAwOgorICAgICAgICAgICAgc2lnbiwgeCA9IDEsIC14CisgICAgICAgIHdoaWxlIHg6CisgICAgICAgICAgICB4LCByID0gZGl2bW9kKHgsIGJhc2UpCisgICAgICAgICAgICBkaWdpdHMuYXBwZW5kKGludChyKSkKKyAgICAgICAgZGlnaXRzLnJldmVyc2UoKQorICAgICAgICBkaWdpdHMgPSBkaWdpdHMgb3IgWzBdCisgICAgICAgIHJldHVybiAnLSdbOnNpZ25dICsgXAorICAgICAgICAgICAgICAgezg6ICcwJywgMTA6ICcnLCAxNjogJzB4J31bYmFzZV0gKyBcCisgICAgICAgICAgICAgICAiIi5qb2luKG1hcChsYW1iZGEgaTogIjAxMjM0NTY3ODlhYmNkZWYiW2ldLCBkaWdpdHMpKSArICJMIgorCisgICAgZGVmIGNoZWNrX2Zvcm1hdF8xKHNlbGYsIHgpOgorICAgICAgICBmb3IgYmFzZSwgbWFwcGVyIGluICg4LCBvY3QpLCAoMTAsIHJlcHIpLCAoMTYsIGhleCk6CisgICAgICAgICAgICBnb3QgPSBtYXBwZXIoeCkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5zbG93X2Zvcm1hdCh4LCBiYXNlKQorICAgICAgICAgICAgbXNnID0gRnJtKCIlcyByZXR1cm5lZCAlciBidXQgZXhwZWN0ZWQgJXIgZm9yICVyIiwKKyAgICAgICAgICAgICAgICBtYXBwZXIuX19uYW1lX18sIGdvdCwgZXhwZWN0ZWQsIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQsIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhnb3QsIDApLCB4LCBGcm0oJ2xvbmcoIiVzIiwgMCkgIT0gJXInLCBnb3QsIHgpKQorICAgICAgICAjIHN0cigpIGhhcyB0byBiZSBjaGVja2VkIGEgbGl0dGxlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXJlJ3Mgbm8KKyAgICAgICAgIyB0cmFpbGluZyAiTCIKKyAgICAgICAgZ290ID0gc3RyKHgpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5zbG93X2Zvcm1hdCh4LCAxMClbOi0xXQorICAgICAgICBtc2cgPSBGcm0oIiVzIHJldHVybmVkICVyIGJ1dCBleHBlY3RlZCAlciBmb3IgJXIiLAorICAgICAgICAgICAgbWFwcGVyLl9fbmFtZV9fLCBnb3QsIGV4cGVjdGVkLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQsIG1zZykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgZm9yIHggaW4gc3BlY2lhbDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZm9ybWF0XzEoeCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwKToKKyAgICAgICAgICAgIGZvciBsZW54IGluIHhyYW5nZSgxLCBNQVhESUdJVFMrMSk6CisgICAgICAgICAgICAgICAgeCA9IHNlbGYuZ2V0cmFuKGxlbngpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19mb3JtYXRfMSh4KQorCisgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKDMxNCksIDMxNEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygzLjE0KSwgM0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygzMTRMKSwgMzE0TCkKKyAgICAgICAgIyBDaGVjayB0aGF0IGxvbmcoKSBvZiBiYXNpYyB0eXBlcyBhY3R1YWxseSByZXR1cm5zIGEgbG9uZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobG9uZygzMTQpKSwgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGxvbmcoMy4xNCkpLCBsb25nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobG9uZygzMTRMKSksIGxvbmcpCisgICAgICAgICMgQ2hlY2sgdGhhdCBjb252ZXJzaW9uIGZyb20gZmxvYXQgdHJ1bmNhdGVzIHRvd2FyZHMgemVybworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoLTMuMTQpLCAtM0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygzLjkpLCAzTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKC0zLjkpLCAtM0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygzLjUpLCAzTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKC0zLjUpLCAtM0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygiLTMiKSwgLTNMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoIjBiMTAiLCAyKSwgMkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygiMG8xMCIsIDgpLCA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCIweDEwIiwgMTYpLCAxNkwpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcodW5pY29kZSgiLTMiKSksIC0zTCkKKyAgICAgICAgIyBEaWZmZXJlbnQgYmFzZToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCIxMCIsMTYpLCAxNkwpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcodW5pY29kZSgiMTAiKSwxNiksIDE2TCkKKyAgICAgICAgIyBDaGVjayBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyAoc2FtZSB0ZXN0IHNldCBhcyBmb3IgaW50KCksIGFuZCB0aGVuIHNvbWUpCisgICAgICAgIExMID0gWworICAgICAgICAgICAgICAgICgnMScgKyAnMCcqMjAsIDEwTCoqMjApLAorICAgICAgICAgICAgICAgICgnMScgKyAnMCcqMTAwLCAxMEwqKjEwMCkKKyAgICAgICAgXQorICAgICAgICBMMiA9IExbOl0KKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIEwyICs9IFsKKyAgICAgICAgICAgICAgICAodW5pY29kZSgnMScpICsgdW5pY29kZSgnMCcpKjIwLCAxMEwqKjIwKSwKKyAgICAgICAgICAgICAgICAodW5pY29kZSgnMScpICsgdW5pY29kZSgnMCcpKjEwMCwgMTBMKioxMDApLAorICAgICAgICBdCisgICAgICAgIGZvciBzLCB2IGluIEwyICsgTEw6CisgICAgICAgICAgICBmb3Igc2lnbiBpbiAiIiwgIisiLCAiLSI6CisgICAgICAgICAgICAgICAgZm9yIHByZWZpeCBpbiAiIiwgIiAiLCAiXHQiLCAiICBcdFx0ICAiOgorICAgICAgICAgICAgICAgICAgICBzcyA9IHByZWZpeCArIHNpZ24gKyBzCisgICAgICAgICAgICAgICAgICAgIHZ2ID0gdgorICAgICAgICAgICAgICAgICAgICBpZiBzaWduID09ICItIiBhbmQgdiBpcyBub3QgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZ2ID0gLXYKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKHNzKSwgbG9uZyh2dikpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCB2OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvbmcsICcxMjNcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvbmcsICc1MycsIDQwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxvbmcsIDEsIDEyKQorCisgICAgICAgICMgdGVzdHMgd2l0aCBiYXNlIDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcgMDEyMyAgJywgMCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJyAwMTIzICAnLCAwKSwgODMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMDAwJywgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMG8xMjMnLCAwKSwgODMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMHgxMjMnLCAwKSwgMjkxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzBiMTAwJywgMCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnIDBPMTIzICAgJywgMCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJyAwWDEyMyAgJywgMCksIDI5MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcgMEIxMDAgJywgMCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMCcsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJyswJywgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnLTAnLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcwMCcsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb25nLCAnMDgnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb25nLCAnLTAxMjM5NScsIDApCisKKyAgICAgICAgIyBTRiBwYXRjaCAjMTYzODg3OTogZW1iZWRkZWQgTlVMcyB3ZXJlIG5vdCBkZXRlY3RlZCB3aXRoCisgICAgICAgICMgZXhwbGljaXQgYmFzZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb25nLCAnMTIzXDAnLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9uZywgJzEyM1x4MDAgMjQ1JywgMjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzEwMjAwMjAyMjIwMTIyMTExMTIxMScsIDMpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzEwMDAwMDAwMDAwMDAwMDAwJywgNCksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMzIyNDQwMDI0MjMxNDEnLCA1KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxNTUwMTA0MDE1NTA0JywgNiksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMjExMzAxNDIyMzU0JywgNyksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNDAwMDAwMDAwMDAnLCA4KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxMjA2ODY1NzQ1NCcsIDkpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzQyOTQ5NjcyOTYnLCAxMCksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTkwNDQ0MDU1NCcsIDExKSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc5YmE0NjE1OTQnLCAxMiksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNTM1YTc5ODg5JywgMTMpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzJjYTViNzQ2NCcsIDE0KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxYTIwZGNkODEnLCAxNSksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTAwMDAwMDAwJywgMTYpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJ2E3ZmZkYTkxJywgMTcpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzcwNGhlN2c0JywgMTgpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzRmNWFmZjY2JywgMTkpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzM3MjNhaTRnJywgMjApLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzI4MWQ1NWk0JywgMjEpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzFmajhiMTg0JywgMjIpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzE2MDZrN2ljJywgMjMpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJ21iOTk0YWcnLCAyNCksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnaGVrMm1nbCcsIDI1KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCdkbmNoYm5tJywgMjYpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJ2IyOGpwZG0nLCAyNyksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnOHBmZ2loNCcsIDI4KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc3NmJlaWdnJywgMjkpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzVxbWNwcWcnLCAzMCksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNHEwanRvNCcsIDMxKSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc0MDAwMDAwJywgMzIpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzNhb2txOTQnLCAzMyksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMnFoeGpsaScsIDM0KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcyYnI0NXFiJywgMzUpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzF6MTQxejQnLCAzNiksIDQyOTQ5NjcyOTYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzEwMjAwMjAyMjIwMTIyMTExMTIxMicsIDMpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzEwMDAwMDAwMDAwMDAwMDAxJywgNCksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMzIyNDQwMDI0MjMxNDInLCA1KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxNTUwMTA0MDE1NTA1JywgNiksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMjExMzAxNDIyMzU1JywgNyksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNDAwMDAwMDAwMDEnLCA4KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxMjA2ODY1NzQ1NScsIDkpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzQyOTQ5NjcyOTcnLCAxMCksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTkwNDQ0MDU1NScsIDExKSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc5YmE0NjE1OTUnLCAxMiksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNTM1YTc5ODhhJywgMTMpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzJjYTViNzQ2NScsIDE0KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxYTIwZGNkODInLCAxNSksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTAwMDAwMDAxJywgMTYpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJ2E3ZmZkYTkyJywgMTcpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzcwNGhlN2c1JywgMTgpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzRmNWFmZjY3JywgMTkpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzM3MjNhaTRoJywgMjApLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzI4MWQ1NWk1JywgMjEpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzFmajhiMTg1JywgMjIpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzE2MDZrN2lkJywgMjMpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJ21iOTk0YWgnLCAyNCksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnaGVrMm1nbScsIDI1KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCdkbmNoYm5uJywgMjYpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJ2IyOGpwZG4nLCAyNyksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnOHBmZ2loNScsIDI4KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc3NmJlaWdoJywgMjkpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzVxbWNwcWgnLCAzMCksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNHEwanRvNScsIDMxKSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc0MDAwMDAxJywgMzIpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzNhb2txOTUnLCAzMyksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMnFoeGpsaicsIDM0KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcyYnI0NXFjJywgMzUpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzF6MTQxejUnLCAzNiksIDQyOTQ5NjcyOTcpCisKKworICAgIGRlZiB0ZXN0X2NvbnZlcnNpb24oc2VsZik6CisgICAgICAgICMgVGVzdCBfX2xvbmdfXygpCisgICAgICAgIGNsYXNzIENsYXNzaWNNaXNzaW5nTWV0aG9kczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGxvbmcsIENsYXNzaWNNaXNzaW5nTWV0aG9kcygpKQorCisgICAgICAgIGNsYXNzIE1pc3NpbmdNZXRob2RzKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbG9uZywgTWlzc2luZ01ldGhvZHMoKSkKKworICAgICAgICBjbGFzcyBGb28wOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MkwKKworICAgICAgICBjbGFzcyBGb28xKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyTAorCisgICAgICAgIGNsYXNzIEZvbzIobG9uZyk6CisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyTAorCisgICAgICAgIGNsYXNzIEZvbzMobG9uZyk6CisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBjbGFzcyBGb280KGxvbmcpOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGNsYXNzIEZvbzUobG9uZyk6CisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyLgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhGb28wKCkpLCA0MkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhGb28xKCkpLCA0MkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhGb28yKCkpLCA0MkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhGb28zKCkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoRm9vNCgpKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbG9uZywgRm9vNSgpKQorCisgICAgICAgIGNsYXNzIENsYXNzaWM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBiYXNlIGluIChvYmplY3QsIENsYXNzaWMpOgorICAgICAgICAgICAgY2xhc3MgTG9uZ092ZXJyaWRlc1RydW5jKGJhc2UpOgorICAgICAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xMgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKExvbmdPdmVycmlkZXNUcnVuYygpKSwgNDIpCisKKyAgICAgICAgICAgIGNsYXNzIEp1c3RUcnVuYyhiYXNlKToKKyAgICAgICAgICAgICAgICBkZWYgX190cnVuY19fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhKdXN0VHJ1bmMoKSksIDQyKQorCisgICAgICAgICAgICBmb3IgdHJ1bmNfcmVzdWx0X2Jhc2UgaW4gKG9iamVjdCwgQ2xhc3NpYyk6CisgICAgICAgICAgICAgICAgY2xhc3MgSW50ZWdyYWwodHJ1bmNfcmVzdWx0X2Jhc2UpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgICAgICAgICAgY2xhc3MgVHJ1bmNSZXR1cm5zTm9uTG9uZyhiYXNlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ3JhbCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKFRydW5jUmV0dXJuc05vbkxvbmcoKSksIDQyKQorCisgICAgICAgICAgICAgICAgY2xhc3MgTm9uSW50ZWdyYWwodHJ1bmNfcmVzdWx0X2Jhc2UpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX190cnVuY19fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHdlIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25JbnRlZ3JhbCgpCisKKyAgICAgICAgICAgICAgICBjbGFzcyBUcnVuY1JldHVybnNOb25JbnRlZ3JhbChiYXNlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25JbnRlZ3JhbCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsb25nKFRydW5jUmV0dXJuc05vbkludGVncmFsKCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX190cnVuY19fIHJldHVybmVkIG5vbi1JbnRlZ3JhbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICh0eXBlIE5vbkludGVncmFsKSIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIHdpdGggJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYmFzZSwgdHJ1bmNfcmVzdWx0X2Jhc2UpLCkpCisKKyAgICBkZWYgdGVzdF9taXNjKHNlbGYpOgorCisgICAgICAgICMgY2hlY2sgdGhlIGV4dHJlbWVzIGluIGludDwtPmxvbmcgY29udmVyc2lvbgorICAgICAgICBodWdlcG9zID0gc3lzLm1heGludAorICAgICAgICBodWdlbmVnID0gLWh1Z2Vwb3MgLSAxCisgICAgICAgIGh1Z2Vwb3NfYXNsb25nID0gbG9uZyhodWdlcG9zKQorICAgICAgICBodWdlbmVnX2FzbG9uZyA9IGxvbmcoaHVnZW5lZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodWdlcG9zLCBodWdlcG9zX2FzbG9uZywgImxvbmcoc3lzLm1heGludCkgIT0gc3lzLm1heGludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHVnZW5lZywgaHVnZW5lZ19hc2xvbmcsCisgICAgICAgICAgICAibG9uZygtc3lzLm1heGludC0xKSAhPSAtc3lzLm1heGludC0xIikKKworICAgICAgICAjIGxvbmcgLT4gaW50IHNob3VsZCBub3QgZmFpbCBmb3IgaHVnZXBvc19hc2xvbmcgb3IgaHVnZW5lZ19hc2xvbmcKKyAgICAgICAgeCA9IGludChodWdlcG9zX2FzbG9uZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBodWdlcG9zLAorICAgICAgICAgICAgICAgICAgImNvbnZlcnRpbmcgc3lzLm1heGludCB0byBsb25nIGFuZCBiYWNrIHRvIGludCBmYWlscyIpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZyhzeXMubWF4aW50KSkgb3ZlcmZsb3dlZCEiKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh4LCBpbnQpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZyhzeXMubWF4aW50KSkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgaW50IikKKyAgICAgICAgeCA9IGludChodWdlbmVnX2FzbG9uZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBodWdlbmVnLAorICAgICAgICAgICAgICAgICAgImNvbnZlcnRpbmcgLXN5cy5tYXhpbnQtMSB0byBsb25nIGFuZCBiYWNrIHRvIGludCBmYWlscyIpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZygtc3lzLm1heGludC0xKSkgb3ZlcmZsb3dlZCEiKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh4LCBpbnQpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZygtc3lzLm1heGludC0xKSkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgaW50IikKKyAgICAgICAgIyBidXQgbG9uZyAtPiBpbnQgc2hvdWxkIG92ZXJmbG93IGZvciBodWdlcG9zKzEgYW5kIGh1Z2VuZWctMQorICAgICAgICB4ID0gaHVnZXBvc19hc2xvbmcgKyAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHkgPSBpbnQoeCkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoImludChsb25nKHN5cy5tYXhpbnQpICsgMSkgbXVzdG4ndCBvdmVyZmxvdyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh5LCBsb25nLAorICAgICAgICAgICAgImludChsb25nKHN5cy5tYXhpbnQpICsgMSkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbG9uZyIpCisKKyAgICAgICAgeCA9IGh1Z2VuZWdfYXNsb25nIC0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5ID0gaW50KHgpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZygtc3lzLm1heGludC0xKSAtIDEpIG11c3RuJ3Qgb3ZlcmZsb3ciKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeSwgbG9uZywKKyAgICAgICAgICAgICAgICJpbnQobG9uZygtc3lzLm1heGludC0xKSAtIDEpIHNob3VsZCBoYXZlIHJldHVybmVkIGxvbmciKQorCisgICAgICAgIGNsYXNzIGxvbmcyKGxvbmcpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB4ID0gbG9uZzIoMUw8PDEwMCkKKyAgICAgICAgeSA9IGludCh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh5KSBpcyBsb25nLAorICAgICAgICAgICAgIm92ZXJmbG93aW5nIGludCBjb252ZXJzaW9uIG11c3QgcmV0dXJuIGxvbmcgbm90IGxvbmcgc3VidHlwZSIpCisKKyAgICAgICAgIyBsb25nIC0+IFB5X3NzaXplX3QgY29udmVyc2lvbgorICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGopOgorICAgICAgICAgICAgICAgIHJldHVybiBpLCBqCisKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKClbLTVMOjdMXSwgKC01LCA3KSkKKyAgICAgICAgICAgICMgdXNlIHRoZSBjbGFtcGluZyBlZmZlY3QgdG8gdGVzdCB0aGUgc21hbGxlc3QgYW5kIGxhcmdlc3QgbG9uZ3MKKyAgICAgICAgICAgICMgdGhhdCBmaXQgYSBQeV9zc2l6ZV90CisgICAgICAgICAgICBzbGljZW1pbiwgc2xpY2VtYXggPSBYKClbLTJMKioxMDA6MkwqKjEwMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgpW3NsaWNlbWluOnNsaWNlbWF4XSwgKHNsaWNlbWluLCBzbGljZW1heCkpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTk4Njkoc2VsZik6CisgICAgICAgICMgSXNzdWUgOTg2OTogSW50ZXJwcmV0ZXIgY3Jhc2ggd2hlbiBpbml0aWFsaXppbmcgYW4gaW5zdGFuY2UKKyAgICAgICAgIyBvZiBhIGxvbmcgc3ViY2xhc3MgZnJvbSBhbiBvYmplY3Qgd2hvc2UgX19sb25nX18gbWV0aG9kIHJldHVybnMKKyAgICAgICAgIyBhIHBsYWluIGludC4KKyAgICAgICAgY2xhc3MgQmFkTG9uZyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAxMDAwMDAwCisKKyAgICAgICAgY2xhc3MgTXlMb25nKGxvbmcpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHggPSBNeUxvbmcoQmFkTG9uZygpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAxMDAwMDAwKQorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGVzdHMgb2YgYXV0byBpbnQtPmxvbmcgY29udmVyc2lvbgorCisgICAgZGVmIHRlc3RfYXV0b19vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgc3BlY2lhbCA9IFswLCAxLCAyLCAzLCBzeXMubWF4aW50LTEsIHN5cy5tYXhpbnQsIHN5cy5tYXhpbnQrMV0KKyAgICAgICAgc3FydCA9IGludChtYXRoLnNxcnQoc3lzLm1heGludCkpCisgICAgICAgIHNwZWNpYWwuZXh0ZW5kKFtzcXJ0LTEsIHNxcnQsIHNxcnQrMV0pCisgICAgICAgIHNwZWNpYWwuZXh0ZW5kKFstaSBmb3IgaSBpbiBzcGVjaWFsXSkKKworICAgICAgICBkZWYgY2hlY2tpdCgqYXJncyk6CisgICAgICAgICAgICAjIEhlYXZ5IHVzZSBvZiBuZXN0ZWQgc2NvcGVzIGhlcmUhCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgRnJtKCJmb3IgJXIgZXhwZWN0ZWQgJXIgZ290ICVyIiwgYXJncywgZXhwZWN0ZWQsIGdvdCkpCisKKyAgICAgICAgZm9yIHggaW4gc3BlY2lhbDoKKyAgICAgICAgICAgIGxvbmd4ID0gbG9uZyh4KQorCisgICAgICAgICAgICBleHBlY3RlZCA9IC1sb25neAorICAgICAgICAgICAgZ290ID0gLXgKKyAgICAgICAgICAgIGNoZWNraXQoJy0nLCB4KQorCisgICAgICAgICAgICBmb3IgeSBpbiBzcGVjaWFsOgorICAgICAgICAgICAgICAgIGxvbmd5ID0gbG9uZyh5KQorCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsb25neCArIGxvbmd5CisgICAgICAgICAgICAgICAgZ290ID0geCArIHkKKyAgICAgICAgICAgICAgICBjaGVja2l0KHgsICcrJywgeSkKKworICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbG9uZ3ggLSBsb25neQorICAgICAgICAgICAgICAgIGdvdCA9IHggLSB5CisgICAgICAgICAgICAgICAgY2hlY2tpdCh4LCAnLScsIHkpCisKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGxvbmd4ICogbG9uZ3kKKyAgICAgICAgICAgICAgICBnb3QgPSB4ICogeQorICAgICAgICAgICAgICAgIGNoZWNraXQoeCwgJyonLCB5KQorCisgICAgICAgICAgICAgICAgaWYgeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsb25neCAvIGxvbmd5CisgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSB4IC8geQorICAgICAgICAgICAgICAgICAgICBjaGVja2l0KHgsICcvJywgeSkKKworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGxvbmd4IC8vIGxvbmd5CisgICAgICAgICAgICAgICAgICAgIGdvdCA9IHggLy8geQorICAgICAgICAgICAgICAgICAgICBjaGVja2l0KHgsICcvLycsIHkpCisKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBkaXZtb2QobG9uZ3gsIGxvbmd5KQorICAgICAgICAgICAgICAgICAgICBnb3QgPSBkaXZtb2QobG9uZ3gsIGxvbmd5KQorICAgICAgICAgICAgICAgICAgICBjaGVja2l0KHgsICdkaXZtb2QnLCB5KQorCisgICAgICAgICAgICAgICAgaWYgYWJzKHkpIDwgNSBhbmQgbm90ICh4ID09IDAgYW5kIHkgPCAwKToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsb25neCAqKiBsb25neQorICAgICAgICAgICAgICAgICAgICBnb3QgPSB4ICoqIHkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tpdCh4LCAnKionLCB5KQorCisgICAgICAgICAgICAgICAgICAgIGZvciB6IGluIHNwZWNpYWw6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB6ICE9IDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHkgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBwb3cobG9uZ3gsIGxvbmd5LCBsb25nKHopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSBwb3coeCwgeSwgeikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tpdCgncG93JywgeCwgeSwgJyUnLCB6KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG93LGxvbmd4LCBsb25neSwgbG9uZyh6KSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBkZWYgdGVzdF9mbG9hdF9jb252ZXJzaW9uKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIERCTF9NQVggPSBzeXMuZmxvYXRfaW5mby5tYXgKKyAgICAgICAgREJMX01BWF9FWFAgPSBzeXMuZmxvYXRfaW5mby5tYXhfZXhwCisgICAgICAgIERCTF9NQU5UX0RJRyA9IHN5cy5mbG9hdF9pbmZvLm1hbnRfZGlnCisKKyAgICAgICAgZXhhY3RfdmFsdWVzID0gWzBMLCAxTCwgMkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1My0zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKDIqKjUzLTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTMtMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1MyksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1MysyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKDIqKjU0LTQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTQtMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1NCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1NCs0KV0KKyAgICAgICAgZm9yIHggaW4gZXhhY3RfdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGZsb2F0KHgpKSwgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhmbG9hdCgteCkpLCAteCkKKworICAgICAgICAjIHRlc3Qgcm91bmQtaGFsZi1ldmVuCisgICAgICAgIGZvciB4LCB5IGluIFsoMSwgMCksICgyLCAyKSwgKDMsIDQpLCAoNCwgNCksICg1LCA0KSwgKDYsIDYpLCAoNywgOCldOgorICAgICAgICAgICAgZm9yIHAgaW4geHJhbmdlKDE1KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoMkwqKnAqKDIqKjUzK3gpKSksIDJMKipwKigyKio1Myt5KSkKKworICAgICAgICBmb3IgeCwgeSBpbiBbKDAsIDApLCAoMSwgMCksICgyLCAwKSwgKDMsIDQpLCAoNCwgNCksICg1LCA0KSwgKDYsIDgpLAorICAgICAgICAgICAgICAgICAgICAgKDcsIDgpLCAoOCwgOCksICg5LCA4KSwgKDEwLCA4KSwgKDExLCAxMiksICgxMiwgMTIpLAorICAgICAgICAgICAgICAgICAgICAgKDEzLCAxMiksICgxNCwgMTYpLCAoMTUsIDE2KV06CisgICAgICAgICAgICBmb3IgcCBpbiB4cmFuZ2UoMTUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhmbG9hdCgyTCoqcCooMioqNTQreCkpKSwgMkwqKnAqKDIqKjU0K3kpKQorCisgICAgICAgICMgYmVoYXZpb3VyIG5lYXIgZXh0cmVtZXMgb2YgZmxvYXRpbmctcG9pbnQgcmFuZ2UKKyAgICAgICAgbG9uZ19kYmxfbWF4ID0gbG9uZyhEQkxfTUFYKQorICAgICAgICB0b3BfcG93ZXIgPSAyKipEQkxfTUFYX0VYUAorICAgICAgICBoYWxmd2F5ID0gKGxvbmdfZGJsX21heCArIHRvcF9wb3dlcikvLzIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChsb25nX2RibF9tYXgpLCBEQkxfTUFYKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KGxvbmdfZGJsX21heCsxKSwgREJMX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChoYWxmd2F5LTEpLCBEQkxfTUFYKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgaGFsZndheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgxLWhhbGZ3YXkpLCAtREJMX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIC1oYWxmd2F5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgdG9wX3Bvd2VyLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCB0b3BfcG93ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCB0b3BfcG93ZXIrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIDIqdG9wX3Bvd2VyLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCAyKnRvcF9wb3dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIHRvcF9wb3dlcip0b3BfcG93ZXIpCisKKyAgICAgICAgZm9yIHAgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICB4ID0gbG9uZygyKipwICogKDIqKjUzICsgMSkgKyAxKQorICAgICAgICAgICAgeSA9IGxvbmcoMioqcCAqICgyKio1MysgMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoeCkpLCB5KQorCisgICAgICAgICAgICB4ID0gbG9uZygyKipwICogKDIqKjUzICsgMSkpCisgICAgICAgICAgICB5ID0gbG9uZygyKipwICogMioqNTMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoeCkpLCB5KQorCisgICAgZGVmIHRlc3RfZmxvYXRfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIGZvciB4IGluIC0yLjAsIC0xLjAsIDAuMCwgMS4wLCAyLjA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KGxvbmcoeCkpLCB4KQorCisgICAgICAgIHNodWdlID0gJzEyMzQ1JyAqIDEyMAorICAgICAgICBodWdlID0gMUwgPDwgMzAwMDAKKyAgICAgICAgbWh1Z2UgPSAtaHVnZQorICAgICAgICBuYW1lc3BhY2UgPSB7J2h1Z2UnOiBodWdlLCAnbWh1Z2UnOiBtaHVnZSwgJ3NodWdlJzogc2h1Z2UsICdtYXRoJzogbWF0aH0KKyAgICAgICAgZm9yIHRlc3QgaW4gWyJmbG9hdChodWdlKSIsICJmbG9hdChtaHVnZSkiLAorICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoaHVnZSkiLCAiY29tcGxleChtaHVnZSkiLAorICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoaHVnZSwgMSkiLCAiY29tcGxleChtaHVnZSwgMSkiLAorICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoMSwgaHVnZSkiLCAiY29tcGxleCgxLCBtaHVnZSkiLAorICAgICAgICAgICAgICAgICAgICAgIjEuICsgaHVnZSIsICJodWdlICsgMS4iLCAiMS4gKyBtaHVnZSIsICJtaHVnZSArIDEuIiwKKyAgICAgICAgICAgICAgICAgICAgICIxLiAtIGh1Z2UiLCAiaHVnZSAtIDEuIiwgIjEuIC0gbWh1Z2UiLCAibWh1Z2UgLSAxLiIsCisgICAgICAgICAgICAgICAgICAgICAiMS4gKiBodWdlIiwgImh1Z2UgKiAxLiIsICIxLiAqIG1odWdlIiwgIm1odWdlICogMS4iLAorICAgICAgICAgICAgICAgICAgICAgIjEuIC8vIGh1Z2UiLCAiaHVnZSAvLyAxLiIsICIxLiAvLyBtaHVnZSIsICJtaHVnZSAvLyAxLiIsCisgICAgICAgICAgICAgICAgICAgICAiMS4gLyBodWdlIiwgImh1Z2UgLyAxLiIsICIxLiAvIG1odWdlIiwgIm1odWdlIC8gMS4iLAorICAgICAgICAgICAgICAgICAgICAgIjEuICoqIGh1Z2UiLCAiaHVnZSAqKiAxLiIsICIxLiAqKiBtaHVnZSIsICJtaHVnZSAqKiAxLiIsCisgICAgICAgICAgICAgICAgICAgICAibWF0aC5zaW4oaHVnZSkiLCAibWF0aC5zaW4obWh1Z2UpIiwKKyAgICAgICAgICAgICAgICAgICAgICJtYXRoLnNxcnQoaHVnZSkiLCAibWF0aC5zcXJ0KG1odWdlKSIsICMgc2hvdWxkIGRvIGJldHRlcgorICAgICAgICAgICAgICAgICAgICAgIm1hdGguZmxvb3IoaHVnZSkiLCAibWF0aC5mbG9vcihtaHVnZSkiXToKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZXZhbCwgdGVzdCwgbmFtZXNwYWNlKQorCisgICAgICAgICAgICAjIFhYWCBQZXJoYXBzIGZsb2F0KHNodWdlKSBjYW4gcmFpc2UgT3ZlcmZsb3dFcnJvciBvbiBzb21lIGJveD8KKyAgICAgICAgICAgICMgVGhlIGNvbXBhcmlzb24gc2hvdWxkIG5vdC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZmxvYXQoc2h1Z2UpLCBpbnQoc2h1Z2UpLAorICAgICAgICAgICAgICAgICJmbG9hdChzaHVnZSkgc2hvdWxkIG5vdCBlcXVhbCBpbnQoc2h1Z2UpIikKKworICAgIGRlZiB0ZXN0X2xvZ3Moc2VsZik6CisgICAgICAgIExPRzEwRSA9IG1hdGgubG9nMTAobWF0aC5lKQorCisgICAgICAgIGZvciBleHAgaW4gcmFuZ2UoMTApICsgWzEwMCwgMTAwMCwgMTAwMDBdOgorICAgICAgICAgICAgdmFsdWUgPSAxMCAqKiBleHAKKyAgICAgICAgICAgIGxvZzEwID0gbWF0aC5sb2cxMCh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobG9nMTAsIGV4cCkKKworICAgICAgICAgICAgIyBsb2cxMCh2YWx1ZSkgPT0gZXhwLCBzbyBsb2codmFsdWUpID09IGxvZzEwKHZhbHVlKS9sb2cxMChlKSA9PQorICAgICAgICAgICAgIyBleHAvTE9HMTBFCisgICAgICAgICAgICBleHBlY3RlZCA9IGV4cCAvIExPRzEwRQorICAgICAgICAgICAgbG9nID0gbWF0aC5sb2codmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGxvZywgZXhwZWN0ZWQpCisKKyAgICAgICAgZm9yIGJhZCBpbiAtKDFMIDw8IDEwMDAwKSwgLTJMLCAwTDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgubG9nLCBiYWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmxvZzEwLCBiYWQpCisKKyAgICBkZWYgdGVzdF9taXhlZF9jb21wYXJlcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgIyBXZSdyZSBtb3N0bHkgY29uY2VybmVkIHdpdGggdGhhdCBtaXhpbmcgZmxvYXRzIGFuZCBsb25ncyBkb2VzIHRoZQorICAgICAgICAjIHJpZ2h0IHN0dWZmLCBldmVuIHdoZW4gbG9uZ3MgYXJlIHRvbyBsYXJnZSB0byBmaXQgaW4gYSBmbG9hdC4KKyAgICAgICAgIyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGUgcmVzdWx0cyBpcyB0byB1c2UgYW4gZW50aXJlbHkgZGlmZmVyZW50CisgICAgICAgICMgbWV0aG9kLCB3aGljaCB3ZSBkbyBoZXJlIHZpYSBhIHNrZWxldGFsIHJhdGlvbmFsIGNsYXNzICh3aGljaAorICAgICAgICAjIHJlcHJlc2VudHMgYWxsIFB5dGhvbiBpbnRzLCBsb25ncyBhbmQgZmxvYXRzIGV4YWN0bHkpLgorICAgICAgICBjbGFzcyBSYXQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5uID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kID0gMQorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorICAgICAgICAgICAgICAgICAgICAjIENvbnZlcnQgdG8gZXhhY3QgcmF0aW9uYWwgZXF1aXZhbGVudC4KKyAgICAgICAgICAgICAgICAgICAgZiwgZSA9IG1hdGguZnJleHAoYWJzKHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGYgPT0gMCBvciAwLjUgPD0gZiA8IDEuMAorICAgICAgICAgICAgICAgICAgICAjIHx2YWx1ZXwgPSBmICogMioqZSBleGFjdGx5CisKKyAgICAgICAgICAgICAgICAgICAgIyBTdWNrIHVwIENIVU5LIGJpdHMgYXQgYSB0aW1lOyAyOCBpcyBlbm91Z2ggc28gdGhhdCB3ZSBzdWNrCisgICAgICAgICAgICAgICAgICAgICMgdXAgYWxsIGJpdHMgaW4gMiBpdGVyYXRpb25zIGZvciBhbGwga25vd24gYmluYXJ5IGRvdWJsZS0KKyAgICAgICAgICAgICAgICAgICAgIyBwcmVjaXNpb24gZm9ybWF0cywgYW5kIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYW4gaW50LgorICAgICAgICAgICAgICAgICAgICBDSFVOSyA9IDI4CisgICAgICAgICAgICAgICAgICAgIHRvcCA9IDAKKyAgICAgICAgICAgICAgICAgICAgIyBpbnZhcmlhbnQ6IHx2YWx1ZXwgPSAodG9wICsgZikgKiAyKiplIGV4YWN0bHkKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBtYXRoLmxkZXhwKGYsIENIVU5LKQorICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXQgPSBpbnQoZikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBkaWdpdCA+PiBDSFVOSyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSAodG9wIDw8IENIVU5LKSB8IGRpZ2l0CisgICAgICAgICAgICAgICAgICAgICAgICBmIC09IGRpZ2l0CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgMC4wIDw9IGYgPCAxLjAKKyAgICAgICAgICAgICAgICAgICAgICAgIGUgLT0gQ0hVTksKKworICAgICAgICAgICAgICAgICAgICAjIE5vdyB8dmFsdWV8ID0gdG9wICogMioqZSBleGFjdGx5LgorICAgICAgICAgICAgICAgICAgICBpZiBlID49IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gdG9wIDw8IGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGQgPSAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gdG9wCisgICAgICAgICAgICAgICAgICAgICAgICBkID0gMSA8PCAtZQorICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gLW4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5uID0gbgorICAgICAgICAgICAgICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmbG9hdChuKSAvIGZsb2F0KGQpID09IHZhbHVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYW4ndCBkZWFsIHdpdGggJXIiICUgdmFsdWUpCisKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUmF0KToKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgPSBSYXQob3RoZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLm4gKiBvdGhlci5kLCBzZWxmLmQgKiBvdGhlci5uKQorCisgICAgICAgIGNhc2VzID0gWzAsIDAuMDAxLCAwLjk5LCAxLjAsIDEuNSwgMWUyMCwgMWUyMDBdCisgICAgICAgICMgMioqNDggaXMgYW4gaW1wb3J0YW50IGJvdW5kYXJ5IGluIHRoZSBpbnRlcm5hbHMuICAyKio1MyBpcyBhbgorICAgICAgICAjIGltcG9ydGFudCBib3VuZGFyeSBmb3IgSUVFRSBkb3VibGUgcHJlY2lzaW9uLgorICAgICAgICBmb3IgdCBpbiAyLjAqKjQ4LCAyLjAqKjUwLCAyLjAqKjUzOgorICAgICAgICAgICAgY2FzZXMuZXh0ZW5kKFt0IC0gMS4wLCB0IC0gMC4zLCB0LCB0ICsgMC4zLCB0ICsgMS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKHQtMSksIGxvbmcodCksIGxvbmcodCsxKV0pCisgICAgICAgIGNhc2VzLmV4dGVuZChbMCwgMSwgMiwgc3lzLm1heGludCwgZmxvYXQoc3lzLm1heGludCldKQorICAgICAgICAjIDFMPDwyMDAwMCBzaG91bGQgZXhjZWVkIGFsbCBkb3VibGUgZm9ybWF0cy4gIGxvbmcoMWUyMDApIGlzIHRvCisgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBnZXQgZXF1YWxpdHkgd2l0aCAxZTIwMCBhYm92ZS4KKyAgICAgICAgdCA9IGxvbmcoMWUyMDApCisgICAgICAgIGNhc2VzLmV4dGVuZChbMEwsIDFMLCAyTCwgMUwgPDwgMjAwMDAsIHQtMSwgdCwgdCsxXSkKKyAgICAgICAgY2FzZXMuZXh0ZW5kKFsteCBmb3IgeCBpbiBjYXNlc10pCisgICAgICAgIGZvciB4IGluIGNhc2VzOgorICAgICAgICAgICAgUnggPSBSYXQoeCkKKyAgICAgICAgICAgIGZvciB5IGluIGNhc2VzOgorICAgICAgICAgICAgICAgIFJ5ID0gUmF0KHkpCisgICAgICAgICAgICAgICAgUmNtcCA9IGNtcChSeCwgUnkpCisgICAgICAgICAgICAgICAgeHljbXAgPSBjbXAoeCwgeSkKKyAgICAgICAgICAgICAgICBlcShSY21wLCB4eWNtcCwgRnJtKCIlciAlciAlZCAlZCIsIHgsIHksIFJjbXAsIHh5Y21wKSkKKyAgICAgICAgICAgICAgICBlcSh4ID09IHksIFJjbXAgPT0gMCwgRnJtKCIlciA9PSAlciAlZCIsIHgsIHksIFJjbXApKQorICAgICAgICAgICAgICAgIGVxKHggIT0geSwgUmNtcCAhPSAwLCBGcm0oIiVyICE9ICVyICVkIiwgeCwgeSwgUmNtcCkpCisgICAgICAgICAgICAgICAgZXEoeCA8IHksIFJjbXAgPCAwLCBGcm0oIiVyIDwgJXIgJWQiLCB4LCB5LCBSY21wKSkKKyAgICAgICAgICAgICAgICBlcSh4IDw9IHksIFJjbXAgPD0gMCwgRnJtKCIlciA8PSAlciAlZCIsIHgsIHksIFJjbXApKQorICAgICAgICAgICAgICAgIGVxKHggPiB5LCBSY21wID4gMCwgRnJtKCIlciA+ICVyICVkIiwgeCwgeSwgUmNtcCkpCisgICAgICAgICAgICAgICAgZXEoeCA+PSB5LCBSY21wID49IDAsIEZybSgiJXIgPj0gJXIgJWQiLCB4LCB5LCBSY21wKSkKKworICAgIGRlZiB0ZXN0X25hbl9pbmYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxvbmcsIGZsb2F0KCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbG9uZywgZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9uZywgZmxvYXQoJ25hbicpKQorCisgICAgZGVmIHRlc3RfYml0X2xlbmd0aChzZWxmKToKKyAgICAgICAgdGlueSA9IDFlLTEwCisgICAgICAgIGZvciB4IGluIHhyYW5nZSgtNjUwMDAsIDY1MDAwKToKKyAgICAgICAgICAgIHggPSBsb25nKHgpCisgICAgICAgICAgICBrID0geC5iaXRfbGVuZ3RoKCkKKyAgICAgICAgICAgICMgQ2hlY2sgZXF1aXZhbGVuY2Ugd2l0aCBQeXRob24gdmVyc2lvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBsZW4oYmluKHgpLmxzdHJpcCgnLTBiJykpKQorICAgICAgICAgICAgIyBCZWhhdmlvdXIgYXMgc3BlY2lmaWVkIGluIHRoZSBkb2NzCisgICAgICAgICAgICBpZiB4ICE9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKihrLTEpIDw9IGFicyh4KSA8IDIqKmspCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgMCkKKyAgICAgICAgICAgICMgQWx0ZXJuYXRpdmUgZGVmaW5pdGlvbjogeC5iaXRfbGVuZ3RoKCkgPT0gMSArIGZsb29yKGxvZ18yKHgpKQorICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgICMgV2hlbiB4IGlzIGFuIGV4YWN0IHBvd2VyIG9mIDIsIG51bWVyaWMgZXJyb3JzIGNhbgorICAgICAgICAgICAgICAgICMgY2F1c2UgZmxvb3IobG9nKHgpL2xvZygyKSkgdG8gYmUgb25lIHRvbyBzbWFsbDsgZm9yCisgICAgICAgICAgICAgICAgIyBzbWFsbCB4IHRoaXMgY2FuIGJlIGZpeGVkIGJ5IGFkZGluZyBhIHNtYWxsIHF1YW50aXR5CisgICAgICAgICAgICAgICAgIyB0byB0aGUgcXVvdGllbnQgYmVmb3JlIHRha2luZyB0aGUgZmxvb3IuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCAxICsgbWF0aC5mbG9vcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGgubG9nKGFicyh4KSkvbWF0aC5sb2coMikgKyB0aW55KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwTCkuYml0X2xlbmd0aCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxTCkuYml0X2xlbmd0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMUwpLmJpdF9sZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMkwpLmJpdF9sZW5ndGgoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTJMKS5iaXRfbGVuZ3RoKCksIDIpCisgICAgICAgIGZvciBpIGluIFsyLCAzLCAxNSwgMTYsIDE3LCAzMSwgMzIsIDMzLCA2MywgNjQsIDIzNF06CisgICAgICAgICAgICBhID0gMkwqKmkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtMSkuYml0X2xlbmd0aCgpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMS1hKS5iaXRfbGVuZ3RoKCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhKS5iaXRfbGVuZ3RoKCksIGkrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC1hKS5iaXRfbGVuZ3RoKCksIGkrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGErMSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtYS0xKS5iaXRfbGVuZ3RoKCksIGkrMSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChMb25nVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbG9uZ19mdXR1cmUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9sb25nX2Z1dHVyZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmMzYmZiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbG9uZ19mdXR1cmUucHkKQEAgLTAsMCArMSwyMjEgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KKyMgV2hlbiB0cnVlIGRpdmlzaW9uIGlzIHRoZSBkZWZhdWx0LCBnZXQgcmlkIG9mIHRoaXMgYW5kIGFkZCBpdCB0bworIyB0ZXN0X2xvbmcucHkgaW5zdGVhZC4gIEluIHRoZSBtZWFudGltZSwgaXQncyB0b28gb2JzY3VyZSB0byB0cnkgdG8KKyMgdHJpY2sganVzdCBwYXJ0IG9mIHRlc3RfbG9uZyBpbnRvIHVzaW5nIGZ1dHVyZSBkaXZpc2lvbi4KKworaW1wb3J0IHN5cworaW1wb3J0IHJhbmRvbQoraW1wb3J0IG1hdGgKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKKyMgZGVjb3JhdG9yIGZvciBza2lwcGluZyB0ZXN0cyBvbiBub24tSUVFRSA3NTQgcGxhdGZvcm1zCityZXF1aXJlc19JRUVFXzc1NCA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoCisgICAgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorCitEQkxfTUFYID0gc3lzLmZsb2F0X2luZm8ubWF4CitEQkxfTUFYX0VYUCA9IHN5cy5mbG9hdF9pbmZvLm1heF9leHAKK0RCTF9NSU5fRVhQID0gc3lzLmZsb2F0X2luZm8ubWluX2V4cAorREJMX01BTlRfRElHID0gc3lzLmZsb2F0X2luZm8ubWFudF9kaWcKK0RCTF9NSU5fT1ZFUkZMT1cgPSAyKipEQkxfTUFYX0VYUCAtIDIqKihEQkxfTUFYX0VYUCAtIERCTF9NQU5UX0RJRyAtIDEpCisKKyMgcHVyZSBQeXRob24gdmVyc2lvbiBvZiBjb3JyZWN0bHktcm91bmRlZCB0cnVlIGRpdmlzaW9uCitkZWYgdHJ1ZWRpdihhLCBiKToKKyAgICAiIiJDb3JyZWN0bHktcm91bmRlZCB0cnVlIGRpdmlzaW9uIGZvciBpbnRlZ2Vycy4iIiIKKyAgICBuZWdhdGl2ZSA9IGFeYiA8IDAKKyAgICBhLCBiID0gYWJzKGEpLCBhYnMoYikKKworICAgICMgZXhjZXB0aW9uczogIGRpdmlzaW9uIGJ5IHplcm8sIG92ZXJmbG93CisgICAgaWYgbm90IGI6CisgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCJkaXZpc2lvbiBieSB6ZXJvIikKKyAgICBpZiBhID49IERCTF9NSU5fT1ZFUkZMT1cgKiBiOgorICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJpbnQvaW50IHRvbyBsYXJnZSB0byByZXByZXNlbnQgYXMgYSBmbG9hdCIpCisKKyAgICMgZmluZCBpbnRlZ2VyIGQgc2F0aXNmeWluZyAyKiooZCAtIDEpIDw9IGEvYiA8IDIqKmQKKyAgICBkID0gYS5iaXRfbGVuZ3RoKCkgLSBiLmJpdF9sZW5ndGgoKQorICAgIGlmIGQgPj0gMCBhbmQgYSA+PSAyKipkICogYiBvciBkIDwgMCBhbmQgYSAqIDIqKi1kID49IGI6CisgICAgICAgIGQgKz0gMQorCisgICAgIyBjb21wdXRlIDIqKi1leHAgKiBhIC8gYiBmb3Igc3VpdGFibGUgZXhwCisgICAgZXhwID0gbWF4KGQsIERCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRworICAgIGEsIGIgPSBhIDw8IG1heCgtZXhwLCAwKSwgYiA8PCBtYXgoZXhwLCAwKQorICAgIHEsIHIgPSBkaXZtb2QoYSwgYikKKworICAgICMgcm91bmQtaGFsZi10by1ldmVuOiBmcmFjdGlvbmFsIHBhcnQgaXMgci9iLCB3aGljaCBpcyA+IDAuNSBpZmYKKyAgICAjIDIqciA+IGIsIGFuZCA9PSAwLjUgaWZmIDIqciA9PSBiLgorICAgIGlmIDIqciA+IGIgb3IgMipyID09IGIgYW5kIHEgJSAyID09IDE6CisgICAgICAgIHEgKz0gMQorCisgICAgcmVzdWx0ID0gbWF0aC5sZGV4cChmbG9hdChxKSwgZXhwKQorICAgIHJldHVybiAtcmVzdWx0IGlmIG5lZ2F0aXZlIGVsc2UgcmVzdWx0CisKK2NsYXNzIFRydWVEaXZpc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgaHVnZSA9IDFMIDw8IDQwMDAwCisgICAgICAgIG1odWdlID0gLWh1Z2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodWdlIC8gaHVnZSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1odWdlIC8gbWh1Z2UsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodWdlIC8gbWh1Z2UsIC0xLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWh1Z2UgLyBodWdlLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLyBodWdlLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMUwgLyBodWdlLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSAvIG1odWdlLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMUwgLyBtaHVnZSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2NjYgKiBodWdlICsgKGh1Z2UgPj4gMSkpIC8gaHVnZSwgNjY2LjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDY2NiAqIG1odWdlICsgKG1odWdlID4+IDEpKSAvIG1odWdlLCA2NjYuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNjY2ICogaHVnZSArIChodWdlID4+IDEpKSAvIG1odWdlLCAtNjY2LjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDY2NiAqIG1odWdlICsgKG1odWdlID4+IDEpKSAvIGh1Z2UsIC02NjYuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodWdlIC8gKGh1Z2UgPDwgMSksIDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAwMDAwMCAqIGh1Z2UpIC8gaHVnZSwgMTAwMDAwMCkKKworICAgICAgICBuYW1lc3BhY2UgPSB7J2h1Z2UnOiBodWdlLCAnbWh1Z2UnOiBtaHVnZX0KKworICAgICAgICBmb3Igb3ZlcmZsb3cgaW4gWyJmbG9hdChodWdlKSIsICJmbG9hdChtaHVnZSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJodWdlIC8gMSIsICJodWdlIC8gMkwiLCAiaHVnZSAvIC0xIiwgImh1Z2UgLyAtMkwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJtaHVnZSAvIDEwMCIsICJtaHVnZSAvIDEwMEwiXToKKyAgICAgICAgICAgICMgSWYgdGhlICJldmFsIiBkb2VzIG5vdCBoYXBwZW4gaW4gdGhpcyBtb2R1bGUsCisgICAgICAgICAgICAjIHRydWUgZGl2aXNpb24gaXMgbm90IGVuYWJsZWQKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICAgICAgZXZhbChvdmVyZmxvdywgbmFtZXNwYWNlKQorCisgICAgICAgIGZvciB1bmRlcmZsb3cgaW4gWyIxIC8gaHVnZSIsICIyTCAvIGh1Z2UiLCAiLTEgLyBodWdlIiwgIi0yTCAvIGh1Z2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICIxMDAgLyBtaHVnZSIsICIxMDBMIC8gbWh1Z2UiXToKKyAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwodW5kZXJmbG93LCBuYW1lc3BhY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMC4wLCAnZXhwZWN0ZWQgdW5kZXJmbG93IHRvIDAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbSB7IXJ9Jy5mb3JtYXQodW5kZXJmbG93KSkKKworICAgICAgICBmb3IgemVybyBpbiBbImh1Z2UgLyAwIiwgImh1Z2UgLyAwTCIsICJtaHVnZSAvIDAiLCAibWh1Z2UgLyAwTCJdOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgZXZhbCh6ZXJvLCBuYW1lc3BhY2UpCisKKyAgICBkZWYgY2hlY2tfdHJ1ZWRpdihzZWxmLCBhLCBiLCBza2lwX3NtYWxsPVRydWUpOgorICAgICAgICAiIiJWZXJpZnkgdGhhdCB0aGUgcmVzdWx0IG9mIGEvYiBpcyBjb3JyZWN0bHkgcm91bmRlZCwgYnkKKyAgICAgICAgY29tcGFyaW5nIGl0IHdpdGggYSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBjb3JyZWN0bHkKKyAgICAgICAgcm91bmRlZCBkaXZpc2lvbi4gIGIgc2hvdWxkIGJlIG5vbnplcm8uIiIiCisKKyAgICAgICAgYSwgYiA9IGxvbmcoYSksIGxvbmcoYikKKworICAgICAgICAjIHNraXAgY2hlY2sgZm9yIHNtYWxsIGEgYW5kIGI6IGluIHRoaXMgY2FzZSwgdGhlIGN1cnJlbnQKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBjb252ZXJ0cyB0aGUgYXJndW1lbnRzIHRvIGZsb2F0IGRpcmVjdGx5IGFuZAorICAgICAgICAjIHRoZW4gYXBwbGllcyBhIGZsb2F0IGRpdmlzaW9uLiAgVGhpcyBjYW4gZ2l2ZSBkb3VibHktcm91bmRlZAorICAgICAgICAjIHJlc3VsdHMgb24geDg3LXVzaW5nIG1hY2hpbmVzIChwYXJ0aWN1bGFybHkgMzItYml0IExpbnV4KS4KKyAgICAgICAgaWYgc2tpcF9zbWFsbCBhbmQgbWF4KGFicyhhKSwgYWJzKGIpKSA8IDIqKkRCTF9NQU5UX0RJRzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgdXNlIHJlcHIgc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiAtMC4wIGFuZCAwLjAKKyAgICAgICAgICAgIGV4cGVjdGVkID0gcmVwcih0cnVlZGl2KGEsIGIpKQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gJ292ZXJmbG93JworICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICd6ZXJvZGl2aXNpb24nCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ290ID0gcmVwcihhIC8gYikKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBnb3QgPSAnb3ZlcmZsb3cnCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIGdvdCA9ICd6ZXJvZGl2aXNpb24nCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290LCAiSW5jb3JyZWN0bHkgcm91bmRlZCBkaXZpc2lvbiB7fS97fTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB7fSwgZ290IHt9Ii5mb3JtYXQoYSwgYiwgZXhwZWN0ZWQsIGdvdCkpCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9jb3JyZWN0bHlfcm91bmRlZF90cnVlX2RpdmlzaW9uKHNlbGYpOgorICAgICAgICAjIG1vcmUgc3RyaW5nZW50IHRlc3RzIHRoYW4gdGhvc2UgYWJvdmUsIGNoZWNraW5nIHRoYXQgdGhlCisgICAgICAgICMgcmVzdWx0IG9mIHRydWUgZGl2aXNpb24gb2YgaW50cyBpcyBhbHdheXMgY29ycmVjdGx5IHJvdW5kZWQuCisgICAgICAgICMgVGhpcyB0ZXN0IHNob3VsZCBwcm9iYWJseSBiZSBjb25zaWRlcmVkIENQeXRob24tc3BlY2lmaWMuCisKKyAgICAgICAgIyBFeGVyY2lzZSBhbGwgdGhlIGNvZGUgcGF0aHMgbm90IGludm9sdmluZyBHYi1zaXplZCBpbnRzLgorICAgICAgICAjIC4uLiBkaXZpc2lvbnMgaW52b2x2aW5nIHplcm8KKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEyMywgMCkKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC00NTYsIDApCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigwLCAzKQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMCwgLTMpCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigwLCAwKQorICAgICAgICAjIC4uLiBvdmVyZmxvdyBvciB1bmRlcmZsb3cgYnkgbGFyZ2UgbWFyZ2luCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdig2NzEgKiAxMjM0NSAqIDIqKkRCTF9NQVhfRVhQLCAxMjM0NSkKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEyMzQ1LCAzNDU2NzggKiAyKiooREJMX01BTlRfRElHIC0gREJMX01JTl9FWFApKQorICAgICAgICAjIC4uLiBhIG11Y2ggbGFyZ2VyIG9yIHNtYWxsZXIgdGhhbiBiCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMjM0NSoyKioxMDAsIDk4NzY1KQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMTIzNDUqMioqMzAsIDk4NzY1KjcqKjgxKQorICAgICAgICAjIC4uLiBhIC8gYiBuZWFyIGEgYm91bmRhcnk6IG9uZSBvZiAxLCAyKipEQkxfTUFOVF9ESUcsIDIqKkRCTF9NSU5fRVhQLAorICAgICAgICAjICAgICAgICAgICAgICAgICAyKipEQkxfTUFYX0VYUCwgMioqKERCTF9NSU5fRVhQLURCTF9NQU5UX0RJRykKKyAgICAgICAgYmFzZXMgPSAoMCwgREJMX01BTlRfRElHLCBEQkxfTUlOX0VYUCwKKyAgICAgICAgICAgICAgICAgREJMX01BWF9FWFAsIERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHKQorICAgICAgICBmb3IgYmFzZSBpbiBiYXNlczoKKyAgICAgICAgICAgIGZvciBleHAgaW4gcmFuZ2UoYmFzZSAtIDE1LCBiYXNlICsgMTUpOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdig3NTMxMioyKiptYXgoZXhwLCAwKSwgNjkxODcqMioqbWF4KC1leHAsIDApKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdig2OTE4NyoyKiptYXgoZXhwLCAwKSwgNzUzMTIqMioqbWF4KC1leHAsIDApKQorCisgICAgICAgICMgb3ZlcmZsb3cgY29ybmVyIGNhc2UKKyAgICAgICAgZm9yIG0gaW4gWzEsIDIsIDcsIDE3LCAxMjM0NSwgNyoqMTAwLAorICAgICAgICAgICAgICAgICAgLTEsIC0yLCAtNSwgLTIzLCAtNjc4OTEsIC00MSoqNTBdOgorICAgICAgICAgICAgZm9yIG4gaW4gcmFuZ2UoLTEwLCAxMCk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KG0qREJMX01JTl9PVkVSRkxPVyArIG4sIG0pCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KG0qREJMX01JTl9PVkVSRkxPVyArIG4sIC1tKQorCisgICAgICAgICMgY2hlY2sgZGV0ZWN0aW9uIG9mIGluZXhhY3RuZXNzIGluIHNoaWZ0aW5nIHN0YWdlCisgICAgICAgIGZvciBuIGluIHJhbmdlKDI1MCk6CisgICAgICAgICAgICAjICgyKipEQkxfTUFOVF9ESUcrMSkvKDIqKkRCTF9NQU5UX0RJRykgbGllcyBoYWxmd2F5CisgICAgICAgICAgICAjIGJldHdlZW4gdHdvIHJlcHJlc2VudGFibGUgZmxvYXRzLCBhbmQgd291bGQgdXN1YWxseSBiZQorICAgICAgICAgICAgIyByb3VuZGVkIGRvd24gdW5kZXIgcm91bmQtaGFsZi10by1ldmVuLiAgVGhlIHRpbmllc3Qgb2YKKyAgICAgICAgICAgICMgYWRkaXRpb25zIHRvIHRoZSBudW1lcmF0b3Igc2hvdWxkIGNhdXNlIGl0IHRvIGJlIHJvdW5kZWQKKyAgICAgICAgICAgICMgdXAgaW5zdGVhZC4KKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigoMioqREJMX01BTlRfRElHICsgMSkqMTIzNDUqMioqMjAwICsgMioqbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIqKkRCTF9NQU5UX0RJRyoxMjM0NSkKKworICAgICAgICAjIDEvMjczMSBpcyBvbmUgb2YgdGhlIHNtYWxsZXN0IGRpdmlzaW9uIGNhc2VzIHRoYXQncyBzdWJqZWN0CisgICAgICAgICMgdG8gZG91YmxlIHJvdW5kaW5nIG9uIElFRUUgNzU0IG1hY2hpbmVzIHdvcmtpbmcgaW50ZXJuYWxseSB3aXRoCisgICAgICAgICMgNjQtYml0IHByZWNpc2lvbi4gIE9uIHN1Y2ggbWFjaGluZXMsIHRoZSBuZXh0IGNoZWNrIHdvdWxkIGZhaWwsCisgICAgICAgICMgd2VyZSBpdCBub3QgZXhwbGljaXRseSBza2lwcGVkIGluIGNoZWNrX3RydWVkaXYuCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxLCAyNzMxKQorCisgICAgICAgICMgYSBwYXJ0aWN1bGFybHkgYmFkIGNhc2UgZm9yIHRoZSBvbGQgYWxnb3JpdGhtOiAgZ2l2ZXMgYW4KKyAgICAgICAgIyBlcnJvciBvZiBjbG9zZSB0byAzLjUgdWxwcy4KKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDI5NTE0NzkzMTM3MjU4MjI3MzAyMywgMjk1MTQ3OTMyMjY1MTE2MzAzMzYwKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMCoqKGkrMSksIDEwKippKQorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEwKippLCAxMCoqKGkrMSkpCisKKyAgICAgICAgIyB0ZXN0IHJvdW5kLWhhbGYtdG8tZXZlbiBiZWhhdmlvdXIsIG5vcm1hbCByZXN1bHQKKyAgICAgICAgZm9yIG0gaW4gWzEsIDIsIDQsIDcsIDgsIDE2LCAxNywgMzIsIDEyMzQ1LCA3KioxMDAsCisgICAgICAgICAgICAgICAgICAtMSwgLTIsIC01LCAtMjMsIC02Nzg5MSwgLTQxKio1MF06CisgICAgICAgICAgICBmb3IgbiBpbiByYW5nZSgtMTAsIDEwKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMioqREJMX01BTlRfRElHKm0gKyBuLCBtKQorCisgICAgICAgICMgdGVzdCByb3VuZC1oYWxmLXRvLWV2ZW4sIHN1Ym5vcm1hbCByZXN1bHQKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoLTIwLCAyMCk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYobiwgMioqMTA3NikKKworICAgICAgICAjIGxhcmdlaXNoIHJhbmRvbSBkaXZpc2lvbnM6IGEvYiB3aGVyZSB8YXwgPD0gfGJ8IDw9CisgICAgICAgICMgMip8YXw7IHxhbnN8IGlzIGJldHdlZW4gMC41IGFuZCAxLjAsIHNvIGVycm9yIHNob3VsZAorICAgICAgICAjIGFsd2F5cyBiZSBib3VuZGVkIGJ5IDIqKi01NCB3aXRoIGVxdWFsaXR5IHBvc3NpYmxlIG9ubHkKKyAgICAgICAgIyBpZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHE9YW5zKjIqKjUzIGlzIHplcm8uCisgICAgICAgIGZvciBNIGluIFsxMCoqMTAsIDEwKioxMDAsIDEwKioxMDAwXToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgICAgIGEgPSByYW5kb20ucmFuZHJhbmdlKDEsIE0pCisgICAgICAgICAgICAgICAgYiA9IHJhbmRvbS5yYW5kcmFuZ2UoYSwgMiphKzEpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KGEsIGIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC1hLCBiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdihhLCAtYikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoLWEsIC1iKQorCisgICAgICAgICMgYW5kIHNvbWUgKGdlbnVpbmVseSkgcmFuZG9tIHRlc3RzCisgICAgICAgIGZvciBfIGluIHJhbmdlKDEwMDAwKToKKyAgICAgICAgICAgIGFfYml0cyA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkKKyAgICAgICAgICAgIGJfYml0cyA9IHJhbmRvbS5yYW5kcmFuZ2UoMSwgMTAwMCkKKyAgICAgICAgICAgIHggPSByYW5kb20ucmFuZHJhbmdlKDIqKmFfYml0cykKKyAgICAgICAgICAgIHkgPSByYW5kb20ucmFuZHJhbmdlKDEsIDIqKmJfYml0cykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdih4LCB5KQorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KHgsIC15KQorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC14LCB5KQorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC14LCAteSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRydWVEaXZpc2lvblRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9sb25nZXhwLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbG9uZ2V4cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDIyMmExCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbG9uZ2V4cC5weQpAQCAtMCwwICsxLDE0IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIExvbmdFeHBUZXh0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9sb25nZXhwKHNlbGYpOgorICAgICAgICBSRVBTID0gNjU1ODAKKyAgICAgICAgbCA9IGV2YWwoIlsiICsgIjIsIiAqIFJFUFMgKyAiXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBSRVBTKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChMb25nRXhwVGV4dCkKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21hY29zLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWFjb3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFmNTEwNQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21hY29zLnB5CkBAIC0wLDAgKzEsOTggQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKKworTWFjT1MgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnTWFjT1MnKQorCitURVNURk4yID0gdGVzdF9zdXBwb3J0LlRFU1RGTiArICcyJworCitjbGFzcyBUZXN0TWFjT1ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RHZXRDcmVhdG9yQW5kVHlwZShzZWxmKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCcvRGV2ZWxvcGVyL1Rvb2xzL1NldEZpbGUnKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpCisgICAgICAgICAgICBmcC53cml0ZSgnXG4nKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoCisgICAgICAgICAgICAgICAgICAgIFsnL0RldmVsb3Blci9Ub29scy9TZXRGaWxlJywgJy10JywgJ0FCQ0QnLCAnLWMnLCAnRUZHSCcsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOXSkKKworICAgICAgICAgICAgY3IsIHRwID0gTWFjT1MuR2V0Q3JlYXRvckFuZFR5cGUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHAsICdBQkNEJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3IsICdFRkdIJykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdFNldENyZWF0b3JBbmRUeXBlKHNlbGYpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9EZXZlbG9wZXIvVG9vbHMvR2V0RmlsZUluZm8nKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpCisgICAgICAgICAgICBmcC53cml0ZSgnXG4nKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgICAgICAgICBNYWNPUy5TZXRDcmVhdG9yQW5kVHlwZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAnQUJDRCcsICdFRkdIJykKKworICAgICAgICAgICAgY3IsIHRwID0gTWFjT1MuR2V0Q3JlYXRvckFuZFR5cGUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3IsICdBQkNEJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHAsICdFRkdIJykKKworICAgICAgICAgICAgZGF0YSA9IHN1YnByb2Nlc3MuUG9wZW4oWyIvRGV2ZWxvcGVyL1Rvb2xzL0dldEZpbGVJbmZvIiwgdGVzdF9zdXBwb3J0LlRFU1RGTl0sCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKworICAgICAgICAgICAgdHAgPSBOb25lCisgICAgICAgICAgICBjciA9IE5vbmUKKyAgICAgICAgICAgIGZvciAgbG4gaW4gZGF0YS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbG4uc3RhcnRzd2l0aCgndHlwZTonKToKKyAgICAgICAgICAgICAgICAgICAgdHAgPSBsbi5zcGxpdCgpWy0xXVsxOi0xXQorICAgICAgICAgICAgICAgIGlmIGxuLnN0YXJ0c3dpdGgoJ2NyZWF0b3I6Jyk6CisgICAgICAgICAgICAgICAgICAgIGNyID0gbG4uc3BsaXQoKVstMV1bMTotMV0KKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjciwgJ0FCQ0QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cCwgJ0VGR0gnKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworCisgICAgZGVmIHRlc3RPcGVuUkYoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpCisgICAgICAgICAgICBmcC53cml0ZSgnaGVsbG8gd29ybGRcbicpCisgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICAgICAgICAgIHJmcCA9IE1hY09TLm9wZW5yZih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAnKndiJykKKyAgICAgICAgICAgIHJmcC53cml0ZSgnZ29vZGJ5ZSB3b3JsZFxuJykKKyAgICAgICAgICAgIHJmcC5jbG9zZSgpCisKKworICAgICAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICdyJykKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJ2hlbGxvIHdvcmxkXG4nKQorCisgICAgICAgICAgICByZnAgPSBNYWNPUy5vcGVucmYodGVzdF9zdXBwb3J0LlRFU1RGTiwgJypyYicpCisgICAgICAgICAgICBkYXRhID0gcmZwLnJlYWQoMTAwKQorICAgICAgICAgICAgZGF0YTIgPSByZnAucmVhZCgxMDApCisgICAgICAgICAgICByZnAuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnZ29vZGJ5ZSB3b3JsZFxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsICcnKQorCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0TWFjT1MpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWFjb3N0b29scy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21hY29zdG9vbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxNTk4MgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21hY29zdG9vbHMucHkKQEAgLTAsMCArMSw4OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK01hY09TID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ01hY09TJykKKyNUaGUgZm9sbG93aW5nIG1vZHVsZXMgc2hvdWxkIGV4aXN0IGlmIE1hY09TIGV4aXN0cy4KK2ltcG9ydCBDYXJib24uRmlsZQoraW1wb3J0IG1hY29zdG9vbHMKKworVEVTVEZOMiA9IHRlc3Rfc3VwcG9ydC5URVNURk4gKyAnMicKKworY2xhc3MgVGVzdE1hY29zdG9vbHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3cnKQorICAgICAgICBmcC53cml0ZSgnaGVsbG8gd29ybGRcbicpCisgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgcmZwID0gTWFjT1Mub3BlbnJmKHRlc3Rfc3VwcG9ydC5URVNURk4sICcqd2InKQorICAgICAgICByZnAud3JpdGUoJ2dvb2RieWUgd29ybGRcbicpCisgICAgICAgIHJmcC5jbG9zZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhURVNURk4yKQorCisgICAgZGVmIGNvbXBhcmVEYXRhKHNlbGYpOgorICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3InKQorICAgICAgICBkYXRhMSA9IGZwLnJlYWQoKQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIGZwID0gb3BlbihURVNURk4yLCAncicpCisgICAgICAgIGRhdGEyID0gZnAucmVhZCgpCisgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgaWYgZGF0YTEgIT0gZGF0YTI6CisgICAgICAgICAgICByZXR1cm4gJ0RhdGEgZm9ya3MgZGlmZmVyJworICAgICAgICByZnAgPSBNYWNPUy5vcGVucmYodGVzdF9zdXBwb3J0LlRFU1RGTiwgJypyYicpCisgICAgICAgIGRhdGExID0gcmZwLnJlYWQoMTAwMCkKKyAgICAgICAgcmZwLmNsb3NlKCkKKyAgICAgICAgcmZwID0gTWFjT1Mub3BlbnJmKFRFU1RGTjIsICcqcmInKQorICAgICAgICBkYXRhMiA9IHJmcC5yZWFkKDEwMDApCisgICAgICAgIHJmcC5jbG9zZSgpCisgICAgICAgIGlmIGRhdGExICE9IGRhdGEyOgorICAgICAgICAgICAgcmV0dXJuICdSZXNvdXJjZSBmb3JrcyBkaWZmZXInCisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIHRlc3RfdG91Y2hlZChzZWxmKToKKyAgICAgICAgIyBUaGlzIHJlYWxseSBvbmx5IHRlc3RzIHRoYXQgbm90aGluZyB1bmZvcmVzZWVuIGhhcHBlbnMuCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnbWFjb3N0b29scy50b3VjaGVkKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWlldD1UcnVlKToKKyAgICAgICAgICAgIG1hY29zdG9vbHMudG91Y2hlZCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgaWYgc3lzLm1heGludCA8IDIqKjMyOgorICAgICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhURVNURk4yKQorICAgICAgICAgICAgbWFjb3N0b29scy5jb3B5KHRlc3Rfc3VwcG9ydC5URVNURk4sIFRFU1RGTjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tcGFyZURhdGEoKSwgJycpCisKKyAgICBpZiBzeXMubWF4aW50IDwgMioqMzI6CisgICAgICAgIGRlZiB0ZXN0X21rYWxpYXMoc2VsZik6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKFRFU1RGTjIpCisgICAgICAgICAgICBtYWNvc3Rvb2xzLm1rYWxpYXModGVzdF9zdXBwb3J0LlRFU1RGTiwgVEVTVEZOMikKKyAgICAgICAgICAgIGZzcywgXywgXyA9IENhcmJvbi5GaWxlLlJlc29sdmVBbGlhc0ZpbGUoVEVTVEZOMiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnNzLmFzX3BhdGhuYW1lKCksIG9zLnBhdGgucmVhbHBhdGgodGVzdF9zdXBwb3J0LlRFU1RGTikpCisKKyAgICAgICAgZGVmIHRlc3RfbWthbGlhc19yZWxhdGl2ZShzZWxmKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoVEVTVEZOMikKKyAgICAgICAgICAgICMgSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCB0aGVuIGNoYW5jZXMgYXJlIHRoaXMgaXMgYSBuZXcKKyAgICAgICAgICAgICMgaW5zdGFsbCBvZiBQeXRob24gc28gZG9uJ3QgY3JlYXRlIGl0IHNpbmNlIHRoZSB1c2VyIG1pZ2h0IGVuZCB1cAorICAgICAgICAgICAgIyBydW5uaW5nIGBgc3VkbyBtYWtlIGluc3RhbGxgYCBhbmQgY3JlYXRpbmcgdGhlIGRpcmVjdG9yeSBoZXJlIHdvbid0CisgICAgICAgICAgICAjIGxlYXZlIGl0IHdpdGggdGhlIHByb3BlciBwZXJtaXNzaW9ucy4KKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzeXMucHJlZml4KToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG1hY29zdG9vbHMubWthbGlhcyh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBURVNURk4yLCBzeXMucHJlZml4KQorICAgICAgICAgICAgZnNzLCBfLCBfID0gQ2FyYm9uLkZpbGUuUmVzb2x2ZUFsaWFzRmlsZShURVNURk4yLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmc3MuYXNfcGF0aG5hbWUoKSwgb3MucGF0aC5yZWFscGF0aCh0ZXN0X3N1cHBvcnQuVEVTVEZOKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgIyBTa2lwIG9uIHdpZGUgdW5pY29kZQorICAgIGlmIGxlbih1J1wwJy5lbmNvZGUoJ3VuaWNvZGUtaW50ZXJuYWwnKSkgPT0gNDoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInRlc3RfbWFjb3N0b29scyBpcyBicm9rZW4gaW4gVVNDNCIpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0TWFjb3N0b29scykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzg2YzUzCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weQpAQCAtMCwwICsxLDU3IEBACitpbXBvcnQgbWFjcGF0aAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHRlc3RfZ2VuZXJpY3BhdGgKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIE1hY1BhdGhUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hYnNwYXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hY3BhdGguYWJzcGF0aCgieHg6eXkiKSwgInh4Onl5IikKKworICAgIGRlZiB0ZXN0X2lzYWJzKHNlbGYpOgorICAgICAgICBpc2FicyA9IG1hY3BhdGguaXNhYnMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzYWJzKCJ4eDp5eSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNhYnMoInh4Onl5OiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNhYnMoInh4OiIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzYWJzKCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2FicygiOmZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzYWJzKCI6Zm9vOmJhciIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzYWJzKCI6Zm9vOmJhcjoiKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0KHNlbGYpOgorICAgICAgICBzcGxpdCA9IG1hY3BhdGguc3BsaXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdCgiZm9vOmJhciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2ZvbzonLCAnYmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXQoImNvbmt5Om1vdW50cG9pbnQ6Zm9vOmJhciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2Nvbmt5Om1vdW50cG9pbnQ6Zm9vJywgJ2JhcicpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXQoIjoiKSwgKCcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXQoIjpjb25reTptb3VudHBvaW50OiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzpjb25reTptb3VudHBvaW50JywgJycpKQorCisgICAgZGVmIHRlc3Rfc3BsaXRleHQoc2VsZik6CisgICAgICAgIHNwbGl0ZXh0ID0gbWFjcGF0aC5zcGxpdGV4dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCI6Zm9vLmV4dCIpLCAoJzpmb28nLCAnLmV4dCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCJmb286Zm9vLmV4dCIpLCAoJ2Zvbzpmb28nLCAnLmV4dCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCIuZXh0IiksICgnLmV4dCcsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiZm9vLmV4dDpmb28iKSwgKCdmb28uZXh0OmZvbycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiOmZvby5leHQ6IiksICgnOmZvby5leHQ6JywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCIiKSwgKCcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRleHQoImZvby5iYXIuZXh0IiksICgnZm9vLmJhcicsICcuZXh0JykpCisKKyAgICBkZWYgdGVzdF9ub3JtcGF0aChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA1ODI3OiBNYWtlIHN1cmUgbm9ybXBhdGggcHJlc2VydmVzIHVuaWNvZGUKKyAgICAgICAgZm9yIHBhdGggaW4gKHUnJywgdScuJywgdScvJywgdSdcXCcsIHUnOicsIHUnLy8vZm9vLy4vL2Jhci8vJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWFjcGF0aC5ub3JtcGF0aChwYXRoKSwgdW5pY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9ybXBhdGgoKSByZXR1cm5lZCBzdHIgaW5zdGVhZCBvZiB1bmljb2RlJykKKworY2xhc3MgTWFjQ29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QpOgorICAgIHBhdGhtb2R1bGUgPSBtYWNwYXRoCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWFjUGF0aFRlc3RDYXNlLCBNYWNDb21tb25UZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOGUzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CkBAIC0wLDAgKzEsMjEyMiBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHN0YXQKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBlbWFpbAoraW1wb3J0IGVtYWlsLm1lc3NhZ2UKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBtYWlsYm94CitpbXBvcnQgZ2xvYgordHJ5OgorICAgIGltcG9ydCBmY250bAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKworIyBTaWxlbmNlIFB5M2sgd2FybmluZworcmZjODIyID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3JmYzgyMicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworY2xhc3MgVGVzdEJhc2U6CisKKyAgICBkZWYgX2NoZWNrX3NhbXBsZShzZWxmLCBtc2cpOgorICAgICAgICAjIEluc3BlY3QgYSBtYWlsYm94Lk1lc3NhZ2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNhbXBsZSBtZXNzYWdlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2csIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZywgbWFpbGJveC5NZXNzYWdlKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBfc2FtcGxlX2hlYWRlcnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHZhbHVlLCBtc2cuZ2V0X2FsbChrZXkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmlzX211bHRpcGFydCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtc2cuZ2V0X3BheWxvYWQoKSksIGxlbihfc2FtcGxlX3BheWxvYWRzKSkKKyAgICAgICAgZm9yIGksIHBheWxvYWQgaW4gZW51bWVyYXRlKF9zYW1wbGVfcGF5bG9hZHMpOgorICAgICAgICAgICAgcGFydCA9IG1zZy5nZXRfcGF5bG9hZChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhcnQsIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShwYXJ0LCBtYWlsYm94Lk1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnQuZ2V0X3BheWxvYWQoKSwgcGF5bG9hZCkKKworICAgIGRlZiBfZGVsZXRlX3JlY3Vyc2l2ZWx5KHNlbGYsIHRhcmdldCk6CisgICAgICAgICMgRGVsZXRlIGEgZmlsZSBvciBkZWxldGUgYSBkaXJlY3RvcnkgcmVjdXJzaXZlbHkKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcih0YXJnZXQpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZSh0YXJnZXQpCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHModGFyZ2V0KToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGFyZ2V0KQorCisKK2NsYXNzIFRlc3RNYWlsYm94KFRlc3RCYXNlKToKKworICAgIF9mYWN0b3J5ID0gTm9uZSAgICAgIyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgdG8gcmV1c2UgdGVzdHMKKyAgICBfdGVtcGxhdGUgPSAnRnJvbTogZm9vXG5cbiVzXG4nCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3BhdGggPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYuX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCisgICAgICAgIHNlbGYuX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLl9wYXRoKQorCisgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICAjIEFkZCBjb3BpZXMgb2YgYSBzYW1wbGUgbWVzc2FnZQorICAgICAgICBrZXlzID0gW10KKyAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAxKQorICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKG1haWxib3guTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMikKKyAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKF9zYW1wbGVfbWVzc2FnZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAzKQorICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKFN0cmluZ0lPLlN0cmluZ0lPKF9zYW1wbGVfbWVzc2FnZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCA0KQorICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5c1swXSksIHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgZm9yIGkgaW4gKDEsIDIsIDMsIDQpOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKHNlbGYuX2JveFtrZXlzW2ldXSkKKworICAgIGRlZiB0ZXN0X2FkZF9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoJ3crJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KS5zcGxpdCgnXG4nKSwKKyAgICAgICAgICAgIF9zYW1wbGVfbWVzc2FnZS5zcGxpdCgnXG4nKSkKKworICAgIGRlZiB0ZXN0X2FkZF9TdHJpbmdJTyhzZWxmKToKKyAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChTdHJpbmdJTy5TdHJpbmdJTyhzZWxmLl90ZW1wbGF0ZSAlICIwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KSwgc2VsZi5fdGVtcGxhdGUgJSAiMCIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgICMgUmVtb3ZlIG1lc3NhZ2VzIHVzaW5nIHJlbW92ZSgpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVtb3ZlX29yX2RlbGl0ZW0oc2VsZi5fYm94LnJlbW92ZSkKKworICAgIGRlZiB0ZXN0X2RlbGl0ZW0oc2VsZik6CisgICAgICAgICMgUmVtb3ZlIG1lc3NhZ2VzIHVzaW5nIF9fZGVsaXRlbV9fKCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZW1vdmVfb3JfZGVsaXRlbShzZWxmLl9ib3guX19kZWxpdGVtX18pCisKKyAgICBkZWYgX3Rlc3RfcmVtb3ZlX29yX2RlbGl0ZW0oc2VsZiwgbWV0aG9kKToKKyAgICAgICAgIyAoVXNlZCBieSB0ZXN0X3JlbW92ZSgpIGFuZCB0ZXN0X2RlbGl0ZW0oKS4pCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAyKQorICAgICAgICBtZXRob2Qoa2V5MCkKKyAgICAgICAgbCA9IGxlbihzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94W2tleTBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBtZXRob2Qoa2V5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksIHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAga2V5MiA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAyKQorICAgICAgICBtZXRob2Qoa2V5MikKKyAgICAgICAgbCA9IGxlbihzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94W2tleTJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBtZXRob2Qoa2V5MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksIHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAgbWV0aG9kKGtleTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFtrZXkxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogbWV0aG9kKGtleTEpKQorCisgICAgZGVmIHRlc3RfZGlzY2FyZChzZWxmLCByZXBldGl0aW9ucz0xMCk6CisgICAgICAgICMgRGlzY2FyZCBtZXNzYWdlcworICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMikKKyAgICAgICAgc2VsZi5fYm94LmRpc2NhcmQoa2V5MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94W2tleTBdKQorICAgICAgICBzZWxmLl9ib3guZGlzY2FyZChrZXkwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5MF0pCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgICMgUmV0cmlldmUgbWVzc2FnZXMgdXNpbmcgZ2V0KCkKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBtc2cgPSBzZWxmLl9ib3guZ2V0KGtleTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWydmcm9tJ10sICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgpLCAnMFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLl9ib3guZ2V0KCdmb28nKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLl9ib3guZ2V0KCdmb28nLCBGYWxzZSkpCisgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCisgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCwgZmFjdG9yeT1yZmM4MjIuTWVzc2FnZSkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBtc2cgPSBzZWxmLl9ib3guZ2V0KGtleTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWydmcm9tJ10sICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5mcC5yZWFkKCksICcxJyArIG9zLmxpbmVzZXApCisgICAgICAgIG1zZy5mcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICAjIFJldHJpZXZlIG1lc3NhZ2UgdXNpbmcgX19nZXRpdGVtX18oKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIG1zZyA9IHNlbGYuX2JveFtrZXkwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snZnJvbSddLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgJzBcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFsnZm9vJ10pCisgICAgICAgIHNlbGYuX2JveC5kaXNjYXJkKGtleTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFtrZXkwXSkKKworICAgIGRlZiB0ZXN0X2dldF9tZXNzYWdlKHNlbGYpOgorICAgICAgICAjIEdldCBNZXNzYWdlIHJlcHJlc2VudGF0aW9ucyBvZiBtZXNzYWdlcworICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnMCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnMCwgbWFpbGJveC5NZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzBbJ2Zyb20nXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMC5nZXRfcGF5bG9hZCgpLCAnMFxuJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkxKSkKKworICAgIGRlZiB0ZXN0X2dldF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgbWVzc2FnZXMKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCksIHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwgX3NhbXBsZV9tZXNzYWdlKQorCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGUoc2VsZik6CisgICAgICAgICMgR2V0IGZpbGUgcmVwcmVzZW50YXRpb25zIG9mIG1lc3NhZ2VzCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBtc2cwID0gc2VsZi5fYm94LmdldF9maWxlKGtleTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMC5yZWFkKCkucmVwbGFjZShvcy5saW5lc2VwLCAnXG4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIG1zZzEgPSBzZWxmLl9ib3guZ2V0X2ZpbGUoa2V5MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cxLnJlYWQoKS5yZXBsYWNlKG9zLmxpbmVzZXAsICdcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnMC5jbG9zZSgpCisgICAgICAgIG1zZzEuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGVfY2FuX2JlX2Nsb3NlZF90d2ljZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMTcwMAorICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgZiA9IHNlbGYuX2JveC5nZXRfZmlsZShrZXkpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2l0ZXJrZXlzKHNlbGYpOgorICAgICAgICAjIEdldCBrZXlzIHVzaW5nIGl0ZXJrZXlzKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfaXRlcmF0aW9uKHNlbGYuX2JveC5pdGVya2V5cywgZG9fa2V5cz1UcnVlLCBkb192YWx1ZXM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9rZXlzKHNlbGYpOgorICAgICAgICAjIEdldCBrZXlzIHVzaW5nIGtleXMoKQorICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94LmtleXMsIGRvX2tleXM9VHJ1ZSwgZG9fdmFsdWVzPUZhbHNlKQorCisgICAgZGVmIHRlc3RfaXRlcnZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBHZXQgdmFsdWVzIHVzaW5nIGl0ZXJ2YWx1ZXMoKQorICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94Lml0ZXJ2YWx1ZXMsIGRvX2tleXM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192YWx1ZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgICMgR2V0IHZhbHVlcyB1c2luZyBfX2l0ZXJfXygpCisgICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3guX19pdGVyX18sIGRvX2tleXM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192YWx1ZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBHZXQgdmFsdWVzIHVzaW5nIHZhbHVlcygpCisgICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3gudmFsdWVzLCBkb19rZXlzPUZhbHNlLCBkb192YWx1ZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2l0ZXJpdGVtcyhzZWxmKToKKyAgICAgICAgIyBHZXQga2V5cyBhbmQgdmFsdWVzIHVzaW5nIGl0ZXJpdGVtcygpCisgICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3guaXRlcml0ZW1zLCBkb19rZXlzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192YWx1ZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2l0ZW1zKHNlbGYpOgorICAgICAgICAjIEdldCBrZXlzIGFuZCB2YWx1ZXMgdXNpbmcgaXRlbXMoKQorICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94Lml0ZW1zLCBkb19rZXlzPVRydWUsIGRvX3ZhbHVlcz1UcnVlKQorCisgICAgZGVmIF9jaGVja19pdGVyYXRpb24oc2VsZiwgbWV0aG9kLCBkb19rZXlzLCBkb192YWx1ZXMsIHJlcGV0aXRpb25zPTEwKToKKyAgICAgICAgZm9yIHZhbHVlIGluIG1ldGhvZCgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJOb3QgZW1wdHkiKQorICAgICAgICBrZXlzLCB2YWx1ZXMgPSBbXSwgW10KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHJlcGV0aXRpb25zKToKKyAgICAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSBpKSkKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoc2VsZi5fdGVtcGxhdGUgJSBpKQorICAgICAgICBpZiBkb19rZXlzIGFuZCBub3QgZG9fdmFsdWVzOgorICAgICAgICAgICAgcmV0dXJuZWRfa2V5cyA9IGxpc3QobWV0aG9kKCkpCisgICAgICAgIGVsaWYgZG9fdmFsdWVzIGFuZCBub3QgZG9fa2V5czoKKyAgICAgICAgICAgIHJldHVybmVkX3ZhbHVlcyA9IGxpc3QobWV0aG9kKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm5lZF9rZXlzLCByZXR1cm5lZF92YWx1ZXMgPSBbXSwgW10KKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIG1ldGhvZCgpOgorICAgICAgICAgICAgICAgIHJldHVybmVkX2tleXMuYXBwZW5kKGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm5lZF92YWx1ZXMuYXBwZW5kKHZhbHVlKQorICAgICAgICBpZiBkb19rZXlzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIGxlbihyZXR1cm5lZF9rZXlzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGtleXMpLCBzZXQocmV0dXJuZWRfa2V5cykpCisgICAgICAgIGlmIGRvX3ZhbHVlczoKKyAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICAgICAgZm9yIHZhbHVlIGluIHJldHVybmVkX3ZhbHVlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWydmcm9tJ10sICdmb28nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQodmFsdWUuZ2V0X3BheWxvYWQoKSkgPCByZXBldGl0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLmdldF9wYXlsb2FkKCksIHJlcGV0aXRpb25zKSkKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZXMpLCBjb3VudCkKKworICAgIGRlZiB0ZXN0X2hhc19rZXkoc2VsZik6CisgICAgICAgICMgQ2hlY2sgZXhpc3RlbmNlIG9mIGtleXMgdXNpbmcgaGFzX2tleSgpCisgICAgICAgIHNlbGYuX3Rlc3RfaGFzX2tleV9vcl9jb250YWlucyhzZWxmLl9ib3guaGFzX2tleSkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICAjIENoZWNrIGV4aXN0ZW5jZSBvZiBrZXlzIHVzaW5nIF9fY29udGFpbnNfXygpCisgICAgICAgIHNlbGYuX3Rlc3RfaGFzX2tleV9vcl9jb250YWlucyhzZWxmLl9ib3guX19jb250YWluc19fKQorCisgICAgZGVmIF90ZXN0X2hhc19rZXlfb3JfY29udGFpbnMoc2VsZiwgbWV0aG9kKToKKyAgICAgICAgIyAoVXNlZCBieSB0ZXN0X2hhc19rZXkoKSBhbmQgdGVzdF9jb250YWlucygpLikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2QoJ2ZvbycpKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRob2Qoa2V5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKCdmb28nKSkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kKGtleTEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kKGtleTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGhvZCgnZm9vJykpCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2Qoa2V5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRob2Qoa2V5MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKCdmb28nKSkKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZShrZXkxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGhvZChrZXkxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2Qoa2V5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKCdmb28nKSkKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmLCByZXBldGl0aW9ucz0xMCk6CisgICAgICAgICMgR2V0IG1lc3NhZ2UgY291bnQKKyAgICAgICAga2V5cyA9IFtdCisgICAgICAgIGZvciBpIGluIHhyYW5nZShyZXBldGl0aW9ucyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCBpKQorICAgICAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIGkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgIGkgKyAxKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UocmVwZXRpdGlvbnMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgcmVwZXRpdGlvbnMgLSBpKQorICAgICAgICAgICAgc2VsZi5fYm94LnJlbW92ZShrZXlzW2ldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgcmVwZXRpdGlvbnMgLSBpIC0gMSkKKworICAgIGRlZiB0ZXN0X3NldF9pdGVtKHNlbGYpOgorICAgICAgICAjIE1vZGlmeSBtZXNzYWdlcyB1c2luZyBfX3NldGl0ZW1fXygpCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnKQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAxJykKKyAgICAgICAgc2VsZi5fYm94W2tleTBdID0gc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAwJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMCcpCisgICAgICAgIHNlbGYuX2JveFtrZXkxXSA9IHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDEnKQorICAgICAgICBzZWxmLl9ib3hba2V5MF0gPSBfc2FtcGxlX21lc3NhZ2UKKyAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKHNlbGYuX2JveFtrZXkwXSkKKyAgICAgICAgc2VsZi5fYm94W2tleTFdID0gc2VsZi5fYm94W2tleTBdCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3hba2V5MV0pCisgICAgICAgIHNlbGYuX2JveFtrZXkwXSA9IHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMCcpCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3hba2V5MV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHNlbGYuX2JveC5fX3NldGl0ZW1fXygnZm9vJywgJ2JhcicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hbJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAyKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZiwgaXRlcmF0aW9ucz0xMCk6CisgICAgICAgICMgUmVtb3ZlIGFsbCBtZXNzYWdlcyB1c2luZyBjbGVhcigpCisgICAgICAgIGtleXMgPSBbXQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaXRlcmF0aW9ucyk6CisgICAgICAgICAgICBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgaSkKKyAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleSksIHNlbGYuX3RlbXBsYXRlICUgaSkKKyAgICAgICAgc2VsZi5fYm94LmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMCkKKyAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpKQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICAjIEdldCBhbmQgcmVtb3ZlIGEgbWVzc2FnZSB1c2luZyBwb3AoKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5MCwgc2VsZi5fYm94KQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5MSwgc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5wb3Aoa2V5MCkuZ2V0X3BheWxvYWQoKSwgJzBcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa2V5MCwgc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEluKGtleTEsIHNlbGYuX2JveCkKKyAgICAgICAga2V5MiA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAyKQorICAgICAgICBzZWxmLmFzc2VydEluKGtleTIsIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3gucG9wKGtleTIpLmdldF9wYXlsb2FkKCksICcyXG4nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtleTIsIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXkxLCBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LnBvcChrZXkxKS5nZXRfcGF5bG9hZCgpLCAnMVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrZXkxLCBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDApCisKKyAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYsIGl0ZXJhdGlvbnM9MTApOgorICAgICAgICAjIEdldCBhbmQgcmVtb3ZlIGFuIGFyYml0cmFyeSAoa2V5LCBtZXNzYWdlKSB1c2luZyBwb3BpdGVtKCkKKyAgICAgICAga2V5cyA9IFtdCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMCk6CisgICAgICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgaSkpCisgICAgICAgIHNlZW4gPSBbXQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTApOgorICAgICAgICAgICAga2V5LCBtc2cgPSBzZWxmLl9ib3gucG9waXRlbSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwga2V5cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa2V5LCBzZWVuKQorICAgICAgICAgICAgc2Vlbi5hcHBlbmQoa2V5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQobXNnLmdldF9wYXlsb2FkKCkpLCBrZXlzLmluZGV4KGtleSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDApCisgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFtrZXldKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICAjIE1vZGlmeSBtdWx0aXBsZSBtZXNzYWdlcyB1c2luZyB1cGRhdGUoKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMScpCisgICAgICAgIGtleTIgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDInKQorICAgICAgICBzZWxmLl9ib3gudXBkYXRlKHtrZXkwOiBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkyOiBfc2FtcGxlX21lc3NhZ2V9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMScpCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3hba2V5Ml0pCisgICAgICAgIHNlbGYuX2JveC51cGRhdGUoWyhrZXkyLCBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDInKSwKKyAgICAgICAgICAgICAgICAgICAgKGtleTEsIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMScpLAorICAgICAgICAgICAgICAgICAgICAoa2V5MCwgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHNlbGYuX2JveC51cGRhdGUoeydmb28nOiAnYmFyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTA6IHNlbGYuX3RlbXBsYXRlICUgImNoYW5nZWQgMCJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICJjaGFuZ2VkIDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgImNoYW5nZWQgMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAiY2hhbmdlZCAyIikKKworICAgIGRlZiB0ZXN0X2ZsdXNoKHNlbGYpOgorICAgICAgICAjIFdyaXRlIGNoYW5nZXMgdG8gZGlzaworICAgICAgICBzZWxmLl90ZXN0X2ZsdXNoX29yX2Nsb3NlKHNlbGYuX2JveC5mbHVzaCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW1fYW5kX2ZsdXNoX3R3aWNlKHNlbGYpOgorICAgICAgICAjIFNlZSAjMTUwMzYuCisgICAgICAgIHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAgc2VsZi5fYm94LmZsdXNoKCkKKworICAgICAgICBzZWxmLl9ib3gucG9waXRlbSgpCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCisgICAgICAgIHNlbGYuX2JveC5wb3BpdGVtKCkKKyAgICAgICAgc2VsZi5fYm94LmZsdXNoKCkKKworICAgIGRlZiB0ZXN0X2xvY2tfdW5sb2NrKHNlbGYpOgorICAgICAgICAjIExvY2sgYW5kIHVubG9jayB0aGUgbWFpbGJveAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuX2dldF9sb2NrX3BhdGgoKSkpCisgICAgICAgIHNlbGYuX2JveC5sb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYuX2dldF9sb2NrX3BhdGgoKSkpCisgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuX2dldF9sb2NrX3BhdGgoKSkpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgIyBDbG9zZSBtYWlsYm94IGFuZCBmbHVzaCBjaGFuZ2VzIHRvIGRpc2sKKyAgICAgICAgc2VsZi5fdGVzdF9mbHVzaF9vcl9jbG9zZShzZWxmLl9ib3guY2xvc2UsIEZhbHNlKQorCisgICAgZGVmIF90ZXN0X2ZsdXNoX29yX2Nsb3NlKHNlbGYsIG1ldGhvZCwgc2hvdWxkX2NhbGxfY2xvc2UpOgorICAgICAgICBjb250ZW50cyA9IFtzZWxmLl90ZW1wbGF0ZSAlIGkgZm9yIGkgaW4geHJhbmdlKDMpXQorICAgICAgICBzZWxmLl9ib3guYWRkKGNvbnRlbnRzWzBdKQorICAgICAgICBzZWxmLl9ib3guYWRkKGNvbnRlbnRzWzFdKQorICAgICAgICBzZWxmLl9ib3guYWRkKGNvbnRlbnRzWzJdKQorICAgICAgICBvbGRib3ggPSBzZWxmLl9ib3gKKyAgICAgICAgbWV0aG9kKCkKKyAgICAgICAgaWYgc2hvdWxkX2NhbGxfY2xvc2U6CisgICAgICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgpCisgICAgICAgIGtleXMgPSBzZWxmLl9ib3gua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCAzKQorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleSksIGNvbnRlbnRzKQorICAgICAgICBvbGRib3guY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZHVtcF9tZXNzYWdlKHNlbGYpOgorICAgICAgICAjIFdyaXRlIG1lc3NhZ2UgcmVwcmVzZW50YXRpb25zIHRvIGRpc2sKKyAgICAgICAgZm9yIGlucHV0IGluIChlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKF9zYW1wbGVfbWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgX3NhbXBsZV9tZXNzYWdlLCBTdHJpbmdJTy5TdHJpbmdJTyhfc2FtcGxlX21lc3NhZ2UpKToKKyAgICAgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHNlbGYuX2JveC5fZHVtcF9tZXNzYWdlKGlucHV0LCBvdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2FtcGxlX21lc3NhZ2UucmVwbGFjZSgnXG4nLCBvcy5saW5lc2VwKSkKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogc2VsZi5fYm94Ll9kdW1wX21lc3NhZ2UoTm9uZSwgb3V0cHV0KSkKKworICAgIGRlZiBfZ2V0X2xvY2tfcGF0aChzZWxmKToKKyAgICAgICAgIyBSZXR1cm4gdGhlIHBhdGggb2YgdGhlIGRvdCBsb2NrIGZpbGUuIE1heSBiZSBvdmVycmlkZGVuLgorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aCArICcubG9jaycKKworCitjbGFzcyBUZXN0TWFpbGJveFN1cGVyY2xhc3MoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25vdGltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhbGwgTWFpbGJveCBtZXRob2RzIHJhaXNlIE5vdEltcGxlbWVudGVkRXhjZXB0aW9uLgorICAgICAgICBib3ggPSBtYWlsYm94Lk1haWxib3goJ3BhdGgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5hZGQoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5yZW1vdmUoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2RlbGl0ZW1fXygnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LmRpc2NhcmQoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX3NldGl0ZW1fXygnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5pdGVya2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Lml0ZXJ2YWx1ZXMoKS5uZXh0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Ll9faXRlcl9fKCkubmV4dCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC52YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlcml0ZW1zKCkubmV4dCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5pdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5nZXQoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2dldGl0ZW1fXygnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LmdldF9tZXNzYWdlKCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guZ2V0X3N0cmluZygnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LmdldF9maWxlKCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaGFzX2tleSgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Ll9fY29udGFpbnNfXygnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Ll9fbGVuX18oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guY2xlYXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gucG9wKCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gucG9waXRlbSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC51cGRhdGUoKCgnJywgJycpLCkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5mbHVzaCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5sb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LnVubG9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5jbG9zZSgpKQorCisKK2NsYXNzIFRlc3RNYWlsZGlyKFRlc3RNYWlsYm94LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBfZmFjdG9yeSA9IGxhbWJkYSBzZWxmLCBwYXRoLCBmYWN0b3J5PU5vbmU6IG1haWxib3guTWFpbGRpcihwYXRoLCBmYWN0b3J5KQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBUZXN0TWFpbGJveC5zZXRVcChzZWxmKQorICAgICAgICBpZiBvcy5uYW1lIGluICgnbnQnLCAnb3MyJykgb3Igc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nOgorICAgICAgICAgICAgc2VsZi5fYm94LmNvbG9uID0gJyEnCisKKyAgICBkZWYgdGVzdF9hZGRfTU0oc2VsZik6CisgICAgICAgICMgQWRkIGEgTWFpbGRpck1lc3NhZ2UgaW5zdGFuY2UKKyAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIG1zZy5zZXRfc3ViZGlyKCdjdXInKQorICAgICAgICBtc2cuc2V0X2luZm8oJ2ZvbycpCisgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQobXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICdjdXInLCAnJXMlc2ZvbycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXksIHNlbGYuX2JveC5jb2xvbikpKSkKKworICAgIGRlZiB0ZXN0X2dldF9NTShzZWxmKToKKyAgICAgICAgIyBHZXQgYSBNYWlsZGlyTWVzc2FnZSBpbnN0YW5jZQorICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgbXNnLnNldF9zdWJkaXIoJ2N1cicpCisgICAgICAgIG1zZy5zZXRfZmxhZ3MoJ1JGJykKKyAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChtc2cpCisgICAgICAgIG1zZ19yZXR1cm5lZCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2dfcmV0dXJuZWQsIG1haWxib3guTWFpbGRpck1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9zdWJkaXIoKSwgJ2N1cicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9mbGFncygpLCAnRlInKQorCisgICAgZGVmIHRlc3Rfc2V0X01NKHNlbGYpOgorICAgICAgICAjIFNldCB3aXRoIGEgTWFpbGRpck1lc3NhZ2UgaW5zdGFuY2UKKyAgICAgICAgbXNnMCA9IG1haWxib3guTWFpbGRpck1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBtc2cwLnNldF9mbGFncygnVFAnKQorICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKG1zZzApCisgICAgICAgIG1zZ19yZXR1cm5lZCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9zdWJkaXIoKSwgJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9mbGFncygpLCAnUFQnKQorICAgICAgICBtc2cxID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIHNlbGYuX2JveFtrZXldID0gbXNnMQorICAgICAgICBtc2dfcmV0dXJuZWQgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfZmxhZ3MoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9wYXlsb2FkKCksICcxXG4nKQorICAgICAgICBtc2cyID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDIpCisgICAgICAgIG1zZzIuc2V0X2luZm8oJzIsUycpCisgICAgICAgIHNlbGYuX2JveFtrZXldID0gbXNnMgorICAgICAgICBzZWxmLl9ib3hba2V5XSA9IHNlbGYuX3RlbXBsYXRlICUgMworICAgICAgICBtc2dfcmV0dXJuZWQgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfZmxhZ3MoKSwgJ1MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfcGF5bG9hZCgpLCAnM1xuJykKKworICAgIGRlZiB0ZXN0X2NvbnNpc3RlbnRfZmFjdG9yeShzZWxmKToKKyAgICAgICAgIyBBZGQgYSBtZXNzYWdlLgorICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgbXNnLnNldF9zdWJkaXIoJ2N1cicpCisgICAgICAgIG1zZy5zZXRfZmxhZ3MoJ1JGJykKKyAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChtc2cpCisKKyAgICAgICAgIyBDcmVhdGUgbmV3IG1haWxib3ggd2l0aAorICAgICAgICBjbGFzcyBGYWtlTWVzc2FnZShtYWlsYm94Lk1haWxkaXJNZXNzYWdlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYm94ID0gbWFpbGJveC5NYWlsZGlyKHNlbGYuX3BhdGgsIGZhY3Rvcnk9RmFrZU1lc3NhZ2UpCisgICAgICAgIGJveC5jb2xvbiA9IHNlbGYuX2JveC5jb2xvbgorICAgICAgICBtc2cyID0gYm94LmdldF9tZXNzYWdlKGtleSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZzIsIEZha2VNZXNzYWdlKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV9uZXcoc2VsZik6CisgICAgICAgICMgSW5pdGlhbGl6ZSBhIG5vbi1leGlzdGVudCBtYWlsYm94CisgICAgICAgIHNlbGYudGVhckRvd24oKQorICAgICAgICBzZWxmLl9ib3ggPSBtYWlsYm94Lk1haWxkaXIoc2VsZi5fcGF0aCkKKyAgICAgICAgc2VsZi5fY2hlY2tfYmFzaWNzKGZhY3Rvcnk9cmZjODIyLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgsIGZhY3Rvcnk9Tm9uZSkKKyAgICAgICAgc2VsZi5fY2hlY2tfYmFzaWNzKCkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgICMgSW5pdGlhbGl6ZSBhbiBleGlzdGluZyBtYWlsYm94CisgICAgICAgIHNlbGYudGVhckRvd24oKQorICAgICAgICBmb3Igc3ViZGlyIGluICcnLCAndG1wJywgJ25ldycsICdjdXInOgorICAgICAgICAgICAgb3MubWtkaXIob3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3ViZGlyKSkpCisgICAgICAgIHNlbGYuX2JveCA9IG1haWxib3guTWFpbGRpcihzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLl9jaGVja19iYXNpY3MoZmFjdG9yeT1yZmM4MjIuTWVzc2FnZSkKKyAgICAgICAgc2VsZi5fYm94ID0gbWFpbGJveC5NYWlsZGlyKHNlbGYuX3BhdGgsIGZhY3Rvcnk9Tm9uZSkKKyAgICAgICAgc2VsZi5fY2hlY2tfYmFzaWNzKCkKKworICAgIGRlZiBfY2hlY2tfYmFzaWNzKHNlbGYsIGZhY3Rvcnk9Tm9uZSk6CisgICAgICAgICMgKFVzZWQgYnkgdGVzdF9vcGVuX25ldygpIGFuZCB0ZXN0X29wZW5fZXhpc3RpbmcoKS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll9wYXRoLCBvcy5wYXRoLmFic3BhdGgoc2VsZi5fcGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll9mYWN0b3J5LCBmYWN0b3J5KQorICAgICAgICBmb3Igc3ViZGlyIGluICcnLCAndG1wJywgJ25ldycsICdjdXInOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJkaXIpCisgICAgICAgICAgICBtb2RlID0gb3Muc3RhdChwYXRoKVtzdGF0LlNUX01PREVdCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdC5TX0lTRElSKG1vZGUpLCAiTm90IGEgZGlyZWN0b3J5OiAnJXMnIiAlIHBhdGgpCisKKyAgICBkZWYgdGVzdF9saXN0X2ZvbGRlcnMoc2VsZik6CisgICAgICAgICMgTGlzdCBmb2xkZXJzCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCdvbmUnKQorICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcigndHdvJykKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3RocmVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoKCdvbmUnLCAndHdvJywgJ3RocmVlJykpKQorCisgICAgZGVmIHRlc3RfZ2V0X2ZvbGRlcihzZWxmKToKKyAgICAgICAgIyBPcGVuIGZvbGRlcnMKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ2Zvby5iYXInKQorICAgICAgICBmb2xkZXIwID0gc2VsZi5fYm94LmdldF9mb2xkZXIoJ2Zvby5iYXInKQorICAgICAgICBmb2xkZXIwLmFkZChzZWxmLl90ZW1wbGF0ZSAlICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJy5mb28uYmFyJykpKQorICAgICAgICBmb2xkZXIxID0gc2VsZi5fYm94LmdldF9mb2xkZXIoJ2Zvby5iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbGRlcjEuZ2V0X3N0cmluZyhmb2xkZXIxLmtleXMoKVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKKworICAgIGRlZiB0ZXN0X2FkZF9hbmRfcmVtb3ZlX2ZvbGRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIGZvbGRlcnMKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ29uZScpCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0d28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCBzZXQoKCdvbmUnLCAndHdvJykpKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlX2ZvbGRlcignb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywpKSkKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3RocmVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywgJ3RocmVlJykpKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlX2ZvbGRlcigndGhyZWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCBzZXQoKCd0d28nLCkpKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlX2ZvbGRlcigndHdvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCksIFtdKQorCisgICAgZGVmIHRlc3RfY2xlYW4oc2VsZik6CisgICAgICAgICMgUmVtb3ZlIG9sZCBmaWxlcyBmcm9tICd0bXAnCisgICAgICAgIGZvb19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICd0bXAnLCAnZm9vJykKKyAgICAgICAgYmFyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ3RtcCcsICdiYXInKQorICAgICAgICB3aXRoIG9wZW4oZm9vX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIkAiKQorICAgICAgICB3aXRoIG9wZW4oYmFyX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIkAiKQorICAgICAgICBzZWxmLl9ib3guY2xlYW4oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm9vX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYmFyX3BhdGgpKQorICAgICAgICBmb29fc3RhdCA9IG9zLnN0YXQoZm9vX3BhdGgpCisgICAgICAgIG9zLnV0aW1lKGZvb19wYXRoLCAodGltZS50aW1lKCkgLSAxMjk2MDAgLSAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb19zdGF0LnN0X210aW1lKSkKKyAgICAgICAgc2VsZi5fYm94LmNsZWFuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmb29fcGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhiYXJfcGF0aCkpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdG1wKHNlbGYsIHJlcGV0aXRpb25zPTEwKToKKyAgICAgICAgIyBDcmVhdGUgZmlsZXMgaW4gdG1wIGRpcmVjdG9yeQorICAgICAgICBob3N0bmFtZSA9IHNvY2tldC5nZXRob3N0bmFtZSgpCisgICAgICAgIGlmICcvJyBpbiBob3N0bmFtZToKKyAgICAgICAgICAgIGhvc3RuYW1lID0gaG9zdG5hbWUucmVwbGFjZSgnLycsIHInXDA1NycpCisgICAgICAgIGlmICc6JyBpbiBob3N0bmFtZToKKyAgICAgICAgICAgIGhvc3RuYW1lID0gaG9zdG5hbWUucmVwbGFjZSgnOicsIHInXDA3MicpCisgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgIHBhdHRlcm4gPSByZS5jb21waWxlKHIiKD9QPHRpbWU+XGQrKVwuTSg/UDxNPlxkezEsNn0pUCg/UDxQPlxkKykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUSg/UDxRPlxkKylcLig/UDxob3N0PlteOi9dKykiKQorICAgICAgICBwcmV2aW91c19ncm91cHMgPSBOb25lCisgICAgICAgIGZvciB4IGluIHhyYW5nZShyZXBldGl0aW9ucyk6CisgICAgICAgICAgICB0bXBfZmlsZSA9IHNlbGYuX2JveC5fY3JlYXRlX3RtcCgpCisgICAgICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdCh0bXBfZmlsZS5uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkLCBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRtcCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGUgaW4gd3JvbmcgbG9jYXRpb246ICclcyciICUgaGVhZCkKKyAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5tYXRjaCh0YWlsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoIGlzIG5vdCBOb25lLCAiSW52YWxpZCBmaWxlIG5hbWU6ICclcyciICUgdGFpbCkKKyAgICAgICAgICAgIGdyb3VwcyA9IG1hdGNoLmdyb3VwcygpCisgICAgICAgICAgICBpZiBwcmV2aW91c19ncm91cHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoaW50KGdyb3Vwc1swXSksIGludChwcmV2aW91c19ncm91cHNbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uLW1vbm90b25pYyBzZWNvbmRzOiAnJXMnIGJlZm9yZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2aW91c19ncm91cHNbMF0sIGdyb3Vwc1swXSkpCisgICAgICAgICAgICAgICAgaWYgaW50KGdyb3Vwc1swXSkgPT0gaW50KHByZXZpb3VzX2dyb3Vwc1swXSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGludChncm91cHNbMV0pLCBpbnQocHJldmlvdXNfZ3JvdXBzWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbi1tb25vdG9uaWMgbWlsbGlzZWNvbmRzOiAnJXMnIGJlZm9yZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2aW91c19ncm91cHNbMV0sIGdyb3Vwc1sxXSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChncm91cHNbMl0pID09IHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgSUQgbWlzbWF0Y2g6ICclcycgc2hvdWxkIGJlICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3Vwc1syXSwgcGlkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KGdyb3Vwc1szXSkgPT0gaW50KHByZXZpb3VzX2dyb3Vwc1szXSkgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uLXNlcXVlbnRpYWwgY291bnRlcjogJyVzJyBiZWZvcmUgJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldmlvdXNfZ3JvdXBzWzNdLCBncm91cHNbM10pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShncm91cHNbNF0gPT0gaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIb3N0IG5hbWUgbWlzbWF0Y2g6ICclcycgc2hvdWxkIGJlICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3Vwc1s0XSwgaG9zdG5hbWUpKQorICAgICAgICAgICAgcHJldmlvdXNfZ3JvdXBzID0gZ3JvdXBzCisgICAgICAgICAgICB0bXBfZmlsZS53cml0ZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICB0bXBfZmlsZS5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodG1wX2ZpbGUucmVhZCgpID09IF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgIHRtcF9maWxlLmNsb3NlKCkKKyAgICAgICAgZmlsZV9jb3VudCA9IGxlbihvcy5saXN0ZGlyKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAidG1wIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZV9jb3VudCA9PSByZXBldGl0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICJXcm9uZyBmaWxlIGNvdW50OiAnJXMnIHNob3VsZCBiZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAoZmlsZV9jb3VudCwgcmVwZXRpdGlvbnMpKQorCisgICAgZGVmIHRlc3RfcmVmcmVzaChzZWxmKToKKyAgICAgICAgIyBVcGRhdGUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHt9KQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX3RvYywge30pCisgICAgICAgIHNlbGYuX2JveC5fcmVmcmVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHtrZXkwOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5MTogb3MucGF0aC5qb2luKCduZXcnLCBrZXkxKX0pCisgICAgICAgIGtleTIgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX3RvYywge2tleTA6IG9zLnBhdGguam9pbignbmV3Jywga2V5MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkxOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTEpfSkKKyAgICAgICAgc2VsZi5fYm94Ll9yZWZyZXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX3RvYywge2tleTA6IG9zLnBhdGguam9pbignbmV3Jywga2V5MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkxOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Mjogb3MucGF0aC5qb2luKCduZXcnLCBrZXkyKX0pCisKKyAgICBkZWYgdGVzdF9yZWZyZXNoX2FmdGVyX3NhZmV0eV9wZXJpb2Qoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEzMjU0OiBDYWxsIF9yZWZyZXNoIGFmdGVyIHRoZSAiZmlsZSBzeXN0ZW0gc2FmZXR5CisgICAgICAgICMgcGVyaW9kIiBvZiAyIHNlY29uZHMgaGFzIHBhc3NlZDsgX3RvYyBzaG91bGQgc3RpbGwgYmUKKyAgICAgICAgIyB1cGRhdGVkIGJlY2F1c2UgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byBfcmVmcmVzaC4KKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCisKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7fSkKKworICAgICAgICAjIEVtdWxhdGUgc2xlZXBpbmcuIEluc3RlYWQgb2Ygc2xlZXBpbmcgZm9yIDIgc2Vjb25kcywgdXNlIHRoZQorICAgICAgICAjIHNrZXcgZmFjdG9yIHRvIG1ha2UgX3JlZnJlc2ggdGhpbmsgdGhhdCB0aGUgZmlsZXN5c3RlbQorICAgICAgICAjIHNhZmV0eSBwZXJpb2QgaGFzIHBhc3NlZCBhbmQgcmUtcmVhZGluZyB0aGUgX3RvYyBpcyBvbmx5CisgICAgICAgICMgcmVxdWlyZWQgaWYgbXRpbWVzIGRpZmZlci4KKyAgICAgICAgc2VsZi5fYm94Ll9za2V3ZmFjdG9yID0gLTMKKworICAgICAgICBzZWxmLl9ib3guX3JlZnJlc2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZWxmLl9ib3guX3RvYy5rZXlzKCkpLCBzb3J0ZWQoW2tleTAsIGtleTFdKSkKKworICAgIGRlZiB0ZXN0X2xvb2t1cChzZWxmKToKKyAgICAgICAgIyBMb29rIHVwIG1lc3NhZ2Ugc3VicGF0aHMgaW4gdGhlIFRPQworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3guX2xvb2t1cCgnZm9vJykpCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX2xvb2t1cChrZXkwKSwgb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKSkKKyAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnbmV3Jywga2V5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHtrZXkwOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTApfSkKKyAgICAgICAgIyBCZSBzdXJlIHRoYXQgdGhlIFRPQyBpcyByZWFkIGJhY2sgZnJvbSBkaXNrIChzZWUgaXNzdWUgIzY4OTYKKyAgICAgICAgIyBhYm91dCBiYWQgbXRpbWUgYmVoYXZpb3VyIG9uIHNvbWUgc3lzdGVtcykuCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveC5fbG9va3VwKGtleTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7fSkKKworICAgIGRlZiB0ZXN0X2xvY2tfdW5sb2NrKHNlbGYpOgorICAgICAgICAjIExvY2sgYW5kIHVubG9jayB0aGUgbWFpbGJveC4gRm9yIE1haWxkaXIsIHRoaXMgZG9lcyBub3RoaW5nLgorICAgICAgICBzZWxmLl9ib3gubG9jaygpCisgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQorCisgICAgZGVmIHRlc3RfZm9sZGVyIChzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBidWcgIzE1Njk3OTA6IHZlcmlmeSB0aGF0IGZvbGRlcnMgcmV0dXJuZWQgYnkgLmdldF9mb2xkZXIoKQorICAgICAgICAjIHVzZSB0aGUgc2FtZSBmYWN0b3J5IGZ1bmN0aW9uLgorICAgICAgICBkZWYgZHVtbXlfZmFjdG9yeSAocyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgsIGZhY3Rvcnk9ZHVtbXlfZmFjdG9yeSkKKyAgICAgICAgZm9sZGVyID0gYm94LmFkZF9mb2xkZXIoJ2ZvbGRlcjEnKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvbGRlci5fZmFjdG9yeSwgZHVtbXlfZmFjdG9yeSkKKworICAgICAgICBmb2xkZXIxX2FsaWFzID0gYm94LmdldF9mb2xkZXIoJ2ZvbGRlcjEnKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvbGRlcjFfYWxpYXMuX2ZhY3RvcnksIGR1bW15X2ZhY3RvcnkpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcnlfaW5fZm9sZGVyIChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgbWFpbGJveGVzIHN0aWxsIHdvcmsgaWYgdGhlcmUncyBhIHN0cmF5IGV4dHJhIGRpcmVjdG9yeQorICAgICAgICAjIGluIGEgZm9sZGVyLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBzZWxmLl9ib3guYWRkKG1haWxib3guTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpKQorCisgICAgICAgICMgQ3JlYXRlIGEgc3RyYXkgZGlyZWN0b3J5CisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnY3VyJywgJ3N0cmF5LWRpcicpKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBsb29waW5nIHN0aWxsIHdvcmtzIHdpdGggdGhlIGRpcmVjdG9yeSBwcmVzZW50LgorICAgICAgICBmb3IgbXNnIGluIHNlbGYuX2JveDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2ZpbGVfcGVybWlzc2lvbnMoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgbWVzc2FnZSBmaWxlcyBhcmUgY3JlYXRlZCB3aXRob3V0IGV4ZWN1dGUgcGVybWlzc2lvbnMKKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJzdGF0Iikgb3Igbm90IGhhc2F0dHIob3MsICJ1bWFzayIpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBvcmlnX3VtYXNrID0gb3MudW1hc2soMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChtc2cpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bWFzayhvcmlnX3VtYXNrKQorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHNlbGYuX2JveC5fbG9va3VwKGtleSkpCisgICAgICAgIG1vZGUgPSBvcy5zdGF0KHBhdGgpLnN0X21vZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RlICYgMDExMSwgMCkKKworICAgIGRlZiB0ZXN0X2ZvbGRlcl9maWxlX3Blcm1zKHNlbGYpOgorICAgICAgICAjIEZyb20gYnVnICMzMjI4LCB3ZSB3YW50IHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlIGNyZWF0ZWQgaW5zaWRlIGEgTWFpbGRpcgorICAgICAgICAjIHN1YmZvbGRlciBpc24ndCBtYXJrZWQgYXMgZXhlY3V0YWJsZS4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJzdGF0Iikgb3Igbm90IGhhc2F0dHIob3MsICJ1bWFzayIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3JpZ191bWFzayA9IG9zLnVtYXNrKDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YmZvbGRlciA9IHNlbGYuX2JveC5hZGRfZm9sZGVyKCdzdWJmb2xkZXInKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW1hc2sob3JpZ191bWFzaykKKworICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHN1YmZvbGRlci5fcGF0aCwgJ21haWxkaXJmb2xkZXInKQorICAgICAgICBzdCA9IG9zLnN0YXQocGF0aCkKKyAgICAgICAgcGVybXMgPSBzdC5zdF9tb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKHBlcm1zICYgMDExMSkpICMgRXhlY3V0ZSBiaXRzIHNob3VsZCBhbGwgYmUgb2ZmLgorCisgICAgZGVmIHRlc3RfcmVyZWFkKHNlbGYpOgorICAgICAgICAjIERvIGFuIGluaXRpYWwgdW5jb25kaXRpb25hbCByZWZyZXNoCisgICAgICAgIHNlbGYuX2JveC5fcmVmcmVzaCgpCisKKyAgICAgICAgIyBQdXQgdGhlIGxhc3QgbW9kaWZpZWQgdGltZXMgbW9yZSB0aGFuIHR3byBzZWNvbmRzIGludG8gdGhlIHBhc3QKKyAgICAgICAgIyAoYmVjYXVzZSBtdGltZSBtYXkgaGF2ZSBvbmx5IGEgdHdvIHNlY29uZCBncmFudWxhcml0eSkuCisgICAgICAgIGZvciBzdWJkaXIgaW4gKCdjdXInLCAnbmV3Jyk6CisgICAgICAgICAgICBvcy51dGltZShvcy5wYXRoLmpvaW4oc2VsZi5fYm94Ll9wYXRoLCBzdWJkaXIpLAorICAgICAgICAgICAgICAgICAgICAgKHRpbWUudGltZSgpLTUsKSoyKQorCisgICAgICAgICMgQmVjYXVzZSBtdGltZSBoYXMgYSB0d28gc2Vjb25kIGdyYW51bGFyaXR5IGluIHdvcnN0IGNhc2UgKEZBVCksIGEKKyAgICAgICAgIyByZWZyZXNoIGlzIGRvbmUgdW5jb25kaXRpb25hbGx5IGlmIGNhbGxlZCBmb3Igd2l0aGluCisgICAgICAgICMgdHdvLXNlY29uZC1wbHVzLWEtYml0IG9mIHRoZSBsYXN0IG9uZSwganVzdCBpbiBjYXNlIHRoZSBtYm94IGhhcworICAgICAgICAjIGNoYW5nZWQ7IHNvIG5vdyB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoYXQgaW50ZXJ2YWwgdG8gZXhwaXJlLgorICAgICAgICAjCisgICAgICAgICMgQmVjYXVzZSB0aGlzIGlzIGEgdGVzdCwgZW11bGF0ZSBzbGVlcGluZy4gSW5zdGVhZCBvZgorICAgICAgICAjIHNsZWVwaW5nIGZvciAyIHNlY29uZHMsIHVzZSB0aGUgc2tldyBmYWN0b3IgdG8gbWFrZSBfcmVmcmVzaAorICAgICAgICAjIHRoaW5rIHRoYXQgMiBzZWNvbmRzIGhhdmUgcGFzc2VkIGFuZCByZS1yZWFkaW5nIHRoZSBfdG9jIGlzCisgICAgICAgICMgb25seSByZXF1aXJlZCBpZiBtdGltZXMgZGlmZmVyLgorICAgICAgICBzZWxmLl9ib3guX3NrZXdmYWN0b3IgPSAtMworCisgICAgICAgICMgUmUtcmVhZGluZyBjYXVzZXMgdGhlIC5fdG9jIGF0dHJpYnV0ZSB0byBiZSBhc3NpZ25lZCBhIG5ldyBkaWN0aW9uYXJ5CisgICAgICAgICMgb2JqZWN0LCBzbyB3ZSdsbCBjaGVjayB0aGF0IHRoZSAuX3RvYyBhdHRyaWJ1dGUgaXNuJ3QgYSBkaWZmZXJlbnQKKyAgICAgICAgIyBvYmplY3QuCisgICAgICAgIG9yaWdfdG9jID0gc2VsZi5fYm94Ll90b2MKKyAgICAgICAgZGVmIHJlZnJlc2hlZCgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2JveC5fdG9jIGlzIG5vdCBvcmlnX3RvYworCisgICAgICAgIHNlbGYuX2JveC5fcmVmcmVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVmcmVzaGVkKCkpCisKKyAgICAgICAgIyBOb3csIHdyaXRlIHNvbWV0aGluZyBpbnRvIGN1ciBhbmQgcmVtb3ZlIGl0LiAgVGhpcyBjaGFuZ2VzCisgICAgICAgICMgdGhlIG10aW1lIGFuZCBzaG91bGQgY2F1c2UgYSByZS1yZWFkLiBOb3RlIHRoYXQgInNsZWVwCisgICAgICAgICMgZW11bGF0aW9uIiBpcyBzdGlsbCBpbiBlZmZlY3QsIGFzIHNrZXdmYWN0b3IgaXMgLTMuCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICdjdXInLCAnc3RyYXktZmlsZScpCisgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAndycpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCisgICAgICAgIHNlbGYuX2JveC5fcmVmcmVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWZyZXNoZWQoKSkKKworCitjbGFzcyBfVGVzdFNpbmdsZUZpbGUoVGVzdE1haWxib3gpOgorICAgICcnJ0NvbW1vbiB0ZXN0cyBmb3Igc2luZ2xlLWZpbGUgbWFpbGJveGVzJycnCisKKyAgICBkZWYgdGVzdF9hZGRfZG9lc250X3Jld3JpdGUoc2VsZik6CisgICAgICAgICMgV2hlbiBvbmx5IGFkZGluZyBtZXNzYWdlcywgZmx1c2goKSBzaG91bGQgbm90IHJld3JpdGUgdGhlCisgICAgICAgICMgbWFpbGJveCBmaWxlLiBTZWUgaXNzdWUgIzk1NTkuCisKKyAgICAgICAgIyBJbm9kZSBudW1iZXIgY2hhbmdlcyBpZiB0aGUgY29udGVudHMgYXJlIHdyaXR0ZW4gdG8gYW5vdGhlcgorICAgICAgICAjIGZpbGUgd2hpY2ggaXMgdGhlbiByZW5hbWVkIG92ZXIgdGhlIG9yaWdpbmFsIGZpbGUuIFNvIHdlCisgICAgICAgICMgbXVzdCBjaGVjayB0aGF0IHRoZSBpbm9kZSBudW1iZXIgZG9lc24ndCBjaGFuZ2UuCisgICAgICAgIGlub2RlX2JlZm9yZSA9IG9zLnN0YXQoc2VsZi5fcGF0aCkuc3RfaW5vCisKKyAgICAgICAgc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCisKKyAgICAgICAgaW5vZGVfYWZ0ZXIgPSBvcy5zdGF0KHNlbGYuX3BhdGgpLnN0X2lubworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlub2RlX2JlZm9yZSwgaW5vZGVfYWZ0ZXIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIG1lc3NhZ2Ugd2FzIHJlYWxseSBhZGRlZAorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDEpCisKKyAgICBkZWYgdGVzdF9wZXJtaXNzaW9uc19hZnRlcl9mbHVzaChzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzUzNDYKKworICAgICAgICAjIE1ha2UgdGhlIG1haWxib3ggd29ybGQgd3JpdGFibGUuIEl0J3MgdW5saWtlbHkgdGhhdCB0aGUgbmV3CisgICAgICAgICMgbWFpbGJveCBmaWxlIHdvdWxkIGhhdmUgdGhlc2UgcGVybWlzc2lvbnMgYWZ0ZXIgZmx1c2goKSwKKyAgICAgICAgIyBiZWNhdXNlIHVtYXNrIHVzdWFsbHkgcHJldmVudHMgaXQuCisgICAgICAgIG1vZGUgPSBvcy5zdGF0KHNlbGYuX3BhdGgpLnN0X21vZGUgfCAwbzY2NgorICAgICAgICBvcy5jaG1vZChzZWxmLl9wYXRoLCBtb2RlKQorCisgICAgICAgIHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBpID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgICMgTmVlZCB0byByZW1vdmUgb25lIG1lc3NhZ2UgdG8gbWFrZSBmbHVzaCgpIGNyZWF0ZSBhIG5ldyBmaWxlCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoaSkKKyAgICAgICAgc2VsZi5fYm94LmZsdXNoKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQoc2VsZi5fcGF0aCkuc3RfbW9kZSwgbW9kZSkKKworCitjbGFzcyBfVGVzdE1ib3hNTURGKF9UZXN0U2luZ2xlRmlsZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCisgICAgICAgIHNlbGYuX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLl9wYXRoKQorICAgICAgICBmb3IgbG9ja19yZW1uYW50IGluIGdsb2IuZ2xvYihzZWxmLl9wYXRoICsgJy4qJyk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKGxvY2tfcmVtbmFudCkKKworICAgIGRlZiB0ZXN0X2FkZF9mcm9tX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBBZGQgYSBzdHJpbmcgc3RhcnRpbmcgd2l0aCAnRnJvbSAnIHRvIHRoZSBtYWlsYm94CisgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQoJ0Zyb20gZm9vQGJhciBibGFoXG5Gcm9tOiBmb29cblxuMFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3hba2V5XS5nZXRfZnJvbSgpLCAnZm9vQGJhciBibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3hba2V5XS5nZXRfcGF5bG9hZCgpLCAnMFxuJykKKworICAgIGRlZiB0ZXN0X2FkZF9tYm94X29yX21tZGZfbWVzc2FnZShzZWxmKToKKyAgICAgICAgIyBBZGQgYW4gbWJveE1lc3NhZ2Ugb3IgTU1ERk1lc3NhZ2UKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBtc2cgPSBjbGFzc18oJ0Zyb20gZm9vQGJhciBibGFoXG5Gcm9tOiBmb29cblxuMFxuJykKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQobXNnKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jbG9zZV9vcGVuKHNlbGYpOgorICAgICAgICAjIE9wZW4gYW5kIGluc3BlY3QgcHJldmlvdXNseS1jcmVhdGVkIG1haWxib3gKKyAgICAgICAgdmFsdWVzID0gW3NlbGYuX3RlbXBsYXRlICUgaSBmb3IgaSBpbiB4cmFuZ2UoMyldCisgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBzZWxmLl9ib3guYWRkKHZhbHVlKQorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICBtdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUoc2VsZi5fcGF0aCkKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAzKQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2JveC5pdGVya2V5cygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpLCB2YWx1ZXMpCisgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWUsIG9zLnBhdGguZ2V0bXRpbWUoc2VsZi5fcGF0aCkpCisKKyAgICBkZWYgdGVzdF9hZGRfYW5kX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeWluZyB0aGF0IGNsb3NpbmcgYSBtYWlsYm94IGRvZXNuJ3QgY2hhbmdlIGFkZGVkIGl0ZW1zCisgICAgICAgIHNlbGYuX2JveC5hZGQoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMyk6CisgICAgICAgICAgICBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgaSkKKyAgICAgICAgc2VsZi5fYm94LmFkZChfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHNlbGYuX2JveC5fZmlsZS5mbHVzaCgpCisgICAgICAgIHNlbGYuX2JveC5fZmlsZS5zZWVrKDApCisgICAgICAgIGNvbnRlbnRzID0gc2VsZi5fYm94Ll9maWxlLnJlYWQoKQorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsIGYucmVhZCgpKQorICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAiVGVzdCBuZWVkcyBmb3JrKCkuIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKSwgIlRlc3QgbmVlZHMgc29ja2V0cGFpcigpLiIpCisgICAgZGVmIHRlc3RfbG9ja19jb25mbGljdChzZWxmKToKKyAgICAgICAgIyBGb3JrIG9mZiBhIGNoaWxkIHByb2Nlc3MgdGhhdCB3aWxsIGxvY2sgdGhlIG1haWxib3ggdGVtcG9yYXJpbHksCisgICAgICAgICMgdW5sb2NrIGl0IGFuZCBleGl0LgorICAgICAgICBjLCBwID0gc29ja2V0LnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYy5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuY2xvc2UpCisKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBjaGlsZAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgbG9jayB0aGUgbWFpbGJveCwgYW5kIHNpZ25hbCB0aGUgcGFyZW50IGl0IGNhbiBwcm9jZWVkCisgICAgICAgICAgICAgICAgc2VsZi5fYm94LmxvY2soKQorICAgICAgICAgICAgICAgIGMuc2VuZChiJ2MnKQorCisgICAgICAgICAgICAgICAgIyB3YWl0IHVudGlsIHRoZSBwYXJlbnQgaXMgZG9uZSwgYW5kIHVubG9jayB0aGUgbWFpbGJveAorICAgICAgICAgICAgICAgIGMucmVjdigxKQorICAgICAgICAgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorCisgICAgICAgICMgSW4gdGhlIHBhcmVudCwgd2FpdCB1bnRpbCB0aGUgY2hpbGQgc2lnbmFscyBpdCBsb2NrZWQgdGhlIG1haWxib3guCisgICAgICAgIHAucmVjdigxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtYWlsYm94LkV4dGVybmFsQ2xhc2hFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2JveC5sb2NrKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBTaWduYWwgdGhlIGNoaWxkIGl0IGNhbiBub3cgcmVsZWFzZSB0aGUgbG9jayBhbmQgZXhpdC4KKyAgICAgICAgICAgIHAuc2VuZChiJ3AnKQorICAgICAgICAgICAgIyBXYWl0IGZvciBjaGlsZCB0byBleGl0LiAgTG9ja2luZyBzaG91bGQgbm93IHN1Y2NlZWQuCisgICAgICAgICAgICBleGl0ZWRfcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKworICAgICAgICBzZWxmLl9ib3gubG9jaygpCisgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQorCisgICAgZGVmIHRlc3RfcmVsb2NrKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FzZSBmb3IgYnVnICMxNTc1NTA2OiB0aGUgbWFpbGJveCBjbGFzcyB3YXMgbG9ja2luZyB0aGUKKyAgICAgICAgIyB3cm9uZyBmaWxlIG9iamVjdCBpbiBpdHMgZmx1c2goKSBtZXRob2QuCisgICAgICAgIG1zZyA9ICJTdWJqZWN0OiBzdWJcblxuYm9keVxuIgorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChtc2cpCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCisgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLl9ib3gubG9jaygpCisgICAgICAgIGtleTIgPSBzZWxmLl9ib3guYWRkKG1zZykKKyAgICAgICAgc2VsZi5fYm94LmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuX2JveC5fbG9ja2VkKQorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorCisKK2NsYXNzIFRlc3RNYm94KF9UZXN0TWJveE1NREYsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9mYWN0b3J5ID0gbGFtYmRhIHNlbGYsIHBhdGgsIGZhY3Rvcnk9Tm9uZTogbWFpbGJveC5tYm94KHBhdGgsIGZhY3RvcnkpCisKKyAgICBkZWYgdGVzdF9maWxlX3Blcm1zKHNlbGYpOgorICAgICAgICAjIEZyb20gYnVnICMzMjI4LCB3ZSB3YW50IHRvIHZlcmlmeSB0aGF0IHRoZSBtYWlsYm94IGZpbGUgaXNuJ3QgZXhlY3V0YWJsZSwKKyAgICAgICAgIyBldmVuIGlmIHRoZSB1bWFzayBpcyBzZXQgdG8gc29tZXRoaW5nIHRoYXQgd291bGQgbGVhdmUgZXhlY3V0YWJsZSBiaXRzIHNldC4KKyAgICAgICAgIyBXZSBvbmx5IHJ1biB0aGlzIHRlc3Qgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB1bWFzay4KKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3VtYXNrJykgYW5kIGhhc2F0dHIob3MsICdzdGF0Jyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb2xkX3VtYXNrID0gb3MudW1hc2soMDA3NykKKyAgICAgICAgICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9wYXRoKQorICAgICAgICAgICAgICAgIHNlbGYuX2JveCA9IG1haWxib3gubWJveChzZWxmLl9wYXRoLCBjcmVhdGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9ib3guYWRkKCcnKQorICAgICAgICAgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLnVtYXNrKG9sZF91bWFzaykKKworICAgICAgICAgICAgc3QgPSBvcy5zdGF0KHNlbGYuX3BhdGgpCisgICAgICAgICAgICBwZXJtcyA9IHN0LnN0X21vZGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKHBlcm1zICYgMDExMSkpICMgRXhlY3V0ZSBiaXRzIHNob3VsZCBhbGwgYmUgb2ZmLgorCisgICAgZGVmIHRlc3RfdGVybWluYXRpbmdfbmV3bGluZShzZWxmKToKKyAgICAgICAgbWVzc2FnZSA9IGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSgpCisgICAgICAgIG1lc3NhZ2VbJ0Zyb20nXSA9ICdqb2huQGV4YW1wbGUuY29tJworICAgICAgICBtZXNzYWdlLnNldF9wYXlsb2FkKCdObyBuZXdsaW5lIGF0IHRoZSBlbmQnKQorICAgICAgICBpID0gc2VsZi5fYm94LmFkZChtZXNzYWdlKQorCisgICAgICAgICMgQSBuZXdsaW5lIHNob3VsZCBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIHBheWxvYWQKKyAgICAgICAgbWVzc2FnZSA9IHNlbGYuX2JveC5nZXQoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLmdldF9wYXlsb2FkKCksICdObyBuZXdsaW5lIGF0IHRoZSBlbmRcbicpCisKKyAgICBkZWYgdGVzdF9tZXNzYWdlX3NlcGFyYXRvcihzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGVyZSdzIGFsd2F5cyBhIHNpbmdsZSBibGFuayBsaW5lIGFmdGVyIGVhY2ggbWVzc2FnZQorICAgICAgICBzZWxmLl9ib3guYWRkKCdGcm9tOiBmb29cblxuMCcpICAjIE5vIG5ld2xpbmUgYXQgdGhlIGVuZAorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCkgYXMgZjoKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhWy0zOl0sICcwXG5cbicpCisKKyAgICAgICAgc2VsZi5fYm94LmFkZCgnRnJvbTogZm9vXG5cbjBcbicpICAjIE5ld2xpbmUgYXQgdGhlIGVuZAorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCkgYXMgZjoKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhWy0zOl0sICcwXG5cbicpCisKKworY2xhc3MgVGVzdE1NREYoX1Rlc3RNYm94TU1ERiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgX2ZhY3RvcnkgPSBsYW1iZGEgc2VsZiwgcGF0aCwgZmFjdG9yeT1Ob25lOiBtYWlsYm94Lk1NREYocGF0aCwgZmFjdG9yeSkKKworCitjbGFzcyBUZXN0TUgoVGVzdE1haWxib3gsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9mYWN0b3J5ID0gbGFtYmRhIHNlbGYsIHBhdGgsIGZhY3Rvcnk9Tm9uZTogbWFpbGJveC5NSChwYXRoLCBmYWN0b3J5KQorCisgICAgZGVmIHRlc3RfbGlzdF9mb2xkZXJzKHNlbGYpOgorICAgICAgICAjIExpc3QgZm9sZGVycworICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcignb25lJykKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3R3bycpCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0aHJlZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KCgnb25lJywgJ3R3bycsICd0aHJlZScpKSkKKworICAgIGRlZiB0ZXN0X2dldF9mb2xkZXIoc2VsZik6CisgICAgICAgICMgT3BlbiBmb2xkZXJzCisgICAgICAgIGRlZiBkdW1teV9mYWN0b3J5IChzKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCwgZHVtbXlfZmFjdG9yeSkKKworICAgICAgICBuZXdfZm9sZGVyID0gc2VsZi5fYm94LmFkZF9mb2xkZXIoJ2Zvby5iYXInKQorICAgICAgICBmb2xkZXIwID0gc2VsZi5fYm94LmdldF9mb2xkZXIoJ2Zvby5iYXInKQorICAgICAgICBmb2xkZXIwLmFkZChzZWxmLl90ZW1wbGF0ZSAlICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ2Zvby5iYXInKSkpCisgICAgICAgIGZvbGRlcjEgPSBzZWxmLl9ib3guZ2V0X2ZvbGRlcignZm9vLmJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9sZGVyMS5nZXRfc3RyaW5nKGZvbGRlcjEua2V5cygpWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdiYXInKQorCisgICAgICAgICMgVGVzdCBmb3IgYnVnICMxNTY5NzkwOiB2ZXJpZnkgdGhhdCBmb2xkZXJzIHJldHVybmVkIGJ5IC5nZXRfZm9sZGVyKCkKKyAgICAgICAgIyB1c2UgdGhlIHNhbWUgZmFjdG9yeSBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhuZXdfZm9sZGVyLl9mYWN0b3J5LCBzZWxmLl9ib3guX2ZhY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9sZGVyMC5fZmFjdG9yeSwgc2VsZi5fYm94Ll9mYWN0b3J5KQorCisgICAgZGVmIHRlc3RfYWRkX2FuZF9yZW1vdmVfZm9sZGVycyhzZWxmKToKKyAgICAgICAgIyBEZWxldGUgZm9sZGVycworICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcignb25lJykKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3R3bycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ29uZScsICd0d28nKSkpCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmVfZm9sZGVyKCdvbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCBzZXQoKCd0d28nLCApKSkKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3RocmVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywgJ3RocmVlJykpKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlX2ZvbGRlcigndGhyZWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCBzZXQoKCd0d28nLCApKSkKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZV9mb2xkZXIoJ3R3bycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpLCBbXSkKKworICAgIGRlZiB0ZXN0X3NlcXVlbmNlcyhzZWxmKToKKyAgICAgICAgIyBHZXQgYW5kIHNldCBzZXF1ZW5jZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLCB7fSkKKyAgICAgICAgbXNnMCA9IG1haWxib3guTUhNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgbXNnMC5hZGRfc2VxdWVuY2UoJ2ZvbycpCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKG1zZzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwgeydmb28nOltrZXkwXX0pCisgICAgICAgIG1zZzEgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIG1zZzEuc2V0X3NlcXVlbmNlcyhbJ2JhcicsICdyZXBsaWVkJywgJ2ZvbyddKQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChtc2cxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydmb28nOltrZXkwLCBrZXkxXSwgJ2Jhcic6W2tleTFdLCAncmVwbGllZCc6W2tleTFdfSkKKyAgICAgICAgbXNnMC5zZXRfc2VxdWVuY2VzKFsnZmxhZ2dlZCddKQorICAgICAgICBzZWxmLl9ib3hba2V5MF0gPSBtc2cwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6W2tleTFdLCAnYmFyJzpba2V5MV0sICdyZXBsaWVkJzpba2V5MV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICdmbGFnZ2VkJzpba2V5MF19KQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwgeydmbGFnZ2VkJzpba2V5MF19KQorCisgICAgZGVmIHRlc3RfaXNzdWUyNjI1KHNlbGYpOgorICAgICAgICBtc2cwID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBtc2cwLmFkZF9zZXF1ZW5jZSgnZm9vJykKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQobXNnMCkKKyAgICAgICAgcmVmbXNnMCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkwKQorCisgICAgZGVmIHRlc3RfaXNzdWU3NjI3KHNlbGYpOgorICAgICAgICBtc2cwID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChtc2cwKQorICAgICAgICBzZWxmLl9ib3gubG9jaygpCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MCkKKyAgICAgICAgc2VsZi5fYm94LnVubG9jaygpCisKKyAgICBkZWYgdGVzdF9wYWNrKHNlbGYpOgorICAgICAgICAjIFBhY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYWlsYm94CisgICAgICAgIG1zZzAgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIG1zZzEgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIG1zZzIgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDIpCisgICAgICAgIG1zZzMgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDMpCisgICAgICAgIG1zZzAuc2V0X3NlcXVlbmNlcyhbJ2ZvbycsICd1bnNlZW4nXSkKKyAgICAgICAgbXNnMS5zZXRfc2VxdWVuY2VzKFsnZm9vJ10pCisgICAgICAgIG1zZzIuc2V0X3NlcXVlbmNlcyhbJ2ZvbycsICdmbGFnZ2VkJ10pCisgICAgICAgIG1zZzMuc2V0X3NlcXVlbmNlcyhbJ2ZvbycsICdiYXInLCAncmVwbGllZCddKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChtc2cwKQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChtc2cxKQorICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChtc2cyKQorICAgICAgICBrZXkzID0gc2VsZi5fYm94LmFkZChtc2czKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydmb28nOltrZXkwLGtleTEsa2V5MixrZXkzXSwgJ3Vuc2Vlbic6W2tleTBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxhZ2dlZCc6W2tleTJdLCAnYmFyJzpba2V5M10sICdyZXBsaWVkJzpba2V5M119KQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6W2tleTAsa2V5MSxrZXkzXSwgJ3Vuc2Vlbic6W2tleTBdLCAnYmFyJzpba2V5M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXBsaWVkJzpba2V5M119KQorICAgICAgICBzZWxmLl9ib3gucGFjaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmtleXMoKSwgWzEsIDIsIDNdKQorICAgICAgICBrZXkwID0ga2V5MAorICAgICAgICBrZXkxID0ga2V5MCArIDEKKyAgICAgICAga2V5MiA9IGtleTEgKyAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpbMSwgMiwgM10sICd1bnNlZW4nOlsxXSwgJ2Jhcic6WzNdLCAncmVwbGllZCc6WzNdfSkKKworICAgICAgICAjIFRlc3QgY2FzZSBmb3IgcGFja2luZyB3aGlsZSBob2xkaW5nIHRoZSBtYWlsYm94IGxvY2tlZC4KKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQobXNnMSkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQobXNnMSkKKyAgICAgICAga2V5MiA9IHNlbGYuX2JveC5hZGQobXNnMSkKKyAgICAgICAga2V5MyA9IHNlbGYuX2JveC5hZGQobXNnMSkKKworICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTApCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MikKKyAgICAgICAgc2VsZi5fYm94LmxvY2soKQorICAgICAgICBzZWxmLl9ib3gucGFjaygpCisgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydmb28nOlsxLCAyLCAzLCA0LCA1XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Vuc2Vlbic6WzFdLCAnYmFyJzpbM10sICdyZXBsaWVkJzpbM119KQorCisgICAgZGVmIF9nZXRfbG9ja19wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICcubWhfc2VxdWVuY2VzLmxvY2snKQorCisKK2NsYXNzIFRlc3RCYWJ5bChfVGVzdFNpbmdsZUZpbGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9mYWN0b3J5ID0gbGFtYmRhIHNlbGYsIHBhdGgsIGZhY3Rvcnk9Tm9uZTogbWFpbGJveC5CYWJ5bChwYXRoLCBmYWN0b3J5KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICBzZWxmLl9kZWxldGVfcmVjdXJzaXZlbHkoc2VsZi5fcGF0aCkKKyAgICAgICAgZm9yIGxvY2tfcmVtbmFudCBpbiBnbG9iLmdsb2Ioc2VsZi5fcGF0aCArICcuKicpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhsb2NrX3JlbW5hbnQpCisKKyAgICBkZWYgdGVzdF9sYWJlbHMoc2VsZik6CisgICAgICAgICMgR2V0IGxhYmVscyBmcm9tIHRoZSBtYWlsYm94CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9sYWJlbHMoKSwgW10pCisgICAgICAgIG1zZzAgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIG1zZzAuYWRkX2xhYmVsKCdmb28nKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChtc2cwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfbGFiZWxzKCksIFsnZm9vJ10pCisgICAgICAgIG1zZzEgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIG1zZzEuc2V0X2xhYmVscyhbJ2JhcicsICdhbnN3ZXJlZCcsICdmb28nXSkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQobXNnMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94LmdldF9sYWJlbHMoKSksIHNldChbJ2ZvbycsICdiYXInXSkpCisgICAgICAgIG1zZzAuc2V0X2xhYmVscyhbJ2JsYWgnLCAnZmlsZWQnXSkKKyAgICAgICAgc2VsZi5fYm94W2tleTBdID0gbXNnMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3guZ2V0X2xhYmVscygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoWydmb28nLCAnYmFyJywgJ2JsYWgnXSkpCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94LmdldF9sYWJlbHMoKSksIHNldChbJ2JsYWgnXSkpCisKKworY2xhc3MgVGVzdE1lc3NhZ2UoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9mYWN0b3J5ID0gbWFpbGJveC5NZXNzYWdlICAgICAgIyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgdG8gcmV1c2UgdGVzdHMKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fcGF0aCA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5fZGVsZXRlX3JlY3Vyc2l2ZWx5KHNlbGYuX3BhdGgpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXplX3dpdGhfZU1NKHNlbGYpOgorICAgICAgICAjIEluaXRpYWxpemUgYmFzZWQgb24gZW1haWwubWVzc2FnZS5NZXNzYWdlIGluc3RhbmNlCisgICAgICAgIGVNTSA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KGVNTSkKKyAgICAgICAgc2VsZi5fcG9zdF9pbml0aWFsaXplX2hvb2sobXNnKQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBJbml0aWFsaXplIGJhc2VkIG9uIHN0cmluZworICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5fcG9zdF9pbml0aWFsaXplX2hvb2sobXNnKQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX2ZpbGUoc2VsZik6CisgICAgICAgICMgSW5pdGlhbGl6ZSBiYXNlZCBvbiBjb250ZW50cyBvZiBmaWxlCisgICAgICAgIHdpdGggb3BlbihzZWxmLl9wYXRoLCAndysnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoZikKKyAgICAgICAgICAgIHNlbGYuX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKG1zZykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXplX3dpdGhfbm90aGluZyhzZWxmKToKKyAgICAgICAgIyBJbml0aWFsaXplIHdpdGhvdXQgYXJndW1lbnRzCisgICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoKQorICAgICAgICBzZWxmLl9wb3N0X2luaXRpYWxpemVfaG9vayhtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2csIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZywgbWFpbGJveC5NZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnLCBzZWxmLl9mYWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5rZXlzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfaW5jb3JyZWN0bHkoc2VsZik6CisgICAgICAgICMgSW5pdGlhbGl6ZSB3aXRoIGludmFsaWQgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuX2ZhY3Rvcnkob2JqZWN0KCkpKQorCisgICAgZGVmIHRlc3RfYmVjb21lX21lc3NhZ2Uoc2VsZik6CisgICAgICAgICMgVGFrZSBvbiB0aGUgc3RhdGUgb2YgYW5vdGhlciBtZXNzYWdlCisgICAgICAgIGVNTSA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KCkKKyAgICAgICAgbXNnLl9iZWNvbWVfbWVzc2FnZShlTU0pCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCisKKyAgICBkZWYgdGVzdF9leHBsYWluX3RvKHNlbGYpOgorICAgICAgICAjIENvcHkgc2VsZidzIGZvcm1hdC1zcGVjaWZpYyBkYXRhIHRvIG90aGVyIG1lc3NhZ2UgZm9ybWF0cy4KKyAgICAgICAgIyBUaGlzIHRlc3QgaXMgc3VwZXJmaWNpYWw7IGJldHRlciBvbmVzIGFyZSBpbiBUZXN0TWVzc2FnZUNvbnZlcnNpb24uCisgICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoKQorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lk1lc3NhZ2UsIG1haWxib3guTWFpbGRpck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgIG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTUhNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94LkJhYnlsTWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBvdGhlcl9tc2cgPSBjbGFzc18oKQorICAgICAgICAgICAgbXNnLl9leHBsYWluX3RvKG90aGVyX21zZykKKyAgICAgICAgb3RoZXJfbXNnID0gZW1haWwubWVzc2FnZS5NZXNzYWdlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1zZy5fZXhwbGFpbl90byhvdGhlcl9tc2cpKQorCisgICAgZGVmIF9wb3N0X2luaXRpYWxpemVfaG9vayhzZWxmLCBtc2cpOgorICAgICAgICAjIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyB0byBjaGVjayBleHRyYSB0aGluZ3MgYWZ0ZXIgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgcGFzcworCisKK2NsYXNzIFRlc3RNYWlsZGlyTWVzc2FnZShUZXN0TWVzc2FnZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgX2ZhY3RvcnkgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlCisKKyAgICBkZWYgX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLl9zdWJkaXIsICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5faW5mbywnJykKKworICAgIGRlZiB0ZXN0X3N1YmRpcihzZWxmKToKKyAgICAgICAgIyBVc2UgZ2V0X3N1YmRpcigpIGFuZCBzZXRfc3ViZGlyKCkKKyAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCisgICAgICAgIG1zZy5zZXRfc3ViZGlyKCdjdXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICdjdXInKQorICAgICAgICBtc2cuc2V0X3N1YmRpcignbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBtc2cuc2V0X3N1YmRpcigndG1wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCisgICAgICAgIG1zZy5zZXRfc3ViZGlyKCduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQorCisgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZik6CisgICAgICAgICMgVXNlIGdldF9mbGFncygpLCBzZXRfZmxhZ3MoKSwgYWRkX2ZsYWcoKSwgcmVtb3ZlX2ZsYWcoKQorICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBtc2cuc2V0X2ZsYWdzKCdGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdGJykKKyAgICAgICAgbXNnLnNldF9mbGFncygnU0RUUCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRFBTVCcpCisgICAgICAgIG1zZy5hZGRfZmxhZygnRlQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ0RGUFNUJykKKyAgICAgICAgbXNnLnJlbW92ZV9mbGFnKCdURFJQJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdGUycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCisKKyAgICBkZWYgdGVzdF9kYXRlKHNlbGYpOgorICAgICAgICAjIFVzZSBnZXRfZGF0ZSgpIGFuZCBzZXRfZGF0ZSgpCisgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBkaWZmID0gbXNnLmdldF9kYXRlKCkgLSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKGRpZmYpIDwgNjAsIGRpZmYpCisgICAgICAgIG1zZy5zZXRfZGF0ZSgwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9kYXRlKCksIDAuMCkKKworICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgICMgVXNlIGdldF9pbmZvKCkgYW5kIHNldF9pbmZvKCkKKyAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcnKQorICAgICAgICBtc2cuc2V0X2luZm8oJzEsZm9vPWJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcxLGZvbz1iYXInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbXNnLnNldF9pbmZvKE5vbmUpKQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQorCisgICAgZGVmIHRlc3RfaW5mb19hbmRfZmxhZ3Moc2VsZik6CisgICAgICAgICMgVGVzdCBpbnRlcmFjdGlvbiBvZiBpbmZvIGFuZCBmbGFnIG1ldGhvZHMKKyAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcnKQorICAgICAgICBtc2cuc2V0X2ZsYWdzKCdTRicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRlMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnMixGUycpCisgICAgICAgIG1zZy5zZXRfaW5mbygnMSwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcxLCcpCisgICAgICAgIG1zZy5yZW1vdmVfZmxhZygnUlBUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnMSwnKQorICAgICAgICBtc2cuYWRkX2ZsYWcoJ0QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ0QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnMixEJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKKworCitjbGFzcyBfVGVzdE1ib3hNTURGTWVzc2FnZToKKworICAgIF9mYWN0b3J5ID0gbWFpbGJveC5fbWJveE1NREZNZXNzYWdlCisKKyAgICBkZWYgX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuX2NoZWNrX2Zyb20obXNnKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX3VuaXhmcm9tKHNlbGYpOgorICAgICAgICAjIEluaXRpYWxpemUgd2l0aCBhIG1lc3NhZ2UgdGhhdCBhbHJlYWR5IGhhcyBhIF91bml4ZnJvbSBhdHRyaWJ1dGUKKyAgICAgICAgbXNnID0gbWFpbGJveC5NZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnLnNldF91bml4ZnJvbSgnRnJvbSBmb29AYmFyIGJsYWgnKQorICAgICAgICBtc2cgPSBtYWlsYm94Lm1ib3hNZXNzYWdlKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2Zyb20oKSwgJ2Zvb0BiYXIgYmxhaCcpCisKKyAgICBkZWYgdGVzdF9mcm9tKHNlbGYpOgorICAgICAgICAjIEdldCBhbmQgc2V0ICJGcm9tICIgbGluZQorICAgICAgICBtc2cgPSBtYWlsYm94Lm1ib3hNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZnJvbShtc2cpCisgICAgICAgIG1zZy5zZXRfZnJvbSgnZm9vIGJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mcm9tKCksICdmb28gYmFyJykKKyAgICAgICAgbXNnLnNldF9mcm9tKCdmb29AYmFyJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZnJvbShtc2csICdmb29AYmFyJykKKyAgICAgICAgbXNnLnNldF9mcm9tKCdibGFoQHRlbXAnLCB0aW1lLmxvY2FsdGltZSgpKQorICAgICAgICBzZWxmLl9jaGVja19mcm9tKG1zZywgJ2JsYWhAdGVtcCcpCisKKyAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKKyAgICAgICAgIyBVc2UgZ2V0X2ZsYWdzKCksIHNldF9mbGFncygpLCBhZGRfZmxhZygpLCByZW1vdmVfZmxhZygpCisgICAgICAgIG1zZyA9IG1haWxib3gubWJveE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJycpCisgICAgICAgIG1zZy5zZXRfZmxhZ3MoJ0YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ0YnKQorICAgICAgICBtc2cuc2V0X2ZsYWdzKCdYT0RSJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdST0RYJykKKyAgICAgICAgbXNnLmFkZF9mbGFnKCdGQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnUk9ERkFYJykKKyAgICAgICAgbXNnLnJlbW92ZV9mbGFnKCdGRFhBJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdSTycpCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCisKKyAgICBkZWYgX2NoZWNrX2Zyb20oc2VsZiwgbXNnLCBzZW5kZXI9Tm9uZSk6CisgICAgICAgICMgQ2hlY2sgY29udGVudHMgb2YgIkZyb20gIiBsaW5lCisgICAgICAgIGlmIHNlbmRlciBpcyBOb25lOgorICAgICAgICAgICAgc2VuZGVyID0gIk1BSUxFUi1EQUVNT04iCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChzZW5kZXIgKyByIiBcd3szfSBcd3szfSBbXGQgXVxkIFtcZCBdXGQ6XGR7Mn06IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcZHsyfSBcZHs0fSIsIG1zZy5nZXRfZnJvbSgpKSkKKworCitjbGFzcyBUZXN0TWJveE1lc3NhZ2UoX1Rlc3RNYm94TU1ERk1lc3NhZ2UsIFRlc3RNZXNzYWdlKToKKworICAgIF9mYWN0b3J5ID0gbWFpbGJveC5tYm94TWVzc2FnZQorCisKK2NsYXNzIFRlc3RNSE1lc3NhZ2UoVGVzdE1lc3NhZ2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9mYWN0b3J5ID0gbWFpbGJveC5NSE1lc3NhZ2UKKworICAgIGRlZiBfcG9zdF9pbml0aWFsaXplX2hvb2soc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuX3NlcXVlbmNlcywgW10pCisKKyAgICBkZWYgdGVzdF9zZXF1ZW5jZXMoc2VsZik6CisgICAgICAgICMgR2V0LCBzZXQsIGpvaW4sIGFuZCBsZWF2ZSBzZXF1ZW5jZXMKKyAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFtdKQorICAgICAgICBtc2cuc2V0X3NlcXVlbmNlcyhbJ2Zvb2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsnZm9vYmFyJ10pCisgICAgICAgIG1zZy5zZXRfc2VxdWVuY2VzKFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFtdKQorICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCd1bnNlZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsndW5zZWVuJ10pCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsndW5zZWVuJywgJ2ZsYWdnZWQnXSkKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgnZmxhZ2dlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgWyd1bnNlZW4nLCAnZmxhZ2dlZCddKQorICAgICAgICBtc2cucmVtb3ZlX3NlcXVlbmNlKCd1bnNlZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsnZmxhZ2dlZCddKQorICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdmb29iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsnZmxhZ2dlZCcsICdmb29iYXInXSkKKyAgICAgICAgbXNnLnJlbW92ZV9zZXF1ZW5jZSgncmVwbGllZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgWydmbGFnZ2VkJywgJ2Zvb2JhciddKQorICAgICAgICBtc2cuc2V0X3NlcXVlbmNlcyhbJ2Zvb2JhcicsICdyZXBsaWVkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgWydmb29iYXInLCAncmVwbGllZCddKQorCisKK2NsYXNzIFRlc3RCYWJ5bE1lc3NhZ2UoVGVzdE1lc3NhZ2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9mYWN0b3J5ID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UKKworICAgIGRlZiBfcG9zdF9pbml0aWFsaXplX2hvb2soc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuX2xhYmVscywgW10pCisKKyAgICBkZWYgdGVzdF9sYWJlbHMoc2VsZik6CisgICAgICAgICMgR2V0LCBzZXQsIGpvaW4sIGFuZCBsZWF2ZSBsYWJlbHMKKyAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFtdKQorICAgICAgICBtc2cuc2V0X2xhYmVscyhbJ2Zvb2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsnZm9vYmFyJ10pCisgICAgICAgIG1zZy5zZXRfbGFiZWxzKFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFtdKQorICAgICAgICBtc2cuYWRkX2xhYmVsKCdmaWxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydmaWxlZCddKQorICAgICAgICBtc2cuYWRkX2xhYmVsKCdyZXNlbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsnZmlsZWQnLCAncmVzZW50J10pCisgICAgICAgIG1zZy5hZGRfbGFiZWwoJ3Jlc2VudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydmaWxlZCcsICdyZXNlbnQnXSkKKyAgICAgICAgbXNnLnJlbW92ZV9sYWJlbCgnZmlsZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsncmVzZW50J10pCisgICAgICAgIG1zZy5hZGRfbGFiZWwoJ2Zvb2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydyZXNlbnQnLCAnZm9vYmFyJ10pCisgICAgICAgIG1zZy5yZW1vdmVfbGFiZWwoJ3Vuc2VlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydyZXNlbnQnLCAnZm9vYmFyJ10pCisgICAgICAgIG1zZy5zZXRfbGFiZWxzKFsnZm9vYmFyJywgJ2Fuc3dlcmVkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydmb29iYXInLCAnYW5zd2VyZWQnXSkKKworICAgIGRlZiB0ZXN0X3Zpc2libGUoc2VsZik6CisgICAgICAgICMgR2V0LCBzZXQsIGFuZCB1cGRhdGUgdmlzaWJsZSBoZWFkZXJzCisgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgdmlzaWJsZSA9IG1zZy5nZXRfdmlzaWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZS5rZXlzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHZpc2libGUuZ2V0X3BheWxvYWQoKSwgTm9uZSkKKyAgICAgICAgdmlzaWJsZVsnVXNlci1BZ2VudCddID0gJ0Zvb0JhciAxLjAnCisgICAgICAgIHZpc2libGVbJ1gtV2hhdGV2ZXInXSA9ICdCbGFoJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfdmlzaWJsZSgpLmtleXMoKSwgW10pCisgICAgICAgIG1zZy5zZXRfdmlzaWJsZSh2aXNpYmxlKQorICAgICAgICB2aXNpYmxlID0gbXNnLmdldF92aXNpYmxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlLmtleXMoKSwgWydVc2VyLUFnZW50JywgJ1gtV2hhdGV2ZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlWydVc2VyLUFnZW50J10sICdGb29CYXIgMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlWydYLVdoYXRldmVyJ10sICdCbGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh2aXNpYmxlLmdldF9wYXlsb2FkKCksIE5vbmUpCisgICAgICAgIG1zZy51cGRhdGVfdmlzaWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZS5rZXlzKCksIFsnVXNlci1BZ2VudCcsICdYLVdoYXRldmVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModmlzaWJsZS5nZXRfcGF5bG9hZCgpLCBOb25lKQorICAgICAgICB2aXNpYmxlID0gbXNnLmdldF92aXNpYmxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlLmtleXMoKSwgWydVc2VyLUFnZW50JywgJ0RhdGUnLCAnRnJvbScsICdUbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3ViamVjdCddKQorICAgICAgICBmb3IgaGVhZGVyIGluICgnVXNlci1BZ2VudCcsICdEYXRlJywgJ0Zyb20nLCAnVG8nLCAnU3ViamVjdCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlW2hlYWRlcl0sIG1zZ1toZWFkZXJdKQorCisKK2NsYXNzIFRlc3RNTURGTWVzc2FnZShfVGVzdE1ib3hNTURGTWVzc2FnZSwgVGVzdE1lc3NhZ2UpOgorCisgICAgX2ZhY3RvcnkgPSBtYWlsYm94Lk1NREZNZXNzYWdlCisKKworY2xhc3MgVGVzdE1lc3NhZ2VDb252ZXJzaW9uKFRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9wbGFpbl90b194KHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgTWVzc2FnZSB0byBhbGwgZm9ybWF0cworICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lk1lc3NhZ2UsIG1haWxib3guTWFpbGRpck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgIG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTUhNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94LkJhYnlsTWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBtc2dfcGxhaW4gPSBtYWlsYm94Lk1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgbXNnID0gY2xhc3NfKG1zZ19wbGFpbikKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCisKKyAgICBkZWYgdGVzdF94X3RvX3BsYWluKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgYWxsIGZvcm1hdHMgdG8gTWVzc2FnZQorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lk1lc3NhZ2UsIG1haWxib3guTWFpbGRpck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgIG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTUhNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94LkJhYnlsTWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBtc2cgPSBjbGFzc18oX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgbXNnX3BsYWluID0gbWFpbGJveC5NZXNzYWdlKG1zZykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2dfcGxhaW4pCisKKyAgICBkZWYgdGVzdF94X3RvX2ludmFsaWQoc2VsZik6CisgICAgICAgICMgQ29udmVydCBhbGwgZm9ybWF0cyB0byBhbiBpbnZhbGlkIGZvcm1hdAorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lk1lc3NhZ2UsIG1haWxib3guTWFpbGRpck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgIG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTUhNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94LkJhYnlsTWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogY2xhc3NfKEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X21haWxkaXJfdG9fbWFpbGRpcihzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IE1haWxkaXJNZXNzYWdlIHRvIE1haWxkaXJNZXNzYWdlCisgICAgICAgIG1zZ19tYWlsZGlyID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIG1zZ19tYWlsZGlyLnNldF9mbGFncygnREZQUlNUJykKKyAgICAgICAgbXNnX21haWxkaXIuc2V0X3N1YmRpcignY3VyJykKKyAgICAgICAgZGF0ZSA9IG1zZ19tYWlsZGlyLmdldF9kYXRlKCkKKyAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2dfbWFpbGRpcikKKyAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdERlBSU1QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICdjdXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZGF0ZSgpLCBkYXRlKQorCisgICAgZGVmIHRlc3RfbWFpbGRpcl90b19tYm94bW1kZihzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IE1haWxkaXJNZXNzYWdlIHRvIG1ib3htZXNzYWdlIGFuZCBNTURGTWVzc2FnZQorICAgICAgICBwYWlycyA9ICgoJ0QnLCAnJyksICgnRicsICdGJyksICgnUCcsICcnKSwgKCdSJywgJ0EnKSwgKCdTJywgJ1InKSwKKyAgICAgICAgICAgICAgICAgKCdUJywgJ0QnKSwgKCdERlBSU1QnLCAnUkRGQScpKQorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgIG1zZ19tYWlsZGlyID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBtc2dfbWFpbGRpci5zZXRfZGF0ZSgwLjApCisgICAgICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgorICAgICAgICAgICAgICAgIG1zZ19tYWlsZGlyLnNldF9mbGFncyhzZXR0aW5nKQorICAgICAgICAgICAgICAgIG1zZyA9IGNsYXNzXyhtc2dfbWFpbGRpcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgcmVzdWx0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mcm9tKCksICdNQUlMRVItREFFTU9OICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLmFzY3RpbWUodGltZS5nbXRpbWUoMC4wKSkpCisgICAgICAgICAgICBtc2dfbWFpbGRpci5zZXRfc3ViZGlyKCdjdXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGFzc18obXNnX21haWxkaXIpLmdldF9mbGFncygpLCAnUk9ERkEnKQorCisgICAgZGVmIHRlc3RfbWFpbGRpcl90b19taChzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IE1haWxkaXJNZXNzYWdlIHRvIE1ITWVzc2FnZQorICAgICAgICBtc2dfbWFpbGRpciA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBwYWlycyA9ICgoJ0QnLCBbJ3Vuc2VlbiddKSwgKCdGJywgWyd1bnNlZW4nLCAnZmxhZ2dlZCddKSwKKyAgICAgICAgICAgICAgICAgKCdQJywgWyd1bnNlZW4nXSksICgnUicsIFsndW5zZWVuJywgJ3JlcGxpZWQnXSksICgnUycsIFtdKSwKKyAgICAgICAgICAgICAgICAgKCdUJywgWyd1bnNlZW4nXSksICgnREZQUlNUJywgWydyZXBsaWVkJywgJ2ZsYWdnZWQnXSkpCisgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CisgICAgICAgICAgICBtc2dfbWFpbGRpci5zZXRfZmxhZ3Moc2V0dGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NSE1lc3NhZ2UobXNnX21haWxkaXIpLmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfbWFpbGRpcl90b19iYWJ5bChzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IE1haWxkaXJNZXNzYWdlIHRvIEJhYnlsCisgICAgICAgIG1zZ19tYWlsZGlyID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHBhaXJzID0gKCgnRCcsIFsndW5zZWVuJ10pLCAoJ0YnLCBbJ3Vuc2VlbiddKSwKKyAgICAgICAgICAgICAgICAgKCdQJywgWyd1bnNlZW4nLCAnZm9yd2FyZGVkJ10pLCAoJ1InLCBbJ3Vuc2VlbicsICdhbnN3ZXJlZCddKSwKKyAgICAgICAgICAgICAgICAgKCdTJywgW10pLCAoJ1QnLCBbJ3Vuc2VlbicsICdkZWxldGVkJ10pLAorICAgICAgICAgICAgICAgICAoJ0RGUFJTVCcsIFsnZGVsZXRlZCcsICdhbnN3ZXJlZCcsICdmb3J3YXJkZWQnXSkpCisgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CisgICAgICAgICAgICBtc2dfbWFpbGRpci5zZXRfZmxhZ3Moc2V0dGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5CYWJ5bE1lc3NhZ2UobXNnX21haWxkaXIpLmdldF9sYWJlbHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfbWJveG1tZGZfdG9fbWFpbGRpcihzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZSB0byBNYWlsZGlyTWVzc2FnZQorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgIG1zZ19tYm94TU1ERiA9IGNsYXNzXyhfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2Zyb20oJ2Zvb0BiYXInLCB0aW1lLmdtdGltZSgwLjApKQorICAgICAgICAgICAgcGFpcnMgPSAoKCdSJywgJ1MnKSwgKCdPJywgJycpLCAoJ0QnLCAnVCcpLCAoJ0YnLCAnRicpLCAoJ0EnLCAnUicpLAorICAgICAgICAgICAgICAgICAgICAgKCdST0RGQScsICdGUlNUJykpCisgICAgICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgorICAgICAgICAgICAgICAgIG1zZ19tYm94TU1ERi5zZXRfZmxhZ3Moc2V0dGluZykKKyAgICAgICAgICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZ19tYm94TU1ERikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgcmVzdWx0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9kYXRlKCksIDAuMCkKKyAgICAgICAgICAgIG1zZ19tYm94TU1ERi5zZXRfZmxhZ3MoJ08nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZ19tYm94TU1ERikuZ2V0X3N1YmRpcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3VyJykKKworICAgIGRlZiB0ZXN0X21ib3htbWRmX3RvX21ib3htbWRmKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgbWJveE1lc3NhZ2UgYW5kIE1NREZNZXNzYWdlIHRvIG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZQorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgIG1zZ19tYm94TU1ERiA9IGNsYXNzXyhfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2ZsYWdzKCdST0RGQScpCisgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2Zyb20oJ2Zvb0BiYXInKQorICAgICAgICAgICAgZm9yIGNsYXNzMl8gaW4gKG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgorICAgICAgICAgICAgICAgIG1zZzIgPSBjbGFzczJfKG1zZ19tYm94TU1ERikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIuZ2V0X2ZsYWdzKCksICdST0RGQScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cyLmdldF9mcm9tKCksICdmb29AYmFyJykKKworICAgIGRlZiB0ZXN0X21ib3htbWRmX3RvX21oKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgbWJveE1lc3NhZ2UgYW5kIE1NREZNZXNzYWdlIHRvIE1ITWVzc2FnZQorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgIG1zZ19tYm94TU1ERiA9IGNsYXNzXyhfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBwYWlycyA9ICgoJ1InLCBbXSksICgnTycsIFsndW5zZWVuJ10pLCAoJ0QnLCBbJ3Vuc2VlbiddKSwKKyAgICAgICAgICAgICAgICAgICAgICgnRicsIFsndW5zZWVuJywgJ2ZsYWdnZWQnXSksCisgICAgICAgICAgICAgICAgICAgICAoJ0EnLCBbJ3Vuc2VlbicsICdyZXBsaWVkJ10pLAorICAgICAgICAgICAgICAgICAgICAgKCdST0RGQScsIFsncmVwbGllZCcsICdmbGFnZ2VkJ10pKQorICAgICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKKyAgICAgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2ZsYWdzKHNldHRpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1ITWVzc2FnZShtc2dfbWJveE1NREYpLmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X21ib3htbWRmX3RvX2JhYnlsKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgbWJveE1lc3NhZ2UgYW5kIE1NREZNZXNzYWdlIHRvIEJhYnlsTWVzc2FnZQorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgIG1zZyA9IGNsYXNzXyhfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBwYWlycyA9ICgoJ1InLCBbXSksICgnTycsIFsndW5zZWVuJ10pLAorICAgICAgICAgICAgICAgICAgICAgKCdEJywgWyd1bnNlZW4nLCAnZGVsZXRlZCddKSwgKCdGJywgWyd1bnNlZW4nXSksCisgICAgICAgICAgICAgICAgICAgICAoJ0EnLCBbJ3Vuc2VlbicsICdhbnN3ZXJlZCddKSwKKyAgICAgICAgICAgICAgICAgICAgICgnUk9ERkEnLCBbJ2RlbGV0ZWQnLCAnYW5zd2VyZWQnXSkpCisgICAgICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgorICAgICAgICAgICAgICAgIG1zZy5zZXRfZmxhZ3Moc2V0dGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guQmFieWxNZXNzYWdlKG1zZykuZ2V0X2xhYmVscygpLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9taF90b19tYWlsZGlyKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgTUhNZXNzYWdlIHRvIE1haWxkaXJNZXNzYWdlCisgICAgICAgIHBhaXJzID0gKCgndW5zZWVuJywgJycpLCAoJ3JlcGxpZWQnLCAnUlMnKSwgKCdmbGFnZ2VkJywgJ0ZTJykpCisgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CisgICAgICAgICAgICBtc2cgPSBtYWlsYm94Lk1ITWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKHNldHRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X3N1YmRpcigpLCAnY3VyJykKKyAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCd1bnNlZW4nKQorICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdyZXBsaWVkJykKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgnZmxhZ2dlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9mbGFncygpLCAnRlInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfc3ViZGlyKCksICdjdXInKQorCisgICAgZGVmIHRlc3RfbWhfdG9fbWJveG1tZGYoc2VsZik6CisgICAgICAgICMgQ29udmVydCBNSE1lc3NhZ2UgdG8gbWJveE1lc3NhZ2UgYW5kIE1NREZNZXNzYWdlCisgICAgICAgIHBhaXJzID0gKCgndW5zZWVuJywgJ08nKSwgKCdyZXBsaWVkJywgJ1JPQScpLCAoJ2ZsYWdnZWQnLCAnUk9GJykpCisgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CisgICAgICAgICAgICBtc2cgPSBtYWlsYm94Lk1ITWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKHNldHRpbmcpCisgICAgICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzXyhtc2cpLmdldF9mbGFncygpLCByZXN1bHQpCisgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgndW5zZWVuJykKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgncmVwbGllZCcpCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3NfKG1zZykuZ2V0X2ZsYWdzKCksICdPRkEnKQorCisgICAgZGVmIHRlc3RfbWhfdG9fbWgoc2VsZik6CisgICAgICAgICMgQ29udmVydCBNSE1lc3NhZ2UgdG8gTUhNZXNzYWdlCisgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgndW5zZWVuJykKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgncmVwbGllZCcpCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTUhNZXNzYWdlKG1zZykuZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsndW5zZWVuJywgJ3JlcGxpZWQnLCAnZmxhZ2dlZCddKQorCisgICAgZGVmIHRlc3RfbWhfdG9fYmFieWwoc2VsZik6CisgICAgICAgICMgQ29udmVydCBNSE1lc3NhZ2UgdG8gQmFieWxNZXNzYWdlCisgICAgICAgIHBhaXJzID0gKCgndW5zZWVuJywgWyd1bnNlZW4nXSksICgncmVwbGllZCcsIFsnYW5zd2VyZWQnXSksCisgICAgICAgICAgICAgICAgICgnZmxhZ2dlZCcsIFtdKSkKKyAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKKyAgICAgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2Uoc2V0dGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5CYWJ5bE1lc3NhZ2UobXNnKS5nZXRfbGFiZWxzKCksIHJlc3VsdCkKKyAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCd1bnNlZW4nKQorICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdyZXBsaWVkJykKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgnZmxhZ2dlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5CYWJ5bE1lc3NhZ2UobXNnKS5nZXRfbGFiZWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWyd1bnNlZW4nLCAnYW5zd2VyZWQnXSkKKworICAgIGRlZiB0ZXN0X2JhYnlsX3RvX21haWxkaXIoc2VsZik6CisgICAgICAgICMgQ29udmVydCBCYWJ5bE1lc3NhZ2UgdG8gTWFpbGRpck1lc3NhZ2UKKyAgICAgICAgcGFpcnMgPSAoKCd1bnNlZW4nLCAnJyksICgnZGVsZXRlZCcsICdTVCcpLCAoJ2ZpbGVkJywgJ1MnKSwKKyAgICAgICAgICAgICAgICAgKCdhbnN3ZXJlZCcsICdSUycpLCAoJ2ZvcndhcmRlZCcsICdQUycpLCAoJ2VkaXRlZCcsICdTJyksCisgICAgICAgICAgICAgICAgICgncmVzZW50JywgJ1BTJykpCisgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CisgICAgICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKHNldHRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X3N1YmRpcigpLCAnY3VyJykKKyAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBmb3IgbGFiZWwgaW4gKCd1bnNlZW4nLCAnZGVsZXRlZCcsICdmaWxlZCcsICdhbnN3ZXJlZCcsICdmb3J3YXJkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICdlZGl0ZWQnLCAncmVzZW50Jyk6CisgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKGxhYmVsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSwgJ1BSVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSwgJ2N1cicpCisKKyAgICBkZWYgdGVzdF9iYWJ5bF90b19tYm94bW1kZihzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IEJhYnlsTWVzc2FnZSB0byBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UKKyAgICAgICAgcGFpcnMgPSAoKCd1bnNlZW4nLCAnTycpLCAoJ2RlbGV0ZWQnLCAnUk9EJyksICgnZmlsZWQnLCAnUk8nKSwKKyAgICAgICAgICAgICAgICAgKCdhbnN3ZXJlZCcsICdST0EnKSwgKCdmb3J3YXJkZWQnLCAnUk8nKSwgKCdlZGl0ZWQnLCAnUk8nKSwKKyAgICAgICAgICAgICAgICAgKCdyZXNlbnQnLCAnUk8nKSkKKyAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKKyAgICAgICAgICAgIGZvciBjbGFzc18gaW4gKG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgorICAgICAgICAgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKHNldHRpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGFzc18obXNnKS5nZXRfZmxhZ3MoKSwgcmVzdWx0KQorICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIGZvciBsYWJlbCBpbiAoJ3Vuc2VlbicsICdkZWxldGVkJywgJ2ZpbGVkJywgJ2Fuc3dlcmVkJywgJ2ZvcndhcmRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgJ2VkaXRlZCcsICdyZXNlbnQnKToKKyAgICAgICAgICAgIG1zZy5hZGRfbGFiZWwobGFiZWwpCisgICAgICAgIGZvciBjbGFzc18gaW4gKG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGFzc18obXNnKS5nZXRfZmxhZ3MoKSwgJ09EQScpCisKKyAgICBkZWYgdGVzdF9iYWJ5bF90b19taChzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IEJhYnlsTWVzc2FnZSB0byBNSE1lc3NhZ2UKKyAgICAgICAgcGFpcnMgPSAoKCd1bnNlZW4nLCBbJ3Vuc2VlbiddKSwgKCdkZWxldGVkJywgW10pLCAoJ2ZpbGVkJywgW10pLAorICAgICAgICAgICAgICAgICAoJ2Fuc3dlcmVkJywgWydyZXBsaWVkJ10pLCAoJ2ZvcndhcmRlZCcsIFtdKSwgKCdlZGl0ZWQnLCBbXSksCisgICAgICAgICAgICAgICAgICgncmVzZW50JywgW10pKQorICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgorICAgICAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgbXNnLmFkZF9sYWJlbChzZXR0aW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1ITWVzc2FnZShtc2cpLmdldF9zZXF1ZW5jZXMoKSwgcmVzdWx0KQorICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIGZvciBsYWJlbCBpbiAoJ3Vuc2VlbicsICdkZWxldGVkJywgJ2ZpbGVkJywgJ2Fuc3dlcmVkJywgJ2ZvcndhcmRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgJ2VkaXRlZCcsICdyZXNlbnQnKToKKyAgICAgICAgICAgIG1zZy5hZGRfbGFiZWwobGFiZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NSE1lc3NhZ2UobXNnKS5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWyd1bnNlZW4nLCAncmVwbGllZCddKQorCisgICAgZGVmIHRlc3RfYmFieWxfdG9fYmFieWwoc2VsZik6CisgICAgICAgICMgQ29udmVydCBCYWJ5bE1lc3NhZ2UgdG8gQmFieWxNZXNzYWdlCisgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnLnVwZGF0ZV92aXNpYmxlKCkKKyAgICAgICAgZm9yIGxhYmVsIGluICgndW5zZWVuJywgJ2RlbGV0ZWQnLCAnZmlsZWQnLCAnYW5zd2VyZWQnLCAnZm9yd2FyZGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAnZWRpdGVkJywgJ3Jlc2VudCcpOgorICAgICAgICAgICAgbXNnLmFkZF9sYWJlbChsYWJlbCkKKyAgICAgICAgbXNnMiA9IG1haWxib3guQmFieWxNZXNzYWdlKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cyLmdldF9sYWJlbHMoKSwgWyd1bnNlZW4nLCAnZGVsZXRlZCcsICdmaWxlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5zd2VyZWQnLCAnZm9yd2FyZGVkJywgJ2VkaXRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzZW50J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF92aXNpYmxlKCkua2V5cygpLCBtc2cyLmdldF92aXNpYmxlKCkua2V5cygpKQorICAgICAgICBmb3Iga2V5IGluIG1zZy5nZXRfdmlzaWJsZSgpLmtleXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF92aXNpYmxlKClba2V5XSwgbXNnMi5nZXRfdmlzaWJsZSgpW2tleV0pCisKKworY2xhc3MgVGVzdFByb3h5RmlsZUJhc2UoVGVzdEJhc2UpOgorCisgICAgZGVmIF90ZXN0X3JlYWQoc2VsZiwgcHJveHkpOgorICAgICAgICAjIFJlYWQgYnkgYnl0ZQorICAgICAgICBwcm94eS5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZCgpLCAnYmFyJykKKyAgICAgICAgcHJveHkuc2VlaygxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoKSwgJ2FyJykKKyAgICAgICAgcHJveHkuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoMiksICdiYScpCisgICAgICAgIHByb3h5LnNlZWsoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKC0xKSwgJ2FyJykKKyAgICAgICAgcHJveHkuc2VlaygyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoMTAwMCksICdyJykKKworICAgIGRlZiBfdGVzdF9yZWFkbGluZShzZWxmLCBwcm94eSk6CisgICAgICAgICMgUmVhZCBieSBsaW5lCisgICAgICAgIHByb3h5LnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgpLCAnZm9vJyArIG9zLmxpbmVzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoKSwgJ2JhcicgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKCksICdmcmVkJyArIG9zLmxpbmVzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoKSwgJ2JvYicpCisgICAgICAgIHByb3h5LnNlZWsoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgpLCAnbycgKyBvcy5saW5lc2VwKQorICAgICAgICBwcm94eS5zZWVrKDYgKyAyICogbGVuKG9zLmxpbmVzZXApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKCksICdmcmVkJyArIG9zLmxpbmVzZXApCisgICAgICAgIHByb3h5LnNlZWsoNiArIDIgKiBsZW4ob3MubGluZXNlcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoMiksICdmcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoLTEwKSwgJ2VkJyArIG9zLmxpbmVzZXApCisKKyAgICBkZWYgX3Rlc3RfcmVhZGxpbmVzKHNlbGYsIHByb3h5KToKKyAgICAgICAgIyBSZWFkIG11bHRpcGxlIGxpbmVzCisgICAgICAgIHByb3h5LnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZXMoKSwgWydmb28nICsgb3MubGluZXNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhcicgKyBvcy5saW5lc2VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJlZCcgKyBvcy5saW5lc2VwLCAnYm9iJ10pCisgICAgICAgIHByb3h5LnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZXMoMiksIFsnZm9vJyArIG9zLmxpbmVzZXBdKQorICAgICAgICBwcm94eS5zZWVrKDMgKyBsZW4ob3MubGluZXNlcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmVzKDQgKyBsZW4ob3MubGluZXNlcCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYmFyJyArIG9zLmxpbmVzZXAsICdmcmVkJyArIG9zLmxpbmVzZXBdKQorICAgICAgICBwcm94eS5zZWVrKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmVzKDEwMDApLCBbb3MubGluZXNlcCwgJ2JhcicgKyBvcy5saW5lc2VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcmVkJyArIG9zLmxpbmVzZXAsICdib2InXSkKKworICAgIGRlZiBfdGVzdF9pdGVyYXRpb24oc2VsZiwgcHJveHkpOgorICAgICAgICAjIEl0ZXJhdGUgYnkgbGluZQorICAgICAgICBwcm94eS5zZWVrKDApCisgICAgICAgIGl0ZXJhdG9yID0gaXRlcihwcm94eSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0ZXJhdG9yKSwKKyAgICAgICAgICAgIFsnZm9vJyArIG9zLmxpbmVzZXAsICdiYXInICsgb3MubGluZXNlcCwgJ2ZyZWQnICsgb3MubGluZXNlcCwgJ2JvYiddKQorCisgICAgZGVmIF90ZXN0X3NlZWtfYW5kX3RlbGwoc2VsZiwgcHJveHkpOgorICAgICAgICAjIFNlZWsgYW5kIHVzZSB0ZWxsIHRvIGNoZWNrIHBvc2l0aW9uCisgICAgICAgIHByb3h5LnNlZWsoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS50ZWxsKCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZChsZW4ob3MubGluZXNlcCkpLCBvcy5saW5lc2VwKQorICAgICAgICBwcm94eS5zZWVrKDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZCgxICsgbGVuKG9zLmxpbmVzZXApKSwgJ3InICsgb3MubGluZXNlcCkKKyAgICAgICAgcHJveHkuc2VlaygtMyAtIGxlbihvcy5saW5lc2VwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKDMpLCAnYmFyJykKKyAgICAgICAgcHJveHkuc2VlaygyLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoKSwgJ28nICsgb3MubGluZXNlcCArICdiYXInICsgb3MubGluZXNlcCkKKyAgICAgICAgcHJveHkuc2VlaygxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZCgpLCAnJykKKworICAgIGRlZiBfdGVzdF9jbG9zZShzZWxmLCBwcm94eSk6CisgICAgICAgICMgQ2xvc2UgYSBmaWxlCisgICAgICAgIHByb3h5LmNsb3NlKCkKKyAgICAgICAgIyBJc3N1ZSAxMTcwMCBzdWJzZXF1ZW50IGNsb3NlcyBzaG91bGQgYmUgYSBuby1vcCwgbm90IGFuIGVycm9yLgorICAgICAgICBwcm94eS5jbG9zZSgpCisKKworY2xhc3MgVGVzdFByb3h5RmlsZShUZXN0UHJveHlGaWxlQmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9wYXRoID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9wYXRoLCAnd2IrJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCisgICAgICAgIHNlbGYuX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLl9wYXRoKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZShzZWxmKToKKyAgICAgICAgIyBJbml0aWFsaXplIGFuZCBjaGVjayBwb3NpdGlvbgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28nKQorICAgICAgICBwb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICBwcm94eTAgPSBtYWlsYm94Ll9Qcm94eUZpbGUoc2VsZi5fZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eTAudGVsbCgpLCBwb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZmlsZS50ZWxsKCksIHBvcykKKyAgICAgICAgcHJveHkxID0gbWFpbGJveC5fUHJveHlGaWxlKHNlbGYuX2ZpbGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkxLnRlbGwoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9maWxlLnRlbGwoKSwgcG9zKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnYmFyJykKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkKG1haWxib3guX1Byb3h5RmlsZShzZWxmLl9maWxlKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28lc2JhciVzZnJlZCVzYm9iJyAlIChvcy5saW5lc2VwLCBvcy5saW5lc2VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5lc2VwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZShtYWlsYm94Ll9Qcm94eUZpbGUoc2VsZi5fZmlsZSkpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJ2ZvbyVzYmFyJXNmcmVkJXNib2InICUgKG9zLmxpbmVzZXAsIG9zLmxpbmVzZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmVzZXApKQorICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lcyhtYWlsYm94Ll9Qcm94eUZpbGUoc2VsZi5fZmlsZSkpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJ2ZvbyVzYmFyJXNmcmVkJXNib2InICUgKG9zLmxpbmVzZXAsIG9zLmxpbmVzZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmVzZXApKQorICAgICAgICBzZWxmLl90ZXN0X2l0ZXJhdGlvbihtYWlsYm94Ll9Qcm94eUZpbGUoc2VsZi5fZmlsZSkpCisKKyAgICBkZWYgdGVzdF9zZWVrX2FuZF90ZWxsKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28lc2JhciVzJyAlIChvcy5saW5lc2VwLCBvcy5saW5lc2VwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9zZWVrX2FuZF90ZWxsKG1haWxib3guX1Byb3h5RmlsZShzZWxmLl9maWxlKSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28lc2JhciVzJyAlIChvcy5saW5lc2VwLCBvcy5saW5lc2VwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZShtYWlsYm94Ll9Qcm94eUZpbGUoc2VsZi5fZmlsZSkpCisKKworY2xhc3MgVGVzdFBhcnRpYWxGaWxlKFRlc3RQcm94eUZpbGVCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3BhdGggPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYuX2ZpbGUgPSBvcGVuKHNlbGYuX3BhdGgsICd3YisnKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fZGVsZXRlX3JlY3Vyc2l2ZWx5KHNlbGYuX3BhdGgpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXplKHNlbGYpOgorICAgICAgICAjIEluaXRpYWxpemUgYW5kIGNoZWNrIHBvc2l0aW9uCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJ2ZvbycgKyBvcy5saW5lc2VwICsgJ2JhcicpCisgICAgICAgIHBvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIHByb3h5ID0gbWFpbGJveC5fUGFydGlhbEZpbGUoc2VsZi5fZmlsZSwgMiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS50ZWxsKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZmlsZS50ZWxsKCksIHBvcykKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJyoqKmJhcioqKicpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZChtYWlsYm94Ll9QYXJ0aWFsRmlsZShzZWxmLl9maWxlLCAzLCA2KSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCchISEhIWZvbyVzYmFyJXNmcmVkJXNib2IhISEhIScgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5saW5lc2VwLCBvcy5saW5lc2VwLCBvcy5saW5lc2VwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZShtYWlsYm94Ll9QYXJ0aWFsRmlsZShzZWxmLl9maWxlLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4ICsgMyAqIGxlbihvcy5saW5lc2VwKSkpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJ2ZvbyVzYmFyJXNmcmVkJXNib2I/Pz8/PycgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5saW5lc2VwLCBvcy5saW5lc2VwLCBvcy5saW5lc2VwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZXMobWFpbGJveC5fUGFydGlhbEZpbGUoc2VsZi5fZmlsZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMgKyAzICogbGVuKG9zLmxpbmVzZXApKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnX19fX2ZvbyVzYmFyJXNmcmVkJXNib2IjIyMjJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKG9zLmxpbmVzZXAsIG9zLmxpbmVzZXAsIG9zLmxpbmVzZXApKQorICAgICAgICBzZWxmLl90ZXN0X2l0ZXJhdGlvbihtYWlsYm94Ll9QYXJ0aWFsRmlsZShzZWxmLl9maWxlLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNyArIDMgKiBsZW4ob3MubGluZXNlcCkpKQorCisgICAgZGVmIHRlc3Rfc2Vla19hbmRfdGVsbChzZWxmKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnKCgoZm9vJXNiYXIlcyQkJCcgJSAob3MubGluZXNlcCwgb3MubGluZXNlcCkpCisgICAgICAgIHNlbGYuX3Rlc3Rfc2Vla19hbmRfdGVsbChtYWlsYm94Ll9QYXJ0aWFsRmlsZShzZWxmLl9maWxlLCAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOSArIDIgKiBsZW4ob3MubGluZXNlcCkpKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJyZmb28lc2JhciVzXicgJSAob3MubGluZXNlcCwgb3MubGluZXNlcCkpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2UobWFpbGJveC5fUGFydGlhbEZpbGUoc2VsZi5fZmlsZSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICsgMyAqIGxlbihvcy5saW5lc2VwKSkpCisKKworIyMgU3RhcnQ6IHRlc3RzIGZyb20gdGhlIG9yaWdpbmFsIG1vZHVsZSAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgorCitGUk9NXyA9ICJGcm9tIHNvbWUuYm9keUBkdW1teS5kb21haW4gIFNhdCBKdWwgMjQgMTM6NDM6MzUgMjAwNFxuIgorRFVNTVlfTUVTU0FHRSA9ICIiIlwKK0Zyb206IHNvbWUuYm9keUBkdW1teS5kb21haW4KK1RvOiBtZUBteS5kb21haW4KK1N1YmplY3Q6IFNpbXBsZSBUZXN0CisKK1RoaXMgaXMgYSBkdW1teSBtZXNzYWdlLgorIiIiCisKK2NsYXNzIE1haWxkaXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgY3JlYXRlIGEgbmV3IG1haWxkaXIgbWFpbGJveCB0byB3b3JrIHdpdGg6CisgICAgICAgIHNlbGYuX2RpciA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzZWxmLl9kaXIpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLl9kaXIpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuX2Rpcik6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYuX2RpcikKKyAgICAgICAgb3MubWtkaXIoc2VsZi5fZGlyKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAiY3VyIikpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJ0bXAiKSkKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYuX2RpciwgIm5ldyIpKQorICAgICAgICBzZWxmLl9jb3VudGVyID0gMQorICAgICAgICBzZWxmLl9tc2dmaWxlcyA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG1hcChvcy51bmxpbmssIHNlbGYuX21zZ2ZpbGVzKQorICAgICAgICB0ZXN0X3N1cHBvcnQucm1kaXIob3MucGF0aC5qb2luKHNlbGYuX2RpciwgImN1ciIpKQorICAgICAgICB0ZXN0X3N1cHBvcnQucm1kaXIob3MucGF0aC5qb2luKHNlbGYuX2RpciwgInRtcCIpKQorICAgICAgICB0ZXN0X3N1cHBvcnQucm1kaXIob3MucGF0aC5qb2luKHNlbGYuX2RpciwgIm5ldyIpKQorICAgICAgICB0ZXN0X3N1cHBvcnQucm1kaXIoc2VsZi5fZGlyKQorCisgICAgZGVmIGNyZWF0ZU1lc3NhZ2Uoc2VsZiwgZGlyLCBtYm94PUZhbHNlKToKKyAgICAgICAgdCA9IGludCh0aW1lLnRpbWUoKSAlIDEwMDAwMDApCisgICAgICAgIHBpZCA9IHNlbGYuX2NvdW50ZXIKKyAgICAgICAgc2VsZi5fY291bnRlciArPSAxCisgICAgICAgIGZpbGVuYW1lID0gb3MuZXh0c2VwLmpvaW4oKHN0cih0KSwgc3RyKHBpZCksICJteWhvc3RuYW1lIiwgIm15ZG9tYWluIikpCisgICAgICAgIHRtcG5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAidG1wIiwgZmlsZW5hbWUpCisgICAgICAgIG5ld25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCBkaXIsIGZpbGVuYW1lKQorICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuX21zZ2ZpbGVzLmFwcGVuZCh0bXBuYW1lKQorICAgICAgICAgICAgaWYgbWJveDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShGUk9NXykKKyAgICAgICAgICAgIGZwLndyaXRlKERVTU1ZX01FU1NBR0UpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsaW5rIik6CisgICAgICAgICAgICBvcy5saW5rKHRtcG5hbWUsIG5ld25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aXRoIG9wZW4obmV3bmFtZSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQorICAgICAgICBzZWxmLl9tc2dmaWxlcy5hcHBlbmQobmV3bmFtZSkKKyAgICAgICAgcmV0dXJuIHRtcG5hbWUKKworICAgIGRlZiB0ZXN0X2VtcHR5X21haWxkaXIoc2VsZik6CisgICAgICAgICIiIlRlc3QgYW4gZW1wdHkgbWFpbGRpciBtYWlsYm94IiIiCisgICAgICAgICMgVGVzdCBmb3IgcmVncmVzc2lvbiBvbiBidWcgIzExNzQ5MDoKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGJveGVzIGF0dHJpYnV0ZSBhY3R1YWxseSBnZXRzIHNldC4KKyAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICNzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLm1ib3gsICJib3hlcyIpKQorICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3guYm94ZXMpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uZW1wdHlfbWFpbGRpcl9jdXIoc2VsZik6CisgICAgICAgIHNlbGYuY3JlYXRlTWVzc2FnZSgiY3VyIikKKyAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICNzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveC5ib3hlcykgPT0gMSkKKyAgICAgICAgbXNnID0gc2VsZi5tYm94Lm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG1zZywgTm9uZSkKKyAgICAgICAgbXNnLmZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ub25lbXB0eV9tYWlsZGlyX25ldyhzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJuZXciKQorICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94LmJveGVzKSA9PSAxKQorICAgICAgICBtc2cgPSBzZWxmLm1ib3gubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobXNnLCBOb25lKQorICAgICAgICBtc2cuZnAuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X25vbmVtcHR5X21haWxkaXJfYm90aChzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJjdXIiKQorICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoIm5ldyIpCisgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3guYm94ZXMpID09IDIpCisgICAgICAgIG1zZyA9IHNlbGYubWJveC5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtc2csIE5vbmUpCisgICAgICAgIG1zZy5mcC5jbG9zZSgpCisgICAgICAgIG1zZyA9IHNlbGYubWJveC5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtc2csIE5vbmUpCisgICAgICAgIG1zZy5mcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorCisgICAgZGVmIHRlc3RfdW5peF9tYm94KHNlbGYpOgorICAgICAgICAjIyMgc2hvdWxkIGJlIGJldHRlciEKKyAgICAgICAgaW1wb3J0IGVtYWlsLnBhcnNlcgorICAgICAgICBmbmFtZSA9IHNlbGYuY3JlYXRlTWVzc2FnZSgiY3VyIiwgVHJ1ZSkKKyAgICAgICAgbiA9IDAKKyAgICAgICAgZmlkID0gb3BlbihmbmFtZSkKKyAgICAgICAgZm9yIG1zZyBpbiBtYWlsYm94LlBvcnRhYmxlVW5peE1haWxib3goZmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbC5wYXJzZXIuUGFyc2VyKCkucGFyc2UpOgorICAgICAgICAgICAgbiArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1sic3ViamVjdCJdLCAiU2ltcGxlIFRlc3QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RyKG1zZykpLCBsZW4oRlJPTV8pK2xlbihEVU1NWV9NRVNTQUdFKSkKKyAgICAgICAgZmlkLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAxKQorCisjIyBFbmQ6IGNsYXNzZXMgZnJvbSB0aGUgb3JpZ2luYWwgbW9kdWxlIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCisKKworX3NhbXBsZV9tZXNzYWdlID0gIiIiXAorUmV0dXJuLVBhdGg6IDxna2pAZ3JlZ29yeWtqb2huc29uLmNvbT4KK1gtT3JpZ2luYWwtVG86IGdraitwZXJzb25AbG9jYWxob3N0CitEZWxpdmVyZWQtVG86IGdraitwZXJzb25AbG9jYWxob3N0CitSZWNlaXZlZDogZnJvbSBsb2NhbGhvc3QgKGxvY2FsaG9zdCBbMTI3LjAuMC4xXSkKKyAgICAgICAgYnkgYW5keS5ncmVnb3J5a2pvaG5zb24uY29tIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIDM1NkVEOUREMTcKKyAgICAgICAgZm9yIDxna2orcGVyc29uQGxvY2FsaG9zdD47IFdlZCwgMTMgSnVsIDIwMDUgMTc6MjM6MTYgLTA0MDAgKEVEVCkKK0RlbGl2ZXJlZC1UbzogZ2tqQHN1bmRhbmNlLmdyZWdvcnlram9obnNvbi5jb20KK1JlY2VpdmVkOiBmcm9tIGxvY2FsaG9zdCBbMTI3LjAuMC4xXQorICAgICAgICBieSBsb2NhbGhvc3Qgd2l0aCBQT1AzIChmZXRjaG1haWwtNi4yLjUpCisgICAgICAgIGZvciBna2orcGVyc29uQGxvY2FsaG9zdCAoc2luZ2xlLWRyb3ApOyBXZWQsIDEzIEp1bCAyMDA1IDE3OjIzOjE2IC0wNDAwIChFRFQpCitSZWNlaXZlZDogZnJvbSBhbmR5LmdyZWdvcnlram9obnNvbi5jb20gKGFuZHkuZ3JlZ29yeWtqb2huc29uLmNvbSBbNjQuMzIuMjM1LjIyOF0pCisgICAgICAgIGJ5IHN1bmRhbmNlLmdyZWdvcnlram9obnNvbi5jb20gKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgNUIwNTYzMTY3NDYKKyAgICAgICAgZm9yIDxna2pAZ3JlZ29yeWtqb2huc29uLmNvbT47IFdlZCwgMTMgSnVsIDIwMDUgMTc6MjM6MTEgLTA0MDAgKEVEVCkKK1JlY2VpdmVkOiBieSBhbmR5LmdyZWdvcnlram9obnNvbi5jb20gKFBvc3RmaXgsIGZyb20gdXNlcmlkIDEwMDApCisgICAgICAgIGlkIDQ5MENEOUREMTc7IFdlZCwgMTMgSnVsIDIwMDUgMTc6MjM6MTEgLTA0MDAgKEVEVCkKK0RhdGU6IFdlZCwgMTMgSnVsIDIwMDUgMTc6MjM6MTEgLTA0MDAKK0Zyb206ICJHcmVnb3J5IEsuIEpvaG5zb24iIDxna2pAZ3JlZ29yeWtqb2huc29uLmNvbT4KK1RvOiBna2pAZ3JlZ29yeWtqb2huc29uLmNvbQorU3ViamVjdDogU2FtcGxlIG1lc3NhZ2UKK01lc3NhZ2UtSUQ6IDwyMDA1MDcxMzIxMjMxMS5HQzQ3MDFAYW5keS5ncmVnb3J5a2pvaG5zb24uY29tPgorTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iTk11TXo5bnQwNXc4MGQ0KyIKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorVXNlci1BZ2VudDogTXV0dC8xLjUuOWkKKworCistLU5NdU16OW50MDV3ODBkNCsKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCisKK1RoaXMgaXMgYSBzYW1wbGUgbWVzc2FnZS4KKworLS0KK0dyZWdvcnkgSy4gSm9obnNvbgorCistLU5NdU16OW50MDV3ODBkNCsKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0idGV4dC5neiIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCitINHNJQ00yRDFVSUFBM1JsZUhRQUM4bklMRllBb2tTRmt0U0tFb1cwekp4VVBhN3d6SklNaFpMeWZJV2N6THpVWWowdUFIVHMKKzNGWWxBQUFBCisKKy0tTk11TXo5bnQwNXc4MGQ0Ky0tCisiIiIKKworX3NhbXBsZV9oZWFkZXJzID0geworICAgICJSZXR1cm4tUGF0aCI6Ijxna2pAZ3JlZ29yeWtqb2huc29uLmNvbT4iLAorICAgICJYLU9yaWdpbmFsLVRvIjoiZ2tqK3BlcnNvbkBsb2NhbGhvc3QiLAorICAgICJEZWxpdmVyZWQtVG8iOiJna2orcGVyc29uQGxvY2FsaG9zdCIsCisgICAgIlJlY2VpdmVkIjoiIiJmcm9tIGxvY2FsaG9zdCAobG9jYWxob3N0IFsxMjcuMC4wLjFdKQorICAgICAgICBieSBhbmR5LmdyZWdvcnlram9obnNvbi5jb20gKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgMzU2RUQ5REQxNworICAgICAgICBmb3IgPGdraitwZXJzb25AbG9jYWxob3N0PjsgV2VkLCAxMyBKdWwgMjAwNSAxNzoyMzoxNiAtMDQwMCAoRURUKSIiIiwKKyAgICAiRGVsaXZlcmVkLVRvIjoiZ2tqQHN1bmRhbmNlLmdyZWdvcnlram9obnNvbi5jb20iLAorICAgICJSZWNlaXZlZCI6IiIiZnJvbSBsb2NhbGhvc3QgWzEyNy4wLjAuMV0KKyAgICAgICAgYnkgbG9jYWxob3N0IHdpdGggUE9QMyAoZmV0Y2htYWlsLTYuMi41KQorICAgICAgICBmb3IgZ2tqK3BlcnNvbkBsb2NhbGhvc3QgKHNpbmdsZS1kcm9wKTsgV2VkLCAxMyBKdWwgMjAwNSAxNzoyMzoxNiAtMDQwMCAoRURUKSIiIiwKKyAgICAiUmVjZWl2ZWQiOiIiImZyb20gYW5keS5ncmVnb3J5a2pvaG5zb24uY29tIChhbmR5LmdyZWdvcnlram9obnNvbi5jb20gWzY0LjMyLjIzNS4yMjhdKQorICAgICAgICBieSBzdW5kYW5jZS5ncmVnb3J5a2pvaG5zb24uY29tIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIDVCMDU2MzE2NzQ2CisgICAgICAgIGZvciA8Z2tqQGdyZWdvcnlram9obnNvbi5jb20+OyBXZWQsIDEzIEp1bCAyMDA1IDE3OjIzOjExIC0wNDAwIChFRFQpIiIiLAorICAgICJSZWNlaXZlZCI6IiIiYnkgYW5keS5ncmVnb3J5a2pvaG5zb24uY29tIChQb3N0Zml4LCBmcm9tIHVzZXJpZCAxMDAwKQorICAgICAgICBpZCA0OTBDRDlERDE3OyBXZWQsIDEzIEp1bCAyMDA1IDE3OjIzOjExIC0wNDAwIChFRFQpIiIiLAorICAgICJEYXRlIjoiV2VkLCAxMyBKdWwgMjAwNSAxNzoyMzoxMSAtMDQwMCIsCisgICAgIkZyb20iOiIiIiJHcmVnb3J5IEsuIEpvaG5zb24iIDxna2pAZ3JlZ29yeWtqb2huc29uLmNvbT4iIiIsCisgICAgIlRvIjoiZ2tqQGdyZWdvcnlram9obnNvbi5jb20iLAorICAgICJTdWJqZWN0IjoiU2FtcGxlIG1lc3NhZ2UiLAorICAgICJNaW1lLVZlcnNpb24iOiIxLjAiLAorICAgICJDb250ZW50LVR5cGUiOiIiIm11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ik5NdU16OW50MDV3ODBkNCtcIiIiIiwKKyAgICAiQ29udGVudC1EaXNwb3NpdGlvbiI6ImlubGluZSIsCisgICAgIlVzZXItQWdlbnQiOiAiTXV0dC8xLjUuOWkiIH0KKworX3NhbXBsZV9wYXlsb2FkcyA9ICgiIiJUaGlzIGlzIGEgc2FtcGxlIG1lc3NhZ2UuCisKKy0tCitHcmVnb3J5IEsuIEpvaG5zb24KKyIiIiwKKyIiIkg0c0lDTTJEMVVJQUEzUmxlSFFBQzhuSUxGWUFva1NGa3RTS0VvVzB6SnhVUGE3d3pKSU1oWkx5ZklXY3pMelVZajB1QUhUcworM0ZZbEFBQUEKKyIiIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSAoVGVzdE1haWxib3hTdXBlcmNsYXNzLCBUZXN0TWFpbGRpciwgVGVzdE1ib3gsIFRlc3RNTURGLCBUZXN0TUgsCisgICAgICAgICAgICAgVGVzdEJhYnlsLCBUZXN0TWVzc2FnZSwgVGVzdE1haWxkaXJNZXNzYWdlLCBUZXN0TWJveE1lc3NhZ2UsCisgICAgICAgICAgICAgVGVzdE1ITWVzc2FnZSwgVGVzdEJhYnlsTWVzc2FnZSwgVGVzdE1NREZNZXNzYWdlLAorICAgICAgICAgICAgIFRlc3RNZXNzYWdlQ29udmVyc2lvbiwgVGVzdFByb3h5RmlsZSwgVGVzdFBhcnRpYWxGaWxlLAorICAgICAgICAgICAgIE1haWxkaXJUZXN0Q2FzZSkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKyAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlOGVhYwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKQEAgLTAsMCArMSwzMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCisKK2NsYXNzIEludFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGZ1bGwgcmFuZ2Ugb2YgUHl0aG9uIGludHMuCisgICAgICAgIG4gPSBzeXMubWF4aW50CisgICAgICAgIHdoaWxlIG46CisgICAgICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gKC1uLCBuKToKKyAgICAgICAgICAgICAgICBzID0gbWFyc2hhbC5kdW1wcyhleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgICAgIG1hcnNoYWwuZHVtcChleHBlY3RlZCwgZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSkKKyAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBuID0gbiA+PiAxCisgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfaW50NjQoc2VsZik6CisgICAgICAgICMgU2ltdWxhdGUgaW50IG1hcnNoYWxpbmcgb24gYSA2NC1iaXQgYm94LiAgVGhpcyBpcyBtb3N0IGludGVyZXN0aW5nIGlmCisgICAgICAgICMgd2UncmUgcnVubmluZyB0aGUgdGVzdCBvbiBhIDMyLWJpdCBib3gsIG9mIGNvdXJzZS4KKworICAgICAgICBkZWYgdG9fbGl0dGxlX2VuZGlhbl9zdHJpbmcodmFsdWUsIG5ieXRlcyk6CisgICAgICAgICAgICBieXRlcyA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuYnl0ZXMpOgorICAgICAgICAgICAgICAgIGJ5dGVzLmFwcGVuZChjaHIodmFsdWUgJiAweGZmKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA+Pj0gOAorICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oYnl0ZXMpCisKKyAgICAgICAgbWF4aW50NjQgPSAoMUwgPDwgNjMpIC0gMQorICAgICAgICBtaW5pbnQ2NCA9IC1tYXhpbnQ2NC0xCisKKyAgICAgICAgZm9yIGJhc2UgaW4gbWF4aW50NjQsIG1pbmludDY0LCAtbWF4aW50NjQsIC0obWluaW50NjQgPj4gMSk6CisgICAgICAgICAgICB3aGlsZSBiYXNlOgorICAgICAgICAgICAgICAgIHMgPSAnSScgKyB0b19saXR0bGVfZW5kaWFuX3N0cmluZyhiYXNlLCA4KQorICAgICAgICAgICAgICAgIGdvdCA9IG1hcnNoYWwubG9hZHMocykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGdvdCkKKyAgICAgICAgICAgICAgICBpZiBiYXNlID09IC0xOiAgIyBhIGZpeGVkLXBvaW50IGZvciBzaGlmdGluZyByaWdodCAxCisgICAgICAgICAgICAgICAgICAgIGJhc2UgPSAwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA+Pj0gMQorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgZm9yIGIgaW4gKFRydWUsIEZhbHNlKToKKyAgICAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgbmV3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGIpLCB0eXBlKG5ldykpCisgICAgICAgICAgICBtYXJzaGFsLmR1bXAoYiwgZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSkKKyAgICAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZChmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBuZXcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYiksIHR5cGUobmV3KSkKKworY2xhc3MgRmxvYXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYSBmZXcgZmxvYXRzCisgICAgICAgIHNtYWxsID0gMWUtMjUKKyAgICAgICAgbiA9IHN5cy5tYXhpbnQgKiAzLjdlMjUwCisgICAgICAgIHdoaWxlIG4gPiBzbWFsbDoKKyAgICAgICAgICAgIGZvciBleHBlY3RlZCBpbiAoLW4sIG4pOgorICAgICAgICAgICAgICAgIGYgPSBmbG9hdChleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBzID0gbWFyc2hhbC5kdW1wcyhmKQorICAgICAgICAgICAgICAgIGdvdCA9IG1hcnNoYWwubG9hZHMocykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYsIGdvdCkKKyAgICAgICAgICAgICAgICBtYXJzaGFsLmR1bXAoZiwgZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSkKKyAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYsIGdvdCkKKyAgICAgICAgICAgIG4gLz0gMTIzLjQ1NjcKKworICAgICAgICBmID0gMC4wCisgICAgICAgIHMgPSBtYXJzaGFsLmR1bXBzKGYsIDIpCisgICAgICAgIGdvdCA9IG1hcnNoYWwubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBnb3QpCisgICAgICAgICMgYW5kIHdpdGggdmVyc2lvbiA8PSAxIChmbG9hdHMgbWFyc2hhbGxlZCBkaWZmZXJlbnRseSB0aGVuKQorICAgICAgICBzID0gbWFyc2hhbC5kdW1wcyhmLCAxKQorICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwgZ290KQorCisgICAgICAgIG4gPSBzeXMubWF4aW50ICogMy43ZS0yNTAKKyAgICAgICAgd2hpbGUgbiA8IHNtYWxsOgorICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgtbiwgbik6CisgICAgICAgICAgICAgICAgZiA9IGZsb2F0KGV4cGVjdGVkKQorCisgICAgICAgICAgICAgICAgcyA9IG1hcnNoYWwuZHVtcHMoZikKKyAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBnb3QpCisKKyAgICAgICAgICAgICAgICBzID0gbWFyc2hhbC5kdW1wcyhmLCAxKQorICAgICAgICAgICAgICAgIGdvdCA9IG1hcnNoYWwubG9hZHMocykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYsIGdvdCkKKworICAgICAgICAgICAgICAgIG1hcnNoYWwuZHVtcChmLCBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpKQorICAgICAgICAgICAgICAgIGdvdCA9IG1hcnNoYWwubG9hZChmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwgZ290KQorCisgICAgICAgICAgICAgICAgbWFyc2hhbC5kdW1wKGYsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIiksIDEpCisgICAgICAgICAgICAgICAgZ290ID0gbWFyc2hhbC5sb2FkKGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBnb3QpCisgICAgICAgICAgICBuICo9IDEyMy40NTY3CisgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCitjbGFzcyBTdHJpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gW3UiIiwgdSJBbmRy6CBQcmV2aW4iLCB1ImFiYyIsIHUiICIqMTAwMDBdOgorICAgICAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBuZXcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocyksIHR5cGUobmV3KSkKKyAgICAgICAgICAgIG1hcnNoYWwuZHVtcChzLCBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpKQorICAgICAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkKGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIG5ldykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzKSwgdHlwZShuZXcpKQorICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gWyIiLCAiQW5kcuggUHJldmluIiwgImFiYyIsICIgIioxMDAwMF06CisgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIG5ldykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzKSwgdHlwZShuZXcpKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHMsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCisgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgbmV3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHMpLCB0eXBlKG5ldykpCisgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfYnVmZmVyKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiBbIiIsICJBbmRy6CBQcmV2aW4iLCAiYWJjIiwgIiAiKjEwMDAwXToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgYiA9IGJ1ZmZlcihzKQorICAgICAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKGIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBuZXcpCisgICAgICAgICAgICBtYXJzaGFsLmR1bXAoYiwgZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSkKKyAgICAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZChmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBuZXcpCisgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCitjbGFzcyBFeGNlcHRpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKFN0b3BJdGVyYXRpb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFN0b3BJdGVyYXRpb24sIG5ldykKKworY2xhc3MgQ29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb2RlKHNlbGYpOgorICAgICAgICBjbyA9IEV4Y2VwdGlvblRlc3RDYXNlLnRlc3RfZXhjZXB0aW9ucy5mdW5jX2NvZGUKKyAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKGNvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbywgbmV3KQorCitjbGFzcyBDb250YWluZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZCA9IHsnYXN0cmluZyc6ICdmb29AYmFyLmJhei5zcGFtJywKKyAgICAgICAgICdhZmxvYXQnOiA3MjgzLjQzLAorICAgICAgICAgJ2FuaW50JzogMioqMjAsCisgICAgICAgICAnYXNob3J0bG9uZyc6IDJMLAorICAgICAgICAgJ2FsaXN0JzogWycuenl4LjQxJ10sCisgICAgICAgICAnYXR1cGxlJzogKCcuenl4LjQxJywpKjEwLAorICAgICAgICAgJ2Fib29sZWFuJzogRmFsc2UsCisgICAgICAgICAnYXVuaWNvZGUnOiB1IkFuZHLoIFByZXZpbiIKKyAgICAgICAgIH0KKyAgICBkZWYgdGVzdF9kaWN0KHNlbGYpOgorICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQsIG5ldykKKyAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuZCwgZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSkKKyAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkKGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLCBuZXcpCisgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfbGlzdChzZWxmKToKKyAgICAgICAgbHN0ID0gc2VsZi5kLml0ZW1zKCkKKyAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKGxzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBuZXcpCisgICAgICAgIG1hcnNoYWwuZHVtcChsc3QsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCisgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZChmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgbmV3KQorICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X3R1cGxlKHNlbGYpOgorICAgICAgICB0ID0gdHVwbGUoc2VsZi5kLmtleXMoKSkKKyAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIG5ldykKKyAgICAgICAgbWFyc2hhbC5kdW1wKHQsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCisgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZChmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIG5ldykKKyAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9zZXRzKHNlbGYpOgorICAgICAgICBmb3IgY29uc3RydWN0b3IgaW4gKHNldCwgZnJvemVuc2V0KToKKyAgICAgICAgICAgIHQgPSBjb25zdHJ1Y3RvcihzZWxmLmQua2V5cygpKQorICAgICAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBuZXcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShuZXcsIGNvbnN0cnVjdG9yKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQodCksIGlkKG5ldykpCisgICAgICAgICAgICBtYXJzaGFsLmR1bXAodCwgZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSkKKyAgICAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZChmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBuZXcpCisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworY2xhc3MgQnVnc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9idWdfNTg4ODQ1MihzZWxmKToKKyAgICAgICAgIyBTaW1wbGUtbWluZGVkIGNoZWNrIGZvciBTRiA1ODg0NTI6IERlYnVnIGJ1aWxkIGNyYXNoZXMKKyAgICAgICAgbWFyc2hhbC5kdW1wcyhbMTI4XSAqIDEwMDApCisKKyAgICBkZWYgdGVzdF9wYXRjaF84NzMyMjQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgbWFyc2hhbC5sb2FkcywgJzAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIG1hcnNoYWwubG9hZHMsICdmJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBtYXJzaGFsLmxvYWRzLCBtYXJzaGFsLmR1bXBzKDVMKVs6LTFdKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9hcmd1bWVudChzZWxmKToKKyAgICAgICAgIyBQeXRob24gMi40LjAgY3Jhc2hlcyBmb3IgYW55IGNhbGwgdG8gbWFyc2hhbC5kdW1wcyh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyg1LCAwKSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKDUsIDEpKSwgNSkKKworICAgIGRlZiB0ZXN0X2Z1enooc2VsZik6CisgICAgICAgICMgc2ltcGxlIHRlc3QgdGhhdCBpdCdzIGF0IGxlYXN0IG5vdCAqdG90YWxseSogdHJpdmlhbCB0bworICAgICAgICAjIGNyYXNoIGZyb20gYmFkIG1hcnNoYWwgZGF0YQorICAgICAgICBmb3IgYyBpbiBbY2hyKGkpIGZvciBpIGluIHJhbmdlKDI1NildOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1hcnNoYWwubG9hZHMoYykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfbG9hZHNfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBzID0gJ2MnICsgKCdYJyAqIDQqNCkgKyAneycgKiAyKioyMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmxvYWRzLCBzKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaW9uX2xpbWl0KHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIGRlZXBseSBuZXN0ZWQgc3RydWN0dXJlLgorICAgICAgICBoZWFkID0gbGFzdCA9IFtdCisgICAgICAgICMgVGhlIG1heCBzdGFjayBkZXB0aCBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlIGluIFB5dGhvbi9tYXJzaGFsLmMuCisgICAgICAgIE1BWF9NQVJTSEFMX1NUQUNLX0RFUFRIID0gMjAwMAorICAgICAgICBmb3IgaSBpbiByYW5nZShNQVhfTUFSU0hBTF9TVEFDS19ERVBUSCAtIDIpOgorICAgICAgICAgICAgbGFzdC5hcHBlbmQoWzBdKQorICAgICAgICAgICAgbGFzdCA9IGxhc3RbLTFdCisKKyAgICAgICAgIyBWZXJpZnkgd2UgZG9uJ3QgYmxvdyBvdXQgdGhlIHN0YWNrIHdpdGggZHVtcHMvbG9hZC4KKyAgICAgICAgZGF0YSA9IG1hcnNoYWwuZHVtcHMoaGVhZCkKKyAgICAgICAgbmV3X2hlYWQgPSBtYXJzaGFsLmxvYWRzKGRhdGEpCisgICAgICAgICMgRG9uJ3QgdXNlID09IHRvIGNvbXBhcmUgb2JqZWN0cywgaXQgY2FuIGV4Y2VlZCB0aGUgcmVjdXJzaW9uIGxpbWl0LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuZXdfaGVhZCksIGxlbihoZWFkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmV3X2hlYWRbMF0pLCBsZW4oaGVhZFswXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5ld19oZWFkWy0xXSksIGxlbihoZWFkWy0xXSkpCisKKyAgICAgICAgbGFzdC5hcHBlbmQoWzBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmR1bXBzLCBoZWFkKQorCisgICAgZGVmIHRlc3RfZXhhY3RfdHlwZV9tYXRjaChzZWxmKToKKyAgICAgICAgIyBGb3JtZXIgYnVnOgorICAgICAgICAjICAgPj4+IGNsYXNzIEludChpbnQpOiBwYXNzCisgICAgICAgICMgICA+Pj4gdHlwZShsb2FkcyhkdW1wcyhJbnQoKSkpKQorICAgICAgICAjICAgPHR5cGUgJ2ludCc+CisgICAgICAgIGZvciB0eXAgaW4gKGludCwgbG9uZywgZmxvYXQsIGNvbXBsZXgsIHR1cGxlLCBsaXN0LCBkaWN0LCBzZXQsIGZyb3plbnNldCk6CisgICAgICAgICAgICAjIE5vdGU6IHN0ciBhbmQgdW5pY29kZSBzdWJjbGFzc2VzIGFyZSBub3QgdGVzdGVkIGJlY2F1c2UgdGhleSBnZXQgaGFuZGxlZAorICAgICAgICAgICAgIyBieSBtYXJzaGFsJ3Mgcm91dGluZXMgZm9yIG9iamVjdHMgc3VwcG9ydGluZyB0aGUgYnVmZmVyIEFQSS4KKyAgICAgICAgICAgIHN1YnR5cCA9IHR5cGUoJ3N1YnR5cCcsICh0eXAsKSwge30pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmR1bXBzLCBzdWJ0eXAoKSkKKworICAgICMgSXNzdWUgIzE3OTIgaW50cm9kdWNlZCBhIGNoYW5nZSBpbiBob3cgbWFyc2hhbCBpbmNyZWFzZXMgdGhlIHNpemUgb2YgaXRzCisgICAgIyBpbnRlcm5hbCBidWZmZXI7IHRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgdGhlIG5ldyBjb2RlIGlzIGV4ZXJjaXNlZC4KKyAgICBkZWYgdGVzdF9sYXJnZV9tYXJzaGFsKHNlbGYpOgorICAgICAgICBzaXplID0gaW50KDFlNikKKyAgICAgICAgdGVzdFN0cmluZyA9ICdhYmMnICogc2l6ZQorICAgICAgICBtYXJzaGFsLmR1bXBzKHRlc3RTdHJpbmcpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2xvbmdzKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3MDE5OiBtYXJzaGFsLmxvYWRzIHNob3VsZG4ndCBwcm9kdWNlIHVubm9ybWFsaXplZCBQeUxvbmdzCisgICAgICAgIGludmFsaWRfc3RyaW5nID0gJ2xceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkcywgaW52YWxpZF9zdHJpbmcpCisKK0xBUkdFX1NJWkUgPSAyKiozMQorY2hhcmFjdGVyX3NpemUgPSA0IGlmIHN5cy5tYXh1bmljb2RlID4gMHhGRkZGIGVsc2UgMgorcG9pbnRlcl9zaXplID0gOCBpZiBzeXMubWF4c2l6ZSA+IDB4RkZGRkZGRkYgZWxzZSA0CisKK0B1bml0dGVzdC5za2lwSWYoTEFSR0VfU0laRSA+IHN5cy5tYXhzaXplLCAidGVzdCBjYW5ub3QgcnVuIG9uIDMyLWJpdCBzeXN0ZW1zIikKK2NsYXNzIExhcmdlVmFsdWVzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjaGVja191bm1hcnNoYWxsYWJsZShzZWxmLCBkYXRhKToKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3Rfc3VwcG9ydC51bmxpbmssIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwuZHVtcCwgZGF0YSwgZikKKworICAgIEB0ZXN0X3N1cHBvcnQucHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPUxBUkdFX1NJWkUsIG1lbXVzZT0xLCBkcnlfcnVuPUZhbHNlKQorICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmLCBzaXplKToKKyAgICAgICAgc2VsZi5jaGVja191bm1hcnNoYWxsYWJsZSgneCcgKiBzaXplKQorCisgICAgQHRlc3Rfc3VwcG9ydC5wcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9TEFSR0VfU0laRSwKKyAgICAgICAgICAgIG1lbXVzZT1jaGFyYWN0ZXJfc2l6ZSwgZHJ5X3J1bj1GYWxzZSkKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYsIHNpemUpOgorICAgICAgICBzZWxmLmNoZWNrX3VubWFyc2hhbGxhYmxlKHUneCcgKiBzaXplKQorCisgICAgQHRlc3Rfc3VwcG9ydC5wcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9TEFSR0VfU0laRSwKKyAgICAgICAgICAgIG1lbXVzZT1wb2ludGVyX3NpemUsIGRyeV9ydW49RmFsc2UpCisgICAgZGVmIHRlc3RfdHVwbGUoc2VsZiwgc2l6ZSk6CisgICAgICAgIHNlbGYuY2hlY2tfdW5tYXJzaGFsbGFibGUoKE5vbmUsKSAqIHNpemUpCisKKyAgICBAdGVzdF9zdXBwb3J0LnByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1MQVJHRV9TSVpFLAorICAgICAgICAgICAgbWVtdXNlPXBvaW50ZXJfc2l6ZSwgZHJ5X3J1bj1GYWxzZSkKKyAgICBkZWYgdGVzdF9saXN0KHNlbGYsIHNpemUpOgorICAgICAgICBzZWxmLmNoZWNrX3VubWFyc2hhbGxhYmxlKFtOb25lXSAqIHNpemUpCisKKyAgICBAdGVzdF9zdXBwb3J0LnByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1MQVJHRV9TSVpFLAorICAgICAgICAgICAgbWVtdXNlPXBvaW50ZXJfc2l6ZSoxMiArIHN5cy5nZXRzaXplb2YoTEFSR0VfU0laRS0xKSwKKyAgICAgICAgICAgIGRyeV9ydW49RmFsc2UpCisgICAgZGVmIHRlc3Rfc2V0KHNlbGYsIHNpemUpOgorICAgICAgICBzZWxmLmNoZWNrX3VubWFyc2hhbGxhYmxlKHNldChyYW5nZShzaXplKSkpCisKKyAgICBAdGVzdF9zdXBwb3J0LnByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1MQVJHRV9TSVpFLAorICAgICAgICAgICAgbWVtdXNlPXBvaW50ZXJfc2l6ZSoxMiArIHN5cy5nZXRzaXplb2YoTEFSR0VfU0laRS0xKSwKKyAgICAgICAgICAgIGRyeV9ydW49RmFsc2UpCisgICAgZGVmIHRlc3RfZnJvemVuc2V0KHNlbGYsIHNpemUpOgorICAgICAgICBzZWxmLmNoZWNrX3VubWFyc2hhbGxhYmxlKGZyb3plbnNldChyYW5nZShzaXplKSkpCisKKyAgICBAdGVzdF9zdXBwb3J0LnByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1MQVJHRV9TSVpFLCBtZW11c2U9MSwgZHJ5X3J1bj1GYWxzZSkKKyAgICBkZWYgdGVzdF9ieXRlYXJyYXkoc2VsZiwgc2l6ZSk6CisgICAgICAgIHNlbGYuY2hlY2tfdW5tYXJzaGFsbGFibGUoYnl0ZWFycmF5KHNpemUpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEludFRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1Rlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZVRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVyVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25UZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1Z3NUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhcmdlVmFsdWVzVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWF0aC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21hdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0NDc1ZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21hdGgucHkKQEAgLTAsMCArMSwxMDMwIEBACisjIFB5dGhvbiB0ZXN0IHNldCAtLSBtYXRoIG1vZHVsZQorIyBYWFhYIFNob3VsZCBub3QgZG8gdGVzdHMgYXJvdW5kIHplcm8gb25seQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHZlcmJvc2UKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG1hdGgKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cnVjdAorCitlcHMgPSAxRS0wNQorTkFOID0gZmxvYXQoJ25hbicpCitJTkYgPSBmbG9hdCgnaW5mJykKK05JTkYgPSBmbG9hdCgnLWluZicpCisKKyMgZGVjb3JhdG9yIGZvciBza2lwcGluZyB0ZXN0cyBvbiBub24tSUVFRSA3NTQgcGxhdGZvcm1zCityZXF1aXJlc19JRUVFXzc1NCA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoCisgICAgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorCisjIGRldGVjdCBldmlkZW5jZSBvZiBkb3VibGUtcm91bmRpbmc6IGZzdW0gaXMgbm90IGFsd2F5cyBjb3JyZWN0bHkKKyMgcm91bmRlZCBvbiBtYWNoaW5lcyB0aGF0IHN1ZmZlciBmcm9tIGRvdWJsZSByb3VuZGluZy4KK3gsIHkgPSAxZTE2LCAyLjk5OTkgIyB1c2UgdGVtcG9yYXJ5IHZhbHVlcyB0byBkZWZlYXQgcGVlcGhvbGUgb3B0aW1pemVyCitIQVZFX0RPVUJMRV9ST1VORElORyA9ICh4ICsgeSA9PSAxZTE2ICsgNCkKKworIyBsb2NhdGUgZmlsZSB3aXRoIHRlc3QgdmFsdWVzCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGZpbGUgPSBzeXMuYXJndlswXQorZWxzZToKKyAgICBmaWxlID0gX19maWxlX18KK3Rlc3RfZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpIG9yIG9zLmN1cmRpcgorbWF0aF90ZXN0Y2FzZXMgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdtYXRoX3Rlc3RjYXNlcy50eHQnKQordGVzdF9maWxlID0gb3MucGF0aC5qb2luKHRlc3RfZGlyLCAnY21hdGhfdGVzdGNhc2VzLnR4dCcpCisKK2RlZiB0b191bHBzKHgpOgorICAgICIiIkNvbnZlcnQgYSBub24tTmFOIGZsb2F0IHggdG8gYW4gaW50ZWdlciwgaW4gc3VjaCBhIHdheSB0aGF0CisgICAgYWRqYWNlbnQgZmxvYXRzIGFyZSBjb252ZXJ0ZWQgdG8gYWRqYWNlbnQgaW50ZWdlcnMuICBUaGVuCisgICAgYWJzKHVscHMoeCkgLSB1bHBzKHkpKSBnaXZlcyB0aGUgZGlmZmVyZW5jZSBpbiB1bHBzIGJldHdlZW4gdHdvCisgICAgZmxvYXRzLgorCisgICAgVGhlIHJlc3VsdHMgZnJvbSB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBtYWtlIHNlbnNlIG9uIHBsYXRmb3JtcworICAgIHdoZXJlIEMgZG91YmxlcyBhcmUgcmVwcmVzZW50ZWQgaW4gSUVFRSA3NTQgYmluYXJ5NjQgZm9ybWF0LgorCisgICAgIiIiCisgICAgbiA9IHN0cnVjdC51bnBhY2soJzxxJywgc3RydWN0LnBhY2soJzxkJywgeCkpWzBdCisgICAgaWYgbiA8IDA6CisgICAgICAgIG4gPSB+KG4rMioqNjMpCisgICAgcmV0dXJuIG4KKworZGVmIHVscHNfY2hlY2soZXhwZWN0ZWQsIGdvdCwgdWxwcz0yMCk6CisgICAgIiIiR2l2ZW4gbm9uLU5hTiBmbG9hdHMgYGV4cGVjdGVkYCBhbmQgYGdvdGAsCisgICAgY2hlY2sgdGhhdCB0aGV5J3JlIGVxdWFsIHRvIHdpdGhpbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVscHMuCisKKyAgICBSZXR1cm5zIE5vbmUgb24gc3VjY2VzcyBhbmQgYW4gZXJyb3IgbWVzc2FnZSBvbiBmYWlsdXJlLiIiIgorCisgICAgdWxwc19lcnJvciA9IHRvX3VscHMoZ290KSAtIHRvX3VscHMoZXhwZWN0ZWQpCisgICAgaWYgYWJzKHVscHNfZXJyb3IpIDw9IHVscHM6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuICJlcnJvciA9IHt9IHVscHM7IHBlcm1pdHRlZCBlcnJvciA9IHt9IHVscHMiLmZvcm1hdCh1bHBzX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxwcykKKworZGVmIGFjY19jaGVjayhleHBlY3RlZCwgZ290LCByZWxfZXJyPTJlLTE1LCBhYnNfZXJyID0gNWUtMzIzKToKKyAgICAiIiJEZXRlcm1pbmUgd2hldGhlciBub24tTmFOIGZsb2F0cyBhIGFuZCBiIGFyZSBlcXVhbCB0byB3aXRoaW4gYQorICAgIChzbWFsbCkgcm91bmRpbmcgZXJyb3IuICBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHJlbF9lcnIgYW5kCisgICAgYWJzX2VyciBhcmUgY2hvc2VuIHRvIGJlIHN1aXRhYmxlIGZvciBwbGF0Zm9ybXMgd2hlcmUgYSBmbG9hdCBpcworICAgIHJlcHJlc2VudGVkIGJ5IGFuIElFRUUgNzU0IGRvdWJsZS4gIFRoZXkgYWxsb3cgYW4gZXJyb3Igb2YgYmV0d2VlbgorICAgIDkgYW5kIDE5IHVscHMuIiIiCisKKyAgICAjIG5lZWQgdG8gc3BlY2lhbCBjYXNlIGluZmluaXRpZXMsIHNpbmNlIGluZiAtIGluZiBnaXZlcyBuYW4KKyAgICBpZiBtYXRoLmlzaW5mKGV4cGVjdGVkKSBhbmQgZ290ID09IGV4cGVjdGVkOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZXJyb3IgPSBnb3QgLSBleHBlY3RlZAorCisgICAgcGVybWl0dGVkX2Vycm9yID0gbWF4KGFic19lcnIsIHJlbF9lcnIgKiBhYnMoZXhwZWN0ZWQpKQorICAgIGlmIGFicyhlcnJvcikgPCBwZXJtaXR0ZWRfZXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuICJlcnJvciA9IHt9OyBwZXJtaXR0ZWQgZXJyb3IgPSB7fSIuZm9ybWF0KGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXR0ZWRfZXJyb3IpCisKK2RlZiBwYXJzZV9tdGVzdGZpbGUoZm5hbWUpOgorICAgICIiIlBhcnNlIGEgZmlsZSB3aXRoIHRlc3QgdmFsdWVzCisKKyAgICAtLSBzdGFydHMgYSBjb21tZW50CisgICAgYmxhbmsgbGluZXMsIG9yIGxpbmVzIGNvbnRhaW5pbmcgb25seSBhIGNvbW1lbnQsIGFyZSBpZ25vcmVkCisgICAgb3RoZXIgbGluZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdGhlIGZvcm0KKyAgICAgIGlkIGZuIGFyZyAtPiBleHBlY3RlZCBbZmxhZ10qCisKKyAgICAiIiIKKyAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIGZwOgorICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICMgc3RyaXAgY29tbWVudHMsIGFuZCBza2lwIGJsYW5rIGxpbmVzCisgICAgICAgICAgICBpZiAnLS0nIGluIGxpbmU6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOmxpbmUuaW5kZXgoJy0tJyldCisgICAgICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGxocywgcmhzID0gbGluZS5zcGxpdCgnLT4nKQorICAgICAgICAgICAgaWQsIGZuLCBhcmcgPSBsaHMuc3BsaXQoKQorICAgICAgICAgICAgcmhzX3BpZWNlcyA9IHJocy5zcGxpdCgpCisgICAgICAgICAgICBleHAgPSByaHNfcGllY2VzWzBdCisgICAgICAgICAgICBmbGFncyA9IHJoc19waWVjZXNbMTpdCisKKyAgICAgICAgICAgIHlpZWxkIChpZCwgZm4sIGZsb2F0KGFyZyksIGZsb2F0KGV4cCksIGZsYWdzKQorCitkZWYgcGFyc2VfdGVzdGZpbGUoZm5hbWUpOgorICAgICIiIlBhcnNlIGEgZmlsZSB3aXRoIHRlc3QgdmFsdWVzCisKKyAgICBFbXB0eSBsaW5lcyBvciBsaW5lcyBzdGFydGluZyB3aXRoIC0tIGFyZSBpZ25vcmVkCisgICAgeWllbGRzIGlkLCBmbiwgYXJnX3JlYWwsIGFyZ19pbWFnLCBleHBfcmVhbCwgZXhwX2ltYWcKKyAgICAiIiIKKyAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIGZwOgorICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICMgc2tpcCBjb21tZW50IGxpbmVzIGFuZCBibGFuayBsaW5lcworICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCctLScpIG9yIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbGhzLCByaHMgPSBsaW5lLnNwbGl0KCctPicpCisgICAgICAgICAgICBpZCwgZm4sIGFyZ19yZWFsLCBhcmdfaW1hZyA9IGxocy5zcGxpdCgpCisgICAgICAgICAgICByaHNfcGllY2VzID0gcmhzLnNwbGl0KCkKKyAgICAgICAgICAgIGV4cF9yZWFsLCBleHBfaW1hZyA9IHJoc19waWVjZXNbMF0sIHJoc19waWVjZXNbMV0KKyAgICAgICAgICAgIGZsYWdzID0gcmhzX3BpZWNlc1syOl0KKworICAgICAgICAgICAgeWllbGQgKGlkLCBmbiwKKyAgICAgICAgICAgICAgICAgICBmbG9hdChhcmdfcmVhbCksIGZsb2F0KGFyZ19pbWFnKSwKKyAgICAgICAgICAgICAgICAgICBmbG9hdChleHBfcmVhbCksIGZsb2F0KGV4cF9pbWFnKSwKKyAgICAgICAgICAgICAgICAgICBmbGFncworICAgICAgICAgICAgICAgICAgKQorCitjbGFzcyBNYXRoVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGZ0ZXN0KHNlbGYsIG5hbWUsIHZhbHVlLCBleHBlY3RlZCk6CisgICAgICAgIGlmIGFicyh2YWx1ZS1leHBlY3RlZCkgPiBlcHM6CisgICAgICAgICAgICAjIFVzZSAlciBpbnN0ZWFkIG9mICVmIHNvIHRoZSBlcnJvciBtZXNzYWdlCisgICAgICAgICAgICAjIGRpc3BsYXlzIGZ1bGwgcHJlY2lzaW9uLiBPdGhlcndpc2UgZGlzY3JlcGFuY2llcworICAgICAgICAgICAgIyBpbiB0aGUgbGFzdCBmZXcgYml0cyB3aWxsIGxlYWQgdG8gdmVyeSBjb25mdXNpbmcKKyAgICAgICAgICAgICMgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnJXMgcmV0dXJuZWQgJXIsIGV4cGVjdGVkICVyJyAlCisgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHZhbHVlLCBleHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdENvbnN0YW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5mdGVzdCgncGknLCBtYXRoLnBpLCAzLjE0MTU5MjYpCisgICAgICAgIHNlbGYuZnRlc3QoJ2UnLCBtYXRoLmUsIDIuNzE4MjgxOCkKKworICAgIGRlZiB0ZXN0QWNvcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmFjb3MpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Fjb3MoLTEpJywgbWF0aC5hY29zKC0xKSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5mdGVzdCgnYWNvcygwKScsIG1hdGguYWNvcygwKSwgbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhY29zKDEpJywgbWF0aC5hY29zKDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3MsIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmFjb3MoTkFOKSkpCisKKyAgICBkZWYgdGVzdEFjb3NoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYWNvc2gpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Fjb3NoKDEpJywgbWF0aC5hY29zaCgxKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYWNvc2goMiknLCBtYXRoLmFjb3NoKDIpLCAxLjMxNjk1Nzg5NjkyNDgxNjgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYWNvc2gsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYWNvc2gsIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYWNvc2goSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3NoLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmFjb3NoKE5BTikpKQorCisgICAgZGVmIHRlc3RBc2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXNpbikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXNpbigtMSknLCBtYXRoLmFzaW4oLTEpLCAtbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhc2luKDApJywgbWF0aC5hc2luKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhc2luKDEpJywgbWF0aC5hc2luKDEpLCBtYXRoLnBpLzIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYXNpbiwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFzaW4sIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXNpbihOQU4pKSkKKworICAgIGRlZiB0ZXN0QXNpbmgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5hc2luaCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXNpbmgoMCknLCBtYXRoLmFzaW5oKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhc2luaCgxKScsIG1hdGguYXNpbmgoMSksIDAuODgxMzczNTg3MDE5NTQzMDUpCisgICAgICAgIHNlbGYuZnRlc3QoJ2FzaW5oKC0xKScsIG1hdGguYXNpbmgoLTEpLCAtMC44ODEzNzM1ODcwMTk1NDMwNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmFzaW5oKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmFzaW5oKE5JTkYpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmFzaW5oKE5BTikpKQorCisgICAgZGVmIHRlc3RBdGFuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXRhbikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbigtMSknLCBtYXRoLmF0YW4oLTEpLCAtbWF0aC5waS80KQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuKDApJywgbWF0aC5hdGFuKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuKDEpJywgbWF0aC5hdGFuKDEpLCBtYXRoLnBpLzQpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4oaW5mKScsIG1hdGguYXRhbihJTkYpLCBtYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4oLWluZiknLCBtYXRoLmF0YW4oTklORiksIC1tYXRoLnBpLzIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbihOQU4pKSkKKworICAgIGRlZiB0ZXN0QXRhbmgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5hdGFuKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuaCgwKScsIG1hdGguYXRhbmgoMCksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW5oKDAuNSknLCBtYXRoLmF0YW5oKDAuNSksIDAuNTQ5MzA2MTQ0MzM0MDU0ODkpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW5oKC0wLjUpJywgbWF0aC5hdGFuaCgtMC41KSwgLTAuNTQ5MzA2MTQ0MzM0MDU0ODkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYXRhbmgsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYXRhbmgsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmF0YW5oLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYXRhbmgsIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbmgoTkFOKSkpCisKKyAgICBkZWYgdGVzdEF0YW4yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXRhbjIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC0xLCAwKScsIG1hdGguYXRhbjIoLTEsIDApLCAtbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtMSwgMSknLCBtYXRoLmF0YW4yKC0xLCAxKSwgLW1hdGgucGkvNCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoMCwgMSknLCBtYXRoLmF0YW4yKDAsIDEpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigxLCAxKScsIG1hdGguYXRhbjIoMSwgMSksIG1hdGgucGkvNCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoMSwgMCknLCBtYXRoLmF0YW4yKDEsIDApLCBtYXRoLnBpLzIpCisKKyAgICAgICAgIyBtYXRoLmF0YW4yKDAsIHgpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDAuLCAtaW5mKScsIG1hdGguYXRhbjIoMC4sIE5JTkYpLCBtYXRoLnBpKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigwLiwgLTIuMyknLCBtYXRoLmF0YW4yKDAuLCAtMi4zKSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoMC4sIC0wLiknLCBtYXRoLmF0YW4yKDAuLCAtMC4pLCBtYXRoLnBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoMC4sIDAuKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigwLiwgMi4zKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigwLiwgSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoMC4sIE5BTikpKQorICAgICAgICAjIG1hdGguYXRhbjIoLTAsIHgpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC0wLiwgLWluZiknLCBtYXRoLmF0YW4yKC0wLiwgTklORiksIC1tYXRoLnBpKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtMC4sIC0yLjMpJywgbWF0aC5hdGFuMigtMC4sIC0yLjMpLCAtbWF0aC5waSkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTAuLCAtMC4pJywgbWF0aC5hdGFuMigtMC4sIC0wLiksIC1tYXRoLnBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoLTAuLCAwLiksIC0wLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKC0wLiwgMi4zKSwgLTAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoLTAuLCBJTkYpLCAtMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoLTAuLCBOQU4pKSkKKyAgICAgICAgIyBtYXRoLmF0YW4yKElORiwgeCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoaW5mLCAtaW5mKScsIG1hdGguYXRhbjIoSU5GLCBOSU5GKSwgbWF0aC5waSozLzQpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgLTIuMyknLCBtYXRoLmF0YW4yKElORiwgLTIuMyksIG1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoaW5mLCAtMC4pJywgbWF0aC5hdGFuMihJTkYsIC0wLjApLCBtYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgMC4pJywgbWF0aC5hdGFuMihJTkYsIDAuMCksIG1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoaW5mLCAyLjMpJywgbWF0aC5hdGFuMihJTkYsIDIuMyksIG1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoaW5mLCBpbmYpJywgbWF0aC5hdGFuMihJTkYsIElORiksIG1hdGgucGkvNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihJTkYsIE5BTikpKQorICAgICAgICAjIG1hdGguYXRhbjIoTklORiwgeCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLWluZiwgLWluZiknLCBtYXRoLmF0YW4yKE5JTkYsIE5JTkYpLCAtbWF0aC5waSozLzQpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIC0yLjMpJywgbWF0aC5hdGFuMihOSU5GLCAtMi4zKSwgLW1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLWluZiwgLTAuKScsIG1hdGguYXRhbjIoTklORiwgLTAuMCksIC1tYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIDAuKScsIG1hdGguYXRhbjIoTklORiwgMC4wKSwgLW1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLWluZiwgMi4zKScsIG1hdGguYXRhbjIoTklORiwgMi4zKSwgLW1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLWluZiwgaW5mKScsIG1hdGguYXRhbjIoTklORiwgSU5GKSwgLW1hdGgucGkvNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOSU5GLCBOQU4pKSkKKyAgICAgICAgIyBtYXRoLmF0YW4yKCtmaW5pdGUsIHgpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDIuMywgLWluZiknLCBtYXRoLmF0YW4yKDIuMywgTklORiksIG1hdGgucGkpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDIuMywgLTAuKScsIG1hdGguYXRhbjIoMi4zLCAtMC4pLCBtYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDIuMywgMC4pJywgbWF0aC5hdGFuMigyLjMsIDAuKSwgbWF0aC5waS8yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoMi4zLCBJTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMigyLjMsIE5BTikpKQorICAgICAgICAjIG1hdGguYXRhbjIoLWZpbml0ZSwgeCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTIuMywgLWluZiknLCBtYXRoLmF0YW4yKC0yLjMsIE5JTkYpLCAtbWF0aC5waSkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTIuMywgLTAuKScsIG1hdGguYXRhbjIoLTIuMywgLTAuKSwgLW1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTIuMywgMC4pJywgbWF0aC5hdGFuMigtMi4zLCAwLiksIC1tYXRoLnBpLzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigtMi4zLCBJTkYpLCAtMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoLTIuMywgTkFOKSkpCisgICAgICAgICMgbWF0aC5hdGFuMihOQU4sIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCBOSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAtMi4zKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAtMC4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIDAuKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAyLjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgTkFOKSkpCisKKyAgICBkZWYgdGVzdENlaWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jZWlsKQorICAgICAgICAjIFRoZXNlIHR5cGVzIHdpbGwgYmUgaW50IGluIHB5M2suCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQsIHR5cGUobWF0aC5jZWlsKDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmNlaWwoMUwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmNlaWwoMS4wKSkpCisgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoMC41KScsIG1hdGguY2VpbCgwLjUpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjZWlsKDEuMCknLCBtYXRoLmNlaWwoMS4wKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgxLjUpJywgbWF0aC5jZWlsKDEuNSksIDIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoLTAuNSknLCBtYXRoLmNlaWwoLTAuNSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoLTEuMCknLCBtYXRoLmNlaWwoLTEuMCksIC0xKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjZWlsKC0xLjUpJywgbWF0aC5jZWlsKC0xLjUpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNlaWwoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY2VpbChOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jZWlsKE5BTikpKQorCisgICAgICAgIGNsYXNzIFRlc3RDZWlsKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MS4zCisgICAgICAgIGNsYXNzIFRlc3ROb0NlaWwob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5mdGVzdCgnY2VpbChUZXN0Q2VpbCgpKScsIG1hdGguY2VpbChUZXN0Q2VpbCgpKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jZWlsLCBUZXN0Tm9DZWlsKCkpCisKKyAgICAgICAgdCA9IFRlc3ROb0NlaWwoKQorICAgICAgICB0Ll9fY2VpbF9fID0gbGFtYmRhICphcmdzOiBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jZWlsLCB0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY2VpbCwgdCwgMCkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0Q29weXNpZ24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLCA0MiksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDAuLCA0MiksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCAtNDIpLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMywgMC4pLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbig0LiwgLTAuKSwgLTQuMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY29weXNpZ24pCisgICAgICAgICMgY29weXNpZ24gc2hvdWxkIGxldCB1cyBkaXN0aW5ndWlzaCBzaWducyBvZiB6ZXJvcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIDAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgLTAuKSwgLTEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oSU5GLCAwLiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKElORiwgLTAuKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKE5JTkYsIDAuKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgLTAuKSwgTklORikKKyAgICAgICAgIyBhbmQgb2YgaW5maW5pdGllcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIElORiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIE5JTkYpLCAtMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihJTkYsIElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKElORiwgTklORiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihOSU5GLCBJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihOSU5GLCBOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3B5c2lnbihOQU4sIDEuKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBJTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3B5c2lnbihOQU4sIE5JTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3B5c2lnbihOQU4sIE5BTikpKQorICAgICAgICAjIGNvcHlzaWduKElORiwgTkFOKSBtYXkgYmUgSU5GIG9yIGl0IG1heSBiZSBOSU5GLCBzaW5jZQorICAgICAgICAjIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgc2lnbiBiaXQgb2YgTkFOIGlzIHNldCBvbiBhbnkKKyAgICAgICAgIyBnaXZlbiBwbGF0Zm9ybS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYobWF0aC5jb3B5c2lnbihJTkYsIE5BTikpKQorICAgICAgICAjIHNpbWlsYXJseSwgY29weXNpZ24oMi4sIE5BTikgY291bGQgYmUgMi4gb3IgLTIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKG1hdGguY29weXNpZ24oMi4sIE5BTikpLCAyLikKKworICAgIGRlZiB0ZXN0Q29zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY29zKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjb3MoLXBpLzIpJywgbWF0aC5jb3MoLW1hdGgucGkvMiksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2NvcygwKScsIG1hdGguY29zKDApLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjb3MocGkvMiknLCBtYXRoLmNvcyhtYXRoLnBpLzIpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjb3MocGkpJywgbWF0aC5jb3MobWF0aC5waSksIC0xKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcyhJTkYpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29zKE5JTkYpKSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmNvcywgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5jb3MsIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29zKE5BTikpKQorCisgICAgZGVmIHRlc3RDb3NoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY29zaCkKKyAgICAgICAgc2VsZi5mdGVzdCgnY29zaCgwKScsIG1hdGguY29zaCgwKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnY29zaCgyKS0yKmNvc2goMSkqKjInLCBtYXRoLmNvc2goMiktMiptYXRoLmNvc2goMSkqKjIsIC0xKSAjIFRoYW5rcyB0byBMYW1iZXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3NoKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvc2goTklORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3NoKE5BTikpKQorCisgICAgZGVmIHRlc3REZWdyZWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZGVncmVlcykKKyAgICAgICAgc2VsZi5mdGVzdCgnZGVncmVlcyhwaSknLCBtYXRoLmRlZ3JlZXMobWF0aC5waSksIDE4MC4wKQorICAgICAgICBzZWxmLmZ0ZXN0KCdkZWdyZWVzKHBpLzIpJywgbWF0aC5kZWdyZWVzKG1hdGgucGkvMiksIDkwLjApCisgICAgICAgIHNlbGYuZnRlc3QoJ2RlZ3JlZXMoLXBpLzQpJywgbWF0aC5kZWdyZWVzKC1tYXRoLnBpLzQpLCAtNDUuMCkKKworICAgIGRlZiB0ZXN0RXhwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZXhwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdleHAoLTEpJywgbWF0aC5leHAoLTEpLCAxL21hdGguZSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZXhwKDApJywgbWF0aC5leHAoMCksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2V4cCgxKScsIG1hdGguZXhwKDEpLCBtYXRoLmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5leHAoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZXhwKE5JTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5leHAoTkFOKSkpCisKKyAgICBkZWYgdGVzdEZhYnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5mYWJzKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmYWJzKC0xKScsIG1hdGguZmFicygtMSksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2ZhYnMoMCknLCBtYXRoLmZhYnMoMCksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2ZhYnMoMSknLCBtYXRoLmZhYnMoMSksIDEpCisKKyAgICBkZWYgdGVzdEZhY3RvcmlhbChzZWxmKToKKyAgICAgICAgZGVmIGZhY3Qobik6CisgICAgICAgICAgICByZXN1bHQgPSAxCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBpbnQobikrMSk6CisgICAgICAgICAgICAgICAgcmVzdWx0ICo9IGkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgdmFsdWVzID0gcmFuZ2UoMTApICsgWzUwLCAxMDAsIDUwMF0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUodmFsdWVzKQorICAgICAgICBmb3IgeCBpbiB2YWx1ZXM6CisgICAgICAgICAgICBmb3IgY2FzdCBpbiAoaW50LCBsb25nLCBmbG9hdCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZhY3RvcmlhbChjYXN0KHgpKSwgZmFjdCh4KSwgKHgsIGZhY3QoeCksIG1hdGguZmFjdG9yaWFsKHgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5mYWN0b3JpYWwsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZhY3RvcmlhbCwgbWF0aC5waSkKKworICAgIGRlZiB0ZXN0Rmxvb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5mbG9vcikKKyAgICAgICAgIyBUaGVzZSB0eXBlcyB3aWxsIGJlIGludCBpbiBweTNrLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0LCB0eXBlKG1hdGguZmxvb3IoMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0LCB0eXBlKG1hdGguZmxvb3IoMUwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmZsb29yKDEuMCkpKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigwLjUpJywgbWF0aC5mbG9vcigwLjUpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigxLjApJywgbWF0aC5mbG9vcigxLjApLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigxLjUpJywgbWF0aC5mbG9vcigxLjUpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigtMC41KScsIG1hdGguZmxvb3IoLTAuNSksIC0xKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigtMS4wKScsIG1hdGguZmxvb3IoLTEuMCksIC0xKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigtMS41KScsIG1hdGguZmxvb3IoLTEuNSksIC0yKQorICAgICAgICAjIHBvdygpIHJlbGllcyBvbiBmbG9vcigpIHRvIGNoZWNrIGZvciBpbnRlZ2VycworICAgICAgICAjIFRoaXMgZmFpbHMgb24gc29tZSBwbGF0Zm9ybXMgLSBzbyBjaGVjayBpdCBoZXJlCisgICAgICAgIHNlbGYuZnRlc3QoJ2Zsb29yKDEuMjNlMTY3KScsIG1hdGguZmxvb3IoMS4yM2UxNjcpLCAxLjIzZTE2NykKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoLTEuMjNlMTY3KScsIG1hdGguZmxvb3IoLTEuMjNlMTY3KSwgLTEuMjNlMTY3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY2VpbChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jZWlsKE5JTkYpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmZsb29yKE5BTikpKQorCisgICAgICAgIGNsYXNzIFRlc3RGbG9vcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIuMworICAgICAgICBjbGFzcyBUZXN0Tm9GbG9vcihvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcihUZXN0Rmxvb3IoKSknLCBtYXRoLmZsb29yKFRlc3RGbG9vcigpKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5mbG9vciwgVGVzdE5vRmxvb3IoKSkKKworICAgICAgICB0ID0gVGVzdE5vRmxvb3IoKQorICAgICAgICB0Ll9fZmxvb3JfXyA9IGxhbWJkYSAqYXJnczogYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmxvb3IsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5mbG9vciwgdCwgMCkKKworICAgIGRlZiB0ZXN0Rm1vZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmZtb2QpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Ztb2QoMTAsMSknLCBtYXRoLmZtb2QoMTAsMSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2Ztb2QoMTAsMC41KScsIG1hdGguZm1vZCgxMCwwLjUpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKDEwLDEuNSknLCBtYXRoLmZtb2QoMTAsMS41KSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZm1vZCgtMTAsMSknLCBtYXRoLmZtb2QoLTEwLDEpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKC0xMCwwLjUpJywgbWF0aC5mbW9kKC0xMCwwLjUpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKC0xMCwxLjUpJywgbWF0aC5mbW9kKC0xMCwxLjUpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mbW9kKE5BTiwgMS4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mbW9kKDEuLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mbW9kKE5BTiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguZm1vZCwgMS4sIDAuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZtb2QsIElORiwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguZm1vZCwgTklORiwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguZm1vZCwgSU5GLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZtb2QoMy4wLCBJTkYpLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mbW9kKC0zLjAsIElORiksIC0zLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mbW9kKDMuMCwgTklORiksIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZtb2QoLTMuMCwgTklORiksIC0zLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mbW9kKDAuMCwgMy4wKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZm1vZCgwLjAsIE5JTkYpLCAwLjApCisKKyAgICBkZWYgdGVzdEZyZXhwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZnJleHApCisKKyAgICAgICAgZGVmIHRlc3RmcmV4cChuYW1lLCByZXN1bHQsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIChtYW50LCBleHApLCAoZW1hbnQsIGVleHApID0gcmVzdWx0LCBleHBlY3RlZAorICAgICAgICAgICAgaWYgYWJzKG1hbnQtZW1hbnQpID4gZXBzIG9yIGV4cCAhPSBlZXhwOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnJXMgcmV0dXJuZWQgJXIsIGV4cGVjdGVkICVyJyVcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCAobWFudCwgZXhwKSwgKGVtYW50LGVleHApKSkKKworICAgICAgICB0ZXN0ZnJleHAoJ2ZyZXhwKC0xKScsIG1hdGguZnJleHAoLTEpLCAoLTAuNSwgMSkpCisgICAgICAgIHRlc3RmcmV4cCgnZnJleHAoMCknLCBtYXRoLmZyZXhwKDApLCAoMCwgMCkpCisgICAgICAgIHRlc3RmcmV4cCgnZnJleHAoMSknLCBtYXRoLmZyZXhwKDEpLCAoMC41LCAxKSkKKyAgICAgICAgdGVzdGZyZXhwKCdmcmV4cCgyKScsIG1hdGguZnJleHAoMiksICgwLjUsIDIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mcmV4cChJTkYpWzBdLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mcmV4cChOSU5GKVswXSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mcmV4cChOQU4pWzBdKSkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIEB1bml0dGVzdC5za2lwSWYoSEFWRV9ET1VCTEVfUk9VTkRJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZzdW0gaXMgbm90IGV4YWN0IG9uIG1hY2hpbmVzIHdpdGggZG91YmxlIHJvdW5kaW5nIikKKyAgICBkZWYgdGVzdEZzdW0oc2VsZik6CisgICAgICAgICMgbWF0aC5mc3VtIHJlbGllcyBvbiBleGFjdCByb3VuZGluZyBmb3IgY29ycmVjdCBvcGVyYXRpb24uCisgICAgICAgICMgVGhlcmUncyBhIGtub3duIHByb2JsZW0gd2l0aCBJQTMyIGZsb2F0aW5nLXBvaW50IHRoYXQgY2F1c2VzCisgICAgICAgICMgaW5leGFjdCByb3VuZGluZyBpbiBzb21lIHNpdHVhdGlvbnMsIGFuZCB3aWxsIGNhdXNlIHRoZQorICAgICAgICAjIG1hdGguZnN1bSB0ZXN0cyBiZWxvdyB0byBmYWlsOyBzZWUgaXNzdWUgIzI5MzcuICBPbiBub24gSUVFRQorICAgICAgICAjIDc1NCBwbGF0Zm9ybXMsIGFuZCBvbiBJRUVFIDc1NCBwbGF0Zm9ybXMgdGhhdCBleGhpYml0IHRoZQorICAgICAgICAjIHByb2JsZW0gZGVzY3JpYmVkIGluIGlzc3VlICMyOTM3LCB3ZSBzaW1wbHkgc2tpcCB0aGUgd2hvbGUKKyAgICAgICAgIyB0ZXN0LgorCisgICAgICAgICMgUHl0aG9uIHZlcnNpb24gb2YgbWF0aC5mc3VtLCBmb3IgY29tcGFyaXNvbi4gIFVzZXMgYQorICAgICAgICAjIGRpZmZlcmVudCBhbGdvcml0aG0gYmFzZWQgb24gZnJleHAsIGxkZXhwIGFuZCBpbnRlZ2VyCisgICAgICAgICMgYXJpdGhtZXRpYy4KKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IGZsb2F0X2luZm8KKyAgICAgICAgbWFudF9kaWcgPSBmbG9hdF9pbmZvLm1hbnRfZGlnCisgICAgICAgIGV0aW55ID0gZmxvYXRfaW5mby5taW5fZXhwIC0gbWFudF9kaWcKKworICAgICAgICBkZWYgbXN1bShpdGVyYWJsZSk6CisgICAgICAgICAgICAiIiJGdWxsIHByZWNpc2lvbiBzdW1tYXRpb24uICBDb21wdXRlIHN1bShpdGVyYWJsZSkgd2l0aG91dCBhbnkKKyAgICAgICAgICAgIGludGVybWVkaWF0ZSBhY2N1bXVsYXRpb24gb2YgZXJyb3IuICBCYXNlZCBvbiB0aGUgJ2xzdW0nIGZ1bmN0aW9uCisgICAgICAgICAgICBhdCBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8zOTMwOTAvCisKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgdG1hbnQsIHRleHAgPSAwLCAwCisgICAgICAgICAgICBmb3IgeCBpbiBpdGVyYWJsZToKKyAgICAgICAgICAgICAgICBtYW50LCBleHAgPSBtYXRoLmZyZXhwKHgpCisgICAgICAgICAgICAgICAgbWFudCwgZXhwID0gaW50KG1hdGgubGRleHAobWFudCwgbWFudF9kaWcpKSwgZXhwIC0gbWFudF9kaWcKKyAgICAgICAgICAgICAgICBpZiB0ZXhwID4gZXhwOgorICAgICAgICAgICAgICAgICAgICB0bWFudCA8PD0gdGV4cC1leHAKKyAgICAgICAgICAgICAgICAgICAgdGV4cCA9IGV4cAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1hbnQgPDw9IGV4cC10ZXhwCisgICAgICAgICAgICAgICAgdG1hbnQgKz0gbWFudAorICAgICAgICAgICAgIyBSb3VuZCB0bWFudCAqIDIqKnRleHAgdG8gYSBmbG9hdC4gIFRoZSBvcmlnaW5hbCByZWNpcGUKKyAgICAgICAgICAgICMgdXNlZCBmbG9hdChzdHIodG1hbnQpKSAqIDIuMCoqdGV4cCBmb3IgdGhpcywgYnV0IHRoYXQncworICAgICAgICAgICAgIyBhIGxpdHRsZSB1bnNhZmUgYmVjYXVzZSBzdHIgLT4gZmxvYXQgY29udmVyc2lvbiBjYW4ndCBiZQorICAgICAgICAgICAgIyByZWxpZWQgdXBvbiB0byBkbyBjb3JyZWN0IHJvdW5kaW5nIG9uIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgICAgICB0YWlsID0gbWF4KGxlbihiaW4oYWJzKHRtYW50KSkpLTIgLSBtYW50X2RpZywgZXRpbnkgLSB0ZXhwKQorICAgICAgICAgICAgaWYgdGFpbCA+IDA6CisgICAgICAgICAgICAgICAgaCA9IDEgPDwgKHRhaWwtMSkKKyAgICAgICAgICAgICAgICB0bWFudCA9IHRtYW50IC8vICgyKmgpICsgYm9vbCh0bWFudCAmIGggYW5kIHRtYW50ICYgMypoLTEpCisgICAgICAgICAgICAgICAgdGV4cCArPSB0YWlsCisgICAgICAgICAgICByZXR1cm4gbWF0aC5sZGV4cCh0bWFudCwgdGV4cCkKKworICAgICAgICB0ZXN0X3ZhbHVlcyA9IFsKKyAgICAgICAgICAgIChbXSwgMC4wKSwKKyAgICAgICAgICAgIChbMC4wXSwgMC4wKSwKKyAgICAgICAgICAgIChbMWUxMDAsIDEuMCwgLTFlMTAwLCAxZS0xMDAsIDFlNTAsIC0xLjAsIC0xZTUwXSwgMWUtMTAwKSwKKyAgICAgICAgICAgIChbMi4wKio1MywgLTAuNSwgLTIuMCoqLTU0XSwgMi4wKio1My0xLjApLAorICAgICAgICAgICAgKFsyLjAqKjUzLCAxLjAsIDIuMCoqLTEwMF0sIDIuMCoqNTMrMi4wKSwKKyAgICAgICAgICAgIChbMi4wKio1MysxMC4wLCAxLjAsIDIuMCoqLTEwMF0sIDIuMCoqNTMrMTIuMCksCisgICAgICAgICAgICAoWzIuMCoqNTMtNC4wLCAwLjUsIDIuMCoqLTU0XSwgMi4wKio1My0zLjApLAorICAgICAgICAgICAgKFsxLi9uIGZvciBuIGluIHJhbmdlKDEsIDEwMDEpXSwKKyAgICAgICAgICAgICBmbG9hdC5mcm9taGV4KCcweDEuZGYxMWY0NWY0ZTYxYXArMicpKSwKKyAgICAgICAgICAgIChbKC0xLikqKm4vbiBmb3IgbiBpbiByYW5nZSgxLCAxMDAxKV0sCisgICAgICAgICAgICAgZmxvYXQuZnJvbWhleCgnLTB4MS42MmEyYWYxYmQzNjI0cC0xJykpLAorICAgICAgICAgICAgKFsxLjcqKihpKzEpLTEuNyoqaSBmb3IgaSBpbiByYW5nZSgxMDAwKV0gKyBbLTEuNyoqMTAwMF0sIC0xLjApLAorICAgICAgICAgICAgKFsxZTE2LCAxLiwgMWUtMTZdLCAxMDAwMDAwMDAwMDAwMDAwMi4wKSwKKyAgICAgICAgICAgIChbMWUxNi0yLiwgMS4tMi4qKi01MywgLSgxZTE2LTIuKSwgLSgxLi0yLioqLTUzKV0sIDAuMCksCisgICAgICAgICAgICAjIGV4ZXJjaXNlIGNvZGUgZm9yIHJlc2l6aW5nIHBhcnRpYWxzIGFycmF5CisgICAgICAgICAgICAoWzIuKipuIC0gMi4qKihuKzUwKSArIDIuKioobis1MikgZm9yIG4gaW4gcmFuZ2UoLTEwNzQsIDk3MiwgMildICsKKyAgICAgICAgICAgICBbLTIuKioxMDIyXSwKKyAgICAgICAgICAgICBmbG9hdC5mcm9taGV4KCcweDEuNTU1NTU1NTU1NTU1NXArOTcwJykpLAorICAgICAgICAgICAgXQorCisgICAgICAgIGZvciBpLCAodmFscywgZXhwZWN0ZWQpIGluIGVudW1lcmF0ZSh0ZXN0X3ZhbHVlcyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYWN0dWFsID0gbWF0aC5mc3VtKHZhbHMpCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInRlc3QgJWQgZmFpbGVkOiBnb3QgT3ZlcmZsb3dFcnJvciwgZXhwZWN0ZWQgJXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIG1hdGguZnN1bSglLjEwMHIpIiAlIChpLCBleHBlY3RlZCwgdmFscykpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInRlc3QgJWQgZmFpbGVkOiBnb3QgVmFsdWVFcnJvciwgZXhwZWN0ZWQgJXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIG1hdGguZnN1bSglLjEwMHIpIiAlIChpLCBleHBlY3RlZCwgdmFscykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICAgICAgZnJvbSByYW5kb20gaW1wb3J0IHJhbmRvbSwgZ2F1c3MsIHNodWZmbGUKKyAgICAgICAgZm9yIGogaW4geHJhbmdlKDEwMDApOgorICAgICAgICAgICAgdmFscyA9IFs3LCAxZTEwMCwgLTcsIC0xZTEwMCwgLTllLTIwLCA4ZS0yMF0gKiAxMAorICAgICAgICAgICAgcyA9IDAKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgyMDApOgorICAgICAgICAgICAgICAgIHYgPSBnYXVzcygwLCByYW5kb20oKSkgKiogNyAtIHMKKyAgICAgICAgICAgICAgICBzICs9IHYKKyAgICAgICAgICAgICAgICB2YWxzLmFwcGVuZCh2KQorICAgICAgICAgICAgc2h1ZmZsZSh2YWxzKQorCisgICAgICAgICAgICBzID0gbXN1bSh2YWxzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc3VtKHZhbHMpLCBtYXRoLmZzdW0odmFscykpCisKKyAgICBkZWYgdGVzdEh5cG90KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguaHlwb3QpCisgICAgICAgIHNlbGYuZnRlc3QoJ2h5cG90KDAsMCknLCBtYXRoLmh5cG90KDAsMCksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2h5cG90KDMsNCknLCBtYXRoLmh5cG90KDMsNCksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5oeXBvdChOQU4sIElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmh5cG90KElORiwgTkFOKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguaHlwb3QoTkFOLCBOSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguaHlwb3QoTklORiwgTkFOKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmh5cG90KDEuMCwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguaHlwb3QoTkFOLCAtMi4wKSkpCisKKyAgICBkZWYgdGVzdExkZXhwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubGRleHApCisgICAgICAgIHNlbGYuZnRlc3QoJ2xkZXhwKDAsMSknLCBtYXRoLmxkZXhwKDAsMSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2xkZXhwKDEsMSknLCBtYXRoLmxkZXhwKDEsMSksIDIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2xkZXhwKDEsLTEpJywgbWF0aC5sZGV4cCgxLC0xKSwgMC41KQorICAgICAgICBzZWxmLmZ0ZXN0KCdsZGV4cCgtMSwxKScsIG1hdGgubGRleHAoLTEsMSksIC0yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBtYXRoLmxkZXhwLCAxLiwgMTAwMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbWF0aC5sZGV4cCwgLTEuLCAxMDAwMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoMS4sIC0xMDAwMDAwKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgtMS4sIC0xMDAwMDAwKSwgLTAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoSU5GLCAzMCksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKE5JTkYsIC0yMTMpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxkZXhwKE5BTiwgMCkpKQorCisgICAgICAgICMgbGFyZ2Ugc2Vjb25kIGFyZ3VtZW50CisgICAgICAgIGZvciBuIGluIFsxMCoqNSwgMTBMKio1LCAxMCoqMTAsIDEwTCoqMTAsIDEwKioyMCwgMTAqKjQwXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cChJTkYsIC1uKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKE5JTkYsIC1uKSwgTklORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgxLiwgLW4pLCAwLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgtMS4sIC1uKSwgLTAuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKDAuLCAtbiksIDAuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKC0wLiwgLW4pLCAtMC4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxkZXhwKE5BTiwgLW4pKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbWF0aC5sZGV4cCwgMS4sIG4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBtYXRoLmxkZXhwLCAtMS4sIG4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoMC4sIG4pLCAwLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgtMC4sIG4pLCAtMC4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoSU5GLCBuKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKE5JTkYsIG4pLCBOSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sZGV4cChOQU4sIG4pKSkKKworICAgIGRlZiB0ZXN0TG9nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubG9nKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2coMS9lKScsIG1hdGgubG9nKDEvbWF0aC5lKSwgLTEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZygxKScsIG1hdGgubG9nKDEpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2coZSknLCBtYXRoLmxvZyhtYXRoLmUpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2coMzIsMiknLCBtYXRoLmxvZygzMiwyKSwgNSkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDEwKio0MCwgMTApJywgbWF0aC5sb2coMTAqKjQwLCAxMCksIDQwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2coMTAqKjQwLCAxMCoqMjApJywgbWF0aC5sb2coMTAqKjQwLCAxMCoqMjApLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubG9nKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5sb2csIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgubG9nKE5BTikpKQorCisgICAgZGVmIHRlc3RMb2cxcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmxvZzFwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxcCgxL2UgLTEpJywgbWF0aC5sb2cxcCgxL21hdGguZS0xKSwgLTEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzFwKDApJywgbWF0aC5sb2cxcCgwKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nMXAoZS0xKScsIG1hdGgubG9nMXAobWF0aC5lLTEpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxcCgxKScsIG1hdGgubG9nMXAoMSksIG1hdGgubG9nKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubG9nMXAoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmxvZzFwLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxvZzFwKE5BTikpKQorICAgICAgICBuPSAyKio5MAorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKG1hdGgubG9nMXAobiksIDYyLjM4MzI0NjI1MDM5NTA3NSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtYXRoLmxvZzFwKG4pLCBtYXRoLmxvZzFwKGZsb2F0KG4pKSkKKworICAgIGRlZiB0ZXN0TG9nMTAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5sb2cxMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nMTAoMC4xKScsIG1hdGgubG9nMTAoMC4xKSwgLTEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzEwKDEpJywgbWF0aC5sb2cxMCgxKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nMTAoMTApJywgbWF0aC5sb2cxMCgxMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sb2coSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmxvZzEwLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxvZzEwKE5BTikpKQorCisgICAgZGVmIHRlc3RNb2RmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubW9kZikKKworICAgICAgICBkZWYgdGVzdG1vZGYobmFtZSwgcmVzdWx0LCBleHBlY3RlZCk6CisgICAgICAgICAgICAodjEsIHYyKSwgKGUxLCBlMikgPSByZXN1bHQsIGV4cGVjdGVkCisgICAgICAgICAgICBpZiBhYnModjEtZTEpID4gZXBzIG9yIGFicyh2Mi1lMik6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCclcyByZXR1cm5lZCAlciwgZXhwZWN0ZWQgJXInJVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsICh2MSx2MiksIChlMSxlMikpKQorCisgICAgICAgIHRlc3Rtb2RmKCdtb2RmKDEuNSknLCBtYXRoLm1vZGYoMS41KSwgKDAuNSwgMS4wKSkKKyAgICAgICAgdGVzdG1vZGYoJ21vZGYoLTEuNSknLCBtYXRoLm1vZGYoLTEuNSksICgtMC41LCAtMS4wKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubW9kZihJTkYpLCAoMC4wLCBJTkYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubW9kZihOSU5GKSwgKC0wLjAsIE5JTkYpKQorCisgICAgICAgIG1vZGZfbmFuID0gbWF0aC5tb2RmKE5BTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obW9kZl9uYW5bMF0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtb2RmX25hblsxXSkpCisKKyAgICBkZWYgdGVzdFBvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnBvdykKKyAgICAgICAgc2VsZi5mdGVzdCgncG93KDAsMSknLCBtYXRoLnBvdygwLDEpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdwb3coMSwwKScsIG1hdGgucG93KDEsMCksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ3BvdygyLDEpJywgbWF0aC5wb3coMiwxKSwgMikKKyAgICAgICAgc2VsZi5mdGVzdCgncG93KDIsLTEpJywgbWF0aC5wb3coMiwtMSksIDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIDEpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgMSksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG1hdGgucG93KDEsIElORikpLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobWF0aC5wb3coMSwgTklORikpLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coTkFOLCAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KDIsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdygwLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLCBOQU4pLCAxKQorCisgICAgICAgICMgcG93KDAuLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDAuLCBJTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygwLiwgMy4pLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygwLiwgMi4zKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMC4sIDIuKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMC4sIDAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMC4sIC0wLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgMC4sIC0yLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIDAuLCAtMi4zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgMC4sIC0zLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIDAuLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdygwLiwgTkFOKSkpCisKKyAgICAgICAgIyBwb3coSU5GLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgMy4pLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coSU5GLCAyLjMpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coSU5GLCAyLiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIDAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coSU5GLCAtMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIC0yLiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgLTIuMyksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgLTMuKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coSU5GLCBOSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KElORiwgTkFOKSkpCisKKyAgICAgICAgIyBwb3coLTAuLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0wLiwgSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTAuLCAzLiksIC0wLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMC4sIDIuMyksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0wLiwgMi4pLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMC4sIDAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTAuLCAtMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0wLiwgLTIuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgLTAuLCAtMi4zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgLTAuLCAtMy4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAtMC4sIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KC0wLiwgTkFOKSkpCisKKyAgICAgICAgIyBwb3coTklORiwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCBJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgMy4pLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIDIuMyksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCAyLiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIC0wLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIC0yLiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIC0yLjMpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCAtMy4pLCAtMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgTklORiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdyhOSU5GLCBOQU4pKSkKKworICAgICAgICAjIHBvdygtMSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS4sIElORiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0xLiwgMy4pLCAtMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAtMS4sIDIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS4sIDIuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0xLiwgLTAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuLCAtMi4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0xLiwgLTIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS4sIC0zLiksIC0xLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS4sIE5JTkYpLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coLTEuLCBOQU4pKSkKKworICAgICAgICAjIHBvdygxLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuLCBJTkYpLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLiwgMy4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLiwgMi4zKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMS4sIDIuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMS4sIDAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMS4sIC0wLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuLCAtMi4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLiwgLTIuMyksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuLCAtMy4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLiwgTklORiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuLCBOQU4pLCAxLikKKworICAgICAgICAjIHBvdyh4LCAwKSBzaG91bGQgYmUgMSBmb3IgYW55IHgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygyLjMsIDAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTIuMywgMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOQU4sIDAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMi4zLCAtMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMi4zLCAtMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOQU4sIC0wLiksIDEuKQorCisgICAgICAgICMgcG93KHgsIHkpIGlzIGludmFsaWQgaWYgeCBpcyBuZWdhdGl2ZSBhbmQgeSBpcyBub3QgaW50ZWdyYWwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0xLiwgMi4zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgLTE1LiwgLTMuMSkKKworICAgICAgICAjIHBvdyh4LCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuOSwgTklORiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuMSwgTklORiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDAuOSwgTklORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygwLjEsIE5JTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTAuMSwgTklORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMC45LCBOSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0xLjEsIE5JTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS45LCBOSU5GKSwgMC4pCisKKyAgICAgICAgIyBwb3coeCwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuOSwgSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuMSwgSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDAuOSwgSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMC4xLCBJTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMC4xLCBJTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMC45LCBJTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS4xLCBJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuOSwgSU5GKSwgSU5GKQorCisgICAgICAgICMgcG93KHgsIHkpIHNob3VsZCB3b3JrIGZvciB4IG5lZ2F0aXZlLCB5IGFuIGludGVnZXIKKyAgICAgICAgc2VsZi5mdGVzdCgnKC0yLikqKjMuJywgbWF0aC5wb3coLTIuMCwgMy4wKSwgLTguMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnKC0yLikqKjIuJywgbWF0aC5wb3coLTIuMCwgMi4wKSwgNC4wKQorICAgICAgICBzZWxmLmZ0ZXN0KCcoLTIuKSoqMS4nLCBtYXRoLnBvdygtMi4wLCAxLjApLCAtMi4wKQorICAgICAgICBzZWxmLmZ0ZXN0KCcoLTIuKSoqMC4nLCBtYXRoLnBvdygtMi4wLCAwLjApLCAxLjApCisgICAgICAgIHNlbGYuZnRlc3QoJygtMi4pKiotMC4nLCBtYXRoLnBvdygtMi4wLCAtMC4wKSwgMS4wKQorICAgICAgICBzZWxmLmZ0ZXN0KCcoLTIuKSoqLTEuJywgbWF0aC5wb3coLTIuMCwgLTEuMCksIC0wLjUpCisgICAgICAgIHNlbGYuZnRlc3QoJygtMi4pKiotMi4nLCBtYXRoLnBvdygtMi4wLCAtMi4wKSwgMC4yNSkKKyAgICAgICAgc2VsZi5mdGVzdCgnKC0yLikqKi0zLicsIG1hdGgucG93KC0yLjAsIC0zLjApLCAtMC4xMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAtMi4wLCAtMC41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgLTIuMCwgMC41KQorCisgICAgICAgICMgdGhlIGZvbGxvd2luZyB0ZXN0cyBoYXZlIGJlZW4gY29tbWVudGVkIG91dCBzaW5jZSB0aGV5IGRvbid0CisgICAgICAgICMgcmVhbGx5IGJlbG9uZyBoZXJlOiAgdGhlIGltcGxlbWVudGF0aW9uIG9mICoqIGZvciBmbG9hdHMgaXMKKyAgICAgICAgIyBpbmRlcGVuZGVudCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgbWF0aC5wb3cKKyAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoMSoqTkFOLCAxKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCgxKipJTkYsIDEpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKDEqKk5JTkYsIDEpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKDEqKjAsIDEpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKDEuKipOQU4sIDEpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKDEuKipJTkYsIDEpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKDEuKipOSU5GLCAxKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCgxLioqMCwgMSkKKworICAgIGRlZiB0ZXN0UmFkaWFucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnJhZGlhbnMpCisgICAgICAgIHNlbGYuZnRlc3QoJ3JhZGlhbnMoMTgwKScsIG1hdGgucmFkaWFucygxODApLCBtYXRoLnBpKQorICAgICAgICBzZWxmLmZ0ZXN0KCdyYWRpYW5zKDkwKScsIG1hdGgucmFkaWFucyg5MCksIG1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgncmFkaWFucygtNDUpJywgbWF0aC5yYWRpYW5zKC00NSksIC1tYXRoLnBpLzQpCisKKyAgICBkZWYgdGVzdFNpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnNpbikKKyAgICAgICAgc2VsZi5mdGVzdCgnc2luKDApJywgbWF0aC5zaW4oMCksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ3NpbihwaS8yKScsIG1hdGguc2luKG1hdGgucGkvMiksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ3NpbigtcGkvMiknLCBtYXRoLnNpbigtbWF0aC5waS8yKSwgLTEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguc2luKElORikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5zaW4oTklORikpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguc2luLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnNpbiwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5zaW4oTkFOKSkpCisKKyAgICBkZWYgdGVzdFNpbmgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5zaW5oKQorICAgICAgICBzZWxmLmZ0ZXN0KCdzaW5oKDApJywgbWF0aC5zaW5oKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdzaW5oKDEpKioyLWNvc2goMSkqKjInLCBtYXRoLnNpbmgoMSkqKjItbWF0aC5jb3NoKDEpKioyLCAtMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnc2luaCgxKStzaW5oKC0xKScsIG1hdGguc2luaCgxKSttYXRoLnNpbmgoLTEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguc2luaChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5zaW5oKE5JTkYpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnNpbmgoTkFOKSkpCisKKyAgICBkZWYgdGVzdFNxcnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5zcXJ0KQorICAgICAgICBzZWxmLmZ0ZXN0KCdzcXJ0KDApJywgbWF0aC5zcXJ0KDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdzcXJ0KDEpJywgbWF0aC5zcXJ0KDEpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdzcXJ0KDQpJywgbWF0aC5zcXJ0KDQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguc3FydChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguc3FydCwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5zcXJ0KE5BTikpKQorCisgICAgZGVmIHRlc3RUYW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50YW4pCisgICAgICAgIHNlbGYuZnRlc3QoJ3RhbigwKScsIG1hdGgudGFuKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW4ocGkvNCknLCBtYXRoLnRhbihtYXRoLnBpLzQpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW4oLXBpLzQpJywgbWF0aC50YW4oLW1hdGgucGkvNCksIC0xKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnRhbihJTkYpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgudGFuKE5JTkYpKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC50YW4sIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgudGFuLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnRhbihOQU4pKSkKKworICAgIGRlZiB0ZXN0VGFuaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnRhbmgpCisgICAgICAgIHNlbGYuZnRlc3QoJ3RhbmgoMCknLCBtYXRoLnRhbmgoMCksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ3RhbmgoMSkrdGFuaCgtMSknLCBtYXRoLnRhbmgoMSkrbWF0aC50YW5oKC0xKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgndGFuaChpbmYpJywgbWF0aC50YW5oKElORiksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ3RhbmgoLWluZiknLCBtYXRoLnRhbmgoTklORiksIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnRhbmgoTkFOKSkpCisgICAgICAgICMgY2hlY2sgdGhhdCB0YW5oKC0wLikgPT0gLTAuIG9uIElFRUUgNzU0IHN5c3RlbXMKKyAgICAgICAgaWYgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRhbmgoLTAuKSwgLTAuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCBtYXRoLnRhbmgoLTAuKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGguY29weXNpZ24oMS4sIC0wLikpCisKKyAgICBkZWYgdGVzdF90cnVuYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRydW5jKDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgudHJ1bmMoLTEpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG1hdGgudHJ1bmMoMSkpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShtYXRoLnRydW5jKDEuNSkpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC50cnVuYygxLjUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgudHJ1bmMoLTEuNSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgudHJ1bmMoMS45OTk5OTkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgudHJ1bmMoLTEuOTk5OTk5KSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC50cnVuYygtMC45OTk5OTkpLCAtMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRydW5jKC0xMDAuOTk5KSwgLTEwMCkKKworICAgICAgICBjbGFzcyBUZXN0VHJ1bmMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3RydW5jX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDIzCisKKyAgICAgICAgY2xhc3MgVGVzdE5vVHJ1bmMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgudHJ1bmMoVGVzdFRydW5jKCkpLCAyMykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgudHJ1bmMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50cnVuYywgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpLCBtYXRoLnRydW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0Tm9UcnVuYygpKQorCisgICAgZGVmIHRlc3RJc25hbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oZmxvYXQoIm5hbiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oZmxvYXQoImluZiIpKiAwLikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0aC5pc25hbihmbG9hdCgiaW5mIikpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGguaXNuYW4oMC4pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGguaXNuYW4oMS4pKQorCisgICAgZGVmIHRlc3RJc2luZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoZmxvYXQoImluZiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoZmxvYXQoIi1pbmYiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKDFFNDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoLTFFNDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzaW5mKGZsb2F0KCJuYW4iKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0aC5pc2luZigwLikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0aC5pc2luZigxLikpCisKKyAgICAjIFJFRF9GTEFHIDE2LU9jdC0yMDAwIFRpbQorICAgICMgV2hpbGUgMi4wIGlzIG1vcmUgY29uc2lzdGVudCBhYm91dCBleGNlcHRpb25zIHRoYW4gcHJldmlvdXMgcmVsZWFzZXMsIGl0CisgICAgIyBzdGlsbCBmYWlscyB0aGlzIHBhcnQgb2YgdGhlIHRlc3Qgb24gc29tZSBwbGF0Zm9ybXMuICBGb3Igbm93LCB3ZSBvbmx5CisgICAgIyAqcnVuKiB0ZXN0X2V4Y2VwdGlvbnMoKSBpbiB2ZXJib3NlIG1vZGUsIHNvIHRoYXQgdGhpcyBpc24ndCBub3JtYWxseQorICAgICMgdGVzdGVkLgorCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4ID0gbWF0aC5leHAoLTEwMDAwMDAwMDApCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgIyBtYXRobW9kdWxlLmMgaXMgZmFpbGluZyB0byB3ZWVkIG91dCB1bmRlcmZsb3dzIGZyb20gbGlibSwgb3IKKyAgICAgICAgICAgICAgICAjIHdlJ3ZlIGdvdCBhbiBmcCBmb3JtYXQgd2l0aCBodWdlIGR5bmFtaWMgcmFuZ2UKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuZGVyZmxvd2luZyBleHAoKSBzaG91bGQgbm90IGhhdmUgcmFpc2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGV4Y2VwdGlvbiIpCisgICAgICAgICAgICBpZiB4ICE9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmRlcmZsb3dpbmcgZXhwKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgMCIpCisKKyAgICAgICAgICAgICMgSWYgdGhpcyBmYWlscywgcHJvYmFibHkgdXNpbmcgYSBzdHJpY3QgSUVFRS03NTQgY29uZm9ybWluZyBsaWJtLCBhbmQgeAorICAgICAgICAgICAgIyBpcyArSW5mIGFmdGVyd2FyZHMuICBCdXQgUHl0aG9uIHdhbnRzIG92ZXJmbG93cyBkZXRlY3RlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHggPSBtYXRoLmV4cCgxMDAwMDAwMDAwKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm92ZXJmbG93aW5nIGV4cCgpIGRpZG4ndCB0cmlnZ2VyIE92ZXJmbG93RXJyb3IiKQorCisgICAgICAgICAgICAjIElmIHRoaXMgZmFpbHMsIGl0IGNvdWxkIGJlIGEgcHV6emxlLiAgT25lIG9kZCBwb3NzaWJpbGl0eSBpcyB0aGF0CisgICAgICAgICAgICAjIG1hdGhtb2R1bGUuYydzIG1hY3JvcyBhcmUgZ2V0dGluZyBjb25mdXNlZCB3aGlsZSBjb21wYXJpbmcKKyAgICAgICAgICAgICMgSW5mIChIVUdFX1ZBTCkgdG8gYSBOYU4sIGFuZCBhcnRpZmljaWFsbHkgc2V0dGluZyBlcnJubyB0byBFUkFOR0UKKyAgICAgICAgICAgICMgYXMgYSByZXN1bHQgKGFuZCBzbyByYWlzaW5nIE92ZXJmbG93RXJyb3IgaW5zdGVhZCkuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeCA9IG1hdGguc3FydCgtMS4wKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNxcnQoLTEpIGRpZG4ndCByYWlzZSBWYWx1ZUVycm9yIikKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICBmb3IgaWQsIGZuLCBhciwgYWksIGVyLCBlaSwgZmxhZ3MgaW4gcGFyc2VfdGVzdGZpbGUodGVzdF9maWxlKToKKyAgICAgICAgICAgICMgU2tpcCBpZiBlaXRoZXIgdGhlIGlucHV0IG9yIHJlc3VsdCBpcyBjb21wbGV4LCBvciBpZgorICAgICAgICAgICAgIyBmbGFncyBpcyBub25lbXB0eQorICAgICAgICAgICAgaWYgYWkgIT0gMC4gb3IgZWkgIT0gMC4gb3IgZmxhZ3M6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGZuIGluIFsncmVjdCcsICdwb2xhciddOgorICAgICAgICAgICAgICAgICMgbm8gcmVhbCB2ZXJzaW9ucyBvZiByZWN0LCBwb2xhcgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihtYXRoLCBmbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKGFyKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICgiVW5leHBlY3RlZCBWYWx1ZUVycm9yIGluICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgJXM6JXMoJXIpXG4iICUgKGlkLCBmbiwgYXIpKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtZXNzYWdlKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICgiVW5leHBlY3RlZCBPdmVyZmxvd0Vycm9yIGluICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgJXM6JXMoJXIpXG4iICUgKGlkLCBmbiwgYXIpKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5mdGVzdCgiJXM6JXMoJXIpIiAlIChpZCwgZm4sIGFyKSwgcmVzdWx0LCBlcikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBkZWYgdGVzdF9tdGVzdGZpbGUoc2VsZik6CisgICAgICAgIEFMTE9XRURfRVJST1IgPSAyMCAgIyBwZXJtaXR0ZWQgZXJyb3IsIGluIHVscHMKKyAgICAgICAgZmFpbF9mbXQgPSAie306e30oeyFyfSk6IGV4cGVjdGVkIHshcn0sIGdvdCB7IXJ9IgorCisgICAgICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAgZm9yIGlkLCBmbiwgYXJnLCBleHBlY3RlZCwgZmxhZ3MgaW4gcGFyc2VfbXRlc3RmaWxlKG1hdGhfdGVzdGNhc2VzKToKKyAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKG1hdGgsIGZuKQorCisgICAgICAgICAgICBpZiAnaW52YWxpZCcgaW4gZmxhZ3Mgb3IgJ2RpdmlkZS1ieS16ZXJvJyBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICdWYWx1ZUVycm9yJworICAgICAgICAgICAgZWxpZiAnb3ZlcmZsb3cnIGluIGZsYWdzOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gJ092ZXJmbG93RXJyb3InCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBnb3QgPSBmdW5jKGFyZykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGdvdCA9ICdWYWx1ZUVycm9yJworICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgZ290ID0gJ092ZXJmbG93RXJyb3InCisKKyAgICAgICAgICAgIGFjY3VyYWN5X2ZhaWx1cmUgPSBOb25lCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGdvdCwgZmxvYXQpIGFuZCBpc2luc3RhbmNlKGV4cGVjdGVkLCBmbG9hdCk6CisgICAgICAgICAgICAgICAgaWYgbWF0aC5pc25hbihleHBlY3RlZCkgYW5kIG1hdGguaXNuYW4oZ290KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgbWF0aC5pc25hbihleHBlY3RlZCkgYW5kIG5vdCBtYXRoLmlzbmFuKGdvdCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZuID09ICdsZ2FtbWEnOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSB1c2UgYSB3ZWFrZXIgYWNjdXJhY3kgdGVzdCBmb3IgbGdhbW1hOworICAgICAgICAgICAgICAgICAgICAgICAgIyBsZ2FtbWEgb25seSBhY2hpZXZlcyBhbiBhYnNvbHV0ZSBlcnJvciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgIyBhIGZldyBtdWx0aXBsZXMgb2YgdGhlIG1hY2hpbmUgYWNjdXJhY3ksIGluCisgICAgICAgICAgICAgICAgICAgICAgICAjIGdlbmVyYWwuCisgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeV9mYWlsdXJlID0gYWNjX2NoZWNrKGV4cGVjdGVkLCBnb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbF9lcnIgPSA1ZS0xNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2VyciA9IDVlLTE1KQorICAgICAgICAgICAgICAgICAgICBlbGlmIGZuID09ICdlcmZjJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZXJmYyBoYXMgbGVzcy10aGFuLWlkZWFsIGFjY3VyYWN5IGZvciBsYXJnZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBhcmd1bWVudHMgKHggfiAyNSBvciBzbyksIG1haW5seSBkdWUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGVycm9yIGludm9sdmVkIGluIGNvbXB1dGluZyBleHAoLXgqeCkuCisgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAjIFhYWCBXb3VsZCBiZSBiZXR0ZXIgdG8gd2Vha2VuIHRoaXMgdGVzdCBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAjIGZvciBsYXJnZSB4LCBpbnN0ZWFkIG9mIGZvciBhbGwgeC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5X2ZhaWx1cmUgPSB1bHBzX2NoZWNrKGV4cGVjdGVkLCBnb3QsIDIwMDApCisKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5X2ZhaWx1cmUgPSB1bHBzX2NoZWNrKGV4cGVjdGVkLCBnb3QsIDIwKQorICAgICAgICAgICAgICAgICAgICBpZiBhY2N1cmFjeV9mYWlsdXJlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGdvdCwgc3RyKSBhbmQgaXNpbnN0YW5jZShleHBlY3RlZCwgc3RyKToKKyAgICAgICAgICAgICAgICBpZiBnb3QgPT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZhaWxfbXNnID0gZmFpbF9mbXQuZm9ybWF0KGlkLCBmbiwgYXJnLCBleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgaWYgYWNjdXJhY3lfZmFpbHVyZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmYWlsX21zZyArPSAnICh7fSknLmZvcm1hdChhY2N1cmFjeV9mYWlsdXJlKQorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGZhaWxfbXNnKQorCisgICAgICAgIGlmIGZhaWx1cmVzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdGYWlsdXJlcyBpbiB0ZXN0X210ZXN0ZmlsZTpcbiAgJyArCisgICAgICAgICAgICAgICAgICAgICAgJ1xuICAnLmpvaW4oZmFpbHVyZXMpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBmcm9tIGRvY3Rlc3QgaW1wb3J0IERvY0ZpbGVTdWl0ZQorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShNYXRoVGVzdHMpKQorICAgIHN1aXRlLmFkZFRlc3QoRG9jRmlsZVN1aXRlKCJpZWVlNzU0LnR4dCIpKQorICAgIHJ1bl91bml0dGVzdChzdWl0ZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWQ1LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWQ1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMGU4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tZDUucHkKQEAgLTAsMCArMSw2MSBAQAorIyBUZXN0aW5nIG1kNSBtb2R1bGUKK2ltcG9ydCB3YXJuaW5ncword2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0aGUgbWQ1IG1vZHVsZSBpcyBkZXByZWNhdGVkLioiLAorICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gbWQ1IGltcG9ydCBtZDUKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2RlZiBoZXhzdHIocyk6CisgICAgaW1wb3J0IHN0cmluZworICAgIGggPSBzdHJpbmcuaGV4ZGlnaXRzCisgICAgciA9ICcnCisgICAgZm9yIGMgaW4gczoKKyAgICAgICAgaSA9IG9yZChjKQorICAgICAgICByID0gciArIGhbKGkgPj4gNCkgJiAweEZdICsgaFtpICYgMHhGXQorICAgIHJldHVybiByCisKK2NsYXNzIE1ENV9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBtZDV0ZXN0KHNlbGYsIHMsIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXhzdHIobWQ1KHMpLmRpZ2VzdCgpKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWQ1KHMpLmhleGRpZ2VzdCgpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm1kNXRlc3QKKyAgICAgICAgZXEoJycsICdkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZScpCisgICAgICAgIGVxKCdhJywgJzBjYzE3NWI5YzBmMWI2YTgzMWMzOTllMjY5NzcyNjYxJykKKyAgICAgICAgZXEoJ2FiYycsICc5MDAxNTA5ODNjZDI0ZmIwZDY5NjNmN2QyOGUxN2Y3MicpCisgICAgICAgIGVxKCdtZXNzYWdlIGRpZ2VzdCcsICdmOTZiNjk3ZDdjYjc5MzhkNTI1YTJmMzFhYWYxNjFkMCcpCisgICAgICAgIGVxKCdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsICdjM2ZjZDNkNzYxOTJlNDAwN2RmYjQ5NmNjYTY3ZTEzYicpCisgICAgICAgIGVxKCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScsCisgICAgICAgICAgICdkMTc0YWI5OGQyNzdkOWY1YTU2MTFjMmM5ZjQxOWQ5ZicpCisgICAgICAgIGVxKCcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCcsCisgICAgICAgICAgICc1N2VkZjRhMjJiZTNjOTU1YWM0OWRhMmUyMTA3YjY3YScpCisKKyAgICBkZWYgdGVzdF9oZXhkaWdlc3Qoc2VsZik6CisgICAgICAgICMgaGV4ZGlnZXN0IGlzIG5ldyB3aXRoIFB5dGhvbiAyLjAKKyAgICAgICAgbSA9IG1kNSgndGVzdGluZyB0aGUgaGV4ZGlnZXN0IG1ldGhvZCcpCisgICAgICAgIGggPSBtLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4c3RyKG0uZGlnZXN0KCkpLCBoKQorCisgICAgZGVmIHRlc3RfbGFyZ2VfdXBkYXRlKHNlbGYpOgorICAgICAgICBhYXMgPSAnYScgKiA2NAorICAgICAgICBiZWVzID0gJ2InICogNjQKKyAgICAgICAgY2VlcyA9ICdjJyAqIDY0CisKKyAgICAgICAgbTEgPSBtZDUoKQorICAgICAgICBtMS51cGRhdGUoYWFzKQorICAgICAgICBtMS51cGRhdGUoYmVlcykKKyAgICAgICAgbTEudXBkYXRlKGNlZXMpCisKKyAgICAgICAgbTIgPSBtZDUoKQorICAgICAgICBtMi51cGRhdGUoYWFzICsgYmVlcyArIGNlZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTEuZGlnZXN0KCksIG0yLmRpZ2VzdCgpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChNRDVfVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Q1NTlkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKQEAgLTAsMCArMSw3MTcgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIG1lbW9yeS1iYXNlZCBmaWxlLWxpa2Ugb2JqZWN0cy4KK1N0cmluZ0lPIC0tIGZvciB1bmljb2RlIHN0cmluZ3MKK0J5dGVzSU8gLS0gZm9yIGJ5dGVzCisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAorCitpbXBvcnQgaW8KK2ltcG9ydCBfcHlpbyBhcyBweWlvCitpbXBvcnQgcGlja2xlCisKK2NsYXNzIE1lbW9yeVNlZWtUZXN0TWl4aW46CisKKyAgICBkZWYgdGVzdEluaXQoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgZGVmIHRlc3RSZWFkKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6MV0sIGJ5dGVzSW8ucmVhZCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbMTo1XSwgYnl0ZXNJby5yZWFkKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls1Ol0sIGJ5dGVzSW8ucmVhZCg5MDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuRU9GLCBieXRlc0lvLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0UmVhZE5vQXJncyhzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgYnl0ZXNJbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGJ5dGVzSW8ucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuRU9GLCBieXRlc0lvLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0U2VlayhzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgYnl0ZXNJbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgYnl0ZXNJby5yZWFkKDUpCisgICAgICAgIGJ5dGVzSW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYnl0ZXNJby5yZWFkKCkpCisKKyAgICAgICAgYnl0ZXNJby5zZWVrKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzM6XSwgYnl0ZXNJby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnl0ZXNJby5zZWVrLCAwLjApCisKKyAgICBkZWYgdGVzdFRlbGwoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYnl0ZXNJby50ZWxsKCkpCisgICAgICAgIGJ5dGVzSW8uc2Vlayg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIGJ5dGVzSW8udGVsbCgpKQorICAgICAgICBieXRlc0lvLnNlZWsoMTAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAwMDAsIGJ5dGVzSW8udGVsbCgpKQorCisKK2NsYXNzIE1lbW9yeVRlc3RNaXhpbjoKKworICAgIGRlZiB0ZXN0X2RldGFjaChzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5VbnN1cHBvcnRlZE9wZXJhdGlvbiwgYnVmLmRldGFjaCkKKworICAgIGRlZiB3cml0ZV9vcHMoc2VsZiwgZiwgdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZSh0KCJibGFoLiIpKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZSh0KCJIZWxsby4iKSksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDUpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUodCgiIHdvcmxkXG5cblxuIikpLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKHQoImgiKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50cnVuY2F0ZSgxMiksIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiaGVsbG8gd29ybGRcbiIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLndyaXRlX29wcyhtZW1pbywgc2VsZi5idWZ0eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBzZWxmLndyaXRlX29wcyhtZW1pbywgc2VsZi5idWZ0eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby53cml0ZSwgTm9uZSkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby53cml0ZSwgc2VsZi5idWZ0eXBlKCIiKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXMoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLndyaXRlbGluZXMoW2J1Zl0gKiAxMDApLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZiAqIDEwMCkKKyAgICAgICAgbWVtaW8ud3JpdGVsaW5lcyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYgKiAxMDApCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby53cml0ZWxpbmVzLCBbYnVmXSArIFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ud3JpdGVsaW5lcywgTm9uZSkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby53cml0ZWxpbmVzLCBbXSkKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgZGVmIGVycm9yX2dlbigpOgorICAgICAgICAgICAgeWllbGQgc2VsZi5idWZ0eXBlKCdzcGFtJykKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIG1lbWlvLndyaXRlbGluZXMsIGVycm9yX2dlbigpKQorCisgICAgZGVmIHRlc3RfdHJ1bmNhdGUoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby50cnVuY2F0ZSwgLTEpCisgICAgICAgIG1lbWlvLnNlZWsoNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50cnVuY2F0ZSgpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1Zls6Nl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udHJ1bmNhdGUoNCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmWzo0XSkKKyAgICAgICAgIyB0cnVuY2F0ZSgpIGFjY2VwdHMgbG9uZyBvYmplY3RzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udHJ1bmNhdGUoNEwpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1Zls6NF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udGVsbCgpLCA2KQorICAgICAgICBtZW1pby5zZWVrKDAsIDIpCisgICAgICAgIG1lbWlvLndyaXRlKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWZbOjRdICsgYnVmKQorICAgICAgICBwb3MgPSBtZW1pby50ZWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50cnVuY2F0ZShOb25lKSwgcG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgcG9zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLnRydW5jYXRlLCAnMCcpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8udHJ1bmNhdGUsIDApCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIHNlbGYuRU9GKQorICAgICAgICBtZW1pby5fX2luaXRfXyhidWYgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZiAqIDIpCisgICAgICAgIG1lbWlvLl9faW5pdF9fKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDApLCBzZWxmLkVPRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDEpLCBidWZbOjFdKQorICAgICAgICAjIHJlYWQoKSBhY2NlcHRzIGxvbmcgb2JqZWN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoNEwpLCBidWZbMTo1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDkwMCksIGJ1Zls1Ol0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCBzZWxmLkVPRikKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgc2VsZi5FT0YpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udGVsbCgpLCAxMCkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoLTEpLCBidWYpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG1lbWlvLnJlYWQoKSksIHR5cGUoYnVmKSkKKyAgICAgICAgbWVtaW8uc2VlaygxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShtZW1pby5yZWFkKCkpLCB0eXBlKGJ1ZikpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKE5vbmUpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ucmVhZCwgJycpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8ucmVhZCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTBcbiIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZiAqIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgwKSwgc2VsZi5FT0YpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgpLCBzZWxmLkVPRikKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKDUpLCBidWZbOjVdKQorICAgICAgICAjIHJlYWRsaW5lKCkgYWNjZXB0cyBsb25nIG9iamVjdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSg1TCksIGJ1Zls1OjEwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSg1KSwgYnVmWzEwOjE1XSkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKC0xKSwgYnVmKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoMCksIHNlbGYuRU9GKQorCisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MFxuIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKGJ1ZiAqIDMpWzotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgpLCBidWZbOi0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgpLCBzZWxmLkVPRikKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobWVtaW8ucmVhZGxpbmUoKSksIHR5cGUoYnVmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ucmVhZGxpbmUsICcnKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICBtZW1pby5yZWFkbGluZSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwXG4iKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYgKiAxMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lcygpLCBbYnVmXSAqIDEwKQorICAgICAgICBtZW1pby5zZWVrKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmVzKCksIFtidWZbNTpdXSArIFtidWZdICogOSkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICAjIHJlYWRsaW5lcygpIGFjY2VwdHMgbG9uZyBvYmplY3RzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmVzKDE1TCksIFtidWZdICogMikKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lcygtMSksIFtidWZdICogMTApCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZXMoMCksIFtidWZdICogMTApCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG1lbWlvLnJlYWRsaW5lcygpWzBdKSwgdHlwZShidWYpKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmVzKE5vbmUpLCBbYnVmXSAqIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLnJlYWRsaW5lcywgJycpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8ucmVhZGxpbmVzKQorCisgICAgZGVmIHRlc3RfaXRlcmF0b3Ioc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MFxuIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmICogMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyKG1lbWlvKSwgbWVtaW8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1lbWlvLCAnX19pdGVyX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobWVtaW8sICduZXh0JykpCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBsaW5lIGluIG1lbWlvOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBidWYpCisgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCAxMCkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBpID0gMAorICAgICAgICBmb3IgbGluZSBpbiBtZW1pbzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgYnVmKQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgMTApCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZiAqIDIpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgbWVtaW8pCisKKyAgICBkZWYgdGVzdF9nZXR2YWx1ZShzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorICAgICAgICBtZW1pby5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShtZW1pby5nZXR2YWx1ZSgpKSwgdHlwZShidWYpKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYgKiAxMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKClbLTM6XSwgc2VsZi5idWZ0eXBlKCI4OTAiKSkKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLmdldHZhbHVlKQorCisgICAgZGVmIHRlc3Rfc2VlayhzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIG1lbWlvLnJlYWQoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uc2VlaywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnNlZWssIDEsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5zZWVrLCAxLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uc2VlaygwLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5zZWVrKDMpLCAzKQorICAgICAgICAjIHNlZWsoKSBhY2NlcHRzIGxvbmcgb2JqZWN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoM0wpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoMCwgMSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCBidWZbMzpdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsobGVuKGJ1ZikpLCBsZW4oYnVmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksIHNlbGYuRU9GKQorICAgICAgICBtZW1pby5zZWVrKGxlbihidWYpICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksIHNlbGYuRU9GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoMCwgMiksIGxlbihidWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgc2VsZi5FT0YpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uc2VlaywgMCkKKworICAgIGRlZiB0ZXN0X292ZXJzZWVrKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5zZWVrKGxlbihidWYpICsgMSksIDExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgc2VsZi5FT0YpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udGVsbCgpLCAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisgICAgICAgIG1lbWlvLndyaXRlKHNlbGYuRU9GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKKyAgICAgICAgbWVtaW8ud3JpdGUoYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZiArIHNlbGYuYnVmdHlwZSgnXDAnKSArIGJ1ZikKKworICAgIGRlZiB0ZXN0X3RlbGwoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgMCkKKyAgICAgICAgbWVtaW8uc2Vlayg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgNSkKKyAgICAgICAgbWVtaW8uc2VlaygxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50ZWxsKCksIDEwMDAwKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnRlbGwpCisKKyAgICBkZWYgdGVzdF9mbHVzaChzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZmx1c2goKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby53cml0YWJsZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRhYmxlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uc2Vla2FibGUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5pc2F0dHkoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uY2xvc2VkLCBGYWxzZSkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby53cml0YWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8ucmVhZGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnNlZWthYmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5pc2F0dHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uY2xvc2VkLCBUcnVlKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Npbmcoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIGRlZiB0ZXN0MSgpOgorICAgICAgICAgICAgY2xhc3MgTWVtSU8oc2VsZi5pb2NsYXNzKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBtID0gTWVtSU8oYnVmKQorICAgICAgICAgICAgcmV0dXJuIG0uZ2V0dmFsdWUoKQorICAgICAgICBkZWYgdGVzdDIoKToKKyAgICAgICAgICAgIGNsYXNzIE1lbUlPKHNlbGYuaW9jbGFzcyk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKG1lLCBhLCBiKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pb2NsYXNzLl9faW5pdF9fKG1lLCBhKQorICAgICAgICAgICAgbSA9IE1lbUlPKGJ1ZiwgTm9uZSkKKyAgICAgICAgICAgIHJldHVybiBtLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDIoKSwgYnVmKQorCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZGljdF9sZWFrKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FzZSBmb3IgaXNzdWUgIzYyNDIuCisgICAgICAgICMgVGhpcyB3aWxsIGJlIGNhdWdodCBieSByZWdydGVzdC5weSAtUiBpZiB0aGlzIGxlYWsuCisgICAgICAgIGZvciBfIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgICAgICBtZW1pby5mb28gPSAxCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorICAgICAgICBtZW1pby5mb28gPSA0MgorICAgICAgICBtZW1pby5zZWVrKDIpCisKKyAgICAgICAgY2xhc3MgUGlja2xlVGVzdE1lbUlPKHNlbGYuaW9jbGFzcyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18obWUsIGluaXR2YWx1ZSwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmlvY2xhc3MuX19pbml0X18obWUsIGluaXR2YWx1ZSkKKyAgICAgICAgICAgICAgICBtZS5mb28gPSBmb28KKyAgICAgICAgICAgICMgX19nZXRuZXdhcmdzX18gaXMgdW5kZWZpbmVkIG9uIHB1cnBvc2UuIFRoaXMgY2hlY2tzIHRoYXQgUEVQIDMwNworICAgICAgICAgICAgIyBpcyB1c2VkIHRvIHByb3ZpZGUgcGlja2xpbmcgc3VwcG9ydC4KKworICAgICAgICAjIFBpY2tsZSBleHBlY3RzIHRoZSBjbGFzcyB0byBiZSBvbiB0aGUgbW9kdWxlIGxldmVsLiBIZXJlIHdlIHVzZSBhCisgICAgICAgICMgbGl0dGxlIGhhY2sgdG8gYWxsb3cgdGhlIFBpY2tsZVRlc3RNZW1JTyBjbGFzcyB0byBkZXJpdmUgZnJvbQorICAgICAgICAjIHNlbGYuaW9jbGFzcyB3aXRob3V0IGhhdmluZyB0byBkZWZpbmUgYWxsIGNvbWJpbmF0aW9ucyBleHBsaWNpdGx5IG9uCisgICAgICAgICMgdGhlIG1vZHVsZS1sZXZlbC4KKyAgICAgICAgaW1wb3J0IF9fbWFpbl9fCisgICAgICAgIFBpY2tsZVRlc3RNZW1JTy5fX21vZHVsZV9fID0gJ19fbWFpbl9fJworICAgICAgICBfX21haW5fXy5QaWNrbGVUZXN0TWVtSU8gPSBQaWNrbGVUZXN0TWVtSU8KKyAgICAgICAgc3VibWVtaW8gPSBQaWNrbGVUZXN0TWVtSU8oYnVmLCA4MCkKKyAgICAgICAgc3VibWVtaW8uc2VlaygyKQorCisgICAgICAgICMgV2Ugb25seSBzdXBwb3J0IHBpY2tsZSBwcm90b2NvbCAyIGFuZCBvbndhcmQgc2luY2Ugd2UgdXNlIGV4dGVuZGVkCisgICAgICAgICMgX19yZWR1Y2VfXyBBUEkgb2YgUEVQIDMwNyB0byBwcm92aWRlIHBpY2tsaW5nIHN1cHBvcnQuCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgyLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCk6CisgICAgICAgICAgICBmb3Igb2JqIGluIChtZW1pbywgc3VibWVtaW8pOgorICAgICAgICAgICAgICAgIG9iajIgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9iaiwgcHJvdG9jb2w9cHJvdG8pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmdldHZhbHVlKCksIG9iajIuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2NsYXNzX18sIG9iajIuX19jbGFzc19fKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmZvbywgb2JqMi5mb28pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoudGVsbCgpLCBvYmoyLnRlbGwoKSkKKyAgICAgICAgICAgICAgICBvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBpY2tsZS5kdW1wcywgb2JqLCBwcm90bykKKyAgICAgICAgZGVsIF9fbWFpbl9fLlBpY2tsZVRlc3RNZW1JTworCisKK2NsYXNzIFB5Qnl0ZXNJT1Rlc3QoTWVtb3J5VGVzdE1peGluLCBNZW1vcnlTZWVrVGVzdE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IHB5aW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgYnVmdHlwZShzKToKKyAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJhc2NpaSIpCisgICAgaW9jbGFzcyA9IHB5aW8uQnl0ZXNJTworICAgIEVPRiA9IGIiIgorCisgICAgZGVmIHRlc3RfcmVhZDEoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLnJlYWQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgYnVmKQorCisgICAgZGVmIHRlc3RfcmVhZGludG8oc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBiID0gYnl0ZWFycmF5KGIiaGVsbG8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRpbnRvKGIpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiMTIzNDUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRpbnRvKGIpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiNjc4OTAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRpbnRvKGIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiNjc4OTAiKQorICAgICAgICBiID0gYnl0ZWFycmF5KGIiaGVsbG8gd29ybGQiKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGludG8oYiksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiMTIzNDU2Nzg5MGQiKQorICAgICAgICBiID0gYnl0ZWFycmF5KGIiIikKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRpbnRvKGIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5yZWFkaW50bywgJycpCisgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoYidiJywgYiJoZWxsbyB3b3JsZCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKyAgICAgICAgbWVtaW8ucmVhZGludG8oYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnRvc3RyaW5nKCksIGIiMTIzNDU2Nzg5MGQiKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnJlYWRpbnRvLCBiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhiIjEyMyIpCisgICAgICAgIGIgPSBieXRlYXJyYXkoKQorICAgICAgICBtZW1pby5zZWVrKDQyKQorICAgICAgICBtZW1pby5yZWFkaW50byhiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiIikKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3NlZWsoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoLTEsIDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoMywgMSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uc2VlaygtNCwgMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uc2VlaygtMSwgMiksIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uc2VlaygxLCAxKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uc2VlaygxLCAyKSwgMTEpCisgICAgICAgIG1lbWlvLnNlZWsoLTMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCBidWZbLTM6XSkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBtZW1pby5zZWVrKDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCBidWZbMTpdKQorCisgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5pb2NsYXNzLCAiMTIzNDU2Nzg5MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ud3JpdGUsICIxMjM0NTY3ODkwIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby53cml0ZWxpbmVzLCBbIjEyMzQ1Njc4OTAiXSkKKworICAgIGRlZiB0ZXN0X2J5dGVzX2FycmF5KHNlbGYpOgorICAgICAgICBidWYgPSBiIjEyMzQ1Njc4OTAiCisgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoYidiJywgYnVmKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby53cml0ZShhKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorCisgICAgZGVmIHRlc3RfaXNzdWU1NDQ5KHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBzZWxmLmlvY2xhc3MoaW5pdGlhbF9ieXRlcz1idWYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5pb2NsYXNzLCBidWYsIGZvbz1Ob25lKQorCisKK2NsYXNzIFRleHRJT1Rlc3RNaXhpbjoKKworICAgIGRlZiB0ZXN0X25ld2xpbmVzX3Byb3BlcnR5KHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhuZXdsaW5lPU5vbmUpCisgICAgICAgICMgVGhlIEMgU3RyaW5nSU8gZGVjb2RlcyBuZXdsaW5lcyBpbiB3cml0ZSgpIGNhbGxzLCBidXQgdGhlIFB5dGhvbgorICAgICAgICAjIGltcGxlbWVudGF0aW9uIG9ubHkgZG9lcyB3aGVuIHJlYWRpbmcuICBUaGlzIGZ1bmN0aW9uIGZvcmNlcyB0aGVtIHRvCisgICAgICAgICMgYmUgZGVjb2RlZCBmb3IgdGVzdGluZy4KKyAgICAgICAgZGVmIGZvcmNlX2RlY29kZSgpOgorICAgICAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICAgICAgbWVtaW8ucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ubmV3bGluZXMsIE5vbmUpCisgICAgICAgIG1lbWlvLndyaXRlKCJhXG4iKQorICAgICAgICBmb3JjZV9kZWNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLm5ld2xpbmVzLCAiXG4iKQorICAgICAgICBtZW1pby53cml0ZSgiYlxyXG4iKQorICAgICAgICBmb3JjZV9kZWNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLm5ld2xpbmVzLCAoIlxuIiwgIlxyXG4iKSkKKyAgICAgICAgbWVtaW8ud3JpdGUoImNccmQiKQorICAgICAgICBmb3JjZV9kZWNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLm5ld2xpbmVzLCAoIlxyIiwgIlxuIiwgIlxyXG4iKSkKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3NlZWsoc2VsZik6CisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0xLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAxLCAyKQorCisgICAgZGVmIHRlc3RfdGV4dGlvX3Byb3BlcnRpZXMoc2VsZik6CisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKworICAgICAgICAjIFRoZXNlIGFyZSBqdXN0IGR1bW15IHZhbHVlcyBidXQgd2UgbmV2ZXJ0aGVsZXNzIGNoZWNrIHRoZW0gZm9yIGZlYXIKKyAgICAgICAgIyBvZiB1bmV4cGVjdGVkIGJyZWFrYWdlLgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtZW1pby5lbmNvZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWVtaW8uZXJyb3JzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1lbWlvLmxpbmVfYnVmZmVyaW5nKQorCisgICAgZGVmIHRlc3RfbmV3bGluZV9ub25lKHNlbGYpOgorICAgICAgICAjIG5ld2xpbmU9Tm9uZQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygiYVxuYlxyXG5jXHJkIiwgbmV3bGluZT1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVtaW8pLCBbImFcbiIsICJiXG4iLCAiY1xuIiwgImQiXSkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoMSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDIpLCAiXG5iIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDIpLCAiXG5jIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDEpLCAiXG4iKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhuZXdsaW5lPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbWVtaW8ud3JpdGUoImFcbiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIG1lbWlvLndyaXRlKCJiXHJcbiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIG1lbWlvLndyaXRlKCJjXHJkIikpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksICJhXG5iXG5jXG5kIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoImFcclxuYiIsIG5ld2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDMpLCAiYVxuYiIpCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2VtcHR5KHNlbGYpOgorICAgICAgICAjIG5ld2xpbmU9IiIKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoImFcbmJcclxuY1xyZCIsIG5ld2xpbmU9IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZW1pbyksIFsiYVxuIiwgImJcclxuIiwgImNcciIsICJkIl0pCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDQpLCAiYVxuYlxyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDIpLCAiXG5jIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDEpLCAiXHIiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhuZXdsaW5lPSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1lbWlvLndyaXRlKCJhXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtZW1pby53cml0ZSgiYlxyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbWVtaW8ud3JpdGUoIlxuYyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1lbWlvLndyaXRlKCJccmQiKSkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVtaW8pLCBbImFcbiIsICJiXHJcbiIsICJjXHIiLCAiZCJdKQorCisgICAgZGVmIHRlc3RfbmV3bGluZV9sZihzZWxmKToKKyAgICAgICAgIyBuZXdsaW5lPSJcbiIKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoImFcbmJcclxuY1xyZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZW1pbyksIFsiYVxuIiwgImJcclxuIiwgImNccmQiXSkKKworICAgIGRlZiB0ZXN0X25ld2xpbmVfY3Ioc2VsZik6CisgICAgICAgICMgbmV3bGluZT0iXHIiCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXG5iXHJcbmNccmQiLCBuZXdsaW5lPSJcciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCAiYVxyYlxyXHJjXHJkIikKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVtaW8pLCBbImFcciIsICJiXHIiLCAiXHIiLCAiY1xyIiwgImQiXSkKKworICAgIGRlZiB0ZXN0X25ld2xpbmVfY3JsZihzZWxmKToKKyAgICAgICAgIyBuZXdsaW5lPSJcclxuIgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygiYVxuYlxyXG5jXHJkIiwgbmV3bGluZT0iXHJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCAiYVxyXG5iXHJcclxuY1xyZCIpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1lbWlvKSwgWyJhXHJcbiIsICJiXHJcclxuIiwgImNccmQiXSkKKworICAgIGRlZiB0ZXN0X2lzc3VlNTI2NShzZWxmKToKKyAgICAgICAgIyBTdHJpbmdJTyBjYW4gZHVwbGljYXRlIG5ld2xpbmVzIGluIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXHJcbmJcclxuIiwgbmV3bGluZT1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoNSksICJhXG5iXG4iKQorCisKK2NsYXNzIFB5U3RyaW5nSU9UZXN0KE1lbW9yeVRlc3RNaXhpbiwgTWVtb3J5U2Vla1Rlc3RNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgIFRleHRJT1Rlc3RNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJ1ZnR5cGUgPSB1bmljb2RlCisgICAgaW9jbGFzcyA9IHB5aW8uU3RyaW5nSU8KKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IHB5aW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKyAgICBFT0YgPSAiIgorCisKK2NsYXNzIFB5U3RyaW5nSU9QaWNrbGVUZXN0KFRleHRJT1Rlc3RNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgaWYgcGlja2xlIHJlc3RvcmVzIHByb3Blcmx5IHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiBTdHJpbmdJTy4KKyAgICAiIiIKKyAgICBidWZ0eXBlID0gdW5pY29kZQorICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gcHlpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorICAgIEVPRiA9ICIiCisKKyAgICBjbGFzcyBpb2NsYXNzKHB5aW8uU3RyaW5nSU8pOgorICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhweWlvLlN0cmluZ0lPKCphcmdzLCAqKmt3YXJncykpKQorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MKKworCitjbGFzcyBDQnl0ZXNJT1Rlc3QoUHlCeXRlc0lPVGVzdCk6CisgICAgaW9jbGFzcyA9IGlvLkJ5dGVzSU8KKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisKKyAgICB0ZXN0X2J5dGVzX2FycmF5ID0gdW5pdHRlc3Quc2tpcCgKKyAgICAgICAgImFycmF5LmFycmF5KCkgZG9lcyBub3QgaGF2ZSB0aGUgbmV3IGJ1ZmZlciBBUEkiCisgICAgKShQeUJ5dGVzSU9UZXN0LnRlc3RfYnl0ZXNfYXJyYXkpCisKKworICAgIGRlZiB0ZXN0X2dldHN0YXRlKHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIHN0YXRlID0gbWVtaW8uX19nZXRzdGF0ZV9fKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RhdGUpLCAzKQorICAgICAgICBieXRlYXJyYXkoc3RhdGVbMF0pICMgQ2hlY2sgaWYgc3RhdGVbMF0gc3VwcG9ydHMgdGhlIGJ1ZmZlciBpbnRlcmZhY2UuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsxXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdGF0ZVsyXSwgZGljdCkgb3Igc3RhdGVbMl0gaXMgTm9uZSkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX2dldHN0YXRlX18pCisKKyAgICBkZWYgdGVzdF9zZXRzdGF0ZShzZWxmKToKKyAgICAgICAgIyBUaGlzIGNoZWNrcyB3aGV0aGVyIF9fc2V0c3RhdGVfXyBkb2VzIHByb3BlciBpbnB1dCB2YWxpZGF0aW9uLgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIG1lbWlvLl9fc2V0c3RhdGVfXygoYiJubyBlcnJvciIsIDAsIE5vbmUpKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKGJ5dGVhcnJheShiIm5vIGVycm9yIiksIDAsIE5vbmUpKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKGIibm8gZXJyb3IiLCAwLCB7J3NwYW0nOiAzfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIiIiwgLTEsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCJ1bmljb2RlIiwgMCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiIiLCAwLjAsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIiIiwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiJsZW4tdGVzdCIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIDApCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiJjbG9zZWQiLCAwLCBOb25lKSkKKworICAgIGNoZWNrX3NpemVvZiA9IHN1cHBvcnQuY2hlY2tfc2l6ZW9mCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zaXplb2Yoc2VsZik6CisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZShiJ1AyUFAyUCcpCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmplY3QuX19zaXplb2ZfXyhpby5CeXRlc0lPKCkpLCBiYXNlc2l6ZSkKKyAgICAgICAgY2hlY2soaW8uQnl0ZXNJTygpLCBiYXNlc2l6ZSApCisgICAgICAgIGNoZWNrKGlvLkJ5dGVzSU8oYidhJyksIGJhc2VzaXplICsgMSArIDEgKQorICAgICAgICBjaGVjayhpby5CeXRlc0lPKGInYScgKiAxMDAwKSwgYmFzZXNpemUgKyAxMDAwICsgMSApCisKK2NsYXNzIENTdHJpbmdJT1Rlc3QoUHlTdHJpbmdJT1Rlc3QpOgorICAgIGlvY2xhc3MgPSBpby5TdHJpbmdJTworICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKworICAgICMgWFhYOiBGb3IgdGhlIFB5dGhvbiB2ZXJzaW9uIG9mIGlvLlN0cmluZ0lPLCB0aGlzIGlzIGhpZ2hseQorICAgICMgZGVwZW5kZW50IG9uIHRoZSBlbmNvZGluZyB1c2VkIGZvciB0aGUgdW5kZXJseWluZyBidWZmZXIuCisgICAgZGVmIHRlc3Rfd2lkZWNoYXIoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiXFUwMDAyMDMwYVxVMDAwMjAzNDciKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ud3JpdGUoYnVmKSwgbGVuKGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udGVsbCgpLCBsZW4oYnVmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ud3JpdGUoYnVmKSwgbGVuKGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udGVsbCgpLCBsZW4oYnVmKSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmICsgYnVmKQorCisgICAgZGVmIHRlc3RfZ2V0c3RhdGUoc2VsZik6CisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgc3RhdGUgPSBtZW1pby5fX2dldHN0YXRlX18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0ZSksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVswXSwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0YXRlWzFdLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsyXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdGF0ZVszXSwgZGljdCkgb3Igc3RhdGVbM10gaXMgTm9uZSkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX2dldHN0YXRlX18pCisKKyAgICBkZWYgdGVzdF9zZXRzdGF0ZShzZWxmKToKKyAgICAgICAgIyBUaGlzIGNoZWNrcyB3aGV0aGVyIF9fc2V0c3RhdGVfXyBkb2VzIHByb3BlciBpbnB1dCB2YWxpZGF0aW9uLgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIG1lbWlvLl9fc2V0c3RhdGVfXygoIm5vIGVycm9yIiwgIlxuIiwgMCwgTm9uZSkpCisgICAgICAgIG1lbWlvLl9fc2V0c3RhdGVfXygoIm5vIGVycm9yIiwgIiIsIDAsIHsnc3BhbSc6IDN9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoIiIsICJmIiwgMCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCIiLCAiIiwgLTEsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIiIiwgIiIsIDAsIE5vbmUpKQorICAgICAgICAjIHRydW5rIGlzIG1vcmUgdG9sZXJhbnQgdGhhbiBweTNrIG9uIHRoZSB0eXBlIG9mIHRoZSBuZXdsaW5lIHBhcmFtCisgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCIiLCBiIiIsIDAsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCIiLCAiIiwgMC4wLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiIiwgIiIsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCJsZW4tdGVzdCIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIDApCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoImNsb3NlZCIsICIiLCAwLCBOb25lKSkKKworCitjbGFzcyBDU3RyaW5nSU9QaWNrbGVUZXN0KFB5U3RyaW5nSU9QaWNrbGVUZXN0KToKKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisKKyAgICBjbGFzcyBpb2NsYXNzKGlvLlN0cmluZ0lPKToKKyAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoaW8uU3RyaW5nSU8oKmFyZ3MsICoqa3dhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sPTIpKQorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbUHlCeXRlc0lPVGVzdCwgUHlTdHJpbmdJT1Rlc3QsIENCeXRlc0lPVGVzdCwgQ1N0cmluZ0lPVGVzdCwKKyAgICAgICAgICAgICBQeVN0cmluZ0lPUGlja2xlVGVzdCwgQ1N0cmluZ0lPUGlja2xlVGVzdF0KKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNWRkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CkBAIC0wLDAgKzEsMzYxIEBACisiIiJVbml0IHRlc3RzIGZvciB0aGUgbWVtb3J5dmlldworCitYWFggV2UgbmVlZCBtb3JlIHRlc3RzISBTb21lIHRlc3RzIGFyZSBpbiB0ZXN0X2J5dGVzCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgZ2MKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgYXJyYXkKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgaW8KKworCitjbGFzcyBBYnN0cmFjdE1lbW9yeVRlc3RzOgorICAgIHNvdXJjZV9ieXRlcyA9IGIiYWJjZGVmIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9zb3VyY2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZV9ieXRlcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIF90eXBlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihOb25lLCBbc2VsZi5yb190eXBlLCBzZWxmLnJ3X3R5cGVdKQorCisgICAgZGVmIGNoZWNrX2dldGl0ZW1fd2l0aF90eXBlKHNlbGYsIHRwKToKKyAgICAgICAgaXRlbSA9IHNlbGYuZ2V0aXRlbV90eXBlCisgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgIG9sZHJlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KGIpCisgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVswXSwgaXRlbShiImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1bMF0sIGJ5dGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bNV0sIGl0ZW0oYiJmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVstMV0sIGl0ZW0oYiJmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVstNl0sIGl0ZW0oYiJhIikpCisgICAgICAgICMgQm91bmRzIGNoZWNraW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogbVs2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBtWy03XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBtW3N5cy5tYXhzaXplXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBtWy1zeXMubWF4c2l6ZV0pCisgICAgICAgICMgVHlwZSBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbVtOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1bMC4wXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1bImEiXSkKKyAgICAgICAgbSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYiksIG9sZHJlZmNvdW50KQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgc2VsZi5jaGVja19nZXRpdGVtX3dpdGhfdHlwZSh0cCkKKworICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0pLCBbbVtpXSBmb3IgaSBpbiByYW5nZShsZW4obSkpXSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uX19yZXByX18oKSwgc3RyKQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbV9yZWFkb25seShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucm9fdHlwZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiID0gc2VsZi5yb190eXBlKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgb2xkcmVmY291bnQgPSBzeXMuZ2V0cmVmY291bnQoYikKKyAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgZGVmIHNldGl0ZW0odmFsdWUpOgorICAgICAgICAgICAgbVswXSA9IHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRpdGVtLCA2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRpdGVtLCBtZW1vcnl2aWV3KGIiYSIpKQorICAgICAgICBtID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChiKSwgb2xkcmVmY291bnQpCisKKyAgICBkZWYgdGVzdF9zZXRpdGVtX3dyaXRhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5yd190eXBlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRwID0gc2VsZi5yd190eXBlCisgICAgICAgIGIgPSBzZWxmLnJ3X3R5cGUoc2VsZi5fc291cmNlKQorICAgICAgICBvbGRyZWZjb3VudCA9IHN5cy5nZXRyZWZjb3VudChiKQorICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICBtWzBdID0gdHAoYiIwIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY29udGVudHModHAsIGIsIGIiMGJjZGVmIikKKyAgICAgICAgbVsxOjNdID0gdHAoYiIxMiIpCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiIjAxMmRlZiIpCisgICAgICAgIG1bMToxXSA9IHRwKGIiIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY29udGVudHModHAsIGIsIGIiMDEyZGVmIikKKyAgICAgICAgbVs6XSA9IHRwKGIiYWJjZGVmIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY29udGVudHModHAsIGIsIGIiYWJjZGVmIikKKworICAgICAgICAjIE92ZXJsYXBwaW5nIGNvcGllcyBvZiBhIHZpZXcgaW50byBpdHNlbGYKKyAgICAgICAgbVswOjNdID0gbVsyOjVdCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiImNkZWRlZiIpCisgICAgICAgIG1bOl0gPSB0cChiImFiY2RlZiIpCisgICAgICAgIG1bMjo1XSA9IG1bMDozXQorICAgICAgICBzZWxmLl9jaGVja19jb250ZW50cyh0cCwgYiwgYiJhYmFiY2YiKQorCisgICAgICAgIGRlZiBzZXRpdGVtKGtleSwgdmFsdWUpOgorICAgICAgICAgICAgbVtrZXldID0gdHAodmFsdWUpCisgICAgICAgICMgQm91bmRzIGNoZWNraW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHNldGl0ZW0sIDYsIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHNldGl0ZW0sIC03LCBiImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzZXRpdGVtLCBzeXMubWF4c2l6ZSwgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgc2V0aXRlbSwgLXN5cy5tYXhzaXplLCBiImEiKQorICAgICAgICAjIFdyb25nIGluZGV4L3NsaWNlIHR5cGVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgMC4wLCBiImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGl0ZW0sICgwLCksIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgImEiLCBiImEiKQorICAgICAgICAjIFRyeWluZyB0byByZXNpemUgdGhlIG1lbW9yeSBvYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0aXRlbSwgMCwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRpdGVtLCAwLCBiImFiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0aXRlbSwgc2xpY2UoMSwxKSwgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0aXRlbSwgc2xpY2UoMCwyKSwgYiJhIikKKworICAgICAgICBtID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChiKSwgb2xkcmVmY291bnQpCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBkZWwgbVsxXQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGRlbCBtWzE6NF0KKworICAgIGRlZiB0ZXN0X3RvYnl0ZXMoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgICAgICBiID0gbS50b2J5dGVzKCkKKyAgICAgICAgICAgICMgVGhpcyBjYWxscyBzZWxmLmdldGl0ZW1fdHlwZSgpIG9uIGVhY2ggc2VwYXJhdGUgYnl0ZSBvZiBiImFiY2RlZiIKKyAgICAgICAgICAgIGV4cGVjdGVkID0gYiIiLmpvaW4oCisgICAgICAgICAgICAgICAgc2VsZi5nZXRpdGVtX3R5cGUoYykgZm9yIGMgaW4gYiJhYmNkZWYiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiLCBieXRlcykKKworICAgIGRlZiB0ZXN0X3RvbGlzdChzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcodHAoc2VsZi5fc291cmNlKSkKKyAgICAgICAgICAgIGwgPSBtLnRvbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIG1hcChvcmQsIGIiYWJjZGVmIikpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIG1lbW9yeXZpZXdzIGNhbiBjb21wYXJlIGZvciBlcXVhbGl0eSB3aXRoIG90aGVyIG9iamVjdHMKKyAgICAgICAgIyBoYXZpbmcgdGhlIGJ1ZmZlciBpbnRlcmZhY2UuCisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgICAgICBmb3IgdHBfY29tcCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSA9PSB0cF9jb21wKGIiYWJjZGVmIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtICE9IHRwX2NvbXAoYiJhYmNkZWYiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0gPT0gdHBfY29tcChiImFiY2RlIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gIT0gdHBfY29tcChiImFiY2RlIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtID09IHRwX2NvbXAoYiJhYmNkZTEiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSAhPSB0cF9jb21wKGIiYWJjZGUxIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSA9PSBtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gPT0gbVs6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtWzA6Nl0gPT0gbVs6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobVswOjVdID09IG0pCisKKyAgICAgICAgICAgICMgQ29tcGFyaXNvbiB3aXRoIG9iamVjdHMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtID09IHUiYWJjZGVmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtICE9IHUiYWJjZGVmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodSJhYmNkZWYiID09IG0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodSJhYmNkZWYiICE9IG0pCisKKyAgICAgICAgICAgICMgVW5vcmRlcmVkIGNvbXBhcmlzb25zIGFyZSB1bmltcGxlbWVudGVkLCBhbmQgdGhlcmVmb3JlIGdpdmUKKyAgICAgICAgICAgICMgYXJiaXRyYXJ5IHJlc3VsdHMgKHRoZXkgcmFpc2UgYSBUeXBlRXJyb3IgaW4gcHkzaykKKworICAgIGRlZiBjaGVja19hdHRyaWJ1dGVzX3dpdGhfdHlwZShzZWxmLCB0cCk6CisgICAgICAgIG0gPSBzZWxmLl92aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5mb3JtYXQsIHNlbGYuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5mb3JtYXQsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zaXplLCBzZWxmLml0ZW1zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubmRpbSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnNoYXBlLCAoNiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnN0cmlkZXMsIChzZWxmLml0ZW1zaXplLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zdWJvZmZzZXRzLCBOb25lKQorICAgICAgICByZXR1cm4gbQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlc19yZWFkb25seShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucm9fdHlwZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBtID0gc2VsZi5jaGVja19hdHRyaWJ1dGVzX3dpdGhfdHlwZShzZWxmLnJvX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZWFkb25seSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfd3JpdGFibGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJ3X3R5cGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbSA9IHNlbGYuY2hlY2tfYXR0cmlidXRlc193aXRoX3R5cGUoc2VsZi5yd190eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmVhZG9ubHksIEZhbHNlKQorCisgICAgIyBEaXNhYmxlZDogdW5pY29kZSB1c2VzIHRoZSBvbGQgYnVmZmVyIEFQSSBpbiAyLngKKworICAgICNkZWYgdGVzdF9nZXRidWZmZXIoc2VsZik6CisgICAgICAgICMjIFRlc3QgUHlPYmplY3RfR2V0QnVmZmVyKCkgb24gYSBtZW1vcnl2aWV3IG9iamVjdC4KKyAgICAgICAgI2ZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgICNiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgI29sZHJlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KGIpCisgICAgICAgICAgICAjbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgICNvbGR2aWV3cmVmY291bnQgPSBzeXMuZ2V0cmVmY291bnQobSkKKyAgICAgICAgICAgICNzID0gdW5pY29kZShtLCAidXRmLTgiKQorICAgICAgICAgICAgI3NlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBzLmVuY29kZSgidXRmLTgiKSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChtKSwgb2xkdmlld3JlZmNvdW50KQorICAgICAgICAgICAgI20gPSBOb25lCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYiksIG9sZHJlZmNvdW50KQorCisgICAgZGVmIHRlc3RfZ2Moc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRwLCB0eXBlKToKKyAgICAgICAgICAgICAgICAjIElmIHRwIGlzIGEgZmFjdG9yeSByYXRoZXIgdGhhbiBhIHBsYWluIHR5cGUsIHNraXAKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBjbGFzcyBNeVNvdXJjZSh0cCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgY2xhc3MgTXlPYmplY3Q6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAjIENyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZSB0aHJvdWdoIGEgbWVtb3J5dmlldyBvYmplY3QKKyAgICAgICAgICAgIGIgPSBNeVNvdXJjZSh0cChiJ2FiYycpKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIG8gPSBNeU9iamVjdCgpCisgICAgICAgICAgICBiLm0gPSBtCisgICAgICAgICAgICBiLm8gPSBvCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG8pCisgICAgICAgICAgICBiID0gbSA9IG8gPSBOb25lCisgICAgICAgICAgICAjIFRoZSBjeWNsZSBtdXN0IGJlIGJyb2tlbgorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cigpKQorCisgICAgZGVmIHRlc3Rfd3JpdGFibGVfcmVhZG9ubHkoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEwNDUxOiBtZW1vcnl2aWV3IGluY29ycmVjdGx5IGV4cG9zZXMgYSByZWFkb25seQorICAgICAgICAjIGJ1ZmZlciBhcyB3cml0YWJsZSBjYXVzaW5nIGEgc2VnZmF1bHQgaWYgdXNpbmcgbW1hcAorICAgICAgICB0cCA9IHNlbGYucm9fdHlwZQorICAgICAgICBpZiB0cCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgIGkgPSBpby5CeXRlc0lPKGInWlpaWicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaS5yZWFkaW50bywgbSkKKworIyBWYXJpYXRpb25zIG9uIHNvdXJjZSBvYmplY3RzIGZvciB0aGUgYnVmZmVyOiBieXRlcy1saWtlIG9iamVjdHMsIHRoZW4gYXJyYXlzCisjIHdpdGggaXRlbXNpemUgPiAxLgorIyBOT1RFOiBzdXBwb3J0IGZvciBtdWx0aS1kaW1lbnNpb25hbCBvYmplY3RzIGlzIHVuaW1wbGVtZW50ZWQuCisKK2NsYXNzIEJhc2VCeXRlc01lbW9yeVRlc3RzKEFic3RyYWN0TWVtb3J5VGVzdHMpOgorICAgIHJvX3R5cGUgPSBieXRlcworICAgIHJ3X3R5cGUgPSBieXRlYXJyYXkKKyAgICBnZXRpdGVtX3R5cGUgPSBieXRlcworICAgIGl0ZW1zaXplID0gMQorICAgIGZvcm1hdCA9ICdCJworCisjIERpc2FibGVkOiBhcnJheS5hcnJheSgpIGRvZXMgbm90IHN1cHBvcnQgdGhlIG5ldyBidWZmZXIgQVBJIGluIDIueAorCisjY2xhc3MgQmFzZUFycmF5TWVtb3J5VGVzdHMoQWJzdHJhY3RNZW1vcnlUZXN0cyk6CisgICAgI3JvX3R5cGUgPSBOb25lCisgICAgI3J3X3R5cGUgPSBsYW1iZGEgc2VsZiwgYjogYXJyYXkuYXJyYXkoJ2knLCBtYXAob3JkLCBiKSkKKyAgICAjZ2V0aXRlbV90eXBlID0gbGFtYmRhIHNlbGYsIGI6IGFycmF5LmFycmF5KCdpJywgbWFwKG9yZCwgYikpLnRvc3RyaW5nKCkKKyAgICAjaXRlbXNpemUgPSBhcnJheS5hcnJheSgnaScpLml0ZW1zaXplCisgICAgI2Zvcm1hdCA9ICdpJworCisgICAgI2RlZiB0ZXN0X2dldGJ1ZmZlcihzZWxmKToKKyAgICAgICAgIyMgWFhYIFRlc3Qgc2hvdWxkIGJlIGFkYXB0ZWQgZm9yIG5vbi1ieXRlIGJ1ZmZlcnMKKyAgICAgICAgI3Bhc3MKKworICAgICNkZWYgdGVzdF90b2xpc3Qoc2VsZik6CisgICAgICAgICMjIFhYWCBOb3RJbXBsZW1lbnRlZEVycm9yOiB0b2xpc3QoKSBvbmx5IHN1cHBvcnRzIGJ5dGUgdmlld3MKKyAgICAgICAgI3Bhc3MKKworCisjIFZhcmlhdGlvbnMgb24gaW5kaXJlY3Rpb24gbGV2ZWxzOiBtZW1vcnl2aWV3LCBzbGljZSBvZiBtZW1vcnl2aWV3LAorIyBzbGljZSBvZiBzbGljZSBvZiBtZW1vcnl2aWV3LgorIyBUaGlzIGlzIGltcG9ydGFudCB0byB0ZXN0IGFsbG9jYXRpb24gc3VidGxldGllcy4KKworY2xhc3MgQmFzZU1lbW9yeXZpZXdUZXN0czoKKyAgICBkZWYgX3ZpZXcoc2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIG1lbW9yeXZpZXcob2JqKQorCisgICAgZGVmIF9jaGVja19jb250ZW50cyhzZWxmLCB0cCwgb2JqLCBjb250ZW50cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB0cChjb250ZW50cykpCisKK2NsYXNzIEJhc2VNZW1vcnlTbGljZVRlc3RzOgorICAgIHNvdXJjZV9ieXRlcyA9IGIiWGFiY2RlZlkiCisKKyAgICBkZWYgX3ZpZXcoc2VsZiwgb2JqKToKKyAgICAgICAgbSA9IG1lbW9yeXZpZXcob2JqKQorICAgICAgICByZXR1cm4gbVsxOjddCisKKyAgICBkZWYgX2NoZWNrX2NvbnRlbnRzKHNlbGYsIHRwLCBvYmosIGNvbnRlbnRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmpbMTo3XSwgdHAoY29udGVudHMpKQorCisgICAgZGVmIHRlc3RfcmVmcyhzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgbSA9IG1lbW9yeXZpZXcodHAoc2VsZi5fc291cmNlKSkKKyAgICAgICAgICAgIG9sZHJlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KG0pCisgICAgICAgICAgICBtWzE6Ml0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KG0pLCBvbGRyZWZjb3VudCkKKworY2xhc3MgQmFzZU1lbW9yeVNsaWNlU2xpY2VUZXN0czoKKyAgICBzb3VyY2VfYnl0ZXMgPSBiIlhhYmNkZWZZIgorCisgICAgZGVmIF92aWV3KHNlbGYsIG9iaik6CisgICAgICAgIG0gPSBtZW1vcnl2aWV3KG9iaikKKyAgICAgICAgcmV0dXJuIG1bOjddWzE6XQorCisgICAgZGVmIF9jaGVja19jb250ZW50cyhzZWxmLCB0cCwgb2JqLCBjb250ZW50cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqWzE6N10sIHRwKGNvbnRlbnRzKSkKKworCisjIENvbmNyZXRlIHRlc3QgY2xhc3NlcworCitjbGFzcyBCeXRlc01lbW9yeXZpZXdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLAorICAgIEJhc2VNZW1vcnl2aWV3VGVzdHMsIEJhc2VCeXRlc01lbW9yeVRlc3RzKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBvYiA9IHRwKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZW1vcnl2aWV3KG9iKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZW1vcnl2aWV3KG9iamVjdD1vYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbW9yeXZpZXcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbW9yeXZpZXcsIG9iLCBvYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtb3J5dmlldywgYXJndW1lbnQ9b2IpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbW9yeXZpZXcsIG9iLCBhcmd1bWVudD1UcnVlKQorCisjY2xhc3MgQXJyYXlNZW1vcnl2aWV3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICAjQmFzZU1lbW9yeXZpZXdUZXN0cywgQmFzZUFycmF5TWVtb3J5VGVzdHMpOgorCisgICAgI2RlZiB0ZXN0X2FycmF5X2Fzc2lnbihzZWxmKToKKyAgICAgICAgIyMgSXNzdWUgIzQ1Njk6IHNlZ2ZhdWx0IHdoZW4gbXV0YXRpbmcgYSBtZW1vcnl2aWV3IHdpdGggaXRlbXNpemUgIT0gMQorICAgICAgICAjYSA9IGFycmF5LmFycmF5KCdpJywgcmFuZ2UoMTApKQorICAgICAgICAjbSA9IG1lbW9yeXZpZXcoYSkKKyAgICAgICAgI25ld19hID0gYXJyYXkuYXJyYXkoJ2knLCByYW5nZSg5LCAtMSwgLTEpKQorICAgICAgICAjbVs6XSA9IG5ld19hCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGEsIG5ld19hKQorCisKK2NsYXNzIEJ5dGVzTWVtb3J5U2xpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLAorICAgIEJhc2VNZW1vcnlTbGljZVRlc3RzLCBCYXNlQnl0ZXNNZW1vcnlUZXN0cyk6CisgICAgcGFzcworCisjY2xhc3MgQXJyYXlNZW1vcnlTbGljZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsCisgICAgI0Jhc2VNZW1vcnlTbGljZVRlc3RzLCBCYXNlQXJyYXlNZW1vcnlUZXN0cyk6CisgICAgI3Bhc3MKKworY2xhc3MgQnl0ZXNNZW1vcnlTbGljZVNsaWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICBCYXNlTWVtb3J5U2xpY2VTbGljZVRlc3RzLCBCYXNlQnl0ZXNNZW1vcnlUZXN0cyk6CisgICAgcGFzcworCisjY2xhc3MgQXJyYXlNZW1vcnlTbGljZVNsaWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICAjQmFzZU1lbW9yeVNsaWNlU2xpY2VUZXN0cywgQmFzZUFycmF5TWVtb3J5VGVzdHMpOgorICAgICNwYXNzCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21obGliLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWhsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2ZGY0NAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21obGliLnB5CkBAIC0wLDAgKzEsMzQ4IEBACisiIiIKKyAgIFRlc3RzIGZvciB0aGUgbWhsaWIgbW9kdWxlCisgICBOaWNrIE1hdGhld3NvbgorIiIiCisKKyMjIyBCVUc6IFRoaXMgc3VpdGUgZG9lc24ndCBjdXJyZW50bHkgdGVzdCB0aGUgbWltZSBmdW5jdGlvbmFsaXR5IG9mCisjIyMgICAgICBtaGxpYi4gIEl0IHNob3VsZC4KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgaW1wb3J0X21vZHVsZQoraW1wb3J0IG9zLCBTdHJpbmdJTworaW1wb3J0IHN5cworbWhsaWIgPSBpbXBvcnRfbW9kdWxlKCdtaGxpYicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworaWYgKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKSBvciBzeXMucGxhdGZvcm09PSJyaXNjb3MiIG9yCisgICAgICBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYXRoZW9zIikpOgorICAgICMgbWhsaWIudXBkYXRlbGluZSgpIHJlbmFtZXMgYSBmaWxlIHRvIHRoZSBuYW1lIG9mIGEgZmlsZSB0aGF0IGFscmVhZHkKKyAgICAjIGV4aXN0cy4gIFRoYXQgY2F1c2VzIGEgcmVhc29uYWJsZSBPUyA8d2luaz4gdG8gY29tcGxhaW4gaW4gdGVzdF9zZXF1ZW5jZQorICAgICMgaGVyZSwgbGlrZSB0aGUgIk9TRXJyb3I6IFtFcnJubyAxN10gRmlsZSBleGlzdHMiIHJhaXNlZCBvbiBXaW5kb3dzLgorICAgICMgbWhsaWIncyBsaXN0c3ViZm9sZGVycygpIGFuZCBsaXN0YWxsZm9sZGVycygpIGRvIHNvbWV0aGluZyB3aXRoCisgICAgIyBsaW5rIGNvdW50cywgYW5kIHRoYXQgY2F1c2VzIHRlc3RfbGlzdGZvbGRlcnMoKSBoZXJlIHRvIGdldCBiYWNrCisgICAgIyBhbiBlbXB0eSBsaXN0IGZyb20gaXRzIGNhbGwgb2YgbGlzdGFsbGZvbGRlcnMoKS4KKyAgICAjIFRoZSBvdGhlciB0ZXN0cyBoZXJlIHBhc3Mgb24gV2luZG93cy4KKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2tpcHBlZCBvbiAlcyAtLSAiICUgc3lzLnBsYXRmb3JtICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vIG1hbnkgVW5peCBhc3N1bXB0aW9ucyIpCisKK19taHJvb3QgPSBURVNURk4rIl9NSCIKK19taHBhdGggPSBvcy5wYXRoLmpvaW4oX21ocm9vdCwgIk1IIikKK19taHByb2ZpbGUgPSBvcy5wYXRoLmpvaW4oX21ocm9vdCwgIi5taF9wcm9maWxlIikKKworZGVmIG5vcm1GKGYpOgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oKmYuc3BsaXQoJy8nKSkKKworZGVmIHdyaXRlRmlsZShmbmFtZSwgY29udGVudHMpOgorICAgIGRpciA9IG9zLnBhdGguc3BsaXQoZm5hbWUpWzBdCisgICAgaWYgZGlyIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoZGlyKToKKyAgICAgICAgbWtkaXJzKGRpcikKKyAgICBmID0gb3BlbihmbmFtZSwgJ3cnKQorICAgIGYud3JpdGUoY29udGVudHMpCisgICAgZi5jbG9zZSgpCisKK2RlZiByZWFkRmlsZShmbmFtZSk6CisgICAgZiA9IG9wZW4oZm5hbWUpCisgICAgciA9IGYucmVhZCgpCisgICAgZi5jbG9zZSgpCisgICAgcmV0dXJuIHIKKworZGVmIHdyaXRlUHJvZmlsZShkaWN0KToKKyAgICBjb250ZW50cyA9IFsgIiVzOiAlc1xuIiAlIChrLCB2KSBmb3IgaywgdiBpbiBkaWN0Lml0ZXJpdGVtcygpIF0KKyAgICB3cml0ZUZpbGUoX21ocHJvZmlsZSwgIiIuam9pbihjb250ZW50cykpCisKK2RlZiB3cml0ZUNvbnRleHQoZm9sZGVyKToKKyAgICBmb2xkZXIgPSBub3JtRihmb2xkZXIpCisgICAgd3JpdGVGaWxlKG9zLnBhdGguam9pbihfbWhwYXRoLCAiY29udGV4dCIpLAorICAgICAgICAgICAgICAiQ3VycmVudC1Gb2xkZXI6ICVzXG4iICUgZm9sZGVyKQorCitkZWYgd3JpdGVDdXJNZXNzYWdlKGZvbGRlciwgY3VyKToKKyAgICBmb2xkZXIgPSBub3JtRihmb2xkZXIpCisgICAgd3JpdGVGaWxlKG9zLnBhdGguam9pbihfbWhwYXRoLCBmb2xkZXIsICIubWhfc2VxdWVuY2VzIiksCisgICAgICAgICAgICAgICJjdXI6ICVzXG4iJWN1cikKKworZGVmIHdyaXRlTWVzc2FnZShmb2xkZXIsIG4sIGhlYWRlcnMsIGJvZHkpOgorICAgIGZvbGRlciA9IG5vcm1GKGZvbGRlcikKKyAgICBoZWFkZXJzID0gIiIuam9pbihbICIlczogJXNcbiIgJSAoaywgdikgZm9yIGssIHYgaW4gaGVhZGVycy5pdGVyaXRlbXMoKSBdKQorICAgIGNvbnRlbnRzID0gIiVzXG4lc1xuIiAlIChoZWFkZXJzLGJvZHkpCisgICAgbWtkaXJzKG9zLnBhdGguam9pbihfbWhwYXRoLCBmb2xkZXIpKQorICAgIHdyaXRlRmlsZShvcy5wYXRoLmpvaW4oX21ocGF0aCwgZm9sZGVyLCBzdHIobikpLCBjb250ZW50cykKKworZGVmIGdldE1IKCk6CisgICAgcmV0dXJuIG1obGliLk1IKG9zLnBhdGguYWJzcGF0aChfbWhwYXRoKSwgX21ocHJvZmlsZSkKKworZGVmIHNvcnRMaW5lcyhzKToKKyAgICBsaW5lcyA9IHMuc3BsaXQoIlxuIikKKyAgICBsaW5lcyA9IFsgbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGxpbmVzIGlmIGxlbihsaW5lKSA+PSAyIF0KKyAgICBsaW5lcy5zb3J0KCkKKyAgICByZXR1cm4gbGluZXMKKworIyBUaGVzZSBuZXh0IDIgZnVuY3Rpb25zIGFyZSBjb3BpZWQgZnJvbSB0ZXN0X2dsb2IucHkuCitkZWYgbWtkaXJzKGZuYW1lKToKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbmFtZSkgb3IgZm5hbWUgPT0gJyc6CisgICAgICAgIHJldHVybgorICAgIGJhc2UsIGZpbGUgPSBvcy5wYXRoLnNwbGl0KGZuYW1lKQorICAgIG1rZGlycyhiYXNlKQorICAgIG9zLm1rZGlyKGZuYW1lKQorCitkZWYgZGVsdHJlZShmbmFtZSk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZuYW1lKToKKyAgICAgICAgcmV0dXJuCisgICAgZm9yIGYgaW4gb3MubGlzdGRpcihmbmFtZSk6CisgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKGZuYW1lLCBmKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIGRlbHRyZWUoZnVsbG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGZ1bGxuYW1lKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIG9zLnJtZGlyKGZuYW1lKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCitjbGFzcyBNaGxpYlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRlbHRyZWUoX21ocm9vdCkKKyAgICAgICAgbWtkaXJzKF9taHBhdGgpCisgICAgICAgIHdyaXRlUHJvZmlsZSh7J1BhdGgnIDogb3MucGF0aC5hYnNwYXRoKF9taHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICdFZGl0b3InOiAnZW1hY3MnLAorICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmVkLWF0dHJpYnV0ZSc6ICdjYW1waW5nIGhvbGlkYXknfSkKKyAgICAgICAgIyBOb3RlOiBUaGVzZSBoZWFkZXJzIGFyZW4ndCByZWFsbHkgY29uZm9ybWFudCB0byBSRkM4MjIsIGJ1dAorICAgICAgICAjICBtaGxpYiBzaG91bGRuJ3QgY2FyZSBhYm91dCB0aGF0LgorCisgICAgICAgICMgQW4gaW5ib3ggd2l0aCBhIGNvdXBsZSBvZiBtZXNzYWdlcy4KKyAgICAgICAgd3JpdGVNZXNzYWdlKCdpbmJveCcsIDEsCisgICAgICAgICAgICAgICAgICAgICB7J0Zyb20nOiAnTXJzLiBQcmVtaXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAnVG8nOiAnTXJzLiBDb25jbHVzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAnRGF0ZSc6ICcxOCBKdWx5IDIwMDEnfSwgIkh1bGxvLCBNcnMuIENvbmNsdXNpb24hXG4iKQorICAgICAgICB3cml0ZU1lc3NhZ2UoJ2luYm94JywgMiwKKyAgICAgICAgICAgICAgICAgICAgIHsnRnJvbSc6ICdNcnMuIENvbmNsdXNpb24nLAorICAgICAgICAgICAgICAgICAgICAgICdUbyc6ICdNcnMuIFByZW1pc2UnLAorICAgICAgICAgICAgICAgICAgICAgICdEYXRlJzogJzI5IEp1bHkgMjAwMSd9LCAiSHVsbG8sIE1ycy4gUHJlbWlzZSFcbiIpCisKKyAgICAgICAgIyBBIGZvbGRlciB3aXRoIG1hbnkgbWVzc2FnZXMKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSwgMTAxKStyYW5nZSgxMDEsIDIwMSwgMik6CisgICAgICAgICAgICB3cml0ZU1lc3NhZ2UoJ3dpZGUnLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnRnJvbSc6ICdub3doZXJlJywgJ1N1YmplY3QnOiAnbWVzc2FnZSAjJXMnICUgaX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgbWVzc2FnZSBudW1iZXIgJXNcbiIgJSBpKQorCisgICAgICAgICMgQSBkZWVwbHkgbmVzdGVkIGZvbGRlcgorICAgICAgICBkZWYgZGVlcChmb2xkZXIsIG4pOgorICAgICAgICAgICAgd3JpdGVNZXNzYWdlKGZvbGRlciwgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J1N1YmplY3QnOiAnTWVzc2FnZSAlcy8lcycgJSAoZm9sZGVyLCBuKSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIG1lc3NhZ2UgbnVtYmVyICVzIGluICVzXG4iICUgKG4sIGZvbGRlcikgKQorICAgICAgICBkZWVwKCdkZWVwL2YxJywgMSkKKyAgICAgICAgZGVlcCgnZGVlcC9mMScsIDIpCisgICAgICAgIGRlZXAoJ2RlZXAvZjEnLCAzKQorICAgICAgICBkZWVwKCdkZWVwL2YyJywgNCkKKyAgICAgICAgZGVlcCgnZGVlcC9mMicsIDYpCisgICAgICAgIGRlZXAoJ2RlZXAnLCAzKQorICAgICAgICBkZWVwKCdkZWVwL2YyL2YzJywgMSkKKyAgICAgICAgZGVlcCgnZGVlcC9mMi9mMycsIDIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGRlbHRyZWUoX21ocm9vdCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICB3cml0ZUNvbnRleHQoJ2luYm94JykKKyAgICAgICAgd3JpdGVDdXJNZXNzYWdlKCdpbmJveCcsIDIpCisgICAgICAgIG1oID0gZ2V0TUgoKQorCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShtaC5nZXRwcm9maWxlKCdFZGl0b3InKSwgJ2VtYWNzJykKKyAgICAgICAgZXEobWguZ2V0cHJvZmlsZSgnbm90LXNldCcpLCBOb25lKQorICAgICAgICBlcShtaC5nZXRwYXRoKCksIG9zLnBhdGguYWJzcGF0aChfbWhwYXRoKSkKKyAgICAgICAgZXEobWguZ2V0Y29udGV4dCgpLCAnaW5ib3gnKQorCisgICAgICAgIG1oLnNldGNvbnRleHQoJ3dpZGUnKQorICAgICAgICBlcShtaC5nZXRjb250ZXh0KCksICd3aWRlJykKKyAgICAgICAgZXEocmVhZEZpbGUob3MucGF0aC5qb2luKF9taHBhdGgsICdjb250ZXh0JykpLAorICAgICAgICAgICAiQ3VycmVudC1Gb2xkZXI6IHdpZGVcbiIpCisKKyAgICAgICAgbWguc2V0Y29udGV4dCgnaW5ib3gnKQorCisgICAgICAgIGluYm94ID0gbWgub3BlbmZvbGRlcignaW5ib3gnKQorICAgICAgICBlcShpbmJveC5nZXRmdWxsbmFtZSgpLAorICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKF9taHBhdGgpLCAnaW5ib3gnKSkKKyAgICAgICAgZXEoaW5ib3guZ2V0c2VxdWVuY2VzZmlsZW5hbWUoKSwKKyAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguYWJzcGF0aChfbWhwYXRoKSwgJ2luYm94JywgJy5taF9zZXF1ZW5jZXMnKSkKKyAgICAgICAgZXEoaW5ib3guZ2V0bWVzc2FnZWZpbGVuYW1lKDEpLAorICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKF9taHBhdGgpLCAnaW5ib3gnLCAnMScpKQorCisgICAgZGVmIHRlc3RfbGlzdGZvbGRlcnMoc2VsZik6CisgICAgICAgIG1oID0gZ2V0TUgoKQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBmb2xkZXJzID0gbWgubGlzdGZvbGRlcnMoKQorICAgICAgICBmb2xkZXJzLnNvcnQoKQorICAgICAgICBlcShmb2xkZXJzLCBbJ2RlZXAnLCAnaW5ib3gnLCAnd2lkZSddKQorCisgICAgICAgIGZvbGRlcnMgPSBtaC5saXN0YWxsZm9sZGVycygpCisgICAgICAgIGZvbGRlcnMuc29ydCgpCisgICAgICAgIHRmb2xkZXJzID0gbWFwKG5vcm1GLCBbJ2RlZXAnLCAnZGVlcC9mMScsICdkZWVwL2YyJywgJ2RlZXAvZjIvZjMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5ib3gnLCAnd2lkZSddKQorICAgICAgICB0Zm9sZGVycy5zb3J0KCkKKyAgICAgICAgZXEoZm9sZGVycywgdGZvbGRlcnMpCisKKyAgICAgICAgZm9sZGVycyA9IG1oLmxpc3RzdWJmb2xkZXJzKCdkZWVwJykKKyAgICAgICAgZm9sZGVycy5zb3J0KCkKKyAgICAgICAgZXEoZm9sZGVycywgbWFwKG5vcm1GLCBbJ2RlZXAvZjEnLCAnZGVlcC9mMiddKSkKKworICAgICAgICBmb2xkZXJzID0gbWgubGlzdGFsbHN1YmZvbGRlcnMoJ2RlZXAnKQorICAgICAgICBmb2xkZXJzLnNvcnQoKQorICAgICAgICBlcShmb2xkZXJzLCBtYXAobm9ybUYsIFsnZGVlcC9mMScsICdkZWVwL2YyJywgJ2RlZXAvZjIvZjMnXSkpCisgICAgICAgIGVxKG1oLmxpc3RzdWJmb2xkZXJzKG5vcm1GKCdkZWVwL2YyJykpLCBbbm9ybUYoJ2RlZXAvZjIvZjMnKV0pCisKKyAgICAgICAgZXEobWgubGlzdHN1YmZvbGRlcnMoJ2luYm94JyksIFtdKQorICAgICAgICBlcShtaC5saXN0YWxsc3ViZm9sZGVycygnaW5ib3gnKSwgW10pCisKKyAgICBkZWYgdGVzdF9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgbWggPSBnZXRNSCgpCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB3cml0ZUN1ck1lc3NhZ2UoJ3dpZGUnLCA1NSkKKworICAgICAgICBmID0gbWgub3BlbmZvbGRlcignd2lkZScpCisgICAgICAgIGFsbCA9IGYubGlzdG1lc3NhZ2VzKCkKKyAgICAgICAgZXEoYWxsLCByYW5nZSg1LCAxMDEpK3JhbmdlKDEwMSwgMjAxLCAyKSkKKyAgICAgICAgZXEoZi5nZXRjdXJyZW50KCksIDU1KQorICAgICAgICBmLnNldGN1cnJlbnQoOTkpCisgICAgICAgIGVxKHJlYWRGaWxlKG9zLnBhdGguam9pbihfbWhwYXRoLCAnd2lkZScsICcubWhfc2VxdWVuY2VzJykpLAorICAgICAgICAgICAnY3VyOiA5OVxuJykKKworICAgICAgICBkZWYgc2VxZXEoc2VxLCB2YWwpOgorICAgICAgICAgICAgZXEoZi5wYXJzZXNlcXVlbmNlKHNlcSksIHZhbCkKKworICAgICAgICBzZXFlcSgnNS01NScsIHJhbmdlKDUsIDU2KSkKKyAgICAgICAgc2VxZXEoJzkwLTEwOCcsIHJhbmdlKDkwLCAxMDEpK3JhbmdlKDEwMSwgMTA5LCAyKSkKKyAgICAgICAgc2VxZXEoJzkwLTEwOCcsIHJhbmdlKDkwLCAxMDEpK3JhbmdlKDEwMSwgMTA5LCAyKSkKKworICAgICAgICBzZXFlcSgnMTA6MTAnLCByYW5nZSgxMCwgMjApKQorICAgICAgICBzZXFlcSgnMTA6KzEwJywgcmFuZ2UoMTAsIDIwKSkKKyAgICAgICAgc2VxZXEoJzEwMToxMCcsIHJhbmdlKDEwMSwgMTIxLCAyKSkKKworICAgICAgICBzZXFlcSgnY3VyJywgWzk5XSkKKyAgICAgICAgc2VxZXEoJy4nLCBbOTldKQorICAgICAgICBzZXFlcSgncHJldicsIFs5OF0pCisgICAgICAgIHNlcWVxKCduZXh0JywgWzEwMF0pCisgICAgICAgIHNlcWVxKCdjdXI6LTMnLCBbOTcsIDk4LCA5OV0pCisgICAgICAgIHNlcWVxKCdmaXJzdC1jdXInLCByYW5nZSg1LCAxMDApKQorICAgICAgICBzZXFlcSgnMTUwLWxhc3QnLCByYW5nZSgxNTEsIDIwMSwgMikpCisgICAgICAgIHNlcWVxKCdwcmV2LW5leHQnLCBbOTgsIDk5LCAxMDBdKQorCisgICAgICAgIGxvd3ByaW1lcyA9IFs1LCA3LCAxMSwgMTMsIDE3LCAxOSwgMjMsIDI5XQorICAgICAgICBsb3djb21wb3MgPSBbeCBmb3IgeCBpbiByYW5nZSg1LCAzMSkgaWYgbm90IHggaW4gbG93cHJpbWVzIF0KKyAgICAgICAgZi5wdXRzZXF1ZW5jZXMoeydjdXInOiBbNV0sCisgICAgICAgICAgICAgICAgICAgICAgICAnbG93cHJpbWUnOiBsb3dwcmltZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAnbG93Y29tcG9zJzogbG93Y29tcG9zfSkKKyAgICAgICAgc2VxcyA9IHJlYWRGaWxlKG9zLnBhdGguam9pbihfbWhwYXRoLCAnd2lkZScsICcubWhfc2VxdWVuY2VzJykpCisgICAgICAgIHNlcXMgPSBzb3J0TGluZXMoc2VxcykKKyAgICAgICAgZXEoc2VxcywgWyJjdXI6IDUiLAorICAgICAgICAgICAgICAgICAgImxvd2NvbXBvczogNiA4LTEwIDEyIDE0LTE2IDE4IDIwLTIyIDI0LTI4IDMwIiwKKyAgICAgICAgICAgICAgICAgICJsb3dwcmltZTogNSA3IDExIDEzIDE3IDE5IDIzIDI5Il0pCisKKyAgICAgICAgc2VxZXEoJ2xvd3ByaW1lJywgbG93cHJpbWVzKQorICAgICAgICBzZXFlcSgnbG93cHJpbWU6MScsIFs1XSkKKyAgICAgICAgc2VxZXEoJ2xvd3ByaW1lOjInLCBbNSwgN10pCisgICAgICAgIHNlcWVxKCdsb3dwcmltZTotMicsIFsyMywgMjldKQorCisgICAgICAgICMjIE5vdCBzdXBwb3J0ZWQKKyAgICAgICAgI3NlcWVxKCdsb3dwcmltZTpmaXJzdCcsIFs1XSkKKyAgICAgICAgI3NlcWVxKCdsb3dwcmltZTpsYXN0JywgWzI5XSkKKyAgICAgICAgI3NlcWVxKCdsb3dwcmltZTpwcmV2JywgWzI5XSkKKyAgICAgICAgI3NlcWVxKCdsb3dwcmltZTpuZXh0JywgWzI5XSkKKworICAgIGRlZiB0ZXN0X21vZGlmeShzZWxmKToKKyAgICAgICAgbWggPSBnZXRNSCgpCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIG1oLm1ha2Vmb2xkZXIoImR1bW15MSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImR1bW15MSIsIG1oLmxpc3Rmb2xkZXJzKCkpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oX21ocGF0aCwgImR1bW15MSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhwYXRoKSkKKworICAgICAgICBmID0gbWgub3BlbmZvbGRlcignZHVtbXkxJykKKyAgICAgICAgZGVmIGNyZWF0ZShuKToKKyAgICAgICAgICAgIG1zZyA9ICJGcm9tOiBmb29cblN1YmplY3Q6ICVzXG5cbkR1bW15IE1lc3NhZ2UgJXNcbiIgJSAobixuKQorICAgICAgICAgICAgZi5jcmVhdGVtZXNzYWdlKG4sIFN0cmluZ0lPLlN0cmluZ0lPKG1zZykpCisKKyAgICAgICAgY3JlYXRlKDcpCisgICAgICAgIGNyZWF0ZSg4KQorICAgICAgICBjcmVhdGUoOSkKKworICAgICAgICBlcShyZWFkRmlsZShmLmdldG1lc3NhZ2VmaWxlbmFtZSg5KSksCisgICAgICAgICAgICJGcm9tOiBmb29cblN1YmplY3Q6IDlcblxuRHVtbXkgTWVzc2FnZSA5XG4iKQorCisgICAgICAgIGVxKGYubGlzdG1lc3NhZ2VzKCksIFs3LCA4LCA5XSkKKyAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKHBhdGgpCisgICAgICAgIGZpbGVzLnNvcnQoKQorICAgICAgICBlcShmaWxlcywgWyc3JywgJzgnLCAnOSddKQorCisgICAgICAgIGYucmVtb3ZlbWVzc2FnZXMoWyc3JywgJzgnXSkKKyAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKHBhdGgpCisgICAgICAgIGZpbGVzLnNvcnQoKQorICAgICAgICBlcShmaWxlcywgWycsNycsICcsOCcsICc5J10pCisgICAgICAgIGVxKGYubGlzdG1lc3NhZ2VzKCksIFs5XSkKKyAgICAgICAgY3JlYXRlKDEwKQorICAgICAgICBjcmVhdGUoMTEpCisgICAgICAgIGNyZWF0ZSgxMikKKworICAgICAgICBtaC5tYWtlZm9sZGVyKCJkdW1teTIiKQorICAgICAgICBmMiA9IG1oLm9wZW5mb2xkZXIoImR1bW15MiIpCisgICAgICAgIGVxKGYyLmxpc3RtZXNzYWdlcygpLCBbXSkKKyAgICAgICAgZi5tb3ZlbWVzc2FnZSgxMCwgZjIsIDMpCisgICAgICAgIGYubW92ZW1lc3NhZ2UoMTEsIGYyLCA1KQorICAgICAgICBlcShmLmxpc3RtZXNzYWdlcygpLCBbOSwgMTJdKQorICAgICAgICBlcShmMi5saXN0bWVzc2FnZXMoKSwgWzMsIDVdKQorICAgICAgICBlcShyZWFkRmlsZShmMi5nZXRtZXNzYWdlZmlsZW5hbWUoMykpLAorICAgICAgICAgICAiRnJvbTogZm9vXG5TdWJqZWN0OiAxMFxuXG5EdW1teSBNZXNzYWdlIDEwXG4iKQorCisgICAgICAgIGYuY29weW1lc3NhZ2UoOSwgZjIsIDQpCisgICAgICAgIGVxKGYubGlzdG1lc3NhZ2VzKCksIFs5LCAxMl0pCisgICAgICAgIGVxKHJlYWRGaWxlKGYyLmdldG1lc3NhZ2VmaWxlbmFtZSg0KSksCisgICAgICAgICAgICJGcm9tOiBmb29cblN1YmplY3Q6IDlcblxuRHVtbXkgTWVzc2FnZSA5XG4iKQorCisgICAgICAgIGYucmVmaWxlbWVzc2FnZXMoWzksIDEyXSwgZjIpCisgICAgICAgIGVxKGYubGlzdG1lc3NhZ2VzKCksIFtdKQorICAgICAgICBlcShmMi5saXN0bWVzc2FnZXMoKSwgWzMsIDQsIDUsIDYsIDddKQorICAgICAgICBlcShyZWFkRmlsZShmMi5nZXRtZXNzYWdlZmlsZW5hbWUoNykpLAorICAgICAgICAgICAiRnJvbTogZm9vXG5TdWJqZWN0OiAxMlxuXG5EdW1teSBNZXNzYWdlIDEyXG4iKQorICAgICAgICAjIFhYWCBUaGlzIHNob3VsZCBjaGVjayB0aGF0IF9jb3B5c2VxdWVuY2VzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorCisgICAgICAgIG1oLmRlbGV0ZWZvbGRlcignZHVtbXkxJykKKyAgICAgICAgbWguZGVsZXRlZm9sZGVyKCdkdW1teTInKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdkdW1teTEnLCBtaC5saXN0Zm9sZGVycygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHBhdGgpKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgbWggPSBnZXRNSCgpCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIGYgPSBtaC5vcGVuZm9sZGVyKCdpbmJveCcpCisgICAgICAgIG1zZyA9IGYub3Blbm1lc3NhZ2UoMSkKKyAgICAgICAgIyBDaGVjayBzb21lIGJhc2ljIHN0dWZmIGZyb20gcmZjODIyCisgICAgICAgIGVxKG1zZy5nZXRoZWFkZXIoJ0Zyb20nKSwgIk1ycy4gUHJlbWlzZSIpCisgICAgICAgIGVxKG1zZy5nZXRoZWFkZXIoJ1RvJyksICJNcnMuIENvbmNsdXNpb24iKQorCisgICAgICAgICMgT2theSwgd2UgaGF2ZSB0aGUgcmlnaHQgbWVzc2FnZS4gIExldCdzIGNoZWNrIHRoZSBzdHVmZiBmcm9tCisgICAgICAgICMgbWhsaWIuCisgICAgICAgIGxpbmVzID0gc29ydExpbmVzKG1zZy5nZXRoZWFkZXJ0ZXh0KCkpCisgICAgICAgIGVxKGxpbmVzLCBbIkRhdGU6IDE4IEp1bHkgMjAwMSIsCisgICAgICAgICAgICAgICAgICAgIkZyb206IE1ycy4gUHJlbWlzZSIsCisgICAgICAgICAgICAgICAgICAgIlRvOiBNcnMuIENvbmNsdXNpb24iXSkKKyAgICAgICAgbGluZXMgPSBzb3J0TGluZXMobXNnLmdldGhlYWRlcnRleHQobGFtYmRhIGg6IGxlbihoKT09NCkpCisgICAgICAgIGVxKGxpbmVzLCBbIkRhdGU6IDE4IEp1bHkgMjAwMSIsCisgICAgICAgICAgICAgICAgICAgIkZyb206IE1ycy4gUHJlbWlzZSJdKQorICAgICAgICBlcShtc2cuZ2V0Ym9keXRleHQoKSwgIkh1bGxvLCBNcnMuIENvbmNsdXNpb24hXG5cbiIpCisgICAgICAgIGVxKG1zZy5nZXRib2R5dGV4dCgwKSwgIkh1bGxvLCBNcnMuIENvbmNsdXNpb24hXG5cbiIpCisKKyAgICAgICAgIyBYWFhYIHRoZXJlIHNob3VsZCBiZSBhIGJldHRlciB3YXkgdG8gcmVjbGFpbSB0aGUgZmlsZSBoYW5kbGUKKyAgICAgICAgbXNnLmZwLmNsb3NlKCkKKyAgICAgICAgZGVsIG1zZworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoTWhsaWJUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9taW1ldG9vbHMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9taW1ldG9vbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhMjZkYwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21pbWV0b29scy5weQpAQCAtMCwwICsxLDUzIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBTdHJpbmdJTworCittaW1ldG9vbHMgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgibWltZXRvb2xzIiwgZGVwcmVjYXRlZD1UcnVlKQorCittc2d0ZXh0MSA9IG1pbWV0b29scy5NZXNzYWdlKFN0cmluZ0lPLlN0cmluZ0lPKAorIiIiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTE7IGZvcm1hdD1mbG93ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRm9vIQorIiIiKSkKKworY2xhc3MgTWltZVRvb2xzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWNvZGVlbmNvZGUoc2VsZik6CisgICAgICAgIHN0YXJ0ID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyAiPSIgKyBzdHJpbmcuZGlnaXRzICsgIlxuIgorICAgICAgICBmb3IgZW5jIGluIFsnN2JpdCcsJzhiaXQnLCdiYXNlNjQnLCdxdW90ZWQtcHJpbnRhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgJ3V1ZW5jb2RlJywgJ3gtdXVlbmNvZGUnLCAndXVlJywgJ3gtdXVlJ106CisgICAgICAgICAgICBpID0gU3RyaW5nSU8uU3RyaW5nSU8oc3RhcnQpCisgICAgICAgICAgICBvID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgbWltZXRvb2xzLmVuY29kZShpLCBvLCBlbmMpCisgICAgICAgICAgICBpID0gU3RyaW5nSU8uU3RyaW5nSU8oby5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgbyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIG1pbWV0b29scy5kZWNvZGUoaSwgbywgZW5jKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLmdldHZhbHVlKCksIHN0YXJ0KQorCisgICAgZGVmIHRlc3RfYm91bmRhcnkoc2VsZik6CisgICAgICAgIHMgPSBzZXQoWyIiXSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICBuYiA9IG1pbWV0b29scy5jaG9vc2VfYm91bmRhcnkoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYiwgcykKKyAgICAgICAgICAgIHMuYWRkKG5iKQorCisgICAgZGVmIHRlc3RfbWVzc2FnZShzZWxmKToKKyAgICAgICAgbXNnID0gbWltZXRvb2xzLk1lc3NhZ2UoU3RyaW5nSU8uU3RyaW5nSU8obXNndGV4dDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXR0eXBlKCksICJ0ZXh0L3BsYWluIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0bWFpbnR5cGUoKSwgInRleHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRzdWJ0eXBlKCksICJwbGFpbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldHBsaXN0KCksIFsiY2hhcnNldD1pc28tODg1OS0xIiwgImZvcm1hdD1mbG93ZWQiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0cGFyYW1uYW1lcygpLCBbImNoYXJzZXQiLCAiZm9ybWF0Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldHBhcmFtKCJjaGFyc2V0IiksICJpc28tODg1OS0xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0cGFyYW0oImZvcm1hdCIpLCAiZmxvd2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0cGFyYW0oInNwYW0iKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0ZW5jb2RpbmcoKSwgIjhiaXQiKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChNaW1lVG9vbHNUZXN0KQorCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OGQ3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9taW1ldHlwZXMucHkKQEAgLTAsMCArMSw5NiBAQAoraW1wb3J0IG1pbWV0eXBlcworaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBUZWxsIGl0IHdlIGRvbid0IGtub3cgYWJvdXQgZXh0ZXJuYWwgZmlsZXM6CittaW1ldHlwZXMua25vd25maWxlcyA9IFtdCittaW1ldHlwZXMuaW5pdGVkID0gRmFsc2UKK21pbWV0eXBlcy5fZGVmYXVsdF9taW1lX3R5cGVzKCkKKworCitjbGFzcyBNaW1lVHlwZXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmRiID0gbWltZXR5cGVzLk1pbWVUeXBlcygpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2RhdGEoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoImZvby5odG1sIiksICgidGV4dC9odG1sIiwgTm9uZSkpCisgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfdHlwZSgiZm9vLnRneiIpLCAoImFwcGxpY2F0aW9uL3gtdGFyIiwgImd6aXAiKSkKKyAgICAgICAgZXEoc2VsZi5kYi5ndWVzc190eXBlKCJmb28udGFyLmd6IiksICgiYXBwbGljYXRpb24veC10YXIiLCAiZ3ppcCIpKQorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoImZvby50YXIuWiIpLCAoImFwcGxpY2F0aW9uL3gtdGFyIiwgImNvbXByZXNzIikpCisgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfdHlwZSgiZm9vLnRhci5iejIiKSwgKCJhcHBsaWNhdGlvbi94LXRhciIsICJiemlwMiIpKQorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoImZvby50YXIueHoiKSwgKCJhcHBsaWNhdGlvbi94LXRhciIsICJ4eiIpKQorCisgICAgZGVmIHRlc3RfZGF0YV91cmxzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZ3Vlc3NfdHlwZSA9IHNlbGYuZGIuZ3Vlc3NfdHlwZQorICAgICAgICBlcShndWVzc190eXBlKCJkYXRhOix0aGlzSXNUZXh0UGxhaW4iKSwgKCJ0ZXh0L3BsYWluIiwgTm9uZSkpCisgICAgICAgIGVxKGd1ZXNzX3R5cGUoImRhdGE6O2Jhc2U2NCx0aGlzSXNUZXh0UGxhaW4iKSwgKCJ0ZXh0L3BsYWluIiwgTm9uZSkpCisgICAgICAgIGVxKGd1ZXNzX3R5cGUoImRhdGE6dGV4dC94LWZvbyx0aGlzSXNUZXh0WEZvbyIpLCAoInRleHQveC1mb28iLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X2ZpbGVfcGFyc2luZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHNpbyA9IFN0cmluZ0lPLlN0cmluZ0lPKCJ4LWFwcGxpY2F0aW9uL3gtdW5pdHRlc3QgcHl1bml0XG4iKQorICAgICAgICBzZWxmLmRiLnJlYWRmcChzaW8pCisgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfdHlwZSgiZm9vLnB5dW5pdCIpLAorICAgICAgICAgICAoIngtYXBwbGljYXRpb24veC11bml0dGVzdCIsIE5vbmUpKQorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX2V4dGVuc2lvbigieC1hcHBsaWNhdGlvbi94LXVuaXR0ZXN0IiksICIucHl1bml0IikKKworICAgIGRlZiB0ZXN0X25vbl9zdGFuZGFyZF90eXBlcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgRmlyc3QgdHJ5IHN0cmljdAorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoJ2Zvby54dWwnLCBzdHJpY3Q9VHJ1ZSksIChOb25lLCBOb25lKSkKKyAgICAgICAgZXEoc2VsZi5kYi5ndWVzc19leHRlbnNpb24oJ2ltYWdlL2pwZycsIHN0cmljdD1UcnVlKSwgTm9uZSkKKyAgICAgICAgIyBBbmQgdGhlbiBub24tc3RyaWN0CisgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfdHlwZSgnZm9vLnh1bCcsIHN0cmljdD1GYWxzZSksICgndGV4dC94dWwnLCBOb25lKSkKKyAgICAgICAgZXEoc2VsZi5kYi5ndWVzc19leHRlbnNpb24oJ2ltYWdlL2pwZycsIHN0cmljdD1GYWxzZSksICcuanBnJykKKworICAgIGRlZiB0ZXN0X2d1ZXNzX2FsbF90eXBlcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICAjIEZpcnN0IHRyeSBzdHJpY3QuICBVc2UgYSBzZXQgaGVyZSBmb3IgdGVzdGluZyB0aGUgcmVzdWx0cyBiZWNhdXNlIGlmCisgICAgICAgICMgdGVzdF91cmxsaWIyIGlzIHJ1biBiZWZvcmUgdGVzdF9taW1ldHlwZXMsIGdsb2JhbCBzdGF0ZSBpcyBtb2RpZmllZAorICAgICAgICAjIHN1Y2ggdGhhdCB0aGUgJ2FsbCcgc2V0IHdpbGwgaGF2ZSBtb3JlIGl0ZW1zIGluIGl0LgorICAgICAgICBhbGwgPSBzZXQoc2VsZi5kYi5ndWVzc19hbGxfZXh0ZW5zaW9ucygndGV4dC9wbGFpbicsIHN0cmljdD1UcnVlKSkKKyAgICAgICAgdW5sZXNzKGFsbCA+PSBzZXQoWycuYmF0JywgJy5jJywgJy5oJywgJy5rc2gnLCAnLnBsJywgJy50eHQnXSkpCisgICAgICAgICMgQW5kIG5vdyBub24tc3RyaWN0CisgICAgICAgIGFsbCA9IHNlbGYuZGIuZ3Vlc3NfYWxsX2V4dGVuc2lvbnMoJ2ltYWdlL2pwZycsIHN0cmljdD1GYWxzZSkKKyAgICAgICAgYWxsLnNvcnQoKQorICAgICAgICBlcShhbGwsIFsnLmpwZyddKQorICAgICAgICAjIEFuZCBub3cgZm9yIG5vIGhpdHMKKyAgICAgICAgYWxsID0gc2VsZi5kYi5ndWVzc19hbGxfZXh0ZW5zaW9ucygnaW1hZ2UvanBnJywgc3RyaWN0PVRydWUpCisgICAgICAgIGVxKGFsbCwgW10pCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpLCAiV2luZG93cyBvbmx5IikKK2NsYXNzIFdpbjMyTWltZVR5cGVzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBlbnN1cmUgYWxsIGVudHJpZXMgYWN0dWFsbHkgY29tZSBmcm9tIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5CisgICAgICAgIHNlbGYub3JpZ2luYWxfdHlwZXNfbWFwID0gbWltZXR5cGVzLnR5cGVzX21hcC5jb3B5KCkKKyAgICAgICAgbWltZXR5cGVzLnR5cGVzX21hcC5jbGVhcigpCisgICAgICAgIG1pbWV0eXBlcy5pbml0KCkKKyAgICAgICAgc2VsZi5kYiA9IG1pbWV0eXBlcy5NaW1lVHlwZXMoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIHJlc3RvcmUgZGVmYXVsdCBzZXR0aW5ncworICAgICAgICBtaW1ldHlwZXMudHlwZXNfbWFwLmNsZWFyKCkKKyAgICAgICAgbWltZXR5cGVzLnR5cGVzX21hcC51cGRhdGUoc2VsZi5vcmlnaW5hbF90eXBlc19tYXApCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyeV9wYXJzaW5nKHNlbGYpOgorICAgICAgICAjIHRoZSBvcmlnaW5hbCwgbWluaW11bSBjb250ZW50cyBvZiB0aGUgTUlNRSBkYXRhYmFzZSBpbiB0aGUKKyAgICAgICAgIyBXaW5kb3dzIHJlZ2lzdHJ5IGlzIHVuZG9jdW1lbnRlZCBBRkFJSy4KKyAgICAgICAgIyBVc2UgZmlsZSB0eXBlcyB0aGF0IHNob3VsZCAqYWx3YXlzKiBleGlzdDoKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfdHlwZSgiZm9vLnR4dCIpLCAoInRleHQvcGxhaW4iLCBOb25lKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWltZVR5cGVzVGVzdENhc2UsCisgICAgICAgIFdpbjMyTWltZVR5cGVzVGVzdENhc2UKKyAgICAgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMGYwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CkBAIC0wLDAgKzEsMTUxMSBAQAorIyB0ZXN0IGZvciB4bWwuZG9tLm1pbmlkb20KKworaW1wb3J0IHBpY2tsZQorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdCwgZmluZGZpbGUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgeG1sLmRvbQoraW1wb3J0IHhtbC5kb20ubWluaWRvbQoraW1wb3J0IHhtbC5wYXJzZXJzLmV4cGF0CisKK2Zyb20geG1sLmRvbS5taW5pZG9tIGltcG9ydCBwYXJzZSwgTm9kZSwgRG9jdW1lbnQsIHBhcnNlU3RyaW5nCitmcm9tIHhtbC5kb20ubWluaWRvbSBpbXBvcnQgZ2V0RE9NSW1wbGVtZW50YXRpb24KKworCit0c3RmaWxlID0gZmluZGZpbGUoInRlc3QueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCisKKworIyBUaGUgdGVzdHMgb2YgRG9jdW1lbnRUeXBlIGltcG9ydGluZyB1c2UgdGhlc2UgaGVscGVycyB0byBjb25zdHJ1Y3QKKyMgdGhlIGRvY3VtZW50cyB0byB3b3JrIHdpdGgsIHNpbmNlIG5vdCBhbGwgRE9NIGJ1aWxkZXJzIGFjdHVhbGx5CisjIGNyZWF0ZSB0aGUgRG9jdW1lbnRUeXBlIG5vZGVzLgorZGVmIGNyZWF0ZV9kb2Nfd2l0aG91dF9kb2N0eXBlKGRvY3R5cGU9Tm9uZSk6CisgICAgcmV0dXJuIGdldERPTUltcGxlbWVudGF0aW9uKCkuY3JlYXRlRG9jdW1lbnQoTm9uZSwgImRvYyIsIGRvY3R5cGUpCisKK2RlZiBjcmVhdGVfbm9uZW1wdHlfZG9jdHlwZSgpOgorICAgIGRvY3R5cGUgPSBnZXRET01JbXBsZW1lbnRhdGlvbigpLmNyZWF0ZURvY3VtZW50VHlwZSgiZG9jIiwgTm9uZSwgTm9uZSkKKyAgICBkb2N0eXBlLmVudGl0aWVzLl9zZXEgPSBbXQorICAgIGRvY3R5cGUubm90YXRpb25zLl9zZXEgPSBbXQorICAgIG5vdGF0aW9uID0geG1sLmRvbS5taW5pZG9tLk5vdGF0aW9uKCJteS1ub3RhdGlvbiIsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly94bWwucHl0aG9uLm9yZy9ub3RhdGlvbnMvbXkiKQorICAgIGRvY3R5cGUubm90YXRpb25zLl9zZXEuYXBwZW5kKG5vdGF0aW9uKQorICAgIGVudGl0eSA9IHhtbC5kb20ubWluaWRvbS5FbnRpdHkoIm15LWVudGl0eSIsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3htbC5weXRob24ub3JnL2VudGl0aWVzL215IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJteS1ub3RhdGlvbiIpCisgICAgZW50aXR5LnZlcnNpb24gPSAiMS4wIgorICAgIGVudGl0eS5lbmNvZGluZyA9ICJ1dGYtOCIKKyAgICBlbnRpdHkuYWN0dWFsRW5jb2RpbmcgPSAidXMtYXNjaWkiCisgICAgZG9jdHlwZS5lbnRpdGllcy5fc2VxLmFwcGVuZChlbnRpdHkpCisgICAgcmV0dXJuIGRvY3R5cGUKKworZGVmIGNyZWF0ZV9kb2Nfd2l0aF9kb2N0eXBlKCk6CisgICAgZG9jdHlwZSA9IGNyZWF0ZV9ub25lbXB0eV9kb2N0eXBlKCkKKyAgICBkb2MgPSBjcmVhdGVfZG9jX3dpdGhvdXRfZG9jdHlwZShkb2N0eXBlKQorICAgIGRvY3R5cGUuZW50aXRpZXMuaXRlbSgwKS5vd25lckRvY3VtZW50ID0gZG9jCisgICAgZG9jdHlwZS5ub3RhdGlvbnMuaXRlbSgwKS5vd25lckRvY3VtZW50ID0gZG9jCisgICAgcmV0dXJuIGRvYworCitjbGFzcyBNaW5pZG9tVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNvbmZpcm0oc2VsZiwgdGVzdCwgdGVzdG5hbWUgPSAiVGVzdCIpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdCwgdGVzdG5hbWUpCisKKyAgICBkZWYgY2hlY2tXaG9sZVRleHQoc2VsZiwgbm9kZSwgcyk6CisgICAgICAgIHQgPSBub2RlLndob2xlVGV4dAorICAgICAgICBzZWxmLmNvbmZpcm0odCA9PSBzLCAibG9va2luZyBmb3IgJXMsIGZvdW5kICVzIiAlIChyZXByKHMpLCByZXByKHQpKSkKKworICAgIGRlZiB0ZXN0UGFyc2VGcm9tRmlsZShzZWxmKToKKyAgICAgICAgZG9tID0gcGFyc2UoU3RyaW5nSU8ob3Blbih0c3RmaWxlKS5yZWFkKCkpKQorICAgICAgICBkb20udW5saW5rKCkKKyAgICAgICAgc2VsZi5jb25maXJtKGlzaW5zdGFuY2UoZG9tLERvY3VtZW50KSkKKworICAgIGRlZiB0ZXN0R2V0RWxlbWVudHNCeVRhZ05hbWUoc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlKHRzdGZpbGUpCisgICAgICAgIHNlbGYuY29uZmlybShkb20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkxJIikgPT0gXAorICAgICAgICAgICAgICAgIGRvbS5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkxJIikpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RJbnNlcnRCZWZvcmUoc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKCI8ZG9jPjxmb28vPjwvZG9jPiIpCisgICAgICAgIHJvb3QgPSBkb20uZG9jdW1lbnRFbGVtZW50CisgICAgICAgIGVsZW0gPSByb290LmNoaWxkTm9kZXNbMF0KKyAgICAgICAgbmVsZW0gPSBkb20uY3JlYXRlRWxlbWVudCgiZWxlbWVudCIpCisgICAgICAgIHJvb3QuaW5zZXJ0QmVmb3JlKG5lbGVtLCBlbGVtKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzBdIGlzIG5lbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5pdGVtKDApIGlzIG5lbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXSBpcyBlbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5pdGVtKDEpIGlzIGVsZW0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkIGlzIG5lbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QubGFzdENoaWxkIGlzIGVsZW0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC50b3htbCgpID09ICI8ZG9jPjxlbGVtZW50Lz48Zm9vLz48L2RvYz4iCisgICAgICAgICAgICAgICAgLCAidGVzdEluc2VydEJlZm9yZSAtLSBub2RlIHByb3Blcmx5IHBsYWNlZCBpbiB0cmVlIikKKyAgICAgICAgbmVsZW0gPSBkb20uY3JlYXRlRWxlbWVudCgiZWxlbWVudCIpCisgICAgICAgIHJvb3QuaW5zZXJ0QmVmb3JlKG5lbGVtLCBOb25lKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMworICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDMKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdIGlzIGVsZW0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLml0ZW0oMSkgaXMgZWxlbQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMl0gaXMgbmVsZW0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLml0ZW0oMikgaXMgbmVsZW0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5sYXN0Q2hpbGQgaXMgbmVsZW0KKyAgICAgICAgICAgICAgICBhbmQgbmVsZW0ucHJldmlvdXNTaWJsaW5nIGlzIGVsZW0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC50b3htbCgpID09ICI8ZG9jPjxlbGVtZW50Lz48Zm9vLz48ZWxlbWVudC8+PC9kb2M+IgorICAgICAgICAgICAgICAgICwgInRlc3RJbnNlcnRCZWZvcmUgLS0gbm9kZSBwcm9wZXJseSBwbGFjZWQgaW4gdHJlZSIpCisgICAgICAgIG5lbGVtMiA9IGRvbS5jcmVhdGVFbGVtZW50KCJiYXIiKQorICAgICAgICByb290Lmluc2VydEJlZm9yZShuZWxlbTIsIG5lbGVtKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gNAorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzJdIGlzIG5lbGVtMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMuaXRlbSgyKSBpcyBuZWxlbTIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzNdIGlzIG5lbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5pdGVtKDMpIGlzIG5lbGVtCisgICAgICAgICAgICAgICAgYW5kIG5lbGVtMi5uZXh0U2libGluZyBpcyBuZWxlbQorICAgICAgICAgICAgICAgIGFuZCBuZWxlbS5wcmV2aW91c1NpYmxpbmcgaXMgbmVsZW0yCisgICAgICAgICAgICAgICAgYW5kIHJvb3QudG94bWwoKSA9PQorICAgICAgICAgICAgICAgICI8ZG9jPjxlbGVtZW50Lz48Zm9vLz48YmFyLz48ZWxlbWVudC8+PC9kb2M+IgorICAgICAgICAgICAgICAgICwgInRlc3RJbnNlcnRCZWZvcmUgLS0gbm9kZSBwcm9wZXJseSBwbGFjZWQgaW4gdHJlZSIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIF9jcmVhdGVfZnJhZ21lbnRfdGVzdF9ub2RlcyhzZWxmKToKKyAgICAgICAgZG9tID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIG9yaWcgPSBkb20uY3JlYXRlVGV4dE5vZGUoIm9yaWdpbmFsIikKKyAgICAgICAgYzEgPSBkb20uY3JlYXRlVGV4dE5vZGUoImZvbyIpCisgICAgICAgIGMyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJiYXIiKQorICAgICAgICBjMyA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiYmF0IikKKyAgICAgICAgZG9tLmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChvcmlnKQorICAgICAgICBmcmFnID0gZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQorICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGMxKQorICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGMyKQorICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGMzKQorICAgICAgICByZXR1cm4gZG9tLCBvcmlnLCBjMSwgYzIsIGMzLCBmcmFnCisKKyAgICBkZWYgdGVzdEluc2VydEJlZm9yZUZyYWdtZW50KHNlbGYpOgorICAgICAgICBkb20sIG9yaWcsIGMxLCBjMiwgYzMsIGZyYWcgPSBzZWxmLl9jcmVhdGVfZnJhZ21lbnRfdGVzdF9ub2RlcygpCisgICAgICAgIGRvbS5kb2N1bWVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGZyYWcsIE5vbmUpCisgICAgICAgIHNlbGYuY29uZmlybSh0dXBsZShkb20uZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpID09CisgICAgICAgICAgICAgICAgICAgICAob3JpZywgYzEsIGMyLCBjMyksCisgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0QmVmb3JlKDxmcmFnbWVudD4sIE5vbmUpIikKKyAgICAgICAgZnJhZy51bmxpbmsoKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgICAgICBkb20sIG9yaWcsIGMxLCBjMiwgYzMsIGZyYWcgPSBzZWxmLl9jcmVhdGVfZnJhZ21lbnRfdGVzdF9ub2RlcygpCisgICAgICAgIGRvbS5kb2N1bWVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGZyYWcsIG9yaWcpCisgICAgICAgIHNlbGYuY29uZmlybSh0dXBsZShkb20uZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpID09CisgICAgICAgICAgICAgICAgICAgICAoYzEsIGMyLCBjMywgb3JpZyksCisgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0QmVmb3JlKDxmcmFnbWVudD4sIG9yaWcpIikKKyAgICAgICAgZnJhZy51bmxpbmsoKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0QXBwZW5kQ2hpbGQoc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlKHRzdGZpbGUpCisgICAgICAgIGRvbS5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUNvbW1lbnQodSJIZWxsbyIpKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9tLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzWy0xXS5ub2RlTmFtZSA9PSAiI2NvbW1lbnQiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9tLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzWy0xXS5kYXRhID09ICJIZWxsbyIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RBcHBlbmRDaGlsZEZyYWdtZW50KHNlbGYpOgorICAgICAgICBkb20sIG9yaWcsIGMxLCBjMiwgYzMsIGZyYWcgPSBzZWxmLl9jcmVhdGVfZnJhZ21lbnRfdGVzdF9ub2RlcygpCisgICAgICAgIGRvbS5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZykKKyAgICAgICAgc2VsZi5jb25maXJtKHR1cGxlKGRvbS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcykgPT0KKyAgICAgICAgICAgICAgICAgICAgIChvcmlnLCBjMSwgYzIsIGMzKSwKKyAgICAgICAgICAgICAgICAgICAgICJhcHBlbmRDaGlsZCg8ZnJhZ21lbnQ+KSIpCisgICAgICAgIGZyYWcudW5saW5rKCkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdFJlcGxhY2VDaGlsZEZyYWdtZW50KHNlbGYpOgorICAgICAgICBkb20sIG9yaWcsIGMxLCBjMiwgYzMsIGZyYWcgPSBzZWxmLl9jcmVhdGVfZnJhZ21lbnRfdGVzdF9ub2RlcygpCisgICAgICAgIGRvbS5kb2N1bWVudEVsZW1lbnQucmVwbGFjZUNoaWxkKGZyYWcsIG9yaWcpCisgICAgICAgIG9yaWcudW5saW5rKCkKKyAgICAgICAgc2VsZi5jb25maXJtKHR1cGxlKGRvbS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcykgPT0gKGMxLCBjMiwgYzMpLAorICAgICAgICAgICAgICAgICJyZXBsYWNlQ2hpbGQoPGZyYWdtZW50PikiKQorICAgICAgICBmcmFnLnVubGluaygpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RMZWdhbENoaWxkcmVuKHNlbGYpOgorICAgICAgICBkb20gPSBEb2N1bWVudCgpCisgICAgICAgIGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudCgnZWxlbWVudCcpCisgICAgICAgIHRleHQgPSBkb20uY3JlYXRlVGV4dE5vZGUoJ3RleHQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLkhpZXJhcmNoeVJlcXVlc3RFcnIsIGRvbS5hcHBlbmRDaGlsZCwgdGV4dCkKKworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWxlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJyLCBkb20uaW5zZXJ0QmVmb3JlLCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLkhpZXJhcmNoeVJlcXVlc3RFcnIsIGRvbS5yZXBsYWNlQ2hpbGQsIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0pCisKKyAgICAgICAgbm9kZW1hcCA9IGVsZW0uYXR0cmlidXRlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLkhpZXJhcmNoeVJlcXVlc3RFcnIsIG5vZGVtYXAuc2V0TmFtZWRJdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLkhpZXJhcmNoeVJlcXVlc3RFcnIsIG5vZGVtYXAuc2V0TmFtZWRJdGVtTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQpCisKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0ZXh0KQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0TmFtZWROb2RlTWFwU2V0SXRlbShzZWxmKToKKyAgICAgICAgZG9tID0gRG9jdW1lbnQoKQorICAgICAgICBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoJ2VsZW1lbnQnKQorICAgICAgICBhdHRycyA9IGVsZW0uYXR0cmlidXRlcworICAgICAgICBhdHRyc1siZm9vIl0gPSAiYmFyIgorICAgICAgICBhID0gYXR0cnMuaXRlbSgwKQorICAgICAgICBzZWxmLmNvbmZpcm0oYS5vd25lckRvY3VtZW50IGlzIGRvbSwKKyAgICAgICAgICAgICAgICAiTmFtZWROb2RlTWFwLl9fc2V0aXRlbV9fKCkgc2V0cyBvd25lckRvY3VtZW50IikKKyAgICAgICAgc2VsZi5jb25maXJtKGEub3duZXJFbGVtZW50IGlzIGVsZW0sCisgICAgICAgICAgICAgICAgIk5hbWVkTm9kZU1hcC5fX3NldGl0ZW1fXygpIHNldHMgb3duZXJFbGVtZW50IikKKyAgICAgICAgc2VsZi5jb25maXJtKGEudmFsdWUgPT0gImJhciIsCisgICAgICAgICAgICAgICAgIk5hbWVkTm9kZU1hcC5fX3NldGl0ZW1fXygpIHNldHMgdmFsdWUiKQorICAgICAgICBzZWxmLmNvbmZpcm0oYS5ub2RlVmFsdWUgPT0gImJhciIsCisgICAgICAgICAgICAgICAgIk5hbWVkTm9kZU1hcC5fX3NldGl0ZW1fXygpIHNldHMgbm9kZVZhbHVlIikKKyAgICAgICAgZWxlbS51bmxpbmsoKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0Tm9uWmVybyhzZWxmKToKKyAgICAgICAgZG9tID0gcGFyc2UodHN0ZmlsZSkKKyAgICAgICAgc2VsZi5jb25maXJtKGRvbSkjIHNob3VsZCBub3QgYmUgemVybworICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUNvbW1lbnQoImZvbyIpKQorICAgICAgICBzZWxmLmNvbmZpcm0obm90IGRvbS5jaGlsZE5vZGVzWy0xXS5jaGlsZE5vZGVzKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0VW5saW5rKHNlbGYpOgorICAgICAgICBkb20gPSBwYXJzZSh0c3RmaWxlKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0RWxlbWVudChzZWxmKToKKyAgICAgICAgZG9tID0gRG9jdW1lbnQoKQorICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUVsZW1lbnQoImFiYyIpKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9tLmRvY3VtZW50RWxlbWVudCkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdEFBQShzZWxmKToKKyAgICAgICAgZG9tID0gcGFyc2VTdHJpbmcoIjxhYmMvPiIpCisgICAgICAgIGVsID0gZG9tLmRvY3VtZW50RWxlbWVudAorICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoInNwYW0iLCAiamFtMiIpCisgICAgICAgIHNlbGYuY29uZmlybShlbC50b3htbCgpID09ICc8YWJjIHNwYW09ImphbTIiLz4nLCAidGVzdEFBQSIpCisgICAgICAgIGEgPSBlbC5nZXRBdHRyaWJ1dGVOb2RlKCJzcGFtIikKKyAgICAgICAgc2VsZi5jb25maXJtKGEub3duZXJEb2N1bWVudCBpcyBkb20sCisgICAgICAgICAgICAgICAgInNldEF0dHJpYnV0ZSgpIHNldHMgb3duZXJEb2N1bWVudCIpCisgICAgICAgIHNlbGYuY29uZmlybShhLm93bmVyRWxlbWVudCBpcyBkb20uZG9jdW1lbnRFbGVtZW50LAorICAgICAgICAgICAgICAgICJzZXRBdHRyaWJ1dGUoKSBzZXRzIG93bmVyRWxlbWVudCIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RBQUIoc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKCI8YWJjLz4iKQorICAgICAgICBlbCA9IGRvbS5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgZWwuc2V0QXR0cmlidXRlKCJzcGFtIiwgImphbSIpCisgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgic3BhbSIsICJqYW0yIikKKyAgICAgICAgc2VsZi5jb25maXJtKGVsLnRveG1sKCkgPT0gJzxhYmMgc3BhbT0iamFtMiIvPicsICJ0ZXN0QUFCIikKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdEFkZEF0dHIoc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgY2hpbGQgPSBkb20uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUVsZW1lbnQoImFiYyIpKQorCisgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgiZGVmIiwgImdoaSIpCisgICAgICAgIHNlbGYuY29uZmlybShjaGlsZC5nZXRBdHRyaWJ1dGUoImRlZiIpID09ICJnaGkiKQorICAgICAgICBzZWxmLmNvbmZpcm0oY2hpbGQuYXR0cmlidXRlc1siZGVmIl0udmFsdWUgPT0gImdoaSIpCisKKyAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCJqa2wiLCAibW5vIikKKyAgICAgICAgc2VsZi5jb25maXJtKGNoaWxkLmdldEF0dHJpYnV0ZSgiamtsIikgPT0gIm1ubyIpCisgICAgICAgIHNlbGYuY29uZmlybShjaGlsZC5hdHRyaWJ1dGVzWyJqa2wiXS52YWx1ZSA9PSAibW5vIikKKworICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNoaWxkLmF0dHJpYnV0ZXMpID09IDIpCisKKyAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCJkZWYiLCAibmV3dmFsIikKKyAgICAgICAgc2VsZi5jb25maXJtKGNoaWxkLmdldEF0dHJpYnV0ZSgiZGVmIikgPT0gIm5ld3ZhbCIpCisgICAgICAgIHNlbGYuY29uZmlybShjaGlsZC5hdHRyaWJ1dGVzWyJkZWYiXS52YWx1ZSA9PSAibmV3dmFsIikKKworICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNoaWxkLmF0dHJpYnV0ZXMpID09IDIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3REZWxldGVBdHRyKHNlbGYpOgorICAgICAgICBkb20gPSBEb2N1bWVudCgpCisgICAgICAgIGNoaWxkID0gZG9tLmFwcGVuZENoaWxkKGRvbS5jcmVhdGVFbGVtZW50KCJhYmMiKSkKKworICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNoaWxkLmF0dHJpYnV0ZXMpID09IDApCisgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgiZGVmIiwgImdoaSIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oY2hpbGQuYXR0cmlidXRlcykgPT0gMSkKKyAgICAgICAgZGVsIGNoaWxkLmF0dHJpYnV0ZXNbImRlZiJdCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oY2hpbGQuYXR0cmlidXRlcykgPT0gMCkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdFJlbW92ZUF0dHIoc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgY2hpbGQgPSBkb20uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUVsZW1lbnQoImFiYyIpKQorCisgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgiZGVmIiwgImdoaSIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oY2hpbGQuYXR0cmlidXRlcykgPT0gMSkKKyAgICAgICAgY2hpbGQucmVtb3ZlQXR0cmlidXRlKCJkZWYiKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNoaWxkLmF0dHJpYnV0ZXMpID09IDApCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RSZW1vdmVBdHRyTlMoc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgY2hpbGQgPSBkb20uYXBwZW5kQ2hpbGQoCisgICAgICAgICAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy5weXRob24ub3JnIiwgInB5dGhvbjphYmMiKSkKKyAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnIiwgInhtbG5zOnB5dGhvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5weXRob24ub3JnIikKKyAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cucHl0aG9uLm9yZyIsICJweXRob246YWJjYXR0ciIsICJmb28iKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNoaWxkLmF0dHJpYnV0ZXMpID09IDIpCisgICAgICAgIGNoaWxkLnJlbW92ZUF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnB5dGhvbi5vcmciLCAiYWJjYXR0ciIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oY2hpbGQuYXR0cmlidXRlcykgPT0gMSkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdFJlbW92ZUF0dHJpYnV0ZU5vZGUoc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgY2hpbGQgPSBkb20uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUVsZW1lbnQoImZvbyIpKQorICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoInNwYW0iLCAiamFtIikKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihjaGlsZC5hdHRyaWJ1dGVzKSA9PSAxKQorICAgICAgICBub2RlID0gY2hpbGQuZ2V0QXR0cmlidXRlTm9kZSgic3BhbSIpCisgICAgICAgIGNoaWxkLnJlbW92ZUF0dHJpYnV0ZU5vZGUobm9kZSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihjaGlsZC5hdHRyaWJ1dGVzKSA9PSAwCisgICAgICAgICAgICAgICAgYW5kIGNoaWxkLmdldEF0dHJpYnV0ZU5vZGUoInNwYW0iKSBpcyBOb25lKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0Q2hhbmdlQXR0cihzZWxmKToKKyAgICAgICAgZG9tID0gcGFyc2VTdHJpbmcoIjxhYmMvPiIpCisgICAgICAgIGVsID0gZG9tLmRvY3VtZW50RWxlbWVudAorICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoInNwYW0iLCAiamFtIikKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihlbC5hdHRyaWJ1dGVzKSA9PSAxKQorICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoInNwYW0iLCAiYmFtIikKKyAgICAgICAgIyBTZXQgdGhpcyBhdHRyaWJ1dGUgdG8gYmUgYW4gSUQgYW5kIG1ha2Ugc3VyZSB0aGF0IGRvZXNuJ3QgY2hhbmdlCisgICAgICAgICMgd2hlbiBjaGFuZ2luZyB0aGUgdmFsdWU6CisgICAgICAgIGVsLnNldElkQXR0cmlidXRlKCJzcGFtIikKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihlbC5hdHRyaWJ1dGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIGVsLmF0dHJpYnV0ZXNbInNwYW0iXS52YWx1ZSA9PSAiYmFtIgorICAgICAgICAgICAgICAgIGFuZCBlbC5hdHRyaWJ1dGVzWyJzcGFtIl0ubm9kZVZhbHVlID09ICJiYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmdldEF0dHJpYnV0ZSgic3BhbSIpID09ICJiYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmdldEF0dHJpYnV0ZU5vZGUoInNwYW0iKS5pc0lkKQorICAgICAgICBlbC5hdHRyaWJ1dGVzWyJzcGFtIl0gPSAiaGFtIgorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGVsLmF0dHJpYnV0ZXMpID09IDEKKyAgICAgICAgICAgICAgICBhbmQgZWwuYXR0cmlidXRlc1sic3BhbSJdLnZhbHVlID09ICJoYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmF0dHJpYnV0ZXNbInNwYW0iXS5ub2RlVmFsdWUgPT0gImhhbSIKKyAgICAgICAgICAgICAgICBhbmQgZWwuZ2V0QXR0cmlidXRlKCJzcGFtIikgPT0gImhhbSIKKyAgICAgICAgICAgICAgICBhbmQgZWwuYXR0cmlidXRlc1sic3BhbSJdLmlzSWQpCisgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgic3BhbTIiLCAiYmFtIikKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihlbC5hdHRyaWJ1dGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIGVsLmF0dHJpYnV0ZXNbInNwYW0iXS52YWx1ZSA9PSAiaGFtIgorICAgICAgICAgICAgICAgIGFuZCBlbC5hdHRyaWJ1dGVzWyJzcGFtIl0ubm9kZVZhbHVlID09ICJoYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmdldEF0dHJpYnV0ZSgic3BhbSIpID09ICJoYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmF0dHJpYnV0ZXNbInNwYW0yIl0udmFsdWUgPT0gImJhbSIKKyAgICAgICAgICAgICAgICBhbmQgZWwuYXR0cmlidXRlc1sic3BhbTIiXS5ub2RlVmFsdWUgPT0gImJhbSIKKyAgICAgICAgICAgICAgICBhbmQgZWwuZ2V0QXR0cmlidXRlKCJzcGFtMiIpID09ICJiYW0iKQorICAgICAgICBlbC5hdHRyaWJ1dGVzWyJzcGFtMiJdID0gImJhbTIiCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oZWwuYXR0cmlidXRlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCBlbC5hdHRyaWJ1dGVzWyJzcGFtIl0udmFsdWUgPT0gImhhbSIKKyAgICAgICAgICAgICAgICBhbmQgZWwuYXR0cmlidXRlc1sic3BhbSJdLm5vZGVWYWx1ZSA9PSAiaGFtIgorICAgICAgICAgICAgICAgIGFuZCBlbC5nZXRBdHRyaWJ1dGUoInNwYW0iKSA9PSAiaGFtIgorICAgICAgICAgICAgICAgIGFuZCBlbC5hdHRyaWJ1dGVzWyJzcGFtMiJdLnZhbHVlID09ICJiYW0yIgorICAgICAgICAgICAgICAgIGFuZCBlbC5hdHRyaWJ1dGVzWyJzcGFtMiJdLm5vZGVWYWx1ZSA9PSAiYmFtMiIKKyAgICAgICAgICAgICAgICBhbmQgZWwuZ2V0QXR0cmlidXRlKCJzcGFtMiIpID09ICJiYW0yIikKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdEdldEF0dHJMaXN0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdEdldEF0dHJWYWx1ZXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0R2V0QXR0ckxlbmd0aChzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RHZXRBdHRyaWJ1dGUoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0R2V0QXR0cmlidXRlTlMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0R2V0QXR0cmlidXRlTm9kZShzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RHZXRFbGVtZW50c0J5VGFnTmFtZU5TKHNlbGYpOgorICAgICAgICBkPSIiIjxmb28geG1sbnM6bWluaWRvbT0naHR0cDovL3B5eG1sLnNmLm5ldC9taW5pZG9tJz4KKyAgICAgICAgPG1pbmlkb206bXllbGVtLz4KKyAgICAgICAgPC9mb28+IiIiCisgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKGQpCisgICAgICAgIGVsZW1zID0gZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly9weXhtbC5zZi5uZXQvbWluaWRvbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm15ZWxlbSIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oZWxlbXMpID09IDEKKyAgICAgICAgICAgICAgICBhbmQgZWxlbXNbMF0ubmFtZXNwYWNlVVJJID09ICJodHRwOi8vcHl4bWwuc2YubmV0L21pbmlkb20iCisgICAgICAgICAgICAgICAgYW5kIGVsZW1zWzBdLmxvY2FsTmFtZSA9PSAibXllbGVtIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtc1swXS5wcmVmaXggPT0gIm1pbmlkb20iCisgICAgICAgICAgICAgICAgYW5kIGVsZW1zWzBdLnRhZ05hbWUgPT0gIm1pbmlkb206bXllbGVtIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtc1swXS5ub2RlTmFtZSA9PSAibWluaWRvbTpteWVsZW0iKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiBnZXRfZW1wdHlfbm9kZWxpc3RfZnJvbV9lbGVtZW50c19ieV90YWdOYW1lX25zX2hlbHBlcihzZWxmLCBkb2MsIG5zdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbmFtZSk6CisgICAgICAgIG5vZGVsaXN0ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMobnN1cmksIGxuYW1lKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKG5vZGVsaXN0KSA9PSAwKQorCisgICAgZGVmIHRlc3RHZXRFbXB0eU5vZGVMaXN0RnJvbUVsZW1lbnRzQnlUYWdOYW1lTlMoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCc8ZG9jLz4nKQorICAgICAgICBzZWxmLmdldF9lbXB0eV9ub2RlbGlzdF9mcm9tX2VsZW1lbnRzX2J5X3RhZ05hbWVfbnNfaGVscGVyKAorICAgICAgICAgICAgZG9jLCAnaHR0cDovL3htbC5weXRob24ub3JnL25hbWVzcGFjZXMvYScsICdsb2NhbG5hbWUnKQorICAgICAgICBzZWxmLmdldF9lbXB0eV9ub2RlbGlzdF9mcm9tX2VsZW1lbnRzX2J5X3RhZ05hbWVfbnNfaGVscGVyKAorICAgICAgICAgICAgZG9jLCAnKicsICdzcGxhdCcpCisgICAgICAgIHNlbGYuZ2V0X2VtcHR5X25vZGVsaXN0X2Zyb21fZWxlbWVudHNfYnlfdGFnTmFtZV9uc19oZWxwZXIoCisgICAgICAgICAgICBkb2MsICdodHRwOi8veG1sLnB5dGhvbi5vcmcvbmFtZXNwYWNlcy9hJywgJyonKQorCisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCc8ZG9jIHhtbG5zPSJodHRwOi8veG1sLnB5dGhvbi5vcmcvc3BsYXQiPjxlLz48L2RvYz4nKQorICAgICAgICBzZWxmLmdldF9lbXB0eV9ub2RlbGlzdF9mcm9tX2VsZW1lbnRzX2J5X3RhZ05hbWVfbnNfaGVscGVyKAorICAgICAgICAgICAgZG9jLCAiaHR0cDovL3htbC5weXRob24ub3JnL3NwbGF0IiwgIm5vdC10aGVyZSIpCisgICAgICAgIHNlbGYuZ2V0X2VtcHR5X25vZGVsaXN0X2Zyb21fZWxlbWVudHNfYnlfdGFnTmFtZV9uc19oZWxwZXIoCisgICAgICAgICAgICBkb2MsICIqIiwgIm5vdC10aGVyZSIpCisgICAgICAgIHNlbGYuZ2V0X2VtcHR5X25vZGVsaXN0X2Zyb21fZWxlbWVudHNfYnlfdGFnTmFtZV9uc19oZWxwZXIoCisgICAgICAgICAgICBkb2MsICJodHRwOi8vc29tZXdoZXJlLmVsc2UubmV0L25vdC10aGVyZSIsICJlIikKKworICAgIGRlZiB0ZXN0RWxlbWVudFJlcHJBbmRTdHIoc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgZWwgPSBkb20uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUVsZW1lbnQoImFiYyIpKQorICAgICAgICBzdHJpbmcxID0gcmVwcihlbCkKKyAgICAgICAgc3RyaW5nMiA9IHN0cihlbCkKKyAgICAgICAgc2VsZi5jb25maXJtKHN0cmluZzEgPT0gc3RyaW5nMikKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdEVsZW1lbnRSZXByQW5kU3RyVW5pY29kZShzZWxmKToKKyAgICAgICAgZG9tID0gRG9jdW1lbnQoKQorICAgICAgICBlbCA9IGRvbS5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudCh1ImFiYyIpKQorICAgICAgICBzdHJpbmcxID0gcmVwcihlbCkKKyAgICAgICAgc3RyaW5nMiA9IHN0cihlbCkKKyAgICAgICAgc2VsZi5jb25maXJtKHN0cmluZzEgPT0gc3RyaW5nMikKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdEVsZW1lbnRSZXByQW5kU3RyVW5pY29kZU5TKHNlbGYpOgorICAgICAgICBkb20gPSBEb2N1bWVudCgpCisgICAgICAgIGVsID0gZG9tLmFwcGVuZENoaWxkKAorICAgICAgICAgICAgZG9tLmNyZWF0ZUVsZW1lbnROUyh1Imh0dHA6Ly93d3cuc2xhc2hkb3Qub3JnIiwgdSJzbGFzaDphYmMiKSkKKyAgICAgICAgc3RyaW5nMSA9IHJlcHIoZWwpCisgICAgICAgIHN0cmluZzIgPSBzdHIoZWwpCisgICAgICAgIHNlbGYuY29uZmlybShzdHJpbmcxID09IHN0cmluZzIpCisgICAgICAgIHNlbGYuY29uZmlybSgic2xhc2g6YWJjIiBpbiBzdHJpbmcxKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0QXR0cmlidXRlUmVwcihzZWxmKToKKyAgICAgICAgZG9tID0gRG9jdW1lbnQoKQorICAgICAgICBlbCA9IGRvbS5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudCh1ImFiYyIpKQorICAgICAgICBub2RlID0gZWwuc2V0QXR0cmlidXRlKCJhYmMiLCAiZGVmIikKKyAgICAgICAgc2VsZi5jb25maXJtKHN0cihub2RlKSA9PSByZXByKG5vZGUpKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0VGV4dE5vZGVSZXByKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFdyaXRlWE1MKHNlbGYpOgorICAgICAgICBzdHIgPSAnPD94bWwgdmVyc2lvbj0iMS4wIiA/PjxhIGI9ImMiLz4nCisgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKHN0cikKKyAgICAgICAgZG9tc3RyID0gZG9tLnRveG1sKCkKKyAgICAgICAgZG9tLnVubGluaygpCisgICAgICAgIHNlbGYuY29uZmlybShzdHIgPT0gZG9tc3RyKQorCisgICAgZGVmIHRlc3RBbHROZXdsaW5lKHNlbGYpOgorICAgICAgICBzdHIgPSAnPD94bWwgdmVyc2lvbj0iMS4wIiA/PlxuPGEgYj0iYyIvPlxuJworICAgICAgICBkb20gPSBwYXJzZVN0cmluZyhzdHIpCisgICAgICAgIGRvbXN0ciA9IGRvbS50b3ByZXR0eXhtbChuZXdsPSJcclxuIikKKyAgICAgICAgZG9tLnVubGluaygpCisgICAgICAgIHNlbGYuY29uZmlybShkb21zdHIgPT0gc3RyLnJlcGxhY2UoIlxuIiwgIlxyXG4iKSkKKworICAgIGRlZiB0ZXN0X3RvcHJldHR5eG1sX3dpdGhfdGV4dF9ub2RlcyhzZWxmKToKKyAgICAgICAgIyBzZWUgaXNzdWUgIzQxNDcsIHRleHQgbm9kZXMgYXJlIG5vdCBpbmRlbnRlZAorICAgICAgICBkZWNsID0gJzw/eG1sIHZlcnNpb249IjEuMCIgPz5cbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZVN0cmluZygnPEI+QTwvQj4nKS50b3ByZXR0eXhtbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wgKyAnPEI+QTwvQj5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VTdHJpbmcoJzxDPkE8Qj5BPC9CPjwvQz4nKS50b3ByZXR0eXhtbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wgKyAnPEM+XG5cdEFcblx0PEI+QTwvQj5cbjwvQz5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VTdHJpbmcoJzxDPjxCPkE8L0I+QTwvQz4nKS50b3ByZXR0eXhtbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wgKyAnPEM+XG5cdDxCPkE8L0I+XG5cdEFcbjwvQz5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VTdHJpbmcoJzxDPjxCPkE8L0I+PEI+QTwvQj48L0M+JykudG9wcmV0dHl4bWwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsICsgJzxDPlxuXHQ8Qj5BPC9CPlxuXHQ8Qj5BPC9CPlxuPC9DPlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZVN0cmluZygnPEM+PEI+QTwvQj5BPEI+QTwvQj48L0M+JykudG9wcmV0dHl4bWwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsICsgJzxDPlxuXHQ8Qj5BPC9CPlxuXHRBXG5cdDxCPkE8L0I+XG48L0M+XG4nKQorCisgICAgZGVmIHRlc3RfdG9wcmV0dHl4bWxfd2l0aF9hZGphY2VudF90ZXh0X25vZGVzKHNlbGYpOgorICAgICAgICAjIHNlZSBpc3N1ZSAjNDE0NywgYWRqYWNlbnQgdGV4dCBub2RlcyBhcmUgaW5kZW50ZWQgbm9ybWFsbHkKKyAgICAgICAgZG9tID0gRG9jdW1lbnQoKQorICAgICAgICBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQodSdlbGVtJykKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb20uY3JlYXRlVGV4dE5vZGUodSdURVhUJykpCisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZVRleHROb2RlKHUnVEVYVCcpKQorICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWxlbSkKKyAgICAgICAgZGVjbCA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiID8+XG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9tLnRvcHJldHR5eG1sKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbCArICc8ZWxlbT5cblx0VEVYVFxuXHRURVhUXG48L2VsZW0+XG4nKQorCisgICAgZGVmIHRlc3RfdG9wcmV0dHl4bWxfcHJlc2VydmVzX2NvbnRlbnRfb2ZfdGV4dF9ub2RlKHNlbGYpOgorICAgICAgICAjIHNlZSBpc3N1ZSAjNDE0NworICAgICAgICBmb3Igc3RyIGluICgnPEI+QTwvQj4nLCAnPEE+PEI+QzwvQj48L0E+Jyk6CisgICAgICAgICAgICBkb20gPSBwYXJzZVN0cmluZyhzdHIpCisgICAgICAgICAgICBkb20yID0gcGFyc2VTdHJpbmcoZG9tLnRvcHJldHR5eG1sKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnQicpWzBdLmNoaWxkTm9kZXNbMF0udG94bWwoKSwKKyAgICAgICAgICAgICAgICBkb20yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdCJylbMF0uY2hpbGROb2Rlc1swXS50b3htbCgpKQorCisgICAgZGVmIHRlc3RQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKCc8ZT48P215cGkgXHRcbiBkYXRhIFx0XG4gPz48L2U+JykKKyAgICAgICAgcGkgPSBkb20uZG9jdW1lbnRFbGVtZW50LmZpcnN0Q2hpbGQKKyAgICAgICAgc2VsZi5jb25maXJtKHBpLnRhcmdldCA9PSAibXlwaSIKKyAgICAgICAgICAgICAgICBhbmQgcGkuZGF0YSA9PSAiZGF0YSBcdFxuICIKKyAgICAgICAgICAgICAgICBhbmQgcGkubm9kZU5hbWUgPT0gIm15cGkiCisgICAgICAgICAgICAgICAgYW5kIHBpLm5vZGVUeXBlID09IE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFCisgICAgICAgICAgICAgICAgYW5kIHBpLmF0dHJpYnV0ZXMgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBub3QgcGkuaGFzQ2hpbGROb2RlcygpCisgICAgICAgICAgICAgICAgYW5kIGxlbihwaS5jaGlsZE5vZGVzKSA9PSAwCisgICAgICAgICAgICAgICAgYW5kIHBpLmZpcnN0Q2hpbGQgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBwaS5sYXN0Q2hpbGQgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBwaS5sb2NhbE5hbWUgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBwaS5uYW1lc3BhY2VVUkkgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UpCisKKyAgICBkZWYgdGVzdFByb2Nlc3NpbmdJbnN0cnVjdGlvblJlcHIoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0VGV4dFJlcHIoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0V3JpdGVUZXh0KHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdERvY3VtZW50RWxlbWVudChzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RUb29NYW55RG9jdW1lbnRFbGVtZW50cyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIGVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgiZXh0cmEiKQorICAgICAgICAjIFNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gd2hlbiBhZGRpbmcgYW4gZXh0cmEgZG9jdW1lbnQgZWxlbWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJyLCBkb2MuYXBwZW5kQ2hpbGQsIGVsZW0pCisgICAgICAgIGVsZW0udW5saW5rKCkKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdENyZWF0ZUVsZW1lbnROUyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RDcmVhdGVBdHRyaWJ1dGVOUyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZShzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZVN0cmluZyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RDb21tZW50KHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0SXRlbShzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEl0ZW1zKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0SXRlbU5TKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0S2V5cyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEtleXNOUyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RSZW1vdmVOYW1lZEl0ZW0oc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jIGE9JycvPiIpCisgICAgICAgIGUgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIGF0dHJzID0gZS5hdHRyaWJ1dGVzCisgICAgICAgIGExID0gZS5nZXRBdHRyaWJ1dGVOb2RlKCJhIikKKyAgICAgICAgYTIgPSBhdHRycy5yZW1vdmVOYW1lZEl0ZW0oImEiKQorICAgICAgICBzZWxmLmNvbmZpcm0oYTEuaXNTYW1lTm9kZShhMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbC5kb20uTm90Rm91bmRFcnIsIGF0dHJzLnJlbW92ZU5hbWVkSXRlbSwgImEiKQorCisgICAgZGVmIHRlc3RSZW1vdmVOYW1lZEl0ZW1OUyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MgeG1sbnM6YT0naHR0cDovL3htbC5weXRob24ub3JnLycgYTpiPScnLz4iKQorICAgICAgICBlID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICBhdHRycyA9IGUuYXR0cmlidXRlcworICAgICAgICBhMSA9IGUuZ2V0QXR0cmlidXRlTm9kZU5TKCJodHRwOi8veG1sLnB5dGhvbi5vcmcvIiwgImIiKQorICAgICAgICBhMiA9IGF0dHJzLnJlbW92ZU5hbWVkSXRlbU5TKCJodHRwOi8veG1sLnB5dGhvbi5vcmcvIiwgImIiKQorICAgICAgICBzZWxmLmNvbmZpcm0oYTEuaXNTYW1lTm9kZShhMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbC5kb20uTm90Rm91bmRFcnIsIGF0dHJzLnJlbW92ZU5hbWVkSXRlbU5TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3htbC5weXRob24ub3JnLyIsICJiIikKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RWYWx1ZXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RMZW5ndGgoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RfX2dldGl0ZW1fXyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdF9fc2V0aXRlbV9fKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFNldEF0dHJWYWx1ZWFuZE5vZGVWYWx1ZShzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZUVsZW1lbnQoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VBdHRyaWJ1dGVzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlRWxlbWVudE5hbWVzcGFjZXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VBdHRyaWJ1dGVOYW1lc3BhY2VzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9ucyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RDaGlsZE5vZGVzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEZpcnN0Q2hpbGQoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0SGFzQ2hpbGROb2RlcyhzZWxmKTogcGFzcworCisgICAgZGVmIF90ZXN0Q2xvbmVFbGVtZW50Q29waWVzQXR0cmlidXRlcyhzZWxmLCBlMSwgZTIsIHRlc3QpOgorICAgICAgICBhdHRyczEgPSBlMS5hdHRyaWJ1dGVzCisgICAgICAgIGF0dHJzMiA9IGUyLmF0dHJpYnV0ZXMKKyAgICAgICAga2V5czEgPSBhdHRyczEua2V5cygpCisgICAgICAgIGtleXMyID0gYXR0cnMyLmtleXMoKQorICAgICAgICBrZXlzMS5zb3J0KCkKKyAgICAgICAga2V5czIuc29ydCgpCisgICAgICAgIHNlbGYuY29uZmlybShrZXlzMSA9PSBrZXlzMiwgImNsb25lIG9mIGVsZW1lbnQgaGFzIHNhbWUgYXR0cmlidXRlIGtleXMiKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oa2V5czEpKToKKyAgICAgICAgICAgIGExID0gYXR0cnMxLml0ZW0oaSkKKyAgICAgICAgICAgIGEyID0gYXR0cnMyLml0ZW0oaSkKKyAgICAgICAgICAgIHNlbGYuY29uZmlybShhMSBpcyBub3QgYTIKKyAgICAgICAgICAgICAgICAgICAgYW5kIGExLnZhbHVlID09IGEyLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGFuZCBhMS5ub2RlVmFsdWUgPT0gYTIubm9kZVZhbHVlCisgICAgICAgICAgICAgICAgICAgIGFuZCBhMS5uYW1lc3BhY2VVUkkgPT0gYTIubmFtZXNwYWNlVVJJCisgICAgICAgICAgICAgICAgICAgIGFuZCBhMS5sb2NhbE5hbWUgPT0gYTIubG9jYWxOYW1lCisgICAgICAgICAgICAgICAgICAgICwgImNsb25lIG9mIGF0dHJpYnV0ZSBub2RlIGhhcyBwcm9wZXIgYXR0cmlidXRlIHZhbHVlcyIpCisgICAgICAgICAgICBzZWxmLmNvbmZpcm0oYTIub3duZXJFbGVtZW50IGlzIGUyLAorICAgICAgICAgICAgICAgICAgICAiY2xvbmUgb2YgYXR0cmlidXRlIG5vZGUgY29ycmVjdGx5IG93bmVkIikKKworICAgIGRlZiBfc2V0dXBDbG9uZUVsZW1lbnQoc2VsZiwgZGVlcCk6CisgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKCI8ZG9jIGF0dHI9J3ZhbHVlJz48Zm9vLz48L2RvYz4iKQorICAgICAgICByb290ID0gZG9tLmRvY3VtZW50RWxlbWVudAorICAgICAgICBjbG9uZSA9IHJvb3QuY2xvbmVOb2RlKGRlZXApCisgICAgICAgIHNlbGYuX3Rlc3RDbG9uZUVsZW1lbnRDb3BpZXNBdHRyaWJ1dGVzKAorICAgICAgICAgICAgcm9vdCwgY2xvbmUsICJ0ZXN0Q2xvbmVFbGVtZW50IiArIChkZWVwIGFuZCAiRGVlcCIgb3IgIlNoYWxsb3ciKSkKKyAgICAgICAgIyBtdXRpbGF0ZSB0aGUgb3JpZ2luYWwgc28gc2hhcmVkIGRhdGEgaXMgZGV0ZWN0ZWQKKyAgICAgICAgcm9vdC50YWdOYW1lID0gcm9vdC5ub2RlTmFtZSA9ICJNT0RJRklFRCIKKyAgICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoImF0dHIiLCAiTkVXIFZBTFVFIikKKyAgICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoImFkZGVkIiwgIlZBTFVFIikKKyAgICAgICAgcmV0dXJuIGRvbSwgY2xvbmUKKworICAgIGRlZiB0ZXN0Q2xvbmVFbGVtZW50U2hhbGxvdyhzZWxmKToKKyAgICAgICAgZG9tLCBjbG9uZSA9IHNlbGYuX3NldHVwQ2xvbmVFbGVtZW50KDApCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oY2xvbmUuY2hpbGROb2RlcykgPT0gMAorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLnBhcmVudE5vZGUgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS50b3htbCgpID09ICc8ZG9jIGF0dHI9InZhbHVlIi8+JworICAgICAgICAgICAgICAgICwgInRlc3RDbG9uZUVsZW1lbnRTaGFsbG93IikKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdENsb25lRWxlbWVudERlZXAoc2VsZik6CisgICAgICAgIGRvbSwgY2xvbmUgPSBzZWxmLl9zZXR1cENsb25lRWxlbWVudCgxKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNsb25lLmNoaWxkTm9kZXMpID09IDEKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMQorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5wYXJlbnROb2RlIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUudG94bWwoKSA9PSAnPGRvYyBhdHRyPSJ2YWx1ZSI+PGZvby8+PC9kb2M+JworICAgICAgICAgICAgICAgICwgInRlc3RDbG9uZUVsZW1lbnREZWVwIikKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdENsb25lRG9jdW1lbnRTaGFsbG93KHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPD94bWwgdmVyc2lvbj0nMS4wJz8+XG4iCisgICAgICAgICAgICAgICAgICAgICI8IS0tIGNvbW1lbnQgLS0+IgorICAgICAgICAgICAgICAgICAgICAiPCFET0NUWVBFIGRvYyBbXG4iCisgICAgICAgICAgICAgICAgICAgICI8IU5PVEFUSU9OIG5vdGF0aW9uIFNZU1RFTSAnaHR0cDovL3htbC5weXRob24ub3JnLyc+XG4iCisgICAgICAgICAgICAgICAgICAgICJdPlxuIgorICAgICAgICAgICAgICAgICAgICAiPGRvYyBhdHRyPSd2YWx1ZScvPiIpCisgICAgICAgIGRvYzIgPSBkb2MuY2xvbmVOb2RlKDApCisgICAgICAgIHNlbGYuY29uZmlybShkb2MyIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgInRlc3RDbG9uZURvY3VtZW50U2hhbGxvdzoiCisgICAgICAgICAgICAgICAgIiBzaGFsbG93IGNsb25pbmcgb2YgZG9jdW1lbnRzIG1ha2VzIG5vIHNlbnNlISIpCisKKyAgICBkZWYgdGVzdENsb25lRG9jdW1lbnREZWVwKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPD94bWwgdmVyc2lvbj0nMS4wJz8+XG4iCisgICAgICAgICAgICAgICAgICAgICI8IS0tIGNvbW1lbnQgLS0+IgorICAgICAgICAgICAgICAgICAgICAiPCFET0NUWVBFIGRvYyBbXG4iCisgICAgICAgICAgICAgICAgICAgICI8IU5PVEFUSU9OIG5vdGF0aW9uIFNZU1RFTSAnaHR0cDovL3htbC5weXRob24ub3JnLyc+XG4iCisgICAgICAgICAgICAgICAgICAgICJdPlxuIgorICAgICAgICAgICAgICAgICAgICAiPGRvYyBhdHRyPSd2YWx1ZScvPiIpCisgICAgICAgIGRvYzIgPSBkb2MuY2xvbmVOb2RlKDEpCisgICAgICAgIHNlbGYuY29uZmlybShub3QgKGRvYy5pc1NhbWVOb2RlKGRvYzIpIG9yIGRvYzIuaXNTYW1lTm9kZShkb2MpKSwKKyAgICAgICAgICAgICAgICAidGVzdENsb25lRG9jdW1lbnREZWVwOiBkb2N1bWVudCBvYmplY3RzIG5vdCBkaXN0aW5jdCIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oZG9jLmNoaWxkTm9kZXMpID09IGxlbihkb2MyLmNoaWxkTm9kZXMpLAorICAgICAgICAgICAgICAgICJ0ZXN0Q2xvbmVEb2N1bWVudERlZXA6IHdyb25nIG51bWJlciBvZiBEb2N1bWVudCBjaGlsZHJlbiIpCisgICAgICAgIHNlbGYuY29uZmlybShkb2MyLmRvY3VtZW50RWxlbWVudC5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSwKKyAgICAgICAgICAgICAgICAidGVzdENsb25lRG9jdW1lbnREZWVwOiBkb2N1bWVudEVsZW1lbnQgbm90IGFuIEVMRU1FTlRfTk9ERSIpCisgICAgICAgIHNlbGYuY29uZmlybShkb2MyLmRvY3VtZW50RWxlbWVudC5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoZG9jMiksCisgICAgICAgICAgICAidGVzdENsb25lRG9jdW1lbnREZWVwOiBkb2N1bWVudEVsZW1lbnQgb3duZXIgaXMgbm90IG5ldyBkb2N1bWVudCIpCisgICAgICAgIHNlbGYuY29uZmlybShub3QgZG9jLmRvY3VtZW50RWxlbWVudC5pc1NhbWVOb2RlKGRvYzIuZG9jdW1lbnRFbGVtZW50KSwKKyAgICAgICAgICAgICAgICAidGVzdENsb25lRG9jdW1lbnREZWVwOiBkb2N1bWVudEVsZW1lbnQgc2hvdWxkIG5vdCBiZSBzaGFyZWQiKQorICAgICAgICBpZiBkb2MuZG9jdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgY2hlY2sgdGhlIGRvY3R5cGUgaWZmIHRoZSBvcmlnaW5hbCBET00gbWFpbnRhaW5lZCBpdAorICAgICAgICAgICAgc2VsZi5jb25maXJtKGRvYzIuZG9jdHlwZS5ub2RlVHlwZSA9PSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERSwKKyAgICAgICAgICAgICAgICAgICAgInRlc3RDbG9uZURvY3VtZW50RGVlcDogZG9jdHlwZSBub3QgYSBET0NVTUVOVF9UWVBFX05PREUiKQorICAgICAgICAgICAgc2VsZi5jb25maXJtKGRvYzIuZG9jdHlwZS5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoZG9jMikpCisgICAgICAgICAgICBzZWxmLmNvbmZpcm0obm90IGRvYy5kb2N0eXBlLmlzU2FtZU5vZGUoZG9jMi5kb2N0eXBlKSkKKworICAgIGRlZiB0ZXN0Q2xvbmVEb2N1bWVudFR5cGVEZWVwT2soc2VsZik6CisgICAgICAgIGRvY3R5cGUgPSBjcmVhdGVfbm9uZW1wdHlfZG9jdHlwZSgpCisgICAgICAgIGNsb25lID0gZG9jdHlwZS5jbG9uZU5vZGUoMSkKKyAgICAgICAgc2VsZi5jb25maXJtKGNsb25lIGlzIG5vdCBOb25lCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLm5vZGVOYW1lID09IGRvY3R5cGUubm9kZU5hbWUKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUubmFtZSA9PSBkb2N0eXBlLm5hbWUKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUucHVibGljSWQgPT0gZG9jdHlwZS5wdWJsaWNJZAorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5zeXN0ZW1JZCA9PSBkb2N0eXBlLnN5c3RlbUlkCisgICAgICAgICAgICAgICAgYW5kIGxlbihjbG9uZS5lbnRpdGllcykgPT0gbGVuKGRvY3R5cGUuZW50aXRpZXMpCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLmVudGl0aWVzLml0ZW0obGVuKGNsb25lLmVudGl0aWVzKSkgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBsZW4oY2xvbmUubm90YXRpb25zKSA9PSBsZW4oZG9jdHlwZS5ub3RhdGlvbnMpCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLm5vdGF0aW9ucy5pdGVtKGxlbihjbG9uZS5ub3RhdGlvbnMpKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGxlbihjbG9uZS5jaGlsZE5vZGVzKSA9PSAwKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZG9jdHlwZS5lbnRpdGllcykpOgorICAgICAgICAgICAgc2UgPSBkb2N0eXBlLmVudGl0aWVzLml0ZW0oaSkKKyAgICAgICAgICAgIGNlID0gY2xvbmUuZW50aXRpZXMuaXRlbShpKQorICAgICAgICAgICAgc2VsZi5jb25maXJtKChub3Qgc2UuaXNTYW1lTm9kZShjZSkpCisgICAgICAgICAgICAgICAgICAgIGFuZCAobm90IGNlLmlzU2FtZU5vZGUoc2UpKQorICAgICAgICAgICAgICAgICAgICBhbmQgY2Uubm9kZU5hbWUgPT0gc2Uubm9kZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNlLm5vdGF0aW9uTmFtZSA9PSBzZS5ub3RhdGlvbk5hbWUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNlLnB1YmxpY0lkID09IHNlLnB1YmxpY0lkCisgICAgICAgICAgICAgICAgICAgIGFuZCBjZS5zeXN0ZW1JZCA9PSBzZS5zeXN0ZW1JZAorICAgICAgICAgICAgICAgICAgICBhbmQgY2UuZW5jb2RpbmcgPT0gc2UuZW5jb2RpbmcKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNlLmFjdHVhbEVuY29kaW5nID09IHNlLmFjdHVhbEVuY29kaW5nCisgICAgICAgICAgICAgICAgICAgIGFuZCBjZS52ZXJzaW9uID09IHNlLnZlcnNpb24pCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihkb2N0eXBlLm5vdGF0aW9ucykpOgorICAgICAgICAgICAgc24gPSBkb2N0eXBlLm5vdGF0aW9ucy5pdGVtKGkpCisgICAgICAgICAgICBjbiA9IGNsb25lLm5vdGF0aW9ucy5pdGVtKGkpCisgICAgICAgICAgICBzZWxmLmNvbmZpcm0oKG5vdCBzbi5pc1NhbWVOb2RlKGNuKSkKKyAgICAgICAgICAgICAgICAgICAgYW5kIChub3QgY24uaXNTYW1lTm9kZShzbikpCisgICAgICAgICAgICAgICAgICAgIGFuZCBjbi5ub2RlTmFtZSA9PSBzbi5ub2RlTmFtZQorICAgICAgICAgICAgICAgICAgICBhbmQgY24ucHVibGljSWQgPT0gc24ucHVibGljSWQKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNuLnN5c3RlbUlkID09IHNuLnN5c3RlbUlkKQorCisgICAgZGVmIHRlc3RDbG9uZURvY3VtZW50VHlwZURlZXBOb3RPayhzZWxmKToKKyAgICAgICAgZG9jID0gY3JlYXRlX2RvY193aXRoX2RvY3R5cGUoKQorICAgICAgICBjbG9uZSA9IGRvYy5kb2N0eXBlLmNsb25lTm9kZSgxKQorICAgICAgICBzZWxmLmNvbmZpcm0oY2xvbmUgaXMgTm9uZSwgInRlc3RDbG9uZURvY3VtZW50VHlwZURlZXBOb3RPayIpCisKKyAgICBkZWYgdGVzdENsb25lRG9jdW1lbnRUeXBlU2hhbGxvd09rKHNlbGYpOgorICAgICAgICBkb2N0eXBlID0gY3JlYXRlX25vbmVtcHR5X2RvY3R5cGUoKQorICAgICAgICBjbG9uZSA9IGRvY3R5cGUuY2xvbmVOb2RlKDApCisgICAgICAgIHNlbGYuY29uZmlybShjbG9uZSBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5ub2RlTmFtZSA9PSBkb2N0eXBlLm5vZGVOYW1lCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLm5hbWUgPT0gZG9jdHlwZS5uYW1lCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLnB1YmxpY0lkID09IGRvY3R5cGUucHVibGljSWQKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUuc3lzdGVtSWQgPT0gZG9jdHlwZS5zeXN0ZW1JZAorICAgICAgICAgICAgICAgIGFuZCBsZW4oY2xvbmUuZW50aXRpZXMpID09IDAKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUuZW50aXRpZXMuaXRlbSgwKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGxlbihjbG9uZS5ub3RhdGlvbnMpID09IDAKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUubm90YXRpb25zLml0ZW0oMCkgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBsZW4oY2xvbmUuY2hpbGROb2RlcykgPT0gMCkKKworICAgIGRlZiB0ZXN0Q2xvbmVEb2N1bWVudFR5cGVTaGFsbG93Tm90T2soc2VsZik6CisgICAgICAgIGRvYyA9IGNyZWF0ZV9kb2Nfd2l0aF9kb2N0eXBlKCkKKyAgICAgICAgY2xvbmUgPSBkb2MuZG9jdHlwZS5jbG9uZU5vZGUoMCkKKyAgICAgICAgc2VsZi5jb25maXJtKGNsb25lIGlzIE5vbmUsICJ0ZXN0Q2xvbmVEb2N1bWVudFR5cGVTaGFsbG93Tm90T2siKQorCisgICAgZGVmIGNoZWNrX2ltcG9ydF9kb2N1bWVudChzZWxmLCBkZWVwLCB0ZXN0TmFtZSk6CisgICAgICAgIGRvYzEgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgZG9jMiA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLk5vdFN1cHBvcnRlZEVyciwgZG9jMS5pbXBvcnROb2RlLCBkb2MyLCBkZWVwKQorCisgICAgZGVmIHRlc3RJbXBvcnREb2N1bWVudFNoYWxsb3coc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW1wb3J0X2RvY3VtZW50KDAsICJ0ZXN0SW1wb3J0RG9jdW1lbnRTaGFsbG93IikKKworICAgIGRlZiB0ZXN0SW1wb3J0RG9jdW1lbnREZWVwKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ltcG9ydF9kb2N1bWVudCgxLCAidGVzdEltcG9ydERvY3VtZW50RGVlcCIpCisKKyAgICBkZWYgdGVzdEltcG9ydERvY3VtZW50VHlwZVNoYWxsb3coc2VsZik6CisgICAgICAgIHNyYyA9IGNyZWF0ZV9kb2Nfd2l0aF9kb2N0eXBlKCkKKyAgICAgICAgdGFyZ2V0ID0gY3JlYXRlX2RvY193aXRob3V0X2RvY3R5cGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLk5vdFN1cHBvcnRlZEVyciwgdGFyZ2V0LmltcG9ydE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5kb2N0eXBlLCAwKQorCisgICAgZGVmIHRlc3RJbXBvcnREb2N1bWVudFR5cGVEZWVwKHNlbGYpOgorICAgICAgICBzcmMgPSBjcmVhdGVfZG9jX3dpdGhfZG9jdHlwZSgpCisgICAgICAgIHRhcmdldCA9IGNyZWF0ZV9kb2Nfd2l0aG91dF9kb2N0eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5Ob3RTdXBwb3J0ZWRFcnIsIHRhcmdldC5pbXBvcnROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMuZG9jdHlwZSwgMSkKKworICAgICMgVGVzdGluZyBhdHRyaWJ1dGUgY2xvbmVzIHVzZXMgYSBoZWxwZXIsIGFuZCBzaG91bGQgYWx3YXlzIGJlIGRlZXAsCisgICAgIyBldmVuIGlmIHRoZSBhcmd1bWVudCB0byBjbG9uZU5vZGUgaXMgZmFsc2UuCisgICAgZGVmIGNoZWNrX2Nsb25lX2F0dHJpYnV0ZShzZWxmLCBkZWVwLCB0ZXN0TmFtZSk6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jIGF0dHI9J3ZhbHVlJy8+IikKKyAgICAgICAgYXR0ciA9IGRvYy5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgiYXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYXR0ciwgTm9uZSkKKyAgICAgICAgY2xvbmUgPSBhdHRyLmNsb25lTm9kZShkZWVwKQorICAgICAgICBzZWxmLmNvbmZpcm0obm90IGNsb25lLmlzU2FtZU5vZGUoYXR0cikpCisgICAgICAgIHNlbGYuY29uZmlybShub3QgYXR0ci5pc1NhbWVOb2RlKGNsb25lKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGNsb25lLm93bmVyRWxlbWVudCBpcyBOb25lLAorICAgICAgICAgICAgICAgIHRlc3ROYW1lICsgIjogb3duZXJFbGVtZW50IHNob3VsZCBiZSBOb25lIikKKyAgICAgICAgc2VsZi5jb25maXJtKGNsb25lLm93bmVyRG9jdW1lbnQuaXNTYW1lTm9kZShhdHRyLm93bmVyRG9jdW1lbnQpLAorICAgICAgICAgICAgICAgIHRlc3ROYW1lICsgIjogb3duZXJEb2N1bWVudCBkb2VzIG5vdCBtYXRjaCIpCisgICAgICAgIHNlbGYuY29uZmlybShjbG9uZS5zcGVjaWZpZWQsCisgICAgICAgICAgICAgICAgdGVzdE5hbWUgKyAiOiBjbG9uZWQgYXR0cmlidXRlIG11c3QgaGF2ZSBzcGVjaWZpZWQgPT0gVHJ1ZSIpCisKKyAgICBkZWYgdGVzdENsb25lQXR0cmlidXRlU2hhbGxvdyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9uZV9hdHRyaWJ1dGUoMCwgInRlc3RDbG9uZUF0dHJpYnV0ZVNoYWxsb3ciKQorCisgICAgZGVmIHRlc3RDbG9uZUF0dHJpYnV0ZURlZXAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvbmVfYXR0cmlidXRlKDEsICJ0ZXN0Q2xvbmVBdHRyaWJ1dGVEZWVwIikKKworICAgIGRlZiBjaGVja19jbG9uZV9waShzZWxmLCBkZWVwLCB0ZXN0TmFtZSk6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8P3RhcmdldCBkYXRhPz48ZG9jLz4iKQorICAgICAgICBwaSA9IGRvYy5maXJzdENoaWxkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGkubm9kZVR5cGUsIE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKQorICAgICAgICBjbG9uZSA9IHBpLmNsb25lTm9kZShkZWVwKQorICAgICAgICBzZWxmLmNvbmZpcm0oY2xvbmUudGFyZ2V0ID09IHBpLnRhcmdldAorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5kYXRhID09IHBpLmRhdGEpCisKKyAgICBkZWYgdGVzdENsb25lUElTaGFsbG93KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb25lX3BpKDAsICJ0ZXN0Q2xvbmVQSVNoYWxsb3ciKQorCisgICAgZGVmIHRlc3RDbG9uZVBJRGVlcChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9uZV9waSgxLCAidGVzdENsb25lUElEZWVwIikKKworICAgIGRlZiB0ZXN0Tm9ybWFsaXplKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoImZpcnN0IikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJzZWNvbmQiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyLAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQgaXMgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLmRhdGEgPT0gImZpcnN0c2Vjb25kIgorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemUgLS0gcmVzdWx0IikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAwCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMCwKKyAgICAgICAgICAgICAgICAidGVzdE5vcm1hbGl6ZSAtLSBzaW5nbGUgZW1wdHkgbm9kZSByZW1vdmVkIikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZUNvbWJpbmVBbmROZXh0U2libGluZyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJmaXJzdCIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgic2Vjb25kIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoImkiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDMKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAzLAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplQ29tYmluZUFuZE5leHRTaWJsaW5nIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQuZGF0YSA9PSAiZmlyc3RzZWNvbmQiCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZCBpcyBub3Qgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLm5leHRTaWJsaW5nIGlzIHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290Lmxhc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgcm9vdC5maXJzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QubGFzdENoaWxkLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplQ29tYmluZWRBbmROZXh0U2libGluZyAtLSByZXN1bHQiKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFByZXZTaWJsaW5nKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoImZpcnN0IikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyLAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFByZXZTaWJsaW5nIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQuZGF0YSA9PSAiZmlyc3QiCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZCBpcyByb290Lmxhc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFByZXZTaWJsaW5nIC0tIHJlc3VsdCIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3ROb3JtYWxpemVEZWxldGVXaXRoTmV4dFNpYmxpbmcoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJzZWNvbmQiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyLAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aE5leHRTaWJsaW5nIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQuZGF0YSA9PSAic2Vjb25kIgorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQgaXMgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhOZXh0U2libGluZyAtLSByZXN1bHQiKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFR3b05vblRleHRTaWJsaW5ncyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoImkiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KCJpIikpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAzCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMywKKyAgICAgICAgICAgICAgICAidGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhUd29TaWJsaW5ncyAtLSBwcmVwYXJhdGlvbiIpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkIGlzIG5vdCByb290Lmxhc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QubGFzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyByb290LmZpcnN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5sYXN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemVEZWxldGVXaXRoVHdvU2libGluZ3MgLS0gcmVzdWx0IikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZURlbGV0ZUFuZENvbWJpbmUoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJzZWNvbmQiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiZm91cnRoIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSA1LAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplRGVsZXRlQW5kQ29tYmluZSAtLSBwcmVwYXJhdGlvbiIpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkIGlzIHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5kYXRhID09ICJzZWNvbmRmb3VydGgiCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemVEZWxldGVBbmRDb21iaW5lIC0tIHJlc3VsdCIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3ROb3JtYWxpemVSZWN1cnNpb24oc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPG8+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxpLz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvbz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxvPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0MiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3gyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9vPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0MyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L28+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvZG9jPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuY2hpbGROb2Rlc1swXS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICByb290LmNoaWxkTm9kZXNbMF0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJ4IikpCisgICAgICAgIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgieDIiKSkKKyAgICAgICAgcm9vdC5jaGlsZE5vZGVzWzFdLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgieDMiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMworICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDMKKyAgICAgICAgICAgICAgICBhbmQgbGVuKHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzKSA9PSA0CisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSA0CisgICAgICAgICAgICAgICAgYW5kIGxlbihyb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2RlcykgPT0gMworICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMworICAgICAgICAgICAgICAgIGFuZCBsZW4ocm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZTIgLS0gcHJlcGFyYXRpb24iKQorICAgICAgICBkb2Mubm9ybWFsaXplKCkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyCisgICAgICAgICAgICAgICAgYW5kIGxlbihyb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMgorICAgICAgICAgICAgICAgIGFuZCBsZW4ocm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXMubGVuZ3RoID09IDIKKyAgICAgICAgICAgICAgICBhbmQgbGVuKHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMpID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemUyIC0tIGNoaWxkTm9kZXMgbGVuZ3RocyIpCisgICAgICAgIHNlbGYuY29uZmlybShyb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXS5kYXRhID09ICJ0eCIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5kYXRhID09ICJ0MngyIgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1sxXS5kYXRhID09ICJ0M3gzIgorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemUyIC0tIGpvaW5lZCB0ZXh0IGZpZWxkcyIpCisgICAgICAgIHNlbGYuY29uZmlybShyb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXS5uZXh0U2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdLnByZXZpb3VzU2libGluZworICAgICAgICAgICAgICAgICAgICAgICAgaXMgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0ucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0ubmV4dFNpYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzFdLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMV0ucHJldmlvdXNTaWJsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpcyByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5uZXh0U2libGluZworICAgICAgICAgICAgICAgICAgICAgICAgaXMgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMV0KKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplMiAtLSBzaWJsaW5nIHBvaW50ZXJzIikKKyAgICAgICAgZG9jLnVubGluaygpCisKKworICAgIGRlZiB0ZXN0QnVnMDc3Nzg4NChzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxvPnRleHQ8L28+IikKKyAgICAgICAgdGV4dCA9IGRvYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQubm9kZVR5cGUsIE5vZGUuVEVYVF9OT0RFKQorICAgICAgICAjIFNob3VsZCBydW4gcXVpZXRseSwgZG9pbmcgbm90aGluZy4KKyAgICAgICAgdGV4dC5ub3JtYWxpemUoKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0QnVnMTQzMzY5NChzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxvPjxpLz50PC9vPiIpCisgICAgICAgIG5vZGUgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIG5vZGUuY2hpbGROb2Rlc1sxXS5ub2RlVmFsdWUgPSAiIgorICAgICAgICBub2RlLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShub2RlLmNoaWxkTm9kZXNbLTFdLm5leHRTaWJsaW5nIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAiRmluYWwgY2hpbGQncyAubmV4dFNpYmxpbmcgc2hvdWxkIGJlIE5vbmUiKQorCisgICAgZGVmIHRlc3RTaWJsaW5ncyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2M+PD9waT8+dGV4dD88ZWxtLz48L2RvYz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICAocGksIHRleHQsIGVsbSkgPSByb290LmNoaWxkTm9kZXMKKworICAgICAgICBzZWxmLmNvbmZpcm0ocGkubmV4dFNpYmxpbmcgaXMgdGV4dCBhbmQKKyAgICAgICAgICAgICAgICBwaS5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZSBhbmQKKyAgICAgICAgICAgICAgICB0ZXh0Lm5leHRTaWJsaW5nIGlzIGVsbSBhbmQKKyAgICAgICAgICAgICAgICB0ZXh0LnByZXZpb3VzU2libGluZyBpcyBwaSBhbmQKKyAgICAgICAgICAgICAgICBlbG0ubmV4dFNpYmxpbmcgaXMgTm9uZSBhbmQKKyAgICAgICAgICAgICAgICBlbG0ucHJldmlvdXNTaWJsaW5nIGlzIHRleHQsICJ0ZXN0U2libGluZ3MiKQorCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3RQYXJlbnRzKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygKKyAgICAgICAgICAgICI8ZG9jPjxlbG0xPjxlbG0yLz48ZWxtMj48ZWxtMy8+PC9lbG0yPjwvZWxtMT48L2RvYz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICBlbG0xID0gcm9vdC5jaGlsZE5vZGVzWzBdCisgICAgICAgIChlbG0yYSwgZWxtMmIpID0gZWxtMS5jaGlsZE5vZGVzCisgICAgICAgIGVsbTMgPSBlbG0yYi5jaGlsZE5vZGVzWzBdCisKKyAgICAgICAgc2VsZi5jb25maXJtKHJvb3QucGFyZW50Tm9kZSBpcyBkb2MgYW5kCisgICAgICAgICAgICAgICAgZWxtMS5wYXJlbnROb2RlIGlzIHJvb3QgYW5kCisgICAgICAgICAgICAgICAgZWxtMmEucGFyZW50Tm9kZSBpcyBlbG0xIGFuZAorICAgICAgICAgICAgICAgIGVsbTJiLnBhcmVudE5vZGUgaXMgZWxtMSBhbmQKKyAgICAgICAgICAgICAgICBlbG0zLnBhcmVudE5vZGUgaXMgZWxtMmIsICJ0ZXN0UGFyZW50cyIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3ROb2RlTGlzdEl0ZW0oc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jPjxlLz48ZS8+PC9kb2M+IikKKyAgICAgICAgY2hpbGRyZW4gPSBkb2MuY2hpbGROb2RlcworICAgICAgICBkb2NlbGVtID0gY2hpbGRyZW5bMF0KKyAgICAgICAgc2VsZi5jb25maXJtKGNoaWxkcmVuWzBdIGlzIGNoaWxkcmVuLml0ZW0oMCkKKyAgICAgICAgICAgICAgICBhbmQgY2hpbGRyZW4uaXRlbSgxKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGRvY2VsZW0uY2hpbGROb2Rlcy5pdGVtKDApIGlzIGRvY2VsZW0uY2hpbGROb2Rlc1swXQorICAgICAgICAgICAgICAgIGFuZCBkb2NlbGVtLmNoaWxkTm9kZXMuaXRlbSgxKSBpcyBkb2NlbGVtLmNoaWxkTm9kZXNbMV0KKyAgICAgICAgICAgICAgICBhbmQgZG9jZWxlbS5jaGlsZE5vZGVzLml0ZW0oMCkuY2hpbGROb2Rlcy5pdGVtKDApIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgInRlc3QgTm9kZUxpc3QuaXRlbSgpIikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdFNBWDJET00oc2VsZik6CisgICAgICAgIGZyb20geG1sLmRvbSBpbXBvcnQgcHVsbGRvbQorCisgICAgICAgIHNheDJkb20gPSBwdWxsZG9tLlNBWDJET00oKQorICAgICAgICBzYXgyZG9tLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBzYXgyZG9tLnN0YXJ0RWxlbWVudCgiZG9jIiwge30pCisgICAgICAgIHNheDJkb20uY2hhcmFjdGVycygidGV4dCIpCisgICAgICAgIHNheDJkb20uc3RhcnRFbGVtZW50KCJzdWJlbG0iLCB7fSkKKyAgICAgICAgc2F4MmRvbS5jaGFyYWN0ZXJzKCJ0ZXh0IikKKyAgICAgICAgc2F4MmRvbS5lbmRFbGVtZW50KCJzdWJlbG0iKQorICAgICAgICBzYXgyZG9tLmNoYXJhY3RlcnMoInRleHQiKQorICAgICAgICBzYXgyZG9tLmVuZEVsZW1lbnQoImRvYyIpCisgICAgICAgIHNheDJkb20uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIGRvYyA9IHNheDJkb20uZG9jdW1lbnQKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgKHRleHQxLCBlbG0xLCB0ZXh0MikgPSByb290LmNoaWxkTm9kZXMKKyAgICAgICAgdGV4dDMgPSBlbG0xLmNoaWxkTm9kZXNbMF0KKworICAgICAgICBzZWxmLmNvbmZpcm0odGV4dDEucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgdGV4dDEubmV4dFNpYmxpbmcgaXMgZWxtMSBhbmQKKyAgICAgICAgICAgICAgICBlbG0xLnByZXZpb3VzU2libGluZyBpcyB0ZXh0MSBhbmQKKyAgICAgICAgICAgICAgICBlbG0xLm5leHRTaWJsaW5nIGlzIHRleHQyIGFuZAorICAgICAgICAgICAgICAgIHRleHQyLnByZXZpb3VzU2libGluZyBpcyBlbG0xIGFuZAorICAgICAgICAgICAgICAgIHRleHQyLm5leHRTaWJsaW5nIGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgdGV4dDMucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgdGV4dDMubmV4dFNpYmxpbmcgaXMgTm9uZSwgInRlc3RTQVgyRE9NIC0gc2libGluZ3MiKQorCisgICAgICAgIHNlbGYuY29uZmlybShyb290LnBhcmVudE5vZGUgaXMgZG9jIGFuZAorICAgICAgICAgICAgICAgIHRleHQxLnBhcmVudE5vZGUgaXMgcm9vdCBhbmQKKyAgICAgICAgICAgICAgICBlbG0xLnBhcmVudE5vZGUgaXMgcm9vdCBhbmQKKyAgICAgICAgICAgICAgICB0ZXh0Mi5wYXJlbnROb2RlIGlzIHJvb3QgYW5kCisgICAgICAgICAgICAgICAgdGV4dDMucGFyZW50Tm9kZSBpcyBlbG0xLCAidGVzdFNBWDJET00gLSBwYXJlbnRzIikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdEVuY29kaW5ncyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoJzxmb28+JiN4MjBhYzs8L2Zvbz4nKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jLnRveG1sKCkgPT0gdSc8P3htbCB2ZXJzaW9uPSIxLjAiID8+PGZvbz5cdTIwYWM8L2Zvbz4nCisgICAgICAgICAgICAgICAgYW5kIGRvYy50b3htbCgndXRmLTgnKSA9PQorICAgICAgICAgICAgICAgICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pjxmb28+XHhlMlx4ODJceGFjPC9mb28+JworICAgICAgICAgICAgICAgIGFuZCBkb2MudG94bWwoJ2lzby04ODU5LTE1JykgPT0KKyAgICAgICAgICAgICAgICAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMTUiPz48Zm9vPlx4YTQ8L2Zvbz4nLAorICAgICAgICAgICAgICAgICJ0ZXN0RW5jb2RpbmdzIC0gZW5jb2RpbmcgRVVSTyBTSUdOIikKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGNoYXJhY3RlciBkZWNvZGluZyBlcnJvcnMgcmFpc2UgZXhjZXB0aW9ucyBpbnN0ZWFkCisgICAgICAgICMgb2YgY3Jhc2hpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBwYXJzZVN0cmluZywKKyAgICAgICAgICAgICAgICAnPGZyYW5ceGU3YWlzPkNvbW1lbnQgXHhlN2EgdmEgPyBUclx4ZThzIGJpZW4gPzwvZnJhblx4ZTdhaXM+JykKKworICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGNsYXNzIFVzZXJEYXRhSGFuZGxlcjoKKyAgICAgICAgY2FsbGVkID0gMAorICAgICAgICBkZWYgaGFuZGxlKHNlbGYsIG9wZXJhdGlvbiwga2V5LCBkYXRhLCBzcmMsIGRzdCk6CisgICAgICAgICAgICBkc3Quc2V0VXNlckRhdGEoa2V5LCBkYXRhICsgMSwgc2VsZikKKyAgICAgICAgICAgIHNyYy5zZXRVc2VyRGF0YShrZXksIE5vbmUsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmNhbGxlZCA9IDEKKworICAgIGRlZiB0ZXN0VXNlckRhdGEoc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgbiA9IGRvbS5jcmVhdGVFbGVtZW50KCdlJykKKyAgICAgICAgc2VsZi5jb25maXJtKG4uZ2V0VXNlckRhdGEoImZvbyIpIGlzIE5vbmUpCisgICAgICAgIG4uc2V0VXNlckRhdGEoImZvbyIsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuY29uZmlybShuLmdldFVzZXJEYXRhKCJmb28iKSBpcyBOb25lKQorICAgICAgICBuLnNldFVzZXJEYXRhKCJmb28iLCAxMiwgMTIpCisgICAgICAgIG4uc2V0VXNlckRhdGEoImJhciIsIDEzLCAxMykKKyAgICAgICAgc2VsZi5jb25maXJtKG4uZ2V0VXNlckRhdGEoImZvbyIpID09IDEyKQorICAgICAgICBzZWxmLmNvbmZpcm0obi5nZXRVc2VyRGF0YSgiYmFyIikgPT0gMTMpCisgICAgICAgIG4uc2V0VXNlckRhdGEoImZvbyIsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuY29uZmlybShuLmdldFVzZXJEYXRhKCJmb28iKSBpcyBOb25lKQorICAgICAgICBzZWxmLmNvbmZpcm0obi5nZXRVc2VyRGF0YSgiYmFyIikgPT0gMTMpCisKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuVXNlckRhdGFIYW5kbGVyKCkKKyAgICAgICAgbi5zZXRVc2VyRGF0YSgiYmFyIiwgMTIsIGhhbmRsZXIpCisgICAgICAgIGMgPSBuLmNsb25lTm9kZSgxKQorICAgICAgICBzZWxmLmNvbmZpcm0oaGFuZGxlci5jYWxsZWQKKyAgICAgICAgICAgICAgICBhbmQgbi5nZXRVc2VyRGF0YSgiYmFyIikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBjLmdldFVzZXJEYXRhKCJiYXIiKSA9PSAxMykKKyAgICAgICAgbi51bmxpbmsoKQorICAgICAgICBjLnVubGluaygpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIGNoZWNrUmVuYW1lTm9kZVNoYXJlZENvbnN0cmFpbnRzKHNlbGYsIGRvYywgbm9kZSk6CisgICAgICAgICMgTWFrZSBzdXJlIGlsbGVnYWwgTlMgdXNhZ2UgaXMgZGV0ZWN0ZWQ6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbC5kb20uTmFtZXNwYWNlRXJyLCBkb2MucmVuYW1lTm9kZSwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly94bWwucHl0aG9uLm9yZy9ucyIsICJ4bWxuczpmb28iKQorICAgICAgICBkb2MyID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbC5kb20uV3JvbmdEb2N1bWVudEVyciwgZG9jMi5yZW5hbWVOb2RlLCBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSwgImZvbyIpCisKKyAgICBkZWYgdGVzdFJlbmFtZUF0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MgYT0ndicvPiIpCisgICAgICAgIGVsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIGF0dHJtYXAgPSBlbGVtLmF0dHJpYnV0ZXMKKyAgICAgICAgYXR0ciA9IGVsZW0uYXR0cmlidXRlc1snYSddCisKKyAgICAgICAgIyBTaW1wbGUgcmVuYW1pbmcKKyAgICAgICAgYXR0ciA9IGRvYy5yZW5hbWVOb2RlKGF0dHIsIHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFLCAiYiIpCisgICAgICAgIHNlbGYuY29uZmlybShhdHRyLm5hbWUgPT0gImIiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubm9kZU5hbWUgPT0gImIiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubG9jYWxOYW1lIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5uYW1lc3BhY2VVUkkgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5wcmVmaXggaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBhdHRyLnZhbHVlID09ICJ2IgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImEiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiYiIpLmlzU2FtZU5vZGUoYXR0cikKKyAgICAgICAgICAgICAgICBhbmQgYXR0cm1hcFsiYiJdLmlzU2FtZU5vZGUoYXR0cikKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoZG9jKQorICAgICAgICAgICAgICAgIGFuZCBhdHRyLm93bmVyRWxlbWVudC5pc1NhbWVOb2RlKGVsZW0pKQorCisgICAgICAgICMgUmVuYW1lIHRvIGhhdmUgYSBuYW1lc3BhY2UsIG5vIHByZWZpeAorICAgICAgICBhdHRyID0gZG9jLnJlbmFtZU5vZGUoYXR0ciwgImh0dHA6Ly94bWwucHl0aG9uLm9yZy9ucyIsICJjIikKKyAgICAgICAgc2VsZi5jb25maXJtKGF0dHIubmFtZSA9PSAiYyIKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5ub2RlTmFtZSA9PSAiYyIKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5sb2NhbE5hbWUgPT0gImMiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubmFtZXNwYWNlVVJJID09ICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIucHJlZml4IGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci52YWx1ZSA9PSAidiIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJhIikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImIiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiYyIpLmlzU2FtZU5vZGUoYXR0cikKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlTlMoCisgICAgICAgICAgICAgICAgICAgICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMiLCAiYyIpLmlzU2FtZU5vZGUoYXR0cikKKyAgICAgICAgICAgICAgICBhbmQgYXR0cm1hcFsiYyJdLmlzU2FtZU5vZGUoYXR0cikKKyAgICAgICAgICAgICAgICBhbmQgYXR0cm1hcFsoImh0dHA6Ly94bWwucHl0aG9uLm9yZy9ucyIsICJjIildLmlzU2FtZU5vZGUoYXR0cikpCisKKyAgICAgICAgIyBSZW5hbWUgdG8gaGF2ZSBhIG5hbWVzcGFjZSwgd2l0aCBwcmVmaXgKKyAgICAgICAgYXR0ciA9IGRvYy5yZW5hbWVOb2RlKGF0dHIsICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMyIiwgInA6ZCIpCisgICAgICAgIHNlbGYuY29uZmlybShhdHRyLm5hbWUgPT0gInA6ZCIKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5ub2RlTmFtZSA9PSAicDpkIgorICAgICAgICAgICAgICAgIGFuZCBhdHRyLmxvY2FsTmFtZSA9PSAiZCIKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5uYW1lc3BhY2VVUkkgPT0gImh0dHA6Ly94bWwucHl0aG9uLm9yZy9uczIiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIucHJlZml4ID09ICJwIgorICAgICAgICAgICAgICAgIGFuZCBhdHRyLnZhbHVlID09ICJ2IgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImEiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiYiIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJjIikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGVOUygKKyAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly94bWwucHl0aG9uLm9yZy9ucyIsICJjIikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInA6ZCIpLmlzU2FtZU5vZGUoYXR0cikKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlTlMoCisgICAgICAgICAgICAgICAgICAgICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMyIiwgImQiKS5pc1NhbWVOb2RlKGF0dHIpCisgICAgICAgICAgICAgICAgYW5kIGF0dHJtYXBbInA6ZCJdLmlzU2FtZU5vZGUoYXR0cikKKyAgICAgICAgICAgICAgICBhbmQgYXR0cm1hcFsoImh0dHA6Ly94bWwucHl0aG9uLm9yZy9uczIiLCAiZCIpXS5pc1NhbWVOb2RlKGF0dHIpKQorCisgICAgICAgICMgUmVuYW1lIGJhY2sgdG8gYSBzaW1wbGUgbm9uLU5TIG5vZGUKKyAgICAgICAgYXR0ciA9IGRvYy5yZW5hbWVOb2RlKGF0dHIsIHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFLCAiZSIpCisgICAgICAgIHNlbGYuY29uZmlybShhdHRyLm5hbWUgPT0gImUiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubm9kZU5hbWUgPT0gImUiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubG9jYWxOYW1lIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5uYW1lc3BhY2VVUkkgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5wcmVmaXggaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBhdHRyLnZhbHVlID09ICJ2IgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImEiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiYiIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJjIikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInA6ZCIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlTlMoCisgICAgICAgICAgICAgICAgICAgICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMiLCAiYyIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJlIikuaXNTYW1lTm9kZShhdHRyKQorICAgICAgICAgICAgICAgIGFuZCBhdHRybWFwWyJlIl0uaXNTYW1lTm9kZShhdHRyKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLk5hbWVzcGFjZUVyciwgZG9jLnJlbmFtZU5vZGUsIGF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMiLCAieG1sbnMiKQorICAgICAgICBzZWxmLmNoZWNrUmVuYW1lTm9kZVNoYXJlZENvbnN0cmFpbnRzKGRvYywgYXR0cikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdFJlbmFtZUVsZW1lbnQoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICBlbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudAorCisgICAgICAgICMgU2ltcGxlIHJlbmFtaW5nCisgICAgICAgIGVsZW0gPSBkb2MucmVuYW1lTm9kZShlbGVtLCB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSwgImEiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZWxlbS50YWdOYW1lID09ICJhIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLm5vZGVOYW1lID09ICJhIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmxvY2FsTmFtZSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ubmFtZXNwYWNlVVJJID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ucHJlZml4IGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoZG9jKSkKKworICAgICAgICAjIFJlbmFtZSB0byBoYXZlIGEgbmFtZXNwYWNlLCBubyBwcmVmaXgKKyAgICAgICAgZWxlbSA9IGRvYy5yZW5hbWVOb2RlKGVsZW0sICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMiLCAiYiIpCisgICAgICAgIHNlbGYuY29uZmlybShlbGVtLnRhZ05hbWUgPT0gImIiCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ubm9kZU5hbWUgPT0gImIiCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ubG9jYWxOYW1lID09ICJiIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLm5hbWVzcGFjZVVSSSA9PSAiaHR0cDovL3htbC5weXRob24ub3JnL25zIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLnByZWZpeCBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ub3duZXJEb2N1bWVudC5pc1NhbWVOb2RlKGRvYykpCisKKyAgICAgICAgIyBSZW5hbWUgdG8gaGF2ZSBhIG5hbWVzcGFjZSwgd2l0aCBwcmVmaXgKKyAgICAgICAgZWxlbSA9IGRvYy5yZW5hbWVOb2RlKGVsZW0sICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMyIiwgInA6YyIpCisgICAgICAgIHNlbGYuY29uZmlybShlbGVtLnRhZ05hbWUgPT0gInA6YyIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5ub2RlTmFtZSA9PSAicDpjIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmxvY2FsTmFtZSA9PSAiYyIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5uYW1lc3BhY2VVUkkgPT0gImh0dHA6Ly94bWwucHl0aG9uLm9yZy9uczIiCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ucHJlZml4ID09ICJwIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLm93bmVyRG9jdW1lbnQuaXNTYW1lTm9kZShkb2MpKQorCisgICAgICAgICMgUmVuYW1lIGJhY2sgdG8gYSBzaW1wbGUgbm9uLU5TIG5vZGUKKyAgICAgICAgZWxlbSA9IGRvYy5yZW5hbWVOb2RlKGVsZW0sIHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFLCAiZCIpCisgICAgICAgIHNlbGYuY29uZmlybShlbGVtLnRhZ05hbWUgPT0gImQiCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ubm9kZU5hbWUgPT0gImQiCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ubG9jYWxOYW1lIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5uYW1lc3BhY2VVUkkgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5wcmVmaXggaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLm93bmVyRG9jdW1lbnQuaXNTYW1lTm9kZShkb2MpKQorCisgICAgICAgIHNlbGYuY2hlY2tSZW5hbWVOb2RlU2hhcmVkQ29uc3RyYWludHMoZG9jLCBlbGVtKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0UmVuYW1lT3RoZXIoc2VsZik6CisgICAgICAgICMgV2UgaGF2ZSB0byBjcmVhdGUgYSBjb21tZW50IG5vZGUgZXhwbGljaXRseSBzaW5jZSBub3QgYWxsIERPTQorICAgICAgICAjIGJ1aWxkZXJzIHVzZWQgd2l0aCBtaW5pZG9tIGFkZCBjb21tZW50cyB0byB0aGUgRE9NLgorICAgICAgICBkb2MgPSB4bWwuZG9tLm1pbmlkb20uZ2V0RE9NSW1wbGVtZW50YXRpb24oKS5jcmVhdGVEb2N1bWVudCgKKyAgICAgICAgICAgIHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFLCAiZSIsIE5vbmUpCisgICAgICAgIG5vZGUgPSBkb2MuY3JlYXRlQ29tbWVudCgiY29tbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbC5kb20uTm90U3VwcG9ydGVkRXJyLCBkb2MucmVuYW1lTm9kZSwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UsICJmb28iKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0V2hvbGVUZXh0KHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYz5hPC9kb2M+IikKKyAgICAgICAgZWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgdGV4dCA9IGVsZW0uY2hpbGROb2Rlc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQubm9kZVR5cGUsIE5vZGUuVEVYVF9OT0RFKQorCisgICAgICAgIHNlbGYuY2hlY2tXaG9sZVRleHQodGV4dCwgImEiKQorICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiYiIpKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQsICJhYiIpCisgICAgICAgIGVsZW0uaW5zZXJ0QmVmb3JlKGRvYy5jcmVhdGVDREFUQVNlY3Rpb24oImMiKSwgdGV4dCkKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0LCAiY2FiIikKKworICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCBjcm9zcyBvdGhlciBub2RlcworICAgICAgICBzcGxpdHRlciA9IGRvYy5jcmVhdGVDb21tZW50KCJjb21tZW50IikKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChzcGxpdHRlcikKKyAgICAgICAgdGV4dDIgPSBkb2MuY3JlYXRlVGV4dE5vZGUoImQiKQorICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRleHQyKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQsICJjYWIiKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQyLCAiZCIpCisKKyAgICAgICAgeCA9IGRvYy5jcmVhdGVFbGVtZW50KCJ4IikKKyAgICAgICAgZWxlbS5yZXBsYWNlQ2hpbGQoeCwgc3BsaXR0ZXIpCisgICAgICAgIHNwbGl0dGVyID0geAorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQsICJjYWIiKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQyLCAiZCIpCisKKyAgICAgICAgeCA9IGRvYy5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oInkiLCAieiIpCisgICAgICAgIGVsZW0ucmVwbGFjZUNoaWxkKHgsIHNwbGl0dGVyKQorICAgICAgICBzcGxpdHRlciA9IHgKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0LCAiY2FiIikKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0MiwgImQiKQorCisgICAgICAgIGVsZW0ucmVtb3ZlQ2hpbGQoc3BsaXR0ZXIpCisgICAgICAgIHNlbGYuY2hlY2tXaG9sZVRleHQodGV4dCwgImNhYmQiKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQyLCAiY2FiZCIpCisKKyAgICBkZWYgdGVzdFBhdGNoMTA5NDE2NChzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2M+PGUvPjwvZG9jPiIpCisgICAgICAgIGVsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIGUgPSBlbGVtLmZpcnN0Q2hpbGQKKyAgICAgICAgc2VsZi5jb25maXJtKGUucGFyZW50Tm9kZSBpcyBlbGVtLCAiQmVmb3JlIHJlcGxhY2VDaGlsZCgpIikKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlcGxhY2luZyBhIGNoaWxkIHdpdGggaXRzZWxmIGxlYXZlcyB0aGUgdHJlZSB1bmNoYW5nZWQKKyAgICAgICAgZWxlbS5yZXBsYWNlQ2hpbGQoZSwgZSkKKyAgICAgICAgc2VsZi5jb25maXJtKGUucGFyZW50Tm9kZSBpcyBlbGVtLCAiQWZ0ZXIgcmVwbGFjZUNoaWxkKCkiKQorCisgICAgZGVmIHRlc3RSZXBsYWNlV2hvbGVUZXh0KHNlbGYpOgorICAgICAgICBkZWYgc2V0dXAoKToKKyAgICAgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jPmE8ZS8+ZDwvZG9jPiIpCisgICAgICAgICAgICBlbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICAgICAgdGV4dDEgPSBlbGVtLmZpcnN0Q2hpbGQKKyAgICAgICAgICAgIHRleHQyID0gZWxlbS5sYXN0Q2hpbGQKKyAgICAgICAgICAgIHNwbGl0dGVyID0gdGV4dDEubmV4dFNpYmxpbmcKKyAgICAgICAgICAgIGVsZW0uaW5zZXJ0QmVmb3JlKGRvYy5jcmVhdGVUZXh0Tm9kZSgiYiIpLCBzcGxpdHRlcikKKyAgICAgICAgICAgIGVsZW0uaW5zZXJ0QmVmb3JlKGRvYy5jcmVhdGVDREFUQVNlY3Rpb24oImMiKSwgdGV4dDEpCisgICAgICAgICAgICByZXR1cm4gZG9jLCBlbGVtLCB0ZXh0MSwgc3BsaXR0ZXIsIHRleHQyCisKKyAgICAgICAgZG9jLCBlbGVtLCB0ZXh0MSwgc3BsaXR0ZXIsIHRleHQyID0gc2V0dXAoKQorICAgICAgICB0ZXh0ID0gdGV4dDEucmVwbGFjZVdob2xlVGV4dCgibmV3IGNvbnRlbnQiKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQsICJuZXcgY29udGVudCIpCisgICAgICAgIHNlbGYuY2hlY2tXaG9sZVRleHQodGV4dDIsICJkIikKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihlbGVtLmNoaWxkTm9kZXMpID09IDMpCisKKyAgICAgICAgZG9jLCBlbGVtLCB0ZXh0MSwgc3BsaXR0ZXIsIHRleHQyID0gc2V0dXAoKQorICAgICAgICB0ZXh0ID0gdGV4dDIucmVwbGFjZVdob2xlVGV4dCgibmV3IGNvbnRlbnQiKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQsICJuZXcgY29udGVudCIpCisgICAgICAgIHNlbGYuY2hlY2tXaG9sZVRleHQodGV4dDEsICJjYWIiKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGVsZW0uY2hpbGROb2RlcykgPT0gNSkKKworICAgICAgICBkb2MsIGVsZW0sIHRleHQxLCBzcGxpdHRlciwgdGV4dDIgPSBzZXR1cCgpCisgICAgICAgIHRleHQgPSB0ZXh0MS5yZXBsYWNlV2hvbGVUZXh0KCIiKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQyLCAiZCIpCisgICAgICAgIHNlbGYuY29uZmlybSh0ZXh0IGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgbGVuKGVsZW0uY2hpbGROb2RlcykgPT0gMikKKworICAgIGRlZiB0ZXN0U2NoZW1hVHlwZShzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoCisgICAgICAgICAgICAiPCFET0NUWVBFIGRvYyBbXG4iCisgICAgICAgICAgICAiICA8IUVOVElUWSBlMSBTWVNURU0gJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9lMSc+XG4iCisgICAgICAgICAgICAiICA8IUVOVElUWSBlMiBTWVNURU0gJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9lMic+XG4iCisgICAgICAgICAgICAiICA8IUFUVExJU1QgZG9jIGlkICAgSUQgICAgICAgI0lNUExJRUQgXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgIHJlZiAgSURSRUYgICAgI0lNUExJRUQgXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgIHJlZnMgSURSRUZTICAgI0lNUExJRUQgXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgIGVudW0gKGF8YikgICAgI0lNUExJRUQgXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgIGVudCAgRU5USVRZICAgI0lNUExJRUQgXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgIGVudHMgRU5USVRJRVMgI0lNUExJRUQgXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgIG5tICAgTk1UT0tFTiAgI0lNUExJRUQgXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgIG5tcyAgTk1UT0tFTlMgI0lNUExJRUQgXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgIHRleHQgQ0RBVEEgICAgI0lNUExJRUQgXG4iCisgICAgICAgICAgICAiICAgID5cbiIKKyAgICAgICAgICAgICJdPjxkb2MgaWQ9J25hbWUnIG5vdGlkPSduYW1lJyB0ZXh0PSdzcGxhdCEnIGVudW09J2InIgorICAgICAgICAgICAgIiAgICAgICByZWY9J25hbWUnIHJlZnM9J25hbWUgbmFtZScgZW50PSdlMScgZW50cz0nZTEgZTInIgorICAgICAgICAgICAgIiAgICAgICBubT0nMTIzJyBubXM9JzEyMyBhYmMnIC8+IikKKyAgICAgICAgZWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHRvIHJlbHkgb24gYW55IHNwZWNpZmljIGxvYWRlciBhdCB0aGlzIHBvaW50LCBzbworICAgICAgICAjIGp1c3QgbWFrZSBzdXJlIHdlIGNhbiBnZXQgdG8gYWxsIHRoZSBuYW1lcywgYW5kIHRoYXQgdGhlCisgICAgICAgICMgRFRELWJhc2VkIG5hbWVzcGFjZSBpcyByaWdodC4gIFRoZSBuYW1lcyBjYW4gdmFyeSBieSBsb2FkZXIKKyAgICAgICAgIyBzaW5jZSBlYWNoIHN1cHBvcnRzIGEgZGlmZmVyZW50IGxldmVsIG9mIERURCBpbmZvcm1hdGlvbi4KKyAgICAgICAgdCA9IGVsZW0uc2NoZW1hVHlwZQorICAgICAgICBzZWxmLmNvbmZpcm0odC5uYW1lIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgdC5uYW1lc3BhY2UgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UpCisgICAgICAgIG5hbWVzID0gImlkIG5vdGlkIHRleHQgZW51bSByZWYgcmVmcyBlbnQgZW50cyBubSBubXMiLnNwbGl0KCkKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBhID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpCisgICAgICAgICAgICB0ID0gYS5zY2hlbWFUeXBlCisgICAgICAgICAgICBzZWxmLmNvbmZpcm0oaGFzYXR0cih0LCAibmFtZSIpCisgICAgICAgICAgICAgICAgICAgIGFuZCB0Lm5hbWVzcGFjZSA9PSB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSkKKworICAgIGRlZiB0ZXN0U2V0SWRBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jIGExPSd2JyBhMj0ndycvPiIpCisgICAgICAgIGUgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIGExID0gZS5nZXRBdHRyaWJ1dGVOb2RlKCJhMSIpCisgICAgICAgIGEyID0gZS5nZXRBdHRyaWJ1dGVOb2RlKCJhMiIpCisgICAgICAgIHNlbGYuY29uZmlybShkb2MuZ2V0RWxlbWVudEJ5SWQoInYiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIG5vdCBhMS5pc0lkCisgICAgICAgICAgICAgICAgYW5kIG5vdCBhMi5pc0lkKQorICAgICAgICBlLnNldElkQXR0cmlidXRlKCJhMSIpCisgICAgICAgIHNlbGYuY29uZmlybShlLmlzU2FtZU5vZGUoZG9jLmdldEVsZW1lbnRCeUlkKCJ2IikpCisgICAgICAgICAgICAgICAgYW5kIGExLmlzSWQKKyAgICAgICAgICAgICAgICBhbmQgbm90IGEyLmlzSWQpCisgICAgICAgIGUuc2V0SWRBdHRyaWJ1dGUoImEyIikKKyAgICAgICAgc2VsZi5jb25maXJtKGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInYiKSkKKyAgICAgICAgICAgICAgICBhbmQgZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidyIpKQorICAgICAgICAgICAgICAgIGFuZCBhMS5pc0lkCisgICAgICAgICAgICAgICAgYW5kIGEyLmlzSWQpCisgICAgICAgICMgcmVwbGFjZSB0aGUgYTEgbm9kZTsgdGhlIG5ldyBub2RlIHNob3VsZCAqbm90KiBiZSBhbiBJRAorICAgICAgICBhMyA9IGRvYy5jcmVhdGVBdHRyaWJ1dGUoImExIikKKyAgICAgICAgYTMudmFsdWUgPSAidiIKKyAgICAgICAgZS5zZXRBdHRyaWJ1dGVOb2RlKGEzKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jLmdldEVsZW1lbnRCeUlkKCJ2IikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlLmlzU2FtZU5vZGUoZG9jLmdldEVsZW1lbnRCeUlkKCJ3IikpCisgICAgICAgICAgICAgICAgYW5kIG5vdCBhMS5pc0lkCisgICAgICAgICAgICAgICAgYW5kIGEyLmlzSWQKKyAgICAgICAgICAgICAgICBhbmQgbm90IGEzLmlzSWQpCisgICAgICAgICMgcmVuYW1pbmcgYW4gYXR0cmlidXRlIHNob3VsZCBub3QgYWZmZWN0IGl0cyBJRC1uZXNzOgorICAgICAgICBkb2MucmVuYW1lTm9kZShhMiwgeG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UsICJhbiIpCisgICAgICAgIHNlbGYuY29uZmlybShlLmlzU2FtZU5vZGUoZG9jLmdldEVsZW1lbnRCeUlkKCJ3IikpCisgICAgICAgICAgICAgICAgYW5kIGEyLmlzSWQpCisKKyAgICBkZWYgdGVzdFNldElkQXR0cmlidXRlTlMoc2VsZik6CisgICAgICAgIE5TMSA9ICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMxIgorICAgICAgICBOUzIgPSAiaHR0cDovL3htbC5weXRob24ub3JnL25zMiIKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgeG1sbnM6bnMxPSciICsgTlMxICsgIiciCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgeG1sbnM6bnMyPSciICsgTlMyICsgIiciCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgbnMxOmExPSd2JyBuczI6YTI9J3cnLz4iKQorICAgICAgICBlID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICBhMSA9IGUuZ2V0QXR0cmlidXRlTm9kZU5TKE5TMSwgImExIikKKyAgICAgICAgYTIgPSBlLmdldEF0dHJpYnV0ZU5vZGVOUyhOUzIsICJhMiIpCisgICAgICAgIHNlbGYuY29uZmlybShkb2MuZ2V0RWxlbWVudEJ5SWQoInYiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIG5vdCBhMS5pc0lkCisgICAgICAgICAgICAgICAgYW5kIG5vdCBhMi5pc0lkKQorICAgICAgICBlLnNldElkQXR0cmlidXRlTlMoTlMxLCAiYTEiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidiIpKQorICAgICAgICAgICAgICAgIGFuZCBhMS5pc0lkCisgICAgICAgICAgICAgICAgYW5kIG5vdCBhMi5pc0lkKQorICAgICAgICBlLnNldElkQXR0cmlidXRlTlMoTlMyLCAiYTIiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidiIpKQorICAgICAgICAgICAgICAgIGFuZCBlLmlzU2FtZU5vZGUoZG9jLmdldEVsZW1lbnRCeUlkKCJ3IikpCisgICAgICAgICAgICAgICAgYW5kIGExLmlzSWQKKyAgICAgICAgICAgICAgICBhbmQgYTIuaXNJZCkKKyAgICAgICAgIyByZXBsYWNlIHRoZSBhMSBub2RlOyB0aGUgbmV3IG5vZGUgc2hvdWxkICpub3QqIGJlIGFuIElECisgICAgICAgIGEzID0gZG9jLmNyZWF0ZUF0dHJpYnV0ZU5TKE5TMSwgImExIikKKyAgICAgICAgYTMudmFsdWUgPSAidiIKKyAgICAgICAgZS5zZXRBdHRyaWJ1dGVOb2RlKGEzKQorICAgICAgICBzZWxmLmNvbmZpcm0oZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidyIpKSkKKyAgICAgICAgc2VsZi5jb25maXJtKG5vdCBhMS5pc0lkKQorICAgICAgICBzZWxmLmNvbmZpcm0oYTIuaXNJZCkKKyAgICAgICAgc2VsZi5jb25maXJtKG5vdCBhMy5pc0lkKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jLmdldEVsZW1lbnRCeUlkKCJ2IikgaXMgTm9uZSkKKyAgICAgICAgIyByZW5hbWluZyBhbiBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBhZmZlY3QgaXRzIElELW5lc3M6CisgICAgICAgIGRvYy5yZW5hbWVOb2RlKGEyLCB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSwgImFuIikKKyAgICAgICAgc2VsZi5jb25maXJtKGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInciKSkKKyAgICAgICAgICAgICAgICBhbmQgYTIuaXNJZCkKKworICAgIGRlZiB0ZXN0U2V0SWRBdHRyaWJ1dGVOb2RlKHNlbGYpOgorICAgICAgICBOUzEgPSAiaHR0cDovL3htbC5weXRob24ub3JnL25zMSIKKyAgICAgICAgTlMyID0gImh0dHA6Ly94bWwucHl0aG9uLm9yZy9uczIiCisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIHhtbG5zOm5zMT0nIiArIE5TMSArICInIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIHhtbG5zOm5zMj0nIiArIE5TMiArICInIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIG5zMTphMT0ndicgbnMyOmEyPSd3Jy8+IikKKyAgICAgICAgZSA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgYTEgPSBlLmdldEF0dHJpYnV0ZU5vZGVOUyhOUzEsICJhMSIpCisgICAgICAgIGEyID0gZS5nZXRBdHRyaWJ1dGVOb2RlTlMoTlMyLCAiYTIiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jLmdldEVsZW1lbnRCeUlkKCJ2IikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBub3QgYTEuaXNJZAorICAgICAgICAgICAgICAgIGFuZCBub3QgYTIuaXNJZCkKKyAgICAgICAgZS5zZXRJZEF0dHJpYnV0ZU5vZGUoYTEpCisgICAgICAgIHNlbGYuY29uZmlybShlLmlzU2FtZU5vZGUoZG9jLmdldEVsZW1lbnRCeUlkKCJ2IikpCisgICAgICAgICAgICAgICAgYW5kIGExLmlzSWQKKyAgICAgICAgICAgICAgICBhbmQgbm90IGEyLmlzSWQpCisgICAgICAgIGUuc2V0SWRBdHRyaWJ1dGVOb2RlKGEyKQorICAgICAgICBzZWxmLmNvbmZpcm0oZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidiIpKQorICAgICAgICAgICAgICAgIGFuZCBlLmlzU2FtZU5vZGUoZG9jLmdldEVsZW1lbnRCeUlkKCJ3IikpCisgICAgICAgICAgICAgICAgYW5kIGExLmlzSWQKKyAgICAgICAgICAgICAgICBhbmQgYTIuaXNJZCkKKyAgICAgICAgIyByZXBsYWNlIHRoZSBhMSBub2RlOyB0aGUgbmV3IG5vZGUgc2hvdWxkICpub3QqIGJlIGFuIElECisgICAgICAgIGEzID0gZG9jLmNyZWF0ZUF0dHJpYnV0ZU5TKE5TMSwgImExIikKKyAgICAgICAgYTMudmFsdWUgPSAidiIKKyAgICAgICAgZS5zZXRBdHRyaWJ1dGVOb2RlKGEzKQorICAgICAgICBzZWxmLmNvbmZpcm0oZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidyIpKSkKKyAgICAgICAgc2VsZi5jb25maXJtKG5vdCBhMS5pc0lkKQorICAgICAgICBzZWxmLmNvbmZpcm0oYTIuaXNJZCkKKyAgICAgICAgc2VsZi5jb25maXJtKG5vdCBhMy5pc0lkKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jLmdldEVsZW1lbnRCeUlkKCJ2IikgaXMgTm9uZSkKKyAgICAgICAgIyByZW5hbWluZyBhbiBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBhZmZlY3QgaXRzIElELW5lc3M6CisgICAgICAgIGRvYy5yZW5hbWVOb2RlKGEyLCB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSwgImFuIikKKyAgICAgICAgc2VsZi5jb25maXJtKGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInciKSkKKyAgICAgICAgICAgICAgICBhbmQgYTIuaXNJZCkKKworICAgIGRlZiB0ZXN0UGlja2xlZERvY3VtZW50KHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXMtYXNjaWknPz5cbiIKKyAgICAgICAgICAgICAgICAgICAgIjwhRE9DVFlQRSBkb2MgUFVCTElDICdodHRwOi8veG1sLnB5dGhvbi5vcmcvcHVibGljJyIKKyAgICAgICAgICAgICAgICAgICAgIiAnaHR0cDovL3htbC5weXRob24ub3JnL3N5c3RlbScgW1xuIgorICAgICAgICAgICAgICAgICAgICAiICA8IUVMRU1FTlQgZSBFTVBUWT5cbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgPCFFTlRJVFkgZW50IFNZU1RFTSAnaHR0cDovL3htbC5weXRob24ub3JnL2VudGl0eSc+XG4iCisgICAgICAgICAgICAgICAgICAgICJdPjxkb2MgYXR0cj0ndmFsdWUnPiB0ZXh0XG4iCisgICAgICAgICAgICAgICAgICAgICI8P3BpIHNhbXBsZT8+IDwhLS0gY29tbWVudCAtLT4gPGUvPiA8L2RvYz4iKQorICAgICAgICBzID0gcGlja2xlLmR1bXBzKGRvYykKKyAgICAgICAgZG9jMiA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICBzdGFjayA9IFsoZG9jLCBkb2MyKV0KKyAgICAgICAgd2hpbGUgc3RhY2s6CisgICAgICAgICAgICBuMSwgbjIgPSBzdGFjay5wb3AoKQorICAgICAgICAgICAgc2VsZi5jb25maXJtKG4xLm5vZGVUeXBlID09IG4yLm5vZGVUeXBlCisgICAgICAgICAgICAgICAgICAgIGFuZCBsZW4objEuY2hpbGROb2RlcykgPT0gbGVuKG4yLmNoaWxkTm9kZXMpCisgICAgICAgICAgICAgICAgICAgIGFuZCBuMS5ub2RlTmFtZSA9PSBuMi5ub2RlTmFtZQorICAgICAgICAgICAgICAgICAgICBhbmQgbm90IG4xLmlzU2FtZU5vZGUobjIpCisgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgbjIuaXNTYW1lTm9kZShuMSkpCisgICAgICAgICAgICBpZiBuMS5ub2RlVHlwZSA9PSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgICAgICAgICBsZW4objEuZW50aXRpZXMpCisgICAgICAgICAgICAgICAgbGVuKG4yLmVudGl0aWVzKQorICAgICAgICAgICAgICAgIGxlbihuMS5ub3RhdGlvbnMpCisgICAgICAgICAgICAgICAgbGVuKG4yLm5vdGF0aW9ucykKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpcm0obGVuKG4xLmVudGl0aWVzKSA9PSBsZW4objIuZW50aXRpZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGVuKG4xLm5vdGF0aW9ucykgPT0gbGVuKG4yLm5vdGF0aW9ucykpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKG4xLm5vdGF0aW9ucykpOgorICAgICAgICAgICAgICAgICAgICAjIFhYWCB0aGlzIGxvb3AgYm9keSBkb2Vzbid0IHNlZW0gdG8gYmUgZXhlY3V0ZWQ/CisgICAgICAgICAgICAgICAgICAgIG5vMSA9IG4xLm5vdGF0aW9ucy5pdGVtKGkpCisgICAgICAgICAgICAgICAgICAgIG5vMiA9IG4xLm5vdGF0aW9ucy5pdGVtKGkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlybShubzEubmFtZSA9PSBubzIubmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBubzEucHVibGljSWQgPT0gbm8yLnB1YmxpY0lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vMS5zeXN0ZW1JZCA9PSBubzIuc3lzdGVtSWQpCisgICAgICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZCgobm8xLCBubzIpKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihuMS5lbnRpdGllcykpOgorICAgICAgICAgICAgICAgICAgICBlMSA9IG4xLmVudGl0aWVzLml0ZW0oaSkKKyAgICAgICAgICAgICAgICAgICAgZTIgPSBuMi5lbnRpdGllcy5pdGVtKGkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlybShlMS5ub3RhdGlvbk5hbWUgPT0gZTIubm90YXRpb25OYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGUxLnB1YmxpY0lkID09IGUyLnB1YmxpY0lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGUxLnN5c3RlbUlkID09IGUyLnN5c3RlbUlkKQorICAgICAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoKGUxLCBlMikpCisgICAgICAgICAgICBpZiBuMS5ub2RlVHlwZSAhPSBOb2RlLkRPQ1VNRU5UX05PREU6CisgICAgICAgICAgICAgICAgc2VsZi5jb25maXJtKG4xLm93bmVyRG9jdW1lbnQuaXNTYW1lTm9kZShkb2MpCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbjIub3duZXJEb2N1bWVudC5pc1NhbWVOb2RlKGRvYzIpKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKG4xLmNoaWxkTm9kZXMpKToKKyAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoKG4xLmNoaWxkTm9kZXNbaV0sIG4yLmNoaWxkTm9kZXNbaV0pKQorCisgICAgZGVmIHRlc3RTZXJpYWxpemVDb21tZW50Tm9kZVdpdGhEb3VibGVIeXBoZW4oc2VsZik6CisgICAgICAgIGRvYyA9IGNyZWF0ZV9kb2Nfd2l0aG91dF9kb2N0eXBlKCkKKyAgICAgICAgZG9jLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVDb21tZW50KCJmb28tLWJhciIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkb2MudG94bWwpCisKKyAgICBkZWYgdGVzdEVtcHR5WE1MTlNWYWx1ZShzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxlbGVtZW50IHhtbG5zPScnPlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiPGZvby8+XG48L2VsZW1lbnQ+IikKKyAgICAgICAgZG9jMiA9IHBhcnNlU3RyaW5nKGRvYy50b3htbCgpKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jMi5uYW1lc3BhY2VVUkkgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChNaW5pZG9tVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbW1hcC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21tYXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0YjIwYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21tYXAucHkKQEAgLTAsMCArMSw3MjQgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgdW5saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzLCBfMkcsIF80RykKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zLCByZSwgaXRlcnRvb2xzLCBzb2NrZXQsIHN5cworCittbWFwID0gaW1wb3J0X21vZHVsZSgnbW1hcCcpCisKK1BBR0VTSVpFID0gbW1hcC5QQUdFU0laRQorCitjbGFzcyBNbWFwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1tYXAgbW9kdWxlIG9uIFVuaXggc3lzdGVtcyBhbmQgV2luZG93cworCisgICAgICAgICMgQ3JlYXRlIGEgZmlsZSB0byBiZSBtbWFwJ2VkLgorICAgICAgICBmID0gb3BlbihURVNURk4sICd3KycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgV3JpdGUgMiBwYWdlcyB3b3J0aCBvZiBkYXRhIHRvIHRoZSBmaWxlCisgICAgICAgICAgICBmLndyaXRlKCdcMCcqIFBBR0VTSVpFKQorICAgICAgICAgICAgZi53cml0ZSgnZm9vJykKKyAgICAgICAgICAgIGYud3JpdGUoJ1wwJyogKFBBR0VTSVpFLTMpICkKKyAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAyICogUEFHRVNJWkUpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgIyBTaW1wbGUgc2FuaXR5IGNoZWNrcworCisgICAgICAgICAgICB0cCA9IHN0cih0eXBlKG0pKSAgIyBTRiBidWcgMTI4NzEzOiAgc2VnZmF1bHRlZCBvbiBMaW51eAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoJ2ZvbycpLCBQQUdFU0laRSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obSksIDIqUEFHRVNJWkUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVswXSwgJ1wwJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVswOjNdLCAnXDBcMFwwJykKKworICAgICAgICAgICAgIyBTaG91bGRuJ3QgY3Jhc2ggb24gYm91bmRhcnkgKElzc3VlICM1MjkyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbS5fX2dldGl0ZW1fXywgbGVuKG0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbS5fX3NldGl0ZW1fXywgbGVuKG0pLCAnXDAnKQorCisgICAgICAgICAgICAjIE1vZGlmeSB0aGUgZmlsZSdzIGNvbnRlbnQKKyAgICAgICAgICAgIG1bMF0gPSAnMycKKyAgICAgICAgICAgIG1bUEFHRVNJWkUgKzM6IFBBR0VTSVpFICszKzNdID0gJ2JhcicKKworICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBtb2RpZmljYXRpb24gd29ya2VkCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMF0sICczJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVswOjNdLCAnM1wwXDAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW1BBR0VTSVpFLTEgOiBQQUdFU0laRSArIDddLCAnXDBmb29iYXJcMCcpCisKKyAgICAgICAgICAgIG0uZmx1c2goKQorCisgICAgICAgICAgICAjIFRlc3QgZG9pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggaW4gYW4gbW1hcCdlZCBmaWxlCisgICAgICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgnW0EtWmEtel0rJywgbSkKKyAgICAgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdyZWdleCBtYXRjaCBvbiBtbWFwIGZhaWxlZCEnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGFydCwgZW5kID0gbWF0Y2guc3BhbigwKQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGVuZCAtIHN0YXJ0CisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LCBQQUdFU0laRSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuZCwgUEFHRVNJWkUgKyA2KQorCisgICAgICAgICAgICAjIHRlc3Qgc2Vla2luZyBhcm91bmQgKHRyeSB0byBvdmVyZmxvdyB0aGUgc2VlayBpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgICAgIG0uc2VlaygwLDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCAwKQorICAgICAgICAgICAgbS5zZWVrKDQyLDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCA0MikKKyAgICAgICAgICAgIG0uc2VlaygwLDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCBsZW4obSkpCisKKyAgICAgICAgICAgICMgVHJ5IHRvIHNlZWsgdG8gbmVnYXRpdmUgcG9zaXRpb24uLi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0uc2VlaywgLTEpCisKKyAgICAgICAgICAgICMgVHJ5IHRvIHNlZWsgYmV5b25kIGVuZCBvZiBtbWFwLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLnNlZWssIDEsIDIpCisKKyAgICAgICAgICAgICMgVHJ5IHRvIHNlZWsgdG8gbmVnYXRpdmUgcG9zaXRpb24uLi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0uc2VlaywgLWxlbihtKS0xLCAyKQorCisgICAgICAgICAgICAjIFRyeSByZXNpemluZyBtYXAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtLnJlc2l6ZSg1MTIpCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXJyb3I6CisgICAgICAgICAgICAgICAgIyByZXNpemUoKSBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgIyBObyBtZXNzYWdlcyBhcmUgcHJpbnRlZCwgc2luY2UgdGhlIG91dHB1dCBvZiB0aGlzIHRlc3Qgc3VpdGUKKyAgICAgICAgICAgICAgICAjIHdvdWxkIHRoZW4gYmUgZGlmZmVyZW50IGFjcm9zcyBwbGF0Zm9ybXMuCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHJlc2l6ZSgpIGlzIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCA1MTIpCisgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHdlIGNhbiBubyBsb25nZXIgc2VlayBiZXlvbmQgdGhlIG5ldyBzaXplLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0uc2VlaywgNTEzLCAwKQorCisgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSB1bmRlcmx5aW5nIGZpbGUgaXMgdHJ1bmNhdGVkIHRvbworICAgICAgICAgICAgICAgICMgKGJ1ZyAjNzI4NTE1KQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA1MTIpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnNpemUoKSwgNTEyKQorCisgICAgICAgICAgICBtLmNsb3NlKCkKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfYWNjZXNzX3BhcmFtZXRlcihzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciAiYWNjZXNzIiBrZXl3b3JkIHBhcmFtZXRlcgorICAgICAgICBtYXBzaXplID0gMTAKKyAgICAgICAgb3BlbihURVNURk4sICJ3YiIpLndyaXRlKCJhIiptYXBzaXplKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyYiIpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgYWNjZXNzPW1tYXAuQUNDRVNTX1JFQUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgJ2EnKm1hcHNpemUsICJSZWFkb25seSBtZW1vcnkgbWFwIGRhdGEgaW5jb3JyZWN0LiIpCisKKyAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgc2xpY2UgYXNzaWduZWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbVs6XSA9ICdiJyptYXBzaXplCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gd3JpdGUgdG8gcmVhZG9ubHkgbWVtb3J5IG1hcCIpCisKKyAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgaXRlbSBhc3NpZ25lZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBtWzBdID0gJ2InCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gd3JpdGUgdG8gcmVhZG9ubHkgbWVtb3J5IG1hcCIpCisKKyAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgd3JpdGUoKSB0bworICAgICAgICB0cnk6CisgICAgICAgICAgICBtLnNlZWsoMCwwKQorICAgICAgICAgICAgbS53cml0ZSgnYWJjJykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQWJsZSB0byB3cml0ZSB0byByZWFkb25seSBtZW1vcnkgbWFwIikKKworICAgICAgICAjIEVuc3VyaW5nIHRoYXQgcmVhZG9ubHkgbW1hcCBjYW4ndCBiZSB3cml0ZV9ieXRlKCkgdG8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbS5zZWVrKDAsMCkKKyAgICAgICAgICAgIG0ud3JpdGVfYnl0ZSgnZCcpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gd3JpdGUgdG8gcmVhZG9ubHkgbWVtb3J5IG1hcCIpCisKKyAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgcmVzaXplZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBtLnJlc2l6ZSgyKm1hcHNpemUpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FcnJvcjogICAjIHJlc2l6ZSBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gcmVzaXplIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZGVsIG0sIGYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVuKFRFU1RGTiwgInJiIikucmVhZCgpLCAnYScqbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICJSZWFkb25seSBtZW1vcnkgbWFwIGRhdGEgZmlsZSB3YXMgbW9kaWZpZWQiKQorCisgICAgICAgICMgT3BlbmluZyBtbWFwIHdpdGggc2l6ZSB0b28gYmlnCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplKzEpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgIyB3ZSBkbyBub3QgZXhwZWN0IGEgVmFsdWVFcnJvciBvbiBXaW5kb3dzCisgICAgICAgICAgICAjIENBVVRJT046ICBUaGlzIGFsc28gY2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBvbiBkaXNrLCBhbmQKKyAgICAgICAgICAgICMgbGF0ZXIgdGVzdHMgYXNzdW1lIHRoYXQgdGhlIGxlbmd0aCBoYXNuJ3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8KKyAgICAgICAgICAgICMgcmVwYWlyIHRoYXQuCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJPcGVuaW5nIG1tYXAgd2l0aCBzaXplKzEgc2hvdWxkIHdvcmsgb24gV2luZG93cy4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB3ZSBleHBlY3QgYSBWYWx1ZUVycm9yIG9uIFVuaXgsIGJ1dCBub3Qgb24gV2luZG93cworICAgICAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk9wZW5pbmcgbW1hcCB3aXRoIHNpemUrMSBzaG91bGQgcmFpc2UgVmFsdWVFcnJvci4iKQorICAgICAgICAgICAgbS5jbG9zZSgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAjIFJlcGFpciBkYW1hZ2UgZnJvbSB0aGUgcmVzaXppbmcgdGVzdC4KKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3IrYicpCisgICAgICAgICAgICBmLnRydW5jYXRlKG1hcHNpemUpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIE9wZW5pbmcgbW1hcCB3aXRoIGFjY2Vzcz1BQ0NFU1NfV1JJVEUKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKKyAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfV1JJVEUpCisgICAgICAgICMgTW9kaWZ5aW5nIHdyaXRlLXRocm91Z2ggbWVtb3J5IG1hcAorICAgICAgICBtWzpdID0gJ2MnKm1hcHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCAnYycqbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICJXcml0ZS10aHJvdWdoIG1lbW9yeSBtYXAgbWVtb3J5IG5vdCB1cGRhdGVkIHByb3Blcmx5LiIpCisgICAgICAgIG0uZmx1c2goKQorICAgICAgICBtLmNsb3NlKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgc3R1ZmYgPSBmLnJlYWQoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHVmZiwgJ2MnKm1hcHNpemUsCisgICAgICAgICAgICAgICAiV3JpdGUtdGhyb3VnaCBtZW1vcnkgbWFwIGRhdGEgZmlsZSBub3QgdXBkYXRlZCBwcm9wZXJseS4iKQorCisgICAgICAgICMgT3BlbmluZyBtbWFwIHdpdGggYWNjZXNzPUFDQ0VTU19DT1BZCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIrYiIpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgYWNjZXNzPW1tYXAuQUNDRVNTX0NPUFkpCisgICAgICAgICMgTW9kaWZ5aW5nIGNvcHktb24td3JpdGUgbWVtb3J5IG1hcAorICAgICAgICBtWzpdID0gJ2QnKm1hcHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCAnZCcgKiBtYXBzaXplLAorICAgICAgICAgICAgICAgIkNvcHktb24td3JpdGUgbWVtb3J5IG1hcCBkYXRhIG5vdCB3cml0dGVuIGNvcnJlY3RseS4iKQorICAgICAgICBtLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVuKFRFU1RGTiwgInJiIikucmVhZCgpLCAnYycqbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICJDb3B5LW9uLXdyaXRlIHRlc3QgZGF0YSBmaWxlIHNob3VsZCBub3QgYmUgbW9kaWZpZWQuIikKKyAgICAgICAgIyBFbnN1cmluZyBjb3B5LW9uLXdyaXRlIG1hcHMgY2Fubm90IGJlIHJlc2l6ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtLnJlc2l6ZSwgMiptYXBzaXplKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZGVsIG0sIGYKKworICAgICAgICAjIEVuc3VyaW5nIGludmFsaWQgYWNjZXNzIHBhcmFtZXRlciByYWlzZXMgZXhjZXB0aW9uCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIrYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1tYXAubW1hcCwgZi5maWxlbm8oKSwgbWFwc2l6ZSwgYWNjZXNzPTQpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgICAgICMgVHJ5IGluY29tcGF0aWJsZSBmbGFncywgcHJvdCBhbmQgYWNjZXNzIHBhcmFtZXRlcnMuCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW1hcC5tbWFwLCBmLmZpbGVubygpLCBtYXBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9bW1hcC5NQVBfUFJJVkFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Q9bW1hcC5QUk9UX1JFQUQsIGFjY2Vzcz1tbWFwLkFDQ0VTU19XUklURSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAjIFRyeSB3cml0aW5nIHdpdGggUFJPVF9FWEVDIGFuZCB3aXRob3V0IFBST1RfV1JJVEUKKyAgICAgICAgICAgIHByb3QgPSBtbWFwLlBST1RfUkVBRCB8IGdldGF0dHIobW1hcCwgJ1BST1RfRVhFQycsIDApCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicitiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG1hcHNpemUsIHByb3Q9cHJvdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG0ud3JpdGUsIGIiYWJjZGVmIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG0ud3JpdGVfYnl0ZSwgMCkKKyAgICAgICAgICAgICAgICBtLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2JhZF9maWxlX2Rlc2Moc2VsZik6CisgICAgICAgICMgVHJ5IG9wZW5pbmcgYSBiYWQgZmlsZSBkZXNjcmlwdG9yLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1tYXAuZXJyb3IsIG1tYXAubW1hcCwgLTIsIDQwOTYpCisKKyAgICBkZWYgdGVzdF90b3VnaGVyX2ZpbmQoc2VsZik6CisgICAgICAgICMgRG8gYSB0b3VnaGVyIC5maW5kKCkgdGVzdC4gIFNGIGJ1ZyA1MTU5NDMgcG9pbnRlZCBvdXQgdGhhdCwgaW4gMi4yLAorICAgICAgICAjIHNlYXJjaGluZyBmb3IgZGF0YSB3aXRoIGVtYmVkZGVkIFwwIGJ5dGVzIGRpZG4ndCB3b3JrLgorICAgICAgICBmID0gb3BlbihURVNURk4sICd3KycpCisKKyAgICAgICAgZGF0YSA9ICdhYWJhYWNceDAwZGVlZlx4MDBceDAwYWFceDAwJworICAgICAgICBuID0gbGVuKGRhdGEpCisgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgZi5mbHVzaCgpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZm9yIHN0YXJ0IGluIHJhbmdlKG4rMSk6CisgICAgICAgICAgICBmb3IgZmluaXNoIGluIHJhbmdlKHN0YXJ0LCBuKzEpOgorICAgICAgICAgICAgICAgIHNsaWNlID0gZGF0YVtzdGFydCA6IGZpbmlzaF0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZmluZChzbGljZSksIGRhdGEuZmluZChzbGljZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoc2xpY2UgKyAneCcpLCAtMSkKKyAgICAgICAgbS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9maW5kX2VuZChzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoZSBuZXcgJ2VuZCcgcGFyYW1ldGVyIHdvcmtzIGFzIGV4cGVjdGVkCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3crJykKKyAgICAgICAgZGF0YSA9ICdvbmUgdHdvIG9uZXMnCisgICAgICAgIG4gPSBsZW4oZGF0YSkKKyAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBuKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZmluZCgnb25lJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKCdvbmVzJyksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKCdvbmUnLCAwLCAtMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKCdvbmUnLCAxKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoJ29uZScsIDEsIC0xKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoJ29uZScsIDEsIC0yKSwgLTEpCisKKworICAgIGRlZiB0ZXN0X3JmaW5kKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhlIG5ldyAnZW5kJyBwYXJhbWV0ZXIgd29ya3MgYXMgZXhwZWN0ZWQKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQorICAgICAgICBkYXRhID0gJ29uZSB0d28gb25lcycKKyAgICAgICAgbiA9IGxlbihkYXRhKQorICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgIGYuZmx1c2goKQorICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG4pCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZmluZCgnb25lJyksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZmluZCgnb25lICcpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmZpbmQoJ29uZScsIDAsIC0xKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJmaW5kKCdvbmUnLCAwLCAtMiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZmluZCgnb25lJywgMSwgLTEpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmZpbmQoJ29uZScsIDEsIC0yKSwgLTEpCisKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9jbG9zZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgYSBkb3VibGUgY2xvc2UgZG9lc24ndCBjcmFzaCBvbiBTb2xhcmlzIChCdWcjIDY2NTkxMykKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQorCisgICAgICAgIGYud3JpdGUoMioqMTYgKiAnYScpICMgQXJiaXRyYXJ5IGNoYXJhY3RlcgorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBmID0gb3BlbihURVNURk4pCisgICAgICAgIG1mID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDIqKjE2LCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkKKyAgICAgICAgbWYuY2xvc2UoKQorICAgICAgICBtZi5jbG9zZSgpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZW50aXJlX2ZpbGUoc2VsZik6CisgICAgICAgICMgdGVzdCBtYXBwaW5nIG9mIGVudGlyZSBmaWxlIGJ5IHBhc3NpbmcgMCBmb3IgbWFwIGxlbmd0aAorICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3RhdCIpOgorICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidysiKQorCisgICAgICAgICAgICBmLndyaXRlKDIqKjE2ICogJ20nKSAjIEFyYml0cmFyeSBjaGFyYWN0ZXIKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICJyYisiKQorICAgICAgICAgICAgbWYgPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1mKSwgMioqMTYsICJNYXAgc2l6ZSBzaG91bGQgZXF1YWwgZmlsZSBzaXplLiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1mLnJlYWQoMioqMTYpLCAyKioxNiAqICJtIikKKyAgICAgICAgICAgIG1mLmNsb3NlKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbGVuZ3RoXzBfb2Zmc2V0KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDkxNjogdGVzdCBtYXBwaW5nIG9mIHJlbWFpbmRlciBvZiBmaWxlIGJ5IHBhc3NpbmcgMCBmb3IKKyAgICAgICAgIyBtYXAgbGVuZ3RoIHdpdGggYW4gb2Zmc2V0IGRvZXNuJ3QgY2F1c2UgYSBzZWdmYXVsdC4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJzdGF0Iik6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZWVkcyBvcy5zdGF0IikKKyAgICAgICAgIyBOT1RFOiBhbGxvY2F0aW9uIGdyYW51bGFyaXR5IGlzIGN1cnJlbnRseSA2NTUzNiB1bmRlciBXaW42NCwKKyAgICAgICAgIyBhbmQgdGhlcmVmb3JlIHRoZSBtaW5pbXVtIG9mZnNldCBhbGlnbm1lbnQuCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCg2NTUzNiAqIDIpICogYidtJykgIyBBcmJpdHJhcnkgY2hhcmFjdGVyCisKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIG1mID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDAsIG9mZnNldD02NTUzNiwgYWNjZXNzPW1tYXAuQUNDRVNTX1JFQUQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbWYuX19nZXRpdGVtX18sIDgwMDAwKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9sZW5ndGhfMF9sYXJnZV9vZmZzZXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEwOTU5OiB0ZXN0IG1hcHBpbmcgb2YgYSBmaWxlIGJ5IHBhc3NpbmcgMCBmb3IKKyAgICAgICAgIyBtYXAgbGVuZ3RoIHdpdGggYSBsYXJnZSBvZmZzZXQgZG9lc24ndCBjYXVzZSBhIHNlZ2ZhdWx0LgorICAgICAgICBpZiBub3QgaGFzYXR0cihvcywgInN0YXQiKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5lZWRzIG9zLnN0YXQiKQorCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKDExNTY5OSAqIGInbScpICMgQXJiaXRyYXJ5IGNoYXJhY3RlcgorCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3K2IiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW1hcC5tbWFwLCBmLmZpbGVubygpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PTIxNDc0MTgxMTIpCisKKyAgICBkZWYgdGVzdF9tb3ZlKHNlbGYpOgorICAgICAgICAjIG1ha2UgbW92ZSB3b3JrcyBldmVyeXdoZXJlICg2NC1iaXQgZm9ybWF0IHByb2JsZW0gZWFybGllcikKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQorCisgICAgICAgIGYud3JpdGUoIkFCQ0RFYWJjZGUiKSAjIEFyYml0cmFyeSBjaGFyYWN0ZXIKKyAgICAgICAgZi5mbHVzaCgpCisKKyAgICAgICAgbWYgPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMTApCisgICAgICAgIG1mLm1vdmUoNSwgMCwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZls6XSwgIkFCQ0RFQUJDREUiLCAiTWFwIG1vdmUgc2hvdWxkIGhhdmUgZHVwbGljYXRlZCBmcm9udCA1IikKKyAgICAgICAgbWYuY2xvc2UoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIG1vcmUgZXhjZXNzaXZlIHRlc3QKKyAgICAgICAgZGF0YSA9ICIwMTIzNDU2Nzg5IgorICAgICAgICBmb3IgZGVzdCBpbiByYW5nZShsZW4oZGF0YSkpOgorICAgICAgICAgICAgZm9yIHNyYyBpbiByYW5nZShsZW4oZGF0YSkpOgorICAgICAgICAgICAgICAgIGZvciBjb3VudCBpbiByYW5nZShsZW4oZGF0YSkgLSBtYXgoZGVzdCwgc3JjKSk6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZGF0YVs6ZGVzdF0gKyBkYXRhW3NyYzpzcmMrY291bnRdICsgZGF0YVtkZXN0K2NvdW50Ol0KKyAgICAgICAgICAgICAgICAgICAgbSA9IG1tYXAubW1hcCgtMSwgbGVuKGRhdGEpKQorICAgICAgICAgICAgICAgICAgICBtWzpdID0gZGF0YQorICAgICAgICAgICAgICAgICAgICBtLm1vdmUoZGVzdCwgc3JjLCBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgbS5jbG9zZSgpCisKKyAgICAgICAgIyBzZWdmYXVsdCB0ZXN0IChJc3N1ZSA1Mzg3KQorICAgICAgICBtID0gbW1hcC5tbWFwKC0xLCAxMDApCisgICAgICAgIG9mZnNldHMgPSBbLTEwMCwgLTEsIDAsIDEsIDEwMF0KKyAgICAgICAgZm9yIHNvdXJjZSwgZGVzdCwgc2l6ZSBpbiBpdGVydG9vbHMucHJvZHVjdChvZmZzZXRzLCBvZmZzZXRzLCBvZmZzZXRzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtLm1vdmUoc291cmNlLCBkZXN0LCBzaXplKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIG9mZnNldHMgPSBbKC0xLCAtMSwgLTEpLCAoLTEsIC0xLCAwKSwgKC0xLCAwLCAtMSksICgwLCAtMSwgLTEpLAorICAgICAgICAgICAgICAgICAgICgtMSwgMCwgMCksICgwLCAtMSwgMCksICgwLCAwLCAtMSldCisgICAgICAgIGZvciBzb3VyY2UsIGRlc3QsIHNpemUgaW4gb2Zmc2V0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ubW92ZSwgc291cmNlLCBkZXN0LCBzaXplKQorCisgICAgICAgIG0uY2xvc2UoKQorCisgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIDEpICMgc2luZ2xlIGJ5dGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAwLCAwLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIDEsIDAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ubW92ZSwgMCwgMSwgMSkKKyAgICAgICAgbS5tb3ZlKDAsIDAsIDEpCisgICAgICAgIG0ubW92ZSgwLCAwLCAwKQorCisKKyAgICBkZWYgdGVzdF9hbm9ueW1vdXMoc2VsZik6CisgICAgICAgICMgYW5vbnltb3VzIG1tYXAubW1hcCgtMSwgUEFHRSkKKyAgICAgICAgbSA9IG1tYXAubW1hcCgtMSwgUEFHRVNJWkUpCisgICAgICAgIGZvciB4IGluIHhyYW5nZShQQUdFU0laRSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1beF0sICdcMCcsICJhbm9ueW1vdXNseSBtbWFwJ2VkIGNvbnRlbnRzIHNob3VsZCBiZSB6ZXJvIikKKworICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoUEFHRVNJWkUpOgorICAgICAgICAgICAgbVt4XSA9IGNoID0gY2hyKHggJiAyNTUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1beF0sIGNoKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBleHRlbmRlZCBzbGljaW5nIGJ5IGNvbXBhcmluZyB3aXRoIGxpc3Qgc2xpY2luZy4KKyAgICAgICAgcyA9ICIiLmpvaW4oY2hyKGMpIGZvciBjIGluIHJldmVyc2VkKHJhbmdlKDI1NikpKQorICAgICAgICBtID0gbW1hcC5tbWFwKC0xLCBsZW4ocykpCisgICAgICAgIG1bOl0gPSBzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgcykKKyAgICAgICAgaW5kaWNlcyA9ICgwLCBOb25lLCAxLCAzLCAxOSwgMzAwLCAtMSwgLTIsIC0zMSwgLTMwMCkKKyAgICAgICAgZm9yIHN0YXJ0IGluIGluZGljZXM6CisgICAgICAgICAgICBmb3Igc3RvcCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgICAgICMgU2tpcCBzdGVwIDAgKGludmFsaWQpCisgICAgICAgICAgICAgICAgZm9yIHN0ZXAgaW4gaW5kaWNlc1sxOl06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVtzdGFydDpzdG9wOnN0ZXBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbc3RhcnQ6c3RvcDpzdGVwXSkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGVkX3NldF9kZWxfc2xpY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBleHRlbmRlZCBzbGljaW5nIGJ5IGNvbXBhcmluZyB3aXRoIGxpc3Qgc2xpY2luZy4KKyAgICAgICAgcyA9ICIiLmpvaW4oY2hyKGMpIGZvciBjIGluIHJldmVyc2VkKHJhbmdlKDI1NikpKQorICAgICAgICBtID0gbW1hcC5tbWFwKC0xLCBsZW4ocykpCisgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDMwMCwgLTEsIC0yLCAtMzEsIC0zMDApCisgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgZm9yIHN0b3AgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAjIFNraXAgaW52YWxpZCBzdGVwIDAKKyAgICAgICAgICAgICAgICBmb3Igc3RlcCBpbiBpbmRpY2VzWzE6XToKKyAgICAgICAgICAgICAgICAgICAgbVs6XSA9IHMKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCBzKQorICAgICAgICAgICAgICAgICAgICBMID0gbGlzdChzKQorICAgICAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgc2xpY2Ugb2YgZXhhY3RseSB0aGUgcmlnaHQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAjIGJ1dCB3aXRoIGRpZmZlcmVudCBkYXRhLgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gTFtzdGFydDpzdG9wOnN0ZXBdCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAiIi5qb2luKHJldmVyc2VkKGRhdGEpKQorICAgICAgICAgICAgICAgICAgICBMW3N0YXJ0OnN0b3A6c3RlcF0gPSBkYXRhCisgICAgICAgICAgICAgICAgICAgIG1bc3RhcnQ6c3RvcDpzdGVwXSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCAiIi5qb2luKEwpKQorCisgICAgZGVmIG1ha2VfbW1hcF9maWxlIChzZWxmLCBmLCBoYWxmc2l6ZSk6CisgICAgICAgICMgV3JpdGUgMiBwYWdlcyB3b3J0aCBvZiBkYXRhIHRvIHRoZSBmaWxlCisgICAgICAgIGYud3JpdGUgKCdcMCcgKiBoYWxmc2l6ZSkKKyAgICAgICAgZi53cml0ZSAoJ2ZvbycpCisgICAgICAgIGYud3JpdGUgKCdcMCcgKiAoaGFsZnNpemUgLSAzKSkKKyAgICAgICAgZi5mbHVzaCAoKQorICAgICAgICByZXR1cm4gbW1hcC5tbWFwIChmLmZpbGVubygpLCAwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZmlsZSAoc2VsZik6CisgICAgICAgIGYgPSBvcGVuIChURVNURk4sICd3K2InKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInJiIikgYXMgZiA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkKKyAgICAgICAgICAgICAgICBtLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBub3QgaGF2ZSBiZWVuIGFibGUgdG8gbW1hcCBlbXB0eSBmaWxlIikKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm1lc3NhZ2UsICJjYW5ub3QgbW1hcCBhbiBlbXB0eSBmaWxlIikKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgZXhjZXB0aW9uOiAiICsgc3RyKGUpKQorCisgICAgZGVmIHRlc3Rfb2Zmc2V0IChzZWxmKToKKyAgICAgICAgZiA9IG9wZW4gKFRFU1RGTiwgJ3crYicpCisKKyAgICAgICAgdHJ5OiAjIHVubGluayBURVNURk4gbm8gbWF0dGVyIHdoYXQKKyAgICAgICAgICAgIGhhbGZzaXplID0gbW1hcC5BTExPQ0FUSU9OR1JBTlVMQVJJVFkKKyAgICAgICAgICAgIG0gPSBzZWxmLm1ha2VfbW1hcF9maWxlIChmLCBoYWxmc2l6ZSkKKyAgICAgICAgICAgIG0uY2xvc2UgKCkKKyAgICAgICAgICAgIGYuY2xvc2UgKCkKKworICAgICAgICAgICAgbWFwc2l6ZSA9IGhhbGZzaXplICogMgorICAgICAgICAgICAgIyBUcnkgaW52YWxpZCBvZmZzZXQKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIrYiIpCisgICAgICAgICAgICBmb3Igb2Zmc2V0IGluIFstMiwgLTEsIE5vbmVdOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplLCBvZmZzZXQ9b2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIDEpCisgICAgICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBUeXBlRXJyb3IsIE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCAwKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgICMgVHJ5IHZhbGlkIG9mZnNldCwgaG9wZWZ1bGx5IDgxOTIgd29ya3Mgb24gYWxsIE9TZXMKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIrYiIpCisgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG1hcHNpemUgLSBoYWxmc2l6ZSwgb2Zmc2V0PWhhbGZzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzA6M10sICdmb28nKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgICMgVHJ5IHJlc2l6aW5nIG1hcAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG0ucmVzaXplKDUxMikKKyAgICAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgcmVzaXplKCkgaXMgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obSksIDUxMikKKyAgICAgICAgICAgICAgICAjIENoZWNrIHRoYXQgd2UgY2FuIG5vIGxvbmdlciBzZWVrIGJleW9uZCB0aGUgbmV3IHNpemUuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5zZWVrLCA1MTMsIDApCisgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBjb250ZW50IGlzIG5vdCBjaGFuZ2VkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzA6M10sICdmb28nKQorCisgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSB1bmRlcmx5aW5nIGZpbGUgaXMgdHJ1bmNhdGVkIHRvbworICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBoYWxmc2l6ZSArIDUxMikKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uc2l6ZSgpLCBoYWxmc2l6ZSArIDUxMikKKworICAgICAgICAgICAgbS5jbG9zZSgpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgYW5vbl9tbWFwKG1tYXAubW1hcCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhrbGFzcywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW1hcC5tbWFwLl9fbmV3X18oa2xhc3MsIC0xLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGFub25fbW1hcChQQUdFU0laRSkKKworICAgIGRlZiB0ZXN0X3Byb3RfcmVhZG9ubHkoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1tYXAsICdQUk9UX1JFQUQnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBtYXBzaXplID0gMTAKKyAgICAgICAgb3BlbihURVNURk4sICJ3YiIpLndyaXRlKCJhIiptYXBzaXplKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyYiIpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgcHJvdD1tbWFwLlBST1RfUkVBRCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtLndyaXRlLCAiZm9vIikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MobW1hcC5lcnJvciwgRW52aXJvbm1lbnRFcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm1tYXAuZXJyb3IiLCBzdHIobW1hcC5lcnJvcikpCisKKyAgICBkZWYgdGVzdF9pb19tZXRob2RzKHNlbGYpOgorICAgICAgICBkYXRhID0gIjAxMjM0NTY3ODkiCisgICAgICAgIG9wZW4oVEVTVEZOLCAid2IiKS53cml0ZSgieCIqbGVuKGRhdGEpKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQorICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIGxlbihkYXRhKSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICMgVGVzdCB3cml0ZV9ieXRlKCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihkYXRhKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCBpKQorICAgICAgICAgICAgbS53cml0ZV9ieXRlKGRhdGFbaV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCBpKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ud3JpdGVfYnl0ZSwgIngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bOl0sIGRhdGEpCisgICAgICAgICMgVGVzdCByZWFkX2J5dGUoKQorICAgICAgICBtLnNlZWsoMCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihkYXRhKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJlYWRfYnl0ZSgpLCBkYXRhW2ldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgaSsxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLnJlYWRfYnl0ZSkKKyAgICAgICAgIyBUZXN0IHJlYWQoKQorICAgICAgICBtLnNlZWsoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJlYWQoMyksICIzNDUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCA2KQorICAgICAgICAjIFRlc3Qgd3JpdGUoKQorICAgICAgICBtLnNlZWsoMykKKyAgICAgICAgbS53cml0ZSgiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCAiMDEyYmFyNjc4OSIpCisgICAgICAgIG0uc2Vlayg4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLndyaXRlLCAiYmFyIikKKworICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgZGVmIHRlc3RfdGFnbmFtZShzZWxmKToKKyAgICAgICAgICAgIGRhdGExID0gIjAxMjM0NTY3ODkiCisgICAgICAgICAgICBkYXRhMiA9ICJhYmNkZWZnaGlqIgorICAgICAgICAgICAgYXNzZXJ0IGxlbihkYXRhMSkgPT0gbGVuKGRhdGEyKQorCisgICAgICAgICAgICAjIFRlc3Qgc2FtZSB0YWcKKyAgICAgICAgICAgIG0xID0gbW1hcC5tbWFwKC0xLCBsZW4oZGF0YTEpLCB0YWduYW1lPSJmb28iKQorICAgICAgICAgICAgbTFbOl0gPSBkYXRhMQorICAgICAgICAgICAgbTIgPSBtbWFwLm1tYXAoLTEsIGxlbihkYXRhMiksIHRhZ25hbWU9ImZvbyIpCisgICAgICAgICAgICBtMls6XSA9IGRhdGEyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xWzpdLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTJbOl0sIGRhdGEyKQorICAgICAgICAgICAgbTIuY2xvc2UoKQorICAgICAgICAgICAgbTEuY2xvc2UoKQorCisgICAgICAgICAgICAjIFRlc3QgZGlmZmVyZW50IHRhZworICAgICAgICAgICAgbTEgPSBtbWFwLm1tYXAoLTEsIGxlbihkYXRhMSksIHRhZ25hbWU9ImZvbyIpCisgICAgICAgICAgICBtMVs6XSA9IGRhdGExCisgICAgICAgICAgICBtMiA9IG1tYXAubW1hcCgtMSwgbGVuKGRhdGEyKSwgdGFnbmFtZT0iYm9vIikKKyAgICAgICAgICAgIG0yWzpdID0gZGF0YTIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTFbOl0sIGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMls6XSwgZGF0YTIpCisgICAgICAgICAgICBtMi5jbG9zZSgpCisgICAgICAgICAgICBtMS5jbG9zZSgpCisKKyAgICAgICAgZGVmIHRlc3RfY3Jhc2hlcl9vbl93aW5kb3dzKHNlbGYpOgorICAgICAgICAgICAgIyBTaG91bGQgbm90IGNyYXNoIChJc3N1ZSAxNzMzOTg2KQorICAgICAgICAgICAgbSA9IG1tYXAubW1hcCgtMSwgMTAwMCwgdGFnbmFtZT0iZm9vIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtbWFwLm1tYXAoLTEsIDUwMDAsIHRhZ25hbWU9ImZvbyIpWzpdICMgc2FtZSB0YWduYW1lLCBidXQgbGFyZ2VyIHNpemUKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBtLmNsb3NlKCkKKworICAgICAgICAgICAgIyBTaG91bGQgbm90IGNyYXNoIChJc3N1ZSA1Mzg1KQorICAgICAgICAgICAgb3BlbihURVNURk4sICJ3YiIpLndyaXRlKCJ4IioxMCkKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIrYiIpCisgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDApCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtLnJlc2l6ZSgwKSAjIHdpbGwgcmFpc2UgV2luZG93c0Vycm9yCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1bOl0KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBtLmNsb3NlKCkKKworICAgICAgICBkZWYgdGVzdF9pbnZhbGlkX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgICAgICAjIHNvY2tldCBmaWxlIGRlc2NyaXB0b3JzIGFyZSB2YWxpZCwgYnV0IG91dCBvZiByYW5nZQorICAgICAgICAgICAgIyBmb3IgX2dldF9vc2ZoYW5kbGUsIGNhdXNpbmcgYSBjcmFzaCB3aGVuIHZhbGlkYXRpbmcgdGhlCisgICAgICAgICAgICAjIHBhcmFtZXRlcnMgdG8gX2dldF9vc2ZoYW5kbGUuCisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgbSA9IG1tYXAubW1hcChzLmZpbGVubygpLCAxMCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKworY2xhc3MgTGFyZ2VNbWFwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICB1bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB1bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIF9tYWtlX3Rlc3RfZmlsZShzZWxmLCBudW1femVyb2VzLCB0YWlsKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJyBvciBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICByZXF1aXJlcygnbGFyZ2VmaWxlJywKKyAgICAgICAgICAgICAgICAndGVzdCByZXF1aXJlcyAlcyBieXRlcyBhbmQgYSBsb25nIHRpbWUgdG8gcnVuJyAlIHN0cigweDE4MDAwMDAwMCkpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3crYicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuc2VlayhudW1femVyb2VzKQorICAgICAgICAgICAgZi53cml0ZSh0YWlsKQorICAgICAgICAgICAgZi5mbHVzaCgpCisgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgbGFyZ2VmaWxlIHN1cHBvcnQiKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIHRlc3RfbGFyZ2Vfb2Zmc2V0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX21ha2VfdGVzdF9maWxlKDB4MTRGRkZGRkZGLCBiIiAiKSBhcyBmOgorICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwLCBvZmZzZXQ9MHgxNDAwMDAwMDAsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsweEZGRkZGRkZdLCBiIiAiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2xhcmdlX2ZpbGVzaXplKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX21ha2VfdGVzdF9maWxlKDB4MTdGRkZGRkZGLCBiIiAiKSBhcyBmOgorICAgICAgICAgICAgaWYgc3lzLm1heHNpemUgPCAweDE4MDAwMDAwMDoKKyAgICAgICAgICAgICAgICAjIE9uIDMyIGJpdCBwbGF0Zm9ybXMgdGhlIGZpbGUgaXMgbGFyZ2VyIHRoYW4gc3lzLm1heHNpemUgc28KKyAgICAgICAgICAgICAgICAjIG1hcHBpbmcgdGhlIHdob2xlIGZpbGUgc2hvdWxkIGZhaWwgLS0gSXNzdWUgIzE2NzQzCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgbW1hcC5tbWFwKGYuZmlsZW5vKCksIDB4MTgwMDAwMDAwLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCwgYWNjZXNzPW1tYXAuQUNDRVNTX1JFQUQpCisgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDB4MTAwMDAsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zaXplKCksIDB4MTgwMDAwMDAwKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtLmNsb3NlKCkKKworICAgICMgSXNzdWUgMTEyNzc6IG1tYXAoKSB3aXRoIGxhcmdlICh+NEdCKSBzcGFyc2UgZmlsZXMgY3Jhc2hlcyBvbiBPUyBYLgorCisgICAgZGVmIF90ZXN0X2Fyb3VuZF9ib3VuZGFyeShzZWxmLCBib3VuZGFyeSk6CisgICAgICAgIHRhaWwgPSBiJyAgREVBUmRlYXIgICcKKyAgICAgICAgc3RhcnQgPSBib3VuZGFyeSAtIGxlbih0YWlsKSAvLyAyCisgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuKHRhaWwpCisgICAgICAgIHdpdGggc2VsZi5fbWFrZV90ZXN0X2ZpbGUoc3RhcnQsIHRhaWwpIGFzIGY6CisgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDAsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVtzdGFydDplbmRdLCB0YWlsKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5tYXhzaXplID4gXzRHLCAidGVzdCBjYW5ub3QgcnVuIG9uIDMyLWJpdCBzeXN0ZW1zIikKKyAgICBkZWYgdGVzdF9hcm91bmRfMkdCKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Fyb3VuZF9ib3VuZGFyeShfMkcpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMubWF4c2l6ZSA+IF80RywgInRlc3QgY2Fubm90IHJ1biBvbiAzMi1iaXQgc3lzdGVtcyIpCisgICAgZGVmIHRlc3RfYXJvdW5kXzRHQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hcm91bmRfYm91bmRhcnkoXzRHKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoTW1hcFRlc3RzLCBMYXJnZU1tYXBUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZWFmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKQEAgLTAsMCArMSw4NSBAQAorIyBUZXN0IHRoZSBtb2R1bGUgdHlwZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGdjX2NvbGxlY3QKKworaW1wb3J0IHN5cworTW9kdWxlVHlwZSA9IHR5cGUoc3lzKQorCitjbGFzcyBNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdW5pbml0aWFsaXplZChzZWxmKToKKyAgICAgICAgIyBBbiB1bmluaXRpYWxpemVkIG1vZHVsZSBoYXMgbm8gX19kaWN0X18gb3IgX19uYW1lX18sCisgICAgICAgICMgYW5kIF9fZG9jX18gaXMgTm9uZQorICAgICAgICBmb28gPSBNb2R1bGVUeXBlLl9fbmV3X18oTW9kdWxlVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5fX2RpY3RfXyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvciwgZGlyLCBmb28pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBmb28uX19uYW1lX18KKyAgICAgICAgICAgIHNlbGYuZmFpbCgiX19uYW1lX18gPSAlcyIgJSByZXByKHMpKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sIE1vZHVsZVR5cGUuX19kb2NfXykKKworICAgIGRlZiB0ZXN0X25vX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBSZWd1bGFybHkgaW5pdGlhbGl6ZWQgbW9kdWxlLCBubyBkb2NzdHJpbmcKKyAgICAgICAgZm9vID0gTW9kdWxlVHlwZSgiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6IE5vbmV9KQorCisgICAgZGVmIHRlc3RfYXNjaWlfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAjIEFTQ0lJIGRvY3N0cmluZworICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iLCAiZm9vZG9jIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MifSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFVuaWNvZGUgZG9jc3RyaW5nCisgICAgICAgIGZvbyA9IE1vZHVsZVR5cGUoImZvbyIsIHUiZm9vZG9jXHUxMjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCB1ImZvb2RvY1x1MTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiB1ImZvb2RvY1x1MTIzNCJ9KQorCisgICAgZGVmIHRlc3RfcmVpbml0KHNlbGYpOgorICAgICAgICAjIFJlaW5pdGlhbGl6YXRpb24gc2hvdWxkIG5vdCByZXBsYWNlIHRoZSBfX2RpY3RfXworICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iLCB1ImZvb2RvY1x1MTIzNCIpCisgICAgICAgIGZvby5iYXIgPSA0MgorICAgICAgICBkID0gZm9vLl9fZGljdF9fCisgICAgICAgIGZvby5fX2luaXRfXygiZm9vIiwgImZvb2RvYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fbmFtZV9fLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgImZvb2RvYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLmJhciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLAorICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsICJiYXIiOiA0Mn0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uX19kaWN0X18gaXMgZCkKKworICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICBkZWYgdGVzdF9kb250X2NsZWFyX2RpY3Qoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDcxNDAuCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iKQorICAgICAgICAgICAgZm9vLmJhciA9IDQKKyAgICAgICAgICAgIHJldHVybiBmb28KKyAgICAgICAgZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLl9fZGljdF9fWyJiYXIiXSwgNCkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2RpY3RfaW5fcmVmX2N5Y2xlKHNlbGYpOgorICAgICAgICBkZXN0cm95ZWQgPSBbXQorICAgICAgICBtID0gTW9kdWxlVHlwZSgiZm9vIikKKyAgICAgICAgbS5kZXN0cm95ZWQgPSBkZXN0cm95ZWQKKyAgICAgICAgcyA9ICIiImNsYXNzIEE6CisgICAgZGVmIF9fZGVsX18oc2VsZiwgZGVzdHJveWVkPWRlc3Ryb3llZCk6CisgICAgICAgIGRlc3Ryb3llZC5hcHBlbmQoMSkKK2EgPSBBKCkiIiIKKyAgICAgICAgZXhlYyhzLCBtLl9fZGljdF9fKQorICAgICAgICBkZWwgbQorICAgICAgICBnY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0cm95ZWQsIFsxXSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChNb2R1bGVUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MWQxZTAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKQEAgLTAsMCArMSwyODYgQEAKK2ltcG9ydCBfX2Z1dHVyZV9fCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGRpc3R1dGlscy5kaXJfdXRpbAoraW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK3RyeTogc2V0CitleGNlcHQgTmFtZUVycm9yOiBmcm9tIHNldHMgaW1wb3J0IFNldCBhcyBzZXQKKworaW1wb3J0IG1vZHVsZWZpbmRlcgorCisjIE5vdGU6IFRvIHRlc3QgbW9kdWxlZmluZGVyIHdpdGggUHl0aG9uIDIuMiwgc2V0cy5weSBhbmQKKyMgbW9kdWxlZmluZGVyLnB5IG11c3QgYmUgYXZhaWxhYmxlIC0gdGhleSBhcmUgbm90IGluIHRoZSBzdGFuZGFyZAorIyBsaWJyYXJ5LgorCitURVNUX0RJUiA9IHRlbXBmaWxlLm1rZHRlbXAoKQorVEVTVF9QQVRIID0gW1RFU1RfRElSLCBvcy5wYXRoLmRpcm5hbWUoX19mdXR1cmVfXy5fX2ZpbGVfXyldCisKKyMgRWFjaCB0ZXN0IGRlc2NyaXB0aW9uIGlzIGEgbGlzdCBvZiA1IGl0ZW1zOgorIworIyAxLiBhIG1vZHVsZSBuYW1lIHRoYXQgd2lsbCBiZSBpbXBvcnRlZCBieSBtb2R1bGVmaW5kZXIKKyMgMi4gYSBsaXN0IG9mIG1vZHVsZSBuYW1lcyB0aGF0IG1vZHVsZWZpbmRlciBpcyByZXF1aXJlZCB0byBmaW5kCisjIDMuIGEgbGlzdCBvZiBtb2R1bGUgbmFtZXMgdGhhdCBtb2R1bGVmaW5kZXIgc2hvdWxkIGNvbXBsYWluCisjICAgIGFib3V0IGJlY2F1c2UgdGhleSBhcmUgbm90IGZvdW5kCisjIDQuIGEgbGlzdCBvZiBtb2R1bGUgbmFtZXMgdGhhdCBtb2R1bGVmaW5kZXIgc2hvdWxkIGNvbXBsYWluCisjICAgIGFib3V0IGJlY2F1c2UgdGhleSBNQVkgYmUgbm90IGZvdW5kCisjIDUuIGEgc3RyaW5nIHNwZWNpZnlpbmcgcGFja2FnZXMgdG8gY3JlYXRlOyB0aGUgZm9ybWF0IGlzIG9idmlvdXMgaW1vLgorIworIyBFYWNoIHBhY2thZ2Ugd2lsbCBiZSBjcmVhdGVkIGluIFRFU1RfRElSLCBhbmQgVEVTVF9ESVIgd2lsbCBiZQorIyByZW1vdmVkIGFmdGVyIHRoZSB0ZXN0cyBhZ2Fpbi4KKyMgTW9kdWxlZmluZGVyIHNlYXJjaGVzIGluIGEgcGF0aCB0aGF0IGNvbnRhaW5zIFRFU1RfRElSLCBwbHVzCisjIHRoZSBzdGFuZGFyZCBMaWIgZGlyZWN0b3J5LgorCittYXliZV90ZXN0ID0gWworICAgICJhLm1vZHVsZSIsCisgICAgWyJhIiwgImEubW9kdWxlIiwgInN5cyIsCisgICAgICJiIl0sCisgICAgWyJjIl0sIFsiYi5zb21ldGhpbmciXSwKKyAgICAiIiJcCithL19faW5pdF9fLnB5CithL21vZHVsZS5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGIgaW1wb3J0IHNvbWV0aGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGMgaW1wb3J0IHNvbWV0aGluZworYi9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHN5cyBpbXBvcnQgKgorIiIiXQorCittYXliZV90ZXN0X25ldyA9IFsKKyAgICAiYS5tb2R1bGUiLAorICAgIFsiYSIsICJhLm1vZHVsZSIsICJzeXMiLAorICAgICAiYiIsICJfX2Z1dHVyZV9fIl0sCisgICAgWyJjIl0sIFsiYi5zb21ldGhpbmciXSwKKyAgICAiIiJcCithL19faW5pdF9fLnB5CithL21vZHVsZS5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGIgaW1wb3J0IHNvbWV0aGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGMgaW1wb3J0IHNvbWV0aGluZworYi9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHN5cyBpbXBvcnQgKgorIiIiXQorCitwYWNrYWdlX3Rlc3QgPSBbCisgICAgImEubW9kdWxlIiwKKyAgICBbImEiLCAiYS5iIiwgImEuYyIsICJhLm1vZHVsZSIsICJteW1vZHVsZSIsICJzeXMiXSwKKyAgICBbImJsYWhibGFoIl0sIFtdLAorICAgICIiIlwKK215bW9kdWxlLnB5CithL19faW5pdF9fLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBibGFoYmxhaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGEgaW1wb3J0IGIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGMKK2EvbW9kdWxlLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBhIGltcG9ydCBiIGFzIHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBhLmMgaW1wb3J0IHNpbGx5bmFtZQorYS9iLnB5CithL2MucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBhLm1vZHVsZSBpbXBvcnQgeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgbXltb2R1bGUgYXMgc2lsbHluYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gc3lzIGltcG9ydCB2ZXJzaW9uX2luZm8KKyIiIl0KKworYWJzb2x1dGVfaW1wb3J0X3Rlc3QgPSBbCisgICAgImEubW9kdWxlIiwKKyAgICBbImEiLCAiYS5tb2R1bGUiLAorICAgICAiYiIsICJiLngiLCAiYi55IiwgImIueiIsCisgICAgICJfX2Z1dHVyZV9fIiwgInN5cyIsICJleGNlcHRpb25zIl0sCisgICAgWyJibGFoYmxhaCJdLCBbXSwKKyAgICAiIiJcCitteW1vZHVsZS5weQorYS9fX2luaXRfXy5weQorYS9tb2R1bGUucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cyAjIHN5cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgYmxhaGJsYWggIyBmYWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgZXhjZXB0aW9ucyAjIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGIueCAjIGIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGIgaW1wb3J0IHkgIyBiLnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBiLnogaW1wb3J0ICogIyBiLnouKgorYS9leGNlcHRpb25zLnB5CithL3N5cy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgbXltb2R1bGUKK2EvYi9fX2luaXRfXy5weQorYS9iL3gucHkKK2EvYi95LnB5CithL2Ivei5weQorYi9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgegorYi91bnVzZWQucHkKK2IveC5weQorYi95LnB5CitiL3oucHkKKyIiIl0KKworcmVsYXRpdmVfaW1wb3J0X3Rlc3QgPSBbCisgICAgImEubW9kdWxlIiwKKyAgICBbIl9fZnV0dXJlX18iLAorICAgICAiYSIsICJhLm1vZHVsZSIsCisgICAgICJhLmIiLCAiYS5iLnkiLCAiYS5iLnoiLAorICAgICAiYS5iLmMiLCAiYS5iLmMubW9kdWxlQyIsCisgICAgICJhLmIuYy5kIiwgImEuYi5jLmUiLAorICAgICAiYS5iLngiLAorICAgICAiZXhjZXB0aW9ucyJdLAorICAgIFtdLCBbXSwKKyAgICAiIiJcCitteW1vZHVsZS5weQorYS9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIC5iIGltcG9ydCB5LCB6ICMgYS5iLnksIGEuYi56CithL21vZHVsZS5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydCAjIF9fZnV0dXJlX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGV4Y2VwdGlvbnMgIyBleGNlcHRpb25zCithL2V4Y2VwdGlvbnMucHkKK2Evc3lzLnB5CithL2IvX19pbml0X18ucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuLmIgaW1wb3J0IHggIyBhLmIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZnJvbSBhLmIuYyBpbXBvcnQgbW9kdWxlQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIC5jIGltcG9ydCBtb2R1bGVDICMgYS5iLm1vZHVsZUMKK2EvYi94LnB5CithL2IveS5weQorYS9iL3oucHkKK2EvYi9nLnB5CithL2IvYy9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIC4uYyBpbXBvcnQgZSAjIGEuYi5jLmUKK2EvYi9jL21vZHVsZUMucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuLmMgaW1wb3J0IGQgIyBhLmIuYy5kCithL2IvYy9kLnB5CithL2IvYy9lLnB5CithL2IvYy94LnB5CisiIiJdCisKK3JlbGF0aXZlX2ltcG9ydF90ZXN0XzIgPSBbCisgICAgImEubW9kdWxlIiwKKyAgICBbImEiLCAiYS5tb2R1bGUiLAorICAgICAiYS5zeXMiLAorICAgICAiYS5iIiwgImEuYi55IiwgImEuYi56IiwKKyAgICAgImEuYi5jIiwgImEuYi5jLmQiLAorICAgICAiYS5iLmMuZSIsCisgICAgICJhLmIuYy5tb2R1bGVDIiwKKyAgICAgImEuYi5jLmYiLAorICAgICAiYS5iLngiLAorICAgICAiYS5hbm90aGVyIl0sCisgICAgW10sIFtdLAorICAgICIiIlwKK215bW9kdWxlLnB5CithL19faW5pdF9fLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgc3lzICMgYS5zeXMKK2EvYW5vdGhlci5weQorYS9tb2R1bGUucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuYiBpbXBvcnQgeSwgeiAjIGEuYi55LCBhLmIuegorYS9leGNlcHRpb25zLnB5CithL3N5cy5weQorYS9iL19faW5pdF9fLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLmMgaW1wb3J0IG1vZHVsZUMgIyBhLmIuYy5tb2R1bGVDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLmMgaW1wb3J0IGQgIyBhLmIuYy5kCithL2IveC5weQorYS9iL3kucHkKK2EvYi96LnB5CithL2IvYy9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IGUgIyBhLmIuYy5lCithL2IvYy9tb2R1bGVDLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuIGltcG9ydCBmICAgIyBhLmIuYy5mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLi4gaW1wb3J0IHggICMgYS5iLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuLi4gaW1wb3J0IGFub3RoZXIgIyBhLmFub3RoZXIKK2EvYi9jL2QucHkKK2EvYi9jL2UucHkKK2EvYi9jL2YucHkKKyIiIl0KKworcmVsYXRpdmVfaW1wb3J0X3Rlc3RfMyA9IFsKKyAgICAiYS5tb2R1bGUiLAorICAgIFsiYSIsICJhLm1vZHVsZSJdLAorICAgIFsiYS5iYXIiXSwKKyAgICBbXSwKKyAgICAiIiJcCithL19faW5pdF9fLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBmb28oKTogcGFzcworYS9tb2R1bGUucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuIGltcG9ydCBmb28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuIGltcG9ydCBiYXIKKyIiIl0KKworZGVmIG9wZW5fZmlsZShwYXRoKToKKyAgICAjI3ByaW50ICIjIiwgb3MucGF0aC5hYnNwYXRoKHBhdGgpCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorICAgIGRpc3R1dGlscy5kaXJfdXRpbC5ta3BhdGgoZGlybmFtZSkKKyAgICByZXR1cm4gb3BlbihwYXRoLCAidyIpCisKK2RlZiBjcmVhdGVfcGFja2FnZShzb3VyY2UpOgorICAgIG9maSA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGZvciBsaW5lIGluIHNvdXJjZS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiAiKSBvciBsaW5lLnN0YXJ0c3dpdGgoIlx0Iik6CisgICAgICAgICAgICAgICAgb2ZpLndyaXRlKGxpbmUuc3RyaXAoKSArICJcbiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG9maToKKyAgICAgICAgICAgICAgICAgICAgb2ZpLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBvZmkgPSBvcGVuX2ZpbGUob3MucGF0aC5qb2luKFRFU1RfRElSLCBsaW5lLnN0cmlwKCkpKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIG9maToKKyAgICAgICAgICAgIG9maS5jbG9zZSgpCisKK2NsYXNzIE1vZHVsZUZpbmRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBfZG9fdGVzdChzZWxmLCBpbmZvLCByZXBvcnQ9RmFsc2UpOgorICAgICAgICBpbXBvcnRfdGhpcywgbW9kdWxlcywgbWlzc2luZywgbWF5YmVfbWlzc2luZywgc291cmNlID0gaW5mbworICAgICAgICBjcmVhdGVfcGFja2FnZShzb3VyY2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1mID0gbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlcihwYXRoPVRFU1RfUEFUSCkKKyAgICAgICAgICAgIG1mLmltcG9ydF9ob29rKGltcG9ydF90aGlzKQorICAgICAgICAgICAgaWYgcmVwb3J0OgorICAgICAgICAgICAgICAgIG1mLnJlcG9ydCgpCisjIyAgICAgICAgICAgICAgICAjIFRoaXMgd291bGRuJ3Qgd29yayBpbiBnZW5lcmFsIHdoZW4gZXhlY3V0ZWQgc2V2ZXJhbCB0aW1lczoKKyMjICAgICAgICAgICAgICAgIG9wYXRoID0gc3lzLnBhdGhbOl0KKyMjICAgICAgICAgICAgICAgIHN5cy5wYXRoID0gVEVTVF9QQVRICisjIyAgICAgICAgICAgICAgICB0cnk6CisjIyAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhpbXBvcnRfdGhpcykKKyMjICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyMjICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrOyB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyMjICAgICAgICAgICAgICAgIHN5cy5wYXRoID0gb3BhdGgKKyMjICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgbW9kdWxlcyA9IHNldChtb2R1bGVzKQorICAgICAgICAgICAgZm91bmQgPSBzZXQobWYubW9kdWxlcy5rZXlzKCkpCisgICAgICAgICAgICBtb3JlID0gbGlzdChmb3VuZCAtIG1vZHVsZXMpCisgICAgICAgICAgICBsZXNzID0gbGlzdChtb2R1bGVzIC0gZm91bmQpCisgICAgICAgICAgICAjIGNoZWNrIGlmIHdlIGZvdW5kIHdoYXQgd2UgZXhwZWN0ZWQsIG5vdCBtb3JlLCBub3QgbGVzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobW9yZSwgbGVzcyksIChbXSwgW10pKQorCisgICAgICAgICAgICAjIGNoZWNrIGZvciBtaXNzaW5nIGFuZCBtYXliZSBtaXNzaW5nIG1vZHVsZXMKKyAgICAgICAgICAgIGJhZCwgbWF5YmUgPSBtZi5hbnlfbWlzc2luZ19tYXliZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZCwgbWlzc2luZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF5YmUsIG1heWJlX21pc3NpbmcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkaXN0dXRpbHMuZGlyX3V0aWwucmVtb3ZlX3RyZWUoVEVTVF9ESVIpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzZWxmLl9kb190ZXN0KHBhY2thZ2VfdGVzdCkKKworICAgIGRlZiB0ZXN0X21heWJlKHNlbGYpOgorICAgICAgICBzZWxmLl9kb190ZXN0KG1heWJlX3Rlc3QpCisKKyAgICBpZiBnZXRhdHRyKF9fZnV0dXJlX18sICJhYnNvbHV0ZV9pbXBvcnQiLCBOb25lKToKKworICAgICAgICBkZWYgdGVzdF9tYXliZV9uZXcoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9kb190ZXN0KG1heWJlX3Rlc3RfbmV3KQorCisgICAgICAgIGRlZiB0ZXN0X2Fic29sdXRlX2ltcG9ydHMoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9kb190ZXN0KGFic29sdXRlX2ltcG9ydF90ZXN0KQorCisgICAgICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydHMoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9kb190ZXN0KHJlbGF0aXZlX2ltcG9ydF90ZXN0KQorCisgICAgICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydHNfMihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2RvX3Rlc3QocmVsYXRpdmVfaW1wb3J0X3Rlc3RfMikKKworICAgICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRzXzMoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9kb190ZXN0KHJlbGF0aXZlX2ltcG9ydF90ZXN0XzMpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBkaXN0dXRpbHMubG9nLnNldF90aHJlc2hvbGQoZGlzdHV0aWxzLmxvZy5XQVJOKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTW9kdWxlRmluZGVyVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21zaWxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X21zaWxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDViMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXNpbGliLnB5CkBAIC0wLDAgKzEsNDYgQEAKKyIiIiBUZXN0IHN1aXRlIGZvciB0aGUgY29kZSBpbiBtc2lsaWIgIiIiCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQorbXNpbGliID0gaW1wb3J0X21vZHVsZSgnbXNpbGliJykKKworY2xhc3MgVGVzdF9tYWtlX2lkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzY5MjEyKHY9dnMuODUpLmFzcHgKKyAgICAiIiJUaGUgSWRlbnRpZmllciBkYXRhIHR5cGUgaXMgYSB0ZXh0IHN0cmluZy4gSWRlbnRpZmllcnMgbWF5IGNvbnRhaW4gdGhlCisgICAgQVNDSUkgY2hhcmFjdGVycyBBLVogKGEteiksIGRpZ2l0cywgdW5kZXJzY29yZXMgKF8pLCBvciBwZXJpb2RzICguKS4KKyAgICBIb3dldmVyLCBldmVyeSBpZGVudGlmaWVyIG11c3QgYmVnaW4gd2l0aCBlaXRoZXIgYSBsZXR0ZXIgb3IgYW4KKyAgICB1bmRlcnNjb3JlLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfaXNfbm9fY2hhbmdlX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoInNob3J0IiksICJzaG9ydCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtc2lsaWIubWFrZV9pZCgibm9jaGFuZ2VyZXF1aXJlZCIpLCAibm9jaGFuZ2VyZXF1aXJlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtc2lsaWIubWFrZV9pZCgib25lLmRvdCIpLCAib25lLmRvdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtc2lsaWIubWFrZV9pZCgiXyIpLCAiXyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtc2lsaWIubWFrZV9pZCgiYSIpLCAiYSIpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAjICAgIG1zaWxpYi5tYWtlX2lkKCIiKSwgIiIpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2ZpcnN0X2NoYXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtc2lsaWIubWFrZV9pZCgiOS5zaG9ydCIpLCAiXzkuc2hvcnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoIi5zaG9ydCIpLCAiXy5zaG9ydCIpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FueV9jaGFyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoIi5zXHg4Mm9ydCIpLCAiXy5zX29ydCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgICAgKAorICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoIi5zXHg4Mm8/KitydCIpLCAiXy5zX29fX19ydCIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTg2Y2EyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKQEAgLTAsMCArMSwyNzQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X211bHRpYnl0ZWNvZGVjLnB5CisjICAgVW5pdCB0ZXN0IGZvciBtdWx0aWJ5dGVjb2RlYyBpdHNlbGYKKyMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTgoraW1wb3J0IHVuaXR0ZXN0LCBTdHJpbmdJTywgY29kZWNzLCBzeXMsIG9zCitpbXBvcnQgX211bHRpYnl0ZWNvZGVjCisKK0FMTF9DSktFTkNPRElOR1MgPSBbCisjIF9jb2RlY3NfY24KKyAgICAnZ2IyMzEyJywgJ2diaycsICdnYjE4MDMwJywgJ2h6JywKKyMgX2NvZGVjc19oaworICAgICdiaWc1aGtzY3MnLAorIyBfY29kZWNzX2pwCisgICAgJ2NwOTMyJywgJ3NoaWZ0X2ppcycsICdldWNfanAnLCAnZXVjX2ppc3gwMjEzJywgJ3NoaWZ0X2ppc3gwMjEzJywKKyAgICAnZXVjX2ppc18yMDA0JywgJ3NoaWZ0X2ppc18yMDA0JywKKyMgX2NvZGVjc19rcgorICAgICdjcDk0OScsICdldWNfa3InLCAnam9oYWInLAorIyBfY29kZWNzX3R3CisgICAgJ2JpZzUnLCAnY3A5NTAnLAorIyBfY29kZWNzX2lzbzIwMjIKKyAgICAnaXNvMjAyMl9qcCcsICdpc28yMDIyX2pwXzEnLCAnaXNvMjAyMl9qcF8yJywgJ2lzbzIwMjJfanBfMjAwNCcsCisgICAgJ2lzbzIwMjJfanBfMycsICdpc28yMDIyX2pwX2V4dCcsICdpc28yMDIyX2tyJywKK10KKworY2xhc3MgVGVzdF9NdWx0aWJ5dGVDb2RlYyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9udWxsY29kaW5nKHNlbGYpOgorICAgICAgICBmb3IgZW5jIGluIEFMTF9DSktFTkNPRElOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmRlY29kZShlbmMpLCB1JycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJycsIGVuYyksIHUnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodScnLmVuY29kZShlbmMpLCAnJykKKworICAgIGRlZiB0ZXN0X3N0cl9kZWNvZGUoc2VsZik6CisgICAgICAgIGZvciBlbmMgaW4gQUxMX0NKS0VOQ09ESU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiY2QnLmVuY29kZShlbmMpLCAnYWJjZCcpCisKKyAgICBkZWYgdGVzdF9lcnJvcmNhbGxiYWNrX2xvbmdpbmRleChzZWxmKToKKyAgICAgICAgZGVjID0gY29kZWNzLmdldGRlY29kZXIoJ2V1Yy1rcicpCisgICAgICAgIG15cmVwbGFjZSAgPSBsYW1iZGEgZXhjOiAodScnLCBzeXMubWF4aW50KzEpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigndGVzdC5jamt0ZXN0JywgbXlyZXBsYWNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBkZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsZVx4OTJoYW1ceDkzc3BhbScsICd0ZXN0LmNqa3Rlc3QnKQorCisgICAgZGVmIHRlc3RfY29kaW5nc3BlYyhzZWxmKToKKyAgICAgICAgZm9yIGVuYyBpbiBBTExfQ0pLRU5DT0RJTkdTOgorICAgICAgICAgICAgY29kZSA9ICcjIGNvZGluZzoge31cbicuZm9ybWF0KGVuYykKKyAgICAgICAgICAgIGV4ZWMgY29kZQorCisgICAgZGVmIHRlc3RfaW5pdF9zZWdmYXVsdChzZWxmKToKKyAgICAgICAgIyBidWcgIzMzMDU6IHRoaXMgdXNlZCB0byBzZWdmYXVsdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX211bHRpYnl0ZWNvZGVjLk11bHRpYnl0ZVN0cmVhbVJlYWRlciwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9tdWx0aWJ5dGVjb2RlYy5NdWx0aWJ5dGVTdHJlYW1Xcml0ZXIsIE5vbmUpCisKKworY2xhc3MgVGVzdF9JbmNyZW1lbnRhbEVuY29kZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc3RhdGVsZXNzKHNlbGYpOgorICAgICAgICAjIGNwOTQ5IGVuY29kZXIgaXNuJ3Qgc3RhdGVmdWwgYXQgYWxsLgorICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcignY3A5NDknKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdcdWQzMGNcdWM3NzRcdWMzNmMgXHViOWM4XHVjNzQ0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4YzZceGM0XHhjMFx4Y2NceGJkXHhlMyBceGI4XHhiNlx4YzBceGJiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLnJlc2V0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdcdTI2MDZcdTIyM2NcdTI2MDYnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXHhhMVx4ZDlceGExXHhhZFx4YTFceGQ5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLnJlc2V0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodScnLCBUcnVlKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodScnLCBGYWxzZSksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIucmVzZXQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3N0YXRlZnVsKHNlbGYpOgorICAgICAgICAjIGppc3gwMjEzIGVuY29kZXIgaXMgc3RhdGVmdWwgZm9yIGEgZmV3IGNvZGVwb2ludHMuIGVnKQorICAgICAgICAjICAgVSswMEU2ID0+IEE5REMKKyAgICAgICAgIyAgIFUrMDBFNiBVKzAzMDAgPT4gQUJDNAorICAgICAgICAjICAgVSswMzAwID0+IEFCREMKKworICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcignamlzeDAyMTMnKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdcdTAwZTZcdTAzMDAnKSwgJ1x4YWJceGM0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1J1x1MDBlNicpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1J1x1MDMwMCcpLCAnXHhhYlx4YzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXHUwMGU2JywgVHJ1ZSksICdceGE5XHhkYycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLnJlc2V0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdcdTAzMDAnKSwgJ1x4YWJceGRjJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXHUwMGU2JyksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKCcnLCBUcnVlKSwgJ1x4YTlceGRjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSgnJywgVHJ1ZSksICcnKQorCisgICAgZGVmIHRlc3Rfc3RhdGVmdWxfa2VlcF9idWZmZXIoc2VsZik6CisgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKCdqaXN4MDIxMycpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1J1x1MDBlNicpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBlbmNvZGVyLmVuY29kZSwgdSdcdTAxMjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXHUwMzAwXHUwMGU2JyksICdceGFiXHhjNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgZW5jb2Rlci5lbmNvZGUsIHUnXHUwMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLnJlc2V0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdcdTAzMDAnKSwgJ1x4YWJceGRjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1J1x1MDBlNicpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBlbmNvZGVyLmVuY29kZSwgdSdcdTAxMjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnJywgVHJ1ZSksICdceGE5XHhkYycpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTU2NDAoc2VsZik6CisgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKCdzaGlmdC1qaXMnKSgnYmFja3NsYXNocmVwbGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdceGZmJyksIGInXFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXG4nKSwgYidcbicpCisKK2NsYXNzIFRlc3RfSW5jcmVtZW50YWxEZWNvZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2RiY3Moc2VsZik6CisgICAgICAgICMgY3A5NDkgZGVjb2RlciBpcyBzaW1wbGUgd2l0aCBvbmx5IDEgb3IgMiBieXRlcyBzZXF1ZW5jZXMuCisgICAgICAgIGRlY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKCdjcDk0OScpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgnXHhjNlx4YzRceGMwXHhjY1x4YmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1x1ZDMwY1x1Yzc3NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoJ1x4ZTMgXHhiOFx4YjZceGMwXHhiYicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXHVjMzZjIFx1YjljOFx1Yzc0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoJycpLCB1JycpCisKKyAgICBkZWYgdGVzdF9kYmNzX2tlZXBfYnVmZmVyKHNlbGYpOgorICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcignY3A5NDknKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoJ1x4YzZceGM0XHhjMCcpLCB1J1x1ZDMwYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgZGVjb2Rlci5kZWNvZGUsICcnLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCdceGNjJyksIHUnXHVjNzc0JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCdceGM2XHhjNFx4YzAnKSwgdSdcdWQzMGMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGRlY29kZXIuZGVjb2RlLCAnXHhjY1x4YmQnLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCdceGNjJyksIHUnXHVjNzc0JykKKworICAgIGRlZiB0ZXN0X2lzbzIwMjIoc2VsZik6CisgICAgICAgIGRlY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKCdpc28yMDIyLWpwJykoKQorICAgICAgICBFU0MgPSAnXHgxYicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZShFU0MgKyAnKCcpLCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoJ0InLCBUcnVlKSwgdScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKEVTQyArICckJyksIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgnQkAkJyksIHUnXHU0ZTE2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgnQCRAJyksIHUnXHU0ZTE2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgnJCcsIFRydWUpLCB1J1x1NGUxNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5yZXNldCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCdAJCcpLCB1J0AkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZShFU0MgKyAnJCcpLCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgZGVjb2Rlci5kZWNvZGUsICcnLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCdCQCQnKSwgdSdcdTRlMTYnKQorCitjbGFzcyBUZXN0X1N0cmVhbVJlYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYnVnMTcyODQwMyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3BlbihURVNURk4sICd3Jykud3JpdGUoJ1x4YTEnKQorICAgICAgICAgICAgZiA9IGNvZGVjcy5vcGVuKFRFU1RGTiwgZW5jb2Rpbmc9J2NwOTQ5JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgZi5yZWFkLCAyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OiBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdDogcGFzcworICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworY2xhc3MgVGVzdF9TdHJlYW1Xcml0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGlmIGxlbih1J1xVMDAwMTIzNDUnKSA9PSAyOiAjIFVDUzIKKyAgICAgICAgZGVmIHRlc3RfZ2IxODAzMChzZWxmKToKKyAgICAgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcignZ2IxODAzMCcpKHMpCisgICAgICAgICAgICBjLndyaXRlKHUnMTIzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAnMTIzJykKKyAgICAgICAgICAgIGMud3JpdGUodSdcVTAwMDEyMzQ1JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAnMTIzXHg5MDdceDk1OScpCisgICAgICAgICAgICBjLndyaXRlKHUnXFUwMDAxMjM0NSdbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgJzEyM1x4OTA3XHg5NTknKQorICAgICAgICAgICAgYy53cml0ZSh1J1xVMDAwMTIzNDUnWzFdICsgdSdcVTAwMDEyMzQ1JyArIHUnXHVhYzAwXHUwMGFjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAnMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQorICAgICAgICAgICAgYy53cml0ZSh1J1xVMDAwMTIzNDUnWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICcxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGMucmVzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgJzEyM1x4OTA3XHg5NTlceDkwN1x4OTU5XHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKKworICAgICAgICBkZWYgdGVzdF91dGZfOChzZWxmKToKKyAgICAgICAgICAgIHM9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpKHMpCisgICAgICAgICAgICBjLndyaXRlKHUnMTIzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAnMTIzJykKKyAgICAgICAgICAgIGMud3JpdGUodSdcVTAwMDEyMzQ1JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAnMTIzXHhmMFx4OTJceDhkXHg4NScpCisKKyAgICAgICAgICAgICMgUHl0aG9uIHV0Zi04IGNvZGVjIGNhbid0IGJ1ZmZlciBzdXJyb2dhdGUgcGFpcnMgeWV0LgorICAgICAgICAgICAgaWYgMDoKKyAgICAgICAgICAgICAgICBjLndyaXRlKHUnXFUwMDAxMjM0NSdbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksICcxMjNceGYwXHg5Mlx4OGRceDg1JykKKyAgICAgICAgICAgICAgICBjLndyaXRlKHUnXFUwMDAxMjM0NSdbMV0gKyB1J1xVMDAwMTIzNDUnICsgdSdcdWFjMDBcdTAwYWMnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAnMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JworICAgICAgICAgICAgICAgICAgICAnXHhlYVx4YjBceDgwXHhjMlx4YWMnKQorICAgICAgICAgICAgICAgIGMud3JpdGUodSdcVTAwMDEyMzQ1J1swXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKKyAgICAgICAgICAgICAgICAgICAgJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKKyAgICAgICAgICAgICAgICBjLnJlc2V0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKKyAgICAgICAgICAgICAgICAgICAgJ1x4ZWFceGIwXHg4MFx4YzJceGFjXHhlZFx4YTBceDg4JykKKyAgICAgICAgICAgICAgICBjLndyaXRlKHUnXFUwMDAxMjM0NSdbMV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICcxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCisgICAgICAgICAgICAgICAgICAgICdceGVhXHhiMFx4ODBceGMyXHhhY1x4ZWRceGEwXHg4OFx4ZWRceGJkXHg4NScpCisKKyAgICBlbHNlOiAjIFVDUzQKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfc3RyZWFtd3JpdGVyX3N0cndyaXRlKHNlbGYpOgorICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB3ciA9IGNvZGVjcy5nZXR3cml0ZXIoJ2diMTgwMzAnKShzKQorICAgICAgICB3ci53cml0ZSgnYWJjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAnYWJjZCcpCisKK2NsYXNzIFRlc3RfSVNPMjAyMih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZzIoc2VsZik6CisgICAgICAgIGlzbzIwMjJqcDIgPSAnXHgxYihCOmh1NDp1bml0XHgxYi5BXHgxYk5pIGRlIGZhbWlsbGUnCisgICAgICAgIHVuaSA9IHUnOmh1NDp1bml0XHhlOSBkZSBmYW1pbGxlJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzbzIwMjJqcDIuZGVjb2RlKCdpc28yMDIyLWpwLTInKSwgdW5pKQorCisgICAgZGVmIHRlc3RfaXNvMjAyMl9qcF9nMChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignXHgwZScsIHUnXE57U09GVCBIWVBIRU59Jy5lbmNvZGUoJ2lzby0yMDIyLWpwLTInKSkKKyAgICAgICAgZm9yIGVuY29kaW5nIGluICgnaXNvLTIwMjItanAtMjAwNCcsICdpc28tMjAyMi1qcC0zJyk6CisgICAgICAgICAgICBlID0gdSdcdTM0MDYnLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsdGVyKGxhbWJkYSB4OiB4ID49ICdceDgwJywgZSkpCisKKyAgICBkZWYgdGVzdF9idWcxNTcyODMyKHNlbGYpOgorICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA+PSAweDEwMDAwOgorICAgICAgICAgICAgbXl1bmljaHIgPSB1bmljaHIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG15dW5pY2hyID0gbGFtYmRhIHg6IHVuaWNocigweEQ3QzArKHg+PjEwKSkgKyB1bmljaHIoMHhEQzAwKyh4JjB4M0ZGKSkKKworICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoMHgxMDAwMCwgMHgxMTAwMDApOgorICAgICAgICAgICAgIyBBbnkgSVNPIDIwMjIgY29kZWMgd2lsbCBjYXVzZSB0aGUgc2VnZmF1bHQKKyAgICAgICAgICAgIG15dW5pY2hyKHgpLmVuY29kZSgnaXNvXzIwMjJfanAnLCAnaWdub3JlJykKKworY2xhc3MgVGVzdFN0YXRlZnVsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0ZXh0ID0gdSdcdTRFMTZcdTRFMTYnCisgICAgZW5jb2RpbmcgPSAnaXNvLTIwMjItanAnCisgICAgZXhwZWN0ZWQgPSBiJ1x4MWIkQkAkQCQnCisgICAgZXhwZWN0ZWRfcmVzZXQgPSBiJ1x4MWIkQkAkQCRceDFiKEInCisKKyAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmVuY29kZShzZWxmLmVuY29kaW5nKSwgc2VsZi5leHBlY3RlZF9yZXNldCkKKworICAgIGRlZiB0ZXN0X2luY3JlbWVudGFsZW5jb2RlcihzZWxmKToKKyAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXIoc2VsZi5lbmNvZGluZykoKQorICAgICAgICBvdXRwdXQgPSBiJycuam9pbigKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlKGNoYXIpCisgICAgICAgICAgICBmb3IgY2hhciBpbiBzZWxmLnRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBzZWxmLmV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaW5jcmVtZW50YWxlbmNvZGVyX2ZpbmFsKHNlbGYpOgorICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcihzZWxmLmVuY29kaW5nKSgpCisgICAgICAgIGxhc3RfaW5kZXggPSBsZW4oc2VsZi50ZXh0KSAtIDEKKyAgICAgICAgb3V0cHV0ID0gYicnLmpvaW4oCisgICAgICAgICAgICBlbmNvZGVyLmVuY29kZShjaGFyLCBpbmRleCA9PSBsYXN0X2luZGV4KQorICAgICAgICAgICAgZm9yIGluZGV4LCBjaGFyIGluIGVudW1lcmF0ZShzZWxmLnRleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgc2VsZi5leHBlY3RlZF9yZXNldCkKKworY2xhc3MgVGVzdEhaU3RhdGVmdWwoVGVzdFN0YXRlZnVsKToKKyAgICB0ZXh0ID0gdSdcdTgwNGFcdTgwNGEnCisgICAgZW5jb2RpbmcgPSAnaHonCisgICAgZXhwZWN0ZWQgPSBiJ357QURBRCcKKyAgICBleHBlY3RlZF9yZXNldCA9IGInfntBREFEfn0nCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmEyZTUwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQpAQCAtMCwwICsxLDM3NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQorIyAgIENvbW1vbiBVbml0dGVzdCBSb3V0aW5lcyBmb3IgQ0pLIGNvZGVjcworIworCitpbXBvcnQgY29kZWNzCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGh0dHBsaWIgaW1wb3J0IEhUVFBFeGNlcHRpb24KK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitjbGFzcyBUZXN0QmFzZToKKyAgICBlbmNvZGluZyAgICAgICAgPSAnJyAgICMgY29kZWMgbmFtZQorICAgIGNvZGVjICAgICAgICAgICA9IE5vbmUgIyBjb2RlYyB0dXBsZSAod2l0aCA0IGVsZW1lbnRzKQorICAgIHRzdHJpbmcgICAgICAgICA9ICcnICAgIyBzdHJpbmcgdG8gdGVzdCBTdHJlYW1SZWFkZXIKKworICAgIGNvZGVjdGVzdHMgICAgICA9IE5vbmUgIyBtdXN0IHNldC4gY29kZWMgdGVzdCB0dXBsZQorICAgIHJvdW5kdHJpcHRlc3QgICA9IDEgICAgIyBzZXQgaWYgcm91bmR0cmlwIGlzIHBvc3NpYmxlIHdpdGggdW5pY29kZQorICAgIGhhc19pc28xMDY0NiAgICA9IDAgICAgIyBzZXQgaWYgdGhpcyBlbmNvZGluZyBjb250YWlucyB3aG9sZSBpc28xMDY0NiBtYXAKKyAgICB4bWxjaGFybmFtZXRlc3QgPSBOb25lICMgc3RyaW5nIHRvIHRlc3QgeG1sY2hhcnJlZnJlcGxhY2UKKyAgICB1bm1hcHBlZHVuaWNvZGUgPSB1J1x1ZGVlZScgIyBhIHVuaWNvZGUgY29kZXBvaW50IHRoYXQgaXMgbm90IG1hcHBlZC4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb2RlYyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5jb2RlYyA9IGNvZGVjcy5sb29rdXAoc2VsZi5lbmNvZGluZykKKyAgICAgICAgc2VsZi5lbmNvZGUgPSBzZWxmLmNvZGVjLmVuY29kZQorICAgICAgICBzZWxmLmRlY29kZSA9IHNlbGYuY29kZWMuZGVjb2RlCisgICAgICAgIHNlbGYucmVhZGVyID0gc2VsZi5jb2RlYy5zdHJlYW1yZWFkZXIKKyAgICAgICAgc2VsZi53cml0ZXIgPSBzZWxmLmNvZGVjLnN0cmVhbXdyaXRlcgorICAgICAgICBzZWxmLmluY3JlbWVudGFsZW5jb2RlciA9IHNlbGYuY29kZWMuaW5jcmVtZW50YWxlbmNvZGVyCisgICAgICAgIHNlbGYuaW5jcmVtZW50YWxkZWNvZGVyID0gc2VsZi5jb2RlYy5pbmNyZW1lbnRhbGRlY29kZXIKKworICAgIGRlZiB0ZXN0X2NodW5rY29kaW5nKHNlbGYpOgorICAgICAgICBmb3IgbmF0aXZlLCB1dGY4IGluIHppcCgqW1N0cmluZ0lPKGYpLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi50c3RyaW5nXSk6CisgICAgICAgICAgICB1ID0gc2VsZi5kZWNvZGUobmF0aXZlKVswXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCB1dGY4LmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgICAgIGlmIHNlbGYucm91bmR0cmlwdGVzdDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hdGl2ZSwgc2VsZi5lbmNvZGUodSlbMF0pCisKKyAgICBkZWYgdGVzdF9lcnJvcmhhbmRsZShzZWxmKToKKyAgICAgICAgZm9yIHNvdXJjZSwgc2NoZW1lLCBleHBlY3RlZCBpbiBzZWxmLmNvZGVjdGVzdHM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNvdXJjZSwgYnl0ZXMpOgorICAgICAgICAgICAgICAgIGZ1bmMgPSBzZWxmLmRlY29kZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdW5jID0gc2VsZi5lbmNvZGUKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMoc291cmNlLCBzY2hlbWUpWzBdCisgICAgICAgICAgICAgICAgaWYgZnVuYyBpcyBzZWxmLmRlY29kZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocmVzdWx0KSBpcyB1bmljb2RlLCB0eXBlKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXIuZGVjb2RlKCVyLCAlcik9JXIgIT0gJXInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc291cmNlLCBzZWxmLmVuY29kaW5nLCBzY2hlbWUsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocmVzdWx0KSBpcyBieXRlcywgdHlwZShyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyLmVuY29kZSglciwgJXIpPSVyICE9ICVyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNvdXJjZSwgc2VsZi5lbmNvZGluZywgc2NoZW1lLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGZ1bmMsIHNvdXJjZSwgc2NoZW1lKQorCisgICAgZGVmIHRlc3RfeG1sY2hhcnJlZnJlcGxhY2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaGFzX2lzbzEwNjQ2OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcyA9IHUiXHUwYjEzXHUwYjIzXHUwYjYwIG5kIGVnZ3MiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLmVuY29kZShzLCAieG1sY2hhcnJlZnJlcGxhY2UiKVswXSwKKyAgICAgICAgICAgICImIzI4MzU7JiMyODUxOyYjMjkxMjsgbmQgZWdncyIKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfY3VzdG9tcmVwbGFjZV9lbmNvZGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaGFzX2lzbzEwNjQ2OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZnJvbSBodG1sZW50aXR5ZGVmcyBpbXBvcnQgY29kZXBvaW50Mm5hbWUKKworICAgICAgICBkZWYgeG1sY2hhcm5hbWVyZXBsYWNlKGV4Yyk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGMsIFVuaWNvZGVFbmNvZGVFcnJvcik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgJXIiICUgZXhjKQorICAgICAgICAgICAgbCA9IFtdCisgICAgICAgICAgICBmb3IgYyBpbiBleGMub2JqZWN0W2V4Yy5zdGFydDpleGMuZW5kXToKKyAgICAgICAgICAgICAgICBpZiBvcmQoYykgaW4gY29kZXBvaW50Mm5hbWU6CisgICAgICAgICAgICAgICAgICAgIGwuYXBwZW5kKHUiJiVzOyIgJSBjb2RlcG9pbnQybmFtZVtvcmQoYyldKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGwuYXBwZW5kKHUiJiMlZDsiICUgb3JkKGMpKQorICAgICAgICAgICAgcmV0dXJuICh1IiIuam9pbihsKSwgZXhjLmVuZCkKKworICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QueG1sY2hhcm5hbWVyZXBsYWNlIiwgeG1sY2hhcm5hbWVyZXBsYWNlKQorCisgICAgICAgIGlmIHNlbGYueG1sY2hhcm5hbWV0ZXN0OgorICAgICAgICAgICAgc2luLCBzb3V0ID0gc2VsZi54bWxjaGFybmFtZXRlc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNpbiA9IHUiXHhhYlx1MjExY1x4YmIgPSBcdTIzMjlcdTEyMzRcdTIzMmEiCisgICAgICAgICAgICBzb3V0ID0gIiZsYXF1bzsmcmVhbDsmcmFxdW87ID0gJmxhbmc7JiM0NjYwOyZyYW5nOyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuY29kZShzaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdC54bWxjaGFybmFtZXJlcGxhY2UiKVswXSwgc291dCkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3dyb25nX29iamVjdHMoc2VsZik6CisgICAgICAgIGRlZiBteXJlcGxhY2UoZXhjKToKKyAgICAgICAgICAgIHJldHVybiAocmV0LCBleGMuZW5kKQorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuY2prdGVzdCIsIG15cmVwbGFjZSkKKworICAgICAgICBmb3IgcmV0IGluIChbMSwgMiwgM10sIFtdLCBOb25lLCBvYmplY3QoKSwgJ3N0cmluZycsICcnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5lbmNvZGUsIHNlbGYudW5tYXBwZWR1bmljb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QuY2prdGVzdCcpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19sb25nX2luZGV4KHNlbGYpOgorICAgICAgICBkZWYgbXlyZXBsYWNlKGV4Yyk6CisgICAgICAgICAgICByZXR1cm4gKHUneCcsIGxvbmcoZXhjLmVuZCkpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5jamt0ZXN0IiwgbXlyZXBsYWNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5jb2RlKHUnYWJjZCcgKyBzZWxmLnVubWFwcGVkdW5pY29kZSArIHUnZWZnaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QuY2prdGVzdCcpLCAoJ2FiY2R4ZWZnaCcsIDkpKQorCisgICAgICAgIGRlZiBteXJlcGxhY2UoZXhjKToKKyAgICAgICAgICAgIHJldHVybiAodSd4Jywgc3lzLm1heGludCArIDEpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5jamt0ZXN0IiwgbXlyZXBsYWNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzZWxmLmVuY29kZSwgc2VsZi51bm1hcHBlZHVuaWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmNqa3Rlc3QnKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfTm9uZV9pbmRleChzZWxmKToKKyAgICAgICAgZGVmIG15cmVwbGFjZShleGMpOgorICAgICAgICAgICAgcmV0dXJuICh1J3gnLCBOb25lKQorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuY2prdGVzdCIsIG15cmVwbGFjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmVuY29kZSwgc2VsZi51bm1hcHBlZHVuaWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmNqa3Rlc3QnKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfYmFja3dhcmRfaW5kZXgoc2VsZik6CisgICAgICAgIGRlZiBteXJlcGxhY2UoZXhjKToKKyAgICAgICAgICAgIGlmIG15cmVwbGFjZS5saW1pdCA+IDA6CisgICAgICAgICAgICAgICAgbXlyZXBsYWNlLmxpbWl0IC09IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gKHUnUkVQTEFDRUQnLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHUnVEVSTUlOQUwnLCBleGMuZW5kKQorICAgICAgICBteXJlcGxhY2UubGltaXQgPSAzCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5jamt0ZXN0IiwgbXlyZXBsYWNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5jb2RlKHUnYWJjZCcgKyBzZWxmLnVubWFwcGVkdW5pY29kZSArIHUnZWZnaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QuY2prdGVzdCcpLAorICAgICAgICAgICAgICAgICgnYWJjZFJFUExBQ0VEYWJjZFJFUExBQ0VEYWJjZFJFUExBQ0VEYWJjZFRFUk1JTkFMZWZnaCcsIDkpKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfZm9yd2FyZF9pbmRleChzZWxmKToKKyAgICAgICAgZGVmIG15cmVwbGFjZShleGMpOgorICAgICAgICAgICAgcmV0dXJuICh1J1JFUExBQ0VEJywgZXhjLmVuZCArIDIpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5jamt0ZXN0IiwgbXlyZXBsYWNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5jb2RlKHUnYWJjZCcgKyBzZWxmLnVubWFwcGVkdW5pY29kZSArIHUnZWZnaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QuY2prdGVzdCcpLCAoJ2FiY2RSRVBMQUNFRGdoJywgOSkpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19pbmRleF9vdXRvZmJvdW5kKHNlbGYpOgorICAgICAgICBkZWYgbXlyZXBsYWNlKGV4Yyk6CisgICAgICAgICAgICByZXR1cm4gKHUnVEVSTScsIDEwMCkKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LmNqa3Rlc3QiLCBteXJlcGxhY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHNlbGYuZW5jb2RlLCBzZWxmLnVubWFwcGVkdW5pY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QuY2prdGVzdCcpCisKKyAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbGVuY29kZXIoc2VsZik6CisgICAgICAgIFVURjhSZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKCd1dGYtOCcpCisgICAgICAgIGZvciBzaXplaGludCBpbiBbTm9uZV0gKyByYW5nZSgxLCAzMykgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICBbNjQsIDEyOCwgMjU2LCA1MTIsIDEwMjRdOgorICAgICAgICAgICAgaXN0cmVhbSA9IFVURjhSZWFkZXIoU3RyaW5nSU8oc2VsZi50c3RyaW5nWzFdKSkKKyAgICAgICAgICAgIG9zdHJlYW0gPSBTdHJpbmdJTygpCisgICAgICAgICAgICBlbmNvZGVyID0gc2VsZi5pbmNyZW1lbnRhbGVuY29kZXIoKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBpZiBzaXplaGludCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGlzdHJlYW0ucmVhZChzaXplaGludCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gaXN0cmVhbS5yZWFkKCkKKworICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGUgPSBlbmNvZGVyLmVuY29kZShkYXRhKQorICAgICAgICAgICAgICAgIG9zdHJlYW0ud3JpdGUoZSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvc3RyZWFtLmdldHZhbHVlKCksIHNlbGYudHN0cmluZ1swXSkKKworICAgIGRlZiB0ZXN0X2luY3JlbWVudGFsZGVjb2RlcihzZWxmKToKKyAgICAgICAgVVRGOFdyaXRlciA9IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04JykKKyAgICAgICAgZm9yIHNpemVoaW50IGluIFtOb25lLCAtMV0gKyByYW5nZSgxLCAzMykgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICBbNjQsIDEyOCwgMjU2LCA1MTIsIDEwMjRdOgorICAgICAgICAgICAgaXN0cmVhbSA9IFN0cmluZ0lPKHNlbGYudHN0cmluZ1swXSkKKyAgICAgICAgICAgIG9zdHJlYW0gPSBVVEY4V3JpdGVyKFN0cmluZ0lPKCkpCisgICAgICAgICAgICBkZWNvZGVyID0gc2VsZi5pbmNyZW1lbnRhbGRlY29kZXIoKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBkYXRhID0gaXN0cmVhbS5yZWFkKHNpemVoaW50KQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHUgPSBkZWNvZGVyLmRlY29kZShkYXRhKQorICAgICAgICAgICAgICAgICAgICBvc3RyZWFtLndyaXRlKHUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3N0cmVhbS5nZXR2YWx1ZSgpLCBzZWxmLnRzdHJpbmdbMV0pCisKKyAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbGVuY29kZXJfZXJyb3JfY2FsbGJhY2soc2VsZik6CisgICAgICAgIGludiA9IHNlbGYudW5tYXBwZWR1bmljb2RlCisKKyAgICAgICAgZSA9IHNlbGYuaW5jcmVtZW50YWxlbmNvZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBlLmVuY29kZSwgaW52LCBUcnVlKQorCisgICAgICAgIGUuZXJyb3JzID0gJ2lnbm9yZScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVuY29kZShpbnYsIFRydWUpLCAnJykKKworICAgICAgICBlLnJlc2V0KCkKKyAgICAgICAgZGVmIHRlbXByZXBsYWNlKGV4Yyk6CisgICAgICAgICAgICByZXR1cm4gKHUnY2FsbGVkJywgZXhjLmVuZCkKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCd0ZXN0LmluY3JlbWVudGFsX2Vycm9yX2NhbGxiYWNrJywgdGVtcHJlcGxhY2UpCisgICAgICAgIGUuZXJyb3JzID0gJ3Rlc3QuaW5jcmVtZW50YWxfZXJyb3JfY2FsbGJhY2snCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lbmNvZGUoaW52LCBUcnVlKSwgJ2NhbGxlZCcpCisKKyAgICAgICAgIyBhZ2FpbgorICAgICAgICBlLmVycm9ycyA9ICdpZ25vcmUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lbmNvZGUoaW52LCBUcnVlKSwgJycpCisKKyAgICBkZWYgdGVzdF9zdHJlYW1yZWFkZXIoc2VsZik6CisgICAgICAgIFVURjhXcml0ZXIgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpCisgICAgICAgIGZvciBuYW1lIGluIFsicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiXToKKyAgICAgICAgICAgIGZvciBzaXplaGludCBpbiBbTm9uZSwgLTFdICsgcmFuZ2UoMSwgMzMpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs2NCwgMTI4LCAyNTYsIDUxMiwgMTAyNF06CisgICAgICAgICAgICAgICAgaXN0cmVhbSA9IHNlbGYucmVhZGVyKFN0cmluZ0lPKHNlbGYudHN0cmluZ1swXSkpCisgICAgICAgICAgICAgICAgb3N0cmVhbSA9IFVURjhXcml0ZXIoU3RyaW5nSU8oKSkKKyAgICAgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihpc3RyZWFtLCBuYW1lKQorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmdW5jKHNpemVoaW50KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gInJlYWRsaW5lcyI6CisgICAgICAgICAgICAgICAgICAgICAgICBvc3RyZWFtLndyaXRlbGluZXMoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zdHJlYW0ud3JpdGUoZGF0YSkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3N0cmVhbS5nZXR2YWx1ZSgpLCBzZWxmLnRzdHJpbmdbMV0pCisKKyAgICBkZWYgdGVzdF9zdHJlYW13cml0ZXIoc2VsZik6CisgICAgICAgIHJlYWRmdW5jcyA9ICgncmVhZCcsICdyZWFkbGluZScsICdyZWFkbGluZXMnKQorICAgICAgICBVVEY4UmVhZGVyID0gY29kZWNzLmdldHJlYWRlcigndXRmLTgnKQorICAgICAgICBmb3IgbmFtZSBpbiByZWFkZnVuY3M6CisgICAgICAgICAgICBmb3Igc2l6ZWhpbnQgaW4gW05vbmVdICsgcmFuZ2UoMSwgMzMpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs2NCwgMTI4LCAyNTYsIDUxMiwgMTAyNF06CisgICAgICAgICAgICAgICAgaXN0cmVhbSA9IFVURjhSZWFkZXIoU3RyaW5nSU8oc2VsZi50c3RyaW5nWzFdKSkKKyAgICAgICAgICAgICAgICBvc3RyZWFtID0gc2VsZi53cml0ZXIoU3RyaW5nSU8oKSkKKyAgICAgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihpc3RyZWFtLCBuYW1lKQorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGlmIHNpemVoaW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZ1bmMoc2l6ZWhpbnQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZnVuYygpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJyZWFkbGluZXMiOgorICAgICAgICAgICAgICAgICAgICAgICAgb3N0cmVhbS53cml0ZWxpbmVzKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvc3RyZWFtLndyaXRlKGRhdGEpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zdHJlYW0uZ2V0dmFsdWUoKSwgc2VsZi50c3RyaW5nWzBdKQorCitjbGFzcyBUZXN0QmFzZV9NYXBwaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXNzX2VuY3Rlc3QgPSBbXQorICAgIHBhc3NfZGVjdGVzdCA9IFtdCisgICAgc3VwbWFwcyA9IFtdCisgICAgY29kZWN0ZXN0cyA9IFtdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpLmNsb3NlKCkgIyB0ZXN0IGl0IHRvIHJlcG9ydCB0aGUgZXJyb3IgZWFybHkKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiK3NlbGYubWFwZmlsZXVybCkKKworICAgIGRlZiBvcGVuX21hcHBpbmdfZmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHRlc3Rfc3VwcG9ydC5vcGVuX3VybHJlc291cmNlKHNlbGYubWFwZmlsZXVybCkKKworICAgIGRlZiB0ZXN0X21hcHBpbmdfZmlsZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5tYXBmaWxldXJsLmVuZHN3aXRoKCcueG1sJyk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X21hcHBpbmdfZmlsZV91Y20oKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9tYXBwaW5nX2ZpbGVfcGxhaW4oKQorCisgICAgZGVmIF90ZXN0X21hcHBpbmdfZmlsZV9wbGFpbihzZWxmKToKKyAgICAgICAgX3VuaWNociA9IGxhbWJkYSBjOiBldmFsKCJ1J1xcVSUwOHgnIiAlIGludChjLCAxNikpCisgICAgICAgIHVuaWNocnMgPSBsYW1iZGEgczogdScnLmpvaW4oX3VuaWNocihjKSBmb3IgYyBpbiBzLnNwbGl0KCcrJykpCisgICAgICAgIHVydF93YSA9IHt9CisKKyAgICAgICAgd2l0aCBzZWxmLm9wZW5fbWFwcGluZ19maWxlKCkgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZGF0YSA9IGxpbmUuc3BsaXQoJyMnKVswXS5zdHJpcCgpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YSkgIT0gMjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGNzZXR2YWwgPSBldmFsKGRhdGFbMF0pCisgICAgICAgICAgICAgICAgaWYgY3NldHZhbCA8PSAweDdGOgorICAgICAgICAgICAgICAgICAgICBjc2V0Y2ggPSBjaHIoY3NldHZhbCAmIDB4ZmYpCisgICAgICAgICAgICAgICAgZWxpZiBjc2V0dmFsID49IDB4MTAwMDAwMDoKKyAgICAgICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgPj4gMjQpICsgY2hyKChjc2V0dmFsID4+IDE2KSAmIDB4ZmYpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHIoKGNzZXR2YWwgPj4gOCkgJiAweGZmKSArIGNocihjc2V0dmFsICYgMHhmZikKKyAgICAgICAgICAgICAgICBlbGlmIGNzZXR2YWwgPj0gMHgxMDAwMDoKKyAgICAgICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgPj4gMTYpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHIoKGNzZXR2YWwgPj4gOCkgJiAweGZmKSArIGNocihjc2V0dmFsICYgMHhmZikKKyAgICAgICAgICAgICAgICBlbGlmIGNzZXR2YWwgPj0gMHgxMDA6CisgICAgICAgICAgICAgICAgICAgIGNzZXRjaCA9IGNocihjc2V0dmFsID4+IDgpICsgY2hyKGNzZXR2YWwgJiAweGZmKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICB1bmljaCA9IHVuaWNocnMoZGF0YVsxXSkKKyAgICAgICAgICAgICAgICBpZiB1bmljaCA9PSB1J1x1ZmZmZCcgb3IgdW5pY2ggaW4gdXJ0X3dhOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHVydF93YVt1bmljaF0gPSBjc2V0Y2gKKworICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3Rwb2ludChjc2V0Y2gsIHVuaWNoKQorCisgICAgZGVmIF90ZXN0X21hcHBpbmdfZmlsZV91Y20oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpIGFzIGY6CisgICAgICAgICAgICB1Y21kYXRhID0gZi5yZWFkKCkKKyAgICAgICAgdWMgPSByZS5maW5kYWxsKCc8YSB1PSIoW0EtRjAtOV17NH0pIiBiPSIoWzAtOUEtRiBdKykiLz4nLCB1Y21kYXRhKQorICAgICAgICBmb3IgdW5pLCBjb2RlZCBpbiB1YzoKKyAgICAgICAgICAgIHVuaWNoID0gdW5pY2hyKGludCh1bmksIDE2KSkKKyAgICAgICAgICAgIGNvZGVjaCA9ICcnLmpvaW4oY2hyKGludChjLCAxNikpIGZvciBjIGluIGNvZGVkLnNwbGl0KCkpCisgICAgICAgICAgICBzZWxmLl90ZXN0cG9pbnQoY29kZWNoLCB1bmljaCkKKworICAgIGRlZiB0ZXN0X21hcHBpbmdfc3VwcGxlbWVudGFsKHNlbGYpOgorICAgICAgICBmb3IgbWFwcGluZyBpbiBzZWxmLnN1cG1hcHM6CisgICAgICAgICAgICBzZWxmLl90ZXN0cG9pbnQoKm1hcHBpbmcpCisKKyAgICBkZWYgX3Rlc3Rwb2ludChzZWxmLCBjc2V0Y2gsIHVuaWNoKToKKyAgICAgICAgaWYgKGNzZXRjaCwgdW5pY2gpIG5vdCBpbiBzZWxmLnBhc3NfZW5jdGVzdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNoLmVuY29kZShzZWxmLmVuY29kaW5nKSwgY3NldGNoKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvciwgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRW5jb2RpbmcgZmFpbGVkIHdoaWxlIHRlc3RpbmcgJXMgLT4gJXM6ICVzJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHVuaWNoKSwgcmVwcihjc2V0Y2gpLCBleGMucmVhc29uKSkKKyAgICAgICAgaWYgKGNzZXRjaCwgdW5pY2gpIG5vdCBpbiBzZWxmLnBhc3NfZGVjdGVzdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzZXRjaC5kZWNvZGUoc2VsZi5lbmNvZGluZyksIHVuaWNoKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvciwgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRGVjb2RpbmcgZmFpbGVkIHdoaWxlIHRlc3RpbmcgJXMgLT4gJXM6ICVzJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGNzZXRjaCksIHJlcHIodW5pY2gpLCBleGMucmVhc29uKSkKKworICAgIGRlZiB0ZXN0X2Vycm9yaGFuZGxlKHNlbGYpOgorICAgICAgICBmb3Igc291cmNlLCBzY2hlbWUsIGV4cGVjdGVkIGluIHNlbGYuY29kZWN0ZXN0czoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc291cmNlLCBieXRlcyk6CisgICAgICAgICAgICAgICAgZnVuYyA9IHNvdXJjZS5kZWNvZGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVuYyA9IHNvdXJjZS5lbmNvZGUKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc291cmNlLCBieXRlcyk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMoc2VsZi5lbmNvZGluZywgc2NoZW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShyZXN1bHQpIGlzIHVuaWNvZGUsIHR5cGUocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclci5kZWNvZGUoJXIsICVyKT0lciAhPSAlcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzb3VyY2UsIHNlbGYuZW5jb2RpbmcsIHNjaGVtZSwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKHNlbGYuZW5jb2RpbmcsIHNjaGVtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocmVzdWx0KSBpcyBieXRlcywgdHlwZShyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyLmVuY29kZSglciwgJXIpPSVyICE9ICVyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNvdXJjZSwgc2VsZi5lbmNvZGluZywgc2NoZW1lLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGZ1bmMsIHNlbGYuZW5jb2RpbmcsIHNjaGVtZSkKKworZGVmIGxvYWRfdGVzdHN0cmluZyhuYW1lKToKKyAgICBkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2Nqa2VuY29kaW5ncycpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkaXIsIG5hbWUgKyAnLnR4dCcpLCAncmInKSBhcyBmOgorICAgICAgICBlbmNvZGVkID0gZi5yZWFkKCkKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRpciwgbmFtZSArICctdXRmOC50eHQnKSwgJ3JiJykgYXMgZjoKKyAgICAgICAgdXRmOCA9IGYucmVhZCgpCisgICAgcmV0dXJuIGVuY29kZWQsIHV0ZjgKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X211bHRpZmlsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X211bHRpZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDMwNzViCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXVsdGlmaWxlLnB5CkBAIC0wLDAgKzEsNjcgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CittaW1ldG9vbHMgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnbWltZXRvb2xzJywgZGVwcmVjYXRlZD1UcnVlKQorbXVsdGlmaWxlID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ211bHRpZmlsZScsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2ltcG9ydCBjU3RyaW5nSU8KKworbXNnID0gIiIiTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOworICAgICAgICBib3VuZGFyeT0iPT09PT09PT09PT09PT09PT09PT09XzU5MDQ1MzY2Nz09XyIKK1gtT3JpZ2luYWxBcnJpdmFsVGltZTogMDUgRmViIDIwMDIgMDM6NDM6MjMuMDMxMCAoVVRDKSBGSUxFVElNRT1bNDJEODhDRTA6MDFDMUFERjddCisKKy0tPT09PT09PT09PT09PT09PT09PT09XzU5MDQ1MzY2Nz09XworQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7CisgICAgICAgIGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT09PT09PT1fNTkwNDUzNjc3PT1fLkFMVCIKKworLS09PT09PT09PT09PT09PT09PT09PT1fNTkwNDUzNjc3PT1fLkFMVAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSI7IGZvcm1hdD1mbG93ZWQKKwordGVzdCBBCistLT09PT09PT09PT09PT09PT09PT09PV81OTA0NTM2Nzc9PV8uQUxUCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0idXMtYXNjaWkiCisKKzxodG1sPgorPGI+dGVzdCBCPC9mb250PjwvYj48L2h0bWw+CisKKy0tPT09PT09PT09PT09PT09PT09PT09XzU5MDQ1MzY3Nz09Xy5BTFQtLQorCistLT09PT09PT09PT09PT09PT09PT09PV81OTA0NTM2Njc9PV8KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iYXR0LnR4dCIKKworQXR0YWNoZWQgQ29udGVudC4KK0F0dGFjaGVkIENvbnRlbnQuCitBdHRhY2hlZCBDb250ZW50LgorQXR0YWNoZWQgQ29udGVudC4KKworLS09PT09PT09PT09PT09PT09PT09PT1fNTkwNDUzNjY3PT1fLS0KKworIiIiCisKK2RlZiBnZXRNSU1FTXNnKG1mKToKKyAgICBnbG9iYWwgYm91bmRhcmllcywgbGluZWNvdW50CisgICAgbXNnID0gbWltZXRvb2xzLk1lc3NhZ2UobWYpCisKKyAgICAjcHJpbnQgIlRZUEU6ICVzIiAlIG1zZy5nZXR0eXBlKCkKKyAgICBpZiBtc2cuZ2V0bWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgYm91bmRhcnkgPSBtc2cuZ2V0cGFyYW0oImJvdW5kYXJ5IikKKyAgICAgICAgYm91bmRhcmllcyArPSAxCisKKyAgICAgICAgbWYucHVzaChib3VuZGFyeSkKKyAgICAgICAgd2hpbGUgbWYubmV4dCgpOgorICAgICAgICAgICAgZ2V0TUlNRU1zZyhtZikKKyAgICAgICAgbWYucG9wKCkKKyAgICBlbHNlOgorICAgICAgICBsaW5lcyA9IG1mLnJlYWRsaW5lcygpCisgICAgICAgIGxpbmVjb3VudCArPSBsZW4obGluZXMpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBnbG9iYWwgYm91bmRhcmllcywgbGluZWNvdW50CisgICAgYm91bmRhcmllcyA9IDAKKyAgICBsaW5lY291bnQgPSAwCisgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTyhtc2cpCisgICAgZ2V0TUlNRU1zZyhtdWx0aWZpbGUuTXVsdGlGaWxlKGYpKQorICAgIGFzc2VydCBib3VuZGFyaWVzID09IDIKKyAgICBhc3NlcnQgbGluZWNvdW50ID09IDkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjYzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKQEAgLTAsMCArMSwyNTI3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIworIyBVbml0IHRlc3RzIGZvciB0aGUgbXVsdGlwcm9jZXNzaW5nIHBhY2thZ2UKKyMKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgUXVldWUKK2ltcG9ydCB0aW1lCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBnYworaW1wb3J0IHNpZ25hbAoraW1wb3J0IGFycmF5CitpbXBvcnQgc29ja2V0CitpbXBvcnQgcmFuZG9tCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGVycm5vCitpbXBvcnQgdGVzdC5zY3JpcHRfaGVscGVyCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK19tdWx0aXByb2Nlc3NpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX211bHRpcHJvY2Vzc2luZycpCisjIGltcG9ydCB0aHJlYWRpbmcgYWZ0ZXIgX211bHRpcHJvY2Vzc2luZyB0byByYWlzZSBhIG1vcmUgcmVsZXZhbnQgZXJyb3IKKyMgbWVzc2FnZTogIk5vIG1vZHVsZSBuYW1lZCBfbXVsdGlwcm9jZXNzaW5nIi4gX211bHRpcHJvY2Vzc2luZyBpcyBub3QgY29tcGlsZWQKKyMgd2l0aG91dCB0aHJlYWQgc3VwcG9ydC4KK2ltcG9ydCB0aHJlYWRpbmcKKworIyBXb3JrIGFyb3VuZCBicm9rZW4gc2VtX29wZW4gaW1wbGVtZW50YXRpb25zCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplJykKKworaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5kdW1teQoraW1wb3J0IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmhlYXAKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcucG9vbAorCitmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgdXRpbAorCit0cnk6CisgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHJlZHVjdGlvbgorICAgIEhBU19SRURVQ1RJT04gPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgSEFTX1JFRFVDVElPTiA9IEZhbHNlCisKK3RyeToKKyAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFZhbHVlLCBjb3B5CisgICAgSEFTX1NIQVJFRENUWVBFUyA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBIQVNfU0hBUkVEQ1RZUEVTID0gRmFsc2UKKwordHJ5OgorICAgIGltcG9ydCBtc3ZjcnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBtc3ZjcnQgPSBOb25lCisKKyMKKyMKKyMKKworbGF0aW4gPSBzdHIKKworIworIyBDb25zdGFudHMKKyMKKworTE9HX0xFVkVMID0gdXRpbC5TVUJXQVJOSU5HCisjTE9HX0xFVkVMID0gbG9nZ2luZy5ERUJVRworCitERUxUQSA9IDAuMQorQ0hFQ0tfVElNSU5HUyA9IEZhbHNlICAgICAjIG1ha2luZyB0cnVlIG1ha2VzIHRlc3RzIHRha2UgYSBsb3QgbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIGNhbiBzb21ldGltZXMgY2F1c2Ugc29tZSBub24tc2VyaW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZhaWx1cmVzIGJlY2F1c2Ugc29tZSBjYWxscyBibG9jayBhIGJpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxvbmdlciB0aGFuIGV4cGVjdGVkCitpZiBDSEVDS19USU1JTkdTOgorICAgIFRJTUVPVVQxLCBUSU1FT1VUMiwgVElNRU9VVDMgPSAwLjgyLCAwLjM1LCAxLjQKK2Vsc2U6CisgICAgVElNRU9VVDEsIFRJTUVPVVQyLCBUSU1FT1VUMyA9IDAuMSwgMC4xLCAwLjEKKworSEFWRV9HRVRWQUxVRSA9IG5vdCBnZXRhdHRyKF9tdWx0aXByb2Nlc3NpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRScsIEZhbHNlKQorCitXSU4zMiA9IChzeXMucGxhdGZvcm0gPT0gIndpbjMyIikKKwordHJ5OgorICAgIE1BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorZXhjZXB0OgorICAgIE1BWEZEID0gMjU2CisKKyMKKyMgU29tZSB0ZXN0cyByZXF1aXJlIGN0eXBlcworIworCit0cnk6CisgICAgZnJvbSBjdHlwZXMgaW1wb3J0IFN0cnVjdHVyZSwgY19pbnQsIGNfZG91YmxlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgU3RydWN0dXJlID0gb2JqZWN0CisgICAgY19pbnQgPSBjX2RvdWJsZSA9IE5vbmUKKworCitkZWYgY2hlY2tfZW5vdWdoX3NlbWFwaG9yZXMoKToKKyAgICAiIiJDaGVjayB0aGF0IHRoZSBzeXN0ZW0gc3VwcG9ydHMgZW5vdWdoIHNlbWFwaG9yZXMgdG8gcnVuIHRoZSB0ZXN0LiIiIgorICAgICMgbWluaW11bSBudW1iZXIgb2Ygc2VtYXBob3JlcyBhdmFpbGFibGUgYWNjb3JkaW5nIHRvIFBPU0lYCisgICAgbnNlbXNfbWluID0gMjU2CisgICAgdHJ5OgorICAgICAgICBuc2VtcyA9IG9zLnN5c2NvbmYoIlNDX1NFTV9OU0VNU19NQVgiKQorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAjIHN5c2NvbmYgbm90IGF2YWlsYWJsZSBvciBzZXR0aW5nIG5vdCBhdmFpbGFibGUKKyAgICAgICAgcmV0dXJuCisgICAgaWYgbnNlbXMgPT0gLTEgb3IgbnNlbXMgPj0gbnNlbXNfbWluOgorICAgICAgICByZXR1cm4KKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGhlIE9TIGRvZXNuJ3Qgc3VwcG9ydCBlbm91Z2ggc2VtYXBob3JlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHJ1biB0aGUgdGVzdCAocmVxdWlyZWQ6ICVkKS4iICUgbnNlbXNfbWluKQorCisKKyMKKyMgQ3JlYXRlcyBhIHdyYXBwZXIgZm9yIGEgZnVuY3Rpb24gd2hpY2ggcmVjb3JkcyB0aGUgdGltZSBpdCB0YWtlcyB0byBmaW5pc2gKKyMKKworY2xhc3MgVGltaW5nV3JhcHBlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMpOgorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIHNlbGYuZWxhcHNlZCA9IE5vbmUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZ1bmMoKmFyZ3MsICoqa3dkcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuZWxhcHNlZCA9IHRpbWUudGltZSgpIC0gdAorCisjCisjIEJhc2UgY2xhc3MgZm9yIHRlc3QgY2FzZXMKKyMKKworY2xhc3MgQmFzZVRlc3RDYXNlKG9iamVjdCk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCAnbWFuYWdlcicsICd0aHJlYWRzJykKKworICAgIGRlZiBhc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChzZWxmLCBhLCBiKToKKyAgICAgICAgaWYgQ0hFQ0tfVElNSU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYSwgYiwgMSkKKworICAgIGRlZiBhc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZChzZWxmLCB2YWx1ZSwgZnVuYywgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSBmdW5jKCphcmdzKQorICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCByZXMpCisKKyAgICAjIEZvciB0aGUgc2FuaXR5IG9mIFdpbmRvd3MgdXNlcnMsIHJhdGhlciB0aGFuIGNyYXNoaW5nIG9yIGZyZWV6aW5nIGluCisgICAgIyBtdWx0aXBsZSB3YXlzLgorICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic2hvdWxkbid0IHRyeSB0byBwaWNrbGUgYSB0ZXN0IGNhc2UiKQorCisgICAgX19yZWR1Y2VfZXhfXyA9IF9fcmVkdWNlX18KKworIworIyBSZXR1cm4gdGhlIHZhbHVlIG9mIGEgc2VtYXBob3JlCisjCisKK2RlZiBnZXRfdmFsdWUoc2VsZik6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfdmFsdWUoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX1NlbWFwaG9yZV9fdmFsdWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworIworIyBUZXN0Y2FzZXMKKyMKKworY2xhc3MgX1Rlc3RQcm9jZXNzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCAndGhyZWFkcycpCisKKyAgICBkZWYgdGVzdF9jdXJyZW50KHNlbGYpOgorICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ3RocmVhZHMnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgY3VycmVudCA9IHNlbGYuY3VycmVudF9wcm9jZXNzKCkKKyAgICAgICAgYXV0aGtleSA9IGN1cnJlbnQuYXV0aGtleQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdXJyZW50LmlzX2FsaXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY3VycmVudC5kYWVtb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhdXRoa2V5LCBieXRlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihhdXRoa2V5KSA+IDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycmVudC5pZGVudCwgb3MuZ2V0cGlkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycmVudC5leGl0Y29kZSwgTm9uZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdChjbHMsIHEsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICBjdXJyZW50ID0gY2xzLmN1cnJlbnRfcHJvY2VzcygpCisgICAgICAgIHEucHV0KGFyZ3MpCisgICAgICAgIHEucHV0KGt3ZHMpCisgICAgICAgIHEucHV0KGN1cnJlbnQubmFtZSkKKyAgICAgICAgaWYgY2xzLlRZUEUgIT0gJ3RocmVhZHMnOgorICAgICAgICAgICAgcS5wdXQoYnl0ZXMoY3VycmVudC5hdXRoa2V5KSkKKyAgICAgICAgICAgIHEucHV0KGN1cnJlbnQucGlkKQorCisgICAgZGVmIHRlc3RfcHJvY2VzcyhzZWxmKToKKyAgICAgICAgcSA9IHNlbGYuUXVldWUoMSkKKyAgICAgICAgZSA9IHNlbGYuRXZlbnQoKQorICAgICAgICBhcmdzID0gKHEsIDEsIDIpCisgICAgICAgIGt3YXJncyA9IHsnaGVsbG8nOjIzLCAnYnllJzoyLjU0fQorICAgICAgICBuYW1lID0gJ1NvbWVQcm9jZXNzJworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKAorICAgICAgICAgICAgdGFyZ2V0PXNlbGYuX3Rlc3QsIGFyZ3M9YXJncywga3dhcmdzPWt3YXJncywgbmFtZT1uYW1lCisgICAgICAgICAgICApCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBjdXJyZW50ID0gc2VsZi5jdXJyZW50X3Byb2Nlc3MoKQorCisgICAgICAgIGlmIHNlbGYuVFlQRSAhPSAndGhyZWFkcyc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYXV0aGtleSwgY3VycmVudC5hdXRoa2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5kYWVtb24sIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkgaXMgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCBOb25lKQorCisgICAgICAgIHAuc3RhcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0KCksIGFyZ3NbMTpdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0KCksIGt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldCgpLCBwLm5hbWUpCisgICAgICAgIGlmIHNlbGYuVFlQRSAhPSAndGhyZWFkcyc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0KCksIGN1cnJlbnQuYXV0aGtleSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5nZXQoKSwgcC5waWQpCisKKyAgICAgICAgcC5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3Rlcm1pbmF0ZShjbHMpOgorICAgICAgICB0aW1lLnNsZWVwKDEwMDApCisKKyAgICBkZWYgdGVzdF90ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAndGhyZWFkcyc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X3Rlcm1pbmF0ZSkKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgTm9uZSkKKworICAgICAgICBwLnRlcm1pbmF0ZSgpCisKKyAgICAgICAgam9pbiA9IFRpbWluZ1dyYXBwZXIocC5qb2luKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChqb2luLmVsYXBzZWQsIDAuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKworICAgICAgICBwLmpvaW4oKQorCisgICAgICAgICMgWFhYIHNvbWV0aW1lcyBnZXQgcC5leGl0Y29kZSA9PSAwIG9uIFdpbmRvd3MgLi4uCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIC1zaWduYWwuU0lHVEVSTSkKKworICAgIGRlZiB0ZXN0X2NwdV9jb3VudChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3B1cyA9IG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQorICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgIGNwdXMgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGNwdXMpIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNwdXMgPj0gMSkKKworICAgIGRlZiB0ZXN0X2FjdGl2ZV9jaGlsZHJlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpLCBsaXN0KQorCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXRpbWUuc2xlZXAsIGFyZ3M9KERFTFRBLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKworICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKworICAgICAgICBwLmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfcmVjdXJzaW9uKGNscywgd2Nvbm4sIGlkKToKKyAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGZvcmtpbmcKKyAgICAgICAgd2Nvbm4uc2VuZChpZCkKKyAgICAgICAgaWYgbGVuKGlkKSA8IDI6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgICAgICBwID0gY2xzLlByb2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIHRhcmdldD1jbHMuX3Rlc3RfcmVjdXJzaW9uLCBhcmdzPSh3Y29ubiwgaWQrW2ldKQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICAgICAgcC5qb2luKCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgcmNvbm4sIHdjb25uID0gc2VsZi5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWN1cnNpb24od2Nvbm4sIFtdKQorCisgICAgICAgIHRpbWUuc2xlZXAoREVMVEEpCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIHdoaWxlIHJjb25uLnBvbGwoKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmNvbm4ucmVjdigpKQorCisgICAgICAgIGV4cGVjdGVkID0gWworICAgICAgICAgICAgW10sCisgICAgICAgICAgICAgIFswXSwKKyAgICAgICAgICAgICAgICBbMCwgMF0sCisgICAgICAgICAgICAgICAgWzAsIDFdLAorICAgICAgICAgICAgICBbMV0sCisgICAgICAgICAgICAgICAgWzEsIDBdLAorICAgICAgICAgICAgICAgIFsxLCAxXQorICAgICAgICAgICAgXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3Rfc3lzX2V4aXQoY2xzLCByZWFzb24sIHRlc3Rmbik6CisgICAgICAgIHN5cy5zdGRlcnIgPSBvcGVuKHRlc3RmbiwgJ3cnKQorICAgICAgICBzeXMuZXhpdChyZWFzb24pCisKKyAgICBkZWYgdGVzdF9zeXNfZXhpdChzZWxmKToKKyAgICAgICAgIyBTZWUgSXNzdWUgMTM4NTQKKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICd0aHJlYWRzJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRlc3RmbiA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3Rfc3VwcG9ydC51bmxpbmssIHRlc3RmbikKKworICAgICAgICBmb3IgcmVhc29uLCBjb2RlIGluICgoWzEsIDIsIDNdLCAxKSwgKCdpZ25vcmUgdGhpcycsIDApKToKKyAgICAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3Rfc3lzX2V4aXQsIGFyZ3M9KHJlYXNvbiwgdGVzdGZuKSkKKyAgICAgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICBwLmpvaW4oNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgY29kZSkKKworICAgICAgICAgICAgd2l0aCBvcGVuKHRlc3RmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkucnN0cmlwKCksIHN0cihyZWFzb24pKQorCisgICAgICAgIGZvciByZWFzb24gaW4gKFRydWUsIEZhbHNlLCA4KToKKyAgICAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXN5cy5leGl0LCBhcmdzPShyZWFzb24sKSkKKyAgICAgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICBwLmpvaW4oNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgcmVhc29uKQorCisjCisjCisjCisKK2NsYXNzIF9VcHBlckNhc2VyKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jaGlsZF9jb25uLCBzZWxmLnBhcmVudF9jb25uID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJlbnRfY29ubi5jbG9zZSgpCisgICAgICAgIGZvciBzIGluIGl0ZXIoc2VsZi5jaGlsZF9jb25uLnJlY3YsIE5vbmUpOgorICAgICAgICAgICAgc2VsZi5jaGlsZF9jb25uLnNlbmQocy51cHBlcigpKQorICAgICAgICBzZWxmLmNoaWxkX2Nvbm4uY2xvc2UoKQorCisgICAgZGVmIHN1Ym1pdChzZWxmLCBzKToKKyAgICAgICAgYXNzZXJ0IHR5cGUocykgaXMgc3RyCisgICAgICAgIHNlbGYucGFyZW50X2Nvbm4uc2VuZChzKQorICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRfY29ubi5yZWN2KCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnBhcmVudF9jb25uLnNlbmQoTm9uZSkKKyAgICAgICAgc2VsZi5wYXJlbnRfY29ubi5jbG9zZSgpCisgICAgICAgIHNlbGYuY2hpbGRfY29ubi5jbG9zZSgpCisKK2NsYXNzIF9UZXN0U3ViY2xhc3NpbmdQcm9jZXNzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nKHNlbGYpOgorICAgICAgICB1cHBlcmNhc2VyID0gX1VwcGVyQ2FzZXIoKQorICAgICAgICB1cHBlcmNhc2VyLmRhZW1vbiA9IFRydWUKKyAgICAgICAgdXBwZXJjYXNlci5zdGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXBwZXJjYXNlci5zdWJtaXQoJ2hlbGxvJyksICdIRUxMTycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXBwZXJjYXNlci5zdWJtaXQoJ3dvcmxkJyksICdXT1JMRCcpCisgICAgICAgIHVwcGVyY2FzZXIuc3RvcCgpCisgICAgICAgIHVwcGVyY2FzZXIuam9pbigpCisKKyMKKyMKKyMKKworZGVmIHF1ZXVlX2VtcHR5KHEpOgorICAgIGlmIGhhc2F0dHIocSwgJ2VtcHR5Jyk6CisgICAgICAgIHJldHVybiBxLmVtcHR5KCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcS5xc2l6ZSgpID09IDAKKworZGVmIHF1ZXVlX2Z1bGwocSwgbWF4c2l6ZSk6CisgICAgaWYgaGFzYXR0cihxLCAnZnVsbCcpOgorICAgICAgICByZXR1cm4gcS5mdWxsKCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcS5xc2l6ZSgpID09IG1heHNpemUKKworCitjbGFzcyBfVGVzdFF1ZXVlKEJhc2VUZXN0Q2FzZSk6CisKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF9wdXQoY2xzLCBxdWV1ZSwgY2hpbGRfY2FuX3N0YXJ0LCBwYXJlbnRfY2FuX2NvbnRpbnVlKToKKyAgICAgICAgY2hpbGRfY2FuX3N0YXJ0LndhaXQoKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgICAgICAgIHF1ZXVlLmdldCgpCisgICAgICAgIHBhcmVudF9jYW5fY29udGludWUuc2V0KCkKKworICAgIGRlZiB0ZXN0X3B1dChzZWxmKToKKyAgICAgICAgTUFYU0laRSA9IDYKKyAgICAgICAgcXVldWUgPSBzZWxmLlF1ZXVlKG1heHNpemU9TUFYU0laRSkKKyAgICAgICAgY2hpbGRfY2FuX3N0YXJ0ID0gc2VsZi5FdmVudCgpCisgICAgICAgIHBhcmVudF9jYW5fY29udGludWUgPSBzZWxmLkV2ZW50KCkKKworICAgICAgICBwcm9jID0gc2VsZi5Qcm9jZXNzKAorICAgICAgICAgICAgdGFyZ2V0PXNlbGYuX3Rlc3RfcHV0LAorICAgICAgICAgICAgYXJncz0ocXVldWUsIGNoaWxkX2Nhbl9zdGFydCwgcGFyZW50X2Nhbl9jb250aW51ZSkKKyAgICAgICAgICAgICkKKyAgICAgICAgcHJvYy5kYWVtb24gPSBUcnVlCisgICAgICAgIHByb2Muc3RhcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWVfZW1wdHkocXVldWUpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlX2Z1bGwocXVldWUsIE1BWFNJWkUpLCBGYWxzZSkKKworICAgICAgICBxdWV1ZS5wdXQoMSkKKyAgICAgICAgcXVldWUucHV0KDIsIFRydWUpCisgICAgICAgIHF1ZXVlLnB1dCgzLCBUcnVlLCBOb25lKQorICAgICAgICBxdWV1ZS5wdXQoNCwgRmFsc2UpCisgICAgICAgIHF1ZXVlLnB1dCg1LCBGYWxzZSwgTm9uZSkKKyAgICAgICAgcXVldWUucHV0X25vd2FpdCg2KQorCisgICAgICAgICMgdGhlIHZhbHVlcyBtYXkgYmUgaW4gYnVmZmVyIGJ1dCBub3QgeWV0IGluIHBpcGUgc28gc2xlZXAgYSBiaXQKKyAgICAgICAgdGltZS5zbGVlcChERUxUQSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlX2VtcHR5KHF1ZXVlKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWVfZnVsbChxdWV1ZSwgTUFYU0laRSksIFRydWUpCisKKyAgICAgICAgcHV0ID0gVGltaW5nV3JhcHBlcihxdWV1ZS5wdXQpCisgICAgICAgIHB1dF9ub3dhaXQgPSBUaW1pbmdXcmFwcGVyKHF1ZXVlLnB1dF9ub3dhaXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUXVldWUuRnVsbCwgcHV0LCA3LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChwdXQuZWxhcHNlZCwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5GdWxsLCBwdXQsIDcsIEZhbHNlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHB1dC5lbGFwc2VkLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFF1ZXVlLkZ1bGwsIHB1dF9ub3dhaXQsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwocHV0X25vd2FpdC5lbGFwc2VkLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFF1ZXVlLkZ1bGwsIHB1dCwgNywgVHJ1ZSwgVElNRU9VVDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwocHV0LmVsYXBzZWQsIFRJTUVPVVQxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFF1ZXVlLkZ1bGwsIHB1dCwgNywgRmFsc2UsIFRJTUVPVVQyKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHB1dC5lbGFwc2VkLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFF1ZXVlLkZ1bGwsIHB1dCwgNywgVHJ1ZSwgdGltZW91dD1USU1FT1VUMykKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChwdXQuZWxhcHNlZCwgVElNRU9VVDMpCisKKyAgICAgICAgY2hpbGRfY2FuX3N0YXJ0LnNldCgpCisgICAgICAgIHBhcmVudF9jYW5fY29udGludWUud2FpdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZV9lbXB0eShxdWV1ZSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWVfZnVsbChxdWV1ZSwgTUFYU0laRSksIEZhbHNlKQorCisgICAgICAgIHByb2Muam9pbigpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfZ2V0KGNscywgcXVldWUsIGNoaWxkX2Nhbl9zdGFydCwgcGFyZW50X2Nhbl9jb250aW51ZSk6CisgICAgICAgIGNoaWxkX2Nhbl9zdGFydC53YWl0KCkKKyAgICAgICAgI3F1ZXVlLnB1dCgxKQorICAgICAgICBxdWV1ZS5wdXQoMikKKyAgICAgICAgcXVldWUucHV0KDMpCisgICAgICAgIHF1ZXVlLnB1dCg0KQorICAgICAgICBxdWV1ZS5wdXQoNSkKKyAgICAgICAgcGFyZW50X2Nhbl9jb250aW51ZS5zZXQoKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBxdWV1ZSA9IHNlbGYuUXVldWUoKQorICAgICAgICBjaGlsZF9jYW5fc3RhcnQgPSBzZWxmLkV2ZW50KCkKKyAgICAgICAgcGFyZW50X2Nhbl9jb250aW51ZSA9IHNlbGYuRXZlbnQoKQorCisgICAgICAgIHByb2MgPSBzZWxmLlByb2Nlc3MoCisgICAgICAgICAgICB0YXJnZXQ9c2VsZi5fdGVzdF9nZXQsCisgICAgICAgICAgICBhcmdzPShxdWV1ZSwgY2hpbGRfY2FuX3N0YXJ0LCBwYXJlbnRfY2FuX2NvbnRpbnVlKQorICAgICAgICAgICAgKQorICAgICAgICBwcm9jLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcHJvYy5zdGFydCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZV9lbXB0eShxdWV1ZSksIFRydWUpCisKKyAgICAgICAgY2hpbGRfY2FuX3N0YXJ0LnNldCgpCisgICAgICAgIHBhcmVudF9jYW5fY29udGludWUud2FpdCgpCisKKyAgICAgICAgdGltZS5zbGVlcChERUxUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZV9lbXB0eShxdWV1ZSksIEZhbHNlKQorCisgICAgICAgICMgSGFuZ3MgdW5leHBlY3RlZGx5LCByZW1vdmUgZm9yIG5vdworICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChxdWV1ZS5nZXQoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZS5nZXQoVHJ1ZSwgTm9uZSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWUuZ2V0KFRydWUpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlLmdldCh0aW1lb3V0PTEpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlLmdldF9ub3dhaXQoKSwgNSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlX2VtcHR5KHF1ZXVlKSwgVHJ1ZSkKKworICAgICAgICBnZXQgPSBUaW1pbmdXcmFwcGVyKHF1ZXVlLmdldCkKKyAgICAgICAgZ2V0X25vd2FpdCA9IFRpbWluZ1dyYXBwZXIocXVldWUuZ2V0X25vd2FpdCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5FbXB0eSwgZ2V0LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChnZXQuZWxhcHNlZCwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5FbXB0eSwgZ2V0LCBGYWxzZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChnZXQuZWxhcHNlZCwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5FbXB0eSwgZ2V0X25vd2FpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChnZXRfbm93YWl0LmVsYXBzZWQsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUXVldWUuRW1wdHksIGdldCwgVHJ1ZSwgVElNRU9VVDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoZ2V0LmVsYXBzZWQsIFRJTUVPVVQxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFF1ZXVlLkVtcHR5LCBnZXQsIEZhbHNlLCBUSU1FT1VUMikKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChnZXQuZWxhcHNlZCwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5FbXB0eSwgZ2V0LCB0aW1lb3V0PVRJTUVPVVQzKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGdldC5lbGFwc2VkLCBUSU1FT1VUMykKKworICAgICAgICBwcm9jLmpvaW4oKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2ZvcmsoY2xzLCBxdWV1ZSk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwLCAyMCk6CisgICAgICAgICAgICBxdWV1ZS5wdXQoaSkKKyAgICAgICAgIyBub3RlIHRoYXQgYXQgdGhpcyBwb2ludCB0aGUgaXRlbXMgbWF5IG9ubHkgYmUgYnVmZmVyZWQsIHNvIHRoZQorICAgICAgICAjIHByb2Nlc3MgY2Fubm90IHNodXRkb3duIHVudGlsIHRoZSBmZWVkZXIgdGhyZWFkIGhhcyBmaW5pc2hlZAorICAgICAgICAjIHB1c2hpbmcgaXRlbXMgb250byB0aGUgcGlwZS4KKworICAgIGRlZiB0ZXN0X2Zvcmsoc2VsZik6CisgICAgICAgICMgT2xkIHZlcnNpb25zIG9mIFF1ZXVlIHdvdWxkIGZhaWwgdG8gY3JlYXRlIGEgbmV3IGZlZWRlcgorICAgICAgICAjIHRocmVhZCBmb3IgYSBmb3JrZWQgcHJvY2VzcyBpZiB0aGUgb3JpZ2luYWwgcHJvY2VzcyBoYWQgaXRzCisgICAgICAgICMgb3duIGZlZWRlciB0aHJlYWQuICBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhpcyBubyBsb25nZXIKKyAgICAgICAgIyBoYXBwZW5zLgorCisgICAgICAgIHF1ZXVlID0gc2VsZi5RdWV1ZSgpCisKKyAgICAgICAgIyBwdXQgaXRlbXMgb24gcXVldWUgc28gdGhhdCBtYWluIHByb2Nlc3Mgc3RhcnRzIGEgZmVlZGVyIHRocmVhZAorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBxdWV1ZS5wdXQoaSkKKworICAgICAgICAjIHdhaXQgdG8gbWFrZSBzdXJlIHRocmVhZCBzdGFydHMgYmVmb3JlIHdlIGZvcmsgYSBuZXcgcHJvY2VzcworICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQorCisgICAgICAgICMgZm9yayBwcm9jZXNzCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfZm9yaywgYXJncz0ocXVldWUsKSkKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBhbGwgZXhwZWN0ZWQgaXRlbXMgYXJlIGluIHRoZSBxdWV1ZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlLmdldCgpLCBpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5FbXB0eSwgcXVldWUuZ2V0LCBGYWxzZSkKKworICAgICAgICBwLmpvaW4oKQorCisgICAgZGVmIHRlc3RfcXNpemUoc2VsZik6CisgICAgICAgIHEgPSBzZWxmLlF1ZXVlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnFzaXplKCksIDApCisgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHEucHV0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5xc2l6ZSgpLCAxKQorICAgICAgICBxLnB1dCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEucXNpemUoKSwgMikKKyAgICAgICAgcS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEucXNpemUoKSwgMSkKKyAgICAgICAgcS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEucXNpemUoKSwgMCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF90YXNrX2RvbmUoY2xzLCBxKToKKyAgICAgICAgZm9yIG9iaiBpbiBpdGVyKHEuZ2V0LCBOb25lKToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoREVMVEEpCisgICAgICAgICAgICBxLnRhc2tfZG9uZSgpCisKKyAgICBkZWYgdGVzdF90YXNrX2RvbmUoc2VsZik6CisgICAgICAgIHF1ZXVlID0gc2VsZi5Kb2luYWJsZVF1ZXVlKCkKKworICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDUpIGFuZCBub3QgaGFzYXR0cihxdWV1ZSwgJ3Rhc2tfZG9uZScpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicmVxdWlyZXMgJ3F1ZXVlLnRhc2tfZG9uZSgpJyBtZXRob2QiKQorCisgICAgICAgIHdvcmtlcnMgPSBbc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X3Rhc2tfZG9uZSwgYXJncz0ocXVldWUsKSkKKyAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoNCldCisKKyAgICAgICAgZm9yIHAgaW4gd29ya2VyczoKKyAgICAgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgcC5zdGFydCgpCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwKToKKyAgICAgICAgICAgIHF1ZXVlLnB1dChpKQorCisgICAgICAgIHF1ZXVlLmpvaW4oKQorCisgICAgICAgIGZvciBwIGluIHdvcmtlcnM6CisgICAgICAgICAgICBxdWV1ZS5wdXQoTm9uZSkKKworICAgICAgICBmb3IgcCBpbiB3b3JrZXJzOgorICAgICAgICAgICAgcC5qb2luKCkKKworIworIworIworCitjbGFzcyBfVGVzdExvY2soQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2xvY2soc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLkxvY2soKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2suYWNxdWlyZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2suYWNxdWlyZShGYWxzZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2sucmVsZWFzZSgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgdGhyZWFkaW5nLlRocmVhZEVycm9yKSwgbG9jay5yZWxlYXNlKQorCisgICAgZGVmIHRlc3RfcmxvY2soc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLlJMb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLmFjcXVpcmUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLmFjcXVpcmUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLmFjcXVpcmUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLnJlbGVhc2UoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLnJlbGVhc2UoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLnJlbGVhc2UoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEFzc2VydGlvbkVycm9yLCBSdW50aW1lRXJyb3IpLCBsb2NrLnJlbGVhc2UpCisKKyAgICBkZWYgdGVzdF9sb2NrX2NvbnRleHQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5Mb2NrKCk6CisgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgX1Rlc3RTZW1hcGhvcmUoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiBfdGVzdF9zZW1hcGhvcmUoc2VsZiwgc2VtKToKKyAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgyLCBnZXRfdmFsdWUsIHNlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW0uYWNxdWlyZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDEsIGdldF92YWx1ZSwgc2VtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbS5hY3F1aXJlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoMCwgZ2V0X3ZhbHVlLCBzZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VtLmFjcXVpcmUoRmFsc2UpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgwLCBnZXRfdmFsdWUsIHNlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW0ucmVsZWFzZSgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDEsIGdldF92YWx1ZSwgc2VtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbS5yZWxlYXNlKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoMiwgZ2V0X3ZhbHVlLCBzZW0pCisKKyAgICBkZWYgdGVzdF9zZW1hcGhvcmUoc2VsZik6CisgICAgICAgIHNlbSA9IHNlbGYuU2VtYXBob3JlKDIpCisgICAgICAgIHNlbGYuX3Rlc3Rfc2VtYXBob3JlKHNlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW0ucmVsZWFzZSgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDMsIGdldF92YWx1ZSwgc2VtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbS5yZWxlYXNlKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoNCwgZ2V0X3ZhbHVlLCBzZW0pCisKKyAgICBkZWYgdGVzdF9ib3VuZGVkX3NlbWFwaG9yZShzZWxmKToKKyAgICAgICAgc2VtID0gc2VsZi5Cb3VuZGVkU2VtYXBob3JlKDIpCisgICAgICAgIHNlbGYuX3Rlc3Rfc2VtYXBob3JlKHNlbSkKKyAgICAgICAgIyBDdXJyZW50bHkgZmFpbHMgb24gT1MvWAorICAgICAgICAjaWYgSEFWRV9HRVRWQUxVRToKKyAgICAgICAgIyAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZW0ucmVsZWFzZSkKKyAgICAgICAgIyAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDIsIGdldF92YWx1ZSwgc2VtKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5UWVBFICE9ICdwcm9jZXNzZXMnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VtID0gc2VsZi5TZW1hcGhvcmUoMCkKKyAgICAgICAgYWNxdWlyZSA9IFRpbWluZ1dyYXBwZXIoc2VtLmFjcXVpcmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3F1aXJlKEZhbHNlKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoYWNxdWlyZS5lbGFwc2VkLCAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3F1aXJlKEZhbHNlLCBOb25lKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoYWNxdWlyZS5lbGFwc2VkLCAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3F1aXJlKEZhbHNlLCBUSU1FT1VUMSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGFjcXVpcmUuZWxhcHNlZCwgMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjcXVpcmUoVHJ1ZSwgVElNRU9VVDIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChhY3F1aXJlLmVsYXBzZWQsIFRJTUVPVVQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWNxdWlyZSh0aW1lb3V0PVRJTUVPVVQzKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoYWNxdWlyZS5lbGFwc2VkLCBUSU1FT1VUMykKKworCitjbGFzcyBfVGVzdENvbmRpdGlvbihCYXNlVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGYoY2xzLCBjb25kLCBzbGVlcGluZywgd29rZW4sIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGNvbmQuYWNxdWlyZSgpCisgICAgICAgIHNsZWVwaW5nLnJlbGVhc2UoKQorICAgICAgICBjb25kLndhaXQodGltZW91dCkKKyAgICAgICAgd29rZW4ucmVsZWFzZSgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisKKyAgICBkZWYgY2hlY2tfaW52YXJpYW50KHNlbGYsIGNvbmQpOgorICAgICAgICAjIHRoaXMgaXMgb25seSBzdXBwb3NlZCB0byBzdWNjZWVkIHdoZW4gdGhlcmUgYXJlIG5vIHNsZWVwZXJzCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzbGVlcGVycyA9IChjb25kLl9zbGVlcGluZ19jb3VudC5nZXRfdmFsdWUoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZC5fd29rZW5fY291bnQuZ2V0X3ZhbHVlKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGVlcGVycywgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmQuX3dhaXRfc2VtYXBob3JlLmdldF92YWx1ZSgpLCAwKQorICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfbm90aWZ5KHNlbGYpOgorICAgICAgICBjb25kID0gc2VsZi5Db25kaXRpb24oKQorICAgICAgICBzbGVlcGluZyA9IHNlbGYuU2VtYXBob3JlKDApCisgICAgICAgIHdva2VuID0gc2VsZi5TZW1hcGhvcmUoMCkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLmYsIGFyZ3M9KGNvbmQsIHNsZWVwaW5nLCB3b2tlbikpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKworICAgICAgICBwID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5mLCBhcmdzPShjb25kLCBzbGVlcGluZywgd29rZW4pKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisKKyAgICAgICAgIyB3YWl0IGZvciBib3RoIGNoaWxkcmVuIHRvIHN0YXJ0IHNsZWVwaW5nCisgICAgICAgIHNsZWVwaW5nLmFjcXVpcmUoKQorICAgICAgICBzbGVlcGluZy5hY3F1aXJlKCkKKworICAgICAgICAjIGNoZWNrIG5vIHByb2Nlc3MvdGhyZWFkIGhhcyB3b2tlbiB1cAorICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDAsIGdldF92YWx1ZSwgd29rZW4pCisKKyAgICAgICAgIyB3YWtlIHVwIG9uZSBwcm9jZXNzL3RocmVhZAorICAgICAgICBjb25kLmFjcXVpcmUoKQorICAgICAgICBjb25kLm5vdGlmeSgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisKKyAgICAgICAgIyBjaGVjayBvbmUgcHJvY2Vzcy90aHJlYWQgaGFzIHdva2VuIHVwCisgICAgICAgIHRpbWUuc2xlZXAoREVMVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoMSwgZ2V0X3ZhbHVlLCB3b2tlbikKKworICAgICAgICAjIHdha2UgdXAgYW5vdGhlcgorICAgICAgICBjb25kLmFjcXVpcmUoKQorICAgICAgICBjb25kLm5vdGlmeSgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisKKyAgICAgICAgIyBjaGVjayBvdGhlciBoYXMgd29rZW4gdXAKKyAgICAgICAgdGltZS5zbGVlcChERUxUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgyLCBnZXRfdmFsdWUsIHdva2VuKQorCisgICAgICAgICMgY2hlY2sgc3RhdGUgaXMgbm90IG11Y2tlZCB1cAorICAgICAgICBzZWxmLmNoZWNrX2ludmFyaWFudChjb25kKQorICAgICAgICBwLmpvaW4oKQorCisgICAgZGVmIHRlc3Rfbm90aWZ5X2FsbChzZWxmKToKKyAgICAgICAgY29uZCA9IHNlbGYuQ29uZGl0aW9uKCkKKyAgICAgICAgc2xlZXBpbmcgPSBzZWxmLlNlbWFwaG9yZSgwKQorICAgICAgICB3b2tlbiA9IHNlbGYuU2VtYXBob3JlKDApCisKKyAgICAgICAgIyBzdGFydCBzb21lIHRocmVhZHMvcHJvY2Vzc2VzIHdoaWNoIHdpbGwgdGltZW91dAorICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oY29uZCwgc2xlZXBpbmcsIHdva2VuLCBUSU1FT1VUMSkpCisgICAgICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHAuc3RhcnQoKQorCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oY29uZCwgc2xlZXBpbmcsIHdva2VuLCBUSU1FT1VUMSkpCisgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgICMgd2FpdCBmb3IgdGhlbSBhbGwgdG8gc2xlZXAKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDYpOgorICAgICAgICAgICAgc2xlZXBpbmcuYWNxdWlyZSgpCisKKyAgICAgICAgIyBjaGVjayB0aGV5IGhhdmUgYWxsIHRpbWVkIG91dAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoNik6CisgICAgICAgICAgICB3b2tlbi5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgwLCBnZXRfdmFsdWUsIHdva2VuKQorCisgICAgICAgICMgY2hlY2sgc3RhdGUgaXMgbm90IG11Y2tlZCB1cAorICAgICAgICBzZWxmLmNoZWNrX2ludmFyaWFudChjb25kKQorCisgICAgICAgICMgc3RhcnQgc29tZSBtb3JlIHRocmVhZHMvcHJvY2Vzc2VzCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5mLCBhcmdzPShjb25kLCBzbGVlcGluZywgd29rZW4pKQorICAgICAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgICAgICBwLnN0YXJ0KCkKKworICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuZiwgYXJncz0oY29uZCwgc2xlZXBpbmcsIHdva2VuKSkKKyAgICAgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgIyB3YWl0IGZvciB0aGVtIHRvIGFsbCBzbGVlcAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoNik6CisgICAgICAgICAgICBzbGVlcGluZy5hY3F1aXJlKCkKKworICAgICAgICAjIGNoZWNrIG5vIHByb2Nlc3MvdGhyZWFkIGhhcyB3b2tlbiB1cAorICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDAsIGdldF92YWx1ZSwgd29rZW4pCisKKyAgICAgICAgIyB3YWtlIHRoZW0gYWxsIHVwCisgICAgICAgIGNvbmQuYWNxdWlyZSgpCisgICAgICAgIGNvbmQubm90aWZ5X2FsbCgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisKKyAgICAgICAgIyBjaGVjayB0aGV5IGhhdmUgYWxsIHdva2VuCisgICAgICAgIHRpbWUuc2xlZXAoREVMVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoNiwgZ2V0X3ZhbHVlLCB3b2tlbikKKworICAgICAgICAjIGNoZWNrIHN0YXRlIGlzIG5vdCBtdWNrZWQgdXAKKyAgICAgICAgc2VsZi5jaGVja19pbnZhcmlhbnQoY29uZCkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIGNvbmQgPSBzZWxmLkNvbmRpdGlvbigpCisgICAgICAgIHdhaXQgPSBUaW1pbmdXcmFwcGVyKGNvbmQud2FpdCkKKyAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgcmVzID0gd2FpdChUSU1FT1VUMSkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwod2FpdC5lbGFwc2VkLCBUSU1FT1VUMSkKKworCitjbGFzcyBfVGVzdEV2ZW50KEJhc2VUZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfZXZlbnQoY2xzLCBldmVudCk6CisgICAgICAgIHRpbWUuc2xlZXAoVElNRU9VVDIpCisgICAgICAgIGV2ZW50LnNldCgpCisKKyAgICBkZWYgdGVzdF9ldmVudChzZWxmKToKKyAgICAgICAgZXZlbnQgPSBzZWxmLkV2ZW50KCkKKyAgICAgICAgd2FpdCA9IFRpbWluZ1dyYXBwZXIoZXZlbnQud2FpdCkKKworICAgICAgICAjIFJlbW92ZWQgdGVtcG9yYXJpbHksIGR1ZSB0byBBUEkgc2hlYXIsIHRoaXMgZG9lcyBub3QKKyAgICAgICAgIyB3b3JrIHdpdGggdGhyZWFkaW5nLl9FdmVudCBvYmplY3RzLiBpc19zZXQgPT0gaXNTZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudC5pc19zZXQoKSwgRmFsc2UpCisKKyAgICAgICAgIyBSZW1vdmVkLCB0aHJlYWRpbmcuRXZlbnQud2FpdCgpIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgX19mbGFnCisgICAgICAgICMgaW5zdGVhZCBvZiBOb25lLiBBUEkgU2hlYXIgd2l0aCB0aGUgc2VtYXBob3JlIGJhY2tlZCBtcC5FdmVudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoMC4wKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwod2FpdC5lbGFwc2VkLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdChUSU1FT1VUMSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHdhaXQuZWxhcHNlZCwgVElNRU9VVDEpCisKKyAgICAgICAgZXZlbnQuc2V0KCkKKworICAgICAgICAjIFNlZSBub3RlIGFib3ZlIG9uIHRoZSBBUEkgZGlmZmVyZW5jZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudC5pc19zZXQoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YWl0KCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwod2FpdC5lbGFwc2VkLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdChUSU1FT1VUMSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwod2FpdC5lbGFwc2VkLCAwLjApCisgICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChldmVudC5pc19zZXQoKSwgVHJ1ZSkKKworICAgICAgICBldmVudC5jbGVhcigpCisKKyAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoZXZlbnQuaXNfc2V0KCksIEZhbHNlKQorCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfZXZlbnQsIGFyZ3M9KGV2ZW50LCkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YWl0KCksIFRydWUpCisKKyMKKyMKKyMKKworY2xhc3MgX1Rlc3RWYWx1ZShCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCisKKyAgICBjb2Rlc192YWx1ZXMgPSBbCisgICAgICAgICgnaScsIDQzNDMsIDI0MjM0KSwKKyAgICAgICAgKCdkJywgMy42MjUsIC00LjI1KSwKKyAgICAgICAgKCdoJywgLTIzMiwgMjM0KSwKKyAgICAgICAgKCdjJywgbGF0aW4oJ3gnKSwgbGF0aW4oJ3knKSkKKyAgICAgICAgXQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBub3QgSEFTX1NIQVJFRENUWVBFUzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInJlcXVpcmVzIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0KGNscywgdmFsdWVzKToKKyAgICAgICAgZm9yIHN2LCBjdiBpbiB6aXAodmFsdWVzLCBjbHMuY29kZXNfdmFsdWVzKToKKyAgICAgICAgICAgIHN2LnZhbHVlID0gY3ZbMl0KKworCisgICAgZGVmIHRlc3RfdmFsdWUoc2VsZiwgcmF3PUZhbHNlKToKKyAgICAgICAgaWYgcmF3OgorICAgICAgICAgICAgdmFsdWVzID0gW3NlbGYuUmF3VmFsdWUoY29kZSwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvZGUsIHZhbHVlLCBfIGluIHNlbGYuY29kZXNfdmFsdWVzXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWVzID0gW3NlbGYuVmFsdWUoY29kZSwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvZGUsIHZhbHVlLCBfIGluIHNlbGYuY29kZXNfdmFsdWVzXQorCisgICAgICAgIGZvciBzdiwgY3YgaW4gemlwKHZhbHVlcywgc2VsZi5jb2Rlc192YWx1ZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdi52YWx1ZSwgY3ZbMV0pCisKKyAgICAgICAgcHJvYyA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdCwgYXJncz0odmFsdWVzLCkpCisgICAgICAgIHByb2MuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwcm9jLnN0YXJ0KCkKKyAgICAgICAgcHJvYy5qb2luKCkKKworICAgICAgICBmb3Igc3YsIGN2IGluIHppcCh2YWx1ZXMsIHNlbGYuY29kZXNfdmFsdWVzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3YudmFsdWUsIGN2WzJdKQorCisgICAgZGVmIHRlc3RfcmF3dmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF92YWx1ZShyYXc9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2dldG9ial9nZXRsb2NrKHNlbGYpOgorICAgICAgICB2YWwxID0gc2VsZi5WYWx1ZSgnaScsIDUpCisgICAgICAgIGxvY2sxID0gdmFsMS5nZXRfbG9jaygpCisgICAgICAgIG9iajEgPSB2YWwxLmdldF9vYmooKQorCisgICAgICAgIHZhbDIgPSBzZWxmLlZhbHVlKCdpJywgNSwgbG9jaz1Ob25lKQorICAgICAgICBsb2NrMiA9IHZhbDIuZ2V0X2xvY2soKQorICAgICAgICBvYmoyID0gdmFsMi5nZXRfb2JqKCkKKworICAgICAgICBsb2NrID0gc2VsZi5Mb2NrKCkKKyAgICAgICAgdmFsMyA9IHNlbGYuVmFsdWUoJ2knLCA1LCBsb2NrPWxvY2spCisgICAgICAgIGxvY2szID0gdmFsMy5nZXRfbG9jaygpCisgICAgICAgIG9iajMgPSB2YWwzLmdldF9vYmooKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2ssIGxvY2szKQorCisgICAgICAgIGFycjQgPSBzZWxmLlZhbHVlKCdpJywgNSwgbG9jaz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGFycjQsICdnZXRfbG9jaycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYXJyNCwgJ2dldF9vYmonKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2VsZi5WYWx1ZSwgJ2knLCA1LCBsb2NrPSduYXZhbHVlJykKKworICAgICAgICBhcnI1ID0gc2VsZi5SYXdWYWx1ZSgnaScsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhcnI1LCAnZ2V0X2xvY2snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGFycjUsICdnZXRfb2JqJykpCisKKworY2xhc3MgX1Rlc3RBcnJheShCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZihjbHMsIHNlcSk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihzZXEpKToKKyAgICAgICAgICAgIHNlcVtpXSArPSBzZXFbaS0xXQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihjX2ludCBpcyBOb25lLCAicmVxdWlyZXMgX2N0eXBlcyIpCisgICAgZGVmIHRlc3RfYXJyYXkoc2VsZiwgcmF3PUZhbHNlKToKKyAgICAgICAgc2VxID0gWzY4MCwgNjI2LCA5MzQsIDgyMSwgMTUwLCAyMzMsIDU0OCwgOTgyLCA3MTQsIDgzMV0KKyAgICAgICAgaWYgcmF3OgorICAgICAgICAgICAgYXJyID0gc2VsZi5SYXdBcnJheSgnaScsIHNlcSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyciA9IHNlbGYuQXJyYXkoJ2knLCBzZXEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXJyKSwgbGVuKHNlcSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJyWzNdLCBzZXFbM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhcnJbMjo3XSksIGxpc3Qoc2VxWzI6N10pKQorCisgICAgICAgIGFycls0OjhdID0gc2VxWzQ6OF0gPSBhcnJheS5hcnJheSgnaScsIFsxLCAyLCAzLCA0XSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYXJyWzpdKSwgc2VxKQorCisgICAgICAgIHNlbGYuZihzZXEpCisKKyAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5mLCBhcmdzPShhcnIsKSkKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICBwLmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhcnJbOl0pLCBzZXEpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGNfaW50IGlzIE5vbmUsICJyZXF1aXJlcyBfY3R5cGVzIikKKyAgICBkZWYgdGVzdF9hcnJheV9mcm9tX3NpemUoc2VsZik6CisgICAgICAgIHNpemUgPSAxMAorICAgICAgICAjIFRlc3QgZm9yIHplcm9pbmcgKHNlZSBpc3N1ZSAjMTE2NzUpLgorICAgICAgICAjIFRoZSByZXBldGl0aW9uIGJlbG93IHN0cmVuZ3RoZW5zIHRoZSB0ZXN0IGJ5IGluY3JlYXNpbmcgdGhlIGNoYW5jZXMKKyAgICAgICAgIyBvZiBwcmV2aW91c2x5IGFsbG9jYXRlZCBub24temVybyBtZW1vcnkgYmVpbmcgdXNlZCBmb3IgdGhlIG5ldyBhcnJheQorICAgICAgICAjIG9uIHRoZSAybmQgYW5kIDNyZCBsb29wcy4KKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBhcnIgPSBzZWxmLkFycmF5KCdpJywgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFyciksIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYXJyKSwgWzBdICogc2l6ZSkKKyAgICAgICAgICAgIGFycls6XSA9IHJhbmdlKDEwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFyciksIHJhbmdlKDEwKSkKKyAgICAgICAgICAgIGRlbCBhcnIKKworICAgIEB1bml0dGVzdC5za2lwSWYoY19pbnQgaXMgTm9uZSwgInJlcXVpcmVzIF9jdHlwZXMiKQorICAgIGRlZiB0ZXN0X3Jhd2FycmF5KHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfYXJyYXkocmF3PVRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGNfaW50IGlzIE5vbmUsICJyZXF1aXJlcyBfY3R5cGVzIikKKyAgICBkZWYgdGVzdF9hcnJheV9hY2NlcHRzX2xvbmcoc2VsZik6CisgICAgICAgIGFyciA9IHNlbGYuQXJyYXkoJ2knLCAxMEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFyciksIDEwKQorICAgICAgICByYXdfYXJyID0gc2VsZi5SYXdBcnJheSgnaScsIDEwTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmF3X2FyciksIDEwKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihjX2ludCBpcyBOb25lLCAicmVxdWlyZXMgX2N0eXBlcyIpCisgICAgZGVmIHRlc3RfZ2V0b2JqX2dldGxvY2tfb2JqKHNlbGYpOgorICAgICAgICBhcnIxID0gc2VsZi5BcnJheSgnaScsIHJhbmdlKDEwKSkKKyAgICAgICAgbG9jazEgPSBhcnIxLmdldF9sb2NrKCkKKyAgICAgICAgb2JqMSA9IGFycjEuZ2V0X29iaigpCisKKyAgICAgICAgYXJyMiA9IHNlbGYuQXJyYXkoJ2knLCByYW5nZSgxMCksIGxvY2s9Tm9uZSkKKyAgICAgICAgbG9jazIgPSBhcnIyLmdldF9sb2NrKCkKKyAgICAgICAgb2JqMiA9IGFycjIuZ2V0X29iaigpCisKKyAgICAgICAgbG9jayA9IHNlbGYuTG9jaygpCisgICAgICAgIGFycjMgPSBzZWxmLkFycmF5KCdpJywgcmFuZ2UoMTApLCBsb2NrPWxvY2spCisgICAgICAgIGxvY2szID0gYXJyMy5nZXRfbG9jaygpCisgICAgICAgIG9iajMgPSBhcnIzLmdldF9vYmooKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2ssIGxvY2szKQorCisgICAgICAgIGFycjQgPSBzZWxmLkFycmF5KCdpJywgcmFuZ2UoMTApLCBsb2NrPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYXJyNCwgJ2dldF9sb2NrJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhcnI0LCAnZ2V0X29iaicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5BcnJheSwgJ2knLCByYW5nZSgxMCksIGxvY2s9J25vdGFsb2NrJykKKworICAgICAgICBhcnI1ID0gc2VsZi5SYXdBcnJheSgnaScsIHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGFycjUsICdnZXRfbG9jaycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYXJyNSwgJ2dldF9vYmonKSkKKworIworIworIworCitjbGFzcyBfVGVzdENvbnRhaW5lcnMoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ21hbmFnZXInLCkKKworICAgIGRlZiB0ZXN0X2xpc3Qoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLmxpc3QocmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOl0sIHJhbmdlKDEwKSkKKworICAgICAgICBiID0gc2VsZi5saXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCBbXSkKKworICAgICAgICBiLmV4dGVuZChyYW5nZSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCByYW5nZSg1KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMl0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlsyOjEwXSwgWzIsMyw0XSkKKworICAgICAgICBiICo9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCBbMCwgMSwgMiwgMywgNCwgMCwgMSwgMiwgMywgNF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiICsgWzUsIDZdLCBbMCwgMSwgMiwgMywgNCwgMCwgMSwgMiwgMywgNCwgNSwgNl0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzpdLCByYW5nZSgxMCkpCisKKyAgICAgICAgZCA9IFthLCBiXQorICAgICAgICBlID0gc2VsZi5saXN0KGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBlWzpdLAorICAgICAgICAgICAgW1swLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSwgWzAsIDEsIDIsIDMsIDQsIDAsIDEsIDIsIDMsIDRdXQorICAgICAgICAgICAgKQorCisgICAgICAgIGYgPSBzZWxmLmxpc3QoW2FdKQorICAgICAgICBhLmFwcGVuZCgnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZbOl0sIFtbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgJ2hlbGxvJ11dKQorCisgICAgZGVmIHRlc3RfZGljdChzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuZGljdCgpCisgICAgICAgIGluZGljZXMgPSByYW5nZSg2NSwgNzApCisgICAgICAgIGZvciBpIGluIGluZGljZXM6CisgICAgICAgICAgICBkW2ldID0gY2hyKGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb3B5KCksIGRpY3QoKGksIGNocihpKSkgZm9yIGkgaW4gaW5kaWNlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGQua2V5cygpKSwgaW5kaWNlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZC52YWx1ZXMoKSksIFtjaHIoaSkgZm9yIGkgaW4gaW5kaWNlc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGQuaXRlbXMoKSksIFsoaSwgY2hyKGkpKSBmb3IgaSBpbiBpbmRpY2VzXSkKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZShzZWxmKToKKyAgICAgICAgbiA9IHNlbGYuTmFtZXNwYWNlKCkKKyAgICAgICAgbi5uYW1lID0gJ0JvYicKKyAgICAgICAgbi5qb2IgPSAnQnVpbGRlcicKKyAgICAgICAgbi5faGlkZGVuID0gJ2hpZGRlbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobi5uYW1lLCBuLmpvYiksICgnQm9iJywgJ0J1aWxkZXInKSkKKyAgICAgICAgZGVsIG4uam9iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG4pLCAiTmFtZXNwYWNlKG5hbWU9J0JvYicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobiwgJ25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG4sICdqb2InKSkKKworIworIworIworCitkZWYgc3FyKHgsIHdhaXQ9MC4wKToKKyAgICB0aW1lLnNsZWVwKHdhaXQpCisgICAgcmV0dXJuIHgqeAorY2xhc3MgX1Rlc3RQb29sKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hcHBseShzZWxmKToKKyAgICAgICAgcGFwcGx5ID0gc2VsZi5wb29sLmFwcGx5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFwcGx5KHNxciwgKDUsKSksIHNxcig1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXBwbHkoc3FyLCAoKSwgeyd4JzozfSksIHNxcih4PTMpKQorCisgICAgZGVmIHRlc3RfbWFwKHNlbGYpOgorICAgICAgICBwbWFwID0gc2VsZi5wb29sLm1hcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBtYXAoc3FyLCByYW5nZSgxMCkpLCBtYXAoc3FyLCByYW5nZSgxMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBtYXAoc3FyLCByYW5nZSgxMDApLCBjaHVua3NpemU9MjApLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChzcXIsIHJhbmdlKDEwMCkpKQorCisgICAgZGVmIHRlc3RfbWFwX2NodW5rc2l6ZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wb29sLm1hcF9hc3luYyhzcXIsIFtdLCBjaHVua3NpemU9MSkuZ2V0KHRpbWVvdXQ9VElNRU9VVDEpCisgICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJwb29sLm1hcF9hc3luYyB3aXRoIGNodW5rc2l6ZSBzdGFsbGVkIG9uIG51bGwgbGlzdCIpCisKKyAgICBkZWYgdGVzdF9hc3luYyhzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5wb29sLmFwcGx5X2FzeW5jKHNxciwgKDcsIFRJTUVPVVQxLCkpCisgICAgICAgIGdldCA9IFRpbWluZ1dyYXBwZXIocmVzLmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXQoKSwgNDkpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoZ2V0LmVsYXBzZWQsIFRJTUVPVVQxKQorCisgICAgZGVmIHRlc3RfYXN5bmNfdGltZW91dChzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5wb29sLmFwcGx5X2FzeW5jKHNxciwgKDYsIFRJTUVPVVQyICsgMC4yKSkKKyAgICAgICAgZ2V0ID0gVGltaW5nV3JhcHBlcihyZXMuZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yLCBnZXQsIHRpbWVvdXQ9VElNRU9VVDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoZ2V0LmVsYXBzZWQsIFRJTUVPVVQyKQorCisgICAgZGVmIHRlc3RfaW1hcChzZWxmKToKKyAgICAgICAgaXQgPSBzZWxmLnBvb2wuaW1hcChzcXIsIHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbWFwKHNxciwgcmFuZ2UoMTApKSkKKworICAgICAgICBpdCA9IHNlbGYucG9vbC5pbWFwKHNxciwgcmFuZ2UoMTApKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0Lm5leHQoKSwgaSppKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBpdC5uZXh0KQorCisgICAgICAgIGl0ID0gc2VsZi5wb29sLmltYXAoc3FyLCByYW5nZSgxMDAwKSwgY2h1bmtzaXplPTEwMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0Lm5leHQoKSwgaSppKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBpdC5uZXh0KQorCisgICAgZGVmIHRlc3RfaW1hcF91bm9yZGVyZWQoc2VsZik6CisgICAgICAgIGl0ID0gc2VsZi5wb29sLmltYXBfdW5vcmRlcmVkKHNxciwgcmFuZ2UoMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGl0KSwgbWFwKHNxciwgcmFuZ2UoMTAwMCkpKQorCisgICAgICAgIGl0ID0gc2VsZi5wb29sLmltYXBfdW5vcmRlcmVkKHNxciwgcmFuZ2UoMTAwMCksIGNodW5rc2l6ZT01MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaXQpLCBtYXAoc3FyLCByYW5nZSgxMDAwKSkpCisKKyAgICBkZWYgdGVzdF9tYWtlX3Bvb2woc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG11bHRpcHJvY2Vzc2luZy5Qb29sLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXVsdGlwcm9jZXNzaW5nLlBvb2wsIDApCisKKyAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbGVuKHAuX3Bvb2wpKQorICAgICAgICBwLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKworICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICdtYW5hZ2VyJzoKKyAgICAgICAgICAgICMgT24gVW5peCBhIGZvcmtlZCBwcm9jZXNzIGluY3JlZnMgZWFjaCBzaGFyZWQgb2JqZWN0IHRvCisgICAgICAgICAgICAjIHdoaWNoIGl0cyBwYXJlbnQgcHJvY2VzcyBoZWxkIGEgcmVmZXJlbmNlLiAgSWYgdGhlCisgICAgICAgICAgICAjIGZvcmtlZCBwcm9jZXNzIGdldHMgdGVybWluYXRlZCB0aGVuIHRoZXJlIGlzIGxpa2VseSB0bworICAgICAgICAgICAgIyBiZSBhIHJlZmVyZW5jZSBsZWFrLiAgU28gdG8gcHJldmVudAorICAgICAgICAgICAgIyBfVGVzdFpaWk51bWJlck9mT2JqZWN0cyBmcm9tIGZhaWxpbmcgd2Ugc2tpcCB0aGlzIHRlc3QKKyAgICAgICAgICAgICMgd2hlbiB1c2luZyBhIG1hbmFnZXIuCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHQgPSBzZWxmLnBvb2wubWFwX2FzeW5jKAorICAgICAgICAgICAgdGltZS5zbGVlcCwgWzAuMSBmb3IgaSBpbiByYW5nZSgxMDAwMCldLCBjaHVua3NpemU9MQorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLnBvb2wudGVybWluYXRlKCkKKyAgICAgICAgam9pbiA9IFRpbWluZ1dyYXBwZXIoc2VsZi5wb29sLmpvaW4pCisgICAgICAgIGpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoam9pbi5lbGFwc2VkIDwgMC4yKQorCisgICAgZGVmIHRlc3RfZW1wdHlfaXRlcmFibGUoc2VsZik6CisgICAgICAgICMgU2VlIElzc3VlIDEyMTU3CisgICAgICAgIHAgPSBzZWxmLlBvb2woMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubWFwKHNxciwgW10pLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHAuaW1hcChzcXIsIFtdKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocC5pbWFwX3Vub3JkZXJlZChzcXIsIFtdKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubWFwX2FzeW5jKHNxciwgW10pLmdldCgpLCBbXSkKKworICAgICAgICBwLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKworZGVmIHVucGlja2xlYWJsZV9yZXN1bHQoKToKKyAgICByZXR1cm4gbGFtYmRhOiA0MgorCitjbGFzcyBfVGVzdFBvb2xXb3JrZXJFcnJvcnMoQmFzZVRlc3RDYXNlKToKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCApCisKKyAgICBkZWYgdGVzdF91bnBpY2tsZWFibGVfcmVzdWx0KHNlbGYpOgorICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBNYXliZUVuY29kaW5nRXJyb3IKKyAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgd2UgZG9uJ3QgbG9zZSBwb29sIHByb2Nlc3NlcyBiZWNhdXNlIG9mIGVuY29kaW5nIGVycm9ycy4KKyAgICAgICAgZm9yIGl0ZXJhdGlvbiBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICByZXMgPSBwLmFwcGx5X2FzeW5jKHVucGlja2xlYWJsZV9yZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNYXliZUVuY29kaW5nRXJyb3IsIHJlcy5nZXQpCisKKyAgICAgICAgcC5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisKK2NsYXNzIF9UZXN0UG9vbFdvcmtlckxpZmV0aW1lKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCApCisgICAgZGVmIHRlc3RfcG9vbF93b3JrZXJfbGlmZXRpbWUoc2VsZik6CisgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgzLCBtYXh0YXNrc3BlcmNoaWxkPTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihwLl9wb29sKSkKKyAgICAgICAgb3JpZ3dvcmtlcnBpZHMgPSBbdy5waWQgZm9yIHcgaW4gcC5fcG9vbF0KKyAgICAgICAgIyBSdW4gbWFueSB0YXNrcyBzbyBlYWNoIHdvcmtlciBnZXRzIHJlcGxhY2VkIChob3BlZnVsbHkpCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocC5hcHBseV9hc3luYyhzcXIsIChpLCApKSkKKyAgICAgICAgIyBGZXRjaCB0aGUgcmVzdWx0cyBhbmQgdmVyaWZ5IHdlIGdvdCB0aGUgcmlnaHQgYW5zd2VycywKKyAgICAgICAgIyBhbHNvIGVuc3VyaW5nIGFsbCB0aGUgdGFza3MgaGF2ZSBjb21wbGV0ZWQuCisgICAgICAgIGZvciAoaiwgcmVzKSBpbiBlbnVtZXJhdGUocmVzdWx0cyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXQoKSwgc3FyKGopKQorICAgICAgICAjIFJlZmlsbCB0aGUgcG9vbAorICAgICAgICBwLl9yZXBvcHVsYXRlX3Bvb2woKQorICAgICAgICAjIFdhaXQgdW50aWwgYWxsIHdvcmtlcnMgYXJlIGFsaXZlCisgICAgICAgICMgKGNvdW50ZG93biAqIERFTFRBID0gNSBzZWNvbmRzIG1heCBzdGFydHVwIHByb2Nlc3MgdGltZSkKKyAgICAgICAgY291bnRkb3duID0gNTAKKyAgICAgICAgd2hpbGUgY291bnRkb3duIGFuZCBub3QgYWxsKHcuaXNfYWxpdmUoKSBmb3IgdyBpbiBwLl9wb29sKToKKyAgICAgICAgICAgIGNvdW50ZG93biAtPSAxCisgICAgICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQorICAgICAgICBmaW5hbHdvcmtlcnBpZHMgPSBbdy5waWQgZm9yIHcgaW4gcC5fcG9vbF0KKyAgICAgICAgIyBBbGwgcGlkcyBzaG91bGQgYmUgYXNzaWduZWQuICBTZWUgaXNzdWUgIzc4MDUuCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oTm9uZSwgb3JpZ3dvcmtlcnBpZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oTm9uZSwgZmluYWx3b3JrZXJwaWRzKQorICAgICAgICAjIEZpbmFsbHksIGNoZWNrIHRoYXQgdGhlIHdvcmtlciBwaWRzIGhhdmUgY2hhbmdlZAorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNvcnRlZChvcmlnd29ya2VycGlkcyksIHNvcnRlZChmaW5hbHdvcmtlcnBpZHMpKQorICAgICAgICBwLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKworICAgIGRlZiB0ZXN0X3Bvb2xfd29ya2VyX2xpZmV0aW1lX2Vhcmx5X2Nsb3NlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDMzMjogY2xvc2luZyBhIHBvb2wgd2hvc2Ugd29ya2VycyBoYXZlIGxpbWl0ZWQgbGlmZXRpbWVzCisgICAgICAgICMgYmVmb3JlIGFsbCB0aGUgdGFza3MgY29tcGxldGVkIHdvdWxkIG1ha2Ugam9pbigpIGhhbmcuCisgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgzLCBtYXh0YXNrc3BlcmNoaWxkPTEpCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHAuYXBwbHlfYXN5bmMoc3FyLCAoaSwgMC4zKSkpCisgICAgICAgIHAuY2xvc2UoKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICAjIGNoZWNrIHRoZSByZXN1bHRzCisgICAgICAgIGZvciAoaiwgcmVzKSBpbiBlbnVtZXJhdGUocmVzdWx0cyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXQoKSwgc3FyKGopKQorCisKKyMKKyMgVGVzdCB0aGF0IG1hbmFnZXIgaGFzIGV4cGVjdGVkIG51bWJlciBvZiBzaGFyZWQgb2JqZWN0cyBsZWZ0CisjCisKK2NsYXNzIF9UZXN0WlpaTnVtYmVyT2ZPYmplY3RzKEJhc2VUZXN0Q2FzZSk6CisgICAgIyBCZWNhdXNlIHRlc3QgY2FzZXMgYXJlIHNvcnRlZCBhbHBoYWJldGljYWxseSwgdGhpcyBvbmUgd2lsbCBnZXQKKyAgICAjIHJ1biBhZnRlciBhbGwgdGhlIG90aGVyIHRlc3RzIGZvciB0aGUgbWFuYWdlci4gIEl0IHRlc3RzIHRoYXQKKyAgICAjIHRoZXJlIGhhdmUgYmVlbiBubyAicmVmZXJlbmNlIGxlYWtzIiBmb3IgdGhlIG1hbmFnZXIncyBzaGFyZWQKKyAgICAjIG9iamVjdHMuICBOb3RlIHRoZSBjb21tZW50IGluIF9UZXN0UG9vbC50ZXN0X3Rlcm1pbmF0ZSgpLgorICAgIEFMTE9XRURfVFlQRVMgPSAoJ21hbmFnZXInLCkKKworICAgIGRlZiB0ZXN0X251bWJlcl9vZl9vYmplY3RzKHNlbGYpOgorICAgICAgICBFWFBFQ1RFRF9OVU1CRVIgPSAxICAgICAgICAgICAgICAgICMgdGhlIHBvb2wgb2JqZWN0IGlzIHN0aWxsIGFsaXZlCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4oKSAgIyBkaXNjYXJkIGRlYWQgcHJvY2VzcyBvYmpzCisgICAgICAgIGdjLmNvbGxlY3QoKSAgICAgICAgICAgICAgICAgICAgICAgIyBkbyBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICAgcmVmcyA9IHNlbGYubWFuYWdlci5fbnVtYmVyX29mX29iamVjdHMoKQorICAgICAgICBkZWJ1Z19pbmZvID0gc2VsZi5tYW5hZ2VyLl9kZWJ1Z19pbmZvKCkKKyAgICAgICAgaWYgcmVmcyAhPSBFWFBFQ1RFRF9OVU1CRVI6CisgICAgICAgICAgICBwcmludCBzZWxmLm1hbmFnZXIuX2RlYnVnX2luZm8oKQorICAgICAgICAgICAgcHJpbnQgZGVidWdfaW5mbworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVmcywgRVhQRUNURURfTlVNQkVSKQorCisjCisjIFRlc3Qgb2YgY3JlYXRpbmcgYSBjdXN0b21pemVkIG1hbmFnZXIgY2xhc3MKKyMKKworZnJvbSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMgaW1wb3J0IEJhc2VNYW5hZ2VyLCBCYXNlUHJveHksIFJlbW90ZUVycm9yCisKK2NsYXNzIEZvb0JhcihvYmplY3QpOgorICAgIGRlZiBmKHNlbGYpOgorICAgICAgICByZXR1cm4gJ2YoKScKKyAgICBkZWYgZyhzZWxmKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgIGRlZiBfaChzZWxmKToKKyAgICAgICAgcmV0dXJuICdfaCgpJworCitkZWYgYmF6KCk6CisgICAgZm9yIGkgaW4geHJhbmdlKDEwKToKKyAgICAgICAgeWllbGQgaSppCisKK2NsYXNzIEl0ZXJhdG9yUHJveHkoQmFzZVByb3h5KToKKyAgICBfZXhwb3NlZF8gPSAoJ25leHQnLCAnX19uZXh0X18nKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ25leHQnKQorICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ19fbmV4dF9fJykKKworY2xhc3MgTXlNYW5hZ2VyKEJhc2VNYW5hZ2VyKToKKyAgICBwYXNzCisKK015TWFuYWdlci5yZWdpc3RlcignRm9vJywgY2FsbGFibGU9Rm9vQmFyKQorTXlNYW5hZ2VyLnJlZ2lzdGVyKCdCYXInLCBjYWxsYWJsZT1Gb29CYXIsIGV4cG9zZWQ9KCdmJywgJ19oJykpCitNeU1hbmFnZXIucmVnaXN0ZXIoJ2JheicsIGNhbGxhYmxlPWJheiwgcHJveHl0eXBlPUl0ZXJhdG9yUHJveHkpCisKKworY2xhc3MgX1Rlc3RNeU1hbmFnZXIoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ21hbmFnZXInLCkKKworICAgIGRlZiB0ZXN0X215bWFuYWdlcihzZWxmKToKKyAgICAgICAgbWFuYWdlciA9IE15TWFuYWdlcigpCisgICAgICAgIG1hbmFnZXIuc3RhcnQoKQorCisgICAgICAgIGZvbyA9IG1hbmFnZXIuRm9vKCkKKyAgICAgICAgYmFyID0gbWFuYWdlci5CYXIoKQorICAgICAgICBiYXogPSBtYW5hZ2VyLmJheigpCisKKyAgICAgICAgZm9vX21ldGhvZHMgPSBbbmFtZSBmb3IgbmFtZSBpbiAoJ2YnLCAnZycsICdfaCcpIGlmIGhhc2F0dHIoZm9vLCBuYW1lKV0KKyAgICAgICAgYmFyX21ldGhvZHMgPSBbbmFtZSBmb3IgbmFtZSBpbiAoJ2YnLCAnZycsICdfaCcpIGlmIGhhc2F0dHIoYmFyLCBuYW1lKV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvb19tZXRob2RzLCBbJ2YnLCAnZyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhcl9tZXRob2RzLCBbJ2YnLCAnX2gnXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5mKCksICdmKCknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb28uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX2NhbGxtZXRob2QoJ2YnKSwgJ2YoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlbW90ZUVycm9yLCBmb28uX2NhbGxtZXRob2QsICdfaCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXIuZigpLCAnZigpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXIuX2goKSwgJ19oKCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhci5fY2FsbG1ldGhvZCgnZicpLCAnZigpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXIuX2NhbGxtZXRob2QoJ19oJyksICdfaCgpJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYmF6KSwgW2kqaSBmb3IgaSBpbiByYW5nZSgxMCldKQorCisgICAgICAgIG1hbmFnZXIuc2h1dGRvd24oKQorCisjCisjIFRlc3Qgb2YgY29ubmVjdGluZyB0byBhIHJlbW90ZSBzZXJ2ZXIgYW5kIHVzaW5nIHhtbHJwY2xpYiBmb3Igc2VyaWFsaXphdGlvbgorIworCitfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCitkZWYgZ2V0X3F1ZXVlKCk6CisgICAgcmV0dXJuIF9xdWV1ZQorCitjbGFzcyBRdWV1ZU1hbmFnZXIoQmFzZU1hbmFnZXIpOgorICAgICcnJ21hbmFnZXIgY2xhc3MgdXNlZCBieSBzZXJ2ZXIgcHJvY2VzcycnJworUXVldWVNYW5hZ2VyLnJlZ2lzdGVyKCdnZXRfcXVldWUnLCBjYWxsYWJsZT1nZXRfcXVldWUpCisKK2NsYXNzIFF1ZXVlTWFuYWdlcjIoQmFzZU1hbmFnZXIpOgorICAgICcnJ21hbmFnZXIgY2xhc3Mgd2hpY2ggc3BlY2lmaWVzIHRoZSBzYW1lIGludGVyZmFjZSBhcyBRdWV1ZU1hbmFnZXInJycKK1F1ZXVlTWFuYWdlcjIucmVnaXN0ZXIoJ2dldF9xdWV1ZScpCisKKworU0VSSUFMSVpFUiA9ICd4bWxycGNsaWInCisKK2NsYXNzIF9UZXN0UmVtb3RlTWFuYWdlcihCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgnbWFuYWdlcicsKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9wdXR0ZXIoY2xzLCBhZGRyZXNzLCBhdXRoa2V5KToKKyAgICAgICAgbWFuYWdlciA9IFF1ZXVlTWFuYWdlcjIoCisgICAgICAgICAgICBhZGRyZXNzPWFkZHJlc3MsIGF1dGhrZXk9YXV0aGtleSwgc2VyaWFsaXplcj1TRVJJQUxJWkVSCisgICAgICAgICAgICApCisgICAgICAgIG1hbmFnZXIuY29ubmVjdCgpCisgICAgICAgIHF1ZXVlID0gbWFuYWdlci5nZXRfcXVldWUoKQorICAgICAgICBxdWV1ZS5wdXQoKCdoZWxsbyB3b3JsZCcsIE5vbmUsIFRydWUsIDIuMjUpKQorCisgICAgZGVmIHRlc3RfcmVtb3RlKHNlbGYpOgorICAgICAgICBhdXRoa2V5ID0gb3MudXJhbmRvbSgzMikKKworICAgICAgICBtYW5hZ2VyID0gUXVldWVNYW5hZ2VyKAorICAgICAgICAgICAgYWRkcmVzcz0oJ2xvY2FsaG9zdCcsIDApLCBhdXRoa2V5PWF1dGhrZXksIHNlcmlhbGl6ZXI9U0VSSUFMSVpFUgorICAgICAgICAgICAgKQorICAgICAgICBtYW5hZ2VyLnN0YXJ0KCkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9wdXR0ZXIsIGFyZ3M9KG1hbmFnZXIuYWRkcmVzcywgYXV0aGtleSkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKworICAgICAgICBtYW5hZ2VyMiA9IFF1ZXVlTWFuYWdlcjIoCisgICAgICAgICAgICBhZGRyZXNzPW1hbmFnZXIuYWRkcmVzcywgYXV0aGtleT1hdXRoa2V5LCBzZXJpYWxpemVyPVNFUklBTElaRVIKKyAgICAgICAgICAgICkKKyAgICAgICAgbWFuYWdlcjIuY29ubmVjdCgpCisgICAgICAgIHF1ZXVlID0gbWFuYWdlcjIuZ2V0X3F1ZXVlKCkKKworICAgICAgICAjIE5vdGUgdGhhdCB4bWxycGNsaWIgd2lsbCBkZXNlcmlhbGl6ZSBvYmplY3QgYXMgYSBsaXN0IG5vdCBhIHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWUuZ2V0KCksIFsnaGVsbG8gd29ybGQnLCBOb25lLCBUcnVlLCAyLjI1XSkKKworICAgICAgICAjIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIHhtbHJwY2xpYiBmb3Igc2VyaWFsaXphdGlvbiBpbnN0ZWFkIG9mCisgICAgICAgICMgcGlja2xlIHRoaXMgd2lsbCBjYXVzZSBhIHNlcmlhbGl6YXRpb24gZXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgcXVldWUucHV0LCB0aW1lLnNsZWVwKQorCisgICAgICAgICMgTWFrZSBxdWV1ZSBmaW5hbGl6ZXIgcnVuIGJlZm9yZSB0aGUgc2VydmVyIGlzIHN0b3BwZWQKKyAgICAgICAgZGVsIHF1ZXVlCisgICAgICAgIG1hbmFnZXIuc2h1dGRvd24oKQorCitjbGFzcyBfVGVzdE1hbmFnZXJSZXN0YXJ0KEJhc2VUZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3B1dHRlcihjbHMsIGFkZHJlc3MsIGF1dGhrZXkpOgorICAgICAgICBtYW5hZ2VyID0gUXVldWVNYW5hZ2VyKAorICAgICAgICAgICAgYWRkcmVzcz1hZGRyZXNzLCBhdXRoa2V5PWF1dGhrZXksIHNlcmlhbGl6ZXI9U0VSSUFMSVpFUikKKyAgICAgICAgbWFuYWdlci5jb25uZWN0KCkKKyAgICAgICAgcXVldWUgPSBtYW5hZ2VyLmdldF9xdWV1ZSgpCisgICAgICAgIHF1ZXVlLnB1dCgnaGVsbG8gd29ybGQnKQorCisgICAgZGVmIHRlc3RfcmFwaWRfcmVzdGFydChzZWxmKToKKyAgICAgICAgYXV0aGtleSA9IG9zLnVyYW5kb20oMzIpCisgICAgICAgIG1hbmFnZXIgPSBRdWV1ZU1hbmFnZXIoCisgICAgICAgICAgICBhZGRyZXNzPSgnbG9jYWxob3N0JywgMCksIGF1dGhrZXk9YXV0aGtleSwgc2VyaWFsaXplcj1TRVJJQUxJWkVSKQorICAgICAgICBzcnZyID0gbWFuYWdlci5nZXRfc2VydmVyKCkKKyAgICAgICAgYWRkciA9IHNydnIuYWRkcmVzcworICAgICAgICAjIENsb3NlIHRoZSBjb25uZWN0aW9uLkxpc3RlbmVyIHNvY2tldCB3aGljaCBnZXRzIG9wZW5lZCBhcyBhIHBhcnQKKyAgICAgICAgIyBvZiBtYW5hZ2VyLmdldF9zZXJ2ZXIoKS4gSXQncyBub3QgbmVlZGVkIGZvciB0aGUgdGVzdC4KKyAgICAgICAgc3J2ci5saXN0ZW5lci5jbG9zZSgpCisgICAgICAgIG1hbmFnZXIuc3RhcnQoKQorCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3B1dHRlciwgYXJncz0obWFuYWdlci5hZGRyZXNzLCBhdXRoa2V5KSkKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICBxdWV1ZSA9IG1hbmFnZXIuZ2V0X3F1ZXVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZS5nZXQoKSwgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgZGVsIHF1ZXVlCisgICAgICAgIG1hbmFnZXIuc2h1dGRvd24oKQorICAgICAgICBtYW5hZ2VyID0gUXVldWVNYW5hZ2VyKAorICAgICAgICAgICAgYWRkcmVzcz1hZGRyLCBhdXRoa2V5PWF1dGhrZXksIHNlcmlhbGl6ZXI9U0VSSUFMSVpFUikKKyAgICAgICAgbWFuYWdlci5zdGFydCgpCisgICAgICAgIG1hbmFnZXIuc2h1dGRvd24oKQorCisjCisjCisjCisKK1NFTlRJTkVMID0gbGF0aW4oJycpCisKK2NsYXNzIF9UZXN0Q29ubmVjdGlvbihCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywgJ3RocmVhZHMnKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9lY2hvKGNscywgY29ubik6CisgICAgICAgIGZvciBtc2cgaW4gaXRlcihjb25uLnJlY3ZfYnl0ZXMsIFNFTlRJTkVMKToKKyAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhtc2cpCisgICAgICAgIGNvbm4uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgY29ubiwgY2hpbGRfY29ubiA9IHNlbGYuUGlwZSgpCisKKyAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fZWNobywgYXJncz0oY2hpbGRfY29ubiwpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisKKyAgICAgICAgc2VxID0gWzEsIDIuMjUsIE5vbmVdCisgICAgICAgIG1zZyA9IGxhdGluKCdoZWxsbyB3b3JsZCcpCisgICAgICAgIGxvbmdtc2cgPSBtc2cgKiAxMAorICAgICAgICBhcnIgPSBhcnJheS5hcnJheSgnaScsIHJhbmdlKDQpKQorCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjb25uLmZpbGVubygpKSwgaW50KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5zZW5kKHNlcSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5yZWN2KCksIHNlcSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uc2VuZF9ieXRlcyhtc2cpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4ucmVjdl9ieXRlcygpLCBtc2cpCisKKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICdwcm9jZXNzZXMnOgorICAgICAgICAgICAgYnVmZmVyID0gYXJyYXkuYXJyYXkoJ2knLCBbMF0qMTApCisgICAgICAgICAgICBleHBlY3RlZCA9IGxpc3QoYXJyKSArIFswXSAqICgxMCAtIGxlbihhcnIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnNlbmRfYnl0ZXMoYXJyKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5yZWN2X2J5dGVzX2ludG8oYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGFycikgKiBidWZmZXIuaXRlbXNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYnVmZmVyKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgIGJ1ZmZlciA9IGFycmF5LmFycmF5KCdpJywgWzBdKjEwKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBbMF0gKiAzICsgbGlzdChhcnIpICsgWzBdICogKDEwIC0gMyAtIGxlbihhcnIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnNlbmRfYnl0ZXMoYXJyKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5yZWN2X2J5dGVzX2ludG8oYnVmZmVyLCAzICogYnVmZmVyLml0ZW1zaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGFycikgKiBidWZmZXIuaXRlbXNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYnVmZmVyKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgIGJ1ZmZlciA9IGJ5dGVhcnJheShsYXRpbignICcgKiA0MCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uc2VuZF9ieXRlcyhsb25nbXNnKSwgTm9uZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXMgPSBjb25uLnJlY3ZfYnl0ZXNfaW50byhidWZmZXIpCisgICAgICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLkJ1ZmZlclRvb1Nob3J0LCBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAobG9uZ21zZywpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2V4cGVjdGVkIEJ1ZmZlclRvb1Nob3J0LCBnb3QgJXMnICUgcmVzKQorCisgICAgICAgIHBvbGwgPSBUaW1pbmdXcmFwcGVyKGNvbm4ucG9sbCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvbGwoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwocG9sbC5lbGFwc2VkLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9sbChUSU1FT1VUMSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHBvbGwuZWxhcHNlZCwgVElNRU9VVDEpCisKKyAgICAgICAgY29ubi5zZW5kKE5vbmUpCisgICAgICAgIHRpbWUuc2xlZXAoLjEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb2xsKFRJTUVPVVQxKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChwb2xsLmVsYXBzZWQsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnJlY3YoKSwgTm9uZSkKKworICAgICAgICByZWFsbHlfYmlnX21zZyA9IGxhdGluKCdYJykgKiAoMTAyNCAqIDEwMjQgKiAxNikgICAjIDE2TWIKKyAgICAgICAgY29ubi5zZW5kX2J5dGVzKHJlYWxseV9iaWdfbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4ucmVjdl9ieXRlcygpLCByZWFsbHlfYmlnX21zZykKKworICAgICAgICBjb25uLnNlbmRfYnl0ZXMoU0VOVElORUwpICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlbGwgY2hpbGQgdG8gcXVpdAorICAgICAgICBjaGlsZF9jb25uLmNsb3NlKCkKKworICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4ucmVhZGFibGUsIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4ud3JpdGFibGUsIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgY29ubi5yZWN2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGNvbm4ucmVjdl9ieXRlcykKKworICAgICAgICBwLmpvaW4oKQorCisgICAgZGVmIHRlc3RfZHVwbGV4X2ZhbHNlKHNlbGYpOgorICAgICAgICByZWFkZXIsIHdyaXRlciA9IHNlbGYuUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdGVyLnNlbmQoMSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlY3YoKSwgMSkKKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICdwcm9jZXNzZXMnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGFibGUsIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci53cml0YWJsZSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXRlci5yZWFkYWJsZSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXRlci53cml0YWJsZSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHJlYWRlci5zZW5kLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgd3JpdGVyLnJlY3YpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB3cml0ZXIucG9sbCkKKworICAgIGRlZiB0ZXN0X3NwYXduX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIFdlIHRlc3QgdGhhdCBhIHBpcGUgY29ubmVjdGlvbiBjYW4gYmUgY2xvc2VkIGJ5IHBhcmVudAorICAgICAgICAjIHByb2Nlc3MgaW1tZWRpYXRlbHkgYWZ0ZXIgY2hpbGQgaXMgc3Bhd25lZC4gIE9uIFdpbmRvd3MgdGhpcworICAgICAgICAjIHdvdWxkIGhhdmUgc29tZXRpbWVzIGZhaWxlZCBvbiBvbGQgdmVyc2lvbnMgYmVjYXVzZQorICAgICAgICAjIGNoaWxkX2Nvbm4gd291bGQgYmUgY2xvc2VkIGJlZm9yZSB0aGUgY2hpbGQgZ290IGEgY2hhbmNlIHRvCisgICAgICAgICMgZHVwbGljYXRlIGl0LgorICAgICAgICBjb25uLCBjaGlsZF9jb25uID0gc2VsZi5QaXBlKCkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9lY2hvLCBhcmdzPShjaGlsZF9jb25uLCkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgY2hpbGRfY29ubi5jbG9zZSgpICAgICMgdGhpcyBtaWdodCBjb21wbGV0ZSBiZWZvcmUgY2hpbGQgaW5pdGlhbGl6ZXMKKworICAgICAgICBtc2cgPSBsYXRpbignaGVsbG8nKQorICAgICAgICBjb25uLnNlbmRfYnl0ZXMobXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4ucmVjdl9ieXRlcygpLCBtc2cpCisKKyAgICAgICAgY29ubi5zZW5kX2J5dGVzKFNFTlRJTkVMKQorICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKworICAgIGRlZiB0ZXN0X3NlbmRieXRlcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5UWVBFICE9ICdwcm9jZXNzZXMnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbXNnID0gbGF0aW4oJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JykKKyAgICAgICAgYSwgYiA9IHNlbGYuUGlwZSgpCisKKyAgICAgICAgYS5zZW5kX2J5dGVzKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJlY3ZfYnl0ZXMoKSwgbXNnKQorCisgICAgICAgIGEuc2VuZF9ieXRlcyhtc2csIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZWN2X2J5dGVzKCksIG1zZ1s1Ol0pCisKKyAgICAgICAgYS5zZW5kX2J5dGVzKG1zZywgNywgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJlY3ZfYnl0ZXMoKSwgbXNnWzc6Nys4XSkKKworICAgICAgICBhLnNlbmRfYnl0ZXMobXNnLCAyNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJlY3ZfYnl0ZXMoKSwgbGF0aW4oJycpKQorCisgICAgICAgIGEuc2VuZF9ieXRlcyhtc2csIDI2LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucmVjdl9ieXRlcygpLCBsYXRpbignJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5zZW5kX2J5dGVzLCBtc2csIDI3KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuc2VuZF9ieXRlcywgbXNnLCAyMiwgNSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLnNlbmRfYnl0ZXMsIG1zZywgMjYsIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5zZW5kX2J5dGVzLCBtc2csIC0xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuc2VuZF9ieXRlcywgbXNnLCA0LCAtMSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfaXNfZmRfYXNzaWduZWQoY2xzLCBmZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmZzdGF0KGZkKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQkFERjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF93cml0ZWZkKGNscywgY29ubiwgZGF0YSwgY3JlYXRlX2R1bW15X2Zkcz1GYWxzZSk6CisgICAgICAgIGlmIGNyZWF0ZV9kdW1teV9mZHM6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAyNTYpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBjbHMuX2lzX2ZkX2Fzc2lnbmVkKGkpOgorICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKGNvbm4uZmlsZW5vKCksIGkpCisgICAgICAgIGZkID0gcmVkdWN0aW9uLnJlY3ZfaGFuZGxlKGNvbm4pCisgICAgICAgIGlmIG1zdmNydDoKKyAgICAgICAgICAgIGZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKGZkLCBvcy5PX1dST05MWSkKKyAgICAgICAgb3Mud3JpdGUoZmQsIGRhdGEpCisgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1JFRFVDVElPTiwgInRlc3QgbmVlZHMgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbiIpCisgICAgZGVmIHRlc3RfZmRfdHJhbnNmZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuVFlQRSAhPSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBwcm9jZXNzZXMiKQorICAgICAgICBjb25uLCBjaGlsZF9jb25uID0gc2VsZi5QaXBlKGR1cGxleD1UcnVlKQorCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3dyaXRlZmQsIGFyZ3M9KGNoaWxkX2Nvbm4sIGIiZm9vIikpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmZCA9IGYuZmlsZW5vKCkKKyAgICAgICAgICAgIGlmIG1zdmNydDoKKyAgICAgICAgICAgICAgICBmZCA9IG1zdmNydC5nZXRfb3NmaGFuZGxlKGZkKQorICAgICAgICAgICAgcmVkdWN0aW9uLnNlbmRfaGFuZGxlKGNvbm4sIGZkLCBwLnBpZCkKKyAgICAgICAgcC5qb2luKCkKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImZvbyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUkVEVUNUSU9OLCAidGVzdCBuZWVkcyBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLAorICAgICAgICAgICAgICAgICAgICAgInRlc3Qgc2VtYW50aWNzIGRvbid0IG1ha2Ugc2Vuc2Ugb24gV2luZG93cyIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihNQVhGRCA8PSAyNTYsCisgICAgICAgICAgICAgICAgICAgICAibGFyZ2VzdCBhc3NpZ25hYmxlIGZkIG51bWJlciBpcyB0b28gc21hbGwiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJkdXAyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgbmVlZHMgb3MuZHVwMigpIikKKyAgICBkZWYgdGVzdF9sYXJnZV9mZF90cmFuc2ZlcihzZWxmKToKKyAgICAgICAgIyBXaXRoIGZkID4gMjU2IChpc3N1ZSAjMTE2NTcpCisgICAgICAgIGlmIHNlbGYuVFlQRSAhPSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBwcm9jZXNzZXMiKQorICAgICAgICBjb25uLCBjaGlsZF9jb25uID0gc2VsZi5QaXBlKGR1cGxleD1UcnVlKQorCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3dyaXRlZmQsIGFyZ3M9KGNoaWxkX2Nvbm4sIGIiYmFyIiwgVHJ1ZSkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmZCA9IGYuZmlsZW5vKCkKKyAgICAgICAgICAgIGZvciBuZXdmZCBpbiByYW5nZSgyNTYsIE1BWEZEKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfZmRfYXNzaWduZWQobmV3ZmQpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImNvdWxkIG5vdCBmaW5kIGFuIHVuYXNzaWduZWQgbGFyZ2UgZmlsZSBkZXNjcmlwdG9yIikKKyAgICAgICAgICAgIG9zLmR1cDIoZmQsIG5ld2ZkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5zZW5kX2hhbmRsZShjb25uLCBuZXdmZCwgcC5waWQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKG5ld2ZkKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiYmFyIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc2VuZF9kYXRhX3dpdGhvdXRfZmQoc2VsZiwgY29ubik6CisgICAgICAgIG9zLndyaXRlKGNvbm4uZmlsZW5vKCksIGIiXDAiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1JFRFVDVElPTiwgInRlc3QgbmVlZHMgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbiIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgImRvZXNuJ3QgbWFrZSBzZW5zZSBvbiBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF9taXNzaW5nX2ZkX3RyYW5zZmVyKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIHJlY2VpdmVkIGRhdGEgaXMgbm90CisgICAgICAgICMgYWNjb21wYW5pZWQgYnkgYSBmaWxlIGRlc2NyaXB0b3IgaW4gYW5jaWxsYXJ5IGRhdGEuCisgICAgICAgIGlmIHNlbGYuVFlQRSAhPSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBwcm9jZXNzZXMiKQorICAgICAgICBjb25uLCBjaGlsZF9jb25uID0gc2VsZi5QaXBlKGR1cGxleD1UcnVlKQorCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3NlbmRfZGF0YV93aXRob3V0X2ZkLCBhcmdzPShjaGlsZF9jb25uLCkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCByZWR1Y3Rpb24ucmVjdl9oYW5kbGUsIGNvbm4pCisgICAgICAgIHAuam9pbigpCisKK2NsYXNzIF9UZXN0TGlzdGVuZXJDbGllbnQoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsICd0aHJlYWRzJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdChjbHMsIGFkZHJlc3MpOgorICAgICAgICBjb25uID0gY2xzLmNvbm5lY3Rpb24uQ2xpZW50KGFkZHJlc3MpCisgICAgICAgIGNvbm4uc2VuZCgnaGVsbG8nKQorICAgICAgICBjb25uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2xpc3RlbmVyX2NsaWVudChzZWxmKToKKyAgICAgICAgZm9yIGZhbWlseSBpbiBzZWxmLmNvbm5lY3Rpb24uZmFtaWxpZXM6CisgICAgICAgICAgICBsID0gc2VsZi5jb25uZWN0aW9uLkxpc3RlbmVyKGZhbWlseT1mYW1pbHkpCisgICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0LCBhcmdzPShsLmFkZHJlc3MsKSkKKyAgICAgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICBjb25uID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnJlY3YoKSwgJ2hlbGxvJykKKyAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICBsLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2lzc3VlMTQ3MjUoc2VsZik6CisgICAgICAgIGwgPSBzZWxmLmNvbm5lY3Rpb24uTGlzdGVuZXIoKQorICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0LCBhcmdzPShsLmFkZHJlc3MsKSkKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICMgT24gV2luZG93cyB0aGUgY2xpZW50IHByb2Nlc3Mgc2hvdWxkIGJ5IG5vdyBoYXZlIGNvbm5lY3RlZCwKKyAgICAgICAgIyB3cml0dGVuIGRhdGEgYW5kIGNsb3NlZCB0aGUgcGlwZSBoYW5kbGUgYnkgbm93LiAgVGhpcyBjYXVzZXMKKyAgICAgICAgIyBDb25uZWN0TmFtZGVkUGlwZSgpIHRvIGZhaWwgd2l0aCBFUlJPUl9OT19EQVRBLiAgU2VlIElzc3VlCisgICAgICAgICMgMTQ3MjUuCisgICAgICAgIGNvbm4gPSBsLmFjY2VwdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5yZWN2KCksICdoZWxsbycpCisgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICBsLmNsb3NlKCkKKworIworIyBUZXN0IG9mIHNlbmRpbmcgY29ubmVjdGlvbiBhbmQgc29ja2V0IG9iamVjdHMgYmV0d2VlbiBwcm9jZXNzZXMKKyMKKyIiIgorY2xhc3MgX1Rlc3RQaWNrbGluZ0Nvbm5lY3Rpb25zKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKworICAgIGRlZiBfbGlzdGVuZXIoc2VsZiwgY29ubiwgZmFtaWxpZXMpOgorICAgICAgICBmb3IgZmFtIGluIGZhbWlsaWVzOgorICAgICAgICAgICAgbCA9IHNlbGYuY29ubmVjdGlvbi5MaXN0ZW5lcihmYW1pbHk9ZmFtKQorICAgICAgICAgICAgY29ubi5zZW5kKGwuYWRkcmVzcykKKyAgICAgICAgICAgIG5ld19jb25uID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgY29ubi5zZW5kKG5ld19jb25uKQorCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIGwgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIGwuYmluZCgoJ2xvY2FsaG9zdCcsIDApKQorICAgICAgICAgICAgY29ubi5zZW5kKGwuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgICAgIGwubGlzdGVuKDEpCisgICAgICAgICAgICBuZXdfY29ubiwgYWRkciA9IGwuYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uc2VuZChuZXdfY29ubikKKworICAgICAgICBjb25uLnJlY3YoKQorCisgICAgZGVmIF9yZW1vdGUoc2VsZiwgY29ubik6CisgICAgICAgIGZvciAoYWRkcmVzcywgbXNnKSBpbiBpdGVyKGNvbm4ucmVjdiwgTm9uZSk6CisgICAgICAgICAgICBjbGllbnQgPSBzZWxmLmNvbm5lY3Rpb24uQ2xpZW50KGFkZHJlc3MpCisgICAgICAgICAgICBjbGllbnQuc2VuZChtc2cudXBwZXIoKSkKKyAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICdwcm9jZXNzZXMnOgorICAgICAgICAgICAgYWRkcmVzcywgbXNnID0gY29ubi5yZWN2KCkKKyAgICAgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoYWRkcmVzcykKKyAgICAgICAgICAgIGNsaWVudC5zZW5kYWxsKG1zZy51cHBlcigpKQorICAgICAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBjb25uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcuYWxsb3dfY29ubmVjdGlvbl9waWNrbGluZygpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZhbWlsaWVzID0gc2VsZi5jb25uZWN0aW9uLmZhbWlsaWVzCisKKyAgICAgICAgbGNvbm4sIGxjb25uMCA9IHNlbGYuUGlwZSgpCisgICAgICAgIGxwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9saXN0ZW5lciwgYXJncz0obGNvbm4wLCBmYW1pbGllcykpCisgICAgICAgIGxwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgbHAuc3RhcnQoKQorICAgICAgICBsY29ubjAuY2xvc2UoKQorCisgICAgICAgIHJjb25uLCByY29ubjAgPSBzZWxmLlBpcGUoKQorICAgICAgICBycCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fcmVtb3RlLCBhcmdzPShyY29ubjAsKSkKKyAgICAgICAgcnAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBycC5zdGFydCgpCisgICAgICAgIHJjb25uMC5jbG9zZSgpCisKKyAgICAgICAgZm9yIGZhbSBpbiBmYW1pbGllczoKKyAgICAgICAgICAgIG1zZyA9ICgnVGhpcyBjb25uZWN0aW9uIHVzZXMgZmFtaWx5ICVzJyAlIGZhbSkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICAgICBhZGRyZXNzID0gbGNvbm4ucmVjdigpCisgICAgICAgICAgICByY29ubi5zZW5kKChhZGRyZXNzLCBtc2cpKQorICAgICAgICAgICAgbmV3X2Nvbm4gPSBsY29ubi5yZWN2KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X2Nvbm4ucmVjdigpLCBtc2cudXBwZXIoKSkKKworICAgICAgICByY29ubi5zZW5kKE5vbmUpCisKKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICdwcm9jZXNzZXMnOgorICAgICAgICAgICAgbXNnID0gbGF0aW4oJ1RoaXMgY29ubmVjdGlvbiB1c2VzIGEgbm9ybWFsIHNvY2tldCcpCisgICAgICAgICAgICBhZGRyZXNzID0gbGNvbm4ucmVjdigpCisgICAgICAgICAgICByY29ubi5zZW5kKChhZGRyZXNzLCBtc2cpKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdmcm9tZmQnKToKKyAgICAgICAgICAgICAgICBuZXdfY29ubiA9IGxjb25uLnJlY3YoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X2Nvbm4ucmVjdigxMDApLCBtc2cudXBwZXIoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBYWFggT24gV2luZG93cyB3aXRoIFB5Mi42IG5lZWQgdG8gYmFja3BvcnQgZnJvbWZkKCkKKyAgICAgICAgICAgICAgICBkaXNjYXJkID0gbGNvbm4ucmVjdl9ieXRlcygpCisKKyAgICAgICAgbGNvbm4uc2VuZChOb25lKQorCisgICAgICAgIHJjb25uLmNsb3NlKCkKKyAgICAgICAgbGNvbm4uY2xvc2UoKQorCisgICAgICAgIGxwLmpvaW4oKQorICAgICAgICBycC5qb2luKCkKKyIiIgorIworIworIworCitjbGFzcyBfVGVzdEhlYXAoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorCisgICAgZGVmIHRlc3RfaGVhcChzZWxmKToKKyAgICAgICAgaXRlcmF0aW9ucyA9IDUwMDAKKyAgICAgICAgbWF4YmxvY2tzID0gNTAKKyAgICAgICAgYmxvY2tzID0gW10KKworICAgICAgICAjIGNyZWF0ZSBhbmQgZGVzdHJveSBsb3RzIG9mIGJsb2NrcyBvZiBkaWZmZXJlbnQgc2l6ZXMKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGl0ZXJhdGlvbnMpOgorICAgICAgICAgICAgc2l6ZSA9IGludChyYW5kb20ubG9nbm9ybXZhcmlhdGUoMCwgMSkgKiAxMDAwKQorICAgICAgICAgICAgYiA9IG11bHRpcHJvY2Vzc2luZy5oZWFwLkJ1ZmZlcldyYXBwZXIoc2l6ZSkKKyAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoYikKKyAgICAgICAgICAgIGlmIGxlbihibG9ja3MpID4gbWF4YmxvY2tzOgorICAgICAgICAgICAgICAgIGkgPSByYW5kb20ucmFuZHJhbmdlKG1heGJsb2NrcykKKyAgICAgICAgICAgICAgICBkZWwgYmxvY2tzW2ldCisKKyAgICAgICAgIyBnZXQgdGhlIGhlYXAgb2JqZWN0CisgICAgICAgIGhlYXAgPSBtdWx0aXByb2Nlc3NpbmcuaGVhcC5CdWZmZXJXcmFwcGVyLl9oZWFwCisKKyAgICAgICAgIyB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRoZSBoZWFwCisgICAgICAgIGFsbCA9IFtdCisgICAgICAgIG9jY3VwaWVkID0gMAorICAgICAgICBoZWFwLl9sb2NrLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoaGVhcC5fbG9jay5yZWxlYXNlKQorICAgICAgICBmb3IgTCBpbiBoZWFwLl9sZW5fdG9fc2VxLnZhbHVlcygpOgorICAgICAgICAgICAgZm9yIGFyZW5hLCBzdGFydCwgc3RvcCBpbiBMOgorICAgICAgICAgICAgICAgIGFsbC5hcHBlbmQoKGhlYXAuX2FyZW5hcy5pbmRleChhcmVuYSksIHN0YXJ0LCBzdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Atc3RhcnQsICdmcmVlJykpCisgICAgICAgIGZvciBhcmVuYSwgc3RhcnQsIHN0b3AgaW4gaGVhcC5fYWxsb2NhdGVkX2Jsb2NrczoKKyAgICAgICAgICAgIGFsbC5hcHBlbmQoKGhlYXAuX2FyZW5hcy5pbmRleChhcmVuYSksIHN0YXJ0LCBzdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcC1zdGFydCwgJ29jY3VwaWVkJykpCisgICAgICAgICAgICBvY2N1cGllZCArPSAoc3RvcC1zdGFydCkKKworICAgICAgICBhbGwuc29ydCgpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFsbCktMSk6CisgICAgICAgICAgICAoYXJlbmEsIHN0YXJ0LCBzdG9wKSA9IGFsbFtpXVs6M10KKyAgICAgICAgICAgIChuYXJlbmEsIG5zdGFydCwgbnN0b3ApID0gYWxsW2krMV1bOjNdCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKGFyZW5hICE9IG5hcmVuYSBhbmQgbnN0YXJ0ID09IDApIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0b3AgPT0gbnN0YXJ0KSkKKworICAgIGRlZiB0ZXN0X2ZyZWVfZnJvbV9nYyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGZyZWVpbmcgb2YgYmxvY2tzIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3RvciBkb2Vzbid0IGRlYWRsb2NrCisgICAgICAgICMgKGlzc3VlICMxMjM1MikuCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBHQyBpcyBlbmFibGVkLCBhbmQgc2V0IGxvd2VyIGNvbGxlY3Rpb24gdGhyZXNob2xkcyB0bworICAgICAgICAjIG1ha2UgY29sbGVjdGlvbnMgbW9yZSBmcmVxdWVudCAoYW5kIGluY3JlYXNlIHRoZSBwcm9iYWJpbGl0eSBvZgorICAgICAgICAjIGRlYWRsb2NrKS4KKyAgICAgICAgaWYgbm90IGdjLmlzZW5hYmxlZCgpOgorICAgICAgICAgICAgZ2MuZW5hYmxlKCkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChnYy5kaXNhYmxlKQorICAgICAgICB0aHJlc2hvbGRzID0gZ2MuZ2V0X3RocmVzaG9sZCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChnYy5zZXRfdGhyZXNob2xkLCAqdGhyZXNob2xkcykKKyAgICAgICAgZ2Muc2V0X3RocmVzaG9sZCgxMCkKKworICAgICAgICAjIHBlcmZvcm0gbnVtZXJvdXMgYmxvY2sgYWxsb2NhdGlvbnMsIHdpdGggY3ljbGljIHJlZmVyZW5jZXMgdG8gbWFrZQorICAgICAgICAjIHN1cmUgb2JqZWN0cyBhcmUgY29sbGVjdGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBnYworICAgICAgICBmb3IgaSBpbiByYW5nZSg1MDAwKToKKyAgICAgICAgICAgIGEgPSBtdWx0aXByb2Nlc3NpbmcuaGVhcC5CdWZmZXJXcmFwcGVyKDEpCisgICAgICAgICAgICBiID0gbXVsdGlwcm9jZXNzaW5nLmhlYXAuQnVmZmVyV3JhcHBlcigxKQorICAgICAgICAgICAgIyBjaXJjdWxhciByZWZlcmVuY2VzCisgICAgICAgICAgICBhLmJ1ZGR5ID0gYgorICAgICAgICAgICAgYi5idWRkeSA9IGEKKworIworIworIworCitjbGFzcyBfRm9vKFN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbCisgICAgICAgICgneCcsIGNfaW50KSwKKyAgICAgICAgKCd5JywgY19kb3VibGUpCisgICAgICAgIF0KKworY2xhc3MgX1Rlc3RTaGFyZWRDVHlwZXMoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBub3QgSEFTX1NIQVJFRENUWVBFUzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInJlcXVpcmVzIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9kb3VibGUoY2xzLCB4LCB5LCBmb28sIGFyciwgc3RyaW5nKToKKyAgICAgICAgeC52YWx1ZSAqPSAyCisgICAgICAgIHkudmFsdWUgKj0gMgorICAgICAgICBmb28ueCAqPSAyCisgICAgICAgIGZvby55ICo9IDIKKyAgICAgICAgc3RyaW5nLnZhbHVlICo9IDIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFycikpOgorICAgICAgICAgICAgYXJyW2ldICo9IDIKKworICAgIGRlZiB0ZXN0X3NoYXJlZGN0eXBlcyhzZWxmLCBsb2NrPUZhbHNlKToKKyAgICAgICAgeCA9IFZhbHVlKCdpJywgNywgbG9jaz1sb2NrKQorICAgICAgICB5ID0gVmFsdWUoY19kb3VibGUsIDEuMC8zLjAsIGxvY2s9bG9jaykKKyAgICAgICAgZm9vID0gVmFsdWUoX0ZvbywgMywgMiwgbG9jaz1sb2NrKQorICAgICAgICBhcnIgPSBzZWxmLkFycmF5KCdkJywgcmFuZ2UoMTApLCBsb2NrPWxvY2spCisgICAgICAgIHN0cmluZyA9IHNlbGYuQXJyYXkoJ2MnLCAyMCwgbG9jaz1sb2NrKQorICAgICAgICBzdHJpbmcudmFsdWUgPSBsYXRpbignaGVsbG8nKQorCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX2RvdWJsZSwgYXJncz0oeCwgeSwgZm9vLCBhcnIsIHN0cmluZykpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgcC5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsdWUsIDE0KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHkudmFsdWUsIDIuMC8zLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLngsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZm9vLnksIDQuMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChhcnJbaV0sIGkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcudmFsdWUsIGxhdGluKCdoZWxsb2hlbGxvJykpCisKKyAgICBkZWYgdGVzdF9zeW5jaHJvbml6ZShzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3NoYXJlZGN0eXBlcyhsb2NrPVRydWUpCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBmb28gPSBfRm9vKDIsIDUuMCkKKyAgICAgICAgYmFyID0gY29weShmb28pCisgICAgICAgIGZvby54ID0gMAorICAgICAgICBmb28ueSA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXIueCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChiYXIueSwgNS4wKQorCisjCisjCisjCisKK2NsYXNzIF9UZXN0RmluYWxpemUoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2ZpbmFsaXplKGNscywgY29ubik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGEgPSBGb28oKQorICAgICAgICB1dGlsLkZpbmFsaXplKGEsIGNvbm4uc2VuZCwgYXJncz0oJ2EnLCkpCisgICAgICAgIGRlbCBhICAgICAgICAgICAjIHRyaWdnZXJzIGNhbGxiYWNrIGZvciBhCisKKyAgICAgICAgYiA9IEZvbygpCisgICAgICAgIGNsb3NlX2IgPSB1dGlsLkZpbmFsaXplKGIsIGNvbm4uc2VuZCwgYXJncz0oJ2InLCkpCisgICAgICAgIGNsb3NlX2IoKSAgICAgICAjIHRyaWdnZXJzIGNhbGxiYWNrIGZvciBiCisgICAgICAgIGNsb3NlX2IoKSAgICAgICAjIGRvZXMgbm90aGluZyBiZWNhdXNlIGNhbGxiYWNrIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkCisgICAgICAgIGRlbCBiICAgICAgICAgICAjIGRvZXMgbm90aGluZyBiZWNhdXNlIGNhbGxiYWNrIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkCisKKyAgICAgICAgYyA9IEZvbygpCisgICAgICAgIHV0aWwuRmluYWxpemUoYywgY29ubi5zZW5kLCBhcmdzPSgnYycsKSkKKworICAgICAgICBkMTAgPSBGb28oKQorICAgICAgICB1dGlsLkZpbmFsaXplKGQxMCwgY29ubi5zZW5kLCBhcmdzPSgnZDEwJywpLCBleGl0cHJpb3JpdHk9MSkKKworICAgICAgICBkMDEgPSBGb28oKQorICAgICAgICB1dGlsLkZpbmFsaXplKGQwMSwgY29ubi5zZW5kLCBhcmdzPSgnZDAxJywpLCBleGl0cHJpb3JpdHk9MCkKKyAgICAgICAgZDAyID0gRm9vKCkKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShkMDIsIGNvbm4uc2VuZCwgYXJncz0oJ2QwMicsKSwgZXhpdHByaW9yaXR5PTApCisgICAgICAgIGQwMyA9IEZvbygpCisgICAgICAgIHV0aWwuRmluYWxpemUoZDAzLCBjb25uLnNlbmQsIGFyZ3M9KCdkMDMnLCksIGV4aXRwcmlvcml0eT0wKQorCisgICAgICAgIHV0aWwuRmluYWxpemUoTm9uZSwgY29ubi5zZW5kLCBhcmdzPSgnZScsKSwgZXhpdHByaW9yaXR5PS0xMCkKKworICAgICAgICB1dGlsLkZpbmFsaXplKE5vbmUsIGNvbm4uc2VuZCwgYXJncz0oJ1NUT1AnLCksIGV4aXRwcmlvcml0eT0tMTAwKQorCisgICAgICAgICMgY2FsbCBtdWx0aXByb2Nlc3NpbmcncyBjbGVhbnVwIGZ1bmN0aW9uIHRoZW4gZXhpdCBwcm9jZXNzIHdpdGhvdXQKKyAgICAgICAgIyBnYXJiYWdlIGNvbGxlY3RpbmcgbG9jYWxzCisgICAgICAgIHV0aWwuX2V4aXRfZnVuY3Rpb24oKQorICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgb3MuX2V4aXQoMCkKKworICAgIGRlZiB0ZXN0X2ZpbmFsaXplKHNlbGYpOgorICAgICAgICBjb25uLCBjaGlsZF9jb25uID0gc2VsZi5QaXBlKCkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2ZpbmFsaXplLCBhcmdzPShjaGlsZF9jb25uLCkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgcC5qb2luKCkKKworICAgICAgICByZXN1bHQgPSBbb2JqIGZvciBvYmogaW4gaXRlcihjb25uLnJlY3YsICdTVE9QJyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ2EnLCAnYicsICdkMTAnLCAnZDAzJywgJ2QwMicsICdkMDEnLCAnZSddKQorCisjCisjIFRlc3QgdGhhdCBmcm9tIC4uLiBpbXBvcnQgKiB3b3JrcyBmb3IgZWFjaCBtb2R1bGUKKyMKKworY2xhc3MgX1Rlc3RJbXBvcnRTdGFyKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKworICAgIGRlZiB0ZXN0X2ltcG9ydChzZWxmKToKKyAgICAgICAgbW9kdWxlcyA9IFsKKyAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcnLCAnbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24nLAorICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5oZWFwJywgJ211bHRpcHJvY2Vzc2luZy5tYW5hZ2VycycsCisgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnBvb2wnLCAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MnLAorICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZScsICdtdWx0aXByb2Nlc3NpbmcudXRpbCcKKyAgICAgICAgICAgIF0KKworICAgICAgICBpZiBIQVNfUkVEVUNUSU9OOgorICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24nKQorCisgICAgICAgIGlmIGNfaW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBUaGlzIG1vZHVsZSByZXF1aXJlcyBfY3R5cGVzCisgICAgICAgICAgICBtb2R1bGVzLmFwcGVuZCgnbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcycpCisKKyAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlczoKKyAgICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKKyAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW25hbWVdCisKKyAgICAgICAgICAgIGZvciBhdHRyIGluIGdldGF0dHIobW9kLCAnX19hbGxfXycsICgpKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIobW9kLCBhdHRyKSwKKyAgICAgICAgICAgICAgICAgICAgJyVyIGRvZXMgbm90IGhhdmUgYXR0cmlidXRlICVyJyAlIChtb2QsIGF0dHIpCisgICAgICAgICAgICAgICAgICAgICkKKworIworIyBRdWljayB0ZXN0IHRoYXQgbG9nZ2luZyB3b3JrcyAtLSBkb2VzIG5vdCB0ZXN0IGxvZ2dpbmcgb3V0cHV0CisjCisKK2NsYXNzIF9UZXN0TG9nZ2luZyhCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCisKKyAgICBkZWYgdGVzdF9lbmFibGVfbG9nZ2luZyhzZWxmKToKKyAgICAgICAgbG9nZ2VyID0gbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKQorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwodXRpbC5TVUJXQVJOSU5HKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9nZ2VyIGlzIG5vdCBOb25lKQorICAgICAgICBsb2dnZXIuZGVidWcoJ3RoaXMgd2lsbCBub3QgYmUgcHJpbnRlZCcpCisgICAgICAgIGxvZ2dlci5pbmZvKCdub3Igd2lsbCB0aGlzJykKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKExPR19MRVZFTCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF9sZXZlbChjbHMsIGNvbm4pOgorICAgICAgICBsb2dnZXIgPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlcigpCisgICAgICAgIGNvbm4uc2VuZChsb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKSkKKworICAgIGRlZiB0ZXN0X2xldmVsKHNlbGYpOgorICAgICAgICBMRVZFTDEgPSAzMgorICAgICAgICBMRVZFTDIgPSAzNworCisgICAgICAgIGxvZ2dlciA9IG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkKKyAgICAgICAgcm9vdF9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIHJvb3RfbGV2ZWwgPSByb290X2xvZ2dlci5sZXZlbAorCisgICAgICAgIHJlYWRlciwgd3JpdGVyID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoZHVwbGV4PUZhbHNlKQorCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChMRVZFTDEpCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfbGV2ZWwsIGFyZ3M9KHdyaXRlciwpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTEVWRUwxLCByZWFkZXIucmVjdigpKQorCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLk5PVFNFVCkKKyAgICAgICAgcm9vdF9sb2dnZXIuc2V0TGV2ZWwoTEVWRUwyKQorICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2xldmVsLCBhcmdzPSh3cml0ZXIsKSkKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExFVkVMMiwgcmVhZGVyLnJlY3YoKSkKKworICAgICAgICByb290X2xvZ2dlci5zZXRMZXZlbChyb290X2xldmVsKQorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobGV2ZWw9TE9HX0xFVkVMKQorCisKKyMgY2xhc3MgX1Rlc3RMb2dnaW5nUHJvY2Vzc05hbWUoQmFzZVRlc3RDYXNlKToKKyMKKyMgICAgIGRlZiBoYW5kbGUoc2VsZiwgcmVjb3JkKToKKyMgICAgICAgICBhc3NlcnQgcmVjb3JkLnByb2Nlc3NOYW1lID09IG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisjICAgICAgICAgc2VsZi5fX2hhbmRsZWQgPSBUcnVlCisjCisjICAgICBkZWYgdGVzdF9sb2dnaW5nKHNlbGYpOgorIyAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLkhhbmRsZXIoKQorIyAgICAgICAgIGhhbmRsZXIuaGFuZGxlID0gc2VsZi5oYW5kbGUKKyMgICAgICAgICBzZWxmLl9faGFuZGxlZCA9IEZhbHNlCisjICAgICAgICAgIyBCeXBhc3MgZ2V0TG9nZ2VyKCkgYW5kIHNpZGUtZWZmZWN0cworIyAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyQ2xhc3MoKSgKKyMgICAgICAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcudGVzdC5UZXN0TG9nZ2luZ1Byb2Nlc3NOYW1lJykKKyMgICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorIyAgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBGYWxzZQorIworIyAgICAgICAgIGxvZ2dlci53YXJuKCdmb28nKQorIyAgICAgICAgIGFzc2VydCBzZWxmLl9faGFuZGxlZAorCisjCisjIENoZWNrIHRoYXQgUHJvY2Vzcy5qb2luKCkgcmV0cmllcyBpZiBvcy53YWl0cGlkKCkgZmFpbHMgd2l0aCBFSU5UUgorIworCitjbGFzcyBfVGVzdFBvbGxFaW50cihCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2tpbGxlcihjbHMsIHBpZCk6CisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR1VTUjEpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR1VTUjEnKSwgJ3JlcXVpcmVzIFNJR1VTUjEnKQorICAgIGRlZiB0ZXN0X3BvbGxfZWludHIoc2VsZik6CisgICAgICAgIGdvdF9zaWduYWwgPSBbRmFsc2VdCisgICAgICAgIGRlZiByZWNvcmQoKmFyZ3MpOgorICAgICAgICAgICAgZ290X3NpZ25hbFswXSA9IFRydWUKKyAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgb2xkaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIHJlY29yZCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2lsbGVyID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9raWxsZXIsIGFyZ3M9KHBpZCwpKQorICAgICAgICAgICAga2lsbGVyLnN0YXJ0KCkKKyAgICAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXRpbWUuc2xlZXAsIGFyZ3M9KDEsKSkKKyAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgcC5qb2luKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnb3Rfc2lnbmFsWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCAwKQorICAgICAgICAgICAga2lsbGVyLmpvaW4oKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgb2xkaGFuZGxlcikKKworIworIyBUZXN0IHRvIHZlcmlmeSBoYW5kbGUgdmVyaWZpY2F0aW9uLCBzZWUgaXNzdWUgMzMyMQorIworCitjbGFzcyBUZXN0SW52YWxpZEhhbmRsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAdW5pdHRlc3Quc2tpcElmKFdJTjMyLCAic2tpcHBlZCBvbiBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2hhbmRsZXMoc2VsZik6CisgICAgICAgIGNvbm4gPSBfbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24oNDQ5Nzc2MDgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGNvbm4ucG9sbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgX211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uLCAtMSkKKworIworIyBGdW5jdGlvbnMgdXNlZCB0byBjcmVhdGUgdGVzdCBjYXNlcyBmcm9tIHRoZSBiYXNlIG9uZXMgaW4gdGhpcyBtb2R1bGUKKyMKKworZGVmIGdldF9hdHRyaWJ1dGVzKFNvdXJjZSwgbmFtZXMpOgorICAgIGQgPSB7fQorICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICBvYmogPSBnZXRhdHRyKFNvdXJjZSwgbmFtZSkKKyAgICAgICAgaWYgdHlwZShvYmopID09IHR5cGUoZ2V0X2F0dHJpYnV0ZXMpOgorICAgICAgICAgICAgb2JqID0gc3RhdGljbWV0aG9kKG9iaikKKyAgICAgICAgZFtuYW1lXSA9IG9iagorICAgIHJldHVybiBkCisKK2RlZiBjcmVhdGVfdGVzdF9jYXNlcyhNaXhpbiwgdHlwZSk6CisgICAgcmVzdWx0ID0ge30KKyAgICBnbG9iID0gZ2xvYmFscygpCisgICAgVHlwZSA9IHR5cGUuY2FwaXRhbGl6ZSgpCisKKyAgICBmb3IgbmFtZSBpbiBnbG9iLmtleXMoKToKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfVGVzdCcpOgorICAgICAgICAgICAgYmFzZSA9IGdsb2JbbmFtZV0KKyAgICAgICAgICAgIGlmIHR5cGUgaW4gYmFzZS5BTExPV0VEX1RZUEVTOgorICAgICAgICAgICAgICAgIG5ld25hbWUgPSAnV2l0aCcgKyBUeXBlICsgbmFtZVsxOl0KKyAgICAgICAgICAgICAgICBjbGFzcyBUZW1wKGJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlLCBNaXhpbik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICByZXN1bHRbbmV3bmFtZV0gPSBUZW1wCisgICAgICAgICAgICAgICAgVGVtcC5fX25hbWVfXyA9IG5ld25hbWUKKyAgICAgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBNaXhpbi5fX21vZHVsZV9fCisgICAgcmV0dXJuIHJlc3VsdAorCisjCisjIENyZWF0ZSB0ZXN0IGNhc2VzCisjCisKK2NsYXNzIFByb2Nlc3Nlc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICdwcm9jZXNzZXMnCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCisgICAgbG9jYWxzKCkudXBkYXRlKGdldF9hdHRyaWJ1dGVzKG11bHRpcHJvY2Vzc2luZywgKAorICAgICAgICAnUXVldWUnLCAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsCisgICAgICAgICdDb25kaXRpb24nLCAnRXZlbnQnLCAnVmFsdWUnLCAnQXJyYXknLCAnUmF3VmFsdWUnLAorICAgICAgICAnUmF3QXJyYXknLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbicsICdQaXBlJywKKyAgICAgICAgJ2Nvbm5lY3Rpb24nLCAnSm9pbmFibGVRdWV1ZScsICdQb29sJworICAgICAgICApKSkKKwordGVzdGNhc2VzX3Byb2Nlc3NlcyA9IGNyZWF0ZV90ZXN0X2Nhc2VzKFByb2Nlc3Nlc01peGluLCB0eXBlPSdwcm9jZXNzZXMnKQorZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfcHJvY2Vzc2VzKQorCisKK2NsYXNzIE1hbmFnZXJNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAnbWFuYWdlcicKKyAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKKyAgICBtYW5hZ2VyID0gb2JqZWN0Ll9fbmV3X18obXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyKQorICAgIGxvY2FscygpLnVwZGF0ZShnZXRfYXR0cmlidXRlcyhtYW5hZ2VyLCAoCisgICAgICAgICdRdWV1ZScsICdMb2NrJywgJ1JMb2NrJywgJ1NlbWFwaG9yZScsICdCb3VuZGVkU2VtYXBob3JlJywKKyAgICAgICAnQ29uZGl0aW9uJywgJ0V2ZW50JywgJ1ZhbHVlJywgJ0FycmF5JywgJ2xpc3QnLCAnZGljdCcsCisgICAgICAgICdOYW1lc3BhY2UnLCAnSm9pbmFibGVRdWV1ZScsICdQb29sJworICAgICAgICApKSkKKwordGVzdGNhc2VzX21hbmFnZXIgPSBjcmVhdGVfdGVzdF9jYXNlcyhNYW5hZ2VyTWl4aW4sIHR5cGU9J21hbmFnZXInKQorZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfbWFuYWdlcikKKworCitjbGFzcyBUaHJlYWRzTWl4aW4ob2JqZWN0KToKKyAgICBUWVBFID0gJ3RocmVhZHMnCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5Qcm9jZXNzCisgICAgbG9jYWxzKCkudXBkYXRlKGdldF9hdHRyaWJ1dGVzKG11bHRpcHJvY2Vzc2luZy5kdW1teSwgKAorICAgICAgICAnUXVldWUnLCAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsCisgICAgICAgICdDb25kaXRpb24nLCAnRXZlbnQnLCAnVmFsdWUnLCAnQXJyYXknLCAnY3VycmVudF9wcm9jZXNzJywKKyAgICAgICAgJ2FjdGl2ZV9jaGlsZHJlbicsICdQaXBlJywgJ2Nvbm5lY3Rpb24nLCAnZGljdCcsICdsaXN0JywKKyAgICAgICAgJ05hbWVzcGFjZScsICdKb2luYWJsZVF1ZXVlJywgJ1Bvb2wnCisgICAgICAgICkpKQorCit0ZXN0Y2FzZXNfdGhyZWFkcyA9IGNyZWF0ZV90ZXN0X2Nhc2VzKFRocmVhZHNNaXhpbiwgdHlwZT0ndGhyZWFkcycpCitnbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc190aHJlYWRzKQorCitjbGFzcyBPdGhlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVE9ETzogYWRkIG1vcmUgdGVzdHMgZm9yIGRlbGl2ZXIvYW5zd2VyIGNoYWxsZW5nZS4KKyAgICBkZWYgdGVzdF9kZWxpdmVyX2NoYWxsZW5nZV9hdXRoX2ZhaWx1cmUoc2VsZik6CisgICAgICAgIGNsYXNzIF9GYWtlQ29ubmVjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgZGVmIHJlY3ZfYnl0ZXMoc2VsZiwgc2l6ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGInc29tZXRoaW5nIGJvZ3VzJworICAgICAgICAgICAgZGVmIHNlbmRfYnl0ZXMoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtdWx0aXByb2Nlc3NpbmcuQXV0aGVudGljYXRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uZGVsaXZlcl9jaGFsbGVuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9GYWtlQ29ubmVjdGlvbigpLCBiJ2FiYycpCisKKyAgICBkZWYgdGVzdF9hbnN3ZXJfY2hhbGxlbmdlX2F1dGhfZmFpbHVyZShzZWxmKToKKyAgICAgICAgY2xhc3MgX0Zha2VDb25uZWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5jb3VudCA9IDAKKyAgICAgICAgICAgIGRlZiByZWN2X2J5dGVzKHNlbGYsIHNpemUpOgorICAgICAgICAgICAgICAgIHNlbGYuY291bnQgKz0gMQorICAgICAgICAgICAgICAgIGlmIHNlbGYuY291bnQgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNIQUxMRU5HRQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5jb3VudCA9PSAyOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYidzb21ldGhpbmcgYm9ndXMnCisgICAgICAgICAgICAgICAgcmV0dXJuIGInJworICAgICAgICAgICAgZGVmIHNlbmRfYnl0ZXMoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtdWx0aXByb2Nlc3NpbmcuQXV0aGVudGljYXRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uYW5zd2VyX2NoYWxsZW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zha2VDb25uZWN0aW9uKCksIGInYWJjJykKKworIworIyBUZXN0IE1hbmFnZXIuc3RhcnQoKS9Qb29sLl9faW5pdF9fKCkgaW5pdGlhbGl6ZXIgZmVhdHVyZSAtIHNlZSBpc3N1ZSA1NTg1CisjCisKK2RlZiBpbml0aWFsaXplcihucyk6CisgICAgbnMudGVzdCArPSAxCisKK2NsYXNzIFRlc3RJbml0aWFsaXplcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5tZ3IgPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCisgICAgICAgIHNlbGYubnMgPSBzZWxmLm1nci5OYW1lc3BhY2UoKQorICAgICAgICBzZWxmLm5zLnRlc3QgPSAwCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubWdyLnNodXRkb3duKCkKKworICAgIGRlZiB0ZXN0X21hbmFnZXJfaW5pdGlhbGl6ZXIoc2VsZik6CisgICAgICAgIG0gPSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG0uc3RhcnQsIDEpCisgICAgICAgIG0uc3RhcnQoaW5pdGlhbGl6ZXIsIChzZWxmLm5zLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ucy50ZXN0LCAxKQorICAgICAgICBtLnNodXRkb3duKCkKKworICAgIGRlZiB0ZXN0X3Bvb2xfaW5pdGlhbGl6ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbXVsdGlwcm9jZXNzaW5nLlBvb2wsIGluaXRpYWxpemVyPTEpCisgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgxLCBpbml0aWFsaXplciwgKHNlbGYubnMsKSkKKyAgICAgICAgcC5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ucy50ZXN0LCAxKQorCisjCisjIElzc3VlIDUxNTUsIDUzMTMsIDUzMzE6IFRlc3QgcHJvY2VzcyBpbiBwcm9jZXNzZXMKKyMgVmVyaWZpZXMgb3MuY2xvc2Uoc3lzLnN0ZGluLmZpbGVubykgdnMuIHN5cy5zdGRpbi5jbG9zZSgpIGJlaGF2aW9yCisjCisKK2RlZiBfVGhpc1N1YlByb2Nlc3MocSk6CisgICAgdHJ5OgorICAgICAgICBpdGVtID0gcS5nZXQoYmxvY2s9RmFsc2UpCisgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICBwYXNzCisKK2RlZiBfVGVzdFByb2Nlc3MocSk6CisgICAgcXVldWUgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorICAgIHN1YlByb2MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9X1RoaXNTdWJQcm9jZXNzLCBhcmdzPShxdWV1ZSwpKQorICAgIHN1YlByb2MuZGFlbW9uID0gVHJ1ZQorICAgIHN1YlByb2Muc3RhcnQoKQorICAgIHN1YlByb2Muam9pbigpCisKK2RlZiBfYWZ1bmMoeCk6CisgICAgcmV0dXJuIHgqeAorCitkZWYgcG9vbF9pbl9wcm9jZXNzKCk6CisgICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKHByb2Nlc3Nlcz00KQorICAgIHggPSBwb29sLm1hcChfYWZ1bmMsIFsxLCAyLCAzLCA0LCA1LCA2LCA3XSkKKworY2xhc3MgX2ZpbGVfbGlrZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWxlZ2F0ZSk6CisgICAgICAgIHNlbGYuX2RlbGVnYXRlID0gZGVsZWdhdGUKKyAgICAgICAgc2VsZi5fcGlkID0gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNhY2hlKHNlbGYpOgorICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAjIFRoZXJlIGFyZSBubyByYWNlIGNvbmRpdGlvbnMgc2luY2UgZm9yayBrZWVwcyBvbmx5IHRoZSBydW5uaW5nIHRocmVhZAorICAgICAgICBpZiBwaWQgIT0gc2VsZi5fcGlkOgorICAgICAgICAgICAgc2VsZi5fcGlkID0gcGlkCisgICAgICAgICAgICBzZWxmLl9jYWNoZSA9IFtdCisgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmNhY2hlLmFwcGVuZChkYXRhKQorCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICBzZWxmLl9kZWxlZ2F0ZS53cml0ZSgnJy5qb2luKHNlbGYuY2FjaGUpKQorICAgICAgICBzZWxmLl9jYWNoZSA9IFtdCisKK2NsYXNzIFRlc3RTdGRpbkJhZGZpbGVkZXNjcmlwdG9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3F1ZXVlX2luX3Byb2Nlc3Moc2VsZik6CisgICAgICAgIHF1ZXVlID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAgICAgcHJvYyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1fVGVzdFByb2Nlc3MsIGFyZ3M9KHF1ZXVlLCkpCisgICAgICAgIHByb2Muc3RhcnQoKQorICAgICAgICBwcm9jLmpvaW4oKQorCisgICAgZGVmIHRlc3RfcG9vbF9pbl9wcm9jZXNzKHNlbGYpOgorICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXBvb2xfaW5fcHJvY2VzcykKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHAuam9pbigpCisKKyAgICBkZWYgdGVzdF9mbHVzaGluZyhzZWxmKToKKyAgICAgICAgc2lvID0gU3RyaW5nSU8oKQorICAgICAgICBmbGlrZSA9IF9maWxlX2xpa2Uoc2lvKQorICAgICAgICBmbGlrZS53cml0ZSgnZm9vJykKKyAgICAgICAgcHJvYyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1sYW1iZGE6IGZsaWtlLmZsdXNoKCkpCisgICAgICAgIGZsaWtlLmZsdXNoKCkKKyAgICAgICAgYXNzZXJ0IHNpby5nZXR2YWx1ZSgpID09ICdmb28nCisKKyMKKyMgVGVzdCBpbnRlcmFjdGlvbiB3aXRoIHNvY2tldCB0aW1lb3V0cyAtIHNlZSBJc3N1ZSAjNjA1NgorIworCitjbGFzcyBUZXN0VGltZW91dHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF90aW1lb3V0KGNscywgY2hpbGQsIGFkZHJlc3MpOgorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGNoaWxkLnNlbmQoMTIzKQorICAgICAgICBjaGlsZC5jbG9zZSgpCisgICAgICAgIGNvbm4gPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5DbGllbnQoYWRkcmVzcykKKyAgICAgICAgY29ubi5zZW5kKDQ1NikKKyAgICAgICAgY29ubi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBvbGRfdGltZW91dCA9IHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgwLjEpCisgICAgICAgICAgICBwYXJlbnQsIGNoaWxkID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoZHVwbGV4PVRydWUpCisgICAgICAgICAgICBsID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIoZmFtaWx5PSdBRl9JTkVUJykKKyAgICAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdF90aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGNoaWxkLCBsLmFkZHJlc3MpKQorICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICBjaGlsZC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudC5yZWN2KCksIDEyMykKKyAgICAgICAgICAgIHBhcmVudC5jbG9zZSgpCisgICAgICAgICAgICBjb25uID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnJlY3YoKSwgNDU2KQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICBsLmNsb3NlKCkKKyAgICAgICAgICAgIHAuam9pbigxMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChvbGRfdGltZW91dCkKKworIworIyBUZXN0IHdoYXQgaGFwcGVucyB3aXRoIG5vICJpZiBfX25hbWVfXyA9PSAnX19tYWluX18nIgorIworCitjbGFzcyBUZXN0Tm9Gb3JrQm9tYih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfbm9mb3JrYm9tYihzZWxmKToKKyAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnbXBfZm9ya19ib21iLnB5JykKKyAgICAgICAgaWYgV0lOMzI6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBvdXQuZGVjb2RlKCdhc2NpaScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUnVudGltZUVycm9yJywgZXJyLmRlY29kZSgnYXNjaWknKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxMjMnLCBvdXQuZGVjb2RlKCdhc2NpaScpLnJzdHJpcCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgZXJyLmRlY29kZSgnYXNjaWknKSkKKworIworIyBJc3N1ZSAxMjA5ODogY2hlY2sgc3lzLmZsYWdzIG9mIGNoaWxkIG1hdGNoZXMgdGhhdCBmb3IgcGFyZW50CisjCisKK2NsYXNzIFRlc3RGbGFncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJ1bl9pbl9ncmFuZGNoaWxkKGNscywgY29ubik6CisgICAgICAgIGNvbm4uc2VuZCh0dXBsZShzeXMuZmxhZ3MpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJ1bl9pbl9jaGlsZChjbHMpOgorICAgICAgICBpbXBvcnQganNvbgorICAgICAgICByLCB3ID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoZHVwbGV4PUZhbHNlKQorICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWNscy5ydW5faW5fZ3JhbmRjaGlsZCwgYXJncz0odywpKQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgZ3JhbmRjaGlsZF9mbGFncyA9IHIucmVjdigpCisgICAgICAgIHAuam9pbigpCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgZmxhZ3MgPSAodHVwbGUoc3lzLmZsYWdzKSwgZ3JhbmRjaGlsZF9mbGFncykKKyAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhmbGFncykpCisKKyAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKKyAgICAgICAgaW1wb3J0IGpzb24sIHN1YnByb2Nlc3MKKyAgICAgICAgIyBzdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIHVudXN1YWwgZmxhZ3MKKyAgICAgICAgcHJvZyA9ICgnZnJvbSB0ZXN0LnRlc3RfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBUZXN0RmxhZ3M7ICcgKworICAgICAgICAgICAgICAgICdUZXN0RmxhZ3MucnVuX2luX2NoaWxkKCknKQorICAgICAgICBkYXRhID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctRScsICctQicsICctTycsICctYycsIHByb2ddKQorICAgICAgICBjaGlsZF9mbGFncywgZ3JhbmRjaGlsZF9mbGFncyA9IGpzb24ubG9hZHMoZGF0YS5kZWNvZGUoJ2FzY2lpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hpbGRfZmxhZ3MsIGdyYW5kY2hpbGRfZmxhZ3MpCisKKyMKKyMgSXNzdWUgIzE3NTU1OiBGb3JrQXdhcmVUaHJlYWRMb2NrCisjCisKK2NsYXNzIFRlc3RGb3JrQXdhcmVUaHJlYWRMb2NrKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFdlIHJlY3VyaXN2ZWx5IHN0YXJ0IHByb2Nlc3Nlcy4gIElzc3VlICMxNzU1NSBtZWFudCB0aGF0IHRoZQorICAgICMgYWZ0ZXIgZm9yayByZWdpc3RyeSB3b3VsZCBnZXQgZHVwbGljYXRlIGVudHJpZXMgZm9yIHRoZSBzYW1lCisgICAgIyBsb2NrLiAgVGhlIHNpemUgb2YgdGhlIHJlZ2lzdHJ5IGF0IGdlbmVyYXRpb24gbiB3YXMgfjIqKm4uCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY2hpbGQoY2xzLCBuLCBjb25uKToKKyAgICAgICAgaWYgbiA+IDE6CisgICAgICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWNscy5jaGlsZCwgYXJncz0obi0xLCBjb25uKSkKKyAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgcC5qb2luKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbm4uc2VuZChsZW4odXRpbC5fYWZ0ZXJmb3JrX3JlZ2lzdHJ5KSkKKyAgICAgICAgY29ubi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9sb2NrKHNlbGYpOgorICAgICAgICByLCB3ID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoRmFsc2UpCisgICAgICAgIGwgPSB1dGlsLkZvcmtBd2FyZVRocmVhZExvY2soKQorICAgICAgICBvbGRfc2l6ZSA9IGxlbih1dGlsLl9hZnRlcmZvcmtfcmVnaXN0cnkpCisgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5jaGlsZCwgYXJncz0oNSwgdykpCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICBuZXdfc2l6ZSA9IHIucmVjdigpCisgICAgICAgIHAuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG5ld19zaXplLCBvbGRfc2l6ZSkKKworIworIworIworCit0ZXN0Y2FzZXNfb3RoZXIgPSBbT3RoZXJUZXN0LCBUZXN0SW52YWxpZEhhbmRsZSwgVGVzdEluaXRpYWxpemVycywKKyAgICAgICAgICAgICAgICAgICBUZXN0U3RkaW5CYWRmaWxlZGVzY3JpcHRvciwgVGVzdFRpbWVvdXRzLCBUZXN0Tm9Gb3JrQm9tYiwKKyAgICAgICAgICAgICAgICAgICBUZXN0RmxhZ3MsIFRlc3RGb3JrQXdhcmVUaHJlYWRMb2NrXQorCisjCisjCisjCisKK2RlZiB0ZXN0X21haW4ocnVuPU5vbmUpOgorICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJsaW51eCIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2NrID0gbXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiT1NFcnJvciByYWlzZXMgb24gUkxvY2sgY3JlYXRpb24sIHNlZSBpc3N1ZSAzMTExISIpCisKKyAgICBjaGVja19lbm91Z2hfc2VtYXBob3JlcygpCisKKyAgICBpZiBydW4gaXMgTm9uZToKKyAgICAgICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0IGFzIHJ1bgorCisgICAgdXRpbC5nZXRfdGVtcF9kaXIoKSAgICAgIyBjcmVhdGVzIHRlbXAgZGlyZWN0b3J5IGZvciB1c2UgYnkgYWxsIHByb2Nlc3NlcworCisgICAgbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKS5zZXRMZXZlbChMT0dfTEVWRUwpCisKKyAgICBQcm9jZXNzZXNNaXhpbi5wb29sID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woNCkKKyAgICBUaHJlYWRzTWl4aW4ucG9vbCA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5Qb29sKDQpCisgICAgTWFuYWdlck1peGluLm1hbmFnZXIuX19pbml0X18oKQorICAgIE1hbmFnZXJNaXhpbi5tYW5hZ2VyLnN0YXJ0KCkKKyAgICBNYW5hZ2VyTWl4aW4ucG9vbCA9IE1hbmFnZXJNaXhpbi5tYW5hZ2VyLlBvb2woNCkKKworICAgIHRlc3RjYXNlcyA9ICgKKyAgICAgICAgc29ydGVkKHRlc3RjYXNlc19wcm9jZXNzZXMudmFsdWVzKCksIGtleT1sYW1iZGEgdGM6dGMuX19uYW1lX18pICsKKyAgICAgICAgc29ydGVkKHRlc3RjYXNlc190aHJlYWRzLnZhbHVlcygpLCBrZXk9bGFtYmRhIHRjOnRjLl9fbmFtZV9fKSArCisgICAgICAgIHNvcnRlZCh0ZXN0Y2FzZXNfbWFuYWdlci52YWx1ZXMoKSwga2V5PWxhbWJkYSB0Yzp0Yy5fX25hbWVfXykgKworICAgICAgICB0ZXN0Y2FzZXNfb3RoZXIKKyAgICAgICAgKQorCisgICAgbG9hZFRlc3RzRnJvbVRlc3RDYXNlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlCisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUobG9hZFRlc3RzRnJvbVRlc3RDYXNlKHRjKSBmb3IgdGMgaW4gdGVzdGNhc2VzKQorICAgICMgKG5jb2dobGFuKTogV2hldGhlciBvciBub3Qgc3lzLmV4Y19jbGVhciBpcyBleGVjdXRlZCBieSB0aGUgdGhyZWFkaW5nCisgICAgIyBtb2R1bGUgZHVyaW5nIHRoZXNlIHRlc3RzIGlzIGF0IGxlYXN0IHBsYXRmb3JtIGRlcGVuZGVudCBhbmQgcG9zc2libHkKKyAgICAjIG5vbi1kZXRlcm1pbmlzdGljIG9uIGFueSBnaXZlbiBwbGF0Zm9ybS4gU28gd2UgZG9uJ3QgbWluZCBpZiB0aGUgbGlzdGVkCisgICAgIyB3YXJuaW5ncyBhcmVuJ3QgYWN0dWFsbHkgcmFpc2VkLgorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoIi4rX18oZ2V0fHNldClzbGljZV9fIGhhcyBiZWVuIHJlbW92ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKHIic3lzLmV4Y19jbGVhclwoXCkgbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICBxdWlldD1UcnVlKToKKyAgICAgICAgcnVuKHN1aXRlKQorCisgICAgVGhyZWFkc01peGluLnBvb2wudGVybWluYXRlKCkKKyAgICBQcm9jZXNzZXNNaXhpbi5wb29sLnRlcm1pbmF0ZSgpCisgICAgTWFuYWdlck1peGluLnBvb2wudGVybWluYXRlKCkKKyAgICBNYW5hZ2VyTWl4aW4ubWFuYWdlci5zaHV0ZG93bigpCisKKyAgICBkZWwgUHJvY2Vzc2VzTWl4aW4ucG9vbCwgVGhyZWFkc01peGluLnBvb2wsIE1hbmFnZXJNaXhpbi5wb29sCisKK2RlZiBtYWluKCk6CisgICAgdGVzdF9tYWluKHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKS5ydW4pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9tdXRhbnRzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXV0YW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWMzODFlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXV0YW50cy5weQpAQCAtMCwwICsxLDI5MiBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVEVTVEZOCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgb3MKKworIyBGcm9tIFNGIGJ1ZyAjNDIyMTIxOiAgSW5zZWN1cml0aWVzIGluIGRpY3QgY29tcGFyaXNvbi4KKworIyBTYWZldHkgb2YgY29kZSBkb2luZyBjb21wYXJpc29ucyBoYXMgYmVlbiBhbiBoaXN0b3JpY2FsIFB5dGhvbiB3ZWFrIHNwb3QuCisjIFRoZSBwcm9ibGVtIGlzIHRoYXQgY29tcGFyaXNvbiBvZiBzdHJ1Y3R1cmVzIHdyaXR0ZW4gaW4gQyAqbmF0dXJhbGx5KgorIyB3YW50cyB0byBob2xkIG9uIHRvIHRoaW5ncyBsaWtlIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIsIG9yICJ0aGUKKyMgYmlnZ2VzdCIgY29udGFpbmVlIHNvIGZhciwgYWNyb3NzIGEgdHJhdmVyc2FsIG9mIHRoZSBjb250YWluZXI7IGJ1dAorIyBjb2RlIHRvIGRvIGNvbnRhaW5lZSBjb21wYXJpc29ucyBjYW4gY2FsbCBiYWNrIGludG8gUHl0aG9uIGFuZCBtdXRhdGUKKyMgdGhlIGNvbnRhaW5lciBpbiBhcmJpdHJhcnkgd2F5cyB3aGlsZSB0aGUgQyBsb29wIGlzIGluIG1pZHN0cmVhbS4gIElmIHRoZQorIyBDIGNvZGUgaXNuJ3QgZXh0cmVtZWx5IHBhcmFub2lkIGFib3V0IGRpZ2dpbmcgdGhpbmdzIG91dCBvZiBtZW1vcnkgb24KKyMgZWFjaCB0cmlwLCBhbmQgYXJ0aWZpY2lhbGx5IGJvb3N0aW5nIHJlZmNvdW50cyBmb3IgdGhlIGR1cmF0aW9uLCBhbnl0aGluZworIyBmcm9tIGluZmluaXRlIGxvb3BzIHRvIE9TIGNyYXNoZXMgY2FuIHJlc3VsdCAoeWVzLCBJIHVzZSBXaW5kb3dzIDx3aW5rPikuCisjCisjIFRoZSBvdGhlciBwcm9ibGVtIGlzIHRoYXQgY29kZSBkZXNpZ25lZCB0byBwcm92b2tlIGEgd2Vha25lc3MgaXMgdXN1YWxseQorIyB3aGl0ZS1ib3ggY29kZSwgYW5kIHNvIGNhdGNoZXMgb25seSB0aGUgcGFydGljdWxhciB2dWxuZXJhYmlsaXRpZXMgdGhlCisjIGF1dGhvciBrbmV3IHRvIHByb3RlY3QgYWdhaW5zdC4gIEZvciBleGFtcGxlLCBQeXRob24ncyBsaXN0LnNvcnQoKSBjb2RlCisjIHdlbnQgdGhydSBtYW55IGl0ZXJhdGlvbnMgYXMgb25lICJuZXciIHZ1bG5lcmFiaWxpdHkgYWZ0ZXIgYW5vdGhlciB3YXMKKyMgZGlzY292ZXJlZC4KKyMKKyMgU28gdGhlIGRpY3QgY29tcGFyaXNvbiB0ZXN0IGhlcmUgdXNlcyBhIGJsYWNrLWJveCBhcHByb2FjaCBpbnN0ZWFkLAorIyBnZW5lcmF0aW5nIGRpY3RzIG9mIHZhcmlvdXMgc2l6ZXMgYXQgcmFuZG9tLCBhbmQgcGVyZm9ybWluZyByYW5kb20KKyMgbXV0YXRpb25zIG9uIHRoZW0gYXQgcmFuZG9tIHRpbWVzLiAgVGhpcyBwcm92ZWQgdmVyeSBlZmZlY3RpdmUsCisjIHRyaWdnZXJpbmcgYXQgbGVhc3Qgc2l4IGRpc3RpbmN0IGZhaWx1cmUgbW9kZXMgdGhlIGZpcnN0IDIwIHRpbWVzIEkKKyMgcmFuIGl0LiAgSW5kZWVkLCBhdCB0aGUgc3RhcnQsIHRoZSBkcml2ZXIgbmV2ZXIgZ290IGJleW9uZCA2IGl0ZXJhdGlvbnMKKyMgYmVmb3JlIHRoZSB0ZXN0IGRpZWQuCisKKyMgVGhlIGRpY3RzIGFyZSBnbG9iYWwgdG8gbWFrZSBpdCBlYXN5IHRvIG11dGF0ZSB0aGFtIGZyb20gd2l0aGluIGZ1bmN0aW9ucy4KK2RpY3QxID0ge30KK2RpY3QyID0ge30KKworIyBUaGUgY3VycmVudCBzZXQgb2Yga2V5cyBpbiBkaWN0MSBhbmQgZGljdDIuICBUaGVzZSBhcmUgbWF0ZXJpYWxpemVkIGFzCisjIGxpc3RzIHRvIG1ha2UgaXQgZWFzeSB0byBwaWNrIGEgZGljdCBrZXkgYXQgcmFuZG9tLgorZGljdDFrZXlzID0gW10KK2RpY3Qya2V5cyA9IFtdCisKKyMgR2xvYmFsIGZsYWcgdGVsbGluZyBtYXliZV9tdXRhdGUoKSB3aGV0aGVyIHRvICpjb25zaWRlciogbXV0YXRpbmcuCittdXRhdGUgPSAwCisKKyMgSWYgZ2xvYmFsIG11dGF0ZSBpcyB0cnVlLCBjb25zaWRlciBtdXRhdGluZyBhIGRpY3QuICBNYXkgb3IgbWF5IG5vdAorIyBtdXRhdGUgYSBkaWN0IGV2ZW4gaWYgbXV0YXRlIGlzIHRydWUuICBJZiBpdCBkb2VzIGRlY2lkZSB0byBtdXRhdGUgYQorIyBkaWN0LCBpdCBwaWNrcyBvbmUgb2Yge2RpY3QxLCBkaWN0Mn0gYXQgcmFuZG9tLCBhbmQgZGVsZXRlcyBhIHJhbmRvbQorIyBlbnRyeSBmcm9tIGl0OyBvciwgbW9yZSByYXJlbHksIGFkZHMgYSByYW5kb20gZWxlbWVudC4KKworZGVmIG1heWJlX211dGF0ZSgpOgorICAgIGdsb2JhbCBtdXRhdGUKKyAgICBpZiBub3QgbXV0YXRlOgorICAgICAgICByZXR1cm4KKyAgICBpZiByYW5kb20ucmFuZG9tKCkgPCAwLjU6CisgICAgICAgIHJldHVybgorCisgICAgaWYgcmFuZG9tLnJhbmRvbSgpIDwgMC41OgorICAgICAgICB0YXJnZXQsIGtleXMgPSBkaWN0MSwgZGljdDFrZXlzCisgICAgZWxzZToKKyAgICAgICAgdGFyZ2V0LCBrZXlzID0gZGljdDIsIGRpY3Qya2V5cworCisgICAgaWYgcmFuZG9tLnJhbmRvbSgpIDwgMC4yOgorICAgICAgICAjIEluc2VydCBhIG5ldyBrZXkuCisgICAgICAgIG11dGF0ZSA9IDAgICAjIGRpc2FibGUgbXV0YXRpb24gdW50aWwga2V5IGluc2VydGVkCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBuZXdrZXkgPSBIb3JyaWQocmFuZG9tLnJhbmRyYW5nZSgxMDApKQorICAgICAgICAgICAgaWYgbmV3a2V5IG5vdCBpbiB0YXJnZXQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdGFyZ2V0W25ld2tleV0gPSBIb3JyaWQocmFuZG9tLnJhbmRyYW5nZSgxMDApKQorICAgICAgICBrZXlzLmFwcGVuZChuZXdrZXkpCisgICAgICAgIG11dGF0ZSA9IDEKKworICAgIGVsaWYga2V5czoKKyAgICAgICAgIyBEZWxldGUgYSBrZXkgYXQgcmFuZG9tLgorICAgICAgICBtdXRhdGUgPSAwICAgIyBkaXNhYmxlIG11dGF0aW9uIHVudGlsIGtleSBkZWxldGVkCisgICAgICAgIGkgPSByYW5kb20ucmFuZHJhbmdlKGxlbihrZXlzKSkKKyAgICAgICAga2V5ID0ga2V5c1tpXQorICAgICAgICBkZWwgdGFyZ2V0W2tleV0KKyAgICAgICAgZGVsIGtleXNbaV0KKyAgICAgICAgbXV0YXRlID0gMQorCisjIEEgaG9ycmlkIGNsYXNzIHRoYXQgdHJpZ2dlcnMgcmFuZG9tIG11dGF0aW9ucyBvZiBkaWN0MSBhbmQgZGljdDIgd2hlbgorIyBpbnN0YW5jZXMgYXJlIGNvbXBhcmVkLgorCitjbGFzcyBIb3JyaWQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGkpOgorICAgICAgICAjIENvbXBhcmlzb24gb3V0Y29tZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mIGkuCisgICAgICAgIHNlbGYuaSA9IGkKKworICAgICAgICAjIEFuIGFydGlmaWNpYWwgaGFzaGNvZGUgaXMgc2VsZWN0ZWQgYXQgcmFuZG9tIHNvIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgIyBoYXZlIGFueSBzeXN0ZW1hdGljIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvbXBhcmlzb24gb3V0Y29tZXMKKyAgICAgICAgIyAoYmFzZWQgb24gc2VsZi5pIGFuZCBvdGhlci5pKSBhbmQgcmVsYXRpdmUgcG9zaXRpb24gd2l0aGluIHRoZQorICAgICAgICAjIGhhc2ggdmVjdG9yIChiYXNlZCBvbiBoYXNoY29kZSkuCisgICAgICAgIHNlbGYuaGFzaGNvZGUgPSByYW5kb20ucmFuZHJhbmdlKDEwMDAwMDAwMDApCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiA0MgorICAgICAgICByZXR1cm4gc2VsZi5oYXNoY29kZQorCisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBtYXliZV9tdXRhdGUoKSAgICMgVGhlIHBvaW50IG9mIHRoZSB0ZXN0LgorICAgICAgICByZXR1cm4gY21wKHNlbGYuaSwgb3RoZXIuaSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBtYXliZV9tdXRhdGUoKSAgICMgVGhlIHBvaW50IG9mIHRoZSB0ZXN0LgorICAgICAgICByZXR1cm4gc2VsZi5pID09IG90aGVyLmkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJIb3JyaWQoJWQpIiAlIHNlbGYuaQorCisjIEZpbGwgZGljdCBkIHdpdGggbnVtZW50cmllcyAoSG9ycmlkKGkpLCBIb3JyaWQoaikpIGtleS12YWx1ZSBwYWlycywKKyMgd2hlcmUgaSBhbmQgaiBhcmUgc2VsZWN0ZWQgYXQgcmFuZG9tIGZyb20gdGhlIGNhbmRpZGF0ZXMgbGlzdC4KKyMgUmV0dXJuIGQua2V5cygpIGFmdGVyIGZpbGxpbmcuCisKK2RlZiBmaWxsX2RpY3QoZCwgY2FuZGlkYXRlcywgbnVtZW50cmllcyk6CisgICAgZC5jbGVhcigpCisgICAgZm9yIGkgaW4geHJhbmdlKG51bWVudHJpZXMpOgorICAgICAgICBkW0hvcnJpZChyYW5kb20uY2hvaWNlKGNhbmRpZGF0ZXMpKV0gPSBcCisgICAgICAgICAgICBIb3JyaWQocmFuZG9tLmNob2ljZShjYW5kaWRhdGVzKSkKKyAgICByZXR1cm4gZC5rZXlzKCkKKworIyBUZXN0IG9uZSBwYWlyIG9mIHJhbmRvbWx5IGdlbmVyYXRlZCBkaWN0cywgZWFjaCB3aXRoIG4gZW50cmllcy4KKyMgTm90ZSB0aGF0IGRpY3QgY29tcGFyaXNvbiBpcyB0cml2aWFsIGlmIHRoZXkgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIKKyMgb2YgZW50aXJlcyAodGhlbiB0aGUgInNob3J0ZXIiIGRpY3QgaXMgaW5zdGFudGx5IGNvbnNpZGVyZWQgdG8gYmUgdGhlCisjIHNtYWxsZXIgb25lLCB3aXRob3V0IGV2ZW4gbG9va2luZyBhdCB0aGUgZW50cmllcykuCisKK2RlZiB0ZXN0X29uZShuKToKKyAgICBnbG9iYWwgbXV0YXRlLCBkaWN0MSwgZGljdDIsIGRpY3Qxa2V5cywgZGljdDJrZXlzCisKKyAgICAjIEZpbGwgdGhlIGRpY3RzIHdpdGhvdXQgbXV0YXRpbmcgdGhlbS4KKyAgICBtdXRhdGUgPSAwCisgICAgZGljdDFrZXlzID0gZmlsbF9kaWN0KGRpY3QxLCByYW5nZShuKSwgbikKKyAgICBkaWN0MmtleXMgPSBmaWxsX2RpY3QoZGljdDIsIHJhbmdlKG4pLCBuKQorCisgICAgIyBFbmFibGUgbXV0YXRpb24sIHRoZW4gY29tcGFyZSB0aGUgZGljdHMgc28gbG9uZyBhcyB0aGV5IGhhdmUgdGhlCisgICAgIyBzYW1lIHNpemUuCisgICAgbXV0YXRlID0gMQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICJ0cnlpbmcgdy8gbGVuZ3RocyIsIGxlbihkaWN0MSksIGxlbihkaWN0MiksCisgICAgd2hpbGUgZGljdDEgYW5kIGxlbihkaWN0MSkgPT0gbGVuKGRpY3QyKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIuIiwKKyAgICAgICAgaWYgcmFuZG9tLnJhbmRvbSgpIDwgMC41OgorICAgICAgICAgICAgYyA9IGNtcChkaWN0MSwgZGljdDIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjID0gZGljdDEgPT0gZGljdDIKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludAorCisjIFJ1biB0ZXN0X29uZSBuIHRpbWVzLiAgQXQgdGhlIHN0YXJ0IChiZWZvcmUgdGhlIGJ1Z3Mgd2VyZSBmaXhlZCksIDIwCisjIGNvbnNlY3V0aXZlIHJ1bnMgb2YgdGhpcyB0ZXN0IGVhY2ggYmxldyB1cCBvbiBvciBiZWZvcmUgdGhlIHNpeHRoIHRpbWUKKyMgdGVzdF9vbmUgd2FzIHJ1bi4gIFNvIG4gZG9lc24ndCBoYXZlIHRvIGJlIGxhcmdlIHRvIGdldCBhbiBpbnRlcmVzdGluZworIyB0ZXN0LgorIyBPVE9ILCBjYWxsaW5nIHdpdGggbGFyZ2UgbiBpcyBhbHNvIGludGVyZXN0aW5nLCB0byBlbnN1cmUgdGhhdCB0aGUgZml4ZWQKKyMgY29kZSBkb2Vzbid0IGhvbGQgb24gdG8gcmVmY291bnRzICp0b28qIGxvbmcgKGluIHdoaWNoIGNhc2UgbWVtb3J5IHdvdWxkCisjIGxlYWspLgorCitkZWYgdGVzdChuKToKKyAgICBmb3IgaSBpbiB4cmFuZ2Uobik6CisgICAgICAgIHRlc3Rfb25lKHJhbmRvbS5yYW5kcmFuZ2UoMSwgMTAwKSkKKworIyBTZWUgbGFzdCBjb21tZW50IGJsb2NrIGZvciBjbHVlcyBhYm91dCBnb29kIHZhbHVlcyBmb3Igbi4KK3Rlc3QoMTAwKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBbm90aGVyIHNlZ2ZhdWx0IGJ1ZywgZGlzdGlsbGVkIGJ5IE1pY2hhZWwgSHVkc29uIGZyb20gYSBjLmwucHkgcG9zdC4KKworY2xhc3MgQ2hpbGQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCk6CisgICAgICAgIHNlbGYuX19kaWN0X19bJ3BhcmVudCddID0gcGFyZW50CisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICBzZWxmLnBhcmVudC5hID0gMQorICAgICAgICBzZWxmLnBhcmVudC5iID0gMQorICAgICAgICBzZWxmLnBhcmVudC5jID0gMQorICAgICAgICBzZWxmLnBhcmVudC5kID0gMQorICAgICAgICBzZWxmLnBhcmVudC5lID0gMQorICAgICAgICBzZWxmLnBhcmVudC5mID0gMQorICAgICAgICBzZWxmLnBhcmVudC5nID0gMQorICAgICAgICBzZWxmLnBhcmVudC5oID0gMQorICAgICAgICBzZWxmLnBhcmVudC5pID0gMQorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnBhcmVudCwgYXR0cikKKworY2xhc3MgUGFyZW50OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5hID0gQ2hpbGQoc2VsZikKKworIyBIYXJkIHRvIHNheSB3aGF0IHRoaXMgd2lsbCBwcmludCEgIE1heSB2YXJ5IGZyb20gdGltZSB0byB0aW1lLiAgQnV0CisjIHdlJ3JlIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdGVzdCB0aGUgdHBfcHJpbnQgc2xvdCBoZXJlLCBhbmQgdGhpcyBpcworIyB0aGUgY2xlYXJlc3Qgd2F5IHRvIGRvIGl0LiAgV2UgcHJpbnQgdGhlIHJlc3VsdCB0byBhIHRlbXAgZmlsZSBzbyB0aGF0CisjIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBkb2Vzbid0IG5lZWQgdG8gY2hhbmdlLgorCitmID0gb3BlbihURVNURk4sICJ3IikKK3ByaW50ID4+IGYsIFBhcmVudCgpLl9fZGljdF9fCitmLmNsb3NlKCkKK29zLnVubGluayhURVNURk4pCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFuZCBhbm90aGVyIGNvcmUtZHVtcGVyIGZyb20gTWljaGFlbCBIdWRzb24uCisKK2RpY3QgPSB7fQorCisjIEZvcmNlIGRpY3QgdG8gbWFsbG9jIGl0cyB0YWJsZS4KK2ZvciBpIGluIHJhbmdlKDEsIDEwKToKKyAgICBkaWN0W2ldID0gaQorCitmID0gb3BlbihURVNURk4sICJ3IikKKworY2xhc3MgTWFjaGlhdmVsbGk6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBkaWN0LmNsZWFyKCkKKworICAgICAgICAjIE1pY2hhZWwgc2V6OiAgImRvZXNuJ3QgY3Jhc2ggd2l0aG91dCB0aGlzLiAgZG9uJ3Qga25vdyB3aHkuIgorICAgICAgICAjIFRpbSBzZXo6ICAibHVjayBvZiB0aGUgZHJhdzsgY3Jhc2hlcyB3aXRoIG9yIHdpdGhvdXQgZm9yIG1lLiIKKyAgICAgICAgcHJpbnQgPj4gZgorCisgICAgICAgIHJldHVybiByZXByKCJtYWNoaWF2ZWxsaSIpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiAwCisKK2RpY3RbTWFjaGlhdmVsbGkoKV0gPSBNYWNoaWF2ZWxsaSgpCisKK3ByaW50ID4+IGYsIHN0cihkaWN0KQorZi5jbG9zZSgpCitvcy51bmxpbmsoVEVTVEZOKQorZGVsIGYsIGRpY3QKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBbmQgYW5vdGhlciBjb3JlLWR1bXBlciBmcm9tIE1pY2hhZWwgSHVkc29uLgorCitkaWN0ID0ge30KKworIyBsZXQncyBmb3JjZSBkaWN0IHRvIG1hbGxvYyBpdHMgdGFibGUKK2ZvciBpIGluIHJhbmdlKDEsIDEwKToKKyAgICBkaWN0W2ldID0gaQorCitjbGFzcyBNYWNoaWF2ZWxsaTI6CisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGRpY3QuY2xlYXIoKQorICAgICAgICByZXR1cm4gMQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCitkaWN0W01hY2hpYXZlbGxpMigpXSA9IE1hY2hpYXZlbGxpMigpCisKK3RyeToKKyAgICBkaWN0W01hY2hpYXZlbGxpMigpXQorZXhjZXB0IEtleUVycm9yOgorICAgIHBhc3MKKworZGVsIGRpY3QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQW5kIGFub3RoZXIgY29yZS1kdW1wZXIgZnJvbSBNaWNoYWVsIEh1ZHNvbi4KKworZGljdCA9IHt9CisKKyMgbGV0J3MgZm9yY2UgZGljdCB0byBtYWxsb2MgaXRzIHRhYmxlCitmb3IgaSBpbiByYW5nZSgxLCAxMCk6CisgICAgZGljdFtpXSA9IGkKKworY2xhc3MgTWFjaGlhdmVsbGkzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpZCk6CisgICAgICAgIHNlbGYuaWQgPSBpZAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuaWQgPT0gb3RoZXIuaWQ6CisgICAgICAgICAgICBkaWN0LmNsZWFyKCkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzKCVzKSIlKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmlkKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCitkaWN0W01hY2hpYXZlbGxpMygxKV0gPSBNYWNoaWF2ZWxsaTMoMCkKK2RpY3RbTWFjaGlhdmVsbGkzKDIpXSA9IE1hY2hpYXZlbGxpMygwKQorCitmID0gb3BlbihURVNURk4sICJ3IikKK3RyeToKKyAgICB0cnk6CisgICAgICAgIHByaW50ID4+IGYsIGRpY3RbTWFjaGlhdmVsbGkzKDIpXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcGFzcworZmluYWxseToKKyAgICBmLmNsb3NlKCkKKyAgICBvcy51bmxpbmsoVEVTVEZOKQorCitkZWwgZGljdAorZGVsIGRpY3QxLCBkaWN0MiwgZGljdDFrZXlzLCBkaWN0MmtleXMKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X211dGV4LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbXV0ZXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMDgwZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X211dGV4LnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CisKK211dGV4ID0gdGVzdC50ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgibXV0ZXgiLCBkZXByZWNhdGVkPVRydWUpCisKK2NsYXNzIE11dGV4VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9sb2NrX2FuZF91bmxvY2soc2VsZik6CisKKyAgICAgICAgZGVmIGNhbGxlZF9ieV9tdXRleChzb21lX2RhdGEpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb21lX2RhdGEsICJzcGFtIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLnRlc3QoKSwgIm11dGV4IG5vdCBoZWxkIikKKyAgICAgICAgICAgICMgTmVzdGVkIGxvY2tpbmcKKyAgICAgICAgICAgIG0ubG9jayhjYWxsZWRfYnlfbXV0ZXgyLCAiZWdncyIpCisKKyAgICAgICAgZGVmIGNhbGxlZF9ieV9tdXRleDIoc29tZV9kYXRhKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29tZV9kYXRhLCAiZWdncyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobS50ZXN0KCksICJtdXRleCBub3QgaGVsZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhZHlfZm9yXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNhbGxlZF9ieV9tdXRleDIgY2FsbGVkIHRvbyBzb29uIikKKworICAgICAgICBtID0gbXV0ZXgubXV0ZXgoKQorICAgICAgICByZWFkX2Zvcl8yID0gRmFsc2UKKyAgICAgICAgbS5sb2NrKGNhbGxlZF9ieV9tdXRleCwgInNwYW0iKQorICAgICAgICByZWFkeV9mb3JfMiA9IFRydWUKKyAgICAgICAgIyB1bmxvY2sgYm90aCBsb2NrcworICAgICAgICBtLnVubG9jaygpCisgICAgICAgIG0udW5sb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLnRlc3QoKSwgIm11dGV4IHN0aWxsIGhlbGQiKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE11dGV4VGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbmV0cmMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9uZXRyYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzk1NDU2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbmV0cmMucHkKQEAgLTAsMCArMSwxMTAgQEAKK2ltcG9ydCBuZXRyYywgb3MsIHVuaXR0ZXN0LCBzeXMsIHRleHR3cmFwCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCit0ZW1wX2ZpbGVuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorCitjbGFzcyBOZXRyY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MudW5saW5rKHRlbXBfZmlsZW5hbWUpCisKKyAgICBkZWYgbWFrZV9ucmMoc2VsZiwgdGVzdF9kYXRhKToKKyAgICAgICAgdGVzdF9kYXRhID0gdGV4dHdyYXAuZGVkZW50KHRlc3RfZGF0YSkKKyAgICAgICAgbW9kZSA9ICd3JworICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2N5Z3dpbic6CisgICAgICAgICAgICBtb2RlICs9ICd0JworICAgICAgICB3aXRoIG9wZW4odGVtcF9maWxlbmFtZSwgbW9kZSkgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZSh0ZXN0X2RhdGEpCisgICAgICAgIHJldHVybiBuZXRyYy5uZXRyYyh0ZW1wX2ZpbGVuYW1lKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKKyAgICAgICAgbnJjID0gc2VsZi5tYWtlX25yYygiIiJcCisgICAgICAgICAgICBtYWNoaW5lIGhvc3QxLmRvbWFpbi5jb20gbG9naW4gbG9nMSBwYXNzd29yZCBwYXNzMSBhY2NvdW50IGFjY3QxCisgICAgICAgICAgICBkZWZhdWx0IGxvZ2luIGxvZzIgcGFzc3dvcmQgcGFzczIKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucmMuaG9zdHNbJ2hvc3QxLmRvbWFpbi5jb20nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2xvZzEnLCAnYWNjdDEnLCAncGFzczEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucmMuaG9zdHNbJ2RlZmF1bHQnXSwgKCdsb2cyJywgTm9uZSwgJ3Bhc3MyJykpCisKKyAgICBkZWYgdGVzdF9tYWNyb3Moc2VsZik6CisgICAgICAgIG5yYyA9IHNlbGYubWFrZV9ucmMoIiIiXAorICAgICAgICAgICAgbWFjZGVmIG1hY3JvMQorICAgICAgICAgICAgbGluZTEKKyAgICAgICAgICAgIGxpbmUyCisKKyAgICAgICAgICAgIG1hY2RlZiBtYWNybzIKKyAgICAgICAgICAgIGxpbmUzCisgICAgICAgICAgICBsaW5lNAorICAgICAgICAgICAgIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5yYy5tYWNyb3MsIHsnbWFjcm8xJzogWydsaW5lMVxuJywgJ2xpbmUyXG4nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hY3JvMic6IFsnbGluZTNcbicsICdsaW5lNFxuJ119KQorCisgICAgZGVmIF90ZXN0X3Bhc3N3b3JkcyhzZWxmLCBucmMsIHBhc3N3ZCk6CisgICAgICAgIG5yYyA9IHNlbGYubWFrZV9ucmMobnJjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5yYy5ob3N0c1snaG9zdC5kb21haW4uY29tJ10sICgnbG9nJywgJ2FjY3QnLCBwYXNzd2QpKQorCisgICAgZGVmIHRlc3RfcGFzc3dvcmRfd2l0aF9sZWFkaW5nX2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGFzc3dvcmRzKCIiIlwKKyAgICAgICAgICAgIG1hY2hpbmUgaG9zdC5kb21haW4uY29tIGxvZ2luIGxvZyBwYXNzd29yZCAjcGFzcyBhY2NvdW50IGFjY3QKKyAgICAgICAgICAgICIiIiwgJyNwYXNzJykKKworICAgIGRlZiB0ZXN0X3Bhc3N3b3JkX3dpdGhfdHJhaWxpbmdfaGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYXNzd29yZHMoIiIiXAorICAgICAgICAgICAgbWFjaGluZSBob3N0LmRvbWFpbi5jb20gbG9naW4gbG9nIHBhc3N3b3JkIHBhc3MjIGFjY291bnQgYWNjdAorICAgICAgICAgICAgIiIiLCAncGFzcyMnKQorCisgICAgZGVmIHRlc3RfcGFzc3dvcmRfd2l0aF9pbnRlcm5hbF9oYXNoKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3Bhc3N3b3JkcygiIiJcCisgICAgICAgICAgICBtYWNoaW5lIGhvc3QuZG9tYWluLmNvbSBsb2dpbiBsb2cgcGFzc3dvcmQgcGEjc3MgYWNjb3VudCBhY2N0CisgICAgICAgICAgICAiIiIsICdwYSNzcycpCisKKyAgICBkZWYgX3Rlc3RfY29tbWVudChzZWxmLCBucmMsIHBhc3N3ZD0ncGFzcycpOgorICAgICAgICBucmMgPSBzZWxmLm1ha2VfbnJjKG5yYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucmMuaG9zdHNbJ2Zvby5kb21haW4uY29tJ10sICgnYmFyJywgTm9uZSwgcGFzc3dkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucmMuaG9zdHNbJ2Jhci5kb21haW4uY29tJ10sICgnZm9vJywgTm9uZSwgJ3Bhc3MnKSkKKworICAgIGRlZiB0ZXN0X2NvbW1lbnRfYmVmb3JlX21hY2hpbmVfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jb21tZW50KCIiIlwKKyAgICAgICAgICAgICMgY29tbWVudAorICAgICAgICAgICAgbWFjaGluZSBmb28uZG9tYWluLmNvbSBsb2dpbiBiYXIgcGFzc3dvcmQgcGFzcworICAgICAgICAgICAgbWFjaGluZSBiYXIuZG9tYWluLmNvbSBsb2dpbiBmb28gcGFzc3dvcmQgcGFzcworICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfY29tbWVudF9iZWZvcmVfbWFjaGluZV9saW5lX25vX3NwYWNlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2NvbW1lbnQoIiIiXAorICAgICAgICAgICAgI2NvbW1lbnQKKyAgICAgICAgICAgIG1hY2hpbmUgZm9vLmRvbWFpbi5jb20gbG9naW4gYmFyIHBhc3N3b3JkIHBhc3MKKyAgICAgICAgICAgIG1hY2hpbmUgYmFyLmRvbWFpbi5jb20gbG9naW4gZm9vIHBhc3N3b3JkIHBhc3MKKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2NvbW1lbnRfYmVmb3JlX21hY2hpbmVfbGluZV9oYXNoX29ubHkoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY29tbWVudCgiIiJcCisgICAgICAgICAgICAjCisgICAgICAgICAgICBtYWNoaW5lIGZvby5kb21haW4uY29tIGxvZ2luIGJhciBwYXNzd29yZCBwYXNzCisgICAgICAgICAgICBtYWNoaW5lIGJhci5kb21haW4uY29tIGxvZ2luIGZvbyBwYXNzd29yZCBwYXNzCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9jb21tZW50X2F0X2VuZF9vZl9tYWNoaW5lX2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY29tbWVudCgiIiJcCisgICAgICAgICAgICBtYWNoaW5lIGZvby5kb21haW4uY29tIGxvZ2luIGJhciBwYXNzd29yZCBwYXNzICMgY29tbWVudAorICAgICAgICAgICAgbWFjaGluZSBiYXIuZG9tYWluLmNvbSBsb2dpbiBmb28gcGFzc3dvcmQgcGFzcworICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfY29tbWVudF9hdF9lbmRfb2ZfbWFjaGluZV9saW5lX25vX3NwYWNlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2NvbW1lbnQoIiIiXAorICAgICAgICAgICAgbWFjaGluZSBmb28uZG9tYWluLmNvbSBsb2dpbiBiYXIgcGFzc3dvcmQgcGFzcyAjY29tbWVudAorICAgICAgICAgICAgbWFjaGluZSBiYXIuZG9tYWluLmNvbSBsb2dpbiBmb28gcGFzc3dvcmQgcGFzcworICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfY29tbWVudF9hdF9lbmRfb2ZfbWFjaGluZV9saW5lX3Bhc3NfaGFzX2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY29tbWVudCgiIiJcCisgICAgICAgICAgICBtYWNoaW5lIGZvby5kb21haW4uY29tIGxvZ2luIGJhciBwYXNzd29yZCAjcGFzcyAjY29tbWVudAorICAgICAgICAgICAgbWFjaGluZSBiYXIuZG9tYWluLmNvbSBsb2dpbiBmb28gcGFzc3dvcmQgcGFzcworICAgICAgICAgICAgIiIiLCAnI3Bhc3MnKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE5ldHJjVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X25ldy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X25ldy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODRiM2QxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbmV3LnB5CkBAIC0wLDAgKzEsMTYzIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgc3lzCituZXcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnbmV3JywgZGVwcmVjYXRlZD1UcnVlKQorCitjbGFzcyBOZXdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zcGFtKHNlbGYpOgorICAgICAgICBjbGFzcyBFZ2dzOgorICAgICAgICAgICAgZGVmIGdldF95b2xrcyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi55b2xrcworCisgICAgICAgIG0gPSBuZXcubW9kdWxlKCdTcGFtJykKKyAgICAgICAgbS5FZ2dzID0gRWdncworICAgICAgICBzeXMubW9kdWxlc1snU3BhbSddID0gbQorICAgICAgICBpbXBvcnQgU3BhbQorCisgICAgICAgIGRlZiBnZXRfbW9yZV95b2xrcyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnlvbGtzICsgMworCisgICAgICAgICMgbmV3LmNsYXNzb2JqKCkKKyAgICAgICAgQyA9IG5ldy5jbGFzc29iaignU3BhbScsIChTcGFtLkVnZ3MsKSwgeydnZXRfbW9yZV95b2xrcyc6IGdldF9tb3JlX3lvbGtzfSkKKworICAgICAgICAjIG5ldy5pbnN0YW5jZSgpCisgICAgICAgIGMgPSBuZXcuaW5zdGFuY2UoQywgeyd5b2xrcyc6IDN9KQorCisgICAgICAgIG8gPSBuZXcuaW5zdGFuY2UoQykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLl9fZGljdF9fLCB7fSwgIm5ldyBfX2RpY3RfXyBzaG91bGQgYmUgZW1wdHkiKQorICAgICAgICBkZWwgbworICAgICAgICBvID0gbmV3Lmluc3RhbmNlKEMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5fX2RpY3RfXywge30sICJuZXcgX19kaWN0X18gc2hvdWxkIGJlIGVtcHR5IikKKyAgICAgICAgZGVsIG8KKworICAgICAgICBkZWYgYnJlYWtfeW9sa3Moc2VsZik6CisgICAgICAgICAgICBzZWxmLnlvbGtzID0gc2VsZi55b2xrcyAtIDIKKworICAgICAgICAjIG5ldy5pbnN0YW5jZW1ldGhvZCgpCisgICAgICAgIGltID0gbmV3Lmluc3RhbmNlbWV0aG9kKGJyZWFrX3lvbGtzLCBjLCBDKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nZXRfeW9sa3MoKSwgMywKKyAgICAgICAgICAgICdCcm9rZW4gY2FsbCBvZiBoYW5kLWNyYWZ0ZWQgY2xhc3MgaW5zdGFuY2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZ2V0X21vcmVfeW9sa3MoKSwgNiwKKyAgICAgICAgICAgICdCcm9rZW4gY2FsbCBvZiBoYW5kLWNyYWZ0ZWQgY2xhc3MgaW5zdGFuY2UnKQorCisgICAgICAgIGltKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdldF95b2xrcygpLCAxLAorICAgICAgICAgICAgJ0Jyb2tlbiBjYWxsIG9mIGhhbmQtY3JhZnRlZCBpbnN0YW5jZSBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZ2V0X21vcmVfeW9sa3MoKSwgNCwKKyAgICAgICAgICAgICdCcm9rZW4gY2FsbCBvZiBoYW5kLWNyYWZ0ZWQgaW5zdGFuY2UgbWV0aG9kJykKKworICAgICAgICBpbSA9IG5ldy5pbnN0YW5jZW1ldGhvZChicmVha195b2xrcywgYykKKyAgICAgICAgaW0oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZ2V0X3lvbGtzKCksIC0xKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgZGFuZ2Vyb3VzIGluc3RhbmNlIG1ldGhvZCBjcmVhdGlvbiBpcyBmb3JiaWRkZW4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBuZXcuaW5zdGFuY2VtZXRob2QsIGJyZWFrX3lvbGtzLCBOb25lKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgaW5zdGFuY2VtZXRob2QoKSBkb2Vzbid0IGFsbG93IGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG5ldy5pbnN0YW5jZW1ldGhvZCwgYnJlYWtfeW9sa3MsIGMsIGt3PTEpCisKKyAgICBkZWYgdGVzdF9zY29wZShzZWxmKToKKyAgICAgICAgIyBJdCdzIHVuY2xlYXIgd2hhdCB0aGUgc2VtYW50aWNzIHNob3VsZCBiZSBmb3IgYSBjb2RlIG9iamVjdCBjb21waWxlZAorICAgICAgICAjIGF0IG1vZHVsZSBzY29wZSwgYnV0IGJvdW5kIGFuZCBydW4gaW4gYSBmdW5jdGlvbi4gIEluIENQeXRob24sIGBjJyBpcworICAgICAgICAjIGdsb2JhbCAoYnkgYWNjaWRlbnQ/KSB3aGlsZSBpbiBKeXRob24sIGBjJyBpcyBsb2NhbC4gIFRoZSBpbnRlbnQgb2YKKyAgICAgICAgIyB0aGUgdGVzdCBjbGVhcmx5IGlzIHRvIG1ha2UgYGMnIGdsb2JhbCwgc28gbGV0J3MgYmUgZXhwbGljaXQgYWJvdXQgaXQuCisgICAgICAgIGNvZGVzdHIgPSAnJycKKyAgICAgICAgZ2xvYmFsIGMKKyAgICAgICAgYSA9IDEKKyAgICAgICAgYiA9IDIKKyAgICAgICAgYyA9IGEgKyBiCisgICAgICAgICcnJworCisgICAgICAgIGNvZGVzdHIgPSAiXG4iLmpvaW4obC5zdHJpcCgpIGZvciBsIGluIGNvZGVzdHIuc3BsaXRsaW5lcygpKQorCisgICAgICAgIGNjb2RlID0gY29tcGlsZShjb2Rlc3RyLCAnPHN0cmluZz4nLCAnZXhlYycpCisgICAgICAgICMgSnl0aG9uIGRvZXNuJ3QgaGF2ZSBhIF9fYnVpbHRpbnNfXywgc28gdXNlIGEgcG9ydGFibGUgYWx0ZXJuYXRpdmUKKyAgICAgICAgaW1wb3J0IF9fYnVpbHRpbl9fCisgICAgICAgIGcgPSB7J2MnOiAwLCAnX19idWlsdGluc19fJzogX19idWlsdGluX199CisKKyAgICAgICAgIyB0aGlzIHRlc3QgY291bGQgYmUgbW9yZSByb2J1c3QKKyAgICAgICAgZnVuYyA9IG5ldy5mdW5jdGlvbihjY29kZSwgZykKKyAgICAgICAgZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ1snYyddLCAzLCAnQ291bGQgbm90IGNyZWF0ZSBhIHByb3BlciBmdW5jdGlvbiBvYmplY3QnKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb24oc2VsZik6CisgICAgICAgICMgdGVzdCB0aGUgdmFyaW91cyBleHRlbmRlZCBmbGF2b3JzIG9mIGZ1bmN0aW9uLm5ldworICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIGRlZiBnKHkpOgorICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeQorICAgICAgICAgICAgcmV0dXJuIGcKKyAgICAgICAgZyA9IGYoNCkKKyAgICAgICAgbmV3LmZ1bmN0aW9uKGYuZnVuY19jb2RlLCB7fSwgImJsYWgiKQorICAgICAgICBnMiA9IG5ldy5mdW5jdGlvbihnLmZ1bmNfY29kZSwge30sICJibGFoIiwgKDIsKSwgZy5mdW5jX2Nsb3N1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZzIoKSwgNikKKyAgICAgICAgZzMgPSBuZXcuZnVuY3Rpb24oZy5mdW5jX2NvZGUsIHt9LCAiYmxhaCIsIE5vbmUsIGcuZnVuY19jbG9zdXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGczKDUpLCA5KQorICAgICAgICBkZWYgdGVzdF9jbG9zdXJlKGZ1bmMsIGNsb3N1cmUsIGV4Yyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIG5ldy5mdW5jdGlvbiwgZnVuYy5mdW5jX2NvZGUsIHt9LCAiIiwgTm9uZSwgY2xvc3VyZSkKKworICAgICAgICB0ZXN0X2Nsb3N1cmUoZywgTm9uZSwgVHlwZUVycm9yKSAjIGludmFsaWQgY2xvc3VyZQorICAgICAgICB0ZXN0X2Nsb3N1cmUoZywgKDEsKSwgVHlwZUVycm9yKSAjIG5vbi1jZWxsIGluIGNsb3N1cmUKKyAgICAgICAgdGVzdF9jbG9zdXJlKGcsICgxLCAxKSwgVmFsdWVFcnJvcikgIyBjbG9zdXJlIGlzIHdyb25nIHNpemUKKyAgICAgICAgdGVzdF9jbG9zdXJlKGYsIGcuZnVuY19jbG9zdXJlLCBWYWx1ZUVycm9yKSAjIG5vIGNsb3N1cmUgbmVlZGVkCisKKyAgICAjIE5vdGU6IEp5dGhvbiB3aWxsIG5ldmVyIGhhdmUgbmV3LmNvZGUoKQorICAgIGlmIGhhc2F0dHIobmV3LCAnY29kZScpOgorICAgICAgICBkZWYgdGVzdF9jb2RlKHNlbGYpOgorICAgICAgICAgICAgIyBib2d1cyB0ZXN0IG9mIG5ldy5jb2RlKCkKKyAgICAgICAgICAgIGRlZiBmKGEpOiBwYXNzCisKKyAgICAgICAgICAgIGMgPSBmLmZ1bmNfY29kZQorICAgICAgICAgICAgYXJnY291bnQgPSBjLmNvX2FyZ2NvdW50CisgICAgICAgICAgICBubG9jYWxzID0gYy5jb19ubG9jYWxzCisgICAgICAgICAgICBzdGFja3NpemUgPSBjLmNvX3N0YWNrc2l6ZQorICAgICAgICAgICAgZmxhZ3MgPSBjLmNvX2ZsYWdzCisgICAgICAgICAgICBjb2Rlc3RyaW5nID0gYy5jb19jb2RlCisgICAgICAgICAgICBjb25zdGFudHMgPSBjLmNvX2NvbnN0cworICAgICAgICAgICAgbmFtZXMgPSBjLmNvX25hbWVzCisgICAgICAgICAgICB2YXJuYW1lcyA9IGMuY29fdmFybmFtZXMKKyAgICAgICAgICAgIGZpbGVuYW1lID0gYy5jb19maWxlbmFtZQorICAgICAgICAgICAgbmFtZSA9IGMuY29fbmFtZQorICAgICAgICAgICAgZmlyc3RsaW5lbm8gPSBjLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBsbm90YWIgPSBjLmNvX2xub3RhYgorICAgICAgICAgICAgZnJlZXZhcnMgPSBjLmNvX2ZyZWV2YXJzCisgICAgICAgICAgICBjZWxsdmFycyA9IGMuY29fY2VsbHZhcnMKKworICAgICAgICAgICAgZCA9IG5ldy5jb2RlKGFyZ2NvdW50LCBubG9jYWxzLCBzdGFja3NpemUsIGZsYWdzLCBjb2Rlc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cywgbmFtZXMsIHZhcm5hbWVzLCBmaWxlbmFtZSwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGxpbmVubywgbG5vdGFiLCBmcmVldmFycywgY2VsbHZhcnMpCisKKyAgICAgICAgICAgICMgdGVzdCBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB2ZXJzaW9uIHdpdGggbm8gZnJlZXZhcnMgb3IgY2VsbHZhcnMKKyAgICAgICAgICAgIGQgPSBuZXcuY29kZShhcmdjb3VudCwgbmxvY2Fscywgc3RhY2tzaXplLCBmbGFncywgY29kZXN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMsIG5hbWVzLCB2YXJuYW1lcywgZmlsZW5hbWUsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RsaW5lbm8sIGxub3RhYikKKworICAgICAgICAgICAgIyBuZWdhdGl2ZSBjb19hcmdjb3VudCB1c2VkIHRvIHRyaWdnZXIgYSBTeXN0ZW1FcnJvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV3LmNvZGUsCisgICAgICAgICAgICAgICAgLWFyZ2NvdW50LCBubG9jYWxzLCBzdGFja3NpemUsIGZsYWdzLCBjb2Rlc3RyaW5nLAorICAgICAgICAgICAgICAgIGNvbnN0YW50cywgbmFtZXMsIHZhcm5hbWVzLCBmaWxlbmFtZSwgbmFtZSwgZmlyc3RsaW5lbm8sIGxub3RhYikKKworICAgICAgICAgICAgIyBuZWdhdGl2ZSBjb19ubG9jYWxzIHVzZWQgdG8gdHJpZ2dlciBhIFN5c3RlbUVycm9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuZXcuY29kZSwKKyAgICAgICAgICAgICAgICBhcmdjb3VudCwgLW5sb2NhbHMsIHN0YWNrc2l6ZSwgZmxhZ3MsIGNvZGVzdHJpbmcsCisgICAgICAgICAgICAgICAgY29uc3RhbnRzLCBuYW1lcywgdmFybmFtZXMsIGZpbGVuYW1lLCBuYW1lLCBmaXJzdGxpbmVubywgbG5vdGFiKQorCisgICAgICAgICAgICAjIG5vbi1zdHJpbmcgY29fbmFtZSB1c2VkIHRvIHRyaWdnZXIgYSBQeV9GYXRhbEVycm9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG5ldy5jb2RlLAorICAgICAgICAgICAgICAgIGFyZ2NvdW50LCBubG9jYWxzLCBzdGFja3NpemUsIGZsYWdzLCBjb2Rlc3RyaW5nLAorICAgICAgICAgICAgICAgIGNvbnN0YW50cywgKDUsKSwgdmFybmFtZXMsIGZpbGVuYW1lLCBuYW1lLCBmaXJzdGxpbmVubywgbG5vdGFiKQorCisgICAgICAgICAgICAjIG5ldy5jb2RlIHVzZWQgdG8gYmUgYSB3YXkgdG8gbXV0YXRlIGEgdHVwbGUuLi4KKyAgICAgICAgICAgIGNsYXNzIFMoc3RyKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0ID0gKFMoImFiIiksKQorICAgICAgICAgICAgZCA9IG5ldy5jb2RlKGFyZ2NvdW50LCBubG9jYWxzLCBzdGFja3NpemUsIGZsYWdzLCBjb2Rlc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cywgdCwgdmFybmFtZXMsIGZpbGVuYW1lLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0bGluZW5vLCBsbm90YWIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0WzBdKSBpcyBTLCAiZWVrLCB0dXBsZSBjaGFuZ2VkIHVuZGVyIHVzISIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE5ld1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X25pcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X25pcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDQ5NTUwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfbmlzLnB5CkBAIC0wLDAgKzEsNDQgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworbmlzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ25pcycpCisKK2NsYXNzIE5pc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9tYXBzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBtYXBzID0gbmlzLm1hcHMoKQorICAgICAgICBleGNlcHQgbmlzLmVycm9yLCBtc2c6CisgICAgICAgICAgICAjIE5JUyBpcyBwcm9iYWJseSBub3QgYWN0aXZlLCBzbyB0aGlzIHRlc3QgaXNuJ3QgdXNlZnVsCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAiVGVzdCBTa2lwcGVkOiIsIG1zZworICAgICAgICAgICAgIyBDYW4ndCByYWlzZSBTa2lwVGVzdCBhcyByZWdydGVzdCBvbmx5IHJlY29nbml6ZXMgdGhlIGV4Y2VwdGlvbgorICAgICAgICAgICAgIyAgIGltcG9ydCB0aW1lLgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgT24gc29tZSBzeXN0ZW1zLCB0aGlzIG1hcCBpcyBvbmx5IGFjY2Vzc2libGUgdG8gdGhlCisgICAgICAgICAgICAjIHN1cGVyIHVzZXIKKyAgICAgICAgICAgIG1hcHMucmVtb3ZlKCJwYXNzd2QuYWRqdW5jdC5ieW5hbWUiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkb25lID0gMAorICAgICAgICBmb3IgbmlzbWFwIGluIG1hcHM6CisgICAgICAgICAgICBtYXBwaW5nID0gbmlzLmNhdChuaXNtYXApCisgICAgICAgICAgICBmb3IgaywgdiBpbiBtYXBwaW5nLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGs6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbmlzLm1hdGNoKGssIG5pc21hcCkgIT0gdjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJOSVMgbWF0Y2ggZmFpbGVkIGZvciBrZXkgYCVzJyBpbiBtYXAgYCVzJyIgJSAoaywgbmlzbWFwKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCB0aGUgb25lIGtleSwgb3RoZXJ3aXNlIHRoaXMgdGVzdCBjb3VsZCB0YWtlIGEKKyAgICAgICAgICAgICAgICAgICAgIyB2ZXJ5IGxvbmcgdGltZQorICAgICAgICAgICAgICAgICAgICBkb25lID0gMQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgZG9uZToKKyAgICAgICAgICAgICAgICBicmVhaworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChOaXNUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0MGEwOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKQEAgLTAsMCArMSwxMDIgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgb3Blbl91cmxyZXNvdXJjZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gaHR0cGxpYiBpbXBvcnQgSFRUUEV4Y2VwdGlvbgoraW1wb3J0IHN5cworaW1wb3J0IG9zCitmcm9tIHVuaWNvZGVkYXRhIGltcG9ydCBub3JtYWxpemUsIHVuaWRhdGFfdmVyc2lvbgorCitURVNUREFUQUZJTEUgPSAiTm9ybWFsaXphdGlvblRlc3QudHh0IgorVEVTVERBVEFVUkwgPSAiaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvIiArIHVuaWRhdGFfdmVyc2lvbiArICIvdWNkLyIgKyBURVNUREFUQUZJTEUKKworZGVmIGNoZWNrX3ZlcnNpb24odGVzdGZpbGUpOgorICAgIGhkciA9IHRlc3RmaWxlLnJlYWRsaW5lKCkKKyAgICByZXR1cm4gdW5pZGF0YV92ZXJzaW9uIGluIGhkcgorCitjbGFzcyBSYW5nZUVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitkZWYgTkZDKHN0cik6CisgICAgcmV0dXJuIG5vcm1hbGl6ZSgiTkZDIiwgc3RyKQorCitkZWYgTkZLQyhzdHIpOgorICAgIHJldHVybiBub3JtYWxpemUoIk5GS0MiLCBzdHIpCisKK2RlZiBORkQoc3RyKToKKyAgICByZXR1cm4gbm9ybWFsaXplKCJORkQiLCBzdHIpCisKK2RlZiBORktEKHN0cik6CisgICAgcmV0dXJuIG5vcm1hbGl6ZSgiTkZLRCIsIHN0cikKKworZGVmIHVuaXN0cihkYXRhKToKKyAgICBkYXRhID0gW2ludCh4LCAxNikgZm9yIHggaW4gZGF0YS5zcGxpdCgiICIpXQorICAgIGZvciB4IGluIGRhdGE6CisgICAgICAgIGlmIHggPiBzeXMubWF4dW5pY29kZToKKyAgICAgICAgICAgIHJhaXNlIFJhbmdlRXJyb3IKKyAgICByZXR1cm4gdSIiLmpvaW4oW3VuaWNocih4KSBmb3IgeCBpbiBkYXRhXSkKKworY2xhc3MgTm9ybWFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X21haW4oc2VsZik6CisgICAgICAgIHBhcnQgPSBOb25lCisgICAgICAgIHBhcnQxX2RhdGEgPSB7fQorICAgICAgICAjIEhpdCB0aGUgZXhjZXB0aW9uIGVhcmx5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RkYXRhID0gb3Blbl91cmxyZXNvdXJjZShURVNUREFUQVVSTCwgY2hlY2tfdmVyc2lvbikKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiICsgVEVTVERBVEFVUkwpCisgICAgICAgIGZvciBsaW5lIGluIHRlc3RkYXRhOgorICAgICAgICAgICAgaWYgJyMnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoJyMnKVswXQorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQFBhcnQiKToKKyAgICAgICAgICAgICAgICBwYXJ0ID0gbGluZS5zcGxpdCgpWzBdCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjMSxjMixjMyxjNCxjNSA9IFt1bmlzdHIoeCkgZm9yIHggaW4gbGluZS5zcGxpdCgnOycpWzotMV1dCisgICAgICAgICAgICBleGNlcHQgUmFuZ2VFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFNraXAgdW5zdXBwb3J0ZWQgY2hhcmFjdGVyczsKKyAgICAgICAgICAgICAgICAjIHRyeSBhdGxlYXN0IGFkZGluZyBjMSBpZiB3ZSBhcmUgaW4gcGFydDEKKyAgICAgICAgICAgICAgICBpZiBwYXJ0ID09ICJAUGFydDEiOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBjMSA9IHVuaXN0cihsaW5lLnNwbGl0KCc7JylbMF0pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBSYW5nZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFydDFfZGF0YVtjMV0gPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBQZXJmb3JtIHRlc3RzCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgPT0gIE5GQyhjMSkgPT0gIE5GQyhjMikgPT0gIE5GQyhjMyksIGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYzQgPT0gIE5GQyhjNCkgPT0gIE5GQyhjNSksIGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYzMgPT0gIE5GRChjMSkgPT0gIE5GRChjMikgPT0gIE5GRChjMyksIGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYzUgPT0gIE5GRChjNCkgPT0gIE5GRChjNSksIGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYzQgPT0gTkZLQyhjMSkgPT0gTkZLQyhjMikgPT0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5GS0MoYzMpID09IE5GS0MoYzQpID09IE5GS0MoYzUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYzUgPT0gTkZLRChjMSkgPT0gTkZLRChjMikgPT0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5GS0QoYzMpID09IE5GS0QoYzQpID09IE5GS0QoYzUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpCisKKyAgICAgICAgICAgICMgUmVjb3JkIHBhcnQgMSBkYXRhCisgICAgICAgICAgICBpZiBwYXJ0ID09ICJAUGFydDEiOgorICAgICAgICAgICAgICAgIHBhcnQxX2RhdGFbYzFdID0gMQorCisgICAgICAgICMgUGVyZm9ybSB0ZXN0cyBmb3IgYWxsIG90aGVyIGRhdGEKKyAgICAgICAgZm9yIGMgaW4gcmFuZ2Uoc3lzLm1heHVuaWNvZGUrMSk6CisgICAgICAgICAgICBYID0gdW5pY2hyKGMpCisgICAgICAgICAgICBpZiBYIGluIHBhcnQxX2RhdGE6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShYID09IE5GQyhYKSA9PSBORkQoWCkgPT0gTkZLQyhYKSA9PSBORktEKFgpLCBjKQorCisgICAgZGVmIHRlc3RfYnVnXzgzNDY3NihzZWxmKToKKyAgICAgICAgIyBDaGVjayBmb3IgYnVnIDgzNDY3NgorICAgICAgICBub3JtYWxpemUoJ05GQycsIHUnXHVkNTVjXHVhZTAwJykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE5vcm1hbGl6YXRpb25UZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4NTJjMAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X250cGF0aC5weQpAQCAtMCwwICsxLDIwMyBAQAoraW1wb3J0IG50cGF0aAoraW1wb3J0IG9zCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0RmFpbGVkCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgdGVzdF9nZW5lcmljcGF0aAoraW1wb3J0IHVuaXR0ZXN0CisKKworZGVmIHRlc3Rlcihmbiwgd2FudFJlc3VsdCk6CisgICAgZm4gPSBmbi5yZXBsYWNlKCJcXCIsICJcXFxcIikKKyAgICBnb3RSZXN1bHQgPSBldmFsKGZuKQorICAgIGlmIHdhbnRSZXN1bHQgIT0gZ290UmVzdWx0OgorICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCAiJXMgc2hvdWxkIHJldHVybjogJXMgYnV0IHJldHVybmVkOiAlcyIgXAorICAgICAgICAgICAgICAlKHN0cihmbiksIHN0cih3YW50UmVzdWx0KSwgc3RyKGdvdFJlc3VsdCkpCisKKworY2xhc3MgVGVzdE50cGF0aCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc3BsaXRleHQoc2VsZik6CisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0ZXh0KCJmb28uZXh0IiknLCAoJ2ZvbycsICcuZXh0JykpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0ZXh0KCIvZm9vL2Zvby5leHQiKScsICgnL2Zvby9mb28nLCAnLmV4dCcpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGV4dCgiLmV4dCIpJywgKCcuZXh0JywgJycpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGV4dCgiXFxmb28uZXh0XFxmb28iKScsICgnXFxmb28uZXh0XFxmb28nLCAnJykpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0ZXh0KCJmb28uZXh0XFwiKScsICgnZm9vLmV4dFxcJywgJycpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGV4dCgiIiknLCAoJycsICcnKSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXRleHQoImZvby5iYXIuZXh0IiknLCAoJ2Zvby5iYXInLCAnLmV4dCcpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGV4dCgieHgvZm9vLmJhci5leHQiKScsICgneHgvZm9vLmJhcicsICcuZXh0JykpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0ZXh0KCJ4eFxcZm9vLmJhci5leHQiKScsICgneHhcXGZvby5iYXInLCAnLmV4dCcpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGV4dCgiYzphL2JcXGMuZCIpJywgKCdjOmEvYlxcYycsICcuZCcpKQorCisgICAgZGVmIHRlc3Rfc3BsaXRkcml2ZShzZWxmKToKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXRkcml2ZSgiYzpcXGZvb1xcYmFyIiknLAorICAgICAgICAgICAgICAgKCdjOicsICdcXGZvb1xcYmFyJykpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0ZHJpdmUoImM6L2Zvby9iYXIiKScsCisgICAgICAgICAgICAgICAoJ2M6JywgJy9mb28vYmFyJykpCisKKyAgICBkZWYgdGVzdF9zcGxpdHVuYyhzZWxmKToKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXR1bmMoIlxcXFxjb25reVxcbW91bnRwb2ludFxcZm9vXFxiYXIiKScsCisgICAgICAgICAgICAgICAoJ1xcXFxjb25reVxcbW91bnRwb2ludCcsICdcXGZvb1xcYmFyJykpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0dW5jKCIvL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhciIpJywKKyAgICAgICAgICAgICAgICgnLy9jb25reS9tb3VudHBvaW50JywgJy9mb28vYmFyJykpCisKKyAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXQoImM6XFxmb29cXGJhciIpJywgKCdjOlxcZm9vJywgJ2JhcicpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdCgiXFxcXGNvbmt5XFxtb3VudHBvaW50XFxmb29cXGJhciIpJywKKyAgICAgICAgICAgICAgICgnXFxcXGNvbmt5XFxtb3VudHBvaW50XFxmb28nLCAnYmFyJykpCisKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXQoImM6XFwiKScsICgnYzpcXCcsICcnKSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXQoIlxcXFxjb25reVxcbW91bnRwb2ludFxcIiknLAorICAgICAgICAgICAgICAgKCdcXFxcY29ua3lcXG1vdW50cG9pbnQnLCAnJykpCisKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXQoImM6LyIpJywgKCdjOi8nLCAnJykpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0KCIvL2Nvbmt5L21vdW50cG9pbnQvIiknLCAoJy8vY29ua3kvbW91bnRwb2ludCcsICcnKSkKKworICAgIGRlZiB0ZXN0X2lzYWJzKHNlbGYpOgorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5pc2FicygiYzpcXCIpJywgMSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguaXNhYnMoIlxcXFxjb25reVxcbW91bnRwb2ludFxcIiknLCAxKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5pc2FicygiXFxmb28iKScsIDEpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmlzYWJzKCJcXGZvb1xcYmFyIiknLCAxKQorCisgICAgZGVmIHRlc3RfY29tbW9ucHJlZml4KHNlbGYpOgorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2Vuc29uL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pJywKKyAgICAgICAgICAgICAgICIvaG9tZS9zd2VuIikKKyAgICAgICAgdGVzdGVyKCdudHBhdGguY29tbW9ucHJlZml4KFsiXFxob21lXFxzd2VuXFxzcGFtIiwgIlxcaG9tZVxcc3dlblxcZWdncyJdKScsCisgICAgICAgICAgICAgICAiXFxob21lXFxzd2VuXFwiKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pJywKKyAgICAgICAgICAgICAgICIvaG9tZS9zd2VuL3NwYW0iKQorCisgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiIiknLCAnJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiIiwgIiIsICIiKScsICcnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJhIiknLCAnYScpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oIi9hIiknLCAnL2EnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJcXGEiKScsICdcXGEnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJhOiIpJywgJ2E6JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiYToiLCAiYiIpJywgJ2E6YicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oImE6IiwgIi9iIiknLCAnYTovYicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oImE6IiwgIlxcYiIpJywgJ2E6XFxiJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiYSIsICIvYiIpJywgJy9iJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiYSIsICJcXGIiKScsICdcXGInKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJhIiwgImIiLCAiYyIpJywgJ2FcXGJcXGMnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJhXFwiLCAiYiIsICJjIiknLCAnYVxcYlxcYycpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oImEiLCAiYlxcIiwgImMiKScsICdhXFxiXFxjJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiYSIsICJiIiwgIlxcYyIpJywgJ1xcYycpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oImQ6XFwiLCAiXFxwbGVlcCIpJywgJ2Q6XFxwbGVlcCcpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oImQ6XFwiLCAiYSIsICJiIiknLCAnZDpcXGFcXGInKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCdjOicsICcvYScpIiwgJ2M6L2EnKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCdjOi8nLCAnL2EnKSIsICdjOi9hJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGguam9pbignYzovYScsICcvYicpIiwgJy9iJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGguam9pbignYzonLCAnZDovJykiLCAnZDovJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGguam9pbignYzovJywgJ2Q6LycpIiwgJ2Q6LycpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJ2M6LycsICdkOi9hL2InKSIsICdkOi9hL2InKQorCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJycpIiwgJycpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJycsICcnLCAnJywgJycsICcnKSIsICcnKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCdhJykiLCAnYScpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJycsICdhJykiLCAnYScpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJycsICcnLCAnJywgJycsICdhJykiLCAnYScpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJ2EnLCAnJykiLCAnYVxcJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGguam9pbignYScsICcnLCAnJywgJycsICcnKSIsICdhXFwnKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCdhXFwnLCAnJykiLCAnYVxcJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGguam9pbignYVxcJywgJycsICcnLCAnJywgJycpIiwgJ2FcXCcpCisKKyAgICBkZWYgdGVzdF9ub3JtcGF0aChzZWxmKToKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ0EvLy8vLy8uLy4vLy8uLy9CJykiLCByJ0FcQicpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCdBLy4vQicpIiwgcidBXEInKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnQS9mb28vLi4vQicpIiwgcidBXEInKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnQzpBLy9CJykiLCByJ0M6QVxCJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ0Q6QS8uL0InKSIsIHInRDpBXEInKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnZTpBL2Zvby8uLi9CJykiLCByJ2U6QVxCJykKKworICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnQzovLy9BLy9CJykiLCByJ0M6XEFcQicpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCdEOi8vL0EvLi9CJykiLCByJ0Q6XEFcQicpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCdlOi8vL0EvZm9vLy4uL0InKSIsIHInZTpcQVxCJykKKworICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnLi4nKSIsIHInLi4nKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnLicpIiwgcicuJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJycpIiwgcicuJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJy8nKSIsICdcXCcpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCdjOi8nKSIsICdjOlxcJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJy8uLi8uLi8uLy4uJykiLCAnXFwnKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnYzovLi4vLi4vLi4nKSIsICdjOlxcJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJy4uLy4uLy4vLi4nKSIsIHInLi5cLi5cLi4nKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnSzouLi8uLi8uLy4uJykiLCByJ0s6Li5cLi5cLi4nKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnQzovLy8vYS9iJykiLCByJ0M6XGFcYicpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCcvL21hY2hpbmUvc2hhcmUvL2EvYicpIiwgcidcXG1hY2hpbmVcc2hhcmVcYVxiJykKKworICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnXFxcXC5cXE5VTCcpIiwgcidcXC5cTlVMJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ1xcXFw/XFxEOi9YWVxcWicpIiwgcidcXD9cRDovWFlcWicpCisKKyAgICBkZWYgdGVzdF9leHBhbmR2YXJzKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52LmNsZWFyKCkKKyAgICAgICAgICAgIGVudlsiZm9vIl0gPSAiYmFyIgorICAgICAgICAgICAgZW52WyJ7Zm9vIl0gPSAiYmF6MSIKKyAgICAgICAgICAgIGVudlsie2Zvb30iXSA9ICJiYXoyIgorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiZm9vIiknLCAiZm9vIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiRmb28gYmFyIiknLCAiYmFyIGJhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIke2Zvb31iYXIiKScsICJiYXJiYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJFtmb29dYmFyIiknLCAiJFtmb29dYmFyIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiRiYXIgYmFyIiknLCAiJGJhciBiYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJD9iYXIiKScsICIkP2JhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIke2Zvb31iYXIiKScsICJiYXJiYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJGZvb31iYXIiKScsICJiYXJ9YmFyIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiR7Zm9vIiknLCAiJHtmb28iKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJHt7Zm9vfX0iKScsICJiYXoxfSIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIkZm9vJGZvbyIpJywgImJhcmJhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIkYmFyJGJhciIpJywgIiRiYXIkYmFyIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiVmb28lIGJhciIpJywgImJhciBiYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJWZvbyViYXIiKScsICJiYXJiYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJWZvbyUlZm9vJSIpJywgImJhcmJhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIlJWZvbyUlZm9vJWZvbyUiKScsICIlZm9vJWZvb2JhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIlP2JhciUiKScsICIlP2JhciUiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJWZvbyUlYmFyIiknLCAiYmFyJWJhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCJcJyVmb28lXCclYmFyIiknLCAiXCclZm9vJVwnJWJhciIpCisKKyAgICBkZWYgdGVzdF9hYnNwYXRoKHNlbGYpOgorICAgICAgICAjIG50cGF0aC5hYnNwYXRoKCkgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHN5c3RlbSB3aXRoIHRoZSAibnQiIG1vZHVsZQorICAgICAgICAjIChyZWFzb25hYmx5KSwgc28gd2UgcHJvdGVjdCB0aGlzIHRlc3Qgd2l0aCAiaW1wb3J0IG50Ii4gIFRoaXMgYWxsb3dzCisgICAgICAgICMgdGhlIHJlc3Qgb2YgdGhlIHRlc3RzIGZvciB0aGUgbnRwYXRoIG1vZHVsZSB0byBiZSBydW4gdG8gY29tcGxldGlvbgorICAgICAgICAjIG9uIGFueSBwbGF0Zm9ybSwgc2luY2UgbW9zdCBvZiB0aGUgbW9kdWxlIGlzIGludGVuZGVkIHRvIGJlIHVzYWJsZQorICAgICAgICAjIGZyb20gYW55IHBsYXRmb3JtLgorICAgICAgICAjIFhYWCB0aGlzIG5lZWRzIG1vcmUgdGVzdHMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IG50CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgZnVuY3Rpb24gaXMgdGhlcmUgZXZlbiBpZiB3ZSBhcmUgbm90IG9uIFdpbmRvd3MKKyAgICAgICAgICAgIG50cGF0aC5hYnNwYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5hYnNwYXRoKCJDOlxcIiknLCAiQzpcXCIpCisKKyAgICBkZWYgdGVzdF9yZWxwYXRoKHNlbGYpOgorICAgICAgICBjdXJyZW50ZGlyID0gb3MucGF0aC5zcGxpdChvcy5nZXRjd2QoKSlbLTFdCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEiKScsICdhJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aChvcy5wYXRoLmFic3BhdGgoImEiKSknLCAnYScpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEvYiIpJywgJ2FcXGInKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIuLi9hL2IiKScsICcuLlxcYVxcYicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEiLCAiLi4vYiIpJywgJy4uXFwnK2N1cnJlbnRkaXIrJ1xcYScpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEvYiIsICIuLi9jIiknLCAnLi5cXCcrY3VycmVudGRpcisnXFxhXFxiJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiYSIsICJiL2MiKScsICcuLlxcLi5cXGEnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvL2Nvbmt5L21vdW50cG9pbnQvYSIsICIvL2Nvbmt5L21vdW50cG9pbnQvYi9jIiknLCAnLi5cXC4uXFxhJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiYSIsICJhIiknLCAnLicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIveC95L3oiKScsICcuLlxcLi5cXC4uXFxmb29cXGJhclxcYmF0JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi9mb28vYmFyIiknLCAnYmF0JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi8iKScsICdmb29cXGJhclxcYmF0JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiLyIsICIvZm9vL2Jhci9iYXQiKScsICcuLlxcLi5cXC4uJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi94IiknLCAnLi5cXGZvb1xcYmFyXFxiYXQnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIveCIsICIvZm9vL2Jhci9iYXQiKScsICcuLlxcLi5cXC4uXFx4JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiLyIsICIvIiknLCAnLicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9hIiwgIi9hIiknLCAnLicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9hL2IiLCAiL2EvYiIpJywgJy4nKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJjOi9mb28iLCAiQzovRk9PIiknLCAnLicpCisKKworY2xhc3MgTnRDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCk6CisgICAgcGF0aG1vZHVsZSA9IG50cGF0aAorICAgIGF0dHJpYnV0ZXMgPSBbJ3JlbHBhdGgnLCAnc3BsaXR1bmMnXQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3ROdHBhdGgsIE50Q29tbW9uVGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb2xkX21haWxib3gucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9vbGRfbWFpbGJveC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGJhOWMwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb2xkX21haWxib3gucHkKQEAgLTAsMCArMSwxNjAgQEAKKyMgVGhpcyBzZXQgb2YgdGVzdHMgZXhlcmNpc2VzIHRoZSBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IGNsYXNzCisjIGluIG1haWxib3gucHkgKHRoZSBvbmVzIHdpdGhvdXQgd3JpdGUgc3VwcG9ydCkuCisKK2ltcG9ydCBtYWlsYm94CitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgY2xlYW51cCBlYXJsaWVyIHRlc3RzCit0cnk6CisgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCitleGNlcHQgb3MuZXJyb3I6CisgICAgcGFzcworCitGUk9NXyA9ICJGcm9tIHNvbWUuYm9keUBkdW1teS5kb21haW4gIFNhdCBKdWwgMjQgMTM6NDM6MzUgMjAwNFxuIgorRFVNTVlfTUVTU0FHRSA9ICIiIlwKK0Zyb206IHNvbWUuYm9keUBkdW1teS5kb21haW4KK1RvOiBtZUBteS5kb21haW4KK1N1YmplY3Q6IFNpbXBsZSBUZXN0CisKK1RoaXMgaXMgYSBkdW1teSBtZXNzYWdlLgorIiIiCisKK2NsYXNzIE1haWxkaXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgY3JlYXRlIGEgbmV3IG1haWxkaXIgbWFpbGJveCB0byB3b3JrIHdpdGg6CisgICAgICAgIHNlbGYuX2RpciA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgb3MubWtkaXIoc2VsZi5fZGlyKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAiY3VyIikpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJ0bXAiKSkKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYuX2RpciwgIm5ldyIpKQorICAgICAgICBzZWxmLl9jb3VudGVyID0gMQorICAgICAgICBzZWxmLl9tc2dmaWxlcyA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG1hcChvcy51bmxpbmssIHNlbGYuX21zZ2ZpbGVzKQorICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAiY3VyIikpCisgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJ0bXAiKSkKKyAgICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKHNlbGYuX2RpciwgIm5ldyIpKQorICAgICAgICBvcy5ybWRpcihzZWxmLl9kaXIpCisKKyAgICBkZWYgY3JlYXRlTWVzc2FnZShzZWxmLCBkaXIsIG1ib3g9RmFsc2UpOgorICAgICAgICB0ID0gaW50KHRpbWUudGltZSgpICUgMTAwMDAwMCkKKyAgICAgICAgcGlkID0gc2VsZi5fY291bnRlcgorICAgICAgICBzZWxmLl9jb3VudGVyICs9IDEKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5leHRzZXAuam9pbigoc3RyKHQpLCBzdHIocGlkKSwgIm15aG9zdG5hbWUiLCAibXlkb21haW4iKSkKKyAgICAgICAgdG1wbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJ0bXAiLCBmaWxlbmFtZSkKKyAgICAgICAgbmV3bmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9kaXIsIGRpciwgZmlsZW5hbWUpCisgICAgICAgIHdpdGggb3Blbih0bXBuYW1lLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5fbXNnZmlsZXMuYXBwZW5kKHRtcG5hbWUpCisgICAgICAgICAgICBpZiBtYm94OgorICAgICAgICAgICAgICAgIGZwLndyaXRlKEZST01fKQorICAgICAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKKyAgICAgICAgICAgIG9zLmxpbmsodG1wbmFtZSwgbmV3bmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdpdGggb3BlbihuZXduYW1lLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKERVTU1ZX01FU1NBR0UpCisgICAgICAgIHNlbGYuX21zZ2ZpbGVzLmFwcGVuZChuZXduYW1lKQorICAgICAgICByZXR1cm4gdG1wbmFtZQorCisgICAgZGVmIHRlc3RfZW1wdHlfbWFpbGRpcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBhbiBlbXB0eSBtYWlsZGlyIG1haWxib3giIiIKKyAgICAgICAgIyBUZXN0IGZvciByZWdyZXNzaW9uIG9uIGJ1ZyAjMTE3NDkwOgorICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3gpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ub25lbXB0eV9tYWlsZGlyX2N1cihzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJjdXIiKQorICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3gpID09IDEpCisgICAgICAgIG1zZyA9IHNlbGYubWJveC5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZyBpcyBub3QgTm9uZSkKKyAgICAgICAgbXNnLmZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X25vbmVtcHR5X21haWxkaXJfbmV3KHNlbGYpOgorICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoIm5ldyIpCisgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveCkgPT0gMSkKKyAgICAgICAgbXNnID0gc2VsZi5tYm94Lm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnIGlzIG5vdCBOb25lKQorICAgICAgICBtc2cuZnAuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uZW1wdHlfbWFpbGRpcl9ib3RoKHNlbGYpOgorICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoImN1ciIpCisgICAgICAgIHNlbGYuY3JlYXRlTWVzc2FnZSgibmV3IikKKyAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94KSA9PSAyKQorICAgICAgICBtc2cgPSBzZWxmLm1ib3gubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cgaXMgbm90IE5vbmUpCisgICAgICAgIG1zZy5mcC5jbG9zZSgpCisgICAgICAgIG1zZyA9IHNlbGYubWJveC5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZyBpcyBub3QgTm9uZSkKKyAgICAgICAgbXNnLmZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X3VuaXhfbWJveChzZWxmKToKKyAgICAgICAgIyMjIHNob3VsZCBiZSBiZXR0ZXIhCisgICAgICAgIGltcG9ydCBlbWFpbC5wYXJzZXIKKyAgICAgICAgZm5hbWUgPSBzZWxmLmNyZWF0ZU1lc3NhZ2UoImN1ciIsIFRydWUpCisgICAgICAgIG4gPSAwCisgICAgICAgIHdpdGggb3BlbihmbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBtc2cgaW4gbWFpbGJveC5Qb3J0YWJsZVVuaXhNYWlsYm94KGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsLnBhcnNlci5QYXJzZXIoKS5wYXJzZSk6CisgICAgICAgICAgICAgICAgbiArPSAxCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbInN1YmplY3QiXSwgIlNpbXBsZSBUZXN0IikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdHIobXNnKSksIGxlbihGUk9NXykrbGVuKERVTU1ZX01FU1NBR0UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDEpCisKK2NsYXNzIE1ib3hUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSBhIG5ldyBtYWlsZGlyIG1haWxib3ggdG8gd29yayB3aXRoOgorICAgICAgICBzZWxmLl9wYXRoID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy51bmxpbmsoc2VsZi5fcGF0aCkKKworICAgIGRlZiB0ZXN0X2Zyb21fcmVnZXggKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbmV3IHJlZ2V4IGZyb20gYnVnICMxNjMzNjc4CisgICAgICAgIHdpdGggb3BlbihzZWxmLl9wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCIiIkZyb20gZnJlZEBleGFtcGxlLmNvbSBNb24gTWF5IDMxIDEzOjI0OjUwIDIwMDQgKzAyMDAKK1N1YmplY3Q6IG1lc3NhZ2UgMQorCitib2R5MQorRnJvbSBmcmVkQGV4YW1wbGUuY29tIE1vbiBNYXkgMzEgMTM6MjQ6NTAgMjAwNCAtMDIwMAorU3ViamVjdDogbWVzc2FnZSAyCisKK2JvZHkyCitGcm9tIGZyZWRAZXhhbXBsZS5jb20gTW9uIE1heSAzMSAxMzoyNDo1MCAyMDA0CitTdWJqZWN0OiBtZXNzYWdlIDMKKworYm9keTMKK0Zyb20gZnJlZEBleGFtcGxlLmNvbSBNb24gTWF5IDMxIDEzOjI0OjUwIDIwMDQKK1N1YmplY3Q6IG1lc3NhZ2UgNAorCitib2R5NAorIiIiKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgYm94ID0gbWFpbGJveC5Vbml4TWFpbGJveChmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihsaXN0KGl0ZXIoYm94KSkpID09IDQpCisKKworICAgICMgWFhYIFdlIHN0aWxsIG5lZWQgbW9yZSB0ZXN0cyEKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChNYWlsZGlyVGVzdENhc2UsIE1ib3hUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9vcGNvZGVzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDExN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weQpAQCAtMCwwICsxLDEyMSBAQAorIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCAyLCBvcGNvZGVzCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfcHkza193YXJuaW5ncworaW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIE9wY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdHJ5X2luc2lkZV9mb3JfbG9vcChzZWxmKToKKyAgICAgICAgbiA9IDAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgbiA9IG4raQorICAgICAgICAgICAgdHJ5OiAxIC8vIDAKKyAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6IHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjogcGFzcworICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICAgICAgdHJ5OiBwYXNzCisgICAgICAgICAgICBleGNlcHQ6IHBhc3MKKyAgICAgICAgICAgIHRyeTogcGFzcworICAgICAgICAgICAgZmluYWxseTogcGFzcworICAgICAgICAgICAgbiA9IG4raQorICAgICAgICBpZiBuICE9IDkwOgorICAgICAgICAgICAgc2VsZi5mYWlsKCd0cnkgaW5zaWRlIGZvcicpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9jbGFzc19leGNlcHRpb25zKHNlbGYpOgorCisgICAgICAgIGNsYXNzIEFDbGFzczogcGFzcworICAgICAgICBjbGFzcyBCQ2xhc3MoQUNsYXNzKTogcGFzcworICAgICAgICBjbGFzcyBDQ2xhc3M6IHBhc3MKKyAgICAgICAgY2xhc3MgRENsYXNzKEFDbGFzcyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaWdub3JlKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OiByYWlzZSBBQ2xhc3MoKQorICAgICAgICBleGNlcHQ6IHBhc3MKKworICAgICAgICB0cnk6IHJhaXNlIEFDbGFzcygpCisgICAgICAgIGV4Y2VwdCBBQ2xhc3M6IHBhc3MKKworICAgICAgICB0cnk6IHJhaXNlIEJDbGFzcygpCisgICAgICAgIGV4Y2VwdCBBQ2xhc3M6IHBhc3MKKworICAgICAgICB0cnk6IHJhaXNlIEJDbGFzcygpCisgICAgICAgIGV4Y2VwdCBDQ2xhc3M6IHNlbGYuZmFpbCgpCisgICAgICAgIGV4Y2VwdDogcGFzcworCisgICAgICAgIGEgPSBBQ2xhc3MoKQorICAgICAgICBiID0gQkNsYXNzKCkKKworICAgICAgICB0cnk6IHJhaXNlIEFDbGFzcywgYgorICAgICAgICBleGNlcHQgQkNsYXNzLCB2OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBiKQorICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgdHJ5OiByYWlzZSBiCisgICAgICAgIGV4Y2VwdCBBQ2xhc3MsIHY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIGIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgIyBub3QgZW5vdWdoIGFyZ3VtZW50cworICAgICAgICB0cnk6ICByYWlzZSBCQ2xhc3MsIGEKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgdHJ5OiAgcmFpc2UgRENsYXNzLCBhCisgICAgICAgIGV4Y2VwdCBEQ2xhc3MsIHY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodiwgRENsYXNzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV9mdW5jdGlvbl9vYmplY3RzKHNlbGYpOgorCisgICAgICAgIGYgPSBldmFsKCdsYW1iZGE6IE5vbmUnKQorICAgICAgICBnID0gZXZhbCgnbGFtYmRhOiBOb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQorCisgICAgICAgIGYgPSBldmFsKCdsYW1iZGEgYTogYScpCisgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYTogYScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE9MTogYScpCisgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYT0xOiBhJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQorCisgICAgICAgIGYgPSBldmFsKCdsYW1iZGE6IDAnKQorICAgICAgICBnID0gZXZhbCgnbGFtYmRhOiAxJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQorCisgICAgICAgIGYgPSBldmFsKCdsYW1iZGE6IE5vbmUnKQorICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE6IE5vbmUnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYsIGcpCisKKyAgICAgICAgZiA9IGV2YWwoJ2xhbWJkYSBhOiBOb25lJykKKyAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYSBiOiBOb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQorCisgICAgICAgIGYgPSBldmFsKCdsYW1iZGEgYTogTm9uZScpCisgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYT1Ob25lOiBOb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQorCisgICAgICAgIGYgPSBldmFsKCdsYW1iZGEgYT0wOiBOb25lJykKKyAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYSBhPTE6IE5vbmUnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYsIGcpCisKKyAgICBkZWYgdGVzdF9tb2R1bG9fb2Zfc3RyaW5nX3N1YmNsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIE15U3RyaW5nKHN0cik6CisgICAgICAgICAgICBkZWYgX19tb2RfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTXlTdHJpbmcoKSAlIDMsIDQyKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKCJleGNlcHRpb25zIG11c3QgZGVyaXZlIGZyb20gQmFzZUV4Y2VwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImNhdGNoaW5nIGNsYXNzZXMgdGhhdCBkb24ndCBpbmhlcml0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIEJhc2VFeGNlcHRpb24gaXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHJ1bl91bml0dGVzdChPcGNvZGVUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGM0ZmUyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQpAQCAtMCwwICsxLDIzIEBACisjIFRlc3QgdG8gc2VlIGlmIG9wZW5wdHkgd29ya3MuIChCdXQgZG9uJ3Qgd29ycnkgaWYgaXQgaXNuJ3QgYXZhaWxhYmxlLikKKworaW1wb3J0IG9zLCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2lmIG5vdCBoYXNhdHRyKG9zLCAib3BlbnB0eSIpOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAiTm8gb3BlbnB0eSgpIGF2YWlsYWJsZS4iCisKKworY2xhc3MgT3BlbnB0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBtYXN0ZXIsIHNsYXZlID0gb3Mub3BlbnB0eSgpCisgICAgICAgIGlmIG5vdCBvcy5pc2F0dHkoc2xhdmUpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTbGF2ZS1lbmQgb2YgcHR5IGlzIG5vdCBhIHRlcm1pbmFsLiIpCisKKyAgICAgICAgb3Mud3JpdGUoc2xhdmUsICdQaW5nIScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChtYXN0ZXIsIDEwMjQpLCAnUGluZyEnKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE9wZW5wdHlUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTgwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQpAQCAtMCwwICsxLDUzMiBAQAoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgU2VxMToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbHN0KToKKyAgICAgICAgc2VsZi5sc3QgPSBsc3QKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmxzdCkKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIHJldHVybiBzZWxmLmxzdFtpXQorICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYubHN0ICsgb3RoZXIubHN0CisgICAgZGVmIF9fbXVsX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5sc3QgKiBvdGhlcgorICAgIGRlZiBfX3JtdWxfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBvdGhlciAqIHNlbGYubHN0CisKK2NsYXNzIFNlcTIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbHN0KToKKyAgICAgICAgc2VsZi5sc3QgPSBsc3QKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmxzdCkKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIHJldHVybiBzZWxmLmxzdFtpXQorICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYubHN0ICsgb3RoZXIubHN0CisgICAgZGVmIF9fbXVsX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5sc3QgKiBvdGhlcgorICAgIGRlZiBfX3JtdWxfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBvdGhlciAqIHNlbGYubHN0CisKKworY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQsIDFqLCAyaikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmx0KDEsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmx0KDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sdCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmx0KDEsIDIuMCkpCisKKyAgICBkZWYgdGVzdF9sZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSwgMWosIDJqKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmxlKDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmxlKDEsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmxlKDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmxlKDEsIDIuMCkpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBvcGVyYXRvci5lcSwgQygpLCBDKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmVxKDEsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZXEoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAyLjApKQorCisgICAgZGVmIHRlc3RfbmUoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBvcGVyYXRvci5uZSwgQygpLCBDKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZSgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubmUoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubmUoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubmUoMSwgMi4wKSkKKworICAgIGRlZiB0ZXN0X2dlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlLCAxaiwgMmopCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdlKDEsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdlKDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ2UoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ2UoMSwgMi4wKSkKKworICAgIGRlZiB0ZXN0X2d0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmd0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmd0LCAxaiwgMmopCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5ndCgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmd0KDEsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ3QoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ3QoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5ndCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5ndCgxLCAyLjApKQorCisgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFicykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hYnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hYnMoLTEpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hYnMoMSkgPT0gMSkKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hZGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWRkLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYWRkKDMsIDQpID09IDcpCisKKyAgICBkZWYgdGVzdF9iaXR3aXNlX2FuZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFuZF8sIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hbmRfKDB4ZiwgMHhhKSA9PSAweGEpCisKKyAgICBkZWYgdGVzdF9jb25jYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdCgncHknLCAndGhvbicpID09ICdweXRob24nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29uY2F0KFsxLCAyXSwgWzMsIDRdKSA9PSBbMSwgMiwgMywgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb25jYXQoU2VxMShbNSwgNl0pLCBTZXExKFs3XSkpID09IFs1LCA2LCA3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdChTZXEyKFs1LCA2XSksIFNlcTIoWzddKSkgPT0gWzUsIDYsIDddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgMTMsIDI5KQorCisgICAgZGVmIHRlc3RfY291bnRPZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb3VudE9mKFsxLCAyLCAxLCAzLCAxLCA0XSwgMykgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCA1KSA9PSAwKQorCisgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgYSA9IFs0LCAzLCAyLCAxXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbGl0ZW0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsaXRlbSwgYSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmRlbGl0ZW0oYSwgMSkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzQsIDIsIDFdKQorCisgICAgZGVmIHRlc3RfZGVsc2xpY2Uoc2VsZik6CisgICAgICAgIGEgPSByYW5nZSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxzbGljZSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxzbGljZSwgYSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmRlbHNsaWNlKGEsIDIsIDgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IFswLCAxLCA4LCA5XSkKKyAgICAgICAgb3BlcmF0b3IuZGVsc2xpY2UoYSwgMCwgdGVzdF9zdXBwb3J0Lk1BWF9QeV9zc2l6ZV90KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbXSkKKworICAgIGRlZiB0ZXN0X2RpdihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kaXYsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGl2LCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZmxvb3JkaXYoNSwgMikgPT0gMikKKworICAgIGRlZiB0ZXN0X2Zsb29yZGl2KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZmxvb3JkaXYoNSwgMikgPT0gMikKKworICAgIGRlZiB0ZXN0X3RydWVkaXYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IudHJ1ZWRpdig1LCAyKSA9PSAyLjUpCisKKyAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBhID0gcmFuZ2UoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCBhLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2V0aXRlbShhLCAyKSA9PSAyKQorCisgICAgZGVmIHRlc3RfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgIGEgPSByYW5nZSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRzbGljZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRzbGljZSwgYSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdldHNsaWNlKGEsIDQsIDYpID09IFs0LCA1XSkKKyAgICAgICAgYiA9IG9wZXJhdG9yLmdldHNsaWNlKGEsIDAsIHRlc3Rfc3VwcG9ydC5NQVhfUHlfc3NpemVfdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgPT0gYSkKKworICAgIGRlZiB0ZXN0X2luZGV4T2Yoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaW5kZXhPZihbNCwgMywgMiwgMV0sIDMpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIFs0LCAzLCAyLCAxXSwgMCkKKworICAgIGRlZiB0ZXN0X2ludmVydChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbnZlcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW52ZXJ0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaW52KDQpID09IC01KQorCisgICAgZGVmIHRlc3RfaXNDYWxsYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc0NhbGxhYmxlKQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgY2hlY2soc2VsZiwgbywgdik6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pc0NhbGxhYmxlKG8pLCB2KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbGFibGUobyksIHYpCisgICAgICAgIGNoZWNrKHNlbGYsIDQsIDApCisgICAgICAgIGNoZWNrKHNlbGYsIG9wZXJhdG9yLmlzQ2FsbGFibGUsIDEpCisgICAgICAgIGNoZWNrKHNlbGYsIEMsIDEpCisgICAgICAgIGNoZWNrKHNlbGYsIEMoKSwgMCkKKworICAgIGRlZiB0ZXN0X2lzTWFwcGluZ1R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNNYXBwaW5nVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc01hcHBpbmdUeXBlKDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUob3BlcmF0b3IuaXNNYXBwaW5nVHlwZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc01hcHBpbmdUeXBlKG9wZXJhdG9yLl9fZGljdF9fKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUoe30pKQorCisgICAgZGVmIHRlc3RfaXNOdW1iZXJUeXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzTnVtYmVyVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSg4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSg4aikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc051bWJlclR5cGUoOEwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDguMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNOdW1iZXJUeXBlKGRpcigpKSkKKworICAgIGRlZiB0ZXN0X2lzU2VxdWVuY2VUeXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoZGlyKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoeHJhbmdlKDEwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSgneWVhaGJ1ZGR5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoMykpCisgICAgICAgIGNsYXNzIERpY3QoZGljdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc1NlcXVlbmNlVHlwZShEaWN0KCkpKQorCisgICAgZGVmIHRlc3RfbHNoaWZ0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIE5vbmUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHNoaWZ0KDUsIDEpID09IDEwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHNoaWZ0KDUsIDApID09IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCwgMiwgLTEpCisKKyAgICBkZWYgdGVzdF9tb2Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubW9kKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCwgTm9uZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tb2QoNSwgMikgPT0gMSkKKworICAgIGRlZiB0ZXN0X211bChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubXVsLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubXVsKDUsIDIpID09IDEwKQorCisgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZWcsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZWcoNSkgPT0gLTUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZWcoLTUpID09IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZWcoMCkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lZygtMCkgPT0gMCkKKworICAgIGRlZiB0ZXN0X2JpdHdpc2Vfb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iub3JfKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXywgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm9yXygweGEsIDB4NSkgPT0gMHhmKQorCisgICAgZGVmIHRlc3RfcG9zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3MsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5wb3MoNSkgPT0gNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnBvcygtNSkgPT0gLTUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5wb3MoMCkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnBvcygtMCkgPT0gMCkKKworICAgIGRlZiB0ZXN0X3BvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucG93KDMsNSkgPT0gMyoqNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLl9fcG93X18oMyw1KSA9PSAzKio1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3csIDEsIDIsIDMpCisKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIGEgPSByYW5nZSgzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJlcGVhdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yZXBlYXQsIGEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gYSthKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gW10pCisgICAgICAgIGEgPSAoMSwgMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAyKSA9PSBhK2EpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMSkgPT0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSAoKSkKKyAgICAgICAgYSA9ICcxMjMnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gYSthKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gJycpCisgICAgICAgIGEgPSBTZXExKFs0LCA1LCA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAyKSA9PSBbNCwgNSwgNiwgNCwgNSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMSkgPT0gWzQsIDUsIDZdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDApID09IFtdKQorICAgICAgICBhID0gU2VxMihbNCwgNSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gWzQsIDUsIDYsIDQsIDUsIDZdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IFs0LCA1LCA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yZXBlYXQsIDYsIDcpCisKKyAgICBkZWYgdGVzdF9yc2hpZnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucnNoaWZ0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgTm9uZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yc2hpZnQoNSwgMSkgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJzaGlmdCg1LCAwKSA9PSA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIDIsIC0xKQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29udGFpbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29udGFpbnMsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb250YWlucyhyYW5nZSg0KSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuY29udGFpbnMocmFuZ2UoNCksIDUpKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc2VxdWVuY2VJbmNsdWRlcyhyYW5nZSg0KSwgMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXMocmFuZ2UoNCksIDUpKQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKKyAgICAgICAgYSA9IHJhbmdlKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc2V0aXRlbShhLCAwLCAyKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbMiwgMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEsIDQsIDIpCisKKyAgICBkZWYgdGVzdF9zZXRzbGljZShzZWxmKToKKyAgICAgICAgYSA9IHJhbmdlKDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0c2xpY2UsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0c2xpY2UsIGEsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5zZXRzbGljZShhLCAxLCAzLCBbMiwgMV0pIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IFswLCAyLCAxLCAzXSkKKyAgICAgICAgb3BlcmF0b3Iuc2V0c2xpY2UoYSwgMCwgdGVzdF9zdXBwb3J0Lk1BWF9QeV9zc2l6ZV90LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gW10pCisKKyAgICBkZWYgdGVzdF9zdWIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc3ViKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnN1YiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnN1Yig1LCAyKSA9PSAzKQorCisgICAgZGVmIHRlc3RfdHJ1dGgoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnRydXRoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IudHJ1dGgsIEMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnRydXRoKDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IudHJ1dGgoWzBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci50cnV0aCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci50cnV0aChbXSkpCisKKyAgICBkZWYgdGVzdF9iaXR3aXNlX3hvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IueG9yLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IueG9yKDB4YiwgMHhjKSA9PSAweDcpCisKKyAgICBkZWYgdGVzdF9pcyhzZWxmKToKKyAgICAgICAgYSA9IGIgPSAneHl6cGRxJworICAgICAgICBjID0gYVs6M10gKyBiWzM6XQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzXyhhLCBiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc18oYSxjKSkKKworICAgIGRlZiB0ZXN0X2lzX25vdChzZWxmKToKKyAgICAgICAgYSA9IGIgPSAneHl6cGRxJworICAgICAgICBjID0gYVs6M10gKyBiWzM6XQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzX25vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc19ub3QoYSwgYikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc19ub3QoYSxjKSkKKworICAgIGRlZiB0ZXN0X2F0dHJnZXR0ZXIoc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgYS5uYW1lID0gJ2FydGh1cicKKyAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksICdhcnRodXInKQorICAgICAgICBmID0gb3BlcmF0b3IuYXR0cmdldHRlcigncmFuaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmLCBhKQorICAgICAgICBmID0gb3BlcmF0b3IuYXR0cmdldHRlcigyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYXR0cmdldHRlcikKKworICAgICAgICAjIG11bHRpcGxlIGdldHMKKyAgICAgICAgcmVjb3JkID0gQSgpCisgICAgICAgIHJlY29yZC54ID0gJ1gnCisgICAgICAgIHJlY29yZC55ID0gJ1knCisgICAgICAgIHJlY29yZC56ID0gJ1onCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuYXR0cmdldHRlcigneCcsJ3onLCd5JykocmVjb3JkKSwgKCdYJywgJ1onLCAnWScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ3gnLCAoKSwgJ3knKSwgcmVjb3JkKQorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IuYXR0cmdldHRlcignZm9vJyksIEMoKSkKKworICAgICAgICAjIHJlY3Vyc2l2ZSBnZXRzCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgYS5uYW1lID0gJ2FydGh1cicKKyAgICAgICAgYS5jaGlsZCA9IEEoKQorICAgICAgICBhLmNoaWxkLm5hbWUgPSAndGhvbWFzJworICAgICAgICBmID0gb3BlcmF0b3IuYXR0cmdldHRlcignY2hpbGQubmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgJ3Rob21hcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmLCBhLmNoaWxkKQorICAgICAgICBmID0gb3BlcmF0b3IuYXR0cmdldHRlcignbmFtZScsICdjaGlsZC5uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAoJ2FydGh1cicsICd0aG9tYXMnKSkKKyAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ25hbWUnLCAnY2hpbGQubmFtZScsICdjaGlsZC5jaGlsZC5uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGYsIGEpCisKKyAgICAgICAgYS5jaGlsZC5jaGlsZCA9IEEoKQorICAgICAgICBhLmNoaWxkLmNoaWxkLm5hbWUgPSAnam9obnNvbicKKyAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ2NoaWxkLmNoaWxkLm5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksICdqb2huc29uJykKKyAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ25hbWUnLCAnY2hpbGQubmFtZScsICdjaGlsZC5jaGlsZC5uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAoJ2FydGh1cicsICd0aG9tYXMnLCAnam9obnNvbicpKQorCisgICAgZGVmIHRlc3RfaXRlbWdldHRlcihzZWxmKToKKyAgICAgICAgYSA9ICdBQkNERScKKyAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAnQycpCisgICAgICAgIGYgPSBvcGVyYXRvci5pdGVtZ2V0dGVyKDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBmLCBhKQorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IuaXRlbWdldHRlcig0MiksIEMoKSkKKworICAgICAgICBmID0gb3BlcmF0b3IuaXRlbWdldHRlcignbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pdGVtZ2V0dGVyKQorCisgICAgICAgIGQgPSBkaWN0KGtleT0ndmFsJykKKyAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoJ2tleScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihkKSwgJ3ZhbCcpCisgICAgICAgIGYgPSBvcGVyYXRvci5pdGVtZ2V0dGVyKCdub25rZXknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZiwgZCkKKworICAgICAgICAjIGV4YW1wbGUgdXNlZCBpbiB0aGUgZG9jcworICAgICAgICBpbnZlbnRvcnkgPSBbKCdhcHBsZScsIDMpLCAoJ2JhbmFuYScsIDIpLCAoJ3BlYXInLCA1KSwgKCdvcmFuZ2UnLCAxKV0KKyAgICAgICAgZ2V0Y291bnQgPSBvcGVyYXRvci5pdGVtZ2V0dGVyKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKGdldGNvdW50LCBpbnZlbnRvcnkpLCBbMywgMiwgNSwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGludmVudG9yeSwga2V5PWdldGNvdW50KSwKKyAgICAgICAgICAgIFsoJ29yYW5nZScsIDEpLCAoJ2JhbmFuYScsIDIpLCAoJ2FwcGxlJywgMyksICgncGVhcicsIDUpXSkKKworICAgICAgICAjIG11bHRpcGxlIGdldHMKKyAgICAgICAgZGF0YSA9IG1hcChzdHIsIHJhbmdlKDIwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pdGVtZ2V0dGVyKDIsMTAsNSkoZGF0YSksICgnMicsICcxMCcsICc1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXRlbWdldHRlcigyLCAneCcsIDUpLCBkYXRhKQorCisgICAgZGVmIHRlc3RfbWV0aG9kY2FsbGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1ldGhvZGNhbGxlcikKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF0gKyBhcmdzWzFdCisgICAgICAgICAgICBkZWYgYmFyKHNlbGYsIGY9NDIpOgorICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZiwgYSkKKyAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignZm9vJywgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAzKQorICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEsIGEpCisgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JhcicsIGY9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCA1KQorCisgICAgZGVmIHRlc3RfaW5wbGFjZShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faWFkZF9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImlhZGQiCisgICAgICAgICAgICBkZWYgX19pYW5kX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWFuZCIKKyAgICAgICAgICAgIGRlZiBfX2lkaXZfXyAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpZGl2IgorICAgICAgICAgICAgZGVmIF9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpOiByZXR1cm4gImlmbG9vcmRpdiIKKyAgICAgICAgICAgIGRlZiBfX2lsc2hpZnRfXyAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpbHNoaWZ0IgorICAgICAgICAgICAgZGVmIF9faW1vZF9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImltb2QiCisgICAgICAgICAgICBkZWYgX19pbXVsX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaW11bCIKKyAgICAgICAgICAgIGRlZiBfX2lvcl9fICAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpb3IiCisgICAgICAgICAgICBkZWYgX19pcG93X18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaXBvdyIKKyAgICAgICAgICAgIGRlZiBfX2lyc2hpZnRfXyAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpcnNoaWZ0IgorICAgICAgICAgICAgZGVmIF9faXN1Yl9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImlzdWIiCisgICAgICAgICAgICBkZWYgX19pdHJ1ZWRpdl9fIChzZWxmLCBvdGhlcik6IHJldHVybiAiaXRydWVkaXYiCisgICAgICAgICAgICBkZWYgX19peG9yX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaXhvciIKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBvdGhlcik6IHJldHVybiA1ICAjIHNvIHRoYXQgQyBpcyBhIHNlcXVlbmNlCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pYWRkICAgICAoYywgNSksICJpYWRkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pYW5kICAgICAoYywgNSksICJpYW5kIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pZGl2ICAgICAoYywgNSksICJpZGl2IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pZmxvb3JkaXYoYywgNSksICJpZmxvb3JkaXYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmlsc2hpZnQgIChjLCA1KSwgImlsc2hpZnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmltb2QgICAgIChjLCA1KSwgImltb2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmltdWwgICAgIChjLCA1KSwgImltdWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmlvciAgICAgIChjLCA1KSwgImlvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXBvdyAgICAgKGMsIDUpLCAiaXBvdyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXJzaGlmdCAgKGMsIDUpLCAiaXJzaGlmdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXN1YiAgICAgKGMsIDUpLCAiaXN1YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXRydWVkaXYgKGMsIDUpLCAiaXRydWVkaXYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLml4b3IgICAgIChjLCA1KSwgIml4b3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmljb25jYXQgIChjLCBjKSwgImlhZGQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmlyZXBlYXQgIChjLCA1KSwgImltdWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWFkZF9fICAgICAoYywgNSksICJpYWRkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lhbmRfXyAgICAgKGMsIDUpLCAiaWFuZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pZGl2X18gICAgIChjLCA1KSwgImlkaXYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWZsb29yZGl2X18oYywgNSksICJpZmxvb3JkaXYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWxzaGlmdF9fICAoYywgNSksICJpbHNoaWZ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ltb2RfXyAgICAgKGMsIDUpLCAiaW1vZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbXVsX18gICAgIChjLCA1KSwgImltdWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW9yX18gICAgICAoYywgNSksICJpb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXBvd19fICAgICAoYywgNSksICJpcG93IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lyc2hpZnRfXyAgKGMsIDUpLCAiaXJzaGlmdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pc3ViX18gICAgIChjLCA1KSwgImlzdWIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXRydWVkaXZfXyAoYywgNSksICJpdHJ1ZWRpdiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19peG9yX18gICAgIChjLCA1KSwgIml4b3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWNvbmNhdF9fICAoYywgYyksICJpYWRkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lyZXBlYXRfXyAgKGMsIDUpLCAiaW11bCIpCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBpbXBvcnQgc3lzCisgICAgdGVzdF9jbGFzc2VzID0gKAorICAgICAgICBPcGVyYXRvclRlc3RDYXNlLAorICAgICkKKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHByaW50IGNvdW50cworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTViYjkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQpAQCAtMCwwICsxLDE2MjYgQEAKKyMKKyMgVGVzdCBzdWl0ZSBmb3IgT3B0aWsuICBTdXBwbGllZCBieSBKb2hhbm5lcyBHaWpzYmVycworIyAodGFyYWRpbm9Ac29mdGhvbWUubmV0KSAtLSB0cmFuc2xhdGVkIGZyb20gdGhlIG9yaWdpbmFsIE9wdGlrCisjIHRlc3Qgc3VpdGUgdG8gdGhpcyBQeVVuaXQtYmFzZWQgdmVyc2lvbi4KKyMKKyMgJElkJAorIworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGNvcHkKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uLCBPcHRpb24sIFwKKyAgICAgVGl0bGVkSGVscEZvcm1hdHRlciwgT3B0aW9uUGFyc2VyLCBPcHRpb25Hcm91cCwgXAorICAgICBTVVBQUkVTU19VU0FHRSwgT3B0aW9uRXJyb3IsIE9wdGlvbkNvbmZsaWN0RXJyb3IsIFwKKyAgICAgQmFkT3B0aW9uRXJyb3IsIE9wdGlvblZhbHVlRXJyb3IsIFZhbHVlcworZnJvbSBvcHRwYXJzZSBpbXBvcnQgX21hdGNoX2FiYnJldgorZnJvbSBvcHRwYXJzZSBpbXBvcnQgX3BhcnNlX251bQorCityZXR5cGUgPSB0eXBlKHJlLmNvbXBpbGUoJycpKQorCitjbGFzcyBJbnRlcmNlcHRlZEVycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2U9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXhpdF9zdGF0dXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXhpdF9tZXNzYWdlPU5vbmUpOgorICAgICAgICBzZWxmLmVycm9yX21lc3NhZ2UgPSBlcnJvcl9tZXNzYWdlCisgICAgICAgIHNlbGYuZXhpdF9zdGF0dXMgPSBleGl0X3N0YXR1cworICAgICAgICBzZWxmLmV4aXRfbWVzc2FnZSA9IGV4aXRfbWVzc2FnZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmVycm9yX21lc3NhZ2Ugb3Igc2VsZi5leGl0X21lc3NhZ2Ugb3IgImludGVyY2VwdGVkIGVycm9yIgorCitjbGFzcyBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIoT3B0aW9uUGFyc2VyKToKKyAgICBkZWYgZXhpdChzZWxmLCBzdGF0dXM9MCwgbXNnPU5vbmUpOgorICAgICAgICByYWlzZSBJbnRlcmNlcHRlZEVycm9yKGV4aXRfc3RhdHVzPXN0YXR1cywgZXhpdF9tZXNzYWdlPW1zZykKKworICAgIGRlZiBlcnJvcihzZWxmLCBtc2cpOgorICAgICAgICByYWlzZSBJbnRlcmNlcHRlZEVycm9yKGVycm9yX21lc3NhZ2U9bXNnKQorCisKK2NsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0UGFyc2VPSyhzZWxmLCBhcmdzLCBleHBlY3RlZF9vcHRzLCBleHBlY3RlZF9wb3NpdGlvbmFsX2FyZ3MpOgorICAgICAgICAiIiJBc3NlcnQgdGhlIG9wdGlvbnMgYXJlIHdoYXQgd2UgZXhwZWN0ZWQgd2hlbiBwYXJzaW5nIGFyZ3VtZW50cy4KKworICAgICAgICBPdGhlcndpc2UsIGZhaWwgd2l0aCBhIG5pY2VseSBmb3JtYXR0ZWQgbWVzc2FnZS4KKworICAgICAgICBLZXl3b3JkIGFyZ3VtZW50czoKKyAgICAgICAgYXJncyAtLSBBIGxpc3Qgb2YgYXJndW1lbnRzIHRvIHBhcnNlIHdpdGggT3B0aW9uUGFyc2VyLgorICAgICAgICBleHBlY3RlZF9vcHRzIC0tIFRoZSBvcHRpb25zIGV4cGVjdGVkLgorICAgICAgICBleHBlY3RlZF9wb3NpdGlvbmFsX2FyZ3MgLS0gVGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGV4cGVjdGVkLgorCisgICAgICAgIFJldHVybnMgdGhlIG9wdGlvbnMgYW5kIHBvc2l0aW9uYWwgYXJncyBmb3IgZnVydGhlciB0ZXN0aW5nLgorICAgICAgICAiIiIKKworICAgICAgICAob3B0aW9ucywgcG9zaXRpb25hbF9hcmdzKSA9IHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgb3B0ZGljdCA9IHZhcnMob3B0aW9ucykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGRpY3QsIGV4cGVjdGVkX29wdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiIiCitPcHRpb25zIGFyZSAlKG9wdGRpY3Qpcy4KK1Nob3VsZCBiZSAlKGV4cGVjdGVkX29wdHMpcy4KK0FyZ3Mgd2VyZSAlKGFyZ3Mpcy4iIiIgJSBsb2NhbHMoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l0aW9uYWxfYXJncywgZXhwZWN0ZWRfcG9zaXRpb25hbF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICIiIgorUG9zaXRpb25hbCBhcmd1bWVudHMgYXJlICUocG9zaXRpb25hbF9hcmdzKXMuCitTaG91bGQgYmUgJShleHBlY3RlZF9wb3NpdGlvbmFsX2FyZ3Mpcy4KK0FyZ3Mgd2VyZSAlKGFyZ3Mpcy4iIiIgJSBsb2NhbHMgKCkpCisKKyAgICAgICAgcmV0dXJuIChvcHRpb25zLCBwb3NpdGlvbmFsX2FyZ3MpCisKKyAgICBkZWYgYXNzZXJ0UmFpc2VzKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgYXJncywKKyAgICAgICAgICAgICAgICAgICAgIGt3YXJncywKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX21lc3NhZ2UpOgorICAgICAgICAiIiIKKyAgICAgICAgQXNzZXJ0IHRoYXQgdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBjYWxsaW5nIGEKKyAgICAgICAgZnVuY3Rpb24sIGFuZCB0aGF0IHRoZSByaWdodCBlcnJvciBtZXNzYWdlIGlzIGluY2x1ZGVkIHdpdGgKKyAgICAgICAgdGhhdCBleGNlcHRpb24uCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgIGZ1bmMgLS0gdGhlIGZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgICAgICBhcmdzIC0tIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRvIGBmdW5jYAorICAgICAgICAgIGt3YXJncyAtLSBrZXl3b3JkIGFyZ3VtZW50cyB0byBgZnVuY2AKKyAgICAgICAgICBleHBlY3RlZF9leGNlcHRpb24gLS0gZXhjZXB0aW9uIHRoYXQgc2hvdWxkIGJlIHJhaXNlZAorICAgICAgICAgIGV4cGVjdGVkX21lc3NhZ2UgLS0gZXhwZWN0ZWQgZXhjZXB0aW9uIG1lc3NhZ2UgKG9yIHBhdHRlcm4KKyAgICAgICAgICAgIGlmIGEgY29tcGlsZWQgcmVnZXggb2JqZWN0KQorCisgICAgICAgIFJldHVybnMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgZm9yIGZ1cnRoZXIgdGVzdGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGFyZ3MgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZ3MgPSAoKQorICAgICAgICBpZiBrd2FyZ3MgaXMgTm9uZToKKyAgICAgICAgICAgIGt3YXJncyA9IHt9CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBleHBlY3RlZF9leGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgIGFjdHVhbF9tZXNzYWdlID0gc3RyKGVycikKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfbWVzc2FnZSwgcmV0eXBlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWRfbWVzc2FnZS5zZWFyY2goYWN0dWFsX21lc3NhZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiJcCitleHBlY3RlZCBleGNlcHRpb24gbWVzc2FnZSBwYXR0ZXJuOgorLyVzLworYWN0dWFsIGV4Y2VwdGlvbiBtZXNzYWdlOgorJycnJXMnJycKKyIiIiAlIChleHBlY3RlZF9tZXNzYWdlLnBhdHRlcm4sIGFjdHVhbF9tZXNzYWdlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiJcCitleHBlY3RlZCBleGNlcHRpb24gbWVzc2FnZToKKycnJyVzJycnCithY3R1YWwgZXhjZXB0aW9uIG1lc3NhZ2U6CisnJyclcycnJworIiIiICUgKGV4cGVjdGVkX21lc3NhZ2UsIGFjdHVhbF9tZXNzYWdlKSkKKworICAgICAgICAgICAgcmV0dXJuIGVycgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCIiImV4cGVjdGVkIGV4Y2VwdGlvbiAlKGV4cGVjdGVkX2V4Y2VwdGlvbilzIG5vdCByYWlzZWQKK2NhbGxlZCAlKGZ1bmMpcgord2l0aCBhcmdzICUoYXJncylyCithbmQga3dhcmdzICUoa3dhcmdzKXIKKyIiIiAlIGxvY2FscyAoKSkKKworCisgICAgIyAtLSBBc3NlcnRpb25zIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBjbGFzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGFzc2VydFBhcnNlRmFpbChzZWxmLCBjbWRsaW5lX2FyZ3MsIGV4cGVjdGVkX291dHB1dCk6CisgICAgICAgICIiIgorICAgICAgICBBc3NlcnQgdGhlIHBhcnNlciBmYWlscyB3aXRoIHRoZSBleHBlY3RlZCBtZXNzYWdlLiAgQ2FsbGVyCisgICAgICAgIG11c3QgZW5zdXJlIHRoYXQgc2VsZi5wYXJzZXIgaXMgYW4gSW50ZXJjZXB0aW5nT3B0aW9uUGFyc2VyLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncyhjbWRsaW5lX2FyZ3MpCisgICAgICAgIGV4Y2VwdCBJbnRlcmNlcHRlZEVycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5lcnJvcl9tZXNzYWdlLCBleHBlY3RlZF9vdXRwdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCJleHBlY3RlZCBwYXJzZSBmYWlsdXJlIikKKworICAgIGRlZiBhc3NlcnRPdXRwdXQoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgIGNtZGxpbmVfYXJncywKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1cz0wLAorICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZXJyb3I9Tm9uZSk6CisgICAgICAgICIiIkFzc2VydCB0aGUgcGFyc2VyIHByaW50cyB0aGUgZXhwZWN0ZWQgb3V0cHV0IG9uIHN0ZG91dC4iIiIKKyAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIGVuY29kaW5nID0gZ2V0YXR0cihzYXZlX3N0ZG91dCwgJ2VuY29kaW5nJywgTm9uZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgICAgICAgICAgaWYgZW5jb2Rpbmc6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZW5jb2RpbmcgPSBlbmNvZGluZworICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoY21kbGluZV9hcmdzKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKKworICAgICAgICBleGNlcHQgSW50ZXJjZXB0ZWRFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgIHR5cGUob3V0cHV0KSBpcyB0eXBlcy5TdHJpbmdUeXBlLAorICAgICAgICAgICAgICAgICJleHBlY3RlZCBvdXRwdXQgdG8gYmUgYW4gb3JkaW5hcnkgc3RyaW5nLCBub3QgJXIiCisgICAgICAgICAgICAgICAgJSB0eXBlKG91dHB1dCkpCisKKyAgICAgICAgICAgIGlmIG91dHB1dCAhPSBleHBlY3RlZF9vdXRwdXQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZDogXG4nJydcbiIgKyBleHBlY3RlZF9vdXRwdXQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiJycnXG5idXQgZ290IFxuJycnXG4iICsgb3V0cHV0ICsgIicnJyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5leGl0X3N0YXR1cywgZXhwZWN0ZWRfc3RhdHVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhpdF9tZXNzYWdlLCBleHBlY3RlZF9lcnJvcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoImV4cGVjdGVkIHBhcnNlci5leGl0KCkiKQorCisgICAgZGVmIGFzc2VydFR5cGVFcnJvcihzZWxmLCBmdW5jLCBleHBlY3RlZF9tZXNzYWdlLCAqYXJncyk6CisgICAgICAgICIiIkFzc2VydCB0aGF0IFR5cGVFcnJvciBpcyByYWlzZWQgd2hlbiBleGVjdXRpbmcgZnVuYy4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnVuYywgYXJncywgTm9uZSwgVHlwZUVycm9yLCBleHBlY3RlZF9tZXNzYWdlKQorCisgICAgZGVmIGFzc2VydEhlbHAoc2VsZiwgcGFyc2VyLCBleHBlY3RlZF9oZWxwKToKKyAgICAgICAgYWN0dWFsX2hlbHAgPSBwYXJzZXIuZm9ybWF0X2hlbHAoKQorICAgICAgICBpZiBhY3R1YWxfaGVscCAhPSBleHBlY3RlZF9oZWxwOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdoZWxwIHRleHQgZmFpbHVyZTsgZXhwZWN0ZWQ6XG4iJyArCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaGVscCArICciOyBnb3Q6XG4iJyArCisgICAgICAgICAgICAgICAgYWN0dWFsX2hlbHAgKyAnIlxuJykKKworIyAtLSBUZXN0IG1ha2Vfb3B0aW9uKCkgYWthIE9wdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSXQncyBub3QgbmVjZXNzYXJ5IHRvIHRlc3QgY29ycmVjdCBvcHRpb25zIGhlcmUuICBBbGwgdGhlIHRlc3RzIGluIHRoZQorIyBwYXJzZXIucGFyc2VfYXJncygpIHNlY3Rpb24gZGVhbCB3aXRoIHRob3NlLCBiZWNhdXNlIHRoZXkncmUgbmVlZGVkCisjIHRoZXJlLgorCitjbGFzcyBUZXN0T3B0aW9uQ2hlY2tzKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPVNVUFBSRVNTX1VTQUdFKQorCisgICAgZGVmIGFzc2VydE9wdGlvbkVycm9yKHNlbGYsIGV4cGVjdGVkX21lc3NhZ2UsIGFyZ3M9W10sIGt3YXJncz17fSk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1ha2Vfb3B0aW9uLCBhcmdzLCBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbkVycm9yLCBleHBlY3RlZF9tZXNzYWdlKQorCisgICAgZGVmIHRlc3Rfb3B0X3N0cmluZ19lbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IobWFrZV9vcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdCBsZWFzdCBvbmUgb3B0aW9uIHN0cmluZyBtdXN0IGJlIHN1cHBsaWVkIikKKworICAgIGRlZiB0ZXN0X29wdF9zdHJpbmdfdG9vX3Nob3J0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgImludmFsaWQgb3B0aW9uIHN0cmluZyAnYic6IG11c3QgYmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgbG9uZyIsCisgICAgICAgICAgICBbImIiXSkKKworICAgIGRlZiB0ZXN0X29wdF9zdHJpbmdfc2hvcnRfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJpbnZhbGlkIHNob3J0IG9wdGlvbiBzdHJpbmcgJy0tJzogbXVzdCBiZSAiCisgICAgICAgICAgICAib2YgdGhlIGZvcm0gLXgsICh4IGFueSBub24tZGFzaCBjaGFyKSIsCisgICAgICAgICAgICBbIi0tIl0pCisKKyAgICBkZWYgdGVzdF9vcHRfc3RyaW5nX2xvbmdfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJpbnZhbGlkIGxvbmcgb3B0aW9uIHN0cmluZyAnLS0tJzogIgorICAgICAgICAgICAgIm11c3Qgc3RhcnQgd2l0aCAtLSwgZm9sbG93ZWQgYnkgbm9uLWRhc2giLAorICAgICAgICAgICAgWyItLS0iXSkKKworICAgIGRlZiB0ZXN0X2F0dHJfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6IGludmFsaWQga2V5d29yZCBhcmd1bWVudHM6IGJhciwgZm9vIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeydmb28nOiBOb25lLCAnYmFyJzogTm9uZX0pCisKKyAgICBkZWYgdGVzdF9hY3Rpb25faW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6IGludmFsaWQgYWN0aW9uOiAnZm9vJyIsCisgICAgICAgICAgICBbIi1iIl0sIHsnYWN0aW9uJzogJ2Zvbyd9KQorCisgICAgZGVmIHRlc3RfdHlwZV9pbnZhbGlkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgIm9wdGlvbiAtYjogaW52YWxpZCBvcHRpb24gdHlwZTogJ2ZvbyciLAorICAgICAgICAgICAgWyItYiJdLCB7J3R5cGUnOiAnZm9vJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBpbnZhbGlkIG9wdGlvbiB0eXBlOiAndHVwbGUnIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeyd0eXBlJzogdHVwbGV9KQorCisgICAgZGVmIHRlc3Rfbm9fdHlwZV9mb3JfYWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgIm9wdGlvbiAtYjogbXVzdCBub3Qgc3VwcGx5IGEgdHlwZSBmb3IgYWN0aW9uICdjb3VudCciLAorICAgICAgICAgICAgWyItYiJdLCB7J2FjdGlvbic6ICdjb3VudCcsICd0eXBlJzogJ2ludCd9KQorCisgICAgZGVmIHRlc3Rfbm9fY2hvaWNlc19saXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgIm9wdGlvbiAtYi8tLWJhZDogbXVzdCBzdXBwbHkgYSBsaXN0IG9mICIKKyAgICAgICAgICAgICJjaG9pY2VzIGZvciB0eXBlICdjaG9pY2UnIiwKKyAgICAgICAgICAgIFsiLWIiLCAiLS1iYWQiXSwgeyd0eXBlJzogImNob2ljZSJ9KQorCisgICAgZGVmIHRlc3RfYmFkX2Nob2ljZXNfbGlzdChzZWxmKToKKyAgICAgICAgdHlwZW5hbWUgPSB0eXBlKCcnKS5fX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgIm9wdGlvbiAtYi8tLWJhZDogY2hvaWNlcyBtdXN0IGJlIGEgbGlzdCBvZiAiCisgICAgICAgICAgICAic3RyaW5ncyAoJyVzJyBzdXBwbGllZCkiICUgdHlwZW5hbWUsCisgICAgICAgICAgICBbIi1iIiwgIi0tYmFkIl0sCisgICAgICAgICAgICB7J3R5cGUnOiAiY2hvaWNlIiwgJ2Nob2ljZXMnOiJiYWQgY2hvaWNlcyJ9KQorCisgICAgZGVmIHRlc3Rfbm9fY2hvaWNlc19mb3JfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6IG11c3Qgbm90IHN1cHBseSBjaG9pY2VzIGZvciB0eXBlICdpbnQnIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeyd0eXBlJzogJ2ludCcsICdjaG9pY2VzJzoiYmFkIn0pCisKKyAgICBkZWYgdGVzdF9ub19jb25zdF9mb3JfYWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgIm9wdGlvbiAtYjogJ2NvbnN0JyBtdXN0IG5vdCBiZSBzdXBwbGllZCBmb3IgYWN0aW9uICdzdG9yZSciLAorICAgICAgICAgICAgWyItYiJdLCB7J2FjdGlvbic6ICdzdG9yZScsICdjb25zdCc6IDF9KQorCisgICAgZGVmIHRlc3Rfbm9fbmFyZ3NfZm9yX2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6ICduYXJncycgbXVzdCBub3QgYmUgc3VwcGxpZWQgZm9yIGFjdGlvbiAnY291bnQnIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeydhY3Rpb24nOiAnY291bnQnLCAnbmFyZ3MnOiAyfSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX25vdF9jYWxsYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6IGNhbGxiYWNrIG5vdCBjYWxsYWJsZTogJ2ZvbyciLAorICAgICAgICAgICAgWyItYiJdLCB7J2FjdGlvbic6ICdjYWxsYmFjaycsCisgICAgICAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiAnZm9vJ30pCisKKyAgICBkZWYgZHVtbXkoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2FyZ3Nfbm9fdHVwbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBjYWxsYmFja19hcmdzLCBpZiBzdXBwbGllZCwgIgorICAgICAgICAgICAgIm11c3QgYmUgYSB0dXBsZTogbm90ICdmb28nIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeydhY3Rpb24nOiAnY2FsbGJhY2snLAorICAgICAgICAgICAgICAgICAgICAgJ2NhbGxiYWNrJzogc2VsZi5kdW1teSwKKyAgICAgICAgICAgICAgICAgICAgICdjYWxsYmFja19hcmdzJzogJ2Zvbyd9KQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfa3dhcmdzX25vX2RpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBjYWxsYmFja19rd2FyZ3MsIGlmIHN1cHBsaWVkLCAiCisgICAgICAgICAgICAibXVzdCBiZSBhIGRpY3Q6IG5vdCAnZm9vJyIsCisgICAgICAgICAgICBbIi1iIl0sIHsnYWN0aW9uJzogJ2NhbGxiYWNrJywKKyAgICAgICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHNlbGYuZHVtbXksCisgICAgICAgICAgICAgICAgICAgICAnY2FsbGJhY2tfa3dhcmdzJzogJ2Zvbyd9KQorCisgICAgZGVmIHRlc3Rfbm9fY2FsbGJhY2tfZm9yX2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6IGNhbGxiYWNrIHN1cHBsaWVkICgnZm9vJykgZm9yIG5vbi1jYWxsYmFjayBvcHRpb24iLAorICAgICAgICAgICAgWyItYiJdLCB7J2FjdGlvbic6ICdzdG9yZScsCisgICAgICAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiAnZm9vJ30pCisKKyAgICBkZWYgdGVzdF9ub19jYWxsYmFja19hcmdzX2Zvcl9hY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBjYWxsYmFja19hcmdzIHN1cHBsaWVkIGZvciBub24tY2FsbGJhY2sgb3B0aW9uIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeydhY3Rpb24nOiAnc3RvcmUnLAorICAgICAgICAgICAgICAgICAgICAgJ2NhbGxiYWNrX2FyZ3MnOiAnZm9vJ30pCisKKyAgICBkZWYgdGVzdF9ub19jYWxsYmFja19rd2FyZ3NfZm9yX2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6IGNhbGxiYWNrX2t3YXJncyBzdXBwbGllZCBmb3Igbm9uLWNhbGxiYWNrIG9wdGlvbiIsCisgICAgICAgICAgICBbIi1iIl0sIHsnYWN0aW9uJzogJ3N0b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICdjYWxsYmFja19rd2FyZ3MnOiAnZm9vJ30pCisKK2NsYXNzIFRlc3RPcHRpb25QYXJzZXIoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIoKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCAiLW4iLCAiLS1ub2lzeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InZlcmJvc2UiKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItcSIsICItLXF1aWV0IiwgIi0tc2lsZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InZlcmJvc2UiKQorCisgICAgZGVmIHRlc3RfYWRkX29wdGlvbl9ub19PcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKHNlbGYucGFyc2VyLmFkZF9vcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYW4gT3B0aW9uIGluc3RhbmNlOiBOb25lIiwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2FkZF9vcHRpb25faW52YWxpZF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKHNlbGYucGFyc2VyLmFkZF9vcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGFyZ3VtZW50cyIsIE5vbmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXRfb3B0aW9uKHNlbGYpOgorICAgICAgICBvcHQxID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXYiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3B0MSwgT3B0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdDEuX3Nob3J0X29wdHMsIFsiLXYiLCAiLW4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQxLl9sb25nX29wdHMsIFsiLS12ZXJib3NlIiwgIi0tbm9pc3kiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQxLmFjdGlvbiwgInN0b3JlX3RydWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdDEuZGVzdCwgInZlcmJvc2UiKQorCisgICAgZGVmIHRlc3RfZ2V0X29wdGlvbl9lcXVhbHMoc2VsZik6CisgICAgICAgIG9wdDEgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItdiIpCisgICAgICAgIG9wdDIgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLXZlcmJvc2UiKQorICAgICAgICBvcHQzID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLW4iKQorICAgICAgICBvcHQ0ID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS1ub2lzeSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHQxIGlzIG9wdDIgaXMgb3B0MyBpcyBvcHQ0KQorCisgICAgZGVmIHRlc3RfaGFzX29wdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi12IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItLXZlcmJvc2UiKSkKKworICAgIGRlZiBhc3NlcnRUcnVlcmVtb3ZlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi12IikgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi0tdmVyYm9zZSIpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItbiIpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLW5vaXN5IikgaXMgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi12IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLS12ZXJib3NlIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLW4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItLW5vaXN5IikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi1xIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItLXNpbGVudCIpKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3Nob3J0X29wdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIucmVtb3ZlX29wdGlvbigiLW4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWVyZW1vdmVkKCkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9sb25nX29wdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIucmVtb3ZlX29wdGlvbigiLS12ZXJib3NlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlcmVtb3ZlZCgpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfbm9uZXhpc3RlbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYucGFyc2VyLnJlbW92ZV9vcHRpb24sICgnZm9vJywpLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUVycm9yLCAibm8gc3VjaCBvcHRpb24gJ2ZvbyciKQorCisgICAgZGVmIHRlc3RfcmVmbGVhayhzZWxmKToKKyAgICAgICAgIyBJZiBhbiBPcHRpb25QYXJzZXIgaXMgY2FycnlpbmcgYXJvdW5kIGEgcmVmZXJlbmNlIHRvIGEgbGFyZ2UKKyAgICAgICAgIyBvYmplY3QsIHZhcmlvdXMgY3ljbGVzIGNhbiBwcmV2ZW50IGl0IGZyb20gYmVpbmcgR0MnZCBpbgorICAgICAgICAjIGEgdGltZWx5IGZhc2hpb24uICBkZXN0cm95KCkgYnJlYWtzIHRoZSBjeWNsZXMgdG8gZW5zdXJlIHN0dWZmCisgICAgICAgICMgY2FuIGJlIGNsZWFuZWQgdXAuCisgICAgICAgIGJpZ190aGluZyA9IFs0Ml0KKyAgICAgICAgcmVmY291bnQgPSBzeXMuZ2V0cmVmY291bnQoYmlnX3RoaW5nKQorICAgICAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1hYWFyZ2doIikKKyAgICAgICAgcGFyc2VyLmJpZ190aGluZyA9IGJpZ190aGluZworCisgICAgICAgIHBhcnNlci5kZXN0cm95KCkKKyAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwocmVmY291bnQsIHN5cy5nZXRyZWZjb3VudChiaWdfdGhpbmcpKQorICAgICAgICBkZWwgcGFyc2VyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVmY291bnQsIHN5cy5nZXRyZWZjb3VudChiaWdfdGhpbmcpKQorCisKK2NsYXNzIFRlc3RPcHRpb25WYWx1ZXMoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBWYWx1ZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnModmFsdWVzKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2YWx1ZXMsIHsiZm9vIjogImJhciJ9KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHZhbHVlcywgIiIpCisKKyAgICAgICAgZGljdCA9IHsiZm9vIjogImJhciIsICJiYXoiOiA0Mn0KKyAgICAgICAgdmFsdWVzID0gVmFsdWVzKGRlZmF1bHRzPWRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFycyh2YWx1ZXMpLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2YWx1ZXMsIHsiZm9vIjogImJhciJ9KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHZhbHVlcywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodmFsdWVzLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2YWx1ZXMsIFtdKQorCisKK2NsYXNzIFRlc3RUeXBlQWxpYXNlcyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcigpCisKKyAgICBkZWYgdGVzdF9zdHJfYWxpYXNlc19zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgdHlwZT0ic3RyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItcyIpLnR5cGUsICJzdHJpbmciKQorCisgICAgZGVmIHRlc3RfbmV3X3R5cGVfb2JqZWN0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItcyIsIHR5cGU9c3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1zIikudHlwZSwgInN0cmluZyIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi14IiwgdHlwZT1pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXgiKS50eXBlLCAiaW50IikKKworICAgIGRlZiB0ZXN0X29sZF90eXBlX29iamVjdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXMiLCB0eXBlPXR5cGVzLlN0cmluZ1R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXMiKS50eXBlLCAic3RyaW5nIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXgiLCB0eXBlPXR5cGVzLkludFR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXgiKS50eXBlLCAiaW50IikKKworCisjIEN1c3RvbSB0eXBlIGZvciB0ZXN0aW5nIHByb2Nlc3Npbmcgb2YgZGVmYXVsdCB2YWx1ZXMuCitfdGltZV91bml0cyA9IHsgJ3MnIDogMSwgJ20nIDogNjAsICdoJyA6IDYwKjYwLCAnZCcgOiA2MCo2MCoyNCB9CisKK2RlZiBfY2hlY2tfZHVyYXRpb24ob3B0aW9uLCBvcHQsIHZhbHVlKToKKyAgICB0cnk6CisgICAgICAgIGlmIHZhbHVlWy0xXS5pc2RpZ2l0KCk6CisgICAgICAgICAgICByZXR1cm4gaW50KHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGludCh2YWx1ZVs6LTFdKSAqIF90aW1lX3VuaXRzW3ZhbHVlWy0xXV0KKyAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IpOgorICAgICAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKAorICAgICAgICAgICAgJ29wdGlvbiAlczogaW52YWxpZCBkdXJhdGlvbjogJXInICUgKG9wdCwgdmFsdWUpKQorCitjbGFzcyBEdXJhdGlvbk9wdGlvbihPcHRpb24pOgorICAgIFRZUEVTID0gT3B0aW9uLlRZUEVTICsgKCdkdXJhdGlvbicsKQorICAgIFRZUEVfQ0hFQ0tFUiA9IGNvcHkuY29weShPcHRpb24uVFlQRV9DSEVDS0VSKQorICAgIFRZUEVfQ0hFQ0tFUlsnZHVyYXRpb24nXSA9IF9jaGVja19kdXJhdGlvbgorCitjbGFzcyBUZXN0RGVmYXVsdFZhbHVlcyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcigpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGRlZmF1bHQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXEiLCAiLS1xdWlldCIsIGRlc3Q9J3ZlcmJvc2UnKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItbiIsIHR5cGU9ImludCIsIGRlZmF1bHQ9MzcpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgdHlwZT0iaW50IikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXMiLCBkZWZhdWx0PSJmb28iKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItdCIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi11IiwgZGVmYXVsdD1Ob25lKQorICAgICAgICBzZWxmLmV4cGVjdGVkID0geyAndmVyYm9zZSc6IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICduJzogMzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdtJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3MnOiAiZm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3QnOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndSc6IE5vbmUgfQorCisgICAgZGVmIHRlc3RfYmFzaWNfZGVmYXVsdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X2RlZmF1bHRfdmFsdWVzKCksIHNlbGYuZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9taXhlZF9kZWZhdWx0c19wb3N0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5zZXRfZGVmYXVsdHMobj00MiwgbT0tMTAwKQorICAgICAgICBzZWxmLmV4cGVjdGVkLnVwZGF0ZSh7J24nOiA0MiwgJ20nOiAtMTAwfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfZGVmYXVsdF92YWx1ZXMoKSwgc2VsZi5leHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X21peGVkX2RlZmF1bHRzX3ByZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuc2V0X2RlZmF1bHRzKHg9ImJhcmYiLCB5PSJibGFoIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXgiLCBkZWZhdWx0PSJmcm9iIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXkiKQorCisgICAgICAgIHNlbGYuZXhwZWN0ZWQudXBkYXRlKHsneCc6ICJmcm9iIiwgJ3knOiAiYmxhaCJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9kZWZhdWx0X3ZhbHVlcygpLCBzZWxmLmV4cGVjdGVkKQorCisgICAgICAgIHNlbGYucGFyc2VyLnJlbW92ZV9vcHRpb24oIi15IikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXkiLCBkZWZhdWx0PU5vbmUpCisgICAgICAgIHNlbGYuZXhwZWN0ZWQudXBkYXRlKHsneSc6IE5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9kZWZhdWx0X3ZhbHVlcygpLCBzZWxmLmV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5vcHRpb25fY2xhc3MgPSBEdXJhdGlvbk9wdGlvbgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZCIsIHR5cGU9ImR1cmF0aW9uIiwgZGVmYXVsdD0zMDApCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgdHlwZT0iZHVyYXRpb24iLCBkZWZhdWx0PSI2bSIpCisgICAgICAgIHNlbGYucGFyc2VyLnNldF9kZWZhdWx0cyhuPSI0MiIpCisgICAgICAgIHNlbGYuZXhwZWN0ZWQudXBkYXRlKHsnZCc6IDMwMCwgJ2UnOiAzNjAsICduJzogNDJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9kZWZhdWx0X3ZhbHVlcygpLCBzZWxmLmV4cGVjdGVkKQorCisgICAgICAgIHNlbGYucGFyc2VyLnNldF9wcm9jZXNzX2RlZmF1bHRfdmFsdWVzKEZhbHNlKQorICAgICAgICBzZWxmLmV4cGVjdGVkLnVwZGF0ZSh7J2QnOiAzMDAsICdlJzogIjZtIiwgJ24nOiAiNDIifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfZGVmYXVsdF92YWx1ZXMoKSwgc2VsZi5leHBlY3RlZCkKKworCitjbGFzcyBUZXN0UHJvZ05hbWUoQmFzZVRlc3QpOgorICAgICIiIgorICAgIFRlc3QgdGhhdCAlcHJvZyBleHBhbmRzIHRvIHRoZSByaWdodCB0aGluZyBpbiB1c2FnZSwgdmVyc2lvbiwKKyAgICBhbmQgaGVscCBzdHJpbmdzLgorICAgICIiIgorCisgICAgZGVmIGFzc2VydFVzYWdlKHNlbGYsIHBhcnNlciwgZXhwZWN0ZWRfdXNhZ2UpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRfdXNhZ2UoKSwgZXhwZWN0ZWRfdXNhZ2UpCisKKyAgICBkZWYgYXNzZXJ0VmVyc2lvbihzZWxmLCBwYXJzZXIsIGV4cGVjdGVkX3ZlcnNpb24pOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRfdmVyc2lvbigpLCBleHBlY3RlZF92ZXJzaW9uKQorCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3Byb2duYW1lKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHByb2dyYW0gbmFtZSB0YWtlbiBmcm9tIHN5cy5hcmd2WzBdIGJ5IGRlZmF1bHQuCisgICAgICAgIHNhdmVfYXJndiA9IHN5cy5hcmd2WzpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5hcmd2WzBdID0gb3MucGF0aC5qb2luKCJmb28iLCAiYmFyIiwgImJhei5weSIpCisgICAgICAgICAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoIiVwcm9nIC4uLiIsIHZlcnNpb249IiVwcm9nIDEuMiIpCisgICAgICAgICAgICBleHBlY3RlZF91c2FnZSA9ICJVc2FnZTogYmF6LnB5IC4uLlxuIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRVc2FnZShwYXJzZXIsIGV4cGVjdGVkX3VzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRWZXJzaW9uKHBhcnNlciwgImJhei5weSAxLjIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRIZWxwKHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF91c2FnZSArICJcbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcHRpb25zOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIC0tdmVyc2lvbiAgIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdFxuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5hcmd2WzpdID0gc2F2ZV9hcmd2CisKKyAgICBkZWYgdGVzdF9jdXN0b21fcHJvZ25hbWUoc2VsZik6CisgICAgICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcihwcm9nPSJ0aGluZ3kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj0iJXByb2cgMC4xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlPSIlcHJvZyBhcmcgYXJnIikKKyAgICAgICAgcGFyc2VyLnJlbW92ZV9vcHRpb24oIi1oIikKKyAgICAgICAgcGFyc2VyLnJlbW92ZV9vcHRpb24oIi0tdmVyc2lvbiIpCisgICAgICAgIGV4cGVjdGVkX3VzYWdlID0gIlVzYWdlOiB0aGluZ3kgYXJnIGFyZ1xuIgorICAgICAgICBzZWxmLmFzc2VydFVzYWdlKHBhcnNlciwgZXhwZWN0ZWRfdXNhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VmVyc2lvbihwYXJzZXIsICJ0aGluZ3kgMC4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwKHBhcnNlciwgZXhwZWN0ZWRfdXNhZ2UgKyAiXG4iKQorCisKK2NsYXNzIFRlc3RFeHBhbmREZWZhdWx0cyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcihwcm9nPSJ0ZXN0IikKKyAgICAgICAgc2VsZi5oZWxwX3ByZWZpeCA9ICIiIlwKK1VzYWdlOiB0ZXN0IFtvcHRpb25zXQorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorIiIiCisgICAgICAgIHNlbGYuZmlsZV9oZWxwID0gInJlYWQgZnJvbSBGSUxFIFtkZWZhdWx0OiAlZGVmYXVsdF0iCisgICAgICAgIHNlbGYuZXhwZWN0ZWRfaGVscF9maWxlID0gc2VsZi5oZWxwX3ByZWZpeCArIFwKKyAgICAgICAgICAgICIgIC1mIEZJTEUsIC0tZmlsZT1GSUxFICByZWFkIGZyb20gRklMRSBbZGVmYXVsdDogZm9vLnR4dF1cbiIKKyAgICAgICAgc2VsZi5leHBlY3RlZF9oZWxwX25vbmUgPSBzZWxmLmhlbHBfcHJlZml4ICsgXAorICAgICAgICAgICAgIiAgLWYgRklMRSwgLS1maWxlPUZJTEUgIHJlYWQgZnJvbSBGSUxFIFtkZWZhdWx0OiBub25lXVxuIgorCisgICAgZGVmIHRlc3Rfb3B0aW9uX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZm9vLnR4dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1zZWxmLmZpbGVfaGVscCkKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwKHNlbGYucGFyc2VyLCBzZWxmLmV4cGVjdGVkX2hlbHBfZmlsZSkKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9kZWZhdWx0XzEoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1zZWxmLmZpbGVfaGVscCkKKyAgICAgICAgc2VsZi5wYXJzZXIuc2V0X2RlZmF1bHQoJ2ZpbGUnLCAiZm9vLnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChzZWxmLnBhcnNlciwgc2VsZi5leHBlY3RlZF9oZWxwX2ZpbGUpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfZGVmYXVsdF8yKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9c2VsZi5maWxlX2hlbHApCisgICAgICAgIHNlbGYucGFyc2VyLnNldF9kZWZhdWx0cyhmaWxlPSJmb28udHh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwKHNlbGYucGFyc2VyLCBzZWxmLmV4cGVjdGVkX2hlbHBfZmlsZSkKKworICAgIGRlZiB0ZXN0X25vX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1zZWxmLmZpbGVfaGVscCkKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwKHNlbGYucGFyc2VyLCBzZWxmLmV4cGVjdGVkX2hlbHBfbm9uZSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfbm9uZV8xKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPXNlbGYuZmlsZV9oZWxwKQorICAgICAgICBzZWxmLmFzc2VydEhlbHAoc2VsZi5wYXJzZXIsIHNlbGYuZXhwZWN0ZWRfaGVscF9ub25lKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9ub25lXzIoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1zZWxmLmZpbGVfaGVscCkKKyAgICAgICAgc2VsZi5wYXJzZXIuc2V0X2RlZmF1bHRzKGZpbGU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwKHNlbGYucGFyc2VyLCBzZWxmLmV4cGVjdGVkX2hlbHBfbm9uZSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICAgICAiLXAiLCAiLS1wcm9iIiwKKyAgICAgICAgICAgIGhlbHA9ImJsb3cgdXAgd2l0aCBwcm9iYWJpbGl0eSBQUk9CIFtkZWZhdWx0OiAlZGVmYXVsdF0iKQorICAgICAgICBzZWxmLnBhcnNlci5zZXRfZGVmYXVsdHMocHJvYj0wLjQzKQorICAgICAgICBleHBlY3RlZF9oZWxwID0gc2VsZi5oZWxwX3ByZWZpeCArIFwKKyAgICAgICAgICAgICIgIC1wIFBST0IsIC0tcHJvYj1QUk9CICBibG93IHVwIHdpdGggcHJvYmFiaWxpdHkgUFJPQiBbZGVmYXVsdDogMC40M11cbiIKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwKHNlbGYucGFyc2VyLCBleHBlY3RlZF9oZWxwKQorCisgICAgZGVmIHRlc3RfYWx0X2V4cGFuZChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJmb28udHh0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJyZWFkIGZyb20gRklMRSBbZGVmYXVsdDogKkRFRkFVTFQqXSIpCisgICAgICAgIHNlbGYucGFyc2VyLmZvcm1hdHRlci5kZWZhdWx0X3RhZyA9ICIqREVGQVVMVCoiCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChzZWxmLnBhcnNlciwgc2VsZi5leHBlY3RlZF9oZWxwX2ZpbGUpCisKKyAgICBkZWYgdGVzdF9ub19leHBhbmQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZm9vLnR4dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0icmVhZCBmcm9tICVkZWZhdWx0IGZpbGUiKQorICAgICAgICBzZWxmLnBhcnNlci5mb3JtYXR0ZXIuZGVmYXVsdF90YWcgPSBOb25lCisgICAgICAgIGV4cGVjdGVkX2hlbHAgPSBzZWxmLmhlbHBfcHJlZml4ICsgXAorICAgICAgICAgICAgIiAgLWYgRklMRSwgLS1maWxlPUZJTEUgIHJlYWQgZnJvbSAlZGVmYXVsdCBmaWxlXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChzZWxmLnBhcnNlciwgZXhwZWN0ZWRfaGVscCkKKworCisjIC0tIFRlc3QgcGFyc2VyLnBhcnNlX2FyZ3MoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdFN0YW5kYXJkKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbbWFrZV9vcHRpb24oIi1hIiwgdHlwZT0ic3RyaW5nIiksCisgICAgICAgICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1iIiwgIi0tYm9vIiwgdHlwZT0iaW50IiwgZGVzdD0nYm9vJyksCisgICAgICAgICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tZm9vIiwgYWN0aW9uPSJhcHBlbmQiKV0KKworICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uX2xpc3Q9b3B0aW9ucykKKworICAgIGRlZiB0ZXN0X3JlcXVpcmVkX3ZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi1hIl0sICItYSBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9pbnRlZ2VyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi1iIiwgIjV4Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24gLWI6IGludmFsaWQgaW50ZWdlciB2YWx1ZTogJzV4JyIpCisKKyAgICBkZWYgdGVzdF9ub19zdWNoX29wdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItLWJvbzEzIl0sICJubyBzdWNoIG9wdGlvbjogLS1ib28xMyIpCisKKyAgICBkZWYgdGVzdF9sb25nX2ludmFsaWRfaW50ZWdlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItLWJvbz14NSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIC0tYm9vOiBpbnZhbGlkIGludGVnZXIgdmFsdWU6ICd4NSciKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbXSwgeydhJzogTm9uZSwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwgW10pCisKKyAgICBkZWYgdGVzdF9zaG9ydG9wdF9lbXB0eV9sb25nb3B0X2FwcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiIiwgIi0tZm9vPWJsYWgiLCAiLS1mb289Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBbImJsYWgiLCAiIl19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9sb25nX29wdGlvbl9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZm9vIiwgImJhciIsICItLWZvbyIsICIiLCAiLS1mb289eCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9vJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vJzogWyJiYXIiLCAiIiwgIngiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X29wdGlvbl9hcmd1bWVudF9qb2luZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hYmMiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICJiYyIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X29wdGlvbl9hcmd1bWVudF9zcGxpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiMzQiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICIzNCIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X29wdGlvbl9hcmd1bWVudF9qb2luZWRfaW50ZWdlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWIzNCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogTm9uZSwgJ2Jvbyc6IDM0LCAnZm9vJzogTm9uZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X29wdGlvbl9hcmd1bWVudF9zcGxpdF9uZWdhdGl2ZV9pbnRlZ2VyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYiIsICItNSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogTm9uZSwgJ2Jvbyc6IC01LCAnZm9vJzogTm9uZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2xvbmdfb3B0aW9uX2FyZ3VtZW50X2pvaW5lZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLS1ib289MTMiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IE5vbmUsICdib28nOiAxMywgJ2Zvbyc6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9sb25nX29wdGlvbl9hcmd1bWVudF9zcGxpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLS1ib28iLCAiMTExIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiBOb25lLCAnYm9vJzogMTExLCAnZm9vJzogTm9uZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2xvbmdfb3B0aW9uX3Nob3J0X29wdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLS1mb289YmFyIiwgIi1heHl6Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAneHl6JywgJ2Jvbyc6IE5vbmUsICdmb28nOiBbImJhciJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3RfYWJicmV2X2xvbmdfb3B0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLWY9YmFyIiwgIi1heHl6Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAneHl6JywgJ2Jvbyc6IE5vbmUsICdmb28nOiBbImJhciJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdHMoc2VsZik6CisgICAgICAgIChvcHRpb25zLCBhcmdzKSA9IHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICAgICAgIGRlZmF1bHRzID0gc2VsZi5wYXJzZXIuZ2V0X2RlZmF1bHRfdmFsdWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzKGRlZmF1bHRzKSwgdmFycyhvcHRpb25zKSkKKworICAgIGRlZiB0ZXN0X2FtYmlndW91c19vcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi0tZm96IiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic3RyaW5nIiwgZGVzdD0iZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItLWY9YmFyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbWJpZ3VvdXMgb3B0aW9uOiAtLWYgKC0tZm9vLCAtLWZvej8pIikKKworCisgICAgZGVmIHRlc3Rfc2hvcnRfYW5kX2xvbmdfb3B0aW9uX3NwbGl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICJ4eXoiLCAiLS1mb28iLCAiYmFyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAneHl6JywgJ2Jvbyc6IE5vbmUsICdmb28nOiBbImJhciJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKSwKKworICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9zcGxpdF9sb25nX29wdGlvbl9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZm9vPWJhciIsICItYiIsICIxMjMiLCAiLS1mb28iLCAiYmF6Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiBOb25lLCAnYm9vJzogMTIzLCAnZm9vJzogWyJiYXIiLCAiYmF6Il19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfb25lX3Bvc2l0aW9uYWxfYXJnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICJmb28iLCAiYmFyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiZm9vIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiYmFyIl0pLAorCisgICAgZGVmIHRlc3Rfc2hvcnRfb3B0aW9uX2NvbnN1bWVzX3NlcGFyYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiZm9vIiwgImJhciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogIi0tIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdKSwKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiLS1mb28iLCAiYmFyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiLS0iLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IFsiYmFyIl19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorCisgICAgZGVmIHRlc3Rfc2hvcnRfb3B0aW9uX2pvaW5lZF9hbmRfc2VwYXJhdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYWIiLCAiLS0iLCAiLS1mb28iLCAiYmFyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiYiIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIi0tZm9vIiwgImJhciJdKSwKKworICAgIGRlZiB0ZXN0X2h5cGhlbl9iZWNvbWVzX3Bvc2l0aW9uYWxfYXJnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYWIiLCAiLSIsICItLWZvbyIsICJiYXIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICJiIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBbImJhciJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiLSJdKQorCisgICAgZGVmIHRlc3Rfbm9fYXBwZW5kX3ZlcnN1c19hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1iMyIsICItYiIsICI1IiwgIi0tZm9vPWJhciIsICItLWZvbyIsICJiYXoiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IE5vbmUsICdib28nOiA1LCAnZm9vJzogWyJiYXIiLCAiYmF6Il19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25fY29uc3VtZXNfb3B0aW9ubGlrZV9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgIi1iMyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogIi1iMyIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmVkX3NpbmdsZV9pbnZhbGlkX29wdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXQiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi10ZXN0Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBzdWNoIG9wdGlvbjogLWUiKQorCisgICAgZGVmIHRlc3RfYWRkX29wdGlvbl9hY2NlcHRzX3VuaWNvZGUoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24odSItdSIsIHUiLS11bmljb2RlIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IE5vbmUsICdib28nOiBOb25lLCAnZm9vJzogTm9uZSwgJ3VuaWNvZGUnOiBUcnVlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisKK2NsYXNzIFRlc3RCb29sKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbbWFrZV9vcHRpb24oIi12IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS12ZXJib3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InZlcmJvc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycpLAorICAgICAgICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItcSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcXVpZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InZlcmJvc2UiKV0KKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIob3B0aW9uX2xpc3QgPSBvcHRpb25zKQorCisgICAgZGVmIHRlc3RfYm9vbF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3ZlcmJvc2UnOiAnJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2Jvb2xfZmFsc2Uoc2VsZik6CisgICAgICAgIChvcHRpb25zLCBhcmdzKSA9IHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1xIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3ZlcmJvc2UnOiAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0aW9ucy52ZXJib3NlIGlzIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYm9vbF90cnVlKHNlbGYpOgorICAgICAgICAob3B0aW9ucywgYXJncykgPSBzZWxmLmFzc2VydFBhcnNlT0soWyItdiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd2ZXJib3NlJzogMX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbnMudmVyYm9zZSBpcyBUcnVlKQorCisgICAgZGVmIHRlc3RfYm9vbF9mbGlja2VyX29uX2FuZF9vZmYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1xdnEiLCAiLXEiLCAiLXYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndmVyYm9zZSc6IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKK2NsYXNzIFRlc3RDaG9pY2UoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImNob2ljZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iY2hvaWNlIiwgY2hvaWNlcz1bIm9uZSIsICJ0d28iLCAidGhyZWUiXSkKKworICAgIGRlZiB0ZXN0X3ZhbGlkX2Nob2ljZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWMiLCAib25lIiwgInh5eiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydjaG9pY2UnOiAnb25lJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbInh5eiJdKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9jaG9pY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLWMiLCAiZm91ciIsICJhYmMiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiAtYzogaW52YWxpZCBjaG9pY2U6ICdmb3VyJyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoY2hvb3NlIGZyb20gJ29uZScsICd0d28nLCAndGhyZWUnKSIpCisKKyAgICBkZWYgdGVzdF9hZGRfY2hvaWNlX29wdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLWQiLCAiLS1kZWZhdWx0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsiZm91ciIsICJmaXZlIiwgInNpeCJdKQorICAgICAgICBvcHQgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LnR5cGUsICJjaG9pY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdC5hY3Rpb24sICJzdG9yZSIpCisKK2NsYXNzIFRlc3RDb3VudChCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSkKKyAgICAgICAgc2VsZi52X29wdCA9IG1ha2Vfb3B0aW9uKCItdiIsIGFjdGlvbj0iY291bnQiLCBkZXN0PSJ2ZXJib3NlIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbihzZWxmLnZfb3B0KQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItLXZlcmJvc2UiLCB0eXBlPSJpbnQiLCBkZXN0PSJ2ZXJib3NlIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXEiLCAiLS1xdWlldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9jb25zdCIsIGRlc3Q9InZlcmJvc2UiLCBjb25zdD0wKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbXSwgeyd2ZXJib3NlJzogTm9uZX0sIFtdKQorCisgICAgZGVmIHRlc3RfY291bnRfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItdiJdLCB7J3ZlcmJvc2UnOiAxfSwgW10pCisKKyAgICBkZWYgdGVzdF9jb3VudF90aHJlZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXZ2diJdLCB7J3ZlcmJvc2UnOiAzfSwgW10pCisKKyAgICBkZWYgdGVzdF9jb3VudF90aHJlZV9hcGFydChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXYiLCAiLXYiLCAiLXYiXSwgeyd2ZXJib3NlJzogM30sIFtdKQorCisgICAgZGVmIHRlc3RfY291bnRfb3ZlcnJpZGVfYW1vdW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItdnZ2IiwgIi0tdmVyYm9zZT0yIl0sIHsndmVyYm9zZSc6IDJ9LCBbXSkKKworICAgIGRlZiB0ZXN0X2NvdW50X292ZXJyaWRlX3F1aWV0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItdnZ2IiwgIi0tdmVyYm9zZT0yIiwgIi1xIl0sIHsndmVyYm9zZSc6IDB9LCBbXSkKKworICAgIGRlZiB0ZXN0X2NvdW50X292ZXJyaWRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi12dnYiLCAiLS12ZXJib3NlPTIiLCAiLXEiLCAiLXYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndmVyYm9zZSc6IDF9LCBbXSkKKworICAgIGRlZiB0ZXN0X2NvdW50X2ludGVyc3BlcnNlZF9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLXF1aWV0IiwgIjMiLCAiLXYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndmVyYm9zZSc6IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyIzIl0pCisKKyAgICBkZWYgdGVzdF9jb3VudF9ub19pbnRlcnNwZXJzZWRfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tcXVpZXQiLCAiMyIsICItdiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd2ZXJib3NlJzogMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIjMiLCAiLXYiXSkKKworICAgIGRlZiB0ZXN0X2NvdW50X25vX3N1Y2hfb3B0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi1xMyIsICItdiJdLCAibm8gc3VjaCBvcHRpb246IC0zIikKKworICAgIGRlZiB0ZXN0X2NvdW50X29wdGlvbl9ub192YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItLXF1aWV0PTMiLCAiLXYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcXVpZXQgb3B0aW9uIGRvZXMgbm90IHRha2UgYSB2YWx1ZSIpCisKKyAgICBkZWYgdGVzdF9jb3VudF93aXRoX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLnNldF9kZWZhdWx0KCd2ZXJib3NlJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFtdLCB7J3ZlcmJvc2UnOjB9LCBbXSkKKworICAgIGRlZiB0ZXN0X2NvdW50X292ZXJyaWRpbmdfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuc2V0X2RlZmF1bHQoJ3ZlcmJvc2UnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItdnZ2IiwgIi0tdmVyYm9zZT0yIiwgIi1xIiwgIi12Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3ZlcmJvc2UnOiAxfSwgW10pCisKK2NsYXNzIFRlc3RNdWx0aXBsZUFyZ3MoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tcG9pbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBuYXJncz0zLCB0eXBlPSJmbG9hdCIsIGRlc3Q9InBvaW50IikKKworICAgIGRlZiB0ZXN0X25hcmdzX3dpdGhfcG9zaXRpb25hbF9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyJmb28iLCAiLXAiLCAiMSIsICIyLjUiLCAiLTQuMyIsICJ4eXoiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9pbnQnOiAoMS4wLCAyLjUsIC00LjMpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgInh5eiJdKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfbG9uZ19vcHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tcG9pbnQiLCAiLTEiLCAiMi41IiwgIi0wIiwgInh5eiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydwb2ludCc6ICgtMS4wLCAyLjUsIC0wLjApfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsieHl6Il0pCisKKyAgICBkZWYgdGVzdF9uYXJnc19pbnZhbGlkX2Zsb2F0X3ZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi1wIiwgIjEuMCIsICIyeCIsICIzLjUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiAtcDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBmbG9hdGluZy1wb2ludCB2YWx1ZTogJzJ4JyIpCisKKyAgICBkZWYgdGVzdF9uYXJnc19yZXF1aXJlZF92YWx1ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLS1wb2ludCIsICIxLjAiLCAiMy41Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLXBvaW50IG9wdGlvbiByZXF1aXJlcyAzIGFyZ3VtZW50cyIpCisKK2NsYXNzIFRlc3RNdWx0aXBsZUFyZ3NBcHBlbmQoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tcG9pbnQiLCBhY3Rpb249InN0b3JlIiwgbmFyZ3M9MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJmbG9hdCIsIGRlc3Q9InBvaW50IikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1mb28iLCBhY3Rpb249ImFwcGVuZCIsIG5hcmdzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iaW50IiwgZGVzdD0iZm9vIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXoiLCAiLS16ZXJvIiwgYWN0aW9uPSJhcHBlbmRfY29uc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImZvbyIsIGNvbnN0PSgwLCAwKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX2FwcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWYiLCAiNCIsICItMyIsICJibGFoIiwgIi0tZm9vIiwgIjEiLCAiNjY2Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvaW50JzogTm9uZSwgJ2Zvbyc6IFsoNCwgLTMpLCAoMSwgNjY2KV19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJibGFoIl0pCisKKyAgICBkZWYgdGVzdF9uYXJnc19hcHBlbmRfcmVxdWlyZWRfdmFsdWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi1mNCwzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItZiBvcHRpb24gcmVxdWlyZXMgMiBhcmd1bWVudHMiKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfYXBwZW5kX3NpbXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLS1mb289MyIsICI0Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvaW50JzogTm9uZSwgJ2Zvbyc6WygzLCA0KV19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9uYXJnc19hcHBlbmRfY29uc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0temVybyIsICItLWZvbyIsICIzIiwgIjQiLCAiLXoiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9pbnQnOiBOb25lLCAnZm9vJzpbKDAsIDApLCAoMywgNCksICgwLCAwKV19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKK2NsYXNzIFRlc3RWZXJzaW9uKEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj0iJXByb2cgMC4xIikKKyAgICAgICAgc2F2ZV9hcmd2ID0gc3lzLmFyZ3ZbOl0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmFyZ3ZbMF0gPSBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCAiZm9vIiwgImJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE91dHB1dChbIi0tdmVyc2lvbiJdLCAiYmFyIDAuMVxuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5hcmd2WzpdID0gc2F2ZV9hcmd2CisKKyAgICBkZWYgdGVzdF9ub192ZXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSkKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItLXZlcnNpb24iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHN1Y2ggb3B0aW9uOiAtLXZlcnNpb24iKQorCisjIC0tIFRlc3QgY29uZmxpY3RpbmcgZGVmYXVsdCB2YWx1ZXMgYW5kIHBhcnNlci5wYXJzZV9hcmdzKCkgLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdENvbmZsaWN0aW5nRGVmYXVsdHMoQmFzZVRlc3QpOgorICAgICIiIkNvbmZsaWN0aW5nIGRlZmF1bHQgdmFsdWVzOiB0aGUgbGFzdCBvbmUgc2hvdWxkIHdpbi4iIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PVsKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItdiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InZlcmJvc2UiLCBkZWZhdWx0PTEpXSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1xIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InZlcmJvc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFtdLCB7J3ZlcmJvc2UnOiAwfSwgW10pCisKKyAgICBkZWYgdGVzdF9jb25mbGljdF9kZWZhdWx0X25vbmUoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1xIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InZlcmJvc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFtdLCB7J3ZlcmJvc2UnOiBOb25lfSwgW10pCisKK2NsYXNzIFRlc3RPcHRpb25Hcm91cChCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSkKKworICAgIGRlZiB0ZXN0X29wdGlvbl9ncm91cF9jcmVhdGVfaW5zdGFuY2Uoc2VsZik6CisgICAgICAgIGdyb3VwID0gT3B0aW9uR3JvdXAoc2VsZi5wYXJzZXIsICJTcGFtIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbl9ncm91cChncm91cCkKKyAgICAgICAgZ3JvdXAuYWRkX29wdGlvbigiLS1zcGFtIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJzcGFtIHNwYW0gc3BhbSBzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLS1zcGFtIl0sIHsnc3BhbSc6IDF9LCBbXSkKKworICAgIGRlZiB0ZXN0X2FkZF9ncm91cF9ub19ncm91cChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3Ioc2VsZi5wYXJzZXIuYWRkX29wdGlvbl9ncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbiBPcHRpb25Hcm91cCBpbnN0YW5jZTogTm9uZSIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9hZGRfZ3JvdXBfaW52YWxpZF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKHNlbGYucGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGFyZ3VtZW50cyIsIE5vbmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9hZGRfZ3JvdXBfd3JvbmdfcGFyc2VyKHNlbGYpOgorICAgICAgICBncm91cCA9IE9wdGlvbkdyb3VwKHNlbGYucGFyc2VyLCAiU3BhbSIpCisgICAgICAgIGdyb3VwLnBhcnNlciA9IE9wdGlvblBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYucGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAsIChncm91cCwpLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUVycm9yLCAiaW52YWxpZCBPcHRpb25Hcm91cCAod3JvbmcgcGFyc2VyKSIpCisKKyAgICBkZWYgdGVzdF9ncm91cF9tYW5pcHVsYXRlKHNlbGYpOgorICAgICAgICBncm91cCA9IHNlbGYucGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoIkdyb3VwIDIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249IlNvbWUgbW9yZSBvcHRpb25zIikKKyAgICAgICAgZ3JvdXAuc2V0X3RpdGxlKCJCYWNvbiIpCisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oIi0tYmFjb24iLCB0eXBlPSJpbnQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbl9ncm91cCgiLS1iYWNvbiIpLCBncm91cCkKKworIyAtLSBUZXN0IGV4dGVuZGluZyBhbmQgcGFyc2VyLnBhcnNlX2FyZ3MoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RFeHRlbmRBZGRUeXBlcyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uX2NsYXNzPXNlbGYuTXlPcHRpb24pCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgTm9uZSwgdHlwZT0ic3RyaW5nIiwgZGVzdD0iYSIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmlsZSIsIHR5cGU9ImZpbGUiLCBkZXN0PSJmaWxlIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKToKKyAgICAgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTik6CisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGNsYXNzIE15T3B0aW9uIChPcHRpb24pOgorICAgICAgICBkZWYgY2hlY2tfZmlsZShvcHRpb24sIG9wdCwgdmFsdWUpOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHZhbHVlKToKKyAgICAgICAgICAgICAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKCIlczogZmlsZSBkb2VzIG5vdCBleGlzdCIgJSB2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgbm90IG9zLnBhdGguaXNmaWxlKHZhbHVlKToKKyAgICAgICAgICAgICAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKCIlczogbm90IGEgcmVndWxhciBmaWxlIiAlIHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAgICAgVFlQRVMgPSBPcHRpb24uVFlQRVMgKyAoImZpbGUiLCkKKyAgICAgICAgVFlQRV9DSEVDS0VSID0gY29weS5jb3B5KE9wdGlvbi5UWVBFX0NIRUNLRVIpCisgICAgICAgIFRZUEVfQ0hFQ0tFUlsiZmlsZSJdID0gY2hlY2tfZmlsZQorCisgICAgZGVmIHRlc3RfZmlsZXR5cGVfb2soc2VsZik6CisgICAgICAgIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInciKS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZmlsZSIsIHRlc3Rfc3VwcG9ydC5URVNURk4sICItYWZvbyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydmaWxlJzogdGVzdF9zdXBwb3J0LlRFU1RGTiwgJ2EnOiAnZm9vJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2ZpbGV0eXBlX25vZXhpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLS1maWxlIiwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgIi1hZm9vIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogZmlsZSBkb2VzIG5vdCBleGlzdCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZmlsZXR5cGVfbm90ZmlsZShzZWxmKToKKyAgICAgICAgb3MubWtkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItLWZpbGUiLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiLWFmb28iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBub3QgYSByZWd1bGFyIGZpbGUiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTikKKworCitjbGFzcyBUZXN0RXh0ZW5kQWRkQWN0aW9ucyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gW3NlbGYuTXlPcHRpb24oIi1hIiwgIi0tYXBwbGUiLCBhY3Rpb249ImV4dGVuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJzdHJpbmciLCBkZXN0PSJhcHBsZSIpXQorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25zKQorCisgICAgY2xhc3MgTXlPcHRpb24gKE9wdGlvbik6CisgICAgICAgIEFDVElPTlMgPSBPcHRpb24uQUNUSU9OUyArICgiZXh0ZW5kIiwpCisgICAgICAgIFNUT1JFX0FDVElPTlMgPSBPcHRpb24uU1RPUkVfQUNUSU9OUyArICgiZXh0ZW5kIiwpCisgICAgICAgIFRZUEVEX0FDVElPTlMgPSBPcHRpb24uVFlQRURfQUNUSU9OUyArICgiZXh0ZW5kIiwpCisKKyAgICAgICAgZGVmIHRha2VfYWN0aW9uKHNlbGYsIGFjdGlvbiwgZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpOgorICAgICAgICAgICAgaWYgYWN0aW9uID09ICJleHRlbmQiOgorICAgICAgICAgICAgICAgIGx2YWx1ZSA9IHZhbHVlLnNwbGl0KCIsIikKKyAgICAgICAgICAgICAgICB2YWx1ZXMuZW5zdXJlX3ZhbHVlKGRlc3QsIFtdKS5leHRlbmQobHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBPcHRpb24udGFrZV9hY3Rpb24oc2VsZiwgYWN0aW9uLCBkZXN0LCBvcHQsIHBhcnNlciwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcykKKworICAgIGRlZiB0ZXN0X2V4dGVuZF9hZGRfYWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYWZvbyxiYXIiLCAiLS1hcHBsZT1ibGFoIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2FwcGxlJzogWyJmb28iLCAiYmFyIiwgImJsYWgiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2V4dGVuZF9hZGRfYWN0aW9uX25vcm1hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiZm9vIiwgIi1hYmFyIiwgIi0tYXBwbGU9eCx5Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2FwcGxlJzogWyJmb28iLCAiYmFyIiwgIngiLCAieSJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisjIC0tIFRlc3QgY2FsbGJhY2tzIGFuZCBwYXJzZXIucGFyc2VfYXJncygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdENhbGxiYWNrKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbbWFrZV9vcHRpb24oIi14IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPXNlbGYucHJvY2Vzc19vcHQpLAorICAgICAgICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJjYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s9c2VsZi5wcm9jZXNzX29wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImZpbGVuYW1lIildCisgICAgICAgIHNlbGYucGFyc2VyID0gT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbnMpCisKKyAgICBkZWYgcHJvY2Vzc19vcHQoc2VsZiwgb3B0aW9uLCBvcHQsIHZhbHVlLCBwYXJzZXJfKToKKyAgICAgICAgaWYgb3B0ID09ICIteCI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbi5fc2hvcnRfb3B0cywgWyIteCJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24uX2xvbmdfb3B0cywgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGFyc2VyXyBpcyBzZWxmLnBhcnNlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZSBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzKHBhcnNlcl8udmFsdWVzKSwgeydmaWxlbmFtZSc6IE5vbmV9KQorCisgICAgICAgICAgICBwYXJzZXJfLnZhbHVlcy54ID0gNDIKKyAgICAgICAgZWxpZiBvcHQgPT0gIi0tZmlsZSI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbi5fc2hvcnRfb3B0cywgWyItZiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24uX2xvbmdfb3B0cywgWyItLWZpbGUiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXJzZXJfIGlzIHNlbGYucGFyc2VyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMocGFyc2VyXy52YWx1ZXMpLCB7J2ZpbGVuYW1lJzogTm9uZSwgJ3gnOiA0Mn0pCisKKyAgICAgICAgICAgIHNldGF0dHIocGFyc2VyXy52YWx1ZXMsIG9wdGlvbi5kZXN0LCB2YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVW5rbm93biBvcHRpb24gJXIgaW4gcHJvY2Vzc19vcHQuIiAlIG9wdCkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyIteCIsICItLWZpbGU9Zm9vIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2ZpbGVuYW1lJzogImZvbyIsICd4JzogNDJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19oZWxwKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCB3YXMgcHJvbXB0ZWQgYnkgU0YgYnVnICM5NjA1MTUgLS0gdGhlIHBvaW50IGlzCisgICAgICAgICMgbm90IHRvIGluc3BlY3QgdGhlIGhlbHAgdGV4dCwganVzdCB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICAjIGZvcm1hdF9oZWxwKCkgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPVNVUFBSRVNTX1VTQUdFKQorICAgICAgICBwYXJzZXIucmVtb3ZlX29wdGlvbigiLWgiKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10ZXN0IiwgYWN0aW9uPSJjYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPWxhbWJkYTogTm9uZSwgdHlwZT0ic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZm9vIikKKworICAgICAgICBleHBlY3RlZF9oZWxwID0gKCJPcHRpb25zOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgIC10IFRFU1QsIC0tdGVzdD1URVNUICBmb29cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChwYXJzZXIsIGV4cGVjdGVkX2hlbHApCisKKworY2xhc3MgVGVzdENhbGxiYWNrRXh0cmFBcmdzKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbbWFrZV9vcHRpb24oIi1wIiwgIi0tcG9pbnQiLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1zZWxmLnByb2Nlc3NfdHVwbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tfYXJncz0oMywgaW50KSwgdHlwZT0ic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJwb2ludHMiLCBkZWZhdWx0PVtdKV0KKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9ucykKKworICAgIGRlZiBwcm9jZXNzX3R1cGxlKHNlbGYsIG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyXywgbGVuLCB0eXBlKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlIGlzIGludCkKKworICAgICAgICBpZiBvcHQgPT0gIi1wIjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICIxLDIsMyIpCisgICAgICAgIGVsaWYgb3B0ID09ICItLXBvaW50IjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICI0LDUsNiIpCisKKyAgICAgICAgdmFsdWUgPSB0dXBsZShtYXAodHlwZSwgdmFsdWUuc3BsaXQoIiwiKSkpCisgICAgICAgIGdldGF0dHIocGFyc2VyXy52YWx1ZXMsIG9wdGlvbi5kZXN0KS5hcHBlbmQodmFsdWUpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19leHRyYV9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItcDEsMiwzIiwgIi0tcG9pbnQiLCAiNCw1LDYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9pbnRzJzogWygxLDIsMyksICg0LDUsNildfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCitjbGFzcyBUZXN0Q2FsbGJhY2tNZWRkbGVBcmdzKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbbWFrZV9vcHRpb24oc3RyKHgpLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1zZWxmLnByb2Nlc3NfbiwgZGVzdD0ndGhpbmdzJykKKyAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZSgtMSwgLTYsIC0xKV0KKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9ucykKKworICAgICMgQ2FsbGJhY2sgdGhhdCBtZWRkbGVzIGluIHJhcmdzLCBsYXJncworICAgIGRlZiBwcm9jZXNzX24oc2VsZiwgb3B0aW9uLCBvcHQsIHZhbHVlLCBwYXJzZXJfKToKKyAgICAgICAgIyBvcHRpb24gaXMgLTMsIC01LCBldGMuCisgICAgICAgIG5hcmdzID0gaW50KG9wdFsxOl0pCisgICAgICAgIHJhcmdzID0gcGFyc2VyXy5yYXJncworICAgICAgICBpZiBsZW4ocmFyZ3MpIDwgbmFyZ3M6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkICVkIGFyZ3VtZW50cyBmb3IgJXMgb3B0aW9uLiIgJSAobmFyZ3MsIG9wdCkpCisgICAgICAgIGRlc3QgPSBwYXJzZXJfLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIFtdKQorICAgICAgICBkZXN0LmFwcGVuZCh0dXBsZShyYXJnc1swOm5hcmdzXSkpCisgICAgICAgIHBhcnNlcl8ubGFyZ3MuYXBwZW5kKG5hcmdzKQorICAgICAgICBkZWwgcmFyZ3NbMDpuYXJnc10KKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX21lZGRsZV9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItMSIsICJmb28iLCAiLTMiLCAiYmFyIiwgImJheiIsICJxdXgiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndGhpbmdzJzogWygiZm9vIiwpLCAoImJhciIsICJiYXoiLCAicXV4IildfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCAzXSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX21lZGRsZV9hcmdzX3NlcGFyYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLTIiLCAiZm9vIiwgIi0tIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3RoaW5ncyc6IFsoJ2ZvbycsICctLScpXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0pCisKK2NsYXNzIFRlc3RDYWxsYmFja01hbnlBcmdzKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbbWFrZV9vcHRpb24oIi1hIiwgIi0tYXBwbGUiLCBhY3Rpb249ImNhbGxiYWNrIiwgbmFyZ3M9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1zZWxmLnByb2Nlc3NfbWFueSwgdHlwZT0ic3RyaW5nIiksCisgICAgICAgICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1iIiwgIi0tYm9iIiwgYWN0aW9uPSJjYWxsYmFjayIsIG5hcmdzPTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s9c2VsZi5wcm9jZXNzX21hbnksIHR5cGU9ImludCIpXQorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25zKQorCisgICAgZGVmIHByb2Nlc3NfbWFueShzZWxmLCBvcHRpb24sIG9wdCwgdmFsdWUsIHBhcnNlcl8pOgorICAgICAgICBpZiBvcHQgPT0gIi1hIjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICgiZm9vIiwgImJhciIpKQorICAgICAgICBlbGlmIG9wdCA9PSAiLS1hcHBsZSI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAoImRpbmciLCAiZG9uZyIpKQorICAgICAgICBlbGlmIG9wdCA9PSAiLWIiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgKDEsIDIsIDMpKQorICAgICAgICBlbGlmIG9wdCA9PSAiLS1ib2IiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgKC02NjYsIDQyLCAwKSkKKworICAgIGRlZiB0ZXN0X21hbnlfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiZm9vIiwgImJhciIsICItLWFwcGxlIiwgImRpbmciLCAiZG9uZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1iIiwgIjEiLCAiMiIsICIzIiwgIi0tYm9iIiwgIi02NjYiLCAiNDIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7ImFwcGxlIjogTm9uZSwgImJvYiI6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKK2NsYXNzIFRlc3RDYWxsYmFja0NoZWNrQWJicmV2KEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLS1mb28tYmFyIiwgYWN0aW9uPSJjYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s9c2VsZi5jaGVja19hYmJyZXYpCisKKyAgICBkZWYgY2hlY2tfYWJicmV2KHNlbGYsIG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQsICItLWZvby1iYXIiKQorCisgICAgZGVmIHRlc3RfYWJicmV2X2NhbGxiYWNrX2V4cGFuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLS1mb28iXSwge30sIFtdKQorCitjbGFzcyBUZXN0Q2FsbGJhY2tWYXJBcmdzKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbbWFrZV9vcHRpb24oIi1hIiwgdHlwZT0iaW50IiwgbmFyZ3M9MiwgZGVzdD0iYSIpLAorICAgICAgICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItYiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImIiKSwKKyAgICAgICAgICAgICAgICAgICBtYWtlX29wdGlvbigiLWMiLCAiLS1jYWxsYmFjayIsIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPXNlbGYudmFyaWFibGVfYXJncywgZGVzdD0iYyIpXQorICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uX2xpc3Q9b3B0aW9ucykKKworICAgIGRlZiB2YXJpYWJsZV9hcmdzKHNlbGYsIG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlIGlzIE5vbmUpCisgICAgICAgIHZhbHVlID0gW10KKyAgICAgICAgcmFyZ3MgPSBwYXJzZXIucmFyZ3MKKyAgICAgICAgd2hpbGUgcmFyZ3M6CisgICAgICAgICAgICBhcmcgPSByYXJnc1swXQorICAgICAgICAgICAgaWYgKChhcmdbOjJdID09ICItLSIgYW5kIGxlbihhcmcpID4gMikgb3IKKyAgICAgICAgICAgICAgICAoYXJnWzoxXSA9PSAiLSIgYW5kIGxlbihhcmcpID4gMSBhbmQgYXJnWzFdICE9ICItIikpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVuZChhcmcpCisgICAgICAgICAgICAgICAgZGVsIHJhcmdzWzBdCisgICAgICAgIHNldGF0dHIocGFyc2VyLnZhbHVlcywgb3B0aW9uLmRlc3QsIHZhbHVlKQorCisgICAgZGVmIHRlc3RfdmFyaWFibGVfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEzIiwgIi01IiwgIi0tY2FsbGJhY2siLCAiZm9vIiwgImJhciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogKDMsIC01KSwgJ2InOiBOb25lLCAnYyc6IFsiZm9vIiwgImJhciJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3RfY29uc3VtZV9zZXBhcmF0b3Jfc3RvcF9hdF9vcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1jIiwgIjM3IiwgIi0tIiwgInh4eCIsICItYiIsICJoZWxsbyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYic6IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2MnOiBbIjM3IiwgIi0tIiwgInh4eCJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaGVsbG8iXSkKKworICAgIGRlZiB0ZXN0X3Bvc2l0aW9uYWxfYXJnX2FuZF92YXJpYWJsZV9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyJoZWxsbyIsICItYyIsICJmb28iLCAiLSIsICJiYXIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2InOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjJzpbImZvbyIsICItIiwgImJhciJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaGVsbG8iXSkKKworICAgIGRlZiB0ZXN0X3N0b3BfYXRfb3B0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYyIsICJmb28iLCAiLWIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IE5vbmUsICdiJzogVHJ1ZSwgJ2MnOiBbImZvbyJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3Rfc3RvcF9hdF9pbnZhbGlkX29wdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItYyIsICIzIiwgIi01IiwgIi1hIl0sICJubyBzdWNoIG9wdGlvbjogLTUiKQorCisKKyMgLS0gVGVzdCBjb25mbGljdCBoYW5kbGluZyBhbmQgcGFyc2VyLnBhcnNlX2FyZ3MoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBDb25mbGljdEJhc2UoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IFttYWtlX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSJjb3VudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0idmVyYm9zZSIsIGhlbHA9ImluY3JlbWVudCB2ZXJib3NpdHkiKV0KKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9saXN0PW9wdGlvbnMpCisKKyAgICBkZWYgc2hvd192ZXJzaW9uKHNlbGYsIG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgcGFyc2VyLnZhbHVlcy5zaG93X3ZlcnNpb24gPSAxCisKK2NsYXNzIFRlc3RDb25mbGljdChDb25mbGljdEJhc2UpOgorICAgICIiIlVzZSB0aGUgZGVmYXVsdCBjb25mbGljdCByZXNvbHV0aW9uIGZvciBPcHRpayAxLjI6IGVycm9yLiIiIgorICAgIGRlZiBhc3NlcnRUcnVlY29uZmxpY3RfZXJyb3Ioc2VsZiwgZnVuYyk6CisgICAgICAgIGVyciA9IHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnVuYywgKCItdiIsICItLXZlcnNpb24iKSwgeydhY3Rpb24nIDogImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FsbGJhY2snIDogc2VsZi5zaG93X3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlbHAnIDogInNob3cgdmVyc2lvbiJ9LAorICAgICAgICAgICAgT3B0aW9uQ29uZmxpY3RFcnJvciwKKyAgICAgICAgICAgICJvcHRpb24gLXYvLS12ZXJzaW9uOiBjb25mbGljdGluZyBvcHRpb24gc3RyaW5nKHMpOiAtdiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIubXNnLCAiY29uZmxpY3Rpbmcgb3B0aW9uIHN0cmluZyhzKTogLXYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5vcHRpb25faWQsICItdi8tLXZlcnNpb24iKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZWNvbmZsaWN0X2Vycm9yKHNlbGYucGFyc2VyLmFkZF9vcHRpb24pCisKKyAgICBkZWYgdGVzdF9jb25mbGljdF9lcnJvcl9ncm91cChzZWxmKToKKyAgICAgICAgZ3JvdXAgPSBPcHRpb25Hcm91cChzZWxmLnBhcnNlciwgIkdyb3VwIDEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWVjb25mbGljdF9lcnJvcihncm91cC5hZGRfb3B0aW9uKQorCisgICAgZGVmIHRlc3Rfbm9fc3VjaF9jb25mbGljdF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnNldF9jb25mbGljdF9oYW5kbGVyLCAoJ2ZvbycsKSwgTm9uZSwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJpbnZhbGlkIGNvbmZsaWN0X3Jlc29sdXRpb24gdmFsdWUgJ2ZvbyciKQorCisKK2NsYXNzIFRlc3RDb25mbGljdFJlc29sdmUoQ29uZmxpY3RCYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIENvbmZsaWN0QmFzZS5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLnBhcnNlci5zZXRfY29uZmxpY3RfaGFuZGxlcigicmVzb2x2ZSIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmVyc2lvbiIsIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPXNlbGYuc2hvd192ZXJzaW9uLCBoZWxwPSJzaG93IHZlcnNpb24iKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RfcmVzb2x2ZShzZWxmKToKKyAgICAgICAgdl9vcHQgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItdiIpCisgICAgICAgIHZlcmJvc2Vfb3B0ID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS12ZXJib3NlIikKKyAgICAgICAgdmVyc2lvbl9vcHQgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLXZlcnNpb24iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2X29wdCBpcyB2ZXJzaW9uX29wdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZfb3B0IGlzIG5vdCB2ZXJib3NlX29wdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2X29wdC5fbG9uZ19vcHRzLCBbIi0tdmVyc2lvbiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcnNpb25fb3B0Ll9zaG9ydF9vcHRzLCBbIi12Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVyc2lvbl9vcHQuX2xvbmdfb3B0cywgWyItLXZlcnNpb24iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJib3NlX29wdC5fc2hvcnRfb3B0cywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVyYm9zZV9vcHQuX2xvbmdfb3B0cywgWyItLXZlcmJvc2UiXSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X3Jlc29sdmVfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPdXRwdXQoWyItaCJdLCAiIiJcCitPcHRpb25zOgorICAtLXZlcmJvc2UgICAgICBpbmNyZW1lbnQgdmVyYm9zaXR5CisgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgc2hvdyB2ZXJzaW9uCisiIiIpCisKKyAgICBkZWYgdGVzdF9jb25mbGljdF9yZXNvbHZlX3Nob3J0X29wdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndmVyYm9zZSc6IE5vbmUsICdzaG93X3ZlcnNpb24nOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RfcmVzb2x2ZV9sb25nX29wdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLS12ZXJib3NlIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3ZlcmJvc2UnOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RfcmVzb2x2ZV9sb25nX29wdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tdmVyYm9zZSIsICItLXZlcnNpb24iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndmVyYm9zZSc6IDEsICdzaG93X3ZlcnNpb24nOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCitjbGFzcyBUZXN0Q29uZmxpY3RPdmVycmlkZShCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSkKKyAgICAgICAgc2VsZi5wYXJzZXIuc2V0X2NvbmZsaWN0X2hhbmRsZXIoInJlc29sdmUiKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLWRyeS1ydW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImRyeV9ydW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImRvbid0IGRvIGFueXRoaW5nIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLS1kcnktcnVuIiwgIi1uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX2NvbnN0IiwgY29uc3Q9NDIsIGRlc3Q9ImRyeV9ydW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImRyeSBydW4gbW9kZSIpCisKKyAgICBkZWYgdGVzdF9jb25mbGljdF9vdmVycmlkZV9vcHRzKHNlbGYpOgorICAgICAgICBvcHQgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLWRyeS1ydW4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdC5fc2hvcnRfb3B0cywgWyItbiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdC5fbG9uZ19vcHRzLCBbIi0tZHJ5LXJ1biJdKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3Rfb3ZlcnJpZGVfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPdXRwdXQoWyItaCJdLCAiIiJcCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgIC1uLCAtLWRyeS1ydW4gIGRyeSBydW4gbW9kZQorIiIiKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3Rfb3ZlcnJpZGVfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLW4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnZHJ5X3J1bic6IDQyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisjIC0tIE90aGVyIHRlc3RpbmcuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworX2V4cGVjdGVkX2hlbHBfYmFzaWMgPSAiIiJcCitVc2FnZTogYmFyLnB5IFtvcHRpb25zXQorCitPcHRpb25zOgorICAtYSBBUFBMRSAgICAgICAgICAgdGhyb3cgQVBQTEVzIGF0IGJhc2tldAorICAtYiBOVU0sIC0tYm9vPU5VTSAgc2hvdXQgImJvbyEiIE5VTSB0aW1lcyAoaW4gb3JkZXIgdG8gZnJpZ2h0ZW4gYXdheSBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICBldmlsIHNwaXJpdHMgdGhhdCBjYXVzZSB0cm91YmxlIGFuZCBtYXloZW0pCisgIC0tZm9vPUZPTyAgICAgICAgICBzdG9yZSBGT08gaW4gdGhlIGZvbyBsaXN0IGZvciBsYXRlciBmb29pbmcKKyAgLWgsIC0taGVscCAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyIiIgorCitfZXhwZWN0ZWRfaGVscF9sb25nX29wdHNfZmlyc3QgPSAiIiJcCitVc2FnZTogYmFyLnB5IFtvcHRpb25zXQorCitPcHRpb25zOgorICAtYSBBUFBMRSAgICAgICAgICAgdGhyb3cgQVBQTEVzIGF0IGJhc2tldAorICAtLWJvbz1OVU0sIC1iIE5VTSAgc2hvdXQgImJvbyEiIE5VTSB0aW1lcyAoaW4gb3JkZXIgdG8gZnJpZ2h0ZW4gYXdheSBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICBldmlsIHNwaXJpdHMgdGhhdCBjYXVzZSB0cm91YmxlIGFuZCBtYXloZW0pCisgIC0tZm9vPUZPTyAgICAgICAgICBzdG9yZSBGT08gaW4gdGhlIGZvbyBsaXN0IGZvciBsYXRlciBmb29pbmcKKyAgLS1oZWxwLCAtaCAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyIiIgorCitfZXhwZWN0ZWRfaGVscF90aXRsZV9mb3JtYXR0ZXIgPSAiIiJcCitVc2FnZQorPT09PT0KKyAgYmFyLnB5IFtvcHRpb25zXQorCitPcHRpb25zCis9PT09PT09CistYSBBUFBMRSAgICAgICAgICAgdGhyb3cgQVBQTEVzIGF0IGJhc2tldAorLS1ib289TlVNLCAtYiBOVU0gIHNob3V0ICJib28hIiBOVU0gdGltZXMgKGluIG9yZGVyIHRvIGZyaWdodGVuIGF3YXkgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgIGV2aWwgc3Bpcml0cyB0aGF0IGNhdXNlIHRyb3VibGUgYW5kIG1heWhlbSkKKy0tZm9vPUZPTyAgICAgICAgICBzdG9yZSBGT08gaW4gdGhlIGZvbyBsaXN0IGZvciBsYXRlciBmb29pbmcKKy0taGVscCwgLWggICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisiIiIKKworX2V4cGVjdGVkX2hlbHBfc2hvcnRfbGluZXMgPSAiIiJcCitVc2FnZTogYmFyLnB5IFtvcHRpb25zXQorCitPcHRpb25zOgorICAtYSBBUFBMRSAgICAgICAgICAgdGhyb3cgQVBQTEVzIGF0IGJhc2tldAorICAtYiBOVU0sIC0tYm9vPU5VTSAgc2hvdXQgImJvbyEiIE5VTSB0aW1lcyAoaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgIGZyaWdodGVuIGF3YXkgYWxsIHRoZSBldmlsIHNwaXJpdHMKKyAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2F1c2UgdHJvdWJsZSBhbmQgbWF5aGVtKQorICAtLWZvbz1GT08gICAgICAgICAgc3RvcmUgRk9PIGluIHRoZSBmb28gbGlzdCBmb3IgbGF0ZXIKKyAgICAgICAgICAgICAgICAgICAgIGZvb2luZworICAtaCwgLS1oZWxwICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorIiIiCisKK2NsYXNzIFRlc3RIZWxwKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gc2VsZi5tYWtlX3BhcnNlcig4MCkKKworICAgIGRlZiBtYWtlX3BhcnNlcihzZWxmLCBjb2x1bW5zKToKKyAgICAgICAgb3B0aW9ucyA9IFsKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItYSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9J2EnLAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0iQVBQTEUiLCBoZWxwPSJ0aHJvdyBBUFBMRXMgYXQgYmFza2V0IiksCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLWIiLCAiLS1ib28iLCB0eXBlPSJpbnQiLCBkZXN0PSdib28nLAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0iTlVNIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9CisgICAgICAgICAgICAgICAgICAgICAgICAic2hvdXQgXCJib28hXCIgTlVNIHRpbWVzIChpbiBvcmRlciB0byBmcmlnaHRlbiBhd2F5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJhbGwgdGhlIGV2aWwgc3Bpcml0cyB0aGF0IGNhdXNlIHRyb3VibGUgYW5kIG1heWhlbSkiKSwKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWZvbyIsIGFjdGlvbj0iYXBwZW5kIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0nZm9vJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InN0b3JlIEZPTyBpbiB0aGUgZm9vIGxpc3QgZm9yIGxhdGVyIGZvb2luZyIpLAorICAgICAgICAgICAgXQorCisgICAgICAgICMgV2UgbmVlZCB0byBzZXQgQ09MVU1OUyBmb3IgdGhlIE9wdGlvblBhcnNlciBjb25zdHJ1Y3RvciwgYnV0CisgICAgICAgICMgd2UgbXVzdCByZXN0b3JlIGl0cyBvcmlnaW5hbCB2YWx1ZSAtLSBvdGhlcndpc2UsIHRoaXMgdGVzdAorICAgICAgICAjIHNjcmV3cyB0aGluZ3MgdXAgZm9yIG90aGVyIHRlc3RzIHdoZW4gaXQncyBwYXJ0IG9mIHRoZSBQeXRob24KKyAgICAgICAgIyB0ZXN0IHN1aXRlLgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WydDT0xVTU5TJ10gPSBzdHIoY29sdW1ucykKKyAgICAgICAgICAgIHJldHVybiBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9ucykKKworICAgIGRlZiBhc3NlcnRIZWxwRXF1YWxzKHNlbGYsIGV4cGVjdGVkX291dHB1dCk6CisgICAgICAgIGlmIHR5cGUoZXhwZWN0ZWRfb3V0cHV0KSBpcyB0eXBlcy5Vbmljb2RlVHlwZToKKyAgICAgICAgICAgIGVuY29kaW5nID0gc2VsZi5wYXJzZXIuX2dldF9lbmNvZGluZyhzeXMuc3Rkb3V0KQorICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gZXhwZWN0ZWRfb3V0cHV0LmVuY29kZShlbmNvZGluZywgInJlcGxhY2UiKQorCisgICAgICAgIHNhdmVfYXJndiA9IHN5cy5hcmd2WzpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTWFrZSBvcHRwYXJzZSBiZWxpZXZlIGJhci5weSBpcyBiZWluZyBleGVjdXRlZC4KKyAgICAgICAgICAgIHN5cy5hcmd2WzBdID0gb3MucGF0aC5qb2luKCJmb28iLCAiYmFyLnB5IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0T3V0cHV0KFsiLWgiXSwgZXhwZWN0ZWRfb3V0cHV0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzYXZlX2FyZ3YKKworICAgIGRlZiB0ZXN0X2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SGVscEVxdWFscyhfZXhwZWN0ZWRfaGVscF9iYXNpYykKKworICAgIGRlZiB0ZXN0X2hlbHBfb2xkX3VzYWdlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5zZXRfdXNhZ2UoIlVzYWdlOiAlcHJvZyBbb3B0aW9uc10iKQorICAgICAgICBzZWxmLmFzc2VydEhlbHBFcXVhbHMoX2V4cGVjdGVkX2hlbHBfYmFzaWMpCisKKyAgICBkZWYgdGVzdF9oZWxwX2xvbmdfb3B0c19maXJzdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuZm9ybWF0dGVyLnNob3J0X2ZpcnN0ID0gMAorICAgICAgICBzZWxmLmFzc2VydEhlbHBFcXVhbHMoX2V4cGVjdGVkX2hlbHBfbG9uZ19vcHRzX2ZpcnN0KQorCisgICAgZGVmIHRlc3RfaGVscF90aXRsZV9mb3JtYXR0ZXIoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnZbIkNPTFVNTlMiXSA9ICI4MCIKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLmZvcm1hdHRlciA9IFRpdGxlZEhlbHBGb3JtYXR0ZXIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRIZWxwRXF1YWxzKF9leHBlY3RlZF9oZWxwX3RpdGxlX2Zvcm1hdHRlcikKKworICAgIGRlZiB0ZXN0X3dyYXBfY29sdW1ucyhzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB3cmFwcGluZyByZXNwZWN0cyAkQ09MVU1OUyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgIyBOZWVkIHRvIHJlY29uc3RydWN0IHRoZSBwYXJzZXIsIHNpbmNlIHRoYXQncyB0aGUgb25seSB0aW1lCisgICAgICAgICMgd2UgbG9vayBhdCAkQ09MVU1OUy4KKyAgICAgICAgc2VsZi5wYXJzZXIgPSBzZWxmLm1ha2VfcGFyc2VyKDYwKQorICAgICAgICBzZWxmLmFzc2VydEhlbHBFcXVhbHMoX2V4cGVjdGVkX2hlbHBfc2hvcnRfbGluZXMpCisKKyAgICBkZWYgdGVzdF9oZWxwX3VuaWNvZGUoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gSW50ZXJjZXB0aW5nT3B0aW9uUGFyc2VyKHVzYWdlPVNVUFBSRVNTX1VTQUdFKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItYSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9dSJvbFx1MDBFOSEiKQorICAgICAgICBleHBlY3QgPSB1IiIiXAorT3B0aW9uczoKKyAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAtYSAgICAgICAgICBvbFx1MDBFOSEKKyIiIgorICAgICAgICBzZWxmLmFzc2VydEhlbHBFcXVhbHMoZXhwZWN0KQorCisgICAgZGVmIHRlc3RfaGVscF91bmljb2RlX2Rlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249dSJvbFx1MDBFOSEiKQorICAgICAgICBleHBlY3QgPSB1IiIiXAorb2xcdTAwRTkhCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyIiIgorICAgICAgICBzZWxmLmFzc2VydEhlbHBFcXVhbHMoZXhwZWN0KQorCisgICAgZGVmIHRlc3RfaGVscF9kZXNjcmlwdGlvbl9ncm91cHMoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLnNldF9kZXNjcmlwdGlvbigKKyAgICAgICAgICAgICJUaGlzIGlzIHRoZSBwcm9ncmFtIGRlc2NyaXB0aW9uIGZvciAlcHJvZy4gICVwcm9nIGhhcyAiCisgICAgICAgICAgICAiYW4gb3B0aW9uIGdyb3VwIGFzIHdlbGwgYXMgc2luZ2xlIG9wdGlvbnMuIikKKworICAgICAgICBncm91cCA9IE9wdGlvbkdyb3VwKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIsICJEYW5nZXJvdXMgT3B0aW9ucyIsCisgICAgICAgICAgICAiQ2F1dGlvbjogdXNlIG9mIHRoZXNlIG9wdGlvbnMgaXMgYXQgeW91ciBvd24gcmlzay4gICIKKyAgICAgICAgICAgICJJdCBpcyBiZWxpZXZlZCB0aGF0IHNvbWUgb2YgdGhlbSBiaXRlLiIpCisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oIi1nIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iR3JvdXAgb3B0aW9uLiIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoZ3JvdXApCisKKyAgICAgICAgZXhwZWN0ID0gIiIiXAorVXNhZ2U6IGJhci5weSBbb3B0aW9uc10KKworVGhpcyBpcyB0aGUgcHJvZ3JhbSBkZXNjcmlwdGlvbiBmb3IgYmFyLnB5LiAgYmFyLnB5IGhhcyBhbiBvcHRpb24gZ3JvdXAgYXMKK3dlbGwgYXMgc2luZ2xlIG9wdGlvbnMuCisKK09wdGlvbnM6CisgIC1hIEFQUExFICAgICAgICAgICB0aHJvdyBBUFBMRXMgYXQgYmFza2V0CisgIC1iIE5VTSwgLS1ib289TlVNICBzaG91dCAiYm9vISIgTlVNIHRpbWVzIChpbiBvcmRlciB0byBmcmlnaHRlbiBhd2F5IGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIGV2aWwgc3Bpcml0cyB0aGF0IGNhdXNlIHRyb3VibGUgYW5kIG1heWhlbSkKKyAgLS1mb289Rk9PICAgICAgICAgIHN0b3JlIEZPTyBpbiB0aGUgZm9vIGxpc3QgZm9yIGxhdGVyIGZvb2luZworICAtaCwgLS1oZWxwICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorCisgIERhbmdlcm91cyBPcHRpb25zOgorICAgIENhdXRpb246IHVzZSBvZiB0aGVzZSBvcHRpb25zIGlzIGF0IHlvdXIgb3duIHJpc2suICBJdCBpcyBiZWxpZXZlZAorICAgIHRoYXQgc29tZSBvZiB0aGVtIGJpdGUuCisKKyAgICAtZyAgICAgICAgICAgICAgIEdyb3VwIG9wdGlvbi4KKyIiIgorCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscEVxdWFscyhleHBlY3QpCisKKyAgICAgICAgc2VsZi5wYXJzZXIuZXBpbG9nID0gIlBsZWFzZSByZXBvcnQgYnVncyB0byAvZGV2L251bGwuIgorICAgICAgICBzZWxmLmFzc2VydEhlbHBFcXVhbHMoZXhwZWN0ICsgIlxuUGxlYXNlIHJlcG9ydCBidWdzIHRvIC9kZXYvbnVsbC5cbiIpCisKKworY2xhc3MgVGVzdE1hdGNoQWJicmV2KEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF9tYXRjaF9hYmJyZXYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX21hdGNoX2FiYnJldigiLS1mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiLS1mb3oiOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWZvbyI6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZmllIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mIjogTm9uZX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICItLWYiKQorCisgICAgZGVmIHRlc3RfbWF0Y2hfYWJicmV2X2Vycm9yKHNlbGYpOgorICAgICAgICBzID0gIi0tZiIKKyAgICAgICAgd29yZG1hcCA9IHsiLS1mb3oiOiBOb25lLCAiLS1mb28iOiBOb25lLCAiLS1maWUiOiBOb25lfQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIF9tYXRjaF9hYmJyZXYsIChzLCB3b3JkbWFwKSwgTm9uZSwKKyAgICAgICAgICAgIEJhZE9wdGlvbkVycm9yLCAiYW1iaWd1b3VzIG9wdGlvbjogLS1mICgtLWZpZSwgLS1mb28sIC0tZm96PykiKQorCisKK2NsYXNzIFRlc3RQYXJzZU51bWJlcihCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcigpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgdHlwZT1pbnQpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1sIiwgdHlwZT1sb25nKQorCisgICAgZGVmIHRlc3RfcGFyc2VfbnVtX2ZhaWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgX3BhcnNlX251bSwgKCIiLCBpbnQpLCB7fSwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsCisgICAgICAgICAgICByZS5jb21waWxlKHIiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKS4qOiAnPyc/IikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgX3BhcnNlX251bSwgKCIweE9vb3BzIiwgbG9uZyksIHt9LAorICAgICAgICAgICAgVmFsdWVFcnJvciwKKyAgICAgICAgICAgIHJlLmNvbXBpbGUociJpbnZhbGlkIGxpdGVyYWwgZm9yIGxvbmcoKS4qOiAnPzB4T29vcHMnPyIpKQorCisgICAgZGVmIHRlc3RfcGFyc2VfbnVtX29rKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9wYXJzZV9udW0oIjAiLCBpbnQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9wYXJzZV9udW0oIjB4MTAiLCBpbnQpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcGFyc2VfbnVtKCIwWEEiLCBsb25nKSwgMTBMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9wYXJzZV9udW0oIjAxMCIsIGxvbmcpLCA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcGFyc2VfbnVtKCIwYjExIiwgaW50KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcGFyc2VfbnVtKCIwYiIsIGxvbmcpLCAwTCkKKworICAgIGRlZiB0ZXN0X251bWVyaWNfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLW4iLCAiNDIiLCAiLWwiLCAiMHgyMCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibiI6IDQyLCAibCI6IDB4MjAgfSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1uIiwgIjBiMDEwMSIsICItbDAxMCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibiI6IDUsICJsIjogOCB9LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItbjAwOCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIC1uOiBpbnZhbGlkIGludGVnZXIgdmFsdWU6ICcwMDgnIikKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItbDBiMDEyMyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIC1sOiBpbnZhbGlkIGxvbmcgaW50ZWdlciB2YWx1ZTogJzBiMDEyMyciKQorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi1sIiwgIjB4MTJ4Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24gLWw6IGludmFsaWQgbG9uZyBpbnRlZ2VyIHZhbHVlOiAnMHgxMngnIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb3MucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9vcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGJlYjAxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb3MucHkKQEAgLTAsMCArMSw4NjIgQEAKKyMgQXMgYSB0ZXN0IHN1aXRlIGZvciB0aGUgb3MgbW9kdWxlLCB0aGlzIGlzIHdvZWZ1bGx5IGluYWRlcXVhdGUsIGJ1dCB0aGlzCisjIGRvZXMgYWRkIHRlc3RzIGZvciBhIGZldyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBiZWVuIGRldGVybWluZWQgdG8gYmUgbW9yZQorIyBwb3J0YWJsZSB0aGFuIHRoZXkgaGFkIGJlZW4gdGhvdWdodCB0byBiZS4KKworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBtbWFwCitpbXBvcnQgdXVpZAorCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRlbXBuYW0iLCBSdW50aW1lV2FybmluZywgX19uYW1lX18pCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRtcG5hbSIsIFJ1bnRpbWVXYXJuaW5nLCBfX25hbWVfXykKKworIyBUZXN0cyBjcmVhdGluZyBURVNURk4KK2NsYXNzIEZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0ZXN0X3N1cHBvcnQuVEVTVEZOKToKKyAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgIHRlYXJEb3duID0gc2V0VXAKKworICAgIGRlZiB0ZXN0X2FjY2VzcyhzZWxmKToKKyAgICAgICAgZiA9IG9zLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgb3MuT19DUkVBVHxvcy5PX1JEV1IpCisgICAgICAgIG9zLmNsb3NlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5hY2Nlc3ModGVzdF9zdXBwb3J0LlRFU1RGTiwgb3MuV19PSykpCisKKyAgICBkZWYgdGVzdF9jbG9zZXJhbmdlKHNlbGYpOgorICAgICAgICBmaXJzdCA9IG9zLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgb3MuT19DUkVBVHxvcy5PX1JEV1IpCisgICAgICAgICMgV2UgbXVzdCBhbGxvY2F0ZSB0d28gY29uc2VjdXRpdmUgZmlsZSBkZXNjcmlwdG9ycywgb3RoZXJ3aXNlCisgICAgICAgICMgaXQgd2lsbCBtZXNzIHVwIG90aGVyIGZpbGUgZGVzY3JpcHRvcnMgKHBlcmhhcHMgZXZlbiB0aGUgdGhyZWUKKyAgICAgICAgIyBzdGFuZGFyZCBvbmVzKS4KKyAgICAgICAgc2Vjb25kID0gb3MuZHVwKGZpcnN0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXRyaWVzID0gMAorICAgICAgICAgICAgd2hpbGUgc2Vjb25kICE9IGZpcnN0ICsgMToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShmaXJzdCkKKyAgICAgICAgICAgICAgICByZXRyaWVzICs9IDEKKyAgICAgICAgICAgICAgICBpZiByZXRyaWVzID4gMTA6CisgICAgICAgICAgICAgICAgICAgICMgWFhYIHRlc3Qgc2tpcHBlZAorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjb3VsZG4ndCBhbGxvY2F0ZSB0d28gY29uc2VjdXRpdmUgZmRzIikKKyAgICAgICAgICAgICAgICBmaXJzdCwgc2Vjb25kID0gc2Vjb25kLCBvcy5kdXAoc2Vjb25kKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2Uoc2Vjb25kKQorICAgICAgICAjIGNsb3NlIGEgZmQgdGhhdCBpcyBvcGVuLCBhbmQgb25lIHRoYXQgaXNuJ3QKKyAgICAgICAgb3MuY2xvc2VyYW5nZShmaXJzdCwgZmlyc3QgKyAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy53cml0ZSwgZmlyc3QsICJhIikKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgorICAgICAgICBwYXRoID0gdW5pY29kZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBvbGQgPSBzeXMuZ2V0cmVmY291bnQocGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5yZW5hbWUsIHBhdGgsIDApCisgICAgICAgIG5ldyA9IHN5cy5nZXRyZWZjb3VudChwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9sZCwgbmV3KQorCisKK2NsYXNzIFRlbXBvcmFyeUZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGVzID0gW10KKyAgICAgICAgb3MubWtkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5maWxlczoKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorICAgICAgICBvcy5ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIGNoZWNrX3RlbXBmaWxlKHNlbGYsIG5hbWUpOgorICAgICAgICAjIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3Q6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMobmFtZSksCisgICAgICAgICAgICAgICAgICAgICJmaWxlIGFscmVhZHkgZXhpc3RzIGZvciB0ZW1wb3JhcnkgZmlsZSIpCisgICAgICAgICMgbWFrZSBzdXJlIHdlIGNhbiBjcmVhdGUgdGhlIGZpbGUKKyAgICAgICAgb3BlbihuYW1lLCAidyIpCisgICAgICAgIHNlbGYuZmlsZXMuYXBwZW5kKG5hbWUpCisKKyAgICBkZWYgdGVzdF90ZW1wbmFtKHNlbGYpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihvcywgInRlbXBuYW0iKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRlbXBuYW0iLCBSdW50aW1lV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIidGVzdF9vcyQiKQorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0ZW1wbmFtIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5jaGVja190ZW1wZmlsZShvcy50ZW1wbmFtKCkpCisKKyAgICAgICAgICAgIG5hbWUgPSBvcy50ZW1wbmFtKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RlbXBmaWxlKG5hbWUpCisKKyAgICAgICAgICAgIG5hbWUgPSBvcy50ZW1wbmFtKHRlc3Rfc3VwcG9ydC5URVNURk4sICJwZngiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguYmFzZW5hbWUobmFtZSlbOjNdID09ICJwZngiKQorICAgICAgICAgICAgc2VsZi5jaGVja190ZW1wZmlsZShuYW1lKQorCisgICAgZGVmIHRlc3RfdG1wZmlsZShzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJ0bXBmaWxlIik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBBcyB3aXRoIHRlc3RfdG1wbmFtKCkgYmVsb3csIHRoZSBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIHRtcGZpbGUoKQorICAgICAgICAjIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGRyaXZlLgorICAgICAgICAjIE9uIFZpc3RhIGFuZCBTZXJ2ZXIgMjAwOCwgdGhpcyB0ZXN0IHdpbGwgYWx3YXlzIGZhaWwgZm9yIG5vcm1hbCB1c2VycworICAgICAgICAjIGFzIHdyaXRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IHJlcXVpcmVzIGVsZXZhdGVkIHByaXZpbGVnZXMuICBXaXRoCisgICAgICAgICMgWFAgYW5kIGJlbG93LCB0aGUgc2VtYW50aWNzIG9mIHRtcGZpbGUoKSBhcmUgdGhlIHNhbWUsIGJ1dCB0aGUgdXNlcgorICAgICAgICAjIHJ1bm5pbmcgdGhlIHRlc3QgaXMgbW9yZSBsaWtlbHkgdG8gaGF2ZSBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzIG9uCisgICAgICAgICMgdGhlaXIgYWNjb3VudCBhbHJlYWR5LiAgSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIG9zLnRtcGZpbGUoKSBzaG91bGQKKyAgICAgICAgIyB3b3JrLiAgSW4gb3JkZXIgdG8gbWFrZSB0aGlzIHRlc3QgYXMgdXNlZnVsIGFzIHBvc3NpYmxlLCByYXRoZXIgdGhhbgorICAgICAgICAjIHRyeWluZyB0byBkZXRlY3QgV2luZG93cyB2ZXJzaW9ucyBvciB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBoYXMgdGhlCisgICAgICAgICMgcmlnaHQgcGVybWlzc2lvbnMsIGp1c3QgdHJ5IGFuZCBjcmVhdGUgYSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeQorICAgICAgICAjIGFuZCBzZWUgaWYgaXQgcmFpc2VzIGEgJ1Blcm1pc3Npb24gZGVuaWVkJyBPU0Vycm9yLiAgSWYgaXQgZG9lcywgdGhlbgorICAgICAgICAjIHRlc3QgdGhhdCBhIHN1YnNlcXVlbnQgY2FsbCB0byBvcy50bXBmaWxlKCkgcmFpc2VzIHRoZSBzYW1lIGVycm9yLiBJZgorICAgICAgICAjIGl0IGRvZXNuJ3QsIGFzc3VtZSB3ZSdyZSBvbiBYUCBvciBiZWxvdyBhbmQgdGhlIHVzZXIgcnVubmluZyB0aGUgdGVzdAorICAgICAgICAjIGhhcyBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzLCBhbmQgcHJvY2VlZCB3aXRoIHRoZSB0ZXN0IGFzIG5vcm1hbC4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBmaWxlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgICAgICBuYW1lID0gJ1xccHl0aG9uX3Rlc3Rfb3NfdGVzdF90bXBmaWxlLnR4dCcKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmcCA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBmaXJzdDoKKyAgICAgICAgICAgICAgICAgICAgIyBvcGVuKCkgZmFpbGVkLCBhc3NlcnQgdG1wZmlsZSgpIGZhaWxzIGluIHRoZSBzYW1lIHdheS4KKyAgICAgICAgICAgICAgICAgICAgIyBBbHRob3VnaCBvcGVuKCkgcmFpc2VzIGFuIElPRXJyb3IgYW5kIG9zLnRtcGZpbGUoKSByYWlzZXMgYW4KKyAgICAgICAgICAgICAgICAgICAgIyBPU0Vycm9yKCksICdhcmdzJyB3aWxsIGJlICgxMywgJ1Blcm1pc3Npb24gZGVuaWVkJykgaW4gYm90aAorICAgICAgICAgICAgICAgICAgICAjIGNhc2VzLgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBmcCA9IG9zLnRtcGZpbGUoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgc2Vjb25kOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdC5hcmdzLCBzZWNvbmQuYXJncykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgb3MudG1wZmlsZSgpIHRvIHJhaXNlIE9TRXJyb3IiKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIG9wZW4oKSB3b3JrZWQsIHRoZXJlZm9yZSwgdG1wZmlsZSgpIHNob3VsZCB3b3JrLiAgQ2xvc2Ugb3VyCisgICAgICAgICAgICAgICAgICAgICMgZHVtbXkgZmlsZSBhbmQgcHJvY2VlZCB3aXRoIHRoZSB0ZXN0IGFzIG5vcm1hbC4KKyAgICAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUobmFtZSkKKworICAgICAgICAgICAgZnAgPSBvcy50bXBmaWxlKCkKKyAgICAgICAgICAgIGZwLndyaXRlKCJmb29iYXIiKQorICAgICAgICAgICAgZnAuc2VlaygwLDApCisgICAgICAgICAgICBzID0gZnAucmVhZCgpCisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocyA9PSAiZm9vYmFyIikKKworICAgIGRlZiB0ZXN0X3RtcG5hbShzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJ0bXBuYW0iKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRtcG5hbSIsIFJ1bnRpbWVXYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJ0ZXN0X29zJCIpCisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRtcG5hbSIsIERlcHJlY2F0aW9uV2FybmluZykKKworICAgICAgICAgICAgbmFtZSA9IG9zLnRtcG5hbSgpCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4zMiIsKToKKyAgICAgICAgICAgICAgICAjIFRoZSBXaW5kb3dzIHRtcG5hbSgpIHNlZW1zIHVzZWxlc3MuICBGcm9tIHRoZSBNUyBkb2NzOgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjICAgICBUaGUgY2hhcmFjdGVyIHN0cmluZyB0aGF0IHRtcG5hbSBjcmVhdGVzIGNvbnNpc3RzIG9mCisgICAgICAgICAgICAgICAgIyAgICAgdGhlIHBhdGggcHJlZml4LCBkZWZpbmVkIGJ5IHRoZSBlbnRyeSBQX3RtcGRpciBpbiB0aGUKKyAgICAgICAgICAgICAgICAjICAgICBmaWxlIFNURElPLkgsIGZvbGxvd2VkIGJ5IGEgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUKKyAgICAgICAgICAgICAgICAjICAgICBkaWdpdCBjaGFyYWN0ZXJzICcwJyB0aHJvdWdoICc5JzsgdGhlIG51bWVyaWNhbCB2YWx1ZQorICAgICAgICAgICAgICAgICMgICAgIG9mIHRoaXMgc3RyaW5nIGlzIGluIHRoZSByYW5nZSAxIC0gNjUsNTM1LiAgQ2hhbmdpbmcgdGhlCisgICAgICAgICAgICAgICAgIyAgICAgZGVmaW5pdGlvbnMgb2YgTF90bXBuYW0gb3IgUF90bXBkaXIgaW4gU1RESU8uSCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICMgICAgIGNoYW5nZSB0aGUgb3BlcmF0aW9uIG9mIHRtcG5hbS4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBUaGUgcmVhbGx5IGJpemFycmUgcGFydCBpcyB0aGF0LCBhdCBsZWFzdCB1bmRlciBNU1ZDNiwKKyAgICAgICAgICAgICAgICAjIFBfdG1wZGlyIGlzICJcXCIuICBUaGF0IGlzLCB0aGUgcGF0aCByZXR1cm5lZCByZWZlcnMgdG8KKyAgICAgICAgICAgICAgICAjIHRoZSByb290IG9mIHRoZSBjdXJyZW50IGRyaXZlLiAgVGhhdCdzIGEgdGVycmlibGUgcGxhY2UgdG8KKyAgICAgICAgICAgICAgICAjIHB1dCB0ZW1wIGZpbGVzLCBhbmQsIGRlcGVuZGluZyBvbiBwcml2aWxlZ2VzLCB0aGUgdXNlcgorICAgICAgICAgICAgICAgICMgbWF5IG5vdCBldmVuIGJlIGFibGUgdG8gb3BlbiBhIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUgYWxyZWFkeSBleGlzdHMgZm9yIHRlbXBvcmFyeSBmaWxlIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190ZW1wZmlsZShuYW1lKQorCisjIFRlc3QgYXR0cmlidXRlcyBvbiByZXR1cm4gdmFsdWVzIGZyb20gb3MuKnN0YXQqIGZhbWlseS4KK2NsYXNzIFN0YXRBdHRyaWJ1dGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcy5ta2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmZuYW1lID0gb3MucGF0aC5qb2luKHRlc3Rfc3VwcG9ydC5URVNURk4sICJmMSIpCisgICAgICAgIGYgPSBvcGVuKHNlbGYuZm5hbWUsICd3YicpCisgICAgICAgIGYud3JpdGUoIkFCQyIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy51bmxpbmsoc2VsZi5mbmFtZSkKKyAgICAgICAgb3Mucm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X3N0YXRfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJzdGF0Iik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpbXBvcnQgc3RhdAorICAgICAgICByZXN1bHQgPSBvcy5zdGF0KHNlbGYuZm5hbWUpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgZGlyZWN0IGFjY2VzcyB3b3JrcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFtzdGF0LlNUX1NJWkVdLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdF9zaXplLCAzKQorCisgICAgICAgICMgTWFrZSBzdXJlIGFsbCB0aGUgYXR0cmlidXRlcyBhcmUgdGhlcmUKKyAgICAgICAgbWVtYmVycyA9IGRpcihyZXN1bHQpCisgICAgICAgIGZvciBuYW1lIGluIGRpcihzdGF0KToKKyAgICAgICAgICAgIGlmIG5hbWVbOjNdID09ICdTVF8nOgorICAgICAgICAgICAgICAgIGF0dHIgPSBuYW1lLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCJUSU1FIik6CisgICAgICAgICAgICAgICAgICAgIGRlZiB0cnVuYyh4KTogcmV0dXJuIGludCh4KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlZiB0cnVuYyh4KTogcmV0dXJuIHgKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRydW5jKGdldGF0dHIocmVzdWx0LCBhdHRyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbZ2V0YXR0cihzdGF0LCBuYW1lKV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihhdHRyLCBtZW1iZXJzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdFsyMDBdCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGFzc2lnbm1lbnQgZmFpbHMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0LnN0X21vZGUgPSAxCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdC5zdF9yZGV2ID0gMQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQucGFycm90ID0gMQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVXNlIHRoZSBzdGF0X3Jlc3VsdCBjb25zdHJ1Y3RvciB3aXRoIGEgdG9vLXNob3J0IHR1cGxlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQyID0gb3Muc3RhdF9yZXN1bHQoKDEwLCkpCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVXNlIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGEgdG9vLWxvbmcgdHVwbGUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdDIgPSBvcy5zdGF0X3Jlc3VsdCgoMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKworICAgIGRlZiB0ZXN0X3N0YXR2ZnNfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJzdGF0dmZzIik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBvcy5zdGF0dmZzKHNlbGYuZm5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgIyBPbiBBdGhlT1MsIGdsaWJjIGFsd2F5cyByZXR1cm5zIEVOT1NZUworICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBNYWtlIHN1cmUgZGlyZWN0IGFjY2VzcyB3b3JrcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5mX2JmcmVlLCByZXN1bHRbM10pCisKKyAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZSB0aGVyZS4KKyAgICAgICAgbWVtYmVycyA9ICgnYnNpemUnLCAnZnJzaXplJywgJ2Jsb2NrcycsICdiZnJlZScsICdiYXZhaWwnLCAnZmlsZXMnLAorICAgICAgICAgICAgICAgICAgICAnZmZyZWUnLCAnZmF2YWlsJywgJ2ZsYWcnLCAnbmFtZW1heCcpCisgICAgICAgIGZvciB2YWx1ZSwgbWVtYmVyIGluIGVudW1lcmF0ZShtZW1iZXJzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihyZXN1bHQsICdmXycgKyBtZW1iZXIpLCByZXN1bHRbdmFsdWVdKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgYXNzaWdubWVudCByZWFsbHkgZmFpbHMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0LmZfYmZyZWUgPSAxCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdC5wYXJyb3QgPSAxCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBVc2UgdGhlIGNvbnN0cnVjdG9yIHdpdGggYSB0b28tc2hvcnQgdHVwbGUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdDIgPSBvcy5zdGF0dmZzX3Jlc3VsdCgoMTAsKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHJhaXNlZCIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBVc2UgdGhlIGNvbnN0cnVjdG9yIHdpdGggYSB0b28tbG9uZyB0dXBsZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0MiA9IG9zLnN0YXR2ZnNfcmVzdWx0KCgwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0KSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3V0aW1lX2RpcihzZWxmKToKKyAgICAgICAgZGVsdGEgPSAxMDAwMDAwCisgICAgICAgIHN0ID0gb3Muc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAjIHJvdW5kIHRvIGludCwgYmVjYXVzZSBzb21lIHN5c3RlbXMgbWF5IHN1cHBvcnQgc3ViLXNlY29uZAorICAgICAgICAjIHRpbWUgc3RhbXBzIGluIHN0YXQsIGJ1dCBub3QgaW4gdXRpbWUuCisgICAgICAgIG9zLnV0aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4sIChzdC5zdF9hdGltZSwgaW50KHN0LnN0X210aW1lLWRlbHRhKSkpCisgICAgICAgIHN0MiA9IG9zLnN0YXQodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdDIuc3RfbXRpbWUsIGludChzdC5zdF9tdGltZS1kZWx0YSkpCisKKyAgICAjIFJlc3RyaWN0IHRlc3QgdG8gV2luMzIsIHNpbmNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBvdGhlcgorICAgICMgc3lzdGVtcyBzdXBwb3J0IGNlbnRpc2Vjb25kcworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBkZWYgZ2V0X2ZpbGVfc3lzdGVtKHBhdGgpOgorICAgICAgICAgICAgcm9vdCA9IG9zLnBhdGguc3BsaXRkcml2ZShvcy5wYXRoLmFic3BhdGgocGF0aCkpWzBdICsgJ1xcJworICAgICAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICAgICAga2VybmVsMzIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyCisgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIoIiIsIDEwMCkKKyAgICAgICAgICAgIGlmIGtlcm5lbDMyLkdldFZvbHVtZUluZm9ybWF0aW9uQShyb290LCBOb25lLCAwLCBOb25lLCBOb25lLCBOb25lLCBidWYsIGxlbihidWYpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmLnZhbHVlCisKKyAgICAgICAgaWYgZ2V0X2ZpbGVfc3lzdGVtKHRlc3Rfc3VwcG9ydC5URVNURk4pID09ICJOVEZTIjoKKyAgICAgICAgICAgIGRlZiB0ZXN0XzE1NjUxNTAoc2VsZik6CisgICAgICAgICAgICAgICAgdDEgPSAxMTU5MTk1MDM5LjI1CisgICAgICAgICAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSwgKHQxLCB0MSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHNlbGYuZm5hbWUpLnN0X210aW1lLCB0MSkKKworICAgICAgICAgICAgZGVmIHRlc3RfbGFyZ2VfdGltZShzZWxmKToKKyAgICAgICAgICAgICAgICB0MSA9IDUwMDAwMDAwMDAgIyBzb21lIGRheSBpbiAyMTI4CisgICAgICAgICAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSwgKHQxLCB0MSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHNlbGYuZm5hbWUpLnN0X210aW1lLCB0MSkKKworICAgICAgICBkZWYgdGVzdF8xNjg2NDc1KHNlbGYpOgorICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCBhbiBvcGVuIGZpbGUgY2FuIGJlIHN0YXQnZWQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5zdGF0KHIiYzpccGFnZWZpbGUuc3lzIikKKyAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAyOiAjIGZpbGUgZG9lcyBub3QgZXhpc3Q7IGNhbm5vdCBydW4gdGVzdAorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvdWxkIG5vdCBzdGF0IHBhZ2VmaWxlLnN5cyIpCisKK2Zyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cworCitjbGFzcyBFbnZpcm9uVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgorICAgICIiImNoZWNrIHRoYXQgb3MuZW52aXJvbiBvYmplY3QgY29uZm9ybSB0byBtYXBwaW5nIHByb3RvY29sIiIiCisgICAgdHlwZTJ0ZXN0ID0gTm9uZQorICAgIGRlZiBfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICByZXR1cm4geyJLRVkxIjoiVkFMVUUxIiwgIktFWTIiOiJWQUxVRTIiLCAiS0VZMyI6IlZBTFVFMyJ9CisgICAgZGVmIF9lbXB0eV9tYXBwaW5nKHNlbGYpOgorICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICAgICAgcmV0dXJuIG9zLmVudmlyb24KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX19zYXZlID0gZGljdChvcy5lbnZpcm9uKQorICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLmVudmlyb24uY2xlYXIoKQorICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShzZWxmLl9fc2F2ZSkKKworICAgICMgQnVnIDExMTA0NzgKKyAgICBkZWYgdGVzdF91cGRhdGUyKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL2Jpbi9zaCIpOgorICAgICAgICAgICAgb3MuZW52aXJvbi51cGRhdGUoSEVMTE89IldvcmxkIikKKyAgICAgICAgICAgIHdpdGggb3MucG9wZW4oIi9iaW4vc2ggLWMgJ2VjaG8gJEhFTExPJyIpIGFzIHBvcGVuOgorICAgICAgICAgICAgICAgIHZhbHVlID0gcG9wZW4ucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAiV29ybGQiKQorCisgICAgIyBPbiBGcmVlQlNEIDwgNyBhbmQgT1MgWCA8IDEwLjYsIHVuc2V0ZW52KCkgZG9lc24ndCByZXR1cm4gYSB2YWx1ZSAoaXNzdWUKKyAgICAjICMxMzQxNSkuCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgoJ2ZyZWVic2QnLCAnZGFyd2luJykpLAorICAgICAgICAgICAgICAgICAgICAgImR1ZSB0byBrbm93biBPUyBidWc6IHNlZSBpc3N1ZSAjMTM0MTUiKQorICAgIGRlZiB0ZXN0X3Vuc2V0X2Vycm9yKHNlbGYpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbGltaXRlZCB0byAzMiw3NjcgY2hhcmFjdGVycworICAgICAgICAgICAga2V5ID0gJ3gnICogNTAwMDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9zLmVudmlyb24uX19kZWxpdGVtX18sIGtleSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgIj0iIGlzIG5vdCBhbGxvd2VkIGluIGEgdmFyaWFibGUgbmFtZQorICAgICAgICAgICAga2V5ID0gJ2tleT0nCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5lbnZpcm9uLl9fZGVsaXRlbV9fLCBrZXkpCisKK2NsYXNzIFdhbGtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIG9zLndhbGsoKS4iIiIKKworICAgIGRlZiB0ZXN0X3RyYXZlcnNhbChzZWxmKToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgorCisgICAgICAgICMgQnVpbGQ6CisgICAgICAgICMgICAgIFRFU1RGTi8KKyAgICAgICAgIyAgICAgICBURVNUMS8gICAgICAgICAgICAgIGEgZmlsZSBraWQgYW5kIHR3byBkaXJlY3Rvcnkga2lkcworICAgICAgICAjICAgICAgICAgdG1wMQorICAgICAgICAjICAgICAgICAgU1VCMS8gICAgICAgICAgICAgYSBmaWxlIGtpZCBhbmQgYSBkaXJlY3Rvcnkga2lkCisgICAgICAgICMgICAgICAgICAgIHRtcDIKKyAgICAgICAgIyAgICAgICAgICAgU1VCMTEvICAgICAgICAgIG5vIGtpZHMKKyAgICAgICAgIyAgICAgICAgIFNVQjIvICAgICAgICAgICAgIGEgZmlsZSBraWQgYW5kIGEgZGlyc3ltbGluayBraWQKKyAgICAgICAgIyAgICAgICAgICAgdG1wMworICAgICAgICAjICAgICAgICAgICBsaW5rLyAgICAgICAgICAgYSBzeW1saW5rIHRvIFRFU1RGTi4yCisgICAgICAgICMgICAgICAgVEVTVDIvCisgICAgICAgICMgICAgICAgICB0bXA0ICAgICAgICAgICAgICBhIGxvbmUgZmlsZQorICAgICAgICB3YWxrX3BhdGggPSBqb2luKHRlc3Rfc3VwcG9ydC5URVNURk4sICJURVNUMSIpCisgICAgICAgIHN1YjFfcGF0aCA9IGpvaW4od2Fsa19wYXRoLCAiU1VCMSIpCisgICAgICAgIHN1YjExX3BhdGggPSBqb2luKHN1YjFfcGF0aCwgIlNVQjExIikKKyAgICAgICAgc3ViMl9wYXRoID0gam9pbih3YWxrX3BhdGgsICJTVUIyIikKKyAgICAgICAgdG1wMV9wYXRoID0gam9pbih3YWxrX3BhdGgsICJ0bXAxIikKKyAgICAgICAgdG1wMl9wYXRoID0gam9pbihzdWIxX3BhdGgsICJ0bXAyIikKKyAgICAgICAgdG1wM19wYXRoID0gam9pbihzdWIyX3BhdGgsICJ0bXAzIikKKyAgICAgICAgbGlua19wYXRoID0gam9pbihzdWIyX3BhdGgsICJsaW5rIikKKyAgICAgICAgdDJfcGF0aCA9IGpvaW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIlRFU1QyIikKKyAgICAgICAgdG1wNF9wYXRoID0gam9pbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiVEVTVDIiLCAidG1wNCIpCisKKyAgICAgICAgIyBDcmVhdGUgc3R1ZmYuCisgICAgICAgIG9zLm1ha2VkaXJzKHN1YjExX3BhdGgpCisgICAgICAgIG9zLm1ha2VkaXJzKHN1YjJfcGF0aCkKKyAgICAgICAgb3MubWFrZWRpcnModDJfcGF0aCkKKyAgICAgICAgZm9yIHBhdGggaW4gdG1wMV9wYXRoLCB0bXAyX3BhdGgsIHRtcDNfcGF0aCwgdG1wNF9wYXRoOgorICAgICAgICAgICAgZiA9IGZpbGUocGF0aCwgInciKQorICAgICAgICAgICAgZi53cml0ZSgiSSdtICIgKyBwYXRoICsgIiBhbmQgcHJvdWQgb2YgaXQuICBCbGFtZSB0ZXN0X29zLlxuIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgorICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmFic3BhdGgodDJfcGF0aCksIGxpbmtfcGF0aCkKKyAgICAgICAgICAgIHN1YjJfdHJlZSA9IChzdWIyX3BhdGgsIFsibGluayJdLCBbInRtcDMiXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN1YjJfdHJlZSA9IChzdWIyX3BhdGgsIFtdLCBbInRtcDMiXSkKKworICAgICAgICAjIFdhbGsgdG9wLWRvd24uCisgICAgICAgIGFsbCA9IGxpc3Qob3Mud2Fsayh3YWxrX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhbGwpLCA0KQorICAgICAgICAjIFdlIGNhbid0IGtub3cgd2hpY2ggb3JkZXIgU1VCMSBhbmQgU1VCMiB3aWxsIGFwcGVhciBpbi4KKyAgICAgICAgIyBOb3QgZmxpcHBlZDogIFRFU1RGTiwgU1VCMSwgU1VCMTEsIFNVQjIKKyAgICAgICAgIyAgICAgZmxpcHBlZDogIFRFU1RGTiwgU1VCMiwgU1VCMSwgU1VCMTEKKyAgICAgICAgZmxpcHBlZCA9IGFsbFswXVsxXVswXSAhPSAiU1VCMSIKKyAgICAgICAgYWxsWzBdWzFdLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFswXSwgKHdhbGtfcGF0aCwgWyJTVUIxIiwgIlNVQjIiXSwgWyJ0bXAxIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFsxICsgZmxpcHBlZF0sIChzdWIxX3BhdGgsIFsiU1VCMTEiXSwgWyJ0bXAyIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFsyICsgZmxpcHBlZF0sIChzdWIxMV9wYXRoLCBbXSwgW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFszIC0gMiAqIGZsaXBwZWRdLCBzdWIyX3RyZWUpCisKKyAgICAgICAgIyBQcnVuZSB0aGUgc2VhcmNoLgorICAgICAgICBhbGwgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh3YWxrX3BhdGgpOgorICAgICAgICAgICAgYWxsLmFwcGVuZCgocm9vdCwgZGlycywgZmlsZXMpKQorICAgICAgICAgICAgIyBEb24ndCBkZXNjZW5kIGludG8gU1VCMS4KKyAgICAgICAgICAgIGlmICdTVUIxJyBpbiBkaXJzOgorICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgYWxzbyBtdXRhdGVzIHRoZSBkaXJzIHdlIGFwcGVuZGVkIHRvIGFsbCEKKyAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZSgnU1VCMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzBdLCAod2Fsa19wYXRoLCBbIlNVQjIiXSwgWyJ0bXAxIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFsxXSwgc3ViMl90cmVlKQorCisgICAgICAgICMgV2FsayBib3R0b20tdXAuCisgICAgICAgIGFsbCA9IGxpc3Qob3Mud2Fsayh3YWxrX3BhdGgsIHRvcGRvd249RmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhbGwpLCA0KQorICAgICAgICAjIFdlIGNhbid0IGtub3cgd2hpY2ggb3JkZXIgU1VCMSBhbmQgU1VCMiB3aWxsIGFwcGVhciBpbi4KKyAgICAgICAgIyBOb3QgZmxpcHBlZDogIFNVQjExLCBTVUIxLCBTVUIyLCBURVNURk4KKyAgICAgICAgIyAgICAgZmxpcHBlZDogIFNVQjIsIFNVQjExLCBTVUIxLCBURVNURk4KKyAgICAgICAgZmxpcHBlZCA9IGFsbFszXVsxXVswXSAhPSAiU1VCMSIKKyAgICAgICAgYWxsWzNdWzFdLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFszXSwgKHdhbGtfcGF0aCwgWyJTVUIxIiwgIlNVQjIiXSwgWyJ0bXAxIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFtmbGlwcGVkXSwgKHN1YjExX3BhdGgsIFtdLCBbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsW2ZsaXBwZWQgKyAxXSwgKHN1YjFfcGF0aCwgWyJTVUIxMSJdLCBbInRtcDIiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzIgLSAyICogZmxpcHBlZF0sIHN1YjJfdHJlZSkKKworICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgorICAgICAgICAgICAgIyBXYWxrLCBmb2xsb3dpbmcgc3ltbGlua3MuCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh3YWxrX3BhdGgsIGZvbGxvd2xpbmtzPVRydWUpOgorICAgICAgICAgICAgICAgIGlmIHJvb3QgPT0gbGlua19wYXRoOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnMsIFtdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzLCBbInRtcDQiXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgZm9sbG93IHN5bWxpbmsgd2l0aCBmb2xsb3dsaW5rcz1UcnVlIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBUZWFyIGV2ZXJ5dGhpbmcgZG93bi4gIFRoaXMgaXMgYSBkZWNlbnQgdXNlIGZvciBib3R0b20tdXAgb24KKyAgICAgICAgIyBXaW5kb3dzLCB3aGljaCBkb2Vzbid0IGhhdmUgYSByZWN1cnNpdmUgZGVsZXRlIGNvbW1hbmQuICBUaGUKKyAgICAgICAgIyAobm90IHNvKSBzdWJ0bGV0eSBpcyB0aGF0IHJtZGlyIHdpbGwgZmFpbCB1bmxlc3MgdGhlIGRpcidzCisgICAgICAgICMga2lkcyBhcmUgcmVtb3ZlZCBmaXJzdCwgc28gYm90dG9tIHVwIGlzIGVzc2VudGlhbC4KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodGVzdF9zdXBwb3J0LlRFU1RGTiwgdG9wZG93bj1GYWxzZSk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNsaW5rKGRpcm5hbWUpOgorICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkaXJuYW1lKQorICAgICAgICBvcy5ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCitjbGFzcyBNYWtlZGlyVGVzdHMgKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9tYWtlZGlyKHNlbGYpOgorICAgICAgICBiYXNlID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGJhc2UsICdkaXIxJywgJ2RpcjInLCAnZGlyMycpCisgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgpICAgICAgICAgICAgICMgU2hvdWxkIHdvcmsKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihiYXNlLCAnZGlyMScsICdkaXIyJywgJ2RpcjMnLCAnZGlyNCcpCisgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgpCisKKyAgICAgICAgIyBUcnkgcGF0aHMgd2l0aCBhICcuJyBpbiB0aGVtCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLm1ha2VkaXJzLCBvcy5jdXJkaXIpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZSwgJ2RpcjEnLCAnZGlyMicsICdkaXIzJywgJ2RpcjQnLCAnZGlyNScsIG9zLmN1cmRpcikKKyAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihiYXNlLCAnZGlyMScsIG9zLmN1cmRpciwgJ2RpcjInLCAnZGlyMycsICdkaXI0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlyNScsICdkaXI2JykKKyAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKKworCisKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAnZGlyMScsICdkaXIyJywgJ2RpcjMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXI0JywgJ2RpcjUnLCAnZGlyNicpCisgICAgICAgICMgSWYgdGhlIHRlc3RzIGZhaWxlZCwgdGhlIGJvdHRvbS1tb3N0IGRpcmVjdG9yeSAoJy4uL2RpcjYnKQorICAgICAgICAjIG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGxvb2sgZm9yIHRoZSBvdXRlcm1vc3QgZGlyZWN0b3J5CisgICAgICAgICMgdGhhdCBleGlzdHMuCisgICAgICAgIHdoaWxlIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKSBhbmQgcGF0aCAhPSB0ZXN0X3N1cHBvcnQuVEVTVEZOOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorCisgICAgICAgIG9zLnJlbW92ZWRpcnMocGF0aCkKKworY2xhc3MgRGV2TnVsbFRlc3RzICh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZGV2bnVsbChzZWxmKToKKyAgICAgICAgZiA9IGZpbGUob3MuZGV2bnVsbCwgJ3cnKQorICAgICAgICBmLndyaXRlKCdoZWxsbycpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gZmlsZShvcy5kZXZudWxsLCAncicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICcnKQorICAgICAgICBmLmNsb3NlKCkKKworY2xhc3MgVVJhbmRvbVRlc3RzICh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91cmFuZG9tX2xlbmd0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgwKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMSkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy51cmFuZG9tKDEwKSksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy51cmFuZG9tKDEwMCkpLCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMTAwMCkpLCAxMDAwKQorCisgICAgZGVmIHRlc3RfdXJhbmRvbV92YWx1ZShzZWxmKToKKyAgICAgICAgZGF0YTEgPSBvcy51cmFuZG9tKDE2KQorICAgICAgICBkYXRhMiA9IG9zLnVyYW5kb20oMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YTEsIGRhdGEyKQorCisgICAgZGVmIGdldF91cmFuZG9tX3N1YnByb2Nlc3Moc2VsZiwgY291bnQpOgorICAgICAgICAjIFdlIG5lZWQgdG8gdXNlIHJlcHIoKSBhbmQgZXZhbCgpIHRvIGF2b2lkIGxpbmUgZW5kaW5nIGNvbnZlcnNpb25zCisgICAgICAgICMgdW5kZXIgV2luZG93cy4KKyAgICAgICAgY29kZSA9ICdcbicuam9pbigoCisgICAgICAgICAgICAnaW1wb3J0IG9zLCBzeXMnLAorICAgICAgICAgICAgJ2RhdGEgPSBvcy51cmFuZG9tKCVzKScgJSBjb3VudCwKKyAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKHJlcHIoZGF0YSkpJywKKyAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCknLAorICAgICAgICAgICAgJ3ByaW50ID4+IHN5cy5zdGRlcnIsIChsZW4oZGF0YSksIGRhdGEpJykpCisgICAgICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlXQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRfbGluZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAwLCAocC53YWl0KCksIGVycikpCisgICAgICAgIG91dCA9IGV2YWwob3V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXQpLCBjb3VudCwgZXJyKQorICAgICAgICByZXR1cm4gb3V0CisKKyAgICBkZWYgdGVzdF91cmFuZG9tX3N1YnByb2Nlc3Moc2VsZik6CisgICAgICAgIGRhdGExID0gc2VsZi5nZXRfdXJhbmRvbV9zdWJwcm9jZXNzKDE2KQorICAgICAgICBkYXRhMiA9IHNlbGYuZ2V0X3VyYW5kb21fc3VicHJvY2VzcygxNikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhMSwgZGF0YTIpCisKKyAgICBkZWYgdGVzdF9leGVjdnBlX3dpdGhfYmFkX2FyZ2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9zLmV4ZWN2cGUsICdub3RlcGFkJywgW10sIE5vbmUpCisKK2NsYXNzIFdpbjMyRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnJlbmFtZSwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgdGVzdF9zdXBwb3J0LlRFU1RGTisiLmJhayIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MucmVtb3ZlLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfY2hkaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2hkaXIsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9ta2RpcihzZWxmKToKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLm1rZGlyLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X3V0aW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnV0aW1lLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2htb2Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2htb2QsIHRlc3Rfc3VwcG9ydC5URVNURk4sIDApCisKK2NsYXNzIFRlc3RJbnZhbGlkRkQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHNpbmdsZXMgPSBbImZjaGRpciIsICJmZG9wZW4iLCAiZHVwIiwgImZkYXRhc3luYyIsICJmc3RhdCIsCisgICAgICAgICAgICAgICAiZnN0YXR2ZnMiLCAiZnN5bmMiLCAidGNnZXRwZ3JwIiwgInR0eW5hbWUiXQorICAgICNzaW5nbGVzLmFwcGVuZCgiY2xvc2UiKQorICAgICNXZSBvbWl0IGNsb3NlIGJlY2F1c2UgaXQgZG9lc24nciByYWlzZSBhbiBleGNlcHRpb24gb24gc29tZSBwbGF0Zm9ybXMKKyAgICBkZWYgZ2V0X3NpbmdsZShmKToKKyAgICAgICAgZGVmIGhlbHBlcihzZWxmKToKKyAgICAgICAgICAgIGlmICBoYXNhdHRyKG9zLCBmKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKGdldGF0dHIob3MsIGYpKQorICAgICAgICByZXR1cm4gaGVscGVyCisgICAgZm9yIGYgaW4gc2luZ2xlczoKKyAgICAgICAgbG9jYWxzKClbInRlc3RfIitmXSA9IGdldF9zaW5nbGUoZikKKworICAgIGRlZiBjaGVjayhzZWxmLCBmLCAqYXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYodGVzdF9zdXBwb3J0Lm1ha2VfYmFkX2ZkKCksICphcmdzKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FQkFERikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIgZGlkbid0IHJhaXNlIGEgT1NFcnJvciB3aXRoIGEgYmFkIGZpbGUgZGVzY3JpcHRvciIKKyAgICAgICAgICAgICAgICAgICAgICAlIGYpCisKKyAgICBkZWYgdGVzdF9pc2F0dHkoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIob3MsICJpc2F0dHkiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuaXNhdHR5KHRlc3Rfc3VwcG9ydC5tYWtlX2JhZF9mZCgpKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9jbG9zZXJhbmdlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2xvc2VyYW5nZSIpOgorICAgICAgICAgICAgZmQgPSB0ZXN0X3N1cHBvcnQubWFrZV9iYWRfZmQoKQorICAgICAgICAgICAgIyBNYWtlIHN1cmUgbm9uZSBvZiB0aGUgZGVzY3JpcHRvcnMgd2UgYXJlIGFib3V0IHRvIGNsb3NlIGFyZQorICAgICAgICAgICAgIyBjdXJyZW50bHkgdmFsaWQgKGlzc3VlIDY1NDIpLgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgICAgIHRyeTogb3MuZnN0YXQoZmQraSkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpIDwgMjoKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBhY3F1aXJlIGEgcmFuZ2Ugb2YgaW52YWxpZCBmaWxlIGRlc2NyaXB0b3JzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuY2xvc2VyYW5nZShmZCwgZmQgKyBpLTEpLCBOb25lKQorCisgICAgZGVmIHRlc3RfZHVwMihzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImR1cDIiKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2sob3MuZHVwMiwgMjApCisKKyAgICBkZWYgdGVzdF9mY2htb2Qoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIob3MsICJmY2htb2QiKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2sob3MuZmNobW9kLCAwKQorCisgICAgZGVmIHRlc3RfZmNob3duKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiZmNob3duIik6CisgICAgICAgICAgICBzZWxmLmNoZWNrKG9zLmZjaG93biwgLTEsIC0xKQorCisgICAgZGVmIHRlc3RfZnBhdGhjb25mKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiZnBhdGhjb25mIik6CisgICAgICAgICAgICBzZWxmLmNoZWNrKG9zLmZwYXRoY29uZiwgIlBDX05BTUVfTUFYIikKKworICAgIGRlZiB0ZXN0X2Z0cnVuY2F0ZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImZ0cnVuY2F0ZSIpOgorICAgICAgICAgICAgc2VsZi5jaGVjayhvcy5mdHJ1bmNhdGUsIDApCisKKyAgICBkZWYgdGVzdF9sc2VlayhzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxzZWVrIik6CisgICAgICAgICAgICBzZWxmLmNoZWNrKG9zLmxzZWVrLCAwLCAwKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInJlYWQiKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2sob3MucmVhZCwgMSkKKworICAgIGRlZiB0ZXN0X3Rjc2V0cGdycHQoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIob3MsICJ0Y3NldHBncnAiKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2sob3MudGNzZXRwZ3JwLCAwKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIob3MsICJ3cml0ZSIpOgorICAgICAgICAgICAgc2VsZi5jaGVjayhvcy53cml0ZSwgIiAiKQorCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICBjbGFzcyBXaW4zMkVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBQb3NpeFVpZEdpZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3NldHVpZCcpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc2V0dWlkKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXR1aWQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0dWlkLCAxPDwzMikKKworICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc2V0Z2lkJyk6CisgICAgICAgICAgICBkZWYgdGVzdF9zZXRnaWQoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGdpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRnaWQsIDE8PDMyKQorCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdzZXRldWlkJyk6CisgICAgICAgICAgICBkZWYgdGVzdF9zZXRldWlkKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRldWlkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldGV1aWQsIDE8PDMyKQorCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdzZXRlZ2lkJyk6CisgICAgICAgICAgICBkZWYgdGVzdF9zZXRlZ2lkKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRlZ2lkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldGVnaWQsIDE8PDMyKQorCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdzZXRyZXVpZCcpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc2V0cmV1aWQoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHJldWlkLCAwLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJldWlkLCAxPDwzMiwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZXVpZCwgMCwgMTw8MzIpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NldHJldWlkX25lZzEoc2VsZik6CisgICAgICAgICAgICAgICAgIyBOZWVkcyB0byBhY2NlcHQgLTEuICBXZSBydW4gdGhpcyBpbiBhIHN1YnByb2Nlc3MgdG8gYXZvaWQKKyAgICAgICAgICAgICAgICAjIGFsdGVyaW5nIHRoZSB0ZXN0IHJ1bm5lcidzIHByb2Nlc3Mgc3RhdGUgKGlzc3VlODA0NSkuCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBvcyxzeXM7b3Muc2V0cmV1aWQoLTEsLTEpO3N5cy5leGl0KDApJ10pCisKKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3NldHJlZ2lkJyk6CisgICAgICAgICAgICBkZWYgdGVzdF9zZXRyZWdpZChzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0cmVnaWQsIDAsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmVnaWQsIDE8PDMyLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJlZ2lkLCAwLCAxPDwzMikKKworICAgICAgICAgICAgZGVmIHRlc3Rfc2V0cmVnaWRfbmVnMShzZWxmKToKKyAgICAgICAgICAgICAgICAjIE5lZWRzIHRvIGFjY2VwdCAtMS4gIFdlIHJ1biB0aGlzIGluIGEgc3VicHJvY2VzcyB0byBhdm9pZAorICAgICAgICAgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWworICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZWdpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKK2Vsc2U6CisgICAgY2xhc3MgUG9zaXhVaWRHaWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCitjbGFzcyBXaW4zMktpbGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF9raWxsKHNlbGYsIHNpZyk6CisgICAgICAgICMgU3RhcnQgc3lzLmV4ZWN1dGFibGUgYXMgYSBzdWJwcm9jZXNzIGFuZCBjb21tdW5pY2F0ZSBmcm9tIHRoZQorICAgICAgICAjIHN1YnByb2Nlc3MgdG8gdGhlIHBhcmVudCB0aGF0IHRoZSBpbnRlcnByZXRlciBpcyByZWFkeS4gV2hlbiBpdAorICAgICAgICAjIGJlY29tZXMgcmVhZHksIHNlbmQgKnNpZyogdmlhIG9zLmtpbGwgdG8gdGhlIHN1YnByb2Nlc3MgYW5kIGNoZWNrCisgICAgICAgICMgdGhhdCB0aGUgcmV0dXJuIGNvZGUgaXMgZXF1YWwgdG8gKnNpZyouCisgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCisgICAgICAgIGltcG9ydCBtc3ZjcnQKKworICAgICAgICAjIFNpbmNlIHdlIGNhbid0IGFjY2VzcyB0aGUgY29udGVudHMgb2YgdGhlIHByb2Nlc3MnIHN0ZG91dCB1bnRpbCB0aGUKKyAgICAgICAgIyBwcm9jZXNzIGhhcyBleGl0ZWQsIHVzZSBQZWVrTmFtZWRQaXBlIHRvIHNlZSB3aGF0J3MgaW5zaWRlIHN0ZG91dAorICAgICAgICAjIHdpdGhvdXQgd2FpdGluZy4gVGhpcyBpcyBkb25lIHNvIHdlIGNhbiB0ZWxsIHRoYXQgdGhlIGludGVycHJldGVyCisgICAgICAgICMgaXMgc3RhcnRlZCBhbmQgcnVubmluZyBhdCBhIHBvaW50IHdoZXJlIGl0IGNvdWxkIGhhbmRsZSBhIHNpZ25hbC4KKyAgICAgICAgUGVla05hbWVkUGlwZSA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIuUGVla05hbWVkUGlwZQorICAgICAgICBQZWVrTmFtZWRQaXBlLnJlc3R5cGUgPSB3aW50eXBlcy5CT09MCisgICAgICAgIFBlZWtOYW1lZFBpcGUuYXJndHlwZXMgPSAod2ludHlwZXMuSEFORExFLCAjIFBpcGUgaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLlBPSU5URVIoY3R5cGVzLmNfY2hhciksICMgc3Rkb3V0IGJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbnR5cGVzLkRXT1JELCAjIEJ1ZmZlciBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLlBPSU5URVIod2ludHlwZXMuRFdPUkQpLCAjIGJ5dGVzIHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUih3aW50eXBlcy5EV09SRCksICMgYnl0ZXMgYXZhaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUih3aW50eXBlcy5EV09SRCkpICMgYnl0ZXMgbGVmdAorICAgICAgICBtc2cgPSAicnVubmluZyIKKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQud3JpdGUoJ3t9Jyk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQuZmx1c2goKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5wdXQoKSIuZm9ybWF0KG1zZyldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm9jLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHByb2Muc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocHJvYy5zdGRpbi5jbG9zZSkKKworICAgICAgICBjb3VudCwgbWF4ID0gMCwgMTAwCisgICAgICAgIHdoaWxlIGNvdW50IDwgbWF4IGFuZCBwcm9jLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgIyBDcmVhdGUgYSBzdHJpbmcgYnVmZmVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2Ygc3Rkb3V0IGZyb20gdGhlIHBpcGUKKyAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihsZW4obXNnKSkKKyAgICAgICAgICAgICMgT2J0YWluIHRoZSB0ZXh0IGN1cnJlbnRseSBpbiBwcm9jLnN0ZG91dAorICAgICAgICAgICAgIyBCeXRlcyByZWFkL2F2YWlsL2xlZnQgYXJlIGxlZnQgYXMgTlVMTCBhbmQgdW51c2VkCisgICAgICAgICAgICByc2x0ID0gUGVla05hbWVkUGlwZShtc3ZjcnQuZ2V0X29zZmhhbmRsZShwcm9jLnN0ZG91dC5maWxlbm8oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGN0eXBlcy5zaXplb2YoYnVmKSwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocnNsdCwgMCwgIlBlZWtOYW1lZFBpcGUgZmFpbGVkIikKKyAgICAgICAgICAgIGlmIGJ1Zi52YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYnVmLnZhbHVlKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkIG5vdCByZWNlaXZlIGNvbW11bmljYXRpb24gZnJvbSB0aGUgc3VicHJvY2VzcyIpCisKKyAgICAgICAgb3Mua2lsbChwcm9jLnBpZCwgc2lnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Mud2FpdCgpLCBzaWcpCisKKyAgICBkZWYgdGVzdF9raWxsX3NpZ3Rlcm0oc2VsZik6CisgICAgICAgICMgU0lHVEVSTSBkb2Vzbid0IG1lYW4gYW55dGhpbmcgc3BlY2lhbCwgYnV0IG1ha2Ugc3VyZSBpdCB3b3JrcworICAgICAgICBzZWxmLl9raWxsKHNpZ25hbC5TSUdURVJNKQorCisgICAgZGVmIHRlc3Rfa2lsbF9pbnQoc2VsZik6CisgICAgICAgICMgb3Mua2lsbCBvbiBXaW5kb3dzIGNhbiB0YWtlIGFuIGludCB3aGljaCBnZXRzIHNldCBhcyB0aGUgZXhpdCBjb2RlCisgICAgICAgIHNlbGYuX2tpbGwoMTAwKQorCisgICAgZGVmIF9raWxsX3dpdGhfZXZlbnQoc2VsZiwgZXZlbnQsIG5hbWUpOgorICAgICAgICB0YWduYW1lID0gInRlc3Rfb3NfJXMiICUgdXVpZC51dWlkMSgpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIDEsIHRhZ25hbWUpCisgICAgICAgIG1bMF0gPSAnMCcKKyAgICAgICAgIyBSdW4gYSBzY3JpcHQgd2hpY2ggaGFzIGNvbnNvbGUgY29udHJvbCBoYW5kbGluZyBlbmFibGVkLgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aW5fY29uc29sZV9oYW5kbGVyLnB5IiksIHRhZ25hbWVdLAorICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uZmxhZ3M9c3VicHJvY2Vzcy5DUkVBVEVfTkVXX1BST0NFU1NfR1JPVVApCisgICAgICAgICMgTGV0IHRoZSBpbnRlcnByZXRlciBzdGFydHVwIGJlZm9yZSB3ZSBzZW5kIHNpZ25hbHMuIFNlZSAjMzEzNy4KKyAgICAgICAgY291bnQsIG1heCA9IDAsIDIwCisgICAgICAgIHdoaWxlIGNvdW50IDwgbWF4IGFuZCBwcm9jLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbVswXSA9PSAnMSc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTdWJwcm9jZXNzIGRpZG4ndCBmaW5pc2ggaW5pdGlhbGl6YXRpb24iKQorICAgICAgICBvcy5raWxsKHByb2MucGlkLCBldmVudCkKKyAgICAgICAgIyBwcm9jLnNlbmRfc2lnbmFsKGV2ZW50KSBjb3VsZCBhbHNvIGJlIGRvbmUgaGVyZS4KKyAgICAgICAgIyBBbGxvdyB0aW1lIGZvciB0aGUgc2lnbmFsIHRvIGJlIHBhc3NlZCBhbmQgdGhlIHByb2Nlc3MgdG8gZXhpdC4KKyAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgIGlmIG5vdCBwcm9jLnBvbGwoKToKKyAgICAgICAgICAgICMgRm9yY2VmdWxseSBraWxsIHRoZSBwcm9jZXNzIGlmIHdlIHdlcmVuJ3QgYWJsZSB0byBzaWduYWwgaXQuCisgICAgICAgICAgICBvcy5raWxsKHByb2MucGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzdWJwcm9jZXNzIGRpZCBub3Qgc3RvcCBvbiB7fSIuZm9ybWF0KG5hbWUpKQorCisgICAgQHVuaXR0ZXN0LnNraXAoInN1YnByb2Nlc3NlcyBhcmVuJ3QgaW5oZXJpdGluZyBDVFJMK0MgcHJvcGVydHkiKQorICAgIGRlZiB0ZXN0X0NUUkxfQ19FVkVOVChzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCisgICAgICAgIGltcG9ydCBjdHlwZXMKKworICAgICAgICAjIE1ha2UgYSBOVUxMIHZhbHVlIGJ5IGNyZWF0aW5nIGEgcG9pbnRlciB3aXRoIG5vIGFyZ3VtZW50LgorICAgICAgICBOVUxMID0gY3R5cGVzLlBPSU5URVIoY3R5cGVzLmNfaW50KSgpCisgICAgICAgIFNldENvbnNvbGVDdHJsSGFuZGxlciA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIuU2V0Q29uc29sZUN0cmxIYW5kbGVyCisgICAgICAgIFNldENvbnNvbGVDdHJsSGFuZGxlci5hcmd0eXBlcyA9IChjdHlwZXMuUE9JTlRFUihjdHlwZXMuY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ludHlwZXMuQk9PTCkKKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyLnJlc3R5cGUgPSB3aW50eXBlcy5CT09MCisKKyAgICAgICAgIyBDYWxsaW5nIHRoaXMgd2l0aCBOVUxMIGFuZCBGQUxTRSBjYXVzZXMgdGhlIGNhbGxpbmcgcHJvY2VzcyB0bworICAgICAgICAjIGhhbmRsZSBDVFJMK0MsIHJhdGhlciB0aGFuIGlnbm9yZSBpdC4gVGhpcyBwcm9wZXJ0eSBpcyBpbmhlcml0ZWQKKyAgICAgICAgIyBieSBzdWJwcm9jZXNzZXMuCisgICAgICAgIFNldENvbnNvbGVDdHJsSGFuZGxlcihOVUxMLCAwKQorCisgICAgICAgIHNlbGYuX2tpbGxfd2l0aF9ldmVudChzaWduYWwuQ1RSTF9DX0VWRU5ULCAiQ1RSTF9DX0VWRU5UIikKKworICAgIGRlZiB0ZXN0X0NUUkxfQlJFQUtfRVZFTlQoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfd2l0aF9ldmVudChzaWduYWwuQ1RSTF9CUkVBS19FVkVOVCwgIkNUUkxfQlJFQUtfRVZFTlQiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBGaWxlVGVzdHMsCisgICAgICAgIFRlbXBvcmFyeUZpbGVUZXN0cywKKyAgICAgICAgU3RhdEF0dHJpYnV0ZVRlc3RzLAorICAgICAgICBFbnZpcm9uVGVzdHMsCisgICAgICAgIFdhbGtUZXN0cywKKyAgICAgICAgTWFrZWRpclRlc3RzLAorICAgICAgICBEZXZOdWxsVGVzdHMsCisgICAgICAgIFVSYW5kb21UZXN0cywKKyAgICAgICAgV2luMzJFcnJvclRlc3RzLAorICAgICAgICBUZXN0SW52YWxpZEZELAorICAgICAgICBQb3NpeFVpZEdpZFRlc3RzLAorICAgICAgICBXaW4zMktpbGxUZXN0cworICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTM1N2EwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKQEAgLTAsMCArMSwxNzQgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ2F1ZGlvJykKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUKKworb3NzYXVkaW9kZXYgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnb3NzYXVkaW9kZXYnKQorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzeXMKK2ltcG9ydCBzdW5hdQoraW1wb3J0IHRpbWUKK2ltcG9ydCBhdWRpb29wCitpbXBvcnQgdW5pdHRlc3QKKworIyBBcmdnaCwgQUZNVF9TMTZfTkUgbm90IGRlZmluZWQgb24gYWxsIHBsYXRmb3JtcyAtLSBzZWVtcyB0byBiZSBhCisjIGZhaXJseSByZWNlbnQgYWRkaXRpb24gdG8gT1NTLgordHJ5OgorICAgIGZyb20gb3NzYXVkaW9kZXYgaW1wb3J0IEFGTVRfUzE2X05FCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKKyAgICAgICAgQUZNVF9TMTZfTkUgPSBvc3NhdWRpb2Rldi5BRk1UX1MxNl9MRQorICAgIGVsc2U6CisgICAgICAgIEFGTVRfUzE2X05FID0gb3NzYXVkaW9kZXYuQUZNVF9TMTZfQkUKKworCitkZWYgcmVhZF9zb3VuZF9maWxlKHBhdGgpOgorICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmcDoKKyAgICAgICAgYXUgPSBzdW5hdS5vcGVuKGZwKQorICAgICAgICByYXRlID0gYXUuZ2V0ZnJhbWVyYXRlKCkKKyAgICAgICAgbmNoYW5uZWxzID0gYXUuZ2V0bmNoYW5uZWxzKCkKKyAgICAgICAgZW5jb2RpbmcgPSBhdS5fZW5jb2RpbmcKKyAgICAgICAgZnAuc2VlaygwKQorICAgICAgICBkYXRhID0gZnAucmVhZCgpCisKKyAgICBpZiBlbmNvZGluZyAhPSBzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX01VTEFXXzg6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiRXhwZWN0IC5hdSBmaWxlIHdpdGggOC1iaXQgbXUtbGF3IHNhbXBsZXMiKQorCisgICAgIyBDb252ZXJ0IHRoZSBkYXRhIHRvIDE2LWJpdCBzaWduZWQuCisgICAgZGF0YSA9IGF1ZGlvb3AudWxhdzJsaW4oZGF0YSwgMikKKyAgICByZXR1cm4gKGRhdGEsIHJhdGUsIDE2LCBuY2hhbm5lbHMpCisKK2NsYXNzIE9TU0F1ZGlvRGV2VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHBsYXlfc291bmRfZmlsZShzZWxmLCBkYXRhLCByYXRlLCBzc2l6ZSwgbmNoYW5uZWxzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZHNwID0gb3NzYXVkaW9kZXYub3BlbigndycpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PREVWLCBlcnJuby5FQlVTWSk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAjIGF0IGxlYXN0IGNoZWNrIHRoYXQgdGhlc2UgbWV0aG9kcyBjYW4gYmUgaW52b2tlZAorICAgICAgICBkc3AuYnVmc2l6ZSgpCisgICAgICAgIGRzcC5vYnVmY291bnQoKQorICAgICAgICBkc3Aub2J1ZmZyZWUoKQorICAgICAgICBkc3AuZ2V0cHRyKCkKKyAgICAgICAgZHNwLmZpbGVubygpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHJlYWQtb25seSBhdHRyaWJ1dGVzIHdvcmsuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZHNwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3AubmFtZSwgIi9kZXYvZHNwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3AubW9kZSwgInciLCAiYmFkIGRzcC5tb2RlOiAlciIgJSBkc3AubW9kZSkKKworICAgICAgICAjIEFuZCBtYWtlIHN1cmUgdGhleSdyZSByZWFsbHkgcmVhZC1vbmx5LgorICAgICAgICBmb3IgYXR0ciBpbiAoJ2Nsb3NlZCcsICduYW1lJywgJ21vZGUnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKGRzcCwgYXR0ciwgNDIpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJkc3AuJXMgbm90IHJlYWQtb25seSIgJSBhdHRyKQorCisgICAgICAgICMgQ29tcHV0ZSBleHBlY3RlZCBydW5uaW5nIHRpbWUgb2Ygc291bmQgc2FtcGxlIChpbiBzZWNvbmRzKS4KKyAgICAgICAgZXhwZWN0ZWRfdGltZSA9IGZsb2F0KGxlbihkYXRhKSkgLyAoc3NpemUvLzgpIC8gbmNoYW5uZWxzIC8gcmF0ZQorCisgICAgICAgICMgc2V0IHBhcmFtZXRlcnMgYmFzZWQgb24gLmF1IGZpbGUgaGVhZGVycworICAgICAgICBkc3Auc2V0cGFyYW1ldGVycyhBRk1UX1MxNl9ORSwgbmNoYW5uZWxzLCByYXRlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKGV4cGVjdGVkX3RpbWUgLSAzLjUxKSA8IDFlLTIsIGV4cGVjdGVkX3RpbWUpCisgICAgICAgIHQxID0gdGltZS50aW1lKCkKKyAgICAgICAgZHNwLndyaXRlKGRhdGEpCisgICAgICAgIGRzcC5jbG9zZSgpCisgICAgICAgIHQyID0gdGltZS50aW1lKCkKKyAgICAgICAgZWxhcHNlZF90aW1lID0gdDIgLSB0MQorCisgICAgICAgIHBlcmNlbnRfZGlmZiA9IChhYnMoZWxhcHNlZF90aW1lIC0gZXhwZWN0ZWRfdGltZSkgLyBleHBlY3RlZF90aW1lKSAqIDEwMAorICAgICAgICBzZWxmLmFzc2VydFRydWUocGVyY2VudF9kaWZmIDw9IDEwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAiZWxhcHNlZCB0aW1lID4gMTAlIG9mZiBvZiBleHBlY3RlZCB0aW1lIikKKworICAgIGRlZiBzZXRfcGFyYW1ldGVycyhzZWxmLCBkc3ApOgorICAgICAgICAjIFR3byBjb25maWd1cmF0aW9ucyBmb3IgdGVzdGluZzoKKyAgICAgICAgIyAgIGNvbmZpZzEgKDgtYml0LCBtb25vLCA4IGtIeikgc2hvdWxkIHdvcmsgb24gZXZlbiB0aGUgbW9zdAorICAgICAgICAjICAgICAgYW5jaWVudCBhbmQgY3J1ZnR5IHNvdW5kIGNhcmQsIGJ1dCBtYXliZSBub3Qgb24gc3BlY2lhbC0KKyAgICAgICAgIyAgICAgIHB1cnBvc2UgaGlnaC1lbmQgaGFyZHdhcmUKKyAgICAgICAgIyAgIGNvbmZpZzIgKDE2LWJpdCwgc3RlcmVvLCA0NC4xa0h6KSBzaG91bGQgd29yayBvbiBhbGwgYnV0IHRoZQorICAgICAgICAjICAgICAgbW9zdCBhbmNpZW50IGFuZCBjcnVmdHkgaGFyZHdhcmUKKyAgICAgICAgY29uZmlnMSA9IChvc3NhdWRpb2Rldi5BRk1UX1U4LCAxLCA4MDAwKQorICAgICAgICBjb25maWcyID0gKEFGTVRfUzE2X05FLCAyLCA0NDEwMCkKKworICAgICAgICBmb3IgY29uZmlnIGluIFtjb25maWcxLCBjb25maWcyXToKKyAgICAgICAgICAgIChmbXQsIGNoYW5uZWxzLCByYXRlKSA9IGNvbmZpZworICAgICAgICAgICAgaWYgKGRzcC5zZXRmbXQoZm10KSA9PSBmbXQgYW5kCisgICAgICAgICAgICAgICAgZHNwLmNoYW5uZWxzKGNoYW5uZWxzKSA9PSBjaGFubmVscyBhbmQKKyAgICAgICAgICAgICAgICBkc3Auc3BlZWQocmF0ZSkgPT0gcmF0ZSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigidW5hYmxlIHRvIHNldCBhdWRpbyBzYW1wbGluZyBwYXJhbWV0ZXJzOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInlvdSBtdXN0IGhhdmUgcmVhbGx5IHdlaXJkIGF1ZGlvIGhhcmR3YXJlIikKKworICAgICAgICAjIHNldHBhcmFtZXRlcnMoKSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGhpcyBjb25maWd1cmF0aW9uIGluCisgICAgICAgICMgZWl0aGVyIHN0cmljdCBvciBub24tc3RyaWN0IG1vZGUuCisgICAgICAgIHJlc3VsdCA9IGRzcC5zZXRwYXJhbWV0ZXJzKGZtdCwgY2hhbm5lbHMsIHJhdGUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKGZtdCwgY2hhbm5lbHMsIHJhdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRwYXJhbWV0ZXJzJXI6IHJldHVybmVkICVyIiAlIChjb25maWcsIHJlc3VsdCkpCisKKyAgICAgICAgcmVzdWx0ID0gZHNwLnNldHBhcmFtZXRlcnMoZm10LCBjaGFubmVscywgcmF0ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChmbXQsIGNoYW5uZWxzLCByYXRlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2V0cGFyYW1ldGVycyVyOiByZXR1cm5lZCAlciIgJSAoY29uZmlnLCByZXN1bHQpKQorCisgICAgZGVmIHNldF9iYWRfcGFyYW1ldGVycyhzZWxmLCBkc3ApOgorICAgICAgICAjIE5vdyB0cnkgc29tZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBwcmVzdW1hYmx5IGJvZ3VzOiBlZy4gMzAwCisgICAgICAgICMgY2hhbm5lbHMgY3VycmVudGx5IGV4Y2VlZHMgZXZlbiBIb2xseXdvb2QncyBhbWJpdGlvbnMsIGFuZAorICAgICAgICAjIG5lZ2F0aXZlIHNhbXBsaW5nIHJhdGUgaXMgdXR0ZXIgbm9uc2Vuc2UuICBzZXRwYXJhbWV0ZXJzKCkgc2hvdWxkCisgICAgICAgICMgYWNjZXB0IHRoZXNlIGluIG5vbi1zdHJpY3QgbW9kZSwgcmV0dXJuaW5nIHNvbWV0aGluZyBvdGhlciB0aGFuCisgICAgICAgICMgd2FzIHJlcXVlc3RlZCwgYnV0IHNob3VsZCBiYXJmIGluIHN0cmljdCBtb2RlLgorICAgICAgICBmbXQgPSBBRk1UX1MxNl9ORQorICAgICAgICByYXRlID0gNDQxMDAKKyAgICAgICAgY2hhbm5lbHMgPSAyCisgICAgICAgIGZvciBjb25maWcgaW4gWyhmbXQsIDMwMCwgcmF0ZSksICAgICAgICMgcmlkaWN1bG91cyBuY2hhbm5lbHMKKyAgICAgICAgICAgICAgICAgICAgICAgKGZtdCwgLTUsIHJhdGUpLCAgICAgICAgIyBpbXBvc3NpYmxlIG5jaGFubmVscworICAgICAgICAgICAgICAgICAgICAgICAoZm10LCBjaGFubmVscywgLTUwKSwgICAjIGltcG9zc2libGUgcmF0ZQorICAgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICAoZm10LCBjaGFubmVscywgcmF0ZSkgPSBjb25maWcKKyAgICAgICAgICAgIHJlc3VsdCA9IGRzcC5zZXRwYXJhbWV0ZXJzKGZtdCwgY2hhbm5lbHMsIHJhdGUsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWRseSBnb3QgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24iKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZHNwLnNldHBhcmFtZXRlcnMoZm10LCBjaGFubmVscywgcmF0ZSwgVHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBvc3NhdWRpb2Rldi5PU1NBdWRpb0Vycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIE9TU0F1ZGlvRXJyb3IiKQorCisgICAgZGVmIHRlc3RfcGxheWJhY2soc2VsZik6CisgICAgICAgIHNvdW5kX2luZm8gPSByZWFkX3NvdW5kX2ZpbGUoZmluZGZpbGUoJ2F1ZGlvdGVzdC5hdScpKQorICAgICAgICBzZWxmLnBsYXlfc291bmRfZmlsZSgqc291bmRfaW5mbykKKworICAgIGRlZiB0ZXN0X3NldF9wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICBkc3AgPSBvc3NhdWRpb2Rldi5vcGVuKCJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXRfcGFyYW1ldGVycyhkc3ApCisKKyAgICAgICAgICAgICMgRGlzYWJsZWQgYmVjYXVzZSBpdCBmYWlscyB1bmRlciBMaW51eCAyLjYgd2l0aCBBTFNBJ3MgT1NTCisgICAgICAgICAgICAjIGVtdWxhdGlvbiBsYXllci4KKyAgICAgICAgICAgICNzZWxmLnNldF9iYWRfcGFyYW1ldGVycyhkc3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkc3AuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRzcC5jbG9zZWQpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRyeToKKyAgICAgICAgZHNwID0gb3NzYXVkaW9kZXYub3BlbigndycpCisgICAgZXhjZXB0IChvc3NhdWRpb2Rldi5lcnJvciwgSU9FcnJvciksIG1zZzoKKyAgICAgICAgaWYgbXNnLmFyZ3NbMF0gaW4gKGVycm5vLkVBQ0NFUywgZXJybm8uRU5PRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PREVWLCBlcnJuby5FQlVTWSk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChtc2cpCisgICAgICAgIHJhaXNlCisgICAgZHNwLmNsb3NlKCkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhNzYyYwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BhcnNlci5weQpAQCAtMCwwICsxLDY1NyBAQAoraW1wb3J0IHBhcnNlcgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCisKKyMKKyMgIEZpcnN0LCB3ZSB0ZXN0IHRoYXQgd2UgY2FuIGdlbmVyYXRlIHRyZWVzIGZyb20gdmFsaWQgc291cmNlIGZyYWdtZW50cywKKyMgIGFuZCB0aGF0IHRoZXNlIHZhbGlkIHRyZWVzIGFyZSBpbmRlZWQgYWxsb3dlZCBieSB0aGUgdHJlZS1sb2FkaW5nIHNpZGUKKyMgIG9mIHRoZSBwYXJzZXIgbW9kdWxlLgorIworCitjbGFzcyBSb3VuZHRyaXBMZWdhbFN5bnRheFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiByb3VuZHRyaXAoc2VsZiwgZiwgcyk6CisgICAgICAgIHN0MSA9IGYocykKKyAgICAgICAgdCA9IHN0MS50b3R1cGxlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3QyID0gcGFyc2VyLnNlcXVlbmNlMnN0KHQpCisgICAgICAgIGV4Y2VwdCBwYXJzZXIuUGFyc2VyRXJyb3IsIHdoeToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiY291bGQgbm90IHJvdW5kdHJpcCAlcjogJXMiICUgKHMsIHdoeSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBzdDIudG90dXBsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgcmUtZ2VuZXJhdGUgc3ludGF4IHRyZWUiKQorCisgICAgZGVmIGNoZWNrX2V4cHIoc2VsZiwgcyk6CisgICAgICAgIHNlbGYucm91bmR0cmlwKHBhcnNlci5leHByLCBzKQorCisgICAgZGVmIHRlc3RfZmxhZ3NfcGFzc2VkKHNlbGYpOgorICAgICAgICAjIFRoZSB1bmljb2RlIGxpdGVyYWxzIGZsYWdzIGhhcyB0byBiZSBwYXNzZWQgZnJvbSB0aGUgcGFzZXIgdG8gQVNUCisgICAgICAgICMgZ2VuZXJhdGlvbi4KKyAgICAgICAgc3VpdGUgPSBwYXJzZXIuc3VpdGUoImZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFsczsgeCA9ICcnIikKKyAgICAgICAgY29kZSA9IHN1aXRlLmNvbXBpbGUoKQorICAgICAgICBzY29wZSA9IHt9CisgICAgICAgIGV4ZWMgY29kZSBpbiBzY29wZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2NvcGVbIngiXSwgdW5pY29kZSkKKworICAgIGRlZiBjaGVja19zdWl0ZShzZWxmLCBzKToKKyAgICAgICAgc2VsZi5yb3VuZHRyaXAocGFyc2VyLnN1aXRlLCBzKQorCisgICAgZGVmIHRlc3RfeWllbGRfc3RhdGVtZW50KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiB5aWVsZCAxIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoKTogeWllbGQiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiB4ICs9IHlpZWxkIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoKTogeCA9IHlpZWxkIDEiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiB4ID0geSA9IHlpZWxkIDEiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiB4ID0geWllbGQiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiB4ID0geSA9IHlpZWxkIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoKTogMSArICh5aWVsZCkqMiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCk6ICh5aWVsZCAxKSoyIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoKTogcmV0dXJuOyB5aWVsZCAxIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoKTogeWllbGQgMTsgcmV0dXJuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoKTpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZvciB4IGluIHJhbmdlKDMwKTpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB5aWVsZCB4XG4iKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgaWYgKHlpZWxkKTpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB5aWVsZCB4XG4iKQorCisgICAgZGVmIHRlc3RfZXhwcmVzc2lvbnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKDEpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7MToxfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiezE6MSwgMjoyLCAzOjN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7MToxLCAyOjIsIDM6Myx9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7MX0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInsxLCAyLCAzfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiezEsIDIsIDMsfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiW10iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIlsxXSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiWzEsIDIsIDNdIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbMSwgMiwgMyxdIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCIoKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiKDEsKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiKDEsIDIsIDMpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCIoMSwgMiwgMywpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbeCoqMyBmb3IgeCBpbiByYW5nZSgyMCldIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbeCoqMyBmb3IgeCBpbiByYW5nZSgyMCkgaWYgeCAlIDNdIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbeCoqMyBmb3IgeCBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeCAlIDNdIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbeCt5IGZvciB4IGluIHJhbmdlKDMwKSBmb3IgeSBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeSAlIDNdIikKKyAgICAgICAgI3NlbGYuY2hlY2tfZXhwcigiW3ggZm9yIHggaW4gbGFtYmRhOiBUcnVlLCBsYW1iZGE6IEZhbHNlIGlmIHgoKV0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxpc3QoeCoqMyBmb3IgeCBpbiByYW5nZSgyMCkpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsaXN0KHgqKjMgZm9yIHggaW4gcmFuZ2UoMjApIGlmIHggJSAzKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGlzdCh4KiozIGZvciB4IGluIHJhbmdlKDIwKSBpZiB4ICUgMiBpZiB4ICUgMykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxpc3QoeCt5IGZvciB4IGluIHJhbmdlKDMwKSBmb3IgeSBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeSAlIDMpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMyBmb3IgeCBpbiByYW5nZSgzMCl9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMyBmb3IgeCBpbiByYW5nZSgzMCkgaWYgeCAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMyBmb3IgeCBpbiByYW5nZSgzMCkgaWYgeCAlIDIgaWYgeCAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCt5IGZvciB4IGluIHJhbmdlKDMwKSBmb3IgeSBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeSAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMzogeSoqMiBmb3IgeCwgeSBpbiB6aXAocmFuZ2UoMzApLCByYW5nZSgzMCkpfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigie3gqKjM6IHkqKjIgZm9yIHgsIHkgaW4gemlwKHJhbmdlKDMwKSwgcmFuZ2UoMzApKSBpZiB4ICUgM30iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInt4KiozOiB5KioyIGZvciB4LCB5IGluIHppcChyYW5nZSgzMCksIHJhbmdlKDMwKSkgaWYgeCAlIDMgaWYgeSAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eDp5IGZvciB4IGluIHJhbmdlKDMwKSBmb3IgeSBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeSAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oKmFyZ3MpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oKmFyZ3MsICoqa3cpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oKiprdykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyhrZXk9dmFsdWUpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oa2V5PXZhbHVlLCAqYXJncykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyhrZXk9dmFsdWUsICphcmdzLCAqKmt3KSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKGtleT12YWx1ZSwgKiprdykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyhhLCBiLCBjLCAqYXJncykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyhhLCBiLCBjLCAqYXJncywgKiprdykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyhhLCBiLCBjLCAqKmt3KSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKGEsICphcmdzLCBrZXl3b3JkPTIzKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vICsgYmFyIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28gLSBiYXIiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyAqIGJhciIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vIC8gYmFyIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28gLy8gYmFyIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsYW1iZGE6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSB4OiAwIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsYW1iZGEgKnk6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSAqeSwgKip6OiAwIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsYW1iZGEgKip6OiAwIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsYW1iZGEgeCwgeTogMCIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIGZvbz1iYXI6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSBmb289YmFyLCBzcGF6PW5pZnR5K3NwaXQ6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSBmb289YmFyLCAqKno6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSBmb289YmFyLCBibGF6PWJsYXQrMiwgKip6OiAwIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsYW1iZGEgZm9vPWJhciwgYmxhej1ibGF0KzIsICp5LCAqKno6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSB4LCAqeSwgKip6OiAwIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsYW1iZGEgeDogNSBpZiB4IGVsc2UgMiIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiKHggZm9yIHggaW4gcmFuZ2UoMTApKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKHggZm9yIHggaW4gcmFuZ2UoMTApKSIpCisKKyAgICBkZWYgdGVzdF9wcmludChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgicHJpbnQiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJwcmludCAxIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgicHJpbnQgMSwiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJwcmludCA+PmZwIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgicHJpbnQgPj5mcCwgMSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInByaW50ID4+ZnAsIDEsIikKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9leHByZXNzaW9uKHNlbGYpOgorICAgICAgICAjIGV4cHJfc3RtdAorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhIikKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9hc3NpZ25tZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiYSA9IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhID0gYiA9IGMgPSBkID0gZSIpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfYXVnbWVudGVkX2Fzc2lnbm1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhICs9IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhIC09IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhICo9IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhIC89IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhIC8vPSBiIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiYSAlPSBiIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiYSAmPSBiIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiYSB8PSBiIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiYSBePSBiIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiYSA8PD0gYiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImEgPj49IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhICoqPSBiIikKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2RlZnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigqYXJncyk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigqYXJncywgKiprdyk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigqKmt3KTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKGZvbz1iYXIpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoZm9vPWJhciwgKmFyZ3MpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoZm9vPWJhciwgKmFyZ3MsICoqa3cpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoZm9vPWJhciwgKiprdyk6IHBhc3MiKQorCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKGEsIGIpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoYSwgYiwgKmFyZ3MpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoYSwgYiwgKmFyZ3MsICoqa3cpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoYSwgYiwgKiprdyk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZihhLCBiLCBmb289YmFyKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKGEsIGIsIGZvbz1iYXIsICphcmdzKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKGEsIGIsIGZvbz1iYXIsICphcmdzLCAqKmt3KTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKGEsIGIsIGZvbz1iYXIsICoqa3cpOiBwYXNzIikKKworICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJAc3RhdGljbWV0aG9kXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgImRlZiBmKCk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJAc3RhdGljbWV0aG9kXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIkBmdW5jYXR0cnMoeCwgeSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmIGYoKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIkBmdW5jYXR0cnMoKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJkZWYgZigpOiBwYXNzIikKKworICAgIGRlZiB0ZXN0X2NsYXNzX2RlZnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImNsYXNzIGZvbygpOnBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJAY2xhc3NfZGVjb3JhdG9yXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzIGZvbygpOnBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJAY2xhc3NfZGVjb3JhdG9yKGFyZylcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3MgZm9vKCk6cGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIkBkZWNvcmF0b3IxXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIkBkZWNvcmF0b3IyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzIGZvbygpOnBhc3MiKQorCisKKyAgICBkZWYgdGVzdF9pbXBvcnRfZnJvbV9zdGF0ZW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImZyb20gc3lzLnBhdGggaW1wb3J0ICoiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIHN5cy5wYXRoIGltcG9ydCBkaXJuYW1lIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSBzeXMucGF0aCBpbXBvcnQgKGRpcm5hbWUpIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSBzeXMucGF0aCBpbXBvcnQgKGRpcm5hbWUsKSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImZyb20gc3lzLnBhdGggaW1wb3J0IGRpcm5hbWUgYXMgbXlfZGlybmFtZSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImZyb20gc3lzLnBhdGggaW1wb3J0IChkaXJuYW1lIGFzIG15X2Rpcm5hbWUpIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSBzeXMucGF0aCBpbXBvcnQgKGRpcm5hbWUgYXMgbXlfZGlybmFtZSwpIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSBzeXMucGF0aCBpbXBvcnQgZGlybmFtZSwgYmFzZW5hbWUiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIHN5cy5wYXRoIGltcG9ydCAoZGlybmFtZSwgYmFzZW5hbWUpIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSBzeXMucGF0aCBpbXBvcnQgKGRpcm5hbWUsIGJhc2VuYW1lLCkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKAorICAgICAgICAgICAgImZyb20gc3lzLnBhdGggaW1wb3J0IGRpcm5hbWUgYXMgbXlfZGlybmFtZSwgYmFzZW5hbWUiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKAorICAgICAgICAgICAgImZyb20gc3lzLnBhdGggaW1wb3J0IChkaXJuYW1lIGFzIG15X2Rpcm5hbWUsIGJhc2VuYW1lKSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoCisgICAgICAgICAgICAiZnJvbSBzeXMucGF0aCBpbXBvcnQgKGRpcm5hbWUgYXMgbXlfZGlybmFtZSwgYmFzZW5hbWUsKSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoCisgICAgICAgICAgICAiZnJvbSBzeXMucGF0aCBpbXBvcnQgZGlybmFtZSwgYmFzZW5hbWUgYXMgbXlfYmFzZW5hbWUiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKAorICAgICAgICAgICAgImZyb20gc3lzLnBhdGggaW1wb3J0IChkaXJuYW1lLCBiYXNlbmFtZSBhcyBteV9iYXNlbmFtZSkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKAorICAgICAgICAgICAgImZyb20gc3lzLnBhdGggaW1wb3J0IChkaXJuYW1lLCBiYXNlbmFtZSBhcyBteV9iYXNlbmFtZSwpIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSAuYm9ndXMgaW1wb3J0IHgiKQorCisgICAgZGVmIHRlc3RfYmFzaWNfaW1wb3J0X3N0YXRlbWVudChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiaW1wb3J0IHN5cyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImltcG9ydCBzeXMgYXMgc3lzdGVtIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiaW1wb3J0IHN5cywgbWF0aCIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImltcG9ydCBzeXMgYXMgc3lzdGVtLCBtYXRoIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiaW1wb3J0IHN5cywgbWF0aCBhcyBteV9tYXRoIikKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImZyb20gLiBpbXBvcnQgbmFtZSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImZyb20gLi4gaW1wb3J0IG5hbWUiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIC5wa2cgaW1wb3J0IG5hbWUiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIC4ucGtnIGltcG9ydCBuYW1lIikKKworICAgIGRlZiB0ZXN0X3BlcDI2MyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzXG4iKQorCisgICAgZGVmIHRlc3RfYXNzZXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhc3NlcnQgYWxvIDwgYWhpIGFuZCBibG8gPCBiaGlcbiIpCisKKyAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJ3aXRoIG9wZW4oJ3gnKTogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgid2l0aCBvcGVuKCd4JykgYXMgZjogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgid2l0aCBvcGVuKCd4JykgYXMgZiwgb3BlbigneScpIGFzIGc6IHBhc3NcbiIpCisKKyAgICBkZWYgdGVzdF90cnlfc3RtdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5leGNlcHQ6IHBhc3NcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInRyeTogcGFzc1xuZmluYWxseTogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5leGNlcHQgQTogcGFzc1xuZmluYWxseTogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5leGNlcHQgQTogcGFzc1xuZXhjZXB0OiBwYXNzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpbmFsbHk6IHBhc3NcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInRyeTogcGFzc1xuZXhjZXB0OiBwYXNzXG5lbHNlOiBwYXNzXG4iKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJ0cnk6IHBhc3NcbmV4Y2VwdDogcGFzc1xuZWxzZTogcGFzc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJmaW5hbGx5OiBwYXNzXG4iKQorCisgICAgZGVmIHRlc3RfZXhjZXB0X2NsYXVzZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5leGNlcHQ6IHBhc3NcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInRyeTogcGFzc1xuZXhjZXB0IEE6IHBhc3NcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInRyeTogcGFzc1xuZXhjZXB0IEEsIGU6IHBhc3NcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInRyeTogcGFzc1xuZXhjZXB0IEEgYXMgZTogcGFzc1xuIikKKworICAgIGRlZiB0ZXN0X3Bvc2l0aW9uKHNlbGYpOgorICAgICAgICAjIEFuIGFic29sdXRlbHkgbWluaW1hbCB0ZXN0IG9mIHBvc2l0aW9uIGluZm9ybWF0aW9uLiAgQmV0dGVyCisgICAgICAgICMgdGVzdHMgd291bGQgYmUgYSBiaWcgcHJvamVjdC4KKyAgICAgICAgY29kZSA9ICJkZWYgZih4KTpcbiAgICByZXR1cm4geCArIDEiCisgICAgICAgIHN0MSA9IHBhcnNlci5zdWl0ZShjb2RlKQorICAgICAgICBzdDIgPSBzdDEudG90dXBsZShsaW5lX2luZm89MSwgY29sX2luZm89MSkKKworICAgICAgICBkZWYgd2Fsayh0cmVlKToKKyAgICAgICAgICAgIG5vZGVfdHlwZSA9IHRyZWVbMF0KKyAgICAgICAgICAgIG5leHQgPSB0cmVlWzFdCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5leHQsIHR1cGxlKToKKyAgICAgICAgICAgICAgICBmb3IgZWx0IGluIHRyZWVbMTpdOgorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiB3YWxrKGVsdCk6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHlpZWxkIHRyZWUKKworICAgICAgICB0ZXJtaW5hbHMgPSBsaXN0KHdhbGsoc3QyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbCisgICAgICAgICAgICAoMSwgJ2RlZicsIDEsIDApLAorICAgICAgICAgICAgKDEsICdmJywgMSwgNCksCisgICAgICAgICAgICAoNywgJygnLCAxLCA1KSwKKyAgICAgICAgICAgICgxLCAneCcsIDEsIDYpLAorICAgICAgICAgICAgKDgsICcpJywgMSwgNyksCisgICAgICAgICAgICAoMTEsICc6JywgMSwgOCksCisgICAgICAgICAgICAoNCwgJycsIDEsIDkpLAorICAgICAgICAgICAgKDUsICcnLCAyLCAtMSksCisgICAgICAgICAgICAoMSwgJ3JldHVybicsIDIsIDQpLAorICAgICAgICAgICAgKDEsICd4JywgMiwgMTEpLAorICAgICAgICAgICAgKDE0LCAnKycsIDIsIDEzKSwKKyAgICAgICAgICAgICgyLCAnMScsIDIsIDE1KSwKKyAgICAgICAgICAgICg0LCAnJywgMiwgMTYpLAorICAgICAgICAgICAgKDYsICcnLCAyLCAtMSksCisgICAgICAgICAgICAoNCwgJycsIDIsIC0xKSwKKyAgICAgICAgICAgICgwLCAnJywgMiwgLTEpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbHMpCisKKworIworIyAgU2Vjb25kLCB3ZSB0YWtlICppbnZhbGlkKiB0cmVlcyBhbmQgbWFrZSBzdXJlIHdlIGdldCBQYXJzZXJFcnJvcgorIyAgcmVqZWN0aW9ucyBmb3IgdGhlbS4KKyMKKworY2xhc3MgSWxsZWdhbFN5bnRheFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja19iYWRfdHJlZShzZWxmLCB0cmVlLCBsYWJlbCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5zZXF1ZW5jZTJzdCh0cmVlKQorICAgICAgICBleGNlcHQgcGFyc2VyLlBhcnNlckVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWQgbm90IGRldGVjdCBpbnZhbGlkIHRyZWUgZm9yICVyIiAlIGxhYmVsKQorCisgICAgZGVmIHRlc3RfanVuayhzZWxmKToKKyAgICAgICAgIyBub3QgZXZlbiByZW1vdGVseSB2YWxpZDoKKyAgICAgICAgc2VsZi5jaGVja19iYWRfdHJlZSgoMSwgMiwgMyksICI8anVuaz4iKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF95aWVsZF8xKHNlbGYpOgorICAgICAgICAjIElsbGVnYWwgeWllbGQgc3RhdGVtZW50OiBkZWYgZigpOiByZXR1cm4gMTsgeWllbGQgMQorICAgICAgICB0cmVlID0gXAorICAgICAgICAoMjU3LAorICAgICAgICAgKDI2NCwKKyAgICAgICAgICAoMjg1LAorICAgICAgICAgICAoMjU5LAorICAgICAgICAgICAgKDEsICdkZWYnKSwKKyAgICAgICAgICAgICgxLCAnZicpLAorICAgICAgICAgICAgKDI2MCwgKDcsICcoJyksICg4LCAnKScpKSwKKyAgICAgICAgICAgICgxMSwgJzonKSwKKyAgICAgICAgICAgICgyOTEsCisgICAgICAgICAgICAgKDQsICcnKSwKKyAgICAgICAgICAgICAoNSwgJycpLAorICAgICAgICAgICAgICgyNjQsCisgICAgICAgICAgICAgICgyNjUsCisgICAgICAgICAgICAgICAoMjY2LAorICAgICAgICAgICAgICAgICgyNzIsCisgICAgICAgICAgICAgICAgICgyNzUsCisgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicpLAorICAgICAgICAgICAgICAgICAgKDMxMywKKyAgICAgICAgICAgICAgICAgICAoMjkyLAorICAgICAgICAgICAgICAgICAgICAoMjkzLAorICAgICAgICAgICAgICAgICAgICAgKDI5NCwKKyAgICAgICAgICAgICAgICAgICAgICAoMjk1LAorICAgICAgICAgICAgICAgICAgICAgICAoMjk3LAorICAgICAgICAgICAgICAgICAgICAgICAgKDI5OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMjk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAyLCAoMzAzLCAoMzA0LCAoMzA1LCAoMiwgJzEnKSkpKSkpKSkpKSkpKSkpKSkpLAorICAgICAgICAgICAgICAgKDI2NCwKKyAgICAgICAgICAgICAgICAoMjY1LAorICAgICAgICAgICAgICAgICAoMjY2LAorICAgICAgICAgICAgICAgICAgKDI3MiwKKyAgICAgICAgICAgICAgICAgICAoMjc2LAorICAgICAgICAgICAgICAgICAgICAoMSwgJ3lpZWxkJyksCisgICAgICAgICAgICAgICAgICAgICgzMTMsCisgICAgICAgICAgICAgICAgICAgICAoMjkyLAorICAgICAgICAgICAgICAgICAgICAgICgyOTMsCisgICAgICAgICAgICAgICAgICAgICAgICgyOTQsCisgICAgICAgICAgICAgICAgICAgICAgICAoMjk1LAorICAgICAgICAgICAgICAgICAgICAgICAgICgyOTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICgyOTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMjk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDMsICgzMDQsICgzMDUsICgyLCAnMScpKSkpKSkpKSkpKSkpKSkpKSksCisgICAgICAgICAgICAgICAgICg0LCAnJykpKSwKKyAgICAgICAgICAgICAgICg2LCAnJykpKSkpLAorICAgICAgICAgICAoNCwgJycpLAorICAgICAgICAgICAoMCwgJycpKSkpCisgICAgICAgIHNlbGYuY2hlY2tfYmFkX3RyZWUodHJlZSwgImRlZiBmKCk6XG4gIHJldHVybiAxXG4gIHlpZWxkIDEiKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF95aWVsZF8yKHNlbGYpOgorICAgICAgICAjIElsbGVnYWwgcmV0dXJuIGluIGdlbmVyYXRvcjogZGVmIGYoKTogcmV0dXJuIDE7IHlpZWxkIDEKKyAgICAgICAgdHJlZSA9IFwKKyAgICAgICAgKDI1NywKKyAgICAgICAgICgyNjQsCisgICAgICAgICAgKDI2NSwKKyAgICAgICAgICAgKDI2NiwKKyAgICAgICAgICAgICgyNzgsCisgICAgICAgICAgICAgKDEsICdmcm9tJyksCisgICAgICAgICAgICAgKDI4MSwgKDEsICdfX2Z1dHVyZV9fJykpLAorICAgICAgICAgICAgICgxLCAnaW1wb3J0JyksCisgICAgICAgICAgICAgKDI3OSwgKDEsICdnZW5lcmF0b3JzJykpKSksCisgICAgICAgICAgICg0LCAnJykpKSwKKyAgICAgICAgICgyNjQsCisgICAgICAgICAgKDI4NSwKKyAgICAgICAgICAgKDI1OSwKKyAgICAgICAgICAgICgxLCAnZGVmJyksCisgICAgICAgICAgICAoMSwgJ2YnKSwKKyAgICAgICAgICAgICgyNjAsICg3LCAnKCcpLCAoOCwgJyknKSksCisgICAgICAgICAgICAoMTEsICc6JyksCisgICAgICAgICAgICAoMjkxLAorICAgICAgICAgICAgICg0LCAnJyksCisgICAgICAgICAgICAgKDUsICcnKSwKKyAgICAgICAgICAgICAoMjY0LAorICAgICAgICAgICAgICAoMjY1LAorICAgICAgICAgICAgICAgKDI2NiwKKyAgICAgICAgICAgICAgICAoMjcyLAorICAgICAgICAgICAgICAgICAoMjc1LAorICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nKSwKKyAgICAgICAgICAgICAgICAgICgzMTMsCisgICAgICAgICAgICAgICAgICAgKDI5MiwKKyAgICAgICAgICAgICAgICAgICAgKDI5MywKKyAgICAgICAgICAgICAgICAgICAgICgyOTQsCisgICAgICAgICAgICAgICAgICAgICAgKDI5NSwKKyAgICAgICAgICAgICAgICAgICAgICAgKDI5NywKKyAgICAgICAgICAgICAgICAgICAgICAgICgyOTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgKDI5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwMiwgKDMwMywgKDMwNCwgKDMwNSwgKDIsICcxJykpKSkpKSkpKSkpKSkpKSkpKSwKKyAgICAgICAgICAgICAgICgyNjQsCisgICAgICAgICAgICAgICAgKDI2NSwKKyAgICAgICAgICAgICAgICAgKDI2NiwKKyAgICAgICAgICAgICAgICAgICgyNzIsCisgICAgICAgICAgICAgICAgICAgKDI3NiwKKyAgICAgICAgICAgICAgICAgICAgKDEsICd5aWVsZCcpLAorICAgICAgICAgICAgICAgICAgICAoMzEzLAorICAgICAgICAgICAgICAgICAgICAgKDI5MiwKKyAgICAgICAgICAgICAgICAgICAgICAoMjkzLAorICAgICAgICAgICAgICAgICAgICAgICAoMjk0LAorICAgICAgICAgICAgICAgICAgICAgICAgKDI5NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMjk3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMjk4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDI5OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAzLCAoMzA0LCAoMzA1LCAoMiwgJzEnKSkpKSkpKSkpKSkpKSkpKSkpLAorICAgICAgICAgICAgICAgICAoNCwgJycpKSksCisgICAgICAgICAgICAgICAoNiwgJycpKSkpKSwKKyAgICAgICAgICAgKDQsICcnKSwKKyAgICAgICAgICAgKDAsICcnKSkpKQorICAgICAgICBzZWxmLmNoZWNrX2JhZF90cmVlKHRyZWUsICJkZWYgZigpOlxuICByZXR1cm4gMVxuICB5aWVsZCAxIikKKworICAgIGRlZiB0ZXN0X3ByaW50X2NoZXZyb25fY29tbWEoc2VsZik6CisgICAgICAgICMgSWxsZWdhbCBpbnB1dDogcHJpbnQgPj5mcCwKKyAgICAgICAgdHJlZSA9IFwKKyAgICAgICAgKDI1NywKKyAgICAgICAgICgyNjQsCisgICAgICAgICAgKDI2NSwKKyAgICAgICAgICAgKDI2NiwKKyAgICAgICAgICAgICgyNjgsCisgICAgICAgICAgICAgKDEsICdwcmludCcpLAorICAgICAgICAgICAgICgzNSwgJz4+JyksCisgICAgICAgICAgICAgKDI5MCwKKyAgICAgICAgICAgICAgKDI5MSwKKyAgICAgICAgICAgICAgICgyOTIsCisgICAgICAgICAgICAgICAgKDI5MywKKyAgICAgICAgICAgICAgICAgKDI5NSwKKyAgICAgICAgICAgICAgICAgICgyOTYsCisgICAgICAgICAgICAgICAgICAgKDI5NywKKyAgICAgICAgICAgICAgICAgICAgKDI5OCwgKDI5OSwgKDMwMCwgKDMwMSwgKDMwMiwgKDMwMywgKDEsICdmcCcpKSkpKSkpKSkpKSkpKSwKKyAgICAgICAgICAgICAoMTIsICcsJykpKSwKKyAgICAgICAgICAgKDQsICcnKSkpLAorICAgICAgICAgKDAsICcnKSkKKyAgICAgICAgc2VsZi5jaGVja19iYWRfdHJlZSh0cmVlLCAicHJpbnQgPj5mcCwiKQorCisgICAgZGVmIHRlc3RfYV9jb21tYV9jb21tYV9jKHNlbGYpOgorICAgICAgICAjIElsbGVnYWwgaW5wdXQ6IGEsLGMKKyAgICAgICAgdHJlZSA9IFwKKyAgICAgICAgKDI1OCwKKyAgICAgICAgICgzMTEsCisgICAgICAgICAgKDI5MCwKKyAgICAgICAgICAgKDI5MSwKKyAgICAgICAgICAgICgyOTIsCisgICAgICAgICAgICAgKDI5MywKKyAgICAgICAgICAgICAgKDI5NSwKKyAgICAgICAgICAgICAgICgyOTYsCisgICAgICAgICAgICAgICAgKDI5NywKKyAgICAgICAgICAgICAgICAgKDI5OCwgKDI5OSwgKDMwMCwgKDMwMSwgKDMwMiwgKDMwMywgKDEsICdhJykpKSkpKSkpKSkpKSkpLAorICAgICAgICAgICgxMiwgJywnKSwKKyAgICAgICAgICAoMTIsICcsJyksCisgICAgICAgICAgKDI5MCwKKyAgICAgICAgICAgKDI5MSwKKyAgICAgICAgICAgICgyOTIsCisgICAgICAgICAgICAgKDI5MywKKyAgICAgICAgICAgICAgKDI5NSwKKyAgICAgICAgICAgICAgICgyOTYsCisgICAgICAgICAgICAgICAgKDI5NywKKyAgICAgICAgICAgICAgICAgKDI5OCwgKDI5OSwgKDMwMCwgKDMwMSwgKDMwMiwgKDMwMywgKDEsICdjJykpKSkpKSkpKSkpKSkpKSwKKyAgICAgICAgICg0LCAnJyksCisgICAgICAgICAoMCwgJycpKQorICAgICAgICBzZWxmLmNoZWNrX2JhZF90cmVlKHRyZWUsICJhLCxjIikKKworICAgIGRlZiB0ZXN0X2lsbGVnYWxfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgICMgSWxsZWdhbCBpbnB1dDogYSAkPSBiCisgICAgICAgIHRyZWUgPSBcCisgICAgICAgICgyNTcsCisgICAgICAgICAoMjY0LAorICAgICAgICAgICgyNjUsCisgICAgICAgICAgICgyNjYsCisgICAgICAgICAgICAoMjY3LAorICAgICAgICAgICAgICgzMTIsCisgICAgICAgICAgICAgICgyOTEsCisgICAgICAgICAgICAgICAoMjkyLAorICAgICAgICAgICAgICAgICgyOTMsCisgICAgICAgICAgICAgICAgICgyOTQsCisgICAgICAgICAgICAgICAgICAoMjk2LAorICAgICAgICAgICAgICAgICAgICgyOTcsCisgICAgICAgICAgICAgICAgICAgICgyOTgsCisgICAgICAgICAgICAgICAgICAgICAoMjk5LAorICAgICAgICAgICAgICAgICAgICAgICgzMDAsICgzMDEsICgzMDIsICgzMDMsICgzMDQsICgxLCAnYScpKSkpKSkpKSkpKSkpKSksCisgICAgICAgICAgICAgKDI2OCwgKDM3LCAnJD0nKSksCisgICAgICAgICAgICAgKDMxMiwKKyAgICAgICAgICAgICAgKDI5MSwKKyAgICAgICAgICAgICAgICgyOTIsCisgICAgICAgICAgICAgICAgKDI5MywKKyAgICAgICAgICAgICAgICAgKDI5NCwKKyAgICAgICAgICAgICAgICAgICgyOTYsCisgICAgICAgICAgICAgICAgICAgKDI5NywKKyAgICAgICAgICAgICAgICAgICAgKDI5OCwKKyAgICAgICAgICAgICAgICAgICAgICgyOTksCisgICAgICAgICAgICAgICAgICAgICAgKDMwMCwgKDMwMSwgKDMwMiwgKDMwMywgKDMwNCwgKDEsICdiJykpKSkpKSkpKSkpKSkpKSkpLAorICAgICAgICAgICAoNCwgJycpKSksCisgICAgICAgICAoMCwgJycpKQorICAgICAgICBzZWxmLmNoZWNrX2JhZF90cmVlKHRyZWUsICJhICQ9IGIiKQorCisgICAgZGVmIHRlc3RfbWFsZm9ybWVkX2dsb2JhbChzZWxmKToKKyAgICAgICAgI2RvZXNuJ3QgaGF2ZSBnbG9iYWwga2V5d29yZCBpbiBhc3QKKyAgICAgICAgdHJlZSA9ICgyNTcsCisgICAgICAgICAgICAgICAgKDI2NCwKKyAgICAgICAgICAgICAgICAgKDI2NSwKKyAgICAgICAgICAgICAgICAgICgyNjYsCisgICAgICAgICAgICAgICAgICAgKDI4MiwgKDEsICdmb28nKSkpLCAoNCwgJycpKSksCisgICAgICAgICAgICAgICAgKDQsICcnKSwKKyAgICAgICAgICAgICAgICAoMCwgJycpKQorICAgICAgICBzZWxmLmNoZWNrX2JhZF90cmVlKHRyZWUsICJtYWxmb3JtZWQgZ2xvYmFsIGFzdCIpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2ltcG9ydF9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgZnJvbSBpbXBvcnQgYQorICAgICAgICB0cmVlID0gXAorICAgICAgICAgICAgKDI1NywKKyAgICAgICAgICAgICAoMjY3LAorICAgICAgICAgICAgICAoMjY4LAorICAgICAgICAgICAgICAgKDI2OSwKKyAgICAgICAgICAgICAgICAoMjgxLAorICAgICAgICAgICAgICAgICAoMjgzLCAoMSwgJ2Zyb20nKSwgKDEsICdpbXBvcnQnKSwKKyAgICAgICAgICAgICAgICAgICgyODYsICgyODQsICgxLCAnZnJlZCcpKSkpKSksCisgICAgICAgICAgICAgICAoNCwgJycpKSksCisgICAgICAgICAgICAgKDQsICcnKSwgKDAsICcnKSkKKyAgICAgICAgc2VsZi5jaGVja19iYWRfdHJlZSh0cmVlLCAiZnJvbSBpbXBvcnQgYSIpCisKKworY2xhc3MgQ29tcGlsZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgVGhlc2UgdGVzdHMgYXJlIHZlcnkgbWluaW1hbC4gOi0oCisKKyAgICBkZWYgdGVzdF9jb21waWxlX2V4cHIoc2VsZik6CisgICAgICAgIHN0ID0gcGFyc2VyLmV4cHIoJzIgKyAzJykKKyAgICAgICAgY29kZSA9IHBhcnNlci5jb21waWxlc3Qoc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgNSkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVfc3VpdGUoc2VsZik6CisgICAgICAgIHN0ID0gcGFyc2VyLnN1aXRlKCd4ID0gMjsgeSA9IHggKyAzJykKKyAgICAgICAgY29kZSA9IHBhcnNlci5jb21waWxlc3Qoc3QpCisgICAgICAgIGdsb2JzID0ge30KKyAgICAgICAgZXhlYyBjb2RlIGluIGdsb2JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYnNbJ3knXSwgNSkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHN0ID0gcGFyc2VyLnN1aXRlKCcxID0gMyArIDQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgcGFyc2VyLmNvbXBpbGVzdCwgc3QpCisKKyAgICBkZWYgdGVzdF9jb21waWxlX2JhZHVuaWNvZGUoc2VsZik6CisgICAgICAgIHN0ID0gcGFyc2VyLnN1aXRlKCdhID0gdSJcVTEyMzQ1Njc4IicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBwYXJzZXIuY29tcGlsZXN0LCBzdCkKKyAgICAgICAgc3QgPSBwYXJzZXIuc3VpdGUoJ2EgPSB1Ilx1MSInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgcGFyc2VyLmNvbXBpbGVzdCwgc3QpCisKKyAgICBkZWYgdGVzdF9pc3N1ZV85MDExKHNlbGYpOgorICAgICAgICAjIElzc3VlIDkwMTE6IGNvbXBpbGF0aW9uIG9mIGFuIHVuYXJ5IG1pbnVzIGV4cHJlc3Npb24gY2hhbmdlZAorICAgICAgICAjIHRoZSBtZWFuaW5nIG9mIHRoZSBTVCwgc28gdGhhdCBhIHNlY29uZCBjb21waWxhdGlvbiBwcm9kdWNlZAorICAgICAgICAjIGluY29ycmVjdCByZXN1bHRzLgorICAgICAgICBzdCA9IHBhcnNlci5leHByKCctMycpCisgICAgICAgIGNvZGUxID0gcGFyc2VyLmNvbXBpbGVzdChzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUxKSwgLTMpCisgICAgICAgIGNvZGUyID0gcGFyc2VyLmNvbXBpbGVzdChzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUyKSwgLTMpCisKKworY2xhc3MgUGFyc2VyU3RhY2tMaW1pdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJ0cnkgdG8gcHVzaCB0aGUgcGFyc2VyIHRvL292ZXIgaXRzIGxpbWl0cy4KKyAgICBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE4ODEgZm9yIGEgZGlzY3Vzc2lvbgorICAgICIiIgorICAgIGRlZiBfbmVzdGVkX2V4cHJlc3Npb24oc2VsZiwgbGV2ZWwpOgorICAgICAgICByZXR1cm4gIlsiKmxldmVsKyJdIipsZXZlbAorCisgICAgZGVmIHRlc3RfZGVlcGx5X25lc3RlZF9saXN0KHNlbGYpOgorICAgICAgICBlID0gc2VsZi5fbmVzdGVkX2V4cHJlc3Npb24oOTkpCisgICAgICAgIHN0ID0gcGFyc2VyLmV4cHIoZSkKKyAgICAgICAgc3QuY29tcGlsZSgpCisKKyAgICBkZWYgdGVzdF90cmlnZ2VyX21lbW9yeV9lcnJvcihzZWxmKToKKyAgICAgICAgZSA9IHNlbGYuX25lc3RlZF9leHByZXNzaW9uKDEwMCkKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctYycsIGUpCisgICAgICAgICMgcGFyc2luZyB0aGUgZXhwcmVzc2lvbiB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciBtZXNzYWdlCisgICAgICAgICMgZm9sbG93ZWQgYnkgYSBNZW1vcnlFcnJvciAoc2VlICMxMTk2MykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3NfcHVzaDogcGFyc2VyIHN0YWNrIG92ZXJmbG93JywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKGInTWVtb3J5RXJyb3InLCBlcnIpCisKK2NsYXNzIFNUT2JqZWN0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3Qgb3BlcmF0aW9ucyBvbiBTVCBvYmplY3RzIHRoZW1zZWx2ZXMiIiIKKworICAgIGNoZWNrX3NpemVvZiA9IHN1cHBvcnQuY2hlY2tfc2l6ZW9mCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zaXplb2Yoc2VsZik6CisgICAgICAgIGRlZiBYWFhST1VORFVQKG4pOgorICAgICAgICAgICAgaWYgbiA8PSAxOgorICAgICAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgICAgICBpZiBuIDw9IDEyODoKKyAgICAgICAgICAgICAgICByZXR1cm4gKG4gKyAzKSAmIH4zCisgICAgICAgICAgICByZXR1cm4gMSA8PCAobiAtIDEpLmJpdF9sZW5ndGgoKQorCisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnUGlpJykKKyAgICAgICAgbm9kZXNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoJ2hQM2lQMGgnKQorICAgICAgICBkZWYgc2l6ZW9mY2hpbGRyZW4obm9kZSk6CisgICAgICAgICAgICBpZiBub2RlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIHJlcyA9IDAKKyAgICAgICAgICAgIGhhc3N0ciA9IGxlbihub2RlKSA+IDEgYW5kIGlzaW5zdGFuY2Uobm9kZVstMV0sIHN0cikKKyAgICAgICAgICAgIGlmIGhhc3N0cjoKKyAgICAgICAgICAgICAgICByZXMgKz0gbGVuKG5vZGVbLTFdKSArIDEKKyAgICAgICAgICAgIGNoaWxkcmVuID0gbm9kZVsxOi0xXSBpZiBoYXNzdHIgZWxzZSBub2RlWzE6XQorICAgICAgICAgICAgaWYgY2hpbGRyZW46CisgICAgICAgICAgICAgICAgcmVzICs9IFhYWFJPVU5EVVAobGVuKGNoaWxkcmVuKSkgKiBub2Rlc2l6ZQorICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgICAgICAgICAgcmVzICs9IHNpemVvZmNoaWxkcmVuKGNoaWxkKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIGRlZiBjaGVja19zdF9zaXplb2Yoc3QpOgorICAgICAgICAgICAgc2VsZi5jaGVja19zaXplb2Yoc3QsIGJhc2VzaXplICsgbm9kZXNpemUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZmNoaWxkcmVuKHN0LnRvdHVwbGUoKSkpCisKKyAgICAgICAgY2hlY2tfc3Rfc2l6ZW9mKHBhcnNlci5leHByKCcyICsgMycpKQorICAgICAgICBjaGVja19zdF9zaXplb2YocGFyc2VyLmV4cHIoJzIgKyAzICsgNCcpKQorICAgICAgICBjaGVja19zdF9zaXplb2YocGFyc2VyLnN1aXRlKCd4ID0gMiArIDMnKSkKKyAgICAgICAgY2hlY2tfc3Rfc2l6ZW9mKHBhcnNlci5zdWl0ZSgnJykpCisgICAgICAgIGNoZWNrX3N0X3NpemVvZihwYXJzZXIuc3VpdGUoJyMgLSotIGNvZGluZzogdXRmLTggLSotJykpCisgICAgICAgIGNoZWNrX3N0X3NpemVvZihwYXJzZXIuZXhwcignWycgKyAnMiwnICogMTAwMCArICddJykpCisKKworICAgICMgWFhYIHRlc3RzIGZvciBwaWNrbGluZyBhbmQgdW5waWNrbGluZyBvZiBTVCBvYmplY3RzIHNob3VsZCBnbyBoZXJlCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgUm91bmR0cmlwTGVnYWxTeW50YXhUZXN0Q2FzZSwKKyAgICAgICAgSWxsZWdhbFN5bnRheFRlc3RDYXNlLAorICAgICAgICBDb21waWxlVGVzdENhc2UsCisgICAgICAgIFBhcnNlclN0YWNrTGltaXRUZXN0Q2FzZSwKKyAgICAgICAgU1RPYmplY3RUZXN0Q2FzZSwKKyAgICApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGRiLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGRiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OWY3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wZGIucHkKQEAgLTAsMCArMSwzNzQgQEAKKyMgQSB0ZXN0IHN1aXRlIGZvciBwZGI7IGF0IHRoZSBtb21lbnQsIHRoaXMgb25seSB2YWxpZGF0ZXMgc2tpcHBpbmcgb2YKKyMgc3BlY2lmaWVkIHRlc3QgbW9kdWxlcyAoUkZFICM1MTQyKS4KKworaW1wb3J0IGltcAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGV4dHdyYXAKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKyMgVGhpcyBsaXR0bGUgaGVscGVyIGNsYXNzIGlzIGVzc2VudGlhbCBmb3IgdGVzdGluZyBwZGIgdW5kZXIgZG9jdGVzdC4KK2Zyb20gdGVzdF9kb2N0ZXN0IGltcG9ydCBfRmFrZUlucHV0CisKKworY2xhc3MgUGRiVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHJ1bl9wZGIoc2VsZiwgc2NyaXB0LCBjb21tYW5kcyk6CisgICAgICAgICIiIlJ1biAnc2NyaXB0JyBsaW5lcyB3aXRoIHBkYiBhbmQgdGhlIHBkYiAnY29tbWFuZHMnLiIiIgorICAgICAgICBmaWxlbmFtZSA9ICdtYWluLnB5JworICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodGV4dHdyYXAuZGVkZW50KHNjcmlwdCkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0X3N1cHBvcnQudW5saW5rLCBmaWxlbmFtZSkKKyAgICAgICAgY21kID0gW3N5cy5leGVjdXRhYmxlLCAnLW0nLCAncGRiJywgZmlsZW5hbWVdCisgICAgICAgIHN0ZG91dCA9IHN0ZGVyciA9IE5vbmUKKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2MuY29tbXVuaWNhdGUoY29tbWFuZHMpCisgICAgICAgIHByb2Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgIHJldHVybiBzdGRvdXQsIHN0ZGVycgorCisgICAgZGVmIHRlc3RfaXNzdWUxMzE4MyhzZWxmKToKKyAgICAgICAgc2NyaXB0ID0gIiIiCisgICAgICAgICAgICBmcm9tIGJhciBpbXBvcnQgYmFyCisKKyAgICAgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgICAgICBiYXIoKQorCisgICAgICAgICAgICBkZWYgbm9wZSgpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIGZvb2JhcigpOgorICAgICAgICAgICAgICAgIGZvbygpCisgICAgICAgICAgICAgICAgbm9wZSgpCisKKyAgICAgICAgICAgIGZvb2JhcigpCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kcyA9ICIiIgorICAgICAgICAgICAgZnJvbSBiYXIgaW1wb3J0IGJhcgorICAgICAgICAgICAgYnJlYWsgYmFyCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3RlcAorICAgICAgICAgICAgc3RlcAorICAgICAgICAgICAgcXVpdAorICAgICAgICAiIiIKKyAgICAgICAgYmFyID0gIiIiCisgICAgICAgICAgICBkZWYgYmFyKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBvcGVuKCdiYXIucHknLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHRleHR3cmFwLmRlZGVudChiYXIpKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdF9zdXBwb3J0LnVubGluaywgJ2Jhci5weScpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5ydW5fcGRiKHNjcmlwdCwgY29tbWFuZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIGFueSgnbWFpbi5weSg1KWZvbygpLT5Ob25lJyBpbiBsIGZvciBsIGluIHN0ZG91dC5zcGxpdGxpbmVzKCkpLAorICAgICAgICAgICAgJ0ZhaWwgdG8gc3RlcCBpbnRvIHRoZSBjYWxsZXIgYWZ0ZXIgYSByZXR1cm4nKQorCisKK2NsYXNzIFBkYlRlc3RJbnB1dChvYmplY3QpOgorICAgICIiIkNvbnRleHQgbWFuYWdlciB0aGF0IG1ha2VzIHRlc3RpbmcgUGRiIGluIGRvY3Rlc3RzIGVhc2llci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dCk6CisgICAgICAgIHNlbGYuaW5wdXQgPSBpbnB1dAorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5yZWFsX3N0ZGluID0gc3lzLnN0ZGluCisgICAgICAgIHN5cy5zdGRpbiA9IF9GYWtlSW5wdXQoc2VsZi5pbnB1dCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjKToKKyAgICAgICAgc3lzLnN0ZGluID0gc2VsZi5yZWFsX3N0ZGluCisKKworZGVmIHdyaXRlKHgpOgorICAgIHByaW50IHgKKworZGVmIHRlc3RfcGRiX2Rpc3BsYXlob29rKCk6CisgICAgIiIiVGhpcyB0ZXN0cyB0aGUgY3VzdG9tIGRpc3BsYXlob29rIGZvciBwZGIuCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oZm9vLCBiYXIpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYigpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBwYXNzCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWworICAgIC4uLiAgICAgJ2ZvbycsCisgICAgLi4uICAgICAnYmFyJywKKyAgICAuLi4gICAgICdmb3IgaSBpbiByYW5nZSg1KTogd3JpdGUoaSknLAorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKDEsIE5vbmUpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2Rpc3BsYXlob29rWzBdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHBhc3MKKyAgICAoUGRiKSBmb28KKyAgICAxCisgICAgKFBkYikgYmFyCisgICAgKFBkYikgZm9yIGkgaW4gcmFuZ2UoNSk6IHdyaXRlKGkpCisgICAgMAorICAgIDEKKyAgICAyCisgICAgMworICAgIDQKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCitkZWYgdGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kcygpOgorICAgICIiIlRlc3QgYmFzaWMgY29tbWFuZHMgcmVsYXRlZCB0byBicmVha3BvaW50cy4KKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYigpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBwcmludCgxKQorICAgIC4uLiAgICAgcHJpbnQoMikKKyAgICAuLi4gICAgIHByaW50KDMpCisgICAgLi4uICAgICBwcmludCg0KQorCisgICAgRmlyc3QsIG5lZWQgdG8gY2xlYXIgYmRiIHN0YXRlIHRoYXQgbWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gcHJldmlvdXMgdGVzdHMuCisgICAgT3RoZXJ3aXNlLCB0aGUgbmV3IGJyZWFrcG9pbnRzIG1pZ2h0IGdldCBhc3NpZ25lZCBkaWZmZXJlbnQgbnVtYmVycy4KKworICAgID4+PiBmcm9tIGJkYiBpbXBvcnQgQnJlYWtwb2ludAorICAgID4+PiBCcmVha3BvaW50Lm5leHQgPSAxCisgICAgPj4+IEJyZWFrcG9pbnQuYnBsaXN0ID0ge30KKyAgICA+Pj4gQnJlYWtwb2ludC5icGJ5bnVtYmVyID0gW05vbmVdCisKKyAgICBOb3cgdGVzdCB0aGUgYnJlYWtwb2ludCBjb21tYW5kcy4gIE5PUk1BTElaRV9XSElURVNQQUNFIGlzIG5lZWRlZCBiZWNhdXNlCisgICAgdGhlIGJyZWFrcG9pbnQgbGlzdCBvdXRwdXRzIGEgdGFiIGZvciB0aGUgInN0b3Agb25seSIgYW5kICJpZ25vcmUgbmV4dCIKKyAgICBsaW5lcywgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBwdXQgaW4gaGVyZS4KKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIC4uLiAgICAgJ2JyZWFrIDMnLAorICAgIC4uLiAgICAgJ2Rpc2FibGUgMScsCisgICAgLi4uICAgICAnaWdub3JlIDEgMTAnLAorICAgIC4uLiAgICAgJ2NvbmRpdGlvbiAxIDEgPCAyJywKKyAgICAuLi4gICAgICdicmVhayA0JywKKyAgICAuLi4gICAgICdicmVhayA0JywKKyAgICAuLi4gICAgICdicmVhaycsCisgICAgLi4uICAgICAnY2xlYXIgMycsCisgICAgLi4uICAgICAnYnJlYWsnLAorICAgIC4uLiAgICAgJ2NvbmRpdGlvbiAxJywKKyAgICAuLi4gICAgICdlbmFibGUgMScsCisgICAgLi4uICAgICAnY2xlYXIgMScsCisgICAgLi4uICAgICAnY29tbWFuZHMgMicsCisgICAgLi4uICAgICAncHJpbnQgNDInLAorICAgIC4uLiAgICAgJ2VuZCcsCisgICAgLi4uICAgICAnY29udGludWUnLCAgIyB3aWxsIHN0b3AgYXQgYnJlYWtwb2ludCAyIChsaW5lIDQpCisgICAgLi4uICAgICAnY2xlYXInLCAgICAgIyBjbGVhciBhbGwhCisgICAgLi4uICAgICAneScsCisgICAgLi4uICAgICAndGJyZWFrIDUnLAorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywgICMgd2lsbCBzdG9wIGF0IHRlbXBvcmFyeSBicmVha3BvaW50CisgICAgLi4uICAgICAnYnJlYWsnLCAgICAgIyBtYWtlIHN1cmUgYnJlYWtwb2ludCBpcyBnb25lCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMSkKKyAgICAoUGRiKSBicmVhayAzCisgICAgQnJlYWtwb2ludCAxIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MworICAgIChQZGIpIGRpc2FibGUgMQorICAgIChQZGIpIGlnbm9yZSAxIDEwCisgICAgV2lsbCBpZ25vcmUgbmV4dCAxMCBjcm9zc2luZ3Mgb2YgYnJlYWtwb2ludCAxLgorICAgIChQZGIpIGNvbmRpdGlvbiAxIDEgPCAyCisgICAgKFBkYikgYnJlYWsgNAorICAgIEJyZWFrcG9pbnQgMiBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKKyAgICAoUGRiKSBicmVhayA0CisgICAgQnJlYWtwb2ludCAzIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIChQZGIpIGJyZWFrCisgICAgTnVtIFR5cGUgICAgICAgICBEaXNwIEVuYiAgIFdoZXJlCisgICAgMSAgIGJyZWFrcG9pbnQgICBrZWVwIG5vICAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MworICAgICAgICAgICAgc3RvcCBvbmx5IGlmIDEgPCAyCisgICAgICAgICAgICBpZ25vcmUgbmV4dCAxMCBoaXRzCisgICAgMiAgIGJyZWFrcG9pbnQgICBrZWVwIHllcyAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIDMgICBicmVha3BvaW50ICAga2VlcCB5ZXMgICBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKKyAgICAoUGRiKSBjbGVhciAzCisgICAgRGVsZXRlZCBicmVha3BvaW50IDMKKyAgICAoUGRiKSBicmVhaworICAgIE51bSBUeXBlICAgICAgICAgRGlzcCBFbmIgICBXaGVyZQorICAgIDEgICBicmVha3BvaW50ICAga2VlcCBubyAgICBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjMKKyAgICAgICAgICAgIHN0b3Agb25seSBpZiAxIDwgMgorICAgICAgICAgICAgaWdub3JlIG5leHQgMTAgaGl0cworICAgIDIgICBicmVha3BvaW50ICAga2VlcCB5ZXMgICBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKKyAgICAoUGRiKSBjb25kaXRpb24gMQorICAgIEJyZWFrcG9pbnQgMSBpcyBub3cgdW5jb25kaXRpb25hbC4KKyAgICAoUGRiKSBlbmFibGUgMQorICAgIChQZGIpIGNsZWFyIDEKKyAgICBEZWxldGVkIGJyZWFrcG9pbnQgMQorICAgIChQZGIpIGNvbW1hbmRzIDIKKyAgICAoY29tKSBwcmludCA0MgorICAgIChjb20pIGVuZAorICAgIChQZGIpIGNvbnRpbnVlCisgICAgMQorICAgIDQyCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDQpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMikKKyAgICAoUGRiKSBjbGVhcgorICAgIENsZWFyIGFsbCBicmVha3M/IHkKKyAgICAoUGRiKSB0YnJlYWsgNQorICAgIEJyZWFrcG9pbnQgNCBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjUKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDIKKyAgICBEZWxldGVkIGJyZWFrcG9pbnQgNAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHByaW50KDMpCisgICAgKFBkYikgYnJlYWsKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDMKKyAgICA0CisgICAgIiIiCisKKworZGVmIHRlc3RfcGRiX3NraXBfbW9kdWxlcygpOgorICAgICIiIlRoaXMgaWxsdXN0cmF0ZXMgdGhlIHNpbXBsZSBjYXNlIG9mIG1vZHVsZSBza2lwcGluZy4KKworICAgID4+PiBkZWYgc2tpcF9tb2R1bGUoKToKKyAgICAuLi4gICAgIGltcG9ydCBzdHJpbmcKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bJ3N0cmluZyonXSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHN0cmluZy5sb3dlcignRk9PJykKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgIHNraXBfbW9kdWxlKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfc2tpcF9tb2R1bGVzWzBdPig0KXNraXBfbW9kdWxlKCkKKyAgICAtPiBzdHJpbmcubG93ZXIoJ0ZPTycpCisgICAgKFBkYikgc3RlcAorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfc2tpcF9tb2R1bGVzWzBdPig0KXNraXBfbW9kdWxlKCktPk5vbmUKKyAgICAtPiBzdHJpbmcubG93ZXIoJ0ZPTycpCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworCisjIE1vZHVsZSBmb3IgdGVzdGluZyBza2lwcGluZyBvZiBtb2R1bGUgdGhhdCBtYWtlcyBhIGNhbGxiYWNrCittb2QgPSBpbXAubmV3X21vZHVsZSgnbW9kdWxlX3RvX3NraXAnKQorZXhlYyAnZGVmIGZvb19wb255KGNhbGxiYWNrKTogeCA9IDE7IGNhbGxiYWNrKCk7IHJldHVybiBOb25lJyBpbiBtb2QuX19kaWN0X18KKworCitkZWYgdGVzdF9wZGJfc2tpcF9tb2R1bGVzX3dpdGhfY2FsbGJhY2soKToKKyAgICAiIiJUaGlzIGlsbHVzdHJhdGVzIHNraXBwaW5nIG9mIG1vZHVsZXMgdGhhdCBjYWxsIGludG8gb3RoZXIgY29kZS4KKworICAgID4+PiBkZWYgc2tpcF9tb2R1bGUoKToKKyAgICAuLi4gICAgIGRlZiBjYWxsYmFjaygpOgorICAgIC4uLiAgICAgICAgIHJldHVybiBOb25lCisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9Wydtb2R1bGVfdG9fc2tpcConXSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIG1vZC5mb29fcG9ueShjYWxsYmFjaykKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgIHNraXBfbW9kdWxlKCkKKyAgICAuLi4gICAgIHBhc3MgICMgcHJvdmlkZXMgc29tZXRoaW5nIHRvICJzdGVwIiB0bworICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oNSlza2lwX21vZHVsZSgpCisgICAgLT4gbW9kLmZvb19wb255KGNhbGxiYWNrKQorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oMiljYWxsYmFjaygpCisgICAgLT4gZGVmIGNhbGxiYWNrKCk6CisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oMyljYWxsYmFjaygpCisgICAgLT4gcmV0dXJuIE5vbmUKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oMyljYWxsYmFjaygpLT5Ob25lCisgICAgLT4gcmV0dXJuIE5vbmUKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oNSlza2lwX21vZHVsZSgpLT5Ob25lCisgICAgLT4gbW9kLmZvb19wb255KGNhbGxiYWNrKQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfc2tpcF9tb2R1bGVzX3dpdGhfY2FsbGJhY2tbMV0+KDEwKTxtb2R1bGU+KCkKKyAgICAtPiBwYXNzICAjIHByb3ZpZGVzIHNvbWV0aGluZyB0byAic3RlcCIgdG8KKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCisKK2RlZiB0ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZSgpOgorICAgICIiIlRlc3QgdGhhdCAiY29udGludWUiIGFuZCAibmV4dCIgd29yayBwcm9wZXJseSBpbiBib3R0b20gZnJhbWUgKGlzc3VlICM1Mjk0KS4KKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYiwgc3lzOyBpbnN0ID0gcGRiLlBkYigpCisgICAgLi4uICAgICBpbnN0LnNldF90cmFjZSgpCisgICAgLi4uICAgICBpbnN0LmJvdGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpICAjIGhhY2tlcnkgdG8gZ2V0IHRoZSByaWdodCBib3RmcmFtZQorICAgIC4uLiAgICAgcHJpbnQoMSkKKyAgICAuLi4gICAgIHByaW50KDIpCisgICAgLi4uICAgICBwcmludCgzKQorICAgIC4uLiAgICAgcHJpbnQoNCkKKworICAgIEZpcnN0LCBuZWVkIHRvIGNsZWFyIGJkYiBzdGF0ZSB0aGF0IG1pZ2h0IGJlIGxlZnQgb3ZlciBmcm9tIHByZXZpb3VzIHRlc3RzLgorICAgIE90aGVyd2lzZSwgdGhlIG5ldyBicmVha3BvaW50cyBtaWdodCBnZXQgYXNzaWduZWQgZGlmZmVyZW50IG51bWJlcnMuCisKKyAgICA+Pj4gZnJvbSBiZGIgaW1wb3J0IEJyZWFrcG9pbnQKKyAgICA+Pj4gQnJlYWtwb2ludC5uZXh0ID0gMQorICAgID4+PiBCcmVha3BvaW50LmJwbGlzdCA9IHt9CisgICAgPj4+IEJyZWFrcG9pbnQuYnBieW51bWJlciA9IFtOb25lXQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsKKyAgICAuLi4gICAgICduZXh0JywKKyAgICAuLi4gICAgICdicmVhayA3JywKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uICAgICAnbmV4dCcsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gXSk6CisgICAgLi4uICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBpbnN0LmJvdGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpICAjIGhhY2tlcnkgdG8gZ2V0IHRoZSByaWdodCBib3RmcmFtZQorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMSkKKyAgICAoUGRiKSBicmVhayA3CisgICAgQnJlYWtwb2ludCAxIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+OjcKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDEKKyAgICAyCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lWzBdPig3KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHByaW50KDMpCisgICAgKFBkYikgbmV4dAorICAgIDMKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+KDgpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoNCkKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDQKKyAgICAiIiIKKworY2xhc3MgTW9kdWxlSW5pdFRlc3Rlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9maWxlbmFtZV9jb3JyZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSW4gaXNzdWUgNzc1MCwgaXQgd2FzIGZvdW5kIHRoYXQgaWYgdGhlIGZpbGVuYW1lIGhhcyBhIHNlcXVlbmNlIHRoYXQKKyAgICAgICAgcmVzb2x2ZXMgdG8gYW4gZXNjYXBlIGNoYXJhY3RlciBpbiBhIFB5dGhvbiBzdHJpbmcgKHN1Y2ggYXMgXHQpLCBpdAorICAgICAgICB3aWxsIGJlIHRyZWF0ZWQgYXMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLgorICAgICAgICAiIiIKKyAgICAgICAgIyB0aGUgdGVzdF9mbiBtdXN0IGNvbnRhaW4gc29tZXRoaW5nIGxpa2UgXHQKKyAgICAgICAgIyBvbiBXaW5kb3dzLCB0aGlzIHdpbGwgY3JlYXRlICd0ZXN0X21vZC5weScgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICAjIG9uIFVuaXgsIHRoaXMgd2lsbCBjcmVhdGUgJy5cdGVzdF9tb2QucHknIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgdGVzdF9mbiA9ICcuXFx0ZXN0X21vZC5weScKKyAgICAgICAgY29kZSA9ICdwcmludCgidGVzdGluZyBwZGIiKScKKyAgICAgICAgd2l0aCBvcGVuKHRlc3RfZm4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoY29kZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJlbW92ZSwgdGVzdF9mbikKKyAgICAgICAgY21kID0gW3N5cy5leGVjdXRhYmxlLCAnLW0nLCAncGRiJywgdGVzdF9mbixdCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKKyAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICApCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZSgncXVpdFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjb2RlLCBzdGRvdXQsICJwZGIgbXVuZ2VkIHRoZSBmaWxlbmFtZSIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9wZGIKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9wZGIsIHZlcmJvc2l0eT1UcnVlKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFBkYlRlc3RDYXNlLAorICAgICAgICBNb2R1bGVJbml0VGVzdGVyKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwNWY0OQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQpAQCAtMCwwICsxLDI0NCBAQAoraW1wb3J0IGRpcworaW1wb3J0IHN5cworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgdW5pdHRlc3QKKworZGVmIGRpc2Fzc2VtYmxlKGZ1bmMpOgorICAgIGYgPSBTdHJpbmdJTygpCisgICAgdG1wID0gc3lzLnN0ZG91dAorICAgIHN5cy5zdGRvdXQgPSBmCisgICAgZGlzLmRpcyhmdW5jKQorICAgIHN5cy5zdGRvdXQgPSB0bXAKKyAgICByZXN1bHQgPSBmLmdldHZhbHVlKCkKKyAgICBmLmNsb3NlKCkKKyAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBkaXNfc2luZ2xlKGxpbmUpOgorICAgIHJldHVybiBkaXNhc3NlbWJsZShjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykpCisKK2NsYXNzIFRlc3RUcmFuZm9ybXModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW5vdChzZWxmKToKKyAgICAgICAgIyBVTkFSWV9OT1QgUE9QX0pVTVBfSUZfRkFMU0UgIC0tPiAgUE9QX0pVTVBfSUZfVFJVRQorICAgICAgICBkZWYgdW5vdCh4KToKKyAgICAgICAgICAgIGlmIG5vdCB4ID09IDI6CisgICAgICAgICAgICAgICAgZGVsIHgKKyAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUodW5vdCkKKyAgICAgICAgZm9yIGVsZW0gaW4gKCdVTkFSWV9OT1QnLCAnUE9QX0pVTVBfSUZfRkFMU0UnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYXNtKQorICAgICAgICBzZWxmLmFzc2VydEluKCdQT1BfSlVNUF9JRl9UUlVFJywgYXNtKQorCisgICAgZGVmIHRlc3RfZWxpbV9pbnZlcnNpb25fb2ZfaXNfb3JfaW4oc2VsZik6CisgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKKyAgICAgICAgICAgICgnbm90IGEgaXMgYicsICcoaXMgbm90KScsKSwKKyAgICAgICAgICAgICgnbm90IGEgaW4gYicsICcobm90IGluKScsKSwKKyAgICAgICAgICAgICgnbm90IGEgaXMgbm90IGInLCAnKGlzKScsKSwKKyAgICAgICAgICAgICgnbm90IGEgbm90IGluIGInLCAnKGluKScsKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKworICAgIGRlZiB0ZXN0X25vbmVfYXNfY29uc3RhbnQoc2VsZik6CisgICAgICAgICMgTE9BRF9HTE9CQUwgTm9uZSAgLS0+ICBMT0FEX0NPTlNUIE5vbmUKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBOb25lCisgICAgICAgICAgICByZXR1cm4geAorICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQorICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfR0xPQkFMJywpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCisgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICcoTm9uZSknKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgJ0FkZGluZyBhIGRvY3N0cmluZyBtYWRlIHRoaXMgdGVzdCBmYWlsIGluIFB5Mi41LjAnCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEluKCdMT0FEX0NPTlNUJywgZGlzYXNzZW1ibGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0xPQURfR0xPQkFMJywgZGlzYXNzZW1ibGUoZikpCisKKyAgICBkZWYgdGVzdF93aGlsZV9vbmUoc2VsZik6CisgICAgICAgICMgU2tpcCBvdmVyOiAgTE9BRF9DT05TVCB0cnVlY29uc3QgIFBPUF9KVU1QX0lGX0ZBTFNFIHh4CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBsaXN0CisgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCisgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCisgICAgICAgIGZvciBlbGVtIGluICgnSlVNUF9BQlNPTFVURScsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorCisgICAgZGVmIHRlc3RfcGFja191bnBhY2soc2VsZik6CisgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKKyAgICAgICAgICAgICgnYSwgPSBhLCcsICdMT0FEX0NPTlNUJywpLAorICAgICAgICAgICAgKCdhLCBiID0gYSwgYicsICdST1RfVFdPJywpLAorICAgICAgICAgICAgKCdhLCBiLCBjID0gYSwgYiwgYycsICdST1RfVEhSRUUnLCksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOUEFDS19UVVBMRScsIGFzbSkKKworICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfdHVwbGVzX29mX2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAorICAgICAgICAgICAgKCdhID0gMSwyLDMnLCAnKCgxLCAyLCAzKSknKSwKKyAgICAgICAgICAgICgnKCJhIiwiYiIsImMiKScsICIoKCdhJywgJ2InLCAnYycpKSIpLAorICAgICAgICAgICAgKCdhLGIsYyA9IDEsMiwzJywgJygoMSwgMiwgMykpJyksCisgICAgICAgICAgICAoJyhOb25lLCAxLCBOb25lKScsICcoKE5vbmUsIDEsIE5vbmUpKScpLAorICAgICAgICAgICAgKCcoKDEsIDIpLCAzLCA0KScsICcoKCgxLCAyKSwgMywgNCkpJyksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKKworICAgICAgICAjIEJ1ZyAxMDUzODE5OiAgVHVwbGUgb2YgY29uc3RhbnRzIG1pc2lkZW50aWZpZWQgd2hlbiBwcmVzZW50ZWQgd2l0aDoKKyAgICAgICAgIyAuIC4gLiBvcGNvZGVfd2l0aF9hcmcgMTAwICAgdW5hcnlfb3Bjb2RlICAgQlVJTERfVFVQTEUgMSAgLiAuIC4KKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIHdvdWxkIHNlZ2ZhdWx0IHVwb24gY29tcGlsYXRpb24KKyAgICAgICAgZGVmIGNyYXRlcigpOgorICAgICAgICAgICAgKH5bCisgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwKKyAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LAorICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksCisgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwKKyAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LAorICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksCisgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwKKyAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LAorICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksCisgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwKKyAgICAgICAgICAgIF0sKQorCisgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9iaW5vcHNfb25fY29uc3RhbnRzKHNlbGYpOgorICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCisgICAgICAgICAgICAoJ2EgPSAyKzMrNCcsICcoOSknKSwgICAgICAgICAgICAgICAgICAgIyBjaGFpbmVkIGZvbGQKKyAgICAgICAgICAgICgnIkAiKjQnLCAiKCdAQEBAJykiKSwgICAgICAgICAgICAgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKKyAgICAgICAgICAgICgnYT0iYWJjIiArICJkZWYiJywgIignYWJjZGVmJykiKSwgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKKyAgICAgICAgICAgICgnYSA9IDMqKjQnLCAnKDgxKScpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBwb3dlcgorICAgICAgICAgICAgKCdhID0gMyo0JywgJygxMiknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG11bHRpcGx5CisgICAgICAgICAgICAoJ2EgPSAxMy8vNCcsICcoMyknKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgZmxvb3IgZGl2aWRlCisgICAgICAgICAgICAoJ2EgPSAxNCU0JywgJygyKScpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbW9kdWxvCisgICAgICAgICAgICAoJ2EgPSAyKzMnLCAnKDUpJyksICAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYWRkCisgICAgICAgICAgICAoJ2EgPSAxMy00JywgJyg5KScpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgc3VidHJhY3QKKyAgICAgICAgICAgICgnYSA9ICgxMiwxMylbMV0nLCAnKDEzKScpLCAgICAgICAgICAgICAjIGJpbmFyeSBzdWJzY3IKKyAgICAgICAgICAgICgnYSA9IDEzIDw8IDInLCAnKDUyKScpLCAgICAgICAgICAgICAgICAjIGJpbmFyeSBsc2hpZnQKKyAgICAgICAgICAgICgnYSA9IDEzID4+IDInLCAnKDMpJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSByc2hpZnQKKyAgICAgICAgICAgICgnYSA9IDEzICYgNycsICcoNSknKSwgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhbmQKKyAgICAgICAgICAgICgnYSA9IDEzIF4gNycsICcoMTApJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSB4b3IKKyAgICAgICAgICAgICgnYSA9IDEzIHwgNycsICcoMTUpJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSBvcgorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfJywgYXNtKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgdW5mb2xkYWJsZXMgYXJlIHNraXBwZWQKKyAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnYT0yKyJiIicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJygyKScsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdiJykiLCBhc20pCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBsYXJnZSBzZXF1ZW5jZXMgZG8gbm90IHJlc3VsdCBmcm9tIGZvbGRpbmcKKyAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnYT0ieCIqMTAwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJygxMDAwKScsIGFzbSkKKworICAgIGRlZiB0ZXN0X2JpbmFyeV9zdWJzY3Jfb25fdW5pY29kZShzZWxmKToKKyAgICAgICAgIyB1bmljb2RlIHN0cmluZ3MgZG9uJ3QgZ2V0IG9wdGltaXplZAorICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCd1ImZvbyJbMF0nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCIodSdmJykiLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCisgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ3UiXHUwMDYxXHVmZmZmIlsxXScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIih1J1xcdWZmZmYnKSIsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKworICAgICAgICAjIG91dCBvZiByYW5nZQorICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCd1ImZ1dSJbMTBdJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKyAgICAgICAgIyBub24tQk1QIGNoYXIgKHNlZSAjNTA1NykKKyAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgndSJcVTAwMDEyMzQ1IlswXScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCisgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ3UiXFUwMDAxMjM0NWFiY2RlZiJbM10nKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQorCisKKyAgICBkZWYgdGVzdF9mb2xkaW5nX29mX3VuYXJ5b3BzX29uX2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAorICAgICAgICAgICAgKCdgMWAnLCAiKCcxJykiKSwgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgY29udmVydAorICAgICAgICAgICAgKCctMC41JywgJygtMC41KScpLCAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKKyAgICAgICAgICAgICgnfi0yJywgJygxKScpLCAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICApOgorICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGFzbSkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IHVuZm9sZGFibGVzIGFyZSBza2lwcGVkCisgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKKyAgICAgICAgICAgICgnLSJhYmMiJywgIignYWJjJykiKSwgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCisgICAgICAgICAgICAoJ34iYWJjIicsICIoJ2FiYycpIiksICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKKyAgICAgICAgKToKKyAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdVTkFSWV8nLCBhc20pCisKKyAgICBkZWYgdGVzdF9lbGltX2V4dHJhX3JldHVybihzZWxmKToKKyAgICAgICAgIyBSRVRVUk4gTE9BRF9DT05TVCBOb25lIFJFVFVSTiAgLS0+ICBSRVRVUk4KKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICByZXR1cm4geAorICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdMT0FEX0NPTlNUJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCcoTm9uZSknLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAxKQorCisgICAgZGVmIHRlc3RfZWxpbV9qdW1wX3RvX3JldHVybihzZWxmKToKKyAgICAgICAgIyBKVU1QX0ZPUldBUkQgdG8gUkVUVVJOIC0tPiAgUkVUVVJOCisgICAgICAgIGRlZiBmKGNvbmQsIHRydWVfdmFsdWUsIGZhbHNlX3ZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiB0cnVlX3ZhbHVlIGlmIGNvbmQgZWxzZSBmYWxzZV92YWx1ZQorICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAyKQorCisgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjEoc2VsZik6CisgICAgICAgICMgRWxpbWluYXRlIGRlYWQgY29kZToganVtcHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJucyBjYW4ndCBiZSByZWFjaGVkCisgICAgICAgIGRlZiBmKGNvbmQxLCBjb25kMik6CisgICAgICAgICAgICBpZiBjb25kMTogcmV0dXJuIDEKKyAgICAgICAgICAgIGlmIGNvbmQyOiByZXR1cm4gMgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICByZXR1cm4gMworICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBpZiBjb25kMTogcmV0dXJuIDQKKyAgICAgICAgICAgICAgICByZXR1cm4gNQorICAgICAgICAgICAgcmV0dXJuIDYKKyAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0FCU09MVVRFJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgNikKKworICAgIGRlZiB0ZXN0X2VsaW1fanVtcF9hZnRlcl9yZXR1cm4yKHNlbGYpOgorICAgICAgICAjIEVsaW1pbmF0ZSBkZWFkIGNvZGU6IGp1bXBzIGltbWVkaWF0ZWx5IGFmdGVyIHJldHVybnMgY2FuJ3QgYmUgcmVhY2hlZAorICAgICAgICBkZWYgZihjb25kMSwgY29uZDIpOgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBpZiBjb25kMTogcmV0dXJuIDQKKyAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQorICAgICAgICAjIFRoZXJlIHNob3VsZCBiZSBvbmUganVtcCBmb3IgdGhlIHdoaWxlIGxvb3AuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ0pVTVBfQUJTT0xVVEUnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGltcG9ydCBzeXMKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorICAgIHRlc3RfY2xhc3NlcyA9IChUZXN0VHJhbmZvcm1zLCkKKworICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoImJhY2txdW90ZSBub3Qgc3VwcG9ydGVkIiwgU3ludGF4V2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisKKyAgICAgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgICAgICBwcmludCBjb3VudHMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyM2QzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKQEAgLTAsMCArMSw3NCBAQAorIiIiCitUZXN0IHN1aXRlIHRvIGNoZWNrIGNvbXBpbGFuY2Ugd2l0aCBQRVAgMjQ3LCB0aGUgc3RhbmRhcmQgQVBJCitmb3IgaGFzaGluZyBhbGdvcml0aG1zCisiIiIKKworaW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywgJ3RoZSBtZDUgbW9kdWxlIGlzIGRlcHJlY2F0ZWQuKicsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywgJ3RoZSBzaGEgbW9kdWxlIGlzIGRlcHJlY2F0ZWQuKicsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisKK2ltcG9ydCBobWFjCitpbXBvcnQgbWQ1CitpbXBvcnQgc2hhCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgUGVwMjQ3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfbW9kdWxlKHNlbGYsIG1vZHVsZSwga2V5PU5vbmUpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdkaWdlc3Rfc2l6ZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobW9kdWxlLmRpZ2VzdF9zaXplIGlzIE5vbmUgb3IgbW9kdWxlLmRpZ2VzdF9zaXplID4gMCkKKworICAgICAgICBpZiBub3Qga2V5IGlzIE5vbmU6CisgICAgICAgICAgICBvYmoxID0gbW9kdWxlLm5ldyhrZXkpCisgICAgICAgICAgICBvYmoyID0gbW9kdWxlLm5ldyhrZXksICdzdHJpbmcnKQorCisgICAgICAgICAgICBoMSA9IG1vZHVsZS5uZXcoa2V5LCAnc3RyaW5nJykuZGlnZXN0KCkKKyAgICAgICAgICAgIG9iajMgPSBtb2R1bGUubmV3KGtleSkKKyAgICAgICAgICAgIG9iajMudXBkYXRlKCdzdHJpbmcnKQorICAgICAgICAgICAgaDIgPSBvYmozLmRpZ2VzdCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvYmoxID0gbW9kdWxlLm5ldygpCisgICAgICAgICAgICBvYmoyID0gbW9kdWxlLm5ldygnc3RyaW5nJykKKworICAgICAgICAgICAgaDEgPSBtb2R1bGUubmV3KCdzdHJpbmcnKS5kaWdlc3QoKQorICAgICAgICAgICAgb2JqMyA9IG1vZHVsZS5uZXcoKQorICAgICAgICAgICAgb2JqMy51cGRhdGUoJ3N0cmluZycpCisgICAgICAgICAgICBoMiA9IG9iajMuZGlnZXN0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgxLCBoMikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihvYmoxLCAnZGlnZXN0X3NpemUnKSkKKworICAgICAgICBpZiBub3QgbW9kdWxlLmRpZ2VzdF9zaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iajEuZGlnZXN0X3NpemUsIG1vZHVsZS5kaWdlc3Rfc2l6ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iajEuZGlnZXN0X3NpemUsIGxlbihoMSkpCisgICAgICAgIG9iajEudXBkYXRlKCdzdHJpbmcnKQorICAgICAgICBvYmpfY29weSA9IG9iajEuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqMS5kaWdlc3QoKSwgb2JqX2NvcHkuZGlnZXN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqMS5oZXhkaWdlc3QoKSwgb2JqX2NvcHkuaGV4ZGlnZXN0KCkpCisKKyAgICAgICAgZGlnZXN0LCBoZXhkaWdlc3QgPSBvYmoxLmRpZ2VzdCgpLCBvYmoxLmhleGRpZ2VzdCgpCisgICAgICAgIGhkMiA9ICIiCisgICAgICAgIGZvciBieXRlIGluIGRpZ2VzdDoKKyAgICAgICAgICAgIGhkMiArPSAnJTAyeCcgJSBvcmQoYnl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZDIsIGhleGRpZ2VzdCkKKworICAgIGRlZiB0ZXN0X21kNShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19tb2R1bGUobWQ1KQorCisgICAgZGVmIHRlc3Rfc2hhKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX21vZHVsZShzaGEpCisKKyAgICBkZWYgdGVzdF9obWFjKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX21vZHVsZShobWFjLCBrZXk9J2FiYycpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFBlcDI0N1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjg2NDY3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMgLSotIGNvZGluZzoga29pOC1yIC0qLQorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFBFUDI2M1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSLwydTPziIuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgJ1x4ZDBceDlmXHhkMFx4YjhceGQxXHg4Mlx4ZDBceGJlXHhkMFx4YmQnCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHUiXPAiLmVuY29kZSgidXRmLTgiKSwKKyAgICAgICAgICAgICdcXFx4ZDBceDlmJworICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg4MgorICAgICAgICBjID0gY29tcGlsZSgiXG4jIGNvZGluZzogdXRmLThcbnUgPSB1J1x4YzNceGIzJ1xuIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyBjIGluIGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyd1J10sIHUnXHhmMycpCisKKworICAgIGRlZiB0ZXN0X2lzc3VlMzI5NyhzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGUoImEsIGIgPSAnXFUwMDAxMDEwRicsICdcXFUwMDAxMDEwRiciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCBkWydiJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRbJ2EnXSksIGxlbihkWydiJ10pKQorCisgICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IGNoZWNrX2JvbSgpIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaWYKKyAgICAgICAgIyBjaGVja19ib20oKSBmYWlscyBpbiBweWRlYnVnIG1vZGU6IGEgYnVmZmVyIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdAorICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKKworICAgICAgICAjIG9uZSBieXRlIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtMTYtTEUgQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAnXHhmZlx4MjAnKQorCisgICAgICAgICMgdHdvIGJ5dGVzIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtOCBCT00KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICdceGVmXHhiYlx4MjAnKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQRVAyNjNUZXN0KQorCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjgyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkKQEAgLTAsMCArMSwyMTAgQEAKKyMgVGVzdCB0aGUgVW5pY29kZSB2ZXJzaW9ucyBvZiBub3JtYWwgZmlsZSBmdW5jdGlvbnMKKyMgb3Blbiwgb3Mub3Blbiwgb3Muc3RhdC4gb3MubGlzdGRpciwgb3MucmVuYW1lLCBvcy5yZW1vdmUsIG9zLm1rZGlyLCBvcy5jaGRpciwgb3Mucm1kaXIKK2ltcG9ydCBzeXMsIG9zLCB1bml0dGVzdAorZnJvbSB1bmljb2RlZGF0YSBpbXBvcnQgbm9ybWFsaXplCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitmaWxlbmFtZXMgPSBbCisgICAgJzFfYWJjJywKKyAgICB1JzJfYXNjaWknLAorICAgIHUnM19Hclx4ZmNceGRmLUdvdHQnLAorICAgIHUnNF9cdTAzOTNcdTAzYjVcdTAzYjlcdTAzYWMtXHUwM2MzXHUwM2IxXHUwM2MyJywKKyAgICB1JzVfXHUwNDE3XHUwNDM0XHUwNDQwXHUwNDMwXHUwNDMyXHUwNDQxXHUwNDQyXHUwNDMyXHUwNDQzXHUwNDM5XHUwNDQyXHUwNDM1JywKKyAgICB1JzZfXHUzMDZiXHUzMDdkXHUzMDkzJywKKyAgICB1JzdfXHUwNWQ0XHUwNWU5XHUwNWU3XHUwNWU2XHUwNWU1XHUwNWUxJywKKyAgICB1JzhfXHU2NmU4XHU2NmU5XHU2NmViJywKKyAgICB1JzlfXHU2NmU4XHUwNWU5XHUzMDkzXHUwNDM0XHUwMzkzXHhkZicsCisgICAgIyBTcGVjaWZpYyBjb2RlIHBvaW50czogZm4sIE5GQyhmbikgYW5kIE5GS0MoZm4pIGFsbCBkaWZmZXJlbnRzCisgICAgdScxMF9cdTFmZWVcdTFmZmQnLAorICAgIF0KKworIyBNYWMgT1MgWCBkZWNvbXBvc2VzIFVuaWNvZGUgbmFtZXMsIHVzaW5nIE5vcm1hbCBGb3JtIEQuCisjIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL21hYy9saWJyYXJ5L3FhL3FhMjAwMS9xYTExNzMuaHRtbAorIyAiSG93ZXZlciwgbW9zdCB2b2x1bWUgZm9ybWF0cyBkbyBub3QgZm9sbG93IHRoZSBleGFjdCBzcGVjaWZpY2F0aW9uIGZvcgorIyB0aGVzZSBub3JtYWwgZm9ybXMuICBGb3IgZXhhbXBsZSwgSEZTIFBsdXMgdXNlcyBhIHZhcmlhbnQgb2YgTm9ybWFsIEZvcm0gRAorIyBpbiB3aGljaCBVKzIwMDAgdGhyb3VnaCBVKzJGRkYsIFUrRjkwMCB0aHJvdWdoIFUrRkFGRiwgYW5kIFUrMkY4MDAgdGhyb3VnaAorIyBVKzJGQUZGIGFyZSBub3QgZGVjb21wb3NlZC4iCitpZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6CisgICAgZmlsZW5hbWVzLmV4dGVuZChbCisgICAgICAgICMgU3BlY2lmaWMgY29kZSBwb2ludHM6IE5GQyhmbiksIE5GRChmbiksIE5GS0MoZm4pIGFuZCBORktEKGZuKSBhbGwgZGlmZmVyZW50cworICAgICAgICB1JzExX1x1MDM4NVx1MDNkM1x1MDNkNCcsCisgICAgICAgIHUnMTJfXHUwMGE4XHUwMzAxXHUwM2QyXHUwMzAxXHUwM2QyXHUwMzA4JywgICAgIyA9PSBORkQodSdcdTAzODVcdTAzZDNcdTAzZDQnKQorICAgICAgICB1JzEzX1x1MDAyMFx1MDMwOFx1MDMwMVx1MDM4ZVx1MDNhYicsICAgICAgICAgICMgPT0gTkZLQyh1J1x1MDM4NVx1MDNkM1x1MDNkNCcpCisgICAgICAgIHUnMTRfXHUxZTliXHUxZmMxXHUxZmNkXHUxZmNlXHUxZmNmXHUxZmRkXHUxZmRlXHUxZmRmXHUxZmVkJywKKworICAgICAgICAjIFNwZWNpZmljIGNvZGUgcG9pbnRzOiBmbiwgTkZDKGZuKSBhbmQgTkZLQyhmbikgYWxsIGRpZmZlcmVudHMKKyAgICAgICAgdScxNV9cdTFmZWVcdTFmZmRcdWZhZDEnLAorICAgICAgICB1JzE2X1x1MjAwMFx1MjAwMFx1MjAwMEEnLAorICAgICAgICB1JzE3X1x1MjAwMVx1MjAwMVx1MjAwMUEnLAorICAgICAgICB1JzE4X1x1MjAwM1x1MjAwM1x1MjAwM0EnLCAjID09IE5GQyh1J1x1MjAwMVx1MjAwMVx1MjAwMUEnKQorICAgICAgICB1JzE5X1x1MDAyMFx1MDAyMFx1MDAyMEEnLCAjIHUnXHUwMDIwJyA9PSB1JyAnID09IE5GS0ModSdcdTIwMDAnKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgTkZLQyh1J1x1MjAwMScpID09IE5GS0ModSdcdTIwMDMnKQorXSkKKworCisjIElzIGl0IFVuaWNvZGUtZnJpZW5kbHk/CitpZiBub3Qgb3MucGF0aC5zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lczoKKyAgICBmc2VuY29kaW5nID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpIG9yIHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKQorICAgIHRyeToKKyAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgbmFtZS5lbmNvZGUoZnNlbmNvZGluZykKKyAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib25seSBOVCsgYW5kIHN5c3RlbXMgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmljb2RlLWZyaWVuZGx5IGZpbGVzeXN0ZW0gZW5jb2RpbmciKQorCisKKyMgRGVzdHJveSBkaXJlY3RvcnkgZGlybmFtZSBhbmQgYWxsIGZpbGVzIHVuZGVyIGl0LCB0byBvbmUgbGV2ZWwuCitkZWYgZGVsdHJlZShkaXJuYW1lKToKKyAgICAjIERvbid0IGhpZGUgbGVnaXRpbWF0ZSBlcnJvcnM6ICBpZiBvbmUgb2YgdGhlc2Ugc3Vja2VycyBleGlzdHMsIGl0J3MKKyAgICAjIGFuIGVycm9yIGlmIHdlIGNhbid0IHJlbW92ZSBpdC4KKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkaXJuYW1lKToKKyAgICAgICAgIyBtdXN0IHBhc3MgdW5pY29kZSB0byBvcy5saXN0ZGlyKCkgc28gd2UgZ2V0IGJhY2sgdW5pY29kZSByZXN1bHRzLgorICAgICAgICBmb3IgZm5hbWUgaW4gb3MubGlzdGRpcih1bmljb2RlKGRpcm5hbWUpKToKKyAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oZGlybmFtZSwgZm5hbWUpKQorICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQorCisKK2NsYXNzIFVuaWNvZGVGaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGZpbGVzID0gc2V0KGZpbGVuYW1lcykKKyAgICBub3JtYWxfZm9ybSA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWtkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbGVzID0gc2V0KCkKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5maWxlczoKKyAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5ub3JtKG5hbWUpKQorICAgICAgICAgICAgd2l0aCBvcGVuKG5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKChuYW1lKydcbicpLmVuY29kZSgidXRmLTgiKSkKKyAgICAgICAgICAgIG9zLnN0YXQobmFtZSkKKyAgICAgICAgICAgIGZpbGVzLmFkZChuYW1lKQorICAgICAgICBzZWxmLmZpbGVzID0gZmlsZXMKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZGVsdHJlZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIG5vcm0oc2VsZiwgcyk6CisgICAgICAgIGlmIHNlbGYubm9ybWFsX2Zvcm0gYW5kIGlzaW5zdGFuY2UocywgdW5pY29kZSk6CisgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKHNlbGYubm9ybWFsX2Zvcm0sIHMpCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgX2FwcGx5X2ZhaWx1cmUoc2VsZiwgZm4sIGZpbGVuYW1lLCBleHBlY3RlZF9leGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2ZuX2luX2V4Y2VwdGlvbiA9IFRydWUpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkX2V4Y2VwdGlvbikgYXMgYzoKKyAgICAgICAgICAgIGZuKGZpbGVuYW1lKQorICAgICAgICBleGNfZmlsZW5hbWUgPSBjLmV4Y2VwdGlvbi5maWxlbmFtZQorICAgICAgICAjIHRoZSAiZmlsZW5hbWUiIGV4Y2VwdGlvbiBhdHRyaWJ1dGUgbWF5IGJlIGVuY29kZWQKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGNfZmlsZW5hbWUsIHN0cik6CisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpCisgICAgICAgIGlmIGNoZWNrX2ZuX2luX2V4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2ZpbGVuYW1lLCBmaWxlbmFtZSwgIkZ1bmN0aW9uICclcyglcikgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggYmFkIGZpbGVuYW1lIGluIHRoZSBleGNlcHRpb246ICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbi5fX25hbWVfXywgZmlsZW5hbWUsIGV4Y19maWxlbmFtZSkpCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgIyBQYXNzIG5vbi1leGlzdGluZyBVbmljb2RlIGZpbGVuYW1lcyBhbGwgb3ZlciB0aGUgcGxhY2UuCisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmlsZXM6CisgICAgICAgICAgICBuYW1lID0gIm5vdF8iICsgbmFtZQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcGVuLCBuYW1lLCBJT0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5zdGF0LCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5jaGRpciwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3Mucm1kaXIsIG5hbWUsIE9TRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLnJlbW92ZSwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgICMgbGlzdGRpciBtYXkgYXBwZW5kIGEgd2lsZGNhcmQgdG8gdGhlIGZpbGVuYW1lLCBzbyBkb250IGNoZWNrCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLmxpc3RkaXIsIG5hbWUsIE9TRXJyb3IsIEZhbHNlKQorCisgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5maWxlczoKKyAgICAgICAgICAgIGYgPSBvcGVuKG5hbWUsICd3JykKKyAgICAgICAgICAgIGYud3JpdGUoKG5hbWUrJ1xuJykuZW5jb2RlKCJ1dGYtOCIpKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBvcy5zdGF0KG5hbWUpCisKKyAgICAjIFNraXAgdGhlIHRlc3Qgb24gZGFyd2luLCBiZWNhdXNlIGRhcndpbiBkb2VzIG5vcm1hbGl6ZSB0aGUgZmlsZW5hbWUgdG8KKyAgICAjIE5GRCAoYSB2YXJpYW50IG9mIFVuaWNvZGUgTkZEIGZvcm0pLiBOb3JtYWxpemUgdGhlIGZpbGVuYW1lIHRvIE5GQywgTkZLQywKKyAgICAjIE5GS0QgaW4gUHl0aG9uIGlzIHVzZWxlc3MsIGJlY2F1c2UgZGFyd2luIHdpbGwgbm9ybWFsaXplIGl0IGxhdGVyIGFuZCBzbworICAgICMgb3BlbigpLCBvcy5zdGF0KCksIGV0Yy4gZG9uJ3QgcmFpc2UgYW55IGV4Y2VwdGlvbi4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJywgJ2lycmVsZXZhbnQgdGVzdCBvbiBNYWMgT1MgWCcpCisgICAgZGVmIHRlc3Rfbm9ybWFsaXplKHNlbGYpOgorICAgICAgICBmaWxlcyA9IHNldChmIGZvciBmIGluIHNlbGYuZmlsZXMgaWYgaXNpbnN0YW5jZShmLCB1bmljb2RlKSkKKyAgICAgICAgb3RoZXJzID0gc2V0KCkKKyAgICAgICAgZm9yIG5mIGluIHNldChbJ05GQycsICdORkQnLCAnTkZLQycsICdORktEJ10pOgorICAgICAgICAgICAgb3RoZXJzIHw9IHNldChub3JtYWxpemUobmYsIGZpbGUpIGZvciBmaWxlIGluIGZpbGVzKQorICAgICAgICBvdGhlcnMgLT0gZmlsZXMKKyAgICAgICAgZm9yIG5hbWUgaW4gb3RoZXJzOgorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcGVuLCBuYW1lLCBJT0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5zdGF0LCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5jaGRpciwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3Mucm1kaXIsIG5hbWUsIE9TRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLnJlbW92ZSwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgICMgbGlzdGRpciBtYXkgYXBwZW5kIGEgd2lsZGNhcmQgdG8gdGhlIGZpbGVuYW1lLCBzbyBkb250IGNoZWNrCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLmxpc3RkaXIsIG5hbWUsIE9TRXJyb3IsIEZhbHNlKQorCisgICAgIyBTa2lwIHRoZSB0ZXN0IG9uIGRhcndpbiwgYmVjYXVzZSBkYXJ3aW4gdXNlcyBhIG5vcm1hbGl6YXRpb24gZGlmZmVyZW50CisgICAgIyB0aGFuIFB5dGhvbiBORkQgbm9ybWFsaXphdGlvbjogZmlsZW5hbWVzIGFyZSBkaWZmZXJlbnQgZXZlbiBpZiB3ZSB1c2UKKyAgICAjIFB5dGhvbiBORkQgbm9ybWFsaXphdGlvbi4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJywgJ2lycmVsZXZhbnQgdGVzdCBvbiBNYWMgT1MgWCcpCisgICAgZGVmIHRlc3RfbGlzdGRpcihzZWxmKToKKyAgICAgICAgc2YwID0gc2V0KHNlbGYuZmlsZXMpCisgICAgICAgIGYxID0gb3MubGlzdGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBmMiA9IG9zLmxpc3RkaXIodW5pY29kZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpKQorICAgICAgICBzZjIgPSBzZXQob3MucGF0aC5qb2luKHVuaWNvZGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIGYpIGZvciBmIGluIGYyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNmMCwgc2YyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmMSksIGxlbihmMikpCisKKyAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6CisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmlsZXM6CisgICAgICAgICAgICBvcy5yZW5hbWUobmFtZSwgInRtcCIpCisgICAgICAgICAgICBvcy5yZW5hbWUoInRtcCIsIG5hbWUpCisKKyAgICBkZWYgdGVzdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4odGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0dyXHhmY1x4ZGYtXHU2NmU4XHU2NmU5XHU2NmViJykKKyAgICAgICAgZmlsZW5hbWUgPSB1J1x4ZGYtXHU2NmU4XHU2NmU5XHU2NmViJworICAgICAgICBvbGR3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLm1rZGlyKGRpcm5hbWUpCisgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoKGZpbGVuYW1lICsgJ1xuJykuZW5jb2RlKCJ1dGYtOCIpKQorICAgICAgICAgICAgb3MuYWNjZXNzKGZpbGVuYW1lLG9zLlJfT0spCisgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGR3ZCkKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcm5hbWUpCisKKworY2xhc3MgVW5pY29kZU5GQ0ZpbGVUZXN0cyhVbmljb2RlRmlsZVRlc3RzKToKKyAgICBub3JtYWxfZm9ybSA9ICdORkMnCisKKworY2xhc3MgVW5pY29kZU5GREZpbGVUZXN0cyhVbmljb2RlRmlsZVRlc3RzKToKKyAgICBub3JtYWxfZm9ybSA9ICdORkQnCisKKworY2xhc3MgVW5pY29kZU5GS0NGaWxlVGVzdHMoVW5pY29kZUZpbGVUZXN0cyk6CisgICAgbm9ybWFsX2Zvcm0gPSAnTkZLQycKKworCitjbGFzcyBVbmljb2RlTkZLREZpbGVUZXN0cyhVbmljb2RlRmlsZVRlc3RzKToKKyAgICBub3JtYWxfZm9ybSA9ICdORktEJworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0cnk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICBVbmljb2RlRmlsZVRlc3RzLAorICAgICAgICAgICAgVW5pY29kZU5GQ0ZpbGVUZXN0cywKKyAgICAgICAgICAgIFVuaWNvZGVORkRGaWxlVGVzdHMsCisgICAgICAgICAgICBVbmljb2RlTkZLQ0ZpbGVUZXN0cywKKyAgICAgICAgICAgIFVuaWNvZGVORktERmlsZVRlc3RzLAorICAgICAgICApCisgICAgZmluYWxseToKKyAgICAgICAgZGVsdHJlZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BlcDI5Mi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BlcDI5Mi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhhMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CkBAIC0wLDAgKzEsMTkzIEBACisjIENvcHlyaWdodCAoQykgMjAwNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorIyBBdXRob3I6IGJhcnJ5QHB5dGhvbi5vcmcgKEJhcnJ5IFdhcnNhdykKKyMgTGljZW5zZTogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9QeXRob25Tb2Z0Rm91bmRhdGlvbi5waHAKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworCitjbGFzcyBCYWc6CisgICAgcGFzcworCitjbGFzcyBNYXBwaW5nOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuYW1lKToKKyAgICAgICAgb2JqID0gc2VsZgorICAgICAgICBmb3IgcGFydCBpbiBuYW1lLnNwbGl0KCcuJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIHBhcnQpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IobmFtZSkKKyAgICAgICAgcmV0dXJuIG9iagorCisKK2NsYXNzIFRlc3RUZW1wbGF0ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVndWxhcl90ZW1wbGF0ZXMoc2VsZik6CisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyB0byBlYXQgYSBiYWcgb2YgJHdoYXQgd29ydGggJCQxMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJywgd2hhdD0naGFtJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0aW0gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIGhhbSB3b3J0aCAkMTAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdCh3aG89J3RpbScpKQorCisgICAgZGVmIHRlc3RfcmVndWxhcl90ZW1wbGF0ZXNfd2l0aF9icmFjZXMoc2VsZik6CisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAke3doYXR9IGZvciAke21lYWx9JykKKyAgICAgICAgZCA9IGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nLCBtZWFsPSdkaW5uZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3Vic3RpdHV0ZShkKSwgJ3RpbSBsaWtlcyBoYW0gZm9yIGRpbm5lcicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnN1YnN0aXR1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSkKKworICAgIGRlZiB0ZXN0X2VzY2FwZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgdG8gZWF0IGEgYmFnIG9mICQkd2hhdCB3b3J0aCAkJDEwMCcpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJywgd2hhdD0naGFtJykpLAorICAgICAgICAgICAndGltIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiAkd2hhdCB3b3J0aCAkMTAwJykKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICQkJykKKyAgICAgICAgZXEocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksICd0aW0gbGlrZXMgJCcpCisKKyAgICBkZWYgdGVzdF9wZXJjZW50cyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJShmb28pcyAkZm9vICR7Zm9vfScpCisgICAgICAgIGQgPSBkaWN0KGZvbz0nYmF6JykKKyAgICAgICAgZXEocy5zdWJzdGl0dXRlKGQpLCAnJShmb28pcyBiYXogYmF6JykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZCksICclKGZvbylzIGJheiBiYXonKQorCisgICAgZGVmIHRlc3Rfc3RyaW5naWZpY2F0aW9uKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9IFRlbXBsYXRlKCd0aW0gaGFzIGVhdGVuICRjb3VudCBiYWdzIG9mIGhhbSB0b2RheScpCisgICAgICAgIGQgPSBkaWN0KGNvdW50PTcpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkKSwgJ3RpbSBoYXMgZWF0ZW4gNyBiYWdzIG9mIGhhbSB0b2RheScpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGQpLCAndGltIGhhcyBlYXRlbiA3IGJhZ3Mgb2YgaGFtIHRvZGF5JykKKyAgICAgICAgcyA9IFRlbXBsYXRlKCd0aW0gaGFzIGVhdGVuICR7Y291bnR9IGJhZ3Mgb2YgaGFtIHRvZGF5JykKKyAgICAgICAgZXEocy5zdWJzdGl0dXRlKGQpLCAndGltIGhhcyBlYXRlbiA3IGJhZ3Mgb2YgaGFtIHRvZGF5JykKKworICAgIGRlZiB0ZXN0X3R1cGxlYXJncyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBhdGUgJHttZWFsfScpCisgICAgICAgIGQgPSBkaWN0KHdobz0oJ3RpbScsICdmcmVkJyksIG1lYWw9KCdoYW0nLCAna3VuZyBwYW8nKSkKKyAgICAgICAgZXEocy5zdWJzdGl0dXRlKGQpLCAiKCd0aW0nLCAnZnJlZCcpIGF0ZSAoJ2hhbScsICdrdW5nIHBhbycpIikKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZCksICIoJ3RpbScsICdmcmVkJykgYXRlICgnaGFtJywgJ2t1bmcgcGFvJykiKQorCisgICAgZGVmIHRlc3RfU2FmZVRlbXBsYXRlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICR7d2hhdH0gZm9yICR7bWVhbH0nKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJykpLCAndGltIGxpa2VzICR7d2hhdH0gZm9yICR7bWVhbH0nKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdoYXQ9J2hhbScpKSwgJyR3aG8gbGlrZXMgaGFtIGZvciAke21lYWx9JykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZGljdCh3aGF0PSdoYW0nLCBtZWFsPSdkaW5uZXInKSksCisgICAgICAgICAgICckd2hvIGxpa2VzIGhhbSBmb3IgZGlubmVyJykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScpKSwKKyAgICAgICAgICAgJ3RpbSBsaWtlcyBoYW0gZm9yICR7bWVhbH0nKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJywgd2hhdD0naGFtJywgbWVhbD0nZGlubmVyJykpLAorICAgICAgICAgICAndGltIGxpa2VzIGhhbSBmb3IgZGlubmVyJykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfcGxhY2Vob2xkZXJzKHNlbGYpOgorICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcworICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJCcpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIGRpY3Qod2hvPSd0aW0nKSkKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICR7d2hhdCknKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgcy5zdWJzdGl0dXRlLCBkaWN0KHdobz0ndGltJykpCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkMTAwJykKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdCh3aG89J3RpbScpKQorCisgICAgZGVmIHRlc3RfaWRwYXR0ZXJuX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBjbGFzcyBQYXRoUGF0dGVybihUZW1wbGF0ZSk6CisgICAgICAgICAgICBpZHBhdHRlcm4gPSByJ1tfYS16XVsuX2EtejAtOV0qJworICAgICAgICBtID0gTWFwcGluZygpCisgICAgICAgIG0uYmFnID0gQmFnKCkKKyAgICAgICAgbS5iYWcuZm9vID0gQmFnKCkKKyAgICAgICAgbS5iYWcuZm9vLndobyA9ICd0aW0nCisgICAgICAgIG0uYmFnLndoYXQgPSAnaGFtJworICAgICAgICBzID0gUGF0aFBhdHRlcm4oJyRiYWcuZm9vLndobyBsaWtlcyB0byBlYXQgYSBiYWcgb2YgJGJhZy53aGF0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN1YnN0aXR1dGUobSksICd0aW0gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIGhhbScpCisKKyAgICBkZWYgdGVzdF9wYXR0ZXJuX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVBhdHRlcm4oVGVtcGxhdGUpOgorICAgICAgICAgICAgcGF0dGVybiA9IHIiIiIKKyAgICAgICAgICAgICg/UDxlc2NhcGVkPkB7Mn0pICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgIEAoP1A8bmFtZWQ+W19hLXpdWy5fYS16MC05XSopICAgICAgIHwKKyAgICAgICAgICAgIEB7KD9QPGJyYWNlZD5bX2Etel1bLl9hLXowLTldKil9ICAgIHwKKyAgICAgICAgICAgICg/UDxpbnZhbGlkPkApCisgICAgICAgICAgICAiIiIKKyAgICAgICAgbSA9IE1hcHBpbmcoKQorICAgICAgICBtLmJhZyA9IEJhZygpCisgICAgICAgIG0uYmFnLmZvbyA9IEJhZygpCisgICAgICAgIG0uYmFnLmZvby53aG8gPSAndGltJworICAgICAgICBtLmJhZy53aGF0ID0gJ2hhbScKKyAgICAgICAgcyA9IE15UGF0dGVybignQGJhZy5mb28ud2hvIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiBAYmFnLndoYXQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3Vic3RpdHV0ZShtKSwgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtJykKKworICAgICAgICBjbGFzcyBCYWRQYXR0ZXJuKFRlbXBsYXRlKToKKyAgICAgICAgICAgIHBhdHRlcm4gPSByIiIiCisgICAgICAgICAgICAoP1A8YmFkbmFtZT4uKikgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAoP1A8ZXNjYXBlZD5AezJ9KSAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICBAKD9QPG5hbWVkPltfYS16XVsuX2EtejAtOV0qKSAgICAgICB8CisgICAgICAgICAgICBAeyg/UDxicmFjZWQ+W19hLXpdWy5fYS16MC05XSopfSAgICB8CisgICAgICAgICAgICAoP1A8aW52YWxpZD5AKSAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcyA9IEJhZFBhdHRlcm4oJ0BiYWcuZm9vLndobyBsaWtlcyB0byBlYXQgYSBiYWcgb2YgQGJhZy53aGF0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5zdWJzdGl0dXRlLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5zYWZlX3N1YnN0aXR1dGUsIHt9KQorCisgICAgZGVmIHRlc3RfdW5pY29kZV92YWx1ZXMoc2VsZik6CisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkd2hhdCcpCisgICAgICAgIGQgPSBkaWN0KHdobz11J3RceGZmbScsIHdoYXQ9dSdmXHhmZVxmZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3Vic3RpdHV0ZShkKSwgdSd0XHhmZm0gbGlrZXMgZlx4ZmVceDBjZWQnKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHdoYXQnKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSwgJ3RpbSBsaWtlcyBoYW0nKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdCh3aG89J3RpbScpLCB3aGF0PSdoYW0nKSwgJ3RpbSBsaWtlcyBoYW0nKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdCh3aG89J2ZyZWQnLCB3aGF0PSdrdW5nIHBhbycpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2hvPSd0aW0nLCB3aGF0PSdoYW0nKSwKKyAgICAgICAgICAgJ3RpbSBsaWtlcyBoYW0nKQorICAgICAgICBzID0gVGVtcGxhdGUoJ3RoZSBtYXBwaW5nIGlzICRtYXBwaW5nJykKKyAgICAgICAgZXEocy5zdWJzdGl0dXRlKGRpY3QoZm9vPSdub25lJyksIG1hcHBpbmc9J2Jvem8nKSwKKyAgICAgICAgICAgJ3RoZSBtYXBwaW5nIGlzIGJvem8nKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdChtYXBwaW5nPSdvbmUnKSwgbWFwcGluZz0ndHdvJyksCisgICAgICAgICAgICd0aGUgbWFwcGluZyBpcyB0d28nKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmd1bWVudHNfc2FmZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkd2hhdCcpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKHdobz0ndGltJywgd2hhdD0naGFtJyksICd0aW0gbGlrZXMgaGFtJykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZGljdCh3aG89J3RpbScpLCB3aGF0PSdoYW0nKSwgJ3RpbSBsaWtlcyBoYW0nKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdobz0nZnJlZCcsIHdoYXQ9J2t1bmcgcGFvJyksCisgICAgICAgICAgICAgICAgICAgICAgICB3aG89J3RpbScsIHdoYXQ9J2hhbScpLAorICAgICAgICAgICAndGltIGxpa2VzIGhhbScpCisgICAgICAgIHMgPSBUZW1wbGF0ZSgndGhlIG1hcHBpbmcgaXMgJG1hcHBpbmcnKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KGZvbz0nbm9uZScpLCBtYXBwaW5nPSdib3pvJyksCisgICAgICAgICAgICd0aGUgbWFwcGluZyBpcyBib3pvJykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZGljdChtYXBwaW5nPSdvbmUnKSwgbWFwcGluZz0ndHdvJyksCisgICAgICAgICAgICd0aGUgbWFwcGluZyBpcyB0d28nKQorICAgICAgICBkID0gZGljdChtYXBwaW5nPSdvbmUnKQorICAgICAgICByYWlzZXMoVHlwZUVycm9yLCBzLnN1YnN0aXR1dGUsIGQsIHt9KQorICAgICAgICByYWlzZXMoVHlwZUVycm9yLCBzLnNhZmVfc3Vic3RpdHV0ZSwgZCwge30pCisKKyAgICBkZWYgdGVzdF9kZWxpbWl0ZXJfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcworICAgICAgICBjbGFzcyBBbXBlcnNhbmRUZW1wbGF0ZShUZW1wbGF0ZSk6CisgICAgICAgICAgICBkZWxpbWl0ZXIgPSAnJicKKyAgICAgICAgcyA9IEFtcGVyc2FuZFRlbXBsYXRlKCd0aGlzICZnaWZ0IGlzIGZvciAme3dob30gJiYnKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZ2lmdD0nYnVkJywgd2hvPSd5b3UnKSwgJ3RoaXMgYnVkIGlzIGZvciB5b3UgJicpCisgICAgICAgIHJhaXNlcyhLZXlFcnJvciwgcy5zdWJzdGl0dXRlKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShnaWZ0PSdidWQnLCB3aG89J3lvdScpLCAndGhpcyBidWQgaXMgZm9yIHlvdSAmJykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoKSwgJ3RoaXMgJmdpZnQgaXMgZm9yICZ7d2hvfSAmJykKKyAgICAgICAgcyA9IEFtcGVyc2FuZFRlbXBsYXRlKCd0aGlzICZnaWZ0IGlzIGZvciAme3dob30gJicpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIGRpY3QoZ2lmdD0nYnVkJywgd2hvPSd5b3UnKSkKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoKSwgJ3RoaXMgJmdpZnQgaXMgZm9yICZ7d2hvfSAmJykKKworICAgICAgICBjbGFzcyBQaWVEZWxpbXMoVGVtcGxhdGUpOgorICAgICAgICAgICAgZGVsaW1pdGVyID0gJ0AnCisgICAgICAgIHMgPSBQaWVEZWxpbXMoJ0B3aG8gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIEB7d2hhdH0gd29ydGggJDEwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtIHdvcnRoICQxMDAnKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorICAgIHRlc3RfY2xhc3NlcyA9IFtUZXN0VGVtcGxhdGUsXQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiMzEzNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQpAQCAtMCwwICsxLDIzOSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgX19idWlsdGluX18KK2ltcG9ydCBleGNlcHRpb25zCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSBwbGF0Zm9ybSBpbXBvcnQgc3lzdGVtIGFzIHBsYXRmb3JtX3N5c3RlbQorCitERVBSRUNBVElPTl9XQVJOSU5HUyA9IFsiQmFzZUV4Y2VwdGlvbi5tZXNzYWdlIGhhcyBiZWVuIGRlcHJlY2F0ZWQiXQorCitpZiBzeXMucHkza3dhcm5pbmc6CisgICAgREVQUkVDQVRJT05fV0FSTklOR1MuZXh0ZW5kKAorICAgICAgICBbImV4Y2VwdGlvbnMgbXVzdCBkZXJpdmUgZnJvbSBCYXNlRXhjZXB0aW9uIiwKKyAgICAgICAgICJjYXRjaGluZyBjbGFzc2VzIHRoYXQgZG9uJ3QgaW5oZXJpdCBmcm9tIEJhc2VFeGNlcHRpb24gaXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgIl9fZ2V0KGl0ZW18c2xpY2UpX18gbm90IHN1cHBvcnRlZCBmb3IgZXhjZXB0aW9uIGNsYXNzZXMiXSkKKworX2RlcHJlY2F0aW9ucyA9IFsobXNnLCBEZXByZWNhdGlvbldhcm5pbmcpIGZvciBtc2cgaW4gREVQUkVDQVRJT05fV0FSTklOR1NdCisKKyMgU2lsZW5jZSBQeTNrIGFuZCBvdGhlciBkZXByZWNhdGlvbiB3YXJuaW5ncworZGVmIGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncyhmdW5jKToKKyAgICAiIiJJZ25vcmUgdGhlIGtub3duIERlcHJlY2F0aW9uV2FybmluZ3MuIiIiCisgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3cpOgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCpfZGVwcmVjYXRpb25zLCBxdWlldD1UcnVlKToKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3KQorICAgIHJldHVybiB3cmFwcGVyCisKK2NsYXNzIEV4Y2VwdGlvbkNsYXNzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdHMgZm9yIGFueXRoaW5nIHJlbGF0aW5nIHRvIGV4Y2VwdGlvbiBvYmplY3RzIHRoZW1zZWx2ZXMgKGUuZy4sCisgICAgaW5oZXJpdGFuY2UgaGllcmFyY2h5KSIiIgorCisgICAgZGVmIHRlc3RfYnVpbHRpbnNfbmV3X3N0eWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhFeGNlcHRpb24sIG9iamVjdCkpCisKKyAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCisgICAgZGVmIHZlcmlmeV9pbnN0YW5jZV9pbnRlcmZhY2Uoc2VsZiwgaW5zKToKKyAgICAgICAgZm9yIGF0dHIgaW4gKCJhcmdzIiwgIm1lc3NhZ2UiLCAiX19zdHJfXyIsICJfX3JlcHJfXyIsICJfX2dldGl0ZW1fXyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoaW5zLCBhdHRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgbWlzc2luZyAlcyBhdHRyaWJ1dGUiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5zLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0cikpCisKKyAgICBkZWYgdGVzdF9pbmhlcml0YW5jZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBtYXRjaGVzIHRoZSBkb2N1bWVudGF0aW9uCisgICAgICAgIGV4Y19zZXQgPSBzZXQoeCBmb3IgeCBpbiBkaXIoZXhjZXB0aW9ucykgaWYgbm90IHguc3RhcnRzd2l0aCgnXycpKQorICAgICAgICBpbmhlcml0YW5jZV90cmVlID0gb3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uX2hpZXJhcmNoeS50eHQnKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VwZXJjbGFzc19uYW1lID0gaW5oZXJpdGFuY2VfdHJlZS5yZWFkbGluZSgpLnJzdHJpcCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGFzdF9leGMgPSBnZXRhdHRyKF9fYnVpbHRpbl9fLCBzdXBlcmNsYXNzX25hbWUpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJiYXNlIGNsYXNzICVzIG5vdCBhIGJ1aWx0LWluIiAlIHN1cGVyY2xhc3NfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3VwZXJjbGFzc19uYW1lLCBleGNfc2V0KQorICAgICAgICAgICAgZXhjX3NldC5kaXNjYXJkKHN1cGVyY2xhc3NfbmFtZSkKKyAgICAgICAgICAgIHN1cGVyY2xhc3NlcyA9IFtdICAjIExvb3Agd2lsbCBpbnNlcnQgYmFzZSBleGNlcHRpb24KKyAgICAgICAgICAgIGxhc3RfZGVwdGggPSAwCisgICAgICAgICAgICBmb3IgZXhjX2xpbmUgaW4gaW5oZXJpdGFuY2VfdHJlZToKKyAgICAgICAgICAgICAgICBleGNfbGluZSA9IGV4Y19saW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgZGVwdGggPSBleGNfbGluZS5yaW5kZXgoJy0nKQorICAgICAgICAgICAgICAgIGV4Y19uYW1lID0gZXhjX2xpbmVbZGVwdGgrMjpdICAjIFNsaWNlIHBhc3Qgc3BhY2UKKyAgICAgICAgICAgICAgICBpZiAnKCcgaW4gZXhjX25hbWU6CisgICAgICAgICAgICAgICAgICAgIHBhcmVuX2luZGV4ID0gZXhjX25hbWUuaW5kZXgoJygnKQorICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9uYW1lID0gZXhjX25hbWVbcGFyZW5faW5kZXgrMTotMV0KKyAgICAgICAgICAgICAgICAgICAgZXhjX25hbWUgPSBleGNfbmFtZVs6cGFyZW5faW5kZXgtMV0gICMgU2xpY2Ugb2ZmIHNwYWNlCisgICAgICAgICAgICAgICAgICAgIGlmIHBsYXRmb3JtX3N5c3RlbSgpICE9IHBsYXRmb3JtX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBleGNfc2V0LmRpc2NhcmQoZXhjX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmICdbJyBpbiBleGNfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgbGVmdF9icmFja2V0ID0gZXhjX25hbWUuaW5kZXgoJ1snKQorICAgICAgICAgICAgICAgICAgICBleGNfbmFtZSA9IGV4Y19uYW1lWzpsZWZ0X2JyYWNrZXQtMV0gICMgY292ZXIgc3BhY2UKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGV4YyA9IGdldGF0dHIoX19idWlsdGluX18sIGV4Y19uYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBub3QgYSBidWlsdC1pbiBleGNlcHRpb24iICUgZXhjX25hbWUpCisgICAgICAgICAgICAgICAgaWYgbGFzdF9kZXB0aCA8IGRlcHRoOgorICAgICAgICAgICAgICAgICAgICBzdXBlcmNsYXNzZXMuYXBwZW5kKChsYXN0X2RlcHRoLCBsYXN0X2V4YykpCisgICAgICAgICAgICAgICAgZWxpZiBsYXN0X2RlcHRoID4gZGVwdGg6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIHN1cGVyY2xhc3Nlc1stMV1bMF0gPj0gZGVwdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcmNsYXNzZXMucG9wKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhleGMsIHN1cGVyY2xhc3Nlc1stMV1bMV0pLAorICAgICAgICAgICAgICAgICIlcyBpcyBub3QgYSBzdWJjbGFzcyBvZiAlcyIgJSAoZXhjLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICBzdXBlcmNsYXNzZXNbLTFdWzFdLl9fbmFtZV9fKSkKKyAgICAgICAgICAgICAgICB0cnk6ICAjIFNvbWUgZXhjZXB0aW9ucyByZXF1aXJlIGFyZ3VtZW50czsganVzdCBza2lwIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi52ZXJpZnlfaW5zdGFuY2VfaW50ZXJmYWNlKGV4YygpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4Y19uYW1lLCBleGNfc2V0KQorICAgICAgICAgICAgICAgIGV4Y19zZXQuZGlzY2FyZChleGNfbmFtZSkKKyAgICAgICAgICAgICAgICBsYXN0X2V4YyA9IGV4YworICAgICAgICAgICAgICAgIGxhc3RfZGVwdGggPSBkZXB0aAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaW5oZXJpdGFuY2VfdHJlZS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV4Y19zZXQpLCAwLCAiJXMgbm90IGFjY291bnRlZCBmb3IiICUgZXhjX3NldCkKKworICAgIGludGVyZmFjZV90ZXN0cyA9ICgibGVuZ3RoIiwgImFyZ3MiLCAibWVzc2FnZSIsICJzdHIiLCAidW5pY29kZSIsICJyZXByIiwKKyAgICAgICAgICAgICJpbmRleGluZyIpCisKKyAgICBkZWYgaW50ZXJmYWNlX3Rlc3RfZHJpdmVyKHNlbGYsIHJlc3VsdHMpOgorICAgICAgICBmb3IgdGVzdF9uYW1lLCAoZ2l2ZW4sIGV4cGVjdGVkKSBpbiB6aXAoc2VsZi5pbnRlcmZhY2VfdGVzdHMsIHJlc3VsdHMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXZlbiwgZXhwZWN0ZWQsICIlczogJXMgIT0gJXMiICUgKHRlc3RfbmFtZSwKKyAgICAgICAgICAgICAgICBnaXZlbiwgZXhwZWN0ZWQpKQorCisgICAgQGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncworICAgIGRlZiB0ZXN0X2ludGVyZmFjZV9zaW5nbGVfYXJnKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBpbnRlcmZhY2Ugd29ya3MgcHJvcGVybHkgd2hlbiBnaXZlbiBhIHNpbmdsZSBhcmd1bWVudAorICAgICAgICBhcmcgPSAic3BhbSIKKyAgICAgICAgZXhjID0gRXhjZXB0aW9uKGFyZykKKyAgICAgICAgcmVzdWx0cyA9IChbbGVuKGV4Yy5hcmdzKSwgMV0sIFtleGMuYXJnc1swXSwgYXJnXSwgW2V4Yy5tZXNzYWdlLCBhcmddLAorICAgICAgICAgICAgICAgICAgIFtzdHIoZXhjKSwgc3RyKGFyZyldLCBbdW5pY29kZShleGMpLCB1bmljb2RlKGFyZyldLAorICAgICAgICAgICAgICAgICAgIFtyZXByKGV4YyksIGV4Yy5fX2NsYXNzX18uX19uYW1lX18gKyByZXByKGV4Yy5hcmdzKV0sCisgICAgICAgICAgICAgICAgICAgW2V4Y1swXSwgYXJnXSkKKyAgICAgICAgc2VsZi5pbnRlcmZhY2VfdGVzdF9kcml2ZXIocmVzdWx0cykKKworICAgIEBpZ25vcmVfZGVwcmVjYXRpb25fd2FybmluZ3MKKyAgICBkZWYgdGVzdF9pbnRlcmZhY2VfbXVsdGlfYXJnKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBpbnRlcmZhY2UgY29ycmVjdCB3aGVuIG11bHRpcGxlIGFyZ3VtZW50cyBnaXZlbgorICAgICAgICBhcmdfY291bnQgPSAzCisgICAgICAgIGFyZ3MgPSB0dXBsZShyYW5nZShhcmdfY291bnQpKQorICAgICAgICBleGMgPSBFeGNlcHRpb24oKmFyZ3MpCisgICAgICAgIHJlc3VsdHMgPSAoW2xlbihleGMuYXJncyksIGFyZ19jb3VudF0sIFtleGMuYXJncywgYXJnc10sCisgICAgICAgICAgICAgICAgICAgW2V4Yy5tZXNzYWdlLCAnJ10sIFtzdHIoZXhjKSwgc3RyKGFyZ3MpXSwKKyAgICAgICAgICAgICAgICAgICBbdW5pY29kZShleGMpLCB1bmljb2RlKGFyZ3MpXSwKKyAgICAgICAgICAgICAgICAgICBbcmVwcihleGMpLCBleGMuX19jbGFzc19fLl9fbmFtZV9fICsgcmVwcihleGMuYXJncyldLAorICAgICAgICAgICAgICAgICAgIFtleGNbLTFdLCBhcmdzWy0xXV0pCisgICAgICAgIHNlbGYuaW50ZXJmYWNlX3Rlc3RfZHJpdmVyKHJlc3VsdHMpCisKKyAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCisgICAgZGVmIHRlc3RfaW50ZXJmYWNlX25vX2FyZyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3aXRoIG5vIGFyZ3MgdGhhdCBpbnRlcmZhY2UgaXMgY29ycmVjdAorICAgICAgICBleGMgPSBFeGNlcHRpb24oKQorICAgICAgICByZXN1bHRzID0gKFtsZW4oZXhjLmFyZ3MpLCAwXSwgW2V4Yy5hcmdzLCB0dXBsZSgpXSwKKyAgICAgICAgICAgICAgICAgICBbZXhjLm1lc3NhZ2UsICcnXSwKKyAgICAgICAgICAgICAgICAgICBbc3RyKGV4YyksICcnXSwgW3VuaWNvZGUoZXhjKSwgdScnXSwKKyAgICAgICAgICAgICAgICAgICBbcmVwcihleGMpLCBleGMuX19jbGFzc19fLl9fbmFtZV9fICsgJygpJ10sIFtUcnVlLCBUcnVlXSkKKyAgICAgICAgc2VsZi5pbnRlcmZhY2VfdGVzdF9kcml2ZXIocmVzdWx0cykKKworCisgICAgZGVmIHRlc3RfbWVzc2FnZV9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgIyBBcyBvZiBQeXRob24gMi42LCBCYXNlRXhjZXB0aW9uLm1lc3NhZ2UgaXMgZGVwcmVjYXRlZC4KKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoIiIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgQmFzZUV4Y2VwdGlvbigpLm1lc3NhZ2UKKworCitjbGFzcyBVc2FnZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3QgdXNhZ2Ugb2YgZXhjZXB0aW9ucyIiIgorCisgICAgZGVmIHJhaXNlX2ZhaWxzKHNlbGYsIG9iamVjdF8pOgorICAgICAgICAiIiJNYWtlIHN1cmUgdGhhdCByYWlzaW5nICdvYmplY3RfJyB0cmlnZ2VycyBhIFR5cGVFcnJvci4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2Ugb2JqZWN0XworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuICAjIFdoYXQgaXMgZXhwZWN0ZWQuCisgICAgICAgIHNlbGYuZmFpbCgiVHlwZUVycm9yIGV4cGVjdGVkIGZvciByYWlzaW5nICVzIiAlIHR5cGUob2JqZWN0XykpCisKKyAgICBkZWYgY2F0Y2hfZmFpbHMoc2VsZiwgb2JqZWN0Xyk6CisgICAgICAgICIiIkNhdGNoaW5nICdvYmplY3RfJyBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBTdGFuZGFyZEVycm9yCisgICAgICAgICAgICBleGNlcHQgb2JqZWN0XzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUeXBlRXJyb3IgZXhwZWN0ZWQgd2hlbiBjYXRjaGluZyAlcyIgJSB0eXBlKG9iamVjdF8pKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBTdGFuZGFyZEVycm9yCisgICAgICAgICAgICBleGNlcHQgKG9iamVjdF8sKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlR5cGVFcnJvciBleHBlY3RlZCB3aGVuIGNhdGNoaW5nICVzIGFzIHNwZWNpZmllZCBpbiBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0dXBsZSIgJSB0eXBlKG9iamVjdF8pKQorCisgICAgQGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncworICAgIGRlZiB0ZXN0X3JhaXNlX2NsYXNzaWMoc2VsZik6CisgICAgICAgICMgUmFpc2luZyBhIGNsYXNzaWMgY2xhc3MgaXMgb2theSAoZm9yIG5vdykuCisgICAgICAgIGNsYXNzIENsYXNzaWNDbGFzczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgQ2xhc3NpY0NsYXNzCisgICAgICAgIGV4Y2VwdCBDbGFzc2ljQ2xhc3M6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidW5hYmxlIHRvIHJhaXNlIGNsYXNzaWMgY2xhc3MiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBDbGFzc2ljQ2xhc3MoKQorICAgICAgICBleGNlcHQgQ2xhc3NpY0NsYXNzOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoInVuYWJsZSB0byByYWlzZSBjbGFzc2ljIGNsYXNzIGluc3RhbmNlIikKKworICAgIGRlZiB0ZXN0X3JhaXNlX25ld19zdHlsZV9ub25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIFlvdSBjYW5ub3QgcmFpc2UgYSBuZXctc3R5bGUgY2xhc3MgdGhhdCBkb2VzIG5vdCBpbmhlcml0IGZyb20KKyAgICAgICAgIyBCYXNlRXhjZXB0aW9uOyB0aGUgYWJpbGl0eSB3YXMgbm90IHBvc3NpYmxlIHVudGlsIEJhc2VFeGNlcHRpb24ncworICAgICAgICAjIGludHJvZHVjdGlvbiBzbyBubyBuZWVkIHRvIHN1cHBvcnQgbmV3LXN0eWxlIG9iamVjdHMgdGhhdCBkbyBub3QKKyAgICAgICAgIyBpbmhlcml0IGZyb20gaXQuCisgICAgICAgIGNsYXNzIE5ld1N0eWxlQ2xhc3Mob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5yYWlzZV9mYWlscyhOZXdTdHlsZUNsYXNzKQorICAgICAgICBzZWxmLnJhaXNlX2ZhaWxzKE5ld1N0eWxlQ2xhc3MoKSkKKworICAgIGRlZiB0ZXN0X3JhaXNlX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBSYWlzaW5nIGEgc3RyaW5nIHJhaXNlcyBUeXBlRXJyb3IuCisgICAgICAgIHNlbGYucmFpc2VfZmFpbHMoInNwYW0iKQorCisgICAgZGVmIHRlc3RfY2F0Y2hfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIENhdGNoaW5nIGEgc3RyaW5nIHNob3VsZCB0cmlnZ2VyIGEgRGVwcmVjYXRpb25XYXJuaW5nLgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIpCisgICAgICAgICAgICBzdHJfZXhjID0gInNwYW0iCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTdGFuZGFyZEVycm9yCisgICAgICAgICAgICAgICAgZXhjZXB0IHN0cl9leGM6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBldmVuIGlmIHRoZSBzdHJpbmcgZXhjZXB0aW9uIGlzIGxpc3RlZCBpbiBhIHR1cGxlCisgICAgICAgICAgICAjIHRoYXQgYSB3YXJuaW5nIGlzIHJhaXNlZC4KKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0YW5kYXJkRXJyb3IKKyAgICAgICAgICAgICAgICBleGNlcHQgKEFzc2VydGlvbkVycm9yLCBzdHJfZXhjKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoRXhjZXB0aW9uQ2xhc3NUZXN0cywgVXNhZ2VUZXN0cykKKworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BpY2tsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BpY2tsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzEyNjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5CkBAIC0wLDAgKzEsOTIgQEAKK2ltcG9ydCBwaWNrbGUKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCAoQWJzdHJhY3RQaWNrbGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFBpY2tsZU1vZHVsZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0UGVyc2lzdGVudFBpY2tsZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdtZW1QaWNrbGVUZXN0cykKKworY2xhc3MgUGlja2xlVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cywgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cyk6CisKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PTApOgorICAgICAgICAjIElnbm9yZSBmYXN0CisgICAgICAgIHJldHVybiBwaWNrbGUuZHVtcHMoYXJnLCBwcm90bykKKworICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgICAgICAjIElnbm9yZSBmYXN0CisgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMoYnVmKQorCisgICAgbW9kdWxlID0gcGlja2xlCisgICAgZXJyb3IgPSBLZXlFcnJvcgorCitjbGFzcyBQaWNrbGVyVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cyk6CisKKyAgICBlcnJvciA9IEtleUVycm9yCisKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PTApOgorICAgICAgICBmID0gU3RyaW5nSU8oKQorICAgICAgICBwID0gcGlja2xlLlBpY2tsZXIoZiwgcHJvdG8pCisgICAgICAgIGlmIGZhc3Q6CisgICAgICAgICAgICBwLmZhc3QgPSBmYXN0CisgICAgICAgIHAuZHVtcChhcmcpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICByZXR1cm4gZi5yZWFkKCkKKworICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgICAgICBmID0gU3RyaW5nSU8oYnVmKQorICAgICAgICB1ID0gcGlja2xlLlVucGlja2xlcihmKQorICAgICAgICByZXR1cm4gdS5sb2FkKCkKKworY2xhc3MgUGVyc1BpY2tsZXJUZXN0cyhBYnN0cmFjdFBlcnNpc3RlbnRQaWNrbGVyVGVzdHMpOgorCisgICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCwgZmFzdD0wKToKKyAgICAgICAgY2xhc3MgUGVyc1BpY2tsZXIocGlja2xlLlBpY2tsZXIpOgorICAgICAgICAgICAgZGVmIHBlcnNpc3RlbnRfaWQoc3Vic2VsZiwgb2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wZXJzaXN0ZW50X2lkKG9iaikKKyAgICAgICAgZiA9IFN0cmluZ0lPKCkKKyAgICAgICAgcCA9IFBlcnNQaWNrbGVyKGYsIHByb3RvKQorICAgICAgICBpZiBmYXN0OgorICAgICAgICAgICAgcC5mYXN0ID0gZmFzdAorICAgICAgICBwLmR1bXAoYXJnKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgcmV0dXJuIGYucmVhZCgpCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmKToKKyAgICAgICAgY2xhc3MgUGVyc1VucGlja2xlcihwaWNrbGUuVW5waWNrbGVyKToKKyAgICAgICAgICAgIGRlZiBwZXJzaXN0ZW50X2xvYWQoc3Vic2VsZiwgb2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wZXJzaXN0ZW50X2xvYWQob2JqKQorICAgICAgICBmID0gU3RyaW5nSU8oYnVmKQorICAgICAgICB1ID0gUGVyc1VucGlja2xlcihmKQorICAgICAgICByZXR1cm4gdS5sb2FkKCkKKworY2xhc3MgUGlja2xlclVucGlja2xlck9iamVjdFRlc3RzKEFic3RyYWN0UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzKToKKworICAgIHBpY2tsZXJfY2xhc3MgPSBwaWNrbGUuUGlja2xlcgorICAgIHVucGlja2xlcl9jbGFzcyA9IHBpY2tsZS5VbnBpY2tsZXIKKworY2xhc3MgUGlja2xlQmlnbWVtUGlja2xlVGVzdHMoQmlnbWVtUGlja2xlVGVzdHMpOgorCisgICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCwgZmFzdD0wKToKKyAgICAgICAgIyBJZ25vcmUgZmFzdAorICAgICAgICByZXR1cm4gcGlja2xlLmR1bXBzKGFyZywgcHJvdG8pCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmKToKKyAgICAgICAgIyBJZ25vcmUgZmFzdAorICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGJ1ZikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgUGlja2xlVGVzdHMsCisgICAgICAgIFBpY2tsZXJUZXN0cywKKyAgICAgICAgUGVyc1BpY2tsZXJUZXN0cywKKyAgICAgICAgUGlja2xlclVucGlja2xlck9iamVjdFRlc3RzLAorICAgICAgICBQaWNrbGVCaWdtZW1QaWNrbGVUZXN0cywKKyAgICApCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHBpY2tsZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9waWNrbGV0b29scy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTViMzVhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkKQEAgLTAsMCArMSwyNCBAQAoraW1wb3J0IHBpY2tsZQoraW1wb3J0IHBpY2tsZXRvb2xzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQaWNrbGVUZXN0cworZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cworCitjbGFzcyBPcHRpbWl6ZWRQaWNrbGVUZXN0cyhBYnN0cmFjdFBpY2tsZVRlc3RzLCBBYnN0cmFjdFBpY2tsZU1vZHVsZVRlc3RzKToKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9MCk6CisgICAgICAgIHJldHVybiBwaWNrbGV0b29scy5vcHRpbWl6ZShwaWNrbGUuZHVtcHMoYXJnLCBwcm90bykpCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmKToKKyAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhidWYpCisKKyAgICBtb2R1bGUgPSBwaWNrbGUKKyAgICBlcnJvciA9IEtleUVycm9yCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE9wdGltaXplZFBpY2tsZVRlc3RzKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdChwaWNrbGV0b29scykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9waXBlcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BpcGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjhiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9waXBlcy5weQpAQCAtMCwwICsxLDIwNCBAQAoraW1wb3J0IHBpcGVzCitpbXBvcnQgb3MKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIHVubGluaywgcmVhcF9jaGlsZHJlbgorCitpZiBvcy5uYW1lICE9ICdwb3NpeCc6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3BpcGVzIG1vZHVsZSBvbmx5IHdvcmtzIG9uIHBvc2l4JykKKworVEVTVEZOMiA9IFRFU1RGTiArICIyIgorCisjIHRyIGEteiBBLVogaXMgbm90IHBvcnRhYmxlLCBzbyBtYWtlIHRoZSByYW5nZXMgZXhwbGljaXQKK3NfY29tbWFuZCA9ICd0ciAlcyAlcycgJSAoc3RyaW5nLmFzY2lpX2xvd2VyY2FzZSwgc3RyaW5nLmFzY2lpX3VwcGVyY2FzZSkKKworY2xhc3MgU2ltcGxlUGlwZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4sIFRFU1RGTjIpOgorICAgICAgICAgICAgdW5saW5rKGYpCisKKyAgICBkZWYgdGVzdFNpbXBsZVBpcGUxKHNlbGYpOgorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICB0LmFwcGVuZChzX2NvbW1hbmQsIHBpcGVzLlNURElOX1NURE9VVCkKKyAgICAgICAgZiA9IHQub3BlbihURVNURk4sICd3JykKKyAgICAgICAgZi53cml0ZSgnaGVsbG8gd29ybGQgIzEnKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdIRUxMTyBXT1JMRCAjMScpCisKKyAgICBkZWYgdGVzdFNpbXBsZVBpcGUyKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdoZWxsbyB3b3JsZCAjMicpCisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHQuYXBwZW5kKHNfY29tbWFuZCArICcgPCAkSU4gPiAkT1VUJywgcGlwZXMuRklMRUlOX0ZJTEVPVVQpCisgICAgICAgIHQuY29weShURVNURk4sIFRFU1RGTjIpCisgICAgICAgIHdpdGggb3BlbihURVNURk4yKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ0hFTExPIFdPUkxEICMyJykKKworICAgIGRlZiB0ZXN0U2ltcGxlUGlwZTMoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ2hlbGxvIHdvcmxkICMyJykKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgdC5hcHBlbmQoc19jb21tYW5kICsgJyA8ICRJTicsIHBpcGVzLkZJTEVJTl9TVERPVVQpCisgICAgICAgIHdpdGggdC5vcGVuKFRFU1RGTiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ0hFTExPIFdPUkxEICMyJykKKworICAgIGRlZiB0ZXN0RW1wdHlQaXBlbGluZTEoc2VsZik6CisgICAgICAgICMgY29weSB0aHJvdWdoIGVtcHR5IHBpcGUKKyAgICAgICAgZCA9ICdlbXB0eSBwaXBlbGluZSB0ZXN0IENPUFknCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJycpCisgICAgICAgIHQ9cGlwZXMuVGVtcGxhdGUoKQorICAgICAgICB0LmNvcHkoVEVTVEZOLCBURVNURk4yKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGQpCisKKyAgICBkZWYgdGVzdEVtcHR5UGlwZWxpbmUyKHNlbGYpOgorICAgICAgICAjIHJlYWQgdGhyb3VnaCBlbXB0eSBwaXBlCisgICAgICAgIGQgPSAnZW1wdHkgcGlwZWxpbmUgdGVzdCBSRUFEJworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGQpCisgICAgICAgIHQ9cGlwZXMuVGVtcGxhdGUoKQorICAgICAgICB3aXRoIHQub3BlbihURVNURk4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGQpCisKKyAgICBkZWYgdGVzdEVtcHR5UGlwZWxpbmUzKHNlbGYpOgorICAgICAgICAjIHdyaXRlIHRocm91Z2ggZW1wdHkgcGlwZQorICAgICAgICBkID0gJ2VtcHR5IHBpcGVsaW5lIHRlc3QgV1JJVEUnCisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHdpdGggdC5vcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZCkKKworICAgIGRlZiB0ZXN0UXVvdGluZyhzZWxmKToKKyAgICAgICAgc2FmZXVucXVvdGVkID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyBzdHJpbmcuZGlnaXRzICsgJ0AlXy0rPTosLi8nCisgICAgICAgIHVuc2FmZSA9ICciYCRcXCEnCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlcy5xdW90ZSgnJyksICInJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZXMucXVvdGUoc2FmZXVucXVvdGVkKSwgc2FmZXVucXVvdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGVzLnF1b3RlKCd0ZXN0IGZpbGUgbmFtZScpLCAiJ3Rlc3QgZmlsZSBuYW1lJyIpCisgICAgICAgIGZvciB1IGluIHVuc2FmZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZXMucXVvdGUoJ3Rlc3Qlc25hbWUnICUgdSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3Rlc3Qlc25hbWUnIiAlIHUpCisgICAgICAgIGZvciB1IGluIHVuc2FmZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZXMucXVvdGUoInRlc3QlcyduYW1lJyIgJSB1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIid0ZXN0JXMnXCInXCInbmFtZSdcIidcIicnIiAlIHUpCisKKyAgICBkZWYgdGVzdFJlcHIoc2VsZik6CisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwgIjxUZW1wbGF0ZSBpbnN0YW5jZSwgc3RlcHM9W10+IikKKyAgICAgICAgdC5hcHBlbmQoJ3RyIGEteiBBLVonLCBwaXBlcy5TVERJTl9TVERPVVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgIjxUZW1wbGF0ZSBpbnN0YW5jZSwgc3RlcHM9WygndHIgYS16IEEtWicsICctLScpXT4iKQorCisgICAgZGVmIHRlc3RTZXREZWJ1ZyhzZWxmKToKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgdC5kZWJ1ZyhGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmRlYnVnZ2luZywgRmFsc2UpCisgICAgICAgIHQuZGVidWcoVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmRlYnVnZ2luZywgVHJ1ZSkKKworICAgIGRlZiB0ZXN0UmVhZE9wZW5TaW5rKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGNhbGxpbmcgb3BlbigncicpIG9uIGEgcGlwZSBlbmRpbmcgd2l0aAorICAgICAgICAjIGEgc2luayByYWlzZXMgVmFsdWVFcnJvcgorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICB0LmFwcGVuZCgnYm9ndXNjbWQnLCBwaXBlcy5TSU5LKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0Lm9wZW4sICdib2d1c2ZpbGUnLCAncicpCisKKyAgICBkZWYgdGVzdFdyaXRlT3BlblNvdXJjZShzZWxmKToKKyAgICAgICAgIyBjaGVjayBjYWxsaW5nIG9wZW4oJ3cnKSBvbiBhIHBpcGUgZW5kaW5nIHdpdGgKKyAgICAgICAgIyBhIHNvdXJjZSByYWlzZXMgVmFsdWVFcnJvcgorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICB0LnByZXBlbmQoJ2JvZ3VzY21kJywgcGlwZXMuU09VUkNFKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0Lm9wZW4sICdib2d1c2ZpbGUnLCAndycpCisKKyAgICBkZWYgdGVzdEJhZEFwcGVuZE9wdGlvbnMoc2VsZik6CisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisKKyAgICAgICAgIyB0cnkgYSBub24tc3RyaW5nIGNvbW1hbmQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LmFwcGVuZCwgNywgcGlwZXMuU1RESU5fU1RET1VUKQorCisgICAgICAgICMgdHJ5IGEgdHlwZSB0aGF0IGlzbid0IHJlY29nbml6ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5hcHBlbmQsICdib2d1c2NtZCcsICd4eCcpCisKKyAgICAgICAgIyBzaG91bGRuJ3QgYmUgYWJsZSB0byBhcHBlbmQgYSBzb3VyY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5hcHBlbmQsICdib2d1c2NtZCcsIHBpcGVzLlNPVVJDRSkKKworICAgICAgICAjIGNoZWNrIGFwcGVuZGluZyB0d28gc2lua3MKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgdC5hcHBlbmQoJ2JvZ3VzY21kJywgcGlwZXMuU0lOSykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5hcHBlbmQsICdib2d1c2NtZCcsIHBpcGVzLlNJTkspCisKKyAgICAgICAgIyBjb21tYW5kIG5lZWRpbmcgZmlsZSBpbnB1dCBidXQgd2l0aCBubyAkSU4KKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5hcHBlbmQsICdib2d1c2NtZCAkT1VUJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVzLkZJTEVJTl9GSUxFT1VUKQorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LmFwcGVuZCwgJ2JvZ3VzY21kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVzLkZJTEVJTl9TVERPVVQpCisKKyAgICAgICAgIyBjb21tYW5kIG5lZWRpbmcgZmlsZSBvdXRwdXQgYnV0IHdpdGggbm8gJE9VVAorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LmFwcGVuZCwgJ2JvZ3VzY21kICRJTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlcy5GSUxFSU5fRklMRU9VVCkKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5hcHBlbmQsICdib2d1c2NtZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlcy5TVERJTl9GSUxFT1VUKQorCisKKyAgICBkZWYgdGVzdEJhZFByZXBlbmRPcHRpb25zKHNlbGYpOgorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorCisgICAgICAgICMgdHJ5IGEgbm9uLXN0cmluZyBjb21tYW5kCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5wcmVwZW5kLCA3LCBwaXBlcy5TVERJTl9TVERPVVQpCisKKyAgICAgICAgIyB0cnkgYSB0eXBlIHRoYXQgaXNuJ3QgcmVjb2duaXplZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnByZXBlbmQsICd0ciBhLXogQS1aJywgJ3h4JykKKworICAgICAgICAjIHNob3VsZG4ndCBiZSBhYmxlIHRvIHByZXBlbmQgYSBzaW5rCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQucHJlcGVuZCwgJ2JvZ3VzY21kJywgcGlwZXMuU0lOSykKKworICAgICAgICAjIGNoZWNrIHByZXBlbmRpbmcgdHdvIHNvdXJjZXMKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgdC5wcmVwZW5kKCdib2d1c2NtZCcsIHBpcGVzLlNPVVJDRSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5wcmVwZW5kLCAnYm9ndXNjbWQnLCBwaXBlcy5TT1VSQ0UpCisKKyAgICAgICAgIyBjb21tYW5kIG5lZWRpbmcgZmlsZSBpbnB1dCBidXQgd2l0aCBubyAkSU4KKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5wcmVwZW5kLCAnYm9ndXNjbWQgJE9VVCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlcy5GSUxFSU5fRklMRU9VVCkKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5wcmVwZW5kLCAnYm9ndXNjbWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZXMuRklMRUlOX1NURE9VVCkKKworICAgICAgICAjIGNvbW1hbmQgbmVlZGluZyBmaWxlIG91dHB1dCBidXQgd2l0aCBubyAkT1VUCisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQucHJlcGVuZCwgJ2JvZ3VzY21kICRJTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlcy5GSUxFSU5fRklMRU9VVCkKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5wcmVwZW5kLCAnYm9ndXNjbWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZXMuU1RESU5fRklMRU9VVCkKKworICAgIGRlZiB0ZXN0QmFkT3Blbk1vZGUoc2VsZik6CisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQub3BlbiwgJ2JvZ3VzZmlsZScsICd4JykKKworICAgIGRlZiB0ZXN0Q2xvbmUoc2VsZik6CisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHQuYXBwZW5kKCd0ciBhLXogQS1aJywgcGlwZXMuU1RESU5fU1RET1VUKQorCisgICAgICAgIHUgPSB0LmNsb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZCh0KSwgaWQodSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdGVwcywgdS5zdGVwcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZCh0LnN0ZXBzKSwgaWQodS5zdGVwcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5kZWJ1Z2dpbmcsIHUuZGVidWdnaW5nKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFNpbXBsZVBpcGVUZXN0cykKKyAgICByZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGtnLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGtnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMTY1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wa2cucHkKQEAgLTAsMCArMSwyOTIgQEAKKyMgVGVzdCBwYWNrYWdlcyAoZG90dGVkLW5hbWUgaW1wb3J0KQorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRleHR3cmFwCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworIyBIZWxwZXJzIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBoaWVyYXJjaGllcy4KKworZGVmIGNsZWFub3V0KHJvb3QpOgorICAgIG5hbWVzID0gb3MubGlzdGRpcihyb290KQorICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihyb290LCBuYW1lKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZ1bGxuYW1lKSBhbmQgbm90IG9zLnBhdGguaXNsaW5rKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIGNsZWFub3V0KGZ1bGxuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MucmVtb3ZlKGZ1bGxuYW1lKQorICAgIG9zLnJtZGlyKHJvb3QpCisKK2RlZiBmaXhkaXIobHN0KToKKyAgICBpZiAiX19idWlsdGluc19fIiBpbiBsc3Q6CisgICAgICAgIGxzdC5yZW1vdmUoIl9fYnVpbHRpbnNfXyIpCisgICAgcmV0dXJuIGxzdAorCisKKyMgWFhYIFRoaW5ncyB0byB0ZXN0CisjCisjIGltcG9ydCBwYWNrYWdlIHdpdGhvdXQgX19pbml0X18KKyMgaW1wb3J0IHBhY2thZ2Ugd2l0aCBfX2luaXRfXworIyBfX2luaXRfXyBpbXBvcnRpbmcgc3VibW9kdWxlCisjIF9faW5pdF9fIGltcG9ydGluZyBnbG9iYWwgbW9kdWxlCisjIF9faW5pdF9fIGRlZmluaW5nIHZhcmlhYmxlcworIyBzdWJtb2R1bGUgaW1wb3J0aW5nIG90aGVyIHN1Ym1vZHVsZQorIyBzdWJtb2R1bGUgaW1wb3J0aW5nIGdsb2JhbCBtb2R1bGUKKyMgc3VibW9kdWxlIGltcG9ydCBzdWJtb2R1bGUgdmlhIGdsb2JhbCBuYW1lCisjIGZyb20gcGFja2FnZSBpbXBvcnQgc3VibW9kdWxlCisjIGZyb20gcGFja2FnZSBpbXBvcnQgc3VicGFja2FnZQorIyBmcm9tIHBhY2thZ2UgaW1wb3J0IHZhcmlhYmxlIChkZWZpbmVkIGluIF9faW5pdF9fKQorIyBmcm9tIHBhY2thZ2UgaW1wb3J0ICogKGRlZmluZWQgaW4gX19pbml0X18pCisKKworY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucm9vdCA9IE5vbmUKKyAgICAgICAgc2VsZi5wa2duYW1lID0gTm9uZQorICAgICAgICBzZWxmLnN5c3BhdGggPSBsaXN0KHN5cy5wYXRoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYuc3lzcGF0aAorICAgICAgICBpZiBzZWxmLnJvb3Q6ICMgT25seSBjbGVhbiBpZiB0aGUgdGVzdCB3YXMgYWN0dWFsbHkgcnVuCisgICAgICAgICAgICBjbGVhbm91dChzZWxmLnJvb3QpCisKKyAgICAgICAgIyBkZWxldGUgYWxsIG1vZHVsZXMgY29uY2VybmluZyB0aGUgdGVzdGVkIGhpZXJhcmNoeQorICAgICAgICBpZiBzZWxmLnBrZ25hbWU6CisgICAgICAgICAgICBtb2R1bGVzID0gW25hbWUgZm9yIG5hbWUgaW4gc3lzLm1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wa2duYW1lIGluIG5hbWUuc3BsaXQoJy4nKV0KKyAgICAgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZXM6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisKKyAgICBkZWYgcnVuX2NvZGUoc2VsZiwgY29kZSk6CisgICAgICAgIGV4ZWModGV4dHdyYXAuZGVkZW50KGNvZGUpLCBnbG9iYWxzKCksIHsic2VsZiI6IHNlbGZ9KQorCisgICAgZGVmIG1raGllcihzZWxmLCBkZXNjcik6CisgICAgICAgIHJvb3QgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHJvb3QpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHJvb3QpOgorICAgICAgICAgICAgb3MubWtkaXIocm9vdCkKKyAgICAgICAgZm9yIG5hbWUsIGNvbnRlbnRzIGluIGRlc2NyOgorICAgICAgICAgICAgY29tcHMgPSBuYW1lLnNwbGl0KCkKKyAgICAgICAgICAgIGZ1bGxuYW1lID0gcm9vdAorICAgICAgICAgICAgZm9yIGMgaW4gY29tcHM6CisgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oZnVsbG5hbWUsIGMpCisgICAgICAgICAgICBpZiBjb250ZW50cyBpcyBOb25lOgorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGZ1bGxuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmID0gb3BlbihmdWxsbmFtZSwgInciKQorICAgICAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpCisgICAgICAgICAgICAgICAgaWYgY29udGVudHMgYW5kIGNvbnRlbnRzWy0xXSAhPSAnXG4nOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdcbicpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKKyAgICAgICAgIyBwYWNrYWdlIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGl0ZW0KKyAgICAgICAgc2VsZi5wa2duYW1lID0gZGVzY3JbMF1bMF0KKworICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgIGhpZXIgPSBbKCJ0MSIsIE5vbmUpLCAoInQxIF9faW5pdF9fIitvcy5leHRzZXArInB5IiwgIiIpXQorICAgICAgICBzZWxmLm1raGllcihoaWVyKQorICAgICAgICBpbXBvcnQgdDEKKworICAgIGRlZiB0ZXN0XzIoc2VsZik6CisgICAgICAgIGhpZXIgPSBbCisgICAgICAgICAoInQyIiwgTm9uZSksCisgICAgICAgICAoInQyIF9faW5pdF9fIitvcy5leHRzZXArInB5IiwgIidkb2MgZm9yIHQyJyIpLAorICAgICAgICAgKCJ0MiBzdWIiLCBOb25lKSwKKyAgICAgICAgICgidDIgc3ViIF9faW5pdF9fIitvcy5leHRzZXArInB5IiwgIiIpLAorICAgICAgICAgKCJ0MiBzdWIgc3Vic3ViIiwgTm9uZSksCisgICAgICAgICAoInQyIHN1YiBzdWJzdWIgX19pbml0X18iK29zLmV4dHNlcCsicHkiLCAic3BhbSA9IDEiKSwKKyAgICAgICAgXQorICAgICAgICBzZWxmLm1raGllcihoaWVyKQorCisgICAgICAgIGltcG9ydCB0Mi5zdWIKKyAgICAgICAgaW1wb3J0IHQyLnN1Yi5zdWJzdWIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5fX25hbWVfXywgInQyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5zdWIuX19uYW1lX18sICJ0Mi5zdWIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnN1Yi5zdWJzdWIuX19uYW1lX18sICJ0Mi5zdWIuc3Vic3ViIikKKworICAgICAgICAjIFRoaXMgZXhlYyBjcmFwIGlzIG5lZWRlZCBiZWNhdXNlIFB5M2sgZm9yYmlkcyAnaW1wb3J0IConIG91dHNpZGUKKyAgICAgICAgIyBvZiBtb2R1bGUtc2NvcGUgYW5kIF9faW1wb3J0X18oKSBpcyBpbnN1ZmZpY2llbnQgZm9yIHdoYXQgd2UgbmVlZC4KKyAgICAgICAgcyA9ICIiIgorICAgICAgICAgICAgaW1wb3J0IHQyCisgICAgICAgICAgICBmcm9tIHQyIGltcG9ydCAqCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcigpLCBbJ3NlbGYnLCAnc3ViJywgJ3QyJ10pCisgICAgICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ydW5fY29kZShzKQorCisgICAgICAgIGZyb20gdDIgaW1wb3J0IHN1YgorICAgICAgICBmcm9tIHQyLnN1YiBpbXBvcnQgc3Vic3ViCisgICAgICAgIGZyb20gdDIuc3ViLnN1YnN1YiBpbXBvcnQgc3BhbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yi5fX25hbWVfXywgInQyLnN1YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Vic3ViLl9fbmFtZV9fLCAidDIuc3ViLnN1YnN1YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLnN1YnN1Yi5fX25hbWVfXywgInQyLnN1Yi5zdWJzdWIiKQorICAgICAgICBmb3IgbmFtZSBpbiBbJ3NwYW0nLCAnc3ViJywgJ3N1YnN1YicsICd0MiddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2FscygpWyJuYW1lIl0sICJGYWlsZWQgdG8gaW1wb3J0ICVzIiAlIG5hbWUpCisKKyAgICAgICAgaW1wb3J0IHQyLnN1YgorICAgICAgICBpbXBvcnQgdDIuc3ViLnN1YnN1YgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLl9fbmFtZV9fLCAidDIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnN1Yi5fX25hbWVfXywgInQyLnN1YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuc3ViLnN1YnN1Yi5fX25hbWVfXywgInQyLnN1Yi5zdWJzdWIiKQorCisgICAgICAgIHMgPSAiIiIKKyAgICAgICAgICAgIGZyb20gdDIgaW1wb3J0ICoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXIoKSwgWydzZWxmJywgJ3N1YiddKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYucnVuX2NvZGUocykKKworICAgIGRlZiB0ZXN0XzMoc2VsZik6CisgICAgICAgIGhpZXIgPSBbCisgICAgICAgICAgICAgICAgKCJ0MyIsIE5vbmUpLAorICAgICAgICAgICAgICAgICgidDMgX19pbml0X18iK29zLmV4dHNlcCsicHkiLCAiIiksCisgICAgICAgICAgICAgICAgKCJ0MyBzdWIiLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoInQzIHN1YiBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICIiKSwKKyAgICAgICAgICAgICAgICAoInQzIHN1YiBzdWJzdWIiLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoInQzIHN1YiBzdWJzdWIgX19pbml0X18iK29zLmV4dHNlcCsicHkiLCAic3BhbSA9IDEiKSwKKyAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5ta2hpZXIoaGllcikKKworICAgICAgICBpbXBvcnQgdDMuc3ViLnN1YnN1YgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLl9fbmFtZV9fLCAidDMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnN1Yi5fX25hbWVfXywgInQzLnN1YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuc3ViLnN1YnN1Yi5fX25hbWVfXywgInQzLnN1Yi5zdWJzdWIiKQorCisgICAgZGVmIHRlc3RfNChzZWxmKToKKyAgICAgICAgaGllciA9IFsKKyAgICAgICAgKCJ0NC5weSIsICJyYWlzZSBSdW50aW1lRXJyb3IoJ1Nob3VsZG50IGxvYWQgdDQucHknKSIpLAorICAgICAgICAoInQ0IiwgTm9uZSksCisgICAgICAgICgidDQgX19pbml0X18iK29zLmV4dHNlcCsicHkiLCAiIiksCisgICAgICAgICgidDQgc3ViLnB5IiwgInJhaXNlIFJ1bnRpbWVFcnJvcignU2hvdWxkbnQgbG9hZCBzdWIucHknKSIpLAorICAgICAgICAoInQ0IHN1YiIsIE5vbmUpLAorICAgICAgICAoInQ0IHN1YiBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICIiKSwKKyAgICAgICAgKCJ0NCBzdWIgc3Vic3ViIitvcy5leHRzZXArInB5IiwKKyAgICAgICAgICJyYWlzZSBSdW50aW1lRXJyb3IoJ1Nob3VsZG50IGxvYWQgc3Vic3ViLnB5JykiKSwKKyAgICAgICAgKCJ0NCBzdWIgc3Vic3ViIiwgTm9uZSksCisgICAgICAgICgidDQgc3ViIHN1YnN1YiBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICJzcGFtID0gMSIpLAorICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLm1raGllcihoaWVyKQorCisgICAgICAgIHMgPSAiIiIKKyAgICAgICAgICAgIGZyb20gdDQuc3ViLnN1YnN1YiBpbXBvcnQgKgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGFtLCAxKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYucnVuX2NvZGUocykKKworICAgIGRlZiB0ZXN0XzUoc2VsZik6CisgICAgICAgIGhpZXIgPSBbCisgICAgICAgICgidDUiLCBOb25lKSwKKyAgICAgICAgKCJ0NSBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICJpbXBvcnQgdDUuZm9vIiksCisgICAgICAgICgidDUgc3RyaW5nIitvcy5leHRzZXArInB5IiwgInNwYW0gPSAxIiksCisgICAgICAgICgidDUgZm9vIitvcy5leHRzZXArInB5IiwKKyAgICAgICAgICJmcm9tIC4gaW1wb3J0IHN0cmluZzsgYXNzZXJ0IHN0cmluZy5zcGFtID09IDEiKSwKKyAgICAgICAgIF0KKyAgICAgICAgc2VsZi5ta2hpZXIoaGllcikKKworICAgICAgICBpbXBvcnQgdDUKKyAgICAgICAgcyA9ICIiIgorICAgICAgICAgICAgZnJvbSB0NSBpbXBvcnQgKgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoKSwgWydmb28nLCAnc2VsZicsICdzdHJpbmcnLCAndDUnXSkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzZWxmLnJ1bl9jb2RlKHMpCisKKyAgICAgICAgaW1wb3J0IHQ1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdmb28nLCAnc3RyaW5nJywgJ3Q1J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NS5mb28pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NS5zdHJpbmcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLCdfX3BhY2thZ2VfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtJ10pCisKKyAgICBkZWYgdGVzdF82KHNlbGYpOgorICAgICAgICBoaWVyID0gWworICAgICAgICAgICAgICAgICgidDYiLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoInQ2IF9faW5pdF9fIitvcy5leHRzZXArInB5IiwKKyAgICAgICAgICAgICAgICAgIl9fYWxsX18gPSBbJ3NwYW0nLCAnaGFtJywgJ2VnZ3MnXSIpLAorICAgICAgICAgICAgICAgICgidDYgc3BhbSIrb3MuZXh0c2VwKyJweSIsICIiKSwKKyAgICAgICAgICAgICAgICAoInQ2IGhhbSIrb3MuZXh0c2VwKyJweSIsICIiKSwKKyAgICAgICAgICAgICAgICAoInQ2IGVnZ3MiK29zLmV4dHNlcCsicHkiLCAiIiksCisgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYubWtoaWVyKGhpZXIpCisKKyAgICAgICAgaW1wb3J0IHQ2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19hbGxfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgIHMgPSAiIiIKKyAgICAgICAgICAgIGltcG9ydCB0NgorICAgICAgICAgICAgZnJvbSB0NiBpbXBvcnQgKgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ2KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19hbGxfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWdncycsICdoYW0nLCAnc3BhbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoKSwgWydlZ2dzJywgJ2hhbScsICdzZWxmJywgJ3NwYW0nLCAndDYnXSkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzZWxmLnJ1bl9jb2RlKHMpCisKKyAgICBkZWYgdGVzdF83KHNlbGYpOgorICAgICAgICBoaWVyID0gWworICAgICAgICAgICAgICAgICgidDciLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoInQ3Iitvcy5leHRzZXArInB5IiwgIiIpLAorICAgICAgICAgICAgICAgICgidDcgX19pbml0X18iK29zLmV4dHNlcCsicHkiLCAiIiksCisgICAgICAgICAgICAgICAgKCJ0NyBzdWIiK29zLmV4dHNlcCsicHkiLAorICAgICAgICAgICAgICAgICAicmFpc2UgUnVudGltZUVycm9yKCdTaG91bGRudCBsb2FkIHN1Yi5weScpIiksCisgICAgICAgICAgICAgICAgKCJ0NyBzdWIiLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoInQ3IHN1YiBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICIiKSwKKyAgICAgICAgICAgICAgICAoInQ3IHN1YiAiK29zLmV4dHNlcCsicHkiLAorICAgICAgICAgICAgICAgICAicmFpc2UgUnVudGltZUVycm9yKCdTaG91bGRudCBsb2FkIHN1YnN1Yi5weScpIiksCisgICAgICAgICAgICAgICAgKCJ0NyBzdWIgc3Vic3ViIiwgTm9uZSksCisgICAgICAgICAgICAgICAgKCJ0NyBzdWIgc3Vic3ViIF9faW5pdF9fIitvcy5leHRzZXArInB5IiwKKyAgICAgICAgICAgICAgICAgInNwYW0gPSAxIiksCisgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYubWtoaWVyKGhpZXIpCisKKworICAgICAgICB0Nywgc3ViLCBzdWJzdWIgPSBOb25lLCBOb25lLCBOb25lCisgICAgICAgIGltcG9ydCB0NyBhcyB0YXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHRhcykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQorICAgICAgICBmcm9tIHQ3IGltcG9ydCBzdWIgYXMgc3VicGFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJwYXIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCisgICAgICAgIGZyb20gdDcuc3ViIGltcG9ydCBzdWJzdWIgYXMgc3Vic3Vic3ViCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJzdWJzdWIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdzcGFtJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3ViKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YnN1YikKKyAgICAgICAgZnJvbSB0Ny5zdWIuc3Vic3ViIGltcG9ydCBzcGFtIGFzIGhhbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3Vic3ViKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfOChzZWxmKToKKyAgICAgICAgaGllciA9IFsKKyAgICAgICAgICAgICAgICAoInQ4IiwgTm9uZSksCisgICAgICAgICAgICAgICAgKCJ0OCBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICInZG9jIGZvciB0OCciKSwKKyAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5ta2hpZXIoaGllcikKKworICAgICAgICBpbXBvcnQgdDgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0OC5fX2RvY19fLCAiZG9jIGZvciB0OCIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGQ0OGNkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CkBAIC0wLDAgKzEsODMgQEAKK2ltcG9ydCBvcywgc3lzLCBzdHJpbmcsIHJhbmRvbSwgdGVtcGZpbGUsIHVuaXR0ZXN0CisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitjbGFzcyBUZXN0SW1wb3J0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYucGFja2FnZV9uYW1lID0gJ1BBQ0tBR0VfJworICAgICAgICB3aGlsZSBzZWxmLnBhY2thZ2VfbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9uYW1lICs9IHJhbmRvbS5jaG9vc2Uoc3RyaW5nLmxldHRlcnMpCisgICAgICAgIHNlbGYubW9kdWxlX25hbWUgPSBzZWxmLnBhY2thZ2VfbmFtZSArICcuZm9vJworICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKKworICAgIGRlZiByZW1vdmVfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgZm9yIG1vZHVsZV9uYW1lIGluIChzZWxmLnBhY2thZ2VfbmFtZSwgc2VsZi5tb2R1bGVfbmFtZSk6CisgICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc3lzLnBhdGguYXBwZW5kKHNlbGYudGVzdF9kaXIpCisgICAgICAgIHNlbGYucGFja2FnZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbmFtZSkKKyAgICAgICAgb3MubWtkaXIoc2VsZi5wYWNrYWdlX2RpcikKKyAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RpciwgJ19faW5pdF9fJytvcy5leHRzZXArJ3B5JyksICd3JykuY2xvc2UoKQorICAgICAgICBzZWxmLm1vZHVsZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZV9kaXIsICdmb28nK29zLmV4dHNlcCsncHknKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKHNlbGYucGFja2FnZV9kaXIpOgorICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnBhY2thZ2VfZGlyLCBmaWxlKSkKKyAgICAgICAgb3Mucm1kaXIoc2VsZi5wYWNrYWdlX2RpcikKKyAgICAgICAgb3Mucm1kaXIoc2VsZi50ZXN0X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzeXMucGF0aC5jb3VudChzZWxmLnRlc3RfZGlyKSwgMCkKKyAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHNlbGYudGVzdF9kaXIpCisgICAgICAgIHNlbGYucmVtb3ZlX21vZHVsZXMoKQorCisgICAgZGVmIHJld3JpdGVfZmlsZShzZWxmLCBjb250ZW50cyk6CisgICAgICAgIGZvciBleHRlbnNpb24gaW4gImNvIjoKKyAgICAgICAgICAgIGNvbXBpbGVkX3BhdGggPSBzZWxmLm1vZHVsZV9wYXRoICsgZXh0ZW5zaW9uCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21waWxlZF9wYXRoKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoY29tcGlsZWRfcGF0aCkKKyAgICAgICAgZiA9IG9wZW4oc2VsZi5tb2R1bGVfcGF0aCwgJ3cnKQorICAgICAgICBmLndyaXRlKGNvbnRlbnRzKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfaW1wb3J0X19zZW1hbnRpY3Moc2VsZik6CisKKyAgICAgICAgIyBHZW5lcmF0ZSBhIGNvdXBsZSBvZiBicm9rZW4gbW9kdWxlcyB0byB0cnkgaW1wb3J0aW5nLgorCisgICAgICAgICMgLi4udHJ5IGxvYWRpbmcgdGhlIG1vZHVsZSB3aGVuIHRoZXJlJ3MgYSBTeW50YXhFcnJvcgorICAgICAgICBzZWxmLnJld3JpdGVfZmlsZSgnZm9yJykKKyAgICAgICAgdHJ5OiBfX2ltcG9ydF9fKHNlbGYubW9kdWxlX25hbWUpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjogcGFzcworICAgICAgICBlbHNlOiByYWlzZSBSdW50aW1lRXJyb3IsICdGYWlsZWQgdG8gaW5kdWNlIFN5bnRheEVycm9yJworICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYubW9kdWxlX25hbWUsIHN5cy5tb2R1bGVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoc3lzLm1vZHVsZXNbc2VsZi5wYWNrYWdlX25hbWVdLCAnZm9vJykpCisKKyAgICAgICAgIyAuLi5tYWtlIHVwIGEgdmFyaWFibGUgbmFtZSB0aGF0IGlzbid0IGJvdW5kIGluIF9fYnVpbHRpbnNfXworICAgICAgICB2YXIgPSAnYScKKyAgICAgICAgd2hpbGUgdmFyIGluIGRpcihfX2J1aWx0aW5zX18pOgorICAgICAgICAgICAgdmFyICs9IHJhbmRvbS5jaG9vc2Uoc3RyaW5nLmxldHRlcnMpCisKKyAgICAgICAgIyAuLi5tYWtlIGEgbW9kdWxlIHRoYXQganVzdCBjb250YWlucyB0aGF0CisgICAgICAgIHNlbGYucmV3cml0ZV9maWxlKHZhcikKKworICAgICAgICB0cnk6IF9faW1wb3J0X18oc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiByYWlzZSBSdW50aW1lRXJyb3IsICdGYWlsZWQgdG8gaW5kdWNlIE5hbWVFcnJvci4nCisKKyAgICAgICAgIyAuLi5ub3cgIGNoYW5nZSAgdGhlIG1vZHVsZSAgc28gIHRoYXQgIHRoZSBOYW1lRXJyb3IgIGRvZXNuJ3QKKyAgICAgICAgIyBoYXBwZW4KKyAgICAgICAgc2VsZi5yZXdyaXRlX2ZpbGUoJyVzID0gMScgJSB2YXIpCisgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18oc2VsZi5tb2R1bGVfbmFtZSkuZm9vCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIHZhciksIDEpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0SW1wb3J0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NjVlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5CkBAIC0wLDAgKzEsMTQxIEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IGltcAoraW1wb3J0IHBrZ3V0aWwKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHppcGZpbGUKKworCisKK2NsYXNzIFBrZ3V0aWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGlybmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2h1dGlsLnJtdHJlZSwgc2VsZi5kaXJuYW1lKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgc2VsZi5kaXJuYW1lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKworICAgIGRlZiB0ZXN0X2dldGRhdGFfZmlsZXN5cyhzZWxmKToKKyAgICAgICAgcGtnID0gJ3Rlc3RfZ2V0ZGF0YV9maWxlc3lzJworCisgICAgICAgICMgSW5jbHVkZSBhIExGIGFuZCBhIENSTEYsIHRvIHRlc3QgdGhhdCBiaW5hcnkgZGF0YSBpcyByZWFkIGJhY2sKKyAgICAgICAgUkVTT1VSQ0VfREFUQSA9ICdIZWxsbywgd29ybGQhXG5TZWNvbmQgbGluZVxyXG5UaGlyZCBsaW5lJworCisgICAgICAgICMgTWFrZSBhIHBhY2thZ2Ugd2l0aCBzb21lIHJlc291cmNlcworICAgICAgICBwYWNrYWdlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmRpcm5hbWUsIHBrZykKKyAgICAgICAgb3MubWtkaXIocGFja2FnZV9kaXIpCisgICAgICAgICMgRW1wdHkgaW5pdC5weQorICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4ocGFja2FnZV9kaXIsICdfX2luaXRfXy5weScpLCAid2IiKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgIyBSZXNvdXJjZSBmaWxlcywgcmVzLnR4dCwgc3ViL3Jlcy50eHQKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHBhY2thZ2VfZGlyLCAncmVzLnR4dCcpLCAid2IiKQorICAgICAgICBmLndyaXRlKFJFU09VUkNFX0RBVEEpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4ocGFja2FnZV9kaXIsICdzdWInKSkKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHBhY2thZ2VfZGlyLCAnc3ViJywgJ3Jlcy50eHQnKSwgIndiIikKKyAgICAgICAgZi53cml0ZShSRVNPVVJDRV9EQVRBKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIENoZWNrIHdlIGNhbiByZWFkIHRoZSByZXNvdXJjZXMKKyAgICAgICAgcmVzMSA9IHBrZ3V0aWwuZ2V0X2RhdGEocGtnLCAncmVzLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzMSwgUkVTT1VSQ0VfREFUQSkKKyAgICAgICAgcmVzMiA9IHBrZ3V0aWwuZ2V0X2RhdGEocGtnLCAnc3ViL3Jlcy50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlczIsIFJFU09VUkNFX0RBVEEpCisKKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3BrZ10KKworICAgIGRlZiB0ZXN0X2dldGRhdGFfemlwZmlsZShzZWxmKToKKyAgICAgICAgemlwID0gJ3Rlc3RfZ2V0ZGF0YV96aXBmaWxlLnppcCcKKyAgICAgICAgcGtnID0gJ3Rlc3RfZ2V0ZGF0YV96aXBmaWxlJworCisgICAgICAgICMgSW5jbHVkZSBhIExGIGFuZCBhIENSTEYsIHRvIHRlc3QgdGhhdCBiaW5hcnkgZGF0YSBpcyByZWFkIGJhY2sKKyAgICAgICAgUkVTT1VSQ0VfREFUQSA9ICdIZWxsbywgd29ybGQhXG5TZWNvbmQgbGluZVxyXG5UaGlyZCBsaW5lJworCisgICAgICAgICMgTWFrZSBhIHBhY2thZ2Ugd2l0aCBzb21lIHJlc291cmNlcworICAgICAgICB6aXBfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmRpcm5hbWUsIHppcCkKKyAgICAgICAgeiA9IHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZSwgJ3cnKQorCisgICAgICAgICMgRW1wdHkgaW5pdC5weQorICAgICAgICB6LndyaXRlc3RyKHBrZyArICcvX19pbml0X18ucHknLCAiIikKKyAgICAgICAgIyBSZXNvdXJjZSBmaWxlcywgcmVzLnR4dCwgc3ViL3Jlcy50eHQKKyAgICAgICAgei53cml0ZXN0cihwa2cgKyAnL3Jlcy50eHQnLCBSRVNPVVJDRV9EQVRBKQorICAgICAgICB6LndyaXRlc3RyKHBrZyArICcvc3ViL3Jlcy50eHQnLCBSRVNPVVJDRV9EQVRBKQorICAgICAgICB6LmNsb3NlKCkKKworICAgICAgICAjIENoZWNrIHdlIGNhbiByZWFkIHRoZSByZXNvdXJjZXMKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHppcF9maWxlKQorICAgICAgICByZXMxID0gcGtndXRpbC5nZXRfZGF0YShwa2csICdyZXMudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMxLCBSRVNPVVJDRV9EQVRBKQorICAgICAgICByZXMyID0gcGtndXRpbC5nZXRfZGF0YShwa2csICdzdWIvcmVzLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzMiwgUkVTT1VSQ0VfREFUQSkKKyAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisKKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3BrZ10KKworICAgIGRlZiB0ZXN0X3VucmVhZGFibGVfZGlyX29uX3N5c3BhdGgoc2VsZik6CisgICAgICAgICMgaXNzdWU3MzY3IC0gd2Fsa19wYWNrYWdlcyBmYWlsZWQgaWYgdW5yZWFkYWJsZSBkaXIgb24gc3lzLnBhdGgKKyAgICAgICAgcGFja2FnZV9uYW1lID0gInVucmVhZGFibGVfcGFja2FnZSIKKyAgICAgICAgZCA9IG9zLnBhdGguam9pbihzZWxmLmRpcm5hbWUsIHBhY2thZ2VfbmFtZSkKKyAgICAgICAgIyB0aGlzIGRvZXMgbm90IGFwcGVhciB0byBjcmVhdGUgYW4gdW5yZWFkYWJsZSBkaXIgb24gV2luZG93cworICAgICAgICAjICAgYnV0IHRoZSB0ZXN0IHNob3VsZCBub3QgZmFpbCBhbnl3YXkKKyAgICAgICAgb3MubWtkaXIoZCwgMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJtZGlyLCBkKQorICAgICAgICBmb3IgdCBpbiBwa2d1dGlsLndhbGtfcGFja2FnZXMocGF0aD1bc2VsZi5kaXJuYW1lXSk6CisgICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgcGFja2FnZSBmb3VuZCIpCisKK2NsYXNzIFBrZ3V0aWxQRVAzMDJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBNeVRlc3RMb2FkZXIob2JqZWN0KToKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgICAgICMgQ3JlYXRlIGFuIGVtcHR5IG1vZHVsZQorICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuc2V0ZGVmYXVsdChmdWxsbmFtZSwgaW1wLm5ld19tb2R1bGUoZnVsbG5hbWUpKQorICAgICAgICAgICAgbW9kLl9fZmlsZV9fID0gIjwlcz4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICAgICAgIyBNYWtlIGl0IGEgcGFja2FnZQorICAgICAgICAgICAgbW9kLl9fcGF0aF9fID0gW10KKyAgICAgICAgICAgICMgQ291bnQgaG93IG1hbnkgdGltZXMgdGhlIG1vZHVsZSBpcyByZWxvYWRlZAorICAgICAgICAgICAgbW9kLl9fZGljdF9fWydsb2FkcyddID0gbW9kLl9fZGljdF9fLmdldCgnbG9hZHMnLDApICsgMQorICAgICAgICAgICAgcmV0dXJuIG1vZAorCisgICAgICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgICAgIHJldHVybiAiSGVsbG8sIHdvcmxkISIKKworICAgIGNsYXNzIE15VGVzdEltcG9ydGVyKG9iamVjdCk6CisgICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgICAgIHJldHVybiBQa2d1dGlsUEVQMzAyVGVzdHMuTXlUZXN0TG9hZGVyKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3lzLm1ldGFfcGF0aC5pbnNlcnQoMCwgc2VsZi5NeVRlc3RJbXBvcnRlcigpKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWwgc3lzLm1ldGFfcGF0aFswXQorCisgICAgZGVmIHRlc3RfZ2V0ZGF0YV9wZXAzMDIoc2VsZik6CisgICAgICAgICMgVXNlIGEgZHVtbXkgaW1wb3J0ZXIvbG9hZGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtndXRpbC5nZXRfZGF0YSgnZm9vJywgJ2R1bW15JyksICJIZWxsbywgd29ybGQhIikKKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydmb28nXQorCisgICAgZGVmIHRlc3RfYWxyZWFkeWxvYWRlZChzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBnZXRfZGF0YSB3b3JrcyB3aXRob3V0IHJlbG9hZGluZyAtIHRoZSAibG9hZHMiIG1vZHVsZQorICAgICAgICAjIHZhcmlhYmxlIGluIHRoZSBleGFtcGxlIGxvYWRlciBzaG91bGQgY291bnQgaG93IG1hbnkgdGltZXMgYSByZWxvYWQKKyAgICAgICAgIyBvY2N1cnMuCisgICAgICAgIGltcG9ydCBmb28KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28ubG9hZHMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtndXRpbC5nZXRfZGF0YSgnZm9vJywgJ2R1bW15JyksICJIZWxsbywgd29ybGQhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28ubG9hZHMsIDEpCisgICAgICAgIGRlbCBzeXMubW9kdWxlc1snZm9vJ10KKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChQa2d1dGlsVGVzdHMsIFBrZ3V0aWxQRVAzMDJUZXN0cykKKyAgICAjIHRoaXMgaXMgbmVjZXNzYXJ5IGlmIHRlc3QgaXMgcnVuIHJlcGVhdGVkIChsaWtlIHdoZW4gZmluZGluZyBsZWFrcykKKyAgICBpbXBvcnQgemlwaW1wb3J0CisgICAgemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLmNsZWFyKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGxhdGZvcm0ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wbGF0Zm9ybS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDFkNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcGxhdGZvcm0ucHkKQEAgLTAsMCArMSwyNTQgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFBsYXRmb3JtVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYXJjaGl0ZWN0dXJlKHNlbGYpOgorICAgICAgICByZXMgPSBwbGF0Zm9ybS5hcmNoaXRlY3R1cmUoKQorCisgICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKKyAgICAgICAgZGVmIHRlc3RfYXJjaGl0ZWN0dXJlX3ZpYV9zeW1saW5rKHNlbGYpOiAjIGlzc3VlMzc2MgorICAgICAgICAgICAgZGVmIGdldChweXRob24pOgorICAgICAgICAgICAgICAgIGNtZCA9IFtweXRob24sICctYycsCisgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgcGxhdGZvcm07IHByaW50IHBsYXRmb3JtLmFyY2hpdGVjdHVyZSgpJ10KKyAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHAuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgcmVhbCA9IG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgICAgICBsaW5rID0gb3MucGF0aC5hYnNwYXRoKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBvcy5zeW1saW5rKHJlYWwsIGxpbmspCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXQocmVhbCksIGdldChsaW5rKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGxpbmspCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgZm9yIGFsaWFzZWQgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgIGZvciB0ZXJzZSBpbiAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgICAgIHJlcyA9IHBsYXRmb3JtLnBsYXRmb3JtKGFsaWFzZWQsIHRlcnNlKQorCisgICAgZGVmIHRlc3Rfc3lzdGVtKHNlbGYpOgorICAgICAgICByZXMgPSBwbGF0Zm9ybS5zeXN0ZW0oKQorCisgICAgZGVmIHRlc3Rfbm9kZShzZWxmKToKKyAgICAgICAgcmVzID0gcGxhdGZvcm0ubm9kZSgpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlKHNlbGYpOgorICAgICAgICByZXMgPSBwbGF0Zm9ybS5yZWxlYXNlKCkKKworICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLnZlcnNpb24oKQorCisgICAgZGVmIHRlc3RfbWFjaGluZShzZWxmKToKKyAgICAgICAgcmVzID0gcGxhdGZvcm0ubWFjaGluZSgpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzb3Ioc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLnByb2Nlc3NvcigpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2F2ZV92ZXJzaW9uID0gc3lzLnZlcnNpb24KKyAgICAgICAgc2VsZi5zYXZlX3N1YnZlcnNpb24gPSBzeXMuc3VidmVyc2lvbgorICAgICAgICBzZWxmLnNhdmVfcGxhdGZvcm0gPSBzeXMucGxhdGZvcm0KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLnZlcnNpb24gPSBzZWxmLnNhdmVfdmVyc2lvbgorICAgICAgICBzeXMuc3VidmVyc2lvbiA9IHNlbGYuc2F2ZV9zdWJ2ZXJzaW9uCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9IHNlbGYuc2F2ZV9wbGF0Zm9ybQorCisgICAgZGVmIHRlc3Rfc3lzX3ZlcnNpb24oc2VsZik6CisgICAgICAgICMgT2xkIHRlc3QuCisgICAgICAgIGZvciBpbnB1dCwgb3V0cHV0IGluICgKKyAgICAgICAgICAgICgnMi40LjMgKCMxLCBKdW4gMjEgMjAwNiwgMTM6NTQ6MjEpIFxuW0dDQyAzLjMuNCAocHJlIDMuMy41IDIwMDQwODA5KV0nLAorICAgICAgICAgICAgICgnQ1B5dGhvbicsICcyLjQuMycsICcnLCAnJywgJzEnLCAnSnVuIDIxIDIwMDYgMTM6NTQ6MjEnLCAnR0NDIDMuMy40IChwcmUgMy4zLjUgMjAwNDA4MDkpJykpLAorICAgICAgICAgICAgKCdJcm9uUHl0aG9uIDEuMC42MDgxNiBvbiAuTkVUIDIuMC41MDcyNy40MicsCisgICAgICAgICAgICAgKCdJcm9uUHl0aG9uJywgJzEuMC42MDgxNicsICcnLCAnJywgJycsICcnLCAnLk5FVCAyLjAuNTA3MjcuNDInKSksCisgICAgICAgICAgICAoJ0lyb25QeXRob24gMS4wICgxLjAuNjEwMDUuMTk3Nykgb24gLk5FVCAyLjAuNTA3MjcuNDInLAorICAgICAgICAgICAgICgnSXJvblB5dGhvbicsICcxLjAuMCcsICcnLCAnJywgJycsICcnLCAnLk5FVCAyLjAuNTA3MjcuNDInKSksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgIyBicmFuY2ggYW5kIHJldmlzaW9uIGFyZSBub3QgInBhcnNlZCIsIGJ1dCBmZXRjaGVkCisgICAgICAgICAgICAjIGZyb20gc3lzLnN1YnZlcnNpb24uICBJZ25vcmUgdGhlbQorICAgICAgICAgICAgKG5hbWUsIHZlcnNpb24sIGJyYW5jaCwgcmV2aXNpb24sIGJ1aWxkbm8sIGJ1aWxkZGF0ZSwgY29tcGlsZXIpIFwKKyAgICAgICAgICAgICAgICAgICA9IHBsYXRmb3JtLl9zeXNfdmVyc2lvbihpbnB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgKG5hbWUsIHZlcnNpb24sICcnLCAnJywgYnVpbGRubywgYnVpbGRkYXRlLCBjb21waWxlciksIG91dHB1dCkKKworICAgICAgICAjIFRlc3RzIGZvciBweXRob25faW1wbGVtZW50YXRpb24oKSwgcHl0aG9uX3ZlcnNpb24oKSwgcHl0aG9uX2JyYW5jaCgpLAorICAgICAgICAjIHB5dGhvbl9yZXZpc2lvbigpLCBweXRob25fYnVpbGQoKSwgYW5kIHB5dGhvbl9jb21waWxlcigpLgorICAgICAgICBzeXNfdmVyc2lvbnMgPSB7CisgICAgICAgICAgICAoIjIuNi4xIChyMjYxOjY3NTE1LCBEZWMgIDYgMjAwOCwgMTU6MjY6MDApIFxuW0dDQyA0LjAuMSAoQXBwbGUgQ29tcHV0ZXIsIEluYy4gYnVpbGQgNTM3MCldIiwKKyAgICAgICAgICAgICAoJ0NQeXRob24nLCAndGFncy9yMjYxJywgJzY3NTE1JyksIHNlbGYuc2F2ZV9wbGF0Zm9ybSkKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAoIkNQeXRob24iLCAiMi42LjEiLCAidGFncy9yMjYxIiwgIjY3NTE1IiwKKyAgICAgICAgICAgICAgICAgKCdyMjYxOjY3NTE1JywgJ0RlYyAgNiAyMDA4IDE1OjI2OjAwJyksCisgICAgICAgICAgICAgICAgICdHQ0MgNC4wLjEgKEFwcGxlIENvbXB1dGVyLCBJbmMuIGJ1aWxkIDUzNzApJyksCisgICAgICAgICAgICAoIklyb25QeXRob24gMi4wICgyLjAuMC4wKSBvbiAuTkVUIDIuMC41MDcyNy4zMDUzIiwgTm9uZSwgImNsaSIpCisgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgKCJJcm9uUHl0aG9uIiwgIjIuMC4wIiwgIiIsICIiLCAoIiIsICIiKSwKKyAgICAgICAgICAgICAgICAgIi5ORVQgMi4wLjUwNzI3LjMwNTMiKSwKKyAgICAgICAgICAgICgiMi41ICh0cnVuazo2MTA3LCBNYXIgMjYgMjAwOSwgMTM6MDI6MTgpIFxuW0phdmEgSG90U3BvdChUTSkgQ2xpZW50IFZNIChcIkFwcGxlIENvbXB1dGVyLCBJbmMuXCIpXSIsCisgICAgICAgICAgICAoJ0p5dGhvbicsICd0cnVuaycsICc2MTA3JyksICJqYXZhMS41LjBfMTYiKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICgiSnl0aG9uIiwgIjIuNS4wIiwgInRydW5rIiwgIjYxMDciLAorICAgICAgICAgICAgICAgICAoJ3RydW5rOjYxMDcnLCAnTWFyIDI2IDIwMDknKSwgImphdmExLjUuMF8xNiIpLAorICAgICAgICAgICAgKCIyLjUuMiAoNjMzNzgsIE1hciAyNiAyMDA5LCAxODowMzoyOSlcbltQeVB5IDEuMC4wXSIsCisgICAgICAgICAgICAgKCdQeVB5JywgJ3RydW5rJywgJzYzMzc4JyksIHNlbGYuc2F2ZV9wbGF0Zm9ybSkKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAoIlB5UHkiLCAiMi41LjIiLCAidHJ1bmsiLCAiNjMzNzgiLCAoJzYzMzc4JywgJ01hciAyNiAyMDA5JyksCisgICAgICAgICAgICAgICAgICIiKQorICAgICAgICAgICAgfQorICAgICAgICBmb3IgKHZlcnNpb25fdGFnLCBzdWJ2ZXJzaW9uLCBzeXNfcGxhdGZvcm0pLCBpbmZvIGluIFwKKyAgICAgICAgICAgICAgICBzeXNfdmVyc2lvbnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzeXMudmVyc2lvbiA9IHZlcnNpb25fdGFnCisgICAgICAgICAgICBpZiBzdWJ2ZXJzaW9uIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzeXMsICJzdWJ2ZXJzaW9uIik6CisgICAgICAgICAgICAgICAgICAgIGRlbCBzeXMuc3VidmVyc2lvbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuc3VidmVyc2lvbiA9IHN1YnZlcnNpb24KKyAgICAgICAgICAgIGlmIHN5c19wbGF0Zm9ybSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gPSBzeXNfcGxhdGZvcm0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9uKCksIGluZm9bMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCksIGluZm9bMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtLnB5dGhvbl9icmFuY2goKSwgaW5mb1syXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ucHl0aG9uX3JldmlzaW9uKCksIGluZm9bM10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtLnB5dGhvbl9idWlsZCgpLCBpbmZvWzRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5weXRob25fY29tcGlsZXIoKSwgaW5mb1s1XSkKKworICAgIGRlZiB0ZXN0X3N5c3RlbV9hbGlhcyhzZWxmKToKKyAgICAgICAgcmVzID0gcGxhdGZvcm0uc3lzdGVtX2FsaWFzKAorICAgICAgICAgICAgcGxhdGZvcm0uc3lzdGVtKCksCisgICAgICAgICAgICBwbGF0Zm9ybS5yZWxlYXNlKCksCisgICAgICAgICAgICBwbGF0Zm9ybS52ZXJzaW9uKCksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3VuYW1lKHNlbGYpOgorICAgICAgICByZXMgPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkocmVzKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwgIndpbmRvd3Mgb25seSB0ZXN0IikKKyAgICBkZWYgdGVzdF91bmFtZV93aW4zMl9BUkNISVRFVzY0MzIoc2VsZik6CisgICAgICAgICMgSXNzdWUgNzg2MDogbWFrZSBzdXJlIHdlIGdldCBhcmNoaXRlY3R1cmUgZnJvbSB0aGUgY29ycmVjdCB2YXJpYWJsZQorICAgICAgICAjIG9uIDY0IGJpdCBXaW5kb3dzOiBpZiBQUk9DRVNTT1JfQVJDSElURVc2NDMyIGV4aXN0cyB3ZSBzaG91bGQgYmUKKyAgICAgICAgIyB1c2luZyBpdCwgcGVyCisgICAgICAgICMgaHR0cDovL2Jsb2dzLm1zZG4uY29tL2RhdmlkLndhbmcvYXJjaGl2ZS8yMDA2LzAzLzI2L0hPV1RPLURldGVjdC1Qcm9jZXNzLUJpdG5lc3MuYXNweAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52aXJvbjoKKyAgICAgICAgICAgICAgICBpZiAnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMicgaW4gZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgZGVsIGVudmlyb25bJ1BST0NFU1NPUl9BUkNISVRFVzY0MzInXQorICAgICAgICAgICAgICAgIGVudmlyb25bJ1BST0NFU1NPUl9BUkNISVRFQ1RVUkUnXSA9ICdmb28nCisgICAgICAgICAgICAgICAgcGxhdGZvcm0uX3VuYW1lX2NhY2hlID0gTm9uZQorICAgICAgICAgICAgICAgIHN5c3RlbSwgbm9kZSwgcmVsZWFzZSwgdmVyc2lvbiwgbWFjaGluZSwgcHJvY2Vzc29yID0gcGxhdGZvcm0udW5hbWUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjaGluZSwgJ2ZvbycpCisgICAgICAgICAgICAgICAgZW52aXJvblsnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMiddID0gJ2JhcicKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS5fdW5hbWVfY2FjaGUgPSBOb25lCisgICAgICAgICAgICAgICAgc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lLCBwcm9jZXNzb3IgPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNoaW5lLCAnYmFyJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHBsYXRmb3JtLl91bmFtZV9jYWNoZSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2phdmFfdmVyKHNlbGYpOgorICAgICAgICByZXMgPSBwbGF0Zm9ybS5qYXZhX3ZlcigpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnamF2YSc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKHJlcykpCisKKyAgICBkZWYgdGVzdF93aW4zMl92ZXIoc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLndpbjMyX3ZlcigpCisKKyAgICBkZWYgdGVzdF9tYWNfdmVyKHNlbGYpOgorICAgICAgICByZXMgPSBwbGF0Zm9ybS5tYWNfdmVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgZ2VzdGFsdAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBoYXZlX3Rvb2xib3hfZ2x1ZSA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoYXZlX3Rvb2xib3hfZ2x1ZSA9IFRydWUKKworICAgICAgICBpZiBoYXZlX3Rvb2xib3hfZ2x1ZSBhbmQgcGxhdGZvcm0udW5hbWUoKVswXSA9PSAnRGFyd2luJzoKKyAgICAgICAgICAgICMgV2UncmUgb24gYSBNYWNPU1ggc3lzdGVtLCBjaGVjayB0aGF0CisgICAgICAgICAgICAjIHRoZSByaWdodCB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHJldHVybmVkCisgICAgICAgICAgICBmZCA9IG9zLnBvcGVuKCdzd192ZXJzJywgJ3InKQorICAgICAgICAgICAgcmVhbF92ZXIgPSBOb25lCisgICAgICAgICAgICBmb3IgbG4gaW4gZmQ6CisgICAgICAgICAgICAgICAgaWYgbG4uc3RhcnRzd2l0aCgnUHJvZHVjdFZlcnNpb246Jyk6CisgICAgICAgICAgICAgICAgICAgIHJlYWxfdmVyID0gbG4uc3RyaXAoKS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWFsX3ZlciBpcyBOb25lKQorICAgICAgICAgICAgcmVzdWx0X2xpc3QgPSByZXNbMF0uc3BsaXQoJy4nKQorICAgICAgICAgICAgZXhwZWN0X2xpc3QgPSByZWFsX3Zlci5zcGxpdCgnLicpCisgICAgICAgICAgICBsZW5fZGlmZiA9IGxlbihyZXN1bHRfbGlzdCkgLSBsZW4oZXhwZWN0X2xpc3QpCisgICAgICAgICAgICAjIE9uIFNub3cgTGVvcGFyZCwgc3dfdmVycyByZXBvcnRzIDEwLjYuMCBhcyAxMC42CisgICAgICAgICAgICBpZiBsZW5fZGlmZiA+IDA6CisgICAgICAgICAgICAgICAgZXhwZWN0X2xpc3QuZXh0ZW5kKFsnMCddICogbGVuX2RpZmYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdF9saXN0LCBleHBlY3RfbGlzdCkKKworICAgICAgICAgICAgIyByZXNbMV0gY2xhaW1zIHRvIGNvbnRhaW4KKyAgICAgICAgICAgICMgKHZlcnNpb24sIGRldl9zdGFnZSwgbm9uX3JlbGVhc2VfdmVyc2lvbikKKyAgICAgICAgICAgICMgVGhhdCBpbmZvcm1hdGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1sxXSwgKCcnLCAnJywgJycpKQorCisgICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVzWzJdLCAoJ2kzODYnLCAneDg2XzY0JykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzJdLCAnUG93ZXJQQycpCisKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJywgIk9TWCBvbmx5IHRlc3QiKQorICAgIGRlZiB0ZXN0X21hY192ZXJfd2l0aF9mb3JrKHNlbGYpOgorICAgICAgICAjIElzc3VlNzg5NTogcGxhdGZvcm0ubWFjX3ZlcigpIGNyYXNoZXMgd2hlbiB1c2luZyBmb3JrIHdpdGhvdXQgZXhlYworICAgICAgICAjCisgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBmaXggZm9yIHRoYXQgaXNzdWUgd29ya3MuCisgICAgICAgICMKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBjaGlsZAorICAgICAgICAgICAgaW5mbyA9IHBsYXRmb3JtLm1hY192ZXIoKQorICAgICAgICAgICAgb3MuX2V4aXQoMCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBwYXJlbnQKKyAgICAgICAgICAgIGNwaWQsIHN0cyA9IG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcGlkLCBwaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cywgMCkKKworICAgIGRlZiB0ZXN0X2Rpc3Qoc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLmRpc3QoKQorCisgICAgZGVmIHRlc3RfbGliY192ZXIoc2VsZik6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHN5cy5leGVjdXRhYmxlKSBhbmQgXAorICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhzeXMuZXhlY3V0YWJsZSsnLmV4ZScpOgorICAgICAgICAgICAgIyBDeWd3aW4gaG9ycm9yCisgICAgICAgICAgICBleGVjdXRhYmxlID0gc3lzLmV4ZWN1dGFibGUgKyAnLmV4ZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzeXMuZXhlY3V0YWJsZQorICAgICAgICByZXMgPSBwbGF0Zm9ybS5saWJjX3ZlcihleGVjdXRhYmxlKQorCisgICAgZGVmIHRlc3RfcGFyc2VfcmVsZWFzZV9maWxlKHNlbGYpOgorCisgICAgICAgIGZvciBpbnB1dCwgb3V0cHV0IGluICgKKyAgICAgICAgICAgICMgRXhhbXBsZXMgb2YgcmVsZWFzZSBmaWxlIGNvbnRlbnRzOgorICAgICAgICAgICAgKCdTdVNFIExpbnV4IDkuMyAoeDg2LTY0KScsICgnU3VTRSBMaW51eCAnLCAnOS4zJywgJ3g4Ni02NCcpKSwKKyAgICAgICAgICAgICgnU1VTRSBMSU5VWCAxMC4xIChYODYtNjQpJywgKCdTVVNFIExJTlVYICcsICcxMC4xJywgJ1g4Ni02NCcpKSwKKyAgICAgICAgICAgICgnU1VTRSBMSU5VWCAxMC4xIChpNTg2KScsICgnU1VTRSBMSU5VWCAnLCAnMTAuMScsICdpNTg2JykpLAorICAgICAgICAgICAgKCdGZWRvcmEgQ29yZSByZWxlYXNlIDUgKEJvcmRlYXV4KScsICgnRmVkb3JhIENvcmUnLCAnNScsICdCb3JkZWF1eCcpKSwKKyAgICAgICAgICAgICgnUmVkIEhhdCBMaW51eCByZWxlYXNlIDguMCAoUHN5Y2hlKScsICgnUmVkIEhhdCBMaW51eCcsICc4LjAnLCAnUHN5Y2hlJykpLAorICAgICAgICAgICAgKCdSZWQgSGF0IExpbnV4IHJlbGVhc2UgOSAoU2hyaWtlKScsICgnUmVkIEhhdCBMaW51eCcsICc5JywgJ1NocmlrZScpKSwKKyAgICAgICAgICAgICgnUmVkIEhhdCBFbnRlcnByaXNlIExpbnV4IHJlbGVhc2UgNCAoTmFoYW50KScsICgnUmVkIEhhdCBFbnRlcnByaXNlIExpbnV4JywgJzQnLCAnTmFoYW50JykpLAorICAgICAgICAgICAgKCdDZW50T1MgcmVsZWFzZSA0JywgKCdDZW50T1MnLCAnNCcsIE5vbmUpKSwKKyAgICAgICAgICAgICgnUm9ja3MgcmVsZWFzZSA0LjIuMSAoQ3lkb25pYSknLCAoJ1JvY2tzJywgJzQuMi4xJywgJ0N5ZG9uaWEnKSksCisgICAgICAgICAgICAoJycsICgnJywgJycsICcnKSksICMgSWYgdGhlcmUncyBub3RoaW5nIHRoZXJlLgorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0uX3BhcnNlX3JlbGVhc2VfZmlsZShpbnB1dCksIG91dHB1dCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgUGxhdGZvcm1UZXN0CisgICAgKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTlhZDAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQpAQCAtMCwwICsxLDIwNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcGxpc3RsaWIKK2ltcG9ydCBvcworaW1wb3J0IGRhdGV0aW1lCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKKyMgVGhpcyB0ZXN0IGRhdGEgd2FzIGdlbmVyYXRlZCB0aHJvdWdoIENvY29hJ3MgTlNEaWN0aW9uYXJ5IGNsYXNzCitURVNUREFUQSA9ICIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iIFwKKyJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisgICAgICAgIDxrZXk+YURhdGU8L2tleT4KKyAgICAgICAgPGRhdGU+MjAwNC0xMC0yNlQxMDozMzozM1o8L2RhdGU+CisgICAgICAgIDxrZXk+YURpY3Q8L2tleT4KKyAgICAgICAgPGRpY3Q+CisgICAgICAgICAgICAgICAgPGtleT5hRmFsc2VWYWx1ZTwva2V5PgorICAgICAgICAgICAgICAgIDxmYWxzZS8+CisgICAgICAgICAgICAgICAgPGtleT5hVHJ1ZVZhbHVlPC9rZXk+CisgICAgICAgICAgICAgICAgPHRydWUvPgorICAgICAgICAgICAgICAgIDxrZXk+YVVuaWNvZGVWYWx1ZTwva2V5PgorICAgICAgICAgICAgICAgIDxzdHJpbmc+TVx4YzNceGE0c3NpZywgTWFceGMzXHg5Zjwvc3RyaW5nPgorICAgICAgICAgICAgICAgIDxrZXk+YW5vdGhlclN0cmluZzwva2V5PgorICAgICAgICAgICAgICAgIDxzdHJpbmc+Jmx0O2hlbGxvICZhbXA7ICdoaScgdGhlcmUhJmd0Ozwvc3RyaW5nPgorICAgICAgICAgICAgICAgIDxrZXk+ZGVlcGVyRGljdDwva2V5PgorICAgICAgICAgICAgICAgIDxkaWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGtleT5hPC9rZXk+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xNzwvaW50ZWdlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yjwva2V5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yzwva2V5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGFycmF5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4yPC9pbnRlZ2VyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPnRleHQ8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJyYXk+CisgICAgICAgICAgICAgICAgPC9kaWN0PgorICAgICAgICA8L2RpY3Q+CisgICAgICAgIDxrZXk+YUZsb2F0PC9rZXk+CisgICAgICAgIDxyZWFsPjAuNTwvcmVhbD4KKyAgICAgICAgPGtleT5hTGlzdDwva2V5PgorICAgICAgICA8YXJyYXk+CisgICAgICAgICAgICAgICAgPHN0cmluZz5BPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgPHN0cmluZz5CPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgPGludGVnZXI+MTI8L2ludGVnZXI+CisgICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KKyAgICAgICAgICAgICAgICA8YXJyYXk+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgorICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MjwvaW50ZWdlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjM8L2ludGVnZXI+CisgICAgICAgICAgICAgICAgPC9hcnJheT4KKyAgICAgICAgPC9hcnJheT4KKyAgICAgICAgPGtleT5hU3RyaW5nPC9rZXk+CisgICAgICAgIDxzdHJpbmc+RG9vZGFoPC9zdHJpbmc+CisgICAgICAgIDxrZXk+YW5JbnQ8L2tleT4KKyAgICAgICAgPGludGVnZXI+NzI4PC9pbnRlZ2VyPgorICAgICAgICA8a2V5Pm5lc3RlZERhdGE8L2tleT4KKyAgICAgICAgPGFycmF5PgorICAgICAgICAgICAgICAgIDxkYXRhPgorICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1cgorICAgICAgICAgICAgICAgIFBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNQorICAgICAgICAgICAgICAgIElHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTBjeUJ2WmlCaQorICAgICAgICAgICAgICAgIGFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSegorICAgICAgICAgICAgICAgIElHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRAorICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQorICAgICAgICAgICAgICAgIDwvZGF0YT4KKyAgICAgICAgPC9hcnJheT4KKyAgICAgICAgPGtleT5zb21lRGF0YTwva2V5PgorICAgICAgICA8ZGF0YT4KKyAgICAgICAgUEdKcGJtRnllU0JuZFc1clBnPT0KKyAgICAgICAgPC9kYXRhPgorICAgICAgICA8a2V5PnNvbWVNb3JlRGF0YTwva2V5PgorICAgICAgICA8ZGF0YT4KKyAgICAgICAgUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTTgKKyAgICAgICAgYkc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHMKKyAgICAgICAgYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHYKKyAgICAgICAgZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTAKKyAgICAgICAgY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQorICAgICAgICA8L2RhdGE+CisgICAgICAgIDxrZXk+XHhjM1x4ODViZW5yYWE8L2tleT4KKyAgICAgICAgPHN0cmluZz5UaGF0IHdhcyBhIHVuaWNvZGUga2V5Ljwvc3RyaW5nPgorPC9kaWN0PgorPC9wbGlzdD4KKyIiIi5yZXBsYWNlKCIgIiAqIDgsICJcdCIpICAjIEFwcGxlIGFzIHdlbGwgYXMgcGxpc3RsaWIucHkgb3V0cHV0IGhhcmQgdGFicworCisKK2NsYXNzIFRlc3RQbGlzdGxpYih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGwgPSBkaWN0KAorICAgICAgICAgICAgYVN0cmluZz0iRG9vZGFoIiwKKyAgICAgICAgICAgIGFMaXN0PVsiQSIsICJCIiwgMTIsIDMyLjUsIFsxLCAyLCAzXV0sCisgICAgICAgICAgICBhRmxvYXQgPSAwLjUsCisgICAgICAgICAgICBhbkludCA9IDcyOCwKKyAgICAgICAgICAgIGFEaWN0PWRpY3QoCisgICAgICAgICAgICAgICAgYW5vdGhlclN0cmluZz0iPGhlbGxvICYgJ2hpJyB0aGVyZSE+IiwKKyAgICAgICAgICAgICAgICBhVW5pY29kZVZhbHVlPXUnTVx4ZTRzc2lnLCBNYVx4ZGYnLAorICAgICAgICAgICAgICAgIGFUcnVlVmFsdWU9VHJ1ZSwKKyAgICAgICAgICAgICAgICBhRmFsc2VWYWx1ZT1GYWxzZSwKKyAgICAgICAgICAgICAgICBkZWVwZXJEaWN0PWRpY3QoYT0xNywgYj0zMi41LCBjPVsxLCAyLCAidGV4dCJdKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBzb21lRGF0YSA9IHBsaXN0bGliLkRhdGEoIjxiaW5hcnkgZ3Vuaz4iKSwKKyAgICAgICAgICAgIHNvbWVNb3JlRGF0YSA9IHBsaXN0bGliLkRhdGEoIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwKSwKKyAgICAgICAgICAgIG5lc3RlZERhdGEgPSBbcGxpc3RsaWIuRGF0YSgiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTApXSwKKyAgICAgICAgICAgIGFEYXRlID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwNCwgMTAsIDI2LCAxMCwgMzMsIDMzKSwKKyAgICAgICAgKQorICAgICAgICBwbFt1J1x4YzViZW5yYWEnXSA9ICJUaGF0IHdhcyBhIHVuaWNvZGUga2V5LiIKKyAgICAgICAgcmV0dXJuIHBsCisKKyAgICBkZWYgdGVzdF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbFsiYVN0cmluZyJdLCAiRG9vZGFoIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbFsiYURpY3QiXVsiYUZhbHNlVmFsdWUiXSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9pbyhzZWxmKToKKyAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQorICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0KHBsLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3QodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCisgICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmcocGwpCisgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21TdHJpbmcoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICBkYXRhMiA9IHBsaXN0bGliLndyaXRlUGxpc3RUb1N0cmluZyhwbDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGF0YTIpCisKKyAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9hcnJheShzZWxmKToKKyAgICAgICAgZGF0YSA9IFtbW1tbW1tbeyd0ZXN0JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfV1dXV1dXV1dCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbVN0cmluZyhwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmcoZGF0YSkpLCBkYXRhKQorCisgICAgZGVmIHRlc3RfaW5kZW50YXRpb25fZGljdChzZWxmKToKKyAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IHsnMyc6IHsnNCc6IHsnNSc6IHsnNic6IHsnNyc6IHsnOCc6IHsnOSc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX19fX19fX19fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLnJlYWRQbGlzdEZyb21TdHJpbmcocGxpc3RsaWIud3JpdGVQbGlzdFRvU3RyaW5nKGRhdGEpKSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uX2RpY3RfbWl4KHNlbGYpOgorICAgICAgICBkYXRhID0geycxJzogeycyJzogW3snMyc6IFtbW1tbeyd0ZXN0JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfV1dXV1dfV19fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLnJlYWRQbGlzdEZyb21TdHJpbmcocGxpc3RsaWIud3JpdGVQbGlzdFRvU3RyaW5nKGRhdGEpKSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X2FwcGxlZm9ybWF0dGluZyhzZWxmKToKKyAgICAgICAgcGwgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tU3RyaW5nKFRFU1REQVRBKQorICAgICAgICBkYXRhID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvU3RyaW5nKHBsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIFRFU1REQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0ZWQgZGF0YSB3YXMgbm90IGlkZW50aWNhbCB0byBBcHBsZSdzIG91dHB1dCIpCisKKyAgICBkZWYgdGVzdF9hcHBsZWZvcm1hdHRpbmdmcm9tbGl0ZXJhbChzZWxmKToKKyAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQorICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tU3RyaW5nKFRFU1REQVRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZCBkYXRhIHdhcyBub3QgaWRlbnRpY2FsIHRvIEFwcGxlJ3Mgb3V0cHV0IikKKworICAgIGRlZiB0ZXN0X3N0cmluZ2lvKHNlbGYpOgorICAgICAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgICAgICBmID0gU3RyaW5nSU8oKQorICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCisgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGwsIGYpCisgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChTdHJpbmdJTyhmLmdldHZhbHVlKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisKKyAgICBkZWYgdGVzdF9jc3RyaW5naW8oc2VsZik6CisgICAgICAgIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgICAgICBmID0gU3RyaW5nSU8oKQorICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCisgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGwsIGYpCisgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChTdHJpbmdJTyhmLmdldHZhbHVlKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisKKyAgICBkZWYgdGVzdF9jb250cm9sY2hhcmFjdGVycyhzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTI4KToKKyAgICAgICAgICAgIGMgPSBjaHIoaSkKKyAgICAgICAgICAgIHRlc3RTdHJpbmcgPSAic3RyaW5nIGNvbnRhaW5pbmcgJXMiICUgYworICAgICAgICAgICAgaWYgaSA+PSAzMiBvciBjIGluICJcclxuXHQiOgorICAgICAgICAgICAgICAgICMgXHIsIFxuIGFuZCBcdCBhcmUgdGhlIG9ubHkgbGVnYWwgY29udHJvbCBjaGFycyBpbiBYTUwKKyAgICAgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmcodGVzdFN0cmluZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFN0cmluZykKKworICAgIGRlZiB0ZXN0X25vbmRpY3Ryb290KHNlbGYpOgorICAgICAgICB0ZXN0MSA9ICJhYmMiCisgICAgICAgIHRlc3QyID0gWzEsIDIsIDMsICJhYmMiXQorICAgICAgICByZXN1bHQxID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbVN0cmluZyhwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmcodGVzdDEpKQorICAgICAgICByZXN1bHQyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbVN0cmluZyhwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmcodGVzdDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QxLCByZXN1bHQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QyLCByZXN1bHQyKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQbGlzdGxpYikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wb2xsLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcG9sbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTI5NGY4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcG9sbC5weQpAQCAtMCwwICsxLDE2NyBAQAorIyBUZXN0IGNhc2UgZm9yIHRoZSBvcy5wb2xsKCkgZnVuY3Rpb24KKworaW1wb3J0IG9zLCBzZWxlY3QsIHJhbmRvbSwgdW5pdHRlc3QKK2ltcG9ydCBfdGVzdGNhcGkKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0CisKK3RyeToKKyAgICBzZWxlY3QucG9sbAorZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAic2VsZWN0LnBvbGwgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF9wb2xsIgorCisKK2RlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKKyAgICBtYXRjaCA9IFtdCisgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgorICAgICAgICBpZiBtb2RlICYgZmxhZzoKKyAgICAgICAgICAgIG1hdGNoLmFwcGVuZChmZCkKKyAgICByZXR1cm4gbWF0Y2gKKworY2xhc3MgUG9sbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BvbGwxKHNlbGYpOgorICAgICAgICAjIEJhc2ljIGZ1bmN0aW9uYWwgdGVzdCBvZiBwb2xsIG9iamVjdAorICAgICAgICAjIENyZWF0ZSBhIGJ1bmNoIG9mIHBpcGUgYW5kIHRlc3QgdGhhdCBwb2xsIHdvcmtzIHdpdGggdGhlbS4KKworICAgICAgICBwID0gc2VsZWN0LnBvbGwoKQorCisgICAgICAgIE5VTV9QSVBFUyA9IDEyCisgICAgICAgIE1TRyA9ICIgVGhpcyBpcyBhIHRlc3QuIgorICAgICAgICBNU0dfTEVOID0gbGVuKE1TRykKKyAgICAgICAgcmVhZGVycyA9IFtdCisgICAgICAgIHdyaXRlcnMgPSBbXQorICAgICAgICByMncgPSB7fQorICAgICAgICB3MnIgPSB7fQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTV9QSVBFUyk6CisgICAgICAgICAgICByZCwgd3IgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIHAucmVnaXN0ZXIocmQpCisgICAgICAgICAgICBwLm1vZGlmeShyZCwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgICAgIHAucmVnaXN0ZXIod3IsIHNlbGVjdC5QT0xMT1VUKQorICAgICAgICAgICAgcmVhZGVycy5hcHBlbmQocmQpCisgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3cikKKyAgICAgICAgICAgIHIyd1tyZF0gPSB3cgorICAgICAgICAgICAgdzJyW3dyXSA9IHJkCisKKyAgICAgICAgYnVmcyA9IFtdCisKKyAgICAgICAgd2hpbGUgd3JpdGVyczoKKyAgICAgICAgICAgIHJlYWR5ID0gcC5wb2xsKCkKKyAgICAgICAgICAgIHJlYWR5X3dyaXRlcnMgPSBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBzZWxlY3QuUE9MTE9VVCkKKyAgICAgICAgICAgIGlmIG5vdCByZWFkeV93cml0ZXJzOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIm5vIHBpcGVzIHJlYWR5IGZvciB3cml0aW5nIgorICAgICAgICAgICAgd3IgPSByYW5kb20uY2hvaWNlKHJlYWR5X3dyaXRlcnMpCisgICAgICAgICAgICBvcy53cml0ZSh3ciwgTVNHKQorCisgICAgICAgICAgICByZWFkeSA9IHAucG9sbCgpCisgICAgICAgICAgICByZWFkeV9yZWFkZXJzID0gZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgICAgIGlmIG5vdCByZWFkeV9yZWFkZXJzOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIm5vIHBpcGVzIHJlYWR5IGZvciByZWFkaW5nIgorICAgICAgICAgICAgcmQgPSByYW5kb20uY2hvaWNlKHJlYWR5X3JlYWRlcnMpCisgICAgICAgICAgICBidWYgPSBvcy5yZWFkKHJkLCBNU0dfTEVOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgTVNHX0xFTikKKyAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGJ1ZikKKyAgICAgICAgICAgIG9zLmNsb3NlKHIyd1tyZF0pIDsgb3MuY2xvc2UoIHJkICkKKyAgICAgICAgICAgIHAudW5yZWdpc3RlciggcjJ3W3JkXSApCisgICAgICAgICAgICBwLnVucmVnaXN0ZXIoIHJkICkKKyAgICAgICAgICAgIHdyaXRlcnMucmVtb3ZlKHIyd1tyZF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZzLCBbTVNHXSAqIE5VTV9QSVBFUykKKworICAgIGRlZiBwb2xsX3VuaXRfdGVzdHMoc2VsZik6CisgICAgICAgICMgcmV0dXJucyBOVkFMIGZvciBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBGRCA9IDQyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNsb3NlKEZEKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcCA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgcC5yZWdpc3RlcihGRCkKKyAgICAgICAgciA9IHAucG9sbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclswXSwgKEZELCBzZWxlY3QuUE9MTE5WQUwpKQorCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3cnKQorICAgICAgICBmZCA9IGYuZmlsZW5vKCkKKyAgICAgICAgcCA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgcC5yZWdpc3RlcihmKQorICAgICAgICByID0gcC5wb2xsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzBdWzBdLCBmZCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHIgPSBwLnBvbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbMF0sIChmZCwgc2VsZWN0LlBPTExOVkFMKSkKKyAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworICAgICAgICAjIHR5cGUgZXJyb3IgZm9yIGludmFsaWQgYXJndW1lbnRzCisgICAgICAgIHAgPSBzZWxlY3QucG9sbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcC5yZWdpc3RlciwgcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwLnVucmVnaXN0ZXIsIHApCisKKyAgICAgICAgIyBjYW4ndCB1bnJlZ2lzdGVyIG5vbi1leGlzdGVudCBvYmplY3QKKyAgICAgICAgcCA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHAudW5yZWdpc3RlciwgMykKKworICAgICAgICAjIFRlc3QgZXJyb3IgY2FzZXMKKyAgICAgICAgcG9sbHN0ZXIgPSBzZWxlY3QucG9sbCgpCisgICAgICAgIGNsYXNzIE5vcGU6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQWxtb3N0OgorICAgICAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbGVubycKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvbGxzdGVyLnJlZ2lzdGVyLCBOb3BlKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9sbHN0ZXIucmVnaXN0ZXIsIEFsbW9zdCgpLCAwKQorCisgICAgIyBBbm90aGVyIHRlc3QgY2FzZSBmb3IgcG9sbCgpLiAgVGhpcyBpcyBjb3BpZWQgZnJvbSB0aGUgdGVzdCBjYXNlIGZvcgorICAgICMgc2VsZWN0KCksIG1vZGlmaWVkIHRvIHVzZSBwb2xsKCkgaW5zdGVhZC4KKworICAgIGRlZiB0ZXN0X3BvbGwyKHNlbGYpOgorICAgICAgICBjbWQgPSAnZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gZWNobyB0ZXN0aW5nLi4uOyBzbGVlcCAxOyBkb25lJworICAgICAgICBwID0gb3MucG9wZW4oY21kLCAncicpCisgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQorICAgICAgICBwb2xsc3Rlci5yZWdpc3RlciggcCwgc2VsZWN0LlBPTExJTiApCisgICAgICAgIGZvciB0b3V0IGluICgwLCAxMDAwLCAyMDAwLCA0MDAwLCA4MDAwLCAxNjAwMCkgKyAoLTEsKSoxMDoKKyAgICAgICAgICAgIGZkbGlzdCA9IHBvbGxzdGVyLnBvbGwodG91dCkKKyAgICAgICAgICAgIGlmIChmZGxpc3QgPT0gW10pOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmZCwgZmxhZ3MgPSBmZGxpc3RbMF0KKyAgICAgICAgICAgIGlmIGZsYWdzICYgc2VsZWN0LlBPTExIVVA6CisgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gIiI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3I6IHBpcGUgc2VlbXMgdG8gYmUgY2xvc2VkLCBidXQgc3RpbGwgcmV0dXJucyBkYXRhJykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBlbGlmIGZsYWdzICYgc2VsZWN0LlBPTExJTjoKKyAgICAgICAgICAgICAgICBsaW5lID0gcC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIHJldHVybiB2YWx1ZSBmcm9tIHNlbGVjdC5wb2xsOiAlcycgJSBmZGxpc3QpCisgICAgICAgIHAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcG9sbDMoc2VsZik6CisgICAgICAgICMgdGVzdCBpbnQgb3ZlcmZsb3cKKyAgICAgICAgcG9sbHN0ZXIgPSBzZWxlY3QucG9sbCgpCisgICAgICAgIHBvbGxzdGVyLnJlZ2lzdGVyKDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcG9sbHN0ZXIucG9sbCwgMUwgPDwgNjQpCisKKyAgICAgICAgeCA9IDIgKyAzCisgICAgICAgIGlmIHggIT0gNToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnT3ZlcmZsb3cgbXVzdCBoYXZlIG9jY3VycmVkJykKKworICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgIyBJc3N1ZSAxNTk4OQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5yZWdpc3RlciwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX3Rlc3RjYXBpLlNIUlRfTUFYICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcG9sbHN0ZXIucmVnaXN0ZXIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF90ZXN0Y2FwaS5VU0hSVF9NQVggKyAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5wb2xsLCBfdGVzdGNhcGkuSU5UX01BWCArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnBvbGwsIF90ZXN0Y2FwaS5VSU5UX01BWCArIDEpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoUG9sbFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wb3Blbi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjVlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wb3Blbi5weQpAQCAtMCwwICsxLDUyIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJCYXNpYyB0ZXN0cyBmb3Igb3MucG9wZW4oKQorCisgIFBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHBsYXRmb3JtcyB0aGF0IGZha2UgcG9wZW4uCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IG9zLCBzeXMKKworIyBUZXN0IHRoYXQgY29tbWFuZC1saW5lcyBnZXQgZG93biBhcyB3ZSBleHBlY3QuCisjIFRvIGRvIHRoaXMgd2UgZXhlY3V0ZToKKyMgICAgcHl0aG9uIC1jICJpbXBvcnQgc3lzO3ByaW50IHN5cy5hcmd2IiB7cmVzdF9vZl9jb21tYW5kbGluZX0KKyMgVGhpcyByZXN1bHRzIGluIFB5dGhvbiBiZWluZyBzcGF3bmVkIGFuZCBwcmludGluZyB0aGUgc3lzLmFyZ3YgbGlzdC4KKyMgV2UgY2FuIHRoZW4gZXZhbCgpIHRoZSByZXN1bHQgb2YgdGhpcywgYW5kIHNlZSB3aGF0IGVhY2ggYXJndiB3YXMuCitweXRob24gPSBzeXMuZXhlY3V0YWJsZQorCitjbGFzcyBQb3BlblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBfZG9fdGVzdF9jb21tYW5kbGluZShzZWxmLCBjbWRsaW5lLCBleHBlY3RlZCk6CisgICAgICAgIGNtZCA9ICclcyAtYyAiaW1wb3J0IHN5cztwcmludCBzeXMuYXJndiIgJXMnICUgKHB5dGhvbiwgY21kbGluZSkKKyAgICAgICAgZGF0YSA9IG9zLnBvcGVuKGNtZCkucmVhZCgpICsgJ1xuJworICAgICAgICBnb3QgPSBldmFsKGRhdGEpWzE6XSAjIHN0cmlwIG9mZiBhcmd2WzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3BvcGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLnBvcGVuKQorICAgICAgICBzZWxmLl9kb190ZXN0X2NvbW1hbmRsaW5lKAorICAgICAgICAgICAgImZvbyBiYXIiLAorICAgICAgICAgICAgWyJmb28iLCAiYmFyIl0KKyAgICAgICAgKQorICAgICAgICBzZWxmLl9kb190ZXN0X2NvbW1hbmRsaW5lKAorICAgICAgICAgICAgJ2ZvbyAic3BhbSBhbmQgZWdncyIgInNpbGx5IHdhbGsiJywKKyAgICAgICAgICAgIFsiZm9vIiwgInNwYW0gYW5kIGVnZ3MiLCAic2lsbHkgd2FsayJdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5fZG9fdGVzdF9jb21tYW5kbGluZSgKKyAgICAgICAgICAgICdmb28gImEgXFwicXVvdGVkXFwiIGFyZyIgYmFyJywKKyAgICAgICAgICAgIFsiZm9vIiwgJ2EgInF1b3RlZCIgYXJnJywgImJhciJdCisgICAgICAgICkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2NvZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucG9wZW4oImV4aXQgMCIpLmNsb3NlKCksIE5vbmUpCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucG9wZW4oImV4aXQgNDIiKS5jbG9zZSgpLCA0MikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucG9wZW4oImV4aXQgNDIiKS5jbG9zZSgpLCA0MiA8PCA4KQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQb3BlblRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BvcGVuMi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BvcGVuMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQxMDc1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcG9wZW4yLnB5CkBAIC0wLDAgKzEsMTMwIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJUZXN0IHNjcmlwdCBmb3IgcG9wZW4yLnB5IiIiCisKK2ltcG9ydCB3YXJuaW5ncword2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKnBvcGVuMiBtb2R1bGUgaXMgZGVwcmVjYXRlZC4qIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAib3NcLnBvcGVuLiBpcyBkZXByZWNhdGVkLioiLAorICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHBvcGVuMgorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4KKworaWYgc3lzLnBsYXRmb3JtWzo0XSA9PSAnYmVvcycgb3Igc3lzLnBsYXRmb3JtWzo2XSA9PSAnYXRoZW9zJzoKKyAgICAjICBMb2NrcyBnZXQgbWVzc2VkIHVwIG9yIHNvbWV0aGluZy4gIEdlbmVyYWxseSB3ZSdyZSBzdXBwb3NlZAorICAgICMgIHRvIGF2b2lkIG1peGluZyAicG9zaXgiIGZvcmsgJiBleGVjIHdpdGggbmF0aXZlIHRocmVhZHMsIGFuZAorICAgICMgIHRoZXkgbWF5IGJlIHJpZ2h0IGFib3V0IHRoYXQgYWZ0ZXIgYWxsLgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJwb3BlbjIoKSBkb2Vzbid0IHdvcmsgb24gIiArIHN5cy5wbGF0Zm9ybSkKKworIyBpZiB3ZSBkb24ndCBoYXZlIG9zLnBvcGVuLCBjaGVjayB0aGF0CisjIHdlIGhhdmUgb3MuZm9yay4gIGlmIG5vdCwgc2tpcCB0aGUgdGVzdAorIyAoYnkgcmFpc2luZyBhbiBJbXBvcnRFcnJvcikKK3RyeToKKyAgICBmcm9tIG9zIGltcG9ydCBwb3BlbgorICAgIGRlbCBwb3BlbgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gb3MgaW1wb3J0IGZvcmsKKyAgICBkZWwgZm9yaworCitjbGFzcyBQb3BlbjJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbWQgPSAiY2F0IgorICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKKyAgICAgICAgY21kID0gIm1vcmUiCisgICAgdGVzdHN0ciA9ICJhYiBjZFxuIgorICAgICMgIm1vcmUiIGRvZXNuJ3QgYWN0IHRoZSBzYW1lIHdheSBhY3Jvc3MgV2luZG93cyBmbGF2b3JzLAorICAgICMgc29tZXRpbWVzIGFkZGluZyBhbiBleHRyYSBuZXdsaW5lIGF0IHRoZSBzdGFydCBvciB0aGUKKyAgICAjIGVuZC4gIFNvIHdlIHN0cmlwIHdoaXRlc3BhY2Ugb2ZmIGJvdGggZW5kcyBmb3IgY29tcGFyaXNvbi4KKyAgICBleHBlY3RlZCA9IHRlc3RzdHIuc3RyaXAoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwb3BlbjIuX2NsZWFudXAoKQorICAgICAgICAjIFdoZW4gdGhlIHRlc3QgcnVucywgdGhlcmUgc2hvdWxkbid0IGJlIGFueSBvcGVuIHBpcGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9wZW4yLl9hY3RpdmUsICJBY3RpdmUgcGlwZXMgd2hlbiB0ZXN0IHN0YXJ0cyIgKworICAgICAgICAgICAgcmVwcihbYy5jbWQgZm9yIGMgaW4gcG9wZW4yLl9hY3RpdmVdKSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIGluc3QgaW4gcG9wZW4yLl9hY3RpdmU6CisgICAgICAgICAgICBpbnN0LndhaXQoKQorICAgICAgICBwb3BlbjIuX2NsZWFudXAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcGVuMi5fYWN0aXZlLCAicG9wZW4yLl9hY3RpdmUgbm90IGVtcHR5IikKKyAgICAgICAgIyBUaGUgb3MucG9wZW4qKCkgQVBJIGRlbGVnYXRlcyB0byB0aGUgc3VicHJvY2VzcyBtb2R1bGUgKG9uIFVuaXgpCisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGZvciBpbnN0IGluIHN1YnByb2Nlc3MuX2FjdGl2ZToKKyAgICAgICAgICAgIGluc3Qud2FpdCgpCisgICAgICAgIHN1YnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YnByb2Nlc3MuX2FjdGl2ZSwgInN1YnByb2Nlc3MuX2FjdGl2ZSBub3QgZW1wdHkiKQorICAgICAgICByZWFwX2NoaWxkcmVuKCkKKworICAgIGRlZiB2YWxpZGF0ZV9vdXRwdXQoc2VsZiwgdGVzdHN0ciwgZXhwZWN0ZWRfb3V0LCByLCB3LCBlPU5vbmUpOgorICAgICAgICB3LndyaXRlKHRlc3RzdHIpCisgICAgICAgIHcuY2xvc2UoKQorICAgICAgICBnb3QgPSByLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX291dCwgZ290LnN0cmlwKCksICJ3cm90ZSAlciByZWFkICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RzdHIsIGdvdCkpCisKKyAgICAgICAgaWYgZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGdvdCA9IGUucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdvdCwgInVuZXhwZWN0ZWQgJXIgb24gc3RkZXJyIiAlIGdvdCkKKworICAgIGRlZiB0ZXN0X3BvcGVuMihzZWxmKToKKyAgICAgICAgciwgdyA9IHBvcGVuMi5wb3BlbjIoc2VsZi5jbWQpCisgICAgICAgIHNlbGYudmFsaWRhdGVfb3V0cHV0KHNlbGYudGVzdHN0ciwgc2VsZi5leHBlY3RlZCwgciwgdykKKworICAgIGRlZiB0ZXN0X3BvcGVuMyhzZWxmKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgciwgdywgZSA9IHBvcGVuMi5wb3BlbjMoW3NlbGYuY21kXSkKKyAgICAgICAgICAgIHNlbGYudmFsaWRhdGVfb3V0cHV0KHNlbGYudGVzdHN0ciwgc2VsZi5leHBlY3RlZCwgciwgdywgZSkKKworICAgICAgICByLCB3LCBlID0gcG9wZW4yLnBvcGVuMyhzZWxmLmNtZCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9vdXRwdXQoc2VsZi50ZXN0c3RyLCBzZWxmLmV4cGVjdGVkLCByLCB3LCBlKQorCisgICAgZGVmIHRlc3Rfb3NfcG9wZW4yKHNlbGYpOgorICAgICAgICAjIHNhbWUgdGVzdCBhcyB0ZXN0X3BvcGVuMigpLCBidXQgdXNpbmcgdGhlIG9zLnBvcGVuKigpIEFQSQorICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICB3LCByID0gb3MucG9wZW4yKFtzZWxmLmNtZF0pCisgICAgICAgICAgICBzZWxmLnZhbGlkYXRlX291dHB1dChzZWxmLnRlc3RzdHIsIHNlbGYuZXhwZWN0ZWQsIHIsIHcpCisKKyAgICAgICAgICAgIHcsIHIgPSBvcy5wb3BlbjIoWyJlY2hvIiwgc2VsZi50ZXN0c3RyXSkKKyAgICAgICAgICAgIGdvdCA9IHIucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgc2VsZi50ZXN0c3RyICsgIlxuIikKKworICAgICAgICB3LCByID0gb3MucG9wZW4yKHNlbGYuY21kKQorICAgICAgICBzZWxmLnZhbGlkYXRlX291dHB1dChzZWxmLnRlc3RzdHIsIHNlbGYuZXhwZWN0ZWQsIHIsIHcpCisKKyAgICBkZWYgdGVzdF9vc19wb3BlbjMoc2VsZik6CisgICAgICAgICMgc2FtZSB0ZXN0IGFzIHRlc3RfcG9wZW4zKCksIGJ1dCB1c2luZyB0aGUgb3MucG9wZW4qKCkgQVBJCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgIHcsIHIsIGUgPSBvcy5wb3BlbjMoW3NlbGYuY21kXSkKKyAgICAgICAgICAgIHNlbGYudmFsaWRhdGVfb3V0cHV0KHNlbGYudGVzdHN0ciwgc2VsZi5leHBlY3RlZCwgciwgdywgZSkKKworICAgICAgICAgICAgdywgciwgZSA9IG9zLnBvcGVuMyhbImVjaG8iLCBzZWxmLnRlc3RzdHJdKQorICAgICAgICAgICAgZ290ID0gci5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBzZWxmLnRlc3RzdHIgKyAiXG4iKQorICAgICAgICAgICAgZ290ID0gZS5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ290LCAidW5leHBlY3RlZCAlciBvbiBzdGRlcnIiICUgZ290KQorCisgICAgICAgIHcsIHIsIGUgPSBvcy5wb3BlbjMoc2VsZi5jbWQpCisgICAgICAgIHNlbGYudmFsaWRhdGVfb3V0cHV0KHNlbGYudGVzdHN0ciwgc2VsZi5leHBlY3RlZCwgciwgdywgZSkKKworICAgIGRlZiB0ZXN0X29zX3BvcGVuNChzZWxmKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgdywgciA9IG9zLnBvcGVuNChbc2VsZi5jbWRdKQorICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV9vdXRwdXQoc2VsZi50ZXN0c3RyLCBzZWxmLmV4cGVjdGVkLCByLCB3KQorCisgICAgICAgICAgICB3LCByID0gb3MucG9wZW40KFsiZWNobyIsIHNlbGYudGVzdHN0cl0pCisgICAgICAgICAgICBnb3QgPSByLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIHNlbGYudGVzdHN0ciArICJcbiIpCisKKyAgICAgICAgdywgciA9IG9zLnBvcGVuNChzZWxmLmNtZCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9vdXRwdXQoc2VsZi50ZXN0c3RyLCBzZWxmLmV4cGVjdGVkLCByLCB3KQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoUG9wZW4yVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDVjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKQEAgLTAsMCArMSwzNDUgQEAKKyIiIlRlc3Qgc2NyaXB0IGZvciBwb3BsaWIgbW9kdWxlLiIiIgorCisjIE1vZGlmaWVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEnIHRvIGdpdmUgcG9wbGliLlBPUDMgYW5kIHBvcGxpYi5QT1AzX1NTTAorIyBhIHJlYWwgdGVzdCBzdWl0ZQorCitpbXBvcnQgcG9wbGliCitpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCBhc3luY2hhdAoraW1wb3J0IHNvY2tldAoraW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IGVycm5vCisKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgSE9TVAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCisKKworIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgd2hlbiBMSVNUIGFuZCBSRVRSIGNvbW1hbmRzIGFyZSBpc3N1ZWQKK0xJU1RfUkVTUCA9ICcxIDFcclxuMiAyXHJcbjMgM1xyXG40IDRcclxuNSA1XHJcbi5cclxuJworUkVUUl9SRVNQID0gIiIiRnJvbTogcG9zdG1hc3RlckBweXRob24ub3JnXAorXHJcbkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpblxyXG5cCitNSU1FLVZlcnNpb246IDEuMFxyXG5cCitTdWJqZWN0OiBEdW1teVxyXG5cCitcclxuXAorbGluZTFcclxuXAorbGluZTJcclxuXAorbGluZTNcclxuXAorLlxyXG4iIiIKKworCitjbGFzcyBEdW1teVBPUDNIYW5kbGVyKGFzeW5jaGF0LmFzeW5jX2NoYXQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoIlxyXG4iKQorICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LicpCisKKyAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmluX2J1ZmZlci5hcHBlbmQoZGF0YSkKKworICAgIGRlZiBmb3VuZF90ZXJtaW5hdG9yKHNlbGYpOgorICAgICAgICBsaW5lID0gJycuam9pbihzZWxmLmluX2J1ZmZlcikKKyAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQorICAgICAgICBjbWQgPSBsaW5lLnNwbGl0KCcgJylbMF0ubG93ZXIoKQorICAgICAgICBzcGFjZSA9IGxpbmUuZmluZCgnICcpCisgICAgICAgIGlmIHNwYWNlICE9IC0xOgorICAgICAgICAgICAgYXJnID0gbGluZVtzcGFjZSArIDE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJnID0gIiIKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnY21kXycgKyBjbWQpOgorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAnY21kXycgKyBjbWQpCisgICAgICAgICAgICBtZXRob2QoYXJnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wdXNoKCctRVJSIHVucmVjb2duaXplZCBQT1AzIGNvbW1hbmQgIiVzIi4nICVjbWQpCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisgICAgZGVmIHB1c2goc2VsZiwgZGF0YSk6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQucHVzaChzZWxmLCBkYXRhICsgJ1xyXG4nKQorCisgICAgZGVmIGNtZF9lY2hvKHNlbGYsIGFyZyk6CisgICAgICAgICMgc2VuZHMgYmFjayB0aGUgcmVjZWl2ZWQgc3RyaW5nICh1c2VkIGJ5IHRoZSB0ZXN0IHN1aXRlKQorICAgICAgICBzZWxmLnB1c2goYXJnKQorCisgICAgZGVmIGNtZF91c2VyKHNlbGYsIGFyZyk6CisgICAgICAgIGlmIGFyZyAhPSAiZ3VpZG8iOgorICAgICAgICAgICAgc2VsZi5wdXNoKCItRVJSIG5vIHN1Y2ggdXNlciIpCisgICAgICAgIHNlbGYucHVzaCgnK09LIHBhc3N3b3JkIHJlcXVpcmVkJykKKworICAgIGRlZiBjbWRfcGFzcyhzZWxmLCBhcmcpOgorICAgICAgICBpZiBhcmcgIT0gInB5dGhvbiI6CisgICAgICAgICAgICBzZWxmLnB1c2goIi1FUlIgd3JvbmcgcGFzc3dvcmQiKQorICAgICAgICBzZWxmLnB1c2goJytPSyAxMCBtZXNzYWdlcycpCisKKyAgICBkZWYgY21kX3N0YXQoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgMTAgMTAwJykKKworICAgIGRlZiBjbWRfbGlzdChzZWxmLCBhcmcpOgorICAgICAgICBpZiBhcmc6CisgICAgICAgICAgICBzZWxmLnB1c2goJytPSyAlcyAlcycgJShhcmcsIGFyZykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2goJytPSycpCisgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0LnB1c2goc2VsZiwgTElTVF9SRVNQKQorCisgICAgY21kX3VpZGwgPSBjbWRfbGlzdAorCisgICAgZGVmIGNtZF9yZXRyKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnK09LICVzIGJ5dGVzJyAlbGVuKFJFVFJfUkVTUCkpCisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQucHVzaChzZWxmLCBSRVRSX1JFU1ApCisKKyAgICBjbWRfdG9wID0gY21kX3JldHIKKworICAgIGRlZiBjbWRfZGVsZShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBtZXNzYWdlIG1hcmtlZCBmb3IgZGVsZXRpb24uJykKKworICAgIGRlZiBjbWRfbm9vcChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBkb25lIG5vdGhpbmcuJykKKworICAgIGRlZiBjbWRfcnBvcChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBkb25lIG5vdGhpbmcuJykKKworCitjbGFzcyBEdW1teVBPUDNTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlciwgdGhyZWFkaW5nLlRocmVhZCk6CisKKyAgICBoYW5kbGVyID0gRHVtbXlQT1AzSGFuZGxlcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MsIGFmPXNvY2tldC5BRl9JTkVUKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChhZiwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmJpbmQoYWRkcmVzcykKKyAgICAgICAgc2VsZi5saXN0ZW4oNSkKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQorICAgICAgICBzZWxmLmFjdGl2ZV9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLmhvc3QsIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbOjJdCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5hY3RpdmUKKyAgICAgICAgc2VsZi5fX2ZsYWcgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnN0YXJ0KHNlbGYpCisgICAgICAgIHNlbGYuX19mbGFnLndhaXQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBUcnVlCisgICAgICAgIHNlbGYuX19mbGFnLnNldCgpCisgICAgICAgIHdoaWxlIHNlbGYuYWN0aXZlIGFuZCBhc3luY29yZS5zb2NrZXRfbWFwOgorICAgICAgICAgICAgc2VsZi5hY3RpdmVfbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjEsIGNvdW50PTEpCisgICAgICAgICAgICBzZWxmLmFjdGl2ZV9sb2NrLnJlbGVhc2UoKQorICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoaWdub3JlX2FsbD1UcnVlKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmFjdGl2ZQorICAgICAgICBzZWxmLmFjdGl2ZSA9IEZhbHNlCisgICAgICAgIHNlbGYuam9pbigpCisKKyAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuYWNjZXB0KCkKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gc2VsZi5oYW5kbGVyKGNvbm4pCisgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICBoYW5kbGVfcmVhZCA9IGhhbmRsZV9jb25uZWN0CisKKyAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisKK2NsYXNzIFRlc3RQT1AzQ2xhc3MoVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydE9LKHNlbGYsIHJlc3ApOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5zdGFydHN3aXRoKCIrT0siKSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVBPUDNTZXJ2ZXIoKEhPU1QsIDApKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDMoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3RfZ2V0d2VsY29tZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5nZXR3ZWxjb21lKCksICcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuJykKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBvcGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQuX3Nob3J0Y21kLCAnZWNobyAtZXJyJykKKworICAgIGRlZiB0ZXN0X3VzZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T0soc2VsZi5jbGllbnQudXNlcignZ3VpZG8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC51c2VyLCAnaW52YWxpZCcpCisKKyAgICBkZWYgdGVzdF9wYXNzXyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC5wYXNzXygncHl0aG9uJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBvcGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQudXNlciwgJ2ludmFsaWQnKQorCisgICAgZGVmIHRlc3Rfc3RhdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5zdGF0KCksICgxMCwgMTAwKSkKKworICAgIGRlZiB0ZXN0X2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQubGlzdCgpWzE6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoWycxIDEnLCAnMiAyJywgJzMgMycsICc0IDQnLCAnNSA1J10sIDI1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2xpZW50Lmxpc3QoJzEnKS5lbmRzd2l0aCgiT0sgMSAxIikpCisKKyAgICBkZWYgdGVzdF9yZXRyKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICgnK09LIDExNiBieXRlcycsCisgICAgICAgICAgICAgICAgICAgIFsnRnJvbTogcG9zdG1hc3RlckBweXRob24ub3JnJywgJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicsCisgICAgICAgICAgICAgICAgICAgICAnTUlNRS1WZXJzaW9uOiAxLjAnLCAnU3ViamVjdDogRHVtbXknLAorICAgICAgICAgICAgICAgICAgICAgJycsICdsaW5lMScsICdsaW5lMicsICdsaW5lMyddLAorICAgICAgICAgICAgICAgICAgICAxMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQucmV0cignZm9vJyksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZGVsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC5kZWxlKCdmb28nKSkKKworICAgIGRlZiB0ZXN0X25vb3Aoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T0soc2VsZi5jbGllbnQubm9vcCgpKQorCisgICAgZGVmIHRlc3RfcnBvcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC5ycG9wKCdmb28nKSkKKworICAgIGRlZiB0ZXN0X3RvcChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAgKCcrT0sgMTE2IGJ5dGVzJywKKyAgICAgICAgICAgICAgICAgICAgIFsnRnJvbTogcG9zdG1hc3RlckBweXRob24ub3JnJywgJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicsCisgICAgICAgICAgICAgICAgICAgICAgJ01JTUUtVmVyc2lvbjogMS4wJywgJ1N1YmplY3Q6IER1bW15JywgJycsCisgICAgICAgICAgICAgICAgICAgICAgJ2xpbmUxJywgJ2xpbmUyJywgJ2xpbmUzJ10sCisgICAgICAgICAgICAgICAgICAgICAxMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQudG9wKDEsIDEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3VpZGwoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoKQorICAgICAgICBzZWxmLmNsaWVudC51aWRsKCdmb28nKQorCisKK1NVUFBPUlRTX1NTTCA9IEZhbHNlCitpZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6CisgICAgaW1wb3J0IHNzbAorCisgICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQorICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydC5wZW0iKQorCisgICAgY2xhc3MgRHVtbXlQT1AzX1NTTEhhbmRsZXIoRHVtbXlQT1AzSGFuZGxlcik6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrZXQsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlKQorICAgICAgICAgICAgIyBNdXN0IHRyeSBoYW5kc2hha2UgYmVmb3JlIGNhbGxpbmcgcHVzaCgpCisgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKCJcclxuIikKKyAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KKyAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LicpCisKKyAgICAgICAgZGVmIF9kb19zc2xfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gRmFsc2UKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBEdW1teVBPUDNIYW5kbGVyLmhhbmRsZV9yZWFkKHNlbGYpCisKKyAgICBjbGFzcyBUZXN0UE9QM19TU0xDbGFzcyhUZXN0UE9QM0NsYXNzKToKKyAgICAgICAgIyByZXBlYXQgcHJldmlvdXMgdGVzdHMgYnkgdXNpbmcgcG9wbGliLlBPUDNfU1NMCisKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVBPUDNTZXJ2ZXIoKEhPU1QsIDApKQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlciA9IER1bW15UE9QM19TU0xIYW5kbGVyCisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzX1NTTChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorCisgICAgICAgIGRlZiB0ZXN0X19hbGxfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1BPUDNfU1NMJywgcG9wbGliLl9fYWxsX18pCisKKworY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDYwKSAgIyBTYWZldHkgbmV0LiBMb29rIGlzc3VlIDExODEyCisgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQorICAgICAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuc2VydmVyLCBhcmdzPShzZWxmLmV2dCxzZWxmLnNvY2spKQorICAgICAgICBzZWxmLnRocmVhZC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisgICAgICAgIGRlbCBzZWxmLnRocmVhZCAgIyBDbGVhciBvdXQgYW55IGRhbmdsaW5nIFRocmVhZCBvYmplY3RzLgorCisgICAgZGVmIHNlcnZlcihzZWxmLCBldnQsIHNlcnYpOgorICAgICAgICBzZXJ2Lmxpc3Rlbig1KQorICAgICAgICBldnQuc2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlcnYuYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uc2VuZCgiKyBIb2xhIG11bmRvXG4iKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlcnYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RUaW1lb3V0RGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcG9wID0gcG9wbGliLlBPUDMoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9wLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyAgICAgICAgcG9wLnNvY2suY2xvc2UoKQorCisgICAgZGVmIHRlc3RUaW1lb3V0Tm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcG9wID0gcG9wbGliLlBPUDMoSE9TVCwgc2VsZi5wb3J0LCB0aW1lb3V0PU5vbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcC5zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBwb3Auc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXRWYWx1ZShzZWxmKToKKyAgICAgICAgcG9wID0gcG9wbGliLlBPUDMoSE9TVCwgc2VsZi5wb3J0LCB0aW1lb3V0PTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIHBvcC5zb2NrLmNsb3NlKCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbVGVzdFBPUDNDbGFzcywgVGVzdFRpbWVvdXRzXQorICAgIGlmIFNVUFBPUlRTX1NTTDoKKyAgICAgICAgdGVzdHMuYXBwZW5kKFRlc3RQT1AzX1NTTENsYXNzKQorICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgdHJ5OgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKyAgICBmaW5hbGx5OgorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnRocmVhZF9pbmZvKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhOGNkZgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CkBAIC0wLDAgKzEsNTQ2IEBACisiVGVzdCBwb3NpeCBmdW5jdGlvbnMiCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgU2tpcCB0aGVzZSB0ZXN0cyBpZiB0aGVyZSBpcyBubyBwb3NpeCBtb2R1bGUuCitwb3NpeCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdwb3NpeCcpCisKK2ltcG9ydCBlcnJubworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgcHdkCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworCitfRFVNTVlfU1lNTElOSyA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgJy1kdW1teS1zeW1saW5rJykKKword2FybmluZ3MuZmlsdGVyd2FybmluZ3MoJ2lnbm9yZScsICcuKiBwb3RlbnRpYWwgc2VjdXJpdHkgcmlzayAuKicsCisgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKKworY2xhc3MgUG9zaXhUZXN0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSBlbXB0eSBmaWxlCisgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndysnKQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHNlbGYudGVhcmRvd25fZmlsZXMgPSBbIHRlc3Rfc3VwcG9ydC5URVNURk4gXQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3IgdGVhcmRvd25fZmlsZSBpbiBzZWxmLnRlYXJkb3duX2ZpbGVzOgorICAgICAgICAgICAgb3MudW5saW5rKHRlYXJkb3duX2ZpbGUpCisKKyAgICBkZWYgdGVzdE5vQXJnRnVuY3Rpb25zKHNlbGYpOgorICAgICAgICAjIHRlc3QgcG9zaXggZnVuY3Rpb25zIHdoaWNoIHRha2Ugbm8gYXJndW1lbnRzIGFuZCBoYXZlCisgICAgICAgICMgbm8gc2lkZS1lZmZlY3RzIHdoaWNoIHdlIG5lZWQgdG8gY2xlYW51cCAoZS5nLiwgZm9yaywgd2FpdCwgYWJvcnQpCisgICAgICAgIE5PX0FSR19GVU5DVElPTlMgPSBbICJjdGVybWlkIiwgImdldGN3ZCIsICJnZXRjd2R1IiwgInVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIiwgImdldGxvYWRhdmciLCAidG1wbmFtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldGVnaWQiLCAiZ2V0ZXVpZCIsICJnZXRnaWQiLCAiZ2V0Z3JvdXBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldHBpZCIsICJnZXRwZ3JwIiwgImdldHBwaWQiLCAiZ2V0dWlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIiIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIGZvciBuYW1lIGluIE5PX0FSR19GVU5DVElPTlM6CisgICAgICAgICAgICAgICAgcG9zaXhfZnVuYyA9IGdldGF0dHIocG9zaXgsIG5hbWUsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgcG9zaXhfZnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcG9zaXhfZnVuYygpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhfZnVuYywgMSkKKworICAgIGlmIGhhc2F0dHIocG9zaXgsICdnZXRyZXN1aWQnKToKKyAgICAgICAgZGVmIHRlc3RfZ2V0cmVzdWlkKHNlbGYpOgorICAgICAgICAgICAgdXNlcl9pZHMgPSBwb3NpeC5nZXRyZXN1aWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odXNlcl9pZHMpLCAzKQorICAgICAgICAgICAgZm9yIHZhbCBpbiB1c2VyX2lkczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh2YWwsIDApCisKKyAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0cmVzZ2lkJyk6CisgICAgICAgIGRlZiB0ZXN0X2dldHJlc2dpZChzZWxmKToKKyAgICAgICAgICAgIGdyb3VwX2lkcyA9IHBvc2l4LmdldHJlc2dpZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihncm91cF9pZHMpLCAzKQorICAgICAgICAgICAgZm9yIHZhbCBpbiBncm91cF9pZHM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwodmFsLCAwKQorCisgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3NldHJlc3VpZCcpOgorICAgICAgICBkZWYgdGVzdF9zZXRyZXN1aWQoc2VsZik6CisgICAgICAgICAgICBjdXJyZW50X3VzZXJfaWRzID0gcG9zaXguZ2V0cmVzdWlkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvc2l4LnNldHJlc3VpZCgqY3VycmVudF91c2VyX2lkcykpCisgICAgICAgICAgICAjIC0xIG1lYW5zIGRvbid0IGNoYW5nZSB0aGF0IHZhbHVlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9zaXguc2V0cmVzdWlkKC0xLCAtMSwgLTEpKQorCisgICAgICAgIGRlZiB0ZXN0X3NldHJlc3VpZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICAgICAjIERvbid0IGRvIHRoaXMgdGVzdCBpZiBzb21lb25lIGlzIHNpbGx5IGVub3VnaCB0byBydW4gdXMgYXMgcm9vdC4KKyAgICAgICAgICAgIGN1cnJlbnRfdXNlcl9pZHMgPSBwb3NpeC5nZXRyZXN1aWQoKQorICAgICAgICAgICAgaWYgMCBub3QgaW4gY3VycmVudF91c2VyX2lkczoKKyAgICAgICAgICAgICAgICBuZXdfdXNlcl9pZHMgPSAoY3VycmVudF91c2VyX2lkc1swXSsxLCAtMSwgLTEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcG9zaXguc2V0cmVzdWlkLCAqbmV3X3VzZXJfaWRzKQorCisgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3NldHJlc2dpZCcpOgorICAgICAgICBkZWYgdGVzdF9zZXRyZXNnaWQoc2VsZik6CisgICAgICAgICAgICBjdXJyZW50X2dyb3VwX2lkcyA9IHBvc2l4LmdldHJlc2dpZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb3NpeC5zZXRyZXNnaWQoKmN1cnJlbnRfZ3JvdXBfaWRzKSkKKyAgICAgICAgICAgICMgLTEgbWVhbnMgZG9uJ3QgY2hhbmdlIHRoYXQgdmFsdWUuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb3NpeC5zZXRyZXNnaWQoLTEsIC0xLCAtMSkpCisKKyAgICAgICAgZGVmIHRlc3Rfc2V0cmVzZ2lkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgICAgICMgRG9uJ3QgZG8gdGhpcyB0ZXN0IGlmIHNvbWVvbmUgaXMgc2lsbHkgZW5vdWdoIHRvIHJ1biB1cyBhcyByb290LgorICAgICAgICAgICAgY3VycmVudF9ncm91cF9pZHMgPSBwb3NpeC5nZXRyZXNnaWQoKQorICAgICAgICAgICAgaWYgMCBub3QgaW4gY3VycmVudF9ncm91cF9pZHM6CisgICAgICAgICAgICAgICAgbmV3X2dyb3VwX2lkcyA9IChjdXJyZW50X2dyb3VwX2lkc1swXSsxLCAtMSwgLTEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcG9zaXguc2V0cmVzZ2lkLCAqbmV3X2dyb3VwX2lkcykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdpbml0Z3JvdXBzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgbmVlZHMgb3MuaW5pdGdyb3VwcygpIikKKyAgICBkZWYgdGVzdF9pbml0Z3JvdXBzKHNlbGYpOgorICAgICAgICAjIEl0IHRha2VzIGEgc3RyaW5nIGFuZCBhbiBpbnRlZ2VyOyBjaGVjayB0aGF0IGl0IHJhaXNlcyBhIFR5cGVFcnJvcgorICAgICAgICAjIGZvciBvdGhlciBhcmd1bWVudCBsaXN0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC5pbml0Z3JvdXBzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4LmluaXRncm91cHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXguaW5pdGdyb3VwcywgMywgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXguaW5pdGdyb3VwcywgImZvbyIsIDMsIG9iamVjdCgpKQorCisgICAgICAgICMgSWYgYSBub24tcHJpdmlsZWdlZCB1c2VyIGludm9rZXMgaXQsIGl0IHNob3VsZCBmYWlsIHdpdGggT1NFcnJvcgorICAgICAgICAjIEVQRVJNLgorICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUgPSBwd2QuZ2V0cHd1aWQocG9zaXguZ2V0dWlkKCkpLnB3X25hbWUKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAjIHRoZSBjdXJyZW50IFVJRCBtYXkgbm90IGhhdmUgYSBwd2QgZW50cnkKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibmVlZCBhIHB3ZCBlbnRyeSIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcG9zaXguaW5pdGdyb3VwcyhuYW1lLCAxMykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FUEVSTSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBPU0Vycm9yIHRvIGJlIHJhaXNlZCBieSBpbml0Z3JvdXBzIikKKworICAgIGRlZiB0ZXN0X3N0YXR2ZnMoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdzdGF0dmZzJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXguc3RhdHZmcyhvcy5jdXJkaXIpKQorCisgICAgZGVmIHRlc3RfZnN0YXR2ZnMoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdmc3RhdHZmcycpOgorICAgICAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LmZzdGF0dmZzKGZwLmZpbGVubygpKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZnRydW5jYXRlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZnRydW5jYXRlJyk6CisgICAgICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3crJykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIHdlIG5lZWQgdG8gaGF2ZSBzb21lIGRhdGEgdG8gdHJ1bmNhdGUKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgndGVzdCcpCisgICAgICAgICAgICAgICAgZnAuZmx1c2goKQorICAgICAgICAgICAgICAgIHBvc2l4LmZ0cnVuY2F0ZShmcC5maWxlbm8oKSwgMCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZHVwKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZHVwJyk6CisgICAgICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZCA9IHBvc2l4LmR1cChmcC5maWxlbm8oKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmQsIGludCkKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY29uZnN0cihzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2NvbmZzdHInKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvc2l4LmNvbmZzdHIsICJDU19nYXJiYWdlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBvc2l4LmNvbmZzdHIoIkNTX1BBVEgiKSkgPiAwLCBUcnVlKQorCisgICAgZGVmIHRlc3RfZHVwMihzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2R1cDInKToKKyAgICAgICAgICAgIGZwMSA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIGZwMiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwb3NpeC5kdXAyKGZwMS5maWxlbm8oKSwgZnAyLmZpbGVubygpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcDEuY2xvc2UoKQorICAgICAgICAgICAgICAgIGZwMi5jbG9zZSgpCisKKyAgICBkZWYgZmRvcGVuX2hlbHBlcihzZWxmLCAqYXJncyk6CisgICAgICAgIGZkID0gb3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgZnAyID0gcG9zaXguZmRvcGVuKGZkLCAqYXJncykKKyAgICAgICAgZnAyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Zkb3BlbihzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2Zkb3BlbicpOgorICAgICAgICAgICAgc2VsZi5mZG9wZW5faGVscGVyKCkKKyAgICAgICAgICAgIHNlbGYuZmRvcGVuX2hlbHBlcigncicpCisgICAgICAgICAgICBzZWxmLmZkb3Blbl9oZWxwZXIoJ3InLCAxMDApCisKKyAgICBkZWYgdGVzdF9vc2V4bG9jayhzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgIk9fRVhMT0NLIik6CisgICAgICAgICAgICBmZCA9IG9zLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcy5PX1dST05MWXxvcy5PX0VYTE9DS3xvcy5PX0NSRUFUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Mub3BlbiwgdGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fV1JPTkxZfG9zLk9fRVhMT0NLfG9zLk9fTk9OQkxPQ0spCisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKworICAgICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgIk9fU0hMT0NLIik6CisgICAgICAgICAgICAgICAgZmQgPSBvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fV1JPTkxZfG9zLk9fU0hMT0NLfG9zLk9fQ1JFQVQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Mub3BlbiwgdGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5PX1dST05MWXxvcy5PX0VYTE9DS3xvcy5PX05PTkJMT0NLKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgZGVmIHRlc3Rfb3NzaGxvY2soc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICJPX1NITE9DSyIpOgorICAgICAgICAgICAgZmQxID0gb3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fV1JPTkxZfG9zLk9fU0hMT0NLfG9zLk9fQ1JFQVQpCisgICAgICAgICAgICBmZDIgPSBvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fV1JPTkxZfG9zLk9fU0hMT0NLfG9zLk9fQ1JFQVQpCisgICAgICAgICAgICBvcy5jbG9zZShmZDIpCisgICAgICAgICAgICBvcy5jbG9zZShmZDEpCisKKyAgICAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICJPX0VYTE9DSyIpOgorICAgICAgICAgICAgICAgIGZkID0gb3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5PX1dST05MWXxvcy5PX1NITE9DS3xvcy5PX0NSRUFUKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLm9wZW4sIHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuT19SRE9OTFl8b3MuT19FWExPQ0t8b3MuT19OT05CTE9DSykKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKKworICAgIGRlZiB0ZXN0X2ZzdGF0KHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZnN0YXQnKToKKyAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC5mc3RhdChmcC5maWxlbm8oKSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3N0YXQoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdzdGF0Jyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXguc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOKSkKKworICAgIGRlZiBfdGVzdF9hbGxfY2hvd25fY29tbW9uKHNlbGYsIGNob3duX2Z1bmMsIGZpcnN0X3BhcmFtLCBzdGF0X2Z1bmMpOgorICAgICAgICAiIiJDb21tb24gY29kZSBmb3IgY2hvd24sIGZjaG93biBhbmQgbGNob3duIHRlc3RzLiIiIgorICAgICAgICBkZWYgY2hlY2tfc3RhdCh1aWQsIGdpZCk6CisgICAgICAgICAgICBpZiBzdGF0X2Z1bmMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhdCA9IHN0YXRfZnVuYyhmaXJzdF9wYXJhbSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuc3RfdWlkLCB1aWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LnN0X2dpZCwgZ2lkKQorICAgICAgICB1aWQgPSBvcy5nZXR1aWQoKQorICAgICAgICBnaWQgPSBvcy5nZXRnaWQoKQorICAgICAgICAjIHRlc3QgYSBzdWNjZXNzZnVsIGNob3duIGNhbGwKKyAgICAgICAgY2hvd25fZnVuYyhmaXJzdF9wYXJhbSwgdWlkLCBnaWQpCisgICAgICAgIGNoZWNrX3N0YXQodWlkLCBnaWQpCisgICAgICAgIGNob3duX2Z1bmMoZmlyc3RfcGFyYW0sIC0xLCBnaWQpCisgICAgICAgIGNoZWNrX3N0YXQodWlkLCBnaWQpCisgICAgICAgIGNob3duX2Z1bmMoZmlyc3RfcGFyYW0sIHVpZCwgLTEpCisgICAgICAgIGNoZWNrX3N0YXQodWlkLCBnaWQpCisKKyAgICAgICAgaWYgdWlkID09IDA6CisgICAgICAgICAgICAjIFRyeSBhbiBhbXVzaW5nbHkgbGFyZ2UgdWlkL2dpZCB0byBtYWtlIHN1cmUgd2UgaGFuZGxlCisgICAgICAgICAgICAjIGxhcmdlIHVuc2lnbmVkIHZhbHVlcy4gIChjaG93biBsZXRzIHlvdSB1c2UgYW55CisgICAgICAgICAgICAjIHVpZC9naWQgeW91IGxpa2UsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgZGVmaW5lZC4pCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoaXMgcHJvYmxlbSBrZWVwcyBjb21pbmcgdXA6CisgICAgICAgICAgICAjICAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3NDc4NTgKKyAgICAgICAgICAgICMgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNDU5MQorICAgICAgICAgICAgIyAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTMwMQorICAgICAgICAgICAgIyBIb3BlZnVsbHkgdGhlIGZpeCBpbiA0NTkxIGZpeGVzIGl0IGZvciBnb29kIQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGlzIHBhcnQgb2YgdGhlIHRlc3Qgb25seSBydW5zIHdoZW4gcnVuIGFzIHJvb3QuCisgICAgICAgICAgICAjIE9ubHkgc2NhcnkgcGVvcGxlIHJ1biB0aGVpciB0ZXN0cyBhcyByb290LgorCisgICAgICAgICAgICBiaWdfdmFsdWUgPSAyKiozMQorICAgICAgICAgICAgY2hvd25fZnVuYyhmaXJzdF9wYXJhbSwgYmlnX3ZhbHVlLCBiaWdfdmFsdWUpCisgICAgICAgICAgICBjaGVja19zdGF0KGJpZ192YWx1ZSwgYmlnX3ZhbHVlKQorICAgICAgICAgICAgY2hvd25fZnVuYyhmaXJzdF9wYXJhbSwgLTEsIC0xKQorICAgICAgICAgICAgY2hlY2tfc3RhdChiaWdfdmFsdWUsIGJpZ192YWx1ZSkKKyAgICAgICAgICAgIGNob3duX2Z1bmMoZmlyc3RfcGFyYW0sIHVpZCwgZ2lkKQorICAgICAgICAgICAgY2hlY2tfc3RhdCh1aWQsIGdpZCkKKyAgICAgICAgZWxpZiBwbGF0Zm9ybS5zeXN0ZW0oKSBpbiAoJ0hQLVVYJywgJ1N1bk9TJyk6CisgICAgICAgICAgICAjIEhQLVVYIGFuZCBTb2xhcmlzIGNhbiBhbGxvdyBhIG5vbi1yb290IHVzZXIgdG8gY2hvd24oKSB0byByb290CisgICAgICAgICAgICAjIChpc3N1ZSAjNTExMykKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTa2lwcGluZyBiZWNhdXNlIG9mIG5vbi1zdGFuZGFyZCBjaG93bigpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWhhdmlvciIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIG5vbi1yb290IGNhbm5vdCBjaG93biB0byByb290LCByYWlzZXMgT1NFcnJvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY2hvd25fZnVuYywgZmlyc3RfcGFyYW0sIDAsIDApCisgICAgICAgICAgICBjaGVja19zdGF0KHVpZCwgZ2lkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY2hvd25fZnVuYywgZmlyc3RfcGFyYW0sIDAsIC0xKQorICAgICAgICAgICAgY2hlY2tfc3RhdCh1aWQsIGdpZCkKKyAgICAgICAgICAgIGlmIDAgbm90IGluIG9zLmdldGdyb3VwcygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNob3duX2Z1bmMsIGZpcnN0X3BhcmFtLCAtMSwgMCkKKyAgICAgICAgICAgICAgICBjaGVja19zdGF0KHVpZCwgZ2lkKQorICAgICAgICAjIHRlc3QgaWxsZWdhbCB0eXBlcworICAgICAgICBmb3IgdCBpbiBzdHIsIGZsb2F0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjaG93bl9mdW5jLCBmaXJzdF9wYXJhbSwgdCh1aWQpLCBnaWQpCisgICAgICAgICAgICBjaGVja19zdGF0KHVpZCwgZ2lkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjaG93bl9mdW5jLCBmaXJzdF9wYXJhbSwgdWlkLCB0KGdpZCkpCisgICAgICAgICAgICBjaGVja19zdGF0KHVpZCwgZ2lkKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2Nob3duJyksICJ0ZXN0IG5lZWRzIG9zLmNob3duKCkiKQorICAgIGRlZiB0ZXN0X2Nob3duKHNlbGYpOgorICAgICAgICAjIHJhaXNlIGFuIE9TRXJyb3IgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHBvc2l4LmNob3duLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCAtMSwgLTEpCisKKyAgICAgICAgIyByZS1jcmVhdGUgdGhlIGZpbGUKKyAgICAgICAgb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fdGVzdF9hbGxfY2hvd25fY29tbW9uKHBvc2l4LmNob3duLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihwb3NpeCwgJ3N0YXQnLCBOb25lKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdmY2hvd24nKSwgInRlc3QgbmVlZHMgb3MuZmNob3duKCkiKQorICAgIGRlZiB0ZXN0X2ZjaG93bihzZWxmKToKKyAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgIyByZS1jcmVhdGUgdGhlIGZpbGUKKyAgICAgICAgdGVzdF9maWxlID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkID0gdGVzdF9maWxlLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLl90ZXN0X2FsbF9jaG93bl9jb21tb24ocG9zaXguZmNob3duLCBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHBvc2l4LCAnZnN0YXQnLCBOb25lKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRlc3RfZmlsZS5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnbGNob3duJyksICJ0ZXN0IG5lZWRzIG9zLmxjaG93bigpIikKKyAgICBkZWYgdGVzdF9sY2hvd24oc2VsZik6CisgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAjIGNyZWF0ZSBhIHN5bWxpbmsKKyAgICAgICAgb3Muc3ltbGluayhfRFVNTVlfU1lNTElOSywgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5fdGVzdF9hbGxfY2hvd25fY29tbW9uKHBvc2l4LmxjaG93biwgdGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIocG9zaXgsICdsc3RhdCcsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfY2hkaXIoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdjaGRpcicpOgorICAgICAgICAgICAgcG9zaXguY2hkaXIob3MuY3VyZGlyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcG9zaXguY2hkaXIsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9sc2RpcihzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2xzZGlyJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHRlc3Rfc3VwcG9ydC5URVNURk4sIHBvc2l4LmxzZGlyKG9zLmN1cmRpcikpCisKKyAgICBkZWYgdGVzdF9hY2Nlc3Moc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdhY2Nlc3MnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC5hY2Nlc3ModGVzdF9zdXBwb3J0LlRFU1RGTiwgb3MuUl9PSykpCisKKyAgICBkZWYgdGVzdF91bWFzayhzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3VtYXNrJyk6CisgICAgICAgICAgICBvbGRfbWFzayA9IHBvc2l4LnVtYXNrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2xkX21hc2ssIGludCkKKyAgICAgICAgICAgIHBvc2l4LnVtYXNrKG9sZF9tYXNrKQorCisgICAgZGVmIHRlc3Rfc3RyZXJyb3Ioc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdzdHJlcnJvcicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LnN0cmVycm9yKDApKQorCisgICAgZGVmIHRlc3RfcGlwZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3BpcGUnKToKKyAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gcG9zaXgucGlwZSgpCisgICAgICAgICAgICBvcy5jbG9zZShyZWFkZXIpCisgICAgICAgICAgICBvcy5jbG9zZSh3cml0ZXIpCisKKyAgICBkZWYgdGVzdF90ZW1wbmFtKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAndGVtcG5hbScpOgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidGVtcG5hbSIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXgudGVtcG5hbSgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC50ZW1wbmFtKG9zLmN1cmRpcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LnRlbXBuYW0ob3MuY3VyZGlyLCAnYmxhaCcpKQorCisgICAgZGVmIHRlc3RfdG1wZmlsZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3RtcGZpbGUnKToKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRtcGZpbGUiLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgZnAgPSBwb3NpeC50bXBmaWxlKCkKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF91dGltZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3V0aW1lJyk6CisgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgcG9zaXgudXRpbWUodGVzdF9zdXBwb3J0LlRFU1RGTiwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgudXRpbWUsIHRlc3Rfc3VwcG9ydC5URVNURk4sIChOb25lLCBOb25lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgudXRpbWUsIHRlc3Rfc3VwcG9ydC5URVNURk4sIChub3csIE5vbmUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC51dGltZSwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgKE5vbmUsIG5vdykpCisgICAgICAgICAgICBwb3NpeC51dGltZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAoaW50KG5vdyksIGludChub3cpKSkKKyAgICAgICAgICAgIHBvc2l4LnV0aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4sIChub3csIG5vdykpCisKKyAgICBkZWYgX3Rlc3RfY2hmbGFnc19yZWd1bGFyX2ZpbGUoc2VsZiwgY2hmbGFnc19mdW5jLCB0YXJnZXRfZmlsZSk6CisgICAgICAgIHN0ID0gb3Muc3RhdCh0YXJnZXRfZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3QsICdzdF9mbGFncycpKQorCisgICAgICAgICMgWkZTIHJldHVybnMgRU9QTk9UU1VQUCB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IGZsYWcgVUZfSU1NVVRBQkxFLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjaGZsYWdzX2Z1bmModGFyZ2V0X2ZpbGUsIHN0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGlmIGVyci5lcnJubyAhPSBlcnJuby5FT1BOT1RTVVBQOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBtc2cgPSAnY2hmbGFnIFVGX0lNTVVUQUJMRSBub3Qgc3VwcG9ydGVkIGJ5IHVuZGVybHlpbmcgZnMnCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KG1zZykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXdfc3QgPSBvcy5zdGF0KHRhcmdldF9maWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdC5zdF9mbGFncyB8IHN0YXQuVUZfSU1NVVRBQkxFLCBuZXdfc3Quc3RfZmxhZ3MpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmQgPSBvcGVuKHRhcmdldF9maWxlLCAndysnKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcG9zaXguY2hmbGFncyh0YXJnZXRfZmlsZSwgc3Quc3RfZmxhZ3MpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnY2hmbGFncycpLCAndGVzdCBuZWVkcyBvcy5jaGZsYWdzKCknKQorICAgIGRlZiB0ZXN0X2NoZmxhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2hmbGFnc19yZWd1bGFyX2ZpbGUocG9zaXguY2hmbGFncywgdGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdsY2hmbGFncycpLCAndGVzdCBuZWVkcyBvcy5sY2hmbGFncygpJykKKyAgICBkZWYgdGVzdF9sY2hmbGFnc19yZWd1bGFyX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2hmbGFnc19yZWd1bGFyX2ZpbGUocG9zaXgubGNoZmxhZ3MsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnbGNoZmxhZ3MnKSwgJ3Rlc3QgbmVlZHMgb3MubGNoZmxhZ3MoKScpCisgICAgZGVmIHRlc3RfbGNoZmxhZ3Nfc3ltbGluayhzZWxmKToKKyAgICAgICAgdGVzdGZuX3N0ID0gb3Muc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHRlc3Rmbl9zdCwgJ3N0X2ZsYWdzJykpCisKKyAgICAgICAgb3Muc3ltbGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBfRFVNTVlfU1lNTElOSykKKyAgICAgICAgc2VsZi50ZWFyZG93bl9maWxlcy5hcHBlbmQoX0RVTU1ZX1NZTUxJTkspCisgICAgICAgIGR1bW15X3N5bWxpbmtfc3QgPSBvcy5sc3RhdChfRFVNTVlfU1lNTElOSykKKworICAgICAgICAjIFpGUyByZXR1cm5zIEVPUE5PVFNVUFAgd2hlbiBhdHRlbXB0aW5nIHRvIHNldCBmbGFnIFVGX0lNTVVUQUJMRS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcG9zaXgubGNoZmxhZ3MoX0RVTU1ZX1NZTUxJTkssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teV9zeW1saW5rX3N0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGlmIGVyci5lcnJubyAhPSBlcnJuby5FT1BOT1RTVVBQOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBtc2cgPSAnY2hmbGFnIFVGX0lNTVVUQUJMRSBub3Qgc3VwcG9ydGVkIGJ5IHVuZGVybHlpbmcgZnMnCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KG1zZykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXdfdGVzdGZuX3N0ID0gb3Muc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgbmV3X2R1bW15X3N5bWxpbmtfc3QgPSBvcy5sc3RhdChfRFVNTVlfU1lNTElOSykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Zm5fc3Quc3RfZmxhZ3MsIG5ld190ZXN0Zm5fc3Quc3RfZmxhZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1bW15X3N5bWxpbmtfc3Quc3RfZmxhZ3MgfCBzdGF0LlVGX0lNTVVUQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2R1bW15X3N5bWxpbmtfc3Quc3RfZmxhZ3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBwb3NpeC5sY2hmbGFncyhfRFVNTVlfU1lNTElOSywgZHVtbXlfc3ltbGlua19zdC5zdF9mbGFncykKKworICAgIGRlZiB0ZXN0X2dldGN3ZF9sb25nX3BhdGhuYW1lcyhzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2dldGN3ZCcpOgorICAgICAgICAgICAgZGlybmFtZSA9ICdnZXRjd2QtdGVzdC1kaXJlY3RvcnktMDEyMzQ1Njc4OWFiY2RlZi0wMTIzNDU2Nzg5MGFiY2RlZicKKyAgICAgICAgICAgIGN1cmRpciA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBiYXNlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgodGVzdF9zdXBwb3J0LlRFU1RGTikgKyAnLmdldGN3ZCcKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihiYXNlX3BhdGgpCisgICAgICAgICAgICBleGNlcHQ6CisjICAgICAgICAgICAgICAgSnVzdCByZXR1cm5pbmcgbm90aGluZyBpbnN0ZWFkIG9mIHRoZSBTa2lwVGVzdCBleGNlcHRpb24sCisjICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUgdGVzdCByZXN1bHRzIGluIEVycm9yIGluIHRoYXQgY2FzZS4KKyMgICAgICAgICAgICAgICBJcyB0aGF0IG9rPworIyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciB0ZXN0aW5nIgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVmIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoID0gMCk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRpcm5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAibWtkaXIgY2Fubm90IGNyZWF0ZSBkaXJlY3Rvcnkgc3VmZmljaWVudGx5IGRlZXAgZm9yIGdldGN3ZCB0ZXN0IgorCisgICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmdldGN3ZCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BhdGhfbGVuZ3RoIDwgNDA5OToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9lcnJubyA9IGVycm5vLkVOQU1FVE9PTE9ORworICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgZm9sbG93aW5nIHBsYXRmb3JtcyBoYXZlIHF1aXJreSBnZXRjd2QoKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWhhdmlvdXIgLS0gc2VlIGlzc3VlIDkxODUgYW5kIDE1NzY1IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgIyBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgcXVpcmt5X3BsYXRmb3JtID0gKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdW5vcycgaW4gc3lzLnBsYXRmb3JtIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldGJzZCcgaW4gc3lzLnBsYXRmb3JtIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wZW5ic2QnIGluIHN5cy5wbGF0Zm9ybQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcXVpcmt5X3BsYXRmb3JtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2Vycm5vID0gZXJybm8uRVJBTkdFCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGV4cGVjdGVkX2Vycm5vKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGRpcm5hbWUpCisKKyAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSkKKworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihjdXJkaXIpCisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShiYXNlX3BhdGgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZ2V0ZWdpZCcpLCAidGVzdCBuZWVkcyBvcy5nZXRlZ2lkKCkiKQorICAgIGRlZiB0ZXN0X2dldGdyb3VwcyhzZWxmKToKKyAgICAgICAgd2l0aCBvcy5wb3BlbignaWQgLUcnKSBhcyBpZGc6CisgICAgICAgICAgICBncm91cHMgPSBpZGcucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIHJldCA9IGlkZy5jbG9zZSgpCisKKyAgICAgICAgaWYgcmV0ICE9IE5vbmUgb3Igbm90IGdyb3VwczoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIHdvcmtpbmcgJ2lkIC1HJyIpCisKKyAgICAgICAgIyBJc3N1ZXMgMTY2OTg6IE9TIFggQUJJcyBwcmlvciB0byAxMC42IGhhdmUgbGltaXRzIG9uIGdldGdyb3VwcygpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIGltcG9ydCBzeXNjb25maWcKKyAgICAgICAgICAgIGR0ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnKSBvciAnMTAuMCcKKyAgICAgICAgICAgIGlmIGZsb2F0KGR0KSA8IDEwLjY6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImdldGdyb3VwcygyKSBpcyBicm9rZW4gcHJpb3IgdG8gMTAuNiIpCisKKyAgICAgICAgIyAnaWQgLUcnIGFuZCAnb3MuZ2V0Z3JvdXBzKCknIHNob3VsZCByZXR1cm4gdGhlIHNhbWUKKyAgICAgICAgIyBncm91cHMsIGlnbm9yaW5nIG9yZGVyIGFuZCBkdXBsaWNhdGVzLgorICAgICAgICAjICMxMDgyMiAtIGl0IGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgd2hldGhlciBwb3NpeC5nZXRncm91cHMoKQorICAgICAgICAjIGluY2x1ZGVzIHRoZSBlZmZlY3RpdmUgZ2lkIHNvIHdlIGluY2x1ZGUgaXQgYW55d2F5LCBzaW5jZSBpZCAtRyBkb2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc2V0KFtpbnQoeCkgZm9yIHggaW4gZ3JvdXBzLnNwbGl0KCldKSwKKyAgICAgICAgICAgICAgICBzZXQocG9zaXguZ2V0Z3JvdXBzKCkgKyBbcG9zaXguZ2V0ZWdpZCgpXSkpCisKK2NsYXNzIFBvc2l4R3JvdXBzVGVzdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgcG9zaXguZ2V0dWlkKCkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJub3QgZW5vdWdoIHByaXZpbGVnZXMiKQorICAgICAgICBpZiBub3QgaGFzYXR0cihwb3NpeCwgJ2dldGdyb3VwcycpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm5lZWQgcG9zaXguZ2V0Z3JvdXBzIikKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImdldGdyb3VwcygyKSBpcyBicm9rZW4gb24gT1NYIikKKyAgICAgICAgc2VsZi5zYXZlZF9ncm91cHMgPSBwb3NpeC5nZXRncm91cHMoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc2V0Z3JvdXBzJyk6CisgICAgICAgICAgICBwb3NpeC5zZXRncm91cHMoc2VsZi5zYXZlZF9ncm91cHMpCisgICAgICAgIGVsaWYgaGFzYXR0cihwb3NpeCwgJ2luaXRncm91cHMnKToKKyAgICAgICAgICAgIG5hbWUgPSBwd2QuZ2V0cHd1aWQocG9zaXguZ2V0dWlkKCkpLnB3X25hbWUKKyAgICAgICAgICAgIHBvc2l4LmluaXRncm91cHMobmFtZSwgc2VsZi5zYXZlZF9ncm91cHNbMF0pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnaW5pdGdyb3VwcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IG5lZWRzIHBvc2l4LmluaXRncm91cHMoKSIpCisgICAgZGVmIHRlc3RfaW5pdGdyb3VwcyhzZWxmKToKKyAgICAgICAgIyBmaW5kIG1pc3NpbmcgZ3JvdXAKKworICAgICAgICBnID0gbWF4KHNlbGYuc2F2ZWRfZ3JvdXBzKSArIDEKKyAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZChwb3NpeC5nZXR1aWQoKSkucHdfbmFtZQorICAgICAgICBwb3NpeC5pbml0Z3JvdXBzKG5hbWUsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZywgcG9zaXguZ2V0Z3JvdXBzKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnc2V0Z3JvdXBzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgbmVlZHMgcG9zaXguc2V0Z3JvdXBzKCkiKQorICAgIGRlZiB0ZXN0X3NldGdyb3VwcyhzZWxmKToKKyAgICAgICAgZm9yIGdyb3VwcyBpbiBbWzBdLCByYW5nZSgxNildOgorICAgICAgICAgICAgcG9zaXguc2V0Z3JvdXBzKGdyb3VwcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGdyb3VwcywgcG9zaXguZ2V0Z3JvdXBzKCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUG9zaXhUZXN0ZXIsIFBvc2l4R3JvdXBzVGVzdGVyKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0ZGMxNAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQpAQCAtMCwwICsxLDQyMyBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgdGVzdF9nZW5lcmljcGF0aAorCitpbXBvcnQgcG9zaXhwYXRoLCBvcworZnJvbSBwb3NpeHBhdGggaW1wb3J0IHJlYWxwYXRoLCBhYnNwYXRoLCBkaXJuYW1lLCBiYXNlbmFtZQorCisjIEFuIGFic29sdXRlIHBhdGggdG8gYSB0ZW1wb3JhcnkgZmlsZW5hbWUgZm9yIHRlc3RpbmcuIFdlIGNhbid0IHJlbHkgb24gVEVTVEZOCisjIGJlaW5nIGFuIGFic29sdXRlIHBhdGgsIHNvIHdlIG5lZWQgdGhpcy4KKworQUJTVEZOID0gYWJzcGF0aCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCitkZWYgc2tpcF9pZl9BQlNURk5fY29udGFpbnNfYmFja3NsYXNoKHRlc3QpOgorICAgICIiIgorICAgIE9uIFdpbmRvd3MsIHBvc2l4cGF0aC5hYnNwYXRoIHN0aWxsIHJldHVybnMgcGF0aHMgd2l0aCBiYWNrc2xhc2hlcworICAgIGluc3RlYWQgb2YgcG9zaXggZm9yd2FyZCBzbGFzaGVzLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBzZXZlcmFsIHRlc3RzCisgICAgZmFpbCwgc28gc2tpcCB0aGVtLgorICAgICIiIgorICAgIGZvdW5kX2JhY2tzbGFzaCA9ICdcXCcgaW4gQUJTVEZOCisgICAgbXNnID0gIkFCU1RGTiBpcyBub3QgYSBwb3NpeCBwYXRoIC0gdGVzdHMgZmFpbCIKKyAgICByZXR1cm4gW3Rlc3QsIHVuaXR0ZXN0LnNraXAobXNnKSh0ZXN0KV1bZm91bmRfYmFja3NsYXNoXQorCitkZWYgc2FmZV9ybWRpcihkaXJuYW1lKToKKyAgICB0cnk6CisgICAgICAgIG9zLnJtZGlyKGRpcm5hbWUpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHBhc3MKKworY2xhc3MgUG9zaXhQYXRoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGVhckRvd24oKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igc3VmZml4IGluIFsiIiwgIjEiLCAiMiJdOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgc3VmZml4KQorICAgICAgICAgICAgc2FmZV9ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOICsgc3VmZml4KQorCisgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguam9pbigiL2ZvbyIsICJiYXIiLCAiL2JhciIsICJiYXoiKSwgIi9iYXIvYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguam9pbigiL2ZvbyIsICJiYXIiLCAiYmF6IiksICIvZm9vL2Jhci9iYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5qb2luKCIvZm9vLyIsICJiYXIvIiwgImJhei8iKSwgIi9mb28vYmFyL2Jhei8iKQorCisgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnNwbGl0KCIvZm9vL2JhciIpLCAoIi9mb28iLCAiYmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnNwbGl0KCIvIiksICgiLyIsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoImZvbyIpLCAoIiIsICJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi8vLy9mb28iKSwgKCIvLy8vIiwgImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdCgiLy9mb28vL2JhciIpLCAoIi8vZm9vIiwgImJhciIpKQorCisgICAgZGVmIHNwbGl0ZXh0VGVzdChzZWxmLCBwYXRoLCBmaWxlbmFtZSwgZXh0KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXRleHQocGF0aCksIChmaWxlbmFtZSwgZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXRleHQoIi8iICsgcGF0aCksICgiLyIgKyBmaWxlbmFtZSwgZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXRleHQoImFiYy8iICsgcGF0aCksICgiYWJjLyIgKyBmaWxlbmFtZSwgZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXRleHQoImFiYy5kZWYvIiArIHBhdGgpLCAoImFiYy5kZWYvIiArIGZpbGVuYW1lLCBleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dCgiL2FiYy5kZWYvIiArIHBhdGgpLCAoIi9hYmMuZGVmLyIgKyBmaWxlbmFtZSwgZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXRleHQocGF0aCArICIvIiksIChmaWxlbmFtZSArIGV4dCArICIvIiwgIiIpKQorCisgICAgZGVmIHRlc3Rfc3BsaXRleHQoc2VsZik6CisgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCJmb28uYmFyIiwgImZvbyIsICIuYmFyIikKKyAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoImZvby5ib28uYmFyIiwgImZvby5ib28iLCAiLmJhciIpCisgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCJmb28uYm9vLmJpZmYuYmFyIiwgImZvby5ib28uYmlmZiIsICIuYmFyIikKKyAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoIi5jc2gucmMiLCAiLmNzaCIsICIucmMiKQorICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgibm9kb3RzIiwgIm5vZG90cyIsICIiKQorICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiLmNzaHJjIiwgIi5jc2hyYyIsICIiKQorICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiLi4ubWFueWRvdHMiLCAiLi4ubWFueWRvdHMiLCAiIikKKyAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoIi4uLm1hbnlkb3RzLmV4dCIsICIuLi5tYW55ZG90cyIsICIuZXh0IikKKyAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoIi4iLCAiLiIsICIiKQorICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiLi4iLCAiLi4iLCAiIikKKyAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoIi4uLi4uLi4uIiwgIi4uLi4uLi4uIiwgIiIpCisgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCIiLCAiIiwgIiIpCisKKyAgICBkZWYgdGVzdF9pc2FicyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNhYnMoIiIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNhYnMoIi8iKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNhYnMoIi9mb28iKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNhYnMoIi9mb28vYmFyIiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzYWJzKCJmb28vYmFyIiksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYmFzZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmJhc2VuYW1lKCIvZm9vL2JhciIpLCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguYmFzZW5hbWUoIi8iKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmJhc2VuYW1lKCJmb28iKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmJhc2VuYW1lKCIvLy8vZm9vIiksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5iYXNlbmFtZSgiLy9mb28vL2JhciIpLCAiYmFyIikKKworICAgIGRlZiB0ZXN0X2Rpcm5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmRpcm5hbWUoIi9mb28vYmFyIiksICIvZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZGlybmFtZSgiLyIpLCAiLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmRpcm5hbWUoImZvbyIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZGlybmFtZSgiLy8vL2ZvbyIpLCAiLy8vLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmRpcm5hbWUoIi8vZm9vLy9iYXIiKSwgIi8vZm9vIikKKworICAgIGRlZiB0ZXN0X2lzbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNsaW5rKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIpLCBGYWxzZSkKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNsaW5rKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIpLCBGYWxzZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLCB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzbGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2xpbmsodGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIiksIFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIpLCBGYWxzZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5sZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIpLCBUcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NhbWVmaWxlKHNlbGYpOgorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJmb28iKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKAorICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5zYW1lZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgVHJ1ZQorICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIElmIHdlIGRvbid0IGhhdmUgbGlua3MsIGFzc3VtZSB0aGF0IG9zLnN0YXQgZG9lc24ndCByZXR1cm4KKyAgICAgICAgICAgICMgcmVhc29uYWJsZSBpbm9kZSBpbmZvcm1hdGlvbiBhbmQgdGh1cywgdGhhdCBzYW1lZmlsZSgpIGRvZXNuJ3QKKyAgICAgICAgICAgICMgd29yay4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluaygKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAorICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguc2FtZWZpbGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBUcnVlCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIsICJ3YiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiYmFyIikKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAorICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguc2FtZWZpbGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBGYWxzZQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zYW1lc3RhdChzZWxmKToKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcygKKyAgICAgICAgICAgICAgICBwb3NpeHBhdGguc2FtZXN0YXQoCisgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiksCisgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIikKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIFRydWUKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBsaW5rcywgYXNzdW1lIHRoYXQgb3Muc3RhdCgpIGRvZXNuJ3QgcmV0dXJuCisgICAgICAgICAgICAjIHJlYXNvbmFibGUgaW5vZGUgaW5mb3JtYXRpb24gYW5kIHRodXMsIHRoYXQgc2FtZXN0YXQoKSBkb2Vzbid0CisgICAgICAgICAgICAjIHdvcmsuCisgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiwgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAorICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguc2FtZXN0YXQoCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKQorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBUcnVlCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIsICJ3YiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiYmFyIikKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAorICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguc2FtZXN0YXQoCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKQorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICBGYWxzZQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9pc21vdW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc21vdW50KCIvIiksIFRydWUpCisKKyAgICBkZWYgdGVzdF9leHBhbmR1c2VyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJmb28iKSwgImZvbyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBwd2QKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+LyIpLCBiYXNlc3RyaW5nKQorICAgICAgICAgICAgIyBpZiBob21lIGRpcmVjdG9yeSA9PSByb290IGRpcmVjdG9yeSwgdGhpcyB0ZXN0IG1ha2VzIG5vIHNlbnNlCisgICAgICAgICAgICBpZiBwb3NpeHBhdGguZXhwYW5kdXNlcigifiIpICE9ICcvJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguZXhwYW5kdXNlcigifiIpICsgIi8iLAorICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguZXhwYW5kdXNlcigifi8iKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcigifnJvb3QvIiksIGJhc2VzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn5mb28vIiksIGJhc2VzdHJpbmcpCisKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICAgICAgZW52WydIT01FJ10gPSAnLycKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+IiksICIvIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+L2ZvbyIpLCAiL2ZvbyIpCisKKyAgICBkZWYgdGVzdF9ub3JtcGF0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgubm9ybXBhdGgoIiIpLCAiLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLm5vcm1wYXRoKCIvIiksICIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgubm9ybXBhdGgoIi8vIiksICIvLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLm5vcm1wYXRoKCIvLy8iKSwgIi8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5ub3JtcGF0aCgiLy8vZm9vLy4vL2Jhci8vIiksICIvZm9vL2JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLm5vcm1wYXRoKCIvLy9mb28vLi8vYmFyLy8uLy8uLi8vLi8vYmF6IiksICIvZm9vL2JheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLm5vcm1wYXRoKCIvLy8uLi8vLi9mb28vLi8vYmFyIiksICIvZm9vL2JhciIpCisKKyAgICBAc2tpcF9pZl9BQlNURk5fY29udGFpbnNfYmFja3NsYXNoCisgICAgZGVmIHRlc3RfcmVhbHBhdGhfY3VyZGlyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKCcuJyksIG9zLmdldGN3ZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKCcuLy4nKSwgb3MuZ2V0Y3dkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoJy8nLmpvaW4oWycuJ10gKiAxMDApKSwgb3MuZ2V0Y3dkKCkpCisKKyAgICBAc2tpcF9pZl9BQlNURk5fY29udGFpbnNfYmFja3NsYXNoCisgICAgZGVmIHRlc3RfcmVhbHBhdGhfcGFyZGlyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKCcuLicpLCBkaXJuYW1lKG9zLmdldGN3ZCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aCgnLi4vLi4nKSwgZGlybmFtZShkaXJuYW1lKG9zLmdldGN3ZCgpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoJy8nLmpvaW4oWycuLiddICogMTAwKSksICcvJykKKworICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CisgICAgICAgIGRlZiB0ZXN0X3JlYWxwYXRoX2Jhc2ljKHNlbGYpOgorICAgICAgICAgICAgIyBCYXNpYyBvcGVyYXRpb24uCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4rIjEiLCBBQlNURk4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4pLCBBQlNURk4rIjEiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTikKKworICAgICAgICBkZWYgdGVzdF9yZWFscGF0aF9zeW1saW5rX2xvb3BzKHNlbGYpOgorICAgICAgICAgICAgIyBCdWcgIzkzMDAyNCwgcmV0dXJuIHRoZSBwYXRoIHVuY2hhbmdlZCBpZiB3ZSBnZXQgaW50byBhbiBpbmZpbml0ZQorICAgICAgICAgICAgIyBzeW1saW5rIGxvb3AuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb2xkX3BhdGggPSBhYnNwYXRoKCcuJykKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTiwgQUJTVEZOKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKSwgQUJTVEZOKQorCisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4rIjEiLCBBQlNURk4rIjIiKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOKyIyIiwgQUJTVEZOKyIxIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTisiMSIpLCBBQlNURk4rIjEiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKyIyIiksIEFCU1RGTisiMiIpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTisiMS94IiksIEFCU1RGTisiMS94IikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTisiMS8uLiIpLCBkaXJuYW1lKEFCU1RGTikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4rIjEvLi4veCIpLCBkaXJuYW1lKEFCU1RGTikgKyAiL3giKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOKyJ4IiwgQUJTVEZOKyJ5IikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTisiMS8uLi8iICsgYmFzZW5hbWUoQUJTVEZOKSArICJ5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCU1RGTiArICJ5IikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTisiMS8uLi8iICsgYmFzZW5hbWUoQUJTVEZOKSArICIxIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCU1RGTiArICIxIikKKworICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoYmFzZW5hbWUoQUJTVEZOKSArICJhL2IiLCBBQlNURk4rImEiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKyJhIiksIEFCU1RGTisiYS9iIikKKworICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoIi4uLyIgKyBiYXNlbmFtZShkaXJuYW1lKEFCU1RGTikpICsgIi8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKEFCU1RGTikgKyAiYyIsIEFCU1RGTisiYyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4rImMiKSwgQUJTVEZOKyJjIikKKworICAgICAgICAgICAgICAgICMgVGVzdCB1c2luZyByZWxhdGl2ZSBwYXRoIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgb3MuY2hkaXIoZGlybmFtZShBQlNURk4pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSksIEFCU1RGTikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhBQlNURk4pCisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhBQlNURk4rIjEiKQorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoQUJTVEZOKyIyIikKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTisieSIpCisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhBQlNURk4rImMiKQorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoQUJTVEZOKyJhIikKKworICAgICAgICBkZWYgdGVzdF9yZWFscGF0aF9yZXBlYXRlZF9pbmRpcmVjdF9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgICAgICMgSXNzdWUgIzY5NzUuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoJy4uLycgKyBiYXNlbmFtZShBQlNURk4pLCBBQlNURk4gKyAnL3NlbGYnKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoJ3NlbGYvc2VsZi9zZWxmJywgQUJTVEZOICsgJy9saW5rJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiArICcvbGluaycpLCBBQlNURk4pCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoQUJTVEZOICsgJy9zZWxmJykKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTiArICcvbGluaycpCisgICAgICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCisKKyAgICAgICAgZGVmIHRlc3RfcmVhbHBhdGhfZGVlcF9yZWN1cnNpb24oc2VsZik6CisgICAgICAgICAgICBkZXB0aCA9IDEwCisgICAgICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTikKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShkZXB0aCk6CisgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoJy8nLmpvaW4oWyclZCcgJSBpXSAqIDEwKSwgQUJTVEZOICsgJy8lZCcgJSAoaSArIDEpKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoJy4nLCBBQlNURk4gKyAnLzAnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOICsgJy8lZCcgJSBkZXB0aCksIEFCU1RGTikKKworICAgICAgICAgICAgICAgICMgVGVzdCB1c2luZyByZWxhdGl2ZSBwYXRoIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgb3MuY2hkaXIoQUJTVEZOKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoJyVkJyAlIGRlcHRoKSwgQUJTVEZOKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShkZXB0aCArIDEpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTiArICcvJWQnICUgaSkKKyAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTikKKworICAgICAgICBkZWYgdGVzdF9yZWFscGF0aF9yZXNvbHZlX3BhcmVudHMoc2VsZik6CisgICAgICAgICAgICAjIFdlIGFsc28gbmVlZCB0byByZXNvbHZlIGFueSBzeW1saW5rcyBpbiB0aGUgcGFyZW50cyBvZiBhIHJlbGF0aXZlCisgICAgICAgICAgICAjIHBhdGggcGFzc2VkIHRvIHJlYWxwYXRoLiBFLmcuOiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzCisgICAgICAgICAgICAjIC91c3IvZG9jIHdpdGggJ2RvYycgYmVpbmcgYSBzeW1saW5rIHRvIC91c3Ivc2hhcmUvZG9jLiBXZSBjYWxsCisgICAgICAgICAgICAjIHJlYWxwYXRoKCJhIikuIFRoaXMgc2hvdWxkIHJldHVybiAvdXNyL3NoYXJlL2RvYy9hLy4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTikKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4gKyAiL3kiKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOICsgIi95IiwgQUJTVEZOICsgIi9rIikKKworICAgICAgICAgICAgICAgIG9zLmNoZGlyKEFCU1RGTiArICIvayIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aCgiYSIpLCBBQlNURk4gKyAiL3kvYSIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9wYXRoKQorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIveSIpCisgICAgICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCisKKyAgICAgICAgZGVmIHRlc3RfcmVhbHBhdGhfcmVzb2x2ZV9iZWZvcmVfbm9ybWFsaXppbmcoc2VsZik6CisgICAgICAgICAgICAjIEJ1ZyAjOTkwNjY5OiBTeW1ib2xpYyBsaW5rcyBzaG91bGQgYmUgcmVzb2x2ZWQgYmVmb3JlIHdlCisgICAgICAgICAgICAjIG5vcm1hbGl6ZSB0aGUgcGF0aC4gRS5nLjogaWYgd2UgaGF2ZSBkaXJlY3RvcmllcyAnYScsICdrJyBhbmQgJ3knCisgICAgICAgICAgICAjIGluIHRoZSBmb2xsb3dpbmcgaGllcmFyY2h5OgorICAgICAgICAgICAgIyBhL2sveQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBhbmQgYSBzeW1ib2xpYyBsaW5rICdsaW5rLXknIHBvaW50aW5nIHRvICd5JyBpbiBkaXJlY3RvcnkgJ2EnLAorICAgICAgICAgICAgIyB0aGVuIHJlYWxwYXRoKCJsaW5rLXkvLi4iKSBzaG91bGQgcmV0dXJuICdrJywgbm90ICdhJy4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTikKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTiArICIvay95IikKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTiArICIvay95IiwgQUJTVEZOICsgIi9saW5rLXkiKQorCisgICAgICAgICAgICAgICAgIyBBYnNvbHV0ZSBwYXRoLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOICsgIi9saW5rLXkvLi4iKSwgQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgICAgICAjIFJlbGF0aXZlIHBhdGguCisgICAgICAgICAgICAgICAgb3MuY2hkaXIoZGlybmFtZShBQlNURk4pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSArICIvbGluay15Ly4uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTiArICIvbGluay15IikKKyAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIvay95IikKKyAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIvayIpCisgICAgICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCisKKyAgICAgICAgZGVmIHRlc3RfcmVhbHBhdGhfcmVzb2x2ZV9maXJzdChzZWxmKToKKyAgICAgICAgICAgICMgQnVnICMxMjEzODk0OiBUaGUgZmlyc3QgY29tcG9uZW50IG9mIHRoZSBwYXRoLCBpZiBub3QgYWJzb2x1dGUsCisgICAgICAgICAgICAjIG11c3QgYmUgcmVzb2x2ZWQgdG9vLgorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb2xkX3BhdGggPSBhYnNwYXRoKCcuJykKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4pCisgICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTiwgQUJTVEZOICsgImxpbmsiKQorICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKKworICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlbmFtZShBQlNURk4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlICsgImxpbmsiKSwgQUJTVEZOKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZSArICJsaW5rL2siKSwgQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhBQlNURk4gKyAibGluayIpCisgICAgICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOKQorCisgICAgZGVmIHRlc3RfcmVscGF0aChzZWxmKToKKyAgICAgICAgKHJlYWxfZ2V0Y3dkLCBvcy5nZXRjd2QpID0gKG9zLmdldGN3ZCwgbGFtYmRhOiByIi9ob21lL3VzZXIvYmFyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyZGlyID0gb3MucGF0aC5zcGxpdChvcy5nZXRjd2QoKSlbLTFdCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3NpeHBhdGgucmVscGF0aCwgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCJhIiksICJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgocG9zaXhwYXRoLmFic3BhdGgoImEiKSksICJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoImEvYiIpLCAiYS9iIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi4uL2EvYiIpLCAiLi4vYS9iIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoImEiLCAiLi4vYiIpLCAiLi4vIitjdXJkaXIrIi9hIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoImEvYiIsICIuLi9jIiksICIuLi8iK2N1cmRpcisiL2EvYiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCJhIiwgImIvYyIpLCAiLi4vLi4vYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCJhIiwgImEiKSwgIi4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi94L3kveiIpLCAnLi4vLi4vLi4vZm9vL2Jhci9iYXQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi9mb28vYmFyIiksICdiYXQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi8iKSwgJ2Zvby9iYXIvYmF0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi8iLCAiL2Zvby9iYXIvYmF0IiksICcuLi8uLi8uLicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiL3giKSwgJy4uL2Zvby9iYXIvYmF0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi94IiwgIi9mb28vYmFyL2JhdCIpLCAnLi4vLi4vLi4veCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvIiwgIi8iKSwgJy4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiL2EiLCAiL2EiKSwgJy4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiL2EvYiIsICIvYS9iIiksICcuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmdldGN3ZCA9IHJlYWxfZ2V0Y3dkCisKKworY2xhc3MgUG9zaXhDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCk6CisgICAgcGF0aG1vZHVsZSA9IHBvc2l4cGF0aAorICAgIGF0dHJpYnV0ZXMgPSBbJ3JlbHBhdGgnLCAnc2FtZWZpbGUnLCAnc2FtZW9wZW5maWxlJywgJ3NhbWVzdGF0J10KKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQb3NpeFBhdGhUZXN0LCBQb3NpeENvbW1vblRlc3QpCisKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Bvdy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Bvdy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU2N2JjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcG93LnB5CkBAIC0wLDAgKzEsMTI5IEBACitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQsIHVuaXR0ZXN0CisKK2NsYXNzIFBvd1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHBvd3Rlc3Qoc2VsZiwgdHlwZSk6CisgICAgICAgIGlmIHR5cGUgIT0gZmxvYXQ6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgtMTAwMCwgMTAwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3codHlwZShpKSwgMCksIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3codHlwZShpKSwgMSksIHR5cGUoaSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3codHlwZSgwKSwgMSksIHR5cGUoMCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3codHlwZSgxKSwgMSksIHR5cGUoMSkpCisKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKC0xMDAsIDEwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3codHlwZShpKSwgMyksIGkqaSppKQorCisgICAgICAgICAgICBwb3cyID0gMQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwzMSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMiwgaSksIHBvdzIpCisgICAgICAgICAgICAgICAgaWYgaSAhPSAzMCA6IHBvdzIgPSBwb3cyKjIKKworICAgICAgICAgICAgZm9yIG90aGVydHlwZSBpbiBpbnQsIGxvbmc6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEwLCAwKSArIHJhbmdlKDEsIDEwKToKKyAgICAgICAgICAgICAgICAgICAgaWkgPSB0eXBlKGkpCisgICAgICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKDEsIDExKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGpqID0gLW90aGVydHlwZShqKQorICAgICAgICAgICAgICAgICAgICAgICAgcG93KGlpLCBqaikKKworICAgICAgICBmb3Igb3RoZXJ0eXBlIGluIGludCwgbG9uZywgZmxvYXQ6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMDApOgorICAgICAgICAgICAgICAgIHplcm8gPSB0eXBlKDApCisgICAgICAgICAgICAgICAgZXhwID0gLW90aGVydHlwZShpLzEwLjApCisgICAgICAgICAgICAgICAgaWYgZXhwID09IDA6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvdywgemVybywgZXhwKQorCisgICAgICAgIGlsLCBpaCA9IC0yMCwgMjAKKyAgICAgICAgamwsIGpoID0gLTUsICAgNQorICAgICAgICBrbCwga2ggPSAtMTAsIDEwCisgICAgICAgIGFzc2VxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBpZiB0eXBlID09IGZsb2F0OgorICAgICAgICAgICAgaWwgPSAxCisgICAgICAgICAgICBhc3NlcSA9IHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwKKyAgICAgICAgZWxpZiB0eXBlID09IGludDoKKyAgICAgICAgICAgIGpsID0gMAorICAgICAgICBlbGlmIHR5cGUgPT0gbG9uZzoKKyAgICAgICAgICAgIGpsLCBqaCA9IDAsIDE1CisgICAgICAgIGZvciBpIGluIHJhbmdlKGlsLCBpaCsxKToKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGpsLCBqaCsxKToKKyAgICAgICAgICAgICAgICBmb3IgayBpbiByYW5nZShrbCwga2grMSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGsgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUgPT0gZmxvYXQgb3IgaiA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3csIHR5cGUoaSksIGosIGspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VxKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdyh0eXBlKGkpLGosayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KHR5cGUoaSksaiklIHR5cGUoaykKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3Bvd2ludChzZWxmKToKKyAgICAgICAgc2VsZi5wb3d0ZXN0KGludCkKKworICAgIGRlZiB0ZXN0X3Bvd2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYucG93dGVzdChsb25nKQorCisgICAgZGVmIHRlc3RfcG93ZmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYucG93dGVzdChmbG9hdCkKKworICAgIGRlZiB0ZXN0X290aGVyKHNlbGYpOgorICAgICAgICAjIE90aGVyIHRlc3RzLS0gbm90IHZlcnkgc3lzdGVtYXRpYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzLDMpICUgOCwgcG93KDMsMyw4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMywzKSAlIC04LCBwb3coMywzLC04KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMywyKSAlIC0yLCBwb3coMywyLC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTMsMykgJSA4LCBwb3coLTMsMyw4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTMsMykgJSAtOCwgcG93KC0zLDMsLTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyg1LDIpICUgLTgsIHBvdyg1LDIsLTgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDNMLDNMKSAlIDgsIHBvdygzTCwzTCw4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coM0wsM0wpICUgLTgsIHBvdygzTCwzTCwtOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDNMLDIpICUgLTIsIHBvdygzTCwyLC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTNMLDNMKSAlIDgsIHBvdygtM0wsM0wsOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0zTCwzTCkgJSAtOCwgcG93KC0zTCwzTCwtOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDVMLDIpICUgLTgsIHBvdyg1TCwyLC04KSkKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgtMTAsIDExKToKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKDAsIDYpOgorICAgICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKC03LCAxMSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGogPj0gMCBhbmQgayAhPSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3coaSxqKSAlIGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KGksaixrKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICBpZiBqID49IDAgYW5kIGsgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KGxvbmcoaSksaikgJSBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdyhsb25nKGkpLGosaykKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2J1ZzY0MzI2MChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdFJwb3c6CisgICAgICAgICAgICBkZWYgX19ycG93X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIE5vbmUgKiogVGVzdFJwb3coKSAjIFdvbid0IGZhaWwgd2hlbiBfX3Jwb3dfXyBpbnZva2VkLiAgU0YgYnVnICM2NDMyNjAuCisKKyAgICBkZWYgdGVzdF9idWc3MDUyMzEoc2VsZik6CisgICAgICAgICMgLTEuMCByYWlzZWQgdG8gYW4gaW50ZWdlciBzaG91bGQgbmV2ZXIgYmxvdyB1cC4gIEl0IGRpZCBpZiB0aGUKKyAgICAgICAgIyBwbGF0Zm9ybSBwb3coKSB3YXMgYnVnZ3ksIGFuZCBQeXRob24gZGlkbid0IHdvcm0gYXJvdW5kIGl0LgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYSA9IC0xLjAKKyAgICAgICAgIyBUaGUgbmV4dCB0d28gdGVzdHMgY2FuIHN0aWxsIGZhaWwgaWYgdGhlIHBsYXRmb3JtIGZsb29yKCkKKyAgICAgICAgIyBmdW5jdGlvbiBkb2Vzbid0IHRyZWF0IGFsbCBsYXJnZSBpbnB1dHMgYXMgaW50ZWdlcnMKKyAgICAgICAgIyB0ZXN0X21hdGggc2hvdWxkIGFsc28gZmFpbCBpZiB0aGF0IGlzIGhhcHBlbmluZworICAgICAgICBlcShwb3coYSwgMS4yM2UxNjcpLCAxLjApCisgICAgICAgIGVxKHBvdyhhLCAtMS4yM2UxNjcpLCAxLjApCisgICAgICAgIGZvciBiIGluIHJhbmdlKC0xMCwgMTEpOgorICAgICAgICAgICAgZXEocG93KGEsIGZsb2F0KGIpKSwgYiAmIDEgYW5kIC0xLjAgb3IgMS4wKQorICAgICAgICBmb3IgbiBpbiByYW5nZSgwLCAxMDApOgorICAgICAgICAgICAgZml2ZXRvID0gZmxvYXQoNSAqKiBuKQorICAgICAgICAgICAgIyBGb3Igc21hbGwgbiwgZml2ZXRvIHdpbGwgYmUgb2RkLiAgRXZlbnR1YWxseSB3ZSBydW4gb3V0IG9mCisgICAgICAgICAgICAjIG1hbnRpc3NhIGJpdHMsIHRob3VnaCwgYW5kIHRoZXJlYWZlciBmaXZldG8gd2lsbCBiZSBldmVuLgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBmaXZldG8gJSAyLjAgYW5kIC0xLjAgb3IgMS4wCisgICAgICAgICAgICBlcShwb3coYSwgZml2ZXRvKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBlcShwb3coYSwgLWZpdmV0byksIGV4cGVjdGVkKQorICAgICAgICBlcShleHBlY3RlZCwgMS4wKSAgICMgZWxzZSB3ZSBkaWRuJ3QgcHVzaCBmaXZldG8gdG8gZXZlbm5lc3MKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQb3dUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxMzdkZgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3BwcmludC5weQpAQCAtMCwwICsxLDQzMiBAQAoraW1wb3J0IHBwcmludAoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0LnRlc3Rfc2V0CisKK3RyeToKKyAgICB1bmkgPSB1bmljb2RlCitleGNlcHQgTmFtZUVycm9yOgorICAgIGRlZiB1bmkoeCk6CisgICAgICAgIHJldHVybiB4CisKKyMgbGlzdCwgdHVwbGUgYW5kIGRpY3Qgc3ViY2xhc3NlcyB0aGF0IGRvIG9yIGRvbid0IG92ZXJ3cml0ZSBfX3JlcHJfXworY2xhc3MgbGlzdDIobGlzdCk6CisgICAgcGFzcworCitjbGFzcyBsaXN0MyhsaXN0KToKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0Ll9fcmVwcl9fKHNlbGYpCisKK2NsYXNzIHR1cGxlMih0dXBsZSk6CisgICAgcGFzcworCitjbGFzcyB0dXBsZTModHVwbGUpOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHR1cGxlLl9fcmVwcl9fKHNlbGYpCisKK2NsYXNzIGRpY3QyKGRpY3QpOgorICAgIHBhc3MKKworY2xhc3MgZGljdDMoZGljdCk6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gZGljdC5fX3JlcHJfXyhzZWxmKQorCitjbGFzcyBRdWVyeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5hID0gcmFuZ2UoMTAwKQorICAgICAgICBzZWxmLmIgPSByYW5nZSgyMDApCisgICAgICAgIHNlbGYuYVstMTJdID0gc2VsZi5iCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgLmlzcmVjdXJzaXZlKCkgYW5kIC5pc3JlYWRhYmxlKCkgdy9vIHJlY3Vyc2lvbgorICAgICAgICBwcCA9IHBwcmludC5QcmV0dHlQcmludGVyKCkKKyAgICAgICAgZm9yIHNhZmUgaW4gKDIsIDIuMCwgMmosICJhYmMiLCBbM10sICgyLDIpLCB7MzogM30sIHVuaSgieWFkZGF5YWRkYSIpLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5hLCBzZWxmLmIpOgorICAgICAgICAgICAgIyBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb25zCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBwcmludC5pc3JlY3Vyc2l2ZShzYWZlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIG5vdCBpc3JlY3Vyc2l2ZSBmb3IgJXIiICUgKHNhZmUsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcHJpbnQuaXNyZWFkYWJsZShzYWZlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgaXNyZWFkYWJsZSBmb3IgJXIiICUgKHNhZmUsKSkKKyAgICAgICAgICAgICMgUHJldHR5UHJpbnRlciBtZXRob2RzCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBwLmlzcmVjdXJzaXZlKHNhZmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgbm90IGlzcmVjdXJzaXZlIGZvciAlciIgJSAoc2FmZSwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBwLmlzcmVhZGFibGUoc2FmZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGlzcmVhZGFibGUgZm9yICVyIiAlIChzYWZlLCkpCisKKyAgICBkZWYgdGVzdF9rbm90dGVkKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSAuaXNyZWN1cnNpdmUoKSBhbmQgLmlzcmVhZGFibGUoKSB3LyByZWN1cnNpb24KKyAgICAgICAgIyBUaWUgYSBrbm90LgorICAgICAgICBzZWxmLmJbNjddID0gc2VsZi5hCisgICAgICAgICMgTWVzc3kgZGljdC4KKyAgICAgICAgc2VsZi5kID0ge30KKyAgICAgICAgc2VsZi5kWzBdID0gc2VsZi5kWzFdID0gc2VsZi5kWzJdID0gc2VsZi5kCisKKyAgICAgICAgcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcigpCisKKyAgICAgICAgZm9yIGlja3kgaW4gc2VsZi5hLCBzZWxmLmIsIHNlbGYuZCwgKHNlbGYuZCwgc2VsZi5kKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcHJpbnQuaXNyZWN1cnNpdmUoaWNreSksICJleHBlY3RlZCBpc3JlY3Vyc2l2ZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBwcmludC5pc3JlYWRhYmxlKGlja3kpLCAiZXhwZWN0ZWQgbm90IGlzcmVhZGFibGUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBwLmlzcmVjdXJzaXZlKGlja3kpLCAiZXhwZWN0ZWQgaXNyZWN1cnNpdmUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcC5pc3JlYWRhYmxlKGlja3kpLCAiZXhwZWN0ZWQgbm90IGlzcmVhZGFibGUiKQorCisgICAgICAgICMgQnJlYWsgdGhlIGN5Y2xlcy4KKyAgICAgICAgc2VsZi5kLmNsZWFyKCkKKyAgICAgICAgZGVsIHNlbGYuYVs6XQorICAgICAgICBkZWwgc2VsZi5iWzpdCisKKyAgICAgICAgZm9yIHNhZmUgaW4gc2VsZi5hLCBzZWxmLmIsIHNlbGYuZCwgKHNlbGYuZCwgc2VsZi5kKToKKyAgICAgICAgICAgICMgbW9kdWxlLWxldmVsIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcHJpbnQuaXNyZWN1cnNpdmUoc2FmZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBub3QgaXNyZWN1cnNpdmUgZm9yICVyIiAlIChzYWZlLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHByaW50LmlzcmVhZGFibGUoc2FmZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGlzcmVhZGFibGUgZm9yICVyIiAlIChzYWZlLCkpCisgICAgICAgICAgICAjIFByZXR0eVByaW50ZXIgbWV0aG9kcworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcC5pc3JlY3Vyc2l2ZShzYWZlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIG5vdCBpc3JlY3Vyc2l2ZSBmb3IgJXIiICUgKHNhZmUsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcC5pc3JlYWRhYmxlKHNhZmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBpc3JlYWRhYmxlIGZvciAlciIgJSAoc2FmZSwpKQorCisgICAgZGVmIHRlc3RfdW5yZWFkYWJsZShzZWxmKToKKyAgICAgICAgIyBOb3QgcmVjdXJzaXZlIGJ1dCBub3QgcmVhZGFibGUgYW55d2F5CisgICAgICAgIHBwID0gcHByaW50LlByZXR0eVByaW50ZXIoKQorICAgICAgICBmb3IgdW5yZWFkYWJsZSBpbiB0eXBlKDMpLCBwcHJpbnQsIHBwcmludC5pc3JlY3Vyc2l2ZToKKyAgICAgICAgICAgICMgbW9kdWxlLWxldmVsIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcHJpbnQuaXNyZWN1cnNpdmUodW5yZWFkYWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBub3QgaXNyZWN1cnNpdmUgZm9yICVyIiAlICh1bnJlYWRhYmxlLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBwcmludC5pc3JlYWRhYmxlKHVucmVhZGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgbm90IGlzcmVhZGFibGUgZm9yICVyIiAlICh1bnJlYWRhYmxlLCkpCisgICAgICAgICAgICAjIFByZXR0eVByaW50ZXIgbWV0aG9kcworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcC5pc3JlY3Vyc2l2ZSh1bnJlYWRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIG5vdCBpc3JlY3Vyc2l2ZSBmb3IgJXIiICUgKHVucmVhZGFibGUsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHAuaXNyZWFkYWJsZSh1bnJlYWRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIG5vdCBpc3JlYWRhYmxlIGZvciAlciIgJSAodW5yZWFkYWJsZSwpKQorCisgICAgZGVmIHRlc3Rfc2FtZV9hc19yZXByKHNlbGYpOgorICAgICAgICAjIFNpbXBsZSBvYmplY3RzLCBzbWFsbCBjb250YWluZXJzIGFuZCBjbGFzc2VzIHRoYXQgb3ZlcndyaXRlIF9fcmVwcl9fCisgICAgICAgICMgRm9yIHRob3NlIHRoZSByZXN1bHQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHJlcHIoKS4KKyAgICAgICAgIyBBaGVtLiAgVGhlIGRvY3MgZG9uJ3Qgc2F5IGFueXRoaW5nIGFib3V0IHRoYXQgLS0gdGhpcyBhcHBlYXJzIHRvCisgICAgICAgICMgYmUgdGVzdGluZyBhbiBpbXBsZW1lbnRhdGlvbiBxdWlyay4gIFN0YXJ0aW5nIGluIFB5dGhvbiAyLjUsIGl0J3MKKyAgICAgICAgIyBub3QgdHJ1ZSBmb3IgZGljdHM6ICBwcHJpbnQgYWx3YXlzIHNvcnRzIGRpY3RzIGJ5IGtleSBub3c7IGJlZm9yZSwKKyAgICAgICAgIyBpdCBzb3J0ZWQgYSBkaWN0IGRpc3BsYXkgaWYgYW5kIG9ubHkgaWYgdGhlIGRpc3BsYXkgcmVxdWlyZWQKKyAgICAgICAgIyBtdWx0aXBsZSBsaW5lcy4gIEZvciB0aGF0IHJlYXNvbiwgZGljdHMgd2l0aCBtb3JlIHRoYW4gb25lIGVsZW1lbnQKKyAgICAgICAgIyBhcmVuJ3QgdGVzdGVkIGhlcmUuCisgICAgICAgIGZvciBzaW1wbGUgaW4gKDAsIDBMLCAwKzBqLCAwLjAsICIiLCB1bmkoIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAoKSwgdHVwbGUyKCksIHR1cGxlMygpLAorICAgICAgICAgICAgICAgICAgICAgICBbXSwgbGlzdDIoKSwgbGlzdDMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAge30sIGRpY3QyKCksIGRpY3QzKCksCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSwgcHByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAtNiwgLTZMLCAtNi02aiwgLTEuNSwgIngiLCB1bmkoIngiKSwgKDMsKSwgWzNdLCB7MzogNn0sCisgICAgICAgICAgICAgICAgICAgICAgICgxLDIpLCBbMyw0XSwgezU6IDZ9LAorICAgICAgICAgICAgICAgICAgICAgICB0dXBsZTIoKDEsMikpLCB0dXBsZTMoKDEsMikpLCB0dXBsZTMocmFuZ2UoMTAwKSksCisgICAgICAgICAgICAgICAgICAgICAgIFszLDRdLCBsaXN0MihbMyw0XSksIGxpc3QzKFszLDRdKSwgbGlzdDMocmFuZ2UoMTAwKSksCisgICAgICAgICAgICAgICAgICAgICAgIGRpY3QyKHs1OiA2fSksIGRpY3QzKHs1OiA2fSksCisgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlKDEwLCAtMTEsIC0xKQorICAgICAgICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICBuYXRpdmUgPSByZXByKHNpbXBsZSkKKyAgICAgICAgICAgIGZvciBmdW5jdGlvbiBpbiAicGZvcm1hdCIsICJzYWZlcmVwciI6CisgICAgICAgICAgICAgICAgZiA9IGdldGF0dHIocHByaW50LCBmdW5jdGlvbikKKyAgICAgICAgICAgICAgICBnb3QgPSBmKHNpbXBsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hdGl2ZSwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVzIGdvdCAlcyBmcm9tIHBwcmludC4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hdGl2ZSwgZ290LCBmdW5jdGlvbikpCisKKyAgICBkZWYgdGVzdF9iYXNpY19saW5lX3dyYXAoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IGJhc2ljIGxpbmUtd3JhcHBpbmcgb3BlcmF0aW9uCisgICAgICAgIG8gPSB7J1JQTV9jYWwnOiAwLAorICAgICAgICAgICAgICdSUE1fY2FsMic6IDQ4MDU5LAorICAgICAgICAgICAgICdTcGVlZF9jYWwnOiAwLAorICAgICAgICAgICAgICdjb250cm9sZGVza19ydW50aW1lX3VzJzogMCwKKyAgICAgICAgICAgICAnbWFpbl9jb2RlX3J1bnRpbWVfdXMnOiAwLAorICAgICAgICAgICAgICdyZWFkX2lvX3J1bnRpbWVfdXMnOiAwLAorICAgICAgICAgICAgICd3cml0ZV9pb19ydW50aW1lX3VzJzogNDM2OTB9CisgICAgICAgIGV4cCA9ICIiIlwKK3snUlBNX2NhbCc6IDAsCisgJ1JQTV9jYWwyJzogNDgwNTksCisgJ1NwZWVkX2NhbCc6IDAsCisgJ2NvbnRyb2xkZXNrX3J1bnRpbWVfdXMnOiAwLAorICdtYWluX2NvZGVfcnVudGltZV91cyc6IDAsCisgJ3JlYWRfaW9fcnVudGltZV91cyc6IDAsCisgJ3dyaXRlX2lvX3J1bnRpbWVfdXMnOiA0MzY5MH0iIiIKKyAgICAgICAgZm9yIHR5cGUgaW4gW2RpY3QsIGRpY3QyXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQodHlwZShvKSksIGV4cCkKKworICAgICAgICBvID0gcmFuZ2UoMTAwKQorICAgICAgICBleHAgPSAnWyVzXScgJSAnLFxuICcuam9pbihtYXAoc3RyLCBvKSkKKyAgICAgICAgZm9yIHR5cGUgaW4gW2xpc3QsIGxpc3QyXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQodHlwZShvKSksIGV4cCkKKworICAgICAgICBvID0gdHVwbGUocmFuZ2UoMTAwKSkKKyAgICAgICAgZXhwID0gJyglcyknICUgJyxcbiAnLmpvaW4obWFwKHN0ciwgbykpCisgICAgICAgIGZvciB0eXBlIGluIFt0dXBsZSwgdHVwbGUyXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQodHlwZShvKSksIGV4cCkKKworICAgICAgICAjIGluZGVudCBwYXJhbWV0ZXIKKyAgICAgICAgbyA9IHJhbmdlKDEwMCkKKyAgICAgICAgZXhwID0gJ1sgICAlc10nICUgJyxcbiAgICAnLmpvaW4obWFwKHN0ciwgbykpCisgICAgICAgIGZvciB0eXBlIGluIFtsaXN0LCBsaXN0Ml06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHR5cGUobyksIGluZGVudD00KSwgZXhwKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2luZGVudGF0aW9ucyhzZWxmKToKKyAgICAgICAgbzEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgbzIgPSBkaWN0KGZpcnN0PTEsIHNlY29uZD0yLCB0aGlyZD0zKQorICAgICAgICBvID0gW28xLCBvMl0KKyAgICAgICAgZXhwZWN0ZWQgPSAiIiJcCitbICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldLAorICAgIHsgICAnZmlyc3QnOiAxLAorICAgICAgICAnc2Vjb25kJzogMiwKKyAgICAgICAgJ3RoaXJkJzogM31dIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobywgaW5kZW50PTQsIHdpZHRoPTQyKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zb3J0ZWRfZGljdChzZWxmKToKKyAgICAgICAgIyBTdGFydGluZyBpbiBQeXRob24gMi41LCBwcHJpbnQgc29ydHMgZGljdCBkaXNwbGF5cyBieSBrZXkgcmVnYXJkbGVzcworICAgICAgICAjIG9mIGhvdyBzbWFsbCB0aGUgZGljdGlvbmFyeSBtYXkgYmUuCisgICAgICAgICMgQmVmb3JlIHRoZSBjaGFuZ2UsIG9uIDMyLWJpdCBXaW5kb3dzIHBmb3JtYXQoKSBnYXZlIG9yZGVyCisgICAgICAgICMgJ2EnLCAnYycsICdiJyBoZXJlLCBzbyB0aGlzIHRlc3QgZmFpbGVkLgorICAgICAgICBkID0geydhJzogMSwgJ2InOiAxLCAnYyc6IDF9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZCksICJ7J2EnOiAxLCAnYic6IDEsICdjJzogMX0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KFtkLCBkXSksCisgICAgICAgICAgICAiW3snYSc6IDEsICdiJzogMSwgJ2MnOiAxfSwgeydhJzogMSwgJ2InOiAxLCAnYyc6IDF9XSIpCisKKyAgICAgICAgIyBUaGUgbmV4dCBvbmUgaXMga2luZCBvZiBnb29meS4gIFRoZSBzb3J0ZWQgb3JkZXIgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgIyBhbHBoYWJldGljIG9yZGVyIG9mIHR5cGUgbmFtZXM6ICAiaW50IiA8ICJzdHIiIDwgInR1cGxlIi4gIEJlZm9yZQorICAgICAgICAjIFB5dGhvbiAyLjUsIHRoaXMgd2FzIGluIHRoZSB0ZXN0X3NhbWVfYXNfcmVwcigpIHRlc3QuICBJdCdzIHdvcnRoCisgICAgICAgICMga2VlcGluZyBhcm91bmQgZm9yIG5vdyBiZWNhdXNlIGl0J3Mgb25lIG9mIGZldyB0ZXN0cyBvZiBwcHJpbnQKKyAgICAgICAgIyBhZ2FpbnN0IGEgY3JhenkgbWl4IG9mIHR5cGVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHsieHlcdGFiXG4iOiAoMywpLCA1OiBbW11dLCAoKToge319KSwKKyAgICAgICAgICAgIHIiezU6IFtbXV0sICd4eVx0YWJcbic6ICgzLCksICgpOiB7fX0iKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Npbmcoc2VsZik6CisgICAgICAgIG8gPSB7J25hbWVzIHdpdGggc3BhY2VzJzogJ3Nob3VsZCBiZSBwcmVzZW50ZWQgdXNpbmcgcmVwcigpJywKKyAgICAgICAgICAgICAnb3RoZXJzLnNob3VsZC5ub3QuYmUnOiAnbGlrZS50aGlzJ30KKyAgICAgICAgZXhwID0gIiIiXAoreyduYW1lcyB3aXRoIHNwYWNlcyc6ICdzaG91bGQgYmUgcHJlc2VudGVkIHVzaW5nIHJlcHIoKScsCisgb3RoZXJzLnNob3VsZC5ub3QuYmU6IGxpa2UudGhpc30iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEb3R0ZWRQcmV0dHlQcmludGVyKCkucGZvcm1hdChvKSwgZXhwKQorCisgICAgZGVmIHRlc3Rfc2V0X3JlcHJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNldCgpKSwgJ3NldCgpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzZXQocmFuZ2UoMykpKSwgJ3NldChbMCwgMSwgMl0pJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChmcm96ZW5zZXQoKSksICdmcm96ZW5zZXQoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZnJvemVuc2V0KHJhbmdlKDMpKSksICdmcm96ZW5zZXQoWzAsIDEsIDJdKScpCisgICAgICAgIGN1YmVfcmVwcl90Z3QgPSAiIiJcCit7ZnJvemVuc2V0KFtdKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwgZnJvemVuc2V0KFswXSksIGZyb3plbnNldChbMV0pXSksCisgZnJvemVuc2V0KFswXSk6IGZyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLCAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLCAxXSldKSwKKyBmcm96ZW5zZXQoWzFdKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzEsIDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsIDFdKV0pLAorIGZyb3plbnNldChbMl0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMSwgMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwgMl0pXSksCisgZnJvemVuc2V0KFsxLCAyXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLCAxLCAyXSldKSwKKyBmcm96ZW5zZXQoWzAsIDJdKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsIDEsIDJdKV0pLAorIGZyb3plbnNldChbMCwgMV0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldChbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwgMSwgMl0pXSksCisgZnJvemVuc2V0KFswLCAxLCAyXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFsxLCAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLCAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLCAxXSldKX0iIiIKKyAgICAgICAgY3ViZSA9IHRlc3QudGVzdF9zZXQuY3ViZSgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGN1YmUpLCBjdWJlX3JlcHJfdGd0KQorICAgICAgICBjdWJvX3JlcHJfdGd0ID0gIiIiXAore2Zyb3plbnNldChbZnJvemVuc2V0KFswLCAyXSksIGZyb3plbnNldChbMF0pXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFtmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMF0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSldKSwKKyBmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwgMV0pLCBmcm96ZW5zZXQoWzFdKV0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldChbZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMV0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzFdKV0pXSksCisgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzEsIDJdKSwgZnJvemVuc2V0KFsxXSldKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoW2Zyb3plbnNldChbMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXSldKV0pLAorIGZyb3plbnNldChbZnJvemVuc2V0KFsxLCAyXSksIGZyb3plbnNldChbMl0pXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFtmcm96ZW5zZXQoWzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMl0pXSldKSwKKyBmcm96ZW5zZXQoW2Zyb3plbnNldChbXSksIGZyb3plbnNldChbMF0pXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFtmcm96ZW5zZXQoWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzFdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMl0pXSldKSwKKyBmcm96ZW5zZXQoW2Zyb3plbnNldChbXSksIGZyb3plbnNldChbMV0pXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFtmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzBdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMV0pXSldKSwKKyBmcm96ZW5zZXQoW2Zyb3plbnNldChbMl0pLCBmcm96ZW5zZXQoW10pXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzBdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMV0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSldKSwKKyBmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwgMSwgMl0pLCBmcm96ZW5zZXQoWzAsIDFdKV0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldChbZnJvemVuc2V0KFsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFdKV0pXSksCisgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzBdKSwgZnJvemVuc2V0KFswLCAxXSldKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzBdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXSldKV0pLAorIGZyb3plbnNldChbZnJvemVuc2V0KFsyXSksIGZyb3plbnNldChbMCwgMl0pXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFtmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMl0pXSldKSwKKyBmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwgMSwgMl0pLCBmcm96ZW5zZXQoWzAsIDJdKV0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldChbZnJvemVuc2V0KFsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pXSksCisgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzEsIDJdKSwgZnJvemVuc2V0KFswLCAxLCAyXSldKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKV0pfSIiIgorCisgICAgICAgIGN1Ym8gPSB0ZXN0LnRlc3Rfc2V0LmxpbmVncmFwaChjdWJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGN1Ym8pLCBjdWJvX3JlcHJfdGd0KQorCisgICAgZGVmIHRlc3RfZGVwdGgoc2VsZik6CisgICAgICAgIG5lc3RlZF90dXBsZSA9ICgxLCAoMiwgKDMsICg0LCAoNSwgNikpKSkpCisgICAgICAgIG5lc3RlZF9kaWN0ID0gezE6IHsyOiB7MzogezQ6IHs1OiB7NjogNn19fX19fQorICAgICAgICBuZXN0ZWRfbGlzdCA9IFsxLCBbMiwgWzMsIFs0LCBbNSwgWzYsIFtdXV1dXV1dCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobmVzdGVkX3R1cGxlKSwgcmVwcihuZXN0ZWRfdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KG5lc3RlZF9kaWN0KSwgcmVwcihuZXN0ZWRfZGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobmVzdGVkX2xpc3QpLCByZXByKG5lc3RlZF9saXN0KSkKKworICAgICAgICBsdjFfdHVwbGUgPSAnKDEsICguLi4pKScKKyAgICAgICAgbHYxX2RpY3QgPSAnezE6IHsuLi59fScKKyAgICAgICAgbHYxX2xpc3QgPSAnWzEsIFsuLi5dXScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChuZXN0ZWRfdHVwbGUsIGRlcHRoPTEpLCBsdjFfdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobmVzdGVkX2RpY3QsIGRlcHRoPTEpLCBsdjFfZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChuZXN0ZWRfbGlzdCwgZGVwdGg9MSksIGx2MV9saXN0KQorCisKK2NsYXNzIERvdHRlZFByZXR0eVByaW50ZXIocHByaW50LlByZXR0eVByaW50ZXIpOgorCisgICAgZGVmIGZvcm1hdChzZWxmLCBvYmplY3QsIGNvbnRleHQsIG1heGxldmVscywgbGV2ZWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iamVjdCwgc3RyKToKKyAgICAgICAgICAgIGlmICcgJyBpbiBvYmplY3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcHIob2JqZWN0KSwgMSwgMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LCAwLCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcHByaW50LlByZXR0eVByaW50ZXIuZm9ybWF0KAorICAgICAgICAgICAgICAgIHNlbGYsIG9iamVjdCwgY29udGV4dCwgbWF4bGV2ZWxzLCBsZXZlbCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFF1ZXJ5VGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wcmludC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI2MzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKQEAgLTAsMCArMSwxNDEgQEAKKyIiIlRlc3QgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHByaW50IGZ1bmN0aW9uLgorIiIiCisKKyMgSW4gMi42LCB0aGlzIGdpdmVzIHVzIHRoZSBiZWhhdmlvciB3ZSB3YW50LiAgSW4gMy4wLCBpdCBoYXMKKyMgIG5vIGZ1bmN0aW9uLCBidXQgaXQgc3RpbGwgbXVzdCBwYXJzZSBjb3JyZWN0bHkuCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworTm90RGVmaW5lZCA9IG9iamVjdCgpCisKKyMgQSBkaXNwYXRjaCB0YWJsZSBhbGwgOCBjb21iaW5hdGlvbnMgb2YgcHJvdmlkaW5nCisjICBzZXAsIGVuZCwgYW5kIGZpbGUKKyMgSSB1c2UgdGhpcyBtYWNoaW5lcnkgc28gdGhhdCBJJ20gbm90IGp1c3QgcGFzc2luZyBkZWZhdWx0CisjICB2YWx1ZXMgdG8gcHJpbnQsIEknbSBlaXRoZXIgcGFzc2luZyBvciBub3QgcGFzc2luZyBpbiB0aGUKKyMgIGFyZ3VtZW50cworZGlzcGF0Y2ggPSB7CisgICAgKEZhbHNlLCBGYWxzZSwgRmFsc2UpOgorICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KCphcmdzKSwKKyAgICAoRmFsc2UsIEZhbHNlLCBUcnVlKToKKyAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChmaWxlPWZpbGUsICphcmdzKSwKKyAgICAoRmFsc2UsIFRydWUsICBGYWxzZSk6CisgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgKmFyZ3MpLAorICAgIChGYWxzZSwgVHJ1ZSwgIFRydWUpOgorICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgIChUcnVlLCAgRmFsc2UsIEZhbHNlKToKKyAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCAqYXJncyksCisgICAgKFRydWUsICBGYWxzZSwgVHJ1ZSk6CisgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgKFRydWUsICBUcnVlLCAgRmFsc2UpOgorICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsICphcmdzKSwKKyAgICAoVHJ1ZSwgIFRydWUsICBUcnVlKToKKyAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCBmaWxlPWZpbGUsICphcmdzKSwKKyAgICB9CisKKyMgQ2xhc3MgdXNlZCB0byB0ZXN0IF9fc3RyX18gYW5kIHByaW50CitjbGFzcyBDbGFzc1dpdGhfX3N0cl9fOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgc2VsZi54ID0geAorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi54CisKK2NsYXNzIFRlc3RQcmludCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNoZWNrKHNlbGYsIGV4cGVjdGVkLCBhcmdzLAorICAgICAgICAgICAgc2VwPU5vdERlZmluZWQsIGVuZD1Ob3REZWZpbmVkLCBmaWxlPU5vdERlZmluZWQpOgorICAgICAgICAjIENhcHR1cmUgc3lzLnN0ZG91dCBpbiBhIFN0cmluZ0lPLiAgQ2FsbCBwcmludCB3aXRoIGFyZ3MsCisgICAgICAgICMgIGFuZCB3aXRoIHNlcCwgZW5kLCBhbmQgZmlsZSwgaWYgdGhleSdyZSBkZWZpbmVkLiAgUmVzdWx0CisgICAgICAgICMgIG11c3QgbWF0Y2ggZXhwZWN0ZWQuCisKKyAgICAgICAgIyBMb29rIHVwIHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8gY2FsbCwgYmFzZWQgb24gaWYgc2VwLCBlbmQsIGFuZCBmaWxlCisgICAgICAgICMgIGFyZSBkZWZpbmVkCisgICAgICAgIGZuID0gZGlzcGF0Y2hbKHNlcCBpcyBub3QgTm90RGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgZW5kIGlzIG5vdCBOb3REZWZpbmVkLAorICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIG5vdCBOb3REZWZpbmVkKV0KKworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyB0OgorICAgICAgICAgICAgZm4oYXJncywgc2VwLCBlbmQsIGZpbGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdldHZhbHVlKCksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcHJpbnQoc2VsZik6CisgICAgICAgIGRlZiB4KGV4cGVjdGVkLCBhcmdzLCBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQpOgorICAgICAgICAgICAgIyBSdW4gdGhlIHRlc3QgMiB3YXlzOiBub3QgdXNpbmcgZmlsZSwgYW5kIHVzaW5nCisgICAgICAgICAgICAjICBmaWxlIGRpcmVjdGVkIHRvIGEgU3RyaW5nSU8KKworICAgICAgICAgICAgc2VsZi5jaGVjayhleHBlY3RlZCwgYXJncywgc2VwPXNlcCwgZW5kPWVuZCkKKworICAgICAgICAgICAgIyBXaGVuIHdyaXRpbmcgdG8gYSBmaWxlLCBzdGRvdXQgaXMgZXhwZWN0ZWQgdG8gYmUgZW1wdHkKKyAgICAgICAgICAgIG8gPSBTdHJpbmdJTygpCisgICAgICAgICAgICBzZWxmLmNoZWNrKCcnLCBhcmdzLCBzZXA9c2VwLCBlbmQ9ZW5kLCBmaWxlPW8pCisKKyAgICAgICAgICAgICMgQW5kIG8gd2lsbCBjb250YWluIHRoZSBleHBlY3RlZCBvdXRwdXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKKworICAgICAgICB4KCdcbicsICgpKQorICAgICAgICB4KCdhXG4nLCAoJ2EnLCkpCisgICAgICAgIHgoJ05vbmVcbicsIChOb25lLCkpCisgICAgICAgIHgoJzEgMlxuJywgKDEsIDIpKQorICAgICAgICB4KCcxICAgMlxuJywgKDEsICcgJywgMikpCisgICAgICAgIHgoJzEqMlxuJywgKDEsIDIpLCBzZXA9JyonKQorICAgICAgICB4KCcxIHMnLCAoMSwgJ3MnKSwgZW5kPScnKQorICAgICAgICB4KCdhXG5iXG4nLCAoJ2EnLCAnYicpLCBzZXA9J1xuJykKKyAgICAgICAgeCgnMS4wMScsICgxLjAsIDEpLCBzZXA9JycsIGVuZD0nJykKKyAgICAgICAgeCgnMSphKjEuMysnLCAoMSwgJ2EnLCAxLjMpLCBzZXA9JyonLCBlbmQ9JysnKQorICAgICAgICB4KCdhXG5cbmJcbicsICgnYVxuJywgJ2InKSwgc2VwPSdcbicpCisgICAgICAgIHgoJ1wwKyArXDBcbicsICgnXDAnLCAnICcsICdcMCcpLCBzZXA9JysnKQorCisgICAgICAgIHgoJ2FcbiBiXG4nLCAoJ2FcbicsICdiJykpCisgICAgICAgIHgoJ2FcbiBiXG4nLCAoJ2FcbicsICdiJyksIHNlcD1Ob25lKQorICAgICAgICB4KCdhXG4gYlxuJywgKCdhXG4nLCAnYicpLCBlbmQ9Tm9uZSkKKyAgICAgICAgeCgnYVxuIGJcbicsICgnYVxuJywgJ2InKSwgc2VwPU5vbmUsIGVuZD1Ob25lKQorCisgICAgICAgIHgoJypcbicsIChDbGFzc1dpdGhfX3N0cl9fKCcqJyksKSkKKyAgICAgICAgeCgnYWJjIDFcbicsIChDbGFzc1dpdGhfX3N0cl9fKCdhYmMnKSwgMSkpCisKKyAgICAgICAgIyAyLnggdW5pY29kZSB0ZXN0cworICAgICAgICB4KHUnMSAyXG4nLCAoJzEnLCB1JzInKSkKKyAgICAgICAgeCh1J3VcMTIzNFxuJywgKHUndVwxMjM0JywpKQorICAgICAgICB4KHUnICBhYmMgMVxuJywgKCcgJywgQ2xhc3NXaXRoX19zdHJfXyh1J2FiYycpLCAxKSkKKworICAgICAgICAjIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByaW50LCAnJywgc2VwPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJpbnQsICcnLCBlbmQ9MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHByaW50LCAnJywgZmlsZT0nJykKKworICAgIGRlZiB0ZXN0X21peGVkX2FyZ3Moc2VsZik6CisgICAgICAgICMgSWYgYW4gdW5pY29kZSBhcmcgaXMgcGFzc2VkLCBzZXAgYW5kIGVuZCBzaG91bGQgYmUgdW5pY29kZSwgdG9vLgorICAgICAgICBjbGFzcyBSZWNvcmRlcihvYmplY3QpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbXVzdF9iZV91bmljb2RlKToKKyAgICAgICAgICAgICAgICBzZWxmLmJ1ZiA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5mb3JjZV91bmljb2RlID0gbXVzdF9iZV91bmljb2RlCisKKyAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCB3aGF0KToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZvcmNlX3VuaWNvZGUgYW5kIG5vdCBpc2luc3RhbmNlKHdoYXQsIHVuaWNvZGUpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiezAhcn0gaXMgbm90IHVuaWNvZGUiLmZvcm1hdCh3aGF0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmJ1Zi5hcHBlbmQod2hhdCkKKworICAgICAgICBidWYgPSBSZWNvcmRlcihUcnVlKQorICAgICAgICBwcmludCh1J2hpJywgZmlsZT1idWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodScnLmpvaW4oYnVmLmJ1ZiksICdoaVxuJykKKyAgICAgICAgZGVsIGJ1Zi5idWZbOl0KKyAgICAgICAgcHJpbnQodSdoaScsIHUnbm90aGluZycsIGZpbGU9YnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnJy5qb2luKGJ1Zi5idWYpLCAnaGkgbm90aGluZ1xuJykKKyAgICAgICAgYnVmID0gUmVjb3JkZXIoRmFsc2UpCisgICAgICAgIHByaW50KCdoaScsICdieWUnLCBlbmQ9dSdcbicsIGZpbGU9YnVmKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYnVmLmJ1ZlsxXSwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJ1Zi5idWZbM10sIHVuaWNvZGUpCisgICAgICAgIGRlbCBidWYuYnVmWzpdCisgICAgICAgIHByaW50KHNlcD11J3gnLCBmaWxlPWJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJ1Zi5idWZbLTFdLCB1bmljb2RlKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQcmludCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5M2QzOQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKQEAgLTAsMCArMSwxODYgQEAKKyIiIlRlc3Qgc3VpdGUgZm9yIHRoZSBwcm9maWxlIG1vZHVsZS4iIiIKKworaW1wb3J0IHN5cworaW1wb3J0IHBzdGF0cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2ltcG9ydCBwcm9maWxlCitmcm9tIHRlc3QucHJvZmlsZWUgaW1wb3J0IHRlc3RmdW5jLCB0aW1lcgorCisKK2NsYXNzIFByb2ZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHByb2ZpbGVyY2xhc3MgPSBwcm9maWxlLlByb2ZpbGUKKyAgICBtZXRob2RuYW1lcyA9IFsncHJpbnRfc3RhdHMnLCAncHJpbnRfY2FsbGVycycsICdwcmludF9jYWxsZWVzJ10KKyAgICBleHBlY3RlZF9vdXRwdXQgPSB7fQorICAgIGV4cGVjdGVkX2xpc3Rfc29ydF9vdXRwdXQgPSAnOjAoc29ydCknCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJvZmlsaW5nKGNscyk6CisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBwcm9mID0gY2xzLnByb2ZpbGVyY2xhc3ModGltZXIsIDAuMDAxKQorICAgICAgICBzdGFydF90aW1lciA9IHRpbWVyKCkKKyAgICAgICAgcHJvZi5ydW5jdHgoInRlc3RmdW5jKCkiLCBnbG9iYWxzKCksIGxvY2FscygpKQorICAgICAgICByZXN1bHRzLmFwcGVuZCh0aW1lcigpIC0gc3RhcnRfdGltZXIpCisgICAgICAgIGZvciBtZXRob2RuYW1lIGluIGNscy5tZXRob2RuYW1lczoKKyAgICAgICAgICAgIHMgPSBTdHJpbmdJTygpCisgICAgICAgICAgICBzdGF0cyA9IHBzdGF0cy5TdGF0cyhwcm9mLCBzdHJlYW09cykKKyAgICAgICAgICAgIHN0YXRzLnN0cmlwX2RpcnMoKS5zb3J0X3N0YXRzKCJzdGRuYW1lIikKKyAgICAgICAgICAgIGdldGF0dHIoc3RhdHMsIG1ldGhvZG5hbWUpKCkKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHMuZ2V0dmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIGRlZiB0ZXN0X2Nwcm9maWxlKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gc2VsZi5kb19wcm9maWxpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHNbMF0sIDEwMDApCisgICAgICAgIGZvciBpLCBtZXRob2QgaW4gZW51bWVyYXRlKHNlbGYubWV0aG9kbmFtZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzW2krMV0sIHNlbGYuZXhwZWN0ZWRfb3V0cHV0W21ldGhvZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGF0cy4lcyBvdXRwdXQgZm9yICVzIGRvZXNuJ3QgZml0IGV4cGVjdGF0aW9uISIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWV0aG9kLCBzZWxmLnByb2ZpbGVyY2xhc3MuX19uYW1lX18pKQorCisgICAgZGVmIHRlc3RfY2FsbGluZ19jb252ZW50aW9ucyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNTMzMDogcHJvZmlsZSBhbmQgY1Byb2ZpbGUgd291bGRuJ3QgcmVwb3J0IEMgZnVuY3Rpb25zIGNhbGxlZAorICAgICAgICAjIHdpdGgga2V5d29yZCBhcmd1bWVudHMuIFdlIHRlc3QgYWxsIGNhbGxpbmcgY29udmVudGlvbnMuCisgICAgICAgIHN0bXRzID0gWworICAgICAgICAgICAgIltdLnNvcnQoKSIsCisgICAgICAgICAgICAiW10uc29ydChyZXZlcnNlPVRydWUpIiwKKyAgICAgICAgICAgICJbXS5zb3J0KCooTm9uZSwgTm9uZSwgVHJ1ZSkpIiwKKyAgICAgICAgICAgICJbXS5zb3J0KCoqZGljdChyZXZlcnNlPVRydWUpKSIsCisgICAgICAgIF0KKyAgICAgICAgZm9yIHN0bXQgaW4gc3RtdHM6CisgICAgICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgcHJvZiA9IHNlbGYucHJvZmlsZXJjbGFzcyh0aW1lciwgMC4wMDEpCisgICAgICAgICAgICBwcm9mLnJ1bmN0eChzdG10LCBnbG9iYWxzKCksIGxvY2FscygpKQorICAgICAgICAgICAgc3RhdHMgPSBwc3RhdHMuU3RhdHMocHJvZiwgc3RyZWFtPXMpCisgICAgICAgICAgICBzdGF0cy5wcmludF9zdGF0cygpCisgICAgICAgICAgICByZXMgPSBzLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5leHBlY3RlZF9saXN0X3NvcnRfb3V0cHV0LCByZXMsCisgICAgICAgICAgICAgICAgIlByb2ZpbGluZyB7MCFyfSBkaWRuJ3QgcmVwb3J0IGxpc3Quc29ydDpcbnsxfSIuZm9ybWF0KHN0bXQsIHJlcykpCisKKworZGVmIHJlZ2VuZXJhdGVfZXhwZWN0ZWRfb3V0cHV0KGZpbGVuYW1lLCBjbHMpOgorICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucnN0cmlwKCdjbycpCisgICAgcHJpbnQgJ1JlZ2VuZXJhdGluZyAlcy4uLicgJSBmaWxlbmFtZQorICAgIHJlc3VsdHMgPSBjbHMuZG9fcHJvZmlsaW5nKCkKKworICAgIG5ld2ZpbGUgPSBbXQorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgbmV3ZmlsZS5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGlmIGxpbmVbOjZdID09ICcjLS1jdXQnOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZWxpbmVzKG5ld2ZpbGUpCisgICAgICAgIGZvciBpLCBtZXRob2QgaW4gZW51bWVyYXRlKGNscy5tZXRob2RuYW1lcyk6CisgICAgICAgICAgICBmLndyaXRlKCclcy5leHBlY3RlZF9vdXRwdXRbJXJdID0gIiIiXFxcbiVzIiIiXG4nICUgKAorICAgICAgICAgICAgICAgIGNscy5fX25hbWVfXywgbWV0aG9kLCByZXN1bHRzW2krMV0pKQorICAgICAgICBmLndyaXRlKCdcbmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6XG4gICAgbWFpbigpXG4nKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoUHJvZmlsZVRlc3QpCisKK2RlZiBtYWluKCk6CisgICAgaWYgJy1yJyBub3QgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHRlc3RfbWFpbigpCisgICAgZWxzZToKKyAgICAgICAgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQoX19maWxlX18sIFByb2ZpbGVUZXN0KQorCisKKyMgRG9uJ3QgcmVtb3ZlIHRoaXMgY29tbWVudC4gRXZlcnl0aGluZyBiZWxvdyBpdCBpcyBhdXRvLWdlbmVyYXRlZC4KKyMtLWN1dC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQcm9maWxlVGVzdC5leHBlY3RlZF9vdXRwdXRbJ3ByaW50X3N0YXRzJ10gPSAiIiJcCisgICAgICAgICAxMjcgZnVuY3Rpb24gY2FsbHMgKDEwNyBwcmltaXRpdmUgY2FsbHMpIGluIDk5OS43NDkgc2Vjb25kcworCisgICBPcmRlcmVkIGJ5OiBzdGFuZGFyZCBuYW1lCisKKyAgIG5jYWxscyAgdG90dGltZSAgcGVyY2FsbCAgY3VtdGltZSAgcGVyY2FsbCBmaWxlbmFtZTpsaW5lbm8oZnVuY3Rpb24pCisgICAgICAgIDQgICAtMC4wMDQgICAtMC4wMDEgICAtMC4wMDQgICAtMC4wMDEgOjAoYXBwZW5kKQorICAgICAgICA0ICAgLTAuMDA0ICAgLTAuMDAxICAgLTAuMDA0ICAgLTAuMDAxIDowKGV4Y19pbmZvKQorICAgICAgIDEyICAgLTAuMDI0ICAgLTAuMDAyICAgMTEuOTY0ICAgIDAuOTk3IDowKGhhc2F0dHIpCisgICAgICAgIDggICAtMC4wMDggICAtMC4wMDEgICAtMC4wMDggICAtMC4wMDEgOjAocmFuZ2UpCisgICAgICAgIDEgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAgOjAoc2V0cHJvZmlsZSkKKyAgICAgICAgMSAgIC0wLjAwMiAgIC0wLjAwMiAgOTk5Ljc1MSAgOTk5Ljc1MSA8c3RyaW5nPjoxKDxtb2R1bGU+KQorICAgICAgICAwICAgIDAuMDAwICAgICAgICAgICAgIDAuMDAwICAgICAgICAgIHByb2ZpbGU6MChwcm9maWxlcikKKyAgICAgICAgMSAgIC0wLjAwMiAgIC0wLjAwMiAgOTk5Ljc0OSAgOTk5Ljc0OSBwcm9maWxlOjAodGVzdGZ1bmMoKSkKKyAgICAgICAyOCAgIDI3Ljk3MiAgICAwLjk5OSAgIDI3Ljk3MiAgICAwLjk5OSBwcm9maWxlZS5weToxMTAoX19nZXRhdHRyX18pCisgICAgICAgIDEgIDI2OS45OTYgIDI2OS45OTYgIDk5OS43NTMgIDk5OS43NTMgcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpCisgICAgIDIzLzMgIDE0OS45MzcgICAgNi41MTkgIDE2OS45MTcgICA1Ni42MzkgcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKQorICAgICAgIDIwICAgMTkuOTgwICAgIDAuOTk5ICAgMTkuOTgwICAgIDAuOTk5IHByb2ZpbGVlLnB5OjQ4KG11bCkKKyAgICAgICAgMiAgIDM5Ljk4NiAgIDE5Ljk5MyAgNTk5LjgxNCAgMjk5LjkwNyBwcm9maWxlZS5weTo1NShoZWxwZXIpCisgICAgICAgIDQgIDExNS45ODQgICAyOC45OTYgIDExOS45NjQgICAyOS45OTEgcHJvZmlsZWUucHk6NzMoaGVscGVyMSkKKyAgICAgICAgMiAgIC0wLjAwNiAgIC0wLjAwMyAgMTM5Ljk0MiAgIDY5Ljk3MSBwcm9maWxlZS5weTo4NChoZWxwZXIyX2luZGlyZWN0KQorICAgICAgICA4ICAzMTEuOTc2ICAgMzguOTk3ICAzOTkuODk2ICAgNDkuOTg3IHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpCisgICAgICAgIDggICA2My45NjggICAgNy45OTYgICA3OS45NDQgICAgOS45OTMgcHJvZmlsZWUucHk6OTgoc3ViaGVscGVyKQorCisKKyIiIgorUHJvZmlsZVRlc3QuZXhwZWN0ZWRfb3V0cHV0WydwcmludF9jYWxsZXJzJ10gPSAiIiJcCisgICBPcmRlcmVkIGJ5OiBzdGFuZGFyZCBuYW1lCisKK0Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgY2FsbGVkIGJ5Li4uCis6MChhcHBlbmQpICAgICAgICAgICAgICAgICAgICAgICAgPC0gcHJvZmlsZWUucHk6NzMoaGVscGVyMSkoNCkgIDExOS45NjQKKzowKGV4Y19pbmZvKSAgICAgICAgICAgICAgICAgICAgICA8LSBwcm9maWxlZS5weTo3MyhoZWxwZXIxKSg0KSAgMTE5Ljk2NAorOjAoaGFzYXR0cikgICAgICAgICAgICAgICAgICAgICAgIDwtIHByb2ZpbGVlLnB5OjczKGhlbHBlcjEpKDQpICAxMTkuOTY0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWUucHk6ODgoaGVscGVyMikoOCkgIDM5OS44OTYKKzowKHJhbmdlKSAgICAgICAgICAgICAgICAgICAgICAgICA8LSBwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpKDgpICAgNzkuOTQ0Cis6MChzZXRwcm9maWxlKSAgICAgICAgICAgICAgICAgICAgPC0gcHJvZmlsZTowKHRlc3RmdW5jKCkpKDEpICA5OTkuNzQ5Cis8c3RyaW5nPjoxKDxtb2R1bGU+KSAgICAgICAgICAgICAgPC0gcHJvZmlsZTowKHRlc3RmdW5jKCkpKDEpICA5OTkuNzQ5Citwcm9maWxlOjAocHJvZmlsZXIpICAgICAgICAgICAgICAgPC0KK3Byb2ZpbGU6MCh0ZXN0ZnVuYygpKSAgICAgICAgICAgICA8LSBwcm9maWxlOjAocHJvZmlsZXIpKDEpICAgIDAuMDAwCitwcm9maWxlZS5weToxMTAoX19nZXRhdHRyX18pICAgICAgPC0gOjAoaGFzYXR0cikoMTIpICAgMTEuOTY0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWUucHk6OTgoc3ViaGVscGVyKSgxNikgICA3OS45NDQKK3Byb2ZpbGVlLnB5OjI1KHRlc3RmdW5jKSAgICAgICAgICA8LSA8c3RyaW5nPjoxKDxtb2R1bGU+KSgxKSAgOTk5Ljc1MQorcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKSAgICAgICAgIDwtIHByb2ZpbGVlLnB5OjI1KHRlc3RmdW5jKSgxKSAgOTk5Ljc1MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVlLnB5OjM1KGZhY3RvcmlhbCkoMjApICAxNjkuOTE3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWUucHk6ODQoaGVscGVyMl9pbmRpcmVjdCkoMikgIDEzOS45NDIKK3Byb2ZpbGVlLnB5OjQ4KG11bCkgICAgICAgICAgICAgICA8LSBwcm9maWxlZS5weTozNShmYWN0b3JpYWwpKDIwKSAgMTY5LjkxNworcHJvZmlsZWUucHk6NTUoaGVscGVyKSAgICAgICAgICAgIDwtIHByb2ZpbGVlLnB5OjI1KHRlc3RmdW5jKSgyKSAgOTk5Ljc1MworcHJvZmlsZWUucHk6NzMoaGVscGVyMSkgICAgICAgICAgIDwtIHByb2ZpbGVlLnB5OjU1KGhlbHBlcikoNCkgIDU5OS44MTQKK3Byb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpICA8LSBwcm9maWxlZS5weTo1NShoZWxwZXIpKDIpICA1OTkuODE0Citwcm9maWxlZS5weTo4OChoZWxwZXIyKSAgICAgICAgICAgPC0gcHJvZmlsZWUucHk6NTUoaGVscGVyKSg2KSAgNTk5LjgxNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpKDIpICAxMzkuOTQyCitwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpICAgICAgICAgPC0gcHJvZmlsZWUucHk6ODgoaGVscGVyMikoOCkgIDM5OS44OTYKKworCisiIiIKK1Byb2ZpbGVUZXN0LmV4cGVjdGVkX291dHB1dFsncHJpbnRfY2FsbGVlcyddID0gIiIiXAorICAgT3JkZXJlZCBieTogc3RhbmRhcmQgbmFtZQorCitGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkLi4uCis6MChhcHBlbmQpICAgICAgICAgICAgICAgICAgICAgICAgLT4KKzowKGV4Y19pbmZvKSAgICAgICAgICAgICAgICAgICAgICAtPgorOjAoaGFzYXR0cikgICAgICAgICAgICAgICAgICAgICAgIC0+IHByb2ZpbGVlLnB5OjExMChfX2dldGF0dHJfXykoMTIpICAgMjcuOTcyCis6MChyYW5nZSkgICAgICAgICAgICAgICAgICAgICAgICAgLT4KKzowKHNldHByb2ZpbGUpICAgICAgICAgICAgICAgICAgICAtPgorPHN0cmluZz46MSg8bW9kdWxlPikgICAgICAgICAgICAgIC0+IHByb2ZpbGVlLnB5OjI1KHRlc3RmdW5jKSgxKSAgOTk5Ljc1MworcHJvZmlsZTowKHByb2ZpbGVyKSAgICAgICAgICAgICAgIC0+IHByb2ZpbGU6MCh0ZXN0ZnVuYygpKSgxKSAgOTk5Ljc0OQorcHJvZmlsZTowKHRlc3RmdW5jKCkpICAgICAgICAgICAgIC0+IDowKHNldHByb2ZpbGUpKDEpICAgIDAuMDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz46MSg8bW9kdWxlPikoMSkgIDk5OS43NTEKK3Byb2ZpbGVlLnB5OjExMChfX2dldGF0dHJfXykgICAgICAtPgorcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpICAgICAgICAgIC0+IHByb2ZpbGVlLnB5OjM1KGZhY3RvcmlhbCkoMSkgIDE2OS45MTcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZS5weTo1NShoZWxwZXIpKDIpICA1OTkuODE0Citwcm9maWxlZS5weTozNShmYWN0b3JpYWwpICAgICAgICAgLT4gcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKSgyMCkgIDE2OS45MTcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZS5weTo0OChtdWwpKDIwKSAgIDE5Ljk4MAorcHJvZmlsZWUucHk6NDgobXVsKSAgICAgICAgICAgICAgIC0+Citwcm9maWxlZS5weTo1NShoZWxwZXIpICAgICAgICAgICAgLT4gcHJvZmlsZWUucHk6NzMoaGVscGVyMSkoNCkgIDExOS45NjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZS5weTo4NChoZWxwZXIyX2luZGlyZWN0KSgyKSAgMTM5Ljk0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpKDYpICAzOTkuODk2Citwcm9maWxlZS5weTo3MyhoZWxwZXIxKSAgICAgICAgICAgLT4gOjAoYXBwZW5kKSg0KSAgIC0wLjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDowKGV4Y19pbmZvKSg0KSAgIC0wLjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDowKGhhc2F0dHIpKDQpICAgMTEuOTY0Citwcm9maWxlZS5weTo4NChoZWxwZXIyX2luZGlyZWN0KSAgLT4gcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKSgyKSAgMTY5LjkxNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpKDIpICAzOTkuODk2Citwcm9maWxlZS5weTo4OChoZWxwZXIyKSAgICAgICAgICAgLT4gOjAoaGFzYXR0cikoOCkgICAxMS45NjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpKDgpICAgNzkuOTQ0Citwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpICAgICAgICAgLT4gOjAocmFuZ2UpKDgpICAgLTAuMDA4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWUucHk6MTEwKF9fZ2V0YXR0cl9fKSgxNikgICAyNy45NzIKKworCisiIiIKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHJvcGVydHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVhMDI5YgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5CkBAIC0wLDAgKzEsMjMxIEBACisjIFRlc3QgY2FzZSBmb3IgcHJvcGVydHkKKyMgbW9yZSB0ZXN0cyBhcmUgaW4gdGVzdF9kZXNjcgorCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitjbGFzcyBQcm9wZXJ0eUJhc2UoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIFByb3BlcnR5R2V0KFByb3BlcnR5QmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eVNldChQcm9wZXJ0eUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgUHJvcGVydHlEZWwoUHJvcGVydHlCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIEJhc2VDbGFzcyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fc3BhbSA9IDUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJCYXNlQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NwYW0gPSB2YWx1ZQorCisgICAgQHNwYW0uZGVsZXRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5fc3BhbQorCitjbGFzcyBTdWJDbGFzcyhCYXNlQ2xhc3MpOgorCisgICAgQEJhc2VDbGFzcy5zcGFtLmdldHRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJTdWJDbGFzcy5nZXR0ZXIiIiIKKyAgICAgICAgcmFpc2UgUHJvcGVydHlHZXQoc2VsZi5fc3BhbSkKKworICAgIEBzcGFtLnNldHRlcgorICAgIGRlZiBzcGFtKHNlbGYsIHZhbHVlKToKKyAgICAgICAgcmFpc2UgUHJvcGVydHlTZXQoc2VsZi5fc3BhbSkKKworICAgIEBzcGFtLmRlbGV0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgcmFpc2UgUHJvcGVydHlEZWwoc2VsZi5fc3BhbSkKKworY2xhc3MgUHJvcGVydHlEb2NCYXNlKG9iamVjdCk6CisgICAgX3NwYW0gPSAxCisgICAgZGVmIF9nZXRfc3BhbShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKyAgICBzcGFtID0gcHJvcGVydHkoX2dldF9zcGFtLCBkb2M9InNwYW0gc3BhbSBzcGFtIikKKworY2xhc3MgUHJvcGVydHlEb2NTdWIoUHJvcGVydHlEb2NCYXNlKToKKyAgICBAUHJvcGVydHlEb2NCYXNlLnNwYW0uZ2V0dGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIlRoZSBkZWNvcmF0b3IgZG9lcyBub3QgdXNlIHRoaXMgZG9jIHN0cmluZyIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3BhbQorCitjbGFzcyBQcm9wZXJ0eVN1Yk5ld0dldHRlcihCYXNlQ2xhc3MpOgorICAgIEBCYXNlQ2xhc3Muc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIibmV3IGRvY3N0cmluZyIiIgorICAgICAgICByZXR1cm4gNQorCitjbGFzcyBQcm9wZXJ0eU5ld0dldHRlcihvYmplY3QpOgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJvcmlnaW5hbCBkb2NzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIDEKKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIibmV3IGRvY3N0cmluZyIiIgorICAgICAgICByZXR1cm4gOAorCitjbGFzcyBQcm9wZXJ0eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfYmFzZWNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBiYXNlID0gQmFzZUNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgNSkKKyAgICAgICAgYmFzZS5zcGFtID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDEwKQorICAgICAgICBkZWxhdHRyKGJhc2UsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJzcGFtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihiYXNlLCAiX3NwYW0iKSkKKyAgICAgICAgYmFzZS5zcGFtID0gMjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDIwKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5R2V0LCBnZXRhdHRyLCBzdWIsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlTZXQsIHNldGF0dHIsIHN1YiwgInNwYW0iLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eURlbCwgZGVsYXR0ciwgc3ViLCAic3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3NfZG9jKHNlbGYpOgorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJTdWJDbGFzcy5nZXR0ZXIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2Jhc2VjbGFzc19kb2Moc2VsZik6CisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLnNwYW0uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvYyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFByb3BlcnR5RG9jQmFzZSgpCisgICAgICAgIHN1YiA9IFByb3BlcnR5RG9jU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9nZXR0ZXJfZG9jX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBuZXdnZXR0ZXJzdWIgPSBQcm9wZXJ0eVN1Yk5ld0dldHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgbmV3Z2V0dGVyID0gUHJvcGVydHlOZXdHZXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5zcGFtLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5fX2NsYXNzX18uc3BhbS5fX2RvY19fLCAibmV3IGRvY3N0cmluZyIpCisKKworIyBJc3N1ZSA1ODkwOiBzdWJjbGFzc2VzIG9mIHByb3BlcnR5IGRvIG5vdCBwcmVzZXJ2ZSBtZXRob2QgX19kb2NfXyBzdHJpbmdzCitjbGFzcyBQcm9wZXJ0eVN1Yihwcm9wZXJ0eSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIHByb3BlcnR5IiIiCisKK2NsYXNzIFByb3BlcnR5U3ViU2xvdHMocHJvcGVydHkpOgorICAgICIiIlRoaXMgaXMgYSBzdWJjbGFzcyBvZiBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgX19zbG90c19fIiIiCisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgUHJvcGVydHlTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Nsb3RzX2RvY3N0cmluZ19jb3B5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICAgICAgQFByb3BlcnR5U3ViU2xvdHMKKyAgICAgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgIiIiVHJ5aW5nIHRvIGNvcHkgdGhpcyBkb2NzdHJpbmcgd2lsbCByYWlzZSBhbiBleGNlcHRpb24iIiIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJBdHRyaWJ1dGVFcnJvciBub3QgcmFpc2VkIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2RvY3N0cmluZ19jb3B5KHNlbGYpOgorICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgIEBQcm9wZXJ0eVN1YgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvby5zcGFtLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X3Byb3BlcnR5X3NldHRlcl9jb3BpZXNfZ2V0dGVyX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6IHNlbGYuX3NwYW0gPSAxCisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiInNwYW0gd3JhcHBlZCBpbiBwcm9wZXJ0eSBzdWJjbGFzcyIiIgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisgICAgICAgICAgICBAc3BhbS5zZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICAiIiJ0aGlzIGRvY3N0cmluZyBpcyBpZ25vcmVkIiIiCisgICAgICAgICAgICAgICAgc2VsZi5fc3BhbSA9IHZhbHVlCisgICAgICAgIGZvbyA9IEZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnNwYW0sIDEpCisgICAgICAgIGZvby5zcGFtID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5zcGFtLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgRm9vLnNwYW0uX19kb2NfXywKKyAgICAgICAgICAgICJzcGFtIHdyYXBwZWQgaW4gcHJvcGVydHkgc3ViY2xhc3MiKQorICAgICAgICBjbGFzcyBGb29TdWIoRm9vKToKKyAgICAgICAgICAgIEBGb28uc3BhbS5zZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICAiIiJhbm90aGVyIGlnbm9yZWQgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgc2VsZi5fc3BhbSA9ICdlZ2dzJworICAgICAgICBmb29zdWIgPSBGb29TdWIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvb3N1Yi5zcGFtLCAxKQorICAgICAgICBmb29zdWIuc3BhbSA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29zdWIuc3BhbSwgJ2VnZ3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgRm9vU3ViLnNwYW0uX19kb2NfXywKKyAgICAgICAgICAgICJzcGFtIHdyYXBwZWQgaW4gcHJvcGVydHkgc3ViY2xhc3MiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfbmV3X2dldHRlcl9uZXdfZG9jc3RyaW5nKHNlbGYpOgorCisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBAc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLnNwYW0uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisgICAgICAgIGNsYXNzIEZvb0Jhc2Uob2JqZWN0KToKKyAgICAgICAgICAgIEBQcm9wZXJ0eVN1YgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBkb2NzdHJpbmciIiIKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBjbGFzcyBGb28yKEZvb0Jhc2UpOgorICAgICAgICAgICAgQEZvb0Jhc2Uuc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLnNwYW0uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHN0YXRzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHN0YXRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZDk0MTgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9wc3RhdHMucHkKQEAgLTAsMCArMSwzMiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHBzdGF0cworCisKKworY2xhc3MgQWRkQ2FsbGVyc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgcHN0YXRzLmFkZF9jYWxsZXJzIGhlbHBlci4iIiIKKworICAgIGRlZiB0ZXN0X2NvbWJpbmVfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgIiIicHN0YXRzLmFkZF9jYWxsZXJzIHNob3VsZCBjb21iaW5lIHRoZSBjYWxsIHJlc3VsdHMgb2YgYm90aCB0YXJnZXQKKyAgICAgICAgYW5kIHNvdXJjZSBieSBhZGRpbmcgdGhlIGNhbGwgdGltZS4gU2VlIGlzc3VlMTI2OS4iIiIKKyAgICAgICAgIyBuZXcgZm9ybWF0OiB1c2VkIGJ5IHRoZSBjUHJvZmlsZSBtb2R1bGUKKyAgICAgICAgdGFyZ2V0ID0geyJhIjogKDEsIDIsIDMsIDQpfQorICAgICAgICBzb3VyY2UgPSB7ImEiOiAoMSwgMiwgMywgNCksICJiIjogKDUsIDYsIDcsIDgpfQorICAgICAgICBuZXdfY2FsbGVycyA9IHBzdGF0cy5hZGRfY2FsbGVycyh0YXJnZXQsIHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfY2FsbGVycywgeydhJzogKDIsIDQsIDYsIDgpLCAnYic6ICg1LCA2LCA3LCA4KX0pCisgICAgICAgICMgb2xkIGZvcm1hdDogdXNlZCBieSB0aGUgcHJvZmlsZSBtb2R1bGUKKyAgICAgICAgdGFyZ2V0ID0geyJhIjogMX0KKyAgICAgICAgc291cmNlID0geyJhIjogMSwgImIiOiA1fQorICAgICAgICBuZXdfY2FsbGVycyA9IHBzdGF0cy5hZGRfY2FsbGVycyh0YXJnZXQsIHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfY2FsbGVycywgeydhJzogMiwgJ2InOiA1fSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgQWRkQ2FsbGVyc1Rlc3RDYXNlCisgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B0eS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWMzOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHR5LnB5CkBAIC0wLDAgKzEsMjg5IEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKKworI1NraXAgdGhlc2UgdGVzdHMgaWYgZWl0aGVyIGZjbnRsIG9yIHRlcm1pb3MgaXMgbm90IGF2YWlsYWJsZQorZmNudGwgPSBpbXBvcnRfbW9kdWxlKCdmY250bCcpCitpbXBvcnRfbW9kdWxlKCd0ZXJtaW9zJykKKworaW1wb3J0IGVycm5vCitpbXBvcnQgcHR5CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB1bml0dGVzdAorCitURVNUX1NUUklOR18xID0gIkkgd2lzaCB0byBidXkgYSBmaXNoIGxpY2Vuc2UuXG4iCitURVNUX1NUUklOR18yID0gIkZvciBteSBwZXQgZmlzaCwgRXJpYy5cbiIKKworaWYgdmVyYm9zZToKKyAgICBkZWYgZGVidWcobXNnKToKKyAgICAgICAgcHJpbnQgbXNnCitlbHNlOgorICAgIGRlZiBkZWJ1Zyhtc2cpOgorICAgICAgICBwYXNzCisKKworZGVmIG5vcm1hbGl6ZV9vdXRwdXQoZGF0YSk6CisgICAgIyBTb21lIG9wZXJhdGluZyBzeXN0ZW1zIGRvIGNvbnZlcnNpb25zIG9uIG5ld2xpbmUuICBXZSBjb3VsZCBwb3NzaWJseQorICAgICMgZml4IHRoYXQgYnkgZG9pbmcgdGhlIGFwcHJvcHJpYXRlIHRlcm1pb3MudGNzZXRhdHRyKClzLiAgSSBjb3VsZG4ndAorICAgICMgZmlndXJlIG91dCB0aGUgcmlnaHQgY29tYm8gb24gVHJ1NjQgYW5kIEkgZG9uJ3QgaGF2ZSBhbiBJUklYIGJveC4KKyAgICAjIFNvIGp1c3Qgbm9ybWFsaXplIHRoZSBvdXRwdXQgYW5kIGRvYyB0aGUgcHJvYmxlbSBPL1NlcyBieSBhbGxvd2luZworICAgICMgY2VydGFpbiBjb21iaW5hdGlvbnMgZm9yIHNvbWUgcGxhdGZvcm1zLCBidXQgYXZvaWQgYWxsb3dpbmcgb3RoZXIKKyAgICAjIGRpZmZlcmVuY2VzIChsaWtlIGV4dHJhIHdoaXRlc3BhY2UsIHRyYWlsaW5nIGdhcmJhZ2UsIGV0Yy4pCisKKyAgICAjIFRoaXMgaXMgYWJvdXQgdGhlIGJlc3Qgd2UgY2FuIGRvIHdpdGhvdXQgZ2V0dGluZyBzb21lIGZlZWRiYWNrCisgICAgIyBmcm9tIHNvbWVvbmUgbW9yZSBrbm93bGVkZ2FibGUuCisKKyAgICAjIE9TRi8xIChUcnU2NCkgYXBwYXJlbnRseSB0dXJucyBcbiBpbnRvIFxyXHJcbi4KKyAgICBpZiBkYXRhLmVuZHN3aXRoKCdcclxyXG4nKToKKyAgICAgICAgcmV0dXJuIGRhdGEucmVwbGFjZSgnXHJcclxuJywgJ1xuJykKKworICAgICMgSVJJWCBhcHBhcmVudGx5IHR1cm5zIFxuIGludG8gXHJcbi4KKyAgICBpZiBkYXRhLmVuZHN3aXRoKCdcclxuJyk6CisgICAgICAgIHJldHVybiBkYXRhLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKQorCisgICAgcmV0dXJuIGRhdGEKKworCisjIE1hcmdpbmFsIHRlc3Rpbmcgb2YgcHR5IHN1aXRlLiBDYW5ub3QgZG8gZXh0ZW5zaXZlICdkbyBvciBmYWlsJyB0ZXN0aW5nCisjIGJlY2F1c2UgcHR5IGNvZGUgaXMgbm90IHRvbyBwb3J0YWJsZS4KKyMgWFhYKG5ub3J3aXR6KTogIHRoZXNlIHRlc3RzIGxlYWsgZmRzIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IuCitjbGFzcyBQdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgaXNhdHR5KCkgYW5kIGNsb3NlKCkgY2FuIGhhbmcgb24gc29tZSBwbGF0Zm9ybXMuICBTZXQgYW4gYWxhcm0KKyAgICAgICAgIyBiZWZvcmUgcnVubmluZyB0aGUgdGVzdCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGFuZyBmb3JldmVyLgorICAgICAgICBzZWxmLm9sZF9hbGFybSA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYuaGFuZGxlX3NpZykKKyAgICAgICAgc2lnbmFsLmFsYXJtKDEwKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIHJlbW92ZSBhbGFybSwgcmVzdG9yZSBvbGQgYWxhcm0gaGFuZGxlcgorICAgICAgICBzaWduYWwuYWxhcm0oMCkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5vbGRfYWxhcm0pCisKKyAgICBkZWYgaGFuZGxlX3NpZyhzZWxmLCBzaWcsIGZyYW1lKToKKyAgICAgICAgc2VsZi5mYWlsKCJpc2F0dHkgaHVuZyIpCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVidWcoIkNhbGxpbmcgbWFzdGVyX29wZW4oKSIpCisgICAgICAgICAgICBtYXN0ZXJfZmQsIHNsYXZlX25hbWUgPSBwdHkubWFzdGVyX29wZW4oKQorICAgICAgICAgICAgZGVidWcoIkdvdCBtYXN0ZXJfZmQgJyVkJywgc2xhdmVfbmFtZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAobWFzdGVyX2ZkLCBzbGF2ZV9uYW1lKSkKKyAgICAgICAgICAgIGRlYnVnKCJDYWxsaW5nIHNsYXZlX29wZW4oJXIpIiAlIChzbGF2ZV9uYW1lLCkpCisgICAgICAgICAgICBzbGF2ZV9mZCA9IHB0eS5zbGF2ZV9vcGVuKHNsYXZlX25hbWUpCisgICAgICAgICAgICBkZWJ1ZygiR290IHNsYXZlX2ZkICclZCciICUgc2xhdmVfZmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyAiIEFuIG9wdGlvbmFsIGZlYXR1cmUgY291bGQgbm90IGJlIGltcG9ydGVkICIgLi4uID8KKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAiUHNldWRvLXRlcm1pbmFscyAoc2VlbWluZ2x5KSBub3QgZnVuY3Rpb25hbC4iCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLmlzYXR0eShzbGF2ZV9mZCksICdzbGF2ZV9mZCBpcyBub3QgYSB0dHknKQorCisgICAgICAgICMgU29sYXJpcyByZXF1aXJlcyByZWFkaW5nIHRoZSBmZCBiZWZvcmUgYW55dGhpbmcgaXMgcmV0dXJuZWQuCisgICAgICAgICMgTXkgZ3Vlc3MgaXMgdGhhdCBzaW5jZSB3ZSBvcGVuIGFuZCBjbG9zZSB0aGUgc2xhdmUgZmQKKyAgICAgICAgIyBpbiBtYXN0ZXJfb3BlbigpLCB3ZSBuZWVkIHRvIHJlYWQgdGhlIEVPRi4KKworICAgICAgICAjIEVuc3VyZSB0aGUgZmQgaXMgbm9uLWJsb2NraW5nIGluIGNhc2UgdGhlcmUncyBub3RoaW5nIHRvIHJlYWQuCisgICAgICAgIG9yaWdfZmxhZ3MgPSBmY250bC5mY250bChtYXN0ZXJfZmQsIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZjbnRsLmZjbnRsKG1hc3Rlcl9mZCwgZmNudGwuRl9TRVRGTCwgb3JpZ19mbGFncyB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMxID0gb3MucmVhZChtYXN0ZXJfZmQsIDEwMjQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzMSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBR0FJTjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAjIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGZsYWdzLgorICAgICAgICBmY250bC5mY250bChtYXN0ZXJfZmQsIGZjbnRsLkZfU0VURkwsIG9yaWdfZmxhZ3MpCisKKyAgICAgICAgZGVidWcoIldyaXRpbmcgdG8gc2xhdmVfZmQiKQorICAgICAgICBvcy53cml0ZShzbGF2ZV9mZCwgVEVTVF9TVFJJTkdfMSkKKyAgICAgICAgczEgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSSB3aXNoIHRvIGJ1eSBhIGZpc2ggbGljZW5zZS5cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplX291dHB1dChzMSkpCisKKyAgICAgICAgZGVidWcoIldyaXRpbmcgY2h1bmtlZCBvdXRwdXQiKQorICAgICAgICBvcy53cml0ZShzbGF2ZV9mZCwgVEVTVF9TVFJJTkdfMls6NV0pCisgICAgICAgIG9zLndyaXRlKHNsYXZlX2ZkLCBURVNUX1NUUklOR18yWzU6XSkKKyAgICAgICAgczIgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm9yIG15IHBldCBmaXNoLCBFcmljLlxuJywgbm9ybWFsaXplX291dHB1dChzMikpCisKKyAgICAgICAgb3MuY2xvc2Uoc2xhdmVfZmQpCisgICAgICAgIG9zLmNsb3NlKG1hc3Rlcl9mZCkKKworCisgICAgZGVmIHRlc3RfZm9yayhzZWxmKToKKyAgICAgICAgZGVidWcoImNhbGxpbmcgcHR5LmZvcmsoKSIpCisgICAgICAgIHBpZCwgbWFzdGVyX2ZkID0gcHR5LmZvcmsoKQorICAgICAgICBpZiBwaWQgPT0gcHR5LkNISUxEOgorICAgICAgICAgICAgIyBzdGRvdXQgc2hvdWxkIGJlIGNvbm5lY3RlZCB0byBhIHR0eS4KKyAgICAgICAgICAgIGlmIG5vdCBvcy5pc2F0dHkoMSk6CisgICAgICAgICAgICAgICAgZGVidWcoIkNoaWxkJ3MgZmQgMSBpcyBub3QgYSB0dHk/ISIpCisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMykKKworICAgICAgICAgICAgIyBBZnRlciBwdHkuZm9yaygpLCB0aGUgY2hpbGQgc2hvdWxkIGFscmVhZHkgYmUgYSBzZXNzaW9uIGxlYWRlci4KKyAgICAgICAgICAgICMgKG9uIHRob3NlIHN5c3RlbXMgdGhhdCBoYXZlIHRoYXQgY29uY2VwdC4pCisgICAgICAgICAgICBkZWJ1ZygiSW4gY2hpbGQsIGNhbGxpbmcgb3Muc2V0c2lkKCkiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnNldHNpZCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIEdvb2QsIHdlIGFscmVhZHkgd2VyZSBzZXNzaW9uIGxlYWRlcgorICAgICAgICAgICAgICAgIGRlYnVnKCJHb29kOiBPU0Vycm9yIHdhcyByYWlzZWQuIikKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBIYXZlIHB0eSwgYnV0IG5vdCBzZXRzaWQoKT8KKyAgICAgICAgICAgICAgICBkZWJ1ZygiTm8gc2V0c2lkKCkgYXZhaWxhYmxlPyIpCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0aGlzIGVycm9yIHRvIHByb3BhZ2F0ZSwgZXNjYXBpbmcgdGhlIGNhbGwgdG8KKyAgICAgICAgICAgICAgICAjIG9zLl9leGl0KCkgYW5kIGNhdXNpbmcgdmVyeSBwZWN1bGlhciBiZWhhdmlvciBpbiB0aGUgY2FsbGluZworICAgICAgICAgICAgICAgICMgcmVncnRlc3QucHkgIQorICAgICAgICAgICAgICAgICMgTm90ZTogY291bGQgYWRkIHRyYWNlYmFjayBwcmludGluZyBoZXJlLgorICAgICAgICAgICAgICAgIGRlYnVnKCJBbiB1bmV4cGVjdGVkIGVycm9yIHdhcyByYWlzZWQuIikKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWJ1Zygib3Muc2V0c2lkKCkgc3VjY2VlZGVkISAoYmFkISkiKQorICAgICAgICAgICAgICAgIG9zLl9leGl0KDIpCisgICAgICAgICAgICBvcy5fZXhpdCg0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVidWcoIldhaXRpbmcgZm9yIGNoaWxkICglZCkgdG8gZmluaXNoLiIgJSBwaWQpCisgICAgICAgICAgICAjIEluIHZlcmJvc2UgbW9kZSwgd2UgaGF2ZSB0byBjb25zdW1lIHRoZSBkZWJ1ZyBvdXRwdXQgZnJvbSB0aGUKKyAgICAgICAgICAgICMgY2hpbGQgb3IgdGhlIGNoaWxkIHdpbGwgYmxvY2ssIGNhdXNpbmcgdGhpcyB0ZXN0IHRvIGhhbmcgaW4gdGhlCisgICAgICAgICAgICAjIHBhcmVudCdzIHdhaXRwaWQoKSBjYWxsLiAgVGhlIGNoaWxkIGJsb2NrcyBhZnRlciBhCisgICAgICAgICAgICAjIHBsYXRmb3JtLWRlcGVuZGVudCBhbW91bnQgb2YgZGF0YSBpcyB3cml0dGVuIHRvIGl0cyBmZC4gIE9uCisgICAgICAgICAgICAjIExpbnV4IDIuNiwgaXQncyA0MDAwIGJ5dGVzIGFuZCB0aGUgY2hpbGQgd29uJ3QgYmxvY2ssIGJ1dCBvbiBPUworICAgICAgICAgICAgIyBYIGV2ZW4gdGhlIHNtYWxsIHdyaXRlcyBpbiB0aGUgY2hpbGQgYWJvdmUgd2lsbCBibG9jayBpdC4gIEFsc28KKyAgICAgICAgICAgICMgb24gTGludXgsIHRoZSByZWFkKCkgd2lsbCByYWlzZSBhbiBPU0Vycm9yIChpbnB1dC9vdXRwdXQgZXJyb3IpCisgICAgICAgICAgICAjIHdoZW4gaXQgdHJpZXMgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBidXQgdGhlIGNoaWxkJ3MKKyAgICAgICAgICAgICMgYWxyZWFkeSBleGl0ZWQsIHNvIGNhdGNoIGFuZCBkaXNjYXJkIHRob3NlIGV4Y2VwdGlvbnMuICBJdCdzIG5vdAorICAgICAgICAgICAgIyB3b3J0aCBjaGVja2luZyBmb3IgRUlPLgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgODApCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShkYXRhLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKSkKKworICAgICAgICAgICAgIyNsaW5lID0gb3MucmVhZChtYXN0ZXJfZmQsIDgwKQorICAgICAgICAgICAgIyNsaW5lcyA9IGxpbmUucmVwbGFjZSgnXHJcbicsICdcbicpLnNwbGl0KCdcbicpCisgICAgICAgICAgICAjI2lmIEZhbHNlIGFuZCBsaW5lcyAhPSBbJ0luIGNoaWxkLCBjYWxsaW5nIG9zLnNldHNpZCgpJywKKyAgICAgICAgICAgICMjICAgICAgICAgICAgICdHb29kOiBPU0Vycm9yIHdhcyByYWlzZWQuJywgJyddOgorICAgICAgICAgICAgIyMgICAgcmFpc2UgVGVzdEZhaWxlZCgiVW5leHBlY3RlZCBvdXRwdXQgZnJvbSBjaGlsZDogJXIiICUgbGluZSkKKworICAgICAgICAgICAgKHBpZCwgc3RhdHVzKSA9IG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgcmVzID0gc3RhdHVzID4+IDgKKyAgICAgICAgICAgIGRlYnVnKCJDaGlsZCAoJWQpIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCAoJWQpLiIgJSAocGlkLCByZXMsIHN0YXR1cykpCisgICAgICAgICAgICBpZiByZXMgPT0gMToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkNoaWxkIHJhaXNlZCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBpbiBvcy5zZXRzaWQoKSIpCisgICAgICAgICAgICBlbGlmIHJlcyA9PSAyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicHR5LmZvcmsoKSBmYWlsZWQgdG8gbWFrZSBjaGlsZCBhIHNlc3Npb24gbGVhZGVyLiIpCisgICAgICAgICAgICBlbGlmIHJlcyA9PSAzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ2hpbGQgc3Bhd25lZCBieSBwdHkuZm9yaygpIGRpZCBub3QgaGF2ZSBhIHR0eSBhcyBzdGRvdXQiKQorICAgICAgICAgICAgZWxpZiByZXMgIT0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInB0eS5mb3JrKCkgZmFpbGVkIGZvciB1bmtub3duIHJlYXNvbnMuIikKKworICAgICAgICAgICAgIyNkZWJ1ZygiUmVhZGluZyBmcm9tIG1hc3Rlcl9mZCBub3cgdGhhdCB0aGUgY2hpbGQgaGFzIGV4aXRlZCIpCisgICAgICAgICAgICAjI3RyeToKKyAgICAgICAgICAgICMjICAgIHMxID0gb3MucmVhZChtYXN0ZXJfZmQsIDEwMjQpCisgICAgICAgICAgICAjI2V4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICMjICAgIHBhc3MKKyAgICAgICAgICAgICMjZWxzZToKKyAgICAgICAgICAgICMjICAgIHJhaXNlIFRlc3RGYWlsZWQoIlJlYWQgZnJvbSBtYXN0ZXJfZmQgZGlkIG5vdCByYWlzZSBleGNlcHRpb24iKQorCisgICAgICAgIG9zLmNsb3NlKG1hc3Rlcl9mZCkKKworICAgICAgICAjIHB0eS5mb3JrKCkgcGFzc2VkLgorCisKK2NsYXNzIFNtYWxsUHR5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRoZXNlIHRlc3RzIGRvbid0IHNwYXduIGNoaWxkcmVuIG9yIGhhbmcuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub3JpZ19zdGRpbl9maWxlbm8gPSBwdHkuU1RESU5fRklMRU5PCisgICAgICAgIHNlbGYub3JpZ19zdGRvdXRfZmlsZW5vID0gcHR5LlNURE9VVF9GSUxFTk8KKyAgICAgICAgc2VsZi5vcmlnX3B0eV9zZWxlY3QgPSBwdHkuc2VsZWN0CisgICAgICAgIHNlbGYuZmRzID0gW10gICMgQSBsaXN0IG9mIGZpbGUgZGVzY3JpcHRvcnMgdG8gY2xvc2UuCisgICAgICAgIHNlbGYuc2VsZWN0X3JmZHNfbGVuZ3RocyA9IFtdCisgICAgICAgIHNlbGYuc2VsZWN0X3JmZHNfcmVzdWx0cyA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHB0eS5TVERJTl9GSUxFTk8gPSBzZWxmLm9yaWdfc3RkaW5fZmlsZW5vCisgICAgICAgIHB0eS5TVERPVVRfRklMRU5PID0gc2VsZi5vcmlnX3N0ZG91dF9maWxlbm8KKyAgICAgICAgcHR5LnNlbGVjdCA9IHNlbGYub3JpZ19wdHlfc2VsZWN0CisgICAgICAgIGZvciBmZCBpbiBzZWxmLmZkczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX3BpcGUoc2VsZik6CisgICAgICAgIHBpcGVfZmRzID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuZmRzLmV4dGVuZChwaXBlX2ZkcykKKyAgICAgICAgcmV0dXJuIHBpcGVfZmRzCisKKyAgICBkZWYgX21vY2tfc2VsZWN0KHNlbGYsIHJmZHMsIHdmZHMsIHhmZHMpOgorICAgICAgICAjIFRoaXMgd2lsbCByYWlzZSBJbmRleEVycm9yIHdoZW4gbm8gbW9yZSBleHBlY3RlZCBjYWxscyBleGlzdC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlbGVjdF9yZmRzX2xlbmd0aHMucG9wKDApLCBsZW4ocmZkcykpCisgICAgICAgIHJldHVybiBzZWxmLnNlbGVjdF9yZmRzX3Jlc3VsdHMucG9wKDApLCBbXSwgW10KKworICAgIGRlZiB0ZXN0X19jb3B5X3RvX2VhY2goc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhlIG5vcm1hbCBkYXRhIGNhc2Ugb24gYm90aCBtYXN0ZXJfZmQgYW5kIHN0ZGluLiIiIgorICAgICAgICByZWFkX2Zyb21fc3Rkb3V0X2ZkLCBtb2NrX3N0ZG91dF9mZCA9IHNlbGYuX3BpcGUoKQorICAgICAgICBwdHkuU1RET1VUX0ZJTEVOTyA9IG1vY2tfc3Rkb3V0X2ZkCisgICAgICAgIG1vY2tfc3RkaW5fZmQsIHdyaXRlX3RvX3N0ZGluX2ZkID0gc2VsZi5fcGlwZSgpCisgICAgICAgIHB0eS5TVERJTl9GSUxFTk8gPSBtb2NrX3N0ZGluX2ZkCisgICAgICAgIHNvY2tldHBhaXIgPSBzb2NrZXQuc29ja2V0cGFpcigpCisgICAgICAgIG1hc3RlcnMgPSBbcy5maWxlbm8oKSBmb3IgcyBpbiBzb2NrZXRwYWlyXQorICAgICAgICBzZWxmLmZkcy5leHRlbmQobWFzdGVycykKKworICAgICAgICAjIEZlZWQgZGF0YS4gIFNtYWxsZXIgdGhhbiBQSVBFQlVGLiAgVGhlc2Ugd3JpdGVzIHdpbGwgbm90IGJsb2NrLgorICAgICAgICBvcy53cml0ZShtYXN0ZXJzWzFdLCBiJ2Zyb20gbWFzdGVyJykKKyAgICAgICAgb3Mud3JpdGUod3JpdGVfdG9fc3RkaW5fZmQsIGInZnJvbSBzdGRpbicpCisKKyAgICAgICAgIyBFeHBlY3QgdHdvIHNlbGVjdCBjYWxscywgdGhlIGxhc3Qgb25lIHdpbGwgY2F1c2UgSW5kZXhFcnJvcgorICAgICAgICBwdHkuc2VsZWN0ID0gc2VsZi5fbW9ja19zZWxlY3QKKyAgICAgICAgc2VsZi5zZWxlY3RfcmZkc19sZW5ndGhzLmFwcGVuZCgyKQorICAgICAgICBzZWxmLnNlbGVjdF9yZmRzX3Jlc3VsdHMuYXBwZW5kKFttb2NrX3N0ZGluX2ZkLCBtYXN0ZXJzWzBdXSkKKyAgICAgICAgc2VsZi5zZWxlY3RfcmZkc19sZW5ndGhzLmFwcGVuZCgyKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwdHkuX2NvcHkobWFzdGVyc1swXSkKKworICAgICAgICAjIFRlc3QgdGhhdCB0aGUgcmlnaHQgZGF0YSB3ZW50IHRvIHRoZSByaWdodCBwbGFjZXMuCisgICAgICAgIHJmZHMgPSBzZWxlY3Quc2VsZWN0KFtyZWFkX2Zyb21fc3Rkb3V0X2ZkLCBtYXN0ZXJzWzFdXSwgW10sIFtdLCAwKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtyZWFkX2Zyb21fc3Rkb3V0X2ZkLCBtYXN0ZXJzWzFdXSwgcmZkcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5yZWFkKHJlYWRfZnJvbV9zdGRvdXRfZmQsIDIwKSwgYidmcm9tIG1hc3RlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChtYXN0ZXJzWzFdLCAyMCksIGInZnJvbSBzdGRpbicpCisKKyAgICBkZWYgdGVzdF9fY29weV9lb2Zfb25fYWxsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHRoZSBlbXB0eSByZWFkIEVPRiBjYXNlIG9uIGJvdGggbWFzdGVyX2ZkIGFuZCBzdGRpbi4iIiIKKyAgICAgICAgcmVhZF9mcm9tX3N0ZG91dF9mZCwgbW9ja19zdGRvdXRfZmQgPSBzZWxmLl9waXBlKCkKKyAgICAgICAgcHR5LlNURE9VVF9GSUxFTk8gPSBtb2NrX3N0ZG91dF9mZAorICAgICAgICBtb2NrX3N0ZGluX2ZkLCB3cml0ZV90b19zdGRpbl9mZCA9IHNlbGYuX3BpcGUoKQorICAgICAgICBwdHkuU1RESU5fRklMRU5PID0gbW9ja19zdGRpbl9mZAorICAgICAgICBzb2NrZXRwYWlyID0gc29ja2V0LnNvY2tldHBhaXIoKQorICAgICAgICBtYXN0ZXJzID0gW3MuZmlsZW5vKCkgZm9yIHMgaW4gc29ja2V0cGFpcl0KKyAgICAgICAgc2VsZi5mZHMuZXh0ZW5kKG1hc3RlcnMpCisKKyAgICAgICAgb3MuY2xvc2UobWFzdGVyc1sxXSkKKyAgICAgICAgc29ja2V0cGFpclsxXS5jbG9zZSgpCisgICAgICAgIG9zLmNsb3NlKHdyaXRlX3RvX3N0ZGluX2ZkKQorCisgICAgICAgICMgRXhwZWN0IHR3byBzZWxlY3QgY2FsbHMsIHRoZSBsYXN0IG9uZSB3aWxsIGNhdXNlIEluZGV4RXJyb3IKKyAgICAgICAgcHR5LnNlbGVjdCA9IHNlbGYuX21vY2tfc2VsZWN0CisgICAgICAgIHNlbGYuc2VsZWN0X3JmZHNfbGVuZ3Rocy5hcHBlbmQoMikKKyAgICAgICAgc2VsZi5zZWxlY3RfcmZkc19yZXN1bHRzLmFwcGVuZChbbW9ja19zdGRpbl9mZCwgbWFzdGVyc1swXV0pCisgICAgICAgICMgV2UgZXhwZWN0IHRoYXQgYm90aCBmZHMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGZkcyBsaXN0IGFzIHRoZXkKKyAgICAgICAgIyBib3RoIGVuY291bnRlcmVkIGFuIEVPRiBiZWZvcmUgdGhlIHNlY29uZCBzZWxlY3QgY2FsbC4KKyAgICAgICAgc2VsZi5zZWxlY3RfcmZkc19sZW5ndGhzLmFwcGVuZCgwKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwdHkuX2NvcHkobWFzdGVyc1swXSkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgcnVuX3VuaXR0ZXN0KFNtYWxsUHR5VGVzdHMsIFB0eVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B3ZC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B3ZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTYxNjFhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHdkLnB5CkBAIC0wLDAgKzEsMTA5IEBACitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK3B3ZCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdwd2QnKQorCitjbGFzcyBQd2RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZW50cmllcyA9IHB3ZC5nZXRwd2FsbCgpCisgICAgICAgIGVudHJpZXNieW5hbWUgPSB7fQorICAgICAgICBlbnRyaWVzYnl1aWQgPSB7fQorCisgICAgICAgIGZvciBlIGluIGVudHJpZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlKSwgNykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVswXSwgZS5wd19uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfbmFtZSwgYmFzZXN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVsxXSwgZS5wd19wYXNzd2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19wYXNzd2QsIGJhc2VzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbMl0sIGUucHdfdWlkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfdWlkLCAoaW50LCBsb25nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVszXSwgZS5wd19naWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19naWQsIChpbnQsIGxvbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzRdLCBlLnB3X2dlY29zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfZ2Vjb3MsIGJhc2VzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbNV0sIGUucHdfZGlyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfZGlyLCBiYXNlc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzZdLCBlLnB3X3NoZWxsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfc2hlbGwsIGJhc2VzdHJpbmcpCisKKyAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyB3b24ndCB3b3JrLCBiZWNhdXNlIG9mIGR1cGxpY2F0ZSBlbnRyaWVzCisgICAgICAgICAgICAjIGZvciBvbmUgdWlkCisgICAgICAgICAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwocHdkLmdldHB3dWlkKGUucHdfdWlkKSwgZSkKKyAgICAgICAgICAgICMgaW5zdGVhZCBvZiB0aGlzIGNvbGxlY3QgYWxsIGVudHJpZXMgZm9yIG9uZSB1aWQKKyAgICAgICAgICAgICMgYW5kIGNoZWNrIGFmdGVyd2FyZHMKKyAgICAgICAgICAgIGVudHJpZXNieW5hbWUuc2V0ZGVmYXVsdChlLnB3X25hbWUsIFtdKS5hcHBlbmQoZSkKKyAgICAgICAgICAgIGVudHJpZXNieXVpZC5zZXRkZWZhdWx0KGUucHdfdWlkLCBbXSkuYXBwZW5kKGUpCisKKyAgICAgICAgaWYgbGVuKGVudHJpZXMpID4gMTAwMDogICMgSHVnZSBwYXNzd2QgZmlsZSAoTklTPykgLS0gc2tpcCB0aGUgcmVzdAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZSBlbnRyeSByZXR1cm5lZCBieSBnZXRwd3VpZCgpCisgICAgICAgICMgZm9yIGVhY2ggdWlkIGlzIGFtb25nIHRob3NlIGZyb20gZ2V0cHdhbGwoKSBmb3IgdGhpcyB1aWQKKyAgICAgICAgZm9yIGUgaW4gZW50cmllczoKKyAgICAgICAgICAgIGlmIG5vdCBlWzBdIG9yIGVbMF0gPT0gJysnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgc2tpcCBOSVMgZW50cmllcyBldGMuCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHB3ZC5nZXRwd25hbShlLnB3X25hbWUpLCBlbnRyaWVzYnluYW1lW2UucHdfbmFtZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHB3ZC5nZXRwd3VpZChlLnB3X3VpZCksIGVudHJpZXNieXVpZFtlLnB3X3VpZF0pCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHdkLmdldHB3dWlkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHB3ZC5nZXRwd3VpZCwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwd2QuZ2V0cHduYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHdkLmdldHB3bmFtLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwd2QuZ2V0cHdhbGwsIDQyKQorCisgICAgICAgICMgdHJ5IHRvIGdldCBzb21lIGVycm9ycworICAgICAgICBieW5hbWVzID0ge30KKyAgICAgICAgYnl1aWRzID0ge30KKyAgICAgICAgZm9yIChuLCBwLCB1LCBnLCBnZWNvcywgZCwgcykgaW4gcHdkLmdldHB3YWxsKCk6CisgICAgICAgICAgICBieW5hbWVzW25dID0gdQorICAgICAgICAgICAgYnl1aWRzW3VdID0gbgorCisgICAgICAgIGFsbG5hbWVzID0gYnluYW1lcy5rZXlzKCkKKyAgICAgICAgbmFtZWkgPSAwCisgICAgICAgIGZha2VuYW1lID0gYWxsbmFtZXNbbmFtZWldCisgICAgICAgIHdoaWxlIGZha2VuYW1lIGluIGJ5bmFtZXM6CisgICAgICAgICAgICBjaGFycyA9IGxpc3QoZmFrZW5hbWUpCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNoYXJzKSk6CisgICAgICAgICAgICAgICAgaWYgY2hhcnNbaV0gPT0gJ3onOgorICAgICAgICAgICAgICAgICAgICBjaGFyc1tpXSA9ICdBJworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgY2hhcnNbaV0gPT0gJ1onOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoYXJzW2ldID0gY2hyKG9yZChjaGFyc1tpXSkgKyAxKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1laSA9IG5hbWVpICsgMQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZmFrZW5hbWUgPSBhbGxuYW1lc1tuYW1laV0KKyAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uIGlmIHNvLCBqdXN0IGZvcmdldCBpdAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmFrZW5hbWUgPSAnJy5qb2luKGNoYXJzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwd2QuZ2V0cHduYW0sIGZha2VuYW1lKQorCisgICAgICAgICMgSW4gc29tZSBjYXNlcywgYnl1aWRzIGlzbid0IGEgY29tcGxldGUgbGlzdCBvZiBhbGwgdXNlcnMgaW4gdGhlCisgICAgICAgICMgc3lzdGVtLCBzbyBpZiB3ZSB0cnkgdG8gcGljayBhIHZhbHVlIG5vdCBpbiBieXVpZHMgKHZpYSBhIHBlcnR1cmJpbmcKKyAgICAgICAgIyBsb29wLCBzYXkpLCBwd2QuZ2V0cHd1aWQoKSBtaWdodCBzdGlsbCBiZSBhYmxlIHRvIGZpbmQgZGF0YSBmb3IgdGhhdAorICAgICAgICAjIHVpZC4gVXNpbmcgc3lzLm1heGludCBtYXkgcHJvdm9rZSB0aGUgc2FtZSBwcm9ibGVtcywgYnV0IGhvcGVmdWxseQorICAgICAgICAjIGl0IHdpbGwgYmUgYSBtb3JlIHJlcGVhdGFibGUgZmFpbHVyZS4KKyAgICAgICAgZmFrZXVpZCA9IHN5cy5tYXhpbnQKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmYWtldWlkLCBieXVpZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwd2QuZ2V0cHd1aWQsIGZha2V1aWQpCisKKyAgICAgICAgIyAtMSBzaG91bGRuJ3QgYmUgYSB2YWxpZCB1aWQgYmVjYXVzZSBpdCBoYXMgYSBzcGVjaWFsIG1lYW5pbmcgaW4gbWFueQorICAgICAgICAjIHVpZC1yZWxhdGVkIGZ1bmN0aW9ucworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcHdkLmdldHB3dWlkLCAtMSkKKyAgICAgICAgIyBzaG91bGQgYmUgb3V0IG9mIHVpZF90IHJhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwd2QuZ2V0cHd1aWQsIDIqKjEyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHB3ZC5nZXRwd3VpZCwgLTIqKjEyOCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUHdkVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHkza3dhcm4ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9weTNrd2Fybi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWZkOGExCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHkza3dhcm4ucHkKQEAgLTAsMCArMSw0MjYgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2hlY2tfcHkza193YXJuaW5ncywgQ2xlYW5JbXBvcnQsIHJ1bl91bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCisKK2lmIG5vdCBzeXMucHkza3dhcm5pbmc6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJyVzIG11c3QgYmUgcnVuIHdpdGggdGhlIC0zIGZsYWcnICUgX19uYW1lX18pCisKK3RyeToKKyAgICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBfX3dhcm5pbmdyZWdpc3RyeV9fIGFzIF9yZWdpc3RyeQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGRlZiBjaGVja19kZXByZWNhdGVkX21vZHVsZShtb2R1bGVfbmFtZSk6CisgICAgICAgIHJldHVybiBGYWxzZQorZWxzZToKKyAgICBwYXN0X3dhcm5pbmdzID0gX3JlZ2lzdHJ5LmtleXMoKQorICAgIGRlbCBfcmVnaXN0cnkKKyAgICBkZWYgY2hlY2tfZGVwcmVjYXRlZF9tb2R1bGUobW9kdWxlX25hbWUpOgorICAgICAgICAiIiJMb29rdXAgdGhlIHBhc3Qgd2FybmluZ3MgZm9yIG1vZHVsZSBhbHJlYWR5IGxvYWRlZCB1c2luZworICAgICAgICB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSguLi4sIGRlcHJlY2F0ZWQ9VHJ1ZSkKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBhbnkobW9kdWxlX25hbWUgaW4gbXNnIGFuZCAnIHJlbW92ZWQnIGluIG1zZworICAgICAgICAgICAgICAgICAgIGFuZCBpc3N1YmNsYXNzKGNscywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgIGFuZCAoJyBtb2R1bGUnIGluIG1zZyBvciAnIHBhY2thZ2UnIGluIG1zZykKKyAgICAgICAgICAgICAgICAgICBmb3IgKG1zZywgY2xzLCBsaW5lKSBpbiBwYXN0X3dhcm5pbmdzKQorCitkZWYgcmVzZXRfbW9kdWxlX3JlZ2lzdHJ5KG1vZHVsZSk6CisgICAgdHJ5OgorICAgICAgICByZWdpc3RyeSA9IG1vZHVsZS5fX3dhcm5pbmdyZWdpc3RyeV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgcmVnaXN0cnkuY2xlYXIoKQorCitjbGFzcyBUZXN0UHkzS1dhcm5pbmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRXYXJuaW5nKHNlbGYsIF8sIHdhcm5pbmcsIGV4cGVjdGVkX21lc3NhZ2UpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3YXJuaW5nLm1lc3NhZ2UpLCBleHBlY3RlZF9tZXNzYWdlKQorCisgICAgZGVmIGFzc2VydE5vV2FybmluZyhzZWxmLCBfLCByZWNvcmRlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlY29yZGVyLndhcm5pbmdzKSwgMCkKKworICAgIGRlZiB0ZXN0X2JhY2txdW90ZShzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAnYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQgaW4gMy54OyB1c2UgcmVwcigpJworICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKGV4cGVjdGVkLCBTeW50YXhXYXJuaW5nKSk6CisgICAgICAgICAgICBleGVjICJgMmAiIGluIHt9CisKKyAgICBkZWYgdGVzdF9wYXJlbl9hcmdfbmFtZXMoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ3BhcmVudGhlc2l6ZWQgYXJndW1lbnQgbmFtZXMgYXJlIGludmFsaWQgaW4gMy54JworICAgICAgICBkZWYgY2hlY2socyk6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKGV4cGVjdGVkLCBTeW50YXhXYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgZXhlYyBzIGluIHt9CisgICAgICAgIGNoZWNrKCJkZWYgZigoeCkpOiBwYXNzIikKKyAgICAgICAgY2hlY2soImRlZiBmKCgoKHgpKSksICh5KSk6IHBhc3MiKQorICAgICAgICBjaGVjaygiZGVmIGYoKHgpLCAoKCh5KSkpLCBtPTMyKTogcGFzcyIpCisgICAgICAgICMgU29tZXRoaW5nIGxpa2UgZGVmIGYoKGEsIChiKSkpOiBwYXNzIHdpbGwgcmFpc2UgdGhlIHR1cGxlCisgICAgICAgICMgdW5wYWNraW5nIHdhcm5pbmcuCisKKyAgICBkZWYgdGVzdF9mb3JiaWRkZW5fbmFtZXMoc2VsZik6CisgICAgICAgICMgU28gd2UgZG9uJ3Qgc2NyZXcgdXAgb3VyIGdsb2JhbHMKKyAgICAgICAgZGVmIHNhZmVfZXhlYyhleHByKToKKyAgICAgICAgICAgIGRlZiBmKCoqa3dhcmdzKTogcGFzcworICAgICAgICAgICAgZXhlYyBleHByIGluIHsnZicgOiBmfQorCisgICAgICAgIHRlc3RzID0gWygiVHJ1ZSIsICJhc3NpZ25tZW50IHRvIFRydWUgb3IgRmFsc2UgaXMgZm9yYmlkZGVuIGluIDMueCIpLAorICAgICAgICAgICAgICAgICAoIkZhbHNlIiwgImFzc2lnbm1lbnQgdG8gVHJ1ZSBvciBGYWxzZSBpcyBmb3JiaWRkZW4gaW4gMy54IiksCisgICAgICAgICAgICAgICAgICgibm9ubG9jYWwiLCAibm9ubG9jYWwgaXMgYSBrZXl3b3JkIGluIDMueCIpXQorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKCcnLCBTeW50YXhXYXJuaW5nKSkgYXMgdzoKKyAgICAgICAgICAgIGZvciBrZXl3b3JkLCBleHBlY3RlZCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoInswfSA9IEZhbHNlIi5mb3JtYXQoa2V5d29yZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2FmZV9leGVjKCJvYmouezB9ID0gVHJ1ZSIuZm9ybWF0KGtleXdvcmQpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgc2FmZV9leGVjKCJkZWYgezB9KCk6IHBhc3MiLmZvcm1hdChrZXl3b3JkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgc2FmZV9leGVjKCJjbGFzcyB7MH06IHBhc3MiLmZvcm1hdChrZXl3b3JkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgc2FmZV9leGVjKCJkZWYgZih7MH09NDMpOiBwYXNzIi5mb3JtYXQoa2V5d29yZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHcucmVzZXQoKQorCisKKyAgICBkZWYgdGVzdF90eXBlX2luZXF1YWxpdHlfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ3R5cGUgaW5lcXVhbGl0eSBjb21wYXJpc29ucyBub3Qgc3VwcG9ydGVkIGluIDMueCcKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhpbnQgPCBzdHIsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcodHlwZSA8IG9iamVjdCwgdywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9vYmplY3RfaW5lcXVhbGl0eV9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAnY29tcGFyaW5nIHVuZXF1YWwgdHlwZXMgbm90IHN1cHBvcnRlZCBpbiAzLngnCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoc3RyIDwgW10sIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcob2JqZWN0KCkgPCAoMSwgMiksIHcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZGljdF9pbmVxdWFsaXR5X2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdkaWN0IGluZXF1YWxpdHkgY29tcGFyaXNvbnMgbm90IHN1cHBvcnRlZCBpbiAzLngnCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoe30gPCB7MjozfSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyh7fSA8PSB7fSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyh7fSA+IHsyOjN9LCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHsyOjN9ID49IHt9LCB3LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2NlbGxfaW5lcXVhbGl0eV9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAnY2VsbCBjb21wYXJpc29ucyBub3Qgc3VwcG9ydGVkIGluIDMueCcKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgICAgICByZXR1cm4gZworICAgICAgICBjZWxsMCwgPSBmKDApLmZ1bmNfY2xvc3VyZQorICAgICAgICBjZWxsMSwgPSBmKDEpLmZ1bmNfY2xvc3VyZQorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGNlbGwwID09IGNlbGwxLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGNlbGwwIDwgY2VsbDEsIHcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfY29kZV9pbmVxdWFsaXR5X2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdjb2RlIGluZXF1YWxpdHkgY29tcGFyaXNvbnMgbm90IHN1cHBvcnRlZCBpbiAzLngnCisgICAgICAgIGRlZiBmKHgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgZyh4KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhmLmZ1bmNfY29kZSA8IGcuZnVuY19jb2RlLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGYuZnVuY19jb2RlIDw9IGcuZnVuY19jb2RlLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGYuZnVuY19jb2RlID49IGcuZnVuY19jb2RlLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGYuZnVuY19jb2RlID4gZy5mdW5jX2NvZGUsIHcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbl9mdW5jdGlvbl9vcl9tZXRob2RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gKCdidWlsdGluX2Z1bmN0aW9uX29yX21ldGhvZCAnCisgICAgICAgICAgICAgICAgICAgICdvcmRlciBjb21wYXJpc29ucyBub3Qgc3VwcG9ydGVkIGluIDMueCcpCisgICAgICAgIGZ1bmMgPSBldmFsCisgICAgICAgIG1ldGggPSB7fS5nZXQKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhmdW5jIDwgbWV0aCwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhmdW5jID4gbWV0aCwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhtZXRoIDw9IGZ1bmMsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcobWV0aCA+PSBmdW5jLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb1dhcm5pbmcobWV0aCA9PSBmdW5jLCB3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb1dhcm5pbmcobWV0aCAhPSBmdW5jLCB3KQorICAgICAgICAgICAgbGFtID0gbGFtYmRhIHg6IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm9XYXJuaW5nKGxhbSA9PSBmdW5jLCB3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb1dhcm5pbmcobGFtICE9IGZ1bmMsIHcpCisKKyAgICBkZWYgdGVzdF9mcmFtZV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9ICIlcyBoYXMgYmVlbiByZW1vdmVkIGluIDMueCIKKyAgICAgICAgZiA9IHN5cy5fZ2V0ZnJhbWUoMCkKKyAgICAgICAgZm9yIGF0dHIgaW4gKCJmX2V4Y190cmFjZWJhY2siLCAiZl9leGNfdmFsdWUiLCAiZl9leGNfdHlwZSIpOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSB0ZW1wbGF0ZSAlIGF0dHIKKyAgICAgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGdldGF0dHIoZiwgYXR0ciksIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzZXRhdHRyKGYsIGF0dHIsIE5vbmUpLCB3LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NvcnRfY21wX2FyZyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAidGhlIGNtcCBhcmd1bWVudCBpcyBub3Qgc3VwcG9ydGVkIGluIDMueCIKKyAgICAgICAgbHN0ID0gcmFuZ2UoNSkKKyAgICAgICAgY21wID0gbGFtYmRhIHgseTogLTEKKworICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGxzdC5zb3J0KGNtcD1jbXApLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHNvcnRlZChsc3QsIGNtcD1jbXApLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGxzdC5zb3J0KGNtcCksIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoc29ydGVkKGxzdCwgY21wKSwgdywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zeXNfZXhjX2NsZWFyKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdzeXMuZXhjX2NsZWFyKCkgbm90IHN1cHBvcnRlZCBpbiAzLng7IHVzZSBleGNlcHQgY2xhdXNlcycKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzeXMuZXhjX2NsZWFyKCksIHcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfbWV0aG9kc19tZW1iZXJzKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdfX21lbWJlcnNfXyBhbmQgX19tZXRob2RzX18gbm90IHN1cHBvcnRlZCBpbiAzLngnCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBfX21ldGhvZHNfXyA9IFsnYSddCisgICAgICAgICAgICBfX21lbWJlcnNfXyA9IFsnYiddCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhkaXIoYyksIHcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfc29mdHNwYWNlKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdmaWxlLnNvZnRzcGFjZSBub3Qgc3VwcG9ydGVkIGluIDMueCcKKyAgICAgICAgd2l0aCBmaWxlKF9fZmlsZV9fKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZi5zb2Z0c3BhY2UsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgZGVmIHNldCgpOgorICAgICAgICAgICAgICAgIGYuc29mdHNwYWNlID0gMAorICAgICAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoc2V0KCksIHcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfc2xpY2VfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU3BhbShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKTogcGFzcworICAgICAgICAgICAgZGVmIF9fc2V0c2xpY2VfXyhzZWxmLCBpLCBqLCB3aGF0KTogcGFzcworICAgICAgICAgICAgZGVmIF9fZGVsc2xpY2VfXyhzZWxmLCBpLCBqKTogcGFzcworICAgICAgICBjbGFzcyBFZ2c6CisgICAgICAgICAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGgpOiBwYXNzCisgICAgICAgICAgICBkZWYgX19zZXRzbGljZV9fKHNlbGYsIGksIGosIHdoYXQpOiBwYXNzCisgICAgICAgICAgICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIGksIGopOiBwYXNzCisKKyAgICAgICAgZXhwZWN0ZWQgPSAiaW4gMy54LCBfX3swfXNsaWNlX18gaGFzIGJlZW4gcmVtb3ZlZDsgdXNlIF9fezB9aXRlbV9fIgorCisgICAgICAgIGZvciBvYmogaW4gKFNwYW0oKSwgRWdnKCkpOgorICAgICAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcob2JqWzE6Ml0sIHcsIGV4cGVjdGVkLmZvcm1hdCgnZ2V0JykpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgZGVsIG9ialszOjRdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkLmZvcm1hdCgnZGVsJykpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgb2JqWzQ6NV0gPSAiZWdncyIKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQuZm9ybWF0KCdzZXQnKSkKKworICAgIGRlZiB0ZXN0X3R1cGxlX3BhcmFtZXRlcl91bnBhY2tpbmcoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCBpbiAzLngiCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoZXhwZWN0ZWQsIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgICAgIGV4ZWMgImRlZiBmKChhLCBiKSk6IHBhc3MiCisKKyAgICBkZWYgdGVzdF9idWZmZXIoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ2J1ZmZlcigpIG5vdCBzdXBwb3J0ZWQgaW4gMy54JworICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGJ1ZmZlcignYScpLCB3LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ZpbGVfeHJlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAoImYueHJlYWRsaW5lcygpIG5vdCBzdXBwb3J0ZWQgaW4gMy54LCAiCisgICAgICAgICAgICAgICAgICAgICJ0cnkgJ2ZvciBsaW5lIGluIGYnIGluc3RlYWQiKQorICAgICAgICB3aXRoIGZpbGUoX19maWxlX18pIGFzIGY6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhmLnhyZWFkbGluZXMoKSwgdywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9oYXNoX2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgIyBXaXRoIG9iamVjdCBhcyB0aGUgYmFzZSBjbGFzcworICAgICAgICAgICAgY2xhc3MgV2Fybk9ubHlDbXAob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBjbGFzcyBXYXJuT25seUVxKG9iamVjdCk6CisgICAgICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsCisgICAgICAgICAgICAgICAgICJPdmVycmlkaW5nIF9fZXFfXyBibG9ja3MgaW5oZXJpdGFuY2Ugb2YgX19oYXNoX18gaW4gMy54IikKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgY2xhc3MgV2FybkNtcEFuZEVxKG9iamVjdCk6CisgICAgICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOiBwYXNzCisgICAgICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsCisgICAgICAgICAgICAgICAgICJPdmVycmlkaW5nIF9fZXFfXyBibG9ja3MgaW5oZXJpdGFuY2Ugb2YgX19oYXNoX18gaW4gMy54IikKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgY2xhc3MgTm9XYXJuaW5nT25seUhhc2gob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQorICAgICAgICAgICAgIyBXaXRoIGFuIGludGVybWVkaWF0ZSBjbGFzcyBpbiB0aGUgaGVpcmFyY2h5CisgICAgICAgICAgICBjbGFzcyBEZWZpbmVzQWxsVGhyZWUob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6IHBhc3MKKyAgICAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcGFzcworICAgICAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgY2xhc3MgV2Fybk9ubHlDbXAoRGVmaW5lc0FsbFRocmVlKToKKyAgICAgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBjbGFzcyBXYXJuT25seUVxKERlZmluZXNBbGxUaHJlZSk6CisgICAgICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsCisgICAgICAgICAgICAgICAgICJPdmVycmlkaW5nIF9fZXFfXyBibG9ja3MgaW5oZXJpdGFuY2Ugb2YgX19oYXNoX18gaW4gMy54IikKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgY2xhc3MgV2FybkNtcEFuZEVxKERlZmluZXNBbGxUaHJlZSk6CisgICAgICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOiBwYXNzCisgICAgICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsCisgICAgICAgICAgICAgICAgICJPdmVycmlkaW5nIF9fZXFfXyBibG9ja3MgaW5oZXJpdGFuY2Ugb2YgX19oYXNoX18gaW4gMy54IikKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgY2xhc3MgTm9XYXJuaW5nT25seUhhc2goRGVmaW5lc0FsbFRocmVlKToKKyAgICAgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQorCisgICAgZGVmIHRlc3Rfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGlzQ2FsbGFibGUsIHNlcXVlbmNlSW5jbHVkZXMKKworICAgICAgICBjYWxsYWJsZV93YXJuID0gKCJvcGVyYXRvci5pc0NhbGxhYmxlKCkgaXMgbm90IHN1cHBvcnRlZCBpbiAzLnguICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlIGhhc2F0dHIob2JqLCAnX19jYWxsX18nKS4iKQorICAgICAgICBzZXFfd2FybiA9ICgib3BlcmF0b3Iuc2VxdWVuY2VJbmNsdWRlcygpIGlzIG5vdCBzdXBwb3J0ZWQgIgorICAgICAgICAgICAgICAgICAgICAiaW4gMy54LiBVc2Ugb3BlcmF0b3IuY29udGFpbnMoKS4iKQorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGlzQ2FsbGFibGUoc2VsZiksIHcsIGNhbGxhYmxlX3dhcm4pCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzZXF1ZW5jZUluY2x1ZGVzKHJhbmdlKDMpLCAyKSwgdywgc2VxX3dhcm4pCisKKworY2xhc3MgVGVzdFN0ZGxpYlJlbW92YWxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgdGVzdC50ZXN0YWxsIG5vdCB0ZXN0ZWQgYXMgaXQgZXhlY3V0ZXMgYWxsIHVuaXQgdGVzdHMgYXMgYW4KKyAgICAjIGltcG9ydCBzaWRlLWVmZmVjdC4KKyAgICBhbGxfcGxhdGZvcm1zID0gKCdhdWRpb2RldicsICdpbXB1dGlsJywgJ211dGV4JywgJ3VzZXInLCAnbmV3JywgJ3JleGVjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdCYXN0aW9uJywgJ2NvbXBpbGVyJywgJ2RpcmNhY2hlJywgJ21pbWV0b29scycsCisgICAgICAgICAgICAgICAgICAgICAgICAnZnBmb3JtYXQnLCAnaWhvb2tzJywgJ21obGliJywgJ3N0YXR2ZnMnLCAnaHRtbGxpYicsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2dtbGxpYicsICdyZmM4MjInLCAnc3VuYXVkaW8nKQorICAgIGluY2x1c2l2ZV9wbGF0Zm9ybXMgPSB7J2lyaXgnIDogKCdwdXJlJywgJ0FMJywgJ2FsJywgJ0NEJywgJ2NkJywgJ2NkZGInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZHBsYXllcicsICdDTCcsICdjbCcsICdERVZJQ0UnLCAnR0wnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbCcsICdFUlJOTycsICdGSUxFJywgJ0ZMJywgJ2ZscCcsICdmbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZtJywgJ0dFVCcsICdHTFdTJywgJ2ltZ2ZpbGUnLCAnSU4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJT0NUTCcsICdqcGVnJywgJ3BhbmVsJywgJ3BhbmVscGFyc2VyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVhZGNkJywgJ1NWJywgJ3RvcmdiJywgJ1dBSVQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhcndpbicgOiAoJ2F1dG9HSUwnLCAnQ2FyYm9uJywgJ09TQVRlcm1pbm9sb2d5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljZ2x1ZScsICdOYXYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1hY09TIHNob3VsZCAoYW5kIGRvZXMpIGdpdmUgYSBQeTNrV2FybmluZywgYnV0IG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBlYXJsaWVyIHRlc3RzIGFscmVhZHkgaW1wb3J0cyB0aGUgTWFjT1MgZXh0ZW5zaW9uIHdoaWNoIGNhdXNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgdGVzdCB0byBmYWlsLiBEaXNhYmxpbmcgdGhlIHRlc3QgZm9yICdNYWNPUycgYXZvaWRzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzcHVyaW91cyB0ZXN0IGZhaWx1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMnTWFjT1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWVwYWNrJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FldG9vbHMnLCAnYWV0eXBlcycsICdhcHBsZXNpbmdsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBsZXRyYXdtYWluJywgJ2FwcGxldHJ1bm5lcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmd2ZW11bGF0b3InLCAnYmdlbmxvY2F0aW9ucycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFYXN5RGlhbG9ncycsICdtYWNlcnJvcnMnLCAnbWFjb3N0b29scycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaW5kZXJ0b29scycsICdGcmFtZVdvcmsnLCAnaWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2Vuc3VpdGVtb2R1bGUnLCAnaWNvcGVuJywgJ21hY3Jlc291cmNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pbmlBRUZyYW1lJywgJ3BpbXAnLCAnUGl4TWFwV3JhcHBlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtaW5hbGNvbW1hbmQnLCAndmlkZW9yZWFkZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2J1aWx0aW5TdWl0ZXMnLCAnQ29kZVdhcnJpb3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhwbG9yZXInLCAnRmluZGVyJywgJ05ldHNjYXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ZFN1aXRlcycsICdTeXN0ZW1FdmVudHMnLCAnVGVybWluYWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2ZtZmlsZScsICdidW5kbGVidWlsZGVyJywgJ2J1aWxkdG9vbHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29sb3JQaWNrZXInLCAnQXVkaW9fbWFjJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3Vub3M1JyA6ICgnc3VuYXVkaW9kZXYnLCAnU1VOQVVESU9ERVYnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIG9wdGlvbmFsX21vZHVsZXMgPSAoJ2JzZGRiMTg1JywgJ0NhbnZhcycsICdkbCcsICdsaW51eGF1ZGlvZGV2JywgJ2ltYWdlb3AnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3N2JywgJ2JzZGRiJywgJ2RiaGFzaCcpCisKKyAgICBkZWYgY2hlY2tfcmVtb3ZhbChzZWxmLCBtb2R1bGVfbmFtZSwgb3B0aW9uYWw9RmFsc2UpOgorICAgICAgICAiIiJNYWtlIHN1cmUgdGhlIHNwZWNpZmllZCBtb2R1bGUsIHdoZW4gaW1wb3J0ZWQsIHJhaXNlcyBhCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZyBhbmQgc3BlY2lmaWVzIGl0c2VsZiBpbiB0aGUgbWVzc2FnZS4iIiIKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChtb2R1bGVfbmFtZSksIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCAiLisgKG1vZHVsZXxwYWNrYWdlKSAuKyByZW1vdmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgX19uYW1lX18pCisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCAiLisgcmVtb3ZlZCAuKyAobW9kdWxlfHBhY2thZ2UpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgX19uYW1lX18pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGVfbmFtZSwgbGV2ZWw9MCkKKyAgICAgICAgICAgIGV4Y2VwdCBEZXByZWNhdGlvbldhcm5pbmcgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlX25hbWUsIGV4Yy5hcmdzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIHdhcm5pbmcgZGlkbid0IGNvbnRhaW4gbW9kdWxlIG5hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG1vZHVsZV9uYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJOb24tb3B0aW9uYWwgbW9kdWxlIHswfSByYWlzZWQgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkltcG9ydEVycm9yLiIuZm9ybWF0KG1vZHVsZV9uYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBGb3IgZXh0ZW5zaW9uIG1vZHVsZXMsIGNoZWNrIHRoZSBfX3dhcm5pbmdyZWdpc3RyeV9fLgorICAgICAgICAgICAgICAgICMgVGhleSB3b24ndCByZXJ1biB0aGVpciBpbml0IGNvZGUgZXZlbiB3aXRoIENsZWFuSW1wb3J0LgorICAgICAgICAgICAgICAgIGlmIG5vdCBjaGVja19kZXByZWNhdGVkX21vZHVsZShtb2R1bGVfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRGVwcmVjYXRpb25XYXJuaW5nIG5vdCByYWlzZWQgZm9yIHswfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobW9kdWxlX25hbWUpKQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1faW5kZXBlbmRlbnRfcmVtb3ZhbHMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIG1vZHVsZXMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgcmFpc2UKKyAgICAgICAgIyB0aGUgcHJvcGVyIERlcHJlY2F0aW9uV2FybmluZy4KKyAgICAgICAgZm9yIG1vZHVsZV9uYW1lIGluIHNlbGYuYWxsX3BsYXRmb3JtczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVtb3ZhbChtb2R1bGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X3BsYXRmb3JtX3NwZWNpZmljX3JlbW92YWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIHJlbW92YWwgb2YgcGxhdGZvcm0tc3BlY2lmaWMgbW9kdWxlcy4KKyAgICAgICAgZm9yIG1vZHVsZV9uYW1lIGluIHNlbGYuaW5jbHVzaXZlX3BsYXRmb3Jtcy5nZXQoc3lzLnBsYXRmb3JtLCBbXSk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3JlbW92YWwobW9kdWxlX25hbWUsIG9wdGlvbmFsPVRydWUpCisKKyAgICBkZWYgdGVzdF9vcHRpb25hbF9tb2R1bGVfcmVtb3ZhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgcmVtb3ZhbCBvZiBtb2R1bGVzIHRoYXQgbWF5IG9yIG1heSBub3QgYmUgYnVpbHQuCisgICAgICAgIGZvciBtb2R1bGVfbmFtZSBpbiBzZWxmLm9wdGlvbmFsX21vZHVsZXM6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3JlbW92YWwobW9kdWxlX25hbWUsIG9wdGlvbmFsPVRydWUpCisKKyAgICBkZWYgdGVzdF9vc19wYXRoX3dhbGsoc2VsZik6CisgICAgICAgIG1zZyA9ICJJbiAzLngsIG9zLnBhdGgud2FsayBpcyByZW1vdmVkIGluIGZhdm9yIG9mIG9zLndhbGsuIgorICAgICAgICBkZWYgZHVtYm8od2hlcmUsIG5hbWVzLCBhcmdzKTogcGFzcworICAgICAgICBmb3IgcGF0aF9tb2QgaW4gKCJudHBhdGgiLCAibWFjcGF0aCIsICJvczJlbXhwYXRoIiwgInBvc2l4cGF0aCIpOgorICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhwYXRoX21vZCkKKyAgICAgICAgICAgIHJlc2V0X21vZHVsZV9yZWdpc3RyeShtb2QpCisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgICAgIG1vZC53YWxrKCJjcmFzaGVycyIsIGR1bWJvLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIody5tZXNzYWdlKSwgbXNnKQorCisgICAgZGVmIHRlc3RfcmVkdWNlX21vdmUoc2VsZik6CisgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGFkZAorICAgICAgICAjIHJlZHVjZSB0ZXN0cyBtYXkgaGF2ZSBhbHJlYWR5IHRyaWdnZXJlZCB0aGlzIHdhcm5pbmcKKyAgICAgICAgcmVzZXRfbW9kdWxlX3JlZ2lzdHJ5KHVuaXR0ZXN0LmNhc2UpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsICJyZWR1Y2UiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGVwcmVjYXRpb25XYXJuaW5nLCByZWR1Y2UsIGFkZCwgcmFuZ2UoMTApKQorCisgICAgZGVmIHRlc3RfbXV0YWJsZXN0cmluZ19yZW1vdmFsKHNlbGYpOgorICAgICAgICAjIFVzZXJTdHJpbmcuTXV0YWJsZVN0cmluZyBoYXMgYmVlbiByZW1vdmVkIGluIDMuMC4KKyAgICAgICAgaW1wb3J0IFVzZXJTdHJpbmcKKyAgICAgICAgIyBVc2VyU3RyaW5nIHRlc3RzIG1heSBoYXZlIGFscmVhZHkgdHJpZ2dlcmVkIHRoaXMgd2FybmluZworICAgICAgICByZXNldF9tb2R1bGVfcmVnaXN0cnkoVXNlclN0cmluZykKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgIi4qTXV0YWJsZVN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEZXByZWNhdGlvbldhcm5pbmcsIFVzZXJTdHJpbmcuTXV0YWJsZVN0cmluZykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RQeTNLV2FybmluZ3MsCisgICAgICAgICAgICAgICAgIFRlc3RTdGRsaWJSZW1vdmFscykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxOWRhMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKQEAgLTAsMCArMSw1NCBAQAoraW1wb3J0IGltcAoraW1wb3J0IG9zCitpbXBvcnQgcHlfY29tcGlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgUHlDb21waWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLnNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QucHknKQorICAgICAgICBzZWxmLnB5Y19wYXRoID0gc2VsZi5zb3VyY2VfcGF0aCArICdjJworICAgICAgICBzZWxmLmN3ZF9kcml2ZSA9IG9zLnBhdGguc3BsaXRkcml2ZShvcy5nZXRjd2QoKSlbMF0KKyAgICAgICAgIyBJbiB0aGVzZSB0ZXN0cyB3ZSBjb21wdXRlIHJlbGF0aXZlIHBhdGhzLiAgV2hlbiB1c2luZyBXaW5kb3dzLCB0aGUKKyAgICAgICAgIyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHBhdGggYW5kIHRoZSAnc2VsZi5zb3VyY2VfcGF0aCcgbWlnaHQgYmUKKyAgICAgICAgIyBvbiBkaWZmZXJlbnQgZHJpdmVzLiAgVGhlcmVmb3JlIHdlIG5lZWQgdG8gc3dpdGNoIHRvIHRoZSBkcml2ZSB3aGVyZQorICAgICAgICAjIHRoZSB0ZW1wb3Jhcnkgc291cmNlIGZpbGUgbGl2ZXMuCisgICAgICAgIGRyaXZlID0gb3MucGF0aC5zcGxpdGRyaXZlKHNlbGYuc291cmNlX3BhdGgpWzBdCisgICAgICAgIGlmIGRyaXZlOgorICAgICAgICAgICAgb3MuY2hkaXIoZHJpdmUpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc291cmNlX3BhdGgsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUoJ3ggPSAxMjNcbicpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJlY3RvcnkpCisgICAgICAgIGlmIHNlbGYuY3dkX2RyaXZlOgorICAgICAgICAgICAgb3MuY2hkaXIoc2VsZi5jd2RfZHJpdmUpCisKKyAgICBkZWYgdGVzdF9hYnNvbHV0ZV9wYXRoKHNlbGYpOgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgc2VsZi5weWNfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucHljX3BhdGgpKQorCisgICAgZGVmIHRlc3RfY3dkKHNlbGYpOgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihzZWxmLmRpcmVjdG9yeSkKKyAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG9zLnBhdGguYmFzZW5hbWUoc2VsZi5zb3VyY2VfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHNlbGYucHljX3BhdGgpKQorICAgICAgICBvcy5jaGRpcihjd2QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnB5Y19wYXRoKSkKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3BhdGgoc2VsZik6CisgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShvcy5wYXRoLnJlbHBhdGgoc2VsZi5zb3VyY2VfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnJlbHBhdGgoc2VsZi5weWNfcGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnB5Y19wYXRoKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUHlDb21waWxlVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B5Y2xici5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmRjNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CkBAIC0wLDAgKzEsMjAyIEBACisnJycKKyAgIFRlc3QgY2FzZXMgZm9yIHB5Y2xici5weQorICAgTmljayBNYXRoZXdzb24KKycnJworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgc3lzCitmcm9tIHR5cGVzIGltcG9ydCBDbGFzc1R5cGUsIEZ1bmN0aW9uVHlwZSwgTWV0aG9kVHlwZSwgQnVpbHRpbkZ1bmN0aW9uVHlwZQoraW1wb3J0IHB5Y2xicgorZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKKworU3RhdGljTWV0aG9kVHlwZSA9IHR5cGUoc3RhdGljbWV0aG9kKGxhbWJkYTogTm9uZSkpCitDbGFzc01ldGhvZFR5cGUgPSB0eXBlKGNsYXNzbWV0aG9kKGxhbWJkYSBjOiBOb25lKSkKKworIyBTaWxlbmNlIFB5M2sgd2FybmluZworaW1wb3J0X21vZHVsZSgnY29tbWFuZHMnLCBkZXByZWNhdGVkPVRydWUpCisKKyMgVGhpcyBuZXh0IGxpbmUgdHJpZ2dlcnMgYW4gZXJyb3Igb24gb2xkIHZlcnNpb25zIG9mIHB5Y2xici4KK2Zyb20gY29tbWFuZHMgaW1wb3J0IGdldHN0YXR1cworCisjIEhlcmUgd2UgdGVzdCB0aGUgcHl0aG9uIGNsYXNzIGJyb3dzZXIgY29kZS4KKyMKKyMgVGhlIG1haW4gZnVuY3Rpb24gaW4gdGhpcyBzdWl0ZSwgJ3Rlc3RNb2R1bGUnLCBjb21wYXJlcyB0aGUgb3V0cHV0CisjIG9mIHB5Y2xiciB3aXRoIHRoZSBpbnRyb3NwZWN0ZWQgbWVtYmVycyBvZiBhIG1vZHVsZS4gIEJlY2F1c2UgcHljbGJyCisjIGlzIGltcGVyZmVjdCAoYXMgZGVzaWduZWQpLCB0ZXN0TW9kdWxlIGlzIGNhbGxlZCB3aXRoIGEgc2V0IG9mCisjIG1lbWJlcnMgdG8gaWdub3JlLgorCitjbGFzcyBQeWNsYnJUZXN0KFRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRMaXN0RXEoc2VsZiwgbDEsIGwyLCBpZ25vcmUpOgorICAgICAgICAnJycgc3VjY2VlZCBpZmYge2wxfSAtIHtpZ25vcmV9ID09IHtsMn0gLSB7aWdub3JlfSAnJycKKyAgICAgICAgbWlzc2luZyA9IChzZXQobDEpIF4gc2V0KGwyKSkgLSBzZXQoaWdub3JlKQorICAgICAgICBpZiBtaXNzaW5nOgorICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAibDE9JXJcbmwyPSVyXG5pZ25vcmU9JXIiICUgKGwxLCBsMiwgaWdub3JlKQorICAgICAgICAgICAgc2VsZi5mYWlsKCIlciBtaXNzaW5nIiAlIG1pc3NpbmcucG9wKCkpCisKKyAgICBkZWYgYXNzZXJ0SGFzYXR0cihzZWxmLCBvYmosIGF0dHIsIGlnbm9yZSk6CisgICAgICAgICcnJyBzdWNjZWVkIGlmZiBoYXNhdHRyKG9iaixhdHRyKSBvciBhdHRyIGluIGlnbm9yZS4gJycnCisgICAgICAgIGlmIGF0dHIgaW4gaWdub3JlOiByZXR1cm4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIob2JqLCBhdHRyKTogcHJpbnQgIj8/PyIsIGF0dHIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIob2JqLCBhdHRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZCBoYXNhdHRyKCVyLCAlciknICUgKG9iaiwgYXR0cikpCisKKworICAgIGRlZiBhc3NlcnRIYXNrZXkoc2VsZiwgb2JqLCBrZXksIGlnbm9yZSk6CisgICAgICAgICcnJyBzdWNjZWVkIGlmZiBrZXkgaW4gb2JqIG9yIGtleSBpbiBpZ25vcmUuICcnJworICAgICAgICBpZiBrZXkgaW4gaWdub3JlOiByZXR1cm4KKyAgICAgICAgaWYga2V5IG5vdCBpbiBvYmo6CisgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIqKioiLCBrZXkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIG9iaikKKworICAgIGRlZiBhc3NlcnRFcXVhbHNPcklnbm9yZWQoc2VsZiwgYSwgYiwgaWdub3JlKToKKyAgICAgICAgJycnIHN1Y2NlZWQgaWZmIGEgPT0gYiBvciBhIGluIGlnbm9yZSBvciBiIGluIGlnbm9yZSAnJycKKyAgICAgICAgaWYgYSBub3QgaW4gaWdub3JlIGFuZCBiIG5vdCBpbiBpZ25vcmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICBkZWYgY2hlY2tNb2R1bGUoc2VsZiwgbW9kdWxlTmFtZSwgbW9kdWxlPU5vbmUsIGlnbm9yZT0oKSk6CisgICAgICAgICcnJyBzdWNjZWVkIGlmZiBweWNsYnIucmVhZG1vZHVsZV9leChtb2R1bGVuYW1lKSBjb3JyZXNwb25kcworICAgICAgICAgICAgdG8gdGhlIGFjdHVhbCBtb2R1bGUgb2JqZWN0LCBtb2R1bGUuICBBbnkgaWRlbnRpZmllcnMgaW4KKyAgICAgICAgICAgIGlnbm9yZSBhcmUgaWdub3JlZC4gICBJZiBubyBtb2R1bGUgaXMgcHJvdmlkZWQsIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgbW9kdWxlIGlzIGxvYWRlZCB3aXRoIF9faW1wb3J0X18uJycnCisKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICAjIEltcG9ydCBpdC4KKyAgICAgICAgICAgICMgKCc8c2lsbHk+JyBpcyB0byB3b3JrIGFyb3VuZCBhbiBBUEkgc2lsbGluZXNzIGluIF9faW1wb3J0X18pCisgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZU5hbWUsIGdsb2JhbHMoKSwge30sIFsnPHNpbGx5PiddKQorCisgICAgICAgIGRpY3QgPSBweWNsYnIucmVhZG1vZHVsZV9leChtb2R1bGVOYW1lKQorCisgICAgICAgIGRlZiBpc21ldGhvZChvY2xhc3MsIG9iaiwgbmFtZSk6CisgICAgICAgICAgICBjbGFzc2RpY3QgPSBvY2xhc3MuX19kaWN0X18KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBGdW5jdGlvblR5cGUpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNsYXNzZGljdFtuYW1lXSwgU3RhdGljTWV0aG9kVHlwZSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3QgIGlzaW5zdGFuY2Uob2JqLCBNZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgaWYgb2JqLmltX3NlbGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIChub3QgaXNpbnN0YW5jZShjbGFzc2RpY3RbbmFtZV0sIENsYXNzTWV0aG9kVHlwZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iai5pbV9zZWxmIGlzIG5vdCBvY2xhc3MpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2xhc3NkaWN0W25hbWVdLCBGdW5jdGlvblR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIG9iam5hbWUgPSBvYmouX19uYW1lX18KKyAgICAgICAgICAgIGlmIG9iam5hbWUuc3RhcnRzd2l0aCgiX18iKSBhbmQgbm90IG9iam5hbWUuZW5kc3dpdGgoIl9fIik6CisgICAgICAgICAgICAgICAgb2JqbmFtZSA9ICJfJXMlcyIgJSAob2JqLmltX2NsYXNzLl9fbmFtZV9fLCBvYmpuYW1lKQorICAgICAgICAgICAgcmV0dXJuIG9iam5hbWUgPT0gbmFtZQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSB0b3BsZXZlbCBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgYXJlIHRoZSBzYW1lLgorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZGljdC5pdGVtcygpOgorICAgICAgICAgICAgaWYgbmFtZSBpbiBpZ25vcmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SGFzYXR0cihtb2R1bGUsIG5hbWUsIGlnbm9yZSkKKyAgICAgICAgICAgIHB5X2l0ZW0gPSBnZXRhdHRyKG1vZHVsZSwgbmFtZSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHB5Y2xici5GdW5jdGlvbik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHB5X2l0ZW0sIChGdW5jdGlvblR5cGUsIEJ1aWx0aW5GdW5jdGlvblR5cGUpKQorICAgICAgICAgICAgICAgIGlmIHB5X2l0ZW0uX19tb2R1bGVfXyAhPSBtb2R1bGVOYW1lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAgICMgc2tpcCBmdW5jdGlvbnMgdGhhdCBjYW1lIGZyb20gc29tZXdoZXJlIGVsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5X2l0ZW0uX19tb2R1bGVfXywgdmFsdWUubW9kdWxlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlfaXRlbSwgKENsYXNzVHlwZSwgdHlwZSkpCisgICAgICAgICAgICAgICAgaWYgcHlfaXRlbS5fX21vZHVsZV9fICE9IG1vZHVsZU5hbWU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICAgIyBza2lwIGNsYXNzZXMgdGhhdCBjYW1lIGZyb20gc29tZXdoZXJlIGVsc2UKKworICAgICAgICAgICAgICAgIHJlYWxfYmFzZXMgPSBbYmFzZS5fX25hbWVfXyBmb3IgYmFzZSBpbiBweV9pdGVtLl9fYmFzZXNfX10KKyAgICAgICAgICAgICAgICBweWNsYnJfYmFzZXMgPSBbIGdldGF0dHIoYmFzZSwgJ25hbWUnLCBiYXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGJhc2UgaW4gdmFsdWUuc3VwZXIgXQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcShyZWFsX2Jhc2VzLCBweWNsYnJfYmFzZXMsIGlnbm9yZSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgImNsYXNzPSVzIiAlIHB5X2l0ZW0KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgICAgIGFjdHVhbE1ldGhvZHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBtIGluIHB5X2l0ZW0uX19kaWN0X18ua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc21ldGhvZChweV9pdGVtLCBnZXRhdHRyKHB5X2l0ZW0sIG0pLCBtKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbE1ldGhvZHMuYXBwZW5kKG0pCisgICAgICAgICAgICAgICAgZm91bmRNZXRob2RzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgbSBpbiB2YWx1ZS5tZXRob2RzLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbVs6Ml0gPT0gJ19fJyBhbmQgbVstMjpdICE9ICdfXyc6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1ldGhvZHMuYXBwZW5kKCdfJytuYW1lK20pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1ldGhvZHMuYXBwZW5kKG0pCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxKGZvdW5kTWV0aG9kcywgYWN0dWFsTWV0aG9kcywgaWdub3JlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5X2l0ZW0uX19tb2R1bGVfXywgdmFsdWUubW9kdWxlKQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzT3JJZ25vcmVkKHB5X2l0ZW0uX19uYW1lX18sIHZhbHVlLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZSkKKyAgICAgICAgICAgICAgICAgICAgIyBjYW4ndCBjaGVjayBmaWxlIG9yIGxpbmVubworICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiY2xhc3M9JXMiICUgcHlfaXRlbQorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICMgTm93IGNoZWNrIGZvciBtaXNzaW5nIHN0dWZmLgorICAgICAgICBkZWYgZGVmaW5lZF9pbihpdGVtLCBtb2R1bGUpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBDbGFzc1R5cGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLl9fbW9kdWxlX18gPT0gbW9kdWxlLl9fbmFtZV9fCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIEZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZnVuY19nbG9iYWxzIGlzIG1vZHVsZS5fX2RpY3RfXworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBuYW1lIGluIGRpcihtb2R1bGUpOgorICAgICAgICAgICAgaXRlbSA9IGdldGF0dHIobW9kdWxlLCBuYW1lKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCAgKENsYXNzVHlwZSwgRnVuY3Rpb25UeXBlKSk6CisgICAgICAgICAgICAgICAgaWYgZGVmaW5lZF9pbihpdGVtLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEhhc2tleShkaWN0LCBuYW1lLCBpZ25vcmUpCisKKyAgICBkZWYgdGVzdF9lYXN5KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdweWNsYnInKQorICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdkb2N0ZXN0JywgaWdub3JlPSgiRG9jVGVzdENhc2UiLCkpCisgICAgICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgcmZjODIyID0gaW1wb3J0X21vZHVsZSgncmZjODIyJywgZGVwcmVjYXRlZD1UcnVlKQorICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdyZmM4MjInLCByZmM4MjIpCisgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2RpZmZsaWInKQorCisgICAgZGVmIHRlc3RfZGVjb3JhdG9ycyhzZWxmKToKKyAgICAgICAgIyBYWFg6IFNlZSBjb21tZW50IGluIHB5Y2xicl9pbnB1dC5weSBmb3IgYSB0ZXN0IHRoYXQgd291bGQgZmFpbAorICAgICAgICAjICAgICAgaWYgaXQgd2VyZSBub3QgY29tbWVudGVkIG91dC4KKyAgICAgICAgIworICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCd0ZXN0LnB5Y2xicl9pbnB1dCcpCisKKyAgICBkZWYgdGVzdF9vdGhlcnMoc2VsZik6CisgICAgICAgIGNtID0gc2VsZi5jaGVja01vZHVsZQorCisgICAgICAgICMgVGhlc2Ugd2VyZSBvbmNlIGFib3V0IHRoZSAxMCBsb25nZXN0IG1vZHVsZXMKKyAgICAgICAgY20oJ3JhbmRvbScsIGlnbm9yZT0oJ1JhbmRvbScsKSkgICMgZnJvbSBfcmFuZG9tIGltcG9ydCBSYW5kb20gYXMgQ29yZUdlbmVyYXRvcgorICAgICAgICBjbSgnY2dpJywgaWdub3JlPSgnbG9nJywpKSAgICAgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKKyAgICAgICAgY20oJ3VybGxpYicsIGlnbm9yZT0oJ19DRk51bWJlclRvSW50MzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0NTdHJpbmdGcm9tQ0ZTdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0NGU2V0dXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0cHJveGllc19yZWdpc3RyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm94eV9ieXBhc3NfcmVnaXN0cnknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJveHlfYnlwYXNzX21hY29zeF9zeXNjb25mJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wZW5faHR0cHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0cHJveGllc19tYWNvc3hfc3lzY29uZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRwcm94aWVzX2ludGVybmV0Y29uZmlnJywpKSAjIG5vdCBvbiBhbGwgcGxhdGZvcm1zCisgICAgICAgIGNtKCdwaWNrbGUnKQorICAgICAgICBjbSgnYWlmYycsIGlnbm9yZT0oJ29wZW5mcCcsKSkgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKKyAgICAgICAgY20oJ0Nvb2tpZScpCisgICAgICAgIGNtKCdzcmVfcGFyc2UnLCBpZ25vcmU9KCdkdW1wJywpKSAjIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgorICAgICAgICBjbSgncGRiJykKKyAgICAgICAgY20oJ3B5ZG9jJykKKworICAgICAgICAjIFRlc3RzIGZvciBtb2R1bGVzIGluc2lkZSBwYWNrYWdlcworICAgICAgICBjbSgnZW1haWwucGFyc2VyJykKKyAgICAgICAgY20oJ3Rlc3QudGVzdF9weWNsYnInKQorCisgICAgZGVmIHRlc3RfaXNzdWVfMTQ3OTgoc2VsZik6CisgICAgICAgICMgdGVzdCBJbXBvcnRFcnJvciBpcyByYWlzZWQgd2hlbiB0aGUgZmlyc3QgcGFydCBvZiBhIGRvdHRlZCBuYW1lIGlzCisgICAgICAgICMgbm90IGEgcGFja2FnZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgcHljbGJyLnJlYWRtb2R1bGVfZXgsICdhc3luY29yZS5mb28nKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoUHljbGJyVGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9weWRvYy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MmQ2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9weWRvYy5weQpAQCAtMCwwICsxLDQyMyBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IF9fYnVpbHRpbl9fCitpbXBvcnQgcmUKK2ltcG9ydCBweWRvYworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBrZXl3b3JkCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB4bWwuZXRyZWUKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0ICgKKyAgICBURVNURk4sIHJtdHJlZSwgcmVhcF9jaGlsZHJlbiwgY2FwdHVyZWRfc3Rkb3V0KQorCitmcm9tIHRlc3QgaW1wb3J0IHB5ZG9jX21vZAorCitpZiB0ZXN0LnRlc3Rfc3VwcG9ydC5IQVZFX0RPQ1NUUklOR1M6CisgICAgZXhwZWN0ZWRfZGF0YV9kb2NzdHJpbmdzID0gKAorICAgICAgICAnZGljdGlvbmFyeSBmb3IgaW5zdGFuY2UgdmFyaWFibGVzIChpZiBkZWZpbmVkKScsCisgICAgICAgICdsaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgb2JqZWN0IChpZiBkZWZpbmVkKScsCisgICAgICAgICkKK2Vsc2U6CisgICAgZXhwZWN0ZWRfZGF0YV9kb2NzdHJpbmdzID0gKCcnLCAnJykKKworZXhwZWN0ZWRfdGV4dF9wYXR0ZXJuID0gXAorIiIiCitOQU1FCisgICAgdGVzdC5weWRvY19tb2QgLSBUaGlzIGlzIGEgdGVzdCBtb2R1bGUgZm9yIHRlc3RfcHlkb2MKKworRklMRQorICAgICVzCislcworQ0xBU1NFUworICAgIF9fYnVpbHRpbl9fLm9iamVjdAorICAgICAgICBCCisgICAgQQorXHgyMFx4MjBceDIwXHgyMAorICAgIGNsYXNzIEEKKyAgICAgfCAgSGVsbG8gYW5kIGdvb2RieWUKKyAgICAgfFx4MjBceDIwCisgICAgIHwgIE1ldGhvZHMgZGVmaW5lZCBoZXJlOgorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgX19pbml0X18oKQorICAgICB8ICAgICAgV293LCBJIGhhdmUgbm8gZnVuY3Rpb24hCitceDIwXHgyMFx4MjBceDIwCisgICAgY2xhc3MgQihfX2J1aWx0aW5fXy5vYmplY3QpCisgICAgIHwgIERhdGEgZGVzY3JpcHRvcnMgZGVmaW5lZCBoZXJlOgorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgX19kaWN0X18lcworICAgICB8XHgyMFx4MjAKKyAgICAgfCAgX193ZWFrcmVmX18lcworICAgICB8XHgyMFx4MjAKKyAgICAgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZToKKyAgICAgfFx4MjBceDIwCisgICAgIHwgIE5PX01FQU5JTkcgPSAnZWdncycKKworRlVOQ1RJT05TCisgICAgZG9jX2Z1bmMoKQorICAgICAgICBUaGlzIGZ1bmN0aW9uIHNvbHZlcyBhbGwgb2YgdGhlIHdvcmxkJ3MgcHJvYmxlbXM6CisgICAgICAgIGh1bmdlcgorICAgICAgICBsYWNrIG9mIFB5dGhvbgorICAgICAgICB3YXIKK1x4MjBceDIwXHgyMFx4MjAKKyAgICBub2RvY19mdW5jKCkKKworREFUQQorICAgIF9fYXV0aG9yX18gPSAnQmVuamFtaW4gUGV0ZXJzb24nCisgICAgX19jcmVkaXRzX18gPSAnTm9ib2R5JworICAgIF9fdmVyc2lvbl9fID0gJzEuMi4zLjQnCisKK1ZFUlNJT04KKyAgICAxLjIuMy40CisKK0FVVEhPUgorICAgIEJlbmphbWluIFBldGVyc29uCisKK0NSRURJVFMKKyAgICBOb2JvZHkKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX3RleHRfZGF0YV9kb2NzdHJpbmdzID0gdHVwbGUoJ1xuICAgICB8ICAgICAgJyArIHMgaWYgcyBlbHNlICcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIGV4cGVjdGVkX2RhdGFfZG9jc3RyaW5ncykKKworZXhwZWN0ZWRfaHRtbF9wYXR0ZXJuID0gXAorIiIiCis8dGFibGUgd2lkdGg9IjEwMCUlIiBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTIgYm9yZGVyPTAgc3VtbWFyeT0iaGVhZGluZyI+Cis8dHIgYmdjb2xvcj0iIzc3OTllZSI+Cis8dGQgdmFsaWduPWJvdHRvbT4mbmJzcDs8YnI+Cis8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+Jm5ic3A7PGJyPjxiaWc+PGJpZz48c3Ryb25nPjxhIGhyZWY9InRlc3QuaHRtbCI+PGZvbnQgY29sb3I9IiNmZmZmZmYiPnRlc3Q8L2ZvbnQ+PC9hPi5weWRvY19tb2Q8L3N0cm9uZz48L2JpZz48L2JpZz4gKHZlcnNpb24gMS4yLjMuNCk8L2ZvbnQ+PC90ZAorPjx0ZCBhbGlnbj1yaWdodCB2YWxpZ249Ym90dG9tCis+PGZvbnQgY29sb3I9IiNmZmZmZmYiIGZhY2U9ImhlbHZldGljYSwgYXJpYWwiPjxhIGhyZWY9Ii4iPmluZGV4PC9hPjxicj48YSBocmVmPSJmaWxlOiVzIj4lczwvYT4lczwvZm9udD48L3RkPjwvdHI+PC90YWJsZT4KKyAgICA8cD48dHQ+VGhpcyZuYnNwO2lzJm5ic3A7YSZuYnNwO3Rlc3QmbmJzcDttb2R1bGUmbmJzcDtmb3ImbmJzcDt0ZXN0X3B5ZG9jPC90dD48L3A+Cis8cD4KKzx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KKzx0ciBiZ2NvbG9yPSIjZWU3N2FhIj4KKzx0ZCBjb2xzcGFuPTMgdmFsaWduPWJvdHRvbT4mbmJzcDs8YnI+Cis8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGJpZz48c3Ryb25nPkNsYXNzZXM8L3N0cm9uZz48L2JpZz48L2ZvbnQ+PC90ZD48L3RyPgorXHgyMFx4MjBceDIwXHgyMAorPHRyPjx0ZCBiZ2NvbG9yPSIjZWU3N2FhIj48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90dD48L3RkPjx0ZD4mbmJzcDs8L3RkPgorPHRkIHdpZHRoPSIxMDAlJSI+PGRsPgorPGR0Pjxmb250IGZhY2U9ImhlbHZldGljYSwgYXJpYWwiPjxhIGhyZWY9Il9fYnVpbHRpbl9fLmh0bWwjb2JqZWN0Ij5fX2J1aWx0aW5fXy5vYmplY3Q8L2E+Cis8L2ZvbnQ+PC9kdD48ZGQ+Cis8ZGw+Cis8ZHQ+PGZvbnQgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgaHJlZj0idGVzdC5weWRvY19tb2QuaHRtbCNCIj5CPC9hPgorPC9mb250PjwvZHQ+PC9kbD4KKzwvZGQ+Cis8ZHQ+PGZvbnQgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgaHJlZj0idGVzdC5weWRvY19tb2QuaHRtbCNBIj5BPC9hPgorPC9mb250PjwvZHQ+PC9kbD4KKyA8cD4KKzx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KKzx0ciBiZ2NvbG9yPSIjZmZjOGQ4Ij4KKzx0ZCBjb2xzcGFuPTMgdmFsaWduPWJvdHRvbT4mbmJzcDs8YnI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgbmFtZT0iQSI+Y2xhc3MgPHN0cm9uZz5BPC9zdHJvbmc+PC9hPjwvZm9udD48L3RkPjwvdHI+CitceDIwXHgyMFx4MjBceDIwCis8dHIgYmdjb2xvcj0iI2ZmYzhkOCI+PHRkIHJvd3NwYW49Mj48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90dD48L3RkPgorPHRkIGNvbHNwYW49Mj48dHQ+SGVsbG8mbmJzcDthbmQmbmJzcDtnb29kYnllPGJyPiZuYnNwOzwvdHQ+PC90ZD48L3RyPgorPHRyPjx0ZD4mbmJzcDs8L3RkPgorPHRkIHdpZHRoPSIxMDAlJSI+TWV0aG9kcyBkZWZpbmVkIGhlcmU6PGJyPgorPGRsPjxkdD48YSBuYW1lPSJBLV9faW5pdF9fIj48c3Ryb25nPl9faW5pdF9fPC9zdHJvbmc+PC9hPigpPC9kdD48ZGQ+PHR0PldvdywmbmJzcDtJJm5ic3A7aGF2ZSZuYnNwO25vJm5ic3A7ZnVuY3Rpb24hPC90dD48L2RkPjwvZGw+CisKKzwvdGQ+PC90cj48L3RhYmxlPiA8cD4KKzx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KKzx0ciBiZ2NvbG9yPSIjZmZjOGQ4Ij4KKzx0ZCBjb2xzcGFuPTMgdmFsaWduPWJvdHRvbT4mbmJzcDs8YnI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgbmFtZT0iQiI+Y2xhc3MgPHN0cm9uZz5CPC9zdHJvbmc+PC9hPig8YSBocmVmPSJfX2J1aWx0aW5fXy5odG1sI29iamVjdCI+X19idWlsdGluX18ub2JqZWN0PC9hPik8L2ZvbnQ+PC90ZD48L3RyPgorXHgyMFx4MjBceDIwXHgyMAorPHRyPjx0ZCBiZ2NvbG9yPSIjZmZjOGQ4Ij48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90dD48L3RkPjx0ZD4mbmJzcDs8L3RkPgorPHRkIHdpZHRoPSIxMDAlJSI+RGF0YSBkZXNjcmlwdG9ycyBkZWZpbmVkIGhlcmU6PGJyPgorPGRsPjxkdD48c3Ryb25nPl9fZGljdF9fPC9zdHJvbmc+PC9kdD4KKzxkZD48dHQ+JXM8L3R0PjwvZGQ+Cis8L2RsPgorPGRsPjxkdD48c3Ryb25nPl9fd2Vha3JlZl9fPC9zdHJvbmc+PC9kdD4KKzxkZD48dHQ+JXM8L3R0PjwvZGQ+Cis8L2RsPgorPGhyPgorRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6PGJyPgorPGRsPjxkdD48c3Ryb25nPk5PX01FQU5JTkc8L3N0cm9uZz4gPSAnZWdncyc8L2RsPgorCis8L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48cD4KKzx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KKzx0ciBiZ2NvbG9yPSIjZWVhYTc3Ij4KKzx0ZCBjb2xzcGFuPTMgdmFsaWduPWJvdHRvbT4mbmJzcDs8YnI+Cis8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGJpZz48c3Ryb25nPkZ1bmN0aW9uczwvc3Ryb25nPjwvYmlnPjwvZm9udD48L3RkPjwvdHI+CitceDIwXHgyMFx4MjBceDIwCis8dHI+PHRkIGJnY29sb3I9IiNlZWFhNzciPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3R0PjwvdGQ+PHRkPiZuYnNwOzwvdGQ+Cis8dGQgd2lkdGg9IjEwMCUlIj48ZGw+PGR0PjxhIG5hbWU9Ii1kb2NfZnVuYyI+PHN0cm9uZz5kb2NfZnVuYzwvc3Ryb25nPjwvYT4oKTwvZHQ+PGRkPjx0dD5UaGlzJm5ic3A7ZnVuY3Rpb24mbmJzcDtzb2x2ZXMmbmJzcDthbGwmbmJzcDtvZiZuYnNwO3RoZSZuYnNwO3dvcmxkJ3MmbmJzcDtwcm9ibGVtczo8YnI+CitodW5nZXI8YnI+CitsYWNrJm5ic3A7b2YmbmJzcDtQeXRob248YnI+Cit3YXI8L3R0PjwvZGQ+PC9kbD4KKyA8ZGw+PGR0PjxhIG5hbWU9Ii1ub2RvY19mdW5jIj48c3Ryb25nPm5vZG9jX2Z1bmM8L3N0cm9uZz48L2E+KCk8L2R0PjwvZGw+Cis8L3RkPjwvdHI+PC90YWJsZT48cD4KKzx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KKzx0ciBiZ2NvbG9yPSIjNTVhYTU1Ij4KKzx0ZCBjb2xzcGFuPTMgdmFsaWduPWJvdHRvbT4mbmJzcDs8YnI+Cis8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGJpZz48c3Ryb25nPkRhdGE8L3N0cm9uZz48L2JpZz48L2ZvbnQ+PC90ZD48L3RyPgorXHgyMFx4MjBceDIwXHgyMAorPHRyPjx0ZCBiZ2NvbG9yPSIjNTVhYTU1Ij48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90dD48L3RkPjx0ZD4mbmJzcDs8L3RkPgorPHRkIHdpZHRoPSIxMDAlJSI+PHN0cm9uZz5fX2F1dGhvcl9fPC9zdHJvbmc+ID0gJ0JlbmphbWluIFBldGVyc29uJzxicj4KKzxzdHJvbmc+X19jcmVkaXRzX188L3N0cm9uZz4gPSAnTm9ib2R5Jzxicj4KKzxzdHJvbmc+X192ZXJzaW9uX188L3N0cm9uZz4gPSAnMS4yLjMuNCc8L3RkPjwvdHI+PC90YWJsZT48cD4KKzx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KKzx0ciBiZ2NvbG9yPSIjNzc5OWVlIj4KKzx0ZCBjb2xzcGFuPTMgdmFsaWduPWJvdHRvbT4mbmJzcDs8YnI+Cis8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGJpZz48c3Ryb25nPkF1dGhvcjwvc3Ryb25nPjwvYmlnPjwvZm9udD48L3RkPjwvdHI+CitceDIwXHgyMFx4MjBceDIwCis8dHI+PHRkIGJnY29sb3I9IiM3Nzk5ZWUiPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3R0PjwvdGQ+PHRkPiZuYnNwOzwvdGQ+Cis8dGQgd2lkdGg9IjEwMCUlIj5CZW5qYW1pbiZuYnNwO1BldGVyc29uPC90ZD48L3RyPjwvdGFibGU+PHA+Cis8dGFibGUgd2lkdGg9IjEwMCUlIiBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTIgYm9yZGVyPTAgc3VtbWFyeT0ic2VjdGlvbiI+Cis8dHIgYmdjb2xvcj0iIzc3OTllZSI+Cis8dGQgY29sc3Bhbj0zIHZhbGlnbj1ib3R0b20+Jm5ic3A7PGJyPgorPGZvbnQgY29sb3I9IiNmZmZmZmYiIGZhY2U9ImhlbHZldGljYSwgYXJpYWwiPjxiaWc+PHN0cm9uZz5DcmVkaXRzPC9zdHJvbmc+PC9iaWc+PC9mb250PjwvdGQ+PC90cj4KK1x4MjBceDIwXHgyMFx4MjAKKzx0cj48dGQgYmdjb2xvcj0iIzc3OTllZSI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvdHQ+PC90ZD48dGQ+Jm5ic3A7PC90ZD4KKzx0ZCB3aWR0aD0iMTAwJSUiPk5vYm9keTwvdGQ+PC90cj48L3RhYmxlPgorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfaHRtbF9kYXRhX2RvY3N0cmluZ3MgPSB0dXBsZShzLnJlcGxhY2UoJyAnLCAnJm5ic3A7JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gZXhwZWN0ZWRfZGF0YV9kb2NzdHJpbmdzKQorCisjIG91dHB1dCBwYXR0ZXJuIGZvciBtaXNzaW5nIG1vZHVsZQorbWlzc2luZ19wYXR0ZXJuID0gIm5vIFB5dGhvbiBkb2N1bWVudGF0aW9uIGZvdW5kIGZvciAnJXMnIgorCisjIG91dHB1dCBwYXR0ZXJuIGZvciBtb2R1bGUgd2l0aCBiYWQgaW1wb3J0cworYmFkaW1wb3J0X3BhdHRlcm4gPSAicHJvYmxlbSBpbiAlcyAtIDx0eXBlICdleGNlcHRpb25zLkltcG9ydEVycm9yJz46IE5vIG1vZHVsZSBuYW1lZCAlcyIKKworZGVmIHJ1bl9weWRvYyhtb2R1bGVfbmFtZSwgKmFyZ3MsICoqZW52KToKKyAgICAiIiIKKyAgICBSdW5zIHB5ZG9jIG9uIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiBSZXR1cm5zIHRoZSBzdHJpcHBlZAorICAgIG91dHB1dCBvZiBweWRvYy4KKyAgICAiIiIKKyAgICBhcmdzID0gYXJncyArIChtb2R1bGVfbmFtZSwpCisgICAgIyBkbyBub3Qgd3JpdGUgYnl0ZWNvZGUgZmlsZXMgdG8gYXZvaWQgY2FjaGluZyBlcnJvcnMKKyAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctQicsIHB5ZG9jLl9fZmlsZV9fLCAqYXJncywgKiplbnYpCisgICAgcmV0dXJuIG91dC5zdHJpcCgpCisKK2RlZiBnZXRfcHlkb2NfaHRtbChtb2R1bGUpOgorICAgICJSZXR1cm5zIHB5ZG9jIGdlbmVyYXRlZCBvdXRwdXQgYXMgaHRtbCIKKyAgICBkb2MgPSBweWRvYy5IVE1MRG9jKCkKKyAgICBvdXRwdXQgPSBkb2MuZG9jbW9kdWxlKG1vZHVsZSkKKyAgICBsb2MgPSBkb2MuZ2V0ZG9jbG9jKHB5ZG9jX21vZCkgb3IgIiIKKyAgICBpZiBsb2M6CisgICAgICAgIGxvYyA9ICI8YnI+PGEgaHJlZj1cIiIgKyBsb2MgKyAiXCI+TW9kdWxlIERvY3M8L2E+IgorICAgIHJldHVybiBvdXRwdXQuc3RyaXAoKSwgbG9jCisKK2RlZiBnZXRfcHlkb2NfdGV4dChtb2R1bGUpOgorICAgICJSZXR1cm5zIHB5ZG9jIGdlbmVyYXRlZCBvdXRwdXQgYXMgdGV4dCIKKyAgICBkb2MgPSBweWRvYy5UZXh0RG9jKCkKKyAgICBsb2MgPSBkb2MuZ2V0ZG9jbG9jKHB5ZG9jX21vZCkgb3IgIiIKKyAgICBpZiBsb2M6CisgICAgICAgIGxvYyA9ICJcbk1PRFVMRSBET0NTXG4gICAgIiArIGxvYyArICJcbiIKKworICAgIG91dHB1dCA9IGRvYy5kb2Ntb2R1bGUobW9kdWxlKQorCisgICAgIyBjbGVhbnVwIHRoZSBleHRyYSB0ZXh0IGZvcm1hdHRpbmcgdGhhdCBweWRvYyBwcmVmb3JtcworICAgIHBhdHQgPSByZS5jb21waWxlKCdcYi4nKQorICAgIG91dHB1dCA9IHBhdHQuc3ViKCcnLCBvdXRwdXQpCisgICAgcmV0dXJuIG91dHB1dC5zdHJpcCgpLCBsb2MKKworZGVmIHByaW50X2RpZmZzKHRleHQxLCB0ZXh0Mik6CisgICAgIlByaW50cyB1bmlmaWVkIGRpZmZzIGZvciB0d28gdGV4dHMiCisgICAgbGluZXMxID0gdGV4dDEuc3BsaXRsaW5lcyhUcnVlKQorICAgIGxpbmVzMiA9IHRleHQyLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICBkaWZmcyA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGxpbmVzMSwgbGluZXMyLCBuPTAsIGZyb21maWxlPSdleHBlY3RlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2ZpbGU9J2dvdCcpCisgICAgcHJpbnQgJ1xuJyArICcnLmpvaW4oZGlmZnMpCisKKworY2xhc3MgUHlEb2NEb2NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2h0bWxfZG9jKHNlbGYpOgorICAgICAgICByZXN1bHQsIGRvY19sb2MgPSBnZXRfcHlkb2NfaHRtbChweWRvY19tb2QpCisgICAgICAgIG1vZF9maWxlID0gaW5zcGVjdC5nZXRhYnNmaWxlKHB5ZG9jX21vZCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBpbXBvcnQgbnR1cmwycGF0aAorICAgICAgICAgICAgbW9kX3VybCA9IG50dXJsMnBhdGgucGF0aG5hbWUydXJsKG1vZF9maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kX3VybCA9IG1vZF9maWxlCisgICAgICAgIGV4cGVjdGVkX2h0bWwgPSBleHBlY3RlZF9odG1sX3BhdHRlcm4gJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAobW9kX3VybCwgbW9kX2ZpbGUsIGRvY19sb2MpICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2h0bWxfZGF0YV9kb2NzdHJpbmdzKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfaHRtbDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX2h0bWwsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF90ZXh0X2RvYyhzZWxmKToKKyAgICAgICAgcmVzdWx0LCBkb2NfbG9jID0gZ2V0X3B5ZG9jX3RleHQocHlkb2NfbW9kKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfdGV4dF9wYXR0ZXJuICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgKGluc3BlY3QuZ2V0YWJzZmlsZShweWRvY19tb2QpLCBkb2NfbG9jKSArCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXh0X2RhdGFfZG9jc3RyaW5ncykKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgZGVmIHRlc3RfaXNzdWU4MjI1KHNlbGYpOgorICAgICAgICAjIFRlc3QgaXNzdWU4MjI1IHRvIGVuc3VyZSBubyBkb2MgbGluayBhcHBlYXJzIGZvciB4bWwuZXRyZWUKKyAgICAgICAgcmVzdWx0LCBkb2NfbG9jID0gZ2V0X3B5ZG9jX3RleHQoeG1sLmV0cmVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvY19sb2MsICIiLCAiTU9EVUxFIERPQ1MgaW5jb3JyZWN0bHkgaW5jbHVkZXMgYSBsaW5rIikKKworICAgIGRlZiB0ZXN0X25vbl9zdHJfbmFtZShzZWxmKToKKyAgICAgICAgIyBpc3N1ZTE0NjM4CisgICAgICAgICMgVHJlYXQgaWxsZWdhbCAobm9uLXN0cikgbmFtZSBsaWtlIG5vIG5hbWUKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fbmFtZV9fID0gNDIKKyAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYWRvYyA9IHB5ZG9jLnJlbmRlcl9kb2MoQSgpKQorICAgICAgICBiZG9jID0gcHlkb2MucmVuZGVyX2RvYyhCKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRvYy5yZXBsYWNlKCJBIiwgIkIiKSwgYmRvYykKKworICAgIGRlZiB0ZXN0X25vdF9oZXJlKHNlbGYpOgorICAgICAgICBtaXNzaW5nX21vZHVsZSA9ICJ0ZXN0LmlfYW1fbm90X2hlcmUiCisgICAgICAgIHJlc3VsdCA9IHJ1bl9weWRvYyhtaXNzaW5nX21vZHVsZSkKKyAgICAgICAgZXhwZWN0ZWQgPSBtaXNzaW5nX3BhdHRlcm4gJSBtaXNzaW5nX21vZHVsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQsCisgICAgICAgICAgICAiZG9jdW1lbnRhdGlvbiBmb3IgbWlzc2luZyBtb2R1bGUgZm91bmQiKQorCisgICAgZGVmIHRlc3RfaW5wdXRfc3RyaXAoc2VsZik6CisgICAgICAgIG1pc3NpbmdfbW9kdWxlID0gIiB0ZXN0LmlfYW1fbm90X2hlcmUgIgorICAgICAgICByZXN1bHQgPSBydW5fcHlkb2MobWlzc2luZ19tb2R1bGUpCisgICAgICAgIGV4cGVjdGVkID0gbWlzc2luZ19wYXR0ZXJuICUgbWlzc2luZ19tb2R1bGUuc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQsCisgICAgICAgICAgICAid2hpdGUgc3BhY2Ugd2FzIG5vdCBzdHJpcHBlZCBmcm9tIG1vZHVsZSBuYW1lICIKKyAgICAgICAgICAgICJvciBvdGhlciBlcnJvciBvdXRwdXQgbWlzbWF0Y2giKQorCisgICAgZGVmIHRlc3Rfc3RyaXBpZChzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdpdGggc3RyaW5ncywgb3RoZXIgaW1wbGVtZW50YXRpb25zIG1pZ2h0IGhhdmUgZGlmZmVyZW50IHJlcHIoKQorICAgICAgICBzdHJpcGlkID0gcHlkb2Muc3RyaXBpZAorICAgICAgICAjIHN0cmlwIHRoZSBpZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmlwaWQoJzxmdW5jdGlvbiBzdHJpcGlkIGF0IDB4ODhkY2VlND4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPGZ1bmN0aW9uIHN0cmlwaWQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpcGlkKCc8ZnVuY3Rpb24gc3RyaXBpZCBhdCAweDAxRjY1MzkwPicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8ZnVuY3Rpb24gc3RyaXBpZD4nKQorICAgICAgICAjIG5vdGhpbmcgdG8gc3RyaXAsIHJldHVybiB0aGUgc2FtZSB0ZXh0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaXBpZCgnNDInKSwgJzQyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpcGlkKCI8dHlwZSAnZXhjZXB0aW9ucy5FeGNlcHRpb24nPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8dHlwZSAnZXhjZXB0aW9ucy5FeGNlcHRpb24nPiIpCisKKworY2xhc3MgUHlkb2NJbXBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2RpciA9IG9zLm1rZGlyKFRFU1RGTikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJtdHJlZSwgVEVTVEZOKQorCisgICAgZGVmIHRlc3RfYmFkaW1wb3J0KHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdHMgdGhlIGZpeCBmb3IgaXNzdWUgNTIzMCwgd2hlcmUgaWYgcHlkb2MgZm91bmQgdGhlIG1vZHVsZQorICAgICAgICAjIGJ1dCB0aGUgbW9kdWxlIGhhZCBhbiBpbnRlcm5hbCBpbXBvcnQgZXJyb3IgcHlkb2Mgd291bGQgcmVwb3J0IG5vIGRvYworICAgICAgICAjIGZvdW5kLgorICAgICAgICBtb2RuYW1lID0gJ3Rlc3Rtb2RfeHl6enknCisgICAgICAgIHRlc3RwYWlycyA9ICgKKyAgICAgICAgICAgICgnaV9hbV9ub3RfaGVyZScsICdpX2FtX25vdF9oZXJlJyksCisgICAgICAgICAgICAoJ3Rlc3QuaV9hbV9ub3RfaGVyZV9laXRoZXInLCAnaV9hbV9ub3RfaGVyZV9laXRoZXInKSwKKyAgICAgICAgICAgICgndGVzdC5pX2FtX25vdF9oZXJlLm5laXRoZXJfYW1faScsICdpX2FtX25vdF9oZXJlLm5laXRoZXJfYW1faScpLAorICAgICAgICAgICAgKCdpX2FtX25vdF9oZXJlLnt9Jy5mb3JtYXQobW9kbmFtZSksCisgICAgICAgICAgICAgJ2lfYW1fbm90X2hlcmUue30nLmZvcm1hdChtb2RuYW1lKSksCisgICAgICAgICAgICAoJ3Rlc3Que30nLmZvcm1hdChtb2RuYW1lKSwgbW9kbmFtZSksCisgICAgICAgICAgICApCisKKyAgICAgICAgc291cmNlZm4gPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCBtb2RuYW1lKSArIG9zLmV4dHNlcCArICJweSIKKyAgICAgICAgZm9yIGltcG9ydHN0cmluZywgZXhwZWN0ZWRpbm1zZyBpbiB0ZXN0cGFpcnM6CisgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlZm4sICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJpbXBvcnQge31cbiIuZm9ybWF0KGltcG9ydHN0cmluZykpCisgICAgICAgICAgICByZXN1bHQgPSBydW5fcHlkb2MobW9kbmFtZSwgUFlUSE9OUEFUSD1URVNURk4pCisgICAgICAgICAgICBleHBlY3RlZCA9IGJhZGltcG9ydF9wYXR0ZXJuICUgKG1vZG5hbWUsIGV4cGVjdGVkaW5tc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9hcHJvcG9zX3dpdGhfYmFkX3BhY2thZ2Uoc2VsZik6CisgICAgICAgICMgSXNzdWUgNzQyNSAtIHB5ZG9jIC1rIGZhaWxlZCB3aGVuIGJhZCBwYWNrYWdlIG9uIHBhdGgKKyAgICAgICAgcGtnZGlyID0gb3MucGF0aC5qb2luKFRFU1RGTiwgInN5bnRheGVyciIpCisgICAgICAgIG9zLm1rZGlyKHBrZ2RpcikKKyAgICAgICAgYmFkc3ludGF4ID0gb3MucGF0aC5qb2luKHBrZ2RpciwgIl9faW5pdF9fIikgKyBvcy5leHRzZXAgKyAicHkiCisgICAgICAgIHdpdGggb3BlbihiYWRzeW50YXgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoImludmFsaWQgcHl0aG9uIHN5bnRheCA9ICQxXG4iKQorICAgICAgICByZXN1bHQgPSBydW5fcHlkb2MoJ3pxd3lranYnLCAnLWsnLCBQWVRIT05QQVRIPVRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfYXByb3Bvc193aXRoX3VucmVhZGFibGVfZGlyKHNlbGYpOgorICAgICAgICAjIElzc3VlIDczNjcgLSBweWRvYyAtayBmYWlsZWQgd2hlbiB1bnJlYWRhYmxlIGRpciBvbiBwYXRoCisgICAgICAgIHNlbGYudW5yZWFkYWJsZV9kaXIgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCAidW5yZWFkYWJsZSIpCisgICAgICAgIG9zLm1rZGlyKHNlbGYudW5yZWFkYWJsZV9kaXIsIDApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5ybWRpciwgc2VsZi51bnJlYWRhYmxlX2RpcikKKyAgICAgICAgIyBOb3RlLCBvbiBXaW5kb3dzIHRoZSBkaXJlY3RvcnkgYXBwZWFycyB0byBiZSBzdGlsbAorICAgICAgICAjICAgcmVhZGFibGUgc28gdGhpcyBpcyBub3QgcmVhbGx5IHRlc3RpbmcgdGhlIGlzc3VlIHRoZXJlCisgICAgICAgIHJlc3VsdCA9IHJ1bl9weWRvYygnenF3eWtqdicsICctaycsIFBZVEhPTlBBVEg9VEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCByZXN1bHQpCisKKworY2xhc3MgVGVzdERlc2NyaXB0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBweWRvY2ZvZGRlciBtb2R1bGUgY2FuIGJlIGRlc2NyaWJlZAorICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IHB5ZG9jZm9kZGVyCisgICAgICAgIGRvYyA9IHB5ZG9jLnJlbmRlcl9kb2MocHlkb2Nmb2RkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInB5ZG9jZm9kZGVyIiwgZG9jKQorCisgICAgZGVmIHRlc3RfY2xhc3NpY19jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzogIkNsYXNzaWMgY2xhc3MiCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweWRvYy5kZXNjcmliZShDKSwgJ2NsYXNzIEMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLmRlc2NyaWJlKGMpLCAnaW5zdGFuY2Ugb2YgQycpCisgICAgICAgIGV4cGVjdGVkID0gJ2luc3RhbmNlIG9mIEMgaW4gbW9kdWxlICVzJyAlIF9fbmFtZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIHB5ZG9jLnJlbmRlcl9kb2MoYykpCisKKyAgICBkZWYgdGVzdF9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOiAiTmV3LXN0eWxlIGNsYXNzIgorICAgICAgICBjID0gQygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweWRvYy5kZXNjcmliZShDKSwgJ2NsYXNzIEMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLmRlc2NyaWJlKGMpLCAnQycpCisgICAgICAgIGV4cGVjdGVkID0gJ0MgaW4gbW9kdWxlICVzIG9iamVjdCcgJSBfX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLCBweWRvYy5yZW5kZXJfZG9jKGMpKQorCisgICAgZGVmIHRlc3RfbmFtZWR0dXBsZV9wdWJsaWNfdW5kZXJzY29yZShzZWxmKToKKyAgICAgICAgTlQgPSBuYW1lZHR1cGxlKCdOVCcsIFsnYWJjJywgJ2RlZiddLCByZW5hbWU9VHJ1ZSkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBoZWxwX2lvOgorICAgICAgICAgICAgaGVscChOVCkKKyAgICAgICAgaGVscHRleHQgPSBoZWxwX2lvLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignXzEnLCBoZWxwdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignX3JlcGxhY2UnLCBoZWxwdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignX2FzZGljdCcsIGhlbHB0ZXh0KQorCisKK2NsYXNzIFRlc3RIZWxwZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2tleXdvcmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChweWRvYy5IZWxwZXIua2V5d29yZHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZChrZXl3b3JkLmt3bGlzdCkpCisKKyAgICBkZWYgdGVzdF9idWlsdGluKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiAoJ3N0cicsICdzdHIudHJhbnNsYXRlJywgJ19fYnVpbHRpbl9fLnN0cicsCisgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluX18uc3RyLnRyYW5zbGF0ZScpOgorICAgICAgICAgICAgIyB0ZXN0IGxvdy1sZXZlbCBmdW5jdGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHlkb2MubG9jYXRlKG5hbWUpKQorICAgICAgICAgICAgIyB0ZXN0IGhpZ2gtbGV2ZWwgZnVuY3Rpb24KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBweWRvYy5yZW5kZXJfZG9jKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmaW5kaW5nIHRoZSBkb2Mgb2YgeyFyfSBmYWlsZWQnLmZvcm1hdChvKSkKKworICAgICAgICBmb3IgbmFtZSBpbiAoJ25vdF9fYnVpbHRpbl9fJywgJ3N0cnJyJywgJ3N0cnIudHJhbnNsYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICdzdHIudHJycnJhbnNsYXRlJywgJ19fYnVpbHRpbl9fLnN0cnJyJywKKyAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5fXy5zdHIudHJycmFuc2xhdGUnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHB5ZG9jLmxvY2F0ZShuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBweWRvYy5yZW5kZXJfZG9jLCBuYW1lKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0cnk6CisgICAgICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQeURvY0RvY1Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY0ltcG9ydFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0RGVzY3JpcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEhlbHBlcikKKyAgICBmaW5hbGx5OgorICAgICAgICByZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxMWEyMAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKQEAgLTAsMCArMSw2NTcgQEAKKyMgWFhYIFR5cGVFcnJvcnMgb24gY2FsbGluZyBoYW5kbGVycywgb3Igb24gYmFkIHJldHVybiB2YWx1ZXMgZnJvbSBhCisjIGhhbmRsZXIsIGFyZSBvYnNjdXJlIGFuZCB1bmhlbHBmdWwuCisKK2ltcG9ydCBTdHJpbmdJTywgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB4bWwucGFyc2VycyBpbXBvcnQgZXhwYXQKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHNvcnRkaWN0LCBydW5fdW5pdHRlc3QKKworCitjbGFzcyBTZXRBdHRyaWJ1dGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9JyEnKQorICAgICAgICBzZWxmLnNldF9nZXRfcGFpcnMgPSBbCisgICAgICAgICAgICBbMCwgMF0sCisgICAgICAgICAgICBbMSwgMV0sCisgICAgICAgICAgICBbMiwgMV0sCisgICAgICAgICAgICBbMCwgMF0sCisgICAgICAgICAgICBdCisKKyAgICBkZWYgdGVzdF9yZXR1cm5zX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGZvciB4LCB5IGluIHNlbGYuc2V0X2dldF9wYWlyczoKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnJldHVybnNfdW5pY29kZSA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIucmV0dXJuc191bmljb2RlLCB5KQorCisgICAgZGVmIHRlc3Rfb3JkZXJlZF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBmb3IgeCwgeSBpbiBzZWxmLnNldF9nZXRfcGFpcnM6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSB4CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcywgeSkKKworICAgIGRlZiB0ZXN0X3NwZWNpZmllZF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBmb3IgeCwgeSBpbiBzZWxmLnNldF9nZXRfcGFpcnM6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMsIHkpCisKKworZGF0YSA9ICcnJ1wKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiIHN0YW5kYWxvbmU9Im5vIj8+Cis8P3htbC1zdHlsZXNoZWV0IGhyZWY9InN0eWxlc2hlZXQuY3NzIj8+Cis8IS0tIGNvbW1lbnQgZGF0YSAtLT4KKzwhRE9DVFlQRSBxdW90YXRpb25zIFNZU1RFTSAicXVvdGF0aW9ucy5kdGQiIFsKKzwhRUxFTUVOVCByb290IEFOWT4KKzwhTk9UQVRJT04gbm90YXRpb24gU1lTVEVNICJub3RhdGlvbi5qcGVnIj4KKzwhRU5USVRZIGFjaXJjICImIzIyNjsiPgorPCFFTlRJVFkgZXh0ZXJuYWxfZW50aXR5IFNZU1RFTSAiZW50aXR5LmZpbGUiPgorPCFFTlRJVFkgdW5wYXJzZWRfZW50aXR5IFNZU1RFTSAiZW50aXR5LmZpbGUiIE5EQVRBIG5vdGF0aW9uPgorJXVucGFyc2VkX2VudGl0eTsKK10+CisKKzxyb290IGF0dHIxPSJ2YWx1ZTEiIGF0dHIyPSJ2YWx1ZTImIzgwMDA7Ij4KKzxteW5zOnN1YmVsZW1lbnQgeG1sbnM6bXlucz0iaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSI+CisgICAgIENvbnRlbnRzIG9mIHN1YmVsZW1lbnRzCis8L215bnM6c3ViZWxlbWVudD4KKzxzdWIyPjwhW0NEQVRBW2NvbnRlbnRzIG9mIENEQVRBIHNlY3Rpb25dXT48L3N1YjI+CismZXh0ZXJuYWxfZW50aXR5OworPC9yb290PgorJycnCisKKworIyBQcm9kdWNlIFVURi04IG91dHB1dAorY2xhc3MgUGFyc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBPdXRwdXR0ZXI6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYub3V0ID0gW10KKworICAgICAgICBkZWYgU3RhcnRFbGVtZW50SGFuZGxlcihzZWxmLCBuYW1lLCBhdHRycyk6CisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ1N0YXJ0IGVsZW1lbnQ6ICcgKyByZXByKG5hbWUpICsgJyAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZGljdChhdHRycykpCisKKyAgICAgICAgZGVmIEVuZEVsZW1lbnRIYW5kbGVyKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCdFbmQgZWxlbWVudDogJyArIHJlcHIobmFtZSkpCisKKyAgICAgICAgZGVmIENoYXJhY3RlckRhdGFIYW5kbGVyKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3RyaXAoKQorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ0NoYXJhY3RlciBkYXRhOiAnICsgcmVwcihkYXRhKSkKKworICAgICAgICBkZWYgUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcihzZWxmLCB0YXJnZXQsIGRhdGEpOgorICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCdQSTogJyArIHJlcHIodGFyZ2V0KSArICcgJyArIHJlcHIoZGF0YSkpCisKKyAgICAgICAgZGVmIFN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIoc2VsZiwgcHJlZml4LCB1cmkpOgorICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCdOUyBkZWNsOiAnICsgcmVwcihwcmVmaXgpICsgJyAnICsgcmVwcih1cmkpKQorCisgICAgICAgIGRlZiBFbmROYW1lc3BhY2VEZWNsSGFuZGxlcihzZWxmLCBwcmVmaXgpOgorICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCdFbmQgb2YgTlMgZGVjbDogJyArIHJlcHIocHJlZml4KSkKKworICAgICAgICBkZWYgU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCdTdGFydCBvZiBDREFUQSBzZWN0aW9uJykKKworICAgICAgICBkZWYgRW5kQ2RhdGFTZWN0aW9uSGFuZGxlcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgnRW5kIG9mIENEQVRBIHNlY3Rpb24nKQorCisgICAgICAgIGRlZiBDb21tZW50SGFuZGxlcihzZWxmLCB0ZXh0KToKKyAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgnQ29tbWVudDogJyArIHJlcHIodGV4dCkpCisKKyAgICAgICAgZGVmIE5vdGF0aW9uRGVjbEhhbmRsZXIoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgbmFtZSwgYmFzZSwgc3lzaWQsIHB1YmlkID0gYXJncworICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCdOb3RhdGlvbiBkZWNsYXJlZDogJXMnICUoYXJncywpKQorCisgICAgICAgIGRlZiBVbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIGVudGl0eU5hbWUsIGJhc2UsIHN5c3RlbUlkLCBwdWJsaWNJZCwgbm90YXRpb25OYW1lID0gYXJncworICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCdVbnBhcnNlZCBlbnRpdHkgZGVjbDogJXMnICUoYXJncywpKQorCisgICAgICAgIGRlZiBOb3RTdGFuZGFsb25lSGFuZGxlcihzZWxmLCB1c2VyRGF0YSk6CisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ05vdCBzdGFuZGFsb25lJykKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgZGVmIEV4dGVybmFsRW50aXR5UmVmSGFuZGxlcihzZWxmLCAqYXJncyk6CisgICAgICAgICAgICBjb250ZXh0LCBiYXNlLCBzeXNJZCwgcHViSWQgPSBhcmdzCisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ0V4dGVybmFsIGVudGl0eSByZWY6ICVzJyAlKGFyZ3NbMTpdLCkpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGRlZiBEZWZhdWx0SGFuZGxlcihzZWxmLCB1c2VyRGF0YSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIERlZmF1bHRIYW5kbGVyRXhwYW5kKHNlbGYsIHVzZXJEYXRhKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGhhbmRsZXJfbmFtZXMgPSBbCisgICAgICAgICdTdGFydEVsZW1lbnRIYW5kbGVyJywgJ0VuZEVsZW1lbnRIYW5kbGVyJywKKyAgICAgICAgJ0NoYXJhY3RlckRhdGFIYW5kbGVyJywgJ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXInLAorICAgICAgICAnVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcicsICdOb3RhdGlvbkRlY2xIYW5kbGVyJywKKyAgICAgICAgJ1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXInLCAnRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXInLAorICAgICAgICAnQ29tbWVudEhhbmRsZXInLCAnU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyJywKKyAgICAgICAgJ0VuZENkYXRhU2VjdGlvbkhhbmRsZXInLAorICAgICAgICAnRGVmYXVsdEhhbmRsZXInLCAnRGVmYXVsdEhhbmRsZXJFeHBhbmQnLAorICAgICAgICAjJ05vdFN0YW5kYWxvbmVIYW5kbGVyJywKKyAgICAgICAgJ0V4dGVybmFsRW50aXR5UmVmSGFuZGxlcicKKyAgICAgICAgXQorCisgICAgZGVmIHRlc3RfdXRmOChzZWxmKToKKworICAgICAgICBvdXQgPSBzZWxmLk91dHB1dHRlcigpCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZShuYW1lc3BhY2Vfc2VwYXJhdG9yPSchJykKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5oYW5kbGVyX25hbWVzOgorICAgICAgICAgICAgc2V0YXR0cihwYXJzZXIsIG5hbWUsIGdldGF0dHIob3V0LCBuYW1lKSkKKyAgICAgICAgcGFyc2VyLnJldHVybnNfdW5pY29kZSA9IDAKKyAgICAgICAgcGFyc2VyLlBhcnNlKGRhdGEsIDEpCisKKyAgICAgICAgIyBWZXJpZnkgb3V0cHV0CisgICAgICAgIG9wID0gb3V0Lm91dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzBdLCAnUEk6IFwneG1sLXN0eWxlc2hlZXRcJyBcJ2hyZWY9InN0eWxlc2hlZXQuY3NzIlwnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxXSwgIkNvbW1lbnQ6ICcgY29tbWVudCBkYXRhICciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzJdLCAiTm90YXRpb24gZGVjbGFyZWQ6ICgnbm90YXRpb24nLCBOb25lLCAnbm90YXRpb24uanBlZycsIE5vbmUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFszXSwgIlVucGFyc2VkIGVudGl0eSBkZWNsOiAoJ3VucGFyc2VkX2VudGl0eScsIE5vbmUsICdlbnRpdHkuZmlsZScsIE5vbmUsICdub3RhdGlvbicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs0XSwgIlN0YXJ0IGVsZW1lbnQ6ICdyb290JyB7J2F0dHIxJzogJ3ZhbHVlMScsICdhdHRyMic6ICd2YWx1ZTJcXHhlMVxceGJkXFx4ODAnfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNV0sICJOUyBkZWNsOiAnbXlucycgJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2UnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs2XSwgIlN0YXJ0IGVsZW1lbnQ6ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIHt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs3XSwgIkNoYXJhY3RlciBkYXRhOiAnQ29udGVudHMgb2Ygc3ViZWxlbWVudHMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs4XSwgIkVuZCBlbGVtZW50OiAnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOV0sICJFbmQgb2YgTlMgZGVjbDogJ215bnMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMF0sICJTdGFydCBlbGVtZW50OiAnc3ViMicge30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzExXSwgJ1N0YXJ0IG9mIENEQVRBIHNlY3Rpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEyXSwgIkNoYXJhY3RlciBkYXRhOiAnY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEzXSwgJ0VuZCBvZiBDREFUQSBzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNF0sICJFbmQgZWxlbWVudDogJ3N1YjInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNV0sICJFeHRlcm5hbCBlbnRpdHkgcmVmOiAoTm9uZSwgJ2VudGl0eS5maWxlJywgTm9uZSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE2XSwgIkVuZCBlbGVtZW50OiAncm9vdCciKQorCisgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgIyBUcnkgdGhlIHBhcnNlIGFnYWluLCB0aGlzIHRpbWUgcHJvZHVjaW5nIFVuaWNvZGUgb3V0cHV0CisgICAgICAgIG91dCA9IHNlbGYuT3V0cHV0dGVyKCkKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9JyEnKQorICAgICAgICBwYXJzZXIucmV0dXJuc191bmljb2RlID0gMQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmhhbmRsZXJfbmFtZXM6CisgICAgICAgICAgICBzZXRhdHRyKHBhcnNlciwgbmFtZSwgZ2V0YXR0cihvdXQsIG5hbWUpKQorCisgICAgICAgIHBhcnNlci5QYXJzZShkYXRhLCAxKQorCisgICAgICAgIG9wID0gb3V0Lm91dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzBdLCAnUEk6IHVcJ3htbC1zdHlsZXNoZWV0XCcgdVwnaHJlZj0ic3R5bGVzaGVldC5jc3MiXCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzFdLCAiQ29tbWVudDogdScgY29tbWVudCBkYXRhICciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzJdLCAiTm90YXRpb24gZGVjbGFyZWQ6ICh1J25vdGF0aW9uJywgTm9uZSwgdSdub3RhdGlvbi5qcGVnJywgTm9uZSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzNdLCAiVW5wYXJzZWQgZW50aXR5IGRlY2w6ICh1J3VucGFyc2VkX2VudGl0eScsIE5vbmUsIHUnZW50aXR5LmZpbGUnLCBOb25lLCB1J25vdGF0aW9uJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzRdLCAiU3RhcnQgZWxlbWVudDogdSdyb290JyB7dSdhdHRyMSc6IHUndmFsdWUxJywgdSdhdHRyMic6IHUndmFsdWUyXFx1MWY0MCd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs1XSwgIk5TIGRlY2w6IHUnbXlucycgdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNl0sICJTdGFydCBlbGVtZW50OiB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCcge30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzddLCAiQ2hhcmFjdGVyIGRhdGE6IHUnQ29udGVudHMgb2Ygc3ViZWxlbWVudHMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs4XSwgIkVuZCBlbGVtZW50OiB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzldLCAiRW5kIG9mIE5TIGRlY2w6IHUnbXlucyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEwXSwgIlN0YXJ0IGVsZW1lbnQ6IHUnc3ViMicge30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzExXSwgJ1N0YXJ0IG9mIENEQVRBIHNlY3Rpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEyXSwgIkNoYXJhY3RlciBkYXRhOiB1J2NvbnRlbnRzIG9mIENEQVRBIHNlY3Rpb24nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxM10sICdFbmQgb2YgQ0RBVEEgc2VjdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTRdLCAiRW5kIGVsZW1lbnQ6IHUnc3ViMiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE1XSwgIkV4dGVybmFsIGVudGl0eSByZWY6IChOb25lLCB1J2VudGl0eS5maWxlJywgTm9uZSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE2XSwgIkVuZCBlbGVtZW50OiB1J3Jvb3QnIikKKworICAgIGRlZiB0ZXN0X3BhcnNlX2ZpbGUoc2VsZik6CisgICAgICAgICMgVHJ5IHBhcnNpbmcgYSBmaWxlCisgICAgICAgIG91dCA9IHNlbGYuT3V0cHV0dGVyKCkKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9JyEnKQorICAgICAgICBwYXJzZXIucmV0dXJuc191bmljb2RlID0gMQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmhhbmRsZXJfbmFtZXM6CisgICAgICAgICAgICBzZXRhdHRyKHBhcnNlciwgbmFtZSwgZ2V0YXR0cihvdXQsIG5hbWUpKQorICAgICAgICBmaWxlID0gU3RyaW5nSU8uU3RyaW5nSU8oZGF0YSkKKworICAgICAgICBwYXJzZXIuUGFyc2VGaWxlKGZpbGUpCisKKyAgICAgICAgb3AgPSBvdXQub3V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMF0sICdQSTogdVwneG1sLXN0eWxlc2hlZXRcJyB1XCdocmVmPSJzdHlsZXNoZWV0LmNzcyJcJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMV0sICJDb21tZW50OiB1JyBjb21tZW50IGRhdGEgJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMl0sICJOb3RhdGlvbiBkZWNsYXJlZDogKHUnbm90YXRpb24nLCBOb25lLCB1J25vdGF0aW9uLmpwZWcnLCBOb25lKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbM10sICJVbnBhcnNlZCBlbnRpdHkgZGVjbDogKHUndW5wYXJzZWRfZW50aXR5JywgTm9uZSwgdSdlbnRpdHkuZmlsZScsIE5vbmUsIHUnbm90YXRpb24nKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNF0sICJTdGFydCBlbGVtZW50OiB1J3Jvb3QnIHt1J2F0dHIxJzogdSd2YWx1ZTEnLCB1J2F0dHIyJzogdSd2YWx1ZTJcXHUxZjQwJ30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzVdLCAiTlMgZGVjbDogdSdteW5zJyB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2UnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs2XSwgIlN0YXJ0IGVsZW1lbnQ6IHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyB7fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbN10sICJDaGFyYWN0ZXIgZGF0YTogdSdDb250ZW50cyBvZiBzdWJlbGVtZW50cyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzhdLCAiRW5kIGVsZW1lbnQ6IHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOV0sICJFbmQgb2YgTlMgZGVjbDogdSdteW5zJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTBdLCAiU3RhcnQgZWxlbWVudDogdSdzdWIyJyB7fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTFdLCAnU3RhcnQgb2YgQ0RBVEEgc2VjdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTJdLCAiQ2hhcmFjdGVyIGRhdGE6IHUnY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEzXSwgJ0VuZCBvZiBDREFUQSBzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNF0sICJFbmQgZWxlbWVudDogdSdzdWIyJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTVdLCAiRXh0ZXJuYWwgZW50aXR5IHJlZjogKE5vbmUsIHUnZW50aXR5LmZpbGUnLCBOb25lKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTZdLCAiRW5kIGVsZW1lbnQ6IHUncm9vdCciKQorCisgICAgICAgICMgSXNzdWUgNDg3NzogZXhwYXQuUGFyc2VGaWxlIGNhdXNlcyBzZWdmYXVsdCBvbiBhIGNsb3NlZCBmaWxlLgorICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFyc2VyLlBhcnNlRmlsZShmcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworCitjbGFzcyBOYW1lc3BhY2VTZXBhcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9sZWdhbChzZWxmKToKKyAgICAgICAgIyBUZXN0cyB0aGF0IG1ha2Ugc3VyZSB3ZSBnZXQgZXJyb3JzIHdoZW4gdGhlIG5hbWVzcGFjZV9zZXBhcmF0b3IgdmFsdWUKKyAgICAgICAgIyBpcyBpbGxlZ2FsLCBhbmQgdGhhdCB3ZSBkb24ndCBmb3IgZ29vZCB2YWx1ZXM6CisgICAgICAgIGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIGV4cGF0LlBhcnNlckNyZWF0ZShuYW1lc3BhY2Vfc2VwYXJhdG9yPU5vbmUpCisgICAgICAgIGV4cGF0LlBhcnNlckNyZWF0ZShuYW1lc3BhY2Vfc2VwYXJhdG9yPScgJykKKworICAgIGRlZiB0ZXN0X2lsbGVnYWwoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cGF0LlBhcnNlckNyZWF0ZShuYW1lc3BhY2Vfc2VwYXJhdG9yPTQyKQorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLAorICAgICAgICAgICAgICAgICdQYXJzZXJDcmVhdGUoKSBhcmd1bWVudCAyIG11c3QgYmUgc3RyaW5nIG9yIE5vbmUsIG5vdCBpbnQnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cGF0LlBhcnNlckNyZWF0ZShuYW1lc3BhY2Vfc2VwYXJhdG9yPSd0b28gbG9uZycpCisgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLAorICAgICAgICAgICAgICAgICduYW1lc3BhY2Vfc2VwYXJhdG9yIG11c3QgYmUgYXQgbW9zdCBvbmUgY2hhcmFjdGVyLCBvbWl0dGVkLCBvciBOb25lJykKKworICAgIGRlZiB0ZXN0X3plcm9fbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIFBhcnNlckNyZWF0ZSgpIG5lZWRzIHRvIGFjY2VwdCBhIG5hbWVzcGFjZV9zZXBhcmF0b3Igb2YgemVybyBsZW5ndGgKKyAgICAgICAgIyB0byBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgUkRGIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSByZXF1aXJlZAorICAgICAgICAjIHRvIHNpbXBseSBnbHVlIHRvZ2V0aGVyIHRoZSBuYW1lc3BhY2UgVVJJIGFuZCB0aGUgbG9jYWxuYW1lLiAgVGhvdWdoCisgICAgICAgICMgY29uc2lkZXJlZCBhIHdhcnQgb2YgdGhlIFJERiBzcGVjaWZpY2F0aW9ucywgaXQgbmVlZHMgdG8gYmUgc3VwcG9ydGVkLgorICAgICAgICAjCisgICAgICAgICMgU2VlIFhNTC1TSUcgbWFpbGluZyBsaXN0IHRocmVhZCBzdGFydGluZyB3aXRoCisgICAgICAgICMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwveG1sLXNpZy8yMDAxLUFwcmlsLzAwNTIwMi5odG1sCisgICAgICAgICMKKyAgICAgICAgZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9JycpICMgdG9vIHNob3J0CisKKworY2xhc3MgSW50ZXJuaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgaW50ZXJuaW5nIG1hY2hpbmVyeS4KKyAgICAgICAgcCA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIEwgPSBbXQorICAgICAgICBkZWYgY29sbGVjdG9yKG5hbWUsICphcmdzKToKKyAgICAgICAgICAgIEwuYXBwZW5kKG5hbWUpCisgICAgICAgIHAuU3RhcnRFbGVtZW50SGFuZGxlciA9IGNvbGxlY3RvcgorICAgICAgICBwLkVuZEVsZW1lbnRIYW5kbGVyID0gY29sbGVjdG9yCisgICAgICAgIHAuUGFyc2UoIjxlPiA8ZS8+IDxlPjwvZT4gPC9lPiIsIDEpCisgICAgICAgIHRhZyA9IExbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oTCksIDYpCisgICAgICAgIGZvciBlbnRyeSBpbiBMOgorICAgICAgICAgICAgIyBMIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0cmluZyByZXBlYXRlZCBvdmVyIGFuZCBvdmVyLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhZyBpcyBlbnRyeSkKKworCitjbGFzcyBCdWZmZXJUZXh0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnN0dWZmID0gW10KKyAgICAgICAgc2VsZi5wYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBzZWxmLnBhcnNlci5idWZmZXJfdGV4dCA9IDEKKyAgICAgICAgc2VsZi5wYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLkNoYXJhY3RlckRhdGFIYW5kbGVyCisKKyAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGxhYmVsKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAiJXNcbnN0dWZmICAgID0gJXJcbmV4cGVjdGVkID0gJXIiCisgICAgICAgICAgICAgICAgJSAobGFiZWwsIHNlbGYuc3R1ZmYsIG1hcCh1bmljb2RlLCBleHBlY3RlZCkpKQorCisgICAgZGVmIENoYXJhY3RlckRhdGFIYW5kbGVyKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLnN0dWZmLmFwcGVuZCh0ZXh0KQorCisgICAgZGVmIFN0YXJ0RWxlbWVudEhhbmRsZXIoc2VsZiwgbmFtZSwgYXR0cnMpOgorICAgICAgICBzZWxmLnN0dWZmLmFwcGVuZCgiPCVzPiIgJSBuYW1lKQorICAgICAgICBidCA9IGF0dHJzLmdldCgiYnVmZmVyLXRleHQiKQorICAgICAgICBpZiBidCA9PSAieWVzIjoKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorICAgICAgICBlbGlmIGJ0ID09ICJubyI6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5idWZmZXJfdGV4dCA9IDAKKworICAgIGRlZiBFbmRFbGVtZW50SGFuZGxlcihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5zdHVmZi5hcHBlbmQoIjwvJXM+IiAlIG5hbWUpCisKKyAgICBkZWYgQ29tbWVudEhhbmRsZXIoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc3R1ZmYuYXBwZW5kKCI8IS0tJXMtLT4iICUgZGF0YSkKKworICAgIGRlZiBzZXRIYW5kbGVycyhzZWxmLCBoYW5kbGVycz1bXSk6CisgICAgICAgIGZvciBuYW1lIGluIGhhbmRsZXJzOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLnBhcnNlciwgbmFtZSwgZ2V0YXR0cihzZWxmLCBuYW1lKSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfdG9fZGlzYWJsZWQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFyc2VyLmJ1ZmZlcl90ZXh0KQorCisgICAgZGVmIHRlc3RfYnVmZmVyaW5nX2VuYWJsZWQoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGJ1ZmZlcmluZyBpcyB0dXJuZWQgb24KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmJ1ZmZlcl90ZXh0KQorICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4yPGMvPjM8L2E+IiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLCBbJzEyMyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJlZCB0ZXh0IG5vdCBwcm9wZXJseSBjb2xsYXBzZWQiKQorCisgICAgZGVmIHRlc3QxKHNlbGYpOgorICAgICAgICAjIFhYWCBUaGlzIHRlc3QgZXhwb3NlcyBtb3JlIGRldGFpbCBvZiBFeHBhdCdzIHRleHQgY2h1bmtpbmcgdGhhbiB3ZQorICAgICAgICAjIFhYWCBsaWtlLCBidXQgaXQgdGVzdHMgd2hhdCB3ZSBuZWVkIHRvIGNvbmNpc2VseS4KKyAgICAgICAgc2VsZi5zZXRIYW5kbGVycyhbIlN0YXJ0RWxlbWVudEhhbmRsZXIiXSkKKyAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8YiBidWZmZXItdGV4dD0nbm8nLz4yXG4zPGMgYnVmZmVyLXRleHQ9J3llcycvPjRcbjU8L2E+IiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjIiLCAiXG4iLCAiMyIsICI8Yz4iLCAiNFxuNSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJpbmcgY29udHJvbCBub3QgcmVhY3RpbmcgYXMgZXhwZWN0ZWQiKQorCisgICAgZGVmIHRlc3QyKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4mbHQ7MiZndDs8Yy8+JiMzMjtcbiYjeDIwOzM8L2E+IiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLCBbIjE8Mj4gXG4gMyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJlZCB0ZXh0IG5vdCBwcm9wZXJseSBjb2xsYXBzZWQiKQorCisgICAgZGVmIHRlc3QzKHNlbGYpOgorICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiU3RhcnRFbGVtZW50SGFuZGxlciJdKQorICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4yPGMvPjM8L2E+IiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLCBbIjxhPiIsICIxIiwgIjxiPiIsICIyIiwgIjxjPiIsICIzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJlZCB0ZXh0IG5vdCBwcm9wZXJseSBzcGxpdCIpCisKKyAgICBkZWYgdGVzdDQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0SGFuZGxlcnMoWyJTdGFydEVsZW1lbnRIYW5kbGVyIiwgIkVuZEVsZW1lbnRIYW5kbGVyIl0pCisgICAgICAgIHNlbGYucGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gTm9uZQorICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4yPGMvPjM8L2E+IiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiPGE+IiwgIjxiPiIsICI8L2I+IiwgIjxjPiIsICI8L2M+IiwgIjwvYT4iXSkKKworICAgIGRlZiB0ZXN0NShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRIYW5kbGVycyhbIlN0YXJ0RWxlbWVudEhhbmRsZXIiLCAiRW5kRWxlbWVudEhhbmRsZXIiXSkKKyAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yj48L2I+MjxjLz4zPC9hPiIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdHVmZiwKKyAgICAgICAgICAgIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjwvYj4iLCAiMiIsICI8Yz4iLCAiPC9jPiIsICIzIiwgIjwvYT4iXSkKKworICAgIGRlZiB0ZXN0NihzZWxmKToKKyAgICAgICAgc2VsZi5zZXRIYW5kbGVycyhbIkNvbW1lbnRIYW5kbGVyIiwgIkVuZEVsZW1lbnRIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgIlN0YXJ0RWxlbWVudEhhbmRsZXIiXSkKKyAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yi8+MjxjPjwvYz4zNDU8L2E+ICIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdHVmZiwKKyAgICAgICAgICAgIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjwvYj4iLCAiMiIsICI8Yz4iLCAiPC9jPiIsICIzNDUiLCAiPC9hPiJdLAorICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IHNwbGl0IikKKworICAgIGRlZiB0ZXN0NyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXRIYW5kbGVycyhbIkNvbW1lbnRIYW5kbGVyIiwgIkVuZEVsZW1lbnRIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgIlN0YXJ0RWxlbWVudEhhbmRsZXIiXSkKKyAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yi8+MjxjPjwvYz4zPCEtLWFiYy0tPjQ8IS0tZGVmLS0+NTwvYT4gIiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjwvYj4iLCAiMiIsICI8Yz4iLCAiPC9jPiIsICIzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjwhLS1hYmMtLT4iLCAiNCIsICI8IS0tZGVmLS0+IiwgIjUiLCAiPC9hPiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJlZCB0ZXh0IG5vdCBwcm9wZXJseSBzcGxpdCIpCisKKworIyBUZXN0IGhhbmRsaW5nIG9mIGV4Y2VwdGlvbiBmcm9tIGNhbGxiYWNrOgorY2xhc3MgSGFuZGxlckV4Y2VwdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBTdGFydEVsZW1lbnRIYW5kbGVyKHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKG5hbWUpCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLlN0YXJ0RWxlbWVudEhhbmRsZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLlBhcnNlKCI8YT48Yj48Yy8+PC9iPjwvYT4iLCAxKQorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAnYScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBSdW50aW1lRXJyb3IgZm9yIGVsZW1lbnQgJ2EnLCBidXQiICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvdW5kICVyIiAlIGUuYXJnc1swXSkKKworCisjIFRlc3QgQ3VycmVudCogbWVtYmVyczoKK2NsYXNzIFBvc2l0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIFN0YXJ0RWxlbWVudEhhbmRsZXIoc2VsZiwgbmFtZSwgYXR0cnMpOgorICAgICAgICBzZWxmLmNoZWNrX3BvcygncycpCisKKyAgICBkZWYgRW5kRWxlbWVudEhhbmRsZXIoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuY2hlY2tfcG9zKCdlJykKKworICAgIGRlZiBjaGVja19wb3Moc2VsZiwgZXZlbnQpOgorICAgICAgICBwb3MgPSAoZXZlbnQsCisgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50Qnl0ZUluZGV4LAorICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuQ3VycmVudExpbmVOdW1iZXIsCisgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50Q29sdW1uTnVtYmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi51cHRvIDwgbGVuKHNlbGYuZXhwZWN0ZWRfbGlzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAndG9vIG1hbnkgcGFyc2VyIGV2ZW50cycpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5leHBlY3RlZF9saXN0W3NlbGYudXB0b10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3MsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICdFeHBlY3RlZCBwb3NpdGlvbiAlcywgZ290IHBvc2l0aW9uICVzJyAlKHBvcywgZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLnVwdG8gKz0gMQorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgc2VsZi5wYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuU3RhcnRFbGVtZW50SGFuZGxlcgorICAgICAgICBzZWxmLnBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuRW5kRWxlbWVudEhhbmRsZXIKKyAgICAgICAgc2VsZi51cHRvID0gMAorICAgICAgICBzZWxmLmV4cGVjdGVkX2xpc3QgPSBbKCdzJywgMCwgMSwgMCksICgncycsIDUsIDIsIDEpLCAoJ3MnLCAxMSwgMywgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2UnLCAxNSwgMywgNiksICgnZScsIDE3LCA0LCAxKSwgKCdlJywgMjIsIDUsIDApXQorCisgICAgICAgIHhtbCA9ICc8YT5cbiA8Yj5cbiAgPGMvPlxuIDwvYj5cbjwvYT4nCisgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKHhtbCwgMSkKKworCitjbGFzcyBzZjEyOTY0MzNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wYXJzZV9vbmx5X3htbF9kYXRhKHNlbGYpOgorICAgICAgICAjIGh0dHA6Ly9weXRob24ub3JnL3NmLzEyOTY0MzMKKyAgICAgICAgIworICAgICAgICB4bWwgPSAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvODg1OSc/PjxzPiVzPC9zPiIgJSAoJ2EnICogMTAyNSkKKyAgICAgICAgIyB0aGlzIG9uZSBkb2Vzbid0IGNyYXNoCisgICAgICAgICN4bWwgPSAiPD94bWwgdmVyc2lvbj0nMS4wJz8+PHM+JXM8L3M+IiAlICgnYScgKiAxMDAwMCkKKworICAgICAgICBjbGFzcyBTcGVjaWZpY0V4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBoYW5kbGVyKHRleHQpOgorICAgICAgICAgICAgcmFpc2UgU3BlY2lmaWNFeGNlcHRpb24KKworICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBoYW5kbGVyCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBwYXJzZXIuUGFyc2UsIHhtbCkKKworY2xhc3MgQ2hhcmRhdGFCdWZmZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICB0ZXN0IHNldHRpbmcgb2YgY2hhcmRhdGEgYnVmZmVyIHNpemUKKyAgICAiIiIKKworICAgIGRlZiB0ZXN0XzEwMjVfYnl0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zbWFsbF9idWZmZXJfdGVzdCgxMDI1KSwgMikKKworICAgIGRlZiB0ZXN0XzEwMDBfYnl0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zbWFsbF9idWZmZXJfdGVzdCgxMDAwKSwgMSkKKworICAgIGRlZiB0ZXN0X3dyb25nX3NpemUoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKKyAgICAgICAgZGVmIGYoc2l6ZSk6CisgICAgICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSBzaXplCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBzeXMubWF4aW50KzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLCAwKQorCisgICAgZGVmIHRlc3RfdW5jaGFuZ2VkX3NpemUoc2VsZik6CisgICAgICAgIHhtbDEgPSAoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzbzg4NTknPz48cz4lcyIgJSAoJ2EnICogNTEyKSkKKyAgICAgICAgeG1sMiA9ICdhJyo1MTIgKyAnPC9zPicKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgcGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5jb3VudGluZ19oYW5kbGVyCisgICAgICAgIHBhcnNlci5idWZmZXJfc2l6ZSA9IDUxMgorICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCisKKyAgICAgICAgIyBGZWVkIDUxMiBieXRlcyBvZiBjaGFyYWN0ZXIgZGF0YTogdGhlIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxlZAorICAgICAgICAjIG9uY2UuCisgICAgICAgIHNlbGYubiA9IDAKKyAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAxKQorCisgICAgICAgICMgUmVhc3NpZ24gdG8gYnVmZmVyX3NpemUsIGJ1dCBhc3NpZ24gdGhlIHNhbWUgc2l6ZS4KKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gcGFyc2VyLmJ1ZmZlcl9zaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAxKQorCisgICAgICAgICMgVHJ5IHBhcnNpbmcgcmVzdCBvZiB0aGUgZG9jdW1lbnQKKyAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAyKQorCisKKyAgICBkZWYgdGVzdF9kaXNhYmxpbmdfYnVmZmVyKHNlbGYpOgorICAgICAgICB4bWwxID0gIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzbzg4NTknPz48YT4lcyIgJSAoJ2EnICogNTEyKQorICAgICAgICB4bWwyID0gKCdiJyAqIDEwMjQpCisgICAgICAgIHhtbDMgPSAiJXM8L2E+IiAlICgnYycgKiAxMDI0KQorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmNvdW50aW5nX2hhbmRsZXIKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSAxMDI0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQorCisgICAgICAgICMgUGFyc2Ugb25lIGNodW5rIG9mIFhNTAorICAgICAgICBzZWxmLm4gPSAwCisgICAgICAgIHBhcnNlci5QYXJzZSh4bWwxLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDEpCisKKyAgICAgICAgIyBUdXJuIG9mZiBidWZmZXJpbmcgYW5kIHBhcnNlIHRoZSBuZXh0IGNodW5rLgorICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFyc2VyLmJ1ZmZlcl90ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAxMSkKKworICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXJzZXIuYnVmZmVyX3RleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQorICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDEyKQorCisKKworICAgIGRlZiBtYWtlX2RvY3VtZW50KHNlbGYsIGJ5dGVzKToKKyAgICAgICAgcmV0dXJuICgiPD94bWwgdmVyc2lvbj0nMS4wJz8+PHRhZz4iICsgYnl0ZXMgKiAnYScgKyAnPC90YWc+JykKKworICAgIGRlZiBjb3VudGluZ19oYW5kbGVyKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLm4gKz0gMQorCisgICAgZGVmIHNtYWxsX2J1ZmZlcl90ZXN0KHNlbGYsIGJ1ZmZlcl9sZW4pOgorICAgICAgICB4bWwgPSAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvODg1OSc/PjxzPiVzPC9zPiIgJSAoJ2EnICogYnVmZmVyX2xlbikKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgcGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5jb3VudGluZ19oYW5kbGVyCisgICAgICAgIHBhcnNlci5idWZmZXJfc2l6ZSA9IDEwMjQKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorCisgICAgICAgIHNlbGYubiA9IDAKKyAgICAgICAgcGFyc2VyLlBhcnNlKHhtbCkKKyAgICAgICAgcmV0dXJuIHNlbGYubgorCisgICAgZGVmIHRlc3RfY2hhbmdlX3NpemVfMShzZWxmKToKKyAgICAgICAgeG1sMSA9ICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc284ODU5Jz8+PGE+PHM+JXMiICUgKCdhJyAqIDEwMjQpCisgICAgICAgIHhtbDIgPSAiYWFhPC9zPjxzPiVzPC9zPjwvYT4iICUgKCdhJyAqIDEwMjUpCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuY291bnRpbmdfaGFuZGxlcgorICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCisgICAgICAgIHBhcnNlci5idWZmZXJfc2l6ZSA9IDEwMjQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCisKKyAgICAgICAgc2VsZi5uID0gMAorICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMSwgMCkKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplICo9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDIwNDgpCisgICAgICAgIHBhcnNlci5QYXJzZSh4bWwyLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgMikKKworICAgIGRlZiB0ZXN0X2NoYW5nZV9zaXplXzIoc2VsZik6CisgICAgICAgIHhtbDEgPSAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvODg1OSc/PjxhPmE8cz4lcyIgJSAoJ2EnICogMTAyMykKKyAgICAgICAgeG1sMiA9ICJhYWE8L3M+PHM+JXM8L3M+PC9hPiIgJSAoJ2EnICogMTAyNSkKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgcGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5jb3VudGluZ19oYW5kbGVyCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gMjA0OAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMjA0OCkKKworICAgICAgICBzZWxmLm49MAorICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMSwgMCkKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplIC8vPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQorICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDQpCisKK2NsYXNzIE1hbGZvcm1lZElucHV0VGV4dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3QxKHNlbGYpOgorICAgICAgICB4bWwgPSAiXDBcclxuIgorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIuUGFyc2UoeG1sLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgZXhjZXB0IGV4cGF0LkV4cGF0RXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAndW5jbG9zZWQgdG9rZW46IGxpbmUgMiwgY29sdW1uIDAnKQorCisgICAgZGVmIHRlc3QyKHNlbGYpOgorICAgICAgICB4bWwgPSAiPD94bWwgdmVyc2lvblx4YzJceDg1PScxLjAnPz5cclxuIgorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIuUGFyc2UoeG1sLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgZXhjZXB0IGV4cGF0LkV4cGF0RXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAnWE1MIGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZDogbGluZSAxLCBjb2x1bW4gMTQnKQorCitjbGFzcyBGb3JlaWduRFREVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciB0aGUgVXNlRm9yZWlnbkRURCBtZXRob2Qgb2YgZXhwYXQgcGFyc2VyIG9iamVjdHMuCisgICAgIiIiCisgICAgZGVmIHRlc3RfdXNlX2ZvcmVpZ25fZHRkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgVXNlRm9yZWlnbkRURCBpcyBwYXNzZWQgVHJ1ZSBhbmQgYSBkb2N1bWVudCB3aXRob3V0IGFuIGV4dGVybmFsCisgICAgICAgIGVudGl0eSByZWZlcmVuY2UgaXMgcGFyc2VkLCBFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgaXMgZmlyc3QgY2FsbGVkCisgICAgICAgIHdpdGggTm9uZSBmb3IgdGhlIHB1YmxpYyBhbmQgc3lzdGVtIGlkcy4KKyAgICAgICAgIiIiCisgICAgICAgIGhhbmRsZXJfY2FsbF9hcmdzID0gW10KKyAgICAgICAgZGVmIHJlc29sdmVfZW50aXR5KGNvbnRleHQsIGJhc2UsIHN5c3RlbV9pZCwgcHVibGljX2lkKToKKyAgICAgICAgICAgIGhhbmRsZXJfY2FsbF9hcmdzLmFwcGVuZCgocHVibGljX2lkLCBzeXN0ZW1faWQpKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBwYXJzZXIuVXNlRm9yZWlnbkRURChUcnVlKQorICAgICAgICBwYXJzZXIuU2V0UGFyYW1FbnRpdHlQYXJzaW5nKGV4cGF0LlhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19BTFdBWVMpCisgICAgICAgIHBhcnNlci5FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgPSByZXNvbHZlX2VudGl0eQorICAgICAgICBwYXJzZXIuUGFyc2UoIjw/eG1sIHZlcnNpb249JzEuMCc/PjxlbGVtZW50Lz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXJfY2FsbF9hcmdzLCBbKE5vbmUsIE5vbmUpXSkKKworICAgICAgICAjIHRlc3QgVXNlRm9yZWlnbkRURCgpIGlzIGVxdWFsIHRvIFVzZUZvcmVpZ25EVEQoVHJ1ZSkKKyAgICAgICAgaGFuZGxlcl9jYWxsX2FyZ3NbOl0gPSBbXQorCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHBhcnNlci5Vc2VGb3JlaWduRFREKCkKKyAgICAgICAgcGFyc2VyLlNldFBhcmFtRW50aXR5UGFyc2luZyhleHBhdC5YTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfQUxXQVlTKQorICAgICAgICBwYXJzZXIuRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyID0gcmVzb2x2ZV9lbnRpdHkKKyAgICAgICAgcGFyc2VyLlBhcnNlKCI8P3htbCB2ZXJzaW9uPScxLjAnPz48ZWxlbWVudC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyX2NhbGxfYXJncywgWyhOb25lLCBOb25lKV0pCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfdXNlX2ZvcmVpZ25fZHRkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgVXNlRm9yZWlnbkRURCBpcyBwYXNzZWQgVHJ1ZSBhbmQgYSBkb2N1bWVudCB3aXRoIGFuIGV4dGVybmFsCisgICAgICAgIGVudGl0eSByZWZlcmVuY2UgaXMgcGFyc2VkLCBFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgaXMgY2FsbGVkIHdpdGgKKyAgICAgICAgdGhlIHB1YmxpYyBhbmQgc3lzdGVtIGlkcyBmcm9tIHRoZSBkb2N1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGhhbmRsZXJfY2FsbF9hcmdzID0gW10KKyAgICAgICAgZGVmIHJlc29sdmVfZW50aXR5KGNvbnRleHQsIGJhc2UsIHN5c3RlbV9pZCwgcHVibGljX2lkKToKKyAgICAgICAgICAgIGhhbmRsZXJfY2FsbF9hcmdzLmFwcGVuZCgocHVibGljX2lkLCBzeXN0ZW1faWQpKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBwYXJzZXIuVXNlRm9yZWlnbkRURChUcnVlKQorICAgICAgICBwYXJzZXIuU2V0UGFyYW1FbnRpdHlQYXJzaW5nKGV4cGF0LlhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19BTFdBWVMpCisgICAgICAgIHBhcnNlci5FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgPSByZXNvbHZlX2VudGl0eQorICAgICAgICBwYXJzZXIuUGFyc2UoCisgICAgICAgICAgICAiPD94bWwgdmVyc2lvbj0nMS4wJz8+PCFET0NUWVBFIGZvbyBQVUJMSUMgJ2JhcicgJ2Jheic+PGVsZW1lbnQvPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlcl9jYWxsX2FyZ3MsIFsoImJhciIsICJiYXoiKV0pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChTZXRBdHRyaWJ1dGVUZXN0LAorICAgICAgICAgICAgICAgICBQYXJzZVRlc3QsCisgICAgICAgICAgICAgICAgIE5hbWVzcGFjZVNlcGFyYXRvclRlc3QsCisgICAgICAgICAgICAgICAgIEludGVybmluZ1Rlc3QsCisgICAgICAgICAgICAgICAgIEJ1ZmZlclRleHRUZXN0LAorICAgICAgICAgICAgICAgICBIYW5kbGVyRXhjZXB0aW9uVGVzdCwKKyAgICAgICAgICAgICAgICAgUG9zaXRpb25UZXN0LAorICAgICAgICAgICAgICAgICBzZjEyOTY0MzNUZXN0LAorICAgICAgICAgICAgICAgICBDaGFyZGF0YUJ1ZmZlclRlc3QsCisgICAgICAgICAgICAgICAgIE1hbGZvcm1lZElucHV0VGV4dCwKKyAgICAgICAgICAgICAgICAgRm9yZWlnbkRURFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9xdWV1ZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3F1ZXVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YTRhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9xdWV1ZS5weQpAQCAtMCwwICsxLDMyNSBAQAorIyBTb21lIHNpbXBsZSBxdWV1ZSBtb2R1bGUgdGVzdHMsIHBsdXMgc29tZSBmYWlsdXJlIGNvbmRpdGlvbnMKKyMgdG8gZW5zdXJlIHRoZSBRdWV1ZSBsb2NrcyByZW1haW4gc3RhYmxlLgoraW1wb3J0IFF1ZXVlCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCisKK1FVRVVFX1NJWkUgPSA1CisKKyMgQSB0aHJlYWQgdG8gcnVuIGEgZnVuY3Rpb24gdGhhdCB1bmNsb2dzIGEgYmxvY2tlZCBRdWV1ZS4KK2NsYXNzIF9UcmlnZ2VyVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbiwgYXJncyk6CisgICAgICAgIHNlbGYuZm4gPSBmbgorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYuc3RhcnRlZEV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgIyBUaGUgc2xlZXAgaXNuJ3QgbmVjZXNzYXJ5LCBidXQgaXMgaW50ZW5kZWQgdG8gZ2l2ZSB0aGUgYmxvY2tpbmcKKyAgICAgICAgIyBmdW5jdGlvbiBpbiB0aGUgbWFpbiB0aHJlYWQgYSBjaGFuY2UgYXQgYWN0dWFsbHkgYmxvY2tpbmcgYmVmb3JlCisgICAgICAgICMgd2UgdW5jbG9nIGl0LiAgQnV0IGlmIHRoZSBzbGVlcCBpcyBsb25nZXIgdGhhbiB0aGUgdGltZW91dC1iYXNlZAorICAgICAgICAjIHRlc3RzIHdhaXQgaW4gdGhlaXIgYmxvY2tpbmcgZnVuY3Rpb25zLCB0aG9zZSB0ZXN0cyB3aWxsIGZhaWwuCisgICAgICAgICMgU28gd2UgZ2l2ZSB0aGVtIG11Y2ggbG9uZ2VyIHRpbWVvdXQgdmFsdWVzIGNvbXBhcmVkIHRvIHRoZQorICAgICAgICAjIHNsZWVwIGhlcmUgKEkgYWltZWQgYXQgMTAgc2Vjb25kcyBmb3IgYmxvY2tpbmcgZnVuY3Rpb25zIC0tCisgICAgICAgICMgdGhleSBzaG91bGQgbmV2ZXIgYWN0dWFsbHkgd2FpdCB0aGF0IGxvbmcgLSB0aGV5IHNob3VsZCBtYWtlCisgICAgICAgICMgcHJvZ3Jlc3MgYXMgc29vbiBhcyB3ZSBjYWxsIHNlbGYuZm4oKSkuCisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICBzZWxmLnN0YXJ0ZWRFdmVudC5zZXQoKQorICAgICAgICBzZWxmLmZuKCpzZWxmLmFyZ3MpCisKKworIyBFeGVjdXRlIGEgZnVuY3Rpb24gdGhhdCBibG9ja3MsIGFuZCBpbiBhIHNlcGFyYXRlIHRocmVhZCwgYSBmdW5jdGlvbiB0aGF0CisjIHRyaWdnZXJzIHRoZSByZWxlYXNlLiAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBibG9ja2luZyBmdW5jdGlvbi4gIENhdXRpb246CisjIGJsb2NrX2Z1bmMgbXVzdCBndWFyYW50ZWUgdG8gYmxvY2sgdW50aWwgdHJpZ2dlcl9mdW5jIGlzIGNhbGxlZCwgYW5kCisjIHRyaWdnZXJfZnVuYyBtdXN0IGd1YXJhbnRlZSB0byBjaGFuZ2UgcXVldWUgc3RhdGUgc28gdGhhdCBibG9ja19mdW5jIGNhbiBtYWtlCisjIGVub3VnaCBwcm9ncmVzcyB0byByZXR1cm4uICBJbiBwYXJ0aWN1bGFyLCBhIGJsb2NrX2Z1bmMgdGhhdCBqdXN0IHJhaXNlcyBhbgorIyBleGNlcHRpb24gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRyaWdnZXJfZnVuYyBpcyBjYWxsZWQgd2lsbCBsZWFkIHRvCisjIHRpbWluZy1kZXBlbmRlbnQgc3BvcmFkaWMgZmFpbHVyZXMsIGFuZCBvbmUgb2YgdGhvc2Ugd2VudCByYXJlbHkgc2VlbiBidXQKKyMgdW5kaWFnbm9zZWQgZm9yIHllYXJzLiAgTm93IGJsb2NrX2Z1bmMgbXVzdCBiZSB1bmV4Y2VwdGlvbmFsLiAgSWYgYmxvY2tfZnVuYworIyBpcyBzdXBwb3NlZCB0byByYWlzZSBhbiBleGNlcHRpb24sIGNhbGwgZG9fZXhjZXB0aW9uYWxfYmxvY2tpbmdfdGVzdCgpCisjIGluc3RlYWQuCisKK2NsYXNzIEJsb2NraW5nVGVzdE1peGluOgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnQgPSBOb25lCisKKyAgICBkZWYgZG9fYmxvY2tpbmdfdGVzdChzZWxmLCBibG9ja19mdW5jLCBibG9ja19hcmdzLCB0cmlnZ2VyX2Z1bmMsIHRyaWdnZXJfYXJncyk6CisgICAgICAgIHNlbGYudCA9IF9UcmlnZ2VyVGhyZWFkKHRyaWdnZXJfZnVuYywgdHJpZ2dlcl9hcmdzKQorICAgICAgICBzZWxmLnQuc3RhcnQoKQorICAgICAgICBzZWxmLnJlc3VsdCA9IGJsb2NrX2Z1bmMoKmJsb2NrX2FyZ3MpCisgICAgICAgICMgSWYgYmxvY2tfZnVuYyByZXR1cm5lZCBiZWZvcmUgb3VyIHRocmVhZCBtYWRlIHRoZSBjYWxsLCB3ZSBmYWlsZWQhCisgICAgICAgIGlmIG5vdCBzZWxmLnQuc3RhcnRlZEV2ZW50LmlzX3NldCgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJibG9ja2luZyBmdW5jdGlvbiAnJXInIGFwcGVhcmVkIG5vdCB0byBibG9jayIgJQorICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX2Z1bmMpCisgICAgICAgIHNlbGYudC5qb2luKDEwKSAjIG1ha2Ugc3VyZSB0aGUgdGhyZWFkIHRlcm1pbmF0ZXMKKyAgICAgICAgaWYgc2VsZi50LmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoInRyaWdnZXIgZnVuY3Rpb24gJyVyJyBhcHBlYXJlZCB0byBub3QgcmV0dXJuIiAlCisgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcl9mdW5jKQorICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQKKworICAgICMgQ2FsbCB0aGlzIGluc3RlYWQgaWYgYmxvY2tfZnVuYyBpcyBzdXBwb3NlZCB0byByYWlzZSBhbiBleGNlcHRpb24uCisgICAgZGVmIGRvX2V4Y2VwdGlvbmFsX2Jsb2NraW5nX3Rlc3Qoc2VsZixibG9ja19mdW5jLCBibG9ja19hcmdzLCB0cmlnZ2VyX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJfYXJncywgZXhwZWN0ZWRfZXhjZXB0aW9uX2NsYXNzKToKKyAgICAgICAgc2VsZi50ID0gX1RyaWdnZXJUaHJlYWQodHJpZ2dlcl9mdW5jLCB0cmlnZ2VyX2FyZ3MpCisgICAgICAgIHNlbGYudC5zdGFydCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBibG9ja19mdW5jKCpibG9ja19hcmdzKQorICAgICAgICAgICAgZXhjZXB0IGV4cGVjdGVkX2V4Y2VwdGlvbl9jbGFzczoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBvZiBraW5kICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9leGNlcHRpb25fY2xhc3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnQuam9pbigxMCkgIyBtYWtlIHN1cmUgdGhlIHRocmVhZCB0ZXJtaW5hdGVzCisgICAgICAgICAgICBpZiBzZWxmLnQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInRyaWdnZXIgZnVuY3Rpb24gJyVyJyBhcHBlYXJlZCB0byBub3QgcmV0dXJuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyX2Z1bmMpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi50LnN0YXJ0ZWRFdmVudC5pc19zZXQoKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInRyaWdnZXIgdGhyZWFkIGVuZGVkIGJ1dCBldmVudCBuZXZlciBzZXQiKQorCisKK2NsYXNzIEJhc2VRdWV1ZVRlc3QoQmxvY2tpbmdUZXN0TWl4aW4pOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jdW0gPSAwCisgICAgICAgIHNlbGYuY3VtbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiBzaW1wbGVfcXVldWVfdGVzdChzZWxmLCBxKToKKyAgICAgICAgaWYgbm90IHEuZW1wdHkoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIkNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGFuIGVtcHR5IHF1ZXVlIgorICAgICAgICAjIEkgZ3Vlc3Mgd2UgYmV0dGVyIGNoZWNrIHRoaW5ncyBhY3R1YWxseSBxdWV1ZSBjb3JyZWN0bHkgYSBsaXR0bGUgOikKKyAgICAgICAgcS5wdXQoMTExKQorICAgICAgICBxLnB1dCgzMzMpCisgICAgICAgIHEucHV0KDIyMikKKyAgICAgICAgdGFyZ2V0X29yZGVyID0gZGljdChRdWV1ZSA9IFsxMTEsIDMzMywgMjIyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWZvUXVldWUgPSBbMjIyLCAzMzMsIDExMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHlRdWV1ZSA9IFsxMTEsIDIyMiwgMzMzXSkKKyAgICAgICAgYWN0dWFsX29yZGVyID0gW3EuZ2V0KCksIHEuZ2V0KCksIHEuZ2V0KCldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX29yZGVyLCB0YXJnZXRfb3JkZXJbcS5fX2NsYXNzX18uX19uYW1lX19dLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3Qgc2VlbSB0byBxdWV1ZSB0aGUgY29ycmVjdCBkYXRhISIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKFFVRVVFX1NJWkUtMSk6CisgICAgICAgICAgICBxLnB1dChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZnVsbCIpCisgICAgICAgIGxhc3QgPSAyICogUVVFVUVfU0laRQorICAgICAgICBmdWxsID0gMyAqIDIgKiBRVUVVRV9TSVpFCisgICAgICAgIHEucHV0KGxhc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBiZSBmdWxsIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcS5wdXQoZnVsbCwgYmxvY2s9MCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IGFwcGVhciB0byBibG9jayB3aXRoIGEgZnVsbCBxdWV1ZSIpCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5GdWxsOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBxLnB1dChmdWxsLCB0aW1lb3V0PTAuMDEpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCBhcHBlYXIgdG8gdGltZS1vdXQgd2l0aCBhIGZ1bGwgcXVldWUiKQorICAgICAgICBleGNlcHQgUXVldWUuRnVsbDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBUZXN0IGEgYmxvY2tpbmcgcHV0CisgICAgICAgIHNlbGYuZG9fYmxvY2tpbmdfdGVzdChxLnB1dCwgKGZ1bGwsKSwgcS5nZXQsICgpKQorICAgICAgICBzZWxmLmRvX2Jsb2NraW5nX3Rlc3QocS5wdXQsIChmdWxsLCBUcnVlLCAxMCksIHEuZ2V0LCAoKSkKKyAgICAgICAgIyBFbXB0eSBpdAorICAgICAgICBmb3IgaSBpbiByYW5nZShRVUVVRV9TSVpFKToKKyAgICAgICAgICAgIHEuZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBiZSBlbXB0eSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHEuZ2V0KGJsb2NrPTApCisgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCBhcHBlYXIgdG8gYmxvY2sgd2l0aCBhbiBlbXB0eSBxdWV1ZSIpCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcS5nZXQodGltZW91dD0wLjAxKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgYXBwZWFyIHRvIHRpbWUtb3V0IHdpdGggYW4gZW1wdHkgcXVldWUiKQorICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgVGVzdCBhIGJsb2NraW5nIGdldAorICAgICAgICBzZWxmLmRvX2Jsb2NraW5nX3Rlc3QocS5nZXQsICgpLCBxLnB1dCwgKCdlbXB0eScsKSkKKyAgICAgICAgc2VsZi5kb19ibG9ja2luZ190ZXN0KHEuZ2V0LCAoVHJ1ZSwgMTApLCBxLnB1dCwgKCdlbXB0eScsKSkKKworCisgICAgZGVmIHdvcmtlcihzZWxmLCBxKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHggPSBxLmdldCgpCisgICAgICAgICAgICBpZiB4IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgd2l0aCBzZWxmLmN1bWxvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5jdW0gKz0geAorICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorCisgICAgZGVmIHF1ZXVlX2pvaW5fdGVzdChzZWxmLCBxKToKKyAgICAgICAgc2VsZi5jdW0gPSAwCisgICAgICAgIGZvciBpIGluICgwLDEpOgorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi53b3JrZXIsIGFyZ3M9KHEsKSkuc3RhcnQoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHEucHV0KGkpCisgICAgICAgIHEuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jdW0sIHN1bShyYW5nZSgxMDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicS5qb2luKCkgZGlkIG5vdCBibG9jayB1bnRpbCBhbGwgdGFza3Mgd2VyZSBkb25lIikKKyAgICAgICAgZm9yIGkgaW4gKDAsMSk6CisgICAgICAgICAgICBxLnB1dChOb25lKSAgICAgICAgICMgaW5zdHJ1Y3QgdGhlIHRocmVhZHMgdG8gY2xvc2UKKyAgICAgICAgcS5qb2luKCkgICAgICAgICAgICAgICAgIyB2ZXJpZnkgdGhhdCB5b3UgY2FuIGpvaW4gdHdpY2UKKworICAgIGRlZiB0ZXN0X3F1ZXVlX3Rhc2tfZG9uZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRvIG1ha2Ugc3VyZSBhIHF1ZXVlIHRhc2sgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgcSA9IHNlbGYudHlwZTJ0ZXN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkIG5vdCBkZXRlY3QgdGFzayBjb3VudCBnb2luZyBuZWdhdGl2ZSIpCisKKyAgICBkZWYgdGVzdF9xdWV1ZV9qb2luKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhIHF1ZXVlIGpvaW4oKXMgc3VjY2Vzc2Z1bGx5LCBhbmQgYmVmb3JlIGFueXRoaW5nIGVsc2UKKyAgICAgICAgIyAoZG9uZSB0d2ljZSBmb3IgaW5zdXJhbmNlKS4KKyAgICAgICAgcSA9IHNlbGYudHlwZTJ0ZXN0KCkKKyAgICAgICAgc2VsZi5xdWV1ZV9qb2luX3Rlc3QocSkKKyAgICAgICAgc2VsZi5xdWV1ZV9qb2luX3Rlc3QocSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkIG5vdCBkZXRlY3QgdGFzayBjb3VudCBnb2luZyBuZWdhdGl2ZSIpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcXVldWUoc2VsZik6CisgICAgICAgICMgRG8gaXQgYSBjb3VwbGUgb2YgdGltZXMgb24gdGhlIHNhbWUgcXVldWUuCisgICAgICAgICMgRG9uZSB0d2ljZSB0byBtYWtlIHN1cmUgd29ya3Mgd2l0aCBzYW1lIGluc3RhbmNlIHJldXNlZC4KKyAgICAgICAgcSA9IHNlbGYudHlwZTJ0ZXN0KFFVRVVFX1NJWkUpCisgICAgICAgIHNlbGYuc2ltcGxlX3F1ZXVlX3Rlc3QocSkKKyAgICAgICAgc2VsZi5zaW1wbGVfcXVldWVfdGVzdChxKQorCisKK2NsYXNzIFF1ZXVlVGVzdChCYXNlUXVldWVUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdHlwZTJ0ZXN0ID0gUXVldWUuUXVldWUKKworY2xhc3MgTGlmb1F1ZXVlVGVzdChCYXNlUXVldWVUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdHlwZTJ0ZXN0ID0gUXVldWUuTGlmb1F1ZXVlCisKK2NsYXNzIFByaW9yaXR5UXVldWVUZXN0KEJhc2VRdWV1ZVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0eXBlMnRlc3QgPSBRdWV1ZS5Qcmlvcml0eVF1ZXVlCisKKworCisjIEEgUXVldWUgc3ViY2xhc3MgdGhhdCBjYW4gcHJvdm9rZSBmYWlsdXJlIGF0IGEgbW9tZW50J3Mgbm90aWNlIDopCitjbGFzcyBGYWlsaW5nUXVldWVFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIEZhaWxpbmdRdWV1ZShRdWV1ZS5RdWV1ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5mYWlsX25leHRfcHV0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5mYWlsX25leHRfZ2V0ID0gRmFsc2UKKyAgICAgICAgUXVldWUuUXVldWUuX19pbml0X18oc2VsZiwgKmFyZ3MpCisgICAgZGVmIF9wdXQoc2VsZiwgaXRlbSk6CisgICAgICAgIGlmIHNlbGYuZmFpbF9uZXh0X3B1dDoKKyAgICAgICAgICAgIHNlbGYuZmFpbF9uZXh0X3B1dCA9IEZhbHNlCisgICAgICAgICAgICByYWlzZSBGYWlsaW5nUXVldWVFeGNlcHRpb24sICJZb3UgTG9zZSIKKyAgICAgICAgcmV0dXJuIFF1ZXVlLlF1ZXVlLl9wdXQoc2VsZiwgaXRlbSkKKyAgICBkZWYgX2dldChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mYWlsX25leHRfZ2V0OgorICAgICAgICAgICAgc2VsZi5mYWlsX25leHRfZ2V0ID0gRmFsc2UKKyAgICAgICAgICAgIHJhaXNlIEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbiwgIllvdSBMb3NlIgorICAgICAgICByZXR1cm4gUXVldWUuUXVldWUuX2dldChzZWxmKQorCitjbGFzcyBGYWlsaW5nUXVldWVUZXN0KEJsb2NraW5nVGVzdE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgZmFpbGluZ19xdWV1ZV90ZXN0KHNlbGYsIHEpOgorICAgICAgICBpZiBub3QgcS5lbXB0eSgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYW4gZW1wdHkgcXVldWUiCisgICAgICAgIGZvciBpIGluIHJhbmdlKFFVRVVFX1NJWkUtMSk6CisgICAgICAgICAgICBxLnB1dChpKQorICAgICAgICAjIFRlc3QgYSBmYWlsaW5nIG5vbi1ibG9ja2luZyBwdXQuCisgICAgICAgIHEuZmFpbF9uZXh0X3B1dCA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcS5wdXQoIm9vcHMiLCBibG9jaz0wKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJUaGUgcXVldWUgZGlkbid0IGZhaWwgd2hlbiBpdCBzaG91bGQgaGF2ZSIpCisgICAgICAgIGV4Y2VwdCBGYWlsaW5nUXVldWVFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHEuZmFpbF9uZXh0X3B1dCA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcS5wdXQoIm9vcHMiLCB0aW1lb3V0PTAuMSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGhlIHF1ZXVlIGRpZG4ndCBmYWlsIHdoZW4gaXQgc2hvdWxkIGhhdmUiKQorICAgICAgICBleGNlcHQgRmFpbGluZ1F1ZXVlRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBxLnB1dCgibGFzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBiZSBmdWxsIikKKyAgICAgICAgIyBUZXN0IGEgZmFpbGluZyBibG9ja2luZyBwdXQKKyAgICAgICAgcS5mYWlsX25leHRfcHV0ID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRvX2Jsb2NraW5nX3Rlc3QocS5wdXQsICgiZnVsbCIsKSwgcS5nZXQsICgpKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJUaGUgcXVldWUgZGlkbid0IGZhaWwgd2hlbiBpdCBzaG91bGQgaGF2ZSIpCisgICAgICAgIGV4Y2VwdCBGYWlsaW5nUXVldWVFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgQ2hlY2sgdGhlIFF1ZXVlIGlzbid0IGRhbWFnZWQuCisgICAgICAgICMgcHV0IGZhaWxlZCwgYnV0IGdldCBzdWNjZWVkZWQgLSByZS1hZGQKKyAgICAgICAgcS5wdXQoImxhc3QiKQorICAgICAgICAjIFRlc3QgYSBmYWlsaW5nIHRpbWVvdXQgcHV0CisgICAgICAgIHEuZmFpbF9uZXh0X3B1dCA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kb19leGNlcHRpb25hbF9ibG9ja2luZ190ZXN0KHEucHV0LCAoImZ1bGwiLCBUcnVlLCAxMCksIHEuZ2V0LCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWlsaW5nUXVldWVFeGNlcHRpb24pCisgICAgICAgICAgICBzZWxmLmZhaWwoIlRoZSBxdWV1ZSBkaWRuJ3QgZmFpbCB3aGVuIGl0IHNob3VsZCBoYXZlIikKKyAgICAgICAgZXhjZXB0IEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBDaGVjayB0aGUgUXVldWUgaXNuJ3QgZGFtYWdlZC4KKyAgICAgICAgIyBwdXQgZmFpbGVkLCBidXQgZ2V0IHN1Y2NlZWRlZCAtIHJlLWFkZAorICAgICAgICBxLnB1dCgibGFzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBiZSBmdWxsIikKKyAgICAgICAgcS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIG5vdCBiZSBmdWxsIikKKyAgICAgICAgcS5wdXQoImxhc3QiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5mdWxsKCksICJRdWV1ZSBzaG91bGQgYmUgZnVsbCIpCisgICAgICAgICMgVGVzdCBhIGJsb2NraW5nIHB1dAorICAgICAgICBzZWxmLmRvX2Jsb2NraW5nX3Rlc3QocS5wdXQsICgiZnVsbCIsKSwgcS5nZXQsICgpKQorICAgICAgICAjIEVtcHR5IGl0CisgICAgICAgIGZvciBpIGluIHJhbmdlKFFVRVVFX1NJWkUpOgorICAgICAgICAgICAgcS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIGJlIGVtcHR5IikKKyAgICAgICAgcS5wdXQoImZpcnN0IikKKyAgICAgICAgcS5mYWlsX25leHRfZ2V0ID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxLmdldCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlRoZSBxdWV1ZSBkaWRuJ3QgZmFpbCB3aGVuIGl0IHNob3VsZCBoYXZlIikKKyAgICAgICAgZXhjZXB0IEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKKyAgICAgICAgcS5mYWlsX25leHRfZ2V0ID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxLmdldCh0aW1lb3V0PTAuMSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGhlIHF1ZXVlIGRpZG4ndCBmYWlsIHdoZW4gaXQgc2hvdWxkIGhhdmUiKQorICAgICAgICBleGNlcHQgRmFpbGluZ1F1ZXVlRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZW1wdHkiKQorICAgICAgICBxLmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgYmUgZW1wdHkiKQorICAgICAgICBxLmZhaWxfbmV4dF9nZXQgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhjZXB0aW9uYWxfYmxvY2tpbmdfdGVzdChxLmdldCwgKCksIHEucHV0LCAoJ2VtcHR5JywpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGhlIHF1ZXVlIGRpZG4ndCBmYWlsIHdoZW4gaXQgc2hvdWxkIGhhdmUiKQorICAgICAgICBleGNlcHQgRmFpbGluZ1F1ZXVlRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIHB1dCBzdWNjZWVkZWQsIGJ1dCBnZXQgZmFpbGVkLgorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZW1wdHkiKQorICAgICAgICBxLmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgYmUgZW1wdHkiKQorCisgICAgZGVmIHRlc3RfZmFpbGluZ19xdWV1ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRvIG1ha2Ugc3VyZSBhIHF1ZXVlIGlzIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4KKyAgICAgICAgIyBEb25lIHR3aWNlIHRvIHRoZSBzYW1lIGluc3RhbmNlLgorICAgICAgICBxID0gRmFpbGluZ1F1ZXVlKFFVRVVFX1NJWkUpCisgICAgICAgIHNlbGYuZmFpbGluZ19xdWV1ZV90ZXN0KHEpCisgICAgICAgIHNlbGYuZmFpbGluZ19xdWV1ZV90ZXN0KHEpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUXVldWVUZXN0LCBMaWZvUXVldWVUZXN0LCBQcmlvcml0eVF1ZXVlVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhaWxpbmdRdWV1ZVRlc3QpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzRkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKQEAgLTAsMCArMSwyMDEgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHN5cywgY1N0cmluZ0lPLCBzdWJwcm9jZXNzCitpbXBvcnQgcXVvcHJpCisKKworCitFTkNTQU1QTEUgPSAiIiJcCitIZXJlJ3MgYSBidW5jaCBvZiBzcGVjaWFsPTIwCisKKz1BMT1BMj1BMz1BND1BNT1BNj1BNz1BOD1BOQorPUFBPUFCPUFDPUFEPUFFPUFGPUIwPUIxPUIyPUIzCis9QjQ9QjU9QjY9Qjc9Qjg9Qjk9QkE9QkI9QkM9QkQ9QkUKKz1CRj1DMD1DMT1DMj1DMz1DND1DNT1DNgorPUM3PUM4PUM5PUNBPUNCPUNDPUNEPUNFPUNGCis9RDA9RDE9RDI9RDM9RDQ9RDU9RDY9RDcKKz1EOD1EOT1EQT1EQj1EQz1ERD1ERT1ERgorPUUwPUUxPUUyPUUzPUU0PUU1PUU2PUU3Cis9RTg9RTk9RUE9RUI9RUM9RUQ9RUU9RUYKKz1GMD1GMT1GMj1GMz1GND1GNT1GNj1GNworPUY4PUY5PUZBPUZCPUZDPUZEPUZFPUZGCisKK2NoYXJhY3RlcnMuLi4gaGF2ZSBmdW4hCisiIiIKKworIyBGaXJzdCBsaW5lIGVuZHMgd2l0aCBhIHNwYWNlCitERUNTQU1QTEUgPSAiSGVyZSdzIGEgYnVuY2ggb2Ygc3BlY2lhbCBcbiIgKyBcCisiIiJcCisKK1x4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOQorXHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiMworXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmUKK1x4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2CitceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YKK1x4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3CitceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZgorXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTcKK1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmCitceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmNworXHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYKKworY2hhcmFjdGVycy4uLiBoYXZlIGZ1biEKKyIiIgorCisKK2RlZiB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24odGVzdGZ1bmMpOgorICAgIGRlZiBuZXd0ZXN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgICAgICB0ZXN0ZnVuYyhzZWxmKQorICAgICAgICAjIFRlc3QgUHl0aG9uIGltcGxlbWVudGF0aW9uCisgICAgICAgIGlmIHF1b3ByaS5iMmFfcXAgaXMgbm90IE5vbmUgb3IgcXVvcHJpLmEyYl9xcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9sZGVuY29kZSA9IHF1b3ByaS5iMmFfcXAKKyAgICAgICAgICAgIG9sZGRlY29kZSA9IHF1b3ByaS5hMmJfcXAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBxdW9wcmkuYjJhX3FwID0gTm9uZQorICAgICAgICAgICAgICAgIHF1b3ByaS5hMmJfcXAgPSBOb25lCisgICAgICAgICAgICAgICAgdGVzdGZ1bmMoc2VsZikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcXVvcHJpLmIyYV9xcCA9IG9sZGVuY29kZQorICAgICAgICAgICAgICAgIHF1b3ByaS5hMmJfcXAgPSBvbGRkZWNvZGUKKyAgICBuZXd0ZXN0Ll9fbmFtZV9fID0gdGVzdGZ1bmMuX19uYW1lX18KKyAgICByZXR1cm4gbmV3dGVzdAorCitjbGFzcyBRdW9wcmlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBFYWNoIGVudHJ5IGlzIGEgdHVwbGUgb2YgKHBsYWludGV4dCwgZW5jb2RlZCBzdHJpbmcpLiAgVGhlc2Ugc3RyaW5ncyBhcmUKKyAgICAjIHVzZWQgaW4gdGhlICJxdW90ZXRhYnM9MCIgdGVzdHMuCisgICAgU1RSSU5HUyA9ICgKKyAgICAgICAgIyBTb21lIG5vcm1hbCBzdHJpbmdzCisgICAgICAgICgnaGVsbG8nLCAnaGVsbG8nKSwKKyAgICAgICAgKCcnJ2hlbGxvCisgICAgICAgIHRoZXJlCisgICAgICAgIHdvcmxkJycnLCAnJydoZWxsbworICAgICAgICB0aGVyZQorICAgICAgICB3b3JsZCcnJyksCisgICAgICAgICgnJydoZWxsbworICAgICAgICB0aGVyZQorICAgICAgICB3b3JsZAorJycnLCAnJydoZWxsbworICAgICAgICB0aGVyZQorICAgICAgICB3b3JsZAorJycnKSwKKyAgICAgICAgKCdcMjAxXDIwMlwyMDMnLCAnPTgxPTgyPTgzJyksCisgICAgICAgICMgQWRkIHNvbWUgdHJhaWxpbmcgTVVTVCBRVU9URSBzdHJpbmdzCisgICAgICAgICgnaGVsbG8gJywgJ2hlbGxvPTIwJyksCisgICAgICAgICgnaGVsbG9cdCcsICdoZWxsbz0wOScpLAorICAgICAgICAjIFNvbWUgbG9uZyBsaW5lcy4gIEZpcnN0LCBhIHNpbmdsZSBsaW5lIG9mIDEwOCBjaGFyYWN0ZXJzCisgICAgICAgICgneHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZnh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4JywKKyAgICAgICAgICcnJ3h4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4PUQ4PUQ5PURBPURCPURDPUREPURFPURGeD0KK3h4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgnJycpLAorICAgICAgICAjIEEgbGluZSBvZiBleGFjdGx5IDc2IGNoYXJhY3RlcnMsIG5vIHNvZnQgbGluZSBicmVhayBzaG91bGQgYmUgbmVlZGVkCisgICAgICAgICgneXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eScsCisgICAgICAgICd5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5JyksCisgICAgICAgICMgQSBsaW5lIG9mIDc3IGNoYXJhY3RlcnMsIGZvcmNpbmcgYSBzb2Z0IGxpbmUgYnJlYWsgYXQgcG9zaXRpb24gNzUsCisgICAgICAgICMgYW5kIGEgc2Vjb25kIGxpbmUgb2YgZXhhY3RseSAyIGNoYXJhY3RlcnMgKGJlY2F1c2UgdGhlIHNvZnQgbGluZQorICAgICAgICAjIGJyZWFrIGA9JyBzaWduIGNvdW50cyBhZ2FpbnN0IHRoZSBsaW5lIGxlbmd0aCBsaW1pdCkuCisgICAgICAgICgnenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonLAorICAgICAgICAgJycnenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6PQorenonJycpLAorICAgICAgICAjIEEgbGluZSBvZiAxNTEgY2hhcmFjdGVycywgZm9yY2luZyBhIHNvZnQgbGluZSBicmVhayBhdCBwb3NpdGlvbiA3NSwKKyAgICAgICAgIyB3aXRoIGEgc2Vjb25kIGxpbmUgb2YgZXhhY3RseSA3NiBjaGFyYWN0ZXJzIGFuZCBubyB0cmFpbGluZyA9CisgICAgICAgICgnenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eicsCisgICAgICAgICAnJyd6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eno9Cit6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JycnKSwKKyAgICAgICAgIyBBIHN0cmluZyBjb250YWluaW5nIGEgaGFyZCBsaW5lIGJyZWFrLCBidXQgd2hpY2ggdGhlIGZpcnN0IGxpbmUgaXMKKyAgICAgICAgIyAxNTEgY2hhcmFjdGVycyBhbmQgdGhlIHNlY29uZCBsaW5lIGlzIGV4YWN0bHkgNzYgY2hhcmFjdGVycy4gIFRoaXMKKyAgICAgICAgIyBzaG91bGQgbGVhdmUgdXMgd2l0aCB0aHJlZSBsaW5lcywgdGhlIGZpcnN0IHdoaWNoIGhhcyBhIHNvZnQgbGluZQorICAgICAgICAjIGJyZWFrLCBhbmQgd2hpY2ggdGhlIHNlY29uZCBhbmQgdGhpcmQgZG8gbm90LgorICAgICAgICAoJycneXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eQorenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eicnJywKKyAgICAgICAgICcnJ3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eT0KK3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKK3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonJycpLAorICAgICAgICAjIE5vdyBzb21lIHJlYWxseSBjb21wbGV4IHN0dWZmIDspCisgICAgICAgIChERUNTQU1QTEUsIEVOQ1NBTVBMRSksCisgICAgICAgICkKKworICAgICMgVGhlc2UgYXJlIHVzZWQgaW4gdGhlICJxdW90ZXRhYnM9MSIgdGVzdHMuCisgICAgRVNUUklOR1MgPSAoCisgICAgICAgICgnaGVsbG8gd29ybGQnLCAnaGVsbG89MjB3b3JsZCcpLAorICAgICAgICAoJ2hlbGxvXHR3b3JsZCcsICdoZWxsbz0wOXdvcmxkJyksCisgICAgICAgICkKKworICAgICMgVGhlc2UgYXJlIHVzZWQgaW4gdGhlICJoZWFkZXI9MSIgdGVzdHMuCisgICAgSFNUUklOR1MgPSAoCisgICAgICAgICgnaGVsbG8gd29ybGQnLCAnaGVsbG9fd29ybGQnKSwKKyAgICAgICAgKCdoZWxsb193b3JsZCcsICdoZWxsbz01RndvcmxkJyksCisgICAgICAgICkKKworICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9lbmNvZGVzdHJpbmcoc2VsZik6CisgICAgICAgIGZvciBwLCBlIGluIHNlbGYuU1RSSU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmkuZW5jb2Rlc3RyaW5nKHApID09IGUpCisKKyAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCisgICAgZGVmIHRlc3RfZGVjb2Rlc3RyaW5nKHNlbGYpOgorICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLlNUUklOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmRlY29kZXN0cmluZyhlKSA9PSBwKQorCisgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2lkZW1wb3RlbnRfc3RyaW5nKHNlbGYpOgorICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLlNUUklOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmRlY29kZXN0cmluZyhxdW9wcmkuZW5jb2Rlc3RyaW5nKGUpKSA9PSBlKQorCisgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKKyAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5TVFJJTkdTOgorICAgICAgICAgICAgaW5mcCA9IGNTdHJpbmdJTy5TdHJpbmdJTyhwKQorICAgICAgICAgICAgb3V0ZnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgcXVvcHJpLmVuY29kZShpbmZwLCBvdXRmcCwgcXVvdGV0YWJzPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dGZwLmdldHZhbHVlKCkgPT0gZSkKKworICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIGZvciBwLCBlIGluIHNlbGYuU1RSSU5HUzoKKyAgICAgICAgICAgIGluZnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8oZSkKKyAgICAgICAgICAgIG91dGZwID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHF1b3ByaS5kZWNvZGUoaW5mcCwgb3V0ZnApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0ZnAuZ2V0dmFsdWUoKSA9PSBwKQorCisgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2VtYmVkZGVkX3dzKHNlbGYpOgorICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLkVTVFJJTkdTOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaS5lbmNvZGVzdHJpbmcocCwgcXVvdGV0YWJzPVRydWUpID09IGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmRlY29kZXN0cmluZyhlKSA9PSBwKQorCisgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2VuY29kZV9oZWFkZXIoc2VsZik6CisgICAgICAgIGZvciBwLCBlIGluIHNlbGYuSFNUUklOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmVuY29kZXN0cmluZyhwLCBoZWFkZXI9VHJ1ZSkgPT0gZSkKKworICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9kZWNvZGVfaGVhZGVyKHNlbGYpOgorICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLkhTVFJJTkdTOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaS5kZWNvZGVzdHJpbmcoZSwgaGVhZGVyPVRydWUpID09IHApCisKKyAgICBkZWYgdGVzdF9zY3JpcHRlbmNvZGUoc2VsZik6CisgICAgICAgIChwLCBlKSA9IHNlbGYuU1RSSU5HU1stMV0KKyAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLW1xdW9wcmkiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocHJvY2Vzcy5zdGRvdXQuY2xvc2UpCisgICAgICAgIGNvdXQsIGNlcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKHApCisgICAgICAgICMgT24gV2luZG93cywgUHl0aG9uIHdpbGwgb3V0cHV0IHRoZSByZXN1bHQgdG8gc3Rkb3V0IHVzaW5nCisgICAgICAgICMgQ1JMRiwgYXMgdGhlIG1vZGUgb2Ygc3Rkb3V0IGlzIHRleHQgbW9kZS4gVG8gY29tcGFyZSB0aGlzCisgICAgICAgICMgd2l0aCB0aGUgZXhwZWN0ZWQgcmVzdWx0LCB3ZSBuZWVkIHRvIGRvIGEgbGluZS1ieS1saW5lIGNvbXBhcmlzb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291dC5zcGxpdGxpbmVzKCksIGUuc3BsaXRsaW5lcygpKQorCisgICAgZGVmIHRlc3Rfc2NyaXB0ZGVjb2RlKHNlbGYpOgorICAgICAgICAocCwgZSkgPSBzZWxmLlNUUklOR1NbLTFdCisgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1tcXVvcHJpIiwgIi1kIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHByb2Nlc3Muc3Rkb3V0LmNsb3NlKQorICAgICAgICBjb3V0LCBjZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZShlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdXQuc3BsaXRsaW5lcygpLCBwLnNwbGl0bGluZXMoKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUXVvcHJpVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTY0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKQEAgLTAsMCArMSw2MjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByYW5kb20KK2ltcG9ydCB0aW1lCitpbXBvcnQgcGlja2xlCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gbWF0aCBpbXBvcnQgbG9nLCBleHAsIHBpLCBmc3VtLCBzaW4KK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFRlc3RCYXNpY09wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBTdXBlcmNsYXNzIHdpdGggdGVzdHMgY29tbW9uIHRvIGFsbCBnZW5lcmF0b3JzLgorICAgICMgU3ViY2xhc3NlcyBtdXN0IGFycmFuZ2UgZm9yIHNlbGYuZ2VuIHRvIHJldHJpZXZlIHRoZSBSYW5kb20gaW5zdGFuY2UKKyAgICAjIHRvIGJlIHRlc3RlZC4KKworICAgIGRlZiByYW5kb21saXN0KHNlbGYsIG4pOgorICAgICAgICAiIiJIZWxwZXIgZnVuY3Rpb24gdG8gbWFrZSBhIGxpc3Qgb2YgcmFuZG9tIG51bWJlcnMiIiIKKyAgICAgICAgcmV0dXJuIFtzZWxmLmdlbi5yYW5kb20oKSBmb3IgaSBpbiB4cmFuZ2UobildCisKKyAgICBkZWYgdGVzdF9hdXRvc2VlZChzZWxmKToKKyAgICAgICAgc2VsZi5nZW4uc2VlZCgpCisgICAgICAgIHN0YXRlMSA9IHNlbGYuZ2VuLmdldHN0YXRlKCkKKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoKSAgICAgICMgZGlmZmVudCBzZWVkcyBhdCBkaWZmZXJlbnQgdGltZXMKKyAgICAgICAgc3RhdGUyID0gc2VsZi5nZW4uZ2V0c3RhdGUoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0YXRlMSwgc3RhdGUyKQorCisgICAgZGVmIHRlc3Rfc2F2ZXJlc3RvcmUoc2VsZik6CisgICAgICAgIE4gPSAxMDAwCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoKQorICAgICAgICBzdGF0ZSA9IHNlbGYuZ2VuLmdldHN0YXRlKCkKKyAgICAgICAgcmFuZHNlcSA9IHNlbGYucmFuZG9tbGlzdChOKQorICAgICAgICBzZWxmLmdlbi5zZXRzdGF0ZShzdGF0ZSkgICAgIyBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgc2FtZSBzZXF1ZW5jZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmRzZXEsIHNlbGYucmFuZG9tbGlzdChOKSkKKworICAgIGRlZiB0ZXN0X3NlZWRhcmdzKHNlbGYpOgorICAgICAgICBmb3IgYXJnIGluIFtOb25lLCAwLCAwTCwgMSwgMUwsIC0xLCAtMUwsIDEwKioyMCwgLSgxMCoqMjApLAorICAgICAgICAgICAgICAgICAgICAzLjE0LCAxKzJqLCAnYScsIHR1cGxlKCdhYmMnKV06CisgICAgICAgICAgICBzZWxmLmdlbi5zZWVkKGFyZykKKyAgICAgICAgZm9yIGFyZyBpbiBbcmFuZ2UoMyksIGRpY3Qob25lPTEpXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2VlZCwgYXJnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNlZWQsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZShzZWxmLmdlbiksIFtdKQorCisgICAgZGVmIHRlc3RfanVtcGFoZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmdlbi5zZWVkKCkKKyAgICAgICAgc3RhdGUxID0gc2VsZi5nZW4uZ2V0c3RhdGUoKQorICAgICAgICBzZWxmLmdlbi5qdW1wYWhlYWQoMTAwKQorICAgICAgICBzdGF0ZTIgPSBzZWxmLmdlbi5nZXRzdGF0ZSgpICAgICMgcy9iIGRpc3RpbmN0IGZyb20gc3RhdGUxCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdGUxLCBzdGF0ZTIpCisgICAgICAgIHNlbGYuZ2VuLmp1bXBhaGVhZCgxMDApCisgICAgICAgIHN0YXRlMyA9IHNlbGYuZ2VuLmdldHN0YXRlKCkgICAgIyBzL2IgZGlzdGluY3QgZnJvbSBzdGF0ZTIKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0ZTIsIHN0YXRlMykKKworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKHF1aWV0PVRydWUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5qdW1wYWhlYWQpICAjIG5lZWRzIGFuIGFyZworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5qdW1wYWhlYWQsIDIsIDMpICAjIHRvbyBtYW55CisKKyAgICBkZWYgdGVzdF9qdW1wYWhlYWRfcHJvZHVjZXNfdmFsaWRfc3RhdGUoc2VsZik6CisgICAgICAgICMgRnJvbSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTQ1OTEuCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoMTk5MjEwMzY4KQorICAgICAgICBzZWxmLmdlbi5qdW1wYWhlYWQoMTM1NTA2NzQyMzI1NTQ2NDU5MDApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUwMCk6CisgICAgICAgICAgICB2YWwgPSBzZWxmLmdlbi5yYW5kb20oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHZhbCwgMS4wKQorCisgICAgZGVmIHRlc3Rfc2FtcGxlKHNlbGYpOgorICAgICAgICAjIEZvciB0aGUgZW50aXJlIGFsbG93YWJsZSByYW5nZSBvZiAwIDw9IGsgPD0gTiwgdmFsaWRhdGUgdGhhdAorICAgICAgICAjIHRoZSBzYW1wbGUgaXMgb2YgdGhlIGNvcnJlY3QgbGVuZ3RoIGFuZCBjb250YWlucyBvbmx5IHVuaXF1ZSBpdGVtcworICAgICAgICBOID0gMTAwCisgICAgICAgIHBvcHVsYXRpb24gPSB4cmFuZ2UoTikKKyAgICAgICAgZm9yIGsgaW4geHJhbmdlKE4rMSk6CisgICAgICAgICAgICBzID0gc2VsZi5nZW4uc2FtcGxlKHBvcHVsYXRpb24sIGspCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgaykKKyAgICAgICAgICAgIHVuaXEgPSBzZXQocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHVuaXEpLCBrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaXEgPD0gc2V0KHBvcHVsYXRpb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2VuLnNhbXBsZShbXSwgMCksIFtdKSAgIyB0ZXN0IGVkZ2UgY2FzZSBOPT1rPT0wCisKKyAgICBkZWYgdGVzdF9zYW1wbGVfZGlzdHJpYnV0aW9uKHNlbGYpOgorICAgICAgICAjIEZvciB0aGUgZW50aXJlIGFsbG93YWJsZSByYW5nZSBvZiAwIDw9IGsgPD0gTiwgdmFsaWRhdGUgdGhhdAorICAgICAgICAjIHNhbXBsZSBnZW5lcmF0ZXMgYWxsIHBvc3NpYmxlIHBlcm11dGF0aW9ucworICAgICAgICBuID0gNQorICAgICAgICBwb3AgPSByYW5nZShuKQorICAgICAgICB0cmlhbHMgPSAxMDAwMCAgIyBsYXJnZSBudW0gcHJldmVudHMgZmFsc2UgbmVnYXRpdmVzIHdpdGhvdXQgc2xvd2luZyBub3JtYWwgY2FzZQorICAgICAgICBkZWYgZmFjdG9yaWFsKG4pOgorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZShpbnQuX19tdWxfXywgeHJhbmdlKDEsIG4pLCAxKQorICAgICAgICBmb3IgayBpbiB4cmFuZ2Uobik6CisgICAgICAgICAgICBleHBlY3RlZCA9IGZhY3RvcmlhbChuKSAvLyBmYWN0b3JpYWwobi1rKQorICAgICAgICAgICAgcGVybXMgPSB7fQorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHRyaWFscyk6CisgICAgICAgICAgICAgICAgcGVybXNbdHVwbGUoc2VsZi5nZW4uc2FtcGxlKHBvcCwgaykpXSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGVybXMpID09IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3Rfc2FtcGxlX2lucHV0cyhzZWxmKToKKyAgICAgICAgIyBTRiBidWcgIzgwMTM0MiAtLSBwb3B1bGF0aW9uIGNhbiBiZSBhbnkgaXRlcmFibGUgZGVmaW5pbmcgX19sZW5fXygpCisgICAgICAgIHNlbGYuZ2VuLnNhbXBsZShzZXQocmFuZ2UoMjApKSwgMikKKyAgICAgICAgc2VsZi5nZW4uc2FtcGxlKHJhbmdlKDIwKSwgMikKKyAgICAgICAgc2VsZi5nZW4uc2FtcGxlKHhyYW5nZSgyMCksIDIpCisgICAgICAgIHNlbGYuZ2VuLnNhbXBsZShzdHIoJ2FiY2RlZmdoaWprbG1ub3BxcnN0JyksIDIpCisgICAgICAgIHNlbGYuZ2VuLnNhbXBsZSh0dXBsZSgnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSwgMikKKworICAgIGRlZiB0ZXN0X3NhbXBsZV9vbl9kaWN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5nZW4uc2FtcGxlKGRpY3QuZnJvbWtleXMoJ2FiY2RlZmdoaWprbG1ub3BxcnN0JyksIDIpCisKKyAgICAgICAgIyBTRiBidWcgIzE0NjAzNDAgLS0gcmFuZG9tLnNhbXBsZSBjYW4gcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgYSA9IGRpY3QuZnJvbWtleXMocmFuZ2UoMTApK3JhbmdlKDEwLDEwMCwyKStyYW5nZSgxMDAsMTEwKSkKKyAgICAgICAgc2VsZi5nZW4uc2FtcGxlKGEsIDMpCisKKyAgICAgICAgIyBBIGZvbGxvd3VwIHRvIGJ1ZyAjMTQ2MDM0MDogIHNhbXBsaW5nIGZyb20gYSBkaWN0IGNvdWxkIHJldHVybgorICAgICAgICAjIGEgc3Vic2V0IG9mIGl0cyBrZXlzIG9yIG9mIGl0cyB2YWx1ZXMsIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZgorICAgICAgICAjIHRoZSBzdWJzZXQgcmVxdWVzdGVkLgorICAgICAgICBOID0gMzAKKyAgICAgICAgZCA9IGRpY3QoKGksIGNvbXBsZXgoaSwgaSkpIGZvciBpIGluIHhyYW5nZShOKSkKKyAgICAgICAgZm9yIGsgaW4geHJhbmdlKE4rMSk6CisgICAgICAgICAgICBzYW1wID0gc2VsZi5nZW4uc2FtcGxlKGQsIGspCisgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHdlIGdvdCBpbnRzIGJhY2sgKGtleXMpOyB0aGUgdmFsdWVzIGFyZSBjb21wbGV4LgorICAgICAgICAgICAgZm9yIHggaW4gc2FtcDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh4KSBpcyBpbnQpCisgICAgICAgIHNhbXAuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcCwgcmFuZ2UoTikpCisKKyAgICBkZWYgdGVzdF9nYXVzcyhzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgc2VlZCgpIG1ldGhvZCBpbml0aWFsaXplcyBhbGwgdGhlIGhpZGRlbiBzdGF0ZS4gIEluCisgICAgICAgICMgcGFydGljdWxhciwgdGhyb3VnaCAyLjIuMSBpdCBmYWlsZWQgdG8gcmVzZXQgYSBwaWVjZSBvZiBzdGF0ZSB1c2VkCisgICAgICAgICMgYnkgKGFuZCBvbmx5IGJ5KSB0aGUgLmdhdXNzKCkgbWV0aG9kLgorCisgICAgICAgIGZvciBzZWVkIGluIDEsIDEyLCAxMjMsIDEyMzQsIDEyMzQ1LCAxMjM0NTYsIDY1NDMyMToKKyAgICAgICAgICAgIHNlbGYuZ2VuLnNlZWQoc2VlZCkKKyAgICAgICAgICAgIHgxID0gc2VsZi5nZW4ucmFuZG9tKCkKKyAgICAgICAgICAgIHkxID0gc2VsZi5nZW4uZ2F1c3MoMCwgMSkKKworICAgICAgICAgICAgc2VsZi5nZW4uc2VlZChzZWVkKQorICAgICAgICAgICAgeDIgPSBzZWxmLmdlbi5yYW5kb20oKQorICAgICAgICAgICAgeTIgPSBzZWxmLmdlbi5nYXVzcygwLCAxKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgxLCB4MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeTEsIHkyKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIHN0YXRlID0gcGlja2xlLmR1bXBzKHNlbGYuZ2VuKQorICAgICAgICBvcmlnc2VxID0gW3NlbGYuZ2VuLnJhbmRvbSgpIGZvciBpIGluIHhyYW5nZSgxMCldCisgICAgICAgIG5ld2dlbiA9IHBpY2tsZS5sb2FkcyhzdGF0ZSkKKyAgICAgICAgcmVzdG9yZWRzZXEgPSBbbmV3Z2VuLnJhbmRvbSgpIGZvciBpIGluIHhyYW5nZSgxMCldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ3NlcSwgcmVzdG9yZWRzZXEpCisKKyAgICBkZWYgdGVzdF9idWdfMTcyNzc4MChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCB2ZXJzaW9uLTItcGlja2xlcyBjYW4gYmUgbG9hZGVkCisgICAgICAgICMgZmluZSwgd2hldGhlciB0aGV5IGFyZSBjcmVhdGVkIG9uIDMyLWJpdCBvciA2NC1iaXQKKyAgICAgICAgIyBwbGF0Zm9ybXMsIGFuZCB0aGF0IHZlcnNpb24tMy1waWNrbGVzIGxvYWQgZmluZS4KKyAgICAgICAgZmlsZXMgPSBbKCJyYW5kdjJfMzIucGNrIiwgNzgwKSwKKyAgICAgICAgICAgICAgICAgKCJyYW5kdjJfNjQucGNrIiwgODY2KSwKKyAgICAgICAgICAgICAgICAgKCJyYW5kdjMucGNrIiwgMzQzKV0KKyAgICAgICAgZm9yIGZpbGUsIHZhbHVlIGluIGZpbGVzOgorICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LmZpbmRmaWxlKGZpbGUpLCJyYiIpCisgICAgICAgICAgICByID0gcGlja2xlLmxvYWQoZikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnJhbmRyYW5nZSgxMDAwKSwgdmFsdWUpCisKK2NsYXNzIFdpY2htYW5uSGlsbF9UZXN0QmFzaWNPcHMoVGVzdEJhc2ljT3BzKToKKyAgICBnZW4gPSByYW5kb20uV2ljaG1hbm5IaWxsKCkKKworICAgIGRlZiB0ZXN0X3NldHN0YXRlX2ZpcnN0X2FyZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgyLCBOb25lLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X3N0cm9uZ19qdW1wYWhlYWQoc2VsZik6CisgICAgICAgICMgdGVzdHMgdGhhdCBqdW1wYWhlYWQobikgc2VtYW50aWNzIGNvcnJlc3BvbmQgdG8gbiBjYWxscyB0byByYW5kb20oKQorICAgICAgICBOID0gMTAwMAorICAgICAgICBzID0gc2VsZi5nZW4uZ2V0c3RhdGUoKQorICAgICAgICBzZWxmLmdlbi5qdW1wYWhlYWQoTikKKyAgICAgICAgcjEgPSBzZWxmLmdlbi5yYW5kb20oKQorICAgICAgICAjIG5vdyBkbyBpdCB0aGUgc2xvdyB3YXkKKyAgICAgICAgc2VsZi5nZW4uc2V0c3RhdGUocykKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKE4pOgorICAgICAgICAgICAgc2VsZi5nZW4ucmFuZG9tKCkKKyAgICAgICAgcjIgPSBzZWxmLmdlbi5yYW5kb20oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMikKKworICAgIGRlZiB0ZXN0X2dhdXNzX3dpdGhfd2hzZWVkKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBzZWVkKCkgbWV0aG9kIGluaXRpYWxpemVzIGFsbCB0aGUgaGlkZGVuIHN0YXRlLiAgSW4KKyAgICAgICAgIyBwYXJ0aWN1bGFyLCB0aHJvdWdoIDIuMi4xIGl0IGZhaWxlZCB0byByZXNldCBhIHBpZWNlIG9mIHN0YXRlIHVzZWQKKyAgICAgICAgIyBieSAoYW5kIG9ubHkgYnkpIHRoZSAuZ2F1c3MoKSBtZXRob2QuCisKKyAgICAgICAgZm9yIHNlZWQgaW4gMSwgMTIsIDEyMywgMTIzNCwgMTIzNDUsIDEyMzQ1NiwgNjU0MzIxOgorICAgICAgICAgICAgc2VsZi5nZW4ud2hzZWVkKHNlZWQpCisgICAgICAgICAgICB4MSA9IHNlbGYuZ2VuLnJhbmRvbSgpCisgICAgICAgICAgICB5MSA9IHNlbGYuZ2VuLmdhdXNzKDAsIDEpCisKKyAgICAgICAgICAgIHNlbGYuZ2VuLndoc2VlZChzZWVkKQorICAgICAgICAgICAgeDIgPSBzZWxmLmdlbi5yYW5kb20oKQorICAgICAgICAgICAgeTIgPSBzZWxmLmdlbi5nYXVzcygwLCAxKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgxLCB4MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeTEsIHkyKQorCisgICAgZGVmIHRlc3RfYmlncmFuZChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgd2FybmluZ3MgYXJlIHJhaXNlZCB3aGVuIHJhbmRyYW5nZSBpcyB0b28gbGFyZ2UgZm9yIHJhbmRvbSgpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsICJVbmRlcmx5aW5nIHJhbmRvbSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVc2VyV2FybmluZywgc2VsZi5nZW4ucmFuZHJhbmdlLCAyKio2MCkKKworY2xhc3MgU3lzdGVtUmFuZG9tX1Rlc3RCYXNpY09wcyhUZXN0QmFzaWNPcHMpOgorICAgIGdlbiA9IHJhbmRvbS5TeXN0ZW1SYW5kb20oKQorCisgICAgZGVmIHRlc3RfYXV0b3NlZWQoc2VsZik6CisgICAgICAgICMgRG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGV4Y2VwdCBub3QgZmFpbAorICAgICAgICBzZWxmLmdlbi5zZWVkKCkKKworICAgIGRlZiB0ZXN0X3NhdmVyZXN0b3JlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmdlbi5nZXRzdGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zZWVkYXJncyhzZWxmKToKKyAgICAgICAgIyBEb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZXhjZXB0IG5vdCBmYWlsCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoMTAwKQorCisgICAgZGVmIHRlc3RfanVtcGFoZWFkKHNlbGYpOgorICAgICAgICAjIERvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBleGNlcHQgbm90IGZhaWwKKyAgICAgICAgc2VsZi5nZW4uanVtcGFoZWFkKDEwMCkKKworICAgIGRlZiB0ZXN0X2dhdXNzKHNlbGYpOgorICAgICAgICBzZWxmLmdlbi5nYXVzc19uZXh0ID0gTm9uZQorICAgICAgICBzZWxmLmdlbi5zZWVkKDEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdlbi5nYXVzc19uZXh0LCBOb25lKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBpY2tsZS5kdW1wcywgc2VsZi5nZW4pCisKKyAgICBkZWYgdGVzdF81M19iaXRzX3Blcl9mbG9hdChzZWxmKToKKyAgICAgICAgIyBUaGlzIHNob3VsZCBwYXNzIHdoZW5ldmVyIGEgQyBkb3VibGUgaGFzIDUzIGJpdCBwcmVjaXNpb24uCisgICAgICAgIHNwYW4gPSAyICoqIDUzCisgICAgICAgIGN1bSA9IDAKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICBjdW0gfD0gaW50KHNlbGYuZ2VuLnJhbmRvbSgpICogc3BhbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdW0sIHNwYW4tMSkKKworICAgIGRlZiB0ZXN0X2JpZ3JhbmQoc2VsZik6CisgICAgICAgICMgVGhlIHJhbmRyYW5nZSByb3V0aW5lIHNob3VsZCBidWlsZC11cCB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJpdHMKKyAgICAgICAgIyBpbiBzdGFnZXMgc28gdGhhdCBhbGwgYml0IHBvc2l0aW9ucyBhcmUgYWN0aXZlLgorICAgICAgICBzcGFuID0gMiAqKiA1MDAKKyAgICAgICAgY3VtID0gMAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHIgPSBzZWxmLmdlbi5yYW5kcmFuZ2Uoc3BhbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IHIgPCBzcGFuKQorICAgICAgICAgICAgY3VtIHw9IHIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdW0sIHNwYW4tMSkKKworICAgIGRlZiB0ZXN0X2JpZ3JhbmRfcmFuZ2VzKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiBbNDAsODAsIDE2MCwgMjAwLCAyMTEsIDI1MCwgMzc1LCA1MTIsIDU1MF06CisgICAgICAgICAgICBzdGFydCA9IHNlbGYuZ2VuLnJhbmRyYW5nZSgyICoqIGkpCisgICAgICAgICAgICBzdG9wID0gc2VsZi5nZW4ucmFuZHJhbmdlKDIgKiogKGktMikpCisgICAgICAgICAgICBpZiBzdG9wIDw9IHN0YXJ0OgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXJ0IDw9IHNlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCwgc3RvcCkgPCBzdG9wKQorCisgICAgZGVmIHRlc3RfcmFuZ2VsaW1pdHMoc2VsZik6CisgICAgICAgIGZvciBzdGFydCwgc3RvcCBpbiBbKC0yLDApLCAoLSgyKio2MCktMiwtKDIqKjYwKSksICgyKio2MCwyKio2MCsyKV06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChyYW5nZShzdGFydCxzdG9wKSksCisgICAgICAgICAgICAgICAgc2V0KFtzZWxmLmdlbi5yYW5kcmFuZ2Uoc3RhcnQsc3RvcCkgZm9yIGkgaW4geHJhbmdlKDEwMCldKSkKKworICAgIGRlZiB0ZXN0X2dlbnJhbmRiaXRzKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSByYW5nZXMKKyAgICAgICAgZm9yIGsgaW4geHJhbmdlKDEsIDEwMDApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMoaykgPCAyKiprKQorCisgICAgICAgICMgVmVyaWZ5IGFsbCBiaXRzIGFjdGl2ZQorICAgICAgICBnZXRiaXRzID0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMKKyAgICAgICAgZm9yIHNwYW4gaW4gWzEsIDIsIDMsIDQsIDMxLCAzMiwgMzIsIDUyLCA1MywgNTQsIDExOSwgMTI3LCAxMjgsIDEyOV06CisgICAgICAgICAgICBjdW0gPSAwCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgICAgICBjdW0gfD0gZ2V0Yml0cyhzcGFuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdW0sIDIqKnNwYW4tMSkKKworICAgICAgICAjIFZlcmlmeSBhcmd1bWVudCBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLmdldHJhbmRiaXRzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLmdldHJhbmRiaXRzLCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmdlbi5nZXRyYW5kYml0cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5nZW4uZ2V0cmFuZGJpdHMsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLmdldHJhbmRiaXRzLCAxMC4xKQorCisgICAgZGVmIHRlc3RfcmFuZGJlbG93X2xvZ2ljKHNlbGYsIF9sb2c9bG9nLCBpbnQ9aW50KToKKyAgICAgICAgIyBjaGVjayBiaXRjb3VudCB0cmFuc2l0aW9uIHBvaW50czogIDIqKmkgYW5kIDIqKihpKzEpLTEKKyAgICAgICAgIyBzaG93IHRoYXQ6IGsgPSBpbnQoMS4wMDEgKyBfbG9nKG4sIDIpKQorICAgICAgICAjIGlzIGVxdWFsIHRvIG9yIG9uZSBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBiaXRzIGluIG4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEsIDEwMDApOgorICAgICAgICAgICAgbiA9IDFMIDw8IGkgIyBjaGVjayBhbiBleGFjdCBwb3dlciBvZiB0d28KKyAgICAgICAgICAgIG51bWJpdHMgPSBpKzEKKyAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobiwgMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIG51bWJpdHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobiA9PSAyKiooay0xKSkKKworICAgICAgICAgICAgbiArPSBuIC0gMSAgICAgICMgY2hlY2sgMSBiZWxvdyB0aGUgbmV4dCBwb3dlciBvZiB0d28KKyAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobiwgMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIFtudW1iaXRzLCBudW1iaXRzKzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKmsgPiBuID4gMioqKGstMikpCisKKyAgICAgICAgICAgIG4gLT0gbiA+PiAxNSAgICAgIyBjaGVjayBhIGxpdHRsZSBmYXJ0aGVyIGJlbG93IHRoZSBuZXh0IHBvd2VyIG9mIHR3bworICAgICAgICAgICAgayA9IGludCgxLjAwMDAxICsgX2xvZyhuLCAyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbnVtYml0cykgICAgICAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMioqayA+IG4gPiAyKiooay0xKSkgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgorCisKK2NsYXNzIE1lcnNlbm5lVHdpc3Rlcl9UZXN0QmFzaWNPcHMoVGVzdEJhc2ljT3BzKToKKyAgICBnZW4gPSByYW5kb20uUmFuZG9tKCkKKworICAgIGRlZiB0ZXN0X3NldHN0YXRlX2ZpcnN0X2FyZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgxLCBOb25lLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X3NldHN0YXRlX21pZGRsZV9hcmcoc2VsZik6CisgICAgICAgICMgV3JvbmcgdHlwZSwgcy9iIHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgyLCBOb25lLCBOb25lKSkKKyAgICAgICAgIyBXcm9uZyBsZW5ndGgsIHMvYiA2MjUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgyLCAoMSwyLDMpLCBOb25lKSkKKyAgICAgICAgIyBXcm9uZyB0eXBlLCBzL2IgdHVwbGUgb2YgNjI1IGludHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDIsICgnYScsKSo2MjUsIE5vbmUpKQorICAgICAgICAjIExhc3QgZWxlbWVudCBzL2IgYW4gaW50IGFsc28KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDIsICgwLCkqNjI0KygnYScsKSwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9yZWZlcmVuY2VJbXBsZW1lbnRhdGlvbihzZWxmKToKKyAgICAgICAgIyBDb21wYXJlIHRoZSBweXRob24gaW1wbGVtZW50YXRpb24gd2l0aCByZXN1bHRzIGZyb20gdGhlIG9yaWdpbmFsCisgICAgICAgICMgY29kZS4gIENyZWF0ZSAyMDAwIDUzLWJpdCBwcmVjaXNpb24gcmFuZG9tIGZsb2F0cy4gIENvbXBhcmUgb25seQorICAgICAgICAjIHRoZSBsYXN0IHRlbiBlbnRyaWVzIHRvIHNob3cgdGhhdCB0aGUgaW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zCisgICAgICAgICMgYXJlIHRyYWNraW5nLiAgSGVyZSBpcyB0aGUgbWFpbigpIGZ1bmN0aW9uIG5lZWRlZCB0byBjcmVhdGUgdGhlCisgICAgICAgICMgbGlzdCBvZiBleHBlY3RlZCByYW5kb20gbnVtYmVyczoKKyAgICAgICAgIyAgICB2b2lkIG1haW4odm9pZCl7CisgICAgICAgICMgICAgICAgICBpbnQgaTsKKyAgICAgICAgIyAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5pdFs0XT17NjE3MzEsIDI0OTAzLCA2MTQsIDQyMTQzfSwgbGVuZ3RoPTQ7CisgICAgICAgICMgICAgICAgICBpbml0X2J5X2FycmF5KGluaXQsIGxlbmd0aCk7CisgICAgICAgICMgICAgICAgICBmb3IgKGk9MDsgaTwyMDAwOyBpKyspIHsKKyAgICAgICAgIyAgICAgICAgICAgcHJpbnRmKCIlLjE1ZiAiLCBnZW5yYW5kX3JlczUzKCkpOworICAgICAgICAjICAgICAgICAgICBpZiAoaSU1PT00KSBwcmludGYoIlxuIik7CisgICAgICAgICMgICAgICAgICB9CisgICAgICAgICMgICAgIH0KKyAgICAgICAgZXhwZWN0ZWQgPSBbMC40NTgzOTgwMzA3MzcxMzI1OSwKKyAgICAgICAgICAgICAgICAgICAgMC44NjA1NzgxNTIwMTk3ODc4MiwKKyAgICAgICAgICAgICAgICAgICAgMC45Mjg0ODMzMTcyNjc4MjE1MiwKKyAgICAgICAgICAgICAgICAgICAgMC4zNTkzMjY4MTExOTc4MjQ2MSwKKyAgICAgICAgICAgICAgICAgICAgMC4wODE4MjM0OTM3NjI0NDk1NzMsCisgICAgICAgICAgICAgICAgICAgIDAuMTQzMzIyMjY0NzAxNjkzMjksCisgICAgICAgICAgICAgICAgICAgIDAuMDg0Mjk3ODIzODIzNTIwMDI0LAorICAgICAgICAgICAgICAgICAgICAwLjUzODE0ODY0NjcxODMxNDUzLAorICAgICAgICAgICAgICAgICAgICAwLjA4OTIxNTAyNDkxMTk5MzQwMSwKKyAgICAgICAgICAgICAgICAgICAgMC43ODQ4NjE5NjEwNTM3MjkwN10KKworICAgICAgICBzZWxmLmdlbi5zZWVkKDYxNzMxTCArICgyNDkwM0w8PDMyKSArICg2MTRMPDw2NCkgKyAoNDIxNDNMPDw5NikpCisgICAgICAgIGFjdHVhbCA9IHNlbGYucmFuZG9tbGlzdCgyMDAwKVstMTA6XQorICAgICAgICBmb3IgYSwgZSBpbiB6aXAoYWN0dWFsLCBleHBlY3RlZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGEsZSxwbGFjZXM9MTQpCisKKyAgICBkZWYgdGVzdF9zdHJvbmdfcmVmZXJlbmNlX2ltcGxlbWVudGF0aW9uKHNlbGYpOgorICAgICAgICAjIExpa2UgdGVzdF9yZWZlcmVuY2VJbXBsZW1lbnRhdGlvbiwgYnV0IGNoZWNrcyBmb3IgZXhhY3QgYml0LWxldmVsCisgICAgICAgICMgZXF1YWxpdHkuICBUaGlzIHNob3VsZCBwYXNzIG9uIGFueSBib3ggd2hlcmUgQyBkb3VibGUgY29udGFpbnMKKyAgICAgICAgIyBhdCBsZWFzdCA1MyBiaXRzIG9mIHByZWNpc2lvbiAodGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtIHN1ZmZlcnMKKyAgICAgICAgIyBubyByb3VuZGluZyBlcnJvcnMgLS0gYWxsIHJlc3VsdHMgYXJlIGV4YWN0KS4KKyAgICAgICAgZnJvbSBtYXRoIGltcG9ydCBsZGV4cAorCisgICAgICAgIGV4cGVjdGVkID0gWzB4MGVhYjMyNThkMjIzMWZMLAorICAgICAgICAgICAgICAgICAgICAweDFiODlkYjMxNTI3N2E1TCwKKyAgICAgICAgICAgICAgICAgICAgMHgxZGI2MjJhNTUxODAxNkwsCisgICAgICAgICAgICAgICAgICAgIDB4MGI3ZjlhZjBkNTc1YmZMLAorICAgICAgICAgICAgICAgICAgICAweDAyOWU0YzRkYjgyMjQwTCwKKyAgICAgICAgICAgICAgICAgICAgMHgwNDk2MTg5MmY1ZDY3M0wsCisgICAgICAgICAgICAgICAgICAgIDB4MDJiMjkxNTk4ZTQ1ODlMLAorICAgICAgICAgICAgICAgICAgICAweDExMzg4MzgyYzE1Njk0TCwKKyAgICAgICAgICAgICAgICAgICAgMHgwMmRhZDk3N2M5ZTFmZUwsCisgICAgICAgICAgICAgICAgICAgIDB4MTkxZDk2ZDRkMzM0YzZMXQorICAgICAgICBzZWxmLmdlbi5zZWVkKDYxNzMxTCArICgyNDkwM0w8PDMyKSArICg2MTRMPDw2NCkgKyAoNDIxNDNMPDw5NikpCisgICAgICAgIGFjdHVhbCA9IHNlbGYucmFuZG9tbGlzdCgyMDAwKVstMTA6XQorICAgICAgICBmb3IgYSwgZSBpbiB6aXAoYWN0dWFsLCBleHBlY3RlZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcobGRleHAoYSwgNTMpKSwgZSkKKworICAgIGRlZiB0ZXN0X2xvbmdfc2VlZChzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIG1vc3QgaW50ZXJlc3RpbmcgdG8gcnVuIGluIGRlYnVnIG1vZGUsIGp1c3QgdG8gbWFrZSBzdXJlCisgICAgICAgICMgbm90aGluZyBibG93cyB1cC4gIFVuZGVyIHRoZSBjb3ZlcnMsIGEgZHluYW1pY2FsbHkgcmVzaXplZCBhcnJheQorICAgICAgICAjIGlzIGFsbG9jYXRlZCwgY29uc3VtaW5nIHNwYWNlIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIGJpdHMKKyAgICAgICAgIyBpbiB0aGUgc2VlZC4gIFVuZm9ydHVuYXRlbHksIHRoYXQncyBhIHF1YWRyYXRpYy10aW1lIGFsZ29yaXRobSwKKyAgICAgICAgIyBzbyBkb24ndCBtYWtlIHRoaXMgaG9ycmlibHkgYmlnLgorICAgICAgICBzZWVkID0gKDFMIDw8ICgxMDAwMCAqIDgpKSAtIDEgICMgYWJvdXQgMTBLIGJ5dGVzCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoc2VlZCkKKworICAgIGRlZiB0ZXN0XzUzX2JpdHNfcGVyX2Zsb2F0KHNlbGYpOgorICAgICAgICAjIFRoaXMgc2hvdWxkIHBhc3Mgd2hlbmV2ZXIgYSBDIGRvdWJsZSBoYXMgNTMgYml0IHByZWNpc2lvbi4KKyAgICAgICAgc3BhbiA9IDIgKiogNTMKKyAgICAgICAgY3VtID0gMAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgIGN1bSB8PSBpbnQoc2VsZi5nZW4ucmFuZG9tKCkgKiBzcGFuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1bSwgc3Bhbi0xKQorCisgICAgZGVmIHRlc3RfYmlncmFuZChzZWxmKToKKyAgICAgICAgIyBUaGUgcmFuZHJhbmdlIHJvdXRpbmUgc2hvdWxkIGJ1aWxkLXVwIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYml0cworICAgICAgICAjIGluIHN0YWdlcyBzbyB0aGF0IGFsbCBiaXQgcG9zaXRpb25zIGFyZSBhY3RpdmUuCisgICAgICAgIHNwYW4gPSAyICoqIDUwMAorICAgICAgICBjdW0gPSAwCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgciA9IHNlbGYuZ2VuLnJhbmRyYW5nZShzcGFuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gciA8IHNwYW4pCisgICAgICAgICAgICBjdW0gfD0gcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1bSwgc3Bhbi0xKQorCisgICAgZGVmIHRlc3RfYmlncmFuZF9yYW5nZXMoc2VsZik6CisgICAgICAgIGZvciBpIGluIFs0MCw4MCwgMTYwLCAyMDAsIDIxMSwgMjUwLCAzNzUsIDUxMiwgNTUwXToKKyAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5nZW4ucmFuZHJhbmdlKDIgKiogaSkKKyAgICAgICAgICAgIHN0b3AgPSBzZWxmLmdlbi5yYW5kcmFuZ2UoMiAqKiAoaS0yKSkKKyAgICAgICAgICAgIGlmIHN0b3AgPD0gc3RhcnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhcnQgPD0gc2VsZi5nZW4ucmFuZHJhbmdlKHN0YXJ0LCBzdG9wKSA8IHN0b3ApCisKKyAgICBkZWYgdGVzdF9yYW5nZWxpbWl0cyhzZWxmKToKKyAgICAgICAgZm9yIHN0YXJ0LCBzdG9wIGluIFsoLTIsMCksICgtKDIqKjYwKS0yLC0oMioqNjApKSwgKDIqKjYwLDIqKjYwKzIpXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJhbmdlKHN0YXJ0LHN0b3ApKSwKKyAgICAgICAgICAgICAgICBzZXQoW3NlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCxzdG9wKSBmb3IgaSBpbiB4cmFuZ2UoMTAwKV0pKQorCisgICAgZGVmIHRlc3RfZ2VucmFuZGJpdHMoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IGNyb3NzLXBsYXRmb3JtIHJlcGVhdGFiaWxpdHkKKyAgICAgICAgc2VsZi5nZW4uc2VlZCgxMjM0NTY3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2VuLmdldHJhbmRiaXRzKDEwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgOTc5MDQ4NDU3NzczNDM1MTA0MDQ3MTg5NTYxMTVMKQorICAgICAgICAjIFZlcmlmeSByYW5nZXMKKyAgICAgICAgZm9yIGsgaW4geHJhbmdlKDEsIDEwMDApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMoaykgPCAyKiprKQorCisgICAgICAgICMgVmVyaWZ5IGFsbCBiaXRzIGFjdGl2ZQorICAgICAgICBnZXRiaXRzID0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMKKyAgICAgICAgZm9yIHNwYW4gaW4gWzEsIDIsIDMsIDQsIDMxLCAzMiwgMzIsIDUyLCA1MywgNTQsIDExOSwgMTI3LCAxMjgsIDEyOV06CisgICAgICAgICAgICBjdW0gPSAwCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgICAgICBjdW0gfD0gZ2V0Yml0cyhzcGFuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdW0sIDIqKnNwYW4tMSkKKworICAgICAgICAjIFZlcmlmeSBhcmd1bWVudCBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLmdldHJhbmRiaXRzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLmdldHJhbmRiaXRzLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uZ2V0cmFuZGJpdHMsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZ2VuLmdldHJhbmRiaXRzLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmdlbi5nZXRyYW5kYml0cywgLTEpCisKKyAgICBkZWYgdGVzdF9yYW5kYmVsb3dfbG9naWMoc2VsZiwgX2xvZz1sb2csIGludD1pbnQpOgorICAgICAgICAjIGNoZWNrIGJpdGNvdW50IHRyYW5zaXRpb24gcG9pbnRzOiAgMioqaSBhbmQgMioqKGkrMSktMQorICAgICAgICAjIHNob3cgdGhhdDogayA9IGludCgxLjAwMSArIF9sb2cobiwgMikpCisgICAgICAgICMgaXMgZXF1YWwgdG8gb3Igb25lIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gbgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMSwgMTAwMCk6CisgICAgICAgICAgICBuID0gMUwgPDwgaSAjIGNoZWNrIGFuIGV4YWN0IHBvd2VyIG9mIHR3bworICAgICAgICAgICAgbnVtYml0cyA9IGkrMQorICAgICAgICAgICAgayA9IGludCgxLjAwMDAxICsgX2xvZyhuLCAyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbnVtYml0cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuID09IDIqKihrLTEpKQorCisgICAgICAgICAgICBuICs9IG4gLSAxICAgICAgIyBjaGVjayAxIGJlbG93IHRoZSBuZXh0IHBvd2VyIG9mIHR3bworICAgICAgICAgICAgayA9IGludCgxLjAwMDAxICsgX2xvZyhuLCAyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgW251bWJpdHMsIG51bWJpdHMrMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMioqayA+IG4gPiAyKiooay0yKSkKKworICAgICAgICAgICAgbiAtPSBuID4+IDE1ICAgICAjIGNoZWNrIGEgbGl0dGxlIGZhcnRoZXIgYmVsb3cgdGhlIG5leHQgcG93ZXIgb2YgdHdvCisgICAgICAgICAgICBrID0gaW50KDEuMDAwMDEgKyBfbG9nKG4sIDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKSAgICAgICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTEpKSAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCisKKyAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfYnVnXzE1OTA4OTEoc2VsZik6CisgICAgICAgIHN0YXJ0ID0gMTAwMDAwMDAwMDAwMAorICAgICAgICBzdG9wID0gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMAorICAgICAgICBzdGVwID0gLTIwMAorICAgICAgICB4ID0gc2VsZi5nZW4ucmFuZHJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RvcCA8IHggPD0gc3RhcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHgrc3RvcCklc3RlcCwgMCkKKworZGVmIGdhbW1hKHosIHNxcnQycGk9KDIuMCpwaSkqKjAuNSk6CisgICAgIyBSZWZsZWN0aW9uIHRvIHJpZ2h0IGhhbGYgb2YgY29tcGxleCBwbGFuZQorICAgIGlmIHogPCAwLjU6CisgICAgICAgIHJldHVybiBwaSAvIHNpbihwaSp6KSAvIGdhbW1hKDEuMC16KQorICAgICMgTGFuY3pvcyBhcHByb3hpbWF0aW9uIHdpdGggZz03CisgICAgYXogPSB6ICsgKDcuMCAtIDAuNSkKKyAgICByZXR1cm4gYXogKiogKHotMC41KSAvIGV4cChheikgKiBzcXJ0MnBpICogZnN1bShbCisgICAgICAgIDAuOTk5OTk5OTk5OTk5NTE4MywKKyAgICAgICAgNjc2LjUyMDM2ODEyMTg4MzUgLyB6LAorICAgICAgICAtMTI1OS4xMzkyMTY3MjIyODkgLyAoeisxLjApLAorICAgICAgICA3NzEuMzIzNDI4Nzc1NzY3NCAvICh6KzIuMCksCisgICAgICAgIC0xNzYuNjE1MDI5MTQ5ODM4NiAvICh6KzMuMCksCisgICAgICAgIDEyLjUwNzM0MzI0MDA5MDU2IC8gKHorNC4wKSwKKyAgICAgICAgLTAuMTM4NTcxMDMzMTI5NjUyNiAvICh6KzUuMCksCisgICAgICAgIDAuOTkzNDkzNzExMzkzMDc0OGUtMDUgLyAoeis2LjApLAorICAgICAgICAwLjE2NTk0NzAxODc0MDg0NjJlLTA2IC8gKHorNy4wKSwKKyAgICBdKQorCitjbGFzcyBUZXN0RGlzdHJpYnV0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfemVyb2lucHV0cyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBkaXN0cmlidXRpb25zIGNhbiBoYW5kbGUgYSBzZXJpZXMgb2YgemVybyBpbnB1dHMnCisgICAgICAgIGcgPSByYW5kb20uUmFuZG9tKCkKKyAgICAgICAgeCA9IFtnLnJhbmRvbSgpIGZvciBpIGluIHhyYW5nZSg1MCldICsgWzAuMF0qNQorICAgICAgICBnLnJhbmRvbSA9IHhbOl0ucG9wOyBnLnVuaWZvcm0oMSwxMCkKKyAgICAgICAgZy5yYW5kb20gPSB4WzpdLnBvcDsgZy5wYXJldG92YXJpYXRlKDEuMCkKKyAgICAgICAgZy5yYW5kb20gPSB4WzpdLnBvcDsgZy5leHBvdmFyaWF0ZSgxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcud2VpYnVsbHZhcmlhdGUoMS4wLCAxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcudm9ubWlzZXN2YXJpYXRlKDEuMCwgMS4wKQorICAgICAgICBnLnJhbmRvbSA9IHhbOl0ucG9wOyBnLm5vcm1hbHZhcmlhdGUoMC4wLCAxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcuZ2F1c3MoMC4wLCAxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcubG9nbm9ybXZhcmlhdGUoMC4wLCAxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcudm9ubWlzZXN2YXJpYXRlKDAuMCwgMS4wKQorICAgICAgICBnLnJhbmRvbSA9IHhbOl0ucG9wOyBnLmdhbW1hdmFyaWF0ZSgwLjAxLCAxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcuZ2FtbWF2YXJpYXRlKDEuMCwgMS4wKQorICAgICAgICBnLnJhbmRvbSA9IHhbOl0ucG9wOyBnLmdhbW1hdmFyaWF0ZSgyMDAuMCwgMS4wKQorICAgICAgICBnLnJhbmRvbSA9IHhbOl0ucG9wOyBnLmJldGF2YXJpYXRlKDMuMCwgMy4wKQorICAgICAgICBnLnJhbmRvbSA9IHhbOl0ucG9wOyBnLnRyaWFuZ3VsYXIoMC4wLCAxLjAsIDEuMC8zLjApCisKKyAgICBkZWYgdGVzdF9hdmdfc3RkKHNlbGYpOgorICAgICAgICAjIFVzZSBpbnRlZ3JhdGlvbiB0byB0ZXN0IGRpc3RyaWJ1dGlvbiBhdmVyYWdlIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24uCisgICAgICAgICMgT25seSB3b3JrcyBmb3IgZGlzdHJpYnV0aW9ucyB3aGljaCBkbyBub3QgY29uc3VtZSB2YXJpYXRlcyBpbiBwYWlycworICAgICAgICBnID0gcmFuZG9tLlJhbmRvbSgpCisgICAgICAgIE4gPSA1MDAwCisgICAgICAgIHggPSBbaS9mbG9hdChOKSBmb3IgaSBpbiB4cmFuZ2UoMSxOKV0KKyAgICAgICAgZm9yIHZhcmlhdGUsIGFyZ3MsIG11LCBzaWdtYXNxcmQgaW4gWworICAgICAgICAgICAgICAgIChnLnVuaWZvcm0sICgxLjAsMTAuMCksICgxMC4wKzEuMCkvMiwgKDEwLjAtMS4wKSoqMi8xMiksCisgICAgICAgICAgICAgICAgKGcudHJpYW5ndWxhciwgKDAuMCwgMS4wLCAxLjAvMy4wKSwgNC4wLzkuMCwgNy4wLzkuMC8xOC4wKSwKKyAgICAgICAgICAgICAgICAoZy5leHBvdmFyaWF0ZSwgKDEuNSwpLCAxLzEuNSwgMS8xLjUqKjIpLAorICAgICAgICAgICAgICAgIChnLnZvbm1pc2VzdmFyaWF0ZSwgKDEuMjMsIDApLCBwaSwgcGkqKjIvMyksCisgICAgICAgICAgICAgICAgKGcucGFyZXRvdmFyaWF0ZSwgKDUuMCwpLCA1LjAvKDUuMC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LjAvKCg1LjAtMSkqKjIqKDUuMC0yKSkpLAorICAgICAgICAgICAgICAgIChnLndlaWJ1bGx2YXJpYXRlLCAoMS4wLCAzLjApLCBnYW1tYSgxKzEvMy4wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1tYSgxKzIvMy4wKS1nYW1tYSgxKzEvMy4wKSoqMikgXToKKyAgICAgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3AKKyAgICAgICAgICAgIHkgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbih4KSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB5LmFwcGVuZCh2YXJpYXRlKCphcmdzKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgczEgPSBzMiA9IDAKKyAgICAgICAgICAgIGZvciBlIGluIHk6CisgICAgICAgICAgICAgICAgczEgKz0gZQorICAgICAgICAgICAgICAgIHMyICs9IChlIC0gbXUpICoqIDIKKyAgICAgICAgICAgIE4gPSBsZW4oeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoczEvTiwgbXUsIHBsYWNlcz0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9JyVzJXInICUgKHZhcmlhdGUuX19uYW1lX18sIGFyZ3MpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzMi8oTi0xKSwgc2lnbWFzcXJkLCBwbGFjZXM9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSclcyVyJyAlICh2YXJpYXRlLl9fbmFtZV9fLCBhcmdzKSkKKworICAgIGRlZiB0ZXN0X2NvbnN0YW50KHNlbGYpOgorICAgICAgICBnID0gcmFuZG9tLlJhbmRvbSgpCisgICAgICAgIE4gPSAxMDAKKyAgICAgICAgZm9yIHZhcmlhdGUsIGFyZ3MsIGV4cGVjdGVkIGluIFsKKyAgICAgICAgICAgICAgICAoZy51bmlmb3JtLCAoMTAuMCwgMTAuMCksIDEwLjApLAorICAgICAgICAgICAgICAgIChnLnRyaWFuZ3VsYXIsICgxMC4wLCAxMC4wKSwgMTAuMCksCisgICAgICAgICAgICAgICAgIyhnLnRyaWFuZ3VsYXIsICgxMC4wLCAxMC4wLCAxMC4wKSwgMTAuMCksCisgICAgICAgICAgICAgICAgKGcuZXhwb3ZhcmlhdGUsIChmbG9hdCgnaW5mJyksKSwgMC4wKSwKKyAgICAgICAgICAgICAgICAoZy52b25taXNlc3ZhcmlhdGUsICgzLjAsIGZsb2F0KCdpbmYnKSksIDMuMCksCisgICAgICAgICAgICAgICAgKGcuZ2F1c3MsICgxMC4wLCAwLjApLCAxMC4wKSwKKyAgICAgICAgICAgICAgICAoZy5sb2dub3JtdmFyaWF0ZSwgKDAuMCwgMC4wKSwgMS4wKSwKKyAgICAgICAgICAgICAgICAoZy5sb2dub3JtdmFyaWF0ZSwgKC1mbG9hdCgnaW5mJyksIDAuMCksIDAuMCksCisgICAgICAgICAgICAgICAgKGcubm9ybWFsdmFyaWF0ZSwgKDEwLjAsIDAuMCksIDEwLjApLAorICAgICAgICAgICAgICAgIChnLnBhcmV0b3ZhcmlhdGUsIChmbG9hdCgnaW5mJyksKSwgMS4wKSwKKyAgICAgICAgICAgICAgICAoZy53ZWlidWxsdmFyaWF0ZSwgKDEwLjAsIGZsb2F0KCdpbmYnKSksIDEwLjApLAorICAgICAgICAgICAgICAgIChnLndlaWJ1bGx2YXJpYXRlLCAoMC4wLCAxMC4wKSwgMC4wKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcmlhdGUoKmFyZ3MpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3Zvbl9taXNlc19yYW5nZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNzE0OTogdm9uIG1pc2VzIHZhcmlhdGVzIHdlcmUgbm90IGNvbnNpc3RlbnRseSBpbiB0aGUKKyAgICAgICAgIyByYW5nZSBbMCwgMipQSV0uCisgICAgICAgIGcgPSByYW5kb20uUmFuZG9tKCkKKyAgICAgICAgTiA9IDEwMAorICAgICAgICBmb3IgbXUgaW4gMC4wLCAwLjEsIDMuMSwgNi4yOgorICAgICAgICAgICAgZm9yIGthcHBhIGluIDAuMCwgMi4zLCA1MDAuMDoKKyAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShOKToKKyAgICAgICAgICAgICAgICAgICAgc2FtcGxlID0gZy52b25taXNlc3ZhcmlhdGUobXUsIGthcHBhKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgICAgICAgICAwIDw9IHNhbXBsZSA8PSByYW5kb20uVFdPUEksCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9KCJ2b25taXNlc3ZhcmlhdGUoe30sIHt9KSBwcm9kdWNlZCBhIHJlc3VsdCB7fSBvdXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb2YgcmFuZ2UgWzAsIDIqcGldIikuZm9ybWF0KG11LCBrYXBwYSwgc2FtcGxlKSkKKworICAgIGRlZiB0ZXN0X3Zvbl9taXNlc19sYXJnZV9rYXBwYShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcxNDE6IHZvbm1pc2VzdmFyaWF0ZSgpIHdhcyBoYW5nIGZvciBsYXJnZSBrYXBwYXMKKyAgICAgICAgcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgwLCAxZTE1KQorICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTAwKQorCisKK2NsYXNzIFRlc3RNb2R1bGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0TWFnaWNDb25zdGFudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmFuZG9tLk5WX01BR0lDQ09OU1QsIDEuNzE1NTI3NzY5OTIxNDEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmFuZG9tLlRXT1BJLCA2LjI4MzE4NTMwNzE4KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJhbmRvbS5MT0c0LCAxLjM4NjI5NDM2MTExOTg5KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJhbmRvbS5TR19NQUdJQ0NPTlNULCAyLjUwNDA3NzM5Njc3NjI3KQorCisgICAgZGVmIHRlc3RfX2FsbF9fKHNlbGYpOgorICAgICAgICAjIHRlc3RzIHZhbGlkaXR5IGJ1dCBub3QgY29tcGxldGVuZXNzIG9mIHRoZSBfX2FsbF9fIGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldChyYW5kb20uX19hbGxfXykgPD0gc2V0KGRpcihyYW5kb20pKSkKKworICAgIGRlZiB0ZXN0X3JhbmRvbV9zdWJjbGFzc193aXRoX2t3YXJncyhzZWxmKToKKyAgICAgICAgIyBTRiBidWcgIzE0ODY2NjMgLS0gdGhpcyB1c2VkIHRvIGVycm9uZW91c2x5IHJhaXNlIGEgVHlwZUVycm9yCisgICAgICAgIGNsYXNzIFN1YmNsYXNzKHJhbmRvbS5SYW5kb20pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld2FyZz1Ob25lKToKKyAgICAgICAgICAgICAgICByYW5kb20uUmFuZG9tLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFN1YmNsYXNzKG5ld2FyZz0xKQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0Y2xhc3NlcyA9ICAgIFtXaWNobWFubkhpbGxfVGVzdEJhc2ljT3BzLAorICAgICAgICAgICAgICAgICAgICAgIE1lcnNlbm5lVHdpc3Rlcl9UZXN0QmFzaWNPcHMsCisgICAgICAgICAgICAgICAgICAgICAgVGVzdERpc3RyaWJ1dGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgVGVzdE1vZHVsZV0KKworICAgIHRyeToKKyAgICAgICAgcmFuZG9tLlN5c3RlbVJhbmRvbSgpLnJhbmRvbSgpCisgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICB0ZXN0Y2xhc3Nlcy5hcHBlbmQoU3lzdGVtUmFuZG9tX1Rlc3RCYXNpY09wcykKKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RjbGFzc2VzKQorCisgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgaW1wb3J0IHN5cworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0Y2xhc3NlcykKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3JlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhODFhMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3JlLnB5CkBAIC0wLDAgKzEsMTAzMCBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBwcmVjaXNpb25iaWdtZW10ZXN0LCBfMkcsIGNweXRob25fb25seQoraW1wb3J0IHJlCitmcm9tIHJlIGltcG9ydCBTY2FubmVyCitpbXBvcnQgc3JlX2NvbnN0YW50cworaW1wb3J0IHN5cworaW1wb3J0IHN0cmluZworaW1wb3J0IHRyYWNlYmFjaworZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQorCisKKyMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYworCisjIFdBUk5JTkc6IERvbid0IGNoYW5nZSBkZXRhaWxzIGluIHRoZXNlIHRlc3RzIGlmIHlvdSBkb24ndCBrbm93CisjIHdoYXQgeW91J3JlIGRvaW5nLiBTb21lIG9mIHRoZXNlIHRlc3RzIHdlcmUgY2FyZWZ1bGx5IG1vZGVsZWQgdG8KKyMgY292ZXIgbW9zdCBvZiB0aGUgY29kZS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFJlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgcyA9ICdRYWJiYmNSJworICAgICAgICB4ID0gcmUuY29tcGlsZSgnYWIrYycpCisgICAgICAgIHkgPSBwcm94eSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZmluZGFsbCgnUWFiYmJjUicpLCB5LmZpbmRhbGwoJ1FhYmJiY1InKSkKKworICAgIGRlZiB0ZXN0X3NlYXJjaF9zdGFyX3BsdXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKCd4KicsICdheHgnKS5zcGFuKDApLCAoMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKCd4KicsICdheHgnKS5zcGFuKCksICgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goJ3grJywgJ2F4eCcpLnNwYW4oMCksICgxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goJ3grJywgJ2F4eCcpLnNwYW4oKSwgKDEsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgneCcsICdhYWEnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYSonLCAneHh4Jykuc3BhbigwKSwgKDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdhKicsICd4eHgnKS5zcGFuKCksICgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgneConLCAneHh4YScpLnNwYW4oMCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgneConLCAneHh4YScpLnNwYW4oKSwgKDAsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdhKycsICd4eHgnKSwgTm9uZSkKKworICAgIGRlZiBidW1wX251bShzZWxmLCBtYXRjaG9iaik6CisgICAgICAgIGludF92YWx1ZSA9IGludChtYXRjaG9iai5ncm91cCgwKSkKKyAgICAgICAgcmV0dXJuIHN0cihpbnRfdmFsdWUgKyAxKQorCisgICAgZGVmIHRlc3RfYmFzaWNfcmVfc3ViKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigiKD9pKWIrIiwgIngiLCAiYmJiYiBCQkJCIiksICd4IHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihyJ1xkKycsIHNlbGYuYnVtcF9udW0sICcwOC4yIC0yIDIzeDk5eScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc5LjMgLTMgMjR4MTAweScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKHInXGQrJywgc2VsZi5idW1wX251bSwgJzA4LjIgLTIgMjN4OTl5JywgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzkuMyAtMyAyM3g5OXknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCcuJywgbGFtYmRhIG06IHIiXG4iLCAneCcpLCAnXFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJy4nLCByIlxuIiwgJ3gnKSwgJ1xuJykKKworICAgICAgICBzID0gciJcMVwxIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKC4pJywgcywgJ3gnKSwgJ3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJyguKScsIHJlLmVzY2FwZShzKSwgJ3gnKSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJyguKScsIGxhbWJkYSBtOiBzLCAneCcpLCBzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCcoP1A8YT54KScsICdcZzxhPlxnPGE+JywgJ3h4JyksICd4eHh4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJyg/UDxhPngpJywgJ1xnPGE+XGc8MT4nLCAneHgnKSwgJ3h4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKD9QPHVuaz54KScsICdcZzx1bms+XGc8dW5rPicsICd4eCcpLCAneHh4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCcoP1A8dW5rPngpJywgJ1xnPDE+XGc8MT4nLCAneHgnKSwgJ3h4eHgnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCdhJyxyJ1x0XG5cdlxyXGZcYVxiXEJcWlxhXEFcd1xXXHNcU1xkXEQnLCdhJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1x0XG5cdlxyXGZcYVxiXFxCXFxaXGFcXEFcXHdcXFdcXHNcXFNcXGRcXEQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignYScsICdcdFxuXHZcclxmXGEnLCAnYScpLCAnXHRcblx2XHJcZlxhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ2EnLCAnXHRcblx2XHJcZlxhJywgJ2EnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoY2hyKDkpK2NocigxMCkrY2hyKDExKStjaHIoMTMpK2NocigxMikrY2hyKDcpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignXlxzKicsICdYJywgJ3Rlc3QnKSwgJ1h0ZXN0JykKKworICAgIGRlZiB0ZXN0X2J1Z180NDk5NjQoc2VsZik6CisgICAgICAgICMgZmFpbHMgZm9yIGdyb3VwIGZvbGxvd2VkIGJ5IG90aGVyIGVzY2FwZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihyJyg/UDx1bms+eCknLCAnXGc8MT5cZzwxPlxcYicsICd4eCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd4eFxieHhcYicpCisKKyAgICBkZWYgdGVzdF9idWdfNDQ5MDAwKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHN1YigpIG9uIGVzY2FwZWQgY2hhcmFjdGVycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihyJ1xyXG4nLCByJ1xuJywgJ2FiY1xyXG5kZWZcclxuJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FiY1xuZGVmXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignXHJcbicsIHInXG4nLCAnYWJjXHJcbmRlZlxyXG4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWJjXG5kZWZcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKHInXHJcbicsICdcbicsICdhYmNcclxuZGVmXHJcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYmNcbmRlZlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ1xyXG4nLCAnXG4nLCAnYWJjXHJcbmRlZlxyXG4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWJjXG5kZWZcbicpCisKKyAgICBkZWYgdGVzdF9idWdfMTE0MChzZWxmKToKKyAgICAgICAgIyByZS5zdWIoeCwgeSwgdScnKSBzaG91bGQgcmV0dXJuIHUnJywgbm90ICcnLCBhbmQKKyAgICAgICAgIyByZS5zdWIoeCwgeSwgJycpIHNob3VsZCByZXR1cm4gJycsIG5vdCB1JycuCisgICAgICAgICMgQWxzbzoKKyAgICAgICAgIyByZS5zdWIoeCwgeSwgdW5pY29kZSh4KSkgc2hvdWxkIHJldHVybiB1bmljb2RlKHkpLCBhbmQKKyAgICAgICAgIyByZS5zdWIoeCwgeSwgc3RyKHgpKSBzaG91bGQgcmV0dXJuCisgICAgICAgICMgICAgIHN0cih5KSBpZiBpc2luc3RhbmNlKHksIHN0cikgZWxzZSB1bmljb2RlKHkpLgorICAgICAgICBmb3IgeCBpbiAneCcsIHUneCc6CisgICAgICAgICAgICBmb3IgeSBpbiAneScsIHUneSc6CisgICAgICAgICAgICAgICAgeiA9IHJlLnN1Yih4LCB5LCB1JycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6LCB1JycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHopLCB1bmljb2RlKQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICB6ID0gcmUuc3ViKHgsIHksICcnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeiwgJycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHopLCBzdHIpCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgIHogPSByZS5zdWIoeCwgeSwgdW5pY29kZSh4KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHosIHkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHopLCB1bmljb2RlKQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICB6ID0gcmUuc3ViKHgsIHksIHN0cih4KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHosIHkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHopLCB0eXBlKHkpKQorCisgICAgZGVmIHRlc3RfYnVnXzE2NjEoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgZmxhZ3MgZG8gbm90IGdldCBzaWxlbnRseSBpZ25vcmVkIHdpdGggY29tcGlsZWQgcGF0dGVybnMKKyAgICAgICAgcGF0dGVybiA9IHJlLmNvbXBpbGUoJy4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByZS5tYXRjaCwgcGF0dGVybiwgJ0EnLCByZS5JKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByZS5zZWFyY2gsIHBhdHRlcm4sICdBJywgcmUuSSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmUuZmluZGFsbCwgcGF0dGVybiwgJ0EnLCByZS5JKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByZS5jb21waWxlLCBwYXR0ZXJuLCByZS5JKQorCisgICAgZGVmIHRlc3RfYnVnXzM2Mjkoc2VsZik6CisgICAgICAgICMgQSByZWdleCB0aGF0IHRyaWdnZXJlZCBhIGJ1ZyBpbiB0aGUgc3JlLWNvZGUgdmFsaWRhdG9yCisgICAgICAgIHJlLmNvbXBpbGUoIig/UDxxdW90ZT4pKD8ocXVvdGUpKSIpCisKKyAgICBkZWYgdGVzdF9zdWJfdGVtcGxhdGVfbnVtZXJpY19lc2NhcGUoc2VsZik6CisgICAgICAgICMgYnVnIDc3NjMxMSBhbmQgZnJpZW5kcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDAnLCAneCcpLCAnXDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDAwMCcsICd4JyksICdcMDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wwMDEnLCAneCcpLCAnXDAwMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMDA4JywgJ3gnKSwgJ1wwJyArICc4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wwMDknLCAneCcpLCAnXDAnICsgJzknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDExMScsICd4JyksICdcMTExJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wxMTcnLCAneCcpLCAnXDExNycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wxMTExJywgJ3gnKSwgJ1wxMTExJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wxMTExJywgJ3gnKSwgJ1wxMTEnICsgJzEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMDAnLCAneCcpLCAnXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMDcnLCAneCcpLCAnXHgwNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMDgnLCAneCcpLCAnXDAnICsgJzgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDA5JywgJ3gnKSwgJ1wwJyArICc5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wwYScsICd4JyksICdcMCcgKyAnYScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1w0MDAnLCAneCcpLCAnXDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDc3NycsICd4JyksICdcMzc3JykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDEnLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcOCcsICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJ3gnLCByJ1w5JywgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDExJywgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDE4JywgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDFhJywgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDkwJywgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDk5JywgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDExOCcsICd4JykgIyByJ1wxMScgKyAnOCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJ3gnLCByJ1wxMWEnLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMTgxJywgJ3gnKSAjIHInXDE4JyArICcxJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDgwMCcsICd4JykgIyByJ1w4MCcgKyAnMCcKKworICAgICAgICAjIGluIHB5dGhvbjIuMyAoZXRjKSwgdGhlc2UgbG9vcCBlbmRsZXNzbHkgaW4gc3JlX3BhcnNlci5weQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKCgoKCgoKCgoKCh4KSkpKSkpKSkpKSknLCByJ1wxMScsICd4JyksICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJygoKCgoKCgoKCh5KSkpKSkpKSkpKSguKScsIHInXDExOCcsICd4eXonKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAneHo4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJygoKCgoKCgoKCh5KSkpKSkpKSkpKSguKScsIHInXDExYScsICd4eXonKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAneHphJykKKworICAgIGRlZiB0ZXN0X3F1YWxpZmllZF9yZV9zdWIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCdhJywgJ2InLCAnYWFhYWEnKSwgJ2JiYmJiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ2EnLCAnYicsICdhYWFhYScsIDEpLCAnYmFhYWEnKQorCisgICAgZGVmIHRlc3RfYnVnXzExNDY2MChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIocicoXFMpXHMrKFxTKScsIHInXDEgXDInLCAnaGVsbG8gIHRoZXJlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlbGxvIHRoZXJlJykKKworICAgIGRlZiB0ZXN0X2J1Z180NjIyNzAoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgZW1wdHkgc3ViKCkgYmVoYXZpb3VyLCBzZWUgU0YgYnVnICM0NjIyNzAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gqJywgJy0nLCAnYWJ4ZCcpLCAnLWEtYi1kLScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4KycsICctJywgJ2FieGQnKSwgJ2FiLWQnKQorCisgICAgZGVmIHRlc3Rfc3ltYm9saWNfZ3JvdXBzKHNlbGYpOgorICAgICAgICByZS5jb21waWxlKCcoP1A8YT54KSg/UD1hKSg/KGEpeSknKQorICAgICAgICByZS5jb21waWxlKCcoP1A8YTE+eCkoP1A9YTEpKD8oYTEpeSknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UDxhPikoP1A8YT4pJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1B4KScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD9QPSknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UD0xKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD9QPWEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A9YTEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A9YS4pJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A8KScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD9QPD4pJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A8MT4pJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A8YS4+KScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD8oKSknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/KGEpKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD8oMWEpKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD8oYS4pKScpCisKKyAgICBkZWYgdGVzdF9zeW1ib2xpY19yZWZzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCknLCAnXGc8YScsICd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICcoP1A8YT54KScsICdcZzwnLCAneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCknLCAnXGcnLCAneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCknLCAnXGc8YSBhPicsICd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICcoP1A8YT54KScsICdcZzw+JywgJ3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJyg/UDxhPngpJywgJ1xnPDFhMT4nLCAneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCByZS5zdWIsICcoP1A8YT54KScsICdcZzxhYj4nLCAneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCl8KD9QPGI+eSknLCAnXGc8Yj4nLCAneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCl8KD9QPGI+eSknLCAnXFwyJywgJ3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJyg/UDxhPngpJywgJ1xnPC0xPicsICd4eCcpCisKKyAgICBkZWYgdGVzdF9yZV9zdWJuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oIig/aSliKyIsICJ4IiwgImJiYmIgQkJCQiIpLCAoJ3ggeCcsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIrIiwgIngiLCAiYmJiYiBCQkJCIiksICgneCBCQkJCJywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3VibigiYisiLCAieCIsICJ4eXoiKSwgKCd4eXonLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWJuKCJiKiIsICJ4IiwgInh5eiIpLCAoJ3h4eHl4engnLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWJuKCJiKiIsICJ4IiwgInh5eiIsIDIpLCAoJ3h4eHl6JywgMikpCisKKyAgICBkZWYgdGVzdF9yZV9zcGxpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOiIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICdjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KikiLCAiOmE6Yjo6YyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOjonLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoPzo6KikiLCAiOmE6Yjo6YyIpLCBbJycsICdhJywgJ2InLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOikqIiwgIjphOmI6OmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJycsICc6JywgJ2EnLCAnOicsICdiJywgJzonLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoW2I6XSspIiwgIjphOmI6OmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJycsICc6JywgJ2EnLCAnOmI6OicsICdjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIihiKXwoOispIiwgIjphOmI6OmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJycsIE5vbmUsICc6JywgJ2EnLCBOb25lLCAnOicsICcnLCAnYicsIE5vbmUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCAnOjonLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoPzpiKXwoPzo6KykiLCAiOmE6Yjo6YyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJ2EnLCAnJywgJycsICdjJ10pCisKKyAgICBkZWYgdGVzdF9xdWFsaWZpZWRfcmVfc3BsaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIjoiLCAiOmE6Yjo6YyIsIDIpLCBbJycsICdhJywgJ2I6OmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgnOicsICdhOmI6YzpkJywgMiksIFsnYScsICdiJywgJ2M6ZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOikiLCAiOmE6Yjo6YyIsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2I6OmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIiwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYjo6YyddKQorCisgICAgZGVmIHRlc3RfcmVfZmluZGFsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhYmMiKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiOisiLCAiYTpiOjpjOjo6ZCIpLCBbIjoiLCAiOjoiLCAiOjo6Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKDorKSIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOikoOiopIiwgImE6Yjo6Yzo6OmQiKSwgWygiOiIsICIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjoiLCAiOjoiKV0pCisKKyAgICBkZWYgdGVzdF9idWdfMTE3NjEyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwociIoYXwoYikpIiwgImFiYSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoImEiLCAiIiksKCJiIiwgImIiKSwoImEiLCAiIildKQorCisgICAgZGVmIHRlc3RfcmVfbWF0Y2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EnLCAnYScpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgJ2EnKS5ncm91cHMoKSwgKCdhJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgwKSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgxKSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKworICAgICAgICBwYXQgPSByZS5jb21waWxlKCcoKGEpfChiKSkoYyk/JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2EnKS5ncm91cHMoKSwgKCdhJywgJ2EnLCBOb25lLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2InKS5ncm91cHMoKSwgKCdiJywgTm9uZSwgJ2InLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2FjJykuZ3JvdXBzKCksICgnYScsICdhJywgTm9uZSwgJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2JjJykuZ3JvdXBzKCksICgnYicsIE5vbmUsICdiJywgJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2JjJykuZ3JvdXBzKCIiKSwgKCdiJywgIiIsICdiJywgJ2MnKSkKKworICAgICAgICAjIEEgc2luZ2xlIGdyb3VwCisgICAgICAgIG0gPSByZS5tYXRjaCgnKGEpJywgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoMCksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdyb3VwKDApLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5ncm91cCgxKSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoMSwgMSksICgnYScsICdhJykpCisKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnKD86KD9QPGExPmEpfCg/UDxiMj5iKSkoP1A8YzM+Yyk/JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2EnKS5ncm91cCgxLCAyLCAzKSwgKCdhJywgTm9uZSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCdiJykuZ3JvdXAoJ2ExJywgJ2IyJywgJ2MzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsICdiJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCdhYycpLmdyb3VwKDEsICdiMicsIDMpLCAoJ2EnLCBOb25lLCAnYycpKQorCisgICAgZGVmIHRlc3RfcmVfZ3JvdXByZWZfZXhpc3RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKFwoKT8oW14oKV0rKSg/KDEpXCkpJCcsICcoYSknKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJygnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKFwoKT8oW14oKV0rKSg/KDEpXCkpJCcsICdhJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJ2EpJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJyhhJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oPzooYSl8YykoKD8oMSlifGQpKSQnLCAnYWInKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EnLCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKD86KGEpfGMpKCg/KDEpYnxkKSkkJywgJ2NkJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsICdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oPzooYSl8YykoKD8oMSl8ZCkpJCcsICdjZCcpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCAnZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKD86KGEpfGMpKCg/KDEpfGQpKSQnLCAnYScpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYScsICcnKSkKKworICAgICAgICAjIFRlc3RzIGZvciBidWcgIzExNzc4MzE6IGV4ZXJjaXNlIGdyb3VwcyBvdGhlciB0aGFuIHRoZSBmaXJzdCBncm91cAorICAgICAgICBwID0gcmUuY29tcGlsZSgnKD9QPGcxPmEpKD9QPGcyPmIpPygoPyhnMiljfGQpKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5tYXRjaCgnYWJjJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgJ2InLCAnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubWF0Y2goJ2FkJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgTm9uZSwgJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hdGNoKCdhYmQnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hdGNoKCdhYycpLCBOb25lKQorCisKKyAgICBkZWYgdGVzdF9yZV9ncm91cHJlZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oXHwpPyhbXigpXSspXDEkJywgJ3xhfCcpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnfCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKFx8KT8oW14oKV0rKVwxPyQnLCAnYScpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMSQnLCAnYXwnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oXHwpPyhbXigpXSspXDEkJywgJ3xhJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKD86KGEpfGMpKFwxKSQnLCAnYWEnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInXig/OihhKXxjKShcMSk/JCcsICdjJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfZ3JvdXBkaWN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoP1A8Zmlyc3Q+Zmlyc3QpICg/UDxzZWNvbmQ+c2Vjb25kKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpcnN0IHNlY29uZCcpLmdyb3VwZGljdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnZmlyc3QnOidmaXJzdCcsICdzZWNvbmQnOidzZWNvbmQnfSkKKworICAgIGRlZiB0ZXN0X2V4cGFuZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKD9QPGZpcnN0PmZpcnN0KSAoP1A8c2Vjb25kPnNlY29uZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBzZWNvbmQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5leHBhbmQociJcMiBcMSBcZzxzZWNvbmQ+IFxnPGZpcnN0PiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgZmlyc3Qgc2Vjb25kIGZpcnN0IikKKworICAgIGRlZiB0ZXN0X3JlcGVhdF9taW5tYXgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezF9JCIsICJhYmMiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MX0/JCIsICJhYmMiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSwyfSQiLCAiYWJjIiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezEsMn0/JCIsICJhYmMiKSwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXszfSQiLCAiYWJjIikuZ3JvdXAoMSksICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSwzfSQiLCAiYWJjIikuZ3JvdXAoMSksICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSw0fSQiLCAiYWJjIikuZ3JvdXAoMSksICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7Myw0fT8kIiwgImFiYyIpLmdyb3VwKDEpLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezN9PyQiLCAiYWJjIikuZ3JvdXAoMSksICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSwzfT8kIiwgImFiYyIpLmdyb3VwKDEpLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezEsNH0/JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXszLDR9PyQiLCAiYWJjIikuZ3JvdXAoMSksICJjIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeeHsxfSQiLCAieHh4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezF9PyQiLCAieHh4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezEsMn0kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeeHsxLDJ9PyQiLCAieHh4IiksIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7M30kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDN9JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7MSw0fSQiLCAieHh4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezMsNH0/JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7M30/JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7MSwzfT8kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDR9PyQiLCAieHh4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezMsNH0/JCIsICJ4eHgiKSwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeeHt9JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7fSQiLCAieHt9IiksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXRhdHRyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSkiLCAiYSIpLnBvcywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5lbmRwb3MsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIihhKSIsICJhIikuc3RyaW5nLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIihhKSIsICJhIikucmVncywgKCgwLCAxKSwgKDAsIDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5yZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NwZWNpYWxfZXNjYXBlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiKS5ncm91cCgxKSwgImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiKS5ncm91cCgxKSwgImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiLCByZS5MT0NBTEUpLmdyb3VwKDEpLCAiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxCKGIuKVxCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiYyBiY2QgYmMgYWJ4ZCIsIHJlLkxPQ0FMRSkuZ3JvdXAoMSksICJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGIoYi4pXGIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjZCBhYmMgYmNkIGJ4IiwgcmUuVU5JQ09ERSkuZ3JvdXAoMSksICJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuVU5JQ09ERSkuZ3JvdXAoMSksICJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXmFiYyQiLCAiXG5hYmNcbiIsIHJlLk0pLmdyb3VwKDApLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeXEFhYmNcWiQiLCAiYWJjIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJcbmFiY1xuIiwgcmUuTSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGIoYi4pXGIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ImFiY2QgYWJjIGJjZCBieCIpLmdyb3VwKDEpLCAiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxCKGIuKVxCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSJhYmMgYmNkIGJjIGFieGQiKS5ncm91cCgxKSwgImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeYWJjJCIsIHUiXG5hYmNcbiIsIHJlLk0pLmdyb3VwKDApLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeXEFhYmNcWiQiLCB1ImFiYyIsIHJlLk0pLmdyb3VwKDApLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeXEFhYmNcWiQiLCB1IlxuYWJjXG4iLCByZS5NKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcZFxEXHdcV1xzXFMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMWFhISBhIikuZ3JvdXAoMCksICIxYWEhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxkXERcd1xXXHNcUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxYWEhIGEiLCByZS5MT0NBTEUpLmdyb3VwKDApLCAiMWFhISBhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcZFxEXHdcV1xzXFMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMWFhISBhIiwgcmUuVU5JQ09ERSkuZ3JvdXAoMCksICIxYWEhIGEiKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2JvdW5kYXJpZXMoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMDcxMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxiKGFiYylcYiIsICJhYmMiKS5ncm91cCgxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIikKKyAgICAgICAgIyBUaGVyZSdzIGEgd29yZCBib3VuZGFyeSBhdCB0aGUgc3RhcnQgb2YgYSBzdHJpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlxiIiwgImFiYyIpKQorICAgICAgICAjIEEgbm9uLWVtcHR5IHN0cmluZyBpbmNsdWRlcyBhIG5vbi1ib3VuZGFyeSB6ZXJvLWxlbmd0aCBtYXRjaC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaChyIlxCIiwgImFiYyIpKQorICAgICAgICAjIFRoZXJlIGlzIG5vIG5vbi1ib3VuZGFyeSBtYXRjaCBhdCB0aGUgc3RhcnQgb2YgYSBzdHJpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmUubWF0Y2gociJcQiIsICJhYmMiKSkKKyAgICAgICAgIyBIb3dldmVyLCBhbiBlbXB0eSBzdHJpbmcgY29udGFpbnMgbm8gd29yZCBib3VuZGFyaWVzLCBhbmQgYWxzbyBubworICAgICAgICAjIG5vbi1ib3VuZGFyaWVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxCIiwgIiIpLCBOb25lKQorICAgICAgICAjIFRoaXMgb25lIGlzIHF1ZXN0aW9uYWJsZSBhbmQgZGlmZmVyZW50IGZyb20gdGhlIHBlcmxyZSBiZWhhdmlvdXIsCisgICAgICAgICMgYnV0IGRlc2NyaWJlcyBjdXJyZW50IGJlaGF2aW9yLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxiIiwgIiIpLCBOb25lKQorICAgICAgICAjIEEgc2luZ2xlIHdvcmQtY2hhcmFjdGVyIHN0cmluZyBoYXMgdHdvIGJvdW5kYXJpZXMsIGJ1dCBubworICAgICAgICAjIG5vbi1ib3VuZGFyeSBnYXBzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZS5maW5kYWxsKHIiXGIiLCAiYSIpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmUuZmluZGFsbChyIlxCIiwgImEiKSksIDApCisgICAgICAgICMgSWYgdGhlcmUgYXJlIG5vIHdvcmRzLCB0aGVyZSBhcmUgbm8gYm91bmRhcmllcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZS5maW5kYWxsKHIiXGIiLCAiICIpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmUuZmluZGFsbChyIlxiIiwgIiAgICIpKSwgMCkKKyAgICAgICAgIyBDYW4gbWF0Y2ggYXJvdW5kIHRoZSB3aGl0ZXNwYWNlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZS5maW5kYWxsKHIiXEIiLCAiICIpKSwgMikKKworICAgIGRlZiB0ZXN0X2JpZ2NoYXJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2godSIoW1x1MjIyMlx1MjIyM10pIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ilx1MjIyMiIpLmdyb3VwKDEpLCB1Ilx1MjIyMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2godSIoW1x1MjIyMlx1MjIyM10pIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ilx1MjIyMiIsIHJlLlVOSUNPREUpLmdyb3VwKDEpLCB1Ilx1MjIyMiIpCisKKyAgICBkZWYgdGVzdF9iaWdfY29kZXNpemUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExNjAKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoJ3wnLmpvaW4oKCclZCcleCBmb3IgeCBpbiByYW5nZSgxMDAwMCkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoci5tYXRjaCgnMTAwMCcpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyLm1hdGNoKCc5OTk5JykpCisKKyAgICBkZWYgdGVzdF9hbnlhbGwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImEuYiIsICJhXG5iIiwgcmUuRE9UQUxMKS5ncm91cCgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYVxuYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImEuKmIiLCAiYVxuXG5iIiwgcmUuRE9UQUxMKS5ncm91cCgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYVxuXG5iIikKKworICAgIGRlZiB0ZXN0X25vbl9jb25zdW1pbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIihhKD89XHNbXmFdKSkiLCAiYSBiIikuZ3JvdXAoMSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEoPz1cc1teYV0qKSkiLCAiYSBiIikuZ3JvdXAoMSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEoPz1cc1thYmNdKSkiLCAiYSBiIikuZ3JvdXAoMSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEoPz1cc1thYmNdKikpIiwgImEgYmMiKS5ncm91cCgxKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGEpKD89XHNcMSkiLCAiYSBhIikuZ3JvdXAoMSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhKSg/PVxzXDEqKSIsICJhIGFhIikuZ3JvdXAoMSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhKSg/PVxzKGFiY3xhKSkiLCAiYSBhIikuZ3JvdXAoMSksICJhIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGEoPyFcc1teYV0pKSIsICJhIGEiKS5ncm91cCgxKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGEoPyFcc1thYmNdKSkiLCAiYSBkIikuZ3JvdXAoMSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhKSg/IVxzXDEpIiwgImEgYiIpLmdyb3VwKDEpLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYSkoPyFccyhhYmN8YSkpIiwgImEgYiIpLmdyb3VwKDEpLCAiYSIpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfY2FzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgdSJBQkMiLCByZS5JKS5ncm91cCgwKSwgIkFCQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYVxzW15hXSkiLCAiYSBiIiwgcmUuSSkuZ3JvdXAoMSksICJhIGIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGFcc1teYV0qKSIsICJhIGJiIiwgcmUuSSkuZ3JvdXAoMSksICJhIGJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhXHNbYWJjXSkiLCAiYSBiIiwgcmUuSSkuZ3JvdXAoMSksICJhIGIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGFcc1thYmNdKikiLCAiYSBiYiIsIHJlLkkpLmdyb3VwKDEpLCAiYSBiYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoKGEpXHNcMikiLCAiYSBhIiwgcmUuSSkuZ3JvdXAoMSksICJhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKChhKVxzXDIqKSIsICJhIGFhIiwgcmUuSSkuZ3JvdXAoMSksICJhIGFhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIigoYSlccyhhYmN8YSkpIiwgImEgYSIsIHJlLkkpLmdyb3VwKDEpLCAiYSBhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIigoYSlccyhhYmN8YSkqKSIsICJhIGFhIiwgcmUuSSkuZ3JvdXAoMSksICJhIGFhIikKKworICAgIGRlZiB0ZXN0X2NhdGVnb3J5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKFxzKSIsICIgIikuZ3JvdXAoMSksICIgIikKKworICAgIGRlZiB0ZXN0X2dldGxvd2VyKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3NyZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zcmUuZ2V0bG93ZXIob3JkKCdBJyksIDApLCBvcmQoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3JlLmdldGxvd2VyKG9yZCgnQScpLCByZS5MT0NBTEUpLCBvcmQoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3JlLmdldGxvd2VyKG9yZCgnQScpLCByZS5VTklDT0RFKSwgb3JkKCdhJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgdSJBQkMiLCByZS5JKS5ncm91cCgwKSwgIkFCQyIpCisKKyAgICBkZWYgdGVzdF9ub3RfbGl0ZXJhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goIlxzKFteYV0pIiwgIiBiIikuZ3JvdXAoMSksICJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goIlxzKFteYV0qKSIsICIgYmIiKS5ncm91cCgxKSwgImJiIikKKworICAgIGRlZiB0ZXN0X3NlYXJjaF9jb3ZlcmFnZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goIlxzKGIpIiwgIiBiIikuZ3JvdXAoMSksICJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goImFccyIsICJhICIpLmdyb3VwKDApLCAiYSAiKQorCisgICAgZGVmIGFzc2VydE1hdGNoKHNlbGYsIHBhdHRlcm4sIHRleHQsIG1hdGNoPU5vbmUsIHNwYW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcj1yZS5tYXRjaCk6CisgICAgICAgIGlmIG1hdGNoIGlzIE5vbmUgYW5kIHNwYW4gaXMgTm9uZToKKyAgICAgICAgICAgICMgdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUgd2hvbGUgdGV4dAorICAgICAgICAgICAgbWF0Y2ggPSB0ZXh0CisgICAgICAgICAgICBzcGFuID0gKDAsIGxlbih0ZXh0KSkKKyAgICAgICAgZWxpZiBtYXRjaCBpcyBOb25lIG9yIHNwYW4gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lmIG1hdGNoIGlzIG5vdCBOb25lLCBzcGFuIHNob3VsZCBiZSBzcGVjaWZpZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGFuZCB2aWNlIHZlcnNhKS4nKQorICAgICAgICBtID0gbWF0Y2hlcihwYXR0ZXJuLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdyb3VwKCksIG1hdGNoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uc3BhbigpLCBzcGFuKQorCisgICAgZGVmIHRlc3RfcmVfZXNjYXBlKHNlbGYpOgorICAgICAgICBhbG51bV9jaGFycyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cworICAgICAgICBwID0gdScnLmpvaW4odW5pY2hyKGkpIGZvciBpIGluIHJhbmdlKDI1NikpCisgICAgICAgIGZvciBjIGluIHA6CisgICAgICAgICAgICBpZiBjIGluIGFsbnVtX2NoYXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZXNjYXBlKGMpLCBjKQorICAgICAgICAgICAgZWxpZiBjID09IHUnXHgwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5lc2NhcGUoYyksIHUnXFwwMDAnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmVzY2FwZShjKSwgdSdcXCcgKyBjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRNYXRjaChyZS5lc2NhcGUoYyksIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0TWF0Y2gocmUuZXNjYXBlKHApLCBwKQorCisgICAgZGVmIHRlc3RfcmVfZXNjYXBlX2J5dGUoc2VsZik6CisgICAgICAgIGFsbnVtX2NoYXJzID0gKHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cykuZW5jb2RlKCdhc2NpaScpCisgICAgICAgIHAgPSAnJy5qb2luKGNocihpKSBmb3IgaSBpbiByYW5nZSgyNTYpKQorICAgICAgICBmb3IgYiBpbiBwOgorICAgICAgICAgICAgaWYgYiBpbiBhbG51bV9jaGFyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmVzY2FwZShiKSwgYikKKyAgICAgICAgICAgIGVsaWYgYiA9PSBiJ1x4MDAnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZXNjYXBlKGIpLCBiJ1xcMDAwJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5lc2NhcGUoYiksIGInXFwnICsgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TWF0Y2gocmUuZXNjYXBlKGIpLCBiKQorICAgICAgICBzZWxmLmFzc2VydE1hdGNoKHJlLmVzY2FwZShwKSwgcCkKKworICAgIGRlZiB0ZXN0X3JlX2VzY2FwZV9ub25fYXNjaWkoc2VsZik6CisgICAgICAgIHMgPSB1J3h4eFx1MjYyMFx1MjYyMFx1MjYyMHh4eCcKKyAgICAgICAgc19lc2NhcGVkID0gcmUuZXNjYXBlKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc19lc2NhcGVkLCB1J3h4eFxcXHUyNjIwXFxcdTI2MjBcXFx1MjYyMHh4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0TWF0Y2goc19lc2NhcGVkLCBzKQorICAgICAgICBzZWxmLmFzc2VydE1hdGNoKHUnLiVzKy4nICUgcmUuZXNjYXBlKHUnXHUyNjIwJyksIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdSd4XHUyNjIwXHUyNjIwXHUyNjIweCcsICgyLCA3KSwgcmUuc2VhcmNoKQorCisgICAgZGVmIHRlc3RfcmVfZXNjYXBlX25vbl9hc2NpaV9ieXRlcyhzZWxmKToKKyAgICAgICAgYiA9IHUneVx1MjYyMHlcdTI2MjB5Jy5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgYl9lc2NhcGVkID0gcmUuZXNjYXBlKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYl9lc2NhcGVkLCBiJ3lcXFx4ZTJcXFx4OThcXFx4YTB5XFxceGUyXFxceDk4XFxceGEweScpCisgICAgICAgIHNlbGYuYXNzZXJ0TWF0Y2goYl9lc2NhcGVkLCBiKQorICAgICAgICByZXMgPSByZS5maW5kYWxsKHJlLmVzY2FwZSh1J1x1MjYyMCcuZW5jb2RlKCd1dGYtOCcpKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMikKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIHNlbGYucGlja2xlX3Rlc3QocGlja2xlKQorICAgICAgICBpbXBvcnQgY1BpY2tsZQorICAgICAgICBzZWxmLnBpY2tsZV90ZXN0KGNQaWNrbGUpCisgICAgICAgICMgb2xkIHBpY2tsZXMgZXhwZWN0IHRoZSBfY29tcGlsZSgpIHJlY29uc3RydWN0b3IgaW4gc3JlIG1vZHVsZQorICAgICAgICBpbXBvcnRfbW9kdWxlKCJzcmUiLCBkZXByZWNhdGVkPVRydWUpCisgICAgICAgIGZyb20gc3JlIGltcG9ydCBfY29tcGlsZQorCisgICAgZGVmIHBpY2tsZV90ZXN0KHNlbGYsIHBpY2tsZSk6CisgICAgICAgIG9sZHBhdCA9IHJlLmNvbXBpbGUoJ2EoPzpifChjfGUpezEsMn0/fGQpKz8oLiknKQorICAgICAgICBzID0gcGlja2xlLmR1bXBzKG9sZHBhdCkKKyAgICAgICAgbmV3cGF0ID0gcGlja2xlLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2xkcGF0LCBuZXdwYXQpCisKKyAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuSSwgcmUuSUdOT1JFQ0FTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5MLCByZS5MT0NBTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuTSwgcmUuTVVMVElMSU5FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLlMsIHJlLkRPVEFMTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5YLCByZS5WRVJCT1NFKQorCisgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZik6CisgICAgICAgIGZvciBmbGFnIGluIFtyZS5JLCByZS5NLCByZS5YLCByZS5TLCByZS5MXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUuY29tcGlsZSgnXnBhdHRlcm4kJywgZmxhZyksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zcmVfY2hhcmFjdGVyX2xpdGVyYWxzKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiBbMCwgOCwgMTYsIDMyLCA2NCwgMTI3LCAxMjgsIDI1NV06CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKHIiXCUwM28iICUgaSwgY2hyKGkpKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2gociJcJTAzbzAiICUgaSwgY2hyKGkpKyIwIiksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKHIiXCUwM284IiAlIGksIGNocihpKSsiOCIpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaChyIlx4JTAyeCIgJSBpLCBjaHIoaSkpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaChyIlx4JTAyeDAiICUgaSwgY2hyKGkpKyIwIiksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKHIiXHglMDJ4eiIgJSBpLCBjaHIoaSkrInoiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCAiXDkxMSIsICIiKQorCisgICAgZGVmIHRlc3Rfc3JlX2NoYXJhY3Rlcl9jbGFzc19saXRlcmFscyhzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gWzAsIDgsIDE2LCAzMiwgNjQsIDEyNywgMTI4LCAyNTVdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaChyIltcJTAzb10iICUgaSwgY2hyKGkpKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2gociJbXCUwM28wXSIgJSBpLCBjaHIoaSkpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaChyIltcJTAzbzhdIiAlIGksIGNocihpKSksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKHIiW1x4JTAyeF0iICUgaSwgY2hyKGkpKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2gociJbXHglMDJ4MF0iICUgaSwgY2hyKGkpKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2gociJbXHglMDJ4el0iICUgaSwgY2hyKGkpKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCAiW1w5MTFdIiwgIiIpCisKKyAgICBkZWYgdGVzdF9idWdfMTEzMjU0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpfChiKScsICdiJykuc3RhcnQoMSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpfChiKScsICdiJykuZW5kKDEpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJyhhKXwoYiknLCAnYicpLnNwYW4oMSksICgtMSwgLTEpKQorCisgICAgZGVmIHRlc3RfYnVnXzUyNzM3MShzZWxmKToKKyAgICAgICAgIyBidWcgZGVzY3JpYmVkIGluIHBhdGNoZXMgNTI3MzcxLzY3MjQ5MQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpP2EnLCdhJykubGFzdGluZGV4LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpKGIpP2InLCdhYicpLmxhc3RpbmRleCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJyg/UDxhPmEpKD9QPGI+Yik/YicsJ2FiJykubGFzdGdyb3VwLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIig/UDxhPmEoYikpIiwgImFiIikubGFzdGdyb3VwLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIigoYSkpIiwgImEiKS5sYXN0aW5kZXgsIDEpCisKKyAgICBkZWYgdGVzdF9idWdfNTQ1ODU1KHNlbGYpOgorICAgICAgICAjIGJ1ZyA1NDU4NTUgLS0gVGhpcyBwYXR0ZXJuIGZhaWxlZCB0byBjYXVzZSBhIGNvbXBpbGUgZXJyb3IgYXMgaXQKKyAgICAgICAgIyBzaG91bGQsIGluc3RlYWQgcHJvdm9raW5nIGEgVHlwZUVycm9yLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJ2Zvb1thLScpCisKKyAgICBkZWYgdGVzdF9idWdfNDE4NjI2KHNlbGYpOgorICAgICAgICAjIGJ1Z3MgNDE4NjI2IGF0IGFsLiAtLSBUZXN0aW5nIEdyZWcgQ2hhcG1hbidzIGFkZGl0aW9uIG9mIG9wIGNvZGUKKyAgICAgICAgIyBTUkVfT1BfTUlOX1JFUEVBVF9PTkUgZm9yIGVsaW1pbmF0aW5nIHJlY3Vyc2lvbiBvbiBzaW1wbGUgdXNlcyBvZgorICAgICAgICAjIHBhdHRlcm4gJyo/JyBvbiBhIGxvbmcgc3RyaW5nLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcuKj9jJywgMTAwMDAqJ2FiJysnY2QnKS5lbmQoMCksIDIwMDAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcuKj9jZCcsIDUwMDAqJ2FiJysnYycrNTAwMConYWInKydjZGUnKS5lbmQoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJy4qP2NkJywgMjAwMDAqJ2FiYycrJ2RlJykuZW5kKDApLCA2MDAwMSkKKyAgICAgICAgIyBub24tc2ltcGxlICcqPycgc3RpbGwgdXNlZCB0byBoaXQgdGhlIHJlY3Vyc2lvbiBsaW1pdCwgYmVmb3JlIHRoZQorICAgICAgICAjIG5vbi1yZWN1cnNpdmUgc2NoZW1lIHdhcyBpbXBsZW1lbnRlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goJyhhfGIpKj9jJywgMTAwMDAqJ2FiJysnY2QnKS5lbmQoMCksIDIwMDAxKQorCisgICAgZGVmIHRlc3RfYnVnXzYxMjA3NChzZWxmKToKKyAgICAgICAgcGF0PXUiWyIrcmUuZXNjYXBlKHUiXHUyMDM5IikrdSJdIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUocGF0KSBhbmQgMSwgMSkKKworICAgIGRlZiB0ZXN0X3N0YWNrX292ZXJmbG93KHNlbGYpOgorICAgICAgICAjIG5hc3R5IGNhc2VzIHRoYXQgdXNlZCB0byBvdmVyZmxvdyB0aGUgc3RyYWlnaHRmb3J3YXJkIHJlY3Vyc2l2ZQorICAgICAgICAjIGltcGxlbWVudGF0aW9uIG9mIHJlcGVhdGVkIGdyb3Vwcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKHgpKicsIDUwMDAwKid4JykuZ3JvdXAoMSksICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKHgpKnknLCA1MDAwMConeCcrJ3knKS5ncm91cCgxKSwgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoeCkqP3knLCA1MDAwMConeCcrJ3knKS5ncm91cCgxKSwgJ3gnKQorCisgICAgZGVmIHRlc3RfdW5saW1pdGVkX3plcm9fd2lkdGhfcmVwZWF0KHNlbGYpOgorICAgICAgICAjIElzc3VlICM5NjY5CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD86YT8pKnknLCAneicpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJyg/OmE/KSt5JywgJ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoPzphPyl7Mix9eScsICd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD86YT8pKj95JywgJ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoPzphPykrP3knLCAneicpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJyg/OmE/KXsyLH0/eScsICd6JykpCisKKyAgICBkZWYgdGVzdF9zY2FubmVyKHNlbGYpOgorICAgICAgICBkZWYgc19pZGVudChzY2FubmVyLCB0b2tlbik6IHJldHVybiB0b2tlbgorICAgICAgICBkZWYgc19vcGVyYXRvcihzY2FubmVyLCB0b2tlbik6IHJldHVybiAib3AlcyIgJSB0b2tlbgorICAgICAgICBkZWYgc19mbG9hdChzY2FubmVyLCB0b2tlbik6IHJldHVybiBmbG9hdCh0b2tlbikKKyAgICAgICAgZGVmIHNfaW50KHNjYW5uZXIsIHRva2VuKTogcmV0dXJuIGludCh0b2tlbikKKworICAgICAgICBzY2FubmVyID0gU2Nhbm5lcihbCisgICAgICAgICAgICAociJbYS16QS1aX11cdyoiLCBzX2lkZW50KSwKKyAgICAgICAgICAgIChyIlxkK1wuXGQqIiwgc19mbG9hdCksCisgICAgICAgICAgICAociJcZCsiLCBzX2ludCksCisgICAgICAgICAgICAociI9fFwrfC18XCp8LyIsIHNfb3BlcmF0b3IpLAorICAgICAgICAgICAgKHIiXHMrIiwgTm9uZSksCisgICAgICAgICAgICBdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2Nhbm5lci5zY2FubmVyLnNjYW5uZXIoIiIpLnBhdHRlcm4sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2FubmVyLnNjYW4oInN1bSA9IDMqZm9vICsgMzEyLjUwICsgYmFyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKFsnc3VtJywgJ29wPScsIDMsICdvcConLCAnZm9vJywgJ29wKycsIDMxMi41LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wKycsICdiYXInXSwgJycpKQorCisgICAgZGVmIHRlc3RfYnVnXzQ0ODk1MShzZWxmKToKKyAgICAgICAgIyBidWcgNDQ4OTUxIChzaW1pbGFyIHRvIDQyOTM1NywgYnV0IHdpdGggc2luZ2xlIGNoYXIgbWF0Y2gpCisgICAgICAgICMgKEFsc28gdGVzdCBncmVlZHkgbWF0Y2hlcy4pCisgICAgICAgIGZvciBvcCBpbiAnJywnPycsJyonOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJygoLiVzKTopP3onJW9wLCAneicpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgTm9uZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKCguJXMpOik/eiclb3AsICdhOnonKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhOicsICdhJykpCisKKyAgICBkZWYgdGVzdF9idWdfNzI1MTA2KHNlbGYpOgorICAgICAgICAjIGNhcHR1cmluZyBncm91cHMgaW4gYWx0ZXJuYXRpdmVzIGluIHJlcGVhdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXigoYSl8YikqJywgJ2FiYycpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oKFthYl0pfGMpKicsICdhYmMnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKChkKXxbYWJdKSonLCAnYWJjJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oKGEpY3xbYWJdKSonLCAnYWJjJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oKGEpfGIpKj9jJywgJ2FiYycpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oKFthYl0pfGMpKj9kJywgJ2FiY2QnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKChkKXxbYWJdKSo/YycsICdhYmMnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXigoYSljfFthYl0pKj9jJywgJ2FiYycpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfYnVnXzcyNTE0OShzZWxmKToKKyAgICAgICAgIyBtYXJrX3N0YWNrX2Jhc2UgcmVzdG9yaW5nIGJlZm9yZSByZXN0b3JpbmcgbWFya3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpKD86KD89KGIpKiljKSonLCAnYWJiJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKSgoPyEoYikqKSkqJywgJ2FiYicpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYScsIE5vbmUsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfYnVnXzc2NDU0OChzZWxmKToKKyAgICAgICAgIyBidWcgNzY0NTQ4LCByZS5jb21waWxlKCkgYmFyZnMgb24gc3RyL3VuaWNvZGUgc3ViY2xhc3NlcworICAgICAgICB0cnk6CisgICAgICAgICAgICB1bmljb2RlCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gICMgbm8gcHJvYmxlbSBpZiB3ZSBoYXZlIG5vIHVuaWNvZGUKKyAgICAgICAgY2xhc3MgbXlfdW5pY29kZSh1bmljb2RlKTogcGFzcworICAgICAgICBwYXQgPSByZS5jb21waWxlKG15X3VuaWNvZGUoImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgieHl6IiksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5kaXRlcihzZWxmKToKKyAgICAgICAgaXRlciA9IHJlLmZpbmRpdGVyKHIiOisiLCAiYTpiOjpjOjo6ZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2l0ZW0uZ3JvdXAoMCkgZm9yIGl0ZW0gaW4gaXRlcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgWyI6IiwgIjo6IiwgIjo6OiJdKQorCisgICAgZGVmIHRlc3RfYnVnXzkyNjA3NShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdW5pY29kZQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuICMgbm8gcHJvYmxlbSBpZiB3ZSBoYXZlIG5vIHVuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLmNvbXBpbGUoJ2J1Z185MjYwNzUnKSBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgIHJlLmNvbXBpbGUoZXZhbCgidSdidWdfOTI2MDc1JyIpKSkKKworICAgIGRlZiB0ZXN0X2J1Z185MzE4NDgoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVuaWNvZGUKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcGF0dGVybiA9IGV2YWwoJ3UiW1x1MDAyRVx1MzAwMlx1RkYwRVx1RkY2MV0iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5jb21waWxlKHBhdHRlcm4pLnNwbGl0KCJhLmIuYyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYScsJ2InLCdjJ10pCisKKyAgICBkZWYgdGVzdF9idWdfNTgxMDgwKHNlbGYpOgorICAgICAgICBpdGVyID0gcmUuZmluZGl0ZXIociJccyIsICJhIGIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZXIubmV4dCgpLnNwYW4oKSwgKDEsMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGl0ZXIubmV4dCkKKworICAgICAgICBzY2FubmVyID0gcmUuY29tcGlsZShyIlxzIikuc2Nhbm5lcigiYSBiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2FubmVyLnNlYXJjaCgpLnNwYW4oKSwgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYW5uZXIuc2VhcmNoKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9idWdfODE3MjM0KHNlbGYpOgorICAgICAgICBpdGVyID0gcmUuZmluZGl0ZXIociIuKiIsICJhc2RmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyLm5leHQoKS5zcGFuKCksICgwLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyLm5leHQoKS5zcGFuKCksICg0LCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXRlci5uZXh0KQorCisgICAgZGVmIHRlc3RfYnVnXzY1NjEoc2VsZik6CisgICAgICAgICMgJ1xkJyBzaG91bGQgbWF0Y2ggY2hhcmFjdGVycyBpbiBVbmljb2RlIGNhdGVnb3J5ICdOZCcKKyAgICAgICAgIyAoTnVtYmVyLCBEZWNpbWFsIERpZ2l0KSwgYnV0IG5vdCB0aG9zZSBpbiAnTmwnIChOdW1iZXIsCisgICAgICAgICMgTGV0dGVyKSBvciAnTm8nIChOdW1iZXIsIE90aGVyKS4KKyAgICAgICAgZGVjaW1hbF9kaWdpdHMgPSBbCisgICAgICAgICAgICB1J1x1MDAzNycsICMgJ1xOe0RJR0lUIFNFVkVOfScsIGNhdGVnb3J5ICdOZCcKKyAgICAgICAgICAgIHUnXHUwZTU4JywgIyAnXE57VEhBSSBESUdJVCBTSVh9JywgY2F0ZWdvcnkgJ05kJworICAgICAgICAgICAgdSdcdWZmMTAnLCAjICdcTntGVUxMV0lEVEggRElHSVQgWkVST30nLCBjYXRlZ29yeSAnTmQnCisgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIGRlY2ltYWxfZGlnaXRzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXlxkJCcsIHgsIHJlLlVOSUNPREUpLmdyb3VwKDApLCB4KQorCisgICAgICAgIG5vdF9kZWNpbWFsX2RpZ2l0cyA9IFsKKyAgICAgICAgICAgIHUnXHUyMTY1JywgIyAnXE57Uk9NQU4gTlVNRVJBTCBTSVh9JywgY2F0ZWdvcnkgJ05sJworICAgICAgICAgICAgdSdcdTMwMzknLCAjICdcTntIQU5HWkhPVSBOVU1FUkFMIFRXRU5UWX0nLCBjYXRlZ29yeSAnTmwnCisgICAgICAgICAgICB1J1x1MjA4MicsICMgJ1xOe1NVQlNDUklQVCBUV099JywgY2F0ZWdvcnkgJ05vJworICAgICAgICAgICAgdSdcdTMyYjQnLCAjICdcTntDSVJDTEVEIE5VTUJFUiBUSElSVFkgTklORX0nLCBjYXRlZ29yeSAnTm8nCisgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIG5vdF9kZWNpbWFsX2RpZ2l0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdeXGQkJywgeCwgcmUuVU5JQ09ERSkpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9hcnJheShzZWxmKToKKyAgICAgICAgIyBTRiBidWYgMTY0NzU0MQorICAgICAgICBpbXBvcnQgYXJyYXkKKyAgICAgICAgZm9yIHR5cGVjb2RlIGluICdjYkJ1aEhpSWxMZmQnOgorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHR5cGVjb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5jb21waWxlKCJibGEiKS5tYXRjaChhKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZSgiIikubWF0Y2goYSkuZ3JvdXBzKCksICgpKQorCisgICAgZGVmIHRlc3RfaW5saW5lX2ZsYWdzKHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMTcwMAorICAgICAgICB1cHBlcl9jaGFyID0gdW5pY2hyKDB4MWVhMCkgIyBMYXRpbiBDYXBpdGFsIExldHRlciBBIHdpdGggRG90IEJlbGxvdworICAgICAgICBsb3dlcl9jaGFyID0gdW5pY2hyKDB4MWVhMSkgIyBMYXRpbiBTbWFsbCBMZXR0ZXIgQSB3aXRoIERvdCBCZWxsb3cKKworICAgICAgICBwID0gcmUuY29tcGlsZSh1cHBlcl9jaGFyLCByZS5JIHwgcmUuVSkKKyAgICAgICAgcSA9IHAubWF0Y2gobG93ZXJfY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorCisgICAgICAgIHAgPSByZS5jb21waWxlKGxvd2VyX2NoYXIsIHJlLkkgfCByZS5VKQorICAgICAgICBxID0gcC5tYXRjaCh1cHBlcl9jaGFyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisKKyAgICAgICAgcCA9IHJlLmNvbXBpbGUoJyg/aSknICsgdXBwZXJfY2hhciwgcmUuVSkKKyAgICAgICAgcSA9IHAubWF0Y2gobG93ZXJfY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorCisgICAgICAgIHAgPSByZS5jb21waWxlKCcoP2kpJyArIGxvd2VyX2NoYXIsIHJlLlUpCisgICAgICAgIHEgPSBwLm1hdGNoKHVwcGVyX2NoYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocSwgTm9uZSkKKworICAgICAgICBwID0gcmUuY29tcGlsZSgnKD9pdSknICsgdXBwZXJfY2hhcikKKyAgICAgICAgcSA9IHAubWF0Y2gobG93ZXJfY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorCisgICAgICAgIHAgPSByZS5jb21waWxlKCcoP2l1KScgKyBsb3dlcl9jaGFyKQorICAgICAgICBxID0gcC5tYXRjaCh1cHBlcl9jaGFyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9kb2xsYXJfbWF0Y2hlc190d2ljZShzZWxmKToKKyAgICAgICAgIiQgbWF0Y2hlcyB0aGUgZW5kIG9mIHN0cmluZywgYW5kIGp1c3QgYmVmb3JlIHRoZSB0ZXJtaW5hdGluZyBcbiIKKyAgICAgICAgcGF0dGVybiA9IHJlLmNvbXBpbGUoJyQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdHRlcm4uc3ViKCcjJywgJ2FcbmJcbicpLCAnYVxuYiNcbiMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdHRlcm4uc3ViKCcjJywgJ2FcbmJcbmMnKSwgJ2FcbmJcbmMjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXR0ZXJuLnN1YignIycsICdcbicpLCAnI1xuIycpCisKKyAgICAgICAgcGF0dGVybiA9IHJlLmNvbXBpbGUoJyQnLCByZS5NVUxUSUxJTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0dGVybi5zdWIoJyMnLCAnYVxuYlxuJyApLCAnYSNcbmIjXG4jJyApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0dGVybi5zdWIoJyMnLCAnYVxuYlxuYycpLCAnYSNcbmIjXG5jIycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0dGVybi5zdWIoJyMnLCAnXG4nKSwgJyNcbiMnKQorCisgICAgZGVmIHRlc3RfZGVhbGxvYyhzZWxmKToKKyAgICAgICAgIyBpc3N1ZSAzMjk5OiBjaGVjayBmb3Igc2VnZmF1bHQgaW4gZGVidWcgYnVpbGQKKyAgICAgICAgaW1wb3J0IF9zcmUKKyAgICAgICAgIyB0aGUgb3ZlcmZsb3cgbGltaXQgaXMgZGlmZmVyZW50IG9uIHdpZGUgYW5kIG5hcnJvdyBidWlsZHMgYW5kIGl0CisgICAgICAgICMgZGVwZW5kcyBvbiB0aGUgZGVmaW5pdGlvbiBvZiBTUkVfQ09ERSAoc2VlIHNyZS5oKS4KKyAgICAgICAgIyAyKioxMjggc2hvdWxkIGJlIGJpZyBlbm91Z2ggdG8gb3ZlcmZsb3cgb24gYm90aC4gRm9yIHNtYWxsZXIgdmFsdWVzCisgICAgICAgICMgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkIGluc3RlYWQgb2YgT3ZlcmZsb3dFcnJvci4KKyAgICAgICAgbG9uZ19vdmVyZmxvdyA9IDIqKjEyOAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlLmZpbmRpdGVyLCAiYSIsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBfc3JlLmNvbXBpbGUsICJhYmMiLCAwLCBbbG9uZ19vdmVyZmxvd10pCisKKyAgICBkZWYgdGVzdF9jb21waWxlKHNlbGYpOgorICAgICAgICAjIFRlc3QgcmV0dXJuIHZhbHVlIHdoZW4gZ2l2ZW4gc3RyaW5nIGFuZCBwYXR0ZXJuIGFzIHBhcmFtZXRlcgorICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGF0dGVybiwgcmUuX3BhdHRlcm5fdHlwZSkKKyAgICAgICAgc2FtZV9wYXR0ZXJuID0gcmUuY29tcGlsZShwYXR0ZXJuKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtZV9wYXR0ZXJuLCByZS5fcGF0dGVybl90eXBlKQorICAgICAgICBzZWxmLmFzc2VydElzKHNhbWVfcGF0dGVybiwgcGF0dGVybikKKyAgICAgICAgIyBUZXN0IGJlaGF2aW91ciB3aGVuIG5vdCBnaXZlbiBhIHN0cmluZyBvciBwYXR0ZXJuIGFzIHBhcmFtZXRlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlLmNvbXBpbGUsIDApCisKKyAgICBkZWYgdGVzdF9idWdfMTM4OTkoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEzODk5OiByZSBwYXR0ZXJuIHIiW1xBXSIgc2hvdWxkIHdvcmsgbGlrZSAiQSIgYnV0IG1hdGNoZXMKKyAgICAgICAgIyBub3RoaW5nLiBEaXR0byBCIGFuZCBaLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwocidbXEFcQlxiXENcWl0nLCAnQUJcYkNaJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydBJywgJ0InLCAnXGInLCAnQycsICdaJ10pCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8yRywgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfbGFyZ2Vfc2VhcmNoKHNlbGYsIHNpemUpOgorICAgICAgICAjIElzc3VlICMxMDE4MjogaW5kaWNlcyB3ZXJlIDMyLWJpdC10cnVuY2F0ZWQuCisgICAgICAgIHMgPSAnYScgKiBzaXplCisgICAgICAgIG0gPSByZS5zZWFyY2goJyQnLCBzKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uc3RhcnQoKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmVuZCgpLCBzaXplKQorCisgICAgIyBUaGUgaHVnZSBtZW11c2UgaXMgYmVjYXVzZSBvZiByZS5zdWIoKSB1c2luZyBhIGxpc3QgYW5kIGEgam9pbigpCisgICAgIyB0byBjcmVhdGUgdGhlIHJlcGxhY2VtZW50IHJlc3VsdC4KKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8yRywgbWVtdXNlPTE2ICsgMikKKyAgICBkZWYgdGVzdF9sYXJnZV9zdWJuKHNlbGYsIHNpemUpOgorICAgICAgICAjIElzc3VlICMxMDE4MjogaW5kaWNlcyB3ZXJlIDMyLWJpdC10cnVuY2F0ZWQuCisgICAgICAgIHMgPSAnYScgKiBzaXplCisgICAgICAgIHIsIG4gPSByZS5zdWJuKCcnLCAnJywgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIHNpemUgKyAxKQorCisKKyAgICBkZWYgdGVzdF9yZXBlYXRfbWlubWF4X292ZXJmbG93KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMzE2OQorICAgICAgICBzdHJpbmcgPSAieCIgKiAxMDAwMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIi57NjU1MzV9Iiwgc3RyaW5nKS5zcGFuKCksICgwLCA2NTUzNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIueyw2NTUzNX0iLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDY1NTM1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIi57NjU1MzUsfT8iLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDY1NTM1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIi57NjU1MzZ9Iiwgc3RyaW5nKS5zcGFuKCksICgwLCA2NTUzNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIueyw2NTUzNn0iLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDY1NTM2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIi57NjU1MzYsfT8iLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDY1NTM2KSkKKyAgICAgICAgIyAyKioxMjggc2hvdWxkIGJlIGJpZyBlbm91Z2ggdG8gb3ZlcmZsb3cgYm90aCBTUkVfQ09ERSBhbmQgUHlfc3NpemVfdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcmUuY29tcGlsZSwgciIueyVkfSIgJSAyKioxMjgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHJlLmNvbXBpbGUsIHIiLnssJWR9IiAlIDIqKjEyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcmUuY29tcGlsZSwgciIueyVkLH0/IiAlIDIqKjEyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcmUuY29tcGlsZSwgciIueyVkLCVkfSIgJSAoMioqMTI5LCAyKioxMjgpKQorCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3JlcGVhdF9taW5tYXhfb3ZlcmZsb3dfbWF4cmVwZWF0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdyZXF1aXJlcyBfc3JlLk1BWFJFUEVBVCBjb25zdGFudCcpCisgICAgICAgIHN0cmluZyA9ICJ4IiAqIDEwMDAwMAorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyIi57JWR9IiAlIChNQVhSRVBFQVQgLSAxKSwgc3RyaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIi57LCVkfSIgJSAoTUFYUkVQRUFUIC0gMSksIHN0cmluZykuc3BhbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgwLCAxMDAwMDApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyIi57JWQsfT8iICUgKE1BWFJFUEVBVCAtIDEpLCBzdHJpbmcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByZS5jb21waWxlLCByIi57JWR9IiAlIE1BWFJFUEVBVCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcmUuY29tcGlsZSwgciIueywlZH0iICUgTUFYUkVQRUFUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByZS5jb21waWxlLCByIi57JWQsfT8iICUgTUFYUkVQRUFUKQorCisgICAgZGVmIHRlc3RfYmFja3JlZl9ncm91cF9uYW1lX2luX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNzM0MTogUG9vciBlcnJvciBtZXNzYWdlIHdoZW4gY29tcGlsaW5nIGludmFsaWQgcmVnZXgKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChzcmVfY29uc3RhbnRzLmVycm9yLCAnPGZvbz4nKToKKyAgICAgICAgICAgIHJlLmNvbXBpbGUoJyg/UD08Zm9vPiknKQorCisgICAgZGVmIHRlc3RfZ3JvdXBfbmFtZV9pbl9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgMTczNDE6IFBvb3IgZXJyb3IgbWVzc2FnZSB3aGVuIGNvbXBpbGluZyBpbnZhbGlkIHJlZ2V4CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoc3JlX2NvbnN0YW50cy5lcnJvciwgJ1w/Zm9vJyk6CisgICAgICAgICAgICByZS5jb21waWxlKCcoP1A8P2Zvbz4pJykKKworCitkZWYgcnVuX3JlX3Rlc3RzKCk6CisgICAgZnJvbSB0ZXN0LnJlX3Rlc3RzIGltcG9ydCB0ZXN0cywgU1VDQ0VFRCwgRkFJTCwgU1lOVEFYX0VSUk9SCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ1J1bm5pbmcgcmVfdGVzdHMgdGVzdCBzdWl0ZScKKyAgICBlbHNlOgorICAgICAgICAjIFRvIHNhdmUgdGltZSwgb25seSBydW4gdGhlIGZpcnN0IGFuZCBsYXN0IDEwIHRlc3RzCisgICAgICAgICN0ZXN0cyA9IHRlc3RzWzoxMF0gKyB0ZXN0c1stMTA6XQorICAgICAgICBwYXNzCisKKyAgICBmb3IgdCBpbiB0ZXN0czoKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHBhdHRlcm4gPSBzID0gb3V0Y29tZSA9IHJlcGwgPSBleHBlY3RlZCA9IE5vbmUKKyAgICAgICAgaWYgbGVuKHQpID09IDU6CisgICAgICAgICAgICBwYXR0ZXJuLCBzLCBvdXRjb21lLCByZXBsLCBleHBlY3RlZCA9IHQKKyAgICAgICAgZWxpZiBsZW4odCkgPT0gMzoKKyAgICAgICAgICAgIHBhdHRlcm4sIHMsIG91dGNvbWUgPSB0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAoJ1Rlc3QgdHVwbGVzIHNob3VsZCBoYXZlIDMgb3IgNSBmaWVsZHMnLCB0KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUocGF0dGVybikKKyAgICAgICAgZXhjZXB0IHJlLmVycm9yOgorICAgICAgICAgICAgaWYgb3V0Y29tZSA9PSBTWU5UQVhfRVJST1I6IHBhc3MgICMgRXhwZWN0ZWQgYSBzeW50YXggZXJyb3IKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJz09PSBTeW50YXggZXJyb3I6JywgdAorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6IHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHByaW50ICcqKiogVW5leHBlY3RlZCBlcnJvciAqKionLCB0CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9iai5zZWFyY2gocykKKyAgICAgICAgICAgIGV4Y2VwdCByZS5lcnJvciwgbXNnOgorICAgICAgICAgICAgICAgIHByaW50ICc9PT0gVW5leHBlY3RlZCBleGNlcHRpb24nLCB0LCByZXByKG1zZykKKyAgICAgICAgICAgIGlmIG91dGNvbWUgPT0gU1lOVEFYX0VSUk9SOgorICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGEgc3ludGF4IGVycm9yOyBmb3JnZXQgaXQuCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZiBvdXRjb21lID09IEZBSUw6CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6IHBhc3MgICAjIE5vIG1hdGNoLCBhcyBleHBlY3RlZAorICAgICAgICAgICAgICAgIGVsc2U6IHByaW50ICc9PT0gU3VjY2VlZGVkIGluY29ycmVjdGx5JywgdAorICAgICAgICAgICAgZWxpZiBvdXRjb21lID09IFNVQ0NFRUQ6CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIE1hdGNoZWQsIGFzIGV4cGVjdGVkLCBzbyBub3cgd2UgY29tcHV0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyByZXN1bHQgc3RyaW5nIGFuZCBjb21wYXJlIGl0IHRvIG91ciBleHBlY3RlZCByZXN1bHQuCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQgPSByZXN1bHQuc3BhbigwKQorICAgICAgICAgICAgICAgICAgICB2YXJkaWN0PXsnZm91bmQnOiByZXN1bHQuZ3JvdXAoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdncm91cHMnOiByZXN1bHQuZ3JvdXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZsYWdzJzogcmVzdWx0LnJlLmZsYWdzfQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMDApOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpID0gcmVzdWx0Lmdyb3VwKGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTcGVjaWFsIGhhY2sgYmVjYXVzZSBlbHNlIHRoZSBzdHJpbmcgY29uY2F0IGZhaWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpID0gIk5vbmUiCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaSA9ICJFcnJvciIKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmRpY3RbJ2clZCcgJSBpXSA9IGdpCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJlc3VsdC5yZS5ncm91cGluZGV4LmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaSA9IHJlc3VsdC5ncm91cChpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpID0gIk5vbmUiCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaSA9ICJFcnJvciIKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmRpY3RbaV0gPSBnaQorICAgICAgICAgICAgICAgICAgICByZXBsID0gZXZhbChyZXBsLCB2YXJkaWN0KQorICAgICAgICAgICAgICAgICAgICBpZiByZXBsICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJz09PSBncm91cGluZyBlcnJvcicsIHQsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCByZXByKHJlcGwpICsgJyBzaG91bGQgYmUgJyArIHJlcHIoZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJz09PSBGYWlsZWQgaW5jb3JyZWN0bHknLCB0CisKKyAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggb24gYSB1bmljb2RlIHN0cmluZywgYW5kIGNoZWNrIHRoYXQgaXQKKyAgICAgICAgICAgICAgICAjIHN0aWxsIHN1Y2NlZWRzLgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaCh1bmljb2RlKHMsICJsYXRpbi0xIikpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJz09PSBGYWlscyBvbiB1bmljb2RlIG1hdGNoJywgdAorICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgMS41LjIKKyAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAjIHVuaWNvZGUgdGVzdCBjYXNlCisKKyAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggb24gYSB1bmljb2RlIHBhdHRlcm4sIGFuZCBjaGVjayB0aGF0IGl0CisgICAgICAgICAgICAgICAgIyBzdGlsbCBzdWNjZWVkcy4KKyAgICAgICAgICAgICAgICBvYmo9cmUuY29tcGlsZSh1bmljb2RlKHBhdHRlcm4sICJsYXRpbi0xIikpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzKQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnPT09IEZhaWxzIG9uIHVuaWNvZGUgcGF0dGVybiBtYXRjaCcsIHQKKworICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCB3aXRoIHRoZSBzZWFyY2ggYXJlYSBsaW1pdGVkIHRvIHRoZSBleHRlbnQKKyAgICAgICAgICAgICAgICAjIG9mIHRoZSBtYXRjaCBhbmQgc2VlIGlmIGl0IHN0aWxsIHN1Y2NlZWRzLiAgXEIgd2lsbAorICAgICAgICAgICAgICAgICMgYnJlYWsgKGJlY2F1c2UgaXQgd29uJ3QgbWF0Y2ggYXQgdGhlIGVuZCBvciBzdGFydCBvZiBhCisgICAgICAgICAgICAgICAgIyBzdHJpbmcpLCBzbyB3ZSdsbCBpZ25vcmUgcGF0dGVybnMgdGhhdCBmZWF0dXJlIGl0LgorCisgICAgICAgICAgICAgICAgaWYgcGF0dGVybls6Ml0gIT0gJ1xcQicgYW5kIHBhdHRlcm5bLTI6XSAhPSAnXFxCJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmouc2VhcmNoKHMsIHJlc3VsdC5zdGFydCgwKSwgcmVzdWx0LmVuZCgwKSArIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJz09PSBGYWlsZWQgb24gcmFuZ2UtbGltaXRlZCBtYXRjaCcsIHQKKworICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCB3aXRoIElHTk9SRUNBU0UgZW5hYmxlZCwgYW5kIGNoZWNrIHRoYXQgaXQKKyAgICAgICAgICAgICAgICAjIHN0aWxsIHN1Y2NlZWRzLgorICAgICAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUocGF0dGVybiwgcmUuSUdOT1JFQ0FTRSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmouc2VhcmNoKHMpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICc9PT0gRmFpbHMgb24gY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCcsIHQKKworICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCB3aXRoIExPQ0FMRSBlbmFibGVkLCBhbmQgY2hlY2sgdGhhdCBpdAorICAgICAgICAgICAgICAgICMgc3RpbGwgc3VjY2VlZHMuCisgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5MT0NBTEUpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzKQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnPT09IEZhaWxzIG9uIGxvY2FsZS1zZW5zaXRpdmUgbWF0Y2gnLCB0CisKKyAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggd2l0aCBVTklDT0RFIGxvY2FsZSBlbmFibGVkLCBhbmQgY2hlY2sKKyAgICAgICAgICAgICAgICAjIHRoYXQgaXQgc3RpbGwgc3VjY2VlZHMuCisgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5VTklDT0RFKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9iai5zZWFyY2gocykKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJz09PSBGYWlscyBvbiB1bmljb2RlLXNlbnNpdGl2ZSBtYXRjaCcsIHQKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChSZVRlc3RzKQorICAgIHJ1bl9yZV90ZXN0cygpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1YzdmNAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5CkBAIC0wLDAgKzEsNDcgQEAKKyIiIgorVmVyeSBtaW5pbWFsIHVuaXR0ZXN0cyBmb3IgcGFydHMgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZS4KKworVGhlc2UgdGVzdHMgd2VyZSBhZGRlZCB0byBjaGVjayB0aGF0IHRoZSBsaWJlZGl0IGVtdWxhdGlvbiBvbiBPU1ggYW5kCit0aGUgInJlYWwiIHJlYWRsaW5lIGhhdmUgdGhlIHNhbWUgaW50ZXJmYWNlIGZvciBoaXN0b3J5IG1hbmlwdWxhdGlvbi4gVGhhdCdzCit3aHkgdGhlIHRlc3RzIGNvdmVyIG9ubHkgYSBzbWFsbCBzdWJzZXQgb2YgdGhlIGludGVyZmFjZS4KKyIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKKworIyBTa2lwIHRlc3RzIGlmIHRoZXJlIGlzIG5vIHJlYWRsaW5lIG1vZHVsZQorcmVhZGxpbmUgPSBpbXBvcnRfbW9kdWxlKCdyZWFkbGluZScpCisKK2NsYXNzIFRlc3RIaXN0b3J5TWFuaXB1bGF0aW9uICh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKHJlYWRsaW5lLCAnY2xlYXJfaGlzdG9yeScpLAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBoaXN0b3J5IHVwZGF0ZSB0ZXN0IGNhbm5vdCBiZSBydW4gYmVjYXVzZSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgImNsZWFyX2hpc3RvcnkgbWV0aG9kIGlzIG5vdCBhdmFpbGFibGUuIikKKyAgICBkZWYgdGVzdEhpc3RvcnlVcGRhdGVzKHNlbGYpOgorICAgICAgICByZWFkbGluZS5jbGVhcl9oaXN0b3J5KCkKKworICAgICAgICByZWFkbGluZS5hZGRfaGlzdG9yeSgiZmlyc3QgbGluZSIpCisgICAgICAgIHJlYWRsaW5lLmFkZF9oaXN0b3J5KCJzZWNvbmQgbGluZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDApLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMSksICJmaXJzdCBsaW5lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDIpLCAic2Vjb25kIGxpbmUiKQorCisgICAgICAgIHJlYWRsaW5lLnJlcGxhY2VfaGlzdG9yeV9pdGVtKDAsICJyZXBsYWNlZCBsaW5lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDApLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMSksICJyZXBsYWNlZCBsaW5lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDIpLCAic2Vjb25kIGxpbmUiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2N1cnJlbnRfaGlzdG9yeV9sZW5ndGgoKSwgMikKKworICAgICAgICByZWFkbGluZS5yZW1vdmVfaGlzdG9yeV9pdGVtKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgwKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDEpLCAic2Vjb25kIGxpbmUiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2N1cnJlbnRfaGlzdG9yeV9sZW5ndGgoKSwgMSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RIaXN0b3J5TWFuaXB1bGF0aW9uKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9yZXByLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmVwci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjJmY2NmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmVwci5weQpAQCAtMCwwICsxLDMyNyBAQAorIiIiCisgIFRlc3QgY2FzZXMgZm9yIHRoZSByZXByIG1vZHVsZQorICBOaWNrIE1hdGhld3NvbgorIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfcHkza193YXJuaW5ncworZnJvbSByZXByIGltcG9ydCByZXByIGFzIHIgIyBEb24ndCBzaGFkb3cgYnVpbHRpbiByZXByCitmcm9tIHJlcHIgaW1wb3J0IFJlcHIKKworCitkZWYgbmVzdGVkVHVwbGUobmVzdGluZyk6CisgICAgdCA9ICgpCisgICAgZm9yIGkgaW4gcmFuZ2UobmVzdGluZyk6CisgICAgICAgIHQgPSAodCwpCisgICAgcmV0dXJuIHQKKworY2xhc3MgUmVwclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKHIoImFiYyIpLCAiJ2FiYyciKQorICAgICAgICBlcShyKCJhYmNkZWZnaGlqa2xtbm9wIiksIidhYmNkZWZnaGlqa2xtbm9wJyIpCisKKyAgICAgICAgcyA9ICJhIiozMCsiYiIqMzAKKyAgICAgICAgZXhwZWN0ZWQgPSByZXByKHMpWzoxM10gKyAiLi4uIiArIHJlcHIocylbLTE0Ol0KKyAgICAgICAgZXEocihzKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgZXEocigiXCInIiksIHJlcHIoIlwiJyIpKQorICAgICAgICBzID0gIlwiIiozMCsiJyIqMTAwCisgICAgICAgIGV4cGVjdGVkID0gcmVwcihzKVs6MTNdICsgIi4uLiIgKyByZXByKHMpWy0xNDpdCisgICAgICAgIGVxKHIocyksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdHVwbGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShyKCgxLCkpLCAiKDEsKSIpCisKKyAgICAgICAgdDMgPSAoMSwgMiwgMykKKyAgICAgICAgZXEocih0MyksICIoMSwgMiwgMykiKQorCisgICAgICAgIHIyID0gUmVwcigpCisgICAgICAgIHIyLm1heHR1cGxlID0gMgorICAgICAgICBleHBlY3RlZCA9IHJlcHIodDMpWzotMl0gKyAiLi4uKSIKKyAgICAgICAgZXEocjIucmVwcih0MyksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfY29udGFpbmVyKHNlbGYpOgorICAgICAgICBmcm9tIGFycmF5IGltcG9ydCBhcnJheQorICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQorCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIFR1cGxlcyBnaXZlIHVwIGFmdGVyIDYgZWxlbWVudHMKKyAgICAgICAgZXEocigoKSksICIoKSIpCisgICAgICAgIGVxKHIoKDEsKSksICIoMSwpIikKKyAgICAgICAgZXEocigoMSwgMiwgMykpLCAiKDEsIDIsIDMpIikKKyAgICAgICAgZXEocigoMSwgMiwgMywgNCwgNSwgNikpLCAiKDEsIDIsIDMsIDQsIDUsIDYpIikKKyAgICAgICAgZXEocigoMSwgMiwgMywgNCwgNSwgNiwgNykpLCAiKDEsIDIsIDMsIDQsIDUsIDYsIC4uLikiKQorCisgICAgICAgICMgTGlzdHMgZ2l2ZSB1cCBhZnRlciA2IGFzIHdlbGwKKyAgICAgICAgZXEocihbXSksICJbXSIpCisgICAgICAgIGVxKHIoWzFdKSwgIlsxXSIpCisgICAgICAgIGVxKHIoWzEsIDIsIDNdKSwgIlsxLCAyLCAzXSIpCisgICAgICAgIGVxKHIoWzEsIDIsIDMsIDQsIDUsIDZdKSwgIlsxLCAyLCAzLCA0LCA1LCA2XSIpCisgICAgICAgIGVxKHIoWzEsIDIsIDMsIDQsIDUsIDYsIDddKSwgIlsxLCAyLCAzLCA0LCA1LCA2LCAuLi5dIikKKworICAgICAgICAjIFNldHMgZ2l2ZSB1cCBhZnRlciA2IGFzIHdlbGwKKyAgICAgICAgZXEocihzZXQoW10pKSwgInNldChbXSkiKQorICAgICAgICBlcShyKHNldChbMV0pKSwgInNldChbMV0pIikKKyAgICAgICAgZXEocihzZXQoWzEsIDIsIDNdKSksICJzZXQoWzEsIDIsIDNdKSIpCisgICAgICAgIGVxKHIoc2V0KFsxLCAyLCAzLCA0LCA1LCA2XSkpLCAic2V0KFsxLCAyLCAzLCA0LCA1LCA2XSkiKQorICAgICAgICBlcShyKHNldChbMSwgMiwgMywgNCwgNSwgNiwgN10pKSwgInNldChbMSwgMiwgMywgNCwgNSwgNiwgLi4uXSkiKQorCisgICAgICAgICMgRnJvemVuc2V0cyBnaXZlIHVwIGFmdGVyIDYgYXMgd2VsbAorICAgICAgICBlcShyKGZyb3plbnNldChbXSkpLCAiZnJvemVuc2V0KFtdKSIpCisgICAgICAgIGVxKHIoZnJvemVuc2V0KFsxXSkpLCAiZnJvemVuc2V0KFsxXSkiKQorICAgICAgICBlcShyKGZyb3plbnNldChbMSwgMiwgM10pKSwgImZyb3plbnNldChbMSwgMiwgM10pIikKKyAgICAgICAgZXEocihmcm96ZW5zZXQoWzEsIDIsIDMsIDQsIDUsIDZdKSksICJmcm96ZW5zZXQoWzEsIDIsIDMsIDQsIDUsIDZdKSIpCisgICAgICAgIGVxKHIoZnJvemVuc2V0KFsxLCAyLCAzLCA0LCA1LCA2LCA3XSkpLCAiZnJvemVuc2V0KFsxLCAyLCAzLCA0LCA1LCA2LCAuLi5dKSIpCisKKyAgICAgICAgIyBjb2xsZWN0aW9ucy5kZXF1ZSBhZnRlciA2CisgICAgICAgIGVxKHIoZGVxdWUoWzEsIDIsIDMsIDQsIDUsIDYsIDddKSksICJkZXF1ZShbMSwgMiwgMywgNCwgNSwgNiwgLi4uXSkiKQorCisgICAgICAgICMgRGljdGlvbmFyaWVzIGdpdmUgdXAgYWZ0ZXIgNC4KKyAgICAgICAgZXEocih7fSksICJ7fSIpCisgICAgICAgIGQgPSB7J2FsaWNlJzogMSwgJ2JvYic6IDIsICdjaGFybGVzJzogMywgJ2RhdmUnOiA0fQorICAgICAgICBlcShyKGQpLCAieydhbGljZSc6IDEsICdib2InOiAyLCAnY2hhcmxlcyc6IDMsICdkYXZlJzogNH0iKQorICAgICAgICBkWydhcnRodXInXSA9IDEKKyAgICAgICAgZXEocihkKSwgInsnYWxpY2UnOiAxLCAnYXJ0aHVyJzogMSwgJ2JvYic6IDIsICdjaGFybGVzJzogMywgLi4ufSIpCisKKyAgICAgICAgIyBhcnJheS5hcnJheSBhZnRlciA1LgorICAgICAgICBlcShyKGFycmF5KCdpJykpLCAiYXJyYXkoJ2knLCBbXSkiKQorICAgICAgICBlcShyKGFycmF5KCdpJywgWzFdKSksICJhcnJheSgnaScsIFsxXSkiKQorICAgICAgICBlcShyKGFycmF5KCdpJywgWzEsIDJdKSksICJhcnJheSgnaScsIFsxLCAyXSkiKQorICAgICAgICBlcShyKGFycmF5KCdpJywgWzEsIDIsIDNdKSksICJhcnJheSgnaScsIFsxLCAyLCAzXSkiKQorICAgICAgICBlcShyKGFycmF5KCdpJywgWzEsIDIsIDMsIDRdKSksICJhcnJheSgnaScsIFsxLCAyLCAzLCA0XSkiKQorICAgICAgICBlcShyKGFycmF5KCdpJywgWzEsIDIsIDMsIDQsIDVdKSksICJhcnJheSgnaScsIFsxLCAyLCAzLCA0LCA1XSkiKQorICAgICAgICBlcShyKGFycmF5KCdpJywgWzEsIDIsIDMsIDQsIDUsIDZdKSksCisgICAgICAgICAgICAgICAgICAgImFycmF5KCdpJywgWzEsIDIsIDMsIDQsIDUsIC4uLl0pIikKKworICAgIGRlZiB0ZXN0X251bWJlcnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShyKDEyMyksIHJlcHIoMTIzKSkKKyAgICAgICAgZXEocigxMjNMKSwgcmVwcigxMjNMKSkKKyAgICAgICAgZXEocigxLjAvMyksIHJlcHIoMS4wLzMpKQorCisgICAgICAgIG4gPSAxMEwqKjEwMAorICAgICAgICBleHBlY3RlZCA9IHJlcHIobilbOjE4XSArICIuLi4iICsgcmVwcihuKVstMTk6XQorICAgICAgICBlcShyKG4pLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgaTEgPSBDbGFzc1dpdGhSZXByKCJhIikKKyAgICAgICAgZXEocihpMSksIHJlcHIoaTEpKQorCisgICAgICAgIGkyID0gQ2xhc3NXaXRoUmVwcigieCIqMTAwMCkKKyAgICAgICAgZXhwZWN0ZWQgPSByZXByKGkyKVs6MTNdICsgIi4uLiIgKyByZXByKGkyKVstMTQ6XQorICAgICAgICBlcShyKGkyKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgaTMgPSBDbGFzc1dpdGhGYWlsaW5nUmVwcigpCisgICAgICAgIGVxKHIoaTMpLCAoIjxDbGFzc1dpdGhGYWlsaW5nUmVwciBpbnN0YW5jZSBhdCAleD4iJWlkKGkzKSkpCisKKyAgICAgICAgcyA9IHIoQ2xhc3NXaXRoRmFpbGluZ1JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIjxjbGFzcyAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoIj4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZmluZCgiLi4uIikgPT0gOCkKKworICAgIGRlZiB0ZXN0X2ZpbGUoc2VsZik6CisgICAgICAgIGZwID0gb3Blbih1bml0dGVzdC5fX2ZpbGVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZnApLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAiPG9wZW4gZmlsZSAlciwgbW9kZSAncicgYXQgMHgiICUgdW5pdHRlc3QuX19maWxlX18pKQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGZwKS5zdGFydHN3aXRoKAorICAgICAgICAgICAgIjxjbG9zZWQgZmlsZSAlciwgbW9kZSAncicgYXQgMHgiICUgdW5pdHRlc3QuX19maWxlX18pKQorCisgICAgZGVmIHRlc3RfbGFtYmRhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihsYW1iZGEgeDogeCkuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICI8ZnVuY3Rpb24gPGxhbWJkYSIpKQorICAgICAgICAjIFhYWCBhbm9ueW1vdXMgZnVuY3Rpb25zPyAgc2VlIGZ1bmNfcmVwcgorCisgICAgZGVmIHRlc3RfYnVpbHRpbl9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgRnVuY3Rpb25zCisgICAgICAgIGVxKHJlcHIoaGFzaCksICc8YnVpbHQtaW4gZnVuY3Rpb24gaGFzaD4nKQorICAgICAgICAjIE1ldGhvZHMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoJycuc3BsaXQpLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAnPGJ1aWx0LWluIG1ldGhvZCBzcGxpdCBvZiBzdHIgb2JqZWN0IGF0IDB4JykpCisKKyAgICBkZWYgdGVzdF94cmFuZ2Uoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShyZXByKHhyYW5nZSgxKSksICd4cmFuZ2UoMSknKQorICAgICAgICBlcShyZXByKHhyYW5nZSgxLCAyKSksICd4cmFuZ2UoMSwgMiknKQorICAgICAgICBlcShyZXByKHhyYW5nZSgxLCAyLCAzKSksICd4cmFuZ2UoMSwgNCwgMyknKQorCisgICAgZGVmIHRlc3RfbmVzdGluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgZXZlcnl0aGluZyBpcyBtZWFudCB0byBnaXZlIHVwIGFmdGVyIDYgbGV2ZWxzLgorICAgICAgICBlcShyKFtbW1tbW1tdXV1dXV1dKSwgIltbW1tbW1tdXV1dXV1dIikKKyAgICAgICAgZXEocihbW1tbW1tbW11dXV1dXV1dKSwgIltbW1tbW1suLi5dXV1dXV1dIikKKworICAgICAgICBlcShyKG5lc3RlZFR1cGxlKDYpKSwgIigoKCgoKCgpLCksKSwpLCksKSwpIikKKyAgICAgICAgZXEocihuZXN0ZWRUdXBsZSg3KSksICIoKCgoKCgoLi4uKSwpLCksKSwpLCksKSIpCisKKyAgICAgICAgZXEocih7IG5lc3RlZFR1cGxlKDUpIDogbmVzdGVkVHVwbGUoNSkgfSksCisgICAgICAgICAgICJ7KCgoKCgoKSwpLCksKSwpLCk6ICgoKCgoKCksKSwpLCksKSwpfSIpCisgICAgICAgIGVxKHIoeyBuZXN0ZWRUdXBsZSg2KSA6IG5lc3RlZFR1cGxlKDYpIH0pLAorICAgICAgICAgICAieygoKCgoKC4uLiksKSwpLCksKSwpOiAoKCgoKCguLi4pLCksKSwpLCksKX0iKQorCisgICAgICAgIGVxKHIoW1tbW1tbe31dXV1dXV0pLCAiW1tbW1tbe31dXV1dXV0iKQorICAgICAgICBlcShyKFtbW1tbW1t7fV1dXV1dXV0pLCAiW1tbW1tbWy4uLl1dXV1dXV0iKQorCisgICAgZGVmIHRlc3RfYnVmZmVyKHNlbGYpOgorICAgICAgICAjIFhYWCBkb2Vzbid0IHRlc3QgYnVmZmVycyB3aXRoIG5vIGJfYmFzZSBvciByZWFkLXdyaXRlIGJ1ZmZlcnMgKHNlZQorICAgICAgICAjIGJ1ZmZlcm9iamVjdC5jKS4gIFRoZSB0ZXN0IGlzIGZhaXJseSBpbmNvbXBsZXRlIHRvby4gIFNpZ2guCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgeCA9IGJ1ZmZlcignZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoeCkuc3RhcnRzd2l0aCgnPHJlYWQtb25seSBidWZmZXIgZm9yIDB4JykpCisKKyAgICBkZWYgdGVzdF9jZWxsKHNlbGYpOgorICAgICAgICAjIFhYWCBIbW0/IEhvdyB0byBnZXQgYXQgYSBjZWxsIG9iamVjdD8KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZGVzY3JpcHRvcnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIG1ldGhvZCBkZXNjcmlwdG9ycworICAgICAgICBlcShyZXByKGRpY3QuaXRlbXMpLCAiPG1ldGhvZCAnaXRlbXMnIG9mICdkaWN0JyBvYmplY3RzPiIpCisgICAgICAgICMgWFhYIG1lbWJlciBkZXNjcmlwdG9ycworICAgICAgICAjIFhYWCBhdHRyaWJ1dGUgZGVzY3JpcHRvcnMKKyAgICAgICAgIyBYWFggc2xvdCBkZXNjcmlwdG9ycworICAgICAgICAjIHN0YXRpYyBhbmQgY2xhc3MgbWV0aG9kcworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIGZvbyhjbHMpOiBwYXNzCisgICAgICAgIHggPSBzdGF0aWNtZXRob2QoQy5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHgpLnN0YXJ0c3dpdGgoJzxzdGF0aWNtZXRob2Qgb2JqZWN0IGF0IDB4JykpCisgICAgICAgIHggPSBjbGFzc21ldGhvZChDLmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoeCkuc3RhcnRzd2l0aCgnPGNsYXNzbWV0aG9kIG9iamVjdCBhdCAweCcpKQorCisgICAgZGVmIHRlc3RfdW5zb3J0YWJsZShzZWxmKToKKyAgICAgICAgIyBSZXByLnJlcHIoKSB1c2VkIHRvIGNhbGwgc29ydGVkKCkgb24gc2V0cywgZnJvemVuc2V0cyBhbmQgZGljdHMKKyAgICAgICAgIyB3aXRob3V0IHRha2luZyBpbnRvIGFjY291bnQgdGhhdCBub3QgYWxsIG9iamVjdHMgYXJlIGNvbXBhcmFibGUKKyAgICAgICAgeCA9IHNldChbMWosIDJqLCAzal0pCisgICAgICAgIHkgPSBmcm96ZW5zZXQoeCkKKyAgICAgICAgeiA9IHsxajogMSwgMmo6IDJ9CisgICAgICAgIHIoeCkKKyAgICAgICAgcih5KQorICAgICAgICByKHopCisKK2RlZiB0b3VjaChwYXRoLCB0ZXh0PScnKToKKyAgICBmcCA9IG9wZW4ocGF0aCwgJ3cnKQorICAgIGZwLndyaXRlKHRleHQpCisgICAgZnAuY2xvc2UoKQorCitjbGFzcyBMb25nUmVwclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgbG9uZ25hbWUgPSAnYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uJworICAgICAgICBzZWxmLnBrZ25hbWUgPSBvcy5wYXRoLmpvaW4obG9uZ25hbWUpCisgICAgICAgIHNlbGYuc3VicGtnbmFtZSA9IG9zLnBhdGguam9pbihsb25nbmFtZSwgbG9uZ25hbWUpCisgICAgICAgICMgTWFrZSB0aGUgcGFja2FnZSBhbmQgc3VicGFja2FnZQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYucGtnbmFtZSwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgICAgICBvcy5ta2RpcihzZWxmLnBrZ25hbWUpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLnBrZ25hbWUsICdfX2luaXRfXycrb3MuZXh0c2VwKydweScpKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuc3VicGtnbmFtZSwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgICAgICBvcy5ta2RpcihzZWxmLnN1YnBrZ25hbWUpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLnN1YnBrZ25hbWUsICdfX2luaXRfXycrb3MuZXh0c2VwKydweScpKQorICAgICAgICAjIFJlbWVtYmVyIHdoZXJlIHdlIGFyZQorICAgICAgICBzZWxmLmhlcmUgPSBvcy5nZXRjd2QoKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgc2VsZi5oZXJlKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBhY3Rpb25zID0gW10KKyAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhzZWxmLnBrZ25hbWUpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZGlybmFtZXMgKyBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQob3MucGF0aC5qb2luKGRpcnBhdGgsIG5hbWUpKQorICAgICAgICBhY3Rpb25zLmFwcGVuZChzZWxmLnBrZ25hbWUpCisgICAgICAgIGFjdGlvbnMuc29ydCgpCisgICAgICAgIGFjdGlvbnMucmV2ZXJzZSgpCisgICAgICAgIGZvciBwIGluIGFjdGlvbnM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHApOgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKHApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwKQorICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLnN1YnBrZ25hbWUsIHNlbGYucGtnbmFtZSArIG9zLmV4dHNlcCArICdweScpKQorICAgICAgICBmcm9tIGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbi5hcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24gaW1wb3J0IGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbgorICAgICAgICBlcShyZXByKGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbiksCisgICAgICAgICAgICI8bW9kdWxlICclcycgZnJvbSAnJXMnPiIgJSAoYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uLl9fbmFtZV9fLCBhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24uX19maWxlX18pKQorICAgICAgICBlcShyZXByKHN5cyksICI8bW9kdWxlICdzeXMnIChidWlsdC1pbik+IikKKworICAgIGRlZiB0ZXN0X3R5cGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCAnZm9vJytvcy5leHRzZXArJ3B5JyksICcnJ1wKK2NsYXNzIGZvbyhvYmplY3QpOgorICAgIHBhc3MKKycnJykKKyAgICAgICAgZnJvbSBhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24uYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uIGltcG9ydCBmb28KKyAgICAgICAgZXEocmVwcihmb28uZm9vKSwKKyAgICAgICAgICAgICAgICI8Y2xhc3MgJyVzLmZvbyc+IiAlIGZvby5fX25hbWVfXykKKworICAgIGRlZiB0ZXN0X29iamVjdChzZWxmKToKKyAgICAgICAgIyBYWFggVGVzdCB0aGUgcmVwciBvZiBhIHR5cGUgd2l0aCBhIHJlYWxseSBsb25nIHRwX25hbWUgYnV0IHdpdGggbm8KKyAgICAgICAgIyB0cF9yZXByLiAgV0lCTkkgd2UgaGFkIDo6SW5saW5lPyA6KQorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9jbGFzcyhzZWxmKToKKyAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYuc3VicGtnbmFtZSwgJ2Jhcicrb3MuZXh0c2VwKydweScpLCAnJydcCitjbGFzcyBiYXI6CisgICAgcGFzcworJycnKQorICAgICAgICBmcm9tIGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbi5hcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24gaW1wb3J0IGJhcgorICAgICAgICAjIE1vZHVsZSBuYW1lIG1heSBiZSBwcmVmaXhlZCB3aXRoICJ0ZXN0LiIsIGRlcGVuZGluZyBvbiBob3cgcnVuLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihiYXIuYmFyKS5zdGFydHN3aXRoKAorICAgICAgICAgICAgIjxjbGFzcyAlcy5iYXIgYXQgMHgiICUgYmFyLl9fbmFtZV9fKSkKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlKHNlbGYpOgorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCAnYmF6Jytvcy5leHRzZXArJ3B5JyksICcnJ1wKK2NsYXNzIGJhejoKKyAgICBwYXNzCisnJycpCisgICAgICAgIGZyb20gYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uLmFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbiBpbXBvcnQgYmF6CisgICAgICAgIGliYXogPSBiYXouYmF6KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoaWJheikuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICI8JXMuYmF6IGluc3RhbmNlIGF0IDB4IiAlIGJhei5fX25hbWVfXykpCisKKyAgICBkZWYgdGVzdF9tZXRob2Qoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCAncXV4Jytvcy5leHRzZXArJ3B5JyksICcnJ1wKK2NsYXNzIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhOgorICAgIGRlZiBhbWV0aG9kKHNlbGYpOiBwYXNzCisnJycpCisgICAgICAgIGZyb20gYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uLmFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbiBpbXBvcnQgcXV4CisgICAgICAgICMgVW5ib3VuZCBtZXRob2RzIGZpcnN0CisgICAgICAgIGVxKHJlcHIocXV4LmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhLmFtZXRob2QpLAorICAgICAgICAnPHVuYm91bmQgbWV0aG9kIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhLmFtZXRob2Q+JykKKyAgICAgICAgIyBCb3VuZCBtZXRob2QgbmV4dAorICAgICAgICBpcXV4ID0gcXV4LmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoaXF1eC5hbWV0aG9kKS5zdGFydHN3aXRoKAorICAgICAgICAgICAgJzxib3VuZCBtZXRob2QgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEuYW1ldGhvZCBvZiA8JXMuYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgaW5zdGFuY2UgYXQgMHgnIFwKKyAgICAgICAgICAgICUgKHF1eC5fX25hbWVfXywpICkpCisKKyAgICBkZWYgdGVzdF9idWlsdGluX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICAjIFhYWCB0ZXN0IGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcyB3aXRoIHJlYWxseSBsb25nIG5hbWVzCisgICAgICAgIHBhc3MKKworY2xhc3MgQ2xhc3NXaXRoUmVwcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcyk6CisgICAgICAgIHNlbGYucyA9IHMKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ2xhc3NXaXRoTG9uZ1JlcHIoJXIpIiAlIHNlbGYucworCisKK2NsYXNzIENsYXNzV2l0aEZhaWxpbmdSZXByOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGlzIHNob3VsZCBiZSBjYXVnaHQgYnkgUmVwci5yZXByX2luc3RhbmNlIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFJlcHJUZXN0cykKKyAgICBydW5fdW5pdHRlc3QoTG9uZ1JlcHJUZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1YjI2YgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CkBAIC0wLDAgKzEsMTI3IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdGltZQorCityZXNvdXJjZSA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdyZXNvdXJjZScpCisKKyMgVGhpcyB0ZXN0IGlzIGNoZWNraW5nIGEgZmV3IHNwZWNpZmljIHByb2JsZW0gc3BvdHMgd2l0aCB0aGUgcmVzb3VyY2UgbW9kdWxlLgorCitjbGFzcyBSZXNvdXJjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXNvdXJjZS5nZXRybGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVzb3VyY2UuZ2V0cmxpbWl0LCA0MiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVzb3VyY2Uuc2V0cmxpbWl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlc291cmNlLnNldHJsaW1pdCwgNDIsIDQyLCA0MikKKworICAgIGRlZiB0ZXN0X2ZzaXplX2lzbWF4KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAoY3VyLCBtYXgpID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9GU0laRSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBSTElNSVRfRlNJWkUgc2hvdWxkIGJlIFJMSU1fSU5GSU5JVFksIHdoaWNoIHdpbGwgYmUgYSByZWFsbHkgYmlnCisgICAgICAgICAgICAjIG51bWJlciBvbiBhIHBsYXRmb3JtIHdpdGggbGFyZ2UgZmlsZSBzdXBwb3J0LiAgT24gdGhlc2UgcGxhdGZvcm1zLAorICAgICAgICAgICAgIyB3ZSBuZWVkIHRvIHRlc3QgdGhhdCB0aGUgZ2V0L3NldHJsaW1pdCBmdW5jdGlvbnMgcHJvcGVybHkgY29udmVydAorICAgICAgICAgICAgIyB0aGUgbnVtYmVyIHRvIGEgQyBsb25nIGxvbmcgYW5kIHRoYXQgdGhlIGNvbnZlcnNpb24gZG9lc24ndCByYWlzZQorICAgICAgICAgICAgIyBhbiBlcnJvci4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzb3VyY2UuUkxJTV9JTkZJTklUWSwgbWF4KQorICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9GU0laRSwgKGN1ciwgbWF4KSkKKworICAgIGRlZiB0ZXN0X2ZzaXplX2VuZm9yY2VkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAoY3VyLCBtYXgpID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9GU0laRSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBDaGVjayB0byBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIFJMSU1JVF9GU0laRSBpcyBzbWFsbC4gIFNvbWUKKyAgICAgICAgICAgICMgdmVyc2lvbnMgb2YgUHl0aG9uIHdlcmUgdGVybWluYXRlZCBieSBhbiB1bmNhdWdodCBTSUdYRlNaLCBidXQKKyAgICAgICAgICAgICMgcHl0aG9ucnVuLmMgaGFzIGJlZW4gZml4ZWQgdG8gaWdub3JlIHRoYXQgZXhjZXB0aW9uLiAgSWYgc28sIHRoZQorICAgICAgICAgICAgIyB3cml0ZSgpIHNob3VsZCByZXR1cm4gRUZCSUcgd2hlbiB0aGUgbGltaXQgaXMgZXhjZWVkZWQuCisKKyAgICAgICAgICAgICMgQXQgbGVhc3Qgb25lIHBsYXRmb3JtIGhhcyBhbiB1bmxpbWl0ZWQgUkxJTUlUX0ZTSVpFIGFuZCBhdHRlbXB0cworICAgICAgICAgICAgIyB0byBjaGFuZ2UgaXQgcmFpc2UgVmFsdWVFcnJvciBpbnN0ZWFkLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9GU0laRSwgKDEwMjQsIG1heCkpCisgICAgICAgICAgICAgICAgICAgIGxpbWl0X3NldCA9IFRydWUKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgbGltaXRfc2V0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiWCIgKiAxMDI0KQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJZIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBPbiBzb21lIHN5c3RlbXMgKGUuZy4sIFVidW50dSBvbiBocHBhKSB0aGUgZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBkb2Vzbid0IGFsd2F5cyBjYXVzZSB0aGUgZXhjZXB0aW9uLCBidXQgdGhlIGNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZG9lcyBldmVudHVhbGx5LiAgVHJ5IGZsdXNoaW5nIHNldmVyYWwgdGltZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgYW4gYXR0ZW1wdCB0byBlbnN1cmUgdGhlIGZpbGUgaXMgcmVhbGx5IHN5bmNlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGV4Y2VwdGlvbiByYWlzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKC4xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW1pdF9zZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgbGltaXRfc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBDbG9zZSB3aWxsIGF0dGVtcHQgdG8gZmx1c2ggdGhlIGJ5dGUgd2Ugd3JvdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVzdG9yZSBsaW1pdCBmaXJzdCB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfRlNJWkUsIChjdXIsIG1heCkpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIGxpbWl0X3NldDoKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9GU0laRSwgKGN1ciwgbWF4KSkKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9mc2l6ZV90b29iaWcoc2VsZik6CisgICAgICAgICMgQmUgc3VyZSB0aGF0IHNldHJsaW1pdCBpcyBjaGVja2luZyBmb3IgcmVhbGx5IGxhcmdlIHZhbHVlcworICAgICAgICB0b29fYmlnID0gMTBMKio1MAorICAgICAgICB0cnk6CisgICAgICAgICAgICAoY3VyLCBtYXgpID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9GU0laRSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfRlNJWkUsICh0b29fYmlnLCBtYXgpKQorICAgICAgICAgICAgZXhjZXB0IChPdmVyZmxvd0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9GU0laRSwgKG1heCwgdG9vX2JpZykpCisgICAgICAgICAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2dldHJ1c2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXNvdXJjZS5nZXRydXNhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVzb3VyY2UuZ2V0cnVzYWdlLCA0MiwgNDIpCisgICAgICAgIHVzYWdlc2VsZiA9IHJlc291cmNlLmdldHJ1c2FnZShyZXNvdXJjZS5SVVNBR0VfU0VMRikKKyAgICAgICAgdXNhZ2VjaGlsZHJlbiA9IHJlc291cmNlLmdldHJ1c2FnZShyZXNvdXJjZS5SVVNBR0VfQ0hJTERSRU4pCisgICAgICAgICMgTWF5IG5vdCBiZSBhdmFpbGFibGUgb24gYWxsIHN5c3RlbXMuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVzYWdlYm90aCA9IHJlc291cmNlLmdldHJ1c2FnZShyZXNvdXJjZS5SVVNBR0VfQk9USCkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAjIElzc3VlIDYwODM6IFJlZmVyZW5jZSBjb3VudGluZyBidWcKKyAgICBkZWYgdGVzdF9zZXRydXNhZ2VfcmVmY291bnQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxpbWl0cyA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ1BVKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbGFzcyBCYWRTZXF1ZW5jZToKKyAgICAgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5IGluICgwLCAxKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZW4odHVwbGUocmFuZ2UoMTAwMDAwMCkpKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ1BVLCBCYWRTZXF1ZW5jZSgpKQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChSZXNvdXJjZVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3JmYzgyMi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3JmYzgyMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGEwMjgwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmZjODIyLnB5CkBAIC0wLDAgKzEsMjU3IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK3JmYzgyMiA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCJyZmM4MjIiLCBkZXByZWNhdGVkPVRydWUpCisKK3RyeToKKyAgICBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCisKK2NsYXNzIE1lc3NhZ2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNyZWF0ZV9tZXNzYWdlKHNlbGYsIG1zZyk6CisgICAgICAgIHJldHVybiByZmM4MjIuTWVzc2FnZShTdHJpbmdJTyhtc2cpKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLmNyZWF0ZV9tZXNzYWdlKAorICAgICAgICAgICAgJ1RvOiAibGFzdCwgZmlyc3QiIDx1c2VyaWRAZm9vLm5ldD5cblxudGVzdFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5nZXQoInRvIikgPT0gJyJsYXN0LCBmaXJzdCIgPHVzZXJpZEBmb28ubmV0PicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuZ2V0KCJUTyIpID09ICcibGFzdCwgZmlyc3QiIDx1c2VyaWRAZm9vLm5ldD4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmdldCgiTm8tU3VjaC1IZWFkZXIiKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmdldCgiTm8tU3VjaC1IZWFkZXIiLCAiTm8tU3VjaC1WYWx1ZSIpCisgICAgICAgICAgICAgICAgICAgICA9PSAiTm8tU3VjaC1WYWx1ZSIpCisKKyAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLmNyZWF0ZV9tZXNzYWdlKAorICAgICAgICAgICAgJ1RvOiAibGFzdCwgZmlyc3QiIDx1c2VyaWRAZm9vLm5ldD5cblxudGVzdFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBtc2cuaGFzX2tleSgiTmV3LUhlYWRlciIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLnNldGRlZmF1bHQoIk5ldy1IZWFkZXIiLCAiTmV3LVZhbHVlIikgPT0gIk5ldy1WYWx1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuc2V0ZGVmYXVsdCgiTmV3LUhlYWRlciIsICJEaWZmZXJlbnQtVmFsdWUiKQorICAgICAgICAgICAgICAgICAgICAgPT0gIk5ldy1WYWx1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2dbIm5ldy1oZWFkZXIiXSA9PSAiTmV3LVZhbHVlIikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLnNldGRlZmF1bHQoIkFub3RoZXItSGVhZGVyIikgPT0gIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2dbImFub3RoZXItaGVhZGVyIl0gPT0gIiIpCisKKyAgICBkZWYgY2hlY2soc2VsZiwgbXNnLCByZXN1bHRzKToKKyAgICAgICAgIiIiQ2hlY2sgYWRkcmVzc2VzIGFuZCB0aGUgZGF0ZS4iIiIKKyAgICAgICAgbSA9IHNlbGYuY3JlYXRlX21lc3NhZ2UobXNnKQorICAgICAgICBpID0gMAorICAgICAgICBmb3IgbiwgYSBpbiBtLmdldGFkZHJsaXN0KCd0bycpICsgbS5nZXRhZGRybGlzdCgnY2MnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtbiwgbWEgPSByZXN1bHRzW2ldWzBdLCByZXN1bHRzW2ldWzFdCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBwcmludCAnZXh0cmEgcGFyc2VkIGFkZHJlc3M6JywgcmVwcihuKSwgcmVwcihhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW4sIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbi1leHBlY3RlZCBuYW1lOiAlciAhPSAlciIgJSAobW4sIG4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYSwgYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuLWV4cGVjdGVkIGFkZHJlc3M6ICVyICE9ICVyIiAlIChtYSwgYSkpCisgICAgICAgICAgICBpZiBtbiA9PSBuIGFuZCBtYSA9PSBhOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ25vdCBmb3VuZDonLCByZXByKG4pLCByZXByKGEpCisKKyAgICAgICAgb3V0ID0gbS5nZXRkYXRlKCdkYXRlJykKKyAgICAgICAgaWYgb3V0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTk5LCAxLCAxMywgMjMsIDU3LCAzNSwgMCwgMSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRlIGNvbnZlcnNpb24gZmFpbGVkIikKKworCisgICAgIyBOb3RlOiBhbGwgdGVzdCBjYXNlcyBtdXN0IGhhdmUgdGhlIHNhbWUgZGF0ZSAoaW4gdmFyaW91cyBmb3JtYXRzKSwKKyAgICAjIG9yIG5vIGRhdGUhCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdEYXRlOiAgICBXZWQsIDEzIEphbiAxOTk5IDIzOjU3OjM1IC0wNTAwXG4nCisgICAgICAgICAgICAnRnJvbTogICAgR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AQ05SSS5SZXN0b24uVkEuVVM+XG4nCisgICAgICAgICAgICAnVG86ICAgICAgIkd1aWRvIHZhblxuJworICAgICAgICAgICAgJ1x0IDogUm9zc3VtIiA8Z3VpZG9AcHl0aG9uLm9yZz5cbicKKyAgICAgICAgICAgICdTdWJqZWN0OiB0ZXN0MlxuJworICAgICAgICAgICAgJ1xuJworICAgICAgICAgICAgJ3Rlc3QyXG4nLAorICAgICAgICAgICAgWygnR3VpZG8gdmFuXG5cdCA6IFJvc3N1bScsICdndWlkb0BweXRob24ub3JnJyldKQorCisgICAgICAgIHNlbGYuY2hlY2soCisgICAgICAgICAgICAnRnJvbTogQmFycnkgPGJ3YXJzYXdAcHl0aG9uLm9yZ1xuJworICAgICAgICAgICAgJ1RvOiBndWlkb0BweXRob24ub3JnIChHdWlkbzogdGhlIEJhcmJhcmlhbilcbicKKyAgICAgICAgICAgICdTdWJqZWN0OiBub25zZW5zZVxuJworICAgICAgICAgICAgJ0RhdGU6IFdlZG5lc2RheSwgSmFudWFyeSAxMyAxOTk5IDIzOjU3OjM1IC0wNTAwXG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdCcsCisgICAgICAgICAgICBbKCdHdWlkbzogdGhlIEJhcmJhcmlhbicsICdndWlkb0BweXRob24ub3JnJyldKQorCisgICAgICAgIHNlbGYuY2hlY2soCisgICAgICAgICAgICAnRnJvbTogQmFycnkgPGJ3YXJzYXdAcHl0aG9uLm9yZ1xuJworICAgICAgICAgICAgJ1RvOiBndWlkb0BweXRob24ub3JnIChHdWlkbzogdGhlIEJhcmJhcmlhbilcbicKKyAgICAgICAgICAgICdDYzogIkd1aWRvOiB0aGUgTWFkbWFuIiA8Z3VpZG9AcHl0aG9uLm9yZz5cbicKKyAgICAgICAgICAgICdEYXRlOiAgMTMtSmFuLTE5OTkgMjM6NTc6MzUgRVNUXG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdCcsCisgICAgICAgICAgICBbKCdHdWlkbzogdGhlIEJhcmJhcmlhbicsICdndWlkb0BweXRob24ub3JnJyksCisgICAgICAgICAgICAgKCdHdWlkbzogdGhlIE1hZG1hbicsICdndWlkb0BweXRob24ub3JnJykKKyAgICAgICAgICAgICBdKQorCisgICAgICAgIHNlbGYuY2hlY2soCisgICAgICAgICAgICAnVG86ICJUaGUgbW9uc3RlciB3aXRoXG4nCisgICAgICAgICAgICAnICAgICB0aGUgdmVyeSBsb25nIG5hbWU6IEd1aWRvIiA8Z3VpZG9AcHl0aG9uLm9yZz5cbicKKyAgICAgICAgICAgICdEYXRlOiAgICBXZWQsIDEzIEphbiAxOTk5IDIzOjU3OjM1IC0wNTAwXG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdCcsCisgICAgICAgICAgICBbKCdUaGUgbW9uc3RlciB3aXRoXG4gICAgIHRoZSB2ZXJ5IGxvbmcgbmFtZTogR3VpZG8nLAorICAgICAgICAgICAgICAnZ3VpZG9AcHl0aG9uLm9yZycpXSkKKworICAgICAgICBzZWxmLmNoZWNrKAorICAgICAgICAgICAgJ1RvOiAiQW1pdCBKLiBQYXRlbCIgPGFtaXRwQFRoZW9yeS5TdGFuZm9yZC5FRFU+XG4nCisgICAgICAgICAgICAnQ0M6IE1pa2UgRmxldGNoZXIgPG1mbGV0Y2hAdnJ0ZWxlY29tLmNvbT4sXG4nCisgICAgICAgICAgICAnICAgICAgICAiXCdzdHJpbmctc2lnQHB5dGhvbi5vcmdcJyIgPHN0cmluZy1zaWdAcHl0aG9uLm9yZz5cbicKKyAgICAgICAgICAgICdDYzogZm9vekBiYXQuY29tLCBiYXJ0QHRvb2YuY29tXG4nCisgICAgICAgICAgICAnQ2M6IGdvaXRAbGlwLmNvbVxuJworICAgICAgICAgICAgJ0RhdGU6ICAgIFdlZCwgMTMgSmFuIDE5OTkgMjM6NTc6MzUgLTA1MDBcbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICd0ZXN0JywKKyAgICAgICAgICAgIFsoJ0FtaXQgSi4gUGF0ZWwnLCAnYW1pdHBAVGhlb3J5LlN0YW5mb3JkLkVEVScpLAorICAgICAgICAgICAgICgnTWlrZSBGbGV0Y2hlcicsICdtZmxldGNoQHZydGVsZWNvbS5jb20nKSwKKyAgICAgICAgICAgICAoIidzdHJpbmctc2lnQHB5dGhvbi5vcmcnIiwgJ3N0cmluZy1zaWdAcHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICgnJywgJ2Zvb3pAYmF0LmNvbScpLAorICAgICAgICAgICAgICgnJywgJ2JhcnRAdG9vZi5jb20nKSwKKyAgICAgICAgICAgICAoJycsICdnb2l0QGxpcC5jb20nKSwKKyAgICAgICAgICAgICBdKQorCisgICAgICAgIHNlbGYuY2hlY2soCisgICAgICAgICAgICAnVG86IFNvbWUgT25lIDxzb21lb25lQGRvbS5haW4+XG4nCisgICAgICAgICAgICAnRnJvbTogQW51ZGRlciBQZXJzaW4gPHN1YnVkZHkuZWxzZUBkb20uYWluPlxuJworICAgICAgICAgICAgJ0RhdGU6XG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdCcsCisgICAgICAgICAgICBbKCdTb21lIE9uZScsICdzb21lb25lQGRvbS5haW4nKV0pCisKKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdUbzogcGVyc29uQGRvbS5haW4gKFVzZXIgSi4gUGVyc29uKVxuXG4nLAorICAgICAgICAgICAgWygnVXNlciBKLiBQZXJzb24nLCAncGVyc29uQGRvbS5haW4nKV0pCisKKyAgICBkZWYgdGVzdF9kb3VibGVjb21tZW50KHNlbGYpOgorICAgICAgICAjIFRoZSBSRkMgYWxsb3dzIGNvbW1lbnRzIHdpdGhpbiBjb21tZW50cyBpbiBhbiBlbWFpbCBhZGRyCisgICAgICAgIHNlbGYuY2hlY2soCisgICAgICAgICAgICAnVG86IHBlcnNvbkBkb20uYWluICgoVXNlciBKLiBQZXJzb24pKSwgSm9obiBEb2UgPGZvb0BiYXIuY29tPlxuXG4nLAorICAgICAgICAgICAgWygnVXNlciBKLiBQZXJzb24nLCAncGVyc29uQGRvbS5haW4nKSwgKCdKb2huIERvZScsICdmb29AYmFyLmNvbScpXSkKKworICAgIGRlZiB0ZXN0X3R3aXN0ZWQoc2VsZik6CisgICAgICAgICMgVGhpcyBvbmUgaXMganVzdCB0d2lzdGVkLiAgSSBkb24ndCBrbm93IHdoYXQgdGhlIHByb3BlcgorICAgICAgICAjIHJlc3VsdCBzaG91bGQgYmUsIGJ1dCBpdCBzaG91bGRuJ3QgYmUgdG8gaW5mbG9vcCwgd2hpY2ggaXMKKyAgICAgICAgIyB3aGF0IHVzZWQgdG8gaGFwcGVuIQorICAgICAgICBzZWxmLmNoZWNrKAorICAgICAgICAgICAgJ1RvOiA8W3NtdHA6ZGQ0N0BtYWlsLnh4eC5lZHVdX2F0X2htaHFAaGRxLW1kbTEtaW1nb3V0LmNvbXBhbmF5LmNvbT5cbicKKyAgICAgICAgICAgICdEYXRlOiAgICBXZWQsIDEzIEphbiAxOTk5IDIzOjU3OjM1IC0wNTAwXG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdCcsCisgICAgICAgICAgICBbKCcnLCAnJyksCisgICAgICAgICAgICAgKCcnLCAnZGQ0N0BtYWlsLnh4eC5lZHUnKSwKKyAgICAgICAgICAgICAoJycsICdfYXRfaG1ocUBoZHEtbWRtMS1pbWdvdXQuY29tcGFuYXkuY29tJyksCisgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2NvbW1hc19pbl9mdWxsX25hbWUoc2VsZik6CisgICAgICAgICMgVGhpcyBleGVyY2lzZXMgdGhlIG9sZCBjb21tYXMtaW4tYS1mdWxsLW5hbWUgYnVnLCB3aGljaAorICAgICAgICAjIHNob3VsZCBiZSBkb2luZyB0aGUgcmlnaHQgdGhpbmcgaW4gcmVjZW50IHZlcnNpb25zIG9mIHRoZQorICAgICAgICAjIG1vZHVsZS4KKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdUbzogImxhc3QsIGZpcnN0IiA8dXNlcmlkQGZvby5uZXQ+XG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdCcsCisgICAgICAgICAgICBbKCdsYXN0LCBmaXJzdCcsICd1c2VyaWRAZm9vLm5ldCcpXSkKKworICAgIGRlZiB0ZXN0X3F1b3RlZF9uYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKAorICAgICAgICAgICAgJ1RvOiAoQ29tbWVudCBzdHVmZikgIlF1b3RlZCBuYW1lIkBzb21ld2hlcmUuY29tXG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdCcsCisgICAgICAgICAgICBbKCdDb21tZW50IHN0dWZmJywgJyJRdW90ZWQgbmFtZSJAc29tZXdoZXJlLmNvbScpXSkKKworICAgIGRlZiB0ZXN0X2JvZ3VzX3RvX2hlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdUbzogOlxuJworICAgICAgICAgICAgJ0NjOiBnb2l0QGxpcC5jb21cbicKKyAgICAgICAgICAgICdEYXRlOiAgICBXZWQsIDEzIEphbiAxOTk5IDIzOjU3OjM1IC0wNTAwXG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdCcsCisgICAgICAgICAgICBbKCcnLCAnZ29pdEBsaXAuY29tJyldKQorCisgICAgZGVmIHRlc3RfYWRkcl9pcHF1YWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soCisgICAgICAgICAgICAnVG86IGd1aWRvQFsxMzIuMTUxLjEuMjFdXG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAnZm9vJywKKyAgICAgICAgICAgIFsoJycsICdndWlkb0BbMTMyLjE1MS4xLjIxXScpXSkKKworICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgIG0gPSByZmM4MjIuTWVzc2FnZShTdHJpbmdJTygKKyAgICAgICAgICAgICdEYXRlOiAgICBXZWQsIDEzIEphbiAxOTk5IDIzOjU3OjM1IC0wNTAwXG4nCisgICAgICAgICAgICAnRnJvbTogICAgR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AQ05SSS5SZXN0b24uVkEuVVM+XG4nCisgICAgICAgICAgICAnVG86ICAgICAgIkd1aWRvIHZhblxuJworICAgICAgICAgICAgJ1x0IDogUm9zc3VtIiA8Z3VpZG9AcHl0aG9uLm9yZz5cbicKKyAgICAgICAgICAgICdTdWJqZWN0OiB0ZXN0MlxuJworICAgICAgICAgICAgJ1xuJworICAgICAgICAgICAgJ3Rlc3QyXG4nICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG0pLCBbJ2RhdGUnLCAnZnJvbScsICdzdWJqZWN0JywgJ3RvJ10pCisKKyAgICBkZWYgdGVzdF9yZmMyODIyX3BocmFzZXMoc2VsZik6CisgICAgICAgICMgUkZDIDI4MjIgKHRoZSB1cGRhdGUgdG8gUkZDIDgyMikgc3BlY2lmaWVzIHRoYXQgZG90cyBpbiBwaHJhc2VzIGFyZQorICAgICAgICAjIG9ic29sZXRlIHN5bnRheCwgd2hpY2ggY29uZm9ybWluZyBwcm9ncmFtcyBNVVNUIHJlY29nbml6ZSBidXQgTkVWRVIKKyAgICAgICAgIyBnZW5lcmF0ZSAoc2VlICQ0LjEgTWlzY2VsbGFuZW91cyBvYnNvbGV0ZSB0b2tlbnMpLiAgVGhpcyBpcyBhCisgICAgICAgICMgZGVwYXJ0dXJlIGZyb20gUkZDIDgyMiB3aGljaCBkaWQgbm90IGFsbG93IGRvdHMgaW4gbm9uLXF1b3RlZAorICAgICAgICAjIHBocmFzZXMuCisgICAgICAgIHNlbGYuY2hlY2soJ1RvOiBVc2VyIEouIFBlcnNvbiA8cGVyc29uQGRvbS5haW4+XG5cbicsCisgICAgICAgICAgICAgICAgICAgWygnVXNlciBKLiBQZXJzb24nLCAncGVyc29uQGRvbS5haW4nKV0pCisKKyAgICAjIFRoaXMgdGFrZXMgdG9vIGxvbmcgdG8gYWRkIHRvIHRoZSB0ZXN0IHN1aXRlCisjIyAgICBkZWYgdGVzdF9hbl9leGNydXRpYXRpbmdseV9sb25nX2FkZHJlc3NfZmllbGQoc2VsZik6CisjIyAgICAgICAgT0JTQ0VORUxZX0xPTkdfSEVBREVSX01VTFRJUExJRVIgPSAxMDAwMAorIyMgICAgICAgIG9uZWFkZHIgPSAoJ1BlcnNvbicgKiAxMCkgKyAnQCcgKyAoJy4nLmpvaW4oWydkb20nXSoxMCkpICsgJy5jb20nCisjIyAgICAgICAgYWRkciA9ICcsICcuam9pbihbb25lYWRkcl0gKiBPQlNDRU5FTFlfTE9OR19IRUFERVJfTVVMVElQTElFUikKKyMjICAgICAgICBsc3QgPSByZmM4MjIuQWRkcmxpc3RDbGFzcyhhZGRyKS5nZXRhZGRybGlzdCgpCisjIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgT0JTQ0VORUxZX0xPTkdfSEVBREVSX01VTFRJUExJRVIpCisKKyAgICBkZWYgdGVzdF8yZ2V0YWRkcmxpc3Qoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLmNyZWF0ZV9tZXNzYWdlKCIiIlwKK1RvOiBhcGVyc29uQGRvbS5haW4KK0NjOiBicGVyc29uQGRvbS5haW4KK0NjOiBjcGVyc29uQGRvbS5haW4KK0NjOiBkcGVyc29uQGRvbS5haW4KKworQSB0ZXN0IG1lc3NhZ2UuCisiIiIpCisgICAgICAgIGNjcyA9IFsoJycsIGEpIGZvciBhIGluCisgICAgICAgICAgICAgICBbJ2JwZXJzb25AZG9tLmFpbicsICdjcGVyc29uQGRvbS5haW4nLCAnZHBlcnNvbkBkb20uYWluJ11dCisgICAgICAgIGFkZHJzID0gbXNnLmdldGFkZHJsaXN0KCdjYycpCisgICAgICAgIGFkZHJzLnNvcnQoKQorICAgICAgICBlcShhZGRycywgY2NzKQorICAgICAgICAjIFRyeSBhZ2FpbiwgdGhpcyBvbmUgdXNlZCB0byBmYWlsCisgICAgICAgIGFkZHJzID0gbXNnLmdldGFkZHJsaXN0KCdjYycpCisgICAgICAgIGFkZHJzLnNvcnQoKQorICAgICAgICBlcShhZGRycywgY2NzKQorCisgICAgZGVmIHRlc3RfcGFyc2VhZGRyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEocmZjODIyLnBhcnNlYWRkcignPD4nKSwgKCcnLCAnJykpCisgICAgICAgIGVxKHJmYzgyMi5wYXJzZWFkZHIoJ2FwZXJzb25AZG9tLmFpbicpLCAoJycsICdhcGVyc29uQGRvbS5haW4nKSkKKyAgICAgICAgZXEocmZjODIyLnBhcnNlYWRkcignYnBlcnNvbkBkb20uYWluIChCZWEgQS4gUGVyc29uKScpLAorICAgICAgICAgICAoJ0JlYSBBLiBQZXJzb24nLCAnYnBlcnNvbkBkb20uYWluJykpCisgICAgICAgIGVxKHJmYzgyMi5wYXJzZWFkZHIoJ0N5bnRoaWEgUGVyc29uIDxjcGVyc29uQGRvbS5haW4+JyksCisgICAgICAgICAgICgnQ3ludGhpYSBQZXJzb24nLCAnY3BlcnNvbkBkb20uYWluJykpCisKKyAgICBkZWYgdGVzdF9xdW90ZV91bnF1b3RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEocmZjODIyLnF1b3RlKCdmb29cXHdhY2t5Im5hbWUnKSwgJ2Zvb1xcXFx3YWNreVxcIm5hbWUnKQorICAgICAgICBlcShyZmM4MjIudW5xdW90ZSgnImZvb1xcXFx3YWNreVxcIm5hbWUiJyksICdmb29cXHdhY2t5Im5hbWUnKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE1lc3NhZ2VUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9yaWNoY21wLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmljaGNtcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZhMGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcmljaGNtcC5weQpAQCAtMCwwICsxLDMzOCBAQAorIyBUZXN0cyBmb3IgcmljaCBjb21wYXJpc29ucworCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCBvcGVyYXRvcgorCitjbGFzcyBOdW1iZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgIHNlbGYueCA9IHgKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi54IDwgb3RoZXIKKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi54IDw9IG90aGVyCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYueCA9PSBvdGhlcgorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLnggIT0gb3RoZXIKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi54ID4gb3RoZXIKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi54ID49IG90aGVyCisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkLCAiTnVtYmVyLl9fY21wX18oKSBzaG91bGQgbm90IGJlIGNhbGxlZCIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJOdW1iZXIoJXIpIiAlIChzZWxmLngsICkKKworY2xhc3MgVmVjdG9yOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGFbaV0KKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpLCB2KToKKyAgICAgICAgc2VsZi5kYXRhW2ldID0gdgorCisgICAgX19oYXNoX18gPSBOb25lICMgVmVjdG9ycyBjYW5ub3QgYmUgaGFzaGVkCisKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIlZlY3RvcnMgY2Fubm90IGJlIHVzZWQgaW4gQm9vbGVhbiBjb250ZXh0cyIKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsICJWZWN0b3IuX19jbXBfXygpIHNob3VsZCBub3QgYmUgY2FsbGVkIgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlZlY3RvciglcikiICUgKHNlbGYuZGF0YSwgKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBWZWN0b3IoW2EgPCBiIGZvciBhLCBiIGluIHppcChzZWxmLmRhdGEsIHNlbGYuX19jYXN0KG90aGVyKSldKQorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBWZWN0b3IoW2EgPD0gYiBmb3IgYSwgYiBpbiB6aXAoc2VsZi5kYXRhLCBzZWxmLl9fY2FzdChvdGhlcikpXSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gVmVjdG9yKFthID09IGIgZm9yIGEsIGIgaW4gemlwKHNlbGYuZGF0YSwgc2VsZi5fX2Nhc3Qob3RoZXIpKV0pCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIFZlY3RvcihbYSAhPSBiIGZvciBhLCBiIGluIHppcChzZWxmLmRhdGEsIHNlbGYuX19jYXN0KG90aGVyKSldKQorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBWZWN0b3IoW2EgPiBiIGZvciBhLCBiIGluIHppcChzZWxmLmRhdGEsIHNlbGYuX19jYXN0KG90aGVyKSldKQorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBWZWN0b3IoW2EgPj0gYiBmb3IgYSwgYiBpbiB6aXAoc2VsZi5kYXRhLCBzZWxmLl9fY2FzdChvdGhlcikpXSkKKworICAgIGRlZiBfX2Nhc3Qoc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBWZWN0b3IpOgorICAgICAgICAgICAgb3RoZXIgPSBvdGhlci5kYXRhCisgICAgICAgIGlmIGxlbihzZWxmLmRhdGEpICE9IGxlbihvdGhlcik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbXBhcmUgdmVjdG9ycyBvZiBkaWZmZXJlbnQgbGVuZ3RoIgorICAgICAgICByZXR1cm4gb3RoZXIKKworb3BtYXAgPSB7CisgICAgImx0IjogKGxhbWJkYSBhLGI6IGE8IGIsIG9wZXJhdG9yLmx0LCBvcGVyYXRvci5fX2x0X18pLAorICAgICJsZSI6IChsYW1iZGEgYSxiOiBhPD1iLCBvcGVyYXRvci5sZSwgb3BlcmF0b3IuX19sZV9fKSwKKyAgICAiZXEiOiAobGFtYmRhIGEsYjogYT09Yiwgb3BlcmF0b3IuZXEsIG9wZXJhdG9yLl9fZXFfXyksCisgICAgIm5lIjogKGxhbWJkYSBhLGI6IGEhPWIsIG9wZXJhdG9yLm5lLCBvcGVyYXRvci5fX25lX18pLAorICAgICJndCI6IChsYW1iZGEgYSxiOiBhPiBiLCBvcGVyYXRvci5ndCwgb3BlcmF0b3IuX19ndF9fKSwKKyAgICAiZ2UiOiAobGFtYmRhIGEsYjogYT49Yiwgb3BlcmF0b3IuZ2UsIG9wZXJhdG9yLl9fZ2VfXykKK30KKworY2xhc3MgVmVjdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tmYWlsKHNlbGYsIGVycm9yLCBvcG5hbWUsICphcmdzKToKKyAgICAgICAgZm9yIG9wIGluIG9wbWFwW29wbmFtZV06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgb3AsICphcmdzKQorCisgICAgZGVmIGNoZWNrZXF1YWwoc2VsZiwgb3BuYW1lLCBhLCBiLCBleHByZXMpOgorICAgICAgICBmb3Igb3AgaW4gb3BtYXBbb3BuYW1lXToKKyAgICAgICAgICAgIHJlYWxyZXMgPSBvcChhLCBiKQorICAgICAgICAgICAgIyBjYW4ndCB1c2UgYXNzZXJ0RXF1YWwocmVhbHJlcywgZXhwcmVzKSBoZXJlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWFscmVzKSwgbGVuKGV4cHJlcykpCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHJlYWxyZXMpKToKKyAgICAgICAgICAgICAgICAjIHJlc3VsdHMgYXJlIGJvb2wsIHNvIHdlIGNhbiB1c2UgImlzIiBoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlYWxyZXNbaV0gaXMgZXhwcmVzW2ldKQorCisgICAgZGVmIHRlc3RfbWl4ZWQoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBjb21wYXJpc29ucyBpbnZvbHZpbmcgVmVjdG9yIG9iamVjdHMKKyAgICAgICAgIyB3aGljaCByZXR1cm4gcmljaCByZXN1bHRzIChpLmUuIFZlY3RvcnMgd2l0aCBpdGVtd2lzZQorICAgICAgICAjIGNvbXBhcmlzb24gcmVzdWx0cykgd29yaworICAgICAgICBhID0gVmVjdG9yKHJhbmdlKDIpKQorICAgICAgICBiID0gVmVjdG9yKHJhbmdlKDMpKQorICAgICAgICAjIGFsbCBjb21wYXJpc29ucyBzaG91bGQgZmFpbCBmb3IgZGlmZmVyZW50IGxlbmd0aAorICAgICAgICBmb3Igb3BuYW1lIGluIG9wbWFwOgorICAgICAgICAgICAgc2VsZi5jaGVja2ZhaWwoVmFsdWVFcnJvciwgb3BuYW1lLCBhLCBiKQorCisgICAgICAgIGEgPSByYW5nZSg1KQorICAgICAgICBiID0gNSAqIFsyXQorICAgICAgICAjIHRyeSBtaXhlZCBhcmd1bWVudHMgKGJ1dCBub3QgKGEsIGIpIGFzIHRoYXQgd29uJ3QgcmV0dXJuIGEgYm9vbCB2ZWN0b3IpCisgICAgICAgIGFyZ3MgPSBbKGEsIFZlY3RvcihiKSksIChWZWN0b3IoYSksIGIpLCAoVmVjdG9yKGEpLCBWZWN0b3IoYikpXQorICAgICAgICBmb3IgKGEsIGIpIGluIGFyZ3M6CisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoImx0IiwgYSwgYiwgW1RydWUsICBUcnVlLCAgRmFsc2UsIEZhbHNlLCBGYWxzZV0pCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoImxlIiwgYSwgYiwgW1RydWUsICBUcnVlLCAgVHJ1ZSwgIEZhbHNlLCBGYWxzZV0pCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoImVxIiwgYSwgYiwgW0ZhbHNlLCBGYWxzZSwgVHJ1ZSwgIEZhbHNlLCBGYWxzZV0pCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoIm5lIiwgYSwgYiwgW1RydWUsICBUcnVlLCAgRmFsc2UsIFRydWUsICBUcnVlIF0pCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoImd0IiwgYSwgYiwgW0ZhbHNlLCBGYWxzZSwgRmFsc2UsIFRydWUsICBUcnVlIF0pCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoImdlIiwgYSwgYiwgW0ZhbHNlLCBGYWxzZSwgVHJ1ZSwgIFRydWUsICBUcnVlIF0pCisKKyAgICAgICAgICAgIGZvciBvcHMgaW4gb3BtYXAuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBvcHM6CisgICAgICAgICAgICAgICAgICAgICMgY2FsbHMgX19ub256ZXJvX18sIHdoaWNoIHNob3VsZCBmYWlsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYm9vbCwgb3AoYSwgYikpCisKK2NsYXNzIE51bWJlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBjb21wYXJpc29ucyBpbnZvbHZpbmcgTnVtYmVyIG9iamVjdHMKKyAgICAgICAgIyBnaXZlIHRoZSBzYW1lIHJlc3VsdHMgZ2l2ZSBhcyBjb21wYXJpbmcgdGhlCisgICAgICAgICMgY29ycmVzcG9uZGluZyBpbnRzCisgICAgICAgIGZvciBhIGluIHhyYW5nZSgzKToKKyAgICAgICAgICAgIGZvciBiIGluIHhyYW5nZSgzKToKKyAgICAgICAgICAgICAgICBmb3IgdHlwZWEgaW4gKGludCwgTnVtYmVyKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHR5cGViIGluIChpbnQsIE51bWJlcik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0eXBlYT09dHlwZWI9PWludDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAjIHRoZSBjb21iaW5hdGlvbiBpbnQsIGludCBpcyB1c2VsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICB0YSA9IHR5cGVhKGEpCisgICAgICAgICAgICAgICAgICAgICAgICB0YiA9IHR5cGViKGIpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3Igb3BzIGluIG9wbWFwLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igb3AgaW4gb3BzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsb3V0Y29tZSA9IG9wKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RvdXRjb21lID0gb3AodGEsIHRiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxvdXRjb21lLCB0ZXN0b3V0Y29tZSkKKworICAgIGRlZiBjaGVja3ZhbHVlKHNlbGYsIG9wbmFtZSwgYSwgYiwgZXhwcmVzKToKKyAgICAgICAgZm9yIHR5cGVhIGluIChpbnQsIE51bWJlcik6CisgICAgICAgICAgICBmb3IgdHlwZWIgaW4gKGludCwgTnVtYmVyKToKKyAgICAgICAgICAgICAgICB0YSA9IHR5cGVhKGEpCisgICAgICAgICAgICAgICAgdGIgPSB0eXBlYihiKQorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBvcG1hcFtvcG5hbWVdOgorICAgICAgICAgICAgICAgICAgICByZWFscmVzID0gb3AodGEsIHRiKQorICAgICAgICAgICAgICAgICAgICByZWFscmVzID0gZ2V0YXR0cihyZWFscmVzLCAieCIsIHJlYWxyZXMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWFscmVzIGlzIGV4cHJlcykKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBjaGVjayBhbGwgb3BlcmF0b3JzIGFuZCBhbGwgY29tcGFyaXNvbiByZXN1bHRzCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgibHQiLCAwLCAwLCBGYWxzZSkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJsZSIsIDAsIDAsIFRydWUgKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImVxIiwgMCwgMCwgVHJ1ZSApCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgibmUiLCAwLCAwLCBGYWxzZSkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJndCIsIDAsIDAsIEZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImdlIiwgMCwgMCwgVHJ1ZSApCisKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJsdCIsIDAsIDEsIFRydWUgKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImxlIiwgMCwgMSwgVHJ1ZSApCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgiZXEiLCAwLCAxLCBGYWxzZSkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJuZSIsIDAsIDEsIFRydWUgKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImd0IiwgMCwgMSwgRmFsc2UpCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgiZ2UiLCAwLCAxLCBGYWxzZSkKKworICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImx0IiwgMSwgMCwgRmFsc2UpCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgibGUiLCAxLCAwLCBGYWxzZSkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJlcSIsIDEsIDAsIEZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoIm5lIiwgMSwgMCwgVHJ1ZSApCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgiZ3QiLCAxLCAwLCBUcnVlICkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJnZSIsIDEsIDAsIFRydWUgKQorCitjbGFzcyBNaXNjVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9taXNiZWhhdmluKHNlbGYpOgorICAgICAgICBjbGFzcyBNaXNiOgorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmXywgb3RoZXIpOiByZXR1cm4gMAorICAgICAgICAgICAgZGVmIF9fZ3RfXyhzZWxmXywgb3RoZXIpOiByZXR1cm4gMAorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmXywgb3RoZXIpOiByZXR1cm4gMAorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmXywgb3RoZXIpOiBzZWxmLmZhaWwoIlRoaXMgc2hvdWxkbid0IGhhcHBlbiIpCisgICAgICAgICAgICBkZWYgX19nZV9fKHNlbGZfLCBvdGhlcik6IHNlbGYuZmFpbCgiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIikKKyAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZl8sIG90aGVyKTogc2VsZi5mYWlsKCJUaGlzIHNob3VsZG4ndCBoYXBwZW4iKQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZl8sIG90aGVyKTogcmFpc2UgUnVudGltZUVycm9yLCAiZXhwZWN0ZWQiCisgICAgICAgIGEgPSBNaXNiKCkKKyAgICAgICAgYiA9IE1pc2IoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGE8YiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhPT1iLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGE+YiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjbXAsIGEsIGIpCisKKyAgICBkZWYgdGVzdF9ub3Qoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBleGNlcHRpb25zIGluIF9fbm9uemVyb19fIGFyZSBwcm9wZXJseQorICAgICAgICAjIHByb3BhZ2F0ZWQgYnkgdGhlIG5vdCBvcGVyYXRvcgorICAgICAgICBpbXBvcnQgb3BlcmF0b3IKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEJhZDoKKyAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMKKworICAgICAgICBkZWYgZG8oYmFkKToKKyAgICAgICAgICAgIG5vdCBiYWQKKworICAgICAgICBmb3IgZnVuYyBpbiAoZG8sIG9wZXJhdG9yLm5vdF8pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBmdW5jLCBCYWQoKSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGNvbXBhcmlzb24gZm9yIHJlY3Vyc2l2ZSBvYmplY3RzIGZhaWxzIGdyYWNlZnVsbHkKKyAgICAgICAgZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKKyAgICAgICAgYSA9IFVzZXJMaXN0KCkKKyAgICAgICAgYiA9IFVzZXJMaXN0KCkKKyAgICAgICAgYS5hcHBlbmQoYikKKyAgICAgICAgYi5hcHBlbmQoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5lcSwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5uZSwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5sdCwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5sZSwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5ndCwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5nZSwgYSwgYikKKworICAgICAgICBiLmFwcGVuZCgxNykKKyAgICAgICAgIyBFdmVuIHJlY3Vyc2l2ZSBsaXN0cyBvZiBkaWZmZXJlbnQgbGVuZ3RocyBhcmUgZGlmZmVyZW50LAorICAgICAgICAjIGJ1dCB0aGV5IGNhbm5vdCBiZSBvcmRlcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKGEgPT0gYikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICE9IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IubHQsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IubGUsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IuZ3QsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IuZ2UsIGEsIGIpCisgICAgICAgIGEuYXBwZW5kKDE3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLmVxLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLm5lLCBhLCBiKQorICAgICAgICBhLmluc2VydCgwLCAxMSkKKyAgICAgICAgYi5pbnNlcnQoMCwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKGEgPT0gYikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICE9IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIDwgYikKKworY2xhc3MgRGljdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGljdHMoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgX19lcV9fIGFuZCBfX25lX18gd29yayBmb3IgZGljdHMgZXZlbiBpZiB0aGUga2V5cyBhbmQKKyAgICAgICAgIyB2YWx1ZXMgZG9uJ3Qgc3VwcG9ydCBhbnl0aGluZyBvdGhlciB0aGFuIF9fZXFfXyBhbmQgX19uZV9fIChhbmQKKyAgICAgICAgIyBfX2hhc2hfXykuICBDb21wbGV4IG51bWJlcnMgYXJlIGEgZmluZSBleGFtcGxlIG9mIHRoYXQuCisgICAgICAgIGltcG9ydCByYW5kb20KKyAgICAgICAgaW1hZzFhID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNTApOgorICAgICAgICAgICAgaW1hZzFhW3JhbmRvbS5yYW5kcmFuZ2UoMTAwKSoxal0gPSByYW5kb20ucmFuZHJhbmdlKDEwMCkqMWoKKyAgICAgICAgaXRlbXMgPSBpbWFnMWEuaXRlbXMoKQorICAgICAgICByYW5kb20uc2h1ZmZsZShpdGVtcykKKyAgICAgICAgaW1hZzFiID0ge30KKyAgICAgICAgZm9yIGssIHYgaW4gaXRlbXM6CisgICAgICAgICAgICBpbWFnMWJba10gPSB2CisgICAgICAgIGltYWcyID0gaW1hZzFiLmNvcHkoKQorICAgICAgICBpbWFnMltrXSA9IHYgKyAxLjAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGltYWcxYSA9PSBpbWFnMWEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbWFnMWEgPT0gaW1hZzFiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW1hZzIgPT0gaW1hZzIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbWFnMWEgIT0gaW1hZzIpCisgICAgICAgIGZvciBvcG5hbWUgaW4gKCJsdCIsICJsZSIsICJndCIsICJnZSIpOgorICAgICAgICAgICAgZm9yIG9wIGluIG9wbWFwW29wbmFtZV06CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgaW1hZzFhLCBpbWFnMikKKworY2xhc3MgTGlzdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY292ZXJhZ2Uoc2VsZik6CisgICAgICAgICMgZXhlcmNpc2UgYWxsIGNvbXBhcmlzb25zIGZvciBsaXN0cworICAgICAgICB4ID0gWzQyXQorICAgICAgICBzZWxmLmFzc2VydElzKHg8eCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeDw9eCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4PT14LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHghPXgsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHg+eCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeD49eCwgVHJ1ZSkKKyAgICAgICAgeSA9IFs0MiwgNDJdCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeDx5LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHg8PXksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeD09eSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeCE9eSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4PnksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHg+PXksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYmFkZW50cnkoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgZXhjZXB0aW9ucyBmb3IgaXRlbSBjb21wYXJpc29uIGFyZSBwcm9wZXJseQorICAgICAgICAjIHByb3BhZ2F0ZWQgaW4gbGlzdCBjb21wYXJpc29ucworICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQmFkOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjCisKKyAgICAgICAgeCA9IFtCYWQoKV0KKyAgICAgICAgeSA9IFtCYWQoKV0KKworICAgICAgICBmb3Igb3AgaW4gb3BtYXBbImVxIl06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIG9wLCB4LCB5KQorCisgICAgZGVmIHRlc3RfZ29vZGVudHJ5KHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCBleGVyY2lzZXMgdGhlIGZpbmFsIGNhbGwgdG8gUHlPYmplY3RfUmljaENvbXBhcmUoKQorICAgICAgICAjIGluIE9iamVjdHMvbGlzdG9iamVjdC5jOjpsaXN0X3JpY2hjb21wYXJlKCkKKyAgICAgICAgY2xhc3MgR29vZDoKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgeCA9IFtHb29kKCldCisgICAgICAgIHkgPSBbR29vZCgpXQorCisgICAgICAgIGZvciBvcCBpbiBvcG1hcFsibHQiXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3AoeCwgeSksIFRydWUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFZlY3RvclRlc3QsIE51bWJlclRlc3QsIE1pc2NUZXN0LCBMaXN0VGVzdCkKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCgiZGljdCBpbmVxdWFsaXR5IGNvbXBhcmlzb25zICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3Qgc3VwcG9ydGVkIGluIDMueCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChEaWN0VGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ybGNvbXBsZXRlci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMGU3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9ybGNvbXBsZXRlci5weQpAQCAtMCwwICsxLDczIEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBfX2J1aWx0aW5fXyBhcyBidWlsdGlucworaW1wb3J0IHJsY29tcGxldGVyCisKK2NsYXNzIENvbXBsZXRlTWUob2JqZWN0KToKKyAgICAiIiIgVHJpdmlhbCBjbGFzcyB1c2VkIGluIHRlc3Rpbmcgcmxjb21wbGV0ZXIuQ29tcGxldGVyLiAiIiIKKyAgICBzcGFtID0gMQorCisKK2NsYXNzIFRlc3RSbGNvbXBsZXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnN0ZGNvbXBsZXRlciA9IHJsY29tcGxldGVyLkNvbXBsZXRlcigpCisgICAgICAgIHNlbGYuY29tcGxldGVyID0gcmxjb21wbGV0ZXIuQ29tcGxldGVyKGRpY3Qoc3BhbT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWdnPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0ZU1lPUNvbXBsZXRlTWUpKQorCisgICAgICAgICMgZm9yY2VzIHN0ZGNvbXBsZXRlciB0byBiaW5kIGJ1aWx0aW5zIG5hbWVzcGFjZQorICAgICAgICBzZWxmLnN0ZGNvbXBsZXRlci5jb21wbGV0ZSgnJywgMCkKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZShzZWxmKToKKyAgICAgICAgY2xhc3MgQShkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQihsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zdGRjb21wbGV0ZXIudXNlX21haW5fbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5jb21wbGV0ZXIudXNlX21haW5fbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocmxjb21wbGV0ZXIuQ29tcGxldGVyKEEoKSkudXNlX21haW5fbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmxjb21wbGV0ZXIuQ29tcGxldGVyLCBCKCgxLCkpKQorCisgICAgZGVmIHRlc3RfZ2xvYmFsX21hdGNoZXMoc2VsZik6CisgICAgICAgICMgdGVzdCB3aXRoIGJ1aWx0aW5zIG5hbWVzcGFjZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZWxmLnN0ZGNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnZGknKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW3grJygnIGZvciB4IGluIGRpcihidWlsdGlucykgaWYgeC5zdGFydHN3aXRoKCdkaScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2VsZi5zdGRjb21wbGV0ZXIuZ2xvYmFsX21hdGNoZXMoJ3N0JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt4KycoJyBmb3IgeCBpbiBkaXIoYnVpbHRpbnMpIGlmIHguc3RhcnRzd2l0aCgnc3QnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGRjb21wbGV0ZXIuZ2xvYmFsX21hdGNoZXMoJ2FrYWtzYWphZGhhaycpLCBbXSkKKworICAgICAgICAjIHRlc3Qgd2l0aCBhIGN1c3RvbWl6ZWQgbmFtZXNwYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21wbGV0ZXIuZ2xvYmFsX21hdGNoZXMoJ0NvbXBsZXRlTScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnQ29tcGxldGVNZSgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnZWcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2VnZygnXSkKKyAgICAgICAgIyBYWFg6IHNlZSBpc3N1ZTUyNTYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnQ29tcGxldGVNJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydDb21wbGV0ZU1lKCddKQorCisgICAgZGVmIHRlc3RfYXR0cl9tYXRjaGVzKHNlbGYpOgorICAgICAgICAjIHRlc3Qgd2l0aCBidWlsdGlucyBuYW1lc3BhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0ZGNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ3N0ci5zJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdHIue30oJy5mb3JtYXQoeCkgZm9yIHggaW4gZGlyKHN0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeC5zdGFydHN3aXRoKCdzJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RkY29tcGxldGVyLmF0dHJfbWF0Y2hlcygndHVwbGUuZm9vc3BhbWVnZycpLCBbXSkKKworICAgICAgICAjIHRlc3Qgd2l0aCBhIGN1c3RvbWl6ZWQgbmFtZXNwYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21wbGV0ZXIuYXR0cl9tYXRjaGVzKCdDb21wbGV0ZU1lLnNwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydDb21wbGV0ZU1lLnNwYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ0NvbXBsZXRlbWUuZWdnJyksIFtdKQorCisgICAgICAgIENvbXBsZXRlTWUubWUgPSBDb21wbGV0ZU1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21wbGV0ZXIuYXR0cl9tYXRjaGVzKCdDb21wbGV0ZU1lLm1lLm1lLnNwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydDb21wbGV0ZU1lLm1lLm1lLnNwYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ2VnZy5zJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydlZ2cue30oJy5mb3JtYXQoeCkgZm9yIHggaW4gZGlyKHN0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeC5zdGFydHN3aXRoKCdzJyldKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFJsY29tcGxldGVyKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfcm9ib3RwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkNGE0NgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5CkBAIC0wLDAgKzEsMjc2IEBACitpbXBvcnQgdW5pdHRlc3QsIFN0cmluZ0lPLCByb2JvdHBhcnNlcgorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdXJsbGliMiBpbXBvcnQgdXJsb3BlbiwgSFRUUEVycm9yCisKK2NsYXNzIFJvYm90VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRleCwgcGFyc2VyLCB1cmwsIGdvb2QsIGFnZW50KToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZikKKyAgICAgICAgaWYgZ29vZDoKKyAgICAgICAgICAgIHNlbGYuc3RyID0gIlJvYm90VGVzdCglZCwgZ29vZCwgJXMpIiAlIChpbmRleCwgdXJsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdHIgPSAiUm9ib3RUZXN0KCVkLCBiYWQsICVzKSIgJSAoaW5kZXgsIHVybCkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBwYXJzZXIKKyAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgc2VsZi5nb29kID0gZ29vZAorICAgICAgICBzZWxmLmFnZW50ID0gYWdlbnQKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYudXJsLCB0dXBsZSk6CisgICAgICAgICAgICBhZ2VudCwgdXJsID0gc2VsZi51cmwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVybCA9IHNlbGYudXJsCisgICAgICAgICAgICBhZ2VudCA9IHNlbGYuYWdlbnQKKyAgICAgICAgaWYgc2VsZi5nb29kOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmNhbl9mZXRjaChhZ2VudCwgdXJsKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXJzZXIuY2FuX2ZldGNoKGFnZW50LCB1cmwpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnN0cgorCit0ZXN0cyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKK2RlZiBSb2JvdFRlc3QoaW5kZXgsIHJvYm90c190eHQsIGdvb2RfdXJscywgYmFkX3VybHMsCisgICAgICAgICAgICAgIGFnZW50PSJ0ZXN0X3JvYm90cGFyc2VyIik6CisKKyAgICBsaW5lcyA9IFN0cmluZ0lPLlN0cmluZ0lPKHJvYm90c190eHQpLnJlYWRsaW5lcygpCisgICAgcGFyc2VyID0gcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyKCkKKyAgICBwYXJzZXIucGFyc2UobGluZXMpCisgICAgZm9yIHVybCBpbiBnb29kX3VybHM6CisgICAgICAgIHRlc3RzLmFkZFRlc3QoUm9ib3RUZXN0Q2FzZShpbmRleCwgcGFyc2VyLCB1cmwsIDEsIGFnZW50KSkKKyAgICBmb3IgdXJsIGluIGJhZF91cmxzOgorICAgICAgICB0ZXN0cy5hZGRUZXN0KFJvYm90VGVzdENhc2UoaW5kZXgsIHBhcnNlciwgdXJsLCAwLCBhZ2VudCkpCisKKyMgRXhhbXBsZXMgZnJvbSBodHRwOi8vd3d3LnJvYm90c3R4dC5vcmcvd2Mvbm9yb2JvdHMuaHRtbCAoZmV0Y2hlZCAyMDAyKQorCisjIDEuCitkb2MgPSAiIiIKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OiAvY3liZXJ3b3JsZC9tYXAvICMgVGhpcyBpcyBhbiBpbmZpbml0ZSB2aXJ0dWFsIFVSTCBzcGFjZQorRGlzYWxsb3c6IC90bXAvICMgdGhlc2Ugd2lsbCBzb29uIGRpc2FwcGVhcgorRGlzYWxsb3c6IC9mb28uaHRtbAorIiIiCisKK2dvb2QgPSBbJy8nLCcvdGVzdC5odG1sJ10KK2JhZCA9IFsnL2N5YmVyd29ybGQvbWFwL2luZGV4Lmh0bWwnLCcvdG1wL3h4eCcsJy9mb28uaHRtbCddCisKK1JvYm90VGVzdCgxLCBkb2MsIGdvb2QsIGJhZCkKKworIyAyLgorZG9jID0gIiIiCisjIHJvYm90cy50eHQgZm9yIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20vCisKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OiAvY3liZXJ3b3JsZC9tYXAvICMgVGhpcyBpcyBhbiBpbmZpbml0ZSB2aXJ0dWFsIFVSTCBzcGFjZQorCisjIEN5YmVybWFwcGVyIGtub3dzIHdoZXJlIHRvIGdvLgorVXNlci1hZ2VudDogY3liZXJtYXBwZXIKK0Rpc2FsbG93OgorCisiIiIKKworZ29vZCA9IFsnLycsJy90ZXN0Lmh0bWwnLCgnY3liZXJtYXBwZXInLCcvY3liZXJ3b3JsZC9tYXAvaW5kZXguaHRtbCcpXQorYmFkID0gWycvY3liZXJ3b3JsZC9tYXAvaW5kZXguaHRtbCddCisKK1JvYm90VGVzdCgyLCBkb2MsIGdvb2QsIGJhZCkKKworIyAzLgorZG9jID0gIiIiCisjIGdvIGF3YXkKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OiAvCisiIiIKKworZ29vZCA9IFtdCitiYWQgPSBbJy9jeWJlcndvcmxkL21hcC9pbmRleC5odG1sJywnLycsJy90bXAvJ10KKworUm9ib3RUZXN0KDMsIGRvYywgZ29vZCwgYmFkKQorCisjIEV4YW1wbGVzIGZyb20gaHR0cDovL3d3dy5yb2JvdHN0eHQub3JnL3djL25vcm9ib3RzLXJmYy5odG1sIChmZXRjaGVkIDIwMDIpCisKKyMgNC4KK2RvYyA9ICIiIgorVXNlci1hZ2VudDogZmlndHJlZQorRGlzYWxsb3c6IC90bXAKK0Rpc2FsbG93OiAvYSUzY2QuaHRtbAorRGlzYWxsb3c6IC9hJTJmYi5odG1sCitEaXNhbGxvdzogLyU3ZWpvZS9pbmRleC5odG1sCisiIiIKKworZ29vZCA9IFtdICMgWEZBSUwgJy9hL2IuaHRtbCcKK2JhZCA9IFsnL3RtcCcsJy90bXAuaHRtbCcsJy90bXAvYS5odG1sJywKKyAgICAgICAnL2ElM2NkLmh0bWwnLCcvYSUzQ2QuaHRtbCcsJy9hJTJmYi5odG1sJywKKyAgICAgICAnL35qb2UvaW5kZXguaHRtbCcKKyAgICAgICBdCisKK1JvYm90VGVzdCg0LCBkb2MsIGdvb2QsIGJhZCwgJ2ZpZ3RyZWUnKQorUm9ib3RUZXN0KDUsIGRvYywgZ29vZCwgYmFkLCAnRmlnVHJlZSBSb2JvdCBsaWJ3d3ctcGVybC81LjA0JykKKworIyA2LgorZG9jID0gIiIiCitVc2VyLWFnZW50OiAqCitEaXNhbGxvdzogL3RtcC8KK0Rpc2FsbG93OiAvYSUzQ2QuaHRtbAorRGlzYWxsb3c6IC9hL2IuaHRtbAorRGlzYWxsb3c6IC8lN2Vqb2UvaW5kZXguaHRtbAorIiIiCisKK2dvb2QgPSBbJy90bXAnLF0gIyBYRkFJTDogJy9hJTJmYi5odG1sJworYmFkID0gWycvdG1wLycsJy90bXAvYS5odG1sJywKKyAgICAgICAnL2ElM2NkLmh0bWwnLCcvYSUzQ2QuaHRtbCcsIi9hL2IuaHRtbCIsCisgICAgICAgJy8lN0Vqb2UvaW5kZXguaHRtbCddCisKK1JvYm90VGVzdCg2LCBkb2MsIGdvb2QsIGJhZCkKKworIyBGcm9tIGJ1ZyByZXBvcnQgIzUyMzA0MQorCisjIDcuCitkb2MgPSAiIiIKK1VzZXItQWdlbnQ6ICoKK0Rpc2FsbG93OiAvLgorIiIiCisKK2dvb2QgPSBbJy9mb28uaHRtbCddCitiYWQgPSBbXSAjIEJ1ZyByZXBvcnQgc2F5cyAiLyIgc2hvdWxkIGJlIGRlbmllZCwgYnV0IHRoYXQgaXMgbm90IGluIHRoZSBSRkMKKworUm9ib3RUZXN0KDcsIGRvYywgZ29vZCwgYmFkKQorCisjIEZyb20gR29vZ2xlOiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vc3VwcG9ydC93ZWJtYXN0ZXJzL2Jpbi9hbnN3ZXIucHk/aGw9ZW4mYW5zd2VyPTQwMzY0CisKKyMgOC4KK2RvYyA9ICIiIgorVXNlci1hZ2VudDogR29vZ2xlYm90CitBbGxvdzogL2ZvbGRlcjEvbXlmaWxlLmh0bWwKK0Rpc2FsbG93OiAvZm9sZGVyMS8KKyIiIgorCitnb29kID0gWycvZm9sZGVyMS9teWZpbGUuaHRtbCddCitiYWQgPSBbJy9mb2xkZXIxL2Fub3RoZXJmaWxlLmh0bWwnXQorCitSb2JvdFRlc3QoOCwgZG9jLCBnb29kLCBiYWQsIGFnZW50PSJHb29nbGVib3QiKQorCisjIDkuICBUaGlzIGZpbGUgaXMgaW5jb3JyZWN0IGJlY2F1c2UgIkdvb2dsZWJvdCIgaXMgYSBzdWJzdHJpbmcgb2YKKyMgICAgICJHb29nbGVib3QtTW9iaWxlIiwgc28gdGVzdCAxMCB3b3JrcyBqdXN0IGxpa2UgdGVzdCA5LgorZG9jID0gIiIiCitVc2VyLWFnZW50OiBHb29nbGVib3QKK0Rpc2FsbG93OiAvCisKK1VzZXItYWdlbnQ6IEdvb2dsZWJvdC1Nb2JpbGUKK0FsbG93OiAvCisiIiIKKworZ29vZCA9IFtdCitiYWQgPSBbJy9zb21ldGhpbmcuanBnJ10KKworUm9ib3RUZXN0KDksIGRvYywgZ29vZCwgYmFkLCBhZ2VudD0iR29vZ2xlYm90IikKKworZ29vZCA9IFtdCitiYWQgPSBbJy9zb21ldGhpbmcuanBnJ10KKworUm9ib3RUZXN0KDEwLCBkb2MsIGdvb2QsIGJhZCwgYWdlbnQ9Ikdvb2dsZWJvdC1Nb2JpbGUiKQorCisjIDExLiAgR2V0IHRoZSBvcmRlciBjb3JyZWN0LgorZG9jID0gIiIiCitVc2VyLWFnZW50OiBHb29nbGVib3QtTW9iaWxlCitBbGxvdzogLworCitVc2VyLWFnZW50OiBHb29nbGVib3QKK0Rpc2FsbG93OiAvCisiIiIKKworZ29vZCA9IFtdCitiYWQgPSBbJy9zb21ldGhpbmcuanBnJ10KKworUm9ib3RUZXN0KDExLCBkb2MsIGdvb2QsIGJhZCwgYWdlbnQ9Ikdvb2dsZWJvdCIpCisKK2dvb2QgPSBbJy9zb21ldGhpbmcuanBnJ10KK2JhZCA9IFtdCisKK1JvYm90VGVzdCgxMiwgZG9jLCBnb29kLCBiYWQsIGFnZW50PSJHb29nbGVib3QtTW9iaWxlIikKKworCisjIDEzLiAgR29vZ2xlIGFsc28gZ290IHRoZSBvcmRlciB3cm9uZyBpbiAjOC4gIFlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlCisjICAgICAgVVJMcyBmcm9tIG1vcmUgc3BlY2lmaWMgdG8gbW9yZSBnZW5lcmFsLgorZG9jID0gIiIiCitVc2VyLWFnZW50OiBHb29nbGVib3QKK0FsbG93OiAvZm9sZGVyMS9teWZpbGUuaHRtbAorRGlzYWxsb3c6IC9mb2xkZXIxLworIiIiCisKK2dvb2QgPSBbJy9mb2xkZXIxL215ZmlsZS5odG1sJ10KK2JhZCA9IFsnL2ZvbGRlcjEvYW5vdGhlcmZpbGUuaHRtbCddCisKK1JvYm90VGVzdCgxMywgZG9jLCBnb29kLCBiYWQsIGFnZW50PSJnb29nbGVib3QiKQorCisKKyMgMTQuIEZvciBpc3N1ZSAjNjMyNSAocXVlcnkgc3RyaW5nIHN1cHBvcnQpCitkb2MgPSAiIiIKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OiAvc29tZS9wYXRoP25hbWU9dmFsdWUKKyIiIgorCitnb29kID0gWycvc29tZS9wYXRoJ10KK2JhZCA9IFsnL3NvbWUvcGF0aD9uYW1lPXZhbHVlJ10KKworUm9ib3RUZXN0KDE0LCBkb2MsIGdvb2QsIGJhZCkKKworIyAxNS4gRm9yIGlzc3VlICM0MTA4IChvYmV5IGZpcnN0ICogZW50cnkpCitkb2MgPSAiIiIKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OiAvc29tZS9wYXRoCisKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OiAvYW5vdGhlci9wYXRoCisiIiIKKworZ29vZCA9IFsnL2Fub3RoZXIvcGF0aCddCitiYWQgPSBbJy9zb21lL3BhdGgnXQorCitSb2JvdFRlc3QoMTUsIGRvYywgZ29vZCwgYmFkKQorCisKK2NsYXNzIE5ldHdvcmtUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdFBhc3N3b3JkUHJvdGVjdGVkU2l0ZShzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdtdWVibGVzbW9yYWxlZGEuY29tJyk6CisgICAgICAgICAgICB1cmwgPSAnaHR0cDovL211ZWJsZXNtb3JhbGVkYS5jb20nCisgICAgICAgICAgICByb2JvdHNfdXJsID0gdXJsICsgIi9yb2JvdHMudHh0IgorICAgICAgICAgICAgIyBGaXJzdCBjaGVjayB0aGUgVVJMIGlzIHVzYWJsZSBmb3Igb3VyIHB1cnBvc2VzLCBzaW5jZSB0aGUKKyAgICAgICAgICAgICMgdGVzdCBzaXRlIGlzIGEgYml0IGZsYWt5LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVybG9wZW4ocm9ib3RzX3VybCkKKyAgICAgICAgICAgIGV4Y2VwdCBIVFRQRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmNvZGUgbm90IGluIHs0MDEsIDQwM306CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAiJXIgc2hvdWxkIHJldHVybiBhIDQwMSBvciA0MDMgSFRUUCBlcnJvciwgbm90ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAocm9ib3RzX3VybCwgZS5jb2RlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKKyAgICAgICAgICAgICAgICAgICAgIiVyIHNob3VsZCByZXR1cm4gYSA0MDEgb3IgNDAzIEhUVFAgZXJyb3IsIG5vdCBzdWNjZWVkIgorICAgICAgICAgICAgICAgICAgICAlIChyb2JvdHNfdXJsKSkKKyAgICAgICAgICAgIHBhcnNlciA9IHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcigpCisgICAgICAgICAgICBwYXJzZXIuc2V0X3VybCh1cmwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFyc2VyLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnJXMgaXMgdW5hdmFpbGFibGUnICUgdXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuY2FuX2ZldGNoKCIqIiwgcm9ib3RzX3VybCksIEZhbHNlKQorCisgICAgZGVmIHRlc3RQeXRob25Pcmcoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgnd3d3LnB5dGhvbi5vcmcnKToKKyAgICAgICAgICAgIHBhcnNlciA9IHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcigKKyAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5weXRob24ub3JnL3JvYm90cy50eHQiKQorICAgICAgICAgICAgcGFyc2VyLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgIHBhcnNlci5jYW5fZmV0Y2goIioiLCAiaHR0cDovL3d3dy5weXRob24ub3JnL3JvYm90cy50eHQiKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0cykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE5ldHdvcmtUZXN0Q2FzZSkKKworaWYgX19uYW1lX189PSdfX21haW5fXyc6CisgICAgdGVzdF9zdXBwb3J0LnZlcmJvc2UgPSAxCisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4NThkNQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CkBAIC0wLDAgKzEsNDA1IEBACisjIFRlc3QgdGhlIHJ1bnB5IG1vZHVsZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgcnVuX3VuaXR0ZXN0LCBmb3JnZXQKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAodGVtcF9kaXIsIG1ha2Vfc2NyaXB0LCBjb21waWxlX3NjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9wa2csIG1ha2VfemlwX3NjcmlwdCwgbWFrZV96aXBfcGtnKQorCisKK2Zyb20gcnVucHkgaW1wb3J0IF9ydW5fY29kZSwgX3J1bl9tb2R1bGVfY29kZSwgcnVuX21vZHVsZSwgcnVuX3BhdGgKKyMgTm90ZTogVGhpcyBtb2R1bGUgY2FuJ3Qgc2FmZWx5IHRlc3QgX3J1bl9tb2R1bGVfYXNfbWFpbiBhcyBpdAorIyBydW5zIGl0cyB0ZXN0cyBpbiB0aGUgY3VycmVudCBwcm9jZXNzLCB3aGljaCB3b3VsZCBtZXNzIHdpdGggdGhlCisjIHJlYWwgX19tYWluX18gbW9kdWxlICh1c3VhbGx5IHRlc3QucmVncnRlc3QpCisjIFNlZSB0ZXN0X2NtZF9saW5lX3NjcmlwdCBmb3IgYSB0ZXN0IHRoYXQgZXhlY3V0ZXMgdGhhdCBjb2RlIHBhdGgKKworIyBTZXQgdXAgdGhlIHRlc3QgY29kZSBhbmQgZXhwZWN0ZWQgcmVzdWx0cworCitjbGFzcyBSdW5Nb2R1bGVDb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVW5pdCB0ZXN0cyBmb3IgcnVucHkuX3J1bl9jb2RlIGFuZCBydW5weS5fcnVuX21vZHVsZV9jb2RlIiIiCisKKyAgICBleHBlY3RlZF9yZXN1bHQgPSBbIlRvcCBsZXZlbCBhc3NpZ25tZW50IiwgIkxvd2VyIGxldmVsIHJlZmVyZW5jZSJdCisgICAgdGVzdF9zb3VyY2UgPSAoCisgICAgICAgICIjIENoZWNrIGJhc2ljIGNvZGUgZXhlY3V0aW9uXG4iCisgICAgICAgICJyZXN1bHQgPSBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50J11cbiIKKyAgICAgICAgImRlZiBmKCk6XG4iCisgICAgICAgICIgICAgcmVzdWx0LmFwcGVuZCgnTG93ZXIgbGV2ZWwgcmVmZXJlbmNlJylcbiIKKyAgICAgICAgImYoKVxuIgorICAgICAgICAiIyBDaGVjayB0aGUgc3lzIG1vZHVsZVxuIgorICAgICAgICAiaW1wb3J0IHN5c1xuIgorICAgICAgICAicnVuX2FyZ3YwID0gc3lzLmFyZ3ZbMF1cbiIKKyAgICAgICAgInJ1bl9uYW1lX2luX3N5c19tb2R1bGVzID0gX19uYW1lX18gaW4gc3lzLm1vZHVsZXNcbiIKKyAgICAgICAgImlmIHJ1bl9uYW1lX2luX3N5c19tb2R1bGVzOlxuIgorICAgICAgICAiICAgbW9kdWxlX2luX3N5c19tb2R1bGVzID0gZ2xvYmFscygpIGlzIHN5cy5tb2R1bGVzW19fbmFtZV9fXS5fX2RpY3RfX1xuIgorICAgICAgICAiIyBDaGVjayBuZXN0ZWQgb3BlcmF0aW9uXG4iCisgICAgICAgICJpbXBvcnQgcnVucHlcbiIKKyAgICAgICAgIm5lc3RlZCA9IHJ1bnB5Ll9ydW5fbW9kdWxlX2NvZGUoJ3g9MVxcbicsIG1vZF9uYW1lPSc8cnVuPicpXG4iCisgICAgKQorCisgICAgZGVmIHRlc3RfcnVuX2NvZGUoc2VsZik6CisgICAgICAgIHNhdmVkX2FyZ3YwID0gc3lzLmFyZ3ZbMF0KKyAgICAgICAgZCA9IF9ydW5fY29kZShzZWxmLnRlc3Rfc291cmNlLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyJyZXN1bHQiXSwgc2VsZi5leHBlY3RlZF9yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZFsiX19uYW1lX18iXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkWyJfX2ZpbGVfXyJdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGRbIl9fbG9hZGVyX18iXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkWyJfX3BhY2thZ2VfXyJdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGRbInJ1bl9hcmd2MCJdLCBzYXZlZF9hcmd2MCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigicnVuX25hbWUiLCBkKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5hcmd2WzBdLCBzYXZlZF9hcmd2MCkKKworICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGVfY29kZShzZWxmKToKKyAgICAgICAgaW5pdGlhbCA9IG9iamVjdCgpCisgICAgICAgIG5hbWUgPSAiPE5vbnNlbnNlPiIKKyAgICAgICAgZmlsZSA9ICJTb21lIG90aGVyIG5vbnNlbnNlIgorICAgICAgICBsb2FkZXIgPSAiTm93IHlvdSdyZSBqdXN0IGJlaW5nIHNpbGx5IgorICAgICAgICBwYWNrYWdlID0gJycgIyBUcmVhdCBhcyBhIHRvcCBsZXZlbCBtb2R1bGUKKyAgICAgICAgZDEgPSBkaWN0KGluaXRpYWw9aW5pdGlhbCkKKyAgICAgICAgc2F2ZWRfYXJndjAgPSBzeXMuYXJndlswXQorICAgICAgICBkMiA9IF9ydW5fbW9kdWxlX2NvZGUoc2VsZi50ZXN0X3NvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJyZXN1bHQiLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiaW5pdGlhbCJdLCBpbml0aWFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyWyJyZXN1bHQiXSwgc2VsZi5leHBlY3RlZF9yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbIm5lc3RlZCJdWyJ4Il0sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZDJbIl9fbmFtZV9fIl0sIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsicnVuX25hbWVfaW5fc3lzX21vZHVsZXMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJtb2R1bGVfaW5fc3lzX21vZHVsZXMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiX19maWxlX18iXSwgZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsicnVuX2FyZ3YwIl0sIGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZDJbIl9fbG9hZGVyX18iXSwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJfX3BhY2thZ2VfXyJdLCBwYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5hcmd2WzBdLCBzYXZlZF9hcmd2MCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzeXMubW9kdWxlcykKKworCitjbGFzcyBSdW5Nb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5ydW5fbW9kdWxlIiIiCisKKyAgICBkZWYgZXhwZWN0X2ltcG9ydF9lcnJvcihzZWxmLCBtb2RfbmFtZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9tb2R1bGUobW9kX25hbWUpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgaW1wb3J0IGVycm9yIGZvciAiICsgbW9kX25hbWUpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX25hbWVzKHNlbGYpOgorICAgICAgICAjIEJ1aWx0aW4gbW9kdWxlCisgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigic3lzIikKKyAgICAgICAgIyBOb24tZXhpc3RlbnQgbW9kdWxlcworICAgICAgICBzZWxmLmV4cGVjdF9pbXBvcnRfZXJyb3IoInN5cy5pbXAuZXJpYyIpCisgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigib3MucGF0aC5oYWxmIikKKyAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCJhLmJlZSIpCisgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigiLmhvd2FyZCIpCisgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigiLi5lYXRlbiIpCisgICAgICAgICMgUGFja2FnZSB3aXRob3V0IF9fbWFpbl9fLnB5CisgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigibXVsdGlwcm9jZXNzaW5nIikKKworICAgIGRlZiB0ZXN0X2xpYnJhcnlfbW9kdWxlKHNlbGYpOgorICAgICAgICBydW5fbW9kdWxlKCJydW5weSIpCisKKyAgICBkZWYgX2FkZF9wa2dfZGlyKHNlbGYsIHBrZ19kaXIpOgorICAgICAgICBvcy5ta2Rpcihwa2dfZGlyKQorICAgICAgICBwa2dfZm5hbWUgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgIl9faW5pdF9fIitvcy5leHRzZXArInB5IikKKyAgICAgICAgcGtnX2ZpbGUgPSBvcGVuKHBrZ19mbmFtZSwgInciKQorICAgICAgICBwa2dfZmlsZS5jbG9zZSgpCisgICAgICAgIHJldHVybiBwa2dfZm5hbWUKKworICAgIGRlZiBfbWFrZV9wa2coc2VsZiwgc291cmNlLCBkZXB0aCwgbW9kX2Jhc2U9InJ1bnB5X3Rlc3QiKToKKyAgICAgICAgcGtnX25hbWUgPSAiX19ydW5weV9wa2dfXyIKKyAgICAgICAgdGVzdF9mbmFtZSA9IG1vZF9iYXNlK29zLmV4dHNlcCsicHkiCisgICAgICAgIHBrZ19kaXIgPSBzdWJfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIFBhY2thZ2UgdHJlZSBpbjoiLCBzdWJfZGlyCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBwa2dfZGlyKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBVcGRhdGVkIHN5cy5wYXRoOiIsIHN5cy5wYXRoWzBdCisgICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoKToKKyAgICAgICAgICAgIHN1Yl9kaXIgPSBvcy5wYXRoLmpvaW4oc3ViX2RpciwgcGtnX25hbWUpCisgICAgICAgICAgICBwa2dfZm5hbWUgPSBzZWxmLl9hZGRfcGtnX2RpcihzdWJfZGlyKQorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIiAgTmV4dCBsZXZlbCBpbjoiLCBzdWJfZGlyCisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBDcmVhdGVkOiIsIHBrZ19mbmFtZQorICAgICAgICBtb2RfZm5hbWUgPSBvcy5wYXRoLmpvaW4oc3ViX2RpciwgdGVzdF9mbmFtZSkKKyAgICAgICAgbW9kX2ZpbGUgPSBvcGVuKG1vZF9mbmFtZSwgInciKQorICAgICAgICBtb2RfZmlsZS53cml0ZShzb3VyY2UpCisgICAgICAgIG1vZF9maWxlLmNsb3NlKCkKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIiAgQ3JlYXRlZDoiLCBtb2RfZm5hbWUKKyAgICAgICAgbW9kX25hbWUgPSAocGtnX25hbWUrIi4iKSpkZXB0aCArIG1vZF9iYXNlCisgICAgICAgIHJldHVybiBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lCisKKyAgICBkZWYgX2RlbF9wa2coc2VsZiwgdG9wLCBkZXB0aCwgbW9kX25hbWUpOgorICAgICAgICBmb3IgZW50cnkgaW4gbGlzdChzeXMubW9kdWxlcyk6CisgICAgICAgICAgICBpZiBlbnRyeS5zdGFydHN3aXRoKCJfX3J1bnB5X3BrZ19fIik6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2VudHJ5XQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBSZW1vdmVkIHN5cy5tb2R1bGVzIGVudHJpZXMiCisgICAgICAgIGRlbCBzeXMucGF0aFswXQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBSZW1vdmVkIHN5cy5wYXRoIGVudHJ5IgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0b3AsIHRvcGRvd249RmFsc2UpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBleDoKKyAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgZXggIyBQZXJzaXN0IHdpdGggY2xlYW5pbmcgdXAKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBleDoKKyAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgZXggIyBQZXJzaXN0IHdpdGggY2xlYW5pbmcgdXAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mucm1kaXIodG9wKQorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIiAgUmVtb3ZlZCBwYWNrYWdlIHRyZWUiCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBleDoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IGV4ICMgUGVyc2lzdCB3aXRoIGNsZWFuaW5nIHVwCisKKyAgICBkZWYgX2NoZWNrX21vZHVsZShzZWxmLCBkZXB0aCk6CisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZygieD0xXG4iLCBkZXB0aCkpCisgICAgICAgIGZvcmdldChtb2RfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlJ1bm5pbmcgZnJvbSBzb3VyY2U6IiwgbW9kX25hbWUKKyAgICAgICAgICAgIGQxID0gcnVuX21vZHVsZShtb2RfbmFtZSkgIyBSZWFkIGZyb20gc291cmNlCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ4IiwgZDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZDFbIngiXSA9PSAxKQorICAgICAgICAgICAgZGVsIGQxICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RfbmFtZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShtb2RfZm5hbWUpCisgICAgICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6CisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlJ1bm5pbmcgZnJvbSBjb21waWxlZDoiLCBtb2RfbmFtZQorICAgICAgICAgICAgICAgIGQyID0gcnVuX21vZHVsZShtb2RfbmFtZSkgIyBSZWFkIGZyb20gYnl0ZWNvZGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ4IiwgZDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJ4Il0gPT0gMSkKKyAgICAgICAgICAgICAgICBkZWwgZDIgIyBFbnN1cmUgX19sb2FkZXJfXyBlbnRyeSBkb2Vzbid0IGtlZXAgZmlsZSBvcGVuCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9kZWxfcGtnKHBrZ19kaXIsIGRlcHRoLCBtb2RfbmFtZSkKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIk1vZHVsZSBleGVjdXRlZCBzdWNjZXNzZnVsbHkiCisKKyAgICBkZWYgX2NoZWNrX3BhY2thZ2Uoc2VsZiwgZGVwdGgpOgorICAgICAgICBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lID0gKAorICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coIng9MVxuIiwgZGVwdGgsICJfX21haW5fXyIpKQorICAgICAgICBwa2dfbmFtZSwgXywgXyA9IG1vZF9uYW1lLnJwYXJ0aXRpb24oIi4iKQorICAgICAgICBmb3JnZXQobW9kX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJSdW5uaW5nIGZyb20gc291cmNlOiIsIHBrZ19uYW1lCisgICAgICAgICAgICBkMSA9IHJ1bl9tb2R1bGUocGtnX25hbWUpICMgUmVhZCBmcm9tIHNvdXJjZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigieCIsIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWyJ4Il0gPT0gMSkKKyAgICAgICAgICAgIGRlbCBkMSAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgICAgICBvcy5yZW1vdmUobW9kX2ZuYW1lKQorICAgICAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJSdW5uaW5nIGZyb20gY29tcGlsZWQ6IiwgcGtnX25hbWUKKyAgICAgICAgICAgICAgICBkMiA9IHJ1bl9tb2R1bGUocGtnX25hbWUpICMgUmVhZCBmcm9tIGJ5dGVjb2RlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigieCIsIGQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsieCJdID09IDEpCisgICAgICAgICAgICAgICAgZGVsIGQyICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fZGVsX3BrZyhwa2dfZGlyLCBkZXB0aCwgcGtnX25hbWUpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJQYWNrYWdlIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSIKKworICAgIGRlZiBfYWRkX3JlbGF0aXZlX21vZHVsZXMoc2VsZiwgYmFzZV9kaXIsIHNvdXJjZSwgZGVwdGgpOgorICAgICAgICBpZiBkZXB0aCA8PSAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUmVsYXRpdmUgbW9kdWxlIHRlc3QgbmVlZHMgZGVwdGggPiAxIikKKyAgICAgICAgcGtnX25hbWUgPSAiX19ydW5weV9wa2dfXyIKKyAgICAgICAgbW9kdWxlX2RpciA9IGJhc2VfZGlyCisgICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoKToKKyAgICAgICAgICAgIHBhcmVudF9kaXIgPSBtb2R1bGVfZGlyCisgICAgICAgICAgICBtb2R1bGVfZGlyID0gb3MucGF0aC5qb2luKG1vZHVsZV9kaXIsIHBrZ19uYW1lKQorICAgICAgICAjIEFkZCBzaWJsaW5nIG1vZHVsZQorICAgICAgICBzaWJsaW5nX2ZuYW1lID0gb3MucGF0aC5qb2luKG1vZHVsZV9kaXIsICJzaWJsaW5nIitvcy5leHRzZXArInB5IikKKyAgICAgICAgc2libGluZ19maWxlID0gb3BlbihzaWJsaW5nX2ZuYW1lLCAidyIpCisgICAgICAgIHNpYmxpbmdfZmlsZS5jbG9zZSgpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIEFkZGVkIHNpYmxpbmcgbW9kdWxlOiIsIHNpYmxpbmdfZm5hbWUKKyAgICAgICAgIyBBZGQgbmVwaGV3IG1vZHVsZQorICAgICAgICB1bmNsZV9kaXIgPSBvcy5wYXRoLmpvaW4ocGFyZW50X2RpciwgInVuY2xlIikKKyAgICAgICAgc2VsZi5fYWRkX3BrZ19kaXIodW5jbGVfZGlyKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBBZGRlZCB1bmNsZSBwYWNrYWdlOiIsIHVuY2xlX2RpcgorICAgICAgICBjb3VzaW5fZGlyID0gb3MucGF0aC5qb2luKHVuY2xlX2RpciwgImNvdXNpbiIpCisgICAgICAgIHNlbGYuX2FkZF9wa2dfZGlyKGNvdXNpbl9kaXIpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIEFkZGVkIGNvdXNpbiBwYWNrYWdlOiIsIGNvdXNpbl9kaXIKKyAgICAgICAgbmVwaGV3X2ZuYW1lID0gb3MucGF0aC5qb2luKGNvdXNpbl9kaXIsICJuZXBoZXciK29zLmV4dHNlcCsicHkiKQorICAgICAgICBuZXBoZXdfZmlsZSA9IG9wZW4obmVwaGV3X2ZuYW1lLCAidyIpCisgICAgICAgIG5lcGhld19maWxlLmNsb3NlKCkKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIiAgQWRkZWQgbmVwaGV3IG1vZHVsZToiLCBuZXBoZXdfZm5hbWUKKworICAgIGRlZiBfY2hlY2tfcmVsYXRpdmVfaW1wb3J0cyhzZWxmLCBkZXB0aCwgcnVuX25hbWU9Tm9uZSk6CisgICAgICAgIGNvbnRlbnRzID0gciIiIlwKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Citmcm9tIC4gaW1wb3J0IHNpYmxpbmcKK2Zyb20gLi51bmNsZS5jb3VzaW4gaW1wb3J0IG5lcGhldworIiIiCisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhjb250ZW50cywgZGVwdGgpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9hZGRfcmVsYXRpdmVfbW9kdWxlcyhwa2dfZGlyLCBjb250ZW50cywgZGVwdGgpCisgICAgICAgICAgICBwa2dfbmFtZSA9IG1vZF9uYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlJ1bm5pbmcgZnJvbSBzb3VyY2U6IiwgbW9kX25hbWUKKyAgICAgICAgICAgIGQxID0gcnVuX21vZHVsZShtb2RfbmFtZSwgcnVuX25hbWU9cnVuX25hbWUpICMgUmVhZCBmcm9tIHNvdXJjZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiX19wYWNrYWdlX18iLCBkMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMVsiX19wYWNrYWdlX18iXSA9PSBwa2dfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInNpYmxpbmciLCBkMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm5lcGhldyIsIGQxKQorICAgICAgICAgICAgZGVsIGQxICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RfbmFtZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShtb2RfZm5hbWUpCisgICAgICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6CisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlJ1bm5pbmcgZnJvbSBjb21waWxlZDoiLCBtb2RfbmFtZQorICAgICAgICAgICAgICAgIGQyID0gcnVuX21vZHVsZShtb2RfbmFtZSwgcnVuX25hbWU9cnVuX25hbWUpICMgUmVhZCBmcm9tIGJ5dGVjb2RlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiX19wYWNrYWdlX18iLCBkMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZDJbIl9fcGFja2FnZV9fIl0gPT0gcGtnX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic2libGluZyIsIGQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm5lcGhldyIsIGQyKQorICAgICAgICAgICAgICAgIGRlbCBkMiAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2RlbF9wa2cocGtnX2RpciwgZGVwdGgsIG1vZF9uYW1lKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiTW9kdWxlIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSIKKworICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGUoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSg0KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21vZHVsZShkZXB0aCkKKworICAgIGRlZiB0ZXN0X3J1bl9wYWNrYWdlKHNlbGYpOgorICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoCisgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfcmVsYXRpdmVfaW1wb3J0KHNlbGYpOgorICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMiwgNSk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiVGVzdGluZyByZWxhdGl2ZSBpbXBvcnRzIGF0IGRlcHRoOiIsIGRlcHRoCisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWxhdGl2ZV9pbXBvcnRzKGRlcHRoKQorCisgICAgZGVmIHRlc3RfbWFpbl9yZWxhdGl2ZV9pbXBvcnQoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgyLCA1KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJUZXN0aW5nIG1haW4gcmVsYXRpdmUgaW1wb3J0cyBhdCBkZXB0aDoiLCBkZXB0aAorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVsYXRpdmVfaW1wb3J0cyhkZXB0aCwgIl9fbWFpbl9fIikKKworCitjbGFzcyBSdW5QYXRoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVW5pdCB0ZXN0cyBmb3IgcnVucHkucnVuX3BhdGgiIiIKKyAgICAjIEJhc2VkIG9uIGNvcnJlc3BvbmRpbmcgdGVzdHMgaW4gdGVzdF9jbWRfbGluZV9zY3JpcHQKKworICAgIHRlc3Rfc291cmNlID0gIiIiXAorIyBTY3JpcHQgbWF5IGJlIHJ1biB3aXRoIG9wdGltaXNhdGlvbiBlbmFibGVkLCBzbyBkb24ndCByZWx5IG9uIGFzc2VydAorIyBzdGF0ZW1lbnRzIGJlaW5nIGV4ZWN1dGVkCitkZWYgYXNzZXJ0RXF1YWwobGhzLCByaHMpOgorICAgIGlmIGxocyAhPSByaHM6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCclciAhPSAlcicgJSAobGhzLCByaHMpKQorZGVmIGFzc2VydElzKGxocywgcmhzKToKKyAgICBpZiBsaHMgaXMgbm90IHJoczoKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJyVyIGlzIG5vdCAlcicgJSAobGhzLCByaHMpKQorIyBDaGVjayBiYXNpYyBjb2RlIGV4ZWN1dGlvbgorcmVzdWx0ID0gWydUb3AgbGV2ZWwgYXNzaWdubWVudCddCitkZWYgZigpOgorICAgIHJlc3VsdC5hcHBlbmQoJ0xvd2VyIGxldmVsIHJlZmVyZW5jZScpCitmKCkKK2Fzc2VydEVxdWFsKHJlc3VsdCwgWydUb3AgbGV2ZWwgYXNzaWdubWVudCcsICdMb3dlciBsZXZlbCByZWZlcmVuY2UnXSkKKyMgQ2hlY2sgdGhlIHN5cyBtb2R1bGUKK2ltcG9ydCBzeXMKK2Fzc2VydElzKGdsb2JhbHMoKSwgc3lzLm1vZHVsZXNbX19uYW1lX19dLl9fZGljdF9fKQorYXJndjAgPSBzeXMuYXJndlswXQorIiIiCisKKyAgICBkZWYgX21ha2VfdGVzdF9zY3JpcHQoc2VsZiwgc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2U9Tm9uZSk6CisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgc291cmNlID0gc2VsZi50ZXN0X3NvdXJjZQorICAgICAgICByZXR1cm4gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCisKKyAgICBkZWYgX2NoZWNrX3NjcmlwdChzZWxmLCBzY3JpcHRfbmFtZSwgZXhwZWN0ZWRfbmFtZSwgZXhwZWN0ZWRfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgZXhwZWN0ZWRfcGFja2FnZSk6CisgICAgICAgIHJlc3VsdCA9IHJ1bl9wYXRoKHNjcmlwdF9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsiX19uYW1lX18iXSwgZXhwZWN0ZWRfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbIl9fZmlsZV9fIl0sIGV4cGVjdGVkX2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImFyZ3YwIiwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsiYXJndjAiXSwgZXhwZWN0ZWRfYXJndjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJfX3BhY2thZ2VfXyJdLCBleHBlY3RlZF9wYWNrYWdlKQorCisgICAgZGVmIF9jaGVja19pbXBvcnRfZXJyb3Ioc2VsZiwgc2NyaXB0X25hbWUsIG1zZyk6CisgICAgICAgIG1zZyA9IHJlLmVzY2FwZShtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKEltcG9ydEVycm9yLCBtc2csIHJ1bl9wYXRoLCBzY3JpcHRfbmFtZSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX3NjcmlwdChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdzY3JpcHQnCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X25hbWUsICI8cnVuX3BhdGg+Iiwgc2NyaXB0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zY3JpcHRfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnc2NyaXB0JworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGNvbXBpbGVkX25hbWUsICI8cnVuX3BhdGg+IiwgY29tcGlsZWRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lLCBOb25lKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ19fbWFpbl9fJworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIsICI8cnVuX3BhdGg+Iiwgc2NyaXB0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpciwgJycpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcnlfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2RpciwgIjxydW5fcGF0aD4iLCBjb21waWxlZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIsICcnKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ25vdF9tYWluJworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgbXNnID0gImNhbid0IGZpbmQgJ19fbWFpbl9fJyBtb2R1bGUgaW4gJXIiICUgc2NyaXB0X2RpcgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfaW1wb3J0X2Vycm9yKHNjcmlwdF9kaXIsIG1zZykKKworICAgIGRlZiB0ZXN0X3ppcGZpbGUoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsICI8cnVuX3BhdGg+IiwgZm5hbWUsIHppcF9uYW1lLCAnJykKKworICAgIGRlZiB0ZXN0X3ppcGZpbGVfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgY29tcGlsZWRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgIjxydW5fcGF0aD4iLCBmbmFtZSwgemlwX25hbWUsICcnKQorCisgICAgZGVmIHRlc3RfemlwZmlsZV9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdub3RfbWFpbicKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHppcF9uYW1lCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IoemlwX25hbWUsIG1zZykKKworICAgIGRlZiB0ZXN0X21haW5fcmVjdXJzaW9uX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpciwgdGVtcF9kaXIoKSBhcyBkdW1teV9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNvdXJjZSA9ICgiaW1wb3J0IHJ1bnB5XG4iCisgICAgICAgICAgICAgICAgICAgICAgInJ1bnB5LnJ1bl9wYXRoKCVyKVxuIikgJSBkdW1teV9kaXIKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSwgc291cmNlKQorICAgICAgICAgICAgemlwX25hbWUsIGZuYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgbXNnID0gInJlY3Vyc2lvbiBkZXB0aCBleGNlZWRlZCIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFJ1bnRpbWVFcnJvciwgbXNnLCBydW5fcGF0aCwgemlwX25hbWUpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFJ1bk1vZHVsZUNvZGVUZXN0LCBSdW5Nb2R1bGVUZXN0LCBSdW5QYXRoVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2F4LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2F4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjBlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zYXgucHkKQEAgLTAsMCArMSw4ODcgQEAKKyMgcmVncmVzc2lvbiB0ZXN0IGZvciBTQVggMi4wICAgICAgICAgICAgLSotIGNvZGluZzogdXRmLTggLSotCisjICRJZCQKKworZnJvbSB4bWwuc2F4IGltcG9ydCBtYWtlX3BhcnNlciwgQ29udGVudEhhbmRsZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgU0FYRXhjZXB0aW9uLCBTQVhSZWFkZXJOb3RBdmFpbGFibGUsIFNBWFBhcnNlRXhjZXB0aW9uCit0cnk6CisgICAgbWFrZV9wYXJzZXIoKQorZXhjZXB0IFNBWFJlYWRlck5vdEF2YWlsYWJsZToKKyAgICAjIGRvbid0IHRyeSB0byB0ZXN0IHRoaXMgbW9kdWxlIGlmIHdlIGNhbm5vdCBjcmVhdGUgYSBwYXJzZXIKKyAgICByYWlzZSBJbXBvcnRFcnJvcigibm8gWE1MIHBhcnNlcnMgYXZhaWxhYmxlIikKK2Zyb20geG1sLnNheC5zYXh1dGlscyBpbXBvcnQgWE1MR2VuZXJhdG9yLCBlc2NhcGUsIHVuZXNjYXBlLCBxdW90ZWF0dHIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MRmlsdGVyQmFzZQorZnJvbSB4bWwuc2F4LmV4cGF0cmVhZGVyIGltcG9ydCBjcmVhdGVfcGFyc2VyCitmcm9tIHhtbC5zYXguaGFuZGxlciBpbXBvcnQgZmVhdHVyZV9uYW1lc3BhY2VzCitmcm9tIHhtbC5zYXgueG1scmVhZGVyIGltcG9ydCBJbnB1dFNvdXJjZSwgQXR0cmlidXRlc0ltcGwsIEF0dHJpYnV0ZXNOU0ltcGwKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IGlvCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBydW5fdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdAorCitURVNUX1hNTEZJTEUgPSBmaW5kZmlsZSgidGVzdC54bWwiLCBzdWJkaXI9InhtbHRlc3RkYXRhIikKK1RFU1RfWE1MRklMRV9PVVQgPSBmaW5kZmlsZSgidGVzdC54bWwub3V0Iiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCisKK3N1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gVHJ1ZQoraWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXM6CisgICAgdHJ5OgorICAgICAgICBzdXBwb3J0LlRFU1RGTl9VTklDT0RFLmVuY29kZShzdXBwb3J0LlRFU1RGTl9FTkNPRElORykKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBVbmljb2RlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICMgRWl0aGVyIHRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZyBpcyBOb25lLCBvciB0aGUgZmlsZSBuYW1lCisgICAgICAgICMgY2Fubm90IGJlIGVuY29kZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nLgorICAgICAgICBzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IEZhbHNlCityZXF1aXJlc191bmljb2RlX2ZpbGVuYW1lcyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoCisgICAgICAgIHN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzLAorICAgICAgICAnUmVxdWlyZXMgdW5pY29kZSBmaWxlbmFtZXMgc3VwcG9ydCcpCisKK25zX3VyaSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcveG1sLW5zL3NheHRlc3QvIgorCitjbGFzcyBYbWxUZXN0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHZlcmlmeV9lbXB0eV9hdHRycyhzZWxmLCBhdHRycyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXRWYWx1ZSwgImF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuZ2V0VmFsdWVCeVFOYW1lLCAiYXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXROYW1lQnlRTmFtZSwgImF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuZ2V0UU5hbWVCeU5hbWUsICJhdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLl9fZ2V0aXRlbV9fLCAiYXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TGVuZ3RoKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhdHRycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXR0cnMuaGFzX2tleSgiYXR0ciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmtleXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KCJhdHRycyIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgiYXR0cnMiLCAyNSksIDI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLml0ZW1zKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLnZhbHVlcygpLCBbXSkKKworICAgIGRlZiB2ZXJpZnlfZW1wdHlfbnNhdHRycyhzZWxmLCBhdHRycyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXRWYWx1ZSwgKG5zX3VyaSwgImF0dHIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLmdldFZhbHVlQnlRTmFtZSwgIm5zOmF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuZ2V0TmFtZUJ5UU5hbWUsICJuczphdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLmdldFFOYW1lQnlOYW1lLCAobnNfdXJpLCAiYXR0ciIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuX19nZXRpdGVtX18sIChuc191cmksICJhdHRyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TGVuZ3RoKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhdHRycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXR0cnMuaGFzX2tleSgobnNfdXJpLCAiYXR0ciIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5rZXlzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSwgMjUpLCAyNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5pdGVtcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy52YWx1ZXMoKSwgW10pCisKKyAgICBkZWYgdmVyaWZ5X2F0dHJzX3dhdHRyKHNlbGYsIGF0dHJzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRMZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lcygpLCBbImF0dHIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZXMoKSwgWyJhdHRyIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGF0dHJzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGF0dHJzLmhhc19rZXkoImF0dHIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5rZXlzKCksIFsiYXR0ciJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgiYXR0ciIpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoImF0dHIiLCAyNSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLml0ZW1zKCksIFsoImF0dHIiLCAidmFsIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLnZhbHVlcygpLCBbInZhbCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFZhbHVlKCJhdHRyIiksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFZhbHVlQnlRTmFtZSgiYXR0ciIpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lQnlRTmFtZSgiYXR0ciIpLCAiYXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnNbImF0dHIiXSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVCeU5hbWUoImF0dHIiKSwgImF0dHIiKQorCitjbGFzcyBNYWtlUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbWFrZV9wYXJzZXIyKHNlbGYpOgorICAgICAgICAjIENyZWF0aW5nIHBhcnNlcnMgc2V2ZXJhbCB0aW1lcyBpbiBhIHJvdyBzaG91bGQgc3VjY2VlZC4KKyAgICAgICAgIyBUZXN0aW5nIHRoaXMgYmVjYXVzZSB0aGVyZSBoYXZlIGJlZW4gZmFpbHVyZXMgb2YgdGhpcyBraW5kCisgICAgICAgICMgYmVmb3JlLgorICAgICAgICBmcm9tIHhtbC5zYXggaW1wb3J0IG1ha2VfcGFyc2VyCisgICAgICAgIHAgPSBtYWtlX3BhcnNlcigpCisgICAgICAgIGZyb20geG1sLnNheCBpbXBvcnQgbWFrZV9wYXJzZXIKKyAgICAgICAgcCA9IG1ha2VfcGFyc2VyKCkKKyAgICAgICAgZnJvbSB4bWwuc2F4IGltcG9ydCBtYWtlX3BhcnNlcgorICAgICAgICBwID0gbWFrZV9wYXJzZXIoKQorICAgICAgICBmcm9tIHhtbC5zYXggaW1wb3J0IG1ha2VfcGFyc2VyCisgICAgICAgIHAgPSBtYWtlX3BhcnNlcigpCisgICAgICAgIGZyb20geG1sLnNheCBpbXBvcnQgbWFrZV9wYXJzZXIKKyAgICAgICAgcCA9IG1ha2VfcGFyc2VyKCkKKyAgICAgICAgZnJvbSB4bWwuc2F4IGltcG9ydCBtYWtlX3BhcnNlcgorICAgICAgICBwID0gbWFrZV9wYXJzZXIoKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjICAgc2F4dXRpbHMgdGVzdHMKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFNheHV0aWxzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyA9PT09PSBlc2NhcGUKKyAgICBkZWYgdGVzdF9lc2NhcGVfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXNjYXBlKCJEb25hbGQgRHVjayAmIENvIiksICJEb25hbGQgRHVjayAmYW1wOyBDbyIpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVfYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVzY2FwZSgiPERvbmFsZCBEdWNrICYgQ28+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiZsdDtEb25hbGQgRHVjayAmYW1wOyBDbyZndDsiKQorCisgICAgZGVmIHRlc3RfZXNjYXBlX2V4dHJhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVzY2FwZSgiSGVpIHDDpSBkZWciLCB7IsOlIiA6ICImYXJpbmc7In0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJIZWkgcCZhcmluZzsgZGVnIikKKworICAgICMgPT09PT0gdW5lc2NhcGUKKyAgICBkZWYgdGVzdF91bmVzY2FwZV9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmVzY2FwZSgiRG9uYWxkIER1Y2sgJmFtcDsgQ28iKSwgIkRvbmFsZCBEdWNrICYgQ28iKQorCisgICAgZGVmIHRlc3RfdW5lc2NhcGVfYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuZXNjYXBlKCImbHQ7RG9uYWxkIER1Y2sgJmFtcDsgQ28mZ3Q7IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxEb25hbGQgRHVjayAmIENvPiIpCisKKyAgICBkZWYgdGVzdF91bmVzY2FwZV9leHRyYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmVzY2FwZSgiSGVpIHDDpSBkZWciLCB7IsOlIiA6ICImYXJpbmc7In0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJIZWkgcCZhcmluZzsgZGVnIikKKworICAgIGRlZiB0ZXN0X3VuZXNjYXBlX2FtcF9leHRyYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmVzY2FwZSgiJmFtcDtmb287IiwgeyImZm9vOyI6ICJzcGxhdCJ9KSwgIiZmb287IikKKworICAgICMgPT09PT0gcXVvdGVhdHRyCisgICAgZGVmIHRlc3RfcXVvdGVhdHRyX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1b3RlYXR0cigiRG9uYWxkIER1Y2sgJiBDbyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICciRG9uYWxkIER1Y2sgJmFtcDsgQ28iJykKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9xdW90ZWF0dHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVhdHRyKCdJbmNsdWRlcyAiZG91YmxlIiBxdW90ZXMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXCdJbmNsdWRlcyAiZG91YmxlIiBxdW90ZXNcJycpCisKKyAgICBkZWYgdGVzdF9kb3VibGVfcXVvdGVhdHRyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1b3RlYXR0cigiSW5jbHVkZXMgJ3NpbmdsZScgcXVvdGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlwiSW5jbHVkZXMgJ3NpbmdsZScgcXVvdGVzXCIiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2RvdWJsZV9xdW90ZWF0dHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVhdHRyKCJJbmNsdWRlcyAnc2luZ2xlJyBhbmQgXCJkb3VibGVcIiBxdW90ZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXCJJbmNsdWRlcyAnc2luZ2xlJyBhbmQgJnF1b3Q7ZG91YmxlJnF1b3Q7IHF1b3Rlc1wiIikKKworICAgICMgPT09PT0gbWFrZV9wYXJzZXIKKyAgICBkZWYgdGVzdF9tYWtlX3BhcnNlcihzZWxmKToKKyAgICAgICAgIyBDcmVhdGluZyBhIHBhcnNlciBzaG91bGQgc3VjY2VlZCAtIGl0IHNob3VsZCBmYWxsIGJhY2sKKyAgICAgICAgIyB0byB0aGUgZXhwYXRyZWFkZXIKKyAgICAgICAgcCA9IG1ha2VfcGFyc2VyKFsneG1sLnBhcnNlcnMubm9fc3VjaF9wYXJzZXInXSkKKworCisjID09PT09IFhNTEdlbmVyYXRvcgorCitzdGFydCA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xIj8+XG4nCisKK2NsYXNzIFhtbGdlblRlc3Q6CisgICAgZGVmIHRlc3RfeG1sZ2VuX2Jhc2ljKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnQoImRvYyIsIHt9KQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPjwvZG9jPiIpCisKKyAgICBkZWYgdGVzdF94bWxnZW5fY29udGVudChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnQoImRvYyIsIHt9KQorICAgICAgICBnZW4uY2hhcmFjdGVycygiaHVoZWkiKQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPmh1aGVpPC9kb2M+IikKKworICAgIGRlZiB0ZXN0X3htbGdlbl9waShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oInRlc3QiLCAiZGF0YSIpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnQoImRvYyIsIHt9KQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8P3Rlc3QgZGF0YT8+PGRvYz48L2RvYz4iKQorCisgICAgZGVmIHRlc3RfeG1sZ2VuX2NvbnRlbnRfZXNjYXBlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZG9jIiwge30pCisgICAgICAgIGdlbi5jaGFyYWN0ZXJzKCI8aHVoZWkmIikKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIHN0YXJ0ICsgIjxkb2M+Jmx0O2h1aGVpJmFtcDs8L2RvYz4iKQorCisgICAgZGVmIHRlc3RfeG1sZ2VuX2F0dHJfZXNjYXBlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZG9jIiwgeyJhIjogJyInfSkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZSIsIHsiYSI6ICInIn0pCisgICAgICAgIGdlbi5lbmRFbGVtZW50KCJlIikKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZSIsIHsiYSI6ICInXCIifSkKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImUiKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJlIiwgeyJhIjogIlxuXHJcdCJ9KQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiZSIpCisgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQorICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsKKyAgICAgICAgICAgICgiPGRvYyBhPSdcIic+PGUgYT1cIidcIj48L2U+IgorICAgICAgICAgICAgICI8ZSBhPVwiJyZxdW90O1wiPjwvZT4iCisgICAgICAgICAgICAgIjxlIGE9XCImIzEwOyYjMTM7JiM5O1wiPjwvZT48L2RvYz4iKSkKKworICAgIGRlZiB0ZXN0X3htbGdlbl9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgZW5jb2RpbmdzID0gKCdpc28tODg1OS0xNScsICd1dGYtOCcsCisgICAgICAgICAgICAgICAgICAgICAndXRmLTE2YmUnLCAndXRmLTE2bGUnLAorICAgICAgICAgICAgICAgICAgICAgJ3V0Zi0zMmJlJywgJ3V0Zi0zMmxlJykKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGVuY29kaW5nczoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0LCBlbmNvZGluZz1lbmNvZGluZykKKworICAgICAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZG9jIiwgeyJhIjogdSdcdTIwYWMnfSkKKyAgICAgICAgICAgIGdlbi5jaGFyYWN0ZXJzKHUiXHUyMGFjIikKKyAgICAgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQorICAgICAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgKAorICAgICAgICAgICAgICAgIHUnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iJXMiPz5cbicKKyAgICAgICAgICAgICAgICB1Jzxkb2MgYT0iXHUyMGFjIj5cdTIwYWM8L2RvYz4nICUgZW5jb2RpbmcKKyAgICAgICAgICAgICAgICApLmVuY29kZShlbmNvZGluZywgJ3htbGNoYXJyZWZyZXBsYWNlJykpCisKKyAgICBkZWYgdGVzdF94bWxnZW5fdW5lbmNvZGFibGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQsIGVuY29kaW5nPSdhc2NpaScpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJkb2MiLCB7ImEiOiB1J1x1MjBhYyd9KQorICAgICAgICBnZW4uY2hhcmFjdGVycyh1Ilx1MjBhYyIpCisgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQorICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImFzY2lpIj8+XG4nCisgICAgICAgICAgICAgICAgJzxkb2MgYT0iJiM4MzY0OyI+JiM4MzY0OzwvZG9jPicpCisKKyAgICBkZWYgdGVzdF94bWxnZW5faWdub3JhYmxlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZG9jIiwge30pCisgICAgICAgIGdlbi5pZ25vcmFibGVXaGl0ZXNwYWNlKCIgIikKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz4gPC9kb2M+IikKKworICAgIGRlZiB0ZXN0X3htbGdlbl9ucyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydFByZWZpeE1hcHBpbmcoIm5zMSIsIG5zX3VyaSkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudE5TKChuc191cmksICJkb2MiKSwgIm5zMTpkb2MiLCB7fSkKKyAgICAgICAgIyBhZGQgYW4gdW5xdWFsaWZpZWQgbmFtZQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKE5vbmUsICJ1ZG9jIiksIE5vbmUsIHt9KQorICAgICAgICBnZW4uZW5kRWxlbWVudE5TKChOb25lLCAidWRvYyIpLCBOb25lKQorICAgICAgICBnZW4uZW5kRWxlbWVudE5TKChuc191cmksICJkb2MiKSwgIm5zMTpkb2MiKQorICAgICAgICBnZW4uZW5kUHJlZml4TWFwcGluZygibnMxIikKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArIFwKKyAgICAgICAgICAgKCc8bnMxOmRvYyB4bWxuczpuczE9IiVzIj48dWRvYz48L3Vkb2M+PC9uczE6ZG9jPicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc191cmkpKQorCisgICAgZGVmIHRlc3RfMTQ2MzAyNl8xKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudE5TKChOb25lLCAnYScpLCAnYScsIHsoTm9uZSwgJ2InKTonYyd9KQorICAgICAgICBnZW4uZW5kRWxlbWVudE5TKChOb25lLCAnYScpLCAnYScpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQrJzxhIGI9ImMiPjwvYT4nKQorCisgICAgZGVmIHRlc3RfMTQ2MzAyNl8yKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0UHJlZml4TWFwcGluZyhOb25lLCAncXV4JykKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudE5TKCgncXV4JywgJ2EnKSwgJ2EnLCB7fSkKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnROUygoJ3F1eCcsICdhJyksICdhJykKKyAgICAgICAgZ2VuLmVuZFByZWZpeE1hcHBpbmcoTm9uZSkKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCsnPGEgeG1sbnM9InF1eCI+PC9hPicpCisKKyAgICBkZWYgdGVzdF8xNDYzMDI2XzMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRQcmVmaXhNYXBwaW5nKCdteScsICdxdXgnKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKCdxdXgnLCAnYScpLCAnYScsIHsoTm9uZSwgJ2InKTonYyd9KQorICAgICAgICBnZW4uZW5kRWxlbWVudE5TKCgncXV4JywgJ2EnKSwgJ2EnKQorICAgICAgICBnZW4uZW5kUHJlZml4TWFwcGluZygnbXknKQorICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksCisgICAgICAgICAgICBzdGFydCsnPG15OmEgeG1sbnM6bXk9InF1eCIgYj0iYyI+PC9teTphPicpCisKKyAgICBkZWYgdGVzdF81MDI3XzEoc2VsZik6CisgICAgICAgICMgVGhlIHhtbCBwcmVmaXggKGFzIGluIHhtbDpsYW5nIGJlbG93KSBpcyByZXNlcnZlZCBhbmQgYm91bmQgYnkKKyAgICAgICAgIyBkZWZpbml0aW9uIHRvIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS4gIFhNTEdlbmVyYXRvciBoYWQKKyAgICAgICAgIyBhIGJ1ZyB3aGVyZWJ5IGEgS2V5RXJyb3IgaXMgcmFpc2VkIGJlY2F1c2UgdGhpcyBuYW1lc3BhY2UgaXMgbWlzc2luZworICAgICAgICAjIGZyb20gYSBkaWN0aW9uYXJ5LgorICAgICAgICAjCisgICAgICAgICMgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgYnVnIGJ5IHBhcnNpbmcgYSBkb2N1bWVudC4KKyAgICAgICAgdGVzdF94bWwgPSBTdHJpbmdJTygKKyAgICAgICAgICAgICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4nCisgICAgICAgICAgICAnPGE6ZzEgeG1sbnM6YT0iaHR0cDovL2V4YW1wbGUuY29tL25zIj4nCisgICAgICAgICAgICAgJzxhOmcyIHhtbDpsYW5nPSJlbiI+SGVsbG88L2E6ZzI+JworICAgICAgICAgICAgJzwvYTpnMT4nKQorCisgICAgICAgIHBhcnNlciA9IG1ha2VfcGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldEZlYXR1cmUoZmVhdHVyZV9uYW1lc3BhY2VzLCBUcnVlKQorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoZ2VuKQorICAgICAgICBwYXJzZXIucGFyc2UodGVzdF94bWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPGE6ZzEgeG1sbnM6YT0iaHR0cDovL2V4YW1wbGUuY29tL25zIj4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICc8YTpnMiB4bWw6bGFuZz0iZW4iPkhlbGxvPC9hOmcyPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPC9hOmcxPicpKQorCisgICAgZGVmIHRlc3RfNTAyN18yKHNlbGYpOgorICAgICAgICAjIFRoZSB4bWwgcHJlZml4IChhcyBpbiB4bWw6bGFuZyBiZWxvdykgaXMgcmVzZXJ2ZWQgYW5kIGJvdW5kIGJ5CisgICAgICAgICMgZGVmaW5pdGlvbiB0byBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuICBYTUxHZW5lcmF0b3IgaGFkCisgICAgICAgICMgYSBidWcgd2hlcmVieSBhIEtleUVycm9yIGlzIHJhaXNlZCBiZWNhdXNlIHRoaXMgbmFtZXNwYWNlIGlzIG1pc3NpbmcKKyAgICAgICAgIyBmcm9tIGEgZGljdGlvbmFyeS4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgdGVzdCBkZW1vbnN0cmF0ZXMgdGhlIGJ1ZyBieSBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIHRoZQorICAgICAgICAjIFhNTEdlbmVyYXRvci4KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydFByZWZpeE1hcHBpbmcoJ2EnLCAnaHR0cDovL2V4YW1wbGUuY29tL25zJykKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudE5TKCgnaHR0cDovL2V4YW1wbGUuY29tL25zJywgJ2cxJyksICdnMScsIHt9KQorICAgICAgICBsYW5nX2F0dHIgPSB7KCdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLCAnbGFuZycpOiAnZW4nfQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKCdodHRwOi8vZXhhbXBsZS5jb20vbnMnLCAnZzInKSwgJ2cyJywgbGFuZ19hdHRyKQorICAgICAgICBnZW4uY2hhcmFjdGVycygnSGVsbG8nKQorICAgICAgICBnZW4uZW5kRWxlbWVudE5TKCgnaHR0cDovL2V4YW1wbGUuY29tL25zJywgJ2cyJyksICdnMicpCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKCdodHRwOi8vZXhhbXBsZS5jb20vbnMnLCAnZzEnKSwgJ2cxJykKKyAgICAgICAgZ2VuLmVuZFByZWZpeE1hcHBpbmcoJ2EnKQorICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxhOmcxIHhtbG5zOmE9Imh0dHA6Ly9leGFtcGxlLmNvbS9ucyI+JworICAgICAgICAgICAgICAgICAgICAgICAgICAnPGE6ZzIgeG1sOmxhbmc9ImVuIj5IZWxsbzwvYTpnMj4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYTpnMT4nKSkKKworICAgIGRlZiB0ZXN0X25vX2Nsb3NlX2ZpbGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGRlZiBmdW5jKG91dCk6CisgICAgICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3Iob3V0KQorICAgICAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZG9jIiwge30pCisgICAgICAgIGZ1bmMocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF94bWxnZW5fZnJhZ21lbnQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgIyBEb24ndCBjYWxsIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZm9vIiwgeyJhIjogIjEuMCJ9KQorICAgICAgICBnZW4uY2hhcmFjdGVycygiSGVsbG8iKQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiZm9vIikKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiYmFyIiwgeyJiIjogIjIuMCJ9KQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiYmFyIikKKyAgICAgICAgIyBEb24ndCBjYWxsIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPGZvbyBhPSIxLjAiPkhlbGxvPC9mb28+PGJhciBiPSIyLjAiPjwvYmFyPicpCisKK2NsYXNzIFN0cmluZ1htbGdlblRlc3QoWG1sZ2VuVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGlvY2xhc3MgPSBTdHJpbmdJTworCitjbGFzcyBCeXRlc0lPWG1sZ2VuVGVzdChYbWxnZW5UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW9jbGFzcyA9IGlvLkJ5dGVzSU8KKworY2xhc3MgV3JpdGVyWG1sZ2VuVGVzdChYbWxnZW5UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgaW9jbGFzcyhsaXN0KToKKyAgICAgICAgd3JpdGUgPSBsaXN0LmFwcGVuZAorICAgICAgICBjbG9zZWQgPSBGYWxzZQorCisgICAgICAgIGRlZiBnZXR2YWx1ZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBiJycuam9pbihzZWxmKQorCisKK2NsYXNzIFhNTEZpbHRlckJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maWx0ZXJfYmFzaWMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKyAgICAgICAgZmlsdGVyID0gWE1MRmlsdGVyQmFzZSgpCisgICAgICAgIGZpbHRlci5zZXRDb250ZW50SGFuZGxlcihnZW4pCisKKyAgICAgICAgZmlsdGVyLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBmaWx0ZXIuc3RhcnRFbGVtZW50KCJkb2MiLCB7fSkKKyAgICAgICAgZmlsdGVyLmNoYXJhY3RlcnMoImNvbnRlbnQiKQorICAgICAgICBmaWx0ZXIuaWdub3JhYmxlV2hpdGVzcGFjZSgiICIpCisgICAgICAgIGZpbHRlci5lbmRFbGVtZW50KCJkb2MiKQorICAgICAgICBmaWx0ZXIuZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+Y29udGVudCA8L2RvYz4iKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyAgIGV4cGF0cmVhZGVyIHRlc3RzCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit4bWxfdGVzdF9vdXQgPSBvcGVuKFRFU1RfWE1MRklMRV9PVVQpLnJlYWQoKQorCitjbGFzcyBFeHBhdFJlYWRlclRlc3QoWG1sVGVzdEJhc2UpOgorCisgICAgIyA9PT09PSBYTUxSZWFkZXIgc3VwcG9ydAorCisgICAgZGVmIHRlc3RfZXhwYXRfZmlsZShzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICBwYXJzZXIucGFyc2Uob3BlbihURVNUX1hNTEZJTEUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKworICAgIEByZXF1aXJlc191bmljb2RlX2ZpbGVuYW1lcworICAgIGRlZiB0ZXN0X2V4cGF0X2ZpbGVfdW5pY29kZShzZWxmKToKKyAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTl9VTklDT0RFCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShURVNUX1hNTEZJTEUsIGZuYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZuYW1lKQorCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKyAgICAgICAgcGFyc2VyLnBhcnNlKG9wZW4oZm5hbWUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKworICAgICMgPT09PT0gRFRESGFuZGxlciBzdXBwb3J0CisKKyAgICBjbGFzcyBUZXN0RFRESGFuZGxlcjoKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLl9ub3RhdGlvbnMgPSBbXQorICAgICAgICAgICAgc2VsZi5fZW50aXRpZXMgID0gW10KKworICAgICAgICBkZWYgbm90YXRpb25EZWNsKHNlbGYsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCk6CisgICAgICAgICAgICBzZWxmLl9ub3RhdGlvbnMuYXBwZW5kKChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpKQorCisgICAgICAgIGRlZiB1bnBhcnNlZEVudGl0eURlY2woc2VsZiwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkLCBuZGF0YSk6CisgICAgICAgICAgICBzZWxmLl9lbnRpdGllcy5hcHBlbmQoKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCwgbmRhdGEpKQorCisgICAgZGVmIHRlc3RfZXhwYXRfZHRkaGFuZGxlcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLlRlc3REVERIYW5kbGVyKCkKKyAgICAgICAgcGFyc2VyLnNldERUREhhbmRsZXIoaGFuZGxlcikKKworICAgICAgICBwYXJzZXIuZmVlZCgnPCFET0NUWVBFIGRvYyBbXG4nKQorICAgICAgICBwYXJzZXIuZmVlZCgnICA8IUVOVElUWSBpbWcgU1lTVEVNICJleHBhdC5naWYiIE5EQVRBIEdJRj5cbicpCisgICAgICAgIHBhcnNlci5mZWVkKCcgIDwhTk9UQVRJT04gR0lGIFBVQkxJQyAiLS8vQ29tcHVTZXJ2ZS8vTk9UQVRJT04gR3JhcGhpY3MgSW50ZXJjaGFuZ2UgRm9ybWF0IDg5YS8vRU4iPlxuJykKKyAgICAgICAgcGFyc2VyLmZlZWQoJ10+XG4nKQorICAgICAgICBwYXJzZXIuZmVlZCgnPGRvYz48L2RvYz4nKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5fbm90YXRpb25zLAorICAgICAgICAgICAgWygiR0lGIiwgIi0vL0NvbXB1U2VydmUvL05PVEFUSU9OIEdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdCA4OWEvL0VOIiwgTm9uZSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuX2VudGl0aWVzLCBbKCJpbWciLCBOb25lLCAiZXhwYXQuZ2lmIiwgIkdJRiIpXSkKKworICAgICMgPT09PT0gRW50aXR5UmVzb2x2ZXIgc3VwcG9ydAorCisgICAgY2xhc3MgVGVzdEVudGl0eVJlc29sdmVyOgorCisgICAgICAgIGRlZiByZXNvbHZlRW50aXR5KHNlbGYsIHB1YmxpY0lkLCBzeXN0ZW1JZCk6CisgICAgICAgICAgICBpbnBzcmMgPSBJbnB1dFNvdXJjZSgpCisgICAgICAgICAgICBpbnBzcmMuc2V0Qnl0ZVN0cmVhbShTdHJpbmdJTygiPGVudGl0eS8+IikpCisgICAgICAgICAgICByZXR1cm4gaW5wc3JjCisKKyAgICBkZWYgdGVzdF9leHBhdF9lbnRpdHlyZXNvbHZlcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRFbnRpdHlSZXNvbHZlcihzZWxmLlRlc3RFbnRpdHlSZXNvbHZlcigpKQorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcihYTUxHZW5lcmF0b3IocmVzdWx0KSkKKworICAgICAgICBwYXJzZXIuZmVlZCgnPCFET0NUWVBFIGRvYyBbXG4nKQorICAgICAgICBwYXJzZXIuZmVlZCgnICA8IUVOVElUWSB0ZXN0IFNZU1RFTSAid2hhdGV2ZXIiPlxuJykKKyAgICAgICAgcGFyc2VyLmZlZWQoJ10+XG4nKQorICAgICAgICBwYXJzZXIuZmVlZCgnPGRvYz4mdGVzdDs8L2RvYz4nKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPGRvYz48ZW50aXR5PjwvZW50aXR5PjwvZG9jPiIpCisKKyAgICAjID09PT09IEF0dHJpYnV0ZXMgc3VwcG9ydAorCisgICAgY2xhc3MgQXR0ckdhdGhlcmVyKENvbnRlbnRIYW5kbGVyKToKKworICAgICAgICBkZWYgc3RhcnRFbGVtZW50KHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgICAgIHNlbGYuX2F0dHJzID0gYXR0cnMKKworICAgICAgICBkZWYgc3RhcnRFbGVtZW50TlMoc2VsZiwgbmFtZSwgcW5hbWUsIGF0dHJzKToKKyAgICAgICAgICAgIHNlbGYuX2F0dHJzID0gYXR0cnMKKworICAgIGRlZiB0ZXN0X2V4cGF0X2F0dHJzX2VtcHR5KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgZ2F0aGVyID0gc2VsZi5BdHRyR2F0aGVyZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoZ2F0aGVyKQorCisgICAgICAgIHBhcnNlci5mZWVkKCI8ZG9jLz4iKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYudmVyaWZ5X2VtcHR5X2F0dHJzKGdhdGhlci5fYXR0cnMpCisKKyAgICBkZWYgdGVzdF9leHBhdF9hdHRyc193YXR0cihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIGdhdGhlciA9IHNlbGYuQXR0ckdhdGhlcmVyKCkKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKGdhdGhlcikKKworICAgICAgICBwYXJzZXIuZmVlZCgiPGRvYyBhdHRyPSd2YWwnLz4iKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYudmVyaWZ5X2F0dHJzX3dhdHRyKGdhdGhlci5fYXR0cnMpCisKKyAgICBkZWYgdGVzdF9leHBhdF9uc2F0dHJzX2VtcHR5KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKDEpCisgICAgICAgIGdhdGhlciA9IHNlbGYuQXR0ckdhdGhlcmVyKCkKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKGdhdGhlcikKKworICAgICAgICBwYXJzZXIuZmVlZCgiPGRvYy8+IikKKyAgICAgICAgcGFyc2VyLmNsb3NlKCkKKworICAgICAgICBzZWxmLnZlcmlmeV9lbXB0eV9uc2F0dHJzKGdhdGhlci5fYXR0cnMpCisKKyAgICBkZWYgdGVzdF9leHBhdF9uc2F0dHJzX3dhdHRyKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKDEpCisgICAgICAgIGdhdGhlciA9IHNlbGYuQXR0ckdhdGhlcmVyKCkKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKGdhdGhlcikKKworICAgICAgICBwYXJzZXIuZmVlZCgiPGRvYyB4bWxuczpucz0nJXMnIG5zOmF0dHI9J3ZhbCcvPiIgJSBuc191cmkpCisgICAgICAgIHBhcnNlci5jbG9zZSgpCisKKyAgICAgICAgYXR0cnMgPSBnYXRoZXIuX2F0dHJzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRMZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lcygpLCBbKG5zX3VyaSwgImF0dHIiKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYXR0cnMuZ2V0UU5hbWVzKCkgPT0gW10gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdHRycy5nZXRRTmFtZXMoKSA9PSBbIm5zOmF0dHIiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGF0dHJzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGF0dHJzLmhhc19rZXkoKG5zX3VyaSwgImF0dHIiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIikpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSwgMjUpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5pdGVtcygpLCBbKChuc191cmksICJhdHRyIiksICJ2YWwiKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMudmFsdWVzKCksIFsidmFsIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0VmFsdWUoKG5zX3VyaSwgImF0dHIiKSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzWyhuc191cmksICJhdHRyIildLCAidmFsIikKKworICAgICMgPT09PT0gSW5wdXRTb3VyY2Ugc3VwcG9ydAorCisgICAgZGVmIHRlc3RfZXhwYXRfaW5wc291cmNlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCisgICAgICAgIHBhcnNlci5wYXJzZShURVNUX1hNTEZJTEUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQorCisgICAgZGVmIHRlc3RfZXhwYXRfaW5wc291cmNlX3N5c2lkKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCisgICAgICAgIHBhcnNlci5wYXJzZShJbnB1dFNvdXJjZShURVNUX1hNTEZJTEUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKworICAgIEByZXF1aXJlc191bmljb2RlX2ZpbGVuYW1lcworICAgIGRlZiB0ZXN0X2V4cGF0X2lucHNvdXJjZV9zeXNpZF91bmljb2RlKHNlbGYpOgorICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOX1VOSUNPREUKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKFRFU1RfWE1MRklMRSwgZm5hbWUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgZm5hbWUpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICBwYXJzZXIucGFyc2UoSW5wdXRTb3VyY2UoZm5hbWUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKworICAgIGRlZiB0ZXN0X2V4cGF0X2lucHNvdXJjZV9zdHJlYW0oc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKyAgICAgICAgaW5wc3JjID0gSW5wdXRTb3VyY2UoKQorICAgICAgICBpbnBzcmMuc2V0Qnl0ZVN0cmVhbShvcGVuKFRFU1RfWE1MRklMRSkpCisgICAgICAgIHBhcnNlci5wYXJzZShpbnBzcmMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQorCisgICAgIyA9PT09PSBJbmNyZW1lbnRhbFBhcnNlciBzdXBwb3J0CisKKyAgICBkZWYgdGVzdF9leHBhdF9pbmNyZW1lbnRhbChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKworICAgICAgICBwYXJzZXIuZmVlZCgiPGRvYz4iKQorICAgICAgICBwYXJzZXIuZmVlZCgiPC9kb2M+IikKKyAgICAgICAgcGFyc2VyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPjwvZG9jPiIpCisKKyAgICBkZWYgdGVzdF9leHBhdF9pbmNyZW1lbnRhbF9yZXNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKworICAgICAgICBwYXJzZXIuZmVlZCgiPGRvYz4iKQorICAgICAgICBwYXJzZXIuZmVlZCgidGV4dCIpCisKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICBwYXJzZXIucmVzZXQoKQorCisgICAgICAgIHBhcnNlci5mZWVkKCI8ZG9jPiIpCisgICAgICAgIHBhcnNlci5mZWVkKCJ0ZXh0IikKKyAgICAgICAgcGFyc2VyLmZlZWQoIjwvZG9jPiIpCisgICAgICAgIHBhcnNlci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz50ZXh0PC9kb2M+IikKKworICAgICMgPT09PT0gTG9jYXRvciBzdXBwb3J0CisKKyAgICBkZWYgdGVzdF9leHBhdF9sb2NhdG9yX25vaW5mbyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKworICAgICAgICBwYXJzZXIuZmVlZCgiPGRvYz4iKQorICAgICAgICBwYXJzZXIuZmVlZCgiPC9kb2M+IikKKyAgICAgICAgcGFyc2VyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRTeXN0ZW1JZCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRQdWJsaWNJZCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRMaW5lTnVtYmVyKCksIDEpCisKKyAgICBkZWYgdGVzdF9leHBhdF9sb2NhdG9yX3dpdGhpbmZvKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICBwYXJzZXIucGFyc2UoVEVTVF9YTUxGSUxFKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmdldFN5c3RlbUlkKCksIFRFU1RfWE1MRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0UHVibGljSWQoKSwgTm9uZSkKKworICAgIEByZXF1aXJlc191bmljb2RlX2ZpbGVuYW1lcworICAgIGRlZiB0ZXN0X2V4cGF0X2xvY2F0b3Jfd2l0aGluZm9fdW5pY29kZShzZWxmKToKKyAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTl9VTklDT0RFCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShURVNUX1hNTEZJTEUsIGZuYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZuYW1lKQorCisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCisgICAgICAgIHBhcnNlci5wYXJzZShmbmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRTeXN0ZW1JZCgpLCBmbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0UHVibGljSWQoKSwgTm9uZSkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyAgIGVycm9yIHJlcG9ydGluZworIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgRXJyb3JSZXBvcnRpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9leHBhdF9pbnBzb3VyY2VfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoQ29udGVudEhhbmRsZXIoKSkgIyBkbyBub3RoaW5nCisgICAgICAgIHNvdXJjZSA9IElucHV0U291cmNlKCkKKyAgICAgICAgc291cmNlLnNldEJ5dGVTdHJlYW0oU3RyaW5nSU8oIjxmb28gYmFyIGZvb2Jhcj4iKSkgICAjaWxsLWZvcm1lZAorICAgICAgICBuYW1lID0gImEgZmlsZSBuYW1lIgorICAgICAgICBzb3VyY2Uuc2V0U3lzdGVtSWQobmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLnBhcnNlKHNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAgICAgIGV4Y2VwdCBTQVhFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZ2V0U3lzdGVtSWQoKSwgbmFtZSkKKworICAgIGRlZiB0ZXN0X2V4cGF0X2luY29tcGxldGUoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoQ29udGVudEhhbmRsZXIoKSkgIyBkbyBub3RoaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNBWFBhcnNlRXhjZXB0aW9uLCBwYXJzZXIucGFyc2UsIFN0cmluZ0lPKCI8Zm9vPiIpKQorCisgICAgZGVmIHRlc3Rfc2F4X3BhcnNlX2V4Y2VwdGlvbl9zdHIoc2VsZik6CisgICAgICAgICMgcGFzcyB2YXJpb3VzIHZhbHVlcyBmcm9tIGEgbG9jYXRvciB0byB0aGUgU0FYUGFyc2VFeGNlcHRpb24gdG8KKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgX19zdHJfXygpIGRvZXNuJ3QgZmFsbCBhcGFydCB3aGVuIE5vbmUgaXMKKyAgICAgICAgIyBwYXNzZWQgaW5zdGVhZCBvZiBhbiBpbnRlZ2VyIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIKKyAgICAgICAgIworICAgICAgICAjIHVzZSAibm9ybWFsIiB2YWx1ZXMgZm9yIHRoZSBsb2NhdG9yOgorICAgICAgICBzdHIoU0FYUGFyc2VFeGNlcHRpb24oIm1lc3NhZ2UiLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5EdW1teUxvY2F0b3IoMSwgMSkpKQorICAgICAgICAjIHVzZSBOb25lIGZvciB0aGUgbGluZSBudW1iZXI6CisgICAgICAgIHN0cihTQVhQYXJzZUV4Y2VwdGlvbigibWVzc2FnZSIsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkR1bW15TG9jYXRvcihOb25lLCAxKSkpCisgICAgICAgICMgdXNlIE5vbmUgZm9yIHRoZSBjb2x1bW4gbnVtYmVyOgorICAgICAgICBzdHIoU0FYUGFyc2VFeGNlcHRpb24oIm1lc3NhZ2UiLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5EdW1teUxvY2F0b3IoMSwgTm9uZSkpKQorICAgICAgICAjIHVzZSBOb25lIGZvciBib3RoOgorICAgICAgICBzdHIoU0FYUGFyc2VFeGNlcHRpb24oIm1lc3NhZ2UiLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5EdW1teUxvY2F0b3IoTm9uZSwgTm9uZSkpKQorCisgICAgY2xhc3MgRHVtbXlMb2NhdG9yOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZW5vLCBjb2xubyk6CisgICAgICAgICAgICBzZWxmLl9saW5lbm8gPSBsaW5lbm8KKyAgICAgICAgICAgIHNlbGYuX2NvbG5vID0gY29sbm8KKworICAgICAgICBkZWYgZ2V0UHVibGljSWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gInB1YmlkIgorCisgICAgICAgIGRlZiBnZXRTeXN0ZW1JZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAic3lzaWQiCisKKyAgICAgICAgZGVmIGdldExpbmVOdW1iZXIoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbGluZW5vCisKKyAgICAgICAgZGVmIGdldENvbHVtbk51bWJlcihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xubworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyAgIHhtbHJlYWRlciB0ZXN0cworIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgWG1sUmVhZGVyVGVzdChYbWxUZXN0QmFzZSk6CisKKyAgICAjID09PT09IEF0dHJpYnV0ZXNJbXBsCisgICAgZGVmIHRlc3RfYXR0cnNfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5X2VtcHR5X2F0dHJzKEF0dHJpYnV0ZXNJbXBsKHt9KSkKKworICAgIGRlZiB0ZXN0X2F0dHJzX3dhdHRyKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmeV9hdHRyc193YXR0cihBdHRyaWJ1dGVzSW1wbCh7ImF0dHIiIDogInZhbCJ9KSkKKworICAgIGRlZiB0ZXN0X25zYXR0cnNfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5X2VtcHR5X25zYXR0cnMoQXR0cmlidXRlc05TSW1wbCh7fSwge30pKQorCisgICAgZGVmIHRlc3RfbnNhdHRyc193YXR0cihzZWxmKToKKyAgICAgICAgYXR0cnMgPSBBdHRyaWJ1dGVzTlNJbXBsKHsobnNfdXJpLCAiYXR0ciIpIDogInZhbCJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhuc191cmksICJhdHRyIikgOiAibnM6YXR0ciJ9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TGVuZ3RoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZXMoKSwgWyhuc191cmksICJhdHRyIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFFOYW1lcygpLCBbIm5zOmF0dHIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXR0cnMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXR0cnMuaGFzX2tleSgobnNfdXJpLCAiYXR0ciIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5rZXlzKCksIFsobnNfdXJpLCAiYXR0ciIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpLCAyNSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLml0ZW1zKCksIFsoKG5zX3VyaSwgImF0dHIiKSwgInZhbCIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy52YWx1ZXMoKSwgWyJ2YWwiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRWYWx1ZSgobnNfdXJpLCAiYXR0ciIpKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0VmFsdWVCeVFOYW1lKCJuczphdHRyIiksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVCeVFOYW1lKCJuczphdHRyIiksIChuc191cmksICJhdHRyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnNbKG5zX3VyaSwgImF0dHIiKV0sICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFFOYW1lQnlOYW1lKChuc191cmksICJhdHRyIikpLCAibnM6YXR0ciIpCisKKworICAgICMgRHVyaW5nIHRoZSBkZXZlbG9wbWVudCBvZiBQeXRob24gMi41LCBhbiBhdHRlbXB0IHRvIG1vdmUgdGhlICJ4bWwiCisgICAgIyBwYWNrYWdlIGltcGxlbWVudGF0aW9uIHRvIGEgbmV3IHBhY2thZ2UgKCJ4bWxjb3JlIikgcHJvdmVkIHBhaW5mdWwuCisgICAgIyBUaGUgZ29hbCBvZiB0aGlzIGNoYW5nZSB3YXMgdG8gYWxsb3cgYXBwbGljYXRpb25zIHRvIGJlIGFibGUgdG8KKyAgICAjIG9idGFpbiBhbmQgcmVseSBvbiBiZWhhdmlvciBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBpbXBsZW1lbnRhdGlvbgorICAgICMgb2YgdGhlIFhNTCBzdXBwb3J0IHdpdGhvdXQgbmVlZGluZyB0byBiZSBjb25jZXJuZWQgYWJvdXQgdGhlCisgICAgIyBhdmFpbGFiaWxpdHkgb2YgdGhlIFB5WE1MIGltcGxlbWVudGF0aW9uLgorICAgICMKKyAgICAjIFdoaWxlIHRoZSBleGlzdGluZyBpbXBvcnQgaGFja2VyeSBpbiBMaWIveG1sL19faW5pdF9fLnB5IGNhbiBjYXVzZQorICAgICMgUHlYTUwncyBfeG1scHVzIHBhY2thZ2UgdG8gc3VwcGxhbnQgdGhlICJ4bWwiIHBhY2thZ2UsIHRoYXQgb25seQorICAgICMgd29ya3MgYmVjYXVzZSBlaXRoZXIgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgInhtbCIgcGFja2FnZSBuYW1lIGZvcgorICAgICMgaW1wb3J0cy4KKyAgICAjCisgICAgIyBUaGUgbW92ZSByZXN1bHRlZCBpbiBhIG51bWJlciBvZiBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAjIHRoZSBpbXBvcnQgbWFjaGluZXJ5J3MgInBhY2thZ2UgY29udGV4dCIgaXMgYmFzZWQgb24gdGhlIG5hbWUgdGhhdCdzCisgICAgIyBiZWluZyBpbXBvcnRlZCByYXRoZXIgdGhhbiB0aGUgX19uYW1lX18gb2YgdGhlIGFjdHVhbCBwYWNrYWdlCisgICAgIyBjb250YWlubWVudDsgaXQgd2Fzbid0IHBvc3NpYmxlIGZvciB0aGUgInhtbCIgcGFja2FnZSB0byBiZSByZXBsYWNlZAorICAgICMgYnkgYSBzaW1wbGUgbW9kdWxlIHRoYXQgaW5kaXJlY3RlZCBpbXBvcnRzIHRvIHRoZSAieG1sY29yZSIgcGFja2FnZS4KKyAgICAjCisgICAgIyBUaGUgZm9sbG93aW5nIHR3byB0ZXN0cyBleGVyY2lzZWQgYnVncyB0aGF0IHdlcmUgaW50cm9kdWNlZCBpbiB0aGF0CisgICAgIyBhdHRlbXB0LiAgS2VlcGluZyB0aGVzZSB0ZXN0cyBhcm91bmQgd2lsbCBoZWxwIGRldGVjdCBwcm9ibGVtcyB3aXRoCisgICAgIyBvdGhlciBhdHRlbXB0cyB0byBwcm92aWRlIHJlbGlhYmxlIGFjY2VzcyB0byB0aGUgc3RhbmRhcmQgbGlicmFyeSdzCisgICAgIyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgWE1MIHN1cHBvcnQuCisKKyAgICBkZWYgdGVzdF9zZl8xNTExNDk3KHNlbGYpOgorICAgICAgICAjIEJ1ZyByZXBvcnQ6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi8xNTExNDk3CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgb2xkX21vZHVsZXMgPSBzeXMubW9kdWxlcy5jb3B5KCkKKyAgICAgICAgZm9yIG1vZG5hbWUgaW4gc3lzLm1vZHVsZXMua2V5cygpOgorICAgICAgICAgICAgaWYgbW9kbmFtZS5zdGFydHN3aXRoKCJ4bWwuIik6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZG5hbWVdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCB4bWwuc2F4LmV4cGF0cmVhZGVyCisgICAgICAgICAgICBtb2R1bGUgPSB4bWwuc2F4LmV4cGF0cmVhZGVyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgInhtbC5zYXguZXhwYXRyZWFkZXIiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLm1vZHVsZXMudXBkYXRlKG9sZF9tb2R1bGVzKQorCisgICAgZGVmIHRlc3Rfc2ZfMTUxMzYxMShzZWxmKToKKyAgICAgICAgIyBCdWcgcmVwb3J0OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvMTUxMzYxMQorICAgICAgICBzaW8gPSBTdHJpbmdJTygiaW52YWxpZCIpCisgICAgICAgIHBhcnNlciA9IG1ha2VfcGFyc2VyKCkKKyAgICAgICAgZnJvbSB4bWwuc2F4IGltcG9ydCBTQVhQYXJzZUV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTQVhQYXJzZUV4Y2VwdGlvbiwgcGFyc2VyLnBhcnNlLCBzaW8pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChNYWtlUGFyc2VyVGVzdCwKKyAgICAgICAgICAgICAgICAgU2F4dXRpbHNUZXN0LAorICAgICAgICAgICAgICAgICBTdHJpbmdYbWxnZW5UZXN0LAorICAgICAgICAgICAgICAgICBCeXRlc0lPWG1sZ2VuVGVzdCwKKyAgICAgICAgICAgICAgICAgV3JpdGVyWG1sZ2VuVGVzdCwKKyAgICAgICAgICAgICAgICAgRXhwYXRSZWFkZXJUZXN0LAorICAgICAgICAgICAgICAgICBFcnJvclJlcG9ydGluZ1Rlc3QsCisgICAgICAgICAgICAgICAgIFhtbFJlYWRlclRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1ODNlMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CkBAIC0wLDAgKzEsNjY0IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNoZWNrX3N5bnRheF9lcnJvciwgY2hlY2tfcHkza193YXJuaW5ncywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdAorCisKK2NsYXNzIFNjb3BlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RTaW1wbGVOZXN0aW5nKHNlbGYpOgorCisgICAgICAgIGRlZiBtYWtlX2FkZGVyKHgpOgorICAgICAgICAgICAgZGVmIGFkZGVyKHkpOgorICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeQorICAgICAgICAgICAgcmV0dXJuIGFkZGVyCisKKyAgICAgICAgaW5jID0gbWFrZV9hZGRlcigxKQorICAgICAgICBwbHVzMTAgPSBtYWtlX2FkZGVyKDEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5jKDEpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsdXMxMCgtMiksIDgpCisKKyAgICBkZWYgdGVzdEV4dHJhTmVzdGluZyhzZWxmKToKKworICAgICAgICBkZWYgbWFrZV9hZGRlcjIoeCk6CisgICAgICAgICAgICBkZWYgZXh0cmEoKTogIyBjaGVjayBmcmVldmFycyBwYXNzaW5nIHRocm91Z2ggbm9uLXVzZSBzY29wZXMKKyAgICAgICAgICAgICAgICBkZWYgYWRkZXIoeSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeQorICAgICAgICAgICAgICAgIHJldHVybiBhZGRlcgorICAgICAgICAgICAgcmV0dXJuIGV4dHJhKCkKKworICAgICAgICBpbmMgPSBtYWtlX2FkZGVyMigxKQorICAgICAgICBwbHVzMTAgPSBtYWtlX2FkZGVyMigxMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluYygxKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbHVzMTAoLTIpLCA4KQorCisgICAgZGVmIHRlc3RTaW1wbGVBbmRSZWJpbmRpbmcoc2VsZik6CisKKyAgICAgICAgZGVmIG1ha2VfYWRkZXIzKHgpOgorICAgICAgICAgICAgZGVmIGFkZGVyKHkpOgorICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeQorICAgICAgICAgICAgeCA9IHggKyAxICMgY2hlY2sgdHJhY2tpbmcgb2YgYXNzaWdubWVudCB0byB4IGluIGRlZmluaW5nIHNjb3BlCisgICAgICAgICAgICByZXR1cm4gYWRkZXIKKworICAgICAgICBpbmMgPSBtYWtlX2FkZGVyMygwKQorICAgICAgICBwbHVzMTAgPSBtYWtlX2FkZGVyMyg5KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5jKDEpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsdXMxMCgtMiksIDgpCisKKyAgICBkZWYgdGVzdE5lc3RpbmdHbG9iYWxOb0ZyZWUoc2VsZik6CisKKyAgICAgICAgZGVmIG1ha2VfYWRkZXI0KCk6ICMgWFhYIGFkZCBleHRhIGxldmVsIG9mIGluZGlyZWN0aW9uCisgICAgICAgICAgICBkZWYgbmVzdCgpOgorICAgICAgICAgICAgICAgIGRlZiBuZXN0KCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBhZGRlcih5KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxfeCArIHkgIyBjaGVjayB0aGF0IHBsYWluIG9sZCBnbG9iYWxzIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIG5lc3QoKQorICAgICAgICAgICAgcmV0dXJuIG5lc3QoKQorCisgICAgICAgIGdsb2JhbF94ID0gMQorICAgICAgICBhZGRlciA9IG1ha2VfYWRkZXI0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRlcigxKSwgMikKKworICAgICAgICBnbG9iYWxfeCA9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkZXIoLTIpLCA4KQorCisgICAgZGVmIHRlc3ROZXN0aW5nVGhyb3VnaENsYXNzKHNlbGYpOgorCisgICAgICAgIGRlZiBtYWtlX2FkZGVyNSh4KToKKyAgICAgICAgICAgIGNsYXNzIEFkZGVyOgorICAgICAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB5KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggKyB5CisgICAgICAgICAgICByZXR1cm4gQWRkZXIoKQorCisgICAgICAgIGluYyA9IG1ha2VfYWRkZXI1KDEpCisgICAgICAgIHBsdXMxMCA9IG1ha2VfYWRkZXI1KDEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5jKDEpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsdXMxMCgtMiksIDgpCisKKyAgICBkZWYgdGVzdE5lc3RpbmdQbHVzRnJlZVJlZlRvR2xvYmFsKHNlbGYpOgorCisgICAgICAgIGRlZiBtYWtlX2FkZGVyNih4KToKKyAgICAgICAgICAgIGdsb2JhbCBnbG9iYWxfbmVzdF94CisgICAgICAgICAgICBkZWYgYWRkZXIoeSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbF9uZXN0X3ggKyB5CisgICAgICAgICAgICBnbG9iYWxfbmVzdF94ID0geAorICAgICAgICAgICAgcmV0dXJuIGFkZGVyCisKKyAgICAgICAgaW5jID0gbWFrZV9hZGRlcjYoMSkKKyAgICAgICAgcGx1czEwID0gbWFrZV9hZGRlcjYoMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDExKSAjIHRoZXJlJ3Mgb25seSBvbmUgZ2xvYmFsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKC0yKSwgOCkKKworICAgIGRlZiB0ZXN0TmVhcmVzdEVuY2xvc2luZ1Njb3BlKHNlbGYpOgorCisgICAgICAgIGRlZiBmKHgpOgorICAgICAgICAgICAgZGVmIGcoeSk6CisgICAgICAgICAgICAgICAgeCA9IDQyICMgY2hlY2sgdGhhdCB0aGlzIG1hc2tzIGJpbmRpbmcgaW4gZigpCisgICAgICAgICAgICAgICAgZGVmIGgoeik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICsgegorICAgICAgICAgICAgICAgIHJldHVybiBoCisgICAgICAgICAgICByZXR1cm4gZygyKQorCisgICAgICAgIHRlc3RfZnVuYyA9IGYoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9mdW5jKDUpLCA0NykKKworICAgIGRlZiB0ZXN0TWl4ZWRGcmVldmFyc0FuZENlbGx2YXJzKHNlbGYpOgorCisgICAgICAgIGRlZiBpZGVudGl0eSh4KToKKyAgICAgICAgICAgIHJldHVybiB4CisKKyAgICAgICAgZGVmIGYoeCwgeSwgeik6CisgICAgICAgICAgICBkZWYgZyhhLCBiLCBjKToKKyAgICAgICAgICAgICAgICBhID0gYSArIHggIyAzCisgICAgICAgICAgICAgICAgZGVmIGgoKToKKyAgICAgICAgICAgICAgICAgICAgIyB6ICogKDQgKyA5KQorICAgICAgICAgICAgICAgICAgICAjIDMgKiAxMworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWRlbnRpdHkoeiAqIChiICsgeSkpCisgICAgICAgICAgICAgICAgeSA9IGMgKyB6ICMgOQorICAgICAgICAgICAgICAgIHJldHVybiBoCisgICAgICAgICAgICByZXR1cm4gZworCisgICAgICAgIGcgPSBmKDEsIDIsIDMpCisgICAgICAgIGggPSBnKDIsIDQsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCgpLCAzOSkKKworICAgIGRlZiB0ZXN0RnJlZVZhckluTWV0aG9kKHNlbGYpOgorCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBtZXRob2RfYW5kX3ZhciA9ICJ2YXIiCisgICAgICAgICAgICBjbGFzcyBUZXN0OgorICAgICAgICAgICAgICAgIGRlZiBtZXRob2RfYW5kX3ZhcihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtZXRob2QiCisgICAgICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2RfYW5kX3ZhcgorICAgICAgICAgICAgICAgIGRlZiBhY3R1YWxfZ2xvYmFsKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyKCJnbG9iYWwiKQorICAgICAgICAgICAgICAgIGRlZiBzdHIoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIoc2VsZikKKyAgICAgICAgICAgIHJldHVybiBUZXN0KCkKKworICAgICAgICB0ID0gdGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50ZXN0KCksICJ2YXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWV0aG9kX2FuZF92YXIoKSwgIm1ldGhvZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5hY3R1YWxfZ2xvYmFsKCksICJnbG9iYWwiKQorCisgICAgICAgIG1ldGhvZF9hbmRfdmFyID0gInZhciIKKyAgICAgICAgY2xhc3MgVGVzdDoKKyAgICAgICAgICAgICMgdGhpcyBjbGFzcyBpcyBub3QgbmVzdGVkLCBzbyB0aGUgcnVsZXMgYXJlIGRpZmZlcmVudAorICAgICAgICAgICAgZGVmIG1ldGhvZF9hbmRfdmFyKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAibWV0aG9kIgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZF9hbmRfdmFyCisgICAgICAgICAgICBkZWYgYWN0dWFsX2dsb2JhbChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKCJnbG9iYWwiKQorICAgICAgICAgICAgZGVmIHN0cihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYpCisKKyAgICAgICAgdCA9IFRlc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudGVzdCgpLCAidmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1ldGhvZF9hbmRfdmFyKCksICJtZXRob2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuYWN0dWFsX2dsb2JhbCgpLCAiZ2xvYmFsIikKKworICAgIGRlZiB0ZXN0UmVjdXJzaW9uKHNlbGYpOgorCisgICAgICAgIGRlZiBmKHgpOgorICAgICAgICAgICAgZGVmIGZhY3Qobik6CisgICAgICAgICAgICAgICAgaWYgbiA9PSAwOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuICogZmFjdChuIC0gMSkKKyAgICAgICAgICAgIGlmIHggPj0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFjdCh4KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAieCBtdXN0IGJlID49IDAiCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDYpLCA3MjApCisKKworICAgIGRlZiB0ZXN0VW5vcHRpbWl6ZWROYW1lc3BhY2VzKHNlbGYpOgorCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiIiJcCitkZWYgdW5vcHRpbWl6ZWRfY2xhc2gxKHN0cmlwKToKKyAgICBkZWYgZihzKToKKyAgICAgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKKyAgICAgICAgcmV0dXJuIHN0cmlwKHMpICMgYW1iaWd1aXR5OiBmcmVlIG9yIGxvY2FsCisgICAgcmV0dXJuIGYKKyIiIikKKworICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiXAorZGVmIHVub3B0aW1pemVkX2NsYXNoMigpOgorICAgIGZyb20gc3RyaW5nIGltcG9ydCAqCisgICAgZGVmIGYocyk6CisgICAgICAgIHJldHVybiBzdHJpcChzKSAjIGFtYmlndWl0eTogZ2xvYmFsIG9yIGxvY2FsCisgICAgcmV0dXJuIGYKKyIiIikKKworICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiXAorZGVmIHVub3B0aW1pemVkX2NsYXNoMigpOgorICAgIGZyb20gc3RyaW5nIGltcG9ydCAqCisgICAgZGVmIGcoKToKKyAgICAgICAgZGVmIGYocyk6CisgICAgICAgICAgICByZXR1cm4gc3RyaXAocykgIyBhbWJpZ3VpdHk6IGdsb2JhbCBvciBsb2NhbAorICAgICAgICByZXR1cm4gZgorIiIiKQorCisgICAgICAgICMgWFhYIGNvdWxkIGFsbG93IHRoaXMgZm9yIGV4ZWMgd2l0aCBjb25zdCBhcmd1bWVudCwgYnV0IHdoYXQncyB0aGUgcG9pbnQKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICIiIlwKK2RlZiBlcnJvcih5KToKKyAgICBleGVjICJhID0gMSIKKyAgICBkZWYgZih4KToKKyAgICAgICAgcmV0dXJuIHggKyB5CisgICAgcmV0dXJuIGYKKyIiIikKKworICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiXAorZGVmIGYoeCk6CisgICAgZGVmIGcoKToKKyAgICAgICAgcmV0dXJuIHgKKyAgICBkZWwgeCAjIGNhbid0IGRlbCBuYW1lCisiIiIpCisKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICIiIlwKK2RlZiBmKCk6CisgICAgZGVmIGcoKToKKyAgICAgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKKyAgICAgICAgcmV0dXJuIHN0cmlwICMgZ2xvYmFsIG9yIGxvY2FsPworIiIiKQorCisgICAgICAgICMgYW5kIHZlcmlmeSBhIGZldyBjYXNlcyB0aGF0IHNob3VsZCB3b3JrCisKKyAgICAgICAgZXhlYyAiIiIKK2RlZiBub3Byb2JsZW0xKCk6CisgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKKyAgICBmID0gbGFtYmRhIHg6eAorCitkZWYgbm9wcm9ibGVtMigpOgorICAgIGZyb20gc3RyaW5nIGltcG9ydCAqCisgICAgZGVmIGYoeCk6CisgICAgICAgIHJldHVybiB4ICsgMQorCitkZWYgbm9wcm9ibGVtMygpOgorICAgIGZyb20gc3RyaW5nIGltcG9ydCAqCisgICAgZGVmIGYoeCk6CisgICAgICAgIGdsb2JhbCB5CisgICAgICAgIHkgPSB4CisiIiIKKworICAgIGRlZiB0ZXN0TGFtYmRhcyhzZWxmKToKKworICAgICAgICBmMSA9IGxhbWJkYSB4OiBsYW1iZGEgeTogeCArIHkKKyAgICAgICAgaW5jID0gZjEoMSkKKyAgICAgICAgcGx1czEwID0gZjEoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5jKDEpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsdXMxMCg1KSwgMTUpCisKKyAgICAgICAgZjIgPSBsYW1iZGEgeDogKGxhbWJkYSA6IGxhbWJkYSB5OiB4ICsgeSkoKQorICAgICAgICBpbmMgPSBmMigxKQorICAgICAgICBwbHVzMTAgPSBmMigxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKDUpLCAxNSkKKworICAgICAgICBmMyA9IGxhbWJkYSB4OiBsYW1iZGEgeTogZ2xvYmFsX3ggKyB5CisgICAgICAgIGdsb2JhbF94ID0gMQorICAgICAgICBpbmMgPSBmMyhOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluYygyKSwgMykKKworICAgICAgICBmOCA9IGxhbWJkYSB4LCB5LCB6OiBsYW1iZGEgYSwgYiwgYzogbGFtYmRhIDogeiAqIChiICsgeSkKKyAgICAgICAgZyA9IGY4KDEsIDIsIDMpCisgICAgICAgIGggPSBnKDIsIDQsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCgpLCAxOCkKKworICAgIGRlZiB0ZXN0VW5ib3VuZExvY2FsKHNlbGYpOgorCisgICAgICAgIGRlZiBlcnJvckluT3V0ZXIoKToKKyAgICAgICAgICAgIHByaW50IHkKKyAgICAgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgICAgIHJldHVybiB5CisgICAgICAgICAgICB5ID0gMQorCisgICAgICAgIGRlZiBlcnJvckluSW5uZXIoKToKKyAgICAgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgICAgIHJldHVybiB5CisgICAgICAgICAgICBpbm5lcigpCisgICAgICAgICAgICB5ID0gMQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuYm91bmRMb2NhbEVycm9yLCBlcnJvckluT3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvciwgZXJyb3JJbklubmVyKQorCisgICAgICAgICMgdGVzdCBmb3IgYnVnICMxNTAxOTM0OiBpbmNvcnJlY3QgTE9BRC9TVE9SRV9HTE9CQUwgZ2VuZXJhdGlvbgorICAgICAgICBleGVjICIiIgorZ2xvYmFsX3ggPSAxCitkZWYgZigpOgorICAgIGdsb2JhbF94ICs9IDEKK3RyeToKKyAgICBmKCkKK2V4Y2VwdCBVbmJvdW5kTG9jYWxFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGZhaWwoJ3Njb3BlIG9mIGdsb2JhbF94IG5vdCBjb3JyZWN0bHkgZGV0ZXJtaW5lZCcpCisiIiIgaW4geydmYWlsJzogc2VsZi5mYWlsfQorCisgICAgZGVmIHRlc3RDb21wbGV4RGVmaW5pdGlvbnMoc2VsZik6CisKKyAgICAgICAgZGVmIG1ha2VSZXR1cm5lcigqbHN0KToKKyAgICAgICAgICAgIGRlZiByZXR1cm5lcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBsc3QKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5lcgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFrZVJldHVybmVyKDEsMiwzKSgpLCAoMSwyLDMpKQorCisgICAgICAgIGRlZiBtYWtlUmV0dXJuZXIyKCoqa3dhcmdzKToKKyAgICAgICAgICAgIGRlZiByZXR1cm5lcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBrd2FyZ3MKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5lcgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFrZVJldHVybmVyMihhPTExKSgpWydhJ10sIDExKQorCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4V2FybmluZykpOgorICAgICAgICAgICAgZXhlYyAiIiJcCitkZWYgbWFrZUFkZFBhaXIoKGEsIGIpKToKKyAgICBkZWYgYWRkUGFpcigoYywgZCkpOgorICAgICAgICByZXR1cm4gKGEgKyBjLCBiICsgZCkKKyAgICByZXR1cm4gYWRkUGFpcgorIiIiIGluIGxvY2FscygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFrZUFkZFBhaXIoKDEsIDIpKSgoMTAwLCAyMDApKSwgKDEwMSwyMDIpKQorCisgICAgZGVmIHRlc3RTY29wZU9mR2xvYmFsU3RtdChzZWxmKToKKyMgRXhhbXBsZXMgcG9zdGVkIGJ5IFNhbXVlbGUgUGVkcm9uaSB0byBweXRob24tZGV2IG9uIDMvMS8yMDAxCisKKyAgICAgICAgZXhlYyAiIiJcCisjIEkKK3ggPSA3CitkZWYgZigpOgorICAgIHggPSAxCisgICAgZGVmIGcoKToKKyAgICAgICAgZ2xvYmFsIHgKKyAgICAgICAgZGVmIGkoKToKKyAgICAgICAgICAgIGRlZiBoKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgIHJldHVybiBoKCkKKyAgICAgICAgcmV0dXJuIGkoKQorICAgIHJldHVybiBnKCkKK3NlbGYuYXNzZXJ0RXF1YWwoZigpLCA3KQorc2VsZi5hc3NlcnRFcXVhbCh4LCA3KQorCisjIElJCit4ID0gNworZGVmIGYoKToKKyAgICB4ID0gMQorICAgIGRlZiBnKCk6CisgICAgICAgIHggPSAyCisgICAgICAgIGRlZiBpKCk6CisgICAgICAgICAgICBkZWYgaCgpOgorICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgICAgICByZXR1cm4gaCgpCisgICAgICAgIHJldHVybiBpKCkKKyAgICByZXR1cm4gZygpCitzZWxmLmFzc2VydEVxdWFsKGYoKSwgMikKK3NlbGYuYXNzZXJ0RXF1YWwoeCwgNykKKworIyBJSUkKK3ggPSA3CitkZWYgZigpOgorICAgIHggPSAxCisgICAgZGVmIGcoKToKKyAgICAgICAgZ2xvYmFsIHgKKyAgICAgICAgeCA9IDIKKyAgICAgICAgZGVmIGkoKToKKyAgICAgICAgICAgIGRlZiBoKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgIHJldHVybiBoKCkKKyAgICAgICAgcmV0dXJuIGkoKQorICAgIHJldHVybiBnKCkKK3NlbGYuYXNzZXJ0RXF1YWwoZigpLCAyKQorc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQorCisjIElWCit4ID0gNworZGVmIGYoKToKKyAgICB4ID0gMworICAgIGRlZiBnKCk6CisgICAgICAgIGdsb2JhbCB4CisgICAgICAgIHggPSAyCisgICAgICAgIGRlZiBpKCk6CisgICAgICAgICAgICBkZWYgaCgpOgorICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgICAgICByZXR1cm4gaCgpCisgICAgICAgIHJldHVybiBpKCkKKyAgICByZXR1cm4gZygpCitzZWxmLmFzc2VydEVxdWFsKGYoKSwgMikKK3NlbGYuYXNzZXJ0RXF1YWwoeCwgMikKKworIyBYWFggd2hhdCBhYm91dCBnbG9iYWwgc3RhdGVtZW50cyBpbiBjbGFzcyBibG9ja3M/CisjIGRvIHRoZXkgYWZmZWN0IG1ldGhvZHM/CisKK3ggPSAxMgorY2xhc3MgR2xvYmFsOgorICAgIGdsb2JhbCB4CisgICAgeCA9IDEzCisgICAgZGVmIHNldChzZWxmLCB2YWwpOgorICAgICAgICB4ID0gdmFsCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHgKKworZyA9IEdsb2JhbCgpCitzZWxmLmFzc2VydEVxdWFsKGcuZ2V0KCksIDEzKQorZy5zZXQoMTUpCitzZWxmLmFzc2VydEVxdWFsKGcuZ2V0KCksIDEzKQorIiIiCisKKyAgICBkZWYgdGVzdExlYWtzKHNlbGYpOgorCisgICAgICAgIGNsYXNzIEZvbzoKKyAgICAgICAgICAgIGNvdW50ID0gMAorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgRm9vLmNvdW50ICs9IDEKKworICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgRm9vLmNvdW50IC09IDEKKworICAgICAgICBkZWYgZjEoKToKKyAgICAgICAgICAgIHggPSBGb28oKQorICAgICAgICAgICAgZGVmIGYyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgIGYyKCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgZjEoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLmNvdW50LCAwKQorCisgICAgZGVmIHRlc3RDbGFzc0FuZEdsb2JhbChzZWxmKToKKworICAgICAgICBleGVjICIiIlwKK2RlZiB0ZXN0KHgpOgorICAgIGNsYXNzIEZvbzoKKyAgICAgICAgZ2xvYmFsIHgKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHkpOgorICAgICAgICAgICAgcmV0dXJuIHggKyB5CisgICAgcmV0dXJuIEZvbygpCisKK3ggPSAwCitzZWxmLmFzc2VydEVxdWFsKHRlc3QoNikoMiksIDgpCit4ID0gLTEKK3NlbGYuYXNzZXJ0RXF1YWwodGVzdCgzKSgyKSwgNSkKKworbG9va2VkX3VwX2J5X2xvYWRfbmFtZSA9IEZhbHNlCitjbGFzcyBYOgorICAgICMgSW1wbGljaXQgZ2xvYmFscyBpbnNpZGUgY2xhc3NlcyBhcmUgYmUgbG9va2VkIHVwIGJ5IExPQURfTkFNRSwgbm90CisgICAgIyBMT0FEX0dMT0JBTC4KKyAgICBsb2NhbHMoKVsnbG9va2VkX3VwX2J5X2xvYWRfbmFtZSddID0gVHJ1ZQorICAgIHBhc3NlZCA9IGxvb2tlZF91cF9ieV9sb2FkX25hbWUKKworc2VsZi5hc3NlcnRUcnVlKFgucGFzc2VkKQorIiIiCisKKyAgICBkZWYgdGVzdExvY2Fsc0Z1bmN0aW9uKHNlbGYpOgorCisgICAgICAgIGRlZiBmKHgpOgorICAgICAgICAgICAgZGVmIGcoeSk6CisgICAgICAgICAgICAgICAgZGVmIGgoeik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB5ICsgegorICAgICAgICAgICAgICAgIHcgPSB4ICsgeQorICAgICAgICAgICAgICAgIHkgKz0gMworICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbHMoKQorICAgICAgICAgICAgcmV0dXJuIGcKKworICAgICAgICBkID0gZigyKSg0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdoJywgZCkKKyAgICAgICAgZGVsIGRbJ2gnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsneCc6IDIsICd5JzogNywgJ3cnOiA2fSkKKworICAgIGRlZiB0ZXN0TG9jYWxzQ2xhc3Moc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgY2FsbGluZyBsb2NhbHMoKSBkb2VzIG5vdCBwb2xsdXRlCisgICAgICAgICMgdGhlIGxvY2FsIG5hbWVzcGFjZSBvZiB0aGUgY2xhc3Mgd2l0aCBmcmVlIHZhcmlhYmxlcy4gIE9sZAorICAgICAgICAjIHZlcnNpb25zIG9mIFB5dGhvbiBoYWQgYSBidWcsIHdoZXJlIGEgZnJlZSB2YXJpYWJsZSBiZWluZworICAgICAgICAjIHBhc3NlZCB0aHJvdWdoIGEgY2xhc3MgbmFtZXNwYWNlIHdvdWxkIGJlIGluc2VydGVkIGludG8KKyAgICAgICAgIyBsb2NhbHMoKSBieSBsb2NhbHMoKSBvciBleGVjIG9yIGEgdHJhY2UgZnVuY3Rpb24uCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgcmVhbCBidWcgbGllcyBpbiBmcmFtZSBjb2RlIHRoYXQgY29waWVzIHZhcmlhYmxlcworICAgICAgICAjIGJldHdlZW4gZmFzdCBsb2NhbHMgYW5kIHRoZSBsb2NhbHMgZGljdCwgZS5nLiB3aGVuIGV4ZWN1dGluZworICAgICAgICAjIGEgdHJhY2UgZnVuY3Rpb24uCisKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIHggPSAxMgorICAgICAgICAgICAgICAgIGRlZiBtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgICAgIGxvY2FscygpCisgICAgICAgICAgICByZXR1cm4gQworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigxKS54LCAxMikKKworICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgeSA9IHgKKyAgICAgICAgICAgICAgICBkZWYgbShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgICAgICB6ID0gbGlzdChsb2NhbHMoKSkKKyAgICAgICAgICAgIHJldHVybiBDCisKKyAgICAgICAgdmFybmFtZXMgPSBmKDEpLnoKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigieCIsIHZhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJ5IiwgdmFybmFtZXMpCisKKyAgICBkZWYgdGVzdExvY2Fsc0NsYXNzX1dpdGhUcmFjZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZTIzNzI4OiBhZnRlciB0aGUgdHJhY2UgZnVuY3Rpb24gcmV0dXJucywgdGhlIGxvY2FscygpCisgICAgICAgICMgZGljdGlvbmFyeSBpcyB1c2VkIHRvIHVwZGF0ZSBhbGwgdmFyaWFibGVzLCB0aGlzIHVzZWQgdG8KKyAgICAgICAgIyBpbmNsdWRlIGZyZWUgdmFyaWFibGVzLiBCdXQgaW4gY2xhc3Mgc3RhdGVtZW50cywgZnJlZQorICAgICAgICAjIHZhcmlhYmxlcyBhcmUgbm90IGluc2VydGVkLi4uCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgc3lzLnNldHRyYWNlKGxhbWJkYSBhLGIsYzpOb25lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB4ID0gMTIKKworICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAxMikgIyBVc2VkIHRvIHJhaXNlIFVuYm91bmRMb2NhbEVycm9yCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKworICAgIGRlZiB0ZXN0Qm91bmRBbmRGcmVlKHNlbGYpOgorICAgICAgICAjIHZhciBpcyBib3VuZCBhbmQgZnJlZSBpbiBjbGFzcworCisgICAgICAgIGRlZiBmKHgpOgorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBkZWYgbShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgICAgICBhID0geAorICAgICAgICAgICAgcmV0dXJuIEMKKworICAgICAgICBpbnN0ID0gZigzKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zdC5hLCBpbnN0Lm0oKSkKKworICAgIGRlZiB0ZXN0SW50ZXJhY3Rpb25XaXRoVHJhY2VGdW5jKHNlbGYpOgorCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgZGVmIHRyYWNlcihhLGIsYyk6CisgICAgICAgICAgICByZXR1cm4gdHJhY2VyCisKKyAgICAgICAgZGVmIGFkYXB0Z2V0dGVyKG5hbWUsIGtsYXNzLCBnZXR0ZXIpOgorICAgICAgICAgICAga2luZCwgZGVzID0gZ2V0dGVyCisgICAgICAgICAgICBpZiBraW5kID09IDE6ICAgICAgICMgQVYgaGFwcGVucyB3aGVuIHN0ZXBwaW5nIGZyb20gdGhpcyBsaW5lIHRvIG5leHQKKyAgICAgICAgICAgICAgICBpZiBkZXMgPT0gIiI6CisgICAgICAgICAgICAgICAgICAgIGRlcyA9ICJfJXNfXyVzIiAlIChrbGFzcy5fX25hbWVfXywgbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGFtYmRhIG9iajogZ2V0YXR0cihvYmosIGRlcykKKworICAgICAgICBjbGFzcyBUZXN0Q2xhc3M6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc3lzLnNldHRyYWNlKHRyYWNlcikKKyAgICAgICAgYWRhcHRnZXR0ZXIoImZvbyIsIFRlc3RDbGFzcywgKDEsICIiKSkKKyAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuc2V0dHJhY2UpCisKKyAgICBkZWYgdGVzdEV2YWxFeGVjRnJlZVZhcnMoc2VsZik6CisKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB4ICsgMQorCisgICAgICAgIGcgPSBmKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgZy5mdW5jX2NvZGUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyBnLmZ1bmNfY29kZSBpbiB7fQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleGVjIHNob3VsZCBoYXZlIGZhaWxlZCwgYmVjYXVzZSBjb2RlIGNvbnRhaW5lZCBmcmVlIHZhcnMiKQorCisgICAgZGVmIHRlc3RMaXN0Q29tcExvY2FsVmFycyhzZWxmKToKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCBiYWQKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICJiYWQgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIgorCisgICAgICAgIGRlZiB4KCk6CisgICAgICAgICAgICBbYmFkIGZvciBzIGluICdhIGInIGZvciBiYWQgaW4gcy5zcGxpdCgpXQorCisgICAgICAgIHgoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCBiYWQKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0RXZhbEZyZWVWYXJzKHNlbGYpOgorCisgICAgICAgIGRlZiBmKHgpOgorICAgICAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgICAgICB4CisgICAgICAgICAgICAgICAgZXZhbCgieCArIDEiKQorICAgICAgICAgICAgcmV0dXJuIGcKKworICAgICAgICBmKDQpKCkKKworICAgIGRlZiB0ZXN0RnJlZWluZ0NlbGwoc2VsZik6CisgICAgICAgICMgVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiBhIGZpbmFsaXplciBhY2Nlc3NlcworICAgICAgICAjIHRoZSBjZWxsIHdoZXJlIHRoZSBvYmplY3Qgd2FzIHN0b3JlZC4KKyAgICAgICAgY2xhc3MgU3BlY2lhbDoKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIG5lc3RlZGNlbGxfZ2V0KCkKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgZ2xvYmFsIG5lc3RlZGNlbGxfZ2V0CisgICAgICAgICAgICBkZWYgbmVzdGVkY2VsbF9nZXQoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYworCisgICAgICAgICAgICBjID0gKFNwZWNpYWwoKSwpCisgICAgICAgICAgICBjID0gMgorCisgICAgICAgIGYoKSAjIHVzZWQgdG8gY3Jhc2ggdGhlIGludGVycHJldGVyLi4uCisKKyAgICBkZWYgdGVzdEdsb2JhbEluUGFyYWxsZWxOZXN0ZWRGdW5jdGlvbnMoc2VsZik6CisgICAgICAgICMgQSBzeW1ib2wgdGFibGUgYnVnIGxlYWtlZCB0aGUgZ2xvYmFsIHN0YXRlbWVudCBmcm9tIG9uZQorICAgICAgICAjIGZ1bmN0aW9uIHRvIG90aGVyIG5lc3RlZCBmdW5jdGlvbnMgaW4gdGhlIHNhbWUgYmxvY2suCisgICAgICAgICMgVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgYSBnbG9iYWwgc3RhdGVtZW50IGluIHRoZSBmaXJzdAorICAgICAgICAjIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgc2Vjb25kIGZ1bmN0aW9uLgorICAgICAgICBDT0RFID0gIiIiZGVmIGYoKToKKyAgICB5ID0gMQorICAgIGRlZiBnKCk6CisgICAgICAgIGdsb2JhbCB5CisgICAgICAgIHJldHVybiB5CisgICAgZGVmIGgoKToKKyAgICAgICAgcmV0dXJuIHkgKyAxCisgICAgcmV0dXJuIGcsIGgKKworeSA9IDkKK2csIGggPSBmKCkKK3Jlc3VsdDkgPSBnKCkKK3Jlc3VsdDIgPSBoKCkKKyIiIgorICAgICAgICBsb2NhbF9ucyA9IHt9CisgICAgICAgIGdsb2JhbF9ucyA9IHt9CisgICAgICAgIGV4ZWMgQ09ERSBpbiBsb2NhbF9ucywgZ2xvYmFsX25zCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgZ2xvYmFsX25zWyJyZXN1bHQyIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOSwgZ2xvYmFsX25zWyJyZXN1bHQ5Il0pCisKKyAgICBkZWYgdGVzdFRvcElzTm90U2lnbmlmaWNhbnQoc2VsZik6CisgICAgICAgICMgU2VlICM5OTk3LgorICAgICAgICBkZWYgdG9wKGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgYigpOgorICAgICAgICAgICAgZ2xvYmFsIGEKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCBjaGVja193YXJuaW5ncygoImltcG9ydCBcKiBvbmx5IGFsbG93ZWQgYXQgbW9kdWxlIGxldmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXhXYXJuaW5nKSk6CisgICAgICAgIHJ1bl91bml0dGVzdChTY29wZVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zY3JpcHRwYWNrYWdlcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NjcmlwdHBhY2thZ2VzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMDJmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zY3JpcHRwYWNrYWdlcy5weQpAQCAtMCwwICsxLDUxIEBACisjIENvcHlyaWdodCAoQykgMjAwMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgU2tpcCB0aGlzIHRlc3QgaWYgYWV0b29scyBkb2VzIG5vdCBleGlzdC4KK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdhZXRvb2xzJykKKworY2xhc3MgVGVzdFNjcmlwdHBhY2thZ2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfdGVzdF9zY3JpcHRwYWNrYWdlKHNlbGYsIHBhY2thZ2UsIHRlc3RvYmplY3Q9MSk6CisgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBjYW4gaW1wb3J0IHRoZSBwYWNrYWdlCisgICAgICAgIG1vZCA9IF9faW1wb3J0X18ocGFja2FnZSkKKyAgICAgICAgIyBUZXN0IHRoYXQgd2UgY2FuIGdldCB0aGUgbWFpbiBldmVudCBjbGFzcworICAgICAgICBrbGFzcyA9IGdldGF0dHIobW9kLCBwYWNrYWdlKQorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBjYW4gaW5zdGFudGlhdGUgdGhhdCBjbGFzcworICAgICAgICB0YWxrZXIgPSBrbGFzcygpCisgICAgICAgIGlmIHRlc3RvYmplY3Q6CisgICAgICAgICAgICAjIFRlc3QgdGhhdCB3ZSBjYW4gZ2V0IGFuIGFwcGxpY2F0aW9uIG9iamVjdAorICAgICAgICAgICAgb2JqID0gbW9kLmFwcGxpY2F0aW9uKDApCisKKyAgICBkZWYgdGVzdF9fYnVpbHRpblN1aXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zY3JpcHRwYWNrYWdlKCdfYnVpbHRpblN1aXRlcycsIHRlc3RvYmplY3Q9MCkKKworICAgIGRlZiB0ZXN0X1N0ZFN1aXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zY3JpcHRwYWNrYWdlKCdTdGRTdWl0ZXMnKQorCisgICAgZGVmIHRlc3RfU3lzdGVtRXZlbnRzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NjcmlwdHBhY2thZ2UoJ1N5c3RlbUV2ZW50cycpCisKKyAgICBkZWYgdGVzdF9GaW5kZXIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2NyaXB0cGFja2FnZSgnRmluZGVyJykKKworICAgIGRlZiB0ZXN0X1Rlcm1pbmFsKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NjcmlwdHBhY2thZ2UoJ1Rlcm1pbmFsJykKKworICAgIGRlZiB0ZXN0X05ldHNjYXBlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NjcmlwdHBhY2thZ2UoJ05ldHNjYXBlJykKKworICAgIGRlZiB0ZXN0X0V4cGxvcmVyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NjcmlwdHBhY2thZ2UoJ0V4cGxvcmVyJykKKworICAgIGRlZiB0ZXN0X0NvZGVXYXJyaW9yKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NjcmlwdHBhY2thZ2UoJ0NvZGVXYXJyaW9yJykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFNjcmlwdHBhY2thZ2VzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzViYmRhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CkBAIC0wLDAgKzEsNjcgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJywgJ3Jpc2NvcycpLAorICAgICAgICAgICAgICAgICAiY2FuJ3QgZWFzaWx5IHRlc3Qgb24gdGhpcyBzeXN0ZW0iKQorY2xhc3MgU2VsZWN0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgTm9wZToKKyAgICAgICAgcGFzcworCisgICAgY2xhc3MgQWxtb3N0OgorICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICdmaWxlbm8nCisKKyAgICBkZWYgdGVzdF9lcnJvcl9jb25kaXRpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5zZWxlY3QsIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LnNlbGVjdCwgW3NlbGYuTm9wZSgpXSwgW10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5zZWxlY3QsIFtzZWxmLkFsbW9zdCgpXSwgW10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5zZWxlY3QsIFtdLCBbXSwgW10sICJub3QgYSBudW1iZXIiKQorCisgICAgZGVmIHRlc3RfcmV0dXJuZWRfbGlzdF9pZGVudGl0eShzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzgzMjkKKyAgICAgICAgciwgdywgeCA9IHNlbGVjdC5zZWxlY3QoW10sIFtdLCBbXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChyLCB3KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHIsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodywgeCkKKworICAgIGRlZiB0ZXN0X3NlbGVjdChzZWxmKToKKyAgICAgICAgY21kID0gJ2ZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvIGVjaG8gdGVzdGluZy4uLjsgc2xlZXAgMTsgZG9uZScKKyAgICAgICAgcCA9IG9zLnBvcGVuKGNtZCwgJ3InKQorICAgICAgICBmb3IgdG91dCBpbiAoMCwgMSwgMiwgNCwgOCwgMTYpICsgKE5vbmUsKSoxMDoKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICd0aW1lb3V0ID0nLCB0b3V0CisgICAgICAgICAgICByZmQsIHdmZCwgeGZkID0gc2VsZWN0LnNlbGVjdChbcF0sIFtdLCBbXSwgdG91dCkKKyAgICAgICAgICAgIGlmIChyZmQsIHdmZCwgeGZkKSA9PSAoW10sIFtdLCBbXSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIChyZmQsIHdmZCwgeGZkKSA9PSAoW3BdLCBbXSwgW10pOgorICAgICAgICAgICAgICAgIGxpbmUgPSBwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgcmVwcihsaW5lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICdFT0YnCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCByZXR1cm4gdmFsdWVzIGZyb20gc2VsZWN0KCk6JywgcmZkLCB3ZmQsIHhmZCkKKyAgICAgICAgcC5jbG9zZSgpCisKKyAgICAjIElzc3VlIDE2MjMwOiBDcmFzaCBvbiBzZWxlY3QgcmVzaXplZCBsaXN0CisgICAgZGVmIHRlc3Rfc2VsZWN0X211dGF0ZWQoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBjbGFzcyBGOgorICAgICAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAgICAgICBkZWwgYVstMV0KKyAgICAgICAgICAgICAgICByZXR1cm4gc3lzLl9fc3Rkb3V0X18uZmlsZW5vKCkKKyAgICAgICAgYVs6XSA9IFtGKCldICogMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3Quc2VsZWN0KFtdLCBhLCBbXSksIChbXSwgYVs6NV0sIFtdKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU2VsZWN0VGVzdENhc2UpCisgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zZXQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiMjZlZAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NldC5weQpAQCAtMCwwICsxLDE4MzIgQEAKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IGdjCitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgY29weQoraW1wb3J0IHBpY2tsZQorZnJvbSByYW5kb20gaW1wb3J0IHJhbmRyYW5nZSwgc2h1ZmZsZQoraW1wb3J0IHN5cworaW1wb3J0IGNvbGxlY3Rpb25zCisKK2NsYXNzIFBhc3NUaHJ1KEV4Y2VwdGlvbik6CisgICAgcGFzcworCitkZWYgY2hlY2tfcGFzc190aHJ1KCk6CisgICAgcmFpc2UgUGFzc1RocnUKKyAgICB5aWVsZCAxCisKK2NsYXNzIEJhZENtcDoKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiAxCisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKworY2xhc3MgUmVwcldyYXBwZXI6CisgICAgJ1VzZWQgdG8gdGVzdCBzZWxmLXJlZmVyZW50aWFsIHJlcHIoKSBjYWxscycKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiByZXByKHNlbGYudmFsdWUpCisKK2NsYXNzIEhhc2hDb3VudGluZ0ludChpbnQpOgorICAgICdpbnQtbGlrZSBvYmplY3QgdGhhdCBjb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBfX2hhc2hfXyBpcyBjYWxsZWQnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5oYXNoX2NvdW50ID0gMAorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgc2VsZi5oYXNoX2NvdW50ICs9IDEKKyAgICAgICAgcmV0dXJuIGludC5fX2hhc2hfXyhzZWxmKQorCitjbGFzcyBUZXN0Sm9pbnRPcHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdHMgY29tbW9uIHRvIGJvdGggc2V0IGFuZCBmcm96ZW5zZXQKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi53b3JkID0gd29yZCA9ICdzaW1zYWxhYmltJworICAgICAgICBzZWxmLm90aGVyd29yZCA9ICdtYWRhZ2FzY2FyJworICAgICAgICBzZWxmLmxldHRlcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKyAgICAgICAgc2VsZi5zID0gc2VsZi50aGV0eXBlKHdvcmQpCisgICAgICAgIHNlbGYuZCA9IGRpY3QuZnJvbWtleXMod29yZCkKKworICAgIGRlZiB0ZXN0X25ld19vcl9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudGhldHlwZSwgW10sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0KCkuX19pbml0X18sIGE9MSkKKworICAgIGRlZiB0ZXN0X3VuaXF1aWZpY2F0aW9uKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBzb3J0ZWQoc2VsZi5zKQorICAgICAgICBleHBlY3RlZCA9IHNvcnRlZChzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYudGhldHlwZSwgY2hlY2tfcGFzc190aHJ1KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGV0eXBlLCBbW11dKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnMpLCBsZW4oc2VsZi5kKSkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gc2VsZi5zLCBjIGluIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuX19jb250YWluc19fLCBbW11dKQorICAgICAgICBzID0gc2VsZi50aGV0eXBlKFtmcm96ZW5zZXQoc2VsZi5sZXR0ZXJzKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi50aGV0eXBlKHNlbGYubGV0dGVycyksIHMpCisKKyAgICBkZWYgdGVzdF91bmlvbihzZWxmKToKKyAgICAgICAgdSA9IHNlbGYucy51bmlvbihzZWxmLm90aGVyd29yZCkKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIHUsIGMgaW4gc2VsZi5kIG9yIGMgaW4gc2VsZi5vdGhlcndvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHUpLCBzZWxmLnRoZXR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFBhc3NUaHJ1LCBzZWxmLnMudW5pb24sIGNoZWNrX3Bhc3NfdGhydSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy51bmlvbiwgW1tdXSkKKyAgICAgICAgZm9yIEMgaW4gc2V0LCBmcm96ZW5zZXQsIGRpY3QuZnJvbWtleXMsIHN0ciwgdW5pY29kZSwgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS51bmlvbihDKCdjZGMnKSksIHNldCgnYWJjZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykudW5pb24oQygnZWZnZmUnKSksIHNldCgnYWJjZWZnJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS51bmlvbihDKCdjY2InKSksIHNldCgnYWJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS51bmlvbihDKCdlZicpKSwgc2V0KCdhYmNlZicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykudW5pb24oQygnZWYnKSwgQygnZmcnKSksIHNldCgnYWJjZWZnJykpCisKKyAgICAgICAgIyBJc3N1ZSAjNjU3MworICAgICAgICB4ID0gc2VsZi50aGV0eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnVuaW9uKHNldChbMV0pLCB4LCBzZXQoWzJdKSksIHNlbGYudGhldHlwZShbMSwgMl0pKQorCisgICAgZGVmIHRlc3Rfb3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMudW5pb24oc2VsZi5vdGhlcndvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIHwgc2V0KHNlbGYub3RoZXJ3b3JkKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgfCBmcm96ZW5zZXQoc2VsZi5vdGhlcndvcmQpLCBpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnMgfCBzZWxmLm90aGVyd29yZAorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzfHQgZGlkIG5vdCBzY3JlZW4tb3V0IGdlbmVyYWwgaXRlcmFibGVzIikKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5pbnRlcnNlY3Rpb24oc2VsZi5vdGhlcndvcmQpCisgICAgICAgIGZvciBjIGluIHNlbGYubGV0dGVyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYyBpbiBpLCBjIGluIHNlbGYuZCBhbmQgYyBpbiBzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIHNlbGYudGhldHlwZShzZWxmLndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaSksIHNlbGYudGhldHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy5pbnRlcnNlY3Rpb24sIGNoZWNrX3Bhc3NfdGhydSgpKQorICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmludGVyc2VjdGlvbihDKCdjZGMnKSksIHNldCgnY2MnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmludGVyc2VjdGlvbihDKCdlZmdmZScpKSwgc2V0KCcnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmludGVyc2VjdGlvbihDKCdjY2InKSksIHNldCgnYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmludGVyc2VjdGlvbihDKCdlZicpKSwgc2V0KCcnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmludGVyc2VjdGlvbihDKCdjYmNmJyksIEMoJ2JhZycpKSwgc2V0KCdiJykpCisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoJ2FiY2JhJykKKyAgICAgICAgeiA9IHMuaW50ZXJzZWN0aW9uKCkKKyAgICAgICAgaWYgc2VsZi50aGV0eXBlID09IGZyb3plbnNldCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChzKSwgaWQoeikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMpLCBpZCh6KSkKKworICAgIGRlZiB0ZXN0X2lzZGlzam9pbnQoc2VsZik6CisgICAgICAgIGRlZiBmKHMxLCBzMik6CisgICAgICAgICAgICAnUHVyZSBweXRob24gZXF1aXZhbGVudCBvZiBpc2Rpc2pvaW50KCknCisgICAgICAgICAgICByZXR1cm4gbm90IHNldChzMSkuaW50ZXJzZWN0aW9uKHMyKQorICAgICAgICBmb3IgbGFyZyBpbiAnJywgJ2EnLCAnYWInLCAnYWJjJywgJ2FiYWJhYycsICdjZGMnLCAnY2MnLCAnZWZnZmUnLCAnY2NiJywgJ2VmJzoKKyAgICAgICAgICAgIHMxID0gc2VsZi50aGV0eXBlKGxhcmcpCisgICAgICAgICAgICBmb3IgcmFyZyBpbiAnJywgJ2EnLCAnYWInLCAnYWJjJywgJ2FiYWJhYycsICdjZGMnLCAnY2MnLCAnZWZnZmUnLCAnY2NiJywgJ2VmJzoKKyAgICAgICAgICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgICAgICAgICAgczIgPSBDKHJhcmcpCisgICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IHMxLmlzZGlzam9pbnQoczIpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZihzMSwgczIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFjdHVhbCBpcyBUcnVlIG9yIGFjdHVhbCBpcyBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2FuZChzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5pbnRlcnNlY3Rpb24oc2VsZi5vdGhlcndvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zICYgc2V0KHNlbGYub3RoZXJ3b3JkKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgJiBmcm96ZW5zZXQoc2VsZi5vdGhlcndvcmQpLCBpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnMgJiBzZWxmLm90aGVyd29yZAorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzJnQgZGlkIG5vdCBzY3JlZW4tb3V0IGdlbmVyYWwgaXRlcmFibGVzIikKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuZGlmZmVyZW5jZShzZWxmLm90aGVyd29yZCkKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIGksIGMgaW4gc2VsZi5kIGFuZCBjIG5vdCBpbiBzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIHNlbGYudGhldHlwZShzZWxmLndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaSksIHNlbGYudGhldHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy5kaWZmZXJlbmNlLCBjaGVja19wYXNzX3RocnUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlmZmVyZW5jZSwgW1tdXSkKKyAgICAgICAgZm9yIEMgaW4gc2V0LCBmcm96ZW5zZXQsIGRpY3QuZnJvbWtleXMsIHN0ciwgdW5pY29kZSwgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS5kaWZmZXJlbmNlKEMoJ2NkYycpKSwgc2V0KCdhYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuZGlmZmVyZW5jZShDKCdlZmdmZScpKSwgc2V0KCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmRpZmZlcmVuY2UoQygnY2NiJykpLCBzZXQoJ2EnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmRpZmZlcmVuY2UoQygnZWYnKSksIHNldCgnYWJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS5kaWZmZXJlbmNlKCksIHNldCgnYWJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS5kaWZmZXJlbmNlKEMoJ2EnKSwgQygnYicpKSwgc2V0KCdjJykpCisKKyAgICBkZWYgdGVzdF9zdWIoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuZGlmZmVyZW5jZShzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgLSBzZXQoc2VsZi5vdGhlcndvcmQpLCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyAtIGZyb3plbnNldChzZWxmLm90aGVyd29yZCksIGkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucyAtIHNlbGYub3RoZXJ3b3JkCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInMtdCBkaWQgbm90IHNjcmVlbi1vdXQgZ2VuZXJhbCBpdGVyYWJsZXMiKQorCisgICAgZGVmIHRlc3Rfc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZi5vdGhlcndvcmQpCisgICAgICAgIGZvciBjIGluIHNlbGYubGV0dGVyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYyBpbiBpLCAoYyBpbiBzZWxmLmQpIF4gKGMgaW4gc2VsZi5vdGhlcndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpKSwgc2VsZi50aGV0eXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlLCBjaGVja19wYXNzX3RocnUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2UsIFtbXV0pCisgICAgICAgIGZvciBDIGluIHNldCwgZnJvemVuc2V0LCBkaWN0LmZyb21rZXlzLCBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuc3ltbWV0cmljX2RpZmZlcmVuY2UoQygnY2RjJykpLCBzZXQoJ2FiZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuc3ltbWV0cmljX2RpZmZlcmVuY2UoQygnZWZnZmUnKSksIHNldCgnYWJjZWZnJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS5zeW1tZXRyaWNfZGlmZmVyZW5jZShDKCdjY2InKSksIHNldCgnYScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuc3ltbWV0cmljX2RpZmZlcmVuY2UoQygnZWYnKSksIHNldCgnYWJjZWYnKSkKKworICAgIGRlZiB0ZXN0X3hvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgXiBzZXQoc2VsZi5vdGhlcndvcmQpLCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyBeIGZyb3plbnNldChzZWxmLm90aGVyd29yZCksIGkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucyBeIHNlbGYub3RoZXJ3b3JkCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNedCBkaWQgbm90IHNjcmVlbi1vdXQgZ2VuZXJhbCBpdGVyYWJsZXMiKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBzZXQoc2VsZi53b3JkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIGZyb3plbnNldChzZWxmLndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyA9PSBzZWxmLndvcmQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYucywgc2V0KHNlbGYub3RoZXJ3b3JkKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLnMsIGZyb3plbnNldChzZWxmLm90aGVyd29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zICE9IHNlbGYud29yZCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NldE9mRnJvemVuc2V0cyhzZWxmKToKKyAgICAgICAgdCA9IG1hcChmcm96ZW5zZXQsIFsnYWJjZGVmJywgJ2JjZCcsICdiZGNiJywgJ2ZlZCcsICdmZWRjY2JhJ10pCisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIDMpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5fX2NtcF9fLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9zdWJfYW5kX3N1cGVyKHNlbGYpOgorICAgICAgICBwLCBxLCByID0gbWFwKHNlbGYudGhldHlwZSwgWydhYicsICdhYmNkZScsICdkZWYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCA8PSBxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSA8PSBxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSA+IHApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxID49IHApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA8IHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA8PSByKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEgPiByKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEgPj0gcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldCgnYScpLmlzc3Vic2V0KCdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldCgnYWJjJykuaXNzdXBlcnNldCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNldCgnYScpLmlzc3Vic2V0KCdjYnMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXQoJ2NicycpLmlzc3VwZXJzZXQoJ2EnKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhzZWxmLnMsIGkpCisgICAgICAgICAgICBkdXAgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBkdXAsICIlcyAhPSAlcyIgJSAoc2VsZi5zLCBkdXApKQorICAgICAgICAgICAgaWYgdHlwZShzZWxmLnMpIG5vdCBpbiAoc2V0LCBmcm96ZW5zZXQpOgorICAgICAgICAgICAgICAgIHNlbGYucy54ID0gMTAKKyAgICAgICAgICAgICAgICBwID0gcGlja2xlLmR1bXBzKHNlbGYucykKKyAgICAgICAgICAgICAgICBkdXAgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucy54LCBkdXAueCkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5KHNlbGYpOgorICAgICAgICBjbGFzcyBUcmFjZXI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisgICAgICAgICAgICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW89Tm9uZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRyYWNlcihzZWxmLnZhbHVlICsgMSkKKyAgICAgICAgdCA9IFRyYWNlcigxMCkKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZShbdF0pCisgICAgICAgIGR1cCA9IGNvcHkuZGVlcGNvcHkocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQoZHVwKSkKKyAgICAgICAgZm9yIGVsZW0gaW4gZHVwOgorICAgICAgICAgICAgbmV3dCA9IGVsZW0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZCh0KSwgaWQobmV3dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC52YWx1ZSArIDEsIG5ld3QudmFsdWUpCisKKyAgICBkZWYgdGVzdF9nYyhzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSBuZXN0IG9mIGN5Y2xlcyB0byBleGVyY2lzZSBvdmVyYWxsIHJlZiBjb3VudCBjaGVjaworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzID0gc2V0KEEoKSBmb3IgaSBpbiB4cmFuZ2UoMTAwMCkpCisgICAgICAgIGZvciBlbGVtIGluIHM6CisgICAgICAgICAgICBlbGVtLmN5Y2xlID0gcworICAgICAgICAgICAgZWxlbS5zdWIgPSBlbGVtCisgICAgICAgICAgICBlbGVtLnNldCA9IHNldChbZWxlbV0pCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc193aXRoX2N1c3RvbV9oYXNoKHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMTI1NzczMQorICAgICAgICBjbGFzcyBIKHNlbGYudGhldHlwZSk6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChpZChzZWxmKSAmIDB4N2ZmZmZmZmYpCisgICAgICAgIHM9SCgpCisgICAgICAgIGY9c2V0KCkKKyAgICAgICAgZi5hZGQocykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzLCBmKQorICAgICAgICBmLnJlbW92ZShzKQorICAgICAgICBmLmFkZChzKQorICAgICAgICBmLmRpc2NhcmQocykKKworICAgIGRlZiB0ZXN0X2JhZGNtcChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZShbQmFkQ21wKCldKQorICAgICAgICAjIERldGVjdCBjb21wYXJpc29uIGVycm9ycyBkdXJpbmcgaW5zZXJ0aW9uIGFuZCBsb29rdXAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLnRoZXR5cGUsIFtCYWRDbXAoKSwgQmFkQ21wKCldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHMuX19jb250YWluc19fLCBCYWRDbXAoKSkKKyAgICAgICAgIyBEZXRlY3QgZXJyb3JzIGR1cmluZyBtdXRhdGluZyBvcGVyYXRpb25zCisgICAgICAgIGlmIGhhc2F0dHIocywgJ2FkZCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzLmFkZCwgQmFkQ21wKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHMuZGlzY2FyZCwgQmFkQ21wKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHMucmVtb3ZlLCBCYWRDbXAoKSkKKworICAgIGRlZiB0ZXN0X2N5Y2xpY2FsX3JlcHIoc2VsZik6CisgICAgICAgIHcgPSBSZXByV3JhcHBlcigpCisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW3ddKQorICAgICAgICB3LnZhbHVlID0gcworICAgICAgICBuYW1lID0gcmVwcihzKS5wYXJ0aXRpb24oJygnKVswXSAgICAjIHN0cmlwIGNsYXNzIG5hbWUgZnJvbSByZXByIHN0cmluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocyksICclcyhbJXMoLi4uKV0pJyAlIChuYW1lLCBuYW1lKSkKKworICAgIGRlZiB0ZXN0X2N5Y2xpY2FsX3ByaW50KHNlbGYpOgorICAgICAgICB3ID0gUmVwcldyYXBwZXIoKQorICAgICAgICBzID0gc2VsZi50aGV0eXBlKFt3XSkKKyAgICAgICAgdy52YWx1ZSA9IHMKKyAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50ID4+IGZvLCBzLAorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWQoKSwgcmVwcihzKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2RvX25vdF9yZWhhc2hfZGljdF9rZXlzKHNlbGYpOgorICAgICAgICBuID0gMTAKKyAgICAgICAgZCA9IGRpY3QuZnJvbWtleXMobWFwKEhhc2hDb3VudGluZ0ludCwgeHJhbmdlKG4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oZWxlbS5oYXNoX2NvdW50IGZvciBlbGVtIGluIGQpLCBuKQorICAgICAgICBzID0gc2VsZi50aGV0eXBlKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGVsZW0uaGFzaF9jb3VudCBmb3IgZWxlbSBpbiBkKSwgbikKKyAgICAgICAgcy5kaWZmZXJlbmNlKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGVsZW0uaGFzaF9jb3VudCBmb3IgZWxlbSBpbiBkKSwgbikKKyAgICAgICAgaWYgaGFzYXR0cihzLCAnc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlJyk6CisgICAgICAgICAgICBzLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShlbGVtLmhhc2hfY291bnQgZm9yIGVsZW0gaW4gZCksIG4pCisgICAgICAgIGQyID0gZGljdC5mcm9ta2V5cyhzZXQoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGVsZW0uaGFzaF9jb3VudCBmb3IgZWxlbSBpbiBkKSwgbikKKyAgICAgICAgZDMgPSBkaWN0LmZyb21rZXlzKGZyb3plbnNldChkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oZWxlbS5oYXNoX2NvdW50IGZvciBlbGVtIGluIGQpLCBuKQorICAgICAgICBkMyA9IGRpY3QuZnJvbWtleXMoZnJvemVuc2V0KGQpLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGVsZW0uaGFzaF9jb3VudCBmb3IgZWxlbSBpbiBkKSwgbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMywgZGljdC5mcm9ta2V5cyhkLCAxMjMpKQorCisgICAgZGVmIHRlc3RfY29udGFpbmVyX2l0ZXJhdG9yKHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMzY4MDogdHBfdHJhdmVyc2Ugd2FzIG5vdCBpbXBsZW1lbnRlZCBmb3Igc2V0IGl0ZXJhdG9yIG9iamVjdAorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG9iaiA9IEMoKQorICAgICAgICByZWYgPSB3ZWFrcmVmLnJlZihvYmopCisgICAgICAgIGNvbnRhaW5lciA9IHNldChbb2JqLCAxXSkKKyAgICAgICAgb2JqLnggPSBpdGVyKGNvbnRhaW5lcikKKyAgICAgICAgZGVsIG9iaiwgY29udGFpbmVyCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmKCkgaXMgTm9uZSwgIkN5Y2xlIHdhcyBub3QgY29sbGVjdGVkIikKKworY2xhc3MgVGVzdFNldChUZXN0Sm9pbnRPcHMpOgorICAgIHRoZXR5cGUgPSBzZXQKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoKQorICAgICAgICBzLl9faW5pdF9fKHNlbGYud29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZXQoc2VsZi53b3JkKSkKKyAgICAgICAgcy5fX2luaXRfXyhzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZXQoc2VsZi5vdGhlcndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHMuX19pbml0X18sIHMsIDIpOworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHMuX19pbml0X18sIDEpOworCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaWRlbnRpdHkoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUocmFuZ2UoMykpCisgICAgICAgIHQgPSBzZWxmLnRoZXR5cGUocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQodCkpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLnMuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYucyksIDApCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkdXAgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBkdXApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoc2VsZi5zKSwgaWQoZHVwKSkKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgc2VsZi5zLmFkZCgnUScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1EnLCBzZWxmLnMpCisgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgc2VsZi5zLmFkZCgnUScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBkdXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmFkZCwgW10pCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgIHNlbGYucy5yZW1vdmUoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5zLnJlbW92ZSwgJ1EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5yZW1vdmUsIFtdKQorICAgICAgICBzID0gc2VsZi50aGV0eXBlKFtmcm96ZW5zZXQoc2VsZi53b3JkKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi50aGV0eXBlKHNlbGYud29yZCksIHMpCisgICAgICAgIHMucmVtb3ZlKHNlbGYudGhldHlwZShzZWxmLndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYudGhldHlwZShzZWxmLndvcmQpLCBzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5zLnJlbW92ZSwgc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfa2V5ZXJyb3JfdW5wYWNraW5nKHNlbGYpOgorICAgICAgICAjIGJ1ZzogIHd3dy5weXRob24ub3JnL3NmLzE1NzY2NTcKKyAgICAgICAgZm9yIHYxIGluIFsnUScsICgxLCldOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucy5yZW1vdmUodjEpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGU6CisgICAgICAgICAgICAgICAgdjIgPSBlLmFyZ3NbMF0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYxLCB2MikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9rZXllcnJvcl9zZXQoc2VsZik6CisgICAgICAgIGtleSA9IHNlbGYudGhldHlwZShbMywgNF0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucy5yZW1vdmUoa2V5KQorICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmFyZ3NbMF0gaXMga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICJLZXlFcnJvciBzaG91bGQgYmUgezB9LCBub3QgezF9Ii5mb3JtYXQoa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5hcmdzWzBdKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKyAgICBkZWYgdGVzdF9kaXNjYXJkKHNlbGYpOgorICAgICAgICBzZWxmLnMuZGlzY2FyZCgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBzZWxmLnMpCisgICAgICAgIHNlbGYucy5kaXNjYXJkKCdRJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlzY2FyZCwgW10pCisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW2Zyb3plbnNldChzZWxmLndvcmQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSwgcykKKyAgICAgICAgcy5kaXNjYXJkKHNlbGYudGhldHlwZShzZWxmLndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYudGhldHlwZShzZWxmLndvcmQpLCBzKQorICAgICAgICBzLmRpc2NhcmQoc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCisKKyAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oc2VsZi5zKSk6CisgICAgICAgICAgICBlbGVtID0gc2VsZi5zLnBvcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYucy5wb3ApCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIHJldHZhbCA9IHNlbGYucy51cGRhdGUoc2VsZi5vdGhlcndvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFBhc3NUaHJ1LCBzZWxmLnMudXBkYXRlLCBjaGVja19wYXNzX3RocnUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMudXBkYXRlLCBbW11dKQorICAgICAgICBmb3IgcCwgcSBpbiAoKCdjZGMnLCAnYWJjZCcpLCAoJ2VmZ2ZlJywgJ2FiY2VmZycpLCAoJ2NjYicsICdhYmMnKSwgKCdlZicsICdhYmNlZicpKToKKyAgICAgICAgICAgIGZvciBDIGluIHNldCwgZnJvemVuc2V0LCBkaWN0LmZyb21rZXlzLCBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlOgorICAgICAgICAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoJ2FiY2JhJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudXBkYXRlKEMocCkpLCBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2V0KHEpKQorICAgICAgICBmb3IgcCBpbiAoJ2NkYycsICdlZmdmZScsICdjY2InLCAnZWYnLCAnYWJjZGEnKToKKyAgICAgICAgICAgIHEgPSAnYWhpJworICAgICAgICAgICAgZm9yIEMgaW4gc2V0LCBmcm96ZW5zZXQsIGRpY3QuZnJvbWtleXMsIHN0ciwgdW5pY29kZSwgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICAgICAgcyA9IHNlbGYudGhldHlwZSgnYWJjYmEnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy51cGRhdGUoQyhwKSwgQyhxKSksIE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZXQocykgfCBzZXQocCkgfCBzZXQocSkpCisKKyAgICBkZWYgdGVzdF9pb3Ioc2VsZik6CisgICAgICAgIHNlbGYucyB8PSBzZXQoc2VsZi5vdGhlcndvcmQpCisgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl91cGRhdGUoc2VsZik6CisgICAgICAgIHJldHZhbCA9IHNlbGYucy5pbnRlcnNlY3Rpb25fdXBkYXRlKHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKKyAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5vdGhlcndvcmQgYW5kIGMgaW4gc2VsZi53b3JkOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy5pbnRlcnNlY3Rpb25fdXBkYXRlLCBjaGVja19wYXNzX3RocnUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuaW50ZXJzZWN0aW9uX3VwZGF0ZSwgW1tdXSkKKyAgICAgICAgZm9yIHAsIHEgaW4gKCgnY2RjJywgJ2MnKSwgKCdlZmdmZScsICcnKSwgKCdjY2InLCAnYmMnKSwgKCdlZicsICcnKSk6CisgICAgICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgICAgICBzID0gc2VsZi50aGV0eXBlKCdhYmNiYScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmludGVyc2VjdGlvbl91cGRhdGUoQyhwKSksIE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZXQocSkpCisgICAgICAgICAgICAgICAgc3MgPSAnYWJjYmEnCisgICAgICAgICAgICAgICAgcyA9IHNlbGYudGhldHlwZShzcykKKyAgICAgICAgICAgICAgICB0ID0gJ2NiYycKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW50ZXJzZWN0aW9uX3VwZGF0ZShDKHApLCBDKHQpKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNldCgnYWJjYmEnKSZzZXQocCkmc2V0KHQpKQorCisgICAgZGVmIHRlc3RfaWFuZChzZWxmKToKKyAgICAgICAgc2VsZi5zICY9IHNldChzZWxmLm90aGVyd29yZCkKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKKyAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5vdGhlcndvcmQgYW5kIGMgaW4gc2VsZi53b3JkOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5vdGhlcndvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLndvcmQgYW5kIGMgbm90IGluIHNlbGYub3RoZXJ3b3JkOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy5kaWZmZXJlbmNlX3VwZGF0ZSwgY2hlY2tfcGFzc190aHJ1KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmRpZmZlcmVuY2VfdXBkYXRlLCBbW11dKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCisgICAgICAgIGZvciBwLCBxIGluICgoJ2NkYycsICdhYicpLCAoJ2VmZ2ZlJywgJ2FiYycpLCAoJ2NjYicsICdhJyksICgnZWYnLCAnYWJjJykpOgorICAgICAgICAgICAgZm9yIEMgaW4gc2V0LCBmcm96ZW5zZXQsIGRpY3QuZnJvbWtleXMsIHN0ciwgdW5pY29kZSwgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICAgICAgcyA9IHNlbGYudGhldHlwZSgnYWJjYmEnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5kaWZmZXJlbmNlX3VwZGF0ZShDKHApKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNldChxKSkKKworICAgICAgICAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoJ2FiY2RlZmdoaWgnKQorICAgICAgICAgICAgICAgIHMuZGlmZmVyZW5jZV91cGRhdGUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2VsZi50aGV0eXBlKCdhYmNkZWZnaGloJykpCisKKyAgICAgICAgICAgICAgICBzID0gc2VsZi50aGV0eXBlKCdhYmNkZWZnaGloJykKKyAgICAgICAgICAgICAgICBzLmRpZmZlcmVuY2VfdXBkYXRlKEMoJ2FiYScpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2VsZi50aGV0eXBlKCdjZGVmZ2hpaCcpKQorCisgICAgICAgICAgICAgICAgcyA9IHNlbGYudGhldHlwZSgnYWJjZGVmZ2hpaCcpCisgICAgICAgICAgICAgICAgcy5kaWZmZXJlbmNlX3VwZGF0ZShDKCdjZGMnKSwgQygnYWJhJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnRoZXR5cGUoJ2VmZ2hpaCcpKQorCisgICAgZGVmIHRlc3RfaXN1YihzZWxmKToKKyAgICAgICAgc2VsZi5zIC09IHNldChzZWxmLm90aGVyd29yZCkKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKKyAgICAgICAgICAgIGlmIGMgaW4gc2VsZi53b3JkIGFuZCBjIG5vdCBpbiBzZWxmLm90aGVyd29yZDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2VsZik6CisgICAgICAgIHJldHZhbCA9IHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5vdGhlcndvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgorICAgICAgICAgICAgaWYgKGMgaW4gc2VsZi53b3JkKSBeIChjIGluIHNlbGYub3RoZXJ3b3JkKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFBhc3NUaHJ1LCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLCBjaGVja19wYXNzX3RocnUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLCBbW11dKQorICAgICAgICBmb3IgcCwgcSBpbiAoKCdjZGMnLCAnYWJkJyksICgnZWZnZmUnLCAnYWJjZWZnJyksICgnY2NiJywgJ2EnKSwgKCdlZicsICdhYmNlZicpKToKKyAgICAgICAgICAgIGZvciBDIGluIHNldCwgZnJvemVuc2V0LCBkaWN0LmZyb21rZXlzLCBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlOgorICAgICAgICAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoJ2FiY2JhJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlKEMocCkpLCBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2V0KHEpKQorCisgICAgZGVmIHRlc3RfaXhvcihzZWxmKToKKyAgICAgICAgc2VsZi5zIF49IHNldChzZWxmLm90aGVyd29yZCkKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKKyAgICAgICAgICAgIGlmIChjIGluIHNlbGYud29yZCkgXiAoYyBpbiBzZWxmLm90aGVyd29yZCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfaW5wbGFjZV9vbl9zZWxmKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi5zLmNvcHkoKQorICAgICAgICB0IHw9IHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBzZWxmLnMpCisgICAgICAgIHQgJj0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHNlbGYucykKKyAgICAgICAgdCAtPSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc2VsZi50aGV0eXBlKCkpCisgICAgICAgIHQgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHQgXj0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHNlbGYudGhldHlwZSgpKQorCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZSgnZ2FsbGFoYWQnKQorICAgICAgICBwID0gd2Vha3JlZi5wcm94eShzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgc3RyKHMpKQorICAgICAgICBzID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWZlcmVuY2VFcnJvciwgc3RyLCBwKQorCisgICAgIyBDIEFQSSB0ZXN0IG9ubHkgYXZhaWxhYmxlIGluIGEgZGVidWcgYnVpbGQKKyAgICBpZiBoYXNhdHRyKHNldCwgInRlc3RfY19hcGkiKToKKyAgICAgICAgZGVmIHRlc3RfY19hcGkoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCgpLnRlc3RfY19hcGkoKSwgVHJ1ZSkKKworY2xhc3MgU2V0U3ViY2xhc3Moc2V0KToKKyAgICBwYXNzCisKK2NsYXNzIFRlc3RTZXRTdWJjbGFzcyhUZXN0U2V0KToKKyAgICB0aGV0eXBlID0gU2V0U3ViY2xhc3MKKworY2xhc3MgU2V0U3ViY2xhc3NXaXRoS2V5d29yZEFyZ3Moc2V0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGU9W10sIG5ld2FyZz1Ob25lKToKKyAgICAgICAgc2V0Ll9faW5pdF9fKHNlbGYsIGl0ZXJhYmxlKQorCitjbGFzcyBUZXN0U2V0U3ViY2xhc3NXaXRoS2V5d29yZEFyZ3MoVGVzdFNldCk6CisKKyAgICBkZWYgdGVzdF9rZXl3b3Jkc19pbl9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgJ1NGIGJ1ZyAjMTQ4NjY2MyAtLSB0aGlzIHVzZWQgdG8gZXJyb25lb3VzbHkgcmFpc2UgYSBUeXBlRXJyb3InCisgICAgICAgIFNldFN1YmNsYXNzV2l0aEtleXdvcmRBcmdzKG5ld2FyZz0xKQorCitjbGFzcyBUZXN0RnJvemVuU2V0KFRlc3RKb2ludE9wcyk6CisgICAgdGhldHlwZSA9IGZyb3plbnNldAorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZShzZWxmLndvcmQpCisgICAgICAgIHMuX19pbml0X18oc2VsZi5vdGhlcndvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2V0KHNlbGYud29yZCkpCisKKyAgICBkZWYgdGVzdF9zaW5nbGV0b25fZW1wdHlfZnJvemVuc2V0KHNlbGYpOgorICAgICAgICBmID0gZnJvemVuc2V0KCkKKyAgICAgICAgZWZzID0gW2Zyb3plbnNldCgpLCBmcm96ZW5zZXQoW10pLCBmcm96ZW5zZXQoKCkpLCBmcm96ZW5zZXQoJycpLAorICAgICAgICAgICAgICAgZnJvemVuc2V0KCksIGZyb3plbnNldChbXSksIGZyb3plbnNldCgoKSksIGZyb3plbnNldCgnJyksCisgICAgICAgICAgICAgICBmcm96ZW5zZXQoeHJhbmdlKDApKSwgZnJvemVuc2V0KGZyb3plbnNldCgpKSwKKyAgICAgICAgICAgICAgIGZyb3plbnNldChmKSwgZl0KKyAgICAgICAgIyBBbGwgb2YgdGhlIGVtcHR5IGZyb3plbnNldHMgc2hvdWxkIGhhdmUganVzdCBvbmUgaWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBlZnMpKSksIDEpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9pZGVudGl0eShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZShyYW5nZSgzKSkKKyAgICAgICAgdCA9IHNlbGYudGhldHlwZShzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMpLCBpZCh0KSkKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChzZWxmLnRoZXR5cGUoJ2FiY2RlYicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoKHNlbGYudGhldHlwZSgnZWJlY2RhJykpKQorCisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgYWxsIHBlcm11dGF0aW9ucyBnaXZlIHRoZSBzYW1lIGhhc2ggdmFsdWUKKyAgICAgICAgbiA9IDEwMAorICAgICAgICBzZXEgPSBbcmFuZHJhbmdlKG4pIGZvciBpIGluIHhyYW5nZShuKV0KKyAgICAgICAgcmVzdWx0cyA9IHNldCgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgyMDApOgorICAgICAgICAgICAgc2h1ZmZsZShzZXEpCisgICAgICAgICAgICByZXN1bHRzLmFkZChoYXNoKHNlbGYudGhldHlwZShzZXEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0cyksIDEpCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkdXAgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQoc2VsZi5zKSwgaWQoZHVwKSkKKworICAgIGRlZiB0ZXN0X2Zyb3plbl9hc19kaWN0a2V5KHNlbGYpOgorICAgICAgICBzZXEgPSByYW5nZSgxMCkgKyBsaXN0KCdhYmNkZWZnJykgKyBbJ2FwcGxlJ10KKyAgICAgICAga2V5MSA9IHNlbGYudGhldHlwZShzZXEpCisgICAgICAgIGtleTIgPSBzZWxmLnRoZXR5cGUocmV2ZXJzZWQoc2VxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkxLCBrZXkyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGtleTEpLCBpZChrZXkyKSkKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGRba2V5MV0gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRba2V5Ml0sIDQyKQorCisgICAgZGVmIHRlc3RfaGFzaF9jYWNoaW5nKHNlbGYpOgorICAgICAgICBmID0gc2VsZi50aGV0eXBlKCdhYmNkY2RhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGYpLCBoYXNoKGYpKQorCisgICAgZGVmIHRlc3RfaGFzaF9lZmZlY3RpdmVuZXNzKHNlbGYpOgorICAgICAgICBuID0gMTMKKyAgICAgICAgaGFzaHZhbHVlcyA9IHNldCgpCisgICAgICAgIGFkZGhhc2h2YWx1ZSA9IGhhc2h2YWx1ZXMuYWRkCisgICAgICAgIGVsZW1tYXNrcyA9IFsoaSsxLCAxPDxpKSBmb3IgaSBpbiByYW5nZShuKV0KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDIqKm4pOgorICAgICAgICAgICAgYWRkaGFzaHZhbHVlKGhhc2goZnJvemVuc2V0KFtlIGZvciBlLCBtIGluIGVsZW1tYXNrcyBpZiBtJmldKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGhhc2h2YWx1ZXMpLCAyKipuKQorCitjbGFzcyBGcm96ZW5TZXRTdWJjbGFzcyhmcm96ZW5zZXQpOgorICAgIHBhc3MKKworY2xhc3MgVGVzdEZyb3plblNldFN1YmNsYXNzKFRlc3RGcm96ZW5TZXQpOgorICAgIHRoZXR5cGUgPSBGcm96ZW5TZXRTdWJjbGFzcworCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaWRlbnRpdHkoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUocmFuZ2UoMykpCisgICAgICAgIHQgPSBzZWxmLnRoZXR5cGUocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQodCkpCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkdXAgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoc2VsZi5zKSwgaWQoZHVwKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9lbXB0eV9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZSgpCisgICAgICAgIHQgPSBzZWxmLnRoZXR5cGUocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCB0KQorCisgICAgZGVmIHRlc3Rfc2luZ2xldG9uX2VtcHR5X2Zyb3plbnNldChzZWxmKToKKyAgICAgICAgRnJvemVuc2V0ID0gc2VsZi50aGV0eXBlCisgICAgICAgIGYgPSBmcm96ZW5zZXQoKQorICAgICAgICBGID0gRnJvemVuc2V0KCkKKyAgICAgICAgZWZzID0gW0Zyb3plbnNldCgpLCBGcm96ZW5zZXQoW10pLCBGcm96ZW5zZXQoKCkpLCBGcm96ZW5zZXQoJycpLAorICAgICAgICAgICAgICAgRnJvemVuc2V0KCksIEZyb3plbnNldChbXSksIEZyb3plbnNldCgoKSksIEZyb3plbnNldCgnJyksCisgICAgICAgICAgICAgICBGcm96ZW5zZXQoeHJhbmdlKDApKSwgRnJvemVuc2V0KEZyb3plbnNldCgpKSwKKyAgICAgICAgICAgICAgIEZyb3plbnNldChmcm96ZW5zZXQoKSksIGYsIEYsIEZyb3plbnNldChmKSwgRnJvemVuc2V0KEYpXQorICAgICAgICAjIEFsbCBlbXB0eSBmcm96ZW5zZXQgc3ViY2xhc3MgaW5zdGFuY2VzIHNob3VsZCBoYXZlIGRpZmZlcmVudCBpZHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KG1hcChpZCwgZWZzKSkpLCBsZW4oZWZzKSkKKworIyBUZXN0cyB0YWtlbiBmcm9tIHRlc3Rfc2V0cy5weSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZW1wdHlfc2V0ID0gc2V0KCkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QmFzaWNPcHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXByIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYuc2V0KSwgc2VsZi5yZXByKQorCisgICAgZGVmIGNoZWNrX3JlcHJfYWdhaW5zdF92YWx1ZXMoc2VsZik6CisgICAgICAgIHRleHQgPSByZXByKHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGV4dC5zdGFydHN3aXRoKCd7JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0LmVuZHN3aXRoKCd9JykpCisKKyAgICAgICAgcmVzdWx0ID0gdGV4dFsxOi0xXS5zcGxpdCgnLCAnKQorICAgICAgICByZXN1bHQuc29ydCgpCisgICAgICAgIHNvcnRlZF9yZXByX3ZhbHVlcyA9IFtyZXByKHZhbHVlKSBmb3IgdmFsdWUgaW4gc2VsZi52YWx1ZXNdCisgICAgICAgIHNvcnRlZF9yZXByX3ZhbHVlcy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNvcnRlZF9yZXByX3ZhbHVlcykKKworICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgorICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQgPj4gZm8sIHNlbGYuc2V0LAorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWQoKSwgcmVwcihzZWxmLnNldCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9sZW5ndGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc2V0KSwgc2VsZi5sZW5ndGgpCisKKyAgICBkZWYgdGVzdF9zZWxmX2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZWxmLnNldCkKKworICAgIGRlZiB0ZXN0X2VxdWl2YWxlbnRfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldC5jb3B5KCksIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3Rfc2VsZl91bmlvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgfCBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF9lbXB0eV91bmlvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgfCBlbXB0eV9zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3RfdW5pb25fZW1wdHkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGVtcHR5X3NldCB8IHNlbGYuc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZWxmLmR1cCkKKworICAgIGRlZiB0ZXN0X3NlbGZfaW50ZXJzZWN0aW9uKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCAmIHNlbGYuc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZWxmLmR1cCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2ludGVyc2VjdGlvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgJiBlbXB0eV9zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGVtcHR5X3NldCkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9lbXB0eShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gZW1wdHlfc2V0ICYgc2VsZi5zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGVtcHR5X3NldCkKKworICAgIGRlZiB0ZXN0X3NlbGZfaXNkaXNqb2ludChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQuaXNkaXNqb2ludChzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIG5vdCBzZWxmLnNldCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2lzZGlzam9pbnQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0LmlzZGlzam9pbnQoZW1wdHlfc2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2lzZGlzam9pbnRfZW1wdHkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGVtcHR5X3NldC5pc2Rpc2pvaW50KHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NlbGZfc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IF4gc2VsZi5zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGVtcHR5X3NldCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCBeIGVtcHR5X3NldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2VsZi5zZXQpCisKKyAgICBkZWYgdGVzdF9zZWxmX2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IC0gc2VsZi5zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGVtcHR5X3NldCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IC0gZW1wdHlfc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZWxmLmR1cCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2RpZmZlcmVuY2VfcmV2KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBlbXB0eV9zZXQgLSBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBmb3IgdiBpbiBzZWxmLnNldDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgc2VsZi52YWx1ZXMpCisgICAgICAgIHNldGl0ZXIgPSBpdGVyKHNlbGYuc2V0KQorICAgICAgICAjIG5vdGU6IF9fbGVuZ3RoX2hpbnRfXyBpcyBhbiBpbnRlcm5hbCB1bmRvY3VtZW50ZWQgQVBJLAorICAgICAgICAjIGRvbid0IHJlbHkgb24gaXQgaW4geW91ciBvd24gcHJvZ3JhbXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRpdGVyLl9fbGVuZ3RoX2hpbnRfXygpLCBsZW4oc2VsZi5zZXQpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoc2VsZi5zZXQpCisgICAgICAgIGNvcHkgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgY29weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIT0gJXMiICUgKHNlbGYuc2V0LCBjb3B5KSkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0QmFzaWNPcHNFbXB0eShUZXN0QmFzaWNPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlICAgPSAiZW1wdHkgc2V0IgorICAgICAgICBzZWxmLnZhbHVlcyA9IFtdCisgICAgICAgIHNlbGYuc2V0ICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmR1cCAgICA9IHNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5sZW5ndGggPSAwCisgICAgICAgIHNlbGYucmVwciAgID0gInNldChbXSkiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdEJhc2ljT3BzU2luZ2xldG9uKFRlc3RCYXNpY09wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2UgICA9ICJ1bml0IHNldCAobnVtYmVyKSIKKyAgICAgICAgc2VsZi52YWx1ZXMgPSBbM10KKyAgICAgICAgc2VsZi5zZXQgICAgPSBzZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYuZHVwICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmxlbmd0aCA9IDEKKyAgICAgICAgc2VsZi5yZXByICAgPSAic2V0KFszXSkiCisKKyAgICBkZWYgdGVzdF9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbigzLCBzZWxmLnNldCkKKworICAgIGRlZiB0ZXN0X25vdF9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigyLCBzZWxmLnNldCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0QmFzaWNPcHNUdXBsZShUZXN0QmFzaWNPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlICAgPSAidW5pdCBzZXQgKHR1cGxlKSIKKyAgICAgICAgc2VsZi52YWx1ZXMgPSBbKDAsICJ6ZXJvIildCisgICAgICAgIHNlbGYuc2V0ICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmR1cCAgICA9IHNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5sZW5ndGggPSAxCisgICAgICAgIHNlbGYucmVwciAgID0gInNldChbKDAsICd6ZXJvJyldKSIKKworICAgIGRlZiB0ZXN0X2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKCgwLCAiemVybyIpLCBzZWxmLnNldCkKKworICAgIGRlZiB0ZXN0X25vdF9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbig5LCBzZWxmLnNldCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0QmFzaWNPcHNUcmlwbGUoVGVzdEJhc2ljT3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZSAgID0gInRyaXBsZSBzZXQiCisgICAgICAgIHNlbGYudmFsdWVzID0gWzAsICJ6ZXJvIiwgb3BlcmF0b3IuYWRkXQorICAgICAgICBzZWxmLnNldCAgICA9IHNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5kdXAgICAgPSBzZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYubGVuZ3RoID0gMworICAgICAgICBzZWxmLnJlcHIgICA9IE5vbmUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0QmFzaWNPcHNTdHJpbmcoVGVzdEJhc2ljT3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZSAgID0gInN0cmluZyBzZXQiCisgICAgICAgIHNlbGYudmFsdWVzID0gWyJhIiwgImIiLCAiYyJdCisgICAgICAgIHNlbGYuc2V0ICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmR1cCAgICA9IHNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5sZW5ndGggPSAzCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlcHJfYWdhaW5zdF92YWx1ZXMoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RCYXNpY09wc1VuaWNvZGUoVGVzdEJhc2ljT3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZSAgID0gInVuaWNvZGUgc2V0IgorICAgICAgICBzZWxmLnZhbHVlcyA9IFt1ImEiLCB1ImIiLCB1ImMiXQorICAgICAgICBzZWxmLnNldCAgICA9IHNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5kdXAgICAgPSBzZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYubGVuZ3RoID0gMworCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXByX2FnYWluc3RfdmFsdWVzKCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0QmFzaWNPcHNNaXhlZFN0cmluZ1VuaWNvZGUoVGVzdEJhc2ljT3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZSAgID0gInN0cmluZyBhbmQgYnl0ZXMgc2V0IgorICAgICAgICBzZWxmLnZhbHVlcyA9IFsiYSIsICJiIiwgdSJhIiwgdSJiIl0KKyAgICAgICAgc2VsZi5zZXQgICAgPSBzZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYuZHVwICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmxlbmd0aCA9IDQKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3JlcHJfYWdhaW5zdF92YWx1ZXMoKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZiBiYWRpdGVyKCk6CisgICAgcmFpc2UgVHlwZUVycm9yCisgICAgeWllbGQgVHJ1ZQorCitkZWYgZ29vZGl0ZXIoKToKKyAgICB5aWVsZCBUcnVlCisKK2NsYXNzIFRlc3RFeGNlcHRpb25Qcm9wYWdhdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiU0YgNjI4MjQ2OiAgU2V0IGNvbnN0cnVjdG9yIHNob3VsZCBub3QgdHJhcCBpdGVyYXRvciBUeXBlRXJyb3JzIiIiCisKKyAgICBkZWYgdGVzdF9pbnN0YW5jZVdpdGhFeGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0LCBiYWRpdGVyKCkpCisKKyAgICBkZWYgdGVzdF9pbnN0YW5jZXNXaXRob3V0RXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIEFsbCBvZiB0aGVzZSBpdGVyYWJsZXMgc2hvdWxkIGxvYWQgd2l0aG91dCBleGNlcHRpb24uCisgICAgICAgIHNldChbMSwyLDNdKQorICAgICAgICBzZXQoKDEsMiwzKSkKKyAgICAgICAgc2V0KHsnb25lJzoxLCAndHdvJzoyLCAndGhyZWUnOjN9KQorICAgICAgICBzZXQoeHJhbmdlKDMpKQorICAgICAgICBzZXQoJ2FiYycpCisgICAgICAgIHNldChnb29kaXRlcigpKQorCisgICAgZGVmIHRlc3RfY2hhbmdpbmdTaXplV2hpbGVJdGVyYXRpbmcoc2VsZik6CisgICAgICAgIHMgPSBzZXQoWzEsMiwzXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gczoKKyAgICAgICAgICAgICAgICBzLnVwZGF0ZShbNF0pCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiB3aGVuIGNoYW5naW5nIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFNldE9mU2V0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGlubmVyID0gZnJvemVuc2V0KFsxXSkKKyAgICAgICAgb3V0ZXIgPSBzZXQoW2lubmVyXSkKKyAgICAgICAgZWxlbWVudCA9IG91dGVyLnBvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShlbGVtZW50KSwgZnJvemVuc2V0KQorICAgICAgICBvdXRlci5hZGQoaW5uZXIpICAgICAgICAjIFJlYnVpbGQgc2V0IG9mIHNldHMgd2l0aCAuYWRkIG1ldGhvZAorICAgICAgICBvdXRlci5yZW1vdmUoaW5uZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0ZXIsIHNldCgpKSAgICMgVmVyaWZ5IHRoYXQgcmVtb3ZlIHdvcmtlZAorICAgICAgICBvdXRlci5kaXNjYXJkKGlubmVyKSAgICAjIEFic2VuY2Ugb2YgS2V5RXJyb3IgaW5kaWNhdGVzIHdvcmtpbmcgZmluZQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RCaW5hcnlPcHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBzZXQoKDIsIDQsIDYpKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6ICAgICAgICAgICAgICAjIFNGIGJ1ZyA2NDMxMTUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KHsyOjEsNDozLDY6NX0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fc3Vic2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCB8IHNldChbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZXQoKDIsIDQsIDYpKSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX3N1cGVyc2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCB8IHNldChbMiwgNCwgNiwgOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZXQoWzIsIDQsIDYsIDhdKSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgc2V0KFszLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNldChbMiwgMywgNCwgNSwgNl0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgc2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNldChbMiwgNCwgNiwgOF0pKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3N1YnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgJiBzZXQoKDIsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2V0KCgyLCA0KSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0ICYgc2V0KFsyLCA0LCA2LCA4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNldChbMiwgNCwgNl0pKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0ICYgc2V0KFszLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNldChbNF0pKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCAmIHNldChbOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBlbXB0eV9zZXQpCisKKyAgICBkZWYgdGVzdF9pc2Rpc2pvaW50X3N1YnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQuaXNkaXNqb2ludChzZXQoKDIsIDQpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfaXNkaXNqb2ludF9zdXBlcnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQuaXNkaXNqb2ludChzZXQoWzIsIDQsIDYsIDhdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfaXNkaXNqb2ludF9vdmVybGFwKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldC5pc2Rpc2pvaW50KHNldChbMywgNCwgNV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9pc2Rpc2pvaW50X25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldC5pc2Rpc2pvaW50KHNldChbOF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX3N1YnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgXiBzZXQoKDIsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2V0KFs2XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9zdXBlcnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgXiBzZXQoKDIsIDQsIDYsIDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2V0KFs4XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9vdmVybGFwKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCBeIHNldCgoMywgNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZXQoWzIsIDMsIDUsIDZdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCBeIHNldChbOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZXQoWzIsIDQsIDYsIDhdKSkKKworICAgIGRlZiB0ZXN0X2NtcChzZWxmKToKKyAgICAgICAgYSwgYiA9IHNldCgnYScpLCBzZXQoJ2InKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgYSwgYikKKworICAgICAgICAjIFlvdSBjYW4gdmlldyB0aGlzIGFzIGEgYnVnbGV0OiAgY21wKGEsIGEpIGRvZXMgbm90IHJhaXNlIFR5cGVFcnJvciwKKyAgICAgICAgIyBiZWNhdXNlIF9fZXFfXyBpcyB0cmllZCBiZWZvcmUgX19jbXBfXywgYW5kIGEuX19lcV9fKGEpIHJldHVybnMgVHJ1ZSwKKyAgICAgICAgIyB3aGljaCBQeXRob24gdGhpbmtzIGlzIGdvb2QgZW5vdWdoIHRvIHN5bnRoZXNpemUgYSBjbXAoKSByZXN1bHQKKyAgICAgICAgIyB3aXRob3V0IGNhbGxpbmcgX19jbXBfXy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoYSwgYSksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsIGEsIDEyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgImFiYyIsIGEpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFVwZGF0ZU9wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IHNldCgoMiwgNCwgNikpCisKKyAgICBkZWYgdGVzdF91bmlvbl9zdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IHw9IHNldChbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldCgoMiwgNCwgNikpKQorCisgICAgZGVmIHRlc3RfdW5pb25fc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IHw9IHNldChbMiwgNCwgNiwgOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbMiwgNCwgNiwgOF0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgfD0gc2V0KFszLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KFsyLCAzLCA0LCA1LCA2XSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgfD0gc2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KFsyLCA0LCA2LCA4XSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9tZXRob2RfY2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQudXBkYXRlKHNldChbMywgNCwgNV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzIsIDMsIDQsIDUsIDZdKSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9zdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICY9IHNldCgoMiwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldCgoMiwgNCkpKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3N1cGVyc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldCAmPSBzZXQoWzIsIDQsIDYsIDhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzIsIDQsIDZdKSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAmPSBzZXQoWzMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzRdKSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgJj0gc2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX21ldGhvZF9jYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNldC5pbnRlcnNlY3Rpb25fdXBkYXRlKHNldChbMywgNCwgNV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzRdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX3N1YnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgXj0gc2V0KCgyLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KFs2XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9zdXBlcnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgXj0gc2V0KCgyLCA0LCA2LCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KFs4XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCBePSBzZXQoKDMsIDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzIsIDMsIDUsIDZdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCBePSBzZXQoWzhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzIsIDQsIDYsIDhdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX21ldGhvZF9jYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2V0KFszLCA0LCA1XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbMiwgMywgNSwgNl0pKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV9zdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IC09IHNldCgoMiwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbNl0pKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV9zdXBlcnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgLT0gc2V0KCgyLCA0LCA2LCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KFtdKSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2Vfb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgLT0gc2V0KCgzLCA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KFsyLCA2XSkpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAtPSBzZXQoWzhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzIsIDQsIDZdKSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2VfbWV0aG9kX2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LmRpZmZlcmVuY2VfdXBkYXRlKHNldChbMywgNCwgNV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzIsIDZdKSkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0TXV0YXRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudmFsdWVzID0gWyJhIiwgImIiLCAiYyJdCisgICAgICAgIHNlbGYuc2V0ID0gc2V0KHNlbGYudmFsdWVzKQorCisgICAgZGVmIHRlc3RfYWRkX3ByZXNlbnQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LmFkZCgiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldCgiYWJjIikpCisKKyAgICBkZWYgdGVzdF9hZGRfYWJzZW50KHNlbGYpOgorICAgICAgICBzZWxmLnNldC5hZGQoImQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoImFiY2QiKSkKKworICAgIGRlZiB0ZXN0X2FkZF91bnRpbF9mdWxsKHNlbGYpOgorICAgICAgICB0bXAgPSBzZXQoKQorICAgICAgICBleHBlY3RlZF9sZW4gPSAwCisgICAgICAgIGZvciB2IGluIHNlbGYudmFsdWVzOgorICAgICAgICAgICAgdG1wLmFkZCh2KQorICAgICAgICAgICAgZXhwZWN0ZWRfbGVuICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRtcCksIGV4cGVjdGVkX2xlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bXAsIHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3ByZXNlbnQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LnJlbW92ZSgiYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldCgiYWMiKSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9hYnNlbnQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2V0LnJlbW92ZSgiZCIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlJlbW92aW5nIG1pc3NpbmcgZWxlbWVudCBzaG91bGQgaGF2ZSByYWlzZWQgTG9va3VwRXJyb3IiKQorICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfdW50aWxfZW1wdHkoc2VsZik6CisgICAgICAgIGV4cGVjdGVkX2xlbiA9IGxlbihzZWxmLnNldCkKKyAgICAgICAgZm9yIHYgaW4gc2VsZi52YWx1ZXM6CisgICAgICAgICAgICBzZWxmLnNldC5yZW1vdmUodikKKyAgICAgICAgICAgIGV4cGVjdGVkX2xlbiAtPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnNldCksIGV4cGVjdGVkX2xlbikKKworICAgIGRlZiB0ZXN0X2Rpc2NhcmRfcHJlc2VudChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQuZGlzY2FyZCgiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldCgiYWIiKSkKKworICAgIGRlZiB0ZXN0X2Rpc2NhcmRfYWJzZW50KHNlbGYpOgorICAgICAgICBzZWxmLnNldC5kaXNjYXJkKCJkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KCJhYmMiKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLnNldC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc2V0KSwgMCkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgcG9wcGVkID0ge30KKyAgICAgICAgd2hpbGUgc2VsZi5zZXQ6CisgICAgICAgICAgICBwb3BwZWRbc2VsZi5zZXQucG9wKCldID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwb3BwZWQpLCBsZW4oc2VsZi52YWx1ZXMpKQorICAgICAgICBmb3IgdiBpbiBzZWxmLnZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgcG9wcGVkKQorCisgICAgZGVmIHRlc3RfdXBkYXRlX2VtcHR5X3R1cGxlKHNlbGYpOgorICAgICAgICBzZWxmLnNldC51cGRhdGUoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChzZWxmLnZhbHVlcykpCisKKyAgICBkZWYgdGVzdF91cGRhdGVfdW5pdF90dXBsZV9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldC51cGRhdGUoKCJhIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoc2VsZi52YWx1ZXMpKQorCisgICAgZGVmIHRlc3RfdXBkYXRlX3VuaXRfdHVwbGVfbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LnVwZGF0ZSgoImEiLCAieiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoc2VsZi52YWx1ZXMgKyBbInoiXSkpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFN1YnNldHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2FzZTJtZXRob2QgPSB7Ijw9IjogImlzc3Vic2V0IiwKKyAgICAgICAgICAgICAgICAgICAiPj0iOiAiaXNzdXBlcnNldCIsCisgICAgICAgICAgICAgICAgICB9CisKKyAgICByZXZlcnNlID0geyI9PSI6ICI9PSIsCisgICAgICAgICAgICAgICAiIT0iOiAiIT0iLAorICAgICAgICAgICAgICAgIjwiOiAgIj4iLAorICAgICAgICAgICAgICAgIj4iOiAgIjwiLAorICAgICAgICAgICAgICAgIjw9IjogIj49IiwKKyAgICAgICAgICAgICAgICI+PSI6ICI8PSIsCisgICAgICAgICAgICAgIH0KKworICAgIGRlZiB0ZXN0X2lzc3Vic2V0KHNlbGYpOgorICAgICAgICB4ID0gc2VsZi5sZWZ0CisgICAgICAgIHkgPSBzZWxmLnJpZ2h0CisgICAgICAgIGZvciBjYXNlIGluICIhPSIsICI9PSIsICI8IiwgIjw9IiwgIj4iLCAiPj0iOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjYXNlIGluIHNlbGYuY2FzZXMKKyAgICAgICAgICAgICMgVGVzdCB0aGUgYmluYXJ5IGluZml4IHNwZWxsaW5nLgorICAgICAgICAgICAgcmVzdWx0ID0gZXZhbCgieCIgKyBjYXNlICsgInkiLCBsb2NhbHMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKyAgICAgICAgICAgICMgVGVzdCB0aGUgImZyaWVuZGx5IiBtZXRob2QtbmFtZSBzcGVsbGluZywgaWYgb25lIGV4aXN0cy4KKyAgICAgICAgICAgIGlmIGNhc2UgaW4gVGVzdFN1YnNldHMuY2FzZTJtZXRob2Q6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih4LCBUZXN0U3Vic2V0cy5jYXNlMm1ldGhvZFtjYXNlXSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtZXRob2QoeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICMgTm93IGRvIHRoZSBzYW1lIGZvciB0aGUgb3BlcmFuZHMgcmV2ZXJzZWQuCisgICAgICAgICAgICByY2FzZSA9IFRlc3RTdWJzZXRzLnJldmVyc2VbY2FzZV0KKyAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwoInkiICsgcmNhc2UgKyAieCIsIGxvY2FscygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorICAgICAgICAgICAgaWYgcmNhc2UgaW4gVGVzdFN1YnNldHMuY2FzZTJtZXRob2Q6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih5LCBUZXN0U3Vic2V0cy5jYXNlMm1ldGhvZFtyY2FzZV0pCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWV0aG9kKHgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0U3Vic2V0RXF1YWxFbXB0eShUZXN0U3Vic2V0cyk6CisgICAgbGVmdCAgPSBzZXQoKQorICAgIHJpZ2h0ID0gc2V0KCkKKyAgICBuYW1lICA9ICJib3RoIGVtcHR5IgorICAgIGNhc2VzID0gIj09IiwgIjw9IiwgIj49IgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RTdWJzZXRFcXVhbE5vbkVtcHR5KFRlc3RTdWJzZXRzKToKKyAgICBsZWZ0ICA9IHNldChbMSwgMl0pCisgICAgcmlnaHQgPSBzZXQoWzEsIDJdKQorICAgIG5hbWUgID0gImVxdWFsIHBhaXIiCisgICAgY2FzZXMgPSAiPT0iLCAiPD0iLCAiPj0iCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdFN1YnNldEVtcHR5Tm9uRW1wdHkoVGVzdFN1YnNldHMpOgorICAgIGxlZnQgID0gc2V0KCkKKyAgICByaWdodCA9IHNldChbMSwgMl0pCisgICAgbmFtZSAgPSAib25lIGVtcHR5LCBvbmUgbm9uLWVtcHR5IgorICAgIGNhc2VzID0gIiE9IiwgIjwiLCAiPD0iCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdFN1YnNldFBhcnRpYWwoVGVzdFN1YnNldHMpOgorICAgIGxlZnQgID0gc2V0KFsxXSkKKyAgICByaWdodCA9IHNldChbMSwgMl0pCisgICAgbmFtZSAgPSAib25lIGEgbm9uLWVtcHR5IHByb3BlciBzdWJzZXQgb2Ygb3RoZXIiCisgICAgY2FzZXMgPSAiIT0iLCAiPCIsICI8PSIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0U3Vic2V0Tm9uT3ZlcmxhcChUZXN0U3Vic2V0cyk6CisgICAgbGVmdCAgPSBzZXQoWzFdKQorICAgIHJpZ2h0ID0gc2V0KFsyXSkKKyAgICBuYW1lICA9ICJuZWl0aGVyIGVtcHR5LCBuZWl0aGVyIGNvbnRhaW5zIgorICAgIGNhc2VzID0gIiE9IgorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2VxX25lKHNlbGYpOgorICAgICAgICAjIFVubGlrZSB0aGUgb3RoZXJzLCB0aGlzIGlzIHRlc3RpbmcgdGhhdCA9PSBhbmQgIT0gKmFyZSogYWxsb3dlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm90aGVyID09IHNlbGYuc2V0LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCA9PSBzZWxmLm90aGVyLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm90aGVyICE9IHNlbGYuc2V0LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0ICE9IHNlbGYub3RoZXIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9nZV9ndF9sZV9sdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0IDwgc2VsZi5vdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0IDw9IHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCA+IHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCA+PSBzZWxmLm90aGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyIDwgc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyIDw9IHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciA+IHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciA+PSBzZWxmLnNldCkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZV9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXQgfD0gc2VsZi5vdGhlcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LnVwZGF0ZShzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNldC51cGRhdGUsIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF91bmlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0IHwgc2VsZi5vdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYub3RoZXIgfCBzZWxmLnNldCkKKyAgICAgICAgaWYgc2VsZi5vdGhlcklzSXRlcmFibGU6CisgICAgICAgICAgICBzZWxmLnNldC51bmlvbihzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNldC51bmlvbiwgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl91cGRhdGVfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2V0ICY9IHNlbGYub3RoZXIKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgVHlwZUVycm9yIikKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl91cGRhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQuaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXQuaW50ZXJzZWN0aW9uX3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCAmIHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyICYgc2VsZi5zZXQpCisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQuaW50ZXJzZWN0aW9uKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc2V0LmludGVyc2VjdGlvbiwgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX3VwZGF0ZV9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXQgXj0gc2VsZi5vdGhlcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXQuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgXiBzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciBeIHNlbGYuc2V0KQorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlLCBzZWxmLm90aGVyKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV91cGRhdGVfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2V0IC09IHNlbGYub3RoZXIKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgVHlwZUVycm9yIikKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LmRpZmZlcmVuY2VfdXBkYXRlKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldC5kaWZmZXJlbmNlX3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgLSBzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciAtIHNlbGYuc2V0KQorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LmRpZmZlcmVuY2Uoc2VsZi5vdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zZXQuZGlmZmVyZW5jZSwgc2VsZi5vdGhlcikKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0T25seVNldHNOdW1lcmljKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICAgPSBzZXQoKDEsIDIsIDMpKQorICAgICAgICBzZWxmLm90aGVyID0gMTkKKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBGYWxzZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c0RpY3QoVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgICA9IHNldCgoMSwgMiwgMykpCisgICAgICAgIHNlbGYub3RoZXIgPSB7MToyLCAzOjR9CisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gVHJ1ZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c09wZXJhdG9yKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICAgPSBzZXQoKDEsIDIsIDMpKQorICAgICAgICBzZWxmLm90aGVyID0gb3BlcmF0b3IuYWRkCisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gRmFsc2UKKworICAgIGRlZiB0ZXN0X2dlX2d0X2xlX2x0KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzdXBlcihUZXN0T25seVNldHNPcGVyYXRvciwgc2VsZikudGVzdF9nZV9ndF9sZV9sdCgpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdE9ubHlTZXRzVHVwbGUoVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgICA9IHNldCgoMSwgMiwgMykpCisgICAgICAgIHNlbGYub3RoZXIgPSAoMiwgNCwgNikKKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBUcnVlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdE9ubHlTZXRzU3RyaW5nKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICAgPSBzZXQoKDEsIDIsIDMpKQorICAgICAgICBzZWxmLm90aGVyID0gJ2FiYycKKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBUcnVlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdE9ubHlTZXRzR2VuZXJhdG9yKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCAxMCwgMik6CisgICAgICAgICAgICAgICAgeWllbGQgaQorICAgICAgICBzZWxmLnNldCAgID0gc2V0KCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5vdGhlciA9IGdlbigpCisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gVHJ1ZQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RDb3B5aW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGR1cCA9IGxpc3Qoc2VsZi5zZXQuY29weSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4oc2VsZi5zZXQpKQorICAgICAgICBmb3IgZWwgaW4gc2VsZi5zZXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsLCBkdXApCisgICAgICAgICAgICBwb3MgPSBkdXAuaW5kZXgoZWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGVsLCBkdXAucG9wKHBvcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZHVwKQorCisgICAgZGVmIHRlc3RfZGVlcF9jb3B5KHNlbGYpOgorICAgICAgICBkdXAgPSBjb3B5LmRlZXBjb3B5KHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKGR1cCwgc2VsZi5zZXQpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdENvcHlpbmdFbXB0eShUZXN0Q29weWluZyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IHNldCgpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdENvcHlpbmdTaW5nbGV0b24oVGVzdENvcHlpbmcpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBzZXQoWyJoZWxsbyJdKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RDb3B5aW5nVHJpcGxlKFRlc3RDb3B5aW5nKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ID0gc2V0KFsiemVybyIsIDAsIE5vbmVdKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RDb3B5aW5nVHVwbGUoVGVzdENvcHlpbmcpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBzZXQoWygxLCAyKV0pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdENvcHlpbmdOZXN0ZWQoVGVzdENvcHlpbmcpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBzZXQoWygoMSwgMiksICgzLCA0KSldKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RJZGVudGl0aWVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuYSA9IHNldCgnYWJyYWNhZGFicmEnKQorICAgICAgICBzZWxmLmIgPSBzZXQoJ2FsYWNhemFtJykKKworICAgIGRlZiB0ZXN0X2Jpbm9wc1ZzU3Vic2V0cyhzZWxmKToKKyAgICAgICAgYSwgYiA9IHNlbGYuYSwgc2VsZi5iCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIC0gYiA8IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIC0gYSA8IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICYgYiA8IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICYgYiA8IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIHwgYiA+IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIHwgYiA+IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIF4gYiA8IGEgfCBiKQorCisgICAgZGVmIHRlc3RfY29tbXV0YXRpdml0eShzZWxmKToKKyAgICAgICAgYSwgYiA9IHNlbGYuYSwgc2VsZi5iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSZiLCBiJmEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXxiLCBifGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYV5iLCBiXmEpCisgICAgICAgIGlmIGEgIT0gYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYS1iLCBiLWEpCisKKyAgICBkZWYgdGVzdF9zdW1tYXRpb25zKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgc3VtcyBvZiBwYXJ0cyBlcXVhbCB0aGUgd2hvbGUKKyAgICAgICAgYSwgYiA9IHNlbGYuYSwgc2VsZi5iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtYil8KGEmYil8KGItYSksIGF8YikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSZiKXwoYV5iKSwgYXxiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF8KGItYSksIGF8YikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYS1iKXxiLCBhfGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtYil8KGEmYiksIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGItYSl8KGEmYiksIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtYil8KGItYSksIGFeYikKKworICAgIGRlZiB0ZXN0X2V4Y2x1c2lvbihzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IGludmVyc2Ugb3BlcmF0aW9ucyBzaG93IG5vbi1vdmVybGFwCisgICAgICAgIGEsIGIsIHplcm8gPSBzZWxmLmEsIHNlbGYuYiwgc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYS1iKSZiLCB6ZXJvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiLWEpJmEsIHplcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEmYikmKGFeYiksIHplcm8pCisKKyMgVGVzdHMgZGVyaXZlZCBmcm9tIHRlc3RfaXRlcnRvb2xzLnB5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkZWYgUihzZXFuKToKKyAgICAnUmVndWxhciBnZW5lcmF0b3InCisgICAgZm9yIGkgaW4gc2VxbjoKKyAgICAgICAgeWllbGQgaQorCitjbGFzcyBHOgorICAgICdTZXF1ZW5jZSB1c2luZyBfX2dldGl0ZW1fXycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIHJldHVybiBzZWxmLnNlcW5baV0KKworY2xhc3MgSToKKyAgICAnU2VxdWVuY2UgdXNpbmcgaXRlcmF0b3IgcHJvdG9jb2wnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaSA+PSBsZW4oc2VsZi5zZXFuKTogcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICB2ID0gc2VsZi5zZXFuW3NlbGYuaV0KKyAgICAgICAgc2VsZi5pICs9IDEKKyAgICAgICAgcmV0dXJuIHYKKworY2xhc3MgSWc6CisgICAgJ1NlcXVlbmNlIHVzaW5nIGl0ZXJhdG9yIHByb3RvY29sIGRlZmluZWQgd2l0aCBhIGdlbmVyYXRvcicKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZm9yIHZhbCBpbiBzZWxmLnNlcW46CisgICAgICAgICAgICB5aWVsZCB2YWwKKworY2xhc3MgWDoKKyAgICAnTWlzc2luZyBfX2dldGl0ZW1fXyBhbmQgX19pdGVyX18nCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pID49IGxlbihzZWxmLnNlcW4pOiByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHYgPSBzZWxmLnNlcW5bc2VsZi5pXQorICAgICAgICBzZWxmLmkgKz0gMQorICAgICAgICByZXR1cm4gdgorCitjbGFzcyBOOgorICAgICdJdGVyYXRvciBtaXNzaW5nIG5leHQoKScKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworY2xhc3MgRToKKyAgICAnVGVzdCBwcm9wYWdhdGlvbiBvZiBleGNlcHRpb25zJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAzIC8vIDAKKworY2xhc3MgUzoKKyAgICAnVGVzdCBpbW1lZGlhdGUgc3RvcCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHBhc3MKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluLCBpbWFwCitkZWYgTChzZXFuKToKKyAgICAnVGVzdCBtdWx0aXBsZSB0aWVycyBvZiBpdGVyYXRvcnMnCisgICAgcmV0dXJuIGNoYWluKGltYXAobGFtYmRhIHg6eCwgUihJZyhHKHNlcW4pKSkpKQorCitjbGFzcyBUZXN0VmFyaW91c0l0ZXJhdG9yQXJncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgZm9yIGNvbnMgaW4gKHNldCwgZnJvemVuc2V0KToKKyAgICAgICAgICAgIGZvciBzIGluICgiMTIzIiwgIiIsIHJhbmdlKDEwMDApLCAoJ2RvJywgMS4yKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICAgICAgZm9yIGcgaW4gKEcsIEksIElnLCBTLCBMLCBSKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChjb25zKGcocykpLCBzZXQoZyhzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb25zICwgWChzKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbnMgLCBOKHMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBjb25zICwgRShzKSkKKworICAgIGRlZiB0ZXN0X2lubGluZV9tZXRob2RzKHNlbGYpOgorICAgICAgICBzID0gc2V0KCdub3ZlbWJlcicpCisgICAgICAgIGZvciBkYXRhIGluICgiMTIzIiwgIiIsIHJhbmdlKDEwMDApLCAoJ2RvJywgMS4yKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSwgJ2RlY2VtYmVyJyk6CisgICAgICAgICAgICBmb3IgbWV0aCBpbiAocy51bmlvbiwgcy5pbnRlcnNlY3Rpb24sIHMuZGlmZmVyZW5jZSwgcy5zeW1tZXRyaWNfZGlmZmVyZW5jZSwgcy5pc2Rpc2pvaW50KToKKyAgICAgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIEwsIFIpOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IG1ldGgoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gbWV0aChHKGRhdGEpKQorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCBib29sKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIFgocykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCBOKHMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBtZXRoLCBFKHMpKQorCisgICAgZGVmIHRlc3RfaW5wbGFjZV9tZXRob2RzKHNlbGYpOgorICAgICAgICBmb3IgZGF0YSBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSksICdkZWNlbWJlcicpOgorICAgICAgICAgICAgZm9yIG1ldGhuYW1lIGluICgndXBkYXRlJywgJ2ludGVyc2VjdGlvbl91cGRhdGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlmZmVyZW5jZV91cGRhdGUnLCAnc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlJyk6CisgICAgICAgICAgICAgICAgZm9yIGcgaW4gKEcsIEksIElnLCBTLCBMLCBSKToKKyAgICAgICAgICAgICAgICAgICAgcyA9IHNldCgnamFudWFyeScpCisgICAgICAgICAgICAgICAgICAgIHQgPSBzLmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHMsIG1ldGhuYW1lKShsaXN0KGcoZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHQsIG1ldGhuYW1lKShnKGRhdGEpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHMsIHQpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIoc2V0KCdqYW51YXJ5JyksIG1ldGhuYW1lKSwgWChkYXRhKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIoc2V0KCdqYW51YXJ5JyksIG1ldGhuYW1lKSwgTihkYXRhKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZ2V0YXR0cihzZXQoJ2phbnVhcnknKSwgbWV0aG5hbWUpLCBFKGRhdGEpKQorCitjbGFzcyBiYWRfZXE6CisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGJlX2JhZDoKKyAgICAgICAgICAgIHNldDIuY2xlYXIoKQorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiAwCisKK2NsYXNzIGJhZF9kaWN0X2NsZWFyOgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBiZV9iYWQ6CisgICAgICAgICAgICBkaWN0Mi5jbGVhcigpCisgICAgICAgIHJldHVybiBzZWxmIGlzIG90aGVyCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCitjbGFzcyBUZXN0V2VpcmRCdWdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF84NDIwX3NldF9tZXJnZShzZWxmKToKKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gc2VnZmF1bHQKKyAgICAgICAgZ2xvYmFsIGJlX2JhZCwgc2V0MiwgZGljdDIKKyAgICAgICAgYmVfYmFkID0gRmFsc2UKKyAgICAgICAgc2V0MSA9IHtiYWRfZXEoKX0KKyAgICAgICAgc2V0MiA9IHtiYWRfZXEoKSBmb3IgaSBpbiByYW5nZSg3NSl9CisgICAgICAgIGJlX2JhZCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNldDEudXBkYXRlLCBzZXQyKQorCisgICAgICAgIGJlX2JhZCA9IEZhbHNlCisgICAgICAgIHNldDEgPSB7YmFkX2RpY3RfY2xlYXIoKX0KKyAgICAgICAgZGljdDIgPSB7YmFkX2RpY3RfY2xlYXIoKTogTm9uZX0KKyAgICAgICAgYmVfYmFkID0gVHJ1ZQorICAgICAgICBzZXQxLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShkaWN0MikKKworIyBBcHBsaWNhdGlvbiB0ZXN0cyAoYmFzZWQgb24gRGF2aWQgRXBwc3RlaW4ncyBncmFwaCByZWNpcGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkZWYgcG93ZXJzZXQoVSk6CisgICAgIiIiR2VuZXJhdGVzIGFsbCBzdWJzZXRzIG9mIGEgc2V0IG9yIHNlcXVlbmNlIFUuIiIiCisgICAgVSA9IGl0ZXIoVSkKKyAgICB0cnk6CisgICAgICAgIHggPSBmcm96ZW5zZXQoW1UubmV4dCgpXSkKKyAgICAgICAgZm9yIFMgaW4gcG93ZXJzZXQoVSk6CisgICAgICAgICAgICB5aWVsZCBTCisgICAgICAgICAgICB5aWVsZCBTIHwgeAorICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICB5aWVsZCBmcm96ZW5zZXQoKQorCitkZWYgY3ViZShuKToKKyAgICAiIiJHcmFwaCBvZiBuLWRpbWVuc2lvbmFsIGh5cGVyY3ViZS4iIiIKKyAgICBzaW5nbGV0b25zID0gW2Zyb3plbnNldChbeF0pIGZvciB4IGluIHJhbmdlKG4pXQorICAgIHJldHVybiBkaWN0KFsoeCwgZnJvemVuc2V0KFt4XnMgZm9yIHMgaW4gc2luZ2xldG9uc10pKQorICAgICAgICAgICAgICAgICBmb3IgeCBpbiBwb3dlcnNldChyYW5nZShuKSldKQorCitkZWYgbGluZWdyYXBoKEcpOgorICAgICIiIkdyYXBoLCB0aGUgdmVydGljZXMgb2Ygd2hpY2ggYXJlIGVkZ2VzIG9mIEcsCisgICAgd2l0aCB0d28gdmVydGljZXMgYmVpbmcgYWRqYWNlbnQgaWZmIHRoZSBjb3JyZXNwb25kaW5nCisgICAgZWRnZXMgc2hhcmUgYSB2ZXJ0ZXguIiIiCisgICAgTCA9IHt9CisgICAgZm9yIHggaW4gRzoKKyAgICAgICAgZm9yIHkgaW4gR1t4XToKKyAgICAgICAgICAgIG54ID0gW2Zyb3plbnNldChbeCx6XSkgZm9yIHogaW4gR1t4XSBpZiB6ICE9IHldCisgICAgICAgICAgICBueSA9IFtmcm96ZW5zZXQoW3ksel0pIGZvciB6IGluIEdbeV0gaWYgeiAhPSB4XQorICAgICAgICAgICAgTFtmcm96ZW5zZXQoW3gseV0pXSA9IGZyb3plbnNldChueCtueSkKKyAgICByZXR1cm4gTAorCitkZWYgZmFjZXMoRyk6CisgICAgJ1JldHVybiBhIHNldCBvZiBmYWNlcyBpbiBHLiAgV2hlcmUgYSBmYWNlIGlzIGEgc2V0IG9mIHZlcnRpY2VzIG9uIHRoYXQgZmFjZScKKyAgICAjIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRyaWFuZ2xlcyxzcXVhcmVzLCBhbmQgcGVudGFnb25zCisgICAgZiA9IHNldCgpCisgICAgZm9yIHYxLCBlZGdlcyBpbiBHLml0ZW1zKCk6CisgICAgICAgIGZvciB2MiBpbiBlZGdlczoKKyAgICAgICAgICAgIGZvciB2MyBpbiBHW3YyXToKKyAgICAgICAgICAgICAgICBpZiB2MSA9PSB2MzoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiB2MSBpbiBHW3YzXToKKyAgICAgICAgICAgICAgICAgICAgZi5hZGQoZnJvemVuc2V0KFt2MSwgdjIsIHYzXSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHY0IGluIEdbdjNdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdjQgPT0gdjI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHYxIGluIEdbdjRdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuYWRkKGZyb3plbnNldChbdjEsIHYyLCB2MywgdjRdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHY1IGluIEdbdjRdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2NSA9PSB2MyBvciB2NSA9PSB2MjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHYxIGluIEdbdjVdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5hZGQoZnJvemVuc2V0KFt2MSwgdjIsIHYzLCB2NCwgdjVdKSkKKyAgICByZXR1cm4gZgorCisKK2NsYXNzIFRlc3RHcmFwaHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY3ViZShzZWxmKToKKworICAgICAgICBnID0gY3ViZSgzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2ZXJ0IC0tPiB7djEsIHYyLCB2M30KKyAgICAgICAgdmVydGljZXMxID0gc2V0KGcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZlcnRpY2VzMSksIDgpICAgICAjIGVpZ2h0IHZlcnRpY2VzCisgICAgICAgIGZvciBlZGdlIGluIGcudmFsdWVzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlZGdlKSwgMykgICAgICAjIGVhY2ggdmVydGV4IGNvbm5lY3RzIHRvIHRocmVlIGVkZ2VzCisgICAgICAgIHZlcnRpY2VzMiA9IHNldCh2IGZvciBlZGdlcyBpbiBnLnZhbHVlcygpIGZvciB2IGluIGVkZ2VzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcnRpY2VzMSwgdmVydGljZXMyKSAgIyBlZGdlIHZlcnRpY2VzIGluIG9yaWdpbmFsIHNldAorCisgICAgICAgIGN1YmVmYWNlcyA9IGZhY2VzKGcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN1YmVmYWNlcyksIDYpICAgICAjIHNpeCBmYWNlcworICAgICAgICBmb3IgZmFjZSBpbiBjdWJlZmFjZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmYWNlKSwgNCkgICAgICAjIGVhY2ggZmFjZSBpcyBhIHNxdWFyZQorCisgICAgZGVmIHRlc3RfY3Vib2N0YWhlZHJvbihzZWxmKToKKworICAgICAgICAjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3Vib2N0YWhlZHJvbgorICAgICAgICAjIDggdHJpYW5ndWxhciBmYWNlcyBhbmQgNiBzcXVhcmUgZmFjZXMKKyAgICAgICAgIyAxMiBpbmRlbnRpY2FsIHZlcnRpY2VzIGVhY2ggY29ubmVjdGluZyBhIHRyaWFuZ2xlIGFuZCBzcXVhcmUKKworICAgICAgICBnID0gY3ViZSgzKQorICAgICAgICBjdWJvY3RhaGVkcm9uID0gbGluZWdyYXBoKGcpICAgICAgICAgICAgIyBWKCAtLT4ge1YxLCBWMiwgVjMsIFY0fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjdWJvY3RhaGVkcm9uKSwgMTIpIyB0d2VsdmUgdmVydGljZXMKKworICAgICAgICB2ZXJ0aWNlcyA9IHNldChjdWJvY3RhaGVkcm9uKQorICAgICAgICBmb3IgZWRnZXMgaW4gY3Vib2N0YWhlZHJvbi52YWx1ZXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVkZ2VzKSwgNCkgICAgICMgZWFjaCB2ZXJ0ZXggY29ubmVjdHMgdG8gZm91ciBvdGhlciB2ZXJ0aWNlcworICAgICAgICBvdGhlcnZlcnRpY2VzID0gc2V0KGVkZ2UgZm9yIGVkZ2VzIGluIGN1Ym9jdGFoZWRyb24udmFsdWVzKCkgZm9yIGVkZ2UgaW4gZWRnZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVydGljZXMsIG90aGVydmVydGljZXMpICAgIyBlZGdlIHZlcnRpY2VzIGluIG9yaWdpbmFsIHNldAorCisgICAgICAgIGN1Ym9mYWNlcyA9IGZhY2VzKGN1Ym9jdGFoZWRyb24pCisgICAgICAgIGZhY2VzaXplcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgZm9yIGZhY2UgaW4gY3Vib2ZhY2VzOgorICAgICAgICAgICAgZmFjZXNpemVzW2xlbihmYWNlKV0gKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhY2VzaXplc1szXSwgOCkgICAgICAgIyBlaWdodCB0cmlhbmd1bGFyIGZhY2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmFjZXNpemVzWzRdLCA2KSAgICAgICAjIHNpeCBzcXVhcmUgZmFjZXMKKworICAgICAgICBmb3IgdmVydGV4IGluIGN1Ym9jdGFoZWRyb246CisgICAgICAgICAgICBlZGdlID0gdmVydGV4ICAgICAgICAgICAgICAgICAgICAgICAjIEN1Ym9jdGFoZWRyb24gdmVydGljZXMgYXJlIGVkZ2VzIGluIEN1YmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVkZ2UpLCAyKSAgICAgICMgVHdvIGN1YmUgdmVydGljZXMgZGVmaW5lIGFuIGVkZ2UKKyAgICAgICAgICAgIGZvciBjdWJldmVydCBpbiBlZGdlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3ViZXZlcnQsIGcpCisKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9jbGFzc2VzID0gKAorICAgICAgICBUZXN0U2V0LAorICAgICAgICBUZXN0U2V0U3ViY2xhc3MsCisgICAgICAgIFRlc3RTZXRTdWJjbGFzc1dpdGhLZXl3b3JkQXJncywKKyAgICAgICAgVGVzdEZyb3plblNldCwKKyAgICAgICAgVGVzdEZyb3plblNldFN1YmNsYXNzLAorICAgICAgICBUZXN0U2V0T2ZTZXRzLAorICAgICAgICBUZXN0RXhjZXB0aW9uUHJvcGFnYXRpb24sCisgICAgICAgIFRlc3RCYXNpY09wc0VtcHR5LAorICAgICAgICBUZXN0QmFzaWNPcHNTaW5nbGV0b24sCisgICAgICAgIFRlc3RCYXNpY09wc1R1cGxlLAorICAgICAgICBUZXN0QmFzaWNPcHNUcmlwbGUsCisgICAgICAgIFRlc3RCaW5hcnlPcHMsCisgICAgICAgIFRlc3RVcGRhdGVPcHMsCisgICAgICAgIFRlc3RNdXRhdGUsCisgICAgICAgIFRlc3RTdWJzZXRFcXVhbEVtcHR5LAorICAgICAgICBUZXN0U3Vic2V0RXF1YWxOb25FbXB0eSwKKyAgICAgICAgVGVzdFN1YnNldEVtcHR5Tm9uRW1wdHksCisgICAgICAgIFRlc3RTdWJzZXRQYXJ0aWFsLAorICAgICAgICBUZXN0U3Vic2V0Tm9uT3ZlcmxhcCwKKyAgICAgICAgVGVzdE9ubHlTZXRzTnVtZXJpYywKKyAgICAgICAgVGVzdE9ubHlTZXRzRGljdCwKKyAgICAgICAgVGVzdE9ubHlTZXRzT3BlcmF0b3IsCisgICAgICAgIFRlc3RPbmx5U2V0c1R1cGxlLAorICAgICAgICBUZXN0T25seVNldHNTdHJpbmcsCisgICAgICAgIFRlc3RPbmx5U2V0c0dlbmVyYXRvciwKKyAgICAgICAgVGVzdENvcHlpbmdFbXB0eSwKKyAgICAgICAgVGVzdENvcHlpbmdTaW5nbGV0b24sCisgICAgICAgIFRlc3RDb3B5aW5nVHJpcGxlLAorICAgICAgICBUZXN0Q29weWluZ1R1cGxlLAorICAgICAgICBUZXN0Q29weWluZ05lc3RlZCwKKyAgICAgICAgVGVzdElkZW50aXRpZXMsCisgICAgICAgIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzLAorICAgICAgICBUZXN0R3JhcGhzLAorICAgICAgICBUZXN0V2VpcmRCdWdzLAorICAgICAgICApCisKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludCBjb3VudHMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2V0Y29tcHMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zZXRjb21wcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjVlNmY3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2V0Y29tcHMucHkKQEAgLTAsMCArMSwxNTEgQEAKK2RvY3Rlc3RzID0gIiIiCisjIyMjIyMjIyMjIyBUZXN0cyBtb3N0bHkgY29waWVkIGZyb20gdGVzdF9saXN0Y29tcHMucHkgIyMjIyMjIyMjIyMjCisKK1Rlc3Qgc2ltcGxlIGxvb3Agd2l0aCBjb25kaXRpb25hbAorCisgICAgPj4+IHN1bSh7aSppIGZvciBpIGluIHJhbmdlKDEwMCkgaWYgaSYxID09IDF9KQorICAgIDE2NjY1MAorCitUZXN0IHNpbXBsZSBjYXNlCisKKyAgICA+Pj4gezIqeSArIHggKyAxIGZvciB4IGluICgwLCkgZm9yIHkgaW4gKDEsKX0KKyAgICBzZXQoWzNdKQorCitUZXN0IHNpbXBsZSBuZXN0aW5nCisKKyAgICA+Pj4gbGlzdChzb3J0ZWQoeyhpLGopIGZvciBpIGluIHJhbmdlKDMpIGZvciBqIGluIHJhbmdlKDQpfSkpCisgICAgWygwLCAwKSwgKDAsIDEpLCAoMCwgMiksICgwLCAzKSwgKDEsIDApLCAoMSwgMSksICgxLCAyKSwgKDEsIDMpLCAoMiwgMCksICgyLCAxKSwgKDIsIDIpLCAoMiwgMyldCisKK1Rlc3QgbmVzdGluZyB3aXRoIHRoZSBpbm5lciBleHByZXNzaW9uIGRlcGVuZGVudCBvbiB0aGUgb3V0ZXIKKworICAgID4+PiBsaXN0KHNvcnRlZCh7KGksaikgZm9yIGkgaW4gcmFuZ2UoNCkgZm9yIGogaW4gcmFuZ2UoaSl9KSkKKyAgICBbKDEsIDApLCAoMiwgMCksICgyLCAxKSwgKDMsIDApLCAoMywgMSksICgzLCAyKV0KKworTWFrZSBzdXJlIHRoZSBpbmR1Y3Rpb24gdmFyaWFibGUgaXMgbm90IGV4cG9zZWQKKworICAgID4+PiBpID0gMjAKKyAgICA+Pj4gc3VtKHtpKmkgZm9yIGkgaW4gcmFuZ2UoMTAwKX0pCisgICAgMzI4MzUwCisKKyAgICA+Pj4gaQorICAgIDIwCisKK1ZlcmlmeSB0aGF0IHN5bnRheCBlcnJvcidzIGFyZSByYWlzZWQgZm9yIHNldGNvbXBzIHVzZWQgYXMgbHZhbHVlcworCisgICAgPj4+IHt5IGZvciB5IGluICgxLDIpfSA9IDEwICAgICAgICAgICMgZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIC4uLgorICAgIFN5bnRheEVycm9yOiAuLi4KKworICAgID4+PiB7eSBmb3IgeSBpbiAoMSwyKX0gKz0gMTAgICAgICAgICAjIGRvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogLi4uCisKKworTWFrZSBhIG5lc3RlZCBzZXQgY29tcHJlaGVuc2lvbiB0aGF0IGFjdHMgbGlrZSBzZXQocmFuZ2UoKSkKKworICAgID4+PiBkZWYgc3JhbmdlKG4pOgorICAgIC4uLiAgICAgcmV0dXJuIHtpIGZvciBpIGluIHJhbmdlKG4pfQorICAgID4+PiBsaXN0KHNvcnRlZChzcmFuZ2UoMTApKSkKKyAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKworU2FtZSBhZ2Fpbiwgb25seSBhcyBhIGxhbWJkYSBleHByZXNzaW9uIGluc3RlYWQgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uCisKKyAgICA+Pj4gbHJhbmdlID0gbGFtYmRhIG46ICB7aSBmb3IgaSBpbiByYW5nZShuKX0KKyAgICA+Pj4gbGlzdChzb3J0ZWQobHJhbmdlKDEwKSkpCisgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisKK0dlbmVyYXRvcnMgY2FuIGNhbGwgb3RoZXIgZ2VuZXJhdG9yczoKKworICAgID4+PiBkZWYgZ3JhbmdlKG4pOgorICAgIC4uLiAgICAgZm9yIHggaW4ge2kgZm9yIGkgaW4gcmFuZ2Uobil9OgorICAgIC4uLiAgICAgICAgIHlpZWxkIHgKKyAgICA+Pj4gbGlzdChzb3J0ZWQoZ3JhbmdlKDUpKSkKKyAgICBbMCwgMSwgMiwgMywgNF0KKworCitNYWtlIHN1cmUgdGhhdCBOb25lIGlzIGEgdmFsaWQgcmV0dXJuIHZhbHVlCisKKyAgICA+Pj4ge05vbmUgZm9yIGkgaW4gcmFuZ2UoMTApfQorICAgIHNldChbTm9uZV0pCisKKyMjIyMjIyMjIyMjIFRlc3RzIGZvciB2YXJpb3VzIHNjb3BpbmcgY29ybmVyIGNhc2VzICMjIyMjIyMjIyMjIworCitSZXR1cm4gbGFtYmRhcyB0aGF0IHVzZSB0aGUgaXRlcmF0aW9uIHZhcmlhYmxlIGFzIGEgZGVmYXVsdCBhcmd1bWVudAorCisgICAgPj4+IGl0ZW1zID0geyhsYW1iZGEgaT1pOiBpKSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICA+Pj4ge3goKSBmb3IgeCBpbiBpdGVtc30gPT0gc2V0KHJhbmdlKDUpKQorICAgIFRydWUKKworU2FtZSBhZ2Fpbiwgb25seSB0aGlzIHRpbWUgYXMgYSBjbG9zdXJlIHZhcmlhYmxlCisKKyAgICA+Pj4gaXRlbXMgPSB7KGxhbWJkYTogaSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgPj4+IHt4KCkgZm9yIHggaW4gaXRlbXN9CisgICAgc2V0KFs0XSkKKworQW5vdGhlciB3YXkgdG8gdGVzdCB0aGF0IHRoZSBpdGVyYXRpb24gdmFyaWFibGUgaXMgbG9jYWwgdG8gdGhlIGxpc3QgY29tcAorCisgICAgPj4+IGl0ZW1zID0geyhsYW1iZGE6IGkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgID4+PiBpID0gMjAKKyAgICA+Pj4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICBzZXQoWzRdKQorCitBbmQgY29uZmlybSB0aGF0IGEgY2xvc3VyZSBjYW4ganVtcCBvdmVyIHRoZSBsaXN0IGNvbXAgc2NvcGUKKworICAgID4+PiBpdGVtcyA9IHsobGFtYmRhOiB5KSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICA+Pj4geSA9IDIKKyAgICA+Pj4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICBzZXQoWzJdKQorCitXZSBhbHNvIHJlcGVhdCBlYWNoIG9mIHRoZSBhYm92ZSBzY29waW5nIHRlc3RzIGluc2lkZSBhIGZ1bmN0aW9uCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuYygpOgorICAgIC4uLiAgICAgaXRlbXMgPSB7KGxhbWJkYSBpPWk6IGkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgIC4uLiAgICAgcmV0dXJuIHt4KCkgZm9yIHggaW4gaXRlbXN9CisgICAgPj4+IHRlc3RfZnVuYygpID09IHNldChyYW5nZSg1KSkKKyAgICBUcnVlCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuYygpOgorICAgIC4uLiAgICAgaXRlbXMgPSB7KGxhbWJkYTogaSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgLi4uICAgICByZXR1cm4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICA+Pj4gdGVzdF9mdW5jKCkKKyAgICBzZXQoWzRdKQorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmMoKToKKyAgICAuLi4gICAgIGl0ZW1zID0geyhsYW1iZGE6IGkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgIC4uLiAgICAgaSA9IDIwCisgICAgLi4uICAgICByZXR1cm4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICA+Pj4gdGVzdF9mdW5jKCkKKyAgICBzZXQoWzRdKQorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmMoKToKKyAgICAuLi4gICAgIGl0ZW1zID0geyhsYW1iZGE6IHkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgIC4uLiAgICAgeSA9IDIKKyAgICAuLi4gICAgIHJldHVybiB7eCgpIGZvciB4IGluIGl0ZW1zfQorICAgID4+PiB0ZXN0X2Z1bmMoKQorICAgIHNldChbMl0pCisKKyIiIgorCisKK19fdGVzdF9fID0geydkb2N0ZXN0cycgOiBkb2N0ZXN0c30KKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGltcG9ydCBzeXMKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zZXRjb21wcworICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3NldGNvbXBzLCB2ZXJib3NlKQorCisgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3NldGNvbXBzLCB2ZXJib3NlKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHByaW50KGNvdW50cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2V0cy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NldHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1NGVkNwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NldHMucHkKQEAgLTAsMCArMSw4NjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgdW5pdHRlc3QsIG9wZXJhdG9yLCBjb3B5LCBwaWNrbGUsIHJhbmRvbQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKwordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoInNldHMiLCBkZXByZWNhdGVkPVRydWUpCitmcm9tIHNldHMgaW1wb3J0IFNldCwgSW1tdXRhYmxlU2V0CisKK2VtcHR5X3NldCA9IFNldCgpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEJhc2ljT3BzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmVwciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLnNldCksIHNlbGYucmVwcikKKworICAgIGRlZiB0ZXN0X2xlbmd0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zZXQpLCBzZWxmLmxlbmd0aCkKKworICAgIGRlZiB0ZXN0X3NlbGZfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3RfZXF1aXZhbGVudF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LmNvcHkoKSwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF9zZWxmX3VuaW9uKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCB8IHNlbGYuc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZWxmLmR1cCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3VuaW9uKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCB8IGVtcHR5X3NldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF91bmlvbl9lbXB0eShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gZW1wdHlfc2V0IHwgc2VsZi5zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3Rfc2VsZl9pbnRlcnNlY3Rpb24oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0ICYgc2VsZi5zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfaW50ZXJzZWN0aW9uKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCAmIGVtcHR5X3NldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX2VtcHR5KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBlbXB0eV9zZXQgJiBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3Rfc2VsZl9zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgXiBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZW1wdHlfc2V0KQorCisgICAgZGVmIGNoZWNrZW1wdHlfc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IF4gZW1wdHlfc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZWxmLnNldCkKKworICAgIGRlZiB0ZXN0X3NlbGZfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgLSBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgLSBlbXB0eV9zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGlmZmVyZW5jZV9yZXYoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGVtcHR5X3NldCAtIHNlbGYuc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBlbXB0eV9zZXQpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb24oc2VsZik6CisgICAgICAgIGZvciB2IGluIHNlbGYuc2V0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBzZWxmLnZhbHVlcykKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICBwID0gcGlja2xlLmR1bXBzKHNlbGYuc2V0KQorICAgICAgICBjb3B5ID0gcGlja2xlLmxvYWRzKHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIGNvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICE9ICVzIiAlIChzZWxmLnNldCwgY29weSkpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdEJhc2ljT3BzRW1wdHkoVGVzdEJhc2ljT3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZSAgID0gImVtcHR5IHNldCIKKyAgICAgICAgc2VsZi52YWx1ZXMgPSBbXQorICAgICAgICBzZWxmLnNldCAgICA9IFNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5kdXAgICAgPSBTZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYubGVuZ3RoID0gMAorICAgICAgICBzZWxmLnJlcHIgICA9ICJTZXQoW10pIgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RCYXNpY09wc1NpbmdsZXRvbihUZXN0QmFzaWNPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlICAgPSAidW5pdCBzZXQgKG51bWJlcikiCisgICAgICAgIHNlbGYudmFsdWVzID0gWzNdCisgICAgICAgIHNlbGYuc2V0ICAgID0gU2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmR1cCAgICA9IFNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5sZW5ndGggPSAxCisgICAgICAgIHNlbGYucmVwciAgID0gIlNldChbM10pIgorCisgICAgZGVmIHRlc3RfaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgzIGluIHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3Rfbm90X2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoMiBub3QgaW4gc2VsZi5zZXQpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdEJhc2ljT3BzVHVwbGUoVGVzdEJhc2ljT3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZSAgID0gInVuaXQgc2V0ICh0dXBsZSkiCisgICAgICAgIHNlbGYudmFsdWVzID0gWygwLCAiemVybyIpXQorICAgICAgICBzZWxmLnNldCAgICA9IFNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5kdXAgICAgPSBTZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYubGVuZ3RoID0gMQorICAgICAgICBzZWxmLnJlcHIgICA9ICJTZXQoWygwLCAnemVybycpXSkiCisKKyAgICBkZWYgdGVzdF9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgwLCAiemVybyIpIGluIHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3Rfbm90X2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoOSBub3QgaW4gc2VsZi5zZXQpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdEJhc2ljT3BzVHJpcGxlKFRlc3RCYXNpY09wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2UgICA9ICJ0cmlwbGUgc2V0IgorICAgICAgICBzZWxmLnZhbHVlcyA9IFswLCAiemVybyIsIG9wZXJhdG9yLmFkZF0KKyAgICAgICAgc2VsZi5zZXQgICAgPSBTZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYuZHVwICAgID0gU2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmxlbmd0aCA9IDMKKyAgICAgICAgc2VsZi5yZXByICAgPSBOb25lCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGVmIGJhZGl0ZXIoKToKKyAgICByYWlzZSBUeXBlRXJyb3IKKyAgICB5aWVsZCBUcnVlCisKK2RlZiBnb29kaXRlcigpOgorICAgIHlpZWxkIFRydWUKKworY2xhc3MgVGVzdEV4Y2VwdGlvblByb3BhZ2F0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJTRiA2MjgyNDY6ICBTZXQgY29uc3RydWN0b3Igc2hvdWxkIG5vdCB0cmFwIGl0ZXJhdG9yIFR5cGVFcnJvcnMiIiIKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlV2l0aEV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBTZXQsIGJhZGl0ZXIoKSkKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlc1dpdGhvdXRFeGNlcHRpb24oc2VsZik6CisgICAgICAgICMgQWxsIG9mIHRoZXNlIGl0ZXJhYmxlcyBzaG91bGQgbG9hZCB3aXRob3V0IGV4Y2VwdGlvbi4KKyAgICAgICAgU2V0KFsxLDIsM10pCisgICAgICAgIFNldCgoMSwyLDMpKQorICAgICAgICBTZXQoeydvbmUnOjEsICd0d28nOjIsICd0aHJlZSc6M30pCisgICAgICAgIFNldCh4cmFuZ2UoMykpCisgICAgICAgIFNldCgnYWJjJykKKyAgICAgICAgU2V0KGdvb2RpdGVyKCkpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFNldE9mU2V0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGlubmVyID0gU2V0KFsxXSkKKyAgICAgICAgb3V0ZXIgPSBTZXQoW2lubmVyXSkKKyAgICAgICAgZWxlbWVudCA9IG91dGVyLnBvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShlbGVtZW50KSwgSW1tdXRhYmxlU2V0KQorICAgICAgICBvdXRlci5hZGQoaW5uZXIpICAgICAgICAjIFJlYnVpbGQgc2V0IG9mIHNldHMgd2l0aCAuYWRkIG1ldGhvZAorICAgICAgICBvdXRlci5yZW1vdmUoaW5uZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0ZXIsIFNldCgpKSAgICMgVmVyaWZ5IHRoYXQgcmVtb3ZlIHdvcmtlZAorICAgICAgICBvdXRlci5kaXNjYXJkKGlubmVyKSAgICAjIEFic2VuY2Ugb2YgS2V5RXJyb3IgaW5kaWNhdGVzIHdvcmtpbmcgZmluZQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RCaW5hcnlPcHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBTZXQoKDIsIDQsIDYpKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6ICAgICAgICAgICAgICAjIFNGIGJ1ZyA2NDMxMTUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KHsyOjEsNDozLDY6NX0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fc3Vic2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCB8IFNldChbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBTZXQoKDIsIDQsIDYpKSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX3N1cGVyc2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCB8IFNldChbMiwgNCwgNiwgOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBTZXQoWzIsIDQsIDYsIDhdKSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgU2V0KFszLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFNldChbMiwgMywgNCwgNSwgNl0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgU2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFNldChbMiwgNCwgNiwgOF0pKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3N1YnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgJiBTZXQoKDIsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgU2V0KCgyLCA0KSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0ICYgU2V0KFsyLCA0LCA2LCA4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFNldChbMiwgNCwgNl0pKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0ICYgU2V0KFszLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFNldChbNF0pKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCAmIFNldChbOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBlbXB0eV9zZXQpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9zdWJzZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IF4gU2V0KCgyLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFNldChbNl0pKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2Vfc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IF4gU2V0KCgyLCA0LCA2LCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFNldChbOF0pKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2Vfb3ZlcmxhcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgXiBTZXQoKDMsIDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgU2V0KFsyLCAzLCA1LCA2XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgXiBTZXQoWzhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgU2V0KFsyLCA0LCA2LCA4XSkpCisKKyAgICBkZWYgdGVzdF9jbXAoc2VsZik6CisgICAgICAgIGEsIGIgPSBTZXQoJ2EnKSwgU2V0KCdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsIGEsIGIpCisKKyAgICAgICAgIyBZb3UgY2FuIHZpZXcgdGhpcyBhcyBhIGJ1Z2xldDogIGNtcChhLCBhKSBkb2VzIG5vdCByYWlzZSBUeXBlRXJyb3IsCisgICAgICAgICMgYmVjYXVzZSBfX2VxX18gaXMgdHJpZWQgYmVmb3JlIF9fY21wX18sIGFuZCBhLl9fZXFfXyhhKSByZXR1cm5zIFRydWUsCisgICAgICAgICMgd2hpY2ggUHl0aG9uIHRoaW5rcyBpcyBnb29kIGVub3VnaCB0byBzeW50aGVzaXplIGEgY21wKCkgcmVzdWx0CisgICAgICAgICMgd2l0aG91dCBjYWxsaW5nIF9fY21wX18uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGEsIGEpLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCBhLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsICJhYmMiLCBhKQorCisgICAgZGVmIHRlc3RfaW5wbGFjZV9vbl9zZWxmKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi5zZXQuY29weSgpCisgICAgICAgIHQgfD0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHNlbGYuc2V0KQorICAgICAgICB0ICY9IHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBzZWxmLnNldCkKKyAgICAgICAgdCAtPSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCAwKQorICAgICAgICB0ID0gc2VsZi5zZXQuY29weSgpCisgICAgICAgIHQgXj0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgMCkKKworCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RVcGRhdGVPcHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBTZXQoKDIsIDQsIDYpKQorCisgICAgZGVmIHRlc3RfdW5pb25fc3Vic2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldCB8PSBTZXQoWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoKDIsIDQsIDYpKSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX3N1cGVyc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldCB8PSBTZXQoWzIsIDQsIDYsIDhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzIsIDQsIDYsIDhdKSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IHw9IFNldChbMywgNCwgNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChbMiwgMywgNCwgNSwgNl0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IHw9IFNldChbOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChbMiwgNCwgNiwgOF0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fbWV0aG9kX2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LnVuaW9uX3VwZGF0ZShTZXQoWzMsIDQsIDVdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFsyLCAzLCA0LCA1LCA2XSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fc3Vic2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldCAmPSBTZXQoKDIsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoKDIsIDQpKSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9zdXBlcnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgJj0gU2V0KFsyLCA0LCA2LCA4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFsyLCA0LCA2XSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgJj0gU2V0KFszLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFs0XSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICY9IFNldChbOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIGVtcHR5X3NldCkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9tZXRob2RfY2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQuaW50ZXJzZWN0aW9uX3VwZGF0ZShTZXQoWzMsIDQsIDVdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFs0XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9zdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IF49IFNldCgoMiwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChbNl0pKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2Vfc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IF49IFNldCgoMiwgNCwgNiwgOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChbOF0pKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2Vfb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgXj0gU2V0KCgzLCA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFsyLCAzLCA1LCA2XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgXj0gU2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFsyLCA0LCA2LCA4XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9tZXRob2RfY2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlKFNldChbMywgNCwgNV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzIsIDMsIDUsIDZdKSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2Vfc3Vic2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldCAtPSBTZXQoKDIsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzZdKSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2Vfc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IC09IFNldCgoMiwgNCwgNiwgOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChbXSkpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IC09IFNldCgoMywgNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChbMiwgNl0pKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgLT0gU2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFsyLCA0LCA2XSkpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX21ldGhvZF9jYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNldC5kaWZmZXJlbmNlX3VwZGF0ZShTZXQoWzMsIDQsIDVdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFsyLCA2XSkpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE11dGF0ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnZhbHVlcyA9IFsiYSIsICJiIiwgImMiXQorICAgICAgICBzZWxmLnNldCA9IFNldChzZWxmLnZhbHVlcykKKworICAgIGRlZiB0ZXN0X2FkZF9wcmVzZW50KHNlbGYpOgorICAgICAgICBzZWxmLnNldC5hZGQoImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoImFiYyIpKQorCisgICAgZGVmIHRlc3RfYWRkX2Fic2VudChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQuYWRkKCJkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KCJhYmNkIikpCisKKyAgICBkZWYgdGVzdF9hZGRfdW50aWxfZnVsbChzZWxmKToKKyAgICAgICAgdG1wID0gU2V0KCkKKyAgICAgICAgZXhwZWN0ZWRfbGVuID0gMAorICAgICAgICBmb3IgdiBpbiBzZWxmLnZhbHVlczoKKyAgICAgICAgICAgIHRtcC5hZGQodikKKyAgICAgICAgICAgIGV4cGVjdGVkX2xlbiArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0bXApLCBleHBlY3RlZF9sZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG1wLCBzZWxmLnNldCkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9wcmVzZW50KHNlbGYpOgorICAgICAgICBzZWxmLnNldC5yZW1vdmUoImIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoImFjIikpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfYWJzZW50KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNldC5yZW1vdmUoImQiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJSZW1vdmluZyBtaXNzaW5nIGVsZW1lbnQgc2hvdWxkIGhhdmUgcmFpc2VkIExvb2t1cEVycm9yIikKKyAgICAgICAgZXhjZXB0IExvb2t1cEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcmVtb3ZlX3VudGlsX2VtcHR5KHNlbGYpOgorICAgICAgICBleHBlY3RlZF9sZW4gPSBsZW4oc2VsZi5zZXQpCisgICAgICAgIGZvciB2IGluIHNlbGYudmFsdWVzOgorICAgICAgICAgICAgc2VsZi5zZXQucmVtb3ZlKHYpCisgICAgICAgICAgICBleHBlY3RlZF9sZW4gLT0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zZXQpLCBleHBlY3RlZF9sZW4pCisKKyAgICBkZWYgdGVzdF9kaXNjYXJkX3ByZXNlbnQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LmRpc2NhcmQoImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoImFiIikpCisKKyAgICBkZWYgdGVzdF9kaXNjYXJkX2Fic2VudChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQuZGlzY2FyZCgiZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldCgiYWJjIikpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5zZXQuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnNldCksIDApCisKKyAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CisgICAgICAgIHBvcHBlZCA9IHt9CisgICAgICAgIHdoaWxlIHNlbGYuc2V0OgorICAgICAgICAgICAgcG9wcGVkW3NlbGYuc2V0LnBvcCgpXSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocG9wcGVkKSwgbGVuKHNlbGYudmFsdWVzKSkKKyAgICAgICAgZm9yIHYgaW4gc2VsZi52YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIHBvcHBlZCkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZV9lbXB0eV90dXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXQudW5pb25fdXBkYXRlKCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoc2VsZi52YWx1ZXMpKQorCisgICAgZGVmIHRlc3RfdXBkYXRlX3VuaXRfdHVwbGVfb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQudW5pb25fdXBkYXRlKCgiYSIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KHNlbGYudmFsdWVzKSkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZV91bml0X3R1cGxlX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldC51bmlvbl91cGRhdGUoKCJhIiwgInoiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KHNlbGYudmFsdWVzICsgWyJ6Il0pKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RTdWJzZXRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNhc2UybWV0aG9kID0geyI8PSI6ICJpc3N1YnNldCIsCisgICAgICAgICAgICAgICAgICAgIj49IjogImlzc3VwZXJzZXQiLAorICAgICAgICAgICAgICAgICAgfQorCisgICAgcmV2ZXJzZSA9IHsiPT0iOiAiPT0iLAorICAgICAgICAgICAgICAgIiE9IjogIiE9IiwKKyAgICAgICAgICAgICAgICI8IjogICI+IiwKKyAgICAgICAgICAgICAgICI+IjogICI8IiwKKyAgICAgICAgICAgICAgICI8PSI6ICI+PSIsCisgICAgICAgICAgICAgICAiPj0iOiAiPD0iLAorICAgICAgICAgICAgICB9CisKKyAgICBkZWYgdGVzdF9pc3N1YnNldChzZWxmKToKKyAgICAgICAgeCA9IHNlbGYubGVmdAorICAgICAgICB5ID0gc2VsZi5yaWdodAorICAgICAgICBmb3IgY2FzZSBpbiAiIT0iLCAiPT0iLCAiPCIsICI8PSIsICI+IiwgIj49IjoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gY2FzZSBpbiBzZWxmLmNhc2VzCisgICAgICAgICAgICAjIFRlc3QgdGhlIGJpbmFyeSBpbmZpeCBzcGVsbGluZy4KKyAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwoIngiICsgY2FzZSArICJ5IiwgbG9jYWxzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisgICAgICAgICAgICAjIFRlc3QgdGhlICJmcmllbmRseSIgbWV0aG9kLW5hbWUgc3BlbGxpbmcsIGlmIG9uZSBleGlzdHMuCisgICAgICAgICAgICBpZiBjYXNlIGluIFRlc3RTdWJzZXRzLmNhc2UybWV0aG9kOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoeCwgVGVzdFN1YnNldHMuY2FzZTJtZXRob2RbY2FzZV0pCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWV0aG9kKHkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgICAgICAgICAjIE5vdyBkbyB0aGUgc2FtZSBmb3IgdGhlIG9wZXJhbmRzIHJldmVyc2VkLgorICAgICAgICAgICAgcmNhc2UgPSBUZXN0U3Vic2V0cy5yZXZlcnNlW2Nhc2VdCisgICAgICAgICAgICByZXN1bHQgPSBldmFsKCJ5IiArIHJjYXNlICsgIngiLCBsb2NhbHMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKyAgICAgICAgICAgIGlmIHJjYXNlIGluIFRlc3RTdWJzZXRzLmNhc2UybWV0aG9kOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoeSwgVGVzdFN1YnNldHMuY2FzZTJtZXRob2RbcmNhc2VdKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ldGhvZCh4KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdFN1YnNldEVxdWFsRW1wdHkoVGVzdFN1YnNldHMpOgorICAgIGxlZnQgID0gU2V0KCkKKyAgICByaWdodCA9IFNldCgpCisgICAgbmFtZSAgPSAiYm90aCBlbXB0eSIKKyAgICBjYXNlcyA9ICI9PSIsICI8PSIsICI+PSIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0U3Vic2V0RXF1YWxOb25FbXB0eShUZXN0U3Vic2V0cyk6CisgICAgbGVmdCAgPSBTZXQoWzEsIDJdKQorICAgIHJpZ2h0ID0gU2V0KFsxLCAyXSkKKyAgICBuYW1lICA9ICJlcXVhbCBwYWlyIgorICAgIGNhc2VzID0gIj09IiwgIjw9IiwgIj49IgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RTdWJzZXRFbXB0eU5vbkVtcHR5KFRlc3RTdWJzZXRzKToKKyAgICBsZWZ0ICA9IFNldCgpCisgICAgcmlnaHQgPSBTZXQoWzEsIDJdKQorICAgIG5hbWUgID0gIm9uZSBlbXB0eSwgb25lIG5vbi1lbXB0eSIKKyAgICBjYXNlcyA9ICIhPSIsICI8IiwgIjw9IgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RTdWJzZXRQYXJ0aWFsKFRlc3RTdWJzZXRzKToKKyAgICBsZWZ0ICA9IFNldChbMV0pCisgICAgcmlnaHQgPSBTZXQoWzEsIDJdKQorICAgIG5hbWUgID0gIm9uZSBhIG5vbi1lbXB0eSBwcm9wZXIgc3Vic2V0IG9mIG90aGVyIgorICAgIGNhc2VzID0gIiE9IiwgIjwiLCAiPD0iCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdFN1YnNldE5vbk92ZXJsYXAoVGVzdFN1YnNldHMpOgorICAgIGxlZnQgID0gU2V0KFsxXSkKKyAgICByaWdodCA9IFNldChbMl0pCisgICAgbmFtZSAgPSAibmVpdGhlciBlbXB0eSwgbmVpdGhlciBjb250YWlucyIKKyAgICBjYXNlcyA9ICIhPSIKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0T25seVNldHNJbkJpbmFyeU9wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lcV9uZShzZWxmKToKKyAgICAgICAgIyBVbmxpa2UgdGhlIG90aGVycywgdGhpcyBpcyB0ZXN0aW5nIHRoYXQgPT0gYW5kICE9ICphcmUqIGFsbG93ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vdGhlciA9PSBzZWxmLnNldCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQgPT0gc2VsZi5vdGhlciwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vdGhlciAhPSBzZWxmLnNldCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCAhPSBzZWxmLm90aGVyLCBUcnVlKQorCisgICAgZGVmIHRlc3RfZ2VfZ3RfbGVfbHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCA8IHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCA8PSBzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgPiBzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgPj0gc2VsZi5vdGhlcikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciA8IHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciA8PSBzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYub3RoZXIgPiBzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYub3RoZXIgPj0gc2VsZi5zZXQpCisKKyAgICBkZWYgdGVzdF91bmlvbl91cGRhdGVfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2V0IHw9IHNlbGYub3RoZXIKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgVHlwZUVycm9yIikKKworICAgIGRlZiB0ZXN0X3VuaW9uX3VwZGF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5vdGhlcklzSXRlcmFibGU6CisgICAgICAgICAgICBzZWxmLnNldC51bmlvbl91cGRhdGUoc2VsZi5vdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zZXQudW5pb25fdXBkYXRlLCBzZWxmLm90aGVyKQorCisgICAgZGVmIHRlc3RfdW5pb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCB8IHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyIHwgc2VsZi5zZXQpCisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQudW5pb24oc2VsZi5vdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zZXQudW5pb24sIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fdXBkYXRlX29wZXJhdG9yKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNldCAmPSBzZWxmLm90aGVyCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIFR5cGVFcnJvciIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fdXBkYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LmludGVyc2VjdGlvbl91cGRhdGUoc2VsZi5vdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0LmludGVyc2VjdGlvbl91cGRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm90aGVyKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgJiBzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciAmIHNlbGYuc2V0KQorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LmludGVyc2VjdGlvbihzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNldC5pbnRlcnNlY3Rpb24sIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV91cGRhdGVfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2V0IF49IHNlbGYub3RoZXIKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgVHlwZUVycm9yIikKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5vdGhlcklzSXRlcmFibGU6CisgICAgICAgICAgICBzZWxmLnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5vdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0IF4gc2VsZi5vdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYub3RoZXIgXiBzZWxmLnNldCkKKyAgICAgICAgaWYgc2VsZi5vdGhlcklzSXRlcmFibGU6CisgICAgICAgICAgICBzZWxmLnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZSwgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2VfdXBkYXRlX29wZXJhdG9yKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNldCAtPSBzZWxmLm90aGVyCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIFR5cGVFcnJvciIpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5vdGhlcklzSXRlcmFibGU6CisgICAgICAgICAgICBzZWxmLnNldC5kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXQuZGlmZmVyZW5jZV91cGRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm90aGVyKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0IC0gc2VsZi5vdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYub3RoZXIgLSBzZWxmLnNldCkKKyAgICAgICAgaWYgc2VsZi5vdGhlcklzSXRlcmFibGU6CisgICAgICAgICAgICBzZWxmLnNldC5kaWZmZXJlbmNlKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc2V0LmRpZmZlcmVuY2UsIHNlbGYub3RoZXIpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdE9ubHlTZXRzTnVtZXJpYyhUZXN0T25seVNldHNJbkJpbmFyeU9wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAgID0gU2V0KCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5vdGhlciA9IDE5CisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gRmFsc2UKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0T25seVNldHNEaWN0KFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICAgPSBTZXQoKDEsIDIsIDMpKQorICAgICAgICBzZWxmLm90aGVyID0gezE6MiwgMzo0fQorICAgICAgICBzZWxmLm90aGVySXNJdGVyYWJsZSA9IFRydWUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0T25seVNldHNPcGVyYXRvcihUZXN0T25seVNldHNJbkJpbmFyeU9wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAgID0gU2V0KCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5vdGhlciA9IG9wZXJhdG9yLmFkZAorICAgICAgICBzZWxmLm90aGVySXNJdGVyYWJsZSA9IEZhbHNlCisKKyAgICBkZWYgdGVzdF9nZV9ndF9sZV9sdChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc3VwZXIoVGVzdE9ubHlTZXRzT3BlcmF0b3IsIHNlbGYpLnRlc3RfZ2VfZ3RfbGVfbHQoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c1R1cGxlKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICAgPSBTZXQoKDEsIDIsIDMpKQorICAgICAgICBzZWxmLm90aGVyID0gKDIsIDQsIDYpCisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gVHJ1ZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c1N0cmluZyhUZXN0T25seVNldHNJbkJpbmFyeU9wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAgID0gU2V0KCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5vdGhlciA9ICdhYmMnCisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gVHJ1ZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c0dlbmVyYXRvcihUZXN0T25seVNldHNJbkJpbmFyeU9wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgMTAsIDIpOgorICAgICAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgc2VsZi5zZXQgICA9IFNldCgoMSwgMiwgMykpCisgICAgICAgIHNlbGYub3RoZXIgPSBnZW4oKQorICAgICAgICBzZWxmLm90aGVySXNJdGVyYWJsZSA9IFRydWUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0T25seVNldHNvZlNldHMoVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgICA9IFNldCgoMSwgMiwgMykpCisgICAgICAgIHNlbGYub3RoZXIgPSBbU2V0KCdhYicpLCBJbW11dGFibGVTZXQoJ2NkJyldCisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gVHJ1ZQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RDb3B5aW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGR1cCA9IHNlbGYuc2V0LmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4oc2VsZi5zZXQpKQorICAgICAgICBkdXBfbGlzdCA9IHNvcnRlZChkdXApCisgICAgICAgIHNldF9saXN0ID0gc29ydGVkKHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXBfbGlzdCksIGxlbihzZXRfbGlzdCkpCisgICAgICAgIGZvciBpLCBlbCBpbiBlbnVtZXJhdGUoZHVwX2xpc3QpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlbCwgc2V0X2xpc3RbaV0pCisKKyAgICBkZWYgdGVzdF9kZWVwX2NvcHkoc2VsZik6CisgICAgICAgIGR1cCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoZHVwLCBzZWxmLnNldCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0Q29weWluZ0VtcHR5KFRlc3RDb3B5aW5nKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ID0gU2V0KCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0Q29weWluZ1NpbmdsZXRvbihUZXN0Q29weWluZyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IFNldChbImhlbGxvIl0pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdENvcHlpbmdUcmlwbGUoVGVzdENvcHlpbmcpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBTZXQoWyJ6ZXJvIiwgMCwgTm9uZV0pCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzdXBlcihUZXN0Q29weWluZ1RyaXBsZSwgc2VsZikudGVzdF9jb3B5KCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0Q29weWluZ1R1cGxlKFRlc3RDb3B5aW5nKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ID0gU2V0KFsoMSwgMildKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RDb3B5aW5nTmVzdGVkKFRlc3RDb3B5aW5nKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ID0gU2V0KFsoKDEsIDIpLCAoMywgNCkpXSkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0SWRlbnRpdGllcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmEgPSBTZXQoW3JhbmRvbS5yYW5kcmFuZ2UoMTAwKSBmb3IgaSBpbiB4cmFuZ2UoNTApXSkKKyAgICAgICAgc2VsZi5iID0gU2V0KFtyYW5kb20ucmFuZHJhbmdlKDEwMCkgZm9yIGkgaW4geHJhbmdlKDUwKV0pCisKKyAgICBkZWYgdGVzdF9iaW5vcHNWc1N1YnNldHMoc2VsZik6CisgICAgICAgIGEsIGIgPSBzZWxmLmEsIHNlbGYuYgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSAtIGIgPD0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgLSBhIDw9IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICYgYiA8PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSAmIGIgPD0gYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgfCBiID49IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIHwgYiA+PSBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBeIGIgPD0gYSB8IGIpCisKKyAgICBkZWYgdGVzdF9jb21tdXRhdGl2aXR5KHNlbGYpOgorICAgICAgICBhLCBiID0gc2VsZi5hLCBzZWxmLmIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhJmIsIGImYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhfGIsIGJ8YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhXmIsIGJeYSkKKyAgICAgICAgaWYgYSAhPSBiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLWIsIGItYSkKKworICAgIGRlZiB0ZXN0X3JlZmxleHNpdmVfcmVsYXRpb25zKHNlbGYpOgorICAgICAgICBhLCB6ZXJvID0gc2VsZi5hLCBTZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgXiBhLCB6ZXJvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSBhLCB6ZXJvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgfCBhLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgJiBhLCBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA8PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA+PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBhKQorCisgICAgZGVmIHRlc3Rfc3VtbWF0aW9ucyhzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IHN1bXMgb2YgcGFydHMgZXF1YWwgdGhlIHdob2xlCisgICAgICAgIGEsIGIgPSBzZWxmLmEsIHNlbGYuYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLWIpfChhJmIpfChiLWEpLCBhfGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEmYil8KGFeYiksIGF8YikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhfChiLWEpLCBhfGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtYil8YiwgYXxiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLWIpfChhJmIpLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiLWEpfChhJmIpLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLWIpfChiLWEpLCBhXmIpCisKKyAgICBkZWYgdGVzdF9leGNsdXNpb24oc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBpbnZlcnNlIG9wZXJhdGlvbnMgZG8gbm90IG92ZXJsYXAKKyAgICAgICAgYSwgYiwgemVybyA9IHNlbGYuYSwgc2VsZi5iLCBTZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLWIpJmIsIHplcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGItYSkmYSwgemVybykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSZiKSYoYV5iKSwgemVybykKKworICAgIGRlZiB0ZXN0X2NhcmRpbmFsaXR5X3JlbGF0aW9ucyhzZWxmKToKKyAgICAgICAgYSwgYiA9IHNlbGYuYSwgc2VsZi5iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGEpLCBsZW4oYS1iKSArIGxlbihhJmIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgbGVuKGItYSkgKyBsZW4oYSZiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYV5iKSwgbGVuKGEtYikgKyBsZW4oYi1hKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXxiKSwgbGVuKGEtYikgKyBsZW4oYSZiKSArIGxlbihiLWEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhXmIpICsgbGVuKGEmYiksIGxlbihhfGIpKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2xpYnJlZnRlc3QgPSAiIiIKK0V4YW1wbGUgZnJvbSB0aGUgTGlicmFyeSBSZWZlcmVuY2U6ICBEb2MvbGliL2xpYnNldHMudGV4CisKKz4+PiBmcm9tIHNldHMgaW1wb3J0IFNldCBhcyBCYXNlICAjIG92ZXJyaWRlIF9yZXByIHRvIGdldCBzb3J0ZWQgb3V0cHV0Cis+Pj4gY2xhc3MgU2V0KEJhc2UpOgorLi4uICAgICBkZWYgX3JlcHIoc2VsZik6CisuLi4gICAgICAgICByZXR1cm4gQmFzZS5fcmVwcihzZWxmLCBzb3J0ZWQ9VHJ1ZSkKKz4+PiBlbmdpbmVlcnMgPSBTZXQoWydKb2huJywgJ0phbmUnLCAnSmFjaycsICdKYW5pY2UnXSkKKz4+PiBwcm9ncmFtbWVycyA9IFNldChbJ0phY2snLCAnU2FtJywgJ1N1c2FuJywgJ0phbmljZSddKQorPj4+IG1hbmFnZXJzID0gU2V0KFsnSmFuZScsICdKYWNrJywgJ1N1c2FuJywgJ1phY2snXSkKKz4+PiBlbXBsb3llZXMgPSBlbmdpbmVlcnMgfCBwcm9ncmFtbWVycyB8IG1hbmFnZXJzICAgICAgICAgICAjIHVuaW9uCis+Pj4gZW5naW5lZXJpbmdfbWFuYWdlbWVudCA9IGVuZ2luZWVycyAmIG1hbmFnZXJzICAgICAgICAgICAgIyBpbnRlcnNlY3Rpb24KKz4+PiBmdWxsdGltZV9tYW5hZ2VtZW50ID0gbWFuYWdlcnMgLSBlbmdpbmVlcnMgLSBwcm9ncmFtbWVycyAjIGRpZmZlcmVuY2UKKz4+PiBlbmdpbmVlcnMuYWRkKCdNYXJ2aW4nKQorPj4+IHByaW50IGVuZ2luZWVycworU2V0KFsnSmFjaycsICdKYW5lJywgJ0phbmljZScsICdKb2huJywgJ01hcnZpbiddKQorPj4+IGVtcGxveWVlcy5pc3N1cGVyc2V0KGVuZ2luZWVycykgICAgICAgICAgICMgc3VwZXJzZXQgdGVzdAorRmFsc2UKKz4+PiBlbXBsb3llZXMudW5pb25fdXBkYXRlKGVuZ2luZWVycykgICAgICAgICAjIHVwZGF0ZSBmcm9tIGFub3RoZXIgc2V0Cis+Pj4gZW1wbG95ZWVzLmlzc3VwZXJzZXQoZW5naW5lZXJzKQorVHJ1ZQorPj4+IGZvciBncm91cCBpbiBbZW5naW5lZXJzLCBwcm9ncmFtbWVycywgbWFuYWdlcnMsIGVtcGxveWVlc106CisuLi4gICAgIGdyb3VwLmRpc2NhcmQoJ1N1c2FuJykgICAgICAgICAgICAgICAgIyB1bmNvbmRpdGlvbmFsbHkgcmVtb3ZlIGVsZW1lbnQKKy4uLiAgICAgcHJpbnQgZ3JvdXAKKy4uLgorU2V0KFsnSmFjaycsICdKYW5lJywgJ0phbmljZScsICdKb2huJywgJ01hcnZpbiddKQorU2V0KFsnSmFjaycsICdKYW5pY2UnLCAnU2FtJ10pCitTZXQoWydKYWNrJywgJ0phbmUnLCAnWmFjayddKQorU2V0KFsnSmFjaycsICdKYW5lJywgJ0phbmljZScsICdKb2huJywgJ01hcnZpbicsICdTYW0nLCAnWmFjayddKQorIiIiCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworX190ZXN0X18gPSB7J2xpYnJlZnRlc3QnIDogbGlicmVmdGVzdH0KKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGltcG9ydCBkb2N0ZXN0CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3NldHMKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0U2V0T2ZTZXRzLAorICAgICAgICBUZXN0RXhjZXB0aW9uUHJvcGFnYXRpb24sCisgICAgICAgIFRlc3RCYXNpY09wc0VtcHR5LAorICAgICAgICBUZXN0QmFzaWNPcHNTaW5nbGV0b24sCisgICAgICAgIFRlc3RCYXNpY09wc1R1cGxlLAorICAgICAgICBUZXN0QmFzaWNPcHNUcmlwbGUsCisgICAgICAgIFRlc3RCaW5hcnlPcHMsCisgICAgICAgIFRlc3RVcGRhdGVPcHMsCisgICAgICAgIFRlc3RNdXRhdGUsCisgICAgICAgIFRlc3RTdWJzZXRFcXVhbEVtcHR5LAorICAgICAgICBUZXN0U3Vic2V0RXF1YWxOb25FbXB0eSwKKyAgICAgICAgVGVzdFN1YnNldEVtcHR5Tm9uRW1wdHksCisgICAgICAgIFRlc3RTdWJzZXRQYXJ0aWFsLAorICAgICAgICBUZXN0U3Vic2V0Tm9uT3ZlcmxhcCwKKyAgICAgICAgVGVzdE9ubHlTZXRzTnVtZXJpYywKKyAgICAgICAgVGVzdE9ubHlTZXRzRGljdCwKKyAgICAgICAgVGVzdE9ubHlTZXRzT3BlcmF0b3IsCisgICAgICAgIFRlc3RPbmx5U2V0c1R1cGxlLAorICAgICAgICBUZXN0T25seVNldHNTdHJpbmcsCisgICAgICAgIFRlc3RPbmx5U2V0c0dlbmVyYXRvciwKKyAgICAgICAgVGVzdE9ubHlTZXRzb2ZTZXRzLAorICAgICAgICBUZXN0Q29weWluZ0VtcHR5LAorICAgICAgICBUZXN0Q29weWluZ1NpbmdsZXRvbiwKKyAgICAgICAgVGVzdENvcHlpbmdUcmlwbGUsCisgICAgICAgIFRlc3RDb3B5aW5nVHVwbGUsCisgICAgICAgIFRlc3RDb3B5aW5nTmVzdGVkLAorICAgICAgICBUZXN0SWRlbnRpdGllcywKKyAgICAgICAgZG9jdGVzdC5Eb2NUZXN0U3VpdGUodGVzdF9zZXRzKSwKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NnbWxsaWIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zZ21sbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOGJjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zZ21sbGliLnB5CkBAIC0wLDAgKzEsNDM5IEBACitpbXBvcnQgcHByaW50CitpbXBvcnQgcmUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3NnbWxsaWIgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnc2dtbGxpYicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworCitjbGFzcyBFdmVudENvbGxlY3RvcihzZ21sbGliLlNHTUxQYXJzZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmV2ZW50cyA9IFtdCisgICAgICAgIHNlbGYuYXBwZW5kID0gc2VsZi5ldmVudHMuYXBwZW5kCisgICAgICAgIHNnbWxsaWIuU0dNTFBhcnNlci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIGdldF9ldmVudHMoc2VsZik6CisgICAgICAgICMgTm9ybWFsaXplIHRoZSBsaXN0IG9mIGV2ZW50cyBzbyB0aGF0IGJ1ZmZlciBhcnRlZmFjdHMgZG9uJ3QKKyAgICAgICAgIyBzZXBhcmF0ZSBydW5zIG9mIGNvbnRpZ3VvdXMgY2hhcmFjdGVycy4KKyAgICAgICAgTCA9IFtdCisgICAgICAgIHByZXZ0eXBlID0gTm9uZQorICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHM6CisgICAgICAgICAgICB0eXBlID0gZXZlbnRbMF0KKyAgICAgICAgICAgIGlmIHR5cGUgPT0gcHJldnR5cGUgPT0gImRhdGEiOgorICAgICAgICAgICAgICAgIExbLTFdID0gKCJkYXRhIiwgTFstMV1bMV0gKyBldmVudFsxXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgTC5hcHBlbmQoZXZlbnQpCisgICAgICAgICAgICBwcmV2dHlwZSA9IHR5cGUKKyAgICAgICAgc2VsZi5ldmVudHMgPSBMCisgICAgICAgIHJldHVybiBMCisKKyAgICAjIHN0cnVjdHVyZSBtYXJrdXAKKworICAgIGRlZiB1bmtub3duX3N0YXJ0dGFnKHNlbGYsIHRhZywgYXR0cnMpOgorICAgICAgICBzZWxmLmFwcGVuZCgoInN0YXJ0dGFnIiwgdGFnLCBhdHRycykpCisKKyAgICBkZWYgdW5rbm93bl9lbmR0YWcoc2VsZiwgdGFnKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJlbmR0YWciLCB0YWcpKQorCisgICAgIyBhbGwgb3RoZXIgbWFya3VwCisKKyAgICBkZWYgaGFuZGxlX2NvbW1lbnQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiY29tbWVudCIsIGRhdGEpKQorCisgICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImNoYXJyZWYiLCBkYXRhKSkKKworICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJkYXRhIiwgZGF0YSkpCisKKyAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGVjbCk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiZGVjbCIsIGRlY2wpKQorCisgICAgZGVmIGhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiZW50aXR5cmVmIiwgZGF0YSkpCisKKyAgICBkZWYgaGFuZGxlX3BpKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoInBpIiwgZGF0YSkpCisKKyAgICBkZWYgdW5rbm93bl9kZWNsKHNlbGYsIGRlY2wpOgorICAgICAgICBzZWxmLmFwcGVuZCgoInVua25vd24gZGVjbCIsIGRlY2wpKQorCisKK2NsYXNzIENEQVRBRXZlbnRDb2xsZWN0b3IoRXZlbnRDb2xsZWN0b3IpOgorICAgIGRlZiBzdGFydF9jZGF0YShzZWxmLCBhdHRycyk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgic3RhcnR0YWciLCAiY2RhdGEiLCBhdHRycykpCisgICAgICAgIHNlbGYuc2V0bGl0ZXJhbCgpCisKKworY2xhc3MgSFRNTEVudGl0eUNvbGxlY3RvcihFdmVudENvbGxlY3Rvcik6CisKKyAgICBlbnRpdHlfb3JfY2hhcnJlZiA9IHJlLmNvbXBpbGUoJyg/OiYoW2EtekEtWl1bLS5hLXpBLVowLTldKiknCisgICAgICAgICd8JiMoeFswLTlhLXpBLVpdK3xbMC05XSspKSg7PyknKQorCisgICAgZGVmIGNvbnZlcnRfY2hhcnJlZihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJjaGFycmVmIiwgImNvbnZlcnQiLCBuYW1lKSkKKyAgICAgICAgaWYgbmFtZVswXSAhPSAieCI6CisgICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3IuY29udmVydF9jaGFycmVmKHNlbGYsIG5hbWUpCisKKyAgICBkZWYgY29udmVydF9jb2RlcG9pbnQoc2VsZiwgY29kZXBvaW50KToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJjb2RlcG9pbnQiLCAiY29udmVydCIsIGNvZGVwb2ludCkpCisgICAgICAgIEV2ZW50Q29sbGVjdG9yLmNvbnZlcnRfY29kZXBvaW50KHNlbGYsIGNvZGVwb2ludCkKKworICAgIGRlZiBjb252ZXJ0X2VudGl0eXJlZihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJlbnRpdHlyZWYiLCAiY29udmVydCIsIG5hbWUpKQorICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3IuY29udmVydF9lbnRpdHlyZWYoc2VsZiwgbmFtZSkKKworICAgICMgVGhlc2UgdG8gcmVjb3JkIHRoYXQgdGhleSB3ZXJlIGNhbGxlZCwgdGhlbiBwYXNzIHRoZSBjYWxsIGFsb25nCisgICAgIyB0byB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzbyB0aGF0IGl0J3MgYWN0aW9ucyBjYW4gYmUKKyAgICAjIHJlY29yZGVkLgorCisgICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImNoYXJyZWYiLCBkYXRhKSkKKyAgICAgICAgc2dtbGxpYi5TR01MUGFyc2VyLmhhbmRsZV9jaGFycmVmKHNlbGYsIGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJlbnRpdHlyZWYiLCBkYXRhKSkKKyAgICAgICAgc2dtbGxpYi5TR01MUGFyc2VyLmhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgZGF0YSkKKworCitjbGFzcyBTR01MUGFyc2VyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY29sbGVjdG9yID0gRXZlbnRDb2xsZWN0b3IKKworICAgIGRlZiBnZXRfZXZlbnRzKHNlbGYsIHNvdXJjZSk6CisgICAgICAgIHBhcnNlciA9IHNlbGYuY29sbGVjdG9yKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHMgaW4gc291cmNlOgorICAgICAgICAgICAgICAgIHBhcnNlci5mZWVkKHMpCisgICAgICAgICAgICBwYXJzZXIuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjc2VsZi5ldmVudHMgPSBwYXJzZXIuZXZlbnRzCisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gcGFyc2VyLmdldF9ldmVudHMoKQorCisgICAgZGVmIGNoZWNrX2V2ZW50cyhzZWxmLCBzb3VyY2UsIGV4cGVjdGVkX2V2ZW50cyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cyA9IHNlbGYuZ2V0X2V2ZW50cyhzb3VyY2UpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICNpbXBvcnQgc3lzCisgICAgICAgICAgICAjcHJpbnQgPj5zeXMuc3RkZXJyLCBwcHJpbnQucGZvcm1hdChzZWxmLmV2ZW50cykKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIGV2ZW50cyAhPSBleHBlY3RlZF9ldmVudHM6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlY2VpdmVkIGV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGV2ZW50c1xuIgorICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZDpcbiIgKyBwcHJpbnQucGZvcm1hdChleHBlY3RlZF9ldmVudHMpICsKKyAgICAgICAgICAgICAgICAgICAgICAiXG5SZWNlaXZlZDpcbiIgKyBwcHJpbnQucGZvcm1hdChldmVudHMpKQorCisgICAgZGVmIGNoZWNrX3BhcnNlX2Vycm9yKHNlbGYsIHNvdXJjZSk6CisgICAgICAgIHBhcnNlciA9IEV2ZW50Q29sbGVjdG9yKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLmZlZWQoc291cmNlKQorICAgICAgICAgICAgcGFyc2VyLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHNnbWxsaWIuU0dNTFBhcnNlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIFNHTUxQYXJzZUVycm9yIGZvciAlclxuUmVjZWl2ZWQ6XG4lcyIKKyAgICAgICAgICAgICAgICAgICAgICAlIChzb3VyY2UsIHBwcmludC5wZm9ybWF0KHBhcnNlci5nZXRfZXZlbnRzKCkpKSkKKworICAgIGRlZiB0ZXN0X2RvY3R5cGVfZGVjbF9pbnRlcm5hbChzZWxmKToKKyAgICAgICAgaW5zaWRlID0gIiIiXAorRE9DVFlQRSBodG1sIFBVQkxJQyAnLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTicKKyAgICAgICAgICAgICBTWVNURU0gJ2h0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvc3RyaWN0LmR0ZCcgWworICA8IUVMRU1FTlQgaHRtbCAtIE8gRU1QVFk+CisgIDwhQVRUTElTVCBodG1sCisgICAgICB2ZXJzaW9uIENEQVRBICNJTVBMSUVECisgICAgICBwcm9maWxlIENEQVRBICdEdWJsaW5Db3JlJz4KKyAgPCFOT1RBVElPTiBkYXRhdHlwZSBTWVNURU0gJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9ub3RhdGlvbnMvcHl0aG9uLW1vZHVsZSc+CisgIDwhRU5USVRZIG15RW50aXR5ICdpbnRlcm5hbCBwYXJzZWQgZW50aXR5Jz4KKyAgPCFFTlRJVFkgYW5FbnRpdHkgU1lTVEVNICdodHRwOi8veG1sLnB5dGhvbi5vcmcvZW50aXRpZXMvc29tZXRoaW5nLnhtbCc+CisgIDwhRU5USVRZICUgcGFyYW1FbnRpdHkgJ25hbWV8bmFtZXxuYW1lJz4KKyAgJXBhcmFtRW50aXR5OworICA8IS0tIGNvbW1lbnQgLS0+CitdIiIiCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPCElcz4iICUgaW5zaWRlXSwgWworICAgICAgICAgICAgKCJkZWNsIiwgaW5zaWRlKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9kb2N0eXBlX2RlY2xfZXh0ZXJuYWwoc2VsZik6CisgICAgICAgIGluc2lkZSA9ICJET0NUWVBFIGh0bWwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOJyIKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIjwhJXM+IiAlIGluc2lkZSwgWworICAgICAgICAgICAgKCJkZWNsIiwgaW5zaWRlKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF91bmRlcnNjb3JlX2luX2F0dHJuYW1lKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAjNDM2NjIxCisgICAgICAgICIiIk1ha2Ugc3VyZSBhdHRyaWJ1dGUgbmFtZXMgd2l0aCB1bmRlcnNjb3JlcyBhcmUgYWNjZXB0ZWQiIiIKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIjxhIGhhc191bmRlciBfdW5kZXI+IiwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJhIiwgWygiaGFzX3VuZGVyIiwgImhhc191bmRlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiX3VuZGVyIiwgIl91bmRlciIpXSksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfdW5kZXJzY29yZV9pbl90YWduYW1lKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAjNDM2NjIxCisgICAgICAgICIiIk1ha2Ugc3VyZSB0YWcgbmFtZXMgd2l0aCB1bmRlcnNjb3JlcyBhcmUgYWNjZXB0ZWQiIiIKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIjxoYXNfdW5kZXI+PC9oYXNfdW5kZXI+IiwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJoYXNfdW5kZXIiLCBbXSksCisgICAgICAgICAgICAoImVuZHRhZyIsICJoYXNfdW5kZXIiKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9xdW90ZXNfaW5fdW5xdW90ZWRfYXR0cnMoc2VsZik6CisgICAgICAgICMgU0YgYnVnICM0MzY2MjEKKyAgICAgICAgIiIiQmUgc3VyZSBxdW90ZXMgaW4gdW5xdW90ZWQgYXR0cmlidXRlcyBhcmUgbWFkZSBwYXJ0IG9mIHRoZSB2YWx1ZSIiIgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPGEgaHJlZj1mb28nYmFyXCJiYXo+IiwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJhIiwgWygiaHJlZiIsICJmb28nYmFyXCJiYXoiKV0pLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3hodG1sX2VtcHR5X3RhZyhzZWxmKToKKyAgICAgICAgIiIiSGFuZGxpbmcgb2YgWEhUTUwtc3R5bGUgZW1wdHkgc3RhcnQgdGFncyIiIgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPGJyIC8+dGV4dDxpPjwvaT4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImJyIiwgW10pLAorICAgICAgICAgICAgKCJkYXRhIiwgInRleHQiKSwKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiaSIsIFtdKSwKKyAgICAgICAgICAgICgiZW5kdGFnIiwgImkiKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX29ubHkoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCI8P3Byb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24+IiwgWworICAgICAgICAgICAgKCJwaSIsICJwcm9jZXNzaW5nIGluc3RydWN0aW9uIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfYmFkX25lc3Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCI8YT48Yj48L2E+PC9iPiIsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFtdKSwKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYiIsIFtdKSwKKyAgICAgICAgICAgICgiZW5kdGFnIiwgImEiKSwKKyAgICAgICAgICAgICgiZW5kdGFnIiwgImIiKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9iYXJlX2FtcGVyc2FuZHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCJ0aGlzIHRleHQgJiBjb250YWlucyAmIGFtcGVyc2FuZHMgJiIsIFsKKyAgICAgICAgICAgICgiZGF0YSIsICJ0aGlzIHRleHQgJiBjb250YWlucyAmIGFtcGVyc2FuZHMgJiIpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2JhcmVfcG9pbnR5X2JyYWNrZXRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygidGhpcyA8IHRleHQgPiBjb250YWlucyA8IGJhcmU+cG9pbnR5PCBicmFja2V0cyIsIFsKKyAgICAgICAgICAgICgiZGF0YSIsICJ0aGlzIDwgdGV4dCA+IGNvbnRhaW5zIDwgYmFyZT5wb2ludHk8IGJyYWNrZXRzIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfYXR0cl9zeW50YXgoc2VsZik6CisgICAgICAgIG91dHB1dCA9IFsKKyAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgInYiKSwgKCJjIiwgInYiKSwgKCJkIiwgInYiKSwgKCJlIiwgImUiKV0pCisgICAgICAgICAgXQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8YSBiPSd2JyBjPSJ2IiBkPXYgZT4iIiIsIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIiIiPGEgIGIgPSAndicgYyA9ICJ2IiBkID0gdiBlPiIiIiwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8YVxuYlxuPVxuJ3YnXG5jXG49XG4idiJcbmRcbj1cbnZcbmU+IiIiLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhXHRiXHQ9XHQndidcdGNcdD1cdCJ2Ilx0ZFx0PVx0dlx0ZT4iIiIsIG91dHB1dCkKKworICAgIGRlZiB0ZXN0X2F0dHJfdmFsdWVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8YSBiPSd4eHhcblx0eHh4JyBjPSJ5eXlcdFxueXl5IiBkPSdcdHh5elxuJz4iIiIsCisgICAgICAgICAgICAgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICJ4eHhcblx0eHh4IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsICJ5eXlcdFxueXl5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZCIsICJcdHh5elxuIildKQorICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhIGI9JycgYz0iIj4iIiIsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFsoImIiLCAiIiksICgiYyIsICIiKV0pLAorICAgICAgICAgICAgXSkKKyAgICAgICAgIyBVUkwgY29uc3RydWN0aW9uIHN0dWZmIGZyb20gUkZDIDE4MDg6CisgICAgICAgIHNhZmUgPSAiJC1fLisiCisgICAgICAgIGV4dHJhID0gIiEqJygpLCIKKyAgICAgICAgcmVzZXJ2ZWQgPSAiOy8/OkAmPSIKKyAgICAgICAgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbTo4MDgwL3BhdGgvdG8vZmlsZT8lcyVzJXMiICUgKAorICAgICAgICAgICAgc2FmZSwgZXh0cmEsIHJlc2VydmVkKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8ZSBhPSVzPiIiIiAlIHVybCwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJlIiwgWygiYSIsIHVybCldKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBTRiBwYXRjaCAjNjY5NjgzLgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPGUgYT1yZ2IoMSwyLDMpPiIsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiZSIsIFsoImEiLCAicmdiKDEsMiwzKSIpXSksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfYXR0cl92YWx1ZXNfZW50aXRpZXMoc2VsZik6CisgICAgICAgICIiIlN1YnN0aXR1dGlvbiBvZiBlbnRpdGllcyBhbmQgY2hhcnJlZnMgaW4gYXR0cmlidXRlIHZhbHVlcyIiIgorICAgICAgICAjIFNGIGJ1ZyAjMTQ1MjI0NgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8YSBiPSZsdDsgYz0mbHQ7Jmd0OyBkPSZsdC0mZ3Q7IGU9JyZsdDsgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmPSImeHh4OyIgZz0nJiMzMjsmIzMzOycgaD0nJiM1MDA7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpPSd4P2E9YiZjPWQ7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqPScmYW1wOyM0MjsnIGs9JyYjMzg7IzQyOyc+IiIiLAorICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsIFsoImIiLCAiPCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCAiPD4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkIiwgIiZsdC0+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZSIsICI8ICIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImYiLCAiJnh4eDsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJnIiwgIiAhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaCIsICImIzUwMDsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJpIiwgIng/YT1iJmM9ZDsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJqIiwgIiYjNDI7IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiayIsICImIzQyOyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKV0pCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0X292ZXJyaWRlcyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGNoZWNrcyB0aGF0IHRoZSBjaGFyYWN0ZXIgYW5kIGVudGl0eSByZWZlcmVuY2UKKyAgICAgICAgIyBjb252ZXJzaW9uIGhlbHBlcnMgYXJlIGNhbGxlZCBhdCB0aGUgZG9jdW1lbnRlZCB0aW1lcy4gIE5vCisgICAgICAgICMgYXR0ZW1wdCBpcyBtYWRlIHRvIHJlYWxseSBjaGFuZ2Ugd2hhdCB0aGUgcGFyc2VyIGFjY2VwdHMuCisgICAgICAgICMKKyAgICAgICAgc2VsZi5jb2xsZWN0b3IgPSBIVE1MRW50aXR5Q29sbGVjdG9yCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCgnPGEgdGl0bGU9IiZsZHF1bzt0ZXN0JiN4MjAxZDsiPmZvbzwvYT4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnJmZvb2JhcjsmIzQyOycpLCBbCisgICAgICAgICAgICAoJ2VudGl0eXJlZicsICdjb252ZXJ0JywgJ2xkcXVvJyksCisgICAgICAgICAgICAoJ2NoYXJyZWYnLCAnY29udmVydCcsICd4MjAxZCcpLAorICAgICAgICAgICAgKCdzdGFydHRhZycsICdhJywgWygndGl0bGUnLCAnJmxkcXVvO3Rlc3QmI3gyMDFkOycpXSksCisgICAgICAgICAgICAoJ2RhdGEnLCAnZm9vJyksCisgICAgICAgICAgICAoJ2VuZHRhZycsICdhJyksCisgICAgICAgICAgICAoJ2VudGl0eXJlZicsICdmb29iYXInKSwKKyAgICAgICAgICAgICgnZW50aXR5cmVmJywgJ2NvbnZlcnQnLCAnZm9vYmFyJyksCisgICAgICAgICAgICAoJ2NoYXJyZWYnLCAnNDInKSwKKyAgICAgICAgICAgICgnY2hhcnJlZicsICdjb252ZXJ0JywgJzQyJyksCisgICAgICAgICAgICAoJ2NvZGVwb2ludCcsICdjb252ZXJ0JywgNDIpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2F0dHJfZnVua3lfbmFtZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhIGEuYj0ndicgYzpkPXYgZS1mPXY+IiIiLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbKCJhLmIiLCAidiIpLCAoImM6ZCIsICJ2IiksICgiZS1mIiwgInYiKV0pLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2F0dHJfdmFsdWVfaXA2X3VybChzZWxmKToKKyAgICAgICAgIyBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvODUzNTA2CisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCgiPGEgaHJlZj0naHR0cDovL1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdLyc+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxhIGhyZWY9aHR0cDovL1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdLz4iKSwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJhIiwgWygiaHJlZiIsICJodHRwOi8vWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0vIildKSwKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFsoImhyZWYiLCAiaHR0cDovL1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdLyIpXSksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3Rfd2VpcmRfc3RhcnR0YWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPGE8YT4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbXSksCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbXSksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPC9hPGE+IiwgWworICAgICAgICAgICAgKCJlbmR0YWciLCAiYSIpLAorICAgICAgICAgICAgKCJzdGFydHRhZyIsICJhIiwgW10pLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2RlY2xhcmF0aW9uX2p1bmtfY2hhcnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjwhRE9DVFlQRSBmb28gJCA+IikKKworICAgIGRlZiB0ZXN0X2dldF9zdGFydHRhZ190ZXh0KHNlbGYpOgorICAgICAgICBzID0gIiIiPGZvb2JhciAgIFxuICAgb25lPSIxIlx0dHdvPTIgICA+IiIiCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKHMsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiZm9vYmFyIiwgWygib25lIiwgIjEiKSwgKCJ0d28iLCAiMiIpXSksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfY2RhdGFfY29udGVudChzZWxmKToKKyAgICAgICAgcyA9ICgiPGNkYXRhPiA8IS0tIG5vdCBhIGNvbW1lbnQgLS0+ICZub3QtYW4tZW50aXR5LXJlZjsgPC9jZGF0YT4iCisgICAgICAgICAgICAgIjxub3RjZGF0YT4gPCEtLSBjb21tZW50IC0tPiA8L25vdGNkYXRhPiIpCisgICAgICAgIHNlbGYuY29sbGVjdG9yID0gQ0RBVEFFdmVudENvbGxlY3RvcgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhzLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImNkYXRhIiwgW10pLAorICAgICAgICAgICAgKCJkYXRhIiwgIiA8IS0tIG5vdCBhIGNvbW1lbnQgLS0+ICZub3QtYW4tZW50aXR5LXJlZjsgIiksCisgICAgICAgICAgICAoImVuZHRhZyIsICJjZGF0YSIpLAorICAgICAgICAgICAgKCJzdGFydHRhZyIsICJub3RjZGF0YSIsIFtdKSwKKyAgICAgICAgICAgICgiZGF0YSIsICIgIiksCisgICAgICAgICAgICAoImNvbW1lbnQiLCAiIGNvbW1lbnQgIiksCisgICAgICAgICAgICAoImRhdGEiLCAiICIpLAorICAgICAgICAgICAgKCJlbmR0YWciLCAibm90Y2RhdGEiKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIHMgPSAiIiI8Y2RhdGE+IDxub3QgYT0nc3RhcnQgdGFnJz4gPC9jZGF0YT4iIiIKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMocywgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJjZGF0YSIsIFtdKSwKKyAgICAgICAgICAgICgiZGF0YSIsICIgPG5vdCBhPSdzdGFydCB0YWcnPiAiKSwKKyAgICAgICAgICAgICgiZW5kdGFnIiwgImNkYXRhIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9kZWNsYXJhdGlvbnMoc2VsZik6CisgICAgICAgIHMgPSAnYWJjPCFzcGFjZXIgdHlwZT0iYmxvY2siIGhlaWdodD0iMjUiPmRlZicKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMocywgWworICAgICAgICAgICAgKCJkYXRhIiwgImFiYyIpLAorICAgICAgICAgICAgKCJ1bmtub3duIGRlY2wiLCAnc3BhY2VyIHR5cGU9ImJsb2NrIiBoZWlnaHQ9IjI1IicpLAorICAgICAgICAgICAgKCJkYXRhIiwgImRlZiIpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2VudW1lcmF0ZWRfYXR0cl90eXBlKHNlbGYpOgorICAgICAgICBzID0gIjwhRE9DVFlQRSBkb2MgWzwhQVRUTElTVCBkb2MgYXR0ciAoYSB8IGIpID5dPiIKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMocywgWworICAgICAgICAgICAgKCdkZWNsJywgJ0RPQ1RZUEUgZG9jIFs8IUFUVExJU1QgZG9jIGF0dHIgKGEgfCBiKSA+XScpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3JlYWRfY2h1bmtzKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAjMTU0MTY5NywgdGhpcyBjYXVzZWQgc2dtbCBwYXJzZXIgdG8gaGFuZworICAgICAgICAjIEp1c3QgdmVyaWZ5IHRoaXMgY29kZSBkb2Vzbid0IGNhdXNlIGEgaGFuZy4KKyAgICAgICAgQ0hVTksgPSAxMDI0ICAjIGluY3JlYXNpbmcgdGhpcyB0byA4MjEyIG1ha2VzIHRoZSBwcm9ibGVtIGdvIGF3YXkKKworICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuZmluZGZpbGUoJ3NnbWxfaW5wdXQuaHRtbCcpKQorICAgICAgICBmcCA9IHNnbWxsaWIuU0dNTFBhcnNlcigpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKENIVU5LKQorICAgICAgICAgICAgZnAuZmVlZChkYXRhKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IENIVU5LOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgdGVzdF9vbmx5X2RlY29kZV9hc2NpaShzZWxmKToKKyAgICAgICAgIyBTRiBidWcgIzE2NTE5OTUsIG1ha2Ugc3VyZSBub24tYXNjaWkgY2hhcmFjdGVyIHJlZmVyZW5jZXMgYXJlIG5vdCBkZWNvZGVkCisgICAgICAgIHMgPSAnPHNpZ25zIGV4Y2xhbWF0aW9uPSImIzMzIiBjb3B5cmlnaHQ9IiYjMTY5IiBxdW90ZWxlZnQ9IiYjODIxNjsiPicKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMocywgWworICAgICAgICAgICAgKCdzdGFydHRhZycsICdzaWducycsCisgICAgICAgICAgICAgWygnZXhjbGFtYXRpb24nLCAnIScpLCAoJ2NvcHlyaWdodCcsICcmIzE2OScpLAorICAgICAgICAgICAgICAoJ3F1b3RlbGVmdCcsICcmIzgyMTY7JyldKSwKKyAgICAgICAgICAgIF0pCisKKyAgICAjIFhYWCBUaGVzZSB0ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQgYnkgcHJlZml4aW5nIHRoZWlyIG5hbWVzIHdpdGgKKyAgICAjIGFuIHVuZGVyc2NvcmUuICBUaGUgZmlyc3QgdHdvIGV4ZXJjaXNlIG91dHN0YW5kaW5nIGJ1Z3MgaW4gdGhlCisgICAgIyBzZ21sbGliIG1vZHVsZSwgYW5kIHRoZSB0aGlyZCBleGhpYml0cyBxdWVzdGlvbmFibGUgYmVoYXZpb3IKKyAgICAjIHRoYXQgbmVlZHMgdG8gYmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgYmVmb3JlIGNoYW5naW5nIGl0LgorCisgICAgZGVmIF90ZXN0X3N0YXJ0dGFnX2VuZF9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIjxhIGI9JzwnPiIsIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgIjwiKV0pXSkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIjxhIGI9Jz4nPiIsIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgIj4iKV0pXSkKKworICAgIGRlZiBfdGVzdF9idWZmZXJfYXJ0ZWZhY3RzKHNlbGYpOgorICAgICAgICBvdXRwdXQgPSBbKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICI8IildKV0KKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8YSBiPSc8Jz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjxhICIsICJiPSc8Jz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjxhIGIiLCAiPSc8Jz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjxhIGI9IiwgIic8Jz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjxhIGI9JzwiLCAiJz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjxhIGI9JzwnIiwgIj4iXSwgb3V0cHV0KQorCisgICAgICAgIG91dHB1dCA9IFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgIj4iKV0pXQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjxhIGI9Jz4nPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgIiwgImI9Jz4nPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgYiIsICI9Jz4nPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgYj0iLCAiJz4nPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgYj0nPiIsICInPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgYj0nPiciLCAiPiJdLCBvdXRwdXQpCisKKyAgICAgICAgb3V0cHV0ID0gWygiY29tbWVudCIsICJhYmMiKV0KKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyIiLCAiPCEtLWFiYy0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPCIsICIhLS1hYmMtLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjwhIiwgIi0tYWJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8IS0iLCAiLWFiYy0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPCEtLSIsICJhYmMtLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjwhLS1hIiwgImJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8IS0tYWIiLCAiYy0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPCEtLWFiYyIsICItLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjwhLS1hYmMtIiwgIi0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8IS0tYWJjLS0iLCAiPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPCEtLWFiYy0tPiIsICIiXSwgb3V0cHV0KQorCisgICAgZGVmIF90ZXN0X3N0YXJ0dGFnX2p1bmtfY2hhcnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjwiKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8PiIpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjwvJD4iKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8LyIpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjwvYSIpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjwkIikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPCQ+IikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPCEiKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8YSAkPiIpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjxhIikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPGEgZm9vPSdiYXInIikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPGEgZm9vPSdiYXIiKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8YSBmb289Jz4nIikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPGEgZm9vPSc+IikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPGEgZm9vPT4iKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFNHTUxQYXJzZXJUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zaGEucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zaGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzODQzNQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NoYS5weQpAQCAtMCwwICsxLDU2IEBACisjIFRlc3Rpbmcgc2hhIG1vZHVsZSAoTklTVCdzIFNlY3VyZSBIYXNoIEFsZ29yaXRobSkKKworIyB1c2UgdGhlIHRocmVlIGV4YW1wbGVzIGZyb20gRmVkZXJhbCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIFN0YW5kYXJkcworIyBQdWJsaWNhdGlvbiAxODAtMSwgU2VjdXJlIEhhc2ggU3RhbmRhcmQsICAxOTk1IEFwcmlsIDE3CisjIGh0dHA6Ly93d3cuaXRsLm5pc3QuZ292L2Rpdjg5Ny9wdWJzL2ZpcDE4MC0xLmh0bQorCitpbXBvcnQgd2FybmluZ3MKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidGhlIHNoYSBtb2R1bGUgaXMgZGVwcmVjYXRlZC4qIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKworaW1wb3J0IHNoYQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIFNIQVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY2hlY2soc2VsZiwgZGF0YSwgZGlnZXN0KToKKyAgICAgICAgIyBDaGVjayBkaWdlc3QgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmFsdWUKKyAgICAgICAgb2JqID0gc2hhLm5ldyhkYXRhKQorICAgICAgICBjb21wdXRlZCA9IG9iai5oZXhkaWdlc3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcHV0ZWQgPT0gZGlnZXN0KQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIHZhbHVlIGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlCisgICAgICAgICMgZGlnZXN0IG9wZXJhdGlvbnMuCisgICAgICAgIGNvbXB1dGVkX2FnYWluID0gb2JqLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21wdXRlZCA9PSBjb21wdXRlZF9hZ2FpbikKKworICAgICAgICAjIENoZWNrIGhleGRpZ2VzdCgpIG91dHB1dCBtYXRjaGVzIGRpZ2VzdCgpJ3Mgb3V0cHV0CisgICAgICAgIGRpZ2VzdCA9IG9iai5kaWdlc3QoKQorICAgICAgICBoZXhkID0gIiIKKyAgICAgICAgZm9yIGMgaW4gZGlnZXN0OgorICAgICAgICAgICAgaGV4ZCArPSAnJTAyeCcgJSBvcmQoYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXB1dGVkID09IGhleGQpCisKKyAgICBkZWYgdGVzdF9jYXNlXzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soImFiYyIsCisgICAgICAgICAgICAgICAgICAgImE5OTkzZTM2NDcwNjgxNmFiYTNlMjU3MTc4NTBjMjZjOWNkMGQ4OWQiKQorCisgICAgZGVmIHRlc3RfY2FzZV8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisgICAgICAgICAgICAgICAgICAgIjg0OTgzZTQ0MWMzYmQyNmViYWFlNGFhMWY5NTEyOWU1ZTU0NjcwZjEiKQorCisgICAgZGVmIHRlc3RfY2FzZV8zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCJhIiAqIDEwMDAwMDAsCisgICAgICAgICAgICAgICAgICAgIjM0YWE5NzNjZDRjNGRhYTRmNjFlZWIyYmRiYWQyNzMxNjUzNDAxNmYiKQorCisgICAgZGVmIHRlc3RfY2FzZV80KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKGNocigweEFBKSAqIDgwLAorICAgICAgICAgICAgICAgICAgICc0Y2EwZWYzOGYxNzk0YjI4YThmOGVlMTEwZWU3OWQ0OGNlMTNiZTI1JykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU0hBVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNTY2MjUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKQEAgLTAsMCArMSwxNjMgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc2hlbHZlCitpbXBvcnQgZ2xvYgorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKwordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2FueWRibScsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZm4gPSAic2hlbGZ0ZW1wIiArIG9zLmV4dHNlcCArICJkYiIKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBkMSA9IHt9CisgICAgICAgIHMgPSBzaGVsdmUuU2hlbGYoZDEsIHByb3RvY29sPTIsIHdyaXRlYmFjaz1GYWxzZSkKKyAgICAgICAgc1sna2V5MSddID0gWzEsMiwzLDRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCBbMSwyLDMsNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCAxKQorICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGVuLCBzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzWydrZXkxJ10KKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0Nsb3NlZCBzaGVsZiBzaG91bGQgbm90IGZpbmQgYSBrZXknKQorCisgICAgZGVmIHRlc3RfYXNjaWlfZmlsZV9zaGVsZihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHNoZWx2ZS5vcGVuKHNlbGYuZm4sIHByb3RvY29sPTApCisgICAgICAgICAgICBzWydrZXkxJ10gPSAoMSwyLDMsNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCAoMSwyLDMsNCkpCisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihzZWxmLmZuKyIqIik6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGYpCisKKyAgICBkZWYgdGVzdF9iaW5hcnlfZmlsZV9zaGVsZihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHNoZWx2ZS5vcGVuKHNlbGYuZm4sIHByb3RvY29sPTEpCisgICAgICAgICAgICBzWydrZXkxJ10gPSAoMSwyLDMsNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCAoMSwyLDMsNCkpCisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihzZWxmLmZuKyIqIik6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGYpCisKKyAgICBkZWYgdGVzdF9wcm90bzJfZmlsZV9zaGVsZihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHNoZWx2ZS5vcGVuKHNlbGYuZm4sIHByb3RvY29sPTIpCisgICAgICAgICAgICBzWydrZXkxJ10gPSAoMSwyLDMsNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCAoMSwyLDMsNCkpCisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihzZWxmLmZuKyIqIik6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGYpCisKKyAgICBkZWYgdGVzdF9pbl9tZW1vcnlfc2hlbGYoc2VsZik6CisgICAgICAgIGQxID0ge30KKyAgICAgICAgcyA9IHNoZWx2ZS5TaGVsZihkMSwgcHJvdG9jb2w9MCkKKyAgICAgICAgc1sna2V5MSddID0gKDEsMiwzLDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCAoMSwyLDMsNCkpCisgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBkMiA9IHt9CisgICAgICAgIHMgPSBzaGVsdmUuU2hlbGYoZDIsIHByb3RvY29sPTEpCisgICAgICAgIHNbJ2tleTEnXSA9ICgxLDIsMyw0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2tleTEnXSwgKDEsMiwzLDQpKQorICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZDEsIGQyKQorCisgICAgZGVmIHRlc3RfbXV0YWJsZV9lbnRyeShzZWxmKToKKyAgICAgICAgZDEgPSB7fQorICAgICAgICBzID0gc2hlbHZlLlNoZWxmKGQxLCBwcm90b2NvbD0yLCB3cml0ZWJhY2s9RmFsc2UpCisgICAgICAgIHNbJ2tleTEnXSA9IFsxLDIsMyw0XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2tleTEnXSwgWzEsMiwzLDRdKQorICAgICAgICBzWydrZXkxJ10uYXBwZW5kKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCBbMSwyLDMsNF0pCisgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgIGQyID0ge30KKyAgICAgICAgcyA9IHNoZWx2ZS5TaGVsZihkMiwgcHJvdG9jb2w9Miwgd3JpdGViYWNrPVRydWUpCisgICAgICAgIHNbJ2tleTEnXSA9IFsxLDIsMyw0XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2tleTEnXSwgWzEsMiwzLDRdKQorICAgICAgICBzWydrZXkxJ10uYXBwZW5kKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCBbMSwyLDMsNCw1XSkKKyAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkMiksIDEpCisKKyAgICBkZWYgdGVzdF93cml0ZWJhY2tfYWxzb193cml0ZXNfaW1tZWRpYXRlbHkoc2VsZik6CisgICAgICAgICMgSXNzdWUgNTc1NAorICAgICAgICBkID0ge30KKyAgICAgICAgcyA9IHNoZWx2ZS5TaGVsZihkLCB3cml0ZWJhY2s9VHJ1ZSkKKyAgICAgICAgc1sna2V5J10gPSBbMV0KKyAgICAgICAgcDEgPSBkWydrZXknXSAgIyBXaWxsIGdpdmUgYSBLZXlFcnJvciBpZiBiYWNraW5nIHN0b3JlIG5vdCB1cGRhdGVkCisgICAgICAgIHNbJ2tleSddLmFwcGVuZCgyKQorICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgcDIgPSBkWydrZXknXQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAxLCBwMikgICMgV3JpdGUgY3JlYXRlcyBuZXcgb2JqZWN0IGluIHN0b3JlCisKKworZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCisKK2NsYXNzIFRlc3RTaGVsdmVCYXNlKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKyAgICBmbiA9ICJzaGVsZnRlbXAuZGIiCisgICAgY291bnRlciA9IDAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9kYiA9IFtdCisgICAgICAgIG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQorICAgIHR5cGUydGVzdCA9IHNoZWx2ZS5TaGVsZgorICAgIGRlZiBfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICByZXR1cm4geyJrZXkxIjoidmFsdWUxIiwgImtleTIiOjIsICJrZXkzIjooMSwyLDMpfQorICAgIGRlZiBfZW1wdHlfbWFwcGluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faW5fbWVtOgorICAgICAgICAgICAgeD0gc2hlbHZlLlNoZWxmKHt9LCAqKnNlbGYuX2FyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvdW50ZXIrPTEKKyAgICAgICAgICAgIHg9IHNoZWx2ZS5vcGVuKHNlbGYuZm4rc3RyKHNlbGYuY291bnRlciksICoqc2VsZi5fYXJncykKKyAgICAgICAgc2VsZi5fZGIuYXBwZW5kKHgpCisgICAgICAgIHJldHVybiB4CisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3IgZGIgaW4gc2VsZi5fZGI6CisgICAgICAgICAgICBkYi5jbG9zZSgpCisgICAgICAgIHNlbGYuX2RiID0gW10KKyAgICAgICAgaWYgbm90IHNlbGYuX2luX21lbToKKyAgICAgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihzZWxmLmZuKyIqIik6CisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhmKQorCitjbGFzcyBUZXN0QXNjaWlGaWxlU2hlbHZlKFRlc3RTaGVsdmVCYXNlKToKKyAgICBfYXJncz17J3Byb3RvY29sJzowfQorICAgIF9pbl9tZW0gPSBGYWxzZQorY2xhc3MgVGVzdEJpbmFyeUZpbGVTaGVsdmUoVGVzdFNoZWx2ZUJhc2UpOgorICAgIF9hcmdzPXsncHJvdG9jb2wnOjF9CisgICAgX2luX21lbSA9IEZhbHNlCitjbGFzcyBUZXN0UHJvdG8yRmlsZVNoZWx2ZShUZXN0U2hlbHZlQmFzZSk6CisgICAgX2FyZ3M9eydwcm90b2NvbCc6Mn0KKyAgICBfaW5fbWVtID0gRmFsc2UKK2NsYXNzIFRlc3RBc2NpaU1lbVNoZWx2ZShUZXN0U2hlbHZlQmFzZSk6CisgICAgX2FyZ3M9eydwcm90b2NvbCc6MH0KKyAgICBfaW5fbWVtID0gVHJ1ZQorY2xhc3MgVGVzdEJpbmFyeU1lbVNoZWx2ZShUZXN0U2hlbHZlQmFzZSk6CisgICAgX2FyZ3M9eydwcm90b2NvbCc6MX0KKyAgICBfaW5fbWVtID0gVHJ1ZQorY2xhc3MgVGVzdFByb3RvMk1lbVNoZWx2ZShUZXN0U2hlbHZlQmFzZSk6CisgICAgX2FyZ3M9eydwcm90b2NvbCc6Mn0KKyAgICBfaW5fbWVtID0gVHJ1ZQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdEFzY2lpRmlsZVNoZWx2ZSwKKyAgICAgICAgVGVzdEJpbmFyeUZpbGVTaGVsdmUsCisgICAgICAgIFRlc3RQcm90bzJGaWxlU2hlbHZlLAorICAgICAgICBUZXN0QXNjaWlNZW1TaGVsdmUsCisgICAgICAgIFRlc3RCaW5hcnlNZW1TaGVsdmUsCisgICAgICAgIFRlc3RQcm90bzJNZW1TaGVsdmUsCisgICAgICAgIFRlc3RDYXNlCisgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zaGxleC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NobGV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzVmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zaGxleC5weQpAQCAtMCwwICsxLDE5MSBAQAorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc2hsZXgKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKwordHJ5OgorICAgIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKKworIyBUaGUgb3JpZ2luYWwgdGVzdCBkYXRhIHNldCB3YXMgZnJvbSBzaGVsbHdvcmRzLCBieSBIYXJ0bXV0IEdvZWJlbC4KKworZGF0YSA9IHIiIiJ4fHh8Citmb28gYmFyfGZvb3xiYXJ8CisgZm9vIGJhcnxmb298YmFyfAorIGZvbyBiYXIgfGZvb3xiYXJ8Citmb28gICBiYXIgICAgYmxhICAgICBmYXNlbHxmb298YmFyfGJsYXxmYXNlbHwKK3ggeSAgeiAgICAgICAgICAgICAgeHh4eHx4fHl8enx4eHh4fAorXHggYmFyfFx8eHxiYXJ8CitcIHggYmFyfFx8eHxiYXJ8CitcIGJhcnxcfGJhcnwKK2ZvbyBceCBiYXJ8Zm9vfFx8eHxiYXJ8Citmb28gXCB4IGJhcnxmb298XHx4fGJhcnwKK2ZvbyBcIGJhcnxmb298XHxiYXJ8Citmb28gImJhciIgYmxhfGZvb3wiYmFyInxibGF8CisiZm9vIiAiYmFyIiAiYmxhInwiZm9vInwiYmFyInwiYmxhInwKKyJmb28iIGJhciAiYmxhInwiZm9vInxiYXJ8ImJsYSJ8CisiZm9vIiBiYXIgYmxhfCJmb28ifGJhcnxibGF8Citmb28gJ2JhcicgYmxhfGZvb3wnYmFyJ3xibGF8CisnZm9vJyAnYmFyJyAnYmxhJ3wnZm9vJ3wnYmFyJ3wnYmxhJ3wKKydmb28nIGJhciAnYmxhJ3wnZm9vJ3xiYXJ8J2JsYSd8CisnZm9vJyBiYXIgYmxhfCdmb28nfGJhcnxibGF8CitibHVyYiBmb28iYmFyImJhciJmYXNlbCIgYmF6fGJsdXJifGZvbyJiYXIiYmFyImZhc2VsInxiYXp8CitibHVyYiBmb28nYmFyJ2JhcidmYXNlbCcgYmF6fGJsdXJifGZvbydiYXInYmFyJ2Zhc2VsJ3xiYXp8CisiInwiInwKKycnfCcnfAorZm9vICIiIGJhcnxmb298IiJ8YmFyfAorZm9vICcnIGJhcnxmb298Jyd8YmFyfAorZm9vICIiICIiICIiIGJhcnxmb298IiJ8IiJ8IiJ8YmFyfAorZm9vICcnICcnICcnIGJhcnxmb298Jyd8Jyd8Jyd8YmFyfAorXCIifFx8IiJ8CisiXCJ8IlwifAorImZvb1wgYmFyInwiZm9vXCBiYXIifAorImZvb1xcIGJhciJ8ImZvb1xcIGJhciJ8CisiZm9vXFwgYmFyXCJ8ImZvb1xcIGJhclwifAorImZvb1xcIiBiYXJcIiJ8ImZvb1xcInxiYXJ8XHwiInwKKyJmb29cXCBiYXJcIiBkZmFkZiJ8ImZvb1xcIGJhclwifGRmYWRmInwKKyJmb29cXFwgYmFyXCIgZGZhZGYifCJmb29cXFwgYmFyXCJ8ZGZhZGYifAorImZvb1xcXHggYmFyXCIgZGZhZGYifCJmb29cXFx4IGJhclwifGRmYWRmInwKKyJmb29ceCBiYXJcIiBkZmFkZiJ8ImZvb1x4IGJhclwifGRmYWRmInwKK1wnJ3xcfCcnfAorJ2Zvb1wgYmFyJ3wnZm9vXCBiYXInfAorJ2Zvb1xcIGJhcid8J2Zvb1xcIGJhcid8CisiZm9vXFxceCBiYXJcIiBkZidhXCAnZGYnfCJmb29cXFx4IGJhclwifGRmJ2F8XHwnZGYnfAorXCJmb28ifFx8ImZvbyJ8CitcImZvbyJceHxcfCJmb28ifFx8eHwKKyJmb29ceCJ8ImZvb1x4InwKKyJmb29cICJ8ImZvb1wgInwKK2Zvb1wgeHh8Zm9vfFx8eHh8Citmb29cIHhceHxmb298XHx4fFx8eHwKK2Zvb1wgeFx4XCIifGZvb3xcfHh8XHx4fFx8IiJ8CisiZm9vXCB4XHgifCJmb29cIHhceCJ8CisiZm9vXCB4XHhcXCJ8ImZvb1wgeFx4XFwifAorImZvb1wgeFx4XFwiImZvb2JhciJ8ImZvb1wgeFx4XFwifCJmb29iYXIifAorImZvb1wgeFx4XFwiXCcnImZvb2JhciJ8ImZvb1wgeFx4XFwifFx8Jyd8ImZvb2JhciJ8CisiZm9vXCB4XHhcXCJcJyJmbydvYmFyInwiZm9vXCB4XHhcXCJ8XHwnImZvJ3xvYmFyInwKKyJmb29cIHhceFxcIlwnImZvJ29iYXIiICdkb24nXCcndCd8ImZvb1wgeFx4XFwifFx8JyJmbyd8b2JhciJ8J2Rvbid8XHwnJ3x0J3wKKydmb29cIGJhcid8J2Zvb1wgYmFyJ3wKKydmb29cXCBiYXInfCdmb29cXCBiYXInfAorZm9vXCBiYXJ8Zm9vfFx8YmFyfAorZm9vI2JhclxuYmF6fGZvb2JhenwKKzotKSA7LSl8OnwtfCl8O3wtfCl8Civh6e3z+nzhfOl87XzzfPp8CisiIiIKKworcG9zaXhfZGF0YSA9IHIiIiJ4fHh8Citmb28gYmFyfGZvb3xiYXJ8CisgZm9vIGJhcnxmb298YmFyfAorIGZvbyBiYXIgfGZvb3xiYXJ8Citmb28gICBiYXIgICAgYmxhICAgICBmYXNlbHxmb298YmFyfGJsYXxmYXNlbHwKK3ggeSAgeiAgICAgICAgICAgICAgeHh4eHx4fHl8enx4eHh4fAorXHggYmFyfHh8YmFyfAorXCB4IGJhcnwgeHxiYXJ8CitcIGJhcnwgYmFyfAorZm9vIFx4IGJhcnxmb298eHxiYXJ8Citmb28gXCB4IGJhcnxmb298IHh8YmFyfAorZm9vIFwgYmFyfGZvb3wgYmFyfAorZm9vICJiYXIiIGJsYXxmb298YmFyfGJsYXwKKyJmb28iICJiYXIiICJibGEifGZvb3xiYXJ8YmxhfAorImZvbyIgYmFyICJibGEifGZvb3xiYXJ8YmxhfAorImZvbyIgYmFyIGJsYXxmb298YmFyfGJsYXwKK2ZvbyAnYmFyJyBibGF8Zm9vfGJhcnxibGF8CisnZm9vJyAnYmFyJyAnYmxhJ3xmb298YmFyfGJsYXwKKydmb28nIGJhciAnYmxhJ3xmb298YmFyfGJsYXwKKydmb28nIGJhciBibGF8Zm9vfGJhcnxibGF8CitibHVyYiBmb28iYmFyImJhciJmYXNlbCIgYmF6fGJsdXJifGZvb2JhcmJhcmZhc2VsfGJhenwKK2JsdXJiIGZvbydiYXInYmFyJ2Zhc2VsJyBiYXp8Ymx1cmJ8Zm9vYmFyYmFyZmFzZWx8YmF6fAorIiJ8fAorJyd8fAorZm9vICIiIGJhcnxmb298fGJhcnwKK2ZvbyAnJyBiYXJ8Zm9vfHxiYXJ8Citmb28gIiIgIiIgIiIgYmFyfGZvb3x8fHxiYXJ8Citmb28gJycgJycgJycgYmFyfGZvb3x8fHxiYXJ8CitcInwifAorIlwiInwifAorImZvb1wgYmFyInxmb29cIGJhcnwKKyJmb29cXCBiYXIifGZvb1wgYmFyfAorImZvb1xcIGJhclwiInxmb29cIGJhciJ8CisiZm9vXFwiIGJhclwifGZvb1x8YmFyInwKKyJmb29cXCBiYXJcIiBkZmFkZiJ8Zm9vXCBiYXIiIGRmYWRmfAorImZvb1xcXCBiYXJcIiBkZmFkZiJ8Zm9vXFwgYmFyIiBkZmFkZnwKKyJmb29cXFx4IGJhclwiIGRmYWRmInxmb29cXHggYmFyIiBkZmFkZnwKKyJmb29ceCBiYXJcIiBkZmFkZiJ8Zm9vXHggYmFyIiBkZmFkZnwKK1wnfCd8CisnZm9vXCBiYXInfGZvb1wgYmFyfAorJ2Zvb1xcIGJhcid8Zm9vXFwgYmFyfAorImZvb1xcXHggYmFyXCIgZGYnYVwgJ2RmInxmb29cXHggYmFyIiBkZidhXCAnZGZ8CitcImZvb3wiZm9vfAorXCJmb29ceHwiZm9veHwKKyJmb29ceCJ8Zm9vXHh8CisiZm9vXCAifGZvb1wgfAorZm9vXCB4eHxmb28geHh8Citmb29cIHhceHxmb28geHh8Citmb29cIHhceFwifGZvbyB4eCJ8CisiZm9vXCB4XHgifGZvb1wgeFx4fAorImZvb1wgeFx4XFwifGZvb1wgeFx4XHwKKyJmb29cIHhceFxcIiJmb29iYXIifGZvb1wgeFx4XGZvb2JhcnwKKyJmb29cIHhceFxcIlwnImZvb2JhciJ8Zm9vXCB4XHhcJ2Zvb2JhcnwKKyJmb29cIHhceFxcIlwnImZvJ29iYXIifGZvb1wgeFx4XCdmbydvYmFyfAorImZvb1wgeFx4XFwiXCciZm8nb2JhciIgJ2RvbidcJyd0J3xmb29cIHhceFwnZm8nb2Jhcnxkb24ndHwKKyJmb29cIHhceFxcIlwnImZvJ29iYXIiICdkb24nXCcndCcgXFx8Zm9vXCB4XHhcJ2ZvJ29iYXJ8ZG9uJ3R8XHwKKydmb29cIGJhcid8Zm9vXCBiYXJ8CisnZm9vXFwgYmFyJ3xmb29cXCBiYXJ8Citmb29cIGJhcnxmb28gYmFyfAorZm9vI2JhclxuYmF6fGZvb3xiYXp8Cis6LSkgOy0pfDotKXw7LSl8Civh6e3z+nzh6e3z+nwKKyIiIgorCitjbGFzcyBTaGxleFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhID0gW3guc3BsaXQoInwiKVs6LTFdCisgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiBkYXRhLnNwbGl0bGluZXMoKV0KKyAgICAgICAgc2VsZi5wb3NpeF9kYXRhID0gW3guc3BsaXQoInwiKVs6LTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiBwb3NpeF9kYXRhLnNwbGl0bGluZXMoKV0KKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5kYXRhOgorICAgICAgICAgICAgaXRlbVswXSA9IGl0ZW1bMF0ucmVwbGFjZShyIlxuIiwgIlxuIikKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5wb3NpeF9kYXRhOgorICAgICAgICAgICAgaXRlbVswXSA9IGl0ZW1bMF0ucmVwbGFjZShyIlxuIiwgIlxuIikKKworICAgIGRlZiBzcGxpdFRlc3Qoc2VsZiwgZGF0YSwgY29tbWVudHMpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpOgorICAgICAgICAgICAgbCA9IHNobGV4LnNwbGl0KGRhdGFbaV1bMF0sIGNvbW1lbnRzPWNvbW1lbnRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBkYXRhW2ldWzE6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YVtpXVswXSwgbCwgZGF0YVtpXVsxOl0pKQorCisgICAgZGVmIG9sZFNwbGl0KHNlbGYsIHMpOgorICAgICAgICByZXQgPSBbXQorICAgICAgICBsZXggPSBzaGxleC5zaGxleChTdHJpbmdJTyhzKSkKKyAgICAgICAgdG9rID0gbGV4LmdldF90b2tlbigpCisgICAgICAgIHdoaWxlIHRvazoKKyAgICAgICAgICAgIHJldC5hcHBlbmQodG9rKQorICAgICAgICAgICAgdG9rID0gbGV4LmdldF90b2tlbigpCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiB0ZXN0U3BsaXRQb3NpeChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBkYXRhIHNwbGl0dGluZyB3aXRoIHBvc2l4IHBhcnNlciIiIgorICAgICAgICBzZWxmLnNwbGl0VGVzdChzZWxmLnBvc2l4X2RhdGEsIGNvbW1lbnRzPVRydWUpCisKKyAgICBkZWYgdGVzdENvbXBhdChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb21wYXRpYmlsaXR5IGludGVyZmFjZSIiIgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5kYXRhKSk6CisgICAgICAgICAgICBsID0gc2VsZi5vbGRTcGxpdChzZWxmLmRhdGFbaV1bMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIHNlbGYuZGF0YVtpXVsxOl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZGF0YVtpXVswXSwgbCwgc2VsZi5kYXRhW2ldWzE6XSkpCisKKyMgQWxsb3cgdGhpcyB0ZXN0IHRvIGJlIHVzZWQgd2l0aCBvbGQgc2hsZXgucHkKK2lmIG5vdCBnZXRhdHRyKHNobGV4LCAic3BsaXQiLCBOb25lKToKKyAgICBmb3IgbWV0aG5hbWUgaW4gZGlyKFNobGV4VGVzdCk6CisgICAgICAgIGlmIG1ldGhuYW1lLnN0YXJ0c3dpdGgoInRlc3QiKSBhbmQgbWV0aG5hbWUgIT0gInRlc3RDb21wYXQiOgorICAgICAgICAgICAgZGVsYXR0cihTaGxleFRlc3QsIG1ldGhuYW1lKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTaGxleFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NodXRpbC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmRiNzI0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CkBAIC0wLDAgKzEsODY1IEBACisjIENvcHlyaWdodCAoQykgMjAwMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN5cworaW1wb3J0IHN0YXQKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBlcnJubworZnJvbSBvcy5wYXRoIGltcG9ydCBzcGxpdGRyaXZlCitmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlLCBzcGF3bgorZnJvbSBzaHV0aWwgaW1wb3J0IChfbWFrZV90YXJiYWxsLCBfbWFrZV96aXBmaWxlLCBtYWtlX2FyY2hpdmUsCisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0LCB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBnZXRfYXJjaGl2ZV9mb3JtYXRzKQoraW1wb3J0IHRhcmZpbGUKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBjaGVja193YXJuaW5ncywgY2FwdHVyZWRfc3Rkb3V0CisKK1RFU1RGTjIgPSBURVNURk4gKyAiMiIKKwordHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCisKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKK3RyeToKKyAgICBpbXBvcnQgemlwZmlsZQorICAgIFpJUF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFpJUF9TVVBQT1JUID0gZmluZF9leGVjdXRhYmxlKCd6aXAnKQorCitjbGFzcyBUZXN0U2h1dGlsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFNodXRpbCwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnRlbXBkaXJzID0gW10KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFNodXRpbCwgc2VsZikudGVhckRvd24oKQorICAgICAgICB3aGlsZSBzZWxmLnRlbXBkaXJzOgorICAgICAgICAgICAgZCA9IHNlbGYudGVtcGRpcnMucG9wKCkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCwgb3MubmFtZSBpbiAoJ250JywgJ2N5Z3dpbicpKQorCisgICAgZGVmIHdyaXRlX2ZpbGUoc2VsZiwgcGF0aCwgY29udGVudD0neHh4Jyk6CisgICAgICAgICIiIldyaXRlcyBhIGZpbGUgaW4gdGhlIGdpdmVuIHBhdGguCisKKworICAgICAgICBwYXRoIGNhbiBiZSBhIHN0cmluZyBvciBhIHNlcXVlbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oKnBhdGgpCisgICAgICAgIGYgPSBvcGVuKHBhdGgsICd3JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZShjb250ZW50KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgbWtkdGVtcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgY2xlYW5lZCB1cC4KKworICAgICAgICBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICIiIgorICAgICAgICBkID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYudGVtcGRpcnMuYXBwZW5kKGQpCisgICAgICAgIHJldHVybiBkCisgICAgZGVmIHRlc3Rfcm10cmVlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBmaWxlbmFtZSBpcyBndWFyYW50ZWVkIG5vdCB0byBleGlzdAorICAgICAgICBmaWxlbmFtZSA9IHRlbXBmaWxlLm1rdGVtcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNodXRpbC5ybXRyZWUsIGZpbGVuYW1lKQorCisgICAgIyBTZWUgYnVnICMxMDcxNTEzIGZvciB3aHkgd2UgZG9uJ3QgcnVuIHRoaXMgb24gY3lnd2luCisgICAgIyBhbmQgYnVnICMxMDc2NDY3IGZvciB3aHkgd2UgZG9uJ3QgcnVuIHRoaXMgYXMgcm9vdC4KKyAgICBpZiAoaGFzYXR0cihvcywgJ2NobW9kJykgYW5kIHN5cy5wbGF0Zm9ybVs6Nl0gIT0gJ2N5Z3dpbicKKyAgICAgICAgYW5kIG5vdCAoaGFzYXR0cihvcywgJ2dldGV1aWQnKSBhbmQgb3MuZ2V0ZXVpZCgpID09IDApKToKKyAgICAgICAgZGVmIHRlc3Rfb25fZXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmVycm9yU3RhdGUgPSAwCisgICAgICAgICAgICBvcy5ta2RpcihURVNURk4pCisgICAgICAgICAgICBzZWxmLmNoaWxkcGF0aCA9IG9zLnBhdGguam9pbihURVNURk4sICdhJykKKyAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuY2hpbGRwYXRoLCAndycpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9sZF9kaXJfbW9kZSA9IG9zLnN0YXQoVEVTVEZOKS5zdF9tb2RlCisgICAgICAgICAgICBvbGRfY2hpbGRfbW9kZSA9IG9zLnN0YXQoc2VsZi5jaGlsZHBhdGgpLnN0X21vZGUKKyAgICAgICAgICAgICMgTWFrZSB1bndyaXRhYmxlLgorICAgICAgICAgICAgb3MuY2htb2Qoc2VsZi5jaGlsZHBhdGgsIHN0YXQuU19JUkVBRCkKKyAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgc3RhdC5TX0lSRUFEKQorCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgb25lcnJvcj1zZWxmLmNoZWNrX2FyZ3NfdG9fb25lcnJvcikKKyAgICAgICAgICAgICMgVGVzdCB3aGV0aGVyIG9uZXJyb3IgaGFzIGFjdHVhbGx5IGJlZW4gY2FsbGVkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVycm9yU3RhdGUsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBjYWxsIHRvIG9uZXJyb3IgZnVuY3Rpb24gZGlkIG5vdCBoYXBwZW4uIikKKworICAgICAgICAgICAgIyBNYWtlIHdyaXRhYmxlIGFnYWluLgorICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCBvbGRfZGlyX21vZGUpCisgICAgICAgICAgICBvcy5jaG1vZChzZWxmLmNoaWxkcGF0aCwgb2xkX2NoaWxkX21vZGUpCisKKyAgICAgICAgICAgICMgQ2xlYW4gdXAuCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTikKKworICAgIGRlZiBjaGVja19hcmdzX3RvX29uZXJyb3Ioc2VsZiwgZnVuYywgYXJnLCBleGMpOgorICAgICAgICAjIHRlc3Rfcm10cmVlX2Vycm9ycyBkZWxpYmVyYXRlbHkgcnVucyBybXRyZWUKKyAgICAgICAgIyBvbiBhIGRpcmVjdG9yeSB0aGF0IGlzIGNobW9kIDQwMCwgd2hpY2ggd2lsbCBmYWlsLgorICAgICAgICAjIFRoaXMgZnVuY3Rpb24gaXMgcnVuIHdoZW4gc2h1dGlsLnJtdHJlZSBmYWlscy4KKyAgICAgICAgIyA5OS45JSBvZiB0aGUgdGltZSBpdCBpbml0aWFsbHkgZmFpbHMgdG8gcmVtb3ZlCisgICAgICAgICMgYSBmaWxlIGluIHRoZSBkaXJlY3RvcnksIHNvIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gKKyAgICAgICAgIyBmdW5jIGlzIG9zLnJlbW92ZS4KKyAgICAgICAgIyBIb3dldmVyLCBzb21lIExpbnV4IG1hY2hpbmVzIHJ1bm5pbmcgWkZTIG9uCisgICAgICAgICMgRlVTRSBleHBlcmllbmNlZCBhIGZhaWx1cmUgZWFybGllciBpbiB0aGUgcHJvY2VzcworICAgICAgICAjIGF0IG9zLmxpc3RkaXIuICBUaGUgZmlyc3QgZmFpbHVyZSBtYXkgbGVnYWxseQorICAgICAgICAjIGJlIGVpdGhlci4KKyAgICAgICAgaWYgc2VsZi5lcnJvclN0YXRlID09IDA6CisgICAgICAgICAgICBpZiBmdW5jIGlzIG9zLnJlbW92ZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZywgc2VsZi5jaGlsZHBhdGgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnVuYywgb3MubGlzdGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jIG11c3QgYmUgZWl0aGVyIG9zLnJlbW92ZSBvciBvcy5saXN0ZGlyIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZywgVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXhjWzBdLCBPU0Vycm9yKSkKKyAgICAgICAgICAgIHNlbGYuZXJyb3JTdGF0ZSA9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYywgb3Mucm1kaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZywgVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXhjWzBdLCBPU0Vycm9yKSkKKyAgICAgICAgICAgIHNlbGYuZXJyb3JTdGF0ZSA9IDIKKworICAgIGRlZiB0ZXN0X3JtdHJlZV9kb250X2RlbGV0ZV9maWxlKHNlbGYpOgorICAgICAgICAjIFdoZW4gY2FsbGVkIG9uIGEgZmlsZSBpbnN0ZWFkIG9mIGEgZGlyZWN0b3J5LCBkb24ndCBkZWxldGUgaXQuCisgICAgICAgIGhhbmRsZSwgcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBvcy5mZG9wZW4oaGFuZGxlKS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNodXRpbC5ybXRyZWUsIHBhdGgpCisgICAgICAgIG9zLnJlbW92ZShwYXRoKQorCisgICAgZGVmIHRlc3RfY29weXRyZWVfc2ltcGxlKHNlbGYpOgorICAgICAgICBkZWYgd3JpdGVfZGF0YShwYXRoLCBkYXRhKToKKyAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICJ3IikKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGRlZiByZWFkX2RhdGEocGF0aCk6CisgICAgICAgICAgICBmID0gb3BlbihwYXRoKQorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisKKyAgICAgICAgc3JjX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBkc3RfZGlyID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLm1rZHRlbXAoKSwgJ2Rlc3RpbmF0aW9uJykKKworICAgICAgICB3cml0ZV9kYXRhKG9zLnBhdGguam9pbihzcmNfZGlyLCAndGVzdC50eHQnKSwgJzEyMycpCisKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNyY19kaXIsICd0ZXN0X2RpcicpKQorICAgICAgICB3cml0ZV9kYXRhKG9zLnBhdGguam9pbihzcmNfZGlyLCAndGVzdF9kaXInLCAndGVzdC50eHQnKSwgJzQ1NicpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIGRzdF9kaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGRzdF9kaXIsICd0ZXN0LnR4dCcpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihkc3RfZGlyLCAndGVzdF9kaXInKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGRzdF9kaXIsICd0ZXN0X2RpcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LnR4dCcpKSkKKyAgICAgICAgICAgIGFjdHVhbCA9IHJlYWRfZGF0YShvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Rlc3QudHh0JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgJzEyMycpCisgICAgICAgICAgICBhY3R1YWwgPSByZWFkX2RhdGEob3MucGF0aC5qb2luKGRzdF9kaXIsICd0ZXN0X2RpcicsICd0ZXN0LnR4dCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsICc0NTYnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIHBhdGggaW4gKAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Rlc3QudHh0JyksCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihkc3RfZGlyLCAndGVzdC50eHQnKSwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNyY19kaXIsICd0ZXN0X2RpcicsICd0ZXN0LnR4dCcpLAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Rlc3RfZGlyJywgJ3Rlc3QudHh0JyksCisgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgICAgICAgICBmb3IgcGF0aCBpbiAoc3JjX2RpciwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKGRzdF9kaXIpCisgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorCisgICAgZGVmIHRlc3RfY29weXRyZWVfd2l0aF9leGNsdWRlKHNlbGYpOgorCisgICAgICAgIGRlZiB3cml0ZV9kYXRhKHBhdGgsIGRhdGEpOgorICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgInciKQorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZGVmIHJlYWRfZGF0YShwYXRoKToKKyAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgpCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgICAgICAjIGNyZWF0aW5nIGRhdGEKKyAgICAgICAgam9pbiA9IG9zLnBhdGguam9pbgorICAgICAgICBleGlzdHMgPSBvcy5wYXRoLmV4aXN0cworICAgICAgICBzcmNfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRzdF9kaXIgPSBqb2luKHRlbXBmaWxlLm1rZHRlbXAoKSwgJ2Rlc3RpbmF0aW9uJykKKyAgICAgICAgICAgIHdyaXRlX2RhdGEoam9pbihzcmNfZGlyLCAndGVzdC50eHQnKSwgJzEyMycpCisgICAgICAgICAgICB3cml0ZV9kYXRhKGpvaW4oc3JjX2RpciwgJ3Rlc3QudG1wJyksICcxMjMnKQorICAgICAgICAgICAgb3MubWtkaXIoam9pbihzcmNfZGlyLCAndGVzdF9kaXInKSkKKyAgICAgICAgICAgIHdyaXRlX2RhdGEoam9pbihzcmNfZGlyLCAndGVzdF9kaXInLCAndGVzdC50eHQnKSwgJzQ1NicpCisgICAgICAgICAgICBvcy5ta2Rpcihqb2luKHNyY19kaXIsICd0ZXN0X2RpcjInKSkKKyAgICAgICAgICAgIHdyaXRlX2RhdGEoam9pbihzcmNfZGlyLCAndGVzdF9kaXIyJywgJ3Rlc3QudHh0JyksICc0NTYnKQorICAgICAgICAgICAgb3MubWtkaXIoam9pbihzcmNfZGlyLCAndGVzdF9kaXIyJywgJ3N1YmRpcicpKQorICAgICAgICAgICAgb3MubWtkaXIoam9pbihzcmNfZGlyLCAndGVzdF9kaXIyJywgJ3N1YmRpcjInKSkKKyAgICAgICAgICAgIHdyaXRlX2RhdGEoam9pbihzcmNfZGlyLCAndGVzdF9kaXIyJywgJ3N1YmRpcicsICd0ZXN0LnR4dCcpLCAnNDU2JykKKyAgICAgICAgICAgIHdyaXRlX2RhdGEoam9pbihzcmNfZGlyLCAndGVzdF9kaXIyJywgJ3N1YmRpcjInLCAndGVzdC5weScpLCAnNDU2JykKKworCisgICAgICAgICAgICAjIHRlc3RpbmcgZ2xvYi1saWtlIHBhdHRlcm5zCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGF0dGVybnMgPSBzaHV0aWwuaWdub3JlX3BhdHRlcm5zKCcqLnRtcCcsICd0ZXN0X2RpcjInKQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyLCBpZ25vcmU9cGF0dGVybnMpCisgICAgICAgICAgICAgICAgIyBjaGVja2luZyB0aGUgcmVzdWx0OiBzb21lIGVsZW1lbnRzIHNob3VsZCBub3QgYmUgY29waWVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4aXN0cyhqb2luKGRzdF9kaXIsICd0ZXN0LnR4dCcpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGV4aXN0cyhqb2luKGRzdF9kaXIsICd0ZXN0LnRtcCcpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGV4aXN0cyhqb2luKGRzdF9kaXIsICd0ZXN0X2RpcjInKSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdF9kaXIpOgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRzdF9kaXIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGF0dGVybnMgPSBzaHV0aWwuaWdub3JlX3BhdHRlcm5zKCcqLnRtcCcsICdzdWJkaXIqJykKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjX2RpciwgZHN0X2RpciwgaWdub3JlPXBhdHRlcm5zKQorICAgICAgICAgICAgICAgICMgY2hlY2tpbmcgdGhlIHJlc3VsdDogc29tZSBlbGVtZW50cyBzaG91bGQgbm90IGJlIGNvcGllZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXhpc3RzKGpvaW4oZHN0X2RpciwgJ3Rlc3QudG1wJykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXhpc3RzKGpvaW4oZHN0X2RpciwgJ3Rlc3RfZGlyMicsICdzdWJkaXIyJykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXhpc3RzKGpvaW4oZHN0X2RpciwgJ3Rlc3RfZGlyMicsICdzdWJkaXInKSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdF9kaXIpOgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRzdF9kaXIpCisKKyAgICAgICAgICAgICMgdGVzdGluZyBjYWxsYWJsZS1zdHlsZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlZiBfZmlsdGVyKHNyYywgbmFtZXMpOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3JjLCBuYW1lKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3MucGF0aC5pc2RpcihwYXRoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnNwbGl0KClbLTFdID09ICdzdWJkaXInKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguc3BsaXRleHQocGF0aClbLTFdIGluICgnLnB5Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjX2RpciwgZHN0X2RpciwgaWdub3JlPV9maWx0ZXIpCisKKyAgICAgICAgICAgICAgICAjIGNoZWNraW5nIHRoZSByZXN1bHQ6IHNvbWUgZWxlbWVudHMgc2hvdWxkIG5vdCBiZSBjb3BpZWQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGV4aXN0cyhqb2luKGRzdF9kaXIsICd0ZXN0X2RpcjInLCAnc3ViZGlyMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QucHknKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBleGlzdHMoam9pbihkc3RfZGlyLCAndGVzdF9kaXIyJywgJ3N1YmRpcicpKSkKKworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3RfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkc3RfZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNfZGlyKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmRpcm5hbWUoZHN0X2RpcikpCisKKyAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgorICAgICAgICBkZWYgdGVzdF9kb250X2NvcHlfZmlsZV9vbnRvX2xpbmtfdG9faXRzZWxmKHNlbGYpOgorICAgICAgICAgICAgIyBidWcgODUxMTIzLgorICAgICAgICAgICAgb3MubWtkaXIoVEVTVEZOKQorICAgICAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKFRFU1RGTiwgJ2NoZWVzZScpCisgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCAnc2hvcCcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oc3JjLCAndycpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnY2hlZGRhcicpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBvcy5saW5rKHNyYywgZHN0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQorCisgICAgICAgICAgICAgICAgIyBVc2luZyBgc3JjYCBoZXJlIHdvdWxkIG1lYW4gd2UgZW5kIHVwIHdpdGggYSBzeW1saW5rIHBvaW50aW5nCisgICAgICAgICAgICAgICAgIyB0byBURVNURk4vVEVTVEZOL2NoZWVzZSwgd2hpbGUgaXQgc2hvdWxkIHBvaW50IGF0CisgICAgICAgICAgICAgICAgIyBURVNURk4vY2hlZXNlLgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoJ2NoZWVzZScsIGRzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnY2hlZGRhcicpCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTikKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiB0ZXN0X3JtdHJlZV9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICAgICAgIyBidWcgMTY2OS4KKyAgICAgICAgICAgIG9zLm1rZGlyKFRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCAnY2hlZXNlJykKKyAgICAgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCAnc2hvcCcpCisgICAgICAgICAgICAgICAgb3MubWtkaXIoc3JjKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkc3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2h1dGlsLnJtdHJlZSwgZHN0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgaWYgaGFzYXR0cihvcywgIm1rZmlmbyIpOgorICAgICAgICAjIElzc3VlICMzMDAyOiBjb3B5ZmlsZSBhbmQgY29weXRyZWUgYmxvY2sgaW5kZWZpbml0ZWx5IG9uIG5hbWVkIHBpcGVzCisgICAgICAgIGRlZiB0ZXN0X2NvcHlmaWxlX25hbWVkX3BpcGUoc2VsZik6CisgICAgICAgICAgICBvcy5ta2ZpZm8oVEVTVEZOKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5TcGVjaWFsRmlsZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSwgVEVTVEZOLCBURVNURk4yKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5TcGVjaWFsRmlsZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSwgX19maWxlX18sIFRFU1RGTikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKworICAgICAgICBkZWYgdGVzdF9jb3B5dHJlZV9uYW1lZF9waXBlKHNlbGYpOgorICAgICAgICAgICAgb3MubWtkaXIoVEVTVEZOKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1YmRpciA9IG9zLnBhdGguam9pbihURVNURk4sICJzdWJkaXIiKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKHN1YmRpcikKKyAgICAgICAgICAgICAgICBwaXBlID0gb3MucGF0aC5qb2luKHN1YmRpciwgIm15cGlwZSIpCisgICAgICAgICAgICAgICAgb3MubWtmaWZvKHBpcGUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoVEVTVEZOLCBURVNURk4yKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzaHV0aWwuRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZS5hcmdzWzBdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVycm9ycyksIDEpCisgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBlcnJvcl9tc2cgPSBlcnJvcnNbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYCVzYCBpcyBhIG5hbWVkIHBpcGUiICUgcGlwZSwgZXJyb3JfbXNnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2h1dGlsLkVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdjaGZsYWdzJykgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihlcnJubywgJ0VPUE5PVFNVUFAnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKGVycm5vLCAnRU5PVFNVUCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyBvcy5jaGZsYWdzLCBFT1BOT1RTVVBQICYgRU5PVFNVUCIpCisgICAgZGVmIHRlc3RfY29weXN0YXRfaGFuZGxlc19oYXJtbGVzc19jaGZsYWdzX2Vycm9ycyhzZWxmKToKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgZmlsZTEgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZmlsZTEnKQorICAgICAgICBmaWxlMiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdmaWxlMicpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShmaWxlMSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShmaWxlMiwgJ3h4eCcpCisKKyAgICAgICAgZGVmIG1ha2VfY2hmbGFnc19yYWlzZXIoZXJyKToKKyAgICAgICAgICAgIGV4ID0gT1NFcnJvcigpCisKKyAgICAgICAgICAgIGRlZiBfY2hmbGFnc19yYWlzZXIocGF0aCwgZmxhZ3MpOgorICAgICAgICAgICAgICAgIGV4LmVycm5vID0gZXJyCisgICAgICAgICAgICAgICAgcmFpc2UgZXgKKyAgICAgICAgICAgIHJldHVybiBfY2hmbGFnc19yYWlzZXIKKyAgICAgICAgb2xkX2NoZmxhZ3MgPSBvcy5jaGZsYWdzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBlcnIgaW4gZXJybm8uRU9QTk9UU1VQUCwgZXJybm8uRU5PVFNVUDoKKyAgICAgICAgICAgICAgICBvcy5jaGZsYWdzID0gbWFrZV9jaGZsYWdzX3JhaXNlcihlcnIpCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlzdGF0KGZpbGUxLCBmaWxlMikKKyAgICAgICAgICAgICMgYXNzZXJ0IG90aGVycyBlcnJvcnMgYnJlYWsgaXQKKyAgICAgICAgICAgIG9zLmNoZmxhZ3MgPSBtYWtlX2NoZmxhZ3NfcmFpc2VyKGVycm5vLkVPUE5PVFNVUFAgKyBlcnJuby5FTk9UU1VQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2h1dGlsLmNvcHlzdGF0LCBmaWxlMSwgZmlsZTIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGZsYWdzID0gb2xkX2NoZmxhZ3MKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9tYWtlX3RhcmJhbGwoc2VsZik6CisgICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUxJ10sICd4eHgnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUyJ10sICd4eHgnKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4odG1wZGlyLCAnc3ViJykpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnc3ViJywgJ2ZpbGUzJ10sICd4eHgnKQorCisgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICAjIGZvcmNlIHNodXRpbCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeQorICAgICAgICBvcy5ybWRpcih0bXBkaXIyKQorICAgICAgICB1bml0dGVzdC5za2lwVW5sZXNzKHNwbGl0ZHJpdmUodG1wZGlyKVswXSA9PSBzcGxpdGRyaXZlKHRtcGRpcjIpWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCisKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKworICAgICAgICAjIHdvcmtpbmcgd2l0aCByZWxhdGl2ZSBwYXRocyB0byBhdm9pZCB0YXIgd2FybmluZ3MKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChzcGxpdGRyaXZlKGJhc2VfbmFtZSlbMV0sICcuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhci5neicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgICAgICMgdHJ5aW5nIGFuIHVuY29tcHJlc3NlZCBvbmUKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChzcGxpdGRyaXZlKGJhc2VfbmFtZSlbMV0sICcuJywgY29tcHJlc3M9Tm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgZGVmIF90YXJpbmZvKHNlbGYsIHBhdGgpOgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4ocGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZXMgPSB0YXIuZ2V0bmFtZXMoKQorICAgICAgICAgICAgbmFtZXMuc29ydCgpCisgICAgICAgICAgICByZXR1cm4gdHVwbGUobmFtZXMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIF9jcmVhdGVfZmlsZXMoc2VsZik6CisgICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBkaXN0ID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Rpc3QnKQorICAgICAgICBvcy5ta2RpcihkaXN0KQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW2Rpc3QsICdmaWxlMSddLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFtkaXN0LCAnZmlsZTInXSwgJ3h4eCcpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihkaXN0LCAnc3ViJykpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbZGlzdCwgJ3N1YicsICdmaWxlMyddLCAneHh4JykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRpc3QsICdzdWIyJykpCisgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICByZXR1cm4gdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmaW5kX2V4ZWN1dGFibGUoJ3RhcicpIGFuZCBmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnTmVlZCB0aGUgdGFyIGNvbW1hbmQgdG8gcnVuJykKKyAgICBkZWYgdGVzdF90YXJmaWxlX3ZzX3RhcihzZWxmKToKKyAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhci5neicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgICAgICMgbm93IGNyZWF0ZSBhbm90aGVyIHRhcmJhbGwgdXNpbmcgYHRhcmAKKyAgICAgICAgdGFyYmFsbDIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnYXJjaGl2ZTIudGFyLmd6JykKKyAgICAgICAgdGFyX2NtZCA9IFsndGFyJywgJy1jZicsICdhcmNoaXZlMi50YXInLCAnZGlzdCddCisgICAgICAgIGd6aXBfY21kID0gWydnemlwJywgJy1mOScsICdhcmNoaXZlMi50YXInXQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHM6CisgICAgICAgICAgICAgICAgc3Bhd24odGFyX2NtZCkKKyAgICAgICAgICAgICAgICBzcGF3bihnemlwX2NtZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwyKSkKKyAgICAgICAgIyBsZXQncyBjb21wYXJlIGJvdGggdGFyYmFsbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90YXJpbmZvKHRhcmJhbGwpLCBzZWxmLl90YXJpbmZvKHRhcmJhbGwyKSkKKworICAgICAgICAjIHRyeWluZyBhbiB1bmNvbXByZXNzZWQgb25lCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXInCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworICAgICAgICAjIG5vdyBmb3IgYSBkcnlfcnVuCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUsIGRyeV9ydW49VHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFpJUF9TVVBQT1JULCAnTmVlZCB6aXAgc3VwcG9ydCB0byBydW4nKQorICAgIGRlZiB0ZXN0X21ha2VfemlwZmlsZShzZWxmKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTEnXSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTInXSwgJ3h4eCcpCisKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgICMgZm9yY2Ugc2h1dGlsIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5CisgICAgICAgIG9zLnJtZGlyKHRtcGRpcjIpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIF9tYWtlX3ppcGZpbGUoYmFzZV9uYW1lLCB0bXBkaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnppcCcKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmUoc2VsZik6CisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdhcmNoaXZlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFrZV9hcmNoaXZlLCBiYXNlX25hbWUsICd4eHgnKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZV9vd25lcl9ncm91cChzZWxmKToKKyAgICAgICAgIyB0ZXN0aW5nIG1ha2VfYXJjaGl2ZSB3aXRoIG93bmVyIGFuZCBncm91cCwgd2l0aCB2YXJpb3VzIGNvbWJpbmF0aW9ucworICAgICAgICAjIHRoaXMgd29ya3MgZXZlbiBpZiB0aGVyZSdzIG5vdCBnaWQvdWlkIHN1cHBvcnQKKyAgICAgICAgaWYgVUlEX0dJRF9TVVBQT1JUOgorICAgICAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgICAgIG93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBncm91cCA9IG93bmVyID0gJ3Jvb3QnCisKKyAgICAgICAgYmFzZV9kaXIsIHJvb3RfZGlyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpICwgJ2FyY2hpdmUnKQorICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnemlwJywgcm9vdF9kaXIsIGJhc2VfZGlyLCBvd25lcj1vd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPWdyb3VwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnemlwJywgcm9vdF9kaXIsIGJhc2VfZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9J2tqaGtqaGtqZycsIGdyb3VwPSdvaWhvaG9oJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAiUmVxdWlyZXMgemxpYiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVUlEX0dJRF9TVVBQT1JULCAiUmVxdWlyZXMgZ3JwIGFuZCBwd2Qgc3VwcG9ydCIpCisgICAgZGVmIHRlc3RfdGFyZmlsZV9yb290X293bmVyKHNlbGYpOgorICAgICAgICB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICBncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhcmNoaXZlX25hbWUgPSBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYXJjaGl2ZV9uYW1lKSkKKworICAgICAgICAjIG5vdyBjaGVja3MgdGhlIHJpZ2h0cworICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci51aWQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIuZ2lkLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXJjaGl2ZS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmVfY3dkKHNlbGYpOgorICAgICAgICBjdXJyZW50X2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIGRlZiBfYnJlYWtzKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisKKyAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoJ3h4eCcsIF9icmVha3MsIFtdLCAneHh4IGZpbGUnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbWFrZV9hcmNoaXZlKCd4eHgnLCAneHh4Jywgcm9vdF9kaXI9c2VsZi5ta2R0ZW1wKCkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0Y3dkKCksIGN1cnJlbnRfZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCgneHh4JykKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KHNlbGYpOgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsICd4eHgnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0LCAneHh4JywgbGFtYmRhOiB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0LCAneHh4JywgbGFtYmRhOiB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBbKDEsIDIpLCAoMSwgMiwgMyldKQorCisgICAgICAgIHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCd4eHgnLCBsYW1iZGE6IHgsIFsoMSwgMildLCAneHh4IGZpbGUnKQorICAgICAgICBmb3JtYXRzID0gW25hbWUgZm9yIG5hbWUsIHBhcmFtcyBpbiBnZXRfYXJjaGl2ZV9mb3JtYXRzKCldCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3h4eCcsIGZvcm1hdHMpCisKKyAgICAgICAgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCgneHh4JykKKyAgICAgICAgZm9ybWF0cyA9IFtuYW1lIGZvciBuYW1lLCBwYXJhbXMgaW4gZ2V0X2FyY2hpdmVfZm9ybWF0cygpXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd4eHgnLCBmb3JtYXRzKQorCisKK2NsYXNzIFRlc3RNb3ZlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZmlsZW5hbWUgPSAiZm9vIgorICAgICAgICBzZWxmLnNyY19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5kc3RfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYuc3JjX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5zcmNfZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5kc3RfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmRzdF9kaXIsIGZpbGVuYW1lKQorICAgICAgICAjIFRyeSB0byBjcmVhdGUgYSBkaXIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBob3BpbmcgdGhhdCBpdCBpcworICAgICAgICAjIG5vdCBsb2NhdGVkIG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0gYXMgdGhlIHN5c3RlbSB0bXAgZGlyLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRpcl9vdGhlcl9mcyA9IHRlbXBmaWxlLm1rZHRlbXAoCisgICAgICAgICAgICAgICAgZGlyPW9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCisgICAgICAgICAgICBzZWxmLmZpbGVfb3RoZXJfZnMgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJfb3RoZXJfZnMsCisgICAgICAgICAgICAgICAgZmlsZW5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgc2VsZi5kaXJfb3RoZXJfZnMgPSBOb25lCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNyY19maWxlLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgic3BhbSIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBkIGluIChzZWxmLnNyY19kaXIsIHNlbGYuZHN0X2Rpciwgc2VsZi5kaXJfb3RoZXJfZnMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGQ6CisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX2NoZWNrX21vdmVfZmlsZShzZWxmLCBzcmMsIGRzdCwgcmVhbF9kc3QpOgorICAgICAgICB3aXRoIG9wZW4oc3JjLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgY29udGVudHMgPSBmLnJlYWQoKQorICAgICAgICBzaHV0aWwubW92ZShzcmMsIGRzdCkKKyAgICAgICAgd2l0aCBvcGVuKHJlYWxfZHN0LCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgZi5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc3JjKSkKKworICAgIGRlZiBfY2hlY2tfbW92ZV9kaXIoc2VsZiwgc3JjLCBkc3QsIHJlYWxfZHN0KToKKyAgICAgICAgY29udGVudHMgPSBzb3J0ZWQob3MubGlzdGRpcihzcmMpKQorICAgICAgICBzaHV0aWwubW92ZShzcmMsIGRzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgc29ydGVkKG9zLmxpc3RkaXIocmVhbF9kc3QpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzcmMpKQorCisgICAgZGVmIHRlc3RfbW92ZV9maWxlKHNlbGYpOgorICAgICAgICAjIE1vdmUgYSBmaWxlIHRvIGFub3RoZXIgbG9jYXRpb24gb24gdGhlIHNhbWUgZmlsZXN5c3RlbS4KKyAgICAgICAgc2VsZi5fY2hlY2tfbW92ZV9maWxlKHNlbGYuc3JjX2ZpbGUsIHNlbGYuZHN0X2ZpbGUsIHNlbGYuZHN0X2ZpbGUpCisKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGVfdG9fZGlyKHNlbGYpOgorICAgICAgICAjIE1vdmUgYSBmaWxlIGluc2lkZSBhbiBleGlzdGluZyBkaXIgb24gdGhlIHNhbWUgZmlsZXN5c3RlbS4KKyAgICAgICAgc2VsZi5fY2hlY2tfbW92ZV9maWxlKHNlbGYuc3JjX2ZpbGUsIHNlbGYuZHN0X2Rpciwgc2VsZi5kc3RfZmlsZSkKKworICAgIGRlZiB0ZXN0X21vdmVfZmlsZV9vdGhlcl9mcyhzZWxmKToKKyAgICAgICAgIyBNb3ZlIGEgZmlsZSB0byBhbiBleGlzdGluZyBkaXIgb24gYW5vdGhlciBmaWxlc3lzdGVtLgorICAgICAgICBpZiBub3Qgc2VsZi5kaXJfb3RoZXJfZnM6CisgICAgICAgICAgICAjIHNraXAKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jaGVja19tb3ZlX2ZpbGUoc2VsZi5zcmNfZmlsZSwgc2VsZi5maWxlX290aGVyX2ZzLAorICAgICAgICAgICAgc2VsZi5maWxlX290aGVyX2ZzKQorCisgICAgZGVmIHRlc3RfbW92ZV9maWxlX3RvX2Rpcl9vdGhlcl9mcyhzZWxmKToKKyAgICAgICAgIyBNb3ZlIGEgZmlsZSB0byBhbm90aGVyIGxvY2F0aW9uIG9uIGFub3RoZXIgZmlsZXN5c3RlbS4KKyAgICAgICAgaWYgbm90IHNlbGYuZGlyX290aGVyX2ZzOgorICAgICAgICAgICAgIyBza2lwCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2hlY2tfbW92ZV9maWxlKHNlbGYuc3JjX2ZpbGUsIHNlbGYuZGlyX290aGVyX2ZzLAorICAgICAgICAgICAgc2VsZi5maWxlX290aGVyX2ZzKQorCisgICAgZGVmIHRlc3RfbW92ZV9kaXIoc2VsZik6CisgICAgICAgICMgTW92ZSBhIGRpciB0byBhbm90aGVyIGxvY2F0aW9uIG9uIHRoZSBzYW1lIGZpbGVzeXN0ZW0uCisgICAgICAgIGRzdF9kaXIgPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19tb3ZlX2RpcihzZWxmLnNyY19kaXIsIGRzdF9kaXIsIGRzdF9kaXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkc3RfZGlyKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X21vdmVfZGlyX290aGVyX2ZzKHNlbGYpOgorICAgICAgICAjIE1vdmUgYSBkaXIgdG8gYW5vdGhlciBsb2NhdGlvbiBvbiBhbm90aGVyIGZpbGVzeXN0ZW0uCisgICAgICAgIGlmIG5vdCBzZWxmLmRpcl9vdGhlcl9mczoKKyAgICAgICAgICAgICMgc2tpcAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRzdF9kaXIgPSB0ZW1wZmlsZS5ta3RlbXAoZGlyPXNlbGYuZGlyX290aGVyX2ZzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19tb3ZlX2RpcihzZWxmLnNyY19kaXIsIGRzdF9kaXIsIGRzdF9kaXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkc3RfZGlyKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X21vdmVfZGlyX3RvX2RpcihzZWxmKToKKyAgICAgICAgIyBNb3ZlIGEgZGlyIGluc2lkZSBhbiBleGlzdGluZyBkaXIgb24gdGhlIHNhbWUgZmlsZXN5c3RlbS4KKyAgICAgICAgc2VsZi5fY2hlY2tfbW92ZV9kaXIoc2VsZi5zcmNfZGlyLCBzZWxmLmRzdF9kaXIsCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kc3RfZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuc3JjX2RpcikpKQorCisgICAgZGVmIHRlc3RfbW92ZV9kaXJfdG9fZGlyX290aGVyX2ZzKHNlbGYpOgorICAgICAgICAjIE1vdmUgYSBkaXIgaW5zaWRlIGFuIGV4aXN0aW5nIGRpciBvbiBhbm90aGVyIGZpbGVzeXN0ZW0uCisgICAgICAgIGlmIG5vdCBzZWxmLmRpcl9vdGhlcl9mczoKKyAgICAgICAgICAgICMgc2tpcAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2NoZWNrX21vdmVfZGlyKHNlbGYuc3JjX2Rpciwgc2VsZi5kaXJfb3RoZXJfZnMsCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kaXJfb3RoZXJfZnMsIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5zcmNfZGlyKSkpCisKKyAgICBkZWYgdGVzdF9leGlzdGluZ19maWxlX2luc2lkZV9kZXN0X2RpcihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGluc2lkZSB0aGUgZGVzdGluYXRpb24gZGlyIGFscmVhZHkgZXhpc3RzLgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5kc3RfZmlsZSwgIndiIik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLm1vdmUsIHNlbGYuc3JjX2ZpbGUsIHNlbGYuZHN0X2RpcikKKworICAgIGRlZiB0ZXN0X2RvbnRfbW92ZV9kaXJfaW5faXRzZWxmKHNlbGYpOgorICAgICAgICAjIE1vdmluZyBhIGRpciBpbnNpZGUgaXRzZWxmIHJhaXNlcyBhbiBFcnJvci4KKyAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKHNlbGYuc3JjX2RpciwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLm1vdmUsIHNlbGYuc3JjX2RpciwgZHN0KQorCisgICAgZGVmIHRlc3RfZGVzdGluc3JjX2ZhbHNlX25lZ2F0aXZlKHNlbGYpOgorICAgICAgICBvcy5ta2RpcihURVNURk4pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBzcmMsIGRzdCBpbiBbKCdzcmNkaXInLCAnc3JjZGlyL2Rlc3QnKV06CisgICAgICAgICAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKFRFU1RGTiwgc3JjKQorICAgICAgICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihURVNURk4sIGRzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2h1dGlsLl9kZXN0aW5zcmMoc3JjLCBkc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J19kZXN0aW5zcmMoKSB3cm9uZ2x5IGNvbmNsdWRlZCB0aGF0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RzdCAoJXMpIGlzIG5vdCBpbiBzcmMgKCVzKScgJSAoZHN0LCBzcmMpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2Rlc3RpbnNyY19mYWxzZV9wb3NpdGl2ZShzZWxmKToKKyAgICAgICAgb3MubWtkaXIoVEVTVEZOKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3Igc3JjLCBkc3QgaW4gWygnc3JjZGlyJywgJ3NyYy9kZXN0JyksICgnc3JjZGlyJywgJ3NyY2Rpci5uZXcnKV06CisgICAgICAgICAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKFRFU1RGTiwgc3JjKQorICAgICAgICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihURVNURk4sIGRzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNodXRpbC5fZGVzdGluc3JjKHNyYywgZHN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J19kZXN0aW5zcmMoKSB3cm9uZ2x5IGNvbmNsdWRlZCB0aGF0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHN0ICglcykgaXMgaW4gc3JjICglcyknICUgKGRzdCwgc3JjKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOLCBpZ25vcmVfZXJyb3JzPVRydWUpCisKKworY2xhc3MgVGVzdENvcHlGaWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9kZWxldGUgPSBGYWxzZQorCisgICAgY2xhc3MgRmF1eChvYmplY3QpOgorICAgICAgICBfZW50ZXJlZCA9IEZhbHNlCisgICAgICAgIF9leGl0ZWRfd2l0aCA9IE5vbmUKKyAgICAgICAgX3JhaXNlZCA9IEZhbHNlCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYWlzZV9pbl9leGl0PUZhbHNlLCBzdXBwcmVzc19hdF9leGl0PVRydWUpOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfaW5fZXhpdCA9IHJhaXNlX2luX2V4aXQKKyAgICAgICAgICAgIHNlbGYuX3N1cHByZXNzX2F0X2V4aXQgPSBzdXBwcmVzc19hdF9leGl0CisgICAgICAgIGRlZiByZWFkKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZW50ZXJlZCA9IFRydWUKKyAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgorICAgICAgICAgICAgc2VsZi5fZXhpdGVkX3dpdGggPSBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiCisgICAgICAgICAgICBpZiBzZWxmLl9yYWlzZV9pbl9leGl0OgorICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlZCA9IFRydWUKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDYW5ub3QgY2xvc2UiKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N1cHByZXNzX2F0X2V4aXQKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZGVsZXRlOgorICAgICAgICAgICAgZGVsIHNodXRpbC5vcGVuCisKKyAgICBkZWYgX3NldF9zaHV0aWxfb3BlbihzZWxmLCBmdW5jKToKKyAgICAgICAgc2h1dGlsLm9wZW4gPSBmdW5jCisgICAgICAgIHNlbGYuX2RlbGV0ZSA9IFRydWUKKworICAgIGRlZiB0ZXN0X3dfc291cmNlX29wZW5fZmFpbHMoc2VsZik6CisgICAgICAgIGRlZiBfb3BlbihmaWxlbmFtZSwgbW9kZT0ncicpOgorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ3NyY2ZpbGUnOgorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0Nhbm5vdCBvcGVuICJzcmNmaWxlIicpCisgICAgICAgICAgICBhc3NlcnQgMCAgIyBzaG91bGRuJ3QgcmVhY2ggaGVyZS4KKworICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCisKKyAgICBkZWYgdGVzdF93X2Rlc3Rfb3Blbl9mYWlscyhzZWxmKToKKworICAgICAgICBzcmNmaWxlID0gc2VsZi5GYXV4KCkKKworICAgICAgICBkZWYgX29wZW4oZmlsZW5hbWUsIG1vZGU9J3InKToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3JjZmlsZQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2Rlc3RmaWxlJzoKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJykKKyAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgorCisgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKKworICAgICAgICBzaHV0aWwuY29weWZpbGUoJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMV0uYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInLCkpCisKKyAgICBkZWYgdGVzdF93X2Rlc3RfY2xvc2VfZmFpbHMoc2VsZik6CisKKyAgICAgICAgc3JjZmlsZSA9IHNlbGYuRmF1eCgpCisgICAgICAgIGRlc3RmaWxlID0gc2VsZi5GYXV4KFRydWUpCisKKyAgICAgICAgZGVmIF9vcGVuKGZpbGVuYW1lLCBtb2RlPSdyJyk6CisgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnc3JjZmlsZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNyY2ZpbGUKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdkZXN0ZmlsZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlc3RmaWxlCisgICAgICAgICAgICBhc3NlcnQgMCAgIyBzaG91bGRuJ3QgcmVhY2ggaGVyZS4KKworICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCisKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCdzcmNmaWxlJywgJ2Rlc3RmaWxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2VudGVyZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXN0ZmlsZS5fZW50ZXJlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9yYWlzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBJT0Vycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzFdLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYW5ub3QgY2xvc2UnLCkpCisKKyAgICBkZWYgdGVzdF93X3NvdXJjZV9jbG9zZV9mYWlscyhzZWxmKToKKworICAgICAgICBzcmNmaWxlID0gc2VsZi5GYXV4KFRydWUpCisgICAgICAgIGRlc3RmaWxlID0gc2VsZi5GYXV4KCkKKworICAgICAgICBkZWYgX29wZW4oZmlsZW5hbWUsIG1vZGU9J3InKToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3JjZmlsZQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2Rlc3RmaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVzdGZpbGUKKyAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgorCisgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUsICdzcmNmaWxlJywgJ2Rlc3RmaWxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2VudGVyZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXN0ZmlsZS5fZW50ZXJlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkZXN0ZmlsZS5fcmFpc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX3JhaXNlZCkKKworICAgIGRlZiB0ZXN0X21vdmVfZGlyX2Nhc2VpbnNlbnNpdGl2ZShzZWxmKToKKyAgICAgICAgIyBSZW5hbWVzIGEgZm9sZGVyIHRvIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgIyBidXQgYSBkaWZmZXJlbnQgY2FzZS4KKworICAgICAgICBzZWxmLnNyY19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgZHN0X2RpciA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoc2VsZi5zcmNfZGlyKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuc3JjX2RpcikudXBwZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLnNyY19kaXIsIGRzdF9kaXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLm1vdmUoc2VsZi5zcmNfZGlyLCBkc3RfZGlyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoZHN0X2RpcikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3RfZGlyKToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihkc3RfZGlyKQorCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFNodXRpbCwgVGVzdE1vdmUsIFRlc3RDb3B5RmlsZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODNmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkKQEAgLTAsMCArMSw1MDEgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY2xvc2luZworaW1wb3J0IGdjCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHN5cywgb3MsIHRpbWUsIGVycm5vCisKK2lmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMicsICdyaXNjb3MnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2FuJ3QgdGVzdCBzaWduYWwgb24gJXMiICUgc3lzLnBsYXRmb3JtKQorCisKK2NsYXNzIEhhbmRsZXJCQ2FsbGVkKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2RlZiBleGl0X3N1YnByb2Nlc3MoKToKKyAgICAiIiJVc2Ugb3MuX2V4aXQoMCkgdG8gZXhpdCB0aGUgY3VycmVudCBzdWJwcm9jZXNzLgorCisgICAgT3RoZXJ3aXNlLCB0aGUgdGVzdCBjYXRjaGVzIHRoZSBTeXN0ZW1FeGl0IGFuZCBjb250aW51ZXMgZXhlY3V0aW5nCisgICAgaW4gcGFyYWxsZWwgd2l0aCB0aGUgb3JpZ2luYWwgdGVzdCwgc28geW91IHdpbmQgdXAgd2l0aCBhbgorICAgIGV4cG9uZW50aWFsIG51bWJlciBvZiB0ZXN0cyBydW5uaW5nIGNvbmN1cnJlbnRseS4KKyAgICAiIiIKKyAgICBvcy5fZXhpdCgwKQorCisKK2RlZiBpZ25vcmluZ19laW50cihfX2Z1bmMsICphcmdzLCAqKmt3YXJncyk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gX19mdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiTm90IHZhbGlkIG9uIFdpbmRvd3MiKQorY2xhc3MgSW50ZXJQcm9jZXNzU2lnbmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIE1BWF9EVVJBVElPTiA9IDIwICAgIyBFbnRpcmUgdGVzdCBzaG91bGQgbGFzdCBhdCBtb3N0IDIwIHNlYy4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi51c2luZ19nYyA9IGdjLmlzZW5hYmxlZCgpCisgICAgICAgIGdjLmRpc2FibGUoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnVzaW5nX2djOgorICAgICAgICAgICAgZ2MuZW5hYmxlKCkKKworICAgIGRlZiBmb3JtYXRfZnJhbWUoc2VsZiwgZnJhbWUsIGxpbWl0PU5vbmUpOgorICAgICAgICByZXR1cm4gJycuam9pbih0cmFjZWJhY2suZm9ybWF0X3N0YWNrKGZyYW1lLCBsaW1pdD1saW1pdCkpCisKKyAgICBkZWYgaGFuZGxlckEoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIHNlbGYuYV9jYWxsZWQgPSBUcnVlCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImhhbmRsZXJBIGludm9rZWQgZnJvbSBzaWduYWwgJXMgYXQ6XG4lcyIgJSAoCisgICAgICAgICAgICAgICAgc2lnbnVtLCBzZWxmLmZvcm1hdF9mcmFtZShmcmFtZSwgbGltaXQ9MSkpCisKKyAgICBkZWYgaGFuZGxlckIoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIHNlbGYuYl9jYWxsZWQgPSBUcnVlCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImhhbmRsZXJCIGludm9rZWQgZnJvbSBzaWduYWwgJXMgYXQ6XG4lcyIgJSAoCisgICAgICAgICAgICAgICAgc2lnbnVtLCBzZWxmLmZvcm1hdF9mcmFtZShmcmFtZSwgbGltaXQ9MSkpCisgICAgICAgIHJhaXNlIEhhbmRsZXJCQ2FsbGVkKHNpZ251bSwgc2VsZi5mb3JtYXRfZnJhbWUoZnJhbWUpKQorCisgICAgZGVmIHdhaXQoc2VsZiwgY2hpbGQpOgorICAgICAgICAiIiJXYWl0IGZvciBjaGlsZCB0byBmaW5pc2gsIGlnbm9yaW5nIEVJTlRSLiIiIgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNoaWxkLndhaXQoKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYpOgorICAgICAgICAjIEluc3RhbGwgaGFuZGxlcnMuIFRoaXMgZnVuY3Rpb24gcnVucyBpbiBhIHN1Yi1wcm9jZXNzLCBzbyB3ZQorICAgICAgICAjIGRvbid0IHdvcnJ5IGFib3V0IHJlLXNldHRpbmcgdGhlIGRlZmF1bHQgaGFuZGxlcnMuCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0hVUCwgc2VsZi5oYW5kbGVyQSkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgc2VsZi5oYW5kbGVyQikKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMiwgc2lnbmFsLlNJR19JR04pCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyKQorCisgICAgICAgICMgVmFyaWFibGVzIHRoZSBzaWduYWxzIHdpbGwgbW9kaWZ5OgorICAgICAgICBzZWxmLmFfY2FsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5iX2NhbGxlZCA9IEZhbHNlCisKKyAgICAgICAgIyBMZXQgdGhlIHN1Yi1wcm9jZXNzZXMga25vdyB3aG8gdG8gc2VuZCBzaWduYWxzIHRvLgorICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJ0ZXN0IHJ1bm5lcidzIHBpZCBpcyIsIHBpZAorCisgICAgICAgIGNoaWxkID0gaWdub3JpbmdfZWludHIoc3VicHJvY2Vzcy5Qb3BlbiwgWydraWxsJywgJy1IVVAnLCBzdHIocGlkKV0pCisgICAgICAgIGlmIGNoaWxkOgorICAgICAgICAgICAgc2VsZi53YWl0KGNoaWxkKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuYV9jYWxsZWQ6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKSAgIyBHaXZlIHRoZSBzaWduYWwgdGltZSB0byBiZSBkZWxpdmVyZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmFfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuYl9jYWxsZWQpCisgICAgICAgIHNlbGYuYV9jYWxsZWQgPSBGYWxzZQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBzaWduYWwgaXNuJ3QgZGVsaXZlcmVkIHdoaWxlIHRoZSBwcmV2aW91cworICAgICAgICAjIFBvcGVuIG9iamVjdCBpcyBiZWluZyBkZXN0cm95ZWQsIGJlY2F1c2UgX19kZWxfXyBzd2FsbG93cworICAgICAgICAjIGV4Y2VwdGlvbnMuCisgICAgICAgIGRlbCBjaGlsZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjaGlsZCA9IHN1YnByb2Nlc3MuUG9wZW4oWydraWxsJywgJy1VU1IxJywgc3RyKHBpZCldKQorICAgICAgICAgICAgIyBUaGlzIHdhaXQgc2hvdWxkIGJlIGludGVycnVwdGVkIGJ5IHRoZSBzaWduYWwncyBleGNlcHRpb24uCisgICAgICAgICAgICBzZWxmLndhaXQoY2hpbGQpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpICAjIEdpdmUgdGhlIHNpZ25hbCB0aW1lIHRvIGJlIGRlbGl2ZXJlZC4KKyAgICAgICAgICAgIHNlbGYuZmFpbCgnSGFuZGxlckJDYWxsZWQgZXhjZXB0aW9uIG5vdCByYWlzZWQnKQorICAgICAgICBleGNlcHQgSGFuZGxlckJDYWxsZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5iX2NhbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5hX2NhbGxlZCkKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJIYW5kbGVyQkNhbGxlZCBleGNlcHRpb24gY2F1Z2h0IgorCisgICAgICAgIGNoaWxkID0gaWdub3JpbmdfZWludHIoc3VicHJvY2Vzcy5Qb3BlbiwgWydraWxsJywgJy1VU1IyJywgc3RyKHBpZCldKQorICAgICAgICBpZiBjaGlsZDoKKyAgICAgICAgICAgIHNlbGYud2FpdChjaGlsZCkgICMgTm90aGluZyBzaG91bGQgaGFwcGVuLgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgIyBUaGUgcmFjZSBjb25kaXRpb24gaW4gcGF1c2UgZG9lc24ndCBtYXR0ZXIgaW4gdGhpcyBjYXNlLAorICAgICAgICAgICAgIyBzaW5jZSBhbGFybSBpcyBnb2luZyB0byByYWlzZSBhIEtleWJvYXJkRXhjZXB0aW9uLCB3aGljaAorICAgICAgICAgICAgIyB3aWxsIHNraXAgdGhlIGNhbGwuCisgICAgICAgICAgICBzaWduYWwucGF1c2UoKQorICAgICAgICAgICAgIyBCdXQgaWYgYW5vdGhlciBzaWduYWwgYXJyaXZlcyBiZWZvcmUgdGhlIGFsYXJtLCBwYXVzZQorICAgICAgICAgICAgIyBtYXkgcmV0dXJuIGVhcmx5LgorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAiS2V5Ym9hcmRJbnRlcnJ1cHQgKHRoZSBhbGFybSgpIHdlbnQgb2ZmKSIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTb21lIG90aGVyIGV4Y2VwdGlvbiB3b2tlIHVzIGZyb20gcGF1c2U6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicGF1c2UgcmV0dXJuZWQgb2YgaXRzIG93biBhY2NvcmQsIGFuZCB0aGUgc2lnbmFsIgorICAgICAgICAgICAgICAgICAgICAgICIgZGlkbid0IGFycml2ZSBhZnRlciBhbm90aGVyIHNlY29uZC4iKQorCisgICAgIyBJc3N1ZSAzODY0LiBVbmtub3duIGlmIHRoaXMgYWZmZWN0cyBlYXJsaWVyIHZlcnNpb25zIG9mIGZyZWVic2QgYWxzby4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybT09J2ZyZWVic2Q2JywKKyAgICAgICAgJ2ludGVyIHByb2Nlc3Mgc2lnbmFscyBub3QgcmVsaWFibGUgKGRvIG5vdCBtaXggd2VsbCB3aXRoIHRocmVhZGluZykgJworICAgICAgICAnb24gZnJlZWJzZDYnKQorICAgIGRlZiB0ZXN0X21haW4oc2VsZik6CisgICAgICAgICMgVGhpcyBmdW5jdGlvbiBzcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHRvIGluc3VsYXRlIHRoZSBtYWluCisgICAgICAgICMgdGVzdC1ydW5uaW5nIHByb2Nlc3MgZnJvbSBhbGwgdGhlIHNpZ25hbHMuIEl0IHRoZW4KKyAgICAgICAgIyBjb21tdW5pY2F0ZXMgd2l0aCB0aGF0IGNoaWxkIHByb2Nlc3Mgb3ZlciBhIHBpcGUgYW5kCisgICAgICAgICMgcmUtcmFpc2VzIGluZm9ybWF0aW9uIGFib3V0IGFueSBleGNlcHRpb25zIHRoZSBjaGlsZAorICAgICAgICAjIHJhaXNlcy4gVGhlIHJlYWwgd29yayBoYXBwZW5zIGluIHNlbGYucnVuX3Rlc3QoKS4KKyAgICAgICAgb3NfZG9uZV9yLCBvc19kb25lX3cgPSBvcy5waXBlKCkKKyAgICAgICAgd2l0aCBjbG9zaW5nKG9zLmZkb3Blbihvc19kb25lX3IpKSBhcyBkb25lX3IsIFwKKyAgICAgICAgICAgICBjbG9zaW5nKG9zLmZkb3Blbihvc19kb25lX3csICd3JykpIGFzIGRvbmVfdzoKKyAgICAgICAgICAgIGNoaWxkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiBjaGlsZCA9PSAwOgorICAgICAgICAgICAgICAgICMgSW4gdGhlIGNoaWxkIHByb2Nlc3M7IHJ1biB0aGUgdGVzdCBhbmQgcmVwb3J0IHJlc3VsdHMKKyAgICAgICAgICAgICAgICAjIHRocm91Z2ggdGhlIHBpcGUuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkb25lX3IuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAjIEhhdmUgdG8gY2xvc2UgZG9uZV93IGFnYWluIGhlcmUgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgICAjIGV4aXRfc3VicHJvY2VzcygpIHdpbGwgc2tpcCB0aGUgZW5jbG9zaW5nIHdpdGggYmxvY2suCisgICAgICAgICAgICAgICAgICAgIHdpdGggY2xvc2luZyhkb25lX3cpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnVuX3Rlc3QoKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wKHRyYWNlYmFjay5mb3JtYXRfZXhjKCksIGRvbmVfdykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmR1bXAoTm9uZSwgZG9uZV93KQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ1VoIG9oLCByYWlzZWQgZnJvbSBwaWNrbGUuJworICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBleGl0X3N1YnByb2Nlc3MoKQorCisgICAgICAgICAgICBkb25lX3cuY2xvc2UoKQorICAgICAgICAgICAgIyBCbG9jayBmb3IgdXAgdG8gTUFYX0RVUkFUSU9OIHNlY29uZHMgZm9yIHRoZSB0ZXN0IHRvIGZpbmlzaC4KKyAgICAgICAgICAgIHIsIHcsIHggPSBzZWxlY3Quc2VsZWN0KFtkb25lX3JdLCBbXSwgW10sIHNlbGYuTUFYX0RVUkFUSU9OKQorICAgICAgICAgICAgaWYgZG9uZV9yIGluIHI6CisgICAgICAgICAgICAgICAgdGIgPSBwaWNrbGUubG9hZChkb25lX3IpCisgICAgICAgICAgICAgICAgaWYgdGI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCh0YikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3Mua2lsbChjaGlsZCwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdUZXN0IGRlYWRsb2NrZWQgYWZ0ZXIgJWQgc2Vjb25kcy4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5NQVhfRFVSQVRJT04pCisKKworQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIk5vdCB2YWxpZCBvbiBXaW5kb3dzIikKK2NsYXNzIEJhc2ljU2lnbmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0cml2aWFsX3NpZ25hbF9oYW5kbGVyKHNlbGYsICphcmdzKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfb3V0X29mX3JhbmdlX3NpZ25hbF9udW1iZXJfcmFpc2VzX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzaWduYWwuZ2V0c2lnbmFsLCA0MjQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNpZ25hbC5zaWduYWwsIDQyNDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpdmlhbF9zaWduYWxfaGFuZGxlcikKKworICAgIGRlZiB0ZXN0X3NldHRpbmdfc2lnbmFsX2hhbmRsZXJfdG9fbm9uZV9yYWlzZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2lnbmFsLnNpZ25hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLlNJR1VTUjEsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXRzaWduYWwoc2VsZik6CisgICAgICAgIGh1cCA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0hVUCwgc2VsZi50cml2aWFsX3NpZ25hbF9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0hVUCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50cml2aWFsX3NpZ25hbF9oYW5kbGVyKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdIVVAsIGh1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdIVVApLCBodXApCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIHNwZWNpZmljIikKK2NsYXNzIFdpbmRvd3NTaWduYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaXNzdWU5MzI0KHNlbGYpOgorICAgICAgICAjIFVwZGF0ZWQgZm9yIGlzc3VlICMxMDAwMywgYWRkaW5nIFNJR0JSRUFLCisgICAgICAgIGhhbmRsZXIgPSBsYW1iZGEgeCwgeTogTm9uZQorICAgICAgICBmb3Igc2lnIGluIChzaWduYWwuU0lHQUJSVCwgc2lnbmFsLlNJR0JSRUFLLCBzaWduYWwuU0lHRlBFLAorICAgICAgICAgICAgICAgICAgICBzaWduYWwuU0lHSUxMLCBzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHU0VHViwKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLlNJR1RFUk0pOgorICAgICAgICAgICAgIyBTZXQgYW5kIHRoZW4gcmVzZXQgYSBoYW5kbGVyIGZvciBzaWduYWxzIHRoYXQgd29yayBvbiB3aW5kb3dzCisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZywgc2lnbmFsLnNpZ25hbChzaWcsIGhhbmRsZXIpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKC0xLCBoYW5kbGVyKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKDcsIGhhbmRsZXIpCisKKworY2xhc3MgV2FrZXVwRkRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2ZkKHNlbGYpOgorICAgICAgICBmZCA9IHRlc3Rfc3VwcG9ydC5tYWtlX2JhZF9mZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCBmZCkKKworCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiTm90IHZhbGlkIG9uIFdpbmRvd3MiKQorY2xhc3MgV2FrZXVwU2lnbmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFRJTUVPVVRfRlVMTCA9IDEwCisgICAgVElNRU9VVF9IQUxGID0gNQorCisgICAgZGVmIHRlc3Rfd2FrZXVwX2ZkX2Vhcmx5KHNlbGYpOgorICAgICAgICBpbXBvcnQgc2VsZWN0CisKKyAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgIGJlZm9yZV90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgIyBXZSBhdHRlbXB0IHRvIGdldCBhIHNpZ25hbCBkdXJpbmcgdGhlIHNsZWVwLAorICAgICAgICAjIGJlZm9yZSBzZWxlY3QgaXMgY2FsbGVkCisgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5USU1FT1VUX0ZVTEwpCisgICAgICAgIG1pZF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1pZF90aW1lIC0gYmVmb3JlX3RpbWUgPCBzZWxmLlRJTUVPVVRfSEFMRikKKyAgICAgICAgc2VsZWN0LnNlbGVjdChbc2VsZi5yZWFkXSwgW10sIFtdLCBzZWxmLlRJTUVPVVRfRlVMTCkKKyAgICAgICAgYWZ0ZXJfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhZnRlcl90aW1lIC0gbWlkX3RpbWUgPCBzZWxmLlRJTUVPVVRfSEFMRikKKworICAgIGRlZiB0ZXN0X3dha2V1cF9mZF9kdXJpbmcoc2VsZik6CisgICAgICAgIGltcG9ydCBzZWxlY3QKKworICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgYmVmb3JlX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAjIFdlIGF0dGVtcHQgdG8gZ2V0IGEgc2lnbmFsIGR1cmluZyB0aGUgc2VsZWN0IGNhbGwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZWN0LmVycm9yLCBzZWxlY3Quc2VsZWN0LAorICAgICAgICAgICAgW3NlbGYucmVhZF0sIFtdLCBbXSwgc2VsZi5USU1FT1VUX0ZVTEwpCisgICAgICAgIGFmdGVyX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWZ0ZXJfdGltZSAtIGJlZm9yZV90aW1lIDwgc2VsZi5USU1FT1VUX0hBTEYpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGltcG9ydCBmY250bAorCisgICAgICAgIHNlbGYuYWxybSA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGxhbWJkYSB4LHk6Tm9uZSkKKyAgICAgICAgc2VsZi5yZWFkLCBzZWxmLndyaXRlID0gb3MucGlwZSgpCisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoc2VsZi53cml0ZSwgZmNudGwuRl9HRVRGTCwgMCkKKyAgICAgICAgZmxhZ3MgPSBmbGFncyB8IG9zLk9fTk9OQkxPQ0sKKyAgICAgICAgZmNudGwuZmNudGwoc2VsZi53cml0ZSwgZmNudGwuRl9TRVRGTCwgZmxhZ3MpCisgICAgICAgIHNlbGYub2xkX3dha2V1cCA9IHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHNlbGYud3JpdGUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHNlbGYub2xkX3dha2V1cCkKKyAgICAgICAgb3MuY2xvc2Uoc2VsZi5yZWFkKQorICAgICAgICBvcy5jbG9zZShzZWxmLndyaXRlKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxmLmFscm0pCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJOb3QgdmFsaWQgb24gV2luZG93cyIpCitjbGFzcyBTaWdpbnRlcnJ1cHRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiSW5zdGFsbCBhIG5vLW9wIHNpZ25hbCBoYW5kbGVyIHRoYXQgY2FuIGJlIHNldCB0byBhbGxvdworICAgICAgICBpbnRlcnJ1cHRzIG9yIG5vdCwgYW5kIGFycmFuZ2UgZm9yIHRoZSBvcmlnaW5hbCBzaWduYWwgaGFuZGxlciB0byBiZQorICAgICAgICByZS1pbnN0YWxsZWQgd2hlbiB0aGUgdGVzdCBpcyBmaW5pc2hlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc2lnbnVtID0gc2lnbmFsLlNJR1VTUjEKKyAgICAgICAgb2xkaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2VsZi5zaWdudW0sIGxhbWJkYSB4LHk6IE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaWduYWwuc2lnbmFsLCBzZWxmLnNpZ251bSwgb2xkaGFuZGxlcikKKworICAgIGRlZiByZWFkcGlwZV9pbnRlcnJ1cHRlZChzZWxmKToKKyAgICAgICAgIiIiUGVyZm9ybSBhIHJlYWQgZHVyaW5nIHdoaWNoIGEgc2lnbmFsIHdpbGwgYXJyaXZlLiAgUmV0dXJuIFRydWUgaWYgdGhlCisgICAgICAgIHJlYWQgaXMgaW50ZXJydXB0ZWQgYnkgdGhlIHNpZ25hbCBhbmQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIFJldHVybiBGYWxzZQorICAgICAgICBpZiBpdCByZXR1cm5zIG5vcm1hbGx5LgorICAgICAgICAiIiIKKyAgICAgICAgIyBDcmVhdGUgYSBwaXBlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRoZSByZWFkLiAgQWxzbyBjbGVhbiBpdCB1cAorICAgICAgICAjIHdoZW4gdGhlIHRlc3QgaXMgb3Zlciwgc2luY2Ugbm90aGluZyBlbHNlIHdpbGwgKGJ1dCBzZWUgYmVsb3cgZm9yCisgICAgICAgICMgdGhlIHdyaXRlIGVuZCkuCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCByKQorCisgICAgICAgICMgQ3JlYXRlIGFub3RoZXIgcHJvY2VzcyB3aGljaCBjYW4gc2VuZCBhIHNpZ25hbCB0byB0aGlzIG9uZSB0byB0cnkKKyAgICAgICAgIyB0byBpbnRlcnJ1cHQgdGhlIHJlYWQuCisgICAgICAgIHBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKworICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICMgQ2hpbGQgY29kZTogc2xlZXAgdG8gZ2l2ZSB0aGUgcGFyZW50IGVub3VnaCB0aW1lIHRvIGVudGVyIHRoZQorICAgICAgICAgICAgIyByZWFkKCkgY2FsbCAodGhlcmUncyBhIHJhY2UgaGVyZSwgYnV0IGl0J3MgcmVhbGx5IHRyaWNreSB0bworICAgICAgICAgICAgIyBlbGltaW5hdGUgaXQpOyB0aGVuIHNpZ25hbCB0aGUgcGFyZW50IHByb2Nlc3MuICBBbHNvLCBzbGVlcAorICAgICAgICAgICAgIyBhZ2FpbiB0byBtYWtlIGl0IGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkIHRvIHRoZQorICAgICAgICAgICAgIyBwYXJlbnQgcHJvY2VzcyBiZWZvcmUgdGhlIGNoaWxkIGV4aXRzLiAgSWYgdGhlIGNoaWxkIGV4aXRzCisgICAgICAgICAgICAjIGZpcnN0LCB0aGUgd3JpdGUgZW5kIG9mIHRoZSBwaXBlIHdpbGwgYmUgY2xvc2VkIGFuZCB0aGUgdGVzdAorICAgICAgICAgICAgIyBpcyBpbnZhbGlkLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQorICAgICAgICAgICAgICAgIG9zLmtpbGwocHBpZCwgc2VsZi5zaWdudW0pCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICMgTm8gbWF0dGVyIHdoYXQsIGp1c3QgZXhpdCBhcyBmYXN0IGFzIHBvc3NpYmxlIG5vdy4KKyAgICAgICAgICAgICAgICBleGl0X3N1YnByb2Nlc3MoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQYXJlbnQgY29kZS4KKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBjaGlsZCBpcyBldmVudHVhbGx5IHJlYXBlZCwgZWxzZSBpdCdsbCBiZSBhCisgICAgICAgICAgICAjIHpvbWJpZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRlc3Qgc3VpdGUgcnVuLgorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLndhaXRwaWQsIHBpZCwgMCkKKworICAgICAgICAgICAgIyBDbG9zZSB0aGUgd3JpdGUgZW5kIG9mIHRoZSBwaXBlLiAgVGhlIGNoaWxkIGhhcyBhIGNvcHksIHNvCisgICAgICAgICAgICAjIGl0J3Mgbm90IHJlYWxseSBjbG9zZWQgdW50aWwgdGhlIGNoaWxkIGV4aXRzLiAgV2UgbmVlZCBpdCB0bworICAgICAgICAgICAgIyBjbG9zZSB3aGVuIHRoZSBjaGlsZCBleGl0cyBzbyB0aGF0IGluIHRoZSBub24taW50ZXJydXB0IGNhc2UKKyAgICAgICAgICAgICMgdGhlIHJlYWQgZXZlbnR1YWxseSBjb21wbGV0ZXMsIG90aGVyd2lzZSB3ZSBjb3VsZCBqdXN0IGNsb3NlCisgICAgICAgICAgICAjIGl0ICphZnRlciogdGhlIHRlc3QuCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorCisgICAgICAgICAgICAjIFRyeSB0aGUgcmVhZCBhbmQgcmVwb3J0IHdoZXRoZXIgaXQgaXMgaW50ZXJydXB0ZWQgb3Igbm90IHRvCisgICAgICAgICAgICAjIHRoZSBjYWxsZXIuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZCA9IG9zLnJlYWQociwgMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vICE9IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdGVzdF93aXRob3V0X3NpZ2ludGVycnVwdChzZWxmKToKKyAgICAgICAgIiIiSWYgYSBzaWduYWwgaGFuZGxlciBpcyBpbnN0YWxsZWQgYW5kIHNpZ2ludGVycnVwdCBpcyBub3QgY2FsbGVkCisgICAgICAgIGF0IGFsbCwgd2hlbiB0aGF0IHNpZ25hbCBhcnJpdmVzLCBpdCBpbnRlcnJ1cHRzIGEgc3lzY2FsbCB0aGF0J3MgaW4KKyAgICAgICAgcHJvZ3Jlc3MuCisgICAgICAgICIiIgorICAgICAgICBpID0gc2VsZi5yZWFkcGlwZV9pbnRlcnJ1cHRlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpKQorICAgICAgICAjIEFycml2YWwgb2YgdGhlIHNpZ25hbCBzaG91bGRuJ3QgaGF2ZSBjaGFuZ2VkIGFueXRoaW5nLgorICAgICAgICBpID0gc2VsZi5yZWFkcGlwZV9pbnRlcnJ1cHRlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpKQorCisgICAgZGVmIHRlc3Rfc2lnaW50ZXJydXB0X29uKHNlbGYpOgorICAgICAgICAiIiJJZiBhIHNpZ25hbCBoYW5kbGVyIGlzIGluc3RhbGxlZCBhbmQgc2lnaW50ZXJydXB0IGlzIGNhbGxlZCB3aXRoCisgICAgICAgIGEgdHJ1ZSB2YWx1ZSBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCwgd2hlbiB0aGF0IHNpZ25hbCBhcnJpdmVzLCBpdAorICAgICAgICBpbnRlcnJ1cHRzIGEgc3lzY2FsbCB0aGF0J3MgaW4gcHJvZ3Jlc3MuCisgICAgICAgICIiIgorICAgICAgICBzaWduYWwuc2lnaW50ZXJydXB0KHNlbGYuc2lnbnVtLCAxKQorICAgICAgICBpID0gc2VsZi5yZWFkcGlwZV9pbnRlcnJ1cHRlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpKQorICAgICAgICAjIEFycml2YWwgb2YgdGhlIHNpZ25hbCBzaG91bGRuJ3QgaGF2ZSBjaGFuZ2VkIGFueXRoaW5nLgorICAgICAgICBpID0gc2VsZi5yZWFkcGlwZV9pbnRlcnJ1cHRlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpKQorCisgICAgZGVmIHRlc3Rfc2lnaW50ZXJydXB0X29mZihzZWxmKToKKyAgICAgICAgIiIiSWYgYSBzaWduYWwgaGFuZGxlciBpcyBpbnN0YWxsZWQgYW5kIHNpZ2ludGVycnVwdCBpcyBjYWxsZWQgd2l0aAorICAgICAgICBhIGZhbHNlIHZhbHVlIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50LCB3aGVuIHRoYXQgc2lnbmFsIGFycml2ZXMsIGl0CisgICAgICAgIGRvZXMgbm90IGludGVycnVwdCBhIHN5c2NhbGwgdGhhdCdzIGluIHByb2dyZXNzLgorICAgICAgICAiIiIKKyAgICAgICAgc2lnbmFsLnNpZ2ludGVycnVwdChzZWxmLnNpZ251bSwgMCkKKyAgICAgICAgaSA9IHNlbGYucmVhZHBpcGVfaW50ZXJydXB0ZWQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGkpCisgICAgICAgICMgQXJyaXZhbCBvZiB0aGUgc2lnbmFsIHNob3VsZG4ndCBoYXZlIGNoYW5nZWQgYW55dGhpbmcuCisgICAgICAgIGkgPSBzZWxmLnJlYWRwaXBlX2ludGVycnVwdGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpKQorCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJOb3QgdmFsaWQgb24gV2luZG93cyIpCitjbGFzcyBJdGltZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaG5kbF9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmhuZGxfY291bnQgPSAwCisgICAgICAgIHNlbGYuaXRpbWVyID0gTm9uZQorICAgICAgICBzZWxmLm9sZF9hbGFybSA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYuc2lnX2Fscm0pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYub2xkX2FsYXJtKQorICAgICAgICBpZiBzZWxmLml0aW1lciBpcyBub3QgTm9uZTogIyB0ZXN0X2l0aW1lcl9leGMgZG9lc24ndCBjaGFuZ2UgdGhpcyBhdHRyCisgICAgICAgICAgICAjIGp1c3QgZW5zdXJlIHRoYXQgaXRpbWVyIGlzIHN0b3BwZWQKKyAgICAgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2VsZi5pdGltZXIsIDApCisKKyAgICBkZWYgc2lnX2Fscm0oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmhuZGxfY2FsbGVkID0gVHJ1ZQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJTSUdBTFJNIGhhbmRsZXIgaW52b2tlZCIsIGFyZ3MpCisKKyAgICBkZWYgc2lnX3Z0YWxybShzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuaG5kbF9jYWxsZWQgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5obmRsX2NvdW50ID4gMzoKKyAgICAgICAgICAgICMgaXQgc2hvdWxkbid0IGJlIGhlcmUsIGJlY2F1c2UgaXQgc2hvdWxkIGhhdmUgYmVlbiBkaXNhYmxlZC4KKyAgICAgICAgICAgIHJhaXNlIHNpZ25hbC5JdGltZXJFcnJvcigic2V0aXRpbWVyIGRpZG4ndCBkaXNhYmxlIElUSU1FUl9WSVJUVUFMICIKKyAgICAgICAgICAgICAgICAidGltZXIuIikKKyAgICAgICAgZWxpZiBzZWxmLmhuZGxfY291bnQgPT0gMzoKKyAgICAgICAgICAgICMgZGlzYWJsZSBJVElNRVJfVklSVFVBTCwgdGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgY2FsbGVkIGFueW1vcmUKKyAgICAgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2lnbmFsLklUSU1FUl9WSVJUVUFMLCAwKQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoImxhc3QgU0lHVlRBTFJNIGhhbmRsZXIgY2FsbCIpCisKKyAgICAgICAgc2VsZi5obmRsX2NvdW50ICs9IDEKKworICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJTSUdWVEFMUk0gaGFuZGxlciBpbnZva2VkIiwgYXJncykKKworICAgIGRlZiBzaWdfcHJvZihzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuaG5kbF9jYWxsZWQgPSBUcnVlCisgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2lnbmFsLklUSU1FUl9QUk9GLCAwKQorCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIlNJR1BST0YgaGFuZGxlciBpbnZva2VkIiwgYXJncykKKworICAgIGRlZiB0ZXN0X2l0aW1lcl9leGMoc2VsZik6CisgICAgICAgICMgWFhYIEknbSBhc3N1bWluZyAtMSBpcyBhbiBpbnZhbGlkIGl0aW1lciwgYnV0IG1heWJlIHNvbWUgcGxhdGZvcm0KKyAgICAgICAgIyBkZWZpbmVzIGl0ID8KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2lnbmFsLkl0aW1lckVycm9yLCBzaWduYWwuc2V0aXRpbWVyLCAtMSwgMCkKKyAgICAgICAgIyBOZWdhdGl2ZSB0aW1lcyBhcmUgdHJlYXRlZCBhcyB6ZXJvIG9uIHNvbWUgcGxhdGZvcm1zLgorICAgICAgICBpZiAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2lnbmFsLkl0aW1lckVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnNldGl0aW1lciwgc2lnbmFsLklUSU1FUl9SRUFMLCAtMSkKKworICAgIGRlZiB0ZXN0X2l0aW1lcl9yZWFsKHNlbGYpOgorICAgICAgICBzZWxmLml0aW1lciA9IHNpZ25hbC5JVElNRVJfUkVBTAorICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNlbGYuaXRpbWVyLCAxLjApCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIlxuY2FsbCBwYXVzZSgpLi4uIikKKyAgICAgICAgc2lnbmFsLnBhdXNlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaG5kbF9jYWxsZWQsIFRydWUpCisKKyAgICAjIElzc3VlIDM4NjQuIFVua25vd24gaWYgdGhpcyBhZmZlY3RzIGVhcmxpZXIgdmVyc2lvbnMgb2YgZnJlZWJzZCBhbHNvLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluICgnZnJlZWJzZDYnLCAnbmV0YnNkNScpLAorICAgICAgICAnaXRpbWVyIG5vdCByZWxpYWJsZSAoZG9lcyBub3QgbWl4IHdlbGwgd2l0aCB0aHJlYWRpbmcpIG9uIHNvbWUgQlNEcy4nKQorICAgIGRlZiB0ZXN0X2l0aW1lcl92aXJ0dWFsKHNlbGYpOgorICAgICAgICBzZWxmLml0aW1lciA9IHNpZ25hbC5JVElNRVJfVklSVFVBTAorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdWVEFMUk0sIHNlbGYuc2lnX3Z0YWxybSkKKyAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzZWxmLml0aW1lciwgMC4zLCAwLjIpCisKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA8IDYwLjA6CisgICAgICAgICAgICAjIHVzZSB1cCBzb21lIHZpcnR1YWwgdGltZSBieSBkb2luZyByZWFsIHdvcmsKKyAgICAgICAgICAgIF8gPSBwb3coMTIzNDUsIDY3ODkwLCAxMDAwMDAxOSkKKyAgICAgICAgICAgIGlmIHNpZ25hbC5nZXRpdGltZXIoc2VsZi5pdGltZXIpID09ICgwLjAsIDAuMCk6CisgICAgICAgICAgICAgICAgYnJlYWsgIyBzaWdfdnRhbHJtIGhhbmRsZXIgc3RvcHBlZCB0aGlzIGl0aW1lcgorICAgICAgICBlbHNlOiAjIElzc3VlIDg0MjQKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWVvdXQ6IGxpa2VseSBjYXVzZTogbWFjaGluZSB0b28gc2xvdyBvciBsb2FkIHRvbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJoaWdoIikKKworICAgICAgICAjIHZpcnR1YWwgaXRpbWVyIHNob3VsZCBiZSAoMC4wLCAwLjApIG5vdworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRpdGltZXIoc2VsZi5pdGltZXIpLCAoMC4wLCAwLjApKQorICAgICAgICAjIGFuZCB0aGUgaGFuZGxlciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaG5kbF9jYWxsZWQsIFRydWUpCisKKyAgICAjIElzc3VlIDM4NjQuIFVua25vd24gaWYgdGhpcyBhZmZlY3RzIGVhcmxpZXIgdmVyc2lvbnMgb2YgZnJlZWJzZCBhbHNvLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtPT0nZnJlZWJzZDYnLAorICAgICAgICAnaXRpbWVyIG5vdCByZWxpYWJsZSAoZG9lcyBub3QgbWl4IHdlbGwgd2l0aCB0aHJlYWRpbmcpIG9uIGZyZWVic2Q2JykKKyAgICBkZWYgdGVzdF9pdGltZXJfcHJvZihzZWxmKToKKyAgICAgICAgc2VsZi5pdGltZXIgPSBzaWduYWwuSVRJTUVSX1BST0YKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHUFJPRiwgc2VsZi5zaWdfcHJvZikKKyAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzZWxmLml0aW1lciwgMC4yLCAwLjIpCisKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA8IDYwLjA6CisgICAgICAgICAgICAjIGRvIHNvbWUgd29yaworICAgICAgICAgICAgXyA9IHBvdygxMjM0NSwgNjc4OTAsIDEwMDAwMDE5KQorICAgICAgICAgICAgaWYgc2lnbmFsLmdldGl0aW1lcihzZWxmLml0aW1lcikgPT0gKDAuMCwgMC4wKToKKyAgICAgICAgICAgICAgICBicmVhayAjIHNpZ19wcm9mIGhhbmRsZXIgc3RvcHBlZCB0aGlzIGl0aW1lcgorICAgICAgICBlbHNlOiAjIElzc3VlIDg0MjQKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWVvdXQ6IGxpa2VseSBjYXVzZTogbWFjaGluZSB0b28gc2xvdyBvciBsb2FkIHRvbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJoaWdoIikKKworICAgICAgICAjIHByb2ZpbGluZyBpdGltZXIgc2hvdWxkIGJlICgwLjAsIDAuMCkgbm93CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldGl0aW1lcihzZWxmLml0aW1lciksICgwLjAsIDAuMCkpCisgICAgICAgICMgYW5kIHRoZSBoYW5kbGVyIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5obmRsX2NhbGxlZCwgVHJ1ZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmFzaWNTaWduYWxUZXN0cywgSW50ZXJQcm9jZXNzU2lnbmFsVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYWtldXBGRFRlc3RzLCBXYWtldXBTaWduYWxUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ2ludGVycnVwdFRlc3QsIEl0aW1lclRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3dzU2lnbmFsVGVzdHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiNWZjNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKQEAgLTAsMCArMSwzOTQgQEAKKyIiIlRlc3RzIGZvciAnc2l0ZScuCisKK1Rlc3RzIGFzc3VtZSB0aGUgaW5pdGlhbCBwYXRocyBpbiBzeXMucGF0aCBvbmNlIHRoZSBpbnRlcnByZXRlciBoYXMgYmVndW4KK2V4ZWN1dGluZyBoYXZlIG5vdCBiZWVuIHJlbW92ZWQuCisKKyIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgRW52aXJvbm1lbnRWYXJHdWFyZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfb3V0cHV0CitpbXBvcnQgX19idWlsdGluX18KK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQgZW5jb2RpbmdzCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5c2NvbmZpZworZnJvbSBjb3B5IGltcG9ydCBjb3B5CisKKyMgTmVlZCB0byBtYWtlIHN1cmUgdG8gbm90IGltcG9ydCAnc2l0ZScgaWYgc29tZW9uZSBzcGVjaWZpZWQgYGAtU2BgIGF0IHRoZQorIyBjb21tYW5kLWxpbmUuICBEZXRlY3QgdGhpcyBieSBqdXN0IG1ha2luZyBzdXJlICdzaXRlJyBoYXMgbm90IGJlZW4gaW1wb3J0ZWQKKyMgYWxyZWFkeS4KK2lmICJzaXRlIiBpbiBzeXMubW9kdWxlczoKKyAgICBpbXBvcnQgc2l0ZQorZWxzZToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiaW1wb3J0YXRpb24gb2Ygc2l0ZS5weSBzdXBwcmVzc2VkIikKKworaWYgc2l0ZS5FTkFCTEVfVVNFUl9TSVRFIGFuZCBub3Qgb3MucGF0aC5pc2RpcihzaXRlLlVTRVJfU0lURSk6CisgICAgIyBuZWVkIHRvIGFkZCB1c2VyIHNpdGUgZGlyZWN0b3J5IGZvciB0ZXN0cworICAgIG9zLm1ha2VkaXJzKHNpdGUuVVNFUl9TSVRFKQorICAgIHNpdGUuYWRkc2l0ZWRpcihzaXRlLlVTRVJfU0lURSkKKworY2xhc3MgSGVscGVyRnVuY3Rpb25zVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciBoZWxwZXIgZnVuY3Rpb25zLgorCisgICAgVGhlIHNldHRpbmcgb2YgdGhlIGVuY29kaW5nIChzZXQgdXNpbmcgc3lzLnNldGRlZmF1bHRlbmNvZGluZykgdXNlZCBieQorICAgIHRoZSBVbmljb2RlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB0ZXN0ZWQuCisKKyAgICAiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiU2F2ZSBhIGNvcHkgb2Ygc3lzLnBhdGgiIiIKKyAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIHNlbGYub2xkX2Jhc2UgPSBzaXRlLlVTRVJfQkFTRQorICAgICAgICBzZWxmLm9sZF9zaXRlID0gc2l0ZS5VU0VSX1NJVEUKKyAgICAgICAgc2VsZi5vbGRfcHJlZml4ZXMgPSBzaXRlLlBSRUZJWEVTCisgICAgICAgIHNlbGYub2xkX3ZhcnMgPSBjb3B5KHN5c2NvbmZpZy5fQ09ORklHX1ZBUlMpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICIiIlJlc3RvcmUgc3lzLnBhdGgiIiIKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoCisgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gc2VsZi5vbGRfYmFzZQorICAgICAgICBzaXRlLlVTRVJfU0lURSA9IHNlbGYub2xkX3NpdGUKKyAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IHNlbGYub2xkX3ByZWZpeGVzCisgICAgICAgIHN5c2NvbmZpZy5fQ09ORklHX1ZBUlMgPSBzZWxmLm9sZF92YXJzCisKKyAgICBkZWYgdGVzdF9tYWtlcGF0aChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1ha2VwYXRoKCkgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciBpdHMgZmlyc3QgcmV0dXJuIHZhbHVlCisgICAgICAgICMgYW5kIGEgY2FzZS1ub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIGFic29sdXRlIHBhdGggZm9yIGl0cworICAgICAgICAjIHNlY29uZCB2YWx1ZS4KKyAgICAgICAgcGF0aF9wYXJ0cyA9ICgiQmVnaW5uaW5nIiwgIkVuZCIpCisgICAgICAgIG9yaWdpbmFsX2RpciA9IG9zLnBhdGguam9pbigqcGF0aF9wYXJ0cykKKyAgICAgICAgYWJzX2Rpciwgbm9ybV9kaXIgPSBzaXRlLm1ha2VwYXRoKCpwYXRoX3BhcnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aChvcmlnaW5hbF9kaXIpLCBhYnNfZGlyKQorICAgICAgICBpZiBvcmlnaW5hbF9kaXIgPT0gb3MucGF0aC5ub3JtY2FzZShvcmlnaW5hbF9kaXIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnNfZGlyLCBub3JtX2RpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5ub3JtY2FzZShhYnNfZGlyKSwgbm9ybV9kaXIpCisKKyAgICBkZWYgdGVzdF9pbml0X3BhdGhpbmZvKHNlbGYpOgorICAgICAgICBkaXJfc2V0ID0gc2l0ZS5faW5pdF9wYXRoaW5mbygpCisgICAgICAgIGZvciBlbnRyeSBpbiBbc2l0ZS5tYWtlcGF0aChwYXRoKVsxXSBmb3IgcGF0aCBpbiBzeXMucGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCBhbmQgb3MucGF0aC5pc2RpcihwYXRoKV06CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVudHJ5LCBkaXJfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgZnJvbSBzeXMucGF0aCBub3QgZm91bmQgaW4gc2V0IHJldHVybmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5IF9pbml0X3BhdGhpbmZvKCk6ICVzIiAlIChlbnRyeSwgZGlyX3NldCkpCisKKyAgICBkZWYgcHRoX2ZpbGVfdGVzdHMoc2VsZiwgcHRoX2ZpbGUpOgorICAgICAgICAiIiJDb250YWluIGNvbW1vbiBjb2RlIGZvciB0ZXN0aW5nIHJlc3VsdHMgb2YgcmVhZGluZyBhIC5wdGggZmlsZSIiIgorICAgICAgICBzZWxmLmFzc2VydEluKHB0aF9maWxlLmltcG9ydGVkLCBzeXMubW9kdWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAiJXMgbm90IGluIHN5cy5tb2R1bGVzIiAlIHB0aF9maWxlLmltcG9ydGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKHNpdGUubWFrZXBhdGgocHRoX2ZpbGUuZ29vZF9kaXJfcGF0aClbMF0sIHN5cy5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHB0aF9maWxlLmJhZF9kaXJfcGF0aCkpCisKKyAgICBkZWYgdGVzdF9hZGRwYWNrYWdlKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhZGRwYWNrYWdlKCkgaW1wb3J0cyBpZiB0aGUgbGluZSBzdGFydHMgd2l0aCAnaW1wb3J0JywKKyAgICAgICAgIyBhZGRzIGRpcmVjdG9yaWVzIHRvIHN5cy5wYXRoIGZvciBhbnkgbGluZSBpbiB0aGUgZmlsZSB0aGF0IGlzIG5vdCBhCisgICAgICAgICMgY29tbWVudCBvciBpbXBvcnQgdGhhdCBpcyBhIHZhbGlkIGRpcmVjdG9yeSBuYW1lIGZvciB3aGVyZSB0aGUgLnB0aAorICAgICAgICAjIGZpbGUgcmVzaWRlczsgaW52YWxpZCBkaXJlY3RvcmllcyBhcmUgbm90IGFkZGVkCisgICAgICAgIHB0aF9maWxlID0gUHRoRmlsZSgpCisgICAgICAgIHB0aF9maWxlLmNsZWFudXAocHJlcD1UcnVlKSAgIyB0byBtYWtlIHN1cmUgdGhhdCBub3RoaW5nIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJlLWV4aXN0aW5nIHRoYXQgc2hvdWxkbid0IGJlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHB0aF9maWxlLmNyZWF0ZSgpCisgICAgICAgICAgICBzaXRlLmFkZHBhY2thZ2UocHRoX2ZpbGUuYmFzZV9kaXIsIHB0aF9maWxlLmZpbGVuYW1lLCBzZXQoKSkKKyAgICAgICAgICAgIHNlbGYucHRoX2ZpbGVfdGVzdHMocHRoX2ZpbGUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBwdGhfZmlsZS5jbGVhbnVwKCkKKworICAgIGRlZiBtYWtlX3B0aChzZWxmLCBjb250ZW50cywgcHRoX2Rpcj0nLicsIHB0aF9uYW1lPVRFU1RGTik6CisgICAgICAgICMgQ3JlYXRlIGEgLnB0aCBmaWxlIGFuZCByZXR1cm4gaXRzIChhYnNwYXRoLCBiYXNlbmFtZSkuCisgICAgICAgIHB0aF9kaXIgPSBvcy5wYXRoLmFic3BhdGgocHRoX2RpcikKKyAgICAgICAgcHRoX2Jhc2VuYW1lID0gcHRoX25hbWUgKyAnLnB0aCcKKyAgICAgICAgcHRoX2ZuID0gb3MucGF0aC5qb2luKHB0aF9kaXIsIHB0aF9iYXNlbmFtZSkKKyAgICAgICAgcHRoX2ZpbGUgPSBvcGVuKHB0aF9mbiwgJ3cnKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBvcy5yZW1vdmUocHRoX2ZuKSkKKyAgICAgICAgcHRoX2ZpbGUud3JpdGUoY29udGVudHMpCisgICAgICAgIHB0aF9maWxlLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHB0aF9kaXIsIHB0aF9iYXNlbmFtZQorCisgICAgZGVmIHRlc3RfYWRkcGFja2FnZV9pbXBvcnRfYmFkX3N5bnRheChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMDY0MgorICAgICAgICBwdGhfZGlyLCBwdGhfZm4gPSBzZWxmLm1ha2VfcHRoKCJpbXBvcnQgYmFkKXN5bnRheFxuIikKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIGVycl9vdXQ6CisgICAgICAgICAgICBzaXRlLmFkZHBhY2thZ2UocHRoX2RpciwgcHRoX2ZuLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgImxpbmUgMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICByZS5lc2NhcGUob3MucGF0aC5qb2luKHB0aF9kaXIsIHB0aF9mbikpKQorICAgICAgICAjIFhYWDogdGhlIHByZXZpb3VzIHR3byBzaG91bGQgYmUgaW5kZXBlbmRlbnQgY2hlY2tzIHNvIHRoYXQgdGhlCisgICAgICAgICMgb3JkZXIgZG9lc24ndCBtYXR0ZXIuICBUaGUgbmV4dCB0aHJlZSBjb3VsZCBiZSBhIHNpbmdsZSBjaGVjaworICAgICAgICAjIGJ1dCBteSByZWdleCBmb28gaXNuJ3QgZ29vZCBlbm91Z2ggdG8gd3JpdGUgaXQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdUcmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCByJ2ltcG9ydCBiYWRcKXN5bnRheCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdTeW50YXhFcnJvcicpCisKKyAgICBkZWYgdGVzdF9hZGRwYWNrYWdlX2ltcG9ydF9iYWRfZXhlYyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMDY0MgorICAgICAgICBwdGhfZGlyLCBwdGhfZm4gPSBzZWxmLm1ha2VfcHRoKCJyYW5kb21wYXRoXG5pbXBvcnQgbm9zdWNobW9kdWxlXG4iKQorICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXJyX291dDoKKyAgICAgICAgICAgIHNpdGUuYWRkcGFja2FnZShwdGhfZGlyLCBwdGhfZm4sIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAibGluZSAyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIHJlLmVzY2FwZShvcy5wYXRoLmpvaW4ocHRoX2RpciwgcHRoX2ZuKSkpCisgICAgICAgICMgWFhYOiBkaXR0byBwcmV2aW91cyBYWFggY29tbWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdJbXBvcnRFcnJvcicpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBkb2VzIG5vdCByYWlzZSBhbiAiCisgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGZvciBmaWxlIHBhdGhzIGNvbnRhaW5pbmcgbnVsbCBjaGFyYWN0ZXJzIikKKyAgICBkZWYgdGVzdF9hZGRwYWNrYWdlX2ltcG9ydF9iYWRfcHRoX2ZpbGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgNTI1OAorICAgICAgICBwdGhfZGlyLCBwdGhfZm4gPSBzZWxmLm1ha2VfcHRoKCJhYmNceDAwZGVmXG4iKQorICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXJyX291dDoKKyAgICAgICAgICAgIHNpdGUuYWRkcGFja2FnZShwdGhfZGlyLCBwdGhfZm4sIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAibGluZSAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIHJlLmVzY2FwZShvcy5wYXRoLmpvaW4ocHRoX2RpciwgcHRoX2ZuKSkpCisgICAgICAgICMgWFhYOiBkaXR0byBwcmV2aW91cyBYWFggY29tbWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdUeXBlRXJyb3InKQorCisgICAgZGVmIHRlc3RfYWRkc2l0ZWRpcihzZWxmKToKKyAgICAgICAgIyBTYW1lIHRlc3RzIGZvciB0ZXN0X2FkZHBhY2thZ2Ugc2luY2UgYWRkc2l0ZWRpcigpIGVzc2VudGlhbGx5IGp1c3QKKyAgICAgICAgIyBjYWxscyBhZGRwYWNrYWdlKCkgZm9yIGV2ZXJ5IC5wdGggZmlsZSBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIHB0aF9maWxlID0gUHRoRmlsZSgpCisgICAgICAgIHB0aF9maWxlLmNsZWFudXAocHJlcD1UcnVlKSAjIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgaXMgcHJlLWV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoYXQgaXMgdGVzdGVkIGZvcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwdGhfZmlsZS5jcmVhdGUoKQorICAgICAgICAgICAgc2l0ZS5hZGRzaXRlZGlyKHB0aF9maWxlLmJhc2VfZGlyLCBzZXQoKSkKKyAgICAgICAgICAgIHNlbGYucHRoX2ZpbGVfdGVzdHMocHRoX2ZpbGUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBwdGhfZmlsZS5jbGVhbnVwKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHNpdGUuRU5BQkxFX1VTRVJfU0lURSwgInJlcXVpcmVzIGFjY2VzcyB0byBQRVAgMzcwICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZXItc2l0ZSAoc2l0ZS5FTkFCTEVfVVNFUl9TSVRFKSIpCisgICAgZGVmIHRlc3Rfc19vcHRpb24oc2VsZik6CisgICAgICAgIHVzZXJzaXRlID0gc2l0ZS5VU0VSX1NJVEUKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1c2Vyc2l0ZSwgc3lzLnBhdGgpCisKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KCVyIGluIHN5cy5wYXRoKScgJSB1c2Vyc2l0ZV0sCisgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxLCAiJXIgaXMgbm90IGluIHN5cy5wYXRoIChzeXMuZXhpdCByZXR1cm5lZCAlcikiCisgICAgICAgICAgICAgICAgJSAodXNlcnNpdGUsIHJjKSkKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICctcycsICctYycsCisgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLmV4aXQoJXIgaW4gc3lzLnBhdGgpJyAlIHVzZXJzaXRlXSwKKyAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJQWVRIT05OT1VTRVJTSVRFIl0gPSAiMSIKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KCVyIGluIHN5cy5wYXRoKScgJSB1c2Vyc2l0ZV0sCisgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsiUFlUSE9OVVNFUkJBU0UiXSA9ICIvdG1wIgorICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAnaW1wb3J0IHN5cywgc2l0ZTsgc3lzLmV4aXQoc2l0ZS5VU0VSX0JBU0Uuc3RhcnRzd2l0aCgiL3RtcCIpKSddLAorICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworICAgIGRlZiB0ZXN0X2dldHVzZXJiYXNlKHNlbGYpOgorICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IE5vbmUKKyAgICAgICAgdXNlcl9iYXNlID0gc2l0ZS5nZXR1c2VyYmFzZSgpCisKKyAgICAgICAgIyB0aGUgY2FsbCBzZXRzIHNpdGUuVVNFUl9CQVNFCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l0ZS5VU0VSX0JBU0UsIHVzZXJfYmFzZSkKKworICAgICAgICAjIGxldCdzIHNldCBQWVRIT05VU0VSQkFTRSBhbmQgc2VlIGlmIGl0IHVzZXMgaXQKKyAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBOb25lCisgICAgICAgIGltcG9ydCBzeXNjb25maWcKKyAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSUyA9IE5vbmUKKworICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnZpcm9uOgorICAgICAgICAgICAgZW52aXJvblsnUFlUSE9OVVNFUkJBU0UnXSA9ICd4b3hvJworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpdGUuZ2V0dXNlcmJhc2UoKS5zdGFydHN3aXRoKCd4b3hvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l0ZS5nZXR1c2VyYmFzZSgpKQorCisgICAgZGVmIHRlc3RfZ2V0dXNlcnNpdGVwYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc2l0ZS5VU0VSX1NJVEUgPSBOb25lCisgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gTm9uZQorICAgICAgICB1c2VyX3NpdGUgPSBzaXRlLmdldHVzZXJzaXRlcGFja2FnZXMoKQorCisgICAgICAgICMgdGhlIGNhbGwgc2V0cyBVU0VSX0JBU0UgKmFuZCogVVNFUl9TSVRFCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l0ZS5VU0VSX1NJVEUsIHVzZXJfc2l0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfc2l0ZS5zdGFydHN3aXRoKHNpdGUuVVNFUl9CQVNFKSwgdXNlcl9zaXRlKQorCisgICAgZGVmIHRlc3RfZ2V0c2l0ZXBhY2thZ2VzKHNlbGYpOgorICAgICAgICBzaXRlLlBSRUZJWEVTID0gWyd4b3hvJ10KKyAgICAgICAgZGlycyA9IHNpdGUuZ2V0c2l0ZXBhY2thZ2VzKCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMSkKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdMaWInLCAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMF0sIHdhbnRlZCkKKyAgICAgICAgZWxpZiAoc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iIGFuZAorICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJQWVRIT05GUkFNRVdPUksiKSk6CisgICAgICAgICAgICAjIE9TIFggZnJhbWV3b3JrIGJ1aWxkcworICAgICAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IFsnUHl0aG9uLmZyYW1ld29yayddCisgICAgICAgICAgICBkaXJzID0gc2l0ZS5nZXRzaXRlcGFja2FnZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDMpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJy9MaWJyYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlBZVEhPTkZSQU1FV09SSyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMl0sIHdhbnRlZCkKKyAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICAgICAgIyBPUyBYIG5vbi1mcmFtd2V3b3JrIGJ1aWxkcywgTGludXgsIEZyZWVCU0QsIGV0YworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3B5dGhvbicgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdGUtcGFja2FnZXMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3NpdGUtcHl0aG9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1sxXSwgd2FudGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBvdGhlciBwbGF0Zm9ybXMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCAneG94bycpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3NpdGUtcGFja2FnZXMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzFdLCB3YW50ZWQpCisKK2NsYXNzIFB0aEZpbGUob2JqZWN0KToKKyAgICAiIiJIZWxwZXIgY2xhc3MgZm9yIGhhbmRsaW5nIHRlc3Rpbmcgb2YgLnB0aCBmaWxlcyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lX2Jhc2U9VEVTVEZOLCBpbXBvcnRlZD0idGltZSIsCisgICAgICAgICAgICAgICAgICAgIGdvb2RfZGlybmFtZT0iX190ZXN0ZGlyX18iLCBiYWRfZGlybmFtZT0iX19iYWQiKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBpbnN0YW5jZSB2YXJpYWJsZXMiIiIKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lX2Jhc2UgKyAiLnB0aCIKKyAgICAgICAgc2VsZi5iYXNlX2RpciA9IG9zLnBhdGguYWJzcGF0aCgnJykKKyAgICAgICAgc2VsZi5maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5iYXNlX2Rpciwgc2VsZi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5pbXBvcnRlZCA9IGltcG9ydGVkCisgICAgICAgIHNlbGYuZ29vZF9kaXJuYW1lID0gZ29vZF9kaXJuYW1lCisgICAgICAgIHNlbGYuYmFkX2Rpcm5hbWUgPSBiYWRfZGlybmFtZQorICAgICAgICBzZWxmLmdvb2RfZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5iYXNlX2Rpciwgc2VsZi5nb29kX2Rpcm5hbWUpCisgICAgICAgIHNlbGYuYmFkX2Rpcl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYmFzZV9kaXIsIHNlbGYuYmFkX2Rpcm5hbWUpCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgYSAucHRoIGZpbGUgd2l0aCBhIGNvbW1lbnQsIGJsYW5rIGxpbmVzLCBhbiBgYGltcG9ydAorICAgICAgICA8c2VsZi5pbXBvcnRlZD5gYCwgYSBsaW5lIHdpdGggc2VsZi5nb29kX2Rpcm5hbWUsIGFuZCBhIGxpbmUgd2l0aAorICAgICAgICBzZWxmLmJhZF9kaXJuYW1lLgorCisgICAgICAgIENyZWF0aW9uIG9mIHRoZSBkaXJlY3RvcnkgZm9yIHNlbGYuZ29vZF9kaXJfcGF0aCAoYmFzZWQgb2ZmIG9mCisgICAgICAgIHNlbGYuZ29vZF9kaXJuYW1lKSBpcyBhbHNvIHBlcmZvcm1lZC4KKworICAgICAgICBNYWtlIHN1cmUgdG8gY2FsbCBzZWxmLmNsZWFudXAoKSB0byB1bmRvIGFueXRoaW5nIGRvbmUgYnkgdGhpcyBtZXRob2QuCisKKyAgICAgICAgIiIiCisgICAgICAgIEZJTEUgPSBvcGVuKHNlbGYuZmlsZV9wYXRoLCAndycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50Pj5GSUxFLCAiI2ltcG9ydCBAYmFkIG1vZHVsZSBuYW1lIgorICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICJcbiIKKyAgICAgICAgICAgIHByaW50Pj5GSUxFLCAiaW1wb3J0ICVzIiAlIHNlbGYuaW1wb3J0ZWQKKyAgICAgICAgICAgIHByaW50Pj5GSUxFLCBzZWxmLmdvb2RfZGlybmFtZQorICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIHNlbGYuYmFkX2Rpcm5hbWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIEZJTEUuY2xvc2UoKQorICAgICAgICBvcy5ta2RpcihzZWxmLmdvb2RfZGlyX3BhdGgpCisKKyAgICBkZWYgY2xlYW51cChzZWxmLCBwcmVwPUZhbHNlKToKKyAgICAgICAgIiIiTWFrZSBzdXJlIHRoYXQgdGhlIC5wdGggZmlsZSBpcyBkZWxldGVkLCBzZWxmLmltcG9ydGVkIGlzIG5vdCBpbgorICAgICAgICBzeXMubW9kdWxlcywgYW5kIHRoYXQgYm90aCBzZWxmLmdvb2RfZGlybmFtZSBhbmQgc2VsZi5iYWRfZGlybmFtZSBhcmUKKyAgICAgICAgbm90IGV4aXN0aW5nIGRpcmVjdG9yaWVzLiIiIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmZpbGVfcGF0aCk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlX3BhdGgpCisgICAgICAgIGlmIHByZXA6CisgICAgICAgICAgICBzZWxmLmltcG9ydGVkX21vZHVsZSA9IHN5cy5tb2R1bGVzLmdldChzZWxmLmltcG9ydGVkKQorICAgICAgICAgICAgaWYgc2VsZi5pbXBvcnRlZF9tb2R1bGU6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NlbGYuaW1wb3J0ZWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmltcG9ydGVkX21vZHVsZToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1tzZWxmLmltcG9ydGVkXSA9IHNlbGYuaW1wb3J0ZWRfbW9kdWxlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZ29vZF9kaXJfcGF0aCk6CisgICAgICAgICAgICBvcy5ybWRpcihzZWxmLmdvb2RfZGlyX3BhdGgpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYmFkX2Rpcl9wYXRoKToKKyAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYuYmFkX2Rpcl9wYXRoKQorCitjbGFzcyBJbXBvcnRTaWRlRWZmZWN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3Qgc2lkZS1lZmZlY3RzIGZyb20gaW1wb3J0aW5nICdzaXRlJy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiTWFrZSBhIGNvcHkgb2Ygc3lzLnBhdGgiIiIKKyAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICIiIlJlc3RvcmUgc3lzLnBhdGgiIiIKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoCisKKyAgICBkZWYgdGVzdF9hYnNfX2ZpbGVfXyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYWxsIGltcG9ydGVkIG1vZHVsZXMgaGF2ZSB0aGVpciBfX2ZpbGVfXyBhdHRyaWJ1dGUKKyAgICAgICAgIyBhcyBhbiBhYnNvbHV0ZSBwYXRoLgorICAgICAgICAjIEhhbmRsZWQgYnkgYWJzX19maWxlX18oKQorICAgICAgICBzaXRlLmFic19fZmlsZV9fKCkKKyAgICAgICAgZm9yIG1vZHVsZSBpbiAoc3lzLCBvcywgX19idWlsdGluX18pOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzYWJzKG1vZHVsZS5fX2ZpbGVfXyksIHJlcHIobW9kdWxlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIFdlIGNvdWxkIHRyeSBldmVyeXRoaW5nIGluIHN5cy5tb2R1bGVzOyBob3dldmVyLCB3aGVuIHJlZ3J0ZXN0LnB5CisgICAgICAgICMgcnVucyBzb21ldGhpbmcgbGlrZSB0ZXN0X2Zyb3plbiBiZWZvcmUgdGVzdF9zaXRlLCB0aGVuIHdlIHdpbGwKKyAgICAgICAgIyBiZSB0ZXN0aW5nIHRoaW5ncyBsb2FkZWQgKmFmdGVyKiB0ZXN0X3NpdGUgZGlkIHBhdGggbm9ybWFsaXphdGlvbgorCisgICAgZGVmIHRlc3Rfbm9fZHVwbGljYXRlX3BhdGhzKHNlbGYpOgorICAgICAgICAjIE5vIGR1cGxpY2F0ZSBwYXRocyBzaG91bGQgZXhpc3QgaW4gc3lzLnBhdGgKKyAgICAgICAgIyBIYW5kbGVkIGJ5IHJlbW92ZWR1cHBhdGhzKCkKKyAgICAgICAgc2l0ZS5yZW1vdmVkdXBwYXRocygpCisgICAgICAgIHNlZW5fcGF0aHMgPSBzZXQoKQorICAgICAgICBmb3IgcGF0aCBpbiBzeXMucGF0aDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocGF0aCwgc2Vlbl9wYXRocykKKyAgICAgICAgICAgIHNlZW5fcGF0aHMuYWRkKHBhdGgpCisKKyAgICBkZWYgdGVzdF9hZGRfYnVpbGRfZGlyKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgYnVpbGQgZGlyZWN0b3J5J3MgTW9kdWxlcyBkaXJlY3RvcnkgaXMgdXNlZCB3aGVuIGl0CisgICAgICAgICMgc2hvdWxkIGJlLgorICAgICAgICAjIFhYWDogaW1wbGVtZW50CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3NldHRpbmdfcXVpdChzZWxmKToKKyAgICAgICAgIyAncXVpdCcgYW5kICdleGl0JyBzaG91bGQgYmUgaW5qZWN0ZWQgaW50byBfX2J1aWx0aW5fXworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfX2J1aWx0aW5fXywgInF1aXQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX19idWlsdGluX18sICJleGl0IikpCisKKyAgICBkZWYgdGVzdF9zZXR0aW5nX2NvcHlyaWdodChzZWxmKToKKyAgICAgICAgIyAnY29weXJpZ2h0JyBhbmQgJ2NyZWRpdHMnIHNob3VsZCBiZSBpbiBfX2J1aWx0aW5fXworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfX2J1aWx0aW5fXywgImNvcHlyaWdodCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfX2J1aWx0aW5fXywgImNyZWRpdHMiKSkKKworICAgIGRlZiB0ZXN0X3NldHRpbmdfaGVscChzZWxmKToKKyAgICAgICAgIyAnaGVscCcgc2hvdWxkIGJlIHNldCBpbiBfX2J1aWx0aW5fXworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfX2J1aWx0aW5fXywgImhlbHAiKSkKKworICAgIGRlZiB0ZXN0X2FsaWFzaW5nX21iY3Moc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgaWYgbG9jYWxlLmdldGRlZmF1bHRsb2NhbGUoKVsxXS5zdGFydHN3aXRoKCdjcCcpOgorICAgICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPT0gIm1iY3MiOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImRpZCBub3QgYWxpYXMgbWJjcyIpCisKKyAgICBkZWYgdGVzdF9zZXRkZWZhdWx0ZW5jb2RpbmdfcmVtb3ZlZChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgc3lzLnNldGRlZmF1bHRlbmNvZGluZyBpcyBnb25lCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihzeXMsICJzZXRkZWZhdWx0ZW5jb2RpbmciKSkKKworICAgIGRlZiB0ZXN0X3NpdGVjdXN0b21pemVfZXhlY3V0ZWQoc2VsZik6CisgICAgICAgICMgSWYgc2l0ZWN1c3RvbWl6ZSBpcyBhdmFpbGFibGUsIGl0IHNob3VsZCBoYXZlIGJlZW4gaW1wb3J0ZWQuCisgICAgICAgIGlmICJzaXRlY3VzdG9taXplIiBub3QgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IHNpdGVjdXN0b21pemUKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2l0ZWN1c3RvbWl6ZSBub3QgaW1wb3J0ZWQgYXV0b21hdGljYWxseSIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoSGVscGVyRnVuY3Rpb25zVGVzdHMsIEltcG9ydFNpZGVFZmZlY3RUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zbGljZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA0ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKQEAgLTAsMCArMSwxMzQgQEAKKyMgdGVzdHMgZm9yIHNsaWNlIG9iamVjdHM7IGluIHBhcnRpY3VsYXIgdGhlIGluZGljZXMgbWV0aG9kLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIGNQaWNrbGUgaW1wb3J0IGxvYWRzLCBkdW1wcworCitpbXBvcnQgc3lzCisKK2NsYXNzIFNsaWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzbGljZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzbGljZSwgMSwgMiwgMywgNCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzbGljZSgxLCAyLCAzKSksICJzbGljZSgxLCAyLCAzKSIpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSBjbGVhcmluZyBvZiBTRiBidWcgIzgwMDc5NgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIHNsaWNlKDUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNsaWNlKDUpLl9faGFzaF9fKQorCisgICAgZGVmIHRlc3RfY21wKHNlbGYpOgorICAgICAgICBzMSA9IHNsaWNlKDEsIDIsIDMpCisgICAgICAgIHMyID0gc2xpY2UoMSwgMiwgMykKKyAgICAgICAgczMgPSBzbGljZSgxLCAyLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzMSwgczMpCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkQ21wKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisKKyAgICAgICAgczEgPSBzbGljZShCYWRDbXAoKSkKKyAgICAgICAgczIgPSBzbGljZShCYWRDbXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBjbXAsIHMxLCBzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczEpCisKKyAgICAgICAgczEgPSBzbGljZSgxLCBCYWRDbXAoKSkKKyAgICAgICAgczIgPSBzbGljZSgxLCBCYWRDbXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgY21wLCBzMSwgczIpCisKKyAgICAgICAgczEgPSBzbGljZSgxLCAyLCBCYWRDbXAoKSkKKyAgICAgICAgczIgPSBzbGljZSgxLCAyLCBCYWRDbXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgY21wLCBzMSwgczIpCisKKyAgICBkZWYgdGVzdF9tZW1iZXJzKHNlbGYpOgorICAgICAgICBzID0gc2xpY2UoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0YXJ0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RvcCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0ZXAsIE5vbmUpCisKKyAgICAgICAgcyA9IHNsaWNlKDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdGFydCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0b3AsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdGVwLCBOb25lKQorCisgICAgICAgIHMgPSBzbGljZSgxLCAyLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RhcnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdG9wLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RlcCwgMykKKworICAgICAgICBjbGFzcyBBbnlDbGFzczoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBvYmogPSBBbnlDbGFzcygpCisgICAgICAgIHMgPSBzbGljZShvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0b3AgaXMgb2JqKQorCisgICAgZGVmIHRlc3RfaW5kaWNlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lICAgICAgICAgICApLmluZGljZXMoMTApLCAoMCwgMTAsICAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAgTm9uZSwgIDIpLmluZGljZXMoMTApLCAoMCwgMTAsICAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgxLCAgICAgTm9uZSwgIDIpLmluZGljZXMoMTApLCAoMSwgMTAsICAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAgTm9uZSwgLTEpLmluZGljZXMoMTApLCAoOSwgLTEsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAgTm9uZSwgLTIpLmluZGljZXMoMTApLCAoOSwgLTEsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgzLCAgICAgTm9uZSwgLTIpLmluZGljZXMoMTApLCAoMywgLTEsIC0yKSkKKyAgICAgICAgIyBpc3N1ZSAzMDA0IHRlc3RzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgLTkpLmluZGljZXMoMTApLCAoMCwgMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgLTEwKS5pbmRpY2VzKDEwKSwgKDAsIDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsIC0xMSkuaW5kaWNlcygxMCksICgwLCAwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAtMTAsIC0xKS5pbmRpY2VzKDEwKSwgKDksIDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAtMTEsIC0xKS5pbmRpY2VzKDEwKSwgKDksIC0xLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgLTEyLCAtMSkuaW5kaWNlcygxMCksICg5LCAtMSwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsIDkpLmluZGljZXMoMTApLCAoMCwgOSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgMTApLmluZGljZXMoMTApLCAoMCwgMTAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsIDExKS5pbmRpY2VzKDEwKSwgKDAsIDEwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCA4LCAtMSkuaW5kaWNlcygxMCksICg5LCA4LCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgOSwgLTEpLmluZGljZXMoMTApLCAoOSwgOSwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsIDEwLCAtMSkuaW5kaWNlcygxMCksICg5LCA5LCAtMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNsaWNlKC0xMDAsICAxMDAgICAgICkuaW5kaWNlcygxMCksCisgICAgICAgICAgICBzbGljZShOb25lKS5pbmRpY2VzKDEwKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzbGljZSgxMDAsICAtMTAwLCAgLTEpLmluZGljZXMoMTApLAorICAgICAgICAgICAgc2xpY2UoTm9uZSwgTm9uZSwgLTEpLmluZGljZXMoMTApCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgtMTAwTCwgMTAwTCwgMkwpLmluZGljZXMoMTApLCAoMCwgMTAsICAyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEwKVs6OnN5cy5tYXhpbnQgLSAxXSwgWzBdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNsaWNlKE5vbmUpLmluZGljZXMsIDFMPDwxMDApCisKKyAgICBkZWYgdGVzdF9zZXRzbGljZV93aXRob3V0X2dldHNsaWNlKHNlbGYpOgorICAgICAgICB0bXAgPSBbXQorICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19zZXRzbGljZV9fKHNlbGYsIGksIGosIGspOgorICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoKGksIGosIGspKQorCisgICAgICAgIHggPSBYKCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgeFsxOjJdID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bXAsIFsoMSwgMiwgNDIpXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgcyA9IHNsaWNlKDEwLCAyMCwgMykKKyAgICAgICAgZm9yIHByb3RvY29sIGluICgwLDEsMik6CisgICAgICAgICAgICB0ID0gbG9hZHMoZHVtcHMocywgcHJvdG9jb2wpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCB0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGljZXMoMTUpLCB0LmluZGljZXMoMTUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQodCkpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFNsaWNlVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4MDZjOQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKQEAgLTAsMCArMSw1MTcgQEAKK2ltcG9ydCBhc3luY29yZQoraW1wb3J0IGVtYWlsLnV0aWxzCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc210cGQKK2ltcG9ydCBzbXRwbGliCitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2VsZWN0CisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKwordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK0hPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAorCitkZWYgc2VydmVyKGV2dCwgYnVmLCBzZXJ2KToKKyAgICBzZXJ2Lmxpc3Rlbig1KQorICAgIGV2dC5zZXQoKQorICAgIHRyeToKKyAgICAgICAgY29ubiwgYWRkciA9IHNlcnYuYWNjZXB0KCkKKyAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBuID0gNTAwCisgICAgICAgIHdoaWxlIGJ1ZiBhbmQgbiA+IDA6CisgICAgICAgICAgICByLCB3LCBlID0gc2VsZWN0LnNlbGVjdChbXSwgW2Nvbm5dLCBbXSkKKyAgICAgICAgICAgIGlmIHc6CisgICAgICAgICAgICAgICAgc2VudCA9IGNvbm4uc2VuZChidWYpCisgICAgICAgICAgICAgICAgYnVmID0gYnVmW3NlbnQ6XQorCisgICAgICAgICAgICBuIC09IDEKKworICAgICAgICBjb25uLmNsb3NlKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBzZXJ2LmNsb3NlKCkKKyAgICAgICAgZXZ0LnNldCgpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBHZW5lcmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgxNSkKKyAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCisgICAgICAgIHNlcnZhcmdzID0gKHNlbGYuZXZ0LCAiMjIwIEhvbGEgbXVuZG9cbiIsIHNlbGYuc29jaykKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9c2VydmFyZ3MpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIHNlbGYuZXZ0LmNsZWFyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisKKyAgICBkZWYgdGVzdEJhc2ljMShzZWxmKToKKyAgICAgICAgIyBjb25uZWN0cworICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc210cC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdEJhc2ljMihzZWxmKToKKyAgICAgICAgIyBjb25uZWN0cywgaW5jbHVkZSBwb3J0IGluIGhvc3QgbmFtZQorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKCIlczolcyIgJSAoSE9TVCwgc2VsZi5wb3J0KSkKKyAgICAgICAgc210cC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdExvY2FsSG9zdE5hbWUoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBzdXBwbGllZCBsb2NhbF9ob3N0bmFtZSBpcyB1c2VkCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0idGVzdGhvc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAubG9jYWxfaG9zdG5hbWUsICJ0ZXN0aG9zdCIpCisgICAgICAgIHNtdHAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RUaW1lb3V0RGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyAgICAgICAgc210cC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXROb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgdGltZW91dD1Ob25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzbXRwLnNvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNtdHAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RUaW1lb3V0VmFsdWUoc2VsZik6CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCB0aW1lb3V0PTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAuc29jay5nZXR0aW1lb3V0KCksIDMwKQorICAgICAgICBzbXRwLmNsb3NlKCkKKworCisjIFRlc3Qgc2VydmVyIHRocmVhZCB1c2luZyB0aGUgc3BlY2lmaWVkIFNNVFAgc2VydmVyIGNsYXNzCitkZWYgZGVidWdnaW5nX3NlcnZlcihzZXJ2LCBzZXJ2X2V2dCwgY2xpZW50X2V2dCk6CisgICAgc2Vydl9ldnQuc2V0KCkKKworICAgIHRyeToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxlY3QsICdwb2xsJyk6CisgICAgICAgICAgICBwb2xsX2Z1biA9IGFzeW5jb3JlLnBvbGwyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwb2xsX2Z1biA9IGFzeW5jb3JlLnBvbGwKKworICAgICAgICBuID0gMTAwMAorICAgICAgICB3aGlsZSBhc3luY29yZS5zb2NrZXRfbWFwIGFuZCBuID4gMDoKKyAgICAgICAgICAgIHBvbGxfZnVuKDAuMDEsIGFzeW5jb3JlLnNvY2tldF9tYXApCisKKyAgICAgICAgICAgICMgd2hlbiB0aGUgY2xpZW50IGNvbnZlcnNhdGlvbiBpcyBmaW5pc2hlZCwgaXQgd2lsbAorICAgICAgICAgICAgIyBzZXQgY2xpZW50X2V2dCwgYW5kIGl0J3MgdGhlbiBvayB0byBraWxsIHRoZSBzZXJ2ZXIKKyAgICAgICAgICAgIGlmIGNsaWVudF9ldnQuaXNfc2V0KCk6CisgICAgICAgICAgICAgICAgc2Vydi5jbG9zZSgpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbiAtPSAxCisKKyAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBub3QgY2xpZW50X2V2dC5pc19zZXQoKToKKyAgICAgICAgICAgICMgYWxsb3cgc29tZSB0aW1lIGZvciB0aGUgY2xpZW50IHRvIHJlYWQgdGhlIHJlc3VsdAorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgICAgICBzZXJ2LmNsb3NlKCkKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKKyAgICAgICAgc2Vydl9ldnQuc2V0KCkKKworTVNHX0JFR0lOID0gJy0tLS0tLS0tLS0gTUVTU0FHRSBGT0xMT1dTIC0tLS0tLS0tLS1cbicKK01TR19FTkQgPSAnLS0tLS0tLS0tLS0tIEVORCBNRVNTQUdFIC0tLS0tLS0tLS0tLVxuJworCisjIE5PVEU6IFNvbWUgU01UUCBvYmplY3RzIGluIHRoZSB0ZXN0cyBiZWxvdyBhcmUgY3JlYXRlZCB3aXRoIGEgbm9uLWRlZmF1bHQKKyMgbG9jYWxfaG9zdG5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLCBzaW5jZSAob24gc29tZSBzeXN0ZW1zKSB0aGUgRlFETgorIyBsb29rdXAgY2F1c2VkIGJ5IHRoZSBkZWZhdWx0IGxvY2FsX2hvc3RuYW1lIHNvbWV0aW1lcyB0YWtlcyBzbyBsb25nIHRoYXQgdGhlCisjIHRlc3Qgc2VydmVyIHRpbWVzIG91dCwgY2F1c2luZyB0aGUgdGVzdCB0byBmYWlsLgorCisjIFRlc3QgYmVoYXZpb3Igb2Ygc210cGQuRGVidWdnaW5nU2VydmVyCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgRGVidWdnaW5nU2VydmVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIHRlbXBvcmFyaWx5IHJlcGxhY2Ugc3lzLnN0ZG91dCB0byBjYXB0dXJlIERlYnVnZ2luZ1NlcnZlciBvdXRwdXQKKyAgICAgICAgc2VsZi5vbGRfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBzZWxmLm91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub3V0cHV0CisKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgICAgICBzZWxmLnNlcnZfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5jbGllbnRfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgIyBQaWNrIGEgcmFuZG9tIHVudXNlZCBwb3J0IGJ5IHBhc3NpbmcgMCBmb3IgdGhlIHBvcnQgbnVtYmVyCisgICAgICAgIHNlbGYuc2VydiA9IHNtdHBkLkRlYnVnZ2luZ1NlcnZlcigoSE9TVCwgMCksICgnbm93aGVyZScsIC0xKSkKKyAgICAgICAgIyBLZWVwIGEgbm90ZSBvZiB3aGF0IHBvcnQgd2FzIGFzc2lnbmVkCisgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQorICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5zZXJ2LCBzZWxmLnNlcnZfZXZ0LCBzZWxmLmNsaWVudF9ldnQpCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZGVidWdnaW5nX3NlcnZlciwgYXJncz1zZXJ2X2FyZ3MpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKworICAgICAgICAjIHdhaXQgdW50aWwgc2VydmVyIHRocmVhZCBoYXMgYXNzaWduZWQgYSBwb3J0IG51bWJlcgorICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnNlcnZfZXZ0LmNsZWFyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBpbmRpY2F0ZSB0aGF0IHRoZSBjbGllbnQgaXMgZmluaXNoZWQKKyAgICAgICAgc2VsZi5jbGllbnRfZXZ0LnNldCgpCisgICAgICAgICMgd2FpdCBmb3IgdGhlIHNlcnZlciB0aHJlYWQgdG8gdGVybWluYXRlCisgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCisgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisgICAgICAgICMgcmVzdG9yZSBzeXMuc3Rkb3V0CisgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm9sZF9zdGRvdXQKKworICAgIGRlZiB0ZXN0QmFzaWMoc2VsZik6CisgICAgICAgICMgY29ubmVjdAorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgc210cC5xdWl0KCkKKworICAgIGRlZiB0ZXN0Tk9PUChzZWxmKToKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIGV4cGVjdGVkID0gKDI1MCwgJ09rJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLm5vb3AoKSwgZXhwZWN0ZWQpCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICBkZWYgdGVzdFJTRVQoc2VsZik6CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0zKQorICAgICAgICBleHBlY3RlZCA9ICgyNTAsICdPaycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5yc2V0KCksIGV4cGVjdGVkKQorICAgICAgICBzbXRwLnF1aXQoKQorCisgICAgZGVmIHRlc3ROb3RJbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgIyBFSExPIGlzbid0IGltcGxlbWVudGVkIGluIERlYnVnZ2luZ1NlcnZlcgorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgZXhwZWN0ZWQgPSAoNTAyLCAnRXJyb3I6IGNvbW1hbmQgIkVITE8iIG5vdCBpbXBsZW1lbnRlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5laGxvKCksIGV4cGVjdGVkKQorICAgICAgICBzbXRwLnF1aXQoKQorCisgICAgZGVmIHRlc3RWUkZZKHNlbGYpOgorICAgICAgICAjIFZSRlkgaXNuJ3QgaW1wbGVtZW50ZWQgaW4gRGVidWdnaW5nU2VydmVyCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0zKQorICAgICAgICBleHBlY3RlZCA9ICg1MDIsICdFcnJvcjogY29tbWFuZCAiVlJGWSIgbm90IGltcGxlbWVudGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnZyZnkoJ25vYm9keUBub3doZXJlLmNvbScpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnZlcmlmeSgnbm9ib2R5QG5vd2hlcmUuY29tJyksIGV4cGVjdGVkKQorICAgICAgICBzbXRwLnF1aXQoKQorCisgICAgZGVmIHRlc3RTZWNvbmRIRUxPKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgYSBzZWNvbmQgSEVMTyByZXR1cm5zIGEgbWVzc2FnZSB0aGF0IGl0J3MgYSBkdXBsaWNhdGUKKyAgICAgICAgIyAodGhpcyBiZWhhdmlvciBpcyBzcGVjaWZpYyB0byBzbXRwZC5TTVRQQ2hhbm5lbCkKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIHNtdHAuaGVsbygpCisgICAgICAgIGV4cGVjdGVkID0gKDUwMywgJ0R1cGxpY2F0ZSBIRUxPL0VITE8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAuaGVsbygpLCBleHBlY3RlZCkKKyAgICAgICAgc210cC5xdWl0KCkKKworICAgIGRlZiB0ZXN0SEVMUChzZWxmKToKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5oZWxwKCksICdFcnJvcjogY29tbWFuZCAiSEVMUCIgbm90IGltcGxlbWVudGVkJykKKyAgICAgICAgc210cC5xdWl0KCkKKworICAgIGRlZiB0ZXN0U2VuZChzZWxmKToKKyAgICAgICAgIyBjb25uZWN0IGFuZCBzZW5kIG1haWwKKyAgICAgICAgbSA9ICdBIHRlc3QgbWVzc2FnZScKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIHNtdHAuc2VuZG1haWwoJ0pvaG4nLCAnU2FsbHknLCBtKQorICAgICAgICAjIFhYWChubm9yd2l0eik6IHRoaXMgdGVzdCBpcyBmbGFreSBhbmQgZGllcyB3aXRoIGEgYmFkIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAjIGluIGFzeW5jb3JlLiAgVGhpcyBzbGVlcCBtaWdodCBoZWxwLCBidXQgc2hvdWxkIHJlYWxseSBiZSBmaXhlZAorICAgICAgICAjIHByb3Blcmx5IGJ5IHVzaW5nIGFuIEV2ZW50IHZhcmlhYmxlLgorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICAgICAgc2VsZi5jbGllbnRfZXZ0LnNldCgpCisgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCisgICAgICAgIHNlbGYub3V0cHV0LmZsdXNoKCkKKyAgICAgICAgbWV4cGVjdCA9ICclcyVzXG4lcycgJSAoTVNHX0JFR0lOLCBtLCBNU0dfRU5EKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3V0cHV0LmdldHZhbHVlKCksIG1leHBlY3QpCisKKworY2xhc3MgTm9uQ29ubmVjdGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0Tm90Q29ubmVjdGVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgdmFyaW91cyBvcGVyYXRpb25zIG9uIGFuIHVuY29ubmVjdGVkIFNNVFAgb2JqZWN0IHRoYXQKKyAgICAgICAgIyBzaG91bGQgcmFpc2UgZXhjZXB0aW9ucyAoYXQgcHJlc2VudCB0aGUgYXR0ZW1wdCBpbiBTTVRQLnNlbmQKKyAgICAgICAgIyB0byByZWZlcmVuY2UgdGhlIG5vbmV4aXN0ZW50ICdzb2NrJyBhdHRyaWJ1dGUgb2YgdGhlIFNNVFAgb2JqZWN0CisgICAgICAgICMgY2F1c2VzIGFuIEF0dHJpYnV0ZUVycm9yKQorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc210cGxpYi5TTVRQU2VydmVyRGlzY29ubmVjdGVkLCBzbXRwLmVobG8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNtdHBsaWIuU01UUFNlcnZlckRpc2Nvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC5zZW5kLCAndGVzdCBtc2cnKQorCisgICAgZGVmIHRlc3ROb25udW1lcmljUG9ydChzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IG5vbi1udW1lcmljIHBvcnQgcmFpc2VzIHNvY2tldC5lcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsaG9zdCIsICJib2d1cyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc210cGxpYi5TTVRQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxob3N0OmJvZ3VzIikKKworCisjIHRlc3QgcmVzcG9uc2Ugb2YgY2xpZW50IHRvIGEgbm9uLXN1Y2Nlc3NmdWwgSEVMTyBtZXNzYWdlCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgQmFkSEVMT1NlcnZlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBzZWxmLm91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub3V0cHV0CisKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMTUpCisgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQorICAgICAgICBzZXJ2YXJncyA9IChzZWxmLmV2dCwgIjE5OSBubyBoZWxsbyBmb3IgeW91IVxuIiwgc2VsZi5zb2NrKQorICAgICAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz1zZXJ2YXJncykKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgc2VsZi5ldnQuY2xlYXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub2xkX3N0ZG91dAorCisgICAgZGVmIHRlc3RGYWlsaW5nSEVMTyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc210cGxpYi5TTVRQQ29ubmVjdEVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9TVCwgc2VsZi5wb3J0LCAnbG9jYWxob3N0JywgMykKKworCitzaW1fdXNlcnMgPSB7J01yLkFAc29tZXdoZXJlLmNvbSc6J0pvaG4gQScsCisgICAgICAgICAgICAgJ01zLkJAc29tZXdoZXJlLmNvbSc6J1NhbGx5IEInLAorICAgICAgICAgICAgICdNcnMuQ0Bzb21ld2hlcmVlc2xlLmNvbSc6J1J1dGggQycsCisgICAgICAgICAgICB9CisKK3NpbV9hdXRoID0gKCdNci5BQHNvbWV3aGVyZS5jb20nLCAnc29tZXBhc3N3b3JkJykKK3NpbV9jcmFtX21kNV9jaGFsbGVuZ2UgPSAoJ1BFTkNlVXhGUkVKb1UwTm5ibWhOV2l0T01qTkdObicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RBWld4M2IyOWtMbWx1Ym05emIyWjBMbU52YlQ0PScpCitzaW1fYXV0aF9jcmVkZW50aWFscyA9IHsKKyAgICAnbG9naW4nOiAnVFhJdVFVQnpiMjFsZDJobGNtVXVZMjl0JywKKyAgICAncGxhaW4nOiAnQUUxeUxrRkFjMjl0Wlhkb1pYSmxMbU52YlFCemIyMWxjR0Z6YzNkdmNtUT0nLAorICAgICdjcmFtLW1kNSc6ICgnVFhJVVFVQlpCMjFMRDJITENNVVVZMjlUSURHNE9XUTBNSicKKyAgICAgICAgICAgICAgICAgJ0tXWkdRNE9ETk1OREE0TlRHWE1EUkxaV01ZWkpETU9ERzEnKSwKKyAgICB9CitzaW1fYXV0aF9sb2dpbl9wYXNzd29yZCA9ICdDMjlUWlhCSEMzTjNCM0pLJworCitzaW1fbGlzdHMgPSB7J2xpc3QtMSc6WydNci5BQHNvbWV3aGVyZS5jb20nLCdNcnMuQ0Bzb21ld2hlcmVlc2xlLmNvbSddLAorICAgICAgICAgICAgICdsaXN0LTInOlsnTXMuQkBzb21ld2hlcmUuY29tJyxdLAorICAgICAgICAgICAgfQorCisjIFNpbXVsYXRlZCBTTVRQIGNoYW5uZWwgJiBzZXJ2ZXIKK2NsYXNzIFNpbVNNVFBDaGFubmVsKHNtdHBkLlNNVFBDaGFubmVsKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHRyYV9mZWF0dXJlcywgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9leHRyYWZlYXR1cmVzID0gJycuam9pbigKKyAgICAgICAgICAgIFsgIjI1MC17MH1cclxuIi5mb3JtYXQoeCkgZm9yIHggaW4gZXh0cmFfZmVhdHVyZXMgXSkKKyAgICAgICAgc210cGQuU01UUENoYW5uZWwuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgc210cF9FSExPKHNlbGYsIGFyZyk6CisgICAgICAgIHJlc3AgPSAoJzI1MC10ZXN0aG9zdFxyXG4nCisgICAgICAgICAgICAgICAgJzI1MC1FWFBOXHJcbicKKyAgICAgICAgICAgICAgICAnMjUwLVNJWkUgMjAwMDAwMDBcclxuJworICAgICAgICAgICAgICAgICcyNTAtU1RBUlRUTFNcclxuJworICAgICAgICAgICAgICAgICcyNTAtREVMSVZFUkJZXHJcbicpCisgICAgICAgIHJlc3AgPSByZXNwICsgc2VsZi5fZXh0cmFmZWF0dXJlcyArICcyNTAgSEVMUCcKKyAgICAgICAgc2VsZi5wdXNoKHJlc3ApCisKKyAgICBkZWYgc210cF9WUkZZKHNlbGYsIGFyZyk6CisgICAgICAgICMgRm9yIG1heCBjb21wYXRpYmlsaXR5IHNtdHBsaWIgc2hvdWxkIGJlIHNlbmRpbmcgdGhlIHJhdyBhZGRyZXNzLgorICAgICAgICBpZiBhcmcgaW4gc2ltX3VzZXJzOgorICAgICAgICAgICAgc2VsZi5wdXNoKCcyNTAgJXMgJXMnICUgKHNpbV91c2Vyc1thcmddLCBzbXRwbGliLnF1b3RlYWRkcihhcmcpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHVzaCgnNTUwIE5vIHN1Y2ggdXNlcjogJXMnICUgYXJnKQorCisgICAgZGVmIHNtdHBfRVhQTihzZWxmLCBhcmcpOgorICAgICAgICBsaXN0X25hbWUgPSBhcmcubG93ZXIoKQorICAgICAgICBpZiBsaXN0X25hbWUgaW4gc2ltX2xpc3RzOgorICAgICAgICAgICAgdXNlcl9saXN0ID0gc2ltX2xpc3RzW2xpc3RfbmFtZV0KKyAgICAgICAgICAgIGZvciBuLCB1c2VyX2VtYWlsIGluIGVudW1lcmF0ZSh1c2VyX2xpc3QpOgorICAgICAgICAgICAgICAgIHF1b3RlZF9hZGRyID0gc210cGxpYi5xdW90ZWFkZHIodXNlcl9lbWFpbCkKKyAgICAgICAgICAgICAgICBpZiBuIDwgbGVuKHVzZXJfbGlzdCkgLSAxOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzI1MC0lcyAlcycgJSAoc2ltX3VzZXJzW3VzZXJfZW1haWxdLCBxdW90ZWRfYWRkcikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCcyNTAgJXMgJXMnICUgKHNpbV91c2Vyc1t1c2VyX2VtYWlsXSwgcXVvdGVkX2FkZHIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wdXNoKCc1NTAgTm8gYWNjZXNzIGZvciB5b3UhJykKKworICAgIGRlZiBzbXRwX0FVVEgoc2VsZiwgYXJnKToKKyAgICAgICAgaWYgYXJnLnN0cmlwKCkubG93ZXIoKT09J2NyYW0tbWQ1JzoKKyAgICAgICAgICAgIHNlbGYucHVzaCgnMzM0IHswfScuZm9ybWF0KHNpbV9jcmFtX21kNV9jaGFsbGVuZ2UpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1lY2gsIGF1dGggPSBhcmcuc3BsaXQoKQorICAgICAgICBtZWNoID0gbWVjaC5sb3dlcigpCisgICAgICAgIGlmIG1lY2ggbm90IGluIHNpbV9hdXRoX2NyZWRlbnRpYWxzOgorICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDQgYXV0aCB0eXBlIHVuaW1wbGVtZW50ZWQnKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG1lY2ggPT0gJ3BsYWluJyBhbmQgYXV0aD09c2ltX2F1dGhfY3JlZGVudGlhbHNbJ3BsYWluJ106CisgICAgICAgICAgICBzZWxmLnB1c2goJzIzNSBwbGFpbiBhdXRoIG9rJykKKyAgICAgICAgZWxpZiBtZWNoPT0nbG9naW4nIGFuZCBhdXRoPT1zaW1fYXV0aF9jcmVkZW50aWFsc1snbG9naW4nXToKKyAgICAgICAgICAgIHNlbGYucHVzaCgnMzM0IFBhc3N3b3JkOicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2goJzU1MCBObyBhY2Nlc3MgZm9yIHlvdSEnKQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKworCitjbGFzcyBTaW1TTVRQU2VydmVyKHNtdHBkLlNNVFBTZXJ2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fZXh0cmFfZmVhdHVyZXMgPSBbXQorICAgICAgICBzbXRwZC5TTVRQU2VydmVyLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6CisgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLmFjY2VwdCgpCisgICAgICAgIHNlbGYuX1NNVFBjaGFubmVsID0gU2ltU01UUENoYW5uZWwoc2VsZi5fZXh0cmFfZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgY29ubiwgYWRkcikKKworICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgYWRkX2ZlYXR1cmUoc2VsZiwgZmVhdHVyZSk6CisgICAgICAgIHNlbGYuX2V4dHJhX2ZlYXR1cmVzLmFwcGVuZChmZWF0dXJlKQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKworCisjIFRlc3QgdmFyaW91cyBTTVRQICYgRVNNVFAgY29tbWFuZHMvYmVoYXZpb3JzIHRoYXQgcmVxdWlyZSBhIHNpbXVsYXRlZCBzZXJ2ZXIKKyMgKGkuZS4sIHNvbWV0aGluZyB3aXRoIG1vcmUgZmVhdHVyZXMgdGhhbiBEZWJ1Z2dpbmdTZXJ2ZXIpCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgU01UUFNpbVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgICAgICBzZWxmLnNlcnZfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5jbGllbnRfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgIyBQaWNrIGEgcmFuZG9tIHVudXNlZCBwb3J0IGJ5IHBhc3NpbmcgMCBmb3IgdGhlIHBvcnQgbnVtYmVyCisgICAgICAgIHNlbGYuc2VydiA9IFNpbVNNVFBTZXJ2ZXIoKEhPU1QsIDApLCAoJ25vd2hlcmUnLCAtMSkpCisgICAgICAgICMgS2VlcCBhIG5vdGUgb2Ygd2hhdCBwb3J0IHdhcyBhc3NpZ25lZAorICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnNlcnYuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KKyAgICAgICAgc2Vydl9hcmdzID0gKHNlbGYuc2Vydiwgc2VsZi5zZXJ2X2V2dCwgc2VsZi5jbGllbnRfZXZ0KQorICAgICAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWRlYnVnZ2luZ19zZXJ2ZXIsIGFyZ3M9c2Vydl9hcmdzKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisKKyAgICAgICAgIyB3YWl0IHVudGlsIHNlcnZlciB0aHJlYWQgaGFzIGFzc2lnbmVkIGEgcG9ydCBudW1iZXIKKyAgICAgICAgc2VsZi5zZXJ2X2V2dC53YWl0KCkKKyAgICAgICAgc2VsZi5zZXJ2X2V2dC5jbGVhcigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgaW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50IGlzIGZpbmlzaGVkCisgICAgICAgIHNlbGYuY2xpZW50X2V2dC5zZXQoKQorICAgICAgICAjIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdGhyZWFkIHRvIHRlcm1pbmF0ZQorICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQorCisgICAgZGVmIHRlc3RCYXNpYyhzZWxmKToKKyAgICAgICAgIyBzbW9rZSB0ZXN0CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKyAgICAgICAgc210cC5xdWl0KCkKKworICAgIGRlZiB0ZXN0RUhMTyhzZWxmKToKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorCisgICAgICAgICMgbm8gZmVhdHVyZXMgc2hvdWxkIGJlIHByZXNlbnQgYmVmb3JlIHRoZSBFSExPCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5lc210cF9mZWF0dXJlcywge30pCisKKyAgICAgICAgIyBmZWF0dXJlcyBleHBlY3RlZCBmcm9tIHRoZSB0ZXN0IHNlcnZlcgorICAgICAgICBleHBlY3RlZF9mZWF0dXJlcyA9IHsnZXhwbic6JycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJzogJzIwMDAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0dGxzJzogJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWxpdmVyYnknOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlbHAnOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgIHNtdHAuZWhsbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5lc210cF9mZWF0dXJlcywgZXhwZWN0ZWRfZmVhdHVyZXMpCisgICAgICAgIGZvciBrIGluIGV4cGVjdGVkX2ZlYXR1cmVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNtdHAuaGFzX2V4dG4oaykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc210cC5oYXNfZXh0bigndW5zdXBwb3J0ZWQtZmVhdHVyZScpKQorICAgICAgICBzbXRwLnF1aXQoKQorCisgICAgZGVmIHRlc3RWUkZZKHNlbGYpOgorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MTUpCisKKyAgICAgICAgZm9yIGVtYWlsLCBuYW1lIGluIHNpbV91c2Vycy5pdGVtcygpOgorICAgICAgICAgICAgZXhwZWN0ZWRfa25vd24gPSAoMjUwLCAnJXMgJXMnICUgKG5hbWUsIHNtdHBsaWIucXVvdGVhZGRyKGVtYWlsKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAudnJmeShlbWFpbCksIGV4cGVjdGVkX2tub3duKQorCisgICAgICAgIHUgPSAnbm9ib2R5QG5vd2hlcmUuY29tJworICAgICAgICBleHBlY3RlZF91bmtub3duID0gKDU1MCwgJ05vIHN1Y2ggdXNlcjogJXMnICUgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnZyZnkodSksIGV4cGVjdGVkX3Vua25vd24pCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICBkZWYgdGVzdEVYUE4oc2VsZik6CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKworICAgICAgICBmb3IgbGlzdG5hbWUsIG1lbWJlcnMgaW4gc2ltX2xpc3RzLml0ZW1zKCk6CisgICAgICAgICAgICB1c2VycyA9IFtdCisgICAgICAgICAgICBmb3IgbSBpbiBtZW1iZXJzOgorICAgICAgICAgICAgICAgIHVzZXJzLmFwcGVuZCgnJXMgJXMnICUgKHNpbV91c2Vyc1ttXSwgc210cGxpYi5xdW90ZWFkZHIobSkpKQorICAgICAgICAgICAgZXhwZWN0ZWRfa25vd24gPSAoMjUwLCAnXG4nLmpvaW4odXNlcnMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmV4cG4obGlzdG5hbWUpLCBleHBlY3RlZF9rbm93bikKKworICAgICAgICB1ID0gJ1BTVS1NZW1iZXJzLUxpc3QnCisgICAgICAgIGV4cGVjdGVkX3Vua25vd24gPSAoNTUwLCAnTm8gYWNjZXNzIGZvciB5b3UhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmV4cG4odSksIGV4cGVjdGVkX3Vua25vd24pCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICBkZWYgdGVzdEFVVEhfUExBSU4oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydi5hZGRfZmVhdHVyZSgiQVVUSCBQTEFJTiIpCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKworICAgICAgICBleHBlY3RlZF9hdXRoX29rID0gKDIzNSwgYidwbGFpbiBhdXRoIG9rJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSksIGV4cGVjdGVkX2F1dGhfb2spCisKKyAgICAjIFNpbVNNVFBDaGFubmVsIGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCBMT0dJTiBvciBDUkFNLU1ENSBhdXRoIGJlY2F1c2UgdGhleQorICAgICMgcmVxdWlyZSBhIHN5bmNocm9ub3VzIHJlYWQgdG8gb2J0YWluIHRoZSBjcmVkZW50aWFscy4uLnNvIGluc3RlYWQgc210cGQKKyAgICAjIHNlZXMgdGhlIGNyZWRlbnRpYWwgc2VudCBieSBzbXRwbGliJ3MgbG9naW4gbWV0aG9kIGFzIGFuIHVua25vd24gY29tbWFuZCwKKyAgICAjIHdoaWNoIHJlc3VsdHMgaW4gc210cGxpYiByYWlzaW5nIGFuIGF1dGggZXJyb3IuICBGb3J0dW5hdGVseSB0aGUgZXJyb3IKKyAgICAjIG1lc3NhZ2UgY29udGFpbnMgdGhlIGVuY29kZWQgY3JlZGVudGlhbCwgc28gd2UgY2FuIHBhcnRpYWxseSBjaGVjayB0aGF0IGl0CisgICAgIyB3YXMgZ2VuZXJhdGVkIGNvcnJlY3RseSAocGFydGlhbGx5LCBiZWNhdXNlIHRoZSAnd29yZCcgaXMgdXBwZXJjYXNlZCBpbgorICAgICMgdGhlIGVycm9yIG1lc3NhZ2UpLgorCisgICAgZGVmIHRlc3RBVVRIX0xPR0lOKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYuYWRkX2ZlYXR1cmUoIkFVVEggTE9HSU4iKQorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MTUpCisgICAgICAgIHRyeTogc210cC5sb2dpbihzaW1fYXV0aFswXSwgc2ltX2F1dGhbMV0pCisgICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBBdXRoZW50aWNhdGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGlmIHNpbV9hdXRoX2xvZ2luX3Bhc3N3b3JkIG5vdCBpbiBzdHIoZXJyKToKKyAgICAgICAgICAgICAgICByYWlzZSAiZXhwZWN0ZWQgZW5jb2RlZCBwYXNzd29yZCBub3QgZm91bmQgaW4gZXJyb3IgbWVzc2FnZSIKKworICAgIGRlZiB0ZXN0QVVUSF9DUkFNX01ENShzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2LmFkZF9mZWF0dXJlKCJBVVRIIENSQU0tTUQ1IikKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorCisgICAgICAgIHRyeTogc210cC5sb2dpbihzaW1fYXV0aFswXSwgc2ltX2F1dGhbMV0pCisgICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBBdXRoZW50aWNhdGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGlmIHNpbV9hdXRoX2NyZWRlbnRpYWxzWydjcmFtLW1kNSddIG5vdCBpbiBzdHIoZXJyKToKKyAgICAgICAgICAgICAgICByYWlzZSAiZXhwZWN0ZWQgZW5jb2RlZCBjcmVkZW50aWFscyBub3QgZm91bmQgaW4gZXJyb3IgbWVzc2FnZSIKKworICAgICNUT0RPOiBhZGQgdGVzdHMgZm9yIGNvcnJlY3QgQVVUSCBtZXRob2QgZmFsbGJhY2sgbm93IHRoYXQgdGhlCisgICAgI3Rlc3QgaW5mcmFzdHJ1Y3R1cmUgY2FuIHN1cHBvcnQgaXQuCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzLCBEZWJ1Z2dpbmdTZXJ2ZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbkNvbm5lY3RpbmdUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhZEhFTE9TZXJ2ZXJUZXN0cywgU01UUFNpbVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGMzOWViCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHNtdHBsaWIKKwordGVzdF9zdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKKworY2xhc3MgU210cFNTTFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHRlc3RTZXJ2ZXIgPSAnc210cC5nbWFpbC5jb20nCisgICAgcmVtb3RlUG9ydCA9IDQ2NQorCisgICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdldF9hdHRyaWJ1dGUoc210cGxpYiwgJ1NNVFBfU1NMJykKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYudGVzdFNlcnZlcik6CisgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFBfU1NMKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0KQorICAgICAgICBzZXJ2ZXIuZWhsbygpCisgICAgICAgIHNlcnZlci5xdWl0KCkKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3RfZGVmYXVsdF9wb3J0KHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2V0X2F0dHJpYnV0ZShzbXRwbGliLCAnU01UUF9TU0wnKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi50ZXN0U2VydmVyKToKKyAgICAgICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUF9TU0woc2VsZi50ZXN0U2VydmVyKQorICAgICAgICBzZXJ2ZXIuZWhsbygpCisgICAgICAgIHNlcnZlci5xdWl0KCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU210cFNTTFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTFlNTUzCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CkBAIC0wLDAgKzEsMTcyNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaW1wb3J0IGVycm5vCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2VsZWN0CitpbXBvcnQgX3Rlc3RjYXBpCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IFF1ZXVlCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBhcnJheQoraW1wb3J0IGNvbnRleHRsaWIKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBtYXRoCisKK2RlZiB0cnlfYWRkcmVzcyhob3N0LCBwb3J0PTAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCk6CisgICAgIiIiVHJ5IHRvIGJpbmQgYSBzb2NrZXQgb24gdGhlIGdpdmVuIGhvc3Q6cG9ydCBhbmQgcmV0dXJuIFRydWUKKyAgICBpZiB0aGF0IGhhcyBiZWVuIHBvc3NpYmxlLiIiIgorICAgIHRyeToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNvY2suYmluZCgoaG9zdCwgcG9ydCkpCisgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIHNvY2tldC5nYWllcnJvcik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCitIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKK01TRyA9IGInTWljaGFlbCBHaWxmaXggd2FzIGhlcmVcbicKK1NVUFBPUlRTX0lQVjYgPSBzb2NrZXQuaGFzX2lwdjYgYW5kIHRyeV9hZGRyZXNzKCc6OjEnLCBmYW1pbHk9c29ja2V0LkFGX0lORVQ2KQorCit0cnk6CisgICAgaW1wb3J0IHRocmVhZAorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWQgPSBOb25lCisgICAgdGhyZWFkaW5nID0gTm9uZQorCitIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKK01TRyA9ICdNaWNoYWVsIEdpbGZpeCB3YXMgaGVyZVxuJworCitjbGFzcyBTb2NrZXRUQ1BUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc2VydikKKyAgICAgICAgc2VsZi5zZXJ2Lmxpc3RlbigxKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYuY2xvc2UoKQorICAgICAgICBzZWxmLnNlcnYgPSBOb25lCisKK2NsYXNzIFNvY2tldFVEUFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNlcnYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydi5jbG9zZSgpCisgICAgICAgIHNlbGYuc2VydiA9IE5vbmUKKworY2xhc3MgVGhyZWFkYWJsZVRlc3Q6CisgICAgIiIiVGhyZWFkYWJsZSBUZXN0IGNsYXNzCisKKyAgICBUaGUgVGhyZWFkYWJsZVRlc3QgY2xhc3MgbWFrZXMgaXQgZWFzeSB0byBjcmVhdGUgYSB0aHJlYWRlZAorICAgIGNsaWVudC9zZXJ2ZXIgcGFpciBmcm9tIGFuIGV4aXN0aW5nIHVuaXQgdGVzdC4gVG8gY3JlYXRlIGEKKyAgICBuZXcgdGhyZWFkZWQgY2xhc3MgZnJvbSBhbiBleGlzdGluZyB1bml0IHRlc3QsIHVzZSBtdWx0aXBsZQorICAgIGluaGVyaXRhbmNlOgorCisgICAgICAgIGNsYXNzIE5ld0NsYXNzIChPbGRDbGFzcywgVGhyZWFkYWJsZVRlc3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgVGhpcyBjbGFzcyBkZWZpbmVzIHR3byBuZXcgZml4dHVyZSBmdW5jdGlvbnMgd2l0aCBvYnZpb3VzCisgICAgcHVycG9zZXMgZm9yIG92ZXJyaWRpbmc6CisKKyAgICAgICAgY2xpZW50U2V0VXAgKCkKKyAgICAgICAgY2xpZW50VGVhckRvd24gKCkKKworICAgIEFueSBuZXcgdGVzdCBmdW5jdGlvbnMgd2l0aGluIHRoZSBjbGFzcyBtdXN0IHRoZW4gZGVmaW5lCisgICAgdGVzdHMgaW4gcGFpcnMsIHdoZXJlIHRoZSB0ZXN0IG5hbWUgaXMgcHJlY2VlZGVkIHdpdGggYQorICAgICdfJyB0byBpbmRpY2F0ZSB0aGUgY2xpZW50IHBvcnRpb24gb2YgdGhlIHRlc3QuIEV4OgorCisgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgIyBTZXJ2ZXIgcG9ydGlvbgorCisgICAgICAgIGRlZiBfdGVzdEZvbyhzZWxmKToKKyAgICAgICAgICAgICMgQ2xpZW50IHBvcnRpb24KKworICAgIEFueSBleGNlcHRpb25zIHJhaXNlZCBieSB0aGUgY2xpZW50cyBkdXJpbmcgdGhlaXIgdGVzdHMKKyAgICBhcmUgY2F1Z2h0IGFuZCB0cmFuc2ZlcnJlZCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gYWxlcnQKKyAgICB0aGUgdGVzdGluZyBmcmFtZXdvcmsuCisKKyAgICBOb3RlLCB0aGUgc2VydmVyIHNldHVwIGZ1bmN0aW9uIGNhbm5vdCBjYWxsIGFueSBibG9ja2luZworICAgIGZ1bmN0aW9ucyB0aGF0IHJlbHkgb24gdGhlIGNsaWVudCB0aHJlYWQgZHVyaW5nIHNldHVwLAorICAgIHVubGVzcyBzZXJ2ZXJFeHBsaWNpdFJlYWR5KCkgaXMgY2FsbGVkIGp1c3QgYmVmb3JlCisgICAgdGhlIGJsb2NraW5nIGNhbGwgKHN1Y2ggYXMgaW4gc2V0dGluZyB1cCBhIGNsaWVudC9zZXJ2ZXIKKyAgICBjb25uZWN0aW9uIGFuZCBwZXJmb3JtaW5nIHRoZSBhY2NlcHQoKSBpbiBzZXRVcCgpLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIFN3YXAgdGhlIHRydWUgc2V0dXAgZnVuY3Rpb24KKyAgICAgICAgc2VsZi5fX3NldFVwID0gc2VsZi5zZXRVcAorICAgICAgICBzZWxmLl9fdGVhckRvd24gPSBzZWxmLnRlYXJEb3duCisgICAgICAgIHNlbGYuc2V0VXAgPSBzZWxmLl9zZXRVcAorICAgICAgICBzZWxmLnRlYXJEb3duID0gc2VsZi5fdGVhckRvd24KKworICAgIGRlZiBzZXJ2ZXJFeHBsaWNpdFJlYWR5KHNlbGYpOgorICAgICAgICAiIiJUaGlzIG1ldGhvZCBhbGxvd3MgdGhlIHNlcnZlciB0byBleHBsaWNpdGx5IGluZGljYXRlIHRoYXQKKyAgICAgICAgaXQgd2FudHMgdGhlIGNsaWVudCB0aHJlYWQgdG8gcHJvY2VlZC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlCisgICAgICAgIHNlcnZlciBpcyBhYm91dCB0byBleGVjdXRlIGEgYmxvY2tpbmcgcm91dGluZSB0aGF0IGlzCisgICAgICAgIGRlcGVuZGVudCB1cG9uIHRoZSBjbGllbnQgdGhyZWFkIGR1cmluZyBpdHMgc2V0dXAgcm91dGluZS4iIiIKKyAgICAgICAgc2VsZi5zZXJ2ZXJfcmVhZHkuc2V0KCkKKworICAgIGRlZiBfc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyX3JlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5jbGllbnRfcmVhZHkgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLmRvbmUgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLnF1ZXVlID0gUXVldWUuUXVldWUoMSkKKworICAgICAgICAjIERvIHNvbWUgbXVuZ2luZyB0byBzdGFydCB0aGUgY2xpZW50IHRlc3QuCisgICAgICAgIG1ldGhvZG5hbWUgPSBzZWxmLmlkKCkKKyAgICAgICAgaSA9IG1ldGhvZG5hbWUucmZpbmQoJy4nKQorICAgICAgICBtZXRob2RuYW1lID0gbWV0aG9kbmFtZVtpKzE6XQorICAgICAgICB0ZXN0X21ldGhvZCA9IGdldGF0dHIoc2VsZiwgJ18nICsgbWV0aG9kbmFtZSkKKyAgICAgICAgc2VsZi5jbGllbnRfdGhyZWFkID0gdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoCisgICAgICAgICAgICBzZWxmLmNsaWVudFJ1biwgKHRlc3RfbWV0aG9kLCkpCisKKyAgICAgICAgc2VsZi5fX3NldFVwKCkKKyAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyX3JlYWR5LmlzX3NldCgpOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfcmVhZHkuc2V0KCkKKyAgICAgICAgc2VsZi5jbGllbnRfcmVhZHkud2FpdCgpCisKKyAgICBkZWYgX3RlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLl9fdGVhckRvd24oKQorICAgICAgICBzZWxmLmRvbmUud2FpdCgpCisKKyAgICAgICAgaWYgbm90IHNlbGYucXVldWUuZW1wdHkoKToKKyAgICAgICAgICAgIG1zZyA9IHNlbGYucXVldWUuZ2V0KCkKKyAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCisKKyAgICBkZWYgY2xpZW50UnVuKHNlbGYsIHRlc3RfZnVuYyk6CisgICAgICAgIHNlbGYuc2VydmVyX3JlYWR5LndhaXQoKQorICAgICAgICBzZWxmLmNsaWVudFNldFVwKCkKKyAgICAgICAgc2VsZi5jbGllbnRfcmVhZHkuc2V0KCkKKyAgICAgICAgaWYgbm90IGNhbGxhYmxlKHRlc3RfZnVuYyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInRlc3RfZnVuYyBtdXN0IGJlIGEgY2FsbGFibGUgZnVuY3Rpb24uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mdW5jKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgc3RyZXJyb3I6CisgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChzdHJlcnJvcikKKyAgICAgICAgc2VsZi5jbGllbnRUZWFyRG93bigpCisKKyAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImNsaWVudFNldFVwIG11c3QgYmUgaW1wbGVtZW50ZWQuIikKKworICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5kb25lLnNldCgpCisgICAgICAgIHRocmVhZC5leGl0KCkKKworY2xhc3MgVGhyZWFkZWRUQ1BTb2NrZXRUZXN0KFNvY2tldFRDUFRlc3QsIFRocmVhZGFibGVUZXN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIFNvY2tldFRDUFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQorICAgICAgICBUaHJlYWRhYmxlVGVzdC5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIGNsaWVudFNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKworICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuY2xvc2UoKQorICAgICAgICBzZWxmLmNsaSA9IE5vbmUKKyAgICAgICAgVGhyZWFkYWJsZVRlc3QuY2xpZW50VGVhckRvd24oc2VsZikKKworY2xhc3MgVGhyZWFkZWRVRFBTb2NrZXRUZXN0KFNvY2tldFVEUFRlc3QsIFRocmVhZGFibGVUZXN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIFNvY2tldFVEUFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQorICAgICAgICBUaHJlYWRhYmxlVGVzdC5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIGNsaWVudFNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorCisgICAgZGVmIGNsaWVudFRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5jbG9zZSgpCisgICAgICAgIHNlbGYuY2xpID0gTm9uZQorICAgICAgICBUaHJlYWRhYmxlVGVzdC5jbGllbnRUZWFyRG93bihzZWxmKQorCitjbGFzcyBTb2NrZXRDb25uZWN0ZWRUZXN0KFRocmVhZGVkVENQU29ja2V0VGVzdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBUaHJlYWRlZFRDUFNvY2tldFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBUaHJlYWRlZFRDUFNvY2tldFRlc3Quc2V0VXAoc2VsZikKKyAgICAgICAgIyBJbmRpY2F0ZSBleHBsaWNpdGx5IHdlJ3JlIHJlYWR5IGZvciB0aGUgY2xpZW50IHRocmVhZCB0bworICAgICAgICAjIHByb2NlZWQgYW5kIHRoZW4gcGVyZm9ybSB0aGUgYmxvY2tpbmcgY2FsbCB0byBhY2NlcHQKKyAgICAgICAgc2VsZi5zZXJ2ZXJFeHBsaWNpdFJlYWR5KCkKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBzZWxmLmNsaV9jb25uID0gY29ubgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaV9jb25uLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jbGlfY29ubiA9IE5vbmUKKyAgICAgICAgVGhyZWFkZWRUQ1BTb2NrZXRUZXN0LnRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CisgICAgICAgIFRocmVhZGVkVENQU29ja2V0VGVzdC5jbGllbnRTZXRVcChzZWxmKQorICAgICAgICBzZWxmLmNsaS5jb25uZWN0KChIT1NULCBzZWxmLnBvcnQpKQorICAgICAgICBzZWxmLnNlcnZfY29ubiA9IHNlbGYuY2xpCisKKyAgICBkZWYgY2xpZW50VGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydl9jb25uLmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4gPSBOb25lCisgICAgICAgIFRocmVhZGVkVENQU29ja2V0VGVzdC5jbGllbnRUZWFyRG93bihzZWxmKQorCitjbGFzcyBTb2NrZXRQYWlyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgVGhyZWFkYWJsZVRlc3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQorICAgICAgICBUaHJlYWRhYmxlVGVzdC5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYsIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldHBhaXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYuY2xvc2UoKQorICAgICAgICBzZWxmLnNlcnYgPSBOb25lCisKKyAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuY2xvc2UoKQorICAgICAgICBzZWxmLmNsaSA9IE5vbmUKKyAgICAgICAgVGhyZWFkYWJsZVRlc3QuY2xpZW50VGVhckRvd24oc2VsZikKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgQmVnaW4gVGVzdHMKKworY2xhc3MgR2VuZXJhbE1vZHVsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6CisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHAgPSBwcm94eShzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZmlsZW5vKCksIHMuZmlsZW5vKCkpCisgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBzID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwLmZpbGVubygpCisgICAgICAgIGV4Y2VwdCBSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnU29ja2V0IHByb3h5IHN0aWxsIGV4aXN0cycpCisKKyAgICBkZWYgdGVzdFNvY2tldEVycm9yKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc29ja2V0IG1vZHVsZSBleGNlcHRpb25zCisgICAgICAgIGRlZiByYWlzZV9lcnJvcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yCisgICAgICAgIGRlZiByYWlzZV9oZXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJhaXNlIHNvY2tldC5oZXJyb3IKKyAgICAgICAgZGVmIHJhaXNlX2dhaWVycm9yKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByYWlzZSBzb2NrZXQuZ2FpZXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCByYWlzZV9lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciByYWlzaW5nIHNvY2tldCBleGNlcHRpb24uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCByYWlzZV9oZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgcmFpc2VfZ2FpZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uLiIpCisKKyAgICBkZWYgdGVzdFNlbmR0b0Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHRoYXQgc2VuZHRvIGRvZW5zJ3QgbWFza3MgZmFpbHVyZXMuIFNlZSAjMTAxNjkuCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisgICAgICAgIHMuYmluZCgoJycsIDApKQorICAgICAgICBzb2NrbmFtZSA9IHMuZ2V0c29ja25hbWUoKQorICAgICAgICAjIDIgYXJncworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvcik6CisgICAgICAgICAgICBzLnNlbmR0byh1J1x1MjYyMCcsIHNvY2tuYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzLnNlbmR0byg1aiwgc29ja25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ25vdCBjb21wbGV4Jywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHMuc2VuZHRvKCdmb28nLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEluKCdub3QgTm9uZVR5cGUnLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgIyAzIGFyZ3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgICAgICAgICAgcy5zZW5kdG8odSdcdTI2MjAnLCAwLCBzb2NrbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcy5zZW5kdG8oNWosIDAsIHNvY2tuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKCdub3QgY29tcGxleCcsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzLnNlbmR0bygnZm9vJywgMCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm90IE5vbmVUeXBlJywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHMuc2VuZHRvKCdmb28nLCAnYmFyJywgc29ja25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FuIGludGVnZXIgaXMgcmVxdWlyZWQnLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcy5zZW5kdG8oJ2ZvbycsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FuIGludGVnZXIgaXMgcmVxdWlyZWQnLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgIyB3cm9uZyBudW1iZXIgb2YgYXJncworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzLnNlbmR0bygnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignKDEgZ2l2ZW4pJywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHMuc2VuZHRvKCdmb28nLCAwLCBzb2NrbmFtZSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignKDQgZ2l2ZW4pJywgc3RyKGNtLmV4Y2VwdGlvbikpCisKKworICAgIGRlZiB0ZXN0Q3J1Y2lhbENvbnN0YW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGZvciBtaXNzaW9uIGNyaXRpY2FsIGNvbnN0YW50cworICAgICAgICBzb2NrZXQuQUZfSU5FVAorICAgICAgICBzb2NrZXQuU09DS19TVFJFQU0KKyAgICAgICAgc29ja2V0LlNPQ0tfREdSQU0KKyAgICAgICAgc29ja2V0LlNPQ0tfUkFXCisgICAgICAgIHNvY2tldC5TT0NLX1JETQorICAgICAgICBzb2NrZXQuU09DS19TRVFQQUNLRVQKKyAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQKKyAgICAgICAgc29ja2V0LlNPX1JFVVNFQUREUgorCisgICAgZGVmIHRlc3RIb3N0bmFtZVJlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGhvc3RuYW1lIHJlc29sdXRpb24gbWVjaGFuaXNtcworICAgICAgICBob3N0bmFtZSA9IHNvY2tldC5nZXRob3N0bmFtZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlwID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdG5hbWUpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAjIFByb2JhYmx5IG5hbWUgbG9va3VwIHdhc24ndCBzZXQgdXAgcmlnaHQ7IHNraXAgdGhpcyB0ZXN0CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwLmZpbmQoJy4nKSA+PSAwLCAiRXJyb3IgcmVzb2x2aW5nIGhvc3QgdG8gaXAuIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaG5hbWUsIGFsaWFzZXMsIGlwYWRkcnMgPSBzb2NrZXQuZ2V0aG9zdGJ5YWRkcihpcCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICMgUHJvYmFibHkgYSBzaW1pbGFyIHByb2JsZW0gYXMgYWJvdmU7IHNraXAgdGhpcyB0ZXN0CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYWxsX2hvc3RfbmFtZXMgPSBbaG9zdG5hbWUsIGhuYW1lXSArIGFsaWFzZXMKKyAgICAgICAgZnFobiA9IHNvY2tldC5nZXRmcWRuKGlwKQorICAgICAgICBpZiBub3QgZnFobiBpbiBhbGxfaG9zdF9uYW1lczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXJyb3IgdGVzdGluZyBob3N0IHJlc29sdXRpb24gbWVjaGFuaXNtcy4gKGZxZG46ICVzLCBhbGw6ICVzKSIgJSAoZnFobiwgcmVwcihhbGxfaG9zdF9uYW1lcykpKQorCisgICAgZGVmIHRlc3RSZWZDb3VudEdldE5hbWVJbmZvKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcmVmZXJlbmNlIGNvdW50IGZvciBnZXRuYW1laW5mbworICAgICAgICBpZiBoYXNhdHRyKHN5cywgImdldHJlZmNvdW50Iik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBPbiBzb21lIHZlcnNpb25zLCB0aGlzIGxvc2VzIGEgcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgb3JpZyA9IHN5cy5nZXRyZWZjb3VudChfX25hbWVfXykKKyAgICAgICAgICAgICAgICBzb2NrZXQuZ2V0bmFtZWluZm8oX19uYW1lX18sMCkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoX19uYW1lX18pLCBvcmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvY2tldC5nZXRuYW1laW5mbyBsb3NlcyBhIHJlZmVyZW5jZSIpCisKKyAgICBkZWYgdGVzdEludGVycHJldGVyQ3Jhc2goc2VsZik6CisgICAgICAgICMgTWFraW5nIHN1cmUgZ2V0bmFtZWluZm8gZG9lc24ndCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBPbiBzb21lIHZlcnNpb25zLCB0aGlzIGNyYXNoZXMgdGhlIGludGVycHJldGVyLgorICAgICAgICAgICAgc29ja2V0LmdldG5hbWVpbmZvKCgneCcsIDAsIDAsIDApLCAwKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3ROdG9IKHNlbGYpOgorICAgICAgICAjIFRoaXMganVzdCBjaGVja3MgdGhhdCBodG9ucyBldGMuIGFyZSB0aGVpciBvd24gaW52ZXJzZSwKKyAgICAgICAgIyB3aGVuIGxvb2tpbmcgYXQgdGhlIGxvd2VyIDE2IG9yIDMyIGJpdHMuCisgICAgICAgIHNpemVzID0ge3NvY2tldC5odG9ubDogMzIsIHNvY2tldC5udG9obDogMzIsCisgICAgICAgICAgICAgICAgIHNvY2tldC5odG9uczogMTYsIHNvY2tldC5udG9oczogMTZ9CisgICAgICAgIGZvciBmdW5jLCBzaXplIGluIHNpemVzLml0ZW1zKCk6CisgICAgICAgICAgICBtYXNrID0gKDFMPDxzaXplKSAtIDEKKyAgICAgICAgICAgIGZvciBpIGluICgwLCAxLCAweGZmZmYsIH4weGZmZmYsIDIsIDB4MDEyMzQ1NjcsIDB4NzY1NDMyMTApOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAmIG1hc2ssIGZ1bmMoZnVuYyhpJm1hc2spKSAmIG1hc2spCisKKyAgICAgICAgICAgIHN3YXBwZWQgPSBmdW5jKG1hc2spCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN3YXBwZWQgJiBtYXNrLCBtYXNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnVuYywgMUw8PDM0KQorCisgICAgZGVmIHRlc3ROdG9IRXJyb3JzKHNlbGYpOgorICAgICAgICBnb29kX3ZhbHVlcyA9IFsgMSwgMiwgMywgMUwsIDJMLCAzTCBdCisgICAgICAgIGJhZF92YWx1ZXMgPSBbIC0xLCAtMiwgLTMsIC0xTCwgLTJMLCAtM0wgXQorICAgICAgICBmb3IgayBpbiBnb29kX3ZhbHVlczoKKyAgICAgICAgICAgIHNvY2tldC5udG9obChrKQorICAgICAgICAgICAgc29ja2V0Lm50b2hzKGspCisgICAgICAgICAgICBzb2NrZXQuaHRvbmwoaykKKyAgICAgICAgICAgIHNvY2tldC5odG9ucyhrKQorICAgICAgICBmb3IgayBpbiBiYWRfdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0Lm50b2hsLCBrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0Lm50b2hzLCBrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0Lmh0b25sLCBrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0Lmh0b25zLCBrKQorCisgICAgZGVmIHRlc3RHZXRTZXJ2Qnkoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIEZpbmQgb25lIHNlcnZpY2UgdGhhdCBleGlzdHMsIHRoZW4gY2hlY2sgYWxsIHRoZSByZWxhdGVkIGludGVyZmFjZXMuCisgICAgICAgICMgSSd2ZSBvcmRlcmVkIHRoaXMgYnkgcHJvdG9jb2xzIHRoYXQgaGF2ZSBib3RoIGEgdGNwIGFuZCB1ZHAKKyAgICAgICAgIyBwcm90b2NvbCwgYXQgbGVhc3QgZm9yIG1vZGVybiBMaW51eGVzLgorICAgICAgICBpZiAoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jykgb3IKKyAgICAgICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdmcmVlYnNkJykgb3IKKyAgICAgICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCduZXRic2QnKSBvcgorICAgICAgICAgICAgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nKToKKyAgICAgICAgICAgICMgYXZvaWQgdGhlICdlY2hvJyBzZXJ2aWNlIG9uIHRoaXMgcGxhdGZvcm0sIGFzIHRoZXJlIGlzIGFuCisgICAgICAgICAgICAjIGFzc3VtcHRpb24gYnJlYWtpbmcgbm9uLXN0YW5kYXJkIHBvcnQvcHJvdG9jb2wgZW50cnkKKyAgICAgICAgICAgIHNlcnZpY2VzID0gKCdkYXl0aW1lJywgJ3FvdGQnLCAnZG9tYWluJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlcnZpY2VzID0gKCdlY2hvJywgJ2RheXRpbWUnLCAnZG9tYWluJykKKyAgICAgICAgZm9yIHNlcnZpY2UgaW4gc2VydmljZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcG9ydCA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UsICd0Y3AnKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgorICAgICAgICAjIFRyeSBzYW1lIGNhbGwgd2l0aCBvcHRpb25hbCBwcm90b2NvbCBvbWl0dGVkCisgICAgICAgIHBvcnQyID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSkKKyAgICAgICAgZXEocG9ydCwgcG9ydDIpCisgICAgICAgICMgVHJ5IHVkcCwgYnV0IGRvbid0IGJhcmYgaWYgaXQgZG9lc24ndCBleGlzdAorICAgICAgICB0cnk6CisgICAgICAgICAgICB1ZHBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSwgJ3VkcCcpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICB1ZHBwb3J0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXEodWRwcG9ydCwgcG9ydCkKKyAgICAgICAgIyBOb3cgbWFrZSBzdXJlIHRoZSBsb29rdXAgYnkgcG9ydCByZXR1cm5zIHRoZSBzYW1lIHNlcnZpY2UgbmFtZQorICAgICAgICBlcShzb2NrZXQuZ2V0c2VydmJ5cG9ydChwb3J0MiksIHNlcnZpY2UpCisgICAgICAgIGVxKHNvY2tldC5nZXRzZXJ2Ynlwb3J0KHBvcnQsICd0Y3AnKSwgc2VydmljZSkKKyAgICAgICAgaWYgdWRwcG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVxKHNvY2tldC5nZXRzZXJ2Ynlwb3J0KHVkcHBvcnQsICd1ZHAnKSwgc2VydmljZSkKKyAgICAgICAgIyBNYWtlIHN1cmUgZ2V0c2VydmJ5cG9ydCBkb2VzIG5vdCBhY2NlcHQgb3V0IG9mIHJhbmdlIHBvcnRzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrZXQuZ2V0c2VydmJ5cG9ydCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2tldC5nZXRzZXJ2Ynlwb3J0LCA2NTUzNikKKworICAgIGRlZiB0ZXN0RGVmYXVsdFRpbWVvdXQoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkZWZhdWx0IHRpbWVvdXQKKyAgICAgICAgIyBUaGUgZGVmYXVsdCB0aW1lb3V0IHNob3VsZCBpbml0aWFsbHkgYmUgTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpLCBOb25lKQorICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR0aW1lb3V0KCksIE5vbmUpCisgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICMgU2V0IHRoZSBkZWZhdWx0IHRpbWVvdXQgdG8gMTAsIGFuZCBzZWUgaWYgaXQgcHJvcGFnYXRlcworICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCksIDEwKQorICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR0aW1lb3V0KCksIDEwKQorICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICAjIFJlc2V0IHRoZSBkZWZhdWx0IHRpbWVvdXQgdG8gTm9uZSwgYW5kIHNlZSBpZiBpdCBwcm9wYWdhdGVzCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpLCBOb25lKQorICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR0aW1lb3V0KCksIE5vbmUpCisgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBzZXR0aW5nIGl0IHRvIGFuIGludmFsaWQgdmFsdWUgcmFpc2VzIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0LCAtMSkKKworICAgICAgICAjIENoZWNrIHRoYXQgc2V0dGluZyBpdCB0byBhbiBpbnZhbGlkIHR5cGUgcmFpc2VzIFR5cGVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCwgInNwYW0iKQorCisgICAgZGVmIHRlc3RJUHY0X2luZXRfYXRvbl9mb3VyYnl0ZXMoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgJ2luZXRfYXRvbicpOgorICAgICAgICAgICAgcmV0dXJuICAjIE5vIGluZXRfYXRvbiwgbm90aGluZyB0byBjaGVjaworICAgICAgICAjIFRlc3QgdGhhdCBpc3N1ZTEwMDgwODYgYW5kIGlzc3VlNzY3MTUwIGFyZSBmaXhlZC4KKyAgICAgICAgIyBJdCBtdXN0IHJldHVybiA0IGJ5dGVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwJyo0LCBzb2NrZXQuaW5ldF9hdG9uKCcwLjAuMC4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZmYnKjQsIHNvY2tldC5pbmV0X2F0b24oJzI1NS4yNTUuMjU1LjI1NScpKQorCisgICAgZGVmIHRlc3RJUHY0dG9TdHJpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgJ2luZXRfcHRvbicpOgorICAgICAgICAgICAgcmV0dXJuICMgTm8gaW5ldF9wdG9uKCkgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgaW5ldF9hdG9uIGFzIGYsIGluZXRfcHRvbiwgQUZfSU5FVAorICAgICAgICBnID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVULCBhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBceDAwXHgwMFx4MDAnLCBmKCcwLjAuMC4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZmZceDAwXHhmZlx4MDAnLCBmKCcyNTUuMC4yNTUuMCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGFhXHhhYVx4YWFceGFhJywgZignMTcwLjE3MC4xNzAuMTcwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDFceDAyXHgwM1x4MDQnLCBmKCcxLjIuMy40JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZmZceGZmXHhmZlx4ZmYnLCBmKCcyNTUuMjU1LjI1NS4yNTUnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwXHgwMFx4MDBceDAwJywgZygnMC4wLjAuMCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGZmXHgwMFx4ZmZceDAwJywgZygnMjU1LjAuMjU1LjAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhhYVx4YWFceGFhXHhhYScsIGcoJzE3MC4xNzAuMTcwLjE3MCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGZmXHhmZlx4ZmZceGZmJywgZygnMjU1LjI1NS4yNTUuMjU1JykpCisKKyAgICBkZWYgdGVzdElQdjZ0b1N0cmluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAnaW5ldF9wdG9uJyk6CisgICAgICAgICAgICByZXR1cm4gIyBObyBpbmV0X3B0b24oKSBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gc29ja2V0IGltcG9ydCBpbmV0X3B0b24sIEFGX0lORVQ2LCBoYXNfaXB2NgorICAgICAgICAgICAgaWYgbm90IGhhc19pcHY2OgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZiA9IGxhbWJkYSBhOiBpbmV0X3B0b24oQUZfSU5FVDYsIGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMCcgKiAxNiwgZignOjonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMCcgKiAxNiwgZignMDo6MCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwXHgwMScgKyAnXHgwMCcgKiAxNCwgZignMTo6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnXHg0NVx4ZWZceDc2XHhjYlx4MDBceDFhXHg1Nlx4ZWZceGFmXHhlYlx4MGJceGFjXHgxOVx4MjRceGFlXHhhZScsCisgICAgICAgICAgICBmKCc0NWVmOjc2Y2I6MWE6NTZlZjphZmViOmJhYzoxOTI0OmFlYWUnKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdFN0cmluZ1RvSVB2NChzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAnaW5ldF9udG9wJyk6CisgICAgICAgICAgICByZXR1cm4gIyBObyBpbmV0X250b3AoKSBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgIGZyb20gc29ja2V0IGltcG9ydCBpbmV0X250b2EgYXMgZiwgaW5ldF9udG9wLCBBRl9JTkVUCisgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9udG9wKEFGX0lORVQsIGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMS4wLjEuMCcsIGYoJ1x4MDFceDAwXHgwMVx4MDAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTcwLjg1LjE3MC44NScsIGYoJ1x4YWFceDU1XHhhYVx4NTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMjU1LjI1NS4yNTUuMjU1JywgZignXHhmZlx4ZmZceGZmXHhmZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjIuMy40JywgZignXHgwMVx4MDJceDAzXHgwNCcpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEuMC4xLjAnLCBnKCdceDAxXHgwMFx4MDFceDAwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzE3MC44NS4xNzAuODUnLCBnKCdceGFhXHg1NVx4YWFceDU1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzI1NS4yNTUuMjU1LjI1NScsIGcoJ1x4ZmZceGZmXHhmZlx4ZmYnKSkKKworICAgIGRlZiB0ZXN0U3RyaW5nVG9JUHY2KHNlbGYpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICdpbmV0X250b3AnKToKKyAgICAgICAgICAgIHJldHVybiAjIE5vIGluZXRfbnRvcCgpIG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBzb2NrZXQgaW1wb3J0IGluZXRfbnRvcCwgQUZfSU5FVDYsIGhhc19pcHY2CisgICAgICAgICAgICBpZiBub3QgaGFzX2lwdjY6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVUNiwgYSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc6OicsIGYoJ1x4MDAnICogMTYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc6OjEnLCBmKCdceDAwJyAqIDE1ICsgJ1x4MDEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICdhZWY6YjAxOjUwNjoxMDAxOmZmZmY6OTk5Nzo1NToxNzAnLAorICAgICAgICAgICAgZignXHgwYVx4ZWZceDBiXHgwMVx4MDVceDA2XHgxMFx4MDFceGZmXHhmZlx4OTlceDk3XHgwMFx4NTVceDAxXHg3MCcpCisgICAgICAgICkKKworICAgICMgWFhYIFRoZSBmb2xsb3dpbmcgZG9uJ3QgdGVzdCBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25hbGl0eS4uLgorCisgICAgZGVmIF9nZXRfdW51c2VkX3BvcnQoc2VsZiwgYmluZF9hZGRyZXNzPScwLjAuMC4wJyk6CisgICAgICAgICIiIlVzZSBhIHRlbXBvcmFyeSBzb2NrZXQgdG8gZWxpY2l0IGFuIHVudXNlZCBlcGhlbWVyYWwgcG9ydC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgYmluZF9hZGRyZXNzOiBIb3N0bmFtZSBvciBJUCBhZGRyZXNzIHRvIHNlYXJjaCBmb3IgYSBwb3J0IG9uLgorCisgICAgICAgIFJldHVybnM6IEEgbW9zdCBsaWtlbHkgdG8gYmUgdW51c2VkIHBvcnQuCisgICAgICAgICIiIgorICAgICAgICB0ZW1wc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB0ZW1wc29jay5iaW5kKChiaW5kX2FkZHJlc3MsIDApKQorICAgICAgICBob3N0LCBwb3J0ID0gdGVtcHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICB0ZW1wc29jay5jbG9zZSgpCisgICAgICAgIHJldHVybiBwb3J0CisKKyAgICBkZWYgdGVzdFNvY2tOYW1lKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZ2V0c29ja25hbWUoKQorICAgICAgICBwb3J0ID0gc2VsZi5fZ2V0X3VudXNlZF9wb3J0KCkKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCisgICAgICAgIHNvY2suYmluZCgoIjAuMC4wLjAiLCBwb3J0KSkKKyAgICAgICAgbmFtZSA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICAjIFhYWChubm9yd2l0eik6IGh0dHA6Ly90aW55dXJsLmNvbS9vczVqeiBzZWVtcyB0byBpbmRpY2F0ZQorICAgICAgICAjIGl0IHJlYXNvbmFibGUgdG8gZ2V0IHRoZSBob3N0J3MgYWRkciBpbiBhZGRpdGlvbiB0byAwLjAuMC4wLgorICAgICAgICAjIEF0IGxlYXN0IGZvciBlQ29zLiAgVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIFMvMzkwIHRvIHBhc3MuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG15X2lwX2FkZHIgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShzb2NrZXQuZ2V0aG9zdG5hbWUoKSkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmFzc2VydEluKG5hbWVbMF0sICgiMC4wLjAuMCIsIG15X2lwX2FkZHIpLCAnJXMgaW52YWxpZCcgJSBuYW1lWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVbMV0sIHBvcnQpCisKKyAgICBkZWYgdGVzdEdldFNvY2tPcHQoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBnZXRzb2Nrb3B0KCkKKyAgICAgICAgIyBXZSBrbm93IGEgc29ja2V0IHNob3VsZCBzdGFydCB3aXRob3V0IHJldXNlPT0wCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICByZXVzZSA9IHNvY2suZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXVzZSAhPSAwLCAiaW5pdGlhbCBtb2RlIGlzIHJldXNlIikKKworICAgIGRlZiB0ZXN0U2V0U29ja09wdChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHNldHNvY2tvcHQoKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICByZXVzZSA9IHNvY2suZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXVzZSA9PSAwLCAiZmFpbGVkIHRvIHNldCByZXVzZSBtb2RlIikKKworICAgIGRlZiB0ZXN0U2VuZEFmdGVyQ2xvc2Uoc2VsZik6CisgICAgICAgICMgdGVzdGluZyBzZW5kKCkgYWZ0ZXIgY2xvc2UoKSB3aXRoIHRpbWVvdXQKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29jay5zZXR0aW1lb3V0KDEpCisgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2suc2VuZCwgInNwYW0iKQorCisgICAgZGVmIHRlc3ROZXdBdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIHRlc3RpbmcgLmZhbWlseSwgLnR5cGUgYW5kIC5wcm90b2NvbAorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnByb3RvLCAwKQorICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldHNvY2thZGRyYXJnKHNlbGYpOgorICAgICAgICBob3N0ID0gJzAuMC4wLjAnCisgICAgICAgIHBvcnQgPSBzZWxmLl9nZXRfdW51c2VkX3BvcnQoYmluZF9hZGRyZXNzPWhvc3QpCisgICAgICAgIGJpZ19wb3J0ID0gcG9ydCArIDY1NTM2CisgICAgICAgIG5lZ19wb3J0ID0gcG9ydCAtIDY1NTM2CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29jay5iaW5kLCAoaG9zdCwgYmlnX3BvcnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29jay5iaW5kLCAoaG9zdCwgbmVnX3BvcnQpKQorICAgICAgICAgICAgc29jay5iaW5kKChob3N0LCBwb3J0KSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAibnQiLCAiV2luZG93cyBzcGVjaWZpYyIpCisgICAgZGVmIHRlc3Rfc29ja19pb2N0bChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LnNvY2tldCwgJ2lvY3RsJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNvY2tldCwgJ1NJT19SQ1ZBTEwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LCAnUkNWQUxMX09OJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNvY2tldCwgJ1JDVkFMTF9PRkYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LCAnU0lPX0tFRVBBTElWRV9WQUxTJykpCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMuaW9jdGwsIC0xLCBOb25lKQorICAgICAgICBzLmlvY3RsKHNvY2tldC5TSU9fS0VFUEFMSVZFX1ZBTFMsICgxLCAxMDAsIDEwMCkpCisKKyAgICBkZWYgdGVzdEdldGFkZHJpbmZvKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oJ2xvY2FsaG9zdCcsIDgwKQorICAgICAgICBleGNlcHQgc29ja2V0LmdhaWVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBzb2NrZXQuRUFJX1NFUlZJQ0U6CisgICAgICAgICAgICAgICAgIyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEyODI2NDcKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJidWdneSBsaWJjIHZlcnNpb24iKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgIyBsZW4gb2YgZXZlcnkgc2VxdWVuY2UgaXMgc3VwcG9zZWQgdG8gYmUgPT0gNQorICAgICAgICBmb3IgaW5mbyBpbiBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbmZvKSwgNSkKKyAgICAgICAgIyBob3N0IGNhbiBiZSBhIGRvbWFpbiBuYW1lLCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbgorICAgICAgICAjIElQdjQvdjYgYWRkcmVzcyBvciBOb25lCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbygnbG9jYWxob3N0JywgODApCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbygnMTI3LjAuMC4xJywgODApCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhOb25lLCA4MCkKKyAgICAgICAgaWYgU1VQUE9SVFNfSVBWNjoKKyAgICAgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbygnOjoxJywgODApCisgICAgICAgICMgcG9ydCBjYW4gYmUgYSBzdHJpbmcgc2VydmljZSBuYW1lIHN1Y2ggYXMgImh0dHAiLCBhIG51bWVyaWMKKyAgICAgICAgIyBwb3J0IG51bWJlciAoaW50IG9yIGxvbmcpLCBvciBOb25lCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCAiaHR0cCIpCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCA4MCkKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwTCkKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUpCisgICAgICAgICMgdGVzdCBmYW1pbHkgYW5kIHNvY2t0eXBlIGZpbHRlcnMKKyAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgIGZvciBmYW1pbHksIF8sIF8sIF8sIF8gaW4gaW5mb3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgZm9yIF8sIHNvY2t0eXBlLCBfLCBfLCBfIGluIGluZm9zOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrdHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAjIHRlc3QgcHJvdG8gYW5kIGZsYWdzIGFyZ3VtZW50cworICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgMCwgMCwgc29ja2V0LlNPTF9UQ1ApCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCAwLCAwLCAwLCBzb2NrZXQuQUlfUEFTU0lWRSkKKyAgICAgICAgIyBhIHNlcnZlciB3aWxsaW5nIHRvIHN1cHBvcnQgYm90aCBJUHY0IGFuZCBJUHY2IHdpbGwKKyAgICAgICAgIyB1c3VhbGx5IGRvIHRoaXMKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKE5vbmUsIDAsIHNvY2tldC5BRl9VTlNQRUMsIHNvY2tldC5TT0NLX1NUUkVBTSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5BSV9QQVNTSVZFKQorCisKKyAgICBkZWYgY2hlY2tfc2VuZGFsbF9pbnRlcnJ1cHRlZChzZWxmLCB3aXRoX3RpbWVvdXQpOgorICAgICAgICAjIHNvY2tldHBhaXIoKSBpcyBub3Qgc3RyaWNseSByZXF1aXJlZCwgYnV0IGl0IG1ha2VzIHRoaW5ncyBlYXNpZXIuCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNpZ25hbCwgJ2FsYXJtJykgb3Igbm90IGhhc2F0dHIoc29ja2V0LCAnc29ja2V0cGFpcicpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic2lnbmFsLmFsYXJtIGFuZCBzb2NrZXQuc29ja2V0cGFpciByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICAgICAgIyBPdXIgc2lnbmFsIGhhbmRsZXJzIGNsb2JiZXIgdGhlIEMgZXJybm8gYnkgY2FsbGluZyBhIG1hdGggZnVuY3Rpb24KKyAgICAgICAgIyB3aXRoIGFuIGludmFsaWQgZG9tYWluIHZhbHVlLgorICAgICAgICBkZWYgb2tfaGFuZGxlcigqYXJncyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3NoLCAwKQorICAgICAgICBkZWYgcmFpc2luZ19oYW5kbGVyKCphcmdzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYWNvc2gsIDApCisgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgYywgcyA9IHNvY2tldC5zb2NrZXRwYWlyKCkKKyAgICAgICAgb2xkX2FsYXJtID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgcmFpc2luZ19oYW5kbGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB3aXRoX3RpbWVvdXQ6CisgICAgICAgICAgICAgICAgIyBKdXN0IGFib3ZlIHRoZSBvbmUgc2Vjb25kIG1pbmltdW0gZm9yIHNpZ25hbC5hbGFybQorICAgICAgICAgICAgICAgIGMuc2V0dGltZW91dCgxLjUpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICAgICBjLnNlbmRhbGwoYiJ4IiAqICgxMDI0KioyKSkKKyAgICAgICAgICAgIGlmIHdpdGhfdGltZW91dDoKKyAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBva19oYW5kbGVyKQorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBjLnNlbmRhbGwsIGIieCIgKiAoMTAyNCoqMikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBvbGRfYWxhcm0pCisgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2VuZGFsbF9pbnRlcnJ1cHRlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zZW5kYWxsX2ludGVycnVwdGVkKEZhbHNlKQorCisgICAgZGVmIHRlc3Rfc2VuZGFsbF9pbnRlcnJ1cHRlZF93aXRoX3RpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2VuZGFsbF9pbnRlcnJ1cHRlZChUcnVlKQorCisgICAgZGVmIHRlc3RfbGlzdGVuX2JhY2tsb2coc2VsZik6CisgICAgICAgIGZvciBiYWNrbG9nIGluIDAsIC0xOgorICAgICAgICAgICAgc3J2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc3J2LmJpbmQoKEhPU1QsIDApKQorICAgICAgICAgICAgc3J2Lmxpc3RlbihiYWNrbG9nKQorICAgICAgICAgICAgc3J2LmNsb3NlKCkKKworICAgICAgICAjIElzc3VlIDE1OTg5CisgICAgICAgIHNydiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc3J2LmJpbmQoKEhPU1QsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzcnYubGlzdGVuLCBfdGVzdGNhcGkuSU5UX01BWCArIDEpCisgICAgICAgIHNydi5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhTVVBQT1JUU19JUFY2LCAnSVB2NiByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RfZmxvd2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc6OjEnLDAsIDB4ZmZmZmZmZmYpLCAwKQorICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcy5iaW5kLCAoJzo6MScsIDAsIC0xMCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzLmNsb3NlKCkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgQmFzaWNUQ1BUZXN0KFNvY2tldENvbm5lY3RlZFRlc3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKKyAgICAgICAgU29ja2V0Q29ubmVjdGVkVGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCisKKyAgICBkZWYgdGVzdFJlY3Yoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBsYXJnZSByZWNlaXZlIG92ZXIgVENQCisgICAgICAgIG1zZyA9IHNlbGYuY2xpX2Nvbm4ucmVjdigxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0UmVjdihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChNU0cpCisKKyAgICBkZWYgdGVzdE92ZXJGbG93UmVjdihzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHJlY2VpdmUgaW4gY2h1bmtzIG92ZXIgVENQCisgICAgICAgIHNlZzEgPSBzZWxmLmNsaV9jb25uLnJlY3YobGVuKE1TRykgLSAzKQorICAgICAgICBzZWcyID0gc2VsZi5jbGlfY29ubi5yZWN2KDEwMjQpCisgICAgICAgIG1zZyA9IHNlZzEgKyBzZWcyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RPdmVyRmxvd1JlY3Yoc2VsZik6CisgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoTVNHKQorCisgICAgZGVmIHRlc3RSZWN2RnJvbShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGxhcmdlIHJlY3Zmcm9tKCkgb3ZlciBUQ1AKKyAgICAgICAgbXNnLCBhZGRyID0gc2VsZi5jbGlfY29ubi5yZWN2ZnJvbSgxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0UmVjdkZyb20oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoTVNHKQorCisgICAgZGVmIHRlc3RPdmVyRmxvd1JlY3ZGcm9tKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcmVjdmZyb20oKSBpbiBjaHVua3Mgb3ZlciBUQ1AKKyAgICAgICAgc2VnMSwgYWRkciA9IHNlbGYuY2xpX2Nvbm4ucmVjdmZyb20obGVuKE1TRyktMykKKyAgICAgICAgc2VnMiwgYWRkciA9IHNlbGYuY2xpX2Nvbm4ucmVjdmZyb20oMTAyNCkKKyAgICAgICAgbXNnID0gc2VnMSArIHNlZzIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIGRlZiBfdGVzdE92ZXJGbG93UmVjdkZyb20oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoTVNHKQorCisgICAgZGVmIHRlc3RTZW5kQWxsKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc2VuZGFsbCgpIHdpdGggYSAyMDQ4IGJ5dGUgc3RyaW5nIG92ZXIgVENQCisgICAgICAgIG1zZyA9ICcnCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICByZWFkID0gc2VsZi5jbGlfY29ubi5yZWN2KDEwMjQpCisgICAgICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbXNnICs9IHJlYWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csICdmJyAqIDIwNDgpCisKKyAgICBkZWYgX3Rlc3RTZW5kQWxsKHNlbGYpOgorICAgICAgICBiaWdfY2h1bmsgPSAnZicgKiAyMDQ4CisgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmRhbGwoYmlnX2NodW5rKQorCisgICAgZGVmIHRlc3RGcm9tRmQoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBmcm9tZmQoKQorICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICJmcm9tZmQiKToKKyAgICAgICAgICAgIHJldHVybiAjIE9uIFdpbmRvd3MsIHRoaXMgZG9lc24ndCBleGlzdAorICAgICAgICBmZCA9IHNlbGYuY2xpX2Nvbm4uZmlsZW5vKCkKKyAgICAgICAgc29jayA9IHNvY2tldC5mcm9tZmQoZmQsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICBtc2cgPSBzb2NrLnJlY3YoMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIGRlZiBfdGVzdEZyb21GZChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChNU0cpCisKKyAgICBkZWYgdGVzdER1cChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGR1cCgpCisgICAgICAgIHNvY2sgPSBzZWxmLmNsaV9jb25uLmR1cCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICBtc2cgPSBzb2NrLnJlY3YoMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIGRlZiBfdGVzdER1cChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChNU0cpCisKKyAgICBkZWYgdGVzdFNodXRkb3duKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc2h1dGRvd24oKQorICAgICAgICBtc2cgPSBzZWxmLmNsaV9jb25uLnJlY3YoMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKyAgICAgICAgIyB3YWl0IGZvciBfdGVzdFNodXRkb3duIHRvIGZpbmlzaDogb24gT1MgWCwgd2hlbiB0aGUgc2VydmVyCisgICAgICAgICMgY2xvc2VzIHRoZSBjb25uZWN0aW9uIHRoZSBjbGllbnQgYWxzbyBiZWNvbWVzIGRpc2Nvbm5lY3RlZCwKKyAgICAgICAgIyBhbmQgdGhlIGNsaWVudCdzIHNodXRkb3duIGNhbGwgd2lsbCBmYWlsLiAoSXNzdWUgIzQzOTcuKQorICAgICAgICBzZWxmLmRvbmUud2FpdCgpCisKKyAgICBkZWYgX3Rlc3RTaHV0ZG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChNU0cpCisgICAgICAgICMgSXNzdWUgMTU5ODkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5zZXJ2X2Nvbm4uc2h1dGRvd24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIF90ZXN0Y2FwaS5JTlRfTUFYICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5zZXJ2X2Nvbm4uc2h1dGRvd24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyAoX3Rlc3RjYXBpLlVJTlRfTUFYICsgMSkpCisgICAgICAgIHNlbGYuc2Vydl9jb25uLnNodXRkb3duKDIpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBCYXNpY1VEUFRlc3QoVGhyZWFkZWRVRFBTb2NrZXRUZXN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIFRocmVhZGVkVURQU29ja2V0VGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCisKKyAgICBkZWYgdGVzdFNlbmR0b0FuZFJlY3Yoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzZW5kdG8oKSBhbmQgUmVjdigpIG92ZXIgVURQCisgICAgICAgIG1zZyA9IHNlbGYuc2Vydi5yZWN2KGxlbihNU0cpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0U2VuZHRvQW5kUmVjdihzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuc2VuZHRvKE1TRywgMCwgKEhPU1QsIHNlbGYucG9ydCkpCisKKyAgICBkZWYgdGVzdFJlY3ZGcm9tKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcmVjdmZyb20oKSBvdmVyIFVEUAorICAgICAgICBtc2csIGFkZHIgPSBzZWxmLnNlcnYucmVjdmZyb20obGVuKE1TRykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RSZWN2RnJvbShzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuc2VuZHRvKE1TRywgMCwgKEhPU1QsIHNlbGYucG9ydCkpCisKKyAgICBkZWYgdGVzdFJlY3ZGcm9tTmVnYXRpdmUoc2VsZik6CisgICAgICAgICMgTmVnYXRpdmUgbGVuZ3RocyBwYXNzZWQgdG8gcmVjdmZyb20gc2hvdWxkIGdpdmUgVmFsdWVFcnJvci4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zZXJ2LnJlY3Zmcm9tLCAtMSkKKworICAgIGRlZiBfdGVzdFJlY3ZGcm9tTmVnYXRpdmUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpLnNlbmR0byhNU0csIDAsIChIT1NULCBzZWxmLnBvcnQpKQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVENQQ2xvc2VyVGVzdChUaHJlYWRlZFRDUFNvY2tldFRlc3QpOgorCisgICAgZGVmIHRlc3RDbG9zZShzZWxmKToKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBjb25uLmNsb3NlKCkKKworICAgICAgICBzZCA9IHNlbGYuY2xpCisgICAgICAgIHJlYWQsIHdyaXRlLCBlcnIgPSBzZWxlY3Quc2VsZWN0KFtzZF0sIFtdLCBbXSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWQsIFtzZF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2QucmVjdigxKSwgJycpCisKKyAgICBkZWYgX3Rlc3RDbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuY29ubmVjdCgoSE9TVCwgc2VsZi5wb3J0KSkKKyAgICAgICAgdGltZS5zbGVlcCgxLjApCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBCYXNpY1NvY2tldFBhaXJUZXN0KFNvY2tldFBhaXJUZXN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIFNvY2tldFBhaXJUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKKworICAgIGRlZiB0ZXN0UmVjdihzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5zZXJ2LnJlY3YoMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIGRlZiBfdGVzdFJlY3Yoc2VsZik6CisgICAgICAgIHNlbGYuY2xpLnNlbmQoTVNHKQorCisgICAgZGVmIHRlc3RTZW5kKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYuc2VuZChNU0cpCisKKyAgICBkZWYgX3Rlc3RTZW5kKHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLmNsaS5yZWN2KDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBOb25CbG9ja2luZ1RDUFRlc3RzKFRocmVhZGVkVENQU29ja2V0VGVzdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBUaHJlYWRlZFRDUFNvY2tldFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQorCisgICAgZGVmIHRlc3RTZXRCbG9ja2luZyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHdoZXRoZXIgc2V0IGJsb2NraW5nIHdvcmtzCisgICAgICAgIHNlbGYuc2Vydi5zZXRibG9ja2luZyhUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLnNlcnYuZ2V0dGltZW91dCgpKQorICAgICAgICBzZWxmLnNlcnYuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2LmdldHRpbWVvdXQoKSwgMC4wKQorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIHNldHRpbmcgbm9uLWJsb2NraW5nIG1vZGUuIikKKyAgICAgICAgIyBJc3N1ZSAxNTk4OQorICAgICAgICBpZiBfdGVzdGNhcGkuVUlOVF9NQVggPCBfdGVzdGNhcGkuVUxPTkdfTUFYOgorICAgICAgICAgICAgc2VsZi5zZXJ2LnNldGJsb2NraW5nKF90ZXN0Y2FwaS5VSU5UX01BWCArIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLnNlcnYuZ2V0dGltZW91dCgpKQorCisgICAgZGVmIF90ZXN0U2V0QmxvY2tpbmcoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0QWNjZXB0KHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgbm9uLWJsb2NraW5nIGFjY2VwdAorICAgICAgICBzZWxmLnNlcnYuc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIGFjY2VwdC4iKQorICAgICAgICByZWFkLCB3cml0ZSwgZXJyID0gc2VsZWN0LnNlbGVjdChbc2VsZi5zZXJ2XSwgW10sIFtdKQorICAgICAgICBpZiBzZWxmLnNlcnYgaW4gcmVhZDoKKyAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gYWNjZXB0IGFmdGVyIHNlbGVjdC4iKQorCisgICAgZGVmIF90ZXN0QWNjZXB0KHNlbGYpOgorICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgc2VsZi5jbGkuY29ubmVjdCgoSE9TVCwgc2VsZi5wb3J0KSkKKworICAgIGRlZiB0ZXN0Q29ubmVjdChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIG5vbi1ibG9ja2luZyBjb25uZWN0CisgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisKKyAgICBkZWYgX3Rlc3RDb25uZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5zZXR0aW1lb3V0KDEwKQorICAgICAgICBzZWxmLmNsaS5jb25uZWN0KChIT1NULCBzZWxmLnBvcnQpKQorCisgICAgZGVmIHRlc3RSZWN2KHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgbm9uLWJsb2NraW5nIHJlY3YKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBjb25uLnNldGJsb2NraW5nKDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdihsZW4oTVNHKSkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXJyb3IgdHJ5aW5nIHRvIGRvIG5vbi1ibG9ja2luZyByZWN2LiIpCisgICAgICAgIHJlYWQsIHdyaXRlLCBlcnIgPSBzZWxlY3Quc2VsZWN0KFtjb25uXSwgW10sIFtdKQorICAgICAgICBpZiBjb25uIGluIHJlYWQ6CisgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YobGVuKE1TRykpCisgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIGR1cmluZyBzZWxlY3QgY2FsbCB0byBub24tYmxvY2tpbmcgc29ja2V0LiIpCisKKyAgICBkZWYgX3Rlc3RSZWN2KHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5jb25uZWN0KChIT1NULCBzZWxmLnBvcnQpKQorICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgc2VsZi5jbGkuc2VuZChNU0cpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZShTb2NrZXRDb25uZWN0ZWRUZXN0KToKKworICAgIGJ1ZnNpemUgPSAtMSAjIFVzZSBkZWZhdWx0IGJ1ZmZlciBzaXplCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBTb2NrZXRDb25uZWN0ZWRUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgU29ja2V0Q29ubmVjdGVkVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLnNlcnZfZmlsZSA9IHNlbGYuY2xpX2Nvbm4ubWFrZWZpbGUoJ3JiJywgc2VsZi5idWZzaXplKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZfZmlsZS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNlcnZfZmlsZS5jbG9zZWQpCisgICAgICAgIFNvY2tldENvbm5lY3RlZFRlc3QudGVhckRvd24oc2VsZikKKyAgICAgICAgc2VsZi5zZXJ2X2ZpbGUgPSBOb25lCisKKyAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CisgICAgICAgIFNvY2tldENvbm5lY3RlZFRlc3QuY2xpZW50U2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5jbGlfZmlsZSA9IHNlbGYuc2Vydl9jb25uLm1ha2VmaWxlKCd3YicpCisKKyAgICBkZWYgY2xpZW50VGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2xpX2ZpbGUuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGlfZmlsZS5jbG9zZWQpCisgICAgICAgIHNlbGYuY2xpX2ZpbGUgPSBOb25lCisgICAgICAgIFNvY2tldENvbm5lY3RlZFRlc3QuY2xpZW50VGVhckRvd24oc2VsZikKKworICAgIGRlZiB0ZXN0U21hbGxSZWFkKHNlbGYpOgorICAgICAgICAjIFBlcmZvcm1pbmcgc21hbGwgZmlsZSByZWFkIHRlc3QKKyAgICAgICAgZmlyc3Rfc2VnID0gc2VsZi5zZXJ2X2ZpbGUucmVhZChsZW4oTVNHKS0zKQorICAgICAgICBzZWNvbmRfc2VnID0gc2VsZi5zZXJ2X2ZpbGUucmVhZCgzKQorICAgICAgICBtc2cgPSBmaXJzdF9zZWcgKyBzZWNvbmRfc2VnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RTbWFsbFJlYWQoc2VsZik6CisgICAgICAgIHNlbGYuY2xpX2ZpbGUud3JpdGUoTVNHKQorICAgICAgICBzZWxmLmNsaV9maWxlLmZsdXNoKCkKKworICAgIGRlZiB0ZXN0RnVsbFJlYWQoc2VsZik6CisgICAgICAgICMgcmVhZCB1bnRpbCBFT0YKKyAgICAgICAgbXNnID0gc2VsZi5zZXJ2X2ZpbGUucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RGdWxsUmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5jbGlfZmlsZS53cml0ZShNU0cpCisgICAgICAgIHNlbGYuY2xpX2ZpbGUuY2xvc2UoKQorCisgICAgZGVmIHRlc3RVbmJ1ZmZlcmVkUmVhZChzZWxmKToKKyAgICAgICAgIyBQZXJmb3JtaW5nIHVuYnVmZmVyZWQgZmlsZSByZWFkIHRlc3QKKyAgICAgICAgYnVmID0gJycKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGNoYXIgPSBzZWxmLnNlcnZfZmlsZS5yZWFkKDEpCisgICAgICAgICAgICBpZiBub3QgY2hhcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYnVmICs9IGNoYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIE1TRykKKworICAgIGRlZiBfdGVzdFVuYnVmZmVyZWRSZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmNsaV9maWxlLndyaXRlKE1TRykKKyAgICAgICAgc2VsZi5jbGlfZmlsZS5mbHVzaCgpCisKKyAgICBkZWYgdGVzdFJlYWRsaW5lKHNlbGYpOgorICAgICAgICAjIFBlcmZvcm1pbmcgZmlsZSByZWFkbGluZSB0ZXN0CisgICAgICAgIGxpbmUgPSBzZWxmLnNlcnZfZmlsZS5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgTVNHKQorCisgICAgZGVmIF90ZXN0UmVhZGxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpX2ZpbGUud3JpdGUoTVNHKQorICAgICAgICBzZWxmLmNsaV9maWxlLmZsdXNoKCkKKworICAgIGRlZiB0ZXN0UmVhZGxpbmVBZnRlclJlYWQoc2VsZik6CisgICAgICAgIGFfYmFsb29faXMgPSBzZWxmLnNlcnZfZmlsZS5yZWFkKGxlbigiQSBiYWxvbyBpcyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJBIGJhbG9vIGlzIiwgYV9iYWxvb19pcykKKyAgICAgICAgX2FfYmVhciA9IHNlbGYuc2Vydl9maWxlLnJlYWQobGVuKCIgYSBiZWFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiBhIGJlYXIiLCBfYV9iZWFyKQorICAgICAgICBsaW5lID0gc2VsZi5zZXJ2X2ZpbGUucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJcbiIsIGxpbmUpCisgICAgICAgIGxpbmUgPSBzZWxmLnNlcnZfZmlsZS5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkEgQkFMT08gSVMgQSBCRUFSLlxuIiwgbGluZSkKKyAgICAgICAgbGluZSA9IHNlbGYuc2Vydl9maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNU0csIGxpbmUpCisKKyAgICBkZWYgX3Rlc3RSZWFkbGluZUFmdGVyUmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5jbGlfZmlsZS53cml0ZSgiQSBiYWxvbyBpcyBhIGJlYXJcbiIpCisgICAgICAgIHNlbGYuY2xpX2ZpbGUud3JpdGUoIkEgQkFMT08gSVMgQSBCRUFSLlxuIikKKyAgICAgICAgc2VsZi5jbGlfZmlsZS53cml0ZShNU0cpCisgICAgICAgIHNlbGYuY2xpX2ZpbGUuZmx1c2goKQorCisgICAgZGVmIHRlc3RSZWFkbGluZUFmdGVyUmVhZE5vTmV3bGluZShzZWxmKToKKyAgICAgICAgZW5kX29mXyA9IHNlbGYuc2Vydl9maWxlLnJlYWQobGVuKCJFbmQgT2YgIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkVuZCBPZiAiLCBlbmRfb2ZfKQorICAgICAgICBsaW5lID0gc2VsZi5zZXJ2X2ZpbGUucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJMaW5lIiwgbGluZSkKKworICAgIGRlZiBfdGVzdFJlYWRsaW5lQWZ0ZXJSZWFkTm9OZXdsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLmNsaV9maWxlLndyaXRlKCJFbmQgT2YgTGluZSIpCisKKyAgICBkZWYgdGVzdENsb3NlZEF0dHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5zZXJ2X2ZpbGUuY2xvc2VkKQorCisgICAgZGVmIF90ZXN0Q2xvc2VkQXR0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmNsaV9maWxlLmNsb3NlZCkKKworCitjbGFzcyBGaWxlT2JqZWN0SW50ZXJydXB0ZWRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHRoZSBmaWxlIG9iamVjdCBjb3JyZWN0bHkgaGFuZGxlcyBFSU5UUiBpbnRlcm5hbGx5LiIiIgorCisgICAgY2xhc3MgTW9ja1NvY2tldChvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9mdW5jcz0oKSk6CisgICAgICAgICAgICAjIEEgZ2VuZXJhdG9yIHRoYXQgcmV0dXJucyBjYWxsYWJsZXMgdGhhdCB3ZSdsbCBjYWxsIGZvciBlYWNoCisgICAgICAgICAgICAjIGNhbGwgdG8gcmVjdigpLgorICAgICAgICAgICAgc2VsZi5fcmVjdl9zdGVwID0gaXRlcihyZWN2X2Z1bmNzKQorCisgICAgICAgIGRlZiByZWN2KHNlbGYsIHNpemUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlY3Zfc3RlcC5uZXh0KCkoKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfcmFpc2VfZWludHIoKToKKyAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVJTlRSKQorCisgICAgZGVmIF90ZXN0X3JlYWRsaW5lKHNlbGYsIHNpemU9LTEsICoqa3dhcmdzKToKKyAgICAgICAgbW9ja19zb2NrID0gc2VsZi5Nb2NrU29ja2V0KHJlY3ZfZnVuY3M9WworICAgICAgICAgICAgICAgIGxhbWJkYSA6ICJUaGlzIGlzIHRoZSBmaXJzdCBsaW5lXG5BbmQgdGhlIHNlYyIsCisgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VfZWludHIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogIm9uZCBsaW5lIGlzIGhlcmVcbiIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogIiIsCisgICAgICAgICAgICBdKQorICAgICAgICBmbyA9IHNvY2tldC5fZmlsZW9iamVjdChtb2NrX3NvY2ssICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWRsaW5lKHNpemUpLCAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZVxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkbGluZShzaXplKSwgIkFuZCB0aGUgc2Vjb25kIGxpbmUgaXMgaGVyZVxuIikKKworICAgIGRlZiBfdGVzdF9yZWFkKHNlbGYsIHNpemU9LTEsICoqa3dhcmdzKToKKyAgICAgICAgbW9ja19zb2NrID0gc2VsZi5Nb2NrU29ja2V0KHJlY3ZfZnVuY3M9WworICAgICAgICAgICAgICAgIGxhbWJkYSA6ICJUaGlzIGlzIHRoZSBmaXJzdCBsaW5lXG5BbmQgdGhlIHNlYyIsCisgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VfZWludHIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogIm9uZCBsaW5lIGlzIGhlcmVcbiIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogIiIsCisgICAgICAgICAgICBdKQorICAgICAgICBmbyA9IHNvY2tldC5fZmlsZW9iamVjdChtb2NrX3NvY2ssICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWQoc2l6ZSksICJUaGlzIGlzIHRoZSBmaXJzdCBsaW5lXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICJBbmQgdGhlIHNlY29uZCBsaW5lIGlzIGhlcmVcbiIpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZShzaXplPTEwMCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkKCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkKHNpemU9MTAwKQorCisgICAgZGVmIHRlc3Rfd2l0aF8xa19idWZmZXIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmUoYnVmc2l6ZT0xMDI0KQorICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lKHNpemU9MTAwLCBidWZzaXplPTEwMjQpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZChidWZzaXplPTEwMjQpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZChzaXplPTEwMCwgYnVmc2l6ZT0xMDI0KQorCisgICAgZGVmIF90ZXN0X3JlYWRsaW5lX25vX2J1ZmZlcihzZWxmLCBzaXplPS0xKToKKyAgICAgICAgbW9ja19zb2NrID0gc2VsZi5Nb2NrU29ja2V0KHJlY3ZfZnVuY3M9WworICAgICAgICAgICAgICAgIGxhbWJkYSA6ICJhYSIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogIlxuIiwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiAiQkIiLAorICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlX2VpbnRyLAorICAgICAgICAgICAgICAgIGxhbWJkYSA6ICJiYiIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogIiIsCisgICAgICAgICAgICBdKQorICAgICAgICBmbyA9IHNvY2tldC5fZmlsZW9iamVjdChtb2NrX3NvY2ssIGJ1ZnNpemU9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkbGluZShzaXplKSwgImFhXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWRsaW5lKHNpemUpLCAiQkJiYiIpCisKKyAgICBkZWYgdGVzdF9ub19idWZmZXIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmVfbm9fYnVmZmVyKCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZV9ub19idWZmZXIoc2l6ZT00KQorICAgICAgICBzZWxmLl90ZXN0X3JlYWQoYnVmc2l6ZT0wKQorICAgICAgICBzZWxmLl90ZXN0X3JlYWQoc2l6ZT0xMDAsIGJ1ZnNpemU9MCkKKworCitjbGFzcyBVbmJ1ZmZlcmVkRmlsZU9iamVjdENsYXNzVGVzdENhc2UoRmlsZU9iamVjdENsYXNzVGVzdENhc2UpOgorCisgICAgIiIiUmVwZWF0IHRoZSB0ZXN0cyBmcm9tIEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlIHdpdGggYnVmc2l6ZT09MC4KKworICAgIEluIHRoaXMgY2FzZSAoYW5kIGluIHRoaXMgY2FzZSBvbmx5KSwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvCisgICAgY3JlYXRlIGEgZmlsZSBvYmplY3QsIHJlYWQgYSBsaW5lIGZyb20gaXQsIGNyZWF0ZSBhbm90aGVyIGZpbGUKKyAgICBvYmplY3QsIHJlYWQgYW5vdGhlciBsaW5lIGZyb20gaXQsIHdpdGhvdXQgbG9zcyBvZiBkYXRhIGluIHRoZQorICAgIGZpcnN0IGZpbGUgb2JqZWN0J3MgYnVmZmVyLiAgTm90ZSB0aGF0IGh0dHBsaWIgcmVsaWVzIG9uIHRoaXMKKyAgICB3aGVuIHJlYWRpbmcgbXVsdGlwbGUgcmVxdWVzdHMgZnJvbSB0aGUgc2FtZSBzb2NrZXQuIiIiCisKKyAgICBidWZzaXplID0gMCAjIFVzZSB1bmJ1ZmZlcmVkIG1vZGUKKworICAgIGRlZiB0ZXN0VW5idWZmZXJlZFJlYWRsaW5lKHNlbGYpOgorICAgICAgICAjIFJlYWQgYSBsaW5lLCBjcmVhdGUgYSBuZXcgZmlsZSBvYmplY3QsIHJlYWQgYW5vdGhlciBsaW5lIHdpdGggaXQKKyAgICAgICAgbGluZSA9IHNlbGYuc2Vydl9maWxlLnJlYWRsaW5lKCkgIyBmaXJzdCBsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgIkEuICIgKyBNU0cpICMgZmlyc3QgbGluZQorICAgICAgICBzZWxmLnNlcnZfZmlsZSA9IHNlbGYuY2xpX2Nvbm4ubWFrZWZpbGUoJ3JiJywgMCkKKyAgICAgICAgbGluZSA9IHNlbGYuc2Vydl9maWxlLnJlYWRsaW5lKCkgIyBzZWNvbmQgbGluZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsICJCLiAiICsgTVNHKSAjIHNlY29uZCBsaW5lCisKKyAgICBkZWYgX3Rlc3RVbmJ1ZmZlcmVkUmVhZGxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpX2ZpbGUud3JpdGUoIkEuICIgKyBNU0cpCisgICAgICAgIHNlbGYuY2xpX2ZpbGUud3JpdGUoIkIuICIgKyBNU0cpCisgICAgICAgIHNlbGYuY2xpX2ZpbGUuZmx1c2goKQorCitjbGFzcyBMaW5lQnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZShGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSk6CisKKyAgICBidWZzaXplID0gMSAjIERlZmF1bHQtYnVmZmVyZWQgZm9yIHJlYWRpbmc7IGxpbmUtYnVmZmVyZWQgZm9yIHdyaXRpbmcKKworICAgIGNsYXNzIFNvY2tldE1lbW8ob2JqZWN0KToKKyAgICAgICAgIiIiQSB3cmFwcGVyIHRvIGtlZXAgdHJhY2sgb2Ygc2VudCBkYXRhLCBuZWVkZWQgdG8gZXhhbWluZSB3cml0ZSBiZWhhdmlvdXIiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgorICAgICAgICAgICAgc2VsZi5fc29jayA9IHNvY2sKKyAgICAgICAgICAgIHNlbGYuc2VudCA9IFtdCisKKyAgICAgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSwgZmxhZ3M9MCk6CisgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKGRhdGEsIGZsYWdzKQorICAgICAgICAgICAgc2VsZi5zZW50LmFwcGVuZChkYXRhWzpuXSkKKyAgICAgICAgICAgIHJldHVybiBuCisKKyAgICAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSwgZmxhZ3M9MCk6CisgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmRhbGwoZGF0YSwgZmxhZ3MpCisgICAgICAgICAgICBzZWxmLnNlbnQuYXBwZW5kKGRhdGEpCisKKyAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fc29jaywgYXR0cikKKworICAgICAgICBkZWYgZ2V0c2VudChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBbZS50b2J5dGVzKCkgaWYgaXNpbnN0YW5jZShlLCBtZW1vcnl2aWV3KSBlbHNlIGUgZm9yIGUgaW4gc2VsZi5zZW50XQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZS5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLnNlcnZfZmlsZS5fc29jayA9IHNlbGYuU29ja2V0TWVtbyhzZWxmLnNlcnZfZmlsZS5fc29jaykKKworICAgIGRlZiB0ZXN0TGluZWJ1ZmZlcmVkV3JpdGUoc2VsZik6CisgICAgICAgICMgV3JpdGUgdHdvIGxpbmVzLCBpbiBzbWFsbCBjaHVua3MKKyAgICAgICAgbXNnID0gTVNHLnN0cmlwKCkKKyAgICAgICAgcHJpbnQgPj4gc2VsZi5zZXJ2X2ZpbGUsIG1zZywKKyAgICAgICAgcHJpbnQgPj4gc2VsZi5zZXJ2X2ZpbGUsIG1zZworCisgICAgICAgICMgc2Vjb25kIGxpbmU6CisgICAgICAgIHByaW50ID4+IHNlbGYuc2Vydl9maWxlLCBtc2csCisgICAgICAgIHByaW50ID4+IHNlbGYuc2Vydl9maWxlLCBtc2csCisgICAgICAgIHByaW50ID4+IHNlbGYuc2Vydl9maWxlLCBtc2cKKworICAgICAgICAjIHRoaXJkIGxpbmUKKyAgICAgICAgcHJpbnQgPj4gc2VsZi5zZXJ2X2ZpbGUsICcnCisKKyAgICAgICAgc2VsZi5zZXJ2X2ZpbGUuZmx1c2goKQorCisgICAgICAgIG1zZzEgPSAiJXMgJXNcbiIlKG1zZywgbXNnKQorICAgICAgICBtc2cyID0gICIlcyAlcyAlc1xuIiUobXNnLCBtc2csIG1zZykKKyAgICAgICAgbXNnMyA9ICAiXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2X2ZpbGUuX3NvY2suZ2V0c2VudCgpLCBbbXNnMSwgbXNnMiwgbXNnM10pCisKKyAgICBkZWYgX3Rlc3RMaW5lYnVmZmVyZWRXcml0ZShzZWxmKToKKyAgICAgICAgbXNnID0gTVNHLnN0cmlwKCkKKyAgICAgICAgbXNnMSA9ICIlcyAlc1xuIiUobXNnLCBtc2cpCisgICAgICAgIG1zZzIgPSAgIiVzICVzICVzXG4iJShtc2csIG1zZywgbXNnKQorICAgICAgICBtc2czID0gICJcbiIKKyAgICAgICAgbDEgPSBzZWxmLmNsaV9maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMSwgbXNnMSkKKyAgICAgICAgbDIgPSBzZWxmLmNsaV9maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMiwgbXNnMikKKyAgICAgICAgbDMgPSBzZWxmLmNsaV9maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMywgbXNnMykKKworCitjbGFzcyBTbWFsbEJ1ZmZlcmVkRmlsZU9iamVjdENsYXNzVGVzdENhc2UoRmlsZU9iamVjdENsYXNzVGVzdENhc2UpOgorCisgICAgYnVmc2l6ZSA9IDIgIyBFeGVyY2lzZSB0aGUgYnVmZmVyaW5nIGNvZGUKKworCitjbGFzcyBOZXR3b3JrQ29ubmVjdGlvblRlc3Qob2JqZWN0KToKKyAgICAiIiJQcm92ZSBuZXR3b3JrIGNvbm5lY3Rpb24uIiIiCisgICAgZGVmIGNsaWVudFNldFVwKHNlbGYpOgorICAgICAgICAjIFdlJ3JlIGluaGVyaXRlZCBiZWxvdyBieSBCYXNpY1RDUFRlc3QyLCB3aGljaCBhbHNvIGluaGVyaXRzCisgICAgICAgICMgQmFzaWNUQ1BUZXN0LCB3aGljaCBkZWZpbmVzIHNlbGYucG9ydCByZWZlcmVuY2VkIGJlbG93LgorICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSkKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4gPSBzZWxmLmNsaQorCitjbGFzcyBCYXNpY1RDUFRlc3QyKE5ldHdvcmtDb25uZWN0aW9uVGVzdCwgQmFzaWNUQ1BUZXN0KToKKyAgICAiIiJUZXN0cyB0aGF0IE5ldHdvcmtDb25uZWN0aW9uIGRvZXMgbm90IGJyZWFrIGV4aXN0aW5nIFRDUCBmdW5jdGlvbmFsaXR5LgorICAgICIiIgorCitjbGFzcyBOZXR3b3JrQ29ubmVjdGlvbk5vU2VydmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBNb2NrU29ja2V0KHNvY2tldC5zb2NrZXQpOgorICAgICAgICBkZWYgY29ubmVjdChzZWxmLCAqYXJncyk6CisgICAgICAgICAgICByYWlzZSBzb2NrZXQudGltZW91dCgndGltZWQgb3V0JykKKworICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIG1vY2tlZF9zb2NrZXRfbW9kdWxlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzb2NrZXQgd2hpY2ggdGltZXMgb3V0IG9uIGNvbm5lY3QiIiIKKyAgICAgICAgb2xkX3NvY2tldCA9IHNvY2tldC5zb2NrZXQKKyAgICAgICAgc29ja2V0LnNvY2tldCA9IHNlbGYuTW9ja1NvY2tldAorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNvY2tldCA9IG9sZF9zb2NrZXQKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHBvcnQgPSB0ZXN0X3N1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgIGNsaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsaS5jbG9zZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgY2xpLmNvbm5lY3QoKEhPU1QsIHBvcnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUNPTk5SRUZVU0VEKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk3OTI6IGVycm9ycyByYWlzZWQgYnkgY3JlYXRlX2Nvbm5lY3Rpb24oKSBzaG91bGQgaGF2ZQorICAgICAgICAjIGEgcHJvcGVyIGVycm5vIGF0dHJpYnV0ZS4KKyAgICAgICAgcG9ydCA9IHRlc3Rfc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBwb3J0KSkKKworICAgICAgICAjIElzc3VlICMxNjI1NzogY3JlYXRlX2Nvbm5lY3Rpb24oKSBjYWxscyBnZXRhZGRyaW5mbygpIGFnYWluc3QKKyAgICAgICAgIyAnbG9jYWxob3N0Jy4gIFRoaXMgbWF5IHJlc3VsdCBpbiBhbiBJUFY2IGFkZHIgYmVpbmcgcmV0dXJuZWQKKyAgICAgICAgIyBhcyB3ZWxsIGFzIGFuIElQVjQgb25lOgorICAgICAgICAjICAgPj4+IHNvY2tldC5nZXRhZGRyaW5mbygnbG9jYWxob3N0JywgcG9ydCwgMCwgU09DS19TVFJFQU0pCisgICAgICAgICMgICA+Pj4gWygyLCAgMiwgMCwgJycsICgnMTI3LjAuMC4xJywgNDEyMzApKSwKKyAgICAgICAgIyAgICAgICAgKDI2LCAyLCAwLCAnJywgKCc6OjEnLCA0MTIzMCwgMCwgMCkpXQorICAgICAgICAjCisgICAgICAgICMgY3JlYXRlX2Nvbm5lY3Rpb24oKSBlbnVtZXJhdGVzIHRocm91Z2ggYWxsIHRoZSBhZGRyZXNzZXMgcmV0dXJuZWQKKyAgICAgICAgIyBhbmQgaWYgaXQgZG9lc24ndCBzdWNjZXNzZnVsbHkgYmluZCB0byBhbnkgb2YgdGhlbSwgaXQgcHJvcGFnYXRlcworICAgICAgICAjIHRoZSBsYXN0IGV4Y2VwdGlvbiBpdCBlbmNvdW50ZXJlZC4KKyAgICAgICAgIworICAgICAgICAjIE9uIFNvbGFyaXMsIEVORVRVTlJFQUNIIGlzIHJldHVybmVkIGluIHRoaXMgY2lyY3Vtc3RhbmNlIGluc3RlYWQKKyAgICAgICAgIyBvZiBFQ09OTlJFRlVTRUQuICBTbywgaWYgdGhhdCBlcnJubyBleGlzdHMsIGFkZCBpdCB0byBvdXIgbGlzdCBvZgorICAgICAgICAjIGV4cGVjdGVkIGVycm5vcy4KKyAgICAgICAgZXhwZWN0ZWRfZXJybm9zID0gWyBlcnJuby5FQ09OTlJFRlVTRUQsIF0KKyAgICAgICAgaWYgaGFzYXR0cihlcnJubywgJ0VORVRVTlJFQUNIJyk6CisgICAgICAgICAgICBleHBlY3RlZF9lcnJub3MuYXBwZW5kKGVycm5vLkVORVRVTlJFQUNIKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oY20uZXhjZXB0aW9uLmVycm5vLCBleHBlY3RlZF9lcnJub3MpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl90aW1lb3V0KHNlbGYpOgorICAgICAgICAjIElzc3VlICM5NzkyOiBjcmVhdGVfY29ubmVjdGlvbigpIHNob3VsZCBub3QgcmVjYXN0IHRpbWVvdXQgZXJyb3JzCisgICAgICAgICMgYXMgZ2VuZXJpYyBzb2NrZXQgZXJyb3JzLgorICAgICAgICB3aXRoIHNlbGYubW9ja2VkX3NvY2tldF9tb2R1bGUoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LnRpbWVvdXQpOgorICAgICAgICAgICAgICAgIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgMTIzNCkpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIE5ldHdvcmtDb25uZWN0aW9uQXR0cmlidXRlc1Rlc3QoU29ja2V0VENQVGVzdCwgVGhyZWFkYWJsZVRlc3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKKyAgICAgICAgU29ja2V0VENQVGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCisgICAgICAgIFRocmVhZGFibGVUZXN0Ll9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc291cmNlX3BvcnQgPSB0ZXN0X3N1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisKKyAgICBkZWYgY2xpZW50VGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2xpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jbGkgPSBOb25lCisgICAgICAgIFRocmVhZGFibGVUZXN0LmNsaWVudFRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgX2p1c3RBY2NlcHQoc2VsZik6CisgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisKKyAgICB0ZXN0RmFtaWx5ID0gX2p1c3RBY2NlcHQKKyAgICBkZWYgX3Rlc3RGYW1pbHkoc2VsZik6CisgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpLCB0aW1lb3V0PTMwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5jbGkuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZmFtaWx5LCAyKQorCisgICAgdGVzdFNvdXJjZUFkZHJlc3MgPSBfanVzdEFjY2VwdAorICAgIGRlZiBfdGVzdFNvdXJjZUFkZHJlc3Moc2VsZik6CisgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpLCB0aW1lb3V0PTMwLAorICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPSgnJywgc2VsZi5zb3VyY2VfcG9ydCkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNsaS5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaS5nZXRzb2NrbmFtZSgpWzFdLCBzZWxmLnNvdXJjZV9wb3J0KQorICAgICAgICAjIFRoZSBwb3J0IG51bWJlciBiZWluZyB1c2VkIGlzIHN1ZmZpY2llbnQgdG8gc2hvdyB0aGF0IHRoZSBiaW5kKCkKKyAgICAgICAgIyBjYWxsIGhhcHBlbmVkLgorCisgICAgdGVzdFRpbWVvdXREZWZhdWx0ID0gX2p1c3RBY2NlcHQKKyAgICBkZWYgX3Rlc3RUaW1lb3V0RGVmYXVsdChzZWxmKToKKyAgICAgICAgIyBwYXNzaW5nIG5vIGV4cGxpY2l0IHRpbWVvdXQgdXNlcyBzb2NrZXQncyBnbG9iYWwgZGVmYXVsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDQyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNsaS5jbG9zZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpLmdldHRpbWVvdXQoKSwgNDIpCisKKyAgICB0ZXN0VGltZW91dE5vbmUgPSBfanVzdEFjY2VwdAorICAgIGRlZiBfdGVzdFRpbWVvdXROb25lKHNlbGYpOgorICAgICAgICAjIE5vbmUgdGltZW91dCBtZWFucyB0aGUgc2FtZSBhcyBzb2NrLnNldHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCksIHRpbWVvdXQ9Tm9uZSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNsaS5jbG9zZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpLmdldHRpbWVvdXQoKSwgTm9uZSkKKworICAgIHRlc3RUaW1lb3V0VmFsdWVOYW1lZCA9IF9qdXN0QWNjZXB0CisgICAgZGVmIF90ZXN0VGltZW91dFZhbHVlTmFtZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpLCB0aW1lb3V0PTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpLmdldHRpbWVvdXQoKSwgMzApCisKKyAgICB0ZXN0VGltZW91dFZhbHVlTm9uYW1lZCA9IF9qdXN0QWNjZXB0CisgICAgZGVmIF90ZXN0VGltZW91dFZhbHVlTm9uYW1lZChzZWxmKToKKyAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCksIDMwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5jbGkuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZ2V0dGltZW91dCgpLCAzMCkKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIE5ldHdvcmtDb25uZWN0aW9uQmVoYXZpb3VyVGVzdChTb2NrZXRUQ1BUZXN0LCBUaHJlYWRhYmxlVGVzdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBTb2NrZXRUQ1BUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKKyAgICAgICAgVGhyZWFkYWJsZVRlc3QuX19pbml0X18oc2VsZikKKworICAgIGRlZiBjbGllbnRTZXRVcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNsaWVudFRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5jbG9zZSgpCisgICAgICAgIHNlbGYuY2xpID0gTm9uZQorICAgICAgICBUaHJlYWRhYmxlVGVzdC5jbGllbnRUZWFyRG93bihzZWxmKQorCisgICAgZGVmIHRlc3RJbnNpZGVUaW1lb3V0KHNlbGYpOgorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjb25uLmNsb3NlKQorICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgIGNvbm4uc2VuZCgiZG9uZSEiKQorICAgIHRlc3RPdXRzaWRlVGltZW91dCA9IHRlc3RJbnNpZGVUaW1lb3V0CisKKyAgICBkZWYgX3Rlc3RJbnNpZGVUaW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLmNsaSA9IHNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCkpCisgICAgICAgIGRhdGEgPSBzb2NrLnJlY3YoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiZG9uZSEiKQorCisgICAgZGVmIF90ZXN0T3V0c2lkZVRpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYuY2xpID0gc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgdGltZW91dD0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgbGFtYmRhOiBzb2NrLnJlY3YoNSkpCisKKworY2xhc3MgVXJsbGliMkZpbGVvYmplY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgdXJsbGliMi5IVFRQSGFuZGxlciBoYXMgImJvcnJvd2VkIiBzb2NrZXQuX2ZpbGVvYmplY3QsIGFuZCByZXF1aXJlcyB0aGF0CisgICAgIyBpdCBjbG9zZSB0aGUgc29ja2V0IGlmIHRoZSBjbG9zZSBjJ3RvciBhcmd1bWVudCBpcyB0cnVlCisKKyAgICBkZWYgdGVzdENsb3NlKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2NrU29ja2V0OgorICAgICAgICAgICAgY2xvc2VkID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOiBzZWxmLmNsb3NlZCA9IFRydWUKKworICAgICAgICAjIG11c3Qgbm90IGNsb3NlIHVubGVzcyB3ZSByZXF1ZXN0IGl0OiB0aGUgb3JpZ2luYWwgdXNlIG9mIF9maWxlb2JqZWN0CisgICAgICAgICMgYnkgbW9kdWxlIHNvY2tldCByZXF1aXJlcyB0aGF0IHRoZSB1bmRlcmx5aW5nIHNvY2tldCBub3QgYmUgY2xvc2VkIHVudGlsCisgICAgICAgICMgdGhlIF9zb2NrZXRvYmplY3QgdGhhdCBjcmVhdGVkIHRoZSBfZmlsZW9iamVjdCBpcyBjbG9zZWQKKyAgICAgICAgcyA9IE1vY2tTb2NrZXQoKQorICAgICAgICBmID0gc29ja2V0Ll9maWxlb2JqZWN0KHMpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHMuY2xvc2VkKQorCisgICAgICAgIHMgPSBNb2NrU29ja2V0KCkKKyAgICAgICAgZiA9IHNvY2tldC5fZmlsZW9iamVjdChzLCBjbG9zZT1UcnVlKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuY2xvc2VkKQorCitjbGFzcyBUQ1BUaW1lb3V0VGVzdChTb2NrZXRUQ1BUZXN0KToKKworICAgIGRlZiB0ZXN0VENQVGltZW91dChzZWxmKToKKyAgICAgICAgZGVmIHJhaXNlX3RpbWVvdXQoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHNlbGYuc2Vydi5zZXR0aW1lb3V0KDEuMCkKKyAgICAgICAgICAgIHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgcmFpc2VfdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBnZW5lcmF0aW5nIGEgdGltZW91dCBleGNlcHRpb24gKFRDUCkiKQorCisgICAgZGVmIHRlc3RUaW1lb3V0WmVybyhzZWxmKToKKyAgICAgICAgb2sgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnYuc2V0dGltZW91dCgwLjApCisgICAgICAgICAgICBmb28gPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdGltZW91dCBpbnN0ZWFkIG9mIGVycm9yIChUQ1ApIikKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIG9rID0gVHJ1ZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoVENQKSIpCisgICAgICAgIGlmIG5vdCBvazoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYWNjZXB0KCkgcmV0dXJuZWQgc3VjY2VzcyB3aGVuIHdlIGRpZCBub3QgZXhwZWN0IGl0IikKKworICAgIGRlZiB0ZXN0SW50ZXJydXB0ZWRUaW1lb3V0KHNlbGYpOgorICAgICAgICAjIFhYWCBJIGRvbid0IGtub3cgaG93IHRvIGRvIHRoaXMgdGVzdCBvbiBNU1dpbmRvd3Mgb3IgYW55IG90aGVyCisgICAgICAgICMgcGxhZm9ybSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBzaWduYWwuYWxhcm0oKSBvciBvcy5raWxsKCksIHRob3VnaAorICAgICAgICAjIHRoZSBidWcgc2hvdWxkIGhhdmUgZXhpc3RlZCBvbiBhbGwgcGxhdGZvcm1zLgorICAgICAgICBpZiBub3QgaGFzYXR0cihzaWduYWwsICJhbGFybSIpOgorICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgICAgICAgIyBjYW4gb25seSB0ZXN0IG9uICpuaXgKKyAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoNS4wKSAgICMgbXVzdCBiZSBsb25nZXIgdGhhbiBhbGFybQorICAgICAgICBjbGFzcyBBbGFybShFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgYWxhcm1faGFuZGxlcihzaWduYWwsIGZyYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEFsYXJtCisgICAgICAgIG9sZF9hbGFybSA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGFsYXJtX2hhbmRsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgyKSAgICAjIFBPU0lYIGFsbG93cyBhbGFybSB0byBiZSB1cCB0byAxIHNlY29uZCBlYXJseQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvbyA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHRpbWVvdXQgaW5zdGVhZCBvZiBBbGFybSIpCisgICAgICAgICAgICBleGNlcHQgQWxhcm06CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IG90aGVyIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIEFsYXJtOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAlcyglcyk6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzLmV4Y19pbmZvKClbOjJdICsgKHRyYWNlYmFjay5mb3JtYXRfZXhjKCksKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm90aGluZyBjYXVnaHQiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkgICAgICAgICAjIHNodXQgb2ZmIGFsYXJtCisgICAgICAgIGV4Y2VwdCBBbGFybToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZ290IEFsYXJtIGluIHdyb25nIHBsYWNlIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgbm8gYWxhcm0gY2FuIGJlIHBlbmRpbmcuICBTYWZlIHRvIHJlc3RvcmUgb2xkIGhhbmRsZXIuCisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBvbGRfYWxhcm0pCisKK2NsYXNzIFVEUFRpbWVvdXRUZXN0KFNvY2tldFVEUFRlc3QpOgorCisgICAgZGVmIHRlc3RVRFBUaW1lb3V0KHNlbGYpOgorICAgICAgICBkZWYgcmFpc2VfdGltZW91dCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoMS4wKQorICAgICAgICAgICAgc2VsZi5zZXJ2LnJlY3YoMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LnRpbWVvdXQsIHJhaXNlX3RpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZ2VuZXJhdGluZyBhIHRpbWVvdXQgZXhjZXB0aW9uIChVRFApIikKKworICAgIGRlZiB0ZXN0VGltZW91dFplcm8oc2VsZik6CisgICAgICAgIG9rID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoMC4wKQorICAgICAgICAgICAgZm9vID0gc2VsZi5zZXJ2LnJlY3YoMTAyNCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdGltZW91dCBpbnN0ZWFkIG9mIGVycm9yIChVRFApIikKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIG9rID0gVHJ1ZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoVURQKSIpCisgICAgICAgIGlmIG5vdCBvazoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVjdigpIHJldHVybmVkIHN1Y2Nlc3Mgd2hlbiB3ZSBkaWQgbm90IGV4cGVjdCBpdCIpCisKK2NsYXNzIFRlc3RFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0RXhjZXB0aW9uVHJlZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmVycm9yLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBzb2NrZXQuZXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZ2FpZXJyb3IsIHNvY2tldC5lcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC50aW1lb3V0LCBzb2NrZXQuZXJyb3IpKQorCitjbGFzcyBUZXN0TGludXhBYnN0cmFjdE5hbWVzcGFjZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBVTklYX1BBVEhfTUFYID0gMTA4CisKKyAgICBkZWYgdGVzdExpbnV4QWJzdHJhY3ROYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIGFkZHJlc3MgPSAiXHgwMHB5dGhvbi10ZXN0LWhlbGxvXHgwMFx4ZmYiCisgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzMS5iaW5kKGFkZHJlc3MpCisgICAgICAgIHMxLmxpc3RlbigxKQorICAgICAgICBzMiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgczIuY29ubmVjdChzMS5nZXRzb2NrbmFtZSgpKQorICAgICAgICBzMS5hY2NlcHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLmdldHNvY2tuYW1lKCksIGFkZHJlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczIuZ2V0cGVlcm5hbWUoKSwgYWRkcmVzcykKKworICAgIGRlZiB0ZXN0TWF4TmFtZShzZWxmKToKKyAgICAgICAgYWRkcmVzcyA9ICJceDAwIiArICJoIiAqIChzZWxmLlVOSVhfUEFUSF9NQVggLSAxKQorICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzLmJpbmQoYWRkcmVzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHNvY2tuYW1lKCksIGFkZHJlc3MpCisKKyAgICBkZWYgdGVzdE5hbWVPdmVyZmxvdyhzZWxmKToKKyAgICAgICAgYWRkcmVzcyA9ICJceDAwIiArICJoIiAqIHNlbGYuVU5JWF9QQVRIX01BWAorICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHMuYmluZCwgYWRkcmVzcykKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgQnVmZmVySU9UZXN0KFNvY2tldENvbm5lY3RlZFRlc3QpOgorICAgICIiIgorICAgIFRlc3QgdGhlIGJ1ZmZlciB2ZXJzaW9ucyBvZiBzb2NrZXQucmVjdigpIGFuZCBzb2NrZXQuc2VuZCgpLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIFNvY2tldENvbm5lY3RlZFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQorCisgICAgZGVmIHRlc3RSZWN2SW50b0FycmF5KHNlbGYpOgorICAgICAgICBidWYgPSBhcnJheS5hcnJheSgnYycsICcgJyoxMDI0KQorICAgICAgICBuYnl0ZXMgPSBzZWxmLmNsaV9jb25uLnJlY3ZfaW50byhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKKyAgICAgICAgbXNnID0gYnVmLnRvc3RyaW5nKClbOmxlbihNU0cpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0UmVjdkludG9BcnJheShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgYnVmID0gYnVmZmVyKE1TRykKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChidWYpCisKKyAgICBkZWYgdGVzdFJlY3ZJbnRvQnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBidWYgPSBieXRlYXJyYXkoMTAyNCkKKyAgICAgICAgbmJ5dGVzID0gc2VsZi5jbGlfY29ubi5yZWN2X2ludG8oYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ieXRlcywgbGVuKE1TRykpCisgICAgICAgIG1zZyA9IGJ1Zls6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBfdGVzdFJlY3ZJbnRvQnl0ZWFycmF5ID0gX3Rlc3RSZWN2SW50b0FycmF5CisKKyAgICBkZWYgdGVzdFJlY3ZJbnRvTWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KDEwMjQpCisgICAgICAgIG5ieXRlcyA9IHNlbGYuY2xpX2Nvbm4ucmVjdl9pbnRvKG1lbW9yeXZpZXcoYnVmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQorICAgICAgICBtc2cgPSBidWZbOmxlbihNU0cpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgX3Rlc3RSZWN2SW50b01lbW9yeXZpZXcgPSBfdGVzdFJlY3ZJbnRvQXJyYXkKKworICAgIGRlZiB0ZXN0UmVjdkZyb21JbnRvQXJyYXkoc2VsZik6CisgICAgICAgIGJ1ZiA9IGFycmF5LmFycmF5KCdjJywgJyAnKjEwMjQpCisgICAgICAgIG5ieXRlcywgYWRkciA9IHNlbGYuY2xpX2Nvbm4ucmVjdmZyb21faW50byhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKKyAgICAgICAgbXNnID0gYnVmLnRvc3RyaW5nKClbOmxlbihNU0cpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0UmVjdkZyb21JbnRvQXJyYXkoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcihNU0cpCisgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoYnVmKQorCisgICAgZGVmIHRlc3RSZWN2RnJvbUludG9CeXRlYXJyYXkoc2VsZik6CisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheSgxMDI0KQorICAgICAgICBuYnl0ZXMsIGFkZHIgPSBzZWxmLmNsaV9jb25uLnJlY3Zmcm9tX2ludG8oYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ieXRlcywgbGVuKE1TRykpCisgICAgICAgIG1zZyA9IGJ1Zls6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBfdGVzdFJlY3ZGcm9tSW50b0J5dGVhcnJheSA9IF90ZXN0UmVjdkZyb21JbnRvQXJyYXkKKworICAgIGRlZiB0ZXN0UmVjdkZyb21JbnRvTWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KDEwMjQpCisgICAgICAgIG5ieXRlcywgYWRkciA9IHNlbGYuY2xpX2Nvbm4ucmVjdmZyb21faW50byhtZW1vcnl2aWV3KGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKKyAgICAgICAgbXNnID0gYnVmWzpsZW4oTVNHKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIF90ZXN0UmVjdkZyb21JbnRvTWVtb3J5dmlldyA9IF90ZXN0UmVjdkZyb21JbnRvQXJyYXkKKworCitUSVBDX1NUWVBFID0gMjAwMAorVElQQ19MT1dFUiA9IDIwMAorVElQQ19VUFBFUiA9IDIxMAorCitkZWYgaXNUaXBjQXZhaWxhYmxlKCk6CisgICAgIiIiQ2hlY2sgaWYgdGhlIFRJUEMgbW9kdWxlIGlzIGxvYWRlZAorCisgICAgVGhlIFRJUEMgbW9kdWxlIGlzIG5vdCBsb2FkZWQgYXV0b21hdGljYWxseSBvbiBVYnVudHUgYW5kIHByb2JhYmx5CisgICAgb3RoZXIgTGludXggZGlzdHJvcy4KKyAgICAiIiIKKyAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICJBRl9USVBDIik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgiL3Byb2MvbW9kdWxlcyIpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICB3aXRoIG9wZW4oIi9wcm9jL21vZHVsZXMiKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJ0aXBjICIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgIHByaW50ICJUSVBDIG1vZHVsZSBpcyBub3QgbG9hZGVkLCBwbGVhc2UgJ3N1ZG8gbW9kcHJvYmUgdGlwYyciCisgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIFRJUENUZXN0ICh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RSRE0oc2VsZik6CisgICAgICAgIHNydiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1RJUEMsIHNvY2tldC5TT0NLX1JETSkKKyAgICAgICAgY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVElQQywgc29ja2V0LlNPQ0tfUkRNKQorCisgICAgICAgIHNydi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBzcnZhZGRyID0gKHNvY2tldC5USVBDX0FERFJfTkFNRVNFUSwgVElQQ19TVFlQRSwKKyAgICAgICAgICAgICAgICBUSVBDX0xPV0VSLCBUSVBDX1VQUEVSKQorICAgICAgICBzcnYuYmluZChzcnZhZGRyKQorCisgICAgICAgIHNlbmRhZGRyID0gKHNvY2tldC5USVBDX0FERFJfTkFNRSwgVElQQ19TVFlQRSwKKyAgICAgICAgICAgICAgICBUSVBDX0xPV0VSICsgKFRJUENfVVBQRVIgLSBUSVBDX0xPV0VSKSAvIDIsIDApCisgICAgICAgIGNsaS5zZW5kdG8oTVNHLCBzZW5kYWRkcikKKworICAgICAgICBtc2csIHJlY3ZhZGRyID0gc3J2LnJlY3Zmcm9tKDEwMjQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGkuZ2V0c29ja25hbWUoKSwgcmVjdmFkZHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKworY2xhc3MgVElQQ1RocmVhZGFibGVUZXN0ICh1bml0dGVzdC5UZXN0Q2FzZSwgVGhyZWFkYWJsZVRlc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lID0gJ3J1blRlc3QnKToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUpCisgICAgICAgIFRocmVhZGFibGVUZXN0Ll9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3J2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVElQQywgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnNydi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBzcnZhZGRyID0gKHNvY2tldC5USVBDX0FERFJfTkFNRVNFUSwgVElQQ19TVFlQRSwKKyAgICAgICAgICAgICAgICBUSVBDX0xPV0VSLCBUSVBDX1VQUEVSKQorICAgICAgICBzZWxmLnNydi5iaW5kKHNydmFkZHIpCisgICAgICAgIHNlbGYuc3J2Lmxpc3Rlbig1KQorICAgICAgICBzZWxmLnNlcnZlckV4cGxpY2l0UmVhZHkoKQorICAgICAgICBzZWxmLmNvbm4sIHNlbGYuY29ubmFkZHIgPSBzZWxmLnNydi5hY2NlcHQoKQorCisgICAgZGVmIGNsaWVudFNldFVwKHNlbGYpOgorICAgICAgICAjIFRoZSBpcyBhIGhpdHRhYmxlIHJhY2UgYmV0d2VlbiBzZXJ2ZXJFeHBsaWNpdFJlYWR5KCkgYW5kIHRoZQorICAgICAgICAjIGFjY2VwdCgpIGNhbGw7IHNsZWVwIGEgbGl0dGxlIHdoaWxlIHRvIGF2b2lkIGl0LCBvdGhlcndpc2UKKyAgICAgICAgIyB3ZSBjb3VsZCBnZXQgYW4gZXhjZXB0aW9uCisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1RJUEMsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgYWRkciA9IChzb2NrZXQuVElQQ19BRERSX05BTUUsIFRJUENfU1RZUEUsCisgICAgICAgICAgICAgICAgVElQQ19MT1dFUiArIChUSVBDX1VQUEVSIC0gVElQQ19MT1dFUikgLyAyLCAwKQorICAgICAgICBzZWxmLmNsaS5jb25uZWN0KGFkZHIpCisgICAgICAgIHNlbGYuY2xpYWRkciA9IHNlbGYuY2xpLmdldHNvY2tuYW1lKCkKKworICAgIGRlZiB0ZXN0U3RyZWFtKHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLmNvbm4ucmVjdigxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpYWRkciwgc2VsZi5jb25uYWRkcikKKworICAgIGRlZiBfdGVzdFN0cmVhbShzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuc2VuZChNU0cpCisgICAgICAgIHNlbGYuY2xpLmNsb3NlKCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbR2VuZXJhbE1vZHVsZVRlc3RzLCBCYXNpY1RDUFRlc3QsIFRDUENsb3NlclRlc3QsIFRDUFRpbWVvdXRUZXN0LAorICAgICAgICAgICAgIFRlc3RFeGNlcHRpb25zLCBCdWZmZXJJT1Rlc3QsIEJhc2ljVENQVGVzdDIsIEJhc2ljVURQVGVzdCwKKyAgICAgICAgICAgICBVRFBUaW1lb3V0VGVzdCBdCisKKyAgICB0ZXN0cy5leHRlbmQoWworICAgICAgICBOb25CbG9ja2luZ1RDUFRlc3RzLAorICAgICAgICBGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSwKKyAgICAgICAgRmlsZU9iamVjdEludGVycnVwdGVkVGVzdENhc2UsCisgICAgICAgIFVuYnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSwKKyAgICAgICAgTGluZUJ1ZmZlcmVkRmlsZU9iamVjdENsYXNzVGVzdENhc2UsCisgICAgICAgIFNtYWxsQnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSwKKyAgICAgICAgVXJsbGliMkZpbGVvYmplY3RUZXN0LAorICAgICAgICBOZXR3b3JrQ29ubmVjdGlvbk5vU2VydmVyLAorICAgICAgICBOZXR3b3JrQ29ubmVjdGlvbkF0dHJpYnV0ZXNUZXN0LAorICAgICAgICBOZXR3b3JrQ29ubmVjdGlvbkJlaGF2aW91clRlc3QsCisgICAgXSkKKyAgICBpZiBoYXNhdHRyKHNvY2tldCwgInNvY2tldHBhaXIiKToKKyAgICAgICAgdGVzdHMuYXBwZW5kKEJhc2ljU29ja2V0UGFpclRlc3QpCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICdsaW51eDInOgorICAgICAgICB0ZXN0cy5hcHBlbmQoVGVzdExpbnV4QWJzdHJhY3ROYW1lc3BhY2UpCisgICAgaWYgaXNUaXBjQXZhaWxhYmxlKCk6CisgICAgICAgIHRlc3RzLmFwcGVuZChUSVBDVGVzdCkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFRJUENUaHJlYWRhYmxlVGVzdCkKKworICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCp0aHJlYWRfaW5mbykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYmI4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkKQEAgLTAsMCArMSwzMTkgQEAKKyIiIgorVGVzdCBzdWl0ZSBmb3IgU29ja2V0U2VydmVyLnB5LgorIiIiCisKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgaW1wCitpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBlcnJubworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBTb2NrZXRTZXJ2ZXIKKworaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCByZWFwX2NoaWxkcmVuLCByZWFwX3RocmVhZHMsIHZlcmJvc2UKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCit0ZXN0LnRlc3Rfc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCisKK1RFU1RfU1RSID0gImhlbGxvIHdvcmxkXG4iCitIT1NUID0gdGVzdC50ZXN0X3N1cHBvcnQuSE9TVAorCitIQVZFX1VOSVhfU09DS0VUUyA9IGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpCitIQVZFX0ZPUktJTkcgPSBoYXNhdHRyKG9zLCAiZm9yayIpIGFuZCBvcy5uYW1lICE9ICJvczIiCisKK2RlZiBzaWduYWxfYWxhcm0obik6CisgICAgIiIiQ2FsbCBzaWduYWwuYWxhcm0gd2hlbiBpdCBleGlzdHMgKGkuZS4gbm90IG9uIFdpbmRvd3MpLiIiIgorICAgIGlmIGhhc2F0dHIoc2lnbmFsLCAnYWxhcm0nKToKKyAgICAgICAgc2lnbmFsLmFsYXJtKG4pCisKKyMgUmVtZW1iZXIgcmVhbCBzZWxlY3QoKSB0byBhdm9pZCBpbnRlcmZlcmVuY2VzIHdpdGggbW9ja2luZworX3JlYWxfc2VsZWN0ID0gc2VsZWN0LnNlbGVjdAorCitkZWYgcmVjZWl2ZShzb2NrLCBuLCB0aW1lb3V0PTIwKToKKyAgICByLCB3LCB4ID0gX3JlYWxfc2VsZWN0KFtzb2NrXSwgW10sIFtdLCB0aW1lb3V0KQorICAgIGlmIHNvY2sgaW4gcjoKKyAgICAgICAgcmV0dXJuIHNvY2sucmVjdihuKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgInRpbWVkIG91dCBvbiAlciIgJSAoc29jaywpCisKK2lmIEhBVkVfVU5JWF9TT0NLRVRTOgorICAgIGNsYXNzIEZvcmtpbmdVbml4U3RyZWFtU2VydmVyKFNvY2tldFNlcnZlci5Gb3JraW5nTWl4SW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLlVuaXhTdHJlYW1TZXJ2ZXIpOgorICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBGb3JraW5nVW5peERhdGFncmFtU2VydmVyKFNvY2tldFNlcnZlci5Gb3JraW5nTWl4SW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuVW5peERhdGFncmFtU2VydmVyKToKKyAgICAgICAgcGFzcworCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgc2ltcGxlX3N1YnByb2Nlc3ModGVzdGNhc2UpOgorICAgIHBpZCA9IG9zLmZvcmsoKQorICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAjIERvbid0IHJhaXNlIGFuIGV4Y2VwdGlvbjsgaXQgd291bGQgYmUgY2F1Z2h0IGJ5IHRoZSB0ZXN0IGhhcm5lc3MuCisgICAgICAgIG9zLl9leGl0KDcyKQorICAgIHlpZWxkIE5vbmUKKyAgICBwaWQyLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICB0ZXN0Y2FzZS5hc3NlcnRFcXVhbChwaWQyLCBwaWQpCisgICAgdGVzdGNhc2UuYXNzZXJ0RXF1YWwoNzIgPDwgOCwgc3RhdHVzKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBTb2NrZXRTZXJ2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFsbCBzb2NrZXQgc2VydmVycy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2lnbmFsX2FsYXJtKDYwKSAgIyBLaWxsIGRlYWRsb2NrcyBhZnRlciA2MCBzZWNvbmRzLgorICAgICAgICBzZWxmLnBvcnRfc2VlZCA9IDAKKyAgICAgICAgc2VsZi50ZXN0X2ZpbGVzID0gW10KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2lnbmFsX2FsYXJtKDApICAjIERpZG4ndCBkZWFkbG9jay4KKyAgICAgICAgcmVhcF9jaGlsZHJlbigpCisKKyAgICAgICAgZm9yIGZuIGluIHNlbGYudGVzdF9maWxlczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLnRlc3RfZmlsZXNbOl0gPSBbXQorCisgICAgZGVmIHBpY2thZGRyKHNlbGYsIHByb3RvKToKKyAgICAgICAgaWYgcHJvdG8gPT0gc29ja2V0LkFGX0lORVQ6CisgICAgICAgICAgICByZXR1cm4gKEhPU1QsIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFhYWDogV2UgbmVlZCBhIHdheSB0byB0ZWxsIEFGX1VOSVggdG8gcGljayBpdHMgb3duIG5hbWUKKyAgICAgICAgICAgICMgbGlrZSBBRl9JTkVUIHByb3ZpZGVzIHBvcnQ9PTAuCisgICAgICAgICAgICBkaXIgPSBOb25lCisgICAgICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgorICAgICAgICAgICAgICAgIGRpciA9ICdcc29ja2V0JworICAgICAgICAgICAgZm4gPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd1bml4X3NvY2tldC4nLCBkaXI9ZGlyKQorICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKKyAgICAgICAgICAgICAgICAjIEFGX1VOSVggc29ja2V0IG5hbWVzIG9uIE9TLzIgcmVxdWlyZSBhIHNwZWNpZmljIHByZWZpeAorICAgICAgICAgICAgICAgICMgd2hpY2ggY2FuJ3QgaW5jbHVkZSBhIGRyaXZlIGxldHRlciBhbmQgbXVzdCBhbHNvIHVzZQorICAgICAgICAgICAgICAgICMgYmFja3NsYXNoZXMgYXMgZGlyZWN0b3J5IHNlcGFyYXRvcnMKKyAgICAgICAgICAgICAgICBpZiBmblsxXSA9PSAnOic6CisgICAgICAgICAgICAgICAgICAgIGZuID0gZm5bMjpdCisgICAgICAgICAgICAgICAgaWYgZm5bMF0gaW4gKG9zLnNlcCwgb3MuYWx0c2VwKToKKyAgICAgICAgICAgICAgICAgICAgZm4gPSBmblsxOl0KKyAgICAgICAgICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICAgICAgICAgICAgICBmbiA9IGZuLnJlcGxhY2Uob3Muc2VwLCBvcy5hbHRzZXApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZm4gPSBmbi5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQorICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzLmFwcGVuZChmbikKKyAgICAgICAgICAgIHJldHVybiBmbgorCisgICAgZGVmIG1ha2Vfc2VydmVyKHNlbGYsIGFkZHIsIHN2cmNscywgaGRscmJhc2UpOgorICAgICAgICBjbGFzcyBNeVNlcnZlcihzdnJjbHMpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgY2xhc3MgTXlIYW5kbGVyKGhkbHJiYXNlKToKKyAgICAgICAgICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYucmZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUobGluZSkKKworICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiY3JlYXRpbmcgc2VydmVyIgorICAgICAgICBzZXJ2ZXIgPSBNeVNlcnZlcihhZGRyLCBNeUhhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBzZXJ2ZXIuc29ja2V0LmdldHNvY2tuYW1lKCkpCisgICAgICAgIHJldHVybiBzZXJ2ZXIKKworICAgIEByZWFwX3RocmVhZHMKKyAgICBkZWYgcnVuX3NlcnZlcihzZWxmLCBzdnJjbHMsIGhkbHJiYXNlLCB0ZXN0ZnVuYyk6CisgICAgICAgIHNlcnZlciA9IHNlbGYubWFrZV9zZXJ2ZXIoc2VsZi5waWNrYWRkcihzdnJjbHMuYWRkcmVzc19mYW1pbHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2cmNscywgaGRscmJhc2UpCisgICAgICAgICMgV2UgaGFkIHRoZSBPUyBwaWNrIGEgcG9ydCwgc28gcHVsbCB0aGUgcmVhbCBhZGRyZXNzIG91dCBvZgorICAgICAgICAjIHRoZSBzZXJ2ZXIuCisgICAgICAgIGFkZHIgPSBzZXJ2ZXIuc2VydmVyX2FkZHJlc3MKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJzZXJ2ZXIgY3JlYXRlZCIKKyAgICAgICAgICAgIHByaW50ICJBRERSID0iLCBhZGRyCisgICAgICAgICAgICBwcmludCAiQ0xBU1MgPSIsIHN2cmNscworICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCgKKyAgICAgICAgICAgIG5hbWU9JyVzIHNlcnZpbmcnICUgc3ZyY2xzLAorICAgICAgICAgICAgdGFyZ2V0PXNlcnZlci5zZXJ2ZV9mb3JldmVyLAorICAgICAgICAgICAgIyBTaG9ydCBwb2xsIGludGVydmFsIHRvIG1ha2UgdGhlIHRlc3QgZmluaXNoIHF1aWNrbHkuCisgICAgICAgICAgICAjIFRpbWUgYmV0d2VlbiByZXF1ZXN0cyBpcyBzaG9ydCBlbm91Z2ggdGhhdCB3ZSB3b24ndCB3YWtlCisgICAgICAgICAgICAjIHVwIHNwdXJpb3VzbHkgdG9vIG1hbnkgdGltZXMuCisgICAgICAgICAgICBrd2FyZ3M9eydwb2xsX2ludGVydmFsJzowLjAxfSkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlICAjIEluIGNhc2UgdGhpcyBmdW5jdGlvbiByYWlzZXMuCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAic2VydmVyIHJ1bm5pbmciCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgInRlc3QgY2xpZW50IiwgaQorICAgICAgICAgICAgdGVzdGZ1bmMoc3ZyY2xzLmFkZHJlc3NfZmFtaWx5LCBhZGRyKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAid2FpdGluZyBmb3Igc2VydmVyIgorICAgICAgICBzZXJ2ZXIuc2h1dGRvd24oKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiZG9uZSIKKworICAgIGRlZiBzdHJlYW1fZXhhbWluZShzZWxmLCBwcm90bywgYWRkcik6CisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHByb3RvLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHMuY29ubmVjdChhZGRyKQorICAgICAgICBzLnNlbmRhbGwoVEVTVF9TVFIpCisgICAgICAgIGJ1ZiA9IGRhdGEgPSByZWNlaXZlKHMsIDEwMCkKKyAgICAgICAgd2hpbGUgZGF0YSBhbmQgJ1xuJyBub3QgaW4gYnVmOgorICAgICAgICAgICAgZGF0YSA9IHJlY2VpdmUocywgMTAwKQorICAgICAgICAgICAgYnVmICs9IGRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIFRFU1RfU1RSKQorICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiBkZ3JhbV9leGFtaW5lKHNlbGYsIHByb3RvLCBhZGRyKToKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQocHJvdG8sIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBzLnNlbmR0byhURVNUX1NUUiwgYWRkcikKKyAgICAgICAgYnVmID0gZGF0YSA9IHJlY2VpdmUocywgMTAwKQorICAgICAgICB3aGlsZSBkYXRhIGFuZCAnXG4nIG5vdCBpbiBidWY6CisgICAgICAgICAgICBkYXRhID0gcmVjZWl2ZShzLCAxMDApCisgICAgICAgICAgICBidWYgKz0gZGF0YQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgVEVTVF9TVFIpCisgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfVENQU2VydmVyKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl9zZXJ2ZXIoU29ja2V0U2VydmVyLlRDUFNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2V4YW1pbmUpCisKKyAgICBkZWYgdGVzdF9UaHJlYWRpbmdUQ1BTZXJ2ZXIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nVENQU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1fZXhhbWluZSkKKworICAgIGlmIEhBVkVfRk9SS0lORzoKKyAgICAgICAgZGVmIHRlc3RfRm9ya2luZ1RDUFNlcnZlcihzZWxmKToKKyAgICAgICAgICAgIHdpdGggc2ltcGxlX3N1YnByb2Nlc3Moc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5fc2VydmVyKFNvY2tldFNlcnZlci5Gb3JraW5nVENQU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2V4YW1pbmUpCisKKyAgICBpZiBIQVZFX1VOSVhfU09DS0VUUzoKKyAgICAgICAgZGVmIHRlc3RfVW5peFN0cmVhbVNlcnZlcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuVW5peFN0cmVhbVNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1fZXhhbWluZSkKKworICAgICAgICBkZWYgdGVzdF9UaHJlYWRpbmdVbml4U3RyZWFtU2VydmVyKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5ydW5fc2VydmVyKFNvY2tldFNlcnZlci5UaHJlYWRpbmdVbml4U3RyZWFtU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9leGFtaW5lKQorCisgICAgICAgIGlmIEhBVkVfRk9SS0lORzoKKyAgICAgICAgICAgIGRlZiB0ZXN0X0ZvcmtpbmdVbml4U3RyZWFtU2VydmVyKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2ltcGxlX3N1YnByb2Nlc3Moc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVuX3NlcnZlcihGb3JraW5nVW5peFN0cmVhbVNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2V4YW1pbmUpCisKKyAgICBkZWYgdGVzdF9VRFBTZXJ2ZXIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuVURQU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLkRhdGFncmFtUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRncmFtX2V4YW1pbmUpCisKKyAgICBkZWYgdGVzdF9UaHJlYWRpbmdVRFBTZXJ2ZXIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nVURQU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLkRhdGFncmFtUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRncmFtX2V4YW1pbmUpCisKKyAgICBpZiBIQVZFX0ZPUktJTkc6CisgICAgICAgIGRlZiB0ZXN0X0ZvcmtpbmdVRFBTZXJ2ZXIoc2VsZik6CisgICAgICAgICAgICB3aXRoIHNpbXBsZV9zdWJwcm9jZXNzKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuRm9ya2luZ1VEUFNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLkRhdGFncmFtUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGdyYW1fZXhhbWluZSkKKworICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIG1vY2tlZF9zZWxlY3RfbW9kdWxlKHNlbGYpOgorICAgICAgICAiIiJNb2NrcyB0aGUgc2VsZWN0LnNlbGVjdCgpIGNhbGwgdG8gcmFpc2UgRUlOVFIgZm9yIGZpcnN0IGNhbGwiIiIKKyAgICAgICAgb2xkX3NlbGVjdCA9IHNlbGVjdC5zZWxlY3QKKworICAgICAgICBjbGFzcyBNb2NrU2VsZWN0OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gMAorCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGVkICs9IDEKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNhbGxlZCA9PSAxOgorICAgICAgICAgICAgICAgICAgICAjIHJhaXNlIHRoZSBleGNlcHRpb24gb24gZmlyc3QgY2FsbAorICAgICAgICAgICAgICAgICAgICByYWlzZSBzZWxlY3QuZXJyb3IoZXJybm8uRUlOVFIsIG9zLnN0cmVycm9yKGVycm5vLkVJTlRSKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFJldHVybiByZWFsIHNlbGVjdCB2YWx1ZSBmb3IgY29uc2VjdXRpdmUgY2FsbHMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZF9zZWxlY3QoKmFyZ3MpCisKKyAgICAgICAgc2VsZWN0LnNlbGVjdCA9IE1vY2tTZWxlY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBzZWxlY3Quc2VsZWN0CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxlY3Quc2VsZWN0ID0gb2xkX3NlbGVjdAorCisgICAgZGVmIHRlc3RfSW50ZXJydXB0U2VydmVyU2VsZWN0Q2FsbChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tlZF9zZWxlY3RfbW9kdWxlKCkgYXMgbW9ja19zZWxlY3Q6CisgICAgICAgICAgICBwaWQgPSBzZWxmLnJ1bl9zZXJ2ZXIoU29ja2V0U2VydmVyLlRDUFNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1fZXhhbWluZSkKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHNlbGVjdCB3YXMgY2FsbGVkIGFnYWluOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKG1vY2tfc2VsZWN0LmNhbGxlZCwgMSkKKworICAgICMgQWxhcywgb24gTGludXggKGF0IGxlYXN0KSByZWN2ZnJvbSgpIGRvZXNuJ3QgcmV0dXJuIGEgbWVhbmluZ2Z1bAorICAgICMgY2xpZW50IGFkZHJlc3Mgc28gdGhpcyBjYW5ub3Qgd29yazoKKworICAgICMgaWYgSEFWRV9VTklYX1NPQ0tFVFM6CisgICAgIyAgICAgZGVmIHRlc3RfVW5peERhdGFncmFtU2VydmVyKHNlbGYpOgorICAgICMgICAgICAgICBzZWxmLnJ1bl9zZXJ2ZXIoU29ja2V0U2VydmVyLlVuaXhEYXRhZ3JhbVNlcnZlciwKKyAgICAjICAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAorICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZ3JhbV9leGFtaW5lKQorICAgICMKKyAgICAjICAgICBkZWYgdGVzdF9UaHJlYWRpbmdVbml4RGF0YWdyYW1TZXJ2ZXIoc2VsZik6CisgICAgIyAgICAgICAgIHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuVGhyZWFkaW5nVW5peERhdGFncmFtU2VydmVyLAorICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLkRhdGFncmFtUmVxdWVzdEhhbmRsZXIsCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRncmFtX2V4YW1pbmUpCisgICAgIworICAgICMgICAgIGlmIEhBVkVfRk9SS0lORzoKKyAgICAjICAgICAgICAgZGVmIHRlc3RfRm9ya2luZ1VuaXhEYXRhZ3JhbVNlcnZlcihzZWxmKToKKyAgICAjICAgICAgICAgICAgIHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuRm9ya2luZ1VuaXhEYXRhZ3JhbVNlcnZlciwKKyAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRncmFtX2V4YW1pbmUpCisKKyAgICBAcmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3Rfc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIzMDI6IHNodXRkb3duKCkgc2hvdWxkIGFsd2F5cyBzdWNjZWVkIGluIG1ha2luZyBhbgorICAgICAgICAjIG90aGVyIHRocmVhZCBsZWF2ZSBzZXJ2ZV9mb3JldmVyKCkuCisgICAgICAgIGNsYXNzIE15U2VydmVyKFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIE15SGFuZGxlcihTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRocmVhZHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICBzID0gTXlTZXJ2ZXIoKEhPU1QsIDApLCBNeUhhbmRsZXIpCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCgKKyAgICAgICAgICAgICAgICBuYW1lPSdNeVNlcnZlciBzZXJ2aW5nJywKKyAgICAgICAgICAgICAgICB0YXJnZXQ9cy5zZXJ2ZV9mb3JldmVyLAorICAgICAgICAgICAgICAgIGt3YXJncz17J3BvbGxfaW50ZXJ2YWwnOjAuMDF9KQorICAgICAgICAgICAgdC5kYWVtb24gPSBUcnVlICAjIEluIGNhc2UgdGhpcyBmdW5jdGlvbiByYWlzZXMuCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCgodCwgcykpCisgICAgICAgIGZvciB0LCBzIGluIHRocmVhZHM6CisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHMuc2h1dGRvd24oKQorICAgICAgICBmb3IgdCwgcyBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgaWYgaW1wLmxvY2tfaGVsZCgpOgorICAgICAgICAjIElmIHRoZSBpbXBvcnQgbG9jayBpcyBoZWxkLCB0aGUgdGhyZWFkcyB3aWxsIGhhbmcKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImNhbid0IHJ1biB3aGVuIGltcG9ydCBsb2NrIGlzIGhlbGQiKQorCisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFNvY2tldFNlcnZlclRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NvZnRzcGFjZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NvZnRzcGFjZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTlhMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc29mdHNwYWNlLnB5CkBAIC0wLDAgKzEsMjMgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgU3RyaW5nSU8KKworY2xhc3MgU29mdHNwYWNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2J1Z180ODAyMTUoc2VsZik6CisgICAgICAgICMgU0YgYnVnIDQ4MDIxNTogIHNvZnRzcGFjZSBjb25mdXNlZCBpbiBuZXN0ZWQgcHJpbnQKKyAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGYsICdhJworICAgICAgICAgICAgICAgIHJldHVybiAnYicKKworICAgICAgICBwcmludCA+PiBmLCBDKCksICdjICcsICdkXHQnLCAnZScKKyAgICAgICAgcHJpbnQgPj4gZiwgJ2YnLCAnZycKKyAgICAgICAgIyBJbiAyLjIgJiBlYXJsaWVyLCB0aGlzIHByaW50ZWQgJyBhXG5iYyAgZFx0ZVxuZiBnXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXR2YWx1ZSgpLCAnYVxuYiBjICBkXHRlXG5mIGdcbicpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoU29mdHNwYWNlVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NvcnQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWFiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zb3J0LnB5CkBAIC0wLDAgKzEsMjkyIEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK3ZlcmJvc2UgPSB0ZXN0X3N1cHBvcnQudmVyYm9zZQorbmVycm9ycyA9IDAKKworZGVmIGNoZWNrKHRhZywgZXhwZWN0ZWQsIHJhdywgY29tcGFyZT1Ob25lKToKKyAgICBnbG9iYWwgbmVycm9ycworCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgIiAgICBjaGVja2luZyIsIHRhZworCisgICAgb3JpZyA9IHJhd1s6XSAgICMgc2F2ZSBpbnB1dCBpbiBjYXNlIG9mIGVycm9yCisgICAgaWYgY29tcGFyZToKKyAgICAgICAgcmF3LnNvcnQoY29tcGFyZSkKKyAgICBlbHNlOgorICAgICAgICByYXcuc29ydCgpCisKKyAgICBpZiBsZW4oZXhwZWN0ZWQpICE9IGxlbihyYXcpOgorICAgICAgICBwcmludCAiZXJyb3IgaW4iLCB0YWcKKyAgICAgICAgcHJpbnQgImxlbmd0aCBtaXNtYXRjaDsiLCBsZW4oZXhwZWN0ZWQpLCBsZW4ocmF3KQorICAgICAgICBwcmludCBleHBlY3RlZAorICAgICAgICBwcmludCBvcmlnCisgICAgICAgIHByaW50IHJhdworICAgICAgICBuZXJyb3JzICs9IDEKKyAgICAgICAgcmV0dXJuCisKKyAgICBmb3IgaSwgZ29vZCBpbiBlbnVtZXJhdGUoZXhwZWN0ZWQpOgorICAgICAgICBtYXliZSA9IHJhd1tpXQorICAgICAgICBpZiBnb29kIGlzIG5vdCBtYXliZToKKyAgICAgICAgICAgIHByaW50ICJlcnJvciBpbiIsIHRhZworICAgICAgICAgICAgcHJpbnQgIm91dCBvZiBvcmRlciBhdCBpbmRleCIsIGksIGdvb2QsIG1heWJlCisgICAgICAgICAgICBwcmludCBleHBlY3RlZAorICAgICAgICAgICAgcHJpbnQgb3JpZworICAgICAgICAgICAgcHJpbnQgcmF3CisgICAgICAgICAgICBuZXJyb3JzICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCitjbGFzcyBUZXN0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RTdHJlc3NmdWxseShzZWxmKToKKyAgICAgICAgIyBUcnkgYSB2YXJpZXR5IG9mIHNpemVzIGF0IGFuZCBhcm91bmQgcG93ZXJzIG9mIDIsIGFuZCBhdCBwb3dlcnMgb2YgMTAuCisgICAgICAgIHNpemVzID0gWzBdCisgICAgICAgIGZvciBwb3dlciBpbiByYW5nZSgxLCAxMCk6CisgICAgICAgICAgICBuID0gMiAqKiBwb3dlcgorICAgICAgICAgICAgc2l6ZXMuZXh0ZW5kKHJhbmdlKG4tMSwgbisyKSkKKyAgICAgICAgc2l6ZXMuZXh0ZW5kKFsxMCwgMTAwLCAxMDAwXSkKKworICAgICAgICBjbGFzcyBDb21wbGFpbnMob2JqZWN0KToKKyAgICAgICAgICAgIG1heWJlX2NvbXBsYWluID0gVHJ1ZQorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgc2VsZi5pID0gaQorCisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBDb21wbGFpbnMubWF5YmVfY29tcGxhaW4gYW5kIHJhbmRvbS5yYW5kb20oKSA8IDAuMDAxOgorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgICAgICAgY29tcGxhaW5pbmcgYXQiLCBzZWxmLCBvdGhlcgorICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pIDwgb3RoZXIuaQorCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDb21wbGFpbnMoJWQpIiAlIHNlbGYuaQorCisgICAgICAgIGNsYXNzIFN0YWJsZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtleSwgaSk6CisgICAgICAgICAgICAgICAgc2VsZi5rZXkgPSBrZXkKKyAgICAgICAgICAgICAgICBzZWxmLmluZGV4ID0gaQorCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmtleSwgb3RoZXIua2V5KQorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKworICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiU3RhYmxlKCVkLCAlZCkiICUgKHNlbGYua2V5LCBzZWxmLmluZGV4KQorCisgICAgICAgIGZvciBuIGluIHNpemVzOgorICAgICAgICAgICAgeCA9IHJhbmdlKG4pCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJUZXN0aW5nIHNpemUiLCBuCisKKyAgICAgICAgICAgIHMgPSB4WzpdCisgICAgICAgICAgICBjaGVjaygiaWRlbnRpdHkiLCB4LCBzKQorCisgICAgICAgICAgICBzID0geFs6XQorICAgICAgICAgICAgcy5yZXZlcnNlKCkKKyAgICAgICAgICAgIGNoZWNrKCJyZXZlcnNlZCIsIHgsIHMpCisKKyAgICAgICAgICAgIHMgPSB4WzpdCisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShzKQorICAgICAgICAgICAgY2hlY2soInJhbmRvbSBwZXJtdXRhdGlvbiIsIHgsIHMpCisKKyAgICAgICAgICAgIHkgPSB4WzpdCisgICAgICAgICAgICB5LnJldmVyc2UoKQorICAgICAgICAgICAgcyA9IHhbOl0KKyAgICAgICAgICAgIGNoZWNrKCJyZXZlcnNlZCB2aWEgZnVuY3Rpb24iLCB5LCBzLCBsYW1iZGEgYSwgYjogY21wKGIsIGEpKQorCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICIgICAgQ2hlY2tpbmcgYWdhaW5zdCBhbiBpbnNhbmUgY29tcGFyaXNvbiBmdW5jdGlvbi4iCisgICAgICAgICAgICAgICAgcHJpbnQgIiAgICAgICAgSWYgdGhlIGltcGxlbWVudGF0aW9uIGlzbid0IGNhcmVmdWwsIHRoaXMgbWF5IHNlZ2ZhdWx0LiIKKyAgICAgICAgICAgIHMgPSB4WzpdCisgICAgICAgICAgICBzLnNvcnQobGFtYmRhIGEsIGI6ICBpbnQocmFuZG9tLnJhbmRvbSgpICogMykgLSAxKQorICAgICAgICAgICAgY2hlY2soImFuIGluc2FuZSBmdW5jdGlvbiBsZWZ0IHNvbWUgcGVybXV0YXRpb24iLCB4LCBzKQorCisgICAgICAgICAgICB4ID0gW0NvbXBsYWlucyhpKSBmb3IgaSBpbiB4XQorICAgICAgICAgICAgcyA9IHhbOl0KKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHMpCisgICAgICAgICAgICBDb21wbGFpbnMubWF5YmVfY29tcGxhaW4gPSBUcnVlCisgICAgICAgICAgICBpdF9jb21wbGFpbmVkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLnNvcnQoKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBpdF9jb21wbGFpbmVkID0gVHJ1ZQorICAgICAgICAgICAgaWYgaXRfY29tcGxhaW5lZDoKKyAgICAgICAgICAgICAgICBDb21wbGFpbnMubWF5YmVfY29tcGxhaW4gPSBGYWxzZQorICAgICAgICAgICAgICAgIGNoZWNrKCJleGNlcHRpb24gZHVyaW5nIHNvcnQgbGVmdCBzb21lIHBlcm11dGF0aW9uIiwgeCwgcykKKworICAgICAgICAgICAgcyA9IFtTdGFibGUocmFuZG9tLnJhbmRyYW5nZSgxMCksIGkpIGZvciBpIGluIHhyYW5nZShuKV0KKyAgICAgICAgICAgIGF1Z21lbnRlZCA9IFsoZSwgZS5pbmRleCkgZm9yIGUgaW4gc10KKyAgICAgICAgICAgIGF1Z21lbnRlZC5zb3J0KCkgICAgIyBmb3JjZWQgc3RhYmxlIGJlY2F1c2UgdGllcyBicm9rZW4gYnkgaW5kZXgKKyAgICAgICAgICAgIHggPSBbZSBmb3IgZSwgaSBpbiBhdWdtZW50ZWRdICMgYSBzdGFibGUgc29ydCBvZiBzCisgICAgICAgICAgICBjaGVjaygic3RhYmlsaXR5IiwgeCwgcykKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QnVncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9idWc0NTM1MjMoc2VsZik6CisgICAgICAgICMgYnVnIDQ1MzUyMyAtLSBsaXN0LnNvcnQoKSBjcmFzaGVyLgorICAgICAgICAjIElmIHRoaXMgZmFpbHMsIHRoZSBtb3N0IGxpa2VseSBvdXRjb21lIGlzIGEgY29yZSBkdW1wLgorICAgICAgICAjIE11dGF0aW9ucyBkdXJpbmcgYSBsaXN0IHNvcnQgc2hvdWxkIHJhaXNlIGEgVmFsdWVFcnJvci4KKworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgTCBhbmQgcmFuZG9tLnJhbmRvbSgpIDwgMC43NToKKyAgICAgICAgICAgICAgICAgICAgTC5wb3AoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIEwuYXBwZW5kKDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmRvbS5yYW5kb20oKSA8IDAuNQorCisgICAgICAgIEwgPSBbQygpIGZvciBpIGluIHJhbmdlKDUwKV0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgTC5zb3J0KQorCisgICAgZGVmIHRlc3RfY21wTm9uZShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIE5vbmUgYXMgYSBjb21wYXJpc29uIGZ1bmN0aW9uLgorCisgICAgICAgIEwgPSByYW5nZSg1MCkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoTCkKKyAgICAgICAgTC5zb3J0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTCwgcmFuZ2UoNTApKQorCisgICAgZGVmIHRlc3RfdW5kZXRlY3RlZF9tdXRhdGlvbihzZWxmKToKKyAgICAgICAgIyBQeXRob24gMi40YTEgZGlkIG5vdCBhbHdheXMgZGV0ZWN0IG11dGF0aW9uCisgICAgICAgIG1lbW9yeXdhc3RlciA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIwKToKKyAgICAgICAgICAgIGRlZiBtdXRhdGluZ19jbXAoeCwgeSk6CisgICAgICAgICAgICAgICAgTC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICBMLnBvcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcCh4LCB5KQorICAgICAgICAgICAgTCA9IFsxLDJdCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBMLnNvcnQsIG11dGF0aW5nX2NtcCkKKyAgICAgICAgICAgIGRlZiBtdXRhdGluZ19jbXAoeCwgeSk6CisgICAgICAgICAgICAgICAgTC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICBkZWwgTFs6XQorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEwuc29ydCwgbXV0YXRpbmdfY21wKQorICAgICAgICAgICAgbWVtb3J5d2FzdGVyID0gW21lbW9yeXdhc3Rlcl0KKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0RGVjb3JhdGVTb3J0VW5kZWNvcmF0ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWNvcmF0ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSAnVGhlIHF1aWNrIEJyb3duIGZveCBKdW1wZWQgb3ZlciBUaGUgbGF6eSBEb2cnLnNwbGl0KCkKKyAgICAgICAgY29weSA9IGRhdGFbOl0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgZGF0YS5zb3J0KGtleT1zdHIubG93ZXIpCisgICAgICAgIGNvcHkuc29ydChjbXA9bGFtYmRhIHgseTogY21wKHgubG93ZXIoKSwgeS5sb3dlcigpKSkKKworICAgIGRlZiB0ZXN0X2JhZGRlY29yYXRvcihzZWxmKToKKyAgICAgICAgZGF0YSA9ICdUaGUgcXVpY2sgQnJvd24gZm94IEp1bXBlZCBvdmVyIFRoZSBsYXp5IERvZycuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRhdGEuc29ydCwgTm9uZSwgbGFtYmRhIHgseTogMCkKKworICAgIGRlZiB0ZXN0X3N0YWJpbGl0eShzZWxmKToKKyAgICAgICAgZGF0YSA9IFsocmFuZG9tLnJhbmRyYW5nZSgxMDApLCBpKSBmb3IgaSBpbiB4cmFuZ2UoMjAwKV0KKyAgICAgICAgY29weSA9IGRhdGFbOl0KKyAgICAgICAgZGF0YS5zb3J0KGtleT1sYW1iZGEgeDogeFswXSkgICAjIHNvcnQgb24gdGhlIHJhbmRvbSBmaXJzdCBmaWVsZAorICAgICAgICBjb3B5LnNvcnQoKSAgICAgICAgICAgICAgICAgICAgICMgc29ydCB1c2luZyBib3RoIGZpZWxkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGNvcHkpICAgICMgc2hvdWxkIGdldCB0aGUgc2FtZSByZXN1bHQKKworICAgIGRlZiB0ZXN0X2NtcF9hbmRfa2V5X2NvbWJpbmF0aW9uKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSB3cmFwcGVyIGhhcyBiZWVuIHJlbW92ZWQKKyAgICAgICAgZGVmIGNvbXBhcmUoeCwgeSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoeCksIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh4KSwgc3RyKQorICAgICAgICAgICAgcmV0dXJuIGNtcCh4LCB5KQorICAgICAgICBkYXRhID0gJ1RoZSBxdWljayBCcm93biBmb3ggSnVtcGVkIG92ZXIgVGhlIGxhenkgRG9nJy5zcGxpdCgpCisgICAgICAgIGRhdGEuc29ydChjbXA9Y29tcGFyZSwga2V5PXN0ci5sb3dlcikKKworICAgIGRlZiB0ZXN0X2JhZGNtcF93aXRoX2tleShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgd3JhcHBlciBoYXMgYmVlbiByZW1vdmVkCisgICAgICAgIGRhdGEgPSAnVGhlIHF1aWNrIEJyb3duIGZveCBKdW1wZWQgb3ZlciBUaGUgbGF6eSBEb2cnLnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkYXRhLnNvcnQsICJiYWQiLCBzdHIubG93ZXIpCisKKyAgICBkZWYgdGVzdF9rZXlfd2l0aF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIHdyYXBwZXIgaGFzIGJlZW4gcmVtb3ZlZAorICAgICAgICBkYXRhID0gcmFuZ2UoLTIsMikKKyAgICAgICAgZHVwID0gZGF0YVs6XQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZGF0YS5zb3J0LCBOb25lLCBsYW1iZGEgeDogMSAvLyB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGR1cCkKKworICAgIGRlZiB0ZXN0X2tleV93aXRoX211dGF0aW9uKHNlbGYpOgorICAgICAgICBkYXRhID0gcmFuZ2UoMTApCisgICAgICAgIGRlZiBrKHgpOgorICAgICAgICAgICAgZGVsIGRhdGFbOl0KKyAgICAgICAgICAgIGRhdGFbOl0gPSByYW5nZSgyMCkKKyAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRhdGEuc29ydCwga2V5PWspCisKKyAgICBkZWYgdGVzdF9rZXlfd2l0aF9tdXRhdGluZ19kZWwoc2VsZik6CisgICAgICAgIGRhdGEgPSByYW5nZSgxMCkKKyAgICAgICAgY2xhc3MgU29ydEtpbGxlcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlbCBkYXRhWzpdCisgICAgICAgICAgICAgICAgZGF0YVs6XSA9IHJhbmdlKDIwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkYXRhLnNvcnQsIGtleT1Tb3J0S2lsbGVyKQorCisgICAgZGVmIHRlc3Rfa2V5X3dpdGhfbXV0YXRpbmdfZGVsX2FuZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRhdGEgPSByYW5nZSgxMCkKKyAgICAgICAgIyMgZHVwID0gZGF0YVs6XQorICAgICAgICBjbGFzcyBTb3J0S2lsbGVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgaWYgeCA+IDI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgZGVsIGRhdGFbOl0KKyAgICAgICAgICAgICAgICBkYXRhWzpdID0gcmFuZ2UoMjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZGF0YS5zb3J0LCBrZXk9U29ydEtpbGxlcikKKyAgICAgICAgIyMgbWFqb3IgaG9ua2luZyBzdWJ0bGV0eTogd2UgKmNhbid0KiBkbzoKKyAgICAgICAgIyMKKyAgICAgICAgIyMgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkdXApCisgICAgICAgICMjCisgICAgICAgICMjIGJlY2F1c2UgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gYSBTb3J0S2lsbGVyIGluIHRoZQorICAgICAgICAjIyB0cmFjZWJhY2sgYW5kIGJ5IHRoZSB0aW1lIGl0IGRpZXMgd2UncmUgb3V0c2lkZSB0aGUgY2FsbCB0bworICAgICAgICAjIyAuc29ydCgpIGFuZCBzbyB0aGUgbGlzdCBwcm90ZWN0aW9uIGdpbW1pY2tzIGFyZSBvdXQgb2YKKyAgICAgICAgIyMgZGF0ZSAodGhpcyBjb3N0IHNvbWUgYnJhaW4gY2VsbHMgdG8gZmlndXJlIG91dC4uLikuCisKKyAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgorICAgICAgICBkYXRhID0gcmFuZ2UoMTAwKQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBkYXRhLnNvcnQocmV2ZXJzZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHJhbmdlKDk5LC0xLC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkYXRhLnNvcnQsICJ3cm9uZyB0eXBlIikKKworICAgIGRlZiB0ZXN0X3JldmVyc2Vfc3RhYmlsaXR5KHNlbGYpOgorICAgICAgICBkYXRhID0gWyhyYW5kb20ucmFuZHJhbmdlKDEwMCksIGkpIGZvciBpIGluIHhyYW5nZSgyMDApXQorICAgICAgICBjb3B5MSA9IGRhdGFbOl0KKyAgICAgICAgY29weTIgPSBkYXRhWzpdCisgICAgICAgIGRhdGEuc29ydChjbXA9bGFtYmRhIHgseTogY21wKHhbMF0seVswXSksIHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgY29weTEuc29ydChjbXA9bGFtYmRhIHgseTogY21wKHlbMF0seFswXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgY29weTEpCisgICAgICAgIGNvcHkyLnNvcnQoa2V5PWxhbWJkYSB4OiB4WzBdLCByZXZlcnNlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgY29weTIpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3RfY2xhc3NlcyA9ICgKKyAgICAgICAgVGVzdEJhc2UsCisgICAgICAgIFRlc3REZWNvcmF0ZVNvcnRVbmRlY29yYXRlLAorICAgICAgICBUZXN0QnVncywKKyAgICApCisKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCJ0aGUgY21wIGFyZ3VtZW50IGlzIG5vdCBzdXBwb3J0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorCisgICAgICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgICAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICAgICAgcHJpbnQgY291bnRzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NxbGl0ZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3NxbGl0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjI3MzMxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3FsaXRlLnB5CkBAIC0wLDAgKzEsMTYgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQorCisjIFNraXAgdGVzdCBpZiBfc3FsaXRlMyBtb2R1bGUgd2FzIG5vdCBidWlsdC4KK2ltcG9ydF9tb2R1bGUoJ19zcWxpdGUzJykKKworZnJvbSBzcWxpdGUzLnRlc3QgaW1wb3J0IChkYmFwaSwgdHlwZXMsIHVzZXJmdW5jdGlvbnMsIHB5MjV0ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSwgdHJhbnNhY3Rpb25zLCBob29rcywgcmVncmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChkYmFwaS5zdWl0ZSgpLCB0eXBlcy5zdWl0ZSgpLCB1c2VyZnVuY3Rpb25zLnN1aXRlKCksCisgICAgICAgICAgICAgICAgIHB5MjV0ZXN0cy5zdWl0ZSgpLCBmYWN0b3J5LnN1aXRlKCksIHRyYW5zYWN0aW9ucy5zdWl0ZSgpLAorICAgICAgICAgICAgICAgICBob29rcy5zdWl0ZSgpLCByZWdyZXNzaW9uLnN1aXRlKCksIGR1bXAuc3VpdGUoKSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3NsLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3NsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTIxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zc2wucHkKQEAgLTAsMCArMSwxMzk0IEBACisjIFRlc3QgdGhlIHN1cHBvcnQgZm9yIFNTTCBhbmQgc29ja2V0cworCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCB0aW1lCitpbXBvcnQgZ2MKK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCitpbXBvcnQgcHByaW50CitpbXBvcnQgdXJsbGliLCB1cmxwYXJzZQoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBwbGF0Zm9ybQorCitmcm9tIEJhc2VIVFRQU2VydmVyIGltcG9ydCBIVFRQU2VydmVyCitmcm9tIFNpbXBsZUhUVFBTZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgorCitzc2wgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgic3NsIikKKworSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCitDRVJURklMRSA9IE5vbmUKK1NWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCA9IE5vbmUKKworZGVmIGhhbmRsZV9lcnJvcihwcmVmaXgpOgorICAgIGV4Y19mb3JtYXQgPSAnICcuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpKQorICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHByZWZpeCArIGV4Y19mb3JtYXQpCisKKworY2xhc3MgQmFzaWNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zc2x3cmFwX3NpbXBsZShzZWxmKToKKyAgICAgICAgIyBBIGNydWRlIHRlc3QgZm9yIHRoZSBsZWdhY3kgQVBJCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNzbC5zc2x3cmFwX3NpbXBsZShzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vID09IDMyOiAjIGJyb2tlbiBwaXBlIHdoZW4gc3NsX3NvY2suZG9faGFuZHNoYWtlKCksIHRoaXMgdGVzdCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhhdAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3NsLnNzbHdyYXBfc2ltcGxlKHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLl9zb2NrKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMzI6ICMgYnJva2VuIHBpcGUgd2hlbiBzc2xfc29jay5kb19oYW5kc2hha2UoKSwgdGhpcyB0ZXN0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGF0CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisjIElzc3VlICM5NDE1OiBVYnVudHUgaGlqYWNrcyB0aGVpciBPcGVuU1NMIGFuZCBmb3JjZWZ1bGx5IGRpc2FibGVzIFNTTHYyCitkZWYgc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbChmdW5jKToKKyAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CisgICAgICAgICMgV2UgbmVlZCB0byBhY2Nlc3MgdGhlIGxvd2VyLWxldmVsIHdyYXBwZXIgaW4gb3JkZXIgdG8gY3JlYXRlIGFuCisgICAgICAgICMgaW1wbGljaXQgU1NMIGNvbnRleHQgd2l0aG91dCB0cnlpbmcgdG8gY29ubmVjdCBvciBsaXN0ZW4uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBfc3NsCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICMgVGhlIHJldHVybmVkIGZ1bmN0aW9uIHdvbid0IGdldCBleGVjdXRlZCwganVzdCBpZ25vcmUgdGhlIGVycm9yCisgICAgICAgICAgICBwYXNzCisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICAgICAgZGVmIGYoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgICAgICBfc3NsLnNzbHdyYXAocy5fc29jaywgMCwgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLkNFUlRfTk9ORSwgc3NsLlBST1RPQ09MX1NTTHYyLCBOb25lLCBOb25lKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIChzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPT0gKDAsIDksIDgsIDE1LCAxNSkgYW5kCisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbigpID09ICgnZGViaWFuJywgJ3NxdWVlemUvc2lkJywgJycpCisgICAgICAgICAgICAgICAgICAgIGFuZCAnSW52YWxpZCBTU0wgcHJvdG9jb2wgdmFyaWFudCBzcGVjaWZpZWQnIGluIHN0cihlKSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJQYXRjaGVkIFVidW50dSBPcGVuU1NMIGJyZWFrcyBiZWhhdmlvdXIiKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICByZXR1cm4gZgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmdW5jCisKKworY2xhc3MgQmFzaWNTb2NrZXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6CisgICAgICAgICNzc2wuUFJPVE9DT0xfU1NMdjIKKyAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYyMworICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjMKKyAgICAgICAgc3NsLlBST1RPQ09MX1RMU3YxCisgICAgICAgIHNzbC5DRVJUX05PTkUKKyAgICAgICAgc3NsLkNFUlRfT1BUSU9OQUwKKyAgICAgICAgc3NsLkNFUlRfUkVRVUlSRUQKKworICAgIGRlZiB0ZXN0X3JhbmRvbShzZWxmKToKKyAgICAgICAgdiA9IHNzbC5SQU5EX3N0YXR1cygpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4gUkFORF9zdGF0dXMgaXMgJWQgKCVzKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh2LCAodiBhbmQgInN1ZmZpY2llbnQgcmFuZG9tbmVzcyIpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN1ZmZpY2llbnQgcmFuZG9tbmVzcyIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5SQU5EX2VnZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuUkFORF9lZ2QsICdmb28nLCAxKQorICAgICAgICBzc2wuUkFORF9hZGQoInRoaXMgaXMgYSByYW5kb20gc3RyaW5nIiwgNzUuMCkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2NlcnQoc2VsZik6CisgICAgICAgICMgbm90ZSB0aGF0IHRoaXMgdXNlcyBhbiAndW5vZmZpY2lhbCcgZnVuY3Rpb24gaW4gX3NzbC5jLAorICAgICAgICAjIHByb3ZpZGVkIHNvbGVseSBmb3IgdGhpcyB0ZXN0LCB0byBleGVyY2lzZSB0aGUgY2VydGlmaWNhdGUKKyAgICAgICAgIyBwYXJzaW5nIGNvZGUKKyAgICAgICAgcCA9IHNzbC5fc3NsLl90ZXN0X2RlY29kZV9jZXJ0KENFUlRGSUxFLCBGYWxzZSkKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIgKyBwcHJpbnQucGZvcm1hdChwKSArICJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnc3ViamVjdCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdjb3VudHJ5TmFtZScsICdYWScpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2xvY2FsaXR5TmFtZScsICdDYXN0bGUgQW50aHJheCcpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ2xvY2FsaG9zdCcpLCkpCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnc3ViamVjdEFsdE5hbWUnXSwgKCgnRE5TJywgJ2xvY2FsaG9zdCcpLCkpCisgICAgICAgICMgSXNzdWUgIzEzMDM0OiB0aGUgc3ViamVjdEFsdE5hbWUgaW4gc29tZSBjZXJ0aWZpY2F0ZXMKKyAgICAgICAgIyAobm90YWJseSBwcm9qZWN0cy5kZXZlbG9wZXIubm9raWEuY29tOjQ0Mykgd2Fzbid0IHBhcnNlZAorICAgICAgICBwID0gc3NsLl9zc2wuX3Rlc3RfZGVjb2RlX2NlcnQoTk9LSUFDRVJUKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIiArIHBwcmludC5wZm9ybWF0KHApICsgIlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydzdWJqZWN0QWx0TmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoJ0ROUycsICdwcm9qZWN0cy5kZXZlbG9wZXIubm9raWEuY29tJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3Byb2plY3RzLmZvcnVtLm5va2lhLmNvbScpKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfREVSX3RvX1BFTShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgcGVtID0gZi5yZWFkKCkKKyAgICAgICAgZDEgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQocGVtKQorICAgICAgICBwMiA9IHNzbC5ERVJfY2VydF90b19QRU1fY2VydChkMSkKKyAgICAgICAgZDIgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQocDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIGQyKQorICAgICAgICBpZiBub3QgcDIuc3RhcnRzd2l0aChzc2wuUEVNX0hFQURFUiArICdcbicpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJERVItdG8tUEVNIGRpZG4ndCBpbmNsdWRlIGNvcnJlY3QgaGVhZGVyOlxuJXJcbiIgJSBwMikKKyAgICAgICAgaWYgbm90IHAyLmVuZHN3aXRoKCdcbicgKyBzc2wuUEVNX0ZPT1RFUiArICdcbicpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJERVItdG8tUEVNIGRpZG4ndCBpbmNsdWRlIGNvcnJlY3QgZm9vdGVyOlxuJXJcbiIgJSBwMikKKworICAgIGRlZiB0ZXN0X29wZW5zc2xfdmVyc2lvbihzZWxmKToKKyAgICAgICAgbiA9IHNzbC5PUEVOU1NMX1ZFUlNJT05fTlVNQkVSCisgICAgICAgIHQgPSBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8KKyAgICAgICAgcyA9IHNzbC5PUEVOU1NMX1ZFUlNJT04KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG4sIChpbnQsIGxvbmcpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodCwgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCBzdHIpCisgICAgICAgICMgU29tZSBzYW5pdHkgY2hlY2tzIGZvbGxvdworICAgICAgICAjID49IDAuOQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuLCAweDkwMDAwMCkKKyAgICAgICAgIyA8IDIuMAorICAgICAgICBzZWxmLmFzc2VydExlc3MobiwgMHgyMDAwMDAwMCkKKyAgICAgICAgbWFqb3IsIG1pbm9yLCBmaXgsIHBhdGNoLCBzdGF0dXMgPSB0CisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG1ham9yLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobWFqb3IsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG1pbm9yLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobWlub3IsIDI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZml4LCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoZml4LCAyNTYpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBhdGNoLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChwYXRjaCwgMjYpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3RhdHVzLCAxNSkKKyAgICAgICAgIyBWZXJzaW9uIHN0cmluZyBhcyByZXR1cm5lZCBieSBPcGVuU1NMLCB0aGUgZm9ybWF0IG1pZ2h0IGNoYW5nZQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJPcGVuU1NMIHs6ZH0uezpkfS57OmR9Ii5mb3JtYXQobWFqb3IsIG1pbm9yLCBmaXgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzLCB0KSkKKworICAgIGRlZiB0ZXN0X2NpcGhlcnMoc2VsZik6CisgICAgICAgIGlmIG5vdCB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJlbW90ZSA9ICgic3ZuLnB5dGhvbi5vcmciLCA0NDMpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChyZW1vdGVbMF0pOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUsIGNpcGhlcnM9IkFMTCIpCisgICAgICAgICAgICBzLmNvbm5lY3QocmVtb3RlKQorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUsIGNpcGhlcnM9IkRFRkFVTFQiKQorICAgICAgICAgICAgcy5jb25uZWN0KHJlbW90ZSkKKyAgICAgICAgICAgICMgRXJyb3IgY2hlY2tpbmcgb2NjdXJzIHdoZW4gY29ubmVjdGluZywgYmVjYXVzZSB0aGUgU1NMIGNvbnRleHQKKyAgICAgICAgICAgICMgaXNuJ3QgY3JlYXRlZCBiZWZvcmUuCisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwgY2lwaGVycz0iXiQ6LDs/Kidkb3JvdGh5eCIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKHNzbC5TU0xFcnJvciwgIk5vIGNpcGhlciBjYW4gYmUgc2VsZWN0ZWQiKToKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QocmVtb3RlKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzk0MzogYW4gU1NMIG9iamVjdCBkb2Vzbid0IGNyZWF0ZSByZWZlcmVuY2UgY3ljbGVzIHdpdGgKKyAgICAgICAgIyBpdHNlbGYuCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQorICAgICAgICBzcyA9IHNzbC53cmFwX3NvY2tldChzKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHNzKQorICAgICAgICBkZWwgc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfd3JhcHBlZF91bmNvbm5lY3RlZChzZWxmKToKKyAgICAgICAgIyBUaGUgX2RlbGVnYXRlX21ldGhvZHMgaW4gc29ja2V0LnB5IGFyZSBjb3JyZWN0bHkgZGVsZWdhdGVkIHRvIGJ5IGFuCisgICAgICAgICMgdW5jb25uZWN0ZWQgU1NMU29ja2V0LCBzbyB0aGV5IHdpbGwgcmFpc2UgYSBzb2NrZXQuZXJyb3IgcmF0aGVyIHRoYW4KKyAgICAgICAgIyBzb21ldGhpbmcgdW5leHBlY3RlZCBsaWtlIFR5cGVFcnJvci4KKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgIHNzID0gc3NsLndyYXBfc29ja2V0KHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2X2ludG8sIGJ5dGVhcnJheShiJ3gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2ZnJvbSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2ZnJvbV9pbnRvLCBieXRlYXJyYXkoYid4JyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3Muc2VuZCwgYid4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kdG8sIGIneCcsICgnMC4wLjAuMCcsIDApKQorCisKK2NsYXNzIE5ldHdvcmtlZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FKQorICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgYyA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgaWYgYzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlBlZXIgY2VydCAlcyBzaG91bGRuJ3QgYmUgaGVyZSEiKQorICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgICAgICMgdGhpcyBzaG91bGQgZmFpbCBiZWNhdXNlIHdlIGhhdmUgbm8gdmVyaWZpY2F0aW9uIGNlcnRzCisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICAgICAjIHRoaXMgc2hvdWxkIHN1Y2NlZWQgYmVjYXVzZSB3ZSBzcGVjaWZ5IHRoZSByb290IGNlcnQKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9U1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0X2V4KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMTMyNjogY2hlY2sgY29ubmVjdF9leCgpIGltcGxlbWVudGF0aW9uCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9U1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcy5jb25uZWN0X2V4KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5nZXRwZWVyY2VydCgpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X25vbl9ibG9ja2luZ19jb25uZWN0X2V4KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMTMyNjogbm9uLWJsb2NraW5nIGNvbm5lY3RfZXgoKSBzaG91bGQgYWxsb3cgaGFuZHNoYWtlCisgICAgICAgICMgdG8gcHJvY2VlZCBhZnRlciB0aGUgc29ja2V0IGdldHMgcmVhZHkuCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9U1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgIHJjID0gcy5jb25uZWN0X2V4KCgnc3ZuLnB5dGhvbi5vcmcnLCA0NDMpKQorICAgICAgICAgICAgICAgICMgRVdPVUxEQkxPQ0sgdW5kZXIgV2luZG93cywgRUlOUFJPR1JFU1MgZWxzZXdoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihyYywgKDAsIGVycm5vLkVJTlBST0dSRVNTLCBlcnJuby5FV09VTERCTE9DSykpCisgICAgICAgICAgICAgICAgIyBXYWl0IGZvciBjb25uZWN0IHRvIGZpbmlzaAorICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtzXSwgW10sIDUuMCkKKyAgICAgICAgICAgICAgICAjIE5vbi1ibG9ja2luZyBoYW5kc2hha2UKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzLmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW3NdLCBbXSwgW10sIDUuMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtzXSwgW10sIDUuMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAjIFNTTCBlc3RhYmxpc2hlZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmdldHBlZXJjZXJ0KCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdGltZW91dF9jb25uZWN0X2V4KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMjA2NTogb24gYSB0aW1lb3V0LCBjb25uZWN0X2V4KCkgc2hvdWxkIHJldHVybiB0aGUgb3JpZ2luYWwKKyAgICAgICAgIyBlcnJubyAobWltaWNraW5nIHRoZSBiZWhhdmlvdXIgb2Ygbm9uLVNTTCBzb2NrZXRzKS4KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuc2V0dGltZW91dCgwLjAwMDAwMDEpCisgICAgICAgICAgICAgICAgcmMgPSBzLmNvbm5lY3RfZXgoKCdzdm4ucHl0aG9uLm9yZycsIDQ0MykpCisgICAgICAgICAgICAgICAgaWYgcmMgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic3ZuLnB5dGhvbi5vcmcgcmVzcG9uZGVkIHRvbyBxdWlja2x5IikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHJjLCAoZXJybm8uRUFHQUlOLCBlcnJuby5FV09VTERCTE9DSykpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY29ubmVjdF9leF9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJuby5FQ09OTlJFRlVTRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3RfZXgoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0NCkpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAibnQiLCAiQ2FuJ3QgdXNlIGEgc29ja2V0IGFzIGEgZmlsZSB1bmRlciBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF9tYWtlZmlsZV9jbG9zZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNTIzODogY3JlYXRpbmcgYSBmaWxlLWxpa2Ugb2JqZWN0IHdpdGggbWFrZWZpbGUoKSBzaG91bGRuJ3QKKyAgICAgICAgIyBkZWxheSBjbG9zaW5nIHRoZSB1bmRlcmx5aW5nICJyZWFsIHNvY2tldCIgKGhlcmUgdGVzdGVkIHdpdGggaXRzCisgICAgICAgICMgZmlsZSBkZXNjcmlwdG9yLCBoZW5jZSBza2lwcGluZyB0aGUgdGVzdCB1bmRlciBXaW5kb3dzKS4KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgc3MgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpCisgICAgICAgICAgICBzcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgZmQgPSBzcy5maWxlbm8oKQorICAgICAgICAgICAgZiA9IHNzLm1ha2VmaWxlKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgIyBUaGUgZmQgaXMgc3RpbGwgb3BlbgorICAgICAgICAgICAgb3MucmVhZChmZCwgMCkKKyAgICAgICAgICAgICMgQ2xvc2luZyB0aGUgU1NMIHNvY2tldCBzaG91bGQgY2xvc2UgdGhlIGZkIHRvbworICAgICAgICAgICAgc3MuY2xvc2UoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGU6CisgICAgICAgICAgICAgICAgb3MucmVhZChmZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVCQURGKQorCisgICAgZGVmIHRlc3Rfbm9uX2Jsb2NraW5nX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBzLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCisgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIHMuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbc10sIFtdLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtdLCBbc10sIFtdKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5OZWVkZWQgJWQgY2FsbHMgdG8gZG9faGFuZHNoYWtlKCkgdG8gZXN0YWJsaXNoIHNlc3Npb24uXG4iICUgY291bnQpCisKKyAgICBkZWYgdGVzdF9nZXRfc2VydmVyX2NlcnRpZmljYXRlKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBwZW0gPSBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIGlmIG5vdCBwZW06CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBzZXJ2ZXIgY2VydGlmaWNhdGUgb24gc3ZuLnB5dGhvbi5vcmc6NDQzISIpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwZW0gPSBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgoInN2bi5weXRob24ub3JnIiwgNDQzKSwgY2FfY2VydHM9Q0VSVEZJTEUpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgorICAgICAgICAgICAgICAgICNzaG91bGQgZmFpbAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJHb3Qgc2VydmVyIGNlcnRpZmljYXRlICVzIGZvciBzdm4ucHl0aG9uLm9yZyEiICUgcGVtKQorCisgICAgICAgICAgICBwZW0gPSBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgoInN2bi5weXRob24ub3JnIiwgNDQzKSwgY2FfY2VydHM9U1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICAgICAgaWYgbm90IHBlbToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIHNlcnZlciBjZXJ0aWZpY2F0ZSBvbiBzdm4ucHl0aG9uLm9yZzo0NDMhIikKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuVmVyaWZpZWQgY2VydGlmaWNhdGUgZm9yIHN2bi5weXRob24ub3JnOjQ0MyBpc1xuJXNcbiIgJSBwZW0pCisKKyAgICBkZWYgdGVzdF9hbGdvcml0aG1zKHNlbGYpOgorICAgICAgICAjIElzc3VlICM4NDg0OiBhbGwgYWxnb3JpdGhtcyBzaG91bGQgYmUgYXZhaWxhYmxlIHdoZW4gdmVyaWZ5aW5nIGEKKyAgICAgICAgIyBjZXJ0aWZpY2F0ZS4KKyAgICAgICAgIyBTSEEyNTYgd2FzIGFkZGVkIGluIE9wZW5TU0wgMC45LjgKKyAgICAgICAgaWYgc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPIDwgKDAsIDksIDgsIDAsIDE1KToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlNIQTI1NiBub3QgYXZhaWxhYmxlIG9uICVyIiAlIHNzbC5PUEVOU1NMX1ZFUlNJT04pCisgICAgICAgIHNlbGYuc2tpcFRlc3QoInJlbW90ZSBob3N0IG5lZWRzIFNOSSwgb25seSBhdmFpbGFibGUgb24gUHl0aG9uIDMuMisiKQorICAgICAgICAjIE5PVEU6IGh0dHBzOi8vc2hhMi5oYm9lY2suZGUgaXMgYW5vdGhlciBwb3NzaWJsZSB0ZXN0IGhvc3QKKyAgICAgICAgcmVtb3RlID0gKCJzaGEyNTYudGJzLWludGVybmV0LmNvbSIsIDQ0MykKKyAgICAgICAgc2hhMjU2X2NlcnQgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgInNoYTI1Ni5wZW0iKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInNoYTI1Ni50YnMtaW50ZXJuZXQuY29tIik6CisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPXNoYTI1Nl9jZXJ0LCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QocmVtb3RlKQorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbkNpcGhlciB3aXRoICVyIGlzICVyXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3RlLCBzLmNpcGhlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiQ2VydGlmaWNhdGUgaXM6XG4lc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQocy5nZXRwZWVyY2VydCgpKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKwordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfaGF2ZV90aHJlYWRzID0gRmFsc2UKK2Vsc2U6CisgICAgX2hhdmVfdGhyZWFkcyA9IFRydWUKKworICAgIGNsYXNzIFRocmVhZGVkRWNob1NlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKKworICAgICAgICBjbGFzcyBDb25uZWN0aW9uSGFuZGxlcih0aHJlYWRpbmcuVGhyZWFkKToKKworICAgICAgICAgICAgIiIiQSBtaWxkbHkgY29tcGxpY2F0ZWQgY2xhc3MsIGJlY2F1c2Ugd2Ugd2FudCBpdCB0byB3b3JrIGJvdGgKKyAgICAgICAgICAgIHdpdGggYW5kIHdpdGhvdXQgdGhlIFNTTCB3cmFwcGVyIGFyb3VuZCB0aGUgc29ja2V0IGNvbm5lY3Rpb24sIHNvCisgICAgICAgICAgICB0aGF0IHdlIGNhbiB0ZXN0IHRoZSBTVEFSVFRMUyBmdW5jdGlvbmFsaXR5LiIiIgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uc29jayk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IGNvbm5zb2NrCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNldGJsb2NraW5nKDEpCisgICAgICAgICAgICAgICAgc2VsZi5zc2xjb25uID0gTm9uZQorICAgICAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUKKworICAgICAgICAgICAgZGVmIHNob3dfY29ubl9kZXRhaWxzKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLmNlcnRyZXFzID09IHNzbC5DRVJUX1JFUVVJUkVEOgorICAgICAgICAgICAgICAgICAgICBjZXJ0ID0gc2VsZi5zc2xjb25uLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuc2VydmVyLmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBjbGllbnQgY2VydCBpcyAiICsgcHByaW50LnBmb3JtYXQoY2VydCkgKyAiXG4iKQorICAgICAgICAgICAgICAgICAgICBjZXJ0X2JpbmFyeSA9IHNlbGYuc3NsY29ubi5nZXRwZWVyY2VydChUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZSBhbmQgc2VsZi5zZXJ2ZXIuY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNlcnQgYmluYXJ5IGlzICIgKyBzdHIobGVuKGNlcnRfYmluYXJ5KSkgKyAiIGJ5dGVzXG4iKQorICAgICAgICAgICAgICAgIGNpcGhlciA9IHNlbGYuc3NsY29ubi5jaXBoZXIoKQorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlIGFuZCBzZWxmLnNlcnZlci5jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IGNvbm5lY3Rpb24gY2lwaGVyIGlzIG5vdyAiICsgc3RyKGNpcGhlcikgKyAiXG4iKQorCisgICAgICAgICAgICBkZWYgd3JhcF9jb25uKHNlbGYpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zc2xjb25uID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPXNlbGYuc2VydmVyLmNlcnRpZmljYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zZXJ2ZXIucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1zZWxmLnNlcnZlci5jYWNlcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNlbGYuc2VydmVyLmNlcnRyZXFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycz1zZWxmLnNlcnZlci5jaXBoZXJzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgIyBYWFggVmFyaW91cyBlcnJvcnMgY2FuIGhhdmUgaGFwcGVuZWQgaGVyZSwgZm9yIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgIyBhIG1pc21hdGNoaW5nIHByb3RvY29sIHZlcnNpb24sIGFuIGludmFsaWQgY2VydGlmaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICMgb3IgYSBsb3ctbGV2ZWwgYnVnLiBUaGlzIHNob3VsZCBiZSBtYWRlIG1vcmUgZGlzY3JpbWluYXRpbmcuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmNvbm5fZXJyb3JzLmFwcGVuZChlKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZXJyb3IoIlxuIHNlcnZlcjogIGJhZCBjb25uZWN0aW9uIGF0dGVtcHQgZnJvbSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5zb2NrLmdldHBlZXJuYW1lKCkpICsgIjpcbiIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zc2xjb25uOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zc2xjb25uLnJlYWQoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvY2sucmVjdigxMDI0KQorCisgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3NsY29ubjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3NsY29ubi53cml0ZShieXRlcykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb2NrLnNlbmQoYnl0ZXMpCisKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNzbGNvbm46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3NsY29ubi5jbG9zZSgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLl9zb2NrLmNsb3NlKCkKKworICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLnN0YXJ0dGxzX3NlcnZlcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnNvY2ssIHNzbC5TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zc2xjb25uID0gc2VsZi5zb2NrCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbm90IHNlbGYud3JhcF9jb25uKCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93X2Nvbm5fZGV0YWlscygpCisgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5ydW5uaW5nOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVvZiwgc28gcXVpdCB0aGlzIGhhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBtc2cuc3RyaXAoKSA9PSAnb3Zlcic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuc2VydmVyLmNvbm5lY3Rpb25jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IGNsaWVudCBjbG9zZWQgY29ubmVjdGlvblxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5zZXJ2ZXIuc3RhcnR0bHNfc2VydmVyIGFuZCBtc2cuc3RyaXAoKSA9PSAnU1RBUlRUTFMnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlIGFuZCBzZWxmLnNlcnZlci5jb25uZWN0aW9uY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgc2VydmVyOiByZWFkIFNUQVJUVExTIGZyb20gY2xpZW50LCBzZW5kaW5nIE9LLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIk9LXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLndyYXBfY29ubigpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5zZXJ2ZXIuc3RhcnR0bHNfc2VydmVyIGFuZCBzZWxmLnNzbGNvbm4gYW5kIG1zZy5zdHJpcCgpID09ICdFTkRUTFMnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlIGFuZCBzZWxmLnNlcnZlci5jb25uZWN0aW9uY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgc2VydmVyOiByZWFkIEVORFRMUyBmcm9tIGNsaWVudCwgc2VuZGluZyBPSy4uLlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCJPS1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNzbGNvbm4udW53cmFwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNzbGNvbm4gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuc2VydmVyLmNvbm5lY3Rpb25jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IGNvbm5lY3Rpb24gaXMgbm93IHVuZW5jcnlwdGVkLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmNvbm5lY3Rpb25jaGF0dHkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZSA9IChzZWxmLnNzbGNvbm4gYW5kICJlbmNyeXB0ZWQiKSBvciAidW5lbmNyeXB0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IHJlYWQgJXMgKCVzKSwgc2VuZGluZyBiYWNrICVzICglcykuLi5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChyZXByKG1zZyksIGN0eXBlLCByZXByKG1zZy5sb3dlcigpKSwgY3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobXNnLmxvd2VyKCkpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2Vycm9yKCJUZXN0IHNlcnZlciBmYWlsdXJlOlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbm9ybWFsbHksIHdlJ2QganVzdCBzdG9wIGhlcmUsIGJ1dCBmb3IgdGhlIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaGFybmVzcywgd2Ugd2FudCB0byBzdG9wIHRoZSBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjZXJ0aWZpY2F0ZSwgc3NsX3ZlcnNpb249Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGNlcnRyZXFzPU5vbmUsIGNhY2VydHM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLCBzdGFydHRsc19zZXJ2ZXI9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICB3cmFwX2FjY2VwdGluZ19zb2NrZXQ9RmFsc2UsIGNpcGhlcnM9Tm9uZSk6CisKKyAgICAgICAgICAgIGlmIHNzbF92ZXJzaW9uIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfVExTdjEKKyAgICAgICAgICAgIGlmIGNlcnRyZXFzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY2VydHJlcXMgPSBzc2wuQ0VSVF9OT05FCisgICAgICAgICAgICBzZWxmLmNlcnRpZmljYXRlID0gY2VydGlmaWNhdGUKKyAgICAgICAgICAgIHNlbGYucHJvdG9jb2wgPSBzc2xfdmVyc2lvbgorICAgICAgICAgICAgc2VsZi5jZXJ0cmVxcyA9IGNlcnRyZXFzCisgICAgICAgICAgICBzZWxmLmNhY2VydHMgPSBjYWNlcnRzCisgICAgICAgICAgICBzZWxmLmNpcGhlcnMgPSBjaXBoZXJzCisgICAgICAgICAgICBzZWxmLmNoYXR0eSA9IGNoYXR0eQorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uY2hhdHR5ID0gY29ubmVjdGlvbmNoYXR0eQorICAgICAgICAgICAgc2VsZi5zdGFydHRsc19zZXJ2ZXIgPSBzdGFydHRsc19zZXJ2ZXIKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgc2VsZi5mbGFnID0gTm9uZQorICAgICAgICAgICAgaWYgd3JhcF9hY2NlcHRpbmdfc29ja2V0OgorICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2ssIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPXNlbGYuY2VydGlmaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcyA9IHNlbGYuY2VydHJlcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzID0gc2VsZi5jYWNlcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbiA9IHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnMgPSBzZWxmLmNpcGhlcnMpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcgc2VydmVyOiAgd3JhcHBlZCBzZXJ2ZXIgc29ja2V0IGFzICVzXG4nICUgc3RyKHNlbGYuc29jaykpCisgICAgICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuY29ubl9lcnJvcnMgPSBbXQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisKKyAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc3RhcnQodGhyZWFkaW5nLkV2ZW50KCkpCisgICAgICAgICAgICBzZWxmLmZsYWcud2FpdCgpCisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5qb2luKCkKKworICAgICAgICBkZWYgc3RhcnQoc2VsZiwgZmxhZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuZmxhZyA9IGZsYWcKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuc3RhcnQoc2VsZikKKworICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMC4wNSkKKyAgICAgICAgICAgIHNlbGYuc29jay5saXN0ZW4oNSkKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgaWYgc2VsZi5mbGFnOgorICAgICAgICAgICAgICAgICMgc2lnbmFsIGFuIGV2ZW50CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnLnNldCgpCisgICAgICAgICAgICB3aGlsZSBzZWxmLmFjdGl2ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG5ld2Nvbm4sIGNvbm5hZGRyID0gc2VsZi5zb2NrLmFjY2VwdCgpCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlIGFuZCBzZWxmLmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyBzZXJ2ZXI6ICBuZXcgY29ubmVjdGlvbiBmcm9tICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHIoY29ubmFkZHIpICsgJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IHNlbGYuQ29ubmVjdGlvbkhhbmRsZXIoc2VsZiwgbmV3Y29ubikKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zdGFydCgpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuam9pbigpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKworICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlID0gRmFsc2UKKworICAgIGNsYXNzIEFzeW5jb3JlRWNob1NlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKKworICAgICAgICBjbGFzcyBFY2hvU2VydmVyKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorCisgICAgICAgICAgICBjbGFzcyBDb25uZWN0aW9uSGFuZGxlcihhc3luY29yZS5kaXNwYXRjaGVyX3dpdGhfc2VuZCk6CisKKyAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubiwgY2VydGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyX3dpdGhfc2VuZC5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNzbC53cmFwX3NvY2tldChjb25uLCBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBUcnVlCisKKyAgICAgICAgICAgICAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5zb2NrZXQsIHNzbC5TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5zb2NrZXQucGVuZGluZygpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZWFkX2V2ZW50KCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgIGRlZiBfZG9fc3NsX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBGYWxzZQorCisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYXRhIGFuZCBkYXRhLnN0cmlwKCkgIT0gJ292ZXInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZChkYXRhLmxvd2VyKCkpCisKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlX2Nsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgc2VydmVyOiAgY2xvc2VkIGNvbm5lY3Rpb24gJXNcbiIgJSBzZWxmLnNvY2tldCkKKworICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjZXJ0ZmlsZSk6CisgICAgICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrZXQpCisgICAgICAgICAgICAgICAgc2VsZi5saXN0ZW4oNSkKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6CisgICAgICAgICAgICAgICAgc29ja19vYmosIGFkZHIgPSBzZWxmLmFjY2VwdCgpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6ICBuZXcgY29ubmVjdGlvbiBmcm9tICVzOiVzXG4iICVhZGRyKQorICAgICAgICAgICAgICAgIHNlbGYuQ29ubmVjdGlvbkhhbmRsZXIoc29ja19vYmosIHNlbGYuY2VydGZpbGUpCisKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY2VydGZpbGUpOgorICAgICAgICAgICAgc2VsZi5mbGFnID0gTm9uZQorICAgICAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLkVjaG9TZXJ2ZXIoY2VydGZpbGUpCisgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnNlcnZlci5wb3J0CisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUKKworICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAiPCVzICVzPiIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuc2VydmVyKQorCisgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICBzZWxmLnN0YXJ0KHRocmVhZGluZy5FdmVudCgpKQorICAgICAgICAgICAgc2VsZi5mbGFnLndhaXQoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsZWFudXA6IHN0b3BwaW5nIHNlcnZlci5cbiIpCisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsZWFudXA6IGpvaW5pbmcgc2VydmVyIHRocmVhZC5cbiIpCisgICAgICAgICAgICBzZWxmLmpvaW4oKQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsZWFudXA6IHN1Y2Nlc3NmdWxseSBqb2luZWQuXG4iKQorCisgICAgICAgIGRlZiBzdGFydChzZWxmLCBmbGFnPU5vbmUpOgorICAgICAgICAgICAgc2VsZi5mbGFnID0gZmxhZworICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5zdGFydChzZWxmKQorCisgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICBzZWxmLmFjdGl2ZSA9IFRydWUKKyAgICAgICAgICAgIGlmIHNlbGYuZmxhZzoKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcuc2V0KCkKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuYWN0aXZlOgorICAgICAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AoMC4wNSkKKworICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLmNsb3NlKCkKKworICAgIGNsYXNzIFNvY2tldFNlcnZlckhUVFBTU2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgorCisgICAgICAgIGNsYXNzIEhUVFBTU2VydmVyKEhUVFBTZXJ2ZXIpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyX2FkZHJlc3MsIFJlcXVlc3RIYW5kbGVyQ2xhc3MsIGNlcnRmaWxlKToKKyAgICAgICAgICAgICAgICBIVFRQU2VydmVyLl9faW5pdF9fKHNlbGYsIHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzKQorICAgICAgICAgICAgICAgICMgd2UgYXNzdW1lIHRoZSBjZXJ0ZmlsZSBjb250YWlucyBib3RoIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgICAgIHNlbGYuYWxsb3dfcmV1c2VfYWRkcmVzcyA9IFRydWUKKworICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgnPCVzICVzOiVzPicgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfcG9ydCkpCisKKyAgICAgICAgICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgICAgICAgICAjIG92ZXJyaWRlIHRoaXMgdG8gd3JhcCBzb2NrZXQgd2l0aCBTU0wKKyAgICAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKKyAgICAgICAgICAgICAgICBzc2xjb25uID0gc3NsLndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1zZWxmLmNlcnRmaWxlKQorICAgICAgICAgICAgICAgIHJldHVybiBzc2xjb25uLCBhZGRyCisKKyAgICAgICAgY2xhc3MgUm9vdGVkSFRUUFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgICAgICAgICAjIG5lZWQgdG8gb3ZlcnJpZGUgdHJhbnNsYXRlX3BhdGggdG8gZ2V0IGEga25vd24gcm9vdCwKKyAgICAgICAgICAgICMgaW5zdGVhZCBvZiB1c2luZyBvcy5jdXJkaXIsIHNpbmNlIHRoZSB0ZXN0IGNvdWxkIGJlCisgICAgICAgICAgICAjIHJ1biBmcm9tIGFueXdoZXJlCisKKyAgICAgICAgICAgIHNlcnZlcl92ZXJzaW9uID0gIlRlc3RIVFRQUy8xLjAiCisKKyAgICAgICAgICAgIHJvb3QgPSBOb25lCisKKyAgICAgICAgICAgIGRlZiB0cmFuc2xhdGVfcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgICAgICAgICAiIiJUcmFuc2xhdGUgYSAvLXNlcGFyYXRlZCBQQVRIIHRvIHRoZSBsb2NhbCBmaWxlbmFtZSBzeW50YXguCisKKyAgICAgICAgICAgICAgICBDb21wb25lbnRzIHRoYXQgbWVhbiBzcGVjaWFsIHRoaW5ncyB0byB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0KKyAgICAgICAgICAgICAgICAoZS5nLiBkcml2ZSBvciBkaXJlY3RvcnkgbmFtZXMpIGFyZSBpZ25vcmVkLiAgKFhYWCBUaGV5IHNob3VsZAorICAgICAgICAgICAgICAgIHByb2JhYmx5IGJlIGRpYWdub3NlZC4pCisKKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAjIGFiYW5kb24gcXVlcnkgcGFyYW1ldGVycworICAgICAgICAgICAgICAgIHBhdGggPSB1cmxwYXJzZS51cmxwYXJzZShwYXRoKVsyXQorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHVybGxpYi51bnF1b3RlKHBhdGgpKQorICAgICAgICAgICAgICAgIHdvcmRzID0gcGF0aC5zcGxpdCgnLycpCisgICAgICAgICAgICAgICAgd29yZHMgPSBmaWx0ZXIoTm9uZSwgd29yZHMpCisgICAgICAgICAgICAgICAgcGF0aCA9IHNlbGYucm9vdAorICAgICAgICAgICAgICAgIGZvciB3b3JkIGluIHdvcmRzOgorICAgICAgICAgICAgICAgICAgICBkcml2ZSwgd29yZCA9IG9zLnBhdGguc3BsaXRkcml2ZSh3b3JkKQorICAgICAgICAgICAgICAgICAgICBoZWFkLCB3b3JkID0gb3MucGF0aC5zcGxpdCh3b3JkKQorICAgICAgICAgICAgICAgICAgICBpZiB3b3JkIGluIHNlbGYucm9vdDogY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCB3b3JkKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXRoCisKKyAgICAgICAgICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKKworICAgICAgICAgICAgICAgICMgd2Ugb3ZlcnJpZGUgdGhpcyB0byBzdXBwcmVzcyBsb2dnaW5nIHVubGVzcyAidmVyYm9zZSIKKworICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgc2VydmVyICglczolZCAlcyk6XG4gICBbJXNdICVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5zZXJ2ZXIuc2VydmVyX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlcl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcXVlc3QuY2lwaGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nX2RhdGVfdGltZV9zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0JWFyZ3MpKQorCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNlcnRmaWxlKToKKyAgICAgICAgICAgIHNlbGYuZmxhZyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuUm9vdGVkSFRUUFJlcXVlc3RIYW5kbGVyLnJvb3QgPSBvcy5wYXRoLnNwbGl0KENFUlRGSUxFKVswXQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLkhUVFBTU2VydmVyKAorICAgICAgICAgICAgICAgIChIT1NULCAwKSwgc2VsZi5Sb290ZWRIVFRQUmVxdWVzdEhhbmRsZXIsIGNlcnRmaWxlKQorICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2ZXIuc2VydmVyX3BvcnQKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICI8JXMgJXM+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5zZXJ2ZXIpCisKKyAgICAgICAgZGVmIHN0YXJ0KHNlbGYsIGZsYWc9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZsYWcgPSBmbGFnCisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnN0YXJ0KHNlbGYpCisKKyAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuZmxhZzoKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcuc2V0KCkKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlX2ZvcmV2ZXIoMC4wNSkKKworICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnNodXRkb3duKCkKKworCisgICAgZGVmIGJhZF9jZXJ0X3Rlc3QoY2VydGZpbGUpOgorICAgICAgICAiIiIKKyAgICAgICAgTGF1bmNoIGEgc2VydmVyIHdpdGggQ0VSVF9SRVFVSVJFRCwgYW5kIGNoZWNrIHRoYXQgdHJ5aW5nIHRvCisgICAgICAgIGNvbm5lY3QgdG8gaXQgd2l0aCB0aGUgZ2l2ZW4gY2xpZW50IGNlcnRpZmljYXRlIGZhaWxzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKENFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNlcnRzPUNFUlRGSUxFLCBjaGF0dHk9RmFsc2UpCisgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCB4OgorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcblNTTEVycm9yIGlzICVzXG4iICUgeFsxXSkKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHg6CisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuc29ja2V0LmVycm9yIGlzICVzXG4iICUgeFsxXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlVzZSBvZiBpbnZhbGlkIGNlcnQgc2hvdWxkIGhhdmUgZmFpbGVkISIpCisKKyAgICBkZWYgc2VydmVyX3BhcmFtc190ZXN0KGNlcnRmaWxlLCBwcm90b2NvbCwgY2VydHJlcXMsIGNhY2VydHNmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2NlcnRmaWxlLCBjbGllbnRfcHJvdG9jb2w9Tm9uZSwgaW5kYXRhPSJGT09cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPU5vbmUsIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcF9hY2NlcHRpbmdfc29ja2V0PUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIExhdW5jaCBhIHNlcnZlciwgY29ubmVjdCBhIGNsaWVudCB0byBpdCBhbmQgdHJ5IHZhcmlvdXMgcmVhZHMKKyAgICAgICAgYW5kIHdyaXRlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRyZXFzPWNlcnRyZXFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249cHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNlcnRzPWNhY2VydHNmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycz1jaXBoZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PWNoYXR0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25jaGF0dHk9Y29ubmVjdGlvbmNoYXR0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBfYWNjZXB0aW5nX3NvY2tldD13cmFwX2FjY2VwdGluZ19zb2NrZXQpCisgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgIyB0cnkgdG8gY29ubmVjdAorICAgICAgICAgICAgaWYgY2xpZW50X3Byb3RvY29sIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY2xpZW50X3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jbGllbnRfY2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPWNhY2VydHNmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPWNpcGhlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1jZXJ0cmVxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249Y2xpZW50X3Byb3RvY29sKQorICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICBmb3IgYXJnIGluIFtpbmRhdGEsIGJ5dGVhcnJheShpbmRhdGEpLCBtZW1vcnl2aWV3KGluZGF0YSldOgorICAgICAgICAgICAgICAgIGlmIGNvbm5lY3Rpb25jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNsaWVudDogIHNlbmRpbmcgJXMuLi5cbiIgJSAocmVwcihhcmcpKSkKKyAgICAgICAgICAgICAgICBzLndyaXRlKGFyZykKKyAgICAgICAgICAgICAgICBvdXRkYXRhID0gcy5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBjb25uZWN0aW9uY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBjbGllbnQ6ICByZWFkICVzXG4iICUgcmVwcihvdXRkYXRhKSkKKyAgICAgICAgICAgICAgICBpZiBvdXRkYXRhICE9IGluZGF0YS5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgZGF0YSA8PCVzPj4gKCVkKSByZWNlaXZlZDsgZXhwZWN0ZWQgPDwlcz4+ICglZClcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKG91dGRhdGFbOm1pbihsZW4ob3V0ZGF0YSksMjApXSwgbGVuKG91dGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kYXRhWzptaW4obGVuKGluZGF0YSksMjApXS5sb3dlcigpLCBsZW4oaW5kYXRhKSkpCisgICAgICAgICAgICBzLndyaXRlKCJvdmVyXG4iKQorICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsaWVudDogIGNsb3NpbmcgY29ubmVjdGlvbi5cbiIpCisgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiB0cnlfcHJvdG9jb2xfY29tYm8oc2VydmVyX3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0X3N1Y2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0c3JlcXM9Tm9uZSk6CisgICAgICAgIGlmIGNlcnRzcmVxcyBpcyBOb25lOgorICAgICAgICAgICAgY2VydHNyZXFzID0gc3NsLkNFUlRfTk9ORQorICAgICAgICBjZXJ0dHlwZSA9IHsKKyAgICAgICAgICAgIHNzbC5DRVJUX05PTkU6ICJDRVJUX05PTkUiLAorICAgICAgICAgICAgc3NsLkNFUlRfT1BUSU9OQUw6ICJDRVJUX09QVElPTkFMIiwKKyAgICAgICAgICAgIHNzbC5DRVJUX1JFUVVJUkVEOiAiQ0VSVF9SRVFVSVJFRCIsCisgICAgICAgIH1bY2VydHNyZXFzXQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIGZvcm1hdHN0ciA9IChleHBlY3Rfc3VjY2VzcyBhbmQgIiAlcy0+JXMgJXNcbiIpIG9yICIgeyVzLT4lc30gJXNcbiIKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoZm9ybWF0c3RyICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNzbC5nZXRfcHJvdG9jb2xfbmFtZShjbGllbnRfcHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLmdldF9wcm90b2NvbF9uYW1lKHNlcnZlcl9wcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0dHlwZSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTk9URTogd2UgbXVzdCBlbmFibGUgIkFMTCIgY2lwaGVycywgb3RoZXJ3aXNlIGFuIFNTTHYyMyBjbGllbnQKKyAgICAgICAgICAgICMgd2lsbCBzZW5kIGFuIFNTTHYzIGhlbGxvIChyYXRoZXIgdGhhbiBTU0x2Mikgc3RhcnRpbmcgZnJvbQorICAgICAgICAgICAgIyBPcGVuU1NMIDEuMC4wIChzZWUgaXNzdWUgIzgzMjIpLgorICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KENFUlRGSUxFLCBzZXJ2ZXJfcHJvdG9jb2wsIGNlcnRzcmVxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRVJURklMRSwgQ0VSVEZJTEUsIGNsaWVudF9wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPSJBTEwiLCBjaGF0dHk9RmFsc2UpCisgICAgICAgICMgUHJvdG9jb2wgbWlzbWF0Y2ggY2FuIHJlc3VsdCBpbiBlaXRoZXIgYW4gU1NMRXJyb3IsIG9yIGEKKyAgICAgICAgIyAiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIiBlcnJvci4KKyAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKKyAgICAgICAgICAgIGlmIGV4cGVjdF9zdWNjZXNzOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGV4cGVjdF9zdWNjZXNzIG9yIGUuZXJybm8gIT0gZXJybm8uRUNPTk5SRVNFVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGV4cGVjdF9zdWNjZXNzOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAorICAgICAgICAgICAgICAgICAgICAiQ2xpZW50IHByb3RvY29sICVzIHN1Y2NlZWRlZCB3aXRoIHNlcnZlciBwcm90b2NvbCAlcyEiCisgICAgICAgICAgICAgICAgICAgICUgKHNzbC5nZXRfcHJvdG9jb2xfbmFtZShjbGllbnRfcHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICBzc2wuZ2V0X3Byb3RvY29sX25hbWUoc2VydmVyX3Byb3RvY29sKSkpCisKKworICAgIGNsYXNzIFRocmVhZGVkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiB0ZXN0X3J1ZGVfc2h1dGRvd24oc2VsZik6CisgICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBJT0Vycm9yCisgICAgICAgICAgICBpbiB0aGUgY2xpZW50IHdoZW4gYXR0ZW1wdGluZyBoYW5kc2hha2UuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBwb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzLCBIT1NUKQorCisgICAgICAgICAgICAjIGBsaXN0ZW5lcmAgcnVucyBpbiBhIHRocmVhZC4gIEl0IHNpdHMgaW4gYW4gYWNjZXB0KCkgdW50aWwKKyAgICAgICAgICAgICMgdGhlIG1haW4gdGhyZWFkIGNvbm5lY3RzLiAgVGhlbiBpdCBydWRlbHkgY2xvc2VzIHRoZSBzb2NrZXQsCisgICAgICAgICAgICAjIGFuZCBzZXRzIEV2ZW50IGBsaXN0ZW5lcl9nb25lYCB0byBsZXQgdGhlIG1haW4gdGhyZWFkIGtub3cKKyAgICAgICAgICAgICMgdGhlIHNvY2tldCBpcyBnb25lLgorICAgICAgICAgICAgZGVmIGxpc3RlbmVyKCk6CisgICAgICAgICAgICAgICAgcy5saXN0ZW4oNSkKKyAgICAgICAgICAgICAgICBsaXN0ZW5lcl9yZWFkeS5zZXQoKQorICAgICAgICAgICAgICAgIHMuYWNjZXB0KCkKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBsaXN0ZW5lcl9nb25lLnNldCgpCisKKyAgICAgICAgICAgIGRlZiBjb25uZWN0b3IoKToKKyAgICAgICAgICAgICAgICBsaXN0ZW5lcl9yZWFkeS53YWl0KCkKKyAgICAgICAgICAgICAgICBjID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICAgICAgYy5jb25uZWN0KChIT1NULCBwb3J0KSkKKyAgICAgICAgICAgICAgICBsaXN0ZW5lcl9nb25lLndhaXQoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3NsX3NvY2sgPSBzc2wud3JhcF9zb2NrZXQoYykKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnY29ubmVjdGluZyB0byBjbG9zZWQgU1NMIHNvY2tldCBzaG91bGQgaGF2ZSBmYWlsZWQnKQorCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGlzdGVuZXIpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb25uZWN0b3IoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0LmpvaW4oKQorCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIGRlZiB0ZXN0X2VjaG8oc2VsZik6CisgICAgICAgICAgICAiIiJCYXNpYyB0ZXN0IG9mIGFuIFNTTCBjbGllbnQgY29ubmVjdGluZyB0byBhIHNlcnZlciIiIgorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KENFUlRGSUxFLCBzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5DRVJUX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVEZJTEUsIENFUlRGSUxFLCBzc2wuUFJPVE9DT0xfVExTdjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9VHJ1ZSkKKworICAgICAgICBkZWYgdGVzdF9nZXRwZWVyY2VydChzZWxmKToKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoQ0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9c3NsLkNFUlRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2VydHM9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQorICAgICAgICAgICAgICAgIGNpcGhlciA9IHMuY2lwaGVyKCkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShwcHJpbnQucGZvcm1hdChjZXJ0KSArICdcbicpCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIkNvbm5lY3Rpb24gY2lwaGVyIGlzICIgKyBzdHIoY2lwaGVyKSArICcuXG4nKQorICAgICAgICAgICAgICAgIGlmICdzdWJqZWN0JyBub3QgaW4gY2VydDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBzdWJqZWN0IGZpZWxkIGluIGNlcnRpZmljYXRlOiAlcy4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGNlcnQpKQorICAgICAgICAgICAgICAgIGlmICgoKCdvcmdhbml6YXRpb25OYW1lJywgJ1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uJyksKQorICAgICAgICAgICAgICAgICAgICBub3QgaW4gY2VydFsnc3ViamVjdCddKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAorICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgb3IgaW52YWxpZCAnb3JnYW5pemF0aW9uTmFtZScgZmllbGQgaW4gY2VydGlmaWNhdGUgc3ViamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSAnUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nLiIpCisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgZGVmIHRlc3RfZW1wdHlfY2VydChzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3Rpbmcgd2l0aCBhbiBlbXB0eSBjZXJ0IGZpbGUiIiIKKyAgICAgICAgICAgIGJhZF9jZXJ0X3Rlc3Qob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibnVsbGNlcnQucGVtIikpCisgICAgICAgIGRlZiB0ZXN0X21hbGZvcm1lZF9jZXJ0KHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB3aXRoIGEgYmFkbHkgZm9ybWF0dGVkIGNlcnRpZmljYXRlIChzeW50YXggZXJyb3IpIiIiCisgICAgICAgICAgICBiYWRfY2VydF90ZXN0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWRjZXJ0LnBlbSIpKQorICAgICAgICBkZWYgdGVzdF9ub25leGlzdGluZ19jZXJ0KHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB3aXRoIGEgbm9uLWV4aXN0aW5nIGNlcnQgZmlsZSIiIgorICAgICAgICAgICAgYmFkX2NlcnRfdGVzdChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmdjZXJ0LnBlbSIpKQorICAgICAgICBkZWYgdGVzdF9tYWxmb3JtZWRfa2V5KHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB3aXRoIGEgYmFkbHkgZm9ybWF0dGVkIGtleSAoc3ludGF4IGVycm9yKSIiIgorICAgICAgICAgICAgYmFkX2NlcnRfdGVzdChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFka2V5LnBlbSIpKQorCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3NzbHYyKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhbiBTU0x2MiBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlBST1RPQ09MX1NTTHYyIG5lZWRlZCIpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYyLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKKworICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAorICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF9zc2x2MjMoc2VsZik6CisgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGFuIFNTTHYyMyBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlKQorCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQorCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQorCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3NzbHYzKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhbiBTU0x2MyBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKKworICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAorICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF90bHN2MShzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MSBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKKworICAgICAgICBkZWYgdGVzdF9zdGFydHRscyhzZWxmKToKKyAgICAgICAgICAgICIiIlN3aXRjaGluZyBmcm9tIGNsZWFyIHRleHQgdG8gZW5jcnlwdGVkIGFuZCBiYWNrIGFnYWluLiIiIgorICAgICAgICAgICAgbXNncyA9ICgibXNnIDEiLCAiTVNHIDIiLCAiU1RBUlRUTFMiLCAiTVNHIDMiLCAibXNnIDQiLCAiRU5EVExTIiwgIm1zZyA1IiwgIm1zZyA2IikKKworICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKENFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9UTFN2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHRsc19zZXJ2ZXI9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3cmFwcGVkID0gRmFsc2UKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgICAgICBzLnNldGJsb2NraW5nKDEpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICBmb3IgaW5kYXRhIGluIG1zZ3M6CisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNsaWVudDogIHNlbmRpbmcgJXMuLi5cbiIgJSByZXByKGluZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHdyYXBwZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb25uLndyaXRlKGluZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEgPSBjb25uLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcy5zZW5kKGluZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEgPSBzLnJlY3YoMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGF0YSA9PSAiU1RBUlRUTFMiIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YS5zdHJpcCgpLmxvd2VyKCkuc3RhcnRzd2l0aCgib2siKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFNUQVJUVExTIG9rLCBzd2l0Y2ggdG8gc2VjdXJlIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpZW50OiAgcmVhZCAlcyBmcm9tIHNlcnZlciwgc3RhcnRpbmcgVExTLi4uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgcmVwcihvdXRkYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4gPSBzc2wud3JhcF9zb2NrZXQocywgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAoaW5kYXRhID09ICJFTkRUTFMiIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YS5zdHJpcCgpLmxvd2VyKCkuc3RhcnRzd2l0aCgib2siKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEVORFRMUyBvaywgc3dpdGNoIGJhY2sgdG8gY2xlYXIgdGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGllbnQ6ICByZWFkICVzIGZyb20gc2VydmVyLCBlbmRpbmcgVExTLi4uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgcmVwcihvdXRkYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBjb25uLnVud3JhcCgpCisgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpZW50OiAgcmVhZCAlcyBmcm9tIHNlcnZlclxuIiAlIHJlcHIob3V0ZGF0YSkpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBjbGllbnQ6ICBjbG9zaW5nIGNvbm5lY3Rpb24uXG4iKQorICAgICAgICAgICAgICAgIGlmIHdyYXBwZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbm4ud3JpdGUoIm92ZXJcbiIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcy5zZW5kKCJvdmVyXG4iKQorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgIGRlZiB0ZXN0X3NvY2tldHNlcnZlcihzZWxmKToKKyAgICAgICAgICAgICIiIlVzaW5nIGEgU29ja2V0U2VydmVyIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIFNTTCBjb25uZWN0aW9ucy4iIiIKKyAgICAgICAgICAgIHNlcnZlciA9IFNvY2tldFNlcnZlckhUVFBTU2VydmVyKENFUlRGSUxFKQorICAgICAgICAgICAgZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgICAgICBzZXJ2ZXIuc3RhcnQoZmxhZykKKyAgICAgICAgICAgICMgd2FpdCBmb3IgaXQgdG8gc3RhcnQKKyAgICAgICAgICAgIGZsYWcud2FpdCgpCisgICAgICAgICAgICAjIHRyeSB0byBjb25uZWN0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oQ0VSVEZJTEUsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGQxID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICBkMiA9ICcnCisgICAgICAgICAgICAgICAgIyBub3cgZmV0Y2ggdGhlIHNhbWUgZGF0YSBmcm9tIHRoZSBIVFRQUyBzZXJ2ZXIKKyAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cHM6Ly8xMjcuMC4wLjE6JWQvJXMnICUgKAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCwgb3MucGF0aC5zcGxpdChDRVJURklMRSlbMV0pCisgICAgICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICBmID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgICAgICAgICAgICAgIGRsZW4gPSBmLmluZm8oKS5nZXRoZWFkZXIoImNvbnRlbnQtbGVuZ3RoIikKKyAgICAgICAgICAgICAgICBpZiBkbGVuIGFuZCAoaW50KGRsZW4pID4gMCk6CisgICAgICAgICAgICAgICAgICAgIGQyID0gZi5yZWFkKGludChkbGVuKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpZW50OiByZWFkICVkIGJ5dGVzIGZyb20gcmVtb3RlIHNlcnZlciAnJXMnXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobGVuKGQyKSwgc2VydmVyKSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBkMikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VydmVyLnN0b3AoKQorICAgICAgICAgICAgICAgIHNlcnZlci5qb2luKCkKKworICAgICAgICBkZWYgdGVzdF93cmFwcGVkX2FjY2VwdChzZWxmKToKKyAgICAgICAgICAgICIiIkNoZWNrIHRoZSBhY2NlcHQoKSBtZXRob2Qgb24gU1NMIHNvY2tldHMuIiIiCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoQ0VSVEZJTEUsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRGSUxFLCBDRVJURklMRSwgc3NsLlBST1RPQ09MX1NTTHYyMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBfYWNjZXB0aW5nX3NvY2tldD1UcnVlKQorCisgICAgICAgIGRlZiB0ZXN0X2FzeW5jb3JlX3NlcnZlcihzZWxmKToKKyAgICAgICAgICAgICIiIkNoZWNrIHRoZSBleGFtcGxlIGFzeW5jb3JlIGludGVncmF0aW9uLiIiIgorICAgICAgICAgICAgaW5kYXRhID0gIlRFU1QgTUVTU0FHRSBvZiBtaXhlZCBjYXNlXG4iCisKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlcnZlciA9IEFzeW5jb3JlRWNob1NlcnZlcihDRVJURklMRSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKQorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoJzEyNy4wLjAuMScsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpZW50OiAgc2VuZGluZyAlcy4uLlxuIiAlIChyZXByKGluZGF0YSkpKQorICAgICAgICAgICAgICAgIHMud3JpdGUoaW5kYXRhKQorICAgICAgICAgICAgICAgIG91dGRhdGEgPSBzLnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xpZW50OiAgcmVhZCAlc1xuIiAlIHJlcHIob3V0ZGF0YSkpCisgICAgICAgICAgICAgICAgaWYgb3V0ZGF0YSAhPSBpbmRhdGEubG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAorICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBkYXRhIDw8JXM+PiAoJWQpIHJlY2VpdmVkOyBleHBlY3RlZCA8PCVzPj4gKCVkKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAob3V0ZGF0YVs6bWluKGxlbihvdXRkYXRhKSwyMCldLCBsZW4ob3V0ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRhdGFbOm1pbihsZW4oaW5kYXRhKSwyMCldLmxvd2VyKCksIGxlbihpbmRhdGEpKSkKKyAgICAgICAgICAgICAgICBzLndyaXRlKCJvdmVyXG4iKQorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xpZW50OiAgY2xvc2luZyBjb25uZWN0aW9uLlxuIikKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICBkZWYgdGVzdF9yZWN2X3NlbmQoc2VsZik6CisgICAgICAgICAgICAiIiJUZXN0IHJlY3YoKSwgc2VuZCgpIGFuZCBmcmllbmRzLiIiIgorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoQ0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9c3NsLkNFUlRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfVExTdjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjZXJ0cz1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAjIGhlbHBlciBtZXRob2RzIGZvciBzdGFuZGFyZGlzaW5nIHJlY3YqIG1ldGhvZCBzaWduYXR1cmVzCisgICAgICAgICAgICAgICAgZGVmIF9yZWN2X2ludG8oKToKKyAgICAgICAgICAgICAgICAgICAgYiA9IGJ5dGVhcnJheSgiXDAiKjEwMCkKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSBzLnJlY3ZfaW50byhiKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYls6Y291bnRdCisKKyAgICAgICAgICAgICAgICBkZWYgX3JlY3Zmcm9tX2ludG8oKToKKyAgICAgICAgICAgICAgICAgICAgYiA9IGJ5dGVhcnJheSgiXDAiKjEwMCkKKyAgICAgICAgICAgICAgICAgICAgY291bnQsIGFkZHIgPSBzLnJlY3Zmcm9tX2ludG8oYikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJbOmNvdW50XQorCisgICAgICAgICAgICAgICAgIyAobmFtZSwgbWV0aG9kLCB3aGV0aGVyIHRvIGV4cGVjdCBzdWNjZXNzLCAqYXJncykKKyAgICAgICAgICAgICAgICBzZW5kX21ldGhvZHMgPSBbCisgICAgICAgICAgICAgICAgICAgICgnc2VuZCcsIHMuc2VuZCwgVHJ1ZSwgW10pLAorICAgICAgICAgICAgICAgICAgICAoJ3NlbmR0bycsIHMuc2VuZHRvLCBGYWxzZSwgWyJzb21lLmFkZHJlc3MiXSksCisgICAgICAgICAgICAgICAgICAgICgnc2VuZGFsbCcsIHMuc2VuZGFsbCwgVHJ1ZSwgW10pLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICByZWN2X21ldGhvZHMgPSBbCisgICAgICAgICAgICAgICAgICAgICgncmVjdicsIHMucmVjdiwgVHJ1ZSwgW10pLAorICAgICAgICAgICAgICAgICAgICAoJ3JlY3Zmcm9tJywgcy5yZWN2ZnJvbSwgRmFsc2UsIFsic29tZS5hZGRyZXNzIl0pLAorICAgICAgICAgICAgICAgICAgICAoJ3JlY3ZfaW50bycsIF9yZWN2X2ludG8sIFRydWUsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgKCdyZWN2ZnJvbV9pbnRvJywgX3JlY3Zmcm9tX2ludG8sIEZhbHNlLCBbXSksCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIGRhdGFfcHJlZml4ID0gdSJQUkVGSVhfIgorCisgICAgICAgICAgICAgICAgZm9yIG1ldGhfbmFtZSwgc2VuZF9tZXRoLCBleHBlY3Rfc3VjY2VzcywgYXJncyBpbiBzZW5kX21ldGhvZHM6CisgICAgICAgICAgICAgICAgICAgIGluZGF0YSA9IGRhdGFfcHJlZml4ICsgbWV0aF9uYW1lCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfbWV0aChpbmRhdGEuZW5jb2RlKCdBU0NJSScsICdzdHJpY3QnKSwgKmFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhID0gcy5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEgPSBvdXRkYXRhLmRlY29kZSgnQVNDSUknLCAnc3RyaWN0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG91dGRhdGEgIT0gaW5kYXRhLmxvd2VyKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2hpbGUgc2VuZGluZyB3aXRoIDw8JXM+PiBiYWQgZGF0YSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PCVyPj4gKCVkKSByZWNlaXZlZDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgPDwlcj4+ICglZClcbiIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRoX25hbWUsIG91dGRhdGFbOjIwXSwgbGVuKG91dGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kYXRhWzoyMF0sIGxlbihpbmRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3Rfc3VjY2VzczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gc2VuZCB3aXRoIG1ldGhvZCA8PCVzPj47ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHRvIHN1Y2NlZWQuXG4iICUgKG1ldGhfbmFtZSwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0cihlKS5zdGFydHN3aXRoKG1ldGhfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWV0aG9kIDw8JXM+PiBmYWlsZWQgd2l0aCB1bmV4cGVjdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbiBtZXNzYWdlOiAlc1xuIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhfbmFtZSwgZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICAgICAgZm9yIG1ldGhfbmFtZSwgcmVjdl9tZXRoLCBleHBlY3Rfc3VjY2VzcywgYXJncyBpbiByZWN2X21ldGhvZHM6CisgICAgICAgICAgICAgICAgICAgIGluZGF0YSA9IGRhdGFfcHJlZml4ICsgbWV0aF9uYW1lCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuc2VuZChpbmRhdGEuZW5jb2RlKCdBU0NJSScsICdzdHJpY3QnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEgPSByZWN2X21ldGgoKmFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhID0gb3V0ZGF0YS5kZWNvZGUoJ0FTQ0lJJywgJ3N0cmljdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvdXRkYXRhICE9IGluZGF0YS5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldoaWxlIHJlY2VpdmluZyB3aXRoIDw8JXM+PiBiYWQgZGF0YSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PCVyPj4gKCVkKSByZWNlaXZlZDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgPDwlcj4+ICglZClcbiIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRoX25hbWUsIG91dGRhdGFbOjIwXSwgbGVuKG91dGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kYXRhWzoyMF0sIGxlbihpbmRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3Rfc3VjY2VzczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVjZWl2ZSB3aXRoIG1ldGhvZCA8PCVzPj47ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHRvIHN1Y2NlZWQuXG4iICUgKG1ldGhfbmFtZSwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0cihlKS5zdGFydHN3aXRoKG1ldGhfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWV0aG9kIDw8JXM+PiBmYWlsZWQgd2l0aCB1bmV4cGVjdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbiBtZXNzYWdlOiAlc1xuIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhfbmFtZSwgZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBjb25zdW1lIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHMucmVhZCgpCisKKyAgICAgICAgICAgICAgICBzLndyaXRlKCJvdmVyXG4iLmVuY29kZSgiQVNDSUkiLCAic3RyaWN0IikpCisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgZGVmIHRlc3RfaGFuZHNoYWtlX3RpbWVvdXQoc2VsZik6CisgICAgICAgICAgICAjIElzc3VlICM1MTAzOiBTU0wgaGFuZHNoYWtlIG11c3QgcmVzcGVjdCB0aGUgc29ja2V0IHRpbWVvdXQKKyAgICAgICAgICAgIHNlcnZlciA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBob3N0ID0gIjEyNy4wLjAuMSIKKyAgICAgICAgICAgIHBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlcnZlcikKKyAgICAgICAgICAgIHN0YXJ0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAgICAgZmluaXNoID0gRmFsc2UKKworICAgICAgICAgICAgZGVmIHNlcnZlKCk6CisgICAgICAgICAgICAgICAgc2VydmVyLmxpc3Rlbig1KQorICAgICAgICAgICAgICAgIHN0YXJ0ZWQuc2V0KCkKKyAgICAgICAgICAgICAgICBjb25ucyA9IFtdCisgICAgICAgICAgICAgICAgd2hpbGUgbm90IGZpbmlzaDoKKyAgICAgICAgICAgICAgICAgICAgciwgdywgZSA9IHNlbGVjdC5zZWxlY3QoW3NlcnZlcl0sIFtdLCBbXSwgMC4xKQorICAgICAgICAgICAgICAgICAgICBpZiBzZXJ2ZXIgaW4gcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTGV0IHRoZSBzb2NrZXQgaGFuZyBhcm91bmQgcmF0aGVyIHRoYW4gaGF2aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAjIGl0IGNsb3NlZCBieSBnYXJiYWdlIGNvbGxlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBjb25ucy5hcHBlbmQoc2VydmVyLmFjY2VwdCgpWzBdKQorCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmUpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHN0YXJ0ZWQud2FpdCgpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgICAgICAgICBjLnNldHRpbWVvdXQoMC4yKQorICAgICAgICAgICAgICAgICAgICBjLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgICAgICAgICAjIFdpbGwgYXR0ZW1wdCBoYW5kc2hha2UgYW5kIHRpbWUgb3V0CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKHNzbC5TU0xFcnJvciwgInRpbWVkIG91dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldCwgYykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgICAgICAgICBjLnNldHRpbWVvdXQoMC4yKQorICAgICAgICAgICAgICAgICAgICBjID0gc3NsLndyYXBfc29ja2V0KGMpCisgICAgICAgICAgICAgICAgICAgICMgV2lsbCBhdHRlbXB0IGhhbmRzaGFrZSBhbmQgdGltZSBvdXQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoc3NsLlNTTEVycm9yLCAidGltZWQgb3V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5jb25uZWN0LCAoaG9zdCwgcG9ydCkpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgYy5jbG9zZSgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZpbmlzaCA9IFRydWUKKyAgICAgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICAgICAgZGVmIHRlc3RfZGVmYXVsdF9jaXBoZXJzKHNlbGYpOgorICAgICAgICAgICAgd2l0aCBUaHJlYWRlZEVjaG9TZXJ2ZXIoQ0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlKSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyBGb3JjZSBhIHNldCBvZiB3ZWFrIGNpcGhlcnMgb24gb3VyIGNsaWVudCBzb2NrZXQKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPSJERVMiKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibm8gREVTIGNpcGhlciBhdmFpbGFibGUiKQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChPU0Vycm9yLCBzc2wuU1NMRXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibm8gc2hhcmVkIGNpcGhlciIsIHN0cihzZXJ2ZXIuY29ubl9lcnJvcnNbMF0pKQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1GYWxzZSk6CisgICAgZ2xvYmFsIENFUlRGSUxFLCBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQsIE5PS0lBQ0VSVAorICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXljZXJ0LnBlbSIpCisgICAgU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUID0gb3MucGF0aC5qb2luKAorICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKKyAgICAgICAgImh0dHBzX3N2bl9weXRob25fb3JnX3Jvb3QucGVtIikKKyAgICBOT0tJQUNFUlQgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub2tpYS5wZW0iKQorCisgICAgaWYgKG5vdCBvcy5wYXRoLmV4aXN0cyhDRVJURklMRSkgb3IKKyAgICAgICAgbm90IG9zLnBhdGguZXhpc3RzKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkgb3IKKyAgICAgICAgbm90IG9zLnBhdGguZXhpc3RzKE5PS0lBQ0VSVCkpOgorICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlcyEiKQorCisgICAgdGVzdHMgPSBbQmFzaWNUZXN0cywgQmFzaWNTb2NrZXRUZXN0c10KKworICAgIGlmIHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyk6CisgICAgICAgIHRlc3RzLmFwcGVuZChOZXR3b3JrZWRUZXN0cykKKworICAgIGlmIF9oYXZlX3RocmVhZHM6CisgICAgICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgICAgIGlmIHRocmVhZF9pbmZvIGFuZCB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpOgorICAgICAgICAgICAgdGVzdHMuYXBwZW5kKFRocmVhZGVkVGVzdHMpCisKKyAgICB0cnk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIF9oYXZlX3RocmVhZHM6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnRocmVhZF9pbmZvKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdGFydGZpbGUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdGFydGZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjZThmZAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N0YXJ0ZmlsZS5weQpAQCAtMCwwICsxLDQ1IEBACisjIFJpZGljdWxvdXNseSBzaW1wbGUgdGVzdCBvZiB0aGUgb3Muc3RhcnRmaWxlIGZ1bmN0aW9uIGZvciBXaW5kb3dzLgorIworIyBlbXB0eS52YnMgaXMgYW4gZW1wdHkgZmlsZSAoZXhjZXB0IGZvciBhIGNvbW1lbnQpLCB3aGljaCBkb2VzCisjIG5vdGhpbmcgd2hlbiBydW4gd2l0aCBjc2NyaXB0IG9yIHdzY3JpcHQuCisjCisjIEEgcG9zc2libGUgaW1wcm92ZW1lbnQgd291bGQgYmUgdG8gaGF2ZSBlbXB0eS52YnMgZG8gc29tZXRoaW5nIHRoYXQKKyMgd2UgY2FuIGRldGVjdCBoZXJlLCB0byBtYWtlIHN1cmUgdGhhdCBub3Qgb25seSB0aGUgb3Muc3RhcnRmaWxlKCkKKyMgY2FsbCBzdWNjZWVkZWQsIGJ1dCBhbHNvIHRoZSB0aGUgc2NyaXB0IGFjdHVhbGx5IGhhcyBydW4uCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBvcworZnJvbSBvcyBpbXBvcnQgcGF0aAorZnJvbSB0aW1lIGltcG9ydCBzbGVlcAorCitzdGFydGZpbGUgPSB0ZXN0X3N1cHBvcnQuZ2V0X2F0dHJpYnV0ZShvcywgJ3N0YXJ0ZmlsZScpCisKKworY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X25vbmV4aXN0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzdGFydGZpbGUsICJub25leGlzdGluZy52YnMiKQorCisgICAgZGVmIHRlc3Rfbm9uZXhpc3RpbmdfdShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3RhcnRmaWxlLCB1Im5vbmV4aXN0aW5nLnZicyIpCisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgZW1wdHkgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImVtcHR5LnZicyIpCisgICAgICAgIHN0YXJ0ZmlsZShlbXB0eSkKKyAgICAgICAgc3RhcnRmaWxlKGVtcHR5LCAib3BlbiIpCisgICAgICAgICMgR2l2ZSB0aGUgY2hpbGQgcHJvY2VzcyBzb21lIHRpbWUgdG8gZXhpdCBiZWZvcmUgd2UgZmluaXNoLgorICAgICAgICAjIE90aGVyd2lzZSB0aGUgY2xlYW51cCBjb2RlIHdpbGwgbm90IGJlIGFibGUgdG8gZGVsZXRlIHRoZSBjd2QsCisgICAgICAgICMgYmVjYXVzZSBpdCBpcyBzdGlsbCBpbiB1c2UuCisgICAgICAgIHNsZWVwKDAuMSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3Uoc2VsZik6CisgICAgICAgIGVtcHR5ID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksICJlbXB0eS52YnMiKQorICAgICAgICBzdGFydGZpbGUodW5pY29kZShlbXB0eSwgIm1iY3MiKSkKKyAgICAgICAgc3RhcnRmaWxlKHVuaWNvZGUoZW1wdHksICJtYmNzIiksICJvcGVuIikKKyAgICAgICAgc2xlZXAoMC4xKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Q2FzZSkKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N0ci5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N0ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjcwNGVhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3RyLnB5CkBAIC0wLDAgKzEsNDYxIEBACisKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBzdHJpbmdfdGVzdHMKKworCitjbGFzcyBTdHJUZXN0KAorICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LAorICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdCwKKyAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVc2VyU3RyaW5nVGVzdCwKKyAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVGVzdCwKKyAgICApOgorCisgICAgdHlwZTJ0ZXN0ID0gc3RyCisKKyAgICAjIFdlIGRvbid0IG5lZWQgdG8gcHJvcGFnYXRlIHRvIHN0cgorICAgIGRlZiBmaXh0eXBlKHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2NyZWF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cignJyksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cigwKSwgJzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cigwTCksICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoKCkpLCAnKCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihbXSksICdbXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHt9KSwgJ3t9JykKKyAgICAgICAgYSA9IFtdCisgICAgICAgIGEuYXBwZW5kKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGEpLCAnW1suLi5dXScpCisgICAgICAgIGEgPSB7fQorICAgICAgICBhWzBdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhKSwgJ3swOiB7Li4ufX0nKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGluZyhzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfZm9ybWF0dGluZyhzZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAnJWMnLl9fbW9kX18sIDB4MTIzNCkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfZm9ybWF0dGluZ19odWdlX3ByZWNpc2lvbihzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IElOVF9NQVgKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIlLnt9ZiIuZm9ybWF0KElOVF9NQVggKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0X3N0cmluZyAlIDIuMzQKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfaHVnZV93aWR0aChzZWxmKToKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIle31mIi5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0X3N0cmluZyAlIDIuMzQKKworICAgIGRlZiB0ZXN0X2NvbnZlcnNpb24oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIF9fc3RyX18oKSBiZWhhdmVzIHByb3Blcmx5CisgICAgICAgIGNsYXNzIEZvbzA6CisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzE6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKworICAgICAgICBjbGFzcyBGb28yKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKworICAgICAgICBjbGFzcyBGb28zKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vNCh1bmljb2RlKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvbyIKKworICAgICAgICBjbGFzcyBGb281KHN0cik6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vNihzdHIpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb29zIgorCisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vdSIKKworICAgICAgICBjbGFzcyBGb283KHVuaWNvZGUpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb29zIgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvb3UiCisKKyAgICAgICAgY2xhc3MgRm9vOChzdHIpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBjb250ZW50PSIiKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyLl9fbmV3X18oY2xzLCAyKmNvbnRlbnQpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGNsYXNzIEZvbzkoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAibm90IHVuaWNvZGUiCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihGb28wKCkpLnN0YXJ0c3dpdGgoIjwiKSkgIyB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIF9fdW5pY29kZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzEoKSksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb28yKCkpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vMygpKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzQoImJhciIpKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzUoImJhciIpKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzYoImJhciIpKSwgImZvb3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb283KCJiYXIiKSksICJmb29zIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vOCgiZm9vIikpLCAiZm9vZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vOSgiZm9vIikpLCAic3RyaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzkoImZvbyIpKSwgdSJub3QgdW5pY29kZSIpCisKKyAgICBkZWYgdGVzdF9leHBhbmR0YWJzX292ZXJmbG93c19ncmFjZWZ1bGx5KHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCBvbmx5IGFmZmVjdHMgMzItYml0IHBsYXRmb3JtcyBiZWNhdXNlIGV4cGFuZHRhYnMgY2FuIG9ubHkgdGFrZQorICAgICAgICAjIGFuIGludCBhcyB0aGUgbWF4IHZhbHVlLCBub3QgYSA2NC1iaXQgQyBsb25nLiAgSWYgZXhwYW5kdGFicyBpcyBjaGFuZ2VkCisgICAgICAgICMgdG8gdGFrZSBhIDY0LWJpdCBsb25nLCB0aGlzIHRlc3Qgc2hvdWxkIGFwcGx5IHRvIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIGlmIHN5cy5tYXhpbnQgPiAoMSA8PCAzMikgb3Igc3RydWN0LmNhbGNzaXplKCdQJykgIT0gNDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAndFx0dFx0Jy5leHBhbmR0YWJzLCBzeXMubWF4aW50KQorCisgICAgZGVmIHRlc3RfX2Zvcm1hdF9fKHNlbGYpOgorICAgICAgICBkZWYgdGVzdCh2YWx1ZSwgZm9ybWF0LCBleHBlY3RlZCk6CisgICAgICAgICAgICAjIHRlc3QgYm90aCB3aXRoIGFuZCB3aXRob3V0IHRoZSB0cmFpbGluZyAncycKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUuX19mb3JtYXRfXyhmb3JtYXQpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUuX19mb3JtYXRfXyhmb3JtYXQgKyAncycpLCBleHBlY3RlZCkKKworICAgICAgICB0ZXN0KCcnLCAnJywgJycpCisgICAgICAgIHRlc3QoJ2FiYycsICcnLCAnYWJjJykKKyAgICAgICAgdGVzdCgnYWJjJywgJy4zJywgJ2FiYycpCisgICAgICAgIHRlc3QoJ2FiJywgJy4zJywgJ2FiJykKKyAgICAgICAgdGVzdCgnYWJjZGVmJywgJy4zJywgJ2FiYycpCisgICAgICAgIHRlc3QoJ2FiY2RlZicsICcuMCcsICcnKQorICAgICAgICB0ZXN0KCdhYmMnLCAnMy4zJywgJ2FiYycpCisgICAgICAgIHRlc3QoJ2FiYycsICcyLjMnLCAnYWJjJykKKyAgICAgICAgdGVzdCgnYWJjJywgJzIuMicsICdhYicpCisgICAgICAgIHRlc3QoJ2FiYycsICczLjInLCAnYWIgJykKKyAgICAgICAgdGVzdCgncmVzdWx0JywgJ3g8MCcsICdyZXN1bHQnKQorICAgICAgICB0ZXN0KCdyZXN1bHQnLCAneDw1JywgJ3Jlc3VsdCcpCisgICAgICAgIHRlc3QoJ3Jlc3VsdCcsICd4PDYnLCAncmVzdWx0JykKKyAgICAgICAgdGVzdCgncmVzdWx0JywgJ3g8NycsICdyZXN1bHR4JykKKyAgICAgICAgdGVzdCgncmVzdWx0JywgJ3g8OCcsICdyZXN1bHR4eCcpCisgICAgICAgIHRlc3QoJ3Jlc3VsdCcsICcgPDcnLCAncmVzdWx0ICcpCisgICAgICAgIHRlc3QoJ3Jlc3VsdCcsICc8NycsICdyZXN1bHQgJykKKyAgICAgICAgdGVzdCgncmVzdWx0JywgJz43JywgJyByZXN1bHQnKQorICAgICAgICB0ZXN0KCdyZXN1bHQnLCAnPjgnLCAnICByZXN1bHQnKQorICAgICAgICB0ZXN0KCdyZXN1bHQnLCAnXjgnLCAnIHJlc3VsdCAnKQorICAgICAgICB0ZXN0KCdyZXN1bHQnLCAnXjknLCAnIHJlc3VsdCAgJykKKyAgICAgICAgdGVzdCgncmVzdWx0JywgJ14xMCcsICcgIHJlc3VsdCAgJykKKyAgICAgICAgdGVzdCgnYScsICcxMDAwMCcsICdhJyArICcgJyAqIDk5OTkpCisgICAgICAgIHRlc3QoJycsICcxMDAwMCcsICcgJyAqIDEwMDAwKQorICAgICAgICB0ZXN0KCcnLCAnMTAwMDAwMDAnLCAnICcgKiAxMDAwMDAwMCkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5mb3JtYXQoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2EnLmZvcm1hdCgpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiJy5mb3JtYXQoKSwgJ2FiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXt7Jy5mb3JtYXQoKSwgJ2F7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYX19Jy5mb3JtYXQoKSwgJ2F9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne3tiJy5mb3JtYXQoKSwgJ3tiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnfX1iJy5mb3JtYXQoKSwgJ31iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXt7YicuZm9ybWF0KCksICdhe2InKQorCisgICAgICAgICMgZXhhbXBsZXMgZnJvbSB0aGUgUEVQOgorICAgICAgICBpbXBvcnQgZGF0ZXRpbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiTXkgbmFtZSBpcyB7MH0iLmZvcm1hdCgnRnJlZCcpLCAiTXkgbmFtZSBpcyBGcmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiTXkgbmFtZSBpcyB7MFtuYW1lXX0iLmZvcm1hdChkaWN0KG5hbWU9J0ZyZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIk15IG5hbWUgaXMgRnJlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIk15IG5hbWUgaXMgezB9IDote3t9fSIuZm9ybWF0KCdGcmVkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIk15IG5hbWUgaXMgRnJlZCA6LXt9IikKKworICAgICAgICBkID0gZGF0ZXRpbWUuZGF0ZSgyMDA3LCA4LCAxOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiVGhlIHllYXIgaXMgezAueWVhcn0iLmZvcm1hdChkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHllYXIgaXMgMjAwNyIpCisKKyAgICAgICAgIyBjbGFzc2VzIHdlJ2xsIHVzZSBmb3IgdGVzdGluZworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHg9MTAwKToKKyAgICAgICAgICAgICAgICBzZWxmLl94ID0geAorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgICAgICBjbGFzcyBEOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHIoc2VsZi54KQorCisgICAgICAgICMgY2xhc3Mgd2l0aCBfX3N0cl9fLCBidXQgbm8gX19mb3JtYXRfXworICAgICAgICBjbGFzcyBFOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnRSgnICsgc2VsZi54ICsgJyknCisKKyAgICAgICAgIyBjbGFzcyB3aXRoIF9fcmVwcl9fLCBidXQgbm8gX19mb3JtYXRfXyBvciBfX3N0cl9fCisgICAgICAgIGNsYXNzIEY6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnRignICsgc2VsZi54ICsgJyknCisKKyAgICAgICAgIyBjbGFzcyB3aXRoIF9fZm9ybWF0X18gdGhhdCBmb3J3YXJkcyB0byBzdHJpbmcsIGZvciBzb21lIGZvcm1hdF9zcGVjJ3MKKyAgICAgICAgY2xhc3MgRzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyBpcyAiICsgc2VsZi54CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgaWYgZm9ybWF0X3NwZWMgPT0gJ2QnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0coJyArIHNlbGYueCArICcpJworICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYykKKworICAgICAgICAjIGNsYXNzIHRoYXQgcmV0dXJucyBhIGJhZCB0eXBlIGZyb20gX19mb3JtYXRfXworICAgICAgICBjbGFzcyBIOgorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAxLjAKKworICAgICAgICBjbGFzcyBJKGRhdGV0aW1lLmRhdGUpOgorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnN0cmZ0aW1lKGZvcm1hdF9zcGVjKQorCisgICAgICAgIGNsYXNzIEooaW50KToKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50Ll9fZm9ybWF0X18oc2VsZiAqIDIsIGZvcm1hdF9zcGVjKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5mb3JtYXQoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycuZm9ybWF0KCksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MH0nLmZvcm1hdCgnYWJjJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDp9Jy5mb3JtYXQoJ2FiYycpLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnWHswfScuZm9ybWF0KCdhYmMnKSwgJ1hhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MH1YJy5mb3JtYXQoJ2FiYycpLCAnYWJjWCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1h7MH1ZJy5mb3JtYXQoJ2FiYycpLCAnWGFiY1knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MX0nLmZvcm1hdCgxLCAnYWJjJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdYezF9Jy5mb3JtYXQoMSwgJ2FiYycpLCAnWGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3sxfVgnLmZvcm1hdCgxLCAnYWJjJyksICdhYmNYJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnWHsxfVknLmZvcm1hdCgxLCAnYWJjJyksICdYYWJjWScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfScuZm9ybWF0KC0xNSksICctMTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MH17MX0nLmZvcm1hdCgtMTUsICdhYmMnKSwgJy0xNWFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfVh7MX0nLmZvcm1hdCgtMTUsICdhYmMnKSwgJy0xNVhhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7eycuZm9ybWF0KCksICd7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnfX0nLmZvcm1hdCgpLCAnfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t7fX0nLmZvcm1hdCgpLCAne30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7e3h9fScuZm9ybWF0KCksICd7eH0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7e3swfX19Jy5mb3JtYXQoMTIzKSwgJ3sxMjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne3t7ezB9fX19Jy5mb3JtYXQoKSwgJ3t7MH19JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnfX17eycuZm9ybWF0KCksICd9eycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ319eHt7Jy5mb3JtYXQoKSwgJ314eycpCisKKyAgICAgICAgIyB3ZWlyZCBmaWVsZCBuYW1lcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MFtmb28tYmFyXX0iLmZvcm1hdCh7J2Zvby1iYXInOidiYXonfSksICdiYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MFtmb28gYmFyXX0iLmZvcm1hdCh7J2ZvbyBiYXInOidiYXonfSksICdiYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MFsgXX0iLmZvcm1hdCh7JyAnOjN9KSwgJzMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3tmb28uX3h9Jy5mb3JtYXQoZm9vPUMoMjApKSwgJzIwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezF9ezB9Jy5mb3JtYXQoRCgxMCksIEQoMjApKSwgJzIwMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MC5feC54fScuZm9ybWF0KEMoRCgnYWJjJykpKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swWzBdfScuZm9ybWF0KFsnYWJjJywgJ2RlZiddKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swWzFdfScuZm9ybWF0KFsnYWJjJywgJ2RlZiddKSwgJ2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swWzFdWzBdfScuZm9ybWF0KFsnYWJjJywgWydkZWYnXV0pLCAnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezBbMV1bMF0ueH0nLmZvcm1hdChbJ2FiYycsIFtEKCdkZWYnKV1dKSwgJ2RlZicpCisKKyAgICAgICAgIyBzdHJpbmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOi4zc30nLmZvcm1hdCgnYWJjJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDouM3N9Jy5mb3JtYXQoJ2FiJyksICdhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOi4zc30nLmZvcm1hdCgnYWJjZGVmJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDouMHN9Jy5mb3JtYXQoJ2FiY2RlZicpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6My4zc30nLmZvcm1hdCgnYWJjJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDoyLjNzfScuZm9ybWF0KCdhYmMnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjIuMnN9Jy5mb3JtYXQoJ2FiYycpLCAnYWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDozLjJzfScuZm9ybWF0KCdhYmMnKSwgJ2FiICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOng8MHN9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAncmVzdWx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6eDw1c30nLmZvcm1hdCgncmVzdWx0JyksICdyZXN1bHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDp4PDZzfScuZm9ybWF0KCdyZXN1bHQnKSwgJ3Jlc3VsdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOng8N3N9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAncmVzdWx0eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOng8OHN9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAncmVzdWx0eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDogPDdzfScuZm9ybWF0KCdyZXN1bHQnKSwgJ3Jlc3VsdCAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDo8N3N9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAncmVzdWx0ICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOj43c30nLmZvcm1hdCgncmVzdWx0JyksICcgcmVzdWx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6PjhzfScuZm9ybWF0KCdyZXN1bHQnKSwgJyAgcmVzdWx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjhzfScuZm9ybWF0KCdyZXN1bHQnKSwgJyByZXN1bHQgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjlzfScuZm9ybWF0KCdyZXN1bHQnKSwgJyByZXN1bHQgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMHN9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAnICByZXN1bHQgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjEwMDAwfScuZm9ybWF0KCdhJyksICdhJyArICcgJyAqIDk5OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjEwMDAwfScuZm9ybWF0KCcnKSwgJyAnICogMTAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjEwMDAwMDAwfScuZm9ybWF0KCcnKSwgJyAnICogMTAwMDAwMDApCisKKyAgICAgICAgIyBmb3JtYXQgc3BlY2lmaWVycyBmb3IgdXNlciBkZWZpbmVkIHR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6YWJjfScuZm9ybWF0KEMoKSksICdhYmMnKQorCisgICAgICAgICMgIXIgYW5kICFzIGNvZXJjaW9ucworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFzfScuZm9ybWF0KCdIZWxsbycpLCAnSGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFzOn0nLmZvcm1hdCgnSGVsbG8nKSwgJ0hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezAhczoxNX0nLmZvcm1hdCgnSGVsbG8nKSwgJ0hlbGxvICAgICAgICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXM6MTVzfScuZm9ybWF0KCdIZWxsbycpLCAnSGVsbG8gICAgICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezAhcn0nLmZvcm1hdCgnSGVsbG8nKSwgIidIZWxsbyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFyOn0nLmZvcm1hdCgnSGVsbG8nKSwgIidIZWxsbyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFyfScuZm9ybWF0KEYoJ0hlbGxvJykpLCAnRihIZWxsbyknKQorCisgICAgICAgICMgdGVzdCBmYWxsYmFjayB0byBvYmplY3QuX19mb3JtYXRfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MH0nLmZvcm1hdCh7fSksICd7fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfScuZm9ybWF0KFtdKSwgJ1tdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezB9Jy5mb3JtYXQoWzFdKSwgJ1sxXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfScuZm9ybWF0KEUoJ2RhdGEnKSksICdFKGRhdGEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6ZH0nLmZvcm1hdChHKCdkYXRhJykpLCAnRyhkYXRhKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJ3N0cmluZyBpcyBkYXRhJykKKworICAgICAgICBtc2cgPSAnb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzIGRlcHJlY2F0ZWQnCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKChtc2csIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMH0nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeMTBzfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOj4xNXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJyBzdHJpbmcgaXMgZGF0YScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiezA6ZGF0ZTogJVktJW0tJWR9Ii5mb3JtYXQoSSh5ZWFyPTIwMDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg9OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXk9MjcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0ZTogMjAwNy0wOC0yNyIpCisKKyAgICAgICAgIyB0ZXN0IGRlcml2aW5nIGZyb20gYSBidWlsdGluIHR5cGUgYW5kIG92ZXJyaWRpbmcgX19mb3JtYXRfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MH0iLmZvcm1hdChKKDEwKSksICIyMCIpCisKKworICAgICAgICAjIHN0cmluZyBmb3JtYXQgc3BlY2lmaWVycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDp9Jy5mb3JtYXQoJ2EnKSwgJ2EnKQorCisgICAgICAgICMgY29tcHV0ZWQgZm9ybWF0IHNwZWNpZmllcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiezA6LnsxfX0iLmZvcm1hdCgnaGVsbG8gd29ybGQnLCA1KSwgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiezA6LnsxfXN9Ii5mb3JtYXQoJ2hlbGxvIHdvcmxkJywgNSksICdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswOi57cHJlY2lzaW9ufXN9Ii5mb3JtYXQoJ2hlbGxvIHdvcmxkJywgcHJlY2lzaW9uPTUpLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDp7d2lkdGh9LntwcmVjaXNpb259c30iLmZvcm1hdCgnaGVsbG8gd29ybGQnLCB3aWR0aD0xMCwgcHJlY2lzaW9uPTUpLCAnaGVsbG8gICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswOnt3aWR0aH0ue3ByZWNpc2lvbn1zfSIuZm9ybWF0KCdoZWxsbyB3b3JsZCcsIHdpZHRoPScxMCcsIHByZWNpc2lvbj0nNScpLCAnaGVsbG8gICAgICcpCisKKyAgICAgICAgIyB0ZXN0IHZhcmlvdXMgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICd7Jy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICd9Jy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdheycuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAnYX0nLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ3thJy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICd9YScuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAnezB9Jy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICd7MX0nLmZvcm1hdCwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCAgICd7eH0nLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIn17Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJhYmN7MDp7fSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAiLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInswLn0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswLn0iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInswW30iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswW30iLmZvcm1hdCwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCAgICJ7MF19Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MC5bXX0iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswLi5mb299Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFswfSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezBbMDpmb299Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCAgICJ7Y119Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7eyB7e3swfX0iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswfX0iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsICAgIntmb299Ii5mb3JtYXQsIGJhcj0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAheH0iLmZvcm1hdCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswIX0iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswIXJzfSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAieyF9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7On0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgIns6c30iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInt9Ii5mb3JtYXQpCisKKyAgICAgICAgIyBpc3N1ZSA2MDg5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFswXXh9Ii5mb3JtYXQsIFtOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswWzBdKDEwKX0iLmZvcm1hdCwgW05vbmVdKQorCisgICAgICAgICMgY2FuJ3QgaGF2ZSBhIHJlcGxhY2VtZW50IG9uIHRoZSBmaWVsZCBuYW1lIHBvcnRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnezBbezF9XX0nLmZvcm1hdCwgJ2FiY2RlZmcnLCA0KQorCisgICAgICAgICMgZXhjZWVkIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MDp7MTp7Mn19fSIuZm9ybWF0LCAnYWJjJywgJ3MnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswOnsxOnsyOnszOns0Ons1Ons2fX19fX19fSIuZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KQorCisgICAgICAgICMgc3RyaW5nIGZvcm1hdCBzcGVjIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezA6LXN9Ii5mb3JtYXQsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsICIiLCAiLSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MDo9c30iLmZvcm1hdCwgJycpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfaHVnZV9wcmVjaXNpb24oc2VsZik6CisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSAiLnt9ZiIuZm9ybWF0KHN5cy5tYXhzaXplICsgMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHJlc3VsdCA9IGZvcm1hdCgyLjM0LCBmb3JtYXRfc3RyaW5nKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2h1Z2Vfd2lkdGgoc2VsZik6CisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSAie31mIi5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0KDIuMzQsIGZvcm1hdF9zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfaHVnZV9pdGVtX251bWJlcihzZWxmKToKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICJ7e3t9Oi42Zn19Ii5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0X3N0cmluZy5mb3JtYXQoMi4zNCkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9hdXRvX251bWJlcmluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4PTEwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5feCA9IHgKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30nLmZvcm1hdCgxMCksICcxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6NX0nLmZvcm1hdCgncycpLCAncyAgICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7IXJ9Jy5mb3JtYXQoJ3MnKSwgIidzJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3suX3h9Jy5mb3JtYXQoQygxMCkpLCAnMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7WzFdfScuZm9ybWF0KFsxLCAyXSksICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne1thXX0nLmZvcm1hdCh7J2EnOjQsICdiJzoyfSksICc0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXt9Ynt9YycuZm9ybWF0KDAsIDEpLCAnYTBiMWMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2F7Ont9fWInLmZvcm1hdCgneCcsICdeMTAnKSwgJ2EgICAgeCAgICAgYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2F7Ont9eH1iJy5mb3JtYXQoMjAsICcjJyksICdhMHgxNGInKQorCisgICAgICAgICMgY2FuJ3QgbWl4IGFuZCBtYXRjaCBudW1iZXJpbmcgYW5kIGF1dG8tbnVtYmVyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICd7fXsxfScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAnezF9e30nLmZvcm1hdCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ3s6ezF9fScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAnezA6e319Jy5mb3JtYXQsIDEsIDIpCisKKyAgICAgICAgIyBjYW4gbWl4IGFuZCBtYXRjaCBhdXRvLW51bWJlcmluZyBhbmQgbmFtZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne2Z9e30nLmZvcm1hdCg0LCBmPSd0ZXN0JyksICd0ZXN0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9e2Z9Jy5mb3JtYXQoNCwgZj0ndGVzdCcpLCAnNHRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7OntmfX17Z317fScuZm9ybWF0KDEsIDMsIGc9J2cnLCBmPTIpLCAnIDFnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3tmOnt9fXt9e2d9Jy5mb3JtYXQoMiwgNCwgZj0xLCBnPSdnJyksICcgMTRnJykKKworICAgIGRlZiB0ZXN0X2J1ZmZlcl9pc19yZWFkb25seShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuc3RkaW4ucmVhZGludG8sIGIiIikKKworICAgIGRlZiB0ZXN0X2VuY29kZV9hbmRfZGVjb2RlX2t3YXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjZGUnLmVuY29kZSgnYXNjaWknLCAncmVwbGFjZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYmNkZScuZW5jb2RlKCdhc2NpaScsIGVycm9ycz0ncmVwbGFjZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmNkZScuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWJjZGUnLmVuY29kZShlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J2lnbm9yZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBbmRyXDIwMiB4Jy5kZWNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdBbmRyXDIwMiB4Jy5kZWNvZGUoJ2FzY2lpJywgZXJyb3JzPSdpZ25vcmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQW5kclwyMDIgeCcuZGVjb2RlKCdhc2NpaScsICdyZXBsYWNlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuZHJcMjAyIHgnLmRlY29kZShlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J3JlcGxhY2UnKSkKKworICAgIGRlZiB0ZXN0X3N0YXJ0c3dpdGhfZW5kc3dpdGhfZXJyb3JzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvcik6CisgICAgICAgICAgICAnXHhmZicuc3RhcnRzd2l0aCh1J3gnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvcik6CisgICAgICAgICAgICAnXHhmZicuZW5kc3dpdGgodSd4JykKKyAgICAgICAgZm9yIG1ldGggaW4gKCdmb28nLnN0YXJ0c3dpdGgsICdmb28nLmVuZHN3aXRoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBtZXRoKFsnZiddKQorICAgICAgICAgICAgZXhjID0gc3RyKGNtLmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3VuaWNvZGUnLCBleGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdzdHInLCBleGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCd0dXBsZScsIGV4YykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjZlYmVjCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKQEAgLTAsMCArMSwxODUgQEAKKyIiIgorVW5pdHRlc3QgZm9yIHRpbWUuc3RyZnRpbWUKKyIiIgorCitpbXBvcnQgY2FsZW5kYXIKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworCisjIGhlbHBlciBmdW5jdGlvbnMKK2RlZiBmaXhhc2N0aW1lKHMpOgorICAgIGlmIHNbOF0gPT0gJyAnOgorICAgICAgICBzID0gc1s6OF0gKyAnMCcgKyBzWzk6XQorICAgIHJldHVybiBzCisKK2RlZiBlc2NhcGVzdHIodGV4dCwgYW1wbSk6CisgICAgIiIiCisgICAgRXNjYXBlIHRleHQgdG8gZGVhbCB3aXRoIHBvc3NpYmxlIGxvY2FsZSB2YWx1ZXMgdGhhdCBoYXZlIHJlZ2V4CisgICAgc3ludGF4IHdoaWxlIGFsbG93aW5nIHJlZ2V4IHN5bnRheCB1c2VkIGZvciBjb21wYXJpc29uLgorICAgICIiIgorICAgIG5ld190ZXh0ID0gcmUuZXNjYXBlKHRleHQpCisgICAgbmV3X3RleHQgPSBuZXdfdGV4dC5yZXBsYWNlKHJlLmVzY2FwZShhbXBtKSwgYW1wbSkKKyAgICBuZXdfdGV4dCA9IG5ld190ZXh0LnJlcGxhY2UoJ1wlJywgJyUnKQorICAgIG5ld190ZXh0ID0gbmV3X3RleHQucmVwbGFjZSgnXDonLCAnOicpCisgICAgbmV3X3RleHQgPSBuZXdfdGV4dC5yZXBsYWNlKCdcPycsICc/JykKKyAgICByZXR1cm4gbmV3X3RleHQKKworY2xhc3MgU3RyZnRpbWVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqaywgKiprdyk6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICprLCAqKmt3KQorCisgICAgZGVmIF91cGRhdGVfdmFyaWFibGVzKHNlbGYsIG5vdyk6CisgICAgICAgICMgd2UgbXVzdCB1cGRhdGUgdGhlIGxvY2FsIHZhcmlhYmxlcyBvbiBldmVyeSBjeWNsZQorICAgICAgICBzZWxmLmdtdCA9IHRpbWUuZ210aW1lKG5vdykKKyAgICAgICAgbm93ID0gdGltZS5sb2NhbHRpbWUobm93KQorCisgICAgICAgIGlmIG5vd1szXSA8IDEyOiBzZWxmLmFtcG09JyhBTXxhbSknCisgICAgICAgIGVsc2U6IHNlbGYuYW1wbT0nKFBNfHBtKScKKworICAgICAgICBzZWxmLmphbjEgPSB0aW1lLmxvY2FsdGltZSh0aW1lLm1rdGltZSgobm93WzBdLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAwKSkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm93WzhdOiBzZWxmLnR6ID0gdGltZS50em5hbWVbMV0KKyAgICAgICAgICAgIGVsc2U6IHNlbGYudHogPSB0aW1lLnR6bmFtZVswXQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLnR6ID0gJycKKworICAgICAgICBpZiBub3dbM10gPiAxMjogc2VsZi5jbG9jazEyID0gbm93WzNdIC0gMTIKKyAgICAgICAgZWxpZiBub3dbM10gPiAwOiBzZWxmLmNsb2NrMTIgPSBub3dbM10KKyAgICAgICAgZWxzZTogc2VsZi5jbG9jazEyID0gMTIKKworICAgICAgICBzZWxmLm5vdyA9IG5vdworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgamF2YQorICAgICAgICAgICAgamF2YS51dGlsLkxvY2FsZS5zZXREZWZhdWx0KGphdmEudXRpbC5Mb2NhbGUuVVMpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUsICdDJykKKworICAgIGRlZiB0ZXN0X3N0cmZ0aW1lKHNlbGYpOgorICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLl91cGRhdGVfdmFyaWFibGVzKG5vdykKKyAgICAgICAgc2VsZi5zdHJmdGVzdDEobm93KQorICAgICAgICBzZWxmLnN0cmZ0ZXN0Mihub3cpCisKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiU3RyZnRpbWUgdGVzdCwgcGxhdGZvcm06ICVzLCBQeXRob24gdmVyc2lvbjogJXMiICUgXAorICAgICAgICAgICAgICAgICAgKHN5cy5wbGF0Zm9ybSwgc3lzLnZlcnNpb24uc3BsaXQoKVswXSkKKworICAgICAgICBmb3IgaiBpbiByYW5nZSgtNSwgNSk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyNSk6CisgICAgICAgICAgICAgICAgYXJnID0gbm93ICsgKGkraioxMDApKjIzKjM2MDMKKyAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGVfdmFyaWFibGVzKGFyZykKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmZ0ZXN0MShhcmcpCisgICAgICAgICAgICAgICAgc2VsZi5zdHJmdGVzdDIoYXJnKQorCisgICAgZGVmIHN0cmZ0ZXN0MShzZWxmLCBub3cpOgorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJzdHJmdGltZSB0ZXN0IGZvciIsIHRpbWUuY3RpbWUobm93KQorICAgICAgICBub3cgPSBzZWxmLm5vdworICAgICAgICAjIE1ha2Ugc3VyZSBhbnkgY2hhcmFjdGVycyB0aGF0IGNvdWxkIGJlIHRha2VuIGFzIHJlZ2V4IHN5bnRheCBpcworICAgICAgICAjIGVzY2FwZWQgaW4gZXNjYXBlc3RyKCkKKyAgICAgICAgZXhwZWN0YXRpb25zID0gKAorICAgICAgICAgICAgKCclYScsIGNhbGVuZGFyLmRheV9hYmJyW25vd1s2XV0sICdhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUnKSwKKyAgICAgICAgICAgICgnJUEnLCBjYWxlbmRhci5kYXlfbmFtZVtub3dbNl1dLCAnZnVsbCB3ZWVrZGF5IG5hbWUnKSwKKyAgICAgICAgICAgICgnJWInLCBjYWxlbmRhci5tb250aF9hYmJyW25vd1sxXV0sICdhYmJyZXZpYXRlZCBtb250aCBuYW1lJyksCisgICAgICAgICAgICAoJyVCJywgY2FsZW5kYXIubW9udGhfbmFtZVtub3dbMV1dLCAnZnVsbCBtb250aCBuYW1lJyksCisgICAgICAgICAgICAjICVjIHNlZSBiZWxvdworICAgICAgICAgICAgKCclZCcsICclMDJkJyAlIG5vd1syXSwgJ2RheSBvZiBtb250aCBhcyBudW1iZXIgKDAwLTMxKScpLAorICAgICAgICAgICAgKCclSCcsICclMDJkJyAlIG5vd1szXSwgJ2hvdXIgKDAwLTIzKScpLAorICAgICAgICAgICAgKCclSScsICclMDJkJyAlIHNlbGYuY2xvY2sxMiwgJ2hvdXIgKDAxLTEyKScpLAorICAgICAgICAgICAgKCclaicsICclMDNkJyAlIG5vd1s3XSwgJ2p1bGlhbiBkYXkgKDAwMS0zNjYpJyksCisgICAgICAgICAgICAoJyVtJywgJyUwMmQnICUgbm93WzFdLCAnbW9udGggYXMgbnVtYmVyICgwMS0xMiknKSwKKyAgICAgICAgICAgICgnJU0nLCAnJTAyZCcgJSBub3dbNF0sICdtaW51dGUsICgwMC01OSknKSwKKyAgICAgICAgICAgICgnJXAnLCBzZWxmLmFtcG0sICdBTSBvciBQTSBhcyBhcHByb3ByaWF0ZScpLAorICAgICAgICAgICAgKCclUycsICclMDJkJyAlIG5vd1s1XSwgJ3NlY29uZHMgb2YgY3VycmVudCB0aW1lICgwMC02MCknKSwKKyAgICAgICAgICAgICgnJVUnLCAnJTAyZCcgJSAoKG5vd1s3XSArIHNlbGYuamFuMVs2XSkvLzcpLAorICAgICAgICAgICAgICd3ZWVrIG51bWJlciBvZiB0aGUgeWVhciAoU3VuIDFzdCknKSwKKyAgICAgICAgICAgICgnJXcnLCAnMD8lZCcgJSAoKDErbm93WzZdKSAlIDcpLCAnd2Vla2RheSBhcyBhIG51bWJlciAoU3VuIDFzdCknKSwKKyAgICAgICAgICAgICgnJVcnLCAnJTAyZCcgJSAoKG5vd1s3XSArIChzZWxmLmphbjFbNl0gLSAxKSU3KS8vNyksCisgICAgICAgICAgICAnd2VlayBudW1iZXIgb2YgdGhlIHllYXIgKE1vbiAxc3QpJyksCisgICAgICAgICAgICAjICV4IHNlZSBiZWxvdworICAgICAgICAgICAgKCclWCcsICclMDJkOiUwMmQ6JTAyZCcgJSAobm93WzNdLCBub3dbNF0sIG5vd1s1XSksICclSDolTTolUycpLAorICAgICAgICAgICAgKCcleScsICclMDJkJyAlIChub3dbMF0lMTAwKSwgJ3llYXIgd2l0aG91dCBjZW50dXJ5JyksCisgICAgICAgICAgICAoJyVZJywgJyVkJyAlIG5vd1swXSwgJ3llYXIgd2l0aCBjZW50dXJ5JyksCisgICAgICAgICAgICAjICVaIHNlZSBiZWxvdworICAgICAgICAgICAgKCclJScsICclJywgJ3NpbmdsZSBwZXJjZW50IHNpZ24nKSwKKyAgICAgICAgKQorCisgICAgICAgIGZvciBlIGluIGV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgICMgbXVzbid0IHJhaXNlIGEgdmFsdWUgZXJyb3IKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0aW1lLnN0cmZ0aW1lKGVbMF0sIG5vdykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInN0cmZ0aW1lICclcycgZm9ybWF0IGdhdmUgZXJyb3I6ICVzIiAlIChlWzBdLCBlcnJvcikpCisgICAgICAgICAgICBpZiByZS5tYXRjaChlc2NhcGVzdHIoZVsxXSwgc2VsZi5hbXBtKSwgcmVzdWx0KToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBvciByZXN1bHRbMF0gPT0gJyUnOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic3RyZnRpbWUgZG9lcyBub3Qgc3VwcG9ydCBzdGFuZGFyZCAnJXMnIGZvcm1hdCAoJXMpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAlIChlWzBdLCBlWzJdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25mbGljdCBmb3IgJXMgKCVzKTogZXhwZWN0ZWQgJXMsIGJ1dCBnb3QgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGVbMF0sIGVbMl0sIGVbMV0sIHJlc3VsdCkpCisKKyAgICBkZWYgc3RyZnRlc3QyKHNlbGYsIG5vdyk6CisgICAgICAgIG5vd3NlY3MgPSBzdHIobG9uZyhub3cpKVs6LTFdCisgICAgICAgIG5vdyA9IHNlbGYubm93CisKKyAgICAgICAgbm9uc3RhbmRhcmRfZXhwZWN0YXRpb25zID0gKAorICAgICAgICAjIFRoZXNlIGFyZSBzdGFuZGFyZCBidXQgZG9uJ3QgaGF2ZSBwcmVkaWN0YWJsZSBvdXRwdXQKKyAgICAgICAgICAgICgnJWMnLCBmaXhhc2N0aW1lKHRpbWUuYXNjdGltZShub3cpKSwgJ25lYXItYXNjdGltZSgpIGZvcm1hdCcpLAorICAgICAgICAgICAgKCcleCcsICclMDJkLyUwMmQvJTAyZCcgJSAobm93WzFdLCBub3dbMl0sIChub3dbMF0lMTAwKSksCisgICAgICAgICAgICAnJW0vJWQvJXkgJUg6JU06JVMnKSwKKyAgICAgICAgICAgICgnJVonLCAnJXMnICUgc2VsZi50eiwgJ3RpbWUgem9uZSBuYW1lJyksCisKKyAgICAgICAgICAgICMgVGhlc2UgYXJlIHNvbWUgcGxhdGZvcm0gc3BlY2lmaWMgZXh0ZW5zaW9ucworICAgICAgICAgICAgKCclRCcsICclMDJkLyUwMmQvJTAyZCcgJSAobm93WzFdLCBub3dbMl0sIChub3dbMF0lMTAwKSksICdtbS9kZC95eScpLAorICAgICAgICAgICAgKCclZScsICclMmQnICUgbm93WzJdLCAnZGF5IG9mIG1vbnRoIGFzIG51bWJlciwgYmxhbmsgcGFkZGVkICggMC0zMSknKSwKKyAgICAgICAgICAgICgnJWgnLCBjYWxlbmRhci5tb250aF9hYmJyW25vd1sxXV0sICdhYmJyZXZpYXRlZCBtb250aCBuYW1lJyksCisgICAgICAgICAgICAoJyVrJywgJyUyZCcgJSBub3dbM10sICdob3VyLCBibGFuayBwYWRkZWQgKCAwLTIzKScpLAorICAgICAgICAgICAgKCclbicsICdcbicsICduZXdsaW5lIGNoYXJhY3RlcicpLAorICAgICAgICAgICAgKCclcicsICclMDJkOiUwMmQ6JTAyZCAlcycgJSAoc2VsZi5jbG9jazEyLCBub3dbNF0sIG5vd1s1XSwgc2VsZi5hbXBtKSwKKyAgICAgICAgICAgICclSTolTTolUyAlcCcpLAorICAgICAgICAgICAgKCclUicsICclMDJkOiUwMmQnICUgKG5vd1szXSwgbm93WzRdKSwgJyVIOiVNJyksCisgICAgICAgICAgICAoJyVzJywgbm93c2VjcywgJ3NlY29uZHMgc2luY2UgdGhlIEVwb2NoIGluIFVDVCcpLAorICAgICAgICAgICAgKCcldCcsICdcdCcsICd0YWIgY2hhcmFjdGVyJyksCisgICAgICAgICAgICAoJyVUJywgJyUwMmQ6JTAyZDolMDJkJyAlIChub3dbM10sIG5vd1s0XSwgbm93WzVdKSwgJyVIOiVNOiVTJyksCisgICAgICAgICAgICAoJyUzeScsICclMDNkJyAlIChub3dbMF0lMTAwKSwKKyAgICAgICAgICAgICd5ZWFyIHdpdGhvdXQgY2VudHVyeSByZW5kZXJlZCB1c2luZyBmaWVsZHdpZHRoJyksCisgICAgICAgICkKKworICAgICAgICBmb3IgZSBpbiBub25zdGFuZGFyZF9leHBlY3RhdGlvbnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGltZS5zdHJmdGltZShlWzBdLCBub3cpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgcmVzdWx0OgorICAgICAgICAgICAgICAgIG1zZyA9ICJFcnJvciBmb3Igbm9uc3RhbmRhcmQgJyVzJyBmb3JtYXQgKCVzKTogJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgIChlWzBdLCBlWzJdLCBzdHIocmVzdWx0KSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgbXNnCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgcmUubWF0Y2goZXNjYXBlc3RyKGVbMV0sIHNlbGYuYW1wbSksIHJlc3VsdCk6CisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJTdXBwb3J0cyBub25zdGFuZGFyZCAnJXMnIGZvcm1hdCAoJXMpIiAlIChlWzBdLCBlWzJdKQorICAgICAgICAgICAgZWxpZiBub3QgcmVzdWx0IG9yIHJlc3VsdFswXSA9PSAnJSc6CisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJEb2VzIG5vdCBhcHBlYXIgdG8gc3VwcG9ydCAnJXMnIGZvcm1hdCAoJXMpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChlWzBdLCBlWzJdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNvbmZsaWN0IGZvciBub25zdGFuZGFyZCAnJXMnIGZvcm1hdCAoJXMpOiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZVswXSwgZVsyXSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgRXhwZWN0ZWQgJXMsIGJ1dCBnb3QgJXMiICUgKGVbMV0sIHJlc3VsdCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyZnRpbWVUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwN2I5MQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQpAQCAtMCwwICsxLDIxNyBAQAoraW1wb3J0IHVuaXR0ZXN0LCBzdHJpbmcKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBzdHJpbmdfdGVzdHMKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0CisKK2NsYXNzIFN0cmluZ1Rlc3QoCisgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QsCisgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyU3RyaW5nVXNlclN0cmluZ1Rlc3QKKyAgICApOgorCisgICAgdHlwZTJ0ZXN0ID0gc3RyCisKKyAgICBkZWYgY2hlY2tlcXVhbChzZWxmLCByZXN1bHQsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICByZWFscmVzdWx0ID0gZ2V0YXR0cihzdHJpbmcsIG1ldGhvZG5hbWUpKG9iamVjdCwgKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICByZWFscmVzdWx0CisgICAgICAgICkKKworICAgIGRlZiBjaGVja3JhaXNlcyhzZWxmLCBleGMsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGV4YywKKyAgICAgICAgICAgIGdldGF0dHIoc3RyaW5nLCBtZXRob2RuYW1lKSwKKyAgICAgICAgICAgIG9iamVjdCwKKyAgICAgICAgICAgICphcmdzCisgICAgICAgICkKKworICAgIGRlZiBjaGVja2NhbGwoc2VsZiwgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIGdldGF0dHIoc3RyaW5nLCBtZXRob2RuYW1lKShvYmplY3QsICphcmdzKQorCisgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgIyBUaGVzZSBhcmUgdGhlIHNhbWUgY2hlY2tzIGFzIGluIHN0cmluZ190ZXN0Lk9iamVjdFRlc3QudGVzdF9qb2luCisgICAgICAgICMgYnV0IHRoZSBhcmd1bWVudCBvcmRlciBpc3QgZGlmZmVyZW50CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYSBiIGMgZCcsIFsnYScsICdiJywgJ2MnLCAnZCddLCAnam9pbicsICcgJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNkJywgKCdhJywgJ2InLCAnYycsICdkJyksICdqb2luJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgndyB4IHkgeicsIHN0cmluZ190ZXN0cy5TZXF1ZW5jZSgpLCAnam9pbicsICcgJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAoJ2FiYycsKSwgJ2pvaW4nLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgneicsIFVzZXJMaXN0KFsneiddKSwgJ2pvaW4nLCAnYScpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnYS5iLmMnKSwgWydhJywgJ2InLCAnYyddLCAnam9pbicsIHVuaWNvZGUoJy4nKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdhLmIuYycpLCBbdW5pY29kZSgnYScpLCAnYicsICdjJ10sICdqb2luJywgJy4nKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2EuYi5jJyksIFsnYScsIHVuaWNvZGUoJ2InKSwgJ2MnXSwgJ2pvaW4nLCAnLicpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnYS5iLmMnKSwgWydhJywgJ2InLCB1bmljb2RlKCdjJyldLCAnam9pbicsICcuJykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCBbJ2EnLCB1bmljb2RlKCdiJyksIDNdLCAnam9pbicsICcuJykKKyAgICAgICAgZm9yIGkgaW4gWzUsIDI1LCAxMjVdOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKAorICAgICAgICAgICAgICAgICgoKCdhJyAqIGkpICsgJy0nKSAqIGkpWzotMV0sCisgICAgICAgICAgICAgICAgWydhJyAqIGldICogaSwgJ2pvaW4nLCAnLScpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoCisgICAgICAgICAgICAgICAgKCgoJ2EnICogaSkgKyAnLScpICogaSlbOi0xXSwKKyAgICAgICAgICAgICAgICAoJ2EnICogaSwpICogaSwgJ2pvaW4nLCAnLScpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsIHN0cmluZ190ZXN0cy5CYWRTZXExKCksICdqb2luJywgJyAnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2EgYiBjJywgc3RyaW5nX3Rlc3RzLkJhZFNlcTIoKSwgJ2pvaW4nLCAnICcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgeWllbGQgNCArICIiCisgICAgICAgICAgICBzZWxmLmZpeHR5cGUoJyAnKS5qb2luKGYoKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZToKKyAgICAgICAgICAgIGlmICcrJyBub3QgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnam9pbigpIGF0ZSBleGNlcHRpb24gbWVzc2FnZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2V4Y2VwdGlvbiBub3QgcmFpc2VkJykKKworCisKKworY2xhc3MgTW9kdWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hdHRycyhzZWxmKToKKyAgICAgICAgc3RyaW5nLndoaXRlc3BhY2UKKyAgICAgICAgc3RyaW5nLmxvd2VyY2FzZQorICAgICAgICBzdHJpbmcudXBwZXJjYXNlCisgICAgICAgIHN0cmluZy5sZXR0ZXJzCisgICAgICAgIHN0cmluZy5kaWdpdHMKKyAgICAgICAgc3RyaW5nLmhleGRpZ2l0cworICAgICAgICBzdHJpbmcub2N0ZGlnaXRzCisgICAgICAgIHN0cmluZy5wdW5jdHVhdGlvbgorICAgICAgICBzdHJpbmcucHJpbnRhYmxlCisKKyAgICBkZWYgdGVzdF9hdG9pKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5hdG9pKCIgMSAiKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLmF0b2ksICIgMXgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcuYXRvaSwgIiB4MSAiKQorCisgICAgZGVmIHRlc3RfYXRvbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcuYXRvbCgiICAxICAiKSwgMUwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cmluZy5hdG9sLCAiICAxeCAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcuYXRvbCwgIiAgeDEgIikKKworICAgIGRlZiB0ZXN0X2F0b2Yoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc3RyaW5nLmF0b2YoIiAgMSAgIiksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLmF0b2YsICIgIDF4ICIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cmluZy5hdG9mLCAiICB4MSAiKQorCisgICAgZGVmIHRlc3RfbWFrZXRyYW5zKHNlbGYpOgorICAgICAgICB0cmFuc3RhYmxlID0gJ1wwMDBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3ICEiIyQlJlwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYHh5emRlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flwxNzdcMjAwXDIwMVwyMDJcMjAzXDIwNFwyMDVcMjA2XDIwN1wyMTBcMjExXDIxMlwyMTNcMjE0XDIxNVwyMTZcMjE3XDIyMFwyMjFcMjIyXDIyM1wyMjRcMjI1XDIyNlwyMjdcMjMwXDIzMVwyMzJcMjMzXDIzNFwyMzVcMjM2XDIzN1wyNDBcMjQxXDI0MlwyNDNcMjQ0XDI0NVwyNDZcMjQ3XDI1MFwyNTFcMjUyXDI1M1wyNTRcMjU1XDI1NlwyNTdcMjYwXDI2MVwyNjJcMjYzXDI2NFwyNjVcMjY2XDI2N1wyNzBcMjcxXDI3MlwyNzNcMjc0XDI3NVwyNzZcMjc3XDMwMFwzMDFcMzAyXDMwM1wzMDRcMzA1XDMwNlwzMDdcMzEwXDMxMVwzMTJcMzEzXDMxNFwzMTVcMzE2XDMxN1wzMjBcMzIxXDMyMlwzMjNcMzI0XDMyNVwzMjZcMzI3XDMzMFwzMzFcMzMyXDMzM1wzMzRcMzM1XDMzNlwzMzdcMzQwXDM0MVwzNDJcMzQzXDM0NFwzNDVcMzQ2XDM0N1wzNTBcMzUxXDM1MlwzNTNcMzU0XDM1NVwzNTZcMzU3XDM2MFwzNjFcMzYyXDM2M1wzNjRcMzY1XDM2NlwzNjdcMzcwXDM3MVwzNzJcMzczXDM3NFwzNzVcMzc2XDM3NycKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5tYWtldHJhbnMoJ2FiYycsICd4eXonKSwgdHJhbnN0YWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLm1ha2V0cmFucywgJ2FiYycsICd4eXpxJykKKworICAgIGRlZiB0ZXN0X2NhcHdvcmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnYWJjIGRlZiBnaGknKSwgJ0FiYyBEZWYgR2hpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcuY2Fwd29yZHMoJ2FiY1x0ZGVmXG5naGknKSwgJ0FiYyBEZWYgR2hpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcuY2Fwd29yZHMoJ2FiY1x0ICAgZGVmICBcbmdoaScpLCAnQWJjIERlZiBHaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnQUJDIERFRiBHSEknKSwgJ0FiYyBEZWYgR2hpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcuY2Fwd29yZHMoJ0FCQy1ERUYtR0hJJywgJy0nKSwgJ0FiYy1EZWYtR2hpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcuY2Fwd29yZHMoJ0FCQy1kZWYgREVGLWdoaSBHSEknKSwgJ0FiYy1kZWYgRGVmLWdoaSBHaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnICAgYUJjICBEZUYgICAnKSwgJ0FiYyBEZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnXHRhQmNcdERlRlx0JyksICdBYmMgRGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcuY2Fwd29yZHMoJ1x0YUJjXHREZUZcdCcsICdcdCcpLCAnXHRBYmNcdERlZlx0JykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcihzZWxmKToKKyAgICAgICAgZm10ID0gc3RyaW5nLkZvcm1hdHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiZm9vIiksICJmb28iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiZm9vezB9IiwgImJhciIpLCAiZm9vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJmb297MX17MH0tezF9IiwgImJhciIsIDYpLCAiZm9vNmJhci02IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCIte2FyZyFyfS0iLCBhcmc9J3Rlc3QnKSwgIi0ndGVzdCctIikKKworICAgICAgICAjIG92ZXJyaWRlIGdldF92YWx1ZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICBjbGFzcyBOYW1lc3BhY2VGb3JtYXR0ZXIoc3RyaW5nLkZvcm1hdHRlcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZXNwYWNlPXt9KToKKyAgICAgICAgICAgICAgICBzdHJpbmcuRm9ybWF0dGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKKworICAgICAgICAgICAgZGVmIGdldF92YWx1ZShzZWxmLCBrZXksIGFyZ3MsIGt3ZHMpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGV4cGxpY2l0bHkgcGFzc2VkIGFyZ3VtZW50cyBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGt3ZHNba2V5XQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lc3BhY2Vba2V5XQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXR0ZXIuZ2V0X3ZhbHVlKGtleSwgYXJncywga3dkcykKKworICAgICAgICBmbXQgPSBOYW1lc3BhY2VGb3JtYXR0ZXIoeydncmVldGluZyc6J2hlbGxvJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgie2dyZWV0aW5nfSwgd29ybGQhIiksICdoZWxsbywgd29ybGQhJykKKworCisgICAgICAgICMgb3ZlcnJpZGUgZm9ybWF0X2ZpZWxkICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGNsYXNzIENhbGxGb3JtYXR0ZXIoc3RyaW5nLkZvcm1hdHRlcik6CisgICAgICAgICAgICBkZWYgZm9ybWF0X2ZpZWxkKHNlbGYsIHZhbHVlLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSgpLCBmb3JtYXRfc3BlYykKKworICAgICAgICBmbXQgPSBDYWxsRm9ybWF0dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCcqezB9KicsIGxhbWJkYSA6ICdyZXN1bHQnKSwgJypyZXN1bHQqJykKKworCisgICAgICAgICMgb3ZlcnJpZGUgY29udmVydF9maWVsZCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGNsYXNzIFhGb3JtYXR0ZXIoc3RyaW5nLkZvcm1hdHRlcik6CisgICAgICAgICAgICBkZWYgY29udmVydF9maWVsZChzZWxmLCB2YWx1ZSwgY29udmVyc2lvbik6CisgICAgICAgICAgICAgICAgaWYgY29udmVyc2lvbiA9PSAneCc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFhGb3JtYXR0ZXIsIHNlbGYpLmNvbnZlcnRfZmllbGQodmFsdWUsIGNvbnZlcnNpb24pCisKKyAgICAgICAgZm10ID0gWEZvcm1hdHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiezAhcn06ezAheH0iLCAnZm9vJywgJ2ZvbycpLCAiJ2Zvbyc6Tm9uZSIpCisKKworICAgICAgICAjIG92ZXJyaWRlIHBhcnNlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICBjbGFzcyBCYXJGb3JtYXR0ZXIoc3RyaW5nLkZvcm1hdHRlcik6CisgICAgICAgICAgICAjIHJldHVybnMgYW4gaXRlcmFibGUgdGhhdCBjb250YWlucyB0dXBsZXMgb2YgdGhlIGZvcm06CisgICAgICAgICAgICAjIChsaXRlcmFsX3RleHQsIGZpZWxkX25hbWUsIGZvcm1hdF9zcGVjLCBjb252ZXJzaW9uKQorICAgICAgICAgICAgZGVmIHBhcnNlKHNlbGYsIGZvcm1hdF9zdHJpbmcpOgorICAgICAgICAgICAgICAgIGZvciBmaWVsZCBpbiBmb3JtYXRfc3RyaW5nLnNwbGl0KCd8Jyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkWzBdID09ICcrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaXQncyBtYXJrdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUsIF8sIGZvcm1hdF9zcGVjID0gZmllbGRbMTpdLnBhcnRpdGlvbignOicpCisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCAnJywgZmllbGRfbmFtZSwgZm9ybWF0X3NwZWMsIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZpZWxkLCBOb25lLCBOb25lLCBOb25lCisKKyAgICAgICAgZm10ID0gQmFyRm9ybWF0dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCcqfCswOl4xMHN8KicsICdmb28nKSwgJyogICBmb28gICAgKicpCisKKyAgICAgICAgIyB0ZXN0IGFsbCBwYXJhbWV0ZXJzIHVzZWQKKyAgICAgICAgY2xhc3MgQ2hlY2tBbGxVc2VkRm9ybWF0dGVyKHN0cmluZy5Gb3JtYXR0ZXIpOgorICAgICAgICAgICAgZGVmIGNoZWNrX3VudXNlZF9hcmdzKHNlbGYsIHVzZWRfYXJncywgYXJncywga3dhcmdzKToKKyAgICAgICAgICAgICAgICAjIFRyYWNrIHdoaWNoIGFyZ3VtZW50cyBhY3R1YWxseSBnb3QgdXNlZAorICAgICAgICAgICAgICAgIHVudXNlZF9hcmdzID0gc2V0KGt3YXJncy5rZXlzKCkpCisgICAgICAgICAgICAgICAgdW51c2VkX2FyZ3MudXBkYXRlKHJhbmdlKDAsIGxlbihhcmdzKSkpCisKKyAgICAgICAgICAgICAgICBmb3IgYXJnIGluIHVzZWRfYXJnczoKKyAgICAgICAgICAgICAgICAgICAgdW51c2VkX2FyZ3MucmVtb3ZlKGFyZykKKworICAgICAgICAgICAgICAgIGlmIHVudXNlZF9hcmdzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnVzZWQgYXJndW1lbnRzIikKKworICAgICAgICBmbXQgPSBDaGVja0FsbFVzZWRGb3JtYXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoInswfSIsIDEwKSwgIjEwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJ7MH17aX0iLCAxMCwgaT0xMDApLCAiMTAxMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoInswfXtpfXsxfSIsIDEwLCAyMCwgaT0xMDApLCAiMTAxMDAyMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZtdC5mb3JtYXQsICJ7MH17aX17MX0iLCAxMCwgMjAsIGk9MTAwLCBqPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZtdC5mb3JtYXQsICJ7MH0iLCAxMCwgMjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZtdC5mb3JtYXQsICJ7MH0iLCAxMCwgMjAsIGk9MTAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbXQuZm9ybWF0LCAie2l9IiwgMTAsIDIwLCBpPTEwMCkKKworICAgICAgICAjIEFsdGVybmF0ZSBmb3JtYXR0aW5nIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAnJywgJyMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsICcnLCAnIzIwJykKKworY2xhc3MgQnl0ZXNBbGlhc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYnVpbHRpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0ciBpcyBieXRlcykKKworICAgIGRlZiB0ZXN0X3N5bnRheChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiInNwYW0iLCAic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnIiZWdnXGZvbyIsICJlZ2dcXGZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGIiIiksIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYnIiIiksIHN0cikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyaW5nVGVzdCwgTW9kdWxlVGVzdCwgQnl0ZXNBbGlhc1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N0cmluZ3ByZXAucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YmRmODcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5CkBAIC0wLDAgKzEsOTYgQEAKKyMgVG8gZnVsbHkgdGVzdCB0aGlzIG1vZHVsZSwgd2Ugd291bGQgbmVlZCBhIGNvcHkgb2YgdGhlIHN0cmluZ3ByZXAgdGFibGVzLgorIyBTaW5jZSB3ZSBkb24ndCBoYXZlIHRoZW0sIHRoaXMgdGVzdCBjaGVja3Mgb25seSBhIGZldyBjb2RlcG9pbnRzLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2Zyb20gc3RyaW5ncHJlcCBpbXBvcnQgKgorCitjbGFzcyBTdHJpbmdwcmVwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYTEodSJcdTAyMjEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9hMSh1Ilx1MDIyMiIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9iMSh1Ilx1MDBhZCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2IxKHUiXHUwMGFlIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hcF90YWJsZV9iMih1Ilx1MDA0MSIpLCB1Ilx1MDA2MSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXBfdGFibGVfYjIodSJcdTAwNjEiKSwgdSJcdTAwNjEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXBfdGFibGVfYjModSJcdTAwNDEiKSwgdSJcdTAwNjEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFwX3RhYmxlX2IzKHUiXHUwMDYxIiksIHUiXHUwMDYxIikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzExKHUiXHUwMDIwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzExKHUiXHUwMDIxIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MxMih1Ilx1MDBhMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MxMih1Ilx1MDBhMSIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMTIodSJcdTAwYTAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jMTIodSJcdTAwYTEiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzExX2MxMih1Ilx1MDBhMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MxMV9jMTIodSJcdTAwYTEiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzIxKHUiXHUwMDFmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzIxKHUiXHUwMDIwIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MyMih1Ilx1MDA5ZiIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MyMih1Ilx1MDBhMCIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMjFfYzIyKHUiXHUwMDlmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzIxX2MyMih1Ilx1MDBhMCIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMyh1Ilx1ZTAwMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MzKHUiXHVmOTAwIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M0KHUiXHVmZmZmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzQodSJcdTAwMDAiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzUodSJcdWQ4MDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jNSh1Ilx1ZDdmZiIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jNih1Ilx1ZmZmOSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2M2KHUiXHVmZmZlIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M3KHUiXHUyZmYwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzcodSJcdTJmZmMiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzgodSJcdTAzNDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jOCh1Ilx1MDM0MiIpKQorCisgICAgICAgICMgQy45IGlzIG5vdCBpbiB0aGUgYm1wCisgICAgICAgICMgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M5KHUiXFUwMDBFMDAwMSIpKQorICAgICAgICAjIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzgodSJcVTAwMEUwMDAyIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2QxKHUiXHUwNWJlIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfZDEodSJcdTA1YmYiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfZDIodSJcdTAwNDEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9kMih1Ilx1MDA0MCIpKQorCisgICAgICAgICMgVGhpcyB3b3VsZCBnZW5lcmF0ZSBhIGhhc2ggb2YgYWxsIHByZWRpY2F0ZXMuIEhvd2V2ZXIsIHJ1bm5pbmcKKyAgICAgICAgIyBpdCBpcyBxdWl0ZSBleHBlbnNpdmUsIGFuZCBvbmx5IHNlcnZlcyB0byBkZXRlY3QgY2hhbmdlcyBpbiB0aGUKKyAgICAgICAgIyB1bmljb2RlIGRhdGFiYXNlLiBJbnN0ZWFkLCBzdHJpbmdwcmVwLnB5IGFzc2VydHMgdGhlIHZlcnNpb24gb2YKKyAgICAgICAgIyB0aGUgZGF0YWJhc2UuCisKKyAgICAgICAgIyBpbXBvcnQgaGFzaGxpYgorICAgICAgICAjIHByZWRpY2F0ZXMgPSBbayBmb3IgayBpbiBkaXIoc3RyaW5ncHJlcCkgaWYgay5zdGFydHN3aXRoKCJpbl90YWJsZSIpXQorICAgICAgICAjIHByZWRpY2F0ZXMuc29ydCgpCisgICAgICAgICMgZm9yIHAgaW4gcHJlZGljYXRlczoKKyAgICAgICAgIyAgICAgZiA9IGdldGF0dHIoc3RyaW5ncHJlcCwgcCkKKyAgICAgICAgIyAgICAgIyBDb2xsZWN0IGFsbCBCTVAgY29kZSBwb2ludHMKKyAgICAgICAgIyAgICAgZGF0YSA9IFsiMCJdICogMHgxMDAwMAorICAgICAgICAjICAgICBmb3IgaSBpbiByYW5nZSgweDEwMDAwKToKKyAgICAgICAgIyAgICAgICAgIGlmIGYodW5pY2hyKGkpKToKKyAgICAgICAgIyAgICAgICAgICAgICBkYXRhW2ldID0gIjEiCisgICAgICAgICMgICAgIGRhdGEgPSAiIi5qb2luKGRhdGEpCisgICAgICAgICMgICAgIGggPSBoYXNobGliLnNoYTEoKQorICAgICAgICAjICAgICBoLnVwZGF0ZShkYXRhKQorICAgICAgICAjICAgICBwcmludCBwLCBoLmhleGRpZ2VzdCgpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cmluZ3ByZXBUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3Ryb3AucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJvcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2UyOWVmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3Ryb3AucHkKQEAgLTAsMCArMSwxNTMgQEAKK2ltcG9ydCB3YXJuaW5ncword2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJzdHJvcCBmdW5jdGlvbnMgYXJlIG9ic29sZXRlOyIsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ3Rlc3QudGVzdF9zdHJvcHx1bml0dGVzdCcpCitpbXBvcnQgc3Ryb3AKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBTdHJvcEZ1bmN0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXRvaShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmF0b2koIiAxICIpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cm9wLmF0b2ksICIgMXgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJvcC5hdG9pLCAiIHgxICIpCisKKyAgICBkZWYgdGVzdF9hdG9sKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuYXRvbCgiIDEgIikgPT0gMUwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cm9wLmF0b2wsICIgMXgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJvcC5hdG9sLCAiIHgxICIpCisKKyAgICBkZWYgdGVzdF9hdG9mKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuYXRvZigiIDEgIikgPT0gMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJvcC5hdG9mLCAiIDF4IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AuYXRvZiwgIiB4MSAiKQorCisgICAgZGVmIHRlc3RfY2FwaXRhbGl6ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmNhcGl0YWxpemUoIiBoZWxsbyAiKSA9PSAiIGhlbGxvICIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5jYXBpdGFsaXplKCJoZWxsbyAiKSA9PSAiSGVsbG8gIikKKworICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5maW5kKCJhYmNkZWZnaGlhYmMiLCAiYWJjIikgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmZpbmQoImFiY2RlZmdoaWFiYyIsICJhYmMiLCAxKSA9PSA5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuZmluZCgiYWJjZGVmZ2hpYWJjIiwgImRlZiIsIDQpID09IC0xKQorCisgICAgZGVmIHRlc3RfcmZpbmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5yZmluZCgiYWJjZGVmZ2hpYWJjIiwgImFiYyIpID09IDkpCisKKyAgICBkZWYgdGVzdF9sb3dlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmxvd2VyKCJIZUxMbyIpID09ICJoZWxsbyIpCisKKyAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLnVwcGVyKCJIZUxMbyIpID09ICJIRUxMTyIpCisKKyAgICBkZWYgdGVzdF9zd2FwY2FzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLnN3YXBjYXNlKCJIZUxMbyBjT21wVXRlUnMiKSA9PSAiaEVsbE8gQ29NUHVURXJTIikKKworICAgIGRlZiB0ZXN0X3N0cmlwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3Auc3RyaXAoIiBcdFxuIGhlbGxvIFx0XG4gIikgPT0gImhlbGxvIikKKworICAgIGRlZiB0ZXN0X2xzdHJpcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmxzdHJpcCgiIFx0XG4gaGVsbG8gXHRcbiAiKSA9PSAiaGVsbG8gXHRcbiAiKQorCisgICAgZGVmIHRlc3RfcnN0cmlwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AucnN0cmlwKCIgXHRcbiBoZWxsbyBcdFxuICIpID09ICIgXHRcbiBoZWxsbyIpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICByZXBsYWNlID0gc3Ryb3AucmVwbGFjZQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMSkKKyAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvIXRocmVlISIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnLCAyKQorICAgICAgICAgICAgICAgICAgICAgPT0gIm9uZUB0d29AdGhyZWUhIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJyEnLCAnQCcsIDMpCisgICAgICAgICAgICAgICAgICAgICA9PSAib25lQHR3b0B0aHJlZUAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgNCkKKyAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvQHRocmVlQCIpCisKKyAgICAgICAgIyBDQVVUSU9OOiBhIHJlcGxhY2UgY291bnQgb2YgMCBtZWFucyBpbmZpbml0eSBvbmx5IHRvIHN0cm9wLAorICAgICAgICAjIG5vdCB0byB0aGUgc3RyaW5nIC5yZXBsYWNlKCkgbWV0aG9kIG9yIHRvIHRoZQorICAgICAgICAjIHN0cmluZy5yZXBsYWNlKCkgZnVuY3Rpb24uCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJyEnLCAnQCcsIDApCisgICAgICAgICAgICAgICAgICAgICA9PSAib25lQHR3b0B0aHJlZUAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJykKKyAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvQHRocmVlQCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICd4JywgJ0AnKQorICAgICAgICAgICAgICAgICAgICAgPT0gIm9uZSF0d28hdGhyZWUhIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJ3gnLCAnQCcsIDIpCisgICAgICAgICAgICAgICAgICAgICA9PSAib25lIXR3byF0aHJlZSEiKQorCisgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CisgICAgICAgIHNwbGl0ID0gc3Ryb3Auc3BsaXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJ0aGlzIGlzIHRoZSBzcGxpdCBmdW5jdGlvbiIpCisgICAgICAgICAgICAgICAgICAgICA9PSBbJ3RoaXMnLCAnaXMnLCAndGhlJywgJ3NwbGl0JywgJ2Z1bmN0aW9uJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYXxifGN8ZCIsICd8JykgPT0gWydhJywgJ2InLCAnYycsICdkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYXxifGN8ZCIsICd8JywgMikgPT0gWydhJywgJ2InLCAnY3xkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDEpID09IFsnYScsICdiIGMgZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImEgYiBjIGQiLCBOb25lLCAyKSA9PSBbJ2EnLCAnYicsICdjIGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgMykgPT0gWydhJywgJ2InLCAnYycsICdkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDQpID09IFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImEgYiBjIGQiLCBOb25lLCAwKSA9PSBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhICBiICBjICBkIiwgTm9uZSwgMikgPT0gIFsnYScsICdiJywgJ2MgIGQnXSkKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5qb2luKFsnYScsICdiJywgJ2MnLCAnZCddKSA9PSAnYSBiIGMgZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5qb2luKCgnYScsICdiJywgJ2MnLCAnZCcpLCAnJykgPT0gJ2FiY2QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3Auam9pbihTZXF1ZW5jZSgpKSA9PSAndyB4IHkgeicpCisKKyAgICAgICAgIyB0cnkgYSBmZXcgbG9uZyBvbmVzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5qb2luKFsneCcgKiAxMDBdICogMTAwLCAnOicpCisgICAgICAgICAgICAgICAgICAgICA9PSAoKCd4JyAqIDEwMCkgKyAiOiIpICogOTkgKyAieCIgKiAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5qb2luKCgneCcgKiAxMDAsKSAqIDEwMCwgJzonKQorICAgICAgICAgICAgICAgICAgICAgPT0gKCgneCcgKiAxMDApICsgIjoiKSAqIDk5ICsgIngiICogMTAwKQorCisgICAgZGVmIHRlc3RfbWFrZXRyYW5zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AubWFrZXRyYW5zKCJhYmMiLCAieHl6IikgPT0gdHJhbnN0YWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AubWFrZXRyYW5zLCAiYWJjIiwgInh5enEiKQorCisgICAgZGVmIHRlc3RfdHJhbnNsYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AudHJhbnNsYXRlKCJ4eXphYmNkZWYiLCB0cmFuc3RhYmxlLCAiZGVmIikKKyAgICAgICAgICAgICAgICAgICAgID09ICJ4eXp4eXoiKQorCisgICAgZGVmIHRlc3RfZGF0YV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzdHJvcC5sb3dlcmNhc2UKKyAgICAgICAgc3Ryb3AudXBwZXJjYXNlCisgICAgICAgIHN0cm9wLndoaXRlc3BhY2UKKworICAgIEB0ZXN0X3N1cHBvcnQucHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPXRlc3Rfc3VwcG9ydC5fMkcgLSAxLCBtZW11c2U9NSkKKyAgICBkZWYgdGVzdF9zdHJvcGpvaW5faHVnZV9saXN0KHNlbGYsIHNpemUpOgorICAgICAgICBhID0gIkEiICogc2l6ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICByID0gc3Ryb3Auam9pbihbYSwgYV0sIGEpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksIGxlbihhKSAqIDMpCisKKyAgICBAdGVzdF9zdXBwb3J0LnByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT10ZXN0X3N1cHBvcnQuXzJHIC0gMSwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3Rfc3Ryb3Bqb2luX2h1Z2VfdHVwKHNlbGYsIHNpemUpOgorICAgICAgICBhID0gIkEiICogc2l6ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICByID0gc3Ryb3Auam9pbigoYSwgYSksIGEpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgcGFzcyAjIGFjY2VwdGFibGUgb24gMzItYml0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyKSwgbGVuKGEpICogMykKKwordHJhbnN0YWJsZSA9ICdcMDAwXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyAhIiMkJSZcJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2B4eXpkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5cMTc3XDIwMFwyMDFcMjAyXDIwM1wyMDRcMjA1XDIwNlwyMDdcMjEwXDIxMVwyMTJcMjEzXDIxNFwyMTVcMjE2XDIxN1wyMjBcMjIxXDIyMlwyMjNcMjI0XDIyNVwyMjZcMjI3XDIzMFwyMzFcMjMyXDIzM1wyMzRcMjM1XDIzNlwyMzdcMjQwXDI0MVwyNDJcMjQzXDI0NFwyNDVcMjQ2XDI0N1wyNTBcMjUxXDI1MlwyNTNcMjU0XDI1NVwyNTZcMjU3XDI2MFwyNjFcMjYyXDI2M1wyNjRcMjY1XDI2NlwyNjdcMjcwXDI3MVwyNzJcMjczXDI3NFwyNzVcMjc2XDI3N1wzMDBcMzAxXDMwMlwzMDNcMzA0XDMwNVwzMDZcMzA3XDMxMFwzMTFcMzEyXDMxM1wzMTRcMzE1XDMxNlwzMTdcMzIwXDMyMVwzMjJcMzIzXDMyNFwzMjVcMzI2XDMyN1wzMzBcMzMxXDMzMlwzMzNcMzM0XDMzNVwzMzZcMzM3XDM0MFwzNDFcMzQyXDM0M1wzNDRcMzQ1XDM0NlwzNDdcMzUwXDM1MVwzNTJcMzUzXDM1NFwzNTVcMzU2XDM1N1wzNjBcMzYxXDM2MlwzNjNcMzY0XDM2NVwzNjZcMzY3XDM3MFwzNzFcMzcyXDM3M1wzNzRcMzc1XDM3NlwzNzcnCisKKworIyBqb2luKCkgbm93IHdvcmtzIHdpdGggYW55IHNlcXVlbmNlIHR5cGUuCitjbGFzcyBTZXF1ZW5jZToKKyAgICBkZWYgX19pbml0X18oc2VsZik6IHNlbGYuc2VxID0gJ3d4eXonCisgICAgZGVmIF9fbGVuX18oc2VsZik6IHJldHVybiBsZW4oc2VsZi5zZXEpCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOiByZXR1cm4gc2VsZi5zZXFbaV0KKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJvcEZ1bmN0aW9uVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGU0MzA5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkKQEAgLTAsMCArMSw1NjcgQEAKKyIiIlB5VW5pdCB0ZXN0aW5nIGFnYWluc3Qgc3RycHRpbWUiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGltZQoraW1wb3J0IGxvY2FsZQoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZSBhcyBkYXRldGltZV9kYXRlCisKK2ltcG9ydCBfc3RycHRpbWUKKworY2xhc3MgZ2V0bGFuZ19UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBfZ2V0bGFuZyIiIgorICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zdHJwdGltZS5fZ2V0bGFuZygpLCBsb2NhbGUuZ2V0bG9jYWxlKGxvY2FsZS5MQ19USU1FKSkKKworY2xhc3MgTG9jYWxlVGltZV9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIF9zdHJwdGltZS5Mb2NhbGVUaW1lLgorCisgICAgQWxsIHZhbHVlcyBhcmUgbG93ZXItY2FzZWQgd2hlbiBzdG9yZWQgaW4gTG9jYWxlVGltZSwgc28gbWFrZSBzdXJlIHRvCisgICAgY29tcGFyZSB2YWx1ZXMgYWZ0ZXIgcnVubmluZyBgYGxvd2VyYGAgb24gdGhlbS4KKworICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgdGltZSB0dXBsZSBiYXNlZCBvbiBjdXJyZW50IHRpbWUuIiIiCisgICAgICAgIHNlbGYudGltZV90dXBsZSA9IHRpbWUubG9jYWx0aW1lKCkKKyAgICAgICAgc2VsZi5MVF9pbnMgPSBfc3RycHRpbWUuTG9jYWxlVGltZSgpCisKKyAgICBkZWYgY29tcGFyZV9hZ2FpbnN0X3RpbWUoc2VsZiwgdGVzdGluZywgZGlyZWN0aXZlLCB0dXBsZV9wb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnKToKKyAgICAgICAgIiIiSGVscGVyIG1ldGhvZCB0aGF0IHRlc3RzIHRlc3RpbmcgYWdhaW5zdCBkaXJlY3RpdmUgYmFzZWQgb24gdGhlCisgICAgICAgIHR1cGxlX3Bvc2l0aW9uIG9mIHRpbWVfdHVwbGUuICBVc2VzIGVycm9yX21zZyBhcyBlcnJvciBtZXNzYWdlLgorCisgICAgICAgICIiIgorICAgICAgICBzdHJmdGltZV9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKGRpcmVjdGl2ZSwgc2VsZi50aW1lX3R1cGxlKS5sb3dlcigpCisgICAgICAgIGNvbXBhcmlzb24gPSB0ZXN0aW5nW3NlbGYudGltZV90dXBsZVt0dXBsZV9wb3NpdGlvbl1dCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyZnRpbWVfb3V0cHV0LCB0ZXN0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICIlczogbm90IGZvdW5kIGluIHR1cGxlIiAlIGVycm9yX21zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wYXJpc29uLCBzdHJmdGltZV9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBwb3NpdGlvbiB3aXRoaW4gdHVwbGUgaW5jb3JyZWN0OyAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcl9tc2csIGNvbXBhcmlzb24sIHN0cmZ0aW1lX291dHB1dCkpCisKKyAgICBkZWYgdGVzdF93ZWVrZGF5KHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGZ1bGwgYW5kIGFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZXMgYXJlIGNvcnJlY3QgaW4KKyAgICAgICAgIyBib3RoIHN0cmluZyBhbmQgcG9zaXRpb24gd2l0aCB0dXBsZQorICAgICAgICBzZWxmLmNvbXBhcmVfYWdhaW5zdF90aW1lKHNlbGYuTFRfaW5zLmZfd2Vla2RheSwgJyVBJywgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdGluZyBvZiBmdWxsIHdlZWtkYXkgbmFtZSBmYWlsZWQiKQorICAgICAgICBzZWxmLmNvbXBhcmVfYWdhaW5zdF90aW1lKHNlbGYuTFRfaW5zLmFfd2Vla2RheSwgJyVhJywgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdGluZyBvZiBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X21vbnRoKHNlbGYpOgorICAgICAgICAjIFRlc3QgZnVsbCBhbmQgYWJicmV2aWF0ZWQgbW9udGggbmFtZXM7IGJvdGggc3RyaW5nIGFuZCBwb3NpdGlvbgorICAgICAgICAjIHdpdGhpbiB0aGUgdHVwbGUKKyAgICAgICAgc2VsZi5jb21wYXJlX2FnYWluc3RfdGltZShzZWxmLkxUX2lucy5mX21vbnRoLCAnJUInLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0aW5nIGFnYWluc3QgZnVsbCBtb250aCBuYW1lIGZhaWxlZCIpCisgICAgICAgIHNlbGYuY29tcGFyZV9hZ2FpbnN0X3RpbWUoc2VsZi5MVF9pbnMuYV9tb250aCwgJyViJywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdGluZyBhZ2FpbnN0IGFiYnJldmlhdGVkIG1vbnRoIG5hbWUgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2FtX3BtKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBBTS9QTSByZXByZXNlbnRhdGlvbiBkb25lIHByb3Blcmx5CisgICAgICAgIHN0cmZ0aW1lX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiVwIiwgc2VsZi50aW1lX3R1cGxlKS5sb3dlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyZnRpbWVfb3V0cHV0LCBzZWxmLkxUX2lucy5hbV9wbSwKKyAgICAgICAgICAgICAgICAgICAgICAiQU0vUE0gcmVwcmVzZW50YXRpb24gbm90IGluIHR1cGxlIikKKyAgICAgICAgaWYgc2VsZi50aW1lX3R1cGxlWzNdIDwgMTI6IHBvc2l0aW9uID0gMAorICAgICAgICBlbHNlOiBwb3NpdGlvbiA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkxUX2lucy5hbV9wbVtwb3NpdGlvbl0sIHN0cmZ0aW1lX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQU0vUE0gcmVwcmVzZW50YXRpb24gaW4gdGhlIHdyb25nIHBvc2l0aW9uIHdpdGhpbiB0aGUgdHVwbGUiKQorCisgICAgZGVmIHRlc3RfdGltZXpvbmUoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRpbWV6b25lIGlzIGNvcnJlY3QKKyAgICAgICAgdGltZXpvbmUgPSB0aW1lLnN0cmZ0aW1lKCIlWiIsIHNlbGYudGltZV90dXBsZSkubG93ZXIoKQorICAgICAgICBpZiB0aW1lem9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lem9uZSBpbiBzZWxmLkxUX2lucy50aW1lem9uZVswXSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIGluIHNlbGYuTFRfaW5zLnRpbWV6b25lWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lem9uZSAlcyBub3QgZm91bmQgaW4gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGltZXpvbmUsIHNlbGYuTFRfaW5zLnRpbWV6b25lKSkKKworICAgIGRlZiB0ZXN0X2RhdGVfdGltZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IExDX2RhdGVfdGltZSwgTENfZGF0ZSwgYW5kIExDX3RpbWUgYXJlIGNvcnJlY3QKKyAgICAgICAgIyB0aGUgbWFnaWMgZGF0ZSBpcyB1c2VkIHNvIGFzIHRvIG5vdCBoYXZlIGlzc3VlcyB3aXRoICVjIHdoZW4gZGF5IG9mCisgICAgICAgICMgIHRoZSBtb250aCBpcyBhIHNpbmdsZSBkaWdpdCBhbmQgaGFzIGEgbGVhZGluZyBzcGFjZS4gIFRoaXMgaXMgbm90IGFuCisgICAgICAgICMgIGlzc3VlIHNpbmNlIHN0cnB0aW1lIHN0aWxsIHBhcnNlcyBpdCBjb3JyZWN0bHkuICBUaGUgcHJvYmxlbSBpcworICAgICAgICAjICB0ZXN0aW5nIHRoZXNlIGRpcmVjdGl2ZXMgZm9yIGNvcnJlY3RuZXNzIGJ5IGNvbXBhcmluZyBzdHJmdGltZQorICAgICAgICAjICBvdXRwdXQuCisgICAgICAgIG1hZ2ljX2RhdGUgPSAoMTk5OSwgMywgMTcsIDIyLCA0NCwgNTUsIDIsIDc2LCAwKQorICAgICAgICBzdHJmdGltZV9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlYyIsIG1hZ2ljX2RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5zdHJmdGltZShzZWxmLkxUX2lucy5MQ19kYXRlX3RpbWUsIG1hZ2ljX2RhdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmZ0aW1lX291dHB1dCwgIkxDX2RhdGVfdGltZSBpbmNvcnJlY3QiKQorICAgICAgICBzdHJmdGltZV9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIleCIsIG1hZ2ljX2RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5zdHJmdGltZShzZWxmLkxUX2lucy5MQ19kYXRlLCBtYWdpY19kYXRlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJmdGltZV9vdXRwdXQsICJMQ19kYXRlIGluY29ycmVjdCIpCisgICAgICAgIHN0cmZ0aW1lX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiVYIiwgbWFnaWNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLnN0cmZ0aW1lKHNlbGYuTFRfaW5zLkxDX3RpbWUsIG1hZ2ljX2RhdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmZ0aW1lX291dHB1dCwgIkxDX3RpbWUgaW5jb3JyZWN0IikKKyAgICAgICAgTFQgPSBfc3RycHRpbWUuTG9jYWxlVGltZSgpCisgICAgICAgIExULmFtX3BtID0gKCcnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKExULkxDX3RpbWUsICJMb2NhbGVUaW1lJ3MgTEMgZGlyZWN0aXZlcyBjYW5ub3QgaGFuZGxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbXB0eSBzdHJpbmdzIikKKworICAgIGRlZiB0ZXN0X2xhbmcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGxhbmcgaXMgc2V0IHRvIHdoYXQgX2dldGxhbmcoKSByZXR1cm5zCisgICAgICAgICMgQXNzdW1pbmcgbG9jYWxlIGhhcyBub3QgY2hhbmdlZCBiZXR3ZWVuIG5vdyBhbmQgd2hlbiBzZWxmLkxUX2lucyB3YXMgY3JlYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuTFRfaW5zLmxhbmcsIF9zdHJwdGltZS5fZ2V0bGFuZygpKQorCisKK2NsYXNzIFRpbWVSRVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgVGltZVJFLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgZ2VuZXJpYyBUaW1lUkUgb2JqZWN0LiIiIgorICAgICAgICBzZWxmLnRpbWVfcmUgPSBfc3RycHRpbWUuVGltZVJFKCkKKyAgICAgICAgc2VsZi5sb2NhbGVfdGltZSA9IF9zdHJwdGltZS5Mb2NhbGVUaW1lKCkKKworICAgIGRlZiB0ZXN0X3BhdHRlcm4oc2VsZik6CisgICAgICAgICMgVGVzdCBUaW1lUkUucGF0dGVybgorICAgICAgICBwYXR0ZXJuX3N0cmluZyA9IHNlbGYudGltZV9yZS5wYXR0ZXJuKHIiJWEgJUEgJWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0dGVybl9zdHJpbmcuZmluZChzZWxmLmxvY2FsZV90aW1lLmFfd2Vla2RheVsyXSkgIT0gLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAiZGlkIG5vdCBmaW5kIGFiYnJldmlhdGVkIHdlZWtkYXkgaW4gcGF0dGVybiBzdHJpbmcgJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5fc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0dGVybl9zdHJpbmcuZmluZChzZWxmLmxvY2FsZV90aW1lLmZfd2Vla2RheVs0XSkgIT0gLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAiZGlkIG5vdCBmaW5kIGZ1bGwgd2Vla2RheSBpbiBwYXR0ZXJuIHN0cmluZyAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybl9zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXR0ZXJuX3N0cmluZy5maW5kKHNlbGYudGltZV9yZVsnZCddKSAhPSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGZpbmQgJ2QnIGRpcmVjdGl2ZSBwYXR0ZXJuIHN0cmluZyAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybl9zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wYXR0ZXJuX2VzY2FwaW5nKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhbnkgY2hhcmFjdGVycyBpbiB0aGUgZm9ybWF0IHN0cmluZyB0aGF0IG1pZ2h0IGJlIHRha2VuIGFzCisgICAgICAgICMgcmVnZXggc3ludGF4IGlzIGVzY2FwZWQuCisgICAgICAgIHBhdHRlcm5fc3RyaW5nID0gc2VsZi50aW1lX3JlLnBhdHRlcm4oIlxkKyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ociJcXGRcKyIsIHBhdHRlcm5fc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICIlcyBkb2VzIG5vdCBoYXZlIHJlIGNoYXJhY3RlcnMgZXNjYXBlZCBwcm9wZXJseSIgJQorICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5fc3RyaW5nKQorCisgICAgZGVmIHRlc3RfY29tcGlsZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGNvbXBpbGVkIHJlZ2V4IGlzIGNvcnJlY3QKKyAgICAgICAgZm91bmQgPSBzZWxmLnRpbWVfcmUuY29tcGlsZShyIiVBIikubWF0Y2goc2VsZi5sb2NhbGVfdGltZS5mX3dlZWtkYXlbNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCBhbmQgZm91bmQuZ3JvdXAoJ0EnKSA9PSBzZWxmLmxvY2FsZV90aW1lLmZfd2Vla2RheVs2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZSBvYmplY3QgZm9yICclQScgZmFpbGVkIikKKyAgICAgICAgY29tcGlsZWQgPSBzZWxmLnRpbWVfcmUuY29tcGlsZShyIiVhICViIikKKyAgICAgICAgZm91bmQgPSBjb21waWxlZC5tYXRjaCgiJXMgJXMiICUgKHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5WzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9jYWxlX3RpbWUuYV9tb250aFs0XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwKKyAgICAgICAgICAgICJNYXRjaCBmYWlsZWQgd2l0aCAnJXMnIHJlZ2V4IGFuZCAnJXMnIHN0cmluZyIgJQorICAgICAgICAgICAgIChjb21waWxlZC5wYXR0ZXJuLCAiJXMgJXMiICUgKHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5WzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9jYWxlX3RpbWUuYV9tb250aFs0XSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQuZ3JvdXAoJ2EnKSA9PSBzZWxmLmxvY2FsZV90aW1lLmFfd2Vla2RheVs0XSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZC5ncm91cCgnYicpID09IHNlbGYubG9jYWxlX3RpbWUuYV9tb250aFs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZSBvYmplY3QgY291bGRuJ3QgZmluZCB0aGUgYWJicmV2aWF0ZWQgd2Vla2RheSBtb250aCBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgdXNpbmcgJyVzJzsgZ3JvdXAgJ2EnID0gJyVzJywgZ3JvdXAgJ2InID0gJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKGZvdW5kLnN0cmluZywgZm91bmQucmUucGF0dGVybiwgZm91bmQuZ3JvdXAoJ2EnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQuZ3JvdXAoJ2InKSkpCisgICAgICAgIGZvciBkaXJlY3RpdmUgaW4gKCdhJywnQScsJ2InLCdCJywnYycsJ2QnLCdIJywnSScsJ2onLCdtJywnTScsJ3AnLCdTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ1UnLCd3JywnVycsJ3gnLCdYJywneScsJ1knLCdaJywnJScpOgorICAgICAgICAgICAgY29tcGlsZWQgPSBzZWxmLnRpbWVfcmUuY29tcGlsZSgiJSIgKyBkaXJlY3RpdmUpCisgICAgICAgICAgICBmb3VuZCA9IGNvbXBpbGVkLm1hdGNoKHRpbWUuc3RyZnRpbWUoIiUiICsgZGlyZWN0aXZlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgIk1hdGNoaW5nIGZhaWxlZCBvbiAnJXMnIHVzaW5nICclcycgcmVnZXgiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lLnN0cmZ0aW1lKCIlIiArIGRpcmVjdGl2ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQucGF0dGVybikpCisKKyAgICBkZWYgdGVzdF9ibGFua3BhdHRlcm4oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHdoZW4gdHVwbGUgb3Igc29tZXRoaW5nIGhhcyBubyB2YWx1ZXMgbm8gcmVnZXggaXMgZ2VuZXJhdGVkLgorICAgICAgICAjIEZpeGVzIGJ1ZyAjNjYxMzU0CisgICAgICAgIHRlc3RfbG9jYWxlID0gX3N0cnB0aW1lLkxvY2FsZVRpbWUoKQorICAgICAgICB0ZXN0X2xvY2FsZS50aW1lem9uZSA9IChmcm96ZW5zZXQoKSwgZnJvemVuc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3N0cnB0aW1lLlRpbWVSRSh0ZXN0X2xvY2FsZSkucGF0dGVybigiJVoiKSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggdGltZXpvbmUgPT0gKCcnLCcnKSwgVGltZVJFKCkucGF0dGVybignJVonKSAhPSAnJyIpCisKKyAgICBkZWYgdGVzdF9tYXRjaGluZ193aXRoX2VzY2FwZXMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGEgZm9ybWF0IHRoYXQgcmVxdWlyZXMgZXNjYXBpbmcgb2YgY2hhcmFjdGVycyB3b3JrcworICAgICAgICBjb21waWxlZF9yZSA9IHNlbGYudGltZV9yZS5jb21waWxlKCJcdysgJW0iKQorICAgICAgICBmb3VuZCA9IGNvbXBpbGVkX3JlLm1hdGNoKCJcdysgMTAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQsICJFc2NhcGluZyBmYWlsZWQgb2YgZm9ybWF0ICdcdysgMTAnIikKKworICAgIGRlZiB0ZXN0X2xvY2FsZV9kYXRhX3dfcmVnZXhfbWV0YWNoYXJhY3RlcnMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBpZiBsb2NhbGUgZGF0YSBjb250YWlucyByZWdleCBtZXRhY2hhcmFjdGVycyB0aGV5IGFyZQorICAgICAgICAjIGVzY2FwZWQgcHJvcGVybHkuCisgICAgICAgICMgRGlzY292ZXJlZCBieSBidWcgIzEwMzkyNzAgLgorICAgICAgICBsb2NhbGVfdGltZSA9IF9zdHJwdGltZS5Mb2NhbGVUaW1lKCkKKyAgICAgICAgbG9jYWxlX3RpbWUudGltZXpvbmUgPSAoZnJvemVuc2V0KCgidXRjIiwgImdtdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb2t5byAoc3RhbmRhcmQgdGltZSkiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldCgiVG9reW8gKGRheWxpZ2h0IHRpbWUpIikpCisgICAgICAgIHRpbWVfcmUgPSBfc3RycHRpbWUuVGltZVJFKGxvY2FsZV90aW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZV9yZS5jb21waWxlKCIlWiIpLm1hdGNoKCJUb2t5byAoc3RhbmRhcmQgdGltZSkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbGUgZGF0YSB0aGF0IGNvbnRhaW5zIHJlZ2V4IG1ldGFjaGFyYWN0ZXJzIGlzIG5vdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgcHJvcGVybHkgZXNjYXBlZCIpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgIyBXaGVuIHBhdHRlcm4gY29udGFpbnMgd2hpdGVzcGFjZSwgbWFrZSBzdXJlIGl0IGlzIHRha2VuIGludG8gYWNjb3VudAorICAgICAgICAjIHNvIGFzIHRvIG5vdCBhbGxvdyB0byBzdWJwYXR0ZXJucyB0byBlbmQgdXAgbmV4dCB0byBlYWNoIG90aGVyIGFuZAorICAgICAgICAjICJzdGVhbCIgY2hhcmFjdGVycyBmcm9tIGVhY2ggb3RoZXIuCisgICAgICAgIHBhdHRlcm4gPSBzZWxmLnRpbWVfcmUucGF0dGVybignJWogJUgnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlLm1hdGNoKHBhdHRlcm4sICIxODAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHBhdHRlcm4sICIxOCAwIikpCisKKworY2xhc3MgU3RycHRpbWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIF9zdHJwdGltZS5zdHJwdGltZS4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHRlc3RpbmcgdGltZSB0dXBsZS4iIiIKKyAgICAgICAgc2VsZi50aW1lX3R1cGxlID0gdGltZS5nbXRpbWUoKQorCisgICAgZGVmIHRlc3RfVmFsdWVFcnJvcihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgVmFsdWVFcnJvciBpcyByYWlzZWQgd2hlbiBtYXRjaCBmYWlscyBvciBmb3JtYXQgaXMgYmFkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSwgZGF0YV9zdHJpbmc9IiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSIlQSIpCisgICAgICAgIGZvciBiYWRfZm9ybWF0IGluICgiJSIsICIlICIsICIlZSIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMjAwNSIsIGJhZF9mb3JtYXQpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJyVzJyByYWlzZWQgJXMsIG5vdCBWYWx1ZUVycm9yIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhZF9mb3JtYXQsIGVyci5fX2NsYXNzX18uX19uYW1lX18pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiclcycgZGlkIG5vdCByYWlzZSBWYWx1ZUVycm9yIiAlIGJhZF9mb3JtYXQpCisKKyAgICBkZWYgdGVzdF91bmNvbnZlcnRlZGRhdGEoc2VsZik6CisgICAgICAgICMgQ2hlY2sgVmFsdWVFcnJvciBpcyByYWlzZWQgd2hlbiB0aGVyZSBpcyB1bmNvbnZlcnRlZCBkYXRhCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSwgIjEwIDEyIiwgIiVtIikKKworICAgIGRlZiBoZWxwZXIoc2VsZiwgZGlyZWN0aXZlLCBwb3NpdGlvbik6CisgICAgICAgICIiIkhlbHBlciBmeG4gaW4gdGVzdGluZy4iIiIKKyAgICAgICAgc3RyZl9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlIiArIGRpcmVjdGl2ZSwgc2VsZi50aW1lX3R1cGxlKQorICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dCwgIiUiICsgZGlyZWN0aXZlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbcG9zaXRpb25dID09IHNlbGYudGltZV90dXBsZVtwb3NpdGlvbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGluZyBvZiAnJXMnIGRpcmVjdGl2ZSBmYWlsZWQ7ICclcycgLT4gJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZGlyZWN0aXZlLCBzdHJmX291dHB1dCwgc3RycF9vdXRwdXRbcG9zaXRpb25dLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVfdHVwbGVbcG9zaXRpb25dKSkKKworICAgIGRlZiB0ZXN0X3llYXIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSB5ZWFyIGlzIGhhbmRsZWQgcHJvcGVybHkKKyAgICAgICAgZm9yIGRpcmVjdGl2ZSBpbiAoJ3knLCAnWScpOgorICAgICAgICAgICAgc2VsZi5oZWxwZXIoZGlyZWN0aXZlLCAwKQorICAgICAgICAjIE11c3QgYWxzbyBtYWtlIHN1cmUgJXkgdmFsdWVzIGFyZSBjb3JyZWN0IGZvciBib3VuZHMgc2V0IGJ5IE9wZW4gR3JvdXAKKyAgICAgICAgZm9yIGNlbnR1cnksIGJvdW5kcyBpbiAoKDE5MDAsICgnNjknLCAnOTknKSksICgyMDAwLCAoJzAwJywgJzY4JykpKToKKyAgICAgICAgICAgIGZvciBib3VuZCBpbiBib3VuZHM6CisgICAgICAgICAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoYm91bmQsICcleScpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVzdWx0ID0gY2VudHVyeSArIGludChib3VuZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbMF0gPT0gZXhwZWN0ZWRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3knIHRlc3QgZmFpbGVkOyBwYXNzZWQgaW4gJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgcmV0dXJuZWQgJyVzJyIgJSAoYm91bmQsIHN0cnBfb3V0cHV0WzBdKSkKKworICAgIGRlZiB0ZXN0X21vbnRoKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIG1vbnRoIGRpcmVjdGl2ZXMKKyAgICAgICAgZm9yIGRpcmVjdGl2ZSBpbiAoJ0InLCAnYicsICdtJyk6CisgICAgICAgICAgICBzZWxmLmhlbHBlcihkaXJlY3RpdmUsIDEpCisKKyAgICBkZWYgdGVzdF9kYXkoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgZGF5IGRpcmVjdGl2ZXMKKyAgICAgICAgc2VsZi5oZWxwZXIoJ2QnLCAyKQorCisgICAgZGVmIHRlc3RfaG91cihzZWxmKToKKyAgICAgICAgIyBUZXN0IGhvdXIgZGlyZWN0aXZlcworICAgICAgICBzZWxmLmhlbHBlcignSCcsIDMpCisgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJUkgJXAiLCBzZWxmLnRpbWVfdHVwbGUpCisgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0LCAiJUkgJXAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbM10gPT0gc2VsZi50aW1lX3R1cGxlWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rpbmcgb2YgJyUlSSAlJXAnIGRpcmVjdGl2ZSBmYWlsZWQ7ICclcycgLT4gJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyZl9vdXRwdXQsIHN0cnBfb3V0cHV0WzNdLCBzZWxmLnRpbWVfdHVwbGVbM10pKQorCisgICAgZGVmIHRlc3RfbWludXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWludXRlIGRpcmVjdGl2ZXMKKyAgICAgICAgc2VsZi5oZWxwZXIoJ00nLCA0KQorCisgICAgZGVmIHRlc3Rfc2Vjb25kKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2Vjb25kIGRpcmVjdGl2ZXMKKyAgICAgICAgc2VsZi5oZWxwZXIoJ1MnLCA1KQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb24oc2VsZik6CisgICAgICAgICMgVGVzdCBtaWNyb3NlY29uZHMKKyAgICAgICAgaW1wb3J0IGRhdGV0aW1lCisgICAgICAgIGQgPSBkYXRldGltZS5kYXRldGltZSgyMDEyLCAxMiwgMjAsIDEyLCAzNCwgNTYsIDc4OTg3KQorICAgICAgICB0dXAsIGZyYWMgPSBfc3RycHRpbWUuX3N0cnB0aW1lKHN0cihkKSwgZm9ybWF0PSIlWS0lbS0lZCAlSDolTTolUy4lZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJhYywgZC5taWNyb3NlY29uZCkKKworICAgIGRlZiB0ZXN0X3dlZWtkYXkoc2VsZik6CisgICAgICAgICMgVGVzdCB3ZWVrZGF5IGRpcmVjdGl2ZXMKKyAgICAgICAgZm9yIGRpcmVjdGl2ZSBpbiAoJ0EnLCAnYScsICd3Jyk6CisgICAgICAgICAgICBzZWxmLmhlbHBlcihkaXJlY3RpdmUsNikKKworICAgIGRlZiB0ZXN0X2p1bGlhbihzZWxmKToKKyAgICAgICAgIyBUZXN0IGp1bGlhbiBkaXJlY3RpdmVzCisgICAgICAgIHNlbGYuaGVscGVyKCdqJywgNykKKworICAgIGRlZiB0ZXN0X3RpbWV6b25lKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGltZXpvbmUgZGlyZWN0aXZlcy4KKyAgICAgICAgIyBXaGVuIGdtdGltZSgpIGlzIHVzZWQgd2l0aCAlWiwgZW50aXJlIHJlc3VsdCBvZiBzdHJmdGltZSgpIGlzIGVtcHR5LgorICAgICAgICAjIENoZWNrIGZvciBlcXVhbCB0aW1lem9uZSBuYW1lcyBkZWFscyB3aXRoIGJhZCBsb2NhbGUgaW5mbyB3aGVuIHRoaXMKKyAgICAgICAgIyBvY2N1cnM7IGZpcnN0IGZvdW5kIGluIEZyZWVCU0QgNC40LgorICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiVVRDIiwgIiVaIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJwX291dHB1dC50bV9pc2RzdCwgMCkKKyAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoIkdNVCIsICIlWiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RycF9vdXRwdXQudG1faXNkc3QsIDApCisgICAgICAgIHRpbWVfdHVwbGUgPSB0aW1lLmxvY2FsdGltZSgpCisgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJVoiKSAgI1VUQyBkb2VzIG5vdCBoYXZlIGEgdGltZXpvbmUKKyAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RyZl9vdXRwdXQsICIlWiIpCisgICAgICAgIGxvY2FsZV90aW1lID0gX3N0cnB0aW1lLkxvY2FsZVRpbWUoKQorICAgICAgICBpZiB0aW1lLnR6bmFtZVswXSAhPSB0aW1lLnR6bmFtZVsxXSBvciBub3QgdGltZS5kYXlsaWdodDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dFs4XSA9PSB0aW1lX3R1cGxlWzhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lem9uZSBjaGVjayBmYWlsZWQ7ICclcycgLT4gJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmZfb3V0cHV0LCBzdHJwX291dHB1dFs4XSwgdGltZV90dXBsZVs4XSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbOF0gPT0gLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2FsZVRpbWUoKS50aW1lem9uZSBoYXMgZHVwbGljYXRlIHZhbHVlcyBhbmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZS5kYXlsaWdodCBidXQgdGltZXpvbmUgdmFsdWUgbm90IHNldCB0byAtMSIpCisKKyAgICBkZWYgdGVzdF9iYWRfdGltZXpvbmUoc2VsZik6CisgICAgICAgICMgRXhwbGljaXRseSB0ZXN0IHBvc3NpYmlsaXR5IG9mIGJhZCB0aW1lem9uZTsKKyAgICAgICAgIyB3aGVuIHRpbWUudHpuYW1lWzBdID09IHRpbWUudHpuYW1lWzFdIGFuZCB0aW1lLmRheWxpZ2h0CisgICAgICAgIHR6X25hbWUgPSB0aW1lLnR6bmFtZVswXQorICAgICAgICBpZiB0el9uYW1lLnVwcGVyKCkgaW4gKCJVVEMiLCAiR01UIik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3JpZ2luYWxfdHpuYW1lID0gdGltZS50em5hbWUKKyAgICAgICAgICAgIG9yaWdpbmFsX2RheWxpZ2h0ID0gdGltZS5kYXlsaWdodAorICAgICAgICAgICAgdGltZS50em5hbWUgPSAodHpfbmFtZSwgdHpfbmFtZSkKKyAgICAgICAgICAgIHRpbWUuZGF5bGlnaHQgPSAxCisgICAgICAgICAgICB0el92YWx1ZSA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSh0el9uYW1lLCAiJVoiKVs4XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0el92YWx1ZSwgLTEsCisgICAgICAgICAgICAgICAgICAgICIlcyBsZWFkIHRvIGEgdGltZXpvbmUgdmFsdWUgb2YgJXMgaW5zdGVhZCBvZiAtMSB3aGVuICIKKyAgICAgICAgICAgICAgICAgICAgInRpbWUuZGF5bGlnaHQgc2V0IHRvICVzIGFuZCBwYXNzaW5nIGluICVzIiAlCisgICAgICAgICAgICAgICAgICAgICh0aW1lLnR6bmFtZSwgdHpfdmFsdWUsIHRpbWUuZGF5bGlnaHQsIHR6X25hbWUpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGltZS50em5hbWUgPSBvcmlnaW5hbF90em5hbWUKKyAgICAgICAgICAgIHRpbWUuZGF5bGlnaHQgPSBvcmlnaW5hbF9kYXlsaWdodAorCisgICAgZGVmIHRlc3RfZGF0ZV90aW1lKHNlbGYpOgorICAgICAgICAjIFRlc3QgJWMgZGlyZWN0aXZlCisgICAgICAgIGZvciBwb3NpdGlvbiBpbiByYW5nZSg2KToKKyAgICAgICAgICAgIHNlbGYuaGVscGVyKCdjJywgcG9zaXRpb24pCisKKyAgICBkZWYgdGVzdF9kYXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgJXggZGlyZWN0aXZlCisgICAgICAgIGZvciBwb3NpdGlvbiBpbiByYW5nZSgwLDMpOgorICAgICAgICAgICAgc2VsZi5oZWxwZXIoJ3gnLCBwb3NpdGlvbikKKworICAgIGRlZiB0ZXN0X3RpbWUoc2VsZik6CisgICAgICAgICMgVGVzdCAlWCBkaXJlY3RpdmUKKyAgICAgICAgZm9yIHBvc2l0aW9uIGluIHJhbmdlKDMsNik6CisgICAgICAgICAgICBzZWxmLmhlbHBlcignWCcsIHBvc2l0aW9uKQorCisgICAgZGVmIHRlc3RfcGVyY2VudChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgJSBzaWducyBhcmUgaGFuZGxlZCBwcm9wZXJseQorICAgICAgICBzdHJmX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiVtICUlICVZIiwgc2VsZi50aW1lX3R1cGxlKQorICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dCwgIiVtICUlICVZIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnBfb3V0cHV0WzBdID09IHNlbGYudGltZV90dXBsZVswXSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJwX291dHB1dFsxXSA9PSBzZWxmLnRpbWVfdHVwbGVbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFuZGxpbmcgb2YgcGVyY2VudCBzaWduIGZhaWxlZCIpCisKKyAgICBkZWYgdGVzdF9jYXNlaW5zZW5zaXRpdmUoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGhhbmRsZSBuYW1lcyBjYXNlLWluc2Vuc2l0aXZlbHkuCisgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJUIiLCBzZWxmLnRpbWVfdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RyZl9vdXRwdXQudXBwZXIoKSwgIiVCIiksCisgICAgICAgICAgICAgICAgICAgICAgICAic3RycHRpbWUgZG9lcyBub3QgaGFuZGxlIEFMTC1DQVBTIG5hbWVzIHByb3Blcmx5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dC5sb3dlcigpLCAiJUIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdHJwdGltZSBkb2VzIG5vdCBoYW5kbGUgbG93ZXJjYXNlIG5hbWVzIHByb3Blcmx5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dC5jYXBpdGFsaXplKCksICIlQiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInN0cnB0aW1lIGRvZXMgbm90IGhhbmRsZSBjYXB3b3JkIG5hbWVzIHByb3Blcmx5IikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRzKHNlbGYpOgorICAgICAgICAjIERlZmF1bHQgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCkKKyAgICAgICAgZGVmYXVsdHMgPSAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgLTEpCisgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCcxJywgJyVtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnBfb3V0cHV0ID09IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIkRlZmF1bHQgdmFsdWVzIGZvciBzdHJwdGltZSgpIGFyZSBpbmNvcnJlY3Q7IgorICAgICAgICAgICAgICAgICAgICAgICAgIiAlcyAhPSAlcyIgJSAoc3RycF9vdXRwdXQsIGRlZmF1bHRzKSkKKworICAgIGRlZiB0ZXN0X2VzY2FwaW5nKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmUgcmVnZXggc2lnbmlmaWNhbmNlIGFyZSBlc2NhcGVkLgorICAgICAgICAjIFBhcmVudGhlc2VzIGFyZSBpbiBhIHB1cnBvc2VmdWwgb3JkZXI7IHdpbGwgY2F1c2UgYW4gZXJyb3Igb2YKKyAgICAgICAgIyB1bmJhbGFuY2VkIHBhcmVudGhlc2VzIHdoZW4gdGhlIHJlZ2V4IGlzIGNvbXBpbGVkIGlmIHRoZXkgYXJlIG5vdAorICAgICAgICAjIGVzY2FwZWQuCisgICAgICAgICMgVGVzdCBpbnN0aWdhdGVkIGJ5IGJ1ZyAjNzk2MTQ5IC4KKyAgICAgICAgbmVlZF9lc2NhcGluZyA9ICIuXiQqKz97fVxbXXwpKCIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShuZWVkX2VzY2FwaW5nLCBuZWVkX2VzY2FwaW5nKSkKKworICAgIGRlZiB0ZXN0X2ZlYjI5X29uX2xlYXBfeWVhcl93aXRob3V0X3llYXIoc2VsZik6CisgICAgICAgIHRpbWUuc3RycHRpbWUoIkZlYiAyOSIsICIlYiAlZCIpCisKKyAgICBkZWYgdGVzdF9tYXIxX2NvbWVzX2FmdGVyX2ZlYjI5X2V2ZW5fd2hlbl9vbWl0dGluZ190aGVfeWVhcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKAorICAgICAgICAgICAgICAgIHRpbWUuc3RycHRpbWUoIkZlYiAyOSIsICIlYiAlZCIpLAorICAgICAgICAgICAgICAgIHRpbWUuc3RycHRpbWUoIk1hciAxIiwgIiViICVkIikpCisKK2NsYXNzIFN0cnB0aW1lMTJBTVBNVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBfc3RycHRpbWUgcmVncmVzc2lvbiBpbiAnJUkgJXAnIGF0IDEyIG5vb24gKDEyIFBNKSIiIgorCisgICAgZGVmIHRlc3RfdHdlbHZlX25vb25fbWlkbmlnaHQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcSh0aW1lLnN0cnB0aW1lKCcxMiBQTScsICclSSAlcCcpWzNdLCAxMikKKyAgICAgICAgZXEodGltZS5zdHJwdGltZSgnMTIgQU0nLCAnJUkgJXAnKVszXSwgMCkKKyAgICAgICAgZXEoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCcxMiBQTScsICclSSAlcCcpWzNdLCAxMikKKyAgICAgICAgZXEoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCcxMiBBTScsICclSSAlcCcpWzNdLCAwKQorCisKK2NsYXNzIEp1bGlhblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgX3N0cnB0aW1lIHJlZ3Jlc3Npb24gdGhhdCBhbGwganVsaWFuICgxLTM2NikgYXJlIGFjY2VwdGVkIiIiCisKKyAgICBkZWYgdGVzdF9hbGxfanVsaWFuX2RheXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAzNjcpOgorICAgICAgICAgICAgIyB1c2UgMjAwNCwgc2luY2UgaXQgaXMgYSBsZWFwIHllYXIsIHdlIGhhdmUgMzY2IGRheXMKKyAgICAgICAgICAgIGVxKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgnJWQgMjAwNCcgJSBpLCAnJWogJVknKVs3XSwgaSkKKworY2xhc3MgQ2FsY3VsYXRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHN0cnB0aW1lKCkgZmlsbHMgaW4gbWlzc2luZyBpbmZvIGNvcnJlY3RseSIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRpbWVfdHVwbGUgPSB0aW1lLmdtdGltZSgpCisKKyAgICBkZWYgdGVzdF9qdWxpYW5fY2FsY3VsYXRpb24oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2hlbiBKdWxpYW4gaXMgbWlzc2luZyB0aGF0IGl0IGlzIGNhbGN1bGF0ZWQKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIlWSAlbSAlZCAlSCAlTSAlUyAldyAlWiIKKyAgICAgICAgcmVzdWx0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUuc3RyZnRpbWUoZm9ybWF0X3N0cmluZywgc2VsZi50aW1lX3R1cGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQudG1feWRheSA9PSBzZWxmLnRpbWVfdHVwbGUudG1feWRheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxjdWxhdGlvbiBvZiB0bV95ZGF5IGZhaWxlZDsgJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnRtX3lkYXksIHNlbGYudGltZV90dXBsZS50bV95ZGF5KSkKKworICAgIGRlZiB0ZXN0X2dyZWdvcmlhbl9jYWxjdWxhdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgR3JlZ29yaWFuIGRhdGUgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSBKdWxpYW4gZGF5CisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSAiJVkgJUggJU0gJVMgJXcgJWogJVoiCisgICAgICAgIHJlc3VsdCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSh0aW1lLnN0cmZ0aW1lKGZvcm1hdF9zdHJpbmcsIHNlbGYudGltZV90dXBsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnRtX3llYXIgPT0gc2VsZi50aW1lX3R1cGxlLnRtX3llYXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRtX21vbiA9PSBzZWxmLnRpbWVfdHVwbGUudG1fbW9uIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC50bV9tZGF5ID09IHNlbGYudGltZV90dXBsZS50bV9tZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGN1bGF0aW9uIG9mIEdyZWdvcmlhbiBkYXRlIGZhaWxlZDsiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLSVzLSVzICE9ICVzLSVzLSVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC50bV95ZWFyLCByZXN1bHQudG1fbW9uLCByZXN1bHQudG1fbWRheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lX3R1cGxlLnRtX3llYXIsIHNlbGYudGltZV90dXBsZS50bV9tb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZV90dXBsZS50bV9tZGF5KSkKKworICAgIGRlZiB0ZXN0X2RheV9vZl93ZWVrX2NhbGN1bGF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZGF5IG9mIHRoZSB3ZWVrIGlzIGNhbGN1bGF0ZWQgYXMgbmVlZGVkCisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSAiJVkgJW0gJWQgJUggJVMgJWogJVoiCisgICAgICAgIHJlc3VsdCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSh0aW1lLnN0cmZ0aW1lKGZvcm1hdF9zdHJpbmcsIHNlbGYudGltZV90dXBsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnRtX3dkYXkgPT0gc2VsZi50aW1lX3R1cGxlLnRtX3dkYXksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FsY3VsYXRpb24gb2YgZGF5IG9mIHRoZSB3ZWVrIGZhaWxlZDsiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICE9ICVzIiAlIChyZXN1bHQudG1fd2RheSwgc2VsZi50aW1lX3R1cGxlLnRtX3dkYXkpKQorCisgICAgZGVmIHRlc3Rfd2Vla19vZl95ZWFyX2FuZF9kYXlfb2Zfd2Vla19jYWxjdWxhdGlvbihzZWxmKToKKyAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byBpbmZlciBkYXRlIGlmIGdpdmVuIHllYXIsIHdlZWsgb2YgeWVhciAoJVUgb3IgJVcpCisgICAgICAgICMgYW5kIGRheSBvZiB0aGUgd2VlaworICAgICAgICBkZWYgdGVzdF9oZWxwZXIoeW1kX3R1cGxlLCB0ZXN0X3JlYXNvbik6CisgICAgICAgICAgICBmb3IgZGlyZWN0aXZlIGluICgnVycsICdVJyk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIlJVkgJSUlcyAlJXciICUgZGlyZWN0aXZlCisgICAgICAgICAgICAgICAgZHRfZGF0ZSA9IGRhdGV0aW1lX2RhdGUoKnltZF90dXBsZSkKKyAgICAgICAgICAgICAgICBzdHJwX2lucHV0ID0gZHRfZGF0ZS5zdHJmdGltZShmb3JtYXRfc3RyaW5nKQorICAgICAgICAgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cnBfaW5wdXQsIGZvcm1hdF9zdHJpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnBfb3V0cHV0WzozXSA9PSB5bWRfdHVwbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMoJXMpIHRlc3QgZmFpbGVkIHcvICclcyc6ICVzICE9ICVzICglcyAhPSAlcykiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9yZWFzb24sIGRpcmVjdGl2ZSwgc3RycF9pbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RycF9vdXRwdXRbOjNdLCB5bWRfdHVwbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnBfb3V0cHV0WzddLCBkdF9kYXRlLnRpbWV0dXBsZSgpWzddKSkKKyAgICAgICAgdGVzdF9oZWxwZXIoKDE5MDEsIDEsIDMpLCAid2VlayAwIikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDE5MDEsIDEsIDgpLCAiY29tbW9uIGNhc2UiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTkwMSwgMSwgMTMpLCAiZGF5IG9uIFN1bmRheSIpCisgICAgICAgIHRlc3RfaGVscGVyKCgxOTAxLCAxLCAxNCksICJkYXkgb24gTW9uZGF5IikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDE5MDUsIDEsIDEpLCAiSmFuIDEgb24gU3VuZGF5IikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDE5MDYsIDEsIDEpLCAiSmFuIDEgb24gTW9uZGF5IikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDE5MDYsIDEsIDcpLCAiZmlyc3QgU3VuZGF5IGluIGEgeWVhciBzdGFydGluZyBvbiBNb25kYXkiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTkwNSwgMTIsIDMxKSwgIkRlYyAzMSBvbiBTdW5kYXkiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTkwNiwgMTIsIDMxKSwgIkRlYyAzMSBvbiBNb25kYXkiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMjAwOCwgMTIsIDI5KSwgIk1vbmRheSBpbiB0aGUgbGFzdCB3ZWVrIG9mIHRoZSB5ZWFyIikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDIwMDgsIDEyLCAyMiksICJNb25kYXkgaW4gdGhlIHNlY29uZC10by1sYXN0IHdlZWsgb2YgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ZWFyIikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDE5NzgsIDEwLCAyMyksICJyYW5kb21seSBjaG9zZW4gZGF0ZSIpCisgICAgICAgIHRlc3RfaGVscGVyKCgyMDA0LCAxMiwgMTgpLCAicmFuZG9tbHkgY2hvc2VuIGRhdGUiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTk3OCwgMTAsIDIzKSwgInllYXIgc3RhcnRpbmcgYW5kIGVuZGluZyBvbiBNb25kYXkgd2hpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRlIG5vdCBvbiBTdW5kYXkgb3IgTW9uZGF5IikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDE5MTcsIDEyLCAxNyksICJ5ZWFyIHN0YXJ0aW5nIGFuZCBlbmRpbmcgb24gTW9uZGF5IHdpdGggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIE1vbmRheSBub3QgYXQgdGhlIGJlZ2lubmluZyBvciBlbmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiB0aGUgeWVhciIpCisgICAgICAgIHRlc3RfaGVscGVyKCgxOTE3LCAxMiwgMzEpLCAiRGVjIDMxIG9uIE1vbmRheSB3aXRoIHllYXIgc3RhcnRpbmcgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kaW5nIG9uIE1vbmRheSIpCisgICAgICAgIHRlc3RfaGVscGVyKCgyMDA3LCAwMSwgMDcpLCAiRmlyc3QgU3VuZGF5IG9mIDIwMDciKQorICAgICAgICB0ZXN0X2hlbHBlcigoMjAwNywgMDEsIDE0KSwgIlNlY29uZCBTdW5kYXkgb2YgMjAwNyIpCisgICAgICAgIHRlc3RfaGVscGVyKCgyMDA2LCAxMiwgMzEpLCAiTGFzdCBTdW5kYXkgb2YgMjAwNiIpCisgICAgICAgIHRlc3RfaGVscGVyKCgyMDA2LCAxMiwgMjQpLCAiU2Vjb25kIHRvIGxhc3QgU3VuZGF5IG9mIDIwMDYiKQorCisKK2NsYXNzIENhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBjYWNoaW5nIHdvcmtzIHByb3Blcmx5LiIiIgorCisgICAgZGVmIHRlc3RfdGltZV9yZV9yZWNyZWF0aW9uKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBjYWNoZSBpcyByZWNyZWF0ZWQgd2hlbiBjdXJyZW50IGxvY2FsZSBkb2VzIG5vdCBtYXRjaCB3aGF0CisgICAgICAgICMgY2FjaGVkIG9iamVjdCB3YXMgY3JlYXRlZCB3aXRoLgorICAgICAgICBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoIjEwIiwgIiVkIikKKyAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCIyMDA1IiwgIiVZIikKKyAgICAgICAgX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUubG9jYWxlX3RpbWUubGFuZyA9ICJOaSIKKyAgICAgICAgb3JpZ2luYWxfdGltZV9yZSA9IF9zdHJwdGltZS5fVGltZVJFX2NhY2hlCisgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMTAiLCAiJWQiKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdpbmFsX3RpbWVfcmUsIF9zdHJwdGltZS5fVGltZVJFX2NhY2hlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihfc3RycHRpbWUuX3JlZ2V4X2NhY2hlKSwgMSkKKworICAgIGRlZiB0ZXN0X3JlZ2V4X2NsZWFudXAoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGNhY2hlZCByZWdleGVzIGFyZSBkaXNjYXJkZWQgd2hlbiBjYWNoZSBiZWNvbWVzICJmdWxsIi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIF9zdHJwdGltZS5fcmVnZXhfY2FjaGVbJyVkJ10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBib2d1c19rZXkgPSAwCisgICAgICAgIHdoaWxlIGxlbihfc3RycHRpbWUuX3JlZ2V4X2NhY2hlKSA8PSBfc3RycHRpbWUuX0NBQ0hFX01BWF9TSVpFOgorICAgICAgICAgICAgX3N0cnB0aW1lLl9yZWdleF9jYWNoZVtib2d1c19rZXldID0gTm9uZQorICAgICAgICAgICAgYm9ndXNfa2V5ICs9IDEKKyAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCIxMCIsICIlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKF9zdHJwdGltZS5fcmVnZXhfY2FjaGUpLCAxKQorCisgICAgZGVmIHRlc3RfbmV3X2xvY2FsZXRpbWUoc2VsZik6CisgICAgICAgICMgQSBuZXcgTG9jYWxlVGltZSBpbnN0YW5jZSBzaG91bGQgYmUgY3JlYXRlZCB3aGVuIGEgbmV3IFRpbWVSRSBvYmplY3QKKyAgICAgICAgIyBpcyBjcmVhdGVkLgorICAgICAgICBsb2NhbGVfdGltZV9pZCA9IF9zdHJwdGltZS5fVGltZVJFX2NhY2hlLmxvY2FsZV90aW1lCisgICAgICAgIF9zdHJwdGltZS5fVGltZVJFX2NhY2hlLmxvY2FsZV90aW1lLmxhbmcgPSAiTmkiCisgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMTAiLCAiJWQiKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGxvY2FsZV90aW1lX2lkLCBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZSkKKworICAgIGRlZiB0ZXN0X1RpbWVSRV9yZWNyZWF0aW9uKHNlbGYpOgorICAgICAgICAjIFRoZSBUaW1lUkUgaW5zdGFuY2Ugc2hvdWxkIGJlIHJlY3JlYXRlZCB1cG9uIGNoYW5naW5nIHRoZSBsb2NhbGUuCisgICAgICAgIGxvY2FsZV9pbmZvID0gbG9jYWxlLmdldGxvY2FsZShsb2NhbGUuTENfVElNRSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfVElNRSwgKCdlbl9VUycsICdVVEY4JykpCisgICAgICAgIGV4Y2VwdCBsb2NhbGUuRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCcxMCcsICclZCcpCisgICAgICAgICAgICAjIEdldCBpZCBvZiBjdXJyZW50IGNhY2hlIG9iamVjdC4KKyAgICAgICAgICAgIGZpcnN0X3RpbWVfcmUgPSBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgQ2hhbmdlIHRoZSBsb2NhbGUgYW5kIGZvcmNlIGEgcmVjcmVhdGlvbiBvZiB0aGUgY2FjaGUuCisgICAgICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfVElNRSwgKCdkZV9ERScsICdVVEY4JykpCisgICAgICAgICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCcxMCcsICclZCcpCisgICAgICAgICAgICAgICAgIyBHZXQgdGhlIG5ldyBjYWNoZSBvYmplY3QncyBpZC4KKyAgICAgICAgICAgICAgICBzZWNvbmRfdGltZV9yZSA9IF9zdHJwdGltZS5fVGltZVJFX2NhY2hlCisgICAgICAgICAgICAgICAgIyBUaGV5IHNob3VsZCBub3QgYmUgZXF1YWwuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChmaXJzdF90aW1lX3JlLCBzZWNvbmRfdGltZV9yZSkKKyAgICAgICAgICAgICMgUG9zc2libGUgdGVzdCBsb2NhbGUgaXMgbm90IHN1cHBvcnRlZCB3aGlsZSBpbml0aWFsIGxvY2FsZSBpcy4KKyAgICAgICAgICAgICMgSWYgdGhpcyBpcyB0aGUgY2FzZSBqdXN0IHN1cHByZXNzIHRoZSBleGNlcHRpb24gYW5kIGZhbGwtdGhyb3VnaAorICAgICAgICAgICAgIyB0byB0aGUgcmVzZXR0aW5nIHRvIHRoZSBvcmlnaW5hbCBsb2NhbGUuCisgICAgICAgICAgICBleGNlcHQgbG9jYWxlLkVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJhbXBsZSBvbiB0aGUgbG9jYWxlIHNldHRpbmcgb25jZSB3ZSBsZWF2ZSB0aGUKKyAgICAgICAgIyB0ZXN0LgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfVElNRSwgbG9jYWxlX2luZm8pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIGdldGxhbmdfVGVzdHMsCisgICAgICAgIExvY2FsZVRpbWVfVGVzdHMsCisgICAgICAgIFRpbWVSRVRlc3RzLAorICAgICAgICBTdHJwdGltZVRlc3RzLAorICAgICAgICBTdHJwdGltZTEyQU1QTVRlc3RzLAorICAgICAgICBKdWxpYW5UZXN0cywKKyAgICAgICAgQ2FsY3VsYXRpb25UZXN0cywKKyAgICAgICAgQ2FjaGVUZXN0cworICAgICkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjNTk1ZAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQpAQCAtMCwwICsxLDM5OSBAQAorIyBUZXN0cyBmb3IgdGhlIGNvcnJlY3RseS1yb3VuZGVkIHN0cmluZyAtPiBmbG9hdCBjb252ZXJzaW9ucworIyBpbnRyb2R1Y2VkIGluIFB5dGhvbiAyLjcgYW5kIDMuMS4KKworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2lmIGdldGF0dHIoc3lzLCAnZmxvYXRfcmVwcl9zdHlsZScsICcnKSAhPSAnc2hvcnQnOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdjb3JyZWN0bHktcm91bmRlZCBzdHJpbmctPmZsb2F0IGNvbnZlcnNpb25zICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90IGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbScpCisKKyMgQ29ycmVjdGx5IHJvdW5kZWQgc3RyIC0+IGZsb2F0IGluIHB1cmUgUHl0aG9uLCBmb3IgY29tcGFyaXNvbi4KKworc3RydG9kX3BhcnNlciA9IHJlLmNvbXBpbGUociIiIiAgICAjIEEgbnVtZXJpYyBzdHJpbmcgY29uc2lzdHMgb2Y6CisgICAgKD9QPHNpZ24+Wy0rXSk/ICAgICAgICAgICMgYW4gb3B0aW9uYWwgc2lnbiwgZm9sbG93ZWQgYnkKKyAgICAoPz1cZHxcLlxkKSAgICAgICAgICAgICAgIyBhIG51bWJlciB3aXRoIGF0IGxlYXN0IG9uZSBkaWdpdAorICAgICg/UDxpbnQ+XGQqKSAgICAgICAgICAgICAjIGhhdmluZyBhIChwb3NzaWJseSBlbXB0eSkgaW50ZWdlciBwYXJ0CisgICAgKD86XC4oP1A8ZnJhYz5cZCopKT8gICAgICMgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgZnJhY3Rpb25hbCBwYXJ0CisgICAgKD86RSg/UDxleHA+Wy0rXT9cZCspKT8gICMgYW5kIGFuIG9wdGlvbmFsIGV4cG9uZW50CisgICAgXFoKKyIiIiwgcmUuVkVSQk9TRSB8IHJlLklHTk9SRUNBU0UpLm1hdGNoCisKKyMgUHVyZSBQeXRob24gdmVyc2lvbiBvZiBjb3JyZWN0bHkgcm91bmRlZCBzdHJpbmctPmZsb2F0IGNvbnZlcnNpb24uCisjIEF2b2lkcyBhbnkgdXNlIG9mIGZsb2F0aW5nLXBvaW50IGJ5IHJldHVybmluZyB0aGUgcmVzdWx0IGFzIGEgaGV4IHN0cmluZy4KK2RlZiBzdHJ0b2QocywgbWFudF9kaWc9NTMsIG1pbl9leHAgPSAtMTAyMSwgbWF4X2V4cCA9IDEwMjQpOgorICAgICIiIkNvbnZlcnQgYSBmaW5pdGUgZGVjaW1hbCBzdHJpbmcgdG8gYSBoZXggc3RyaW5nIHJlcHJlc2VudGluZyBhbgorICAgIElFRUUgNzU0IGJpbmFyeTY0IGZsb2F0LiAgUmV0dXJuICdpbmYnIG9yICctaW5mJyBvbiBvdmVyZmxvdy4KKyAgICBUaGlzIGZ1bmN0aW9uIG1ha2VzIG5vIHVzZSBvZiBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIGF0IGFueQorICAgIHN0YWdlLiIiIgorCisgICAgIyBwYXJzZSBzdHJpbmcgaW50byBhIHBhaXIgb2YgaW50ZWdlcnMgJ2EnIGFuZCAnYicgc3VjaCB0aGF0CisgICAgIyBhYnMoZGVjaW1hbCB2YWx1ZSkgPSBhL2IsIGFsb25nIHdpdGggYSBib29sZWFuICduZWdhdGl2ZScuCisgICAgbSA9IHN0cnRvZF9wYXJzZXIocykKKyAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgbnVtZXJpYyBzdHJpbmcnKQorICAgIGZyYWN0aW9uID0gbS5ncm91cCgnZnJhYycpIG9yICcnCisgICAgaW50cGFydCA9IGludChtLmdyb3VwKCdpbnQnKSArIGZyYWN0aW9uKQorICAgIGV4cCA9IGludChtLmdyb3VwKCdleHAnKSBvciAnMCcpIC0gbGVuKGZyYWN0aW9uKQorICAgIG5lZ2F0aXZlID0gbS5ncm91cCgnc2lnbicpID09ICctJworICAgIGEsIGIgPSBpbnRwYXJ0KjEwKiptYXgoZXhwLCAwKSwgMTAqKm1heCgwLCAtZXhwKQorCisgICAgIyBxdWljayByZXR1cm4gZm9yIHplcm9zCisgICAgaWYgbm90IGE6CisgICAgICAgIHJldHVybiAnLTB4MC4wcCswJyBpZiBuZWdhdGl2ZSBlbHNlICcweDAuMHArMCcKKworICAgICMgY29tcHV0ZSBleHBvbmVudCBlIGZvciByZXN1bHQ7IG1heSBiZSBvbmUgdG9vIHNtYWxsIGluIHRoZSBjYXNlCisgICAgIyB0aGF0IHRoZSByb3VuZGVkIHZhbHVlIG9mIGEvYiBsaWVzIGluIGEgZGlmZmVyZW50IGJpbmFkZSBmcm9tIGEvYgorICAgIGQgPSBhLmJpdF9sZW5ndGgoKSAtIGIuYml0X2xlbmd0aCgpCisgICAgZCArPSAoYSA+PiBkIGlmIGQgPj0gMCBlbHNlIGEgPDwgLWQpID49IGIKKyAgICBlID0gbWF4KGQsIG1pbl9leHApIC0gbWFudF9kaWcKKworICAgICMgYXBwcm94aW1hdGUgYS9iIGJ5IG51bWJlciBvZiB0aGUgZm9ybSBxICogMioqZTsgYWRqdXN0IGUgaWYgbmVjZXNzYXJ5CisgICAgYSwgYiA9IGEgPDwgbWF4KC1lLCAwKSwgYiA8PCBtYXgoZSwgMCkKKyAgICBxLCByID0gZGl2bW9kKGEsIGIpCisgICAgaWYgMipyID4gYiBvciAyKnIgPT0gYiBhbmQgcSAmIDE6CisgICAgICAgIHEgKz0gMQorICAgICAgICBpZiBxLmJpdF9sZW5ndGgoKSA9PSBtYW50X2RpZysxOgorICAgICAgICAgICAgcSAvLz0gMgorICAgICAgICAgICAgZSArPSAxCisKKyAgICAjIGRvdWJsZSBjaGVjayB0aGF0IChxLCBlKSBoYXMgdGhlIHJpZ2h0IGZvcm0KKyAgICBhc3NlcnQgcS5iaXRfbGVuZ3RoKCkgPD0gbWFudF9kaWcgYW5kIGUgPj0gbWluX2V4cCAtIG1hbnRfZGlnCisgICAgYXNzZXJ0IHEuYml0X2xlbmd0aCgpID09IG1hbnRfZGlnIG9yIGUgPT0gbWluX2V4cCAtIG1hbnRfZGlnCisKKyAgICAjIGNoZWNrIGZvciBvdmVyZmxvdyBhbmQgdW5kZXJmbG93CisgICAgaWYgZSArIHEuYml0X2xlbmd0aCgpID4gbWF4X2V4cDoKKyAgICAgICAgcmV0dXJuICctaW5mJyBpZiBuZWdhdGl2ZSBlbHNlICdpbmYnCisgICAgaWYgbm90IHE6CisgICAgICAgIHJldHVybiAnLTB4MC4wcCswJyBpZiBuZWdhdGl2ZSBlbHNlICcweDAuMHArMCcKKworICAgICMgZm9yIGhleCByZXByZXNlbnRhdGlvbiwgc2hpZnQgc28gIyBiaXRzIGFmdGVyIHBvaW50IGlzIGEgbXVsdGlwbGUgb2YgNAorICAgIGhleGRpZ3MgPSAxICsgKG1hbnRfZGlnLTIpLy80CisgICAgc2hpZnQgPSAzIC0gKG1hbnRfZGlnLTIpJTQKKyAgICBxLCBlID0gcSA8PCBzaGlmdCwgZSAtIHNoaWZ0CisgICAgcmV0dXJuICd7fTB4ezp4fS57OjB7fXh9cHs6K2R9Jy5mb3JtYXQoCisgICAgICAgICctJyBpZiBuZWdhdGl2ZSBlbHNlICcnLAorICAgICAgICBxIC8vIDE2KipoZXhkaWdzLAorICAgICAgICBxICUgMTYqKmhleGRpZ3MsCisgICAgICAgIGhleGRpZ3MsCisgICAgICAgIGUgKyA0KmhleGRpZ3MpCisKK1RFU1RfU0laRSA9IDEwCisKK2NsYXNzIFN0cnRvZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY2hlY2tfc3RydG9kKHNlbGYsIHMpOgorICAgICAgICAiIiJDb21wYXJlIHRoZSByZXN1bHQgb2YgUHl0aG9uJ3MgYnVpbHRpbiBjb3JyZWN0bHkgcm91bmRlZAorICAgICAgICBzdHJpbmctPmZsb2F0IGNvbnZlcnNpb24gKHVzaW5nIGZsb2F0KSB0byBhIHB1cmUgUHl0aG9uCisgICAgICAgIGNvcnJlY3RseSByb3VuZGVkIHN0cmluZy0+ZmxvYXQgaW1wbGVtZW50YXRpb24uICBGYWlsIGlmIHRoZQorICAgICAgICB0d28gbWV0aG9kcyBnaXZlIGRpZmZlcmVudCByZXN1bHRzLiIiIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZzID0gZmxvYXQocykKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBnb3QgPSAnLWluZicgaWYgc1swXSA9PSAnLScgZWxzZSAnaW5mJworICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBnb3QgPSAnbWVtb3J5IGVycm9yJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ290ID0gZnMuaGV4KCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzdHJ0b2QocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvcnJlY3RseSByb3VuZGVkIHN0ci0+ZmxvYXQgY29udmVyc2lvbiBmb3Ige306ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQge30sIGdvdCB7fSIuZm9ybWF0KHMsIGV4cGVjdGVkLCBnb3QpKQorCisgICAgZGVmIHRlc3Rfc2hvcnRfaGFsZndheV9jYXNlcyhzZWxmKToKKyAgICAgICAgIyBleGFjdCBoYWxmd2F5IGNhc2VzIHdpdGggYSBzbWFsbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzCisgICAgICAgIGZvciBrIGluIDAsIDUsIDEwLCAxNSwgMjA6CisgICAgICAgICAgICAjIHVwcGVyID0gc21hbGxlc3QgaW50ZWdlciA+PSAyKio1NC81KiprCisgICAgICAgICAgICB1cHBlciA9IC0oLTIqKjU0Ly81KiprKQorICAgICAgICAgICAgIyBsb3dlciA9IHNtYWxsZXN0IG9kZCBudW1iZXIgPj0gMioqNTMvNSoqaworICAgICAgICAgICAgbG93ZXIgPSAtKC0yKio1My8vNSoqaykKKyAgICAgICAgICAgIGlmIGxvd2VyICUgMiA9PSAwOgorICAgICAgICAgICAgICAgIGxvd2VyICs9IDEKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShURVNUX1NJWkUpOgorICAgICAgICAgICAgICAgICMgU2VsZWN0IGEgcmFuZG9tIG9kZCBuIGluIFsyKio1My81KiprLAorICAgICAgICAgICAgICAgICMgMioqNTQvNSoqaykuIFRoZW4gbiAqIDEwKiprIGdpdmVzIGEgaGFsZndheSBjYXNlCisgICAgICAgICAgICAgICAgIyB3aXRoIHNtYWxsIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMuCisgICAgICAgICAgICAgICAgbiwgZSA9IHJhbmRvbS5yYW5kcmFuZ2UobG93ZXIsIHVwcGVyLCAyKSwgaworCisgICAgICAgICAgICAgICAgIyBSZW1vdmUgYW55IGFkZGl0aW9uYWwgcG93ZXJzIG9mIDUuCisgICAgICAgICAgICAgICAgd2hpbGUgbiAlIDUgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbiwgZSA9IG4gLy8gNSwgZSArIDEKKyAgICAgICAgICAgICAgICBhc3NlcnQgbiAlIDEwIGluICgxLCAzLCA3LCA5KQorCisgICAgICAgICAgICAgICAgIyBUcnkgbnVtYmVycyBvZiB0aGUgZm9ybSBuICogMioqcDIgKiAxMCoqZSwgcDIgPj0gMCwKKyAgICAgICAgICAgICAgICAjIHVudGlsIG4gKiAyKipwMiBoYXMgbW9yZSB0aGFuIDIwIHNpZ25pZmljYW50IGRpZ2l0cy4KKyAgICAgICAgICAgICAgICBkaWdpdHMsIGV4cG9uZW50ID0gbiwgZQorICAgICAgICAgICAgICAgIHdoaWxlIGRpZ2l0cyA8IDEwKioyMDoKKyAgICAgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisgICAgICAgICAgICAgICAgICAgICMgU2FtZSBhZ2FpbiwgYnV0IHdpdGggZXh0cmEgdHJhaWxpbmcgemVyb3MuCisgICAgICAgICAgICAgICAgICAgIHMgPSAne31le30nLmZvcm1hdChkaWdpdHMgKiAxMCoqNDAsIGV4cG9uZW50IC0gNDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyAqPSAyCisKKyAgICAgICAgICAgICAgICAjIFRyeSBudW1iZXJzIG9mIHRoZSBmb3JtIG4gKiA1KipwMiAqIDEwKiooZSAtIHA1KSwgcDUKKyAgICAgICAgICAgICAgICAjID49IDAsIHdpdGggbiAqIDUqKnA1IDwgMTAqKjIwLgorICAgICAgICAgICAgICAgIGRpZ2l0cywgZXhwb25lbnQgPSBuLCBlCisgICAgICAgICAgICAgICAgd2hpbGUgZGlnaXRzIDwgMTAqKjIwOgorICAgICAgICAgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzLCBleHBvbmVudCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKyAgICAgICAgICAgICAgICAgICAgIyBTYW1lIGFnYWluLCBidXQgd2l0aCBleHRyYSB0cmFpbGluZyB6ZXJvcy4KKyAgICAgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cyAqIDEwKio0MCwgZXhwb25lbnQgLSA0MCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKyAgICAgICAgICAgICAgICAgICAgZGlnaXRzICo9IDUKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgLT0gMQorCisgICAgZGVmIHRlc3RfaGFsZndheV9jYXNlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGhhbGZ3YXkgY2FzZXMgZm9yIHRoZSByb3VuZC1oYWxmLXRvLWV2ZW4gcnVsZQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwICogVEVTVF9TSVpFKToKKyAgICAgICAgICAgICMgYml0IHBhdHRlcm4gZm9yIGEgcmFuZG9tIGZpbml0ZSBwb3NpdGl2ZSAob3IgKzAuMCkgZmxvYXQKKyAgICAgICAgICAgIGJpdHMgPSByYW5kb20ucmFuZHJhbmdlKDIwNDcqMioqNTIpCisKKyAgICAgICAgICAgICMgY29udmVydCBiaXQgcGF0dGVybiB0byBhIG51bWJlciBvZiB0aGUgZm9ybSBtICogMioqZQorICAgICAgICAgICAgZSwgbSA9IGRpdm1vZChiaXRzLCAyKio1MikKKyAgICAgICAgICAgIGlmIGU6CisgICAgICAgICAgICAgICAgbSwgZSA9IG0gKyAyKio1MiwgZSAtIDEKKyAgICAgICAgICAgIGUgLT0gMTA3NAorCisgICAgICAgICAgICAjIGFkZCAwLjUgdWxwcworICAgICAgICAgICAgbSwgZSA9IDIqbSArIDEsIGUgLSAxCisKKyAgICAgICAgICAgICMgY29udmVydCB0byBhIGRlY2ltYWwgc3RyaW5nCisgICAgICAgICAgICBpZiBlID49IDA6CisgICAgICAgICAgICAgICAgZGlnaXRzID0gbSA8PCBlCisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgbSAqIDIqKmUgPSAobSAqIDUqKi1lKSAqIDEwKiplCisgICAgICAgICAgICAgICAgZGlnaXRzID0gbSAqIDUqKi1lCisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSBlCisgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzLCBleHBvbmVudCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisKKyAgICBkZWYgdGVzdF9ib3VuZGFyaWVzKHNlbGYpOgorICAgICAgICAjIGJvdW5kYXJpZXMgZXhwcmVzc2VkIGFzIHRyaXBsZXMgKG4sIGUsIHUpLCB3aGVyZQorICAgICAgICAjIG4qMTAqKmUgaXMgYW4gYXBwcm94aW1hdGlvbiB0byB0aGUgYm91bmRhcnkgdmFsdWUgYW5kCisgICAgICAgICMgdSoxMCoqZSBpcyAxdWxwCisgICAgICAgIGJvdW5kYXJpZXMgPSBbCisgICAgICAgICAgICAoMTAwMDAwMDAwMDAwMDAwMDAwMDAsIC0xOSwgMTExMCksICAgIyBhIHBvd2VyIG9mIDIgYm91bmRhcnkgKDEuMCkKKyAgICAgICAgICAgICgxNzk3NjkzMTM0ODYyMzE1OTA3NywgMjg5LCAxOTk1KSwgICAjIG92ZXJmbG93IGJvdW5kYXJ5ICgyLioqMTAyNCkKKyAgICAgICAgICAgICgyMjI1MDczODU4NTA3MjAxMzgzMSwgLTMyNywgNDk0MSksICAjIG5vcm1hbC9zdWJub3JtYWwgKDIuKiotMTAyMikKKyAgICAgICAgICAgICgwLCAtMzI3LCA0OTQxKSwgICAgICAgICAgICAgICAgICAgICAjIHplcm8KKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIG4sIGUsIHUgaW4gYm91bmRhcmllczoKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZSgxMDAwKToKKyAgICAgICAgICAgICAgICBkaWdpdHMgPSBuICsgcmFuZG9tLnJhbmRyYW5nZSgtMyp1LCAzKnUpCisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSBlCisgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKyAgICAgICAgICAgICAgICBuICo9IDEwCisgICAgICAgICAgICAgICAgdSAqPSAxMAorICAgICAgICAgICAgICAgIGUgLT0gMQorCisgICAgZGVmIHRlc3RfdW5kZXJmbG93X2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICAjIHRlc3QgdmFsdWVzIGNsb3NlIHRvIDIqKi0xMDc1LCB0aGUgdW5kZXJmbG93IGJvdW5kYXJ5OyBzaW1pbGFyCisgICAgICAgICMgdG8gYm91bmRhcnlfdGVzdHMsIGV4Y2VwdCB0aGF0IHRoZSByYW5kb20gZXJyb3IgZG9lc24ndCBzY2FsZQorICAgICAgICAjIHdpdGggbgorICAgICAgICBmb3IgZXhwb25lbnQgaW4geHJhbmdlKC00MDAsIC0zMjApOgorICAgICAgICAgICAgYmFzZSA9IDEwKiotZXhwb25lbnQgLy8gMioqMTA3NQorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKFRFU1RfU0laRSk6CisgICAgICAgICAgICAgICAgZGlnaXRzID0gYmFzZSArIHJhbmRvbS5yYW5kcmFuZ2UoLTEwMDAsIDEwMDApCisgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKworICAgIGRlZiB0ZXN0X2JpZ2NvbXAoc2VsZik6CisgICAgICAgIGZvciBuZGlncyBpbiA1LCAxMCwgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDQwLCA0MSwgNTA6CisgICAgICAgICAgICBkaWcxMCA9IDEwKipuZGlncworICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwICogVEVTVF9TSVpFKToKKyAgICAgICAgICAgICAgICBkaWdpdHMgPSByYW5kb20ucmFuZHJhbmdlKGRpZzEwKQorICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gcmFuZG9tLnJhbmRyYW5nZSgtNDAwLCA0MDApCisgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKworICAgIGRlZiB0ZXN0X3BhcnNpbmcoc2VsZik6CisgICAgICAgICMgbWFrZSAnMCcgbW9yZSBsaWtlbHkgdG8gYmUgY2hvc2VuIHRoYW4gb3RoZXIgZGlnaXRzCisgICAgICAgIGRpZ2l0cyA9ICcwMDAwMDAxMjM0NTY3ODknCisgICAgICAgIHNpZ25zID0gKCcrJywgJy0nLCAnJykKKworICAgICAgICAjIHB1dCB0b2dldGhlciByYW5kb20gc2hvcnQgdmFsaWQgc3RyaW5ncworICAgICAgICAjIFxkKlsuXGQqXT9lCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDAwKToKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZShURVNUX1NJWkUpOgorICAgICAgICAgICAgICAgIHMgPSByYW5kb20uY2hvaWNlKHNpZ25zKQorICAgICAgICAgICAgICAgIGludHBhcnRfbGVuID0gcmFuZG9tLnJhbmRyYW5nZSg1KQorICAgICAgICAgICAgICAgIHMgKz0gJycuam9pbihyYW5kb20uY2hvaWNlKGRpZ2l0cykgZm9yIF8gaW4geHJhbmdlKGludHBhcnRfbGVuKSkKKyAgICAgICAgICAgICAgICBpZiByYW5kb20uY2hvaWNlKFtUcnVlLCBGYWxzZV0pOgorICAgICAgICAgICAgICAgICAgICBzICs9ICcuJworICAgICAgICAgICAgICAgICAgICBmcmFjcGFydF9sZW4gPSByYW5kb20ucmFuZHJhbmdlKDUpCisgICAgICAgICAgICAgICAgICAgIHMgKz0gJycuam9pbihyYW5kb20uY2hvaWNlKGRpZ2l0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfIGluIHhyYW5nZShmcmFjcGFydF9sZW4pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZyYWNwYXJ0X2xlbiA9IDAKKyAgICAgICAgICAgICAgICBpZiByYW5kb20uY2hvaWNlKFtUcnVlLCBGYWxzZV0pOgorICAgICAgICAgICAgICAgICAgICBzICs9IHJhbmRvbS5jaG9pY2UoWydlJywgJ0UnXSkKKyAgICAgICAgICAgICAgICAgICAgcyArPSByYW5kb20uY2hvaWNlKHNpZ25zKQorICAgICAgICAgICAgICAgICAgICBleHBvbmVudF9sZW4gPSByYW5kb20ucmFuZHJhbmdlKDEsIDQpCisgICAgICAgICAgICAgICAgICAgIHMgKz0gJycuam9pbihyYW5kb20uY2hvaWNlKGRpZ2l0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfIGluIHhyYW5nZShleHBvbmVudF9sZW4pKQorCisgICAgICAgICAgICAgICAgaWYgaW50cGFydF9sZW4gKyBmcmFjcGFydF9sZW46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQocykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJleHBlY3RlZCBWYWx1ZUVycm9yIgorCisgICAgZGVmIHRlc3RfcGFydGljdWxhcihzZWxmKToKKyAgICAgICAgIyBpbnB1dHMgdGhhdCBwcm9kdWNlZCBjcmFzaGVzIG9yIGluY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0cyB3aXRoCisgICAgICAgICMgcHJldmlvdXMgdmVyc2lvbnMgb2YgZHRvYS5jLCBmb3IgdmFyaW91cyByZWFzb25zCisgICAgICAgIHRlc3Rfc3RyaW5ncyA9IFsKKyAgICAgICAgICAgICMgaXNzdWUgNzYzMiBidWcgMSwgb3JpZ2luYWxseSByZXBvcnRlZCBmYWlsaW5nIGNhc2UKKyAgICAgICAgICAgICcyMTgzMTY3MDEyMzEyMTEyMzEyMzEyLjIzNTM4MDIwMzc0NDIwNDQ2MTkyZS0zNzAnLAorICAgICAgICAgICAgIyA1IGluc3RhbmNlcyBvZiBpc3N1ZSA3NjMyIGJ1ZyAyCisgICAgICAgICAgICAnMTI1Nzk4MTYwNDkwMDgzMDU1NDY5NzQzOTE3Njg5OTYzNjk0NjQ5NjMwMjQ2NjMxMDRlLTM1NycsCisgICAgICAgICAgICAnMTc0ODk2Mjg1NjUyMDIxMTcyNjMxNDUzNjc1OTYwMjgzODkzNDg5MjI5ODE4NTcwMTNlLTM1NycsCisgICAgICAgICAgICAnMTg0ODczOTg3ODU5OTE5OTQ2MzQxODI5MTY2Mzg1NDI2ODA3NTk2MTM1OTA0ODIyNzNlLTM1NycsCisgICAgICAgICAgICAnMzIwMDI4NjQyMDA1ODEwMzMxMzQzNTg3MjQ2NzUxOTgwNDQ1Mjc0NjkzNjY3NzM5MjhlLTM1OCcsCisgICAgICAgICAgICAnOTQzOTM0MzExOTMxODA2OTY5NDI4NDE4MzcwODUwMzM2NDc5MTMyMjQxNDg1Mzk4NTRlLTM1OCcsCisgICAgICAgICAgICAnNzM2MDgyNzg5OTg5NjY5NjkzNDU4MjQ2NTM1MDAxMzY3ODc4NzY0MzYwMDU5NTc5NTNlLTM1OCcsCisgICAgICAgICAgICAnNjQ3NzQ0Nzg4MzY0MTcyOTk0OTE3MTg0MzUyMzQ2MTEyOTkzMzYyODgwODIxMzYwNTRlLTM1OCcsCisgICAgICAgICAgICAnMTM3MDQ5NDAxMzQxMjY1NzQ1MzQ4Nzg2NDE4NzY5NDc5ODA4Nzg4MjQ2ODg0NTExNjllLTM1NycsCisgICAgICAgICAgICAnNDY2OTc0NDU3NzQwNDcwNjA5NjA2MjQ0OTc5NjQ0MjU0MTY2MTA0ODA1MjQ3NjA0NzFlLTM1OCcsCisgICAgICAgICAgICAjIGZhaWxpbmcgY2FzZSBmb3IgYnVnIGludHJvZHVjZWQgYnkgTUVURCBpbiByNzc0NTEgKGF0dGVtcHRlZAorICAgICAgICAgICAgIyBmaXggZm9yIGlzc3VlIDc2MzIsIGJ1ZyAyKSwgYW5kIGZpeGVkIGluIHI3NzQ4Mi4KKyAgICAgICAgICAgICcyODYzOTA5NzE3ODI2MTc2MzE3ODQ4OTc1OTEwNzMyMTM5Mjc0NTEwODQ5MTgyNTMwM2UtMzExJywKKyAgICAgICAgICAgICMgdHdvIG51bWJlcnMgZGVtb25zdHJhdGluZyBhIGZsYXcgaW4gdGhlIGJpZ2NvbXAgJ2RpZyA9PSAwJworICAgICAgICAgICAgIyBjb3JyZWN0aW9uIGJsb2NrIChpc3N1ZSA3NjMyLCBidWcgMykKKyAgICAgICAgICAgICcxLjAwMDAwMDAwMDAwMDAwMDAxZTQ0JywKKyAgICAgICAgICAgICcxLjAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFlNDQnLAorICAgICAgICAgICAgIyBkdG9hLmMgYnVnIGZvciBudW1iZXJzIGp1c3Qgc21hbGxlciB0aGFuIGEgcG93ZXIgb2YgMiAoaXNzdWUKKyAgICAgICAgICAgICMgNzYzMiwgYnVnIDQpCisgICAgICAgICAgICAnOTk5OTk5OTk5OTk5OTk5OTQ0ODc2NjU0NjU1NTQ3NjA3MTcwMzk1MzI1Nzg1NDZlLTQ3JywKKyAgICAgICAgICAgICMgZmFpbGluZyBjYXNlIGZvciBvZmYtYnktb25lIGVycm9yIGludHJvZHVjZWQgYnkgTUVURCBpbgorICAgICAgICAgICAgIyByNzc0ODMgKGR0b2EuYyBjbGVhbnVwKSwgZml4ZWQgaW4gcjc3NDkwCisgICAgICAgICAgICAnOTY1NDM3MTc2MzMzNjU0OTMxNzk5MDM1NTEzNjcxOTk3MTE4MzQ1NTcwMDQ1OTE0NDY5JyAjLi4uCisgICAgICAgICAgICAnNjIxMzQxMzM1MDgyMTQxNjMxMjE5NDQyMDAwNzk5MTMwNjkwODQ3MDE0NzMyMjAyMDEyMTAxODM2OGUwJywKKyAgICAgICAgICAgICMgaW5jb3JyZWN0IGxzYiBkZXRlY3Rpb24gZm9yIHJvdW5kLWhhbGYtdG8tZXZlbiB3aGVuCisgICAgICAgICAgICAjIGJjLT5zY2FsZSAhPSAwIChpc3N1ZSA3NjMyLCBidWcgNikuCisgICAgICAgICAgICAnMTA0MzA4NDg1MjQxOTgzOTkwNjY2NzEzNDAxNzA4MDcyMTc1NzczMTY1MDM0Mjc4Njg1JyAjLi4uCisgICAgICAgICAgICAnNjgyNjQ2MTExNzYyMjkyNDA5MzMwOTI4NzM5NzUxNzAyNDA0NjU4MTk3ODcyMzE5MTI5JyAjLi4uCisgICAgICAgICAgICAnMDM2NTE5OTQ3NDM1MzE5NDE4Mzg3ODM5NzU4OTkwNDc4NTQ5NDc3Nzc3NTg2NjczMDc1JyAjLi4uCisgICAgICAgICAgICAnOTQ1ODQ0ODk1OTgxMDEyMDI0Mzg3OTkyMTM1NjE3MDY0NTMyMTQxNDg5Mjc4ODE1MjM5JyAjLi4uCisgICAgICAgICAgICAnODQ5MTA4MTA1OTUxNjE5OTk3ODI5MTUzNjMzNTM1MzE0ODQ5OTk5Njc0MjY2MTY5MjU4JyAjLi4uCisgICAgICAgICAgICAnOTI4OTQwNjkyMjM5Njg0NzcxNTkwMDY1MDI3MDI1ODM1ODA0ODYzNTg1NDU0ODcyNDk5JyAjLi4uCisgICAgICAgICAgICAnMzIwNTAwMDIzMTI2MTQyNTUzOTMyNjU0MzcwMzYyMDI0MTA0NDYyMjU1MjQ0MDM0MDUzJyAjLi4uCisgICAgICAgICAgICAnMjAzOTk4OTY0MzYwODgyNDg3Mzc4MzM0ODYwMTk3NzI1MTM5MTUxMjY1NTkwODMyODg3JyAjLi4uCisgICAgICAgICAgICAnNDMzNzM2MTg5NDY4ODU4NjE0NTIxNzA4NTY3NjQ2NzQzNDU1NjAxOTA1OTM1NTk1MzgxJyAjLi4uCisgICAgICAgICAgICAnODUyNzIzNzIzNjQ1Nzk5ODY2NjcyNTU4NTc2OTkzOTc4MDI1MDMzNTkwNzI4Njg3MjA2JyAjLi4uCisgICAgICAgICAgICAnMjk2Mzc5ODAxMzYzMDI0MDk0MDQ4MzI3MjczOTEzMDc5NjEyNDY5OTgyNTg1Njc0ODI0JyAjLi4uCisgICAgICAgICAgICAnMTU2MDAwNzgzMTY3OTYzMDgxNjE2MjE0NzEwNjkxNzU5ODY0MzMyMzM5MjM5Njg4NzM0JyAjLi4uCisgICAgICAgICAgICAnNjU2NTQ4NzkwNjU2NDg2NjQ2MTA2OTgzNDUwODA5MDczNzUwNTM1NjI0ODk0Mjk2MjQyJyAjLi4uCisgICAgICAgICAgICAnMDcyMDEwMTk1NzEwMjc2MDczMDQyMDM2NDI1NTc5ODUyNDU5NTU2MTgzNTQxMTk5MDEyJyAjLi4uCisgICAgICAgICAgICAnNjUyNTcxMTIzODk4OTk2NTc0NTYzODI0NDI0MzMwOTYwMDI3ODczNTE2MDgyNzYzNjcxODc1ZS0xMDc1JywKKyAgICAgICAgICAgICMgZGVtb25zdHJhdGlvbiB0aGF0IG9yaWdpbmFsIGZpeCBmb3IgaXNzdWUgNzYzMiBidWcgMSB3YXMKKyAgICAgICAgICAgICMgYnVnZ3k7IHRoZSBleGl0IGNvbmRpdGlvbiB3YXMgdG9vIHN0cm9uZworICAgICAgICAgICAgJzI0NzAzMjgyMjkyMDYyMzI5NWUtMzQxJywKKyAgICAgICAgICAgICMgZGVtb25zdHJhdGUgc2ltaWxhciBwcm9ibGVtIHRvIGlzc3VlIDc2MzIgYnVnMTogY3Jhc2gKKyAgICAgICAgICAgICMgd2l0aCAnb3ZlcnNpemVkIHF1b3RpZW50IGluIHF1b3JlbScgbWVzc2FnZS4KKyAgICAgICAgICAgICc5OTAzNzQ4NTcwMDI0NTY4MzEwMjgwNTA0MzQzNzM0Njk2NTI0ODAyOTYwMTI4NjQzMWUtMzczJywKKyAgICAgICAgICAgICc5OTYxNzYzOTgzMzc0Mzg2MzE2MTEwOTk2MTE2Mjg4MTAyNzQwNjc2OTUxMDU1ODQ1N2UtMzczJywKKyAgICAgICAgICAgICc5ODg1MjkxNTAyNTc2OTM0NTI5NTc0OTI3ODM1MTU2MzE3OTg0MDEzMDU2NTU5MTQ2MmUtMzcyJywKKyAgICAgICAgICAgICc5OTA1OTk0NDgyNzY5MzU2OTY1OTE1MzA0Mjc2OTY5MDkzMDkwNTE0ODAxNTg3Njc4OGUtMzczJywKKyAgICAgICAgICAgICc5ODkxNDk3OTIwNTA2OTM2ODI3MDQyMTgyOTg4OTA3ODM1NjI1NDA1OTc2MDMyNzEwMWUtMzcyJywKKyAgICAgICAgICAgICMgaXNzdWUgNzYzMiBidWcgNTogdGhlIGZvbGxvd2luZyAyIHN0cmluZ3MgY29udmVydCBkaWZmZXJlbnRseQorICAgICAgICAgICAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlLTE2JywKKyAgICAgICAgICAgICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGUtMTcnLAorICAgICAgICAgICAgIyBpc3N1ZSA3NjMyIGJ1ZyA3CisgICAgICAgICAgICAnOTkxNjMzNzkzMTg5MTUwNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZS0zMycsCisgICAgICAgICAgICAjIEFuZCBhbm90aGVyLCBzaW1pbGFyLCBmYWlsaW5nIGhhbGZ3YXkgY2FzZQorICAgICAgICAgICAgJzQxMDYyNTAxOTgwMzk0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlLTM4JywKKyAgICAgICAgICAgICMgaXNzdWUgNzYzMiBidWcgODogIHRoZSBmb2xsb3dpbmcgcHJvZHVjZWQgMTAuMAorICAgICAgICAgICAgJzEwLjkwMDAwMDAwMDAwMDAwMDAxMjM0NTY3ODkxMjM0NTY3ODkxMjM0NScsCisKKyAgICAgICAgICAgICMgdHdvIGh1bW9uZ291cyB2YWx1ZXMgZnJvbSBpc3N1ZSA3NzQzCisgICAgICAgICAgICAnMTE2NTEyODc0OTQwNTk0MTk1NjM4NjE3OTA3MDkyNTY5ODgxNTE5MDM0NzkzMjI5Mzg1JyAjLi4uCisgICAgICAgICAgICAnMjI4NTY5MTY1MTkxNTQxODkwODQ2NTY0NjY5NzcxNzE0ODk2OTE2MDg0ODgzOTg3OTIwJyAjLi4uCisgICAgICAgICAgICAnNDczMzIxMjY4MTAwMjk2ODU3NjM2MjAwOTI2MDY1MzQwNzY5NjgyODYzMzQ5MjA1MzYzJyAjLi4uCisgICAgICAgICAgICAnMzQ5MjQ3NjM3NjYwNjcxNzgzMjA5OTA3OTQ5MjczNjgzMDQwMzk3OTc5OTg0MTA3ODA2JyAjLi4uCisgICAgICAgICAgICAnNDYxODIyNjkzMzMyNzEyODI4Mzk3NjE3OTQ2MDM2MjM5NTgxNjMyOTc2NTg1MTAwNjMzJyAjLi4uCisgICAgICAgICAgICAnNTIwMjYwNzcwNzYxMDYwNzI1NDAzOTA0MTIzMTQ0Mzg0NTcxNjEyMDczNzMyNzU0Nzc0JyAjLi4uCisgICAgICAgICAgICAnNTg4MjExOTQ0NDA2NDY1NTcyNTkxMDIyMDgxOTczODI4NDQ4OTI3MzM4NjAyNTU2Mjg3JyAjLi4uCisgICAgICAgICAgICAnODUxODMxNzQ1NDE5Mzk3NDMzMDEyNDkxODg0ODY5NDU0NDYyNDQwNTM2ODk1MDQ3NDk5JyAjLi4uCisgICAgICAgICAgICAnNDM2NTUxOTc0NjQ5NzMxOTE3MTcwMDk5Mzg3NzYyODcxMDIwNDAzNTgyOTk0MTkzNDM5JyAjLi4uCisgICAgICAgICAgICAnNzYxOTMzNDEyMTY2ODIxNDg0MDE1ODgzNjMxNjIyNTM5MzE0MjAzNzk5MDM0NDk3OTgyJyAjLi4uCisgICAgICAgICAgICAnMTMwMDM4NzQxNzQxNzI3OTA3NDI5NTc1NjczMzAyNDYxMzgwMzg2NTk2NTAxMTg3NDgyJyAjLi4uCisgICAgICAgICAgICAnMDA2MjU3NTI3NzA5ODQyMTc5MzM2NDg4MzgxNjcyODE4Nzk4NDUwMjI5MzM5MTIzNTI3JyAjLi4uCisgICAgICAgICAgICAnODU4ODQ0NDQ4MzM2ODE1OTEyMDIwNDUyMjk0NjI0OTE2OTkzNTQ2Mzg4OTU2NTYxNTIyJyAjLi4uCisgICAgICAgICAgICAnMTYxODc1MzUyNTcyNTkwNDIwODIzNjA3NDc4Nzg4Mzk5NDYwMTYyMjI4MzA4NjkzNzQyJyAjLi4uCisgICAgICAgICAgICAnMDUyODc2NjM0NDE0MDM1MzM5NDgyMDQwODUzOTA4OTgzOTkwNTUwMDQxMTk4NzMwNDY4NzVlLTEwNzUnLAorCisgICAgICAgICAgICAnNTI1NDQwNjUzMzUyOTU1MjY2MTA5NjYxMDYwMzU4MjAyODE5NTYxMjU4OTg0OTY0OTEzJyAjLi4uCisgICAgICAgICAgICAnODkyMjU2NTI3ODQ5NzU4OTU2MDQ1MjE4MjU3MDU5NzEzNzY1ODc0MjUxNDM2MTkzNjE5JyAjLi4uCisgICAgICAgICAgICAnNDQzMjQ4MjA1OTk4ODcwMDAxNjMzODY1NjU3NTE3NDQ3MzU1OTkyMjI1ODUyOTQ1OTEyJyAjLi4uCisgICAgICAgICAgICAnMDE2NjY4NjYwMDAwMjEwMjgzODA3MjA5ODUwNjYyMjI0NDE3NTA0NzUyMjY0OTk1MzYwJyAjLi4uCisgICAgICAgICAgICAnNjMxNTEyMDA3NzUzODU1ODAxMDc1MzczMDU3NjMyMTU3NzM4NzUyODAwODQwMzAyNTk2JyAjLi4uCisgICAgICAgICAgICAnMjM3MDUwMjQ3OTEwNTMwNTM4MjUwMDA4NjgyMjcyNzgzNjYwNzc4MTgxNjI4MDQwNzMzJyAjLi4uCisgICAgICAgICAgICAnNjUzMTIxNDkyNDM2NDA4ODEyNjY4MDIzNDc4MDAxMjA4NTI5MTkwMzU5MjU0MzIyMzQwJyAjLi4uCisgICAgICAgICAgICAnMzk3NTc1MTg1MjQ4ODQ0Nzg4NTE1NDEwNzIyOTU4Nzg0NjQwOTI2NTI4NTQ0MDQzMDkwJyAjLi4uCisgICAgICAgICAgICAnMTE1MzUyNTEzNjQwODg0OTg4MDE3MzQyNDY5Mjc1MDA2OTk5MTA0NTE5NjIwOTQ2NDMwJyAjLi4uCisgICAgICAgICAgICAnODE4NzY3MTQ3OTY2NDk1NDg1NDA2NTc3NzAzOTcyNjg3ODM4MTc2Nzc4OTkzNDcyOTg5JyAjLi4uCisgICAgICAgICAgICAnNTYxOTU5MDAwMDQ3MDM2NjM4OTM4Mzk2MzMzMTQ2Njg1MTM3OTAzMDE4Mzc2NDk2NDA4JyAjLi4uCisgICAgICAgICAgICAnMzE5NzA1MzMzODY4NDc2OTI1Mjk3MzE3MTM2NTEzOTcwMTg5MDczNjkzMzE0NzEwMzE4JyAjLi4uCisgICAgICAgICAgICAnOTkxMjUyODExMDUwNTAxNDQ4MzI2ODc1MjMyODUwNjAwNDUxNzc2MDkxMzAzMDQzNzE1JyAjLi4uCisgICAgICAgICAgICAnMTU3MTkxMjkyODI3NjE0MDQ2ODc2OTUwMjI1NzE0NzQzMTE4MjkxMDM0NzgwNDY2MzI1JyAjLi4uCisgICAgICAgICAgICAnMDg1MTQxMzQzNzM0NTY0OTE1MTkzNDI2OTk0NTg3MjA2NDMyNjk3MzM3MTE4MjExNTI3JyAjLi4uCisgICAgICAgICAgICAnMjc4OTY4NzMxMjk0NjM5MzUzMzU0Nzc0Nzg4NjAyNDY3Nzk1MTY3ODc1MTE3NDgxNjYwJyAjLi4uCisgICAgICAgICAgICAnNDczODc5MTI1Njg1MzY3NTY5MDU0MzY2MzI4Mzc4MjIxNTg2NjgyNWUtMTE4MCcsCisKKyAgICAgICAgICAgICMgZXhlcmNpc2UgZXhpdCBjb25kaXRpb25zIGluIGJpZ2NvbXAgY29tcGFyaXNvbiBsb29wCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4OGUyJywKKyAgICAgICAgICAgICcyNjAyMTI5Mjk4NDA0OTYzMDgzODMzODUzNDc5MTEzNTc3MjUzMTA1OTM5OTk1Njg4OTZlMCcsCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4ODk2MDFlLTInLAorICAgICAgICAgICAgJzI2MDIxMjkyOTg0MDQ5NjMwODM4MzM4NTM0NzkxMTM1NzcyNTMxMDU5Mzk5OTU2ODg5NWUwJywKKyAgICAgICAgICAgICcyNjAyMTI5Mjk4NDA0OTYzMDgzODMzODUzNDc5MTEzNTc3MjUzMTA1OTM5OTk1Njg4OTdlMCcsCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4OTk2ZTAnLAorICAgICAgICAgICAgJzI2MDIxMjkyOTg0MDQ5NjMwODM4MzM4NTM0NzkxMTM1NzcyNTMxMDU5Mzk5OTU2ODg2NmUwJywKKyAgICAgICAgICAgICMgMioqNTMKKyAgICAgICAgICAgICc5MDA3MTk5MjU0NzQwOTkyLjAwJywKKyAgICAgICAgICAgICMgMioqMTAyNCAtIDIqKjk3MDogIGV4YWN0IG92ZXJmbG93IGJvdW5kYXJ5LiAgQWxsIHZhbHVlcworICAgICAgICAgICAgIyBzbWFsbGVyIHRoYW4gdGhpcyBzaG91bGQgcm91bmQgdG8gc29tZXRoaW5nIGZpbml0ZTsgIGFueSB2YWx1ZQorICAgICAgICAgICAgIyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBvbmUgb3ZlcmZsb3dzLgorICAgICAgICAgICAgJzE3OTc2OTMxMzQ4NjIzMTU4MDc5MzcyODk3MTQwNTMwMzQxNTA3OTkzNDEzMjcxMDAzNycgIy4uLgorICAgICAgICAgICAgJzgyNjkzNjE3Mzc3ODk4MDQ0NDk2ODI5Mjc2NDc1MDk0NjY0OTAxNzk3NzU4NzIwNzA5NicgIy4uLgorICAgICAgICAgICAgJzMzMDI4NjQxNjY5Mjg4NzkxMDk0NjU1NTU0Nzg1MTk0MDQwMjYzMDY1NzQ4ODY3MTUwNScgIy4uLgorICAgICAgICAgICAgJzgyMDY4MTkwODkwMjAwMDcwODM4MzY3NjI3Mzg1NDg0NTgxNzcxMTUzMTc2NDQ3NTczMCcgIy4uLgorICAgICAgICAgICAgJzI3MDA2OTg1NTU3MTM2Njk1OTYyMjg0MjkxNDgxOTg2MDgzNDkzNjQ3NTI5MjcxOTA3NCcgIy4uLgorICAgICAgICAgICAgJzE2ODQ0NDM2NTUxMDcwNDM0MjcxMTU1OTY5OTUwODA5MzA0Mjg4MDE3NzkwNDE3NDQ5Nzc5MicsCisgICAgICAgICAgICAjIDIqKjEwMjQgLSAyKio5NzAgLSB0aW55CisgICAgICAgICAgICAnMTc5NzY5MzEzNDg2MjMxNTgwNzkzNzI4OTcxNDA1MzAzNDE1MDc5OTM0MTMyNzEwMDM3JyAjLi4uCisgICAgICAgICAgICAnODI2OTM2MTczNzc4OTgwNDQ0OTY4MjkyNzY0NzUwOTQ2NjQ5MDE3OTc3NTg3MjA3MDk2JyAjLi4uCisgICAgICAgICAgICAnMzMwMjg2NDE2NjkyODg3OTEwOTQ2NTU1NTQ3ODUxOTQwNDAyNjMwNjU3NDg4NjcxNTA1JyAjLi4uCisgICAgICAgICAgICAnODIwNjgxOTA4OTAyMDAwNzA4MzgzNjc2MjczODU0ODQ1ODE3NzExNTMxNzY0NDc1NzMwJyAjLi4uCisgICAgICAgICAgICAnMjcwMDY5ODU1NTcxMzY2OTU5NjIyODQyOTE0ODE5ODYwODM0OTM2NDc1MjkyNzE5MDc0JyAjLi4uCisgICAgICAgICAgICAnMTY4NDQ0MzY1NTEwNzA0MzQyNzExNTU5Njk5NTA4MDkzMDQyODgwMTc3OTA0MTc0NDk3NzkxLjk5OScsCisgICAgICAgICAgICAjIDIqKjEwMjQgLSAyKio5NzAgKyB0aW55CisgICAgICAgICAgICAnMTc5NzY5MzEzNDg2MjMxNTgwNzkzNzI4OTcxNDA1MzAzNDE1MDc5OTM0MTMyNzEwMDM3JyAjLi4uCisgICAgICAgICAgICAnODI2OTM2MTczNzc4OTgwNDQ0OTY4MjkyNzY0NzUwOTQ2NjQ5MDE3OTc3NTg3MjA3MDk2JyAjLi4uCisgICAgICAgICAgICAnMzMwMjg2NDE2NjkyODg3OTEwOTQ2NTU1NTQ3ODUxOTQwNDAyNjMwNjU3NDg4NjcxNTA1JyAjLi4uCisgICAgICAgICAgICAnODIwNjgxOTA4OTAyMDAwNzA4MzgzNjc2MjczODU0ODQ1ODE3NzExNTMxNzY0NDc1NzMwJyAjLi4uCisgICAgICAgICAgICAnMjcwMDY5ODU1NTcxMzY2OTU5NjIyODQyOTE0ODE5ODYwODM0OTM2NDc1MjkyNzE5MDc0JyAjLi4uCisgICAgICAgICAgICAnMTY4NDQ0MzY1NTEwNzA0MzQyNzExNTU5Njk5NTA4MDkzMDQyODgwMTc3OTA0MTc0NDk3NzkyLjAwMScsCisgICAgICAgICAgICAjIDEgLSAyKiotNTQsICstdGlueQorICAgICAgICAgICAgJzk5OTk5OTk5OTk5OTk5OTk0NDQ4ODg0ODc2ODc0MjE3Mjk3ODgxODQxNjU5NTQ1ODk4NDM3NWUtNTQnLAorICAgICAgICAgICAgJzk5OTk5OTk5OTk5OTk5OTk0NDQ4ODg0ODc2ODc0MjE3Mjk3ODgxODQxNjU5NTQ1ODk4NDM3NDk5OTk5OTllLTU0JywKKyAgICAgICAgICAgICc5OTk5OTk5OTk5OTk5OTk5NDQ0ODg4NDg3Njg3NDIxNzI5Nzg4MTg0MTY1OTU0NTg5ODQzNzUwMDAwMDAxZS01NCcsCisgICAgICAgICAgICBdCisgICAgICAgIGZvciBzIGluIHRlc3Rfc3RyaW5nczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cnRvZFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2MTNmNwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQpAQCAtMCwwICsxLDU4MSBAQAoraW1wb3J0IG9zCitpbXBvcnQgYXJyYXkKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IGluc3BlY3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChjaGVja193YXJuaW5ncywgY2hlY2tfcHkza193YXJuaW5ncykKKworaW1wb3J0IHN5cworSVNCSUdFTkRJQU4gPSBzeXMuYnl0ZW9yZGVyID09ICJiaWciCitJUzMyQklUID0gc3lzLm1heHNpemUgPT0gMHg3ZmZmZmZmZgorCitpbnRlZ2VyX2NvZGVzID0gJ2InLCAnQicsICdoJywgJ0gnLCAnaScsICdJJywgJ2wnLCAnTCcsICdxJywgJ1EnCisKK3Rlc3Rtb2RfZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KF9fZmlsZV9fKVswXSArICcucHknCisjIE5hdGl2ZSAncScgcGFja2luZyBpc24ndCBhdmFpbGFibGUgb24gc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgdGhlIEMKKyMgbG9uZyBsb25nIHR5cGUuCit0cnk6CisgICAgc3RydWN0LnBhY2soJ3EnLCA1KQorZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICBIQVZFX0xPTkdfTE9ORyA9IEZhbHNlCitlbHNlOgorICAgIEhBVkVfTE9OR19MT05HID0gVHJ1ZQorCitkZWYgc3RyaW5nX3JldmVyc2Uocyk6CisgICAgcmV0dXJuICIiLmpvaW4ocmV2ZXJzZWQocykpCisKK2RlZiBiaWdlbmRpYW5fdG9fbmF0aXZlKHZhbHVlKToKKyAgICBpZiBJU0JJR0VORElBTjoKKyAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHN0cmluZ19yZXZlcnNlKHZhbHVlKQorCitjbGFzcyBTdHJ1Y3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja19mbG9hdF9jb2VyY2Uoc2VsZiwgZm9ybWF0LCBudW1iZXIpOgorICAgICAgICAjIFNGIGJ1ZyAxNTMwNTU5LiBzdHJ1Y3QucGFjayByYWlzZXMgVHlwZUVycm9yIHdoZXJlIGl0IHVzZWQKKyAgICAgICAgIyB0byBjb252ZXJ0LgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiLippbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKSBhcyB3OgorICAgICAgICAgICAgZ290ID0gc3RydWN0LnBhY2soZm9ybWF0LCBudW1iZXIpCisgICAgICAgIGxpbmVubyA9IGluc3BlY3QuY3VycmVudGZyYW1lKCkuZl9saW5lbm8gLSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5maWxlbmFtZSwgdGVzdG1vZF9maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmxpbmVubywgbGluZW5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMSkKKyAgICAgICAgZXhwZWN0ZWQgPSBzdHJ1Y3QucGFjayhmb3JtYXQsIGludChudW1iZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pc2JpZ2VuZGlhbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc3RydWN0LnBhY2soJz1pJywgMSlbMF0gPT0gY2hyKDApKSwgSVNCSUdFTkRJQU4pCisKKyAgICBkZWYgdGVzdF9jb25zaXN0ZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QuY2FsY3NpemUsICdaJykKKworICAgICAgICBzeiA9IHN0cnVjdC5jYWxjc2l6ZSgnaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ogKiAzLCBzdHJ1Y3QuY2FsY3NpemUoJ2lpaScpKQorCisgICAgICAgIGZtdCA9ICdjYnh4eHh4eGhoaGhpaWxsZmZkPycKKyAgICAgICAgZm10MyA9ICczYzNiMTh4MTJoNmk2bDZmM2QzPycKKyAgICAgICAgc3ogPSBzdHJ1Y3QuY2FsY3NpemUoZm10KQorICAgICAgICBzejMgPSBzdHJ1Y3QuY2FsY3NpemUoZm10MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeiAqIDMsIHN6MykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnaWlpJywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgJ2knLCAzLCAzLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzdHJ1Y3QucGFjaywgJ2knLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwgc3RydWN0LnBhY2ssICdQJywgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnVucGFjaywgJ2QnLCAnZmxhcCcpCisgICAgICAgIHMgPSBzdHJ1Y3QucGFjaygnaWknLCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC51bnBhY2ssICdpaWknLCBzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC51bnBhY2ssICdpJywgcykKKworICAgIGRlZiB0ZXN0X3RyYW5zaXRpdmVuZXNzKHNlbGYpOgorICAgICAgICBjID0gJ2EnCisgICAgICAgIGIgPSAxCisgICAgICAgIGggPSAyNTUKKyAgICAgICAgaSA9IDY1NTM1CisgICAgICAgIGwgPSA2NTUzNgorICAgICAgICBmID0gMy4xNDE1CisgICAgICAgIGQgPSAzLjE0MTUKKyAgICAgICAgdCA9IFRydWUKKworICAgICAgICBmb3IgcHJlZml4IGluICgnJywgJ0AnLCAnPCcsICc+JywgJz0nLCAnIScpOgorICAgICAgICAgICAgZm9yIGZvcm1hdCBpbiAoJ3hjYmhpbGZkPycsICd4Y0JISUxmZD8nKToKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBwcmVmaXggKyBmb3JtYXQKKyAgICAgICAgICAgICAgICBzID0gc3RydWN0LnBhY2soZm9ybWF0LCBjLCBiLCBoLCBpLCBsLCBmLCBkLCB0KQorICAgICAgICAgICAgICAgIGNwLCBicCwgaHAsIGlwLCBscCwgZnAsIGRwLCB0cCA9IHN0cnVjdC51bnBhY2soZm9ybWF0LCBzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3AsIGMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChicCwgYikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhwLCBoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXAsIGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChscCwgbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgxMDAgKiBmcCksIGludCgxMDAgKiBmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgxMDAgKiBkcCksIGludCgxMDAgKiBkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRwLCB0KQorCisgICAgZGVmIHRlc3RfbmV3X2ZlYXR1cmVzKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc29tZSBvZiB0aGUgbmV3IGZlYXR1cmVzIGluIGRldGFpbAorICAgICAgICAjIChmb3JtYXQsIGFyZ3VtZW50LCBiaWctZW5kaWFuIHJlc3VsdCwgbGl0dGxlLWVuZGlhbiByZXN1bHQsIGFzeW1tZXRyaWMpCisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKCdjJywgJ2EnLCAnYScsICdhJywgMCksCisgICAgICAgICAgICAoJ3hjJywgJ2EnLCAnXDBhJywgJ1wwYScsIDApLAorICAgICAgICAgICAgKCdjeCcsICdhJywgJ2FcMCcsICdhXDAnLCAwKSwKKyAgICAgICAgICAgICgncycsICdhJywgJ2EnLCAnYScsIDApLAorICAgICAgICAgICAgKCcwcycsICdoZWxsb3dvcmxkJywgJycsICcnLCAxKSwKKyAgICAgICAgICAgICgnMXMnLCAnaGVsbG93b3JsZCcsICdoJywgJ2gnLCAxKSwKKyAgICAgICAgICAgICgnOXMnLCAnaGVsbG93b3JsZCcsICdoZWxsb3dvcmwnLCAnaGVsbG93b3JsJywgMSksCisgICAgICAgICAgICAoJzEwcycsICdoZWxsb3dvcmxkJywgJ2hlbGxvd29ybGQnLCAnaGVsbG93b3JsZCcsIDApLAorICAgICAgICAgICAgKCcxMXMnLCAnaGVsbG93b3JsZCcsICdoZWxsb3dvcmxkXDAnLCAnaGVsbG93b3JsZFwwJywgMSksCisgICAgICAgICAgICAoJzIwcycsICdoZWxsb3dvcmxkJywgJ2hlbGxvd29ybGQnKzEwKidcMCcsICdoZWxsb3dvcmxkJysxMConXDAnLCAxKSwKKyAgICAgICAgICAgICgnYicsIDcsICdcNycsICdcNycsIDApLAorICAgICAgICAgICAgKCdiJywgLTcsICdcMzcxJywgJ1wzNzEnLCAwKSwKKyAgICAgICAgICAgICgnQicsIDcsICdcNycsICdcNycsIDApLAorICAgICAgICAgICAgKCdCJywgMjQ5LCAnXDM3MScsICdcMzcxJywgMCksCisgICAgICAgICAgICAoJ2gnLCA3MDAsICdcMDAyXDI3NCcsICdcMjc0XDAwMicsIDApLAorICAgICAgICAgICAgKCdoJywgLTcwMCwgJ1wzNzVEJywgJ0RcMzc1JywgMCksCisgICAgICAgICAgICAoJ0gnLCA3MDAsICdcMDAyXDI3NCcsICdcMjc0XDAwMicsIDApLAorICAgICAgICAgICAgKCdIJywgMHgxMDAwMC03MDAsICdcMzc1RCcsICdEXDM3NScsIDApLAorICAgICAgICAgICAgKCdpJywgNzAwMDAwMDAsICdcMDA0LFwwMzVcMjAwJywgJ1wyMDBcMDM1LFwwMDQnLCAwKSwKKyAgICAgICAgICAgICgnaScsIC03MDAwMDAwMCwgJ1wzNzNcMzIzXDM0MlwyMDAnLCAnXDIwMFwzNDJcMzIzXDM3MycsIDApLAorICAgICAgICAgICAgKCdJJywgNzAwMDAwMDBMLCAnXDAwNCxcMDM1XDIwMCcsICdcMjAwXDAzNSxcMDA0JywgMCksCisgICAgICAgICAgICAoJ0knLCAweDEwMDAwMDAwMEwtNzAwMDAwMDAsICdcMzczXDMyM1wzNDJcMjAwJywgJ1wyMDBcMzQyXDMyM1wzNzMnLCAwKSwKKyAgICAgICAgICAgICgnbCcsIDcwMDAwMDAwLCAnXDAwNCxcMDM1XDIwMCcsICdcMjAwXDAzNSxcMDA0JywgMCksCisgICAgICAgICAgICAoJ2wnLCAtNzAwMDAwMDAsICdcMzczXDMyM1wzNDJcMjAwJywgJ1wyMDBcMzQyXDMyM1wzNzMnLCAwKSwKKyAgICAgICAgICAgICgnTCcsIDcwMDAwMDAwTCwgJ1wwMDQsXDAzNVwyMDAnLCAnXDIwMFwwMzUsXDAwNCcsIDApLAorICAgICAgICAgICAgKCdMJywgMHgxMDAwMDAwMDBMLTcwMDAwMDAwLCAnXDM3M1wzMjNcMzQyXDIwMCcsICdcMjAwXDM0MlwzMjNcMzczJywgMCksCisgICAgICAgICAgICAoJ2YnLCAyLjAsICdAXDAwMFwwMDBcMDAwJywgJ1wwMDBcMDAwXDAwMEAnLCAwKSwKKyAgICAgICAgICAgICgnZCcsIDIuMCwgJ0BcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ1wwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBAJywgMCksCisgICAgICAgICAgICAoJ2YnLCAtMi4wLCAnXDMwMFwwMDBcMDAwXDAwMCcsICdcMDAwXDAwMFwwMDBcMzAwJywgMCksCisgICAgICAgICAgICAoJ2QnLCAtMi4wLCAnXDMwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAnXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwzMDAnLCAwKSwKKyAgICAgICAgICAgICAgICAoJz8nLCAwLCAnXDAnLCAnXDAnLCAwKSwKKyAgICAgICAgICAgICAgICAoJz8nLCAzLCAnXDEnLCAnXDEnLCAxKSwKKyAgICAgICAgICAgICAgICAoJz8nLCBUcnVlLCAnXDEnLCAnXDEnLCAwKSwKKyAgICAgICAgICAgICAgICAoJz8nLCBbXSwgJ1wwJywgJ1wwJywgMSksCisgICAgICAgICAgICAgICAgKCc/JywgKDEsKSwgJ1wxJywgJ1wxJywgMSksCisgICAgICAgIF0KKworICAgICAgICBmb3IgZm10LCBhcmcsIGJpZywgbGlsLCBhc3kgaW4gdGVzdHM6CisgICAgICAgICAgICBmb3IgKHhmbXQsIGV4cCkgaW4gWygnPicrZm10LCBiaWcpLCAoJyEnK2ZtdCwgYmlnKSwgKCc8JytmbXQsIGxpbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPScrZm10LCBJU0JJR0VORElBTiBhbmQgYmlnIG9yIGxpbCldOgorICAgICAgICAgICAgICAgIHJlcyA9IHN0cnVjdC5wYWNrKHhmbXQsIGFyZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgZXhwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RydWN0LmNhbGNzaXplKHhmbXQpLCBsZW4ocmVzKSkKKyAgICAgICAgICAgICAgICByZXYgPSBzdHJ1Y3QudW5wYWNrKHhmbXQsIHJlcylbMF0KKyAgICAgICAgICAgICAgICBpZiByZXYgIT0gYXJnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5KQorCisgICAgZGVmIHRlc3RfY2FsY3NpemUoc2VsZik6CisgICAgICAgIGV4cGVjdGVkX3NpemUgPSB7CisgICAgICAgICAgICAnYic6IDEsICdCJzogMSwKKyAgICAgICAgICAgICdoJzogMiwgJ0gnOiAyLAorICAgICAgICAgICAgJ2knOiA0LCAnSSc6IDQsCisgICAgICAgICAgICAnbCc6IDQsICdMJzogNCwKKyAgICAgICAgICAgICdxJzogOCwgJ1EnOiA4LAorICAgICAgICAgICAgfQorCisgICAgICAgICMgc3RhbmRhcmQgaW50ZWdlciBzaXplcworICAgICAgICBmb3IgY29kZSBpbiBpbnRlZ2VyX2NvZGVzOgorICAgICAgICAgICAgZm9yIGJ5dGVvcmRlciBpbiAoJz0nLCAnPCcsICc+JywgJyEnKToKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBieXRlb3JkZXIrY29kZQorICAgICAgICAgICAgICAgIHNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoZm9ybWF0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgZXhwZWN0ZWRfc2l6ZVtjb2RlXSkKKworICAgICAgICAjIG5hdGl2ZSBpbnRlZ2VyIHNpemVzLCBleGNlcHQgJ3EnIGFuZCAnUScKKyAgICAgICAgZm9yIGZvcm1hdF9wYWlyIGluICgnYkInLCAnaEgnLCAnaUknLCAnbEwnKToKKyAgICAgICAgICAgIGZvciBieXRlb3JkZXIgaW4gWycnLCAnQCddOgorICAgICAgICAgICAgICAgIHNpZ25lZF9zaXplID0gc3RydWN0LmNhbGNzaXplKGJ5dGVvcmRlciArIGZvcm1hdF9wYWlyWzBdKQorICAgICAgICAgICAgICAgIHVuc2lnbmVkX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoYnl0ZW9yZGVyICsgZm9ybWF0X3BhaXJbMV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduZWRfc2l6ZSwgdW5zaWduZWRfc2l6ZSkKKworICAgICAgICAjIGJvdW5kcyBmb3IgbmF0aXZlIGludGVnZXIgc2l6ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ1Y3QuY2FsY3NpemUoJ2InKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMiwgc3RydWN0LmNhbGNzaXplKCdoJykpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDQsIHN0cnVjdC5jYWxjc2l6ZSgnbCcpKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzdHJ1Y3QuY2FsY3NpemUoJ2gnKSwgc3RydWN0LmNhbGNzaXplKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHN0cnVjdC5jYWxjc2l6ZSgnaScpLCBzdHJ1Y3QuY2FsY3NpemUoJ2wnKSkKKworICAgICAgICAjIHRlc3RzIGZvciBuYXRpdmUgJ3EnIGFuZCAnUScgd2hlbiBhcHBsaWNhYmxlCisgICAgICAgIGlmIEhBVkVfTE9OR19MT05HOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ1Y3QuY2FsY3NpemUoJ3EnKSwgc3RydWN0LmNhbGNzaXplKCdRJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCg4LCBzdHJ1Y3QuY2FsY3NpemUoJ3EnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHN0cnVjdC5jYWxjc2l6ZSgnbCcpLCBzdHJ1Y3QuY2FsY3NpemUoJ3EnKSkKKworICAgIGRlZiB0ZXN0X2ludGVnZXJzKHNlbGYpOgorICAgICAgICAjIEludGVnZXIgdGVzdHMgKGJCaEhpSWxMcVEpLgorICAgICAgICBpbXBvcnQgYmluYXNjaWkKKworICAgICAgICBjbGFzcyBJbnRUZXN0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvcm1hdCk6CisgICAgICAgICAgICAgICAgc3VwZXIoSW50VGVzdGVyLCBzZWxmKS5fX2luaXRfXyhtZXRob2ROYW1lPSd0ZXN0X29uZScpCisgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQgPSBmb3JtYXQKKyAgICAgICAgICAgICAgICBzZWxmLmNvZGUgPSBmb3JtYXRbLTFdCisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3Rpb24gPSBmb3JtYXRbOi0xXQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRpcmVjdGlvbiBpbiAoJycsICdAJywgJz0nLCAnPCcsICc+JywgJyEnKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5yZWNvZ25pemVkIHBhY2tpbmcgZGlyZWN0aW9uOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlyZWN0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYnl0ZXNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoZm9ybWF0KQorICAgICAgICAgICAgICAgIHNlbGYuYml0c2l6ZSA9IHNlbGYuYnl0ZXNpemUgKiA4CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb2RlIGluIHR1cGxlKCdiaGlscScpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNpZ25lZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5taW5fdmFsdWUgPSAtKDJMKiooc2VsZi5iaXRzaXplLTEpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1heF92YWx1ZSA9IDJMKiooc2VsZi5iaXRzaXplLTEpIC0gMQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5jb2RlIGluIHR1cGxlKCdCSElMUScpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNpZ25lZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWluX3ZhbHVlID0gMAorICAgICAgICAgICAgICAgICAgICBzZWxmLm1heF92YWx1ZSA9IDJMKipzZWxmLmJpdHNpemUgLSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5yZWNvZ25pemVkIGZvcm1hdCBjb2RlOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29kZSkKKworICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYsIHgsIHBhY2s9c3RydWN0LnBhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5wYWNrPXN0cnVjdC51bnBhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5oZXhsaWZ5PWJpbmFzY2lpLnVuaGV4bGlmeSk6CisKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBzZWxmLmZvcm1hdAorICAgICAgICAgICAgICAgIGlmIHNlbGYubWluX3ZhbHVlIDw9IHggPD0gc2VsZi5tYXhfdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbG9uZyh4KQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNpZ25lZCBhbmQgeCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCArPSAxTCA8PCBzZWxmLmJpdHNpemUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZXhwZWN0ZWQsIDApCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gJyV4JyAlIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihleHBlY3RlZCkgJiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAiMCIgKyBleHBlY3RlZAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHVuaGV4bGlmeShleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoIlx4MDAiICogKHNlbGYuYnl0ZXNpemUgLSBsZW4oZXhwZWN0ZWQpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kaXJlY3Rpb24gPT0gJzwnIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGlvbiBpbiAoJycsICdAJywgJz0nKSBhbmQgbm90IElTQklHRU5ESUFOKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gc3RyaW5nX3JldmVyc2UoZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV4cGVjdGVkKSwgc2VsZi5ieXRlc2l6ZSkKKworICAgICAgICAgICAgICAgICAgICAjIFBhY2sgd29yaz8KKyAgICAgICAgICAgICAgICAgICAgZ290ID0gcGFjayhmb3JtYXQsIHgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICAgICAjIFVucGFjayB3b3JrPworICAgICAgICAgICAgICAgICAgICByZXRyaWV2ZWQgPSB1bnBhY2soZm9ybWF0LCBnb3QpWzBdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgcmV0cmlldmVkKQorCisgICAgICAgICAgICAgICAgICAgICMgQWRkaW5nIGFueSBieXRlIHNob3VsZCBjYXVzZSBhICJ0b28gYmlnIiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKHN0cnVjdC5lcnJvciwgVHlwZUVycm9yKSwgdW5wYWNrLCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdceDAxJyArIGdvdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIHggaXMgb3V0IG9mIHJhbmdlIC0tIHZlcmlmeSBwYWNrIHJlYWxpemVzIHRoYXQuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBWYWx1ZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrLCBmb3JtYXQsIHgpCisKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgZnJvbSByYW5kb20gaW1wb3J0IHJhbmRyYW5nZQorCisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYWxsIGludGVyZXN0aW5nIHBvd2VycyBvZiAyLgorICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGV4cCBpbiByYW5nZShzZWxmLmJpdHNpemUgKyAzKToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgxTCA8PCBleHApCisKKyAgICAgICAgICAgICAgICAjIEFkZCBzb21lIHJhbmRvbSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5iaXRzaXplKToKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gMEwKKyAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2Uoc2VsZi5ieXRlc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAodmFsIDw8IDgpIHwgcmFuZHJhbmdlKDI1NikKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWwpCisKKyAgICAgICAgICAgICAgICAjIFZhbHVlcyBhYnNvcmJlZCBmcm9tIG90aGVyIHRlc3RzCisgICAgICAgICAgICAgICAgdmFsdWVzLmV4dGVuZChbMzAwLCA3MDAwMDAsIHN5cy5tYXhpbnQqNF0pCisKKyAgICAgICAgICAgICAgICAjIFRyeSBhbGwgdGhvc2UsIGFuZCB0aGVpciBuZWdhdGlvbnMsIGFuZCArLTEgZnJvbQorICAgICAgICAgICAgICAgICMgdGhlbS4gIE5vdGUgdGhhdCB0aGlzIHRlc3RzIGFsbCBwb3dlci1vZi0yCisgICAgICAgICAgICAgICAgIyBib3VuZGFyaWVzIGluIHJhbmdlLCBhbmQgYSBmZXcgb3V0IG9mIHJhbmdlLCBwbHVzCisgICAgICAgICAgICAgICAgIyArLSgyKipuICstIDEpLgorICAgICAgICAgICAgICAgIGZvciBiYXNlIGluIHZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHZhbCBpbiAtYmFzZSwgYmFzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmNyIGluIC0xLCAwLCAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB2YWwgKyBpbmNyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X29uZShpbnQoeCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X29uZShsb25nKHgpKQorCisgICAgICAgICAgICAgICAgIyBTb21lIGVycm9yIGNhc2VzLgorICAgICAgICAgICAgICAgIGNsYXNzIE5vdEFuSW50TlMob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICAgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTcyOUwKKworICAgICAgICAgICAgICAgIGNsYXNzIE5vdEFuSW50T1M6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg1CisKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xNjNMCisKKyAgICAgICAgICAgICAgICAjIE9iamVjdHMgd2l0aCBhbiAnX19pbmRleF9fJyBtZXRob2Qgc2hvdWxkIGJlIGFsbG93ZWQKKyAgICAgICAgICAgICAgICAjIHRvIHBhY2sgYXMgaW50ZWdlcnMuICBUaGF0IGlzIGFzc3VtaW5nIHRoZSBpbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgICMgJ19faW5kZXhfXycgbWV0aG9kIHJldHVybnMgYW5kICdpbnQnIG9yICdsb25nJy4KKyAgICAgICAgICAgICAgICBjbGFzcyBJbmRleGFibGUob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKKworICAgICAgICAgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlCisKKyAgICAgICAgICAgICAgICAjIElmIHRoZSAnX19pbmRleF9fJyBtZXRob2QgcmFpc2VzIGEgdHlwZSBlcnJvciwgdGhlbgorICAgICAgICAgICAgICAgICMgJ19faW50X18nIHNob3VsZCBiZSB1c2VkIHdpdGggYSBkZXByZWNhdGlvbiB3YXJuaW5nLgorICAgICAgICAgICAgICAgIGNsYXNzIEJhZEluZGV4KG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKworICAgICAgICAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaywgc2VsZi5mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrLCBzZWxmLmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kcmFuZ2UpCisgICAgICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IG5vbi1pbnRlZ2VyIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjayhzZWxmLmZvcm1hdCwgMys0MmopCisKKyAgICAgICAgICAgICAgICAjIGFuIGF0dGVtcHQgdG8gY29udmVydCBhIG5vbi1pbnRlZ2VyICh3aXRoIGFuCisgICAgICAgICAgICAgICAgIyBpbXBsaWNpdCBjb252ZXJzaW9uIHZpYSBfX2ludF9fKSBzaG91bGQgc3VjY2VlZCwKKyAgICAgICAgICAgICAgICAjIHdpdGggYSBEZXByZWNhdGlvbldhcm5pbmcKKyAgICAgICAgICAgICAgICBmb3Igbm9uaW50IGluIE5vdEFuSW50TlMoKSwgTm90QW5JbnRPUygpLCBCYWRJbmRleCgpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiLippbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3Qgbm9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWludGVnZXIiLCBEZXByZWNhdGlvbldhcm5pbmcpKSBhcyB3OgorICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0gc3RydWN0LnBhY2soc2VsZi5mb3JtYXQsIG5vbmludCkKKyAgICAgICAgICAgICAgICAgICAgbGluZW5vID0gaW5zcGVjdC5jdXJyZW50ZnJhbWUoKS5mX2xpbmVubyAtIDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmZpbGVuYW1lLCB0ZXN0bW9kX2ZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcubGluZW5vLCBsaW5lbm8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHN0cnVjdC5wYWNrKHNlbGYuZm9ybWF0LCBpbnQobm9uaW50KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgbGVnaXRpbWF0ZSB2YWx1ZXMgZnJvbSAnX19pbmRleF9fJy4KKyAgICAgICAgICAgICAgICBmb3Igb2JqIGluIChJbmRleGFibGUoMCksIEluZGV4YWJsZSgxMCksIEluZGV4YWJsZSgxNyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhhYmxlKDQyKSwgSW5kZXhhYmxlKDEwMCksIEluZGV4YWJsZSgxMjcpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soZm9ybWF0LCBvYmopCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50ZWdlciBjb2RlIHBhY2sgZmFpbGVkIG9uIG9iamVjdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggJ19faW5kZXhfXycgbWV0aG9kIikKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGJvZ3VzIHZhbHVlcyBmcm9tICdfX2luZGV4X18nLgorICAgICAgICAgICAgICAgIGZvciBvYmogaW4gKEluZGV4YWJsZSgnYScpLCBJbmRleGFibGUodSdiJyksIEluZGV4YWJsZShOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleGFibGUoeydhJzogMX0pLCBJbmRleGFibGUoWzEsIDIsIDNdKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrLCBzZWxmLmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqKQorCisgICAgICAgIGJ5dGVvcmRlcnMgPSAnJywgJ0AnLCAnPScsICc8JywgJz4nLCAnIScKKyAgICAgICAgZm9yIGNvZGUgaW4gaW50ZWdlcl9jb2RlczoKKyAgICAgICAgICAgIGZvciBieXRlb3JkZXIgaW4gYnl0ZW9yZGVyczoKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZW9yZGVyIGluICgnJywgJ0AnKSBhbmQgY29kZSBpbiAoJ3EnLCAnUScpIGFuZAorICAgICAgICAgICAgICAgICAgICBub3QgSEFWRV9MT05HX0xPTkcpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvcm1hdCA9IGJ5dGVvcmRlcitjb2RlCisgICAgICAgICAgICAgICAgdCA9IEludFRlc3Rlcihmb3JtYXQpCisgICAgICAgICAgICAgICAgdC5ydW4oKQorCisgICAgZGVmIHRlc3RfcF9jb2RlKHNlbGYpOgorICAgICAgICAjIFRlc3QgcCAoIlBhc2NhbCBzdHJpbmciKSBjb2RlLgorICAgICAgICBmb3IgY29kZSwgaW5wdXQsIGV4cGVjdGVkLCBleHBlY3RlZGJhY2sgaW4gWworICAgICAgICAgICAgICAgICgncCcsJ2FiYycsICdceDAwJywgJycpLAorICAgICAgICAgICAgICAgICgnMXAnLCAnYWJjJywgJ1x4MDAnLCAnJyksCisgICAgICAgICAgICAgICAgKCcycCcsICdhYmMnLCAnXHgwMWEnLCAnYScpLAorICAgICAgICAgICAgICAgICgnM3AnLCAnYWJjJywgJ1x4MDJhYicsICdhYicpLAorICAgICAgICAgICAgICAgICgnNHAnLCAnYWJjJywgJ1x4MDNhYmMnLCAnYWJjJyksCisgICAgICAgICAgICAgICAgKCc1cCcsICdhYmMnLCAnXHgwM2FiY1x4MDAnLCAnYWJjJyksCisgICAgICAgICAgICAgICAgKCc2cCcsICdhYmMnLCAnXHgwM2FiY1x4MDBceDAwJywgJ2FiYycpLAorICAgICAgICAgICAgICAgICgnMTAwMHAnLCAneCcqMTAwMCwgJ1x4ZmYnICsgJ3gnKjk5OSwgJ3gnKjI1NSldOgorICAgICAgICAgICAgZ290ID0gc3RydWN0LnBhY2soY29kZSwgaW5wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisgICAgICAgICAgICAoZ290LCkgPSBzdHJ1Y3QudW5wYWNrKGNvZGUsIGdvdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZGJhY2spCisKKyAgICBkZWYgdGVzdF83MDU4MzYoc2VsZik6CisgICAgICAgICMgU0YgYnVnIDcwNTgzNi4gICI8ZiIgYW5kICI+ZiIgaGFkIGEgc2V2ZXJlIHJvdW5kaW5nIGJ1Zywgd2hlcmUgYSBjYXJyeQorICAgICAgICAjIGZyb20gdGhlIGxvdy1vcmRlciBkaXNjYXJkZWQgYml0cyBjb3VsZCBwcm9wYWdhdGUgaW50byB0aGUgZXhwb25lbnQKKyAgICAgICAgIyBmaWVsZCwgY2F1c2luZyB0aGUgcmVzdWx0IHRvIGJlIHdyb25nIGJ5IGEgZmFjdG9yIG9mIDIuCisgICAgICAgIGltcG9ydCBtYXRoCisKKyAgICAgICAgZm9yIGJhc2UgaW4gcmFuZ2UoMSwgMzMpOgorICAgICAgICAgICAgIyBzbWFsbGVyIDwtIGxhcmdlc3QgcmVwcmVzZW50YWJsZSBmbG9hdCBsZXNzIHRoYW4gYmFzZS4KKyAgICAgICAgICAgIGRlbHRhID0gMC41CisgICAgICAgICAgICB3aGlsZSBiYXNlIC0gZGVsdGEgLyAyLjAgIT0gYmFzZToKKyAgICAgICAgICAgICAgICBkZWx0YSAvPSAyLjAKKyAgICAgICAgICAgIHNtYWxsZXIgPSBiYXNlIC0gZGVsdGEKKyAgICAgICAgICAgICMgUGFja2luZyB0aGlzIHJvdW5kcyBhd2F5IGEgc29saWQgc3RyaW5nIG9mIHRyYWlsaW5nIDEgYml0cy4KKyAgICAgICAgICAgIHBhY2tlZCA9IHN0cnVjdC5wYWNrKCI8ZiIsIHNtYWxsZXIpCisgICAgICAgICAgICB1bnBhY2tlZCA9IHN0cnVjdC51bnBhY2soIjxmIiwgcGFja2VkKVswXQorICAgICAgICAgICAgIyBUaGlzIGZhaWxlZCBhdCBiYXNlID0gMiwgNCwgYW5kIDMyLCB3aXRoIHVucGFja2VkID0gMSwgMiwgYW5kCisgICAgICAgICAgICAjIDE2LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIHVucGFja2VkKQorICAgICAgICAgICAgYmlncGFja2VkID0gc3RydWN0LnBhY2soIj5mIiwgc21hbGxlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlncGFja2VkLCBzdHJpbmdfcmV2ZXJzZShwYWNrZWQpKQorICAgICAgICAgICAgdW5wYWNrZWQgPSBzdHJ1Y3QudW5wYWNrKCI+ZiIsIGJpZ3BhY2tlZClbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgdW5wYWNrZWQpCisKKyAgICAgICAgIyBMYXJnZXN0IGZpbml0ZSBJRUVFIHNpbmdsZS4KKyAgICAgICAgYmlnID0gKDEgPDwgMjQpIC0gMQorICAgICAgICBiaWcgPSBtYXRoLmxkZXhwKGJpZywgMTI3IC0gMjMpCisgICAgICAgIHBhY2tlZCA9IHN0cnVjdC5wYWNrKCI+ZiIsIGJpZykKKyAgICAgICAgdW5wYWNrZWQgPSBzdHJ1Y3QudW5wYWNrKCI+ZiIsIHBhY2tlZClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaWcsIHVucGFja2VkKQorCisgICAgICAgICMgVGhlIHNhbWUsIGJ1dCB0YWNrIG9uIGEgMSBiaXQgc28gaXQgcm91bmRzIHVwIHRvIGluZmluaXR5LgorICAgICAgICBiaWcgPSAoMSA8PCAyNSkgLSAxCisgICAgICAgIGJpZyA9IG1hdGgubGRleHAoYmlnLCAxMjcgLSAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc3RydWN0LnBhY2ssICI+ZiIsIGJpZykKKworICAgIGRlZiB0ZXN0XzE1MzA1NTkoc2VsZik6CisgICAgICAgICMgU0YgYnVnIDE1MzA1NTkuIHN0cnVjdC5wYWNrIHJhaXNlcyBUeXBlRXJyb3Igd2hlcmUgaXQgdXNlZCB0byBjb252ZXJ0LgorICAgICAgICBmb3IgZW5kaWFuIGluICgnJywgJz4nLCAnPCcpOgorICAgICAgICAgICAgZm9yIGZtdCBpbiBpbnRlZ2VyX2NvZGVzOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmxvYXRfY29lcmNlKGVuZGlhbiArIGZtdCwgMS4wKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmxvYXRfY29lcmNlKGVuZGlhbiArIGZtdCwgMS41KQorCisgICAgZGVmIHRlc3RfdW5wYWNrX2Zyb20oc2VsZiwgY2xzPXN0cik6CisgICAgICAgIGRhdGEgPSBjbHMoJ2FiY2QwMTIzNCcpCisgICAgICAgIGZtdCA9ICc0cycKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoZm10KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy51bnBhY2tfZnJvbShkYXRhKSwgKCdhYmNkJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC51bnBhY2tfZnJvbShmbXQsIGRhdGEpLCAoJ2FiY2QnLCkpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSg2KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy51bnBhY2tfZnJvbShkYXRhLCBpKSwgKGRhdGFbaTppKzRdLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC51bnBhY2tfZnJvbShmbXQsIGRhdGEsIGkpLCAoZGF0YVtpOmkrNF0sKSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDYsIGxlbihkYXRhKSArIDEpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzLnVucGFja19mcm9tLCBkYXRhLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QudW5wYWNrX2Zyb20sIGZtdCwgZGF0YSwgaSkKKworICAgIGRlZiB0ZXN0X3BhY2tfaW50byhzZWxmKToKKyAgICAgICAgdGVzdF9zdHJpbmcgPSAnUmV5a2phdmlrIHJvY2tzLCBlb3chJworICAgICAgICB3cml0YWJsZV9idWYgPSBhcnJheS5hcnJheSgnYycsICcgJyoxMDApCisgICAgICAgIGZtdCA9ICcyMXMnCisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KGZtdCkKKworICAgICAgICAjIFRlc3Qgd2l0aG91dCBvZmZzZXQKKyAgICAgICAgcy5wYWNrX2ludG8od3JpdGFibGVfYnVmLCAwLCB0ZXN0X3N0cmluZykKKyAgICAgICAgZnJvbV9idWYgPSB3cml0YWJsZV9idWYudG9zdHJpbmcoKVs6bGVuKHRlc3Rfc3RyaW5nKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tX2J1ZiwgdGVzdF9zdHJpbmcpCisKKyAgICAgICAgIyBUZXN0IHdpdGggb2Zmc2V0LgorICAgICAgICBzLnBhY2tfaW50byh3cml0YWJsZV9idWYsIDEwLCB0ZXN0X3N0cmluZykKKyAgICAgICAgZnJvbV9idWYgPSB3cml0YWJsZV9idWYudG9zdHJpbmcoKVs6bGVuKHRlc3Rfc3RyaW5nKSsxMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tX2J1ZiwgdGVzdF9zdHJpbmdbOjEwXSArIHRlc3Rfc3RyaW5nKQorCisgICAgICAgICMgR28gYmV5b25kIGJvdW5kYXJpZXMuCisgICAgICAgIHNtYWxsX2J1ZiA9IGFycmF5LmFycmF5KCdjJywgJyAnKjEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgc3RydWN0LmVycm9yKSwgcy5wYWNrX2ludG8sIHNtYWxsX2J1ZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzLnBhY2tfaW50bywgc21hbGxfYnVmLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0cmluZykKKworICAgICAgICAjIFRlc3QgYm9ndXMgb2Zmc2V0IChpc3N1ZSAzNjk0KQorICAgICAgICBzYiA9IHNtYWxsX2J1ZgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzdHJ1Y3QucGFja19pbnRvLCBiJycsIHNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKQorCisgICAgZGVmIHRlc3RfcGFja19pbnRvX2ZuKHNlbGYpOgorICAgICAgICB0ZXN0X3N0cmluZyA9ICdSZXlramF2aWsgcm9ja3MsIGVvdyEnCisgICAgICAgIHdyaXRhYmxlX2J1ZiA9IGFycmF5LmFycmF5KCdjJywgJyAnKjEwMCkKKyAgICAgICAgZm10ID0gJzIxcycKKyAgICAgICAgcGFja19pbnRvID0gbGFtYmRhICphcmdzOiBzdHJ1Y3QucGFja19pbnRvKGZtdCwgKmFyZ3MpCisKKyAgICAgICAgIyBUZXN0IHdpdGhvdXQgb2Zmc2V0LgorICAgICAgICBwYWNrX2ludG8od3JpdGFibGVfYnVmLCAwLCB0ZXN0X3N0cmluZykKKyAgICAgICAgZnJvbV9idWYgPSB3cml0YWJsZV9idWYudG9zdHJpbmcoKVs6bGVuKHRlc3Rfc3RyaW5nKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tX2J1ZiwgdGVzdF9zdHJpbmcpCisKKyAgICAgICAgIyBUZXN0IHdpdGggb2Zmc2V0LgorICAgICAgICBwYWNrX2ludG8od3JpdGFibGVfYnVmLCAxMCwgdGVzdF9zdHJpbmcpCisgICAgICAgIGZyb21fYnVmID0gd3JpdGFibGVfYnVmLnRvc3RyaW5nKClbOmxlbih0ZXN0X3N0cmluZykrMTBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJvbV9idWYsIHRlc3Rfc3RyaW5nWzoxMF0gKyB0ZXN0X3N0cmluZykKKworICAgICAgICAjIEdvIGJleW9uZCBib3VuZGFyaWVzLgorICAgICAgICBzbWFsbF9idWYgPSBhcnJheS5hcnJheSgnYycsICcgJyoxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksIHBhY2tfaW50bywgc21hbGxfYnVmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksIHBhY2tfaW50bywgc21hbGxfYnVmLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0cmluZykKKworICAgIGRlZiB0ZXN0X3VucGFja193aXRoX2J1ZmZlcihzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCBpbiAzLngiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgIyBTRiBidWcgMTU2Mzc1OTogc3RydWN0LnVucGFjayBkb2Vzbid0IHN1cHBvcnQgYnVmZmVyIHByb3RvY29sIG9iamVjdHMKKyAgICAgICAgICAgIGRhdGExID0gYXJyYXkuYXJyYXkoJ0InLCAnXHgxMlx4MzRceDU2XHg3OCcpCisgICAgICAgICAgICBkYXRhMiA9IGJ1ZmZlcignLi4uLi4uXHgxMlx4MzRceDU2XHg3OC4uLi4uLicsIDYsIDQpCisgICAgICAgICAgICBmb3IgZGF0YSBpbiBbZGF0YTEsIGRhdGEyXToKKyAgICAgICAgICAgICAgICB2YWx1ZSwgPSBzdHJ1Y3QudW5wYWNrKCc+SScsIGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgMHgxMjM0NTY3OCkKKworICAgICAgICAgICAgc2VsZi50ZXN0X3VucGFja19mcm9tKGNscz1idWZmZXIpCisKKyAgICBkZWYgdGVzdF91bnBhY2tfd2l0aF9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICAjIEJ1ZyAxMDIxMjogc3RydWN0LnVucGFjayBkb2Vzbid0IHN1cHBvcnQgbmV3IGJ1ZmZlciBwcm90b2NvbCBvYmplY3RzCisgICAgICAgIGRhdGExID0gbWVtb3J5dmlldygnXHgxMlx4MzRceDU2XHg3OCcpCisgICAgICAgIGZvciBkYXRhIGluIFtkYXRhMSxdOgorICAgICAgICAgICAgdmFsdWUsID0gc3RydWN0LnVucGFjaygnPkknLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgMHgxMjM0NTY3OCkKKyAgICAgICAgc2VsZi50ZXN0X3VucGFja19mcm9tKGNscz1tZW1vcnl2aWV3KQorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgY2xhc3MgRXhwbG9kaW5nQm9vbChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgZm9yIHByZWZpeCBpbiB0dXBsZSgiPD4hPSIpKygnJywpOgorICAgICAgICAgICAgZmFsc2UgPSAoKSwgW10sIFtdLCAnJywgMAorICAgICAgICAgICAgdHJ1ZSA9IFsxXSwgJ3Rlc3QnLCA1LCAtMSwgMHhmZmZmZmZmZkwrMSwgMHhmZmZmZmZmZi8vMgorCisgICAgICAgICAgICBmYWxzZUZvcm1hdCA9IHByZWZpeCArICc/JyAqIGxlbihmYWxzZSkKKyAgICAgICAgICAgIHBhY2tlZEZhbHNlID0gc3RydWN0LnBhY2soZmFsc2VGb3JtYXQsICpmYWxzZSkKKyAgICAgICAgICAgIHVucGFja2VkRmFsc2UgPSBzdHJ1Y3QudW5wYWNrKGZhbHNlRm9ybWF0LCBwYWNrZWRGYWxzZSkKKworICAgICAgICAgICAgdHJ1ZUZvcm1hdCA9IHByZWZpeCArICc/JyAqIGxlbih0cnVlKQorICAgICAgICAgICAgcGFja2VkVHJ1ZSA9IHN0cnVjdC5wYWNrKHRydWVGb3JtYXQsICp0cnVlKQorICAgICAgICAgICAgdW5wYWNrZWRUcnVlID0gc3RydWN0LnVucGFjayh0cnVlRm9ybWF0LCBwYWNrZWRUcnVlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cnVlKSwgbGVuKHVucGFja2VkVHJ1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmYWxzZSksIGxlbih1bnBhY2tlZEZhbHNlKSkKKworICAgICAgICAgICAgZm9yIHQgaW4gdW5wYWNrZWRGYWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQpCisgICAgICAgICAgICBmb3IgdCBpbiB1bnBhY2tlZFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCisKKyAgICAgICAgICAgIHBhY2tlZCA9IHN0cnVjdC5wYWNrKHByZWZpeCsnPycsIDEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhY2tlZCksIHN0cnVjdC5jYWxjc2l6ZShwcmVmaXgrJz8nKSkKKworICAgICAgICAgICAgaWYgbGVuKHBhY2tlZCkgIT0gMToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHByZWZpeCwgbXNnPSdlbmNvZGVkIGJvb2wgaXMgbm90IG9uZSBieXRlOiAlcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwYWNrZWQpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHN0cnVjdC5wYWNrLCBwcmVmaXggKyAnPycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBsb2RpbmdCb29sKCkpCisKKyAgICAgICAgZm9yIGMgaW4gW2InXHgwMScsIGInXHg3ZicsIGInXHhmZicsIGInXHgwZicsIGInXHhmMCddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnVjdC51bnBhY2soJz4/JywgYylbMF0pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJUzMyQklULCAiU3BlY2lmaWMgdG8gMzJiaXQgbWFjaGluZXMiKQorICAgIGRlZiB0ZXN0X2NyYXNoZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBzdHJ1Y3QucGFjaywgIjM1NzkxMzk0MWMiLCAiYSIpCisKKyAgICBkZWYgdGVzdF9jb3VudF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgaHVnZWNvdW50ID0gJ3t9YicuZm9ybWF0KHN5cy5tYXhzaXplKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LmNhbGNzaXplLCBodWdlY291bnQpCisKKyAgICAgICAgaHVnZWNvdW50MiA9ICd7fWJ7fUgnLmZvcm1hdChzeXMubWF4c2l6ZS8vMiwgc3lzLm1heHNpemUvLzIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LmNhbGNzaXplLCBodWdlY291bnQyKQorCisgICAgZGVmIGNoZWNrX3NpemVvZihzZWxmLCBmb3JtYXRfc3RyLCBudW1iZXJfb2ZfY29kZXMpOgorICAgICAgICAjIFRoZSBzaXplIG9mICdQeVN0cnVjdE9iamVjdCcKKyAgICAgICAgdG90YWxzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnNVAnKQorICAgICAgICAjIFRoZSBzaXplIHRha2VuIHVwIGJ5IHRoZSAnZm9ybWF0Y29kZScgZHluYW1pYyBhcnJheQorICAgICAgICB0b3RhbHNpemUgKz0gc3RydWN0LmNhbGNzaXplKCczUCcpICogKG51bWJlcl9vZl9jb2RlcyArIDEpCisgICAgICAgIHN1cHBvcnQuY2hlY2tfc2l6ZW9mKHNlbGYsIHN0cnVjdC5TdHJ1Y3QoZm9ybWF0X3N0ciksIHRvdGFsc2l6ZSkKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X19zaXplb2ZfXyhzZWxmKToKKyAgICAgICAgZm9yIGNvZGUgaW4gaW50ZWdlcl9jb2RlczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKGNvZGUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCdCSElMZmRzcFAnLCA5KQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignQicgKiAxMjM0LCAxMjM0KQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignZmQnLCAyKQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZigneHh4eHh4eHh4eHh4eHgnLCAwKQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTAwSCcsIDEwMCkKKyAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzE4N3MnLCAxKQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMjBwJywgMSkKKyAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzBzJywgMSkKKyAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzBjJywgMCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cnVjdFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RtZW1iZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYzU4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RtZW1iZXJzLnB5CkBAIC0wLDAgKzEsMTA4IEBACitmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgX3Rlc3Rfc3RydWN0bWVtYmVyc1R5cGUsIFwKKyAgICBDSEFSX01BWCwgQ0hBUl9NSU4sIFVDSEFSX01BWCwgXAorICAgIFNIUlRfTUFYLCBTSFJUX01JTiwgVVNIUlRfTUFYLCBcCisgICAgSU5UX01BWCwgSU5UX01JTiwgVUlOVF9NQVgsIFwKKyAgICBMT05HX01BWCwgTE9OR19NSU4sIFVMT05HX01BWCwgXAorICAgIExMT05HX01BWCwgTExPTkdfTUlOLCBVTExPTkdfTUFYCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKwordHM9X3Rlc3Rfc3RydWN0bWVtYmVyc1R5cGUoRmFsc2UsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDkuOTk5OTksIDEwLjEwMTAxMDEwMTAsICJoaSIpCisKK2NsYXNzIFJlYWRXcml0ZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgIHRzLlRfQk9PTCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0JPT0wsIFRydWUpCisgICAgICAgIHRzLlRfQk9PTCA9IEZhbHNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9CT09MLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCB0cywgJ1RfQk9PTCcsIDEpCisKKyAgICBkZWYgdGVzdF9ieXRlKHNlbGYpOgorICAgICAgICB0cy5UX0JZVEUgPSBDSEFSX01BWAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfQllURSwgQ0hBUl9NQVgpCisgICAgICAgIHRzLlRfQllURSA9IENIQVJfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9CWVRFLCBDSEFSX01JTikKKyAgICAgICAgdHMuVF9VQllURSA9IFVDSEFSX01BWAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUJZVEUsIFVDSEFSX01BWCkKKworICAgIGRlZiB0ZXN0X3Nob3J0KHNlbGYpOgorICAgICAgICB0cy5UX1NIT1JUID0gU0hSVF9NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1NIT1JULCBTSFJUX01BWCkKKyAgICAgICAgdHMuVF9TSE9SVCA9IFNIUlRfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9TSE9SVCwgU0hSVF9NSU4pCisgICAgICAgIHRzLlRfVVNIT1JUID0gVVNIUlRfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9VU0hPUlQsIFVTSFJUX01BWCkKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgdHMuVF9JTlQgPSBJTlRfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9JTlQsIElOVF9NQVgpCisgICAgICAgIHRzLlRfSU5UID0gSU5UX01JTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfSU5ULCBJTlRfTUlOKQorICAgICAgICB0cy5UX1VJTlQgPSBVSU5UX01BWAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUlOVCwgVUlOVF9NQVgpCisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICB0cy5UX0xPTkcgPSBMT05HX01BWAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfTE9ORywgTE9OR19NQVgpCisgICAgICAgIHRzLlRfTE9ORyA9IExPTkdfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9MT05HLCBMT05HX01JTikKKyAgICAgICAgdHMuVF9VTE9ORyA9IFVMT05HX01BWAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUxPTkcsIFVMT05HX01BWCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIodHMsICJUX0xPTkdMT05HIiksICJsb25nIGxvbmcgbm90IHByZXNlbnQiKQorICAgIGRlZiB0ZXN0X2xvbmdsb25nKHNlbGYpOgorICAgICAgICB0cy5UX0xPTkdMT05HID0gTExPTkdfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9MT05HTE9ORywgTExPTkdfTUFYKQorICAgICAgICB0cy5UX0xPTkdMT05HID0gTExPTkdfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9MT05HTE9ORywgTExPTkdfTUlOKQorCisgICAgICAgIHRzLlRfVUxPTkdMT05HID0gVUxMT05HX01BWAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUxPTkdMT05HLCBVTExPTkdfTUFYKQorCisgICAgICAgICMjIG1ha2Ugc3VyZSB0aGVzZSB3aWxsIGFjY2VwdCBhIHBsYWluIGludCBhcyB3ZWxsIGFzIGEgbG9uZworICAgICAgICB0cy5UX0xPTkdMT05HID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfTE9OR0xPTkcsIDMpCisgICAgICAgIHRzLlRfVUxPTkdMT05HID0gNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUxPTkdMT05HLCA0KQorCisgICAgZGVmIHRlc3RfaW5wbGFjZV9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9TVFJJTkdfSU5QTEFDRSwgImhpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCB0cywgIlRfU1RSSU5HX0lOUExBQ0UiLCAicyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVsYXR0ciwgdHMsICJUX1NUUklOR19JTlBMQUNFIikKKworCitjbGFzcyBUZXN0V2FybmluZ3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYnl0ZV9tYXgoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHRzLlRfQllURSA9IENIQVJfTUFYKzEKKworICAgIGRlZiB0ZXN0X2J5dGVfbWluKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CisgICAgICAgICAgICB0cy5UX0JZVEUgPSBDSEFSX01JTi0xCisKKyAgICBkZWYgdGVzdF91Ynl0ZV9tYXgoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHRzLlRfVUJZVEUgPSBVQ0hBUl9NQVgrMQorCisgICAgZGVmIHRlc3Rfc2hvcnRfbWF4KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CisgICAgICAgICAgICB0cy5UX1NIT1JUID0gU0hSVF9NQVgrMQorCisgICAgZGVmIHRlc3Rfc2hvcnRfbWluKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CisgICAgICAgICAgICB0cy5UX1NIT1JUID0gU0hSVF9NSU4tMQorCisgICAgZGVmIHRlc3RfdXNob3J0X21heChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSdW50aW1lV2FybmluZykpOgorICAgICAgICAgICAgdHMuVF9VU0hPUlQgPSBVU0hSVF9NQVgrMQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhMTJhYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQpAQCAtMCwwICsxLDEyMCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpbXBvcnQgdGltZQorCitjbGFzcyBTdHJ1Y3RTZXFUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3R1cGxlKHNlbGYpOgorICAgICAgICB0ID0gdGltZS5nbXRpbWUoKQorICAgICAgICBhc3R1cGxlID0gdHVwbGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odCksIGxlbihhc3R1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBhc3R1cGxlKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBzbGljaW5nIHdvcmtzIHRoZSBzYW1lIHdheTsgYXQgb25lIHBvaW50LCBzbGljaW5nIHRbaTpqXSB3aXRoCisgICAgICAgICMgMCA8IGkgPCBqIGNvdWxkIHByb2R1Y2UgTlVMTHMgaW4gdGhlIHJlc3VsdC4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKC1sZW4odCksIGxlbih0KSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbaTpdLCBhc3R1cGxlW2k6XSkKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZSgtbGVuKHQpLCBsZW4odCkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtpOmpdLCBhc3R1cGxlW2k6al0pCisKKyAgICAgICAgZm9yIGogaW4geHJhbmdlKC1sZW4odCksIGxlbih0KSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbOmpdLCBhc3R1cGxlWzpqXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB0Ll9fZ2V0aXRlbV9fLCAtbGVuKHQpLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHQuX19nZXRpdGVtX18sIGxlbih0KSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKC1sZW4odCksIGxlbih0KS0xKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtpXSwgYXN0dXBsZVtpXSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHQgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHQpKQorICAgICAgICB0ID0gdGltZS5nbXRpbWUoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgInRpbWUuc3RydWN0X3RpbWUodG1feWVhcj0xOTcwLCB0bV9tb249MSwgdG1fbWRheT0xLCB0bV9ob3VyPTAsICIKKyAgICAgICAgICAgICJ0bV9taW49MCwgdG1fc2VjPTAsIHRtX3dkYXk9MywgdG1feWRheT0xLCB0bV9pc2RzdD0wKSIpCisKKyAgICBkZWYgdGVzdF9jb25jYXQoc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICB0MiA9IHQxICsgdHVwbGUodDEpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4odDEpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDJbaV0sIHQyW2krbGVuKHQxKV0pCisKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICB0MiA9IDMgKiB0MQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHQxKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyW2ldLCB0MltpK2xlbih0MSldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MltpXSwgdDJbaSsyKmxlbih0MSldKQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICBmb3IgaXRlbSBpbiB0MToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaXRlbSwgdDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTQyLCB0MSkKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHR1cGxlKHQxKSkpCisKKyAgICBkZWYgdGVzdF9jbXAoc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICB0MiA9IHR5cGUodDEpKHQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAodDEgPCB0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAodDEgPiB0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAodDEgIT0gdDIpKQorCisgICAgZGVmIHRlc3RfZmllbGRzKHNlbGYpOgorICAgICAgICB0ID0gdGltZS5nbXRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgdC5uX2ZpZWxkcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm5fZmllbGRzLCB0Lm5fc2VxdWVuY2VfZmllbGRzK3Qubl91bm5hbWVkX2ZpZWxkcykKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICB0ID0gdGltZS5zdHJ1Y3RfdGltZQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsICIxMjMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsICIxMjMiLCBkaWN0PXt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsICIxMjM0NTY3ODkiLCBkaWN0PU5vbmUpCisKKyAgICAgICAgcyA9ICIxMjM0NTY3ODkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIuam9pbih0KHMpKSwgcykKKworICAgIGRlZiB0ZXN0X2V2aWx0dXBsZShzZWxmKToKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBEZXZpb3VzIGNvZGUgY291bGQgY3Jhc2ggc3RydWN0c2VxcycgY29udHJ1Y3RvcnMKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA5CisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCB0aW1lLnN0cnVjdF90aW1lLCBDKCkpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHQgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIHggPSB0Ll9fcmVkdWNlX18oKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBleHRlbmRlZCBzbGljaW5nIGJ5IGNvbXBhcmluZyB3aXRoIGxpc3Qgc2xpY2luZy4KKyAgICAgICAgdCA9IHRpbWUuZ210aW1lKCkKKyAgICAgICAgTCA9IGxpc3QodCkKKyAgICAgICAgaW5kaWNlcyA9ICgwLCBOb25lLCAxLCAzLCAxOSwgMzAwLCAtMSwgLTIsIC0zMSwgLTMwMCkKKyAgICAgICAgZm9yIHN0YXJ0IGluIGluZGljZXM6CisgICAgICAgICAgICBmb3Igc3RvcCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgICAgICMgU2tpcCBzdGVwIDAgKGludmFsaWQpCisgICAgICAgICAgICAgICAgZm9yIHN0ZXAgaW4gaW5kaWNlc1sxOl06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh0W3N0YXJ0OnN0b3A6c3RlcF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExbc3RhcnQ6c3RvcDpzdGVwXSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RydWN0U2VxVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg5ZDg0ZgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKQEAgLTAsMCArMSwxMzk3IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCByZQoraW1wb3J0IHN5c2NvbmZpZworCit0cnk6CisgICAgaW1wb3J0IHJlc291cmNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcmVzb3VyY2UgPSBOb25lCisKK21zd2luZG93cyA9IChzeXMucGxhdGZvcm0gPT0gIndpbjMyIikKKworIworIyBEZXBlbmRzIG9uIHRoZSBmb2xsb3dpbmcgZXh0ZXJuYWwgcHJvZ3JhbXM6IFB5dGhvbgorIworCitpZiBtc3dpbmRvd3M6CisgICAgU0VUQklOQVJZID0gKCdpbXBvcnQgbXN2Y3J0OyBtc3ZjcnQuc2V0bW9kZShzeXMuc3Rkb3V0LmZpbGVubygpLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3MuT19CSU5BUlkpOycpCitlbHNlOgorICAgIFNFVEJJTkFSWSA9ICcnCisKKwordHJ5OgorICAgIG1rc3RlbXAgPSB0ZW1wZmlsZS5ta3N0ZW1wCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgIyB0ZW1wZmlsZS5ta3N0ZW1wIGlzIG5vdCBhdmFpbGFibGUKKyAgICBkZWYgbWtzdGVtcCgpOgorICAgICAgICAiIiJSZXBsYWNlbWVudCBmb3IgbWtzdGVtcCwgY2FsbGluZyBta3RlbXAuIiIiCisgICAgICAgIGZuYW1lID0gdGVtcGZpbGUubWt0ZW1wKCkKKyAgICAgICAgcmV0dXJuIG9zLm9wZW4oZm5hbWUsIG9zLk9fUkRXUnxvcy5PX0NSRUFUKSwgZm5hbWUKKworCitjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB3ZSBoYXZlIHNvIHRoaXMgdGVzdAorICAgICAgICAjIGRvZXNuJ3QgY3Jhc2ggb24gc29tZSBidWlsZGJvdHMgKEFscGhhcyBpbiBwYXJ0aWN1bGFyKS4KKyAgICAgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3IgaW5zdCBpbiBzdWJwcm9jZXNzLl9hY3RpdmU6CisgICAgICAgICAgICBpbnN0LndhaXQoKQorICAgICAgICBzdWJwcm9jZXNzLl9jbGVhbnVwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWJwcm9jZXNzLl9hY3RpdmUsICJzdWJwcm9jZXNzLl9hY3RpdmUgbm90IGVtcHR5IikKKworICAgIGRlZiBhc3NlcnRTdGRlcnJFcXVhbChzZWxmLCBzdGRlcnIsIGV4cGVjdGVkLCBtc2c9Tm9uZSk6CisgICAgICAgICMgSW4gYSBkZWJ1ZyBidWlsZCwgc3R1ZmYgbGlrZSAiWzY1ODAgcmVmc10iIGlzIHByaW50ZWQgdG8gc3RkZXJyIGF0CisgICAgICAgICMgc2h1dGRvd24gdGltZS4gIFRoYXQgZnJ1c3RyYXRlcyB0ZXN0cyB0cnlpbmcgdG8gY2hlY2sgc3RkZXJyIHByb2R1Y2VkCisgICAgICAgICMgZnJvbSBhIHNwYXduZWQgUHl0aG9uIHByb2Nlc3MuCisgICAgICAgIGFjdHVhbCA9IHJlLnN1YihyIlxbXGQrIHJlZnNcXVxyP1xuPyQiLCAiIiwgc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykKKworCitjbGFzcyBQb3BlblRlc3RFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgUG9wZW5FeGVjdXRlQ2hpbGRSYWlzZXMoc3VicHJvY2Vzcy5Qb3Blbik6CisgICAgIiIiUG9wZW4gc3ViY2xhc3MgZm9yIHRlc3RpbmcgY2xlYW51cCBvZiBzdWJwcm9jZXNzLlBJUEUgZmlsZWhhbmRsZXMgd2hlbgorICAgIF9leGVjdXRlX2NoaWxkIGZhaWxzLgorICAgICIiIgorICAgIGRlZiBfZXhlY3V0ZV9jaGlsZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBQb3BlblRlc3RFeGNlcHRpb24oIkZvcmNlZCBFeGNlcHRpb24gZm9yIFRlc3QiKQorCisKK2NsYXNzIFByb2Nlc3NUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2FsbF9zZXEoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc2VxdWVuY2UgYXJndW1lbnQKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCA0NykKKworICAgIGRlZiB0ZXN0X2NoZWNrX2NhbGxfemVybyhzZWxmKToKKyAgICAgICAgIyBjaGVja19jYWxsKCkgZnVuY3Rpb24gd2l0aCB6ZXJvIHJldHVybiBjb2RlCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jaGVja19jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorCisgICAgZGVmIHRlc3RfY2hlY2tfY2FsbF9ub256ZXJvKHNlbGYpOgorICAgICAgICAjIGNoZWNrX2NhbGwoKSBmdW5jdGlvbiB3aXRoIG5vbi16ZXJvIHJldHVybiBjb2RlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpIGFzIGM6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24ucmV0dXJuY29kZSwgNDcpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXQoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgZnVuY3Rpb24gd2l0aCB6ZXJvIHJldHVybiBjb2RlCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInByaW50ICdCREZMJyJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCREZMJywgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X25vbnplcm8oc2VsZik6CisgICAgICAgICMgY2hlY2tfY2FsbCgpIGZ1bmN0aW9uIHdpdGggbm9uLXplcm8gcmV0dXJuIGNvZGUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg1KSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLnJldHVybmNvZGUsIDUpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkZXJyKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHN0ZGVyciByZWRpcmVjdGVkIHRvIHN0ZG91dAorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuc3RkZXJyLndyaXRlKCdCREZMJykiXSwKKyAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JERkwnLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3Rkb3V0X2FyZyhzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiBzdGRlcnIgcmVkaXJlY3RlZCB0byBzdGRvdXQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjOgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInByaW50ICd3aWxsIG5vdCBiZSBydW4nIl0sCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIHdoZW4gc3Rkb3V0IGFyZyBzdXBwbGllZC4iKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzdGRvdXQnLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfY2FsbF9rd2FyZ3Moc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGgga2V5d29yZCBhcmdzCisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJiYW5hbmEiCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLCBvczsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLmV4aXQob3MuZ2V0ZW52KCJGUlVJVCIpPT0iYmFuYW5hIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgIyBQb3BlbigpIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgIyBidXQgUG9wZW4uX19kZWxfXyBzaG91bGQgbm90IGNvbXBsYWluIChpc3N1ZSAjMTIwODUpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1YnByb2Nlc3MuUG9wZW4sIGludmFsaWRfYXJnX25hbWU9MSkKKyAgICAgICAgICAgIGFyZ2NvdW50ID0gc3VicHJvY2Vzcy5Qb3Blbi5fX2luaXRfXy5fX2NvZGVfXy5jb19hcmdjb3VudAorICAgICAgICAgICAgdG9vX21hbnlfYXJncyA9IFswXSAqIChhcmdjb3VudCArIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1YnByb2Nlc3MuUG9wZW4sICp0b29fbWFueV9hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgJycpCisKKyAgICBkZWYgdGVzdF9zdGRpbl9ub25lKHNlbGYpOgorICAgICAgICAjIC5zdGRpbiBpcyBOb25lIHdoZW4gbm90IHJlZGlyZWN0ZWQKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQgImJhbmFuYSInXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZGluLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3Rkb3V0X25vbmUoc2VsZik6CisgICAgICAgICMgLnN0ZG91dCBpcyBOb25lIHdoZW4gbm90IHJlZGlyZWN0ZWQsIGFuZCB0aGUgY2hpbGQncyBzdGRvdXQgd2lsbAorICAgICAgICAjIGJlIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQuICBJbiBvcmRlciB0byB0ZXN0IHRoaXMgd2UgcnVuIGEKKyAgICAgICAgIyBzdWJwcm9jZXNzIGluIGEgc3VicHJvY2VzczoKKyAgICAgICAgIyB0aGlzX3Rlc3QKKyAgICAgICAgIyAgIFwtLSBzdWJwcm9jZXNzIGNyZWF0ZWQgYnkgdGhpcyB0ZXN0IChwYXJlbnQpCisgICAgICAgICMgICAgICAgICAgXC0tIHN1YnByb2Nlc3MgY3JlYXRlZCBieSB0aGUgcGFyZW50IHN1YnByb2Nlc3MgKGNoaWxkKQorICAgICAgICAjIFRoZSBwYXJlbnQgZG9lc24ndCBzcGVjaWZ5IHN0ZG91dCwgc28gdGhlIGNoaWxkIHdpbGwgdXNlIHRoZQorICAgICAgICAjIHBhcmVudCdzIHN0ZG91dC4gIFRoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgbWVzc2FnZSBwcmludGVkIGJ5IHRoZQorICAgICAgICAjIGNoaWxkIGdvZXMgdG8gdGhlIHBhcmVudCBzdGRvdXQuICBUaGUgcGFyZW50IGFsc28gY2hlY2tzIHRoYXQgdGhlCisgICAgICAgICMgY2hpbGQncyBzdGRvdXQgaXMgTm9uZS4gIFNlZSAjMTE5NjMuCisgICAgICAgIGNvZGUgPSAoJ2ltcG9ydCBzeXM7IGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEU7JworICAgICAgICAgICAgICAgICdwID0gUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQgXCd0ZXN0X3N0ZG91dF9ub25lXCciXSwnCisgICAgICAgICAgICAgICAgJyAgICAgICAgICBzdGRpbj1QSVBFLCBzdGRlcnI9UElQRSk7JworICAgICAgICAgICAgICAgICdwLndhaXQoKTsgYXNzZXJ0IHAuc3Rkb3V0IGlzIE5vbmU7JykKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAwLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnJzdHJpcCgpLCAndGVzdF9zdGRvdXRfbm9uZScpCisKKyAgICBkZWYgdGVzdF9zdGRlcnJfbm9uZShzZWxmKToKKyAgICAgICAgIyAuc3RkZXJyIGlzIE5vbmUgd2hlbiBub3QgcmVkaXJlY3RlZAorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludCAiYmFuYW5hIiddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRpbi5jbG9zZSkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZGVyciwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGVfd2l0aF9jd2Qoc2VsZik6CisgICAgICAgIHB5dGhvbl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsic29tZXRoaW5neW91ZG9udGhhdmUiLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlLCBjd2Q9cHl0aG9uX2RpcikKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDQ3KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCksCisgICAgICAgICAgICAgICAgICAgICAibmVlZCBhbiBpbnN0YWxsZWQgUHl0aG9uLiBTZWUgIzc3NzQiKQorICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGVfd2l0aG91dF9jd2Qoc2VsZik6CisgICAgICAgICMgRm9yIGEgbm9ybWFsIGluc3RhbGxhdGlvbiwgaXQgc2hvdWxkIHdvcmsgd2l0aG91dCAnY3dkJworICAgICAgICAjIGFyZ3VtZW50LiAgRm9yIHRlc3QgcnVucyBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LCBzZWUgIzc3NzQuCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsic29tZXRoaW5neW91ZG9udGhhdmUiLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgNDcpCisKKyAgICBkZWYgdGVzdF9zdGRpbl9waXBlKHNlbGYpOgorICAgICAgICAjIHN0ZGluIHJlZGlyZWN0aW9uCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLmV4aXQoc3lzLnN0ZGluLnJlYWQoKSA9PSAicGVhciIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHAuc3RkaW4ud3JpdGUoInBlYXIiKQorICAgICAgICBwLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDEpCisKKyAgICBkZWYgdGVzdF9zdGRpbl9maWxlZGVzKHNlbGYpOgorICAgICAgICAjIHN0ZGluIGlzIHNldCB0byBvcGVuIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBkID0gdGYuZmlsZW5vKCkKKyAgICAgICAgb3Mud3JpdGUoZCwgInBlYXIiKQorICAgICAgICBvcy5sc2VlayhkLCAwLCAwKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KHN5cy5zdGRpbi5yZWFkKCkgPT0gInBlYXIiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPWQpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAxKQorCisgICAgZGVmIHRlc3Rfc3RkaW5fZmlsZW9iaihzZWxmKToKKyAgICAgICAgIyBzdGRpbiBpcyBzZXQgdG8gb3BlbiBmaWxlIG9iamVjdAorICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICB0Zi53cml0ZSgicGVhciIpCisgICAgICAgIHRmLnNlZWsoMCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuZXhpdChzeXMuc3RkaW4ucmVhZCgpID09ICJwZWFyIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj10ZikKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDEpCisKKyAgICBkZWYgdGVzdF9zdGRvdXRfcGlwZShzZWxmKToKKyAgICAgICAgIyBzdGRvdXQgcmVkaXJlY3Rpb24KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgib3JhbmdlIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLCAib3JhbmdlIikKKworICAgIGRlZiB0ZXN0X3N0ZG91dF9maWxlZGVzKHNlbGYpOgorICAgICAgICAjIHN0ZG91dCBpcyBzZXQgdG8gb3BlbiBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgZCA9IHRmLmZpbGVubygpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoIm9yYW5nZSIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PWQpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIG9zLmxzZWVrKGQsIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChkLCAxMDI0KSwgIm9yYW5nZSIpCisKKyAgICBkZWYgdGVzdF9zdGRvdXRfZmlsZW9iaihzZWxmKToKKyAgICAgICAgIyBzdGRvdXQgaXMgc2V0IHRvIG9wZW4gZmlsZSBvYmplY3QKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgib3JhbmdlIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9dGYpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIHRmLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Zi5yZWFkKCksICJvcmFuZ2UiKQorCisgICAgZGVmIHRlc3Rfc3RkZXJyX3BpcGUoc2VsZik6CisgICAgICAgICMgc3RkZXJyIHJlZGlyZWN0aW9uCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5zdGRlcnIud3JpdGUoInN0cmF3YmVycnkiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChwLnN0ZGVyci5yZWFkKCksICJzdHJhd2JlcnJ5IikKKworICAgIGRlZiB0ZXN0X3N0ZGVycl9maWxlZGVzKHNlbGYpOgorICAgICAgICAjIHN0ZGVyciBpcyBzZXQgdG8gb3BlbiBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgZCA9IHRmLmZpbGVubygpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5zdGRlcnIud3JpdGUoInN0cmF3YmVycnkiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1kKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBvcy5sc2VlayhkLCAwLCAwKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKG9zLnJlYWQoZCwgMTAyNCksICJzdHJhd2JlcnJ5IikKKworICAgIGRlZiB0ZXN0X3N0ZGVycl9maWxlb2JqKHNlbGYpOgorICAgICAgICAjIHN0ZGVyciBpcyBzZXQgdG8gb3BlbiBmaWxlIG9iamVjdAorICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuc3RkZXJyLndyaXRlKCJzdHJhd2JlcnJ5IiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGYpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIHRmLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbCh0Zi5yZWFkKCksICJzdHJhd2JlcnJ5IikKKworICAgIGRlZiB0ZXN0X3N0ZG91dF9zdGRlcnJfcGlwZShzZWxmKToKKyAgICAgICAgIyBjYXB0dXJlIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSBzYW1lIHBpcGUKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKCJhcHBsZSIpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJvcmFuZ2UiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwocC5zdGRvdXQucmVhZCgpLCAiYXBwbGVvcmFuZ2UiKQorCisgICAgZGVmIHRlc3Rfc3Rkb3V0X3N0ZGVycl9maWxlKHNlbGYpOgorICAgICAgICAjIGNhcHR1cmUgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHNhbWUgb3BlbiBmaWxlCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiYXBwbGUiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZGVyci53cml0ZSgib3JhbmdlIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9dGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXRmKQorICAgICAgICBwLndhaXQoKQorICAgICAgICB0Zi5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwodGYucmVhZCgpLCAiYXBwbGVvcmFuZ2UiKQorCisgICAgZGVmIHRlc3Rfc3Rkb3V0X2ZpbGVkZXNfb2Zfc3Rkb3V0KHNlbGYpOgorICAgICAgICAjIHN0ZG91dCBpcyBzZXQgdG8gMSAoIzE1MzE4NjIpLgorICAgICAgICAjIFRvIGF2b2lkIHByaW50aW5nIHRoZSB0ZXh0IG9uIHN0ZG91dCwgd2UgZG8gc29tZXRoaW5nIHNpbWlsYXIgdG8KKyAgICAgICAgIyB0ZXN0X3N0ZG91dF9ub25lIChzZWUgYWJvdmUpLiAgVGhlIHBhcmVudCBzdWJwcm9jZXNzIGNhbGxzIHRoZSBjaGlsZAorICAgICAgICAjIHN1YnByb2Nlc3MgcGFzc2luZyBzdGRvdXQ9MSwgYW5kIHRoaXMgdGVzdCB1c2VzIHN0ZG91dD1QSVBFIGluCisgICAgICAgICMgb3JkZXIgdG8gY2FwdHVyZSBhbmQgY2hlY2sgdGhlIG91dHB1dCBvZiB0aGUgcGFyZW50LiBTZWUgIzExOTYzLgorICAgICAgICBjb2RlID0gKCdpbXBvcnQgc3lzLCBzdWJwcm9jZXNzOyAnCisgICAgICAgICAgICAgICAgJ3JjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJworICAgICAgICAgICAgICAgICcgICAgImltcG9ydCBvcywgc3lzOyBzeXMuZXhpdChvcy53cml0ZShzeXMuc3Rkb3V0LmZpbGVubygpLCAnCisgICAgICAgICAgICAgICAgICAgICAnXCd0ZXN0IHdpdGggc3Rkb3V0PTFcJykpIl0sIHN0ZG91dD0xKTsgJworICAgICAgICAgICAgICAgICdhc3NlcnQgcmMgPT0gMTgnKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksICd0ZXN0IHdpdGggc3Rkb3V0PTEnKQorCisgICAgZGVmIHRlc3RfY3dkKHNlbGYpOgorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgIyBXZSBjYW5ub3QgdXNlIG9zLnBhdGgucmVhbHBhdGggdG8gY2Fub25pY2FsaXplIHRoZSBwYXRoLAorICAgICAgICAjIHNpbmNlIGl0IGRvZXNuJ3QgZXhwYW5kIFRydTY0IHttZW1ifSBzdHJpbmdzLiBTZWUgYnVnIDEwNjM1NzEuCisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdG1wZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoY3dkKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLG9zOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUob3MuZ2V0Y3dkKCkpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9dG1wZGlyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIG5vcm1jYXNlID0gb3MucGF0aC5ub3JtY2FzZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vcm1jYXNlKHAuc3Rkb3V0LnJlYWQoKSksIG5vcm1jYXNlKHRtcGRpcikpCisKKyAgICBkZWYgdGVzdF9lbnYoc2VsZik6CisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJvcmFuZ2UiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsb3M7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShvcy5nZXRlbnYoIkZSVUlUIikpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLCAib3JhbmdlIikKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX3N0ZGluKHNlbGYpOgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLmV4aXQoc3lzLnN0ZGluLnJlYWQoKSA9PSAicGVhciIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgcC5jb21tdW5pY2F0ZSgicGVhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAxKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfc3Rkb3V0KHNlbGYpOgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgicGluZWFwcGxlIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgInBpbmVhcHBsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLCBOb25lKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfc3RkZXJyKHNlbGYpOgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZGVyci53cml0ZSgicGluZWFwcGxlIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICJwaW5lYXBwbGUiKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGUoc2VsZik6CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsb3M7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZGVyci53cml0ZSgicGluZWFwcGxlIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRpbi5jbG9zZSkKKyAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoImJhbmFuYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCAiYmFuYW5hIikKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICJwaW5lYXBwbGUiKQorCisgICAgIyBUaGlzIHRlc3QgaXMgTGludXggc3BlY2lmaWMgZm9yIHNpbXBsaWNpdHkgdG8gYXQgbGVhc3QgaGF2ZQorICAgICMgc29tZSBjb3ZlcmFnZS4gIEl0IGlzIG5vdCBhIHBsYXRmb3JtIHNwZWNpZmljIGJ1Zy4KKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5wYXRoLmlzZGlyKCcvcHJvYy8lZC9mZCcgJSBvcy5nZXRwaWQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkxpbnV4IHNwZWNpZmljIikKKyAgICAjIFRlc3QgZm9yIHRoZSBmZCBsZWFrIHJlcG9ydGVkIGluIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNzkxLgorICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX3BpcGVfZmRfbGVhayhzZWxmKToKKyAgICAgICAgZmRfZGlyZWN0b3J5ID0gJy9wcm9jLyVkL2ZkJyAlIG9zLmdldHBpZCgpCisgICAgICAgIG51bV9mZHNfYmVmb3JlX3BvcGVuID0gbGVuKG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQoKSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgbnVtX2Zkc19hZnRlcl9jb21tdW5pY2F0ZSA9IGxlbihvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkpCisgICAgICAgIGRlbCBwCisgICAgICAgIG51bV9mZHNfYWZ0ZXJfZGVzdHJ1Y3Rpb24gPSBsZW4ob3MubGlzdGRpcihmZF9kaXJlY3RvcnkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9mZHNfYmVmb3JlX3BvcGVuLCBudW1fZmRzX2FmdGVyX2Rlc3RydWN0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9mZHNfYmVmb3JlX3BvcGVuLCBudW1fZmRzX2FmdGVyX2NvbW11bmljYXRlKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfcmV0dXJucyhzZWxmKToKKyAgICAgICAgIyBjb21tdW5pY2F0ZSgpIHNob3VsZCByZXR1cm4gTm9uZSBpZiBubyByZWRpcmVjdGlvbiBpcyBhY3RpdmUKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdKQorICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZGVyciwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX3BpcGVfYnVmKHNlbGYpOgorICAgICAgICAjIGNvbW11bmljYXRlKCkgd2l0aCB3cml0ZXMgbGFyZ2VyIHRoYW4gcGlwZV9idWYKKyAgICAgICAgIyBUaGlzIHRlc3Qgd2lsbCBwcm9iYWJseSBkZWFkbG9jayByYXRoZXIgdGhhbiBmYWlsLCBpZgorICAgICAgICAjIGNvbW11bmljYXRlKCkgZG9lcyBub3Qgd29yayBwcm9wZXJseS4KKyAgICAgICAgeCwgeSA9IG9zLnBpcGUoKQorICAgICAgICBpZiBtc3dpbmRvd3M6CisgICAgICAgICAgICBwaXBlX2J1ZiA9IDUxMgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGlwZV9idWYgPSBvcy5mcGF0aGNvbmYoeCwgIlBDX1BJUEVfQlVGIikKKyAgICAgICAgb3MuY2xvc2UoeCkKKyAgICAgICAgb3MuY2xvc2UoeSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKDQ3KSk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZGVyci53cml0ZSgieHl6IiolZCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpKScgJSBwaXBlX2J1Zl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICBzdHJpbmdfdG9fd3JpdGUgPSAiYWJjIipwaXBlX2J1ZgorICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZShzdHJpbmdfdG9fd3JpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBzdHJpbmdfdG9fd3JpdGUpCisKKyAgICBkZWYgdGVzdF93cml0ZXNfYmVmb3JlX2NvbW11bmljYXRlKHNlbGYpOgorICAgICAgICAjIHN0ZGluLndyaXRlIGJlZm9yZSBjb21tdW5pY2F0ZSgpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsb3M7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRpbi5jbG9zZSkKKyAgICAgICAgcC5zdGRpbi53cml0ZSgiYmFuYW5hIikKKyAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoInNwbGl0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICJiYW5hbmFzcGxpdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwoc3RkZXJyLCAiIikKKworICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnICsgU0VUQklOQVJZICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImxpbmUxXFxuIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImxpbmUyXFxyIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImxpbmUzXFxyXFxuIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImxpbmU0XFxyIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoIlxcbmxpbmU1Iik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoIlxcbmxpbmU2Iik7J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9MSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzdGRvdXQgPSBwLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgaWYgaGFzYXR0cihmaWxlLCAnbmV3bGluZXMnKToKKyAgICAgICAgICAgICMgSW50ZXJwcmV0ZXIgd2l0aCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUxXG5saW5lMlxubGluZTNcbmxpbmU0XG5saW5lNVxubGluZTYiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJbnRlcnByZXRlciB3aXRob3V0IHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZTFcbmxpbmUyXHJsaW5lM1xyXG5saW5lNFxyXG5saW5lNVxubGluZTYiKQorCisgICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzX2NvbW11bmljYXRlKHNlbGYpOgorICAgICAgICAjIHVuaXZlcnNhbCBuZXdsaW5lcyB0aHJvdWdoIGNvbW11bmljYXRlKCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnICsgU0VUQklOQVJZICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImxpbmUxXFxuIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImxpbmUyXFxyIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImxpbmUzXFxyXFxuIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImxpbmU0XFxyIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoIlxcbmxpbmU1Iik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoIlxcbmxpbmU2Iik7J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9MSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIChzdGRvdXQsIHN0ZGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgaWYgaGFzYXR0cihmaWxlLCAnbmV3bGluZXMnKToKKyAgICAgICAgICAgICMgSW50ZXJwcmV0ZXIgd2l0aCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUxXG5saW5lMlxubGluZTNcbmxpbmU0XG5saW5lNVxubGluZTYiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJbnRlcnByZXRlciB3aXRob3V0IHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZTFcbmxpbmUyXHJsaW5lM1xyXG5saW5lNFxyXG5saW5lNVxubGluZTYiKQorCisgICAgZGVmIHRlc3Rfbm9fbGVha2luZyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgd2UgbGVhayBubyByZXNvdXJjZXMKKyAgICAgICAgaWYgbm90IG1zd2luZG93czoKKyAgICAgICAgICAgIG1heF9oYW5kbGVzID0gMTAyNiAjIHRvbyBtdWNoIGZvciBtb3N0IFVOSVggc3lzdGVtcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWF4X2hhbmRsZXMgPSAyMDUwICMgdG9vIG11Y2ggZm9yIChhdCBsZWFzdCBzb21lKSBXaW5kb3dzIHNldHVwcworICAgICAgICBoYW5kbGVzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWF4X2hhbmRsZXMpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQob3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fV1JPTkxZIHwgb3MuT19DUkVBVCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTUZJTEU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJmYWlsZWQgdG8gcmVhY2ggdGhlIGZpbGUgZGVzY3JpcHRvciBsaW1pdCAiCisgICAgICAgICAgICAgICAgICAgICIodHJpZWQgJWQpIiAlIG1heF9oYW5kbGVzKQorICAgICAgICAgICAgIyBDbG9zZSBhIGNvdXBsZSBvZiB0aGVtIChzaG91bGQgYmUgZW5vdWdoIGZvciBhIHN1YnByb2Nlc3MpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoaGFuZGxlcy5wb3AoKSkKKyAgICAgICAgICAgICMgTG9vcCBjcmVhdGluZyBzb21lIHN1YnByb2Nlc3Nlcy4gSWYgb25lIG9mIHRoZW0gbGVha3Mgc29tZSBmZHMsCisgICAgICAgICAgICAjIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIHdpbGwgZmFpbCBieSByZWFjaGluZyB0aGUgbWF4IGZkIGxpbWl0LgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTUpOgorICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpKSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgZGF0YSA9IHAuY29tbXVuaWNhdGUoYiJsaW1lIilbMF0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIibGltZSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3IgaCBpbiBoYW5kbGVzOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9saXN0MmNtZGxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VicHJvY2Vzcy5saXN0MmNtZGxpbmUoWydhIGIgYycsICdkJywgJ2UnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyJhIGIgYyIgZCBlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJwcm9jZXNzLmxpc3QyY21kbGluZShbJ2FiImMnLCAnXFwnLCAnZCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWJcXCJjIFxcIGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnYWIiYycsICcgXFwnLCAnZCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWJcXCJjICIgXFxcXCIgZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VicHJvY2Vzcy5saXN0MmNtZGxpbmUoWydhXFxcXFxcYicsICdkZSBmZycsICdoJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhXFxcXFxcYiAiZGUgZmciIGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnYVxcImInLCAnYycsICdkJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhXFxcXFxcImIgYyBkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJwcm9jZXNzLmxpc3QyY21kbGluZShbJ2FcXFxcYiBjJywgJ2QnLCAnZSddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnImFcXFxcYiBjIiBkIGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnYVxcXFxiXFwgYycsICdkJywgJ2UnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyJhXFxcXGJcXCBjIiBkIGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnYWInLCAnJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYiAiIicpCisKKworICAgIGRlZiB0ZXN0X3BvbGwoc2VsZik6CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCB0aW1lOyB0aW1lLnNsZWVwKDEpIl0pCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICB3aGlsZSBwLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICMgV2UgZXhwZWN0IHRoYXQgdGhlIHBvbGwgbG9vcCBwcm9iYWJseSB3ZW50IGFyb3VuZCBhYm91dCAxMCB0aW1lcywKKyAgICAgICAgIyBidXQsIGJhc2VkIG9uIHN5c3RlbSBzY2hlZHVsaW5nIHdlIGNhbid0IGNvbnRyb2wsIGl0J3MgcG9zc2libGUKKyAgICAgICAgIyBwb2xsKCkgbmV2ZXIgcmV0dXJuZWQgTm9uZS4gIEl0ICJzaG91bGQgYmUiIHZlcnkgcmFyZSB0aGF0IGl0CisgICAgICAgICMgZGlkbid0IGdvIGFyb3VuZCBhdCBsZWFzdCB0d2ljZS4KKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoY291bnQsIDIpCisgICAgICAgICMgU3Vic2VxdWVudCBpbnZvY2F0aW9ucyBzaG91bGQganVzdCByZXR1cm4gdGhlIHJldHVybmNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvbGwoKSwgMCkKKworCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHRpbWU7IHRpbWUuc2xlZXAoMikiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgMCkKKyAgICAgICAgIyBTdWJzZXF1ZW50IGludm9jYXRpb25zIHNob3VsZCBqdXN0IHJldHVybiB0aGUgcmV0dXJuY29kZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAwKQorCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2J1ZnNpemUoc2VsZik6CisgICAgICAgICMgYW4gaW52YWxpZCB0eXBlIG9mIHRoZSBidWZzaXplIGFyZ3VtZW50IHNob3VsZCByYWlzZQorICAgICAgICAjIFR5cGVFcnJvci4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwYXNzIl0sICJvcmFuZ2UiKQorCisgICAgZGVmIHRlc3RfbGVha2luZ19mZHNfb25fZXJyb3Ioc2VsZik6CisgICAgICAgICMgc2VlIGJ1ZyAjNTE3OTogUG9wZW4gbGVha3MgZmlsZSBkZXNjcmlwdG9ycyB0byBQSVBFcyBpZgorICAgICAgICAjIHRoZSBjaGlsZCBmYWlscyB0byBleGVjdXRlOyB0aGlzIHdpbGwgZXZlbnR1YWxseSBleGhhdXN0CisgICAgICAgICMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG9wZW4gZmRzLiAxMDI0IHNlZW1zIGEgdmVyeSBjb21tb24KKyAgICAgICAgIyB2YWx1ZSBmb3IgdGhhdCBsaW1pdCwgYnV0IFdpbmRvd3MgaGFzIDIwNDgsIHNvIHdlIGxvb3AKKyAgICAgICAgIyAxMDI0IHRpbWVzIChlYWNoIGNhbGwgbGVha2VkIHR3byBmZHMpLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDI0KToKKyAgICAgICAgICAgICMgV2luZG93cyByYWlzZXMgSU9FcnJvci4gIE90aGVycyByYWlzZSBPU0Vycm9yLgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFbnZpcm9ubWVudEVycm9yKSBhcyBjOgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgIyBpZ25vcmUgZXJyb3JzIHRoYXQgaW5kaWNhdGUgdGhlIGNvbW1hbmQgd2FzIG5vdCBmb3VuZAorICAgICAgICAgICAgaWYgYy5leGNlcHRpb24uZXJybm8gbm90IGluIChlcnJuby5FTk9FTlQsIGVycm5vLkVBQ0NFUyk6CisgICAgICAgICAgICAgICAgcmFpc2UgYy5leGNlcHRpb24KKworICAgIGRlZiB0ZXN0X2hhbmRsZXNfY2xvc2VkX29uX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBJZiBDcmVhdGVQcm9jZXNzIGV4aXRzIHdpdGggYW4gZXJyb3IsIGVuc3VyZSB0aGUKKyAgICAgICAgIyBkdXBsaWNhdGUgb3V0cHV0IGhhbmRsZXMgYXJlIHJlbGVhc2VkCisgICAgICAgIGlmaGFuZGxlLCBpZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgb2ZoYW5kbGUsIG9mbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICBlZmhhbmRsZSwgZWZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4gKFsiKiJdLCBzdGRpbj1pZmhhbmRsZSwgc3Rkb3V0PW9maGFuZGxlLAorICAgICAgICAgICAgICBzdGRlcnI9ZWZoYW5kbGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgb3MuY2xvc2UoaWZoYW5kbGUpCisgICAgICAgICAgICBvcy5yZW1vdmUoaWZuYW1lKQorICAgICAgICAgICAgb3MuY2xvc2Uob2ZoYW5kbGUpCisgICAgICAgICAgICBvcy5yZW1vdmUob2ZuYW1lKQorICAgICAgICAgICAgb3MuY2xvc2UoZWZoYW5kbGUpCisgICAgICAgICAgICBvcy5yZW1vdmUoZWZuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGlmbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMob2ZuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhlZm5hbWUpKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfZXBpcGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTA5NjM6IGNvbW11bmljYXRlKCkgc2hvdWxkIGhpZGUgRVBJUEUKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncGFzcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRpbi5jbG9zZSkKKyAgICAgICAgcC5jb21tdW5pY2F0ZSgieCIgKiAyKioyMCkKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX2VwaXBlX29ubHlfc3RkaW4oc2VsZik6CisgICAgICAgICMgSXNzdWUgMTA5NjM6IGNvbW11bmljYXRlKCkgc2hvdWxkIGhpZGUgRVBJUEUKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncGFzcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICB0aW1lLnNsZWVwKDIpCisgICAgICAgIHAuY29tbXVuaWNhdGUoIngiICogMioqMjApCisKKyAgICAjIFRoaXMgdGVzdCBpcyBMaW51eC1pc2ggc3BlY2lmaWMgZm9yIHNpbXBsaWNpdHkgdG8gYXQgbGVhc3QgaGF2ZQorICAgICMgc29tZSBjb3ZlcmFnZS4gIEl0IGlzIG5vdCBhIHBsYXRmb3JtIHNwZWNpZmljIGJ1Zy4KKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5wYXRoLmlzZGlyKCcvcHJvYy8lZC9mZCcgJSBvcy5nZXRwaWQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkxpbnV4IHNwZWNpZmljIikKKyAgICBkZWYgdGVzdF9mYWlsZWRfY2hpbGRfZXhlY3V0ZV9mZF9sZWFrKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGZvciB0aGUgZm9yaygpIGZhaWx1cmUgZmQgbGVhayByZXBvcnRlZCBpbiBpc3N1ZTE2MzI3LiIiIgorICAgICAgICBmZF9kaXJlY3RvcnkgPSAnL3Byb2MvJWQvZmQnICUgb3MuZ2V0cGlkKCkKKyAgICAgICAgZmRzX2JlZm9yZV9wb3BlbiA9IG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBvcGVuVGVzdEV4Y2VwdGlvbik6CisgICAgICAgICAgICBQb3BlbkV4ZWN1dGVDaGlsZFJhaXNlcygKKyAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAncGFzcyddLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICAgICAgIyBOT1RFOiBUaGlzIHRlc3QgZG9lc24ndCB2ZXJpZnkgdGhhdCB0aGUgcmVhbCBfZXhlY3V0ZV9jaGlsZAorICAgICAgICAjIGRvZXMgbm90IGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGl0c2VsZiBvbiB0aGUgd2F5IG91dAorICAgICAgICAjIGR1cmluZyBhbiBleGNlcHRpb24uICBDb2RlIGluc3BlY3Rpb24gaGFzIGNvbmZpcm1lZCB0aGF0LgorCisgICAgICAgIGZkc19hZnRlcl9leGNlcHRpb24gPSBvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZHNfYmVmb3JlX3BvcGVuLCBmZHNfYWZ0ZXJfZXhjZXB0aW9uKQorCisKKyMgY29udGV4dCBtYW5hZ2VyCitjbGFzcyBfU3VwcHJlc3NDb3JlRmlsZXMob2JqZWN0KToKKyAgICAiIiJUcnkgdG8gcHJldmVudCBjb3JlIGZpbGVzIGZyb20gYmVpbmcgY3JlYXRlZC4iIiIKKyAgICBvbGRfbGltaXQgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAiIiJUcnkgdG8gc2F2ZSBwcmV2aW91cyB1bGltaXQsIHRoZW4gc2V0IGl0IHRvICgwLCAwKS4iIiIKKyAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5vbGRfbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCisgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCAoMCwgMCkpCisgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgJ0NyYXNoIFJlcG9ydGVyJyBvbiBPU1ggd2FzIGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAorICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCisgICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgorICAgICAgICAgICAgdmFsdWUgPSBzdWJwcm9jZXNzLlBvcGVuKFsnL3Vzci9iaW4vZGVmYXVsdHMnLCAncmVhZCcsCisgICAgICAgICAgICAgICAgICAgICdjb20uYXBwbGUuQ3Jhc2hSZXBvcnRlcicsICdEaWFsb2dUeXBlJ10sCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIGlmIHZhbHVlLnN0cmlwKCkgPT0gYidkZXZlbG9wZXInOgorICAgICAgICAgICAgICAgIHByaW50ICJ0aGlzIHRlc3RzIHRyaWdnZXJzIHRoZSBDcmFzaCBSZXBvcnRlciwgdGhhdCBpcyBpbnRlbnRpb25hbCIKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlJldHVybiBjb3JlIGZpbGUgYmVoYXZpb3IgdG8gZGVmYXVsdC4iIiIKKyAgICAgICAgaWYgc2VsZi5vbGRfbGltaXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsIHNlbGYub2xkX2xpbWl0KQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZS5lcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdBTFJNJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJlcXVpcmVzIHNpZ25hbC5TSUdBTFJNIikKKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9laW50cihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTI0OTM6IGNvbW11bmljYXRlKCkgc2hvdWxkIGhhbmRsZSBFSU5UUgorICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2xkX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLnNpZ25hbCwgc2lnbmFsLlNJR0FMUk0sIG9sZF9oYW5kbGVyKQorCisgICAgICAgICMgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBmb3IgMiBzZWNvbmRzCisgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICItYyIsICdpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgyKSddCisgICAgICAgIGZvciBzdHJlYW0gaW4gKCdzdGRvdXQnLCAnc3RkZXJyJyk6CisgICAgICAgICAgICBrdyA9IHtzdHJlYW06IHN1YnByb2Nlc3MuUElQRX0KKyAgICAgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCAqKmt3KSBhcyBwcm9jZXNzOgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgICAgICMgY29tbXVuaWNhdGUoKSB3aWxsIGJlIGludGVycnVwdGVkIGJ5IFNJR0FMUk0KKyAgICAgICAgICAgICAgICBwcm9jZXNzLmNvbW11bmljYXRlKCkKKworCitAdW5pdHRlc3Quc2tpcElmKG1zd2luZG93cywgIlBPU0lYIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFBPU0lYUHJvY2Vzc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjIGNhdWdodCAmIHJlLXJhaXNlZCBleGNlcHRpb25zCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPSIvdGhpcy9wYXRoL2RvZXMvbm90L2V4aXN0IikKKyAgICAgICAgIyBUaGUgYXR0cmlidXRlIGNoaWxkX3RyYWNlYmFjayBzaG91bGQgY29udGFpbiAib3MuY2hkaXIiIHNvbWV3aGVyZS4KKyAgICAgICAgc2VsZi5hc3NlcnRJbigib3MuY2hkaXIiLCBjLmV4Y2VwdGlvbi5jaGlsZF90cmFjZWJhY2spCisKKyAgICBkZWYgdGVzdF9ydW5fYWJvcnQoc2VsZik6CisgICAgICAgICMgcmV0dXJuY29kZSBoYW5kbGVzIHNpZ25hbCB0ZXJtaW5hdGlvbgorICAgICAgICB3aXRoIF9TdXBwcmVzc0NvcmVGaWxlcygpOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgb3M7IG9zLmFib3J0KCkiXSkKKyAgICAgICAgICAgIHAud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXAucmV0dXJuY29kZSwgc2lnbmFsLlNJR0FCUlQpCisKKyAgICBkZWYgdGVzdF9wcmVleGVjKHNlbGYpOgorICAgICAgICAjIHByZWV4ZWMgZnVuY3Rpb24KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXMsIG9zOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMuc3Rkb3V0LndyaXRlKG9zLmdldGVudignRlJVSVQnKSkiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1sYW1iZGE6IG9zLnB1dGVudigiRlJVSVQiLCAiYXBwbGUiKSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKSwgImFwcGxlIikKKworICAgIGNsYXNzIF9UZXN0RXhlY3V0ZUNoaWxkUG9wZW4oc3VicHJvY2Vzcy5Qb3Blbik6CisgICAgICAgICIiIlVzZWQgdG8gdGVzdCBiZWhhdmlvciBhdCB0aGUgZW5kIG9mIF9leGVjdXRlX2NoaWxkLiIiIgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdGNhc2UsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBzZWxmLl90ZXN0Y2FzZSA9IHRlc3RjYXNlCisgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBkZWYgX2V4ZWN1dGVfY2hpbGQoCisgICAgICAgICAgICAgICAgc2VsZiwgYXJncywgZXhlY3V0YWJsZSwgcHJlZXhlY19mbiwgY2xvc2VfZmRzLCBjd2QsIGVudiwKKyAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXMsIHN0YXJ0dXBpbmZvLCBjcmVhdGlvbmZsYWdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSwKKyAgICAgICAgICAgICAgICBjMnByZWFkLCBjMnB3cml0ZSwKKyAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbi5fZXhlY3V0ZV9jaGlsZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGFyZ3MsIGV4ZWN1dGFibGUsIHByZWV4ZWNfZm4sIGNsb3NlX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGN3ZCwgZW52LCB1bml2ZXJzYWxfbmV3bGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbywgY3JlYXRpb25mbGFncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJycmVhZCwgZXJyd3JpdGUpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICMgT3BlbiBhIGJ1bmNoIG9mIGZpbGUgZGVzY3JpcHRvcnMgYW5kIHZlcmlmeSB0aGF0CisgICAgICAgICAgICAgICAgIyBub25lIG9mIHRoZW0gYXJlIHRoZSBzYW1lIGFzIHRoZSBvbmVzIHRoZSBQb3BlbgorICAgICAgICAgICAgICAgICMgaW5zdGFuY2UgaXMgdXNpbmcgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIuCisgICAgICAgICAgICAgICAgZGV2emVyb19mZHMgPSBbb3Mub3BlbigiL2Rldi96ZXJvIiwgb3MuT19SRE9OTFkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UoOCldCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmb3IgZmQgaW4gZGV2emVyb19mZHM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0Y2FzZS5hc3NlcnROb3RJbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQsIChwMmN3cml0ZSwgYzJwcmVhZCwgZXJycmVhZCkpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgbWFwKG9zLmNsb3NlLCBkZXZ6ZXJvX2ZkcykKKworICAgIEB1bml0dGVzdC5za2lwSWYobm90IG9zLnBhdGguZXhpc3RzKCIvZGV2L3plcm8iKSwgIi9kZXYvemVybyByZXF1aXJlZC4iKQorICAgIGRlZiB0ZXN0X3ByZWV4ZWNfZXJycGlwZV9kb2VzX25vdF9kb3VibGVfY2xvc2VfcGlwZXMoc2VsZik6CisgICAgICAgICIiIklzc3VlMTYxNDA6IERvbid0IGRvdWJsZSBjbG9zZSBwaXBlcyBvbiBwcmVleGVjIGVycm9yLiIiIgorCisgICAgICAgIGRlZiByYWlzZV9pdCgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJmb3JjZSB0aGUgX2V4ZWN1dGVfY2hpbGQoKSBlcnJwaXBlX2RhdGEgcGF0aC4iKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuX1Rlc3RFeGVjdXRlQ2hpbGRQb3BlbigKKyAgICAgICAgICAgICAgICAgICAgc2VsZiwgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicGFzcyJdLAorICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHByZWV4ZWNfZm49cmFpc2VfaXQpCisKKyAgICBkZWYgdGVzdF9hcmdzX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBhcmdzIGlzIGEgc3RyaW5nCisgICAgICAgIGYsIGZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgIG9zLndyaXRlKGYsICIjIS9iaW4vc2hcbiIpCisgICAgICAgIG9zLndyaXRlKGYsICJleGVjICclcycgLWMgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSdcbiIgJQorICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgb3MuY2xvc2UoZikKKyAgICAgICAgb3MuY2htb2QoZm5hbWUsIDBvNzAwKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihmbmFtZSkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgNDcpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgICMgaW52YWxpZCBhcmd1bWVudHMgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvPTQ3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLmNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25mbGFncz00NykKKworICAgIGRlZiB0ZXN0X3NoZWxsX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzZXF1ZW5jZSkKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gImFwcGxlIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbImVjaG8gJEZSVUlUIl0sIHNoZWxsPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKSwgImFwcGxlIikKKworICAgIGRlZiB0ZXN0X3NoZWxsX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBSdW4gY29tbWFuZCB0aHJvdWdoIHRoZSBzaGVsbCAoc3RyaW5nKQorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAiYXBwbGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCJlY2hvICRGUlVJVCIsIHNoZWxsPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKSwgImFwcGxlIikKKworICAgIGRlZiB0ZXN0X2NhbGxfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudCBvbiBVTklYCisgICAgICAgIGYsIGZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgIG9zLndyaXRlKGYsICIjIS9iaW4vc2hcbiIpCisgICAgICAgIG9zLndyaXRlKGYsICJleGVjICclcycgLWMgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSdcbiIgJQorICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgb3MuY2xvc2UoZikKKyAgICAgICAgb3MuY2htb2QoZm5hbWUsIDA3MDApCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKGZuYW1lKQorICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQorCisgICAgZGVmIHRlc3Rfc3BlY2lmaWNfc2hlbGwoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzkyNjU6IEluY29ycmVjdCBuYW1lIHBhc3NlZCBhcyBhcmdbMF0uCisgICAgICAgIHNoZWxscyA9IFtdCisgICAgICAgIGZvciBwcmVmaXggaW4gWycvYmluJywgJy91c3IvYmluLycsICcvdXNyL2xvY2FsL2JpbiddOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gWydiYXNoJywgJ2tzaCddOgorICAgICAgICAgICAgICAgIHNoID0gb3MucGF0aC5qb2luKHByZWZpeCwgbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzaCk6CisgICAgICAgICAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCisgICAgICAgIGlmIG5vdCBzaGVsbHM6ICMgV2lsbCBwcm9iYWJseSB3b3JrIGZvciBhbnkgc2hlbGwgYnV0IGNzaC4KKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImJhc2ggb3Iga3NoIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QiKQorICAgICAgICBzaCA9ICcvYmluL3NoJworICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzaCkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhzaCk6CisgICAgICAgICAgICAjIFRlc3Qgd2lsbCBmYWlsIGlmIC9iaW4vc2ggaXMgYSBzeW1saW5rIHRvIGNzaC4KKyAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCisgICAgICAgIGZvciBzaCBpbiBzaGVsbHM6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigiZWNobyAkMCIsIGV4ZWN1dGFibGU9c2gsIHNoZWxsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKSwgc2gpCisKKyAgICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBtZXRob2QsICphcmdzKToKKyAgICAgICAgIyBEbyBub3QgaW5oZXJpdCBmaWxlIGhhbmRsZXMgZnJvbSB0aGUgcGFyZW50LgorICAgICAgICAjIEl0IHNob3VsZCBmaXggZmFpbHVyZXMgb24gc29tZSBwbGF0Zm9ybXMuCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cywgdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCd4XFxuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMzApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICMgV2FpdCBmb3IgdGhlIGludGVycHJldGVyIHRvIGJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlCisgICAgICAgICMgc2VuZGluZyBhbnkgc2lnbmFsLgorICAgICAgICBwLnN0ZG91dC5yZWFkKDEpCisgICAgICAgIGdldGF0dHIocCwgbWV0aG9kKSgqYXJncykKKyAgICAgICAgcmV0dXJuIHAKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoKCduZXRic2QnLCAnb3BlbmJzZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICJEdWUgdG8ga25vd24gT1MgYnVnIChpc3N1ZSAjMTY3NjIpIikKKyAgICBkZWYgX2tpbGxfZGVhZF9wcm9jZXNzKHNlbGYsIG1ldGhvZCwgKmFyZ3MpOgorICAgICAgICAjIERvIG5vdCBpbmhlcml0IGZpbGUgaGFuZGxlcyBmcm9tIHRoZSBwYXJlbnQuCisgICAgICAgICMgSXQgc2hvdWxkIGZpeCBmYWlsdXJlcyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIiJpZiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzLCB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ3hcXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gYmUgY29tcGxldGVseSBpbml0aWFsaXplZCBiZWZvcmUKKyAgICAgICAgIyBzZW5kaW5nIGFueSBzaWduYWwuCisgICAgICAgIHAuc3Rkb3V0LnJlYWQoMSkKKyAgICAgICAgIyBUaGUgcHJvY2VzcyBzaG91bGQgZW5kIGFmdGVyIHRoaXMKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAjIFRoaXMgc2hvdWxkbid0IHJhaXNlIGV2ZW4gdGhvdWdoIHRoZSBjaGlsZCBpcyBub3cgZGVhZAorICAgICAgICBnZXRhdHRyKHAsIG1ldGhvZCkoKmFyZ3MpCisgICAgICAgIHAuY29tbXVuaWNhdGUoKQorCisgICAgZGVmIHRlc3Rfc2VuZF9zaWduYWwoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLl9raWxsX3Byb2Nlc3MoJ3NlbmRfc2lnbmFsJywgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgXywgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0tleWJvYXJkSW50ZXJydXB0Jywgc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAud2FpdCgpLCAwKQorCisgICAgZGVmIHRlc3Rfa2lsbChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuX2tpbGxfcHJvY2Vzcygna2lsbCcpCisgICAgICAgIF8sIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIC1zaWduYWwuU0lHS0lMTCkKKworICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuX2tpbGxfcHJvY2VzcygndGVybWluYXRlJykKKyAgICAgICAgXywgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwoc3RkZXJyLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgLXNpZ25hbC5TSUdURVJNKQorCisgICAgZGVmIHRlc3Rfc2VuZF9zaWduYWxfZGVhZChzZWxmKToKKyAgICAgICAgIyBTZW5kaW5nIGEgc2lnbmFsIHRvIGEgZGVhZCBwcm9jZXNzCisgICAgICAgIHNlbGYuX2tpbGxfZGVhZF9wcm9jZXNzKCdzZW5kX3NpZ25hbCcsIHNpZ25hbC5TSUdJTlQpCisKKyAgICBkZWYgdGVzdF9raWxsX2RlYWQoc2VsZik6CisgICAgICAgICMgS2lsbGluZyBhIGRlYWQgcHJvY2VzcworICAgICAgICBzZWxmLl9raWxsX2RlYWRfcHJvY2Vzcygna2lsbCcpCisKKyAgICBkZWYgdGVzdF90ZXJtaW5hdGVfZGVhZChzZWxmKToKKyAgICAgICAgIyBUZXJtaW5hdGluZyBhIGRlYWQgcHJvY2VzcworICAgICAgICBzZWxmLl9raWxsX2RlYWRfcHJvY2VzcygndGVybWluYXRlJykKKworICAgIGRlZiBjaGVja19jbG9zZV9zdGRfZmRzKHNlbGYsIGZkcyk6CisgICAgICAgICMgSXNzdWUgIzk5MDU6IHRlc3QgdGhhdCBzdWJwcm9jZXNzIHBpcGVzIHN0aWxsIHdvcmsgcHJvcGVybHkgd2l0aAorICAgICAgICAjIHNvbWUgc3RhbmRhcmQgZmRzIGNsb3NlZAorICAgICAgICBzdGRpbiA9IDAKKyAgICAgICAgbmV3ZmRzID0gW10KKyAgICAgICAgZm9yIGEgaW4gZmRzOgorICAgICAgICAgICAgYiA9IG9zLmR1cChhKQorICAgICAgICAgICAgbmV3ZmRzLmFwcGVuZChiKQorICAgICAgICAgICAgaWYgYSA9PSAwOgorICAgICAgICAgICAgICAgIHN0ZGluID0gYgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgZmQgaW4gZmRzOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgb3V0LCBlcnIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKCJhcHBsZSIpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRlcnIud3JpdGUoIm9yYW5nZSIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN0ZGluLAorICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBlcnIgPSB0ZXN0X3N1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChvdXQsIGVyciksIChiJ2FwcGxlJywgYidvcmFuZ2UnKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBiLCBhIGluIHppcChuZXdmZHMsIGZkcyk6CisgICAgICAgICAgICAgICAgb3MuZHVwMihiLCBhKQorICAgICAgICAgICAgZm9yIGIgaW4gbmV3ZmRzOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGIpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzBdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFsxXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkXzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMl0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHNfMF8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzAsIDFdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzBfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFswLCAyXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Zkc18xXzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMSwgMl0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHNfMF8xXzIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEwODA2OiB0ZXN0IHRoYXQgc3VicHJvY2VzcyBwaXBlcyBzdGlsbCB3b3JrIHByb3Blcmx5IHdpdGgKKyAgICAgICAgIyBhbGwgc3RhbmRhcmQgZmRzIGNsb3NlZC4KKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFswLCAxLCAyXSkKKworICAgIGRlZiBjaGVja19zd2FwX2ZkcyhzZWxmLCBzdGRpbl9ubywgc3Rkb3V0X25vLCBzdGRlcnJfbm8pOgorICAgICAgICAjIG9wZW4gdXAgc29tZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgICAgdGVtcHMgPSBbbWtzdGVtcCgpIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICB0ZW1wX2ZkcyA9IFtmZCBmb3IgZmQsIGZuYW1lIGluIHRlbXBzXQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHVubGluayB0aGUgZmlsZXMgLS0gd2Ugd29uJ3QgbmVlZCB0byByZW9wZW4gdGhlbQorICAgICAgICAgICAgZm9yIGZkLCBmbmFtZSBpbiB0ZW1wczoKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm5hbWUpCisKKyAgICAgICAgICAgICMgc2F2ZSBhIGNvcHkgb2YgdGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgICAgICAgIHNhdmVkX2ZkcyA9IFtvcy5kdXAoZmQpIGZvciBmZCBpbiByYW5nZSgzKV0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgdGVtcCBmaWxlcyBvdmVyIHRoZSBzdGFuZGFyZCBmZCdzIDAsIDEsIDIKKyAgICAgICAgICAgICAgICBmb3IgZmQsIHRlbXBfZmQgaW4gZW51bWVyYXRlKHRlbXBfZmRzKToKKyAgICAgICAgICAgICAgICAgICAgb3MuZHVwMih0ZW1wX2ZkLCBmZCkKKworICAgICAgICAgICAgICAgICMgd3JpdGUgc29tZSBkYXRhIHRvIHdoYXQgd2lsbCBiZWNvbWUgc3RkaW4sIGFuZCByZXdpbmQKKyAgICAgICAgICAgICAgICBvcy53cml0ZShzdGRpbl9ubywgYiJTVERJTiIpCisgICAgICAgICAgICAgICAgb3MubHNlZWsoc3RkaW5fbm8sIDAsIDApCisKKyAgICAgICAgICAgICAgICAjIG5vdyB1c2UgdGhvc2UgZmlsZXMgaW4gdGhlIGdpdmVuIG9yZGVyLCBzbyB0aGF0IHN1YnByb2Nlc3MKKyAgICAgICAgICAgICAgICAjIGhhcyB0byByZWFycmFuZ2UgdGhlbSBpbiB0aGUgY2hpbGQKKyAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBnb3QgPSBzeXMuc3RkaW4ucmVhZCgpOycKKyAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImdvdCAlcyIlZ290KTsgc3lzLnN0ZGVyci53cml0ZSgiZXJyIiknXSwKKyAgICAgICAgICAgICAgICAgICAgc3RkaW49c3RkaW5fbm8sCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdGRvdXRfbm8sCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdGRlcnJfbm8pCisgICAgICAgICAgICAgICAgcC53YWl0KCkKKworICAgICAgICAgICAgICAgIGZvciBmZCBpbiB0ZW1wX2ZkczoKKyAgICAgICAgICAgICAgICAgICAgb3MubHNlZWsoZmQsIDAsIDApCisKKyAgICAgICAgICAgICAgICBvdXQgPSBvcy5yZWFkKHN0ZG91dF9ubywgMTAyNCkKKyAgICAgICAgICAgICAgICBlcnIgPSB0ZXN0X3N1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihvcy5yZWFkKHN0ZGVycl9ubywgMTAyNCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZvciBzdGQsIHNhdmVkIGluIGVudW1lcmF0ZShzYXZlZF9mZHMpOgorICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKHNhdmVkLCBzdGQpCisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKHNhdmVkKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYiJnb3QgU1RESU4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiZXJyIikKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGZkIGluIHRlbXBfZmRzOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgIyBXaGVuIGR1cGluZyBmZHMsIGlmIHRoZXJlIGFyaXNlcyBhIHNpdHVhdGlvbiB3aGVyZSBvbmUgb2YgdGhlIGZkcyBpcworICAgICMgZWl0aGVyIDAsIDEgb3IgMiwgaXQgaXMgcG9zc2libGUgdGhhdCBpdCBpcyBvdmVyd3JpdHRlbiAoIzEyNjA3KS4KKyAgICAjIFRoaXMgdGVzdHMgYWxsIGNvbWJpbmF0aW9ucyBvZiB0aGlzLgorICAgIGRlZiB0ZXN0X3N3YXBfZmRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N3YXBfZmRzKDAsIDEsIDIpCisgICAgICAgIHNlbGYuY2hlY2tfc3dhcF9mZHMoMCwgMiwgMSkKKyAgICAgICAgc2VsZi5jaGVja19zd2FwX2ZkcygxLCAwLCAyKQorICAgICAgICBzZWxmLmNoZWNrX3N3YXBfZmRzKDEsIDIsIDApCisgICAgICAgIHNlbGYuY2hlY2tfc3dhcF9mZHMoMiwgMCwgMSkKKyAgICAgICAgc2VsZi5jaGVja19zd2FwX2ZkcygyLCAxLCAwKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aGVuX3NpZ2NoaWxkX2lnbm9yZWQoc2VsZik6CisgICAgICAgICMgTk9URTogc2lnY2hpbGRfaWdub3JlLnB5IG1heSBub3QgYmUgYW4gZWZmZWN0aXZlIHRlc3Qgb24gYWxsIE9TZXMuCisgICAgICAgIHNpZ2NoaWxkX2lnbm9yZSA9IHRlc3Rfc3VwcG9ydC5maW5kZmlsZSgic2lnY2hpbGRfaWdub3JlLnB5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsIHNpZ2NoaWxkX2lnbm9yZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcC5yZXR1cm5jb2RlLCAic2lnY2hpbGRfaWdub3JlLnB5IGV4aXRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG5vbi16ZXJvIHdpdGggdGhpcyBlcnJvcjpcbiVzIiAlIHN0ZGVycikKKworICAgIGRlZiB0ZXN0X3pvbWJpZV9mYXN0X3Byb2Nlc3NfZGVsKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMjY1MDogb24gVW5peCwgaWYgUG9wZW4uX19kZWxfXygpIHdhcyBjYWxsZWQgYmVmb3JlIHRoZQorICAgICAgICAjIHByb2Nlc3MgZXhpdGVkLCBpdCB3b3VsZG4ndCBiZSBhZGRlZCB0byBzdWJwcm9jZXNzLl9hY3RpdmUsIGFuZCB3b3VsZAorICAgICAgICAjIHJlbWFpbiBhIHpvbWJpZS4KKyAgICAgICAgIyBzcGF3biBhIFBvcGVuLCBhbmQgZGVsZXRlIGl0cyByZWZlcmVuY2UgYmVmb3JlIGl0IGV4aXRzCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLCB0aW1lOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lLnNsZWVwKDAuMiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIGlkZW50ID0gaWQocCkKKyAgICAgICAgcGlkID0gcC5waWQKKyAgICAgICAgZGVsIHAKKyAgICAgICAgIyBjaGVjayB0aGF0IHAgaXMgaW4gdGhlIGFjdGl2ZSBwcm9jZXNzZXMgbGlzdAorICAgICAgICBzZWxmLmFzc2VydEluKGlkZW50LCBbaWQobykgZm9yIG8gaW4gc3VicHJvY2Vzcy5fYWN0aXZlXSkKKworICAgIGRlZiB0ZXN0X2xlYWtfZmFzdF9wcm9jZXNzX2RlbF9raWxsZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEyNjUwOiBvbiBVbml4LCBpZiBQb3Blbi5fX2RlbF9fKCkgd2FzIGNhbGxlZCBiZWZvcmUgdGhlCisgICAgICAgICMgcHJvY2VzcyBleGl0ZWQsIGFuZCB0aGUgcHJvY2VzcyBnb3Qga2lsbGVkIGJ5IGEgc2lnbmFsLCBpdCB3b3VsZCBuZXZlcgorICAgICAgICAjIGJlIHJlbW92ZWQgZnJvbSBzdWJwcm9jZXNzLl9hY3RpdmUsIHdoaWNoIHRyaWdnZXJlZCBhIEZEIGFuZCBtZW1vcnkKKyAgICAgICAgIyBsZWFrLgorICAgICAgICAjIHNwYXduIGEgUG9wZW4sIGRlbGV0ZSBpdHMgcmVmZXJlbmNlIGFuZCBraWxsIGl0CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgdGltZTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGltZS5zbGVlcCgzKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgaWRlbnQgPSBpZChwKQorICAgICAgICBwaWQgPSBwLnBpZAorICAgICAgICBkZWwgcAorICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAgICMgY2hlY2sgdGhhdCBwIGlzIGluIHRoZSBhY3RpdmUgcHJvY2Vzc2VzIGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRJbihpZGVudCwgW2lkKG8pIGZvciBvIGluIHN1YnByb2Nlc3MuX2FjdGl2ZV0pCisKKyAgICAgICAgIyBsZXQgc29tZSB0aW1lIGZvciB0aGUgcHJvY2VzcyB0byBleGl0LCBhbmQgY3JlYXRlIGEgbmV3IFBvcGVuOiB0aGlzCisgICAgICAgICMgc2hvdWxkIHRyaWdnZXIgdGhlIHdhaXQoKSBvZiBwCisgICAgICAgIHRpbWUuc2xlZXAoMC4yKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVudmlyb25tZW50RXJyb3IpIGFzIGM6CisgICAgICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2M6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAjIHAgc2hvdWxkIGhhdmUgYmVlbiB3YWl0KCllZCBvbiwgYW5kIHJlbW92ZWQgZnJvbSB0aGUgX2FjdGl2ZSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLndhaXRwaWQsIHBpZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihpZGVudCwgW2lkKG8pIGZvciBvIGluIHN1YnByb2Nlc3MuX2FjdGl2ZV0pCisKKyAgICBkZWYgdGVzdF9waXBlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTI3ODY6IGNoZWNrIHRoYXQgdGhlIGNvbW11bmljYXRpb24gcGlwZXMnIEZEcyBhcmUgc2V0IENMT0VYRUMsCisgICAgICAgICMgYW5kIGFyZSBub3QgaW5oZXJpdGVkIGJ5IGFub3RoZXIgY2hpbGQgcHJvY2Vzcy4KKyAgICAgICAgcDEgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3MucmVhZCgwLCAxKScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorCisgICAgICAgIHAyID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIFRydWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IG9zLCBlcnJubywgc3lzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZkIGluICVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiIgJSBbZi5maWxlbm8oKSBmb3IgZiBpbiAocDEuc3RkaW4sIHAxLnN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDEuc3RkZXJyKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBjbG9zZV9mZHM9RmFsc2UpCisgICAgICAgIHAxLmNvbW11bmljYXRlKCdmb28nKQorICAgICAgICBfLCBzdGRlcnIgPSBwMi5jb21tdW5pY2F0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMi5yZXR1cm5jb2RlLCAwLCAiVW5leHBlY3RlZCBlcnJvcjogIiArIHJlcHIoc3RkZXJyKSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhtc3dpbmRvd3MsICJXaW5kb3dzIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFdpbjMyUHJvY2Vzc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdGFydHVwaW5mbyhzZWxmKToKKyAgICAgICAgIyBzdGFydHVwaW5mbyBhcmd1bWVudAorICAgICAgICAjIFdlIHVzZXMgaGFyZGNvZGVkIGNvbnN0YW50cywgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0bworICAgICAgICAjIGRlcGVuZCBvbiB3aW4zMmFsbC4KKyAgICAgICAgU1RBUlRGX1VTRVNIT1dXSU5ET1cgPSAxCisgICAgICAgIFNXX01BWElNSVpFID0gMworICAgICAgICBzdGFydHVwaW5mbyA9IHN1YnByb2Nlc3MuU1RBUlRVUElORk8oKQorICAgICAgICBzdGFydHVwaW5mby5kd0ZsYWdzID0gU1RBUlRGX1VTRVNIT1dXSU5ET1cKKyAgICAgICAgc3RhcnR1cGluZm8ud1Nob3dXaW5kb3cgPSBTV19NQVhJTUlaRQorICAgICAgICAjIFNpbmNlIFB5dGhvbiBpcyBhIGNvbnNvbGUgcHJvY2VzcywgaXQgd29uJ3QgYmUgYWZmZWN0ZWQKKyAgICAgICAgIyBieSB3U2hvd1dpbmRvdywgYnV0IHRoZSBhcmd1bWVudCBzaG91bGQgYmUgc2lsZW50bHkKKyAgICAgICAgIyBpZ25vcmVkCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm89c3RhcnR1cGluZm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGlvbmZsYWdzKHNlbGYpOgorICAgICAgICAjIGNyZWF0aW9uZmxhZ3MgYXJndW1lbnQKKyAgICAgICAgQ1JFQVRFX05FV19DT05TT0xFID0gMTYKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiICAgIGEgRE9TIGJveCBzaG91bGQgZmxhc2ggYnJpZWZseSAuLi5cbiIpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChzeXMuZXhlY3V0YWJsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAnIC1jICJpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgwLjI1KSInLAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25mbGFncz1DUkVBVEVfTkVXX0NPTlNPTEUpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgICMgaW52YWxpZCBhcmd1bWVudHMgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49bGFtYmRhOiAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLmNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHMoc2VsZik6CisgICAgICAgICMgY2xvc2UgZmlsZSBkZXNjcmlwdG9ycworICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCisKKyAgICBkZWYgdGVzdF9zaGVsbF9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBSdW4gY29tbWFuZCB0aHJvdWdoIHRoZSBzaGVsbCAoc2VxdWVuY2UpCisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJwaHlzYWxpcyIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzZXQiXSwgc2hlbGw9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEluKCJwaHlzYWxpcyIsIHAuc3Rkb3V0LnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X3NoZWxsX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBSdW4gY29tbWFuZCB0aHJvdWdoIHRoZSBzaGVsbCAoc3RyaW5nKQorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAicGh5c2FsaXMiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCJzZXQiLCBzaGVsbD0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInBoeXNhbGlzIiwgcC5zdGRvdXQucmVhZCgpKQorCisgICAgZGVmIHRlc3RfY2FsbF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IG9uIFdpbmRvd3MKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoc3lzLmV4ZWN1dGFibGUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1jICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCisKKyAgICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBtZXRob2QsICphcmdzKToKKyAgICAgICAgIyBTb21lIHdpbjMyIGJ1aWxkYm90IHJhaXNlcyBFT0ZFcnJvciBpZiBzdGRpbiBpcyBpbmhlcml0ZWQKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIiJpZiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzLCB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ3hcXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgzMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkaW4uY2xvc2UpCisgICAgICAgICMgV2FpdCBmb3IgdGhlIGludGVycHJldGVyIHRvIGJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlCisgICAgICAgICMgc2VuZGluZyBhbnkgc2lnbmFsLgorICAgICAgICBwLnN0ZG91dC5yZWFkKDEpCisgICAgICAgIGdldGF0dHIocCwgbWV0aG9kKSgqYXJncykKKyAgICAgICAgXywgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwoc3RkZXJyLCAnJykKKyAgICAgICAgcmV0dXJuY29kZSA9IHAud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmV0dXJuY29kZSwgMCkKKworICAgIGRlZiBfa2lsbF9kZWFkX3Byb2Nlc3Moc2VsZiwgbWV0aG9kLCAqYXJncyk6CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cywgdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCd4XFxuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDQyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRpbi5jbG9zZSkKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gYmUgY29tcGxldGVseSBpbml0aWFsaXplZCBiZWZvcmUKKyAgICAgICAgIyBzZW5kaW5nIGFueSBzaWduYWwuCisgICAgICAgIHAuc3Rkb3V0LnJlYWQoMSkKKyAgICAgICAgIyBUaGUgcHJvY2VzcyBzaG91bGQgZW5kIGFmdGVyIHRoaXMKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAjIFRoaXMgc2hvdWxkbid0IHJhaXNlIGV2ZW4gdGhvdWdoIHRoZSBjaGlsZCBpcyBub3cgZGVhZAorICAgICAgICBnZXRhdHRyKHAsIG1ldGhvZCkoKmFyZ3MpCisgICAgICAgIF8sIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgYicnKQorICAgICAgICByYyA9IHAud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQyKQorCisgICAgZGVmIHRlc3Rfc2VuZF9zaWduYWwoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfcHJvY2Vzcygnc2VuZF9zaWduYWwnLCBzaWduYWwuU0lHVEVSTSkKKworICAgIGRlZiB0ZXN0X2tpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfcHJvY2Vzcygna2lsbCcpCisKKyAgICBkZWYgdGVzdF90ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfcHJvY2VzcygndGVybWluYXRlJykKKworICAgIGRlZiB0ZXN0X3NlbmRfc2lnbmFsX2RlYWQoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfZGVhZF9wcm9jZXNzKCdzZW5kX3NpZ25hbCcsIHNpZ25hbC5TSUdURVJNKQorCisgICAgZGVmIHRlc3Rfa2lsbF9kZWFkKHNlbGYpOgorICAgICAgICBzZWxmLl9raWxsX2RlYWRfcHJvY2Vzcygna2lsbCcpCisKKyAgICBkZWYgdGVzdF90ZXJtaW5hdGVfZGVhZChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9kZWFkX3Byb2Nlc3MoJ3Rlcm1pbmF0ZScpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzdWJwcm9jZXNzLCAnX2hhc19wb2xsJywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgInBvbGwgc3lzdGVtIGNhbGwgbm90IHN1cHBvcnRlZCIpCitjbGFzcyBQcm9jZXNzVGVzdENhc2VOb1BvbGwoUHJvY2Vzc1Rlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1YnByb2Nlc3MuX2hhc19wb2xsID0gRmFsc2UKKyAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlLnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1YnByb2Nlc3MuX2hhc19wb2xsID0gVHJ1ZQorICAgICAgICBQcm9jZXNzVGVzdENhc2UudGVhckRvd24oc2VsZikKKworCitjbGFzcyBIZWxwZXJGdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAdW5pdHRlc3Quc2tpcElmKG1zd2luZG93cywgImVycm5vIGFuZCBFSU5UUiBtYWtlIG5vIHNlbnNlIG9uIHdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X2VpbnRyX3JldHJ5X2NhbGwoc2VsZik6CisgICAgICAgIHJlY29yZF9jYWxscyA9IFtdCisgICAgICAgIGRlZiBmYWtlX29zX2Z1bmMoKmFyZ3MpOgorICAgICAgICAgICAgcmVjb3JkX2NhbGxzLmFwcGVuZChhcmdzKQorICAgICAgICAgICAgaWYgbGVuKHJlY29yZF9jYWxscykgPT0gMjoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlRSLCAiZmFrZSBpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCIpCisgICAgICAgICAgICByZXR1cm4gdHVwbGUocmV2ZXJzZWQoYXJncykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoOTk5LCAyNTYpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuX2VpbnRyX3JldHJ5X2NhbGwoZmFrZV9vc19mdW5jLCAyNTYsIDk5OSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygyNTYsIDk5OSldLCByZWNvcmRfY2FsbHMpCisgICAgICAgICMgVGhpcyB0aW1lIHRoZXJlIHdpbGwgYmUgYW4gRUlOVFIgc28gaXQgd2lsbCBsb29wIG9uY2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDY2NiwpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuX2VpbnRyX3JldHJ5X2NhbGwoZmFrZV9vc19mdW5jLCA2NjYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoMjU2LCA5OTkpLCAoNjY2LCksICg2NjYsKV0sIHJlY29yZF9jYWxscykKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MobXN3aW5kb3dzLCAibXN3aW5kb3dzIG9ubHkiKQorY2xhc3MgQ29tbWFuZHNXaXRoU3BhY2VzIChCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihDb21tYW5kc1dpdGhTcGFjZXMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZiwgZm5hbWUgPSBta3N0ZW1wKCIucHkiLCAidGUgc3QiKQorICAgICAgICBzZWxmLmZuYW1lID0gZm5hbWUubG93ZXIgKCkKKyAgICAgICAgb3Mud3JpdGUoZiwgYiJpbXBvcnQgc3lzOyIKKyAgICAgICAgICAgICAgICAgICAgYiJzeXMuc3Rkb3V0LndyaXRlKCclZCAlcycgJSAobGVuKHN5cy5hcmd2KSwgW2EubG93ZXIgKCkgZm9yIGEgaW4gc3lzLmFyZ3ZdKSkiCisgICAgICAgICkKKyAgICAgICAgb3MuY2xvc2UoZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuZm5hbWUpCisgICAgICAgIHN1cGVyKENvbW1hbmRzV2l0aFNwYWNlcywgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIHdpdGhfc3BhY2VzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGt3YXJnc1snc3Rkb3V0J10gPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgcC5zdGRvdXQucmVhZCAoKS5kZWNvZGUoIm1iY3MiKSwKKyAgICAgICAgICAiMiBbJXIsICdhYiBjZCddIiAlIHNlbGYuZm5hbWUKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3Rfc2hlbGxfc3RyaW5nX3dpdGhfc3BhY2VzKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCisgICAgICAgIHNlbGYud2l0aF9zcGFjZXMoJyIlcyIgIiVzIiAiJXMiJyAlIChzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYiBjZCIpLCBzaGVsbD0xKQorCisgICAgZGVmIHRlc3Rfc2hlbGxfc2VxdWVuY2Vfd2l0aF9zcGFjZXMoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc2VxdWVuY2UgYXJndW1lbnQgd2l0aCBzcGFjZXMgb24gV2luZG93cworICAgICAgICBzZWxmLndpdGhfc3BhY2VzKFtzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwgImFiIGNkIl0sIHNoZWxsPTEpCisKKyAgICBkZWYgdGVzdF9ub3NoZWxsX3N0cmluZ193aXRoX3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgd2l0aCBzcGFjZXMgb24gV2luZG93cworICAgICAgICBzZWxmLndpdGhfc3BhY2VzKCciJXMiICIlcyIgIiVzIicgJSAoc3lzLmV4ZWN1dGFibGUsIHNlbGYuZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYiBjZCIpKQorCisgICAgZGVmIHRlc3Rfbm9zaGVsbF9zZXF1ZW5jZV93aXRoX3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzZXF1ZW5jZSBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCisgICAgICAgIHNlbGYud2l0aF9zcGFjZXMoW3N5cy5leGVjdXRhYmxlLCBzZWxmLmZuYW1lLCAiYWIgY2QiXSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHVuaXRfdGVzdHMgPSAoUHJvY2Vzc1Rlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgUE9TSVhQcm9jZXNzVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICBXaW4zMlByb2Nlc3NUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZU5vUG9sbCwKKyAgICAgICAgICAgICAgICAgIEhlbHBlckZ1bmN0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgICBDb21tYW5kc1dpdGhTcGFjZXMpCisKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp1bml0X3Rlc3RzKQorICAgIHRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3VuYXVkaW9kZXYucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdW5hdWRpb2Rldi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZmNzExCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3VuYXVkaW9kZXYucHkKQEAgLTAsMCArMSwzMyBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIFRlc3RGYWlsZWQsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCB1bml0dGVzdAorc3VuYXVkaW9kZXYgPSBpbXBvcnRfbW9kdWxlKCdzdW5hdWRpb2RldicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2ltcG9ydCBvcworCit0cnk6CisgICAgYXVkaW9kZXYgPSBvcy5lbnZpcm9uWyJBVURJT0RFViJdCitleGNlcHQgS2V5RXJyb3I6CisgICAgYXVkaW9kZXYgPSAiL2Rldi9hdWRpbyIKKworaWYgbm90IG9zLnBhdGguZXhpc3RzKGF1ZGlvZGV2KToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibm8gYXVkaW8gZGV2aWNlIGZvdW5kISIpCisKK2RlZiBwbGF5X3NvdW5kX2ZpbGUocGF0aCk6CisgICAgZnAgPSBvcGVuKHBhdGgsICdyJykKKyAgICBkYXRhID0gZnAucmVhZCgpCisgICAgZnAuY2xvc2UoKQorICAgIHRyeToKKyAgICAgICAgYSA9IHN1bmF1ZGlvZGV2Lm9wZW4oJ3cnKQorICAgIGV4Y2VwdCBzdW5hdWRpb2Rldi5lcnJvciwgbXNnOgorICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCBtc2cKKyAgICBlbHNlOgorICAgICAgICBhLndyaXRlKGRhdGEpCisgICAgICAgIGEuY2xvc2UoKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBwbGF5X3NvdW5kX2ZpbGUoZmluZGZpbGUoJ2F1ZGlvdGVzdC5hdScpKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMmI3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKQEAgLTAsMCArMSw5NiBAQAorIiIiRG8gYSBtaW5pbWFsIHRlc3Qgb2YgYWxsIHRoZSBtb2R1bGVzIHRoYXQgYXJlbid0IG90aGVyd2lzZSB0ZXN0ZWQuIiIiCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0VW50ZXN0ZWRNb2R1bGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9hdF9sZWFzdF9pbXBvcnRfdW50ZXN0ZWRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICBpbXBvcnQgQ0dJSFRUUFNlcnZlcgorICAgICAgICAgICAgaW1wb3J0IGF1ZGlvZGV2CisgICAgICAgICAgICBpbXBvcnQgYmRiCisgICAgICAgICAgICBpbXBvcnQgY2dpdGIKKyAgICAgICAgICAgIGltcG9ydCBjb2RlCisgICAgICAgICAgICBpbXBvcnQgY29tcGlsZWFsbAorCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmJjcHBjb21waWxlcgorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jY29tcGlsZXIKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmVteGNjb21waWxlcgorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5maWxlbGlzdAorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMubXN2Y2NvbXBpbGVyCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLnRleHRfZmlsZQorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy51bml4Y2NvbXBpbGVyCisKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9kdW1iCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaQorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmJkaXN0CisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfcnBtCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3Rfd2luaW5zdAorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2NsaWIKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5idWlsZAorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmNsZWFuCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuY29uZmlnCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9kYXRhCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9lZ2dfaW5mbworICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfaGVhZGVycworICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGliCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQucmVnaXN0ZXIKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdAorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLnVwbG9hZAorCisgICAgICAgICAgICBpbXBvcnQgZW5jb2RpbmdzCisgICAgICAgICAgICBpbXBvcnQgZm9ybWF0dGVyCisgICAgICAgICAgICBpbXBvcnQgZ2V0cGFzcworICAgICAgICAgICAgaW1wb3J0IGh0bWxlbnRpdHlkZWZzCisgICAgICAgICAgICBpbXBvcnQgaWhvb2tzCisgICAgICAgICAgICBpbXBvcnQgaW1naGRyCisgICAgICAgICAgICBpbXBvcnQgaW1wdXRpbAorICAgICAgICAgICAgaW1wb3J0IGtleXdvcmQKKyAgICAgICAgICAgIGltcG9ydCBsaW5lY2FjaGUKKyAgICAgICAgICAgIGltcG9ydCBtYWN1cmwycGF0aAorICAgICAgICAgICAgaW1wb3J0IG1haWxjYXAKKyAgICAgICAgICAgIGltcG9ydCBtaW1pZnkKKyAgICAgICAgICAgIGltcG9ydCBubnRwbGliCisgICAgICAgICAgICBpbXBvcnQgbnR1cmwycGF0aAorICAgICAgICAgICAgaW1wb3J0IG9wY29kZQorICAgICAgICAgICAgaW1wb3J0IG9zMmVteHBhdGgKKyAgICAgICAgICAgIGltcG9ydCBwZGIKKyAgICAgICAgICAgIGltcG9ydCBwb3NpeGZpbGUKKyAgICAgICAgICAgIGltcG9ydCBwc3RhdHMKKyAgICAgICAgICAgIGltcG9ydCBweV9jb21waWxlCisgICAgICAgICAgICBpbXBvcnQgcmV4ZWMKKyAgICAgICAgICAgIGltcG9ydCBzY2hlZAorICAgICAgICAgICAgaW1wb3J0IHNuZGhkcgorICAgICAgICAgICAgaW1wb3J0IHN0YXR2ZnMKKyAgICAgICAgICAgIGltcG9ydCBzdHJpbmdvbGQKKyAgICAgICAgICAgIGltcG9ydCBzdW5hdQorICAgICAgICAgICAgaW1wb3J0IHN1bmF1ZGlvCisgICAgICAgICAgICBpbXBvcnQgc3ltYm9sCisgICAgICAgICAgICBpbXBvcnQgdGFibmFubnkKKyAgICAgICAgICAgIGltcG9ydCB0aW1laXQKKyAgICAgICAgICAgIGltcG9ydCB0b2FpZmYKKyAgICAgICAgICAgIGltcG9ydCB0b2tlbgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCB0dHkgICAgICMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJza2lwcGluZyB0dHkiCisKKyAgICAgICAgICAgICMgQ2FuJ3QgdGVzdCB0aGUgInVzZXIiIG1vZHVsZSAtLSBpZiB0aGUgdXNlciBoYXMgYSB+Ly5weXRob25yYy5weSwgaXQKKyAgICAgICAgICAgICMgY2FuIHNjcmV3IHVwIGFsbCBzb3J0cyBvZiB0aGluZ3MgKGVzcC4gaWYgaXQgcHJpbnRzISkuCisgICAgICAgICAgICAjaW1wb3J0IHVzZXIKKyAgICAgICAgICAgIGltcG9ydCB3ZWJicm93c2VyCisgICAgICAgICAgICBpbXBvcnQgeG1sCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFVudGVzdGVkTW9kdWxlcykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExY2FjOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKQEAgLTAsMCArMSwxMzY3IEBACisiIiJTdXBwb3J0aW5nIGRlZmluaXRpb25zIGZvciB0aGUgUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMuIiIiCisKK2lmIF9fbmFtZV9fICE9ICd0ZXN0LnRlc3Rfc3VwcG9ydCc6CisgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3Rlc3Rfc3VwcG9ydCBtdXN0IGJlIGltcG9ydGVkIGZyb20gdGhlIHRlc3QgcGFja2FnZScpCisKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgZXJybm8KK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBnYworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgVXNlckRpY3QKK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBfdGVzdGNhcGkKK2ltcG9ydCBzeXNjb25maWcKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkID0gTm9uZQorCitfX2FsbF9fID0gWyJFcnJvciIsICJUZXN0RmFpbGVkIiwgIlJlc291cmNlRGVuaWVkIiwgImltcG9ydF9tb2R1bGUiLAorICAgICAgICAgICAidmVyYm9zZSIsICJ1c2VfcmVzb3VyY2VzIiwgIm1heF9tZW11c2UiLCAicmVjb3JkX29yaWdpbmFsX3N0ZG91dCIsCisgICAgICAgICAgICJnZXRfb3JpZ2luYWxfc3Rkb3V0IiwgInVubG9hZCIsICJ1bmxpbmsiLCAicm10cmVlIiwgImZvcmdldCIsCisgICAgICAgICAgICJpc19yZXNvdXJjZV9lbmFibGVkIiwgInJlcXVpcmVzIiwgImZpbmRfdW51c2VkX3BvcnQiLCAiYmluZF9wb3J0IiwKKyAgICAgICAgICAgImZjbXAiLCAiaGF2ZV91bmljb2RlIiwgImlzX2p5dGhvbiIsICJURVNURk4iLCAiSE9TVCIsICJGVVpaIiwKKyAgICAgICAgICAgIlNBVkVEQ1dEIiwgInRlbXBfY3dkIiwgImZpbmRmaWxlIiwgInNvcnRkaWN0IiwgImNoZWNrX3N5bnRheF9lcnJvciIsCisgICAgICAgICAgICJvcGVuX3VybHJlc291cmNlIiwgImNoZWNrX3dhcm5pbmdzIiwgImNoZWNrX3B5M2tfd2FybmluZ3MiLAorICAgICAgICAgICAiQ2xlYW5JbXBvcnQiLCAiRW52aXJvbm1lbnRWYXJHdWFyZCIsICJjYXB0dXJlZF9vdXRwdXQiLAorICAgICAgICAgICAiY2FwdHVyZWRfc3Rkb3V0IiwgIlRyYW5zaWVudFJlc291cmNlIiwgInRyYW5zaWVudF9pbnRlcm5ldCIsCisgICAgICAgICAgICJydW5fd2l0aF9sb2NhbGUiLCAic2V0X21lbWxpbWl0IiwgImJpZ21lbXRlc3QiLCAiYmlnYWRkcnNwYWNldGVzdCIsCisgICAgICAgICAgICJCYXNpY1Rlc3RSdW5uZXIiLCAicnVuX3VuaXR0ZXN0IiwgInJ1bl9kb2N0ZXN0IiwgInRocmVhZGluZ19zZXR1cCIsCisgICAgICAgICAgICJ0aHJlYWRpbmdfY2xlYW51cCIsICJyZWFwX2NoaWxkcmVuIiwgImNweXRob25fb25seSIsCisgICAgICAgICAgICJjaGVja19pbXBsX2RldGFpbCIsICJnZXRfYXR0cmlidXRlIiwgInB5M2tfYnl0ZXMiLAorICAgICAgICAgICAiaW1wb3J0X2ZyZXNoX21vZHVsZSIsICJ0aHJlYWRpbmdfY2xlYW51cCIsICJyZWFwX2NoaWxkcmVuIiwKKyAgICAgICAgICAgInN0cmlwX3B5dGhvbl9zdGRlcnIiXQorCitjbGFzcyBFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIHJlZ3Jlc3Npb24gdGVzdCBleGNlcHRpb25zLiIiIgorCitjbGFzcyBUZXN0RmFpbGVkKEVycm9yKToKKyAgICAiIiJUZXN0IGZhaWxlZC4iIiIKKworY2xhc3MgUmVzb3VyY2VEZW5pZWQodW5pdHRlc3QuU2tpcFRlc3QpOgorICAgICIiIlRlc3Qgc2tpcHBlZCBiZWNhdXNlIGl0IHJlcXVlc3RlZCBhIGRpc2FsbG93ZWQgcmVzb3VyY2UuCisKKyAgICBUaGlzIGlzIHJhaXNlZCB3aGVuIGEgdGVzdCBjYWxscyByZXF1aXJlcygpIGZvciBhIHJlc291cmNlIHRoYXQKKyAgICBoYXMgbm90IGJlZW4gZW5hYmxlZC4gIEl0IGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBleHBlY3RlZAorICAgIGFuZCB1bmV4cGVjdGVkIHNraXBzLgorICAgICIiIgorCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIF9pZ25vcmVfZGVwcmVjYXRlZF9pbXBvcnRzKGlnbm9yZT1UcnVlKToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gc3VwcHJlc3MgcGFja2FnZSBhbmQgbW9kdWxlIGRlcHJlY2F0aW9uCisgICAgd2FybmluZ3Mgd2hlbiBpbXBvcnRpbmcgdGhlbS4KKworICAgIElmIGlnbm9yZSBpcyBGYWxzZSwgdGhpcyBjb250ZXh0IG1hbmFnZXIgaGFzIG5vIGVmZmVjdC4iIiIKKyAgICBpZiBpZ25vcmU6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiLisgKG1vZHVsZXxwYWNrYWdlKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB5aWVsZAorICAgIGVsc2U6CisgICAgICAgIHlpZWxkCisKKworZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgZGVwcmVjYXRlZD1GYWxzZSk6CisgICAgIiIiSW1wb3J0IGFuZCByZXR1cm4gdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQsIHJhaXNpbmcgU2tpcFRlc3QgaWYKKyAgICBpdCBpcyBub3QgYXZhaWxhYmxlLgorCisgICAgSWYgZGVwcmVjYXRlZCBpcyBUcnVlLCBhbnkgbW9kdWxlIG9yIHBhY2thZ2UgZGVwcmVjYXRpb24gbWVzc2FnZXMKKyAgICB3aWxsIGJlIHN1cHByZXNzZWQuIiIiCisgICAgd2l0aCBfaWdub3JlX2RlcHJlY2F0ZWRfaW1wb3J0cyhkZXByZWNhdGVkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgbXNnOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3Qoc3RyKG1zZykpCisKKworZGVmIF9zYXZlX2FuZF9yZW1vdmVfbW9kdWxlKG5hbWUsIG9yaWdfbW9kdWxlcyk6CisgICAgIiIiSGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgYW5kIHJlbW92ZSBhIG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzCisKKyAgICAgICBSYWlzZSBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbid0IGJlIGltcG9ydGVkLiIiIgorICAgICMgdHJ5IHRvIGltcG9ydCB0aGUgbW9kdWxlIGFuZCByYWlzZSBhbiBlcnJvciBpZiBpdCBjYW4ndCBiZSBpbXBvcnRlZAorICAgIGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgorICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCisgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgIGZvciBtb2RuYW1lIGluIGxpc3Qoc3lzLm1vZHVsZXMpOgorICAgICAgICBpZiBtb2RuYW1lID09IG5hbWUgb3IgbW9kbmFtZS5zdGFydHN3aXRoKG5hbWUgKyAnLicpOgorICAgICAgICAgICAgb3JpZ19tb2R1bGVzW21vZG5hbWVdID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0KKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2RuYW1lXQorCitkZWYgX3NhdmVfYW5kX2Jsb2NrX21vZHVsZShuYW1lLCBvcmlnX21vZHVsZXMpOgorICAgICIiIkhlbHBlciBmdW5jdGlvbiB0byBzYXZlIGFuZCBibG9jayBhIG1vZHVsZSBpbiBzeXMubW9kdWxlcworCisgICAgICAgUmV0dXJuIFRydWUgaWYgdGhlIG1vZHVsZSB3YXMgaW4gc3lzLm1vZHVsZXMsIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICBzYXZlZCA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIG9yaWdfbW9kdWxlc1tuYW1lXSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBzYXZlZCA9IEZhbHNlCisgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBOb25lCisgICAgcmV0dXJuIHNhdmVkCisKKworZGVmIGltcG9ydF9mcmVzaF9tb2R1bGUobmFtZSwgZnJlc2g9KCksIGJsb2NrZWQ9KCksIGRlcHJlY2F0ZWQ9RmFsc2UpOgorICAgICIiIkltcG9ydHMgYW5kIHJldHVybnMgYSBtb2R1bGUsIGRlbGliZXJhdGVseSBieXBhc3NpbmcgdGhlIHN5cy5tb2R1bGVzIGNhY2hlCisgICAgYW5kIGltcG9ydGluZyBhIGZyZXNoIGNvcHkgb2YgdGhlIG1vZHVsZS4gT25jZSB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlLAorICAgIHRoZSBzeXMubW9kdWxlcyBjYWNoZSBpcyByZXN0b3JlZCB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisKKyAgICBNb2R1bGVzIG5hbWVkIGluIGZyZXNoIGFyZSBhbHNvIGltcG9ydGVkIGFuZXcgaWYgbmVlZGVkIGJ5IHRoZSBpbXBvcnQuCisgICAgSWYgb25lIG9mIHRoZXNlIG1vZHVsZXMgY2FuJ3QgYmUgaW1wb3J0ZWQsIE5vbmUgaXMgcmV0dXJuZWQuCisKKyAgICBJbXBvcnRpbmcgb2YgbW9kdWxlcyBuYW1lZCBpbiBibG9ja2VkIGlzIHByZXZlbnRlZCB3aGlsZSB0aGUgZnJlc2ggaW1wb3J0CisgICAgdGFrZXMgcGxhY2UuCisKKyAgICBJZiBkZXByZWNhdGVkIGlzIFRydWUsIGFueSBtb2R1bGUgb3IgcGFja2FnZSBkZXByZWNhdGlvbiBtZXNzYWdlcworICAgIHdpbGwgYmUgc3VwcHJlc3NlZC4iIiIKKyAgICAjIE5PVEU6IHRlc3RfaGVhcHEsIHRlc3RfanNvbiwgYW5kIHRlc3Rfd2FybmluZ3MgaW5jbHVkZSBleHRyYSBzYW5pdHkKKyAgICAjIGNoZWNrcyB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIHV0aWxpdHkgZnVuY3Rpb24gaXMgd29ya2luZyBhcyBleHBlY3RlZAorICAgIHdpdGggX2lnbm9yZV9kZXByZWNhdGVkX2ltcG9ydHMoZGVwcmVjYXRlZCk6CisgICAgICAgICMgS2VlcCB0cmFjayBvZiBtb2R1bGVzIHNhdmVkIGZvciBsYXRlciByZXN0b3JhdGlvbiBhcyB3ZWxsCisgICAgICAgICMgYXMgdGhvc2Ugd2hpY2gganVzdCBuZWVkIGEgYmxvY2tpbmcgZW50cnkgcmVtb3ZlZAorICAgICAgICBvcmlnX21vZHVsZXMgPSB7fQorICAgICAgICBuYW1lc190b19yZW1vdmUgPSBbXQorICAgICAgICBfc2F2ZV9hbmRfcmVtb3ZlX21vZHVsZShuYW1lLCBvcmlnX21vZHVsZXMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBmcmVzaF9uYW1lIGluIGZyZXNoOgorICAgICAgICAgICAgICAgIF9zYXZlX2FuZF9yZW1vdmVfbW9kdWxlKGZyZXNoX25hbWUsIG9yaWdfbW9kdWxlcykKKyAgICAgICAgICAgIGZvciBibG9ja2VkX25hbWUgaW4gYmxvY2tlZDoKKyAgICAgICAgICAgICAgICBpZiBub3QgX3NhdmVfYW5kX2Jsb2NrX21vZHVsZShibG9ja2VkX25hbWUsIG9yaWdfbW9kdWxlcyk6CisgICAgICAgICAgICAgICAgICAgIG5hbWVzX3RvX3JlbW92ZS5hcHBlbmQoYmxvY2tlZF9uYW1lKQorICAgICAgICAgICAgZnJlc2hfbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgZnJlc2hfbW9kdWxlID0gTm9uZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIG9yaWdfbmFtZSwgbW9kdWxlIGluIG9yaWdfbW9kdWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW29yaWdfbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGZvciBuYW1lX3RvX3JlbW92ZSBpbiBuYW1lc190b19yZW1vdmU6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVfdG9fcmVtb3ZlXQorICAgICAgICByZXR1cm4gZnJlc2hfbW9kdWxlCisKKworZGVmIGdldF9hdHRyaWJ1dGUob2JqLCBuYW1lKToKKyAgICAiIiJHZXQgYW4gYXR0cmlidXRlLCByYWlzaW5nIFNraXBUZXN0IGlmIEF0dHJpYnV0ZUVycm9yIGlzIHJhaXNlZC4iIiIKKyAgICB0cnk6CisgICAgICAgIGF0dHJpYnV0ZSA9IGdldGF0dHIob2JqLCBuYW1lKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm1vZHVsZSAlcyBoYXMgbm8gYXR0cmlidXRlICVzIiAlICgKKyAgICAgICAgICAgIG9iai5fX25hbWVfXywgbmFtZSkpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZQorCisKK3ZlcmJvc2UgPSAxICAgICAgICAgICAgICAjIEZsYWcgc2V0IHRvIDAgYnkgcmVncnRlc3QucHkKK3VzZV9yZXNvdXJjZXMgPSBOb25lICAgICAjIEZsYWcgc2V0IHRvIFtdIGJ5IHJlZ3J0ZXN0LnB5CittYXhfbWVtdXNlID0gMCAgICAgICAgICAgIyBEaXNhYmxlIGJpZ21lbSB0ZXN0cyAodGhleSB3aWxsIHN0aWxsIGJlIHJ1biB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgIyBzbWFsbCBzaXplcywgdG8gbWFrZSBzdXJlIHRoZXkgd29yay4pCityZWFsX21heF9tZW11c2UgPSAwCisKKyMgX29yaWdpbmFsX3N0ZG91dCBpcyBtZWFudCB0byBob2xkIHN0ZG91dCBhdCB0aGUgdGltZSByZWdydGVzdCBiZWdhbi4KKyMgVGhpcyBtYXkgYmUgInRoZSByZWFsIiBzdGRvdXQsIG9yIElETEUncyBlbXVsYXRpb24gb2Ygc3Rkb3V0LCBvciB3aGF0ZXZlci4KKyMgVGhlIHBvaW50IGlzIHRvIGhhdmUgc29tZSBmbGF2b3Igb2Ygc3Rkb3V0IHRoZSB1c2VyIGNhbiBhY3R1YWxseSBzZWUuCitfb3JpZ2luYWxfc3Rkb3V0ID0gTm9uZQorZGVmIHJlY29yZF9vcmlnaW5hbF9zdGRvdXQoc3Rkb3V0KToKKyAgICBnbG9iYWwgX29yaWdpbmFsX3N0ZG91dAorICAgIF9vcmlnaW5hbF9zdGRvdXQgPSBzdGRvdXQKKworZGVmIGdldF9vcmlnaW5hbF9zdGRvdXQoKToKKyAgICByZXR1cm4gX29yaWdpbmFsX3N0ZG91dCBvciBzeXMuc3Rkb3V0CisKK2RlZiB1bmxvYWQobmFtZSk6CisgICAgdHJ5OgorICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHBhc3MKKworaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgIGRlZiBfd2FpdGZvcihmdW5jLCBwYXRobmFtZSwgd2FpdGFsbD1GYWxzZSk6CisgICAgICAgICMgUGVmb3JtIHRoZSBvcGVyYXRpb24KKyAgICAgICAgZnVuYyhwYXRobmFtZSkKKyAgICAgICAgIyBOb3cgc2V0dXAgdGhlIHdhaXQgbG9vcAorICAgICAgICBpZiB3YWl0YWxsOgorICAgICAgICAgICAgZGlybmFtZSA9IHBhdGhuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXJuYW1lLCBuYW1lID0gb3MucGF0aC5zcGxpdChwYXRobmFtZSkKKyAgICAgICAgICAgIGRpcm5hbWUgPSBkaXJuYW1lIG9yICcuJworICAgICAgICAjIENoZWNrIGZvciBgcGF0aG5hbWVgIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgZmlsZXN5c3RlbS4KKyAgICAgICAgIyBUaGUgZXhwb25lbnRpYWwgYmFja29mZiBvZiB0aGUgdGltZW91dCBhbW91bnRzIHRvIGEgdG90YWwKKyAgICAgICAgIyBvZiB+MSBzZWNvbmQgYWZ0ZXIgd2hpY2ggdGhlIGRlbGV0aW9uIGlzIHByb2JhYmx5IGFuIGVycm9yCisgICAgICAgICMgYW55d2F5LgorICAgICAgICAjIFRlc3Rpbmcgb24gYSBpN0A0LjNHSHogc2hvd3MgdGhhdCB1c3VhbGx5IG9ubHkgMSBpdGVyYXRpb24gaXMKKyAgICAgICAgIyByZXF1aXJlZCB3aGVuIGNvbnRlbnRpb24gb2NjdXJzLgorICAgICAgICB0aW1lb3V0ID0gMC4wMDEKKyAgICAgICAgd2hpbGUgdGltZW91dCA8IDEuMDoKKyAgICAgICAgICAgICMgTm90ZSB3ZSBhcmUgb25seSB0ZXN0aW5nIGZvciB0aGUgZXhpc3RhbmNlIG9mIHRoZSBmaWxlKHMpIGluCisgICAgICAgICAgICAjIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IHJlZ2FyZGxlc3Mgb2YgYW55IHNlY3VyaXR5IG9yCisgICAgICAgICAgICAjIGFjY2VzcyByaWdodHMuICBJZiB3ZSBoYXZlIG1hZGUgaXQgdGhpcyBmYXIsIHdlIGhhdmUgc3VmZmljaWVudAorICAgICAgICAgICAgIyBwZXJtaXNzaW9ucyB0byBkbyB0aGF0IG11Y2ggdXNpbmcgUHl0aG9uJ3MgZXF1aXZhbGVudCBvZiB0aGUKKyAgICAgICAgICAgICMgV2luZG93cyBBUEkgRmluZEZpcnN0RmlsZS4KKyAgICAgICAgICAgICMgT3RoZXIgV2luZG93cyBBUElzIGNhbiBmYWlsIG9yIGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgd2hlbgorICAgICAgICAgICAgIyBkZWFsaW5nIHdpdGggZmlsZXMgdGhhdCBhcmUgcGVuZGluZyBkZWxldGlvbi4KKyAgICAgICAgICAgIEwgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCisgICAgICAgICAgICBpZiBub3QgKEwgaWYgd2FpdGFsbCBlbHNlIG5hbWUgaW4gTCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAjIEluY3JlYXNlIHRoZSB0aW1lb3V0IGFuZCB0cnkgYWdhaW4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAodGltZW91dCkKKyAgICAgICAgICAgIHRpbWVvdXQgKj0gMgorICAgICAgICB3YXJuaW5ncy53YXJuKCd0ZXN0cyBtYXkgZmFpbCwgZGVsZXRlIHN0aWxsIHBlbmRpbmcgZm9yICcgKyBwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZywgc3RhY2tsZXZlbD00KQorCisgICAgZGVmIF91bmxpbmsoZmlsZW5hbWUpOgorICAgICAgICBfd2FpdGZvcihvcy51bmxpbmssIGZpbGVuYW1lKQorCisgICAgZGVmIF9ybWRpcihkaXJuYW1lKToKKyAgICAgICAgX3dhaXRmb3Iob3Mucm1kaXIsIGRpcm5hbWUpCisKKyAgICBkZWYgX3JtdHJlZShwYXRoKToKKyAgICAgICAgZGVmIF9ybXRyZWVfaW5uZXIocGF0aCk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG5hbWUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIF93YWl0Zm9yKF9ybXRyZWVfaW5uZXIsIGZ1bGxuYW1lLCB3YWl0YWxsPVRydWUpCisgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKKyAgICAgICAgX3dhaXRmb3IoX3JtdHJlZV9pbm5lciwgcGF0aCwgd2FpdGFsbD1UcnVlKQorICAgICAgICBfd2FpdGZvcihvcy5ybWRpciwgcGF0aCkKK2Vsc2U6CisgICAgX3VubGluayA9IG9zLnVubGluaworICAgIF9ybWRpciA9IG9zLnJtZGlyCisgICAgX3JtdHJlZSA9IHNodXRpbC5ybXRyZWUKKworZGVmIHVubGluayhmaWxlbmFtZSk6CisgICAgdHJ5OgorICAgICAgICBfdW5saW5rKGZpbGVuYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBwYXNzCisKK2RlZiBybWRpcihkaXJuYW1lKToKKyAgICB0cnk6CisgICAgICAgIF9ybWRpcihkaXJuYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgorICAgICAgICAjIFRoZSBkaXJlY3RvcnkgbmVlZCBub3QgZXhpc3QuCisgICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIHJhaXNlCisKK2RlZiBybXRyZWUocGF0aCk6CisgICAgdHJ5OgorICAgICAgICBfcm10cmVlKHBhdGgpCisgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICMgVW5peCByZXR1cm5zIEVOT0VOVCwgV2luZG93cyByZXR1cm5zIEVTUkNILgorICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoZXJybm8uRU5PRU5ULCBlcnJuby5FU1JDSCk6CisgICAgICAgICAgICByYWlzZQorCitkZWYgZm9yZ2V0KG1vZG5hbWUpOgorICAgICcnJyJGb3JnZXQiIGEgbW9kdWxlIHdhcyBldmVyIGltcG9ydGVkIGJ5IHJlbW92aW5nIGl0IGZyb20gc3lzLm1vZHVsZXMgYW5kCisgICAgZGVsZXRpbmcgYW55IC5weWMgYW5kIC5weW8gZmlsZXMuJycnCisgICAgdW5sb2FkKG1vZG5hbWUpCisgICAgZm9yIGRpcm5hbWUgaW4gc3lzLnBhdGg6CisgICAgICAgIHVubGluayhvcy5wYXRoLmpvaW4oZGlybmFtZSwgbW9kbmFtZSArIG9zLmV4dHNlcCArICdweWMnKSkKKyAgICAgICAgIyBEZWxldGluZyB0aGUgLnB5byBmaWxlIGNhbm5vdCBiZSB3aXRoaW4gdGhlICd0cnknIGZvciB0aGUgLnB5YyBzaW5jZQorICAgICAgICAjIHRoZSBjaGFuY2UgZXhpc3RzIHRoYXQgdGhlcmUgaXMgbm8gLnB5YyAoYW5kIHRodXMgdGhlICd0cnknIHN0YXRlbWVudAorICAgICAgICAjIGlzIGV4aXRlZCkgYnV0IHRoZXJlIGlzIGEgLnB5byBmaWxlLgorICAgICAgICB1bmxpbmsob3MucGF0aC5qb2luKGRpcm5hbWUsIG1vZG5hbWUgKyBvcy5leHRzZXAgKyAncHlvJykpCisKK2RlZiBpc19yZXNvdXJjZV9lbmFibGVkKHJlc291cmNlKToKKyAgICAiIiJUZXN0IHdoZXRoZXIgYSByZXNvdXJjZSBpcyBlbmFibGVkLiAgS25vd24gcmVzb3VyY2VzIGFyZSBzZXQgYnkKKyAgICByZWdydGVzdC5weS4iIiIKKyAgICByZXR1cm4gdXNlX3Jlc291cmNlcyBpcyBub3QgTm9uZSBhbmQgcmVzb3VyY2UgaW4gdXNlX3Jlc291cmNlcworCitkZWYgcmVxdWlyZXMocmVzb3VyY2UsIG1zZz1Ob25lKToKKyAgICAiIiJSYWlzZSBSZXNvdXJjZURlbmllZCBpZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCisKKyAgICBJZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIHRoZW4gYXV0b21hdGljYWxseSByZXR1cm4gVHJ1ZS4gIFRoZQorICAgIHBvc3NpYmlsaXR5IG9mIEZhbHNlIGJlaW5nIHJldHVybmVkIG9jY3VycyB3aGVuIHJlZ3J0ZXN0LnB5IGlzIGV4ZWN1dGluZy4iIiIKKyAgICAjIHNlZSBpZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIC0gaWYgc28sIHRyZWF0IGFzIGlmCisgICAgIyB0aGUgcmVzb3VyY2Ugd2FzIHNldAorICAgIGlmIHN5cy5fZ2V0ZnJhbWUoMSkuZl9nbG9iYWxzLmdldCgiX19uYW1lX18iKSA9PSAiX19tYWluX18iOgorICAgICAgICByZXR1cm4KKyAgICBpZiBub3QgaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSk6CisgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgbXNnID0gIlVzZSBvZiB0aGUgYCVzJyByZXNvdXJjZSBub3QgZW5hYmxlZCIgJSByZXNvdXJjZQorICAgICAgICByYWlzZSBSZXNvdXJjZURlbmllZChtc2cpCisKK0hPU1QgPSAnbG9jYWxob3N0JworCitkZWYgZmluZF91bnVzZWRfcG9ydChmYW1pbHk9c29ja2V0LkFGX0lORVQsIHNvY2t0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSk6CisgICAgIiIiUmV0dXJucyBhbiB1bnVzZWQgcG9ydCB0aGF0IHNob3VsZCBiZSBzdWl0YWJsZSBmb3IgYmluZGluZy4gIFRoaXMgaXMKKyAgICBhY2hpZXZlZCBieSBjcmVhdGluZyBhIHRlbXBvcmFyeSBzb2NrZXQgd2l0aCB0aGUgc2FtZSBmYW1pbHkgYW5kIHR5cGUgYXMKKyAgICB0aGUgJ3NvY2snIHBhcmFtZXRlciAoZGVmYXVsdCBpcyBBRl9JTkVULCBTT0NLX1NUUkVBTSksIGFuZCBiaW5kaW5nIGl0IHRvCisgICAgdGhlIHNwZWNpZmllZCBob3N0IGFkZHJlc3MgKGRlZmF1bHRzIHRvIDAuMC4wLjApIHdpdGggdGhlIHBvcnQgc2V0IHRvIDAsCisgICAgZWxpY2l0aW5nIGFuIHVudXNlZCBlcGhlbWVyYWwgcG9ydCBmcm9tIHRoZSBPUy4gIFRoZSB0ZW1wb3Jhcnkgc29ja2V0IGlzCisgICAgdGhlbiBjbG9zZWQgYW5kIGRlbGV0ZWQsIGFuZCB0aGUgZXBoZW1lcmFsIHBvcnQgaXMgcmV0dXJuZWQuCisKKyAgICBFaXRoZXIgdGhpcyBtZXRob2Qgb3IgYmluZF9wb3J0KCkgc2hvdWxkIGJlIHVzZWQgZm9yIGFueSB0ZXN0cyB3aGVyZSBhCisgICAgc2VydmVyIHNvY2tldCBuZWVkcyB0byBiZSBib3VuZCB0byBhIHBhcnRpY3VsYXIgcG9ydCBmb3IgdGhlIGR1cmF0aW9uIG9mCisgICAgdGhlIHRlc3QuICBXaGljaCBvbmUgdG8gdXNlIGRlcGVuZHMgb24gd2hldGhlciB0aGUgY2FsbGluZyBjb2RlIGlzIGNyZWF0aW5nCisgICAgYSBweXRob24gc29ja2V0LCBvciBpZiBhbiB1bnVzZWQgcG9ydCBuZWVkcyB0byBiZSBwcm92aWRlZCBpbiBhIGNvbnN0cnVjdG9yCisgICAgb3IgcGFzc2VkIHRvIGFuIGV4dGVybmFsIHByb2dyYW0gKGkuZS4gdGhlIC1hY2NlcHQgYXJndW1lbnQgdG8gb3BlbnNzbCdzCisgICAgc19zZXJ2ZXIgbW9kZSkuICBBbHdheXMgcHJlZmVyIGJpbmRfcG9ydCgpIG92ZXIgZmluZF91bnVzZWRfcG9ydCgpIHdoZXJlCisgICAgcG9zc2libGUuICBIYXJkIGNvZGVkIHBvcnRzIHNob3VsZCAqTkVWRVIqIGJlIHVzZWQuICBBcyBzb29uIGFzIGEgc2VydmVyCisgICAgc29ja2V0IGlzIGJvdW5kIHRvIGEgaGFyZCBjb2RlZCBwb3J0LCB0aGUgYWJpbGl0eSB0byBydW4gbXVsdGlwbGUgaW5zdGFuY2VzCisgICAgb2YgdGhlIHRlc3Qgc2ltdWx0YW5lb3VzbHkgb24gdGhlIHNhbWUgaG9zdCBpcyBjb21wcm9taXNlZCwgd2hpY2ggbWFrZXMgdGhlCisgICAgdGVzdCBhIHRpY2tpbmcgdGltZSBib21iIGluIGEgYnVpbGRib3QgZW52aXJvbm1lbnQuIE9uIFVuaXggYnVpbGRib3RzLCB0aGlzCisgICAgbWF5IHNpbXBseSBtYW5pZmVzdCBhcyBhIGZhaWxlZCB0ZXN0LCB3aGljaCBjYW4gYmUgcmVjb3ZlcmVkIGZyb20gd2l0aG91dAorICAgIGludGVydmVudGlvbiBpbiBtb3N0IGNhc2VzLCBidXQgb24gV2luZG93cywgdGhlIGVudGlyZSBweXRob24gcHJvY2VzcyBjYW4KKyAgICBjb21wbGV0ZWx5IGFuZCB1dHRlcmx5IHdlZGdlLCByZXF1aXJpbmcgc29tZW9uZSB0byBsb2cgaW4gdG8gdGhlIGJ1aWxkYm90CisgICAgYW5kIG1hbnVhbGx5IGtpbGwgdGhlIGFmZmVjdGVkIHByb2Nlc3MuCisKKyAgICAoVGhpcyBpcyBlYXN5IHRvIHJlcHJvZHVjZSBvbiBXaW5kb3dzLCB1bmZvcnR1bmF0ZWx5LCBhbmQgY2FuIGJlIHRyYWNlZCB0bworICAgIHRoZSBTT19SRVVTRUFERFIgc29ja2V0IG9wdGlvbiBoYXZpbmcgZGlmZmVyZW50IHNlbWFudGljcyBvbiBXaW5kb3dzIHZlcnN1cworICAgIFVuaXgvTGludXguICBPbiBVbml4LCB5b3UgY2FuJ3QgaGF2ZSB0d28gQUZfSU5FVCBTT0NLX1NUUkVBTSBzb2NrZXRzIGJpbmQsCisgICAgbGlzdGVuIGFuZCB0aGVuIGFjY2VwdCBjb25uZWN0aW9ucyBvbiBpZGVudGljYWwgaG9zdC9wb3J0cy4gIEFuIEVBRERSSU5VU0UKKyAgICBzb2NrZXQuZXJyb3Igd2lsbCBiZSByYWlzZWQgYXQgc29tZSBwb2ludCAoZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBhbmQKKyAgICB0aGUgb3JkZXIgYmluZCBhbmQgbGlzdGVuIHdlcmUgY2FsbGVkIG9uIGVhY2ggc29ja2V0KS4KKworICAgIEhvd2V2ZXIsIG9uIFdpbmRvd3MsIGlmIFNPX1JFVVNFQUREUiBpcyBzZXQgb24gdGhlIHNvY2tldHMsIG5vIEVBRERSSU5VU0UKKyAgICB3aWxsIGV2ZXIgYmUgcmFpc2VkIHdoZW4gYXR0ZW1wdGluZyB0byBiaW5kIHR3byBpZGVudGljYWwgaG9zdC9wb3J0cy4gV2hlbgorICAgIGFjY2VwdCgpIGlzIGNhbGxlZCBvbiBlYWNoIHNvY2tldCwgdGhlIHNlY29uZCBjYWxsZXIncyBwcm9jZXNzIHdpbGwgc3RlYWwKKyAgICB0aGUgcG9ydCBmcm9tIHRoZSBmaXJzdCBjYWxsZXIsIGxlYXZpbmcgdGhlbSBib3RoIGluIGFuIGF3a3dhcmRseSB3ZWRnZWQKKyAgICBzdGF0ZSB3aGVyZSB0aGV5J2xsIG5vIGxvbmdlciByZXNwb25kIHRvIGFueSBzaWduYWxzIG9yIGdyYWNlZnVsIGtpbGxzLCBhbmQKKyAgICBtdXN0IGJlIGZvcmNpYmx5IGtpbGxlZCB2aWEgT3BlblByb2Nlc3MoKS9UZXJtaW5hdGVQcm9jZXNzKCkuCisKKyAgICBUaGUgc29sdXRpb24gb24gV2luZG93cyBpcyB0byB1c2UgdGhlIFNPX0VYQ0xVU0lWRUFERFJVU0Ugc29ja2V0IG9wdGlvbgorICAgIGluc3RlYWQgb2YgU09fUkVVU0VBRERSLCB3aGljaCBlZmZlY3RpdmVseSBhZmZvcmRzIHRoZSBzYW1lIHNlbWFudGljcyBhcworICAgIFNPX1JFVVNFQUREUiBvbiBVbml4LiAgR2l2ZW4gdGhlIHByb3BlbnNpdHkgb2YgVW5peCBkZXZlbG9wZXJzIGluIHRoZSBPcGVuCisgICAgU291cmNlIHdvcmxkIGNvbXBhcmVkIHRvIFdpbmRvd3Mgb25lcywgdGhpcyBpcyBhIGNvbW1vbiBtaXN0YWtlLiAgQSBxdWljaworICAgIGxvb2sgb3ZlciBPcGVuU1NMJ3MgMC45LjhnIHNvdXJjZSBzaG93cyB0aGF0IHRoZXkgdXNlIFNPX1JFVVNFQUREUiB3aGVuCisgICAgb3BlbnNzbC5leGUgaXMgY2FsbGVkIHdpdGggdGhlICdzX3NlcnZlcicgb3B0aW9uLCBmb3IgZXhhbXBsZS4gU2VlCisgICAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI1NTAgZm9yIG1vcmUgaW5mby4gIFRoZSBmb2xsb3dpbmcgc2l0ZSBhbHNvCisgICAgaGFzIGEgdmVyeSB0aG9yb3VnaCBkZXNjcmlwdGlvbiBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGJvdGggUkVVU0VBRERSCisgICAgYW5kIEVYQ0xVU0lWRUFERFJVU0Ugb24gV2luZG93czoKKyAgICBodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzQwNjIxKFZTLjg1KS5hc3B4KQorCisgICAgWFhYOiBhbHRob3VnaCB0aGlzIGFwcHJvYWNoIGlzIGEgdmFzdCBpbXByb3ZlbWVudCBvbiBwcmV2aW91cyBhdHRlbXB0cyB0bworICAgIGVsaWNpdCB1bnVzZWQgcG9ydHMsIGl0IHJlc3RzIGhlYXZpbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZXBoZW1lcmFsCisgICAgcG9ydCByZXR1cm5lZCB0byB1cyBieSB0aGUgT1Mgd29uJ3QgaW1tZWRpYXRlbHkgYmUgZGlzaGVkIGJhY2sgb3V0IHRvIHNvbWUKKyAgICBvdGhlciBwcm9jZXNzIHdoZW4gd2UgY2xvc2UgYW5kIGRlbGV0ZSBvdXIgdGVtcG9yYXJ5IHNvY2tldCBidXQgYmVmb3JlIG91cgorICAgIGNhbGxpbmcgY29kZSBoYXMgYSBjaGFuY2UgdG8gYmluZCB0aGUgcmV0dXJuZWQgcG9ydC4gIFdlIGNhbiBkZWFsIHdpdGggdGhpcworICAgIGlzc3VlIGlmL3doZW4gd2UgY29tZSBhY3Jvc3MgaXQuIiIiCisgICAgdGVtcHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgc29ja3R5cGUpCisgICAgcG9ydCA9IGJpbmRfcG9ydCh0ZW1wc29jaykKKyAgICB0ZW1wc29jay5jbG9zZSgpCisgICAgZGVsIHRlbXBzb2NrCisgICAgcmV0dXJuIHBvcnQKKworZGVmIGJpbmRfcG9ydChzb2NrLCBob3N0PUhPU1QpOgorICAgICIiIkJpbmQgdGhlIHNvY2tldCB0byBhIGZyZWUgcG9ydCBhbmQgcmV0dXJuIHRoZSBwb3J0IG51bWJlci4gIFJlbGllcyBvbgorICAgIGVwaGVtZXJhbCBwb3J0cyBpbiBvcmRlciB0byBlbnN1cmUgd2UgYXJlIHVzaW5nIGFuIHVuYm91bmQgcG9ydC4gIFRoaXMgaXMKKyAgICBpbXBvcnRhbnQgYXMgbWFueSB0ZXN0cyBtYXkgYmUgcnVubmluZyBzaW11bHRhbmVvdXNseSwgZXNwZWNpYWxseSBpbiBhCisgICAgYnVpbGRib3QgZW52aXJvbm1lbnQuICBUaGlzIG1ldGhvZCByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZSBzb2NrLmZhbWlseQorICAgIGlzIEFGX0lORVQgYW5kIHNvY2sudHlwZSBpcyBTT0NLX1NUUkVBTSwgKmFuZCogdGhlIHNvY2tldCBoYXMgU09fUkVVU0VBRERSCisgICAgb3IgU09fUkVVU0VQT1JUIHNldCBvbiBpdC4gIFRlc3RzIHNob3VsZCAqbmV2ZXIqIHNldCB0aGVzZSBzb2NrZXQgb3B0aW9ucworICAgIGZvciBUQ1AvSVAgc29ja2V0cy4gIFRoZSBvbmx5IGNhc2UgZm9yIHNldHRpbmcgdGhlc2Ugb3B0aW9ucyBpcyB0ZXN0aW5nCisgICAgbXVsdGljYXN0aW5nIHZpYSBtdWx0aXBsZSBVRFAgc29ja2V0cy4KKworICAgIEFkZGl0aW9uYWxseSwgaWYgdGhlIFNPX0VYQ0xVU0lWRUFERFJVU0Ugc29ja2V0IG9wdGlvbiBpcyBhdmFpbGFibGUgKGkuZS4KKyAgICBvbiBXaW5kb3dzKSwgaXQgd2lsbCBiZSBzZXQgb24gdGhlIHNvY2tldC4gIFRoaXMgd2lsbCBwcmV2ZW50IGFueW9uZSBlbHNlCisgICAgZnJvbSBiaW5kKCknaW5nIHRvIG91ciBob3N0L3BvcnQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdGVzdC4KKyAgICAiIiIKKyAgICBpZiBzb2NrLmZhbWlseSA9PSBzb2NrZXQuQUZfSU5FVCBhbmQgc29jay50eXBlID09IHNvY2tldC5TT0NLX1NUUkVBTToKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT19SRVVTRUFERFInKToKKyAgICAgICAgICAgIGlmIHNvY2suZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUikgPT0gMToKKyAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJ0ZXN0cyBzaG91bGQgbmV2ZXIgc2V0IHRoZSBTT19SRVVTRUFERFIgIiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQgb3B0aW9uIG9uIFRDUC9JUCBzb2NrZXRzISIpCisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnU09fUkVVU0VQT1JUJyk6CisgICAgICAgICAgICBpZiBzb2NrLmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRVBPUlQpID09IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgidGVzdHMgc2hvdWxkIG5ldmVyIHNldCB0aGUgU09fUkVVU0VQT1JUICIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29ja2V0IG9wdGlvbiBvbiBUQ1AvSVAgc29ja2V0cyEiKQorICAgICAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ1NPX0VYQ0xVU0lWRUFERFJVU0UnKToKKyAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0VYQ0xVU0lWRUFERFJVU0UsIDEpCisKKyAgICBzb2NrLmJpbmQoKGhvc3QsIDApKQorICAgIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KKyAgICByZXR1cm4gcG9ydAorCitGVVpaID0gMWUtNgorCitkZWYgZmNtcCh4LCB5KTogIyBmdXp6eSBjb21wYXJpc29uIGZ1bmN0aW9uCisgICAgaWYgaXNpbnN0YW5jZSh4LCBmbG9hdCkgb3IgaXNpbnN0YW5jZSh5LCBmbG9hdCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1enogPSAoYWJzKHgpICsgYWJzKHkpKSAqIEZVWloKKyAgICAgICAgICAgIGlmIGFicyh4LXkpIDw9IGZ1eno6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgIGVsaWYgdHlwZSh4KSA9PSB0eXBlKHkpIGFuZCBpc2luc3RhbmNlKHgsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShtaW4obGVuKHgpLCBsZW4oeSkpKToKKyAgICAgICAgICAgIG91dGNvbWUgPSBmY21wKHhbaV0sIHlbaV0pCisgICAgICAgICAgICBpZiBvdXRjb21lICE9IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIG91dGNvbWUKKyAgICAgICAgcmV0dXJuIChsZW4oeCkgPiBsZW4oeSkpIC0gKGxlbih4KSA8IGxlbih5KSkKKyAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKKworCisjIEEgY29uc3RhbnQgbGlrZWx5IGxhcmdlciB0aGFuIHRoZSB1bmRlcmx5aW5nIE9TIHBpcGUgYnVmZmVyIHNpemUsIHRvCisjIG1ha2Ugd3JpdGVzIGJsb2NraW5nLgorIyBXaW5kb3dzIGxpbWl0IHNlZW1zIHRvIGJlIGFyb3VuZCA1MTIgQiwgYW5kIG1hbnkgVW5peCBrZXJuZWxzIGhhdmUgYQorIyA2NCBLaUIgcGlwZSBidWZmZXIgc2l6ZSBvciAxNiAqIFBBR0VfU0laRTogdGFrZSBhIGZldyBtZWdzIHRvIGJlIHN1cmUuCisjIChzZWUgaXNzdWUgIzE3ODM1IGZvciBhIGRpc2N1c3Npb24gb2YgdGhpcyBudW1iZXIpLgorUElQRV9NQVhfU0laRSA9IDQgKjEwMjQgKiAxMDI0ICsgMQorCisKK3RyeToKKyAgICB1bmljb2RlCisgICAgaGF2ZV91bmljb2RlID0gVHJ1ZQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBoYXZlX3VuaWNvZGUgPSBGYWxzZQorCitpc19qeXRob24gPSBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpCisKKyMgRmlsZW5hbWUgdXNlZCBmb3IgdGVzdGluZworaWYgb3MubmFtZSA9PSAnamF2YSc6CisgICAgIyBKeXRob24gZGlzYWxsb3dzIEAgaW4gbW9kdWxlIG5hbWVzCisgICAgVEVTVEZOID0gJyR0ZXN0JworZWxpZiBvcy5uYW1lID09ICdyaXNjb3MnOgorICAgIFRFU1RGTiA9ICd0ZXN0ZmlsZScKK2Vsc2U6CisgICAgVEVTVEZOID0gJ0B0ZXN0JworICAgICMgVW5pY29kZSBuYW1lIG9ubHkgdXNlZCBpZiBURVNUX0ZOX0VOQ09ESU5HIGV4aXN0cyBmb3IgdGhlIHBsYXRmb3JtLgorICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgIyBBc3N1bWluZyBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkhPXN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKQorICAgICAgICAjIFRFU1RGTl9VTklDT0RFIGlzIGEgZmlsZW5hbWUgdGhhdCBjYW4gYmUgZW5jb2RlZCB1c2luZyB0aGUKKyAgICAgICAgIyBmaWxlIHN5c3RlbSBlbmNvZGluZywgYnV0ICpub3QqIHdpdGggdGhlIGRlZmF1bHQgKGFzY2lpKSBlbmNvZGluZworICAgICAgICBpZiBpc2luc3RhbmNlKCcnLCB1bmljb2RlKToKKyAgICAgICAgICAgICMgcHl0aG9uIC1VCisgICAgICAgICAgICAjIFhYWCBwZXJoYXBzIHVuaWNvZGUoKSBzaG91bGQgYWNjZXB0IFVuaWNvZGUgc3RyaW5ncz8KKyAgICAgICAgICAgIFRFU1RGTl9VTklDT0RFID0gIkB0ZXN0LVx4ZTBceGYyIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyAyIGxhdGluIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBURVNURk5fVU5JQ09ERSA9IHVuaWNvZGUoIkB0ZXN0LVx4ZTBceGYyIiwgImxhdGluLTEiKQorICAgICAgICBURVNURk5fRU5DT0RJTkcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKKyAgICAgICAgIyBURVNURk5fVU5FTkNPREFCTEUgaXMgYSBmaWxlbmFtZSB0aGF0IHNob3VsZCAqbm90KiBiZQorICAgICAgICAjIGFibGUgdG8gYmUgZW5jb2RlZCBieSAqZWl0aGVyKiB0aGUgZGVmYXVsdCBvciBmaWxlc3lzdGVtIGVuY29kaW5nLgorICAgICAgICAjIFRoaXMgdGVzdCByZWFsbHkgb25seSBtYWtlcyBzZW5zZSBvbiBXaW5kb3dzIE5UIHBsYXRmb3JtcworICAgICAgICAjIHdoaWNoIGhhdmUgc3BlY2lhbCBVbmljb2RlIHN1cHBvcnQgaW4gcG9zaXhtb2R1bGUuCisgICAgICAgIGlmIChub3QgaGFzYXR0cihzeXMsICJnZXR3aW5kb3dzdmVyc2lvbiIpIG9yCisgICAgICAgICAgICAgICAgc3lzLmdldHdpbmRvd3N2ZXJzaW9uKClbM10gPCAyKTogIyAgMD13aW4zMnMgb3IgMT05eC9NRQorICAgICAgICAgICAgVEVTVEZOX1VORU5DT0RBQkxFID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBKYXBhbmVzZSBjaGFyYWN0ZXJzIChJIHRoaW5rIC0gZnJvbSBidWcgODQ2MTMzKQorICAgICAgICAgICAgVEVTVEZOX1VORU5DT0RBQkxFID0gZXZhbCgndSJAdGVzdC1cdTUxNzFcdTY3MDlcdTMwNTVcdTMwOGNcdTMwOGIiJykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFhYWCAtIE5vdGUgLSBzaG91bGQgYmUgdXNpbmcgVEVTVEZOX0VOQ09ESU5HIGhlcmUgLSBidXQgZm9yCisgICAgICAgICAgICAgICAgIyBXaW5kb3dzLCAibWJjcyIgY3VycmVudGx5IGFsd2F5cyBvcGVyYXRlcyBhcyBpZiBpbgorICAgICAgICAgICAgICAgICMgZXJyb3JzPWlnbm9yZScgbW9kZSAtIGhlbmNlIHdlIGdldCAnPycgY2hhcmFjdGVycyByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICMgdGhlIGV4Y2VwdGlvbi4gICdMYXRpbjEnIG9wZXJhdGVzIGFzIHdlIGV4cGVjdCAtIGllLCBmYWlscy4KKyAgICAgICAgICAgICAgICAjIFNlZSBbIDg1MDk5NyBdIG1iY3MgZW5jb2RpbmcgaWdub3JlcyBlcnJvcnMKKyAgICAgICAgICAgICAgICBURVNURk5fVU5FTkNPREFCTEUuZW5jb2RlKCJMYXRpbjEiKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50IFwKKyAgICAgICAgICAgICAgICAnV0FSTklORzogVGhlIGZpbGVuYW1lICVyIENBTiBiZSBlbmNvZGVkIGJ5IHRoZSBmaWxlc3lzdGVtLiAgJyBcCisgICAgICAgICAgICAgICAgJ1VuaWNvZGUgZmlsZW5hbWUgdGVzdHMgbWF5IG5vdCBiZSBlZmZlY3RpdmUnIFwKKyAgICAgICAgICAgICAgICAlIFRFU1RGTl9VTkVOQ09EQUJMRQorCisKKyMgRGlzYW1iaWd1YXRlIFRFU1RGTiBmb3IgcGFyYWxsZWwgdGVzdGluZywgd2hpbGUgbGV0dGluZyBpdCByZW1haW4gYSB2YWxpZAorIyBtb2R1bGUgbmFtZS4KK1RFU1RGTiA9ICJ7fV97fV90bXAiLmZvcm1hdChURVNURk4sIG9zLmdldHBpZCgpKQorCisjIFNhdmUgdGhlIGluaXRpYWwgY3dkCitTQVZFRENXRCA9IG9zLmdldGN3ZCgpCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgdGVtcF9jd2QobmFtZT0ndGVtcGN3ZCcsIHF1aWV0PUZhbHNlKToKKyAgICAiIiIKKyAgICBDb250ZXh0IG1hbmFnZXIgdGhhdCBjcmVhdGVzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgc2V0IGl0IGFzIENXRC4KKworICAgIFRoZSBuZXcgQ1dEIGlzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBpdCdzIG5hbWVkICpuYW1lKi4KKyAgICBJZiAqcXVpZXQqIGlzIEZhbHNlIChkZWZhdWx0KSBhbmQgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yIGNoYW5nZQorICAgIHRoZSBDV0QsIGFuIGVycm9yIGlzIHJhaXNlZC4gIElmIGl0J3MgVHJ1ZSwgb25seSBhIHdhcm5pbmcgaXMgcmFpc2VkCisgICAgYW5kIHRoZSBvcmlnaW5hbCBDV0QgaXMgdXNlZC4KKyAgICAiIiIKKyAgICBpZiBoYXZlX3VuaWNvZGUgYW5kIGlzaW5zdGFuY2UobmFtZSwgdW5pY29kZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkgb3IgJ2FzY2lpJykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgndW5hYmxlIHRvIGVuY29kZSB0aGUgY3dkIG5hbWUgd2l0aCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBmaWxlc3lzdGVtIGVuY29kaW5nLicpCisgICAgc2F2ZWRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICBpc190ZW1wb3JhcnkgPSBGYWxzZQorICAgIHRyeToKKyAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgb3MuY2hkaXIobmFtZSkKKyAgICAgICAgaXNfdGVtcG9yYXJ5ID0gVHJ1ZQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICByYWlzZQorICAgICAgICB3YXJuaW5ncy53YXJuKCd0ZXN0cyBtYXkgZmFpbCwgdW5hYmxlIHRvIGNoYW5nZSB0aGUgQ1dEIHRvICcgKyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCBzdGFja2xldmVsPTMpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBvcy5nZXRjd2QoKQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLmNoZGlyKHNhdmVkX2RpcikKKyAgICAgICAgaWYgaXNfdGVtcG9yYXJ5OgorICAgICAgICAgICAgcm10cmVlKG5hbWUpCisKKworZGVmIGZpbmRmaWxlKGZpbGUsIGhlcmU9X19maWxlX18sIHN1YmRpcj1Ob25lKToKKyAgICAiIiJUcnkgdG8gZmluZCBhIGZpbGUgb24gc3lzLnBhdGggYW5kIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gIElmIGl0IGlzIG5vdAorICAgIGZvdW5kIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGlzIHJldHVybmVkICh0aGlzIGRvZXMgbm90CisgICAgbmVjZXNzYXJpbHkgc2lnbmFsIGZhaWx1cmU7IGNvdWxkIHN0aWxsIGJlIHRoZSBsZWdpdGltYXRlIHBhdGgpLiIiIgorICAgIGlmIG9zLnBhdGguaXNhYnMoZmlsZSk6CisgICAgICAgIHJldHVybiBmaWxlCisgICAgaWYgc3ViZGlyIGlzIG5vdCBOb25lOgorICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHN1YmRpciwgZmlsZSkKKyAgICBwYXRoID0gc3lzLnBhdGgKKyAgICBwYXRoID0gW29zLnBhdGguZGlybmFtZShoZXJlKV0gKyBwYXRoCisgICAgZm9yIGRuIGluIHBhdGg6CisgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGRuLCBmaWxlKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbik6IHJldHVybiBmbgorICAgIHJldHVybiBmaWxlCisKK2RlZiBzb3J0ZGljdChkaWN0KToKKyAgICAiTGlrZSByZXByKGRpY3QpLCBidXQgaW4gc29ydGVkIG9yZGVyLiIKKyAgICBpdGVtcyA9IGRpY3QuaXRlbXMoKQorICAgIGl0ZW1zLnNvcnQoKQorICAgIHJlcHJwYWlycyA9IFsiJXI6ICVyIiAlIHBhaXIgZm9yIHBhaXIgaW4gaXRlbXNdCisgICAgd2l0aGNvbW1hcyA9ICIsICIuam9pbihyZXBycGFpcnMpCisgICAgcmV0dXJuICJ7JXN9IiAlIHdpdGhjb21tYXMKKworZGVmIG1ha2VfYmFkX2ZkKCk6CisgICAgIiIiCisgICAgQ3JlYXRlIGFuIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yIGJ5IG9wZW5pbmcgYW5kIGNsb3NpbmcgYSBmaWxlIGFuZCByZXR1cm4KKyAgICBpdHMgZmQuCisgICAgIiIiCisgICAgZmlsZSA9IG9wZW4oVEVTVEZOLCAid2IiKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGZpbGUuZmlsZW5vKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKworZGVmIGNoZWNrX3N5bnRheF9lcnJvcih0ZXN0Y2FzZSwgc3RhdGVtZW50KToKKyAgICB0ZXN0Y2FzZS5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIHN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZXN0IHN0cmluZz4nLCAnZXhlYycpCisKK2RlZiBvcGVuX3VybHJlc291cmNlKHVybCwgY2hlY2s9Tm9uZSk6CisgICAgaW1wb3J0IHVybHBhcnNlLCB1cmxsaWIyCisKKyAgICBmaWxlbmFtZSA9IHVybHBhcnNlLnVybHBhcnNlKHVybClbMl0uc3BsaXQoJy8nKVstMV0gIyAnLyc6IGl0J3MgVVJMIQorCisgICAgZm4gPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImRhdGEiLCBmaWxlbmFtZSkKKworICAgIGRlZiBjaGVja192YWxpZF9maWxlKGZuKToKKyAgICAgICAgZiA9IG9wZW4oZm4pCisgICAgICAgIGlmIGNoZWNrIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBlbGlmIGNoZWNrKGYpOgorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmLmNsb3NlKCkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgZiA9IGNoZWNrX3ZhbGlkX2ZpbGUoZm4pCisgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICB1bmxpbmsoZm4pCisKKyAgICAjIFZlcmlmeSB0aGUgcmVxdWlyZW1lbnQgYmVmb3JlIGRvd25sb2FkaW5nIHRoZSBmaWxlCisgICAgcmVxdWlyZXMoJ3VybGZldGNoJykKKworICAgIHByaW50ID4+IGdldF9vcmlnaW5hbF9zdGRvdXQoKSwgJ1x0ZmV0Y2hpbmcgJXMgLi4uJyAlIHVybAorICAgIGYgPSB1cmxsaWIyLnVybG9wZW4odXJsLCB0aW1lb3V0PTE1KQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAid2IiKSBhcyBvdXQ6CisgICAgICAgICAgICBzID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHdoaWxlIHM6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKHMpCisgICAgICAgICAgICAgICAgcyA9IGYucmVhZCgpCisgICAgZmluYWxseToKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBmID0gY2hlY2tfdmFsaWRfZmlsZShmbikKKyAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gZgorICAgIHJhaXNlIFRlc3RGYWlsZWQoJ2ludmFsaWQgcmVzb3VyY2UgIiVzIicgJSBmbikKKworCitjbGFzcyBXYXJuaW5nc1JlY29yZGVyKG9iamVjdCk6CisgICAgIiIiQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgdGhlIHdhcm5pbmdzIGxpc3QgcmV0dXJuZWQgb24KKyAgICAgICBlbnRyeSB0byB0aGUgd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKSBjb250ZXh0IG1hbmFnZXIuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhcm5pbmdzX2xpc3QpOgorICAgICAgICBzZWxmLl93YXJuaW5ncyA9IHdhcm5pbmdzX2xpc3QKKyAgICAgICAgc2VsZi5fbGFzdCA9IDAKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgaWYgbGVuKHNlbGYuX3dhcm5pbmdzKSA+IHNlbGYuX2xhc3Q6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl93YXJuaW5nc1stMV0sIGF0dHIpCisgICAgICAgIGVsaWYgYXR0ciBpbiB3YXJuaW5ncy5XYXJuaW5nTWVzc2FnZS5fV0FSTklOR19ERVRBSUxTOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIiVyIGhhcyBubyBhdHRyaWJ1dGUgJXIiICUgKHNlbGYsIGF0dHIpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHdhcm5pbmdzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fd2FybmluZ3Nbc2VsZi5fbGFzdDpdCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuX2xhc3QgPSBsZW4oc2VsZi5fd2FybmluZ3MpCisKKworZGVmIF9maWx0ZXJ3YXJuaW5ncyhmaWx0ZXJzLCBxdWlldD1GYWxzZSk6CisgICAgIiIiQ2F0Y2ggdGhlIHdhcm5pbmdzLCB0aGVuIGNoZWNrIGlmIGFsbCB0aGUgZXhwZWN0ZWQKKyAgICB3YXJuaW5ncyBoYXZlIGJlZW4gcmFpc2VkIGFuZCByZS1yYWlzZSB1bmV4cGVjdGVkIHdhcm5pbmdzLgorICAgIElmICdxdWlldCcgaXMgVHJ1ZSwgb25seSByZS1yYWlzZSB0aGUgdW5leHBlY3RlZCB3YXJuaW5ncy4KKyAgICAiIiIKKyAgICAjIENsZWFyIHRoZSB3YXJuaW5nIHJlZ2lzdHJ5IG9mIHRoZSBjYWxsaW5nIG1vZHVsZQorICAgICMgaW4gb3JkZXIgdG8gcmUtcmFpc2UgdGhlIHdhcm5pbmdzLgorICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgyKQorICAgIHJlZ2lzdHJ5ID0gZnJhbWUuZl9nbG9iYWxzLmdldCgnX193YXJuaW5ncmVnaXN0cnlfXycpCisgICAgaWYgcmVnaXN0cnk6CisgICAgICAgIHJlZ2lzdHJ5LmNsZWFyKCkKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAjIFNldCBmaWx0ZXIgImFsd2F5cyIgdG8gcmVjb3JkIGFsbCB3YXJuaW5ncy4gIEJlY2F1c2UKKyAgICAgICAgIyB0ZXN0X3dhcm5pbmdzIHN3YXAgdGhlIG1vZHVsZSwgd2UgbmVlZCB0byBsb29rIHVwIGluCisgICAgICAgICMgdGhlIHN5cy5tb2R1bGVzIGRpY3Rpb25hcnkuCisgICAgICAgIHN5cy5tb2R1bGVzWyd3YXJuaW5ncyddLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgeWllbGQgV2FybmluZ3NSZWNvcmRlcih3KQorICAgICMgRmlsdGVyIHRoZSByZWNvcmRlZCB3YXJuaW5ncworICAgIHJlcmFpc2UgPSBbd2FybmluZy5tZXNzYWdlIGZvciB3YXJuaW5nIGluIHddCisgICAgbWlzc2luZyA9IFtdCisgICAgZm9yIG1zZywgY2F0IGluIGZpbHRlcnM6CisgICAgICAgIHNlZW4gPSBGYWxzZQorICAgICAgICBmb3IgZXhjIGluIHJlcmFpc2VbOl06CisgICAgICAgICAgICBtZXNzYWdlID0gc3RyKGV4YykKKyAgICAgICAgICAgICMgRmlsdGVyIG91dCB0aGUgbWF0Y2hpbmcgbWVzc2FnZXMKKyAgICAgICAgICAgIGlmIChyZS5tYXRjaChtc2csIG1lc3NhZ2UsIHJlLkkpIGFuZAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoZXhjLl9fY2xhc3NfXywgY2F0KSk6CisgICAgICAgICAgICAgICAgc2VlbiA9IFRydWUKKyAgICAgICAgICAgICAgICByZXJhaXNlLnJlbW92ZShleGMpCisgICAgICAgIGlmIG5vdCBzZWVuIGFuZCBub3QgcXVpZXQ6CisgICAgICAgICAgICAjIFRoaXMgZmlsdGVyIGNhdWdodCBub3RoaW5nCisgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgobXNnLCBjYXQuX19uYW1lX18pKQorICAgIGlmIHJlcmFpc2U6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ1bmhhbmRsZWQgd2FybmluZyAlciIgJSByZXJhaXNlWzBdKQorICAgIGlmIG1pc3Npbmc6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJmaWx0ZXIgKCVyLCAlcykgZGlkIG5vdCBjYXRjaCBhbnkgd2FybmluZyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nWzBdKQorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgY2hlY2tfd2FybmluZ3MoKmZpbHRlcnMsICoqa3dhcmdzKToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gc2lsZW5jZSB3YXJuaW5ncy4KKworICAgIEFjY2VwdCAyLXR1cGxlcyBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgKCJtZXNzYWdlIHJlZ2V4cCIsIFdhcm5pbmdDYXRlZ29yeSkKKworICAgIE9wdGlvbmFsIGFyZ3VtZW50OgorICAgICAtIGlmICdxdWlldCcgaXMgVHJ1ZSwgaXQgZG9lcyBub3QgZmFpbCBpZiBhIGZpbHRlciBjYXRjaGVzIG5vdGhpbmcKKyAgICAgICAgKGRlZmF1bHQgVHJ1ZSB3aXRob3V0IGFyZ3VtZW50LAorICAgICAgICAgZGVmYXVsdCBGYWxzZSBpZiBzb21lIGZpbHRlcnMgYXJlIGRlZmluZWQpCisKKyAgICBXaXRob3V0IGFyZ3VtZW50LCBpdCBkZWZhdWx0cyB0bzoKKyAgICAgICAgY2hlY2tfd2FybmluZ3MoKCIiLCBXYXJuaW5nKSwgcXVpZXQ9VHJ1ZSkKKyAgICAiIiIKKyAgICBxdWlldCA9IGt3YXJncy5nZXQoJ3F1aWV0JykKKyAgICBpZiBub3QgZmlsdGVyczoKKyAgICAgICAgZmlsdGVycyA9ICgoIiIsIFdhcm5pbmcpLCkKKyAgICAgICAgIyBQcmVzZXJ2ZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgICAgICAgIGlmIHF1aWV0IGlzIE5vbmU6CisgICAgICAgICAgICBxdWlldCA9IFRydWUKKyAgICByZXR1cm4gX2ZpbHRlcndhcm5pbmdzKGZpbHRlcnMsIHF1aWV0KQorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgY2hlY2tfcHkza193YXJuaW5ncygqZmlsdGVycywgKiprd2FyZ3MpOgorICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBzaWxlbmNlIHB5M2sgd2FybmluZ3MuCisKKyAgICBBY2NlcHQgMi10dXBsZXMgYXMgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICgibWVzc2FnZSByZWdleHAiLCBXYXJuaW5nQ2F0ZWdvcnkpCisKKyAgICBPcHRpb25hbCBhcmd1bWVudDoKKyAgICAgLSBpZiAncXVpZXQnIGlzIFRydWUsIGl0IGRvZXMgbm90IGZhaWwgaWYgYSBmaWx0ZXIgY2F0Y2hlcyBub3RoaW5nCisgICAgICAgIChkZWZhdWx0IEZhbHNlKQorCisgICAgV2l0aG91dCBhcmd1bWVudCwgaXQgZGVmYXVsdHMgdG86CisgICAgICAgIGNoZWNrX3B5M2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWlldD1GYWxzZSkKKyAgICAiIiIKKyAgICBpZiBzeXMucHkza3dhcm5pbmc6CisgICAgICAgIGlmIG5vdCBmaWx0ZXJzOgorICAgICAgICAgICAgZmlsdGVycyA9ICgoIiIsIERlcHJlY2F0aW9uV2FybmluZyksKQorICAgIGVsc2U6CisgICAgICAgICMgSXQgc2hvdWxkIG5vdCByYWlzZSBhbnkgcHkzayB3YXJuaW5nCisgICAgICAgIGZpbHRlcnMgPSAoKQorICAgIHJldHVybiBfZmlsdGVyd2FybmluZ3MoZmlsdGVycywga3dhcmdzLmdldCgncXVpZXQnKSkKKworCitjbGFzcyBDbGVhbkltcG9ydChvYmplY3QpOgorICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBmb3JjZSBpbXBvcnQgdG8gcmV0dXJuIGEgbmV3IG1vZHVsZSByZWZlcmVuY2UuCisKKyAgICBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBtb2R1bGUtbGV2ZWwgYmVoYXZpb3Vycywgc3VjaCBhcworICAgIHRoZSBlbWlzc2lvbiBvZiBhIERlcHJlY2F0aW9uV2FybmluZyBvbiBpbXBvcnQuCisKKyAgICBVc2UgbGlrZSB0aGlzOgorCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoImZvbyIpOgorICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoImZvbyIpICMgbmV3IHJlZmVyZW5jZQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICptb2R1bGVfbmFtZXMpOgorICAgICAgICBzZWxmLm9yaWdpbmFsX21vZHVsZXMgPSBzeXMubW9kdWxlcy5jb3B5KCkKKyAgICAgICAgZm9yIG1vZHVsZV9uYW1lIGluIG1vZHVsZV9uYW1lczoKKyAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQorICAgICAgICAgICAgICAgICMgSXQgaXMgcG9zc2libGUgdGhhdCBtb2R1bGVfbmFtZSBpcyBqdXN0IGFuIGFsaWFzIGZvcgorICAgICAgICAgICAgICAgICMgYW5vdGhlciBtb2R1bGUgKGUuZy4gc3R1YiBmb3IgbW9kdWxlcyByZW5hbWVkIGluIDMueCkuCisgICAgICAgICAgICAgICAgIyBJbiB0aGF0IGNhc2UsIHdlIGFsc28gbmVlZCBkZWxldGUgdGhlIHJlYWwgbW9kdWxlIHRvIGNsZWFyCisgICAgICAgICAgICAgICAgIyB0aGUgaW1wb3J0IGNhY2hlLgorICAgICAgICAgICAgICAgIGlmIG1vZHVsZS5fX25hbWVfXyAhPSBtb2R1bGVfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZS5fX25hbWVfX10KKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICppZ25vcmVfZXhjKToKKyAgICAgICAgc3lzLm1vZHVsZXMudXBkYXRlKHNlbGYub3JpZ2luYWxfbW9kdWxlcykKKworCitjbGFzcyBFbnZpcm9ubWVudFZhckd1YXJkKFVzZXJEaWN0LkRpY3RNaXhpbik6CisKKyAgICAiIiJDbGFzcyB0byBoZWxwIHByb3RlY3QgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHByb3Blcmx5LiAgQ2FuIGJlIHVzZWQgYXMKKyAgICBhIGNvbnRleHQgbWFuYWdlci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW52aXJvbiA9IG9zLmVudmlyb24KKyAgICAgICAgc2VsZi5fY2hhbmdlZCA9IHt9CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgZW52dmFyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Vudmlyb25bZW52dmFyXQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGVudnZhciwgdmFsdWUpOgorICAgICAgICAjIFJlbWVtYmVyIHRoZSBpbml0aWFsIHZhbHVlIG9uIHRoZSBmaXJzdCBhY2Nlc3MKKyAgICAgICAgaWYgZW52dmFyIG5vdCBpbiBzZWxmLl9jaGFuZ2VkOgorICAgICAgICAgICAgc2VsZi5fY2hhbmdlZFtlbnZ2YXJdID0gc2VsZi5fZW52aXJvbi5nZXQoZW52dmFyKQorICAgICAgICBzZWxmLl9lbnZpcm9uW2VudnZhcl0gPSB2YWx1ZQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGVudnZhcik6CisgICAgICAgICMgUmVtZW1iZXIgdGhlIGluaXRpYWwgdmFsdWUgb24gdGhlIGZpcnN0IGFjY2VzcworICAgICAgICBpZiBlbnZ2YXIgbm90IGluIHNlbGYuX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLl9jaGFuZ2VkW2VudnZhcl0gPSBzZWxmLl9lbnZpcm9uLmdldChlbnZ2YXIpCisgICAgICAgIGlmIGVudnZhciBpbiBzZWxmLl9lbnZpcm9uOgorICAgICAgICAgICAgZGVsIHNlbGYuX2Vudmlyb25bZW52dmFyXQorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9lbnZpcm9uLmtleXMoKQorCisgICAgZGVmIHNldChzZWxmLCBlbnZ2YXIsIHZhbHVlKToKKyAgICAgICAgc2VsZltlbnZ2YXJdID0gdmFsdWUKKworICAgIGRlZiB1bnNldChzZWxmLCBlbnZ2YXIpOgorICAgICAgICBkZWwgc2VsZltlbnZ2YXJdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICppZ25vcmVfZXhjKToKKyAgICAgICAgZm9yIChrLCB2KSBpbiBzZWxmLl9jaGFuZ2VkLml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgayBpbiBzZWxmLl9lbnZpcm9uOgorICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZW52aXJvbltrXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9lbnZpcm9uW2tdID0gdgorICAgICAgICBvcy5lbnZpcm9uID0gc2VsZi5fZW52aXJvbgorCisKK2NsYXNzIERpcnNPblN5c1BhdGgob2JqZWN0KToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gdGVtcG9yYXJpbHkgYWRkIGRpcmVjdG9yaWVzIHRvIHN5cy5wYXRoLgorCisgICAgVGhpcyBtYWtlcyBhIGNvcHkgb2Ygc3lzLnBhdGgsIGFwcGVuZHMgYW55IGRpcmVjdG9yaWVzIGdpdmVuCisgICAgYXMgcG9zaXRpb25hbCBhcmd1bWVudHMsIHRoZW4gcmV2ZXJ0cyBzeXMucGF0aCB0byB0aGUgY29waWVkCisgICAgc2V0dGluZ3Mgd2hlbiB0aGUgY29udGV4dCBlbmRzLgorCisgICAgTm90ZSB0aGF0ICphbGwqIHN5cy5wYXRoIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGJvZHkgb2YgdGhlCisgICAgY29udGV4dCBtYW5hZ2VyLCBpbmNsdWRpbmcgcmVwbGFjZW1lbnQgb2YgdGhlIG9iamVjdCwKKyAgICB3aWxsIGJlIHJldmVydGVkIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICpwYXRocyk6CisgICAgICAgIHNlbGYub3JpZ2luYWxfdmFsdWUgPSBzeXMucGF0aFs6XQorICAgICAgICBzZWxmLm9yaWdpbmFsX29iamVjdCA9IHN5cy5wYXRoCisgICAgICAgIHN5cy5wYXRoLmV4dGVuZChwYXRocykKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmlnbm9yZV9leGMpOgorICAgICAgICBzeXMucGF0aCA9IHNlbGYub3JpZ2luYWxfb2JqZWN0CisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5vcmlnaW5hbF92YWx1ZQorCisKK2NsYXNzIFRyYW5zaWVudFJlc291cmNlKG9iamVjdCk6CisKKyAgICAiIiJSYWlzZSBSZXNvdXJjZURlbmllZCBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIHdoaWxlIHRoZSBjb250ZXh0IG1hbmFnZXIKKyAgICBpcyBpbiBlZmZlY3QgdGhhdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIGFuZCBhdHRyaWJ1dGVzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4YywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBzZWxmLmF0dHJzID0ga3dhcmdzCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGVfPU5vbmUsIHZhbHVlPU5vbmUsIHRyYWNlYmFjaz1Ob25lKToKKyAgICAgICAgIiIiSWYgdHlwZV8gaXMgYSBzdWJjbGFzcyBvZiBzZWxmLmV4YyBhbmQgdmFsdWUgaGFzIGF0dHJpYnV0ZXMgbWF0Y2hpbmcKKyAgICAgICAgc2VsZi5hdHRycywgcmFpc2UgUmVzb3VyY2VEZW5pZWQuICBPdGhlcndpc2UgbGV0IHRoZSBleGNlcHRpb24KKyAgICAgICAgcHJvcGFnYXRlIChpZiBhbnkpLiIiIgorICAgICAgICBpZiB0eXBlXyBpcyBub3QgTm9uZSBhbmQgaXNzdWJjbGFzcyhzZWxmLmV4YywgdHlwZV8pOgorICAgICAgICAgICAgZm9yIGF0dHIsIGF0dHJfdmFsdWUgaW4gc2VsZi5hdHRycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cih2YWx1ZSwgYXR0cik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cih2YWx1ZSwgYXR0cikgIT0gYXR0cl92YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUmVzb3VyY2VEZW5pZWQoImFuIG9wdGlvbmFsIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUiKQorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgdHJhbnNpZW50X2ludGVybmV0KHJlc291cmNlX25hbWUsIHRpbWVvdXQ9MzAuMCwgZXJybm9zPSgpKToKKyAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCByYWlzZXMgUmVzb3VyY2VEZW5pZWQgd2hlbiB2YXJpb3VzIGlzc3VlcworICAgIHdpdGggdGhlIEludGVybmV0IGNvbm5lY3Rpb24gbWFuaWZlc3QgdGhlbXNlbHZlcyBhcyBleGNlcHRpb25zLiIiIgorICAgIGRlZmF1bHRfZXJybm9zID0gWworICAgICAgICAoJ0VDT05OUkVGVVNFRCcsIDExMSksCisgICAgICAgICgnRUNPTk5SRVNFVCcsIDEwNCksCisgICAgICAgICgnRUhPU1RVTlJFQUNIJywgMTEzKSwKKyAgICAgICAgKCdFTkVUVU5SRUFDSCcsIDEwMSksCisgICAgICAgICgnRVRJTUVET1VUJywgMTEwKSwKKyAgICBdCisgICAgZGVmYXVsdF9nYWlfZXJybm9zID0gWworICAgICAgICAoJ0VBSV9BR0FJTicsIC0zKSwKKyAgICAgICAgKCdFQUlfRkFJTCcsIC00KSwKKyAgICAgICAgKCdFQUlfTk9OQU1FJywgLTIpLAorICAgICAgICAoJ0VBSV9OT0RBVEEnLCAtNSksCisgICAgICAgICMgV2luZG93cyBkZWZpbmVzIEVBSV9OT0RBVEEgYXMgMTEwMDEgYnV0IGlkaW90aWMgZ2V0YWRkcmluZm8oKQorICAgICAgICAjIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHJldHVybnMgV1NBTk9fREFUQSBpLmUuIDExMDA0LgorICAgICAgICAoJ1dTQU5PX0RBVEEnLCAxMTAwNCksCisgICAgXQorCisgICAgZGVuaWVkID0gUmVzb3VyY2VEZW5pZWQoIlJlc291cmNlICclcycgaXMgbm90IGF2YWlsYWJsZSIgJSByZXNvdXJjZV9uYW1lKQorICAgIGNhcHR1cmVkX2Vycm5vcyA9IGVycm5vcworICAgIGdhaV9lcnJub3MgPSBbXQorICAgIGlmIG5vdCBjYXB0dXJlZF9lcnJub3M6CisgICAgICAgIGNhcHR1cmVkX2Vycm5vcyA9IFtnZXRhdHRyKGVycm5vLCBuYW1lLCBudW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG5hbWUsIG51bSkgaW4gZGVmYXVsdF9lcnJub3NdCisgICAgICAgIGdhaV9lcnJub3MgPSBbZ2V0YXR0cihzb2NrZXQsIG5hbWUsIG51bSkKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKG5hbWUsIG51bSkgaW4gZGVmYXVsdF9nYWlfZXJybm9zXQorCisgICAgZGVmIGZpbHRlcl9lcnJvcihlcnIpOgorICAgICAgICBuID0gZ2V0YXR0cihlcnIsICdlcnJubycsIE5vbmUpCisgICAgICAgIGlmIChpc2luc3RhbmNlKGVyciwgc29ja2V0LnRpbWVvdXQpIG9yCisgICAgICAgICAgICAoaXNpbnN0YW5jZShlcnIsIHNvY2tldC5nYWllcnJvcikgYW5kIG4gaW4gZ2FpX2Vycm5vcykgb3IKKyAgICAgICAgICAgIG4gaW4gY2FwdHVyZWRfZXJybm9zKToKKyAgICAgICAgICAgIGlmIG5vdCB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZGVuaWVkLmFyZ3NbMF0gKyAiXG4iKQorICAgICAgICAgICAgcmFpc2UgZGVuaWVkCisKKyAgICBvbGRfdGltZW91dCA9IHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpCisgICAgdHJ5OgorICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KHRpbWVvdXQpCisgICAgICAgIHlpZWxkCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAjIHVybGxpYiBjYW4gd3JhcCBvcmlnaW5hbCBzb2NrZXQgZXJyb3JzIG11bHRpcGxlIHRpbWVzICghKSwgd2UgbXVzdAorICAgICAgICAjIHVud3JhcCB0byBnZXQgYXQgdGhlIG9yaWdpbmFsIGVycm9yLgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYSA9IGVyci5hcmdzCisgICAgICAgICAgICBpZiBsZW4oYSkgPj0gMSBhbmQgaXNpbnN0YW5jZShhWzBdLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBlcnIgPSBhWzBdCisgICAgICAgICAgICAjIFRoZSBlcnJvciBjYW4gYWxzbyBiZSB3cmFwcGVkIGFzIGFyZ3NbMV06CisgICAgICAgICAgICAjICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgIyAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKKyAgICAgICAgICAgIGVsaWYgbGVuKGEpID49IDIgYW5kIGlzaW5zdGFuY2UoYVsxXSwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgZXJyID0gYVsxXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmaWx0ZXJfZXJyb3IoZXJyKQorICAgICAgICByYWlzZQorICAgICMgWFhYIHNob3VsZCB3ZSBjYXRjaCBnZW5lcmljIGV4Y2VwdGlvbnMgYW5kIGxvb2sgZm9yIHRoZWlyCisgICAgIyBfX2NhdXNlX18gb3IgX19jb250ZXh0X18/CisgICAgZmluYWxseToKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KG9sZF90aW1lb3V0KQorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgY2FwdHVyZWRfb3V0cHV0KHN0cmVhbV9uYW1lKToKKyAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdXNlZCBieSBjYXB0dXJlZF9zdGRvdXQgYW5kIGNhcHR1cmVkX3N0ZGluCisgICAgdGhhdCB0ZW1wb3JhcmlseSByZXBsYWNlcyB0aGUgc3lzIHN0cmVhbSAqc3RyZWFtX25hbWUqIHdpdGggYSBTdHJpbmdJTy4iIiIKKyAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICBvcmlnX3N0ZG91dCA9IGdldGF0dHIoc3lzLCBzdHJlYW1fbmFtZSkKKyAgICBzZXRhdHRyKHN5cywgc3RyZWFtX25hbWUsIFN0cmluZ0lPLlN0cmluZ0lPKCkpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBnZXRhdHRyKHN5cywgc3RyZWFtX25hbWUpCisgICAgZmluYWxseToKKyAgICAgICAgc2V0YXR0cihzeXMsIHN0cmVhbV9uYW1lLCBvcmlnX3N0ZG91dCkKKworZGVmIGNhcHR1cmVkX3N0ZG91dCgpOgorICAgICIiIkNhcHR1cmUgdGhlIG91dHB1dCBvZiBzeXMuc3Rkb3V0OgorCisgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzOgorICAgICAgICAgICBwcmludCAiaGVsbG8iCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksICJoZWxsbyIpCisgICAgIiIiCisgICAgcmV0dXJuIGNhcHR1cmVkX291dHB1dCgic3Rkb3V0IikKKworZGVmIGNhcHR1cmVkX3N0ZGVycigpOgorICAgIHJldHVybiBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpCisKK2RlZiBjYXB0dXJlZF9zdGRpbigpOgorICAgIHJldHVybiBjYXB0dXJlZF9vdXRwdXQoInN0ZGluIikKKworZGVmIGdjX2NvbGxlY3QoKToKKyAgICAiIiJGb3JjZSBhcyBtYW55IG9iamVjdHMgYXMgcG9zc2libGUgdG8gYmUgY29sbGVjdGVkLgorCisgICAgSW4gbm9uLUNQeXRob24gaW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiwgdGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aW1lbHkKKyAgICBkZWFsbG9jYXRpb24gaXMgbm90IGd1YXJhbnRlZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiAgKEV2ZW4gaW4gQ1B5dGhvbgorICAgIHRoaXMgY2FuIGJlIHRoZSBjYXNlIGluIGNhc2Ugb2YgcmVmZXJlbmNlIGN5Y2xlcy4pICBUaGlzIG1lYW5zIHRoYXQgX19kZWxfXworICAgIG1ldGhvZHMgbWF5IGJlIGNhbGxlZCBsYXRlciB0aGFuIGV4cGVjdGVkIGFuZCB3ZWFrcmVmcyBtYXkgcmVtYWluIGFsaXZlIGZvcgorICAgIGxvbmdlciB0aGFuIGV4cGVjdGVkLiAgVGhpcyBmdW5jdGlvbiB0cmllcyBpdHMgYmVzdCB0byBmb3JjZSBhbGwgZ2FyYmFnZQorICAgIG9iamVjdHMgdG8gZGlzYXBwZWFyLgorICAgICIiIgorICAgIGdjLmNvbGxlY3QoKQorICAgIGlmIGlzX2p5dGhvbjoKKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgZ2MuY29sbGVjdCgpCisgICAgZ2MuY29sbGVjdCgpCisKKworX2hlYWRlciA9ICcyUCcKK2lmIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgIF9oZWFkZXIgPSAnMlAnICsgX2hlYWRlcgorX3ZoZWFkZXIgPSBfaGVhZGVyICsgJ1AnCisKK2RlZiBjYWxjb2Jqc2l6ZShmbXQpOgorICAgIHJldHVybiBzdHJ1Y3QuY2FsY3NpemUoX2hlYWRlciArIGZtdCArICcwUCcpCisKK2RlZiBjYWxjdm9ianNpemUoZm10KToKKyAgICByZXR1cm4gc3RydWN0LmNhbGNzaXplKF92aGVhZGVyICsgZm10ICsgJzBQJykKKworCitfVFBGTEFHU19IQVZFX0dDID0gMTw8MTQKK19UUEZMQUdTX0hFQVBUWVBFID0gMTw8OQorCitkZWYgY2hlY2tfc2l6ZW9mKHRlc3QsIG8sIHNpemUpOgorICAgIHJlc3VsdCA9IHN5cy5nZXRzaXplb2YobykKKyAgICAjIGFkZCBHQyBoZWFkZXIgc2l6ZQorICAgIGlmICgodHlwZShvKSA9PSB0eXBlKSBhbmQgKG8uX19mbGFnc19fICYgX1RQRkxBR1NfSEVBUFRZUEUpIG9yXAorICAgICAgICAoKHR5cGUobykgIT0gdHlwZSkgYW5kICh0eXBlKG8pLl9fZmxhZ3NfXyAmIF9UUEZMQUdTX0hBVkVfR0MpKSk6CisgICAgICAgIHNpemUgKz0gX3Rlc3RjYXBpLlNJWkVPRl9QWUdDX0hFQUQKKyAgICBtc2cgPSAnd3Jvbmcgc2l6ZSBmb3IgJXM6IGdvdCAlZCwgZXhwZWN0ZWQgJWQnIFwKKyAgICAgICAgICAgICUgKHR5cGUobyksIHJlc3VsdCwgc2l6ZSkKKyAgICB0ZXN0LmFzc2VydEVxdWFsKHJlc3VsdCwgc2l6ZSwgbXNnKQorCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBEZWNvcmF0b3IgZm9yIHJ1bm5pbmcgYSBmdW5jdGlvbiBpbiBhIGRpZmZlcmVudCBsb2NhbGUsIGNvcnJlY3RseSByZXNldHRpbmcKKyMgaXQgYWZ0ZXJ3YXJkcy4KKworZGVmIHJ1bl93aXRoX2xvY2FsZShjYXRzdHIsICpsb2NhbGVzKToKKyAgICBkZWYgZGVjb3JhdG9yKGZ1bmMpOgorICAgICAgICBkZWYgaW5uZXIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gZ2V0YXR0cihsb2NhbGUsIGNhdHN0cikKKyAgICAgICAgICAgICAgICBvcmlnX2xvY2FsZSA9IGxvY2FsZS5zZXRsb2NhbGUoY2F0ZWdvcnkpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBpZiB0aGUgdGVzdCBhdXRob3IgZ2l2ZXMgdXMgYW4gaW52YWxpZCBjYXRlZ29yeSBzdHJpbmcKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgY2Fubm90IHJldHJpZXZlIG9yaWdpbmFsIGxvY2FsZSwgc28gZG8gbm90aGluZworICAgICAgICAgICAgICAgIGxvY2FsZSA9IG9yaWdfbG9jYWxlID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgbG9jIGluIGxvY2FsZXM6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUoY2F0ZWdvcnksIGxvYykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBub3cgcnVuIHRoZSBmdW5jdGlvbiwgcmVzZXR0aW5nIHRoZSBsb2NhbGUgb24gZXhjZXB0aW9ucworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3ZHMpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIGxvY2FsZSBhbmQgb3JpZ19sb2NhbGU6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUoY2F0ZWdvcnksIG9yaWdfbG9jYWxlKQorICAgICAgICBpbm5lci5mdW5jX25hbWUgPSBmdW5jLmZ1bmNfbmFtZQorICAgICAgICBpbm5lci5fX2RvY19fID0gZnVuYy5fX2RvY19fCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIHJldHVybiBkZWNvcmF0b3IKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEJpZy1tZW1vcnktdGVzdCBzdXBwb3J0LiBTZXBhcmF0ZSBmcm9tICdyZXNvdXJjZXMnIGJlY2F1c2UgbWVtb3J5IHVzZSBzaG91bGQgYmUgY29uZmlndXJhYmxlLgorCisjIFNvbWUgaGFuZHkgc2hvcnRoYW5kcy4gTm90ZSB0aGF0IHRoZXNlIGFyZSB1c2VkIGZvciBieXRlLWxpbWl0cyBhcyB3ZWxsCisjIGFzIHNpemUtbGltaXRzLCBpbiB0aGUgdmFyaW91cyBiaWdtZW0gdGVzdHMKK18xTSA9IDEwMjQqMTAyNAorXzFHID0gMTAyNCAqIF8xTQorXzJHID0gMiAqIF8xRworXzRHID0gNCAqIF8xRworCitNQVhfUHlfc3NpemVfdCA9IHN5cy5tYXhzaXplCisKK2RlZiBzZXRfbWVtbGltaXQobGltaXQpOgorICAgIGdsb2JhbCBtYXhfbWVtdXNlCisgICAgZ2xvYmFsIHJlYWxfbWF4X21lbXVzZQorICAgIHNpemVzID0geworICAgICAgICAnayc6IDEwMjQsCisgICAgICAgICdtJzogXzFNLAorICAgICAgICAnZyc6IF8xRywKKyAgICAgICAgJ3QnOiAxMDI0Kl8xRywKKyAgICB9CisgICAgbSA9IHJlLm1hdGNoKHInKFxkKyhcLlxkKyk/KSAoS3xNfEd8VCliPyQnLCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgcmUuSUdOT1JFQ0FTRSB8IHJlLlZFUkJPU0UpCisgICAgaWYgbSBpcyBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIG1lbW9yeSBsaW1pdCAlcicgJSAobGltaXQsKSkKKyAgICBtZW1saW1pdCA9IGludChmbG9hdChtLmdyb3VwKDEpKSAqIHNpemVzW20uZ3JvdXAoMykubG93ZXIoKV0pCisgICAgcmVhbF9tYXhfbWVtdXNlID0gbWVtbGltaXQKKyAgICBpZiBtZW1saW1pdCA+IE1BWF9QeV9zc2l6ZV90OgorICAgICAgICBtZW1saW1pdCA9IE1BWF9QeV9zc2l6ZV90CisgICAgaWYgbWVtbGltaXQgPCBfMkcgLSAxOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdNZW1vcnkgbGltaXQgJXIgdG9vIGxvdyB0byBiZSB1c2VmdWwnICUgKGxpbWl0LCkpCisgICAgbWF4X21lbXVzZSA9IG1lbWxpbWl0CisKK2RlZiBiaWdtZW10ZXN0KG1pbnNpemUsIG1lbXVzZSwgb3ZlcmhlYWQ9NSpfMU0pOgorICAgICIiIkRlY29yYXRvciBmb3IgYmlnbWVtIHRlc3RzLgorCisgICAgJ21pbnNpemUnIGlzIHRoZSBtaW5pbXVtIHVzZWZ1bCBzaXplIGZvciB0aGUgdGVzdCAoaW4gYXJiaXRyYXJ5LAorICAgIHRlc3QtaW50ZXJwcmV0ZWQgdW5pdHMuKSAnbWVtdXNlJyBpcyB0aGUgbnVtYmVyIG9mICdieXRlcyBwZXIgc2l6ZScgZm9yCisgICAgdGhlIHRlc3QsIG9yIGEgZ29vZCBlc3RpbWF0ZSBvZiBpdC4gJ292ZXJoZWFkJyBzcGVjaWZpZXMgZml4ZWQgb3ZlcmhlYWQsCisgICAgaW5kZXBlbmRlbnQgb2YgdGhlIHRlc3RzaXplLCBhbmQgZGVmYXVsdHMgdG8gNU1iLgorCisgICAgVGhlIGRlY29yYXRvciB0cmllcyB0byBndWVzcyBhIGdvb2QgdmFsdWUgZm9yICdzaXplJyBhbmQgcGFzc2VzIGl0IHRvCisgICAgdGhlIGRlY29yYXRlZCB0ZXN0IGZ1bmN0aW9uLiBJZiBtaW5zaXplICogbWVtdXNlIGlzIG1vcmUgdGhhbiB0aGUKKyAgICBhbGxvd2VkIG1lbW9yeSB1c2UgKGFzIGRlZmluZWQgYnkgbWF4X21lbXVzZSksIHRoZSB0ZXN0IGlzIHNraXBwZWQuCisgICAgT3RoZXJ3aXNlLCBtaW5zaXplIGlzIGFkanVzdGVkIHVwd2FyZCB0byB1c2UgdXAgdG8gbWF4X21lbXVzZS4KKyAgICAiIiIKKyAgICBkZWYgZGVjb3JhdG9yKGYpOgorICAgICAgICBkZWYgd3JhcHBlcihzZWxmKToKKyAgICAgICAgICAgIGlmIG5vdCBtYXhfbWVtdXNlOgorICAgICAgICAgICAgICAgICMgSWYgbWF4X21lbXVzZSBpcyAwICh0aGUgZGVmYXVsdCksCisgICAgICAgICAgICAgICAgIyB3ZSBzdGlsbCB3YW50IHRvIHJ1biB0aGUgdGVzdHMgd2l0aCBzaXplIHNldCB0byBhIGZldyBrYiwKKyAgICAgICAgICAgICAgICAjIHRvIG1ha2Ugc3VyZSB0aGV5IHdvcmsuIFdlIHN0aWxsIHdhbnQgdG8gYXZvaWQgdXNpbmcKKyAgICAgICAgICAgICAgICAjIHRvbyBtdWNoIG1lbW9yeSwgdGhvdWdoLCBidXQgd2UgZG8gdGhhdCBub2lzaWx5LgorICAgICAgICAgICAgICAgIG1heHNpemUgPSA1MTQ3CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXhzaXplICogbWVtdXNlICsgb3ZlcmhlYWQgPiAyMCAqIF8xTSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWF4c2l6ZSA9IGludCgobWF4X21lbXVzZSAtIG92ZXJoZWFkKSAvIG1lbXVzZSkKKyAgICAgICAgICAgICAgICBpZiBtYXhzaXplIDwgbWluc2l6ZToKKyAgICAgICAgICAgICAgICAgICAgIyBSZWFsbHkgb3VnaHQgdG8gcHJpbnQgJ3Rlc3Qgc2tpcHBlZCcgb3Igc29tZXRoaW5nCisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJTa2lwcGluZyAlcyBiZWNhdXNlIG9mIG1lbW9yeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25zdHJhaW50XG4iICUgKGYuX19uYW1lX18sKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgIyBUcnkgdG8ga2VlcCBzb21lIGJyZWF0aGluZyByb29tIGluIG1lbW9yeSB1c2UKKyAgICAgICAgICAgICAgICBtYXhzaXplID0gbWF4KG1heHNpemUgLSA1MCAqIF8xTSwgbWluc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmKHNlbGYsIG1heHNpemUpCisgICAgICAgIHdyYXBwZXIubWluc2l6ZSA9IG1pbnNpemUKKyAgICAgICAgd3JhcHBlci5tZW11c2UgPSBtZW11c2UKKyAgICAgICAgd3JhcHBlci5vdmVyaGVhZCA9IG92ZXJoZWFkCisgICAgICAgIHJldHVybiB3cmFwcGVyCisgICAgcmV0dXJuIGRlY29yYXRvcgorCitkZWYgcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplLCBtZW11c2UsIG92ZXJoZWFkPTUqXzFNLCBkcnlfcnVuPVRydWUpOgorICAgIGRlZiBkZWNvcmF0b3IoZik6CisgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYpOgorICAgICAgICAgICAgaWYgbm90IHJlYWxfbWF4X21lbXVzZToKKyAgICAgICAgICAgICAgICBtYXhzaXplID0gNTE0NworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYXhzaXplID0gc2l6ZQorCisgICAgICAgICAgICBpZiAoKHJlYWxfbWF4X21lbXVzZSBvciBub3QgZHJ5X3J1bikKKyAgICAgICAgICAgICAgICBhbmQgcmVhbF9tYXhfbWVtdXNlIDwgbWF4c2l6ZSAqIG1lbXVzZSk6CisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU2tpcHBpbmcgJXMgYmVjYXVzZSBvZiBtZW1vcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25zdHJhaW50XG4iICUgKGYuX19uYW1lX18sKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgcmV0dXJuIGYoc2VsZiwgbWF4c2l6ZSkKKyAgICAgICAgd3JhcHBlci5zaXplID0gc2l6ZQorICAgICAgICB3cmFwcGVyLm1lbXVzZSA9IG1lbXVzZQorICAgICAgICB3cmFwcGVyLm92ZXJoZWFkID0gb3ZlcmhlYWQKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIKKyAgICByZXR1cm4gZGVjb3JhdG9yCisKK2RlZiBiaWdhZGRyc3BhY2V0ZXN0KGYpOgorICAgICIiIkRlY29yYXRvciBmb3IgdGVzdHMgdGhhdCBmaWxsIHRoZSBhZGRyZXNzIHNwYWNlLiIiIgorICAgIGRlZiB3cmFwcGVyKHNlbGYpOgorICAgICAgICBpZiBtYXhfbWVtdXNlIDwgTUFYX1B5X3NzaXplX3Q6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNraXBwaW5nICVzIGJlY2F1c2Ugb2YgbWVtb3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25zdHJhaW50XG4iICUgKGYuX19uYW1lX18sKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBmKHNlbGYpCisgICAgcmV0dXJuIHdyYXBwZXIKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIHVuaXR0ZXN0IGludGVncmF0aW9uLgorCitjbGFzcyBCYXNpY1Rlc3RSdW5uZXI6CisgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBfaWQob2JqKToKKyAgICByZXR1cm4gb2JqCisKK2RlZiByZXF1aXJlc19yZXNvdXJjZShyZXNvdXJjZSk6CisgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSk6CisgICAgICAgIHJldHVybiBfaWQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gdW5pdHRlc3Quc2tpcCgicmVzb3VyY2UgezAhcn0gaXMgbm90IGVuYWJsZWQiLmZvcm1hdChyZXNvdXJjZSkpCisKK2RlZiBjcHl0aG9uX29ubHkodGVzdCk6CisgICAgIiIiCisgICAgRGVjb3JhdG9yIGZvciB0ZXN0cyBvbmx5IGFwcGxpY2FibGUgb24gQ1B5dGhvbi4KKyAgICAiIiIKKyAgICByZXR1cm4gaW1wbF9kZXRhaWwoY3B5dGhvbj1UcnVlKSh0ZXN0KQorCitkZWYgaW1wbF9kZXRhaWwobXNnPU5vbmUsICoqZ3VhcmRzKToKKyAgICBpZiBjaGVja19pbXBsX2RldGFpbCgqKmd1YXJkcyk6CisgICAgICAgIHJldHVybiBfaWQKKyAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgZ3VhcmRuYW1lcywgZGVmYXVsdCA9IF9wYXJzZV9ndWFyZHMoZ3VhcmRzKQorICAgICAgICBpZiBkZWZhdWx0OgorICAgICAgICAgICAgbXNnID0gImltcGxlbWVudGF0aW9uIGRldGFpbCBub3QgYXZhaWxhYmxlIG9uIHswfSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICJpbXBsZW1lbnRhdGlvbiBkZXRhaWwgc3BlY2lmaWMgdG8gezB9IgorICAgICAgICBndWFyZG5hbWVzID0gc29ydGVkKGd1YXJkbmFtZXMua2V5cygpKQorICAgICAgICBtc2cgPSBtc2cuZm9ybWF0KCcgb3IgJy5qb2luKGd1YXJkbmFtZXMpKQorICAgIHJldHVybiB1bml0dGVzdC5za2lwKG1zZykKKworZGVmIF9wYXJzZV9ndWFyZHMoZ3VhcmRzKToKKyAgICAjIFJldHVybnMgYSB0dXBsZSAoe3BsYXRmb3JtX25hbWU6IHJ1bl9tZX0sIGRlZmF1bHRfdmFsdWUpCisgICAgaWYgbm90IGd1YXJkczoKKyAgICAgICAgcmV0dXJuICh7J2NweXRob24nOiBUcnVlfSwgRmFsc2UpCisgICAgaXNfdHJ1ZSA9IGd1YXJkcy52YWx1ZXMoKVswXQorICAgIGFzc2VydCBndWFyZHMudmFsdWVzKCkgPT0gW2lzX3RydWVdICogbGVuKGd1YXJkcykgICAjIGFsbCBUcnVlIG9yIGFsbCBGYWxzZQorICAgIHJldHVybiAoZ3VhcmRzLCBub3QgaXNfdHJ1ZSkKKworIyBVc2UgdGhlIGZvbGxvd2luZyBjaGVjayB0byBndWFyZCBDUHl0aG9uJ3MgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdGVzdHMgLS0KKyMgb3IgdG8gcnVuIHRoZW0gb25seSBvbiB0aGUgaW1wbGVtZW50YXRpb24ocykgZ3VhcmRlZCBieSB0aGUgYXJndW1lbnRzLgorZGVmIGNoZWNrX2ltcGxfZGV0YWlsKCoqZ3VhcmRzKToKKyAgICAiIiJUaGlzIGZ1bmN0aW9uIHJldHVybnMgVHJ1ZSBvciBGYWxzZSBkZXBlbmRpbmcgb24gdGhlIGhvc3QgcGxhdGZvcm0uCisgICAgICAgRXhhbXBsZXM6CisgICAgICAgICAgaWYgY2hlY2tfaW1wbF9kZXRhaWwoKTogICAgICAgICAgICAgICAjIG9ubHkgb24gQ1B5dGhvbiAoZGVmYXVsdCkKKyAgICAgICAgICBpZiBjaGVja19pbXBsX2RldGFpbChqeXRob249VHJ1ZSk6ICAgICMgb25seSBvbiBKeXRob24KKyAgICAgICAgICBpZiBjaGVja19pbXBsX2RldGFpbChjcHl0aG9uPUZhbHNlKTogICMgZXZlcnl3aGVyZSBleGNlcHQgb24gQ1B5dGhvbgorICAgICIiIgorICAgIGd1YXJkcywgZGVmYXVsdCA9IF9wYXJzZV9ndWFyZHMoZ3VhcmRzKQorICAgIHJldHVybiBndWFyZHMuZ2V0KHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLmxvd2VyKCksIGRlZmF1bHQpCisKKworCitkZWYgX3J1bl9zdWl0ZShzdWl0ZSk6CisgICAgIiIiUnVuIHRlc3RzIGZyb20gYSB1bml0dGVzdC5UZXN0U3VpdGUtZGVyaXZlZCBjbGFzcy4iIiIKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzeXMuc3Rkb3V0LCB2ZXJib3NpdHk9MikKKyAgICBlbHNlOgorICAgICAgICBydW5uZXIgPSBCYXNpY1Rlc3RSdW5uZXIoKQorCisgICAgcmVzdWx0ID0gcnVubmVyLnJ1bihzdWl0ZSkKKyAgICBpZiBub3QgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgaWYgbGVuKHJlc3VsdC5lcnJvcnMpID09IDEgYW5kIG5vdCByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICBlcnIgPSByZXN1bHQuZXJyb3JzWzBdWzFdCisgICAgICAgIGVsaWYgbGVuKHJlc3VsdC5mYWlsdXJlcykgPT0gMSBhbmQgbm90IHJlc3VsdC5lcnJvcnM6CisgICAgICAgICAgICBlcnIgPSByZXN1bHQuZmFpbHVyZXNbMF1bMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVyciA9ICJtdWx0aXBsZSBlcnJvcnMgb2NjdXJyZWQiCisgICAgICAgICAgICBpZiBub3QgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBlcnIgKz0gIjsgcnVuIGluIHZlcmJvc2UgbW9kZSBmb3IgZGV0YWlscyIKKyAgICAgICAgcmFpc2UgVGVzdEZhaWxlZChlcnIpCisKKworZGVmIHJ1bl91bml0dGVzdCgqY2xhc3Nlcyk6CisgICAgIiIiUnVuIHRlc3RzIGZyb20gdW5pdHRlc3QuVGVzdENhc2UtZGVyaXZlZCBjbGFzc2VzLiIiIgorICAgIHZhbGlkX3R5cGVzID0gKHVuaXR0ZXN0LlRlc3RTdWl0ZSwgdW5pdHRlc3QuVGVzdENhc2UpCisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGZvciBjbHMgaW4gY2xhc3NlczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjbHMsIHN0cik6CisgICAgICAgICAgICBpZiBjbHMgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5maW5kVGVzdENhc2VzKHN5cy5tb2R1bGVzW2Nsc10pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzdHIgYXJndW1lbnRzIG11c3QgYmUga2V5cyBpbiBzeXMubW9kdWxlcyIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShjbHMsIHZhbGlkX3R5cGVzKToKKyAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QoY2xzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoY2xzKSkKKyAgICBfcnVuX3N1aXRlKHN1aXRlKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBkb2NzdHJpbmdzLgorCitIQVZFX0RPQ1NUUklOR1MgPSAoY2hlY2tfaW1wbF9kZXRhaWwoY3B5dGhvbj1GYWxzZSkgb3IKKyAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvcgorICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignV0lUSF9ET0NfU1RSSU5HUycpKQorCityZXF1aXJlc19kb2NzdHJpbmdzID0gdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBkb2NzdHJpbmdzIikKKworCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgZG9jdGVzdCBkcml2ZXIuCisKK2RlZiBydW5fZG9jdGVzdChtb2R1bGUsIHZlcmJvc2l0eT1Ob25lKToKKyAgICAiIiJSdW4gZG9jdGVzdCBvbiB0aGUgZ2l2ZW4gbW9kdWxlLiAgUmV0dXJuICgjZmFpbHVyZXMsICN0ZXN0cykuCisKKyAgICBJZiBvcHRpb25hbCBhcmd1bWVudCB2ZXJib3NpdHkgaXMgbm90IHNwZWNpZmllZCAob3IgaXMgTm9uZSksIHBhc3MKKyAgICB0ZXN0X3N1cHBvcnQncyBiZWxpZWYgYWJvdXQgdmVyYm9zaXR5IG9uIHRvIGRvY3Rlc3QuICBFbHNlIGRvY3Rlc3QncworICAgIHVzdWFsIGJlaGF2aW9yIGlzIHVzZWQgKGl0IHNlYXJjaGVzIHN5cy5hcmd2IGZvciAtdikuCisgICAgIiIiCisKKyAgICBpbXBvcnQgZG9jdGVzdAorCisgICAgaWYgdmVyYm9zaXR5IGlzIE5vbmU6CisgICAgICAgIHZlcmJvc2l0eSA9IHZlcmJvc2UKKyAgICBlbHNlOgorICAgICAgICB2ZXJib3NpdHkgPSBOb25lCisKKyAgICAjIERpcmVjdCBkb2N0ZXN0IG91dHB1dCAobm9ybWFsbHkganVzdCBlcnJvcnMpIHRvIHJlYWwgc3Rkb3V0OyBkb2N0ZXN0CisgICAgIyBvdXRwdXQgc2hvdWxkbid0IGJlIGNvbXBhcmVkIGJ5IHJlZ3J0ZXN0LgorICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgIHN5cy5zdGRvdXQgPSBnZXRfb3JpZ2luYWxfc3Rkb3V0KCkKKyAgICB0cnk6CisgICAgICAgIGYsIHQgPSBkb2N0ZXN0LnRlc3Rtb2QobW9kdWxlLCB2ZXJib3NlPXZlcmJvc2l0eSkKKyAgICAgICAgaWYgZjoKKyAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoIiVkIG9mICVkIGRvY3Rlc3RzIGZhaWxlZCIgJSAoZiwgdCkpCisgICAgZmluYWxseToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2RvY3Rlc3QgKCVzKSAuLi4gJWQgdGVzdHMgd2l0aCB6ZXJvIGZhaWx1cmVzJyAlIChtb2R1bGUuX19uYW1lX18sIHQpCisgICAgcmV0dXJuIGYsIHQKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRocmVhZGluZyBzdXBwb3J0IHRvIHByZXZlbnQgcmVwb3J0aW5nIHJlZmxlYWtzIHdoZW4gcnVubmluZyByZWdydGVzdC5weSAtUgorCisjIE5PVEU6IHdlIHVzZSB0aHJlYWQuX2NvdW50KCkgcmF0aGVyIHRoYW4gdGhyZWFkaW5nLmVudW1lcmF0ZSgpIChvciB0aGUKKyMgbW9yYWwgZXF1aXZhbGVudCB0aGVyZW9mKSBiZWNhdXNlIGEgdGhyZWFkaW5nLlRocmVhZCBvYmplY3QgaXMgc3RpbGwgYWxpdmUKKyMgdW50aWwgaXRzIF9fYm9vdHN0cmFwKCkgbWV0aG9kIGhhcyByZXR1cm5lZCwgZXZlbiBhZnRlciBpdCBoYXMgYmVlbgorIyB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgdGhyZWFkaW5nIG1vZHVsZS4KKyMgdGhyZWFkLl9jb3VudCgpLCBvbiB0aGUgb3RoZXIgaGFuZCwgb25seSBnZXRzIGRlY3JlbWVudGVkICphZnRlciogdGhlCisjIF9fYm9vdHN0cmFwKCkgbWV0aG9kIGhhcyByZXR1cm5lZCwgd2hpY2ggZ2l2ZXMgdXMgcmVsaWFibGUgcmVmZXJlbmNlIGNvdW50cworIyBhdCB0aGUgZW5kIG9mIGEgdGVzdCBydW4uCisKK2RlZiB0aHJlYWRpbmdfc2V0dXAoKToKKyAgICBpZiB0aHJlYWQ6CisgICAgICAgIHJldHVybiB0aHJlYWQuX2NvdW50KCksCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIDEsCisKK2RlZiB0aHJlYWRpbmdfY2xlYW51cChuYl90aHJlYWRzKToKKyAgICBpZiBub3QgdGhyZWFkOgorICAgICAgICByZXR1cm4KKworICAgIF9NQVhfQ09VTlQgPSAxMAorICAgIGZvciBjb3VudCBpbiByYW5nZShfTUFYX0NPVU5UKToKKyAgICAgICAgbiA9IHRocmVhZC5fY291bnQoKQorICAgICAgICBpZiBuID09IG5iX3RocmVhZHM6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAjIFhYWCBwcmludCBhIHdhcm5pbmcgaW4gY2FzZSBvZiBmYWlsdXJlPworCitkZWYgcmVhcF90aHJlYWRzKGZ1bmMpOgorICAgICIiIlVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhyZWFkcyBhcmUgYmVpbmcgdXNlZC4gIFRoaXMgd2lsbAorICAgIGVuc3VyZSB0aGF0IHRoZSB0aHJlYWRzIGFyZSBjbGVhbmVkIHVwIGV2ZW4gd2hlbiB0aGUgdGVzdCBmYWlscy4KKyAgICBJZiB0aHJlYWRpbmcgaXMgdW5hdmFpbGFibGUgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCisgICAgIiIiCisgICAgaWYgbm90IHRocmVhZDoKKyAgICAgICAgcmV0dXJuIGZ1bmMKKworICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICBkZWYgZGVjb3JhdG9yKCphcmdzKToKKyAgICAgICAga2V5ID0gdGhyZWFkaW5nX3NldHVwKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0aHJlYWRpbmdfY2xlYW51cCgqa2V5KQorICAgIHJldHVybiBkZWNvcmF0b3IKKworZGVmIHJlYXBfY2hpbGRyZW4oKToKKyAgICAiIiJVc2UgdGhpcyBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIHRlc3RfbWFpbigpIHdoZW5ldmVyIHN1Yi1wcm9jZXNzZXMKKyAgICBhcmUgc3RhcnRlZC4gIFRoaXMgd2lsbCBoZWxwIGVuc3VyZSB0aGF0IG5vIGV4dHJhIGNoaWxkcmVuICh6b21iaWVzKQorICAgIHN0aWNrIGFyb3VuZCB0byBob2cgcmVzb3VyY2VzIGFuZCBjcmVhdGUgcHJvYmxlbXMgd2hlbiBsb29raW5nCisgICAgZm9yIHJlZmxlYWtzLgorICAgICIiIgorCisgICAgIyBSZWFwIGFsbCBvdXIgZGVhZCBjaGlsZCBwcm9jZXNzZXMgc28gd2UgZG9uJ3QgbGVhdmUgem9tYmllcyBhcm91bmQuCisgICAgIyBUaGVzZSBob2cgcmVzb3VyY2VzIGFuZCBtaWdodCBiZSBjYXVzaW5nIHNvbWUgb2YgdGhlIGJ1aWxkYm90cyB0byBkaWUuCisgICAgaWYgaGFzYXR0cihvcywgJ3dhaXRwaWQnKToKKyAgICAgICAgYW55X3Byb2Nlc3MgPSAtMQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgVGhpcyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBvbiBXaW5kb3dzLiAgVGhhdCdzIG9rLgorICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChhbnlfcHJvY2Vzcywgb3MuV05PSEFORykKKyAgICAgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBicmVhaworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHN3YXBfYXR0cihvYmosIGF0dHIsIG5ld192YWwpOgorICAgICIiIlRlbXBvcmFyeSBzd2FwIG91dCBhbiBhdHRyaWJ1dGUgd2l0aCBhIG5ldyBvYmplY3QuCisKKyAgICBVc2FnZToKKyAgICAgICAgd2l0aCBzd2FwX2F0dHIob2JqLCAiYXR0ciIsIDUpOgorICAgICAgICAgICAgLi4uCisKKyAgICAgICAgVGhpcyB3aWxsIHNldCBvYmouYXR0ciB0byA1IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHdpdGg6IGJsb2NrLAorICAgICAgICByZXN0b3JpbmcgdGhlIG9sZCB2YWx1ZSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gSWYgYGF0dHJgIGRvZXNuJ3QKKyAgICAgICAgZXhpc3Qgb24gYG9iamAsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlbiBkZWxldGVkIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgIGJsb2NrLgorICAgICIiIgorICAgIGlmIGhhc2F0dHIob2JqLCBhdHRyKToKKyAgICAgICAgcmVhbF92YWwgPSBnZXRhdHRyKG9iaiwgYXR0cikKKyAgICAgICAgc2V0YXR0cihvYmosIGF0dHIsIG5ld192YWwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZXRhdHRyKG9iaiwgYXR0ciwgcmVhbF92YWwpCisgICAgZWxzZToKKyAgICAgICAgc2V0YXR0cihvYmosIGF0dHIsIG5ld192YWwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWxhdHRyKG9iaiwgYXR0cikKKworZGVmIHB5M2tfYnl0ZXMoYik6CisgICAgIiIiRW11bGF0ZSB0aGUgcHkzayBieXRlcygpIGNvbnN0cnVjdG9yLgorCisgICAgTk9URTogVGhpcyBpcyBvbmx5IGEgYmVzdCBlZmZvcnQgZnVuY3Rpb24uCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICAjIG1lbW9yeXZpZXc/CisgICAgICAgIHJldHVybiBiLnRvYnl0ZXMoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBpdGVyYWJsZSBvZiBpbnRzPworICAgICAgICAgICAgcmV0dXJuIGIiIi5qb2luKGNocih4KSBmb3IgeCBpbiBiKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVzKGIpCisKK2RlZiBhcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgcmVwcm9kdWNpbmcgdGhlIGN1cnJlbnQKKyAgICBzZXR0aW5ncyBpbiBzeXMuZmxhZ3MuIiIiCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICByZXR1cm4gc3VicHJvY2Vzcy5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKworZGVmIHN0cmlwX3B5dGhvbl9zdGRlcnIoc3RkZXJyKToKKyAgICAiIiJTdHJpcCB0aGUgc3RkZXJyIG9mIGEgUHl0aG9uIHByb2Nlc3MgZnJvbSBwb3RlbnRpYWwgZGVidWcgb3V0cHV0CisgICAgZW1pdHRlZCBieSB0aGUgaW50ZXJwcmV0ZXIuCisKKyAgICBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIHJ1biBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjb21tdW5pY2F0ZSgpIG1ldGhvZAorICAgIG9mIGEgc3VicHJvY2Vzcy5Qb3BlbiBvYmplY3QuCisgICAgIiIiCisgICAgc3RkZXJyID0gcmUuc3ViKGJyIlxbXGQrIHJlZnNcXVxyP1xuPyQiLCBiIiIsIHN0ZGVycikuc3RyaXAoKQorICAgIHJldHVybiBzdGRlcnIKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3ltdGFibGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzN2U4NgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5CkBAIC0wLDAgKzEsMTg0IEBACisiIiIKK1Rlc3QgdGhlIEFQSSBvZiB0aGUgc3ltdGFibGUgbW9kdWxlLgorIiIiCitpbXBvcnQgc3ltdGFibGUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK1RFU1RfQ09ERSA9ICIiIgoraW1wb3J0IHN5cworCitnbG9iID0gNDIKKworY2xhc3MgTWluZToKKyAgICBpbnN0YW5jZV92YXIgPSAyNAorICAgIGRlZiBhX21ldGhvZChwMSwgcDIpOgorICAgICAgICBwYXNzCisKK2RlZiBzcGFtKGEsIGIsICp2YXIsICoqa3cpOgorICAgIGdsb2JhbCBiYXIKKyAgICBiYXIgPSA0NworICAgIHggPSAyMworICAgIGdsb2IKKyAgICBkZWYgaW50ZXJuYWwoKToKKyAgICAgICAgcmV0dXJuIHgKKyAgICByZXR1cm4gaW50ZXJuYWwKKworZGVmIGZvbygpOgorICAgIGV4ZWMgJ20nCisgICAgZnJvbSBzeXMgaW1wb3J0ICoKKworZGVmIG5hbWVzcGFjZV90ZXN0KCk6IHBhc3MKK2RlZiBuYW1lc3BhY2VfdGVzdCgpOiBwYXNzCisiIiIKKworCitkZWYgZmluZF9ibG9jayhibG9jaywgbmFtZSk6CisgICAgZm9yIGNoIGluIGJsb2NrLmdldF9jaGlsZHJlbigpOgorICAgICAgICBpZiBjaC5nZXRfbmFtZSgpID09IG5hbWU6CisgICAgICAgICAgICByZXR1cm4gY2gKKworCitjbGFzcyBTeW10YWJsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoCisgICAgICAgICAgICAoImltcG9ydCBcKiBvbmx5IGFsbG93ZWQgYXQgbW9kdWxlIGxldmVsIiwgU3ludGF4V2FybmluZykpOgorICAgICAgICB0b3AgPSBzeW10YWJsZS5zeW10YWJsZShURVNUX0NPREUsICI/IiwgImV4ZWMiKQorICAgICMgVGhlc2UgY29ycmVzcG9uZCB0byBzY29wZXMgaW4gVEVTVF9DT0RFCisgICAgTWluZSA9IGZpbmRfYmxvY2sodG9wLCAiTWluZSIpCisgICAgYV9tZXRob2QgPSBmaW5kX2Jsb2NrKE1pbmUsICJhX21ldGhvZCIpCisgICAgc3BhbSA9IGZpbmRfYmxvY2sodG9wLCAic3BhbSIpCisgICAgaW50ZXJuYWwgPSBmaW5kX2Jsb2NrKHNwYW0sICJpbnRlcm5hbCIpCisgICAgZm9vID0gZmluZF9ibG9jayh0b3AsICJmb28iKQorCisgICAgZGVmIHRlc3RfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRvcC5nZXRfdHlwZSgpLCAibW9kdWxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLk1pbmUuZ2V0X3R5cGUoKSwgImNsYXNzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFfbWV0aG9kLmdldF90eXBlKCksICJmdW5jdGlvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zcGFtLmdldF90eXBlKCksICJmdW5jdGlvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbnRlcm5hbC5nZXRfdHlwZSgpLCAiZnVuY3Rpb24iKQorCisgICAgZGVmIHRlc3Rfb3B0aW1pemVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudG9wLmlzX29wdGltaXplZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudG9wLmhhc19leGVjKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50b3AuaGFzX2ltcG9ydF9zdGFyKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3BhbS5pc19vcHRpbWl6ZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZm9vLmlzX29wdGltaXplZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mb28uaGFzX2V4ZWMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZm9vLmhhc19pbXBvcnRfc3RhcigpKQorCisgICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudG9wLmlzX25lc3RlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuTWluZS5pc19uZXN0ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNwYW0uaXNfbmVzdGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmludGVybmFsLmlzX25lc3RlZCgpKQorCisgICAgZGVmIHRlc3RfY2hpbGRyZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRvcC5oYXNfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuTWluZS5oYXNfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZvby5oYXNfY2hpbGRyZW4oKSkKKworICAgIGRlZiB0ZXN0X2xpbmVubyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRvcC5nZXRfbGluZW5vKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zcGFtLmdldF9saW5lbm8oKSwgMTEpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9pbmZvKHNlbGYpOgorICAgICAgICBmdW5jID0gc2VsZi5zcGFtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZ1bmMuZ2V0X3BhcmFtZXRlcnMoKSksIFsiYSIsICJiIiwgImt3IiwgInZhciJdKQorICAgICAgICBleHBlY3RlZCA9IFsiYSIsICJiIiwgImludGVybmFsIiwgImt3IiwgInZhciIsICJ4Il0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZnVuYy5nZXRfbG9jYWxzKCkpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZnVuYy5nZXRfZ2xvYmFscygpKSwgWyJiYXIiLCAiZ2xvYiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW50ZXJuYWwuZ2V0X2ZyZWVzKCksICgieCIsKSkKKworICAgIGRlZiB0ZXN0X2dsb2JhbHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwYW0ubG9va3VwKCJnbG9iIikuaXNfZ2xvYmFsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zcGFtLmxvb2t1cCgiZ2xvYiIpLmlzX2RlY2xhcmVkX2dsb2JhbCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGFtLmxvb2t1cCgiYmFyIikuaXNfZ2xvYmFsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwYW0ubG9va3VwKCJiYXIiKS5pc19kZWNsYXJlZF9nbG9iYWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmludGVybmFsLmxvb2t1cCgieCIpLmlzX2dsb2JhbCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuTWluZS5sb29rdXAoImluc3RhbmNlX3ZhciIpLmlzX2dsb2JhbCgpKQorCisgICAgZGVmIHRlc3RfbG9jYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwYW0ubG9va3VwKCJ4IikuaXNfbG9jYWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmludGVybmFsLmxvb2t1cCgieCIpLmlzX2xvY2FsKCkpCisKKyAgICBkZWYgdGVzdF9yZWZlcmVuY2VkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pbnRlcm5hbC5sb29rdXAoIngiKS5pc19yZWZlcmVuY2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwYW0ubG9va3VwKCJpbnRlcm5hbCIpLmlzX3JlZmVyZW5jZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNwYW0ubG9va3VwKCJ4IikuaXNfcmVmZXJlbmNlZCgpKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgZm9yIHN5bSBpbiAoImEiLCAidmFyIiwgImt3Iik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGFtLmxvb2t1cChzeW0pLmlzX3BhcmFtZXRlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc3BhbS5sb29rdXAoIngiKS5pc19wYXJhbWV0ZXIoKSkKKworICAgIGRlZiB0ZXN0X3N5bWJvbF9sb29rdXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYudG9wLmdldF9pZGVudGlmaWVycygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi50b3AuZ2V0X3N5bWJvbHMoKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYudG9wLmxvb2t1cCwgIm5vdF9oZXJlIikKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRvcC5sb29rdXAoIk1pbmUiKS5pc19uYW1lc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuTWluZS5sb29rdXAoImFfbWV0aG9kIikuaXNfbmFtZXNwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRvcC5sb29rdXAoInNwYW0iKS5pc19uYW1lc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3BhbS5sb29rdXAoImludGVybmFsIikuaXNfbmFtZXNwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRvcC5sb29rdXAoIm5hbWVzcGFjZV90ZXN0IikuaXNfbmFtZXNwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zcGFtLmxvb2t1cCgieCIpLmlzX25hbWVzcGFjZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRvcC5sb29rdXAoInNwYW0iKS5nZXRfbmFtZXNwYWNlKCkgaXMgc2VsZi5zcGFtKQorICAgICAgICBuc190ZXN0ID0gc2VsZi50b3AubG9va3VwKCJuYW1lc3BhY2VfdGVzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5zX3Rlc3QuZ2V0X25hbWVzcGFjZXMoKSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5zX3Rlc3QuZ2V0X25hbWVzcGFjZSkKKworICAgIGRlZiB0ZXN0X2Fzc2lnbmVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGFtLmxvb2t1cCgieCIpLmlzX2Fzc2lnbmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwYW0ubG9va3VwKCJiYXIiKS5pc19hc3NpZ25lZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50b3AubG9va3VwKCJzcGFtIikuaXNfYXNzaWduZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuTWluZS5sb29rdXAoImFfbWV0aG9kIikuaXNfYXNzaWduZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmludGVybmFsLmxvb2t1cCgieCIpLmlzX2Fzc2lnbmVkKCkpCisKKyAgICBkZWYgdGVzdF9pbXBvcnRlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudG9wLmxvb2t1cCgic3lzIikuaXNfaW1wb3J0ZWQoKSkKKworICAgIGRlZiB0ZXN0X25hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50b3AuZ2V0X25hbWUoKSwgInRvcCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zcGFtLmdldF9uYW1lKCksICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNwYW0ubG9va3VwKCJ4IikuZ2V0X25hbWUoKSwgIngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuTWluZS5nZXRfbmFtZSgpLCAiTWluZSIpCisKKyAgICBkZWYgdGVzdF9jbGFzc19pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuTWluZS5nZXRfbWV0aG9kcygpLCAoJ2FfbWV0aG9kJywpKQorCisgICAgZGVmIHRlc3RfZmlsZW5hbWVfY29ycmVjdChzZWxmKToKKyAgICAgICAgIyMjIEJ1ZyB0aWNrbGVyOiBTeW50YXhFcnJvciBmaWxlIG5hbWUgY29ycmVjdCB3aGV0aGVyIGVycm9yIHJhaXNlZAorICAgICAgICAjIyMgd2hpbGUgcGFyc2luZyBvciBidWlsZGluZyBzeW1ib2wgdGFibGUuCisgICAgICAgIGRlZiBjaGVja2ZpbGVuYW1lKGJyb2tlbmNvZGUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5bXRhYmxlLnN5bXRhYmxlKGJyb2tlbmNvZGUsICJzcGFtIiwgImV4ZWMiKQorICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbGVuYW1lLCAic3BhbSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gU3ludGF4RXJyb3IgZm9yICVyIiAlIChicm9rZW5jb2RlLCkpCisgICAgICAgIGNoZWNrZmlsZW5hbWUoImRlZiBmKHgpOiBmb28pKCIpICAjIHBhcnNlLXRpbWUKKyAgICAgICAgY2hlY2tmaWxlbmFtZSgiZGVmIGYoeCk6IGdsb2JhbCB4IikgICMgc3ltdGFibGUtYnVpbGQtdGltZQorCisgICAgZGVmIHRlc3RfZXZhbChzZWxmKToKKyAgICAgICAgc3ltYm9scyA9IHN5bXRhYmxlLnN5bXRhYmxlKCI0MiIsICI/IiwgImV2YWwiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlKHNlbGYpOgorICAgICAgICBzeW1ib2xzID0gc3ltdGFibGUuc3ltdGFibGUoIjQyIiwgIj8iLCAic2luZ2xlIikKKworICAgIGRlZiB0ZXN0X2V4ZWMoc2VsZik6CisgICAgICAgIHN5bWJvbHMgPSBzeW10YWJsZS5zeW10YWJsZSgiZGVmIGYoeCk6IHJldHVybiB4IiwgIj8iLCAiZXhlYyIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3ltdGFibGVUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5NGZlNgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQpAQCAtMCwwICsxLDU3MiBAQAorIiIiVGhpcyBtb2R1bGUgdGVzdHMgU3ludGF4RXJyb3JzLgorCitIZXJlJ3MgYW4gZXhhbXBsZSBvZiB0aGUgc29ydCBvZiB0aGluZyB0aGF0IGlzIHRlc3RlZC4KKworPj4+IGRlZiBmKHgpOgorLi4uICAgICBnbG9iYWwgeAorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorU3ludGF4RXJyb3I6IG5hbWUgJ3gnIGlzIGxvY2FsIGFuZCBnbG9iYWwgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMF0+LCBsaW5lIDEpCisKK1RoZSB0ZXN0cyBhcmUgYWxsIHJhaXNlIFN5bnRheEVycm9ycy4gIFRoZXkgd2VyZSBjcmVhdGVkIGJ5IGNoZWNraW5nCitlYWNoIEMgY2FsbCB0aGF0IHJhaXNlcyBTeW50YXhFcnJvci4gIFRoZXJlIGFyZSBzZXZlcmFsIG1vZHVsZXMgdGhhdAorcmFpc2UgdGhlc2UgZXhjZXB0aW9ucy0tIGFzdC5jLCBjb21waWxlLmMsIGZ1dHVyZS5jLCBweXRob25ydW4uYywgYW5kCitzeW10YWJsZS5jLgorCitUaGUgcGFyc2VyIGl0c2VsZiBvdXRsYXdzIGEgbG90IG9mIGludmFsaWQgc3ludGF4LiAgTm9uZSBvZiB0aGVzZQorZXJyb3JzIGFyZSB0ZXN0ZWQgaGVyZSBhdCB0aGUgbW9tZW50LiAgV2Ugc2hvdWxkIGFkZCBzb21lIHRlc3RzOyBzaW5jZQordGhlcmUgYXJlIGluZmluaXRlbHkgbWFueSBwcm9ncmFtcyB3aXRoIGludmFsaWQgc3ludGF4LCB3ZSB3b3VsZCBuZWVkCit0byBiZSBqdWRpY2lvdXMgaW4gc2VsZWN0aW5nIHNvbWUuCisKK1RoZSBjb21waWxlciBnZW5lcmF0ZXMgYSBzeW50aGV0aWMgbW9kdWxlIG5hbWUgZm9yIGNvZGUgZXhlY3V0ZWQgYnkKK2RvY3Rlc3QuICBTaW5jZSBhbGwgdGhlIGNvZGUgY29tZXMgZnJvbSB0aGUgc2FtZSBtb2R1bGUsIGEgc3VmZml4IGxpa2UKK1sxXSBpcyBhcHBlbmRlZCB0byB0aGUgbW9kdWxlIG5hbWUsIEFzIGEgY29uc2VxdWVuY2UsIGNoYW5naW5nIHRoZQorb3JkZXIgb2YgdGVzdHMgaW4gdGhpcyBtb2R1bGUgbWVhbnMgcmVudW1iZXJpbmcgYWxsIHRoZSBlcnJvcnMgYWZ0ZXIKK2l0LiAgKE1heWJlIHdlIHNob3VsZCBlbmFibGUgdGhlIGVsbGlwc2lzIG9wdGlvbiBmb3IgdGhlc2UgdGVzdHMuKQorCitJbiBhc3QuYywgc3ludGF4IGVycm9ycyBhcmUgcmFpc2VkIGJ5IGNhbGxpbmcgYXN0X2Vycm9yKCkuCisKK0Vycm9ycyBmcm9tIHNldF9jb250ZXh0KCk6CisKKz4+PiBvYmouTm9uZSA9IDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKKworPj4+IE5vbmUgPSAxCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMl0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBOb25lCisKK0l0J3MgYSBzeW50YXggZXJyb3IgdG8gYXNzaWduIHRvIHRoZSBlbXB0eSB0dXBsZS4gIFdoeSBpc24ndCBpdCBhbgorZXJyb3IgdG8gYXNzaWduIHRvIHRoZSBlbXB0eSBsaXN0PyAgSXQgd2lsbCBhbHdheXMgcmFpc2Ugc29tZSBlcnJvciBhdAorcnVudGltZS4KKworPj4+ICgpID0gMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzNdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byAoKQorCis+Pj4gZigpID0gMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzRdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCisKKz4+PiBkZWwgZigpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgZGVsZXRlIGZ1bmN0aW9uIGNhbGwKKworPj4+IGEgKyAxID0gMgorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzZdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBvcGVyYXRvcgorCis+Pj4gKHggZm9yIHggaW4geCkgPSAxCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbN10+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGdlbmVyYXRvciBleHByZXNzaW9uCisKKz4+PiAxID0gMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzhdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBsaXRlcmFsCisKKz4+PiAiYWJjIiA9IDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs4XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gbGl0ZXJhbAorCis+Pj4gYDFgID0gMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzEwXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gcmVwcgorCitJZiB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBpcyBhIGxpc3Qgb3IgdHVwbGUsIGFuIGlsbGVnYWwKK2V4cHJlc3Npb24gaW5zaWRlIHRoYXQgY29udGFpbiBzaG91bGQgc3RpbGwgY2F1c2UgYSBzeW50YXggZXJyb3IuCitUaGlzIHRlc3QganVzdCBjaGVja3MgYSBjb3VwbGUgb2YgY2FzZXMgcmF0aGVyIHRoYW4gZW51bWVyYXRpbmcgYWxsIG9mCit0aGVtLgorCis+Pj4gKGEsICJiIiwgYykgPSAoMSwgMiwgMykKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxMV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGxpdGVyYWwKKworPj4+IFthLCBiLCBjICsgMV0gPSBbMSwgMiwgM10KK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxMl0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIG9wZXJhdG9yCisKKz4+PiBhIGlmIDEgZWxzZSBiID0gMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzEzXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gY29uZGl0aW9uYWwgZXhwcmVzc2lvbgorCitGcm9tIGNvbXBpbGVyX2NvbXBsZXhfYXJncygpOgorCis+Pj4gZGVmIGYoTm9uZT0xKToKKy4uLiAgICAgcGFzcworVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE0XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKKworCitGcm9tIGFzdF9mb3JfYXJndW1lbnRzKCk6CisKKz4+PiBkZWYgZih4LCB5PTEsIHopOgorLi4uICAgICBwYXNzCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTVdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IG5vbi1kZWZhdWx0IGFyZ3VtZW50IGZvbGxvd3MgZGVmYXVsdCBhcmd1bWVudAorCis+Pj4gZGVmIGYoeCwgTm9uZSk6CisuLi4gICAgIHBhc3MKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxNl0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBOb25lCisKKz4+PiBkZWYgZigqTm9uZSk6CisuLi4gICAgIHBhc3MKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxN10+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBOb25lCisKKz4+PiBkZWYgZigqKk5vbmUpOgorLi4uICAgICBwYXNzCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMThdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQorCisKK0Zyb20gYXN0X2Zvcl9mdW5jZGVmKCk6CisKKz4+PiBkZWYgTm9uZSh4KToKKy4uLiAgICAgcGFzcworVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE5XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKKworCitGcm9tIGFzdF9mb3JfY2FsbCgpOgorCis+Pj4gZGVmIGYoaXQsICp2YXJhcmdzKToKKy4uLiAgICAgcmV0dXJuIGxpc3QoaXQpCis+Pj4gTCA9IHJhbmdlKDEwKQorPj4+IGYoeCBmb3IgeCBpbiBMKQorWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCis+Pj4gZih4IGZvciB4IGluIEwsIDEpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjNdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IEdlbmVyYXRvciBleHByZXNzaW9uIG11c3QgYmUgcGFyZW50aGVzaXplZCBpZiBub3Qgc29sZSBhcmd1bWVudAorPj4+IGYoKHggZm9yIHggaW4gTCksIDEpCitbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKworPj4+IGYoaTAsICBpMSwgIGkyLCAgaTMsICBpNCwgIGk1LCAgaTYsICBpNywgIGk4LCAgaTksICBpMTAsICBpMTEsCisuLi4gICBpMTIsICBpMTMsICBpMTQsICBpMTUsICBpMTYsICBpMTcsICBpMTgsICBpMTksICBpMjAsICBpMjEsICBpMjIsCisuLi4gICBpMjMsICBpMjQsICBpMjUsICBpMjYsICBpMjcsICBpMjgsICBpMjksICBpMzAsICBpMzEsICBpMzIsICBpMzMsCisuLi4gICBpMzQsICBpMzUsICBpMzYsICBpMzcsICBpMzgsICBpMzksICBpNDAsICBpNDEsICBpNDIsICBpNDMsICBpNDQsCisuLi4gICBpNDUsICBpNDYsICBpNDcsICBpNDgsICBpNDksICBpNTAsICBpNTEsICBpNTIsICBpNTMsICBpNTQsICBpNTUsCisuLi4gICBpNTYsICBpNTcsICBpNTgsICBpNTksICBpNjAsICBpNjEsICBpNjIsICBpNjMsICBpNjQsICBpNjUsICBpNjYsCisuLi4gICBpNjcsICBpNjgsICBpNjksICBpNzAsICBpNzEsICBpNzIsICBpNzMsICBpNzQsICBpNzUsICBpNzYsICBpNzcsCisuLi4gICBpNzgsICBpNzksICBpODAsICBpODEsICBpODIsICBpODMsICBpODQsICBpODUsICBpODYsICBpODcsICBpODgsCisuLi4gICBpODksICBpOTAsICBpOTEsICBpOTIsICBpOTMsICBpOTQsICBpOTUsICBpOTYsICBpOTcsICBpOTgsICBpOTksCisuLi4gICBpMTAwLCAgaTEwMSwgIGkxMDIsICBpMTAzLCAgaTEwNCwgIGkxMDUsICBpMTA2LCAgaTEwNywgIGkxMDgsCisuLi4gICBpMTA5LCAgaTExMCwgIGkxMTEsICBpMTEyLCAgaTExMywgIGkxMTQsICBpMTE1LCAgaTExNiwgIGkxMTcsCisuLi4gICBpMTE4LCAgaTExOSwgIGkxMjAsICBpMTIxLCAgaTEyMiwgIGkxMjMsICBpMTI0LCAgaTEyNSwgIGkxMjYsCisuLi4gICBpMTI3LCAgaTEyOCwgIGkxMjksICBpMTMwLCAgaTEzMSwgIGkxMzIsICBpMTMzLCAgaTEzNCwgIGkxMzUsCisuLi4gICBpMTM2LCAgaTEzNywgIGkxMzgsICBpMTM5LCAgaTE0MCwgIGkxNDEsICBpMTQyLCAgaTE0MywgIGkxNDQsCisuLi4gICBpMTQ1LCAgaTE0NiwgIGkxNDcsICBpMTQ4LCAgaTE0OSwgIGkxNTAsICBpMTUxLCAgaTE1MiwgIGkxNTMsCisuLi4gICBpMTU0LCAgaTE1NSwgIGkxNTYsICBpMTU3LCAgaTE1OCwgIGkxNTksICBpMTYwLCAgaTE2MSwgIGkxNjIsCisuLi4gICBpMTYzLCAgaTE2NCwgIGkxNjUsICBpMTY2LCAgaTE2NywgIGkxNjgsICBpMTY5LCAgaTE3MCwgIGkxNzEsCisuLi4gICBpMTcyLCAgaTE3MywgIGkxNzQsICBpMTc1LCAgaTE3NiwgIGkxNzcsICBpMTc4LCAgaTE3OSwgIGkxODAsCisuLi4gICBpMTgxLCAgaTE4MiwgIGkxODMsICBpMTg0LCAgaTE4NSwgIGkxODYsICBpMTg3LCAgaTE4OCwgIGkxODksCisuLi4gICBpMTkwLCAgaTE5MSwgIGkxOTIsICBpMTkzLCAgaTE5NCwgIGkxOTUsICBpMTk2LCAgaTE5NywgIGkxOTgsCisuLi4gICBpMTk5LCAgaTIwMCwgIGkyMDEsICBpMjAyLCAgaTIwMywgIGkyMDQsICBpMjA1LCAgaTIwNiwgIGkyMDcsCisuLi4gICBpMjA4LCAgaTIwOSwgIGkyMTAsICBpMjExLCAgaTIxMiwgIGkyMTMsICBpMjE0LCAgaTIxNSwgIGkyMTYsCisuLi4gICBpMjE3LCAgaTIxOCwgIGkyMTksICBpMjIwLCAgaTIyMSwgIGkyMjIsICBpMjIzLCAgaTIyNCwgIGkyMjUsCisuLi4gICBpMjI2LCAgaTIyNywgIGkyMjgsICBpMjI5LCAgaTIzMCwgIGkyMzEsICBpMjMyLCAgaTIzMywgIGkyMzQsCisuLi4gICBpMjM1LCAgaTIzNiwgIGkyMzcsICBpMjM4LCAgaTIzOSwgIGkyNDAsICBpMjQxLCAgaTI0MiwgIGkyNDMsCisuLi4gICBpMjQ0LCAgaTI0NSwgIGkyNDYsICBpMjQ3LCAgaTI0OCwgIGkyNDksICBpMjUwLCAgaTI1MSwgIGkyNTIsCisuLi4gICBpMjUzLCAgaTI1NCwgIGkyNTUpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjVdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IG1vcmUgdGhhbiAyNTUgYXJndW1lbnRzCisKK1RoZSBhY3R1YWwgZXJyb3IgY2FzZXMgY291bnRzIHBvc2l0aW9uYWwgYXJndW1lbnRzLCBrZXl3b3JkIGFyZ3VtZW50cywKK2FuZCBnZW5lcmF0b3IgZXhwcmVzc2lvbiBhcmd1bWVudHMgc2VwYXJhdGVseS4gIFRoaXMgdGVzdCBjb21iaW5lcyB0aGUKK3RocmVlLgorCis+Pj4gZihpMCwgIGkxLCAgaTIsICBpMywgIGk0LCAgaTUsICBpNiwgIGk3LCAgaTgsICBpOSwgIGkxMCwgIGkxMSwKKy4uLiAgIGkxMiwgIGkxMywgIGkxNCwgIGkxNSwgIGkxNiwgIGkxNywgIGkxOCwgIGkxOSwgIGkyMCwgIGkyMSwgIGkyMiwKKy4uLiAgIGkyMywgIGkyNCwgIGkyNSwgIGkyNiwgIGkyNywgIGkyOCwgIGkyOSwgIGkzMCwgIGkzMSwgIGkzMiwgIGkzMywKKy4uLiAgIGkzNCwgIGkzNSwgIGkzNiwgIGkzNywgIGkzOCwgIGkzOSwgIGk0MCwgIGk0MSwgIGk0MiwgIGk0MywgIGk0NCwKKy4uLiAgIGk0NSwgIGk0NiwgIGk0NywgIGk0OCwgIGk0OSwgIGk1MCwgIGk1MSwgIGk1MiwgIGk1MywgIGk1NCwgIGk1NSwKKy4uLiAgIGk1NiwgIGk1NywgIGk1OCwgIGk1OSwgIGk2MCwgIGk2MSwgIGk2MiwgIGk2MywgIGk2NCwgIGk2NSwgIGk2NiwKKy4uLiAgIGk2NywgIGk2OCwgIGk2OSwgIGk3MCwgIGk3MSwgIGk3MiwgIGk3MywgIGk3NCwgIGk3NSwgIGk3NiwgIGk3NywKKy4uLiAgIGk3OCwgIGk3OSwgIGk4MCwgIGk4MSwgIGk4MiwgIGk4MywgIGk4NCwgIGk4NSwgIGk4NiwgIGk4NywgIGk4OCwKKy4uLiAgIGk4OSwgIGk5MCwgIGk5MSwgIGk5MiwgIGk5MywgIGk5NCwgIGk5NSwgIGk5NiwgIGk5NywgIGk5OCwgIGk5OSwKKy4uLiAgIGkxMDAsICBpMTAxLCAgaTEwMiwgIGkxMDMsICBpMTA0LCAgaTEwNSwgIGkxMDYsICBpMTA3LCAgaTEwOCwKKy4uLiAgIGkxMDksICBpMTEwLCAgaTExMSwgIGkxMTIsICBpMTEzLCAgaTExNCwgIGkxMTUsICBpMTE2LCAgaTExNywKKy4uLiAgIGkxMTgsICBpMTE5LCAgaTEyMCwgIGkxMjEsICBpMTIyLCAgaTEyMywgIGkxMjQsICBpMTI1LCAgaTEyNiwKKy4uLiAgIGkxMjcsICBpMTI4LCAgaTEyOSwgIGkxMzAsICBpMTMxLCAgaTEzMiwgIGkxMzMsICBpMTM0LCAgaTEzNSwKKy4uLiAgIGkxMzYsICBpMTM3LCAgaTEzOCwgIGkxMzksICBpMTQwLCAgaTE0MSwgIGkxNDIsICBpMTQzLCAgaTE0NCwKKy4uLiAgIGkxNDUsICBpMTQ2LCAgaTE0NywgIGkxNDgsICBpMTQ5LCAgaTE1MCwgIGkxNTEsICBpMTUyLCAgaTE1MywKKy4uLiAgIGkxNTQsICBpMTU1LCAgaTE1NiwgIGkxNTcsICBpMTU4LCAgaTE1OSwgIGkxNjAsICBpMTYxLCAgaTE2MiwKKy4uLiAgIGkxNjMsICBpMTY0LCAgaTE2NSwgIGkxNjYsICBpMTY3LCAgaTE2OCwgIGkxNjksICBpMTcwLCAgaTE3MSwKKy4uLiAgIGkxNzIsICBpMTczLCAgaTE3NCwgIGkxNzUsICBpMTc2LCAgaTE3NywgIGkxNzgsICBpMTc5LCAgaTE4MCwKKy4uLiAgIGkxODEsICBpMTgyLCAgaTE4MywgIGkxODQsICBpMTg1LCAgaTE4NiwgIGkxODcsICBpMTg4LCAgaTE4OSwKKy4uLiAgIGkxOTAsICBpMTkxLCAgaTE5MiwgIGkxOTMsICBpMTk0LCAgaTE5NSwgIGkxOTYsICBpMTk3LCAgaTE5OCwKKy4uLiAgIGkxOTksICBpMjAwLCAgaTIwMSwgIGkyMDIsICBpMjAzLCAgaTIwNCwgIGkyMDUsICBpMjA2LCAgaTIwNywKKy4uLiAgIGkyMDgsICBpMjA5LCAgaTIxMCwgIGkyMTEsICBpMjEyLCAgaTIxMywgIGkyMTQsICBpMjE1LCAgaTIxNiwKKy4uLiAgIGkyMTcsICBpMjE4LCAgaTIxOSwgIGkyMjAsICBpMjIxLCAgaTIyMiwgIGkyMjMsICBpMjI0LCAgaTIyNSwKKy4uLiAgIGkyMjYsICBpMjI3LCAgaTIyOCwgIGkyMjksICBpMjMwLCAgaTIzMSwgIGkyMzIsICBpMjMzLCAgaTIzNCwKKy4uLiAgIGkyMzUsIGkyMzYsICBpMjM3LCAgaTIzOCwgIGkyMzksICBpMjQwLCAgaTI0MSwgIGkyNDIsICBpMjQzLAorLi4uICAgKHggZm9yIHggaW4gaTI0NCksICBpMjQ1LCAgaTI0NiwgIGkyNDcsICBpMjQ4LCAgaTI0OSwgIGkyNTAsICBpMjUxLAorLi4uICAgIGkyNTI9MSwgaTI1Mz0xLCAgaTI1ND0xLCAgaTI1NT0xKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI2XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBtb3JlIHRoYW4gMjU1IGFyZ3VtZW50cworCis+Pj4gZihsYW1iZGEgeDogeFswXSA9IDMpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjddPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGxhbWJkYSBjYW5ub3QgY29udGFpbiBhc3NpZ25tZW50CisKK1RoZSBncmFtbWFyIGFjY2VwdHMgYW55IHRlc3QgKGJhc2ljYWxseSwgYW55IGV4cHJlc3Npb24pIGluIHRoZQora2V5d29yZCBzbG90IG9mIGEgY2FsbCBzaXRlLiAgVGVzdCBhIGZldyBkaWZmZXJlbnQgb3B0aW9ucy4KKworPj4+IGYoeCgpPTIpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjhdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGtleXdvcmQgY2FuJ3QgYmUgYW4gZXhwcmVzc2lvbgorPj4+IGYoYSBvciBiPTEpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjldPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGtleXdvcmQgY2FuJ3QgYmUgYW4gZXhwcmVzc2lvbgorPj4+IGYoeC55PTEpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzBdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGtleXdvcmQgY2FuJ3QgYmUgYW4gZXhwcmVzc2lvbgorCisKK01vcmUgc2V0X2NvbnRleHQoKToKKworPj4+ICh4IGZvciB4IGluIHgpICs9IDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszMV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGdlbmVyYXRvciBleHByZXNzaW9uCis+Pj4gTm9uZSArPSAxCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzJdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQorPj4+IGYoKSArPSAxCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzNdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCisKKworVGVzdCBjb250aW51ZSBpbiBmaW5hbGx5IGluIHdlaXJkIGNvbWJpbmF0aW9ucy4KKworY29udGludWUgaW4gZm9yIGxvb3AgdW5kZXIgZmluYWxseSBzaG91bGQgYmUgb2suCisKKyAgICA+Pj4gZGVmIHRlc3QoKToKKyAgICAuLi4gICAgIHRyeToKKyAgICAuLi4gICAgICAgICBwYXNzCisgICAgLi4uICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgIGZvciBhYmMgaW4gcmFuZ2UoMTApOgorICAgIC4uLiAgICAgICAgICAgICBjb250aW51ZQorICAgIC4uLiAgICAgcHJpbnQgYWJjCisgICAgPj4+IHRlc3QoKQorICAgIDkKKworU3RhcnQgc2ltcGxlLCBhIGNvbnRpbnVlIGluIGEgZmluYWxseSBzaG91bGQgbm90IGJlIGFsbG93ZWQuCisKKyAgICA+Pj4gZGVmIHRlc3QoKToKKyAgICAuLi4gICAgZm9yIGFiYyBpbiByYW5nZSgxMCk6CisgICAgLi4uICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgcGFzcworICAgIC4uLiAgICAgICAgZmluYWxseToKKyAgICAuLi4gICAgICAgICAgICBjb250aW51ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszNl0+IiwgbGluZSA2CisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZQorCitUaGlzIGlzIGVzc2VudGlhbGx5IGEgY29udGludWUgaW4gYSBmaW5hbGx5IHdoaWNoIHNob3VsZCBub3QgYmUgYWxsb3dlZC4KKworICAgID4+PiBkZWYgdGVzdCgpOgorICAgIC4uLiAgICBmb3IgYWJjIGluIHJhbmdlKDEwKToKKyAgICAuLi4gICAgICAgIHRyeToKKyAgICAuLi4gICAgICAgICAgICBwYXNzCisgICAgLi4uICAgICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgICAgIHRyeToKKyAgICAuLi4gICAgICAgICAgICAgICAgY29udGludWUKKyAgICAuLi4gICAgICAgICAgICBleGNlcHQ6CisgICAgLi4uICAgICAgICAgICAgICAgIHBhc3MKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzddPiIsIGxpbmUgNgorICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UKKworICAgID4+PiBkZWYgZm9vKCk6CisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgcGFzcworICAgIC4uLiAgICAgZmluYWxseToKKyAgICAuLi4gICAgICAgICBjb250aW51ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszOF0+IiwgbGluZSA1CisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZQorCisgICAgPj4+IGRlZiBmb28oKToKKyAgICAuLi4gICAgIGZvciBhIGluICgpOgorICAgIC4uLiAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICBwYXNzCisgICAgLi4uICAgICAgIGZpbmFsbHk6CisgICAgLi4uICAgICAgICAgICBjb250aW51ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszOV0+IiwgbGluZSA2CisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZQorCisgICAgPj4+IGRlZiBmb28oKToKKyAgICAuLi4gICAgIGZvciBhIGluICgpOgorICAgIC4uLiAgICAgICAgIHRyeToKKyAgICAuLi4gICAgICAgICAgICAgcGFzcworICAgIC4uLiAgICAgICAgIGZpbmFsbHk6CisgICAgLi4uICAgICAgICAgICAgIHRyeToKKyAgICAuLi4gICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgLi4uICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgLi4uICAgICAgICAgICAgICAgICBwYXNzCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQwXT4iLCBsaW5lIDcKKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlCisKKyAgICA+Pj4gZGVmIGZvbygpOgorICAgIC4uLiAgZm9yIGEgaW4gKCk6CisgICAgLi4uICAgdHJ5OiBwYXNzCisgICAgLi4uICAgZmluYWxseToKKyAgICAuLi4gICAgdHJ5OgorICAgIC4uLiAgICAgcGFzcworICAgIC4uLiAgICBleGNlcHQ6CisgICAgLi4uICAgICBjb250aW51ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0MV0+IiwgbGluZSA4CisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZQorCitUaGVyZSBpcyBvbmUgdGVzdCBmb3IgYSBicmVhayB0aGF0IGlzIG5vdCBpbiBhIGxvb3AuICBUaGUgY29tcGlsZXIKK3VzZXMgYSBzaW5nbGUgZGF0YSBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiB0cnktZmluYWxseSBhbmQgbG9vcHMsCitzbyB3ZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBhIGJyZWFrIGlzIGFjdHVhbGx5IGluc2lkZSBhIGxvb3AuICBJZiBpdAoraXNuJ3QsIHRoZXJlIHNob3VsZCBiZSBhIHN5bnRheCBlcnJvci4KKworICAgPj4+IHRyeToKKyAgIC4uLiAgICAgcHJpbnQgMQorICAgLi4uICAgICBicmVhaworICAgLi4uICAgICBwcmludCAyCisgICAuLi4gZmluYWxseToKKyAgIC4uLiAgICAgcHJpbnQgMworICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAuLi4KKyAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0Ml0+IiwgbGluZSAzCisgICBTeW50YXhFcnJvcjogJ2JyZWFrJyBvdXRzaWRlIGxvb3AKKworVGhpcyBzaG91bGQgcHJvYmFibHkgcmFpc2UgYSBiZXR0ZXIgZXJyb3IgdGhhbiBhIFN5c3RlbUVycm9yIChvciBub25lIGF0IGFsbCkuCitJbiAyLjUgdGhlcmUgd2FzIGEgbWlzc2luZyBleGNlcHRpb24gYW5kIGFuIGFzc2VydCB3YXMgdHJpZ2dlcmVkIGluIGEgZGVidWcKK2J1aWxkLiAgVGhlIG51bWJlciBvZiBibG9ja3MgbXVzdCBiZSBncmVhdGVyIHRoYW4gQ09fTUFYQkxPQ0tTLiAgU0YgIzE1NjU1MTQKKworICAgPj4+IHdoaWxlIDE6CisgICAuLi4gIHdoaWxlIDI6CisgICAuLi4gICB3aGlsZSAzOgorICAgLi4uICAgIHdoaWxlIDQ6CisgICAuLi4gICAgIHdoaWxlIDU6CisgICAuLi4gICAgICB3aGlsZSA2OgorICAgLi4uICAgICAgIHdoaWxlIDg6CisgICAuLi4gICAgICAgIHdoaWxlIDk6CisgICAuLi4gICAgICAgICB3aGlsZSAxMDoKKyAgIC4uLiAgICAgICAgICB3aGlsZSAxMToKKyAgIC4uLiAgICAgICAgICAgd2hpbGUgMTI6CisgICAuLi4gICAgICAgICAgICB3aGlsZSAxMzoKKyAgIC4uLiAgICAgICAgICAgICB3aGlsZSAxNDoKKyAgIC4uLiAgICAgICAgICAgICAgd2hpbGUgMTU6CisgICAuLi4gICAgICAgICAgICAgICB3aGlsZSAxNjoKKyAgIC4uLiAgICAgICAgICAgICAgICB3aGlsZSAxNzoKKyAgIC4uLiAgICAgICAgICAgICAgICAgd2hpbGUgMTg6CisgICAuLi4gICAgICAgICAgICAgICAgICB3aGlsZSAxOToKKyAgIC4uLiAgICAgICAgICAgICAgICAgICB3aGlsZSAyMDoKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgd2hpbGUgMjE6CisgICAuLi4gICAgICAgICAgICAgICAgICAgICB3aGlsZSAyMjoKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAuLi4KKyAgIFN5c3RlbUVycm9yOiB0b28gbWFueSBzdGF0aWNhbGx5IG5lc3RlZCBibG9ja3MKKworVGhpcyB0ZXN0cyBhc3NpZ25tZW50LWNvbnRleHQ7IHRoZXJlIHdhcyBhIGJ1ZyBpbiBQeXRob24gMi41IHdoZXJlIGNvbXBpbGluZworYSBjb21wbGV4ICdpZicgKG9uZSB3aXRoICdlbGlmJykgd291bGQgZmFpbCB0byBub3RpY2UgYW4gaW52YWxpZCBzdWl0ZSwKK2xlYWRpbmcgdG8gc3B1cmlvdXMgZXJyb3JzLgorCisgICA+Pj4gaWYgMToKKyAgIC4uLiAgIHgoKSA9IDEKKyAgIC4uLiBlbGlmIDE6CisgICAuLi4gICBwYXNzCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIC4uLgorICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ0XT4iLCBsaW5lIDIKKyAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAorCisgICA+Pj4gaWYgMToKKyAgIC4uLiAgIHBhc3MKKyAgIC4uLiBlbGlmIDE6CisgICAuLi4gICB4KCkgPSAxCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIC4uLgorICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ1XT4iLCBsaW5lIDQKKyAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAorCisgICA+Pj4gaWYgMToKKyAgIC4uLiAgIHgoKSA9IDEKKyAgIC4uLiBlbGlmIDE6CisgICAuLi4gICBwYXNzCisgICAuLi4gZWxzZToKKyAgIC4uLiAgIHBhc3MKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgLi4uCisgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDZdPiIsIGxpbmUgMgorICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCisKKyAgID4+PiBpZiAxOgorICAgLi4uICAgcGFzcworICAgLi4uIGVsaWYgMToKKyAgIC4uLiAgIHgoKSA9IDEKKyAgIC4uLiBlbHNlOgorICAgLi4uICAgcGFzcworICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAuLi4KKyAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0N10+IiwgbGluZSA0CisgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwKKworICAgPj4+IGlmIDE6CisgICAuLi4gICBwYXNzCisgICAuLi4gZWxpZiAxOgorICAgLi4uICAgcGFzcworICAgLi4uIGVsc2U6CisgICAuLi4gICB4KCkgPSAxCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIC4uLgorICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ4XT4iLCBsaW5lIDYKKyAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAorCis+Pj4gZihhPTIzLCBhPTIzNCkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgIC4uLgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ5XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBrZXl3b3JkIGFyZ3VtZW50IHJlcGVhdGVkCisKKz4+PiBkZWwgKCkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgIC4uLgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzUwXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBkZWxldGUgKCkKKworPj4+IHsxLCAyLCAzfSA9IDQyCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAuLi4KKyAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNTBdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBsaXRlcmFsCisKK0Nvcm5lci1jYXNlIHRoYXQgdXNlZCB0byBjcmFzaDoKKworICAgID4+PiBkZWYgZigqeHgsICoqX19kZWJ1Z19fKTogcGFzcworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBfX2RlYnVnX18KKworIiIiCisKK2ltcG9ydCByZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgU3ludGF4VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9jaGVja19lcnJvcihzZWxmLCBjb2RlLCBlcnJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9Ijx0ZXN0Y2FzZT4iLCBtb2RlPSJleGVjIiwgc3ViY2xhc3M9Tm9uZSk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgY29tcGlsaW5nIGNvZGUgcmFpc2VzIFN5bnRheEVycm9yIHdpdGggZXJydGV4dC4KKworICAgICAgICBlcnJ0ZXN0IGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbXVzdCBiZSBwcmVzZW50IGluIHRoZQorICAgICAgICB0ZXN0IG9mIHRoZSBleGNlcHRpb24gcmFpc2VkLiAgSWYgc3ViY2xhc3MgaXMgc3BlY2lmaWVkIGl0CisgICAgICAgIGlzIHRoZSBleHBlY3RlZCBzdWJjbGFzcyBvZiBTeW50YXhFcnJvciAoZS5nLiBJbmRlbnRhdGlvbkVycm9yKS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbXBpbGUoY29kZSwgZmlsZW5hbWUsIG1vZGUpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgZXJyOgorICAgICAgICAgICAgaWYgc3ViY2xhc3MgYW5kIG5vdCBpc2luc3RhbmNlKGVyciwgc3ViY2xhc3MpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU3ludGF4RXJyb3IgaXMgbm90IGEgJXMiICUgc3ViY2xhc3MuX19uYW1lX18pCisgICAgICAgICAgICBtbyA9IHJlLnNlYXJjaChlcnJ0ZXh0LCBzdHIoZXJyKSkKKyAgICAgICAgICAgIGlmIG1vIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBkaWQgbm90IGNvbnRhaW4gJyVyJyIgJSAoZXJyLCBlcnJ0ZXh0LCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImNvbXBpbGUoKSBkaWQgbm90IHJhaXNlIFN5bnRheEVycm9yIikKKworICAgIGRlZiB0ZXN0X3BhcmVuX2FyZ193aXRoX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Vycm9yKCJkZWYgZigoeCk9MjMpOiBwYXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmVudGhlc2l6ZWQgYXJnIHdpdGggZGVmYXVsdCIpCisKKyAgICBkZWYgdGVzdF9hc3NpZ25fY2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3IoImYoKSA9IDEiLCAiYXNzaWduIikKKworICAgIGRlZiB0ZXN0X2Fzc2lnbl9kZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Vycm9yKCJkZWwgZigpIiwgImRlbGV0ZSIpCisKKyAgICBkZWYgdGVzdF9nbG9iYWxfZXJyX3RoZW5fd2FybihzZWxmKToKKyAgICAgICAgIyBCdWcgdGlja2xlcjogIFRoZSBTeW50YXhFcnJvciByYWlzZWQgZm9yIG9uZSBnbG9iYWwgc3RhdGVtZW50CisgICAgICAgICMgc2hvdWxkbid0IGJlIGNsb2JiZXJlZCBieSBhIFN5bnRheFdhcm5pbmcgaXNzdWVkIGZvciBhIGxhdGVyIG9uZS4KKyAgICAgICAgc291cmNlID0gcmUuc3ViKCcoP20pXiAqOicsICcnLCAiIiJcCisgICAgICAgICAgICA6ZGVmIGVycm9yKGEpOgorICAgICAgICAgICAgOiAgICBnbG9iYWwgYSAgIyBTeW50YXhFcnJvcgorICAgICAgICAgICAgOmRlZiB3YXJuaW5nKCk6CisgICAgICAgICAgICA6ICAgIGIgPSAxCisgICAgICAgICAgICA6ICAgIGdsb2JhbCBiICAjIFN5bnRheFdhcm5pbmcKKyAgICAgICAgICAgIDoiIiIpCisgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKGFjdGlvbj0naWdub3JlJywgY2F0ZWdvcnk9U3ludGF4V2FybmluZykKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3Ioc291cmNlLCAiZ2xvYmFsIikKKyAgICAgICAgd2FybmluZ3MuZmlsdGVycy5wb3AoMCkKKworICAgIGRlZiB0ZXN0X2JyZWFrX291dHNpZGVfbG9vcChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3IoImJyZWFrIiwgIm91dHNpZGUgbG9vcCIpCisKKyAgICBkZWYgdGVzdF9kZWxldGVfZGVyZWYoc2VsZik6CisgICAgICAgIHNvdXJjZSA9IHJlLnN1YignKD9tKV4gKjonLCAnJywgIiIiXAorICAgICAgICAgICAgOmRlZiBmb28oeCk6CisgICAgICAgICAgICA6ICBkZWYgYmFyKCk6CisgICAgICAgICAgICA6ICAgIHByaW50IHgKKyAgICAgICAgICAgIDogIGRlbCB4CisgICAgICAgICAgICA6IiIiKQorICAgICAgICBzZWxmLl9jaGVja19lcnJvcihzb3VyY2UsICJuZXN0ZWQgc2NvcGUiKQorCisgICAgZGVmIHRlc3RfdW5leHBlY3RlZF9pbmRlbnQoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Vycm9yKCJmb28oKVxuIGJhcigpXG4iLCAidW5leHBlY3RlZCBpbmRlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJjbGFzcz1JbmRlbnRhdGlvbkVycm9yKQorCisgICAgZGVmIHRlc3Rfbm9faW5kZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19lcnJvcigiaWYgMTpcbmZvbygpIiwgImV4cGVjdGVkIGFuIGluZGVudGVkIGJsb2NrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViY2xhc3M9SW5kZW50YXRpb25FcnJvcikKKworICAgIGRlZiB0ZXN0X2JhZF9vdXRkZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19lcnJvcigiaWYgMTpcbiAgZm9vKClcbiBiYXIoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmluZGVudCBkb2VzIG5vdCBtYXRjaCAuKiBsZXZlbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmNsYXNzPUluZGVudGF0aW9uRXJyb3IpCisKKyAgICBkZWYgdGVzdF9rd2FyZ3NfbGFzdChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3IoImludChiYXNlPTEwLCAnMicpIiwgIm5vbi1rZXl3b3JkIGFyZyIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN5bnRheFRlc3RDYXNlKQorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zeW50YXgKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCgiYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4V2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9zeW50YXgsIHZlcmJvc2l0eT1UcnVlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zeXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlYTY1NQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtMCwwICsxLDc3NiBAQAorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQoraW1wb3J0IHVuaXR0ZXN0LCB0ZXN0LnRlc3Rfc3VwcG9ydAoraW1wb3J0IHN5cywgb3MsIGNTdHJpbmdJTworaW1wb3J0IHN0cnVjdAoraW1wb3J0IG9wZXJhdG9yCisKK2NsYXNzIFN5c01vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworICAgIGRlZiB0ZXN0X29yaWdpbmFsX2Rpc3BsYXlob29rKHNlbGYpOgorICAgICAgICBpbXBvcnQgX19idWlsdGluX18KKyAgICAgICAgc2F2ZXN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc3lzLnN0ZG91dCA9IG91dAorCisgICAgICAgIGRoID0gc3lzLl9fZGlzcGxheWhvb2tfXworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGgpCisgICAgICAgIGlmIGhhc2F0dHIoX19idWlsdGluX18sICJfIik6CisgICAgICAgICAgICBkZWwgX19idWlsdGluX18uXworCisgICAgICAgIGRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCksICIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIoX19idWlsdGluX18sICJfIikpCisgICAgICAgIGRoKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCAiNDJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19idWlsdGluX18uXywgNDIpCisKKyAgICAgICAgZGVsIHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBkaCwgNDIpCisKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVzdGRvdXQKKworICAgIGRlZiB0ZXN0X2xvc3RfZGlzcGxheWhvb2soc2VsZik6CisgICAgICAgIG9sZGRpc3BsYXlob29rID0gc3lzLmRpc3BsYXlob29rCisgICAgICAgIGRlbCBzeXMuZGlzcGxheWhvb2sKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoIjQyIiwgIjxzdHJpbmc+IiwgInNpbmdsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZXZhbCwgY29kZSkKKyAgICAgICAgc3lzLmRpc3BsYXlob29rID0gb2xkZGlzcGxheWhvb2sKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9kaXNwbGF5aG9vayhzZWxmKToKKyAgICAgICAgb2xkZGlzcGxheWhvb2sgPSBzeXMuZGlzcGxheWhvb2sKKyAgICAgICAgZGVmIGJhZGRpc3BsYXlob29rKG9iaik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHN5cy5kaXNwbGF5aG9vayA9IGJhZGRpc3BsYXlob29rCisgICAgICAgIGNvZGUgPSBjb21waWxlKCI0MiIsICI8c3RyaW5nPiIsICJzaW5nbGUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBldmFsLCBjb2RlKQorICAgICAgICBzeXMuZGlzcGxheWhvb2sgPSBvbGRkaXNwbGF5aG9vaworCisgICAgZGVmIHRlc3Rfb3JpZ2luYWxfZXhjZXB0aG9vayhzZWxmKToKKyAgICAgICAgc2F2ZXN0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgZXJyID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc3lzLnN0ZGVyciA9IGVycgorCisgICAgICAgIGVoID0gc3lzLl9fZXhjZXB0aG9va19fCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBlaCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcig0MikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGV4YzoKKyAgICAgICAgICAgIGVoKCpzeXMuZXhjX2luZm8oKSkKKworICAgICAgICBzeXMuc3RkZXJyID0gc2F2ZXN0ZGVycgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmdldHZhbHVlKCkuZW5kc3dpdGgoIlZhbHVlRXJyb3I6IDQyXG4iKSkKKworICAgICMgRklYTUU6IHRlc3RpbmcgdGhlIGNvZGUgZm9yIGEgbG9zdCBvciByZXBsYWNlZCBleGNlcHRob29rIGluCisgICAgIyBQeXRob24vcHl0aG9ucnVuLmM6OlB5RXJyX1ByaW50RXgoKSBpcyB0cmlja3kuCisKKyAgICBkZWYgdGVzdF9leGNfY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmV4Y19jbGVhciwgNDIpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBleGNfaW5mbyBpcyBwcmVzZW50IGFuZCBtYXRjaGVzIGV4YywgdGhlbiBjbGVhciBpdCwgYW5kCisgICAgICAgICMgY2hlY2sgdGhhdCBpdCB3b3JrZWQuCisgICAgICAgIGRlZiBjbGVhcl9jaGVjayhleGMpOgorICAgICAgICAgICAgdHlwLCB2YWx1ZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXAgaXMgbm90IE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUgaXMgZXhjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYWNlYmFjayBpcyBub3QgTm9uZSkKKworICAgICAgICAgICAgd2l0aCB0ZXN0LnRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgc3lzLmV4Y19jbGVhcigpCisKKyAgICAgICAgICAgIHR5cCwgdmFsdWUsIHRyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwIGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZWJhY2sgaXMgTm9uZSkKKworICAgICAgICBkZWYgY2xlYXIoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCA0MgorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGV4YzoKKyAgICAgICAgICAgICAgICBjbGVhcl9jaGVjayhleGMpCisKKyAgICAgICAgIyBSYWlzZSBhbiBleGNlcHRpb24gYW5kIGNoZWNrIHRoYXQgaXQgY2FuIGJlIGNsZWFyZWQKKyAgICAgICAgY2xlYXIoKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgYSBmcmFtZSBjdXJyZW50bHkgaGFuZGxpbmcgYW4gZXhjZXB0aW9uIGlzCisgICAgICAgICMgdW5hZmZlY3RlZCBieSBjYWxsaW5nIGV4Y19jbGVhciBpbiBhIG5lc3RlZCBmcmFtZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgMTMKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGV4YzoKKyAgICAgICAgICAgIHR5cDEsIHZhbHVlMSwgdHJhY2ViYWNrMSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBjbGVhcigpCisgICAgICAgICAgICB0eXAyLCB2YWx1ZTIsIHRyYWNlYmFjazIgPSBzeXMuZXhjX2luZm8oKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwMSBpcyB0eXAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlMSBpcyBleGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUxIGlzIHZhbHVlMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZWJhY2sxIGlzIHRyYWNlYmFjazIpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IGFuIGV4Y2VwdGlvbiBjYW4gYmUgY2xlYXJlZCBvdXRzaWRlIG9mIGFuIGV4Y2VwdCBibG9jaworICAgICAgICBjbGVhcl9jaGVjayhleGMpCisKKyAgICBkZWYgdGVzdF9leGl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5leGl0LCA0MiwgNDIpCisKKyAgICAgICAgIyBjYWxsIHdpdGhvdXQgYXJndW1lbnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQsIGV4YzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmNvZGUsIDApCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIikKKworICAgICAgICAjIGNhbGwgd2l0aCB0dXBsZSBhcmd1bWVudCB3aXRoIG9uZSBlbnRyeQorICAgICAgICAjIGVudHJ5IHdpbGwgYmUgdW5wYWNrZWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmV4aXQoNDIpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBleGM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5jb2RlLCA0MikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBleGNlcHRpb24iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQorCisgICAgICAgICMgY2FsbCB3aXRoIGludGVnZXIgYXJndW1lbnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmV4aXQoKDQyLCkpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBleGM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5jb2RlLCA0MikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBleGNlcHRpb24iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQorCisgICAgICAgICMgY2FsbCB3aXRoIHN0cmluZyBhcmd1bWVudAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuZXhpdCgiZXhpdCIpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBleGM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5jb2RlLCAiZXhpdCIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIikKKworICAgICAgICAjIGNhbGwgd2l0aCB0dXBsZSBhcmd1bWVudCB3aXRoIHR3byBlbnRyaWVzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5leGl0KCgxNywgMjMpKQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuY29kZSwgKDE3LCAyMykpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIikKKworICAgICAgICAjIHRlc3QgdGhhdCB0aGUgZXhpdCBtYWNoaW5lcnkgaGFuZGxlcyBTeXN0ZW1FeGl0cyBwcm9wZXJseQorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICAjIGJvdGggdW5ub3JtYWxpemVkLi4uCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYWlzZSBTeXN0ZW1FeGl0LCA0NiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCA0NikKKyAgICAgICAgIyAuLi4gYW5kIG5vcm1hbGl6ZWQKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJhaXNlIFN5c3RlbUV4aXQoNDcpIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQorCisgICAgICAgIGRlZiBjaGVja19leGl0X21lc3NhZ2UoY29kZSwgZXhwZWN0ZWQsIGVudj1Ob25lKToKKyAgICAgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgY29kZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy5yZXR1cm5jb2RlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0ZGVyci5zdGFydHN3aXRoKGV4cGVjdGVkKSwKKyAgICAgICAgICAgICAgICAiJXMgZG9lc24ndCBzdGFydCB3aXRoICVzIiAlIChyZXByKHN0ZGVyciksIHJlcHIoZXhwZWN0ZWQpKSkKKworICAgICAgICAjIHRlc3QgdGhhdCBzdGRlcnIgYnVmZmVyIGlmIGZsdXNoZWQgYmVmb3JlIHRoZSBleGl0IG1lc3NhZ2UgaXMgd3JpdHRlbgorICAgICAgICAjIGludG8gc3RkZXJyCisgICAgICAgIGNoZWNrX2V4aXRfbWVzc2FnZSgKKyAgICAgICAgICAgIHInaW1wb3J0IHN5czsgc3lzLnN0ZGVyci53cml0ZSgidW5mbHVzaGVkLCIpOyBzeXMuZXhpdCgibWVzc2FnZSIpJywKKyAgICAgICAgICAgIGIidW5mbHVzaGVkLG1lc3NhZ2UiKQorCisgICAgICAgICMgdGVzdCB0aGF0IHRoZSB1bmljb2RlIG1lc3NhZ2UgaXMgZW5jb2RlZCB0byB0aGUgc3RkZXJyIGVuY29kaW5nCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsnUFlUSE9OSU9FTkNPRElORyddID0gJ2xhdGluLTEnCisgICAgICAgIGNoZWNrX2V4aXRfbWVzc2FnZSgKKyAgICAgICAgICAgIHInaW1wb3J0IHN5czsgc3lzLmV4aXQodSJoXHhlOSIpJywKKyAgICAgICAgICAgIGIiaFx4ZTkiLCBlbnY9ZW52KQorCisgICAgZGVmIHRlc3RfZ2V0ZGVmYXVsdGVuY29kaW5nKHNlbGYpOgorICAgICAgICBpZiB0ZXN0LnRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcsIDQyKQorICAgICAgICAgICAgIyBjYW4ndCBjaGVjayBtb3JlIHRoYW4gdGhlIHR5cGUsIGFzIHRoZSB1c2VyIG1pZ2h0IGhhdmUgY2hhbmdlZCBpdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKSwgc3RyKQorCisgICAgIyB0ZXN0aW5nIHN5cy5zZXR0cmFjZSgpIGlzIGRvbmUgaW4gdGVzdF9zeXNfc2V0dHJhY2UucHkKKyAgICAjIHRlc3Rpbmcgc3lzLnNldHByb2ZpbGUoKSBpcyBkb25lIGluIHRlc3Rfc3lzX3NldHByb2ZpbGUucHkKKworICAgIGRlZiB0ZXN0X3NldGNoZWNraW50ZXJ2YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLnNldGNoZWNraW50ZXJ2YWwpCisgICAgICAgIG9yaWcgPSBzeXMuZ2V0Y2hlY2tpbnRlcnZhbCgpCisgICAgICAgIGZvciBuIGluIDAsIDEwMCwgMTIwLCBvcmlnOiAjIG9yaWcgbGFzdCB0byByZXN0b3JlIHN0YXJ0aW5nIHN0YXRlCisgICAgICAgICAgICBzeXMuc2V0Y2hlY2tpbnRlcnZhbChuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0Y2hlY2tpbnRlcnZhbCgpLCBuKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaW9ubGltaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmdldHJlY3Vyc2lvbmxpbWl0LCA0MikKKyAgICAgICAgb2xkbGltaXQgPSBzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5zZXRyZWN1cnNpb25saW1pdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3lzLnNldHJlY3Vyc2lvbmxpbWl0LCAtNDIpCisgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdCgxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKSwgMTAwMDApCisgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdChvbGRsaW1pdCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzeXMuc2V0cmVjdXJzaW9ubGltaXQsIDEgPDwgMzEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdCgoMSA8PCAzMSkgLSA1KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgaXNzdWUxMzU0NjogaXNpbnN0YW5jZShlLCBWYWx1ZUVycm9yKSB1c2VkIHRvIGZhaWwKKyAgICAgICAgICAgICAgICAjIHdoZW4gdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBjbG9zZSB0byAxPDwzMQorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnNldHJlY3Vyc2lvbmxpbWl0KG9sZGxpbWl0KQorCisgICAgZGVmIHRlc3RfZ2V0d2luZG93c3ZlcnNpb24oc2VsZik6CisgICAgICAgICMgUmFpc2UgU2tpcFRlc3QgaWYgc3lzIGRvZXNuJ3QgaGF2ZSBnZXR3aW5kb3dzdmVyc2lvbiBhdHRyaWJ1dGUKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQuZ2V0X2F0dHJpYnV0ZShzeXMsICJnZXR3aW5kb3dzdmVyc2lvbiIpCisgICAgICAgIHYgPSBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbMF0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbMV0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbMl0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbM10sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZbNF0sIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgdiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYubWFqb3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYubWlub3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYuYnVpbGQsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYucGxhdGZvcm0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYuc2VydmljZV9wYWNrLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnNlcnZpY2VfcGFja19taW5vciwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uodi5zZXJ2aWNlX3BhY2tfbWFqb3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYuc3VpdGVfbWFzaywgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uodi5wcm9kdWN0X3R5cGUsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzBdLCB2Lm1ham9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbMV0sIHYubWlub3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlsyXSwgdi5idWlsZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzNdLCB2LnBsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbNF0sIHYuc2VydmljZV9wYWNrKQorCisgICAgICAgICMgVGhpcyBpcyBob3cgcGxhdGZvcm0ucHkgY2FsbHMgaXQuIE1ha2Ugc3VyZSB0dXBsZQorICAgICAgICAjICBzdGlsbCBoYXMgNSBlbGVtZW50cworICAgICAgICBtYWosIG1pbiwgYnVpbGRubywgcGxhdCwgY3NkID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKKworICAgIGRlZiB0ZXN0X2Rsb3BlbmZsYWdzKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHN5cywgInNldGRsb3BlbmZsYWdzIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzeXMsICJnZXRkbG9wZW5mbGFncyIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuZ2V0ZGxvcGVuZmxhZ3MsIDQyKQorICAgICAgICAgICAgb2xkZmxhZ3MgPSBzeXMuZ2V0ZGxvcGVuZmxhZ3MoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuc2V0ZGxvcGVuZmxhZ3MpCisgICAgICAgICAgICBzeXMuc2V0ZGxvcGVuZmxhZ3Mob2xkZmxhZ3MrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldGRsb3BlbmZsYWdzKCksIG9sZGZsYWdzKzEpCisgICAgICAgICAgICBzeXMuc2V0ZGxvcGVuZmxhZ3Mob2xkZmxhZ3MpCisKKyAgICBkZWYgdGVzdF9yZWZjb3VudChzZWxmKToKKyAgICAgICAgIyBuIGhlcmUgbXVzdCBiZSBhIGdsb2JhbCBpbiBvcmRlciBmb3IgdGhpcyB0ZXN0IHRvIHBhc3Mgd2hpbGUKKyAgICAgICAgIyB0cmFjaW5nIHdpdGggYSBweXRob24gZnVuY3Rpb24uICBUcmFjaW5nIGNhbGxzIFB5RnJhbWVfRmFzdFRvTG9jYWxzCisgICAgICAgICMgd2hpY2ggd2lsbCBhZGQgYSBjb3B5IG9mIGFueSBsb2NhbHMgdG8gdGhlIGZyYW1lIG9iamVjdCwgY2F1c2luZworICAgICAgICAjIHRoZSByZWZlcmVuY2UgY291bnQgdG8gaW5jcmVhc2UgYnkgMiBpbnN0ZWFkIG9mIDEuCisgICAgICAgIGdsb2JhbCBuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmdldHJlZmNvdW50KQorICAgICAgICBjID0gc3lzLmdldHJlZmNvdW50KE5vbmUpCisgICAgICAgIG4gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KE5vbmUpLCBjKzEpCisgICAgICAgIGRlbCBuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KE5vbmUpLCBjKQorICAgICAgICBpZiBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuZ2V0dG90YWxyZWZjb3VudCgpLCBpbnQpCisKKyAgICBkZWYgdGVzdF9nZXRmcmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuX2dldGZyYW1lLCA0MiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN5cy5fZ2V0ZnJhbWUsIDIwMDAwMDAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIFN5c01vZHVsZVRlc3QudGVzdF9nZXRmcmFtZS5pbV9mdW5jLmZ1bmNfY29kZSBcCisgICAgICAgICAgICBpcyBzeXMuX2dldGZyYW1lKCkuZl9jb2RlCisgICAgICAgICkKKworICAgICMgc3lzLl9jdXJyZW50X2ZyYW1lcygpIGlzIGEgQ1B5dGhvbi1vbmx5IGdpbW1pY2suCisgICAgZGVmIHRlc3RfY3VycmVudF9mcmFtZXMoc2VsZik6CisgICAgICAgIGhhdmVfdGhyZWFkcyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHRocmVhZAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBoYXZlX3RocmVhZHMgPSBGYWxzZQorCisgICAgICAgIGlmIGhhdmVfdGhyZWFkczoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZXNfd2l0aF90aHJlYWRzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZXNfd2l0aG91dF90aHJlYWRzKCkKKworICAgICMgVGVzdCBzeXMuX2N1cnJlbnRfZnJhbWVzKCkgaW4gYSBXSVRIX1RIUkVBRFMgYnVpbGQuCisgICAgQHRlc3QudGVzdF9zdXBwb3J0LnJlYXBfdGhyZWFkcworICAgIGRlZiBjdXJyZW50X2ZyYW1lc193aXRoX3RocmVhZHMoc2VsZik6CisgICAgICAgIGltcG9ydCB0aHJlYWRpbmcsIHRocmVhZAorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisKKyAgICAgICAgIyBTcGF3biBhIHRocmVhZCB0aGF0IGJsb2NrcyBhdCBhIGtub3duIHBsYWNlLiAgVGhlbiB0aGUgbWFpbgorICAgICAgICAjIHRocmVhZCBkb2VzIHN5cy5fY3VycmVudF9mcmFtZXMoKSwgYW5kIHZlcmlmaWVzIHRoYXQgdGhlIGZyYW1lcworICAgICAgICAjIHJldHVybmVkIG1ha2Ugc2Vuc2UuCisgICAgICAgIGVudGVyZWRfZyA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIGxlYXZlX2cgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICB0aHJlYWRfaW5mbyA9IFtdICAjIHRoZSB0aHJlYWQncyBpZAorCisgICAgICAgIGRlZiBmMTIzKCk6CisgICAgICAgICAgICBnNDU2KCkKKworICAgICAgICBkZWYgZzQ1NigpOgorICAgICAgICAgICAgdGhyZWFkX2luZm8uYXBwZW5kKHRocmVhZC5nZXRfaWRlbnQoKSkKKyAgICAgICAgICAgIGVudGVyZWRfZy5zZXQoKQorICAgICAgICAgICAgbGVhdmVfZy53YWl0KCkKKworICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZjEyMykKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIGVudGVyZWRfZy53YWl0KCkKKworICAgICAgICAjIEF0IHRoaXMgcG9pbnQsIHQgaGFzIGZpbmlzaGVkIGl0cyBlbnRlcmVkX2cuc2V0KCksIGFsdGhvdWdoIGl0J3MKKyAgICAgICAgIyBpbXBvc3NpYmxlIHRvIGd1ZXNzIHdoZXRoZXIgaXQncyBzdGlsbCBvbiB0aGF0IGxpbmUgb3IgaGFzIG1vdmVkIG9uCisgICAgICAgICMgdG8gaXRzIGxlYXZlX2cud2FpdCgpLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0aHJlYWRfaW5mbyksIDEpCisgICAgICAgIHRocmVhZF9pZCA9IHRocmVhZF9pbmZvWzBdCisKKyAgICAgICAgZCA9IHN5cy5fY3VycmVudF9mcmFtZXMoKQorCisgICAgICAgIG1haW5faWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtYWluX2lkLCBkKQorICAgICAgICBzZWxmLmFzc2VydEluKHRocmVhZF9pZCwgZCkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBjYXB0dXJlZCBtYWluLXRocmVhZCBmcmFtZSBpcyBfdGhpc18gZnJhbWUuCisgICAgICAgIGZyYW1lID0gZC5wb3AobWFpbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZyYW1lIGlzIHN5cy5fZ2V0ZnJhbWUoKSkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBjYXB0dXJlZCB0aHJlYWQgZnJhbWUgaXMgYmxvY2tlZCBpbiBnNDU2LCBjYWxsZWQKKyAgICAgICAgIyBmcm9tIGYxMjMuICBUaGlzIGlzIGEgbGl0dGUgdHJpY2t5LCBzaW5jZSB2YXJpb3VzIGJpdHMgb2YKKyAgICAgICAgIyB0aHJlYWRpbmcucHkgYXJlIGFsc28gaW4gdGhlIHRocmVhZCdzIGNhbGwgc3RhY2suCisgICAgICAgIGZyYW1lID0gZC5wb3AodGhyZWFkX2lkKQorICAgICAgICBzdGFjayA9IHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKGZyYW1lKQorICAgICAgICBmb3IgaSwgKGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNuYW1lLCBzb3VyY2VsaW5lKSBpbiBlbnVtZXJhdGUoc3RhY2spOgorICAgICAgICAgICAgaWYgZnVuY25hbWUgPT0gImYxMjMiOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRpZG4ndCBmaW5kIGYxMjMoKSBvbiB0aHJlYWQncyBjYWxsIHN0YWNrIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXJjZWxpbmUsICJnNDU2KCkiKQorCisgICAgICAgICMgQW5kIHRoZSBuZXh0IHJlY29yZCBtdXN0IGJlIGZvciBnNDU2KCkuCisgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNuYW1lLCBzb3VyY2VsaW5lID0gc3RhY2tbaSsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmNuYW1lLCAiZzQ1NiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc291cmNlbGluZSwgWyJsZWF2ZV9nLndhaXQoKSIsICJlbnRlcmVkX2cuc2V0KCkiXSkKKworICAgICAgICAjIFJlYXAgdGhlIHNwYXduZWQgdGhyZWFkLgorICAgICAgICBsZWF2ZV9nLnNldCgpCisgICAgICAgIHQuam9pbigpCisKKyAgICAjIFRlc3Qgc3lzLl9jdXJyZW50X2ZyYW1lcygpIHdoZW4gdGhyZWFkIHN1cHBvcnQgZG9lc24ndCBleGlzdC4KKyAgICBkZWYgY3VycmVudF9mcmFtZXNfd2l0aG91dF90aHJlYWRzKHNlbGYpOgorICAgICAgICAjIE5vdCBtdWNoIGhhcHBlbnMgaGVyZTogIHRoZXJlIGlzIG9ubHkgb25lIHRocmVhZCwgd2l0aCBhcnRpZmljaWFsCisgICAgICAgICMgInRocmVhZCBpZCIgMC4KKyAgICAgICAgZCA9IHN5cy5fY3VycmVudF9mcmFtZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigwLCBkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZFswXSBpcyBzeXMuX2dldGZyYW1lKCkpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmFwaV92ZXJzaW9uLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuYXJndiwgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuYnl0ZW9yZGVyLCAoImxpdHRsZSIsICJiaWciKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5idWlsdGluX21vZHVsZV9uYW1lcywgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuY29weXJpZ2h0LCBiYXNlc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmV4ZWNfcHJlZml4LCBiYXNlc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmV4ZWN1dGFibGUsIGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5mbG9hdF9pbmZvKSwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmZsb2F0X2luZm8ucmFkaXgsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5sb25nX2luZm8pLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3lzLmxvbmdfaW5mby5iaXRzX3Blcl9kaWdpdCAlIDUgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5sb25nX2luZm8uc2l6ZW9mX2RpZ2l0ID49IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzeXMubG9uZ19pbmZvLmJpdHNfcGVyX2RpZ2l0KSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3lzLmxvbmdfaW5mby5zaXplb2ZfZGlnaXQpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGV4dmVyc2lvbiwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heGludCwgaW50KQorICAgICAgICBpZiB0ZXN0LnRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heHVuaWNvZGUsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5wbGF0Zm9ybSwgYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5wcmVmaXgsIGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMudmVyc2lvbiwgYmFzZXN0cmluZykKKyAgICAgICAgdmkgPSBzeXMudmVyc2lvbl9pbmZvCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVs6XSwgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZpKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpWzBdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVsxXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlbMl0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih2aVszXSwgKCJhbHBoYSIsICJiZXRhIiwgImNhbmRpZGF0ZSIsICJmaW5hbCIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlbNF0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpLm1ham9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aS5taW5vciwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmkubWljcm8sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih2aS5yZWxlYXNlbGV2ZWwsICgiYWxwaGEiLCAiYmV0YSIsICJjYW5kaWRhdGUiLCAiZmluYWwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpLnNlcmlhbCwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpWzBdLCB2aS5tYWpvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aVsxXSwgdmkubWlub3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlbMl0sIHZpLm1pY3JvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpWzNdLCB2aS5yZWxlYXNlbGV2ZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlbNF0sIHZpLnNlcmlhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZpID4gKDEsMCwwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5mbG9hdF9yZXByX3N0eWxlLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3lzLmZsb2F0X3JlcHJfc3R5bGUsICgnc2hvcnQnLCAnbGVnYWN5JykpCisKKyAgICBkZWYgdGVzdF80MzU4MShzZWxmKToKKyAgICAgICAgIyBDYW4ndCB1c2Ugc3lzLnN0ZG91dCwgYXMgdGhpcyBpcyBhIGNTdHJpbmdJTyBvYmplY3Qgd2hlbgorICAgICAgICAjIHRoZSB0ZXN0IHJ1bnMgdW5kZXIgcmVncnRlc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMuX19zdGRvdXRfXy5lbmNvZGluZyA9PSBzeXMuX19zdGRlcnJfXy5lbmNvZGluZykKKworICAgIGRlZiB0ZXN0X3N5c19mbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5mbGFncykKKyAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwgInB5M2tfd2FybmluZyIsICJkaXZpc2lvbl93YXJuaW5nIiwgImRpdmlzaW9uX25ldyIsCisgICAgICAgICAgICAgICAgICJpbnNwZWN0IiwgImludGVyYWN0aXZlIiwgIm9wdGltaXplIiwgImRvbnRfd3JpdGVfYnl0ZWNvZGUiLAorICAgICAgICAgICAgICAgICAibm9fc2l0ZSIsICJpZ25vcmVfZW52aXJvbm1lbnQiLCAidGFiY2hlY2siLCAidmVyYm9zZSIsCisgICAgICAgICAgICAgICAgICJ1bmljb2RlIiwgImJ5dGVzX3dhcm5pbmciLCAiaGFzaF9yYW5kb21pemF0aW9uIikKKyAgICAgICAgZm9yIGF0dHIgaW4gYXR0cnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzeXMuZmxhZ3MsIGF0dHIpLCBhdHRyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGdldGF0dHIoc3lzLmZsYWdzLCBhdHRyKSksIGludCwgYXR0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc3lzLmZsYWdzKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX3R5cGVfY2FjaGUoc2VsZik6CisgICAgICAgIHN5cy5fY2xlYXJfdHlwZV9jYWNoZSgpCisKKyAgICBkZWYgdGVzdF9pb2VuY29kaW5nKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCisKKyAgICAgICAgIyBUZXN0IGNoYXJhY3RlcjogY2VudCBzaWduLCBlbmNvZGVkIGFzIDB4NEEgKEFTQ0lJIEopIGluIENQNDI0LAorICAgICAgICAjIG5vdCByZXByZXNlbnRhYmxlIGluIEFTQ0lJLgorCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImNwNDI0IgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludCB1bmljaHIoMHhhMiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgdW5pY2hyKDB4YTIpLmVuY29kZSgiY3A0MjQiKSkKKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJhc2NpaTpyZXBsYWNlIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludCB1bmljaHIoMHhhMiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgJz8nKQorCisgICAgZGVmIHRlc3RfY2FsbF90cmFjaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5jYWxsX3RyYWNpbmcoc3RyLCAoMiwpKSwgIjIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5jYWxsX3RyYWNpbmcsIHN0ciwgMikKKworICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGUoc2VsZik6CisgICAgICAgICMgc3lzLmV4ZWN1dGFibGUgc2hvdWxkIGJlIGFic29sdXRlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKSwgc3lzLmV4ZWN1dGFibGUpCisKKyAgICAgICAgIyBJc3N1ZSAjNzc3NDogRW5zdXJlIHRoYXQgc3lzLmV4ZWN1dGFibGUgaXMgYW4gZW1wdHkgc3RyaW5nIGlmIGFyZ3ZbMF0KKyAgICAgICAgIyBoYXMgYmVlbiBzZXQgdG8gYW4gbm9uIGV4aXN0ZW50IHByb2dyYW0gbmFtZSBhbmQgUHl0aG9uIGlzIHVuYWJsZSB0bworICAgICAgICAjIHJldHJpZXZlIHRoZSByZWFsIHByb2dyYW0gbmFtZQorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICAjIEZvciBhIG5vcm1hbCBpbnN0YWxsYXRpb24sIGl0IHNob3VsZCB3b3JrIHdpdGhvdXQgJ2N3ZCcKKyAgICAgICAgIyBhcmd1bWVudC4gRm9yIHRlc3QgcnVucyBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LCBzZWUgIzc3NzQuCisgICAgICAgIHB5dGhvbl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgWyJub25leGlzdGVudCIsICItYyIsICdpbXBvcnQgc3lzOyBwcmludCByZXByKHN5cy5leGVjdXRhYmxlKSddLAorICAgICAgICAgICAgZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY3dkPXB5dGhvbl9kaXIpCisgICAgICAgIGV4ZWN1dGFibGUgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEluKGV4ZWN1dGFibGUsIFsiJyciLCByZXByKHN5cy5leGVjdXRhYmxlKV0pCisKK2NsYXNzIFNpemVvZlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLlAgPSBzdHJ1Y3QuY2FsY3NpemUoJ1AnKQorICAgICAgICBzZWxmLmxvbmdkaWdpdCA9IHN5cy5sb25nX2luZm8uc2l6ZW9mX2RpZ2l0CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgc2VsZi5nY19oZWFkc2l6ZSA9IF90ZXN0Y2FwaS5TSVpFT0ZfUFlHQ19IRUFECisgICAgICAgIHNlbGYuZmlsZSA9IG9wZW4odGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOLCAnd2InKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQorICAgICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgY2hlY2tfc2l6ZW9mID0gdGVzdC50ZXN0X3N1cHBvcnQuY2hlY2tfc2l6ZW9mCisKKyAgICBkZWYgdGVzdF9nY19oZWFkX3NpemUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgZ2MgaGVhZGVyIHNpemUgaXMgYWRkZWQgdG8gb2JqZWN0cyB0cmFja2VkIGJ5IHRoZSBnYy4KKyAgICAgICAgc2l6ZSA9IHRlc3QudGVzdF9zdXBwb3J0LmNhbGNvYmpzaXplCisgICAgICAgIGdjX2hlYWRlcl9zaXplID0gc2VsZi5nY19oZWFkc2l6ZQorICAgICAgICAjIGJvb2wgb2JqZWN0cyBhcmUgbm90IGdjIHRyYWNrZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKFRydWUpLCBzaXplKCdsJykpCisgICAgICAgICMgYnV0IGxpc3RzIGFyZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoW10pLCBzaXplKCdQIFBQJykgKyBnY19oZWFkZXJfc2l6ZSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNpemUgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5jYWxjb2Jqc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoVHJ1ZSwgLTEpLCBzaXplKCdsJykpCisKKyAgICBkZWYgdGVzdF9vYmplY3R0eXBlcyhzZWxmKToKKyAgICAgICAgIyBjaGVjayBhbGwgdHlwZXMgZGVmaW5lZCBpbiBPYmplY3RzLworICAgICAgICBzaXplID0gdGVzdC50ZXN0X3N1cHBvcnQuY2FsY29ianNpemUKKyAgICAgICAgdnNpemUgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5jYWxjdm9ianNpemUKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgorICAgICAgICAjIGJvb2wKKyAgICAgICAgY2hlY2soVHJ1ZSwgc2l6ZSgnbCcpKQorICAgICAgICAjIGJ1ZmZlcgorICAgICAgICB3aXRoIHRlc3QudGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIGNoZWNrKGJ1ZmZlcignJyksIHNpemUoJzJQMlBpbCcpKQorICAgICAgICAjIGJ1aWx0aW5fZnVuY3Rpb25fb3JfbWV0aG9kCisgICAgICAgIGNoZWNrKGxlbiwgc2l6ZSgnM1AnKSkKKyAgICAgICAgIyBieXRlYXJyYXkKKyAgICAgICAgc2FtcGxlcyA9IFsnJywgJ3UnKjEwMDAwMF0KKyAgICAgICAgZm9yIHNhbXBsZSBpbiBzYW1wbGVzOgorICAgICAgICAgICAgeCA9IGJ5dGVhcnJheShzYW1wbGUpCisgICAgICAgICAgICBjaGVjayh4LCB2c2l6ZSgnaVBQJykgKyB4Ll9fYWxsb2NfXygpKQorICAgICAgICAjIGJ5dGVhcnJheV9pdGVyYXRvcgorICAgICAgICBjaGVjayhpdGVyKGJ5dGVhcnJheSgpKSwgc2l6ZSgnUFAnKSkKKyAgICAgICAgIyBjZWxsCisgICAgICAgIGRlZiBnZXRfY2VsbCgpOgorICAgICAgICAgICAgeCA9IDQyCisgICAgICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgcmV0dXJuIGlubmVyCisgICAgICAgIGNoZWNrKGdldF9jZWxsKCkuZnVuY19jbG9zdXJlWzBdLCBzaXplKCdQJykpCisgICAgICAgICMgY2xhc3NvYmogKG9sZC1zdHlsZSBjbGFzcykKKyAgICAgICAgY2xhc3MgY2xhc3Nfb2xkc3R5bGUoKToKKyAgICAgICAgICAgIGRlZiBtZXRob2QoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGNoZWNrKGNsYXNzX29sZHN0eWxlLCBzaXplKCc3UCcpKQorICAgICAgICAjIGluc3RhbmNlIChvbGQtc3R5bGUgY2xhc3MpCisgICAgICAgIGNoZWNrKGNsYXNzX29sZHN0eWxlKCksIHNpemUoJzNQJykpCisgICAgICAgICMgaW5zdGFuY2VtZXRob2QgKG9sZC1zdHlsZSBjbGFzcykKKyAgICAgICAgY2hlY2soY2xhc3Nfb2xkc3R5bGUoKS5tZXRob2QsIHNpemUoJzRQJykpCisgICAgICAgICMgY29tcGxleAorICAgICAgICBjaGVjayhjb21wbGV4KDAsMSksIHNpemUoJzJkJykpCisgICAgICAgICMgY29kZQorICAgICAgICBjaGVjayhnZXRfY2VsbCgpLmZ1bmNfY29kZSwgc2l6ZSgnNGk4UGkzUCcpKQorICAgICAgICAjIEJhc2VFeGNlcHRpb24KKyAgICAgICAgY2hlY2soQmFzZUV4Y2VwdGlvbigpLCBzaXplKCczUCcpKQorICAgICAgICAjIFVuaWNvZGVFbmNvZGVFcnJvcgorICAgICAgICBjaGVjayhVbmljb2RlRW5jb2RlRXJyb3IoIiIsIHUiIiwgMCwgMCwgIiIpLCBzaXplKCc1UDJQUCcpKQorICAgICAgICAjIFVuaWNvZGVEZWNvZGVFcnJvcgorICAgICAgICBjaGVjayhVbmljb2RlRGVjb2RlRXJyb3IoIiIsICIiLCAwLCAwLCAiIiksIHNpemUoJzVQMlBQJykpCisgICAgICAgICMgVW5pY29kZVRyYW5zbGF0ZUVycm9yCisgICAgICAgIGNoZWNrKFVuaWNvZGVUcmFuc2xhdGVFcnJvcih1IiIsIDAsIDEsICIiKSwgc2l6ZSgnNVAyUFAnKSkKKyAgICAgICAgIyBtZXRob2RfZGVzY3JpcHRvciAoZGVzY3JpcHRvciBvYmplY3QpCisgICAgICAgIGNoZWNrKHN0ci5sb3dlciwgc2l6ZSgnMlBQJykpCisgICAgICAgICMgY2xhc3NtZXRob2RfZGVzY3JpcHRvciAoZGVzY3JpcHRvciBvYmplY3QpCisgICAgICAgICMgWFhYCisgICAgICAgICMgbWVtYmVyX2Rlc2NyaXB0b3IgKGRlc2NyaXB0b3Igb2JqZWN0KQorICAgICAgICBpbXBvcnQgZGF0ZXRpbWUKKyAgICAgICAgY2hlY2soZGF0ZXRpbWUudGltZWRlbHRhLmRheXMsIHNpemUoJzJQUCcpKQorICAgICAgICAjIGdldHNldF9kZXNjcmlwdG9yIChkZXNjcmlwdG9yIG9iamVjdCkKKyAgICAgICAgaW1wb3J0IF9fYnVpbHRpbl9fCisgICAgICAgIGNoZWNrKF9fYnVpbHRpbl9fLmZpbGUuY2xvc2VkLCBzaXplKCcyUFAnKSkKKyAgICAgICAgIyB3cmFwcGVyX2Rlc2NyaXB0b3IgKGRlc2NyaXB0b3Igb2JqZWN0KQorICAgICAgICBjaGVjayhpbnQuX19hZGRfXywgc2l6ZSgnMlAyUCcpKQorICAgICAgICAjIGRpY3Rwcm94eQorICAgICAgICBjbGFzcyBDKG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2hlY2soQy5fX2RpY3RfXywgc2l6ZSgnUCcpKQorICAgICAgICAjIG1ldGhvZC13cmFwcGVyIChkZXNjcmlwdG9yIG9iamVjdCkKKyAgICAgICAgY2hlY2soe30uX19pdGVyX18sIHNpemUoJzJQJykpCisgICAgICAgICMgZGljdAorICAgICAgICBjaGVjayh7fSwgc2l6ZSgnM1AyUCcgKyA4KidQMlAnKSkKKyAgICAgICAgeCA9IHsxOjEsIDI6MiwgMzozLCA0OjQsIDU6NSwgNjo2LCA3OjcsIDg6OH0KKyAgICAgICAgY2hlY2soeCwgc2l6ZSgnM1AyUCcgKyA4KidQMlAnKSArIDE2KnN0cnVjdC5jYWxjc2l6ZSgnUDJQJykpCisgICAgICAgICMgZGljdGlvbmFyeS1rZXlpdGVyYXRvcgorICAgICAgICBjaGVjayh7fS5pdGVya2V5cygpLCBzaXplKCdQMlBQUCcpKQorICAgICAgICAjIGRpY3Rpb25hcnktdmFsdWVpdGVyYXRvcgorICAgICAgICBjaGVjayh7fS5pdGVydmFsdWVzKCksIHNpemUoJ1AyUFBQJykpCisgICAgICAgICMgZGljdGlvbmFyeS1pdGVtaXRlcmF0b3IKKyAgICAgICAgY2hlY2soe30uaXRlcml0ZW1zKCksIHNpemUoJ1AyUFBQJykpCisgICAgICAgICMgZWxsaXBzZXMKKyAgICAgICAgY2hlY2soRWxsaXBzaXMsIHNpemUoJycpKQorICAgICAgICAjIEVuY29kaW5nTWFwCisgICAgICAgIGltcG9ydCBjb2RlY3MsIGVuY29kaW5ncy5pc284ODU5XzMKKyAgICAgICAgeCA9IGNvZGVjcy5jaGFybWFwX2J1aWxkKGVuY29kaW5ncy5pc284ODU5XzMuZGVjb2RpbmdfdGFibGUpCisgICAgICAgIGNoZWNrKHgsIHNpemUoJzMyQjJpQicpKQorICAgICAgICAjIGVudW1lcmF0ZQorICAgICAgICBjaGVjayhlbnVtZXJhdGUoW10pLCBzaXplKCdsM1AnKSkKKyAgICAgICAgIyBmaWxlCisgICAgICAgIGNoZWNrKHNlbGYuZmlsZSwgc2l6ZSgnNFAyaTRQM2kzUDNpJykpCisgICAgICAgICMgZmxvYXQKKyAgICAgICAgY2hlY2soZmxvYXQoMCksIHNpemUoJ2QnKSkKKyAgICAgICAgIyBzeXMuZmxvYXRpbmZvCisgICAgICAgIGNoZWNrKHN5cy5mbG9hdF9pbmZvLCB2c2l6ZSgnJykgKyBzZWxmLlAgKiBsZW4oc3lzLmZsb2F0X2luZm8pKQorICAgICAgICAjIGZyYW1lCisgICAgICAgIGltcG9ydCBpbnNwZWN0CisgICAgICAgIENPX01BWEJMT0NLUyA9IDIwCisgICAgICAgIHggPSBpbnNwZWN0LmN1cnJlbnRmcmFtZSgpCisgICAgICAgIG5jZWxscyA9IGxlbih4LmZfY29kZS5jb19jZWxsdmFycykKKyAgICAgICAgbmZyZWVzID0gbGVuKHguZl9jb2RlLmNvX2ZyZWV2YXJzKQorICAgICAgICBleHRyYXMgPSB4LmZfY29kZS5jb19zdGFja3NpemUgKyB4LmZfY29kZS5jb19ubG9jYWxzICtcCisgICAgICAgICAgICAgICAgIG5jZWxscyArIG5mcmVlcyAtIDEKKyAgICAgICAgY2hlY2soeCwgdnNpemUoJzEyUDNpJyArIENPX01BWEJMT0NLUyonM2knICsgJ1AnICsgZXh0cmFzKidQJykpCisgICAgICAgICMgZnVuY3Rpb24KKyAgICAgICAgZGVmIGZ1bmMoKTogcGFzcworICAgICAgICBjaGVjayhmdW5jLCBzaXplKCc5UCcpKQorICAgICAgICBjbGFzcyBjKCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgYmFyKGNscyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGNoZWNrKGZvbywgc2l6ZSgnUCcpKQorICAgICAgICAgICAgIyBjbGFzc21ldGhvZAorICAgICAgICAgICAgY2hlY2soYmFyLCBzaXplKCdQJykpCisgICAgICAgICMgZ2VuZXJhdG9yCisgICAgICAgIGRlZiBnZXRfZ2VuKCk6IHlpZWxkIDEKKyAgICAgICAgY2hlY2soZ2V0X2dlbigpLCBzaXplKCdQaTJQJykpCisgICAgICAgICMgaW50ZWdlcgorICAgICAgICBjaGVjaygxLCBzaXplKCdsJykpCisgICAgICAgIGNoZWNrKDEwMCwgc2l6ZSgnbCcpKQorICAgICAgICAjIGl0ZXJhdG9yCisgICAgICAgIGNoZWNrKGl0ZXIoJ2FiYycpLCBzaXplKCdsUCcpKQorICAgICAgICAjIGNhbGxhYmxlLWl0ZXJhdG9yCisgICAgICAgIGltcG9ydCByZQorICAgICAgICBjaGVjayhyZS5maW5kaXRlcignJywnJyksIHNpemUoJzJQJykpCisgICAgICAgICMgbGlzdAorICAgICAgICBzYW1wbGVzID0gW1tdLCBbMSwyLDNdLCBbJzEnLCAnMicsICczJ11dCisgICAgICAgIGZvciBzYW1wbGUgaW4gc2FtcGxlczoKKyAgICAgICAgICAgIGNoZWNrKHNhbXBsZSwgdnNpemUoJ1BQJykgKyBsZW4oc2FtcGxlKSpzZWxmLlApCisgICAgICAgICMgc29ydHdyYXBwZXIgKGxpc3QpCisgICAgICAgICMgWFhYCisgICAgICAgICMgY21wd3JhcHBlciAobGlzdCkKKyAgICAgICAgIyBYWFgKKyAgICAgICAgIyBsaXN0aXRlcmF0b3IgKGxpc3QpCisgICAgICAgIGNoZWNrKGl0ZXIoW10pLCBzaXplKCdsUCcpKQorICAgICAgICAjIGxpc3RyZXZlcnNlaXRlcmF0b3IgKGxpc3QpCisgICAgICAgIGNoZWNrKHJldmVyc2VkKFtdKSwgc2l6ZSgnbFAnKSkKKyAgICAgICAgIyBsb25nCisgICAgICAgIGNoZWNrKDBMLCB2c2l6ZSgnJykpCisgICAgICAgIGNoZWNrKDFMLCB2c2l6ZSgnJykgKyBzZWxmLmxvbmdkaWdpdCkKKyAgICAgICAgY2hlY2soLTFMLCB2c2l6ZSgnJykgKyBzZWxmLmxvbmdkaWdpdCkKKyAgICAgICAgUHlMb25nX0JBU0UgPSAyKipzeXMubG9uZ19pbmZvLmJpdHNfcGVyX2RpZ2l0CisgICAgICAgIGNoZWNrKGxvbmcoUHlMb25nX0JBU0UpLCB2c2l6ZSgnJykgKyAyKnNlbGYubG9uZ2RpZ2l0KQorICAgICAgICBjaGVjayhsb25nKFB5TG9uZ19CQVNFKioyLTEpLCB2c2l6ZSgnJykgKyAyKnNlbGYubG9uZ2RpZ2l0KQorICAgICAgICBjaGVjayhsb25nKFB5TG9uZ19CQVNFKioyKSwgdnNpemUoJycpICsgMypzZWxmLmxvbmdkaWdpdCkKKyAgICAgICAgIyBtb2R1bGUKKyAgICAgICAgY2hlY2sodW5pdHRlc3QsIHNpemUoJ1AnKSkKKyAgICAgICAgIyBOb25lCisgICAgICAgIGNoZWNrKE5vbmUsIHNpemUoJycpKQorICAgICAgICAjIG9iamVjdAorICAgICAgICBjaGVjayhvYmplY3QoKSwgc2l6ZSgnJykpCisgICAgICAgICMgcHJvcGVydHkgKGRlc2NyaXB0b3Igb2JqZWN0KQorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0eChzZWxmKTogcmV0dXJuIHNlbGYuX194CisgICAgICAgICAgICBkZWYgc2V0eChzZWxmLCB2YWx1ZSk6IHNlbGYuX194ID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBkZWx4KHNlbGYpOiBkZWwgc2VsZi5fX3gKKyAgICAgICAgICAgIHggPSBwcm9wZXJ0eShnZXR4LCBzZXR4LCBkZWx4LCAiIikKKyAgICAgICAgICAgIGNoZWNrKHgsIHNpemUoJzRQaScpKQorICAgICAgICAjIFB5Q09iamVjdAorICAgICAgICAjIFB5Q2Fwc3VsZQorICAgICAgICAjIFhYWAorICAgICAgICAjIHJhbmdlaXRlcmF0b3IKKyAgICAgICAgY2hlY2soaXRlcih4cmFuZ2UoMSkpLCBzaXplKCc0bCcpKQorICAgICAgICAjIHJldmVyc2UKKyAgICAgICAgY2hlY2socmV2ZXJzZWQoJycpLCBzaXplKCdQUCcpKQorICAgICAgICAjIHNldAorICAgICAgICAjIGZyb3plbnNldAorICAgICAgICBQeVNldF9NSU5TSVpFID0gOAorICAgICAgICBzYW1wbGVzID0gW1tdLCByYW5nZSgxMCksIHJhbmdlKDUwKV0KKyAgICAgICAgcyA9IHNpemUoJzNQMlAnICsgUHlTZXRfTUlOU0laRSonbFAnICsgJ2xQJykKKyAgICAgICAgZm9yIHNhbXBsZSBpbiBzYW1wbGVzOgorICAgICAgICAgICAgbWludXNlZCA9IGxlbihzYW1wbGUpCisgICAgICAgICAgICBpZiBtaW51c2VkID09IDA6IHRtcCA9IDEKKyAgICAgICAgICAgICMgdGhlIGNvbXB1dGF0aW9uIG9mIG1pbnVzZWQgaXMgYWN0dWFsbHkgYSBiaXQgbW9yZSBjb21wbGljYXRlZAorICAgICAgICAgICAgIyBidXQgdGhpcyBzdWZmaWNlcyBmb3IgdGhlIHNpemVvZiB0ZXN0CisgICAgICAgICAgICBtaW51c2VkID0gbWludXNlZCoyCisgICAgICAgICAgICBuZXdzaXplID0gUHlTZXRfTUlOU0laRQorICAgICAgICAgICAgd2hpbGUgbmV3c2l6ZSA8PSBtaW51c2VkOgorICAgICAgICAgICAgICAgIG5ld3NpemUgPSBuZXdzaXplIDw8IDEKKyAgICAgICAgICAgIGlmIG5ld3NpemUgPD0gODoKKyAgICAgICAgICAgICAgICBjaGVjayhzZXQoc2FtcGxlKSwgcykKKyAgICAgICAgICAgICAgICBjaGVjayhmcm96ZW5zZXQoc2FtcGxlKSwgcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2hlY2soc2V0KHNhbXBsZSksIHMgKyBuZXdzaXplKnN0cnVjdC5jYWxjc2l6ZSgnbFAnKSkKKyAgICAgICAgICAgICAgICBjaGVjayhmcm96ZW5zZXQoc2FtcGxlKSwgcyArIG5ld3NpemUqc3RydWN0LmNhbGNzaXplKCdsUCcpKQorICAgICAgICAjIHNldGl0ZXJhdG9yCisgICAgICAgIGNoZWNrKGl0ZXIoc2V0KCkpLCBzaXplKCdQM1AnKSkKKyAgICAgICAgIyBzbGljZQorICAgICAgICBjaGVjayhzbGljZSgxKSwgc2l6ZSgnM1AnKSkKKyAgICAgICAgIyBzdHIKKyAgICAgICAgdmggPSB0ZXN0LnRlc3Rfc3VwcG9ydC5fdmhlYWRlcgorICAgICAgICBjaGVjaygnJywgc3RydWN0LmNhbGNzaXplKHZoICsgJ2xpYycpKQorICAgICAgICBjaGVjaygnYWJjJywgc3RydWN0LmNhbGNzaXplKHZoICsgJ2xpYycpICsgMykKKyAgICAgICAgIyBzdXBlcgorICAgICAgICBjaGVjayhzdXBlcihpbnQpLCBzaXplKCczUCcpKQorICAgICAgICAjIHR1cGxlCisgICAgICAgIGNoZWNrKCgpLCB2c2l6ZSgnJykpCisgICAgICAgIGNoZWNrKCgxLDIsMyksIHZzaXplKCcnKSArIDMqc2VsZi5QKQorICAgICAgICAjIHR1cGxlaXRlcmF0b3IKKyAgICAgICAgY2hlY2soaXRlcigoKSksIHNpemUoJ2xQJykpCisgICAgICAgICMgdHlwZQorICAgICAgICAjIChQeVR5cGVPYmplY3QgKyBQeU51bWJlck1ldGhvZHMgKyAgUHlNYXBwaW5nTWV0aG9kcyArCisgICAgICAgICMgIFB5U2VxdWVuY2VNZXRob2RzICsgUHlCdWZmZXJQcm9jcykKKyAgICAgICAgcyA9IHZzaXplKCdQMlAxNVBsNFBQOVBQMTFQSScpICsgc3RydWN0LmNhbGNzaXplKCc0MVAgMTBQIDNQIDZQJykKKyAgICAgICAgY2xhc3MgbmV3c3R5bGVjbGFzcyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjaGVjayhuZXdzdHlsZWNsYXNzLCBzKQorICAgICAgICAjIGJ1aWx0aW4gdHlwZQorICAgICAgICBjaGVjayhpbnQsIHMpCisgICAgICAgICMgTm90SW1wbGVtZW50ZWRUeXBlCisgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICBjaGVjayh0eXBlcy5Ob3RJbXBsZW1lbnRlZFR5cGUsIHMpCisgICAgICAgICMgdW5pY29kZQorICAgICAgICB1c2l6ZSA9IGxlbih1J1wwJy5lbmNvZGUoJ3VuaWNvZGUtaW50ZXJuYWwnKSkKKyAgICAgICAgc2FtcGxlcyA9IFt1JycsIHUnMScqMTAwXQorICAgICAgICAjIHdlIG5lZWQgdG8gdGVzdCBmb3IgYm90aCBzaXplcywgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGlmIHRoZSBzdHJpbmcKKyAgICAgICAgIyBoYXMgYmVlbiBjYWNoZWQKKyAgICAgICAgZm9yIHMgaW4gc2FtcGxlczoKKyAgICAgICAgICAgIGNoZWNrKHMsIHNpemUoJ1BQbFAnKSArIHVzaXplICogKGxlbihzKSArIDEpKQorICAgICAgICAjIHdlYWtyZWYKKyAgICAgICAgaW1wb3J0IHdlYWtyZWYKKyAgICAgICAgY2hlY2sod2Vha3JlZi5yZWYoaW50KSwgc2l6ZSgnMlBsMlAnKSkKKyAgICAgICAgIyB3ZWFrcHJveHkKKyAgICAgICAgIyBYWFgKKyAgICAgICAgIyB3ZWFrY2FsbGFibGVwcm94eQorICAgICAgICBjaGVjayh3ZWFrcmVmLnByb3h5KGludCksIHNpemUoJzJQbDJQJykpCisgICAgICAgICMgeHJhbmdlCisgICAgICAgIGNoZWNrKHhyYW5nZSgxKSwgc2l6ZSgnM2wnKSkKKyAgICAgICAgY2hlY2soeHJhbmdlKDY2MDAwKSwgc2l6ZSgnM2wnKSkKKworICAgIGRlZiB0ZXN0X3B5dGhvbnR5cGVzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGFsbCB0eXBlcyBkZWZpbmVkIGluIFB5dGhvbi8KKyAgICAgICAgc2l6ZSA9IHRlc3QudGVzdF9zdXBwb3J0LmNhbGNvYmpzaXplCisgICAgICAgIHZzaXplID0gdGVzdC50ZXN0X3N1cHBvcnQuY2FsY3ZvYmpzaXplCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgIyBfYXN0LkFTVAorICAgICAgICBpbXBvcnQgX2FzdAorICAgICAgICBjaGVjayhfYXN0LkFTVCgpLCBzaXplKCcnKSkKKyAgICAgICAgIyBpbXAuTnVsbEltcG9ydGVyCisgICAgICAgIGltcG9ydCBpbXAKKyAgICAgICAgY2hlY2soaW1wLk51bGxJbXBvcnRlcihzZWxmLmZpbGUubmFtZSksIHNpemUoJycpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KKyAgICAgICAgICAgICMgdHJhY2ViYWNrCisgICAgICAgICAgICBpZiB0YiAhPSBOb25lOgorICAgICAgICAgICAgICAgIGNoZWNrKHRiLCBzaXplKCcyUDJpJykpCisgICAgICAgICMgc3ltdGFibGUgZW50cnkKKyAgICAgICAgIyBYWFgKKyAgICAgICAgIyBzeXMuZmxhZ3MKKyAgICAgICAgY2hlY2soc3lzLmZsYWdzLCB2c2l6ZSgnJykgKyBzZWxmLlAgKiBsZW4oc3lzLmZsYWdzKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9jbGFzc2VzID0gKFN5c01vZHVsZVRlc3QsIFNpemVvZlRlc3QpCisKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHByb2ZpbGUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zeXNfc2V0cHJvZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODI1NTlmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHByb2ZpbGUucHkKQEAgLTAsMCArMSwzODYgQEAKK2ltcG9ydCBnYworaW1wb3J0IHBwcmludAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFRlc3RHZXRQcm9maWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN5cy5zZXRwcm9maWxlKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5zZXRwcm9maWxlKE5vbmUpCisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lzLmdldHByb2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X3NldGdldChzZWxmKToKKyAgICAgICAgZGVmIGZuKCphcmdzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzeXMuc2V0cHJvZmlsZShmbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuZ2V0cHJvZmlsZSgpLCBmbikKKworY2xhc3MgSG9va1dhdGNoZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmZyYW1lcyA9IFtdCisgICAgICAgIHNlbGYuZXZlbnRzID0gW10KKworICAgIGRlZiBjYWxsYmFjayhzZWxmLCBmcmFtZSwgZXZlbnQsIGFyZyk6CisgICAgICAgIGlmIChldmVudCA9PSAiY2FsbCIKKyAgICAgICAgICAgIG9yIGV2ZW50ID09ICJyZXR1cm4iCisgICAgICAgICAgICBvciBldmVudCA9PSAiZXhjZXB0aW9uIik6CisgICAgICAgICAgICBzZWxmLmFkZF9ldmVudChldmVudCwgZnJhbWUpCisKKyAgICBkZWYgYWRkX2V2ZW50KHNlbGYsIGV2ZW50LCBmcmFtZT1Ob25lKToKKyAgICAgICAgIiIiQWRkIGFuIGV2ZW50IHRvIHRoZSBsb2cuIiIiCisgICAgICAgIGlmIGZyYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmcmFtZW5vID0gc2VsZi5mcmFtZXMuaW5kZXgoZnJhbWUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZnJhbWVubyA9IGxlbihzZWxmLmZyYW1lcykKKyAgICAgICAgICAgIHNlbGYuZnJhbWVzLmFwcGVuZChmcmFtZSkKKworICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoKGZyYW1lbm8sIGV2ZW50LCBpZGVudChmcmFtZSkpKQorCisgICAgZGVmIGdldF9ldmVudHMoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBjYWxscyB0byBhZGRfZXZlbnQoKS4iIiIKKyAgICAgICAgZGlzYWxsb3dlZCA9IFtpZGVudChzZWxmLmFkZF9ldmVudC5pbV9mdW5jKSwgaWRlbnQoaWRlbnQpXQorICAgICAgICBzZWxmLmZyYW1lcyA9IE5vbmUKKworICAgICAgICByZXR1cm4gW2l0ZW0gZm9yIGl0ZW0gaW4gc2VsZi5ldmVudHMgaWYgaXRlbVsyXSBub3QgaW4gZGlzYWxsb3dlZF0KKworCitjbGFzcyBQcm9maWxlU2ltdWxhdG9yKEhvb2tXYXRjaGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdGNhc2UpOgorICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKKyAgICAgICAgc2VsZi5zdGFjayA9IFtdCisgICAgICAgIEhvb2tXYXRjaGVyLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgY2FsbGJhY2soc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgorICAgICAgICAjIENhbGxiYWNrIHJlZ2lzdGVyZWQgd2l0aCBzeXMuc2V0cHJvZmlsZSgpL3N5cy5zZXR0cmFjZSgpCisgICAgICAgIHNlbGYuZGlzcGF0Y2hbZXZlbnRdKHNlbGYsIGZyYW1lKQorCisgICAgZGVmIHRyYWNlX2NhbGwoc2VsZiwgZnJhbWUpOgorICAgICAgICBzZWxmLmFkZF9ldmVudCgnY2FsbCcsIGZyYW1lKQorICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZChmcmFtZSkKKworICAgIGRlZiB0cmFjZV9yZXR1cm4oc2VsZiwgZnJhbWUpOgorICAgICAgICBzZWxmLmFkZF9ldmVudCgncmV0dXJuJywgZnJhbWUpCisgICAgICAgIHNlbGYuc3RhY2sucG9wKCkKKworICAgIGRlZiB0cmFjZV9leGNlcHRpb24oc2VsZiwgZnJhbWUpOgorICAgICAgICBzZWxmLnRlc3RjYXNlLmZhaWwoCisgICAgICAgICAgICAidGhlIHByb2ZpbGVyIHNob3VsZCBuZXZlciByZWNlaXZlIGV4Y2VwdGlvbiBldmVudHMiKQorCisgICAgZGVmIHRyYWNlX3Bhc3Moc2VsZiwgZnJhbWUpOgorICAgICAgICBwYXNzCisKKyAgICBkaXNwYXRjaCA9IHsKKyAgICAgICAgJ2NhbGwnOiB0cmFjZV9jYWxsLAorICAgICAgICAnZXhjZXB0aW9uJzogdHJhY2VfZXhjZXB0aW9uLAorICAgICAgICAncmV0dXJuJzogdHJhY2VfcmV0dXJuLAorICAgICAgICAnY19jYWxsJzogdHJhY2VfcGFzcywKKyAgICAgICAgJ2NfcmV0dXJuJzogdHJhY2VfcGFzcywKKyAgICAgICAgJ2NfZXhjZXB0aW9uJzogdHJhY2VfcGFzcywKKyAgICAgICAgfQorCisKK2NsYXNzIFRlc3RDYXNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNoZWNrX2V2ZW50cyhzZWxmLCBjYWxsYWJsZSwgZXhwZWN0ZWQpOgorICAgICAgICBldmVudHMgPSBjYXB0dXJlX2V2ZW50cyhjYWxsYWJsZSwgc2VsZi5uZXdfd2F0Y2hlcigpKQorICAgICAgICBpZiBldmVudHMgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIGV2ZW50czpcbiVzXG5SZWNlaXZlZCBldmVudHM6XG4lcyIKKyAgICAgICAgICAgICAgICAgICAgICAlIChwcHJpbnQucGZvcm1hdChleHBlY3RlZCksIHBwcmludC5wZm9ybWF0KGV2ZW50cykpKQorCisKK2NsYXNzIFByb2ZpbGVIb29rVGVzdENhc2UoVGVzdENhc2VCYXNlKToKKyAgICBkZWYgbmV3X3dhdGNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiBIb29rV2F0Y2hlcigpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgMS4vMAorICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9jYXVnaHRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZihwKToKKyAgICAgICAgICAgIHRyeTogMS4vMAorICAgICAgICAgICAgZXhjZXB0OiBwYXNzCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhmLCBbKDEsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2NhdWdodF9uZXN0ZWRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZihwKToKKyAgICAgICAgICAgIHRyeTogMS4vMAorICAgICAgICAgICAgZXhjZXB0OiBwYXNzCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhmLCBbKDEsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgMS4vMAorICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzbid0IHdoYXQgSSBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKDAsICdleGNlcHRpb24nLCBwcm90ZWN0X2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSSBleHBlY3RlZCB0aGlzIGFnYWluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25faW5fZXhjZXB0X2NsYXVzZShzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICAxLi8wCisgICAgICAgIGRlZiBnKHApOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYocCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICB0cnk6IGYocCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6IHBhc3MKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIGdfaWRlbnQgPSBpZGVudChnKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhnLCBbKDEsICdjYWxsJywgZ19pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9wcm9wb2dhdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICAxLi8wCisgICAgICAgIGRlZiBnKHApOgorICAgICAgICAgICAgdHJ5OiBmKHApCisgICAgICAgICAgICBmaW5hbGx5OiBwLmFkZF9ldmVudCgiZmFsbGluZyB0aHJvdWdoIikKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIGdfaWRlbnQgPSBpZGVudChnKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhnLCBbKDEsICdjYWxsJywgZ19pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2ZhbGxpbmcgdGhyb3VnaCcsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBnX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9yYWlzZV90d2ljZShzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICB0cnk6IDEuLzAKKyAgICAgICAgICAgIGV4Y2VwdDogMS4vMAorICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9yYWlzZV9yZXJhaXNlKHNlbGYpOgorICAgICAgICBkZWYgZihwKToKKyAgICAgICAgICAgIHRyeTogMS4vMAorICAgICAgICAgICAgZXhjZXB0OiByYWlzZQorICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9yYWlzZShzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oKQorICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9kaXN0YW50X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIDEuLzAKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIGYoKQorICAgICAgICBkZWYgaCgpOgorICAgICAgICAgICAgZygpCisgICAgICAgIGRlZiBpKCk6CisgICAgICAgICAgICBoKCkKKyAgICAgICAgZGVmIGoocCk6CisgICAgICAgICAgICBpKCkKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIGdfaWRlbnQgPSBpZGVudChnKQorICAgICAgICBoX2lkZW50ID0gaWRlbnQoaCkKKyAgICAgICAgaV9pZGVudCA9IGlkZW50KGkpCisgICAgICAgIGpfaWRlbnQgPSBpZGVudChqKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhqLCBbKDEsICdjYWxsJywgal9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2NhbGwnLCBpX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnY2FsbCcsIGhfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdjYWxsJywgZ19pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ3JldHVybicsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdyZXR1cm4nLCBoX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAncmV0dXJuJywgaV9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicsIGpfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDIpOgorICAgICAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgZGVmIGcocCk6CisgICAgICAgICAgICBmb3IgaSBpbiBmKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgZ19pZGVudCA9IGlkZW50KGcpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGcsIFsoMSwgJ2NhbGwnLCBnX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2FsbCB0aGUgaXRlcmF0b3IgdHdpY2UgdG8gZ2VuZXJhdGUgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9uY2UgbW9yZTsgcmV0dXJucyBlbmQtb2YtaXRlcmF0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWN0dWFsbHkgcmFpc2luZyBhbiBleGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZ19pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3Rfc3RvcF9pdGVyYXRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIGRlZiBnKHApOgorICAgICAgICAgICAgZm9yIGkgaW4gZigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIGdfaWRlbnQgPSBpZGVudChnKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhnLCBbKDEsICdjYWxsJywgZ19pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgdGhlIGl0ZXJhdG9yIHR3aWNlIHRvIGdlbmVyYXRlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmNlIG1vcmUgdG8gaGl0IHRoZSByYWlzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZ19pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisKK2NsYXNzIFByb2ZpbGVTaW11bGF0b3JUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgorICAgIGRlZiBuZXdfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIFByb2ZpbGVTaW11bGF0b3Ioc2VsZikKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhmLCBbKDEsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICAxLi8wCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhmLCBbKDEsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2NhdWdodF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgdHJ5OiAxLi8wCisgICAgICAgICAgICBleGNlcHQ6IHBhc3MKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGYsIFsoMSwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZGlzdGFudF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAxLi8wCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICBmKCkKKyAgICAgICAgZGVmIGgoKToKKyAgICAgICAgICAgIGcoKQorICAgICAgICBkZWYgaSgpOgorICAgICAgICAgICAgaCgpCisgICAgICAgIGRlZiBqKHApOgorICAgICAgICAgICAgaSgpCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBnX2lkZW50ID0gaWRlbnQoZykKKyAgICAgICAgaF9pZGVudCA9IGlkZW50KGgpCisgICAgICAgIGlfaWRlbnQgPSBpZGVudChpKQorICAgICAgICBqX2lkZW50ID0gaWRlbnQoaikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoaiwgWygxLCAnY2FsbCcsIGpfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdjYWxsJywgaV9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2NhbGwnLCBoX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnY2FsbCcsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdyZXR1cm4nLCBnX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAncmV0dXJuJywgaF9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ3JldHVybicsIGlfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBqX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKworZGVmIGlkZW50KGZ1bmN0aW9uKToKKyAgICBpZiBoYXNhdHRyKGZ1bmN0aW9uLCAiZl9jb2RlIik6CisgICAgICAgIGNvZGUgPSBmdW5jdGlvbi5mX2NvZGUKKyAgICBlbHNlOgorICAgICAgICBjb2RlID0gZnVuY3Rpb24uZnVuY19jb2RlCisgICAgcmV0dXJuIGNvZGUuY29fZmlyc3RsaW5lbm8sIGNvZGUuY29fbmFtZQorCisKK2RlZiBwcm90ZWN0KGYsIHApOgorICAgIHRyeTogZihwKQorICAgIGV4Y2VwdDogcGFzcworCitwcm90ZWN0X2lkZW50ID0gaWRlbnQocHJvdGVjdCkKKworCitkZWYgY2FwdHVyZV9ldmVudHMoY2FsbGFibGUsIHA9Tm9uZSk6CisgICAgaWYgcCBpcyBOb25lOgorICAgICAgICBwID0gSG9va1dhdGNoZXIoKQorICAgICMgRGlzYWJsZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFRoaXMgcHJldmVudHMgX19kZWxfX3MgZnJvbSBzaG93aW5nIHVwIGluCisgICAgIyB0cmFjZXMuCisgICAgb2xkX2djID0gZ2MuaXNlbmFibGVkKCkKKyAgICBnYy5kaXNhYmxlKCkKKyAgICB0cnk6CisgICAgICAgIHN5cy5zZXRwcm9maWxlKHAuY2FsbGJhY2spCisgICAgICAgIHByb3RlY3QoY2FsbGFibGUsIHApCisgICAgICAgIHN5cy5zZXRwcm9maWxlKE5vbmUpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgb2xkX2djOgorICAgICAgICAgICAgZ2MuZW5hYmxlKCkKKyAgICByZXR1cm4gcC5nZXRfZXZlbnRzKClbMTotMV0KKworCitkZWYgc2hvd19ldmVudHMoY2FsbGFibGUpOgorICAgIGltcG9ydCBwcHJpbnQKKyAgICBwcHJpbnQucHByaW50KGNhcHR1cmVfZXZlbnRzKGNhbGxhYmxlKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdEdldFByb2ZpbGUsCisgICAgICAgIFByb2ZpbGVIb29rVGVzdENhc2UsCisgICAgICAgIFByb2ZpbGVTaW11bGF0b3JUZXN0Q2FzZQorICAgICkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zeXNfc2V0dHJhY2UucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zeXNfc2V0dHJhY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3YmNlZgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3N5c19zZXR0cmFjZS5weQpAQCAtMCwwICsxLDgwMCBAQAorIyBUZXN0aW5nIHRoZSBsaW5lIHRyYWNlIGZhY2lsaXR5LgorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGdjCisKKyMgQSB2ZXJ5IGJhc2ljIGV4YW1wbGUuICBJZiB0aGlzIGZhaWxzLCB3ZSdyZSBpbiBkZWVwIHRyb3VibGUuCitkZWYgYmFzaWMoKToKKyAgICByZXR1cm4gMQorCitiYXNpYy5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nKV0KKworIyBNYW55IG9mIHRoZSB0ZXN0cyBiZWxvdyBhcmUgdHJpY2t5IGJlY2F1c2UgdGhleSBpbnZvbHZlIHBhc3Mgc3RhdGVtZW50cy4KKyMgSWYgdGhlcmUgaXMgaW1wbGljaXQgY29udHJvbCBmbG93IGFyb3VuZCBhIHBhc3Mgc3RhdGVtZW50IChpbiBhbiBleGNlcHQKKyMgY2xhdXNlIG9yIGVsc2UgY2FsdXNlKSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgZG8geW91IHNldCBhIGxpbmUgbnVtYmVyCisjIGZvbGxvd2luZyB0aGF0IGNsYXVzZT8KKworCisjIFRoZSBlbnRpcmUgIndoaWxlIDA6IiBzdGF0ZW1lbnQgaXMgb3B0aW1pemVkIGF3YXkuICBObyBjb2RlCisjIGV4aXN0cyBmb3IgaXQsIHNvIHRoZSBsaW5lIG51bWJlcnMgc2tpcCBkaXJlY3RseSBmcm9tICJkZWwgeCIKKyMgdG8gInggPSAxIi4KK2RlZiBhcmlnb19leGFtcGxlKCk6CisgICAgeCA9IDEKKyAgICBkZWwgeAorICAgIHdoaWxlIDA6CisgICAgICAgIHBhc3MKKyAgICB4ID0gMQorCithcmlnb19leGFtcGxlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICg1LCAncmV0dXJuJyldCisKKyMgY2hlY2sgdGhhdCBsaW5lcyBjb25zaXN0aW5nIG9mIGp1c3Qgb25lIGluc3RydWN0aW9uIGdldCB0cmFjZWQ6CitkZWYgb25lX2luc3RyX2xpbmUoKToKKyAgICB4ID0gMQorICAgIGRlbCB4CisgICAgeCA9IDEKKworb25lX2luc3RyX2xpbmUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAncmV0dXJuJyldCisKK2RlZiBub19wb3BfdG9wcygpOiAgICAgICMgMAorICAgIHggPSAxICAgICAgICAgICAgICAgIyAxCisgICAgZm9yIGEgaW4gcmFuZ2UoMik6ICAjIDIKKyAgICAgICAgaWYgYTogICAgICAgICAgICMgMworICAgICAgICAgICAgeCA9IDEgICAgICAgIyA0CisgICAgICAgIGVsc2U6ICAgICAgICAgICAjIDUKKyAgICAgICAgICAgIHggPSAxICAgICAgICMgNgorCitub19wb3BfdG9wcy5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDIsICdyZXR1cm4nKV0KKworZGVmIG5vX3BvcF9ibG9ja3MoKToKKyAgICB5ID0gMQorICAgIHdoaWxlIG5vdCB5OgorICAgICAgICBibGEKKyAgICB4ID0gMQorCitub19wb3BfYmxvY2tzLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICg0LCAncmV0dXJuJyldCisKK2RlZiBjYWxsZWQoKTogIyBsaW5lIC0zCisgICAgeCA9IDEKKworZGVmIGNhbGwoKTogICAjIGxpbmUgMAorICAgIGNhbGxlZCgpCisKK2NhbGwuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAoLTMsICdjYWxsJyksCisgICAgICAgICAgICAgICAoLTIsICdsaW5lJyksCisgICAgICAgICAgICAgICAoLTIsICdyZXR1cm4nKSwKKyAgICAgICAgICAgICAgICgxLCAncmV0dXJuJyldCisKK2RlZiByYWlzZXMoKToKKyAgICByYWlzZSBFeGNlcHRpb24KKworZGVmIHRlc3RfcmFpc2UoKToKKyAgICB0cnk6CisgICAgICAgIHJhaXNlcygpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXhjOgorICAgICAgICB4ID0gMQorCit0ZXN0X3JhaXNlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAoLTMsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAoLTIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAoLTIsICdleGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICgtMiwgJ3JldHVybicpLAorICAgICAgICAgICAgICAgICAgICAgKDIsICdleGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAoNCwgJ3JldHVybicpXQorCitkZWYgX3NldHRyYWNlX2FuZF9yZXR1cm4odHJhY2VmdW5jKToKKyAgICBzeXMuc2V0dHJhY2UodHJhY2VmdW5jKQorICAgIHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl90cmFjZSA9IHRyYWNlZnVuYworZGVmIHNldHRyYWNlX2FuZF9yZXR1cm4odHJhY2VmdW5jKToKKyAgICBfc2V0dHJhY2VfYW5kX3JldHVybih0cmFjZWZ1bmMpCisKK3NldHRyYWNlX2FuZF9yZXR1cm4uZXZlbnRzID0gWygxLCAncmV0dXJuJyldCisKK2RlZiBfc2V0dHJhY2VfYW5kX3JhaXNlKHRyYWNlZnVuYyk6CisgICAgc3lzLnNldHRyYWNlKHRyYWNlZnVuYykKKyAgICBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfdHJhY2UgPSB0cmFjZWZ1bmMKKyAgICByYWlzZSBSdW50aW1lRXJyb3IKK2RlZiBzZXR0cmFjZV9hbmRfcmFpc2UodHJhY2VmdW5jKToKKyAgICB0cnk6CisgICAgICAgIF9zZXR0cmFjZV9hbmRfcmFpc2UodHJhY2VmdW5jKQorICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIGV4YzoKKyAgICAgICAgcGFzcworCitzZXR0cmFjZV9hbmRfcmFpc2UuZXZlbnRzID0gWygyLCAnZXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdyZXR1cm4nKV0KKworIyBpbXBsaWNpdCByZXR1cm4gZXhhbXBsZQorIyBUaGlzIHRlc3QgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBvZiB0aGUgZWxzZTogcGFzcworIyBwYXJ0IG9mIHRoZSBjb2RlLiAgVGhlIGNvZGUgZ2VuZXJhdGUgZm9yIHRoZSB0cnVlCisjIHBhcnQgb2YgdGhlIGlmIGNvbnRhaW5zIGEganVtcCBwYXN0IHRoZSBlbHNlIGJyYW5jaC4KKyMgVGhlIGNvbXBpbGVyIHRoZW4gZ2VuZXJhdGVzIGFuIGltcGxpY2l0ICJyZXR1cm4gTm9uZSIKKyMgSW50ZXJuYWxseSwgdGhlIGNvbXBpbGVyIHZpc2l0cyB0aGUgcGFzcyBzdGF0ZW1lbnQKKyMgYW5kIHN0b3JlcyBpdHMgbGluZSBudW1iZXIgZm9yIHVzZSBvbiB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KKyMgVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgdGhlIGltcGxpY2l0IHJldHVybiBOb25lLgorZGVmIGlyZXR1cm5fZXhhbXBsZSgpOgorICAgIGEgPSA1CisgICAgYiA9IDUKKyAgICBpZiBhID09IGI6CisgICAgICAgIGIgPSBhKzEKKyAgICBlbHNlOgorICAgICAgICBwYXNzCisKK2lyZXR1cm5fZXhhbXBsZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoNiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdyZXR1cm4nKV0KKworIyBUaWdodCBsb29wIHdpdGggd2hpbGUoMSkgZXhhbXBsZSAoU0YgIzc2NTYyNCkKK2RlZiB0aWdodGxvb3BfZXhhbXBsZSgpOgorICAgIGl0ZW1zID0gcmFuZ2UoMCwgMykKKyAgICB0cnk6CisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBiID0gaXRlbXNbaV07IGkrPTEKKyAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgcGFzcworCit0aWdodGxvb3BfZXhhbXBsZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdleGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNywgJ3JldHVybicpXQorCitkZWYgdGlnaHRlcmxvb3BfZXhhbXBsZSgpOgorICAgIGl0ZW1zID0gcmFuZ2UoMSwgNCkKKyAgICB0cnk6CisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIDE6IGkgPSBpdGVtc1tpXQorICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICBwYXNzCisKK3RpZ2h0ZXJsb29wX2V4YW1wbGUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnZXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdyZXR1cm4nKV0KKworZGVmIGdlbmVyYXRvcl9mdW5jdGlvbigpOgorICAgIHRyeToKKyAgICAgICAgeWllbGQgVHJ1ZQorICAgICAgICAiY29udGludWVkIgorICAgIGZpbmFsbHk6CisgICAgICAgICJmaW5hbGx5IgorZGVmIGdlbmVyYXRvcl9leGFtcGxlKCk6CisgICAgIyBhbnkoKSB3aWxsIGxlYXZlIHRoZSBnZW5lcmF0b3IgYmVmb3JlIGl0cyBlbmQKKyAgICB4ID0gYW55KGdlbmVyYXRvcl9mdW5jdGlvbigpKQorCisgICAgIyB0aGUgZm9sbG93aW5nIGxpbmVzIHdlcmUgbm90IHRyYWNlZAorICAgIGZvciB4IGluIHJhbmdlKDEwKToKKyAgICAgICAgeSA9IHgKKworZ2VuZXJhdG9yX2V4YW1wbGUuZXZlbnRzID0gKFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNiwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC01LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNCwgJ3JldHVybicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNCwgJ2V4Y2VwdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMSwgJ3JldHVybicpXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyg1LCAnbGluZScpLCAoNiwgJ2xpbmUnKV0gKiAxMCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyg1LCAnbGluZScpLCAoNSwgJ3JldHVybicpXSkKKworCitjbGFzcyBUcmFjZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmV2ZW50cyA9IFtdCisgICAgZGVmIHRyYWNlKHNlbGYsIGZyYW1lLCBldmVudCwgYXJnKToKKyAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKChmcmFtZS5mX2xpbmVubywgZXZlbnQpKQorICAgICAgICByZXR1cm4gc2VsZi50cmFjZQorICAgIGRlZiB0cmFjZVdpdGhHZW5leHAoc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgorICAgICAgICAobyBmb3IgbyBpbiBbMV0pCisgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgoZnJhbWUuZl9saW5lbm8sIGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHNlbGYudHJhY2UKKworY2xhc3MgVHJhY2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIERpc2FibGUgZ2MgY29sbGVjdGlvbiB3aGVuIHRyYWNpbmcsIG90aGVyd2lzZSB0aGUKKyAgICAjIGRlYWxsb2NhdG9ycyBtYXkgYmUgdHJhY2VkIGFzIHdlbGwuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnVzaW5nX2djID0gZ2MuaXNlbmFibGVkKCkKKyAgICAgICAgZ2MuZGlzYWJsZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYudXNpbmdfZ2M6CisgICAgICAgICAgICBnYy5lbmFibGUoKQorCisgICAgZGVmIGNvbXBhcmVfZXZlbnRzKHNlbGYsIGxpbmVfb2Zmc2V0LCBldmVudHMsIGV4cGVjdGVkX2V2ZW50cyk6CisgICAgICAgIGV2ZW50cyA9IFsobCAtIGxpbmVfb2Zmc2V0LCBlKSBmb3IgKGwsIGUpIGluIGV2ZW50c10KKyAgICAgICAgaWYgZXZlbnRzICE9IGV4cGVjdGVkX2V2ZW50czoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgKKyAgICAgICAgICAgICAgICAiZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0YXRpb246XG4iICsKKyAgICAgICAgICAgICAgICAiXG4iLmpvaW4oZGlmZmxpYi5uZGlmZihbc3RyKHgpIGZvciB4IGluIGV4cGVjdGVkX2V2ZW50c10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cih4KSBmb3IgeCBpbiBldmVudHNdKSkpCisKKyAgICBkZWYgcnVuX2FuZF9jb21wYXJlKHNlbGYsIGZ1bmMsIGV2ZW50cyk6CisgICAgICAgIHRyYWNlciA9IFRyYWNlcigpCisgICAgICAgIHN5cy5zZXR0cmFjZSh0cmFjZXIudHJhY2UpCisgICAgICAgIGZ1bmMoKQorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgc2VsZi5jb21wYXJlX2V2ZW50cyhmdW5jLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZXIuZXZlbnRzLCBldmVudHMpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZnVuYyk6CisgICAgICAgIHNlbGYucnVuX2FuZF9jb21wYXJlKGZ1bmMsIGZ1bmMuZXZlbnRzKQorCisgICAgZGVmIHJ1bl90ZXN0MihzZWxmLCBmdW5jKToKKyAgICAgICAgdHJhY2VyID0gVHJhY2VyKCkKKyAgICAgICAgZnVuYyh0cmFjZXIudHJhY2UpCisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorICAgICAgICBzZWxmLmNvbXBhcmVfZXZlbnRzKGZ1bmMuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlci5ldmVudHMsIGZ1bmMuZXZlbnRzKQorCisgICAgZGVmIHRlc3Rfc2V0X2FuZF9yZXRyaWV2ZV9ub25lKHNlbGYpOgorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgYXNzZXJ0IHN5cy5nZXR0cmFjZSgpIGlzIE5vbmUKKworICAgIGRlZiB0ZXN0X3NldF9hbmRfcmV0cmlldmVfZnVuYyhzZWxmKToKKyAgICAgICAgZGVmIGZuKCphcmdzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzeXMuc2V0dHJhY2UoZm4pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzc2VydCBzeXMuZ2V0dHJhY2UoKSBpcyBmbgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCisKKyAgICBkZWYgdGVzdF8wMV9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChiYXNpYykKKyAgICBkZWYgdGVzdF8wMl9hcmlnbyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChhcmlnb19leGFtcGxlKQorICAgIGRlZiB0ZXN0XzAzX29uZV9pbnN0cihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChvbmVfaW5zdHJfbGluZSkKKyAgICBkZWYgdGVzdF8wNF9ub19wb3BfYmxvY2tzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX3BvcF9ibG9ja3MpCisgICAgZGVmIHRlc3RfMDVfbm9fcG9wX3RvcHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fcG9wX3RvcHMpCisgICAgZGVmIHRlc3RfMDZfY2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChjYWxsKQorICAgIGRlZiB0ZXN0XzA3X3JhaXNlKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KHRlc3RfcmFpc2UpCisKKyAgICBkZWYgdGVzdF8wOF9zZXR0cmFjZV9hbmRfcmV0dXJuKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0MihzZXR0cmFjZV9hbmRfcmV0dXJuKQorICAgIGRlZiB0ZXN0XzA5X3NldHRyYWNlX2FuZF9yYWlzZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdDIoc2V0dHJhY2VfYW5kX3JhaXNlKQorICAgIGRlZiB0ZXN0XzEwX2lyZXR1cm4oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoaXJldHVybl9leGFtcGxlKQorICAgIGRlZiB0ZXN0XzExX3RpZ2h0bG9vcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdCh0aWdodGxvb3BfZXhhbXBsZSkKKyAgICBkZWYgdGVzdF8xMl90aWdodGVybG9vcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdCh0aWdodGVybG9vcF9leGFtcGxlKQorCisgICAgZGVmIHRlc3RfMTNfZ2VuZXhwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGdlbmVyYXRvcl9leGFtcGxlKQorICAgICAgICAjIGlzc3VlMTI2NTogaWYgdGhlIHRyYWNlIGZ1bmN0aW9uIGNvbnRhaW5zIGEgZ2VuZXJhdG9yLAorICAgICAgICAjIGFuZCBpZiB0aGUgdHJhY2VkIGZ1bmN0aW9uIGNvbnRhaW5zIGFub3RoZXIgZ2VuZXJhdG9yCisgICAgICAgICMgdGhhdCBpcyBub3QgY29tcGxldGVseSBleGhhdXN0ZWQsIHRoZSB0cmFjZSBzdG9wcGVkLgorICAgICAgICAjIFdvcnNlOiB0aGUgJ2ZpbmFsbHknIGNsYXVzZSB3YXMgbm90IGludm9rZWQuCisgICAgICAgIHRyYWNlciA9IFRyYWNlcigpCisgICAgICAgIHN5cy5zZXR0cmFjZSh0cmFjZXIudHJhY2VXaXRoR2VuZXhwKQorICAgICAgICBnZW5lcmF0b3JfZXhhbXBsZSgpCisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorICAgICAgICBzZWxmLmNvbXBhcmVfZXZlbnRzKGdlbmVyYXRvcl9leGFtcGxlLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlci5ldmVudHMsIGdlbmVyYXRvcl9leGFtcGxlLmV2ZW50cykKKworICAgIGRlZiB0ZXN0XzE0X29ubGluZXJfaWYoc2VsZik6CisgICAgICAgIGRlZiBvbmxpbmVycygpOgorICAgICAgICAgICAgaWYgVHJ1ZTogRmFsc2UKKyAgICAgICAgICAgIGVsc2U6IFRydWUKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHNlbGYucnVuX2FuZF9jb21wYXJlKAorICAgICAgICAgICAgb25saW5lcnMsCisgICAgICAgICAgICBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdyZXR1cm4nKV0pCisKKyAgICBkZWYgdGVzdF8xNV9sb29wcyhzZWxmKToKKyAgICAgICAgIyBpc3N1ZTE3NTAwNzY6ICJ3aGlsZSIgZXhwcmVzc2lvbiBpcyBza2lwcGVkIGJ5IGRlYnVnZ2VyCisgICAgICAgIGRlZiBmb3JfZXhhbXBsZSgpOgorICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZSgKKyAgICAgICAgICAgIGZvcl9leGFtcGxlLAorICAgICAgICAgICAgWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICgxLCAncmV0dXJuJyldKQorCisgICAgICAgIGRlZiB3aGlsZV9leGFtcGxlKCk6CisgICAgICAgICAgICAjIFdoaWxlIGV4cHJlc3Npb24gc2hvdWxkIGJlIHRyYWNlZCBvbiBldmVyeSBsb29wCisgICAgICAgICAgICB4ID0gMgorICAgICAgICAgICAgd2hpbGUgeCA+IDA6CisgICAgICAgICAgICAgICAgeCAtPSAxCisgICAgICAgIHNlbGYucnVuX2FuZF9jb21wYXJlKAorICAgICAgICAgICAgd2hpbGVfZXhhbXBsZSwKKyAgICAgICAgICAgIFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMywgJ3JldHVybicpXSkKKworICAgIGRlZiB0ZXN0XzE2X2JsYW5rX2xpbmVzKHNlbGYpOgorICAgICAgICBleGVjKCJkZWYgZigpOlxuIiArICJcbiIgKiAyNTYgKyAiICAgIHBhc3MiKQorICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZSgKKyAgICAgICAgICAgIGYsCisgICAgICAgICAgICBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgKDI1NywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMjU3LCAncmV0dXJuJyldKQorCisKK2NsYXNzIFJhaXNpbmdUcmFjZUZ1bmNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRyYWNlKHNlbGYsIGZyYW1lLCBldmVudCwgYXJnKToKKyAgICAgICAgIiIiQSB0cmFjZSBmdW5jdGlvbiB0aGF0IHJhaXNlcyBhbiBleGNlcHRpb24gaW4gcmVzcG9uc2UgdG8gYQorICAgICAgICBzcGVjaWZpYyB0cmFjZSBldmVudC4iIiIKKyAgICAgICAgaWYgZXZlbnQgPT0gc2VsZi5yYWlzZU9uRXZlbnQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yICMganVzdCBzb21ldGhpbmcgdGhhdCBpc24ndCBSdW50aW1lRXJyb3IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlCisKKyAgICBkZWYgZihzZWxmKToKKyAgICAgICAgIiIiVGhlIGZ1bmN0aW9uIHRvIHRyYWNlOyByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoYXQncyB0aGUgY2FzZQorICAgICAgICB3ZSdyZSB0ZXN0aW5nLCBzbyB0aGF0IHRoZSAnZXhjZXB0aW9uJyB0cmFjZSBldmVudCBmaXJlcy4iIiIKKyAgICAgICAgaWYgc2VsZi5yYWlzZU9uRXZlbnQgPT0gJ2V4Y2VwdGlvbic6CisgICAgICAgICAgICB4ID0gMAorICAgICAgICAgICAgeSA9IDEgLy8geAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBydW5fdGVzdF9mb3JfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiJUZXN0cyB0aGF0IGFuIGV4Y2VwdGlvbiByYWlzZWQgaW4gcmVzcG9uc2UgdG8gdGhlIGdpdmVuIGV2ZW50IGlzCisgICAgICAgIGhhbmRsZWQgT0suIiIiCisgICAgICAgIHNlbGYucmFpc2VPbkV2ZW50ID0gZXZlbnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHN5cy5nZXRyZWN1cnNpb25saW1pdCgpICsgMSk6CisgICAgICAgICAgICAgICAgc3lzLnNldHRyYWNlKHNlbGYudHJhY2UpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmYoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleGNlcHRpb24gbm90IHJhaXNlZCEiKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWN1cnNpb24gY291bnRlciBub3QgcmVzZXQiKQorCisgICAgIyBUZXN0IHRoZSBoYW5kbGluZyBvZiBleGNlcHRpb25zIHJhaXNlZCBieSBlYWNoIGtpbmQgb2YgdHJhY2UgZXZlbnQuCisgICAgZGVmIHRlc3RfY2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9mb3JfZXZlbnQoJ2NhbGwnKQorICAgIGRlZiB0ZXN0X2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfZm9yX2V2ZW50KCdsaW5lJykKKyAgICBkZWYgdGVzdF9yZXR1cm4oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfZm9yX2V2ZW50KCdyZXR1cm4nKQorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9mb3JfZXZlbnQoJ2V4Y2VwdGlvbicpCisKKyAgICBkZWYgdGVzdF90cmFzaF9zdGFjayhzZWxmKToKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgIHByaW50IGkgICMgbGluZSB0cmFjaW5nIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGF0IHRoaXMgbGluZQorCisgICAgICAgIGRlZiBnKGZyYW1lLCB3aHksIGV4dHJhKToKKyAgICAgICAgICAgIGlmICh3aHkgPT0gJ2xpbmUnIGFuZAorICAgICAgICAgICAgICAgIGZyYW1lLmZfbGluZW5vID09IGYuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vICsgMik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiaSBhbSBjcmFzaGluZyIKKyAgICAgICAgICAgIHJldHVybiBnCisKKyAgICAgICAgc3lzLnNldHRyYWNlKGcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyB0aGUgdGVzdCBpcyByZWFsbHkgdGhhdCB0aGlzIGRvZXNuJ3Qgc2VnZmF1bHQ6CisgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleGNlcHRpb24gbm90IHByb3BhZ2F0ZWQiKQorCisKKyMgJ0p1bXAnIHRlc3RzOiBhc3NpZ25pbmcgdG8gZnJhbWUuZl9saW5lbm8gd2l0aGluIGEgdHJhY2UgZnVuY3Rpb24KKyMgbW92ZXMgdGhlIGV4ZWN1dGlvbiBwb3NpdGlvbiAtIGl0J3MgaG93IGRlYnVnZ2VycyBpbXBsZW1lbnQgYSBKdW1wCisjIGNvbW1hbmQgKGFrYS4gIlNldCBuZXh0IHN0YXRlbWVudCIpLgorCitjbGFzcyBKdW1wVHJhY2VyOgorICAgICIiIkRlZmluZXMgYSB0cmFjZSBmdW5jdGlvbiB0aGF0IGp1bXBzIGZyb20gb25lIHBsYWNlIHRvIGFub3RoZXIsCisgICAgd2l0aCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBsaW5lcyBvZiB0aGUganVtcCBiZWluZyBkZWZpbmVkIGJ5CisgICAgdGhlICdqdW1wJyBwcm9wZXJ0eSBvZiB0aGUgZnVuY3Rpb24gdW5kZXIgdGVzdC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jdGlvbik6CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLmp1bXBGcm9tID0gZnVuY3Rpb24uanVtcFswXQorICAgICAgICBzZWxmLmp1bXBUbyA9IGZ1bmN0aW9uLmp1bXBbMV0KKyAgICAgICAgc2VsZi5kb25lID0gRmFsc2UKKworICAgIGRlZiB0cmFjZShzZWxmLCBmcmFtZSwgZXZlbnQsIGFyZyk6CisgICAgICAgIGlmIG5vdCBzZWxmLmRvbmUgYW5kIGZyYW1lLmZfY29kZSA9PSBzZWxmLmZ1bmN0aW9uLmZ1bmNfY29kZToKKyAgICAgICAgICAgIGZpcnN0TGluZSA9IGZyYW1lLmZfY29kZS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgaWYgZXZlbnQgPT0gJ2xpbmUnIGFuZCBmcmFtZS5mX2xpbmVubyA9PSBmaXJzdExpbmUgKyBzZWxmLmp1bXBGcm9tOgorICAgICAgICAgICAgICAgICMgQ29wZSB3aXRoIG5vbi1pbnRlZ2VyIHNlbGYuanVtcFRvIChiZWNhdXNlIG9mCisgICAgICAgICAgICAgICAgIyBub19qdW1wX3RvX25vbl9pbnRlZ2VycyBiZWxvdykuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmcmFtZS5mX2xpbmVubyA9IGZpcnN0TGluZSArIHNlbGYuanVtcFRvCisgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUuZl9saW5lbm8gPSBzZWxmLmp1bXBUbworICAgICAgICAgICAgICAgIHNlbGYuZG9uZSA9IFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYudHJhY2UKKworIyBUaGUgZmlyc3Qgc2V0IG9mICdqdW1wJyB0ZXN0cyBhcmUgZm9yIHRoaW5ncyB0aGF0IGFyZSBhbGxvd2VkOgorCitkZWYganVtcF9zaW1wbGVfZm9yd2FyZHMob3V0cHV0KToKKyAgICBvdXRwdXQuYXBwZW5kKDEpCisgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIG91dHB1dC5hcHBlbmQoMykKKworanVtcF9zaW1wbGVfZm9yd2FyZHMuanVtcCA9ICgxLCAzKQoranVtcF9zaW1wbGVfZm9yd2FyZHMub3V0cHV0ID0gWzNdCisKK2RlZiBqdW1wX3NpbXBsZV9iYWNrd2FyZHMob3V0cHV0KToKKyAgICBvdXRwdXQuYXBwZW5kKDEpCisgICAgb3V0cHV0LmFwcGVuZCgyKQorCitqdW1wX3NpbXBsZV9iYWNrd2FyZHMuanVtcCA9ICgyLCAxKQoranVtcF9zaW1wbGVfYmFja3dhcmRzLm91dHB1dCA9IFsxLCAxLCAyXQorCitkZWYganVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMob3V0cHV0KToKKyAgICBmb3IgaSBpbiAxLCAyOgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgICAgIGZvciBqIGluIFszXTogICMgQWxzbyB0ZXN0cyBqdW1waW5nIG92ZXIgYSBibG9jaworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg0KQorICAgIG91dHB1dC5hcHBlbmQoNSkKKworanVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMuanVtcCA9ICgzLCA1KQoranVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMub3V0cHV0ID0gWzIsIDVdCisKK2RlZiBqdW1wX291dF9vZl9ibG9ja19iYWNrd2FyZHMob3V0cHV0KToKKyAgICBvdXRwdXQuYXBwZW5kKDEpCisgICAgZm9yIGkgaW4gWzFdOgorICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCisgICAgICAgIGZvciBqIGluIFsyXTogICMgQWxzbyB0ZXN0cyBqdW1waW5nIG92ZXIgYSBibG9jaworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg1KQorICAgICAgICBvdXRwdXQuYXBwZW5kKDYpCisgICAgb3V0cHV0LmFwcGVuZCg3KQorCitqdW1wX291dF9vZl9ibG9ja19iYWNrd2FyZHMuanVtcCA9ICg2LCAxKQoranVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzLm91dHB1dCA9IFsxLCAzLCA1LCAxLCAzLCA1LCA2LCA3XQorCitkZWYganVtcF90b19jb2RlbGVzc19saW5lKG91dHB1dCk6CisgICAgb3V0cHV0LmFwcGVuZCgxKQorICAgICMgSnVtcGluZyB0byB0aGlzIGxpbmUgc2hvdWxkIHNraXAgdG8gdGhlIG5leHQgb25lLgorICAgIG91dHB1dC5hcHBlbmQoMykKKworanVtcF90b19jb2RlbGVzc19saW5lLmp1bXAgPSAoMSwgMikKK2p1bXBfdG9fY29kZWxlc3NfbGluZS5vdXRwdXQgPSBbM10KKworZGVmIGp1bXBfdG9fc2FtZV9saW5lKG91dHB1dCk6CisgICAgb3V0cHV0LmFwcGVuZCgxKQorICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBvdXRwdXQuYXBwZW5kKDMpCisKK2p1bXBfdG9fc2FtZV9saW5lLmp1bXAgPSAoMiwgMikKK2p1bXBfdG9fc2FtZV9saW5lLm91dHB1dCA9IFsxLCAyLCAzXQorCisjIFRlc3RzIGp1bXBpbmcgd2l0aGluIGEgZmluYWxseSBibG9jaywgYW5kIG92ZXIgb25lLgorZGVmIGp1bXBfaW5fbmVzdGVkX2ZpbmFsbHkob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBmaW5hbGx5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoOCkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCg5KQorCitqdW1wX2luX25lc3RlZF9maW5hbGx5Lmp1bXAgPSAoNCwgOSkKK2p1bXBfaW5fbmVzdGVkX2ZpbmFsbHkub3V0cHV0ID0gWzIsIDldCisKKyMgVGhlIHNlY29uZCBzZXQgb2YgJ2p1bXAnIHRlc3RzIGFyZSBmb3IgdGhpbmdzIHRoYXQgYXJlIG5vdCBhbGxvd2VkOgorCitkZWYgbm9fanVtcF90b29fZmFyX2ZvcndhcmRzKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgICAgIG91dHB1dC5hcHBlbmQoMykKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnYWZ0ZXInIGluIHN0cihlKSkKKworbm9fanVtcF90b29fZmFyX2ZvcndhcmRzLmp1bXAgPSAoMywgNikKK25vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcy5vdXRwdXQgPSBbMiwgVHJ1ZV0KKworZGVmIG5vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdiZWZvcmUnIGluIHN0cihlKSkKKworbm9fanVtcF90b29fZmFyX2JhY2t3YXJkcy5qdW1wID0gKDMsIC0xKQorbm9fanVtcF90b29fZmFyX2JhY2t3YXJkcy5vdXRwdXQgPSBbMiwgVHJ1ZV0KKworIyBUZXN0IGVhY2gga2luZCBvZiAnZXhjZXB0JyBsaW5lLgorZGVmIG5vX2p1bXBfdG9fZXhjZXB0XzEob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBleGNlcHQ6CisgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICBvdXRwdXQuYXBwZW5kKCdleGNlcHQnIGluIHN0cihlKSkKKworbm9fanVtcF90b19leGNlcHRfMS5qdW1wID0gKDIsIDMpCitub19qdW1wX3RvX2V4Y2VwdF8xLm91dHB1dCA9IFtUcnVlXQorCitkZWYgbm9fanVtcF90b19leGNlcHRfMihvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9fZXhjZXB0XzIuanVtcCA9ICgyLCAzKQorbm9fanVtcF90b19leGNlcHRfMi5vdXRwdXQgPSBbVHJ1ZV0KKworZGVmIG5vX2p1bXBfdG9fZXhjZXB0XzMob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9fZXhjZXB0XzMuanVtcCA9ICgyLCAzKQorbm9fanVtcF90b19leGNlcHRfMy5vdXRwdXQgPSBbVHJ1ZV0KKworZGVmIG5vX2p1bXBfdG9fZXhjZXB0XzQob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFJ1bnRpbWVFcnJvciksIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2V4Y2VwdCcgaW4gc3RyKGUpKQorCitub19qdW1wX3RvX2V4Y2VwdF80Lmp1bXAgPSAoMiwgMykKK25vX2p1bXBfdG9fZXhjZXB0XzQub3V0cHV0ID0gW1RydWVdCisKK2RlZiBub19qdW1wX2ZvcndhcmRzX2ludG9fYmxvY2sob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICAgICAgZm9yIGkgaW4gMSwgMjoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNCkKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnaW50bycgaW4gc3RyKGUpKQorCitub19qdW1wX2ZvcndhcmRzX2ludG9fYmxvY2suanVtcCA9ICgyLCA0KQorbm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrLm91dHB1dCA9IFtUcnVlXQorCitkZWYgbm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jayhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgZm9yIGkgaW4gMSwgMjoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoMykKKyAgICAgICAgb3V0cHV0LmFwcGVuZCg0KQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdpbnRvJyBpbiBzdHIoZSkpCisKK25vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2suanVtcCA9ICg0LCAzKQorbm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jay5vdXRwdXQgPSBbMywgMywgVHJ1ZV0KKworZGVmIG5vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCisgICAgICAgICAgICB4ID0gMQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg2KQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdmaW5hbGx5JyBpbiBzdHIoZSkpCisKK25vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrLmp1bXAgPSAoNCwgNikKK25vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrLm91dHB1dCA9IFszLCA2LCBUcnVlXSAgIyBUaGUgJ2ZpbmFsbHknIHN0aWxsIHJ1bnMKKworZGVmIG5vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2sob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoMykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNSkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNikKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnZmluYWxseScgaW4gc3RyKGUpKQorCitub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrLmp1bXAgPSAoNSwgMSkKK25vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2sub3V0cHV0ID0gWzMsIFRydWVdCisKKyMgVGhpcyB2ZXJpZmllcyB0aGUgbGluZS1udW1iZXJzLW11c3QtYmUtaW50ZWdlcnMgcnVsZS4KK2RlZiBub19qdW1wX3RvX25vbl9pbnRlZ2VycyhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdpbnRlZ2VyJyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9fbm9uX2ludGVnZXJzLmp1bXAgPSAoMiwgIlNwYW0iKQorbm9fanVtcF90b19ub25faW50ZWdlcnMub3V0cHV0ID0gW1RydWVdCisKK2RlZiBqdW1wX2Fjcm9zc193aXRoKG91dHB1dCk6CisgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICBwYXNzCisgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICBwYXNzCitqdW1wX2Fjcm9zc193aXRoLmp1bXAgPSAoMSwgMykKK2p1bXBfYWNyb3NzX3dpdGgub3V0cHV0ID0gW10KKworIyBUaGlzIHZlcmlmaWVzIHRoYXQgeW91IGNhbid0IHNldCBmX2xpbmVubyB2aWEgX2dldGZyYW1lIG9yIHNpbWlsYXIKKyMgdHJpY2tlcnkuCitkZWYgbm9fanVtcF93aXRob3V0X3RyYWNlX2Z1bmN0aW9uKCk6CisgICAgdHJ5OgorICAgICAgICBwcmV2aW91c19mcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2sKKyAgICAgICAgcHJldmlvdXNfZnJhbWUuZl9saW5lbm8gPSBwcmV2aW91c19mcmFtZS5mX2xpbmVubworICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAjIFRoaXMgaXMgdGhlIGV4Y2VwdGlvbiB3ZSB3YW50ZWQ7IG1ha2Ugc3VyZSB0aGUgZXJyb3IgbWVzc2FnZQorICAgICAgICAjIHRhbGtzIGFib3V0IHRyYWNlIGZ1bmN0aW9ucy4KKyAgICAgICAgaWYgJ3RyYWNlJyBub3QgaW4gc3RyKGUpOgorICAgICAgICAgICAgcmFpc2UKKyAgICBlbHNlOgorICAgICAgICAjIFNvbWV0aGluZydzIHdyb25nIC0gdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiB3YXNuJ3QgcmFpc2VkLgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJUcmFjZS1mdW5jdGlvbi1sZXNzIGp1bXAgZmFpbGVkIHRvIGZhaWwiCisKKworY2xhc3MgSnVtcFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY29tcGFyZV9qdW1wX291dHB1dChzZWxmLCBleHBlY3RlZCwgcmVjZWl2ZWQpOgorICAgICAgICBpZiByZWNlaXZlZCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCggIk91dHB1dHMgZG9uJ3QgbWF0Y2g6XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkOiAiICsgcmVwcihleHBlY3RlZCkgKyAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgIlJlY2VpdmVkOiAiICsgcmVwcihyZWNlaXZlZCkpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyYWNlciA9IEp1bXBUcmFjZXIoZnVuYykKKyAgICAgICAgc3lzLnNldHRyYWNlKHRyYWNlci50cmFjZSkKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgZnVuYyhvdXRwdXQpCisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorICAgICAgICBzZWxmLmNvbXBhcmVfanVtcF9vdXRwdXQoZnVuYy5vdXRwdXQsIG91dHB1dCkKKworICAgIGRlZiB0ZXN0XzAxX2p1bXBfc2ltcGxlX2ZvcndhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfc2ltcGxlX2ZvcndhcmRzKQorICAgIGRlZiB0ZXN0XzAyX2p1bXBfc2ltcGxlX2JhY2t3YXJkcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX3NpbXBsZV9iYWNrd2FyZHMpCisgICAgZGVmIHRlc3RfMDNfanVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMpCisgICAgZGVmIHRlc3RfMDRfanVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcykKKyAgICBkZWYgdGVzdF8wNV9qdW1wX3RvX2NvZGVsZXNzX2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF90b19jb2RlbGVzc19saW5lKQorICAgIGRlZiB0ZXN0XzA2X2p1bXBfdG9fc2FtZV9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfdG9fc2FtZV9saW5lKQorICAgIGRlZiB0ZXN0XzA3X2p1bXBfaW5fbmVzdGVkX2ZpbmFsbHkoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9pbl9uZXN0ZWRfZmluYWxseSkKKyAgICBkZWYgdGVzdF8wOF9ub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b29fZmFyX2ZvcndhcmRzKQorICAgIGRlZiB0ZXN0XzA5X25vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b29fZmFyX2JhY2t3YXJkcykKKyAgICBkZWYgdGVzdF8xMF9ub19qdW1wX3RvX2V4Y2VwdF8xKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fZXhjZXB0XzEpCisgICAgZGVmIHRlc3RfMTFfbm9fanVtcF90b19leGNlcHRfMihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX2V4Y2VwdF8yKQorICAgIGRlZiB0ZXN0XzEyX25vX2p1bXBfdG9fZXhjZXB0XzMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b19leGNlcHRfMykKKyAgICBkZWYgdGVzdF8xM19ub19qdW1wX3RvX2V4Y2VwdF80KHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fZXhjZXB0XzQpCisgICAgZGVmIHRlc3RfMTRfbm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jaykKKyAgICBkZWYgdGVzdF8xNV9ub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2spCisgICAgZGVmIHRlc3RfMTZfbm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2soc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2spCisgICAgZGVmIHRlc3RfMTdfbm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrKQorICAgIGRlZiB0ZXN0XzE4X25vX2p1bXBfdG9fbm9uX2ludGVnZXJzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fbm9uX2ludGVnZXJzKQorICAgIGRlZiB0ZXN0XzE5X25vX2p1bXBfd2l0aG91dF90cmFjZV9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgbm9fanVtcF93aXRob3V0X3RyYWNlX2Z1bmN0aW9uKCkKKyAgICBkZWYgdGVzdF9qdW1wX2Fjcm9zc193aXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdF9zdXBwb3J0LnVubGluaywgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX2Fjcm9zc193aXRoKQorCisgICAgZGVmIHRlc3RfMjBfbGFyZ2VfZnVuY3Rpb24oc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKCIiImRlZiBmKG91dHB1dCk6ICAgICAgICAjIGxpbmUgMAorICAgICAgICAgICAgeCA9IDAgICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMQorICAgICAgICAgICAgeSA9IDEgICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMgorICAgICAgICAgICAgJycnICAgICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMworICAgICAgICAgICAgJXMgICAgICAgICAgICAgICAgICAgICAgICAjIGxpbmVzIDQtMTAwNAorICAgICAgICAgICAgJycnICAgICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMTAwNQorICAgICAgICAgICAgeCArPSAxICAgICAgICAgICAgICAgICAgICAjIGxpbmUgMTAwNgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh4KSAgICAgICAgICAjIGxpbmUgMTAwNworICAgICAgICAgICAgcmV0dXJuIiIiICUgKCdcbicgKiAxMDAwLCksIGQpCisgICAgICAgIGYgPSBkWydmJ10KKworICAgICAgICBmLmp1bXAgPSAoMiwgMTAwNykKKyAgICAgICAgZi5vdXRwdXQgPSBbMF0KKyAgICAgICAgc2VsZi5ydW5fdGVzdChmKQorCisgICAgZGVmIHRlc3RfanVtcF90b19maXJzdGxpbmVubyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3RzIHRoYXQgUERCIGNhbiBqdW1wIGJhY2sgdG8gdGhlIGZpcnN0IGxpbmUgaW4gYQorICAgICAgICAjIGZpbGUuICBTZWUgaXNzdWUgIzE2ODk0NTguICBJdCBjYW4gb25seSBiZSB0cmlnZ2VyZWQgaW4gYQorICAgICAgICAjIGZ1bmN0aW9uIGNhbGwgaWYgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgb24gYSBzaW5nbGUgbGluZS4KKyAgICAgICAgY29kZSA9IGNvbXBpbGUoIiIiCisjIENvbW1lbnRzIGRvbid0IGNvdW50Lgorb3V0cHV0LmFwcGVuZCgyKSAgIyBmaXJzdGxpbmVubyBpcyBoZXJlLgorb3V0cHV0LmFwcGVuZCgzKQorb3V0cHV0LmFwcGVuZCg0KQorIiIiLCAiPGZha2UgbW9kdWxlPiIsICJleGVjIikKKyAgICAgICAgY2xhc3MgZmFrZV9mdW5jdGlvbjoKKyAgICAgICAgICAgIGZ1bmNfY29kZSA9IGNvZGUKKyAgICAgICAgICAgIGp1bXAgPSAoMiwgMCkKKyAgICAgICAgdHJhY2VyID0gSnVtcFRyYWNlcihmYWtlX2Z1bmN0aW9uKQorICAgICAgICBzeXMuc2V0dHJhY2UodHJhY2VyLnRyYWNlKQorICAgICAgICBuYW1lc3BhY2UgPSB7Im91dHB1dCI6IFtdfQorICAgICAgICBleGVjIGNvZGUgaW4gbmFtZXNwYWNlCisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorICAgICAgICBzZWxmLmNvbXBhcmVfanVtcF9vdXRwdXQoWzIsIDMsIDIsIDMsIDRdLCBuYW1lc3BhY2VbIm91dHB1dCJdKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUcmFjZVRlc3RDYXNlLAorICAgICAgICBSYWlzaW5nVHJhY2VGdW5jVGVzdENhc2UsCisgICAgICAgIEp1bXBUZXN0Q2FzZQorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NWYzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKQEAgLTAsMCArMSwzMjggQEAKKyIiIlRlc3RzIGZvciBzeXNjb25maWcuIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBjb3B5IGltcG9ydCBjb3B5LCBkZWVwY29weQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLCBnZXRfYXR0cmlidXRlCisKK2ltcG9ydCBzeXNjb25maWcKK2Zyb20gc3lzY29uZmlnIGltcG9ydCAoZ2V0X3BhdGhzLCBnZXRfcGxhdGZvcm0sIGdldF9jb25maWdfdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3BhdGgsIGdldF9wYXRoX25hbWVzLCBfSU5TVEFMTF9TQ0hFTUVTLAorICAgICAgICAgICAgICAgICAgICAgICBfZ2V0X2RlZmF1bHRfc2NoZW1lLCBfZXhwYW5kX3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgIGdldF9zY2hlbWVfbmFtZXMsIGdldF9jb25maWdfdmFyKQoraW1wb3J0IF9vc3hfc3VwcG9ydAorCitjbGFzcyBUZXN0U3lzQ29uZmlnKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiTWFrZSBhIGNvcHkgb2Ygc3lzLnBhdGgiIiIKKyAgICAgICAgc3VwZXIoVGVzdFN5c0NvbmZpZywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5tYWtlZmlsZSA9IE5vbmUKKyAgICAgICAgIyBwYXRjaGluZyBvcy51bmFtZQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAndW5hbWUnKToKKyAgICAgICAgICAgIHNlbGYudW5hbWUgPSBvcy51bmFtZQorICAgICAgICAgICAgc2VsZi5fdW5hbWUgPSBvcy51bmFtZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnVuYW1lID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fdW5hbWUgPSBOb25lCisgICAgICAgIG9zLnVuYW1lID0gc2VsZi5fZ2V0X3VuYW1lCisgICAgICAgICMgc2F2aW5nIHRoZSBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLm5hbWUgPSBvcy5uYW1lCisgICAgICAgIHNlbGYucGxhdGZvcm0gPSBzeXMucGxhdGZvcm0KKyAgICAgICAgc2VsZi52ZXJzaW9uID0gc3lzLnZlcnNpb24KKyAgICAgICAgc2VsZi5zZXAgPSBvcy5zZXAKKyAgICAgICAgc2VsZi5qb2luID0gb3MucGF0aC5qb2luCisgICAgICAgIHNlbGYuaXNhYnMgPSBvcy5wYXRoLmlzYWJzCisgICAgICAgIHNlbGYuc3BsaXRkcml2ZSA9IG9zLnBhdGguc3BsaXRkcml2ZQorICAgICAgICBzZWxmLl9jb25maWdfdmFycyA9IGNvcHkoc3lzY29uZmlnLl9DT05GSUdfVkFSUykKKyAgICAgICAgc2VsZi5vbGRfZW52aXJvbiA9IGRlZXBjb3B5KG9zLmVudmlyb24pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICIiIlJlc3RvcmUgc3lzLnBhdGgiIiIKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoCisgICAgICAgIGlmIHNlbGYubWFrZWZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5tYWtlZmlsZSkKKyAgICAgICAgc2VsZi5fY2xlYW51cF90ZXN0Zm4oKQorICAgICAgICBpZiBzZWxmLnVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3MudW5hbWUgPSBzZWxmLnVuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWwgb3MudW5hbWUKKyAgICAgICAgb3MubmFtZSA9IHNlbGYubmFtZQorICAgICAgICBzeXMucGxhdGZvcm0gPSBzZWxmLnBsYXRmb3JtCisgICAgICAgIHN5cy52ZXJzaW9uID0gc2VsZi52ZXJzaW9uCisgICAgICAgIG9zLnNlcCA9IHNlbGYuc2VwCisgICAgICAgIG9zLnBhdGguam9pbiA9IHNlbGYuam9pbgorICAgICAgICBvcy5wYXRoLmlzYWJzID0gc2VsZi5pc2FicworICAgICAgICBvcy5wYXRoLnNwbGl0ZHJpdmUgPSBzZWxmLnNwbGl0ZHJpdmUKKyAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSUyA9IGNvcHkoc2VsZi5fY29uZmlnX3ZhcnMpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYub2xkX2Vudmlyb24uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KGtleSkgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKworICAgICAgICBmb3Iga2V5IGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLm9sZF9lbnZpcm9uOgorICAgICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tleV0KKworICAgICAgICBzdXBlcihUZXN0U3lzQ29uZmlnLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBkZWYgX3NldF91bmFtZShzZWxmLCB1bmFtZSk6CisgICAgICAgIHNlbGYuX3VuYW1lID0gdW5hbWUKKworICAgIGRlZiBfZ2V0X3VuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdW5hbWUKKworICAgIGRlZiBfY2xlYW51cF90ZXN0Zm4oc2VsZik6CisgICAgICAgIHBhdGggPSBURVNURk4KKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorCisgICAgZGVmIHRlc3RfZ2V0X3BhdGhfbmFtZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BhdGhfbmFtZXMoKSwgc3lzY29uZmlnLl9TQ0hFTUVfS0VZUykKKworICAgIGRlZiB0ZXN0X2dldF9wYXRocyhzZWxmKToKKyAgICAgICAgc2NoZW1lID0gZ2V0X3BhdGhzKCkKKyAgICAgICAgZGVmYXVsdF9zY2hlbWUgPSBfZ2V0X2RlZmF1bHRfc2NoZW1lKCkKKyAgICAgICAgd2FudGVkID0gX2V4cGFuZF92YXJzKGRlZmF1bHRfc2NoZW1lLCBOb25lKQorICAgICAgICB3YW50ZWQgPSB3YW50ZWQuaXRlbXMoKQorICAgICAgICB3YW50ZWQuc29ydCgpCisgICAgICAgIHNjaGVtZSA9IHNjaGVtZS5pdGVtcygpCisgICAgICAgIHNjaGVtZS5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2hlbWUsIHdhbnRlZCkKKworICAgIGRlZiB0ZXN0X2dldF9wYXRoKHNlbGYpOgorICAgICAgICAjIHh4eCBtYWtlIHJlYWwgdGVzdHMgaGVyZQorICAgICAgICBmb3Igc2NoZW1lIGluIF9JTlNUQUxMX1NDSEVNRVM6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBfSU5TVEFMTF9TQ0hFTUVTW3NjaGVtZV06CisgICAgICAgICAgICAgICAgcmVzID0gZ2V0X3BhdGgobmFtZSwgc2NoZW1lKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbmZpZ192YXJzKHNlbGYpOgorICAgICAgICBjdmFycyA9IGdldF9jb25maWdfdmFycygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjdmFycywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN2YXJzKQorCisgICAgZGVmIHRlc3RfZ2V0X3BsYXRmb3JtKHNlbGYpOgorICAgICAgICAjIHdpbmRvd3MgWFAsIDMyYml0cworICAgICAgICBvcy5uYW1lID0gJ250JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi40LjQgKCM3MSwgT2N0IDE4IDIwMDYsIDA4OjM0OjQzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdbTVNDIHYuMTMxMCAzMiBiaXQgKEludGVsKV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnd2luMzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICd3aW4zMicpCisKKyAgICAgICAgIyB3aW5kb3dzIFhQLCBhbWQ2NAorICAgICAgICBvcy5uYW1lID0gJ250JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi40LjQgKCM3MSwgT2N0IDE4IDIwMDYsIDA4OjM0OjQzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdbTVNDIHYuMTMxMCAzMiBiaXQgKEFtZDY0KV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnd2luMzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICd3aW4tYW1kNjQnKQorCisgICAgICAgICMgd2luZG93cyBYUCwgaXRhbml1bQorICAgICAgICBvcy5uYW1lID0gJ250JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi40LjQgKCM3MSwgT2N0IDE4IDIwMDYsIDA4OjM0OjQzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdbTVNDIHYuMTMxMCAzMiBiaXQgKEl0YW5pdW0pXScpCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9ICd3aW4zMicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ3dpbi1pYTY0JykKKworICAgICAgICAjIG1hY2Jvb2sKKyAgICAgICAgb3MubmFtZSA9ICdwb3NpeCcKKyAgICAgICAgc3lzLnZlcnNpb24gPSAoJzIuNSAocjI1OjUxOTE4LCBTZXAgMTkgMjAwNiwgMDg6NDk6MTMpICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ1xuW0dDQyA0LjAuMSAoQXBwbGUgQ29tcHV0ZXIsIEluYy4gYnVpbGQgNTM0MSldJykKKyAgICAgICAgc3lzLnBsYXRmb3JtID0gJ2RhcndpbicKKyAgICAgICAgc2VsZi5fc2V0X3VuYW1lKCgnRGFyd2luJywgJ21hY3ppYWRlJywgJzguMTEuMScsCisgICAgICAgICAgICAgICAgICAgKCdEYXJ3aW4gS2VybmVsIFZlcnNpb24gOC4xMS4xOiAnCisgICAgICAgICAgICAgICAgICAgICdXZWQgT2N0IDEwIDE4OjIzOjI4IFBEVCAyMDA3OyAnCisgICAgICAgICAgICAgICAgICAgICdyb290OnhudS03OTIuMjUuMjB+MS9SRUxFQVNFX0kzODYnKSwgJ1Bvd2VyUEMnKSkKKyAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfb3JpZ2luYWxfdmFsdWVzKGdldF9jb25maWdfdmFycygpKQorICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10gPSAnMTAuMycKKworICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1ETkRFQlVHIC1nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzJykKKworICAgICAgICBtYXhpbnQgPSBzeXMubWF4aW50CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5tYXhpbnQgPSAyMTQ3NDgzNjQ3CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjMtcHBjJykKKyAgICAgICAgICAgIHN5cy5tYXhpbnQgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjMtcHBjNjQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLm1heGludCA9IG1heGludAorCisKKyAgICAgICAgc2VsZi5fc2V0X3VuYW1lKCgnRGFyd2luJywgJ21hY3ppYWRlJywgJzguMTEuMScsCisgICAgICAgICAgICAgICAgICAgKCdEYXJ3aW4gS2VybmVsIFZlcnNpb24gOC4xMS4xOiAnCisgICAgICAgICAgICAgICAgICAgICdXZWQgT2N0IDEwIDE4OjIzOjI4IFBEVCAyMDA3OyAnCisgICAgICAgICAgICAgICAgICAgICdyb290OnhudS03OTIuMjUuMjB+MS9SRUxFQVNFX0kzODYnKSwgJ2kzODYnKSkKKyAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfb3JpZ2luYWxfdmFsdWVzKGdldF9jb25maWdfdmFycygpKQorICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10gPSAnMTAuMycKKworICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1ETkRFQlVHIC1nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzJykKKworICAgICAgICBtYXhpbnQgPSBzeXMubWF4aW50CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5tYXhpbnQgPSAyMTQ3NDgzNjQ3CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjMtaTM4NicpCisgICAgICAgICAgICBzeXMubWF4aW50ID0gOTIyMzM3MjAzNjg1NDc3NTgwNworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC4zLXg4Nl82NCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMubWF4aW50ID0gbWF4aW50CisKKyAgICAgICAgIyBtYWNib29rIHdpdGggZmF0IGJpbmFyaWVzIChmYXQsIHVuaXZlcnNhbCBvciBmYXQ2NCkKKyAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfb3JpZ2luYWxfdmFsdWVzKGdldF9jb25maWdfdmFycygpKQorICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10gPSAnMTAuNCcKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCBwcGMgLWFyY2ggaTM4NiAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtZmF0JykKKworICAgICAgICBfb3N4X3N1cHBvcnQuX3JlbW92ZV9vcmlnaW5hbF92YWx1ZXMoZ2V0X2NvbmZpZ192YXJzKCkpCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggeDg2XzY0IC1hcmNoIGkzODYgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LWludGVsJykKKworICAgICAgICBfb3N4X3N1cHBvcnQuX3JlbW92ZV9vcmlnaW5hbF92YWx1ZXMoZ2V0X2NvbmZpZ192YXJzKCkpCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggeDg2XzY0IC1hcmNoIHBwYyAtYXJjaCBpMzg2IC1pc3lzcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZHluYW1pYyAtRE5ERUJVRyAtZyAtTzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtZmF0MycpCisKKyAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfb3JpZ2luYWxfdmFsdWVzKGdldF9jb25maWdfdmFycygpKQorICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCAtYXJjaCBwcGMgLWFyY2ggaTM4NiAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LXVuaXZlcnNhbCcpCisKKyAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfb3JpZ2luYWxfdmFsdWVzKGdldF9jb25maWdfdmFycygpKQorICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1hcmNoIHg4Nl82NCAtYXJjaCBwcGM2NCAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtZmF0NjQnKQorCisgICAgICAgIGZvciBhcmNoIGluICgncHBjJywgJ2kzODYnLCAneDg2XzY0JywgJ3BwYzY0Jyk6CisgICAgICAgICAgICBfb3N4X3N1cHBvcnQuX3JlbW92ZV9vcmlnaW5hbF92YWx1ZXMoZ2V0X2NvbmZpZ192YXJzKCkpCisgICAgICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1hcmNoICVzIC1pc3lzcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZHluYW1pYyAtRE5ERUJVRyAtZyAtTzMnJShhcmNoLCkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuNC0lcyclKGFyY2gsKSkKKworICAgICAgICAjIGxpbnV4IGRlYmlhbiBzYXJnZQorICAgICAgICBvcy5uYW1lID0gJ3Bvc2l4JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi4zLjUgKCMxLCBKdWwgIDQgMjAwNywgMTc6Mjg6NTkpICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ1xuW0dDQyA0LjEuMiAyMDA2MTExNSAocHJlcmVsZWFzZSkgKERlYmlhbiA0LjEuMS0yMSldJykKKyAgICAgICAgc3lzLnBsYXRmb3JtID0gJ2xpbnV4MicKKyAgICAgICAgc2VsZi5fc2V0X3VuYW1lKCgnTGludXgnLCAnYWdsYWUnLCAnMi42LjIxLjFkZWRpYm94LXI3JywKKyAgICAgICAgICAgICAgICAgICAgJyMxIE1vbiBBcHIgMzAgMTc6MjU6MzggQ0VTVCAyMDA3JywgJ2k2ODYnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbGludXgtaTY4NicpCisKKyAgICAgICAgIyBYWFggbW9yZSBwbGF0Zm9ybXMgdG8gdGVzdHMgaGVyZQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBjb25maWdfaCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKKworICAgIGRlZiB0ZXN0X2dldF9zY2hlbWVfbmFtZXMoc2VsZik6CisgICAgICAgIHdhbnRlZCA9ICgnbnQnLCAnbnRfdXNlcicsICdvczInLCAnb3MyX2hvbWUnLCAnb3N4X2ZyYW1ld29ya191c2VyJywKKyAgICAgICAgICAgICAgICAgICdwb3NpeF9ob21lJywgJ3Bvc2l4X3ByZWZpeCcsICdwb3NpeF91c2VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfc2NoZW1lX25hbWVzKCksIHdhbnRlZCkKKworICAgIGRlZiB0ZXN0X3N5bWxpbmsoc2VsZik6CisgICAgICAgICMgSXNzdWUgNzg4MAorICAgICAgICBzeW1saW5rID0gZ2V0X2F0dHJpYnV0ZShvcywgInN5bWxpbmsiKQorICAgICAgICBkZWYgZ2V0KHB5dGhvbik6CisgICAgICAgICAgICBjbWQgPSBbcHl0aG9uLCAnLWMnLAorICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludCBzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCknXQorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgcmV0dXJuIHAuY29tbXVuaWNhdGUoKQorICAgICAgICByZWFsID0gb3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgbGluayA9IG9zLnBhdGguYWJzcGF0aChURVNURk4pCisgICAgICAgIHN5bWxpbmsocmVhbCwgbGluaykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXQocmVhbCksIGdldChsaW5rKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHVubGluayhsaW5rKQorCisgICAgZGVmIHRlc3RfdXNlcl9zaW1pbGFyKHNlbGYpOgorICAgICAgICAjIElzc3VlICM4NzU5OiBtYWtlIHN1cmUgdGhlIHBvc2l4IHNjaGVtZSBmb3IgdGhlIHVzZXJzCisgICAgICAgICMgaXMgc2ltaWxhciB0byB0aGUgZ2xvYmFsIHBvc2l4X3ByZWZpeCBvbmUKKyAgICAgICAgYmFzZSA9IGdldF9jb25maWdfdmFyKCdiYXNlJykKKyAgICAgICAgdXNlciA9IGdldF9jb25maWdfdmFyKCd1c2VyYmFzZScpCisgICAgICAgICMgdGhlIGdsb2JhbCBzY2hlbWUgbWlycm9ycyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBwcmVmaXggYW5kCisgICAgICAgICMgZXhlYy1wcmVmaXggYnV0IG5vdCB0aGUgdXNlciBzY2hlbWUsIHNvIHdlIGhhdmUgdG8gYWRhcHQgdGhlIHBhdGhzCisgICAgICAgICMgYmVmb3JlIGNvbXBhcmluZyAoaXNzdWUgIzkxMDApCisgICAgICAgIGFkYXB0ID0gc3lzLnByZWZpeCAhPSBzeXMuZXhlY19wcmVmaXgKKyAgICAgICAgZm9yIG5hbWUgaW4gKCdzdGRsaWInLCAncGxhdHN0ZGxpYicsICdwdXJlbGliJywgJ3BsYXRsaWInKToKKyAgICAgICAgICAgIGdsb2JhbF9wYXRoID0gZ2V0X3BhdGgobmFtZSwgJ3Bvc2l4X3ByZWZpeCcpCisgICAgICAgICAgICBpZiBhZGFwdDoKKyAgICAgICAgICAgICAgICBnbG9iYWxfcGF0aCA9IGdsb2JhbF9wYXRoLnJlcGxhY2Uoc3lzLmV4ZWNfcHJlZml4LCBzeXMucHJlZml4KQorICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2Uoc3lzLmV4ZWNfcHJlZml4LCBzeXMucHJlZml4KQorICAgICAgICAgICAgdXNlcl9wYXRoID0gZ2V0X3BhdGgobmFtZSwgJ3Bvc2l4X3VzZXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1c2VyX3BhdGgsIGdsb2JhbF9wYXRoLnJlcGxhY2UoYmFzZSwgdXNlciwgMSkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gImRhcndpbiIsICJ0ZXN0IG9ubHkgcmVsZXZhbnQgb24gTWFjT1NYIikKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9pbl9zdWJwcm9jZXNzKHNlbGYpOgorICAgICAgICBteV9wbGF0Zm9ybSA9IHN5c2NvbmZpZy5nZXRfcGxhdGZvcm0oKQorCisgICAgICAgICMgVGVzdCB3aXRob3V0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpbiB0aGUgZW52aXJvbm1lbnQKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBpZiAnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJyBpbiBlbnY6CisgICAgICAgICAgICBkZWwgZW52WydNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnXQorCisgICAgICAgIHdpdGggb3BlbignL2Rldi9udWxsJywgJ3cnKSBhcyBkZXZudWxsX2ZwOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWworICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsX2ZwLAorICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHRlc3RfcGxhdGZvcm0gPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gdGVzdF9wbGF0Zm9ybS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteV9wbGF0Zm9ybSwgdGVzdF9wbGF0Zm9ybSkKKworCisgICAgICAgICMgVGVzdCB3aXRoIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpbiB0aGUgZW52aXJvbm1lbnQsIGFuZAorICAgICAgICAjIHVzaW5nIGEgdmFsdWUgdGhhdCBpcyB1bmxpa2VseSB0byBiZSB0aGUgZGVmYXVsdCBvbmUuCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10gPSAnMTAuMScKKworICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXNjb25maWc7IHByaW50KHN5c2NvbmZpZy5nZXRfcGxhdGZvcm0oKSknLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICBzdGRlcnI9b3BlbignL2Rldi9udWxsJyksCisgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlfcGxhdGZvcm0sIHRlc3RfcGxhdGZvcm0pCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdFN5c0NvbmZpZykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkMzQyYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKQEAgLTAsMCArMSwxNjY3IEBACisjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLQorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBTdHJpbmdJTworZnJvbSBoYXNobGliIGltcG9ydCBtZDUKK2ltcG9ydCBlcnJubworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0YXJmaWxlCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgQ2hlY2sgZm9yIG91ciBjb21wcmVzc2lvbiBtb2R1bGVzLgordHJ5OgorICAgIGltcG9ydCBnemlwCisgICAgZ3ppcC5HemlwRmlsZQorZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgIGd6aXAgPSBOb25lCit0cnk6CisgICAgaW1wb3J0IGJ6MgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGJ6MiA9IE5vbmUKKworZGVmIG1kNXN1bShkYXRhKToKKyAgICByZXR1cm4gbWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisKK1RFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgodGVzdF9zdXBwb3J0LlRFU1RGTikKK3Rhcm5hbWUgPSB0ZXN0X3N1cHBvcnQuZmluZGZpbGUoInRlc3R0YXIudGFyIikKK2d6aXBuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyLnRhci5neiIpCitiejJuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyLnRhci5iejIiKQordG1wbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidG1wLnRhciIpCisKK21kNV9yZWd0eXBlID0gIjY1ZjQ3N2M4MThhZDllMTVmN2ZlYWIwYzZkMzc3NDJmIgorbWQ1X3NwYXJzZSA9ICJhNTRmYmM0Y2E0ZjQzOTlhOTBlMWIyNzE2NDAxMmZjNiIKKworCitjbGFzcyBSZWFkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICB0YXJuYW1lID0gdGFybmFtZQorICAgIG1vZGUgPSAicjoiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGFyID0gdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSwgbW9kZT1zZWxmLm1vZGUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRhci5jbG9zZSgpCisKKworY2xhc3MgVXN0YXJSZWFkVGVzdChSZWFkVGVzdCk6CisKKyAgICBkZWYgdGVzdF9maWxlb2JqX3JlZ3VsYXJfZmlsZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvcmVndHlwZSIpCisgICAgICAgIGZvYmogPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvKQorICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChsZW4oZGF0YSksIG1kNXN1bShkYXRhKSkgPT0gKHRhcmluZm8uc2l6ZSwgbWQ1X3JlZ3R5cGUpLAorICAgICAgICAgICAgICAgICJyZWd1bGFyIGZpbGUgZXh0cmFjdGlvbiBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfZmlsZW9ial9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIHNlbGYudGFyLmV4dHJhY3QoInVzdGFyL3JlZ3R5cGUiLCBURU1QRElSKQorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9yZWd0eXBlIikKKyAgICAgICAgZm9iajEgPSBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvcmVndHlwZSIpLCAiclUiKQorICAgICAgICBmb2JqMiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8pCisKKyAgICAgICAgbGluZXMxID0gZm9iajEucmVhZGxpbmVzKCkKKyAgICAgICAgbGluZXMyID0gZm9iajIucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzMSA9PSBsaW5lczIsCisgICAgICAgICAgICAgICAgImZpbGVvYmoucmVhZGxpbmVzKCkgZmFpbGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihsaW5lczIpID09IDExNCwKKyAgICAgICAgICAgICAgICAiZmlsZW9iai5yZWFkbGluZXMoKSBmYWlsZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXMyWzgzXSA9PQorICAgICAgICAgICAgICAgICJJIHdpbGwgZ2xhZGx5IGFkbWl0IHRoYXQgUHl0aG9uIGlzIG5vdCB0aGUgZmFzdGVzdCBydW5uaW5nIHNjcmlwdGluZyBsYW5ndWFnZS5cbiIsCisgICAgICAgICAgICAgICAgImZpbGVvYmoucmVhZGxpbmVzKCkgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi50YXIuZXh0cmFjdCgidXN0YXIvcmVndHlwZSIsIFRFTVBESVIpCisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL3JlZ3R5cGUiKQorICAgICAgICBmb2JqMSA9IG9wZW4ob3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9yZWd0eXBlIiksICJyVSIpCisgICAgICAgIGZvYmoyID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykKKyAgICAgICAgbGluZXMxID0gZm9iajEucmVhZGxpbmVzKCkKKyAgICAgICAgbGluZXMyID0gW2xpbmUgZm9yIGxpbmUgaW4gZm9iajJdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lczEgPT0gbGluZXMyLAorICAgICAgICAgICAgICAgICAgICAgImZpbGVvYmouX19pdGVyX18oKSBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfZmlsZW9ial9zZWVrKHNlbGYpOgorICAgICAgICBzZWxmLnRhci5leHRyYWN0KCJ1c3Rhci9yZWd0eXBlIiwgVEVNUERJUikKKyAgICAgICAgZm9iaiA9IG9wZW4ob3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9yZWd0eXBlIiksICJyYiIpCisgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQorICAgICAgICBmb2JqLmNsb3NlKCkKKworICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9yZWd0eXBlIikKKyAgICAgICAgZm9iaiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8pCisKKyAgICAgICAgdGV4dCA9IGZvYmoucmVhZCgpCisgICAgICAgIGZvYmouc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgICAgICAgICAgICAgICJzZWVrKCkgdG8gZmlsZSdzIHN0YXJ0IGZhaWxlZCIpCisgICAgICAgIGZvYmouc2VlaygyMDQ4LCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMjA0OCA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgICAgICAgICAgICAgICJzZWVrKCkgdG8gYWJzb2x1dGUgcG9zaXRpb24gZmFpbGVkIikKKyAgICAgICAgZm9iai5zZWVrKC0xMDI0LCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMTAyNCA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgICAgICAgICAgICAgICJzZWVrKCkgdG8gbmVnYXRpdmUgcmVsYXRpdmUgcG9zaXRpb24gZmFpbGVkIikKKyAgICAgICAgZm9iai5zZWVrKDEwMjQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyMDQ4ID09IGZvYmoudGVsbCgpLAorICAgICAgICAgICAgICAgICAgICAgInNlZWsoKSB0byBwb3NpdGl2ZSByZWxhdGl2ZSBwb3NpdGlvbiBmYWlsZWQiKQorICAgICAgICBzID0gZm9iai5yZWFkKDEwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocyA9PSBkYXRhWzIwNDg6MjA1OF0sCisgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIGFmdGVyIHNlZWsgZmFpbGVkIikKKyAgICAgICAgZm9iai5zZWVrKDAsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJpbmZvLnNpemUgPT0gZm9iai50ZWxsKCksCisgICAgICAgICAgICAgICAgICAgICAic2VlaygpIHRvIGZpbGUncyBlbmQgZmFpbGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvYmoucmVhZCgpID09ICIiLAorICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSBhdCBmaWxlJ3MgZW5kIGRpZCBub3QgcmV0dXJuIGVtcHR5IHN0cmluZyIpCisgICAgICAgIGZvYmouc2VlaygtdGFyaW5mby5zaXplLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgICAgICAgICAgICAgICJyZWxhdGl2ZSBzZWVrKCkgdG8gZmlsZSdzIHN0YXJ0IGZhaWxlZCIpCisgICAgICAgIGZvYmouc2Vlayg1MTIpCisgICAgICAgIHMxID0gZm9iai5yZWFkbGluZXMoKQorICAgICAgICBmb2JqLnNlZWsoNTEyKQorICAgICAgICBzMiA9IGZvYmoucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxID09IHMyLAorICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lcygpIGFmdGVyIHNlZWsgZmFpbGVkIikKKyAgICAgICAgZm9iai5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZm9iai5yZWFkbGluZSgpKSA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgICAgICAgICAgICAgICJ0ZWxsKCkgYWZ0ZXIgcmVhZGxpbmUoKSBmYWlsZWQiKQorICAgICAgICBmb2JqLnNlZWsoNTEyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZvYmoucmVhZGxpbmUoKSkgKyA1MTIgPT0gZm9iai50ZWxsKCksCisgICAgICAgICAgICAgICAgICAgICAidGVsbCgpIGFmdGVyIHNlZWsoKSBhbmQgcmVhZGxpbmUoKSBmYWlsZWQiKQorICAgICAgICBmb2JqLnNlZWsoMCkKKyAgICAgICAgbGluZSA9IGZvYmoucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9iai5yZWFkKCkgPT0gZGF0YVtsZW4obGluZSk6XSwKKyAgICAgICAgICAgICAgICAgICAgICJyZWFkKCkgYWZ0ZXIgcmVhZGxpbmUoKSBmYWlsZWQiKQorICAgICAgICBmb2JqLmNsb3NlKCkKKworICAgICMgVGVzdCBpZiBzeW1ib2xpYyBhbmQgaGFyZCBsaW5rcyBhcmUgcmVzb2x2ZWQgYnkgZXh0cmFjdGZpbGUoKS4gIFRoZQorICAgICMgdGVzdCBsaW5rIG1lbWJlcnMgZWFjaCBwb2ludCB0byBhIHJlZ3VsYXIgbWVtYmVyIHdob3NlIGRhdGEgaXMKKyAgICAjIHN1cHBvc2VkIHRvIGJlIGV4cG9ydGVkLgorICAgIGRlZiBfdGVzdF9maWxlb2JqX2xpbmsoc2VsZiwgbG5rdHlwZSwgcmVndHlwZSk6CisgICAgICAgIGEgPSBzZWxmLnRhci5leHRyYWN0ZmlsZShsbmt0eXBlKQorICAgICAgICBiID0gc2VsZi50YXIuZXh0cmFjdGZpbGUocmVndHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLm5hbWUsIGIubmFtZSkKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfbGluazEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZW9ial9saW5rKCJ1c3Rhci9sbmt0eXBlIiwgInVzdGFyL3JlZ3R5cGUiKQorCisgICAgZGVmIHRlc3RfZmlsZW9ial9saW5rMihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlb2JqX2xpbmsoIi4vdXN0YXIvbGlua3Rlc3QyL2xua3R5cGUiLCAidXN0YXIvbGlua3Rlc3QxL3JlZ3R5cGUiKQorCisgICAgZGVmIHRlc3RfZmlsZW9ial9zeW1saW5rMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlb2JqX2xpbmsoInVzdGFyL3N5bXR5cGUiLCAidXN0YXIvcmVndHlwZSIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX3N5bWxpbmsyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVvYmpfbGluaygiLi91c3Rhci9saW5rdGVzdDIvc3ltdHlwZSIsICJ1c3Rhci9saW5rdGVzdDEvcmVndHlwZSIpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTE0MTYwKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVvYmpfbGluaygic3ltdHlwZTIiLCAidXN0YXIvcmVndHlwZSIpCisKKworY2xhc3MgQ29tbW9uUmVhZFRlc3QoUmVhZFRlc3QpOgorCisgICAgZGVmIHRlc3RfZW1wdHlfdGFyZmlsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBpc3N1ZTYxMjM6IEFsbG93IG9wZW5pbmcgZW1wdHkgYXJjaGl2ZXMuCisgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyBpZiB0YXJmaWxlLm9wZW4oKSBpcyBhYmxlIHRvIG9wZW4gYW4gZW1wdHkgdGFyCisgICAgICAgICMgYXJjaGl2ZSBzdWNjZXNzZnVsbHkuIE5vdGUgdGhhdCBhbiBlbXB0eSB0YXIgYXJjaGl2ZSBpcyBub3QgdGhlCisgICAgICAgICMgc2FtZSBhcyBhbiBlbXB0eSBmaWxlIQorICAgICAgICB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlLnJlcGxhY2UoInIiLCAidyIpKS5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgICAgICB0YXIuZ2V0bmFtZXMoKQorICAgICAgICBleGNlcHQgdGFyZmlsZS5SZWFkRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoInRhcmZpbGUub3BlbigpIGZhaWxlZCBvbiBlbXB0eSBhcmNoaXZlIikKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwodGFyLmdldG1lbWJlcnMoKSwgW10pCisKKyAgICBkZWYgdGVzdF9udWxsX3RhcmZpbGUoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgaXNzdWU2MTIzOiBBbGxvdyBvcGVuaW5nIGVtcHR5IGFyY2hpdmVzLgorICAgICAgICAjIFRoaXMgdGVzdCBndWFyYW50ZWVzIHRoYXQgdGFyZmlsZS5vcGVuKCkgZG9lcyBub3QgdHJlYXQgYW4gZW1wdHkKKyAgICAgICAgIyBmaWxlIGFzIGFuIGVtcHR5IHRhciBhcmNoaXZlLgorICAgICAgICBvcGVuKHRtcG5hbWUsICJ3YiIpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdG1wbmFtZSwgc2VsZi5tb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCB0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfaWdub3JlX3plcm9zKHNlbGYpOgorICAgICAgICAjIFRlc3QgVGFyRmlsZSdzIGlnbm9yZV96ZXJvcyBvcHRpb24uCisgICAgICAgIGlmIHNlbGYubW9kZS5lbmRzd2l0aCgiOmd6Iik6CisgICAgICAgICAgICBfb3BlbiA9IGd6aXAuR3ppcEZpbGUKKyAgICAgICAgZWxpZiBzZWxmLm1vZGUuZW5kc3dpdGgoIjpiejIiKToKKyAgICAgICAgICAgIF9vcGVuID0gYnoyLkJaMkZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9vcGVuID0gb3BlbgorCisgICAgICAgIGZvciBjaGFyIGluICgnXDAnLCAnYScpOgorICAgICAgICAgICAgIyBUZXN0IGlmIEVPRkhlYWRlckVycm9yICgnXDAnKSBhbmQgSW52YWxpZEhlYWRlckVycm9yICgnYScpCisgICAgICAgICAgICAjIGFyZSBpZ25vcmVkIGNvcnJlY3RseS4KKyAgICAgICAgICAgIGZvYmogPSBfb3Blbih0bXBuYW1lLCAid2IiKQorICAgICAgICAgICAgZm9iai53cml0ZShjaGFyICogMTAyNCkKKyAgICAgICAgICAgIGZvYmoud3JpdGUodGFyZmlsZS5UYXJJbmZvKCJmb28iKS50b2J1ZigpKQorICAgICAgICAgICAgZm9iai5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBtb2RlPSJyIiwgaWdub3JlX3plcm9zPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCh0YXIuZ2V0bmFtZXMoKSwgWyJmb28iXSwKKyAgICAgICAgICAgICAgICAgICAgImlnbm9yZV96ZXJvcz1UcnVlIHNob3VsZCBoYXZlIHNraXBwZWQgdGhlICVyLWJsb2NrcyIgJSBjaGFyKQorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKworCitjbGFzcyBNaXNjUmVhZFRlc3QoQ29tbW9uUmVhZFRlc3QpOgorCisgICAgZGVmIHRlc3Rfbm9fbmFtZV9hcmd1bWVudChzZWxmKToKKyAgICAgICAgZm9iaiA9IG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKQorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgb3MucGF0aC5hYnNwYXRoKGZvYmoubmFtZSkpCisKKyAgICBkZWYgdGVzdF9ub19uYW1lX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgZGF0YSA9IG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKS5yZWFkKCkKKyAgICAgICAgZm9iaiA9IFN0cmluZ0lPLlN0cmluZ0lPKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBmb2JqLCAibmFtZSIpCisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5uYW1lLCBOb25lKQorCisgICAgZGVmIHRlc3RfZW1wdHlfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBvcGVuKHNlbGYudGFybmFtZSwgInJiIikucmVhZCgpCisgICAgICAgIGZvYmogPSBTdHJpbmdJTy5TdHJpbmdJTyhkYXRhKQorICAgICAgICBmb2JqLm5hbWUgPSAiIgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfd2l0aF9vZmZzZXQoc2VsZik6CisgICAgICAgICMgU2tpcCB0aGUgZmlyc3QgbWVtYmVyIGFuZCBzdG9yZSB2YWx1ZXMgZnJvbSB0aGUgc2Vjb25kIG1lbWJlcgorICAgICAgICAjIG9mIHRoZSB0ZXN0dGFyLgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lLCBtb2RlPXNlbGYubW9kZSkKKyAgICAgICAgdGFyLm5leHQoKQorICAgICAgICB0ID0gdGFyLm5leHQoKQorICAgICAgICBuYW1lID0gdC5uYW1lCisgICAgICAgIG9mZnNldCA9IHQub2Zmc2V0CisgICAgICAgIGRhdGEgPSB0YXIuZXh0cmFjdGZpbGUodCkucmVhZCgpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgIyBPcGVuIHRoZSB0ZXN0dGFyIGFuZCBzZWVrIHRvIHRoZSBvZmZzZXQgb2YgdGhlIHNlY29uZCBtZW1iZXIuCisgICAgICAgIGlmIHNlbGYubW9kZS5lbmRzd2l0aCgiOmd6Iik6CisgICAgICAgICAgICBfb3BlbiA9IGd6aXAuR3ppcEZpbGUKKyAgICAgICAgZWxpZiBzZWxmLm1vZGUuZW5kc3dpdGgoIjpiejIiKToKKyAgICAgICAgICAgIF9vcGVuID0gYnoyLkJaMkZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9vcGVuID0gb3BlbgorICAgICAgICBmb2JqID0gX29wZW4oc2VsZi50YXJuYW1lLCAicmIiKQorICAgICAgICBmb2JqLnNlZWsob2Zmc2V0KQorCisgICAgICAgICMgVGVzdCBpZiB0aGUgdGFyZmlsZSBzdGFydHMgd2l0aCB0aGUgc2Vjb25kIG1lbWJlci4KKyAgICAgICAgdGFyID0gdGFyLm9wZW4oc2VsZi50YXJuYW1lLCBtb2RlPSJyOiIsIGZpbGVvYmo9Zm9iaikKKyAgICAgICAgdCA9IHRhci5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm5hbWUsIG5hbWUpCisgICAgICAgICMgUmVhZCB0byB0aGUgZW5kIG9mIGZpbGVvYmogYW5kIHRlc3QgaWYgc2Vla2luZyBiYWNrIHRvIHRoZQorICAgICAgICAjIGJlZ2lubmluZyB3b3Jrcy4KKyAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5leHRyYWN0ZmlsZSh0KS5yZWFkKCksIGRhdGEsCisgICAgICAgICAgICAgICAgInNlZWsgYmFjayBkaWQgbm90IHdvcmsiKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZmFpbF9jb21wKHNlbGYpOgorICAgICAgICAjIEZvciBHemlwIGFuZCBCejIgVGVzdHM6IGZhaWwgd2l0aCBhIFJlYWRFcnJvciBvbiBhbiB1bmNvbXByZXNzZWQgZmlsZS4KKyAgICAgICAgaWYgc2VsZi5tb2RlID09ICJyOiI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdGFybmFtZSwgc2VsZi5tb2RlKQorICAgICAgICBmb2JqID0gb3Blbih0YXJuYW1lLCAicmIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCBmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKQorCisgICAgZGVmIHRlc3RfdjdfZGlydHlwZShzZWxmKToKKyAgICAgICAgIyBUZXN0IG9sZCBzdHlsZSBkaXJ0eXBlIG1lbWJlciAoYnVnICMxMzM2NjIzKToKKyAgICAgICAgIyBPbGQgVjcgdGFycyBjcmVhdGUgZGlyZWN0b3J5IG1lbWJlcnMgdXNpbmcgYW4gQVJFR1RZUEUKKyAgICAgICAgIyBoZWFkZXIgd2l0aCBhICIvIiBhcHBlbmRlZCB0byB0aGUgZmlsZW5hbWUgZmllbGQuCisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoIm1pc2MvZGlydHlwZS1vbGQtdjciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby50eXBlID09IHRhcmZpbGUuRElSVFlQRSwKKyAgICAgICAgICAgICAgICAidjcgZGlydHlwZSBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfeHN0YXJfdHlwZShzZWxmKToKKyAgICAgICAgIyBUaGUgeHN0YXIgZm9ybWF0IHN0b3JlcyBleHRyYSBhdGltZSBhbmQgY3RpbWUgZmllbGRzIGluc2lkZSB0aGUKKyAgICAgICAgIyBzcGFjZSByZXNlcnZlZCBmb3IgdGhlIHByZWZpeCBmaWVsZC4gVGhlIHByZWZpeCBmaWVsZCBtdXN0IGJlCisgICAgICAgICMgaWdub3JlZCBpbiB0aGlzIGNhc2UsIG90aGVyd2lzZSBpdCB3aWxsIG1lc3MgdXAgdGhlIG5hbWUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGFyLmdldG1lbWJlcigibWlzYy9yZWd0eXBlLXhzdGFyIikKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJmYWlsZWQgdG8gZmluZCBtaXNjL3JlZ3R5cGUteHN0YXIgKG1hbmdsZWQgcHJlZml4PykiKQorCisgICAgZGVmIHRlc3RfY2hlY2tfbWVtYmVycyhzZWxmKToKKyAgICAgICAgZm9yIHRhcmluZm8gaW4gc2VsZi50YXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KHRhcmluZm8ubXRpbWUpID09IDA3NjA2MTM2NjE3LAorICAgICAgICAgICAgICAgICAgICAid3JvbmcgbXRpbWUgZm9yICVzIiAlIHRhcmluZm8ubmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCB0YXJpbmZvLm5hbWUuc3RhcnRzd2l0aCgidXN0YXIvIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJpbmZvLnVuYW1lID09ICJ0YXJmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgIndyb25nIHVuYW1lIGZvciAlcyIgJSB0YXJpbmZvLm5hbWUpCisKKyAgICBkZWYgdGVzdF9maW5kX21lbWJlcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRhci5nZXRtZW1iZXJzKClbLTFdLm5hbWUgPT0gIm1pc2MvZW9mIiwKKyAgICAgICAgICAgICAgICAiY291bGQgbm90IGZpbmQgYWxsIG1lbWJlcnMiKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9oYXJkbGluayhzZWxmKToKKyAgICAgICAgIyBUZXN0IGhhcmRsaW5rIGV4dHJhY3Rpb24gKGUuZy4gYnVnICM4NTcyOTcpLgorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJuYW1lLCBlcnJvcmxldmVsPTEsIGVuY29kaW5nPSJpc284ODU5LTEiKSBhcyB0YXI6CisgICAgICAgICAgICB0YXIuZXh0cmFjdCgidXN0YXIvcmVndHlwZSIsIFRFTVBESVIpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3JlZ3R5cGUiKSkKKworICAgICAgICAgICAgdGFyLmV4dHJhY3QoInVzdGFyL2xua3R5cGUiLCBURU1QRElSKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9sbmt0eXBlIikpCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9sbmt0eXBlIiksICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1kNXN1bShkYXRhKSwgbWQ1X3JlZ3R5cGUpCisKKyAgICAgICAgICAgIHRhci5leHRyYWN0KCJ1c3Rhci9zeW10eXBlIiwgVEVNUERJUikKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5yZW1vdmUsIG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvc3ltdHlwZSIpKQorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvc3ltdHlwZSIpLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZDVzdW0oZGF0YSksIG1kNV9yZWd0eXBlKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdGFsbChzZWxmKToKKyAgICAgICAgIyBUZXN0IGlmIGV4dHJhY3RhbGwoKSBjb3JyZWN0bHkgcmVzdG9yZXMgZGlyZWN0b3J5IHBlcm1pc3Npb25zCisgICAgICAgICMgYW5kIHRpbWVzIChzZWUgaXNzdWUxNzM1KS4KKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICBkaXJlY3RvcmllcyA9IFt0IGZvciB0IGluIHRhciBpZiB0LmlzZGlyKCldCisgICAgICAgIHRhci5leHRyYWN0YWxsKFRFTVBESVIsIGRpcmVjdG9yaWVzKQorICAgICAgICBmb3IgdGFyaW5mbyBpbiBkaXJlY3RvcmllczoKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgdGFyaW5mby5uYW1lKQorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgIyBXaW4zMiBoYXMgbm8gc3VwcG9ydCBmb3IgZmluZSBncmFpbmVkIHBlcm1pc3Npb25zLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5tb2RlICYgMDc3Nywgb3Muc3RhdChwYXRoKS5zdF9tb2RlICYgMDc3NykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5tdGltZSwgb3MucGF0aC5nZXRtdGltZShwYXRoKSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2luaXRfY2xvc2VfZm9iaihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzM0MTogQ2xvc2UgdGhlIGludGVybmFsIGZpbGUgb2JqZWN0IGluIHRoZSBUYXJGaWxlCisgICAgICAgICMgY29uc3RydWN0b3IgaW4gY2FzZSBvZiBhbiBlcnJvci4gRm9yIHRoZSB0ZXN0IHdlIHJlbHkgb24KKyAgICAgICAgIyB0aGUgZmFjdCB0aGF0IG9wZW5pbmcgYW4gZW1wdHkgZmlsZSByYWlzZXMgYSBSZWFkRXJyb3IuCisgICAgICAgIGVtcHR5ID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJlbXB0eSIpCisgICAgICAgIG9wZW4oZW1wdHksICJ3YiIpLndyaXRlKCIiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhciA9IG9iamVjdC5fX25ld19fKHRhcmZpbGUuVGFyRmlsZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXIuX19pbml0X18oZW1wdHkpCisgICAgICAgICAgICBleGNlcHQgdGFyZmlsZS5SZWFkRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5maWxlb2JqLmNsb3NlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJSZWFkRXJyb3Igbm90IHJhaXNlZCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZW1wdHkpCisKKyAgICBkZWYgdGVzdF9wYXJhbGxlbF9pdGVyYXRpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2NjAxOiBSZXN0YXJ0aW5nIGl0ZXJhdGlvbiBvdmVyIHRhcmZpbGUgY29udGludWVkCisgICAgICAgICMgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4KKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICBmb3IgbTEsIG0yIGluIHppcCh0YXIsIHRhcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5vZmZzZXQsIG0yLm9mZnNldCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLm5hbWUsIG0yLm5hbWUpCisKKworY2xhc3MgU3RyZWFtUmVhZFRlc3QoQ29tbW9uUmVhZFRlc3QpOgorCisgICAgbW9kZT0icnwiCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX3JlZ3VsYXJfZmlsZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLm5leHQoKSAjIGdldCAicmVndHlwZSIgKGNhbid0IHVzZSBnZXRtZW1iZXIpCisgICAgICAgIGZvYmogPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvKQorICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChsZW4oZGF0YSksIG1kNXN1bShkYXRhKSkgPT0gKHRhcmluZm8uc2l6ZSwgbWQ1X3JlZ3R5cGUpLAorICAgICAgICAgICAgICAgICJyZWd1bGFyIGZpbGUgZXh0cmFjdGlvbiBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfcHJvdm9rZV9zdHJlYW1fZXJyb3Ioc2VsZik6CisgICAgICAgIHRhcmluZm9zID0gc2VsZi50YXIuZ2V0bWVtYmVycygpCisgICAgICAgIGYgPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvc1swXSkgIyByZWFkIHRoZSBmaXJzdCBtZW1iZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5TdHJlYW1FcnJvciwgZi5yZWFkKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV9tZW1iZXJzKHNlbGYpOgorICAgICAgICB0YXIxID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICB0YXIyID0gc2VsZi50YXIKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdDEgPSB0YXIxLm5leHQoKQorICAgICAgICAgICAgdDIgPSB0YXIyLm5leHQoKQorICAgICAgICAgICAgaWYgdDEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyIGlzIG5vdCBOb25lLCAic3RyZWFtLm5leHQoKSBmYWlsZWQuIikKKworICAgICAgICAgICAgaWYgdDIuaXNsbmsoKSBvciB0Mi5pc3N5bSgpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuU3RyZWFtRXJyb3IsIHRhcjIuZXh0cmFjdGZpbGUsIHQyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHYxID0gdGFyMS5leHRyYWN0ZmlsZSh0MSkKKyAgICAgICAgICAgIHYyID0gdGFyMi5leHRyYWN0ZmlsZSh0MikKKyAgICAgICAgICAgIGlmIHYxIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2MiBpcyBub3QgTm9uZSwgInN0cmVhbS5leHRyYWN0ZmlsZSgpIGZhaWxlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodjEucmVhZCgpID09IHYyLnJlYWQoKSwgInN0cmVhbSBleHRyYWN0aW9uIGZhaWxlZCIpCisKKyAgICAgICAgdGFyMS5jbG9zZSgpCisKKworY2xhc3MgRGV0ZWN0UmVhZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF90ZXN0ZnVuY19maWxlKHNlbGYsIG5hbWUsIG1vZGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXJmaWxlLm9wZW4obmFtZSwgbW9kZSkKKyAgICAgICAgZXhjZXB0IHRhcmZpbGUuUmVhZEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKworICAgIGRlZiBfdGVzdGZ1bmNfZmlsZW9iaihzZWxmLCBuYW1lLCBtb2RlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyZmlsZS5vcGVuKG5hbWUsIG1vZGUsIGZpbGVvYmo9b3BlbihuYW1lLCAicmIiKSkKKyAgICAgICAgZXhjZXB0IHRhcmZpbGUuUmVhZEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKworICAgIGRlZiBfdGVzdF9tb2RlcyhzZWxmLCB0ZXN0ZnVuYyk6CisgICAgICAgIHRlc3RmdW5jKHRhcm5hbWUsICJyIikKKyAgICAgICAgdGVzdGZ1bmModGFybmFtZSwgInI6IikKKyAgICAgICAgdGVzdGZ1bmModGFybmFtZSwgInI6KiIpCisgICAgICAgIHRlc3RmdW5jKHRhcm5hbWUsICJyfCIpCisgICAgICAgIHRlc3RmdW5jKHRhcm5hbWUsICJyfCoiKQorCisgICAgICAgIGlmIGd6aXA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCB0YXJuYW1lLCBtb2RlPSJyOmd6IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIHRhcm5hbWUsIG1vZGU9InJ8Z3oiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgZ3ppcG5hbWUsIG1vZGU9InI6IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIGd6aXBuYW1lLCBtb2RlPSJyfCIpCisKKyAgICAgICAgICAgIHRlc3RmdW5jKGd6aXBuYW1lLCAiciIpCisgICAgICAgICAgICB0ZXN0ZnVuYyhnemlwbmFtZSwgInI6KiIpCisgICAgICAgICAgICB0ZXN0ZnVuYyhnemlwbmFtZSwgInI6Z3oiKQorICAgICAgICAgICAgdGVzdGZ1bmMoZ3ppcG5hbWUsICJyfCoiKQorICAgICAgICAgICAgdGVzdGZ1bmMoZ3ppcG5hbWUsICJyfGd6IikKKworICAgICAgICBpZiBiejI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCB0YXJuYW1lLCBtb2RlPSJyOmJ6MiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCB0YXJuYW1lLCBtb2RlPSJyfGJ6MiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCBiejJuYW1lLCBtb2RlPSJyOiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCBiejJuYW1lLCBtb2RlPSJyfCIpCisKKyAgICAgICAgICAgIHRlc3RmdW5jKGJ6Mm5hbWUsICJyIikKKyAgICAgICAgICAgIHRlc3RmdW5jKGJ6Mm5hbWUsICJyOioiKQorICAgICAgICAgICAgdGVzdGZ1bmMoYnoybmFtZSwgInI6YnoyIikKKyAgICAgICAgICAgIHRlc3RmdW5jKGJ6Mm5hbWUsICJyfCoiKQorICAgICAgICAgICAgdGVzdGZ1bmMoYnoybmFtZSwgInJ8YnoyIikKKworICAgIGRlZiB0ZXN0X2RldGVjdF9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X21vZGVzKHNlbGYuX3Rlc3RmdW5jX2ZpbGUpCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfZmlsZW9iaihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9tb2RlcyhzZWxmLl90ZXN0ZnVuY19maWxlb2JqKQorCisgICAgZGVmIHRlc3RfZGV0ZWN0X3N0cmVhbV9iejIoc2VsZik6CisgICAgICAgICMgT3JpZ2luYWxseSwgdGFyZmlsZSdzIHN0cmVhbSBkZXRlY3Rpb24gbG9va2VkIGZvciB0aGUgc3RyaW5nCisgICAgICAgICMgIkJaaDkxIiBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUuIFRoaXMgaXMgaW5jb3JyZWN0IGJlY2F1c2UKKyAgICAgICAgIyB0aGUgJzknIHJlcHJlc2VudHMgdGhlIGJsb2Nrc2l6ZSAoOTAwa0IpLiBJZiB0aGUgZmlsZSB3YXMKKyAgICAgICAgIyBjb21wcmVzc2VkIHVzaW5nIGFub3RoZXIgYmxvY2tzaXplIGF1dG9kZXRlY3Rpb24gZmFpbHMuCisgICAgICAgIGlmIG5vdCBiejI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3aXRoIG9wZW4odGFybmFtZSwgInJiIikgYXMgZm9iajoKKyAgICAgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQorCisgICAgICAgICMgQ29tcHJlc3Mgd2l0aCBibG9ja3NpemUgMTAwa0IsIHRoZSBmaWxlIHN0YXJ0cyB3aXRoICJCWmgxMSIuCisgICAgICAgIHdpdGggYnoyLkJaMkZpbGUodG1wbmFtZSwgIndiIiwgY29tcHJlc3NsZXZlbD0xKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYuX3Rlc3RmdW5jX2ZpbGUodG1wbmFtZSwgInJ8KiIpCisKKworY2xhc3MgTWVtYmVyUmVhZFRlc3QoUmVhZFRlc3QpOgorCisgICAgZGVmIF90ZXN0X21lbWJlcihzZWxmLCB0YXJpbmZvLCBjaGtzdW09Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBpZiBjaGtzdW0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWQ1c3VtKHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8pLnJlYWQoKSkgPT0gY2hrc3VtLAorICAgICAgICAgICAgICAgICAgICAid3JvbmcgbWQ1c3VtIGZvciAlcyIgJSB0YXJpbmZvLm5hbWUpCisKKyAgICAgICAga3dhcmdzWyJtdGltZSJdID0gMDc2MDYxMzY2MTcKKyAgICAgICAga3dhcmdzWyJ1aWQiXSA9IDEwMDAKKyAgICAgICAga3dhcmdzWyJnaWQiXSA9IDEwMAorICAgICAgICBpZiAib2xkLXY3IiBub3QgaW4gdGFyaW5mby5uYW1lOgorICAgICAgICAgICAgIyBWNyB0YXIgY2FuJ3QgaGFuZGxlIGFscGhhYmV0aWMgb3duZXJzLgorICAgICAgICAgICAga3dhcmdzWyJ1bmFtZSJdID0gInRhcmZpbGUiCisgICAgICAgICAgICBrd2FyZ3NbImduYW1lIl0gPSAidGFyZmlsZSIKKyAgICAgICAgZm9yIGssIHYgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIodGFyaW5mbywgaykgPT0gdiwKKyAgICAgICAgICAgICAgICAgICAgIndyb25nIHZhbHVlIGluICVzIGZpZWxkIG9mICVzIiAlIChrLCB0YXJpbmZvLm5hbWUpKQorCisgICAgZGVmIHRlc3RfZmluZF9yZWd0eXBlKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9yZWd0eXBlIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT03MDExLCBjaGtzdW09bWQ1X3JlZ3R5cGUpCisKKyAgICBkZWYgdGVzdF9maW5kX2NvbnR0eXBlKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9jb250dHlwZSIpCisgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9NzAxMSwgY2hrc3VtPW1kNV9yZWd0eXBlKQorCisgICAgZGVmIHRlc3RfZmluZF9kaXJ0eXBlKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9kaXJ0eXBlIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT0wKQorCisgICAgZGVmIHRlc3RfZmluZF9kaXJ0eXBlX3dpdGhfc2l6ZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvZGlydHlwZS13aXRoLXNpemUiKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTI1NSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfbG5rdHlwZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvbG5rdHlwZSIpCisgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9MCwgbGlua25hbWU9InVzdGFyL3JlZ3R5cGUiKQorCisgICAgZGVmIHRlc3RfZmluZF9zeW10eXBlKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9zeW10eXBlIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT0wLCBsaW5rbmFtZT0icmVndHlwZSIpCisKKyAgICBkZWYgdGVzdF9maW5kX2Jsa3R5cGUoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL2Jsa3R5cGUiKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTAsIGRldm1ham9yPTMsIGRldm1pbm9yPTApCisKKyAgICBkZWYgdGVzdF9maW5kX2NocnR5cGUoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL2NocnR5cGUiKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTAsIGRldm1ham9yPTEsIGRldm1pbm9yPTMpCisKKyAgICBkZWYgdGVzdF9maW5kX2ZpZm90eXBlKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9maWZvdHlwZSIpCisgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9MCkKKworICAgIGRlZiB0ZXN0X2ZpbmRfc3BhcnNlKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9zcGFyc2UiKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTg2MDE2LCBjaGtzdW09bWQ1X3NwYXJzZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfdW1sYXV0cyhzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvdW1sYXV0cy3E1tzk9vzfIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT03MDExLCBjaGtzdW09bWQ1X3JlZ3R5cGUpCisKKyAgICBkZWYgdGVzdF9maW5kX3VzdGFyX2xvbmduYW1lKHNlbGYpOgorICAgICAgICBuYW1lID0gInVzdGFyLyIgKyAiMTIzNDUvIiAqIDM5ICsgIjEyMzQ1NjcvbG9uZ25hbWUiCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc2VsZi50YXIuZ2V0bmFtZXMoKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcmVndHlwZV9vbGR2NyhzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigibWlzYy9yZWd0eXBlLW9sZC12NyIpCisgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9NzAxMSwgY2hrc3VtPW1kNV9yZWd0eXBlKQorCisgICAgZGVmIHRlc3RfZmluZF9wYXhfdW1sYXV0cyhzZWxmKToKKyAgICAgICAgc2VsZi50YXIgPSB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lLCBtb2RlPXNlbGYubW9kZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInBheC91bWxhdXRzLcTW3OT2/N8iKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTcwMTEsIGNoa3N1bT1tZDVfcmVndHlwZSkKKworCitjbGFzcyBMb25nbmFtZVRlc3QoUmVhZFRlc3QpOgorCisgICAgZGVmIHRlc3RfcmVhZF9sb25nbmFtZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlYWRpbmcgb2YgbG9uZ25hbWUgKGJ1ZyAjMTQ3MTQyNykuCisgICAgICAgIGxvbmduYW1lID0gc2VsZi5zdWJkaXIgKyAiLyIgKyAiMTIzLyIgKiAxMjUgKyAibG9uZ25hbWUiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIobG9uZ25hbWUpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibG9uZ25hbWUgbm90IGZvdW5kIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udHlwZSAhPSB0YXJmaWxlLkRJUlRZUEUsICJyZWFkIGxvbmduYW1lIGFzIGRpcnR5cGUiKQorCisgICAgZGVmIHRlc3RfcmVhZF9sb25nbGluayhzZWxmKToKKyAgICAgICAgbG9uZ25hbWUgPSBzZWxmLnN1YmRpciArICIvIiArICIxMjMvIiAqIDEyNSArICJsb25nbmFtZSIKKyAgICAgICAgbG9uZ2xpbmsgPSBzZWxmLnN1YmRpciArICIvIiArICIxMjMvIiAqIDEyNSArICJsb25nbGluayIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcihsb25nbGluaykKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJsb25nbGluayBub3QgZm91bmQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby5saW5rbmFtZSA9PSBsb25nbmFtZSwgImxpbmtuYW1lIHdyb25nIikKKworICAgIGRlZiB0ZXN0X3RydW5jYXRlZF9sb25nbmFtZShzZWxmKToKKyAgICAgICAgbG9uZ25hbWUgPSBzZWxmLnN1YmRpciArICIvIiArICIxMjMvIiAqIDEyNSArICJsb25nbmFtZSIKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcihsb25nbmFtZSkKKyAgICAgICAgb2Zmc2V0ID0gdGFyaW5mby5vZmZzZXQKKyAgICAgICAgc2VsZi50YXIuZmlsZW9iai5zZWVrKG9mZnNldCkKKyAgICAgICAgZm9iaiA9IFN0cmluZ0lPLlN0cmluZ0lPKHNlbGYudGFyLmZpbGVvYmoucmVhZCgzICogNTEyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgbmFtZT0iZm9vLnRhciIsIGZpbGVvYmo9Zm9iaikKKworICAgIGRlZiB0ZXN0X2hlYWRlcl9vZmZzZXQoc2VsZik6CisgICAgICAgICMgVGVzdCBpZiB0aGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBUYXJJbmZvIG9iamVjdCBpbmNsdWRlcworICAgICAgICAjIHRoZSBwcmVjZWRpbmcgZXh0ZW5kZWQgaGVhZGVyLgorICAgICAgICBsb25nbmFtZSA9IHNlbGYuc3ViZGlyICsgIi8iICsgIjEyMy8iICogMTI1ICsgImxvbmduYW1lIgorICAgICAgICBvZmZzZXQgPSBzZWxmLnRhci5nZXRtZW1iZXIobG9uZ25hbWUpLm9mZnNldAorICAgICAgICBmb2JqID0gb3Blbih0YXJuYW1lKQorICAgICAgICBmb2JqLnNlZWsob2Zmc2V0KQorICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvLmZyb21idWYoZm9iai5yZWFkKDUxMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby50eXBlLCBzZWxmLmxvbmduYW1ldHlwZSkKKworCitjbGFzcyBHTlVSZWFkVGVzdChMb25nbmFtZVRlc3QpOgorCisgICAgc3ViZGlyID0gImdudSIKKyAgICBsb25nbmFtZXR5cGUgPSB0YXJmaWxlLkdOVVRZUEVfTE9OR05BTUUKKworICAgIGRlZiB0ZXN0X3NwYXJzZV9maWxlKHNlbGYpOgorICAgICAgICB0YXJpbmZvMSA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvc3BhcnNlIikKKyAgICAgICAgZm9iajEgPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvMSkKKyAgICAgICAgdGFyaW5mbzIgPSBzZWxmLnRhci5nZXRtZW1iZXIoImdudS9zcGFyc2UiKQorICAgICAgICBmb2JqMiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9iajEucmVhZCgpID09IGZvYmoyLnJlYWQoKSwKKyAgICAgICAgICAgICAgICAic3BhcnNlIGZpbGUgZXh0cmFjdGlvbiBmYWlsZWQiKQorCisKK2NsYXNzIFBheFJlYWRUZXN0KExvbmduYW1lVGVzdCk6CisKKyAgICBzdWJkaXIgPSAicGF4IgorICAgIGxvbmduYW1ldHlwZSA9IHRhcmZpbGUuWEhEVFlQRQorCisgICAgZGVmIHRlc3RfcGF4X2dsb2JhbF9oZWFkZXJzKHNlbGYpOgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisKKyAgICAgICAgdGFyaW5mbyA9IHRhci5nZXRtZW1iZXIoInBheC9yZWd0eXBlMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51bmFtZSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5nbmFtZSwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksIHUixNbc5Pb83yIpCisKKyAgICAgICAgdGFyaW5mbyA9IHRhci5nZXRtZW1iZXIoInBheC9yZWd0eXBlMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51bmFtZSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5nbmFtZSwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksIHUixNbc5Pb83yIpCisKKyAgICAgICAgdGFyaW5mbyA9IHRhci5nZXRtZW1iZXIoInBheC9yZWd0eXBlMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51bmFtZSwgInRhcmZpbGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uZ25hbWUsICJ0YXJmaWxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnBheF9oZWFkZXJzLmdldCgiVkVORE9SLnVtbGF1dHMiKSwgdSLE1tzk9vzfIikKKworICAgIGRlZiB0ZXN0X3BheF9udW1iZXJfZmllbGRzKHNlbGYpOgorICAgICAgICAjIEFsbCBmb2xsb3dpbmcgbnVtYmVyIGZpZWxkcyBhcmUgcmVhZCBmcm9tIHRoZSBwYXggaGVhZGVyLgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0bWVtYmVyKCJwYXgvcmVndHlwZTQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgNzAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnVpZCwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uZ2lkLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5tdGltZSwgMTA0MTgwODc4My4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodGFyaW5mby5tdGltZSksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHRhcmluZm8ucGF4X2hlYWRlcnNbImF0aW1lIl0pLCAxMDQxODA4NzgzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQodGFyaW5mby5wYXhfaGVhZGVyc1siY3RpbWUiXSksIDEwNDE4MDg3ODMuMCkKKworCitjbGFzcyBXcml0ZVRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFB1dCBhbGwgd3JpdGUgdGVzdHMgaW4gaGVyZSB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSB0ZXN0ZWQKKyAgICAjIGluIGFsbCBwb3NzaWJsZSBtb2RlIGNvbWJpbmF0aW9ucy4KKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfbm9fY2xvc2Uoc2VsZik6CisgICAgICAgIGZvYmogPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKQorICAgICAgICB0YXIuYWRkZmlsZSh0YXJmaWxlLlRhckluZm8oImZvbyIpKQorICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9iai5jbG9zZWQgaXMgRmFsc2UsICJleHRlcm5hbCBmaWxlb2JqcyBtdXN0IG5ldmVyIGNsb3NlZCIpCisKKworY2xhc3MgV3JpdGVUZXN0KFdyaXRlVGVzdEJhc2UpOgorCisgICAgbW9kZSA9ICJ3OiIKKworICAgIGRlZiB0ZXN0XzEwMF9jaGFyX25hbWUoc2VsZik6CisgICAgICAgICMgVGhlIG5hbWUgZmllbGQgaW4gYSB0YXIgaGVhZGVyIHN0b3JlcyBzdHJpbmdzIG9mIGF0IG1vc3QgMTAwIGNoYXJzLgorICAgICAgICAjIElmIGEgc3RyaW5nIGlzIHNob3J0ZXIgdGhhbiAxMDAgY2hhcnMgaXQgaGFzIHRvIGJlIHBhZGRlZCB3aXRoICdcMCcsCisgICAgICAgICMgd2hpY2ggaW1wbGllcyB0aGF0IGEgc3RyaW5nIG9mIGV4YWN0bHkgMTAwIGNoYXJzIGlzIHN0b3JlZCB3aXRob3V0CisgICAgICAgICMgYSB0cmFpbGluZyAnXDAnLgorICAgICAgICBuYW1lID0gIjAxMjM0NTY3ODkiICogMTAKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgdCA9IHRhcmZpbGUuVGFySW5mbyhuYW1lKQorICAgICAgICB0YXIuYWRkZmlsZSh0KQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmdldG5hbWVzKClbMF0gPT0gbmFtZSwKKyAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHN0b3JlIDEwMCBjaGFyIGZpbGVuYW1lIikKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3Rhcl9zaXplKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAjMTAxMzg4Mi4KKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZmlsZSIpCisgICAgICAgIGZvYmogPSBvcGVuKHBhdGgsICJ3YiIpCisgICAgICAgIGZvYmoud3JpdGUoImFhYSIpCisgICAgICAgIGZvYmouY2xvc2UoKQorICAgICAgICB0YXIuYWRkKHBhdGgpCisgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmdldHNpemUodG1wbmFtZSkgPiAwLAorICAgICAgICAgICAgICAgICJ0YXJmaWxlIGlzIGVtcHR5IikKKworICAgICMgVGhlIHRlc3RfKl9zaXplIHRlc3RzIHRlc3QgZm9yIGJ1ZyAjMTE2NzEyOC4KKyAgICBkZWYgdGVzdF9maWxlX3NpemUoc2VsZik6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZmlsZSIpCisgICAgICAgIGZvYmogPSBvcGVuKHBhdGgsICJ3YiIpCisgICAgICAgIGZvYmouY2xvc2UoKQorICAgICAgICB0YXJpbmZvID0gdGFyLmdldHRhcmluZm8ocGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnNpemUsIDApCisKKyAgICAgICAgZm9iaiA9IG9wZW4ocGF0aCwgIndiIikKKyAgICAgICAgZm9iai53cml0ZSgiYWFhIikKKyAgICAgICAgZm9iai5jbG9zZSgpCisgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0dGFyaW5mbyhwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgMykKKworICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X3NpemUoc2VsZik6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImRpcmVjdG9yeSIpCisgICAgICAgIG9zLm1rZGlyKHBhdGgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgICAgICB0YXJpbmZvID0gdGFyLmdldHRhcmluZm8ocGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5zaXplLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Mucm1kaXIocGF0aCkKKworICAgIGRlZiB0ZXN0X2xpbmtfc2l6ZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKKyAgICAgICAgICAgIGxpbmsgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImxpbmsiKQorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJsaW5rX3RhcmdldCIpCisgICAgICAgICAgICBmb2JqID0gb3Blbih0YXJnZXQsICJ3YiIpCisgICAgICAgICAgICBmb2JqLndyaXRlKCJhYWEiKQorICAgICAgICAgICAgZm9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy5saW5rKHRhcmdldCwgbGluaykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQorICAgICAgICAgICAgICAgICMgUmVjb3JkIHRoZSBsaW5rIHRhcmdldCBpbiB0aGUgaW5vZGVzIGxpc3QuCisgICAgICAgICAgICAgICAgdGFyLmdldHRhcmluZm8odGFyZ2V0KQorICAgICAgICAgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0dGFyaW5mbyhsaW5rKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5zaXplLCAwKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGFyZ2V0KQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShsaW5rKQorCisgICAgZGVmIHRlc3Rfc3ltbGlua19zaXplKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihURU1QRElSLCAic3ltbGluayIpCisgICAgICAgICAgICBvcy5zeW1saW5rKCJsaW5rX3RhcmdldCIsIHBhdGgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgICAgICAgICB0YXJpbmZvID0gdGFyLmdldHRhcmluZm8ocGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgMCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisKKyAgICBkZWYgdGVzdF9hZGRfc2VsZihzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciAjMTI1NzI1NS4KKyAgICAgICAgZHN0bmFtZSA9IG9zLnBhdGguYWJzcGF0aCh0bXBuYW1lKQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIubmFtZSA9PSBkc3RuYW1lLCAiYXJjaGl2ZSBuYW1lIG11c3QgYmUgYWJzb2x1dGUiKQorCisgICAgICAgIHRhci5hZGQoZHN0bmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5nZXRuYW1lcygpID09IFtdLCAiYWRkZWQgdGhlIGFyY2hpdmUgdG8gaXRzZWxmIikKKworICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihURU1QRElSKQorICAgICAgICB0YXIuYWRkKGRzdG5hbWUpCisgICAgICAgIG9zLmNoZGlyKGN3ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5nZXRuYW1lcygpID09IFtdLCAiYWRkZWQgdGhlIGFyY2hpdmUgdG8gaXRzZWxmIikKKworICAgIGRlZiB0ZXN0X2V4Y2x1ZGUoc2VsZik6CisgICAgICAgIHRlbXBkaXIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImV4Y2x1ZGUiKQorICAgICAgICBvcy5ta2Rpcih0ZW1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiAoImZvbyIsICJiYXIiLCAiYmF6Iik6CisgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCBuYW1lKQorICAgICAgICAgICAgICAgIG9wZW4obmFtZSwgIndiIikuY2xvc2UoKQorCisgICAgICAgICAgICBleGNsdWRlID0gb3MucGF0aC5pc2ZpbGUKKworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoInVzZSB0aGUgZmlsdGVyIGFyZ3VtZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgICAgICB0YXIuYWRkKHRlbXBkaXIsIGFyY25hbWU9ImVtcHR5X2RpciIsIGV4Y2x1ZGU9ZXhjbHVkZSkKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAiciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0YXIuZ2V0bWVtYmVycygpKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmdldG5hbWVzKClbMF0sICJlbXB0eV9kaXIiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgorICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJmaWx0ZXIiKQorICAgICAgICBvcy5ta2Rpcih0ZW1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiAoImZvbyIsICJiYXIiLCAiYmF6Iik6CisgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCBuYW1lKQorICAgICAgICAgICAgICAgIG9wZW4obmFtZSwgIndiIikuY2xvc2UoKQorCisgICAgICAgICAgICBkZWYgZmlsdGVyKHRhcmluZm8pOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUodGFyaW5mby5uYW1lKSA9PSAiYmFyIjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgdGFyaW5mby51aWQgPSAxMjMKKyAgICAgICAgICAgICAgICB0YXJpbmZvLnVuYW1lID0gImZvbyIKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFyaW5mbworCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgICAgIHRhci5hZGQodGVtcGRpciwgYXJjbmFtZT0iZW1wdHlfZGlyIiwgZmlsdGVyPWZpbHRlcikKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAiciIpCisgICAgICAgICAgICBmb3IgdGFyaW5mbyBpbiB0YXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnVpZCwgMTIzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51bmFtZSwgImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0YXIuZ2V0bWVtYmVycygpKSwgMykKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICAjIEd1YXJhbnRlZSB0aGF0IHN0b3JlZCBwYXRobmFtZXMgYXJlIG5vdCBtb2RpZmllZC4gRG9uJ3QKKyAgICAjIHJlbW92ZSAuLyBvciAuLi8gb3IgZG91YmxlIHNsYXNoZXMuIFN0aWxsIG1ha2UgYWJzb2x1dGUKKyAgICAjIHBhdGhuYW1lcyByZWxhdGl2ZS4KKyAgICAjIEZvciBkZXRhaWxzIHNlZSBidWcgIzYwNTQuCisgICAgZGVmIF90ZXN0X3BhdGhuYW1lKHNlbGYsIHBhdGgsIGNtcF9wYXRoPU5vbmUsIGRpcj1GYWxzZSk6CisgICAgICAgICMgQ3JlYXRlIGEgdGFyZmlsZSB3aXRoIGFuIGVtcHR5IG1lbWJlciBuYW1lZCBwYXRoCisgICAgICAgICMgYW5kIGNvbXBhcmUgdGhlIHN0b3JlZCBuYW1lIHdpdGggdGhlIG9yaWdpbmFsLgorICAgICAgICBmb28gPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImZvbyIpCisgICAgICAgIGlmIG5vdCBkaXI6CisgICAgICAgICAgICBvcGVuKGZvbywgInciKS5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5ta2Rpcihmb28pCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgdGFyLmFkZChmb28sIGFyY25hbWU9cGF0aCkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInIiKQorICAgICAgICB0ID0gdGFyLm5leHQoKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgIGlmIG5vdCBkaXI6CisgICAgICAgICAgICBvcy5yZW1vdmUoZm9vKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3Mucm1kaXIoZm9vKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5uYW1lLCBjbXBfcGF0aCBvciBwYXRoLnJlcGxhY2Uob3Muc2VwLCAiLyIpKQorCisgICAgZGVmIHRlc3RfcGF0aG5hbWVzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCJmb28iKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiZm9vIiwgIi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCJmb28iLCAiLi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuIiwgImZvbyIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLiIsICJmb28iLCAiLiIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLiIsICJmb28iLCAiLiIsICJiYXIiKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4iLCAiZm9vIiwgIi4uIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLiIsICJmb28iLCAiLi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuLiIsICJmb28iKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4uIiwgImZvbyIsICIuLiIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLi4iLCAiZm9vIiwgIi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuLiIsICJmb28iLCAiLi4iLCAiYmFyIikpCisKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiZm9vIiArIG9zLnNlcCArIG9zLnNlcCArICJiYXIiKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCJmb28iICsgb3Muc2VwICsgb3Muc2VwLCAiZm9vIiwgZGlyPVRydWUpCisKKyAgICBkZWYgdGVzdF9hYnNfcGF0aG5hbWVzKHNlbGYpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoIkM6XFxmb28iLCAiZm9vIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoIi9mb28iLCAiZm9vIikKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoIi8vL2ZvbyIsICJmb28iKQorCisgICAgZGVmIHRlc3RfY3dkKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihURU1QRElSKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcGVuKCJmb28iLCAidyIpLmNsb3NlKCkKKworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgICAgIHRhci5hZGQoIi4iKQorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJyIikKKyAgICAgICAgICAgIGZvciB0IGluIHRhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC5uYW1lID09ICIuIiBvciB0Lm5hbWUuc3RhcnRzd2l0aCgiLi8iKSkKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihjd2QpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3ltbGluaycpLCAibmVlZHMgb3Muc3ltbGluayIpCisgICAgZGVmIHRlc3RfZXh0cmFjdGFsbF9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGlmIGV4dHJhY3RhbGwgd29ya3MgcHJvcGVybHkgd2hlbiB0YXJmaWxlIGNvbnRhaW5zIHN5bWxpbmtzCisgICAgICAgIHRlbXBkaXIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInRlc3RzeW1saW5rcyIpCisgICAgICAgIHRlbXBhcmNoaXZlID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0c3ltbGlua3MudGFyIikKKyAgICAgICAgb3MubWtkaXIodGVtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc291cmNlX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwnc291cmNlJykKKyAgICAgICAgICAgIHRhcmdldF9maWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsJ3N5bWxpbmsnKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9maWxlLCd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdzb21ldGhpbmdcbicpCisgICAgICAgICAgICBvcy5zeW1saW5rKHNvdXJjZV9maWxlLCB0YXJnZXRfZmlsZSkKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0ZW1wYXJjaGl2ZSwndycpCisgICAgICAgICAgICB0YXIuYWRkKHNvdXJjZV9maWxlLCBhcmNuYW1lPW9zLnBhdGguYmFzZW5hbWUoc291cmNlX2ZpbGUpKQorICAgICAgICAgICAgdGFyLmFkZCh0YXJnZXRfZmlsZSwgYXJjbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHRhcmdldF9maWxlKSkKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgICAgICAjIExldCdzIGV4dHJhY3QgaXQgdG8gdGhlIGxvY2F0aW9uIHdoaWNoIGNvbnRhaW5zIHRoZSBzeW1saW5rCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGVtcGFyY2hpdmUsJ3InKQorICAgICAgICAgICAgIyB0aGlzIHNob3VsZCBub3QgcmFpc2UgT1NFcnJvcjogW0Vycm5vIDE3XSBGaWxlIGV4aXN0cworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRhci5leHRyYWN0YWxsKHBhdGg9dGVtcGRpcikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXh0cmFjdGFsbCBmYWlsZWQgd2l0aCBzeW1saW5rZWQgZmlsZXMiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKHRlbXBhcmNoaXZlKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3N5bWxpbmsnKSwgIm5lZWRzIG9zLnN5bWxpbmsiKQorICAgIGRlZiB0ZXN0X2V4dHJhY3RhbGxfYnJva2VuX3N5bWxpbmtzKHNlbGYpOgorICAgICAgICAjIFRlc3QgaWYgZXh0cmFjdGFsbCB3b3JrcyBwcm9wZXJseSB3aGVuIHRhcmZpbGUgY29udGFpbnMgYnJva2VuCisgICAgICAgICMgc3ltbGlua3MKKyAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHN5bWxpbmtzIikKKyAgICAgICAgdGVtcGFyY2hpdmUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInRlc3RzeW1saW5rcy50YXIiKQorICAgICAgICBvcy5ta2Rpcih0ZW1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2VfZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCdzb3VyY2UnKQorICAgICAgICAgICAgdGFyZ2V0X2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwnc3ltbGluaycpCisgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlX2ZpbGUsJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ3NvbWV0aGluZ1xuJykKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc291cmNlX2ZpbGUsIHRhcmdldF9maWxlKQorICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRlbXBhcmNoaXZlLCd3JykKKyAgICAgICAgICAgIHRhci5hZGQodGFyZ2V0X2ZpbGUsIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZSh0YXJnZXRfZmlsZSkpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICAgICAgIyByZW1vdmUgdGhlIHJlYWwgZmlsZQorICAgICAgICAgICAgb3MudW5saW5rKHNvdXJjZV9maWxlKQorICAgICAgICAgICAgIyBMZXQncyBleHRyYWN0IGl0IHRvIHRoZSBsb2NhdGlvbiB3aGljaCBjb250YWlucyB0aGUgc3ltbGluaworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRlbXBhcmNoaXZlLCdyJykKKyAgICAgICAgICAgICMgdGhpcyBzaG91bGQgbm90IHJhaXNlIE9TRXJyb3I6IFtFcnJubyAxN10gRmlsZSBleGlzdHMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXIuZXh0cmFjdGFsbChwYXRoPXRlbXBkaXIpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4dHJhY3RhbGwgZmFpbGVkIHdpdGggYnJva2VuIHN5bWxpbmtlZCBmaWxlcyIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsodGVtcGFyY2hpdmUpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnbGluaycpLCAibmVlZHMgb3MubGluayIpCisgICAgZGVmIHRlc3RfZXh0cmFjdGFsbF9oYXJkbGlua3Moc2VsZik6CisgICAgICAgICMgVGVzdCBpZiBleHRyYWN0YWxsIHdvcmtzIHByb3Blcmx5IHdoZW4gdGFyZmlsZSBjb250YWlucyBzeW1saW5rcworICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0c3ltbGlua3MiKQorICAgICAgICB0ZW1wYXJjaGl2ZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHN5bWxpbmtzLnRhciIpCisgICAgICAgIG9zLm1rZGlyKHRlbXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXJjZV9maWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsJ3NvdXJjZScpCisgICAgICAgICAgICB0YXJnZXRfZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCdzeW1saW5rJykKKyAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2VfZmlsZSwndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnc29tZXRoaW5nXG4nKQorICAgICAgICAgICAgb3MubGluayhzb3VyY2VfZmlsZSwgdGFyZ2V0X2ZpbGUpCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGVtcGFyY2hpdmUsJ3cnKQorICAgICAgICAgICAgdGFyLmFkZChzb3VyY2VfZmlsZSwgYXJjbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNvdXJjZV9maWxlKSkKKyAgICAgICAgICAgIHRhci5hZGQodGFyZ2V0X2ZpbGUsIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZSh0YXJnZXRfZmlsZSkpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICAgICAgIyBMZXQncyBleHRyYWN0IGl0IHRvIHRoZSBsb2NhdGlvbiB3aGljaCBjb250YWlucyB0aGUgc3ltbGluaworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRlbXBhcmNoaXZlLCdyJykKKyAgICAgICAgICAgICMgdGhpcyBzaG91bGQgbm90IHJhaXNlIE9TRXJyb3I6IFtFcnJubyAxN10gRmlsZSBleGlzdHMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXIuZXh0cmFjdGFsbChwYXRoPXRlbXBkaXIpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4dHJhY3RhbGwgZmFpbGVkIHdpdGggbGlua2VkIGZpbGVzIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayh0ZW1wYXJjaGl2ZSkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKworY2xhc3MgU3RyZWFtV3JpdGVUZXN0KFdyaXRlVGVzdEJhc2UpOgorCisgICAgbW9kZSA9ICJ3fCIKKworICAgIGRlZiB0ZXN0X3N0cmVhbV9wYWRkaW5nKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAjMTU0MzMwMy4KKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICBpZiBzZWxmLm1vZGUuZW5kc3dpdGgoImd6Iik6CisgICAgICAgICAgICBmb2JqID0gZ3ppcC5HemlwRmlsZSh0bXBuYW1lKQorICAgICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCisgICAgICAgICAgICBmb2JqLmNsb3NlKCkKKyAgICAgICAgZWxpZiBzZWxmLm1vZGUuZW5kc3dpdGgoImJ6MiIpOgorICAgICAgICAgICAgZGVjID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCisgICAgICAgICAgICBkYXRhID0gb3Blbih0bXBuYW1lLCAicmIiKS5yZWFkKCkKKyAgICAgICAgICAgIGRhdGEgPSBkZWMuZGVjb21wcmVzcyhkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkZWMudW51c2VkX2RhdGEpID09IDAsCisgICAgICAgICAgICAgICAgICAgICJmb3VuZCB0cmFpbGluZyBkYXRhIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvYmogPSBvcGVuKHRtcG5hbWUsICJyYiIpCisgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKKyAgICAgICAgICAgIGZvYmouY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLmNvdW50KCJcMCIpID09IHRhcmZpbGUuUkVDT1JEU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb3JyZWN0IHplcm8gcGFkZGluZyIpCisKKyAgICBkZWYgdGVzdF9maWxlX21vZGUoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgaXNzdWUgIzg0NjQ6IENyZWF0ZSBmaWxlcyB3aXRoIGNvcnJlY3QKKyAgICAgICAgIyBwZXJtaXNzaW9ucy4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIgb3Igbm90IGhhc2F0dHIob3MsICJ1bWFzayIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModG1wbmFtZSk6CisgICAgICAgICAgICBvcy5yZW1vdmUodG1wbmFtZSkKKworICAgICAgICBvcmlnaW5hbF91bWFzayA9IG9zLnVtYXNrKDAwMjIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICAgICAgbW9kZSA9IG9zLnN0YXQodG1wbmFtZSkuc3RfbW9kZSAmIDA3NzcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZSwgMDY0NCwgIndyb25nIGZpbGUgcGVybWlzc2lvbnMiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW1hc2sob3JpZ2luYWxfdW1hc2spCisKKyAgICBkZWYgdGVzdF9pc3N1ZTEzNjM5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih1bmljb2RlKHRtcG5hbWUsIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSksIHNlbGYubW9kZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJfU3RyZWFtIGZhaWxlZCB0byB3cml0ZSB1bmljb2RlIGZpbGVuYW1lIikKKworCitjbGFzcyBHTlVXcml0ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhpcyB0ZXN0Y2FzZSBjaGVja3MgZm9yIGNvcnJlY3QgY3JlYXRpb24gb2YgR05VIExvbmduYW1lCisgICAgIyBhbmQgTG9uZ2xpbmsgZXh0ZW5kZWQgaGVhZGVycyAoY3AuIGJ1ZyAjODEyMzI1KS4KKworICAgIGRlZiBfbGVuZ3RoKHNlbGYsIHMpOgorICAgICAgICBibG9ja3MsIHJlbWFpbmRlciA9IGRpdm1vZChsZW4ocykgKyAxLCA1MTIpCisgICAgICAgIGlmIHJlbWFpbmRlcjoKKyAgICAgICAgICAgIGJsb2NrcyArPSAxCisgICAgICAgIHJldHVybiBibG9ja3MgKiA1MTIKKworICAgIGRlZiBfY2FsY19zaXplKHNlbGYsIG5hbWUsIGxpbms9Tm9uZSk6CisgICAgICAgICMgSW5pdGlhbCB0YXIgaGVhZGVyCisgICAgICAgIGNvdW50ID0gNTEyCisKKyAgICAgICAgaWYgbGVuKG5hbWUpID4gdGFyZmlsZS5MRU5HVEhfTkFNRToKKyAgICAgICAgICAgICMgR05VIGxvbmduYW1lIGV4dGVuZGVkIGhlYWRlciArIGxvbmduYW1lCisgICAgICAgICAgICBjb3VudCArPSA1MTIKKyAgICAgICAgICAgIGNvdW50ICs9IHNlbGYuX2xlbmd0aChuYW1lKQorICAgICAgICBpZiBsaW5rIGlzIG5vdCBOb25lIGFuZCBsZW4obGluaykgPiB0YXJmaWxlLkxFTkdUSF9MSU5LOgorICAgICAgICAgICAgIyBHTlUgbG9uZ2xpbmsgZXh0ZW5kZWQgaGVhZGVyICsgbG9uZ2xpbmsKKyAgICAgICAgICAgIGNvdW50ICs9IDUxMgorICAgICAgICAgICAgY291bnQgKz0gc2VsZi5fbGVuZ3RoKGxpbmspCisgICAgICAgIHJldHVybiBjb3VudAorCisgICAgZGVmIF90ZXN0KHNlbGYsIG5hbWUsIGxpbms9Tm9uZSk6CisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8obmFtZSkKKyAgICAgICAgaWYgbGluazoKKyAgICAgICAgICAgIHRhcmluZm8ubGlua25hbWUgPSBsaW5rCisgICAgICAgICAgICB0YXJpbmZvLnR5cGUgPSB0YXJmaWxlLkxOS1RZUEUKKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciKQorICAgICAgICB0YXIuZm9ybWF0ID0gdGFyZmlsZS5HTlVfRk9STUFUCisgICAgICAgIHRhci5hZGRmaWxlKHRhcmluZm8pCisKKyAgICAgICAgdjEgPSBzZWxmLl9jYWxjX3NpemUobmFtZSwgbGluaykKKyAgICAgICAgdjIgPSB0YXIub2Zmc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2MSA9PSB2MiwgIkdOVSBsb25nbmFtZS9sb25nbGluayBjcmVhdGlvbiBmYWlsZWQiKQorCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUpCisgICAgICAgIG1lbWJlciA9IHRhci5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobWVtYmVyLAorICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gcmVhZCBsb25nbmFtZSBtZW1iZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubmFtZSwgbWVtYmVyLm5hbWUsCisgICAgICAgICAgICAgICAgInVuYWJsZSB0byByZWFkIGxvbmduYW1lIG1lbWJlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5saW5rbmFtZSwgbWVtYmVyLmxpbmtuYW1lLAorICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gcmVhZCBsb25nbmFtZSBtZW1iZXIiKQorCisgICAgZGVmIHRlc3RfbG9uZ25hbWVfMTAyMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgoImxvbmduYW0vIiAqIDEyNykgKyAibG9uZ25hbSIpCisKKyAgICBkZWYgdGVzdF9sb25nbmFtZV8xMDI0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCgibG9uZ25hbS8iICogMTI3KSArICJsb25nbmFtZSIpCisKKyAgICBkZWYgdGVzdF9sb25nbmFtZV8xMDI1KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCgibG9uZ25hbS8iICogMTI3KSArICJsb25nbmFtZV8iKQorCisgICAgZGVmIHRlc3RfbG9uZ2xpbmtfMTAyMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgibmFtZSIsICgibG9uZ2xuay8iICogMTI3KSArICJsb25nbG5rIikKKworICAgIGRlZiB0ZXN0X2xvbmdsaW5rXzEwMjQoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIm5hbWUiLCAoImxvbmdsbmsvIiAqIDEyNykgKyAibG9uZ2xpbmsiKQorCisgICAgZGVmIHRlc3RfbG9uZ2xpbmtfMTAyNShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgibmFtZSIsICgibG9uZ2xuay8iICogMTI3KSArICJsb25nbGlua18iKQorCisgICAgZGVmIHRlc3RfbG9uZ25hbWVsaW5rXzEwMjMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoKCJsb25nbmFtLyIgKiAxMjcpICsgImxvbmduYW0iLAorICAgICAgICAgICAgICAgICAgICgibG9uZ2xuay8iICogMTI3KSArICJsb25nbG5rIikKKworICAgIGRlZiB0ZXN0X2xvbmduYW1lbGlua18xMDI0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCgibG9uZ25hbS8iICogMTI3KSArICJsb25nbmFtZSIsCisgICAgICAgICAgICAgICAgICAgKCJsb25nbG5rLyIgKiAxMjcpICsgImxvbmdsaW5rIikKKworICAgIGRlZiB0ZXN0X2xvbmduYW1lbGlua18xMDI1KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCgibG9uZ25hbS8iICogMTI3KSArICJsb25nbmFtZV8iLAorICAgICAgICAgICAgICAgICAgICgibG9uZ2xuay8iICogMTI3KSArICJsb25nbGlua18iKQorCisKK2NsYXNzIEhhcmRsaW5rVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHRoZSBjcmVhdGlvbiBvZiBMTktUWVBFIChoYXJkbGluaykgbWVtYmVycyBpbiBhbiBhcmNoaXZlLgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZvbyA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZm9vIikKKyAgICAgICAgc2VsZi5iYXIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImJhciIpCisKKyAgICAgICAgZm9iaiA9IG9wZW4oc2VsZi5mb28sICJ3YiIpCisgICAgICAgIGZvYmoud3JpdGUoImZvbyIpCisgICAgICAgIGZvYmouY2xvc2UoKQorCisgICAgICAgIG9zLmxpbmsoc2VsZi5mb28sIHNlbGYuYmFyKQorCisgICAgICAgIHNlbGYudGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IikKKyAgICAgICAgc2VsZi50YXIuYWRkKHNlbGYuZm9vKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRhci5jbG9zZSgpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmZvbykKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuYmFyKQorCisgICAgZGVmIHRlc3RfYWRkX3R3aWNlKHNlbGYpOgorICAgICAgICAjIFRoZSBzYW1lIG5hbWUgd2lsbCBiZSBhZGRlZCBhcyBhIFJFR1RZUEUgZXZlcnkKKyAgICAgICAgIyB0aW1lIHJlZ2FyZGxlc3Mgb2Ygc3RfbmxpbmsuCisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXR0YXJpbmZvKHNlbGYuZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby50eXBlID09IHRhcmZpbGUuUkVHVFlQRSwKKyAgICAgICAgICAgICAgICAiYWRkIGZpbGUgYXMgcmVndWxhciBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfYWRkX2hhcmRsaW5rKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0dGFyaW5mbyhzZWxmLmJhcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLkxOS1RZUEUsCisgICAgICAgICAgICAgICAgImFkZCBmaWxlIGFzIGhhcmRsaW5rIGZhaWxlZCIpCisKKyAgICBkZWYgdGVzdF9kZXJlZmVyZW5jZV9oYXJkbGluayhzZWxmKToKKyAgICAgICAgc2VsZi50YXIuZGVyZWZlcmVuY2UgPSBUcnVlCisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXR0YXJpbmZvKHNlbGYuYmFyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby50eXBlID09IHRhcmZpbGUuUkVHVFlQRSwKKyAgICAgICAgICAgICAgICAiZGVyZWZlcmVuY2luZyBoYXJkbGluayBmYWlsZWQiKQorCisKK2NsYXNzIFBheFdyaXRlVGVzdChHTlVXcml0ZVRlc3QpOgorCisgICAgZGVmIF90ZXN0KHNlbGYsIG5hbWUsIGxpbms9Tm9uZSk6CisgICAgICAgICMgU2VlIEdOVVdyaXRlVGVzdC4KKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbyhuYW1lKQorICAgICAgICBpZiBsaW5rOgorICAgICAgICAgICAgdGFyaW5mby5saW5rbmFtZSA9IGxpbmsKKyAgICAgICAgICAgIHRhcmluZm8udHlwZSA9IHRhcmZpbGUuTE5LVFlQRQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD10YXJmaWxlLlBBWF9GT1JNQVQpCisgICAgICAgIHRhci5hZGRmaWxlKHRhcmluZm8pCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUpCisgICAgICAgIGlmIGxpbms6CisgICAgICAgICAgICBsID0gdGFyLmdldG1lbWJlcnMoKVswXS5saW5rbmFtZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmsgPT0gbCwgIlBBWCBsb25nbGluayBjcmVhdGlvbiBmYWlsZWQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbiA9IHRhci5nZXRtZW1iZXJzKClbMF0ubmFtZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgPT0gbiwgIlBBWCBsb25nbmFtZSBjcmVhdGlvbiBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfcGF4X2dsb2JhbF9oZWFkZXIoc2VsZik6CisgICAgICAgIHBheF9oZWFkZXJzID0geworICAgICAgICAgICAgICAgIHUiZm9vIjogdSJiYXIiLAorICAgICAgICAgICAgICAgIHUidWlkIjogdSIwIiwKKyAgICAgICAgICAgICAgICB1Im10aW1lIjogdSIxLjIzIiwKKyAgICAgICAgICAgICAgICB1InRlc3QiOiB1IuT2/CIsCisgICAgICAgICAgICAgICAgdSLk9vwiOiB1InRlc3QifQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD10YXJmaWxlLlBBWF9GT1JNQVQsCisgICAgICAgICAgICAgICAgcGF4X2hlYWRlcnM9cGF4X2hlYWRlcnMpCisgICAgICAgIHRhci5hZGRmaWxlKHRhcmZpbGUuVGFySW5mbygidGVzdCIpKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgICMgVGVzdCBpZiB0aGUgZ2xvYmFsIGhlYWRlciB3YXMgd3JpdHRlbiBjb3JyZWN0bHkuCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIucGF4X2hlYWRlcnMsIHBheF9oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRtZW1iZXJzKClbMF0ucGF4X2hlYWRlcnMsIHBheF9oZWFkZXJzKQorCisgICAgICAgICMgVGVzdCBpZiBhbGwgdGhlIGZpZWxkcyBhcmUgdW5pY29kZS4KKyAgICAgICAgZm9yIGtleSwgdmFsIGluIHRhci5wYXhfaGVhZGVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGtleSkgaXMgdW5pY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHZhbCkgaXMgdW5pY29kZSkKKyAgICAgICAgICAgIGlmIGtleSBpbiB0YXJmaWxlLlBBWF9OVU1CRVJfRklFTERTOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdGFyZmlsZS5QQVhfTlVNQkVSX0ZJRUxEU1trZXldKHZhbCkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidW5hYmxlIHRvIGNvbnZlcnQgcGF4IGhlYWRlciBmaWVsZCIpCisKKyAgICBkZWYgdGVzdF9wYXhfZXh0ZW5kZWRfaGVhZGVyKHNlbGYpOgorICAgICAgICAjIFRoZSBmaWVsZHMgZnJvbSB0aGUgcGF4IGhlYWRlciBoYXZlIHByaW9yaXR5IG92ZXIgdGhlCisgICAgICAgICMgVGFySW5mby4KKyAgICAgICAgcGF4X2hlYWRlcnMgPSB7dSJwYXRoIjogdSJmb28iLCB1InVpZCI6IHUiMTIzIn0KKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciLCBmb3JtYXQ9dGFyZmlsZS5QQVhfRk9STUFULCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgdCA9IHRhcmZpbGUuVGFySW5mbygpCisgICAgICAgIHQubmFtZSA9IHUi5Pb8IiAgICAgIyBub24tQVNDSUkKKyAgICAgICAgdC51aWQgPSA4Kio4ICAgICAgICAjIHRvbyBsYXJnZQorICAgICAgICB0LnBheF9oZWFkZXJzID0gcGF4X2hlYWRlcnMKKyAgICAgICAgdGFyLmFkZGZpbGUodCkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgIHQgPSB0YXIuZ2V0bWVtYmVycygpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5wYXhfaGVhZGVycywgcGF4X2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5uYW1lLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnVpZCwgMTIzKQorCisKK2NsYXNzIFVzdGFyVW5pY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgQWxsICpVbmljb2RlVGVzdHMgRklYTUUKKworICAgIGZvcm1hdCA9IHRhcmZpbGUuVVNUQVJfRk9STUFUCisKKyAgICBkZWYgdGVzdF9pc284ODU5XzFfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfdW5pY29kZV9maWxlbmFtZSgiaXNvODg1OS0xIikKKworICAgIGRlZiB0ZXN0X3V0ZjdfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfdW5pY29kZV9maWxlbmFtZSgidXRmNyIpCisKKyAgICBkZWYgdGVzdF91dGY4X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3VuaWNvZGVfZmlsZW5hbWUoInV0ZjgiKQorCisgICAgZGVmIF90ZXN0X3VuaWNvZGVfZmlsZW5hbWUoc2VsZiwgZW5jb2RpbmcpOgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciLCBmb3JtYXQ9c2VsZi5mb3JtYXQsIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9InN0cmljdCIpCisgICAgICAgIG5hbWUgPSB1IuT2/CIKKyAgICAgICAgdGFyLmFkZGZpbGUodGFyZmlsZS5UYXJJbmZvKG5hbWUpKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBlbmNvZGluZz1lbmNvZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodGFyLmdldG5hbWVzKClbMF0pIGlzIG5vdCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRtZW1iZXJzKClbMF0ubmFtZSwgbmFtZS5lbmNvZGUoZW5jb2RpbmcpKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9maWxlbmFtZV9lcnJvcihzZWxmKToKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXNlbGYuZm9ybWF0LCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oKQorCisgICAgICAgIHRhcmluZm8ubmFtZSA9ICLk9vwiCisgICAgICAgIGlmIHNlbGYuZm9ybWF0ID09IHRhcmZpbGUuUEFYX0ZPUk1BVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdGFyLmFkZGZpbGUsIHRhcmluZm8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXIuYWRkZmlsZSh0YXJpbmZvKQorCisgICAgICAgIHRhcmluZm8ubmFtZSA9IHUi5Pb8IgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHRhci5hZGRmaWxlLCB0YXJpbmZvKQorCisgICAgICAgIHRhcmluZm8ubmFtZSA9ICJmb28iCisgICAgICAgIHRhcmluZm8udW5hbWUgPSB1IuT2/CIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0YXIuYWRkZmlsZSwgdGFyaW5mbykKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCAiciIsIGVuY29kaW5nPSJpc284ODU5LTEiLCBlcnJvcnM9InN0cmljdCIpCisgICAgICAgIGZvciB0IGluIHRhcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQubmFtZSkgaXMgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodC5saW5rbmFtZSkgaXMgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodC51bmFtZSkgaXMgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodC5nbmFtZSkgaXMgc3RyKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdW5hbWVfdW5pY29kZShzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gKHUi5Pb8IiwgIuT2/CIpOgorICAgICAgICAgICAgdCA9IHRhcmZpbGUuVGFySW5mbygiZm9vIikKKyAgICAgICAgICAgIHQudW5hbWUgPSBuYW1lCisgICAgICAgICAgICB0LmduYW1lID0gbmFtZQorCisgICAgICAgICAgICBmb2JqID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKCJmb28udGFyIiwgbW9kZT0idyIsIGZpbGVvYmo9Zm9iaiwgZm9ybWF0PXNlbGYuZm9ybWF0LCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgICAgIHRhci5hZGRmaWxlKHQpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICAgICAgZm9iai5zZWVrKDApCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbigiZm9vLnRhciIsIGZpbGVvYmo9Zm9iaiwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgICAgICB0ID0gdGFyLmdldG1lbWJlcigiZm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC51bmFtZSwgIuT2/CIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ25hbWUsICLk9vwiKQorCisKK2NsYXNzIEdOVVVuaWNvZGVUZXN0KFVzdGFyVW5pY29kZVRlc3QpOgorCisgICAgZm9ybWF0ID0gdGFyZmlsZS5HTlVfRk9STUFUCisKKworY2xhc3MgUGF4VW5pY29kZVRlc3QoVXN0YXJVbmljb2RlVGVzdCk6CisKKyAgICBmb3JtYXQgPSB0YXJmaWxlLlBBWF9GT1JNQVQKKworICAgIGRlZiBfY3JlYXRlX3VuaWNvZGVfbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXNlbGYuZm9ybWF0KQorICAgICAgICB0ID0gdGFyZmlsZS5UYXJJbmZvKCkKKyAgICAgICAgdC5wYXhfaGVhZGVyc1sicGF0aCJdID0gbmFtZQorICAgICAgICB0YXIuYWRkZmlsZSh0KQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZXJyb3JfaGFuZGxlcnMoc2VsZik6CisgICAgICAgICMgVGVzdCBpZiB0aGUgdW5pY29kZSBlcnJvciBoYW5kbGVycyB3b3JrIGNvcnJlY3RseSBmb3IgY2hhcmFjdGVycworICAgICAgICAjIHRoYXQgY2Fubm90IGJlIGV4cHJlc3NlZCBpbiBhIGdpdmVuIGVuY29kaW5nLgorICAgICAgICBzZWxmLl9jcmVhdGVfdW5pY29kZV9uYW1lKHUi5Pb8IikKKworICAgICAgICBmb3IgaGFuZGxlciwgbmFtZSBpbiAoKCJ1dGYtOCIsIHUi5Pb8Ii5lbmNvZGUoInV0ZjgiKSksCisgICAgICAgICAgICAgICAgICAgICgicmVwbGFjZSIsICI/Pz8iKSwgKCJpZ25vcmUiLCAiIikpOgorICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGZvcm1hdD1zZWxmLmZvcm1hdCwgZW5jb2Rpbmc9ImFzY2lpIiwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzPWhhbmRsZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRuYW1lcygpWzBdLCBuYW1lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdGFyZmlsZS5vcGVuLCB0bXBuYW1lLAorICAgICAgICAgICAgICAgIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0ic3RyaWN0IikKKworICAgIGRlZiB0ZXN0X2Vycm9yX2hhbmRsZXJfdXRmOChzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSBwYXRobmFtZSB0aGF0IGhhcyBvbmUgY29tcG9uZW50IHJlcHJlc2VudGFibGUgdXNpbmcKKyAgICAgICAgIyBpc284ODU5LTEgYW5kIHRoZSBvdGhlciBvbmx5IGluIGlzbzg4NTktMTUuCisgICAgICAgIHNlbGYuX2NyZWF0ZV91bmljb2RlX25hbWUodSLk9vwvpCIpCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGZvcm1hdD1zZWxmLmZvcm1hdCwgZW5jb2Rpbmc9Imlzbzg4NTktMSIsCisgICAgICAgICAgICAgICAgZXJyb3JzPSJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmdldG5hbWVzKClbMF0sICLk9vwvIiArIHUipCIuZW5jb2RlKCJ1dGY4IikpCisKKworY2xhc3MgQXBwZW5kVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IGFwcGVuZCBtb2RlIChjcC4gcGF0Y2ggIzE2NTI2ODEpLgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRhcm5hbWUgPSB0bXBuYW1lCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYudGFybmFtZSk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50YXJuYW1lKQorCisgICAgZGVmIF9hZGRfdGVzdGZpbGUoc2VsZiwgZmlsZW9iaj1Ob25lKToKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSwgImEiLCBmaWxlb2JqPWZpbGVvYmopCisgICAgICAgIHRhci5hZGRmaWxlKHRhcmZpbGUuVGFySW5mbygiYmFyIikpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICBkZWYgX2NyZWF0ZV90ZXN0dGFyKHNlbGYsIG1vZGU9Inc6Iik6CisgICAgICAgIHNyYyA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgdCA9IHNyYy5nZXRtZW1iZXIoInVzdGFyL3JlZ3R5cGUiKQorICAgICAgICB0Lm5hbWUgPSAiZm9vIgorICAgICAgICBmID0gc3JjLmV4dHJhY3RmaWxlKHQpCisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihzZWxmLnRhcm5hbWUsIG1vZGUpCisgICAgICAgIHRhci5hZGRmaWxlKHQsIGYpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgbmFtZXM9WyJiYXIiXSwgZmlsZW9iaj1Ob25lKToKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSwgZmlsZW9iaj1maWxlb2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRuYW1lcygpLCBuYW1lcykKKworICAgIGRlZiB0ZXN0X25vbl9leGlzdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fYWRkX3Rlc3RmaWxlKCkKKyAgICAgICAgc2VsZi5fdGVzdCgpCisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSwgInc6IikuY2xvc2UoKQorICAgICAgICBzZWxmLl9hZGRfdGVzdGZpbGUoKQorICAgICAgICBzZWxmLl90ZXN0KCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGVvYmooc2VsZik6CisgICAgICAgIGZvYmogPSBTdHJpbmdJTy5TdHJpbmdJTygiXDAiICogMTAyNCkKKyAgICAgICAgc2VsZi5fYWRkX3Rlc3RmaWxlKGZvYmopCisgICAgICAgIGZvYmouc2VlaygwKQorICAgICAgICBzZWxmLl90ZXN0KGZpbGVvYmo9Zm9iaikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmooc2VsZik6CisgICAgICAgIHNlbGYuX2NyZWF0ZV90ZXN0dGFyKCkKKyAgICAgICAgZGF0YSA9IG9wZW4oc2VsZi50YXJuYW1lKS5yZWFkKCkKKyAgICAgICAgZm9iaiA9IFN0cmluZ0lPLlN0cmluZ0lPKGRhdGEpCisgICAgICAgIHNlbGYuX2FkZF90ZXN0ZmlsZShmb2JqKQorICAgICAgICBmb2JqLnNlZWsoMCkKKyAgICAgICAgc2VsZi5fdGVzdChuYW1lcz1bImZvbyIsICJiYXIiXSwgZmlsZW9iaj1mb2JqKQorCisgICAgZGVmIHRlc3RfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2NyZWF0ZV90ZXN0dGFyKCkKKyAgICAgICAgc2VsZi5fYWRkX3Rlc3RmaWxlKCkKKyAgICAgICAgc2VsZi5fdGVzdChuYW1lcz1bImZvbyIsICJiYXIiXSkKKworICAgIGRlZiB0ZXN0X2FwcGVuZF9neihzZWxmKToKKyAgICAgICAgaWYgZ3ppcCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2NyZWF0ZV90ZXN0dGFyKCJ3Omd6IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdG1wbmFtZSwgImEiKQorCisgICAgZGVmIHRlc3RfYXBwZW5kX2J6MihzZWxmKToKKyAgICAgICAgaWYgYnoyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY3JlYXRlX3Rlc3R0YXIoInc6YnoyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdG1wbmFtZSwgImEiKQorCisgICAgIyBBcHBlbmQgbW9kZSBpcyBzdXBwb3NlZCB0byBmYWlsIGlmIHRoZSB0YXJmaWxlIHRvIGFwcGVuZCB0bworICAgICMgZG9lcyBub3QgZW5kIHdpdGggYSB6ZXJvIGJsb2NrLgorICAgIGRlZiBfdGVzdF9lcnJvcihzZWxmLCBkYXRhKToKKyAgICAgICAgb3BlbihzZWxmLnRhcm5hbWUsICJ3YiIpLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCBzZWxmLl9hZGRfdGVzdGZpbGUpCisKKyAgICBkZWYgdGVzdF9udWxsKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Vycm9yKCIiKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcigiXDAiICogMTMpCisKKyAgICBkZWYgdGVzdF9wcmVtYXR1cmVfZW9mKHNlbGYpOgorICAgICAgICBkYXRhID0gdGFyZmlsZS5UYXJJbmZvKCJmb28iKS50b2J1ZigpCisgICAgICAgIHNlbGYuX3Rlc3RfZXJyb3IoZGF0YSkKKworICAgIGRlZiB0ZXN0X3RyYWlsaW5nX2dhcmJhZ2Uoc2VsZik6CisgICAgICAgIGRhdGEgPSB0YXJmaWxlLlRhckluZm8oImZvbyIpLnRvYnVmKCkKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcihkYXRhICsgIlwwIiAqIDEzKQorCisgICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcigiYSIgKiA1MTIpCisKKworY2xhc3MgTGltaXRzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91c3Rhcl9saW1pdHMoc2VsZik6CisgICAgICAgICMgMTAwIGNoYXIgbmFtZQorICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCIwMTIzNDU2Nzg5IiAqIDEwKQorICAgICAgICB0YXJpbmZvLnRvYnVmKHRhcmZpbGUuVVNUQVJfRk9STUFUKQorCisgICAgICAgICMgMTAxIGNoYXIgbmFtZSB0aGF0IGNhbm5vdCBiZSBzdG9yZWQKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMDEyMzQ1Njc4OSIgKiAxMCArICIwIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFyaW5mby50b2J1ZiwgdGFyZmlsZS5VU1RBUl9GT1JNQVQpCisKKyAgICAgICAgIyAyNTYgY2hhciBuYW1lIHdpdGggYSBzbGFzaCBhdCBwb3MgMTU2CisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oIjEyMy8iICogNjIgKyAibG9uZ25hbWUiKQorICAgICAgICB0YXJpbmZvLnRvYnVmKHRhcmZpbGUuVVNUQVJfRk9STUFUKQorCisgICAgICAgICMgMjU2IGNoYXIgbmFtZSB0aGF0IGNhbm5vdCBiZSBzdG9yZWQKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMTIzNDU2Ny8iICogMzEgKyAibG9uZ25hbWUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YXJpbmZvLnRvYnVmLCB0YXJmaWxlLlVTVEFSX0ZPUk1BVCkKKworICAgICAgICAjIDUxMiBjaGFyIG5hbWUKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMTIzLyIgKiAxMjYgKyAibG9uZ25hbWUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YXJpbmZvLnRvYnVmLCB0YXJmaWxlLlVTVEFSX0ZPUk1BVCkKKworICAgICAgICAjIDUxMiBjaGFyIGxpbmtuYW1lCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oImxvbmdsaW5rIikKKyAgICAgICAgdGFyaW5mby5saW5rbmFtZSA9ICIxMjMvIiAqIDEyNiArICJsb25nbmFtZSIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFyaW5mby50b2J1ZiwgdGFyZmlsZS5VU1RBUl9GT1JNQVQpCisKKyAgICAgICAgIyB1aWQgPiA4IGRpZ2l0cworICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCJuYW1lIikKKyAgICAgICAgdGFyaW5mby51aWQgPSAwMTAwMDAwMDAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFyaW5mby50b2J1ZiwgdGFyZmlsZS5VU1RBUl9GT1JNQVQpCisKKyAgICBkZWYgdGVzdF9nbnVfbGltaXRzKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCIxMjMvIiAqIDEyNiArICJsb25nbmFtZSIpCisgICAgICAgIHRhcmluZm8udG9idWYodGFyZmlsZS5HTlVfRk9STUFUKQorCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oImxvbmdsaW5rIikKKyAgICAgICAgdGFyaW5mby5saW5rbmFtZSA9ICIxMjMvIiAqIDEyNiArICJsb25nbmFtZSIKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLkdOVV9GT1JNQVQpCisKKyAgICAgICAgIyB1aWQgPj0gMjU2ICoqIDcKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygibmFtZSIpCisgICAgICAgIHRhcmluZm8udWlkID0gMDQwMDAwMDAwMDAwMDAwMDAwMDBMCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhcmluZm8udG9idWYsIHRhcmZpbGUuR05VX0ZPUk1BVCkKKworICAgIGRlZiB0ZXN0X3BheF9saW1pdHMoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oIjEyMy8iICogMTI2ICsgImxvbmduYW1lIikKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLlBBWF9GT1JNQVQpCisKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygibG9uZ2xpbmsiKQorICAgICAgICB0YXJpbmZvLmxpbmtuYW1lID0gIjEyMy8iICogMTI2ICsgImxvbmduYW1lIgorICAgICAgICB0YXJpbmZvLnRvYnVmKHRhcmZpbGUuUEFYX0ZPUk1BVCkKKworICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCJuYW1lIikKKyAgICAgICAgdGFyaW5mby51aWQgPSAwNDAwMDAwMDAwMDAwMDAwMDAwMEwKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLlBBWF9GT1JNQVQpCisKKworY2xhc3MgQ29udGV4dE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhci5jbG9zZWQsICJjbG9zZWQgaW5zaWRlIHJ1bnRpbWUgY29udGV4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCisKKyAgICBkZWYgdGVzdF9jbG9zZWQoc2VsZik6CisgICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBJT0Vycm9yCisgICAgICAgICMgaWYgdGhlIFRhckZpbGUgb2JqZWN0IGlzIGFscmVhZHkgY2xvc2VkLgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgICAgIHdpdGggdGFyOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IGlmIHRoZSBJT0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGV4YzoKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBJT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIGV4Y2VwdGlvbiByYWlzZWQgaW4gY29udGV4dCBtYW5hZ2VyIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X25vX2VvZihzZWxmKToKKyAgICAgICAgIyBfX2V4aXRfXygpIG11c3Qgbm90IHdyaXRlIGVuZC1vZi1hcmNoaXZlIGJsb2NrcyBpZiBhbgorICAgICAgICAjIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZSh0bXBuYW1lKSwgMCwKKyAgICAgICAgICAgICAgICAiY29udGV4dCBtYW5hZ2VyIHdyb3RlIGFuIGVuZC1vZi1hcmNoaXZlIGJsb2NrIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2VvZihzZWxmKToKKyAgICAgICAgIyBfX2V4aXRfXygpIG11c3Qgd3JpdGUgZW5kLW9mLWFyY2hpdmUgYmxvY2tzLCBpLmUuIGNhbGwKKyAgICAgICAgIyBUYXJGaWxlLmNsb3NlKCkgaWYgdGhlcmUgd2FzIG5vIGVycm9yLgorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9zLnBhdGguZ2V0c2l6ZSh0bXBuYW1lKSwgMCwKKyAgICAgICAgICAgICAgICAiY29udGV4dCBtYW5hZ2VyIHdyb3RlIG5vIGVuZC1vZi1hcmNoaXZlIGJsb2NrIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmooc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IF9fZXhpdF9fKCkgZGlkIG5vdCBjbG9zZSB0aGUgZXh0ZXJuYWwgZmlsZQorICAgICAgICAjIG9iamVjdC4KKyAgICAgICAgZm9iaiA9IG9wZW4odG1wbmFtZSwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPSJ3IikgYXMgdGFyOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm9iai5jbG9zZWQsICJleHRlcm5hbCBmaWxlIG9iamVjdCB3YXMgY2xvc2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKKyAgICAgICAgZm9iai5jbG9zZSgpCisKKworY2xhc3MgTGlua0VtdWxhdGlvblRlc3QoUmVhZFRlc3QpOgorCisgICAgIyBUZXN0IGZvciBpc3N1ZSAjODc0MSByZWdyZXNzaW9uLiBPbiBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydAorICAgICMgc3ltYm9saWMgb3IgaGFyZCBsaW5rcyB0YXJmaWxlIHRyaWVzIHRvIGV4dHJhY3QgdGhlc2UgdHlwZXMgb2YgbWVtYmVycyBhcworICAgICMgdGhlIHJlZ3VsYXIgZmlsZXMgdGhleSBwb2ludCB0by4KKyAgICBkZWYgX3Rlc3RfbGlua19leHRyYWN0aW9uKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLnRhci5leHRyYWN0KG5hbWUsIFRFTVBESVIpCisgICAgICAgIGRhdGEgPSBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCBuYW1lKSwgInJiIikucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWQ1c3VtKGRhdGEpLCBtZDVfcmVndHlwZSkKKworICAgIGRlZiB0ZXN0X2hhcmRsaW5rX2V4dHJhY3Rpb24xKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2xpbmtfZXh0cmFjdGlvbigidXN0YXIvbG5rdHlwZSIpCisKKyAgICBkZWYgdGVzdF9oYXJkbGlua19leHRyYWN0aW9uMihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9saW5rX2V4dHJhY3Rpb24oIi4vdXN0YXIvbGlua3Rlc3QyL2xua3R5cGUiKQorCisgICAgZGVmIHRlc3Rfc3ltbGlua19leHRyYWN0aW9uMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9saW5rX2V4dHJhY3Rpb24oInVzdGFyL3N5bXR5cGUiKQorCisgICAgZGVmIHRlc3Rfc3ltbGlua19leHRyYWN0aW9uMihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9saW5rX2V4dHJhY3Rpb24oIi4vdXN0YXIvbGlua3Rlc3QyL3N5bXR5cGUiKQorCisKK2NsYXNzIEd6aXBNaXNjUmVhZFRlc3QoTWlzY1JlYWRUZXN0KToKKyAgICB0YXJuYW1lID0gZ3ppcG5hbWUKKyAgICBtb2RlID0gInI6Z3oiCitjbGFzcyBHemlwVXN0YXJSZWFkVGVzdChVc3RhclJlYWRUZXN0KToKKyAgICB0YXJuYW1lID0gZ3ppcG5hbWUKKyAgICBtb2RlID0gInI6Z3oiCitjbGFzcyBHemlwU3RyZWFtUmVhZFRlc3QoU3RyZWFtUmVhZFRlc3QpOgorICAgIHRhcm5hbWUgPSBnemlwbmFtZQorICAgIG1vZGUgPSAicnxneiIKK2NsYXNzIEd6aXBXcml0ZVRlc3QoV3JpdGVUZXN0KToKKyAgICBtb2RlID0gInc6Z3oiCitjbGFzcyBHemlwU3RyZWFtV3JpdGVUZXN0KFN0cmVhbVdyaXRlVGVzdCk6CisgICAgbW9kZSA9ICJ3fGd6IgorCisKK2NsYXNzIEJ6Mk1pc2NSZWFkVGVzdChNaXNjUmVhZFRlc3QpOgorICAgIHRhcm5hbWUgPSBiejJuYW1lCisgICAgbW9kZSA9ICJyOmJ6MiIKK2NsYXNzIEJ6MlVzdGFyUmVhZFRlc3QoVXN0YXJSZWFkVGVzdCk6CisgICAgdGFybmFtZSA9IGJ6Mm5hbWUKKyAgICBtb2RlID0gInI6YnoyIgorY2xhc3MgQnoyU3RyZWFtUmVhZFRlc3QoU3RyZWFtUmVhZFRlc3QpOgorICAgIHRhcm5hbWUgPSBiejJuYW1lCisgICAgbW9kZSA9ICJyfGJ6MiIKK2NsYXNzIEJ6MldyaXRlVGVzdChXcml0ZVRlc3QpOgorICAgIG1vZGUgPSAidzpiejIiCitjbGFzcyBCejJTdHJlYW1Xcml0ZVRlc3QoU3RyZWFtV3JpdGVUZXN0KToKKyAgICBtb2RlID0gInd8YnoyIgorCitjbGFzcyBCejJQYXJ0aWFsUmVhZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgSXNzdWU1MDY4OiBUaGUgX0JaMlByb3h5LnJlYWQoKSBtZXRob2QgbG9vcHMgZm9yZXZlcgorICAgICMgb24gYW4gZW1wdHkgb3IgcGFydGlhbCBiemlwcGVkIGZpbGUuCisKKyAgICBkZWYgX3Rlc3RfcGFydGlhbF9pbnB1dChzZWxmLCBtb2RlKToKKyAgICAgICAgY2xhc3MgTXlTdHJpbmdJTyhTdHJpbmdJTy5TdHJpbmdJTyk6CisgICAgICAgICAgICBoaXRfZW9mID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiByZWFkKHNlbGYsIG4pOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuaGl0X2VvZjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoImluZmluaXRlIGxvb3AgZGV0ZWN0ZWQgaW4gdGFyZmlsZS5vcGVuKCkiKQorICAgICAgICAgICAgICAgIHNlbGYuaGl0X2VvZiA9IHNlbGYucG9zID09IHNlbGYubGVuCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0lPLlN0cmluZ0lPLnJlYWQoc2VsZiwgbikKKyAgICAgICAgICAgIGRlZiBzZWVrKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBzZWxmLmhpdF9lb2YgPSBGYWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmdJTy5TdHJpbmdJTy5zZWVrKHNlbGYsICphcmdzKQorCisgICAgICAgIGRhdGEgPSBiejIuY29tcHJlc3ModGFyZmlsZS5UYXJJbmZvKCJmb28iKS50b2J1ZigpKQorICAgICAgICBmb3IgeCBpbiByYW5nZShsZW4oZGF0YSkgKyAxKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJmaWxlLm9wZW4oZmlsZW9iaj1NeVN0cmluZ0lPKGRhdGFbOnhdKSwgbW9kZT1tb2RlKQorICAgICAgICAgICAgZXhjZXB0IHRhcmZpbGUuUmVhZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MgIyB3ZSBoYXZlIG5vIGludGVyZXN0IGluIFJlYWRFcnJvcnMKKworICAgIGRlZiB0ZXN0X3BhcnRpYWxfaW5wdXQoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGFydGlhbF9pbnB1dCgiciIpCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsX2lucHV0X2J6MihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYXJ0aWFsX2lucHV0KCJyOmJ6MiIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIG9zLm1ha2VkaXJzKFRFTVBESVIpCisKKyAgICB0ZXN0cyA9IFsKKyAgICAgICAgVXN0YXJSZWFkVGVzdCwKKyAgICAgICAgTWlzY1JlYWRUZXN0LAorICAgICAgICBTdHJlYW1SZWFkVGVzdCwKKyAgICAgICAgRGV0ZWN0UmVhZFRlc3QsCisgICAgICAgIE1lbWJlclJlYWRUZXN0LAorICAgICAgICBHTlVSZWFkVGVzdCwKKyAgICAgICAgUGF4UmVhZFRlc3QsCisgICAgICAgIFdyaXRlVGVzdCwKKyAgICAgICAgU3RyZWFtV3JpdGVUZXN0LAorICAgICAgICBHTlVXcml0ZVRlc3QsCisgICAgICAgIFBheFdyaXRlVGVzdCwKKyAgICAgICAgVXN0YXJVbmljb2RlVGVzdCwKKyAgICAgICAgR05VVW5pY29kZVRlc3QsCisgICAgICAgIFBheFVuaWNvZGVUZXN0LAorICAgICAgICBBcHBlbmRUZXN0LAorICAgICAgICBMaW1pdHNUZXN0LAorICAgICAgICBDb250ZXh0TWFuYWdlclRlc3QsCisgICAgXQorCisgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKKyAgICAgICAgdGVzdHMuYXBwZW5kKEhhcmRsaW5rVGVzdCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cy5hcHBlbmQoTGlua0VtdWxhdGlvblRlc3QpCisKKyAgICBmb2JqID0gb3Blbih0YXJuYW1lLCAicmIiKQorICAgIGRhdGEgPSBmb2JqLnJlYWQoKQorICAgIGZvYmouY2xvc2UoKQorCisgICAgaWYgZ3ppcDoKKyAgICAgICAgIyBDcmVhdGUgdGVzdHRhci50YXIuZ3ogYW5kIGFkZCBnemlwLXNwZWNpZmljIHRlc3RzLgorICAgICAgICB0YXIgPSBnemlwLm9wZW4oZ3ppcG5hbWUsICJ3YiIpCisgICAgICAgIHRhci53cml0ZShkYXRhKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgIHRlc3RzICs9IFsKKyAgICAgICAgICAgIEd6aXBNaXNjUmVhZFRlc3QsCisgICAgICAgICAgICBHemlwVXN0YXJSZWFkVGVzdCwKKyAgICAgICAgICAgIEd6aXBTdHJlYW1SZWFkVGVzdCwKKyAgICAgICAgICAgIEd6aXBXcml0ZVRlc3QsCisgICAgICAgICAgICBHemlwU3RyZWFtV3JpdGVUZXN0LAorICAgICAgICBdCisKKyAgICBpZiBiejI6CisgICAgICAgICMgQ3JlYXRlIHRlc3R0YXIudGFyLmJ6MiBhbmQgYWRkIGJ6Mi1zcGVjaWZpYyB0ZXN0cy4KKyAgICAgICAgdGFyID0gYnoyLkJaMkZpbGUoYnoybmFtZSwgIndiIikKKyAgICAgICAgdGFyLndyaXRlKGRhdGEpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgdGVzdHMgKz0gWworICAgICAgICAgICAgQnoyTWlzY1JlYWRUZXN0LAorICAgICAgICAgICAgQnoyVXN0YXJSZWFkVGVzdCwKKyAgICAgICAgICAgIEJ6MlN0cmVhbVJlYWRUZXN0LAorICAgICAgICAgICAgQnoyV3JpdGVUZXN0LAorICAgICAgICAgICAgQnoyU3RyZWFtV3JpdGVUZXN0LAorICAgICAgICAgICAgQnoyUGFydGlhbFJlYWRUZXN0LAorICAgICAgICBdCisKKyAgICB0cnk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFTVBESVIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURU1QRElSKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90Y2wucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90Y2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlOWU2MgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RjbC5weQpAQCAtMCwwICsxLDE5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQorCisjIFNraXAgdGhpcyB0ZXN0IGlmIHRoZSBfdGtpbnRlciBtb2R1bGUgd2Fzbid0IGJ1aWx0LgorX3RraW50ZXIgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RraW50ZXInKQorCitmcm9tIFRraW50ZXIgaW1wb3J0IFRjbAorZnJvbSBfdGtpbnRlciBpbXBvcnQgVGNsRXJyb3IKKworCitjbGFzcyBUa2ludGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdEZsYXR0ZW5MZW4oc2VsZik6CisgICAgICAgICMgZmxhdHRlbig8b2JqZWN0IHdpdGggbm8gbGVuZ3RoPikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfdGtpbnRlci5fZmxhdHRlbiwgVHJ1ZSkKKworCitjbGFzcyBUY2xUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5pbnRlcnAgPSBUY2woKQorCisgICAgZGVmIHRlc3RFdmFsKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICB0Y2wuZXZhbCgnc2V0IGEgMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ3NldCBhJyksJzEnKQorCisgICAgZGVmIHRlc3RFdmFsRXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wuZXZhbCwnc2V0IGEnKQorCisgICAgZGVmIHRlc3RFdmFsRXhjZXB0aW9uMihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLmV2YWwsJ3RoaXMgaXMgd3JvbmcnKQorCisgICAgZGVmIHRlc3RDYWxsKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICB0Y2wuY2FsbCgnc2V0JywnYScsJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5jYWxsKCdzZXQnLCdhJyksJzEnKQorCisgICAgZGVmIHRlc3RDYWxsRXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wuY2FsbCwnc2V0JywnYScpCisKKyAgICBkZWYgdGVzdENhbGxFeGNlcHRpb24yKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wuY2FsbCwndGhpcycsJ2lzJywnd3JvbmcnKQorCisgICAgZGVmIHRlc3RTZXRWYXIoc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCisgICAgICAgIHRjbC5zZXR2YXIoJ2EnLCcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZXZhbCgnc2V0IGEnKSwnMScpCisKKyAgICBkZWYgdGVzdFNldFZhckFycmF5KHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICB0Y2wuc2V0dmFyKCdhKDEpJywnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ3NldCBhKDEpJyksJzEnKQorCisgICAgZGVmIHRlc3RHZXRWYXIoc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCisgICAgICAgIHRjbC5ldmFsKCdzZXQgYSAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0dmFyKCdhJyksJzEnKQorCisgICAgZGVmIHRlc3RHZXRWYXJBcnJheShzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgdGNsLmV2YWwoJ3NldCBhKDEpIDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5nZXR2YXIoJ2EoMSknKSwnMScpCisKKyAgICBkZWYgdGVzdEdldFZhckV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLmdldHZhciwnYScpCisKKyAgICBkZWYgdGVzdEdldFZhckFycmF5RXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wuZ2V0dmFyLCdhKDEpJykKKworICAgIGRlZiB0ZXN0VW5zZXRWYXIoc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCisgICAgICAgIHRjbC5zZXR2YXIoJ2EnLDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ2luZm8gZXhpc3RzIGEnKSwnMScpCisgICAgICAgIHRjbC51bnNldHZhcignYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ2luZm8gZXhpc3RzIGEnKSwnMCcpCisKKyAgICBkZWYgdGVzdFVuc2V0VmFyQXJyYXkoc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCisgICAgICAgIHRjbC5zZXR2YXIoJ2EoMSknLDEpCisgICAgICAgIHRjbC5zZXR2YXIoJ2EoMiknLDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ2luZm8gZXhpc3RzIGEoMSknKSwnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ2luZm8gZXhpc3RzIGEoMiknKSwnMScpCisgICAgICAgIHRjbC51bnNldHZhcignYSgxKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ2luZm8gZXhpc3RzIGEoMSknKSwnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ2luZm8gZXhpc3RzIGEoMiknKSwnMScpCisKKyAgICBkZWYgdGVzdFVuc2V0VmFyRXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wudW5zZXR2YXIsJ2EnKQorCisgICAgZGVmIHRlc3RFdmFsRmlsZShzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgZmlsZW5hbWUgPSAidGVzdEV2YWxGaWxlLnRjbCIKKyAgICAgICAgZmQgPSBvcGVuKGZpbGVuYW1lLCd3JykKKyAgICAgICAgc2NyaXB0ID0gIiIic2V0IGEgMQorICAgICAgICBzZXQgYiAyCisgICAgICAgIHNldCBjIFsgZXhwciAkYSArICRiIF0KKyAgICAgICAgIiIiCisgICAgICAgIGZkLndyaXRlKHNjcmlwdCkKKyAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICB0Y2wuZXZhbGZpbGUoZmlsZW5hbWUpCisgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZXZhbCgnc2V0IGEnKSwnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ3NldCBiJyksJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdzZXQgYycpLCczJykKKworICAgIGRlZiB0ZXN0RXZhbEZpbGVFeGNlcHRpb24oc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCisgICAgICAgIGZpbGVuYW1lID0gImRvZXNub3RleGlzdHMiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wuZXZhbGZpbGUsZmlsZW5hbWUpCisKKyAgICBkZWYgdGVzdFBhY2thZ2VSZXF1aXJlRXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wuZXZhbCwncGFja2FnZSByZXF1aXJlIERORScpCisKKyAgICBkZWYgdGVzdExvYWRXaXRoVU5DKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBCdWlsZCBhIFVOQyBwYXRoIGZyb20gdGhlIHJlZ3VsYXIgcGF0aC4KKyAgICAgICAgIyBTb21ldGhpbmcgbGlrZQorICAgICAgICAjICAgXFwlQ09NUFVURVJOQU1FJVxjJFxweXRob24yN1xweXRob24uZXhlCisKKyAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmFic3BhdGgoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIGlmIGZ1bGxuYW1lWzFdICE9ICc6JzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB1bmNfbmFtZSA9IHInXFwlc1wlcyRcJXMnICUgKG9zLmVudmlyb25bJ0NPTVBVVEVSTkFNRSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWVbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZVszOl0pCisKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudi51bnNldCgiVENMX0xJQlJBUlkiKQorICAgICAgICAgICAgY21kID0gJyVzIC1jICJpbXBvcnQgVGtpbnRlcjsgcHJpbnQgVGtpbnRlciInICUgKHVuY19uYW1lLCkKKworICAgICAgICAgICAgcCA9IFBvcGVuKGNtZCwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQorICAgICAgICAgICAgb3V0X2RhdGEsIGVycl9kYXRhID0gcC5jb21tdW5pY2F0ZSgpCisKKyAgICAgICAgICAgIG1zZyA9ICdcblxuJy5qb2luKFsnIlRraW50ZXIucHkiIG5vdCBpbiBvdXRwdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb21tYW5kOicsIGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3Rkb3V0OicsIG91dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRlcnI6JywgZXJyX2RhdGFdKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdUa2ludGVyLnB5Jywgb3V0X2RhdGEsIG1zZykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgMCwgJ05vbi16ZXJvIGV4aXQgY29kZScpCisKKworICAgIGRlZiB0ZXN0X3Bhc3NpbmdfdmFsdWVzKHNlbGYpOgorICAgICAgICBkZWYgcGFzc1ZhbHVlKHZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmludGVycC5jYWxsKCdzZXQnLCAnXycsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShUcnVlKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoRmFsc2UpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoJ3N0cmluZycpLCAnc3RyaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoJ3N0cmluZ1x1MjBhYycpLCAnc3RyaW5nXHUyMGFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUodSdzdHJpbmcnKSwgdSdzdHJpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZSh1J3N0cmluZ1x1MjBhYycpLCB1J3N0cmluZ1x1MjBhYycpCisgICAgICAgIGZvciBpIGluICgwLCAxLCAtMSwgaW50KDIqKjMxLTEpLCBpbnQoLTIqKjMxKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShpKSwgaSkKKyAgICAgICAgZm9yIGYgaW4gKDAuMCwgMS4wLCAtMS4wLCAxLy8zLCAxLzMuMCwKKyAgICAgICAgICAgICAgICAgIHN5cy5mbG9hdF9pbmZvLm1pbiwgc3lzLmZsb2F0X2luZm8ubWF4LAorICAgICAgICAgICAgICAgICAgLXN5cy5mbG9hdF9pbmZvLm1pbiwgLXN5cy5mbG9hdF9pbmZvLm1heCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShmKSwgZikKKyAgICAgICAgZm9yIGYgaW4gZmxvYXQoJ25hbicpLCBmbG9hdCgnaW5mJyksIC1mbG9hdCgnaW5mJyk6CisgICAgICAgICAgICBpZiBmICE9IGY6ICMgTmFOCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwYXNzVmFsdWUoZiksIGYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKGYpLCBmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZSgoMSwgJzInLCAoMy40LCkpKSwgKDEsICcyJywgKDMuNCwpKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUY2xUZXN0LCBUa2ludGVyVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZGI0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKQEAgLTAsMCArMSw0NTQgQEAKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0ZWxuZXRsaWIKK2ltcG9ydCB0aW1lCitpbXBvcnQgUXVldWUKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3RocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQorCitIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKK0VPRl9zaWdpbCA9IG9iamVjdCgpCisKK2RlZiBzZXJ2ZXIoZXZ0LCBzZXJ2LCBkYXRhcT1Ob25lKToKKyAgICAiIiIgT3BlbiBhIHRjcCBzZXJ2ZXIgaW4gdGhyZWUgc3RlcHMKKyAgICAgICAgMSkgc2V0IGV2dCB0byB0cnVlIHRvIGxldCB0aGUgcGFyZW50IGtub3cgd2UgYXJlIHJlYWR5CisgICAgICAgIDIpIFtvcHRpb25hbF0gaWYgaXMgbm90IEZhbHNlLCB3cml0ZSB0aGUgbGlzdCBvZiBkYXRhIGZyb20gZGF0YXEuZ2V0KCkKKyAgICAgICAgICAgdG8gdGhlIHNvY2tldC4KKyAgICAiIiIKKyAgICBzZXJ2Lmxpc3Rlbig1KQorICAgIGV2dC5zZXQoKQorICAgIHRyeToKKyAgICAgICAgY29ubiwgYWRkciA9IHNlcnYuYWNjZXB0KCkKKyAgICAgICAgaWYgZGF0YXE6CisgICAgICAgICAgICBkYXRhID0gJycKKyAgICAgICAgICAgIG5ld19kYXRhID0gZGF0YXEuZ2V0KFRydWUsIDAuNSkKKyAgICAgICAgICAgIGRhdGFxLnRhc2tfZG9uZSgpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBuZXdfZGF0YToKKyAgICAgICAgICAgICAgICBpZiBpdGVtID09IEVPRl9zaWdpbDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGl0ZW0pIGluIFtpbnQsIGZsb2F0XToKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChpdGVtKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gaXRlbQorICAgICAgICAgICAgICAgIHdyaXR0ZW4gPSBjb25uLnNlbmQoZGF0YSkKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVt3cml0dGVuOl0KKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgc2Vydi5jbG9zZSgpCisKK2NsYXNzIEdlbmVyYWxUZXN0cyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCg2MCkgICMgU2FmZXR5IG5ldC4gTG9vayBpc3N1ZSAxMTgxMgorICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9KHNlbGYuZXZ0LHNlbGYuc29jaykpCisgICAgICAgIHNlbGYudGhyZWFkLnNldERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKworICAgIGRlZiB0ZXN0QmFzaWMoc2VsZik6CisgICAgICAgICMgY29ubmVjdHMKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHRlbG5ldC5zb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dERlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMzApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVsbmV0LnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyAgICAgICAgdGVsbmV0LnNvY2suY2xvc2UoKQorCisgICAgZGVmIHRlc3RUaW1lb3V0Tm9uZShzZWxmKToKKyAgICAgICAgIyBOb25lLCBoYXZpbmcgb3RoZXIgZGVmYXVsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCwgdGltZW91dD1Ob25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZWxuZXQuc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgdGVsbmV0LnNvY2suY2xvc2UoKQorCisgICAgZGVmIHRlc3RUaW1lb3V0VmFsdWUoc2VsZik6CisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0LCB0aW1lb3V0PTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbG5ldC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIHRlbG5ldC5zb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dE9wZW4oc2VsZik6CisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoKQorICAgICAgICB0ZWxuZXQub3BlbihIT1NULCBzZWxmLnBvcnQsIHRpbWVvdXQ9MzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVsbmV0LnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyAgICAgICAgdGVsbmV0LnNvY2suY2xvc2UoKQorCitkZWYgX3JlYWRfc2V0VXAoc2VsZik6CisgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgIHNlbGYuZGF0YXEgPSBRdWV1ZS5RdWV1ZSgpCisgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDEwKQorICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQorICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPShzZWxmLmV2dCxzZWxmLnNvY2ssIHNlbGYuZGF0YXEpKQorICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKyAgICBzZWxmLmV2dC53YWl0KCkKKworZGVmIF9yZWFkX3RlYXJEb3duKHNlbGYpOgorICAgIHNlbGYudGhyZWFkLmpvaW4oKQorCitjbGFzcyBSZWFkVGVzdHMoVGVzdENhc2UpOgorICAgIHNldFVwID0gX3JlYWRfc2V0VXAKKyAgICB0ZWFyRG93biA9IF9yZWFkX3RlYXJEb3duCisKKyAgICAjIHVzZSBhIHNpbWlsYXIgYXBwcm9hY2ggdG8gdGVzdGluZyB0aW1lb3V0cyBhcyB0ZXN0X3RpbWVvdXQucHkKKyAgICAjIHRoZXNlIHdpbGwgbmV2ZXIgcGFzcyAxMDAlIGJ1dCBtYWtlIHRoZSBmdXp6IGJpZyBlbm91Z2ggdGhhdCBpdCBpcyByYXJlCisgICAgYmxvY2tfbG9uZyA9IDAuNgorICAgIGJsb2NrX3Nob3J0ID0gMC4zCisgICAgZGVmIHRlc3RfcmVhZF91bnRpbF9BKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZF91bnRpbChleHBlY3RlZCwgW3RpbWVvdXRdKQorICAgICAgICAgIFJlYWQgdW50aWwgdGhlIGV4cGVjdGVkIHN0cmluZyBoYXMgYmVlbiBzZWVuLCBvciBhIHRpbWVvdXQgaXMKKyAgICAgICAgICBoaXQgKGRlZmF1bHQgaXMgbm8gdGltZW91dCk7IG1heSBibG9jay4KKyAgICAgICAgIiIiCisgICAgICAgIHdhbnQgPSBbJ3gnICogMTAsICdtYXRjaCcsICd5JyAqIDEwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoJ21hdGNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnJy5qb2luKHdhbnRbOi0yXSkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3VudGlsX0Ioc2VsZik6CisgICAgICAgICMgdGVzdCB0aGUgdGltZW91dCAtIGl0IGRvZXMgTk9UIHJhaXNlIHNvY2tldC50aW1lb3V0CisgICAgICAgIHdhbnQgPSBbJ2hlbGxvJywgc2VsZi5ibG9ja19sb25nLCAnbm90IHNlZW4nLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoJ25vdCBzZWVuJywgc2VsZi5ibG9ja19zaG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB3YW50WzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbG5ldC5yZWFkX2FsbCgpLCAnbm90IHNlZW4nKQorCisgICAgZGVmIHRlc3RfcmVhZF91bnRpbF93aXRoX3BvbGwoc2VsZik6CisgICAgICAgICIiIlVzZSBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0ZWxuZXQucmVhZF91bnRpbCgpLiIiIgorICAgICAgICB3YW50ID0gWyd4JyAqIDEwLCAnbWF0Y2gnLCAneScgKiAxMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgaWYgbm90IHRlbG5ldC5faGFzX3BvbGw6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnc2VsZWN0LnBvbGwoKSBpcyByZXF1aXJlZCcpCisgICAgICAgIHRlbG5ldC5faGFzX3BvbGwgPSBUcnVlCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbCgnbWF0Y2gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICcnLmpvaW4od2FudFs6LTJdKSkKKworICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfd2l0aF9zZWxlY3Qoc2VsZik6CisgICAgICAgICIiIlVzZSBzZWxlY3Quc2VsZWN0KCkgdG8gaW1wbGVtZW50IHRlbG5ldC5yZWFkX3VudGlsKCkuIiIiCisgICAgICAgIHdhbnQgPSBbJ3gnICogMTAsICdtYXRjaCcsICd5JyAqIDEwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICB0ZWxuZXQuX2hhc19wb2xsID0gRmFsc2UKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKCdtYXRjaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbih3YW50WzotMl0pKQorCisgICAgZGVmIHRlc3RfcmVhZF9hbGxfQShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHJlYWRfYWxsKCkKKyAgICAgICAgICBSZWFkIGFsbCBkYXRhIHVudGlsIEVPRjsgbWF5IGJsb2NrLgorICAgICAgICAiIiIKKyAgICAgICAgd2FudCA9IFsneCcgKiA1MDAsICd5JyAqIDUwMCwgJ3onICogNTAwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfYWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnJy5qb2luKHdhbnRbOi0xXSkpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIF90ZXN0X2Jsb2NraW5nKHNlbGYsIGZ1bmMpOgorICAgICAgICBzZWxmLmRhdGFxLnB1dChbc2VsZi5ibG9ja19sb25nLCBFT0Zfc2lnaWxdKQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIGRhdGEgPSBmdW5jKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYmxvY2tfc2hvcnQgPD0gdGltZS50aW1lKCkgLSBzdGFydCkKKworICAgIGRlZiB0ZXN0X3JlYWRfYWxsX0Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYmxvY2tpbmcodGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpLnJlYWRfYWxsKQorCisgICAgZGVmIHRlc3RfcmVhZF9hbGxfQyhzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW0VPRl9zaWdpbF0pCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICB0ZWxuZXQucmVhZF9hbGwoKQorICAgICAgICB0ZWxuZXQucmVhZF9hbGwoKSAjIHNob3VsZG4ndCByYWlzZQorCisgICAgZGVmIHRlc3RfcmVhZF9zb21lX0Eoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICByZWFkX3NvbWUoKQorICAgICAgICAgIFJlYWQgYXQgbGVhc3Qgb25lIGJ5dGUgb3IgRU9GOyBtYXkgYmxvY2suCisgICAgICAgICIiIgorICAgICAgICAjIHRlc3QgJ2F0IGxlYXN0IG9uZSBieXRlJworICAgICAgICB3YW50ID0gWyd4JyAqIDUwMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX2FsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGF0YSkgPj0gMSkKKworICAgIGRlZiB0ZXN0X3JlYWRfc29tZV9CKHNlbGYpOgorICAgICAgICAjIHRlc3QgRU9GCisgICAgICAgIHNlbGYuZGF0YXEucHV0KFtFT0Zfc2lnaWxdKQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfc29tZSgpKQorCisgICAgZGVmIHRlc3RfcmVhZF9zb21lX0Moc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYmxvY2tpbmcodGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpLnJlYWRfc29tZSkKKworICAgIGRlZiBfdGVzdF9yZWFkX2FueV9lYWdlcl9BKHNlbGYsIGZ1bmNfbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICByZWFkX3ZlcnlfZWFnZXIoKQorICAgICAgICAgIFJlYWQgYWxsIGRhdGEgYXZhaWxhYmxlIGFscmVhZHkgcXVldWVkIG9yIG9uIHRoZSBzb2NrZXQsCisgICAgICAgICAgd2l0aG91dCBibG9ja2luZy4KKyAgICAgICAgIiIiCisgICAgICAgIHdhbnQgPSBbc2VsZi5ibG9ja19sb25nLCAneCcgKiAxMDAsICd5JyAqIDEwMCwgRU9GX3NpZ2lsXQorICAgICAgICBleHBlY3RzID0gd2FudFsxXSArIHdhbnRbMl0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHRlbG5ldCwgZnVuY19uYW1lKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhICs9IGZ1bmMoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RzLnN0YXJ0c3dpdGgoZGF0YSkpCisgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RzLCBkYXRhKQorCisgICAgZGVmIF90ZXN0X3JlYWRfYW55X2VhZ2VyX0Ioc2VsZiwgZnVuY19uYW1lKToKKyAgICAgICAgIyB0ZXN0IEVPRgorICAgICAgICBzZWxmLmRhdGFxLnB1dChbRU9GX3NpZ2lsXSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5ibG9ja19zaG9ydCkKKyAgICAgICAgZnVuYyA9IGdldGF0dHIodGVsbmV0LCBmdW5jX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmdW5jKQorCisgICAgIyByZWFkX2VhZ2VyIGFuZCByZWFkX3ZlcnlfZWFnZXIgbWFrZSB0aGUgc2FtZSBnYXVyYW50ZWVzCisgICAgIyAodGhleSBiZWhhdmUgZGlmZmVyZW50bHkgYnV0IHdlIG9ubHkgdGVzdCB0aGUgZ2F1cmFudGVlcykKKyAgICBkZWYgdGVzdF9yZWFkX3ZlcnlfZWFnZXJfQShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9lYWdlcl9BKCdyZWFkX3ZlcnlfZWFnZXInKQorICAgIGRlZiB0ZXN0X3JlYWRfdmVyeV9lYWdlcl9CKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRfYW55X2VhZ2VyX0IoJ3JlYWRfdmVyeV9lYWdlcicpCisgICAgZGVmIHRlc3RfcmVhZF9lYWdlcl9BKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRfYW55X2VhZ2VyX0EoJ3JlYWRfZWFnZXInKQorICAgIGRlZiB0ZXN0X3JlYWRfZWFnZXJfQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9lYWdlcl9CKCdyZWFkX2VhZ2VyJykKKyAgICAjIE5CIC0tIHdlIG5lZWQgdG8gdGVzdCB0aGUgSUFDIGJsb2NrIHdoaWNoIGlzIG1lbnRpb25lZCBpbiB0aGUgZG9jc3RyaW5nCisgICAgIyBidXQgbm90IGluIHRoZSBtb2R1bGUgZG9jcworCisgICAgZGVmIF90ZXN0X3JlYWRfYW55X2xhenlfQihzZWxmLCBmdW5jX25hbWUpOgorICAgICAgICBzZWxmLmRhdGFxLnB1dChbRU9GX3NpZ2lsXSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHRlbG5ldCwgZnVuY19uYW1lKQorICAgICAgICB0ZWxuZXQuZmlsbF9yYXdxKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGZ1bmMpCisKKyAgICBkZWYgdGVzdF9yZWFkX2xhenlfQShzZWxmKToKKyAgICAgICAgd2FudCA9IFsneCcgKiAxMDAsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5ibG9ja19zaG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfbGF6eSgpKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB0ZWxuZXQucmVhZF9sYXp5KCkKKyAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWRfZGF0YQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgIHRlbG5ldC5maWxsX3Jhd3EoKQorICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudFswXS5zdGFydHN3aXRoKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHdhbnRbMF0pCisKKyAgICBkZWYgdGVzdF9yZWFkX2xhenlfQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9sYXp5X0IoJ3JlYWRfbGF6eScpCisKKyAgICBkZWYgdGVzdF9yZWFkX3ZlcnlfbGF6eV9BKHNlbGYpOgorICAgICAgICB3YW50ID0gWyd4JyAqIDEwMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgdGltZS5zbGVlcChzZWxmLmJsb2NrX3Nob3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCB0ZWxuZXQucmVhZF92ZXJ5X2xhenkoKSkKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gdGVsbmV0LnJlYWRfdmVyeV9sYXp5KCkKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZGF0YSArPSByZWFkX2RhdGEKKyAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgdGVsbmV0LmZpbGxfcmF3cSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LmNvb2tlZHEpCisgICAgICAgICAgICAgICAgdGVsbmV0LnByb2Nlc3NfcmF3cSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudFswXS5zdGFydHN3aXRoKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHdhbnRbMF0pCisKKyAgICBkZWYgdGVzdF9yZWFkX3ZlcnlfbGF6eV9CKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRfYW55X2xhenlfQigncmVhZF92ZXJ5X2xhenknKQorCitjbGFzcyBuZWdvX2NvbGxlY3RvcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzYl9nZXR0ZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuc2VlbiA9ICcnCisgICAgICAgIHNlbGYuc2JfZ2V0dGVyID0gc2JfZ2V0dGVyCisgICAgICAgIHNlbGYuc2Jfc2VlbiA9ICcnCisKKyAgICBkZWYgZG9fbmVnbyhzZWxmLCBzb2NrLCBjbWQsIG9wdCk6CisgICAgICAgIHNlbGYuc2VlbiArPSBjbWQgKyBvcHQKKyAgICAgICAgaWYgY21kID09IHRsLlNFIGFuZCBzZWxmLnNiX2dldHRlcjoKKyAgICAgICAgICAgIHNiX2RhdGEgPSBzZWxmLnNiX2dldHRlcigpCisgICAgICAgICAgICBzZWxmLnNiX3NlZW4gKz0gc2JfZGF0YQorCit0bCA9IHRlbG5ldGxpYgorY2xhc3MgT3B0aW9uVGVzdHMoVGVzdENhc2UpOgorICAgIHNldFVwID0gX3JlYWRfc2V0VXAKKyAgICB0ZWFyRG93biA9IF9yZWFkX3RlYXJEb3duCisgICAgIyBSRkMgODU0IGNvbW1hbmRzCisgICAgY21kcyA9IFt0bC5BTywgdGwuQVlULCB0bC5CUkssIHRsLkVDLCB0bC5FTCwgdGwuR0EsIHRsLklQLCB0bC5OT1BdCisKKyAgICBkZWYgX3Rlc3RfY29tbWFuZChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiIGhlbHBlciBmb3IgdGVzdGluZyBJQUMgKyBjbWQgIiIiCisgICAgICAgIHNlbGYuc2V0VXAoKQorICAgICAgICBzZWxmLmRhdGFxLnB1dChkYXRhKQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgbmVnbyA9IG5lZ29fY29sbGVjdG9yKCkKKyAgICAgICAgdGVsbmV0LnNldF9vcHRpb25fbmVnb3RpYXRpb25fY2FsbGJhY2sobmVnby5kb19uZWdvKQorICAgICAgICB0eHQgPSB0ZWxuZXQucmVhZF9hbGwoKQorICAgICAgICBjbWQgPSBuZWdvLnNlZW4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihjbWQpID4gMCkgIyB3ZSBleHBlY3QgYXQgbGVhc3Qgb25lIGNvbW1hbmQKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjbWRbMF0sIHNlbGYuY21kcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWRbMV0sIHRsLk5PT1BUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbignJy5qb2luKGRhdGFbOi0xXSkpLCBsZW4odHh0ICsgY21kKSkKKyAgICAgICAgbmVnby5zYl9nZXR0ZXIgPSBOb25lICMgYnJlYWsgdGhlIG5lZ28gPT4gdGVsbmV0IGN5Y2xlCisgICAgICAgIHNlbGYudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfSUFDX2NvbW1hbmRzKHNlbGYpOgorICAgICAgICAjIHJlc2V0IG91ciBzZXR1cAorICAgICAgICBzZWxmLmRhdGFxLnB1dChbRU9GX3NpZ2lsXSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHNlbGYudGVhckRvd24oKQorCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5jbWRzOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9jb21tYW5kKFsneCcgKiAxMDAsIHRsLklBQyArIGNtZCwgJ3knKjEwMCwgRU9GX3NpZ2lsXSkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29tbWFuZChbJ3gnICogMTAsIHRsLklBQyArIGNtZCwgJ3knKjEwLCBFT0Zfc2lnaWxdKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9jb21tYW5kKFt0bC5JQUMgKyBjbWQsIEVPRl9zaWdpbF0pCisgICAgICAgICMgYWxsIGF0IG9uY2UKKyAgICAgICAgc2VsZi5fdGVzdF9jb21tYW5kKFt0bC5JQUMgKyBjbWQgZm9yIChjbWQpIGluIHNlbGYuY21kc10gKyBbRU9GX3NpZ2lsXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfc2JfZGF0YSgpKQorCisgICAgZGVmIHRlc3RfU0JfY29tbWFuZHMoc2VsZik6CisgICAgICAgICMgUkZDIDg1NSwgc3VibmVnb3RpYXRpb25zIHBvcnRpb24KKyAgICAgICAgc2VuZCA9IFt0bC5JQUMgKyB0bC5TQiArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIHRsLklBQyArIHRsLlNCICsgdGwuSUFDICsgdGwuSUFDICsgdGwuSUFDICsgdGwuU0UsCisgICAgICAgICAgICAgICAgdGwuSUFDICsgdGwuU0IgKyB0bC5JQUMgKyB0bC5JQUMgKyAnYWEnICsgdGwuSUFDICsgdGwuU0UsCisgICAgICAgICAgICAgICAgdGwuSUFDICsgdGwuU0IgKyAnYmInICsgdGwuSUFDICsgdGwuSUFDICsgdGwuSUFDICsgdGwuU0UsCisgICAgICAgICAgICAgICAgdGwuSUFDICsgdGwuU0IgKyAnY2MnICsgdGwuSUFDICsgdGwuSUFDICsgJ2RkJyArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIEVPRl9zaWdpbCwKKyAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoc2VuZCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIG5lZ28gPSBuZWdvX2NvbGxlY3Rvcih0ZWxuZXQucmVhZF9zYl9kYXRhKQorICAgICAgICB0ZWxuZXQuc2V0X29wdGlvbl9uZWdvdGlhdGlvbl9jYWxsYmFjayhuZWdvLmRvX25lZ28pCisgICAgICAgIHR4dCA9IHRlbG5ldC5yZWFkX2FsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LCAnJykKKyAgICAgICAgd2FudF9zYl9kYXRhID0gdGwuSUFDICsgdGwuSUFDICsgJ2FhYmInICsgdGwuSUFDICsgJ2NjJyArIHRsLklBQyArICdkZCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZWdvLnNiX3NlZW4sIHdhbnRfc2JfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfc2JfZGF0YSgpKQorICAgICAgICBuZWdvLnNiX2dldHRlciA9IE5vbmUgIyBicmVhayB0aGUgbmVnbyA9PiB0ZWxuZXQgY3ljbGUKKworCitjbGFzcyBFeHBlY3RUZXN0cyhUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuZGF0YXEgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMTApCisgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQorICAgICAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz0oc2VsZi5ldnQsc2VsZi5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhcSkpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorCisgICAgIyB1c2UgYSBzaW1pbGFyIGFwcHJvYWNoIHRvIHRlc3RpbmcgdGltZW91dHMgYXMgdGVzdF90aW1lb3V0LnB5CisgICAgIyB0aGVzZSB3aWxsIG5ldmVyIHBhc3MgMTAwJSBidXQgbWFrZSB0aGUgZnV6eiBiaWcgZW5vdWdoIHRoYXQgaXQgaXMgcmFyZQorICAgIGJsb2NrX2xvbmcgPSAwLjYKKyAgICBibG9ja19zaG9ydCA9IDAuMworICAgIGRlZiB0ZXN0X2V4cGVjdF9BKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgZXhwZWN0KGV4cGVjdGVkLCBbdGltZW91dF0pCisgICAgICAgICAgUmVhZCB1bnRpbCB0aGUgZXhwZWN0ZWQgc3RyaW5nIGhhcyBiZWVuIHNlZW4sIG9yIGEgdGltZW91dCBpcworICAgICAgICAgIGhpdCAoZGVmYXVsdCBpcyBubyB0aW1lb3V0KTsgbWF5IGJsb2NrLgorICAgICAgICAiIiIKKyAgICAgICAgd2FudCA9IFsneCcgKiAxMCwgJ21hdGNoJywgJ3knICogMTAsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFsnbWF0Y2gnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnJy5qb2luKHdhbnRbOi0yXSkpCisKKyAgICBkZWYgdGVzdF9leHBlY3RfQihzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoZSB0aW1lb3V0IC0gaXQgZG9lcyBOT1QgcmFpc2Ugc29ja2V0LnRpbWVvdXQKKyAgICAgICAgd2FudCA9IFsnaGVsbG8nLCBzZWxmLmJsb2NrX2xvbmcsICdub3Qgc2VlbicsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFsnbm90IHNlZW4nXSwgc2VsZi5ibG9ja19zaG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB3YW50WzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbG5ldC5yZWFkX2FsbCgpLCAnbm90IHNlZW4nKQorCisgICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfcG9sbChzZWxmKToKKyAgICAgICAgIiIiVXNlIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRlbG5ldC5leHBlY3QoKS4iIiIKKyAgICAgICAgd2FudCA9IFsneCcgKiAxMCwgJ21hdGNoJywgJ3knICogMTAsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIGlmIG5vdCB0ZWxuZXQuX2hhc19wb2xsOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NlbGVjdC5wb2xsKCkgaXMgcmVxdWlyZWQnKQorICAgICAgICB0ZWxuZXQuX2hhc19wb2xsID0gVHJ1ZQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICAoXyxfLGRhdGEpID0gdGVsbmV0LmV4cGVjdChbJ21hdGNoJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbih3YW50WzotMl0pKQorCisgICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfc2VsZWN0KHNlbGYpOgorICAgICAgICAiIiJVc2Ugc2VsZWN0LnNlbGVjdCgpIHRvIGltcGxlbWVudCB0ZWxuZXQuZXhwZWN0KCkuIiIiCisgICAgICAgIHdhbnQgPSBbJ3gnICogMTAsICdtYXRjaCcsICd5JyAqIDEwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICB0ZWxuZXQuX2hhc19wb2xsID0gRmFsc2UKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoWydtYXRjaCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICcnLmpvaW4od2FudFs6LTJdKSkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChHZW5lcmFsVGVzdHMsIFJlYWRUZXN0cywgT3B0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBlY3RUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQyM2FkCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKQEAgLTAsMCArMSw5NjUgQEAKKyMgdGVtcGZpbGUucHkgdW5pdCB0ZXN0cy4KK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGVycm5vCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQgd2FybmluZ3MKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9UnVudGltZVdhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSJta3RlbXAiLCBtb2R1bGU9X19uYW1lX18pCisKK2lmIGhhc2F0dHIob3MsICdzdGF0Jyk6CisgICAgaW1wb3J0IHN0YXQKKyAgICBoYXNfc3RhdCA9IDEKK2Vsc2U6CisgICAgaGFzX3N0YXQgPSAwCisKK2hhc190ZXh0bW9kZSA9ICh0ZW1wZmlsZS5fdGV4dF9vcGVuZmxhZ3MgIT0gdGVtcGZpbGUuX2Jpbl9vcGVuZmxhZ3MpCitoYXNfc3Bhd25sID0gaGFzYXR0cihvcywgJ3NwYXdubCcpCisKKyMgVEVTVF9GSUxFUyBtYXkgbmVlZCB0byBiZSB0d2Vha2VkIGZvciBzeXN0ZW1zIGRlcGVuZGluZyBvbiB0aGUgbWF4aW11bQorIyBudW1iZXIgb2YgZmlsZXMgdGhhdCBjYW4gYmUgb3BlbmVkIGF0IG9uZSB0aW1lIChzZWUgdWxpbWl0IC1uKQoraWYgc3lzLnBsYXRmb3JtIGluICgnb3BlbmJzZDMnLCAnb3BlbmJzZDQnKToKKyAgICBURVNUX0ZJTEVTID0gNDgKK2Vsc2U6CisgICAgVEVTVF9GSUxFUyA9IDEwMAorCisjIFRoaXMgaXMgb3JnYW5pemVkIGFzIG9uZSB0ZXN0IGZvciBlYWNoIGNodW5rIG9mIGNvZGUgaW4gdGVtcGZpbGUucHksCisjIGluIG9yZGVyIG9mIHRoZWlyIGFwcGVhcmFuY2UgaW4gdGhlIGZpbGUuICBUZXN0aW5nIHdoaWNoIHJlcXVpcmVzCisjIHRocmVhZHMgaXMgbm90IGRvbmUgaGVyZS4KKworIyBDb21tb24gZnVuY3Rpb25hbGl0eS4KK2NsYXNzIFRDKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHN0cl9jaGVjayA9IHJlLmNvbXBpbGUociJbYS16QS1aMC05Xy1dezZ9JCIpCisKKyAgICBkZWYgZmFpbE9uRXhjZXB0aW9uKHNlbGYsIHdoYXQsIGVpPU5vbmUpOgorICAgICAgICBpZiBlaSBpcyBOb25lOgorICAgICAgICAgICAgZWkgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBzZWxmLmZhaWwoIiVzIHJhaXNlZCAlczogJXMiICUgKHdoYXQsIGVpWzBdLCBlaVsxXSkpCisKKyAgICBkZWYgbmFtZUNoZWNrKHNlbGYsIG5hbWUsIGRpciwgcHJlLCBzdWYpOgorICAgICAgICAobmRpciwgbmJhc2UpID0gb3MucGF0aC5zcGxpdChuYW1lKQorICAgICAgICBucHJlICA9IG5iYXNlWzpsZW4ocHJlKV0KKyAgICAgICAgbnN1ZiAgPSBuYmFzZVtsZW4obmJhc2UpLWxlbihzdWYpOl0KKworICAgICAgICAjIGNoZWNrIGZvciBlcXVhbGl0eSBvZiB0aGUgYWJzb2x1dGUgcGF0aHMhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5hYnNwYXRoKG5kaXIpLCBvcy5wYXRoLmFic3BhdGgoZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSAnJXMnIG5vdCBpbiBkaXJlY3RvcnkgJyVzJyIgJSAobmFtZSwgZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucHJlLCBwcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUgJyVzJyBkb2VzIG5vdCBiZWdpbiB3aXRoICclcyciICUgKG5iYXNlLCBwcmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zdWYsIHN1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICclcyciICUgKG5iYXNlLCBzdWYpKQorCisgICAgICAgIG5iYXNlID0gbmJhc2VbbGVuKHByZSk6bGVuKG5iYXNlKS1sZW4oc3VmKV0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3RyX2NoZWNrLm1hdGNoKG5iYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICJyYW5kb20gc3RyaW5nICclcycgZG9lcyBub3QgbWF0Y2ggL15bYS16QS1aMC05Xy1dezZ9JC8iCisgICAgICAgICAgICAgICAgICAgICAlIG5iYXNlKQorCit0ZXN0X2NsYXNzZXMgPSBbXQorCitjbGFzcyB0ZXN0X2V4cG9ydHMoVEMpOgorICAgIGRlZiB0ZXN0X2V4cG9ydHMoc2VsZik6CisgICAgICAgICMgVGhlcmUgYXJlIG5vIHN1cnByaXNpbmcgc3ltYm9scyBpbiB0aGUgdGVtcGZpbGUgbW9kdWxlCisgICAgICAgIGRpY3QgPSB0ZW1wZmlsZS5fX2RpY3RfXworCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgIk5hbWVkVGVtcG9yYXJ5RmlsZSIgOiAxLAorICAgICAgICAgICAgIlRlbXBvcmFyeUZpbGUiIDogMSwKKyAgICAgICAgICAgICJta3N0ZW1wIiA6IDEsCisgICAgICAgICAgICAibWtkdGVtcCIgOiAxLAorICAgICAgICAgICAgIm1rdGVtcCIgOiAxLAorICAgICAgICAgICAgIlRNUF9NQVgiIDogMSwKKyAgICAgICAgICAgICJnZXR0ZW1wcHJlZml4IiA6IDEsCisgICAgICAgICAgICAiZ2V0dGVtcGRpciIgOiAxLAorICAgICAgICAgICAgInRlbXBkaXIiIDogMSwKKyAgICAgICAgICAgICJ0ZW1wbGF0ZSIgOiAxLAorICAgICAgICAgICAgIlNwb29sZWRUZW1wb3JhcnlGaWxlIiA6IDEKKyAgICAgICAgfQorCisgICAgICAgIHVuZXhwID0gW10KKyAgICAgICAgZm9yIGtleSBpbiBkaWN0OgorICAgICAgICAgICAgaWYga2V5WzBdICE9ICdfJyBhbmQga2V5IG5vdCBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICB1bmV4cC5hcHBlbmQoa2V5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHVuZXhwKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQga2V5czogJXMiICUgdW5leHApCisKK3Rlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9leHBvcnRzKQorCisKK2NsYXNzIHRlc3RfX1JhbmRvbU5hbWVTZXF1ZW5jZShUQyk6CisgICAgIiIiVGVzdCB0aGUgaW50ZXJuYWwgaXRlcmF0b3Igb2JqZWN0IF9SYW5kb21OYW1lU2VxdWVuY2UuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuciA9IHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X3NpeF9jaGFyX3N0cihzZWxmKToKKyAgICAgICAgIyBfUmFuZG9tTmFtZVNlcXVlbmNlIHJldHVybnMgYSBzaXgtY2hhcmFjdGVyIHN0cmluZworICAgICAgICBzID0gc2VsZi5yLm5leHQoKQorICAgICAgICBzZWxmLm5hbWVDaGVjayhzLCAnJywgJycsICcnKQorCisgICAgZGVmIHRlc3RfbWFueShzZWxmKToKKyAgICAgICAgIyBfUmFuZG9tTmFtZVNlcXVlbmNlIHJldHVybnMgbm8gZHVwbGljYXRlIHN0cmluZ3MgKHN0b2NoYXN0aWMpCisKKyAgICAgICAgZGljdCA9IHt9CisgICAgICAgIHIgPSBzZWxmLnIKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKFRFU1RfRklMRVMpOgorICAgICAgICAgICAgcyA9IHIubmV4dCgpCisgICAgICAgICAgICBzZWxmLm5hbWVDaGVjayhzLCAnJywgJycsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzLCBkaWN0KQorICAgICAgICAgICAgZGljdFtzXSA9IDEKKworICAgIGRlZiB0ZXN0X3N1cHBvcnRzX2l0ZXIoc2VsZik6CisgICAgICAgICMgX1JhbmRvbU5hbWVTZXF1ZW5jZSBzdXBwb3J0cyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wKKworICAgICAgICBpID0gMAorICAgICAgICByID0gc2VsZi5yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBzIGluIHI6CisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgaWYgaSA9PSAyMDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oIml0ZXJhdGlvbiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLAorICAgICAgICAib3MuZm9yayBpcyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2F3YXJlbmVzcyhzZWxmKToKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgcmFuZG9tIHNvdXJjZSBkaWZmZXJzIGJldHdlZW4KKyAgICAgICAgIyBjaGlsZCBhbmQgcGFyZW50LgorICAgICAgICByZWFkX2ZkLCB3cml0ZV9mZCA9IG9zLnBpcGUoKQorICAgICAgICBwaWQgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgbm90IHBpZDoKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShyZWFkX2ZkKQorICAgICAgICAgICAgICAgIG9zLndyaXRlKHdyaXRlX2ZkLCBuZXh0KHNlbGYucikuZW5jb2RlKCJhc2NpaSIpKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHdyaXRlX2ZkKQorICAgICAgICAgICAgICAgICMgYnlwYXNzIHRoZSBub3JtYWwgZXhpdCBoYW5kbGVycy0gbGVhdmUgdGhvc2UgdG8KKyAgICAgICAgICAgICAgICAjIHRoZSBwYXJlbnQuCisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKyAgICAgICAgICAgIHBhcmVudF92YWx1ZSA9IG5leHQoc2VsZi5yKQorICAgICAgICAgICAgY2hpbGRfdmFsdWUgPSBvcy5yZWFkKHJlYWRfZmQsIGxlbihwYXJlbnRfdmFsdWUpKS5kZWNvZGUoImFzY2lpIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHBpZDoKKyAgICAgICAgICAgICAgICAjIGJlc3QgZWZmb3J0IHRvIGVuc3VyZSB0aGUgcHJvY2VzcyBjYW4ndCBibGVlZCBvdXQKKyAgICAgICAgICAgICAgICAjIHZpYSBhbnkgYnVncyBhYm92ZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdLSUxMKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBvcy5jbG9zZShyZWFkX2ZkKQorICAgICAgICAgICAgb3MuY2xvc2Uod3JpdGVfZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY2hpbGRfdmFsdWUsIHBhcmVudF92YWx1ZSkKKworCit0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfX1JhbmRvbU5hbWVTZXF1ZW5jZSkKKworCitjbGFzcyB0ZXN0X19jYW5kaWRhdGVfdGVtcGRpcl9saXN0KFRDKToKKyAgICAiIiJUZXN0IHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBfY2FuZGlkYXRlX3RlbXBkaXJfbGlzdC4iIiIKKworICAgIGRlZiB0ZXN0X25vbmVtcHR5X2xpc3Qoc2VsZik6CisgICAgICAgICMgX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QgcmV0dXJucyBhIG5vbmVtcHR5IGxpc3Qgb2Ygc3RyaW5ncworCisgICAgICAgIGNhbmQgPSB0ZW1wZmlsZS5fY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oY2FuZCkgPT0gMCkKKyAgICAgICAgZm9yIGMgaW4gY2FuZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCBiYXNlc3RyaW5nKQorCisgICAgZGVmIHRlc3Rfd2FudGVkX2RpcnMoc2VsZik6CisgICAgICAgICMgX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRpcmVjdG9yaWVzCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGludGVyZXN0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgYWxsIHNldC4KKyAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBmb3IgZW52bmFtZSBpbiAnVE1QRElSJywgJ1RFTVAnLCAnVE1QJzoKKyAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0ZW52KGVudm5hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IGRpcm5hbWU6CisgICAgICAgICAgICAgICAgICAgIGVudltlbnZuYW1lXSA9IG9zLnBhdGguYWJzcGF0aChlbnZuYW1lKQorCisgICAgICAgICAgICBjYW5kID0gdGVtcGZpbGUuX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QoKQorCisgICAgICAgICAgICBmb3IgZW52bmFtZSBpbiAnVE1QRElSJywgJ1RFTVAnLCAnVE1QJzoKKyAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0ZW52KGVudm5hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IGRpcm5hbWU6IHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRpcm5hbWUsIGNhbmQpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIG9zLmVycm9yKToKKyAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuY3VyZGlyCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlybmFtZSwgY2FuZCkKKworICAgICAgICAgICAgIyBOb3QgcHJhY3RpY2FsIHRvIHRyeSB0byB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mIE9TLXNwZWNpZmljCisgICAgICAgICAgICAjIHBhdGhzIGluIHRoaXMgbGlzdC4KKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X19jYW5kaWRhdGVfdGVtcGRpcl9saXN0KQorCisjIFdlIHRlc3QgX2dldF9kZWZhdWx0X3RlbXBkaXIgc29tZSBtb3JlIGJ5IHRlc3RpbmcgZ2V0dGVtcGRpci4KKworY2xhc3MgVGVzdEdldERlZmF1bHRUZW1wZGlyKFRDKToKKyAgICAiIiJUZXN0IF9nZXRfZGVmYXVsdF90ZW1wZGlyKCkuIiIiCisKKyAgICBkZWYgdGVzdF9ub19maWxlc19sZWZ0X2JlaGluZChzZWxmKToKKyAgICAgICAgIyB1c2UgYSBwcml2YXRlIGVtcHR5IGRpcmVjdG9yeQorICAgICAgICBvdXJfdGVtcF9kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBmb3JjZSBfZ2V0X2RlZmF1bHRfdGVtcGRpcigpIHRvIGNvbnNpZGVyIG91ciBlbXB0eSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGRlZiBvdXJfY2FuZGlkYXRlX2xpc3QoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gW291cl90ZW1wX2RpcmVjdG9yeV0KKworICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cih0ZW1wZmlsZSwgIl9jYW5kaWRhdGVfdGVtcGRpcl9saXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3VyX2NhbmRpZGF0ZV9saXN0KToKKyAgICAgICAgICAgICAgICAjIHZlcmlmeSBvdXIgZGlyZWN0b3J5IGlzIGVtcHR5IGFmdGVyIF9nZXRfZGVmYXVsdF90ZW1wZGlyKCkKKyAgICAgICAgICAgICAgICB0ZW1wZmlsZS5fZ2V0X2RlZmF1bHRfdGVtcGRpcigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5saXN0ZGlyKG91cl90ZW1wX2RpcmVjdG9yeSksIFtdKQorCisgICAgICAgICAgICAgICAgZGVmIHJhaXNlX09TRXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigtMSkKKworICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoaW8sICJvcGVuIiwgcmFpc2VfT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICMgdGVzdCBhZ2FpbiB3aXRoIGZhaWxpbmcgaW8ub3BlbigpCisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZmlsZS5fZ2V0X2RlZmF1bHRfdGVtcGRpcigpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubGlzdGRpcihvdXJfdGVtcF9kaXJlY3RvcnkpLCBbXSkKKworICAgICAgICAgICAgICAgIG9wZW4gPSBpby5vcGVuCisgICAgICAgICAgICAgICAgZGVmIGJhZF93cml0ZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICAgICAgZnAud3JpdGUgPSByYWlzZV9PU0Vycm9yCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmcAorCisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihpbywgIm9wZW4iLCBiYWRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IGFnYWluIHdpdGggZmFpbGluZyB3cml0ZSgpCisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZmlsZS5fZ2V0X2RlZmF1bHRfdGVtcGRpcigpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubGlzdGRpcihvdXJfdGVtcF9kaXJlY3RvcnkpLCBbXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3VyX3RlbXBfZGlyZWN0b3J5KQorCit0ZXN0X2NsYXNzZXMuYXBwZW5kKFRlc3RHZXREZWZhdWx0VGVtcGRpcikKKworCitjbGFzcyB0ZXN0X19nZXRfY2FuZGlkYXRlX25hbWVzKFRDKToKKyAgICAiIiJUZXN0IHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBfZ2V0X2NhbmRpZGF0ZV9uYW1lcy4iIiIKKworICAgIGRlZiB0ZXN0X3JldHZhbChzZWxmKToKKyAgICAgICAgIyBfZ2V0X2NhbmRpZGF0ZV9uYW1lcyByZXR1cm5zIGEgX1JhbmRvbU5hbWVTZXF1ZW5jZSBvYmplY3QKKyAgICAgICAgb2JqID0gdGVtcGZpbGUuX2dldF9jYW5kaWRhdGVfbmFtZXMoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLCB0ZW1wZmlsZS5fUmFuZG9tTmFtZVNlcXVlbmNlKQorCisgICAgZGVmIHRlc3Rfc2FtZV90aGluZyhzZWxmKToKKyAgICAgICAgIyBfZ2V0X2NhbmRpZGF0ZV9uYW1lcyBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBvYmplY3QKKyAgICAgICAgYSA9IHRlbXBmaWxlLl9nZXRfY2FuZGlkYXRlX25hbWVzKCkKKyAgICAgICAgYiA9IHRlbXBmaWxlLl9nZXRfY2FuZGlkYXRlX25hbWVzKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQorCit0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfX2dldF9jYW5kaWRhdGVfbmFtZXMpCisKKworY2xhc3MgdGVzdF9fbWtzdGVtcF9pbm5lcihUQyk6CisgICAgIiIiVGVzdCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gX21rc3RlbXBfaW5uZXIuIiIiCisKKyAgICBjbGFzcyBta3N0ZW1wZWQ6CisgICAgICAgIF9iZmxhZ3MgPSB0ZW1wZmlsZS5fYmluX29wZW5mbGFncworICAgICAgICBfdGZsYWdzID0gdGVtcGZpbGUuX3RleHRfb3BlbmZsYWdzCisgICAgICAgIF9jbG9zZSA9IG9zLmNsb3NlCisgICAgICAgIF91bmxpbmsgPSBvcy51bmxpbmsKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyLCBwcmUsIHN1ZiwgYmluKToKKyAgICAgICAgICAgIGlmIGJpbjogZmxhZ3MgPSBzZWxmLl9iZmxhZ3MKKyAgICAgICAgICAgIGVsc2U6ICAgZmxhZ3MgPSBzZWxmLl90ZmxhZ3MKKworICAgICAgICAgICAgKHNlbGYuZmQsIHNlbGYubmFtZSkgPSB0ZW1wZmlsZS5fbWtzdGVtcF9pbm5lcihkaXIsIHByZSwgc3VmLCBmbGFncykKKworICAgICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKKyAgICAgICAgICAgIG9zLndyaXRlKHNlbGYuZmQsIHN0cikKKworICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlKHNlbGYuZmQpCisgICAgICAgICAgICBzZWxmLl91bmxpbmsoc2VsZi5uYW1lKQorCisgICAgZGVmIGRvX2NyZWF0ZShzZWxmLCBkaXI9Tm9uZSwgcHJlPSIiLCBzdWY9IiIsIGJpbj0xKToKKyAgICAgICAgaWYgZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZSA9IHNlbGYubWtzdGVtcGVkKGRpciwgcHJlLCBzdWYsIGJpbikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oIl9ta3N0ZW1wX2lubmVyIikKKworICAgICAgICBzZWxmLm5hbWVDaGVjayhmaWxlLm5hbWUsIGRpciwgcHJlLCBzdWYpCisgICAgICAgIHJldHVybiBmaWxlCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBfbWtzdGVtcF9pbm5lciBjYW4gY3JlYXRlIGZpbGVzCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKCkud3JpdGUoImJsYXQiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImEiKS53cml0ZSgiYmxhdCIpCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKHN1Zj0iYiIpLndyaXRlKCJibGF0IikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhIiwgc3VmPSJiIikud3JpdGUoImJsYXQiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImFhIiwgc3VmPSIudHh0Iikud3JpdGUoImJsYXQiKQorCisgICAgZGVmIHRlc3RfYmFzaWNfbWFueShzZWxmKToKKyAgICAgICAgIyBfbWtzdGVtcF9pbm5lciBjYW4gY3JlYXRlIG1hbnkgZmlsZXMgKHN0b2NoYXN0aWMpCisgICAgICAgIGV4dGFudCA9IHJhbmdlKFRFU1RfRklMRVMpCisgICAgICAgIGZvciBpIGluIGV4dGFudDoKKyAgICAgICAgICAgIGV4dGFudFtpXSA9IHNlbGYuZG9fY3JlYXRlKHByZT0iYWEiKQorCisgICAgZGVmIHRlc3RfY2hvb3NlX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgIyBfbWtzdGVtcF9pbm5lciBjYW4gY3JlYXRlIGZpbGVzIGluIGEgdXNlci1zZWxlY3RlZCBkaXJlY3RvcnkKKyAgICAgICAgZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZG9fY3JlYXRlKGRpcj1kaXIpLndyaXRlKCJibGF0IikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKKworICAgIGRlZiB0ZXN0X2ZpbGVfbW9kZShzZWxmKToKKyAgICAgICAgIyBfbWtzdGVtcF9pbm5lciBjcmVhdGVzIGZpbGVzIHdpdGggdGhlIHByb3BlciBtb2RlCisgICAgICAgIGlmIG5vdCBoYXNfc3RhdDoKKyAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgU2tpcFRlc3QuCisKKyAgICAgICAgZmlsZSA9IHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KGZpbGUubmFtZSkuc3RfbW9kZSkKKyAgICAgICAgZXhwZWN0ZWQgPSAwNjAwCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcpOgorICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKKyAgICAgICAgICAgICMgcmVwbGljYXRlIHRoZSAndXNlcicgYml0cy4KKyAgICAgICAgICAgIHVzZXIgPSBleHBlY3RlZCA+PiA2CisgICAgICAgICAgICBleHBlY3RlZCA9IHVzZXIgKiAoMSArIDggKyA2NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RlLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X25vaW5oZXJpdChzZWxmKToKKyAgICAgICAgIyBfbWtzdGVtcF9pbm5lciBmaWxlIGhhbmRsZXMgYXJlIG5vdCBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzCisgICAgICAgIGlmIG5vdCBoYXNfc3Bhd25sOgorICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgIyB1Z2gsIGNhbid0IHVzZSBTa2lwVGVzdC4KKworICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICB2PSJ2IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdj0icSIKKworICAgICAgICBmaWxlID0gc2VsZi5kb19jcmVhdGUoKQorICAgICAgICBmZCA9ICIlZCIgJSBmaWxlLmZkCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWUgPSBfX2ZpbGVfXworICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgbWUgPSBzeXMuYXJndlswXQorCisgICAgICAgICMgV2UgaGF2ZSB0byBleGVjIHNvbWV0aGluZywgc28gdGhhdCBGRF9DTE9FWEVDIHdpbGwgdGFrZQorICAgICAgICAjIGVmZmVjdC4gIFRoZSBjb3JlIG9mIHRoaXMgdGVzdCBpcyB0aGVyZWZvcmUgaW4KKyAgICAgICAgIyB0Zl9pbmhlcml0X2NoZWNrLnB5LCB3aGljaCBzZWUuCisgICAgICAgIHRlc3RlciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKG1lKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGZfaW5oZXJpdF9jaGVjay5weSIpCisKKyAgICAgICAgIyBPbiBXaW5kb3dzIGEgc3Bhd24qIC9wYXRoLyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBzaG91bGRuJ3QgYmUgcXVvdGVkLAorICAgICAgICAjIGJ1dCBhbiBhcmcgd2l0aCBlbWJlZGRlZCBzcGFjZXMgc2hvdWxkIGJlIGRlY29yYXRlZCB3aXRoIGRvdWJsZQorICAgICAgICAjIHF1b3RlcyBvbiBlYWNoIGVuZAorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsKToKKyAgICAgICAgICAgIGRlY29yYXRlZCA9ICciJXMiJyAlIHN5cy5leGVjdXRhYmxlCisgICAgICAgICAgICB0ZXN0ZXIgPSAnIiVzIicgJSB0ZXN0ZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlY29yYXRlZCA9IHN5cy5leGVjdXRhYmxlCisKKyAgICAgICAgcmV0dmFsID0gb3Muc3Bhd25sKG9zLlBfV0FJVCwgc3lzLmV4ZWN1dGFibGUsIGRlY29yYXRlZCwgdGVzdGVyLCB2LCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXR2YWwgPCAwLAorICAgICAgICAgICAgICAgICAgICAiY2hpbGQgcHJvY2VzcyBjYXVnaHQgZmF0YWwgc2lnbmFsICVkIiAlIC1yZXR2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmV0dmFsID4gMCwgImNoaWxkIHByb2Nlc3MgcmVwb3J0cyBmYWlsdXJlICVkIiVyZXR2YWwpCisKKyAgICBkZWYgdGVzdF90ZXh0bW9kZShzZWxmKToKKyAgICAgICAgIyBfbWtzdGVtcF9pbm5lciBjYW4gY3JlYXRlIGZpbGVzIGluIHRleHQgbW9kZQorICAgICAgICBpZiBub3QgaGFzX3RleHRtb2RlOgorICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgIyB1Z2gsIGNhbid0IHVzZSBTa2lwVGVzdC4KKworICAgICAgICBzZWxmLmRvX2NyZWF0ZShiaW49MCkud3JpdGUoImJsYXRcbiIpCisgICAgICAgICMgWFhYIHNob3VsZCB0ZXN0IHRoYXQgdGhlIGZpbGUgcmVhbGx5IGlzIGEgdGV4dCBmaWxlCisKK3Rlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9fbWtzdGVtcF9pbm5lcikKKworCitjbGFzcyB0ZXN0X2dldHRlbXBwcmVmaXgoVEMpOgorICAgICIiIlRlc3QgZ2V0dGVtcHByZWZpeCgpLiIiIgorCisgICAgZGVmIHRlc3Rfc2FuZV90ZW1wbGF0ZShzZWxmKToKKyAgICAgICAgIyBnZXR0ZW1wcHJlZml4IHJldHVybnMgYSBub25lbXB0eSBwcmVmaXggc3RyaW5nCisgICAgICAgIHAgPSB0ZW1wZmlsZS5nZXR0ZW1wcHJlZml4KCkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocCwgYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihwKSA+IDApCisKKyAgICBkZWYgdGVzdF91c2FibGVfdGVtcGxhdGUoc2VsZik6CisgICAgICAgICMgZ2V0dGVtcHByZWZpeCByZXR1cm5zIGEgdXNhYmxlIHByZWZpeCBzdHJpbmcKKworICAgICAgICAjIENyZWF0ZSBhIHRlbXAgZGlyZWN0b3J5LCBhdm9pZGluZyB1c2Ugb2YgdGhlIHByZWZpeC4KKyAgICAgICAgIyBUaGVuIGF0dGVtcHQgdG8gY3JlYXRlIGEgZmlsZSB3aG9zZSBuYW1lIGlzCisgICAgICAgICMgcHJlZml4ICsgJ3h4eHh4eC54eHgnIGluIHRoYXQgZGlyZWN0b3J5LgorICAgICAgICBwID0gdGVtcGZpbGUuZ2V0dGVtcHByZWZpeCgpICsgInh4eHh4eC54eHgiCisgICAgICAgIGQgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0iIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihkLCBwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkID0gb3Mub3BlbihwLCBvcy5PX1JEV1IgfCBvcy5PX0NSRUFUKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJvcy5vcGVuIikKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgb3MudW5saW5rKHApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihkKQorCit0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfZ2V0dGVtcHByZWZpeCkKKworCitjbGFzcyB0ZXN0X2dldHRlbXBkaXIoVEMpOgorICAgICIiIlRlc3QgZ2V0dGVtcGRpcigpLiIiIgorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2V4aXN0cyhzZWxmKToKKyAgICAgICAgIyBnZXR0ZW1wZGlyIHJldHVybnMgYSBkaXJlY3Rvcnkgd2hpY2ggZXhpc3RzCisKKyAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzYWJzKGRpcikgb3IgZGlyID09IG9zLmN1cmRpciwKKyAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCIgJSBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKGRpciksCisgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbm90IGEgZGlyZWN0b3J5IiAlIGRpcikKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV93cml0YWJsZShzZWxmKToKKyAgICAgICAgIyBnZXR0ZW1wZGlyIHJldHVybnMgYSBkaXJlY3Rvcnkgd3JpdGFibGUgYnkgdGhlIHVzZXIKKworICAgICAgICAjIHNuZWFreToganVzdCBpbnN0YW50aWF0ZSBhIE5hbWVkVGVtcG9yYXJ5RmlsZSwgd2hpY2gKKyAgICAgICAgIyBkZWZhdWx0cyB0byB3cml0aW5nIGludG8gdGhlIGRpcmVjdG9yeSByZXR1cm5lZCBieQorICAgICAgICAjIGdldHRlbXBkaXIuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICAgICAgZmlsZS53cml0ZSgiYmxhdCIpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oImNyZWF0ZSBmaWxlIGluICVzIiAlIHRlbXBmaWxlLmdldHRlbXBkaXIoKSkKKworICAgIGRlZiB0ZXN0X3NhbWVfdGhpbmcoc2VsZik6CisgICAgICAgICMgZ2V0dGVtcGRpciBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBvYmplY3QKKyAgICAgICAgYSA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICBiID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X2dldHRlbXBkaXIpCisKKworY2xhc3MgdGVzdF9ta3N0ZW1wKFRDKToKKyAgICAiIiJUZXN0IG1rc3RlbXAoKS4iIiIKKworICAgIGRlZiBkb19jcmVhdGUoc2VsZiwgZGlyPU5vbmUsIHByZT0iIiwgc3VmPSIiKToKKyAgICAgICAgaWYgZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgKGZkLCBuYW1lKSA9IHRlbXBmaWxlLm1rc3RlbXAoZGlyPWRpciwgcHJlZml4PXByZSwgc3VmZml4PXN1ZikKKyAgICAgICAgICAgIChuZGlyLCBuYmFzZSkgPSBvcy5wYXRoLnNwbGl0KG5hbWUpCisgICAgICAgICAgICBhZGlyID0gb3MucGF0aC5hYnNwYXRoKGRpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRpciwgbmRpciwKKyAgICAgICAgICAgICAgICAiRGlyZWN0b3J5ICclcycgaW5jb3JyZWN0bHkgcmV0dXJuZWQgYXMgJyVzJyIgJSAoYWRpciwgbmRpcikpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJta3N0ZW1wIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm5hbWVDaGVjayhuYW1lLCBkaXIsIHByZSwgc3VmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIG1rc3RlbXAgY2FuIGNyZWF0ZSBmaWxlcworICAgICAgICBzZWxmLmRvX2NyZWF0ZSgpCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKHByZT0iYSIpCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKHN1Zj0iYiIpCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKHByZT0iYSIsIHN1Zj0iYiIpCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKHByZT0iYWEiLCBzdWY9Ii50eHQiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShkaXI9Ii4iKQorCisgICAgZGVmIHRlc3RfY2hvb3NlX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgIyBta3N0ZW1wIGNhbiBjcmVhdGUgZGlyZWN0b3JpZXMgaW4gYSB1c2VyLXNlbGVjdGVkIGRpcmVjdG9yeQorICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kb19jcmVhdGUoZGlyPWRpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X21rc3RlbXApCisKKworY2xhc3MgdGVzdF9ta2R0ZW1wKFRDKToKKyAgICAiIiJUZXN0IG1rZHRlbXAoKS4iIiIKKworICAgIGRlZiBkb19jcmVhdGUoc2VsZiwgZGlyPU5vbmUsIHByZT0iIiwgc3VmPSIiKToKKyAgICAgICAgaWYgZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPWRpciwgcHJlZml4PXByZSwgc3VmZml4PXN1ZikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oIm1rZHRlbXAiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubmFtZUNoZWNrKG5hbWUsIGRpciwgcHJlLCBzdWYpCisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBvcy5ybWRpcihuYW1lKQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIG1rZHRlbXAgY2FuIGNyZWF0ZSBkaXJlY3RvcmllcworICAgICAgICBvcy5ybWRpcihzZWxmLmRvX2NyZWF0ZSgpKQorICAgICAgICBvcy5ybWRpcihzZWxmLmRvX2NyZWF0ZShwcmU9ImEiKSkKKyAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUoc3VmPSJiIikpCisgICAgICAgIG9zLnJtZGlyKHNlbGYuZG9fY3JlYXRlKHByZT0iYSIsIHN1Zj0iYiIpKQorICAgICAgICBvcy5ybWRpcihzZWxmLmRvX2NyZWF0ZShwcmU9ImFhIiwgc3VmPSIudHh0IikpCisKKyAgICBkZWYgdGVzdF9iYXNpY19tYW55KHNlbGYpOgorICAgICAgICAjIG1rZHRlbXAgY2FuIGNyZWF0ZSBtYW55IGRpcmVjdG9yaWVzIChzdG9jaGFzdGljKQorICAgICAgICBleHRhbnQgPSByYW5nZShURVNUX0ZJTEVTKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiBleHRhbnQ6CisgICAgICAgICAgICAgICAgZXh0YW50W2ldID0gc2VsZi5kb19jcmVhdGUocHJlPSJhYSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3IgaSBpbiBleHRhbnQ6CisgICAgICAgICAgICAgICAgaWYoaXNpbnN0YW5jZShpLCBiYXNlc3RyaW5nKSk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGkpCisKKyAgICBkZWYgdGVzdF9jaG9vc2VfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICAjIG1rZHRlbXAgY2FuIGNyZWF0ZSBkaXJlY3RvcmllcyBpbiBhIHVzZXItc2VsZWN0ZWQgZGlyZWN0b3J5CisgICAgICAgIGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5ybWRpcihzZWxmLmRvX2NyZWF0ZShkaXI9ZGlyKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKKworICAgIGRlZiB0ZXN0X21vZGUoc2VsZik6CisgICAgICAgICMgbWtkdGVtcCBjcmVhdGVzIGRpcmVjdG9yaWVzIHdpdGggdGhlIHByb3BlciBtb2RlCisgICAgICAgIGlmIG5vdCBoYXNfc3RhdDoKKyAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgU2tpcFRlc3QuCisKKyAgICAgICAgZGlyID0gc2VsZi5kb19jcmVhdGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZGlyKS5zdF9tb2RlKQorICAgICAgICAgICAgbW9kZSAmPSAwNzc3ICMgTWFzayBvZmYgc3RpY2t5IGJpdHMgaW5oZXJpdGVkIGZyb20gL3RtcAorICAgICAgICAgICAgZXhwZWN0ZWQgPSAwNzAwCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdvczJlbXgnKToKKyAgICAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gZGlzdGluY3Rpb24gYW1vbmcgJ3VzZXInLCAnZ3JvdXAnIGFuZCAnd29ybGQnOworICAgICAgICAgICAgICAgICMgcmVwbGljYXRlIHRoZSAndXNlcicgYml0cy4KKyAgICAgICAgICAgICAgICB1c2VyID0gZXhwZWN0ZWQgPj4gNgorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdXNlciAqICgxICsgOCArIDY0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RlLCBleHBlY3RlZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X21rZHRlbXApCisKKworY2xhc3MgdGVzdF9ta3RlbXAoVEMpOgorICAgICIiIlRlc3QgbWt0ZW1wKCkuIiIiCisKKyAgICAjIEZvciBzYWZldHksIGFsbCB1c2Ugb2YgbWt0ZW1wIG11c3Qgb2NjdXIgaW4gYSBwcml2YXRlIGRpcmVjdG9yeS4KKyAgICAjIFdlIG11c3QgYWxzbyBzdXBwcmVzcyB0aGUgUnVudGltZVdhcm5pbmcgaXQgZ2VuZXJhdGVzLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kaXI6CisgICAgICAgICAgICBvcy5ybWRpcihzZWxmLmRpcikKKyAgICAgICAgICAgIHNlbGYuZGlyID0gTm9uZQorCisgICAgY2xhc3MgbWt0ZW1wZWQ6CisgICAgICAgIF91bmxpbmsgPSBvcy51bmxpbmsKKyAgICAgICAgX2JmbGFncyA9IHRlbXBmaWxlLl9iaW5fb3BlbmZsYWdzCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgcHJlLCBzdWYpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gdGVtcGZpbGUubWt0ZW1wKGRpcj1kaXIsIHByZWZpeD1wcmUsIHN1ZmZpeD1zdWYpCisgICAgICAgICAgICAjIENyZWF0ZSB0aGUgZmlsZS4gIFRoaXMgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQncworICAgICAgICAgICAgIyBteXN0ZXJpb3VzbHkgYXBwZWFyZWQgaW4gdGhlIG1lYW53aGlsZS4KKyAgICAgICAgICAgIG9zLmNsb3NlKG9zLm9wZW4oc2VsZi5uYW1lLCBzZWxmLl9iZmxhZ3MsIDA2MDApKQorCisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fdW5saW5rKHNlbGYubmFtZSkKKworICAgIGRlZiBkb19jcmVhdGUoc2VsZiwgcHJlPSIiLCBzdWY9IiIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlID0gc2VsZi5ta3RlbXBlZChzZWxmLmRpciwgcHJlLCBzdWYpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJta3RlbXAiKQorCisgICAgICAgIHNlbGYubmFtZUNoZWNrKGZpbGUubmFtZSwgc2VsZi5kaXIsIHByZSwgc3VmKQorICAgICAgICByZXR1cm4gZmlsZQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgbWt0ZW1wIGNhbiBjaG9vc2UgdXNhYmxlIGZpbGUgbmFtZXMKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImEiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShzdWY9ImIiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImEiLCBzdWY9ImIiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImFhIiwgc3VmPSIudHh0IikKKworICAgIGRlZiB0ZXN0X21hbnkoc2VsZik6CisgICAgICAgICMgbWt0ZW1wIGNhbiBjaG9vc2UgbWFueSB1c2FibGUgZmlsZSBuYW1lcyAoc3RvY2hhc3RpYykKKyAgICAgICAgZXh0YW50ID0gcmFuZ2UoVEVTVF9GSUxFUykKKyAgICAgICAgZm9yIGkgaW4gZXh0YW50OgorICAgICAgICAgICAgZXh0YW50W2ldID0gc2VsZi5kb19jcmVhdGUocHJlPSJhYSIpCisKKyMjICAgICBkZWYgdGVzdF93YXJuaW5nKHNlbGYpOgorIyMgICAgICAgICAjIG1rdGVtcCBpc3N1ZXMgYSB3YXJuaW5nIHdoZW4gdXNlZAorIyMgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1SdW50aW1lV2FybmluZywKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0ibWt0ZW1wIikKKyMjICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZVdhcm5pbmcsCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBmaWxlLm1rdGVtcCwgZGlyPXNlbGYuZGlyKQorCit0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfbWt0ZW1wKQorCisKKyMgV2UgdGVzdCBfVGVtcG9yYXJ5RmlsZVdyYXBwZXIgYnkgdGVzdGluZyBOYW1lZFRlbXBvcmFyeUZpbGUuCisKKworY2xhc3MgdGVzdF9OYW1lZFRlbXBvcmFyeUZpbGUoVEMpOgorICAgICIiIlRlc3QgTmFtZWRUZW1wb3JhcnlGaWxlKCkuIiIiCisKKyAgICBkZWYgZG9fY3JlYXRlKHNlbGYsIGRpcj1Ob25lLCBwcmU9IiIsIHN1Zj0iIiwgZGVsZXRlPVRydWUpOgorICAgICAgICBpZiBkaXIgaXMgTm9uZToKKyAgICAgICAgICAgIGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRpcj1kaXIsIHByZWZpeD1wcmUsIHN1ZmZpeD1zdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZT1kZWxldGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJOYW1lZFRlbXBvcmFyeUZpbGUiKQorCisgICAgICAgIHNlbGYubmFtZUNoZWNrKGZpbGUubmFtZSwgZGlyLCBwcmUsIHN1ZikKKyAgICAgICAgcmV0dXJuIGZpbGUKKworCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgTmFtZWRUZW1wb3JhcnlGaWxlIGNhbiBjcmVhdGUgZmlsZXMKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImEiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShzdWY9ImIiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImEiLCBzdWY9ImIiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImFhIiwgc3VmPSIudHh0IikKKworICAgIGRlZiB0ZXN0X2NyZWF0ZXNfbmFtZWQoc2VsZik6CisgICAgICAgICMgTmFtZWRUZW1wb3JhcnlGaWxlIGNyZWF0ZXMgZmlsZXMgd2l0aCBuYW1lcworICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGYubmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZWRUZW1wb3JhcnlGaWxlICVzIGRvZXMgbm90IGV4aXN0IiAlIGYubmFtZSkKKworICAgIGRlZiB0ZXN0X2RlbF9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgIyBBIE5hbWVkVGVtcG9yYXJ5RmlsZSBpcyBkZWxldGVkIHdoZW4gY2xvc2VkCisgICAgICAgIGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRpcj1kaXIpCisgICAgICAgICAgICBmLndyaXRlKCdibGF0JykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmLm5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVkVGVtcG9yYXJ5RmlsZSAlcyBleGlzdHMgYWZ0ZXIgY2xvc2UiICUgZi5uYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQorCisgICAgZGVmIHRlc3RfZGlzX2RlbF9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgIyBUZXN0cyB0aGF0IGRlbGV0ZS1vbi1jbG9zZSBjYW4gYmUgZGlzYWJsZWQKKyAgICAgICAgZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHRtcCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkaXI9ZGlyLCBkZWxldGU9RmFsc2UpCisgICAgICAgICAgICB0bXAgPSBmLm5hbWUKKyAgICAgICAgICAgIGYud3JpdGUoJ2JsYXQnKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZi5uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lZFRlbXBvcmFyeUZpbGUgJXMgbWlzc2luZyBhZnRlciBjbG9zZSIgJSBmLm5hbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiB0bXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKHRtcCkKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIEEgTmFtZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSBjbG9zZWQgbWFueSB0aW1lcyB3aXRob3V0IGVycm9yCisgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICBmLndyaXRlKCdhYmNcbicpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigiY2xvc2UiKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICAjIEEgTmFtZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyCisgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmLm5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGYubmFtZSkpCisgICAgICAgIGRlZiB1c2VfY2xvc2VkKCk6CisgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQorCisgICAgIyBIb3cgdG8gdGVzdCB0aGUgbW9kZSBhbmQgYnVmc2l6ZSBwYXJhbWV0ZXJzPworCit0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfTmFtZWRUZW1wb3JhcnlGaWxlKQorCitjbGFzcyB0ZXN0X1Nwb29sZWRUZW1wb3JhcnlGaWxlKFRDKToKKyAgICAiIiJUZXN0IFNwb29sZWRUZW1wb3JhcnlGaWxlKCkuIiIiCisKKyAgICBkZWYgZG9fY3JlYXRlKHNlbGYsIG1heF9zaXplPTAsIGRpcj1Ob25lLCBwcmU9IiIsIHN1Zj0iIik6CisgICAgICAgIGlmIGRpciBpcyBOb25lOgorICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGUgPSB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZShtYXhfc2l6ZT1tYXhfc2l6ZSwgZGlyPWRpciwgcHJlZml4PXByZSwgc3VmZml4PXN1ZikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oIlNwb29sZWRUZW1wb3JhcnlGaWxlIikKKworICAgICAgICByZXR1cm4gZmlsZQorCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjYW4gY3JlYXRlIGZpbGVzCisgICAgICAgIGYgPSBzZWxmLmRvX2NyZWF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MTAwLCBwcmU9ImEiLCBzdWY9Ii50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKworICAgIGRlZiB0ZXN0X2RlbF9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIGlzIGRlbGV0ZWQgd2hlbiBjbG9zZWQKKyAgICAgICAgZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZShtYXhfc2l6ZT0xMCwgZGlyPWRpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICAgICAgZi53cml0ZSgnYmxhdCAnICogNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCisgICAgICAgICAgICBmaWxlbmFtZSA9IGYubmFtZQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJTcG9vbGVkVGVtcG9yYXJ5RmlsZSAlcyBleGlzdHMgYWZ0ZXIgY2xvc2UiICUgZmlsZW5hbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihkaXIpCisKKyAgICBkZWYgdGVzdF9yZXdyaXRlX3NtYWxsKHNlbGYpOgorICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIHdyaXR0ZW4gdG8gbXVsdGlwbGUgd2l0aGluIHRoZSBtYXhfc2l6ZQorICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIGYuc2VlaygwLCAwKQorICAgICAgICAgICAgZi53cml0ZSgneCcgKiAyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9zZXF1ZW50aWFsKHNlbGYpOgorICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgc2hvdWxkIGhvbGQgZXhhY3RseSBtYXhfc2l6ZSBieXRlcywgYW5kIHJvbGwKKyAgICAgICAgIyBvdmVyIGFmdGVyd2FyZAorICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBmLndyaXRlKCd4JyAqIDIwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgZi53cml0ZSgneCcgKiAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisgICAgICAgIGYud3JpdGUoJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lcyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUKKyAgICAgICAgZiA9IHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgZi53cml0ZWxpbmVzKChiJ3gnLCBiJ3knLCBiJ3onKSkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGJ1ZiA9IGYucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBiJ3h5eicpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzX3NlcXVlbnRpYWwoc2VsZik6CisgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBzaG91bGQgaG9sZCBleGFjdGx5IG1heF9zaXplIGJ5dGVzLCBhbmQgcm9sbAorICAgICAgICAjIG92ZXIgYWZ0ZXJ3YXJkCisgICAgICAgIGYgPSBzZWxmLmRvX2NyZWF0ZShtYXhfc2l6ZT0zNSkKKyAgICAgICAgZi53cml0ZWxpbmVzKChiJ3gnICogMjAsIGIneCcgKiAxMCwgYid4JyAqIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgZi53cml0ZShiJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQorCisgICAgZGVmIHRlc3RfeHJlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZG9fY3JlYXRlKG1heF9zaXplPTIwKQorICAgICAgICBmLndyaXRlKGInYWJjXG4nICogNSkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZi54cmVhZGxpbmVzKCkpLCBbYidhYmNcbiddICogNSkKKyAgICAgICAgZi53cml0ZShiJ3hcbnknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGYueHJlYWRsaW5lcygpKSwgW2InYWJjXG4nXSAqIDUgKyBbYid4XG4nLCBiJ3knXSkKKworICAgIGRlZiB0ZXN0X3NwYXJzZShzZWxmKToKKyAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIHRoYXQgaXMgd3JpdHRlbiBsYXRlIGluIHRoZSBmaWxlIHdpbGwgZXh0ZW5kCisgICAgICAgICMgd2hlbiB0aGF0IG9jY3VycworICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBmLnNlZWsoMTAwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgZi53cml0ZSgneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBzaG91bGQgcm9sbCBvdmVyIHRvIGEgcmVhbCBmaWxlIG9uIGZpbGVubygpCisgICAgICAgIGYgPSBzZWxmLmRvX2NyZWF0ZShtYXhfc2l6ZT0zMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmZpbGVubygpID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2Nsb3NlX2JlZm9yZV9yb2xsb3ZlcihzZWxmKToKKyAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSBjbG9zZWQgbWFueSB0aW1lcyB3aXRob3V0IGVycm9yCisgICAgICAgIGYgPSB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIGYud3JpdGUoJ2FiY1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigiY2xvc2UiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfY2xvc2VfYWZ0ZXJfcm9sbG92ZXIoc2VsZik6CisgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjYW4gYmUgY2xvc2VkIG1hbnkgdGltZXMgd2l0aG91dCBlcnJvcgorICAgICAgICBmID0gdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGUobWF4X3NpemU9MSkKKyAgICAgICAgZi53cml0ZSgnYWJjXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oImNsb3NlIikKKworICAgIGRlZiB0ZXN0X2JvdW5kX21ldGhvZHMoc2VsZik6CisgICAgICAgICMgSXQgc2hvdWxkIGJlIE9LIHRvIHN0ZWFsIGEgYm91bmQgbWV0aG9kIGZyb20gYSBTcG9vbGVkVGVtcG9yYXJ5RmlsZQorICAgICAgICAjIGFuZCB1c2UgaXQgaW5kZXBlbmRlbnRseTsgd2hlbiB0aGUgZmlsZSByb2xscyBvdmVyLCB0aG9zZSBib3VuZAorICAgICAgICAjIG1ldGhvZHMgc2hvdWxkIGNvbnRpbnVlIHRvIGZ1bmN0aW9uCisgICAgICAgIGYgPSBzZWxmLmRvX2NyZWF0ZShtYXhfc2l6ZT0zMCkKKyAgICAgICAgcmVhZCA9IGYucmVhZAorICAgICAgICB3cml0ZSA9IGYud3JpdGUKKyAgICAgICAgc2VlayA9IGYuc2VlaworCisgICAgICAgIHdyaXRlKCJhIiAqIDM1KQorICAgICAgICB3cml0ZSgiYiIgKiAzNSkKKyAgICAgICAgc2VlaygwLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhZCg3MCkgPT0gJ2EnKjM1ICsgJ2InKjM1KQorCisgICAgZGVmIHRlc3RfcHJvcGVydGllcyhzZWxmKToKKyAgICAgICAgZiA9IHRlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlKG1heF9zaXplPTEwKQorICAgICAgICBmLndyaXRlKGIneCcgKiAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5tb2RlLCAndytiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGYubmV3bGluZXMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBmLmVuY29kaW5nCisKKyAgICAgICAgZi53cml0ZShiJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgJ3crYicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGYubmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBmLm5ld2xpbmVzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZi5lbmNvZGluZworCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2JlZm9yZV9yb2xsb3ZlcihzZWxmKToKKyAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyCisgICAgICAgIHdpdGggdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGUobWF4X3NpemU9MSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQorICAgICAgICBkZWYgdXNlX2Nsb3NlZCgpOgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXNlX2Nsb3NlZCkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9kdXJpbmdfcm9sbG92ZXIoc2VsZik6CisgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlcgorICAgICAgICB3aXRoIHRlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlKG1heF9zaXplPTEpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgICAgIGYud3JpdGUoJ2FiY1xuJykKKyAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKyAgICAgICAgZGVmIHVzZV9jbG9zZWQoKToKKyAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVzZV9jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfYWZ0ZXJfcm9sbG92ZXIoc2VsZik6CisgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlcgorICAgICAgICBmID0gdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGUobWF4X3NpemU9MSkKKyAgICAgICAgZi53cml0ZSgnYWJjXG4nKQorICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKKyAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQorICAgICAgICBkZWYgdXNlX2Nsb3NlZCgpOgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXNlX2Nsb3NlZCkKKworCit0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfU3Bvb2xlZFRlbXBvcmFyeUZpbGUpCisKKworY2xhc3MgdGVzdF9UZW1wb3JhcnlGaWxlKFRDKToKKyAgICAiIiJUZXN0IFRlbXBvcmFyeUZpbGUoKS4iIiIKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIFRlbXBvcmFyeUZpbGUgY2FuIGNyZWF0ZSBmaWxlcworICAgICAgICAjIE5vIHBvaW50IGluIHRlc3RpbmcgdGhlIG5hbWUgcGFyYW1zIC0gdGhlIGZpbGUgaGFzIG5vIG5hbWUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigiVGVtcG9yYXJ5RmlsZSIpCisKKyAgICBkZWYgdGVzdF9oYXNfbm9fbmFtZShzZWxmKToKKyAgICAgICAgIyBUZW1wb3JhcnlGaWxlIGNyZWF0ZXMgZmlsZXMgd2l0aCBubyBuYW1lcyAob24gdGhpcyBzeXN0ZW0pCisgICAgICAgIGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZShkaXI9ZGlyKQorICAgICAgICBmLndyaXRlKCdibGF0JykKKworICAgICAgICAjIFNuZWFreTogYmVjYXVzZSB0aGlzIGZpbGUgaGFzIG5vIG5hbWUsIGl0IHNob3VsZCBub3QgcHJldmVudAorICAgICAgICAjIHVzIGZyb20gcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBpdCB3YXMgY3JlYXRlZCBpbi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBlaSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAjIGNsZWFudXAKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oInJtZGlyIiwgZWkpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9jbG9zZShzZWxmKToKKyAgICAgICAgIyBBIFRlbXBvcmFyeUZpbGUgY2FuIGJlIGNsb3NlZCBtYW55IHRpbWVzIHdpdGhvdXQgZXJyb3IKKyAgICAgICAgZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBmLndyaXRlKCdhYmNcbicpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigiY2xvc2UiKQorCisgICAgIyBIb3cgdG8gdGVzdCB0aGUgbW9kZSBhbmQgYnVmc2l6ZSBwYXJhbWV0ZXJzPworCisKK2lmIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSBpcyBub3QgdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZToKKyAgICB0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfVGVtcG9yYXJ5RmlsZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3MjY3MgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CkBAIC0wLDAgKzEsNjU4IEBACisjCisjIFRlc3Qgc3VpdGUgZm9yIHRoZSB0ZXh0d3JhcCBtb2R1bGUuCisjCisjIE9yaWdpbmFsIHRlc3RzIHdyaXR0ZW4gYnkgR3JlZyBXYXJkIDxnd2FyZEBweXRob24ubmV0Pi4KKyMgQ29udmVydGVkIHRvIFB5VW5pdCBieSBQZXRlciBIYW5zZW4gPHBldGVyQGVuZ2NvcnAuY29tPi4KKyMgQ3VycmVudGx5IG1haW50YWluZWQgYnkgR3JlZyBXYXJkLgorIworIyAkSWQkCisjCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworZnJvbSB0ZXh0d3JhcCBpbXBvcnQgVGV4dFdyYXBwZXIsIHdyYXAsIGZpbGwsIGRlZGVudAorCisKK2NsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgJycnUGFyZW50IGNsYXNzIHdpdGggdXRpbGl0eSBtZXRob2RzIGZvciB0ZXh0d3JhcCB0ZXN0cy4nJycKKworICAgIGRlZiBzaG93KHNlbGYsIHRleHRpbik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodGV4dGluLCBsaXN0KToKKyAgICAgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4odGV4dGluKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAlZDogJXIiICUgKGksIHRleHRpbltpXSkpCisgICAgICAgICAgICByZXN1bHQgPSAnXG4nLmpvaW4ocmVzdWx0KQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodGV4dGluLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJlc3VsdCA9ICIgICVzXG4iICUgcmVwcih0ZXh0aW4pCisgICAgICAgIHJldHVybiByZXN1bHQKKworCisgICAgZGVmIGNoZWNrKHNlbGYsIHJlc3VsdCwgZXhwZWN0KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdCwKKyAgICAgICAgICAgICdleHBlY3RlZDpcbiVzXG5idXQgZ290OlxuJXMnICUgKAorICAgICAgICAgICAgICAgIHNlbGYuc2hvdyhleHBlY3QpLCBzZWxmLnNob3cocmVzdWx0KSkpCisKKyAgICBkZWYgY2hlY2tfd3JhcChzZWxmLCB0ZXh0LCB3aWR0aCwgZXhwZWN0LCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IHdyYXAodGV4dCwgd2lkdGgsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisgICAgZGVmIGNoZWNrX3NwbGl0KHNlbGYsIHRleHQsIGV4cGVjdCk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYud3JhcHBlci5fc3BsaXQodGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXG5leHBlY3RlZCAlclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgZ290ICAlciIgJSAoZXhwZWN0LCByZXN1bHQpKQorCisKK2NsYXNzIFdyYXBUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLndyYXBwZXIgPSBUZXh0V3JhcHBlcih3aWR0aD00NSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgIyBTaW1wbGUgY2FzZToganVzdCB3b3Jkcywgc3BhY2VzLCBhbmQgYSBiaXQgb2YgcHVuY3R1YXRpb24KKworICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyAgSSdtIGdsYWQgdG8gaGVhciBpdCEiCisKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gIEknbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImdsYWQgdG8gaGVhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIml0ISJdKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNDIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkknbSBnbGFkIHRvIGhlYXIgaXQhIl0pCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA4MCwgW3RleHRdKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgd3JhcHBpbmcgdGhlIGVtcHR5IHN0cmluZyByZXR1cm5zIGFuIGVtcHR5IGxpc3QuCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgiIiwgNiwgW10pCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgiIiwgNiwgW10sIGRyb3Bfd2hpdGVzcGFjZT1GYWxzZSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZ193aXRoX2luaXRpYWxfaW5kZW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGVtcHR5IHN0cmluZyBpcyBub3QgaW5kZW50ZWQuCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgiIiwgNiwgW10sIGluaXRpYWxfaW5kZW50PSIrKyIpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgiIiwgNiwgW10sIGluaXRpYWxfaW5kZW50PSIrKyIsIGRyb3Bfd2hpdGVzcGFjZT1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgICMgV2hpdGVzcGFjZSBtdW5naW5nIGFuZCBlbmQtb2Ytc2VudGVuY2UgZGV0ZWN0aW9uCisKKyAgICAgICAgdGV4dCA9ICIiIlwKK1RoaXMgaXMgYSBwYXJhZ3JhcGggdGhhdCBhbHJlYWR5IGhhcworbGluZSBicmVha3MuICBCdXQgc29tZSBvZiBpdHMgbGluZXMgYXJlIG11Y2ggbG9uZ2VyIHRoYW4gdGhlIG90aGVycywKK3NvIGl0IG5lZWRzIHRvIGJlIHdyYXBwZWQuCitTb21lIGxpbmVzIGFyZSBcdHRhYmJlZCB0b28uCitXaGF0IGEgbWVzcyEKKyIiIgorCisgICAgICAgIGV4cGVjdCA9IFsiVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGFscmVhZHkgaGFzIGxpbmUiLAorICAgICAgICAgICAgICAgICAgImJyZWFrcy4gIEJ1dCBzb21lIG9mIGl0cyBsaW5lcyBhcmUgbXVjaCIsCisgICAgICAgICAgICAgICAgICAibG9uZ2VyIHRoYW4gdGhlIG90aGVycywgc28gaXQgbmVlZHMgdG8gYmUiLAorICAgICAgICAgICAgICAgICAgIndyYXBwZWQuICBTb21lIGxpbmVzIGFyZSAgdGFiYmVkIHRvby4gIFdoYXQgYSIsCisgICAgICAgICAgICAgICAgICAibWVzcyEiXQorCisgICAgICAgIHdyYXBwZXIgPSBUZXh0V3JhcHBlcig0NSwgZml4X3NlbnRlbmNlX2VuZGluZ3M9VHJ1ZSkKKyAgICAgICAgcmVzdWx0ID0gd3JhcHBlci53cmFwKHRleHQpCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCisKKyAgICAgICAgcmVzdWx0ID0gd3JhcHBlci5maWxsKHRleHQpCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCAnXG4nLmpvaW4oZXhwZWN0KSkKKworICAgIGRlZiB0ZXN0X2ZpeF9zZW50ZW5jZV9lbmRpbmdzKHNlbGYpOgorICAgICAgICB3cmFwcGVyID0gVGV4dFdyYXBwZXIoNjAsIGZpeF9zZW50ZW5jZV9lbmRpbmdzPVRydWUpCisKKyAgICAgICAgIyBTRiAjODQ3MzQ2OiBlbnN1cmUgdGhhdCBmaXhfc2VudGVuY2VfZW5kaW5ncz1UcnVlIGRvZXMgdGhlCisgICAgICAgICMgcmlnaHQgdGhpbmcgZXZlbiBvbiBpbnB1dCBzaG9ydCBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8KKyAgICAgICAgIyBiZSB3cmFwcGVkLgorICAgICAgICB0ZXh0ID0gIkEgc2hvcnQgbGluZS4gTm90ZSB0aGUgc2luZ2xlIHNwYWNlLiIKKyAgICAgICAgZXhwZWN0ID0gWyJBIHNob3J0IGxpbmUuICBOb3RlIHRoZSBzaW5nbGUgc3BhY2UuIl0KKyAgICAgICAgc2VsZi5jaGVjayh3cmFwcGVyLndyYXAodGV4dCksIGV4cGVjdCkKKworICAgICAgICAjIFRlc3Qgc29tZSBvZiB0aGUgaGFpcnkgZW5kIGNhc2VzIHRoYXQgX2ZpeF9zZW50ZW5jZV9lbmRpbmdzKCkKKyAgICAgICAgIyBpcyBzdXBwb3NlZCB0byBoYW5kbGUgKHRoZSBlYXN5IHN0dWZmIGlzIHRlc3RlZCBpbgorICAgICAgICAjIHRlc3Rfd2hpdGVzcGFjZSgpIGFib3ZlKS4KKyAgICAgICAgdGV4dCA9ICJXZWxsLCBEb2N0b3I/IFdoYXQgZG8geW91IHRoaW5rPyIKKyAgICAgICAgZXhwZWN0ID0gWyJXZWxsLCBEb2N0b3I/ICBXaGF0IGRvIHlvdSB0aGluaz8iXQorICAgICAgICBzZWxmLmNoZWNrKHdyYXBwZXIud3JhcCh0ZXh0KSwgZXhwZWN0KQorCisgICAgICAgIHRleHQgPSAiV2VsbCwgRG9jdG9yP1xuV2hhdCBkbyB5b3UgdGhpbms/IgorICAgICAgICBzZWxmLmNoZWNrKHdyYXBwZXIud3JhcCh0ZXh0KSwgZXhwZWN0KQorCisgICAgICAgIHRleHQgPSAnSSBzYXksIGNoYXBzISBBbnlvbmUgZm9yICJ0ZW5uaXM/IlxuSG1tcGghJworICAgICAgICBleHBlY3QgPSBbJ0kgc2F5LCBjaGFwcyEgIEFueW9uZSBmb3IgInRlbm5pcz8iICBIbW1waCEnXQorICAgICAgICBzZWxmLmNoZWNrKHdyYXBwZXIud3JhcCh0ZXh0KSwgZXhwZWN0KQorCisgICAgICAgIHdyYXBwZXIud2lkdGggPSAyMAorICAgICAgICBleHBlY3QgPSBbJ0kgc2F5LCBjaGFwcyEnLCAnQW55b25lIGZvciAidGVubmlzPyInLCAnSG1tcGghJ10KKyAgICAgICAgc2VsZi5jaGVjayh3cmFwcGVyLndyYXAodGV4dCksIGV4cGVjdCkKKworICAgICAgICB0ZXh0ID0gJ0FuZCBzaGUgc2FpZCwgIkdvIHRvIGhlbGwhIlxuQ2FuIHlvdSBiZWxpZXZlIHRoYXQ/JworICAgICAgICBleHBlY3QgPSBbJ0FuZCBzaGUgc2FpZCwgIkdvIHRvJywKKyAgICAgICAgICAgICAgICAgICdoZWxsISIgIENhbiB5b3UnLAorICAgICAgICAgICAgICAgICAgJ2JlbGlldmUgdGhhdD8nXQorICAgICAgICBzZWxmLmNoZWNrKHdyYXBwZXIud3JhcCh0ZXh0KSwgZXhwZWN0KQorCisgICAgICAgIHdyYXBwZXIud2lkdGggPSA2MAorICAgICAgICBleHBlY3QgPSBbJ0FuZCBzaGUgc2FpZCwgIkdvIHRvIGhlbGwhIiAgQ2FuIHlvdSBiZWxpZXZlIHRoYXQ/J10KKyAgICAgICAgc2VsZi5jaGVjayh3cmFwcGVyLndyYXAodGV4dCksIGV4cGVjdCkKKworICAgICAgICB0ZXh0ID0gJ0ZpbGUgc3RkaW8uaCBpcyBuaWNlLicKKyAgICAgICAgZXhwZWN0ID0gWydGaWxlIHN0ZGlvLmggaXMgbmljZS4nXQorICAgICAgICBzZWxmLmNoZWNrKHdyYXBwZXIud3JhcCh0ZXh0KSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3Rfd3JhcF9zaG9ydChzZWxmKToKKyAgICAgICAgIyBXcmFwcGluZyB0byBtYWtlIHNob3J0IGxpbmVzIGxvbmdlcgorCisgICAgICAgIHRleHQgPSAiVGhpcyBpcyBhXG5zaG9ydCBwYXJhZ3JhcGguIgorCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAyMCwgWyJUaGlzIGlzIGEgc2hvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYWdyYXBoLiJdKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNDAsIFsiVGhpcyBpcyBhIHNob3J0IHBhcmFncmFwaC4iXSkKKworCisgICAgZGVmIHRlc3Rfd3JhcF9zaG9ydF8xbGluZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGVuZGNhc2VzCisKKyAgICAgICAgdGV4dCA9ICJUaGlzIGlzIGEgc2hvcnQgbGluZS4iCisKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDMwLCBbIlRoaXMgaXMgYSBzaG9ydCBsaW5lLiJdKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMzAsIFsiKDEpIFRoaXMgaXMgYSBzaG9ydCBsaW5lLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9pbmRlbnQ9IigxKSAiKQorCisKKyAgICBkZWYgdGVzdF9oeXBoZW5hdGVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgYnJlYWtpbmcgaHlwaGVuYXRlZCB3b3JkcworCisgICAgICAgIHRleHQgPSAoInRoaXMtaXMtYS11c2VmdWwtZmVhdHVyZS1mb3ItIgorICAgICAgICAgICAgICAgICJyZWZvcm1hdHRpbmctcG9zdHMtZnJvbS10aW0tcGV0ZXJzJ2x5IikKKworICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNDAsCisgICAgICAgICAgICAgICAgICAgICAgICBbInRoaXMtaXMtYS11c2VmdWwtZmVhdHVyZS1mb3ItIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmVmb3JtYXR0aW5nLXBvc3RzLWZyb20tdGltLXBldGVycydseSJdKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNDEsCisgICAgICAgICAgICAgICAgICAgICAgICBbInRoaXMtaXMtYS11c2VmdWwtZmVhdHVyZS1mb3ItIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmVmb3JtYXR0aW5nLXBvc3RzLWZyb20tdGltLXBldGVycydseSJdKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNDIsCisgICAgICAgICAgICAgICAgICAgICAgICBbInRoaXMtaXMtYS11c2VmdWwtZmVhdHVyZS1mb3ItcmVmb3JtYXR0aW5nLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInBvc3RzLWZyb20tdGltLXBldGVycydseSJdKQorCisgICAgZGVmIHRlc3RfaHlwaGVuYXRlZF9udW1iZXJzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBoeXBoZW5hdGVkIG51bWJlcnMgKGVnLiBkYXRlcykgYXJlIG5vdCBicm9rZW4gbGlrZSB3b3Jkcy4KKyAgICAgICAgdGV4dCA9ICgiUHl0aG9uIDEuMC4wIHdhcyByZWxlYXNlZCBvbiAxOTk0LTAxLTI2LiAgUHl0aG9uIDEuMC4xIHdhc1xuIgorICAgICAgICAgICAgICAgICJyZWxlYXNlZCBvbiAxOTk0LTAyLTE1LiIpCisKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDM1LCBbJ1B5dGhvbiAxLjAuMCB3YXMgcmVsZWFzZWQgb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTk5NC0wMS0yNi4gIFB5dGhvbiAxLjAuMSB3YXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsZWFzZWQgb24gMTk5NC0wMi0xNS4nXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDQwLCBbJ1B5dGhvbiAxLjAuMCB3YXMgcmVsZWFzZWQgb24gMTk5NC0wMS0yNi4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHl0aG9uIDEuMC4xIHdhcyByZWxlYXNlZCBvbiAxOTk0LTAyLTE1LiddKQorCisgICAgICAgIHRleHQgPSAiSSBkbyBhbGwgbXkgc2hvcHBpbmcgYXQgNy0xMS4iCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAyNSwgWyJJIGRvIGFsbCBteSBzaG9wcGluZyBhdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI3LTExLiJdKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMjcsIFsiSSBkbyBhbGwgbXkgc2hvcHBpbmcgYXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNy0xMS4iXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDI5LCBbIkkgZG8gYWxsIG15IHNob3BwaW5nIGF0IDctMTEuIl0pCisKKyAgICBkZWYgdGVzdF9lbV9kYXNoKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGV4dCB3aXRoIGVtLWRhc2hlcworICAgICAgICB0ZXh0ID0gIkVtLWRhc2hlcyBzaG91bGQgYmUgd3JpdHRlbiAtLSB0aHVzLiIKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDI1LAorICAgICAgICAgICAgICAgICAgICAgICAgWyJFbS1kYXNoZXMgc2hvdWxkIGJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdHRlbiAtLSB0aHVzLiJdKQorCisgICAgICAgICMgUHJvYmUgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHByb3Blcmx5IHdyaXR0ZW4gZW0tZGFzaCwKKyAgICAgICAgIyBpZS4gIiAtLSAiLgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMjksCisgICAgICAgICAgICAgICAgICAgICAgICBbIkVtLWRhc2hlcyBzaG91bGQgYmUgd3JpdHRlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIi0tIHRodXMuIl0pCisgICAgICAgIGV4cGVjdCA9IFsiRW0tZGFzaGVzIHNob3VsZCBiZSB3cml0dGVuIC0tIiwKKyAgICAgICAgICAgICAgICAgICJ0aHVzLiJdCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAzMCwgZXhwZWN0KQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMzUsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDM2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyJFbS1kYXNoZXMgc2hvdWxkIGJlIHdyaXR0ZW4gLS0gdGh1cy4iXSkKKworICAgICAgICAjIFRoZSBpbXByb3Blcmx5IHdyaXR0ZW4gZW0tZGFzaCBpcyBoYW5kbGVkIHRvbywgYmVjYXVzZQorICAgICAgICAjIGl0J3MgYWRqYWNlbnQgdG8gbm9uLXdoaXRlc3BhY2Ugb24gYm90aCBzaWRlcy4KKyAgICAgICAgdGV4dCA9ICJZb3UgY2FuIGFsc28gZG8tLXRoaXMgb3IgZXZlbi0tLXRoaXMuIgorICAgICAgICBleHBlY3QgPSBbIllvdSBjYW4gYWxzbyBkbyIsCisgICAgICAgICAgICAgICAgICAiLS10aGlzIG9yIGV2ZW4iLAorICAgICAgICAgICAgICAgICAgIi0tLXRoaXMuIl0KKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDE1LCBleHBlY3QpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAxNiwgZXhwZWN0KQorICAgICAgICBleHBlY3QgPSBbIllvdSBjYW4gYWxzbyBkby0tIiwKKyAgICAgICAgICAgICAgICAgICJ0aGlzIG9yIGV2ZW4tLS0iLAorICAgICAgICAgICAgICAgICAgInRoaXMuIl0KKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDE3LCBleHBlY3QpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAxOSwgZXhwZWN0KQorICAgICAgICBleHBlY3QgPSBbIllvdSBjYW4gYWxzbyBkby0tdGhpcyBvciBldmVuIiwKKyAgICAgICAgICAgICAgICAgICItLS10aGlzLiJdCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAyOSwgZXhwZWN0KQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMzEsIGV4cGVjdCkKKyAgICAgICAgZXhwZWN0ID0gWyJZb3UgY2FuIGFsc28gZG8tLXRoaXMgb3IgZXZlbi0tLSIsCisgICAgICAgICAgICAgICAgICAidGhpcy4iXQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMzIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDM1LCBleHBlY3QpCisKKyAgICAgICAgIyBBbGwgb2YgdGhlIGFib3ZlIGJlaGF2aW91ciBjb3VsZCBiZSBkZWR1Y2VkIGJ5IHByb2JpbmcgdGhlCisgICAgICAgICMgX3NwbGl0KCkgbWV0aG9kLgorICAgICAgICB0ZXh0ID0gIkhlcmUncyBhbiAtLSBlbS1kYXNoIGFuZC0taGVyZSdzIGFub3RoZXItLS1hbmQgYW5vdGhlciEiCisgICAgICAgIGV4cGVjdCA9IFsiSGVyZSdzIiwgIiAiLCAiYW4iLCAiICIsICItLSIsICIgIiwgImVtLSIsICJkYXNoIiwgIiAiLAorICAgICAgICAgICAgICAgICAgImFuZCIsICItLSIsICJoZXJlJ3MiLCAiICIsICJhbm90aGVyIiwgIi0tLSIsCisgICAgICAgICAgICAgICAgICAiYW5kIiwgIiAiLCAiYW5vdGhlciEiXQorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KHRleHQsIGV4cGVjdCkKKworICAgICAgICB0ZXh0ID0gImFuZCB0aGVuLS1iYW0hLS1oZSB3YXMgZ29uZSIKKyAgICAgICAgZXhwZWN0ID0gWyJhbmQiLCAiICIsICJ0aGVuIiwgIi0tIiwgImJhbSEiLCAiLS0iLAorICAgICAgICAgICAgICAgICAgImhlIiwgIiAiLCAid2FzIiwgIiAiLCAiZ29uZSJdCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQodGV4dCwgZXhwZWN0KQorCisKKyAgICBkZWYgdGVzdF91bml4X29wdGlvbnMgKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBVbml4LXN0eWxlIGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSB3cmFwcGVkIGNvcnJlY3RseS4KKyAgICAgICAgIyBCb3RoIE9wdGlrIChPcHRpb25QYXJzZXIpIGFuZCBEb2N1dGlscyByZWx5IG9uIHRoaXMgYmVoYXZpb3VyIQorCisgICAgICAgIHRleHQgPSAiWW91IHNob3VsZCB1c2UgdGhlIC1uIG9wdGlvbiwgb3IgLS1kcnktcnVuIGluIGl0cyBsb25nIGZvcm0uIgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMjAsCisgICAgICAgICAgICAgICAgICAgICAgICBbIllvdSBzaG91bGQgdXNlIHRoZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIi1uIG9wdGlvbiwgb3IgLS1kcnktIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicnVuIGluIGl0cyBsb25nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybS4iXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDIxLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJZb3Ugc2hvdWxkIHVzZSB0aGUgLW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24sIG9yIC0tZHJ5LXJ1biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImluIGl0cyBsb25nIGZvcm0uIl0pCisgICAgICAgIGV4cGVjdCA9IFsiWW91IHNob3VsZCB1c2UgdGhlIC1uIG9wdGlvbiwgb3IiLAorICAgICAgICAgICAgICAgICAgIi0tZHJ5LXJ1biBpbiBpdHMgbG9uZyBmb3JtLiJdCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAzMiwgZXhwZWN0KQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMzQsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDM1LCBleHBlY3QpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAzOCwgZXhwZWN0KQorICAgICAgICBleHBlY3QgPSBbIllvdSBzaG91bGQgdXNlIHRoZSAtbiBvcHRpb24sIG9yIC0tZHJ5LSIsCisgICAgICAgICAgICAgICAgICAicnVuIGluIGl0cyBsb25nIGZvcm0uIl0KKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDM5LCBleHBlY3QpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA0MSwgZXhwZWN0KQorICAgICAgICBleHBlY3QgPSBbIllvdSBzaG91bGQgdXNlIHRoZSAtbiBvcHRpb24sIG9yIC0tZHJ5LXJ1biIsCisgICAgICAgICAgICAgICAgICAiaW4gaXRzIGxvbmcgZm9ybS4iXQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNDIsIGV4cGVjdCkKKworICAgICAgICAjIEFnYWluLCBhbGwgb2YgdGhlIGFib3ZlIGNhbiBiZSBkZWR1Y2VkIGZyb20gX3NwbGl0KCkuCisgICAgICAgIHRleHQgPSAidGhlIC1uIG9wdGlvbiwgb3IgLS1kcnktcnVuIG9yIC0tZHJ5cnVuIgorICAgICAgICBleHBlY3QgPSBbInRoZSIsICIgIiwgIi1uIiwgIiAiLCAib3B0aW9uLCIsICIgIiwgIm9yIiwgIiAiLAorICAgICAgICAgICAgICAgICAgIi0tZHJ5LSIsICJydW4iLCAiICIsICJvciIsICIgIiwgIi0tZHJ5cnVuIl0KKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCh0ZXh0LCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9mdW5reV9oeXBoZW5zIChzZWxmKToKKyAgICAgICAgIyBTY3Jld3kgZWRnZSBjYXNlcyBjb29rZWQgdXAgYnkgRGF2aWQgR29vZGdlci4gIEFsbCByZXBvcnRlZAorICAgICAgICAjIGluIFNGIGJ1ZyAjNTk2NDM0LgorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCJ3aGF0IHRoZS0taGV5ISIsIFsid2hhdCIsICIgIiwgInRoZSIsICItLSIsICJoZXkhIl0pCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoIndoYXQgdGhlLS0iLCBbIndoYXQiLCAiICIsICJ0aGUtLSJdKQorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCJ3aGF0IHRoZS0tLiIsIFsid2hhdCIsICIgIiwgInRoZS0tLiJdKQorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCItLXRleHQtLS4iLCBbIi0tdGV4dC0tLiJdKQorCisgICAgICAgICMgV2hlbiBJIGZpcnN0IHJlYWQgYnVnICM1OTY0MzQsIHRoaXMgaXMgd2hhdCBJIHRob3VnaHQgRGF2aWQKKyAgICAgICAgIyB3YXMgdGFsa2luZyBhYm91dC4gIEkgd2FzIHdyb25nOyB0aGVzZSBoYXZlIGFsd2F5cyB3b3JrZWQKKyAgICAgICAgIyBmaW5lLiAgVGhlIHJlYWwgcHJvYmxlbSBpcyB0ZXN0ZWQgaW4gdGVzdF9mdW5reV9wYXJlbnMoKQorICAgICAgICAjIGJlbG93Li4uCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoIi0tb3B0aW9uIiwgWyItLW9wdGlvbiJdKQorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCItLW9wdGlvbi1vcHQiLCBbIi0tb3B0aW9uLSIsICJvcHQiXSkKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgiZm9vIC0tb3B0aW9uLW9wdCBiYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgIiAiLCAiLS1vcHRpb24tIiwgIm9wdCIsICIgIiwgImJhciJdKQorCisgICAgZGVmIHRlc3RfcHVuY3RfaHlwaGVucyhzZWxmKToKKyAgICAgICAgIyBPaCBib3RoZXIsIFNGICM5NjU0MjUgZm91bmQgYW5vdGhlciBwcm9ibGVtIHdpdGggaHlwaGVucyAtLQorICAgICAgICAjIGh5cGhlbmF0ZWQgd29yZHMgaW4gc2luZ2xlIHF1b3RlcyB3ZXJlbid0IGhhbmRsZWQgY29ycmVjdGx5LgorICAgICAgICAjIEluIGZhY3QsIHRoZSBidWcgaXMgdGhhdCAqYW55KiBwdW5jdHVhdGlvbiBhcm91bmQgYSBoeXBoZW5hdGVkCisgICAgICAgICMgd29yZCB3YXMgaGFuZGxlZCBpbmNvcnJlY3RseSwgZXhjZXB0IGZvciBhIGxlYWRpbmcgIi0tIiwgd2hpY2gKKyAgICAgICAgIyB3YXMgc3BlY2lhbC1jYXNlZCBmb3IgT3B0aWsgYW5kIERvY3V0aWxzLiAgU28gdGVzdCBhIHZhcmlldHkKKyAgICAgICAgIyBvZiBzdHlsZXMgb2YgcHVuY3R1YXRpb24gYXJvdW5kIGEgaHlwaGVuYXRlZCB3b3JkLgorICAgICAgICAjIChBY3R1YWxseSB0aGlzIGlzIGJhc2VkIG9uIGFuIE9wdGlrIGJ1ZyByZXBvcnQsICM4MTMwNzcpLgorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCJ0aGUgJ3dpYmJsZS13b2JibGUnIHdpZGdldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyd0aGUnLCAnICcsICInd2liYmxlLSIsICJ3b2JibGUnIiwgJyAnLCAnd2lkZ2V0J10pCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoJ3RoZSAid2liYmxlLXdvYmJsZSIgd2lkZ2V0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3RoZScsICcgJywgJyJ3aWJibGUtJywgJ3dvYmJsZSInLCAnICcsICd3aWRnZXQnXSkKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgidGhlICh3aWJibGUtd29iYmxlKSB3aWRnZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsndGhlJywgJyAnLCAiKHdpYmJsZS0iLCAid29iYmxlKSIsICcgJywgJ3dpZGdldCddKQorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCJ0aGUgWyd3aWJibGUtd29iYmxlJ10gd2lkZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3RoZScsICcgJywgIlsnd2liYmxlLSIsICJ3b2JibGUnXSIsICcgJywgJ3dpZGdldCddKQorCisgICAgZGVmIHRlc3RfZnVua3lfcGFyZW5zIChzZWxmKToKKyAgICAgICAgIyBTZWNvbmQgcGFydCBvZiBTRiBidWcgIzU5NjQzNDogbG9uZyBvcHRpb24gc3RyaW5ncyBpbnNpZGUKKyAgICAgICAgIyBwYXJlbnRoZXNlcy4KKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgiZm9vICgtLW9wdGlvbikgYmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICIgIiwgIigtLW9wdGlvbikiLCAiICIsICJiYXIiXSkKKworICAgICAgICAjIFJlbGF0ZWQgc3R1ZmYgLS0gbWFrZSBzdXJlIHBhcmVucyB3b3JrIGluIHNpbXBsZXIgY29udGV4dHMuCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoImZvbyAoYmFyKSBiYXoiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgIiAiLCAiKGJhcikiLCAiICIsICJiYXoiXSkKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgiYmxhaCAoZGluZyBkb25nKSwgd3ViYmEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiYmxhaCIsICIgIiwgIihkaW5nIiwgIiAiLCAiZG9uZyksIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLCAid3ViYmEiXSkKKworICAgIGRlZiB0ZXN0X2Ryb3Bfd2hpdGVzcGFjZV9mYWxzZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGRyb3Bfd2hpdGVzcGFjZT1GYWxzZSBwcmVzZXJ2ZXMgd2hpdGVzcGFjZS4KKyAgICAgICAgIyBTRiBwYXRjaCAjMTU4MTA3MworICAgICAgICB0ZXh0ID0gIiBUaGlzIGlzIGEgICAgc2VudGVuY2Ugd2l0aCAgICAgbXVjaCB3aGl0ZXNwYWNlLiIKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgVGhpcyBpcyBhIiwgIiAgICAiLCAic2VudGVuY2UgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCAgICAgIiwgIm11Y2ggd2hpdGUiLCAic3BhY2UuIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBkcm9wX3doaXRlc3BhY2U9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9kcm9wX3doaXRlc3BhY2VfZmFsc2Vfd2hpdGVzcGFjZV9vbmx5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgZHJvcF93aGl0ZXNwYWNlPUZhbHNlIHByZXNlcnZlcyBhIHdoaXRlc3BhY2Utb25seSBzdHJpbmcuCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgiICAgIiwgNiwgWyIgICAiXSwgZHJvcF93aGl0ZXNwYWNlPUZhbHNlKQorCisgICAgZGVmIHRlc3RfZHJvcF93aGl0ZXNwYWNlX2ZhbHNlX3doaXRlc3BhY2Vfb25seV93aXRoX2luZGVudChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBnZXRzIGluZGVudGVkICh3aGVuCisgICAgICAgICMgZHJvcF93aGl0ZXNwYWNlIGlzIEZhbHNlKS4KKyAgICAgICAgc2VsZi5jaGVja193cmFwKCIgICAiLCA2LCBbIiAgICAgIl0sIGRyb3Bfd2hpdGVzcGFjZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PSIgICIpCisKKyAgICBkZWYgdGVzdF9kcm9wX3doaXRlc3BhY2Vfd2hpdGVzcGFjZV9vbmx5KHNlbGYpOgorICAgICAgICAjIENoZWNrIGRyb3Bfd2hpdGVzcGFjZSBvbiBhIHdoaXRlc3BhY2Utb25seSBzdHJpbmcuCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgiICAiLCA2LCBbXSkKKworICAgIGRlZiB0ZXN0X2Ryb3Bfd2hpdGVzcGFjZV9sZWFkaW5nX3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBkcm9wX3doaXRlc3BhY2UgZG9lcyBub3QgZHJvcCBsZWFkaW5nIHdoaXRlc3BhY2UgKGlmCisgICAgICAgICMgZm9sbG93ZWQgYnkgbm9uLXdoaXRlc3BhY2UpLgorICAgICAgICAjIFNGIGJ1ZyAjNjIyODQ5IHJlcG9ydGVkIGluY29uc2lzdGVudCBoYW5kbGluZyBvZiBsZWFkaW5nCisgICAgICAgICMgd2hpdGVzcGFjZTsgbGV0J3MgdGVzdCB0aGF0IGEgYml0LCBzaGFsbCB3ZT8KKyAgICAgICAgdGV4dCA9ICIgVGhpcyBpcyBhIHNlbnRlbmNlIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlLiIKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDUwLAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgVGhpcyBpcyBhIHNlbnRlbmNlIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlLiJdKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMzAsCisgICAgICAgICAgICAgICAgICAgICAgICBbIiBUaGlzIGlzIGEgc2VudGVuY2Ugd2l0aCIsICJsZWFkaW5nIHdoaXRlc3BhY2UuIl0pCisKKyAgICBkZWYgdGVzdF9kcm9wX3doaXRlc3BhY2Vfd2hpdGVzcGFjZV9saW5lKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgZHJvcF93aGl0ZXNwYWNlIHNraXBzIHRoZSB3aG9sZSBsaW5lIGlmIGEgbm9uLWxlYWRpbmcKKyAgICAgICAgIyBsaW5lIGNvbnNpc3RzIG9ubHkgb2Ygd2hpdGVzcGFjZS4KKyAgICAgICAgdGV4dCA9ICJhYmNkICAgIGVmZ2giCisgICAgICAgICMgSW5jbHVkZSB0aGUgcmVzdWx0IGZvciBkcm9wX3doaXRlc3BhY2U9RmFsc2UgZm9yIGNvbXBhcmlzb24uCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA2LCBbImFiY2QiLCAiICAgICIsICJlZmdoIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBkcm9wX3doaXRlc3BhY2U9RmFsc2UpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA2LCBbImFiY2QiLCAiZWZnaCJdKQorCisgICAgZGVmIHRlc3RfZHJvcF93aGl0ZXNwYWNlX3doaXRlc3BhY2Vfb25seV93aXRoX2luZGVudChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGluaXRpYWxfaW5kZW50IGlzIG5vdCBhcHBsaWVkIHRvIGEgd2hpdGVzcGFjZS1vbmx5CisgICAgICAgICMgc3RyaW5nLiAgVGhpcyBjaGVja3MgYSBzcGVjaWFsIGNhc2Ugb2YgdGhlIGZhY3QgdGhhdCBkcm9wcGluZworICAgICAgICAjIHdoaXRlc3BhY2Ugb2NjdXJzIGJlZm9yZSBpbmRlbnRpbmcuCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgiICAiLCA2LCBbXSwgaW5pdGlhbF9pbmRlbnQ9IisrIikKKworICAgIGRlZiB0ZXN0X2Ryb3Bfd2hpdGVzcGFjZV93aGl0ZXNwYWNlX2luZGVudChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGRyb3Bfd2hpdGVzcGFjZSBkb2VzIG5vdCBkcm9wIHdoaXRlc3BhY2UgaW5kZW50cy4KKyAgICAgICAgIyBUaGlzIGNoZWNrcyBhIHNwZWNpYWwgY2FzZSBvZiB0aGUgZmFjdCB0aGF0IGRyb3BwaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgIyBvY2N1cnMgYmVmb3JlIGluZGVudGluZy4KKyAgICAgICAgc2VsZi5jaGVja193cmFwKCJhYmNkIGVmZ2giLCA2LCBbIiAgYWJjZCIsICIgIGVmZ2giXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PSIgICIsIHN1YnNlcXVlbnRfaW5kZW50PSIgICIpCisKKyAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAgICAgIyAqVmVyeSogc2ltcGxlIHRlc3Qgb2Ygd3JhcHBpbmcgVW5pY29kZSBzdHJpbmdzLiAgSSdtIHN1cmUKKyAgICAgICAgICAgICMgdGhlcmUncyBtb3JlIHRvIGl0IHRoYW4gdGhpcywgYnV0IGxldCdzIGF0IGxlYXN0IG1ha2UKKyAgICAgICAgICAgICMgc3VyZSB0ZXh0d3JhcCBkb2Vzbid0IGNyYXNoIG9uIFVuaWNvZGUgaW5wdXQhCisgICAgICAgICAgICB0ZXh0ID0gdSJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdG9kYXk/IgorICAgICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDUwLCBbdSJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdG9kYXk/Il0pCisgICAgICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMjAsIFt1IkhlbGxvIHRoZXJlLCBob3cgYXJlIiwgInlvdSB0b2RheT8iXSkKKyAgICAgICAgICAgIG9saW5lcyA9IHNlbGYud3JhcHBlci53cmFwKHRleHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2xpbmVzLCBsaXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9saW5lc1swXSwgdW5pY29kZSkKKyAgICAgICAgICAgIG90ZXh0ID0gc2VsZi53cmFwcGVyLmZpbGwodGV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvdGV4dCwgdW5pY29kZSkKKworICAgICAgICBkZWYgdGVzdF9ub19zcGxpdF9hdF91bWxhdXQoc2VsZik6CisgICAgICAgICAgICB0ZXh0ID0gdSJEaWUgRW1wZlx4ZTRuZ2VyLUF1c3dhaGwiCisgICAgICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMTMsIFt1IkRpZSIsIHUiRW1wZlx4ZTRuZ2VyLSIsIHUiQXVzd2FobCJdKQorCisgICAgICAgIGRlZiB0ZXN0X3VtbGF1dF9mb2xsb3dlZF9ieV9kYXNoKHNlbGYpOgorICAgICAgICAgICAgdGV4dCA9IHUiYWEgXHhlNFx4ZTQtXHhlNFx4ZTQiCisgICAgICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNywgW3UiYWEgXHhlNFx4ZTQtIiwgdSJceGU0XHhlNCJdKQorCisgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHN0YW5kYXJkIF9zcGxpdCgpIG1ldGhvZCB3b3JrcyBhcyBhZHZlcnRpc2VkCisgICAgICAgICMgaW4gdGhlIGNvbW1lbnRzCisKKyAgICAgICAgdGV4dCA9ICJIZWxsbyB0aGVyZSAtLSB5b3UgZ29vZi1iYWxsLCB1c2UgdGhlIC1iIG9wdGlvbiEiCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi53cmFwcGVyLl9zcGxpdCh0ZXh0KQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwKKyAgICAgICAgICAgICBbIkhlbGxvIiwgIiAiLCAidGhlcmUiLCAiICIsICItLSIsICIgIiwgInlvdSIsICIgIiwgImdvb2YtIiwKKyAgICAgICAgICAgICAgImJhbGwsIiwgIiAiLCAidXNlIiwgIiAiLCAidGhlIiwgIiAiLCAiLWIiLCAiICIsICAib3B0aW9uISJdKQorCisgICAgZGVmIHRlc3RfYnJlYWtfb25faHlwaGVucyhzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgYnJlYWtfb25faHlwaGVucyBhdHRyaWJ1dGVzIHdvcmsKKyAgICAgICAgdGV4dCA9ICJ5YWJhIGRhYmEtZG9vIgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMTAsIFsieWFiYSBkYWJhLSIsICJkb28iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrX29uX2h5cGhlbnM9VHJ1ZSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDEwLCBbInlhYmEiLCAiZGFiYS1kb28iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrX29uX2h5cGhlbnM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9iYWRfd2lkdGgoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgd2lkdGggPD0gMCBpcyBjYXVnaHQuCisgICAgICAgIHRleHQgPSAiV2hhdGV2ZXIsIGl0IGRvZXNuJ3QgbWF0dGVyLiIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgd3JhcCwgdGV4dCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgd3JhcCwgdGV4dCwgLTEpCisKKworY2xhc3MgTG9uZ1dvcmRUZXN0Q2FzZSAoQmFzZVRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYud3JhcHBlciA9IFRleHRXcmFwcGVyKCkKKyAgICAgICAgc2VsZi50ZXh0ID0gJycnXAorRGlkIHlvdSBzYXkgInN1cGVyY2FsaWZyYWdpbGlzdGljZXhwaWFsaWRvY2lvdXM/IgorSG93ICpkbyogeW91IHNwZWxsIHRoYXQgb2RkIHdvcmQsIGFueXdheXM/CisnJycKKworICAgIGRlZiB0ZXN0X2JyZWFrX2xvbmcoc2VsZik6CisgICAgICAgICMgV3JhcCB0ZXh0IHdpdGggbG9uZyB3b3JkcyBhbmQgbG90cyBvZiBwdW5jdHVhdGlvbgorCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDMwLAorICAgICAgICAgICAgICAgICAgICAgICAgWydEaWQgeW91IHNheSAic3VwZXJjYWxpZnJhZ2lsaXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0aWNleHBpYWxpZG9jaW91cz8iIEhvdyAqZG8qJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAneW91IHNwZWxsIHRoYXQgb2RkIHdvcmQsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYW55d2F5cz8nXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgNTAsCisgICAgICAgICAgICAgICAgICAgICAgICBbJ0RpZCB5b3Ugc2F5ICJzdXBlcmNhbGlmcmFnaWxpc3RpY2V4cGlhbGlkb2Npb3VzPyInLAorICAgICAgICAgICAgICAgICAgICAgICAgICdIb3cgKmRvKiB5b3Ugc3BlbGwgdGhhdCBvZGQgd29yZCwgYW55d2F5cz8nXSkKKworICAgICAgICAjIFNGIGJ1ZyA3OTc2NTAuICBQcmV2ZW50IGFuIGluZmluaXRlIGxvb3AgYnkgbWFraW5nIHN1cmUgdGhhdCBhdAorICAgICAgICAjIGxlYXN0IG9uZSBjaGFyYWN0ZXIgZ2V0cyBzcGxpdCBvZmYgb24gZXZlcnkgcGFzcy4KKyAgICAgICAgc2VsZi5jaGVja193cmFwKCctJyoxMCsnaGVsbG8nLCAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnLS0tLS0tLS0tLScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgIGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgIGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICBvJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudCA9ICcgJyoxNSkKKworICAgICAgICAjIGJ1ZyAxMTQ2LiAgUHJldmVudCBhIGxvbmcgd29yZCB0byBiZSB3cm9uZ2x5IHdyYXBwZWQgd2hlbiB0aGUKKyAgICAgICAgIyBwcmVjZWRpbmcgd29yZCBpcyBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgc2hvcnRlciB0aGFuIHRoZSB3aWR0aAorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnRGlkIHlvdSBzYXkgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnInN1cGVyY2FsaWZyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWdpbGlzdGljZXhwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaWFsaWRvY2lvdXM/JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnIiBIb3cgKmRvKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3lvdSBzcGVsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoYXQgb2RkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnd29yZCwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhbnl3YXlzPyddKQorCisgICAgZGVmIHRlc3Rfbm9icmVha19sb25nKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBicmVha19sb25nX3dvcmRzIGRpc2FibGVkCisgICAgICAgIHNlbGYud3JhcHBlci5icmVha19sb25nX3dvcmRzID0gMAorICAgICAgICBzZWxmLndyYXBwZXIud2lkdGggPSAzMAorICAgICAgICBleHBlY3QgPSBbJ0RpZCB5b3Ugc2F5JywKKyAgICAgICAgICAgICAgICAgICcic3VwZXJjYWxpZnJhZ2lsaXN0aWNleHBpYWxpZG9jaW91cz8iJywKKyAgICAgICAgICAgICAgICAgICdIb3cgKmRvKiB5b3Ugc3BlbGwgdGhhdCBvZGQnLAorICAgICAgICAgICAgICAgICAgJ3dvcmQsIGFueXdheXM/JworICAgICAgICAgICAgICAgICAgXQorICAgICAgICByZXN1bHQgPSBzZWxmLndyYXBwZXIud3JhcChzZWxmLnRleHQpCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCisKKyAgICAgICAgIyBTYW1lIHRoaW5nIHdpdGgga3dhcmdzIHBhc3NlZCB0byBzdGFuZGFsb25lIHdyYXAoKSBmdW5jdGlvbi4KKyAgICAgICAgcmVzdWx0ID0gd3JhcChzZWxmLnRleHQsIHdpZHRoPTMwLCBicmVha19sb25nX3dvcmRzPTApCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCisKKworY2xhc3MgSW5kZW50VGVzdENhc2VzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICAjIGNhbGxlZCBiZWZvcmUgZWFjaCB0ZXN0IG1ldGhvZAorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZXh0ID0gJycnXAorVGhpcyBwYXJhZ3JhcGggd2lsbCBiZSBmaWxsZWQsIGZpcnN0IHdpdGhvdXQgYW55IGluZGVudGF0aW9uLAorYW5kIHRoZW4gd2l0aCBzb21lIChpbmNsdWRpbmcgYSBoYW5naW5nIGluZGVudCkuJycnCisKKworICAgIGRlZiB0ZXN0X2ZpbGwoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgZmlsbCgpIG1ldGhvZAorCisgICAgICAgIGV4cGVjdCA9ICcnJ1wKK1RoaXMgcGFyYWdyYXBoIHdpbGwgYmUgZmlsbGVkLCBmaXJzdAord2l0aG91dCBhbnkgaW5kZW50YXRpb24sIGFuZCB0aGVuIHdpdGgKK3NvbWUgKGluY2x1ZGluZyBhIGhhbmdpbmcgaW5kZW50KS4nJycKKworICAgICAgICByZXN1bHQgPSBmaWxsKHNlbGYudGV4dCwgNDApCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCisKKworICAgIGRlZiB0ZXN0X2luaXRpYWxfaW5kZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgaW5pdGlhbF9pbmRlbnQgcGFyYW1ldGVyCisKKyAgICAgICAgZXhwZWN0ID0gWyIgICAgIFRoaXMgcGFyYWdyYXBoIHdpbGwgYmUgZmlsbGVkLCIsCisgICAgICAgICAgICAgICAgICAiZmlyc3Qgd2l0aG91dCBhbnkgaW5kZW50YXRpb24sIGFuZCB0aGVuIiwKKyAgICAgICAgICAgICAgICAgICJ3aXRoIHNvbWUgKGluY2x1ZGluZyBhIGhhbmdpbmcgaW5kZW50KS4iXQorICAgICAgICByZXN1bHQgPSB3cmFwKHNlbGYudGV4dCwgNDAsIGluaXRpYWxfaW5kZW50PSIgICAgICIpCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCisKKyAgICAgICAgZXhwZWN0ID0gIlxuIi5qb2luKGV4cGVjdCkKKyAgICAgICAgcmVzdWx0ID0gZmlsbChzZWxmLnRleHQsIDQwLCBpbml0aWFsX2luZGVudD0iICAgICAiKQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisKKyAgICBkZWYgdGVzdF9zdWJzZXF1ZW50X2luZGVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHN1YnNlcXVlbnRfaW5kZW50IHBhcmFtZXRlcgorCisgICAgICAgIGV4cGVjdCA9ICcnJ1wKKyAgKiBUaGlzIHBhcmFncmFwaCB3aWxsIGJlIGZpbGxlZCwgZmlyc3QKKyAgICB3aXRob3V0IGFueSBpbmRlbnRhdGlvbiwgYW5kIHRoZW4KKyAgICB3aXRoIHNvbWUgKGluY2x1ZGluZyBhIGhhbmdpbmcKKyAgICBpbmRlbnQpLicnJworCisgICAgICAgIHJlc3VsdCA9IGZpbGwoc2VsZi50ZXh0LCA0MCwKKyAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD0iICAqICIsIHN1YnNlcXVlbnRfaW5kZW50PSIgICAgIikKKyAgICAgICAgc2VsZi5jaGVjayhyZXN1bHQsIGV4cGVjdCkKKworCisjIERlc3BpdGUgdGhlIHNpbWlsYXIgbmFtZXMsIERlZGVudFRlc3RDYXNlIGlzICpub3QqIHRoZSBpbnZlcnNlCisjIG9mIEluZGVudFRlc3RDYXNlIQorY2xhc3MgRGVkZW50VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydFVuY2hhbmdlZChzZWxmLCB0ZXh0KToKKyAgICAgICAgIiIiYXNzZXJ0IHRoYXQgZGVkZW50KCkgaGFzIG5vIGVmZmVjdCBvbiAndGV4dCciIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBkZWRlbnQodGV4dCkpCisKKyAgICBkZWYgdGVzdF9kZWRlbnRfbm9tYXJnaW4oc2VsZik6CisgICAgICAgICMgTm8gbGluZXMgaW5kZW50ZWQuCisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUuXG5Ib3cgYXJlIHlvdT9cbk9oIGdvb2QsIEknbSBnbGFkLiIKKyAgICAgICAgc2VsZi5hc3NlcnRVbmNoYW5nZWQodGV4dCkKKworICAgICAgICAjIFNpbWlsYXIsIHdpdGggYSBibGFuayBsaW5lLgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLlxuXG5Cb28hIgorICAgICAgICBzZWxmLmFzc2VydFVuY2hhbmdlZCh0ZXh0KQorCisgICAgICAgICMgU29tZSBsaW5lcyBpbmRlbnRlZCwgYnV0IG92ZXJhbGwgbWFyZ2luIGlzIHN0aWxsIHplcm8uCisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUuXG4gIFRoaXMgaXMgaW5kZW50ZWQuIgorICAgICAgICBzZWxmLmFzc2VydFVuY2hhbmdlZCh0ZXh0KQorCisgICAgICAgICMgQWdhaW4sIGFkZCBhIGJsYW5rIGxpbmUuCisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUuXG5cbiAgQm9vIVxuIgorICAgICAgICBzZWxmLmFzc2VydFVuY2hhbmdlZCh0ZXh0KQorCisgICAgZGVmIHRlc3RfZGVkZW50X2V2ZW4oc2VsZik6CisgICAgICAgICMgQWxsIGxpbmVzIGluZGVudGVkIGJ5IHR3byBzcGFjZXMuCisgICAgICAgIHRleHQgPSAiICBIZWxsbyB0aGVyZS5cbiAgSG93IGFyZSB5YT9cbiAgT2ggZ29vZC4iCisgICAgICAgIGV4cGVjdCA9ICJIZWxsbyB0aGVyZS5cbkhvdyBhcmUgeWE/XG5PaCBnb29kLiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKworICAgICAgICAjIFNhbWUsIHdpdGggYmxhbmsgbGluZXMuCisgICAgICAgIHRleHQgPSAiICBIZWxsbyB0aGVyZS5cblxuICBIb3cgYXJlIHlhP1xuICBPaCBnb29kLlxuIgorICAgICAgICBleHBlY3QgPSAiSGVsbG8gdGhlcmUuXG5cbkhvdyBhcmUgeWE/XG5PaCBnb29kLlxuIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQorCisgICAgICAgICMgTm93IGluZGVudCBvbmUgb2YgdGhlIGJsYW5rIGxpbmVzLgorICAgICAgICB0ZXh0ID0gIiAgSGVsbG8gdGhlcmUuXG4gIFxuICBIb3cgYXJlIHlhP1xuICBPaCBnb29kLlxuIgorICAgICAgICBleHBlY3QgPSAiSGVsbG8gdGhlcmUuXG5cbkhvdyBhcmUgeWE/XG5PaCBnb29kLlxuIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQorCisgICAgZGVmIHRlc3RfZGVkZW50X3VuZXZlbihzZWxmKToKKyAgICAgICAgIyBMaW5lcyBpbmRlbnRlZCB1bmV2ZW5seS4KKyAgICAgICAgdGV4dCA9ICcnJ1wKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9vCisgICAgICAgICcnJworICAgICAgICBleHBlY3QgPSAnJydcCitkZWYgZm9vKCk6CisgICAgd2hpbGUgMToKKyAgICAgICAgcmV0dXJuIGZvbworJycnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisKKyAgICAgICAgIyBVbmV2ZW4gaW5kZW50YXRpb24gd2l0aCBhIGJsYW5rIGxpbmUuCisgICAgICAgIHRleHQgPSAiICBGb29cbiAgICBCYXJcblxuICAgQmF6XG4iCisgICAgICAgIGV4cGVjdCA9ICJGb29cbiAgQmFyXG5cbiBCYXpcbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKworICAgICAgICAjIFVuZXZlbiBpbmRlbnRhdGlvbiB3aXRoIGEgd2hpdGVzcGFjZS1vbmx5IGxpbmUuCisgICAgICAgIHRleHQgPSAiICBGb29cbiAgICBCYXJcbiBcbiAgIEJhelxuIgorICAgICAgICBleHBlY3QgPSAiRm9vXG4gIEJhclxuXG4gQmF6XG4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisKKyAgICAjIGRlZGVudCgpIHNob3VsZCBub3QgbWFuZ2xlIGludGVybmFsIHRhYnMKKyAgICBkZWYgdGVzdF9kZWRlbnRfcHJlc2VydmVfaW50ZXJuYWxfdGFicyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICIgIGhlbGxvXHR0aGVyZVxuICBob3cgYXJlXHR5b3U/IgorICAgICAgICBleHBlY3QgPSAiaGVsbG9cdHRoZXJlXG5ob3cgYXJlXHR5b3U/IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQorCisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgaXQgcHJlc2VydmVzIHRhYnMgd2hlbiBpdCdzIG5vdCBtYWtpbmcgYW55CisgICAgICAgICMgY2hhbmdlcyBhdCBhbGwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudChleHBlY3QpKQorCisgICAgIyBkZWRlbnQoKSBzaG91bGQgbm90IG1hbmdsZSB0YWJzIGluIHRoZSBtYXJnaW4gKGkuZS4KKyAgICAjIHRhYnMgYW5kIHNwYWNlcyBib3RoIGNvdW50IGFzIG1hcmdpbiwgYnV0IGFyZSAqbm90KgorICAgICMgY29uc2lkZXJlZCBlcXVpdmFsZW50KQorICAgIGRlZiB0ZXN0X2RlZGVudF9wcmVzZXJ2ZV9tYXJnaW5fdGFicyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICIgIGhlbGxvIHRoZXJlXG5cdGhvdyBhcmUgeW91PyIKKyAgICAgICAgc2VsZi5hc3NlcnRVbmNoYW5nZWQodGV4dCkKKworICAgICAgICAjIHNhbWUgZWZmZWN0IGV2ZW4gaWYgd2UgaGF2ZSA4IHNwYWNlcworICAgICAgICB0ZXh0ID0gIiAgICAgICAgaGVsbG8gdGhlcmVcblx0aG93IGFyZSB5b3U/IgorICAgICAgICBzZWxmLmFzc2VydFVuY2hhbmdlZCh0ZXh0KQorCisgICAgICAgICMgZGVkZW50KCkgb25seSByZW1vdmVzIHdoaXRlc3BhY2UgdGhhdCBjYW4gYmUgdW5pZm9ybWx5IHJlbW92ZWQhCisgICAgICAgIHRleHQgPSAiXHRoZWxsbyB0aGVyZVxuXHRob3cgYXJlIHlvdT8iCisgICAgICAgIGV4cGVjdCA9ICJoZWxsbyB0aGVyZVxuaG93IGFyZSB5b3U/IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQorCisgICAgICAgIHRleHQgPSAiICBcdGhlbGxvIHRoZXJlXG4gIFx0aG93IGFyZSB5b3U/IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQorCisgICAgICAgIHRleHQgPSAiICBcdCAgaGVsbG8gdGhlcmVcbiAgXHQgIGhvdyBhcmUgeW91PyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKworICAgICAgICB0ZXh0ID0gIiAgXHRoZWxsbyB0aGVyZVxuICBcdCAgaG93IGFyZSB5b3U/IgorICAgICAgICBleHBlY3QgPSAiaGVsbG8gdGhlcmVcbiAgaG93IGFyZSB5b3U/IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFdyYXBUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvbmdXb3JkVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRlbnRUZXN0Q2FzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWRlbnRUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMzg4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKQEAgLTAsMCArMSwyNjUgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcmFuZG9tCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordGhyZWFkID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZCcpCitpbXBvcnQgdGltZQoraW1wb3J0IHN5cworaW1wb3J0IHdlYWtyZWYKKworZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCisKK05VTVRBU0tTID0gMTAKK05VTVRSSVBTID0gMworCisKK19wcmludF9tdXRleCA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKworZGVmIHZlcmJvc2VfcHJpbnQoYXJnKToKKyAgICAiIiJIZWxwZXIgZnVuY3Rpb24gZm9yIHByaW50aW5nIG91dCBkZWJ1Z2dpbmcgb3V0cHV0LiIiIgorICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICB3aXRoIF9wcmludF9tdXRleDoKKyAgICAgICAgICAgIHByaW50IGFyZworCisKK2NsYXNzIEJhc2ljVGhyZWFkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZG9uZV9tdXRleCA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc2VsZi5kb25lX211dGV4LmFjcXVpcmUoKQorICAgICAgICBzZWxmLnJ1bm5pbmdfbXV0ZXggPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIHNlbGYucmFuZG9tX211dGV4ID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzZWxmLmNyZWF0ZWQgPSAwCisgICAgICAgIHNlbGYucnVubmluZyA9IDAKKyAgICAgICAgc2VsZi5uZXh0X2lkZW50ID0gMAorCisKK2NsYXNzIFRocmVhZFJ1bm5pbmdUZXN0cyhCYXNpY1RocmVhZFRlc3QpOgorCisgICAgZGVmIG5ld3Rhc2soc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5ydW5uaW5nX211dGV4OgorICAgICAgICAgICAgc2VsZi5uZXh0X2lkZW50ICs9IDEKKyAgICAgICAgICAgIHZlcmJvc2VfcHJpbnQoImNyZWF0aW5nIHRhc2sgJXMiICUgc2VsZi5uZXh0X2lkZW50KQorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoc2VsZi50YXNrLCAoc2VsZi5uZXh0X2lkZW50LCkpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZWQgKz0gMQorICAgICAgICAgICAgc2VsZi5ydW5uaW5nICs9IDEKKworICAgIGRlZiB0YXNrKHNlbGYsIGlkZW50KToKKyAgICAgICAgd2l0aCBzZWxmLnJhbmRvbV9tdXRleDoKKyAgICAgICAgICAgIGRlbGF5ID0gcmFuZG9tLnJhbmRvbSgpIC8gMTAwMDAuMAorICAgICAgICB2ZXJib3NlX3ByaW50KCJ0YXNrICVzIHdpbGwgcnVuIGZvciAlc3VzIiAlIChpZGVudCwgcm91bmQoZGVsYXkqMWU2KSkpCisgICAgICAgIHRpbWUuc2xlZXAoZGVsYXkpCisgICAgICAgIHZlcmJvc2VfcHJpbnQoInRhc2sgJXMgZG9uZSIgJSBpZGVudCkKKyAgICAgICAgd2l0aCBzZWxmLnJ1bm5pbmdfbXV0ZXg6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgLT0gMQorICAgICAgICAgICAgaWYgc2VsZi5jcmVhdGVkID09IE5VTVRBU0tTIGFuZCBzZWxmLnJ1bm5pbmcgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmRvbmVfbXV0ZXgucmVsZWFzZSgpCisKKyAgICBkZWYgdGVzdF9zdGFydGluZ190aHJlYWRzKHNlbGYpOgorICAgICAgICAjIEJhc2ljIHRlc3QgZm9yIHRocmVhZCBjcmVhdGlvbi4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNVEFTS1MpOgorICAgICAgICAgICAgc2VsZi5uZXd0YXNrKCkKKyAgICAgICAgdmVyYm9zZV9wcmludCgid2FpdGluZyBmb3IgdGFza3MgdG8gY29tcGxldGUuLi4iKQorICAgICAgICBzZWxmLmRvbmVfbXV0ZXguYWNxdWlyZSgpCisgICAgICAgIHZlcmJvc2VfcHJpbnQoImFsbCB0YXNrcyBkb25lIikKKworICAgIGRlZiB0ZXN0X3N0YWNrX3NpemUoc2VsZik6CisgICAgICAgICMgVmFyaW91cyBzdGFjayBzaXplIHRlc3RzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5zdGFja19zaXplKCksIDAsICJpbml0aWFsIHN0YWNrIHNpemUgaXMgbm90IDAiKQorCisgICAgICAgIHRocmVhZC5zdGFja19zaXplKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhyZWFkLnN0YWNrX3NpemUoKSwgMCwgInN0YWNrX3NpemUgbm90IHJlc2V0IHRvIGRlZmF1bHQiKQorCisgICAgICAgIGlmIG9zLm5hbWUgbm90IGluICgibnQiLCAib3MyIiwgInBvc2l4Iik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0c3Nfc3VwcG9ydGVkID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSg0MDk2KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHZlcmJvc2VfcHJpbnQoImNhdWdodCBleHBlY3RlZCBWYWx1ZUVycm9yIHNldHRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFja19zaXplKDQwOTYpIikKKyAgICAgICAgZXhjZXB0IHRocmVhZC5lcnJvcjoKKyAgICAgICAgICAgIHRzc19zdXBwb3J0ZWQgPSBGYWxzZQorICAgICAgICAgICAgdmVyYm9zZV9wcmludCgicGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyB0aHJlYWQgc3RhY2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXplIikKKworICAgICAgICBpZiB0c3Nfc3VwcG9ydGVkOgorICAgICAgICAgICAgZmFpbF9tc2cgPSAic3RhY2tfc2l6ZSglZCkgZmFpbGVkIC0gc2hvdWxkIHN1Y2NlZWQiCisgICAgICAgICAgICBmb3IgdHNzIGluICgyNjIxNDQsIDB4MTAwMDAwLCAwKToKKyAgICAgICAgICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSh0c3MpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuc3RhY2tfc2l6ZSgpLCB0c3MsIGZhaWxfbXNnICUgdHNzKQorICAgICAgICAgICAgICAgIHZlcmJvc2VfcHJpbnQoInN1Y2Nlc3NmdWxseSBzZXQgc3RhY2tfc2l6ZSglZCkiICUgdHNzKQorCisgICAgICAgICAgICBmb3IgdHNzIGluICgyNjIxNDQsIDB4MTAwMDAwKToKKyAgICAgICAgICAgICAgICB2ZXJib3NlX3ByaW50KCJ0cnlpbmcgc3RhY2tfc2l6ZSA9ICglZCkiICUgdHNzKQorICAgICAgICAgICAgICAgIHNlbGYubmV4dF9pZGVudCA9IDAKKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWQgPSAwCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNVEFTS1MpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld3Rhc2soKQorCisgICAgICAgICAgICAgICAgdmVyYm9zZV9wcmludCgid2FpdGluZyBmb3IgYWxsIHRhc2tzIHRvIGNvbXBsZXRlIikKKyAgICAgICAgICAgICAgICBzZWxmLmRvbmVfbXV0ZXguYWNxdWlyZSgpCisgICAgICAgICAgICAgICAgdmVyYm9zZV9wcmludCgiYWxsIHRhc2tzIGRvbmUiKQorCisgICAgICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSgwKQorCisgICAgZGVmIHRlc3RfX2NvdW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIF9jb3VudCgpIGZ1bmN0aW9uLgorICAgICAgICBvcmlnID0gdGhyZWFkLl9jb3VudCgpCisgICAgICAgIG11dCA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgbXV0LmFjcXVpcmUoKQorICAgICAgICBzdGFydGVkID0gW10KKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHN0YXJ0ZWQuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICBtdXQuYWNxdWlyZSgpCisgICAgICAgICAgICBtdXQucmVsZWFzZSgpCisgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHRhc2ssICgpKQorICAgICAgICB3aGlsZSBub3Qgc3RhcnRlZDoKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuX2NvdW50KCksIG9yaWcgKyAxKQorICAgICAgICAjIEFsbG93IHRoZSB0YXNrIHRvIGZpbmlzaC4KKyAgICAgICAgbXV0LnJlbGVhc2UoKQorICAgICAgICAjIFRoZSBvbmx5IHJlbGlhYmxlIHdheSB0byBiZSBzdXJlIHRoYXQgdGhlIHRocmVhZCBlbmRlZCBmcm9tIHRoZQorICAgICAgICAjIGludGVycHJldGVyJ3MgcG9pbnQgb2YgdmlldyBpcyB0byB3YWl0IGZvciB0aGUgZnVuY3Rpb24gb2JqZWN0IHRvIGJlCisgICAgICAgICMgZGVzdHJveWVkLgorICAgICAgICBkb25lID0gW10KKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0YXNrLCBsYW1iZGEgXzogZG9uZS5hcHBlbmQoTm9uZSkpCisgICAgICAgIGRlbCB0YXNrCisgICAgICAgIHdoaWxlIG5vdCBkb25lOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5fY291bnQoKSwgb3JpZykKKworICAgIGRlZiB0ZXN0X3NhdmVfZXhjZXB0aW9uX3N0YXRlX29uX2Vycm9yKHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAjMTQ0NzQKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHN0YXJ0ZWQucmVsZWFzZSgpCisgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgorICAgICAgICBkZWYgbXl3cml0ZShzZWxmLCAqYXJncyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmVhbF93cml0ZShzZWxmLCAqYXJncykKKyAgICAgICAgYyA9IHRocmVhZC5fY291bnQoKQorICAgICAgICBzdGFydGVkID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgIHJlYWxfd3JpdGUgPSBzdGRlcnIud3JpdGUKKyAgICAgICAgICAgIHN0ZGVyci53cml0ZSA9IG15d3JpdGUKKyAgICAgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZCh0YXNrLCAoKSkKKyAgICAgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgICAgICB3aGlsZSB0aHJlYWQuX2NvdW50KCkgPiBjOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiVHJhY2ViYWNrIiwgc3RkZXJyLmdldHZhbHVlKCkpCisKKworY2xhc3MgQmFycmllcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtX3RocmVhZHMpOgorICAgICAgICBzZWxmLm51bV90aHJlYWRzID0gbnVtX3RocmVhZHMKKyAgICAgICAgc2VsZi53YWl0aW5nID0gMAorICAgICAgICBzZWxmLmNoZWNraW5fbXV0ZXggID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzZWxmLmNoZWNrb3V0X211dGV4ID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzZWxmLmNoZWNrb3V0X211dGV4LmFjcXVpcmUoKQorCisgICAgZGVmIGVudGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNraW5fbXV0ZXguYWNxdWlyZSgpCisgICAgICAgIHNlbGYud2FpdGluZyA9IHNlbGYud2FpdGluZyArIDEKKyAgICAgICAgaWYgc2VsZi53YWl0aW5nID09IHNlbGYubnVtX3RocmVhZHM6CisgICAgICAgICAgICBzZWxmLndhaXRpbmcgPSBzZWxmLm51bV90aHJlYWRzIC0gMQorICAgICAgICAgICAgc2VsZi5jaGVja291dF9tdXRleC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmNoZWNraW5fbXV0ZXgucmVsZWFzZSgpCisKKyAgICAgICAgc2VsZi5jaGVja291dF9tdXRleC5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi53YWl0aW5nID0gc2VsZi53YWl0aW5nIC0gMQorICAgICAgICBpZiBzZWxmLndhaXRpbmcgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tpbl9tdXRleC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmNoZWNrb3V0X211dGV4LnJlbGVhc2UoKQorCisKK2NsYXNzIEJhcnJpZXJUZXN0KEJhc2ljVGhyZWFkVGVzdCk6CisKKyAgICBkZWYgdGVzdF9iYXJyaWVyKHNlbGYpOgorICAgICAgICBzZWxmLmJhciA9IEJhcnJpZXIoTlVNVEFTS1MpCisgICAgICAgIHNlbGYucnVubmluZyA9IE5VTVRBU0tTCisgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTVRBU0tTKToKKyAgICAgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHNlbGYudGFzazIsIChpLCkpCisgICAgICAgIHZlcmJvc2VfcHJpbnQoIndhaXRpbmcgZm9yIHRhc2tzIHRvIGVuZCIpCisgICAgICAgIHNlbGYuZG9uZV9tdXRleC5hY3F1aXJlKCkKKyAgICAgICAgdmVyYm9zZV9wcmludCgidGFza3MgZG9uZSIpCisKKyAgICBkZWYgdGFzazIoc2VsZiwgaWRlbnQpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1UUklQUyk6CisgICAgICAgICAgICBpZiBpZGVudCA9PSAwOgorICAgICAgICAgICAgICAgICMgZ2l2ZSBpdCBhIGdvb2QgY2hhbmNlIHRvIGVudGVyIHRoZSBuZXh0CisgICAgICAgICAgICAgICAgIyBiYXJyaWVyIGJlZm9yZSB0aGUgb3RoZXJzIGFyZSBhbGwgb3V0CisgICAgICAgICAgICAgICAgIyBvZiB0aGUgY3VycmVudCBvbmUKKyAgICAgICAgICAgICAgICBkZWxheSA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnJhbmRvbV9tdXRleDoKKyAgICAgICAgICAgICAgICAgICAgZGVsYXkgPSByYW5kb20ucmFuZG9tKCkgLyAxMDAwMC4wCisgICAgICAgICAgICB2ZXJib3NlX3ByaW50KCJ0YXNrICVzIHdpbGwgcnVuIGZvciAlc3VzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChpZGVudCwgcm91bmQoZGVsYXkgKiAxZTYpKSkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoZGVsYXkpCisgICAgICAgICAgICB2ZXJib3NlX3ByaW50KCJ0YXNrICVzIGVudGVyaW5nICVzIiAlIChpZGVudCwgaSkpCisgICAgICAgICAgICBzZWxmLmJhci5lbnRlcigpCisgICAgICAgICAgICB2ZXJib3NlX3ByaW50KCJ0YXNrICVzIGxlYXZpbmcgYmFycmllciIgJSBpZGVudCkKKyAgICAgICAgd2l0aCBzZWxmLnJ1bm5pbmdfbXV0ZXg6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgLT0gMQorICAgICAgICAgICAgIyBNdXN0IHJlbGVhc2UgbXV0ZXggYmVmb3JlIHJlbGVhc2luZyBkb25lLCBlbHNlIHRoZSBtYWluIHRocmVhZCBjYW4KKyAgICAgICAgICAgICMgZXhpdCBhbmQgc2V0IG11dGV4IHRvIE5vbmUgYXMgcGFydCBvZiBnbG9iYWwgdGVhcmRvd247IHRoZW4KKyAgICAgICAgICAgICMgbXV0ZXgucmVsZWFzZSgpIHJhaXNlcyBBdHRyaWJ1dGVFcnJvci4KKyAgICAgICAgICAgIGZpbmlzaGVkID0gc2VsZi5ydW5uaW5nID09IDAKKyAgICAgICAgaWYgZmluaXNoZWQ6CisgICAgICAgICAgICBzZWxmLmRvbmVfbXV0ZXgucmVsZWFzZSgpCisKKworY2xhc3MgTG9ja1Rlc3RzKGxvY2tfdGVzdHMuTG9ja1Rlc3RzKToKKyAgICBsb2NrdHlwZSA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrCisKKworY2xhc3MgVGVzdEZvcmtJblRocmVhZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRfZmQsIHNlbGYud3JpdGVfZmQgPSBvcy5waXBlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAorICAgICAgICAgICAgICAgICAgICAgIlRoaXMgdGVzdCBpcyBvbmx5IGFwcHJvcHJpYXRlIGZvciBQT1NJWC1saWtlIHN5c3RlbXMuIikKKyAgICBAdGVzdF9zdXBwb3J0LnJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X2ZvcmtpbnRocmVhZChzZWxmKToKKyAgICAgICAgZGVmIHRocmVhZDEoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkgIyBmb3JrIGluIGEgdGhyZWFkCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KDApICMgZXhpdCB0aGUgY2hpbGQKKworICAgICAgICAgICAgaWYgcGlkID09IDA6ICMgY2hpbGQKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzZWxmLnJlYWRfZmQpCisgICAgICAgICAgICAgICAgb3Mud3JpdGUoc2VsZi53cml0ZV9mZCwgIk9LIikKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICAgICAgZWxzZTogIyBwYXJlbnQKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzZWxmLndyaXRlX2ZkKQorCisgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHRocmVhZDEsICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQoc2VsZi5yZWFkX2ZkLCAyKSwgIk9LIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGZvcmsoKSBpbiB0aHJlYWQiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jbG9zZShzZWxmLnJlYWRfZmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNsb3NlKHNlbGYud3JpdGVfZmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRocmVhZFJ1bm5pbmdUZXN0cywgQmFycmllclRlc3QsIExvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RGb3JrSW5UaHJlYWQpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzFmZGYxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CkBAIC0wLDAgKzEsNzYgQEAKKyMgVGhpcyBpcyBhIHZhcmlhbnQgb2YgdGhlIHZlcnkgb2xkIChlYXJseSA5MCdzKSBmaWxlCisjIERlbW8vdGhyZWFkcy9idWcucHkuICBJdCBzaW1wbHkgcHJvdm9rZXMgYSBudW1iZXIgb2YgdGhyZWFkcyBpbnRvCisjIHRyeWluZyB0byBpbXBvcnQgdGhlIHNhbWUgbW9kdWxlICJhdCB0aGUgc2FtZSB0aW1lIi4KKyMgVGhlcmUgYXJlIG5vIHBsZWFzYW50IGZhaWx1cmUgbW9kZXMgLS0gbW9zdCBsaWtlbHkgaXMgdGhhdCBQeXRob24KKyMgY29tcGxhaW5zIHNldmVyYWwgdGltZXMgYWJvdXQgbW9kdWxlIHJhbmRvbSBoYXZpbmcgbm8gYXR0cmlidXRlCisjIHJhbmRyYW5nZSwgYW5kIHRoZW4gUHl0aG9uIGhhbmdzLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RGYWlsZWQsIGltcG9ydF9tb2R1bGUKK3RocmVhZCA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZCcpCisKK2NyaXRpY2FsX3NlY3Rpb24gPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpCitkb25lID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorCitkZWYgdGFzaygpOgorICAgIGdsb2JhbCBOLCBjcml0aWNhbF9zZWN0aW9uLCBkb25lCisgICAgaW1wb3J0IHJhbmRvbQorICAgIHggPSByYW5kb20ucmFuZHJhbmdlKDEsIDMpCisgICAgY3JpdGljYWxfc2VjdGlvbi5hY3F1aXJlKCkKKyAgICBOIC09IDEKKyAgICAjIE11c3QgcmVsZWFzZSBjcml0aWNhbF9zZWN0aW9uIGJlZm9yZSByZWxlYXNpbmcgZG9uZSwgZWxzZSB0aGUgbWFpbgorICAgICMgdGhyZWFkIGNhbiBleGl0IGFuZCBzZXQgY3JpdGljYWxfc2VjdGlvbiB0byBOb25lIGFzIHBhcnQgb2YgZ2xvYmFsCisgICAgIyB0ZWFyZG93bjsgdGhlbiBjcml0aWNhbF9zZWN0aW9uLnJlbGVhc2UoKSByYWlzZXMgQXR0cmlidXRlRXJyb3IuCisgICAgZmluaXNoZWQgPSBOID09IDAKKyAgICBjcml0aWNhbF9zZWN0aW9uLnJlbGVhc2UoKQorICAgIGlmIGZpbmlzaGVkOgorICAgICAgICBkb25lLnJlbGVhc2UoKQorCitkZWYgdGVzdF9pbXBvcnRfaGFuZ2VycygpOgorICAgIGltcG9ydCBzeXMKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAidGVzdGluZyBpbXBvcnQgaGFuZ2VycyAuLi4iLAorCisgICAgaW1wb3J0IHRlc3QudGhyZWFkZWRfaW1wb3J0X2hhbmdlcnMKKyAgICB0cnk6CisgICAgICAgIGlmIHRlc3QudGhyZWFkZWRfaW1wb3J0X2hhbmdlcnMuZXJyb3JzOgorICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCh0ZXN0LnRocmVhZGVkX2ltcG9ydF9oYW5nZXJzLmVycm9ycykKKyAgICAgICAgZWxpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIk9LLiIKKyAgICBmaW5hbGx5OgorICAgICAgICAjIEluIGNhc2UgdGhpcyB0ZXN0IGlzIHJ1biBhZ2FpbiwgbWFrZSBzdXJlIHRoZSBoZWxwZXIgbW9kdWxlCisgICAgICAgICMgZ2V0cyBsb2FkZWQgZnJvbSBzY3JhdGNoIGFnYWluLgorICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3Rlc3QudGhyZWFkZWRfaW1wb3J0X2hhbmdlcnMnXQorCisjIFRyaWNreTogIFdoZW4gcmVncnRlc3QgaW1wb3J0cyB0aGlzIG1vZHVsZSwgdGhlIHRocmVhZCBydW5uaW5nIHJlZ3J0ZXN0CisjIGdyYWJzIHRoZSBpbXBvcnQgbG9jayBhbmQgd29uJ3QgbGV0IGdvIG9mIGl0IHVudGlsIHRoaXMgbW9kdWxlIHJldHVybnMuCisjIEFsbCBvdGhlciB0aHJlYWRzIGF0dGVtcHRpbmcgYW4gaW1wb3J0IGhhbmcgZm9yIHRoZSBkdXJhdGlvbi4gIFNpbmNlCisjIHRoaXMgdGVzdCBzcGF3bnMgdGhyZWFkcyB0aGF0IGRvIGxpdHRsZSAqYnV0KiBpbXBvcnQsIHdlIGNhbid0IGRvIHRoYXQKKyMgc3VjY2Vzc2Z1bGx5IHVudGlsIGFmdGVyIHRoaXMgbW9kdWxlIGZpbmlzaGVzIGltcG9ydGluZyBhbmQgcmVncnRlc3QKKyMgcmVnYWlucyBjb250cm9sLiAgVG8gbWFrZSB0aGlzIHdvcmssIGEgc3BlY2lhbCBjYXNlIHdhcyBhZGRlZCB0bworIyByZWdydGVzdCB0byBpbnZva2UgYSBtb2R1bGUncyAidGVzdF9tYWluIiBmdW5jdGlvbiAoaWYgYW55KSBhZnRlcgorIyBpbXBvcnRpbmcgaXQuCisKK2RlZiB0ZXN0X21haW4oKTogICAgICAgICMgbWFnaWMgbmFtZSEgIHNlZSBhYm92ZQorICAgIGdsb2JhbCBOLCBkb25lCisKKyAgICBpbXBvcnQgaW1wCisgICAgaWYgaW1wLmxvY2tfaGVsZCgpOgorICAgICAgICAjIFRoaXMgdHJpZ2dlcnMgb24sIGUuZy4sIGZyb20gdGVzdCBpbXBvcnQgYXV0b3Rlc3QuCisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW4ndCBydW4gd2hlbiBpbXBvcnQgbG9jayBpcyBoZWxkIikKKworICAgIGRvbmUuYWNxdWlyZSgpCisgICAgZm9yIE4gaW4gKDIwLCA1MCkgKiAzOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIlRyeWluZyIsIE4sICJ0aHJlYWRzIC4uLiIsCisgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGFzaywgKCkpCisgICAgICAgIGRvbmUuYWNxdWlyZSgpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiT0suIgorICAgIGRvbmUucmVsZWFzZSgpCisKKyAgICB0ZXN0X2ltcG9ydF9oYW5nZXJzKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWR0ZW1wZmlsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkOTY4NwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkKQEAgLTAsMCArMSw3OCBAQAorIiIiCitDcmVhdGUgYW5kIGRlbGV0ZSBGSUxFU19QRVJfVEhSRUFEIHRlbXAgZmlsZXMgKHZpYSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKQoraW4gZWFjaCBvZiBOVU1fVEhSRUFEUyB0aHJlYWRzLCByZWNvcmRpbmcgdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgYW5kCitmYWlsdXJlcy4gIEEgZmFpbHVyZSBpcyBhIGJ1ZyBpbiB0ZW1wZmlsZSwgYW5kIG1heSBiZSBkdWUgdG86CisKKysgVHJ5aW5nIHRvIGNyZWF0ZSBtb3JlIHRoYW4gb25lIHRlbXBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZS4KKysgVHJ5aW5nIHRvIGRlbGV0ZSBhIHRlbXBmaWxlIHRoYXQgZG9lc24ndCBzdGlsbCBleGlzdC4KKysgU29tZXRoaW5nIHdlJ3ZlIG5ldmVyIHNlZW4gYmVmb3JlLgorCitCeSBkZWZhdWx0LCBOVU1fVEhSRUFEUyA9PSAyMCBhbmQgRklMRVNfUEVSX1RIUkVBRCA9PSA1MC4gIFRoaXMgaXMgZW5vdWdoIHRvCitjcmVhdGUgYWJvdXQgMTUwIGZhaWx1cmVzIHBlciBydW4gdW5kZXIgV2luOThTRSBpbiAyLjAsIGFuZCBydW5zIHByZXR0eQorcXVpY2tseS4gR3VpZG8gcmVwb3J0cyBuZWVkaW5nIHRvIGJvb3N0IEZJTEVTX1BFUl9USFJFQUQgdG8gNTAwIGJlZm9yZQorcHJvdm9raW5nIGEgMi4wIGZhaWx1cmUgdW5kZXIgTGludXguCisiIiIKKworTlVNX1RIUkVBRFMgPSAyMAorRklMRVNfUEVSX1RIUkVBRCA9IDUwCisKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB0aHJlYWRpbmdfc2V0dXAsIHRocmVhZGluZ19jbGVhbnVwLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK3RocmVhZGluZyA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBTdHJpbmdJTworZnJvbSB0cmFjZWJhY2sgaW1wb3J0IHByaW50X2V4YworCitzdGFydEV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKworY2xhc3MgVGVtcEZpbGVHcmVlZHkodGhyZWFkaW5nLlRocmVhZCk6CisgICAgZXJyb3JfY291bnQgPSAwCisgICAgb2tfY291bnQgPSAwCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLmVycm9ycyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc3RhcnRFdmVudC53YWl0KCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoRklMRVNfUEVSX1RIUkVBRCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoIncrYiIpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcl9jb3VudCArPSAxCisgICAgICAgICAgICAgICAgcHJpbnRfZXhjKGZpbGU9c2VsZi5lcnJvcnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYub2tfY291bnQgKz0gMQorCisKK2NsYXNzIFRocmVhZGVkVGVtcEZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9tYWluKHNlbGYpOgorICAgICAgICB0aHJlYWRzID0gW10KKyAgICAgICAgdGhyZWFkX2luZm8gPSB0aHJlYWRpbmdfc2V0dXAoKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTV9USFJFQURTKToKKyAgICAgICAgICAgIHQgPSBUZW1wRmlsZUdyZWVkeSgpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgc3RhcnRFdmVudC5zZXQoKQorCisgICAgICAgIG9rID0gMAorICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgIG9rICs9IHQub2tfY291bnQKKyAgICAgICAgICAgIGlmIHQuZXJyb3JfY291bnQ6CisgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChzdHIodC5nZXROYW1lKCkpICsgc3RyKHQuZXJyb3JzLmdldHZhbHVlKCkpKQorCisgICAgICAgIHRocmVhZGluZ19jbGVhbnVwKCp0aHJlYWRfaW5mbykKKworICAgICAgICBtc2cgPSAiRXJyb3JzOiBlcnJvcnMgJWQgb2sgJWRcbiVzIiAlIChsZW4oZXJyb3JzKSwgb2ssCisgICAgICAgICAgICAnXG4nLmpvaW4oZXJyb3JzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcnMsIFtdLCBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2ssIE5VTV9USFJFQURTICogRklMRVNfUEVSX1RIUkVBRCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUaHJlYWRlZFRlbXBGaWxlVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMDRjZDMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKQEAgLTAsMCArMSw3NzggQEAKKyMgVmVyeSBydWRpbWVudGFyeSB0ZXN0IG9mIHRocmVhZGluZyBtb2R1bGUKKworaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK3RocmVhZCA9IHRlc3QudGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZCcpCit0aHJlYWRpbmcgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCisKKyMgQSB0cml2aWFsIG11dGFibGUgY291bnRlci4KK2NsYXNzIENvdW50ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudmFsdWUgPSAwCisgICAgZGVmIGluYyhzZWxmKToKKyAgICAgICAgc2VsZi52YWx1ZSArPSAxCisgICAgZGVmIGRlYyhzZWxmKToKKyAgICAgICAgc2VsZi52YWx1ZSAtPSAxCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworY2xhc3MgVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdGVzdGNhc2UsIHNlbWEsIG11dGV4LCBucnVubmluZyk6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT1uYW1lKQorICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKKyAgICAgICAgc2VsZi5zZW1hID0gc2VtYQorICAgICAgICBzZWxmLm11dGV4ID0gbXV0ZXgKKyAgICAgICAgc2VsZi5ucnVubmluZyA9IG5ydW5uaW5nCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBkZWxheSA9IHJhbmRvbS5yYW5kb20oKSAvIDEwMDAwLjAKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICd0YXNrICVzIHdpbGwgcnVuIGZvciAlLjFmIHVzZWMnICUgKAorICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgZGVsYXkgKiAxZTYpCisKKyAgICAgICAgd2l0aCBzZWxmLnNlbWE6CisgICAgICAgICAgICB3aXRoIHNlbGYubXV0ZXg6CisgICAgICAgICAgICAgICAgc2VsZi5ucnVubmluZy5pbmMoKQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50IHNlbGYubnJ1bm5pbmcuZ2V0KCksICd0YXNrcyBhcmUgcnVubmluZycKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RjYXNlLmFzc2VydFRydWUoc2VsZi5ucnVubmluZy5nZXQoKSA8PSAzKQorCisgICAgICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAndGFzaycsIHNlbGYubmFtZSwgJ2RvbmUnCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5tdXRleDoKKyAgICAgICAgICAgICAgICBzZWxmLm5ydW5uaW5nLmRlYygpCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZS5hc3NlcnRUcnVlKHNlbGYubnJ1bm5pbmcuZ2V0KCkgPj0gMCkKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnJXMgaXMgZmluaXNoZWQuICVkIHRhc2tzIGFyZSBydW5uaW5nJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5ucnVubmluZy5nZXQoKSkKKworY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0LnRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKworY2xhc3MgVGhyZWFkVGVzdHMoQmFzZVRlc3RDYXNlKToKKworICAgICMgQ3JlYXRlIGEgYnVuY2ggb2YgdGhyZWFkcywgbGV0IGVhY2ggZG8gc29tZSB3b3JrLCB3YWl0IHVudGlsIGFsbCBhcmUKKyAgICAjIGRvbmUuCisgICAgZGVmIHRlc3RfdmFyaW91c19vcHMoc2VsZik6CisgICAgICAgICMgVGhpcyB0YWtlcyBhYm91dCBuLzMgc2Vjb25kcyB0byBydW4gKGFib3V0IG4vMyBjbHVtcHMgb2YgdGFza3MsCisgICAgICAgICMgdGltZXMgYWJvdXQgMSBzZWNvbmQgcGVyIGNsdW1wKS4KKyAgICAgICAgTlVNVEFTS1MgPSAxMAorCisgICAgICAgICMgbm8gbW9yZSB0aGFuIDMgb2YgdGhlIDEwIGNhbiBydW4gYXQgb25jZQorICAgICAgICBzZW1hID0gdGhyZWFkaW5nLkJvdW5kZWRTZW1hcGhvcmUodmFsdWU9MykKKyAgICAgICAgbXV0ZXggPSB0aHJlYWRpbmcuUkxvY2soKQorICAgICAgICBudW1ydW5uaW5nID0gQ291bnRlcigpCisKKyAgICAgICAgdGhyZWFkcyA9IFtdCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNVEFTS1MpOgorICAgICAgICAgICAgdCA9IFRlc3RUaHJlYWQoIjx0aHJlYWQgJWQ+IiVpLCBzZWxmLCBzZW1hLCBtdXRleCwgbnVtcnVubmluZykKKyAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaWRlbnQsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxUZXN0VGhyZWFkXCguKiwgaW5pdGlhbFwpPicsIHJlcHIodCkpKQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICd3YWl0aW5nIGZvciBhbGwgdGFza3MgdG8gY29tcGxldGUnCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oTlVNVEFTS1MpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQuaXNfYWxpdmUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodC5pZGVudCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5pZGVudCBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8VGVzdFRocmVhZFwoLiosIFx3KyAtP1xkK1wpPicsIHJlcHIodCkpKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ2FsbCB0YXNrcyBkb25lJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bXJ1bm5pbmcuZ2V0KCksIDApCisKKyAgICBkZWYgdGVzdF9pZGVudF9vZl9ub190aHJlYWRpbmdfdGhyZWFkcyhzZWxmKToKKyAgICAgICAgIyBUaGUgaWRlbnQgc3RpbGwgbXVzdCB3b3JrIGZvciB0aGUgbWFpbiB0aHJlYWQgYW5kIGR1bW15IHRocmVhZHMuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhyZWFkaW5nLmN1cnJlbnRUaHJlYWQoKS5pZGVudCBpcyBOb25lKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgaWRlbnQuYXBwZW5kKHRocmVhZGluZy5jdXJyZW50VGhyZWFkKCkuaWRlbnQpCisgICAgICAgICAgICBkb25lLnNldCgpCisgICAgICAgIGRvbmUgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBpZGVudCA9IFtdCisgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKGYsICgpKQorICAgICAgICBkb25lLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlkZW50WzBdIGlzIE5vbmUpCisgICAgICAgICMgS2lsbCB0aGUgImltbW9ydGFsIiBfRHVtbXlUaHJlYWQKKyAgICAgICAgZGVsIHRocmVhZGluZy5fYWN0aXZlW2lkZW50WzBdXQorCisgICAgIyBydW4gd2l0aCBhIHNtYWxsKGlzaCkgdGhyZWFkIHN0YWNrIHNpemUgKDI1NmtCKQorICAgIGRlZiB0ZXN0X3ZhcmlvdXNfb3BzX3NtYWxsX3N0YWNrKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ3dpdGggMjU2a0IgdGhyZWFkIHN0YWNrIHNpemUuLi4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRocmVhZGluZy5zdGFja19zaXplKDI2MjE0NCkKKyAgICAgICAgZXhjZXB0IHRocmVhZC5lcnJvcjoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ3BsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgdGhyZWFkIHN0YWNrIHNpemUnCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi50ZXN0X3ZhcmlvdXNfb3BzKCkKKyAgICAgICAgdGhyZWFkaW5nLnN0YWNrX3NpemUoMCkKKworICAgICMgcnVuIHdpdGggYSBsYXJnZSB0aHJlYWQgc3RhY2sgc2l6ZSAoMU1CKQorICAgIGRlZiB0ZXN0X3ZhcmlvdXNfb3BzX2xhcmdlX3N0YWNrKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ3dpdGggMU1CIHRocmVhZCBzdGFjayBzaXplLi4uJworICAgICAgICB0cnk6CisgICAgICAgICAgICB0aHJlYWRpbmcuc3RhY2tfc2l6ZSgweDEwMDAwMCkKKyAgICAgICAgZXhjZXB0IHRocmVhZC5lcnJvcjoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ3BsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgdGhyZWFkIHN0YWNrIHNpemUnCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi50ZXN0X3ZhcmlvdXNfb3BzKCkKKyAgICAgICAgdGhyZWFkaW5nLnN0YWNrX3NpemUoMCkKKworICAgIGRlZiB0ZXN0X2ZvcmVpZ25fdGhyZWFkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYSAiZm9yZWlnbiIgdGhyZWFkIGNhbiB1c2UgdGhlIHRocmVhZGluZyBtb2R1bGUuCisgICAgICAgIGRlZiBmKG11dGV4KToKKyAgICAgICAgICAgICMgQ2FsbGluZyBjdXJyZW50X3RocmVhZCgpIGZvcmNlcyBhbiBlbnRyeSBmb3IgdGhlIGZvcmVpZ24KKyAgICAgICAgICAgICMgdGhyZWFkIHRvIGdldCBtYWRlIGluIHRoZSB0aHJlYWRpbmcuX2FjdGl2ZSBtYXAuCisgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKQorICAgICAgICAgICAgbXV0ZXgucmVsZWFzZSgpCisKKyAgICAgICAgbXV0ZXggPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIG11dGV4LmFjcXVpcmUoKQorICAgICAgICB0aWQgPSB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZChmLCAobXV0ZXgsKSkKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGZpbmlzaC4KKyAgICAgICAgbXV0ZXguYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGlkLCB0aHJlYWRpbmcuX2FjdGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRocmVhZGluZy5fYWN0aXZlW3RpZF0sIHRocmVhZGluZy5fRHVtbXlUaHJlYWQpCisgICAgICAgIGRlbCB0aHJlYWRpbmcuX2FjdGl2ZVt0aWRdCisKKyAgICAjIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMoKSBpcyBhIENQeXRob24tb25seSBnaW1taWNrLCBub3QgKGN1cnJlbnRseSkKKyAgICAjIGV4cG9zZWQgYXQgdGhlIFB5dGhvbiBsZXZlbC4gIFRoaXMgdGVzdCByZWxpZXMgb24gY3R5cGVzIHRvIGdldCBhdCBpdC4KKyAgICBkZWYgdGVzdF9QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY3R5cGVzCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgInRlc3RfUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YyBjYW4ndCBpbXBvcnQgY3R5cGVzIgorICAgICAgICAgICAgcmV0dXJuICAjIGNhbid0IGRvIGFueXRoaW5nCisKKyAgICAgICAgc2V0X2FzeW5jX2V4YyA9IGN0eXBlcy5weXRob25hcGkuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YworCisgICAgICAgIGNsYXNzIEFzeW5jRXhjKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZXhjZXB0aW9uID0gY3R5cGVzLnB5X29iamVjdChBc3luY0V4YykKKworICAgICAgICAjIEZpcnN0IGNoZWNrIGl0IHdvcmtzIHdoZW4gc2V0dGluZyB0aGUgZXhjZXB0aW9uIGZyb20gdGhlIHNhbWUgdGhyZWFkLgorICAgICAgICB0aWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBzZXRfYXN5bmNfZXhjKGN0eXBlcy5jX2xvbmcodGlkKSwgZXhjZXB0aW9uKQorICAgICAgICAgICAgIyBUaGUgZXhjZXB0aW9uIGlzIGFzeW5jLCBzbyB3ZSBtaWdodCBoYXZlIHRvIGtlZXAgdGhlIFZNIGJ1c3kgdW50aWwKKyAgICAgICAgICAgICMgaXQgbm90aWNlcy4KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgQXN5bmNFeGM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBidXQgaXQgcmVmbGVjdHMgdGhlIGludGVudC4gSWYgd2Ugd2FudGVkCisgICAgICAgICAgICAjIHRvIGJlIHNtYXJ0ZXIgdGhlIGFib3ZlIGxvb3Agd291bGRuJ3QgYmUgaW5maW5pdGUuCisgICAgICAgICAgICBzZWxmLmZhaWwoIkFzeW5jRXhjIG5vdCByYWlzZWQiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkgIyBvbmUgdGhyZWFkIHN0YXRlIG1vZGlmaWVkCisgICAgICAgIGV4Y2VwdCBVbmJvdW5kTG9jYWxFcnJvcjoKKyAgICAgICAgICAgICMgVGhlIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIHRvbyBxdWlja2x5IGZvciB1cyB0byBnZXQgdGhlIHJlc3VsdC4KKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIGB3b3JrZXJfc3RhcnRlZGAgaXMgc2V0IGJ5IHRoZSB0aHJlYWQgd2hlbiBpdCdzIGluc2lkZSBhIHRyeS9leGNlcHQKKyAgICAgICAgIyBibG9jayB3YWl0aW5nIHRvIGNhdGNoIHRoZSBhc3luY2hyb25vdXNseSBzZXQgQXN5bmNFeGMgZXhjZXB0aW9uLgorICAgICAgICAjIGB3b3JrZXJfc2F3X2V4Y2VwdGlvbmAgaXMgc2V0IGJ5IHRoZSB0aHJlYWQgdXBvbiBjYXRjaGluZyB0aGF0CisgICAgICAgICMgZXhjZXB0aW9uLgorICAgICAgICB3b3JrZXJfc3RhcnRlZCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHdvcmtlcl9zYXdfZXhjZXB0aW9uID0gdGhyZWFkaW5nLkV2ZW50KCkKKworICAgICAgICBjbGFzcyBXb3JrZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuaWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaGVkID0gRmFsc2UKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9zdGFydGVkLnNldCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgICAgICBleGNlcHQgQXN5bmNFeGM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9zYXdfZXhjZXB0aW9uLnNldCgpCisKKyAgICAgICAgdCA9IFdvcmtlcigpCisgICAgICAgIHQuZGFlbW9uID0gVHJ1ZSAjIHNvIGlmIHRoaXMgZmFpbHMsIHdlIGRvbid0IGhhbmcgUHl0aG9uIGF0IHNodXRkb3duCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiAgICBzdGFydGVkIHdvcmtlciB0aHJlYWQiCisKKyAgICAgICAgIyBUcnkgYSB0aHJlYWQgaWQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2UuCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiICAgIHRyeWluZyBub25zZW5zaWNhbCB0aHJlYWQgaWQiCisgICAgICAgIHJlc3VsdCA9IHNldF9hc3luY19leGMoY3R5cGVzLmNfbG9uZygtMSksIGV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDApICAjIG5vIHRocmVhZCBzdGF0ZXMgbW9kaWZpZWQKKworICAgICAgICAjIE5vdyByYWlzZSBhbiBleGNlcHRpb24gaW4gdGhlIHdvcmtlciB0aHJlYWQuCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiICAgIHdhaXRpbmcgZm9yIHdvcmtlciB0aHJlYWQgdG8gZ2V0IHN0YXJ0ZWQiCisgICAgICAgIHJldCA9IHdvcmtlcl9zdGFydGVkLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmV0KQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiAgICB2ZXJpZnlpbmcgd29ya2VyIGhhc24ndCBleGl0ZWQiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdC5maW5pc2hlZCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIgICAgYXR0ZW1wdGluZyB0byByYWlzZSBhc3luY2ggZXhjZXB0aW9uIGluIHdvcmtlciIKKyAgICAgICAgcmVzdWx0ID0gc2V0X2FzeW5jX2V4YyhjdHlwZXMuY19sb25nKHQuaWQpLCBleGNlcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAxKSAjIG9uZSB0aHJlYWQgc3RhdGUgbW9kaWZpZWQKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIgICAgd2FpdGluZyBmb3Igd29ya2VyIHRvIHNheSBpdCBjYXVnaHQgdGhlIGV4Y2VwdGlvbiIKKyAgICAgICAgd29ya2VyX3Nhd19leGNlcHRpb24ud2FpdCh0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5maW5pc2hlZCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIgICAgYWxsIE9LIC0tIGpvaW5pbmcgd29ya2VyIgorICAgICAgICBpZiB0LmZpbmlzaGVkOgorICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgIyBlbHNlIHRoZSB0aHJlYWQgaXMgc3RpbGwgcnVubmluZywgYW5kIHdlIGhhdmUgbm8gd2F5IHRvIGtpbGwgaXQKKworICAgIGRlZiB0ZXN0X2xpbWJvX2NsZWFudXAoc2VsZik6CisgICAgICAgICMgSXNzdWUgNzQ4MTogRmFpbHVyZSB0byBzdGFydCB0aHJlYWQgc2hvdWxkIGNsZWFudXAgdGhlIGxpbWJvIG1hcC4KKyAgICAgICAgZGVmIGZhaWxfbmV3X3RocmVhZCgqYXJncyk6CisgICAgICAgICAgICByYWlzZSB0aHJlYWQuZXJyb3IoKQorICAgICAgICBfc3RhcnRfbmV3X3RocmVhZCA9IHRocmVhZGluZy5fc3RhcnRfbmV3X3RocmVhZAorICAgICAgICB0aHJlYWRpbmcuX3N0YXJ0X25ld190aHJlYWQgPSBmYWlsX25ld190aHJlYWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYTogTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRocmVhZC5lcnJvciwgdC5zdGFydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICAgICAgdCBpbiB0aHJlYWRpbmcuX2xpbWJvLAorICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY2xlYW51cCBfbGltYm8gbWFwIG9uIGZhaWx1cmUgb2YgVGhyZWFkLnN0YXJ0KCkuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRocmVhZGluZy5fc3RhcnRfbmV3X3RocmVhZCA9IF9zdGFydF9uZXdfdGhyZWFkCisKKyAgICBkZWYgdGVzdF9maW5hbGl6ZV9ydW5ubmluZ190aHJlYWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTQwMjogdGhlIFB5R0lMU3RhdGVfRW5zdXJlIC8gX1JlbGVhc2UgZnVuY3Rpb25zIG1heSBiZSBjYWxsZWQKKyAgICAgICAgIyB2ZXJ5IGxhdGUgb24gcHl0aG9uIGV4aXQ6IG9uIGRlYWxsb2NhdGlvbiBvZiBhIHJ1bm5pbmcgdGhyZWFkIGZvcgorICAgICAgICAjIGV4YW1wbGUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgidGVzdF9maW5hbGl6ZV93aXRoX3J1bm5uaW5nX3RocmVhZCBjYW4ndCBpbXBvcnQgY3R5cGVzIikKKyAgICAgICAgICAgIHJldHVybiAgIyBjYW4ndCBkbyBhbnl0aGluZworCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBjdHlwZXMsIHN5cywgdGltZSwgdGhyZWFkCisKKyAgICAgICAgICAgICMgVGhpcyBsb2NrIGlzIHVzZWQgYXMgYSBzaW1wbGUgZXZlbnQgdmFyaWFibGUuCisgICAgICAgICAgICByZWFkeSA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgICAgIHJlYWR5LmFjcXVpcmUoKQorCisgICAgICAgICAgICAjIE1vZHVsZSBnbG9iYWxzIGFyZSBjbGVhcmVkIGJlZm9yZSBfX2RlbF9fIGlzIHJ1bgorICAgICAgICAgICAgIyBTbyB3ZSBzYXZlIHRoZSBmdW5jdGlvbnMgaW4gY2xhc3MgZGljdAorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBlbnN1cmUgPSBjdHlwZXMucHl0aG9uYXBpLlB5R0lMU3RhdGVfRW5zdXJlCisgICAgICAgICAgICAgICAgcmVsZWFzZSA9IGN0eXBlcy5weXRob25hcGkuUHlHSUxTdGF0ZV9SZWxlYXNlCisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc2VsZi5lbnN1cmUoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbGVhc2Uoc3RhdGUpCisKKyAgICAgICAgICAgIGRlZiB3YWl0aW5nVGhyZWFkKCk6CisgICAgICAgICAgICAgICAgeCA9IEMoKQorICAgICAgICAgICAgICAgIHJlYWR5LnJlbGVhc2UoKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMTAwKQorCisgICAgICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZCh3YWl0aW5nVGhyZWFkLCAoKSkKKyAgICAgICAgICAgIHJlYWR5LmFjcXVpcmUoKSAgIyBCZSBzdXJlIHRoZSBvdGhlciB0aHJlYWQgaXMgd2FpdGluZy4KKyAgICAgICAgICAgIHN5cy5leGl0KDQyKQorICAgICAgICAgICAgIiIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDIpCisKKyAgICBkZWYgdGVzdF9maW5hbGl6ZV93aXRoX3RyYWNlKHNlbGYpOgorICAgICAgICAjIElzc3VlMTczMzc1NworICAgICAgICAjIEF2b2lkIGEgZGVhZGxvY2sgd2hlbiBzeXMuc2V0dHJhY2Ugc3RlcHMgaW50byB0aHJlYWRpbmcuX3NodXRkb3duCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBzeXMsIHRocmVhZGluZworCisgICAgICAgICAgICAjIEEgZGVhZGxvY2sta2lsbGVyLCB0byBwcmV2ZW50IHRoZQorICAgICAgICAgICAgIyB0ZXN0c3VpdGUgdG8gaGFuZyBmb3JldmVyCisgICAgICAgICAgICBkZWYga2lsbGVyKCk6CisgICAgICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgyKQorICAgICAgICAgICAgICAgIHByaW50ICdwcm9ncmFtIGJsb2NrZWQ7IGFib3J0aW5nJworICAgICAgICAgICAgICAgIG9zLl9leGl0KDIpCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9a2lsbGVyKQorICAgICAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSB0cmFjZSBmdW5jdGlvbgorICAgICAgICAgICAgZGVmIGZ1bmMoZnJhbWUsIGV2ZW50LCBhcmcpOgorICAgICAgICAgICAgICAgIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMKKworICAgICAgICAgICAgc3lzLnNldHRyYWNlKGZ1bmMpCisgICAgICAgICAgICAiIiJdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICByYyA9IHAucmV0dXJuY29kZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJjID09IDIsICJpbnRlcnByZXRlZCB3YXMgYmxvY2tlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYyA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3I6ICIgKyByZXByKHN0ZGVycikpCisKKyAgICBkZWYgdGVzdF9qb2luX25vbmRhZW1vbl9vbl9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNzIyMzQ0CisgICAgICAgICMgUmFpc2luZyBTeXN0ZW1FeGl0IHNraXBwZWQgdGhyZWFkaW5nLl9zaHV0ZG93bgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CisgICAgICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgICAgICAgICAgICAgIGZyb20gdGltZSBpbXBvcnQgc2xlZXAKKworICAgICAgICAgICAgICAgIGRlZiBjaGlsZCgpOgorICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKQorICAgICAgICAgICAgICAgICAgICAjIEFzIGEgbm9uLWRhZW1vbiB0aHJlYWQgd2UgU0hPVUxEIHdha2UgdXAgYW5kIG5vdGhpbmcKKyAgICAgICAgICAgICAgICAgICAgIyBzaG91bGQgYmUgdG9ybiBkb3duIHlldAorICAgICAgICAgICAgICAgICAgICBwcmludCAiV29rZSB1cCwgc2xlZXAgZnVuY3Rpb24gaXM6Iiwgc2xlZXAKKworICAgICAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWNoaWxkKS5zdGFydCgpCisgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorICAgICAgICAgICAgIiIiXSwKKyAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuc3RyaXAoKSwKKyAgICAgICAgICAgICJXb2tlIHVwLCBzbGVlcCBmdW5jdGlvbiBpczogPGJ1aWx0LWluIGZ1bmN0aW9uIHNsZWVwPiIpCisgICAgICAgIHN0ZGVyciA9IHJlLnN1YihyIl5cW1xkKyByZWZzXF0iLCAiIiwgc3RkZXJyLCByZS5NVUxUSUxJTkUpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIsICIiKQorCisgICAgZGVmIHRlc3RfZW51bWVyYXRlX2FmdGVyX2pvaW4oc2VsZik6CisgICAgICAgICMgVHJ5IGhhcmQgdG8gdHJpZ2dlciAjMTcwMzQ0ODogYSB0aHJlYWQgaXMgc3RpbGwgcmV0dXJuZWQgaW4KKyAgICAgICAgIyB0aHJlYWRpbmcuZW51bWVyYXRlKCkgYWZ0ZXIgaXQgaGFzIGJlZW4gam9pbigpZWQuCisgICAgICAgIGVudW0gPSB0aHJlYWRpbmcuZW51bWVyYXRlCisgICAgICAgIG9sZF9pbnRlcnZhbCA9IHN5cy5nZXRjaGVja2ludGVydmFsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEsIDEwMCk6CisgICAgICAgICAgICAgICAgIyBUcnkgYSBjb3VwbGUgdGltZXMgYXQgZWFjaCB0aHJlYWQtc3dpdGNoaW5nIGludGVydmFsCisgICAgICAgICAgICAgICAgIyB0byBnZXQgbW9yZSBpbnRlcmxlYXZpbmdzLgorICAgICAgICAgICAgICAgIHN5cy5zZXRjaGVja2ludGVydmFsKGkgLy8gNSkKKyAgICAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhOiBOb25lKQorICAgICAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICAgICAgbCA9IGVudW0oKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odCwgbCwKKyAgICAgICAgICAgICAgICAgICAgIiMxNzAzNDQ4IHRyaWdnZXJlZCBhZnRlciAlZCB0cmlhbHM6ICVzIiAlIChpLCBsKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zZXRjaGVja2ludGVydmFsKG9sZF9pbnRlcnZhbCkKKworICAgIGRlZiB0ZXN0X25vX3JlZmN5Y2xlX3Rocm91Z2hfdGFyZ2V0KHNlbGYpOgorICAgICAgICBjbGFzcyBSdW5TZWxmRnVuY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaG91bGRfcmFpc2UpOgorICAgICAgICAgICAgICAgICMgVGhlIGxpbmtzIGluIHRoaXMgcmVmY3ljbGUgZnJvbSBUaHJlYWQgYmFjayB0byBzZWxmCisgICAgICAgICAgICAgICAgIyBzaG91bGQgYmUgY2xlYW5lZCB1cCB3aGVuIHRoZSB0aHJlYWQgY29tcGxldGVzLgorICAgICAgICAgICAgICAgIHNlbGYuc2hvdWxkX3JhaXNlID0gc2hvdWxkX3JhaXNlCisgICAgICAgICAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9ydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHNlbGYsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzPXsneWV0X2Fub3RoZXInOnNlbGZ9KQorICAgICAgICAgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKworICAgICAgICAgICAgZGVmIF9ydW4oc2VsZiwgb3RoZXJfcmVmLCB5ZXRfYW5vdGhlcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRfcmFpc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKworICAgICAgICBjeWNsaWNfb2JqZWN0ID0gUnVuU2VsZkZ1bmN0aW9uKHNob3VsZF9yYWlzZT1GYWxzZSkKKyAgICAgICAgd2Vha19jeWNsaWNfb2JqZWN0ID0gd2Vha3JlZi5yZWYoY3ljbGljX29iamVjdCkKKyAgICAgICAgY3ljbGljX29iamVjdC50aHJlYWQuam9pbigpCisgICAgICAgIGRlbCBjeWNsaWNfb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgd2Vha19jeWNsaWNfb2JqZWN0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSgnJWQgcmVmZXJlbmNlcyBzdGlsbCBhcm91bmQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXRyZWZjb3VudCh3ZWFrX2N5Y2xpY19vYmplY3QoKSkpKQorCisgICAgICAgIHJhaXNpbmdfY3ljbGljX29iamVjdCA9IFJ1blNlbGZGdW5jdGlvbihzaG91bGRfcmFpc2U9VHJ1ZSkKKyAgICAgICAgd2Vha19yYWlzaW5nX2N5Y2xpY19vYmplY3QgPSB3ZWFrcmVmLnJlZihyYWlzaW5nX2N5Y2xpY19vYmplY3QpCisgICAgICAgIHJhaXNpbmdfY3ljbGljX29iamVjdC50aHJlYWQuam9pbigpCisgICAgICAgIGRlbCByYWlzaW5nX2N5Y2xpY19vYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB3ZWFrX3JhaXNpbmdfY3ljbGljX29iamVjdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0oJyVkIHJlZmVyZW5jZXMgc3RpbGwgYXJvdW5kJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZ2V0cmVmY291bnQod2Vha19yYWlzaW5nX2N5Y2xpY19vYmplY3QoKSkpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgJ3Rlc3QgbmVlZHMgZm9yaygpJykKKyAgICBkZWYgdGVzdF9kdW1teV90aHJlYWRfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQzMDg6IGEgZHVtbXkgdGhyZWFkIGluIHRoZSBhY3RpdmUgbGlzdCBkb2Vzbid0IG1lc3MgdXAKKyAgICAgICAgIyB0aGUgYWZ0ZXItZm9yayBtZWNoYW5pc20uCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHRocmVhZCwgdGhyZWFkaW5nLCBvcywgdGltZQorCisgICAgICAgICAgICBkZWYgYmFja2dyb3VuZF90aHJlYWQoZXZ0KToKKyAgICAgICAgICAgICAgICAjIENyZWF0ZXMgYW5kIHJlZ2lzdGVycyB0aGUgX0R1bW15VGhyZWFkIGluc3RhbmNlCisgICAgICAgICAgICAgICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkKKyAgICAgICAgICAgICAgICBldnQuc2V0KCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorCisgICAgICAgICAgICBldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoYmFja2dyb3VuZF90aHJlYWQsIChldnQsKSkKKyAgICAgICAgICAgIGV2dC53YWl0KCkKKyAgICAgICAgICAgIGFzc2VydCB0aHJlYWRpbmcuYWN0aXZlX2NvdW50KCkgPT0gMiwgdGhyZWFkaW5nLmFjdGl2ZV9jb3VudCgpCisgICAgICAgICAgICBpZiBvcy5mb3JrKCkgPT0gMDoKKyAgICAgICAgICAgICAgICBhc3NlcnQgdGhyZWFkaW5nLmFjdGl2ZV9jb3VudCgpID09IDEsIHRocmVhZGluZy5hY3RpdmVfY291bnQoKQorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLndhaXQoKQorICAgICAgICAiIiIKKyAgICAgICAgXywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsICcnKQorCisKK2NsYXNzIFRocmVhZEpvaW5PblNodXRkb3duKEJhc2VUZXN0Q2FzZSk6CisKKyAgICAjIEJldHdlZW4gZm9yaygpIGFuZCBleGVjKCksIG9ubHkgYXN5bmMtc2FmZSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgKGlzc3VlcworICAgICMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKKyAgICAjIHByb2JsZW1zIHdpdGggc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoaXNzdWUgIzM4NjMpOiBza2lwIHByb2JsZW1hdGljIHRlc3RzCisgICAgIyBvbiBwbGF0Zm9ybXMga25vd24gdG8gYmVoYXZlIGJhZGx5LgorICAgIHBsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnb3MyZW14JykKKworICAgIGRlZiBfcnVuX2FuZF9qb2luKHNlbGYsIHNjcmlwdCk6CisgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzLCBvcywgdGltZSwgdGhyZWFkaW5nCisKKyAgICAgICAgICAgICMgYSB0aHJlYWQsIHdoaWNoIHdhaXRzIGZvciB0aGUgbWFpbiBwcm9ncmFtIHRvIHRlcm1pbmF0ZQorICAgICAgICAgICAgZGVmIGpvaW5pbmdmdW5jKG1haW50aHJlYWQpOgorICAgICAgICAgICAgICAgIG1haW50aHJlYWQuam9pbigpCisgICAgICAgICAgICAgICAgcHJpbnQgJ2VuZCBvZiB0aHJlYWQnCisgICAgICAgIFxuIiIiICsgc2NyaXB0CisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICByYyA9IHAud2FpdCgpCisgICAgICAgIGRhdGEgPSBwLnN0ZG91dC5yZWFkKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJlbmQgb2YgbWFpblxuZW5kIG9mIHRocmVhZFxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyYyA9PSAyLCAiaW50ZXJwcmV0ZXIgd2FzIGJsb2NrZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmMgPT0gMCwgIlVuZXhwZWN0ZWQgZXJyb3IiKQorCisgICAgZGVmIHRlc3RfMV9qb2luX29uX3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIFRoZSB1c3VhbCBjYXNlOiBvbiBleGl0LCB3YWl0IGZvciBhIG5vbi1kYWVtb24gdGhyZWFkCisgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1qb2luaW5nZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCkpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgcHJpbnQgJ2VuZCBvZiBtYWluJworICAgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3J1bl9hbmRfam9pbihzY3JpcHQpCisKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCisgICAgZGVmIHRlc3RfMl9qb2luX2luX2ZvcmtlZF9wcm9jZXNzKHNlbGYpOgorICAgICAgICAjIExpa2UgdGhlIHRlc3QgYWJvdmUsIGJ1dCBmcm9tIGEgZm9ya2VkIGludGVycHJldGVyCisgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CisgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKKyAgICAgICAgICAgICAgICBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDApCisKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1qb2luaW5nZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCkpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHByaW50ICdlbmQgb2YgbWFpbicKKyAgICAgICAgICAgICIiIgorICAgICAgICBzZWxmLl9ydW5fYW5kX2pvaW4oc2NyaXB0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKKyAgICBkZWYgdGVzdF8zX2pvaW5faW5fZm9ya2VkX2Zyb21fdGhyZWFkKHNlbGYpOgorICAgICAgICAjIExpa2UgdGhlIHRlc3QgYWJvdmUsIGJ1dCBmb3JrKCkgd2FzIGNhbGxlZCBmcm9tIGEgd29ya2VyIHRocmVhZAorICAgICAgICAjIEluIHRoZSBmb3JrZWQgcHJvY2VzcywgdGhlIG1haW4gVGhyZWFkIG9iamVjdCBtdXN0IGJlIG1hcmtlZCBhcyBzdG9wcGVkLgorICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgorICAgICAgICAgICAgbWFpbl90aHJlYWQgPSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKQorICAgICAgICAgICAgZGVmIHdvcmtlcigpOgorICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKKworICAgICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1qb2luaW5nZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShtYWluX3RocmVhZCwpKQorICAgICAgICAgICAgICAgIHByaW50ICdlbmQgb2YgbWFpbicKKyAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgICAgICB0LmpvaW4oKSAjIFNob3VsZCBub3QgYmxvY2s6IG1haW5fdGhyZWFkIGlzIGFscmVhZHkgc3RvcHBlZAorCisgICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQorICAgICAgICAgICAgdy5zdGFydCgpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcnVuX2FuZF9qb2luKHNjcmlwdCkKKworICAgIGRlZiBhc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2VsZiwgc2NyaXB0LCBleHBlY3RlZF9vdXRwdXQpOgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsIHNjcmlwdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHJjID0gcC53YWl0KCkKKyAgICAgICAgZGF0YSA9IHAuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwLCAiVW5leHBlY3RlZCBlcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfb3V0cHV0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKKyAgICBkZWYgdGVzdF80X2pvaW5pbmdfYWNyb3NzX2ZvcmtfaW5fd29ya2VyX3RocmVhZChzZWxmKToKKyAgICAgICAgIyBUaGVyZSB1c2VkIHRvIGJlIGEgcG9zc2libGUgZGVhZGxvY2sgd2hlbiBmb3JraW5nIGZyb20gYSBjaGlsZAorICAgICAgICAjIHRocmVhZC4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjY0My4KKworICAgICAgICAjIFRoZSBzY3JpcHQgdGFrZXMgdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICAgICAgIyAtIFRoZSBtYWluIHRocmVhZCBpbiB0aGUgcGFyZW50IHByb2Nlc3Mgc3RhcnRzIGEgbmV3IHRocmVhZCBhbmQgdGhlbgorICAgICAgICAjICAgdHJpZXMgdG8gam9pbiBpdC4KKyAgICAgICAgIyAtIFRoZSBqb2luIG9wZXJhdGlvbiBhY3F1aXJlcyB0aGUgTG9jayBpbnNpZGUgdGhlIHRocmVhZCdzIF9ibG9jaworICAgICAgICAjICAgQ29uZGl0aW9uLiAgKFNlZSB0aHJlYWRpbmcucHk6VGhyZWFkLmpvaW4oKS4pCisgICAgICAgICMgLSBXZSBzdHViIG91dCB0aGUgYWNxdWlyZSBtZXRob2Qgb24gdGhlIGNvbmRpdGlvbiB0byBmb3JjZSBpdCB0byB3YWl0CisgICAgICAgICMgICB1bnRpbCB0aGUgY2hpbGQgdGhyZWFkIGZvcmtzLiAgKFNlZSBMT0NLIEFDUVVJUkVEIEhFUkUpCisgICAgICAgICMgLSBUaGUgY2hpbGQgdGhyZWFkIGZvcmtzLiAgKFNlZSBMT0NLIEhFTEQgYW5kIFdPUktFUiBUSFJFQUQgRk9SS1MKKyAgICAgICAgIyAgIEhFUkUpCisgICAgICAgICMgLSBUaGUgbWFpbiB0aHJlYWQgb2YgdGhlIHBhcmVudCBwcm9jZXNzIGVudGVycyBDb25kaXRpb24ud2FpdCgpLAorICAgICAgICAjICAgd2hpY2ggcmVsZWFzZXMgdGhlIGxvY2sgb24gdGhlIGNoaWxkIHRocmVhZC4KKyAgICAgICAgIyAtIFRoZSBjaGlsZCBwcm9jZXNzIHJldHVybnMuICBXaXRob3V0IHRoZSBuZWNlc3NhcnkgZml4LCB3aGVuIHRoZQorICAgICAgICAjICAgbWFpbiB0aHJlYWQgb2YgdGhlIGNoaWxkIHByb2Nlc3MgKHdoaWNoIHVzZWQgdG8gYmUgdGhlIGNoaWxkIHRocmVhZAorICAgICAgICAjICAgaW4gdGhlIHBhcmVudCBwcm9jZXNzKSBhdHRlbXB0cyB0byBleGl0LCBpdCB3aWxsIHRyeSB0byBhY3F1aXJlIHRoZQorICAgICAgICAjICAgbG9jayBpbiB0aGUgVGhyZWFkLl9ibG9jayBDb25kaXRpb24gb2JqZWN0IGFuZCBoYW5nLCBiZWNhdXNlIHRoZQorICAgICAgICAjICAgbG9jayB3YXMgaGVsZCBhY3Jvc3MgdGhlIGZvcmsuCisKKyAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcywgdGltZSwgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIGZpbmlzaF9qb2luID0gRmFsc2UKKyAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBGYWxzZQorCisgICAgICAgICAgICBkZWYgd29ya2VyKCk6CisgICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoaXMgdGhyZWFkJ3MgbG9jayBpcyBhY3F1aXJlZCBiZWZvcmUgZm9ya2luZyB0bworICAgICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBkZWFkbG9jay4KKyAgICAgICAgICAgICAgICBnbG9iYWwgZmluaXNoX2pvaW4KKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRfZm9yazoKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgICAgICMgTE9DSyBIRUxEOiBNYWluIHRocmVhZCBob2xkcyBsb2NrIGFjcm9zcyB0aGlzIGNhbGwuCisgICAgICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgICAgICBmaW5pc2hfam9pbiA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgorICAgICAgICAgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzIGp1c3Qgd2FpdHMgZm9yIGNoaWxkLgorICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQorICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBzaG91bGQganVzdCByZXR1cm4uCisKKyAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCisKKyAgICAgICAgICAgICMgU3R1YiBvdXQgdGhlIHByaXZhdGUgY29uZGl0aW9uIHZhcmlhYmxlJ3MgbG9jayBhY3F1aXJlIG1ldGhvZC4KKyAgICAgICAgICAgICMgVGhpcyBhY3F1aXJlcyB0aGUgbG9jayBhbmQgdGhlbiB3YWl0cyB1bnRpbCB0aGUgY2hpbGQgaGFzIGZvcmtlZAorICAgICAgICAgICAgIyBiZWZvcmUgcmV0dXJuaW5nLCB3aGljaCB3aWxsIHJlbGVhc2UgdGhlIGxvY2sgc29vbiBhZnRlci4gIElmCisgICAgICAgICAgICAjIHNvbWVvbmUgZWxzZSB0cmllcyB0byBmaXggdGhpcyB0ZXN0IGNhc2UgYnkgYWNxdWlyaW5nIHRoaXMgbG9jaworICAgICAgICAgICAgIyBiZWZvcmUgZm9ya2luZyBpbnN0ZWFkIG9mIHJlc2V0dGluZyBpdCwgdGhlIHRlc3QgY2FzZSB3aWxsCisgICAgICAgICAgICAjIGRlYWRsb2NrIHdoZW4gaXQgc2hvdWxkbid0LgorICAgICAgICAgICAgY29uZGl0aW9uID0gdy5fYmxvY2sKKyAgICAgICAgICAgIG9yaWdfYWNxdWlyZSA9IGNvbmRpdGlvbi5hY3F1aXJlCisgICAgICAgICAgICBjYWxsX2NvdW50X2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgICAgICBjYWxsX2NvdW50ID0gMAorICAgICAgICAgICAgZGVmIG15X2FjcXVpcmUoKToKKyAgICAgICAgICAgICAgICBnbG9iYWwgY2FsbF9jb3VudAorICAgICAgICAgICAgICAgIGdsb2JhbCBzdGFydF9mb3JrCisgICAgICAgICAgICAgICAgb3JpZ19hY3F1aXJlKCkgICMgTE9DSyBBQ1FVSVJFRCBIRVJFCisgICAgICAgICAgICAgICAgc3RhcnRfZm9yayA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBjYWxsX2NvdW50ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBmaW5pc2hfam9pbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgICMgV09SS0VSIFRIUkVBRCBGT1JLUyBIRVJFCisgICAgICAgICAgICAgICAgd2l0aCBjYWxsX2NvdW50X2xvY2s6CisgICAgICAgICAgICAgICAgICAgIGNhbGxfY291bnQgKz0gMQorICAgICAgICAgICAgY29uZGl0aW9uLmFjcXVpcmUgPSBteV9hY3F1aXJlCisKKyAgICAgICAgICAgIHcuc3RhcnQoKQorICAgICAgICAgICAgdy5qb2luKCkKKyAgICAgICAgICAgIHByaW50KCdlbmQgb2YgbWFpbicpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2NyaXB0LCAiZW5kIG9mIG1haW5cbiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQorICAgIGRlZiB0ZXN0XzVfY2xlYXJfd2FpdGVyX2xvY2tzX3RvX2F2b2lkX2NyYXNoKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYSBzcGF3bmVkIHRocmVhZCB0aGF0IGZvcmtzIGRvZXNuJ3Qgc2VnZmF1bHQgb24gY2VydGFpbgorICAgICAgICAjIHBsYXRmb3JtcywgbmFtZWx5IE9TIFguICBUaGlzIHVzZWQgdG8gaGFwcGVuIGlmIHRoZXJlIHdhcyBhIHdhaXRlcgorICAgICAgICAjIGxvY2sgaW4gdGhlIHRocmVhZCdzIGNvbmRpdGlvbiB2YXJpYWJsZSdzIHdhaXRlcnMgbGlzdC4gIEV2ZW4gdGhvdWdoCisgICAgICAgICMgd2Uga25vdyB0aGUgbG9jayB3aWxsIGJlIGhlbGQgYWNyb3NzIHRoZSBmb3JrLCBpdCBpcyBub3Qgc2FmZSB0bworICAgICAgICAjIHJlbGVhc2UgbG9ja3MgaGVsZCBhY3Jvc3MgZm9ya3Mgb24gYWxsIHBsYXRmb3Jtcywgc28gcmVsZWFzaW5nIHRoZQorICAgICAgICAjIHdhaXRlciBsb2NrIGNhdXNlZCBhIHNlZ2ZhdWx0IG9uIE9TIFguICBGdXJ0aGVybW9yZSwgc2luY2UgbG9ja3Mgb24KKyAgICAgICAgIyBPUyBYIGFyZSAoYXMgb2YgdGhpcyB3cml0aW5nKSBpbXBsZW1lbnRlZCB3aXRoIGEgbXV0ZXggKyBjb25kaXRpb24KKyAgICAgICAgIyB2YXJpYWJsZSBpbnN0ZWFkIG9mIGEgc2VtYXBob3JlLCB3aGlsZSB3ZSBrbm93IHRoYXQgdGhlIFB5dGhvbi1sZXZlbAorICAgICAgICAjIGxvY2sgd2lsbCBiZSBhY3F1aXJlZCwgd2UgY2FuJ3Qga25vdyBpZiB0aGUgaW50ZXJuYWwgbXV0ZXggd2lsbCBiZQorICAgICAgICAjIGFjcXVpcmVkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLgorCisgICAgICAgIHNjcmlwdCA9ICIiImlmIFRydWU6CisgICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZworCisgICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKKworICAgICAgICAgICAgZGVmIHdvcmtlcigpOgorICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgaGFzIGF0dGVtcHRlZCB0byBqb2luIHRoaXMgdGhyZWFkCisgICAgICAgICAgICAgICAgIyBiZWZvcmUgY29udGludWluZy4KKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRfZm9yazoKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KKyAgICAgICAgICAgICAgICAgICAgKGNwaWQsIHJjKSA9IG9zLndhaXRwaWQoY2hpbGRwaWQsIDApCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBjcGlkID09IGNoaWxkcGlkCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCByYyA9PSAwCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdlbmQgb2Ygd29ya2VyIHRocmVhZCcpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIHNob3VsZCBqdXN0IHJldHVybi4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQorCisgICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIF9yZWxlYXNlX3NhdmUgbWV0aG9kLgorICAgICAgICAgICAgIyBUaGlzIHJlbGVhc2VzIHRoZSBjb25kaXRpb24ncyBsb2NrIGFuZCBmbGlwcyB0aGUgZ2xvYmFsIHRoYXQKKyAgICAgICAgICAgICMgY2F1c2VzIHRoZSB3b3JrZXIgdG8gZm9yay4gIEF0IHRoaXMgcG9pbnQsIHRoZSBwcm9ibGVtYXRpYyB3YWl0ZXIKKyAgICAgICAgICAgICMgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBvbmNlIGJ5IHRoZSB3YWl0ZXIgYW5kIGhhcyBiZWVuIHB1dCBvbnRvCisgICAgICAgICAgICAjIHRoZSB3YWl0ZXJzIGxpc3QuCisgICAgICAgICAgICBjb25kaXRpb24gPSB3Ll9ibG9jaworICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUgPSBjb25kaXRpb24uX3JlbGVhc2Vfc2F2ZQorICAgICAgICAgICAgZGVmIG15X3JlbGVhc2Vfc2F2ZSgpOgorICAgICAgICAgICAgICAgIGdsb2JhbCBzdGFydF9mb3JrCisgICAgICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUoKQorICAgICAgICAgICAgICAgICMgV2FpdGVyIGxvY2sgaGVsZCBoZXJlLCBjb25kaXRpb24gbG9jayByZWxlYXNlZC4KKyAgICAgICAgICAgICAgICBzdGFydF9mb3JrID0gVHJ1ZQorICAgICAgICAgICAgY29uZGl0aW9uLl9yZWxlYXNlX3NhdmUgPSBteV9yZWxlYXNlX3NhdmUKKworICAgICAgICAgICAgdy5zdGFydCgpCisgICAgICAgICAgICB3LmpvaW4oKQorICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiBtYWluIHRocmVhZCcpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgb3V0cHV0ID0gImVuZCBvZiB3b3JrZXIgdGhyZWFkXG5lbmQgb2YgbWFpbiB0aHJlYWRcbiIKKyAgICAgICAgc2VsZi5hc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2NyaXB0LCBvdXRwdXQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQorICAgIGRlZiB0ZXN0X3JlaW5pdF90bHNfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTM4MTc6IGZvcmsoKSB3b3VsZCBkZWFkbG9jayBpbiBhIG11bHRpdGhyZWFkZWQgcHJvZ3JhbSB3aXRoCisgICAgICAgICMgdGhlIGFkLWhvYyBUTFMgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgZGVmIGRvX2ZvcmtfYW5kX3dhaXQoKToKKyAgICAgICAgICAgICMganVzdCBmb3JrIGEgY2hpbGQgcHJvY2VzcyBhbmQgd2FpdCBpdAorICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiBwaWQgPiAwOgorICAgICAgICAgICAgICAgIG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorCisgICAgICAgICMgc3RhcnQgYSBidW5jaCBvZiB0aHJlYWRzIHRoYXQgd2lsbCBmb3JrKCkgY2hpbGQgcHJvY2Vzc2VzCisgICAgICAgIHRocmVhZHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxNik6CisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZG9fZm9ya19hbmRfd2FpdCkKKyAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworCitjbGFzcyBUaHJlYWRpbmdFeGNlcHRpb25UZXN0cyhCYXNlVGVzdENhc2UpOgorICAgICMgQSBSdW50aW1lRXJyb3Igc2hvdWxkIGJlIHJhaXNlZCBpZiBUaHJlYWQuc3RhcnQoKSBpcyBjYWxsZWQKKyAgICAjIG11bHRpcGxlIHRpbWVzLgorICAgIGRlZiB0ZXN0X3N0YXJ0X3RocmVhZF9hZ2FpbihzZWxmKToKKyAgICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCgpCisgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgdGhyZWFkLnN0YXJ0KQorCisgICAgZGVmIHRlc3Rfam9pbmluZ19jdXJyZW50X3RocmVhZChzZWxmKToKKyAgICAgICAgY3VycmVudF90aHJlYWQgPSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGN1cnJlbnRfdGhyZWFkLmpvaW4pOworCisgICAgZGVmIHRlc3Rfam9pbmluZ19pbmFjdGl2ZV90aHJlYWQoc2VsZik6CisgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHRocmVhZC5qb2luKQorCisgICAgZGVmIHRlc3RfZGFlbW9uaXplX2FjdGl2ZV90aHJlYWQoc2VsZik6CisgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNldGF0dHIsIHRocmVhZCwgImRhZW1vbiIsIFRydWUpCisKKworY2xhc3MgTG9ja1Rlc3RzKGxvY2tfdGVzdHMuTG9ja1Rlc3RzKToKKyAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuTG9jaykKKworY2xhc3MgUkxvY2tUZXN0cyhsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgIGxvY2t0eXBlID0gc3RhdGljbWV0aG9kKHRocmVhZGluZy5STG9jaykKKworY2xhc3MgRXZlbnRUZXN0cyhsb2NrX3Rlc3RzLkV2ZW50VGVzdHMpOgorICAgIGV2ZW50dHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuRXZlbnQpCisKK2NsYXNzIENvbmRpdGlvbkFzUkxvY2tUZXN0cyhsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgICMgQW4gQ29uZGl0aW9uIHVzZXMgYW4gUkxvY2sgYnkgZGVmYXVsdCBhbmQgZXhwb3J0cyBpdHMgQVBJLgorICAgIGxvY2t0eXBlID0gc3RhdGljbWV0aG9kKHRocmVhZGluZy5Db25kaXRpb24pCisKK2NsYXNzIENvbmRpdGlvblRlc3RzKGxvY2tfdGVzdHMuQ29uZGl0aW9uVGVzdHMpOgorICAgIGNvbmR0eXBlID0gc3RhdGljbWV0aG9kKHRocmVhZGluZy5Db25kaXRpb24pCisKK2NsYXNzIFNlbWFwaG9yZVRlc3RzKGxvY2tfdGVzdHMuU2VtYXBob3JlVGVzdHMpOgorICAgIHNlbXR5cGUgPSBzdGF0aWNtZXRob2QodGhyZWFkaW5nLlNlbWFwaG9yZSkKKworY2xhc3MgQm91bmRlZFNlbWFwaG9yZVRlc3RzKGxvY2tfdGVzdHMuQm91bmRlZFNlbWFwaG9yZVRlc3RzKToKKyAgICBzZW10eXBlID0gc3RhdGljbWV0aG9kKHRocmVhZGluZy5Cb3VuZGVkU2VtYXBob3JlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAndGVzdCBtYWNvc3ggcHJvYmxlbScpCisgICAgZGVmIHRlc3RfcmVjdXJzaW9uX2xpbWl0KHNlbGYpOgorICAgICAgICAjIElzc3VlIDk2NzAKKyAgICAgICAgIyB0ZXN0IHRoYXQgZXhjZXNzaXZlIHJlY3Vyc2lvbiB3aXRoaW4gYSBub24tbWFpbiB0aHJlYWQgY2F1c2VzCisgICAgICAgICMgYW4gZXhjZXB0aW9uIHJhdGhlciB0aGFuIGNyYXNoaW5nIHRoZSBpbnRlcnByZXRlciBvbiBwbGF0Zm9ybXMKKyAgICAgICAgIyBsaWtlIE1hYyBPUyBYIG9yIEZyZWVCU0Qgd2hpY2ggaGF2ZSBzbWFsbCBkZWZhdWx0IHN0YWNrIHNpemVzCisgICAgICAgICMgZm9yIHRocmVhZHMKKyAgICAgICAgc2NyaXB0ID0gIiIiaWYgVHJ1ZToKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKworICAgICAgICAgICAgZGVmIHJlY3Vyc2UoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVjdXJzZSgpCisKKyAgICAgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVjdXJzZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9b3V0ZXIpCisgICAgICAgICAgICB3LnN0YXJ0KCkKKyAgICAgICAgICAgIHcuam9pbigpCisgICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4gdGhyZWFkJykKKyAgICAgICAgICAgICIiIgorICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSAiZW5kIG9mIG1haW4gdGhyZWFkXG4iCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZGF0YSA9IHN0ZG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwgIlVuZXhwZWN0ZWQgZXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX291dHB1dCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChMb2NrVGVzdHMsIFJMb2NrVGVzdHMsIEV2ZW50VGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbkFzUkxvY2tUZXN0cywgQ29uZGl0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbWFwaG9yZVRlc3RzLCBCb3VuZGVkU2VtYXBob3JlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZFRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRKb2luT25TaHV0ZG93biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nRXhjZXB0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOWYyOTYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmdfbG9jYWwucHkKQEAgLTAsMCArMSwyMzQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBkb2N0ZXN0IGltcG9ydCBEb2NUZXN0U3VpdGUKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IGdjCisKKyMgTW9kdWxlcyB1bmRlciB0ZXN0CitfdGhyZWFkID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZCcpCit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKK2ltcG9ydCBfdGhyZWFkaW5nX2xvY2FsCisKKworY2xhc3MgV2VhayhvYmplY3QpOgorICAgIHBhc3MKKworZGVmIHRhcmdldChsb2NhbCwgd2Vha2xpc3QpOgorICAgIHdlYWsgPSBXZWFrKCkKKyAgICBsb2NhbC53ZWFrID0gd2VhaworICAgIHdlYWtsaXN0LmFwcGVuZCh3ZWFrcmVmLnJlZih3ZWFrKSkKKworY2xhc3MgQmFzZUxvY2FsVGVzdDoKKworICAgIGRlZiB0ZXN0X2xvY2FsX3JlZnMoc2VsZik6CisgICAgICAgIHNlbGYuX2xvY2FsX3JlZnMoMjApCisgICAgICAgIHNlbGYuX2xvY2FsX3JlZnMoNTApCisgICAgICAgIHNlbGYuX2xvY2FsX3JlZnMoMTAwKQorCisgICAgZGVmIF9sb2NhbF9yZWZzKHNlbGYsIG4pOgorICAgICAgICBsb2NhbCA9IHNlbGYuX2xvY2FsKCkKKyAgICAgICAgd2Vha2xpc3QgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD10YXJnZXQsIGFyZ3M9KGxvY2FsLCB3ZWFrbGlzdCkpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgIGRlbCB0CisKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdlYWtsaXN0KSwgbikKKworICAgICAgICAjIFhYWCBfdGhyZWFkaW5nX2xvY2FsIGtlZXBzIHRoZSBsb2NhbCBvZiB0aGUgbGFzdCBzdG9wcGVkIHRocmVhZCBhbGl2ZS4KKyAgICAgICAgZGVhZGxpc3QgPSBbd2VhayBmb3Igd2VhayBpbiB3ZWFrbGlzdCBpZiB3ZWFrKCkgaXMgTm9uZV0KKyAgICAgICAgc2VsZi5hc3NlcnRJbihsZW4oZGVhZGxpc3QpLCAobi0xLCBuKSkKKworICAgICAgICAjIEFzc2lnbm1lbnQgdG8gdGhlIHNhbWUgdGhyZWFkIGxvY2FsIGZyZWVzIGl0IHNvbWV0aW1lcyAoISkKKyAgICAgICAgbG9jYWwuc29tZW90aGVydmFyID0gTm9uZQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVhZGxpc3QgPSBbd2VhayBmb3Igd2VhayBpbiB3ZWFrbGlzdCBpZiB3ZWFrKCkgaXMgTm9uZV0KKyAgICAgICAgc2VsZi5hc3NlcnRJbihsZW4oZGVhZGxpc3QpLCAobi0xLCBuKSwgKG4sIGxlbihkZWFkbGlzdCkpKQorCisgICAgZGVmIHRlc3RfZGVyaXZlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAzMDg4OiBpZiB0aGVyZSBpcyBhIHRocmVhZHMgc3dpdGNoIGluc2lkZSB0aGUgX19pbml0X18KKyAgICAgICAgIyBvZiBhIHRocmVhZGluZy5sb2NhbCBkZXJpdmVkIGNsYXNzLCB0aGUgcGVyLXRocmVhZCBkaWN0aW9uYXJ5CisgICAgICAgICMgaXMgY3JlYXRlZCBidXQgbm90IGNvcnJlY3RseSBzZXQgb24gdGhlIG9iamVjdC4KKyAgICAgICAgIyBUaGUgZmlyc3QgbWVtYmVyIHNldCBtYXkgYmUgYm9ndXMuCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGNsYXNzIExvY2FsKHNlbGYuX2xvY2FsKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIGxvY2FsID0gTG9jYWwoKQorCisgICAgICAgIGRlZiBmKGkpOgorICAgICAgICAgICAgbG9jYWwueCA9IGkKKyAgICAgICAgICAgICMgU2ltcGx5IGNoZWNrIHRoYXQgdGhlIHZhcmlhYmxlIGlzIGNvcnJlY3RseSBzZXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWwueCwgaSkKKworICAgICAgICB0aHJlYWRzPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZiwgYXJncz0oaSwpKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisgICAgZGVmIHRlc3RfZGVyaXZlZF9jeWNsZV9kZWFsbG9jKHNlbGYpOgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2OTkwCisgICAgICAgIGNsYXNzIExvY2FsKHNlbGYuX2xvY2FsKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbG9jYWxzID0gTm9uZQorICAgICAgICBwYXNzZWQgPSBbRmFsc2VdCisgICAgICAgIGUxID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgZTIgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAjIDEpIEludm9sdmUgTG9jYWwgaW4gYSBjeWNsZQorICAgICAgICAgICAgY3ljbGUgPSBbTG9jYWwoKV0KKyAgICAgICAgICAgIGN5Y2xlLmFwcGVuZChjeWNsZSkKKyAgICAgICAgICAgIGN5Y2xlWzBdLmZvbyA9ICdiYXInCisKKyAgICAgICAgICAgICMgMikgR0MgdGhlIGN5Y2xlICh0cmlnZ2VycyB0aHJlYWRtb2R1bGUuYzo6bG9jYWxfY2xlYXIKKyAgICAgICAgICAgICMgYmVmb3JlIGxvY2FsX2RlYWxsb2MpCisgICAgICAgICAgICBkZWwgY3ljbGUKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgZTEuc2V0KCkKKyAgICAgICAgICAgIGUyLndhaXQoKQorCisgICAgICAgICAgICAjIDQpIE5ldyBMb2NhbHMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICAgICBwYXNzZWRbMF0gPSBhbGwobm90IGhhc2F0dHIobG9jYWwsICdmb28nKSBmb3IgbG9jYWwgaW4gbG9jYWxzKQorCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgZTEud2FpdCgpCisKKyAgICAgICAgIyAzKSBOZXcgTG9jYWxzIHNob3VsZCByZWN5Y2xlIHRoZSBvcmlnaW5hbCdzIGFkZHJlc3MuIENyZWF0aW5nCisgICAgICAgICMgdGhlbSBpbiB0aGUgdGhyZWFkIG92ZXJ3cml0ZXMgdGhlIHRocmVhZCBzdGF0ZSBhbmQgYXZvaWRzIHRoZQorICAgICAgICAjIGJ1ZworICAgICAgICBsb2NhbHMgPSBbTG9jYWwoKSBmb3IgaSBpbiByYW5nZSgxMCldCisgICAgICAgIGUyLnNldCgpCisgICAgICAgIHQuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NlZFswXSkKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNTIyMjM3CisgICAgICAgIGZyb20gdGhyZWFkIGltcG9ydCBfbG9jYWwgYXMgbG9jYWwKKyAgICAgICAgZnJvbSBfdGhyZWFkaW5nX2xvY2FsIGltcG9ydCBsb2NhbCBhcyBweV9sb2NhbAorCisgICAgICAgIGZvciBjbHMgaW4gKGxvY2FsLCBweV9sb2NhbCk6CisgICAgICAgICAgICBjbGFzcyBNeUxvY2FsKGNscyk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgTXlMb2NhbChhPTEpCisgICAgICAgICAgICBNeUxvY2FsKDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNscywgYT0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbHMsIDEpCisKKyAgICBkZWYgX3Rlc3Rfb25lX2NsYXNzKHNlbGYsIGMpOgorICAgICAgICBzZWxmLl9mYWlsZWQgPSAiTm8gZXJyb3IgbWVzc2FnZSBzZXQgb3IgY2xlYXJlZC4iCisgICAgICAgIG9iaiA9IGMoKQorICAgICAgICBlMSA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIGUyID0gdGhyZWFkaW5nLkV2ZW50KCkKKworICAgICAgICBkZWYgZjEoKToKKyAgICAgICAgICAgIG9iai54ID0gJ2ZvbycKKyAgICAgICAgICAgIG9iai55ID0gJ2JhcicKKyAgICAgICAgICAgIGRlbCBvYmoueQorICAgICAgICAgICAgZTEuc2V0KCkKKyAgICAgICAgICAgIGUyLndhaXQoKQorCisgICAgICAgIGRlZiBmMigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvbyA9IG9iai54CisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGV4cGVjdGVkIC0tIHdlIGhhdmVuJ3Qgc2V0IG9iai54IGluIHRoaXMgdGhyZWFkIHlldCEKKyAgICAgICAgICAgICAgICBzZWxmLl9mYWlsZWQgPSAiIiAgIyBwYXNzZWQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZmFpbGVkID0gKCdJbmNvcnJlY3RseSBnb3QgdmFsdWUgJXIgZnJvbSBjbGFzcyAlclxuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb28sIGMpKQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc2VsZi5fZmFpbGVkKQorCisgICAgICAgIHQxID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZjEpCisgICAgICAgIHQxLnN0YXJ0KCkKKyAgICAgICAgZTEud2FpdCgpCisgICAgICAgIHQyID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZjIpCisgICAgICAgIHQyLnN0YXJ0KCkKKyAgICAgICAgdDIuam9pbigpCisgICAgICAgICMgVGhlIHRlc3QgaXMgZG9uZTsganVzdCBsZXQgdDEga25vdyBpdCBjYW4gZXhpdCwgYW5kIHdhaXQgZm9yIGl0LgorICAgICAgICBlMi5zZXQoKQorICAgICAgICB0MS5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuX2ZhaWxlZCwgc2VsZi5fZmFpbGVkKQorCisgICAgZGVmIHRlc3RfdGhyZWFkaW5nX2xvY2FsKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X29uZV9jbGFzcyhzZWxmLl9sb2NhbCkKKworICAgIGRlZiB0ZXN0X3RocmVhZGluZ19sb2NhbF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTG9jYWxTdWJjbGFzcyhzZWxmLl9sb2NhbCk6CisgICAgICAgICAgICAiIiJUbyB0ZXN0IHRoYXQgc3ViY2xhc3NlcyBiZWhhdmUgcHJvcGVybHkuIiIiCisgICAgICAgIHNlbGYuX3Rlc3Rfb25lX2NsYXNzKExvY2FsU3ViY2xhc3MpCisKKyAgICBkZWYgX3Rlc3RfZGljdF9hdHRyaWJ1dGUoc2VsZiwgY2xzKToKKyAgICAgICAgb2JqID0gY2xzKCkKKyAgICAgICAgb2JqLnggPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fZGljdF9fLCB7J3gnOiA1fSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBvYmouX19kaWN0X18gPSB7fQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBvYmouX19kaWN0X18KKworICAgIGRlZiB0ZXN0X2RpY3RfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2RpY3RfYXR0cmlidXRlKHNlbGYuX2xvY2FsKQorCisgICAgZGVmIHRlc3RfZGljdF9hdHRyaWJ1dGVfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIExvY2FsU3ViY2xhc3Moc2VsZi5fbG9jYWwpOgorICAgICAgICAgICAgIiIiVG8gdGVzdCB0aGF0IHN1YmNsYXNzZXMgYmVoYXZlIHByb3Blcmx5LiIiIgorICAgICAgICBzZWxmLl90ZXN0X2RpY3RfYXR0cmlidXRlKExvY2FsU3ViY2xhc3MpCisKKworY2xhc3MgVGhyZWFkTG9jYWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBCYXNlTG9jYWxUZXN0KToKKyAgICBfbG9jYWwgPSBfdGhyZWFkLl9sb2NhbAorCisgICAgIyBGYWlscyBmb3IgdGhlIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uCisgICAgZGVmIHRlc3RfY3ljbGVfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB4ID0gWCgpCisgICAgICAgIHgubG9jYWwgPSBzZWxmLl9sb2NhbCgpCisgICAgICAgIHgubG9jYWwueCA9IHgKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih4KQorICAgICAgICBkZWwgeAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCitjbGFzcyBQeVRocmVhZGluZ0xvY2FsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQmFzZUxvY2FsVGVzdCk6CisgICAgX2xvY2FsID0gX3RocmVhZGluZ19sb2NhbC5sb2NhbAorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUuYWRkVGVzdChEb2NUZXN0U3VpdGUoJ190aHJlYWRpbmdfbG9jYWwnKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShUaHJlYWRMb2NhbFRlc3QpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKFB5VGhyZWFkaW5nTG9jYWxUZXN0KSkKKworICAgIHRyeToKKyAgICAgICAgZnJvbSB0aHJlYWQgaW1wb3J0IF9sb2NhbAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGltcG9ydCBfdGhyZWFkaW5nX2xvY2FsCisgICAgICAgIGxvY2FsX29yaWcgPSBfdGhyZWFkaW5nX2xvY2FsLmxvY2FsCisgICAgICAgIGRlZiBzZXRVcCh0ZXN0KToKKyAgICAgICAgICAgIF90aHJlYWRpbmdfbG9jYWwubG9jYWwgPSBfbG9jYWwKKyAgICAgICAgZGVmIHRlYXJEb3duKHRlc3QpOgorICAgICAgICAgICAgX3RocmVhZGluZ19sb2NhbC5sb2NhbCA9IGxvY2FsX29yaWcKKyAgICAgICAgc3VpdGUuYWRkVGVzdChEb2NUZXN0U3VpdGUoJ190aHJlYWRpbmdfbG9jYWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRVcD1zZXRVcCwgdGVhckRvd249dGVhckRvd24pCisgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChzdWl0ZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3ZWI2MAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKQEAgLTAsMCArMSw4NSBAQAorIiIiUHlVbml0IHRlc3RpbmcgdGhhdCB0aHJlYWRzIGhvbm9yIG91ciBzaWduYWwgc2VtYW50aWNzIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIHJlYXBfdGhyZWFkcwordGhyZWFkID0gaW1wb3J0X21vZHVsZSgndGhyZWFkJykKKworaWYgc3lzLnBsYXRmb3JtWzozXSBpbiAoJ3dpbicsICdvczInKSBvciBzeXMucGxhdGZvcm09PSdyaXNjb3MnOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAiQ2FuJ3QgdGVzdCBzaWduYWwgb24gJXMiICUgc3lzLnBsYXRmb3JtCisKK3Byb2Nlc3NfcGlkID0gb3MuZ2V0cGlkKCkKK3NpZ25hbGxlZF9hbGw9dGhyZWFkLmFsbG9jYXRlX2xvY2soKQorCisKK2RlZiByZWdpc3RlclNpZ25hbHMoZm9yX3VzcjEsIGZvcl91c3IyLCBmb3JfYWxybSk6CisgICAgdXNyMSA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIGZvcl91c3IxKQorICAgIHVzcjIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IyLCBmb3JfdXNyMikKKyAgICBhbHJtID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgZm9yX2Fscm0pCisgICAgcmV0dXJuIHVzcjEsIHVzcjIsIGFscm0KKworCisjIFRoZSBzaWduYWwgaGFuZGxlci4gSnVzdCBub3RlIHRoYXQgdGhlIHNpZ25hbCBvY2N1cnJlZCBhbmQKKyMgZnJvbSB3aG8uCitkZWYgaGFuZGxlX3NpZ25hbHMoc2lnLGZyYW1lKToKKyAgICBzaWduYWxfYmxhY2tib2FyZFtzaWddWyd0cmlwcGVkJ10gKz0gMQorICAgIHNpZ25hbF9ibGFja2JvYXJkW3NpZ11bJ3RyaXBwZWRfYnknXSA9IHRocmVhZC5nZXRfaWRlbnQoKQorCisjIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHNwYXduZWQgYXMgYSBzZXBhcmF0ZSB0aHJlYWQuCitkZWYgc2VuZF9zaWduYWxzKCk6CisgICAgb3Mua2lsbChwcm9jZXNzX3BpZCwgc2lnbmFsLlNJR1VTUjEpCisgICAgb3Mua2lsbChwcm9jZXNzX3BpZCwgc2lnbmFsLlNJR1VTUjIpCisgICAgc2lnbmFsbGVkX2FsbC5yZWxlYXNlKCkKKworY2xhc3MgVGhyZWFkU2lnbmFscyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBzaWduYWwgaGFuZGxpbmcgc2VtYW50aWNzIG9mIHRocmVhZHMuCisgICAgICAgV2Ugc3Bhd24gYSB0aHJlYWQsIGhhdmUgdGhlIHRocmVhZCBzZW5kIHR3byBzaWduYWxzLCBhbmQKKyAgICAgICB3YWl0IGZvciBpdCB0byBmaW5pc2guIENoZWNrIHRoYXQgd2UgZ290IGJvdGggc2lnbmFscworICAgICAgIGFuZCB0aGF0IHRoZXkgd2VyZSBydW4gYnkgdGhlIG1haW4gdGhyZWFkLgorICAgICIiIgorICAgIEByZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF9zaWduYWxzKHNlbGYpOgorICAgICAgICBzaWduYWxsZWRfYWxsLmFjcXVpcmUoKQorICAgICAgICBzZWxmLnNwYXduU2lnbmFsbGluZ1RocmVhZCgpCisgICAgICAgIHNpZ25hbGxlZF9hbGwuYWNxdWlyZSgpCisgICAgICAgICMgdGhlIHNpZ25hbHMgdGhhdCB3ZSBhc2tlZCB0aGUga2VybmVsIHRvIHNlbmQKKyAgICAgICAgIyB3aWxsIGNvbWUgYmFjaywgYnV0IHdlIGRvbid0IGtub3cgd2hlbi4KKyAgICAgICAgIyAoaXQgbWlnaHQgZXZlbiBiZSBhZnRlciB0aGUgdGhyZWFkIGV4aXRzCisgICAgICAgICMgYW5kIG1pZ2h0IGJlIG91dCBvZiBvcmRlci4pICBJZiB3ZSBoYXZlbid0IHNlZW4KKyAgICAgICAgIyB0aGUgc2lnbmFscyB5ZXQsIHNlbmQgeWV0IGFub3RoZXIgc2lnbmFsIGFuZAorICAgICAgICAjIHdhaXQgZm9yIGl0IHJldHVybi4KKyAgICAgICAgaWYgc2lnbmFsX2JsYWNrYm9hcmRbc2lnbmFsLlNJR1VTUjFdWyd0cmlwcGVkJ10gPT0gMCBcCisgICAgICAgICAgIG9yIHNpZ25hbF9ibGFja2JvYXJkW3NpZ25hbC5TSUdVU1IyXVsndHJpcHBlZCddID09IDA6CisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgIHNpZ25hbC5wYXVzZSgpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzaWduYWxfYmxhY2tib2FyZFtzaWduYWwuU0lHVVNSMV1bJ3RyaXBwZWQnXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2lnbmFsX2JsYWNrYm9hcmRbc2lnbmFsLlNJR1VTUjFdWyd0cmlwcGVkX2J5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQuZ2V0X2lkZW50KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNpZ25hbF9ibGFja2JvYXJkW3NpZ25hbC5TSUdVU1IyXVsndHJpcHBlZCddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzaWduYWxfYmxhY2tib2FyZFtzaWduYWwuU0lHVVNSMl1bJ3RyaXBwZWRfYnknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC5nZXRfaWRlbnQoKSkKKyAgICAgICAgc2lnbmFsbGVkX2FsbC5yZWxlYXNlKCkKKworICAgIGRlZiBzcGF3blNpZ25hbGxpbmdUaHJlYWQoc2VsZik6CisgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHNlbmRfc2lnbmFscywgKCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGdsb2JhbCBzaWduYWxfYmxhY2tib2FyZAorCisgICAgc2lnbmFsX2JsYWNrYm9hcmQgPSB7IHNpZ25hbC5TSUdVU1IxIDogeyd0cmlwcGVkJzogMCwgJ3RyaXBwZWRfYnknOiAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdVU1IyIDogeyd0cmlwcGVkJzogMCwgJ3RyaXBwZWRfYnknOiAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdBTFJNIDogeyd0cmlwcGVkJzogMCwgJ3RyaXBwZWRfYnknOiAwIH0gfQorCisgICAgb2xkc2lncyA9IHJlZ2lzdGVyU2lnbmFscyhoYW5kbGVfc2lnbmFscywgaGFuZGxlX3NpZ25hbHMsIGhhbmRsZV9zaWduYWxzKQorICAgIHRyeToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KFRocmVhZFNpZ25hbHMpCisgICAgZmluYWxseToKKyAgICAgICAgcmVnaXN0ZXJTaWduYWxzKCpvbGRzaWdzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90aW1lLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGltZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTcxYzEwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGltZS5weQpAQCAtMCwwICsxLDI1NSBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKKworCitjbGFzcyBUaW1lVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnQgPSB0aW1lLnRpbWUoKQorCisgICAgZGVmIHRlc3RfZGF0YV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICB0aW1lLmFsdHpvbmUKKyAgICAgICAgdGltZS5kYXlsaWdodAorICAgICAgICB0aW1lLnRpbWV6b25lCisgICAgICAgIHRpbWUudHpuYW1lCisKKyAgICBkZWYgdGVzdF9jbG9jayhzZWxmKToKKyAgICAgICAgdGltZS5jbG9jaygpCisKKyAgICBkZWYgdGVzdF9jb252ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuY3RpbWUoc2VsZi50KQorICAgICAgICAgICAgICAgICAgICAgPT0gdGltZS5hc2N0aW1lKHRpbWUubG9jYWx0aW1lKHNlbGYudCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9uZyh0aW1lLm1rdGltZSh0aW1lLmxvY2FsdGltZShzZWxmLnQpKSkKKyAgICAgICAgICAgICAgICAgICAgID09IGxvbmcoc2VsZi50KSkKKworICAgIGRlZiB0ZXN0X3NsZWVwKHNlbGYpOgorICAgICAgICB0aW1lLnNsZWVwKDEuMikKKworICAgIGRlZiB0ZXN0X3N0cmZ0aW1lKHNlbGYpOgorICAgICAgICB0dCA9IHRpbWUuZ210aW1lKHNlbGYudCkKKyAgICAgICAgZm9yIGRpcmVjdGl2ZSBpbiAoJ2EnLCAnQScsICdiJywgJ0InLCAnYycsICdkJywgJ0gnLCAnSScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdqJywgJ20nLCAnTScsICdwJywgJ1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnVScsICd3JywgJ1cnLCAneCcsICdYJywgJ3knLCAnWScsICdaJywgJyUnKToKKyAgICAgICAgICAgIGZvcm1hdCA9ICcgJScgKyBkaXJlY3RpdmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKGZvcm1hdCwgdHQpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2NvbnZlcnNpb24gc3BlY2lmaWVyOiAlciBmYWlsZWQuJyAlIGZvcm1hdCkKKworICAgICAgICAjIElzc3VlICMxMDc2MjogR3VhcmQgYWdhaW5zdCBpbnZhbGlkL25vbi1zdXBwb3J0ZWQgZm9ybWF0IHN0cmluZworICAgICAgICAjIHNvIHRoYXQgUHl0aG9uIGRvbid0IGNyYXNoIChXaW5kb3dzIGNyYXNoZXMgd2hlbiB0aGUgZm9ybWF0IHN0cmluZworICAgICAgICAjIGlucHV0IHRvIFt3XXN0cmZ0aW1lIGlzIG5vdCBrb3NoZXIuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgdGltZS5zdHJmdGltZSgnJWYnKQorCisgICAgZGVmIHRlc3Rfc3RyZnRpbWVfYm91bmRzX2NoZWNraW5nKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHN0cmZ0aW1lKCkgY2hlY2tzIHRoZSBib3VuZHMgb2YgdGhlIHZhcmlvdXMgcGFydHMKKyAgICAgICAgI29mIHRoZSB0aW1lIHR1cGxlICgwIGlzIHZhbGlkIGZvciAqYWxsKiB2YWx1ZXMpLgorCisgICAgICAgICMgQ2hlY2sgeWVhciBbMTkwMCwgbWF4KGludCldCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxODk5LCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAtMSkpCisgICAgICAgIGlmIHRpbWUuYWNjZXB0MmR5ZWFyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgLTEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIC0xKSkKKyAgICAgICAgIyBDaGVjayBtb250aCBbMSwgMTJdICsgemVybyBzdXBwb3J0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAtMSwgMSwgMCwgMCwgMCwgMCwgMSwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMTMsIDEsIDAsIDAsIDAsIDAsIDEsIC0xKSkKKyAgICAgICAgIyBDaGVjayBkYXkgb2YgbW9udGggWzEsIDMxXSArIHplcm8gc3VwcG9ydAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgLTEsIDAsIDAsIDAsIDAsIDEsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDMyLCAwLCAwLCAwLCAwLCAxLCAtMSkpCisgICAgICAgICMgQ2hlY2sgaG91ciBbMCwgMjNdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAtMSwgMCwgMCwgMCwgMSwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMjQsIDAsIDAsIDAsIDEsIC0xKSkKKyAgICAgICAgIyBDaGVjayBtaW51dGUgWzAsIDU5XQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgLTEsIDAsIDAsIDEsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIDYwLCAwLCAwLCAxLCAtMSkpCisgICAgICAgICMgQ2hlY2sgc2Vjb25kIFswLCA2MV0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIDAsIC0xLCAwLCAxLCAtMSkpCisgICAgICAgICMgQzk5IG9ubHkgcmVxdWlyZXMgYWxsb3dpbmcgZm9yIG9uZSBsZWFwIHNlY29uZCwgYnV0IFB5dGhvbidzIGRvY3Mgc2F5CisgICAgICAgICMgYWxsb3cgdHdvIGxlYXAgc2Vjb25kcyAoMC4uNjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAwLCAwLCA2MiwgMCwgMSwgLTEpKQorICAgICAgICAjIE5vIGNoZWNrIGZvciB1cHBlci1ib3VuZCBkYXkgb2Ygd2VlazsKKyAgICAgICAgIyAgdmFsdWUgZm9yY2VkIGludG8gcmFuZ2UgYnkgYSBgYCUgN2BgIGNhbGN1bGF0aW9uLgorICAgICAgICAjIFN0YXJ0IGNoZWNrIGF0IC0yIHNpbmNlIGdldHRtYXJnKCkgaW5jcmVtZW50cyB2YWx1ZSBiZWZvcmUgdGFraW5nCisgICAgICAgICMgIG1vZHVsby4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIDAsIDAsIC0yLCAxLCAtMSkpCisgICAgICAgICMgQ2hlY2sgZGF5IG9mIHRoZSB5ZWFyIFsxLCAzNjZdICsgemVybyBzdXBwb3J0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAtMSwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMzY3LCAtMSkpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3ZhbHVlc19mb3JfemVybyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB1c2luZyBhbGwgemVyb3MgdXNlcyB0aGUgcHJvcGVyIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAjIE5vIHRlc3QgZm9yIGRheWxpZ2h0IHNhdmluZ3Mgc2luY2Ugc3RyZnRpbWUoKSBkb2VzIG5vdCBjaGFuZ2Ugb3V0cHV0CisgICAgICAgICMgYmFzZWQgb24gaXRzIHZhbHVlLgorICAgICAgICBleHBlY3RlZCA9ICIyMDAwIDAxIDAxIDAwIDAwIDAwIDEgMDAxIgorICAgICAgICByZXN1bHQgPSB0aW1lLnN0cmZ0aW1lKCIlWSAlbSAlZCAlSCAlTSAlUyAldyAlaiIsICgwLCkqOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0KQorCisgICAgZGVmIHRlc3Rfc3RycHRpbWUoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGJlIGFibGUgdG8gZ28gcm91bmQtdHJpcCBmcm9tIHN0cmZ0aW1lIHRvIHN0cnB0aW1lIHdpdGhvdXQKKyAgICAgICAgIyByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgdHQgPSB0aW1lLmdtdGltZShzZWxmLnQpCisgICAgICAgIGZvciBkaXJlY3RpdmUgaW4gKCdhJywgJ0EnLCAnYicsICdCJywgJ2MnLCAnZCcsICdIJywgJ0knLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaicsICdtJywgJ00nLCAncCcsICdTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ1UnLCAndycsICdXJywgJ3gnLCAnWCcsICd5JywgJ1knLCAnWicsICclJyk6CisgICAgICAgICAgICBmb3JtYXQgPSAnJScgKyBkaXJlY3RpdmUKKyAgICAgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZShmb3JtYXQsIHR0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRpbWUuc3RycHRpbWUoc3RyZl9vdXRwdXQsIGZvcm1hdCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiY29udmVyc2lvbiBzcGVjaWZpZXIgJXIgZmFpbGVkIHdpdGggJyVzJyBpbnB1dC4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCwgc3RyZl9vdXRwdXQpKQorCisgICAgZGVmIHRlc3RfYXNjdGltZShzZWxmKToKKyAgICAgICAgdGltZS5hc2N0aW1lKHRpbWUuZ210aW1lKHNlbGYudCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGltZS5hc2N0aW1lLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRpbWUuYXNjdGltZSwgKCkpCisgICAgICAgICMgWFhYOiBQb3NpeCBjb21waWFudCBhc2N0aW1lIHNob3VsZCByZWZ1c2UgdG8gY29udmVydAorICAgICAgICAjIHllYXIgPiA5OTk5LCBidXQgTGludXggaW1wbGVtZW50YXRpb24gZG9lcyBub3QuCisgICAgICAgICMgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5hc2N0aW1lLAorICAgICAgICAjICAgICAgICAgICAgICAgICAgKDEyMzQ1LCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgIyBYWFg6IEZvciBub3csIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgYSBjcmFzaDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGltZS5hc2N0aW1lKCgxMjM0NSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCkpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cih0aW1lLCAidHpzZXQiKSwKKyAgICAgICAgInRpbWUgbW9kdWxlIGhhcyBubyBhdHRyaWJ1dGUgdHpzZXQiKQorICAgIGRlZiB0ZXN0X3R6c2V0KHNlbGYpOgorCisgICAgICAgIGZyb20gb3MgaW1wb3J0IGVudmlyb24KKworICAgICAgICAjIEVwb2NoIHRpbWUgb2YgbWlkbmlnaHQgRGVjIDI1dGggMjAwMi4gTmV2ZXIgRFNUIGluIG5vcnRoZXJuCisgICAgICAgICMgaGVtaXNwaGVyZS4KKyAgICAgICAgeG1hczIwMDIgPSAxMDQwNzc0NDAwLjAKKworICAgICAgICAjIFRoZXNlIGZvcm1hdHMgYXJlIGNvcnJlY3QgZm9yIDIwMDIsIGFuZCBwb3NzaWJseSBmdXR1cmUgeWVhcnMKKyAgICAgICAgIyBUaGlzIGZvcm1hdCBpcyB0aGUgJ3N0YW5kYXJkJyBhcyBkb2N1bWVudGVkIGF0OgorICAgICAgICAjIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwNzkwNDk3NS9iYXNlZGVmcy94YmRfY2hhcDA4Lmh0bWwKKyAgICAgICAgIyBUaGV5IGFyZSBhbHNvIGRvY3VtZW50ZWQgaW4gdGhlIHR6c2V0KDMpIG1hbiBwYWdlIG9uIG1vc3QgVW5peAorICAgICAgICAjIHN5c3RlbXMuCisgICAgICAgIGVhc3Rlcm4gPSAnRVNUKzA1RURULE00LjEuMCxNMTAuNS4wJworICAgICAgICB2aWN0b3JpYSA9ICdBRVNULTEwQUVEVC0xMSxNMTAuNS4wLE0zLjUuMCcKKyAgICAgICAgdXRjPSdVVEMrMCcKKworICAgICAgICBvcmdfVFogPSBlbnZpcm9uLmdldCgnVFonLE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGNhbiBzd2l0Y2ggdG8gVVRDIHRpbWUgYW5kIHJlc3VsdHMgYXJlIGNvcnJlY3QKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IHVua25vd24gdGltZXpvbmVzIGRlZmF1bHQgdG8gVVRDLgorICAgICAgICAgICAgIyBOb3RlIHRoYXQgYWx0em9uZSBpcyB1bmRlZmluZWQgaW4gVVRDLCBhcyB0aGVyZSBpcyBubyBEU1QKKyAgICAgICAgICAgIGVudmlyb25bJ1RaJ10gPSBlYXN0ZXJuCisgICAgICAgICAgICB0aW1lLnR6c2V0KCkKKyAgICAgICAgICAgIGVudmlyb25bJ1RaJ10gPSB1dGMKKyAgICAgICAgICAgIHRpbWUudHpzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICB0aW1lLmdtdGltZSh4bWFzMjAwMiksIHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5kYXlsaWdodCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS50aW1lem9uZSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5sb2NhbHRpbWUoeG1hczIwMDIpLnRtX2lzZHN0LCAwKQorCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBjYW4gc3dpdGNoIHRvIFVTL0Vhc3Rlcm4KKyAgICAgICAgICAgIGVudmlyb25bJ1RaJ10gPSBlYXN0ZXJuCisgICAgICAgICAgICB0aW1lLnR6c2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodGltZS5nbXRpbWUoeG1hczIwMDIpLCB0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUudHpuYW1lLCAoJ0VTVCcsICdFRFQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRpbWUudHpuYW1lKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5kYXlsaWdodCwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS50aW1lem9uZSwgMTgwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuYWx0em9uZSwgMTQ0MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKS50bV9pc2RzdCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRpbWUudHpuYW1lKSwgMikKKworICAgICAgICAgICAgIyBOb3cgZ28gdG8gdGhlIHNvdXRoZXJuIGhlbWlzcGhlcmUuCisgICAgICAgICAgICBlbnZpcm9uWydUWiddID0gdmljdG9yaWEKKyAgICAgICAgICAgIHRpbWUudHpzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0aW1lLmdtdGltZSh4bWFzMjAwMiksIHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKSkKKworICAgICAgICAgICAgIyBJc3N1ZSAjMTE4ODY6IEF1c3RyYWxpYW4gRWFzdGVybiBTdGFuZGFyZCBUaW1lIChVVEMrMTApIGlzIGNhbGxlZAorICAgICAgICAgICAgIyAiRVNUIiAoYXMgRWFzdGVybiBTdGFuZGFyZCBUaW1lLCBVVEMtNSkgaW5zdGVhZCBvZiAiQUVTVCIgb24gc29tZQorICAgICAgICAgICAgIyBvcGVyYXRpbmcgc3lzdGVtcyAoZS5nLiBGcmVlQlNEKSwgd2hpY2ggaXMgd3JvbmcuIFNlZSBmb3IgZXhhbXBsZQorICAgICAgICAgICAgIyB0aGlzIGJ1ZzogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTkzODEwCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHRpbWUudHpuYW1lWzBdLCAoJ0FFU1QnICdFU1QnKSwgdGltZS50em5hbWVbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS50em5hbWVbMV0gPT0gJ0FFRFQnLCBzdHIodGltZS50em5hbWVbMV0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGltZS50em5hbWUpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmRheWxpZ2h0LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLnRpbWV6b25lLCAtMzYwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuYWx0em9uZSwgLTM5NjAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikudG1faXNkc3QsIDEpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgUmVwYWlyIFRaIGVudmlyb25tZW50IHZhcmlhYmxlIGluIGNhc2UgYW55IG90aGVyIHRlc3RzCisgICAgICAgICAgICAjIHJlbHkgb24gaXQuCisgICAgICAgICAgICBpZiBvcmdfVFogaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZW52aXJvblsnVFonXSA9IG9yZ19UWgorICAgICAgICAgICAgZWxpZiBlbnZpcm9uLmhhc19rZXkoJ1RaJyk6CisgICAgICAgICAgICAgICAgZGVsIGVudmlyb25bJ1RaJ10KKyAgICAgICAgICAgIHRpbWUudHpzZXQoKQorCisgICAgZGVmIHRlc3RfaW5zYW5lX3RpbWVzdGFtcHMoc2VsZik6CisgICAgICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgcGxhdGZvcm0gbWFwcyB0aW1lX3QgdG8gZG91YmxlLAorICAgICAgICAjIGFuZCB0aGF0IHRoaXMgdGVzdCB3aWxsIGZhaWwgdGhlcmUuICBUaGlzIHRlc3Qgc2hvdWxkCisgICAgICAgICMgZXhlbXB0IHN1Y2ggcGxhdGZvcm1zIChwcm92aWRlZCB0aGV5IHJldHVybiByZWFzb25hYmxlCisgICAgICAgICMgcmVzdWx0cyEpLgorICAgICAgICBmb3IgZnVuYyBpbiB0aW1lLmN0aW1lLCB0aW1lLmdtdGltZSwgdGltZS5sb2NhbHRpbWU6CisgICAgICAgICAgICBmb3IgdW5yZWFzb25hYmxlIGluIC0xZTIwMCwgMWUyMDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnVuYywgdW5yZWFzb25hYmxlKQorCisgICAgZGVmIHRlc3RfY3RpbWVfd2l0aG91dF9hcmcoc2VsZik6CisgICAgICAgICMgTm90IHN1cmUgaG93IHRvIGNoZWNrIHRoZSB2YWx1ZXMsIHNpbmNlIHRoZSBjbG9jayBjb3VsZCB0aWNrCisgICAgICAgICMgYXQgYW55IHRpbWUuICBNYWtlIHN1cmUgdGhlc2UgYXJlIGF0IGxlYXN0IGFjY2VwdGVkIGFuZAorICAgICAgICAjIGRvbid0IHJhaXNlIGVycm9ycy4KKyAgICAgICAgdGltZS5jdGltZSgpCisgICAgICAgIHRpbWUuY3RpbWUoTm9uZSkKKworICAgIGRlZiB0ZXN0X2dtdGltZV93aXRob3V0X2FyZyhzZWxmKToKKyAgICAgICAgZ3QwID0gdGltZS5nbXRpbWUoKQorICAgICAgICBndDEgPSB0aW1lLmdtdGltZShOb25lKQorICAgICAgICB0MCA9IHRpbWUubWt0aW1lKGd0MCkKKyAgICAgICAgdDEgPSB0aW1lLm1rdGltZShndDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9ICh0MS10MCkgPCAwLjIpCisKKyAgICBkZWYgdGVzdF9sb2NhbHRpbWVfd2l0aG91dF9hcmcoc2VsZik6CisgICAgICAgIGx0MCA9IHRpbWUubG9jYWx0aW1lKCkKKyAgICAgICAgbHQxID0gdGltZS5sb2NhbHRpbWUoTm9uZSkKKyAgICAgICAgdDAgPSB0aW1lLm1rdGltZShsdDApCisgICAgICAgIHQxID0gdGltZS5ta3RpbWUobHQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSAodDEtdDApIDwgMC4yKQorCisgICAgZGVmIHRlc3RfbWt0aW1lKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzI2Njg3CisgICAgICAgIGZvciB0IGluICgtMiwgLTEsIDAsIDEpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHR0ID0gdGltZS5sb2NhbHRpbWUodCkKKyAgICAgICAgICAgIGV4Y2VwdCAoT3ZlcmZsb3dFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUubWt0aW1lKHR0KSwgdCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUaW1lVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjMTI1ZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKQEAgLTAsMCArMSwyMDIgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIHNvY2tldCB0aW1lb3V0IGZlYXR1cmUuIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBUaGlzIHJlcXVpcmVzIHRoZSAnbmV0d29yaycgcmVzb3VyY2UgYXMgZ2l2ZW4gb24gdGhlIHJlZ3J0ZXN0IGNvbW1hbmQgbGluZS4KK3NraXBfZXhwZWN0ZWQgPSBub3QgdGVzdF9zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKQorCitpbXBvcnQgdGltZQoraW1wb3J0IHNvY2tldAorCisKK2NsYXNzIENyZWF0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgY2FzZSBmb3Igc29ja2V0LmdldHRpbWVvdXQoKSBhbmQgc29ja2V0LnNldHRpbWVvdXQoKSIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdE9iamVjdENyZWF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgU29ja2V0IGNyZWF0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLmdldHRpbWVvdXQoKSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dCBub3QgZGlzYWJsZWQgYnkgZGVmYXVsdCIpCisKKyAgICBkZWYgdGVzdEZsb2F0UmV0dXJuVmFsdWUoc2VsZik6CisgICAgICAgICMgVGVzdCByZXR1cm4gdmFsdWUgb2YgZ2V0dGltZW91dCgpCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDcuMzQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5nZXR0aW1lb3V0KCksIDcuMzQ1KQorCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLmdldHRpbWVvdXQoKSwgMykKKworICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5nZXR0aW1lb3V0KCksIE5vbmUpCisKKyAgICBkZWYgdGVzdFJldHVyblR5cGUoc2VsZik6CisgICAgICAgICMgVGVzdCByZXR1cm4gdHlwZSBvZiBnZXR0aW1lb3V0KCkKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHNlbGYuc29jay5nZXR0aW1lb3V0KCkpLCB0eXBlKDEuMCkpCisKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMy45KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc2VsZi5zb2NrLmdldHRpbWVvdXQoKSksIHR5cGUoMS4wKSkKKworICAgIGRlZiB0ZXN0VHlwZUNoZWNrKHNlbGYpOgorICAgICAgICAjIFRlc3QgdHlwZSBjaGVja2luZyBieSBzZXR0aW1lb3V0KCkKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMCkKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMEwpCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDAuMCkKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNvY2suc2V0dGltZW91dCwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zb2NrLnNldHRpbWVvdXQsIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNvY2suc2V0dGltZW91dCwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zb2NrLnNldHRpbWVvdXQsIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc29jay5zZXR0aW1lb3V0LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNvY2suc2V0dGltZW91dCwgMGopCisKKyAgICBkZWYgdGVzdFJhbmdlQ2hlY2soc2VsZik6CisgICAgICAgICMgVGVzdCByYW5nZSBjaGVja2luZyBieSBzZXR0aW1lb3V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zb2NrLnNldHRpbWVvdXQsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnNvY2suc2V0dGltZW91dCwgLTFMKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnNvY2suc2V0dGltZW91dCwgLTEuMCkKKworICAgIGRlZiB0ZXN0VGltZW91dFRoZW5CbG9ja2luZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHNldHRpbWVvdXQoKSBmb2xsb3dlZCBieSBzZXRibG9ja2luZygpCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICBzZWxmLnNvY2suc2V0YmxvY2tpbmcoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suZ2V0dGltZW91dCgpLCBOb25lKQorICAgICAgICBzZWxmLnNvY2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suZ2V0dGltZW91dCgpLCAwLjApCisKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMTApCisgICAgICAgIHNlbGYuc29jay5zZXRibG9ja2luZygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5nZXR0aW1lb3V0KCksIDAuMCkKKyAgICAgICAgc2VsZi5zb2NrLnNldGJsb2NraW5nKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLmdldHRpbWVvdXQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0QmxvY2tpbmdUaGVuVGltZW91dChzZWxmKToKKyAgICAgICAgIyBUZXN0IHNldGJsb2NraW5nKCkgZm9sbG93ZWQgYnkgc2V0dGltZW91dCgpCisgICAgICAgIHNlbGYuc29jay5zZXRibG9ja2luZygwKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5nZXR0aW1lb3V0KCksIDEpCisKKyAgICAgICAgc2VsZi5zb2NrLnNldGJsb2NraW5nKDEpCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLmdldHRpbWVvdXQoKSwgMSkKKworCitjbGFzcyBUaW1lb3V0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgY2FzZSBmb3Igc29ja2V0LnNvY2tldCgpIHRpbWVvdXQgZnVuY3Rpb25zIiIiCisKKyAgICAjIFRoZXJlIGFyZSBhIG51bWJlciBvZiB0ZXN0cyBoZXJlIHRyeWluZyB0byBtYWtlIHN1cmUgdGhhdCBhbiBvcGVyYXRpb24KKyAgICAjIGRvZXNuJ3QgdGFrZSB0b28gbXVjaCBsb25nZXIgdGhhbiBleHBlY3RlZC4gIEJ1dCBjb21wZXRpbmcgbWFjaGluZQorICAgICMgYWN0aXZpdHkgbWFrZXMgaXQgaW5ldml0YWJsZSB0aGF0IHN1Y2ggdGVzdHMgd2lsbCBmYWlsIGF0IHRpbWVzLgorICAgICMgV2hlbiBmdXp6IHdhcyBhdCAxLjAsIEkgKHRpbSkgcm91dGluZWx5IHNhdyBib2d1cyBmYWlsdXJlcyBvbiBXaW4ySworICAgICMgYW5kIFdpbjk4U0UuICBCb29zdGluZyBpdCB0byAyLjAgaGVscGVkIGEgbG90LCBidXQgaXNuJ3QgYSByZWFsCisgICAgIyBzb2x1dGlvbi4KKyAgICBmdXp6ID0gMi4wCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRyX3JlbW90ZSA9ICgnd3d3LnB5dGhvbi5vcmcuJywgODApCisgICAgICAgIHNlbGYubG9jYWxob3N0ID0gJzEyNy4wLjAuMScKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0Q29ubmVjdFRpbWVvdXQoc2VsZik6CisgICAgICAgICMgQ2hvb3NlIGEgcHJpdmF0ZSBhZGRyZXNzIHRoYXQgaXMgdW5saWtlbHkgdG8gZXhpc3QgdG8gcHJldmVudAorICAgICAgICAjIGZhaWx1cmVzIGR1ZSB0byB0aGUgY29ubmVjdCBzdWNjZWVkaW5nIGJlZm9yZSB0aGUgdGltZW91dC4KKyAgICAgICAgIyBVc2UgYSBkb3R0ZWQgSVAgYWRkcmVzcyB0byBhdm9pZCBpbmNsdWRpbmcgdGhlIEROUyBsb29rdXAgdGltZQorICAgICAgICAjIHdpdGggdGhlIGNvbm5lY3QgdGltZS4gIFRoaXMgYXZvaWRzIGZhaWxpbmcgdGhlIGFzc2VydGlvbiB0aGF0CisgICAgICAgICMgdGhlIHRpbWVvdXQgb2NjdXJyZWQgZmFzdCBlbm91Z2guCisgICAgICAgIGFkZHIgPSAoJzEwLjAuMC4wJywgMTIzNDUpCisKKyAgICAgICAgIyBUZXN0IGNvbm5lY3QoKSB0aW1lb3V0CisgICAgICAgIF90aW1lb3V0ID0gMC4wMDEKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoX3RpbWVvdXQpCisKKyAgICAgICAgX3QxID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNvY2suY29ubmVjdCwgYWRkcikKKyAgICAgICAgX3QyID0gdGltZS50aW1lKCkKKworICAgICAgICBfZGVsdGEgPSBhYnMoX3QxIC0gX3QyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCisgICAgICAgICAgICAgICAgICAgICAidGltZW91dCAoJWcpIGlzIG1vcmUgdGhhbiAlZyBzZWNvbmRzIG1vcmUgdGhhbiBleHBlY3RlZCAoJWcpIgorICAgICAgICAgICAgICAgICAgICAgJShfZGVsdGEsIHNlbGYuZnV6eiwgX3RpbWVvdXQpKQorCisgICAgZGVmIHRlc3RSZWN2VGltZW91dChzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlY3YoKSB0aW1lb3V0CisgICAgICAgIF90aW1lb3V0ID0gMC4wMgorCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLmFkZHJfcmVtb3RlWzBdKToKKyAgICAgICAgICAgIHNlbGYuc29jay5jb25uZWN0KHNlbGYuYWRkcl9yZW1vdGUpCisgICAgICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dChfdGltZW91dCkKKworICAgICAgICAgICAgX3QxID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBzZWxmLnNvY2sucmVjdiwgMTAyNCkKKyAgICAgICAgICAgIF90MiA9IHRpbWUudGltZSgpCisKKyAgICAgICAgICAgIF9kZWx0YSA9IGFicyhfdDEgLSBfdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCisgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgKCVnKSBpcyAlZyBzZWNvbmRzIG1vcmUgdGhhbiBleHBlY3RlZCAoJWcpIgorICAgICAgICAgICAgICAgICAgICAgICAgICUoX2RlbHRhLCBzZWxmLmZ1enosIF90aW1lb3V0KSkKKworICAgIGRlZiB0ZXN0QWNjZXB0VGltZW91dChzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjY2VwdCgpIHRpbWVvdXQKKyAgICAgICAgX3RpbWVvdXQgPSAyCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KF90aW1lb3V0KQorICAgICAgICAjIFByZXZlbnQgIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiIHNvY2tldCBleGNlcHRpb25zCisgICAgICAgIHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrLCBzZWxmLmxvY2FsaG9zdCkKKyAgICAgICAgc2VsZi5zb2NrLmxpc3Rlbig1KQorCisgICAgICAgIF90MSA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLmFjY2VwdCkKKyAgICAgICAgX3QyID0gdGltZS50aW1lKCkKKworICAgICAgICBfZGVsdGEgPSBhYnMoX3QxIC0gX3QyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCisgICAgICAgICAgICAgICAgICAgICAidGltZW91dCAoJWcpIGlzICVnIHNlY29uZHMgbW9yZSB0aGFuIGV4cGVjdGVkICglZykiCisgICAgICAgICAgICAgICAgICAgICAlKF9kZWx0YSwgc2VsZi5mdXp6LCBfdGltZW91dCkpCisKKyAgICBkZWYgdGVzdFJlY3Zmcm9tVGltZW91dChzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlY3Zmcm9tKCkgdGltZW91dAorICAgICAgICBfdGltZW91dCA9IDIKKyAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KF90aW1lb3V0KQorICAgICAgICAjIFByZXZlbnQgIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiIHNvY2tldCBleGNlcHRpb25zCisgICAgICAgIHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrLCBzZWxmLmxvY2FsaG9zdCkKKworICAgICAgICBfdDEgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuc29jay5yZWN2ZnJvbSwgODE5MikKKyAgICAgICAgX3QyID0gdGltZS50aW1lKCkKKworICAgICAgICBfZGVsdGEgPSBhYnMoX3QxIC0gX3QyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCisgICAgICAgICAgICAgICAgICAgICAidGltZW91dCAoJWcpIGlzICVnIHNlY29uZHMgbW9yZSB0aGFuIGV4cGVjdGVkICglZykiCisgICAgICAgICAgICAgICAgICAgICAlKF9kZWx0YSwgc2VsZi5mdXp6LCBfdGltZW91dCkpCisKKyAgICBkZWYgdGVzdFNlbmQoc2VsZik6CisgICAgICAgICMgVGVzdCBzZW5kKCkgdGltZW91dAorICAgICAgICAjIGNvdWxkbid0IGZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgaXQKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RTZW5kdG8oc2VsZik6CisgICAgICAgICMgVGVzdCBzZW5kdG8oKSB0aW1lb3V0CisgICAgICAgICMgY291bGRuJ3QgZmlndXJlIG91dCBob3cgdG8gdGVzdCBpdAorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdFNlbmRhbGwoc2VsZik6CisgICAgICAgICMgVGVzdCBzZW5kYWxsKCkgdGltZW91dAorICAgICAgICAjIGNvdWxkbid0IGZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgaXQKKyAgICAgICAgcGFzcworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ3JlYXRpb25UZXN0Q2FzZSwgVGltZW91dFRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90ay5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MjVkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90ay5weQpAQCAtMCwwICsxLDI5IEBACitpbXBvcnQgb3MKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgU2tpcCB0ZXN0IGlmIF90a2ludGVyIHdhc24ndCBidWlsdC4KK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGtpbnRlcicpCisKK3RoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitsaWJfdGtfdGVzdCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4odGhpc19kaXIsIG9zLnBhdGgucGFyZGlyLAorICAgICdsaWItdGsnLCAndGVzdCcpKQorCit3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICBpbXBvcnQgcnVudGt0ZXN0cworCisjIFNraXAgdGVzdCBpZiB0ayBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQuCitydW50a3Rlc3RzLmNoZWNrX3RrX2F2YWlsYWJpbGl0eSgpCisKK2RlZiB0ZXN0X21haW4oZW5hYmxlX2d1aT1GYWxzZSk6CisgICAgaWYgZW5hYmxlX2d1aToKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWydndWknXQorICAgICAgICBlbGlmICdndWknIG5vdCBpbiB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlczoKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzLmFwcGVuZCgnZ3VpJykKKworICAgIHdpdGggdGVzdF9zdXBwb3J0LkRpcnNPblN5c1BhdGgobGliX3RrX3Rlc3QpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICAgICAgKnJ1bnRrdGVzdHMuZ2V0X3Rlc3RzKHRleHQ9RmFsc2UsIHBhY2thZ2VzPVsndGVzdF90a2ludGVyJ10pKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbihlbmFibGVfZ3VpPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OWY2OGYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weQpAQCAtMCwwICsxLDYyNSBAQAorZG9jdGVzdHMgPSAiIiIKK1Rlc3RzIGZvciB0aGUgdG9rZW5pemUgbW9kdWxlLgorCisgICAgPj4+IGltcG9ydCBnbG9iLCByYW5kb20sIHN5cworCitUaGUgdGVzdHMgY2FuIGJlIHJlYWxseSBzaW1wbGUuIEdpdmVuIGEgc21hbGwgZnJhZ21lbnQgb2Ygc291cmNlCitjb2RlLCBwcmludCBvdXQgYSB0YWJsZSB3aXRoIHRva2Vucy4gVGhlIEVORE1BUksgaXMgb21pdHRlZCBmb3IKK2JyZXZpdHkuCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoIjEgKyAxIikKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA0KSAoMSwgNSkKKworICAgID4+PiBkdW1wX3Rva2VucygiaWYgRmFsc2U6XFxuIgorICAgIC4uLiAgICAgICAgICAgICAiICAgICMgTkxcXG4iCisgICAgLi4uICAgICAgICAgICAgICIgICAgVHJ1ZSA9IEZhbHNlICMgTkVXTElORVxcbiIpCisgICAgTkFNRSAgICAgICAnaWYnICAgICAgICAgICgxLCAwKSAoMSwgMikKKyAgICBOQU1FICAgICAgICdGYWxzZScgICAgICAgKDEsIDMpICgxLCA4KQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMSwgOSkgKDEsIDEwKQorICAgIENPTU1FTlQgICAgJyMgTkwnICAgICAgICAoMiwgNCkgKDIsIDgpCisgICAgTkwgICAgICAgICAnXFxuJyAgICAgICAgICAoMiwgOCkgKDIsIDkpCisgICAgSU5ERU5UICAgICAnICAgICcgICAgICAgICgzLCAwKSAoMywgNCkKKyAgICBOQU1FICAgICAgICdUcnVlJyAgICAgICAgKDMsIDQpICgzLCA4KQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMywgOSkgKDMsIDEwKQorICAgIE5BTUUgICAgICAgJ0ZhbHNlJyAgICAgICAoMywgMTEpICgzLCAxNikKKyAgICBDT01NRU5UICAgICcjIE5FV0xJTkUnICAgKDMsIDE3KSAoMywgMjYpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMywgMjYpICgzLCAyNykKKyAgICBERURFTlQgICAgICcnICAgICAgICAgICAgKDQsIDApICg0LCAwKQorCisgICAgPj4+IGluZGVudF9lcnJvcl9maWxlID0gXCIiIgorICAgIC4uLiBkZWYgayh4KToKKyAgICAuLi4gICAgIHggKz0gMgorICAgIC4uLiAgIHggKz0gNQorICAgIC4uLiBcIiIiCisKKyAgICA+Pj4gZm9yIHRvayBpbiBnZW5lcmF0ZV90b2tlbnMoU3RyaW5nSU8oaW5kZW50X2Vycm9yX2ZpbGUpLnJlYWRsaW5lKTogcGFzcworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgLi4uCisgICAgSW5kZW50YXRpb25FcnJvcjogdW5pbmRlbnQgZG9lcyBub3QgbWF0Y2ggYW55IG91dGVyIGluZGVudGF0aW9uIGxldmVsCisKK1Rlc3Qgcm91bmR0cmlwIGZvciBgdW50b2tlbml6ZWAuIGBmYCBpcyBhbiBvcGVuIGZpbGUgb3IgYSBzdHJpbmcuIFRoZSBzb3VyY2UKK2NvZGUgaW4gZiBpcyB0b2tlbml6ZWQsIGNvbnZlcnRlZCBiYWNrIHRvIHNvdXJjZSBjb2RlIHZpYSB0b2tlbml6ZS51bnRva2VuaXplKCksCithbmQgdG9rZW5pemVkIGFnYWluIGZyb20gdGhlIGxhdHRlci4gVGhlIHRlc3QgZmFpbHMgaWYgdGhlIHNlY29uZCB0b2tlbml6YXRpb24KK2RvZXNuJ3QgbWF0Y2ggdGhlIGZpcnN0LgorCisgICAgPj4+IGRlZiByb3VuZHRyaXAoZik6CisgICAgLi4uICAgICBpZiBpc2luc3RhbmNlKGYsIHN0cik6IGYgPSBTdHJpbmdJTyhmKQorICAgIC4uLiAgICAgdG9rZW5fbGlzdCA9IGxpc3QoZ2VuZXJhdGVfdG9rZW5zKGYucmVhZGxpbmUpKQorICAgIC4uLiAgICAgZi5jbG9zZSgpCisgICAgLi4uICAgICB0b2tlbnMxID0gW3Rva1s6Ml0gZm9yIHRvayBpbiB0b2tlbl9saXN0XQorICAgIC4uLiAgICAgbmV3X3RleHQgPSB1bnRva2VuaXplKHRva2VuczEpCisgICAgLi4uICAgICByZWFkbGluZSA9IGl0ZXIobmV3X3RleHQuc3BsaXRsaW5lcygxKSkubmV4dAorICAgIC4uLiAgICAgdG9rZW5zMiA9IFt0b2tbOjJdIGZvciB0b2sgaW4gZ2VuZXJhdGVfdG9rZW5zKHJlYWRsaW5lKV0KKyAgICAuLi4gICAgIHJldHVybiB0b2tlbnMxID09IHRva2VuczIKKyAgICAuLi4KKworVGhlcmUgYXJlIHNvbWUgc3RhbmRhcmQgZm9ybWF0dGluZyBwcmFjdGljZXMgdGhhdCBhcmUgZWFzeSB0byBnZXQgcmlnaHQuCisKKyAgICA+Pj4gcm91bmR0cmlwKCJpZiB4ID09IDE6XFxuIgorICAgIC4uLiAgICAgICAgICAgIiAgICBwcmludCB4XFxuIikKKyAgICBUcnVlCisKKyAgICA+Pj4gcm91bmR0cmlwKCIjIFRoaXMgaXMgYSBjb21tZW50XFxuIyBUaGlzIGFsc28iKQorICAgIFRydWUKKworU29tZSBwZW9wbGUgdXNlIGRpZmZlcmVudCBmb3JtYXR0aW5nIGNvbnZlbnRpb25zLCB3aGljaCBtYWtlcwordW50b2tlbml6ZSBhIGxpdHRsZSB0cmlja2llci4gTm90ZSB0aGF0IHRoaXMgdGVzdCBpbnZvbHZlcyB0cmFpbGluZword2hpdGVzcGFjZSBhZnRlciB0aGUgY29sb24uIE5vdGUgdGhhdCB3ZSB1c2UgaGV4IGVzY2FwZXMgdG8gbWFrZSB0aGUKK3R3byB0cmFpbGluZyBibGFua3MgYXBwZXJhbnQgaW4gdGhlIGV4cGVjdGVkIG91dHB1dC4KKworICAgID4+PiByb3VuZHRyaXAoImlmIHggPT0gMSA6IFxcbiIKKyAgICAuLi4gICAgICAgICAgICIgIHByaW50IHhcXG4iKQorICAgIFRydWUKKworICAgID4+PiBmID0gdGVzdF9zdXBwb3J0LmZpbmRmaWxlKCJ0b2tlbml6ZV90ZXN0cyIgKyBvcy5leHRzZXAgKyAidHh0IikKKyAgICA+Pj4gcm91bmR0cmlwKG9wZW4oZikpCisgICAgVHJ1ZQorCisgICAgPj4+IHJvdW5kdHJpcCgiaWYgeCA9PSAxOlxcbiIKKyAgICAuLi4gICAgICAgICAgICIgICAgIyBBIGNvbW1lbnQgYnkgaXRzZWxmLlxcbiIKKyAgICAuLi4gICAgICAgICAgICIgICAgcHJpbnQgeCAjIENvbW1lbnQgaGVyZSwgdG9vLlxcbiIKKyAgICAuLi4gICAgICAgICAgICIgICAgIyBBbm90aGVyIGNvbW1lbnQuXFxuIgorICAgIC4uLiAgICAgICAgICAgImFmdGVyX2lmID0gVHJ1ZVxcbiIpCisgICAgVHJ1ZQorCisgICAgPj4+IHJvdW5kdHJpcCgiaWYgKHggIyBUaGUgY29tbWVudHMgbmVlZCB0byBnbyBpbiB0aGUgcmlnaHQgcGxhY2VcXG4iCisgICAgLi4uICAgICAgICAgICAiICAgID09IDEpOlxcbiIKKyAgICAuLi4gICAgICAgICAgICIgICAgcHJpbnQgJ3g9PTEnXFxuIikKKyAgICBUcnVlCisKKyAgICA+Pj4gcm91bmR0cmlwKCJjbGFzcyBUZXN0OiAjIEEgY29tbWVudCBoZXJlXFxuIgorICAgIC4uLiAgICAgICAgICAgIiAgIyBBIGNvbW1lbnQgd2l0aCB3ZWlyZCBpbmRlbnRcXG4iCisgICAgLi4uICAgICAgICAgICAiICBhZnRlcl9jb20gPSA1XFxuIgorICAgIC4uLiAgICAgICAgICAgIiAgZGVmIHgobSk6IHJldHVybiBtKjUgIyBhIG9uZSBsaW5lclxcbiIKKyAgICAuLi4gICAgICAgICAgICIgIGRlZiB5KG0pOiAjIEEgd2hpdGVzcGFjZSBhZnRlciB0aGUgY29sb25cXG4iCisgICAgLi4uICAgICAgICAgICAiICAgICByZXR1cm4geSo0ICMgMy1zcGFjZSBpbmRlbnRcXG4iKQorICAgIFRydWUKKworU29tZSBlcnJvci1oYW5kbGluZyBjb2RlCisKKyAgICA+Pj4gcm91bmR0cmlwKCJ0cnk6IGltcG9ydCBzb21lbW9kdWxlXFxuIgorICAgIC4uLiAgICAgICAgICAgImV4Y2VwdCBJbXBvcnRFcnJvcjogIyBjb21tZW50XFxuIgorICAgIC4uLiAgICAgICAgICAgIiAgICBwcmludCAnQ2FuIG5vdCBpbXBvcnQnICMgY29tbWVudDJcXG4iCisgICAgLi4uICAgICAgICAgICAiZWxzZTogICBwcmludCAnTG9hZGVkJ1xcbiIpCisgICAgVHJ1ZQorCitCYWxhbmNpbmcgY29udGludWF0aW9uCisKKyAgICA+Pj4gcm91bmR0cmlwKCJhID0gKDMsNCwgXFxuIgorICAgIC4uLiAgICAgICAgICAgIjUsNilcXG4iCisgICAgLi4uICAgICAgICAgICAieSA9IFszLCA0LFxcbiIKKyAgICAuLi4gICAgICAgICAgICI1XVxcbiIKKyAgICAuLi4gICAgICAgICAgICJ6ID0geydhJzogNSxcXG4iCisgICAgLi4uICAgICAgICAgICAiJ2InOjE1LCAnYyc6VHJ1ZX1cXG4iCisgICAgLi4uICAgICAgICAgICAieCA9IGxlbih5KSArIDUgLSBhW1xcbiIKKyAgICAuLi4gICAgICAgICAgICIzXSAtIGFbMl1cXG4iCisgICAgLi4uICAgICAgICAgICAiKyBsZW4oeikgLSB6W1xcbiIKKyAgICAuLi4gICAgICAgICAgICInYiddXFxuIikKKyAgICBUcnVlCisKK09yZGluYXJ5IGludGVnZXJzIGFuZCBiaW5hcnkgb3BlcmF0b3JzCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoIjB4ZmYgPD0gMjU1IikKKyAgICBOVU1CRVIgICAgICcweGZmJyAgICAgICAgKDEsIDApICgxLCA0KQorICAgIE9QICAgICAgICAgJzw9JyAgICAgICAgICAoMSwgNSkgKDEsIDcpCisgICAgTlVNQkVSICAgICAnMjU1JyAgICAgICAgICgxLCA4KSAoMSwgMTEpCisgICAgPj4+IGR1bXBfdG9rZW5zKCIwYjEwIDw9IDI1NSIpCisgICAgTlVNQkVSICAgICAnMGIxMCcgICAgICAgICgxLCAwKSAoMSwgNCkKKyAgICBPUCAgICAgICAgICc8PScgICAgICAgICAgKDEsIDUpICgxLCA3KQorICAgIE5VTUJFUiAgICAgJzI1NScgICAgICAgICAoMSwgOCkgKDEsIDExKQorICAgID4+PiBkdW1wX3Rva2VucygiMG8xMjMgPD0gMDEyMyIpCisgICAgTlVNQkVSICAgICAnMG8xMjMnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBPUCAgICAgICAgICc8PScgICAgICAgICAgKDEsIDYpICgxLCA4KQorICAgIE5VTUJFUiAgICAgJzAxMjMnICAgICAgICAoMSwgOSkgKDEsIDEzKQorICAgID4+PiBkdW1wX3Rva2VucygiMDEyMzQ1NjcgPiB+MHgxNSIpCisgICAgTlVNQkVSICAgICAnMDEyMzQ1NjcnICAgICgxLCAwKSAoMSwgOCkKKyAgICBPUCAgICAgICAgICc+JyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKKyAgICBPUCAgICAgICAgICd+JyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgTlVNQkVSICAgICAnMHgxNScgICAgICAgICgxLCAxMikgKDEsIDE2KQorICAgID4+PiBkdW1wX3Rva2VucygiMjEzNDU2OCAhPSAwMTIzMTUxNSIpCisgICAgTlVNQkVSICAgICAnMjEzNDU2OCcgICAgICgxLCAwKSAoMSwgNykKKyAgICBPUCAgICAgICAgICchPScgICAgICAgICAgKDEsIDgpICgxLCAxMCkKKyAgICBOVU1CRVIgICAgICcwMTIzMTUxNScgICAgKDEsIDExKSAoMSwgMTkpCisgICAgPj4+IGR1bXBfdG9rZW5zKCIoLTEyNDU2MS0xKSAmIDAyMDAwMDAwMDAiKQorICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCAxKSAoMSwgMikKKyAgICBOVU1CRVIgICAgICcxMjQ1NjEnICAgICAgKDEsIDIpICgxLCA4KQorICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA5KSAoMSwgMTApCisgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgxLCAxMCkgKDEsIDExKQorICAgIE9QICAgICAgICAgJyYnICAgICAgICAgICAoMSwgMTIpICgxLCAxMykKKyAgICBOVU1CRVIgICAgICcwMjAwMDAwMDAwJyAgKDEsIDE0KSAoMSwgMjQpCisgICAgPj4+IGR1bXBfdG9rZW5zKCIweGRlYWRiZWVmICE9IC0xIikKKyAgICBOVU1CRVIgICAgICcweGRlYWRiZWVmJyAgKDEsIDApICgxLCAxMCkKKyAgICBPUCAgICAgICAgICchPScgICAgICAgICAgKDEsIDExKSAoMSwgMTMpCisgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCAxNCkgKDEsIDE1KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMTUpICgxLCAxNikKKyAgICA+Pj4gZHVtcF90b2tlbnMoIjB4ZGVhZGMwZGUgJiAwMTIzNDUiKQorICAgIE5VTUJFUiAgICAgJzB4ZGVhZGMwZGUnICAoMSwgMCkgKDEsIDEwKQorICAgIE9QICAgICAgICAgJyYnICAgICAgICAgICAoMSwgMTEpICgxLCAxMikKKyAgICBOVU1CRVIgICAgICcwMTIzNDUnICAgICAgKDEsIDEzKSAoMSwgMTkpCisgICAgPj4+IGR1bXBfdG9rZW5zKCIweEZGICYgMHgxNSB8IDEyMzQiKQorICAgIE5VTUJFUiAgICAgJzB4RkYnICAgICAgICAoMSwgMCkgKDEsIDQpCisgICAgT1AgICAgICAgICAnJicgICAgICAgICAgICgxLCA1KSAoMSwgNikKKyAgICBOVU1CRVIgICAgICcweDE1JyAgICAgICAgKDEsIDcpICgxLCAxMSkKKyAgICBPUCAgICAgICAgICd8JyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgTlVNQkVSICAgICAnMTIzNCcgICAgICAgICgxLCAxNCkgKDEsIDE4KQorCitMb25nIGludGVnZXJzCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAwTCIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzBMJyAgICAgICAgICAoMSwgNCkgKDEsIDYpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMHhmZmZmZmZmZmZmZiIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzB4ZmZmZmZmZmZmZiAoMSwgNCkgKDEsIDE3KQorICAgID4+PiBkdW1wX3Rva2VucygieCA9IDEyMzE0MTI0MjE1MTI1MTYxNjExMGwiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBOVU1CRVIgICAgICcxMjMxNDEyNDIxNTEgKDEsIDQpICgxLCAyNikKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAtMTU5MjE1OTAyMTUwMTI1OTFMIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCA0KSAoMSwgNSkKKyAgICBOVU1CRVIgICAgICcxNTkyMTU5MDIxNTAgKDEsIDUpICgxLCAyMykKKworRmxvYXRpbmcgcG9pbnQgbnVtYmVycworCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMy4xNDE1OSIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzMuMTQxNTknICAgICAoMSwgNCkgKDEsIDExKQorICAgID4+PiBkdW1wX3Rva2VucygieCA9IDMxNDE1OS4iKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBOVU1CRVIgICAgICczMTQxNTkuJyAgICAgKDEsIDQpICgxLCAxMSkKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAuMzE0MTU5IikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgTlVNQkVSICAgICAnLjMxNDE1OScgICAgICgxLCA0KSAoMSwgMTEpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gM2UxNDE1OSIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzNlMTQxNTknICAgICAoMSwgNCkgKDEsIDExKQorICAgID4+PiBkdW1wX3Rva2VucygieCA9IDNFMTIzIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgTlVNQkVSICAgICAnM0UxMjMnICAgICAgICgxLCA0KSAoMSwgOSkKKyAgICA+Pj4gZHVtcF90b2tlbnMoIngreSA9IDNlLTEyMzAiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAxKSAoMSwgMikKKyAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisgICAgTlVNQkVSICAgICAnM2UtMTIzMCcgICAgICgxLCA2KSAoMSwgMTMpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMy4xNGUxNTkiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBOVU1CRVIgICAgICczLjE0ZTE1OScgICAgKDEsIDQpICgxLCAxMikKKworU3RyaW5nIGxpdGVyYWxzCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAnJzsgeSA9IFxcXCJcXFwiIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgU1RSSU5HICAgICAiJyciICAgICAgICAgICgxLCA0KSAoMSwgNikKKyAgICBPUCAgICAgICAgICc7JyAgICAgICAgICAgKDEsIDYpICgxLCA3KQorICAgIE5BTUUgICAgICAgJ3knICAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAxMCkgKDEsIDExKQorICAgIFNUUklORyAgICAgJyIiJyAgICAgICAgICAoMSwgMTIpICgxLCAxNCkKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAnXFxcIic7IHkgPSBcXFwiJ1xcXCIiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBTVFJJTkcgICAgICdcXCciXFwnJyAgICAgICAoMSwgNCkgKDEsIDcpCisgICAgT1AgICAgICAgICAnOycgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgU1RSSU5HICAgICAnIlxcJyInICAgICAgICAoMSwgMTMpICgxLCAxNikKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSBcXFwiZG9lc24ndCBcXFwic2hyaW5rXFxcIiwgZG9lcyBpdFxcXCIiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBTVFJJTkcgICAgICciZG9lc25cXCd0ICInICgxLCA0KSAoMSwgMTQpCisgICAgTkFNRSAgICAgICAnc2hyaW5rJyAgICAgICgxLCAxNCkgKDEsIDIwKQorICAgIFNUUklORyAgICAgJyIsIGRvZXMgaXQiJyAoMSwgMjApICgxLCAzMSkKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSB1J2FiYycgKyBVJ0FCQyciKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBTVFJJTkcgICAgICJ1J2FiYyciICAgICAgKDEsIDQpICgxLCAxMCkKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgU1RSSU5HICAgICAiVSdBQkMnIiAgICAgICgxLCAxMykgKDEsIDE5KQorICAgID4+PiBkdW1wX3Rva2VucygneSA9IHUiQUJDIiArIFUiQUJDIicpCisgICAgTkFNRSAgICAgICAneScgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIFNUUklORyAgICAgJ3UiQUJDIicgICAgICAoMSwgNCkgKDEsIDEwKQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMTEpICgxLCAxMikKKyAgICBTVFJJTkcgICAgICdVIkFCQyInICAgICAgKDEsIDEzKSAoMSwgMTkpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gdXInYWJjJyArIFVyJ0FCQycgKyB1UidBQkMnICsgVVInQUJDJyIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIFNUUklORyAgICAgInVyJ2FiYyciICAgICAoMSwgNCkgKDEsIDExKQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMTIpICgxLCAxMykKKyAgICBTVFJJTkcgICAgICJVcidBQkMnIiAgICAgKDEsIDE0KSAoMSwgMjEpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyMikgKDEsIDIzKQorICAgIFNUUklORyAgICAgInVSJ0FCQyciICAgICAoMSwgMjQpICgxLCAzMSkKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDMyKSAoMSwgMzMpCisgICAgU1RSSU5HICAgICAiVVInQUJDJyIgICAgICgxLCAzNCkgKDEsIDQxKQorICAgID4+PiBkdW1wX3Rva2VucygneSA9IHVyImFiYyIgKyBVciJBQkMiICsgdVIiQUJDIiArIFVSIkFCQyInKQorICAgIE5BTUUgICAgICAgJ3knICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBTVFJJTkcgICAgICd1ciJhYmMiJyAgICAgKDEsIDQpICgxLCAxMSkKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgU1RSSU5HICAgICAnVXIiQUJDIicgICAgICgxLCAxNCkgKDEsIDIxKQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMjIpICgxLCAyMykKKyAgICBTVFJJTkcgICAgICd1UiJBQkMiJyAgICAgKDEsIDI0KSAoMSwgMzEpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAzMikgKDEsIDMzKQorICAgIFNUUklORyAgICAgJ1VSIkFCQyInICAgICAoMSwgMzQpICgxLCA0MSkKKworICAgID4+PiBkdW1wX3Rva2VucygiYidhYmMnICsgQidhYmMnIikKKyAgICBTVFJJTkcgICAgICJiJ2FiYyciICAgICAgKDEsIDApICgxLCA2KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgNykgKDEsIDgpCisgICAgU1RSSU5HICAgICAiQidhYmMnIiAgICAgICgxLCA5KSAoMSwgMTUpCisgICAgPj4+IGR1bXBfdG9rZW5zKCdiImFiYyIgKyBCImFiYyInKQorICAgIFNUUklORyAgICAgJ2IiYWJjIicgICAgICAoMSwgMCkgKDEsIDYpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBTVFJJTkcgICAgICdCImFiYyInICAgICAgKDEsIDkpICgxLCAxNSkKKyAgICA+Pj4gZHVtcF90b2tlbnMoImJyJ2FiYycgKyBiUidhYmMnICsgQnInYWJjJyArIEJSJ2FiYyciKQorICAgIFNUUklORyAgICAgImJyJ2FiYyciICAgICAoMSwgMCkgKDEsIDcpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKKyAgICBTVFJJTkcgICAgICJiUidhYmMnIiAgICAgKDEsIDEwKSAoMSwgMTcpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAxOCkgKDEsIDE5KQorICAgIFNUUklORyAgICAgIkJyJ2FiYyciICAgICAoMSwgMjApICgxLCAyNykKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDI4KSAoMSwgMjkpCisgICAgU1RSSU5HICAgICAiQlInYWJjJyIgICAgICgxLCAzMCkgKDEsIDM3KQorICAgID4+PiBkdW1wX3Rva2VucygnYnIiYWJjIiArIGJSImFiYyIgKyBCciJhYmMiICsgQlIiYWJjIicpCisgICAgU1RSSU5HICAgICAnYnIiYWJjIicgICAgICgxLCAwKSAoMSwgNykKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorICAgIFNUUklORyAgICAgJ2JSImFiYyInICAgICAoMSwgMTApICgxLCAxNykKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDE4KSAoMSwgMTkpCisgICAgU1RSSU5HICAgICAnQnIiYWJjIicgICAgICgxLCAyMCkgKDEsIDI3KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMjgpICgxLCAyOSkKKyAgICBTVFJJTkcgICAgICdCUiJhYmMiJyAgICAgKDEsIDMwKSAoMSwgMzcpCisKK09wZXJhdG9ycworCisgICAgPj4+IGR1bXBfdG9rZW5zKCJkZWYgZDIyKGEsIGIsIGM9MiwgZD0yLCAqayk6IHBhc3MiKQorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCisgICAgTkFNRSAgICAgICAnZDIyJyAgICAgICAgICgxLCA0KSAoMSwgNykKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQorICAgIE5BTUUgICAgICAgJ2EnICAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgT1AgICAgICAgICAnLCcgICAgICAgICAgICgxLCA5KSAoMSwgMTApCisgICAgTkFNRSAgICAgICAnYicgICAgICAgICAgICgxLCAxMSkgKDEsIDEyKQorICAgIE9QICAgICAgICAgJywnICAgICAgICAgICAoMSwgMTIpICgxLCAxMykKKyAgICBOQU1FICAgICAgICdjJyAgICAgICAgICAgKDEsIDE0KSAoMSwgMTUpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAxNSkgKDEsIDE2KQorICAgIE5VTUJFUiAgICAgJzInICAgICAgICAgICAoMSwgMTYpICgxLCAxNykKKyAgICBPUCAgICAgICAgICcsJyAgICAgICAgICAgKDEsIDE3KSAoMSwgMTgpCisgICAgTkFNRSAgICAgICAnZCcgICAgICAgICAgICgxLCAxOSkgKDEsIDIwKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMjApICgxLCAyMSkKKyAgICBOVU1CRVIgICAgICcyJyAgICAgICAgICAgKDEsIDIxKSAoMSwgMjIpCisgICAgT1AgICAgICAgICAnLCcgICAgICAgICAgICgxLCAyMikgKDEsIDIzKQorICAgIE9QICAgICAgICAgJyonICAgICAgICAgICAoMSwgMjQpICgxLCAyNSkKKyAgICBOQU1FICAgICAgICdrJyAgICAgICAgICAgKDEsIDI1KSAoMSwgMjYpCisgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgxLCAyNikgKDEsIDI3KQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgMjcpICgxLCAyOCkKKyAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDEsIDI5KSAoMSwgMzMpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJkZWYgZDAxdl8oYT0xLCAqaywgKip3KTogcGFzcyIpCisgICAgTkFNRSAgICAgICAnZGVmJyAgICAgICAgICgxLCAwKSAoMSwgMykKKyAgICBOQU1FICAgICAgICdkMDF2XycgICAgICAgKDEsIDQpICgxLCA5KQorICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMSwgOSkgKDEsIDEwKQorICAgIE5BTUUgICAgICAgJ2EnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxMikgKDEsIDEzKQorICAgIE9QICAgICAgICAgJywnICAgICAgICAgICAoMSwgMTMpICgxLCAxNCkKKyAgICBPUCAgICAgICAgICcqJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCisgICAgTkFNRSAgICAgICAnaycgICAgICAgICAgICgxLCAxNikgKDEsIDE3KQorICAgIE9QICAgICAgICAgJywnICAgICAgICAgICAoMSwgMTcpICgxLCAxOCkKKyAgICBPUCAgICAgICAgICcqKicgICAgICAgICAgKDEsIDE5KSAoMSwgMjEpCisgICAgTkFNRSAgICAgICAndycgICAgICAgICAgICgxLCAyMSkgKDEsIDIyKQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgMjIpICgxLCAyMykKKyAgICBPUCAgICAgICAgICc6JyAgICAgICAgICAgKDEsIDIzKSAoMSwgMjQpCisgICAgTkFNRSAgICAgICAncGFzcycgICAgICAgICgxLCAyNSkgKDEsIDI5KQorCitDb21wYXJpc29uCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoImlmIDEgPCAxID4gMSA9PSAxID49IDUgPD0gMHgxNSA8PSAweDEyICE9ICIgKworICAgIC4uLiAgICAgICAgICAgICAiMSBhbmQgNSBpbiAxIG5vdCBpbiAxIGlzIDEgb3IgNSBpcyBub3QgMTogcGFzcyIpCisgICAgTkFNRSAgICAgICAnaWYnICAgICAgICAgICgxLCAwKSAoMSwgMikKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDMpICgxLCA0KQorICAgIE9QICAgICAgICAgJzwnICAgICAgICAgICAoMSwgNSkgKDEsIDYpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBPUCAgICAgICAgICc+JyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgT1AgICAgICAgICAnPT0nICAgICAgICAgICgxLCAxMykgKDEsIDE1KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMTYpICgxLCAxNykKKyAgICBPUCAgICAgICAgICc+PScgICAgICAgICAgKDEsIDE4KSAoMSwgMjApCisgICAgTlVNQkVSICAgICAnNScgICAgICAgICAgICgxLCAyMSkgKDEsIDIyKQorICAgIE9QICAgICAgICAgJzw9JyAgICAgICAgICAoMSwgMjMpICgxLCAyNSkKKyAgICBOVU1CRVIgICAgICcweDE1JyAgICAgICAgKDEsIDI2KSAoMSwgMzApCisgICAgT1AgICAgICAgICAnPD0nICAgICAgICAgICgxLCAzMSkgKDEsIDMzKQorICAgIE5VTUJFUiAgICAgJzB4MTInICAgICAgICAoMSwgMzQpICgxLCAzOCkKKyAgICBPUCAgICAgICAgICchPScgICAgICAgICAgKDEsIDM5KSAoMSwgNDEpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA0MikgKDEsIDQzKQorICAgIE5BTUUgICAgICAgJ2FuZCcgICAgICAgICAoMSwgNDQpICgxLCA0NykKKyAgICBOVU1CRVIgICAgICc1JyAgICAgICAgICAgKDEsIDQ4KSAoMSwgNDkpCisgICAgTkFNRSAgICAgICAnaW4nICAgICAgICAgICgxLCA1MCkgKDEsIDUyKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNTMpICgxLCA1NCkKKyAgICBOQU1FICAgICAgICdub3QnICAgICAgICAgKDEsIDU1KSAoMSwgNTgpCisgICAgTkFNRSAgICAgICAnaW4nICAgICAgICAgICgxLCA1OSkgKDEsIDYxKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNjIpICgxLCA2MykKKyAgICBOQU1FICAgICAgICdpcycgICAgICAgICAgKDEsIDY0KSAoMSwgNjYpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA2NykgKDEsIDY4KQorICAgIE5BTUUgICAgICAgJ29yJyAgICAgICAgICAoMSwgNjkpICgxLCA3MSkKKyAgICBOVU1CRVIgICAgICc1JyAgICAgICAgICAgKDEsIDcyKSAoMSwgNzMpCisgICAgTkFNRSAgICAgICAnaXMnICAgICAgICAgICgxLCA3NCkgKDEsIDc2KQorICAgIE5BTUUgICAgICAgJ25vdCcgICAgICAgICAoMSwgNzcpICgxLCA4MCkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDgxKSAoMSwgODIpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCA4MikgKDEsIDgzKQorICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMSwgODQpICgxLCA4OCkKKworU2hpZnQKKworICAgID4+PiBkdW1wX3Rva2VucygieCA9IDEgPDwgMSA+PiA1IikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA0KSAoMSwgNSkKKyAgICBPUCAgICAgICAgICc8PCcgICAgICAgICAgKDEsIDYpICgxLCA4KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgOSkgKDEsIDEwKQorICAgIE9QICAgICAgICAgJz4+JyAgICAgICAgICAoMSwgMTEpICgxLCAxMykKKyAgICBOVU1CRVIgICAgICc1JyAgICAgICAgICAgKDEsIDE0KSAoMSwgMTUpCisKK0FkZGl0aXZlCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAxIC0geSArIDE1IC0gMDEgKyAweDEyNCArIHogKyBhWzVdIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA0KSAoMSwgNSkKKyAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDYpICgxLCA3KQorICAgIE5BTUUgICAgICAgJ3knICAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAxMCkgKDEsIDExKQorICAgIE5VTUJFUiAgICAgJzE1JyAgICAgICAgICAoMSwgMTIpICgxLCAxNCkKKyAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCisgICAgTlVNQkVSICAgICAnMDEnICAgICAgICAgICgxLCAxNykgKDEsIDE5KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMjApICgxLCAyMSkKKyAgICBOVU1CRVIgICAgICcweDEyNCcgICAgICAgKDEsIDIyKSAoMSwgMjcpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOCkgKDEsIDI5KQorICAgIE5BTUUgICAgICAgJ3onICAgICAgICAgICAoMSwgMzApICgxLCAzMSkKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDMyKSAoMSwgMzMpCisgICAgTkFNRSAgICAgICAnYScgICAgICAgICAgICgxLCAzNCkgKDEsIDM1KQorICAgIE9QICAgICAgICAgJ1snICAgICAgICAgICAoMSwgMzUpICgxLCAzNikKKyAgICBOVU1CRVIgICAgICc1JyAgICAgICAgICAgKDEsIDM2KSAoMSwgMzcpCisgICAgT1AgICAgICAgICAnXScgICAgICAgICAgICgxLCAzNykgKDEsIDM4KQorCitNdWx0aXBsaWNhdGl2ZQorCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMS8vMSoxLzUqMTIlMHgxMiIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisgICAgT1AgICAgICAgICAnLy8nICAgICAgICAgICgxLCA1KSAoMSwgNykKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQorICAgIE9QICAgICAgICAgJyonICAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA5KSAoMSwgMTApCisgICAgT1AgICAgICAgICAnLycgICAgICAgICAgICgxLCAxMCkgKDEsIDExKQorICAgIE5VTUJFUiAgICAgJzUnICAgICAgICAgICAoMSwgMTEpICgxLCAxMikKKyAgICBPUCAgICAgICAgICcqJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgTlVNQkVSICAgICAnMTInICAgICAgICAgICgxLCAxMykgKDEsIDE1KQorICAgIE9QICAgICAgICAgJyUnICAgICAgICAgICAoMSwgMTUpICgxLCAxNikKKyAgICBOVU1CRVIgICAgICcweDEyJyAgICAgICAgKDEsIDE2KSAoMSwgMjApCisKK1VuYXJ5CisKKyAgICA+Pj4gZHVtcF90b2tlbnMoIn4xIF4gMSAmIDEgfDEgXiAtMSIpCisgICAgT1AgICAgICAgICAnficgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDEpICgxLCAyKQorICAgIE9QICAgICAgICAgJ14nICAgICAgICAgICAoMSwgMykgKDEsIDQpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA1KSAoMSwgNikKKyAgICBPUCAgICAgICAgICcmJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgOSkgKDEsIDEwKQorICAgIE9QICAgICAgICAgJ3wnICAgICAgICAgICAoMSwgMTEpICgxLCAxMikKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgT1AgICAgICAgICAnXicgICAgICAgICAgICgxLCAxNCkgKDEsIDE1KQorICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgMTYpICgxLCAxNykKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDE3KSAoMSwgMTgpCisgICAgPj4+IGR1bXBfdG9rZW5zKCItMSoxLzErMSoxLy8xIC0gLS0tMSoqMSIpCisgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDEpICgxLCAyKQorICAgIE9QICAgICAgICAgJyonICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAzKSAoMSwgNCkKKyAgICBPUCAgICAgICAgICcvJyAgICAgICAgICAgKDEsIDQpICgxLCA1KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNSkgKDEsIDYpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA2KSAoMSwgNykKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQorICAgIE9QICAgICAgICAgJyonICAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA5KSAoMSwgMTApCisgICAgT1AgICAgICAgICAnLy8nICAgICAgICAgICgxLCAxMCkgKDEsIDEyKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMTIpICgxLCAxMykKKyAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDE0KSAoMSwgMTUpCisgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCAxNikgKDEsIDE3KQorICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgMTcpICgxLCAxOCkKKyAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDE4KSAoMSwgMTkpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxOSkgKDEsIDIwKQorICAgIE9QICAgICAgICAgJyoqJyAgICAgICAgICAoMSwgMjApICgxLCAyMikKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDIyKSAoMSwgMjMpCisKK1NlbGVjdG9yCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoImltcG9ydCBzeXMsIHRpbWVcXG54ID0gc3lzLm1vZHVsZXNbJ3RpbWUnXS50aW1lKCkiKQorICAgIE5BTUUgICAgICAgJ2ltcG9ydCcgICAgICAoMSwgMCkgKDEsIDYpCisgICAgTkFNRSAgICAgICAnc3lzJyAgICAgICAgICgxLCA3KSAoMSwgMTApCisgICAgT1AgICAgICAgICAnLCcgICAgICAgICAgICgxLCAxMCkgKDEsIDExKQorICAgIE5BTUUgICAgICAgJ3RpbWUnICAgICAgICAoMSwgMTIpICgxLCAxNikKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgxLCAxNikgKDEsIDE3KQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMiwgMCkgKDIsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgyLCAyKSAoMiwgMykKKyAgICBOQU1FICAgICAgICdzeXMnICAgICAgICAgKDIsIDQpICgyLCA3KQorICAgIE9QICAgICAgICAgJy4nICAgICAgICAgICAoMiwgNykgKDIsIDgpCisgICAgTkFNRSAgICAgICAnbW9kdWxlcycgICAgICgyLCA4KSAoMiwgMTUpCisgICAgT1AgICAgICAgICAnWycgICAgICAgICAgICgyLCAxNSkgKDIsIDE2KQorICAgIFNUUklORyAgICAgIid0aW1lJyIgICAgICAoMiwgMTYpICgyLCAyMikKKyAgICBPUCAgICAgICAgICddJyAgICAgICAgICAgKDIsIDIyKSAoMiwgMjMpCisgICAgT1AgICAgICAgICAnLicgICAgICAgICAgICgyLCAyMykgKDIsIDI0KQorICAgIE5BTUUgICAgICAgJ3RpbWUnICAgICAgICAoMiwgMjQpICgyLCAyOCkKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDIsIDI4KSAoMiwgMjkpCisgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgyLCAyOSkgKDIsIDMwKQorCitNZXRob2RzCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoIkBzdGF0aWNtZXRob2RcXG5kZWYgZm9vKHgseSk6IHBhc3MiKQorICAgIE9QICAgICAgICAgJ0AnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgTkFNRSAgICAgICAnc3RhdGljbWV0aG9kICgxLCAxKSAoMSwgMTMpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMSwgMTMpICgxLCAxNCkKKyAgICBOQU1FICAgICAgICdkZWYnICAgICAgICAgKDIsIDApICgyLCAzKQorICAgIE5BTUUgICAgICAgJ2ZvbycgICAgICAgICAoMiwgNCkgKDIsIDcpCisgICAgT1AgICAgICAgICAnKCcgICAgICAgICAgICgyLCA3KSAoMiwgOCkKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDIsIDgpICgyLCA5KQorICAgIE9QICAgICAgICAgJywnICAgICAgICAgICAoMiwgOSkgKDIsIDEwKQorICAgIE5BTUUgICAgICAgJ3knICAgICAgICAgICAoMiwgMTApICgyLCAxMSkKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDIsIDExKSAoMiwgMTIpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgyLCAxMikgKDIsIDEzKQorICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMiwgMTQpICgyLCAxOCkKKworQmFja3NsYXNoIG1lYW5zIGxpbmUgY29udGludWF0aW9uLCBleGNlcHQgZm9yIGNvbW1lbnRzCisKKyAgICA+Pj4gcm91bmR0cmlwKCJ4PTErXFxcXG4iCisgICAgLi4uICAgICAgICAgICAiMVxcbiIKKyAgICAuLi4gICAgICAgICAgICIjIFRoaXMgaXMgYSBjb21tZW50XFxcXG4iCisgICAgLi4uICAgICAgICAgICAiIyBUaGlzIGFsc29cXG4iKQorICAgIFRydWUKKyAgICA+Pj4gcm91bmR0cmlwKCIjIENvbW1lbnQgXFxcXG54ID0gMCIpCisgICAgVHJ1ZQorCitUd28gc3RyaW5nIGxpdGVyYWxzIG9uIHRoZSBzYW1lIGxpbmUKKworICAgID4+PiByb3VuZHRyaXAoIicnICcnIikKKyAgICBUcnVlCisKK1Rlc3Qgcm91bmR0cmlwIG9uIHJhbmRvbSBweXRob24gbW9kdWxlcy4KK3Bhc3MgdGhlICctdWNwdScgb3B0aW9uIHRvIHByb2Nlc3MgdGhlIGZ1bGwgZGlyZWN0b3J5LgorCisgICAgPj4+CisgICAgPj4+IHRlbXBkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZikgb3Igb3MuY3VyZGlyCisgICAgPj4+IHRlc3RmaWxlcyA9IGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4odGVtcGRpciwgInRlc3QqLnB5IikpCisKKyAgICA+Pj4gaWYgbm90IHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJjcHUiKToKKyAgICAuLi4gICAgIHRlc3RmaWxlcyA9IHJhbmRvbS5zYW1wbGUodGVzdGZpbGVzLCAxMCkKKyAgICAuLi4KKyAgICA+Pj4gZm9yIHRlc3RmaWxlIGluIHRlc3RmaWxlczoKKyAgICAuLi4gICAgIGlmIG5vdCByb3VuZHRyaXAob3Blbih0ZXN0ZmlsZSkpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJSb3VuZHRyaXAgZmFpbGVkIGZvciBmaWxlICVzIiAlIHRlc3RmaWxlCisgICAgLi4uICAgICAgICAgYnJlYWsKKyAgICAuLi4gZWxzZTogVHJ1ZQorICAgIFRydWUKKworRXZpbCB0YWJzCisgICAgPj4+IGR1bXBfdG9rZW5zKCJkZWYgZigpOlxcblxcdGlmIHhcXG4gICAgICAgIFxcdHBhc3MiKQorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCisgICAgTkFNRSAgICAgICAnZicgICAgICAgICAgICgxLCA0KSAoMSwgNSkKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDUpICgxLCA2KQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgNikgKDEsIDcpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgxLCA4KSAoMSwgOSkKKyAgICBJTkRFTlQgICAgICdcXHQnICAgICAgICAgICgyLCAwKSAoMiwgMSkKKyAgICBOQU1FICAgICAgICdpZicgICAgICAgICAgKDIsIDEpICgyLCAzKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMiwgNCkgKDIsIDUpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMiwgNSkgKDIsIDYpCisgICAgSU5ERU5UICAgICAnICAgICAgICBcXHQnICAoMywgMCkgKDMsIDkpCisgICAgTkFNRSAgICAgICAncGFzcycgICAgICAgICgzLCA5KSAoMywgMTMpCisgICAgREVERU5UICAgICAnJyAgICAgICAgICAgICg0LCAwKSAoNCwgMCkKKyAgICBERURFTlQgICAgICcnICAgICAgICAgICAgKDQsIDApICg0LCAwKQorCitQYXRob2xvZ2ljYWwgd2hpdGVzcGFjZSAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE2MTUyKQorICAgID4+PiBkdW1wX3Rva2VucygiQCAgICAgICAgICAiKQorICAgIE9QICAgICAgICAgJ0AnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisiIiIKKworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0b2tlbml6ZSBpbXBvcnQgKHVudG9rZW5pemUsIGdlbmVyYXRlX3Rva2VucywgTlVNQkVSLCBOQU1FLCBPUCwKKyAgICAgICAgICAgICAgICAgICAgIFNUUklORywgRU5ETUFSS0VSLCB0b2tfbmFtZSkKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgb3MKKworZGVmIGR1bXBfdG9rZW5zKHMpOgorICAgICIiIlByaW50IG91dCB0aGUgdG9rZW5zIGluIHMgaW4gYSB0YWJsZSBmb3JtYXQuCisKKyAgICBUaGUgRU5ETUFSS0VSIGlzIG9taXR0ZWQuCisgICAgIiIiCisgICAgZiA9IFN0cmluZ0lPKHMpCisgICAgZm9yIHR5cGUsIHRva2VuLCBzdGFydCwgZW5kLCBsaW5lIGluIGdlbmVyYXRlX3Rva2VucyhmLnJlYWRsaW5lKToKKyAgICAgICAgaWYgdHlwZSA9PSBFTkRNQVJLRVI6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0eXBlID0gdG9rX25hbWVbdHlwZV0KKyAgICAgICAgcHJpbnQoIiUodHlwZSktMTAuMTBzICUodG9rZW4pLTEzLjEzciAlKHN0YXJ0KXMgJShlbmQpcyIgJSBsb2NhbHMoKSkKKworIyBUaGlzIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgZG9jcywgc2V0IHVwIGFzIGEgZG9jdGVzdC4KK2RlZiBkZWNpc3RtdChzKToKKyAgICAiIiJTdWJzdGl0dXRlIERlY2ltYWxzIGZvciBmbG9hdHMgaW4gYSBzdHJpbmcgb2Ygc3RhdGVtZW50cy4KKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKKyAgICA+Pj4gcyA9ICdwcmludCArMjEuM2UtNSotLjEyMzQvODEuNycKKyAgICA+Pj4gZGVjaXN0bXQocykKKyAgICAicHJpbnQgK0RlY2ltYWwgKCcyMS4zZS01JykqLURlY2ltYWwgKCcuMTIzNCcpL0RlY2ltYWwgKCc4MS43JykiCisKKyAgICBUaGUgZm9ybWF0IG9mIHRoZSBleHBvbmVudCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgcGxhdGZvcm0gQyBsaWJyYXJ5LgorICAgIEtub3duIGNhc2VzIGFyZSAiZS0wMDciIChXaW5kb3dzKSBhbmQgImUtMDciIChub3QgV2luZG93cykuICBTaW5jZQorICAgIHdlJ3JlIG9ubHkgc2hvd2luZyAxMiBkaWdpdHMsIGFuZCB0aGUgMTN0aCBpc24ndCBjbG9zZSB0byA1LCB0aGUKKyAgICByZXN0IG9mIHRoZSBvdXRwdXQgc2hvdWxkIGJlIHBsYXRmb3JtLWluZGVwZW5kZW50LgorCisgICAgPj4+IGV4ZWMocykgI2RvY3Rlc3Q6ICtFTExJUFNJUworICAgIC0zLjIxNzE2MDM0MjcyZS0wLi4uNworCisgICAgT3V0cHV0IGZyb20gY2FsY3VsYXRpb25zIHdpdGggRGVjaW1hbCBzaG91bGQgYmUgaWRlbnRpY2FsIGFjcm9zcyBhbGwKKyAgICBwbGF0Zm9ybXMuCisKKyAgICA+Pj4gZXhlYyhkZWNpc3RtdChzKSkKKyAgICAtMy4yMTcxNjAzNDI3MTcyNTgyNjE5MzM5MDQ1MjlFLTcKKyAgICAiIiIKKworICAgIHJlc3VsdCA9IFtdCisgICAgZyA9IGdlbmVyYXRlX3Rva2VucyhTdHJpbmdJTyhzKS5yZWFkbGluZSkgICAjIHRva2VuaXplIHRoZSBzdHJpbmcKKyAgICBmb3IgdG9rbnVtLCB0b2t2YWwsIF8sIF8sIF8gIGluIGc6CisgICAgICAgIGlmIHRva251bSA9PSBOVU1CRVIgYW5kICcuJyBpbiB0b2t2YWw6ICAjIHJlcGxhY2UgTlVNQkVSIHRva2VucworICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChbCisgICAgICAgICAgICAgICAgKE5BTUUsICdEZWNpbWFsJyksCisgICAgICAgICAgICAgICAgKE9QLCAnKCcpLAorICAgICAgICAgICAgICAgIChTVFJJTkcsIHJlcHIodG9rdmFsKSksCisgICAgICAgICAgICAgICAgKE9QLCAnKScpCisgICAgICAgICAgICBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgodG9rbnVtLCB0b2t2YWwpKQorICAgIHJldHVybiB1bnRva2VuaXplKHJlc3VsdCkKKworCitfX3Rlc3RfXyA9IHsiZG9jdGVzdHMiIDogZG9jdGVzdHMsICdkZWNpc3RtdCc6IGRlY2lzdG10fQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfdG9rZW5pemUKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF90b2tlbml6ZSwgVHJ1ZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdG9vbHMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90b29scy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjBiNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdG9vbHMucHkKQEAgLTAsMCArMSwzNjggQEAKKyIiIlRlc3RzIGZvciBzY3JpcHRzIGluIHRoZSBUb29scyBkaXJlY3RvcnkuCisKK1RoaXMgZmlsZSBjb250YWlucyByZWdyZXNzaW9uIHRlc3RzIGZvciBzb21lIG9mIHRoZSBzY3JpcHRzIGZvdW5kIGluIHRoZQorVG9vbHMgZGlyZWN0b3J5IG9mIGEgUHl0aG9uIGNoZWNrb3V0IG9yIHRhcmJhbGwsIHN1Y2ggYXMgcmVpbmRlbnQucHkuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzY29uZmlnCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCB0ZW1wX2RpcgorCitpZiBub3Qgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgorICAgICMgWFhYIHNvbWUgaW5zdGFsbGVycyBkbyBjb250YWluIHRoZSB0b29scywgc2hvdWxkIHdlIGRldGVjdCB0aGF0CisgICAgIyBhbmQgcnVuIHRoZSB0ZXN0cyBpbiB0aGF0IGNhc2UgdG9vPworICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCd0ZXN0IGlycmVsZXZhbnQgZm9yIGFuIGluc3RhbGxlZCBQeXRob24nKQorCitiYXNlcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdUb29scycpCitzY3JpcHRzZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnc2NyaXB0cycpCisKKworY2xhc3MgUmVpbmRlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc2NyaXB0ID0gb3MucGF0aC5qb2luKHNjcmlwdHNkaXIsICdyZWluZGVudC5weScpCisKKyAgICBkZWYgdGVzdF9ub2FyZ3Moc2VsZik6CisgICAgICAgIGFzc2VydF9weXRob25fb2soc2VsZi5zY3JpcHQpCisKKyAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZXJyLCBiJycpCisKKworY2xhc3MgUGluZGVudFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzY3JpcHQgPSBvcy5wYXRoLmpvaW4oc2NyaXB0c2RpciwgJ3BpbmRlbnQucHknKQorCisgICAgZGVmIGFzc2VydEZpbGVFcXVhbChzZWxmLCBmbjEsIGZuMik6CisgICAgICAgIHdpdGggb3BlbihmbjEpIGFzIGYxLCBvcGVuKGZuMikgYXMgZjI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYxLnJlYWRsaW5lcygpLCBmMi5yZWFkbGluZXMoKSkKKworICAgIGRlZiBwaW5kZW50KHNlbGYsIHNvdXJjZSwgKmFyZ3MpOgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgICAgICAoc3lzLmV4ZWN1dGFibGUsIHNlbGYuc2NyaXB0KSArIGFyZ3MsCisgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorICAgICAgICBvdXQsIGVyciA9IHByb2MuY29tbXVuaWNhdGUoc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlcnIpCisgICAgICAgIHJldHVybiBvdXQKKworICAgIGRlZiBsc3RyaXBsaW5lcyhzZWxmLCBkYXRhKToKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lLmxzdHJpcCgpIGZvciBsaW5lIGluIGRhdGEuc3BsaXRsaW5lcygpKSArICdcbicKKworICAgIGRlZiB0ZXN0X3NlbGZ0ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkaXJlY3Rvcnk6CisgICAgICAgICAgICBkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAnX3Rlc3QucHknKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuc2NyaXB0KSBhcyBmOgorICAgICAgICAgICAgICAgIGNsb3NlZCA9IGYucmVhZCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oZGF0YV9wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjbG9zZWQpCisKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soc2VsZi5zY3JpcHQsICctZCcsIGRhdGFfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorICAgICAgICAgICAgYmFja3VwID0gZGF0YV9wYXRoICsgJ34nCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYmFja3VwKSkKKyAgICAgICAgICAgIHdpdGggb3BlbihiYWNrdXApIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgY2xvc2VkKQorICAgICAgICAgICAgd2l0aCBvcGVuKGRhdGFfcGF0aCkgYXMgZjoKKyAgICAgICAgICAgICAgICBjbGVhbiA9IGYucmVhZCgpCisgICAgICAgICAgICBjb21waWxlKGNsZWFuLCAnX3Rlc3QucHknLCAnZXhlYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChjbGVhbiwgJy1jJyksIGNsb3NlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5waW5kZW50KGNsb3NlZCwgJy1kJyksIGNsZWFuKQorCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLWMnLCBkYXRhX3BhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKyAgICAgICAgICAgIHdpdGggb3BlbihiYWNrdXApIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgY2xlYW4pCisgICAgICAgICAgICB3aXRoIG9wZW4oZGF0YV9wYXRoKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGNsb3NlZCkKKworICAgICAgICAgICAgYnJva2VuID0gc2VsZi5sc3RyaXBsaW5lcyhjbG9zZWQpCisgICAgICAgICAgICB3aXRoIG9wZW4oZGF0YV9wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShicm9rZW4pCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLXInLCBkYXRhX3BhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKyAgICAgICAgICAgIHdpdGggb3BlbihiYWNrdXApIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYnJva2VuKQorICAgICAgICAgICAgd2l0aCBvcGVuKGRhdGFfcGF0aCkgYXMgZjoKKyAgICAgICAgICAgICAgICBpbmRlbnRlZCA9IGYucmVhZCgpCisgICAgICAgICAgICBjb21waWxlKGluZGVudGVkLCAnX3Rlc3QucHknLCAnZXhlYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChicm9rZW4sICctcicpLCBpbmRlbnRlZCkKKworICAgIGRlZiBwaW5kZW50X3Rlc3Qoc2VsZiwgY2xlYW4sIGNsb3NlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5waW5kZW50KGNsZWFuLCAnLWMnKSwgY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChjbG9zZWQsICctZCcpLCBjbGVhbikKKyAgICAgICAgYnJva2VuID0gc2VsZi5sc3RyaXBsaW5lcyhjbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5waW5kZW50KGJyb2tlbiwgJy1yJywgJy1lJywgJy1zJywgJzQnKSwgY2xvc2VkKQorCisgICAgZGVmIHRlc3Rfc3RhdGVtZW50cyhzZWxmKToKKyAgICAgICAgY2xlYW4gPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaWYgYToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgd2hpbGUgYToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB3aGlsZSBhOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZm9yIGkgaW4gYToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBmb3IgaSBpbiBhOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHdpdGggYToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIikKKworICAgICAgICBjbG9zZWQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaWYgYToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjIGVuZCBpZgorCisgICAgICAgICAgICBpZiBhOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgaWYKKworICAgICAgICAgICAgaWYgYToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbGlmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgaWYKKworICAgICAgICAgICAgd2hpbGUgYToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgIyBlbmQgd2hpbGUKKworICAgICAgICAgICAgd2hpbGUgYToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjIGVuZCB3aGlsZQorCisgICAgICAgICAgICBmb3IgaSBpbiBhOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAjIGVuZCBmb3IKKworICAgICAgICAgICAgZm9yIGkgaW4gYToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjIGVuZCBmb3IKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgdHJ5CisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgdHJ5CisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgdHJ5CisKKyAgICAgICAgICAgIHdpdGggYToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjIGVuZCB3aXRoCisKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgY2xhc3MgQQorCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgZW5kIGRlZiBmCisgICAgICAgICAgICAiIiIpCisgICAgICAgIHNlbGYucGluZGVudF90ZXN0KGNsZWFuLCBjbG9zZWQpCisKKyAgICBkZWYgdGVzdF9tdWx0aWxldmVsKHNlbGYpOgorICAgICAgICBjbGVhbiA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBkZWYgZm9vYmFyKGEsIGIpOgorICAgICAgICAgICAgICAgIGlmIGEgPT0gYjoKKyAgICAgICAgICAgICAgICAgICAgYSA9IGErMQorICAgICAgICAgICAgICAgIGVsaWYgYSA8IGI6CisgICAgICAgICAgICAgICAgICAgIGIgPSBiLTEKKyAgICAgICAgICAgICAgICAgICAgaWYgYiA+IGE6IGEgPSBhLTEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnb29wcyEnCisgICAgICAgICAgICAiIiIpCisgICAgICAgIGNsb3NlZCA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBkZWYgZm9vYmFyKGEsIGIpOgorICAgICAgICAgICAgICAgIGlmIGEgPT0gYjoKKyAgICAgICAgICAgICAgICAgICAgYSA9IGErMQorICAgICAgICAgICAgICAgIGVsaWYgYSA8IGI6CisgICAgICAgICAgICAgICAgICAgIGIgPSBiLTEKKyAgICAgICAgICAgICAgICAgICAgaWYgYiA+IGE6IGEgPSBhLTEKKyAgICAgICAgICAgICAgICAgICAgIyBlbmQgaWYKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnb29wcyEnCisgICAgICAgICAgICAgICAgIyBlbmQgaWYKKyAgICAgICAgICAgICMgZW5kIGRlZiBmb29iYXIKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5waW5kZW50X3Rlc3QoY2xlYW4sIGNsb3NlZCkKKworICAgIGRlZiB0ZXN0X3ByZXNlcnZlX2luZGVudHMoc2VsZik6CisgICAgICAgIGNsZWFuID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICAgICAgICAgICBpZiBiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIiIiKQorICAgICAgICBjbG9zZWQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaWYgYToKKyAgICAgICAgICAgICAgICAgICAgIGlmIGI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAjIGVuZCBpZgorICAgICAgICAgICAgIyBlbmQgaWYKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoY2xlYW4sICctYycpLCBjbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5waW5kZW50KGNsb3NlZCwgJy1kJyksIGNsZWFuKQorICAgICAgICBicm9rZW4gPSBzZWxmLmxzdHJpcGxpbmVzKGNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoYnJva2VuLCAnLXInLCAnLWUnLCAnLXMnLCAnOScpLCBjbG9zZWQpCisgICAgICAgIGNsZWFuID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICBcdGlmIGI6CisgICAgICAgICAgICBcdFx0cGFzcworICAgICAgICAgICAgIiIiKQorICAgICAgICBjbG9zZWQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaWYgYToKKyAgICAgICAgICAgIFx0aWYgYjoKKyAgICAgICAgICAgIFx0XHRwYXNzCisgICAgICAgICAgICBcdCMgZW5kIGlmCisgICAgICAgICAgICAjIGVuZCBpZgorICAgICAgICAgICAgIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChjbGVhbiwgJy1jJyksIGNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoY2xvc2VkLCAnLWQnKSwgY2xlYW4pCisgICAgICAgIGJyb2tlbiA9IHNlbGYubHN0cmlwbGluZXMoY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChicm9rZW4sICctcicpLCBjbG9zZWQpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVkX25ld2xpbmUoc2VsZik6CisgICAgICAgIGNsZWFuID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGNsYXNzXFwKKyAgICAgICAgICAgIFxcCisgICAgICAgICAgICAgQToKKyAgICAgICAgICAgICAgIGRlZlwKKyAgICAgICAgICAgIFxcCisgICAgICAgICAgICBmOgorICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIiIiKQorICAgICAgICBjbG9zZWQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgY2xhc3NcXAorICAgICAgICAgICAgXFwKKyAgICAgICAgICAgICBBOgorICAgICAgICAgICAgICAgZGVmXAorICAgICAgICAgICAgXFwKKyAgICAgICAgICAgIGY6CisgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAjIGVuZCBkZWYgZgorICAgICAgICAgICAgIyBlbmQgY2xhc3MgQQorICAgICAgICAgICAgIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChjbGVhbiwgJy1jJyksIGNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoY2xvc2VkLCAnLWQnKSwgY2xlYW4pCisKKyAgICBkZWYgdGVzdF9lbXB0eV9saW5lKHNlbGYpOgorICAgICAgICBjbGVhbiA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBpZiBhOgorCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIiIiKQorICAgICAgICBjbG9zZWQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaWYgYToKKworICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgZW5kIGlmCisgICAgICAgICAgICAiIiIpCisgICAgICAgIHNlbGYucGluZGVudF90ZXN0KGNsZWFuLCBjbG9zZWQpCisKKyAgICBkZWYgdGVzdF9vbmVsaW5lKHNlbGYpOgorICAgICAgICBjbGVhbiA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBpZiBhOiBwYXNzCisgICAgICAgICAgICAiIiIpCisgICAgICAgIGNsb3NlZCA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBpZiBhOiBwYXNzCisgICAgICAgICAgICAjIGVuZCBpZgorICAgICAgICAgICAgIiIiKQorICAgICAgICBzZWxmLnBpbmRlbnRfdGVzdChjbGVhbiwgY2xvc2VkKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCpbb2JqIGZvciBvYmogaW4gZ2xvYmFscygpLnZhbHVlcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSldKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90cmFjZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTJhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90cmFjZS5weQpAQCAtMCwwICsxLDM0MSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAocnVuX3VuaXR0ZXN0LCBURVNURk4sIHJtdHJlZSwgdW5saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkX3N0ZG91dCkKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgdHJhY2UKK2Zyb20gdHJhY2UgaW1wb3J0IENvdmVyYWdlUmVzdWx0cywgVHJhY2UKKworZnJvbSB0ZXN0LnRyYWNlZG1vZHVsZXMgaW1wb3J0IHRlc3Rtb2QKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVdGlsaXRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisKK2RlZiBmaXhfZXh0X3B5KGZpbGVuYW1lKToKKyAgICAiIiJHaXZlbiBhIC5weWMvLnB5byBmaWxlbmFtZSBjb252ZXJ0cyBpdCB0byB0aGUgYXBwcm9wcmlhdGUgLnB5IiIiCisgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcucHljJywgJy5weW8nKSk6CisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbOi0xXQorICAgIHJldHVybiBmaWxlbmFtZQorCitkZWYgbXlfZmlsZV9hbmRfbW9kbmFtZSgpOgorICAgICIiIlRoZSAucHkgZmlsZSBhbmQgbW9kdWxlIG5hbWUgb2YgdGhpcyBmaWxlIChfX2ZpbGVfXykiIiIKKyAgICBtb2RuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fKSlbMF0KKyAgICByZXR1cm4gZml4X2V4dF9weShfX2ZpbGVfXyksIG1vZG5hbWUKKworZGVmIGdldF9maXJzdGxpbmVubyhmdW5jKToKKyAgICByZXR1cm4gZnVuYy5fX2NvZGVfXy5jb19maXJzdGxpbmVubworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGFyZ2V0IGZ1bmN0aW9ucyBmb3IgdHJhY2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisjCisjIFRoZSByZWxhdGl2ZSBsaW5lIG51bWJlcnMgb2YgbGluZXMgaW4gdGhlc2UgZnVuY3Rpb25zIG1hdHRlciBmb3IgdmVyaWZ5aW5nCisjIHRyYWNpbmcuIFBsZWFzZSBtb2RpZnkgdGhlIGFwcHJvcHJpYXRlIHRlc3RzIGlmIHlvdSBjaGFuZ2Ugb25lIG9mIHRoZQorIyBmdW5jdGlvbnMuIEFic29sdXRlIGxpbmUgbnVtYmVycyBkb24ndCBtYXR0ZXIuCisjCisKK2RlZiB0cmFjZWRfZnVuY19saW5lYXIoeCwgeSk6CisgICAgYSA9IHgKKyAgICBiID0geQorICAgIGMgPSBhICsgYgorICAgIHJldHVybiBjCisKK2RlZiB0cmFjZWRfZnVuY19sb29wKHgsIHkpOgorICAgIGMgPSB4CisgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgIGMgKz0geQorICAgIHJldHVybiBjCisKK2RlZiB0cmFjZWRfZnVuY19pbXBvcnRpbmcoeCwgeSk6CisgICAgcmV0dXJuIHggKyB5ICsgdGVzdG1vZC5mdW5jKDEpCisKK2RlZiB0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyKHgpOgorICAgIGMgPSB0cmFjZWRfZnVuY19saW5lYXIoeCwgeCkKKyAgICByZXR1cm4gYyArIHgKKworZGVmIHRyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXIoeCk6CisgICAgayA9IHRyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXIoeCkKKyAgICBrICs9IHRyYWNlZF9mdW5jX2ltcG9ydGluZyhrLCB4KQorICAgIHJldHVybiBrCisKK2RlZiB0cmFjZWRfZnVuY19nZW5lcmF0b3IobnVtKToKKyAgICBjID0gNSAgICAgICAjIGV4ZWN1dGVkIG9uY2UKKyAgICBmb3IgaSBpbiByYW5nZShudW0pOgorICAgICAgICB5aWVsZCBpICsgYworCitkZWYgdHJhY2VkX2Z1bmNfY2FsbGluZ19nZW5lcmF0b3IoKToKKyAgICBrID0gMAorICAgIGZvciBpIGluIHRyYWNlZF9mdW5jX2dlbmVyYXRvcigxMCk6CisgICAgICAgIGsgKz0gaQorCitkZWYgdHJhY2VkX2RvdWJsZXIobnVtKToKKyAgICByZXR1cm4gbnVtICogMgorCitkZWYgdHJhY2VkX2NhbGxlcl9saXN0X2NvbXByZWhlbnNpb24oKToKKyAgICBrID0gMTAKKyAgICBteWxpc3QgPSBbdHJhY2VkX2RvdWJsZXIoaSkgZm9yIGkgaW4gcmFuZ2UoayldCisgICAgcmV0dXJuIG15bGlzdAorCisKK2NsYXNzIFRyYWNlZENsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICBzZWxmLmEgPSB4CisKKyAgICBkZWYgaW5zdF9tZXRob2RfbGluZWFyKHNlbGYsIHkpOgorICAgICAgICByZXR1cm4gc2VsZi5hICsgeQorCisgICAgZGVmIGluc3RfbWV0aG9kX2NhbGxpbmcoc2VsZiwgeCk6CisgICAgICAgIGMgPSBzZWxmLmluc3RfbWV0aG9kX2xpbmVhcih4KQorICAgICAgICByZXR1cm4gYyArIHRyYWNlZF9mdW5jX2xpbmVhcih4LCBjKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNsYXNzX21ldGhvZF9saW5lYXIoY2xzLCB5KToKKyAgICAgICAgcmV0dXJuIHkgKiAyCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHN0YXRpY19tZXRob2RfbGluZWFyKHkpOgorICAgICAgICByZXR1cm4geSAqIDIKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgY2FzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisKKworY2xhc3MgVGVzdExpbmVDb3VudHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIldoaXRlLWJveCB0ZXN0aW5nIG9mIGxpbmUtY291bnRpbmcsIHZpYSBydW5mdW5jIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlciA9IFRyYWNlKGNvdW50PTEsIHRyYWNlPTAsIGNvdW50ZnVuY3M9MCwgY291bnRjYWxsZXJzPTApCisgICAgICAgIHNlbGYubXlfcHlfZmlsZW5hbWUgPSBmaXhfZXh0X3B5KF9fZmlsZV9fKQorCisgICAgZGVmIHRlc3RfdHJhY2VkX2Z1bmNfbGluZWFyKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9mdW5jX2xpbmVhciwgMiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDcpCisKKyAgICAgICAgIyBhbGwgbGluZXMgYXJlIGV4ZWN1dGVkIG9uY2UKKyAgICAgICAgZXhwZWN0ZWQgPSB7fQorICAgICAgICBmaXJzdGxpbmVubyA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZnVuY19saW5lYXIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDUpOgorICAgICAgICAgICAgZXhwZWN0ZWRbKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgIGkpXSA9IDEKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jb3VudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdHJhY2VkX2Z1bmNfbG9vcChzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19sb29wLCAyLCAzKQorCisgICAgICAgIGZpcnN0bGluZW5vID0gZ2V0X2ZpcnN0bGluZW5vKHRyYWNlZF9mdW5jX2xvb3ApCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMSk6IDEsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAyKTogNiwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDMpOiA1LAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgNCk6IDEsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3RyYWNlZF9mdW5jX2ltcG9ydGluZyhzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19pbXBvcnRpbmcsIDIsIDUpCisKKyAgICAgICAgZmlyc3RsaW5lbm8gPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfaW1wb3J0aW5nKQorICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDEpOiAxLAorICAgICAgICAgICAgKGZpeF9leHRfcHkodGVzdG1vZC5fX2ZpbGVfXyksIDIpOiAxLAorICAgICAgICAgICAgKGZpeF9leHRfcHkodGVzdG1vZC5fX2ZpbGVfXyksIDMpOiAxLAorICAgICAgICB9CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3RyYWNlX2Z1bmNfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9mdW5jX2NhbGxpbmdfZ2VuZXJhdG9yKQorCisgICAgICAgIGZpcnN0bGluZW5vX2NhbGxpbmcgPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfY2FsbGluZ19nZW5lcmF0b3IpCisgICAgICAgIGZpcnN0bGluZW5vX2dlbiA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZnVuY19nZW5lcmF0b3IpCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAxKTogMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsaW5nICsgMik6IDExLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAzKTogMTAsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fZ2VuICsgMSk6IDEsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fZ2VuICsgMik6IDExLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2dlbiArIDMpOiAxMCwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jb3VudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdHJhY2VfbGlzdF9jb21wcmVoZW5zaW9uKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9jYWxsZXJfbGlzdF9jb21wcmVoZW5zaW9uKQorCisgICAgICAgIGZpcnN0bGluZW5vX2NhbGxpbmcgPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2NhbGxlcl9saXN0X2NvbXByZWhlbnNpb24pCisgICAgICAgIGZpcnN0bGluZW5vX2NhbGxlZCA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZG91YmxlcikKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fY2FsbGluZyArIDEpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAyKTogMTEsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fY2FsbGluZyArIDMpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxlZCArIDEpOiAxMCwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jb3VudHMsIGV4cGVjdGVkKQorCisKKyAgICBkZWYgdGVzdF9saW5lYXJfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyBYWFggdG9kbzogbGF0ZXIgYWRkICdzdGF0aWNfbWV0aG9kX2xpbmVhcicgYW5kICdjbGFzc19tZXRob2RfbGluZWFyJworICAgICAgICAjIGhlcmUsIG9uY2UgaXNzdWUxNzY0Mjg2IGlzIHJlc29sdmVkCisgICAgICAgICMKKyAgICAgICAgZm9yIG1ldGhuYW1lIGluIFsnaW5zdF9tZXRob2RfbGluZWFyJyxdOgorICAgICAgICAgICAgdHJhY2VyID0gVHJhY2UoY291bnQ9MSwgdHJhY2U9MCwgY291bnRmdW5jcz0wLCBjb3VudGNhbGxlcnM9MCkKKyAgICAgICAgICAgIHRyYWNlZF9vYmogPSBUcmFjZWRDbGFzcygyNSkKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIodHJhY2VkX29iaiwgbWV0aG5hbWUpCisgICAgICAgICAgICB0cmFjZXIucnVuZnVuYyhtZXRob2QsIDIwKQorCisgICAgICAgICAgICBmaXJzdGxpbmVubyA9IGdldF9maXJzdGxpbmVubyhtZXRob2QpCisgICAgICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAxKTogMSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2VyLnJlc3VsdHMoKS5jb3VudHMsIGV4cGVjdGVkKQorCitjbGFzcyBUZXN0UnVuRXhlY0NvdW50cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQSBzaW1wbGUgc2FuaXR5IHRlc3Qgb2YgbGluZS1jb3VudGluZywgdmlhIHJ1bmN0eCAoZXhlYykiIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubXlfcHlfZmlsZW5hbWUgPSBmaXhfZXh0X3B5KF9fZmlsZV9fKQorCisgICAgZGVmIHRlc3RfZXhlY19jb3VudHMoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyID0gVHJhY2UoY291bnQ9MSwgdHJhY2U9MCwgY291bnRmdW5jcz0wLCBjb3VudGNhbGxlcnM9MCkKKyAgICAgICAgY29kZSA9IHInJyd0cmFjZWRfZnVuY19sb29wKDIsIDUpJycnCisgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsIF9fZmlsZV9fLCAnZXhlYycpCisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmN0eChjb2RlLCBnbG9iYWxzKCksIHZhcnMoKSkKKworICAgICAgICBmaXJzdGxpbmVubyA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZnVuY19sb29wKQorICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDEpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMik6IDYsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAzKTogNSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDQpOiAxLAorICAgICAgICB9CisKKyAgICAgICAgIyBXaGVuIHVzZWQgdGhyb3VnaCAncnVuJywgc29tZSBvdGhlciBzcHVyaW91cyBjb3VudHMgYXJlIHByb2R1Y2VkLCBsaWtlCisgICAgICAgICMgdGhlIHNldHRyYWNlIG9mIHRocmVhZGluZywgd2hpY2ggd2UgaWdub3JlLCBqdXN0IG1ha2luZyBzdXJlIHRoYXQgdGhlCisgICAgICAgICMgY291bnRzIGZvIHRyYWNlZF9mdW5jX2xvb3Agd2VyZSByaWdodC4KKyAgICAgICAgIworICAgICAgICBmb3IgayBpbiBleHBlY3RlZC5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jb3VudHNba10sIGV4cGVjdGVkW2tdKQorCisKK2NsYXNzIFRlc3RGdW5jcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiV2hpdGUtYm94IHRlc3Rpbmcgb2YgZnVuY3MgdHJhY2luZyIiIgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIgPSBUcmFjZShjb3VudD0wLCB0cmFjZT0wLCBjb3VudGZ1bmNzPTEpCisgICAgICAgIHNlbGYuZmlsZW1vZCA9IG15X2ZpbGVfYW5kX21vZG5hbWUoKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX2NhbGxlcihzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyLCAxKQorCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyJywpOiAxLAorICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19saW5lYXInLCk6IDEsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY2FsbGVkZnVuY3MsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9jYWxsZXJfaW1wb3J0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXIsIDEpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXInLCk6IDEsCisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2xpbmVhcicsKTogMSwKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nX2NhbGxlcicsKTogMSwKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nJywpOiAxLAorICAgICAgICAgICAgKGZpeF9leHRfcHkodGVzdG1vZC5fX2ZpbGVfXyksICd0ZXN0bW9kJywgJ2Z1bmMnKTogMSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jYWxsZWRmdW5jcywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pbnN0X21ldGhvZF9jYWxsaW5nKHNlbGYpOgorICAgICAgICBvYmogPSBUcmFjZWRDbGFzcygyMCkKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyhvYmouaW5zdF9tZXRob2RfY2FsbGluZywgMSkKKworICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgnVHJhY2VkQ2xhc3MuaW5zdF9tZXRob2RfY2FsbGluZycsKTogMSwKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgnVHJhY2VkQ2xhc3MuaW5zdF9tZXRob2RfbGluZWFyJywpOiAxLAorICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19saW5lYXInLCk6IDEsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY2FsbGVkZnVuY3MsIGV4cGVjdGVkKQorCisKK2NsYXNzIFRlc3RDYWxsZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJXaGl0ZS1ib3ggdGVzdGluZyBvZiBjYWxsZXJzIHRyYWNpbmciIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyID0gVHJhY2UoY291bnQ9MCwgdHJhY2U9MCwgY291bnRjYWxsZXJzPTEpCisgICAgICAgIHNlbGYuZmlsZW1vZCA9IG15X2ZpbGVfYW5kX21vZG5hbWUoKQorCisgICAgZGVmIHRlc3RfbG9vcF9jYWxsZXJfaW1wb3J0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXIsIDEpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAoKG9zLnBhdGguc3BsaXRleHQodHJhY2UuX19maWxlX18pWzBdICsgJy5weScsICd0cmFjZScsICdUcmFjZS5ydW5mdW5jJyksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nX2NhbGxlcicsKSkpOiAxLAorICAgICAgICAgICAgKChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXInLCkpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2xpbmVhcicsKSkpOiAxLAorICAgICAgICAgICAgKChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXInLCkpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXInLCkpKTogMSwKKyAgICAgICAgICAgICgoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmdfY2FsbGVyJywpKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmcnLCkpKTogMSwKKyAgICAgICAgICAgICgoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmcnLCkpLAorICAgICAgICAgICAgICAgIChmaXhfZXh0X3B5KHRlc3Rtb2QuX19maWxlX18pLCAndGVzdG1vZCcsICdmdW5jJykpOiAxLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNhbGxlcnMsIGV4cGVjdGVkKQorCisKKyMgQ3JlYXRlZCBzZXBhcmF0ZWx5IGZvciBpc3N1ZSAjMzgyMQorY2xhc3MgVGVzdENvdmVyYWdlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHJtdHJlZShURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4pCisKKyAgICBkZWYgX2NvdmVyYWdlKHNlbGYsIHRyYWNlciwKKyAgICAgICAgICAgICAgICAgIGNtZD0nZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3BwcmludDsgdGVzdF9wcHJpbnQudGVzdF9tYWluKCknKToKKyAgICAgICAgdHJhY2VyLnJ1bihjbWQpCisgICAgICAgIHIgPSB0cmFjZXIucmVzdWx0cygpCisgICAgICAgIHIud3JpdGVfcmVzdWx0cyhzaG93X21pc3Npbmc9VHJ1ZSwgc3VtbWFyeT1UcnVlLCBjb3ZlcmRpcj1URVNURk4pCisKKyAgICBkZWYgdGVzdF9jb3ZlcmFnZShzZWxmKToKKyAgICAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UodHJhY2U9MCwgY291bnQ9MSkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzZWxmLl9jb3ZlcmFnZSh0cmFjZXIpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicHByaW50LnB5IiBpbiBzdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY2FzZS5weSIgaW4gc3Rkb3V0KSAgICMgZnJvbSB1bml0dGVzdAorICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInBwcmludC5jb3ZlciIgaW4gZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgidW5pdHRlc3QuY2FzZS5jb3ZlciIgaW4gZmlsZXMpCisKKyAgICBkZWYgdGVzdF9jb3ZlcmFnZV9pZ25vcmUoc2VsZik6CisgICAgICAgICMgSWdub3JlIGFsbCBmaWxlcywgbm90aGluZyBzaG91bGQgYmUgdHJhY2VkIG5vciBwcmludGVkCisgICAgICAgIGxpYnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguZGlybmFtZShvcy5fX2ZpbGVfXykpCisgICAgICAgICMgc3lzLnByZWZpeCBkb2VzIG5vdCB3b3JrIHdoZW4gcnVubmluZyBmcm9tIGEgY2hlY2tvdXQKKyAgICAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLnByZWZpeCwgc3lzLmV4ZWNfcHJlZml4LCBsaWJwYXRoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9MCwgY291bnQ9MSkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzZWxmLl9jb3ZlcmFnZSh0cmFjZXIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6CisgICAgICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlcywgW10pCisKKyAgICBkZWYgdGVzdF9pc3N1ZTk5MzYoc2VsZik6CisgICAgICAgIHRyYWNlciA9IHRyYWNlLlRyYWNlKHRyYWNlPTAsIGNvdW50PTEpCisgICAgICAgIG1vZG5hbWUgPSAndGVzdC50cmFjZWRtb2R1bGVzLnRlc3Rtb2QnCisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIG1vZHVsZSBpcyBleGVjdXRlZCBpbiBpbXBvcnQKKyAgICAgICAgaWYgbW9kbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2RuYW1lXQorICAgICAgICBjbWQgPSAoImltcG9ydCB0ZXN0LnRyYWNlZG1vZHVsZXMudGVzdG1vZCBhcyB0OyIKKyAgICAgICAgICAgICAgICJ0LmZ1bmMoMCk7IHQuZnVuYzIoKTsiKQorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHNlbGYuX2NvdmVyYWdlKHRyYWNlciwgY21kKQorICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICBzdGRvdXQucmVhZGxpbmUoKQorICAgICAgICBjb3ZlcmFnZSA9IHt9CisgICAgICAgIGZvciBsaW5lIGluIHN0ZG91dDoKKyAgICAgICAgICAgIGxpbmVzLCBjb3YsIG1vZHVsZSA9IGxpbmUuc3BsaXQoKVs6M10KKyAgICAgICAgICAgIGNvdmVyYWdlW21vZHVsZV0gPSAoaW50KGxpbmVzKSwgaW50KGNvdls6LTFdKSkKKyAgICAgICAgIyBYWFggVGhpcyBpcyBuZWVkZWQgdG8gcnVuIHJlZ3J0ZXN0LnB5IGFzIGEgc2NyaXB0CisgICAgICAgIG1vZG5hbWUgPSB0cmFjZS5mdWxsbW9kbmFtZShzeXMubW9kdWxlc1ttb2RuYW1lXS5fX2ZpbGVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtb2RuYW1lLCBjb3ZlcmFnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3ZlcmFnZVttb2RuYW1lXSwgKDUsIDEwMCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChfX25hbWVfXykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3NmJlOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQpAQCAtMCwwICsxLDIwNCBAQAorIiIiVGVzdCBjYXNlcyBmb3IgdHJhY2ViYWNrIG1vZHVsZSIiIgorCitmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgdHJhY2ViYWNrX3ByaW50Citmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGltcCBpbXBvcnQgcmVsb2FkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGlzX2p5dGhvbiwgRXJyb3IKKworaW1wb3J0IHRyYWNlYmFjaworCisKK2NsYXNzIFRyYWNlYmFja0Nhc2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEZvciBub3csIGEgdmVyeSBtaW5pbWFsIHNldCBvZiB0ZXN0cy4gIEkgd2FudCB0byBiZSBzdXJlIHRoYXQKKyAgICAjIGZvcm1hdHRpbmcgb2YgU3ludGF4RXJyb3JzIHdvcmtzIGJhc2VkIG9uIGNoYW5nZXMgZm9yIDIuMS4KKworICAgIGRlZiBnZXRfZXhjZXB0aW9uX2Zvcm1hdChzZWxmLCBmdW5jLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdW5jKCkKKyAgICAgICAgZXhjZXB0IGV4YywgdmFsdWU6CisgICAgICAgICAgICByZXR1cm4gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGMsIHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgImNhbGwgZGlkIG5vdCByYWlzZSBleGNlcHRpb24iCisKKyAgICBkZWYgc3ludGF4X2Vycm9yX3dpdGhfY2FyZXQoc2VsZik6CisgICAgICAgIGNvbXBpbGUoImRlZiBmYWN0KHgpOlxuXHRyZXR1cm4geCFcbiIsICI/IiwgImV4ZWMiKQorCisgICAgZGVmIHN5bnRheF9lcnJvcl93aXRoX2NhcmV0XzIoc2VsZik6CisgICAgICAgIGNvbXBpbGUoIjEgK1xuIiwgIj8iLCAiZXhlYyIpCisKKyAgICBkZWYgc3ludGF4X2Vycm9yX3dpdGhvdXRfY2FyZXQoc2VsZik6CisgICAgICAgICMgWFhYIHdoeSBkb2Vzbid0IGNvbXBpbGUgcmFpc2UgdGhlIHNhbWUgdHJhY2ViYWNrPworICAgICAgICBpbXBvcnQgdGVzdC5iYWRzeW50YXhfbm9jYXJldAorCisgICAgZGVmIHN5bnRheF9lcnJvcl9iYWRfaW5kZW50YXRpb24oc2VsZik6CisgICAgICAgIGNvbXBpbGUoImRlZiBzcGFtKCk6XG4gIHByaW50IDFcbiBwcmludCAyIiwgIj8iLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9jYXJldChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5nZXRfZXhjZXB0aW9uX2Zvcm1hdChzZWxmLnN5bnRheF9lcnJvcl93aXRoX2NhcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGVycikgPT0gNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyclsxXS5zdHJpcCgpID09ICJyZXR1cm4geCEiKQorICAgICAgICBzZWxmLmFzc2VydEluKCJeIiwgZXJyWzJdKSAjIHRoaXJkIGxpbmUgaGFzIGNhcmV0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uZmluZCgiISIpID09IGVyclsyXS5maW5kKCJeIikpICMgaW4gdGhlIHJpZ2h0IHBsYWNlCisKKyAgICAgICAgZXJyID0gc2VsZi5nZXRfZXhjZXB0aW9uX2Zvcm1hdChzZWxmLnN5bnRheF9lcnJvcl93aXRoX2NhcmV0XzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4RXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl4iLCBlcnJbMl0pICMgdGhpcmQgbGluZSBoYXMgY2FyZXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyclsyXS5jb3VudCgnXG4nKSA9PSAxKSAjIGFuZCBubyBhZGRpdGlvbmFsIG5ld2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyclsxXS5maW5kKCIrIikgPT0gZXJyWzJdLmZpbmQoIl4iKSkgIyBpbiB0aGUgcmlnaHQgcGxhY2UKKworICAgIGRlZiB0ZXN0X25vY2FyZXQoc2VsZik6CisgICAgICAgIGlmIGlzX2p5dGhvbjoKKyAgICAgICAgICAgICMganl0aG9uIGFkZHMgYSBjYXJldCBpbiB0aGlzIGNhc2UgKHdoeSBzaG91bGRuJ3QgaXQ/KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVyciA9IHNlbGYuZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZi5zeW50YXhfZXJyb3Jfd2l0aG91dF9jYXJldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXhFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihlcnIpID09IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uc3RyaXAoKSA9PSAiW3ggZm9yIHggaW4geF0gPSB4IikKKworICAgIGRlZiB0ZXN0X2JhZF9pbmRlbnRhdGlvbihzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5nZXRfZXhjZXB0aW9uX2Zvcm1hdChzZWxmLnN5bnRheF9lcnJvcl9iYWRfaW5kZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZW50YXRpb25FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihlcnIpID09IDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uc3RyaXAoKSA9PSAicHJpbnQgMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl4iLCBlcnJbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uZmluZCgiMiIpID09IGVyclsyXS5maW5kKCJeIikpCisKKyAgICBkZWYgdGVzdF9idWc3Mzc0NzMoc2VsZik6CisgICAgICAgIGltcG9ydCBvcywgdGVtcGZpbGUsIHRpbWUKKworICAgICAgICBzYXZlZHBhdGggPSBzeXMucGF0aFs6XQorICAgICAgICB0ZXN0ZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCB0ZXN0ZGlyKQorICAgICAgICAgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdGRpciwgJ3Rlc3RfYnVnNzM3NDczLnB5JykKKyAgICAgICAgICAgIHByaW50ID4+IG9wZW4odGVzdGZpbGUsICd3JyksICIiIgorZGVmIHRlc3QoKToKKyAgICByYWlzZSBWYWx1ZUVycm9yIiIiCisKKyAgICAgICAgICAgIGlmICd0ZXN0X2J1ZzczNzQ3MycgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWyd0ZXN0X2J1ZzczNzQ3MyddCisgICAgICAgICAgICBpbXBvcnQgdGVzdF9idWc3Mzc0NzMKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlc3RfYnVnNzM3NDczLnRlc3QoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgIyB0aGlzIGxvYWRzIHNvdXJjZSBjb2RlIHRvIGxpbmVjYWNoZQorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5leHRyYWN0X3RiKHN5cy5leGNfdHJhY2ViYWNrKQorCisgICAgICAgICAgICAjIElmIHRoaXMgdGVzdCBydW5zIHRvbyBxdWlja2x5LCB0ZXN0X2J1ZzczNzQ3My5weSdzIG10aW1lCisgICAgICAgICAgICAjIGF0dHJpYnV0ZSB3aWxsIHJlbWFpbiB1bmNoYW5nZWQgZXZlbiBpZiB0aGUgZmlsZSBpcyByZXdyaXR0ZW4uCisgICAgICAgICAgICAjIENvbnNlcXVlbnRseSwgdGhlIGZpbGUgd291bGQgbm90IHJlbG9hZC4gIFNvLCBhZGRlZCBhIHNsZWVwKCkKKyAgICAgICAgICAgICMgZGVsYXkgdG8gYXNzdXJlIHRoYXQgYSBuZXcsIGRpc3RpbmN0IHRpbWVzdGFtcCBpcyB3cml0dGVuLgorICAgICAgICAgICAgIyBTaW5jZSBXaW5NRSB3aXRoIEZBVDMyIGhhcyBtdWx0aXNlY29uZCByZXNvbHV0aW9uLCBtb3JlIHRoYW4KKyAgICAgICAgICAgICMgdGhyZWUgc2Vjb25kcyBhcmUgbmVlZGVkIGZvciB0aGlzIHRlc3QgdG8gcGFzcyByZWxpYWJseSA6LSgKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNCkKKworICAgICAgICAgICAgcHJpbnQgPj4gb3Blbih0ZXN0ZmlsZSwgJ3cnKSwgIiIiCitkZWYgdGVzdCgpOgorICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IiIiIKKyAgICAgICAgICAgIHJlbG9hZCh0ZXN0X2J1ZzczNzQ3MykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0X2J1ZzczNzQ3My50ZXN0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgIHNyYyA9IHRyYWNlYmFjay5leHRyYWN0X3RiKHN5cy5leGNfdHJhY2ViYWNrKVstMV1bLTFdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmMsICdyYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gc2F2ZWRwYXRoCisgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKHRlc3RkaXIpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odGVzdGRpciwgZikpCisgICAgICAgICAgICBvcy5ybWRpcih0ZXN0ZGlyKQorCisgICAgZGVmIHRlc3RfYmFzZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGV4Y2VwdGlvbnMgZGVyaXZlZCBmcm9tIEJhc2VFeGNlcHRpb24gYXJlIGZvcm1hdHRlZCByaWdodAorICAgICAgICBlID0gS2V5Ym9hcmRJbnRlcnJ1cHQoKQorICAgICAgICBsc3QgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGUuX19jbGFzc19fLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgWydLZXlib2FyZEludGVycnVwdFxuJ10pCisKKyAgICAjIFN0cmluZyBleGNlcHRpb25zIGFyZSBkZXByZWNhdGVkLCBidXQgbGVnYWwuICBUaGUgcXVpcmt5IGZvcm0gd2l0aAorICAgICMgc2VwYXJhdGUgInR5cGUiIGFuZCAidmFsdWUiIHRlbmRzIHRvIGJyZWFrIHRoaW5ncywgYmVjYXVzZQorICAgICMgICAgIG5vdCBpc2luc3RhbmNlKHZhbHVlLCB0eXBlKQorICAgICMgYW5kIGEgc3RyaW5nIGNhbm5vdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQgdG8gaXNzdWJjbGFzcy4KKyAgICAjCisgICAgIyBOb3RlIHRoYXQgc3lzLmxhc3RfdHlwZSBhbmQgc3lzLmxhc3RfdmFsdWUgZG8gbm90IGdldCBzZXQgaWYgYW4KKyAgICAjIGV4Y2VwdGlvbiBpcyBjYXVnaHQsIHNvIHdlIHNvcnQgb2YgY2hlYXQgYW5kIGp1c3QgZW11bGF0ZSB0aGVtLgorICAgICMKKyAgICAjIHRlc3Rfc3RyaW5nX2V4Y2VwdGlvbjEgaXMgZXF1aXZhbGVudCB0bworICAgICMKKyAgICAjID4+PiByYWlzZSAiU3RyaW5nIEV4Y2VwdGlvbiIKKyAgICAjCisgICAgIyB0ZXN0X3N0cmluZ19leGNlcHRpb24yIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAjCisgICAgIyA+Pj4gcmFpc2UgIlN0cmluZyBFeGNlcHRpb24iLCAiU3RyaW5nIFZhbHVlIgorICAgICMKKyAgICBkZWYgdGVzdF9zdHJpbmdfZXhjZXB0aW9uMShzZWxmKToKKyAgICAgICAgc3RyX3R5cGUgPSAiU3RyaW5nIEV4Y2VwdGlvbiIKKyAgICAgICAgZXJyID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShzdHJfdHlwZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJbMF0sIHN0cl90eXBlICsgJ1xuJykKKworICAgIGRlZiB0ZXN0X3N0cmluZ19leGNlcHRpb24yKHNlbGYpOgorICAgICAgICBzdHJfdHlwZSA9ICJTdHJpbmcgRXhjZXB0aW9uIgorICAgICAgICBzdHJfdmFsdWUgPSAiU3RyaW5nIFZhbHVlIgorICAgICAgICBlcnIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHN0cl90eXBlLCBzdHJfdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVyciksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyWzBdLCBzdHJfdHlwZSArICc6ICcgKyBzdHJfdmFsdWUgKyAnXG4nKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2JhZF9fc3RyX18oc2VsZik6CisgICAgICAgIGNsYXNzIFgoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBlcnIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KFgsIFgoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyKSwgMSkKKyAgICAgICAgc3RyX3ZhbHVlID0gJzx1bnByaW50YWJsZSAlcyBvYmplY3Q+JyAlIFguX19uYW1lX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJbMF0sIFguX19uYW1lX18gKyAnOiAnICsgc3RyX3ZhbHVlICsgJ1xuJykKKworICAgIGRlZiB0ZXN0X3dpdGhvdXRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBbJ05vbmVcbiddKQorCisgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgZXJyID0gQXNzZXJ0aW9uRXJyb3IoJ1x4ZmYnKQorICAgICAgICBsaW5lcyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZShlcnIpLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsnQXNzZXJ0aW9uRXJyb3I6IFx4ZmZcbiddKQorCisgICAgICAgIGVyciA9IEFzc2VydGlvbkVycm9yKHUnXHhlOScpCisgICAgICAgIGxpbmVzID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seSh0eXBlKGVyciksIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWydBc3NlcnRpb25FcnJvcjogXFx4ZTlcbiddKQorCisKK2NsYXNzIFRyYWNlYmFja0Zvcm1hdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdibGFoJykKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgdHlwZV8sIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICB0cmFjZWJhY2tfZm10ID0gJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycuam9pbih0cmFjZWJhY2suZm9ybWF0X3RiKHRiKSkKKyAgICAgICAgICAgIGZpbGVfID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgdHJhY2ViYWNrX3ByaW50KHRiLCBmaWxlXykKKyAgICAgICAgICAgIHB5dGhvbl9mbXQgID0gZmlsZV8uZ2V0dmFsdWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXJyb3IoInVuYWJsZSB0byBjcmVhdGUgdGVzdCB0cmFjZWJhY2sgc3RyaW5nIikKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IFB5dGhvbiBhbmQgdGhlIHRyYWNlYmFjayBtb2R1bGUgZm9ybWF0IHRoZSBzYW1lIHRoaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrX2ZtdCwgcHl0aG9uX2ZtdCkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgaXMgcHJvcGVybHkgaW5kZW50ZWQuCisgICAgICAgIHRiX2xpbmVzID0gcHl0aG9uX2ZtdC5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGJfbGluZXMpLCAzKQorICAgICAgICBiYW5uZXIsIGxvY2F0aW9uLCBzb3VyY2VfbGluZSA9IHRiX2xpbmVzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYW5uZXIuc3RhcnRzd2l0aCgnVHJhY2ViYWNrJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NhdGlvbi5zdGFydHN3aXRoKCcgIEZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvdXJjZV9saW5lLnN0YXJ0c3dpdGgoJyAgICByYWlzZScpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVHJhY2ViYWNrQ2FzZXMsIFRyYWNlYmFja0Zvcm1hdFRlc3RzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RyYW5zZm9ybWVyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdHJhbnNmb3JtZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5MWFjNAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3RyYW5zZm9ybWVyLnB5CkBAIC0wLDAgKzEsMzggQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTaWxlbmNlIFB5M2sgd2FybmluZwordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NvbXBpbGVyJywgZGVwcmVjYXRlZD1UcnVlKQorZnJvbSBjb21waWxlciBpbXBvcnQgdHJhbnNmb3JtZXIsIGFzdAorZnJvbSBjb21waWxlciBpbXBvcnQgY29tcGlsZQorCitjbGFzcyBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdE11bHRpcGxlTEhTKHNlbGYpOgorICAgICAgICAiIiIgVGVzdCBtdWx0aXBsZSB0YXJnZXRzIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZS4gIiIiCisKKyAgICAgICAgc25pcHBldHMgPSBbJ2EsIGIgPSAxLCAyJywKKyAgICAgICAgICAgICAgICAgICAgJyhhLCBiKSA9IDEsIDInLAorICAgICAgICAgICAgICAgICAgICAnKChhLCBiKSwgYykgPSAoMSwgMiksIDMnXQorCisgICAgICAgIGZvciBzIGluIHNuaXBwZXRzOgorICAgICAgICAgICAgYSA9IHRyYW5zZm9ybWVyLnBhcnNlKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgYXN0Lk1vZHVsZSkKKyAgICAgICAgICAgIGNoaWxkMSA9IGEuZ2V0Q2hpbGROb2RlcygpWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2hpbGQxLCBhc3QuU3RtdCkKKyAgICAgICAgICAgIGNoaWxkMiA9IGNoaWxkMS5nZXRDaGlsZE5vZGVzKClbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjaGlsZDIsIGFzdC5Bc3NpZ24pCisKKyAgICAgICAgICAgICMgVGhpcyBhY3R1YWxseSB0ZXN0cyB0aGUgY29tcGlsZXIsIGJ1dCBpdCdzIGEgd2F5IHRvIGFzc3VyZSB0aGUgYXN0CisgICAgICAgICAgICAjIGlzIGNvcnJlY3QKKyAgICAgICAgICAgIGMgPSBjb21waWxlKHMsICc8c3RyaW5nPicsICdzaW5nbGUnKQorICAgICAgICAgICAgdmFscyA9IHt9CisgICAgICAgICAgICBleGVjIGMgaW4gdmFscworICAgICAgICAgICAgYXNzZXJ0IHZhbHNbJ2EnXSA9PSAxCisgICAgICAgICAgICBhc3NlcnQgdmFsc1snYiddID09IDIKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdHRrX2d1aW9ubHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzNjhiZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5CkBAIC0wLDAgKzEsNDMgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIFNraXAgdGhpcyB0ZXN0IGlmIF90a2ludGVyIHdhc24ndCBidWlsdC4KK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGtpbnRlcicpCisKK3RoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitsaWJfdGtfdGVzdCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4odGhpc19kaXIsIG9zLnBhdGgucGFyZGlyLAorICAgICdsaWItdGsnLCAndGVzdCcpKQorCit3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICBpbXBvcnQgcnVudGt0ZXN0cworCisjIFNraXAgdGVzdCBpZiB0ayBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQuCitydW50a3Rlc3RzLmNoZWNrX3RrX2F2YWlsYWJpbGl0eSgpCisKK2ltcG9ydCB0dGsKK2Zyb20gX3RraW50ZXIgaW1wb3J0IFRjbEVycm9yCisKK3RyeToKKyAgICB0dGsuQnV0dG9uKCkKK2V4Y2VwdCBUY2xFcnJvciwgbXNnOgorICAgICMgYXNzdW1pbmcgdHRrIGlzIG5vdCBhdmFpbGFibGUKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgidHRrIG5vdCBhdmFpbGFibGU6ICVzIiAlIG1zZykKKworZGVmIHRlc3RfbWFpbihlbmFibGVfZ3VpPUZhbHNlKToKKyAgICBpZiBlbmFibGVfZ3VpOgorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyBpcyBOb25lOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCisgICAgICAgIGVsaWYgJ2d1aScgbm90IGluIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMuYXBwZW5kKCdndWknKQorCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRGlyc09uU3lzUGF0aChsaWJfdGtfdGVzdCk6CisgICAgICAgIGZyb20gdGVzdF90dGsuc3VwcG9ydCBpbXBvcnQgZ2V0X3RrX3Jvb3QKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgICAgICAqcnVudGt0ZXN0cy5nZXRfdGVzdHModGV4dD1GYWxzZSwgcGFja2FnZXM9Wyd0ZXN0X3R0ayddKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGdldF90a19yb290KCkuZGVzdHJveSgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKGVuYWJsZV9ndWk9VHJ1ZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3R0a190ZXh0b25seS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3R0a190ZXh0b25seS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDkyMDQzCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdHRrX3RleHRvbmx5LnB5CkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBvcworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTa2lwIHRoaXMgdGVzdCBpZiBfdGtpbnRlciBkb2VzIG5vdCBleGlzdC4KK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGtpbnRlcicpCisKK3RoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitsaWJfdGtfdGVzdCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4odGhpc19kaXIsICcuLicsICdsaWItdGsnLCAndGVzdCcpKQorCit3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICBpbXBvcnQgcnVudGt0ZXN0cworCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRGlyc09uU3lzUGF0aChsaWJfdGtfdGVzdCk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICAqcnVudGt0ZXN0cy5nZXRfdGVzdHMoZ3VpPUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdHRrJ10pKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90dXBsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMzA4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90dXBsZS5weQpAQCAtMCwwICsxLDE2MSBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHNlcV90ZXN0cworCitpbXBvcnQgZ2MKKworY2xhc3MgVHVwbGVUZXN0KHNlcV90ZXN0cy5Db21tb25UZXN0KToKKyAgICB0eXBlMnRlc3QgPSB0dXBsZQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JzKHNlbGYpOgorICAgICAgICBzdXBlcihUdXBsZVRlc3QsIHNlbGYpLnRlc3RfY29uc3RydWN0b3JzKCkKKyAgICAgICAgIyBjYWxsaW5nIGJ1aWx0LWluIHR5cGVzIHdpdGhvdXQgYXJndW1lbnQgbXVzdCByZXR1cm4gZW1wdHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSgpLCAoKSkKKyAgICAgICAgdDBfMyA9ICgwLCAxLCAyLCAzKQorICAgICAgICB0MF8zX2JpcyA9IHR1cGxlKHQwXzMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MF8zIGlzIHQwXzNfYmlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFtdKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzAsIDEsIDIsIDNdKSwgKDAsIDEsIDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKCcnKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoJ3NwYW0nKSwgKCdzJywgJ3AnLCAnYScsICdtJykpCisKKyAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKKyAgICAgICAgc3VwZXIoVHVwbGVUZXN0LCBzZWxmKS50ZXN0X3RydXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCg0MiwgKSkKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgc3VwZXIoVHVwbGVUZXN0LCBzZWxmKS50ZXN0X2xlbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKCgpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oKDAsKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKCgwLCAxLCAyKSksIDMpCisKKyAgICBkZWYgdGVzdF9pYWRkKHNlbGYpOgorICAgICAgICBzdXBlcihUdXBsZVRlc3QsIHNlbGYpLnRlc3RfaWFkZCgpCisgICAgICAgIHUgPSAoMCwgMSkKKyAgICAgICAgdTIgPSB1CisgICAgICAgIHUgKz0gKDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1IGlzIG5vdCB1MikKKworICAgIGRlZiB0ZXN0X2ltdWwoc2VsZik6CisgICAgICAgIHN1cGVyKFR1cGxlVGVzdCwgc2VsZikudGVzdF9pbXVsKCkKKyAgICAgICAgdSA9ICgwLCAxKQorICAgICAgICB1MiA9IHUKKyAgICAgICAgdSAqPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1IGlzIG5vdCB1MikKKworICAgIGRlZiB0ZXN0X3R1cGxlcmVzaXplYnVnKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYSBzcGVjaWZpYyBidWcgaW4gX1B5VHVwbGVfUmVzaXplKCkgaXMgc3F1YXNoZWQuCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh0dXBsZShmKCkpKSwgcmFuZ2UoMTAwMCkpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICAjIFNlZSBTRiBidWcgOTQyOTUyOiAgV2Vha25lc3MgaW4gdHVwbGUgaGFzaAorICAgICAgICAjIFRoZSBoYXNoIHNob3VsZDoKKyAgICAgICAgIyAgICAgIGJlIG5vbi1jb21tdXRhdGl2ZQorICAgICAgICAjICAgICAgc2hvdWxkIHNwcmVhZC1vdXQgY2xvc2VseSBzcGFjZWQgdmFsdWVzCisgICAgICAgICMgICAgICBzaG91bGQgbm90IGV4aGliaXQgY2FuY2VsbGF0aW9uIGluIHR1cGxlcyBsaWtlICh4LCh4LHkpKQorICAgICAgICAjICAgICAgc2hvdWxkIGJlIGRpc3RpbmN0IGZyb20gZWxlbWVudCBoYXNoZXM6ICBoYXNoKHgpIT1oYXNoKCh4LCkpCisgICAgICAgICMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aG9zZSBjYXNlcy4KKyAgICAgICAgIyBGb3IgYSBwdXJlIHJhbmRvbSBoYXNoIGFuZCBOPTUwLCB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIG9jY3VwaWVkCisgICAgICAgICMgICAgICBidWNrZXRzIHdoZW4gdG9zc2luZyAyNTIsNjAwIGJhbGxzIGludG8gMioqMzIgYnVja2V0cworICAgICAgICAjICAgICAgaXMgMjUyLDU5Mi42LCBvciBhYm91dCA3LjQgZXhwZWN0ZWQgY29sbGlzaW9ucy4gIFRoZQorICAgICAgICAjICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIGlzIDIuNzMuICBPbiBhIGJveCB3aXRoIDY0LWJpdCBoYXNoCisgICAgICAgICMgICAgICBjb2Rlcywgbm8gY29sbGlzaW9ucyBhcmUgZXhwZWN0ZWQuICBIZXJlIHdlIGFjY2VwdCBubworICAgICAgICAjICAgICAgbW9yZSB0aGFuIDE1IGNvbGxpc2lvbnMuICBBbnkgd29yc2UgYW5kIHRoZSBoYXNoIGZ1bmN0aW9uCisgICAgICAgICMgICAgICBpcyBzb3JlbHkgc3VzcGVjdC4KKworICAgICAgICBOPTUwCisgICAgICAgIGJhc2UgPSByYW5nZShOKQorICAgICAgICB4cCA9IFsoaSwgaikgZm9yIGkgaW4gYmFzZSBmb3IgaiBpbiBiYXNlXQorICAgICAgICBpbnBzID0gYmFzZSArIFsoaSwgaikgZm9yIGkgaW4gYmFzZSBmb3IgaiBpbiB4cF0gKyBcCisgICAgICAgICAgICAgICAgICAgICBbKGksIGopIGZvciBpIGluIHhwIGZvciBqIGluIGJhc2VdICsgeHAgKyB6aXAoYmFzZSkKKyAgICAgICAgY29sbGlzaW9ucyA9IGxlbihpbnBzKSAtIGxlbihzZXQobWFwKGhhc2gsIGlucHMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbGxpc2lvbnMgPD0gMTUpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBsMCA9IHR1cGxlKCkKKyAgICAgICAgbDIgPSAoMCwgMSwgMikKKyAgICAgICAgYTAgPSBzZWxmLnR5cGUydGVzdChsMCkKKyAgICAgICAgYTIgPSBzZWxmLnR5cGUydGVzdChsMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhMCksIHJlcHIobDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhMiksIHJlcHIobDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYTApLCAiKCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYTIpLCAiKDAsIDEsIDIpIikKKworICAgIGRlZiBfbm90X3RyYWNrZWQoc2VsZiwgdCk6CisgICAgICAgICMgTmVzdGVkIHR1cGxlcyBjYW4gdGFrZSBzZXZlcmFsIGNvbGxlY3Rpb25zIHRvIHVudHJhY2sKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQodCksIHQpCisKKyAgICBkZWYgX3RyYWNrZWQoc2VsZiwgdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKHQpLCB0KQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKHQpLCB0KQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF90cmFja19saXRlcmFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IEdDLW9wdGltaXphdGlvbiBvZiB0dXBsZSBsaXRlcmFscworICAgICAgICB4LCB5LCB6ID0gMS41LCAiYSIsIFtdCisKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoKCkpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKCgxLCkpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKCgxLCAyKSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoKDEsIDIsICJhIikpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKCgxLCAyLCAoTm9uZSwgVHJ1ZSwgRmFsc2UsICgpKSwgaW50KSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoKG9iamVjdCgpLCkpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKCgoMSwgeCksIHksICgyLCAzKSkpCisKKyAgICAgICAgIyBUdXBsZXMgd2l0aCBtdXRhYmxlIGVsZW1lbnRzIGFyZSBhbHdheXMgdHJhY2tlZCwgZXZlbiBpZiB0aG9zZQorICAgICAgICAjIGVsZW1lbnRzIGFyZSBub3QgdHJhY2tlZCByaWdodCBub3cuCisgICAgICAgIHNlbGYuX3RyYWNrZWQoKFtdLCkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQoKFsxXSwpKQorICAgICAgICBzZWxmLl90cmFja2VkKCh7fSwpKQorICAgICAgICBzZWxmLl90cmFja2VkKChzZXQoKSwpKQorICAgICAgICBzZWxmLl90cmFja2VkKCh4LCB5LCB6KSkKKworICAgIGRlZiBjaGVja190cmFja19keW5hbWljKHNlbGYsIHRwLCBhbHdheXNfdHJhY2spOgorICAgICAgICB4LCB5LCB6ID0gMS41LCAiYSIsIFtdCisKKyAgICAgICAgY2hlY2sgPSBzZWxmLl90cmFja2VkIGlmIGFsd2F5c190cmFjayBlbHNlIHNlbGYuX25vdF90cmFja2VkCisgICAgICAgIGNoZWNrKHRwKCkpCisgICAgICAgIGNoZWNrKHRwKFtdKSkKKyAgICAgICAgY2hlY2sodHAoc2V0KCkpKQorICAgICAgICBjaGVjayh0cChbMSwgeCwgeV0pKQorICAgICAgICBjaGVjayh0cChvYmogZm9yIG9iaiBpbiBbMSwgeCwgeV0pKQorICAgICAgICBjaGVjayh0cChzZXQoWzEsIHgsIHldKSkpCisgICAgICAgIGNoZWNrKHRwKHR1cGxlKFtvYmpdKSBmb3Igb2JqIGluIFsxLCB4LCB5XSkpCisgICAgICAgIGNoZWNrKHR1cGxlKHRwKFtvYmpdKSBmb3Igb2JqIGluIFsxLCB4LCB5XSkpCisKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh0cChbel0pKQorICAgICAgICBzZWxmLl90cmFja2VkKHRwKFtbeCwgeV1dKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh0cChbe3g6IHl9XSkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQodHAob2JqIGZvciBvYmogaW4gW3gsIHksIHpdKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh0cCh0dXBsZShbb2JqXSkgZm9yIG9iaiBpbiBbeCwgeSwgel0pKQorICAgICAgICBzZWxmLl90cmFja2VkKHR1cGxlKHRwKFtvYmpdKSBmb3Igb2JqIGluIFt4LCB5LCB6XSkpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3RyYWNrX2R5bmFtaWMoc2VsZik6CisgICAgICAgICMgVGVzdCBHQy1vcHRpbWl6YXRpb24gb2YgZHluYW1pY2FsbHkgY29uc3RydWN0ZWQgdHVwbGVzLgorICAgICAgICBzZWxmLmNoZWNrX3RyYWNrX2R5bmFtaWModHVwbGUsIEZhbHNlKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF90cmFja19zdWJ0eXBlcyhzZWxmKToKKyAgICAgICAgIyBUdXBsZSBzdWJ0eXBlcyBtdXN0IGFsd2F5cyBiZSB0cmFja2VkCisgICAgICAgIGNsYXNzIE15VHVwbGUodHVwbGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNoZWNrX3RyYWNrX2R5bmFtaWMoTXlUdXBsZSwgVHJ1ZSkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfYnVnNzQ2NihzZWxmKToKKyAgICAgICAgIyBUcnlpbmcgdG8gdW50cmFjayBhbiB1bmZpbmlzaGVkIHR1cGxlIGNvdWxkIGNyYXNoIFB5dGhvbgorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh0dXBsZShnYy5jb2xsZWN0KCkgZm9yIGkgaW4gcmFuZ2UoMTAxKSkpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFR1cGxlVGVzdCkKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3R5cGVjaGVja3MucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90eXBlY2hlY2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZjAxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90eXBlY2hlY2tzLnB5CkBAIC0wLDAgKzEsOTMgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIF9faW5zdGFuY2VjaGVja19fIGFuZCBfX3N1YmNsYXNzY2hlY2tfXy4iIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIEFCQyh0eXBlKToKKworICAgIGRlZiBfX2luc3RhbmNlY2hlY2tfXyhjbHMsIGluc3QpOgorICAgICAgICAiIiJJbXBsZW1lbnQgaXNpbnN0YW5jZShpbnN0LCBjbHMpLiIiIgorICAgICAgICByZXR1cm4gYW55KGNscy5fX3N1YmNsYXNzY2hlY2tfXyhjKQorICAgICAgICAgICAgICAgICAgIGZvciBjIGluIHNldChbdHlwZShpbnN0KSwgaW5zdC5fX2NsYXNzX19dKSkKKworICAgIGRlZiBfX3N1YmNsYXNzY2hlY2tfXyhjbHMsIHN1Yik6CisgICAgICAgICIiIkltcGxlbWVudCBpc3N1YmNsYXNzKHN1YiwgY2xzKS4iIiIKKyAgICAgICAgY2FuZGlkYXRlcyA9IGNscy5fX2RpY3RfXy5nZXQoIl9fc3ViY2xhc3NfXyIsIHNldCgpKSB8IHNldChbY2xzXSkKKyAgICAgICAgcmV0dXJuIGFueShjIGluIGNhbmRpZGF0ZXMgZm9yIGMgaW4gc3ViLm1ybygpKQorCisKK2NsYXNzIEludGVnZXI6CisKKyAgICBfX21ldGFjbGFzc19fID0gQUJDCisKKyAgICBfX3N1YmNsYXNzX18gPSBzZXQoW2ludF0pCisKKworY2xhc3MgU3ViSW50KEludGVnZXIpOgorCisgICAgcGFzcworCisKK2NsYXNzIFR5cGVDaGVja3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0SXNTdWJjbGFzc0ludGVybmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEludGVnZXIuX19zdWJjbGFzc2NoZWNrX18oaW50KSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnRlZ2VyLl9fc3ViY2xhc3NjaGVja19fKGZsb2F0KSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdElzU3ViY2xhc3NCdWlsdGluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoaW50LCBJbnRlZ2VyKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKGludCwgKEludGVnZXIsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhmbG9hdCwgSW50ZWdlciksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoZmxvYXQsIChJbnRlZ2VyLCkpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0SXNJbnN0YW5jZUJ1aWx0aW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgSW50ZWdlciksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgKEludGVnZXIsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSgzLjE0LCBJbnRlZ2VyKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSgzLjE0LCAoSW50ZWdlciwpKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdElzSW5zdGFuY2VBY3R1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShJbnRlZ2VyKCksIEludGVnZXIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoSW50ZWdlcigpLCAoSW50ZWdlciwpKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0SXNTdWJjbGFzc0FjdHVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKEludGVnZXIsIEludGVnZXIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoSW50ZWdlciwgKEludGVnZXIsKSksIFRydWUpCisKKyAgICBkZWYgdGVzdFN1YmNsYXNzQmVoYXZpb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhTdWJJbnQsIEludGVnZXIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoU3ViSW50LCAoSW50ZWdlciwpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKFN1YkludCwgU3ViSW50KSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKFN1YkludCwgKFN1YkludCwpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKEludGVnZXIsIFN1YkludCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoSW50ZWdlciwgKFN1YkludCwpKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhpbnQsIFN1YkludCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoaW50LCAoU3ViSW50LCkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKFN1YkludCgpLCBJbnRlZ2VyKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKFN1YkludCgpLCAoSW50ZWdlciwpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKFN1YkludCgpLCBTdWJJbnQpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoU3ViSW50KCksIChTdWJJbnQsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgU3ViSW50KSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgKFN1YkludCwpKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9vbGRzdHlsZShzZWxmKToKKyAgICAgICAgIyBUaGVzZSBzaG91bGQganVzdCBiZSBpZ25vcmVkLgorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgZGVmIF9faW5zdGFuY2VjaGVja19fKHNlbGYsIGluc3QpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBkZWYgX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBjbGFzcyBTdWIoWCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKDMsIFgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShYKCksIFgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhpbnQsIFgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhTdWIsIFgpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFR5cGVDaGVja3NUZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90eXBlcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjZkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF90eXBlcy5weQpAQCAtMCwwICsxLDc1NiBAQAorIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCA2LCBidWlsdC1pbiB0eXBlcworCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGhhdmVfdW5pY29kZSwgcnVuX3dpdGhfbG9jYWxlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19weTNrX3dhcm5pbmdzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2NhbGUKKworY2xhc3MgVHlwZXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90cnV0aF92YWx1ZXMoc2VsZik6CisgICAgICAgIGlmIE5vbmU6IHNlbGYuZmFpbCgnTm9uZSBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQorICAgICAgICBpZiAwOiBzZWxmLmZhaWwoJzAgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJykKKyAgICAgICAgaWYgMEw6IHNlbGYuZmFpbCgnMEwgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJykKKyAgICAgICAgaWYgMC4wOiBzZWxmLmZhaWwoJzAuMCBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQorICAgICAgICBpZiAnJzogc2VsZi5mYWlsKCdcJ1wnIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScpCisgICAgICAgIGlmIG5vdCAxOiBzZWxmLmZhaWwoJzEgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKKyAgICAgICAgaWYgbm90IDFMOiBzZWxmLmZhaWwoJzFMIGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCisgICAgICAgIGlmIG5vdCAxLjA6IHNlbGYuZmFpbCgnMS4wIGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCisgICAgICAgIGlmIG5vdCAneCc6IHNlbGYuZmFpbCgnXCd4XCcgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKKyAgICAgICAgaWYgbm90IHsneCc6IDF9OiBzZWxmLmZhaWwoJ3tcJ3hcJzogMX0gaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKKyAgICAgICAgZGVmIGYoKTogcGFzcworICAgICAgICBjbGFzcyBDOiBwYXNzCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgaWYgbm90IGY6IHNlbGYuZmFpbCgnZiBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3QgQzogc2VsZi5mYWlsKCdDIGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCisgICAgICAgIGlmIG5vdCBzeXM6IHNlbGYuZmFpbCgnc3lzIGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCisgICAgICAgIGlmIG5vdCB4OiBzZWxmLmZhaWwoJ3ggaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKKworICAgIGRlZiB0ZXN0X2Jvb2xlYW5fb3BzKHNlbGYpOgorICAgICAgICBpZiAwIG9yIDA6IHNlbGYuZmFpbCgnMCBvciAwIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScpCisgICAgICAgIGlmIDEgYW5kIDE6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCcxIGFuZCAxIGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCisgICAgICAgIGlmIG5vdCAxOiBzZWxmLmZhaWwoJ25vdCAxIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScpCisKKyAgICBkZWYgdGVzdF9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgaWYgMCA8IDEgPD0gMSA9PSAxID49IDEgPiAwICE9IDE6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdpbnQgY29tcGFyaXNvbnMgZmFpbGVkJykKKyAgICAgICAgaWYgMEwgPCAxTCA8PSAxTCA9PSAxTCA+PSAxTCA+IDBMICE9IDFMOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnbG9uZyBpbnQgY29tcGFyaXNvbnMgZmFpbGVkJykKKyAgICAgICAgaWYgMC4wIDwgMS4wIDw9IDEuMCA9PSAxLjAgPj0gMS4wID4gMC4wICE9IDEuMDogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2Zsb2F0IGNvbXBhcmlzb25zIGZhaWxlZCcpCisgICAgICAgIGlmICcnIDwgJ2EnIDw9ICdhJyA9PSAnYScgPCAnYWJjJyA8ICdhYmQnIDwgJ2InOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnc3RyaW5nIGNvbXBhcmlzb25zIGZhaWxlZCcpCisgICAgICAgIGlmIE5vbmUgaXMgTm9uZTogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2lkZW50aXR5IHRlc3QgZmFpbGVkJykKKworICAgIGRlZiB0ZXN0X2Zsb2F0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAnNVwwJykKKworICAgIGRlZiB0ZXN0X3plcm9fZGl2aXNpb24oc2VsZik6CisgICAgICAgIHRyeTogNS4wIC8gMC4wCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIjUuMCAvIDAuMCBkaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorCisgICAgICAgIHRyeTogNS4wIC8vIDAuMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCI1LjAgLy8gMC4wIGRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCisKKyAgICAgICAgdHJ5OiA1LjAgJSAwLjAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiNS4wICUgMC4wIGRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCisKKyAgICAgICAgdHJ5OiA1IC8gMEwKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiNSAvIDBMIGRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCisKKyAgICAgICAgdHJ5OiA1IC8vIDBMCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIjUgLy8gMEwgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKKworICAgICAgICB0cnk6IDUgJSAwTAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCI1ICUgMEwgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKKworICAgIGRlZiB0ZXN0X251bWVyaWNfdHlwZXMoc2VsZik6CisgICAgICAgIGlmIDAgIT0gMEwgb3IgMCAhPSAwLjAgb3IgMEwgIT0gMC4wOiBzZWxmLmZhaWwoJ21peGVkIGNvbXBhcmlzb25zJykKKyAgICAgICAgaWYgMSAhPSAxTCBvciAxICE9IDEuMCBvciAxTCAhPSAxLjA6IHNlbGYuZmFpbCgnbWl4ZWQgY29tcGFyaXNvbnMnKQorICAgICAgICBpZiAtMSAhPSAtMUwgb3IgLTEgIT0gLTEuMCBvciAtMUwgIT0gLTEuMDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnaW50L2xvbmcvZmxvYXQgdmFsdWUgbm90IGVxdWFsJykKKyAgICAgICAgIyBjYWxsaW5nIGJ1aWx0LWluIHR5cGVzIHdpdGhvdXQgYXJndW1lbnQgbXVzdCByZXR1cm4gMAorICAgICAgICBpZiBpbnQoKSAhPSAwOiBzZWxmLmZhaWwoJ2ludCgpIGRvZXMgbm90IHJldHVybiAwJykKKyAgICAgICAgaWYgbG9uZygpICE9IDBMOiBzZWxmLmZhaWwoJ2xvbmcoKSBkb2VzIG5vdCByZXR1cm4gMEwnKQorICAgICAgICBpZiBmbG9hdCgpICE9IDAuMDogc2VsZi5mYWlsKCdmbG9hdCgpIGRvZXMgbm90IHJldHVybiAwLjAnKQorICAgICAgICBpZiBpbnQoMS45KSA9PSAxID09IGludCgxLjEpIGFuZCBpbnQoLTEuMSkgPT0gLTEgPT0gaW50KC0xLjkpOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnaW50KCkgZG9lcyBub3Qgcm91bmQgcHJvcGVybHknKQorICAgICAgICBpZiBsb25nKDEuOSkgPT0gMUwgPT0gbG9uZygxLjEpIGFuZCBsb25nKC0xLjEpID09IC0xTCA9PSBsb25nKC0xLjkpOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnbG9uZygpIGRvZXMgbm90IHJvdW5kIHByb3Blcmx5JykKKyAgICAgICAgaWYgZmxvYXQoMSkgPT0gMS4wIGFuZCBmbG9hdCgtMSkgPT0gLTEuMCBhbmQgZmxvYXQoMCkgPT0gMC4wOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnZmxvYXQoKSBkb2VzIG5vdCB3b3JrIHByb3Blcmx5JykKKworICAgIGRlZiB0ZXN0X2Zsb2F0X3RvX3N0cmluZyhzZWxmKToKKyAgICAgICAgZGVmIHRlc3QoZiwgcmVzdWx0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Zvcm1hdF9fKCdlJyksIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVlJyAlIGYsIHJlc3VsdCkKKworICAgICAgICAjIHRlc3QgYWxsIDIgZGlnaXQgZXhwb25lbnRzLCBib3RoIHdpdGggX19mb3JtYXRfXyBhbmQgd2l0aAorICAgICAgICAjICAnJScgZm9ybWF0dGluZworICAgICAgICBmb3IgaSBpbiByYW5nZSgtOTksIDEwMCk6CisgICAgICAgICAgICB0ZXN0KGZsb2F0KCcxLjVlJytzdHIoaSkpLCAnMS41MDAwMDBlezA6KzAzZH0nLmZvcm1hdChpKSkKKworICAgICAgICAjIHRlc3Qgc29tZSAzIGRpZ2l0IGV4cG9uZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEuNWUxMDAuX19mb3JtYXRfXygnZScpLCAnMS41MDAwMDBlKzEwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVlJyAlIDEuNWUxMDAsICcxLjUwMDAwMGUrMTAwJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEuNWUxMDEuX19mb3JtYXRfXygnZScpLCAnMS41MDAwMDBlKzEwMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVlJyAlIDEuNWUxMDEsICcxLjUwMDAwMGUrMTAxJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEuNWUtMTAwLl9fZm9ybWF0X18oJ2UnKSwgJzEuNTAwMDAwZS0xMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclZScgJSAxLjVlLTEwMCwgJzEuNTAwMDAwZS0xMDAnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMS41ZS0xMDEuX19mb3JtYXRfXygnZScpLCAnMS41MDAwMDBlLTEwMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVlJyAlIDEuNWUtMTAxLCAnMS41MDAwMDBlLTEwMScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWcnICUgMS4wLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyUjZycgJSAxLjAsICcxLjAwMDAwJykKKworICAgIGRlZiB0ZXN0X25vcm1hbF9pbnRlZ2VycyhzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhlIGZpcnN0IDI1NiBpbnRlZ2VycyBhcmUgc2hhcmVkCisgICAgICAgIGEgPSAyNTYKKyAgICAgICAgYiA9IDEyOCoyCisgICAgICAgIGlmIGEgaXMgbm90IGI6IHNlbGYuZmFpbCgnMjU2IGlzIG5vdCBzaGFyZWQnKQorICAgICAgICBpZiAxMiArIDI0ICE9IDM2OiBzZWxmLmZhaWwoJ2ludCBvcCcpCisgICAgICAgIGlmIDEyICsgKC0yNCkgIT0gLTEyOiBzZWxmLmZhaWwoJ2ludCBvcCcpCisgICAgICAgIGlmICgtMTIpICsgMjQgIT0gMTI6IHNlbGYuZmFpbCgnaW50IG9wJykKKyAgICAgICAgaWYgKC0xMikgKyAoLTI0KSAhPSAtMzY6IHNlbGYuZmFpbCgnaW50IG9wJykKKyAgICAgICAgaWYgbm90IDEyIDwgMjQ6IHNlbGYuZmFpbCgnaW50IG9wJykKKyAgICAgICAgaWYgbm90IC0yNCA8IC0xMjogc2VsZi5mYWlsKCdpbnQgb3AnKQorICAgICAgICAjIFRlc3QgZm9yIGEgcGFydGljdWxhciBidWcgaW4gaW50ZWdlciBtdWx0aXBseQorICAgICAgICB4c2l6ZSwgeXNpemUsIHpzaXplID0gMjM4LCAzNTYsIDQKKyAgICAgICAgaWYgbm90ICh4c2l6ZSp5c2l6ZSp6c2l6ZSA9PSB6c2l6ZSp4c2l6ZSp5c2l6ZSA9PSAzMzg5MTIpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdpbnQgbXVsIGNvbW11dGF0aXZpdHknKQorICAgICAgICAjIEFuZCBhbm90aGVyLgorICAgICAgICBtID0gLXN5cy5tYXhpbnQgLSAxCisgICAgICAgIGZvciBkaXZpc29yIGluIDEsIDIsIDQsIDgsIDE2LCAzMjoKKyAgICAgICAgICAgIGogPSBtIC8vIGRpdmlzb3IKKyAgICAgICAgICAgIHByb2QgPSBkaXZpc29yICogagorICAgICAgICAgICAgaWYgcHJvZCAhPSBtOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIgKiAlciA9PSAlciAhPSAlciIgJSAoZGl2aXNvciwgaiwgcHJvZCwgbSkpCisgICAgICAgICAgICBpZiB0eXBlKHByb2QpIGlzIG5vdCBpbnQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0eXBlKHByb2QpIHRvIGJlIGludCwgbm90ICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUocHJvZCkpCisgICAgICAgICMgQ2hlY2sgZm9yIGV4cGVjdGVkICogb3ZlcmZsb3cgdG8gbG9uZy4KKyAgICAgICAgZm9yIGRpdmlzb3IgaW4gMSwgMiwgNCwgOCwgMTYsIDMyOgorICAgICAgICAgICAgaiA9IG0gLy8gZGl2aXNvciAtIDEKKyAgICAgICAgICAgIHByb2QgPSBkaXZpc29yICogagorICAgICAgICAgICAgaWYgdHlwZShwcm9kKSBpcyBub3QgbG9uZzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIHR5cGUoJXIpIHRvIGJlIGxvbmcsIG5vdCAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZCwgdHlwZShwcm9kKSkpCisgICAgICAgICMgQ2hlY2sgZm9yIGV4cGVjdGVkICogb3ZlcmZsb3cgdG8gbG9uZy4KKyAgICAgICAgbSA9IHN5cy5tYXhpbnQKKyAgICAgICAgZm9yIGRpdmlzb3IgaW4gMSwgMiwgNCwgOCwgMTYsIDMyOgorICAgICAgICAgICAgaiA9IG0gLy8gZGl2aXNvciArIDEKKyAgICAgICAgICAgIHByb2QgPSBkaXZpc29yICogagorICAgICAgICAgICAgaWYgdHlwZShwcm9kKSBpcyBub3QgbG9uZzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIHR5cGUoJXIpIHRvIGJlIGxvbmcsIG5vdCAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZCwgdHlwZShwcm9kKSkpCisKKyAgICBkZWYgdGVzdF9sb25nX2ludGVnZXJzKHNlbGYpOgorICAgICAgICBpZiAxMkwgKyAyNEwgIT0gMzZMOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICBpZiAxMkwgKyAoLTI0TCkgIT0gLTEyTDogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgaWYgKC0xMkwpICsgMjRMICE9IDEyTDogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgaWYgKC0xMkwpICsgKC0yNEwpICE9IC0zNkw6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIGlmIG5vdCAxMkwgPCAyNEw6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIGlmIG5vdCAtMjRMIDwgLTEyTDogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgeCA9IHN5cy5tYXhpbnQKKyAgICAgICAgaWYgaW50KGxvbmcoeCkpICE9IHg6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIHRyeTogeSA9IGludChsb25nKHgpKzFMKQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeSwgbG9uZyk6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIHggPSAteAorICAgICAgICBpZiBpbnQobG9uZyh4KSkgIT0geDogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgeCA9IHgtMQorICAgICAgICBpZiBpbnQobG9uZyh4KSkgIT0geDogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgdHJ5OiB5ID0gaW50KGxvbmcoeCktMUwpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh5LCBsb25nKTogc2VsZi5mYWlsKCdsb25nIG9wJykKKworICAgICAgICB0cnk6IDUgPDwgLTUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdpbnQgbmVnYXRpdmUgc2hpZnQgPDwnKQorCisgICAgICAgIHRyeTogNUwgPDwgLTVMCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnbG9uZyBuZWdhdGl2ZSBzaGlmdCA8PCcpCisKKyAgICAgICAgdHJ5OiA1ID4+IC01CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnaW50IG5lZ2F0aXZlIHNoaWZ0ID4+JykKKworICAgICAgICB0cnk6IDVMID4+IC01TAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcgbmVnYXRpdmUgc2hpZnQgPj4nKQorCisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICBpZiAxMi4wICsgMjQuMCAhPSAzNi4wOiBzZWxmLmZhaWwoJ2Zsb2F0IG9wJykKKyAgICAgICAgaWYgMTIuMCArICgtMjQuMCkgIT0gLTEyLjA6IHNlbGYuZmFpbCgnZmxvYXQgb3AnKQorICAgICAgICBpZiAoLTEyLjApICsgMjQuMCAhPSAxMi4wOiBzZWxmLmZhaWwoJ2Zsb2F0IG9wJykKKyAgICAgICAgaWYgKC0xMi4wKSArICgtMjQuMCkgIT0gLTM2LjA6IHNlbGYuZmFpbCgnZmxvYXQgb3AnKQorICAgICAgICBpZiBub3QgMTIuMCA8IDI0LjA6IHNlbGYuZmFpbCgnZmxvYXQgb3AnKQorICAgICAgICBpZiBub3QgLTI0LjAgPCAtMTIuMDogc2VsZi5mYWlsKCdmbG9hdCBvcCcpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdzKHNlbGYpOgorICAgICAgICBpZiBsZW4oJycpICE9IDA6IHNlbGYuZmFpbCgnbGVuKFwnXCcpJykKKyAgICAgICAgaWYgbGVuKCdhJykgIT0gMTogc2VsZi5mYWlsKCdsZW4oXCdhXCcpJykKKyAgICAgICAgaWYgbGVuKCdhYmNkZWYnKSAhPSA2OiBzZWxmLmZhaWwoJ2xlbihcJ2FiY2RlZlwnKScpCisgICAgICAgIGlmICd4eXonICsgJ2FiY2RlJyAhPSAneHl6YWJjZGUnOiBzZWxmLmZhaWwoJ3N0cmluZyBjb25jYXRlbmF0aW9uJykKKyAgICAgICAgaWYgJ3h5eicqMyAhPSAneHl6eHl6eHl6Jzogc2VsZi5mYWlsKCdzdHJpbmcgcmVwZXRpdGlvbiAqMycpCisgICAgICAgIGlmIDAqJ2FiY2RlJyAhPSAnJzogc2VsZi5mYWlsKCdzdHJpbmcgcmVwZXRpdGlvbiAwKicpCisgICAgICAgIGlmIG1pbignYWJjJykgIT0gJ2EnIG9yIG1heCgnYWJjJykgIT0gJ2MnOiBzZWxmLmZhaWwoJ21pbi9tYXggc3RyaW5nJykKKyAgICAgICAgaWYgJ2EnIGluICdhYmMnIGFuZCAnYicgaW4gJ2FiYycgYW5kICdjJyBpbiAnYWJjJyBhbmQgJ2QnIG5vdCBpbiAnYWJjJzogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2luL25vdCBpbiBzdHJpbmcnKQorICAgICAgICB4ID0gJ3gnKjEwMworICAgICAgICBpZiAnJXMhJyV4ICE9IHgrJyEnOiBzZWxmLmZhaWwoJ25hc3R5IHN0cmluZyBmb3JtYXR0aW5nIGJ1ZycpCisKKyAgICAgICAgI2V4dGVuZGVkIHNsaWNlcyBmb3Igc3RyaW5ncworICAgICAgICBhID0gJzAxMjM0NTY3ODknCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Ol0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6OjJdLCAnMDI0NjgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTo6Ml0sICcxMzU3OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Oi0xXSwnOTg3NjU0MzIxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Oi0yXSwgJzk3NTMxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzM6Oi0yXSwgJzMxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xMDA6MTAwOl0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxMDA6LTEwMDotMV0sIGFbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMTAwTDoxMDBMOjJMXSwgJzAyNDY4JykKKworICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBhID0gdW5pY29kZSgnMDEyMzQ1Njc4OScsICdhc2NpaScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjpdLCBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo6Ml0sIHVuaWNvZGUoJzAyNDY4JywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTo6Ml0sIHVuaWNvZGUoJzEzNTc5JywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjotMV0sIHVuaWNvZGUoJzk4NzY1NDMyMTAnLCAnYXNjaWknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Oi0yXSwgdW5pY29kZSgnOTc1MzEnLCAnYXNjaWknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVszOjotMl0sIHVuaWNvZGUoJzMxJywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTEwMDoxMDA6XSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxMDA6LTEwMDotMV0sIGFbOjotMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTEwMEw6MTAwTDoyTF0sIHVuaWNvZGUoJzAyNDY4JywgJ2FzY2lpJykpCisKKworICAgIGRlZiB0ZXN0X3R5cGVfZnVuY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZSwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlLCAxLCAyLCAzLCA0KQorCisgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmZmVyLCAnYXNkZicsIC0xKQorICAgICAgICBjbXAoYnVmZmVyKCJhYmMiKSwgYnVmZmVyKCJkZWYiKSkgIyB1c2VkIHRvIHJhaXNlIGEgd2FybmluZzogdHBfY29tcGFyZSBkaWRuJ3QgcmV0dXJuIC0xLCAwLCBvciAxCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBidWZmZXIsIE5vbmUpCisKKyAgICAgICAgYSA9IGJ1ZmZlcignYXNkZicpCisgICAgICAgIGhhc2goYSkKKyAgICAgICAgYiA9IGEgKiA1CisgICAgICAgIGlmIGEgPT0gYjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYnVmZmVycyBzaG91bGQgbm90IGJlIGVxdWFsJykKKyAgICAgICAgaWYgc3RyKGIpICE9ICgnYXNkZicgKiA1KToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgncmVwZWF0ZWQgYnVmZmVyIGhhcyB3cm9uZyBjb250ZW50JykKKyAgICAgICAgaWYgc3RyKGEgKiAwKSAhPSAnJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgncmVwZWF0ZWQgYnVmZmVyIHplcm8gdGltZXMgaGFzIHdyb25nIGNvbnRlbnQnKQorICAgICAgICBpZiBzdHIoYSArIGJ1ZmZlcignZGVmJykpICE9ICdhc2RmZGVmJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnY29uY2F0ZW5hdGlvbiBvZiBidWZmZXJzIHlpZWxkcyB3cm9uZyBjb250ZW50JykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihhKSkgIT0gJ2FzZGYnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjb21wb3NpbmcgYnVmZmVycyBmYWlsZWQnKQorICAgICAgICBpZiBzdHIoYnVmZmVyKGEsIDIpKSAhPSAnZGYnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdzcGVjaWZ5aW5nIGJ1ZmZlciBvZmZzZXQgZmFpbGVkJykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihhLCAwLCAyKSkgIT0gJ2FzJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnc3BlY2lmeWluZyBidWZmZXIgc2l6ZSBmYWlsZWQnKQorICAgICAgICBpZiBzdHIoYnVmZmVyKGEsIDEsIDIpKSAhPSAnc2QnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdzcGVjaWZ5aW5nIGJ1ZmZlciBvZmZzZXQgYW5kIHNpemUgZmFpbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmZmVyLCBidWZmZXIoJ2FzZGYnLCAxKSwgLTEpCisgICAgICAgIGlmIHN0cihidWZmZXIoYnVmZmVyKCdhc2RmJywgMCwgMiksIDApKSAhPSAnYXMnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjb21wb3NpbmcgbGVuZ3RoLXNwZWNpZmllZCBidWZmZXIgZmFpbGVkJykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihidWZmZXIoJ2FzZGYnLCAwLCAyKSwgMCwgNTAwMCkpICE9ICdhcyc6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2NvbXBvc2luZyBsZW5ndGgtc3BlY2lmaWVkIGJ1ZmZlciBmYWlsZWQnKQorICAgICAgICBpZiBzdHIoYnVmZmVyKGJ1ZmZlcignYXNkZicsIDAsIDIpLCAwLCAtMSkpICE9ICdhcyc6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2NvbXBvc2luZyBsZW5ndGgtc3BlY2lmaWVkIGJ1ZmZlciBmYWlsZWQnKQorICAgICAgICBpZiBzdHIoYnVmZmVyKGJ1ZmZlcignYXNkZicsIDAsIDIpLCAxLCAyKSkgIT0gJ3MnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjb21wb3NpbmcgbGVuZ3RoLXNwZWNpZmllZCBidWZmZXIgZmFpbGVkJykKKworICAgICAgICB0cnk6IGFbMV0gPSAnZycKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoImJ1ZmZlciBhc3NpZ25tZW50IHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgICAgIHRyeTogYVswOjFdID0gJ2cnCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJidWZmZXIgc2xpY2UgYXNzaWdubWVudCBzaG91bGQgcmFpc2UgVHlwZUVycm9yIikKKworICAgICAgICAjIGFycmF5LmFycmF5KCkgcmV0dXJucyBhbiBvYmplY3QgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgYSBjaGFyIGJ1ZmZlciwKKyAgICAgICAgIyBzb21ldGhpbmcgd2hpY2ggaW50KCkgdXNlcyBmb3IgY29udmVyc2lvbi4KKyAgICAgICAgaW1wb3J0IGFycmF5CisgICAgICAgIHRyeTogaW50KGJ1ZmZlcihhcnJheS5hcnJheSgnYycpKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoImNoYXIgYnVmZmVyIChhdCBDIGxldmVsKSBub3Qgd29ya2luZyIpCisKKyAgICBkZWYgdGVzdF9pbnRfX2Zvcm1hdF9fKHNlbGYpOgorICAgICAgICBkZWYgdGVzdChpLCBmb3JtYXRfc3BlYywgcmVzdWx0KToKKyAgICAgICAgICAgICMganVzdCBtYWtlIHN1cmUgSSdtIG5vdCBhY2NpZGVudGFsbHkgY2hlY2tpbmcgbG9uZ3MKKyAgICAgICAgICAgIGFzc2VydCB0eXBlKGkpID09IGludAorICAgICAgICAgICAgYXNzZXJ0IHR5cGUoZm9ybWF0X3NwZWMpID09IHN0cgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpLCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuX19mb3JtYXRfXyh1bmljb2RlKGZvcm1hdF9zcGVjKSksIHJlc3VsdCkKKworICAgICAgICB0ZXN0KDEyMzQ1Njc4OSwgJ2QnLCAnMTIzNDU2Nzg5JykKKyAgICAgICAgdGVzdCgxMjM0NTY3ODksICdkJywgJzEyMzQ1Njc4OScpCisKKyAgICAgICAgdGVzdCgxLCAnYycsICdcMDEnKQorCisgICAgICAgICMgc2lnbiBhbmQgYWxpZ25pbmcgYXJlIGludGVyZGVwZW5kZW50CisgICAgICAgIHRlc3QoMSwgIi0iLCAnMScpCisgICAgICAgIHRlc3QoLTEsICItIiwgJy0xJykKKyAgICAgICAgdGVzdCgxLCAiLTMiLCAnICAxJykKKyAgICAgICAgdGVzdCgtMSwgIi0zIiwgJyAtMScpCisgICAgICAgIHRlc3QoMSwgIiszIiwgJyArMScpCisgICAgICAgIHRlc3QoLTEsICIrMyIsICcgLTEnKQorICAgICAgICB0ZXN0KDEsICIgMyIsICcgIDEnKQorICAgICAgICB0ZXN0KC0xLCAiIDMiLCAnIC0xJykKKyAgICAgICAgdGVzdCgxLCAiICIsICcgMScpCisgICAgICAgIHRlc3QoLTEsICIgIiwgJy0xJykKKworICAgICAgICAjIGhleAorICAgICAgICB0ZXN0KDMsICJ4IiwgIjMiKQorICAgICAgICB0ZXN0KDMsICJYIiwgIjMiKQorICAgICAgICB0ZXN0KDEyMzQsICJ4IiwgIjRkMiIpCisgICAgICAgIHRlc3QoLTEyMzQsICJ4IiwgIi00ZDIiKQorICAgICAgICB0ZXN0KDEyMzQsICI4eCIsICIgICAgIDRkMiIpCisgICAgICAgIHRlc3QoLTEyMzQsICI4eCIsICIgICAgLTRkMiIpCisgICAgICAgIHRlc3QoMTIzNCwgIngiLCAiNGQyIikKKyAgICAgICAgdGVzdCgtMTIzNCwgIngiLCAiLTRkMiIpCisgICAgICAgIHRlc3QoLTMsICJ4IiwgIi0zIikKKyAgICAgICAgdGVzdCgtMywgIlgiLCAiLTMiKQorICAgICAgICB0ZXN0KGludCgnYmUnLCAxNiksICJ4IiwgImJlIikKKyAgICAgICAgdGVzdChpbnQoJ2JlJywgMTYpLCAiWCIsICJCRSIpCisgICAgICAgIHRlc3QoLWludCgnYmUnLCAxNiksICJ4IiwgIi1iZSIpCisgICAgICAgIHRlc3QoLWludCgnYmUnLCAxNiksICJYIiwgIi1CRSIpCisKKyAgICAgICAgIyBvY3RhbAorICAgICAgICB0ZXN0KDMsICJvIiwgIjMiKQorICAgICAgICB0ZXN0KC0zLCAibyIsICItMyIpCisgICAgICAgIHRlc3QoNjUsICJvIiwgIjEwMSIpCisgICAgICAgIHRlc3QoLTY1LCAibyIsICItMTAxIikKKyAgICAgICAgdGVzdCgxMjM0LCAibyIsICIyMzIyIikKKyAgICAgICAgdGVzdCgtMTIzNCwgIm8iLCAiLTIzMjIiKQorICAgICAgICB0ZXN0KDEyMzQsICItbyIsICIyMzIyIikKKyAgICAgICAgdGVzdCgtMTIzNCwgIi1vIiwgIi0yMzIyIikKKyAgICAgICAgdGVzdCgxMjM0LCAiIG8iLCAiIDIzMjIiKQorICAgICAgICB0ZXN0KC0xMjM0LCAiIG8iLCAiLTIzMjIiKQorICAgICAgICB0ZXN0KDEyMzQsICIrbyIsICIrMjMyMiIpCisgICAgICAgIHRlc3QoLTEyMzQsICIrbyIsICItMjMyMiIpCisKKyAgICAgICAgIyBiaW5hcnkKKyAgICAgICAgdGVzdCgzLCAiYiIsICIxMSIpCisgICAgICAgIHRlc3QoLTMsICJiIiwgIi0xMSIpCisgICAgICAgIHRlc3QoMTIzNCwgImIiLCAiMTAwMTEwMTAwMTAiKQorICAgICAgICB0ZXN0KC0xMjM0LCAiYiIsICItMTAwMTEwMTAwMTAiKQorICAgICAgICB0ZXN0KDEyMzQsICItYiIsICIxMDAxMTAxMDAxMCIpCisgICAgICAgIHRlc3QoLTEyMzQsICItYiIsICItMTAwMTEwMTAwMTAiKQorICAgICAgICB0ZXN0KDEyMzQsICIgYiIsICIgMTAwMTEwMTAwMTAiKQorICAgICAgICB0ZXN0KC0xMjM0LCAiIGIiLCAiLTEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgxMjM0LCAiK2IiLCAiKzEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgtMTIzNCwgIitiIiwgIi0xMDAxMTAxMDAxMCIpCisKKyAgICAgICAgIyBhbHRlcm5hdGUgKCMpIGZvcm1hdHRpbmcKKyAgICAgICAgdGVzdCgwLCAiI2IiLCAnMGIwJykKKyAgICAgICAgdGVzdCgwLCAiLSNiIiwgJzBiMCcpCisgICAgICAgIHRlc3QoMSwgIi0jYiIsICcwYjEnKQorICAgICAgICB0ZXN0KC0xLCAiLSNiIiwgJy0wYjEnKQorICAgICAgICB0ZXN0KC0xLCAiLSM1YiIsICcgLTBiMScpCisgICAgICAgIHRlc3QoMSwgIisjNWIiLCAnICswYjEnKQorICAgICAgICB0ZXN0KDEwMCwgIisjYiIsICcrMGIxMTAwMTAwJykKKyAgICAgICAgdGVzdCgxMDAsICIjMDEyYiIsICcwYjAwMDExMDAxMDAnKQorICAgICAgICB0ZXN0KC0xMDAsICIjMDEyYiIsICctMGIwMDExMDAxMDAnKQorCisgICAgICAgIHRlc3QoMCwgIiNvIiwgJzBvMCcpCisgICAgICAgIHRlc3QoMCwgIi0jbyIsICcwbzAnKQorICAgICAgICB0ZXN0KDEsICItI28iLCAnMG8xJykKKyAgICAgICAgdGVzdCgtMSwgIi0jbyIsICctMG8xJykKKyAgICAgICAgdGVzdCgtMSwgIi0jNW8iLCAnIC0wbzEnKQorICAgICAgICB0ZXN0KDEsICIrIzVvIiwgJyArMG8xJykKKyAgICAgICAgdGVzdCgxMDAsICIrI28iLCAnKzBvMTQ0JykKKyAgICAgICAgdGVzdCgxMDAsICIjMDEybyIsICcwbzAwMDAwMDAxNDQnKQorICAgICAgICB0ZXN0KC0xMDAsICIjMDEybyIsICctMG8wMDAwMDAxNDQnKQorCisgICAgICAgIHRlc3QoMCwgIiN4IiwgJzB4MCcpCisgICAgICAgIHRlc3QoMCwgIi0jeCIsICcweDAnKQorICAgICAgICB0ZXN0KDEsICItI3giLCAnMHgxJykKKyAgICAgICAgdGVzdCgtMSwgIi0jeCIsICctMHgxJykKKyAgICAgICAgdGVzdCgtMSwgIi0jNXgiLCAnIC0weDEnKQorICAgICAgICB0ZXN0KDEsICIrIzV4IiwgJyArMHgxJykKKyAgICAgICAgdGVzdCgxMDAsICIrI3giLCAnKzB4NjQnKQorICAgICAgICB0ZXN0KDEwMCwgIiMwMTJ4IiwgJzB4MDAwMDAwMDA2NCcpCisgICAgICAgIHRlc3QoLTEwMCwgIiMwMTJ4IiwgJy0weDAwMDAwMDA2NCcpCisgICAgICAgIHRlc3QoMTIzNDU2LCAiIzAxMngiLCAnMHgwMDAwMDFlMjQwJykKKyAgICAgICAgdGVzdCgtMTIzNDU2LCAiIzAxMngiLCAnLTB4MDAwMDFlMjQwJykKKworICAgICAgICB0ZXN0KDAsICIjWCIsICcwWDAnKQorICAgICAgICB0ZXN0KDAsICItI1giLCAnMFgwJykKKyAgICAgICAgdGVzdCgxLCAiLSNYIiwgJzBYMScpCisgICAgICAgIHRlc3QoLTEsICItI1giLCAnLTBYMScpCisgICAgICAgIHRlc3QoLTEsICItIzVYIiwgJyAtMFgxJykKKyAgICAgICAgdGVzdCgxLCAiKyM1WCIsICcgKzBYMScpCisgICAgICAgIHRlc3QoMTAwLCAiKyNYIiwgJyswWDY0JykKKyAgICAgICAgdGVzdCgxMDAsICIjMDEyWCIsICcwWDAwMDAwMDAwNjQnKQorICAgICAgICB0ZXN0KC0xMDAsICIjMDEyWCIsICctMFgwMDAwMDAwNjQnKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIiMwMTJYIiwgJzBYMDAwMDAxRTI0MCcpCisgICAgICAgIHRlc3QoLTEyMzQ1NiwgIiMwMTJYIiwgJy0wWDAwMDAxRTI0MCcpCisKKyAgICAgICAgIyBpc3N1ZSA1NzgyLCBjb21tYXMgd2l0aCBubyBzcGVjaWZpZXIgdHlwZQorICAgICAgICB0ZXN0KDEyMzQsICcwMTAsJywgJzAwLDAwMSwyMzQnKQorCisgICAgICAgICMgbWFrZSBzdXJlIHRoZXNlIGFyZSBlcnJvcnMKKworICAgICAgICAjIHByZWNpc2lvbiBkaXNhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDMgLl9fZm9ybWF0X18sICIxLjMiKQorICAgICAgICAjIHNpZ24gbm90IGFsbG93ZWQgd2l0aCAnYycKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgMyAuX19mb3JtYXRfXywgIitjIikKKyAgICAgICAgIyBmb3JtYXQgc3BlYyBtdXN0IGJlIHN0cmluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIDMgLl9fZm9ybWF0X18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgMyAuX19mb3JtYXRfXywgMCkKKworICAgICAgICAjIGNhbid0IGhhdmUgJywnIHdpdGggJ2MnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDMgLl9fZm9ybWF0X18sICIsYyIpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCBvbmx5IGludCBhbmQgZmxvYXQgdHlwZSBzcGVjaWZpZXJzIHdvcmsKKyAgICAgICAgZm9yIGZvcm1hdF9zcGVjIGluIChbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnYScpLCBvcmQoJ3onKSsxKV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdBJyksIG9yZCgnWicpKzEpXSk6CisgICAgICAgICAgICBpZiBub3QgZm9ybWF0X3NwZWMgaW4gJ2JjZG94WGVFZkZnR24lJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAwIC5fX2Zvcm1hdF9fLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAxIC5fX2Zvcm1hdF9fLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoLTEpIC5fX2Zvcm1hdF9fLCBmb3JtYXRfc3BlYykKKworICAgICAgICAjIGVuc3VyZSB0aGF0IGZsb2F0IHR5cGUgc3BlY2lmaWVycyB3b3JrOyBmb3JtYXQgY29udmVydHMKKyAgICAgICAgIyAgdGhlIGludCB0byBhIGZsb2F0CisgICAgICAgIGZvciBmb3JtYXRfc3BlYyBpbiAnZUVmRmdHJSc6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gWzAsIDEsIC0xLCAxMDAsIC0xMDAsIDEyMzQ1Njc4OTAsIC0xMjM0NTY3ODkwXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQodmFsdWUpLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpKQorCisgICAgICAgICMgSXNzdWUgNjkwMgorICAgICAgICB0ZXN0KDEyMzQ1NiwgIjA8MjAiLCAnMTIzNDU2MDAwMDAwMDAwMDAwMDAnKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIjE8MjAiLCAnMTIzNDU2MTExMTExMTExMTExMTEnKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIio8MjAiLCAnMTIzNDU2KioqKioqKioqKioqKionKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIjA+MjAiLCAnMDAwMDAwMDAwMDAwMDAxMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIjE+MjAiLCAnMTExMTExMTExMTExMTExMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIio+MjAiLCAnKioqKioqKioqKioqKioxMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIjA9MjAiLCAnMDAwMDAwMDAwMDAwMDAxMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIjE9MjAiLCAnMTExMTExMTExMTExMTExMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIio9MjAiLCAnKioqKioqKioqKioqKioxMjM0NTYnKQorCisgICAgZGVmIHRlc3RfbG9uZ19fZm9ybWF0X18oc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KGksIGZvcm1hdF9zcGVjLCByZXN1bHQpOgorICAgICAgICAgICAgIyBtYWtlIHN1cmUgd2UncmUgbm90IGFjY2lkZW50YWxseSBjaGVja2luZyBpbnRzCisgICAgICAgICAgICBhc3NlcnQgdHlwZShpKSA9PSBsb25nCisgICAgICAgICAgICBhc3NlcnQgdHlwZShmb3JtYXRfc3BlYykgPT0gc3RyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYyksIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5fX2Zvcm1hdF9fKHVuaWNvZGUoZm9ybWF0X3NwZWMpKSwgcmVzdWx0KQorCisgICAgICAgIHRlc3QoMTAqKjEwMCwgJ2QnLCAnMScgKyAnMCcgKiAxMDApCisgICAgICAgIHRlc3QoMTAqKjEwMCsxMDAsICdkJywgJzEnICsgJzAnICogOTcgKyAnMTAwJykKKworICAgICAgICB0ZXN0KDEyMzQ1Njc4OUwsICdkJywgJzEyMzQ1Njc4OScpCisgICAgICAgIHRlc3QoMTIzNDU2Nzg5TCwgJ2QnLCAnMTIzNDU2Nzg5JykKKworICAgICAgICAjIHNpZ24gYW5kIGFsaWduaW5nIGFyZSBpbnRlcmRlcGVuZGVudAorICAgICAgICB0ZXN0KDFMLCAiLSIsICcxJykKKyAgICAgICAgdGVzdCgtMUwsICItIiwgJy0xJykKKyAgICAgICAgdGVzdCgxTCwgIi0zIiwgJyAgMScpCisgICAgICAgIHRlc3QoLTFMLCAiLTMiLCAnIC0xJykKKyAgICAgICAgdGVzdCgxTCwgIiszIiwgJyArMScpCisgICAgICAgIHRlc3QoLTFMLCAiKzMiLCAnIC0xJykKKyAgICAgICAgdGVzdCgxTCwgIiAzIiwgJyAgMScpCisgICAgICAgIHRlc3QoLTFMLCAiIDMiLCAnIC0xJykKKyAgICAgICAgdGVzdCgxTCwgIiAiLCAnIDEnKQorICAgICAgICB0ZXN0KC0xTCwgIiAiLCAnLTEnKQorCisgICAgICAgIHRlc3QoMUwsICdjJywgJ1wwMScpCisKKyAgICAgICAgIyBoZXgKKyAgICAgICAgdGVzdCgzTCwgIngiLCAiMyIpCisgICAgICAgIHRlc3QoM0wsICJYIiwgIjMiKQorICAgICAgICB0ZXN0KDEyMzRMLCAieCIsICI0ZDIiKQorICAgICAgICB0ZXN0KC0xMjM0TCwgIngiLCAiLTRkMiIpCisgICAgICAgIHRlc3QoMTIzNEwsICI4eCIsICIgICAgIDRkMiIpCisgICAgICAgIHRlc3QoLTEyMzRMLCAiOHgiLCAiICAgIC00ZDIiKQorICAgICAgICB0ZXN0KDEyMzRMLCAieCIsICI0ZDIiKQorICAgICAgICB0ZXN0KC0xMjM0TCwgIngiLCAiLTRkMiIpCisgICAgICAgIHRlc3QoLTNMLCAieCIsICItMyIpCisgICAgICAgIHRlc3QoLTNMLCAiWCIsICItMyIpCisgICAgICAgIHRlc3QobG9uZygnYmUnLCAxNiksICJ4IiwgImJlIikKKyAgICAgICAgdGVzdChsb25nKCdiZScsIDE2KSwgIlgiLCAiQkUiKQorICAgICAgICB0ZXN0KC1sb25nKCdiZScsIDE2KSwgIngiLCAiLWJlIikKKyAgICAgICAgdGVzdCgtbG9uZygnYmUnLCAxNiksICJYIiwgIi1CRSIpCisKKyAgICAgICAgIyBvY3RhbAorICAgICAgICB0ZXN0KDNMLCAibyIsICIzIikKKyAgICAgICAgdGVzdCgtM0wsICJvIiwgIi0zIikKKyAgICAgICAgdGVzdCg2NUwsICJvIiwgIjEwMSIpCisgICAgICAgIHRlc3QoLTY1TCwgIm8iLCAiLTEwMSIpCisgICAgICAgIHRlc3QoMTIzNEwsICJvIiwgIjIzMjIiKQorICAgICAgICB0ZXN0KC0xMjM0TCwgIm8iLCAiLTIzMjIiKQorICAgICAgICB0ZXN0KDEyMzRMLCAiLW8iLCAiMjMyMiIpCisgICAgICAgIHRlc3QoLTEyMzRMLCAiLW8iLCAiLTIzMjIiKQorICAgICAgICB0ZXN0KDEyMzRMLCAiIG8iLCAiIDIzMjIiKQorICAgICAgICB0ZXN0KC0xMjM0TCwgIiBvIiwgIi0yMzIyIikKKyAgICAgICAgdGVzdCgxMjM0TCwgIitvIiwgIisyMzIyIikKKyAgICAgICAgdGVzdCgtMTIzNEwsICIrbyIsICItMjMyMiIpCisKKyAgICAgICAgIyBiaW5hcnkKKyAgICAgICAgdGVzdCgzTCwgImIiLCAiMTEiKQorICAgICAgICB0ZXN0KC0zTCwgImIiLCAiLTExIikKKyAgICAgICAgdGVzdCgxMjM0TCwgImIiLCAiMTAwMTEwMTAwMTAiKQorICAgICAgICB0ZXN0KC0xMjM0TCwgImIiLCAiLTEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgxMjM0TCwgIi1iIiwgIjEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgtMTIzNEwsICItYiIsICItMTAwMTEwMTAwMTAiKQorICAgICAgICB0ZXN0KDEyMzRMLCAiIGIiLCAiIDEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgtMTIzNEwsICIgYiIsICItMTAwMTEwMTAwMTAiKQorICAgICAgICB0ZXN0KDEyMzRMLCAiK2IiLCAiKzEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgtMTIzNEwsICIrYiIsICItMTAwMTEwMTAwMTAiKQorCisgICAgICAgICMgbWFrZSBzdXJlIHRoZXNlIGFyZSBlcnJvcnMKKworICAgICAgICAjIHByZWNpc2lvbiBkaXNhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDNMIC5fX2Zvcm1hdF9fLCAiMS4zIikKKyAgICAgICAgIyBzaWduIG5vdCBhbGxvd2VkIHdpdGggJ2MnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDNMIC5fX2Zvcm1hdF9fLCAiK2MiKQorICAgICAgICAjIGZvcm1hdCBzcGVjIG11c3QgYmUgc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgM0wgLl9fZm9ybWF0X18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgM0wgLl9fZm9ybWF0X18sIDApCisgICAgICAgICMgYWx0ZXJuYXRlIHNwZWNpZmllciBpbiB3cm9uZyBwbGFjZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAxTCAuX19mb3JtYXRfXywgIiMrNXgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAxTCAuX19mb3JtYXRfXywgIis1I3giKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgb25seSBpbnQgYW5kIGZsb2F0IHR5cGUgc3BlY2lmaWVycyB3b3JrCisgICAgICAgIGZvciBmb3JtYXRfc3BlYyBpbiAoW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ2EnKSwgb3JkKCd6JykrMSldICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnQScpLCBvcmQoJ1onKSsxKV0pOgorICAgICAgICAgICAgaWYgbm90IGZvcm1hdF9zcGVjIGluICdiY2RveFhlRWZGZ0duJSc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgMEwgLl9fZm9ybWF0X18sIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDFMIC5fX2Zvcm1hdF9fLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoLTFMKSAuX19mb3JtYXRfXywgZm9ybWF0X3NwZWMpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCBmbG9hdCB0eXBlIHNwZWNpZmllcnMgd29yazsgZm9ybWF0IGNvbnZlcnRzCisgICAgICAgICMgIHRoZSBsb25nIHRvIGEgZmxvYXQKKyAgICAgICAgZm9yIGZvcm1hdF9zcGVjIGluICdlRWZGZ0clJzoKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBbMEwsIDFMLCAtMUwsIDEwMEwsIC0xMDBMLCAxMjM0NTY3ODkwTCwgLTEyMzQ1Njc4OTBMXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQodmFsdWUpLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpKQorICAgICAgICAjIElzc3VlIDY5MDIKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiMDwyMCIsICcxMjM0NTYwMDAwMDAwMDAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIjE8MjAiLCAnMTIzNDU2MTExMTExMTExMTExMTEnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIqPDIwIiwgJzEyMzQ1NioqKioqKioqKioqKioqJykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiMD4yMCIsICcwMDAwMDAwMDAwMDAwMDEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIjE+MjAiLCAnMTExMTExMTExMTExMTExMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIqPjIwIiwgJyoqKioqKioqKioqKioqMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiMD0yMCIsICcwMDAwMDAwMDAwMDAwMDEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIjE9MjAiLCAnMTExMTExMTExMTExMTExMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIqPTIwIiwgJyoqKioqKioqKioqKioqMTIzNDU2JykKKworICAgIEBydW5fd2l0aF9sb2NhbGUoJ0xDX05VTUVSSUMnLCAnZW5fVVMuVVRGOCcpCisgICAgZGVmIHRlc3RfZmxvYXRfX2Zvcm1hdF9fbG9jYWxlKHNlbGYpOgorICAgICAgICAjIHRlc3QgbG9jYWxlIHN1cHBvcnQgZm9yIF9fZm9ybWF0X18gY29kZSAnbicKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgtMTAsIDEwKToKKyAgICAgICAgICAgIHggPSAxMjM0NTY3ODkwLjAgKiAoMTAuMCAqKiBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuZm9ybWF0KCclZycsIHgsIGdyb3VwaW5nPVRydWUpLCBmb3JtYXQoeCwgJ24nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLmZvcm1hdCgnJS4xMGcnLCB4LCBncm91cGluZz1UcnVlKSwgZm9ybWF0KHgsICcuMTBuJykpCisKKyAgICBAcnVuX3dpdGhfbG9jYWxlKCdMQ19OVU1FUklDJywgJ2VuX1VTLlVURjgnKQorICAgIGRlZiB0ZXN0X2ludF9fZm9ybWF0X19sb2NhbGUoc2VsZik6CisgICAgICAgICMgdGVzdCBsb2NhbGUgc3VwcG9ydCBmb3IgX19mb3JtYXRfXyBjb2RlICduJyBmb3IgaW50ZWdlcnMKKworICAgICAgICB4ID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDMwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLmZvcm1hdCgnJWQnLCB4LCBncm91cGluZz1UcnVlKSwgZm9ybWF0KHgsICduJykpCisKKyAgICAgICAgICAgICMgbW92ZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHRvIHRlc3QKKyAgICAgICAgICAgIHggPSB4IC8vIDEwCisKKyAgICAgICAgcmZtdCA9ICI+MjBuIgorICAgICAgICBsZm10ID0gIjwyMG4iCisgICAgICAgIGNmbXQgPSAiXjIwbiIKKyAgICAgICAgZm9yIHggaW4gKDEyMzQsIDEyMzQ1LCAxMjM0NTYsIDEyMzQ1NjcsIDEyMzQ1Njc4LCAxMjM0NTY3ODksIDEyMzQ1Njc4OTAsIDEyMzQ1Njc4OTAwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZvcm1hdCgwLCByZm10KSksIGxlbihmb3JtYXQoeCwgcmZtdCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZm9ybWF0KDAsIGxmbXQpKSwgbGVuKGZvcm1hdCh4LCBsZm10KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmb3JtYXQoMCwgY2ZtdCkpLCBsZW4oZm9ybWF0KHgsIGNmbXQpKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X19mb3JtYXRfXyhzZWxmKToKKyAgICAgICAgIyB0aGVzZSBzaG91bGQgYmUgcmV3cml0dGVuIHRvIHVzZSBib3RoIGZvcm1hdCh4LCBzcGVjKSBhbmQKKyAgICAgICAgIyB4Ll9fZm9ybWF0X18oc3BlYykKKworICAgICAgICBkZWYgdGVzdChmLCBmb3JtYXRfc3BlYywgcmVzdWx0KToKKyAgICAgICAgICAgIGFzc2VydCB0eXBlKGYpID09IGZsb2F0CisgICAgICAgICAgICBhc3NlcnQgdHlwZShmb3JtYXRfc3BlYykgPT0gc3RyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuX19mb3JtYXRfXyhmb3JtYXRfc3BlYyksIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Zvcm1hdF9fKHVuaWNvZGUoZm9ybWF0X3NwZWMpKSwgcmVzdWx0KQorCisgICAgICAgIHRlc3QoMC4wLCAnZicsICcwLjAwMDAwMCcpCisKKyAgICAgICAgIyB0aGUgZGVmYXVsdCBpcyAnZycsIGV4Y2VwdCBmb3IgZW1wdHkgZm9ybWF0IHNwZWMKKyAgICAgICAgdGVzdCgwLjAsICcnLCAnMC4wJykKKyAgICAgICAgdGVzdCgwLjAxLCAnJywgJzAuMDEnKQorICAgICAgICB0ZXN0KDAuMDEsICdnJywgJzAuMDEnKQorCisgICAgICAgICMgdGVzdCBmb3IgaXNzdWUgMzQxMQorICAgICAgICB0ZXN0KDEuMjMsICcxJywgJzEuMjMnKQorICAgICAgICB0ZXN0KC0xLjIzLCAnMScsICctMS4yMycpCisgICAgICAgIHRlc3QoMS4yMywgJzFnJywgJzEuMjMnKQorICAgICAgICB0ZXN0KC0xLjIzLCAnMWcnLCAnLTEuMjMnKQorCisgICAgICAgIHRlc3QoIDEuMCwgJyBnJywgJyAxJykKKyAgICAgICAgdGVzdCgtMS4wLCAnIGcnLCAnLTEnKQorICAgICAgICB0ZXN0KCAxLjAsICcrZycsICcrMScpCisgICAgICAgIHRlc3QoLTEuMCwgJytnJywgJy0xJykKKyAgICAgICAgdGVzdCgxLjEyMzRlMjAwLCAnZycsICcxLjEyMzRlKzIwMCcpCisgICAgICAgIHRlc3QoMS4xMjM0ZTIwMCwgJ0cnLCAnMS4xMjM0RSsyMDAnKQorCisKKyAgICAgICAgdGVzdCgxLjAsICdmJywgJzEuMDAwMDAwJykKKworICAgICAgICB0ZXN0KC0xLjAsICdmJywgJy0xLjAwMDAwMCcpCisKKyAgICAgICAgdGVzdCggMS4wLCAnIGYnLCAnIDEuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMS4wLCAnIGYnLCAnLTEuMDAwMDAwJykKKyAgICAgICAgdGVzdCggMS4wLCAnK2YnLCAnKzEuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMS4wLCAnK2YnLCAnLTEuMDAwMDAwJykKKworICAgICAgICAjIFB5dGhvbiB2ZXJzaW9ucyA8PSAyLjYgc3dpdGNoZWQgZnJvbSAnZicgdG8gJ2cnIGZvcm1hdHRpbmcgZm9yCisgICAgICAgICMgdmFsdWVzIGxhcmdlciB0aGFuIDFlNTAuICBObyBsb25nZXIuCisgICAgICAgIGYgPSAxLjEyMzRlOTAKKyAgICAgICAgZm9yIGZtdCBpbiAnZicsICdGJzoKKyAgICAgICAgICAgICMgZG9uJ3QgZG8gYSBkaXJlY3QgZXF1YWxpdHkgY2hlY2ssIHNpbmNlIG9uIHNvbWUKKyAgICAgICAgICAgICMgcGxhdGZvcm1zIG9ubHkgdGhlIGZpcnN0IGZldyBkaWdpdHMgb2YgZHRvYQorICAgICAgICAgICAgIyB3aWxsIGJlIHJlbGlhYmxlCisgICAgICAgICAgICByZXN1bHQgPSBmLl9fZm9ybWF0X18oZm10KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgOTgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstN10sICcuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVzdWx0WzoxMl0sICgnMTEyMzQwMDAwMDAwJywgJzExMjMzOTk5OTk5OScpKQorICAgICAgICBmID0gMS4xMjM0ZTIwMAorICAgICAgICBmb3IgZm10IGluICdmJywgJ0YnOgorICAgICAgICAgICAgcmVzdWx0ID0gZi5fX2Zvcm1hdF9fKGZtdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIDIwOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy03XSwgJy4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihyZXN1bHRbOjEyXSwgKCcxMTIzNDAwMDAwMDAnLCAnMTEyMzM5OTk5OTk5JykpCisKKworICAgICAgICB0ZXN0KCAxLjAsICdlJywgJzEuMDAwMDAwZSswMCcpCisgICAgICAgIHRlc3QoLTEuMCwgJ2UnLCAnLTEuMDAwMDAwZSswMCcpCisgICAgICAgIHRlc3QoIDEuMCwgJ0UnLCAnMS4wMDAwMDBFKzAwJykKKyAgICAgICAgdGVzdCgtMS4wLCAnRScsICctMS4wMDAwMDBFKzAwJykKKyAgICAgICAgdGVzdCgxLjEyMzRlMjAsICdlJywgJzEuMTIzNDAwZSsyMCcpCisgICAgICAgIHRlc3QoMS4xMjM0ZTIwLCAnRScsICcxLjEyMzQwMEUrMjAnKQorCisgICAgICAgICMgTm8gZm9ybWF0IGNvZGUgbWVhbnMgdXNlIGcsIGJ1dCBtdXN0IGhhdmUgYSBkZWNpbWFsCisgICAgICAgICMgYW5kIGEgbnVtYmVyIGFmdGVyIHRoZSBkZWNpbWFsLiAgVGhpcyBpcyB0cmlja3ksIGJlY2F1c2UKKyAgICAgICAgIyBhIHRvdGFseSBlbXB0eSBmb3JtYXQgc3BlY2lmaWVyIG1lYW5zIHNvbWV0aGluZyBlbHNlLgorICAgICAgICAjIFNvLCBqdXN0IHVzZSBhIHNpZ24gZmxhZworICAgICAgICB0ZXN0KDFlMjAwLCAnK2cnLCAnKzFlKzIwMCcpCisgICAgICAgIHRlc3QoMWUyMDAsICcrJywgJysxZSsyMDAnKQorICAgICAgICB0ZXN0KDEuMWUyMDAsICcrZycsICcrMS4xZSsyMDAnKQorICAgICAgICB0ZXN0KDEuMWUyMDAsICcrJywgJysxLjFlKzIwMCcpCisKKyAgICAgICAgdGVzdCgxLjFlMjAwLCAnK2cnLCAnKzEuMWUrMjAwJykKKyAgICAgICAgdGVzdCgxLjFlMjAwLCAnKycsICcrMS4xZSsyMDAnKQorCisgICAgICAgICMgMCBwYWRkaW5nCisgICAgICAgIHRlc3QoMTIzNC4sICcwMTBmJywgJzEyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0LiwgJzAxMWYnLCAnMTIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KDEyMzQuLCAnMDEyZicsICcwMTIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxMWYnLCAnLTEyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNC4sICcwMTJmJywgJy0xMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQuLCAnMDEzZicsICctMDEyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNC4xMjM0MTIzNCwgJzAxM2YnLCAnLTAxMjM0LjEyMzQxMicpCisgICAgICAgIHRlc3QoLTEyMzQ1Ni4xMjM0MTIzNCwgJzAxMS4yZicsICctMDEyMzQ1Ni4xMicpCisKKyAgICAgICAgIyBpc3N1ZSA1NzgyLCBjb21tYXMgd2l0aCBubyBzcGVjaWZpZXIgdHlwZQorICAgICAgICB0ZXN0KDEuMiwgJzAxMCwuMicsICcwLDAwMCwwMDEuMicpCisKKyAgICAgICAgIyAwIHBhZGRpbmcgd2l0aCBjb21tYXMKKyAgICAgICAgdGVzdCgxMjM0LiwgJzAxMSxmJywgJzEsMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNC4sICcwMTIsZicsICcxLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KDEyMzQuLCAnMDEzLGYnLCAnMDEsMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQuLCAnMDEyLGYnLCAnLTEsMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQuLCAnMDEzLGYnLCAnLTEsMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQuLCAnMDE0LGYnLCAnLTAxLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0NS4sICcwMTUsZicsICctMDEyLDM0NS4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0NTYuLCAnMDE2LGYnLCAnLTAsMTIzLDQ1Ni4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0NTYuLCAnMDE3LGYnLCAnLTAsMTIzLDQ1Ni4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0NTYuMTIzNDEyMzQsICcwMTcsZicsICctMCwxMjMsNDU2LjEyMzQxMicpCisgICAgICAgIHRlc3QoLTEyMzQ1Ni4xMjM0MTIzNCwgJzAxMywuMmYnLCAnLTAsMTIzLDQ1Ni4xMicpCisKKyAgICAgICAgICMgJSBmb3JtYXR0aW5nCisgICAgICAgIHRlc3QoLTEuMCwgJyUnLCAnLTEwMC4wMDAwMDAlJykKKworICAgICAgICAjIGZvcm1hdCBzcGVjIG11c3QgYmUgc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgMy4wLl9fZm9ybWF0X18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgMy4wLl9fZm9ybWF0X18sIDApCisKKyAgICAgICAgIyBvdGhlciBmb3JtYXQgc3BlY2lmaWVycyBzaG91bGRuJ3Qgd29yayBvbiBmbG9hdHMsCisgICAgICAgICMgIGluIHBhcnRpY3VsYXIgaW50IHNwZWNpZmllcnMKKyAgICAgICAgZm9yIGZvcm1hdF9zcGVjIGluIChbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnYScpLCBvcmQoJ3onKSsxKV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdBJyksIG9yZCgnWicpKzEpXSk6CisgICAgICAgICAgICBpZiBub3QgZm9ybWF0X3NwZWMgaW4gJ2VFZkZnR24lJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAuMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAxLjAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgLTEuMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAxZTEwMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAtMWUxMDAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMWUtMTAwLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIC0xZS0xMDAsIGZvcm1hdF9zcGVjKQorCisgICAgICAgICMgQWx0ZXJuYXRlIGZvcm1hdHRpbmcgaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAuMCwgJyMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAuMCwgJyMyMGYnKQorCisgICAgICAgICMgSXNzdWUgNjkwMgorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIwPDIwIiwgJzEyMzQ1LjYwMDAwMDAwMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMTwyMCIsICcxMjM0NS42MTExMTExMTExMTExMScpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIio8MjAiLCAnMTIzNDUuNioqKioqKioqKioqKionKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIwPjIwIiwgJzAwMDAwMDAwMDAwMDAxMjM0NS42JykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMT4yMCIsICcxMTExMTExMTExMTExMTIzNDUuNicpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIio+MjAiLCAnKioqKioqKioqKioqKjEyMzQ1LjYnKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIwPTIwIiwgJzAwMDAwMDAwMDAwMDAxMjM0NS42JykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMT0yMCIsICcxMTExMTExMTExMTExMTIzNDUuNicpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIio9MjAiLCAnKioqKioqKioqKioqKjEyMzQ1LjYnKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X3NwZWNfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIGludCwgZmxvYXQsIGFuZCBzdHJpbmcgYWxsIHNoYXJlIHRoZSBzYW1lIGZvcm1hdCBzcGVjCisgICAgICAgICMgbWluaS1sYW5ndWFnZSBwYXJzZXIuCisKKyAgICAgICAgIyBDaGVjayB0aGF0IHdlIGNhbid0IGFzayBmb3IgdG9vIG1hbnkgZGlnaXRzLiBUaGlzIGlzCisgICAgICAgICMgcHJvYmFibHkgYSBDUHl0aG9uIHNwZWNpZmljIHRlc3QuIEl0IHRyaWVzIHRvIHB1dCB0aGUgd2lkdGgKKyAgICAgICAgIyBpbnRvIGEgQyBsb25nLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAsICcxJyoxMDAwMCArICdkJykKKworICAgICAgICAjIFNpbWlsYXIgd2l0aCB0aGUgcHJlY2lzaW9uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAsICcuJyArICcxJyoxMDAwMCArICdkJykKKworICAgICAgICAjIEFuZCBtYXkgYXMgd2VsbCB0ZXN0IGJvdGguCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMCwgJzEnKjEwMDAgKyAnLicgKyAnMScqMTAwMDAgKyAnZCcpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgY29tbWFzIGFyZW4ndCBhbGxvd2VkIHdpdGggdmFyaW91cyB0eXBlIGNvZGVzCisgICAgICAgIGZvciBjb2RlIGluICd4WG9ibnMnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLCAnLCcgKyBjb2RlKQorCisgICAgZGVmIHRlc3RfaW50ZXJuYWxfc2l6ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihvYmplY3QuX19iYXNpY3NpemVfXywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHR1cGxlLl9faXRlbXNpemVfXywgMCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICgiY2xhc3NpYyBsb25nIGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHJ1bl91bml0dGVzdChUeXBlc1Rlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91Y24ucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91Y24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhNGYwNwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3Vjbi5weQpAQCAtMCwwICsxLDE2NyBAQAorIiIiIFRlc3Qgc2NyaXB0IGZvciB0aGUgVW5pY29kZSBpbXBsZW1lbnRhdGlvbi4KKworV3JpdHRlbiBieSBCaWxsIFR1dHQuCitNb2RpZmllZCBmb3IgUHl0aG9uIDIuMCBieSBGcmVkcmlrIEx1bmRoIChmcmVkcmlrQHB5dGhvbndhcmUuY29tKQorCisoYykgQ29weXJpZ2h0IENOUkksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIE5PIFdBUlJBTlRZLgorCisiIiIjIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBfdGVzdGNhcGkKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgVW5pY29kZU5hbWVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tsZXR0ZXIoc2VsZiwgbmFtZSwgY29kZSk6CisgICAgICAgICMgSGVscGVyIHRoYXQgcHV0IGFsbCBcTiBlc2NhcGVzIGluc2lkZSBldmFsJ2QgcmF3IHN0cmluZ3MsCisgICAgICAgICMgdG8gbWFrZSBzdXJlIHRoaXMgc2NyaXB0IHJ1bnMgZXZlbiBpZiB0aGUgY29tcGlsZXIKKyAgICAgICAgIyBjaG9rZXMgb24gXE4gZXNjYXBlcworICAgICAgICByZXMgPSBldmFsKHVyJ3UiXE57JXN9IicgJSBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgY29kZSkKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIHRlc3RfZ2VuZXJhbChzZWxmKToKKyAgICAgICAgIyBHZW5lcmFsIGFuZCBjYXNlIGluc2Vuc2l0aXZpdHkgdGVzdDoKKyAgICAgICAgY2hhcnMgPSBbCisgICAgICAgICAgICAiTEFUSU4gQ0FQSVRBTCBMRVRURVIgVCIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIEgiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBFIiwKKyAgICAgICAgICAgICJTUEFDRSIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIFIiLAorICAgICAgICAgICAgIkxBVElOIENBUElUQUwgTEVUVEVSIEUiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBEIiwKKyAgICAgICAgICAgICJTUEFDRSIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIGYiLAorICAgICAgICAgICAgIkxBVElOIENBUElUQUwgTGVUdEVyIG8iLAorICAgICAgICAgICAgIkxBVElOIFNNYUxsIExFVFRFUiB4IiwKKyAgICAgICAgICAgICJTUEFDRSIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIEEiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBUIiwKKyAgICAgICAgICAgICJMQVRJTiBTTUFMTCBMRVRURVIgRSIsCisgICAgICAgICAgICAiU1BBQ0UiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBUIiwKKyAgICAgICAgICAgICJMQVRJTiBTTUFMTCBMRVRURVIgSCIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIEUiLAorICAgICAgICAgICAgIlNwQWNFIiwKKyAgICAgICAgICAgICJMQVRJTiBTTUFMTCBMRVRURVIgUyIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIEgiLAorICAgICAgICAgICAgIkxBVElOIHNtYWxsIExFVFRFUiBlIiwKKyAgICAgICAgICAgICJMQVRJTiBzbWFsbCBMRVRURVIgZSIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIFAiLAorICAgICAgICAgICAgIkZVTEwgU1RPUCIKKyAgICAgICAgXQorICAgICAgICBzdHJpbmcgPSB1IlRoZSByRWQgZk94IGF0ZSB0aGUgc2hlZXAuIgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1IiIuam9pbihbc2VsZi5jaGVja2xldHRlcigqYXJncykgZm9yIGFyZ3MgaW4gemlwKGNoYXJzLCBzdHJpbmcpXSksCisgICAgICAgICAgICBzdHJpbmcKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXNjaWlfbGV0dGVycyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHVuaWNvZGVkYXRhCisKKyAgICAgICAgZm9yIGNoYXIgaW4gIiIuam9pbihtYXAoY2hyLCB4cmFuZ2Uob3JkKCJhIiksIG9yZCgieiIpKSkpOgorICAgICAgICAgICAgbmFtZSA9ICJMQVRJTiBTTUFMTCBMRVRURVIgJXMiICUgY2hhci51cHBlcigpCisgICAgICAgICAgICBjb2RlID0gdW5pY29kZWRhdGEubG9va3VwKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGVkYXRhLm5hbWUoY29kZSksIG5hbWUpCisKKyAgICBkZWYgdGVzdF9oYW5ndWxfc3lsbGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJIQU5HVUwgU1lMTEFCTEUgR0EiLCB1Ilx1YWMwMCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkhBTkdVTCBTWUxMQUJMRSBHR1dFT1NTIiwgdSJcdWFmZTgiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJIQU5HVUwgU1lMTEFCTEUgRE9MUyIsIHUiXHViM2QwIikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIFJZQU4iLCB1Ilx1YjdiOCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkhBTkdVTCBTWUxMQUJMRSBNV0lLIiwgdSJcdWJiYTAiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJIQU5HVUwgU1lMTEFCTEUgQkJXQUVNIiwgdSJcdWJmODgiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJIQU5HVUwgU1lMTEFCTEUgU1NFT0wiLCB1Ilx1YzM3MCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkhBTkdVTCBTWUxMQUJMRSBZSSIsIHUiXHVjNzU4IikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIEpKWU9TUyIsIHUiXHVjYjQwIikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIEtZRU9MUyIsIHUiXHVjZjI4IikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIFBBTiIsIHUiXHVkMzEwIikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIEhXRU9LIiwgdSJcdWQ2ZjgiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJIQU5HVUwgU1lMTEFCTEUgSElIIiwgdSJcdWQ3YTMiKQorCisgICAgICAgIGltcG9ydCB1bmljb2RlZGF0YQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1bmljb2RlZGF0YS5uYW1lLCB1Ilx1ZDdhNCIpCisKKyAgICBkZWYgdGVzdF9jamtfdW5pZmllZF9pZGVvZ3JhcGhzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtMzQwMCIsIHUiXHUzNDAwIikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTREQjUiLCB1Ilx1NGRiNSIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkNKSyBVTklGSUVEIElERU9HUkFQSC00RTAwIiwgdSJcdTRlMDAiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtOUZBNSIsIHUiXHU5ZmE1IikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTIwMDAwIiwgdSJcVTAwMDIwMDAwIikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTJBNkQ2IiwgdSJcVTAwMDJhNmQ2IikKKworICAgIGRlZiB0ZXN0X2JtcF9jaGFyYWN0ZXJzKHNlbGYpOgorICAgICAgICBpbXBvcnQgdW5pY29kZWRhdGEKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBjb2RlIGluIHhyYW5nZSgweDEwMDAwKToKKyAgICAgICAgICAgIGNoYXIgPSB1bmljaHIoY29kZSkKKyAgICAgICAgICAgIG5hbWUgPSB1bmljb2RlZGF0YS5uYW1lKGNoYXIsIE5vbmUpCisgICAgICAgICAgICBpZiBuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZWRhdGEubG9va3VwKG5hbWUpLCBjaGFyKQorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKworICAgIGRlZiB0ZXN0X21pc2Nfc3ltYm9scyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiUElMQ1JPVyBTSUdOIiwgdSJcdTAwYjYiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJSRVBMQUNFTUVOVCBDSEFSQUNURVIiLCB1Ilx1RkZGRCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkhBTEZXSURUSCBLQVRBS0FOQSBTRU1JLVZPSUNFRCBTT1VORCBNQVJLIiwgdSJcdUZGOUYiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJGVUxMV0lEVEggTEFUSU4gU01BTEwgTEVUVEVSIEEiLCB1Ilx1RkY0MSIpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIGltcG9ydCB1bmljb2RlZGF0YQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHVuaWNvZGVkYXRhLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdW5pY29kZWRhdGEubmFtZSwgdSd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdW5pY29kZWRhdGEubG9va3VwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgdW5pY29kZWRhdGEubG9va3VwLCB1J3Vua25vd24nKQorCisgICAgZGVmIHRlc3Rfc3RyaWN0X2Vyb3JfaGFuZGxpbmcoc2VsZik6CisgICAgICAgICMgYm9ndXMgY2hhcmFjdGVyIG5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBVbmljb2RlRXJyb3IsCisgICAgICAgICAgICB1bmljb2RlLCAiXFxOe2JsYWh9IiwgJ3VuaWNvZGUtZXNjYXBlJywgJ3N0cmljdCcKKyAgICAgICAgKQorICAgICAgICAjIGxvbmcgYm9ndXMgY2hhcmFjdGVyIG5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBVbmljb2RlRXJyb3IsCisgICAgICAgICAgICB1bmljb2RlLCAiXFxOeyVzfSIgJSAoIngiICogMTAwMDAwKSwgJ3VuaWNvZGUtZXNjYXBlJywgJ3N0cmljdCcKKyAgICAgICAgKQorICAgICAgICAjIG1pc3NpbmcgY2xvc2luZyBicmFjZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFVuaWNvZGVFcnJvciwKKyAgICAgICAgICAgIHVuaWNvZGUsICJcXE57U1BBQ0UiLCAndW5pY29kZS1lc2NhcGUnLCAnc3RyaWN0JworICAgICAgICApCisgICAgICAgICMgbWlzc2luZyBvcGVuaW5nIGJyYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVW5pY29kZUVycm9yLAorICAgICAgICAgICAgdW5pY29kZSwgIlxcTlNQQUNFIiwgJ3VuaWNvZGUtZXNjYXBlJywgJ3N0cmljdCcKKyAgICAgICAgKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoX3Rlc3RjYXBpLklOVF9NQVggPCBfdGVzdGNhcGkuUFlfU1NJWkVfVF9NQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRzIFVJTlRfTUFYIDwgU0laRV9NQVgiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKF90ZXN0Y2FwaS5VSU5UX01BWCA8IHN5cy5tYXhpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRzIFVJTlRfTUFYIDwgc3lzLm1heGludCIpCisgICAgQHRlc3Rfc3VwcG9ydC5iaWdtZW10ZXN0KG1pbnNpemU9X3Rlc3RjYXBpLlVJTlRfTUFYICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtdXNlPTIgKyA0IC8vIGxlbih1J1xVMDAwMTAwMDAnKSkKKyAgICBkZWYgdGVzdF9pc3N1ZTE2MzM1KHNlbGYsIHNpemUpOgorICAgICAgICBmdW5jID0gc2VsZi50ZXN0X2lzc3VlMTYzMzUKKyAgICAgICAgaWYgc2l6ZSA8IGZ1bmMubWluc2l6ZToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJub3QgZW5vdWdoIG1lbW9yeTogJS4xZkcgbWluaW11bSBuZWVkZWQiICUKKyAgICAgICAgICAgICAgICAgICAgKGZ1bmMubWluc2l6ZSAqIGZ1bmMubWVtdXNlIC8gZmxvYXQoMTAyNCoqMyksKSkKKyAgICAgICAgIyB2ZXJ5IHZlcnkgbG9uZyBib2d1cyBjaGFyYWN0ZXIgbmFtZQorICAgICAgICB4ID0gYidcXE57U1BBQ0UnICsgYid4JyAqIGludChfdGVzdGNhcGkuVUlOVF9NQVggKyAxKSArIGInfScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIGxlbihiJ1xcTntTUEFDRX0nKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3Rlc3RjYXBpLlVJTlRfTUFYICsgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFVuaWNvZGVFcnJvciwKKyAgICAgICAgICAgICd1bmtub3duIFVuaWNvZGUgY2hhcmFjdGVyIG5hbWUnLAorICAgICAgICAgICAgeC5kZWNvZGUsICd1bmljb2RlLWVzY2FwZScKKyAgICAgICAgKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFVuaWNvZGVOYW1lc1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuYXJ5LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdW5hcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4ZmNhOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuYXJ5LnB5CkBAIC0wLDAgKzEsNTkgQEAKKyIiIlRlc3QgY29tcGlsZXIgY2hhbmdlcyBmb3IgdW5hcnkgb3BzICgrLCAtLCB+KSBpbnRyb2R1Y2VkIGluIFB5dGhvbiAyLjIiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGhhdmVfdW5pY29kZQorCitjbGFzcyBVbmFyeU9wVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbmVnYXRpdmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMiA9PSAwIC0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0wID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtLTIgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0yTCA9PSAwIC0gMkwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMi4wID09IDAgLSAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMmogPT0gMCAtIDJqKQorCisgICAgZGVmIHRlc3RfcG9zaXRpdmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgrMiA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzAgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCsrMiA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzJMID09IDJMKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzIuMCA9PSAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgrMmogPT0gMmopCisKKyAgICBkZWYgdGVzdF9pbnZlcnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMiA9PSAwIC0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0wID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtLTIgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0yTCA9PSAwIC0gMkwpCisKKyAgICBkZWYgdGVzdF9ub19vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgbmluZXMgPSAiOSIgKiAzMgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgiKyIgKyBuaW5lcykgPT0gZXZhbCgiKyIgKyBuaW5lcyArICJMIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCItIiArIG5pbmVzKSA9PSBldmFsKCItIiArIG5pbmVzICsgIkwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2YWwoIn4iICsgbmluZXMpID09IGV2YWwoIn4iICsgbmluZXMgKyAiTCIpKQorCisgICAgZGVmIHRlc3RfbmVnYXRpb25fb2ZfZXhwb25lbnRpYXRpb24oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlICcqKicgZG9lcyB0aGUgcmlnaHQgdGhpbmc7IHRoZXNlIGZvcm0gYQorICAgICAgICAjIHJlZ3Jlc3Npb24gdGVzdCBmb3IgU291cmNlRm9yZ2UgYnVnICM0NTY3NTYuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTIgKiogMywgLTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0yKSAqKiAzLCAtOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMiAqKiA0LCAtMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0yKSAqKiA0LCAxNikKKworICAgIGRlZiB0ZXN0X2JhZF90eXBlcyhzZWxmKToKKyAgICAgICAgZm9yIG9wIGluICcrJywgJy0nLCAnfic6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsIG9wICsgIidhJyIpCisgICAgICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCBvcCArICJ1J2EnIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsICJ+MmoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsICJ+Mi4wIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFVuYXJ5T3BUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91bmRvY3VtZW50ZWRfZGV0YWlscy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuZG9jdW1lbnRlZF9kZXRhaWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZmMyODAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91bmRvY3VtZW50ZWRfZGV0YWlscy5weQpAQCAtMCwwICsxLDM5IEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3B5M2tfd2FybmluZ3MKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0SW1wbGVtZW50YXRpb25Db21wYXJpc29ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90eXBlX2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyIDwgaW50IG9yIHN0ciA+IGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludCA8PSBzdHIgb3IgaW50ID49IHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtcChpbnQsIHN0cikgIT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludCBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIgPT0gc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ICE9IHN0cikKKworICAgIGRlZiB0ZXN0X2NlbGxfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGRlZiBmKHgpOgorICAgICAgICAgICAgaWYgeDoKKyAgICAgICAgICAgICAgICB5ID0gMQorICAgICAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgZGVmIGgoKToKKyAgICAgICAgICAgICAgICByZXR1cm4geQorICAgICAgICAgICAgcmV0dXJuIGcsIGgKKyAgICAgICAgZywgaCA9IGYoMCkKKyAgICAgICAgZ19jZWxsLCA9IGcuZnVuY19jbG9zdXJlCisgICAgICAgIGhfY2VsbCwgPSBoLmZ1bmNfY2xvc3VyZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaF9jZWxsIDwgZ19jZWxsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ19jZWxsID49IGhfY2VsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZ19jZWxsLCBoX2NlbGwpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ19jZWxsIGlzIGdfY2VsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdfY2VsbCA9PSBnX2NlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoX2NlbGwgPT0gaF9jZWxsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ19jZWxsICE9IGhfY2VsbCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICBydW5fdW5pdHRlc3QoVGVzdEltcGxlbWVudGF0aW9uQ29tcGFyaXNvbnMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NGZlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC0wLDAgKzEsMTY2NiBAQAorIiIiIFRlc3Qgc2NyaXB0IGZvciB0aGUgVW5pY29kZSBpbXBsZW1lbnRhdGlvbi4KKworV3JpdHRlbiBieSBNYXJjLUFuZHJlIExlbWJ1cmcgKG1hbEBsZW1idXJnLmNvbSkuCisKKyhjKSBDb3B5cmlnaHQgQ05SSSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gTk8gV0FSUkFOVFkuCisKKyIiIiMiCitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0CitpbXBvcnQgY29kZWNzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBzdHJpbmdfdGVzdHMKKworIyBkZWNvcmF0b3IgdG8gc2tpcCB0ZXN0cyBvbiBuYXJyb3cgYnVpbGRzCityZXF1aXJlc193aWRlX2J1aWxkID0gdW5pdHRlc3Quc2tpcElmKHN5cy5tYXh1bmljb2RlID09IDY1NTM1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgd2lkZSBidWlsZCcpCisKKyMgRXJyb3IgaGFuZGxpbmcgKGJhZCBkZWNvZGVyIHJldHVybikKK2RlZiBzZWFyY2hfZnVuY3Rpb24oZW5jb2RpbmcpOgorICAgIGRlZiBkZWNvZGUxKGlucHV0LCBlcnJvcnM9InN0cmljdCIpOgorICAgICAgICByZXR1cm4gNDIgIyBub3QgYSB0dXBsZQorICAgIGRlZiBlbmNvZGUxKGlucHV0LCBlcnJvcnM9InN0cmljdCIpOgorICAgICAgICByZXR1cm4gNDIgIyBub3QgYSB0dXBsZQorICAgIGRlZiBlbmNvZGUyKGlucHV0LCBlcnJvcnM9InN0cmljdCIpOgorICAgICAgICByZXR1cm4gKDQyLCA0MikgIyBubyB1bmljb2RlCisgICAgZGVmIGRlY29kZTIoaW5wdXQsIGVycm9ycz0ic3RyaWN0Iik6CisgICAgICAgIHJldHVybiAoNDIsIDQyKSAjIG5vIHVuaWNvZGUKKyAgICBpZiBlbmNvZGluZz09InRlc3QudW5pY29kZTEiOgorICAgICAgICByZXR1cm4gKGVuY29kZTEsIGRlY29kZTEsIE5vbmUsIE5vbmUpCisgICAgZWxpZiBlbmNvZGluZz09InRlc3QudW5pY29kZTIiOgorICAgICAgICByZXR1cm4gKGVuY29kZTIsIGRlY29kZTIsIE5vbmUsIE5vbmUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKK2NvZGVjcy5yZWdpc3RlcihzZWFyY2hfZnVuY3Rpb24pCisKK2NsYXNzIFVuaWNvZGVUZXN0KAorICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LAorICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdCwKKyAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVGVzdCwKKyAgICApOgorICAgIHR5cGUydGVzdCA9IHVuaWNvZGUKKworICAgIGRlZiBhc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6CisgICAgICAgICMgc3RyaWN0IGFzc2VydEVxdWFsIG1ldGhvZDogcmVqZWN0IGltcGxpY2l0IGJ5dGVzL3VuaWNvZGUgZXF1YWxpdHkKKyAgICAgICAgc3VwZXIoVW5pY29kZVRlc3QsIHNlbGYpLmFzc2VydEVxdWFsKGZpcnN0LCBzZWNvbmQsIG1zZykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmaXJzdCwgdW5pY29kZSkgb3IgaXNpbnN0YW5jZShzZWNvbmQsIHVuaWNvZGUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpcnN0LCB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlY29uZCwgdW5pY29kZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGZpcnN0LCBzdHIpIG9yIGlzaW5zdGFuY2Uoc2Vjb25kLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpcnN0LCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2Vjb25kLCBzdHIpCisKKyAgICBkZWYgY2hlY2tlcXVhbG5vZml4KHNlbGYsIHJlc3VsdCwgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIG1ldGhvZCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKQorICAgICAgICByZWFscmVzdWx0ID0gbWV0aG9kKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxyZXN1bHQsIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocmVhbHJlc3VsdCkgaXMgdHlwZShyZXN1bHQpKQorCisgICAgICAgICMgaWYgdGhlIG9yaWdpbmFsIGlzIHJldHVybmVkIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgICMgdGhpcyBkb2Vzbid0IGhhcHBlbiB3aXRoIHN1YmNsYXNzZXMKKyAgICAgICAgaWYgcmVhbHJlc3VsdCBpcyBvYmplY3Q6CisgICAgICAgICAgICBjbGFzcyB1c3ViKHVuaWNvZGUpOgorICAgICAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd1c3ViKCVyKScgJSB1bmljb2RlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICBvYmplY3QgPSB1c3ViKG9iamVjdCkKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKQorICAgICAgICAgICAgcmVhbHJlc3VsdCA9IG1ldGhvZCgqYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHJlc3VsdCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iamVjdCBpcyBub3QgcmVhbHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2xpdGVyYWxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHhmZicsIHUnXHUwMGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1ZmZmZicsIHUnXFUwMDAwZmZmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAndVwnXFxVZmZmZmZmZmVcJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAndVwnXFxVZmZmZmZmZmZcJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAndVwnXFxVJTA4eFwnJyAlIDB4MTEwMDAwKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CisgICAgICAgICAgICAjIFRlc3QgYmFzaWMgc2FuaXR5IG9mIHJlcHIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUnYWJjJyksICJ1J2FiYyciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUnYWJcXGMnKSwgInUnYWJcXFxcYyciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUnYWJcXCcpLCAidSdhYlxcXFwnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1J1xcYycpLCAidSdcXFxcYyciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUnXFwnKSwgInUnXFxcXCciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUnXG4nKSwgInUnXFxuJyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodSdccicpLCAidSdcXHInIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1J1x0JyksICJ1J1xcdCciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUnXGInKSwgInUnXFx4MDgnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1IidcIiIpLCAiIiJ1J1xcJyInIiIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUiJ1wiIiksICIiInUnXFwnIiciIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodSInIiksICcnJ3UiJyInJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodSciJyksICIiInUnIiciIiIpCisgICAgICAgICAgICBsYXRpbjFyZXByID0gKAorICAgICAgICAgICAgICAgICJ1J1xceDAwXFx4MDFcXHgwMlxceDAzXFx4MDRcXHgwNVxceDA2XFx4MDdcXHgwOFxcdFxcblxceDBiXFx4MGNcXHIiCisgICAgICAgICAgICAgICAgIlxceDBlXFx4MGZcXHgxMFxceDExXFx4MTJcXHgxM1xceDE0XFx4MTVcXHgxNlxceDE3XFx4MThcXHgxOVxceDFhIgorICAgICAgICAgICAgICAgICJcXHgxYlxceDFjXFx4MWRcXHgxZVxceDFmICFcIiMkJSZcXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJIgorICAgICAgICAgICAgICAgICJKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flxceDdmIgorICAgICAgICAgICAgICAgICJcXHg4MFxceDgxXFx4ODJcXHg4M1xceDg0XFx4ODVcXHg4NlxceDg3XFx4ODhcXHg4OVxceDhhXFx4OGJcXHg4Y1xceDhkIgorICAgICAgICAgICAgICAgICJcXHg4ZVxceDhmXFx4OTBcXHg5MVxceDkyXFx4OTNcXHg5NFxceDk1XFx4OTZcXHg5N1xceDk4XFx4OTlcXHg5YVxceDliIgorICAgICAgICAgICAgICAgICJcXHg5Y1xceDlkXFx4OWVcXHg5ZlxceGEwXFx4YTFcXHhhMlxceGEzXFx4YTRcXHhhNVxceGE2XFx4YTdcXHhhOFxceGE5IgorICAgICAgICAgICAgICAgICJcXHhhYVxceGFiXFx4YWNcXHhhZFxceGFlXFx4YWZcXHhiMFxceGIxXFx4YjJcXHhiM1xceGI0XFx4YjVcXHhiNlxceGI3IgorICAgICAgICAgICAgICAgICJcXHhiOFxceGI5XFx4YmFcXHhiYlxceGJjXFx4YmRcXHhiZVxceGJmXFx4YzBcXHhjMVxceGMyXFx4YzNcXHhjNFxceGM1IgorICAgICAgICAgICAgICAgICJcXHhjNlxceGM3XFx4YzhcXHhjOVxceGNhXFx4Y2JcXHhjY1xceGNkXFx4Y2VcXHhjZlxceGQwXFx4ZDFcXHhkMlxceGQzIgorICAgICAgICAgICAgICAgICJcXHhkNFxceGQ1XFx4ZDZcXHhkN1xceGQ4XFx4ZDlcXHhkYVxceGRiXFx4ZGNcXHhkZFxceGRlXFx4ZGZcXHhlMFxceGUxIgorICAgICAgICAgICAgICAgICJcXHhlMlxceGUzXFx4ZTRcXHhlNVxceGU2XFx4ZTdcXHhlOFxceGU5XFx4ZWFcXHhlYlxceGVjXFx4ZWRcXHhlZVxceGVmIgorICAgICAgICAgICAgICAgICJcXHhmMFxceGYxXFx4ZjJcXHhmM1xceGY0XFx4ZjVcXHhmNlxceGY3XFx4ZjhcXHhmOVxceGZhXFx4ZmJcXHhmY1xceGZkIgorICAgICAgICAgICAgICAgICJcXHhmZVxceGZmJyIpCisgICAgICAgICAgICB0ZXN0cmVwciA9IHJlcHIodScnLmpvaW4obWFwKHVuaWNociwgeHJhbmdlKDI1NikpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHJlcHIsIGxhdGluMXJlcHIpCisgICAgICAgICAgICAjIFRlc3QgcmVwciB3b3JrcyBvbiB3aWRlIHVuaWNvZGUgZXNjYXBlcyB3aXRob3V0IG92ZXJmbG93LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUiXFUwMDAxMDAwMCIgKiAzOSArIHUiXHVmZmZmIiAqIDQwOTYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHUiXFUwMDAxMDAwMCIgKiAzOSArIHUiXHVmZmZmIiAqIDQwOTYpKQorCisKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9jb3VudChzZWxmKQorICAgICAgICAjIGNoZWNrIG1peGVkIGFyZ3VtZW50IHR5cGVzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDMsICAnYWFhJywgJ2NvdW50JywgdSdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgICdhYWEnLCAnY291bnQnLCB1J2InKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgzLCB1J2FhYScsICdjb3VudCcsICAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDAsIHUnYWFhJywgJ2NvdW50JywgICdiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgdSdhYWEnLCAnY291bnQnLCAgJ2InKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgxLCB1J2FhYScsICdjb3VudCcsICAnYScsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgzLCB1J2FhYScsICdjb3VudCcsICAnYScsIC0xMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMiwgdSdhYWEnLCAnY291bnQnLCAgJ2EnLCAwLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgdSdhYWEnLCAnY291bnQnLCAgJ2EnLCAwLCAtMTApCisKKyAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgwLCAgdSdhYmNkZWZnaGlhYmMnLCAnZmluZCcsIHUnYWJjJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoOSwgIHUnYWJjZGVmZ2hpYWJjJywgJ2ZpbmQnLCB1J2FiYycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KC0xLCB1J2FiY2RlZmdoaWFiYycsICdmaW5kJywgdSdkZWYnLCA0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycuZmluZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1J2hlbGxvJy5maW5kLCA0MikKKworICAgIGRlZiB0ZXN0X3JmaW5kKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X3JmaW5kKHNlbGYpCisgICAgICAgICMgY2hlY2sgbWl4ZWQgYXJndW1lbnQgdHlwZXMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoOSwgICAnYWJjZGVmZ2hpYWJjJywgJ3JmaW5kJywgdSdhYmMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgxMiwgICdhYmNkZWZnaGlhYmMnLCAncmZpbmQnLCB1JycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDEyLCB1J2FiY2RlZmdoaWFiYycsICdyZmluZCcsICAnJykKKworICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X2luZGV4KHNlbGYpCisgICAgICAgICMgY2hlY2sgbWl4ZWQgYXJndW1lbnQgdHlwZXMKKyAgICAgICAgZm9yICh0MSwgdDIpIGluICgoc3RyLCB1bmljb2RlKSwgKHVuaWNvZGUsIHN0cikpOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgdDEoJ2FiY2RlZmdoaWFiYycpLCAnaW5kZXgnLCAgdDIoJycpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMywgdDEoJ2FiY2RlZmdoaWFiYycpLCAnaW5kZXgnLCAgdDIoJ2RlZicpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgdDEoJ2FiY2RlZmdoaWFiYycpLCAnaW5kZXgnLCAgdDIoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoOSwgdDEoJ2FiY2RlZmdoaWFiYycpLCAnaW5kZXgnLCAgdDIoJ2FiYycpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdDEoJ2FiY2RlZmdoaWFiYycpLmluZGV4LCB0MignaGliJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MSgnYWJjZGVmZ2hpYWInKS5pbmRleCwgIHQyKCdhYmMnKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdhYmNkZWZnaGknKS5pbmRleCwgIHQyKCdnaGknKSwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdhYmNkZWZnaGknKS5pbmRleCwgIHQyKCdnaGknKSwgLTEpCisKKyAgICBkZWYgdGVzdF9yaW5kZXgoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3RfcmluZGV4KHNlbGYpCisgICAgICAgICMgY2hlY2sgbWl4ZWQgYXJndW1lbnQgdHlwZXMKKyAgICAgICAgZm9yICh0MSwgdDIpIGluICgoc3RyLCB1bmljb2RlKSwgKHVuaWNvZGUsIHN0cikpOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMTIsIHQxKCdhYmNkZWZnaGlhYmMnKSwgJ3JpbmRleCcsICB0MignJykpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgzLCAgdDEoJ2FiY2RlZmdoaWFiYycpLCAncmluZGV4JywgIHQyKCdkZWYnKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDksICB0MSgnYWJjZGVmZ2hpYWJjJyksICdyaW5kZXgnLCAgdDIoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgIHQxKCdhYmNkZWZnaGlhYmMnKSwgJ3JpbmRleCcsICB0MignYWJjJyksIDAsIC0xKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MSgnYWJjZGVmZ2hpYWJjJykucmluZGV4LCAgdDIoJ2hpYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdDEoJ2RlZmdoaWFiYycpLnJpbmRleCwgIHQyKCdkZWYnKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdkZWZnaGlhYmMnKS5yaW5kZXgsICB0MignYWJjJyksIDAsIC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdDEoJ2FiY2RlZmdoaScpLnJpbmRleCwgIHQyKCdnaGknKSwgMCwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdhYmNkZWZnaGknKS5yaW5kZXgsICB0MignZ2hpJyksIDAsIC0xKQorCisgICAgZGVmIHRlc3RfdHJhbnNsYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J2JiYmMnLCB1J2FiYWJhYmMnLCAndHJhbnNsYXRlJywge29yZCgnYScpOk5vbmV9KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J2lpaWMnLCB1J2FiYWJhYmMnLCAndHJhbnNsYXRlJywge29yZCgnYScpOk5vbmUsIG9yZCgnYicpOm9yZCgnaScpfSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdpaWl4JywgdSdhYmFiYWJjJywgJ3RyYW5zbGF0ZScsIHtvcmQoJ2EnKTpOb25lLCBvcmQoJ2InKTpvcmQoJ2knKSwgb3JkKCdjJyk6dSd4J30pCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnPGk+PGk+PGk+YycsIHUnYWJhYmFiYycsICd0cmFuc2xhdGUnLCB7b3JkKCdhJyk6Tm9uZSwgb3JkKCdiJyk6dSc8aT4nfSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdjJywgdSdhYmFiYWJjJywgJ3RyYW5zbGF0ZScsIHtvcmQoJ2EnKTpOb25lLCBvcmQoJ2InKTp1Jyd9KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J3h5eXgnLCB1J3h6eCcsICd0cmFuc2xhdGUnLCB7b3JkKCd6Jyk6dSd5eSd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycudHJhbnNsYXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUnYWJhYmFiYycudHJhbnNsYXRlLCB7b3JkKCdhJyk6Jyd9KQorCisgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3Rfc3BsaXQoc2VsZikKKworICAgICAgICAjIE1peGVkIGFyZ3VtZW50cworICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChbdSdhJywgdSdiJywgdSdjJywgdSdkJ10sIHUnYS8vYi8vYy8vZCcsICdzcGxpdCcsICcvLycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFt1J2EnLCB1J2InLCB1J2MnLCB1J2QnXSwgJ2EvL2IvL2MvL2QnLCAnc3BsaXQnLCB1Jy8vJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoW3UnZW5kY2FzZSAnLCB1JyddLCB1J2VuZGNhc2UgdGVzdCcsICdzcGxpdCcsICd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2pvaW4oc2VsZikKKworICAgICAgICAjIG1peGVkIGFyZ3VtZW50cworICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J2EgYiBjIGQnLCB1JyAnLCAnam9pbicsIFsnYScsICdiJywgdSdjJywgdSdkJ10pCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnYWJjZCcsIHUnJywgJ2pvaW4nLCAodSdhJywgdSdiJywgdSdjJywgdSdkJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUndyB4IHkgeicsIHUnICcsICdqb2luJywgc3RyaW5nX3Rlc3RzLlNlcXVlbmNlKCd3eHl6JykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnYSBiIGMgZCcsICcgJywgJ2pvaW4nLCBbdSdhJywgdSdiJywgdSdjJywgdSdkJ10pCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnYSBiIGMgZCcsICcgJywgJ2pvaW4nLCBbJ2EnLCAnYicsIHUnYycsIHUnZCddKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J2FiY2QnLCAnJywgJ2pvaW4nLCAodSdhJywgdSdiJywgdSdjJywgdSdkJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUndyB4IHkgeicsICcgJywgJ2pvaW4nLCBzdHJpbmdfdGVzdHMuU2VxdWVuY2UodSd3eHl6JykpCisKKyAgICBkZWYgdGVzdF9zdHJpcChzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9zdHJpcChzZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHUiaGVsbG8iLnN0cmlwLCAiXHhmZiIpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X3JlcGxhY2Uoc2VsZikKKworICAgICAgICAjIG1ldGhvZCBjYWxsIGZvcndhcmRlZCBmcm9tIHN0ciBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIG9mIHVuaWNvZGUgYXJndW1lbnQKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdvbmVAdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgdSchJywgdSdAJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAncmVwbGFjZScucmVwbGFjZSwgdSJyIiwgNDIpCisKKyAgICBkZWYgdGVzdF9jb21wYXJpc29uKHNlbGYpOgorICAgICAgICAjIENvbXBhcmlzb25zOgorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdhYmMnID09ICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FiYycgPT0gdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdhYmMnID09IHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnYWJjZCcgPiAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhYmNkJyA+IHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnYWJjZCcgPiB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J2FiYycgPCAnYWJjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYWJjJyA8IHUnYWJjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J2FiYycgPCB1J2FiY2QnKQorCisgICAgICAgIGlmIDA6CisgICAgICAgICAgICAjIE1vdmUgdGhlc2UgdGVzdHMgdG8gYSBVbmljb2RlIGNvbGxhdGlvbiBtb2R1bGUgdGVzdC4uLgorICAgICAgICAgICAgIyBUZXN0aW5nIFVURi0xNiBjb2RlIHBvaW50IG9yZGVyIGNvbXBhcmlzb25zLi4uCisKKyAgICAgICAgICAgICMgTm8gc3Vycm9nYXRlcywgbm8gZml4dXAgcmVxdWlyZWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcdTAwNjEnIDwgdSdcdTIwYWMnKQorICAgICAgICAgICAgIyBOb24gc3Vycm9nYXRlIGJlbG93IHN1cnJvZ2F0ZSB2YWx1ZSwgbm8gZml4dXAgcmVxdWlyZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1x1MDA2MScgPCB1J1x1ZDgwMFx1ZGMwMicpCisKKyAgICAgICAgICAgICMgTm9uIHN1cnJvZ2F0ZSBhYm92ZSBzdXJyb2dhdGUgdmFsdWUsIGZpeHVwIHJlcXVpcmVkCisgICAgICAgICAgICBkZWYgdGVzdF9sZWNtcChzLCBzMik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgPCBzMikKKworICAgICAgICAgICAgZGVmIHRlc3RfZml4dXAocyk6CisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZDgwMFx1ZGMwMScKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWQ5MDBcdWRjMDEnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkYTAwXHVkYzAxJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZGIwMFx1ZGMwMScKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWQ4MDBcdWRkMDEnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkOTAwXHVkZDAxJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZGEwMFx1ZGQwMScKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWRiMDBcdWRkMDEnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkODAwXHVkZTAxJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZDkwMFx1ZGUwMScKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWRhMDBcdWRlMDEnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkYjAwXHVkZTAxJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZDgwMFx1ZGZmZicKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWQ5MDBcdWRmZmYnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkYTAwXHVkZmZmJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZGIwMFx1ZGZmZicKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorCisgICAgICAgICAgICAgICAgdGVzdF9maXh1cCh1J1x1ZTAwMCcpCisgICAgICAgICAgICAgICAgdGVzdF9maXh1cCh1J1x1ZmY2MScpCisKKyAgICAgICAgIyBTdXJyb2dhdGVzIG9uIGJvdGggc2lkZXMsIG5vIGZpeHVwIHJlcXVpcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1x1ZDgwMFx1ZGMwMicgPCB1J1x1ZDg0ZFx1ZGM1NicpCisKKyAgICBkZWYgdGVzdF9jYXBpdGFsaXplKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X2NhcGl0YWxpemUoc2VsZikKKyAgICAgICAgIyBjaGVjayB0aGF0IHRpdGxlY2FzZWQgY2hhcnMgYXJlIGxvd2VyZWQgY29ycmVjdGx5CisgICAgICAgICMgXHUxZmZjIGlzIHRoZSB0aXRsZWNhc2VkIGNoYXIKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnXHUxZmZjXHUxZmYzXHUxZmYzXHUxZmYzJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUnXHUxZmYzXHUxZmYzXHUxZmZjXHUxZmZjJywgJ2NhcGl0YWxpemUnKQorICAgICAgICAjIGNoZWNrIHdpdGggY2FzZWQgbm9uLWxldHRlciBjaGFycworICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSdcdTI0YzVcdTI0ZThcdTI0ZTNcdTI0ZDdcdTI0ZGVcdTI0ZGQnLAorICAgICAgICAgICAgICAgICAgICAgICAgdSdcdTI0YzVcdTI0Y2VcdTI0YzlcdTI0YmRcdTI0YzRcdTI0YzMnLCAnY2FwaXRhbGl6ZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J1x1MjRjNVx1MjRlOFx1MjRlM1x1MjRkN1x1MjRkZVx1MjRkZCcsCisgICAgICAgICAgICAgICAgICAgICAgICB1J1x1MjRkZlx1MjRlOFx1MjRlM1x1MjRkN1x1MjRkZVx1MjRkZCcsICdjYXBpdGFsaXplJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnXHUyMTYwXHUyMTcxXHUyMTcyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUnXHUyMTYwXHUyMTYxXHUyMTYyJywgJ2NhcGl0YWxpemUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSdcdTIxNjBcdTIxNzFcdTIxNzInLAorICAgICAgICAgICAgICAgICAgICAgICAgdSdcdTIxNzBcdTIxNzFcdTIxNzInLCAnY2FwaXRhbGl6ZScpCisgICAgICAgICMgY2hlY2sgd2l0aCBMbCBjaGFycyB3aXRoIG5vIHVwcGVyIC0gbm90aGluZyBjaGFuZ2VzIGhlcmUKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnXHUwMTliXHUxZDAwXHUxZDg2XHUwMjIxXHUxZmI3JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUnXHUwMTliXHUxZDAwXHUxZDg2XHUwMjIxXHUxZmI3JywgJ2NhcGl0YWxpemUnKQorCisgICAgZGVmIHRlc3RfaXNsb3dlcihzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfaXNsb3dlcihzZWxmKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgdSdcdTFGRmMnLCAnaXNsb3dlcicpCisKKyAgICBAcmVxdWlyZXNfd2lkZV9idWlsZAorICAgIGRlZiB0ZXN0X2lzbG93ZXJfbm9uX2JtcChzZWxmKToKKyAgICAgICAgIyBub24tQk1QLCB1cHBlcmNhc2UKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1J1xVMDAwMTA0MDEnLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1J1xVMDAwMTA0MjcnLmlzbG93ZXIoKSkKKyAgICAgICAgIyBub24tQk1QLCBsb3dlcmNhc2UKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnXFUwMDAxMDQyOScuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcVTAwMDEwNDRFJy5pc2xvd2VyKCkpCisgICAgICAgICMgbm9uLUJNUCwgbm9uLWNhc2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodSdcVTAwMDFGNDBEJy5pc2xvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodSdcVTAwMDFGNDZGJy5pc2xvd2VyKCkpCisKKyAgICBkZWYgdGVzdF9pc3VwcGVyKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9pc3VwcGVyKHNlbGYpCisgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnXHUxRkZjJywgJ2lzdXBwZXInKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF9pc3VwcGVyX25vbl9ibXAoc2VsZik6CisgICAgICAgICMgbm9uLUJNUCwgdXBwZXJjYXNlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1xVMDAwMTA0MDEnLmlzdXBwZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnXFUwMDAxMDQyNycuaXN1cHBlcigpKQorICAgICAgICAjIG5vbi1CTVAsIGxvd2VyY2FzZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUnXFUwMDAxMDQyOScuaXN1cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUnXFUwMDAxMDQ0RScuaXN1cHBlcigpKQorICAgICAgICAjIG5vbi1CTVAsIG5vbi1jYXNlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUnXFUwMDAxRjQwRCcuaXN1cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUnXFUwMDAxRjQ2RicuaXN1cHBlcigpKQorCisgICAgZGVmIHRlc3RfaXN0aXRsZShzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfaXN0aXRsZShzZWxmKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MUZGYycsICdpc3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdHcmVlayBcdTFGRmNpdGxlY2FzZXMgLi4uJywgJ2lzdGl0bGUnKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF9pc3RpdGxlX25vbl9ibXAoc2VsZik6CisgICAgICAgICMgbm9uLUJNUCwgdXBwZXJjYXNlICsgbG93ZXJjYXNlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1xVMDAwMTA0MDFcVTAwMDEwNDI5Jy5pc3RpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1xVMDAwMTA0MjdcVTAwMDEwNDRFJy5pc3RpdGxlKCkpCisgICAgICAgICMgYXBwYXJlbnRseSB0aGVyZSBhcmUgbm8gdGl0bGVjYXNlZCAoTHQpIG5vbi1CTVAgY2hhcnMgaW4gVW5pY29kZSA2CisgICAgICAgIGZvciBjaCBpbiBbdSdcVTAwMDEwNDI5JywgdSdcVTAwMDEwNDRFJywgdSdcVTAwMDFGNDBEJywgdSdcVTAwMDFGNDZGJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoLmlzdGl0bGUoKSwgJ3shcn0gaXMgbm90IHRpdGxlJy5mb3JtYXQoY2gpKQorCisgICAgZGVmIHRlc3RfaXNzcGFjZShzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfaXNzcGFjZShzZWxmKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MjAwMCcsICdpc3NwYWNlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTIwMGEnLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J1x1MjAxNCcsICdpc3NwYWNlJykKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfaXNzcGFjZV9ub25fYm1wKHNlbGYpOgorICAgICAgICAjIGFwcGFyZW50bHkgdGhlcmUgYXJlIG5vIG5vbi1CTVAgc3BhY2VzIGNoYXJzIGluIFVuaWNvZGUgNgorICAgICAgICBmb3IgY2ggaW4gW3UnXFUwMDAxMDQwMScsIHUnXFUwMDAxMDQyNycsIHUnXFUwMDAxMDQyOScsIHUnXFUwMDAxMDQ0RScsCisgICAgICAgICAgICAgICAgICAgdSdcVTAwMDFGNDBEJywgdSdcVTAwMDFGNDZGJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoLmlzc3BhY2UoKSwgJ3shcn0gaXMgbm90IHNwYWNlLicuZm9ybWF0KGNoKSkKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfaXNhbG51bV9ub25fYm1wKHNlbGYpOgorICAgICAgICBmb3IgY2ggaW4gW3UnXFUwMDAxMDQwMScsIHUnXFUwMDAxMDQyNycsIHUnXFUwMDAxMDQyOScsIHUnXFUwMDAxMDQ0RScsCisgICAgICAgICAgICAgICAgICAgdSdcVTAwMDFEN0Y2JywgdSdcVTAwMDEwNEEwJywgdSdcVTAwMDEwNEEwJywgdSdcVTAwMDFGMTA3J106CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2guaXNhbG51bSgpLCAneyFyfSBpcyBhbG51bS4nLmZvcm1hdChjaCkpCisKKyAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9pc2FscGhhKHNlbGYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnXHUxRkZjJywgJ2lzYWxwaGEnKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF9pc2FscGhhX25vbl9ibXAoc2VsZik6CisgICAgICAgICMgbm9uLUJNUCwgY2FzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnXFUwMDAxMDQwMScuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcVTAwMDEwNDI3Jy5pc2FscGhhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1xVMDAwMTA0MjknLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnXFUwMDAxMDQ0RScuaXNhbHBoYSgpKQorICAgICAgICAjIG5vbi1CTVAsIG5vbi1jYXNlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUnXFUwMDAxRjQwRCcuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUnXFUwMDAxRjQ2RicuaXNhbHBoYSgpKQorCisgICAgZGVmIHRlc3RfaXNkZWNpbWFsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgdScnLCAnaXNkZWNpbWFsJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnYScsICdpc2RlY2ltYWwnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1JzAnLCAnaXNkZWNpbWFsJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnXHUyNDYwJywgJ2lzZGVjaW1hbCcpICMgQ0lSQ0xFRCBESUdJVCBPTkUKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnXHhiYycsICdpc2RlY2ltYWwnKSAjIFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MDY2MCcsICdpc2RlY2ltYWwnKSAjIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnMDEyMzQ1Njc4OScsICdpc2RlY2ltYWwnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgdScwMTIzNDU2Nzg5YScsICdpc2RlY2ltYWwnKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzZGVjaW1hbCcsIDQyKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF9pc2RlY2ltYWxfbm9uX2JtcChzZWxmKToKKyAgICAgICAgZm9yIGNoIGluIFt1J1xVMDAwMTA0MDEnLCB1J1xVMDAwMTA0MjcnLCB1J1xVMDAwMTA0MjknLCB1J1xVMDAwMTA0NEUnLAorICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxRjQwRCcsIHUnXFUwMDAxRjQ2RicsIHUnXFUwMDAxMTA2NScsIHUnXFUwMDAxRjEwNyddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaC5pc2RlY2ltYWwoKSwgJ3shcn0gaXMgbm90IGRlY2ltYWwuJy5mb3JtYXQoY2gpKQorICAgICAgICBmb3IgY2ggaW4gW3UnXFUwMDAxRDdGNicsIHUnXFUwMDAxMDRBMCcsIHUnXFUwMDAxMDRBMCddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoLmlzZGVjaW1hbCgpLCAneyFyfSBpcyBkZWNpbWFsLicuZm9ybWF0KGNoKSkKKworICAgIGRlZiB0ZXN0X2lzZGlnaXQoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2lzZGlnaXQoc2VsZikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTI0NjAnLCAnaXNkaWdpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J1x4YmMnLCAnaXNkaWdpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnXHUwNjYwJywgJ2lzZGlnaXQnKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF9pc2RpZ2l0X25vbl9ibXAoc2VsZik6CisgICAgICAgIGZvciBjaCBpbiBbdSdcVTAwMDEwNDAxJywgdSdcVTAwMDEwNDI3JywgdSdcVTAwMDEwNDI5JywgdSdcVTAwMDEwNDRFJywKKyAgICAgICAgICAgICAgICAgICB1J1xVMDAwMUY0MEQnLCB1J1xVMDAwMUY0NkYnLCB1J1xVMDAwMTEwNjUnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2guaXNkaWdpdCgpLCAneyFyfSBpcyBub3QgYSBkaWdpdC4nLmZvcm1hdChjaCkpCisgICAgICAgIGZvciBjaCBpbiBbdSdcVTAwMDFEN0Y2JywgdSdcVTAwMDEwNEEwJywgdSdcVTAwMDEwNEEwJywgdSdcVTAwMDFGMTA3J106CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2guaXNkaWdpdCgpLCAneyFyfSBpcyBhIGRpZ2l0LicuZm9ybWF0KGNoKSkKKworICAgIGRlZiB0ZXN0X2lzbnVtZXJpYyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnJywgJ2lzbnVtZXJpYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J2EnLCAnaXNudW1lcmljJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdScwJywgJ2lzbnVtZXJpYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnXHUyNDYwJywgJ2lzbnVtZXJpYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnXHhiYycsICdpc251bWVyaWMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MDY2MCcsICdpc251bWVyaWMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1JzAxMjM0NTY3ODknLCAnaXNudW1lcmljJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnMDEyMzQ1Njc4OWEnLCAnaXNudW1lcmljJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5pc251bWVyaWMsIDQyKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF9pc251bWVyaWNfbm9uX2JtcChzZWxmKToKKyAgICAgICAgZm9yIGNoIGluIFt1J1xVMDAwMTA0MDEnLCB1J1xVMDAwMTA0MjcnLCB1J1xVMDAwMTA0MjknLCB1J1xVMDAwMTA0NEUnLAorICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxRjQwRCcsIHUnXFUwMDAxRjQ2RiddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaC5pc251bWVyaWMoKSwgJ3shcn0gaXMgbm90IG51bWVyaWMuJy5mb3JtYXQoY2gpKQorICAgICAgICBmb3IgY2ggaW4gW3UnXFUwMDAxMDEwNycsIHUnXFUwMDAxRDdGNicsIHUnXFUwMDAyM2IxYicsCisgICAgICAgICAgICAgICAgICAgdSdcVTAwMDEwNEEwJywgdSdcVTAwMDFGMTA3J106CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2guaXNudW1lcmljKCksICd7IXJ9IGlzIG51bWVyaWMuJy5mb3JtYXQoY2gpKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF9zdXJyb2dhdGVzKHNlbGYpOgorICAgICAgICAjIHRoaXMgdGVzdCBhY3R1YWxseSBwYXNzZXMgb24gbmFycm93IHRvbywgYnV0IGl0J3MganVzdCBieSBhY2NpZGVudC4KKyAgICAgICAgIyBTdXJyb2dhdGVzIGFyZSBzZWVuIGFzIG5vbi1jYXNlZCBjaGFycywgc28gdSdYXHVEODAwWCcgaXMgYXMKKyAgICAgICAgIyB1cHBlcmNhc2UgYXMgJ1ggWCcKKyAgICAgICAgZm9yIHMgaW4gKHUnYVx1RDgwMGJcdURGRkYnLCB1J2FcdURGRkZiXHVEODAwJywKKyAgICAgICAgICAgICAgICAgIHUnYVx1RDgwMGJcdURGRkZhJywgdSdhXHVERkZGYlx1RDgwMGEnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzbG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc3VwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXN0aXRsZSgpKQorICAgICAgICBmb3IgcyBpbiAodSdBXHVEODAwQlx1REZGRicsIHUnQVx1REZGRkJcdUQ4MDAnLAorICAgICAgICAgICAgICAgICAgdSdBXHVEODAwQlx1REZGRkEnLCB1J0FcdURGRkZCXHVEODAwQScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzbG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzdXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzdGl0bGUoKSkKKworICAgICAgICBmb3IgbWV0aF9uYW1lIGluICgnaXNsb3dlcicsICdpc3VwcGVyJywgJ2lzdGl0bGUnKToKKyAgICAgICAgICAgIG1ldGggPSBnZXRhdHRyKHVuaWNvZGUsIG1ldGhfbmFtZSkKKyAgICAgICAgICAgIGZvciBzIGluICh1J1x1RDgwMCcsIHUnXHVERkZGJywgdSdcdUQ4MDBcdUQ4MDAnLCB1J1x1REZGRlx1REZGRicpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aChzKSwgJyVyLiVzKCkgaXMgRmFsc2UnICUgKHMsIG1ldGhfbmFtZSkpCisKKyAgICAgICAgZm9yIG1ldGhfbmFtZSBpbiAoJ2lzYWxwaGEnLCAnaXNhbG51bScsICdpc2RpZ2l0JywgJ2lzc3BhY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNkZWNpbWFsJywgJ2lzbnVtZXJpYycpOgorICAgICAgICAgICAgbWV0aCA9IGdldGF0dHIodW5pY29kZSwgbWV0aF9uYW1lKQorICAgICAgICAgICAgZm9yIHMgaW4gKHUnXHVEODAwJywgdSdcdURGRkYnLCB1J1x1RDgwMFx1RDgwMCcsIHUnXHVERkZGXHVERkZGJywKKyAgICAgICAgICAgICAgICAgICAgICB1J2FcdUQ4MDBiXHVERkZGJywgdSdhXHVERkZGYlx1RDgwMCcsCisgICAgICAgICAgICAgICAgICAgICAgdSdhXHVEODAwYlx1REZGRmEnLCB1J2FcdURGRkZiXHVEODAwYScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aChzKSwgJyVyLiVzKCkgaXMgRmFsc2UnICUgKHMsIG1ldGhfbmFtZSkpCisKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfbG93ZXIoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3RfbG93ZXIoc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0MjcnLmxvd2VyKCksIHUnXFUwMDAxMDQ0RicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDI3XFUwMDAxMDQyNycubG93ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0NEZcVTAwMDEwNDRGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0MjdcVTAwMDEwNDRGJy5sb3dlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQ0RlxVMDAwMTA0NEYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnWFxVMDAwMTA0Mjd4XFUwMDAxMDQ0RicubG93ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J3hcVTAwMDEwNDRGeFxVMDAwMTA0NEYnKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF91cHBlcihzZWxmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQ0RicudXBwZXIoKSwgdSdcVTAwMDEwNDI3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEZcVTAwMDEwNDRGJy51cHBlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQyN1xVMDAwMTA0MjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQyN1xVMDAwMTA0NEYnLnVwcGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdcVTAwMDEwNDI3XFUwMDAxMDQyNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdYXFUwMDAxMDQyN3hcVTAwMDEwNDRGJy51cHBlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnWFxVMDAwMTA0MjdYXFUwMDAxMDQyNycpCisKKyAgICBAcmVxdWlyZXNfd2lkZV9idWlsZAorICAgIGRlZiB0ZXN0X2NhcGl0YWxpemUoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3RfY2FwaXRhbGl6ZShzZWxmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQ0RicuY2FwaXRhbGl6ZSgpLCB1J1xVMDAwMTA0MjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQ0RlxVMDAwMTA0NEYnLmNhcGl0YWxpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0MjdcVTAwMDEwNDRGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0MjdcVTAwMDEwNDRGJy5jYXBpdGFsaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdcVTAwMDEwNDI3XFUwMDAxMDQ0RicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDRGXFUwMDAxMDQyNycuY2FwaXRhbGl6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQyN1xVMDAwMTA0NEYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnWFxVMDAwMTA0Mjd4XFUwMDAxMDQ0RicuY2FwaXRhbGl6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnWFxVMDAwMTA0NEZ4XFUwMDAxMDQ0RicpCisKKyAgICBAcmVxdWlyZXNfd2lkZV9idWlsZAorICAgIGRlZiB0ZXN0X3RpdGxlKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF90aXRsZShzZWxmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQ0RicudGl0bGUoKSwgdSdcVTAwMDEwNDI3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEZcVTAwMDEwNDRGJy50aXRsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQyN1xVMDAwMTA0NEYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQ0RlxVMDAwMTA0NEYgXFUwMDAxMDQ0RlxVMDAwMTA0NEYnLnRpdGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdcVTAwMDEwNDI3XFUwMDAxMDQ0RiBcVTAwMDEwNDI3XFUwMDAxMDQ0RicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDI3XFUwMDAxMDQ0RiBcVTAwMDEwNDI3XFUwMDAxMDQ0RicudGl0bGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0MjdcVTAwMDEwNDRGIFxVMDAwMTA0MjdcVTAwMDEwNDRGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEZcVTAwMDEwNDI3IFxVMDAwMTA0NEZcVTAwMDEwNDI3Jy50aXRsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQyN1xVMDAwMTA0NEYgXFUwMDAxMDQyN1xVMDAwMTA0NEYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnWFxVMDAwMTA0Mjd4XFUwMDAxMDQ0RiBYXFUwMDAxMDQyN3hcVTAwMDEwNDRGJy50aXRsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnWFxVMDAwMTA0NEZ4XFUwMDAxMDQ0RiBYXFUwMDAxMDQ0RnhcVTAwMDEwNDRGJykKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3Rfc3dhcGNhc2Uoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3Rfc3dhcGNhc2Uoc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEYnLnN3YXBjYXNlKCksIHUnXFUwMDAxMDQyNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDI3Jy5zd2FwY2FzZSgpLCB1J1xVMDAwMTA0NEYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQ0RlxVMDAwMTA0NEYnLnN3YXBjYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdcVTAwMDEwNDI3XFUwMDAxMDQyNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDI3XFUwMDAxMDQ0Ricuc3dhcGNhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0NEZcVTAwMDEwNDI3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEZcVTAwMDEwNDI3Jy5zd2FwY2FzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQyN1xVMDAwMTA0NEYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnWFxVMDAwMTA0Mjd4XFUwMDAxMDQ0Ricuc3dhcGNhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J3hcVTAwMDEwNDRGWFxVMDAwMTA0MjcnKQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBVbmljb2RlIGNvbnRhaW5zIG1ldGhvZAorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgdSdhYmRiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIHUnYmRhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCB1J2JkYWJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIHUnYmRiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCB1J2JkYmEnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsIHUnYmRiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSdhJywgdSdiZGInKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYScsICdiZGInKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsICdiZGJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCAoJ2EnLDEsTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhJywgKDEsTm9uZSwnYScpKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsICgxLE5vbmUsdSdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoJ2EnLDEsTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoMSxOb25lLCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoMSxOb25lLHUnYScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgKCd4JywxLHUneScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgKCd4JywxLE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYWJjZCcsIHUnYWJjeHh4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhYicsIHUnYWJjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FiJywgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYWInLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2FiJywgKDEsTm9uZSx1J2FiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odScnLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsIHUnYWJjJykKKworICAgICAgICAjIElmIHRoZSBmb2xsb3dpbmcgZmFpbHMgZWl0aGVyCisgICAgICAgICMgdGhlIGNvbnRhaW5zIG9wZXJhdG9yIGRvZXMgbm90IHByb3BhZ2F0ZSBVbmljb2RlRXJyb3JzIG9yCisgICAgICAgICMgc29tZW9uZSBoYXMgY2hhbmdlZCB0aGUgZGVmYXVsdCBlbmNvZGluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsICdnXHhlMnRlYXUnLl9fY29udGFpbnNfXywgdSdceGUyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCB1J2dceGUydGVhdScuX19jb250YWluc19fLCAnXHhlMicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1JycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEluKCcnLCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odScnLCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odScnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJywgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnJywgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnXDAnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignXDAnLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSdcMCcsIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J1wwJywgJ1wwYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignXDAnLCB1J1wwYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J1wwJywgdSdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdcMCcsICdhYmNcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1wwJywgdSdhYmNcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdcMCcsIHUnYWJjXDAnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsICdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCB1J1wwYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCB1J1wwYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2FzZGYnLCAnYXNkZicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FzZGYnLCB1J2FzZGYnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYXNkZicsIHUnYXNkZicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSdhc2RmJywgJ2FzZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2FzZGYnLCB1J2FzZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSdhc2RmJywgdSdhc2QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYXNkZicsICcnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhc2RmJywgdScnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYXNkZicsIHUnJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5fX2NvbnRhaW5zX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJhYmMiLl9fY29udGFpbnNfXywgb2JqZWN0KCkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0aW5nKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9mb3JtYXR0aW5nKHNlbGYpCisgICAgICAgICMgVGVzdGluZyBVbmljb2RlIGZvcm1hdHRpbmcgc3RyaW5ncy4uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJXMsICVzIiAlICh1ImFiYyIsICJhYmMiKSwgdSdhYmMsIGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlcywgJXMsICVpLCAlZiwgJTUuMmYiICUgKHUiYWJjIiwgImFiYyIsIDEsIDIsIDMpLCB1J2FiYywgYWJjLCAxLCAyLjAwMDAwMCwgIDMuMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJXMsICVzLCAlaSwgJWYsICU1LjJmIiAlICh1ImFiYyIsICJhYmMiLCAxLCAtMiwgMyksIHUnYWJjLCBhYmMsIDEsIC0yLjAwMDAwMCwgIDMuMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJXMsICVzLCAlaSwgJWYsICU1LjJmIiAlICh1ImFiYyIsICJhYmMiLCAtMSwgLTIsIDMuNSksIHUnYWJjLCBhYmMsIC0xLCAtMi4wMDAwMDAsICAzLjUwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAzLjU3KSwgdSdhYmMsIGFiYywgLTEsIC0yLjAwMDAwMCwgIDMuNTcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJXMsICVzLCAlaSwgJWYsICU1LjJmIiAlICh1ImFiYyIsICJhYmMiLCAtMSwgLTIsIDEwMDMuNTcpLCB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAxMDAzLjU3JykKKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJXIsICVyIiAlICh1ImFiYyIsICJhYmMiKSwgdSJ1J2FiYycsICdhYmMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiUoeClzLCAlKHkpcyIgJSB7J3gnOnUiYWJjIiwgJ3knOiJkZWYifSwgdSdhYmMsIGRlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlKHgpcywgJShceGZjKXMiICUgeyd4Jzp1ImFiYyIsIHUnXHhmYyc6ImRlZiJ9LCB1J2FiYywgZGVmJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnJWMnICUgMHgxMjM0LCB1J1x1MTIzNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHUiJWMiLl9fbW9kX18sIChzeXMubWF4dW5pY29kZSsxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiJS4xXHUxMDMyZiIuX19tb2RfXywgKDEuMC8zKSkKKworICAgICAgICBmb3IgbnVtIGluIHJhbmdlKDB4MDAsMHg4MCk6CisgICAgICAgICAgICBjaGFyID0gY2hyKG51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlYyIgJSBjaGFyLCB1bmljb2RlKGNoYXIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVjIiAlIG51bSwgdW5pY29kZShjaGFyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGFyID09IHUiJWMiICUgY2hhcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGFyID09IHUiJWMiICUgbnVtKQorICAgICAgICAjIElzc3VlIDc2NDkKKyAgICAgICAgZm9yIG51bSBpbiByYW5nZSgweDgwLDB4MTAwKToKKyAgICAgICAgICAgIHVjaGFyID0gdW5pY2hyKG51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWNoYXIsIHUiJWMiICUgbnVtKSAgICMgd29ya3Mgb25seSB3aXRoIGludHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWNoYXIsIHUiJWMiICUgdWNoYXIpICMgYW5kIHVuaWNvZGUgY2hhcnMKKyAgICAgICAgICAgICMgdGhlIGltcGxpY2l0IGRlY29kaW5nIHNob3VsZCBmYWlsIGZvciBub24tYXNjaWkgY2hhcnMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgdSIlYyIuX19tb2RfXywgY2hyKG51bSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIHUiJXMiLl9fbW9kX18sIGNocihudW0pKQorCisgICAgICAgICMgZm9ybWF0dGluZyBqb2JzIGRlbGVnYXRlZCBmcm9tIHRoZSBzdHJpbmcgaW1wbGVtZW50YXRpb246CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOnUiYWJjIn0sIHUnLi4uYWJjLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6ImFiYyJ9LCAnLi4uYWJjLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7dSdmb28nOiJhYmMifSwgJy4uLmFiYy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUge3UnZm9vJzp1ImFiYyJ9LCB1Jy4uLmFiYy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUge3UnZm9vJzp1ImFiYyIsJ2RlZic6MTIzfSwgIHUnLi4uYWJjLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7dSdmb28nOnUiYWJjIix1J2RlZic6MTIzfSwgdScuLi5hYmMuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lcy4uLiVzLi4uJXMuLi4lcy4uLicgJSAoMSwyLDMsdSJhYmMiKSwgdScuLi4xLi4uMi4uLjMuLi5hYmMuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lJS4uLiUlcy4uLiVzLi4uJXMuLi4lcy4uLiVzLi4uJyAlICgxLDIsMyx1ImFiYyIpLCB1Jy4uLiUuLi4lcy4uLjEuLi4yLi4uMy4uLmFiYy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiVzLi4uJyAlIHUiYWJjIiwgdScuLi5hYmMuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclKnMnICUgKDUsdSdhYmMnLCksIHUnICBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclKnMnICUgKC01LHUnYWJjJywpLCB1J2FiYyAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJSouKnMnICUgKDUsMix1J2FiYycsKSwgdScgICBhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyUqLipzJyAlICg1LDMsdSdhYmMnLCksIHUnICBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclaSAlKi4qcycgJSAoMTAsIDUsMyx1J2FiYycsKSwgdScxMCAgIGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVpJXMgJSouKnMnICUgKDEwLCAzLCA1LCAzLCB1J2FiYycsKSwgdScxMDMgICBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclYycgJSB1J2EnLCB1J2EnKQorICAgICAgICBjbGFzcyBXcmFwcGVyOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUnXHUxMjM0JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclcycgJSBXcmFwcGVyKCksIHUnXHUxMjM0JykKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfZm9ybWF0dGluZ19odWdlX3ByZWNpc2lvbihzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IElOVF9NQVgKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9IHUiJS57fWYiLmZvcm1hdChJTlRfTUFYICsgMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHJlc3VsdCA9IGZvcm1hdF9zdHJpbmcgJSAyLjM0CisKKyAgICBkZWYgdGVzdF9mb3JtYXR0aW5nX2h1Z2Vfd2lkdGgoc2VsZik6CisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSB1IiV7fWYiLmZvcm1hdChzeXMubWF4c2l6ZSArIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXRfc3RyaW5nICUgMi4zNAorCisgICAgZGVmIHRlc3Rfc3RhcnRzd2l0aF9lbmRzd2l0aF9lcnJvcnMoc2VsZik6CisgICAgICAgIGZvciBtZXRoIGluICh1J2Zvbycuc3RhcnRzd2l0aCwgdSdmb28nLmVuZHN3aXRoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yKToKKyAgICAgICAgICAgICAgICBtZXRoKCdceGZmJykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBtZXRoKFsnZiddKQorICAgICAgICAgICAgZXhjID0gc3RyKGNtLmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3VuaWNvZGUnLCBleGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdzdHInLCBleGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCd0dXBsZScsIGV4YykKKworICAgIEB0ZXN0X3N1cHBvcnQucnVuX3dpdGhfbG9jYWxlKCdMQ19BTEwnLCAnZGVfREUnLCAnZnJfRlInKQorICAgIGRlZiB0ZXN0X2Zvcm1hdF9mbG9hdChzZWxmKToKKyAgICAgICAgIyBzaG91bGQgbm90IGZvcm1hdCB3aXRoIGEgY29tbWEsIGJ1dCBhbHdheXMgd2l0aCBDIGxvY2FsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnMS4wJywgdSclLjFmJyAlIDEuMCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICAjIHVuaWNvZGUob2JqKSB0ZXN0cyAodGhpcyBtYXBzIHRvIFB5T2JqZWN0X1VuaWNvZGUoKSBhdCBDIGxldmVsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1bmljb2RlKHUndW5pY29kZSByZW1haW5zIHVuaWNvZGUnKSwKKyAgICAgICAgICAgIHUndW5pY29kZSByZW1haW5zIHVuaWNvZGUnCisgICAgICAgICkKKworICAgICAgICBjbGFzcyBVbmljb2RlU3ViY2xhc3ModW5pY29kZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHVuaWNvZGUoVW5pY29kZVN1YmNsYXNzKCd1bmljb2RlIHN1YmNsYXNzIGJlY29tZXMgdW5pY29kZScpKSwKKyAgICAgICAgICAgIHUndW5pY29kZSBzdWJjbGFzcyBiZWNvbWVzIHVuaWNvZGUnCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdW5pY29kZSgnc3RyaW5ncyBhcmUgY29udmVydGVkIHRvIHVuaWNvZGUnKSwKKyAgICAgICAgICAgIHUnc3RyaW5ncyBhcmUgY29udmVydGVkIHRvIHVuaWNvZGUnCisgICAgICAgICkKKworICAgICAgICBjbGFzcyBVbmljb2RlQ29tcGF0OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi54CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHVuaWNvZGUoVW5pY29kZUNvbXBhdCgnX191bmljb2RlX18gY29tcGF0aWJsZSBvYmplY3RzIGFyZSByZWNvZ25pemVkJykpLAorICAgICAgICAgICAgdSdfX3VuaWNvZGVfXyBjb21wYXRpYmxlIG9iamVjdHMgYXJlIHJlY29nbml6ZWQnKQorCisgICAgICAgIGNsYXNzIFN0cmluZ0NvbXBhdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi54CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHVuaWNvZGUoU3RyaW5nQ29tcGF0KCdfX3N0cl9fIGNvbXBhdGlibGUgb2JqZWN0cyBhcmUgcmVjb2duaXplZCcpKSwKKyAgICAgICAgICAgIHUnX19zdHJfXyBjb21wYXRpYmxlIG9iamVjdHMgYXJlIHJlY29nbml6ZWQnCisgICAgICAgICkKKworICAgICAgICAjIHVuaWNvZGUob2JqKSBpcyBjb21wYXRpYmxlIHRvIHN0cigpOgorCisgICAgICAgIG8gPSBTdHJpbmdDb21wYXQoJ3VuaWNvZGUob2JqKSBpcyBjb21wYXRpYmxlIHRvIHN0cigpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKG8pLCB1J3VuaWNvZGUob2JqKSBpcyBjb21wYXRpYmxlIHRvIHN0cigpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobyksICd1bmljb2RlKG9iaikgaXMgY29tcGF0aWJsZSB0byBzdHIoKScpCisKKyAgICAgICAgIyAlLWZvcm1hdHRpbmcgYW5kIC5fX3VuaWNvZGVfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSclcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVDb21wYXQodSJ1JyVzJyAlIG9iaiB1c2VzIG9iai5fX3VuaWNvZGVfXygpIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSJ1JyVzJyAlIG9iaiB1c2VzIG9iai5fX3VuaWNvZGVfXygpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1JyVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZUNvbXBhdCh1InUnJXMnICUgb2JqIGZhbGxzIGJhY2sgdG8gb2JqLl9fc3RyX18oKSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUidSclcycgJSBvYmogZmFsbHMgYmFjayB0byBvYmouX19zdHJfXygpIikKKworICAgICAgICBmb3Igb2JqIGluICgxMjMsIDEyMy40NSwgMTIzTCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUob2JqKSwgdW5pY29kZShzdHIob2JqKSkpCisKKyAgICAgICAgIyB1bmljb2RlKG9iaiwgZW5jb2RpbmcsIGVycm9yKSB0ZXN0cyAodGhpcyBtYXBzIHRvCisgICAgICAgICMgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KCkgYXQgQyBsZXZlbCkKKworICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICB1bmljb2RlLAorICAgICAgICAgICAgICAgIHUnZGVjb2RpbmcgdW5pY29kZSBpcyBub3Qgc3VwcG9ydGVkJywKKyAgICAgICAgICAgICAgICAndXRmLTgnLAorICAgICAgICAgICAgICAgICdzdHJpY3QnCisgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHVuaWNvZGUoJ3N0cmluZ3MgYXJlIGRlY29kZWQgdG8gdW5pY29kZScsICd1dGYtOCcsICdzdHJpY3QnKSwKKyAgICAgICAgICAgIHUnc3RyaW5ncyBhcmUgZGVjb2RlZCB0byB1bmljb2RlJworICAgICAgICApCisKKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgYnVmID0gYnVmZmVyKCdjaGFyYWN0ZXIgYnVmZmVycyBhcmUgZGVjb2RlZCB0byB1bmljb2RlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgdW5pY29kZSgKKyAgICAgICAgICAgICAgICAgICAgYnVmLAorICAgICAgICAgICAgICAgICAgICAndXRmLTgnLAorICAgICAgICAgICAgICAgICAgICAnc3RyaWN0JworICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgdSdjaGFyYWN0ZXIgYnVmZmVycyBhcmUgZGVjb2RlZCB0byB1bmljb2RlJworICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdW5pY29kZSwgNDIsIDQyLCA0MikKKworICAgIGRlZiB0ZXN0X2NvZGVjc191dGY3KHNlbGYpOgorICAgICAgICB1dGZUZXN0cyA9IFsKKyAgICAgICAgICAgICh1J0FcdTIyNjJcdTAzOTEuJywgJ0ErSW1JRGtRLicpLCAgICAgICAgICAgICAjIFJGQzIxNTIgZXhhbXBsZQorICAgICAgICAgICAgKHUnSGkgTW9tIC1cdTI2M2EtIScsICdIaSBNb20gLStKam8tLSEnKSwgICAgICMgUkZDMjE1MiBleGFtcGxlCisgICAgICAgICAgICAodSdcdTY1RTVcdTY3MkNcdThBOUUnLCAnK1plVm5MSXFlLScpLCAgICAgICAgIyBSRkMyMTUyIGV4YW1wbGUKKyAgICAgICAgICAgICh1J0l0ZW0gMyBpcyBcdTAwYTMxLicsICdJdGVtIDMgaXMgK0FLTS0xLicpLCAjIFJGQzIxNTIgZXhhbXBsZQorICAgICAgICAgICAgKHUnKycsICcrLScpLAorICAgICAgICAgICAgKHUnKy0nLCAnKy0tJyksCisgICAgICAgICAgICAodScrPycsICcrLT8nKSwKKyAgICAgICAgICAgICh1J1w/JywgJytBRnc/JyksCisgICAgICAgICAgICAodScrPycsICcrLT8nKSwKKyAgICAgICAgICAgICh1cidcXD8nLCAnK0FGd0FYQT8nKSwKKyAgICAgICAgICAgICh1cidcXFw/JywgJytBRndBWEFCYz8nKSwKKyAgICAgICAgICAgICh1cicrKy0tJywgJystKy0tLScpLAorICAgICAgICAgICAgKHUnXFUwMDBhYmNkZScsICcrMm0vYzNnLScpLCAgICAgICAgICAgICAgICAgICMgc3Vycm9nYXRlIHBhaXJzCisgICAgICAgICAgICAodScvJywgJy8nKSwKKyAgICAgICAgXQorCisgICAgICAgIGZvciAoeCwgeSkgaW4gdXRmVGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZW5jb2RlKCd1dGYtNycpLCB5KQorCisgICAgICAgICMgVW5wYWlyZWQgc3Vycm9nYXRlcyBhcmUgcGFzc2VkIHRocm91Z2gKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1RDgwMScuZW5jb2RlKCd1dGYtNycpLCAnKzJBRS0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHVEODAxeCcuZW5jb2RlKCd1dGYtNycpLCAnKzJBRS14JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1REMwMScuZW5jb2RlKCd1dGYtNycpLCAnKzNBRS0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHVEQzAxeCcuZW5jb2RlKCd1dGYtNycpLCAnKzNBRS14JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnKzJBRS0nLmRlY29kZSgndXRmLTcnKSwgdSdcdUQ4MDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcrMkFFLXgnLmRlY29kZSgndXRmLTcnKSwgdSdcdUQ4MDF4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnKzNBRS0nLmRlY29kZSgndXRmLTcnKSwgdSdcdURDMDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcrM0FFLXgnLmRlY29kZSgndXRmLTcnKSwgdSdcdURDMDF4JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHVEODAxXFUwMDBhYmNkZScuZW5jb2RlKCd1dGYtNycpLCAnKzJBSGFiOXplLScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJysyQUhhYjl6ZS0nLmRlY29kZSgndXRmLTcnKSwgdSdcdUQ4MDFcVTAwMGFiY2RlJykKKworICAgICAgICAjIERpcmVjdCBlbmNvZGVkIGNoYXJhY3RlcnMKKyAgICAgICAgc2V0X2QgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iCisgICAgICAgICMgT3B0aW9uYWwgZGlyZWN0IGNoYXJhY3RlcnMKKyAgICAgICAgc2V0X28gPSAnISIjJCUmKjs8PT5AW11eX2B7fH0nCisgICAgICAgIGZvciBjIGluIHNldF9kOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmVuY29kZSgndXRmNycpLCBjLmVuY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1dGY3JyksIHVuaWNvZGUoYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYyA9PSBjLmVuY29kZSgnYXNjaWknKS5kZWNvZGUoJ3V0ZjcnKSkKKyAgICAgICAgZm9yIGMgaW4gc2V0X286CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZW5jb2RlKCdhc2NpaScpLmRlY29kZSgndXRmNycpLCB1bmljb2RlKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgPT0gYy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1dGY3JykpCisKKyAgICBkZWYgdGVzdF9jb2RlY3NfdXRmOChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1JycuZW5jb2RlKCd1dGYtOCcpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1MjBhYycuZW5jb2RlKCd1dGYtOCcpLCAnXHhlMlx4ODJceGFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1ZDgwMFx1ZGMwMicuZW5jb2RlKCd1dGYtOCcpLCAnXHhmMFx4OTBceDgwXHg4MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdWQ4NGRcdWRjNTYnLmVuY29kZSgndXRmLTgnKSwgJ1x4ZjBceGEzXHg5MVx4OTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHVkODAwJy5lbmNvZGUoJ3V0Zi04JyksICdceGVkXHhhMFx4ODAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHVkYzAwJy5lbmNvZGUoJ3V0Zi04JyksICdceGVkXHhiMFx4ODAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKHUnXHVkODAwXHVkYzAyJyoxMDAwKS5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAgICAnXHhmMFx4OTBceDgwXHg4MicqMTAwMAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1J1x1NmI2M1x1NzhiYVx1MzA2Ylx1OGEwMFx1MzA0Nlx1MzA2OFx1N2ZmYlx1OGEzM1x1MzA2ZicKKyAgICAgICAgICAgIHUnXHUzMDU1XHUzMDhjXHUzMDY2XHUzMDQ0XHUzMDdlXHUzMDViXHUzMDkzXHUzMDAyXHU0ZTAwJworICAgICAgICAgICAgdSdcdTkwZThcdTMwNmZcdTMwYzlcdTMwYTRcdTMwYzRcdThhOWVcdTMwNjdcdTMwNTlcdTMwNGMnCisgICAgICAgICAgICB1J1x1MzAwMVx1MzA0Mlx1MzA2OFx1MzA2Zlx1MzA2N1x1MzA1Zlx1MzA4OVx1MzA4MVx1MzA2NycKKyAgICAgICAgICAgIHUnXHUzMDU5XHUzMDAyXHU1YjlmXHU5NjliXHUzMDZiXHUzMDZmXHUzMDBjV2VubiBpc3QgZGFzJworICAgICAgICAgICAgdScgTnVuc3R1Y2sgZ2l0IHVuZCcuZW5jb2RlKCd1dGYtOCcpLAorICAgICAgICAgICAgJ1x4ZTZceGFkXHhhM1x4ZTdceGEyXHhiYVx4ZTNceDgxXHhhYlx4ZThceGE4XHg4MFx4ZTNceDgxJworICAgICAgICAgICAgJ1x4ODZceGUzXHg4MVx4YThceGU3XHhiZlx4YmJceGU4XHhhOFx4YjNceGUzXHg4MVx4YWZceGUzJworICAgICAgICAgICAgJ1x4ODFceDk1XHhlM1x4ODJceDhjXHhlM1x4ODFceGE2XHhlM1x4ODFceDg0XHhlM1x4ODFceGJlJworICAgICAgICAgICAgJ1x4ZTNceDgxXHg5Ylx4ZTNceDgyXHg5M1x4ZTNceDgwXHg4Mlx4ZTRceGI4XHg4MFx4ZTlceDgzJworICAgICAgICAgICAgJ1x4YThceGUzXHg4MVx4YWZceGUzXHg4M1x4ODlceGUzXHg4Mlx4YTRceGUzXHg4M1x4ODRceGU4JworICAgICAgICAgICAgJ1x4YWFceDllXHhlM1x4ODFceGE3XHhlM1x4ODFceDk5XHhlM1x4ODFceDhjXHhlM1x4ODBceDgxJworICAgICAgICAgICAgJ1x4ZTNceDgxXHg4Mlx4ZTNceDgxXHhhOFx4ZTNceDgxXHhhZlx4ZTNceDgxXHhhN1x4ZTNceDgxJworICAgICAgICAgICAgJ1x4OWZceGUzXHg4Mlx4ODlceGUzXHg4Mlx4ODFceGUzXHg4MVx4YTdceGUzXHg4MVx4OTlceGUzJworICAgICAgICAgICAgJ1x4ODBceDgyXHhlNVx4YWVceDlmXHhlOVx4OWFceDliXHhlM1x4ODFceGFiXHhlM1x4ODFceGFmJworICAgICAgICAgICAgJ1x4ZTNceDgwXHg4Y1dlbm4gaXN0IGRhcyBOdW5zdHVjayBnaXQgdW5kJworICAgICAgICApCisKKyAgICAgICAgIyBVVEYtOCBzcGVjaWZpYyBkZWNvZGluZyB0ZXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ1x4ZjBceGEzXHg5MVx4OTYnLCAndXRmLTgnKSwgdSdcVTAwMDIzNDU2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdceGYwXHg5MFx4ODBceDgyJywgJ3V0Zi04JyksIHUnXFUwMDAxMDAwMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnXHhlMlx4ODJceGFjJywgJ3V0Zi04JyksIHUnXHUyMGFjJykKKworICAgICAgICAjIE90aGVyIHBvc3NpYmxlIHV0Zi04IHRlc3QgY2FzZXM6CisgICAgICAgICMgKiBzdHJpY3QgZGVjb2RpbmcgdGVzdGluZyBmb3IgYWxsIG9mIHRoZQorICAgICAgICAjICAgVVRGOF9FUlJPUiBjYXNlcyBpbiBQeVVuaWNvZGVfRGVjb2RlVVRGOAorCisgICAgZGVmIHRlc3RfdXRmOF9kZWNvZGVfdmFsaWRfc2VxdWVuY2VzKHNlbGYpOgorICAgICAgICBzZXF1ZW5jZXMgPSBbCisgICAgICAgICAgICAjIHNpbmdsZSBieXRlCisgICAgICAgICAgICAoJ1x4MDAnLCB1J1x4MDAnKSwgKCdhJywgdSdhJyksICgnXHg3ZicsIHUnXHg3ZicpLAorICAgICAgICAgICAgIyAyIGJ5dGVzCisgICAgICAgICAgICAoJ1x4YzJceDgwJywgdSdceDgwJyksICgnXHhkZlx4YmYnLCB1J1x1MDdmZicpLAorICAgICAgICAgICAgIyAzIGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZTBceGEwXHg4MCcsIHUnXHUwODAwJyksICgnXHhlZFx4OWZceGJmJywgdSdcdWQ3ZmYnKSwKKyAgICAgICAgICAgICgnXHhlZVx4ODBceDgwJywgdSdcdUUwMDAnKSwgKCdceGVmXHhiZlx4YmYnLCB1J1x1ZmZmZicpLAorICAgICAgICAgICAgIyA0IGJ5dGVzCisgICAgICAgICAgICAoJ1x4RjBceDkwXHg4MFx4ODAnLCB1J1xVMDAwMTAwMDAnKSwKKyAgICAgICAgICAgICgnXHhmNFx4OGZceGJmXHhiZicsIHUnXFUwMDEwRkZGRicpCisgICAgICAgIF0KKyAgICAgICAgZm9yIHNlcSwgcmVzIGluIHNlcXVlbmNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VxLmRlY29kZSgndXRmLTgnKSwgcmVzKQorCisgICAgICAgIGZvciBjaCBpbiBtYXAodW5pY2hyLCByYW5nZSgwLCBzeXMubWF4dW5pY29kZSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaCwgY2guZW5jb2RlKCd1dGYtOCcpLmRlY29kZSgndXRmLTgnKSkKKworICAgIGRlZiB0ZXN0X3V0ZjhfZGVjb2RlX2ludmFsaWRfc2VxdWVuY2VzKHNlbGYpOgorICAgICAgICAjIGNvbnRpbnVhdGlvbiBieXRlcyBpbiBhIHNlcXVlbmNlIG9mIDIsIDMsIG9yIDQgYnl0ZXMKKyAgICAgICAgY29udGludWF0aW9uX2J5dGVzID0gbWFwKGNociwgcmFuZ2UoMHg4MCwgMHhDMCkpCisgICAgICAgICMgc3RhcnQgYnl0ZXMgb2YgYSAyLWJ5dGUgc2VxdWVuY2UgZXF1aXZhbGVudCB0byBjb2RlcG9pbnRzIDwgMHg3RgorICAgICAgICBpbnZhbGlkXzJCX3NlcV9zdGFydF9ieXRlcyA9IG1hcChjaHIsIHJhbmdlKDB4QzAsIDB4QzIpKQorICAgICAgICAjIHN0YXJ0IGJ5dGVzIG9mIGEgNC1ieXRlIHNlcXVlbmNlIGVxdWl2YWxlbnQgdG8gY29kZXBvaW50cyA+IDB4MTBGRkZGCisgICAgICAgIGludmFsaWRfNEJfc2VxX3N0YXJ0X2J5dGVzID0gbWFwKGNociwgcmFuZ2UoMHhGNSwgMHhGOCkpCisgICAgICAgIGludmFsaWRfc3RhcnRfYnl0ZXMgPSAoCisgICAgICAgICAgICBjb250aW51YXRpb25fYnl0ZXMgKyBpbnZhbGlkXzJCX3NlcV9zdGFydF9ieXRlcyArCisgICAgICAgICAgICBpbnZhbGlkXzRCX3NlcV9zdGFydF9ieXRlcyArIG1hcChjaHIsIHJhbmdlKDB4RjcsIDB4MTAwKSkKKyAgICAgICAgKQorCisgICAgICAgIGZvciBieXRlIGluIGludmFsaWRfc3RhcnRfYnl0ZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGJ5dGUuZGVjb2RlLCAndXRmLTgnKQorCisgICAgICAgIGZvciBzYiBpbiBpbnZhbGlkXzJCX3NlcV9zdGFydF9ieXRlczoKKyAgICAgICAgICAgIGZvciBjYiBpbiBjb250aW51YXRpb25fYnl0ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCAoc2IrY2IpLmRlY29kZSwgJ3V0Zi04JykKKworICAgICAgICBmb3Igc2IgaW4gaW52YWxpZF80Ql9zZXFfc3RhcnRfYnl0ZXM6CisgICAgICAgICAgICBmb3IgY2IxIGluIGNvbnRpbnVhdGlvbl9ieXRlc1s6M106CisgICAgICAgICAgICAgICAgZm9yIGNiMyBpbiBjb250aW51YXRpb25fYnl0ZXNbOjNdOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYitjYjErJ1x4ODAnK2NiMykuZGVjb2RlLCAndXRmLTgnKQorCisgICAgICAgIGZvciBjYiBpbiBtYXAoY2hyLCByYW5nZSgweDgwLCAweEEwKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4RTAnK2NiKydceDgwJykuZGVjb2RlLCAndXRmLTgnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdceEUwJytjYisnXHhCRicpLmRlY29kZSwgJ3V0Zi04JykKKyAgICAgICAgIyBYWFg6IHN1cnJvZ2F0ZXMgc2hvdWxkbid0IGJlIHZhbGlkIFVURi04IQorICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3ZlcnNpb25zL1VuaWNvZGU1LjIuMC9jaDAzLnBkZgorICAgICAgICAjICh0YWJsZSAzLTcpIGFuZCBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzNjI5LnR4dAorICAgICAgICAjZm9yIGNiIGluIG1hcChjaHIsIHJhbmdlKDB4QTAsIDB4QzApKToKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjKCdceEVEJytjYisnXHg4MCcpLmRlY29kZSwgJ3V0Zi04JykKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjKCdceEVEJytjYisnXHhCRicpLmRlY29kZSwgJ3V0Zi04JykKKyAgICAgICAgIyBidXQgc2luY2UgdGhleSBhcmUgdmFsaWQgb24gUHl0aG9uIDIgYWRkIGEgdGVzdCBmb3IgdGhhdDoKKyAgICAgICAgZm9yIGNiLCBzdXJyb2dhdGUgaW4gemlwKG1hcChjaHIsIHJhbmdlKDB4QTAsIDB4QzApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCh1bmljaHIsIHJhbmdlKDB4ZDgwMCwgMHhlMDAwLCA2NCkpKToKKyAgICAgICAgICAgIGVuY29kZWQgPSAnXHhFRCcrY2IrJ1x4ODAnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZWQuZGVjb2RlKCd1dGYtOCcpLCBzdXJyb2dhdGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1cnJvZ2F0ZS5lbmNvZGUoJ3V0Zi04JyksIGVuY29kZWQpCisKKyAgICAgICAgZm9yIGNiIGluIG1hcChjaHIsIHJhbmdlKDB4ODAsIDB4OTApKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnXHhGMCcrY2IrJ1x4ODBceDgwJykuZGVjb2RlLCAndXRmLTgnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdceEYwJytjYisnXHhCRlx4QkYnKS5kZWNvZGUsICd1dGYtOCcpCisgICAgICAgIGZvciBjYiBpbiBtYXAoY2hyLCByYW5nZSgweDkwLCAweEMwKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4RjQnK2NiKydceDgwXHg4MCcpLmRlY29kZSwgJ3V0Zi04JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnXHhGNCcrY2IrJ1x4QkZceEJGJykuZGVjb2RlLCAndXRmLTgnKQorCisgICAgZGVmIHRlc3RfaXNzdWU4MjcxKHNlbGYpOgorICAgICAgICAjIElzc3VlICM4MjcxOiBkdXJpbmcgdGhlIGRlY29kaW5nIG9mIGFuIGludmFsaWQgVVRGLTggYnl0ZSBzZXF1ZW5jZSwKKyAgICAgICAgIyBvbmx5IHRoZSBzdGFydCBieXRlIGFuZCB0aGUgY29udGludWF0aW9uIGJ5dGUocykgYXJlIG5vdyBjb25zaWRlcmVkCisgICAgICAgICMgaW52YWxpZCwgaW5zdGVhZCBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmllZCBieSB0aGUgc3RhcnQgYnl0ZS4KKyAgICAgICAgIyBTZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy92ZXJzaW9ucy9Vbmljb2RlNS4yLjAvY2gwMy5wZGYgKHBhZ2UgOTUsCisgICAgICAgICMgdGFibGUgMy04LCBSb3cgMikgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFsZ29yaXRobSB1c2VkLgorICAgICAgICBGRkZEID0gdSdcdWZmZmQnCisgICAgICAgIHNlcXVlbmNlcyA9IFsKKyAgICAgICAgICAgICMgaW52YWxpZCBzdGFydCBieXRlcworICAgICAgICAgICAgKCdceDgwJywgRkZGRCksICMgY29udGludWF0aW9uIGJ5dGUKKyAgICAgICAgICAgICgnXHg4MFx4ODAnLCBGRkZEKjIpLCAjIDIgY29udGludWF0aW9uIGJ5dGVzCisgICAgICAgICAgICAoJ1x4YzAnLCBGRkZEKSwKKyAgICAgICAgICAgICgnXHhjMFx4YzAnLCBGRkZEKjIpLAorICAgICAgICAgICAgKCdceGMxJywgRkZGRCksCisgICAgICAgICAgICAoJ1x4YzFceGMwJywgRkZGRCoyKSwKKyAgICAgICAgICAgICgnXHhjMFx4YzEnLCBGRkZEKjIpLAorICAgICAgICAgICAgIyB3aXRoIHN0YXJ0IGJ5dGUgb2YgYSAyLWJ5dGUgc2VxdWVuY2UKKyAgICAgICAgICAgICgnXHhjMicsIEZGRkQpLCAjIG9ubHkgdGhlIHN0YXJ0IGJ5dGUKKyAgICAgICAgICAgICgnXHhjMlx4YzInLCBGRkZEKjIpLCAjIDIgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHhjMlx4YzJceGMyJywgRkZGRCozKSwgIyAyIHN0YXJ0IGJ5dGVzCisgICAgICAgICAgICAoJ1x4YzJceDQxJywgRkZGRCsnQScpLCAjIGludmFsaWQgY29udGludWF0aW9uIGJ5dGUKKyAgICAgICAgICAgICMgd2l0aCBzdGFydCBieXRlIG9mIGEgMy1ieXRlIHNlcXVlbmNlCisgICAgICAgICAgICAoJ1x4ZTEnLCBGRkZEKSwgIyBvbmx5IHRoZSBzdGFydCBieXRlCisgICAgICAgICAgICAoJ1x4ZTFceGUxJywgRkZGRCoyKSwgIyAyIHN0YXJ0IGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZTFceGUxXHhlMScsIEZGRkQqMyksICMgMyBzdGFydCBieXRlcworICAgICAgICAgICAgKCdceGUxXHhlMVx4ZTFceGUxJywgRkZGRCo0KSwgIyA0IHN0YXJ0IGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZTFceDgwJywgRkZGRCksICMgb25seSAxIGNvbnRpbnVhdGlvbiBieXRlCisgICAgICAgICAgICAoJ1x4ZTFceDQxJywgRkZGRCsnQScpLCAjIGludmFsaWQgY29udGludWF0aW9uIGJ5dGUKKyAgICAgICAgICAgICgnXHhlMVx4NDFceDgwJywgRkZGRCsnQScrRkZGRCksICMgaW52YWxpZCBjYiBmb2xsb3dlZCBieSB2YWxpZCBjYgorICAgICAgICAgICAgKCdceGUxXHg0MVx4NDEnLCBGRkZEKydBQScpLCAjIDIgaW52YWxpZCBjb250aW51YXRpb24gYnl0ZXMKKyAgICAgICAgICAgICgnXHhlMVx4ODBceDQxJywgRkZGRCsnQScpLCAjIG9ubHkgMSB2YWxpZCBjb250aW51YXRpb24gYnl0ZQorICAgICAgICAgICAgKCdceGUxXHg4MFx4ZTFceDQxJywgRkZGRCoyKydBJyksICMgMSB2YWxpZCBhbmQgdGhlIG90aGVyIGludmFsaWQKKyAgICAgICAgICAgICgnXHhlMVx4NDFceGUxXHg4MCcsIEZGRkQrJ0EnK0ZGRkQpLCAjIDEgaW52YWxpZCBhbmQgdGhlIG90aGVyIHZhbGlkCisgICAgICAgICAgICAjIHdpdGggc3RhcnQgYnl0ZSBvZiBhIDQtYnl0ZSBzZXF1ZW5jZQorICAgICAgICAgICAgKCdceGYxJywgRkZGRCksICMgb25seSB0aGUgc3RhcnQgYnl0ZQorICAgICAgICAgICAgKCdceGYxXHhmMScsIEZGRkQqMiksICMgMiBzdGFydCBieXRlcworICAgICAgICAgICAgKCdceGYxXHhmMVx4ZjEnLCBGRkZEKjMpLCAjIDMgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHhmMVx4ZjFceGYxXHhmMScsIEZGRkQqNCksICMgNCBzdGFydCBieXRlcworICAgICAgICAgICAgKCdceGYxXHhmMVx4ZjFceGYxXHhmMScsIEZGRkQqNSksICMgNSBzdGFydCBieXRlcworICAgICAgICAgICAgKCdceGYxXHg4MCcsIEZGRkQpLCAjIG9ubHkgMSBjb250aW51YXRpb24gYnl0ZXMKKyAgICAgICAgICAgICgnXHhmMVx4ODBceDgwJywgRkZGRCksICMgb25seSAyIGNvbnRpbnVhdGlvbiBieXRlcworICAgICAgICAgICAgKCdceGYxXHg4MFx4NDEnLCBGRkZEKydBJyksICMgMSB2YWxpZCBjYiBhbmQgMSBpbnZhbGlkCisgICAgICAgICAgICAoJ1x4ZjFceDgwXHg0MVx4NDEnLCBGRkZEKydBQScpLCAjIDEgdmFsaWQgY2IgYW5kIDEgaW52YWxpZAorICAgICAgICAgICAgKCdceGYxXHg4MFx4ODBceDQxJywgRkZGRCsnQScpLCAjIDIgdmFsaWQgY2IgYW5kIDEgaW52YWxpZAorICAgICAgICAgICAgKCdceGYxXHg0MVx4ODAnLCBGRkZEKydBJytGRkZEKSwgIyAxIGludmFsaWQgY3YgYW5kIDEgdmFsaWQKKyAgICAgICAgICAgICgnXHhmMVx4NDFceDgwXHg4MCcsIEZGRkQrJ0EnK0ZGRkQqMiksICMgMSBpbnZhbGlkIGNiIGFuZCAyIGludmFsaWQKKyAgICAgICAgICAgICgnXHhmMVx4NDFceDgwXHg0MScsIEZGRkQrJ0EnK0ZGRkQrJ0EnKSwgIyAyIGludmFsaWQgY2IgYW5kIDEgaW52YWxpZAorICAgICAgICAgICAgKCdceGYxXHg0MVx4NDFceDgwJywgRkZGRCsnQUEnK0ZGRkQpLCAjIDEgdmFsaWQgY2IgYW5kIDEgaW52YWxpZAorICAgICAgICAgICAgKCdceGYxXHg0MVx4ZjFceDgwJywgRkZGRCsnQScrRkZGRCksCisgICAgICAgICAgICAoJ1x4ZjFceDQxXHg4MFx4ZjEnLCBGRkZEKydBJytGRkZEKjIpLAorICAgICAgICAgICAgKCdceGYxXHhmMVx4ODBceDQxJywgRkZGRCoyKydBJyksCisgICAgICAgICAgICAoJ1x4ZjFceDQxXHhmMVx4ZjEnLCBGRkZEKydBJytGRkZEKjIpLAorICAgICAgICAgICAgIyB3aXRoIGludmFsaWQgc3RhcnQgYnl0ZSBvZiBhIDQtYnl0ZSBzZXF1ZW5jZSAocmZjMjI3OSkKKyAgICAgICAgICAgICgnXHhmNScsIEZGRkQpLCAjIG9ubHkgdGhlIHN0YXJ0IGJ5dGUKKyAgICAgICAgICAgICgnXHhmNVx4ZjUnLCBGRkZEKjIpLCAjIDIgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHhmNVx4ODAnLCBGRkZEKjIpLCAjIG9ubHkgMSBjb250aW51YXRpb24gYnl0ZQorICAgICAgICAgICAgKCdceGY1XHg4MFx4ODAnLCBGRkZEKjMpLCAjIG9ubHkgMiBjb250aW51YXRpb24gYnl0ZQorICAgICAgICAgICAgKCdceGY1XHg4MFx4ODBceDgwJywgRkZGRCo0KSwgIyAzIGNvbnRpbnVhdGlvbiBieXRlcworICAgICAgICAgICAgKCdceGY1XHg4MFx4NDEnLCBGRkZEKjIrJ0EnKSwgIyAgMSB2YWxpZCBjYiBhbmQgMSBpbnZhbGlkCisgICAgICAgICAgICAoJ1x4ZjVceDgwXHg0MVx4ZjUnLCBGRkZEKjIrJ0EnK0ZGRkQpLAorICAgICAgICAgICAgKCdceGY1XHg0MVx4ODBceDgwXHg0MScsIEZGRkQrJ0EnK0ZGRkQqMisnQScpLAorICAgICAgICAgICAgIyB3aXRoIGludmFsaWQgc3RhcnQgYnl0ZSBvZiBhIDUtYnl0ZSBzZXF1ZW5jZSAocmZjMjI3OSkKKyAgICAgICAgICAgICgnXHhmOCcsIEZGRkQpLCAjIG9ubHkgdGhlIHN0YXJ0IGJ5dGUKKyAgICAgICAgICAgICgnXHhmOFx4ZjgnLCBGRkZEKjIpLCAjIDIgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHhmOFx4ODAnLCBGRkZEKjIpLCAjIG9ubHkgb25lIGNvbnRpbnVhdGlvbiBieXRlCisgICAgICAgICAgICAoJ1x4ZjhceDgwXHg0MScsIEZGRkQqMiArICdBJyksICMgMSB2YWxpZCBjYiBhbmQgMSBpbnZhbGlkCisgICAgICAgICAgICAoJ1x4ZjhceDgwXHg4MFx4ODBceDgwJywgRkZGRCo1KSwgIyBpbnZhbGlkIDUgYnl0ZXMgc2VxIHdpdGggNSBieXRlcworICAgICAgICAgICAgIyB3aXRoIGludmFsaWQgc3RhcnQgYnl0ZSBvZiBhIDYtYnl0ZSBzZXF1ZW5jZSAocmZjMjI3OSkKKyAgICAgICAgICAgICgnXHhmYycsIEZGRkQpLCAjIG9ubHkgdGhlIHN0YXJ0IGJ5dGUKKyAgICAgICAgICAgICgnXHhmY1x4ZmMnLCBGRkZEKjIpLCAjIDIgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHhmY1x4ODBceDgwJywgRkZGRCozKSwgIyBvbmx5IDIgY29udGludWF0aW9uIGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZmNceDgwXHg4MFx4ODBceDgwXHg4MCcsIEZGRkQqNiksICMgNiBjb250aW51YXRpb24gYnl0ZXMKKyAgICAgICAgICAgICMgaW52YWxpZCBzdGFydCBieXRlCisgICAgICAgICAgICAoJ1x4ZmUnLCBGRkZEKSwKKyAgICAgICAgICAgICgnXHhmZVx4ODBceDgwJywgRkZGRCozKSwKKyAgICAgICAgICAgICMgb3RoZXIgc2VxdWVuY2VzCisgICAgICAgICAgICAoJ1x4ZjFceDgwXHg0MVx4NDJceDQzJywgdSdcdWZmZmRceDQxXHg0Mlx4NDMnKSwKKyAgICAgICAgICAgICgnXHhmMVx4ODBceGZmXHg0Mlx4NDMnLCB1J1x1ZmZmZFx1ZmZmZFx4NDJceDQzJyksCisgICAgICAgICAgICAoJ1x4ZjFceDgwXHhjMlx4ODFceDQzJywgdSdcdWZmZmRceDgxXHg0MycpLAorICAgICAgICAgICAgKCdceDYxXHhGMVx4ODBceDgwXHhFMVx4ODBceEMyXHg2Mlx4ODBceDYzXHg4MFx4QkZceDY0JywKKyAgICAgICAgICAgICB1J1x4NjFcdUZGRkRcdUZGRkRcdUZGRkRceDYyXHVGRkZEXHg2M1x1RkZGRFx1RkZGRFx4NjQnKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgbiwgKHNlcSwgcmVzKSBpbiBlbnVtZXJhdGUoc2VxdWVuY2VzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgc2VxLmRlY29kZSwgJ3V0Zi04JywgJ3N0cmljdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcS5kZWNvZGUoJ3V0Zi04JywgJ3JlcGxhY2UnKSwgcmVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc2VxKydiJykuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJyksIHJlcysnYicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcS5kZWNvZGUoJ3V0Zi04JywgJ2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMucmVwbGFjZSh1J1x1RkZGRCcsICcnKSkKKworICAgIGRlZiB0ZXN0X2NvZGVjc19pZG5hKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2hldGhlciB0cmFpbGluZyBkb3QgaXMgcHJlc2VydmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJ3d3cucHl0aG9uLm9yZy4iLmVuY29kZSgiaWRuYSIpLCAid3d3LnB5dGhvbi5vcmcuIikKKworICAgIGRlZiB0ZXN0X2NvZGVjc19lcnJvcnMoc2VsZik6CisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKGVuY29kaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHUnQW5kclwyMDIgeCcuZW5jb2RlLCAnYXNjaWknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHUnQW5kclwyMDIgeCcuZW5jb2RlLCAnYXNjaWknLCdzdHJpY3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsJ2lnbm9yZScpLCAiQW5kciB4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknLCdyZXBsYWNlJyksICJBbmRyPyB4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknLCAncmVwbGFjZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsIGVycm9ycz0ncmVwbGFjZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J0FuZHJcMjAyIHgnLmVuY29kZShlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J2lnbm9yZScpKQorCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKGRlY29kaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHVuaWNvZGUsICdBbmRyXDIwMiB4JywgJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1bmljb2RlLCAnQW5kclwyMDIgeCcsICdhc2NpaScsJ3N0cmljdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnQW5kclwyMDIgeCcsJ2FzY2lpJywnaWdub3JlJyksIHUiQW5kciB4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdBbmRyXDIwMiB4JywnYXNjaWknLCdyZXBsYWNlJyksIHUnQW5kclx1RkZGRCB4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiY2RlJy5kZWNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnYWJjZGUnLmRlY29kZSgnYXNjaWknLCBlcnJvcnM9J2lnbm9yZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYWJjZGUnLmRlY29kZSgnYXNjaWknLCAncmVwbGFjZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnYWJjZGUnLmRlY29kZShlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J3JlcGxhY2UnKSkKKworICAgICAgICAjIEVycm9yIGhhbmRsaW5nICh1bmtub3duIGNoYXJhY3RlciBuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXFxOe2Zvb314eCIuZGVjb2RlKCJ1bmljb2RlLWVzY2FwZSIsICJpZ25vcmUiKSwgdSJ4eCIpCisKKyAgICAgICAgIyBFcnJvciBoYW5kbGluZyAodHJ1bmNhdGVkIGVzY2FwZSBzZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCAiXFwiLmRlY29kZSwgInVuaWNvZGUtZXNjYXBlIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICJoZWxsbyIuZGVjb2RlLCAidGVzdC51bmljb2RlMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdW5pY29kZSwgImhlbGxvIiwgInRlc3QudW5pY29kZTIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiaGVsbG8iLmVuY29kZSwgInRlc3QudW5pY29kZTEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiaGVsbG8iLmVuY29kZSwgInRlc3QudW5pY29kZTIiKQorICAgICAgICAjIGV4ZWN1dGVzIFB5VW5pY29kZV9FbmNvZGUoKQorICAgICAgICBpbXBvcnQgaW1wCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgSW1wb3J0RXJyb3IsCisgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsCisgICAgICAgICAgICAibm9uLWV4aXN0aW5nIG1vZHVsZSIsCisgICAgICAgICAgICBbdSJub24tZXhpc3RpbmcgZGlyIl0KKyAgICAgICAgKQorCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKHdyb25nIGFyZ3VtZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImhlbGxvIi5lbmNvZGUsIDQyLCA0MiwgNDIpCisKKyAgICAgICAgIyBFcnJvciBoYW5kbGluZyAoUHlVbmljb2RlX0VuY29kZURlY2ltYWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBpbnQsIHUiXHUwMjAwIikKKworICAgIGRlZiB0ZXN0X2NvZGVjcyhzZWxmKToKKyAgICAgICAgIyBFbmNvZGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnaGVsbG8nLmVuY29kZSgnYXNjaWknKSwgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2hlbGxvJy5lbmNvZGUoJ3V0Zi03JyksICdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdoZWxsbycuZW5jb2RlKCd1dGYtOCcpLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnaGVsbG8nLmVuY29kZSgndXRmOCcpLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnaGVsbG8nLmVuY29kZSgndXRmLTE2LWxlJyksICdoXDAwMGVcMDAwbFwwMDBsXDAwMG9cMDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2hlbGxvJy5lbmNvZGUoJ3V0Zi0xNi1iZScpLCAnXDAwMGhcMDAwZVwwMDBsXDAwMGxcMDAwbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdoZWxsbycuZW5jb2RlKCdsYXRpbi0xJyksICdoZWxsbycpCisKKyAgICAgICAgIyBSb3VuZHRyaXAgc2FmZXR5IGZvciBCTVAgKGp1c3QgdGhlIGZpcnN0IDEwMjQgY2hhcnMpCisgICAgICAgIGZvciBjIGluIHhyYW5nZSgxMDI0KToKKyAgICAgICAgICAgIHUgPSB1bmljaHIoYykKKyAgICAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoJ3V0Zi03JywgJ3V0Zi04JywgJ3V0Zi0xNicsICd1dGYtMTYtbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXRmLTE2LWJlJywgJ3Jhd191bmljb2RlX2VzY2FwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmljb2RlX2VzY2FwZScsICd1bmljb2RlX2ludGVybmFsJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHUuZW5jb2RlKGVuY29kaW5nKSxlbmNvZGluZyksIHUpCisKKyAgICAgICAgIyBSb3VuZHRyaXAgc2FmZXR5IGZvciBCTVAgKGp1c3QgdGhlIGZpcnN0IDI1NiBjaGFycykKKyAgICAgICAgZm9yIGMgaW4geHJhbmdlKDI1Nik6CisgICAgICAgICAgICB1ID0gdW5pY2hyKGMpCisgICAgICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKCdsYXRpbi0xJywpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSh1LmVuY29kZShlbmNvZGluZyksZW5jb2RpbmcpLCB1KQorCisgICAgICAgICMgUm91bmR0cmlwIHNhZmV0eSBmb3IgQk1QIChqdXN0IHRoZSBmaXJzdCAxMjggY2hhcnMpCisgICAgICAgIGZvciBjIGluIHhyYW5nZSgxMjgpOgorICAgICAgICAgICAgdSA9IHVuaWNocihjKQorICAgICAgICAgICAgZm9yIGVuY29kaW5nIGluICgnYXNjaWknLCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHUuZW5jb2RlKGVuY29kaW5nKSxlbmNvZGluZyksIHUpCisKKyAgICAgICAgIyBSb3VuZHRyaXAgc2FmZXR5IGZvciBub24tQk1QIChqdXN0IGEgZmV3IGNoYXJzKQorICAgICAgICB1ID0gdSdcVTAwMDEwMDAxXFUwMDAyMDAwMlxVMDAwMzAwMDNcVTAwMDQwMDA0XFUwMDA1MDAwNScKKyAgICAgICAgZm9yIGVuY29kaW5nIGluICgndXRmLTgnLCAndXRmLTE2JywgJ3V0Zi0xNi1sZScsICd1dGYtMTYtYmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICMncmF3X3VuaWNvZGVfZXNjYXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndW5pY29kZV9lc2NhcGUnLCAndW5pY29kZV9pbnRlcm5hbCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHUuZW5jb2RlKGVuY29kaW5nKSxlbmNvZGluZyksIHUpCisKKyAgICAgICAgIyBVVEYtOCBtdXN0IGJlIHJvdW5kdHJpcCBzYWZlIGZvciBhbGwgVUNTLTIgY29kZSBwb2ludHMKKyAgICAgICAgIyBUaGlzIGV4Y2x1ZGVzIHN1cnJvZ2F0ZXM6IGluIHRoZSBmdWxsIHJhbmdlLCB0aGVyZSB3b3VsZCBiZQorICAgICAgICAjIGEgc3Vycm9nYXRlIHBhaXIgKFx1ZGJmZlx1ZGMwMCksIHdoaWNoIGdldHMgY29udmVydGVkIGJhY2sKKyAgICAgICAgIyB0byBhIG5vbi1CTVAgY2hhcmFjdGVyIChcVTAwMTBmYzAwKQorICAgICAgICB1ID0gdScnLmpvaW4obWFwKHVuaWNociwgcmFuZ2UoMCwweGQ4MDApK3JhbmdlKDB4ZTAwMCwweDEwMDAwKSkpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiAoJ3V0Zi04JywpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHUuZW5jb2RlKGVuY29kaW5nKSxlbmNvZGluZyksIHUpCisKKyAgICBkZWYgdGVzdF9jb2RlY3NfY2hhcm1hcChzZWxmKToKKyAgICAgICAgIyAwLTEyNworICAgICAgICBzID0gJycuam9pbihtYXAoY2hyLCB4cmFuZ2UoMTI4KSkpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiAoCisgICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywKKyAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCisgICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAorICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywKKyAgICAgICAgICAgICdpc284ODU5XzEwJywgJ2lzbzg4NTlfMTMnLCAnaXNvODg1OV8xNCcsICdpc284ODU5XzE1JywKKyAgICAgICAgICAgICdpc284ODU5XzInLCAnaXNvODg1OV8zJywgJ2lzbzg4NTlfNCcsICdpc284ODU5XzUnLCAnaXNvODg1OV82JywKKyAgICAgICAgICAgICdpc284ODU5XzcnLCAnaXNvODg1OV85JywgJ2tvaThfcicsICdsYXRpbl8xJywKKyAgICAgICAgICAgICdtYWNfY3lyaWxsaWMnLCAnbWFjX2xhdGluMicsCisKKyAgICAgICAgICAgICdjcDEyNTAnLCAnY3AxMjUxJywgJ2NwMTI1MicsICdjcDEyNTMnLCAnY3AxMjU0JywgJ2NwMTI1NScsCisgICAgICAgICAgICAnY3AxMjU2JywgJ2NwMTI1NycsICdjcDEyNTgnLAorICAgICAgICAgICAgJ2NwODU2JywgJ2NwODU3JywgJ2NwODY0JywgJ2NwODY5JywgJ2NwODc0JywKKworICAgICAgICAgICAgJ21hY19ncmVlaycsICdtYWNfaWNlbGFuZCcsJ21hY19yb21hbicsICdtYWNfdHVya2lzaCcsCisgICAgICAgICAgICAnY3AxMDA2JywgJ2lzbzg4NTlfOCcsCisKKyAgICAgICAgICAgICMjIyBUaGVzZSBoYXZlIHVuZGVmaW5lZCBtYXBwaW5nczoKKyAgICAgICAgICAgICMnY3A0MjQnLAorCisgICAgICAgICAgICAjIyMgVGhlc2UgZmFpbCB0aGUgcm91bmQtdHJpcDoKKyAgICAgICAgICAgICMnY3A4NzUnCisKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUocywgZW5jb2RpbmcpLmVuY29kZShlbmNvZGluZyksIHMpCisKKyAgICAgICAgIyAxMjgtMjU1CisgICAgICAgIHMgPSAnJy5qb2luKG1hcChjaHIsIHhyYW5nZSgxMjgsIDI1NikpKQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAorICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCisgICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAorICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCisgICAgICAgICAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCisgICAgICAgICAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfNCcsICdpc284ODU5XzUnLAorICAgICAgICAgICAgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAnbGF0aW5fMScsCisgICAgICAgICAgICAnbWFjX2N5cmlsbGljJywgJ21hY19sYXRpbjInLAorCisgICAgICAgICAgICAjIyMgVGhlc2UgaGF2ZSB1bmRlZmluZWQgbWFwcGluZ3M6CisgICAgICAgICAgICAjJ2NwMTI1MCcsICdjcDEyNTEnLCAnY3AxMjUyJywgJ2NwMTI1MycsICdjcDEyNTQnLCAnY3AxMjU1JywKKyAgICAgICAgICAgICMnY3AxMjU2JywgJ2NwMTI1NycsICdjcDEyNTgnLAorICAgICAgICAgICAgIydjcDQyNCcsICdjcDg1NicsICdjcDg1NycsICdjcDg2NCcsICdjcDg2OScsICdjcDg3NCcsCisgICAgICAgICAgICAjJ2lzbzg4NTlfMycsICdpc284ODU5XzYnLCAnaXNvODg1OV83JywKKyAgICAgICAgICAgICMnbWFjX2dyZWVrJywgJ21hY19pY2VsYW5kJywnbWFjX3JvbWFuJywgJ21hY190dXJraXNoJywKKworICAgICAgICAgICAgIyMjIFRoZXNlIGZhaWwgdGhlIHJvdW5kLXRyaXA6CisgICAgICAgICAgICAjJ2NwMTAwNicsICdjcDg3NScsICdpc284ODU5XzgnLAorCisgICAgICAgICAgICApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHMsIGVuY29kaW5nKS5lbmNvZGUoZW5jb2RpbmcpLCBzKQorCisgICAgZGVmIHRlc3RfY29uY2F0ZW5hdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodSJhYmMiIHUiZGVmIiksIHUiYWJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoImFiYyIgdSJkZWYiKSwgdSJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh1ImFiYyIgImRlZiIpLCB1ImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHUiYWJjIiB1ImRlZiIgImdoaSIpLCB1ImFiY2RlZmdoaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCJhYmMiICJkZWYiIHUiZ2hpIiksIHUiYWJjZGVmZ2hpIikKKworICAgIGRlZiB0ZXN0X3ByaW50aW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBCaXRCdWNrZXQ6CisgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgdGV4dCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIG91dCA9IEJpdEJ1Y2tldCgpCisgICAgICAgIHByaW50ID4+b3V0LCB1J2FiYycKKyAgICAgICAgcHJpbnQgPj5vdXQsIHUnYWJjJywgdSdkZWYnCisgICAgICAgIHByaW50ID4+b3V0LCB1J2FiYycsICdkZWYnCisgICAgICAgIHByaW50ID4+b3V0LCAnYWJjJywgdSdkZWYnCisgICAgICAgIHByaW50ID4+b3V0LCB1J2FiY1xuJworICAgICAgICBwcmludCA+Pm91dCwgdSdhYmNcbicsCisgICAgICAgIHByaW50ID4+b3V0LCB1J2FiY1xuJywKKyAgICAgICAgcHJpbnQgPj5vdXQsIHUnZGVmXG4nCisgICAgICAgIHByaW50ID4+b3V0LCB1J2RlZlxuJworCisgICAgZGVmIHRlc3RfdWNzNChzZWxmKToKKyAgICAgICAgeCA9IHUnXFUwMDEwMDAwMCcKKyAgICAgICAgeSA9IHguZW5jb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKS5kZWNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKworICAgICAgICB5ID0gcidcVTAwMTAwMDAwJworICAgICAgICB4ID0geS5kZWNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIpLmVuY29kZSgicmF3LXVuaWNvZGUtZXNjYXBlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICB5ID0gcidcVTAwMDEwMDAwJworICAgICAgICB4ID0geS5kZWNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIpLmVuY29kZSgicmF3LXVuaWNvZGUtZXNjYXBlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICdcVTExMTExMTExJy5kZWNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5zdGFydCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lbmQsIDEwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgVW5pY29kZURlY29kZUVycm9yIikKKworICAgIGRlZiB0ZXN0X2NvbnZlcnNpb24oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIF9fdW5pY29kZV9fKCkgd29ya3MgcHJvcGVybHkKKyAgICAgICAgY2xhc3MgRm9vMDoKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzE6CisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vMyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzQoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKworICAgICAgICBjbGFzcyBGb281KHVuaWNvZGUpOgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzYoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vcyIKKworICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvb3UiCisKKyAgICAgICAgY2xhc3MgRm9vNyh1bmljb2RlKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vcyIKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb291IgorCisgICAgICAgIGNsYXNzIEZvbzgodW5pY29kZSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGNvbnRlbnQ9IiIpOgorICAgICAgICAgICAgICAgIHJldHVybiB1bmljb2RlLl9fbmV3X18oY2xzLCAyKmNvbnRlbnQpCisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBjbGFzcyBGb285KHVuaWNvZGUpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciCisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJub3QgdW5pY29kZSIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vMCgpKSwgdSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vMSgpKSwgdSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vMigpKSwgdSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vMygpKSwgdSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vNCgiYmFyIikpLCB1ImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb281KCJiYXIiKSksIHUiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzYoImJhciIpKSwgdSJmb291IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzcoImJhciIpKSwgdSJmb291IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzgoImZvbyIpKSwgdSJmb29mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb285KCJmb28iKSksICJzdHJpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vOSgiZm9vIikpLCB1Im5vdCB1bmljb2RlIikKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgczE6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdcXG4nCisKKyAgICAgICAgY2xhc3MgczI6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUnXFxuJworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzMSgpKSwgJ1xcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzMigpKSwgJ1xcbicpCisKKyAgICBkZWYgdGVzdF9leHBhbmR0YWJzX292ZXJmbG93c19ncmFjZWZ1bGx5KHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCBvbmx5IGFmZmVjdHMgMzItYml0IHBsYXRmb3JtcyBiZWNhdXNlIGV4cGFuZHRhYnMgY2FuIG9ubHkgdGFrZQorICAgICAgICAjIGFuIGludCBhcyB0aGUgbWF4IHZhbHVlLCBub3QgYSA2NC1iaXQgQyBsb25nLiAgSWYgZXhwYW5kdGFicyBpcyBjaGFuZ2VkCisgICAgICAgICMgdG8gdGFrZSBhIDY0LWJpdCBsb25nLCB0aGlzIHRlc3Qgc2hvdWxkIGFwcGx5IHRvIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIGlmIHN5cy5tYXhpbnQgPiAoMSA8PCAzMikgb3Igc3RydWN0LmNhbGNzaXplKCdQJykgIT0gNDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB1J3RcdHRcdCcuZXhwYW5kdGFicywgc3lzLm1heGludCkKKworICAgIGRlZiB0ZXN0X19mb3JtYXRfXyhzZWxmKToKKyAgICAgICAgZGVmIHRlc3QodmFsdWUsIGZvcm1hdCwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgIyB0ZXN0IGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgdHJhaWxpbmcgJ3MnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLl9fZm9ybWF0X18oZm9ybWF0KSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLl9fZm9ybWF0X18oZm9ybWF0ICsgdSdzJyksIGV4cGVjdGVkKQorCisgICAgICAgIHRlc3QodScnLCB1JycsIHUnJykKKyAgICAgICAgdGVzdCh1J2FiYycsIHUnJywgdSdhYmMnKQorICAgICAgICB0ZXN0KHUnYWJjJywgdScuMycsIHUnYWJjJykKKyAgICAgICAgdGVzdCh1J2FiJywgdScuMycsIHUnYWInKQorICAgICAgICB0ZXN0KHUnYWJjZGVmJywgdScuMycsIHUnYWJjJykKKyAgICAgICAgdGVzdCh1J2FiY2RlZicsIHUnLjAnLCB1JycpCisgICAgICAgIHRlc3QodSdhYmMnLCB1JzMuMycsIHUnYWJjJykKKyAgICAgICAgdGVzdCh1J2FiYycsIHUnMi4zJywgdSdhYmMnKQorICAgICAgICB0ZXN0KHUnYWJjJywgdScyLjInLCB1J2FiJykKKyAgICAgICAgdGVzdCh1J2FiYycsIHUnMy4yJywgdSdhYiAnKQorICAgICAgICB0ZXN0KHUncmVzdWx0JywgdSd4PDAnLCB1J3Jlc3VsdCcpCisgICAgICAgIHRlc3QodSdyZXN1bHQnLCB1J3g8NScsIHUncmVzdWx0JykKKyAgICAgICAgdGVzdCh1J3Jlc3VsdCcsIHUneDw2JywgdSdyZXN1bHQnKQorICAgICAgICB0ZXN0KHUncmVzdWx0JywgdSd4PDcnLCB1J3Jlc3VsdHgnKQorICAgICAgICB0ZXN0KHUncmVzdWx0JywgdSd4PDgnLCB1J3Jlc3VsdHh4JykKKyAgICAgICAgdGVzdCh1J3Jlc3VsdCcsIHUnIDw3JywgdSdyZXN1bHQgJykKKyAgICAgICAgdGVzdCh1J3Jlc3VsdCcsIHUnPDcnLCB1J3Jlc3VsdCAnKQorICAgICAgICB0ZXN0KHUncmVzdWx0JywgdSc+NycsIHUnIHJlc3VsdCcpCisgICAgICAgIHRlc3QodSdyZXN1bHQnLCB1Jz44JywgdScgIHJlc3VsdCcpCisgICAgICAgIHRlc3QodSdyZXN1bHQnLCB1J144JywgdScgcmVzdWx0ICcpCisgICAgICAgIHRlc3QodSdyZXN1bHQnLCB1J145JywgdScgcmVzdWx0ICAnKQorICAgICAgICB0ZXN0KHUncmVzdWx0JywgdSdeMTAnLCB1JyAgcmVzdWx0ICAnKQorICAgICAgICB0ZXN0KHUnYScsIHUnMTAwMDAnLCB1J2EnICsgdScgJyAqIDk5OTkpCisgICAgICAgIHRlc3QodScnLCB1JzEwMDAwJywgdScgJyAqIDEwMDAwKQorICAgICAgICB0ZXN0KHUnJywgdScxMDAwMDAwMCcsIHUnICcgKiAxMDAwMDAwMCkKKworICAgICAgICAjIHRlc3QgbWl4aW5nIHVuaWNvZGUgYW5kIHN0cgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYWJjJy5fX2Zvcm1hdF9fKCdzJyksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiYycuX19mb3JtYXRfXygnLT4xMHMnKSwgdSctLS0tLS0tYWJjJykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1JycuZm9ybWF0KCksIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2EnLmZvcm1hdCgpLCB1J2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYWInLmZvcm1hdCgpLCB1J2FiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2F7eycuZm9ybWF0KCksIHUnYXsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYX19Jy5mb3JtYXQoKSwgdSdhfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7e2InLmZvcm1hdCgpLCB1J3tiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J319YicuZm9ybWF0KCksIHUnfWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYXt7YicuZm9ybWF0KCksIHUnYXtiJykKKworICAgICAgICAjIGV4YW1wbGVzIGZyb20gdGhlIFBFUDoKKyAgICAgICAgaW1wb3J0IGRhdGV0aW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJNeSBuYW1lIGlzIHswfSIuZm9ybWF0KHUnRnJlZCcpLCB1Ik15IG5hbWUgaXMgRnJlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJNeSBuYW1lIGlzIHswW25hbWVdfSIuZm9ybWF0KGRpY3QobmFtZT11J0ZyZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSJNeSBuYW1lIGlzIEZyZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiTXkgbmFtZSBpcyB7MH0gOi17e319Ii5mb3JtYXQodSdGcmVkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSJNeSBuYW1lIGlzIEZyZWQgOi17fSIpCisKKyAgICAgICAgIyBkYXRldGltZS5fX2Zvcm1hdF9fIGRvZXNuJ3Qgd29yayB3aXRoIHVuaWNvZGUKKyAgICAgICAgI2QgPSBkYXRldGltZS5kYXRlKDIwMDcsIDgsIDE4KQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCgiVGhlIHllYXIgaXMgezAueWVhcn0iLmZvcm1hdChkKSwKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgIlRoZSB5ZWFyIGlzIDIwMDciKQorCisgICAgICAgICMgY2xhc3NlcyB3ZSdsbCB1c2UgZm9yIHRlc3RpbmcKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4PTEwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5feCA9IHgKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICAgICAgY2xhc3MgRDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYueCkKKworICAgICAgICAjIGNsYXNzIHdpdGggX19zdHJfXywgYnV0IG5vIF9fZm9ybWF0X18KKyAgICAgICAgY2xhc3MgRToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSdFKCcgKyBzZWxmLnggKyB1JyknCisKKyAgICAgICAgIyBjbGFzcyB3aXRoIF9fcmVwcl9fLCBidXQgbm8gX19mb3JtYXRfXyBvciBfX3N0cl9fCisgICAgICAgIGNsYXNzIEY6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1J0YoJyArIHNlbGYueCArIHUnKScKKworICAgICAgICAjIGNsYXNzIHdpdGggX19mb3JtYXRfXyB0aGF0IGZvcndhcmRzIHRvIHN0cmluZywgZm9yIHNvbWUgZm9ybWF0X3NwZWMncworICAgICAgICBjbGFzcyBHOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1InN0cmluZyBpcyAiICsgc2VsZi54CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgaWYgZm9ybWF0X3NwZWMgPT0gJ2QnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdSdHKCcgKyBzZWxmLnggKyB1JyknCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKQorCisgICAgICAgICMgY2xhc3MgdGhhdCByZXR1cm5zIGEgYmFkIHR5cGUgZnJvbSBfX2Zvcm1hdF9fCisgICAgICAgIGNsYXNzIEg6CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEuMAorCisgICAgICAgIGNsYXNzIEkoZGF0ZXRpbWUuZGF0ZSk6CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RyZnRpbWUoZm9ybWF0X3NwZWMpCisKKyAgICAgICAgY2xhc3MgSihpbnQpOgorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQuX19mb3JtYXRfXyhzZWxmICogMiwgZm9ybWF0X3NwZWMpCisKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnJy5mb3JtYXQoKSwgdScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYWJjJy5mb3JtYXQoKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezB9Jy5mb3JtYXQodSdhYmMnKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6fScuZm9ybWF0KHUnYWJjJyksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1h7MH0nLmZvcm1hdCh1J2FiYycpLCB1J1hhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezB9WCcuZm9ybWF0KHUnYWJjJyksIHUnYWJjWCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdYezB9WScuZm9ybWF0KHUnYWJjJyksIHUnWGFiY1knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezF9Jy5mb3JtYXQoMSwgdSdhYmMnKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnWHsxfScuZm9ybWF0KDEsIHUnYWJjJyksIHUnWGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MX1YJy5mb3JtYXQoMSwgdSdhYmMnKSwgdSdhYmNYJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1h7MX1ZJy5mb3JtYXQoMSwgdSdhYmMnKSwgdSdYYWJjWScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MH0nLmZvcm1hdCgtMTUpLCB1Jy0xNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MH17MX0nLmZvcm1hdCgtMTUsIHUnYWJjJyksIHUnLTE1YWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swfVh7MX0nLmZvcm1hdCgtMTUsIHUnYWJjJyksIHUnLTE1WGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7eycuZm9ybWF0KCksIHUneycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd9fScuZm9ybWF0KCksIHUnfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7e319Jy5mb3JtYXQoKSwgdSd7fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7e3h9fScuZm9ybWF0KCksIHUne3h9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3t7ezB9fX0nLmZvcm1hdCgxMjMpLCB1J3sxMjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3t7e3swfX19fScuZm9ybWF0KCksIHUne3swfX0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnfX17eycuZm9ybWF0KCksIHUnfXsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnfX14e3snLmZvcm1hdCgpLCB1J314eycpCisKKyAgICAgICAgIyB3ZWlyZCBmaWVsZCBuYW1lcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiezBbZm9vLWJhcl19Ii5mb3JtYXQoe3UnZm9vLWJhcic6dSdiYXonfSksIHUnYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InswW2ZvbyBiYXJdfSIuZm9ybWF0KHt1J2ZvbyBiYXInOnUnYmF6J30pLCB1J2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJ7MFsgXX0iLmZvcm1hdCh7dScgJzozfSksIHUnMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3tmb28uX3h9Jy5mb3JtYXQoZm9vPUMoMjApKSwgdScyMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MX17MH0nLmZvcm1hdChEKDEwKSwgRCgyMCkpLCB1JzIwMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezAuX3gueH0nLmZvcm1hdChDKEQodSdhYmMnKSkpLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MFswXX0nLmZvcm1hdChbdSdhYmMnLCB1J2RlZiddKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezBbMV19Jy5mb3JtYXQoW3UnYWJjJywgdSdkZWYnXSksIHUnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swWzFdWzBdfScuZm9ybWF0KFt1J2FiYycsIFt1J2RlZiddXSksIHUnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swWzFdWzBdLnh9Jy5mb3JtYXQoWydhYmMnLCBbRCh1J2RlZicpXV0pLCB1J2RlZicpCisKKyAgICAgICAgIyBzdHJpbmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDouM3N9Jy5mb3JtYXQodSdhYmMnKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6LjNzfScuZm9ybWF0KHUnYWInKSwgdSdhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDouM3N9Jy5mb3JtYXQodSdhYmNkZWYnKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6LjBzfScuZm9ybWF0KHUnYWJjZGVmJyksIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOjMuM3N9Jy5mb3JtYXQodSdhYmMnKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6Mi4zc30nLmZvcm1hdCh1J2FiYycpLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDoyLjJzfScuZm9ybWF0KHUnYWJjJyksIHUnYWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6My4yc30nLmZvcm1hdCh1J2FiYycpLCB1J2FiICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDp4PDBzfScuZm9ybWF0KHUncmVzdWx0JyksIHUncmVzdWx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOng8NXN9Jy5mb3JtYXQodSdyZXN1bHQnKSwgdSdyZXN1bHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6eDw2c30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1J3Jlc3VsdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDp4PDdzfScuZm9ybWF0KHUncmVzdWx0JyksIHUncmVzdWx0eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDp4PDhzfScuZm9ybWF0KHUncmVzdWx0JyksIHUncmVzdWx0eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6IDw3c30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1J3Jlc3VsdCAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6PDdzfScuZm9ybWF0KHUncmVzdWx0JyksIHUncmVzdWx0ICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDo+N3N9Jy5mb3JtYXQodSdyZXN1bHQnKSwgdScgcmVzdWx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOj44c30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1JyAgcmVzdWx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOl44c30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1JyByZXN1bHQgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOl45c30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1JyByZXN1bHQgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDpeMTBzfScuZm9ybWF0KHUncmVzdWx0JyksIHUnICByZXN1bHQgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDoxMDAwMH0nLmZvcm1hdCh1J2EnKSwgdSdhJyArIHUnICcgKiA5OTk5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6MTAwMDB9Jy5mb3JtYXQodScnKSwgdScgJyAqIDEwMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6MTAwMDAwMDB9Jy5mb3JtYXQodScnKSwgdScgJyAqIDEwMDAwMDAwKQorCisgICAgICAgICMgZm9ybWF0IHNwZWNpZmllcnMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDphYmN9Jy5mb3JtYXQoQygpKSwgdSdhYmMnKQorCisgICAgICAgICMgIXIgYW5kICFzIGNvZXJjaW9ucworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezAhc30nLmZvcm1hdCh1J0hlbGxvJyksIHUnSGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezAhczp9Jy5mb3JtYXQodSdIZWxsbycpLCB1J0hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swIXM6MTV9Jy5mb3JtYXQodSdIZWxsbycpLCB1J0hlbGxvICAgICAgICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MCFzOjE1c30nLmZvcm1hdCh1J0hlbGxvJyksIHUnSGVsbG8gICAgICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swIXJ9Jy5mb3JtYXQodSdIZWxsbycpLCB1InUnSGVsbG8nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swIXI6fScuZm9ybWF0KHUnSGVsbG8nKSwgdSJ1J0hlbGxvJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MCFyfScuZm9ybWF0KEYodSdIZWxsbycpKSwgdSdGKEhlbGxvKScpCisKKyAgICAgICAgIyB0ZXN0IGZhbGxiYWNrIHRvIG9iamVjdC5fX2Zvcm1hdF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MH0nLmZvcm1hdCh7fSksIHUne30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezB9Jy5mb3JtYXQoW10pLCB1J1tdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swfScuZm9ybWF0KFsxXSksIHUnWzFdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swfScuZm9ybWF0KEUodSdkYXRhJykpLCB1J0UoZGF0YSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6ZH0nLmZvcm1hdChHKHUnZGF0YScpKSwgdSdHKGRhdGEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swIXN9Jy5mb3JtYXQoRyh1J2RhdGEnKSksIHUnc3RyaW5nIGlzIGRhdGEnKQorCisgICAgICAgIG1zZyA9ICdvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMgZGVwcmVjYXRlZCcKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKG1zZywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOl4xMH0nLmZvcm1hdChFKHUnZGF0YScpKSwgdScgRShkYXRhKSAgJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDpeMTBzfScuZm9ybWF0KEUodSdkYXRhJykpLCB1JyBFKGRhdGEpICAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOj4xNXN9Jy5mb3JtYXQoRyh1J2RhdGEnKSksIHUnIHN0cmluZyBpcyBkYXRhJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiezA6ZGF0ZTogJVktJW0tJWR9Ii5mb3JtYXQoSSh5ZWFyPTIwMDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheT0yNykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUiZGF0ZTogMjAwNy0wOC0yNyIpCisKKyAgICAgICAgIyB0ZXN0IGRlcml2aW5nIGZyb20gYSBidWlsdGluIHR5cGUgYW5kIG92ZXJyaWRpbmcgX19mb3JtYXRfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiezB9Ii5mb3JtYXQoSigxMCkpLCB1IjIwIikKKworCisgICAgICAgICMgc3RyaW5nIGZvcm1hdCBzcGVjaWZpZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDp9Jy5mb3JtYXQoJ2EnKSwgdSdhJykKKworICAgICAgICAjIGNvbXB1dGVkIGZvcm1hdCBzcGVjaWZpZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJ7MDouezF9fSIuZm9ybWF0KHUnaGVsbG8gd29ybGQnLCA1KSwgdSdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJ7MDouezF9c30iLmZvcm1hdCh1J2hlbGxvIHdvcmxkJywgNSksIHUnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiezA6LntwcmVjaXNpb259c30iLmZvcm1hdCgnaGVsbG8gd29ybGQnLCBwcmVjaXNpb249NSksIHUnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiezA6e3dpZHRofS57cHJlY2lzaW9ufXN9Ii5mb3JtYXQoJ2hlbGxvIHdvcmxkJywgd2lkdGg9MTAsIHByZWNpc2lvbj01KSwgdSdoZWxsbyAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InswOnt3aWR0aH0ue3ByZWNpc2lvbn1zfSIuZm9ybWF0KCdoZWxsbyB3b3JsZCcsIHdpZHRoPScxMCcsIHByZWNpc2lvbj0nNScpLCB1J2hlbGxvICAgICAnKQorCisgICAgICAgICMgdGVzdCB2YXJpb3VzIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J3snLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSd9Jy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUnYXsnLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSdhfScuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J3thJy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUnfWEnLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdSd7MH0nLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdSd7MX0nLmZvcm1hdCwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgICB1J3t4fScuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1In17Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUieyIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1In0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJhYmN7MDp7fSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswIi5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUiezAufSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswLn0iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdSJ7MFt9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezBbfSIuZm9ybWF0LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsICAgdSJ7MF19Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezAuW119Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezAuLmZvb30iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MFswfSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswWzA6Zm9vfSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgICB1IntjXX0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7eyB7e3swfX0iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MH19Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCAgIHUie2Zvb30iLmZvcm1hdCwgYmFyPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezAheH0iLmZvcm1hdCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MCF9Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezAhcnN9Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUieyF9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUiezp9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUiezpzfSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB1Int9Ii5mb3JtYXQpCisgICAgICAgIGJpZyA9IHUiMjMwOTg0NzUwMjkzODQ3MDI5ODM0NzYwOTgyMzA3NTQ5NzMyMDk0ODI1NzMiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICh1InsiICsgYmlnICsgdSJ9IikuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAodSJ7WyIgKyBiaWcgKyB1Il19IikuZm9ybWF0LCBbMF0pCisKKyAgICAgICAgIyBpc3N1ZSA2MDg5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezBbMF14fSIuZm9ybWF0LCBbTm9uZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezBbMF0oMTApfSIuZm9ybWF0LCBbTm9uZV0pCisKKyAgICAgICAgIyBjYW4ndCBoYXZlIGEgcmVwbGFjZW1lbnQgb24gdGhlIGZpZWxkIG5hbWUgcG9ydGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUnezBbezF9XX0nLmZvcm1hdCwgdSdhYmNkZWZnJywgNCkKKworICAgICAgICAjIGV4Y2VlZCBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswOnsxOnsyfX19Ii5mb3JtYXQsIHUnYWJjJywgdSdzJywgdScnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswOnsxOnsyOnszOns0Ons1Ons2fX19fX19fSIuZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KQorCisgICAgICAgICMgc3RyaW5nIGZvcm1hdCBzcGVjIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswOi1zfSIuZm9ybWF0LCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgdSIiLCB1Ii0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswOj1zfSIuZm9ybWF0LCB1JycpCisKKyAgICAgICAgIyB0ZXN0IGNvbWJpbmluZyBzdHJpbmcgYW5kIHVuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ImZvb3swfSIuZm9ybWF0KCdiYXInKSwgdSdmb29iYXInKQorICAgICAgICAjIFRoaXMgd2lsbCB0cnkgdG8gY29udmVydCB0aGUgYXJndW1lbnQgZnJvbSB1bmljb2RlIHRvIHN0ciwgd2hpY2gKKyAgICAgICAgIyAgd2lsbCBzdWNjZWVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZvb3swfSIuZm9ybWF0KHUnYmFyJyksICdmb29iYXInKQorICAgICAgICAjIFRoaXMgd2lsbCB0cnkgdG8gY29udmVydCB0aGUgYXJndW1lbnQgZnJvbSB1bmljb2RlIHRvIHN0ciwgd2hpY2gKKyAgICAgICAgIyAgd2lsbCBmYWlsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgImZvb3swfSIuZm9ybWF0LCB1J1x1MTAwMGJhcicpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfaHVnZV9wcmVjaXNpb24oc2VsZik6CisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSB1Ii57fWYiLmZvcm1hdChzeXMubWF4c2l6ZSArIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXQoMi4zNCwgZm9ybWF0X3N0cmluZykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9odWdlX3dpZHRoKHNlbGYpOgorICAgICAgICBmb3JtYXRfc3RyaW5nID0gdSJ7fWYiLmZvcm1hdChzeXMubWF4c2l6ZSArIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXQoMi4zNCwgZm9ybWF0X3N0cmluZykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9odWdlX2l0ZW1fbnVtYmVyKHNlbGYpOgorICAgICAgICBmb3JtYXRfc3RyaW5nID0gdSJ7e3t9Oi42Zn19Ii5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0X3N0cmluZy5mb3JtYXQoMi4zNCkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9hdXRvX251bWJlcmluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4PTEwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5feCA9IHgKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3t9Jy5mb3JtYXQoMTApLCB1JzEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3s6NX0nLmZvcm1hdCgncycpLCB1J3MgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3shcn0nLmZvcm1hdCgncycpLCB1IidzJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7Ll94fScuZm9ybWF0KEMoMTApKSwgdScxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7WzFdfScuZm9ybWF0KFsxLCAyXSksIHUnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7W2FdfScuZm9ybWF0KHsnYSc6NCwgJ2InOjJ9KSwgdSc0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2F7fWJ7fWMnLmZvcm1hdCgwLCAxKSwgdSdhMGIxYycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2F7Ont9fWInLmZvcm1hdCgneCcsICdeMTAnKSwgdSdhICAgIHggICAgIGInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYXs6e314fWInLmZvcm1hdCgyMCwgJyMnKSwgdSdhMHgxNGInKQorCisgICAgICAgICMgY2FuJ3QgbWl4IGFuZCBtYXRjaCBudW1iZXJpbmcgYW5kIGF1dG8tbnVtYmVyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUne317MX0nLmZvcm1hdCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSd7MX17fScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J3s6ezF9fScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J3swOnt9fScuZm9ybWF0LCAxLCAyKQorCisgICAgICAgICMgY2FuIG1peCBhbmQgbWF0Y2ggYXV0by1udW1iZXJpbmcgYW5kIG5hbWVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7Zn17fScuZm9ybWF0KDQsIGY9J3Rlc3QnKSwgdSd0ZXN0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7fXtmfScuZm9ybWF0KDQsIGY9J3Rlc3QnKSwgdSc0dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7OntmfX17Z317fScuZm9ybWF0KDEsIDMsIGc9J2cnLCBmPTIpLCB1JyAxZzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne2Y6e319e317Z30nLmZvcm1hdCgyLCA0LCBmPTEsIGc9J2cnKSwgdScgMTRnJykKKworICAgIGRlZiB0ZXN0X3JhaXNlTWVtRXJyb3Ioc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGZyZWVsaXN0IGNvbnRhaW5zIGEgY29uc2lzdGVudCBvYmplY3QsIGV2ZW4KKyAgICAgICAgIyB3aGVuIGEgc3RyaW5nIGFsbG9jYXRpb24gZmFpbHMgd2l0aCBhIE1lbW9yeUVycm9yLgorICAgICAgICAjIFRoaXMgdXNlZCB0byBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIsCisgICAgICAgICMgb3IgbGVhayByZWZlcmVuY2VzIHdoZW4gdGhlIG51bWJlciB3YXMgc21hbGxlci4KKyAgICAgICAgY2hhcndpZHRoID0gNCBpZiBzeXMubWF4dW5pY29kZSA+PSAweDEwMDAwIGVsc2UgMgorICAgICAgICAjIE5vdGU6IHN5cy5tYXhzaXplIGlzIGhhbGYgb2YgdGhlIGFjdHVhbCBtYXggYWxsb2NhdGlvbiBiZWNhdXNlIG9mCisgICAgICAgICMgdGhlIHNpZ25lZG5lc3Mgb2YgUHlfc3NpemVfdC4KKyAgICAgICAgYWxsb2MgPSBsYW1iZGE6IHUiYSIgKiAoc3lzLm1heHNpemUgLy8gY2hhcndpZHRoICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTWVtb3J5RXJyb3IsIGFsbG9jKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNZW1vcnlFcnJvciwgYWxsb2MpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFUodW5pY29kZSk6CisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUnX191bmljb2RlX18gb3ZlcnJpZGRlbicKKyAgICAgICAgdSA9IFUodSd4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlcyIgJSB1LCB1J19fdW5pY29kZV9fIG92ZXJyaWRkZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7fSIuZm9ybWF0KHUpLCAnX191bmljb2RlX18gb3ZlcnJpZGRlbicpCisKKyAgICBkZWYgdGVzdF9lbmNvZGVfZGVjaW1hbChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHVuaWNvZGVfZW5jb2RlZGVjaW1hbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGVfZW5jb2RlZGVjaW1hbCh1JzEyMycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX2VuY29kZWRlY2ltYWwodSdcdTA2NjMuXHUwNjYxXHUwNjY0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYiczLjE0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX2VuY29kZWRlY2ltYWwodSJcTntFTSBTUEFDRX0zLjE0XE57RU4gU1BBQ0V9IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYicgMy4xNCAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlZGVjaW1hbCwgdSIxMjNcdTIwYWMiLCAic3RyaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX2VuY29kZWRlY2ltYWwodSIxMjNcdTIwYWMiLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInMTIzPycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZV9lbmNvZGVkZWNpbWFsKHUiMTIzXHUyMGFjIiwgImlnbm9yZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX2VuY29kZWRlY2ltYWwodSIxMjNcdTIwYWMiLCAieG1sY2hhcnJlZnJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzEyMyYjODM2NDsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGVfZW5jb2RlZGVjaW1hbCh1IjEyM1x1MjBhYyIsICJiYWNrc2xhc2hyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYicxMjNcXHUyMGFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX2VuY29kZWRlY2ltYWwodSIxMjNcdTIwYWNcTntFTSBTUEFDRX0iLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInMTIzPyAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGVfZW5jb2RlZGVjaW1hbCh1IjEyM1x1MjBhY1x1MjBhYyIsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYicxMjM/PycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZV9lbmNvZGVkZWNpbWFsKHUiMTIzXHUyMGFjXHUwNjYwIiwgInJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzEyMz8wJykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNGJhZDMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91bmljb2RlX2ZpbGUucHkKQEAgLTAsMCArMSwyMDAgQEAKKyMgVGVzdCBzb21lIFVuaWNvZGUgZmlsZSBuYW1lIHNlbWFudGljcworIyBXZSBkb250IHRlc3QgbWFueSBvcGVyYXRpb25zIG9uIGZpbGVzIG90aGVyIHRoYW4KKyMgdGhhdCB0aGVpciBuYW1lcyBjYW4gYmUgdXNlZCB3aXRoIFVuaWNvZGUgY2hhcmFjdGVycy4KK2ltcG9ydCBvcywgZ2xvYiwgdGltZSwgc2h1dGlsCitpbXBvcnQgdW5pY29kZWRhdGEKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTl9VTklDT0RFCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk5fRU5DT0RJTkcsIFRFU1RGTl9VTkVOQ09EQUJMRQordHJ5OgorICAgIFRFU1RGTl9FTkNPREVEID0gVEVTVEZOX1VOSUNPREUuZW5jb2RlKFRFU1RGTl9FTkNPRElORykKK2V4Y2VwdCAoVW5pY29kZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICMgRWl0aGVyIHRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZyBpcyBOb25lLCBvciB0aGUgZmlsZSBuYW1lCisgICAgIyBjYW5ub3QgYmUgZW5jb2RlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcuCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk5vIFVuaWNvZGUgZmlsZXN5c3RlbSBzZW1hbnRpY3Mgb24gdGhpcyBwbGF0Zm9ybS4iKQorCitpZiBURVNURk5fRU5DT0RFRC5kZWNvZGUoVEVTVEZOX0VOQ09ESU5HKSAhPSBURVNURk5fVU5JQ09ERToKKyAgICAjIFRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZyBkb2VzIG5vdCBzdXBwb3J0IExhdGluLTEKKyAgICAjICh3aGljaCB0ZXN0X3N1cHBvcnQgYXNzdW1lcyksIHNvIHRyeSB0aGUgZmlsZSBzeXN0ZW0KKyAgICAjIGVuY29kaW5nIGluc3RlYWQuCisgICAgaW1wb3J0IHN5cworICAgIHRyeToKKyAgICAgICAgVEVTVEZOX1VOSUNPREUgPSB1bmljb2RlKCJAdGVzdC1ceGUwXHhmMiIsIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgVEVTVEZOX0VOQ09ERUQgPSBURVNURk5fVU5JQ09ERS5lbmNvZGUoVEVTVEZOX0VOQ09ESU5HKQorICAgICAgICBpZiAnPycgaW4gVEVTVEZOX0VOQ09ERUQ6CisgICAgICAgICAgICAjIE1CQ1Mgd2lsbCBub3QgcmVwb3J0IHRoZSBlcnJvciBwcm9wZXJseQorICAgICAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAibWJjcyBlbmNvZGluZyBwcm9ibGVtIgorICAgIGV4Y2VwdCAoVW5pY29kZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2Fubm90IGZpbmQgYSBzdWl0ZWFibGUgZmlsZW5hbWUuIikKKworaWYgVEVTVEZOX0VOQ09ERUQuZGVjb2RlKFRFU1RGTl9FTkNPRElORykgIT0gVEVTVEZOX1VOSUNPREU6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbm5vdCBmaW5kIGEgc3VpdGFibGUgZmlsZW5hbWUuIikKKworZGVmIHJlbW92ZV9pZl9leGlzdHMoZmlsZW5hbWUpOgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKKyAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQorCitjbGFzcyBUZXN0VW5pY29kZUZpbGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZSAnZG9fJyBmdW5jdGlvbnMgYXJlIHRoZSBhY3R1YWwgdGVzdHMuICBUaGV5IGdlbmVyYWxseSBhc3N1bWUgdGhlCisgICAgIyBmaWxlIGFscmVhZHkgZXhpc3RzIGV0Yy4KKworICAgICMgRG8gYWxsIHRoZSB0ZXN0cyB3ZSBjYW4gZ2l2ZW4gb25seSBhIHNpbmdsZSBmaWxlbmFtZS4gIFRoZSBmaWxlIHNob3VsZAorICAgICMgZXhpc3QuCisgICAgZGVmIF9kb19zaW5nbGUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZW5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuYWNjZXNzKGZpbGVuYW1lLCBvcy5SX09LKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5hY2Nlc3Mob3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKSwgb3MuUl9PSykpCisgICAgICAgIG9zLmNobW9kKGZpbGVuYW1lLCAwNzc3KQorICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgTm9uZSkKKyAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsICh0aW1lLnRpbWUoKSwgdGltZS50aW1lKCkpKQorICAgICAgICAjIENvcHkvcmVuYW1lIGV0YyB0ZXN0cyB1c2luZyB0aGUgc2FtZSBmaWxlbmFtZQorICAgICAgICBzZWxmLl9kb19jb3B5aXNoKGZpbGVuYW1lLCBmaWxlbmFtZSkKKyAgICAgICAgIyBGaWxlbmFtZSBzaG91bGQgYXBwZWFyIGluIGdsb2Igb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSk9PW9zLnBhdGguYWJzcGF0aChnbG9iLmdsb2IoZmlsZW5hbWUpWzBdKSkKKyAgICAgICAgIyBiYXNlbmFtZSBzaG91bGQgYXBwZWFyIGluIGxpc3RkaXIuCisgICAgICAgIHBhdGgsIGJhc2UgPSBvcy5wYXRoLnNwbGl0KG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYmFzZSwgc3RyKToKKyAgICAgICAgICAgIGJhc2UgPSBiYXNlLmRlY29kZShURVNURk5fRU5DT0RJTkcpCisgICAgICAgIGZpbGVfbGlzdCA9IG9zLmxpc3RkaXIocGF0aCkKKyAgICAgICAgIyBsaXN0ZGlyKCkgd2l0aCBhIHVuaWNvZGUgYXJnIG1heSBvciBtYXkgbm90IHJldHVybiBVbmljb2RlCisgICAgICAgICMgb2JqZWN0cywgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KKyAgICAgICAgaWYgZmlsZV9saXN0IGFuZCBpc2luc3RhbmNlKGZpbGVfbGlzdFswXSwgc3RyKToKKyAgICAgICAgICAgIGZpbGVfbGlzdCA9IFtmLmRlY29kZShURVNURk5fRU5DT0RJTkcpIGZvciBmIGluIGZpbGVfbGlzdF0KKworICAgICAgICAjIE5vcm1hbGl6ZSB0aGUgdW5pY29kZSBzdHJpbmdzLCBhcyByb3VuZC10cmlwcGluZyB0aGUgbmFtZSB2aWEgdGhlIE9TCisgICAgICAgICMgbWF5IHJldHVybiBhIGRpZmZlcmVudCAoYnV0IGVxdWl2YWxlbnQpIHZhbHVlLgorICAgICAgICBiYXNlID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBiYXNlKQorICAgICAgICBmaWxlX2xpc3QgPSBbdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBmKSBmb3IgZiBpbiBmaWxlX2xpc3RdCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiYXNlLCBmaWxlX2xpc3QpCisKKyAgICAjIERvIGFzIG1hbnkgImVxdWl2YWxhbmN5JyB0ZXN0cyBhcyB3ZSBjYW4gLSBpZSwgY2hlY2sgdGhhdCBhbHRob3VnaCB3ZQorICAgICMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMgZm9yIHRoZSBmaWxlbmFtZSwgdGhleSByZWZlciB0byB0aGUgc2FtZSBmaWxlLgorICAgIGRlZiBfZG9fZXF1aXZhbGVudChzZWxmLCBmaWxlbmFtZTEsIGZpbGVuYW1lMik6CisgICAgICAgICMgTm90ZSB3ZSBvbmx5IGNoZWNrICJmaWxlbmFtZTEgYWdhaW5zdCBmaWxlbmFtZTIiIC0gd2UgZG9uJ3QgYm90aGVyCisgICAgICAgICMgY2hlY2tpbmcgImZpbGVuYW1lMiBhZ2FpbnN0IDEiLCBhcyB3ZSBhc3N1bWUgd2UgYXJlIGNhbGxlZCBhZ2FpbiB3aXRoCisgICAgICAgICMgdGhlIGFyZ3MgcmV2ZXJzZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGZpbGVuYW1lMSkhPXR5cGUoZmlsZW5hbWUyKSwKKyAgICAgICAgICAgICAgICAgICAgIk5vIHBvaW50IGNoZWNraW5nIGVxdWl2YWxlbnQgZmlsZW5hbWVzIG9mIHRoZSBzYW1lIHR5cGUiKQorICAgICAgICAjIHN0YXQgYW5kIGxzdGF0IHNob3VsZCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KGZpbGVuYW1lMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQoZmlsZW5hbWUyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc3RhdChmaWxlbmFtZTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5sc3RhdChmaWxlbmFtZTIpKQorICAgICAgICAjIENvcHkvcmVuYW1lIGV0YyB0ZXN0cyB1c2luZyBlcXVpdmFsZW50IGZpbGVuYW1lCisgICAgICAgIHNlbGYuX2RvX2NvcHlpc2goZmlsZW5hbWUxLCBmaWxlbmFtZTIpCisKKyAgICAjIFRlc3RzIHRoYXQgY29weSwgbW92ZSwgZXRjIG9uZSBmaWxlIHRvIGFub3RoZXIuCisgICAgZGVmIF9kb19jb3B5aXNoKHNlbGYsIGZpbGVuYW1lMSwgZmlsZW5hbWUyKToKKyAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byByZW5hbWUgdGhlIGZpbGUgdXNpbmcgZWl0aGVyIG5hbWUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShmaWxlbmFtZTEpKSAjIG11c3QgZXhpc3QuCisgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZTEsIGZpbGVuYW1lMiArICIubmV3IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lMSsiLm5ldyIpKQorICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUxICsgIi5uZXciLCBmaWxlbmFtZTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShmaWxlbmFtZTIpKQorCisgICAgICAgIHNodXRpbC5jb3B5KGZpbGVuYW1lMSwgZmlsZW5hbWUyICsgIi5uZXciKQorICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUxICsgIi5uZXciKSAjIHJlbW92ZSB1c2luZyBlcXVpdiBuYW1lLgorICAgICAgICAjIEFuZCBhIGNvdXBsZSBvZiBtb3Zlcywgb25lIHVzaW5nIGVhY2ggbmFtZS4KKyAgICAgICAgc2h1dGlsLm1vdmUoZmlsZW5hbWUxLCBmaWxlbmFtZTIgKyAiLm5ldyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUyKSkKKyAgICAgICAgc2h1dGlsLm1vdmUoZmlsZW5hbWUxICsgIi5uZXciLCBmaWxlbmFtZTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZTEpKQorICAgICAgICAjIE5vdGUgLSBkdWUgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHNodXRpbC5tb3ZlLAorICAgICAgICAjIGl0IHRyaWVzIGEgcmVuYW1lIGZpcnN0LiAgVGhpcyBvbmx5IGZhaWxzIG9uIFdpbmRvd3Mgd2hlbiBvbgorICAgICAgICAjIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMgLSBhbmQgdGhpcyB0ZXN0IGNhbid0IGVuc3VyZSB0aGF0LgorICAgICAgICAjIFNvIHdlIHRlc3QgdGhlIHNodXRpbC5jb3B5MiBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIHRoaW5nIG1vc3QKKyAgICAgICAgIyBsaWtlbHkgdG8gZmFpbC4KKyAgICAgICAgc2h1dGlsLmNvcHkyKGZpbGVuYW1lMSwgZmlsZW5hbWUyICsgIi5uZXciKQorICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUxICsgIi5uZXciKQorCisgICAgZGVmIF9kb19kaXJlY3Rvcnkoc2VsZiwgbWFrZV9uYW1lLCBjaGRpcl9uYW1lLCBlbmNvZGVkKToKKyAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihtYWtlX25hbWUpOgorICAgICAgICAgICAgb3Mucm1kaXIobWFrZV9uYW1lKQorICAgICAgICBvcy5ta2RpcihtYWtlX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNoZGlyKGNoZGlyX25hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90IGVuY29kZWQ6CisgICAgICAgICAgICAgICAgICAgIGN3ZF9yZXN1bHQgPSBvcy5nZXRjd2R1KCkKKyAgICAgICAgICAgICAgICAgICAgbmFtZV9yZXN1bHQgPSBtYWtlX25hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjd2RfcmVzdWx0ID0gb3MuZ2V0Y3dkKCkuZGVjb2RlKFRFU1RGTl9FTkNPRElORykKKyAgICAgICAgICAgICAgICAgICAgbmFtZV9yZXN1bHQgPSBtYWtlX25hbWUuZGVjb2RlKFRFU1RGTl9FTkNPRElORykKKworICAgICAgICAgICAgICAgIGN3ZF9yZXN1bHQgPSB1bmljb2RlZGF0YS5ub3JtYWxpemUoIk5GRCIsIGN3ZF9yZXN1bHQpCisgICAgICAgICAgICAgICAgbmFtZV9yZXN1bHQgPSB1bmljb2RlZGF0YS5ub3JtYWxpemUoIk5GRCIsIG5hbWVfcmVzdWx0KQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKGN3ZF9yZXN1bHQpLG5hbWVfcmVzdWx0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihjd2QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihtYWtlX25hbWUpCisKKyAgICAjIFRoZSAnX3Rlc3QnIGZ1bmN0aW9ucyAnZW50cnkgcG9pbnRzIHdpdGggcGFyYW1zJyAtIGllLCB3aGF0IHRoZQorICAgICMgdG9wLWxldmVsICd0ZXN0JyBmdW5jdGlvbnMgd291bGQgYmUgaWYgdGhleSBjb3VsZCB0YWtlIHBhcmFtcworICAgIGRlZiBfdGVzdF9zaW5nbGUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICByZW1vdmVfaWZfZXhpc3RzKGZpbGVuYW1lKQorICAgICAgICBmID0gZmlsZShmaWxlbmFtZSwgInciKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZG9fc2luZ2xlKGZpbGVuYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKSkKKyAgICAgICAgIyBhbmQgYWdhaW4gd2l0aCBvcy5vcGVuLgorICAgICAgICBmID0gb3Mub3BlbihmaWxlbmFtZSwgb3MuT19DUkVBVCkKKyAgICAgICAgb3MuY2xvc2UoZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZG9fc2luZ2xlKGZpbGVuYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQorCisgICAgZGVmIF90ZXN0X2VxdWl2YWxlbnQoc2VsZiwgZmlsZW5hbWUxLCBmaWxlbmFtZTIpOgorICAgICAgICByZW1vdmVfaWZfZXhpc3RzKGZpbGVuYW1lMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZTIpKQorICAgICAgICBmID0gZmlsZShmaWxlbmFtZTEsICJ3IikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2RvX2VxdWl2YWxlbnQoZmlsZW5hbWUxLCBmaWxlbmFtZTIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUxKQorCisgICAgIyBUaGUgJ3Rlc3QnIGZ1bmN0aW9ucyBhcmUgdW5pdHRlc3QgZW50cnkgcG9pbnRzLCBhbmQgc2ltcGx5IGNhbGwgb3VyCisgICAgIyBfdGVzdCBmdW5jdGlvbnMgd2l0aCBlYWNoIG9mIHRoZSBmaWxlbmFtZSBjb21iaW5hdGlvbnMgd2Ugd2lzaCB0byB0ZXN0CisgICAgZGVmIHRlc3Rfc2luZ2xlX2ZpbGVzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NpbmdsZShURVNURk5fRU5DT0RFRCkKKyAgICAgICAgc2VsZi5fdGVzdF9zaW5nbGUoVEVTVEZOX1VOSUNPREUpCisgICAgICAgIGlmIFRFU1RGTl9VTkVOQ09EQUJMRSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rfc2luZ2xlKFRFU1RGTl9VTkVOQ09EQUJMRSkKKworICAgIGRlZiB0ZXN0X2VxdWl2YWxlbnRfZmlsZXMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZXF1aXZhbGVudChURVNURk5fRU5DT0RFRCwgVEVTVEZOX1VOSUNPREUpCisgICAgICAgIHNlbGYuX3Rlc3RfZXF1aXZhbGVudChURVNURk5fVU5JQ09ERSwgVEVTVEZOX0VOQ09ERUQpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcmllcyhzZWxmKToKKyAgICAgICAgIyBGb3IgYWxsICdlcXVpdmFsZW50JyBjb21iaW5hdGlvbnM6CisgICAgICAgICMgIE1ha2UgZGlyIHdpdGggZW5jb2RlZCwgY2hkaXIgd2l0aCB1bmljb2RlLCBjaGVja2RpciB3aXRoIGVuY29kZWQKKyAgICAgICAgIyAgKG9yIHVuaWNvZGUvZW5jb2RlZC91bmljb2RlLCBldGMKKyAgICAgICAgZXh0ID0gIi5kaXIiCisgICAgICAgIHNlbGYuX2RvX2RpcmVjdG9yeShURVNURk5fRU5DT0RFRCtleHQsIFRFU1RGTl9FTkNPREVEK2V4dCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5fZG9fZGlyZWN0b3J5KFRFU1RGTl9FTkNPREVEK2V4dCwgVEVTVEZOX1VOSUNPREUrZXh0LCBUcnVlKQorICAgICAgICBzZWxmLl9kb19kaXJlY3RvcnkoVEVTVEZOX1VOSUNPREUrZXh0LCBURVNURk5fRU5DT0RFRCtleHQsIEZhbHNlKQorICAgICAgICBzZWxmLl9kb19kaXJlY3RvcnkoVEVTVEZOX1VOSUNPREUrZXh0LCBURVNURk5fVU5JQ09ERStleHQsIEZhbHNlKQorICAgICAgICAjIE91ciBkaXJlY3RvcnkgbmFtZSB0aGF0IGNhbid0IHVzZSBhIG5vbi11bmljb2RlIG5hbWUuCisgICAgICAgIGlmIFRFU1RGTl9VTkVOQ09EQUJMRSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RvX2RpcmVjdG9yeShURVNURk5fVU5FTkNPREFCTEUrZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RGTl9VTkVOQ09EQUJMRStleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwZWNmNAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CkBAIC0wLDAgKzEsMzE3IEBACisiIiIgVGVzdCBzY3JpcHQgZm9yIHRoZSB1bmljb2RlZGF0YSBtb2R1bGUuCisKKyAgICBXcml0dGVuIGJ5IE1hcmMtQW5kcmUgTGVtYnVyZyAobWFsQGxlbWJ1cmcuY29tKS4KKworICAgIChjKSBDb3B5cmlnaHQgQ05SSSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gTk8gV0FSUkFOVFkuCisKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CisKK2VuY29kaW5nID0gJ3V0Zi04JworCisKKyMjIyBSdW4gdGVzdHMKKworY2xhc3MgVW5pY29kZU1ldGhvZHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCisgICAgZXhwZWN0ZWRjaGVja3N1bSA9ICc0NTA0ZGZmZDAzNWJhZWEwMmM1YjlkZTgyYmViYzNkNjVlMGUwYmFmJworCisgICAgZGVmIHRlc3RfbWV0aG9kX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICBoID0gaGFzaGxpYi5zaGExKCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMHgxMDAwMCk6CisgICAgICAgICAgICBjaGFyID0gdW5pY2hyKGkpCisgICAgICAgICAgICBkYXRhID0gWworICAgICAgICAgICAgICAgICMgUHJlZGljYXRlcyAoc2luZ2xlIGNoYXIpCisgICAgICAgICAgICAgICAgdSIwMSJbY2hhci5pc2FsbnVtKCldLAorICAgICAgICAgICAgICAgIHUiMDEiW2NoYXIuaXNhbHBoYSgpXSwKKyAgICAgICAgICAgICAgICB1IjAxIltjaGFyLmlzZGVjaW1hbCgpXSwKKyAgICAgICAgICAgICAgICB1IjAxIltjaGFyLmlzZGlnaXQoKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbY2hhci5pc2xvd2VyKCldLAorICAgICAgICAgICAgICAgIHUiMDEiW2NoYXIuaXNudW1lcmljKCldLAorICAgICAgICAgICAgICAgIHUiMDEiW2NoYXIuaXNzcGFjZSgpXSwKKyAgICAgICAgICAgICAgICB1IjAxIltjaGFyLmlzdGl0bGUoKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbY2hhci5pc3VwcGVyKCldLAorCisgICAgICAgICAgICAgICAgIyBQcmVkaWNhdGVzIChtdWx0aXBsZSBjaGFycykKKyAgICAgICAgICAgICAgICB1IjAxIlsoY2hhciArIHUnYWJjJykuaXNhbG51bSgpXSwKKyAgICAgICAgICAgICAgICB1IjAxIlsoY2hhciArIHUnYWJjJykuaXNhbHBoYSgpXSwKKyAgICAgICAgICAgICAgICB1IjAxIlsoY2hhciArIHUnMTIzJykuaXNkZWNpbWFsKCldLAorICAgICAgICAgICAgICAgIHUiMDEiWyhjaGFyICsgdScxMjMnKS5pc2RpZ2l0KCldLAorICAgICAgICAgICAgICAgIHUiMDEiWyhjaGFyICsgdSdhYmMnKS5pc2xvd2VyKCldLAorICAgICAgICAgICAgICAgIHUiMDEiWyhjaGFyICsgdScxMjMnKS5pc251bWVyaWMoKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbKGNoYXIgKyB1JyBcdCcpLmlzc3BhY2UoKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbKGNoYXIgKyB1J2FiYycpLmlzdGl0bGUoKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbKGNoYXIgKyB1J0FCQycpLmlzdXBwZXIoKV0sCisKKyAgICAgICAgICAgICAgICAjIE1hcHBpbmdzIChzaW5nbGUgY2hhcikKKyAgICAgICAgICAgICAgICBjaGFyLmxvd2VyKCksCisgICAgICAgICAgICAgICAgY2hhci51cHBlcigpLAorICAgICAgICAgICAgICAgIGNoYXIudGl0bGUoKSwKKworICAgICAgICAgICAgICAgICMgTWFwcGluZ3MgKG11bHRpcGxlIGNoYXJzKQorICAgICAgICAgICAgICAgIChjaGFyICsgdSdhYmMnKS5sb3dlcigpLAorICAgICAgICAgICAgICAgIChjaGFyICsgdSdBQkMnKS51cHBlcigpLAorICAgICAgICAgICAgICAgIChjaGFyICsgdSdhYmMnKS50aXRsZSgpLAorICAgICAgICAgICAgICAgIChjaGFyICsgdSdBQkMnKS50aXRsZSgpLAorCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgaC51cGRhdGUodScnLmpvaW4oZGF0YSkuZW5jb2RlKGVuY29kaW5nKSkKKyAgICAgICAgcmVzdWx0ID0gaC5oZXhkaWdlc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2VsZi5leHBlY3RlZGNoZWNrc3VtKQorCitjbGFzcyBVbmljb2RlRGF0YWJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBJbiBjYXNlIHVuaWNvZGVkYXRhIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgd2lsbCByYWlzZSBhbiBJbXBvcnRFcnJvciwKKyAgICAgICAgIyBidXQgdGhlIG90aGVyIHRlc3QgY2FzZXMgd2lsbCBzdGlsbCBiZSBydW4KKyAgICAgICAgaW1wb3J0IHVuaWNvZGVkYXRhCisgICAgICAgIHNlbGYuZGIgPSB1bmljb2RlZGF0YQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5kYgorCitjbGFzcyBVbmljb2RlRnVuY3Rpb25zVGVzdChVbmljb2RlRGF0YWJhc2VUZXN0KToKKworICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCisgICAgZXhwZWN0ZWRjaGVja3N1bSA9ICc2Y2NmMWIxYTM2NDYwZDI2OTRmOWIwYjBmMDMyNDk0MmZlNzBlZGU2JworCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fY2hlY2tzdW0oc2VsZik6CisgICAgICAgIGRhdGEgPSBbXQorICAgICAgICBoID0gaGFzaGxpYi5zaGExKCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgweDEwMDAwKToKKyAgICAgICAgICAgIGNoYXIgPSB1bmljaHIoaSkKKyAgICAgICAgICAgIGRhdGEgPSBbCisgICAgICAgICAgICAgICAgIyBQcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgc3RyKHNlbGYuZGIuZGlnaXQoY2hhciwgLTEpKSwKKyAgICAgICAgICAgICAgICBzdHIoc2VsZi5kYi5udW1lcmljKGNoYXIsIC0xKSksCisgICAgICAgICAgICAgICAgc3RyKHNlbGYuZGIuZGVjaW1hbChjaGFyLCAtMSkpLAorICAgICAgICAgICAgICAgIHNlbGYuZGIuY2F0ZWdvcnkoY2hhciksCisgICAgICAgICAgICAgICAgc2VsZi5kYi5iaWRpcmVjdGlvbmFsKGNoYXIpLAorICAgICAgICAgICAgICAgIHNlbGYuZGIuZGVjb21wb3NpdGlvbihjaGFyKSwKKyAgICAgICAgICAgICAgICBzdHIoc2VsZi5kYi5taXJyb3JlZChjaGFyKSksCisgICAgICAgICAgICAgICAgc3RyKHNlbGYuZGIuY29tYmluaW5nKGNoYXIpKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgIGgudXBkYXRlKCcnLmpvaW4oZGF0YSkpCisgICAgICAgIHJlc3VsdCA9IGguaGV4ZGlnZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZXhwZWN0ZWRjaGVja3N1bSkKKworICAgIGRlZiB0ZXN0X2RpZ2l0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZGlnaXQodSdBJywgTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kaWdpdCh1JzknKSwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmRpZ2l0KHUnXHUyMTViJywgTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kaWdpdCh1J1x1MjQ2OCcpLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZGlnaXQodSdcVTAwMDIwMDAwJywgTm9uZSksIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLmRpZ2l0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIuZGlnaXQsIHUneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmRiLmRpZ2l0LCB1J3gnKQorCisgICAgZGVmIHRlc3RfbnVtZXJpYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWModSdBJyxOb25lKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWModSc5JyksIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKHUnXHUyMTViJyksIDAuMTI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubnVtZXJpYyh1J1x1MjQ2OCcpLCA5LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKHUnXHVhNjI3JyksIDcuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWModSdcVTAwMDIwMDAwJywgTm9uZSksIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLm51bWVyaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5udW1lcmljLCB1J3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5kYi5udW1lcmljLCB1J3gnKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmRlY2ltYWwodSdBJyxOb25lKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmRlY2ltYWwodSc5JyksIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kZWNpbWFsKHUnXHUyMTViJywgTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kZWNpbWFsKHUnXHUyNDY4JywgTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kZWNpbWFsKHUnXFUwMDAyMDAwMCcsIE5vbmUpLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5kZWNpbWFsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIuZGVjaW1hbCwgdSd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZGIuZGVjaW1hbCwgdSd4JykKKworICAgIGRlZiB0ZXN0X2NhdGVnb3J5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuY2F0ZWdvcnkodSdcdUZGRkUnKSwgJ0NuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmNhdGVnb3J5KHUnYScpLCAnTGwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuY2F0ZWdvcnkodSdBJyksICdMdScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5jYXRlZ29yeSh1J1xVMDAwMjAwMDAnKSwgJ0xvJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIuY2F0ZWdvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5jYXRlZ29yeSwgdSd4eCcpCisKKyAgICBkZWYgdGVzdF9iaWRpcmVjdGlvbmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuYmlkaXJlY3Rpb25hbCh1J1x1RkZGRScpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmJpZGlyZWN0aW9uYWwodScgJyksICdXUycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5iaWRpcmVjdGlvbmFsKHUnQScpLCAnTCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5iaWRpcmVjdGlvbmFsKHUnXFUwMDAyMDAwMCcpLCAnTCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLmJpZGlyZWN0aW9uYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5iaWRpcmVjdGlvbmFsLCB1J3h4JykKKworICAgIGRlZiB0ZXN0X2RlY29tcG9zaXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kZWNvbXBvc2l0aW9uKHUnXHVGRkZFJyksJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kZWNvbXBvc2l0aW9uKHUnXHUwMGJjJyksICc8ZnJhY3Rpb24+IDAwMzEgMjA0NCAwMDM0JykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIuZGVjb21wb3NpdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLmRlY29tcG9zaXRpb24sIHUneHgnKQorCisgICAgZGVmIHRlc3RfbWlycm9yZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5taXJyb3JlZCh1J1x1RkZGRScpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubWlycm9yZWQodSdhJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5taXJyb3JlZCh1J1x1MjIwMScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubWlycm9yZWQodSdcVTAwMDIwMDAwJyksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLm1pcnJvcmVkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIubWlycm9yZWQsIHUneHgnKQorCisgICAgZGVmIHRlc3RfY29tYmluaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuY29tYmluaW5nKHUnXHVGRkZFJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5jb21iaW5pbmcodSdhJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5jb21iaW5pbmcodSdcdTIwZTEnKSwgMjMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuY29tYmluaW5nKHUnXFUwMDAyMDAwMCcpLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5jb21iaW5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5jb21iaW5pbmcsIHUneHgnKQorCisgICAgZGVmIHRlc3Rfbm9ybWFsaXplKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIubm9ybWFsaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmRiLm5vcm1hbGl6ZSwgJ3Vua25vd24nLCB1J3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm5vcm1hbGl6ZSgnTkZLQycsIHUnJyksIHUnJykKKyAgICAgICAgIyBUaGUgcmVzdCBjYW4gYmUgZm91bmQgaW4gdGVzdF9ub3JtYWxpemF0aW9uLnB5CisgICAgICAgICMgd2hpY2ggcmVxdWlyZXMgYW4gZXh0ZXJuYWwgZmlsZS4KKworICAgIGRlZiB0ZXN0X3ByMjkoc2VsZik6CisgICAgICAgICMgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXZpZXcvcHItMjkuaHRtbAorICAgICAgICAjIFNlZSBpc3N1ZXMgIzEwNTQ5NDMgYW5kICMxMDI1NC4KKyAgICAgICAgY29tcG9zZWQgPSAodSJcdTBiNDdcdTAzMDBcdTBiM2UiLCB1Ilx1MTEwMFx1MDMwMFx1MTE2MSIsCisgICAgICAgICAgICAgICAgICAgIHUnTGlcdTAzMGR0LXNcdTFlNzNcdTAzMDEnLAorICAgICAgICAgICAgICAgICAgICB1J1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxNSBcdTA5MWNcdTA5M2MnCisgICAgICAgICAgICAgICAgICAgICsgdSdcdTA5NDFcdTA5MTVcdTA5NDdcdTA5MzBcdTA5MmNcdTA5MzBcdTA5NGRcdTA5MTcnLAorICAgICAgICAgICAgICAgICAgICB1J1x1MDkxNVx1MDkzZlx1MDkzMFx1MDk0ZFx1MDkxN1x1MDkzZlx1MDkxY1x1MDkzYycKKyAgICAgICAgICAgICAgICAgICAgKyAndVx1MDkzOFx1MDk0ZFx1MDkyNFx1MDkzZVx1MDkyOCcpCisgICAgICAgIGZvciB0ZXh0IGluIGNvbXBvc2VkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm5vcm1hbGl6ZSgnTkZDJywgdGV4dCksIHRleHQpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTEwMjU0KHNlbGYpOgorICAgICAgICAjIENyYXNoIHJlcG9ydGVkIGluICMxMDI1NAorICAgICAgICBhID0gdSdDXHUwMzM4JyAqIDIwICArIHUnQ1x1MDMyNycKKyAgICAgICAgYiA9IHUnQ1x1MDMzOCcgKiAyMCAgKyB1J1x4QzcnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5ub3JtYWxpemUoJ05GQycsIGEpLCBiKQorCisgICAgZGVmIHRlc3RfZWFzdF9hc2lhbl93aWR0aChzZWxmKToKKyAgICAgICAgZWF3ID0gc2VsZi5kYi5lYXN0X2FzaWFuX3dpZHRoCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZWF3LCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZWF3LCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZWF3LCB1J3JhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXcodSdceDFlJyksICdOJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXcodSdceDIwJyksICdOYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF3KHUnXHVDODk0JyksICdXJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXcodSdcdUZGNjYnKSwgJ0gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdyh1J1x1RkYxRicpLCAnRicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF3KHUnXHUyMDEwJyksICdBJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXcodSdcVTAwMDIwMDAwJyksICdXJykKKworY2xhc3MgVW5pY29kZU1pc2NUZXN0KFVuaWNvZGVEYXRhYmFzZVRlc3QpOgorCisgICAgZGVmIHRlc3RfZmFpbGVkX2ltcG9ydF9kdXJpbmdfY29tcGlsaW5nKHNlbGYpOgorICAgICAgICAjIElzc3VlIDQzNjcKKyAgICAgICAgIyBEZWNvZGluZyBcTiBlc2NhcGVzIHJlcXVpcmVzIHRoZSB1bmljb2RlZGF0YSBtb2R1bGUuIElmIGl0IGNhbid0IGJlCisgICAgICAgICMgaW1wb3J0ZWQsIHdlIHNob3VsZG4ndCBzZWdmYXVsdC4KKworICAgICAgICAjIFRoaXMgcHJvZ3JhbSBzaG91bGQgcmFpc2UgYSBTeW50YXhFcnJvciBpbiB0aGUgZXZhbC4KKyAgICAgICAgY29kZSA9ICJpbXBvcnQgc3lzOyIgXAorICAgICAgICAgICAgInN5cy5tb2R1bGVzWyd1bmljb2RlZGF0YSddID0gTm9uZTsiIFwKKyAgICAgICAgICAgICIiImV2YWwoInUnXE57U09GVCBIWVBIRU59JyIpIiIiCisgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGVdCisgICAgICAgICMgV2UgdXNlIGEgc3VicHJvY2VzcyBiZWNhdXNlIHRoZSB1bmljb2RlZGF0YSBtb2R1bGUgbWF5IGFscmVhZHkgaGF2ZQorICAgICAgICAjIGJlZW4gbG9hZGVkIGluIHRoaXMgcHJvY2Vzcy4KKyAgICAgICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHBvcGVuLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcGVuLnJldHVybmNvZGUsIDEpCisgICAgICAgIGVycm9yID0gIlN5bnRheEVycm9yOiAodW5pY29kZSBlcnJvcikgXE4gZXNjYXBlcyBub3Qgc3VwcG9ydGVkICIgXAorICAgICAgICAgICAgIihjYW4ndCBsb2FkIHVuaWNvZGVkYXRhIG1vZHVsZSkiCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3IsIHBvcGVuLnN0ZGVyci5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX251bWVyaWNfY29uc2lzdGVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZGVjaW1hbCBhbmQgbnVtZXJpYyBhcmUgY29uc2lzdGVudCwKKyAgICAgICAgIyBpLmUuIGlmIGEgY2hhcmFjdGVyIGhhcyBhIGRlY2ltYWwgdmFsdWUsCisgICAgICAgICMgaXRzIG51bWVyaWMgdmFsdWUgc2hvdWxkIGJlIHRoZSBzYW1lLgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDB4MTAwMDApOgorICAgICAgICAgICAgYyA9IHVuaWNocihpKQorICAgICAgICAgICAgZGVjID0gc2VsZi5kYi5kZWNpbWFsKGMsIC0xKQorICAgICAgICAgICAgaWYgZGVjICE9IC0xOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjLCBzZWxmLmRiLm51bWVyaWMoYykpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY291bnQgPj0gMTApICMgc2hvdWxkIGhhdmUgdGVzdGVkIGF0IGxlYXN0IHRoZSBBU0NJSSBkaWdpdHMKKworICAgIGRlZiB0ZXN0X2RpZ2l0X251bWVyaWNfY29uc2lzdGVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZGlnaXQgYW5kIG51bWVyaWMgYXJlIGNvbnNpc3RlbnQsCisgICAgICAgICMgaS5lLiBpZiBhIGNoYXJhY3RlciBoYXMgYSBkaWdpdCB2YWx1ZSwKKyAgICAgICAgIyBpdHMgbnVtZXJpYyB2YWx1ZSBzaG91bGQgYmUgdGhlIHNhbWUuCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMHgxMDAwMCk6CisgICAgICAgICAgICBjID0gdW5pY2hyKGkpCisgICAgICAgICAgICBkZWMgPSBzZWxmLmRiLmRpZ2l0KGMsIC0xKQorICAgICAgICAgICAgaWYgZGVjICE9IC0xOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjLCBzZWxmLmRiLm51bWVyaWMoYykpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY291bnQgPj0gMTApICMgc2hvdWxkIGhhdmUgdGVzdGVkIGF0IGxlYXN0IHRoZSBBU0NJSSBkaWdpdHMKKworICAgIGRlZiB0ZXN0X2J1Z18xNzA0NzkzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubG9va3VwKCJHT1RISUMgTEVUVEVSIEZBSUhVIiksIHUnXFUwMDAxMDM0NicpCisKKyAgICBkZWYgdGVzdF91Y2RfNTEwKHNlbGYpOgorICAgICAgICBpbXBvcnQgdW5pY29kZWRhdGEKKyAgICAgICAgIyBJbiBVQ0QgNS4xLjAsIGEgbWlycm9yZWQgcHJvcGVydHkgY2hhbmdlZCB3cnQuIFVDRCAzLjIuMAorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pY29kZWRhdGEubWlycm9yZWQodSJcdTBmM2EiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB1bmljb2RlZGF0YS51Y2RfM18yXzAubWlycm9yZWQodSJcdTBmM2EiKSkKKyAgICAgICAgIyBBbHNvLCB3ZSBub3cgaGF2ZSB0d28gd2F5cyBvZiByZXByZXNlbnRpbmcKKyAgICAgICAgIyB0aGUgdXBwZXItY2FzZSBtYXBwaW5nOiBhcyBkZWx0YSwgb3IgYXMgYWJzb2x1dGUgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUiYSIudXBwZXIoKT09dSdBJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUiXHUxZDc5Ii51cHBlcigpPT11J1x1YTc3ZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1Ii4iLnVwcGVyKCk9PXUiLiIpCisKKyAgICBkZWYgdGVzdF9idWdfNTgyOChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx1MWQ3OSIubG93ZXIoKSwgdSJcdTFkNzkiKQorICAgICAgICAjIE9ubHkgVSswMDAwIHNob3VsZCBoYXZlIFUrMDAwMCBhcyBpdHMgdXBwZXIvbG93ZXIvdGl0bGVjYXNlIHZhcmlhbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBjIGZvciBjIGluIHJhbmdlKHN5cy5tYXh1bmljb2RlKzEpCisgICAgICAgICAgICAgICAgaWYgdSJceDAwIiBpbiB1bmljaHIoYykubG93ZXIoKSt1bmljaHIoYykudXBwZXIoKSt1bmljaHIoYykudGl0bGUoKQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIFswXQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9idWdfNDk3MShzZWxmKToKKyAgICAgICAgIyBMRVRURVIgRFogV0lUSCBDQVJPTjogRFosIER6LCBkegorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHUwMWM0Ii50aXRsZSgpLCB1Ilx1MDFjNSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJcdTAxYzUiLnRpdGxlKCksIHUiXHUwMWM1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx1MDFjNiIudGl0bGUoKSwgdSJcdTAxYzUiKQorCisgICAgZGVmIHRlc3RfbGluZWJyZWFrXzc2NDMoc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDB4MTAwMDApOgorICAgICAgICAgICAgbGluZXMgPSAodW5pY2hyKGkpICsgdSdBJykuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBpZiBpIGluICgweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDg1LAorICAgICAgICAgICAgICAgICAgICAgMHgxYywgMHgxZCwgMHgxZSwgMHgyMDI4LCAweDIwMjkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXHUlLjR4IHNob3VsZCBiZSBhIGxpbmVicmVhayIgJSBpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lcyksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlx1JS40eCBzaG91bGQgbm90IGJlIGEgbGluZWJyZWFrIiAlIGkpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFVuaWNvZGVNaXNjVGVzdCwKKyAgICAgICAgVW5pY29kZU1ldGhvZHNUZXN0LAorICAgICAgICBVbmljb2RlRnVuY3Rpb25zVGVzdAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdW5pdHRlc3QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmE5OThiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IHVuaXR0ZXN0LnRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCh1bml0dGVzdC50ZXN0LnN1aXRlKCkpCisgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuaXZuZXdsaW5lcy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuaXZuZXdsaW5lcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE5MDkwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdW5pdm5ld2xpbmVzLnB5CkBAIC0wLDAgKzEsMTM1IEBACisjIFRlc3RzIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQgZm9yIGJvdGggcmVhZGluZyBhbmQgcGFyc2luZyBmaWxlcy4KKworIyBOT1RFOiB0aGlzIGZpbGUgdGVzdHMgdGhlIG5ldyBgaW9gIGxpYnJhcnkgYmFja3BvcnRlZCBmcm9tIFB5dGhvbiAzLnguCisjIFNpbWlsYXIgdGVzdHMgZm9yIHRoZSBidWlsdGluIGZpbGUgb2JqZWN0IGNhbiBiZSBmb3VuZCBpbiB0ZXN0X3VuaXZuZXdsaW5lczJrLnB5LgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworaW1wb3J0IGlvCitpbXBvcnQgX3B5aW8gYXMgcHlpbworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKKworaWYgbm90IGhhc2F0dHIoc3lzLnN0ZGluLCAnbmV3bGluZXMnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgIlRoaXMgUHl0aG9uIGRvZXMgbm90IGhhdmUgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydCIpCisKK0ZBVFggPSAneCcgKiAoMioqMTQpCisKK0RBVEFfVEVNUExBVEUgPSBbCisgICAgImxpbmUxPTEiLAorICAgICJsaW5lMj0ndGhpcyBpcyBhIHZlcnkgbG9uZyBsaW5lIGRlc2lnbmVkIHRvIGdvIHBhc3QgYW55IGRlZmF1bHQgIiArCisgICAgICAgICJidWZmZXIgbGltaXRzIHRoYXQgZXhpc3QgaW4gaW8ucHkgYnV0IHdlIGFsc28gd2FudCB0byB0ZXN0ICIgKworICAgICAgICAidGhlIHVuY29tbW9uIGNhc2UsIG5hdHVyYWxseS4nIiwKKyAgICAiZGVmIGxpbmUzKCk6cGFzcyIsCisgICAgImxpbmU0ID0gJyVzJyIgJSBGQVRYLAorICAgIF0KKworREFUQV9MRiA9ICJcbiIuam9pbihEQVRBX1RFTVBMQVRFKSArICJcbiIKK0RBVEFfQ1IgPSAiXHIiLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXHIiCitEQVRBX0NSTEYgPSAiXHJcbiIuam9pbihEQVRBX1RFTVBMQVRFKSArICJcclxuIgorCisjIE5vdGUgdGhhdCBEQVRBX01JWEVEIGFsc28gdGVzdHMgdGhlIGFiaWxpdHkgdG8gcmVjb2duaXplIGEgbG9uZSBccgorIyBiZWZvcmUgZW5kLW9mLWZpbGUuCitEQVRBX01JWEVEID0gIlxuIi5qb2luKERBVEFfVEVNUExBVEUpICsgIlxyIgorREFUQV9TUExJVCA9IFt4ICsgIlxuIiBmb3IgeCBpbiBEQVRBX1RFTVBMQVRFXQorCitjbGFzcyBUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyB1c2UgYSBjbGFzcyB2YXJpYWJsZSBEQVRBIHRvIGRlZmluZSB0aGUgZGF0YSB0byB3cml0ZSB0byB0aGUgZmlsZQorICAgICMgYW5kIGEgY2xhc3MgdmFyaWFibGUgTkVXTElORSB0byBzZXQgdGhlIGV4cGVjdGVkIG5ld2xpbmVzIHZhbHVlCisgICAgUkVBRE1PREUgPSAncicKKyAgICBXUklURU1PREUgPSAnd2InCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLkRBVEEKKyAgICAgICAgaWYgImIiIGluIHNlbGYuV1JJVEVNT0RFOgorICAgICAgICAgICAgZGF0YSA9IGRhdGEuZW5jb2RlKCJhc2NpaSIpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLldSSVRFTU9ERSkgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShkYXRhKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX0xGKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmcC5uZXdsaW5lcyksIHNldChzZWxmLk5FV0xJTkUpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBkYXRhID0gZnAucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmcC5uZXdsaW5lcyksIHNldChzZWxmLk5FV0xJTkUpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBbXQorICAgICAgICAgICAgZCA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHdoaWxlIGQ6CisgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZCkKKyAgICAgICAgICAgICAgICBkID0gZnAucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGZwLm5ld2xpbmVzKSwgc2V0KHNlbGYuTkVXTElORSkpCisKKyAgICBkZWYgdGVzdF9zZWVrKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICBwb3MgPSBmcC50ZWxsKCkKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUWzE6XSkKKyAgICAgICAgICAgIGZwLnNlZWsocG9zKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVFsxOl0pCisKKworY2xhc3MgVGVzdENSTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSAnXHInCisgICAgREFUQSA9IERBVEFfQ1IKKworY2xhc3MgVGVzdExGTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSAnXG4nCisgICAgREFUQSA9IERBVEFfTEYKKworY2xhc3MgVGVzdENSTEZOZXdsaW5lcyhUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyk6CisgICAgTkVXTElORSA9ICdcclxuJworICAgIERBVEEgPSBEQVRBX0NSTEYKKworICAgIGRlZiB0ZXN0X3RlbGwoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoTm9uZSkpCisgICAgICAgICAgICBkYXRhID0gZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgcG9zID0gZnAudGVsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoc2VsZi5ORVdMSU5FKSkKKworY2xhc3MgVGVzdE1peGVkTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSAoJ1xyJywgJ1xuJykKKyAgICBEQVRBID0gREFUQV9NSVhFRAorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBiYXNlX3Rlc3RzID0gKFRlc3RDUk5ld2xpbmVzLAorICAgICAgICAgICAgICAgICAgVGVzdExGTmV3bGluZXMsCisgICAgICAgICAgICAgICAgICBUZXN0Q1JMRk5ld2xpbmVzLAorICAgICAgICAgICAgICAgICAgVGVzdE1peGVkTmV3bGluZXMpCisgICAgdGVzdHMgPSBbXQorICAgICMgVGVzdCB0aGUgQyBhbmQgUHl0aG9uIGltcGxlbWVudGF0aW9ucy4KKyAgICBmb3IgdGVzdCBpbiBiYXNlX3Rlc3RzOgorICAgICAgICBjbGFzcyBDVGVzdCh0ZXN0KToKKyAgICAgICAgICAgIG9wZW4gPSBpby5vcGVuCisgICAgICAgIENUZXN0Ll9fbmFtZV9fID0gc3RyKCJDIiArIHRlc3QuX19uYW1lX18pCisgICAgICAgIGNsYXNzIFB5VGVzdCh0ZXN0KToKKyAgICAgICAgICAgIG9wZW4gPSBzdGF0aWNtZXRob2QocHlpby5vcGVuKQorICAgICAgICBQeVRlc3QuX19uYW1lX18gPSBzdHIoIlB5IiArIHRlc3QuX19uYW1lX18pCisgICAgICAgIHRlc3RzLmFwcGVuZChDVGVzdCkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFB5VGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuaXZuZXdsaW5lczJrLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdW5pdm5ld2xpbmVzMmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjYTMxZAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VuaXZuZXdsaW5lczJrLnB5CkBAIC0wLDAgKzEsMTMwIEBACisjIFRlc3RzIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQgZm9yIGJvdGggcmVhZGluZyBhbmQgcGFyc2luZyBmaWxlcy4KK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpZiBub3QgaGFzYXR0cihzeXMuc3RkaW4sICduZXdsaW5lcycpOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCBcCisgICAgICAgICJUaGlzIFB5dGhvbiBkb2VzIG5vdCBoYXZlIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQiCisKK0ZBVFggPSAneCcgKiAoMioqMTQpCisKK0RBVEFfVEVNUExBVEUgPSBbCisgICAgImxpbmUxPTEiLAorICAgICJsaW5lMj0ndGhpcyBpcyBhIHZlcnkgbG9uZyBsaW5lIGRlc2lnbmVkIHRvIGdvIHBhc3QgdGhlIG1hZ2ljICIgKworICAgICAgICAiaHVuZHJlZCBjaGFyYWN0ZXIgbGltaXQgdGhhdCBpcyBpbnNpZGUgZmlsZW9iamVjdC5jIGFuZCB3aGljaCAiICsKKyAgICAgICAgImlzIG1lYW50IHRvIHNwZWVkIHVwIHRoZSBjb21tb24gY2FzZSwgYnV0IHdlIGFsc28gd2FudCB0byB0ZXN0ICIgKworICAgICAgICAidGhlIHVuY29tbW9uIGNhc2UsIG5hdHVyYWxseS4nIiwKKyAgICAiZGVmIGxpbmUzKCk6cGFzcyIsCisgICAgImxpbmU0ID0gJyVzJyIgJSBGQVRYLAorICAgIF0KKworREFUQV9MRiA9ICJcbiIuam9pbihEQVRBX1RFTVBMQVRFKSArICJcbiIKK0RBVEFfQ1IgPSAiXHIiLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXHIiCitEQVRBX0NSTEYgPSAiXHJcbiIuam9pbihEQVRBX1RFTVBMQVRFKSArICJcclxuIgorCisjIE5vdGUgdGhhdCBEQVRBX01JWEVEIGFsc28gdGVzdHMgdGhlIGFiaWxpdHkgdG8gcmVjb2duaXplIGEgbG9uZSBccgorIyBiZWZvcmUgZW5kLW9mLWZpbGUuCitEQVRBX01JWEVEID0gIlxuIi5qb2luKERBVEFfVEVNUExBVEUpICsgIlxyIgorREFUQV9TUExJVCA9IFt4ICsgIlxuIiBmb3IgeCBpbiBEQVRBX1RFTVBMQVRFXQorZGVsIHgKKworY2xhc3MgVGVzdEdlbmVyaWNVbml2TmV3bGluZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgdXNlIGEgY2xhc3MgdmFyaWFibGUgREFUQSB0byBkZWZpbmUgdGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIGZpbGUKKyAgICAjIGFuZCBhIGNsYXNzIHZhcmlhYmxlIE5FV0xJTkUgdG8gc2V0IHRoZSBleHBlY3RlZCBuZXdsaW5lcyB2YWx1ZQorICAgIFJFQURNT0RFID0gJ1UnCisgICAgV1JJVEVNT0RFID0gJ3diJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5XUklURU1PREUpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5EQVRBKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfTEYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoc2VsZi5ORVdMSU5FKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZwLm5ld2xpbmVzKSwgcmVwcihzZWxmLk5FV0xJTkUpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBbXQorICAgICAgICAgICAgZCA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHdoaWxlIGQ6CisgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZCkKKyAgICAgICAgICAgICAgICBkID0gZnAucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoc2VsZi5ORVdMSU5FKSkKKworICAgIGRlZiB0ZXN0X3NlZWsoc2VsZik6CisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHBvcyA9IGZwLnRlbGwoKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVRbMTpdKQorICAgICAgICAgICAgZnAuc2Vlayhwb3MpCisgICAgICAgICAgICBkYXRhID0gZnAucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUWzE6XSkKKworICAgIGRlZiB0ZXN0X2V4ZWNmaWxlKHNlbGYpOgorICAgICAgICBuYW1lc3BhY2UgPSB7fQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBleGVjZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBuYW1lc3BhY2UpCisgICAgICAgIGZ1bmMgPSBuYW1lc3BhY2VbJ2xpbmUzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lc3BhY2VbJ2xpbmU0J10sIEZBVFgpCisKKworY2xhc3MgVGVzdE5hdGl2ZU5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gTm9uZQorICAgIERBVEEgPSBEQVRBX0xGCisgICAgUkVBRE1PREUgPSAncicKKyAgICBXUklURU1PREUgPSAndycKKworY2xhc3MgVGVzdENSTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSAnXHInCisgICAgREFUQSA9IERBVEFfQ1IKKworY2xhc3MgVGVzdExGTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSAnXG4nCisgICAgREFUQSA9IERBVEFfTEYKKworY2xhc3MgVGVzdENSTEZOZXdsaW5lcyhUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyk6CisgICAgTkVXTElORSA9ICdcclxuJworICAgIERBVEEgPSBEQVRBX0NSTEYKKworICAgIGRlZiB0ZXN0X3RlbGwoc2VsZik6CisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoTm9uZSkpCisgICAgICAgICAgICBkYXRhID0gZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgcG9zID0gZnAudGVsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoc2VsZi5ORVdMSU5FKSkKKworY2xhc3MgVGVzdE1peGVkTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSAoJ1xyJywgJ1xuJykKKyAgICBEQVRBID0gREFUQV9NSVhFRAorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0TmF0aXZlTmV3bGluZXMsCisgICAgICAgIFRlc3RDUk5ld2xpbmVzLAorICAgICAgICBUZXN0TEZOZXdsaW5lcywKKyAgICAgICAgVGVzdENSTEZOZXdsaW5lcywKKyAgICAgICAgVGVzdE1peGVkTmV3bGluZXMKKyAgICAgKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91bnBhY2sucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91bnBhY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkYmM2MgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VucGFjay5weQpAQCAtMCwwICsxLDEzMCBAQAorZG9jdGVzdHMgPSAiIiIKKworVW5wYWNrIHR1cGxlCisKKyAgICA+Pj4gdCA9ICgxLCAyLCAzKQorICAgID4+PiBhLCBiLCBjID0gdAorICAgID4+PiBhID09IDEgYW5kIGIgPT0gMiBhbmQgYyA9PSAzCisgICAgVHJ1ZQorCitVbnBhY2sgbGlzdAorCisgICAgPj4+IGwgPSBbNCwgNSwgNl0KKyAgICA+Pj4gYSwgYiwgYyA9IGwKKyAgICA+Pj4gYSA9PSA0IGFuZCBiID09IDUgYW5kIGMgPT0gNgorICAgIFRydWUKKworVW5wYWNrIGltcGxpZWQgdHVwbGUKKworICAgID4+PiBhLCBiLCBjID0gNywgOCwgOQorICAgID4+PiBhID09IDcgYW5kIGIgPT0gOCBhbmQgYyA9PSA5CisgICAgVHJ1ZQorCitVbnBhY2sgc3RyaW5nLi4uIGZ1biEKKworICAgID4+PiBhLCBiLCBjID0gJ29uZScKKyAgICA+Pj4gYSA9PSAnbycgYW5kIGIgPT0gJ24nIGFuZCBjID09ICdlJworICAgIFRydWUKKworVW5wYWNrIGdlbmVyaWMgc2VxdWVuY2UKKworICAgID4+PiBjbGFzcyBTZXE6CisgICAgLi4uICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgLi4uICAgICAgICAgaWYgaSA+PSAwIGFuZCBpIDwgMzogcmV0dXJuIGkKKyAgICAuLi4gICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgLi4uCisgICAgPj4+IGEsIGIsIGMgPSBTZXEoKQorICAgID4+PiBhID09IDAgYW5kIGIgPT0gMSBhbmQgYyA9PSAyCisgICAgVHJ1ZQorCitTaW5nbGUgZWxlbWVudCB1bnBhY2tpbmcsIHdpdGggZXh0cmEgc3ludGF4CisKKyAgICA+Pj4gc3QgPSAoOTksKQorICAgID4+PiBzbCA9IFsxMDBdCisgICAgPj4+IGEsID0gc3QKKyAgICA+Pj4gYQorICAgIDk5CisgICAgPj4+IGIsID0gc2wKKyAgICA+Pj4gYgorICAgIDEwMAorCitOb3cgZm9yIHNvbWUgZmFpbHVyZXMKKworVW5wYWNraW5nIG5vbi1zZXF1ZW5jZQorCisgICAgPj4+IGEsIGIsIGMgPSA3CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiAnaW50JyBvYmplY3QgaXMgbm90IGl0ZXJhYmxlCisKK1VucGFja2luZyB0dXBsZSBvZiB3cm9uZyBzaXplCisKKyAgICA+Pj4gYSwgYiA9IHQKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiB0b28gbWFueSB2YWx1ZXMgdG8gdW5wYWNrCisKK1VucGFja2luZyB0dXBsZSBvZiB3cm9uZyBzaXplCisKKyAgICA+Pj4gYSwgYiA9IGwKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiB0b28gbWFueSB2YWx1ZXMgdG8gdW5wYWNrCisKK1VucGFja2luZyBzZXF1ZW5jZSB0b28gc2hvcnQKKworICAgID4+PiBhLCBiLCBjLCBkID0gU2VxKCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBuZWVkIG1vcmUgdGhhbiAzIHZhbHVlcyB0byB1bnBhY2sKKworVW5wYWNraW5nIHNlcXVlbmNlIHRvbyBsb25nCisKKyAgICA+Pj4gYSwgYiA9IFNlcSgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVmFsdWVFcnJvcjogdG9vIG1hbnkgdmFsdWVzIHRvIHVucGFjaworCitVbnBhY2tpbmcgYSBzZXF1ZW5jZSB3aGVyZSB0aGUgdGVzdCBmb3IgdG9vIGxvbmcgcmFpc2VzIGEgZGlmZmVyZW50IGtpbmQgb2YKK2Vycm9yCisKKyAgICA+Pj4gY2xhc3MgQm96b0Vycm9yKEV4Y2VwdGlvbik6CisgICAgLi4uICAgICBwYXNzCisgICAgLi4uCisgICAgPj4+IGNsYXNzIEJhZFNlcToKKyAgICAuLi4gICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAuLi4gICAgICAgICBpZiBpID49IDAgYW5kIGkgPCAzOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gaQorICAgIC4uLiAgICAgICAgIGVsaWYgaSA9PSAzOgorICAgIC4uLiAgICAgICAgICAgICByYWlzZSBCb3pvRXJyb3IKKyAgICAuLi4gICAgICAgICBlbHNlOgorICAgIC4uLiAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgLi4uCisKK1RyaWdnZXIgY29kZSB3aGlsZSBub3QgZXhwZWN0aW5nIGFuIEluZGV4RXJyb3IgKHVucGFjayBzZXF1ZW5jZSB0b28gbG9uZywgd3JvbmcKK2Vycm9yKQorCisgICAgPj4+IGEsIGIsIGMsIGQsIGUgPSBCYWRTZXEoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIEJvem9FcnJvcgorCitUcmlnZ2VyIGNvZGUgd2hpbGUgZXhwZWN0aW5nIGFuIEluZGV4RXJyb3IgKHVucGFjayBzZXF1ZW5jZSB0b28gc2hvcnQsIHdyb25nCitlcnJvcikKKworICAgID4+PiBhLCBiLCBjID0gQmFkU2VxKCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBCb3pvRXJyb3IKKworIiIiCisKK19fdGVzdF9fID0geydkb2N0ZXN0cycgOiBkb2N0ZXN0c30KKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPUZhbHNlKToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF91bnBhY2sKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF91bnBhY2ssIHZlcmJvc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTI3M2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CkBAIC0wLDAgKzEsOTEzIEBACisiIiJSZWdyZXNzc2lvbiB0ZXN0cyBmb3IgdXJsbGliIiIiCisKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCBodHRwbGliCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IG1pbWV0b29scworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgU3RyaW5nSU8KKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gYmFzZTY0IGltcG9ydCBiNjRlbmNvZGUKKworCitkZWYgaGV4ZXNjYXBlKGNoYXIpOgorICAgICIiIkVzY2FwZSBjaGFyIGFzIFJGQyAyMzk2IHNwZWNpZmllcyIiIgorICAgIGhleF9yZXByID0gaGV4KG9yZChjaGFyKSlbMjpdLnVwcGVyKCkKKyAgICBpZiBsZW4oaGV4X3JlcHIpID09IDE6CisgICAgICAgIGhleF9yZXByID0gIjAlcyIgJSBoZXhfcmVwcgorICAgIHJldHVybiAiJSIgKyBoZXhfcmVwcgorCisKK2NsYXNzIEZha2VIVFRQTWl4aW4ob2JqZWN0KToKKyAgICBkZWYgZmFrZWh0dHAoc2VsZiwgZmFrZWRhdGEpOgorICAgICAgICBjbGFzcyBGYWtlU29ja2V0KFN0cmluZ0lPLlN0cmluZ0lPKToKKworICAgICAgICAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICAgICAgRmFrZUhUVFBDb25uZWN0aW9uLmJ1ZiA9IGRhdGEKKworICAgICAgICAgICAgZGVmIG1ha2VmaWxlKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiByZWFkKHNlbGYsIGFtdD1Ob25lKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0lPLlN0cmluZ0lPLnJlYWQoc2VsZiwgYW10KQorCisgICAgICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGVuZ3RoPU5vbmUpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nSU8uU3RyaW5nSU8ucmVhZGxpbmUoc2VsZiwgbGVuZ3RoKQorCisgICAgICAgIGNsYXNzIEZha2VIVFRQQ29ubmVjdGlvbihodHRwbGliLkhUVFBDb25uZWN0aW9uKToKKworICAgICAgICAgICAgIyBidWZmZXIgdG8gc3RvcmUgZGF0YSBmb3IgdmVyaWZpY2F0aW9uIGluIHVybG9wZW4gdGVzdHMuCisgICAgICAgICAgICBidWYgPSAiIgorCisgICAgICAgICAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBGYWtlU29ja2V0KGZha2VkYXRhKQorCisgICAgICAgIGFzc2VydCBodHRwbGliLkhUVFAuX2Nvbm5lY3Rpb25fY2xhc3MgPT0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbgorCisgICAgICAgIGh0dHBsaWIuSFRUUC5fY29ubmVjdGlvbl9jbGFzcyA9IEZha2VIVFRQQ29ubmVjdGlvbgorCisgICAgZGVmIHVuZmFrZWh0dHAoc2VsZik6CisgICAgICAgIGh0dHBsaWIuSFRUUC5fY29ubmVjdGlvbl9jbGFzcyA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24KKworCitjbGFzcyB1cmxvcGVuX0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIHRlbXBvcmFyeSBmaWxlLgorCisgICAgVHJ5IHRvIHRlc3QgYXMgbXVjaCBmdW5jdGlvbmFsaXR5IGFzIHBvc3NpYmxlIHNvIGFzIHRvIGN1dCBkb3duIG9uIHJlbGlhbmNlCisgICAgb24gY29ubmVjdGluZyB0byB0aGUgTmV0IGZvciB0ZXN0aW5nLgorCisgICAgIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIlNldHVwIG9mIGEgdGVtcCBmaWxlIHRvIHVzZSBmb3IgdGVzdGluZyIiIgorICAgICAgICBzZWxmLnRleHQgPSAidGVzdF91cmxsaWI6ICVzXG4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgRklMRSA9IGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgRklMRS53cml0ZShzZWxmLnRleHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBGSUxFLmNsb3NlKCkKKyAgICAgICAgc2VsZi5wYXRobmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi5yZXR1cm5lZF9vYmogPSB1cmxsaWIudXJsb3BlbigiZmlsZTolcyIgJSBzZWxmLnBhdGhuYW1lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAiIiJTaHV0IGRvd24gdGhlIG9wZW4gb2JqZWN0IiIiCisgICAgICAgIHNlbGYucmV0dXJuZWRfb2JqLmNsb3NlKCkKKyAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9pbnRlcmZhY2Uoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIG9iamVjdCByZXR1cm5lZCBieSB1cmxvcGVuKCkgaGFzIHRoZSBzcGVjaWZpZWQgbWV0aG9kcworICAgICAgICBmb3IgYXR0ciBpbiAoInJlYWQiLCAicmVhZGxpbmUiLCAicmVhZGxpbmVzIiwgImZpbGVubyIsCisgICAgICAgICAgICAgICAgICAgICAiY2xvc2UiLCAiaW5mbyIsICJnZXR1cmwiLCAiZ2V0Y29kZSIsICJfX2l0ZXJfXyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5yZXR1cm5lZF9vYmosIGF0dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgdXJsb3BlbigpIGxhY2tzICVzIGF0dHJpYnV0ZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dCwgc2VsZi5yZXR1cm5lZF9vYmoucmVhZCgpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LCBzZWxmLnJldHVybmVkX29iai5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLnJldHVybmVkX29iai5yZWFkbGluZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxsaW5nIHJlYWRsaW5lKCkgYWZ0ZXIgZXhoYXVzdGluZyB0aGUgZmlsZSBkaWQgbm90IgorICAgICAgICAgICAgICAgICAgICAgICAgICIgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyIpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIGxpbmVzX2xpc3QgPSBzZWxmLnJldHVybmVkX29iai5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lc19saXN0KSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmVzKCkgcmV0dXJuZWQgdGhlIHdyb25nIG51bWJlciBvZiBsaW5lcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXNfbGlzdFswXSwgc2VsZi50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZXMoKSByZXR1cm5lZCBpbXByb3BlciB0ZXh0IikKKworICAgIGRlZiB0ZXN0X2ZpbGVubyhzZWxmKToKKyAgICAgICAgZmlsZV9udW0gPSBzZWxmLnJldHVybmVkX29iai5maWxlbm8oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmlsZV9udW0sIGludCwgImZpbGVubygpIGRpZCBub3QgcmV0dXJuIGFuIGludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChmaWxlX251bSwgbGVuKHNlbGYudGV4dCkpLCBzZWxmLnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJlYWRpbmcgb24gdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBmaWxlbm8oKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgcmV0dXJuIHRoZSBleHBlY3RlZCB0ZXh0IikKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2xvc2UoKSBieSBjYWxsaW5nIGl0IGhlYXIgYW5kIHRoZW4gaGF2aW5nIGl0IGJlIGNhbGxlZCBhZ2FpbgorICAgICAgICAjIGJ5IHRoZSB0ZWFyRG93bigpIG1ldGhvZCBmb3IgdGhlIHRlc3QKKyAgICAgICAgc2VsZi5yZXR1cm5lZF9vYmouY2xvc2UoKQorCisgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYucmV0dXJuZWRfb2JqLmluZm8oKSwgbWltZXRvb2xzLk1lc3NhZ2UpCisKKyAgICBkZWYgdGVzdF9nZXR1cmwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZXR1cm5lZF9vYmouZ2V0dXJsKCksIHNlbGYucGF0aG5hbWUpCisKKyAgICBkZWYgdGVzdF9nZXRjb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmV0dXJuZWRfb2JqLmdldGNvZGUoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgICMgVGVzdCBpdGVyYXRvcgorICAgICAgICAjIERvbid0IG5lZWQgdG8gY291bnQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgc2luY2UgdGVzdCB3b3VsZCBmYWlsIHRoZQorICAgICAgICAjIGluc3RhbnQgaXQgcmV0dXJuZWQgYW55dGhpbmcgYmV5b25kIHRoZSBmaXJzdCBsaW5lIGZyb20gdGhlCisgICAgICAgICMgY29tcGFyaXNvbgorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLnJldHVybmVkX29iai5fX2l0ZXJfXygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBzZWxmLnRleHQpCisKKyAgICBkZWYgdGVzdF9yZWxhdGl2ZWxvY2FsZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcix1cmxsaWIudXJsb3BlbiwnLi8nICsgc2VsZi5wYXRobmFtZSkKKworY2xhc3MgUHJveHlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgUmVjb3JkcyBjaGFuZ2VzIHRvIGVudiB2YXJzCisgICAgICAgIHNlbGYuZW52ID0gdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKQorICAgICAgICAjIERlbGV0ZSBhbGwgcHJveHkgcmVsYXRlZCBlbnYgdmFycworICAgICAgICBmb3IgayBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgICAgIGlmICdwcm94eScgaW4gay5sb3dlcigpOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnVuc2V0KGspCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgUmVzdG9yZSBhbGwgcHJveHkgcmVsYXRlZCBlbnYgdmFycworICAgICAgICBzZWxmLmVudi5fX2V4aXRfXygpCisgICAgICAgIGRlbCBzZWxmLmVudgorCisgICAgZGVmIHRlc3RfZ2V0cHJveGllc19lbnZpcm9ubWVudF9rZWVwX25vX3Byb3hpZXMoc2VsZik6CisgICAgICAgIHNlbGYuZW52LnNldCgnTk9fUFJPWFknLCAnbG9jYWxob3N0JykKKyAgICAgICAgcHJveGllcyA9IHVybGxpYi5nZXRwcm94aWVzX2Vudmlyb25tZW50KCkKKyAgICAgICAgIyBnZXRwcm94aWVzX2Vudmlyb25tZW50IHVzZSBsb3dlcmVkIGNhc2UgdHJ1bmNhdGVkIChubyAnX3Byb3h5Jykga2V5cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdsb2NhbGhvc3QnLCBwcm94aWVzWydubyddKQorICAgICAgICAjIExpc3Qgb2Ygbm9fcHJveGllcyB3aXRoIHNwYWNlLgorICAgICAgICBzZWxmLmVudi5zZXQoJ05PX1BST1hZJywgJ2xvY2FsaG9zdCwgYW5vdGhlcmRvbWFpbi5jb20sIG5ld2RvbWFpbi5jb20nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXJsbGliLnByb3h5X2J5cGFzc19lbnZpcm9ubWVudCgnYW5vdGhlcmRvbWFpbi5jb20nKSkKKworCitjbGFzcyB1cmxvcGVuX0h0dHBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSwgRmFrZUhUVFBNaXhpbik6CisgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIGZha2UgaHR0cCBjb25uZWN0aW9uLiIiIgorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5mYWtlaHR0cCgnSGVsbG8hJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnAgPSB1cmxsaWIudXJsb3BlbigiaHR0cDovL3B5dGhvbi5vcmcvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgJ0hlbGxvIScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKCksICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5nZXR1cmwoKSwgJ2h0dHA6Ly9weXRob24ub3JnLycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmdldGNvZGUoKSwgMjAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKKworICAgIGRlZiB0ZXN0X3VybF9mcmFnbWVudChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTE3MDM6IGdldHVybCgpIG9taXRzIGZyYWdtZW50cyBpbiB0aGUgb3JpZ2luYWwgVVJMLgorICAgICAgICB1cmwgPSAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3VybGxpYi5odG1sI09LJworICAgICAgICBzZWxmLmZha2VodHRwKCdIZWxsbyEnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcCA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAuZ2V0dXJsKCksIHVybCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCisKKyAgICBkZWYgdGVzdF9yZWFkX2JvZ3VzKHNlbGYpOgorICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgSU9FcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KKyAgICAgICAgc2VsZi5mYWtlaHR0cCgnJydIVFRQLzEuMSA0MDEgQXV0aGVudGljYXRpb24gUmVxdWlyZWQKK0RhdGU6IFdlZCwgMDIgSmFuIDIwMDggMDM6MDM6NTQgR01UCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMzMgKERlYmlhbiBHTlUvTGludXgpIG1vZF9zc2wvMi44LjIyIE9wZW5TU0wvMC45LjdlCitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQorJycnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB1cmxsaWIudXJsb3BlbiwgImh0dHA6Ly9weXRob24ub3JnLyIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9yZWRpcmVjdChzZWxmKToKKyAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIElPRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCisgICAgICAgIHNlbGYuZmFrZWh0dHAoIiIiSFRUUC8xLjEgMzAyIEZvdW5kCitEYXRlOiBXZWQsIDAyIEphbiAyMDA4IDAzOjAzOjU0IEdNVAorU2VydmVyOiBBcGFjaGUvMS4zLjMzIChEZWJpYW4gR05VL0xpbnV4KSBtb2Rfc3NsLzIuOC4yMiBPcGVuU1NMLzAuOS43ZQorTG9jYXRpb246IGZpbGU6UkVBRE1FCitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQorIiIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB1cmxsaWIudXJsb3BlbiwgImh0dHA6Ly9weXRob24ub3JnLyIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc29ja2V0KHNlbGYpOgorICAgICAgICAjIHVybG9wZW4oKSByYWlzZXMgSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgZG9lcyBub3Qgc2VuZCBhbnkKKyAgICAgICAgIyBkYXRhLiAoIzE2ODAyMzApCisgICAgICAgIHNlbGYuZmFrZWh0dHAoJycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybGxpYi51cmxvcGVuLCAnaHR0cDovL3NvbWV0aGluZycpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19sb2NhbGZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybGxpYi51cmxvcGVuLAorICAgICAgICAgICAgICAgICdmaWxlOi8vbG9jYWxob3N0L2EvbWlzc2luZy9maWxlLnB5JykKKyAgICAgICAgZmQsIHRtcF9maWxlID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHRtcF9maWxldXJsID0gJ2ZpbGU6Ly9sb2NhbGhvc3QvJyArIHRtcF9maWxlLnJlcGxhY2Uob3MucGF0aC5zZXAsICcvJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRtcF9maWxlKSkKKyAgICAgICAgICAgIGZwID0gdXJsbGliLnVybG9wZW4odG1wX2ZpbGV1cmwpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgb3MudW5saW5rKHRtcF9maWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHModG1wX2ZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB1cmxsaWIudXJsb3BlbiwgdG1wX2ZpbGV1cmwpCisKKyAgICBkZWYgdGVzdF9mdHBfbm9uZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybGxpYi51cmxvcGVuLAorICAgICAgICAgICAgICAgICdmdHA6Ly9sb2NhbGhvc3Qvbm90L2V4aXN0aW5nL2ZpbGUucHknKQorCisKKyAgICBkZWYgdGVzdF91c2VycGFzc19pbnVybChzZWxmKToKKyAgICAgICAgc2VsZi5mYWtlaHR0cCgnSGVsbG8hJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmFrZWh0dHBfd3JhcHBlciA9IGh0dHBsaWIuSFRUUC5fY29ubmVjdGlvbl9jbGFzcworICAgICAgICAgICAgZnAgPSB1cmxsaWIudXJsb3BlbigiaHR0cDovL3VzZXI6cGFzc0BweXRob24ub3JnLyIpCisgICAgICAgICAgICBhdXRob3JpemF0aW9uID0gKCJBdXRob3JpemF0aW9uOiBCYXNpYyAlc1xyXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiNjRlbmNvZGUoJ3VzZXI6cGFzcycpKQorICAgICAgICAgICAgIyBUaGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgbXVzdCBiZSBpbiBwbGFjZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihhdXRob3JpemF0aW9uLCBmYWtlaHR0cF93cmFwcGVyLmJ1ZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgIkhlbGxvISIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKCksICIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5nZXR1cmwoKSwgJ2h0dHA6Ly91c2VyOnBhc3NAcHl0aG9uLm9yZy8nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5nZXRjb2RlKCksIDIwMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCisKKyAgICBkZWYgdGVzdF91c2VycGFzc193aXRoX3NwYWNlc19pbnVybChzZWxmKToKKyAgICAgICAgc2VsZi5mYWtlaHR0cCgnSGVsbG8hJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXJsID0gImh0dHA6Ly9hIGI6YyBkQHB5dGhvbi5vcmcvIgorICAgICAgICAgICAgZmFrZWh0dHBfd3JhcHBlciA9IGh0dHBsaWIuSFRUUC5fY29ubmVjdGlvbl9jbGFzcworICAgICAgICAgICAgYXV0aG9yaXphdGlvbiA9ICgiQXV0aG9yaXphdGlvbjogQmFzaWMgJXNcclxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI2NGVuY29kZSgnYSBiOmMgZCcpKQorICAgICAgICAgICAgZnAgPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgICAgICAgICAjIFRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBtdXN0IGJlIGluIHBsYWNlCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGF1dGhvcml6YXRpb24sIGZha2VodHRwX3dyYXBwZXIuYnVmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgpLCAiSGVsbG8hIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgIiIpCisgICAgICAgICAgICAjIHRoZSBzcGFjZXMgYXJlIHF1b3RlZCBpbiBVUkwgc28gbm8gbWF0Y2gKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZnAuZ2V0dXJsKCksIHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAuZ2V0Y29kZSgpLCAyMDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQorCisKK2NsYXNzIHVybHJldHJpZXZlX0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1cmxsaWIudXJscmV0cmlldmUoKSBvbiBsb2NhbCBmaWxlcyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIGxpc3Qgb2YgdGVtcG9yYXJ5IGZpbGVzLiBFYWNoIGl0ZW0gaW4gdGhlIGxpc3QgaXMgYSBmaWxlCisgICAgICAgICMgbmFtZSAoYWJzb2x1dGUgcGF0aCBvciByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkuCisgICAgICAgICMgQWxsIGZpbGVzIGluIHRoaXMgbGlzdCB3aWxsIGJlIGRlbGV0ZWQgaW4gdGhlIHRlYXJEb3duIG1ldGhvZC4gTm90ZSwKKyAgICAgICAgIyB0aGlzIG9ubHkgaGVscHMgdG8gbWFrZXMgc3VyZSB0ZW1wb3JhcnkgZmlsZXMgZ2V0IGRlbGV0ZWQsIGJ1dCBpdAorICAgICAgICAjIGRvZXMgbm90aGluZyBhYm91dCB0cnlpbmcgdG8gY2xvc2UgZmlsZXMgdGhhdCBtYXkgc3RpbGwgYmUgb3Blbi4gSXQKKyAgICAgICAgIyBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGRldmVsb3BlciB0byBwcm9wZXJseSBjbG9zZSBmaWxlcyBldmVuCisgICAgICAgICMgd2hlbiBleGNlcHRpb25hbCBjb25kaXRpb25zIG9jY3VyLgorICAgICAgICBzZWxmLnRlbXBGaWxlcyA9IFtdCisKKyAgICAgICAgIyBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZS4KKyAgICAgICAgc2VsZi5yZWdpc3RlckZpbGVGb3JDbGVhblVwKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYudGV4dCA9ICd0ZXN0aW5nIHVybGxpYi51cmxyZXRyaWV2ZScKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgRklMRSA9IGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKKyAgICAgICAgICAgIEZJTEUud3JpdGUoc2VsZi50ZXh0KQorICAgICAgICAgICAgRklMRS5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6IEZJTEUuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0OiBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZXMuCisgICAgICAgIGZvciBlYWNoIGluIHNlbGYudGVtcEZpbGVzOgorICAgICAgICAgICAgdHJ5OiBvcy5yZW1vdmUoZWFjaCkKKyAgICAgICAgICAgIGV4Y2VwdDogcGFzcworCisgICAgZGVmIGNvbnN0cnVjdExvY2FsRmlsZVVybChzZWxmLCBmaWxlUGF0aCk6CisgICAgICAgIHJldHVybiAiZmlsZTovLyVzIiAlIHVybGxpYi5wYXRobmFtZTJ1cmwob3MucGF0aC5hYnNwYXRoKGZpbGVQYXRoKSkKKworICAgIGRlZiBjcmVhdGVOZXdUZW1wRmlsZShzZWxmLCBkYXRhPSIiKToKKyAgICAgICAgIiIiQ3JlYXRlcyBhIG5ldyB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBzcGVjaWZpZWQgZGF0YSwKKyAgICAgICAgcmVnaXN0ZXJzIHRoZSBmaWxlIGZvciBkZWxldGlvbiBkdXJpbmcgdGhlIHRlc3QgZml4dHVyZSB0ZWFyIGRvd24sIGFuZAorICAgICAgICByZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaWxlLiIiIgorCisgICAgICAgIG5ld0ZkLCBuZXdGaWxlUGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJlZ2lzdGVyRmlsZUZvckNsZWFuVXAobmV3RmlsZVBhdGgpCisgICAgICAgICAgICBuZXdGaWxlID0gb3MuZmRvcGVuKG5ld0ZkLCAid2IiKQorICAgICAgICAgICAgbmV3RmlsZS53cml0ZShkYXRhKQorICAgICAgICAgICAgbmV3RmlsZS5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6IG5ld0ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0OiBwYXNzCisgICAgICAgIHJldHVybiBuZXdGaWxlUGF0aAorCisgICAgZGVmIHJlZ2lzdGVyRmlsZUZvckNsZWFuVXAoc2VsZiwgZmlsZU5hbWUpOgorICAgICAgICBzZWxmLnRlbXBGaWxlcy5hcHBlbmQoZmlsZU5hbWUpCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBhIGxvY2FsIGZpbGUganVzdCBnZXRzIGl0cyBvd24gbG9jYXRpb24gcmV0dXJuZWQgYW5kCisgICAgICAgICMgYSBoZWFkZXJzIHZhbHVlIGlzIHJldHVybmVkLgorICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJscmV0cmlldmUoImZpbGU6JXMiICUgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMF0sIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHRbMV0sIG1pbWV0b29scy5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgZ2V0IGEgbWltZXRvb2xzLk1lc3NhZ2UgaW5zdGFuY2UgYXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCByZXR1cm5lZCB2YWx1ZSIpCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBmaWxlbmFtZSBhcmd1bWVudCB3b3Jrcy4KKyAgICAgICAgc2Vjb25kX3RlbXAgPSAiJXMuMiIgJSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYucmVnaXN0ZXJGaWxlRm9yQ2xlYW5VcChzZWNvbmRfdGVtcCkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybHJldHJpZXZlKHNlbGYuY29uc3RydWN0TG9jYWxGaWxlVXJsKAorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiksIHNlY29uZF90ZW1wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY29uZF90ZW1wLCByZXN1bHRbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWNvbmRfdGVtcCksICJjb3B5IG9mIHRoZSBmaWxlIHdhcyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFkZSIpCisgICAgICAgIEZJTEUgPSBmaWxlKHNlY29uZF90ZW1wLCAncmInKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gRklMRS5yZWFkKCkKKyAgICAgICAgICAgIEZJTEUuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OiBGSUxFLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdDogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dCwgdGV4dCkKKworICAgIGRlZiB0ZXN0X3JlcG9ydGhvb2soc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHJlcG9ydGhvb2sgd29ya3MuCisgICAgICAgIGRlZiBob29rdGVzdGVyKGNvdW50LCBibG9ja19zaXplLCB0b3RhbF9zaXplLCBjb3VudF9ob2xkZXI9WzBdKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjb3VudCwgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJsb2NrX3NpemUsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0b3RhbF9zaXplLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBjb3VudF9ob2xkZXJbMF0pCisgICAgICAgICAgICBjb3VudF9ob2xkZXJbMF0gPSBjb3VudF9ob2xkZXJbMF0gKyAxCisgICAgICAgIHNlY29uZF90ZW1wID0gIiVzLjIiICUgdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBzZWxmLnJlZ2lzdGVyRmlsZUZvckNsZWFuVXAoc2Vjb25kX3RlbXApCisgICAgICAgIHVybGxpYi51cmxyZXRyaWV2ZShzZWxmLmNvbnN0cnVjdExvY2FsRmlsZVVybCh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwKKyAgICAgICAgICAgIHNlY29uZF90ZW1wLCBob29rdGVzdGVyKQorCisgICAgZGVmIHRlc3RfcmVwb3J0aG9va18wX2J5dGVzKHNlbGYpOgorICAgICAgICAjIFRlc3Qgb24gemVybyBsZW5ndGggZmlsZS4gU2hvdWxkIGNhbGwgcmVwb3J0aG9vayBvbmx5IDEgdGltZS4KKyAgICAgICAgcmVwb3J0ID0gW10KKyAgICAgICAgZGVmIGhvb2t0ZXN0ZXIoY291bnQsIGJsb2NrX3NpemUsIHRvdGFsX3NpemUsIF9yZXBvcnQ9cmVwb3J0KToKKyAgICAgICAgICAgIF9yZXBvcnQuYXBwZW5kKChjb3VudCwgYmxvY2tfc2l6ZSwgdG90YWxfc2l6ZSkpCisgICAgICAgIHNyY0ZpbGVOYW1lID0gc2VsZi5jcmVhdGVOZXdUZW1wRmlsZSgpCisgICAgICAgIHVybGxpYi51cmxyZXRyaWV2ZShzZWxmLmNvbnN0cnVjdExvY2FsRmlsZVVybChzcmNGaWxlTmFtZSksCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOLCBob29rdGVzdGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXBvcnQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcG9ydFswXVsyXSwgMCkKKworICAgIGRlZiB0ZXN0X3JlcG9ydGhvb2tfNV9ieXRlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG9uIDUgYnl0ZSBmaWxlLiBTaG91bGQgY2FsbCByZXBvcnRob29rIG9ubHkgMiB0aW1lcyAob25jZSB3aGVuCisgICAgICAgICMgdGhlICJuZXR3b3JrIGNvbm5lY3Rpb24iIGlzIGVzdGFibGlzaGVkIGFuZCBvbmNlIHdoZW4gdGhlIGJsb2NrIGlzCisgICAgICAgICMgcmVhZCkuIFNpbmNlIHRoZSBibG9jayBzaXplIGlzIDgxOTIgYnl0ZXMsIG9ubHkgb25lIGJsb2NrIHJlYWQgaXMKKyAgICAgICAgIyByZXF1aXJlZCB0byByZWFkIHRoZSBlbnRpcmUgZmlsZS4KKyAgICAgICAgcmVwb3J0ID0gW10KKyAgICAgICAgZGVmIGhvb2t0ZXN0ZXIoY291bnQsIGJsb2NrX3NpemUsIHRvdGFsX3NpemUsIF9yZXBvcnQ9cmVwb3J0KToKKyAgICAgICAgICAgIF9yZXBvcnQuYXBwZW5kKChjb3VudCwgYmxvY2tfc2l6ZSwgdG90YWxfc2l6ZSkpCisgICAgICAgIHNyY0ZpbGVOYW1lID0gc2VsZi5jcmVhdGVOZXdUZW1wRmlsZSgieCIgKiA1KQorICAgICAgICB1cmxsaWIudXJscmV0cmlldmUoc2VsZi5jb25zdHJ1Y3RMb2NhbEZpbGVVcmwoc3JjRmlsZU5hbWUpLAorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiwgaG9va3Rlc3RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVwb3J0KSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBvcnRbMF1bMV0sIDgxOTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwb3J0WzBdWzJdLCA1KQorCisgICAgZGVmIHRlc3RfcmVwb3J0aG9va184MTkzX2J5dGVzKHNlbGYpOgorICAgICAgICAjIFRlc3Qgb24gODE5MyBieXRlIGZpbGUuIFNob3VsZCBjYWxsIHJlcG9ydGhvb2sgb25seSAzIHRpbWVzIChvbmNlCisgICAgICAgICMgd2hlbiB0aGUgIm5ldHdvcmsgY29ubmVjdGlvbiIgaXMgZXN0YWJsaXNoZWQsIG9uY2UgZm9yIHRoZSBuZXh0IDgxOTIKKyAgICAgICAgIyBieXRlcywgYW5kIG9uY2UgZm9yIHRoZSBsYXN0IGJ5dGUpLgorICAgICAgICByZXBvcnQgPSBbXQorICAgICAgICBkZWYgaG9va3Rlc3Rlcihjb3VudCwgYmxvY2tfc2l6ZSwgdG90YWxfc2l6ZSwgX3JlcG9ydD1yZXBvcnQpOgorICAgICAgICAgICAgX3JlcG9ydC5hcHBlbmQoKGNvdW50LCBibG9ja19zaXplLCB0b3RhbF9zaXplKSkKKyAgICAgICAgc3JjRmlsZU5hbWUgPSBzZWxmLmNyZWF0ZU5ld1RlbXBGaWxlKCJ4IiAqIDgxOTMpCisgICAgICAgIHVybGxpYi51cmxyZXRyaWV2ZShzZWxmLmNvbnN0cnVjdExvY2FsRmlsZVVybChzcmNGaWxlTmFtZSksCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOLCBob29rdGVzdGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXBvcnQpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcG9ydFswXVsxXSwgODE5MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBvcnRbMF1bMl0sIDgxOTMpCisKKworY2xhc3MgdXJscmV0cmlldmVfSHR0cFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBGYWtlSFRUUE1peGluKToKKyAgICAiIiJUZXN0IHVybGxpYi51cmxyZXRyaWV2ZSgpIHVzaW5nIGZha2UgaHR0cCBjb25uZWN0aW9ucyIiIgorCisgICAgZGVmIHRlc3Rfc2hvcnRfY29udGVudF9yYWlzZXNfQ29udGVudFRvb1Nob3J0RXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuZmFrZWh0dHAoJycnSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBXZWQsIDAyIEphbiAyMDA4IDAzOjAzOjU0IEdNVAorU2VydmVyOiBBcGFjaGUvMS4zLjMzIChEZWJpYW4gR05VL0xpbnV4KSBtb2Rfc3NsLzIuOC4yMiBPcGVuU1NMLzAuOS43ZQorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtTGVuZ3RoOiAxMDAKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEKKworRkYKKycnJykKKworICAgICAgICBkZWYgX3JlcG9ydGhvb2socGFyMSwgcGFyMiwgcGFyMyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLkNvbnRlbnRUb29TaG9ydEVycm9yLCB1cmxsaWIudXJscmV0cmlldmUsCisgICAgICAgICAgICAgICAgICAgICdodHRwOi8vZXhhbXBsZS5jb20nLCByZXBvcnRob29rPV9yZXBvcnRob29rKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKKworICAgIGRlZiB0ZXN0X3Nob3J0X2NvbnRlbnRfcmFpc2VzX0NvbnRlbnRUb29TaG9ydEVycm9yX3dpdGhvdXRfcmVwb3J0aG9vayhzZWxmKToKKyAgICAgICAgc2VsZi5mYWtlaHR0cCgnJydIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFdlZCwgMDIgSmFuIDIwMDggMDM6MDM6NTQgR01UCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMzMgKERlYmlhbiBHTlUvTGludXgpIG1vZF9zc2wvMi44LjIyIE9wZW5TU0wvMC45LjdlCitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1MZW5ndGg6IDEwMAorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQorCitGRgorJycnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuQ29udGVudFRvb1Nob3J0RXJyb3IsIHVybGxpYi51cmxyZXRyaWV2ZSwgJ2h0dHA6Ly9leGFtcGxlLmNvbS8nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKKworY2xhc3MgUXVvdGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgdXJsbGliLnF1b3RlKCkgYW5kIHVybGxpYi5xdW90ZV9wbHVzKCkKKworICAgIEFjY29yZGluZyB0byBSRkMgMjM5NiAoIlVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMpLCB0byBlc2NhcGUgYQorICAgIGNoYXJhY3RlciB5b3Ugd3JpdGUgaXQgYXMgJyUnICsgPDIgY2hhcmFjdGVyIFVTLUFTQ0lJIGhleCB2YWx1ZT4uICBUaGUgUHl0aG9uCisgICAgY29kZSBvZiBgYCclJyArIGhleChvcmQoPGNoYXJhY3Rlcj4pKVsyOl1gYCBlc2NhcGVzIGEgY2hhcmFjdGVyIHByb3Blcmx5LgorICAgIENhc2UgZG9lcyBub3QgbWF0dGVyIG9uIHRoZSBoZXggbGV0dGVycy4KKworICAgIFRoZSB2YXJpb3VzIGNoYXJhY3RlciBzZXRzIHNwZWNpZmllZCBhcmU6CisKKyAgICBSZXNlcnZlZCBjaGFyYWN0ZXJzIDogIjsvPzpAJj0rJCwiCisgICAgICAgIEhhdmUgc3BlY2lhbCBtZWFuaW5nIGluIFVSSXMgYW5kIG11c3QgYmUgZXNjYXBlZCBpZiBub3QgYmVpbmcgdXNlZCBmb3IKKyAgICAgICAgdGhlaXIgc3BlY2lhbCBtZWFuaW5nCisgICAgRGF0YSBjaGFyYWN0ZXJzIDogbGV0dGVycywgZGlnaXRzLCBhbmQgIi1fLiF+KicoKSIKKyAgICAgICAgVW5yZXNlcnZlZCBhbmQgZG8gbm90IG5lZWQgdG8gYmUgZXNjYXBlZDsgY2FuIGJlLCB0aG91Z2gsIGlmIGRlc2lyZWQKKyAgICBDb250cm9sIGNoYXJhY3RlcnMgOiAweDAwIC0gMHgxRiwgMHg3RgorICAgICAgICBIYXZlIG5vIHVzZSBpbiBVUklzIHNvIG11c3QgYmUgZXNjYXBlZAorICAgIHNwYWNlIDogMHgyMAorICAgICAgICBNdXN0IGJlIGVzY2FwZWQKKyAgICBEZWxpbWl0ZXJzIDogJzw+IyUiJworICAgICAgICBNdXN0IGJlIGVzY2FwZWQKKyAgICBVbndpc2UgOiAie318XF5bXWAiCisgICAgICAgIE11c3QgYmUgZXNjYXBlZAorCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9uZXZlcl9xdW90ZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgcXVvdGUoKSBkb2VzIG5vdCBxdW90ZSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCAiXywuLSIKKyAgICAgICAgZG9fbm90X3F1b3RlID0gJycgLmpvaW4oWyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAxMjM0NTY3ODkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl8uLSJdKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucXVvdGUoZG9fbm90X3F1b3RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvX25vdF9xdW90ZSwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZSgpOiAlcyAhPSAlcyIgJSAoZG9fbm90X3F1b3RlLCByZXN1bHQpKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucXVvdGVfcGx1cyhkb19ub3RfcXVvdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9fbm90X3F1b3RlLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGVfcGx1cygpOiAlcyAhPSAlcyIgJSAoZG9fbm90X3F1b3RlLCByZXN1bHQpKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9zYWZlKHNlbGYpOgorICAgICAgICAjIFRlc3QgJy8nIGlzIGRlZmF1bHQgdmFsdWUgZm9yICdzYWZlJyBwYXJhbWV0ZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucXVvdGUuZnVuY19kZWZhdWx0c1swXSwgJy8nKQorCisgICAgZGVmIHRlc3Rfc2FmZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHNldHRpbmcgJ3NhZmUnIHBhcmFtZXRlciBkb2VzIHdoYXQgaXQgc2hvdWxkIGRvCisgICAgICAgIHF1b3RlX2J5X2RlZmF1bHQgPSAiPD4iCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5xdW90ZShxdW90ZV9ieV9kZWZhdWx0LCBzYWZlPXF1b3RlX2J5X2RlZmF1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVfYnlfZGVmYXVsdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZSgpOiAlcyAhPSAlcyIgJSAocXVvdGVfYnlfZGVmYXVsdCwgcmVzdWx0KSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnF1b3RlX3BsdXMocXVvdGVfYnlfZGVmYXVsdCwgc2FmZT1xdW90ZV9ieV9kZWZhdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1b3RlX2J5X2RlZmF1bHQsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGVfcGx1cygpOiAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChxdW90ZV9ieV9kZWZhdWx0LCByZXN1bHQpKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9xdW90aW5nKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBiZSBxdW90ZWQgYXJlIGJ5IGRlZmF1bHQgc2FucworICAgICAgICAjIHNwYWNlIChzZXBhcmF0ZSB0ZXN0IGZvciB0aGF0KS4KKyAgICAgICAgc2hvdWxkX3F1b3RlID0gW2NocihudW0pIGZvciBudW0gaW4gcmFuZ2UoMzIpXSAjIEZvciAweDAwIC0gMHgxRgorICAgICAgICBzaG91bGRfcXVvdGUuYXBwZW5kKCc8PiMlInt9fFxeW11gJykKKyAgICAgICAgc2hvdWxkX3F1b3RlLmFwcGVuZChjaHIoMTI3KSkgIyBGb3IgMHg3RgorICAgICAgICBzaG91bGRfcXVvdGUgPSAnJy5qb2luKHNob3VsZF9xdW90ZSkKKyAgICAgICAgZm9yIGNoYXIgaW4gc2hvdWxkX3F1b3RlOgorICAgICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnF1b3RlKGNoYXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleGVzY2FwZShjaGFyKSwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGUoKTogJXMgc2hvdWxkIGJlIGVzY2FwZWQgdG8gJXMsIG5vdCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciwgaGV4ZXNjYXBlKGNoYXIpLCByZXN1bHQpKQorICAgICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnF1b3RlX3BsdXMoY2hhcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4ZXNjYXBlKGNoYXIpLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZV9wbHVzKCk6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIHNob3VsZCBiZSBlc2NhcGVzIHRvICVzLCBub3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIsIGhleGVzY2FwZShjaGFyKSwgcmVzdWx0KSkKKyAgICAgICAgZGVsIHNob3VsZF9xdW90ZQorICAgICAgICBwYXJ0aWFsX3F1b3RlID0gImFiW11jZCIKKyAgICAgICAgZXhwZWN0ZWQgPSAiYWIlNUIlNURjZCIKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnF1b3RlKHBhcnRpYWxfcXVvdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGUoKTogJXMgIT0gJXMiICUgKGV4cGVjdGVkLCByZXN1bHQpKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucXVvdGVfcGx1cyhwYXJ0aWFsX3F1b3RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlX3BsdXMoKTogJXMgIT0gJXMiICUgKGV4cGVjdGVkLCByZXN1bHQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHVybGxpYi5xdW90ZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3F1b3Rpbmdfc3BhY2Uoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHF1b3RlKCkgYW5kIHF1b3RlX3BsdXMoKSBoYW5kbGUgc3BhY2VzIGFzIHNwZWNpZmllZCBpbgorICAgICAgICAjIHRoZWlyIHVuaXF1ZSB3YXkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnF1b3RlKCcgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGhleGVzY2FwZSgnICcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZSgpOiAlcyAhPSAlcyIgJSAocmVzdWx0LCBoZXhlc2NhcGUoJyAnKSkpCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5xdW90ZV9wbHVzKCcgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICcrJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGVfcGx1cygpOiAlcyAhPSArIiAlIHJlc3VsdCkKKyAgICAgICAgZ2l2ZW4gPSAiYSBiIGNkIGUgZiIKKyAgICAgICAgZXhwZWN0ID0gZ2l2ZW4ucmVwbGFjZSgnICcsIGhleGVzY2FwZSgnICcpKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucXVvdGUoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlKCk6ICVzICE9ICVzIiAlIChleHBlY3QsIHJlc3VsdCkpCisgICAgICAgIGV4cGVjdCA9IGdpdmVuLnJlcGxhY2UoJyAnLCAnKycpCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5xdW90ZV9wbHVzKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZV9wbHVzKCk6ICVzICE9ICVzIiAlIChleHBlY3QsIHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9xdW90aW5nX3BsdXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnF1b3RlX3BsdXMoJ2FscGhhK2JldGEgZ2FtbWEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWxwaGElMkJiZXRhK2dhbW1hJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucXVvdGVfcGx1cygnYWxwaGErYmV0YSBnYW1tYScsICcrJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FscGhhK2JldGErZ2FtbWEnKQorCitjbGFzcyBVbnF1b3RpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIHVucXVvdGUoKSBhbmQgdW5xdW90ZV9wbHVzKCkKKworICAgIFNlZSB0aGUgZG9jIHN0cmluZyBmb3IgcXVvdGluZ19UZXN0cyBmb3IgZGV0YWlscyBvbiBxdW90aW5nIGFuZCBzdWNoLgorCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF91bnF1b3Rpbmcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHVucXVvdGluZyBvZiBhbGwgQVNDSUkgdmFsdWVzIHdvcmtzCisgICAgICAgIGVzY2FwZV9saXN0ID0gW10KKyAgICAgICAgZm9yIG51bSBpbiByYW5nZSgxMjgpOgorICAgICAgICAgICAgZ2l2ZW4gPSBoZXhlc2NhcGUoY2hyKG51bSkpCisgICAgICAgICAgICBleHBlY3QgPSBjaHIobnVtKQorICAgICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGUoZ2l2ZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgdW5xdW90ZSgpOiAlcyAhPSAlcyIgJSAoZXhwZWN0LCByZXN1bHQpKQorICAgICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGVfcGx1cyhnaXZlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyB1bnF1b3RlX3BsdXMoKTogJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdCwgcmVzdWx0KSkKKyAgICAgICAgICAgIGVzY2FwZV9saXN0LmFwcGVuZChnaXZlbikKKyAgICAgICAgZXNjYXBlX3N0cmluZyA9ICcnLmpvaW4oZXNjYXBlX2xpc3QpCisgICAgICAgIGRlbCBlc2NhcGVfbGlzdAorICAgICAgICByZXN1bHQgPSB1cmxsaWIudW5xdW90ZShlc2NhcGVfc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb3VudCgnJScpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZSgpOiBub3QgYWxsIGNoYXJhY3RlcnMgZXNjYXBlZDsgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi51bnF1b3RlKGVzY2FwZV9zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvdW50KCclJyksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHVucXVvdGUoKTogbm90IGFsbCBjaGFyYWN0ZXJzIGVzY2FwZWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiICUgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfdW5xdW90aW5nX2JhZHBlcmNlbnQoc2VsZik6CisgICAgICAgICMgVGVzdCB1bnF1b3Rpbmcgb24gYmFkIHBlcmNlbnQtZXNjYXBlcworICAgICAgICBnaXZlbiA9ICcleGFiJworICAgICAgICBleHBlY3QgPSBnaXZlbgorICAgICAgICByZXN1bHQgPSB1cmxsaWIudW5xdW90ZShnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwgInVzaW5nIHVucXVvdGUoKTogJXIgIT0gJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXhwZWN0LCByZXN1bHQpKQorICAgICAgICBnaXZlbiA9ICcleCcKKyAgICAgICAgZXhwZWN0ID0gZ2l2ZW4KKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGUoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsICJ1c2luZyB1bnF1b3RlKCk6ICVyICE9ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV4cGVjdCwgcmVzdWx0KSkKKyAgICAgICAgZ2l2ZW4gPSAnJScKKyAgICAgICAgZXhwZWN0ID0gZ2l2ZW4KKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGUoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsICJ1c2luZyB1bnF1b3RlKCk6ICVyICE9ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV4cGVjdCwgcmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X3VucXVvdGluZ19taXhlZF9jYXNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdW5xdW90aW5nIG9uIG1peGVkLWNhc2UgaGV4IGRpZ2l0cyBpbiB0aGUgcGVyY2VudC1lc2NhcGVzCisgICAgICAgIGdpdmVuID0gJyVBYiVlQScKKyAgICAgICAgZXhwZWN0ID0gJ1x4YWJceGVhJworICAgICAgICByZXN1bHQgPSB1cmxsaWIudW5xdW90ZShnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwgInVzaW5nIHVucXVvdGUoKTogJXIgIT0gJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXhwZWN0LCByZXN1bHQpKQorCisgICAgZGVmIHRlc3RfdW5xdW90aW5nX3BhcnRzKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB1bnF1b3Rpbmcgd29ya3Mgd2hlbiBoYXZlIG5vbi1xdW90ZWQgY2hhcmFjdGVycworICAgICAgICAjIGludGVyc3BlcnNlZAorICAgICAgICBnaXZlbiA9ICdhYiVzZCcgJSBoZXhlc2NhcGUoJ2MnKQorICAgICAgICBleHBlY3QgPSAiYWJjZCIKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGUoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlKCk6ICVzICE9ICVzIiAlIChleHBlY3QsIHJlc3VsdCkpCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi51bnF1b3RlX3BsdXMoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHVucXVvdGVfcGx1cygpOiAlcyAhPSAlcyIgJSAoZXhwZWN0LCByZXN1bHQpKQorCisgICAgZGVmIHRlc3RfdW5xdW90aW5nX3BsdXMoc2VsZik6CisgICAgICAgICMgVGVzdCBkaWZmZXJlbmNlIGJldHdlZW4gdW5xdW90ZSgpIGFuZCB1bnF1b3RlX3BsdXMoKQorICAgICAgICBnaXZlbiA9ICJhcmUrdGhlcmUrc3BhY2VzLi4uIgorICAgICAgICBleHBlY3QgPSBnaXZlbgorICAgICAgICByZXN1bHQgPSB1cmxsaWIudW5xdW90ZShnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgdW5xdW90ZSgpOiAlcyAhPSAlcyIgJSAoZXhwZWN0LCByZXN1bHQpKQorICAgICAgICBleHBlY3QgPSBnaXZlbi5yZXBsYWNlKCcrJywgJyAnKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIudW5xdW90ZV9wbHVzKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyB1bnF1b3RlX3BsdXMoKTogJXMgIT0gJXMiICUgKGV4cGVjdCwgcmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X3VucXVvdGVfd2l0aF91bmljb2RlKHNlbGYpOgorICAgICAgICByID0gdXJsbGliLnVucXVvdGUodSdiciVDMyVCQ2NrbmVyX3NhcHBvcm9fMjAwNTA5MzAuZG9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB1J2JyXHhjM1x4YmNja25lcl9zYXBwb3JvXzIwMDUwOTMwLmRvYycpCisKK2NsYXNzIHVybGVuY29kZV9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIHVybGVuY29kZSgpIiIiCisKKyAgICBkZWYgaGVscF9pbnB1dHR5cGUoc2VsZiwgZ2l2ZW4sIHRlc3RfdHlwZSk6CisgICAgICAgICIiIkhlbHBlciBtZXRob2QgZm9yIHRlc3RpbmcgZGlmZmVyZW50IGlucHV0IHR5cGVzLgorCisgICAgICAgICdnaXZlbicgbXVzdCBsZWFkIHRvIG9ubHkgdGhlIHBhaXJzOgorICAgICAgICAgICAgKiAxc3QsIDEKKyAgICAgICAgICAgICogMm5kLCAyCisgICAgICAgICAgICAqIDNyZCwgMworCisgICAgICAgIFRlc3QgY2Fubm90IGFzc3VtZSBhbnl0aGluZyBhYm91dCBvcmRlci4gIERvY3MgbWFrZSBubyBndWFyYW50ZWUgYW5kCisgICAgICAgIGhhdmUgcG9zc2libGUgZGljdGlvbmFyeSBpbnB1dC4KKworICAgICAgICAiIiIKKyAgICAgICAgZXhwZWN0X3NvbWV3aGVyZSA9IFsiMXN0PTEiLCAiMm5kPTIiLCAiM3JkPTMiXQorICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJsZW5jb2RlKGdpdmVuKQorICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gZXhwZWN0X3NvbWV3aGVyZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGluZyAlczogJXMgbm90IGZvdW5kIGluICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfdHlwZSwgZXhwZWN0ZWQsIHJlc3VsdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvdW50KCcmJyksIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RpbmcgJXM6IGV4cGVjdGVkIDIgJyYnczsgZ290ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfdHlwZSwgcmVzdWx0LmNvdW50KCcmJykpKQorICAgICAgICBhbXBfbG9jYXRpb24gPSByZXN1bHQuaW5kZXgoJyYnKQorICAgICAgICBvbl9hbXBfbGVmdCA9IHJlc3VsdFthbXBfbG9jYXRpb24gLSAxXQorICAgICAgICBvbl9hbXBfcmlnaHQgPSByZXN1bHRbYW1wX2xvY2F0aW9uICsgMV0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9uX2FtcF9sZWZ0LmlzZGlnaXQoKSBhbmQgb25fYW1wX3JpZ2h0LmlzZGlnaXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICJ0ZXN0aW5nICVzOiAnJicgbm90IGxvY2F0ZWQgaW4gcHJvcGVyIHBsYWNlIGluICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAodGVzdF90eXBlLCByZXN1bHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAoNSAqIDMpICsgMiwgIzUgY2hhcnMgcGVyIHRoaW5nIGFuZCBhbXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RpbmcgJXM6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBudW1iZXIgb2YgY2hhcmFjdGVyczogJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF90eXBlLCBsZW4ocmVzdWx0KSwgKDUgKiAzKSArIDIpKQorCisgICAgZGVmIHRlc3RfdXNpbmdfbWFwcGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHBhc3NpbmcgaW4gYSBtYXBwaW5nIG9iamVjdCBhcyBhbiBhcmd1bWVudC4KKyAgICAgICAgc2VsZi5oZWxwX2lucHV0dHlwZSh7IjFzdCI6JzEnLCAiMm5kIjonMicsICIzcmQiOiczJ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIGRpY3QgYXMgaW5wdXQgdHlwZSIpCisKKyAgICBkZWYgdGVzdF91c2luZ19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHBhc3NpbmcgaW4gYSBzZXF1ZW5jZSBvZiB0d28taXRlbSBzZXF1ZW5jZXMgYXMgYW4gYXJndW1lbnQuCisgICAgICAgIHNlbGYuaGVscF9pbnB1dHR5cGUoWygnMXN0JywgJzEnKSwgKCcybmQnLCAnMicpLCAoJzNyZCcsICczJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBzZXF1ZW5jZSBvZiB0d28taXRlbSB0dXBsZXMgYXMgaW5wdXQiKQorCisgICAgZGVmIHRlc3RfcXVvdGluZyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUga2V5cyBhbmQgdmFsdWVzIGFyZSBxdW90ZWQgdXNpbmcgcXVvdGVfcGx1cygpCisgICAgICAgIGdpdmVuID0geyImIjoiPSJ9CisgICAgICAgIGV4cGVjdCA9ICIlcz0lcyIgJSAoaGV4ZXNjYXBlKCcmJyksIGhleGVzY2FwZSgnPScpKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJsZW5jb2RlKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0KQorICAgICAgICBnaXZlbiA9IHsia2V5IG5hbWUiOiJBIGJ1bmNoIG9mIHBsdXNlcyJ9CisgICAgICAgIGV4cGVjdCA9ICJrZXkrbmFtZT1BK2J1bmNoK29mK3BsdXNlcyIKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybGVuY29kZShnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2Rvc2VxKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBwYXNzaW5nIFRydWUgZm9yICdkb3NlcScgcGFyYW1ldGVyIHdvcmtzIGNvcnJlY3RseQorICAgICAgICBnaXZlbiA9IHsnc2VxdWVuY2UnOlsnMScsICcyJywgJzMnXX0KKyAgICAgICAgZXhwZWN0ID0gInNlcXVlbmNlPSVzIiAlIHVybGxpYi5xdW90ZV9wbHVzKHN0cihbJzEnLCAnMicsICczJ10pKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJsZW5jb2RlKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0KQorICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJsZW5jb2RlKGdpdmVuLCBUcnVlKQorICAgICAgICBmb3IgdmFsdWUgaW4gZ2l2ZW5bInNlcXVlbmNlIl06CisgICAgICAgICAgICBleHBlY3QgPSAic2VxdWVuY2U9JXMiICUgdmFsdWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0LCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvdW50KCcmJyksIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIDIgJyYncywgZ290ICVzIiAlIHJlc3VsdC5jb3VudCgnJicpKQorCitjbGFzcyBQYXRobmFtZV9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBwYXRobmFtZTJ1cmwoKSBhbmQgdXJsMnBhdGhuYW1lKCkiIiIKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBzaW1wbGUgdGVzdHMgcGFzcworICAgICAgICBleHBlY3RlZF9wYXRoID0gb3MucGF0aC5qb2luKCJwYXJ0cyIsICJvZiIsICJhIiwgInBhdGgiKQorICAgICAgICBleHBlY3RlZF91cmwgPSAicGFydHMvb2YvYS9wYXRoIgorICAgICAgICByZXN1bHQgPSB1cmxsaWIucGF0aG5hbWUydXJsKGV4cGVjdGVkX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdXJsLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGhuYW1lMnVybCgpIGZhaWxlZDsgJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0LCBleHBlY3RlZF91cmwpKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJsMnBhdGhuYW1lKGV4cGVjdGVkX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9wYXRoLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVybDJwYXRoYW1lKCkgZmFpbGVkOyAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQsIGV4cGVjdGVkX3BhdGgpKQorCisgICAgZGVmIHRlc3RfcXVvdGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGF1dG9tYXRpYyBxdW90aW5nIGFuZCB1bnF1b3Rpbmcgd29ya3MgZm9yIHBhdGhuYW0ydXJsKCkgYW5kCisgICAgICAgICMgdXJsMnBhdGhuYW1lKCkgcmVzcGVjdGl2ZWx5CisgICAgICAgIGdpdmVuID0gb3MucGF0aC5qb2luKCJuZWVkcyIsICJxdW90PWluZyIsICJoZXJlIikKKyAgICAgICAgZXhwZWN0ID0gIm5lZWRzLyVzL2hlcmUiICUgdXJsbGliLnF1b3RlKCJxdW90PWluZyIpCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXRobmFtZTJ1cmwoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGhuYW1lMnVybCgpIGZhaWxlZDsgJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0LCByZXN1bHQpKQorICAgICAgICBleHBlY3QgPSBnaXZlbgorICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJsMnBhdGhuYW1lKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXJsMnBhdGhuYW1lKCkgZmFpbGVkOyAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3QsIHJlc3VsdCkpCisgICAgICAgIGdpdmVuID0gb3MucGF0aC5qb2luKCJtYWtlIHN1cmUiLCAidXNpbmdfcXVvdGUiKQorICAgICAgICBleHBlY3QgPSAiJXMvdXNpbmdfcXVvdGUiICUgdXJsbGliLnF1b3RlKCJtYWtlIHN1cmUiKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucGF0aG5hbWUydXJsKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRobmFtZTJ1cmwoKSBmYWlsZWQ7ICVzICE9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdCwgcmVzdWx0KSkKKyAgICAgICAgZ2l2ZW4gPSAibWFrZStzdXJlL3VzaW5nX3VucXVvdGUiCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbigibWFrZStzdXJlIiwgInVzaW5nX3VucXVvdGUiKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJsMnBhdGhuYW1lKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1cmwycGF0aG5hbWUoKSBmYWlsZWQ7ICVzICE9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdCwgcmVzdWx0KSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHNwZWNpZmljIHRvIHRoZSBudHVybDJwYXRoIGxpYnJhcnknKQorICAgIGRlZiB0ZXN0X250cGF0aChzZWxmKToKKyAgICAgICAgZ2l2ZW4gPSAoJy9DOi8nLCAnLy8vQzovJywgJy9DfC8vJykKKyAgICAgICAgZXhwZWN0ID0gJ0M6XFwnCisgICAgICAgIGZvciB1cmwgaW4gZ2l2ZW46CisgICAgICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJsMnBhdGhuYW1lKHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudHVybDJwYXRoLnVybDJwYXRobmFtZSgpIGZhaWxlZDsgJXMgIT0gJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdCwgcmVzdWx0KSkKKyAgICAgICAgZ2l2ZW4gPSAnLy8vQ3wvcGF0aCcKKyAgICAgICAgZXhwZWN0ID0gJ0M6XFxwYXRoJworICAgICAgICByZXN1bHQgPSB1cmxsaWIudXJsMnBhdGhuYW1lKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICdudHVybDJwYXRoLnVybDJwYXRobmFtZSgpIGZhaWxlZDsgJXMgIT0gJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0LCByZXN1bHQpKQorCitjbGFzcyBVdGlsaXR5X1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0Y2FzZSB0byB0ZXN0IHRoZSB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGluIHRoZSB1cmxsaWIuIiIiCisKKyAgICBkZWYgdGVzdF9zcGxpdHBhc3N3ZChzZWxmKToKKyAgICAgICAgIiIiU29tZSBvZiB0aGUgcGFzc3dvcmQgZXhhbXBsZXMgYXJlIG5vdCBzZW5zaWJsZSwgYnV0IGl0IGlzIGFkZGVkIHRvCisgICAgICAgIGNvbmZpcm1pbmcgdG8gUkZDMjYxNyBhbmQgYWRkcmVzc2luZyBpc3N1ZTQ2NzUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhYicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXG5iJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyOmFcbmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVx0YicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphXHRiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FccmInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YVxyYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXGZiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyOmFcZmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVx2YicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphXHZiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2E6YicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphOmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYSBiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyOmEgYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlciAyJywgJ2FiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyIDI6YWInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXIrMScsICdhK2InKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXIrMTphK2InKSkKKworCitjbGFzcyBVUkxvcGVuZXJfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RjYXNlIHRvIHRlc3QgdGhlIG9wZW4gbWV0aG9kIG9mIFVSTG9wZW5lciBjbGFzcy4iIiIKKworICAgIGRlZiB0ZXN0X3F1b3RlZF9vcGVuKHNlbGYpOgorICAgICAgICBjbGFzcyBEdW1teVVSTG9wZW5lcih1cmxsaWIuVVJMb3BlbmVyKToKKyAgICAgICAgICAgIGRlZiBvcGVuX3NwYW0oc2VsZiwgdXJsKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdXJsCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEdW1teVVSTG9wZW5lcigpLm9wZW4oCisgICAgICAgICAgICAnc3BhbTovL2V4YW1wbGUvIC8nKSwnLy9leGFtcGxlLyUyMC8nKQorCisgICAgICAgICMgdGVzdCB0aGUgc2FmZSBjaGFyYWN0ZXJzIGFyZSBub3QgcXVvdGVkIGJ5IHVybG9wZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEdW1teVVSTG9wZW5lcigpLm9wZW4oCisgICAgICAgICAgICAic3BhbTovL2M6fHdpbmRvd3MlLzo9Jj9+IyshJCw7J0AoKSpbXXwvcGF0aC8iKSwKKyAgICAgICAgICAgICIvL2M6fHdpbmRvd3MlLzo9Jj9+IyshJCw7J0AoKSpbXXwvcGF0aC8iKQorCisKKyMgSnVzdCBjb21tZW50ZWQgdGhlbSBvdXQuCisjIENhbid0IHJlYWxseSB0ZWxsIHdoeSBrZWVwIGZhaWxpbmcgaW4gd2luZG93cyBhbmQgc3BhcmMuCisjIEV2ZXJ5d2hlcmUgZWxzZSB0aGV5IHdvcmsgb2ssIGJ1dCBvbiB0aG9zZSBtYWNoaW5lcywgc29tZXRpbWVzCisjIGZhaWwgaW4gb25lIG9mIHRoZSB0ZXN0cywgc29tZXRpbWVzIGluIG90aGVyLiBJIGhhdmUgYSBsaW51eCwgYW5kCisjIHRoZSB0ZXN0cyBnbyBvay4KKyMgSWYgYW55Ym9keSBoYXMgb25lIG9mIHRoZSBwcm9ibGVtYXRpYyBlbnZpcm9tZW50cywgcGxlYXNlIGhlbHAhCisjIC4gICBGYWN1bmRvCisjCisjIGRlZiBzZXJ2ZXIoZXZ0KToKKyMgICAgIGltcG9ydCBzb2NrZXQsIHRpbWUKKyMgICAgIHNlcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisjICAgICBzZXJ2LnNldHRpbWVvdXQoMykKKyMgICAgIHNlcnYuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyMgICAgIHNlcnYuYmluZCgoIiIsIDkwOTMpKQorIyAgICAgc2Vydi5saXN0ZW4oNSkKKyMgICAgIHRyeToKKyMgICAgICAgICBjb25uLCBhZGRyID0gc2Vydi5hY2NlcHQoKQorIyAgICAgICAgIGNvbm4uc2VuZCgiMSBIb2xhIG11bmRvXG4iKQorIyAgICAgICAgIGNhbnRkYXRhID0gMAorIyAgICAgICAgIHdoaWxlIGNhbnRkYXRhIDwgMTM6CisjICAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoMTMtY2FudGRhdGEpCisjICAgICAgICAgICAgIGNhbnRkYXRhICs9IGxlbihkYXRhKQorIyAgICAgICAgICAgICB0aW1lLnNsZWVwKC4zKQorIyAgICAgICAgIGNvbm4uc2VuZCgiMiBObyBtb3JlIGxpbmVzXG4iKQorIyAgICAgICAgIGNvbm4uY2xvc2UoKQorIyAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorIyAgICAgICAgIHBhc3MKKyMgICAgIGZpbmFsbHk6CisjICAgICAgICAgc2Vydi5jbG9zZSgpCisjICAgICAgICAgZXZ0LnNldCgpCisjCisjIGNsYXNzIEZUUFdyYXBwZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisjCisjICAgICBkZWYgc2V0VXAoc2VsZik6CisjICAgICAgICAgaW1wb3J0IGZ0cGxpYiwgdGltZSwgdGhyZWFkaW5nCisjICAgICAgICAgZnRwbGliLkZUUC5wb3J0ID0gOTA5MworIyAgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyMgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9KHNlbGYuZXZ0LCkpLnN0YXJ0KCkKKyMgICAgICAgICB0aW1lLnNsZWVwKC4xKQorIworIyAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorIyAgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorIworIyAgICAgZGVmIHRlc3RCYXNpYyhzZWxmKToKKyMgICAgICAgICAjIGNvbm5lY3RzCisjICAgICAgICAgZnRwID0gdXJsbGliLmZ0cHdyYXBwZXIoIm15dXNlciIsICJteXBhc3MiLCAibG9jYWxob3N0IiwgOTA5MywgW10pCisjICAgICAgICAgZnRwLmNsb3NlKCkKKyMKKyMgICAgIGRlZiB0ZXN0VGltZW91dE5vbmUoc2VsZik6CisjICAgICAgICAgIyBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IGlzIGlnbm9yZWQKKyMgICAgICAgICBpbXBvcnQgc29ja2V0CisjICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisjICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorIyAgICAgICAgIHRyeToKKyMgICAgICAgICAgICAgZnRwID0gdXJsbGliLmZ0cHdyYXBwZXIoIm15dXNlciIsICJteXBhc3MiLCAibG9jYWxob3N0IiwgOTA5MywgW10pCisjICAgICAgICAgZmluYWxseToKKyMgICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisjICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHAuZnRwLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyMgICAgICAgICBmdHAuY2xvc2UoKQorIworIyAgICAgZGVmIHRlc3RUaW1lb3V0RGVmYXVsdChzZWxmKToKKyMgICAgICAgICAjIGdsb2JhbCBkZWZhdWx0IHRpbWVvdXQgaXMgdXNlZAorIyAgICAgICAgIGltcG9ydCBzb2NrZXQKKyMgICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyMgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMzApCisjICAgICAgICAgdHJ5OgorIyAgICAgICAgICAgICBmdHAgPSB1cmxsaWIuZnRwd3JhcHBlcigibXl1c2VyIiwgIm15cGFzcyIsICJsb2NhbGhvc3QiLCA5MDkzLCBbXSkKKyMgICAgICAgICBmaW5hbGx5OgorIyAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyMgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ0cC5mdHAuc29jay5nZXR0aW1lb3V0KCksIDMwKQorIyAgICAgICAgIGZ0cC5jbG9zZSgpCisjCisjICAgICBkZWYgdGVzdFRpbWVvdXRWYWx1ZShzZWxmKToKKyMgICAgICAgICBmdHAgPSB1cmxsaWIuZnRwd3JhcHBlcigibXl1c2VyIiwgIm15cGFzcyIsICJsb2NhbGhvc3QiLCA5MDkzLCBbXSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTMwKQorIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLmZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisjICAgICAgICAgZnRwLmNsb3NlKCkKKworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBpbXBvcnQgd2FybmluZ3MKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCAiLip1cmxsaWJcLnVybG9wZW4uKlB5dGhvbiAzLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICB1cmxvcGVuX0ZpbGVUZXN0cywKKyAgICAgICAgICAgIHVybG9wZW5fSHR0cFRlc3RzLAorICAgICAgICAgICAgdXJscmV0cmlldmVfRmlsZVRlc3RzLAorICAgICAgICAgICAgdXJscmV0cmlldmVfSHR0cFRlc3RzLAorICAgICAgICAgICAgUHJveHlUZXN0cywKKyAgICAgICAgICAgIFF1b3RpbmdUZXN0cywKKyAgICAgICAgICAgIFVucXVvdGluZ1Rlc3RzLAorICAgICAgICAgICAgdXJsZW5jb2RlX1Rlc3RzLAorICAgICAgICAgICAgUGF0aG5hbWVfVGVzdHMsCisgICAgICAgICAgICBVdGlsaXR5X1Rlc3RzLAorICAgICAgICAgICAgVVJMb3BlbmVyX1Rlc3RzLAorICAgICAgICAgICAgI0ZUUFdyYXBwZXJUZXN0cywKKyAgICAgICAgKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFjOTk1MAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKQEAgLTAsMCArMSwxMzc4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCBvcworaW1wb3J0IHNvY2tldAoraW1wb3J0IFN0cmluZ0lPCisKK2ltcG9ydCB1cmxsaWIyCitmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QsIE9wZW5lckRpcmVjdG9yCisKKyMgWFhYCisjIFJlcXVlc3QKKyMgQ2FjaGVGVFBIYW5kbGVyIChoYXJkIHRvIHdyaXRlKQorIyBwYXJzZV9rZXF2X2xpc3QsIHBhcnNlX2h0dHBfbGlzdCwgSFRUUERpZ2VzdEF1dGhIYW5kbGVyCisKK2NsYXNzIFRyaXZpYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdHJpdmlhbChzZWxmKToKKyAgICAgICAgIyBBIGNvdXBsZSB0cml2aWFsIHRlc3RzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXJsbGliMi51cmxvcGVuLCAnYm9ndXMgdXJsJykKKworICAgICAgICAjIFhYWCBOYW1lIGhhY2tpbmcgdG8gZ2V0IHRoaXMgdG8gd29yayBvbiBXaW5kb3dzLgorICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aCh1cmxsaWIyLl9fZmlsZV9fKS5yZXBsYWNlKCdcXCcsICcvJykKKworICAgICAgICAjIEFuZCBtb3JlIGhhY2tpbmcgdG8gZ2V0IGl0IHRvIHdvcmsgb24gTWFjT1MuIFRoaXMgYXNzdW1lcworICAgICAgICAjIHVybGxpYi5wYXRobmFtZTJ1cmwgd29ya3MsIHVuZm9ydHVuYXRlbHkuLi4KKyAgICAgICAgaWYgb3MubmFtZSA9PSAncmlzY29zJzoKKyAgICAgICAgICAgIGltcG9ydCBzdHJpbmcKKyAgICAgICAgICAgIGZuYW1lID0gb3MuZXhwYW5kKGZuYW1lKQorICAgICAgICAgICAgZm5hbWUgPSBmbmFtZS50cmFuc2xhdGUoc3RyaW5nLm1ha2V0cmFucygiLy4iLCAiLi8iKSkKKworICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICBmaWxlX3VybCA9ICJmaWxlOi8vLyVzIiAlIGZuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlX3VybCA9ICJmaWxlOi8vJXMiICUgZm5hbWUKKworICAgICAgICBmID0gdXJsbGliMi51cmxvcGVuKGZpbGVfdXJsKQorCisgICAgICAgIGJ1ZiA9IGYucmVhZCgpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGFyc2VfaHR0cF9saXN0KHNlbGYpOgorICAgICAgICB0ZXN0cyA9IFsoJ2EsYixjJywgWydhJywgJ2InLCAnYyddKSwKKyAgICAgICAgICAgICAgICAgKCdwYXRoIm8sbCJvZyJpImNhbCwgZXhhbXBsZScsIFsncGF0aCJvLGwib2ciaSJjYWwnLCAnZXhhbXBsZSddKSwKKyAgICAgICAgICAgICAgICAgKCdhLCBiLCAiYyIsICJkIiwgImUsZiIsIGcsIGgnLCBbJ2EnLCAnYicsICciYyInLCAnImQiJywgJyJlLGYiJywgJ2cnLCAnaCddKSwKKyAgICAgICAgICAgICAgICAgKCdhPSJiXFwiYyIsIGQ9ImVcXCxmIiwgZz0iaFxcXFxpIicsIFsnYT0iYiJjIicsICdkPSJlLGYiJywgJ2c9ImhcXGkiJ10pXQorICAgICAgICBmb3Igc3RyaW5nLCBsaXN0IGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIyLnBhcnNlX2h0dHBfbGlzdChzdHJpbmcpLCBsaXN0KQorCisKK2RlZiB0ZXN0X3JlcXVlc3RfaGVhZGVyc19kaWN0KCk6CisgICAgIiIiCisgICAgVGhlIFJlcXVlc3QuaGVhZGVycyBkaWN0aW9uYXJ5IGlzIG5vdCBhIGRvY3VtZW50ZWQgaW50ZXJmYWNlLiAgSXQgc2hvdWxkCisgICAgc3RheSB0aGF0IHdheSwgYmVjYXVzZSB0aGUgY29tcGxldGUgc2V0IG9mIGhlYWRlcnMgYXJlIG9ubHkgYWNjZXNzaWJsZQorICAgIHRocm91Z2ggdGhlIC5nZXRfaGVhZGVyKCksIC5oYXNfaGVhZGVyKCksIC5oZWFkZXJfaXRlbXMoKSBpbnRlcmZhY2UuCisgICAgSG93ZXZlciwgLmhlYWRlcnMgcHJlLWRhdGVzIHRob3NlIG1ldGhvZHMsIGFuZCBzbyByZWFsIGNvZGUgd2lsbCBiZSB1c2luZworICAgIHRoZSBkaWN0aW9uYXJ5LgorCisgICAgVGhlIGludHJvZHVjdGlvbiBpbiAyLjQgb2YgdGhvc2UgbWV0aG9kcyB3YXMgYSBtaXN0YWtlIGZvciB0aGUgc2FtZSByZWFzb246CisgICAgY29kZSB0aGF0IHByZXZpb3VzbHkgc2F3IGFsbCAodXJsbGliMiB1c2VyKS1wcm92aWRlZCBoZWFkZXJzIGluIC5oZWFkZXJzCisgICAgbm93IHNlZXMgb25seSBhIHN1YnNldCAoYW5kIHRoZSBmdW5jdGlvbiBpbnRlcmZhY2UgaXMgdWdseSBhbmQgaW5jb21wbGV0ZSkuCisgICAgQSBiZXR0ZXIgY2hhbmdlIHdvdWxkIGhhdmUgYmVlbiB0byByZXBsYWNlIC5oZWFkZXJzIGRpY3Qgd2l0aCBhIGRpY3QKKyAgICBzdWJjbGFzcyAob3IgVXNlckRpY3QuRGljdE1peGluIGluc3RhbmNlPykgIHRoYXQgcHJlc2VydmVkIHRoZSAuaGVhZGVycworICAgIGludGVyZmFjZSBhbmQgYWxzbyBwcm92aWRlZCBhY2Nlc3MgdG8gdGhlICJ1bnJlZGlyZWN0ZWQiIGhlYWRlcnMuICBJdCdzCisgICAgcHJvYmFibHkgdG9vIGxhdGUgdG8gZml4IHRoYXQsIHRob3VnaC4KKworCisgICAgQ2hlY2sgLmNhcGl0YWxpemUoKSBjYXNlIG5vcm1hbGl6YXRpb246CisKKyAgICA+Pj4gdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbSIKKyAgICA+Pj4gUmVxdWVzdCh1cmwsIGhlYWRlcnM9eyJTcGFtLWVnZ3MiOiAiYmxhaCJ9KS5oZWFkZXJzWyJTcGFtLWVnZ3MiXQorICAgICdibGFoJworICAgID4+PiBSZXF1ZXN0KHVybCwgaGVhZGVycz17InNwYW0tRWdnUyI6ICJibGFoIn0pLmhlYWRlcnNbIlNwYW0tZWdncyJdCisgICAgJ2JsYWgnCisKKyAgICBDdXJyZW50bHksIFJlcXVlc3QodXJsLCAiU3BhbS1lZ2dzIikuaGVhZGVyc1siU3BhbS1FZ2dzIl0gcmFpc2VzIEtleUVycm9yLAorICAgIGJ1dCB0aGF0IGNvdWxkIGJlIGNoYW5nZWQgaW4gZnV0dXJlLgorCisgICAgIiIiCisKK2RlZiB0ZXN0X3JlcXVlc3RfaGVhZGVyc19tZXRob2RzKCk6CisgICAgIiIiCisgICAgTm90ZSB0aGUgY2FzZSBub3JtYWxpemF0aW9uIG9mIGhlYWRlciBuYW1lcyBoZXJlLCB0byAuY2FwaXRhbGl6ZSgpLWNhc2UuCisgICAgVGhpcyBzaG91bGQgYmUgcHJlc2VydmVkIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eS4gIChJbiB0aGUgSFRUUCBjYXNlLAorICAgIG5vcm1hbGl6YXRpb24gdG8gLnRpdGxlKCktY2FzZSBpcyBkb25lIGJ5IHVybGxpYjIgYmVmb3JlIHNlbmRpbmcgaGVhZGVycyB0bworICAgIGh0dHBsaWIpLgorCisgICAgPj4+IHVybCA9ICJodHRwOi8vZXhhbXBsZS5jb20iCisgICAgPj4+IHIgPSBSZXF1ZXN0KHVybCwgaGVhZGVycz17IlNwYW0tZWdncyI6ICJibGFoIn0pCisgICAgPj4+IHIuaGFzX2hlYWRlcigiU3BhbS1lZ2dzIikKKyAgICBUcnVlCisgICAgPj4+IHIuaGVhZGVyX2l0ZW1zKCkKKyAgICBbKCdTcGFtLWVnZ3MnLCAnYmxhaCcpXQorICAgID4+PiByLmFkZF9oZWFkZXIoIkZvby1CYXIiLCAiYmF6IikKKyAgICA+Pj4gaXRlbXMgPSByLmhlYWRlcl9pdGVtcygpCisgICAgPj4+IGl0ZW1zLnNvcnQoKQorICAgID4+PiBpdGVtcworICAgIFsoJ0Zvby1iYXInLCAnYmF6JyksICgnU3BhbS1lZ2dzJywgJ2JsYWgnKV0KKworICAgIE5vdGUgdGhhdCBlLmcuIHIuaGFzX2hlYWRlcigic3BhbS1FZ2dTIikgaXMgY3VycmVudGx5IEZhbHNlLCBhbmQKKyAgICByLmdldF9oZWFkZXIoInNwYW0tRWdnUyIpIHJldHVybnMgTm9uZSwgYnV0IHRoYXQgY291bGQgYmUgY2hhbmdlZCBpbgorICAgIGZ1dHVyZS4KKworICAgID4+PiByLmhhc19oZWFkZXIoIk5vdC10aGVyZSIpCisgICAgRmFsc2UKKyAgICA+Pj4gcHJpbnQgci5nZXRfaGVhZGVyKCJOb3QtdGhlcmUiKQorICAgIE5vbmUKKyAgICA+Pj4gci5nZXRfaGVhZGVyKCJOb3QtdGhlcmUiLCAiZGVmYXVsdCIpCisgICAgJ2RlZmF1bHQnCisKKyAgICAiIiIKKworCitkZWYgdGVzdF9wYXNzd29yZF9tYW5hZ2VyKHNlbGYpOgorICAgICIiIgorICAgID4+PiBtZ3IgPSB1cmxsaWIyLkhUVFBQYXNzd29yZE1ncigpCisgICAgPj4+IGFkZCA9IG1nci5hZGRfcGFzc3dvcmQKKyAgICA+Pj4gYWRkKCJTb21lIFJlYWxtIiwgImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiam9lIiwgInBhc3N3b3JkIikKKyAgICA+Pj4gYWRkKCJTb21lIFJlYWxtIiwgImh0dHA6Ly9leGFtcGxlLmNvbS9uaSIsICJuaSIsICJuaSIpCisgICAgPj4+IGFkZCgiYyIsICJodHRwOi8vZXhhbXBsZS5jb20vZm9vIiwgImZvbyIsICJuaSIpCisgICAgPj4+IGFkZCgiYyIsICJodHRwOi8vZXhhbXBsZS5jb20vYmFyIiwgImJhciIsICJuaW5pIikKKyAgICA+Pj4gYWRkKCJiIiwgImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiZmlyc3QiLCAiYmxhaCIpCisgICAgPj4+IGFkZCgiYiIsICJodHRwOi8vZXhhbXBsZS5jb20vIiwgInNlY29uZCIsICJzcGFtIikKKyAgICA+Pj4gYWRkKCJhIiwgImh0dHA6Ly9leGFtcGxlLmNvbSIsICIxIiwgImEiKQorICAgID4+PiBhZGQoIlNvbWUgUmVhbG0iLCAiaHR0cDovL2MuZXhhbXBsZS5jb206MzEyOCIsICIzIiwgImMiKQorICAgID4+PiBhZGQoIlNvbWUgUmVhbG0iLCAiZC5leGFtcGxlLmNvbSIsICI0IiwgImQiKQorICAgID4+PiBhZGQoIlNvbWUgUmVhbG0iLCAiZS5leGFtcGxlLmNvbTozMTI4IiwgIjUiLCAiZSIpCisKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJleGFtcGxlLmNvbSIpCisgICAgKCdqb2UnLCAncGFzc3dvcmQnKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJTb21lIFJlYWxtIiwgImh0dHA6Ly9leGFtcGxlLmNvbSIpCisgICAgKCdqb2UnLCAncGFzc3dvcmQnKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJTb21lIFJlYWxtIiwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKQorICAgICgnam9lJywgJ3Bhc3N3b3JkJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJodHRwOi8vZXhhbXBsZS5jb20vc3BhbSIpCisgICAgKCdqb2UnLCAncGFzc3dvcmQnKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJTb21lIFJlYWxtIiwgImh0dHA6Ly9leGFtcGxlLmNvbS9zcGFtL3NwYW0iKQorICAgICgnam9lJywgJ3Bhc3N3b3JkJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiYyIsICJodHRwOi8vZXhhbXBsZS5jb20vZm9vIikKKyAgICAoJ2ZvbycsICduaScpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImMiLCAiaHR0cDovL2V4YW1wbGUuY29tL2JhciIpCisgICAgKCdiYXInLCAnbmluaScpCisKKyAgICBBY3R1YWxseSwgdGhpcyBpcyByZWFsbHkgdW5kZWZpbmVkIEFUTQorIyMgICAgIEN1cnJlbnRseSwgd2UgdXNlIHRoZSBoaWdoZXN0LWxldmVsIHBhdGggd2hlcmUgbW9yZSB0aGFuIG9uZSBtYXRjaDoKKworIyMgICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJTb21lIFJlYWxtIiwgImh0dHA6Ly9leGFtcGxlLmNvbS9uaSIpCisjIyAgICAgKCdqb2UnLCAncGFzc3dvcmQnKQorCisgICAgVXNlIGxhdGVzdCBhZGRfcGFzc3dvcmQoKSBpbiBjYXNlIG9mIGNvbmZsaWN0OgorCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImIiLCAiaHR0cDovL2V4YW1wbGUuY29tLyIpCisgICAgKCdzZWNvbmQnLCAnc3BhbScpCisKKyAgICBObyBzcGVjaWFsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEuZXhhbXBsZS5jb20gYW5kIGV4YW1wbGUuY29tOgorCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImEiLCAiaHR0cDovL2V4YW1wbGUuY29tLyIpCisgICAgKCcxJywgJ2EnKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJhIiwgImh0dHA6Ly9hLmV4YW1wbGUuY29tLyIpCisgICAgKE5vbmUsIE5vbmUpCisKKyAgICBQb3J0czoKKworICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJTb21lIFJlYWxtIiwgImMuZXhhbXBsZS5jb20iKQorICAgIChOb25lLCBOb25lKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJTb21lIFJlYWxtIiwgImMuZXhhbXBsZS5jb206MzEyOCIpCisgICAgKCczJywgJ2MnKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJTb21lIFJlYWxtIiwgImh0dHA6Ly9jLmV4YW1wbGUuY29tOjMxMjgiKQorICAgICgnMycsICdjJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJkLmV4YW1wbGUuY29tIikKKyAgICAoJzQnLCAnZCcpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoIlNvbWUgUmVhbG0iLCAiZS5leGFtcGxlLmNvbTozMTI4IikKKyAgICAoJzUnLCAnZScpCisKKyAgICAiIiIKKyAgICBwYXNzCisKKworZGVmIHRlc3RfcGFzc3dvcmRfbWFuYWdlcl9kZWZhdWx0X3BvcnQoc2VsZik6CisgICAgIiIiCisgICAgPj4+IG1nciA9IHVybGxpYjIuSFRUUFBhc3N3b3JkTWdyKCkKKyAgICA+Pj4gYWRkID0gbWdyLmFkZF9wYXNzd29yZAorCisgICAgVGhlIHBvaW50IHRvIG5vdGUgaGVyZSBpcyB0aGF0IHdlIGNhbid0IGd1ZXNzIHRoZSBkZWZhdWx0IHBvcnQgaWYgdGhlcmUncworICAgIG5vIHNjaGVtZS4gIFRoaXMgYXBwbGllcyB0byBib3RoIGFkZF9wYXNzd29yZCBhbmQgZmluZF91c2VyX3Bhc3N3b3JkLgorCisgICAgPj4+IGFkZCgiZiIsICJodHRwOi8vZy5leGFtcGxlLmNvbTo4MCIsICIxMCIsICJqIikKKyAgICA+Pj4gYWRkKCJnIiwgImh0dHA6Ly9oLmV4YW1wbGUuY29tIiwgIjExIiwgImsiKQorICAgID4+PiBhZGQoImgiLCAiaS5leGFtcGxlLmNvbTo4MCIsICIxMiIsICJsIikKKyAgICA+Pj4gYWRkKCJpIiwgImouZXhhbXBsZS5jb20iLCAiMTMiLCAibSIpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImYiLCAiZy5leGFtcGxlLmNvbToxMDAiKQorICAgIChOb25lLCBOb25lKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJmIiwgImcuZXhhbXBsZS5jb206ODAiKQorICAgICgnMTAnLCAnaicpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImYiLCAiZy5leGFtcGxlLmNvbSIpCisgICAgKE5vbmUsIE5vbmUpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImYiLCAiaHR0cDovL2cuZXhhbXBsZS5jb206MTAwIikKKyAgICAoTm9uZSwgTm9uZSkKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiZiIsICJodHRwOi8vZy5leGFtcGxlLmNvbTo4MCIpCisgICAgKCcxMCcsICdqJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiZiIsICJodHRwOi8vZy5leGFtcGxlLmNvbSIpCisgICAgKCcxMCcsICdqJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiZyIsICJoLmV4YW1wbGUuY29tIikKKyAgICAoJzExJywgJ2snKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJnIiwgImguZXhhbXBsZS5jb206ODAiKQorICAgICgnMTEnLCAnaycpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImciLCAiaHR0cDovL2guZXhhbXBsZS5jb206ODAiKQorICAgICgnMTEnLCAnaycpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImgiLCAiaS5leGFtcGxlLmNvbSIpCisgICAgKE5vbmUsIE5vbmUpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImgiLCAiaS5leGFtcGxlLmNvbTo4MCIpCisgICAgKCcxMicsICdsJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiaCIsICJodHRwOi8vaS5leGFtcGxlLmNvbTo4MCIpCisgICAgKCcxMicsICdsJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiaSIsICJqLmV4YW1wbGUuY29tIikKKyAgICAoJzEzJywgJ20nKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJpIiwgImouZXhhbXBsZS5jb206ODAiKQorICAgIChOb25lLCBOb25lKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJpIiwgImh0dHA6Ly9qLmV4YW1wbGUuY29tIikKKyAgICAoJzEzJywgJ20nKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJpIiwgImh0dHA6Ly9qLmV4YW1wbGUuY29tOjgwIikKKyAgICAoTm9uZSwgTm9uZSkKKworICAgICIiIgorCitjbGFzcyBNb2NrT3BlbmVyOgorICAgIGFkZGhlYWRlcnMgPSBbXQorICAgIGRlZiBvcGVuKHNlbGYsIHJlcSwgZGF0YT1Ob25lLHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKKyAgICAgICAgc2VsZi5yZXEsIHNlbGYuZGF0YSwgc2VsZi50aW1lb3V0ICA9IHJlcSwgZGF0YSwgdGltZW91dAorICAgIGRlZiBlcnJvcihzZWxmLCBwcm90bywgKmFyZ3MpOgorICAgICAgICBzZWxmLnByb3RvLCBzZWxmLmFyZ3MgPSBwcm90bywgYXJncworCitjbGFzcyBNb2NrRmlsZToKKyAgICBkZWYgcmVhZChzZWxmLCBjb3VudD1Ob25lKTogcGFzcworICAgIGRlZiByZWFkbGluZShzZWxmLCBjb3VudD1Ob25lKTogcGFzcworICAgIGRlZiBjbG9zZShzZWxmKTogcGFzcworCitjbGFzcyBNb2NrSGVhZGVycyhkaWN0KToKKyAgICBkZWYgZ2V0aGVhZGVycyhzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWVzKCkKKworY2xhc3MgTW9ja1Jlc3BvbnNlKFN0cmluZ0lPLlN0cmluZ0lPKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29kZSwgbXNnLCBoZWFkZXJzLCBkYXRhLCB1cmw9Tm9uZSk6CisgICAgICAgIFN0cmluZ0lPLlN0cmluZ0lPLl9faW5pdF9fKHNlbGYsIGRhdGEpCisgICAgICAgIHNlbGYuY29kZSwgc2VsZi5tc2csIHNlbGYuaGVhZGVycywgc2VsZi51cmwgPSBjb2RlLCBtc2csIGhlYWRlcnMsIHVybAorICAgIGRlZiBpbmZvKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5oZWFkZXJzCisgICAgZGVmIGdldHVybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudXJsCisKK2NsYXNzIE1vY2tDb29raWVKYXI6CisgICAgZGVmIGFkZF9jb29raWVfaGVhZGVyKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICBzZWxmLmFjaF9yZXEgPSByZXF1ZXN0CisgICAgZGVmIGV4dHJhY3RfY29va2llcyhzZWxmLCByZXNwb25zZSwgcmVxdWVzdCk6CisgICAgICAgIHNlbGYuZWNfcmVxLCBzZWxmLmVjX3IgPSByZXF1ZXN0LCByZXNwb25zZQorCitjbGFzcyBGYWtlTWV0aG9kOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRoX25hbWUsIGFjdGlvbiwgaGFuZGxlKToKKyAgICAgICAgc2VsZi5tZXRoX25hbWUgPSBtZXRoX25hbWUKKyAgICAgICAgc2VsZi5oYW5kbGUgPSBoYW5kbGUKKyAgICAgICAgc2VsZi5hY3Rpb24gPSBhY3Rpb24KKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGUoc2VsZi5tZXRoX25hbWUsIHNlbGYuYWN0aW9uLCAqYXJncykKKworY2xhc3MgTW9ja0hUVFBSZXNwb25zZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnAsIG1zZywgc3RhdHVzLCByZWFzb24pOgorICAgICAgICBzZWxmLmZwID0gZnAKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0dXMKKyAgICAgICAgc2VsZi5yZWFzb24gPSByZWFzb24KKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgcmV0dXJuICcnCisKK2NsYXNzIE1vY2tIVFRQQ2xhc3M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlcV9oZWFkZXJzID0gW10KKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorICAgICAgICBzZWxmLnJhaXNlX29uX2VuZGhlYWRlcnMgPSBGYWxzZQorICAgICAgICBzZWxmLl90dW5uZWxfaGVhZGVycyA9IHt9CisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgaG9zdCwgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgorICAgICAgICBzZWxmLmhvc3QgPSBob3N0CisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBzZXRfZGVidWdsZXZlbChzZWxmLCBsZXZlbCk6CisgICAgICAgIHNlbGYubGV2ZWwgPSBsZXZlbAorCisgICAgZGVmIHNldF90dW5uZWwoc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgICAgICBzZWxmLl90dW5uZWxfaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5fdHVubmVsX3BvcnQgPSBwb3J0CisgICAgICAgIGlmIGhlYWRlcnM6CisgICAgICAgICAgICBzZWxmLl90dW5uZWxfaGVhZGVycyA9IGhlYWRlcnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3R1bm5lbF9oZWFkZXJzLmNsZWFyKCkKKworICAgIGRlZiByZXF1ZXN0KHNlbGYsIG1ldGhvZCwgdXJsLCBib2R5PU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCisgICAgICAgIHNlbGYuc2VsZWN0b3IgPSB1cmwKKyAgICAgICAgaWYgaGVhZGVycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYucmVxX2hlYWRlcnMgKz0gaGVhZGVycy5pdGVtcygpCisgICAgICAgIHNlbGYucmVxX2hlYWRlcnMuc29ydCgpCisgICAgICAgIGlmIGJvZHk6CisgICAgICAgICAgICBzZWxmLmRhdGEgPSBib2R5CisgICAgICAgIGlmIHNlbGYucmFpc2Vfb25fZW5kaGVhZGVyczoKKyAgICAgICAgICAgIGltcG9ydCBzb2NrZXQKKyAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigpCisKKyAgICBkZWYgZ2V0cmVzcG9uc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBNb2NrSFRUUFJlc3BvbnNlKE1vY2tGaWxlKCksIHt9LCAyMDAsICJPSyIpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKworY2xhc3MgTW9ja0hhbmRsZXI6CisgICAgIyB1c2VmdWwgZm9yIHRlc3RpbmcgaGFuZGxlciBtYWNoaW5lcnkKKyAgICAjIHNlZSBhZGRfb3JkZXJlZF9tb2NrX2hhbmRsZXJzKCkgZG9jc3RyaW5nCisgICAgaGFuZGxlcl9vcmRlciA9IDUwMAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2RzKToKKyAgICAgICAgc2VsZi5fZGVmaW5lX21ldGhvZHMobWV0aG9kcykKKyAgICBkZWYgX2RlZmluZV9tZXRob2RzKHNlbGYsIG1ldGhvZHMpOgorICAgICAgICBmb3Igc3BlYyBpbiBtZXRob2RzOgorICAgICAgICAgICAgaWYgbGVuKHNwZWMpID09IDI6IG5hbWUsIGFjdGlvbiA9IHNwZWMKKyAgICAgICAgICAgIGVsc2U6IG5hbWUsIGFjdGlvbiA9IHNwZWMsIE5vbmUKKyAgICAgICAgICAgIG1ldGggPSBGYWtlTWV0aG9kKG5hbWUsIGFjdGlvbiwgc2VsZi5oYW5kbGUpCisgICAgICAgICAgICBzZXRhdHRyKHNlbGYuX19jbGFzc19fLCBuYW1lLCBtZXRoKQorICAgIGRlZiBoYW5kbGUoc2VsZiwgZm5fbmFtZSwgYWN0aW9uLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgc2VsZi5wYXJlbnQuY2FsbHMuYXBwZW5kKChzZWxmLCBmbl9uYW1lLCBhcmdzLCBrd2RzKSkKKyAgICAgICAgaWYgYWN0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAicmV0dXJuIHNlbGYiOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZWxpZiBhY3Rpb24gPT0gInJldHVybiByZXNwb25zZSI6CisgICAgICAgICAgICByZXMgPSBNb2NrUmVzcG9uc2UoMjAwLCAiT0siLCB7fSwgIiIpCisgICAgICAgICAgICByZXR1cm4gcmVzCisgICAgICAgIGVsaWYgYWN0aW9uID09ICJyZXR1cm4gcmVxdWVzdCI6CisgICAgICAgICAgICByZXR1cm4gUmVxdWVzdCgiaHR0cDovL2JsYWgvIikKKyAgICAgICAgZWxpZiBhY3Rpb24uc3RhcnRzd2l0aCgiZXJyb3IiKToKKyAgICAgICAgICAgIGNvZGUgPSBhY3Rpb25bYWN0aW9uLnJmaW5kKCIgIikrMTpdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29kZSA9IGludChjb2RlKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmVzID0gTW9ja1Jlc3BvbnNlKDIwMCwgIk9LIiwge30sICIiKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50LmVycm9yKCJodHRwIiwgYXJnc1swXSwgcmVzLCBjb2RlLCAiIiwge30pCisgICAgICAgIGVsaWYgYWN0aW9uID09ICJyYWlzZSI6CisgICAgICAgICAgICByYWlzZSB1cmxsaWIyLlVSTEVycm9yKCJibGFoIikKKyAgICAgICAgYXNzZXJ0IEZhbHNlCisgICAgZGVmIGNsb3NlKHNlbGYpOiBwYXNzCisgICAgZGVmIGFkZF9wYXJlbnQoc2VsZiwgcGFyZW50KToKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKKyAgICAgICAgc2VsZi5wYXJlbnQuY2FsbHMgPSBbXQorICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihvdGhlciwgImhhbmRsZXJfb3JkZXIiKToKKyAgICAgICAgICAgICMgTm8gaGFuZGxlcl9vcmRlciwgbGVhdmUgaW4gb3JpZ2luYWwgb3JkZXIuICBZdWNrLgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlcl9vcmRlciA8IG90aGVyLmhhbmRsZXJfb3JkZXIKKworZGVmIGFkZF9vcmRlcmVkX21vY2tfaGFuZGxlcnMob3BlbmVyLCBtZXRoX3NwZWMpOgorICAgICIiIkNyZWF0ZSBNb2NrSGFuZGxlcnMgYW5kIGFkZCB0aGVtIHRvIGFuIE9wZW5lckRpcmVjdG9yLgorCisgICAgbWV0aF9zcGVjOiBsaXN0IG9mIGxpc3RzIG9mIHR1cGxlcyBhbmQgc3RyaW5ncyBkZWZpbmluZyBtZXRob2RzIHRvIGRlZmluZQorICAgIG9uIGhhbmRsZXJzLiAgZWc6CisKKyAgICBbWyJodHRwX2Vycm9yIiwgImZ0cF9vcGVuIl0sIFsiaHR0cF9vcGVuIl1dCisKKyAgICBkZWZpbmVzIG1ldGhvZHMgLmh0dHBfZXJyb3IoKSBhbmQgLmZ0cF9vcGVuKCkgb24gb25lIGhhbmRsZXIsIGFuZAorICAgIC5odHRwX29wZW4oKSBvbiBhbm90aGVyLiAgVGhlc2UgbWV0aG9kcyBqdXN0IHJlY29yZCB0aGVpciBhcmd1bWVudHMgYW5kCisgICAgcmV0dXJuIE5vbmUuICBVc2luZyBhIHR1cGxlIGluc3RlYWQgb2YgYSBzdHJpbmcgY2F1c2VzIHRoZSBtZXRob2QgdG8KKyAgICBwZXJmb3JtIHNvbWUgYWN0aW9uIChzZWUgTW9ja0hhbmRsZXIuaGFuZGxlKCkpLCBlZzoKKworICAgIFtbImh0dHBfZXJyb3IiXSwgWygiaHR0cF9vcGVuIiwgInJldHVybiByZXF1ZXN0IildXQorCisgICAgZGVmaW5lcyAuaHR0cF9lcnJvcigpIG9uIG9uZSBoYW5kbGVyICh3aGljaCBzaW1wbHkgcmV0dXJucyBOb25lKSwgYW5kCisgICAgLmh0dHBfb3BlbigpIG9uIGFub3RoZXIgaGFuZGxlciwgd2hpY2ggcmV0dXJucyBhIFJlcXVlc3Qgb2JqZWN0LgorCisgICAgIiIiCisgICAgaGFuZGxlcnMgPSBbXQorICAgIGNvdW50ID0gMAorICAgIGZvciBtZXRocyBpbiBtZXRoX3NwZWM6CisgICAgICAgIGNsYXNzIE1vY2tIYW5kbGVyU3ViY2xhc3MoTW9ja0hhbmRsZXIpOiBwYXNzCisgICAgICAgIGggPSBNb2NrSGFuZGxlclN1YmNsYXNzKG1ldGhzKQorICAgICAgICBoLmhhbmRsZXJfb3JkZXIgKz0gY291bnQKKyAgICAgICAgaC5hZGRfcGFyZW50KG9wZW5lcikKKyAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGgpCisgICAgICAgIG9wZW5lci5hZGRfaGFuZGxlcihoKQorICAgIHJldHVybiBoYW5kbGVycworCitkZWYgYnVpbGRfdGVzdF9vcGVuZXIoKmhhbmRsZXJfaW5zdGFuY2VzKToKKyAgICBvcGVuZXIgPSBPcGVuZXJEaXJlY3RvcigpCisgICAgZm9yIGggaW4gaGFuZGxlcl9pbnN0YW5jZXM6CisgICAgICAgIG9wZW5lci5hZGRfaGFuZGxlcihoKQorICAgIHJldHVybiBvcGVuZXIKKworY2xhc3MgTW9ja0hUVFBIYW5kbGVyKHVybGxpYjIuQmFzZUhhbmRsZXIpOgorICAgICMgdXNlZnVsIGZvciB0ZXN0aW5nIHJlZGlyZWN0aW9ucyBhbmQgYXV0aAorICAgICMgc2VuZHMgc3VwcGxpZWQgaGVhZGVycyBhbmQgY29kZSBhcyBmaXJzdCByZXNwb25zZQorICAgICMgc2VuZHMgMjAwIE9LIGFzIHNlY29uZCByZXNwb25zZQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlLCBoZWFkZXJzKToKKyAgICAgICAgc2VsZi5jb2RlID0gY29kZQorICAgICAgICBzZWxmLmhlYWRlcnMgPSBoZWFkZXJzCisgICAgICAgIHNlbGYucmVzZXQoKQorICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5fY291bnQgPSAwCisgICAgICAgIHNlbGYucmVxdWVzdHMgPSBbXQorICAgIGRlZiBodHRwX29wZW4oc2VsZiwgcmVxKToKKyAgICAgICAgaW1wb3J0IG1pbWV0b29scywgaHR0cGxpYiwgY29weQorICAgICAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgICAgICBzZWxmLnJlcXVlc3RzLmFwcGVuZChjb3B5LmRlZXBjb3B5KHJlcSkpCisgICAgICAgIGlmIHNlbGYuX2NvdW50ID09IDA6CisgICAgICAgICAgICBzZWxmLl9jb3VudCA9IHNlbGYuX2NvdW50ICsgMQorICAgICAgICAgICAgbmFtZSA9IGh0dHBsaWIucmVzcG9uc2VzW3NlbGYuY29kZV0KKyAgICAgICAgICAgIG1zZyA9IG1pbWV0b29scy5NZXNzYWdlKFN0cmluZ0lPKHNlbGYuaGVhZGVycykpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnQuZXJyb3IoCisgICAgICAgICAgICAgICAgImh0dHAiLCByZXEsIE1vY2tGaWxlKCksIHNlbGYuY29kZSwgbmFtZSwgbXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZXEgPSByZXEKKyAgICAgICAgICAgIG1zZyA9IG1pbWV0b29scy5NZXNzYWdlKFN0cmluZ0lPKCJcclxuXHJcbiIpKQorICAgICAgICAgICAgcmV0dXJuIE1vY2tSZXNwb25zZSgyMDAsICJPSyIsIG1zZywgIiIsIHJlcS5nZXRfZnVsbF91cmwoKSkKKworY2xhc3MgTW9ja0hUVFBTSGFuZGxlcih1cmxsaWIyLkFic3RyYWN0SFRUUEhhbmRsZXIpOgorICAgICMgVXNlZnVsIGZvciB0ZXN0aW5nIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIHJlcXVlc3QgYnkgdmVyaWZ5aW5nIHRoZQorICAgICMgcHJvcGVydGllcyBvZiBodHRwY29uCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHVybGxpYjIuQWJzdHJhY3RIVFRQSGFuZGxlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmh0dHBjb25uID0gTW9ja0hUVFBDbGFzcygpCisKKyAgICBkZWYgaHR0cHNfb3BlbihzZWxmLCByZXEpOgorICAgICAgICByZXR1cm4gc2VsZi5kb19vcGVuKHNlbGYuaHR0cGNvbm4sIHJlcSkKKworY2xhc3MgTW9ja1Bhc3N3b3JkTWFuYWdlcjoKKyAgICBkZWYgYWRkX3Bhc3N3b3JkKHNlbGYsIHJlYWxtLCB1cmksIHVzZXIsIHBhc3N3b3JkKToKKyAgICAgICAgc2VsZi5yZWFsbSA9IHJlYWxtCisgICAgICAgIHNlbGYudXJsID0gdXJpCisgICAgICAgIHNlbGYudXNlciA9IHVzZXIKKyAgICAgICAgc2VsZi5wYXNzd29yZCA9IHBhc3N3b3JkCisgICAgZGVmIGZpbmRfdXNlcl9wYXNzd29yZChzZWxmLCByZWFsbSwgYXV0aHVyaSk6CisgICAgICAgIHNlbGYudGFyZ2V0X3JlYWxtID0gcmVhbG0KKyAgICAgICAgc2VsZi50YXJnZXRfdXJsID0gYXV0aHVyaQorICAgICAgICByZXR1cm4gc2VsZi51c2VyLCBzZWxmLnBhc3N3b3JkCisKKworY2xhc3MgT3BlbmVyRGlyZWN0b3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hZGRfbm9uX2hhbmRsZXIoc2VsZik6CisgICAgICAgIGNsYXNzIE5vbkhhbmRsZXIob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuZXJEaXJlY3RvcigpLmFkZF9oYW5kbGVyLCBOb25IYW5kbGVyKCkpCisKKyAgICBkZWYgdGVzdF9iYWRseV9uYW1lZF9tZXRob2RzKHNlbGYpOgorICAgICAgICAjIHRlc3Qgd29yay1hcm91bmQgZm9yIHRocmVlIG1ldGhvZHMgdGhhdCBhY2NpZGVudGFsbHkgZm9sbG93IHRoZQorICAgICAgICAjIG5hbWluZyBjb252ZW50aW9ucyBmb3IgaGFuZGxlciBtZXRob2RzCisgICAgICAgICMgKCpfb3BlbigpIC8gKl9yZXF1ZXN0KCkgLyAqX3Jlc3BvbnNlKCkpCisKKyAgICAgICAgIyBUaGVzZSB1c2VkIHRvIGNhbGwgdGhlIGFjY2lkZW50YWxseS1uYW1lZCBtZXRob2RzLCBjYXVzaW5nIGEKKyAgICAgICAgIyBUeXBlRXJyb3IgaW4gcmVhbCBjb2RlOyBoZXJlLCByZXR1cm5pbmcgc2VsZiBmcm9tIHRoZXNlIG1vY2sKKyAgICAgICAgIyBtZXRob2RzIHdvdWxkIGVpdGhlciBjYXVzZSBubyBleGNlcHRpb24sIG9yIEF0dHJpYnV0ZUVycm9yLgorCisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgVVJMRXJyb3IKKworICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBtZXRoX3NwZWMgPSBbCisgICAgICAgICAgICBbKCJkb19vcGVuIiwgInJldHVybiBzZWxmIiksICgicHJveHlfb3BlbiIsICJyZXR1cm4gc2VsZiIpXSwKKyAgICAgICAgICAgIFsoInJlZGlyZWN0X3JlcXVlc3QiLCAicmV0dXJuIHNlbGYiKV0sCisgICAgICAgICAgICBdCisgICAgICAgIGhhbmRsZXJzID0gYWRkX29yZGVyZWRfbW9ja19oYW5kbGVycyhvLCBtZXRoX3NwZWMpCisgICAgICAgIG8uYWRkX2hhbmRsZXIodXJsbGliMi5Vbmtub3duSGFuZGxlcigpKQorICAgICAgICBmb3Igc2NoZW1lIGluICJkbyIsICJwcm94eSIsICJyZWRpcmVjdCI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVUkxFcnJvciwgby5vcGVuLCBzY2hlbWUrIjovL2V4YW1wbGUuY29tLyIpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVkKHNlbGYpOgorICAgICAgICAjIGhhbmRsZXIgcmV0dXJuaW5nIG5vbi1Ob25lIG1lYW5zIG5vIG1vcmUgaGFuZGxlcnMgd2lsbCBiZSBjYWxsZWQKKyAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgbWV0aF9zcGVjID0gWworICAgICAgICAgICAgWyJodHRwX29wZW4iLCAiZnRwX29wZW4iLCAiaHR0cF9lcnJvcl8zMDIiXSwKKyAgICAgICAgICAgIFsiZnRwX29wZW4iXSwKKyAgICAgICAgICAgIFsoImh0dHBfb3BlbiIsICJyZXR1cm4gc2VsZiIpXSwKKyAgICAgICAgICAgIFsoImh0dHBfb3BlbiIsICJyZXR1cm4gc2VsZiIpXSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgaGFuZGxlcnMgPSBhZGRfb3JkZXJlZF9tb2NrX2hhbmRsZXJzKG8sIG1ldGhfc3BlYykKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vIikKKyAgICAgICAgciA9IG8ub3BlbihyZXEpCisgICAgICAgICMgU2Vjb25kIC5odHRwX29wZW4oKSBnZXRzIGNhbGxlZCwgdGhpcmQgZG9lc24ndCwgc2luY2Ugc2Vjb25kIHJldHVybmVkCisgICAgICAgICMgbm9uLU5vbmUuICBIYW5kbGVycyB3aXRob3V0IC5odHRwX29wZW4oKSBuZXZlciBnZXQgYW55IG1ldGhvZHMgY2FsbGVkCisgICAgICAgICMgb24gdGhlbS4KKyAgICAgICAgIyBJbiBmYWN0LCBzZWNvbmQgbW9jayBoYW5kbGVyIGRlZmluaW5nIC5odHRwX29wZW4oKSByZXR1cm5zIHNlbGYKKyAgICAgICAgIyAoaW5zdGVhZCBvZiByZXNwb25zZSksIHdoaWNoIGJlY29tZXMgdGhlIE9wZW5lckRpcmVjdG9yJ3MgcmV0dXJuCisgICAgICAgICMgdmFsdWUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgaGFuZGxlcnNbMl0pCisgICAgICAgIGNhbGxzID0gWyhoYW5kbGVyc1swXSwgImh0dHBfb3BlbiIpLCAoaGFuZGxlcnNbMl0sICJodHRwX29wZW4iKV0KKyAgICAgICAgZm9yIGV4cGVjdGVkLCBnb3QgaW4gemlwKGNhbGxzLCBvLmNhbGxzKToKKyAgICAgICAgICAgIGhhbmRsZXIsIG5hbWUsIGFyZ3MsIGt3ZHMgPSBnb3QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGhhbmRsZXIsIG5hbWUpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgKHJlcSwpKQorCisgICAgZGVmIHRlc3RfaGFuZGxlcl9vcmRlcihzZWxmKToKKyAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgaGFuZGxlcnMgPSBbXQorICAgICAgICBmb3IgbWV0aHMsIGhhbmRsZXJfb3JkZXIgaW4gWworICAgICAgICAgICAgKFsoImh0dHBfb3BlbiIsICJyZXR1cm4gc2VsZiIpXSwgNTAwKSwKKyAgICAgICAgICAgIChbImh0dHBfb3BlbiJdLCAwKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBjbGFzcyBNb2NrSGFuZGxlclN1YmNsYXNzKE1vY2tIYW5kbGVyKTogcGFzcworICAgICAgICAgICAgaCA9IE1vY2tIYW5kbGVyU3ViY2xhc3MobWV0aHMpCisgICAgICAgICAgICBoLmhhbmRsZXJfb3JkZXIgPSBoYW5kbGVyX29yZGVyCisgICAgICAgICAgICBoYW5kbGVycy5hcHBlbmQoaCkKKyAgICAgICAgICAgIG8uYWRkX2hhbmRsZXIoaCkKKworICAgICAgICByID0gby5vcGVuKCJodHRwOi8vZXhhbXBsZS5jb20vIikKKyAgICAgICAgIyBoYW5kbGVycyBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciwgdGhhbmtzIHRvIHRoZWlyIHNvcnQgb3JkZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLmNhbGxzWzBdWzBdLCBoYW5kbGVyc1sxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLmNhbGxzWzFdWzBdLCBoYW5kbGVyc1swXSkKKworICAgIGRlZiB0ZXN0X3JhaXNlKHNlbGYpOgorICAgICAgICAjIHJhaXNpbmcgVVJMRXJyb3Igc3RvcHMgcHJvY2Vzc2luZyBvZiByZXF1ZXN0CisgICAgICAgIG8gPSBPcGVuZXJEaXJlY3RvcigpCisgICAgICAgIG1ldGhfc3BlYyA9IFsKKyAgICAgICAgICAgIFsoImh0dHBfb3BlbiIsICJyYWlzZSIpXSwKKyAgICAgICAgICAgIFsoImh0dHBfb3BlbiIsICJyZXR1cm4gc2VsZiIpXSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgaGFuZGxlcnMgPSBhZGRfb3JkZXJlZF9tb2NrX2hhbmRsZXJzKG8sIG1ldGhfc3BlYykKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliMi5VUkxFcnJvciwgby5vcGVuLCByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5jYWxscywgWyhoYW5kbGVyc1swXSwgImh0dHBfb3BlbiIsIChyZXEsKSwge30pXSkKKworIyMgICAgIGRlZiB0ZXN0X2Vycm9yKHNlbGYpOgorIyMgICAgICAgICAjIFhYWCB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgc2VlbSB0byBiZSB1c2VkIGluIHN0YW5kYXJkIGxpYnJhcnksCisjIyAgICAgICAgICMgIGJ1dCBzaG91bGQgcmVhbGx5IGJlIHRlc3RlZCBhbnl3YXkuLi4KKworICAgIGRlZiB0ZXN0X2h0dHBfZXJyb3Ioc2VsZik6CisgICAgICAgICMgWFhYIGh0dHBfZXJyb3JfZGVmYXVsdAorICAgICAgICAjIGh0dHAgZXJyb3JzIGFyZSBhIHNwZWNpYWwgY2FzZQorICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBtZXRoX3NwZWMgPSBbCisgICAgICAgICAgICBbKCJodHRwX29wZW4iLCAiZXJyb3IgMzAyIildLAorICAgICAgICAgICAgWygiaHR0cF9lcnJvcl80MDAiLCAicmFpc2UiKSwgImh0dHBfb3BlbiJdLAorICAgICAgICAgICAgWygiaHR0cF9lcnJvcl8zMDIiLCAicmV0dXJuIHJlc3BvbnNlIiksICJodHRwX2Vycm9yXzMwMyIsCisgICAgICAgICAgICAgImh0dHBfZXJyb3IiXSwKKyAgICAgICAgICAgIFsoImh0dHBfZXJyb3JfMzAyIildLAorICAgICAgICAgICAgXQorICAgICAgICBoYW5kbGVycyA9IGFkZF9vcmRlcmVkX21vY2tfaGFuZGxlcnMobywgbWV0aF9zcGVjKQorCisgICAgICAgIGNsYXNzIFVua25vd246CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcmV0dXJuIFRydWUKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vIikKKyAgICAgICAgciA9IG8ub3BlbihyZXEpCisgICAgICAgIGFzc2VydCBsZW4oby5jYWxscykgPT0gMgorICAgICAgICBjYWxscyA9IFsoaGFuZGxlcnNbMF0sICJodHRwX29wZW4iLCAocmVxLCkpLAorICAgICAgICAgICAgICAgICAoaGFuZGxlcnNbMl0sICJodHRwX2Vycm9yXzMwMiIsCisgICAgICAgICAgICAgICAgICAocmVxLCBVbmtub3duKCksIDMwMiwgIiIsIHt9KSldCisgICAgICAgIGZvciBleHBlY3RlZCwgZ290IGluIHppcChjYWxscywgby5jYWxscyk6CisgICAgICAgICAgICBoYW5kbGVyLCBtZXRob2RfbmFtZSwgYXJncyA9IGV4cGVjdGVkCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChoYW5kbGVyLCBtZXRob2RfbmFtZSksIGdvdFs6Ml0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIGdvdFsyXSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NvcnMoc2VsZik6CisgICAgICAgICMgKl9yZXF1ZXN0IC8gKl9yZXNwb25zZSBtZXRob2RzIGdldCBjYWxsZWQgYXBwcm9wcmlhdGVseQorICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBtZXRoX3NwZWMgPSBbCisgICAgICAgICAgICBbKCJodHRwX3JlcXVlc3QiLCAicmV0dXJuIHJlcXVlc3QiKSwKKyAgICAgICAgICAgICAoImh0dHBfcmVzcG9uc2UiLCAicmV0dXJuIHJlc3BvbnNlIildLAorICAgICAgICAgICAgWygiaHR0cF9yZXF1ZXN0IiwgInJldHVybiByZXF1ZXN0IiksCisgICAgICAgICAgICAgKCJodHRwX3Jlc3BvbnNlIiwgInJldHVybiByZXNwb25zZSIpXSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgaGFuZGxlcnMgPSBhZGRfb3JkZXJlZF9tb2NrX2hhbmRsZXJzKG8sIG1ldGhfc3BlYykKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vIikKKyAgICAgICAgciA9IG8ub3BlbihyZXEpCisgICAgICAgICMgcHJvY2Vzc29yIG1ldGhvZHMgYXJlIGNhbGxlZCBvbiAqYWxsKiBoYW5kbGVycyB0aGF0IGRlZmluZSB0aGVtLAorICAgICAgICAjIG5vdCBqdXN0IHRoZSBmaXJzdCBoYW5kbGVyIHRoYXQgaGFuZGxlcyB0aGUgcmVxdWVzdAorICAgICAgICBjYWxscyA9IFsKKyAgICAgICAgICAgIChoYW5kbGVyc1swXSwgImh0dHBfcmVxdWVzdCIpLCAoaGFuZGxlcnNbMV0sICJodHRwX3JlcXVlc3QiKSwKKyAgICAgICAgICAgIChoYW5kbGVyc1swXSwgImh0dHBfcmVzcG9uc2UiKSwgKGhhbmRsZXJzWzFdLCAiaHR0cF9yZXNwb25zZSIpXQorCisgICAgICAgIGZvciBpLCAoaGFuZGxlciwgbmFtZSwgYXJncywga3dkcykgaW4gZW51bWVyYXRlKG8uY2FsbHMpOgorICAgICAgICAgICAgaWYgaSA8IDI6CisgICAgICAgICAgICAgICAgIyAqX3JlcXVlc3QKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChoYW5kbGVyLCBuYW1lKSwgY2FsbHNbaV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXJncyksIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFyZ3NbMF0sIFJlcXVlc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgKl9yZXNwb25zZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGhhbmRsZXIsIG5hbWUpLCBjYWxsc1tpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhcmdzKSwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYXJnc1swXSwgUmVxdWVzdCkKKyAgICAgICAgICAgICAgICAjIHJlc3BvbnNlIGZyb20gb3BlbmVyLm9wZW4gaXMgTm9uZSwgYmVjYXVzZSB0aGVyZSdzIG5vCisgICAgICAgICAgICAgICAgIyBoYW5kbGVyIHRoYXQgZGVmaW5lcyBodHRwX29wZW4gdG8gaGFuZGxlIGl0CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3NbMV0gaXMgTm9uZSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGFyZ3NbMV0sIE1vY2tSZXNwb25zZSkpCisKKworZGVmIHNhbmVwYXRobmFtZTJ1cmwocGF0aCk6CisgICAgaW1wb3J0IHVybGxpYgorICAgIHVybHBhdGggPSB1cmxsaWIucGF0aG5hbWUydXJsKHBhdGgpCisgICAgaWYgb3MubmFtZSA9PSAibnQiIGFuZCB1cmxwYXRoLnN0YXJ0c3dpdGgoIi8vLyIpOgorICAgICAgICB1cmxwYXRoID0gdXJscGF0aFsyOl0KKyAgICAjIFhYWCBkb24ndCBhc2sgbWUgYWJvdXQgdGhlIG1hYy4uLgorICAgIHJldHVybiB1cmxwYXRoCisKK2NsYXNzIEhhbmRsZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mdHAoc2VsZik6CisgICAgICAgIGNsYXNzIE1vY2tGVFBXcmFwcGVyOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOiBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgICAgICBkZWYgcmV0cmZpbGUoc2VsZiwgZmlsZW5hbWUsIGZpbGV0eXBlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVuYW1lLCBzZWxmLmZpbGV0eXBlID0gZmlsZW5hbWUsIGZpbGV0eXBlCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0lPLlN0cmluZ0lPKHNlbGYuZGF0YSksIGxlbihzZWxmLmRhdGEpCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6IHBhc3MKKworICAgICAgICBjbGFzcyBOdWxsRlRQSGFuZGxlcih1cmxsaWIyLkZUUEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOiBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgICAgICBkZWYgY29ubmVjdF9mdHAoc2VsZiwgdXNlciwgcGFzc3dkLCBob3N0LCBwb3J0LCBkaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKKyAgICAgICAgICAgICAgICBzZWxmLnVzZXIsIHNlbGYucGFzc3dkID0gdXNlciwgcGFzc3dkCisgICAgICAgICAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQgPSBob3N0LCBwb3J0CisgICAgICAgICAgICAgICAgc2VsZi5kaXJzID0gZGlycworICAgICAgICAgICAgICAgIHNlbGYuZnRwd3JhcHBlciA9IE1vY2tGVFBXcmFwcGVyKHNlbGYuZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mdHB3cmFwcGVyCisKKyAgICAgICAgaW1wb3J0IGZ0cGxpYgorICAgICAgICBkYXRhID0gInJoZXVtIHJoYXBvbmljdW0iCisgICAgICAgIGggPSBOdWxsRlRQSGFuZGxlcihkYXRhKQorICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKKworICAgICAgICBmb3IgdXJsLCBob3N0LCBwb3J0LCB1c2VyLCBwYXNzd2QsIHR5cGVfLCBkaXJzLCBmaWxlbmFtZSwgbWltZXR5cGUgaW4gWworICAgICAgICAgICAgKCJmdHA6Ly9sb2NhbGhvc3QvZm9vL2Jhci9iYXouaHRtbCIsCisgICAgICAgICAgICAgImxvY2FsaG9zdCIsIGZ0cGxpYi5GVFBfUE9SVCwgIiIsICIiLCAiSSIsCisgICAgICAgICAgICAgWyJmb28iLCAiYmFyIl0sICJiYXouaHRtbCIsICJ0ZXh0L2h0bWwiKSwKKyAgICAgICAgICAgICgiZnRwOi8vcGFycm90QGxvY2FsaG9zdC9mb28vYmFyL2Jhei5odG1sIiwKKyAgICAgICAgICAgICAibG9jYWxob3N0IiwgZnRwbGliLkZUUF9QT1JULCAicGFycm90IiwgIiIsICJJIiwKKyAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSwgImJhei5odG1sIiwgInRleHQvaHRtbCIpLAorICAgICAgICAgICAgKCJmdHA6Ly8lMjVwYXJyb3RAbG9jYWxob3N0L2Zvby9iYXIvYmF6Lmh0bWwiLAorICAgICAgICAgICAgICJsb2NhbGhvc3QiLCBmdHBsaWIuRlRQX1BPUlQsICIlcGFycm90IiwgIiIsICJJIiwKKyAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSwgImJhei5odG1sIiwgInRleHQvaHRtbCIpLAorICAgICAgICAgICAgKCJmdHA6Ly8lMjU0MnBhcnJvdEBsb2NhbGhvc3QvZm9vL2Jhci9iYXouaHRtbCIsCisgICAgICAgICAgICAgImxvY2FsaG9zdCIsIGZ0cGxpYi5GVFBfUE9SVCwgIiU0MnBhcnJvdCIsICIiLCAiSSIsCisgICAgICAgICAgICAgWyJmb28iLCAiYmFyIl0sICJiYXouaHRtbCIsICJ0ZXh0L2h0bWwiKSwKKyAgICAgICAgICAgICgiZnRwOi8vbG9jYWxob3N0OjgwL2Zvby9iYXIvIiwKKyAgICAgICAgICAgICAibG9jYWxob3N0IiwgODAsICIiLCAiIiwgIkQiLAorICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdLCAiIiwgTm9uZSksCisgICAgICAgICAgICAoImZ0cDovL2xvY2FsaG9zdC9iYXouZ2lmO3R5cGU9YSIsCisgICAgICAgICAgICAgImxvY2FsaG9zdCIsIGZ0cGxpYi5GVFBfUE9SVCwgIiIsICIiLCAiQSIsCisgICAgICAgICAgICAgW10sICJiYXouZ2lmIiwgTm9uZSksICAjIFhYWCByZWFsbHkgdGhpcyBzaG91bGQgZ3Vlc3MgaW1hZ2UvZ2lmCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCisgICAgICAgICAgICByZXEudGltZW91dCA9IE5vbmUKKyAgICAgICAgICAgIHIgPSBoLmZ0cF9vcGVuKHJlcSkKKyAgICAgICAgICAgICMgZnRwIGF1dGhlbnRpY2F0aW9uIG5vdCB5ZXQgaW1wbGVtZW50ZWQgYnkgRlRQSGFuZGxlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnVzZXIsIHVzZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgucGFzc3dkLCBwYXNzd2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaG9zdCwgc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgucG9ydCwgcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaXJzLCBkaXJzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmZ0cHdyYXBwZXIuZmlsZW5hbWUsIGZpbGVuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmZ0cHdyYXBwZXIuZmlsZXR5cGUsIHR5cGVfKQorICAgICAgICAgICAgaGVhZGVycyA9IHIuaW5mbygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnMuZ2V0KCJDb250ZW50LXR5cGUiKSwgbWltZXR5cGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChoZWFkZXJzWyJDb250ZW50LWxlbmd0aCJdKSwgbGVuKGRhdGEpKQorCisgICAgZGVmIHRlc3RfZmlsZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHJmYzgyMiwgc29ja2V0CisgICAgICAgIGggPSB1cmxsaWIyLkZpbGVIYW5kbGVyKCkKKyAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCisKKyAgICAgICAgVEVTVEZOID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICB1cmxwYXRoID0gc2FuZXBhdGhuYW1lMnVybChvcy5wYXRoLmFic3BhdGgoVEVTVEZOKSkKKyAgICAgICAgdG93cml0ZSA9ICJoZWxsbywgd29ybGRcbiIKKyAgICAgICAgdXJscyA9IFsKKyAgICAgICAgICAgICJmaWxlOi8vbG9jYWxob3N0JXMiICUgdXJscGF0aCwKKyAgICAgICAgICAgICJmaWxlOi8vJXMiICUgdXJscGF0aCwKKyAgICAgICAgICAgICJmaWxlOi8vJXMlcyIgJSAoc29ja2V0LmdldGhvc3RieW5hbWUoJ2xvY2FsaG9zdCcpLCB1cmxwYXRoKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9jYWxhZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUoc29ja2V0LmdldGhvc3RuYW1lKCkpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZ2FpZXJyb3I6CisgICAgICAgICAgICBsb2NhbGFkZHIgPSAnJworICAgICAgICBpZiBsb2NhbGFkZHI6CisgICAgICAgICAgICB1cmxzLmFwcGVuZCgiZmlsZTovLyVzJXMiICUgKGxvY2FsYWRkciwgdXJscGF0aCkpCisKKyAgICAgICAgZm9yIHVybCBpbiB1cmxzOgorICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAid2IiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSh0b3dyaXRlKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgciA9IGguZmlsZV9vcGVuKFJlcXVlc3QodXJsKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0gci5pbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgcmVzcHVybCA9IHIuZ2V0dXJsKCkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICByLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzdGF0cyA9IG9zLnN0YXQoVEVTVEZOKQorICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gcmZjODIyLmZvcm1hdGRhdGUoc3RhdHMuc3RfbXRpbWUpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHRvd3JpdGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbIkNvbnRlbnQtdHlwZSJdLCAidGV4dC9wbGFpbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbIkNvbnRlbnQtbGVuZ3RoIl0sICIxMyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbIkxhc3QtbW9kaWZpZWQiXSwgbW9kaWZpZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3B1cmwsIHVybCkKKworICAgICAgICBmb3IgdXJsIGluIFsKKyAgICAgICAgICAgICJmaWxlOi8vbG9jYWxob3N0OjgwJXMiICUgdXJscGF0aCwKKyAgICAgICAgICAgICJmaWxlOi8vL2ZpbGVfZG9lc19ub3RfZXhpc3QudHh0IiwKKyAgICAgICAgICAgICJmaWxlOi8vJXM6ODAlcy8lcyIgJSAoc29ja2V0LmdldGhvc3RieW5hbWUoJ2xvY2FsaG9zdCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5nZXRjd2QoKSwgVEVTVEZOKSwKKyAgICAgICAgICAgICJmaWxlOi8vc29tZXJhbmRvbWhvc3Qub250aGVpbnRlcm5ldC5jb20lcy8lcyIgJQorICAgICAgICAgICAgKG9zLmdldGN3ZCgpLCBURVNURk4pLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICJ3YiIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHRvd3JpdGUpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIyLlVSTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGguZmlsZV9vcGVuLCBSZXF1ZXN0KHVybCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisKKyAgICAgICAgaCA9IHVybGxpYjIuRmlsZUhhbmRsZXIoKQorICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKKyAgICAgICAgIyBYWFhYIHdoeSBkb2VzIC8vIG1lYW4gZnRwIChhbmQgLy8vIG1lYW4gbm90IGZ0cCEpLCBhbmQgd2hlcmUKKyAgICAgICAgIyAgaXMgZmlsZTogc2NoZW1lIHNwZWNpZmllZD8gIEkgdGhpbmsgdGhpcyBpcyByZWFsbHkgYSBidWcsIGFuZAorICAgICAgICAjICB3aGF0IHdhcyBpbnRlbmRlZCB3YXMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBVUkxzIGxpa2U6CisgICAgICAgICMgZmlsZTovYmxhaC50eHQgKGEgZmlsZSkKKyAgICAgICAgIyBmaWxlOi8vbG9jYWxob3N0L2JsYWgudHh0IChhIGZpbGUpCisgICAgICAgICMgZmlsZTovLy9ibGFoLnR4dCAoYSBmaWxlKQorICAgICAgICAjIGZpbGU6Ly9mdHAuZXhhbXBsZS5jb20vYmxhaC50eHQgKGFuIGZ0cCBVUkwpCisgICAgICAgIGZvciB1cmwsIGZ0cCBpbiBbCisgICAgICAgICAgICAoImZpbGU6Ly9mdHAuZXhhbXBsZS5jb20vL2Zvby50eHQiLCBUcnVlKSwKKyAgICAgICAgICAgICgiZmlsZTovL2Z0cC5leGFtcGxlLmNvbS8vL2Zvby50eHQiLCBGYWxzZSksCisjIFhYWFggYnVnOiBmYWlscyB3aXRoIE9TRXJyb3IsIHNob3VsZCBiZSBVUkxFcnJvcgorICAgICAgICAgICAgKCJmaWxlOi8vZnRwLmV4YW1wbGUuY29tL2Zvby50eHQiLCBGYWxzZSksCisgICAgICAgICAgICAoImZpbGU6Ly9zb21laG9zdC8vZm9vL3NvbWV0aGluZy50eHQiLCBUcnVlKSwKKyAgICAgICAgICAgICgiZmlsZTovL2xvY2FsaG9zdC8vZm9vL3NvbWV0aGluZy50eHQiLCBGYWxzZSksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaC5maWxlX29wZW4ocmVxKQorICAgICAgICAgICAgIyBYWFhYIHJlbW92ZSBPU0Vycm9yIHdoZW4gYnVnIGZpeGVkCisgICAgICAgICAgICBleGNlcHQgKHVybGxpYjIuVVJMRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZnRwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoby5yZXEgaXMgcmVxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnR5cGUsICJmdHAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudHlwZSA9PSAiZnRwIiwgZnRwKQorCisgICAgZGVmIHRlc3RfaHR0cChzZWxmKToKKworICAgICAgICBoID0gdXJsbGliMi5BYnN0cmFjdEhUVFBIYW5kbGVyKCkKKyAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCisKKyAgICAgICAgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS8iCisgICAgICAgIGZvciBtZXRob2QsIGRhdGEgaW4gWygiR0VUIiwgTm9uZSksICgiUE9TVCIsICJibGFoIildOgorICAgICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwsIGRhdGEsIHsiRm9vIjogImJhciJ9KQorICAgICAgICAgICAgcmVxLnRpbWVvdXQgPSBOb25lCisgICAgICAgICAgICByZXEuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIlNwYW0iLCAiZWdncyIpCisgICAgICAgICAgICBodHRwID0gTW9ja0hUVFBDbGFzcygpCisgICAgICAgICAgICByID0gaC5kb19vcGVuKGh0dHAsIHJlcSkKKworICAgICAgICAgICAgIyByZXN1bHQgYXR0cmlidXRlcworICAgICAgICAgICAgci5yZWFkOyByLnJlYWRsaW5lICAjIHdyYXBwZWQgTW9ja0ZpbGUgbWV0aG9kcworICAgICAgICAgICAgci5pbmZvOyByLmdldHVybCAgIyBhZGRpbmZvdXJsIG1ldGhvZHMKKyAgICAgICAgICAgIHIuY29kZSwgci5tc2cgPT0gMjAwLCAiT0siICAjIGFkZGVkIGZyb20gTW9ja0hUVFBDbGFzcy5nZXRyZXBseSgpCisgICAgICAgICAgICBoZHJzID0gci5pbmZvKCkKKyAgICAgICAgICAgIGhkcnMuZ2V0OyBoZHJzLmhhc19rZXkgICMgci5pbmZvKCkgZ2l2ZXMgZGljdCBmcm9tIC5nZXRyZXBseSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0dXJsKCksIHVybCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwLmhvc3QsICJleGFtcGxlLmNvbSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHAubGV2ZWwsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHAubWV0aG9kLCBtZXRob2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHAuc2VsZWN0b3IsICIvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHR0cC5yZXFfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygiQ29ubmVjdGlvbiIsICJjbG9zZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJGb28iLCAiYmFyIiksICgiU3BhbSIsICJlZ2dzIildKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwLmRhdGEsIGRhdGEpCisKKyAgICAgICAgIyBjaGVjayBzb2NrZXQuZXJyb3IgY29udmVydGVkIHRvIFVSTEVycm9yCisgICAgICAgIGh0dHAucmFpc2Vfb25fZW5kaGVhZGVycyA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliMi5VUkxFcnJvciwgaC5kb19vcGVuLCBodHRwLCByZXEpCisKKyAgICAgICAgIyBjaGVjayBhZGRpbmcgb2Ygc3RhbmRhcmQgaGVhZGVycworICAgICAgICBvLmFkZGhlYWRlcnMgPSBbKCJTcGFtIiwgImVnZ3MiKV0KKyAgICAgICAgZm9yIGRhdGEgaW4gIiIsIE5vbmU6ICAjIFBPU1QsIEdFVAorICAgICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIsIGRhdGEpCisgICAgICAgICAgICByID0gTW9ja1Jlc3BvbnNlKDIwMCwgIk9LIiwge30sICIiKQorICAgICAgICAgICAgbmV3cmVxID0gaC5kb19yZXF1ZXN0XyhyZXEpCisgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6ICAjIEdFVAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgcmVxLnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtdHlwZSIsIHJlcS51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgICAgIGVsc2U6ICAjIFBPU1QKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC1sZW5ndGgiXSwgIjAiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LXR5cGUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCisgICAgICAgICAgICAjIFhYWCB0aGUgZGV0YWlscyBvZiBIb3N0IGNvdWxkIGJlIGJldHRlciB0ZXN0ZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sICJleGFtcGxlLmNvbSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS51bnJlZGlyZWN0ZWRfaGRyc1siU3BhbSJdLCAiZWdncyIpCisKKyAgICAgICAgICAgICMgZG9uJ3QgY2xvYmJlciBleGlzdGluZyBoZWFkZXJzCisgICAgICAgICAgICByZXEuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgImZvbyIpCisgICAgICAgICAgICByZXEuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJiYXIiKQorICAgICAgICAgICAgcmVxLmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJIb3N0IiwgImJheiIpCisgICAgICAgICAgICByZXEuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIlNwYW0iLCAiZm9vIikKKyAgICAgICAgICAgIG5ld3JlcSA9IGguZG9fcmVxdWVzdF8ocmVxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtbGVuZ3RoIl0sICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtdHlwZSJdLCAiYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sICJiYXoiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudW5yZWRpcmVjdGVkX2hkcnNbIlNwYW0iXSwgImZvbyIpCisKKyAgICBkZWYgdGVzdF9odHRwX2RvdWJsZXNsYXNoKHNlbGYpOgorICAgICAgICAjIENoZWNrcyB0aGF0IHRoZSBwcmVzZW5jZSBvZiBhbiB1bm5lY2Vzc2FyeSBkb3VibGUgc2xhc2ggaW4gYSB1cmwgZG9lc24ndCBicmVhayBhbnl0aGluZworICAgICAgICAjIFByZXZpb3VzbHksIGEgZG91YmxlIHNsYXNoIGRpcmVjdGx5IGFmdGVyIHRoZSBob3N0IGNvdWxkIGNhdXNlIGluY29ycmVjdCBwYXJzaW5nIG9mIHRoZSB1cmwKKyAgICAgICAgaCA9IHVybGxpYjIuQWJzdHJhY3RIVFRQSGFuZGxlcigpCisgICAgICAgIG8gPSBoLnBhcmVudCA9IE1vY2tPcGVuZXIoKQorCisgICAgICAgIGRhdGEgPSAiIgorICAgICAgICBkc191cmxzID0gWworICAgICAgICAgICAgImh0dHA6Ly9leGFtcGxlLmNvbS9mb28vYmFyL2Jhei5odG1sIiwKKyAgICAgICAgICAgICJodHRwOi8vZXhhbXBsZS5jb20vL2Zvby9iYXIvYmF6Lmh0bWwiLAorICAgICAgICAgICAgImh0dHA6Ly9leGFtcGxlLmNvbS9mb28vL2Jhci9iYXouaHRtbCIsCisgICAgICAgICAgICAiaHR0cDovL2V4YW1wbGUuY29tL2Zvby9iYXIvL2Jhei5odG1sIiwKKyAgICAgICAgXQorCisgICAgICAgIGZvciBkc191cmwgaW4gZHNfdXJsczoKKyAgICAgICAgICAgIGRzX3JlcSA9IFJlcXVlc3QoZHNfdXJsLCBkYXRhKQorCisgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgaG9zdCBpcyBkZXRlcm1pbmVkIGNvcnJlY3RseSBpZiB0aGVyZSBpcyBubyBwcm94eQorICAgICAgICAgICAgbnBfZHNfcmVxID0gaC5kb19yZXF1ZXN0Xyhkc19yZXEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5wX2RzX3JlcS51bnJlZGlyZWN0ZWRfaGRyc1siSG9zdCJdLCJleGFtcGxlLmNvbSIpCisKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciBob3N0IGlzIGRldGVybWluZWQgY29ycmVjdGx5IGlmIHRoZXJlIGlzIGEgcHJveHkKKyAgICAgICAgICAgIGRzX3JlcS5zZXRfcHJveHkoInNvbWVwcm94eTozMTI4IixOb25lKQorICAgICAgICAgICAgcF9kc19yZXEgPSBoLmRvX3JlcXVlc3RfKGRzX3JlcSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocF9kc19yZXEudW5yZWRpcmVjdGVkX2hkcnNbIkhvc3QiXSwiZXhhbXBsZS5jb20iKQorCisgICAgZGVmIHRlc3RfZml4cGF0aF9pbl93ZWlyZHVybHMoc2VsZik6CisgICAgICAgICMgSXNzdWU0NDkzOiB1cmxsaWIyIHRvIHN1cHBseSAnLycgd2hlbiB0byB1cmxzIHdoZXJlIHBhdGggZG9lcyBub3QKKyAgICAgICAgIyBzdGFydCB3aXRoJy8nCisKKyAgICAgICAgaCA9IHVybGxpYjIuQWJzdHJhY3RIVFRQSGFuZGxlcigpCisgICAgICAgIG8gPSBoLnBhcmVudCA9IE1vY2tPcGVuZXIoKQorCisgICAgICAgIHdlaXJkX3VybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmc/Z2V0c3BhbScKKyAgICAgICAgcmVxID0gUmVxdWVzdCh3ZWlyZF91cmwpCisgICAgICAgIG5ld3JlcSA9IGguZG9fcmVxdWVzdF8ocmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5nZXRfaG9zdCgpLCd3d3cucHl0aG9uLm9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3cmVxLmdldF9zZWxlY3RvcigpLCcvP2dldHNwYW0nKQorCisgICAgICAgIHVybF93aXRob3V0X3BhdGggPSAnaHR0cDovL3d3dy5weXRob24ub3JnJworICAgICAgICByZXEgPSBSZXF1ZXN0KHVybF93aXRob3V0X3BhdGgpCisgICAgICAgIG5ld3JlcSA9IGguZG9fcmVxdWVzdF8ocmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5nZXRfaG9zdCgpLCd3d3cucHl0aG9uLm9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3cmVxLmdldF9zZWxlY3RvcigpLCcnKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBoID0gdXJsbGliMi5IVFRQRXJyb3JQcm9jZXNzb3IoKQorICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKKworICAgICAgICB1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tLyIKKyAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCisgICAgICAgICMgYWxsIDJ4eCBhcmUgcGFzc2VkIHRocm91Z2gKKyAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDAsICJPSyIsIHt9LCAiIiwgdXJsKQorICAgICAgICBuZXdyID0gaC5odHRwX3Jlc3BvbnNlKHJlcSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgaXMgbmV3cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG8sICJwcm90byIpKSAgIyBvLmVycm9yIG5vdCBjYWxsZWQKKyAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDIsICJBY2NlcHRlZCIsIHt9LCAiIiwgdXJsKQorICAgICAgICBuZXdyID0gaC5odHRwX3Jlc3BvbnNlKHJlcSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgaXMgbmV3cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG8sICJwcm90byIpKSAgIyBvLmVycm9yIG5vdCBjYWxsZWQKKyAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDYsICJQYXJ0aWFsIGNvbnRlbnQiLCB7fSwgIiIsIHVybCkKKyAgICAgICAgbmV3ciA9IGguaHR0cF9yZXNwb25zZShyZXEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyIGlzIG5ld3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihvLCAicHJvdG8iKSkgICMgby5lcnJvciBub3QgY2FsbGVkCisgICAgICAgICMgYW55dGhpbmcgZWxzZSBjYWxscyBvLmVycm9yIChhbmQgTW9ja09wZW5lciByZXR1cm5zIE5vbmUsIGhlcmUpCisgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoNTAyLCAiQmFkIGdhdGV3YXkiLCB7fSwgIiIsIHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguaHR0cF9yZXNwb25zZShyZXEsIHIpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5wcm90bywgImh0dHAiKSAgIyBvLmVycm9yIGNhbGxlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8uYXJncywgKHJlcSwgciwgNTAyLCAiQmFkIGdhdGV3YXkiLCB7fSkpCisKKyAgICBkZWYgdGVzdF9jb29raWVzKHNlbGYpOgorICAgICAgICBjaiA9IE1vY2tDb29raWVKYXIoKQorICAgICAgICBoID0gdXJsbGliMi5IVFRQQ29va2llUHJvY2Vzc29yKGNqKQorICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vIikKKyAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDAsICJPSyIsIHt9LCAiIikKKyAgICAgICAgbmV3cmVxID0gaC5odHRwX3JlcXVlc3QocmVxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2ouYWNoX3JlcSBpcyByZXEgaXMgbmV3cmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfb3JpZ2luX3JlcV9ob3N0KCksICJleGFtcGxlLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcmVxLmlzX3VudmVyaWZpYWJsZSgpKQorICAgICAgICBuZXdyID0gaC5odHRwX3Jlc3BvbnNlKHJlcSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNqLmVjX3JlcSBpcyByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjai5lY19yIGlzIHIgaXMgbmV3cikKKworICAgIGRlZiB0ZXN0X3JlZGlyZWN0KHNlbGYpOgorICAgICAgICBmcm9tX3VybCA9ICJodHRwOi8vZXhhbXBsZS5jb20vYS5odG1sIgorICAgICAgICB0b191cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tL2IuaHRtbCIKKyAgICAgICAgaCA9IHVybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlcigpCisgICAgICAgIG8gPSBoLnBhcmVudCA9IE1vY2tPcGVuZXIoKQorCisgICAgICAgICMgb3JkaW5hcnkgcmVkaXJlY3QgYmVoYXZpb3VyCisgICAgICAgIGZvciBjb2RlIGluIDMwMSwgMzAyLCAzMDMsIDMwNzoKKyAgICAgICAgICAgIGZvciBkYXRhIGluIE5vbmUsICJibGFoXG5ibGFoXG4iOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoaCwgImh0dHBfZXJyb3JfJXMiICUgY29kZSkKKyAgICAgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KGZyb21fdXJsLCBkYXRhKQorICAgICAgICAgICAgICAgIHJlcS5hZGRfaGVhZGVyKCJOb25zZW5zZSIsICJ2aWtpbmc9d2l0aGhvbGQiKQorICAgICAgICAgICAgICAgIHJlcS50aW1lb3V0ID0gc29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUCisgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmVxLmFkZF9oZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgc3RyKGxlbihkYXRhKSkpCisgICAgICAgICAgICAgICAgcmVxLmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJTcGFtIiwgInNwYW0iKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kKHJlcSwgTW9ja0ZpbGUoKSwgY29kZSwgIkJsYWgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9ja0hlYWRlcnMoeyJsb2NhdGlvbiI6IHRvX3VybH0pKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyAzMDcgaW4gcmVzcG9uc2UgdG8gUE9TVCByZXF1aXJlcyB1c2VyIE9LCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2RlID09IDMwNyBhbmQgZGF0YSBpcyBub3QgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8ucmVxLmdldF9mdWxsX3VybCgpLCB0b191cmwpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8ucmVxLmdldF9tZXRob2QoKSwgIkdFVCIpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG8ucmVxLmhhc19kYXRhKCkpCisKKyAgICAgICAgICAgICAgICAjIG5vdyBpdCdzIGEgR0VULCB0aGVyZSBzaG91bGQgbm90IGJlIGhlYWRlcnMgcmVnYXJkaW5nIGNvbnRlbnQKKyAgICAgICAgICAgICAgICAjIChwb3NzaWJseSBkcmFnZ2VkIGZyb20gYmVmb3JlIGJlaW5nIGEgUE9TVCkKKyAgICAgICAgICAgICAgICBoZWFkZXJzID0gW3gubG93ZXIoKSBmb3IgeCBpbiBvLnJlcS5oZWFkZXJzXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oImNvbnRlbnQtbGVuZ3RoIiwgaGVhZGVycykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJjb250ZW50LXR5cGUiLCBoZWFkZXJzKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnJlcS5oZWFkZXJzWyJOb25zZW5zZSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZpa2luZz13aXRoaG9sZCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiU3BhbSIsIG8ucmVxLmhlYWRlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiU3BhbSIsIG8ucmVxLnVucmVkaXJlY3RlZF9oZHJzKQorCisgICAgICAgICMgbG9vcCBkZXRlY3Rpb24KKyAgICAgICAgcmVxID0gUmVxdWVzdChmcm9tX3VybCkKKyAgICAgICAgcmVxLnRpbWVvdXQgPSBzb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQKKyAgICAgICAgZGVmIHJlZGlyZWN0KGgsIHJlcSwgdXJsPXRvX3VybCk6CisgICAgICAgICAgICBoLmh0dHBfZXJyb3JfMzAyKHJlcSwgTW9ja0ZpbGUoKSwgMzAyLCAiQmxhaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vY2tIZWFkZXJzKHsibG9jYXRpb24iOiB1cmx9KSkKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlICpvcmlnaW5hbCogcmVxdWVzdCBzaGFyZXMgdGhlIHNhbWUgcmVjb3JkIG9mCisgICAgICAgICMgcmVkaXJlY3Rpb25zIHdpdGggdGhlIHN1Yi1yZXF1ZXN0cyBjYXVzZWQgYnkgdGhlIHJlZGlyZWN0aW9ucy4KKworICAgICAgICAjIGRldGVjdCBpbmZpbml0ZSBsb29wIHJlZGlyZWN0IG9mIGEgVVJMIHRvIGl0c2VsZgorICAgICAgICByZXEgPSBSZXF1ZXN0KGZyb21fdXJsLCBvcmlnaW5fcmVxX2hvc3Q9ImV4YW1wbGUuY29tIikKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIHJlcS50aW1lb3V0ID0gc29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgcmVkaXJlY3QoaCwgcmVxLCAiaHR0cDovL2V4YW1wbGUuY29tLyIpCisgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yOgorICAgICAgICAgICAgIyBkb24ndCBzdG9wIHVudGlsIG1heF9yZXBlYXRzLCBiZWNhdXNlIGNvb2tpZXMgbWF5IGludHJvZHVjZSBzdGF0ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyLm1heF9yZXBlYXRzKQorCisgICAgICAgICMgZGV0ZWN0IGVuZGxlc3Mgbm9uLXJlcGVhdGluZyBjaGFpbiBvZiByZWRpcmVjdHMKKyAgICAgICAgcmVxID0gUmVxdWVzdChmcm9tX3VybCwgb3JpZ2luX3JlcV9ob3N0PSJleGFtcGxlLmNvbSIpCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICByZXEudGltZW91dCA9IHNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHJlZGlyZWN0KGgsIHJlcSwgImh0dHA6Ly9leGFtcGxlLmNvbS8lZCIgJSBjb3VudCkKKyAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIubWF4X3JlZGlyZWN0aW9ucykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfcmVkaXJlY3Qoc2VsZik6CisgICAgICAgIGZyb21fdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS9hLmh0bWwiCisgICAgICAgIHZhbGlkX3NjaGVtZXMgPSBbJ2h0dHAnLCAnaHR0cHMnLCAnZnRwJ10KKyAgICAgICAgaW52YWxpZF9zY2hlbWVzID0gWydmaWxlJywgJ2ltYXAnLCAnbGRhcCddCisgICAgICAgIHNjaGVtZWxlc3NfdXJsID0gImV4YW1wbGUuY29tL2IuaHRtbCIKKyAgICAgICAgaCA9IHVybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlcigpCisgICAgICAgIG8gPSBoLnBhcmVudCA9IE1vY2tPcGVuZXIoKQorICAgICAgICByZXEgPSBSZXF1ZXN0KGZyb21fdXJsKQorICAgICAgICByZXEudGltZW91dCA9IHNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVAorCisgICAgICAgIGZvciBzY2hlbWUgaW4gaW52YWxpZF9zY2hlbWVzOgorICAgICAgICAgICAgaW52YWxpZF91cmwgPSBzY2hlbWUgKyAnOi8vJyArIHNjaGVtZWxlc3NfdXJsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIyLkhUVFBFcnJvciwgaC5odHRwX2Vycm9yXzMwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcSwgTW9ja0ZpbGUoKSwgMzAyLCAiU2VjdXJpdHkgTG9vcGhvbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9ja0hlYWRlcnMoeyJsb2NhdGlvbiI6IGludmFsaWRfdXJsfSkpCisKKyAgICAgICAgZm9yIHNjaGVtZSBpbiB2YWxpZF9zY2hlbWVzOgorICAgICAgICAgICAgdmFsaWRfdXJsID0gc2NoZW1lICsgJzovLycgKyBzY2hlbWVsZXNzX3VybAorICAgICAgICAgICAgaC5odHRwX2Vycm9yXzMwMihyZXEsIE1vY2tGaWxlKCksIDMwMiwgIlRoYXQncyBmaW5lIiwKKyAgICAgICAgICAgICAgICBNb2NrSGVhZGVycyh7ImxvY2F0aW9uIjogdmFsaWRfdXJsfSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8ucmVxLmdldF9mdWxsX3VybCgpLCB2YWxpZF91cmwpCisKKyAgICBkZWYgdGVzdF9jb29raWVfcmVkaXJlY3Qoc2VsZik6CisgICAgICAgICMgY29va2llcyBzaG91bGRuJ3QgbGVhayBpbnRvIHJlZGlyZWN0ZWQgcmVxdWVzdHMKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphcgorCisgICAgICAgIGZyb20gdGVzdC50ZXN0X2Nvb2tpZWxpYiBpbXBvcnQgaW50ZXJhY3RfbmV0c2NhcGUKKworICAgICAgICBjaiA9IENvb2tpZUphcigpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGNqLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iLCAic3BhbT1lZ2dzIikKKyAgICAgICAgaGggPSBNb2NrSFRUUEhhbmRsZXIoMzAyLCAiTG9jYXRpb246IGh0dHA6Ly93d3cuY3JhY2tlci5jb20vXHJcblxyXG4iKQorICAgICAgICBoZGVoID0gdXJsbGliMi5IVFRQRGVmYXVsdEVycm9ySGFuZGxlcigpCisgICAgICAgIGhyaCA9IHVybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlcigpCisgICAgICAgIGNwID0gdXJsbGliMi5IVFRQQ29va2llUHJvY2Vzc29yKGNqKQorICAgICAgICBvID0gYnVpbGRfdGVzdF9vcGVuZXIoaGgsIGhkZWgsIGhyaCwgY3ApCisgICAgICAgIG8ub3BlbigiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhoLnJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSkKKworICAgIGRlZiB0ZXN0X3JlZGlyZWN0X2ZyYWdtZW50KHNlbGYpOgorICAgICAgICByZWRpcmVjdGVkX3VybCA9ICdodHRwOi8vd3d3LmV4YW1wbGUuY29tL2luZGV4Lmh0bWwjT0tcclxuXHJcbicKKyAgICAgICAgaGggPSBNb2NrSFRUUEhhbmRsZXIoMzAyLCAnTG9jYXRpb246ICcgKyByZWRpcmVjdGVkX3VybCkKKyAgICAgICAgaGRlaCA9IHVybGxpYjIuSFRUUERlZmF1bHRFcnJvckhhbmRsZXIoKQorICAgICAgICBocmggPSB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIoKQorICAgICAgICBvID0gYnVpbGRfdGVzdF9vcGVuZXIoaGgsIGhkZWgsIGhyaCkKKyAgICAgICAgZnAgPSBvLm9wZW4oJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmdldHVybCgpLCByZWRpcmVjdGVkX3VybC5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfcHJveHkoc2VsZik6CisgICAgICAgIG8gPSBPcGVuZXJEaXJlY3RvcigpCisgICAgICAgIHBoID0gdXJsbGliMi5Qcm94eUhhbmRsZXIoZGljdChodHRwPSJwcm94eS5leGFtcGxlLmNvbTozMTI4IikpCisgICAgICAgIG8uYWRkX2hhbmRsZXIocGgpCisgICAgICAgIG1ldGhfc3BlYyA9IFsKKyAgICAgICAgICAgIFsoImh0dHBfb3BlbiIsICJyZXR1cm4gcmVzcG9uc2UiKV0KKyAgICAgICAgICAgIF0KKyAgICAgICAgaGFuZGxlcnMgPSBhZGRfb3JkZXJlZF9tb2NrX2hhbmRsZXJzKG8sIG1ldGhfc3BlYykKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vYWNtZS5leGFtcGxlLmNvbS8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaG9zdCgpLCAiYWNtZS5leGFtcGxlLmNvbSIpCisgICAgICAgIHIgPSBvLm9wZW4ocmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaG9zdCgpLCAicHJveHkuZXhhbXBsZS5jb206MzEyOCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGhhbmRsZXJzWzBdLCAiaHR0cF9vcGVuIildLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt0dXBbMDoyXSBmb3IgdHVwIGluIG8uY2FsbHNdKQorCisgICAgZGVmIHRlc3RfcHJveHlfbm9fcHJveHkoc2VsZik6CisgICAgICAgIG9zLmVudmlyb25bJ25vX3Byb3h5J10gPSAncHl0aG9uLm9yZycKKyAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgcGggPSB1cmxsaWIyLlByb3h5SGFuZGxlcihkaWN0KGh0dHA9InByb3h5LmV4YW1wbGUuY29tIikpCisgICAgICAgIG8uYWRkX2hhbmRsZXIocGgpCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cucGVybC5vcmcvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgInd3dy5wZXJsLm9yZyIpCisgICAgICAgIHIgPSBvLm9wZW4ocmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaG9zdCgpLCAicHJveHkuZXhhbXBsZS5jb20iKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaG9zdCgpLCAid3d3LnB5dGhvbi5vcmciKQorICAgICAgICByID0gby5vcGVuKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgInd3dy5weXRob24ub3JnIikKKyAgICAgICAgZGVsIG9zLmVudmlyb25bJ25vX3Byb3h5J10KKworCisgICAgZGVmIHRlc3RfcHJveHlfaHR0cHMoc2VsZik6CisgICAgICAgIG8gPSBPcGVuZXJEaXJlY3RvcigpCisgICAgICAgIHBoID0gdXJsbGliMi5Qcm94eUhhbmRsZXIoZGljdChodHRwcz0ncHJveHkuZXhhbXBsZS5jb206MzEyOCcpKQorICAgICAgICBvLmFkZF9oYW5kbGVyKHBoKQorICAgICAgICBtZXRoX3NwZWMgPSBbCisgICAgICAgICAgICBbKCJodHRwc19vcGVuIiwicmV0dXJuIHJlc3BvbnNlIildCisgICAgICAgIF0KKyAgICAgICAgaGFuZGxlcnMgPSBhZGRfb3JkZXJlZF9tb2NrX2hhbmRsZXJzKG8sIG1ldGhfc3BlYykKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgInd3dy5leGFtcGxlLmNvbSIpCisgICAgICAgIHIgPSBvLm9wZW4ocmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaG9zdCgpLCAicHJveHkuZXhhbXBsZS5jb206MzEyOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhoYW5kbGVyc1swXSwgImh0dHBzX29wZW4iKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW3R1cFswOjJdIGZvciB0dXAgaW4gby5jYWxsc10pCisKKyAgICBkZWYgdGVzdF9wcm94eV9odHRwc19wcm94eV9hdXRob3JpemF0aW9uKHNlbGYpOgorICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBwaCA9IHVybGxpYjIuUHJveHlIYW5kbGVyKGRpY3QoaHR0cHM9J3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKSkKKyAgICAgICAgby5hZGRfaGFuZGxlcihwaCkKKyAgICAgICAgaHR0cHNfaGFuZGxlciA9IE1vY2tIVFRQU0hhbmRsZXIoKQorICAgICAgICBvLmFkZF9oYW5kbGVyKGh0dHBzX2hhbmRsZXIpCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHBzOi8vd3d3LmV4YW1wbGUuY29tLyIpCisgICAgICAgIHJlcS5hZGRfaGVhZGVyKCJQcm94eS1BdXRob3JpemF0aW9uIiwiRm9vQmFyIikKKyAgICAgICAgcmVxLmFkZF9oZWFkZXIoIlVzZXItQWdlbnQiLCJHcmFpbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9ob3N0KCksICJ3d3cuZXhhbXBsZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXEuX3R1bm5lbF9ob3N0KQorICAgICAgICByID0gby5vcGVuKHJlcSkKKyAgICAgICAgIyBWZXJpZnkgUHJveHktQXV0aG9yaXphdGlvbiBnZXRzIHR1bm5lbGVkIHRvIHJlcXVlc3QuCisgICAgICAgICMgaHR0cHNjb25uIHJlcV9oZWFkZXJzIGRvIG5vdCBoYXZlIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGhlYWRlciBidXQKKyAgICAgICAgIyB0aGUgcmVxIHdpbGwgaGF2ZS4KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoIlByb3h5LUF1dGhvcml6YXRpb24iLCJGb29CYXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodHRwc19oYW5kbGVyLmh0dHBjb25uLnJlcV9oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEluKCgiVXNlci1BZ2VudCIsIkdyYWlsIiksCisgICAgICAgICAgICAgICAgICAgICAgaHR0cHNfaGFuZGxlci5odHRwY29ubi5yZXFfaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVxLl90dW5uZWxfaG9zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgInByb3h5LmV4YW1wbGUuY29tOjMxMjgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJQcm94eS1hdXRob3JpemF0aW9uIiksIkZvb0JhciIpCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdXRoKHNlbGYsIHF1b3RlX2NoYXI9JyInKToKKyAgICAgICAgb3BlbmVyID0gT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBwYXNzd29yZF9tYW5hZ2VyID0gTW9ja1Bhc3N3b3JkTWFuYWdlcigpCisgICAgICAgIGF1dGhfaGFuZGxlciA9IHVybGxpYjIuSFRUUEJhc2ljQXV0aEhhbmRsZXIocGFzc3dvcmRfbWFuYWdlcikKKyAgICAgICAgcmVhbG0gPSAiQUNNRSBXaWRnZXQgU3RvcmUiCisgICAgICAgIGh0dHBfaGFuZGxlciA9IE1vY2tIVFRQSGFuZGxlcigKKyAgICAgICAgICAgIDQwMSwgJ1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSVzJXMlc1xyXG5cclxuJyAlCisgICAgICAgICAgICAocXVvdGVfY2hhciwgcmVhbG0sIHF1b3RlX2NoYXIpICkKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGF1dGhfaGFuZGxlcikKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGh0dHBfaGFuZGxlcikKKyAgICAgICAgc2VsZi5fdGVzdF9iYXNpY19hdXRoKG9wZW5lciwgYXV0aF9oYW5kbGVyLCAiQXV0aG9yaXphdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgaHR0cF9oYW5kbGVyLCBwYXNzd29yZF9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9hY21lLmV4YW1wbGUuY29tL3Byb3RlY3RlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2FjbWUuZXhhbXBsZS5jb20vcHJvdGVjdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdXRoX3dpdGhfc2luZ2xlX3F1b3RlZF9yZWFsbShzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2Jhc2ljX2F1dGgocXVvdGVfY2hhcj0iJyIpCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdXRoX3dpdGhfdW5xdW90ZWRfcmVhbG0oc2VsZik6CisgICAgICAgIG9wZW5lciA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgcGFzc3dvcmRfbWFuYWdlciA9IE1vY2tQYXNzd29yZE1hbmFnZXIoKQorICAgICAgICBhdXRoX2hhbmRsZXIgPSB1cmxsaWIyLkhUVFBCYXNpY0F1dGhIYW5kbGVyKHBhc3N3b3JkX21hbmFnZXIpCisgICAgICAgIHJlYWxtID0gIkFDTUUgV2lkZ2V0IFN0b3JlIgorICAgICAgICBodHRwX2hhbmRsZXIgPSBNb2NrSFRUUEhhbmRsZXIoCisgICAgICAgICAgICA0MDEsICdXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0lc1xyXG5cclxuJyAlIHJlYWxtKQorICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoYXV0aF9oYW5kbGVyKQorICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoaHR0cF9oYW5kbGVyKQorICAgICAgICBtc2cgPSAiQmFzaWMgQXV0aCBSZWFsbSB3YXMgdW5xdW90ZWQiCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKChtc2csIFVzZXJXYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X2Jhc2ljX2F1dGgob3BlbmVyLCBhdXRoX2hhbmRsZXIsICJBdXRob3JpemF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgaHR0cF9oYW5kbGVyLCBwYXNzd29yZF9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vYWNtZS5leGFtcGxlLmNvbS9wcm90ZWN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vYWNtZS5leGFtcGxlLmNvbS9wcm90ZWN0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKworICAgIGRlZiB0ZXN0X3Byb3h5X2Jhc2ljX2F1dGgoc2VsZik6CisgICAgICAgIG9wZW5lciA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgcGggPSB1cmxsaWIyLlByb3h5SGFuZGxlcihkaWN0KGh0dHA9InByb3h5LmV4YW1wbGUuY29tOjMxMjgiKSkKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKHBoKQorICAgICAgICBwYXNzd29yZF9tYW5hZ2VyID0gTW9ja1Bhc3N3b3JkTWFuYWdlcigpCisgICAgICAgIGF1dGhfaGFuZGxlciA9IHVybGxpYjIuUHJveHlCYXNpY0F1dGhIYW5kbGVyKHBhc3N3b3JkX21hbmFnZXIpCisgICAgICAgIHJlYWxtID0gIkFDTUUgTmV0d29ya3MiCisgICAgICAgIGh0dHBfaGFuZGxlciA9IE1vY2tIVFRQSGFuZGxlcigKKyAgICAgICAgICAgIDQwNywgJ1Byb3h5LUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09IiVzIlxyXG5cclxuJyAlIHJlYWxtKQorICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoYXV0aF9oYW5kbGVyKQorICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoaHR0cF9oYW5kbGVyKQorICAgICAgICBzZWxmLl90ZXN0X2Jhc2ljX2F1dGgob3BlbmVyLCBhdXRoX2hhbmRsZXIsICJQcm94eS1hdXRob3JpemF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBodHRwX2hhbmRsZXIsIHBhc3N3b3JkX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2FjbWUuZXhhbXBsZS5jb206MzEyOC9wcm90ZWN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3h5LmV4YW1wbGUuY29tOjMxMjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYmFzaWNfYW5kX2RpZ2VzdF9hdXRoX2hhbmRsZXJzKHNlbGYpOgorICAgICAgICAjIEhUVFBEaWdlc3RBdXRoSGFuZGxlciByYWlzZWQgYW4gZXhjZXB0aW9uIGlmIGl0IGNvdWxkbid0IGhhbmRsZSBhIDQwKgorICAgICAgICAjIHJlc3BvbnNlIChodHRwOi8vcHl0aG9uLm9yZy9zZi8xNDc5MzAyKSwgd2hlcmUgaXQgc2hvdWxkIGluc3RlYWQKKyAgICAgICAgIyByZXR1cm4gTm9uZSB0byBhbGxvdyBhbm90aGVyIGhhbmRsZXIgKGVzcGVjaWFsbHkKKyAgICAgICAgIyBIVFRQQmFzaWNBdXRoSGFuZGxlcikgdG8gaGFuZGxlIHRoZSByZXNwb25zZS4KKworICAgICAgICAjIEFsc28gKGh0dHA6Ly9weXRob24ub3JnL3NmLzE0Nzk3MDI3LCBSRkMgMjYxNyBzZWN0aW9uIDEuMiksIHdlIG11c3QKKyAgICAgICAgIyB0cnkgZGlnZXN0IGZpcnN0IChzaW5jZSBpdCdzIHRoZSBzdHJvbmdlc3QgYXV0aCBzY2hlbWUpLCBzbyB3ZSByZWNvcmQKKyAgICAgICAgIyBvcmRlciBvZiBjYWxscyBoZXJlIHRvIGNoZWNrIGRpZ2VzdCBjb21lcyBmaXJzdDoKKyAgICAgICAgY2xhc3MgUmVjb3JkaW5nT3BlbmVyRGlyZWN0b3IoT3BlbmVyRGlyZWN0b3IpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIE9wZW5lckRpcmVjdG9yLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5yZWNvcmRlZCA9IFtdCisgICAgICAgICAgICBkZWYgcmVjb3JkKHNlbGYsIGluZm8pOgorICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkZWQuYXBwZW5kKGluZm8pCisgICAgICAgIGNsYXNzIFRlc3REaWdlc3RBdXRoSGFuZGxlcih1cmxsaWIyLkhUVFBEaWdlc3RBdXRoSGFuZGxlcik6CisgICAgICAgICAgICBkZWYgaHR0cF9lcnJvcl80MDEoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQucmVjb3JkKCJkaWdlc3QiKQorICAgICAgICAgICAgICAgIHVybGxpYjIuSFRUUERpZ2VzdEF1dGhIYW5kbGVyLmh0dHBfZXJyb3JfNDAxKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MsICoqa3dkcykKKyAgICAgICAgY2xhc3MgVGVzdEJhc2ljQXV0aEhhbmRsZXIodXJsbGliMi5IVFRQQmFzaWNBdXRoSGFuZGxlcik6CisgICAgICAgICAgICBkZWYgaHR0cF9lcnJvcl80MDEoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQucmVjb3JkKCJiYXNpYyIpCisgICAgICAgICAgICAgICAgdXJsbGliMi5IVFRQQmFzaWNBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwMShzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MsICoqa3dkcykKKworICAgICAgICBvcGVuZXIgPSBSZWNvcmRpbmdPcGVuZXJEaXJlY3RvcigpCisgICAgICAgIHBhc3N3b3JkX21hbmFnZXIgPSBNb2NrUGFzc3dvcmRNYW5hZ2VyKCkKKyAgICAgICAgZGlnZXN0X2hhbmRsZXIgPSBUZXN0RGlnZXN0QXV0aEhhbmRsZXIocGFzc3dvcmRfbWFuYWdlcikKKyAgICAgICAgYmFzaWNfaGFuZGxlciA9IFRlc3RCYXNpY0F1dGhIYW5kbGVyKHBhc3N3b3JkX21hbmFnZXIpCisgICAgICAgIHJlYWxtID0gIkFDTUUgTmV0d29ya3MiCisgICAgICAgIGh0dHBfaGFuZGxlciA9IE1vY2tIVFRQSGFuZGxlcigKKyAgICAgICAgICAgIDQwMSwgJ1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSIlcyJcclxuXHJcbicgJSByZWFsbSkKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGJhc2ljX2hhbmRsZXIpCisgICAgICAgIG9wZW5lci5hZGRfaGFuZGxlcihkaWdlc3RfaGFuZGxlcikKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGh0dHBfaGFuZGxlcikKKworICAgICAgICAjIGNoZWNrIGJhc2ljIGF1dGggaXNuJ3QgYmxvY2tlZCBieSBkaWdlc3QgaGFuZGxlciBmYWlsaW5nCisgICAgICAgIHNlbGYuX3Rlc3RfYmFzaWNfYXV0aChvcGVuZXIsIGJhc2ljX2hhbmRsZXIsICJBdXRob3JpemF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBodHRwX2hhbmRsZXIsIHBhc3N3b3JkX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2FjbWUuZXhhbXBsZS5jb20vcHJvdGVjdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vYWNtZS5leGFtcGxlLmNvbS9wcm90ZWN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAjIGNoZWNrIGRpZ2VzdCB3YXMgdHJpZWQgYmVmb3JlIGJhc2ljICh0d2ljZSwgYmVjYXVzZQorICAgICAgICAjIF90ZXN0X2Jhc2ljX2F1dGggY2FsbGVkIC5vcGVuKCkgdHdpY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbmVyLnJlY29yZGVkLCBbImRpZ2VzdCIsICJiYXNpYyJdKjIpCisKKyAgICBkZWYgX3Rlc3RfYmFzaWNfYXV0aChzZWxmLCBvcGVuZXIsIGF1dGhfaGFuZGxlciwgYXV0aF9oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIGh0dHBfaGFuZGxlciwgcGFzc3dvcmRfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X3VybCwgcHJvdGVjdGVkX3VybCk6CisgICAgICAgIGltcG9ydCBiYXNlNjQKKyAgICAgICAgdXNlciwgcGFzc3dvcmQgPSAid2lsZSIsICJjb3lvdGUiCisKKyAgICAgICAgIyAuYWRkX3Bhc3N3b3JkKCkgZmVkIHRocm91Z2ggdG8gcGFzc3dvcmQgbWFuYWdlcgorICAgICAgICBhdXRoX2hhbmRsZXIuYWRkX3Bhc3N3b3JkKHJlYWxtLCByZXF1ZXN0X3VybCwgdXNlciwgcGFzc3dvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbG0sIHBhc3N3b3JkX21hbmFnZXIucmVhbG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF91cmwsIHBhc3N3b3JkX21hbmFnZXIudXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVzZXIsIHBhc3N3b3JkX21hbmFnZXIudXNlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzd29yZCwgcGFzc3dvcmRfbWFuYWdlci5wYXNzd29yZCkKKworICAgICAgICByID0gb3BlbmVyLm9wZW4ocmVxdWVzdF91cmwpCisKKyAgICAgICAgIyBzaG91bGQgaGF2ZSBhc2tlZCB0aGUgcGFzc3dvcmQgbWFuYWdlciBmb3IgdGhlIHVzZXJuYW1lL3Bhc3N3b3JkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc3dvcmRfbWFuYWdlci50YXJnZXRfcmVhbG0sIHJlYWxtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3N3b3JkX21hbmFnZXIudGFyZ2V0X3VybCwgcHJvdGVjdGVkX3VybCkKKworICAgICAgICAjIGV4cGVjdCBvbmUgcmVxdWVzdCB3aXRob3V0IGF1dGhvcml6YXRpb24sIHRoZW4gb25lIHdpdGgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaHR0cF9oYW5kbGVyLnJlcXVlc3RzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShodHRwX2hhbmRsZXIucmVxdWVzdHNbMF0uaGFzX2hlYWRlcihhdXRoX2hlYWRlcikpCisgICAgICAgIHVzZXJwYXNzID0gJyVzOiVzJyAlICh1c2VyLCBwYXNzd29yZCkKKyAgICAgICAgYXV0aF9oZHJfdmFsdWUgPSAnQmFzaWMgJytiYXNlNjQuZW5jb2Rlc3RyaW5nKHVzZXJwYXNzKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHR0cF9oYW5kbGVyLnJlcXVlc3RzWzFdLmdldF9oZWFkZXIoYXV0aF9oZWFkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfaGRyX3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHBfaGFuZGxlci5yZXF1ZXN0c1sxXS51bnJlZGlyZWN0ZWRfaGRyc1thdXRoX2hlYWRlcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9oZHJfdmFsdWUpCisgICAgICAgICMgaWYgdGhlIHBhc3N3b3JkIG1hbmFnZXIgY2FuJ3QgZmluZCBhIHBhc3N3b3JkLCB0aGUgaGFuZGxlciB3b24ndAorICAgICAgICAjIGhhbmRsZSB0aGUgSFRUUCBhdXRoIGVycm9yCisgICAgICAgIHBhc3N3b3JkX21hbmFnZXIudXNlciA9IHBhc3N3b3JkX21hbmFnZXIucGFzc3dvcmQgPSBOb25lCisgICAgICAgIGh0dHBfaGFuZGxlci5yZXNldCgpCisgICAgICAgIHIgPSBvcGVuZXIub3BlbihyZXF1ZXN0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaHR0cF9oYW5kbGVyLnJlcXVlc3RzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShodHRwX2hhbmRsZXIucmVxdWVzdHNbMF0uaGFzX2hlYWRlcihhdXRoX2hlYWRlcikpCisKK2NsYXNzIE1pc2NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9idWlsZF9vcGVuZXIoc2VsZik6CisgICAgICAgIGNsYXNzIE15SFRUUEhhbmRsZXIodXJsbGliMi5IVFRQSGFuZGxlcik6IHBhc3MKKyAgICAgICAgY2xhc3MgRm9vSGFuZGxlcih1cmxsaWIyLkJhc2VIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBmb29fb3BlbihzZWxmKTogcGFzcworICAgICAgICBjbGFzcyBCYXJIYW5kbGVyKHVybGxpYjIuQmFzZUhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIGJhcl9vcGVuKHNlbGYpOiBwYXNzCisKKyAgICAgICAgYnVpbGRfb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIKKworICAgICAgICBvID0gYnVpbGRfb3BlbmVyKEZvb0hhbmRsZXIsIEJhckhhbmRsZXIpCisgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIEZvb0hhbmRsZXIpCisgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIEJhckhhbmRsZXIpCisKKyAgICAgICAgIyBjYW4gdGFrZSBhIG1peCBvZiBjbGFzc2VzIGFuZCBpbnN0YW5jZXMKKyAgICAgICAgbyA9IGJ1aWxkX29wZW5lcihGb29IYW5kbGVyLCBCYXJIYW5kbGVyKCkpCisgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIEZvb0hhbmRsZXIpCisgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIEJhckhhbmRsZXIpCisKKyAgICAgICAgIyBzdWJjbGFzc2VzIG9mIGRlZmF1bHQgaGFuZGxlcnMgb3ZlcnJpZGUgZGVmYXVsdCBoYW5kbGVycworICAgICAgICBvID0gYnVpbGRfb3BlbmVyKE15SFRUUEhhbmRsZXIpCisgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15SFRUUEhhbmRsZXIpCisKKyAgICAgICAgIyBhIHBhcnRpY3VsYXIgY2FzZSBvZiBvdmVycmlkaW5nOiBkZWZhdWx0IGhhbmRsZXJzIGNhbiBiZSBwYXNzZWQKKyAgICAgICAgIyBpbiBleHBsaWNpdGx5CisgICAgICAgIG8gPSBidWlsZF9vcGVuZXIoKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCB1cmxsaWIyLkhUVFBIYW5kbGVyKQorICAgICAgICBvID0gYnVpbGRfb3BlbmVyKHVybGxpYjIuSFRUUEhhbmRsZXIpCisgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIHVybGxpYjIuSFRUUEhhbmRsZXIpCisgICAgICAgIG8gPSBidWlsZF9vcGVuZXIodXJsbGliMi5IVFRQSGFuZGxlcigpKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCB1cmxsaWIyLkhUVFBIYW5kbGVyKQorCisgICAgICAgICMgSXNzdWUyNjcwOiBtdWx0aXBsZSBoYW5kbGVycyBzaGFyaW5nIHRoZSBzYW1lIGJhc2UgY2xhc3MKKyAgICAgICAgY2xhc3MgTXlPdGhlckhUVFBIYW5kbGVyKHVybGxpYjIuSFRUUEhhbmRsZXIpOiBwYXNzCisgICAgICAgIG8gPSBidWlsZF9vcGVuZXIoTXlIVFRQSGFuZGxlciwgTXlPdGhlckhUVFBIYW5kbGVyKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBNeUhUVFBIYW5kbGVyKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBNeU90aGVySFRUUEhhbmRsZXIpCisKKyAgICBkZWYgb3BlbmVyX2hhc19oYW5kbGVyKHNlbGYsIG9wZW5lciwgaGFuZGxlcl9jbGFzcyk6CisgICAgICAgIGZvciBoIGluIG9wZW5lci5oYW5kbGVyczoKKyAgICAgICAgICAgIGlmIGguX19jbGFzc19fID09IGhhbmRsZXJfY2xhc3M6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGYWxzZSkKKworY2xhc3MgUmVxdWVzdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5nZXQgPSB1cmxsaWIyLlJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIpCisgICAgICAgIHNlbGYucG9zdCA9IHVybGxpYjIuUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJYLVRlc3QiOiAidGVzdCJ9KQorCisgICAgZGVmIHRlc3RfbWV0aG9kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5wb3N0LmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiR0VUIiwgc2VsZi5nZXQuZ2V0X21ldGhvZCgpKQorCisgICAgZGVmIHRlc3RfYWRkX2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5nZXQuaGFzX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiR0VUIiwgc2VsZi5nZXQuZ2V0X21ldGhvZCgpKQorICAgICAgICBzZWxmLmdldC5hZGRfZGF0YSgic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmdldC5oYXNfZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5nZXQuZ2V0X21ldGhvZCgpKQorCisgICAgZGVmIHRlc3RfZ2V0X2Z1bGxfdXJsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0LmdldF9mdWxsX3VybCgpKQorCisgICAgZGVmIHRlc3Rfc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi9+amVyZW15LyIsIHNlbGYuZ2V0LmdldF9zZWxlY3RvcigpKQorICAgICAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIvIiwgcmVxLmdldF9zZWxlY3RvcigpKQorCisgICAgZGVmIHRlc3RfZ2V0X3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImh0dHAiLCBzZWxmLmdldC5nZXRfdHlwZSgpKQorCisgICAgZGVmIHRlc3RfZ2V0X2hvc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInd3dy5weXRob24ub3JnIiwgc2VsZi5nZXQuZ2V0X2hvc3QoKSkKKworICAgIGRlZiB0ZXN0X2dldF9ob3N0X3VucXVvdGUoc2VsZik6CisgICAgICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCgiaHR0cDovL3d3dy4lNzB5dGhvbi5vcmcvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgid3d3LnB5dGhvbi5vcmciLCByZXEuZ2V0X2hvc3QoKSkKKworICAgIGRlZiB0ZXN0X3Byb3h5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuZ2V0Lmhhc19wcm94eSgpKQorICAgICAgICBzZWxmLmdldC5zZXRfcHJveHkoInd3dy5wZXJsLm9yZyIsICJodHRwIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZ2V0Lmhhc19wcm94eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ3d3cucHl0aG9uLm9yZyIsIHNlbGYuZ2V0LmdldF9vcmlnaW5fcmVxX2hvc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgid3d3LnBlcmwub3JnIiwgc2VsZi5nZXQuZ2V0X2hvc3QoKSkKKworICAgIGRlZiB0ZXN0X3dyYXBwZWRfdXJsKHNlbGYpOgorICAgICAgICByZXEgPSBSZXF1ZXN0KCI8VVJMOmh0dHA6Ly93d3cucHl0aG9uLm9yZz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ3d3cucHl0aG9uLm9yZyIsIHJlcS5nZXRfaG9zdCgpKQorCisgICAgZGVmIHRlc3RfdXJsX2ZyYWdtZW50KHNlbGYpOgorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvP3FzPXF1ZXJ5I2ZyYWdtZW50PXRydWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIvP3FzPXF1ZXJ5IiwgcmVxLmdldF9zZWxlY3RvcigpKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvI2Z1bj10cnVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiLyIsIHJlcS5nZXRfc2VsZWN0b3IoKSkKKworICAgICAgICAjIElzc3VlIDExNzAzOiBnZXR1cmwoKSBvbWl0cyBmcmFnbWVudCBpbiB0aGUgb3JpZ2luYWwgVVJMLgorICAgICAgICB1cmwgPSAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3VybGxpYjIuaHRtbCNPSycKKyAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9mdWxsX3VybCgpLCB1cmwpCisKKyAgICBkZWYgdGVzdF9IVFRQRXJyb3JfaW50ZXJmYWNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSXNzdWUgMTMyMTEgcmV2ZWFscyB0aGF0IEhUVFBFcnJvciBkaWRuJ3QgaW1wbGVtZW50IHRoZSBVUkxFcnJvcgorICAgICAgICBpbnRlcmZhY2UgZXZlbiB0aG91Z2ggSFRUUEVycm9yIGlzIGEgc3ViY2xhc3Mgb2YgVVJMRXJyb3IuCisKKyAgICAgICAgPj4+IGVyciA9IHVybGxpYjIuSFRUUEVycm9yKG1zZz0nc29tZXRoaW5nIGJhZCBoYXBwZW5lZCcsIHVybD1Ob25lLCBjb2RlPU5vbmUsIGhkcnM9Tm9uZSwgZnA9Tm9uZSkKKyAgICAgICAgPj4+IGFzc2VydCBoYXNhdHRyKGVyciwgJ3JlYXNvbicpCisgICAgICAgID4+PiBlcnIucmVhc29uCisgICAgICAgICdzb21ldGhpbmcgYmFkIGhhcHBlbmVkJworICAgICAgICAiIiIKKworICAgIGRlZiB0ZXN0X0hUVFBFcnJvcl9pbnRlcmZhY2VfY2FsbChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIElzc3VlIDE1NzAxPSAtIEhUVFBFcnJvciBpbnRlcmZhY2UgaGFzIGluZm8gbWV0aG9kIGF2YWlsYWJsZSBmcm9tIFVSTEVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgZXJyID0gdXJsbGliMi5IVFRQRXJyb3IobXNnPSdzb21ldGhpbmcgYmFkIGhhcHBlbmVkJywgdXJsPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU9Tm9uZSwgaGRycz0nQ29udGVudC1MZW5ndGg6NDInLCBmcD1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdyZWFzb24nKSkKKyAgICAgICAgYXNzZXJ0IGhhc2F0dHIoZXJyLCAncmVhc29uJykKKyAgICAgICAgYXNzZXJ0IGhhc2F0dHIoZXJyLCAnaW5mbycpCisgICAgICAgIGFzc2VydCBjYWxsYWJsZShlcnIuaW5mbykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXJyLmluZm8oKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoImVyci5pbmZvKCkgZmFpbGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuaW5mbygpLCAiQ29udGVudC1MZW5ndGg6NDIiKQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3VybGxpYjIKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF91cmxsaWIyLCB2ZXJib3NlKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh1cmxsaWIyLCB2ZXJib3NlKQorICAgIHRlc3RzID0gKFRyaXZpYWxUZXN0cywKKyAgICAgICAgICAgICBPcGVuZXJEaXJlY3RvclRlc3RzLAorICAgICAgICAgICAgIEhhbmRsZXJUZXN0cywKKyAgICAgICAgICAgICBNaXNjVGVzdHMsCisgICAgICAgICAgICAgUmVxdWVzdFRlc3RzKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODAyZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQpAQCAtMCwwICsxLDU1MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCB1cmxwYXJzZQoraW1wb3J0IHVybGxpYjIKK2ltcG9ydCBCYXNlSFRUUFNlcnZlcgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaGFzaGxpYgorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCittaW1ldG9vbHMgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnbWltZXRvb2xzJywgZGVwcmVjYXRlZD1UcnVlKQordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCisKKyMgTG9vcGJhY2sgaHR0cCBzZXJ2ZXIgaW5mcmFzdHJ1Y3R1cmUKKworY2xhc3MgTG9vcGJhY2tIdHRwU2VydmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgICIiIkhUVFAgc2VydmVyIHcvIGEgZmV3IG1vZGlmaWNhdGlvbnMgdGhhdCBtYWtlIGl0IHVzZWZ1bCBmb3IKKyAgICBsb29wYmFjayB0ZXN0aW5nIHB1cnBvc2VzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzKToKKyAgICAgICAgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlci5fX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RIYW5kbGVyQ2xhc3MpCisKKyAgICAgICAgIyBTZXQgdGhlIHRpbWVvdXQgb2Ygb3VyIGxpc3RlbmluZyBzb2NrZXQgcmVhbGx5IGxvdyBzbworICAgICAgICAjIHRoYXQgd2UgY2FuIHN0b3AgdGhlIHNlcnZlciBlYXNpbHkuCisgICAgICAgIHNlbGYuc29ja2V0LnNldHRpbWVvdXQoMS4wKQorCisgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAiIiJCYXNlSFRUUFNlcnZlciBtZXRob2QsIG92ZXJyaWRkZW4uIiIiCisKKyAgICAgICAgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQorCisgICAgICAgICMgSXQncyBhIGxvb3BiYWNrIGNvbm5lY3Rpb24sIHNvIHNldHRpbmcgdGhlIHRpbWVvdXQKKyAgICAgICAgIyByZWFsbHkgbG93IHNob3VsZG4ndCBhZmZlY3QgYW55dGhpbmcsIGJ1dCBzaG91bGQgbWFrZQorICAgICAgICAjIGRlYWRsb2NrcyBsZXNzIGxpa2VseSB0byBvY2N1ci4KKyAgICAgICAgcmVxdWVzdC5zZXR0aW1lb3V0KDEwLjApCisKKyAgICAgICAgcmV0dXJuIChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKworY2xhc3MgTG9vcGJhY2tIdHRwU2VydmVyVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIlN0b3BwYWJsZSB0aHJlYWQgdGhhdCBydW5zIGEgbG9vcGJhY2sgaHR0cCBzZXJ2ZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdF9oYW5kbGVyKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9zdG9wID0gRmFsc2UKKyAgICAgICAgc2VsZi5yZWFkeSA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHJlcXVlc3RfaGFuZGxlci5wcm90b2NvbF92ZXJzaW9uID0gIkhUVFAvMS4wIgorICAgICAgICBzZWxmLmh0dHBkID0gTG9vcGJhY2tIdHRwU2VydmVyKCgnMTI3LjAuMC4xJywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oYW5kbGVyKQorICAgICAgICAjcHJpbnQgIlNlcnZpbmcgSFRUUCBvbiAlcyBwb3J0ICVzIiAlIChzZWxmLmh0dHBkLnNlcnZlcl9uYW1lLAorICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmh0dHBkLnNlcnZlcl9wb3J0KQorICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLmh0dHBkLnNlcnZlcl9wb3J0CisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcHMgdGhlIHdlYnNlcnZlciBpZiBpdCdzIGN1cnJlbnRseSBydW5uaW5nLiIiIgorCisgICAgICAgICMgU2V0IHRoZSBzdG9wIGZsYWcuCisgICAgICAgIHNlbGYuX3N0b3AgPSBUcnVlCisKKyAgICAgICAgc2VsZi5qb2luKCkKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYucmVhZHkuc2V0KCkKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3A6CisgICAgICAgICAgICBzZWxmLmh0dHBkLmhhbmRsZV9yZXF1ZXN0KCkKKworIyBBdXRoZW50aWNhdGlvbiBpbmZyYXN0cnVjdHVyZQorCitjbGFzcyBEaWdlc3RBdXRoSGFuZGxlcjoKKyAgICAiIiJIYW5kbGVyIGZvciBwZXJmb3JtaW5nIGRpZ2VzdCBhdXRoZW50aWNhdGlvbi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdF9udW0gPSAwCisgICAgICAgIHNlbGYuX25vbmNlcyA9IFtdCisgICAgICAgIHNlbGYuX3VzZXJzID0ge30KKyAgICAgICAgc2VsZi5fcmVhbG1fbmFtZSA9ICJUZXN0IFJlYWxtIgorICAgICAgICBzZWxmLl9xb3AgPSAiYXV0aCIKKworICAgIGRlZiBzZXRfcW9wKHNlbGYsIHFvcCk6CisgICAgICAgIHNlbGYuX3FvcCA9IHFvcAorCisgICAgZGVmIHNldF91c2VycyhzZWxmLCB1c2Vycyk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHVzZXJzLCBkaWN0KQorICAgICAgICBzZWxmLl91c2VycyA9IHVzZXJzCisKKyAgICBkZWYgc2V0X3JlYWxtKHNlbGYsIHJlYWxtKToKKyAgICAgICAgc2VsZi5fcmVhbG1fbmFtZSA9IHJlYWxtCisKKyAgICBkZWYgX2dlbmVyYXRlX25vbmNlKHNlbGYpOgorICAgICAgICBzZWxmLl9yZXF1ZXN0X251bSArPSAxCisgICAgICAgIG5vbmNlID0gaGFzaGxpYi5tZDUoc3RyKHNlbGYuX3JlcXVlc3RfbnVtKSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgc2VsZi5fbm9uY2VzLmFwcGVuZChub25jZSkKKyAgICAgICAgcmV0dXJuIG5vbmNlCisKKyAgICBkZWYgX2NyZWF0ZV9hdXRoX2RpY3Qoc2VsZiwgYXV0aF9zdHIpOgorICAgICAgICBmaXJzdF9zcGFjZV9pbmRleCA9IGF1dGhfc3RyLmZpbmQoIiAiKQorICAgICAgICBhdXRoX3N0ciA9IGF1dGhfc3RyW2ZpcnN0X3NwYWNlX2luZGV4KzE6XQorCisgICAgICAgIHBhcnRzID0gYXV0aF9zdHIuc3BsaXQoIiwiKQorCisgICAgICAgIGF1dGhfZGljdCA9IHt9CisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBwYXJ0LnNwbGl0KCI9IikKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHZhbHVlWzBdID09ICciJyBhbmQgdmFsdWVbLTFdID09ICciJzoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzE6LTFdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3RyaXAoKQorICAgICAgICAgICAgYXV0aF9kaWN0W25hbWVdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIGF1dGhfZGljdAorCisgICAgZGVmIF92YWxpZGF0ZV9hdXRoKHNlbGYsIGF1dGhfZGljdCwgcGFzc3dvcmQsIG1ldGhvZCwgdXJpKToKKyAgICAgICAgZmluYWxfZGljdCA9IHt9CisgICAgICAgIGZpbmFsX2RpY3QudXBkYXRlKGF1dGhfZGljdCkKKyAgICAgICAgZmluYWxfZGljdFsicGFzc3dvcmQiXSA9IHBhc3N3b3JkCisgICAgICAgIGZpbmFsX2RpY3RbIm1ldGhvZCJdID0gbWV0aG9kCisgICAgICAgIGZpbmFsX2RpY3RbInVyaSJdID0gdXJpCisgICAgICAgIEhBMV9zdHIgPSAiJSh1c2VybmFtZSlzOiUocmVhbG0pczolKHBhc3N3b3JkKXMiICUgZmluYWxfZGljdAorICAgICAgICBIQTEgPSBoYXNobGliLm1kNShIQTFfc3RyKS5oZXhkaWdlc3QoKQorICAgICAgICBIQTJfc3RyID0gIiUobWV0aG9kKXM6JSh1cmkpcyIgJSBmaW5hbF9kaWN0CisgICAgICAgIEhBMiA9IGhhc2hsaWIubWQ1KEhBMl9zdHIpLmhleGRpZ2VzdCgpCisgICAgICAgIGZpbmFsX2RpY3RbIkhBMSJdID0gSEExCisgICAgICAgIGZpbmFsX2RpY3RbIkhBMiJdID0gSEEyCisgICAgICAgIHJlc3BvbnNlX3N0ciA9ICIlKEhBMSlzOiUobm9uY2UpczolKG5jKXM6IiBcCisgICAgICAgICAgICAgICAgICAgICAgICIlKGNub25jZSlzOiUocW9wKXM6JShIQTIpcyIgJSBmaW5hbF9kaWN0CisgICAgICAgIHJlc3BvbnNlID0gaGFzaGxpYi5tZDUocmVzcG9uc2Vfc3RyKS5oZXhkaWdlc3QoKQorCisgICAgICAgIHJldHVybiByZXNwb25zZSA9PSBhdXRoX2RpY3RbInJlc3BvbnNlIl0KKworICAgIGRlZiBfcmV0dXJuX2F1dGhfY2hhbGxlbmdlKHNlbGYsIHJlcXVlc3RfaGFuZGxlcik6CisgICAgICAgIHJlcXVlc3RfaGFuZGxlci5zZW5kX3Jlc3BvbnNlKDQwNywgIlByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkIikKKyAgICAgICAgcmVxdWVzdF9oYW5kbGVyLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9odG1sIikKKyAgICAgICAgcmVxdWVzdF9oYW5kbGVyLnNlbmRfaGVhZGVyKAorICAgICAgICAgICAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsICdEaWdlc3QgcmVhbG09IiVzIiwgJworICAgICAgICAgICAgJ3FvcD0iJXMiLCcKKyAgICAgICAgICAgICdub25jZT0iJXMiLCAnICUgXAorICAgICAgICAgICAgKHNlbGYuX3JlYWxtX25hbWUsIHNlbGYuX3FvcCwgc2VsZi5fZ2VuZXJhdGVfbm9uY2UoKSkpCisgICAgICAgICMgWFhYOiBOb3Qgc3VyZSBpZiB3ZSdyZSBzdXBwb3NlZCB0byBhZGQgdGhpcyBuZXh0IGhlYWRlciBvcgorICAgICAgICAjIG5vdC4KKyAgICAgICAgI3JlcXVlc3RfaGFuZGxlci5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCisgICAgICAgIHJlcXVlc3RfaGFuZGxlci5lbmRfaGVhZGVycygpCisgICAgICAgIHJlcXVlc3RfaGFuZGxlci53ZmlsZS53cml0ZSgiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQuIikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaGFuZGxlX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdF9oYW5kbGVyKToKKyAgICAgICAgIiIiUGVyZm9ybXMgZGlnZXN0IGF1dGhlbnRpY2F0aW9uIG9uIHRoZSBnaXZlbiBIVFRQIHJlcXVlc3QKKyAgICAgICAgaGFuZGxlci4gIFJldHVybnMgVHJ1ZSBpZiBhdXRoZW50aWNhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgRmFsc2UKKyAgICAgICAgb3RoZXJ3aXNlLgorCisgICAgICAgIElmIG5vIHVzZXJzIGhhdmUgYmVlbiBzZXQsIHRoZW4gZGlnZXN0IGF1dGggaXMgZWZmZWN0aXZlbHkKKyAgICAgICAgZGlzYWJsZWQgYW5kIHRoaXMgbWV0aG9kIHdpbGwgYWx3YXlzIHJldHVybiBUcnVlLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBsZW4oc2VsZi5fdXNlcnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGlmICdQcm94eS1BdXRob3JpemF0aW9uJyBub3QgaW4gcmVxdWVzdF9oYW5kbGVyLmhlYWRlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV0dXJuX2F1dGhfY2hhbGxlbmdlKHJlcXVlc3RfaGFuZGxlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGF1dGhfZGljdCA9IHNlbGYuX2NyZWF0ZV9hdXRoX2RpY3QoCisgICAgICAgICAgICAgICAgcmVxdWVzdF9oYW5kbGVyLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGlmIGF1dGhfZGljdFsidXNlcm5hbWUiXSBpbiBzZWxmLl91c2VyczoKKyAgICAgICAgICAgICAgICBwYXNzd29yZCA9IHNlbGYuX3VzZXJzWyBhdXRoX2RpY3RbInVzZXJuYW1lIl0gXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV0dXJuX2F1dGhfY2hhbGxlbmdlKHJlcXVlc3RfaGFuZGxlcikKKyAgICAgICAgICAgIGlmIG5vdCBhdXRoX2RpY3QuZ2V0KCJub25jZSIpIGluIHNlbGYuX25vbmNlczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV0dXJuX2F1dGhfY2hhbGxlbmdlKHJlcXVlc3RfaGFuZGxlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fbm9uY2VzLnJlbW92ZShhdXRoX2RpY3RbIm5vbmNlIl0pCisKKyAgICAgICAgICAgIGF1dGhfdmFsaWRhdGVkID0gRmFsc2UKKworICAgICAgICAgICAgIyBNU0lFIHVzZXMgc2hvcnRfcGF0aCBpbiBpdHMgdmFsaWRhdGlvbiwgYnV0IFB5dGhvbidzCisgICAgICAgICAgICAjIHVybGxpYjIgdXNlcyB0aGUgZnVsbCBwYXRoLCBzbyB3ZSdyZSBnb2luZyB0byBzZWUgaWYKKyAgICAgICAgICAgICMgZWl0aGVyIG9mIHRoZW0gd29ya3MgaGVyZS4KKworICAgICAgICAgICAgZm9yIHBhdGggaW4gW3JlcXVlc3RfaGFuZGxlci5wYXRoLCByZXF1ZXN0X2hhbmRsZXIuc2hvcnRfcGF0aF06CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fdmFsaWRhdGVfYXV0aChhdXRoX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfaGFuZGxlci5jb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGF1dGhfdmFsaWRhdGVkID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBub3QgYXV0aF92YWxpZGF0ZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JldHVybl9hdXRoX2NoYWxsZW5nZShyZXF1ZXN0X2hhbmRsZXIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisjIFByb3h5IHRlc3QgaW5mcmFzdHJ1Y3R1cmUKKworY2xhc3MgRmFrZVByb3h5SGFuZGxlcihCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICAiIiJUaGlzIGlzIGEgJ2Zha2UgcHJveHknIHRoYXQgbWFrZXMgaXQgbG9vayBsaWtlIHRoZSBlbnRpcmUKKyAgICBpbnRlcm5ldCBoYXMgZ29uZSBkb3duIGR1ZSB0byBhIHN1ZGRlbiB6b21iaWUgaW52YXNpb24uICBJdCBtYWluCisgICAgdXRpbGl0eSBpcyBpbiBwcm92aWRpbmcgdXMgd2l0aCBhdXRoZW50aWNhdGlvbiBzdXBwb3J0IGZvcgorICAgIHRlc3RpbmcuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlnZXN0X2F1dGhfaGFuZGxlciwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIyBUaGlzIGhhcyB0byBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgb3VyIHBhcmVudCdzIF9faW5pdF9fKCksIHdoaWNoIHdpbGwKKyAgICAgICAgIyB0cnkgdG8gY2FsbCBkb19HRVQoKS4KKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyID0gZGlnZXN0X2F1dGhfaGFuZGxlcgorICAgICAgICBCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKKyAgICAgICAgIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSBmb3IgZGVidWdnaW5nLgorICAgICAgICAjc3lzLnN0ZGVyci53cml0ZShmb3JtYXQgJSBhcmdzKQorICAgICAgICBwYXNzCisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICAoc2NtLCBuZXRsb2MsIHBhdGgsIHBhcmFtcywgcXVlcnksIGZyYWdtZW50KSA9IHVybHBhcnNlLnVybHBhcnNlKAorICAgICAgICAgICAgc2VsZi5wYXRoLCAnaHR0cCcpCisgICAgICAgIHNlbGYuc2hvcnRfcGF0aCA9IHBhdGgKKyAgICAgICAgaWYgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLmhhbmRsZV9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCwgIk9LIikKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L2h0bWwiKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKCJZb3UndmUgcmVhY2hlZCAlcyE8QlI+IiAlIHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoIk91ciBhcG9sb2dpZXMsIGJ1dCBvdXIgc2VydmVyIGlzIGRvd24gZHVlIHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIHN1ZGRlbiB6b21iaWUgaW52YXNpb24uIikKKworIyBUZXN0IGNhc2VzCisKK2NsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKworCitjbGFzcyBQcm94eUF1dGhUZXN0cyhCYXNlVGVzdENhc2UpOgorICAgIFVSTCA9ICJodHRwOi8vbG9jYWxob3N0IgorCisgICAgVVNFUiA9ICJ0ZXN0ZXIiCisgICAgUEFTU1dEID0gInRlc3QxMjMiCisgICAgUkVBTE0gPSAiVGVzdFJlYWxtIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihQcm94eUF1dGhUZXN0cywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIgPSBEaWdlc3RBdXRoSGFuZGxlcigpCisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfdXNlcnMoe3NlbGYuVVNFUjogc2VsZi5QQVNTV0R9KQorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3JlYWxtKHNlbGYuUkVBTE0pCisgICAgICAgIGRlZiBjcmVhdGVfZmFrZV9wcm94eV9oYW5kbGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByZXR1cm4gRmFrZVByb3h5SGFuZGxlcihzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLnNlcnZlciA9IExvb3BiYWNrSHR0cFNlcnZlclRocmVhZChjcmVhdGVfZmFrZV9wcm94eV9oYW5kbGVyKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuc2VydmVyLnJlYWR5LndhaXQoKQorICAgICAgICBwcm94eV91cmwgPSAiaHR0cDovLzEyNy4wLjAuMTolZCIgJSBzZWxmLnNlcnZlci5wb3J0CisgICAgICAgIGhhbmRsZXIgPSB1cmxsaWIyLlByb3h5SGFuZGxlcih7Imh0dHAiIDogcHJveHlfdXJsfSkKKyAgICAgICAgc2VsZi5wcm94eV9kaWdlc3RfaGFuZGxlciA9IHVybGxpYjIuUHJveHlEaWdlc3RBdXRoSGFuZGxlcigpCisgICAgICAgIHNlbGYub3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIoaGFuZGxlciwgc2VsZi5wcm94eV9kaWdlc3RfaGFuZGxlcikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisgICAgICAgIHN1cGVyKFByb3h5QXV0aFRlc3RzLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBkZWYgdGVzdF9wcm94eV93aXRoX2JhZF9wYXNzd29yZF9yYWlzZXNfaHR0cGVycm9yKHNlbGYpOgorICAgICAgICBzZWxmLnByb3h5X2RpZ2VzdF9oYW5kbGVyLmFkZF9wYXNzd29yZChzZWxmLlJFQUxNLCBzZWxmLlVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VU0VSLCBzZWxmLlBBU1NXRCsiYmFkIikKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIyLkhUVFBFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuZXIub3BlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VUkwpCisKKyAgICBkZWYgdGVzdF9wcm94eV93aXRoX25vX3Bhc3N3b3JkX3JhaXNlc19odHRwZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcW9wKCJhdXRoIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliMi5IVFRQRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3BlbmVyLm9wZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVVJMKQorCisgICAgZGVmIHRlc3RfcHJveHlfcW9wX2F1dGhfd29ya3Moc2VsZik6CisgICAgICAgIHNlbGYucHJveHlfZGlnZXN0X2hhbmRsZXIuYWRkX3Bhc3N3b3JkKHNlbGYuUkVBTE0sIHNlbGYuVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlVTRVIsIHNlbGYuUEFTU1dEKQorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3FvcCgiYXV0aCIpCisgICAgICAgIHJlc3VsdCA9IHNlbGYub3BlbmVyLm9wZW4oc2VsZi5VUkwpCisgICAgICAgIHdoaWxlIHJlc3VsdC5yZWFkKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJlc3VsdC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9wcm94eV9xb3BfYXV0aF9pbnRfd29ya3Nfb3JfdGhyb3dzX3VybGVycm9yKHNlbGYpOgorICAgICAgICBzZWxmLnByb3h5X2RpZ2VzdF9oYW5kbGVyLmFkZF9wYXNzd29yZChzZWxmLlJFQUxNLCBzZWxmLlVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VU0VSLCBzZWxmLlBBU1NXRCkKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgtaW50IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5vcGVuZXIub3BlbihzZWxmLlVSTCkKKyAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3I6CisgICAgICAgICAgICAjIEl0J3Mgb2theSBpZiB3ZSBkb24ndCBzdXBwb3J0IGF1dGgtaW50LCBidXQgd2UgY2VydGFpbmx5CisgICAgICAgICAgICAjIHNob3VsZG4ndCByZWNlaXZlIGFueSBraW5kIG9mIGV4Y2VwdGlvbiBoZXJlIG90aGVyIHRoYW4KKyAgICAgICAgICAgICMgYSBVUkxFcnJvci4KKyAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgd2hpbGUgcmVzdWx0LnJlYWQoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXN1bHQuY2xvc2UoKQorCisKK2RlZiBHZXRSZXF1ZXN0SGFuZGxlcihyZXNwb25zZXMpOgorCisgICAgY2xhc3MgRmFrZUhUVFBSZXF1ZXN0SGFuZGxlcihCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKKworICAgICAgICBzZXJ2ZXJfdmVyc2lvbiA9ICJUZXN0SFRUUC8iCisgICAgICAgIHJlcXVlc3RzID0gW10KKyAgICAgICAgaGVhZGVyc19yZWNlaXZlZCA9IFtdCisgICAgICAgIHBvcnQgPSA4MAorCisgICAgICAgIGRlZiBkb19HRVQoc2VsZik6CisgICAgICAgICAgICBib2R5ID0gc2VsZi5zZW5kX2hlYWQoKQorICAgICAgICAgICAgaWYgYm9keToKKyAgICAgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKGJvZHkpCisKKyAgICAgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgICAgICBjb250ZW50X2xlbmd0aCA9IHNlbGYuaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXQorICAgICAgICAgICAgcG9zdF9kYXRhID0gc2VsZi5yZmlsZS5yZWFkKGludChjb250ZW50X2xlbmd0aCkpCisgICAgICAgICAgICBzZWxmLmRvX0dFVCgpCisgICAgICAgICAgICBzZWxmLnJlcXVlc3RzLmFwcGVuZChwb3N0X2RhdGEpCisKKyAgICAgICAgZGVmIHNlbmRfaGVhZChzZWxmKToKKyAgICAgICAgICAgIEZha2VIVFRQUmVxdWVzdEhhbmRsZXIuaGVhZGVyc19yZWNlaXZlZCA9IHNlbGYuaGVhZGVycworICAgICAgICAgICAgc2VsZi5yZXF1ZXN0cy5hcHBlbmQoc2VsZi5wYXRoKQorICAgICAgICAgICAgcmVzcG9uc2VfY29kZSwgaGVhZGVycywgYm9keSA9IHJlc3BvbnNlcy5wb3AoMCkKKworICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKHJlc3BvbnNlX2NvZGUpCisKKyAgICAgICAgICAgIGZvciAoaGVhZGVyLCB2YWx1ZSkgaW4gaGVhZGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKGhlYWRlciwgdmFsdWUgJSBzZWxmLnBvcnQpCisgICAgICAgICAgICBpZiBib2R5OgorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluJykKKyAgICAgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYm9keQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisKKyAgICAgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIHBhc3MKKworCisgICAgcmV0dXJuIEZha2VIVFRQUmVxdWVzdEhhbmRsZXIKKworCitjbGFzcyBUZXN0VXJsb3BlbihCYXNlVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHVybGxpYjIudXJsb3BlbiB1c2luZyB0aGUgbmV0d29yay4KKworICAgIFRoZXNlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gIEFzc3VtaW5nIHRoYXQgdGVzdGluZyB1c2luZyBmaWxlcyBkb2VzIGEKKyAgICBnb29kIGpvYiBvdmVyYWxsIG9mIHNvbWUgb2YgdGhlIGJhc2ljIGludGVyZmFjZSBmZWF0dXJlcy4gIFRoZXJlIGFyZSBubworICAgIHRlc3RzIGV4ZXJjaXNpbmcgdGhlIG9wdGlvbmFsICdkYXRhJyBhbmQgJ3Byb3hpZXMnIGFyZ3VtZW50cy4gIE5vIHRlc3RzCisgICAgZm9yIHRyYW5zcGFyZW50IHJlZGlyZWN0aW9uIGhhdmUgYmVlbiB3cml0dGVuLgorICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwcm94eV9oYW5kbGVyID0gdXJsbGliMi5Qcm94eUhhbmRsZXIoe30pCisgICAgICAgIG9wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKHByb3h5X2hhbmRsZXIpCisgICAgICAgIHVybGxpYjIuaW5zdGFsbF9vcGVuZXIob3BlbmVyKQorICAgICAgICBzdXBlcihUZXN0VXJsb3Blbiwgc2VsZikuc2V0VXAoKQorCisgICAgZGVmIHN0YXJ0X3NlcnZlcihzZWxmLCByZXNwb25zZXMpOgorICAgICAgICBoYW5kbGVyID0gR2V0UmVxdWVzdEhhbmRsZXIocmVzcG9uc2VzKQorCisgICAgICAgIHNlbGYuc2VydmVyID0gTG9vcGJhY2tIdHRwU2VydmVyVGhyZWFkKGhhbmRsZXIpCisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIucmVhZHkud2FpdCgpCisgICAgICAgIHBvcnQgPSBzZWxmLnNlcnZlci5wb3J0CisgICAgICAgIGhhbmRsZXIucG9ydCA9IHBvcnQKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIKKworCisgICAgZGVmIHRlc3RfcmVkaXJlY3Rpb24oc2VsZik6CisgICAgICAgIGV4cGVjdGVkX3Jlc3BvbnNlID0gJ1dlIGdvdCBoZXJlLi4uJworICAgICAgICByZXNwb25zZXMgPSBbCisgICAgICAgICAgICAoMzAyLCBbKCdMb2NhdGlvbicsICdodHRwOi8vbG9jYWxob3N0OiVzL3NvbWV3aGVyZV9lbHNlJyldLCAnJyksCisgICAgICAgICAgICAoMjAwLCBbXSwgZXhwZWN0ZWRfcmVzcG9uc2UpCisgICAgICAgIF0KKworICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIocmVzcG9uc2VzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSB1cmxsaWIyLnVybG9wZW4oJ2h0dHA6Ly9sb2NhbGhvc3Q6JXMvJyAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIucmVxdWVzdHMsIFsnLycsICcvc29tZXdoZXJlX2Vsc2UnXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisKKyAgICBkZWYgdGVzdF80MDQoc2VsZik6CisgICAgICAgIGV4cGVjdGVkX3Jlc3BvbnNlID0gJ0JhZCBiYWQgYmFkLi4uJworICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWyg0MDQsIFtdLCBleHBlY3RlZF9yZXNwb25zZSldKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1cmxsaWIyLnVybG9wZW4oJ2h0dHA6Ly9sb2NhbGhvc3Q6JXMvd2VlYmxlJyAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yLCBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCc0MDQgc2hvdWxkIHJhaXNlIFVSTEVycm9yJykKKworICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9yZXNwb25zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5yZXF1ZXN0cywgWycvd2VlYmxlJ10pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworCisgICAgZGVmIHRlc3RfMjAwKHNlbGYpOgorICAgICAgICBleHBlY3RlZF9yZXNwb25zZSA9ICdweWNvbiAyMDA4Li4uJworICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCBleHBlY3RlZF9yZXNwb25zZSldKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSB1cmxsaWIyLnVybG9wZW4oJ2h0dHA6Ly9sb2NhbGhvc3Q6JXMvYml6YXJyZScgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX3Jlc3BvbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnJlcXVlc3RzLCBbJy9iaXphcnJlJ10pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIGRlZiB0ZXN0XzIwMF93aXRoX3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGV4cGVjdGVkX3Jlc3BvbnNlID0gJ3B5Y29uIDIwMDguLi4nCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X3NlcnZlcihbKDIwMCwgW10sIGV4cGVjdGVkX3Jlc3BvbnNlKV0pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IHVybGxpYjIudXJsb3BlbignaHR0cDovL2xvY2FsaG9zdDolcy9iaXphcnJlJyAlIGhhbmRsZXIucG9ydCwgJ2dldD13aXRoX2ZlZWxpbmcnKQorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9yZXNwb25zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5yZXF1ZXN0cywgWycvYml6YXJyZScsICdnZXQ9d2l0aF9mZWVsaW5nJ10pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworCisgICAgZGVmIHRlc3Rfc2VuZGluZ19oZWFkZXJzKHNlbGYpOgorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCAid2UgZG9uJ3QgY2FyZSIpXSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QoImh0dHA6Ly9sb2NhbGhvc3Q6JXMvIiAlIGhhbmRsZXIucG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsnUmFuZ2UnOiAnYnl0ZXM9MjAtMzknfSkKKyAgICAgICAgICAgIHVybGxpYjIudXJsb3BlbihyZXEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuaGVhZGVyc19yZWNlaXZlZFsnUmFuZ2UnXSwgJ2J5dGVzPTIwLTM5JykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X3NlcnZlcihbKDIwMCwgW10sICJ3ZSBkb24ndCBjYXJlIildKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9wZW5fdXJsID0gdXJsbGliMi51cmxvcGVuKCJodHRwOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJjbG9zZSIsICJpbmZvIiwgImdldHVybCIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG9wZW5fdXJsLCBhdHRyKSwgIm9iamVjdCByZXR1cm5lZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVybG9wZW4gbGFja3MgdGhlICVzIGF0dHJpYnV0ZSIgJSBhdHRyKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVuX3VybC5yZWFkKCksICJjYWxsaW5nICdyZWFkJyBmYWlsZWQiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcGVuX3VybC5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X3NlcnZlcihbKDIwMCwgW10sICJ3ZSBkb24ndCBjYXJlIildKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9wZW5fdXJsID0gdXJsbGliMi51cmxvcGVuKCJodHRwOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgICAgIGluZm9fb2JqID0gb3Blbl91cmwuaW5mbygpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW5mb19vYmosIG1pbWV0b29scy5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgJ2luZm8nIGlzIG5vdCBhbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbmNlIG9mIG1pbWV0b29scy5NZXNzYWdlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb19vYmouZ2V0c3VidHlwZSgpLCAicGxhaW4iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9nZXR1cmwoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHNhbWUgVVJMIGFzIG9wZW5lZCBpcyByZXR1cm5lZCBieSBnZXR1cmwuCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X3NlcnZlcihbKDIwMCwgW10sICJ3ZSBkb24ndCBjYXJlIildKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9wZW5fdXJsID0gdXJsbGliMi51cmxvcGVuKCJodHRwOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgICAgIHVybCA9IG9wZW5fdXJsLmdldHVybCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybCwgImh0dHA6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKworICAgIGRlZiB0ZXN0X2JhZF9hZGRyZXNzKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBwcm9wZXIgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIGNvbm5lY3RpbmcgdG8gYSBib2d1cworICAgICAgICAjIGFkZHJlc3MuCisKKyAgICAgICAgIyBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvbW1lbnQgYmVsb3csIHRoaXMgbWlnaHQgZmFpbCB3aXRoIHNvbWUgSVNQLAorICAgICAgICAjIHNvIHdlIHJ1biB0aGUgdGVzdCBvbmx5IHdoZW4gLXVuZXR3b3JrLy11YWxsIGlzIHNwZWNpZmllZCB0bworICAgICAgICAjIG1pdGlnYXRlIHRoZSBwcm9ibGVtIGEgYml0IChzZWUgIzE3NTY0KQorICAgICAgICB0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdpdmVuIHRoYXQgYm90aCBWZXJpU2lnbiBhbmQgdmFyaW91cyBJU1BzIGhhdmUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgcGFzdCBvciBhcmUgcHJlc2VudGx5IGhpamFja2luZyB2YXJpb3VzIGludmFsaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb21haW4gbmFtZSByZXF1ZXN0cyBpbiBhbiBhdHRlbXB0IHRvIGJvb3N0IHRyYWZmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0byB0aGVpciBvd24gc2l0ZXMsIGZpbmRpbmcgYSBkb21haW4gbmFtZSB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3IgdGhpcyB0ZXN0IGlzIGRpZmZpY3VsdC4gIFJGQzI2MDYgbGVhZHMgb25lIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgYmVsaWV2ZSB0aGF0ICcuaW52YWxpZCcgc2hvdWxkIHdvcmssIGJ1dCBleHBlcmllbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VlbWVkIHRvIGluZGljYXRlIG90aGVyd2lzZS4gIFNpbmdsZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUTERzIGFyZSBsaWtlbHkgdG8gcmVtYWluIGludmFsaWQsIHNvIHRoaXMgc2VlbXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBiZSB0aGUgYmVzdCBjaG9pY2UuIFRoZSB0cmFpbGluZyAnLicgcHJldmVudHMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlbGF0ZWQgcHJvYmxlbTogVGhlIG5vcm1hbCBETlMgcmVzb2x2ZXIgYXBwZW5kcworICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBkb21haW4gbmFtZXMgZnJvbSB0aGUgc2VhcmNoIHBhdGggaWYgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyAnLicgdGhlIGVuZCBhbmQsIGFuZCBpZiBvbmUgb2YgdGhvc2UgZG9tYWlucworICAgICAgICAgICAgICAgICAgICAgICAgICAjIGltcGxlbWVudHMgYSAnKicgcnVsZSBhIHJlc3VsdCBpcyByZXR1cm5lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIb3dldmVyLCBub25lIG9mIHRoaXMgd2lsbCBwcmV2ZW50IHRoZSB0ZXN0IGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmYWlsaW5nIGlmIHRoZSBJU1AgaGlqYWNrcyBhbGwgaW52YWxpZCBkb21haW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXF1ZXN0cy4gIFRoZSByZWFsIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGJlIGFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXJpemUgdGhlIGZyYW1ld29yayB3aXRoIGEgbW9jayByZXNvbHZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsbGliMi51cmxvcGVuLCAiaHR0cDovL3NhZGZsa2pzYXNmLmkubnZhbGkuZC4vIikKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgZXhwZWN0ZWRfcmVzcG9uc2UgPSAicHljb24gMjAwOC4uLiIKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKFsoMjAwLCBbXSwgZXhwZWN0ZWRfcmVzcG9uc2UpXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHVybGxpYjIudXJsb3BlbigiaHR0cDovL2xvY2FsaG9zdDolcyIgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZXhwZWN0ZWRfcmVzcG9uc2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIGRlZiB6dGVzdF9saW5lX2l0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgbGluZXMgPSBbIldlXG4iLCAiZ290XG4iLCAiaGVyZVxuIiwgInZlcnlsb25nICIgKiA4MTkyICsgIlxuIl0KKyAgICAgICAgZXhwZWN0ZWRfcmVzcG9uc2UgPSAiIi5qb2luKGxpbmVzKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCBleHBlY3RlZF9yZXNwb25zZSldKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gdXJsbGliMi51cmxvcGVuKCJodHRwOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoZGF0YSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBsaW5lc1tpbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmV0Y2hlZCBsaW5lIG51bWJlciAlcyBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBFeHBlY3RlZCBsZW5ndGggd2FzICVzLCBnb3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleCwgbGVuKGxpbmVzW2luZGV4XSksIGxlbihsaW5lKSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleCArIDEsIGxlbihsaW5lcykpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIFdlIHdpbGwgTk9UIGRlcGVuZCBvbiB0aGUgbmV0d29yayByZXNvdXJjZSBmbGFnCisgICAgIyAoTGliL3Rlc3QvcmVncnRlc3QucHkgLXUgbmV0d29yaykgc2luY2UgYWxsIHRlc3RzIGhlcmUgYXJlIG9ubHkKKyAgICAjIGxvY2FsaG9zdC4gIEhvd2V2ZXIsIGlmIHRoaXMgaXMgYSBiYWQgcmF0aW9uYWxlLCB0aGVuIHVuY29tbWVudAorICAgICMgdGhlIG5leHQgbGluZS4KKyAgICAjdGVzdF9zdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUHJveHlBdXRoVGVzdHMsIFRlc3RVcmxvcGVuKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDczYWMwCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQpAQCAtMCwwICsxLDMzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3VybGxpYjIgaW1wb3J0IHNhbmVwYXRobmFtZTJ1cmwKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IHVybGxpYjIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitUSU1FT1VUID0gNjAgICMgc2Vjb25kcworCisKK2RlZiBfcmV0cnlfdGhyaWNlKGZ1bmMsIGV4YywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgZXhjLCBsYXN0X2V4YzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgcmFpc2UgbGFzdF9leGMKKworZGVmIF93cmFwX3dpdGhfcmV0cnlfdGhyaWNlKGZ1bmMsIGV4Yyk6CisgICAgZGVmIHdyYXBwZWQoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIF9yZXRyeV90aHJpY2UoZnVuYywgZXhjLCAqYXJncywgKiprd2FyZ3MpCisgICAgcmV0dXJuIHdyYXBwZWQKKworIyBDb25uZWN0aW5nIHRvIHJlbW90ZSBob3N0cyBpcyBmbGFreS4gIE1ha2UgaXQgbW9yZSByb2J1c3QgYnkgcmV0cnlpbmcKKyMgdGhlIGNvbm5lY3Rpb24gc2V2ZXJhbCB0aW1lcy4KK191cmxvcGVuX3dpdGhfcmV0cnkgPSBfd3JhcF93aXRoX3JldHJ5X3RocmljZSh1cmxsaWIyLnVybG9wZW4sIHVybGxpYjIuVVJMRXJyb3IpCisKKworY2xhc3MgQXV0aFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB1cmxsaWIyIGF1dGhlbnRpY2F0aW9uIGZlYXR1cmVzLiIiIgorCisjIyBEaXNhYmxlZCBhdCB0aGUgbW9tZW50IHNpbmNlIHRoZXJlIGlzIG5vIHBhZ2UgdW5kZXIgcHl0aG9uLm9yZyB3aGljaAorIyMgY291bGQgYmUgdXNlZCB0byBIVFRQIGF1dGhlbnRpY2F0aW9uLgorIworIyAgICBkZWYgdGVzdF9iYXNpY19hdXRoKHNlbGYpOgorIyAgICAgICAgaW1wb3J0IGh0dHBsaWIKKyMKKyMgICAgICAgIHRlc3RfdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy90ZXN0L3Rlc3RfdXJsbGliMi9iYXNpY19hdXRoIgorIyAgICAgICAgdGVzdF9ob3N0cG9ydCA9ICJ3d3cucHl0aG9uLm9yZyIKKyMgICAgICAgIHRlc3RfcmVhbG0gPSAnVGVzdCBSZWFsbScKKyMgICAgICAgIHRlc3RfdXNlciA9ICd0ZXN0LnRlc3RfdXJsbGliMm5ldCcKKyMgICAgICAgIHRlc3RfcGFzc3dvcmQgPSAnYmxhaCcKKyMKKyMgICAgICAgICMgZmFpbHVyZQorIyAgICAgICAgdHJ5OgorIyAgICAgICAgICAgIF91cmxvcGVuX3dpdGhfcmV0cnkodGVzdF91cmwpCisjICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IsIGV4YzoKKyMgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5jb2RlLCA0MDEpCisjICAgICAgICBlbHNlOgorIyAgICAgICAgICAgIHNlbGYuZmFpbCgidXJsb3BlbigpIHNob3VsZCBoYXZlIGZhaWxlZCB3aXRoIDQwMSIpCisjCisjICAgICAgICAjIHN1Y2Nlc3MKKyMgICAgICAgIGF1dGhfaGFuZGxlciA9IHVybGxpYjIuSFRUUEJhc2ljQXV0aEhhbmRsZXIoKQorIyAgICAgICAgYXV0aF9oYW5kbGVyLmFkZF9wYXNzd29yZCh0ZXN0X3JlYWxtLCB0ZXN0X2hvc3Rwb3J0LAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3VzZXIsIHRlc3RfcGFzc3dvcmQpCisjICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcihhdXRoX2hhbmRsZXIpCisjICAgICAgICBmID0gb3BlbmVyLm9wZW4oJ2h0dHA6Ly9sb2NhbGhvc3QvJykKKyMgICAgICAgIHJlc3BvbnNlID0gX3VybG9wZW5fd2l0aF9yZXRyeSgiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCisjCisjICAgICAgICAjIFRoZSAndXNlcmluZm8nIFVSTCBjb21wb25lbnQgaXMgZGVwcmVjYXRlZCBieSBSRkMgMzk4NiBmb3Igc2VjdXJpdHkKKyMgICAgICAgICMgcmVhc29ucywgbGV0J3Mgbm90IGltcGxlbWVudCBpdCEgIChpdCdzIGFscmVhZHkgaW1wbGVtZW50ZWQgZm9yIHByb3h5CisjICAgICAgICAjIHNwZWNpZmljYXRpb24gc3RyaW5ncyAodGhhdCBpcywgVVJMcyBvciBhdXRob3JpdGllcyBzcGVjaWZ5aW5nIGEKKyMgICAgICAgICMgcHJveHkpLCBzbyB3ZSBtdXN0IGtlZXAgdGhhdCkKKyMgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGh0dHBsaWIuSW52YWxpZFVSTCwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIHVybGxpYjIudXJsb3BlbiwgImh0dHA6Ly9ldmlsOnRoaW5nQGV4YW1wbGUuY29tIikKKworCitjbGFzcyBDbG9zZVNvY2tldFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIGltcG9ydCBodHRwbGliCisKKyAgICAgICAgIyBjYWxsaW5nIC5jbG9zZSgpIG9uIHVybGxpYjIncyByZXNwb25zZSBvYmplY3RzIHNob3VsZCBjbG9zZSB0aGUKKyAgICAgICAgIyB1bmRlcmx5aW5nIHNvY2tldAorCisgICAgICAgICMgZGVsdmUgZGVlcCBpbnRvIHJlc3BvbnNlIHRvIGZldGNoIHNvY2tldC5fc29ja2V0b2JqZWN0CisgICAgICAgIHJlc3BvbnNlID0gX3VybG9wZW5fd2l0aF9yZXRyeSgiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCisgICAgICAgIGFidXNlZF9maWxlb2JqZWN0ID0gcmVzcG9uc2UuZnAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFidXNlZF9maWxlb2JqZWN0Ll9fY2xhc3NfXyBpcyBzb2NrZXQuX2ZpbGVvYmplY3QpCisgICAgICAgIGh0dHByZXNwb25zZSA9IGFidXNlZF9maWxlb2JqZWN0Ll9zb2NrCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShodHRwcmVzcG9uc2UuX19jbGFzc19fIGlzIGh0dHBsaWIuSFRUUFJlc3BvbnNlKQorICAgICAgICBmaWxlb2JqZWN0ID0gaHR0cHJlc3BvbnNlLmZwCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlb2JqZWN0Ll9fY2xhc3NfXyBpcyBzb2NrZXQuX2ZpbGVvYmplY3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmaWxlb2JqZWN0LmNsb3NlZCkKKyAgICAgICAgcmVzcG9uc2UuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZW9iamVjdC5jbG9zZWQpCisKK2NsYXNzIE90aGVyTmV0d29ya1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIDA6ICAjIGZvciBkZWJ1Z2dpbmcKKyAgICAgICAgICAgIGltcG9ydCBsb2dnaW5nCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidGVzdF91cmxsaWIybmV0IikKKyAgICAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpKQorCisgICAgIyBYWFggVGhlIHJlc3Qgb2YgdGhlc2UgdGVzdHMgYXJlbid0IHZlcnkgZ29vZCAtLSB0aGV5IGRvbid0IGNoZWNrIG11Y2guCisgICAgIyBUaGV5IGRvIHNvbWV0aW1lcyBjYXRjaCBzb21lIG1ham9yIGRpc2FzdGVycywgdGhvdWdoLgorCisgICAgZGVmIHRlc3RfZnRwKHNlbGYpOgorICAgICAgICB1cmxzID0gWworICAgICAgICAgICAgJ2Z0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvUkVBRE1FJywKKyAgICAgICAgICAgICdmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL25vbi1leGlzdGVudC1maWxlJywKKyAgICAgICAgICAgICMnZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xlZW5veC9rZXJuZWwvdGVzdCcsCisgICAgICAgICAgICAnZnRwOi8vZ2F0ZWtlZXBlci5yZXNlYXJjaC5jb21wYXEuY29tL3B1Yi9ERUMvU1JDJworICAgICAgICAgICAgICAgICcvcmVzZWFyY2gtcmVwb3J0cy8wMFJFQURNRS1MZWdhbC1SdWxlcy1SZWdzJywKKyAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5fdGVzdF91cmxzKHVybHMsIHNlbGYuX2V4dHJhX2hhbmRsZXJzKCkpCisKKyAgICBkZWYgdGVzdF9maWxlKHNlbGYpOgorICAgICAgICBURVNURk4gPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCdoaSB0aGVyZVxuJykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdXJscyA9IFsKKyAgICAgICAgICAgICAgICAnZmlsZTonK3NhbmVwYXRobmFtZTJ1cmwob3MucGF0aC5hYnNwYXRoKFRFU1RGTikpLAorICAgICAgICAgICAgICAgICgnZmlsZTovLy9ub25zZW5zZW5hbWUvZXRjL3Bhc3N3ZCcsIE5vbmUsIHVybGxpYjIuVVJMRXJyb3IpLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfdXJscyh1cmxzLCBzZWxmLl9leHRyYV9oYW5kbGVycygpLCByZXRyeT1UcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1cmxsaWIyLnVybG9wZW4sJy4vcmVsYXRpdmVfcGF0aC90by9maWxlJykKKworICAgICMgWFhYIEZvbGxvd2luZyB0ZXN0IGRlcGVuZHMgb24gbWFjaGluZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbnRlcm5hbAorICAgICMgdG8gQ05SSS4gIE5lZWQgdG8gc2V0IHVwIGEgcHVibGljIHNlcnZlciB3aXRoIHRoZSByaWdodCBhdXRoZW50aWNhdGlvbgorICAgICMgY29uZmlndXJhdGlvbiBmb3IgdGVzdCBwdXJwb3Nlcy4KKworIyMgICAgIGRlZiB0ZXN0X2Nucmkoc2VsZik6CisjIyAgICAgICAgIGlmIHNvY2tldC5nZXRob3N0bmFtZSgpID09ICdiaXRkaWRkbGUnOgorIyMgICAgICAgICAgICAgbG9jYWxob3N0ID0gJ2JpdGRpZGRsZS5jbnJpLnJlc3Rvbi52YS51cycKKyMjICAgICAgICAgZWxpZiBzb2NrZXQuZ2V0aG9zdG5hbWUoKSA9PSAnYml0ZGlkZGxlLmNvbmNlbnRyaWMubmV0JzoKKyMjICAgICAgICAgICAgIGxvY2FsaG9zdCA9ICdsb2NhbGhvc3QnCisjIyAgICAgICAgIGVsc2U6CisjIyAgICAgICAgICAgICBsb2NhbGhvc3QgPSBOb25lCisjIyAgICAgICAgIGlmIGxvY2FsaG9zdCBpcyBub3QgTm9uZToKKyMjICAgICAgICAgICAgIHVybHMgPSBbCisjIyAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly8lcy9ldGMvcGFzc3dkJyAlIGxvY2FsaG9zdCwKKyMjICAgICAgICAgICAgICAgICAnaHR0cDovLyVzL3NpbXBsZS8nICUgbG9jYWxob3N0LAorIyMgICAgICAgICAgICAgICAgICdodHRwOi8vJXMvZGlnZXN0LycgJSBsb2NhbGhvc3QsCisjIyAgICAgICAgICAgICAgICAgJ2h0dHA6Ly8lcy9ub3QvZm91bmQuaCcgJSBsb2NhbGhvc3QsCisjIyAgICAgICAgICAgICAgICAgXQorCisjIyAgICAgICAgICAgICBiYXV0aCA9IEhUVFBCYXNpY0F1dGhIYW5kbGVyKCkKKyMjICAgICAgICAgICAgIGJhdXRoLmFkZF9wYXNzd29yZCgnYmFzaWNfdGVzdF9yZWFsbScsIGxvY2FsaG9zdCwgJ2poeWx0b24nLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCcpCisjIyAgICAgICAgICAgICBkYXV0aCA9IEhUVFBEaWdlc3RBdXRoSGFuZGxlcigpCisjIyAgICAgICAgICAgICBkYXV0aC5hZGRfcGFzc3dvcmQoJ2RpZ2VzdF90ZXN0X3JlYWxtJywgbG9jYWxob3N0LCAnamh5bHRvbicsCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3N3b3JkJykKKworIyMgICAgICAgICAgICAgc2VsZi5fdGVzdF91cmxzKHVybHMsIHNlbGYuX2V4dHJhX2hhbmRsZXJzKCkrW2JhdXRoLCBkYXV0aF0pCisKKyAgICBkZWYgdGVzdF91cmx3aXRoZnJhZyhzZWxmKToKKyAgICAgICAgdXJsd2l0aF9mcmFnID0gImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi9nbG9zc2FyeS5odG1sI2dsb3NzYXJ5IgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsd2l0aF9mcmFnKToKKyAgICAgICAgICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCh1cmx3aXRoX2ZyYWcpCisgICAgICAgICAgICByZXMgPSB1cmxsaWIyLnVybG9wZW4ocmVxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0dXJsKCksCisgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCNnbG9zc2FyeSIpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnIikKKyAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIoKQorICAgICAgICByZXMgPSBvcGVuZXIub3BlbihyZXEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcy5maWxlbm8oKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkhUVFBSZXNwb25zZSBvYmplY3Qgc2hvdWxkIHJldHVybiBhIHZhbGlkIGZpbGVubyIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByZXMuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3VzdG9tX2hlYWRlcnMoc2VsZik6CisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKKyAgICAgICAgICAgIG9wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKCkKKyAgICAgICAgICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXF1ZXN0LmhlYWRlcl9pdGVtcygpKQorICAgICAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXF1ZXN0LmhlYWRlcl9pdGVtcygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcXVlc3QuaGFzX2hlYWRlcignVXNlci1hZ2VudCcpKQorICAgICAgICAgICAgcmVxdWVzdC5hZGRfaGVhZGVyKCdVc2VyLUFnZW50JywnVGVzdC1BZ2VudCcpCisgICAgICAgICAgICBvcGVuZXIub3BlbihyZXF1ZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0LmdldF9oZWFkZXIoJ1VzZXItYWdlbnQnKSwnVGVzdC1BZ2VudCcpCisKKyAgICBkZWYgdGVzdF9zaXRlc19ub19jb25uZWN0aW9uX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIFNvbWUgc2l0ZXMgZG8gbm90IHNlbmQgQ29ubmVjdGlvbjogY2xvc2UgaGVhZGVyLgorICAgICAgICAjIFZlcmlmeSB0aGF0IHRob3NlIHdvcmsgcHJvcGVybHkuICgjaXNzdWUxMjU3NikKKworICAgICAgICBVUkwgPSAnaHR0cDovL3d3dy5pbWRiLmNvbScgIyBObyBDb25uZWN0aW9uOmNsb3NlCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChVUkwpOgorICAgICAgICAgICAgcmVxID0gdXJsbGliMi51cmxvcGVuKFVSTCkKKyAgICAgICAgICAgIHJlcyA9IHJlcS5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisKKyAgICBkZWYgX3Rlc3RfdXJscyhzZWxmLCB1cmxzLCBoYW5kbGVycywgcmV0cnk9VHJ1ZSk6CisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGltcG9ydCBsb2dnaW5nCisgICAgICAgIGRlYnVnID0gbG9nZ2luZy5nZXRMb2dnZXIoInRlc3RfdXJsbGliMiIpLmRlYnVnCisKKyAgICAgICAgdXJsb3BlbiA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKCpoYW5kbGVycykub3BlbgorICAgICAgICBpZiByZXRyeToKKyAgICAgICAgICAgIHVybG9wZW4gPSBfd3JhcF93aXRoX3JldHJ5X3RocmljZSh1cmxvcGVuLCB1cmxsaWIyLlVSTEVycm9yKQorCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodXJsLCB0dXBsZSk6CisgICAgICAgICAgICAgICAgdXJsLCByZXEsIGV4cGVjdGVkX2VyciA9IHVybAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXEgPSBleHBlY3RlZF9lcnIgPSBOb25lCisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKKyAgICAgICAgICAgICAgICBkZWJ1Zyh1cmwpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmID0gdXJsb3Blbih1cmwsIHJlcSwgVElNRU9VVCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKGVycikKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0ZWRfZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gKCJEaWRuJ3QgZ2V0IGV4cGVjdGVkIGVycm9yKHMpICVzIGZvciAlcyAlcywgZ290ICVzOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9lcnIsIHVybCwgcmVxLCB0eXBlKGVyciksIGVycikpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLCBleHBlY3RlZF9lcnIsIG1zZykKKyAgICAgICAgICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyWzBdLCBzb2NrZXQudGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICI8dGltZW91dDogJXM+IiAlIHVybAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygicmVhZCAlZCBieXRlcyIgJSBsZW4oYnVmKSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiPHRpbWVvdXQ6ICVzPiIgJSB1cmwKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBkZWJ1ZygiKioqKioqKiogbmV4dCB1cmwgY29taW5nIHVwLi4uIikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAgZGVmIF9leHRyYV9oYW5kbGVycyhzZWxmKToKKyAgICAgICAgaGFuZGxlcnMgPSBbXQorCisgICAgICAgIGNmaCA9IHVybGxpYjIuQ2FjaGVGVFBIYW5kbGVyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNmaC5jbGVhcl9jYWNoZSkKKyAgICAgICAgY2ZoLnNldFRpbWVvdXQoMSkKKyAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGNmaCkKKworICAgICAgICByZXR1cm4gaGFuZGxlcnMKKworCitjbGFzcyBUaW1lb3V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaHR0cF9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeSh1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodS5mcC5fc29jay5mcC5fc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X2h0dHBfZGVmYXVsdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5fc29jay5mcC5fc29jay5nZXR0aW1lb3V0KCksIDYwKQorCisgICAgZGVmIHRlc3RfaHR0cF9ub190aW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsLCB0aW1lb3V0PU5vbmUpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuZnAuX3NvY2suZnAuX3NvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9odHRwX3RpbWVvdXQoc2VsZik6CisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgorICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsLCB0aW1lb3V0PTEyMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5fc29jay5mcC5fc29jay5nZXR0aW1lb3V0KCksIDEyMCkKKworICAgIEZUUF9IT1NUID0gImZ0cDovL2Z0cC5taXJyb3IubmwvcHViL2dudS8iCisKKyAgICBkZWYgdGVzdF9mdHBfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5GVFBfSE9TVCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodS5mcC5mcC5fc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X2Z0cF9kZWZhdWx0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5GVFBfSE9TVCk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoc2VsZi5GVFBfSE9TVCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuZnAuX3NvY2suZ2V0dGltZW91dCgpLCA2MCkKKworICAgIGRlZiB0ZXN0X2Z0cF9ub190aW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYuRlRQX0hPU1QpOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDYwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QsIHRpbWVvdXQ9Tm9uZSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodS5mcC5mcC5fc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X2Z0cF90aW1lb3V0KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5GVFBfSE9TVCk6CisgICAgICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeShzZWxmLkZUUF9IT1NULCB0aW1lb3V0PTYwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLmZwLl9zb2NrLmdldHRpbWVvdXQoKSwgNjApCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChBdXRoVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlck5ldHdvcmtUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlU29ja2V0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXRUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4ODMzMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQpAQCAtMCwwICsxLDIxMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IHVybGxpYgoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdGltZQorCittaW1ldG9vbHMgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgibWltZXRvb2xzIiwgZGVwcmVjYXRlZD1UcnVlKQorCisKK2RlZiBfb3Blbl93aXRoX3JldHJ5KGZ1bmMsIGhvc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgIyBDb25uZWN0aW5nIHRvIHJlbW90ZSBob3N0cyBpcyBmbGFreS4gIE1ha2UgaXQgbW9yZSByb2J1c3QKKyAgICAjIGJ5IHJldHJ5aW5nIHRoZSBjb25uZWN0aW9uIHNldmVyYWwgdGltZXMuCisgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmdW5jKGhvc3QsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGxhc3RfZXhjOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UKKyAgICByYWlzZSBsYXN0X2V4YworCisKK2NsYXNzIFVSTFRpbWVvdXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIFRJTUVPVVQgPSAxMC4wCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChzZWxmLlRJTUVPVVQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorCisgICAgZGVmIHRlc3RVUkxyZWFkKHNlbGYpOgorICAgICAgICBmID0gX29wZW5fd2l0aF9yZXRyeSh1cmxsaWIudXJsb3BlbiwgImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQorICAgICAgICB4ID0gZi5yZWFkKCkKKworY2xhc3MgdXJsb3Blbk5ldHdvcmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdXJsbGliLnVybG9wZW4gdXNpbmcgdGhlIG5ldHdvcmsuCisKKyAgICBUaGVzZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICBBc3N1bWluZyB0aGF0IHRlc3RpbmcgdXNpbmcgZmlsZXMgZG9lcyBhCisgICAgZ29vZCBqb2Igb3ZlcmFsbCBvZiBzb21lIG9mIHRoZSBiYXNpYyBpbnRlcmZhY2UgZmVhdHVyZXMuICBUaGVyZSBhcmUgbm8KKyAgICB0ZXN0cyBleGVyY2lzaW5nIHRoZSBvcHRpb25hbCAnZGF0YScgYW5kICdwcm94aWVzJyBhcmd1bWVudHMuICBObyB0ZXN0cworICAgIGZvciB0cmFuc3BhcmVudCByZWRpcmVjdGlvbiBoYXZlIGJlZW4gd3JpdHRlbi4KKworICAgIHNldFVwIGlzIG5vdCB1c2VkIGZvciBhbHdheXMgY29uc3RydWN0aW5nIGEgY29ubmVjdGlvbiB0bworICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8gc2luY2UgdGhlcmUgYSBmZXcgdGVzdHMgdGhhdCBkb24ndCB1c2UgdGhhdCBhZGRyZXNzCisgICAgYW5kIG1ha2luZyBhIGNvbm5lY3Rpb24gaXMgZXhwZW5zaXZlIGVub3VnaCB0byB3YXJyYW50IG1pbmltaXppbmcgdW5uZWVkZWQKKyAgICBjb25uZWN0aW9ucy4KKworICAgICIiIgorCisgICAgZGVmIHVybG9wZW4oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gX29wZW5fd2l0aF9yZXRyeSh1cmxsaWIudXJsb3BlbiwgKmFyZ3MpCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBTaW1wbGUgdGVzdCBleHBlY3RlZCB0byBwYXNzLgorICAgICAgICBvcGVuX3VybCA9IHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCisgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiLCAiZmlsZW5vIiwgImNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICJpbmZvIiwgImdldHVybCIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIob3Blbl91cmwsIGF0dHIpLCAib2JqZWN0IHJldHVybmVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cmxvcGVuIGxhY2tzIHRoZSAlcyBhdHRyaWJ1dGUiICUgYXR0cikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZW5fdXJsLnJlYWQoKSwgImNhbGxpbmcgJ3JlYWQnIGZhaWxlZCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcGVuX3VybC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgICMgVGVzdCBib3RoIHJlYWRsaW5lIGFuZCByZWFkbGluZXMuCisgICAgICAgIG9wZW5fdXJsID0gc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lKCksIGJhc2VzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lIGRpZCBub3QgcmV0dXJuIGEgc3RyaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcGVuX3VybC5yZWFkbGluZXMoKSwgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmVzIGRpZCBub3QgcmV0dXJuIGEgbGlzdCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcGVuX3VybC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICAjIFRlc3QgJ2luZm8nLgorICAgICAgICBvcGVuX3VybCA9IHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluZm9fb2JqID0gb3Blbl91cmwuaW5mbygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcGVuX3VybC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW5mb19vYmosIG1pbWV0b29scy5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgJ2luZm8nIGlzIG5vdCBhbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbmNlIG9mIG1pbWV0b29scy5NZXNzYWdlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb19vYmouZ2V0c3VidHlwZSgpLCAiaHRtbCIpCisKKyAgICBkZWYgdGVzdF9nZXR1cmwoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHNhbWUgVVJMIGFzIG9wZW5lZCBpcyByZXR1cm5lZCBieSBnZXR1cmwuCisgICAgICAgIFVSTCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIgorICAgICAgICBvcGVuX3VybCA9IHNlbGYudXJsb3BlbihVUkwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdvdHRlbl91cmwgPSBvcGVuX3VybC5nZXR1cmwoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Blbl91cmwuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdHRlbl91cmwsIFVSTCkKKworICAgIGRlZiB0ZXN0X2dldGNvZGUoc2VsZik6CisgICAgICAgICMgdGVzdCBnZXRjb2RlKCkgd2l0aCB0aGUgZmFuY3kgb3BlbmVyIHRvIGdldCA0MDQgZXJyb3IgY29kZXMKKyAgICAgICAgVVJMID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9YWFhpbnZhbGlkWFhYIgorICAgICAgICBvcGVuX3VybCA9IHVybGxpYi5GYW5jeVVSTG9wZW5lcigpLm9wZW4oVVJMKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb2RlID0gb3Blbl91cmwuZ2V0Y29kZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcGVuX3VybC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgNDA0KQorCisgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgorICAgICAgICBpZiAoc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCkgb3IKKyAgICAgICAgICAgICAgICBub3QgaGFzYXR0cihvcywgJ2Zkb3BlbicpKToKKyAgICAgICAgICAgICMgT24gV2luZG93cywgc29ja2V0IGhhbmRsZXMgYXJlIG5vdCBmaWxlIGRlc2NyaXB0b3JzOyB0aGlzCisgICAgICAgICAgICAjIHRlc3QgY2FuJ3QgcGFzcyBvbiBXaW5kb3dzLgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgTWFrZSBzdXJlIGZkIHJldHVybmVkIGJ5IGZpbGVubyBpcyB2YWxpZC4KKyAgICAgICAgb3Blbl91cmwgPSBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQorICAgICAgICBmZCA9IG9wZW5fdXJsLmZpbGVubygpCisgICAgICAgIEZJTEUgPSBvcy5mZG9wZW4oZmQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGSUxFLnJlYWQoKSwgInJlYWRpbmcgZnJvbSBmaWxlIGNyZWF0ZWQgdXNpbmcgZmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgZmlsZW5vIGZhaWxlZCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBGSUxFLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2JhZF9hZGRyZXNzKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBwcm9wZXIgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIGNvbm5lY3RpbmcgdG8gYSBib2d1cworICAgICAgICAjIGFkZHJlc3MuCisgICAgICAgIGJvZ3VzX2RvbWFpbiA9ICJzYWRmbGtqc2FzZi5pLm52YWxpLmQiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2tldC5nZXRob3N0YnluYW1lKGJvZ3VzX2RvbWFpbikKKyAgICAgICAgZXhjZXB0IHNvY2tldC5nYWllcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhpcyBoYXBwZW5zIHdpdGggc29tZSBvdmVyemVhbG91cyBETlMgcHJvdmlkZXJzIHN1Y2ggYXMgT3BlbkROUworICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgc2hvdWxkIG5vdCByZXNvbHZlIGZvciB0ZXN0IHRvIHdvcmsiICUgYm9ndXNfZG9tYWluKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNGIHBhdGNoIDgwOTkxNTogIEluIFNlcCAyMDAzLCBWZXJpU2lnbiBzdGFydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgaGlnaGphY2tpbmcgaW52YWxpZCAuY29tIGFuZCAubmV0IGFkZHJlc3NlcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJvb3N0IHRyYWZmaWMgdG8gdGhlaXIgb3duIHNpdGUuICBUaGlzIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFydGVkIGZhaWxpbmcgdGhlbi4gIE9uZSBob3BlcyB0aGUgLmludmFsaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb21haW4gd2lsbCBiZSBzcGFyZWQgdG8gc2VydmUgaXRzIGRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwdXJwb3NlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVybGxpYi51cmxvcGVuLCAiaHR0cDovL3d3dy5zYWRmbGtqc2FzYWRmLmNvbS8iKQorICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxsaWIudXJsb3BlbiwgImh0dHA6Ly9zYWRmbGtqc2FzZi5pLm52YWxpLmQvIikKKworY2xhc3MgdXJscmV0cmlldmVOZXR3b3JrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHVybGxpYi51cmxyZXRyaWV2ZSB1c2luZyB0aGUgbmV0d29yay4iIiIKKworICAgIGRlZiB1cmxyZXRyaWV2ZShzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBfb3Blbl93aXRoX3JldHJ5KHVybGxpYi51cmxyZXRyaWV2ZSwgKmFyZ3MpCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGJhc2ljIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIGZpbGVfbG9jYXRpb24saW5mbyA9IHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZV9sb2NhdGlvbiksICJmaWxlIGxvY2F0aW9uIHJldHVybmVkIGJ5IgorICAgICAgICAgICAgICAgICAgICAgICAgIiB1cmxyZXRyaWV2ZSBpcyBub3QgYSB2YWxpZCBwYXRoIikKKyAgICAgICAgRklMRSA9IGZpbGUoZmlsZV9sb2NhdGlvbikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZJTEUucmVhZCgpLCAicmVhZGluZyBmcm9tIHRoZSBmaWxlIGxvY2F0aW9uIHJldHVybmVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgYnkgdXJscmV0cmlldmUgZmFpbGVkIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIEZJTEUuY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKGZpbGVfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjaWZpZWRfcGF0aChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBzcGVjaWZ5aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0byB3cml0ZSB0byB3b3Jrcy4KKyAgICAgICAgZmlsZV9sb2NhdGlvbixpbmZvID0gc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5weXRob24ub3JnLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2xvY2F0aW9uLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZV9sb2NhdGlvbikpCisgICAgICAgIEZJTEUgPSBmaWxlKGZpbGVfbG9jYXRpb24pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGSUxFLnJlYWQoKSwgInJlYWRpbmcgZnJvbSB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRklMRS5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsoZmlsZV9sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2hlYWRlcihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgaGVhZGVyIHJldHVybmVkIGFzIDJuZCB2YWx1ZSBmcm9tIHVybHJldHJpZXZlIGlzIGdvb2QuCisgICAgICAgIGZpbGVfbG9jYXRpb24sIGhlYWRlciA9IHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQorICAgICAgICBvcy51bmxpbmsoZmlsZV9sb2NhdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGhlYWRlciwgbWltZXRvb2xzLk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBtaW1ldG9vbHMuTWVzc2FnZSIpCisKKyAgICBkZWYgdGVzdF9kYXRhX2hlYWRlcihzZWxmKToKKyAgICAgICAgbG9nbyA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvY29tbXVuaXR5L2xvZ29zL3B5dGhvbi1sb2dvLW1hc3Rlci12My1UTS5wbmciCisgICAgICAgIGZpbGVfbG9jYXRpb24sIGZpbGVoZWFkZXJzID0gc2VsZi51cmxyZXRyaWV2ZShsb2dvKQorICAgICAgICBvcy51bmxpbmsoZmlsZV9sb2NhdGlvbikKKyAgICAgICAgZGF0ZXZhbHVlID0gZmlsZWhlYWRlcnMuZ2V0aGVhZGVyKCdEYXRlJykKKyAgICAgICAgZGF0ZWZvcm1hdCA9ICclYSwgJWQgJWIgJVkgJUg6JU06JVMgR01UJworICAgICAgICB0cnk6CisgICAgICAgICAgICB0aW1lLnN0cnB0aW1lKGRhdGV2YWx1ZSwgZGF0ZWZvcm1hdCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0RhdGUgdmFsdWUgbm90IGluICVyIGZvcm1hdCcsIGRhdGVmb3JtYXQpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCJ1cmxsaWIudXJsb3Blbi4uIGhhcyBiZWVuIHJlbW92ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChVUkxUaW1lb3V0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxvcGVuTmV0d29ya1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHJldHJpZXZlTmV0d29ya1Rlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWJmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQpAQCAtMCwwICsxLDU3MSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdXJscGFyc2UKKworUkZDMTgwOF9CQVNFID0gImh0dHA6Ly9hL2IvYy9kO3A/cSNmIgorUkZDMjM5Nl9CQVNFID0gImh0dHA6Ly9hL2IvYy9kO3A/cSIKK1JGQzM5ODZfQkFTRSA9ICdodHRwOi8vYS9iL2MvZDtwP3EnCitTSU1QTEVfQkFTRSAgPSAnaHR0cDovL2EvYi9jL2QnCisKKyMgQSBsaXN0IG9mIHRlc3QgY2FzZXMuICBFYWNoIHRlc3QgY2FzZSBpcyBhIHR3by10dXBsZSB0aGF0IGNvbnRhaW5zCisjIGEgc3RyaW5nIHdpdGggdGhlIHF1ZXJ5IGFuZCBhIGRpY3Rpb25hcnkgd2l0aCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgorCitwYXJzZV9xc2xfdGVzdF9jYXNlcyA9IFsKKyAgICAoIiIsIFtdKSwKKyAgICAoIiYiLCBbXSksCisgICAgKCImJiIsIFtdKSwKKyAgICAoIj0iLCBbKCcnLCAnJyldKSwKKyAgICAoIj1hIiwgWygnJywgJ2EnKV0pLAorICAgICgiYSIsIFsoJ2EnLCAnJyldKSwKKyAgICAoImE9IiwgWygnYScsICcnKV0pLAorICAgICgiYT0iLCBbKCdhJywgJycpXSksCisgICAgKCImYT1iIiwgWygnYScsICdiJyldKSwKKyAgICAoImE9YStiJmI9YitjIiwgWygnYScsICdhIGInKSwgKCdiJywgJ2IgYycpXSksCisgICAgKCJhPTEmYT0yIiwgWygnYScsICcxJyksICgnYScsICcyJyldKSwKK10KKworY2xhc3MgVXJsUGFyc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tSb3VuZHRyaXBzKHNlbGYsIHVybCwgcGFyc2VkLCBzcGxpdCk6CisgICAgICAgIHJlc3VsdCA9IHVybHBhcnNlLnVybHBhcnNlKHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHBhcnNlZCkKKyAgICAgICAgdCA9IChyZXN1bHQuc2NoZW1lLCByZXN1bHQubmV0bG9jLCByZXN1bHQucGF0aCwKKyAgICAgICAgICAgICByZXN1bHQucGFyYW1zLCByZXN1bHQucXVlcnksIHJlc3VsdC5mcmFnbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBwYXJzZWQpCisgICAgICAgICMgcHV0IGl0IGJhY2sgdG9nZXRoZXIgYW5kIGl0IHNob3VsZCBiZSB0aGUgc2FtZQorICAgICAgICByZXN1bHQyID0gdXJscGFyc2UudXJsdW5wYXJzZShyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0MiwgdXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDIsIHJlc3VsdC5nZXR1cmwoKSkKKworICAgICAgICAjIHRoZSByZXN1bHQgb2YgZ2V0dXJsKCkgaXMgYSBmaXhwb2ludDsgd2UgY2FuIGFsd2F5cyBwYXJzZSBpdAorICAgICAgICAjIGFnYWluIHRvIGdldCB0aGUgc2FtZSByZXN1bHQ6CisgICAgICAgIHJlc3VsdDMgPSB1cmxwYXJzZS51cmxwYXJzZShyZXN1bHQuZ2V0dXJsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5nZXR1cmwoKSwgcmVzdWx0LmdldHVybCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMsICAgICAgICAgIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLnNjaGVtZSwgICByZXN1bHQuc2NoZW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMubmV0bG9jLCAgIHJlc3VsdC5uZXRsb2MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5wYXRoLCAgICAgcmVzdWx0LnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5wYXJhbXMsICAgcmVzdWx0LnBhcmFtcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLnF1ZXJ5LCAgICByZXN1bHQucXVlcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5mcmFnbWVudCwgcmVzdWx0LmZyYWdtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMudXNlcm5hbWUsIHJlc3VsdC51c2VybmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLnBhc3N3b3JkLCByZXN1bHQucGFzc3dvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5ob3N0bmFtZSwgcmVzdWx0Lmhvc3RuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMucG9ydCwgICAgIHJlc3VsdC5wb3J0KQorCisgICAgICAgICMgY2hlY2sgdGhlIHJvdW5kdHJpcCB1c2luZyB1cmxzcGxpdCgpIGFzIHdlbGwKKyAgICAgICAgcmVzdWx0ID0gdXJscGFyc2UudXJsc3BsaXQodXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc3BsaXQpCisgICAgICAgIHQgPSAocmVzdWx0LnNjaGVtZSwgcmVzdWx0Lm5ldGxvYywgcmVzdWx0LnBhdGgsCisgICAgICAgICAgICAgcmVzdWx0LnF1ZXJ5LCByZXN1bHQuZnJhZ21lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc3BsaXQpCisgICAgICAgIHJlc3VsdDIgPSB1cmxwYXJzZS51cmx1bnNwbGl0KHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQyLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0MiwgcmVzdWx0LmdldHVybCgpKQorCisgICAgICAgICMgY2hlY2sgdGhlIGZpeHBvaW50IHByb3BlcnR5IG9mIHJlLXBhcnNpbmcgdGhlIHJlc3VsdCBvZiBnZXR1cmwoKQorICAgICAgICByZXN1bHQzID0gdXJscGFyc2UudXJsc3BsaXQocmVzdWx0LmdldHVybCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMuZ2V0dXJsKCksIHJlc3VsdC5nZXR1cmwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLCAgICAgICAgICByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5zY2hlbWUsICAgcmVzdWx0LnNjaGVtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLm5ldGxvYywgICByZXN1bHQubmV0bG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMucGF0aCwgICAgIHJlc3VsdC5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMucXVlcnksICAgIHJlc3VsdC5xdWVyeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLmZyYWdtZW50LCByZXN1bHQuZnJhZ21lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My51c2VybmFtZSwgcmVzdWx0LnVzZXJuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMucGFzc3dvcmQsIHJlc3VsdC5wYXNzd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLmhvc3RuYW1lLCByZXN1bHQuaG9zdG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5wb3J0LCAgICAgcmVzdWx0LnBvcnQpCisKKyAgICBkZWYgdGVzdF9xc2woc2VsZik6CisgICAgICAgIGZvciBvcmlnLCBleHBlY3QgaW4gcGFyc2VfcXNsX3Rlc3RfY2FzZXM6CisgICAgICAgICAgICByZXN1bHQgPSB1cmxwYXJzZS5wYXJzZV9xc2wob3JpZywga2VlcF9ibGFua192YWx1ZXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3QsICJFcnJvciBwYXJzaW5nICVyIiAlIG9yaWcpCisgICAgICAgICAgICBleHBlY3Rfd2l0aG91dF9ibGFua3MgPSBbdiBmb3IgdiBpbiBleHBlY3QgaWYgbGVuKHZbMV0pXQorICAgICAgICAgICAgcmVzdWx0ID0gdXJscGFyc2UucGFyc2VfcXNsKG9yaWcsIGtlZXBfYmxhbmtfdmFsdWVzPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdF93aXRob3V0X2JsYW5rcywKKyAgICAgICAgICAgICAgICAgICAgIkVycm9yIHBhcnNpbmcgJXIiICUgb3JpZykKKworCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwcyhzZWxmKToKKyAgICAgICAgdGVzdGNhc2VzID0gWworICAgICAgICAgICAgKCdmaWxlOi8vL3RtcC9qdW5rLnR4dCcsCisgICAgICAgICAgICAgKCdmaWxlJywgJycsICcvdG1wL2p1bmsudHh0JywgJycsICcnLCAnJyksCisgICAgICAgICAgICAgKCdmaWxlJywgJycsICcvdG1wL2p1bmsudHh0JywgJycsICcnKSksCisgICAgICAgICAgICAoJ2ltYXA6Ly9tYWlsLnB5dGhvbi5vcmcvbWJveDEnLAorICAgICAgICAgICAgICgnaW1hcCcsICdtYWlsLnB5dGhvbi5vcmcnLCAnL21ib3gxJywgJycsICcnLCAnJyksCisgICAgICAgICAgICAgKCdpbWFwJywgJ21haWwucHl0aG9uLm9yZycsICcvbWJveDEnLCAnJywgJycpKSwKKyAgICAgICAgICAgICgnbW1zOi8vd21zLnN5cy5oaW5ldC5uZXQvY3RzL0RyYW1hLzA5MDA2MjUxMTAwLmFzZicsCisgICAgICAgICAgICAgKCdtbXMnLCAnd21zLnN5cy5oaW5ldC5uZXQnLCAnL2N0cy9EcmFtYS8wOTAwNjI1MTEwMC5hc2YnLAorICAgICAgICAgICAgICAnJywgJycsICcnKSwKKyAgICAgICAgICAgICAoJ21tcycsICd3bXMuc3lzLmhpbmV0Lm5ldCcsICcvY3RzL0RyYW1hLzA5MDA2MjUxMTAwLmFzZicsCisgICAgICAgICAgICAgICcnLCAnJykpLAorICAgICAgICAgICAgKCduZnM6Ly9zZXJ2ZXIvcGF0aC90by9maWxlLnR4dCcsCisgICAgICAgICAgICAgKCduZnMnLCAnc2VydmVyJywgJy9wYXRoL3RvL2ZpbGUudHh0JywgICcnLCAnJywgJycpLAorICAgICAgICAgICAgICgnbmZzJywgJ3NlcnZlcicsICcvcGF0aC90by9maWxlLnR4dCcsICcnLCAnJykpLAorICAgICAgICAgICAgKCdzdm4rc3NoOi8vc3ZuLnpvcGUub3JnL3JlcG9zL21haW4vWkNvbmZpZy90cnVuay8nLAorICAgICAgICAgICAgICgnc3ZuK3NzaCcsICdzdm4uem9wZS5vcmcnLCAnL3JlcG9zL21haW4vWkNvbmZpZy90cnVuay8nLAorICAgICAgICAgICAgICAnJywgJycsICcnKSwKKyAgICAgICAgICAgICAoJ3N2bitzc2gnLCAnc3ZuLnpvcGUub3JnJywgJy9yZXBvcy9tYWluL1pDb25maWcvdHJ1bmsvJywKKyAgICAgICAgICAgICAgJycsICcnKSksCisgICAgICAgICAgICAoJ2dpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS91c2VyL3Byb2plY3QuZ2l0JywKKyAgICAgICAgICAgICgnZ2l0K3NzaCcsICdnaXRAZ2l0aHViLmNvbScsJy91c2VyL3Byb2plY3QuZ2l0JywKKyAgICAgICAgICAgICAnJywnJywnJyksCisgICAgICAgICAgICAoJ2dpdCtzc2gnLCAnZ2l0QGdpdGh1Yi5jb20nLCcvdXNlci9wcm9qZWN0LmdpdCcsCisgICAgICAgICAgICAgJycsICcnKSkKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHVybCwgcGFyc2VkLCBzcGxpdCBpbiB0ZXN0Y2FzZXM6CisgICAgICAgICAgICBzZWxmLmNoZWNrUm91bmR0cmlwcyh1cmwsIHBhcnNlZCwgc3BsaXQpCisKKyAgICBkZWYgdGVzdF9odHRwX3JvdW5kdHJpcHMoc2VsZik6CisgICAgICAgICMgdXJscGFyc2UudXJsc3BsaXQgdHJlYXRzICdodHRwOicgYXMgYW4gb3B0aW1pemVkIHNwZWNpYWwgY2FzZSwKKyAgICAgICAgIyBzbyB3ZSB0ZXN0IGJvdGggJ2h0dHA6JyBhbmQgJ2h0dHBzOicgaW4gYWxsIHRoZSBmb2xsb3dpbmcuCisgICAgICAgICMgVGhyZWUgY2hlZXJzIGZvciB3aGl0ZSBib3gga25vd2xlZGdlIQorICAgICAgICB0ZXN0Y2FzZXMgPSBbCisgICAgICAgICAgICAoJzovL3d3dy5weXRob24ub3JnJywKKyAgICAgICAgICAgICAoJ3d3dy5weXRob24ub3JnJywgJycsICcnLCAnJywgJycpLAorICAgICAgICAgICAgICgnd3d3LnB5dGhvbi5vcmcnLCAnJywgJycsICcnKSksCisgICAgICAgICAgICAoJzovL3d3dy5weXRob24ub3JnI2FiYycsCisgICAgICAgICAgICAgKCd3d3cucHl0aG9uLm9yZycsICcnLCAnJywgJycsICdhYmMnKSwKKyAgICAgICAgICAgICAoJ3d3dy5weXRob24ub3JnJywgJycsICcnLCAnYWJjJykpLAorICAgICAgICAgICAgKCc6Ly93d3cucHl0aG9uLm9yZz9xPWFiYycsCisgICAgICAgICAgICAgKCd3d3cucHl0aG9uLm9yZycsICcnLCAnJywgJ3E9YWJjJywgJycpLAorICAgICAgICAgICAgICgnd3d3LnB5dGhvbi5vcmcnLCAnJywgJ3E9YWJjJywgJycpKSwKKyAgICAgICAgICAgICgnOi8vd3d3LnB5dGhvbi5vcmcvI2FiYycsCisgICAgICAgICAgICAgKCd3d3cucHl0aG9uLm9yZycsICcvJywgJycsICcnLCAnYWJjJyksCisgICAgICAgICAgICAgKCd3d3cucHl0aG9uLm9yZycsICcvJywgJycsICdhYmMnKSksCisgICAgICAgICAgICAoJzovL2EvYi9jL2Q7cD9xI2YnLAorICAgICAgICAgICAgICgnYScsICcvYi9jL2QnLCAncCcsICdxJywgJ2YnKSwKKyAgICAgICAgICAgICAoJ2EnLCAnL2IvYy9kO3AnLCAncScsICdmJykpLAorICAgICAgICAgICAgXQorICAgICAgICBmb3Igc2NoZW1lIGluICgnaHR0cCcsICdodHRwcycpOgorICAgICAgICAgICAgZm9yIHVybCwgcGFyc2VkLCBzcGxpdCBpbiB0ZXN0Y2FzZXM6CisgICAgICAgICAgICAgICAgdXJsID0gc2NoZW1lICsgdXJsCisgICAgICAgICAgICAgICAgcGFyc2VkID0gKHNjaGVtZSwpICsgcGFyc2VkCisgICAgICAgICAgICAgICAgc3BsaXQgPSAoc2NoZW1lLCkgKyBzcGxpdAorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tSb3VuZHRyaXBzKHVybCwgcGFyc2VkLCBzcGxpdCkKKworICAgIGRlZiBjaGVja0pvaW4oc2VsZiwgYmFzZSwgcmVsdXJsLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJsam9pbihiYXNlLCByZWx1cmwpLCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYmFzZSwgcmVsdXJsLCBleHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdF91bnBhcnNlX3BhcnNlKHNlbGYpOgorICAgICAgICBmb3IgdSBpbiBbJ1B5dGhvbicsICcuL1B5dGhvbicsJ3gtbmV3c2NoZW1lOi8vZm9vLmNvbS9zdHVmZicsJ3g6Ly95JywneDoveScsJ3g6LycsJy8nLF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHVuc3BsaXQodXJscGFyc2UudXJsc3BsaXQodSkpLCB1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmx1bnBhcnNlKHVybHBhcnNlLnVybHBhcnNlKHUpKSwgdSkKKworICAgIGRlZiB0ZXN0X1JGQzE4MDgoc2VsZik6CisgICAgICAgICMgIm5vcm1hbCIgY2FzZXMgZnJvbSBSRkMgMTgwODoKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZzpoJywgJ2c6aCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJ2cnLCAnaHR0cDovL2EvYi9jL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuL2cnLCAnaHR0cDovL2EvYi9jL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnLycsICdodHRwOi8vYS9iL2MvZy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcvZycsICdodHRwOi8vYS9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLy9nJywgJ2h0dHA6Ly9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZz95JywgJ2h0dHA6Ly9hL2IvYy9nP3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnP3kvLi94JywgJ2h0dHA6Ly9hL2IvYy9nP3kvLi94JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnI3MnLCAnaHR0cDovL2EvYi9jL2Q7cD9xI3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnI3MnLCAnaHR0cDovL2EvYi9jL2cjcycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJ2cjcy8uL3gnLCAnaHR0cDovL2EvYi9jL2cjcy8uL3gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnP3kjcycsICdodHRwOi8vYS9iL2MvZz95I3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnO3gnLCAnaHR0cDovL2EvYi9jL2c7eCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJ2c7eD95I3MnLCAnaHR0cDovL2EvYi9jL2c7eD95I3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuJywgJ2h0dHA6Ly9hL2IvYy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLycsICdodHRwOi8vYS9iL2MvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi4nLCAnaHR0cDovL2EvYi8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi8nLCAnaHR0cDovL2EvYi8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi9nJywgJ2h0dHA6Ly9hL2IvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy4uLy4uJywgJ2h0dHA6Ly9hLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy4uLy4uLycsICdodHRwOi8vYS8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi8uLi9nJywgJ2h0dHA6Ly9hL2cnKQorCisgICAgICAgICMgImFibm9ybWFsIiBjYXNlcyBmcm9tIFJGQyAxODA4OgorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcnLCAnaHR0cDovL2EvYi9jL2Q7cD9xI2YnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi8uLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uLy4uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcvLi9nJywgJ2h0dHA6Ly9hLy4vZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy8uLi9nJywgJ2h0dHA6Ly9hLy4uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnLicsICdodHRwOi8vYS9iL2MvZy4nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuZycsICdodHRwOi8vYS9iL2MvLmcnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnLi4nLCAnaHR0cDovL2EvYi9jL2cuLicpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy4uZycsICdodHRwOi8vYS9iL2MvLi5nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi8uLi9nJywgJ2h0dHA6Ly9hL2IvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy4vZy8uJywgJ2h0dHA6Ly9hL2IvYy9nLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJ2cvLi9oJywgJ2h0dHA6Ly9hL2IvYy9nL2gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnLy4uL2gnLCAnaHR0cDovL2EvYi9jL2gnKQorCisgICAgICAgICMgUkZDIDE4MDggYW5kIFJGQyAxNjMwIGRpc2FncmVlIG9uIHRoZXNlIChhY2NvcmRpbmcgdG8gUkZDIDE4MDgpLAorICAgICAgICAjIHNvIHdlJ2xsIG5vdCBhY3R1YWxseSBydW4gdGhlc2UgdGVzdHMgKHdoaWNoIGV4cGVjdCAxODA4IGJlaGF2aW9yKS4KKyAgICAgICAgI3NlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJ2h0dHA6ZycsICdodHRwOmcnKQorICAgICAgICAjc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnaHR0cDonLCAnaHR0cDonKQorCisgICAgZGVmIHRlc3RfUkZDMjM2OChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMTQ2NzogcGF0aCB0aGF0IHN0YXJ0cyB3aXRoIGEgbnVtYmVyIGlzIG5vdCBwYXJzZWQgY29ycmVjdGx5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoJ21haWx0bzoxMzM3QGV4YW1wbGUub3JnJyksCisgICAgICAgICAgICAgICAgKCdtYWlsdG8nLCAnJywgJzEzMzdAZXhhbXBsZS5vcmcnLCAnJywgJycsICcnKSkKKworICAgIGRlZiB0ZXN0X1JGQzIzOTYoc2VsZik6CisgICAgICAgICMgY2FzZXMgZnJvbSBSRkMgMjM5NgorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnOmgnLCAnZzpoJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZycsICdodHRwOi8vYS9iL2MvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy4vZycsICdodHRwOi8vYS9iL2MvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2cvJywgJ2h0dHA6Ly9hL2IvYy9nLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy9nJywgJ2h0dHA6Ly9hL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcvL2cnLCAnaHR0cDovL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnP3knLCAnaHR0cDovL2EvYi9jL2c/eScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJyNzJywgJ2h0dHA6Ly9hL2IvYy9kO3A/cSNzJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZyNzJywgJ2h0dHA6Ly9hL2IvYy9nI3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnP3kjcycsICdodHRwOi8vYS9iL2MvZz95I3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnO3gnLCAnaHR0cDovL2EvYi9jL2c7eCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2c7eD95I3MnLCAnaHR0cDovL2EvYi9jL2c7eD95I3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuJywgJ2h0dHA6Ly9hL2IvYy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLycsICdodHRwOi8vYS9iL2MvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi4nLCAnaHR0cDovL2EvYi8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8nLCAnaHR0cDovL2EvYi8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi9nJywgJ2h0dHA6Ly9hL2IvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy4uLy4uJywgJ2h0dHA6Ly9hLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy4uLy4uLycsICdodHRwOi8vYS8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8uLi9nJywgJ2h0dHA6Ly9hL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcnLCBSRkMyMzk2X0JBU0UpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy4uLy4uLy4uL2cnLCAnaHR0cDovL2EvLi4vZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy4uLy4uLy4uLy4uL2cnLCAnaHR0cDovL2EvLi4vLi4vZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy8uL2cnLCAnaHR0cDovL2EvLi9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLy4uL2cnLCAnaHR0cDovL2EvLi4vZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2cuJywgJ2h0dHA6Ly9hL2IvYy9nLicpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy5nJywgJ2h0dHA6Ly9hL2IvYy8uZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2cuLicsICdodHRwOi8vYS9iL2MvZy4uJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi5nJywgJ2h0dHA6Ly9hL2IvYy8uLmcnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLy4uL2cnLCAnaHR0cDovL2EvYi9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi9nLy4nLCAnaHR0cDovL2EvYi9jL2cvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZy8uL2gnLCAnaHR0cDovL2EvYi9jL2cvaCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2cvLi4vaCcsICdodHRwOi8vYS9iL2MvaCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2c7eD0xLy4veScsICdodHRwOi8vYS9iL2MvZzt4PTEveScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2c7eD0xLy4uL3knLCAnaHR0cDovL2EvYi9jL3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnP3kvLi94JywgJ2h0dHA6Ly9hL2IvYy9nP3kvLi94JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZz95Ly4uL3gnLCAnaHR0cDovL2EvYi9jL2c/eS8uLi94JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZyNzLy4veCcsICdodHRwOi8vYS9iL2MvZyNzLy4veCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2cjcy8uLi94JywgJ2h0dHA6Ly9hL2IvYy9nI3MvLi4veCcpCisKKyAgICBkZWYgdGVzdF9SRkMzOTg2KHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FzZXMgZnJvbSBSRkMzOTg2CisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJz95JywnaHR0cDovL2EvYi9jL2Q7cD95JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnO3gnLCAnaHR0cDovL2EvYi9jLzt4JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZzpoJywnZzpoJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZycsJ2h0dHA6Ly9hL2IvYy9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi9nJywnaHR0cDovL2EvYi9jL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnLycsJ2h0dHA6Ly9hL2IvYy9nLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy9nJywnaHR0cDovL2EvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy8vZycsJ2h0dHA6Ly9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnP3knLCdodHRwOi8vYS9iL2MvZDtwP3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnP3knLCdodHRwOi8vYS9iL2MvZz95JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnI3MnLCdodHRwOi8vYS9iL2MvZDtwP3EjcycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2cjcycsJ2h0dHA6Ly9hL2IvYy9nI3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnP3kjcycsJ2h0dHA6Ly9hL2IvYy9nP3kjcycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJzt4JywnaHR0cDovL2EvYi9jLzt4JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZzt4JywnaHR0cDovL2EvYi9jL2c7eCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2c7eD95I3MnLCdodHRwOi8vYS9iL2MvZzt4P3kjcycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJycsJ2h0dHA6Ly9hL2IvYy9kO3A/cScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4nLCdodHRwOi8vYS9iL2MvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi8nLCdodHRwOi8vYS9iL2MvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi4nLCdodHRwOi8vYS9iLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4uLycsJ2h0dHA6Ly9hL2IvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi4vZycsJ2h0dHA6Ly9hL2IvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4uLy4uJywnaHR0cDovL2EvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi4vLi4vJywnaHR0cDovL2EvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi4vLi4vZycsJ2h0dHA6Ly9hL2cnKQorCisgICAgICAgICNBYm5vcm1hbCBFeGFtcGxlcworCisgICAgICAgICMgVGhlICdhYm5vcm1hbCBzY2VuYXJpb3MnIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBSRkMyOTg2IHBhcnNpbmcKKyAgICAgICAgIyBUZXN0cyBhcmUgaGVyZSBmb3IgcmVmZXJlbmNlLgorCisgICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuLi8uLi8uLi9nJywnaHR0cDovL2EvZycpCisgICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuLi8uLi8uLi8uLi9nJywnaHR0cDovL2EvZycpCisgICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcvLi9nJywnaHR0cDovL2EvZycpCisgICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcvLi4vZycsJ2h0dHA6Ly9hL2cnKQorCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2cuJywnaHR0cDovL2EvYi9jL2cuJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLmcnLCdodHRwOi8vYS9iL2MvLmcnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnLi4nLCdodHRwOi8vYS9iL2MvZy4uJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi5nJywnaHR0cDovL2EvYi9jLy4uZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4vLi4vZycsJ2h0dHA6Ly9hL2IvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4vZy8uJywnaHR0cDovL2EvYi9jL2cvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZy8uL2gnLCdodHRwOi8vYS9iL2MvZy9oJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZy8uLi9oJywnaHR0cDovL2EvYi9jL2gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnO3g9MS8uL3knLCdodHRwOi8vYS9iL2MvZzt4PTEveScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2c7eD0xLy4uL3knLCdodHRwOi8vYS9iL2MveScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2c/eS8uL3gnLCdodHRwOi8vYS9iL2MvZz95Ly4veCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2c/eS8uLi94JywnaHR0cDovL2EvYi9jL2c/eS8uLi94JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZyNzLy4veCcsJ2h0dHA6Ly9hL2IvYy9nI3MvLi94JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZyNzLy4uL3gnLCdodHRwOi8vYS9iL2MvZyNzLy4uL3gnKQorICAgICAgICAjc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnaHR0cDpnJywnaHR0cDpnJykgIyBzdHJpY3QgcGFyc2VyCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2h0dHA6ZycsJ2h0dHA6Ly9hL2IvYy9nJykgIyByZWxheGVkIHBhcnNlcgorCisgICAgICAgICMgVGVzdCBmb3IgaXNzdWU5NzIxCisgICAgICAgIHNlbGYuY2hlY2tKb2luKCdodHRwOi8vYS9iL2MvZGUnLCAnO3gnLCdodHRwOi8vYS9iL2MvO3gnKQorCisgICAgZGVmIHRlc3RfdXJsam9pbnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnZzpoJywnZzpoJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdodHRwOmcnLCdodHRwOi8vYS9iL2MvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnaHR0cDonLCdodHRwOi8vYS9iL2MvZCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnZycsJ2h0dHA6Ly9hL2IvYy9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuL2cnLCdodHRwOi8vYS9iL2MvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnZy8nLCdodHRwOi8vYS9iL2MvZy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy9nJywnaHR0cDovL2EvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLy9nJywnaHR0cDovL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJz95JywnaHR0cDovL2EvYi9jL2Q/eScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnZz95JywnaHR0cDovL2EvYi9jL2c/eScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnZz95Ly4veCcsJ2h0dHA6Ly9hL2IvYy9nP3kvLi94JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuJywnaHR0cDovL2EvYi9jLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi8nLCdodHRwOi8vYS9iL2MvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuLicsJ2h0dHA6Ly9hL2IvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuLi8nLCdodHRwOi8vYS9iLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi4vZycsJ2h0dHA6Ly9hL2IvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi4vLi4nLCdodHRwOi8vYS8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy4uLy4uL2cnLCdodHRwOi8vYS9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuLi8uLi8uLi9nJywnaHR0cDovL2EvLi4vZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi8uLi9nJywnaHR0cDovL2EvYi9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuL2cvLicsJ2h0dHA6Ly9hL2IvYy9nLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLy4vZycsJ2h0dHA6Ly9hLy4vZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnZy8uL2gnLCdodHRwOi8vYS9iL2MvZy9oJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdnLy4uL2gnLCdodHRwOi8vYS9iL2MvaCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnaHR0cDpnJywnaHR0cDovL2EvYi9jL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2h0dHA6JywnaHR0cDovL2EvYi9jL2QnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2h0dHA6P3knLCdodHRwOi8vYS9iL2MvZD95JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdodHRwOmc/eScsJ2h0dHA6Ly9hL2IvYy9nP3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2h0dHA6Zz95Ly4veCcsJ2h0dHA6Ly9hL2IvYy9nP3kvLi94JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oJ2h0dHA6Ly8vJywgJy4uJywnaHR0cDovLy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbignJywgJ2h0dHA6Ly9hL2IvYy9nP3kvLi94JywnaHR0cDovL2EvYi9jL2c/eS8uL3gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbignJywgJ2h0dHA6Ly9hLy4vZycsICdodHRwOi8vYS8uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbignc3ZuOi8vcGF0aHRvcmVwby9kaXIxJywnZGlyMicsJ3N2bjovL3BhdGh0b3JlcG8vZGlyMicpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKCdzdm4rc3NoOi8vcGF0aHRvcmVwby9kaXIxJywnZGlyMicsJ3N2bitzc2g6Ly9wYXRodG9yZXBvL2RpcjInKQorCisgICAgZGVmIHRlc3RfUkZDMjczMihzZWxmKToKKyAgICAgICAgZm9yIHVybCwgaG9zdG5hbWUsIHBvcnQgaW4gWworICAgICAgICAgICAgKCdodHRwOi8vVGVzdC5weXRob24ub3JnOjU0MzIvZm9vLycsICd0ZXN0LnB5dGhvbi5vcmcnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovLzEyLjM0LjU2Ljc4OjU0MzIvZm9vLycsICcxMi4zNC41Ni43OCcsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vWzo6MV06NTQzMi9mb28vJywgJzo6MScsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vW2RlYWQ6YmVlZjo6MV06NTQzMi9mb28vJywgJ2RlYWQ6YmVlZjo6MScsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vW2RlYWQ6YmVlZjo6XTo1NDMyL2Zvby8nLCAnZGVhZDpiZWVmOjonLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OEZBMzpkZWFmOmZlZWRdOjU0MzIvZm9vLycsCisgICAgICAgICAgICAgJ2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4ZmEzOmRlYWY6ZmVlZCcsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vWzo6MTIuMzQuNTYuNzhdOjU0MzIvZm9vLycsICc6OjEyLjM0LjU2Ljc4JywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bOjpmZmZmOjEyLjM0LjU2Ljc4XTo1NDMyL2Zvby8nLAorICAgICAgICAgICAgICc6OmZmZmY6MTIuMzQuNTYuNzgnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1Rlc3QucHl0aG9uLm9yZy9mb28vJywgJ3Rlc3QucHl0aG9uLm9yZycsIE5vbmUpLAorICAgICAgICAgICAgKCdodHRwOi8vMTIuMzQuNTYuNzgvZm9vLycsICcxMi4zNC41Ni43OCcsIE5vbmUpLAorICAgICAgICAgICAgKCdodHRwOi8vWzo6MV0vZm9vLycsICc6OjEnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6OjFdL2Zvby8nLCAnZGVhZDpiZWVmOjoxJywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOjpdL2Zvby8nLCAnZGVhZDpiZWVmOjonLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OEZBMzpkZWFmOmZlZWRdL2Zvby8nLAorICAgICAgICAgICAgICdkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OGZhMzpkZWFmOmZlZWQnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjEyLjM0LjU2Ljc4XS9mb28vJywgJzo6MTIuMzQuNTYuNzgnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OmZmZmY6MTIuMzQuNTYuNzhdL2Zvby8nLAorICAgICAgICAgICAgICc6OmZmZmY6MTIuMzQuNTYuNzgnLCBOb25lKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICB1cmxwYXJzZWQgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh1cmxwYXJzZWQuaG9zdG5hbWUsIHVybHBhcnNlZC5wb3J0KSAsIChob3N0bmFtZSwgcG9ydCkpCisKKyAgICAgICAgZm9yIGludmFsaWRfdXJsIGluIFsKKyAgICAgICAgICAgICAgICAnaHR0cDovLzo6MTIuMzQuNTYuNzhdLycsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9bOjoxL2Zvby8nLAorICAgICAgICAgICAgICAgICdmdHA6Ly9bOjoxL2Zvby9iYWRdL2JhZCcsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9bOjoxL2Zvby9iYWRdL2JhZCcsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9bOjpmZmZmOjEyLjM0LjU2Ljc4J106CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1cmxwYXJzZS51cmxwYXJzZSwgaW52YWxpZF91cmwpCisKKyAgICBkZWYgdGVzdF91cmxkZWZyYWcoc2VsZik6CisgICAgICAgIGZvciB1cmwsIGRlZnJhZywgZnJhZyBpbiBbCisgICAgICAgICAgICAoJ2h0dHA6Ly9weXRob24ub3JnI2ZyYWcnLCAnaHR0cDovL3B5dGhvbi5vcmcnLCAnZnJhZycpLAorICAgICAgICAgICAgKCdodHRwOi8vcHl0aG9uLm9yZycsICdodHRwOi8vcHl0aG9uLm9yZycsICcnKSwKKyAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcvI2ZyYWcnLCAnaHR0cDovL3B5dGhvbi5vcmcvJywgJ2ZyYWcnKSwKKyAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcvJywgJ2h0dHA6Ly9weXRob24ub3JnLycsICcnKSwKKyAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcvP3EjZnJhZycsICdodHRwOi8vcHl0aG9uLm9yZy8/cScsICdmcmFnJyksCisgICAgICAgICAgICAoJ2h0dHA6Ly9weXRob24ub3JnLz9xJywgJ2h0dHA6Ly9weXRob24ub3JnLz9xJywgJycpLAorICAgICAgICAgICAgKCdodHRwOi8vcHl0aG9uLm9yZy9wI2ZyYWcnLCAnaHR0cDovL3B5dGhvbi5vcmcvcCcsICdmcmFnJyksCisgICAgICAgICAgICAoJ2h0dHA6Ly9weXRob24ub3JnL3A/cScsICdodHRwOi8vcHl0aG9uLm9yZy9wP3EnLCAnJyksCisgICAgICAgICAgICAoUkZDMTgwOF9CQVNFLCAnaHR0cDovL2EvYi9jL2Q7cD9xJywgJ2YnKSwKKyAgICAgICAgICAgIChSRkMyMzk2X0JBU0UsICdodHRwOi8vYS9iL2MvZDtwP3EnLCAnJyksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxkZWZyYWcodXJsKSwgKGRlZnJhZywgZnJhZykpCisKKyAgICBkZWYgdGVzdF91cmxzcGxpdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICB1cmwgPSAiSFRUUDovL1dXVy5QWVRIT04uT1JHL2RvYy8jZnJhZyIKKyAgICAgICAgcCA9IHVybHBhcnNlLnVybHNwbGl0KHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnNjaGVtZSwgImh0dHAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmV0bG9jLCAiV1dXLlBZVEhPTi5PUkciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGF0aCwgIi9kb2MvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnF1ZXJ5LCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmZyYWdtZW50LCAiZnJhZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51c2VybmFtZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhc3N3b3JkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaG9zdG5hbWUsICJ3d3cucHl0aG9uLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCBOb25lKQorICAgICAgICAjIGdldHVybCgpIHdvbid0IHJldHVybiBleGFjdGx5IHRoZSBvcmlnaW5hbCBVUkwgaW4gdGhpcyBjYXNlCisgICAgICAgICMgc2luY2UgdGhlIHNjaGVtZSBpcyBhbHdheXMgY2FzZS1ub3JtYWxpemVkCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHAuZ2V0dXJsKCksIHVybCkKKworICAgICAgICB1cmwgPSAiaHR0cDovL1VzZXI6UGFzc0B3d3cucHl0aG9uLm9yZzowODAvZG9jLz9xdWVyeT15ZXMjZnJhZyIKKyAgICAgICAgcCA9IHVybHBhcnNlLnVybHNwbGl0KHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnNjaGVtZSwgImh0dHAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmV0bG9jLCAiVXNlcjpQYXNzQHd3dy5weXRob24ub3JnOjA4MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXRoLCAiL2RvYy8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucXVlcnksICJxdWVyeT15ZXMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZnJhZ21lbnQsICJmcmFnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVzZXJuYW1lLCAiVXNlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXNzd29yZCwgIlBhc3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaG9zdG5hbWUsICJ3d3cucHl0aG9uLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldHVybCgpLCB1cmwpCisKKyAgICAgICAgIyBBZGRyZXNzaW5nIGlzc3VlMTY5OCwgd2hpY2ggc3VnZ2VzdHMgVXNlcm5hbWUgY2FuIGNvbnRhaW4KKyAgICAgICAgIyAiQCIgY2hhcmFjdGVycy4gIFRob3VnaCBub3QgUkZDIGNvbXBsaWFudCwgbWFueSBmdHAgc2l0ZXMgYWxsb3cKKyAgICAgICAgIyBhbmQgcmVxdWVzdCBlbWFpbCBhZGRyZXNzZXMgYXMgdXNlcm5hbWVzLgorCisgICAgICAgIHVybCA9ICJodHRwOi8vVXNlckBleGFtcGxlLmNvbTpQYXNzQHd3dy5weXRob24ub3JnOjA4MC9kb2MvP3F1ZXJ5PXllcyNmcmFnIgorICAgICAgICBwID0gdXJscGFyc2UudXJsc3BsaXQodXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc2NoZW1lLCAiaHR0cCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uZXRsb2MsICJVc2VyQGV4YW1wbGUuY29tOlBhc3NAd3d3LnB5dGhvbi5vcmc6MDgwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhdGgsICIvZG9jLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5xdWVyeSwgInF1ZXJ5PXllcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5mcmFnbWVudCwgImZyYWciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudXNlcm5hbWUsICJVc2VyQGV4YW1wbGUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhc3N3b3JkLCAiUGFzcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5ob3N0bmFtZSwgInd3dy5weXRob24ub3JnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvcnQsIDgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0dXJsKCksIHVybCkKKworICAgICAgICAjIFZlcmlmeSBhbiBpbGxlZ2FsIHBvcnQgb2YgdmFsdWUgZ3JlYXRlciB0aGFuIDY1NTM1IGlzIHNldCBhcyBOb25lCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmc6NjU1MzYiCisgICAgICAgIHAgPSB1cmxwYXJzZS51cmxzcGxpdCh1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCBOb25lKQorCisgICAgZGVmIHRlc3RfaXNzdWUxNDA3MihzZWxmKToKKyAgICAgICAgcDEgPSB1cmxwYXJzZS51cmxzcGxpdCgndGVsOiszMS02NDEwNDQxNTMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnNjaGVtZSwgJ3RlbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucGF0aCwgJyszMS02NDEwNDQxNTMnKQorCisgICAgICAgIHAyID0gdXJscGFyc2UudXJsc3BsaXQoJ3RlbDorMzE2NDEwNDQxNTMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLnNjaGVtZSwgJ3RlbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDIucGF0aCwgJyszMTY0MTA0NDE1MycpCisKKyAgICAgICAgIyBBc3NlcnQgZm9yIHVybHBhcnNlCisgICAgICAgIHAxID0gdXJscGFyc2UudXJscGFyc2UoJ3RlbDorMzEtNjQxMDQ0MTUzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5zY2hlbWUsICd0ZWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhdGgsICcrMzEtNjQxMDQ0MTUzJykKKworICAgICAgICBwMiA9IHVybHBhcnNlLnVybHBhcnNlKCd0ZWw6KzMxNjQxMDQ0MTUzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMi5zY2hlbWUsICd0ZWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLnBhdGgsICcrMzE2NDEwNDQxNTMnKQorCisKKyAgICBkZWYgdGVzdF90ZWx1cmxfcGFyYW1zKHNlbGYpOgorICAgICAgICBwMSA9IHVybHBhcnNlLnVybHBhcnNlKCd0ZWw6MTIzLTQ7cGhvbmUtY29udGV4dD0rMS02NTAtNTE2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5zY2hlbWUsICd0ZWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhdGgsICcxMjMtNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucGFyYW1zLCAncGhvbmUtY29udGV4dD0rMS02NTAtNTE2JykKKworICAgICAgICBwMSA9IHVybHBhcnNlLnVybHBhcnNlKCd0ZWw6KzEtMjAxLTU1NS0wMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5zY2hlbWUsICd0ZWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhdGgsICcrMS0yMDEtNTU1LTAxMjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhcmFtcywgJycpCisKKyAgICAgICAgcDEgPSB1cmxwYXJzZS51cmxwYXJzZSgndGVsOjcwNDI7cGhvbmUtY29udGV4dD1leGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEuc2NoZW1lLCAndGVsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXRoLCAnNzA0MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucGFyYW1zLCAncGhvbmUtY29udGV4dD1leGFtcGxlLmNvbScpCisKKyAgICAgICAgcDEgPSB1cmxwYXJzZS51cmxwYXJzZSgndGVsOjg2My0xMjM0O3Bob25lLWNvbnRleHQ9KzEtOTE0LTU1NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEuc2NoZW1lLCAndGVsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXRoLCAnODYzLTEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhcmFtcywgJ3Bob25lLWNvbnRleHQ9KzEtOTE0LTU1NScpCisKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfYmFkX3BvcnQoc2VsZik6CisgICAgICAgICIiIkNoZWNrIGhhbmRsaW5nIG9mIG5vbi1pbnRlZ2VyIHBvcnRzLiIiIgorICAgICAgICBwID0gdXJscGFyc2UudXJsc3BsaXQoImh0dHA6Ly93d3cuZXhhbXBsZS5uZXQ6Zm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5ldGxvYywgInd3dy5leGFtcGxlLm5ldDpmb28iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IHAucG9ydCkKKworICAgICAgICBwID0gdXJscGFyc2UudXJscGFyc2UoImh0dHA6Ly93d3cuZXhhbXBsZS5uZXQ6Zm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5ldGxvYywgInd3dy5leGFtcGxlLm5ldDpmb28iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IHAucG9ydCkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfd2l0aG91dF9uZXRsb2Moc2VsZik6CisgICAgICAgICMgVGhpcyBleGFtcGxlIGlzIHN0cmFpZ2h0IGZyb20gUkZDIDMyNjEuICBJdCBsb29rcyBsaWtlIGl0CisgICAgICAgICMgc2hvdWxkIGFsbG93IHRoZSB1c2VybmFtZSwgaG9zdG5hbWUsIGFuZCBwb3J0IHRvIGJlIGZpbGxlZAorICAgICAgICAjIGluLCBidXQgZG9lc24ndC4gIFNpbmNlIGl0J3MgYSBVUkkgYW5kIGRvZXNuJ3QgdXNlIHRoZQorICAgICAgICAjIHNjaGVtZTovL25ldGxvYyBzeW50YXgsIHRoZSBuZXRsb2MgYW5kIHJlbGF0ZWQgYXR0cmlidXRlcworICAgICAgICAjIHNob3VsZCBiZSBsZWZ0IGVtcHR5LgorICAgICAgICB1cmkgPSAic2lwOmFsaWNlQGF0bGFudGEuY29tO21hZGRyPTIzOS4yNTUuMjU1LjE7dHRsPTE1IgorICAgICAgICBwID0gdXJscGFyc2UudXJsc3BsaXQodXJpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmV0bG9jLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVzZXJuYW1lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFzc3dvcmQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5ob3N0bmFtZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvcnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXR1cmwoKSwgdXJpKQorCisgICAgICAgIHAgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uZXRsb2MsICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudXNlcm5hbWUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXNzd29yZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmhvc3RuYW1lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG9ydCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldHVybCgpLCB1cmkpCisKKyAgICBkZWYgdGVzdF9jYWNoaW5nKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FzZSBmb3IgYnVnICMxMzEzMTE5CisgICAgICAgIHVyaSA9ICJodHRwOi8vZXhhbXBsZS5jb20vZG9jLyIKKyAgICAgICAgdW5pY29kZV91cmkgPSB1bmljb2RlKHVyaSkKKworICAgICAgICB1cmxwYXJzZS51cmxwYXJzZSh1bmljb2RlX3VyaSkKKyAgICAgICAgcCA9IHVybHBhcnNlLnVybHBhcnNlKHVyaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHAuc2NoZW1lKSwgdHlwZSh1cmkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocC5ob3N0bmFtZSksIHR5cGUodXJpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHAucGF0aCksIHR5cGUodXJpKSkKKworICAgIGRlZiB0ZXN0X25vc2xhc2goc2VsZik6CisgICAgICAgICMgSXNzdWUgMTYzNzogaHR0cDovL2Zvby5jb20/cXVlcnkgaXMgbGVnYWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgiaHR0cDovL2V4YW1wbGUuY29tP2JsYWhibGFoPS9mb28iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHAnLCAnZXhhbXBsZS5jb20nLCAnJywgJycsICdibGFoYmxhaD0vZm9vJywgJycpKQorCisgICAgZGVmIHRlc3RfYW55c2NoZW1lKHNlbGYpOgorICAgICAgICAjIElzc3VlIDc5MDQ6IHMzOi8vZm9vLmNvbS9zdHVmZiBoYXMgbmV0bG9jICJmb28uY29tIi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgiczM6Ly9mb28uY29tL3N0dWZmIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdzMycsJ2Zvby5jb20nLCcvc3R1ZmYnLCcnLCcnLCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgieC1uZXdzY2hlbWU6Ly9mb28uY29tL3N0dWZmIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCd4LW5ld3NjaGVtZScsJ2Zvby5jb20nLCcvc3R1ZmYnLCcnLCcnLCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgieC1uZXdzY2hlbWU6Ly9mb28uY29tL3N0dWZmP3F1ZXJ5I2ZyYWdtZW50IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCd4LW5ld3NjaGVtZScsJ2Zvby5jb20nLCcvc3R1ZmYnLCcnLCdxdWVyeScsJ2ZyYWdtZW50JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoIngtbmV3c2NoZW1lOi8vZm9vLmNvbS9zdHVmZj9xdWVyeSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgneC1uZXdzY2hlbWUnLCdmb28uY29tJywnL3N0dWZmJywnJywncXVlcnknLCcnKSkKKworICAgIGRlZiB0ZXN0X3dpdGhvdXRzY2hlbWUoc2VsZik6CisgICAgICAgICMgVGVzdCB1cmxwYXJzZSB3aXRob3V0IHNjaGVtZQorICAgICAgICAjIElzc3VlIDc1NDAxNjogdXJscGFyc2UgZ29lcyB3cm9uZyB3aXRoIElQOnBvcnQgd2l0aG91dCBzY2hlbWUKKyAgICAgICAgIyBSRkMgMTgwOCBzcGVjaWZpZXMgdGhhdCBuZXRsb2Mgc2hvdWxkIHN0YXJ0IHdpdGggLy8sIHVybHBhcnNlIGV4cGVjdHMKKyAgICAgICAgIyB0aGUgc2FtZSwgb3RoZXJ3aXNlIGl0IGNsYXNzaWZpZXMgdGhlIHBvcnRpb24gb2YgdXJsIGFzIHBhdGguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoInBhdGgiKSwKKyAgICAgICAgICAgICAgICAoJycsJycsJ3BhdGgnLCcnLCcnLCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgiLy93d3cucHl0aG9uLm9yZzo4MCIpLAorICAgICAgICAgICAgICAgICgnJywnd3d3LnB5dGhvbi5vcmc6ODAnLCcnLCcnLCcnLCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgiaHR0cDovL3d3dy5weXRob24ub3JnOjgwIiksCisgICAgICAgICAgICAgICAgKCdodHRwJywnd3d3LnB5dGhvbi5vcmc6ODAnLCcnLCcnLCcnLCcnKSkKKworICAgIGRlZiB0ZXN0X3BvcnRzZXBhcmF0b3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUgNzU0MDE2IG1ha2VzIGNoYW5nZXMgZm9yIHBvcnQgc2VwYXJhdG9yICc6JyBmcm9tIHNjaGVtZSBzZXBhcmF0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgicGF0aDo4MCIpLAorICAgICAgICAgICAgICAgICgnJywnJywncGF0aDo4MCcsJycsJycsJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJodHRwOiIpLCgnaHR0cCcsJycsJycsJycsJycsJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJodHRwczoiKSwoJ2h0dHBzJywnJywnJywnJywnJywnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoImh0dHA6Ly93d3cucHl0aG9uLm9yZzo4MCIpLAorICAgICAgICAgICAgICAgICgnaHR0cCcsJ3d3dy5weXRob24ub3JnOjgwJywnJywnJywnJywnJykpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFVybFBhcnNlVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZWNkOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CkBAIC0wLDAgKzEsMzUwIEBACisjIENoZWNrIGV2ZXJ5IHBhdGggdGhyb3VnaCBldmVyeSBtZXRob2Qgb2YgVXNlckRpY3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIG1hcHBpbmdfdGVzdHMKK2ltcG9ydCBVc2VyRGljdAorCitkMCA9IHt9CitkMSA9IHsib25lIjogMX0KK2QyID0geyJvbmUiOiAxLCAidHdvIjogMn0KK2QzID0geyJvbmUiOiAxLCAidHdvIjogMywgInRocmVlIjogNX0KK2Q0ID0geyJvbmUiOiBOb25lLCAidHdvIjogTm9uZX0KK2Q1ID0geyJvbmUiOiAxLCAidHdvIjogMX0KKworY2xhc3MgVXNlckRpY3RUZXN0KG1hcHBpbmdfdGVzdHMuVGVzdEhhc2hNYXBwaW5nUHJvdG9jb2wpOgorICAgIHR5cGUydGVzdCA9IFVzZXJEaWN0Lkl0ZXJhYmxlVXNlckRpY3QKKworICAgIGRlZiB0ZXN0X2FsbChzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvbnN0cnVjdG9ycworICAgICAgICB1ID0gVXNlckRpY3QuVXNlckRpY3QoKQorICAgICAgICB1MCA9IFVzZXJEaWN0LlVzZXJEaWN0KGQwKQorICAgICAgICB1MSA9IFVzZXJEaWN0LlVzZXJEaWN0KGQxKQorICAgICAgICB1MiA9IFVzZXJEaWN0Lkl0ZXJhYmxlVXNlckRpY3QoZDIpCisKKyAgICAgICAgdXUgPSBVc2VyRGljdC5Vc2VyRGljdCh1KQorICAgICAgICB1dTAgPSBVc2VyRGljdC5Vc2VyRGljdCh1MCkKKyAgICAgICAgdXUxID0gVXNlckRpY3QuVXNlckRpY3QodTEpCisgICAgICAgIHV1MiA9IFVzZXJEaWN0LlVzZXJEaWN0KHUyKQorCisgICAgICAgICMga2V5d29yZCBhcmcgY29uc3RydWN0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVc2VyRGljdC5Vc2VyRGljdChvbmU9MSwgdHdvPTIpLCBkMikKKyAgICAgICAgIyBpdGVtIHNlcXVlbmNlIGNvbnN0cnVjdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3QoWygnb25lJywxKSwgKCd0d28nLDIpXSksIGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVzZXJEaWN0LlVzZXJEaWN0KGRpY3Q9Wygnb25lJywxKSwgKCd0d28nLDIpXSksIGQyKQorICAgICAgICAjIGJvdGggdG9nZXRoZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVc2VyRGljdC5Vc2VyRGljdChbKCdvbmUnLDEpLCAoJ3R3bycsMildLCB0d289MywgdGhyZWU9NSksIGQzKQorCisgICAgICAgICMgYWx0ZXJuYXRlIGNvbnN0cnVjdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3QuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCkpLCBkNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVc2VyRGljdC5Vc2VyRGljdCgpLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSwgZDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3QuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCksIDEpLCBkNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVc2VyRGljdC5Vc2VyRGljdCgpLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpLCAxKSwgZDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1MS5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSkgaXMgbm90IHUxKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodTEuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCkpLCBVc2VyRGljdC5Vc2VyRGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHUyLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSwgVXNlckRpY3QuSXRlcmFibGVVc2VyRGljdCkKKworICAgICAgICAjIFRlc3QgX19yZXByX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodTApLCBzdHIoZDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodTEpLCByZXByKGQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUyKSwgcmVwcihkMikpCisKKyAgICAgICAgIyBUZXN0IF9fY21wX18gYW5kIF9fbGVuX18KKyAgICAgICAgYWxsID0gW2QwLCBkMSwgZDIsIHUsIHUwLCB1MSwgdTIsIHV1LCB1dTAsIHV1MSwgdXUyXQorICAgICAgICBmb3IgYSBpbiBhbGw6CisgICAgICAgICAgICBmb3IgYiBpbiBhbGw6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoYSwgYiksIGNtcChsZW4oYSksIGxlbihiKSkpCisKKyAgICAgICAgIyBUZXN0IF9fZ2V0aXRlbV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTJbIm9uZSJdLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgdTEuX19nZXRpdGVtX18sICJ0d28iKQorCisgICAgICAgICMgVGVzdCBfX3NldGl0ZW1fXworICAgICAgICB1MyA9IFVzZXJEaWN0LlVzZXJEaWN0KHUyKQorICAgICAgICB1M1sidHdvIl0gPSAyCisgICAgICAgIHUzWyJ0aHJlZSJdID0gMworCisgICAgICAgICMgVGVzdCBfX2RlbGl0ZW1fXworICAgICAgICBkZWwgdTNbInRocmVlIl0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHUzLl9fZGVsaXRlbV9fLCAidGhyZWUiKQorCisgICAgICAgICMgVGVzdCBjbGVhcgorICAgICAgICB1My5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTMsIHt9KQorCisgICAgICAgICMgVGVzdCBjb3B5KCkKKyAgICAgICAgdTJhID0gdTIuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTJhLCB1MikKKyAgICAgICAgdTJiID0gVXNlckRpY3QuVXNlckRpY3QoeD00MiwgeT0yMykKKyAgICAgICAgdTJjID0gdTJiLmNvcHkoKSAjIG1ha2luZyBhIGNvcHkgb2YgYSBVc2VyRGljdCBpcyBzcGVjaWFsIGNhc2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTJiLCB1MmMpCisKKyAgICAgICAgY2xhc3MgTXlVc2VyRGljdChVc2VyRGljdC5Vc2VyRGljdCk6CisgICAgICAgICAgICBkZWYgZGlzcGxheShzZWxmKTogcHJpbnQgc2VsZgorCisgICAgICAgIG0yID0gTXlVc2VyRGljdCh1MikKKyAgICAgICAgbTJhID0gbTIuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTJhLCBtMikKKworICAgICAgICAjIFNGIGJ1ZyAjNDc2NjE2IC0tIGNvcHkoKSBvZiBVc2VyRGljdCBzdWJjbGFzcyBzaGFyZWQgZGF0YQorICAgICAgICBtMlsnZm9vJ10gPSAnYmFyJworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG0yYSwgbTIpCisKKyAgICAgICAgIyBUZXN0IGtleXMsIGl0ZW1zLCB2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mi5rZXlzKCksIGQyLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mi5pdGVtcygpLCBkMi5pdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLnZhbHVlcygpLCBkMi52YWx1ZXMoKSkKKworICAgICAgICAjIFRlc3QgaGFzX2tleSBhbmQgImluIi4KKyAgICAgICAgZm9yIGkgaW4gdTIua2V5cygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCB1MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSBpbiB1MSwgaSBpbiBkMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSBpbiB1MCwgaSBpbiBkMCkKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodTIuaGFzX2tleShpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUxLmhhc19rZXkoaSksIGQxLmhhc19rZXkoaSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MC5oYXNfa2V5KGkpLCBkMC5oYXNfa2V5KGkpKQorCisgICAgICAgICMgVGVzdCB1cGRhdGUKKyAgICAgICAgdCA9IFVzZXJEaWN0LlVzZXJEaWN0KCkKKyAgICAgICAgdC51cGRhdGUodTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdTIpCisgICAgICAgIGNsYXNzIEl0ZW1zOgorICAgICAgICAgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoKCJ4IiwgNDIpLCAoInkiLCAyMykpCisgICAgICAgIHQgPSBVc2VyRGljdC5Vc2VyRGljdCgpCisgICAgICAgIHQudXBkYXRlKEl0ZW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgeyJ4IjogNDIsICJ5IjogMjN9KQorCisgICAgICAgICMgVGVzdCBnZXQKKyAgICAgICAgZm9yIGkgaW4gdTIua2V5cygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mi5nZXQoaSksIHUyW2ldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MS5nZXQoaSksIGQxLmdldChpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTAuZ2V0KGkpLCBkMC5nZXQoaSkpCisKKyAgICAgICAgIyBUZXN0ICJpbiIgaXRlcmF0aW9uLgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMjApOgorICAgICAgICAgICAgdTJbaV0gPSBzdHIoaSkKKyAgICAgICAgaWtleXMgPSBbXQorICAgICAgICBmb3IgayBpbiB1MjoKKyAgICAgICAgICAgIGlrZXlzLmFwcGVuZChrKQorICAgICAgICBrZXlzID0gdTIua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGlrZXlzKSwgc2V0KGtleXMpKQorCisgICAgICAgICMgVGVzdCBzZXRkZWZhdWx0CisgICAgICAgIHQgPSBVc2VyRGljdC5Vc2VyRGljdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zZXRkZWZhdWx0KCJ4IiwgNDIpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuaGFzX2tleSgieCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2V0ZGVmYXVsdCgieCIsIDIzKSwgNDIpCisKKyAgICAgICAgIyBUZXN0IHBvcAorICAgICAgICB0ID0gVXNlckRpY3QuVXNlckRpY3QoeD00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnBvcCgieCIpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHQucG9wLCAieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5wb3AoIngiLCAxKSwgMSkKKyAgICAgICAgdFsieCJdID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnBvcCgieCIsIDEpLCA0MikKKworICAgICAgICAjIFRlc3QgcG9waXRlbQorICAgICAgICB0ID0gVXNlckRpY3QuVXNlckRpY3QoeD00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnBvcGl0ZW0oKSwgKCJ4IiwgNDIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgdC5wb3BpdGVtKQorCisgICAgZGVmIHRlc3RfbWlzc2luZyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgVXNlckRpY3QgZG9lc24ndCBoYXZlIGEgX19taXNzaW5nX18gbWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihVc2VyRGljdCwgIl9fbWlzc2luZ19fIiksIEZhbHNlKQorICAgICAgICAjIFRlc3Qgc2V2ZXJhbCBjYXNlczoKKyAgICAgICAgIyAoRCkgc3ViY2xhc3MgZGVmaW5lcyBfX21pc3NpbmdfXyBtZXRob2QgcmV0dXJuaW5nIGEgdmFsdWUKKyAgICAgICAgIyAoRSkgc3ViY2xhc3MgZGVmaW5lcyBfX21pc3NpbmdfXyBtZXRob2QgcmFpc2luZyBSdW50aW1lRXJyb3IKKyAgICAgICAgIyAoRikgc3ViY2xhc3Mgc2V0cyBfX21pc3NpbmdfXyBpbnN0YW5jZSB2YXJpYWJsZSAobm8gZWZmZWN0KQorICAgICAgICAjIChHKSBzdWJjbGFzcyBkb2Vzbid0IGRlZmluZSBfX21pc3NpbmdfXyBhdCBhIGFsbAorICAgICAgICBjbGFzcyBEKFVzZXJEaWN0LlVzZXJEaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICBkID0gRCh7MTogMiwgMzogNH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzNdLCA0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMiwgZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsyXSwgNDIpCisgICAgICAgIGNsYXNzIEUoVXNlckRpY3QuVXNlckRpY3QpOgorICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKGtleSkKKyAgICAgICAgZSA9IEUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlWzQyXQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoNDIsKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZVs0Ml0gZGlkbid0IHJhaXNlIFJ1bnRpbWVFcnJvciIpCisgICAgICAgIGNsYXNzIEYoVXNlckRpY3QuVXNlckRpY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgQW4gaW5zdGFuY2UgdmFyaWFibGUgX19taXNzaW5nX18gc2hvdWxkIGhhdmUgbm8gZWZmZWN0CisgICAgICAgICAgICAgICAgc2VsZi5fX21pc3NpbmdfXyA9IGxhbWJkYSBrZXk6IE5vbmUKKyAgICAgICAgICAgICAgICBVc2VyRGljdC5Vc2VyRGljdC5fX2luaXRfXyhzZWxmKQorICAgICAgICBmID0gRigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZbNDJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJncywgKDQyLCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImZbNDJdIGRpZG4ndCByYWlzZSBLZXlFcnJvciIpCisgICAgICAgIGNsYXNzIEcoVXNlckRpY3QuVXNlckRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBnID0gRygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdbNDJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJncywgKDQyLCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImdbNDJdIGRpZG4ndCByYWlzZSBLZXlFcnJvciIpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgRGljdCBNaXhpbgorCitjbGFzcyBTZXFEaWN0KFVzZXJEaWN0LkRpY3RNaXhpbik6CisgICAgIiIiRGljdGlvbmFyeSBsb29rYWxpa2UgaW1wbGVtZW50ZWQgd2l0aCBsaXN0cy4KKworICAgIFVzZWQgdG8gdGVzdCBhbmQgZGVtb25zdHJhdGUgRGljdE1peGluCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG90aGVyPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5rZXlsaXN0ID0gW10KKyAgICAgICAgc2VsZi52YWx1ZWxpc3QgPSBbXQorICAgICAgICBpZiBvdGhlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciAoa2V5LCB2YWx1ZSkgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gdmFsdWUKKyAgICAgICAgZm9yIChrZXksIHZhbHVlKSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpID0gc2VsZi5rZXlsaXN0LmluZGV4KGtleSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZWxpc3RbaV0KKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGkgPSBzZWxmLmtleWxpc3QuaW5kZXgoa2V5KQorICAgICAgICAgICAgc2VsZi52YWx1ZWxpc3RbaV0gPSB2YWx1ZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYua2V5bGlzdC5hcHBlbmQoa2V5KQorICAgICAgICAgICAgc2VsZi52YWx1ZWxpc3QuYXBwZW5kKHZhbHVlKQorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpID0gc2VsZi5rZXlsaXN0LmluZGV4KGtleSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICBzZWxmLmtleWxpc3QucG9wKGkpCisgICAgICAgIHNlbGYudmFsdWVsaXN0LnBvcChpKQorICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLmtleWxpc3QpCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9fY2xhc3NfXygpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBkW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gZAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9ta2V5cyhjbHMsIGtleXMsIHZhbHVlPU5vbmUpOgorICAgICAgICBkID0gY2xzKCkKKyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgZFtrZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIGQKKworY2xhc3MgVXNlckRpY3RNaXhpblRlc3QobWFwcGluZ190ZXN0cy5UZXN0TWFwcGluZ1Byb3RvY29sKToKKyAgICB0eXBlMnRlc3QgPSBTZXFEaWN0CisKKyAgICBkZWYgdGVzdF9hbGwoc2VsZik6CisgICAgICAgICMjIFNldHVwIHRlc3QgYW5kIHZlcmlmeSB3b3JraW5nIG9mIHRoZSB0ZXN0IGNsYXNzCisKKyAgICAgICAgIyBjaGVjayBpbml0CisgICAgICAgIHMgPSBTZXFEaWN0KCkKKworICAgICAgICAjIGV4ZXJjaXNlIHNldGl0ZW0KKyAgICAgICAgc1sxMF0gPSAndGVuJworICAgICAgICBzWzIwXSA9ICd0d2VudHknCisgICAgICAgIHNbMzBdID0gJ3RoaXJ0eScKKworICAgICAgICAjIGV4ZXJjaXNlIGRlbGl0ZW0KKyAgICAgICAgZGVsIHNbMjBdCisgICAgICAgICMgY2hlY2sgZ2V0aXRlbSBhbmQgc2V0aXRlbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbMTBdLCAndGVuJykKKyAgICAgICAgIyBjaGVjayBrZXlzKCkgYW5kIGRlbGl0ZW0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmtleXMoKSwgWzEwLCAzMF0pCisKKyAgICAgICAgIyMgTm93LCB0ZXN0IHRoZSBEaWN0TWl4aW4gbWV0aG9kcyBvbmUgYnkgb25lCisgICAgICAgICMgaGFzX2tleQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5oYXNfa2V5KDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzLmhhc19rZXkoMjApKQorCisgICAgICAgICMgX19jb250YWluc19fCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMTAsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMjAsIHMpCisKKyAgICAgICAgIyBfX2l0ZXJfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtrIGZvciBrIGluIHNdLCBbMTAsIDMwXSkKKworICAgICAgICAjIF9fbGVuX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIDIpCisKKyAgICAgICAgIyBpdGVyaXRlbXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHMuaXRlcml0ZW1zKCkpLCBbKDEwLCd0ZW4nKSwgKDMwLCAndGhpcnR5JyldKQorCisgICAgICAgICMgaXRlcmtleXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHMuaXRlcmtleXMoKSksIFsxMCwgMzBdKQorCisgICAgICAgICMgaXRlcnZhbHVlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qocy5pdGVydmFsdWVzKCkpLCBbJ3RlbicsICd0aGlydHknXSkKKworICAgICAgICAjIHZhbHVlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWVzKCksIFsndGVuJywgJ3RoaXJ0eSddKQorCisgICAgICAgICMgaXRlbXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLml0ZW1zKCksIFsoMTAsJ3RlbicpLCAoMzAsICd0aGlydHknKV0pCisKKyAgICAgICAgIyBnZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldCgxMCksICd0ZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0KDE1LCdmaWZ0ZWVuJyksICdmaWZ0ZWVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldCgxNSksIE5vbmUpCisKKyAgICAgICAgIyBzZXRkZWZhdWx0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zZXRkZWZhdWx0KDQwLCAnZm9ydHknKSwgJ2ZvcnR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnNldGRlZmF1bHQoMTAsICdudWxsJyksICd0ZW4nKQorICAgICAgICBkZWwgc1s0MF0KKworICAgICAgICAjIHBvcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucG9wKDEwKSwgJ3RlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIHMpCisgICAgICAgIHNbMTBdID0gJ3RlbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnBvcCgieCIsIDEpLCAxKQorICAgICAgICBzWyJ4Il0gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucG9wKCJ4IiwgMSksIDQyKQorCisgICAgICAgICMgcG9waXRlbQorICAgICAgICBrLCB2ID0gcy5wb3BpdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrLCBzKQorICAgICAgICBzW2tdID0gdgorCisgICAgICAgICMgY2xlYXIKKyAgICAgICAgcy5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCAwKQorCisgICAgICAgICMgZW1wdHkgcG9waXRlbQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5wb3BpdGVtKQorCisgICAgICAgICMgdXBkYXRlCisgICAgICAgIHMudXBkYXRlKHsxMDogJ3RlbicsIDIwOid0d2VudHknfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzEwXSwgJ3RlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1syMF0sICd0d2VudHknKQorCisgICAgICAgICMgY21wCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgezEwOiAndGVuJywgMjA6J3R3ZW50eSd9KQorICAgICAgICB0ID0gU2VxRGljdCgpCisgICAgICAgIHRbMjBdID0gJ3R3ZW50eScKKyAgICAgICAgdFsxMF0gPSAndGVuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBVc2VyRGljdFRlc3QsCisgICAgICAgIFVzZXJEaWN0TWl4aW5UZXN0CisgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91c2VybGlzdC5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VzZXJsaXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNjAxYmMKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91c2VybGlzdC5weQpAQCAtMCwwICsxLDYxIEBACisjIENoZWNrIGV2ZXJ5IHBhdGggdGhyb3VnaCBldmVyeSBtZXRob2Qgb2YgVXNlckxpc3QKKworZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBsaXN0X3Rlc3RzCisKK2NsYXNzIFVzZXJMaXN0VGVzdChsaXN0X3Rlc3RzLkNvbW1vblRlc3QpOgorICAgIHR5cGUydGVzdCA9IFVzZXJMaXN0CisKKyAgICBkZWYgdGVzdF9nZXRzbGljZShzZWxmKToKKyAgICAgICAgc3VwZXIoVXNlckxpc3RUZXN0LCBzZWxmKS50ZXN0X2dldHNsaWNlKCkKKyAgICAgICAgbCA9IFswLCAxLCAyLCAzLCA0XQorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QobCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTMsIDYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzppXSwgbFs6aV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbaTpdLCBsW2k6XSkKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZSgtMywgNik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1W2k6al0sIGxbaTpqXSkKKworICAgIGRlZiB0ZXN0X2FkZF9zcGVjaWFscyhzZWxmKToKKyAgICAgICAgdSA9IFVzZXJMaXN0KCJzcGFtIikKKyAgICAgICAgdTIgPSB1ICsgImVnZ3MiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIGxpc3QoInNwYW1lZ2dzIikpCisKKyAgICBkZWYgdGVzdF9yYWRkX3NwZWNpYWxzKHNlbGYpOgorICAgICAgICB1ID0gVXNlckxpc3QoImVnZ3MiKQorICAgICAgICB1MiA9ICJzcGFtIiArIHUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MiwgbGlzdCgic3BhbWVnZ3MiKSkKKyAgICAgICAgdTIgPSB1Ll9fcmFkZF9fKFVzZXJMaXN0KCJzcGFtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIGxpc3QoInNwYW1lZ2dzIikpCisKKyAgICBkZWYgdGVzdF9pYWRkKHNlbGYpOgorICAgICAgICBzdXBlcihVc2VyTGlzdFRlc3QsIHNlbGYpLnRlc3RfaWFkZCgpCisgICAgICAgIHUgPSBbMCwgMV0KKyAgICAgICAgdSArPSBVc2VyTGlzdChbMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgWzAsIDEsIDAsIDFdKQorCisgICAgZGVmIHRlc3RfbWl4ZWRjbXAoc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgWzAsIDFdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHUsIFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh1LCBbMCwgMl0pCisKKyAgICBkZWYgdGVzdF9taXhlZGFkZChzZWxmKToKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ICsgW10sIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSArIFsyXSwgWzAsIDEsIDJdKQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbW92ZXJ3cml0ZWl0ZXIoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgX19nZXRpdGVtX18gb3ZlcnJpZGVzICphcmUqIHJlY29nbml6ZWQgYnkgX19pdGVyX18KKyAgICAgICAgY2xhc3MgVChzZWxmLnR5cGUydGVzdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKGtleSkgKyAnISEhJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZXIoVCgoMSwyKSkpLm5leHQoKSwgIjAhISEiKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICgiLitfXyhnZXR8c2V0fGRlbClzbGljZV9fIGhhcyBiZWVuIHJlbW92ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChVc2VyTGlzdFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2MjU5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5CkBAIC0wLDAgKzEsMTQ3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgVXNlclN0cmluZyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgYnVpbHRpbiBzdHJpbmcgdHlwZS4KKyMgVXNlclN0cmluZyBpbnN0YW5jZXMgc2hvdWxkIGJlaGF2ZSBzaW1pbGFyIHRvIGJ1aWx0aW4gc3RyaW5nIG9iamVjdHMuCisKK2ltcG9ydCBzdHJpbmcKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBzdHJpbmdfdGVzdHMKK2Zyb20gVXNlclN0cmluZyBpbXBvcnQgVXNlclN0cmluZywgTXV0YWJsZVN0cmluZworaW1wb3J0IHdhcm5pbmdzCisKK2NsYXNzIFVzZXJTdHJpbmdUZXN0KAorICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LAorICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdCwKKyAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJTdHJpbmdVc2VyU3RyaW5nVGVzdCwKKyAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVc2VyU3RyaW5nVGVzdAorICAgICk6CisKKyAgICB0eXBlMnRlc3QgPSBVc2VyU3RyaW5nCisKKyAgICAjIE92ZXJ3cml0ZSB0aGUgdGhyZWUgdGVzdGluZyBtZXRob2RzLCBiZWNhdXNlIFVzZXJTdHJpbmcKKyAgICAjIGNhbid0IGNvcGUgd2l0aCBhcmd1bWVudHMgcHJvcGFnYXRlZCB0byBVc2VyU3RyaW5nCisgICAgIyAoYW5kIHdlIGRvbid0IHRlc3Qgd2l0aCBzdWJjbGFzc2VzKQorICAgIGRlZiBjaGVja2VxdWFsKHNlbGYsIHJlc3VsdCwgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuZml4dHlwZShyZXN1bHQpCisgICAgICAgIG9iamVjdCA9IHNlbGYuZml4dHlwZShvYmplY3QpCisgICAgICAgICMgd2UgZG9uJ3QgZml4IHRoZSBhcmd1bWVudHMsIGJlY2F1c2UgVXNlclN0cmluZyBjYW4ndCBjb3BlIHdpdGggaXQKKyAgICAgICAgcmVhbHJlc3VsdCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKSgqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIHJlYWxyZXN1bHQKKyAgICAgICAgKQorCisgICAgZGVmIGNoZWNrcmFpc2VzKHNlbGYsIGV4Yywgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIG9iamVjdCA9IHNlbGYuZml4dHlwZShvYmplY3QpCisgICAgICAgICMgd2UgZG9uJ3QgZml4IHRoZSBhcmd1bWVudHMsIGJlY2F1c2UgVXNlclN0cmluZyBjYW4ndCBjb3BlIHdpdGggaXQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBleGMsCisgICAgICAgICAgICBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSksCisgICAgICAgICAgICAqYXJncworICAgICAgICApCisKKyAgICBkZWYgY2hlY2tjYWxsKHNlbGYsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICBvYmplY3QgPSBzZWxmLmZpeHR5cGUob2JqZWN0KQorICAgICAgICAjIHdlIGRvbid0IGZpeCB0aGUgYXJndW1lbnRzLCBiZWNhdXNlIFVzZXJTdHJpbmcgY2FuJ3QgY29wZSB3aXRoIGl0CisgICAgICAgIGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKSgqYXJncykKKworY2xhc3MgTXV0YWJsZVN0cmluZ1Rlc3QoVXNlclN0cmluZ1Rlc3QpOgorICAgIHR5cGUydGVzdCA9IE11dGFibGVTdHJpbmcKKworICAgICMgTXV0YWJsZVN0cmluZ3MgY2FuIGJlIGhhc2hlZCA9PiBkZWFjdGl2YXRlIHRlc3QKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBzID0gc2VsZi50eXBlMnRlc3QoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHMuX19zZXRpdGVtX18sIC00LCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgcy5fX3NldGl0ZW1fXywgMywgImJhciIpCisgICAgICAgIHNbLTFdID0gImJhciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiZm9iYXIiKQorICAgICAgICBzWzBdID0gImJhciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiYmFyb2JhciIpCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBzID0gc2VsZi50eXBlMnRlc3QoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHMuX19kZWxpdGVtX18sIC00KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzLl9fZGVsaXRlbV9fLCAzKQorICAgICAgICBkZWwgc1stMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiZm8iKQorICAgICAgICBkZWwgc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJvIikKKyAgICAgICAgZGVsIHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiIikKKworICAgIGRlZiB0ZXN0X3NldHNsaWNlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi50eXBlMnRlc3QoImZvbyIpCisgICAgICAgIHNbOl0gPSAiYmFyIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJiYXIiKQorICAgICAgICBzWzE6Ml0gPSAiZm9vIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJiZm9vciIpCisgICAgICAgIHNbMTotMV0gPSBVc2VyU3RyaW5nKCJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiYmFyIikKKyAgICAgICAgc1swOjEwXSA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIjQyIikKKworICAgIGRlZiB0ZXN0X2RlbHNsaWNlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi50eXBlMnRlc3QoImZvb2JhciIpCisgICAgICAgIGRlbCBzWzM6MTBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImZvbyIpCisgICAgICAgIGRlbCBzWy0xOjEwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJmbyIpCisKKyAgICBkZWYgdGVzdF9leHRlbmRlZF9zZXRfZGVsX3NsaWNlKHNlbGYpOgorICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDE5LCAxMDAsIC0xLCAtMiwgLTMxLCAtMTAwKQorICAgICAgICBvcmlnID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyBzdHJpbmcuZGlnaXRzCisgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgZm9yIHN0b3AgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAjIFVzZSBpbmRpY2VzWzE6XSB3aGVuIE11dGFibGVTdHJpbmcgY2FuIGhhbmRsZSByZWFsCisgICAgICAgICAgICAgICAgIyBleHRlbmRlZCBzbGljZXMKKyAgICAgICAgICAgICAgICBmb3Igc3RlcCBpbiAoTm9uZSwgMSwgLTEpOgorICAgICAgICAgICAgICAgICAgICBzID0gc2VsZi50eXBlMnRlc3Qob3JpZykKKyAgICAgICAgICAgICAgICAgICAgTCA9IGxpc3Qob3JpZykKKyAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHNsaWNlIG9mIGV4YWN0bHkgdGhlIHJpZ2h0IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIyBidXQgd2l0aCAoaG9wZWZ1bGx5KSBkaWZmZXJlbnQgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IExbc3RhcnQ6c3RvcDpzdGVwXQorICAgICAgICAgICAgICAgICAgICBkYXRhLnJldmVyc2UoKQorICAgICAgICAgICAgICAgICAgICBMW3N0YXJ0OnN0b3A6c3RlcF0gPSBkYXRhCisgICAgICAgICAgICAgICAgICAgIHNbc3RhcnQ6c3RvcDpzdGVwXSA9ICIiLmpvaW4oZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiIi5qb2luKEwpKQorCisgICAgICAgICAgICAgICAgICAgIGRlbCBMW3N0YXJ0OnN0b3A6c3RlcF0KKyAgICAgICAgICAgICAgICAgICAgZGVsIHNbc3RhcnQ6c3RvcDpzdGVwXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICIiLmpvaW4oTCkpCisKKyAgICBkZWYgdGVzdF9pbW11dGFibGUoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnR5cGUydGVzdCgiZm9vYmFyIikKKyAgICAgICAgczIgPSBzLmltbXV0YWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzMiwgVXNlclN0cmluZykKKworICAgIGRlZiB0ZXN0X2lhZGQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnR5cGUydGVzdCgiZm9vIikKKyAgICAgICAgcyArPSAiYmFyIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJmb29iYXIiKQorICAgICAgICBzICs9IFVzZXJTdHJpbmcoImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImZvb2JhcmJheiIpCisgICAgICAgIHMgKz0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiZm9vYmFyYmF6NDIiKQorCisgICAgZGVmIHRlc3RfaW11bChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudHlwZTJ0ZXN0KCJmb28iKQorICAgICAgICBzICo9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiZm9vIikKKyAgICAgICAgcyAqPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImZvb2ZvbyIpCisgICAgICAgIHMgKj0gLTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiIikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKk11dGFibGVTdHJpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuKl9fKGdldHxzZXR8ZGVsKXNsaWNlX18gaGFzIGJlZW4gcmVtb3ZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChVc2VyU3RyaW5nVGVzdCwgTXV0YWJsZVN0cmluZ1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3V1LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwNDZiMAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3V1LnB5CkBAIC0wLDAgKzEsMjAxIEBACisiIiIKK1Rlc3RzIGZvciB1dSBtb2R1bGUuCitOaWNrIE1hdGhld3NvbgorIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaW1wb3J0IHN5cywgb3MsIHV1LCBjU3RyaW5nSU8KK2ltcG9ydCB1dQorCitwbGFpbnRleHQgPSAiVGhlIHNtb290aC1zY2FsZWQgcHl0aG9uIGNyZXB0IG92ZXIgdGhlIHNsZWVwaW5nIGRvZ1xuIgorCitlbmNvZGVkdGV4dCA9ICIiIlwKK001JkFFKCctTTtWXVQ6XCJVUzhWJUw5NjBAPCdFVDomXU4oJi1SOTchVCgmXVY5NyhAPSZBRSgnLUw5NjVQCisoOjZZRygmMU85UEggIiIiCisKK2VuY29kZWR0ZXh0d3JhcHBlZCA9ICJiZWdpbiAlMDNvICVzXG4iICsgZW5jb2RlZHRleHQucmVwbGFjZSgiJSIsICIlJSIpICsgIlxuIFxuZW5kXG4iCisKK2NsYXNzIFVVVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CisgICAgICAgIGlucCA9IGNTdHJpbmdJTy5TdHJpbmdJTyhwbGFpbnRleHQpCisgICAgICAgIG91dCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHV1LmVuY29kZShpbnAsIG91dCwgInQxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgZW5jb2RlZHRleHR3cmFwcGVkICUgKDA2NjYsICJ0MSIpKQorICAgICAgICBpbnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8ocGxhaW50ZXh0KQorICAgICAgICBvdXQgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB1dS5lbmNvZGUoaW5wLCBvdXQsICJ0MSIsIDA2NDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCksIGVuY29kZWR0ZXh0d3JhcHBlZCAlICgwNjQ0LCAidDEiKSkKKworICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKKyAgICAgICAgaW5wID0gY1N0cmluZ0lPLlN0cmluZ0lPKGVuY29kZWR0ZXh0d3JhcHBlZCAlICgwNjY2LCAidDEiKSkKKyAgICAgICAgb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgdXUuZGVjb2RlKGlucCwgb3V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCBwbGFpbnRleHQpCisgICAgICAgIGlucCA9IGNTdHJpbmdJTy5TdHJpbmdJTygKKyAgICAgICAgICAgICJVVWVuY29kZWQgZmlsZXMgbWF5IGNvbnRhaW4gbWFueSBsaW5lcyxcbiIgKworICAgICAgICAgICAgImV2ZW4gc29tZSB0aGF0IGhhdmUgJ2JlZ2luJyBpbiB0aGVtLlxuIiArCisgICAgICAgICAgICBlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY2NiwgInQxIikKKyAgICAgICAgKQorICAgICAgICBvdXQgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB1dS5kZWNvZGUoaW5wLCBvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCksIHBsYWludGV4dCkKKworICAgIGRlZiB0ZXN0X3RydW5jYXRlZGlucHV0KHNlbGYpOgorICAgICAgICBpbnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8oImJlZ2luIDY0NCB0MVxuIiArIGVuY29kZWR0ZXh0KQorICAgICAgICBvdXQgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB1dS5kZWNvZGUoaW5wLCBvdXQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQorICAgICAgICBleGNlcHQgdXUuRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIlRydW5jYXRlZCBpbnB1dCBmaWxlIikKKworICAgIGRlZiB0ZXN0X21pc3NpbmdiZWdpbihzZWxmKToKKyAgICAgICAgaW5wID0gY1N0cmluZ0lPLlN0cmluZ0lPKCIiKQorICAgICAgICBvdXQgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB1dS5kZWNvZGUoaW5wLCBvdXQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQorICAgICAgICBleGNlcHQgdXUuRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIk5vIHZhbGlkIGJlZ2luIGxpbmUgZm91bmQgaW4gaW5wdXQgZmlsZSIpCisKK2NsYXNzIFVVU3RkSU9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zdGRpbiA9IHN5cy5zdGRpbgorICAgICAgICBzZWxmLnN0ZG91dCA9IHN5cy5zdGRvdXQKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLnN0ZGluID0gc2VsZi5zdGRpbgorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5zdGRvdXQKKworICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKKyAgICAgICAgc3lzLnN0ZGluID0gY1N0cmluZ0lPLlN0cmluZ0lPKHBsYWludGV4dCkKKyAgICAgICAgc3lzLnN0ZG91dCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHV1LmVuY29kZSgiLSIsICItIiwgInQxIiwgMDY2NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIGVuY29kZWR0ZXh0d3JhcHBlZCAlICgwNjY2LCAidDEiKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIHN5cy5zdGRpbiA9IGNTdHJpbmdJTy5TdHJpbmdJTyhlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY2NiwgInQxIikpCisgICAgICAgIHN5cy5zdGRvdXQgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB1dS5kZWNvZGUoIi0iLCAiLSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLnN0ZG91dC5nZXR2YWx1ZSgpLCBwbGFpbnRleHQpCisKK2NsYXNzIFVVRmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9raWxsKHNlbGYsIGYpOgorICAgICAgICAjIGNsb3NlIGFuZCByZW1vdmUgZmlsZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IChTeXN0ZW1FeGl0LCBLZXlib2FyZEludGVycnVwdCk6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhmLm5hbWUpCisgICAgICAgIGV4Y2VwdCAoU3lzdGVtRXhpdCwgS2V5Ym9hcmRJbnRlcnJ1cHQpOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRtcGluICA9IHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiaSIKKyAgICAgICAgc2VsZi50bXBvdXQgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIm8iCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGRlbCBzZWxmLnRtcGluCisgICAgICAgIGRlbCBzZWxmLnRtcG91dAorCisgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgorICAgICAgICBmaW4gPSBmb3V0ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYudG1waW4pCisgICAgICAgICAgICBmaW4gPSBvcGVuKHNlbGYudG1waW4sICd3YicpCisgICAgICAgICAgICBmaW4ud3JpdGUocGxhaW50ZXh0KQorICAgICAgICAgICAgZmluLmNsb3NlKCkKKworICAgICAgICAgICAgZmluID0gb3BlbihzZWxmLnRtcGluLCAncmInKQorICAgICAgICAgICAgZm91dCA9IG9wZW4oc2VsZi50bXBvdXQsICd3JykKKyAgICAgICAgICAgIHV1LmVuY29kZShmaW4sIGZvdXQsIHNlbGYudG1waW4sIG1vZGU9MDY0NCkKKyAgICAgICAgICAgIGZpbi5jbG9zZSgpCisgICAgICAgICAgICBmb3V0LmNsb3NlKCkKKworICAgICAgICAgICAgZm91dCA9IG9wZW4oc2VsZi50bXBvdXQsICdyJykKKyAgICAgICAgICAgIHMgPSBmb3V0LnJlYWQoKQorICAgICAgICAgICAgZm91dC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGVuY29kZWR0ZXh0d3JhcHBlZCAlICgwNjQ0LCBzZWxmLnRtcGluKSkKKworICAgICAgICAgICAgIyBpbl9maWxlIGFuZCBvdXRfZmlsZSBhcyBmaWxlbmFtZXMKKyAgICAgICAgICAgIHV1LmVuY29kZShzZWxmLnRtcGluLCBzZWxmLnRtcG91dCwgc2VsZi50bXBpbiwgbW9kZT0wNjQ0KQorICAgICAgICAgICAgZm91dCA9IG9wZW4oc2VsZi50bXBvdXQsICdyJykKKyAgICAgICAgICAgIHMgPSBmb3V0LnJlYWQoKQorICAgICAgICAgICAgZm91dC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGVuY29kZWR0ZXh0d3JhcHBlZCAlICgwNjQ0LCBzZWxmLnRtcGluKSkKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fa2lsbChmaW4pCisgICAgICAgICAgICBzZWxmLl9raWxsKGZvdXQpCisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIGYgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoc2VsZi50bXBpbikKKyAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYudG1waW4sICd3JykKKyAgICAgICAgICAgIGYud3JpdGUoZW5jb2RlZHRleHR3cmFwcGVkICUgKDA2NDQsIHNlbGYudG1wb3V0KSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBmID0gb3BlbihzZWxmLnRtcGluLCAncicpCisgICAgICAgICAgICB1dS5kZWNvZGUoZikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBmID0gb3BlbihzZWxmLnRtcG91dCwgJ3InKQorICAgICAgICAgICAgcyA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcGxhaW50ZXh0KQorICAgICAgICAgICAgIyBYWFggaXMgdGhlcmUgYW4geHAgd2F5IHRvIHZlcmlmeSB0aGUgbW9kZT8KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2tpbGwoZikKKworICAgIGRlZiB0ZXN0X2RlY29kZV9maWxlbmFtZShzZWxmKToKKyAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLnRtcGluKQorICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi50bXBpbiwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZShlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY0NCwgc2VsZi50bXBvdXQpKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIHV1LmRlY29kZShzZWxmLnRtcGluKQorCisgICAgICAgICAgICBmID0gb3BlbihzZWxmLnRtcG91dCwgJ3InKQorICAgICAgICAgICAgcyA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcGxhaW50ZXh0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fa2lsbChmKQorCisgICAgZGVmIHRlc3RfZGVjb2RldHdpY2Uoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgZGVjb2RlKCkgd2lsbCByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGZpbGUKKyAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTyhlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY0NCwgc2VsZi50bXBvdXQpKQorCisgICAgICAgICAgICBmID0gb3BlbihzZWxmLnRtcGluLCAncicpCisgICAgICAgICAgICB1dS5kZWNvZGUoZikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBmID0gb3BlbihzZWxmLnRtcGluLCAncicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1dS5FcnJvciwgdXUuZGVjb2RlLCBmKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9raWxsKGYpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFVVVGVzdCwgVVVTdGRJT1Rlc3QsIFVVRmlsZVRlc3QpCisKK2lmIF9fbmFtZV9fPT0iX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF91dWlkLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXVpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTAzMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfdXVpZC5weQpAQCAtMCwwICsxLDQ4MiBAQAorZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdXVpZAorCitkZWYgaW1wb3J0YWJsZShuYW1lKToKKyAgICB0cnk6CisgICAgICAgIF9faW1wb3J0X18obmFtZSkKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBUZXN0VVVJRChUZXN0Q2FzZSk6CisgICAgbGFzdF9ub2RlID0gTm9uZQorICAgIHNvdXJjZTJub2RlID0ge30KKworICAgIGRlZiB0ZXN0X1VVSUQoc2VsZik6CisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBhc2NlbmRpbmcgPSBbXQorICAgICAgICBmb3IgKHN0cmluZywgY3VybHksIGhleCwgYnl0ZXMsIGJ5dGVzX2xlLCBmaWVsZHMsIGludGVnZXIsIHVybiwKKyAgICAgICAgICAgICB0aW1lLCBjbG9ja19zZXEsIHZhcmlhbnQsIHZlcnNpb24pIGluIFsKKyAgICAgICAgICAgICgnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAnezAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMH0nLAorICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsCisgICAgICAgICAgICAgJ1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwJywKKyAgICAgICAgICAgICAnXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAnLAorICAgICAgICAgICAgICgwLCAwLCAwLCAwLCAwLCAwKSwKKyAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICd1cm46dXVpZDowMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLAorICAgICAgICAgICAgIDAsIDAsIHV1aWQuUkVTRVJWRURfTkNTLCBOb25lKSwKKyAgICAgICAgICAgICgnMDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMGEwYjBjMGQwZTBmJywKKyAgICAgICAgICAgICAnezAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBhMGIwYzBkMGUwZn0nLAorICAgICAgICAgICAgICcwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZicsCisgICAgICAgICAgICAgJ1wwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhcdFxuXHgwYlx4MGNceDBkXHgwZVx4MGYnLAorICAgICAgICAgICAgICdceDAzXHgwMlx4MDFcMFx4MDVceDA0XHgwN1x4MDZceDA4XHRcblx4MGJceDBjXHgwZFx4MGVceDBmJywKKyAgICAgICAgICAgICAoMHgwMDAxMDIwM0wsIDB4MDQwNSwgMHgwNjA3LCA4LCA5LCAweDBhMGIwYzBkMGUwZkwpLAorICAgICAgICAgICAgIDB4MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGZMLAorICAgICAgICAgICAgICd1cm46dXVpZDowMDAxMDIwMy0wNDA1LTA2MDctMDgwOS0wYTBiMGMwZDBlMGYnLAorICAgICAgICAgICAgIDB4NjA3MDQwNTAwMDEwMjAzTCwgMHg4MDksIHV1aWQuUkVTRVJWRURfTkNTLCBOb25lKSwKKyAgICAgICAgICAgICgnMDJkOWU2ZDUtOTQ2Ny0zODJlLThmOWItOTMwMGE2NGFjM2NkJywKKyAgICAgICAgICAgICAnezAyZDllNmQ1LTk0NjctMzgyZS04ZjliLTkzMDBhNjRhYzNjZH0nLAorICAgICAgICAgICAgICcwMmQ5ZTZkNTk0NjczODJlOGY5YjkzMDBhNjRhYzNjZCcsCisgICAgICAgICAgICAgJ1x4MDJceGQ5XHhlNlx4ZDVceDk0XHg2N1x4MzhceDJlXHg4Zlx4OWJceDkzXHgwMFx4YTZceDRhXHhjM1x4Y2QnLAorICAgICAgICAgICAgICdceGQ1XHhlNlx4ZDlceDAyXHg2N1x4OTRceDJlXHgzOFx4OGZceDliXHg5M1x4MDBceGE2XHg0YVx4YzNceGNkJywKKyAgICAgICAgICAgICAoMHgwMmQ5ZTZkNUwsIDB4OTQ2NywgMHgzODJlLCAweDhmLCAweDliLCAweDkzMDBhNjRhYzNjZEwpLAorICAgICAgICAgICAgIDB4MDJkOWU2ZDU5NDY3MzgyZThmOWI5MzAwYTY0YWMzY2RMLAorICAgICAgICAgICAgICd1cm46dXVpZDowMmQ5ZTZkNS05NDY3LTM4MmUtOGY5Yi05MzAwYTY0YWMzY2QnLAorICAgICAgICAgICAgIDB4ODJlOTQ2NzAyZDllNmQ1TCwgMHhmOWIsIHV1aWQuUkZDXzQxMjIsIDMpLAorICAgICAgICAgICAgKCcxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgnLAorICAgICAgICAgICAgICd7MTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4fScsCisgICAgICAgICAgICAgJzEyMzQ1Njc4MTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4JywKKyAgICAgICAgICAgICAnXHgxMlx4MzRceDU2XHg3OCcqNCwKKyAgICAgICAgICAgICAnXHg3OFx4NTZceDM0XHgxMlx4MzRceDEyXHg3OFx4NTZceDEyXHgzNFx4NTZceDc4XHgxMlx4MzRceDU2XHg3OCcsCisgICAgICAgICAgICAgKDB4MTIzNDU2NzgsIDB4MTIzNCwgMHg1Njc4LCAweDEyLCAweDM0LCAweDU2NzgxMjM0NTY3OCksCisgICAgICAgICAgICAgMHgxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2NzgxMjM0NTY3OCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6MTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4JywKKyAgICAgICAgICAgICAweDY3ODEyMzQxMjM0NTY3OEwsIDB4MTIzNCwgdXVpZC5SRVNFUlZFRF9OQ1MsIE5vbmUpLAorICAgICAgICAgICAgKCc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnLAorICAgICAgICAgICAgICd7NmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4fScsCisgICAgICAgICAgICAgJzZiYTdiODEwOWRhZDExZDE4MGI0MDBjMDRmZDQzMGM4JywKKyAgICAgICAgICAgICAnXHg2Ylx4YTdceGI4XHgxMFx4OWRceGFkXHgxMVx4ZDFceDgwXHhiNFx4MDBceGMwXHg0Zlx4ZDRceDMwXHhjOCcsCisgICAgICAgICAgICAgJ1x4MTBceGI4XHhhN1x4NmJceGFkXHg5ZFx4ZDFceDExXHg4MFx4YjRceDAwXHhjMFx4NGZceGQ0XHgzMFx4YzgnLAorICAgICAgICAgICAgICgweDZiYTdiODEwTCwgMHg5ZGFkLCAweDExZDEsIDB4ODAsIDB4YjQsIDB4MDBjMDRmZDQzMGM4TCksCisgICAgICAgICAgICAgMHg2YmE3YjgxMDlkYWQxMWQxODBiNDAwYzA0ZmQ0MzBjOEwsCisgICAgICAgICAgICAgJ3Vybjp1dWlkOjZiYTdiODEwLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCcsCisgICAgICAgICAgICAgMHgxZDE5ZGFkNmJhN2I4MTBMLCAweGI0LCB1dWlkLlJGQ180MTIyLCAxKSwKKyAgICAgICAgICAgICgnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JywKKyAgICAgICAgICAgICAnezZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOH0nLAorICAgICAgICAgICAgICc2YmE3YjgxMTlkYWQxMWQxODBiNDAwYzA0ZmQ0MzBjOCcsCisgICAgICAgICAgICAgJ1x4NmJceGE3XHhiOFx4MTFceDlkXHhhZFx4MTFceGQxXHg4MFx4YjRceDAwXHhjMFx4NGZceGQ0XHgzMFx4YzgnLAorICAgICAgICAgICAgICdceDExXHhiOFx4YTdceDZiXHhhZFx4OWRceGQxXHgxMVx4ODBceGI0XHgwMFx4YzBceDRmXHhkNFx4MzBceGM4JywKKyAgICAgICAgICAgICAoMHg2YmE3YjgxMUwsIDB4OWRhZCwgMHgxMWQxLCAweDgwLCAweGI0LCAweDAwYzA0ZmQ0MzBjOEwpLAorICAgICAgICAgICAgIDB4NmJhN2I4MTE5ZGFkMTFkMTgwYjQwMGMwNGZkNDMwYzhMLAorICAgICAgICAgICAgICd1cm46dXVpZDo2YmE3YjgxMS05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnLAorICAgICAgICAgICAgIDB4MWQxOWRhZDZiYTdiODExTCwgMHhiNCwgdXVpZC5SRkNfNDEyMiwgMSksCisgICAgICAgICAgICAoJzZiYTdiODEyLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCcsCisgICAgICAgICAgICAgJ3s2YmE3YjgxMi05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzh9JywKKyAgICAgICAgICAgICAnNmJhN2I4MTI5ZGFkMTFkMTgwYjQwMGMwNGZkNDMwYzgnLAorICAgICAgICAgICAgICdceDZiXHhhN1x4YjhceDEyXHg5ZFx4YWRceDExXHhkMVx4ODBceGI0XHgwMFx4YzBceDRmXHhkNFx4MzBceGM4JywKKyAgICAgICAgICAgICAnXHgxMlx4YjhceGE3XHg2Ylx4YWRceDlkXHhkMVx4MTFceDgwXHhiNFx4MDBceGMwXHg0Zlx4ZDRceDMwXHhjOCcsCisgICAgICAgICAgICAgKDB4NmJhN2I4MTJMLCAweDlkYWQsIDB4MTFkMSwgMHg4MCwgMHhiNCwgMHgwMGMwNGZkNDMwYzhMKSwKKyAgICAgICAgICAgICAweDZiYTdiODEyOWRhZDExZDE4MGI0MDBjMDRmZDQzMGM4TCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6NmJhN2I4MTItOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JywKKyAgICAgICAgICAgICAweDFkMTlkYWQ2YmE3YjgxMkwsIDB4YjQsIHV1aWQuUkZDXzQxMjIsIDEpLAorICAgICAgICAgICAgKCc2YmE3YjgxNC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnLAorICAgICAgICAgICAgICd7NmJhN2I4MTQtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4fScsCisgICAgICAgICAgICAgJzZiYTdiODE0OWRhZDExZDE4MGI0MDBjMDRmZDQzMGM4JywKKyAgICAgICAgICAgICAnXHg2Ylx4YTdceGI4XHgxNFx4OWRceGFkXHgxMVx4ZDFceDgwXHhiNFx4MDBceGMwXHg0Zlx4ZDRceDMwXHhjOCcsCisgICAgICAgICAgICAgJ1x4MTRceGI4XHhhN1x4NmJceGFkXHg5ZFx4ZDFceDExXHg4MFx4YjRceDAwXHhjMFx4NGZceGQ0XHgzMFx4YzgnLAorICAgICAgICAgICAgICgweDZiYTdiODE0TCwgMHg5ZGFkLCAweDExZDEsIDB4ODAsIDB4YjQsIDB4MDBjMDRmZDQzMGM4TCksCisgICAgICAgICAgICAgMHg2YmE3YjgxNDlkYWQxMWQxODBiNDAwYzA0ZmQ0MzBjOEwsCisgICAgICAgICAgICAgJ3Vybjp1dWlkOjZiYTdiODE0LTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCcsCisgICAgICAgICAgICAgMHgxZDE5ZGFkNmJhN2I4MTRMLCAweGI0LCB1dWlkLlJGQ180MTIyLCAxKSwKKyAgICAgICAgICAgICgnN2Q0NDQ4NDAtOWRjMC0xMWQxLWIyNDUtNWZmZGNlNzRmYWQyJywKKyAgICAgICAgICAgICAnezdkNDQ0ODQwLTlkYzAtMTFkMS1iMjQ1LTVmZmRjZTc0ZmFkMn0nLAorICAgICAgICAgICAgICc3ZDQ0NDg0MDlkYzAxMWQxYjI0NTVmZmRjZTc0ZmFkMicsCisgICAgICAgICAgICAgJ1x4N2RceDQ0XHg0OFx4NDBceDlkXHhjMFx4MTFceGQxXHhiMlx4NDVceDVmXHhmZFx4Y2VceDc0XHhmYVx4ZDInLAorICAgICAgICAgICAgICdceDQwXHg0OFx4NDRceDdkXHhjMFx4OWRceGQxXHgxMVx4YjJceDQ1XHg1Zlx4ZmRceGNlXHg3NFx4ZmFceGQyJywKKyAgICAgICAgICAgICAoMHg3ZDQ0NDg0MEwsIDB4OWRjMCwgMHgxMWQxLCAweGIyLCAweDQ1LCAweDVmZmRjZTc0ZmFkMkwpLAorICAgICAgICAgICAgIDB4N2Q0NDQ4NDA5ZGMwMTFkMWIyNDU1ZmZkY2U3NGZhZDJMLAorICAgICAgICAgICAgICd1cm46dXVpZDo3ZDQ0NDg0MC05ZGMwLTExZDEtYjI0NS01ZmZkY2U3NGZhZDInLAorICAgICAgICAgICAgIDB4MWQxOWRjMDdkNDQ0ODQwTCwgMHgzMjQ1LCB1dWlkLlJGQ180MTIyLCAxKSwKKyAgICAgICAgICAgICgnZTkwMjg5M2EtOWQyMi0zYzdlLWE3YjgtZDZlMzEzYjcxZDlmJywKKyAgICAgICAgICAgICAne2U5MDI4OTNhLTlkMjItM2M3ZS1hN2I4LWQ2ZTMxM2I3MWQ5Zn0nLAorICAgICAgICAgICAgICdlOTAyODkzYTlkMjIzYzdlYTdiOGQ2ZTMxM2I3MWQ5ZicsCisgICAgICAgICAgICAgJ1x4ZTlceDAyXHg4OVx4M2FceDlkXHgyMlx4M2NceDdlXHhhN1x4YjhceGQ2XHhlM1x4MTNceGI3XHgxZFx4OWYnLAorICAgICAgICAgICAgICdceDNhXHg4OVx4MDJceGU5XHgyMlx4OWRceDdlXHgzY1x4YTdceGI4XHhkNlx4ZTNceDEzXHhiN1x4MWRceDlmJywKKyAgICAgICAgICAgICAoMHhlOTAyODkzYUwsIDB4OWQyMiwgMHgzYzdlLCAweGE3LCAweGI4LCAweGQ2ZTMxM2I3MWQ5ZkwpLAorICAgICAgICAgICAgIDB4ZTkwMjg5M2E5ZDIyM2M3ZWE3YjhkNmUzMTNiNzFkOWZMLAorICAgICAgICAgICAgICd1cm46dXVpZDplOTAyODkzYS05ZDIyLTNjN2UtYTdiOC1kNmUzMTNiNzFkOWYnLAorICAgICAgICAgICAgIDB4YzdlOWQyMmU5MDI4OTNhTCwgMHgyN2I4LCB1dWlkLlJGQ180MTIyLCAzKSwKKyAgICAgICAgICAgICgnZWI0MjQwMjYtNmY1NC00ZWY4LWE0ZDAtYmI2NThhMWZjNmNmJywKKyAgICAgICAgICAgICAne2ViNDI0MDI2LTZmNTQtNGVmOC1hNGQwLWJiNjU4YTFmYzZjZn0nLAorICAgICAgICAgICAgICdlYjQyNDAyNjZmNTQ0ZWY4YTRkMGJiNjU4YTFmYzZjZicsCisgICAgICAgICAgICAgJ1x4ZWJceDQyXHg0MFx4MjZceDZmXHg1NFx4NGVceGY4XHhhNFx4ZDBceGJiXHg2NVx4OGFceDFmXHhjNlx4Y2YnLAorICAgICAgICAgICAgICdceDI2XHg0MFx4NDJceGViXHg1NFx4NmZceGY4XHg0ZVx4YTRceGQwXHhiYlx4NjVceDhhXHgxZlx4YzZceGNmJywKKyAgICAgICAgICAgICAoMHhlYjQyNDAyNkwsIDB4NmY1NCwgMHg0ZWY4LCAweGE0LCAweGQwLCAweGJiNjU4YTFmYzZjZkwpLAorICAgICAgICAgICAgIDB4ZWI0MjQwMjY2ZjU0NGVmOGE0ZDBiYjY1OGExZmM2Y2ZMLAorICAgICAgICAgICAgICd1cm46dXVpZDplYjQyNDAyNi02ZjU0LTRlZjgtYTRkMC1iYjY1OGExZmM2Y2YnLAorICAgICAgICAgICAgIDB4ZWY4NmY1NGViNDI0MDI2TCwgMHgyNGQwLCB1dWlkLlJGQ180MTIyLCA0KSwKKyAgICAgICAgICAgICgnZjgxZDRmYWUtN2RlYy0xMWQwLWE3NjUtMDBhMGM5MWU2YmY2JywKKyAgICAgICAgICAgICAne2Y4MWQ0ZmFlLTdkZWMtMTFkMC1hNzY1LTAwYTBjOTFlNmJmNn0nLAorICAgICAgICAgICAgICdmODFkNGZhZTdkZWMxMWQwYTc2NTAwYTBjOTFlNmJmNicsCisgICAgICAgICAgICAgJ1x4ZjhceDFkXHg0Zlx4YWVceDdkXHhlY1x4MTFceGQwXHhhN1x4NjVceDAwXHhhMFx4YzlceDFlXHg2Ylx4ZjYnLAorICAgICAgICAgICAgICdceGFlXHg0Zlx4MWRceGY4XHhlY1x4N2RceGQwXHgxMVx4YTdceDY1XHgwMFx4YTBceGM5XHgxZVx4NmJceGY2JywKKyAgICAgICAgICAgICAoMHhmODFkNGZhZUwsIDB4N2RlYywgMHgxMWQwLCAweGE3LCAweDY1LCAweDAwYTBjOTFlNmJmNkwpLAorICAgICAgICAgICAgIDB4ZjgxZDRmYWU3ZGVjMTFkMGE3NjUwMGEwYzkxZTZiZjZMLAorICAgICAgICAgICAgICd1cm46dXVpZDpmODFkNGZhZS03ZGVjLTExZDAtYTc2NS0wMGEwYzkxZTZiZjYnLAorICAgICAgICAgICAgIDB4MWQwN2RlY2Y4MWQ0ZmFlTCwgMHgyNzY1LCB1dWlkLlJGQ180MTIyLCAxKSwKKyAgICAgICAgICAgICgnZmZmZWZkZmMtZmZmZS1mZmZlLWZmZmUtZmZmZWZkZmNmYmZhJywKKyAgICAgICAgICAgICAne2ZmZmVmZGZjLWZmZmUtZmZmZS1mZmZlLWZmZmVmZGZjZmJmYX0nLAorICAgICAgICAgICAgICdmZmZlZmRmY2ZmZmVmZmZlZmZmZWZmZmVmZGZjZmJmYScsCisgICAgICAgICAgICAgJ1x4ZmZceGZlXHhmZFx4ZmNceGZmXHhmZVx4ZmZceGZlXHhmZlx4ZmVceGZmXHhmZVx4ZmRceGZjXHhmYlx4ZmEnLAorICAgICAgICAgICAgICdceGZjXHhmZFx4ZmVceGZmXHhmZVx4ZmZceGZlXHhmZlx4ZmZceGZlXHhmZlx4ZmVceGZkXHhmY1x4ZmJceGZhJywKKyAgICAgICAgICAgICAoMHhmZmZlZmRmY0wsIDB4ZmZmZSwgMHhmZmZlLCAweGZmLCAweGZlLCAweGZmZmVmZGZjZmJmYUwpLAorICAgICAgICAgICAgIDB4ZmZmZWZkZmNmZmZlZmZmZWZmZmVmZmZlZmRmY2ZiZmFMLAorICAgICAgICAgICAgICd1cm46dXVpZDpmZmZlZmRmYy1mZmZlLWZmZmUtZmZmZS1mZmZlZmRmY2ZiZmEnLAorICAgICAgICAgICAgIDB4ZmZlZmZmZWZmZmVmZGZjTCwgMHgzZmZlLCB1dWlkLlJFU0VSVkVEX0ZVVFVSRSwgTm9uZSksCisgICAgICAgICAgICAoJ2ZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZicsCisgICAgICAgICAgICAgJ3tmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmZ9JywKKyAgICAgICAgICAgICAnZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYnLAorICAgICAgICAgICAgICdceGZmJyoxNiwKKyAgICAgICAgICAgICAnXHhmZicqMTYsCisgICAgICAgICAgICAgKDB4ZmZmZmZmZmZMLCAweGZmZmZMLCAweGZmZmZMLCAweGZmLCAweGZmLCAweGZmZmZmZmZmZmZmZkwpLAorICAgICAgICAgICAgIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMLAorICAgICAgICAgICAgICd1cm46dXVpZDpmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYnLAorICAgICAgICAgICAgIDB4ZmZmZmZmZmZmZmZmZmZmTCwgMHgzZmZmLCB1dWlkLlJFU0VSVkVEX0ZVVFVSRSwgTm9uZSksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgZXF1aXZhbGVudHMgPSBbXQorICAgICAgICAgICAgIyBDb25zdHJ1Y3QgZWFjaCBVVUlEIGluIHNldmVyYWwgZGlmZmVyZW50IHdheXMuCisgICAgICAgICAgICBmb3IgdSBpbiBbdXVpZC5VVUlEKHN0cmluZyksIHV1aWQuVVVJRChjdXJseSksIHV1aWQuVVVJRChoZXgpLAorICAgICAgICAgICAgICAgICAgICAgIHV1aWQuVVVJRChieXRlcz1ieXRlcyksIHV1aWQuVVVJRChieXRlc19sZT1ieXRlc19sZSksCisgICAgICAgICAgICAgICAgICAgICAgdXVpZC5VVUlEKGZpZWxkcz1maWVsZHMpLCB1dWlkLlVVSUQoaW50PWludGVnZXIpLAorICAgICAgICAgICAgICAgICAgICAgIHV1aWQuVVVJRCh1cm4pXToKKyAgICAgICAgICAgICAgICAjIFRlc3QgYWxsIGNvbnZlcnNpb25zIGFuZCBwcm9wZXJ0aWVzIG9mIHRoZSBVVUlEIG9iamVjdC4KKyAgICAgICAgICAgICAgICBlcXVhbChzdHIodSksIHN0cmluZykKKyAgICAgICAgICAgICAgICBlcXVhbChpbnQodSksIGludGVnZXIpCisgICAgICAgICAgICAgICAgZXF1YWwodS5ieXRlcywgYnl0ZXMpCisgICAgICAgICAgICAgICAgZXF1YWwodS5ieXRlc19sZSwgYnl0ZXNfbGUpCisgICAgICAgICAgICAgICAgZXF1YWwodS5maWVsZHMsIGZpZWxkcykKKyAgICAgICAgICAgICAgICBlcXVhbCh1LnRpbWVfbG93LCBmaWVsZHNbMF0pCisgICAgICAgICAgICAgICAgZXF1YWwodS50aW1lX21pZCwgZmllbGRzWzFdKQorICAgICAgICAgICAgICAgIGVxdWFsKHUudGltZV9oaV92ZXJzaW9uLCBmaWVsZHNbMl0pCisgICAgICAgICAgICAgICAgZXF1YWwodS5jbG9ja19zZXFfaGlfdmFyaWFudCwgZmllbGRzWzNdKQorICAgICAgICAgICAgICAgIGVxdWFsKHUuY2xvY2tfc2VxX2xvdywgZmllbGRzWzRdKQorICAgICAgICAgICAgICAgIGVxdWFsKHUubm9kZSwgZmllbGRzWzVdKQorICAgICAgICAgICAgICAgIGVxdWFsKHUuaGV4LCBoZXgpCisgICAgICAgICAgICAgICAgZXF1YWwodS5pbnQsIGludGVnZXIpCisgICAgICAgICAgICAgICAgZXF1YWwodS51cm4sIHVybikKKyAgICAgICAgICAgICAgICBlcXVhbCh1LnRpbWUsIHRpbWUpCisgICAgICAgICAgICAgICAgZXF1YWwodS5jbG9ja19zZXEsIGNsb2NrX3NlcSkKKyAgICAgICAgICAgICAgICBlcXVhbCh1LnZhcmlhbnQsIHZhcmlhbnQpCisgICAgICAgICAgICAgICAgZXF1YWwodS52ZXJzaW9uLCB2ZXJzaW9uKQorICAgICAgICAgICAgICAgIGVxdWl2YWxlbnRzLmFwcGVuZCh1KQorCisgICAgICAgICAgICAjIERpZmZlcmVudCBjb25zdHJ1Y3Rpb24gbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZSBVVUlELgorICAgICAgICAgICAgZm9yIHUgaW4gZXF1aXZhbGVudHM6CisgICAgICAgICAgICAgICAgZm9yIHYgaW4gZXF1aXZhbGVudHM6CisgICAgICAgICAgICAgICAgICAgIGVxdWFsKHUsIHYpCisgICAgICAgICAgICBhc2NlbmRpbmcuYXBwZW5kKHUpCisKKyAgICAgICAgIyBUZXN0IGNvbXBhcmlzb24gb2YgVVVJRHMuCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihhc2NlbmRpbmcpKToKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGxlbihhc2NlbmRpbmcpKToKKyAgICAgICAgICAgICAgICBlcXVhbChjbXAoaSwgaiksIGNtcChhc2NlbmRpbmdbaV0sIGFzY2VuZGluZ1tqXSkpCisKKyAgICAgICAgIyBUZXN0IHNvcnRpbmcgb2YgVVVJRHMgKGFib3ZlIGxpc3QgaXMgaW4gYXNjZW5kaW5nIG9yZGVyKS4KKyAgICAgICAgcmVzb3J0ZWQgPSBhc2NlbmRpbmdbOl0KKyAgICAgICAgcmVzb3J0ZWQucmV2ZXJzZSgpCisgICAgICAgIHJlc29ydGVkLnNvcnQoKQorICAgICAgICBlcXVhbChhc2NlbmRpbmcsIHJlc29ydGVkKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgYmFkdmFsdWUgPSBsYW1iZGEgZjogc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZikKKyAgICAgICAgYmFkdHlwZSA9IGxhbWJkYSBmOiBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYpCisKKyAgICAgICAgIyBCYWRseSBmb3JtZWQgaGV4IHN0cmluZ3MuCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKCcnKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoJ2FiYycpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRCgnMTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2NycpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRCgnMTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2Nzg5JykpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKCcxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2Nzh6MjM0NTY3OCcpKQorCisgICAgICAgICMgQmFkbHkgZm9ybWVkIGJ5dGVzLgorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChieXRlcz0nYWJjJykpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGJ5dGVzPSdcMCcqMTUpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChieXRlcz0nXDAnKjE3KSkKKworICAgICAgICAjIEJhZGx5IGZvcm1lZCBieXRlc19sZS4KKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoYnl0ZXNfbGU9J2FiYycpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChieXRlc19sZT0nXDAnKjE1KSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoYnl0ZXNfbGU9J1wwJyoxNykpCisKKyAgICAgICAgIyBCYWRseSBmb3JtZWQgZmllbGRzLgorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KDEsKSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oMSwgMiwgMywgNCwgNSkpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KDEsIDIsIDMsIDQsIDUsIDYsIDcpKSkKKworICAgICAgICAjIEZpZWxkIHZhbHVlcyBvdXQgb2YgcmFuZ2UuCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oLTEsIDAsIDAsIDAsIDAsIDApKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgweDEwMDAwMDAwMEwsIDAsIDAsIDAsIDAsIDApKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgwLCAtMSwgMCwgMCwgMCwgMCkpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KDAsIDB4MTAwMDBMLCAwLCAwLCAwLCAwKSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oMCwgMCwgLTEsIDAsIDAsIDApKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgwLCAwLCAweDEwMDAwTCwgMCwgMCwgMCkpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KDAsIDAsIDAsIC0xLCAwLCAwKSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oMCwgMCwgMCwgMHgxMDBMLCAwLCAwKSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oMCwgMCwgMCwgMCwgLTEsIDApKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgwLCAwLCAwLCAwLCAweDEwMEwsIDApKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgwLCAwLCAwLCAwLCAwLCAtMSkpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KDAsIDAsIDAsIDAsIDAsIDB4MTAwMDAwMDAwMDAwMEwpKSkKKworICAgICAgICAjIFZlcnNpb24gbnVtYmVyIG91dCBvZiByYW5nZS4KKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoJzAwJyoxNiwgdmVyc2lvbj0wKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoJzAwJyoxNiwgdmVyc2lvbj02KSkKKworICAgICAgICAjIEludGVnZXIgdmFsdWUgb3V0IG9mIHJhbmdlLgorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChpbnQ9LTEpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChpbnQ9MTw8MTI4TCkpCisKKyAgICAgICAgIyBNdXN0IHN1cHBseSBleGFjdGx5IG9uZSBvZiBoZXgsIGJ5dGVzLCBmaWVsZHMsIGludC4KKyAgICAgICAgaCwgYiwgZiwgaSA9ICcwMCcqMTYsICdcMCcqMTYsICgwLCAwLCAwLCAwLCAwLCAwKSwgMAorICAgICAgICB1dWlkLlVVSUQoaCkKKyAgICAgICAgdXVpZC5VVUlEKGhleD1oKQorICAgICAgICB1dWlkLlVVSUQoYnl0ZXM9YikKKyAgICAgICAgdXVpZC5VVUlEKGJ5dGVzX2xlPWIpCisgICAgICAgIHV1aWQuVVVJRChmaWVsZHM9ZikKKyAgICAgICAgdXVpZC5VVUlEKGludD1pKQorCisgICAgICAgICMgV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyAocG9zaXRpb25hbCkuCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiB1dWlkLlVVSUQoKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHV1aWQuVVVJRChoLCBiKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHV1aWQuVVVJRChoLCBiLCBiKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHV1aWQuVVVJRChoLCBiLCBiLCBmKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHV1aWQuVVVJRChoLCBiLCBiLCBmLCBpKSkKKworICAgICAgICAjIER1cGxpY2F0ZSBhcmd1bWVudHMuCisgICAgICAgIGZvciBoaCBpbiBbW10sIFsoJ2hleCcsIGgpXV06CisgICAgICAgICAgICBmb3IgYmIgaW4gW1tdLCBbKCdieXRlcycsIGIpXV06CisgICAgICAgICAgICAgICAgZm9yIGJibGUgaW4gW1tdLCBbKCdieXRlc19sZScsIGIpXV06CisgICAgICAgICAgICAgICAgICAgIGZvciBpaSBpbiBbW10sIFsoJ2ludCcsIGkpXV06CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmYgaW4gW1tdLCBbKCdmaWVsZHMnLCBmKV1dOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBkaWN0KGhoICsgYmIgKyBiYmxlICsgaWkgKyBmZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkdHlwZShsYW1iZGE6IHV1aWQuVVVJRChoLCAqKmFyZ3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWR0eXBlKGxhbWJkYTogdXVpZC5VVUlEKCoqYXJncykpCisKKyAgICAgICAgIyBJbW11dGFiaWxpdHkuCisgICAgICAgIHUgPSB1dWlkLlVVSUQoaCkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ2hleCcsIGgpKQorICAgICAgICBiYWR0eXBlKGxhbWJkYTogc2V0YXR0cih1LCAnYnl0ZXMnLCBiKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ2J5dGVzX2xlJywgYikpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICdmaWVsZHMnLCBmKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ2ludCcsIGkpKQorICAgICAgICBiYWR0eXBlKGxhbWJkYTogc2V0YXR0cih1LCAndGltZV9sb3cnLCAwKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ3RpbWVfbWlkJywgMCkpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICd0aW1lX2hpX3ZlcnNpb24nLCAwKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ3RpbWVfaGlfdmVyc2lvbicsIDApKQorICAgICAgICBiYWR0eXBlKGxhbWJkYTogc2V0YXR0cih1LCAnY2xvY2tfc2VxX2hpX3ZhcmlhbnQnLCAwKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ2Nsb2NrX3NlcV9sb3cnLCAwKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ25vZGUnLCAwKSkKKworICAgIGRlZiBjaGVja19ub2RlKHNlbGYsIG5vZGUsIHNvdXJjZSk6CisgICAgICAgIG1lc3NhZ2UgPSAiJTAxMnggaXMgbm90IGFuIFJGQyA0MTIyIG5vZGUgSUQiICUgbm9kZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8IG5vZGUsIG1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlIDwgKDFMIDw8IDQ4KSwgbWVzc2FnZSkKKworICAgICAgICBUZXN0VVVJRC5zb3VyY2Uybm9kZVtzb3VyY2VdID0gbm9kZQorICAgICAgICBpZiBUZXN0VVVJRC5sYXN0X25vZGU6CisgICAgICAgICAgICBpZiBUZXN0VVVJRC5sYXN0X25vZGUgIT0gbm9kZToKKyAgICAgICAgICAgICAgICBtc2cgPSAiZGlmZmVyZW50IHNvdXJjZXMgZGlzYWdyZWUgb24gbm9kZTpcbiIKKyAgICAgICAgICAgICAgICBmb3IgcywgbiBpbiBUZXN0VVVJRC5zb3VyY2Uybm9kZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9ICIgICAgZnJvbSBzb3VyY2UgJXIsIG5vZGUgd2FzICUwMTJ4XG4iICUgKHMsIG4pCisgICAgICAgICAgICAgICAgIyBUaGVyZSdzIGFjdHVhbGx5IG5vIHJlYXNvbiB0byBleHBlY3QgdGhlIE1BQyBhZGRyZXNzZXMKKyAgICAgICAgICAgICAgICAjIHRvIGFncmVlIGFjcm9zcyB2YXJpb3VzIG1ldGhvZHMgLS0gZS5nLiwgYSBib3ggbWF5IGhhdmUKKyAgICAgICAgICAgICAgICAjIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcywgYW5kIGRpZmZlcmVudCB3YXlzIG9mIGdldHRpbmcKKyAgICAgICAgICAgICAgICAjIGEgTUFDIGFkZHJlc3MgbWF5IGZhdm9yIGRpZmZlcmVudCBIVy4KKyAgICAgICAgICAgICAgICAjI3NlbGYuZmFpbChtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBUZXN0VVVJRC5sYXN0X25vZGUgPSBub2RlCisKKyAgICBkZWYgdGVzdF9pZmNvbmZpZ19nZXRub2RlKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGltcG9ydCBvcworICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICBub2RlID0gdXVpZC5faWZjb25maWdfZ2V0bm9kZSgpCisgICAgICAgICAgICBpZiBub2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCAnaWZjb25maWcnKQorCisgICAgZGVmIHRlc3RfaXBjb25maWdfZ2V0bm9kZShzZWxmKToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgIG5vZGUgPSB1dWlkLl9pcGNvbmZpZ19nZXRub2RlKCkKKyAgICAgICAgICAgIGlmIG5vZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19ub2RlKG5vZGUsICdpcGNvbmZpZycpCisKKyAgICBkZWYgdGVzdF9uZXRiaW9zX2dldG5vZGUoc2VsZik6CisgICAgICAgIGlmIGltcG9ydGFibGUoJ3dpbjMyd25ldCcpIGFuZCBpbXBvcnRhYmxlKCduZXRiaW9zJyk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX25vZGUodXVpZC5fbmV0Ymlvc19nZXRub2RlKCksICduZXRiaW9zJykKKworICAgIGRlZiB0ZXN0X3JhbmRvbV9nZXRub2RlKHNlbGYpOgorICAgICAgICBub2RlID0gdXVpZC5fcmFuZG9tX2dldG5vZGUoKQorICAgICAgICAjIExlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBmaXJzdCBvY3RldCBtdXN0IGJlIHNldC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUgJiAweDAxMDAwMDAwMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUgPCAoMUwgPDwgNDgpKQorCisgICAgZGVmIHRlc3RfdW5peGRsbF9nZXRub2RlKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGltcG9ydCBvcworICAgICAgICBpZiBpbXBvcnRhYmxlKCdjdHlwZXMnKSBhbmQgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgdHJ5OiAjIElzc3VlcyAxNDgxLCAzNTgxOiBfdXVpZF9nZW5lcmF0ZV90aW1lKCkgbWlnaHQgYmUgTm9uZS4KKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX25vZGUodXVpZC5fdW5peGRsbF9nZXRub2RlKCksICd1bml4ZGxsJykKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfd2luZGxsX2dldG5vZGUoc2VsZik6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBpZiBpbXBvcnRhYmxlKCdjdHlwZXMnKSBhbmQgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgc2VsZi5jaGVja19ub2RlKHV1aWQuX3dpbmRsbF9nZXRub2RlKCksICd3aW5kbGwnKQorCisgICAgZGVmIHRlc3RfZ2V0bm9kZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBub2RlMSA9IHV1aWQuZ2V0bm9kZSgpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlMSwgImdldG5vZGUxIikKKworICAgICAgICAjIFRlc3QgaXQgYWdhaW4gdG8gZW5zdXJlIGNvbnNpc3RlbmN5LgorICAgICAgICBub2RlMiA9IHV1aWQuZ2V0bm9kZSgpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlMiwgImdldG5vZGUyIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vZGUxLCBub2RlMikKKworICAgIGRlZiB0ZXN0X3V1aWQxKHNlbGYpOgorICAgICAgICAjIHV1aWQxIHJlcXVpcmVzIGN0eXBlcy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBlcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICAjIE1ha2Ugc3VyZSB1dWlkMSgpIGdlbmVyYXRlcyBVVUlEcyB0aGF0IGFyZSBhY3R1YWxseSB2ZXJzaW9uIDEuCisgICAgICAgIGZvciB1IGluIFt1dWlkLnV1aWQxKCkgZm9yIGkgaW4gcmFuZ2UoMTApXToKKyAgICAgICAgICAgIGVxdWFsKHUudmFyaWFudCwgdXVpZC5SRkNfNDEyMikKKyAgICAgICAgICAgIGVxdWFsKHUudmVyc2lvbiwgMSkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZ2VuZXJhdGVkIFVVSURzIGFyZSBhY3R1YWxseSB1bmlxdWUuCisgICAgICAgIHV1aWRzID0ge30KKyAgICAgICAgZm9yIHUgaW4gW3V1aWQudXVpZDEoKSBmb3IgaSBpbiByYW5nZSgxMDAwKV06CisgICAgICAgICAgICB1dWlkc1t1XSA9IDEKKyAgICAgICAgZXF1YWwobGVuKHV1aWRzLmtleXMoKSksIDEwMDApCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHN1cHBsaWVkIG5vZGUgSUQgYXBwZWFycyBpbiB0aGUgVVVJRC4KKyAgICAgICAgdSA9IHV1aWQudXVpZDEoMCkKKyAgICAgICAgZXF1YWwodS5ub2RlLCAwKQorICAgICAgICB1ID0gdXVpZC51dWlkMSgweDEyMzQ1Njc4OWFiYykKKyAgICAgICAgZXF1YWwodS5ub2RlLCAweDEyMzQ1Njc4OWFiYykKKyAgICAgICAgdSA9IHV1aWQudXVpZDEoMHhmZmZmZmZmZmZmZmYpCisgICAgICAgIGVxdWFsKHUubm9kZSwgMHhmZmZmZmZmZmZmZmYpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHN1cHBsaWVkIGNsb2NrIHNlcXVlbmNlIGFwcGVhcnMgaW4gdGhlIFVVSUQuCisgICAgICAgIHUgPSB1dWlkLnV1aWQxKDB4MTIzNDU2Nzg5YWJjLCAwKQorICAgICAgICBlcXVhbCh1Lm5vZGUsIDB4MTIzNDU2Nzg5YWJjKQorICAgICAgICBlcXVhbCgoKHUuY2xvY2tfc2VxX2hpX3ZhcmlhbnQgJiAweDNmKSA8PCA4KSB8IHUuY2xvY2tfc2VxX2xvdywgMCkKKyAgICAgICAgdSA9IHV1aWQudXVpZDEoMHgxMjM0NTY3ODlhYmMsIDB4MTIzNCkKKyAgICAgICAgZXF1YWwodS5ub2RlLCAweDEyMzQ1Njc4OWFiYykKKyAgICAgICAgZXF1YWwoKCh1LmNsb2NrX3NlcV9oaV92YXJpYW50ICYgMHgzZikgPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIHUuY2xvY2tfc2VxX2xvdywgMHgxMjM0KQorICAgICAgICB1ID0gdXVpZC51dWlkMSgweDEyMzQ1Njc4OWFiYywgMHgzZmZmKQorICAgICAgICBlcXVhbCh1Lm5vZGUsIDB4MTIzNDU2Nzg5YWJjKQorICAgICAgICBlcXVhbCgoKHUuY2xvY2tfc2VxX2hpX3ZhcmlhbnQgJiAweDNmKSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgdS5jbG9ja19zZXFfbG93LCAweDNmZmYpCisKKyAgICBkZWYgdGVzdF91dWlkMyhzZWxmKToKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgIyBUZXN0IHNvbWUga25vd24gdmVyc2lvbi0zIFVVSURzLgorICAgICAgICBmb3IgdSwgdiBpbiBbKHV1aWQudXVpZDModXVpZC5OQU1FU1BBQ0VfRE5TLCAncHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICc2ZmE0NTllYS1lZThhLTNjYTQtODk0ZS1kYjc3ZTE2MDM1NWUnKSwKKyAgICAgICAgICAgICAgICAgICAgICh1dWlkLnV1aWQzKHV1aWQuTkFNRVNQQUNFX1VSTCwgJ2h0dHA6Ly9weXRob24ub3JnLycpLAorICAgICAgICAgICAgICAgICAgICAgICc5ZmU4ZThjNC1hYWE4LTMyYTktYTU1Yy00NTM1YTg4Yjc0OGQnKSwKKyAgICAgICAgICAgICAgICAgICAgICh1dWlkLnV1aWQzKHV1aWQuTkFNRVNQQUNFX09JRCwgJzEuMy42LjEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAnZGQxYTFjZWYtMTNkNS0zNjhhLWFkODItZWNhNzFhY2Q0Y2QxJyksCisgICAgICAgICAgICAgICAgICAgICAodXVpZC51dWlkMyh1dWlkLk5BTUVTUEFDRV9YNTAwLCAnYz1jYScpLAorICAgICAgICAgICAgICAgICAgICAgICc2NThkMzAwMi1kYjZiLTMwNDAtYTFkMS04ZGRkN2QxODlhNGQnKSwKKyAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIGVxdWFsKHUudmFyaWFudCwgdXVpZC5SRkNfNDEyMikKKyAgICAgICAgICAgIGVxdWFsKHUudmVyc2lvbiwgMykKKyAgICAgICAgICAgIGVxdWFsKHUsIHV1aWQuVVVJRCh2KSkKKyAgICAgICAgICAgIGVxdWFsKHN0cih1KSwgdikKKworICAgIGRlZiB0ZXN0X3V1aWQ0KHNlbGYpOgorICAgICAgICAjIHV1aWQ0IHJlcXVpcmVzIGN0eXBlcy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBlcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICAjIE1ha2Ugc3VyZSB1dWlkNCgpIGdlbmVyYXRlcyBVVUlEcyB0aGF0IGFyZSBhY3R1YWxseSB2ZXJzaW9uIDQuCisgICAgICAgIGZvciB1IGluIFt1dWlkLnV1aWQ0KCkgZm9yIGkgaW4gcmFuZ2UoMTApXToKKyAgICAgICAgICAgIGVxdWFsKHUudmFyaWFudCwgdXVpZC5SRkNfNDEyMikKKyAgICAgICAgICAgIGVxdWFsKHUudmVyc2lvbiwgNCkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZ2VuZXJhdGVkIFVVSURzIGFyZSBhY3R1YWxseSB1bmlxdWUuCisgICAgICAgIHV1aWRzID0ge30KKyAgICAgICAgZm9yIHUgaW4gW3V1aWQudXVpZDQoKSBmb3IgaSBpbiByYW5nZSgxMDAwKV06CisgICAgICAgICAgICB1dWlkc1t1XSA9IDEKKyAgICAgICAgZXF1YWwobGVuKHV1aWRzLmtleXMoKSksIDEwMDApCisKKyAgICBkZWYgdGVzdF91dWlkNShzZWxmKToKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgIyBUZXN0IHNvbWUga25vd24gdmVyc2lvbi01IFVVSURzLgorICAgICAgICBmb3IgdSwgdiBpbiBbKHV1aWQudXVpZDUodXVpZC5OQU1FU1BBQ0VfRE5TLCAncHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICc4ODYzMTNlMS0zYjhhLTUzNzItOWI5MC0wYzlhZWUxOTllNWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICh1dWlkLnV1aWQ1KHV1aWQuTkFNRVNQQUNFX1VSTCwgJ2h0dHA6Ly9weXRob24ub3JnLycpLAorICAgICAgICAgICAgICAgICAgICAgICc0YzU2NWYwZC0zZjVhLTU4OTAtYjQxYi0yMGNmNDc3MDFjNWUnKSwKKyAgICAgICAgICAgICAgICAgICAgICh1dWlkLnV1aWQ1KHV1aWQuTkFNRVNQQUNFX09JRCwgJzEuMy42LjEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAnMTQ0N2ZhNjEtNTI3Ny01ZmVmLWE5YjMtZmJjNmU0NGY0YWYzJyksCisgICAgICAgICAgICAgICAgICAgICAodXVpZC51dWlkNSh1dWlkLk5BTUVTUEFDRV9YNTAwLCAnYz1jYScpLAorICAgICAgICAgICAgICAgICAgICAgICdjYzk1N2RkMS1hOTcyLTUzNDktOThjZC04NzQxOTAwMDI3OTgnKSwKKyAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIGVxdWFsKHUudmFyaWFudCwgdXVpZC5SRkNfNDEyMikKKyAgICAgICAgICAgIGVxdWFsKHUudmVyc2lvbiwgNSkKKyAgICAgICAgICAgIGVxdWFsKHUsIHV1aWQuVVVJRCh2KSkKKyAgICAgICAgICAgIGVxdWFsKHN0cih1KSwgdikKKworICAgIGRlZiB0ZXN0SXNzdWU4NjIxKHNlbGYpOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpZiBvcy5uYW1lICE9ICdwb3NpeCc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIE9uIGF0IGxlYXN0IHNvbWUgdmVyc2lvbnMgb2YgT1NYIHV1aWQudXVpZDQgZ2VuZXJhdGVzCisgICAgICAgICMgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgVVVJRHMgaW4gdGhlIHBhcmVudCBhbmQgYW55CisgICAgICAgICMgY2hpbGRyZW4gc3RhcnRlZCB1c2luZyBmb3JrLgorICAgICAgICBmZHMgPSBvcy5waXBlKCkKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgb3MuY2xvc2UoZmRzWzBdKQorICAgICAgICAgICAgdmFsdWUgPSB1dWlkLnV1aWQ0KCkKKyAgICAgICAgICAgIG9zLndyaXRlKGZkc1sxXSwgdmFsdWUuaGV4KQorICAgICAgICAgICAgb3MuX2V4aXQoMCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2xvc2UoZmRzWzFdKQorICAgICAgICAgICAgcGFyZW50X3ZhbHVlID0gdXVpZC51dWlkNCgpLmhleAorICAgICAgICAgICAgb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICBjaGlsZF92YWx1ZSA9IG9zLnJlYWQoZmRzWzBdLCAxMDApCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGFyZW50X3ZhbHVlLCBjaGlsZF92YWx1ZSkKKworCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0VVVJRCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93YWl0My5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTA3ODNiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKQEAgLTAsMCArMSwzOSBAQAorIiIiVGhpcyB0ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCB3YWl0MygpIGJlaGF2aW9yLgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LmZvcmtfd2FpdCBpbXBvcnQgRm9ya1dhaXQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgorCit0cnk6CisgICAgb3MuZm9yaworZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAib3MuZm9yayBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQzIgorCit0cnk6CisgICAgb3Mud2FpdDMKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIm9zLndhaXQzIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3Rfd2FpdDMiCisKK2NsYXNzIFdhaXQzVGVzdChGb3JrV2FpdCk6CisgICAgZGVmIHdhaXRfaW1wbChzZWxmLCBjcGlkKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgIyB3YWl0MygpIHNob3VsZG4ndCBoYW5nLCBidXQgc29tZSBvZiB0aGUgYnVpbGRib3RzIHNlZW0gdG8gaGFuZworICAgICAgICAgICAgIyBpbiB0aGUgZm9ya2luZyB0ZXN0cy4gIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBmaXggdGhlIHByb2JsZW0uCisgICAgICAgICAgICBzcGlkLCBzdGF0dXMsIHJ1c2FnZSA9IG9zLndhaXQzKG9zLldOT0hBTkcpCisgICAgICAgICAgICBpZiBzcGlkID09IGNwaWQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMS4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BpZCwgY3BpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJjYXVzZSA9ICVkLCBleGl0ID0gJWQiICUgKHN0YXR1cyYweGZmLCBzdGF0dXM+PjgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVzYWdlKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFdhaXQzVGVzdCkKKyAgICByZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2FpdDQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93YWl0NC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDRhMTFiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2FpdDQucHkKQEAgLTAsMCArMSwzMiBAQAorIiIiVGhpcyB0ZXN0IGNoZWNrcyBmb3IgY29ycmVjdCB3YWl0NCgpIGJlaGF2aW9yLgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKK2Zyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4sIGdldF9hdHRyaWJ1dGUKKworIyBJZiBlaXRoZXIgb2YgdGhlc2UgZG8gbm90IGV4aXN0LCBza2lwIHRoaXMgdGVzdC4KK2dldF9hdHRyaWJ1dGUob3MsICdmb3JrJykKK2dldF9hdHRyaWJ1dGUob3MsICd3YWl0NCcpCisKKworY2xhc3MgV2FpdDRUZXN0KEZvcmtXYWl0KToKKyAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAjIHdhaXQ0KCkgc2hvdWxkbid0IGhhbmcsIGJ1dCBzb21lIG9mIHRoZSBidWlsZGJvdHMgc2VlbSB0byBoYW5nCisgICAgICAgICAgICAjIGluIHRoZSBmb3JraW5nIHRlc3RzLiAgVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGZpeCB0aGUgcHJvYmxlbS4KKyAgICAgICAgICAgIHNwaWQsIHN0YXR1cywgcnVzYWdlID0gb3Mud2FpdDQoY3BpZCwgb3MuV05PSEFORykKKyAgICAgICAgICAgIGlmIHNwaWQgPT0gY3BpZDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BpZCwgY3BpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJjYXVzZSA9ICVkLCBleGl0ID0gJWQiICUgKHN0YXR1cyYweGZmLCBzdGF0dXM+PjgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVzYWdlKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFdhaXQ0VGVzdCkKKyAgICByZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTAyZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKQEAgLTAsMCArMSw3NjEgQEAKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCBvcworaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzdWJwcm9jZXNzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKKworaW1wb3J0IHdhcm5pbmdfdGVzdHMKKworaW1wb3J0IHdhcm5pbmdzIGFzIG9yaWdpbmFsX3dhcm5pbmdzCisKK3B5X3dhcm5pbmdzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3dhcm5pbmdzJywgYmxvY2tlZD1bJ193YXJuaW5ncyddKQorY193YXJuaW5ncyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd3YXJuaW5ncycsIGZyZXNoPVsnX3dhcm5pbmdzJ10pCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIHdhcm5pbmdzX3N0YXRlKG1vZHVsZSk6CisgICAgIiIiVXNlIGEgc3BlY2lmaWMgd2FybmluZ3MgaW1wbGVtZW50YXRpb24gaW4gd2FybmluZ190ZXN0cy4iIiIKKyAgICBnbG9iYWwgX193YXJuaW5ncmVnaXN0cnlfXworICAgIGZvciB0b19jbGVhciBpbiAoc3lzLCB3YXJuaW5nX3Rlc3RzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdG9fY2xlYXIuX193YXJuaW5ncmVnaXN0cnlfXy5jbGVhcigpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIF9fd2FybmluZ3JlZ2lzdHJ5X18uY2xlYXIoKQorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBvcmlnaW5hbF93YXJuaW5ncyA9IHdhcm5pbmdfdGVzdHMud2FybmluZ3MKKyAgICBvcmlnaW5hbF9maWx0ZXJzID0gbW9kdWxlLmZpbHRlcnMKKyAgICB0cnk6CisgICAgICAgIG1vZHVsZS5maWx0ZXJzID0gb3JpZ2luYWxfZmlsdGVyc1s6XQorICAgICAgICBtb2R1bGUuc2ltcGxlZmlsdGVyKCJvbmNlIikKKyAgICAgICAgd2FybmluZ190ZXN0cy53YXJuaW5ncyA9IG1vZHVsZQorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIHdhcm5pbmdfdGVzdHMud2FybmluZ3MgPSBvcmlnaW5hbF93YXJuaW5ncworICAgICAgICBtb2R1bGUuZmlsdGVycyA9IG9yaWdpbmFsX2ZpbHRlcnMKKworCitjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJCYXNpYyBib29ra2VlcGluZyByZXF1aXJlZCBmb3IgdGVzdGluZy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBUaGUgX193YXJuaW5ncmVnaXN0cnlfXyBuZWVkcyB0byBiZSBpbiBhIHByaXN0aW5lIHN0YXRlIGZvciB0ZXN0cworICAgICAgICAjIHRvIHdvcmsgcHJvcGVybHkuCisgICAgICAgIGlmICdfX3dhcm5pbmdyZWdpc3RyeV9fJyBpbiBnbG9iYWxzKCk6CisgICAgICAgICAgICBkZWwgZ2xvYmFscygpWydfX3dhcm5pbmdyZWdpc3RyeV9fJ10KKyAgICAgICAgaWYgaGFzYXR0cih3YXJuaW5nX3Rlc3RzLCAnX193YXJuaW5ncmVnaXN0cnlfXycpOgorICAgICAgICAgICAgZGVsIHdhcm5pbmdfdGVzdHMuX193YXJuaW5ncmVnaXN0cnlfXworICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ19fd2FybmluZ3JlZ2lzdHJ5X18nKToKKyAgICAgICAgICAgIGRlbCBzeXMuX193YXJuaW5ncmVnaXN0cnlfXworICAgICAgICAjIFRoZSAnd2FybmluZ3MnIG1vZHVsZSBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IHNvIHRoYXQgdGhlIHByb3BlcgorICAgICAgICAjIGludGVyYWN0aW9uIGJldHdlZW4gX3dhcm5pbmdzIGFuZCAnd2FybmluZ3MnIGNhbiBiZSBjb250cm9sbGVkLgorICAgICAgICBzeXMubW9kdWxlc1snd2FybmluZ3MnXSA9IHNlbGYubW9kdWxlCisgICAgICAgIHN1cGVyKEJhc2VUZXN0LCBzZWxmKS5zZXRVcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5tb2R1bGVzWyd3YXJuaW5ncyddID0gb3JpZ2luYWxfd2FybmluZ3MKKyAgICAgICAgc3VwZXIoQmFzZVRlc3QsIHNlbGYpLnRlYXJEb3duKCkKKworCitjbGFzcyBGaWx0ZXJUZXN0cyhvYmplY3QpOgorCisgICAgIiIiVGVzdGluZyB0aGUgZmlsdGVyaW5nIGZ1bmN0aW9uYWxpdHkuIiIiCisKKyAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVXNlcldhcm5pbmcsIHNlbGYubW9kdWxlLndhcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXJUZXN0cy50ZXN0X2Vycm9yIikKKworICAgIGRlZiB0ZXN0X2lnbm9yZShzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oIkZpbHRlclRlc3RzLnRlc3RfaWdub3JlIiwgVXNlcldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKworICAgIGRlZiB0ZXN0X2Fsd2F5cyhzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiRmlsdGVyVGVzdHMudGVzdF9hbHdheXMiCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1lc3NhZ2UsIHdbLTFdLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImRlZmF1bHQiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBVc2VyV2FybmluZygiRmlsdGVyVGVzdHMudGVzdF9kZWZhdWx0IikKKyAgICAgICAgICAgIGZvciB4IGluIHhyYW5nZSgyKToKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgICAgIGlmIHggPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQorICAgICAgICAgICAgICAgICAgICBkZWwgd1s6XQorICAgICAgICAgICAgICAgIGVsaWYgeCA9PSAxOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsb29wIHZhcmlhbnQgdW5oYW5kbGVkIikKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJtb2R1bGUiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBVc2VyV2FybmluZygiRmlsdGVyVGVzdHMudGVzdF9tb2R1bGUiKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgIGRlbCB3WzpdCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisKKyAgICBkZWYgdGVzdF9vbmNlKHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoIm9uY2UiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBVc2VyV2FybmluZygiRmlsdGVyVGVzdHMudGVzdF9vbmNlIikKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJ0ZXN0X3dhcm5pbmdzLnB5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQorICAgICAgICAgICAgZGVsIHdbOl0KKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJ0ZXN0X3dhcm5pbmdzLnB5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAidGVzdF93YXJuaW5nczIucHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgY2F0ZWdvcnk9V2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsdGVyVGVzdHMudGVzdF9pbmhlcml0YW5jZSIsIFVzZXJXYXJuaW5nKQorCisgICAgZGVmIHRlc3Rfb3JkZXJpbmcoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCBjYXRlZ29yeT1Vc2VyV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQ9VHJ1ZSkKKyAgICAgICAgICAgIGRlbCB3WzpdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybigiRmlsdGVyVGVzdHMudGVzdF9vcmRlcmluZyIsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgZXhjZXB0IFVzZXJXYXJuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgib3JkZXIgaGFuZGxpbmcgZm9yIGFjdGlvbnMgZmFpbGVkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQorCisgICAgZGVmIHRlc3RfZmlsdGVyd2FybmluZ3Moc2VsZik6CisgICAgICAgICMgVGVzdCBmaWx0ZXJ3YXJuaW5ncygpLgorICAgICAgICAjIEltcGxpY2l0bHkgYWxzbyB0ZXN0cyByZXNldHdhcm5pbmdzKCkuCisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgIiIsIFdhcm5pbmcsICIiLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVXNlcldhcm5pbmcsIHNlbGYubW9kdWxlLndhcm4sICdjb252ZXJ0IHRvIGVycm9yJykKKworICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICB0ZXh0ID0gJ2hhbmRsZSBub3JtYWxseScKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4odGV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbLTFdLm1lc3NhZ2UpLCB0ZXh0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdbLTFdLmNhdGVnb3J5IGlzIFVzZXJXYXJuaW5nKQorCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIiIsIFdhcm5pbmcsICIiLCAwKQorICAgICAgICAgICAgdGV4dCA9ICdmaWx0ZXJlZCBvdXQnCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKHRleHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwgdGV4dCkKKworICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCAiaGV4KiIsIFdhcm5pbmcsICIiLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVXNlcldhcm5pbmcsIHNlbGYubW9kdWxlLndhcm4sICdoZXgvb2N0JykKKyAgICAgICAgICAgIHRleHQgPSAnbm9ubWF0Y2hpbmcgdGV4dCcKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4odGV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbLTFdLm1lc3NhZ2UpLCB0ZXh0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdbLTFdLmNhdGVnb3J5IGlzIFVzZXJXYXJuaW5nKQorCitjbGFzcyBDRmlsdGVyVGVzdHMoQmFzZVRlc3QsIEZpbHRlclRlc3RzKToKKyAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCisKK2NsYXNzIFB5RmlsdGVyVGVzdHMoQmFzZVRlc3QsIEZpbHRlclRlc3RzKToKKyAgICBtb2R1bGUgPSBweV93YXJuaW5ncworCisKK2NsYXNzIFdhcm5UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IHdhcm5pbmdzLndhcm4oKSBhbmQgd2FybmluZ3Mud2Fybl9leHBsaWNpdCgpLiIiIgorCisgICAgZGVmIHRlc3RfbWVzc2FnZShzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5zaW1wbGVmaWx0ZXIoIm9uY2UiKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNCk6CisgICAgICAgICAgICAgICAgdGV4dCA9ICdtdWx0aSAlZCcgJWkgICMgRGlmZmVyZW50IHRleHQgb24gZWFjaCBjYWxsLgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4odGV4dCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwgdGV4dCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod1stMV0uY2F0ZWdvcnkgaXMgVXNlcldhcm5pbmcpCisKKyAgICBkZWYgdGVzdF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5nc19zdGF0ZShzZWxmLm1vZHVsZSk6CisgICAgICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcigic3BhbTEiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5iYXNlbmFtZSh3Wy0xXS5maWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZ190ZXN0cy5weSIpCisgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5vdXRlcigic3BhbTIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5iYXNlbmFtZSh3Wy0xXS5maWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZ190ZXN0cy5weSIpCisKKyAgICBkZWYgdGVzdF9zdGFja2xldmVsKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc3RhY2tsZXZlbCBhcmd1bWVudAorICAgICAgICAjIG1ha2Ugc3VyZSBhbGwgbWVzc2FnZXMgYXJlIGRpZmZlcmVudCwgc28gdGhlIHdhcm5pbmcgd29uJ3QgYmUgc2tpcHBlZAorICAgICAgICB3aXRoIHdhcm5pbmdzX3N0YXRlKHNlbGYubW9kdWxlKToKKyAgICAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLmlubmVyKCJzcGFtMyIsIHN0YWNrbGV2ZWw9MSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUod1stMV0uZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmdfdGVzdHMucHkiKQorICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMub3V0ZXIoInNwYW00Iiwgc3RhY2tsZXZlbD0xKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5iYXNlbmFtZSh3Wy0xXS5maWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZ190ZXN0cy5weSIpCisKKyAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLmlubmVyKCJzcGFtNSIsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUod1stMV0uZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfd2FybmluZ3MucHkiKQorICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMub3V0ZXIoInNwYW02Iiwgc3RhY2tsZXZlbD0yKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5iYXNlbmFtZSh3Wy0xXS5maWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZ190ZXN0cy5weSIpCisgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5vdXRlcigic3BhbTYuNSIsIHN0YWNrbGV2ZWw9MykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUod1stMV0uZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfd2FybmluZ3MucHkiKQorCisgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcigic3BhbTciLCBzdGFja2xldmVsPTk5OTkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMiKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19maWxlbmFtZV9ub3RfbWFpbihzZWxmKToKKyAgICAgICAgIyBJZiBfX2ZpbGVfXyBpcyBub3Qgc3BlY2lmaWVkIGFuZCBfX21haW5fXyBpcyBub3QgdGhlIG1vZHVsZSBuYW1lLAorICAgICAgICAjIHRoZW4gX19maWxlX18gc2hvdWxkIGJlIHNldCB0byB0aGUgbW9kdWxlIG5hbWUuCisgICAgICAgIGZpbGVuYW1lID0gd2FybmluZ190ZXN0cy5fX2ZpbGVfXworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgd2FybmluZ190ZXN0cy5fX2ZpbGVfXworICAgICAgICAgICAgd2l0aCB3YXJuaW5nc19zdGF0ZShzZWxmLm1vZHVsZSk6CisgICAgICAgICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcigic3BhbTgiLCBzdGFja2xldmVsPTEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0uZmlsZW5hbWUsIHdhcm5pbmdfdGVzdHMuX19uYW1lX18pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fID0gZmlsZW5hbWUKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZmlsZW5hbWVfbWFpbl93aXRoX2FyZ3Yoc2VsZik6CisgICAgICAgICMgSWYgX19maWxlX18gaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIGNhbGxlciBpcyBfX21haW5fXyBhbmQgc3lzLmFyZ3YKKyAgICAgICAgIyBleGlzdHMsIHRoZW4gdXNlIHN5cy5hcmd2WzBdIGFzIHRoZSBmaWxlLgorICAgICAgICBpZiBub3QgaGFzYXR0cihzeXMsICdhcmd2Jyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZmlsZW5hbWUgPSB3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fCisgICAgICAgIG1vZHVsZV9uYW1lID0gd2FybmluZ190ZXN0cy5fX25hbWVfXworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgd2FybmluZ190ZXN0cy5fX2ZpbGVfXworICAgICAgICAgICAgd2FybmluZ190ZXN0cy5fX25hbWVfXyA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3Nfc3RhdGUoc2VsZi5tb2R1bGUpOgorICAgICAgICAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuaW5uZXIoJ3NwYW05Jywgc3RhY2tsZXZlbD0xKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLmZpbGVuYW1lLCBzeXMuYXJndlswXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuX19maWxlX18gPSBmaWxlbmFtZQorICAgICAgICAgICAgd2FybmluZ190ZXN0cy5fX25hbWVfXyA9IG1vZHVsZV9uYW1lCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2ZpbGVuYW1lX21haW5fd2l0aG91dF9hcmd2KHNlbGYpOgorICAgICAgICAjIElmIF9fZmlsZV9fIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjYWxsZXIgaXMgX19tYWluX18sIGFuZCBzeXMuYXJndgorICAgICAgICAjIGlzIG5vdCBzZXQsIHRoZW4gJ19fbWFpbl9fJyBpcyB0aGUgZmlsZSBuYW1lLgorICAgICAgICBmaWxlbmFtZSA9IHdhcm5pbmdfdGVzdHMuX19maWxlX18KKyAgICAgICAgbW9kdWxlX25hbWUgPSB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fCisgICAgICAgIGFyZ3YgPSBzeXMuYXJndgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgd2FybmluZ190ZXN0cy5fX2ZpbGVfXworICAgICAgICAgICAgd2FybmluZ190ZXN0cy5fX25hbWVfXyA9ICdfX21haW5fXycKKyAgICAgICAgICAgIGRlbCBzeXMuYXJndgorICAgICAgICAgICAgd2l0aCB3YXJuaW5nc19zdGF0ZShzZWxmLm1vZHVsZSk6CisgICAgICAgICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcignc3BhbTEwJywgc3RhY2tsZXZlbD0xKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLmZpbGVuYW1lLCAnX19tYWluX18nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgd2FybmluZ190ZXN0cy5fX2ZpbGVfXyA9IGZpbGVuYW1lCisgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fID0gbW9kdWxlX25hbWUKKyAgICAgICAgICAgIHN5cy5hcmd2ID0gYXJndgorCisgICAgZGVmIHRlc3RfbWlzc2luZ19maWxlbmFtZV9tYWluX3dpdGhfYXJndl9lbXB0eV9zdHJpbmcoc2VsZik6CisgICAgICAgICMgSWYgX19maWxlX18gaXMgbm90IHNwZWNpZmllZCwgdGhlIGNhbGxlciBpcyBfX21haW5fXywgYW5kIHN5cy5hcmd2WzBdCisgICAgICAgICMgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiAnX19tYWluX18gaXMgdGhlIGZpbGUgbmFtZS4KKyAgICAgICAgIyBUZXN0cyBpc3N1ZSAyNzQzLgorICAgICAgICBmaWxlX25hbWUgPSB3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fCisgICAgICAgIG1vZHVsZV9uYW1lID0gd2FybmluZ190ZXN0cy5fX25hbWVfXworICAgICAgICBhcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHdhcm5pbmdfdGVzdHMuX19maWxlX18KKyAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuX19uYW1lX18gPSAnX19tYWluX18nCisgICAgICAgICAgICBzeXMuYXJndiA9IFsnJ10KKyAgICAgICAgICAgIHdpdGggd2FybmluZ3Nfc3RhdGUoc2VsZi5tb2R1bGUpOgorICAgICAgICAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuaW5uZXIoJ3NwYW0xMScsIHN0YWNrbGV2ZWw9MSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5maWxlbmFtZSwgJ19fbWFpbl9fJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuX19maWxlX18gPSBmaWxlX25hbWUKKyAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuX19uYW1lX18gPSBtb2R1bGVfbmFtZQorICAgICAgICAgICAgc3lzLmFyZ3YgPSBhcmd2CisKKyAgICBkZWYgdGVzdF93YXJuX2V4cGxpY2l0X3R5cGVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIHdhcm5fZXhwbGljaXQoKSBzaG91bGQgZXJyb3Igb3V0IGdyYWNlZnVsbHkgaWYgaXQgaXMgZ2l2ZW4gb2JqZWN0cworICAgICAgICAjIG9mIHRoZSB3cm9uZyB0eXBlcy4KKyAgICAgICAgIyBsaW5lbm8gaXMgZXhwZWN0ZWQgdG8gYmUgYW4gaW50ZWdlci4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIFVzZXJXYXJuaW5nLCBOb25lLCBOb25lKQorICAgICAgICAjIEVpdGhlciAnbWVzc2FnZScgbmVlZHMgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgV2FybmluZyBvciAnY2F0ZWdvcnknCisgICAgICAgICMgbmVlZHMgdG8gYmUgYSBzdWJjbGFzcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUsIDEpCisgICAgICAgICMgJ3JlZ2lzdHJ5JyBtdXN0IGJlIGEgZGljdCBvciBOb25lLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBXYXJuaW5nLCBOb25lLCAxLCByZWdpc3RyeT00MikKKworICAgIGRlZiB0ZXN0X2JhZF9zdHIoc2VsZik6CisgICAgICAgICMgaXNzdWUgNjQxNQorICAgICAgICAjIFdhcm5pbmdzIGluc3RhbmNlIHdpdGggYSBiYWQgZm9ybWF0IHN0cmluZyBmb3IgX19zdHJfXyBzaG91bGQgbm90CisgICAgICAgICMgdHJpZ2dlciBhIGJ1cyBlcnJvci4KKyAgICAgICAgY2xhc3MgQmFkU3RyV2FybmluZyhXYXJuaW5nKToKKyAgICAgICAgICAgICIiIldhcm5pbmcgd2l0aCBhIGJhZCBmb3JtYXQgc3RyaW5nIGZvciBfX3N0cl9fLiIiIgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiQSBiYWQgZm9ybWF0dGVkIHN0cmluZyAlKGVycikiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIHsiZXJyIiA6ICJ0aGVyZSBpcyBubyAlKGVycilzIn0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oQmFkU3RyV2FybmluZygpKQorCisKK2NsYXNzIENXYXJuVGVzdHMoQmFzZVRlc3QsIFdhcm5UZXN0cyk6CisgICAgbW9kdWxlID0gY193YXJuaW5ncworCisgICAgIyBBcyBhbiBlYXJseSBhZG9wdGVyLCB3ZSBzYW5pdHkgY2hlY2sgdGhlCisgICAgIyB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSB1dGlsaXR5IGZ1bmN0aW9uCisgICAgZGVmIHRlc3RfYWNjZWxlcmF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3JpZ2luYWxfd2FybmluZ3MgaXMgc2VsZi5tb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzZWxmLm1vZHVsZS53YXJuLCAnZnVuY19jb2RlJykpCisKK2NsYXNzIFB5V2FyblRlc3RzKEJhc2VUZXN0LCBXYXJuVGVzdHMpOgorICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCisKKyAgICAjIEFzIGFuIGVhcmx5IGFkb3B0ZXIsIHdlIHNhbml0eSBjaGVjayB0aGUKKyAgICAjIHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlIHV0aWxpdHkgZnVuY3Rpb24KKyAgICBkZWYgdGVzdF9wdXJlX3B5dGhvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcmlnaW5hbF93YXJuaW5ncyBpcyBzZWxmLm1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5tb2R1bGUud2FybiwgJ2Z1bmNfY29kZScpKQorCisKK2NsYXNzIFdDbWRMaW5lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW1wcm9wZXJfaW5wdXQoc2VsZik6CisgICAgICAgICMgVXNlcyB0aGUgcHJpdmF0ZSBfc2V0b3B0aW9uKCkgZnVuY3Rpb24gdG8gdGVzdCB0aGUgcGFyc2luZworICAgICAgICAjIG9mIGNvbW1hbmQtbGluZSB3YXJuaW5nIGFyZ3VtZW50cworICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT1zZWxmLm1vZHVsZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLm1vZHVsZS5fT3B0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5fc2V0b3B0aW9uLCAnMToyOjM6NDo1OjYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5tb2R1bGUuX09wdGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuX3NldG9wdGlvbiwgJ2JvZ3VzOjpXYXJuaW5nJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYubW9kdWxlLl9PcHRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLl9zZXRvcHRpb24sICdpZ25vcmU6Mjo6NDotNScpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5fc2V0b3B0aW9uKCdlcnJvcjo6V2FybmluZzo6MCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVc2VyV2FybmluZywgc2VsZi5tb2R1bGUud2FybiwgJ2NvbnZlcnQgdG8gZXJyb3InKQorCisgICAgZGVmIHRlc3RfaW1wcm9wZXJfb3B0aW9uKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBjaGVjayB0aGF0IHRoZSBtZXNzYWdlIGlzIHByaW50ZWQgb3V0IHdoZW4KKyAgICAgICAgIyB0aGUgaW50ZXJwcmV0ZXIgaXMgZXhlY3V0ZWQuIFRoaXMgYWxzbyBjaGVja3MgdGhhdCBvcHRpb25zIGFyZQorICAgICAgICAjIGFjdHVhbGx5IHBhcnNlZCBhdCBhbGwuCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1XeHh4IiwgIi1jIiwgInBhc3MiKQorICAgICAgICBzZWxmLmFzc2VydEluKGIiSW52YWxpZCAtVyBvcHRpb24gaWdub3JlZDogaW52YWxpZCBhY3Rpb246ICd4eHgnIiwgZXJyKQorCisgICAgZGVmIHRlc3Rfd2FybmluZ3NfYm9vdHN0cmFwKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHdhcm5pbmdzIG1vZHVsZSBkb2VzIGdldCBsb2FkZWQgd2hlbiAtVzxzb21lIG9wdGlvbj4KKyAgICAgICAgIyBpcyB1c2VkIChzZWUgaXNzdWUgIzEwMzcyIGZvciBhbiBleGFtcGxlIG9mIHNpbGVudCBib290c3RyYXAgZmFpbHVyZSkuCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1XaSIsICItYyIsCisgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLm1vZHVsZXNbJ3dhcm5pbmdzJ10ud2FybignZm9vJywgUnVudGltZVdhcm5pbmcpIikKKyAgICAgICAgIyAnLVdpJyB3YXMgb2JzZXJ2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuc3RyaXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ1J1bnRpbWVXYXJuaW5nJywgZXJyKQorCitjbGFzcyBDV0NtZExpbmVUZXN0cyhCYXNlVGVzdCwgV0NtZExpbmVUZXN0cyk6CisgICAgbW9kdWxlID0gY193YXJuaW5ncworCitjbGFzcyBQeVdDbWRMaW5lVGVzdHMoQmFzZVRlc3QsIFdDbWRMaW5lVGVzdHMpOgorICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCisKKworY2xhc3MgX1dhcm5pbmdzVGVzdHMoQmFzZVRlc3QpOgorCisgICAgIiIiVGVzdHMgc3BlY2lmaWMgdG8gdGhlIF93YXJuaW5ncyBtb2R1bGUuIiIiCisKKyAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCisKKyAgICBkZWYgdGVzdF9maWx0ZXIoc2VsZik6CisgICAgICAgICMgRXZlcnl0aGluZyBzaG91bGQgZnVuY3Rpb24gZXZlbiBpZiAnZmlsdGVycycgaXMgbm90IGluIHdhcm5pbmdzLgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsICIiLCBXYXJuaW5nLCAiIiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udmVydCB0byBlcnJvcicpCisgICAgICAgICAgICBkZWwgc2VsZi5tb2R1bGUuZmlsdGVycworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVXNlcldhcm5pbmcsIHNlbGYubW9kdWxlLndhcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb252ZXJ0IHRvIGVycm9yJykKKworICAgIGRlZiB0ZXN0X29uY2VyZWdpc3RyeShzZWxmKToKKyAgICAgICAgIyBSZXBsYWNpbmcgb3IgcmVtb3ZpbmcgdGhlIG9uY2VyZWdpc3RyeSBzaG91bGQgYmUgb2theS4KKyAgICAgICAgZ2xvYmFsIF9fd2FybmluZ3JlZ2lzdHJ5X18KKyAgICAgICAgbWVzc2FnZSA9IFVzZXJXYXJuaW5nKCdvbmNlcmVnaXN0cnkgdGVzdCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9yaWdpbmFsX3JlZ2lzdHJ5ID0gc2VsZi5tb2R1bGUub25jZXJlZ2lzdHJ5CisgICAgICAgICAgICBfX3dhcm5pbmdyZWdpc3RyeV9fID0ge30KKyAgICAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygib25jZSIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJmaWxlIiwgNDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQorICAgICAgICAgICAgICAgIGRlbCB3WzpdCisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgImZpbGUiLCA0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgICAgICAgICAjIFRlc3QgdGhlIHJlc2V0dGluZyBvZiBvbmNlcmVnaXN0cnkuCisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUub25jZXJlZ2lzdHJ5ID0ge30KKyAgICAgICAgICAgICAgICBfX3dhcm5pbmdyZWdpc3RyeV9fID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKCdvbmNlcmVnaXN0cnkgdGVzdCcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLmFyZ3MsIG1lc3NhZ2UuYXJncykKKyAgICAgICAgICAgICAgICAjIFJlbW92YWwgb2Ygb25jZXJlZ2lzdHJ5IGlzIG9rYXkuCisgICAgICAgICAgICAgICAgZGVsIHdbOl0KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5tb2R1bGUub25jZXJlZ2lzdHJ5CisgICAgICAgICAgICAgICAgX193YXJuaW5ncmVnaXN0cnlfXyA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgImZpbGUiLCA0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLm9uY2VyZWdpc3RyeSA9IG9yaWdpbmFsX3JlZ2lzdHJ5CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2FjdGlvbihzZWxmKToKKyAgICAgICAgIyBSZXBsYWNpbmcgb3IgcmVtb3ZpbmcgZGVmYXVsdGFjdGlvbiBzaG91bGQgYmUgb2theS4KKyAgICAgICAgbWVzc2FnZSA9IFVzZXJXYXJuaW5nKCJkZWZhdWx0YWN0aW9uIHRlc3QiKQorICAgICAgICBvcmlnaW5hbCA9IHNlbGYubW9kdWxlLmRlZmF1bHRhY3Rpb24KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAiPHRlc3Q+IiwgNDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5PXJlZ2lzdHJ5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWdpc3RyeSksIDEpCisgICAgICAgICAgICAgICAgZGVsIHdbOl0KKyAgICAgICAgICAgICAgICAjIFRlc3QgcmVtb3ZhbC4KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5tb2R1bGUuZGVmYXVsdGFjdGlvbgorICAgICAgICAgICAgICAgIF9fd2FybmluZ3JlZ2lzdHJ5X18gPSB7fQorICAgICAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAiPHRlc3Q+IiwgNDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5PXJlZ2lzdHJ5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWdpc3RyeSksIDEpCisgICAgICAgICAgICAgICAgZGVsIHdbOl0KKyAgICAgICAgICAgICAgICAjIFRlc3Qgc2V0dGluZy4KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5kZWZhdWx0YWN0aW9uID0gImlnbm9yZSIKKyAgICAgICAgICAgICAgICBfX3dhcm5pbmdyZWdpc3RyeV9fID0ge30KKyAgICAgICAgICAgICAgICByZWdpc3RyeSA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgIjx0ZXN0PiIsIDQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeT1yZWdpc3RyeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmRlZmF1bHRhY3Rpb24gPSBvcmlnaW5hbAorCisgICAgZGVmIHRlc3Rfc2hvd3dhcm5pbmdfbWlzc2luZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc2hvd3dhcm5pbmcoKSBtaXNzaW5nIGlzIG9rYXkuCisgICAgICAgIHRleHQgPSAnZGVsIHNob3d3YXJuaW5nIHRlc3QnCisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXNlbGYubW9kdWxlKToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIGRlbCBzZWxmLm1vZHVsZS5zaG93d2FybmluZworICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCdzdGRlcnInKSBhcyBzdHJlYW06CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybih0ZXh0KQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmVhbS5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGV4dCwgcmVzdWx0KQorCisgICAgZGVmIHRlc3Rfc2hvd3dhcm5pbmdfbm90X2NhbGxhYmxlKHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT1zZWxmLm1vZHVsZSk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBvbGRfc2hvd3dhcm5pbmcgPSBzZWxmLm1vZHVsZS5zaG93d2FybmluZworICAgICAgICAgICAgc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcgPSAyMworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tb2R1bGUud2FybiwgIldhcm5pbmchIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcgPSBvbGRfc2hvd3dhcm5pbmcKKworICAgIGRlZiB0ZXN0X3Nob3dfd2FybmluZ19vdXRwdXQoc2VsZik6CisgICAgICAgICMgV2l0aCBzaG93YXJuaW5nKCkgbWlzc2luZywgbWFrZSBzdXJlIHRoYXQgb3V0cHV0IGlzIG9rYXkuCisgICAgICAgIHRleHQgPSAndGVzdCBzaG93X3dhcm5pbmcnCisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXNlbGYubW9kdWxlKToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIGRlbCBzZWxmLm1vZHVsZS5zaG93d2FybmluZworICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCdzdGRlcnInKSBhcyBzdHJlYW06CisgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcih0ZXh0KQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmVhbS5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvdW50KCdcbicpLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG9vIG1hbnkgbmV3bGluZXMgaW4gJXIiICUgcmVzdWx0KQorICAgICAgICBmaXJzdF9saW5lLCBzZWNvbmRfbGluZSA9IHJlc3VsdC5zcGxpdCgnXG4nLCAxKQorICAgICAgICBleHBlY3RlZF9maWxlID0gb3MucGF0aC5zcGxpdGV4dCh3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fKVswXSArICcucHknCisgICAgICAgIGZpcnN0X2xpbmVfcGFydHMgPSBmaXJzdF9saW5lLnJzcGxpdCgnOicsIDMpCisgICAgICAgIHBhdGgsIGxpbmUsIHdhcm5pbmdfY2xhc3MsIG1lc3NhZ2UgPSBmaXJzdF9saW5lX3BhcnRzCisgICAgICAgIGxpbmUgPSBpbnQobGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9maWxlLCBwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhcm5pbmdfY2xhc3MsICcgJyArIFVzZXJXYXJuaW5nLl9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsICcgJyArIHRleHQpCisgICAgICAgIGV4cGVjdGVkX2xpbmUgPSAnICAnICsgbGluZWNhY2hlLmdldGxpbmUocGF0aCwgbGluZSkuc3RyaXAoKSArICdcbicKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkX2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWNvbmRfbGluZSwgZXhwZWN0ZWRfbGluZSkKKworICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX25vbmUoc2VsZik6CisgICAgICAgICMgaXNzdWUgIzEyNDY3OiByYWNlIGNvbmRpdGlvbiBpZiBhIHdhcm5pbmcgaXMgZW1pdHRlZCBhdCBzaHV0ZG93bgorICAgICAgICBnbG9iYWxzX2RpY3QgPSBnbG9iYWxzKCkKKyAgICAgICAgb2xkZmlsZSA9IGdsb2JhbHNfZGljdFsnX19maWxlX18nXQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICAgICAgZ2xvYmFsc19kaWN0WydfX2ZpbGVfXyddID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oJ3Rlc3QnLCBVc2VyV2FybmluZykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGdsb2JhbHNfZGljdFsnX19maWxlX18nXSA9IG9sZGZpbGUKKworCitjbGFzcyBXYXJuaW5nc0Rpc3BsYXlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IHRoZSBkaXNwbGF5aW5nIG9mIHdhcm5pbmdzIGFuZCB0aGUgYWJpbGl0eSB0byBvdmVybG9hZCBmdW5jdGlvbnMKKyAgICByZWxhdGVkIHRvIGRpc3BsYXlpbmcgd2FybmluZ3MuIiIiCisKKyAgICBkZWYgdGVzdF9mb3JtYXR3YXJuaW5nKHNlbGYpOgorICAgICAgICBtZXNzYWdlID0gIm1zZyIKKyAgICAgICAgY2F0ZWdvcnkgPSBXYXJuaW5nCisgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQod2FybmluZ190ZXN0cy5fX2ZpbGVfXylbMF0gKyAnLnB5JworICAgICAgICBsaW5lX251bSA9IDMKKyAgICAgICAgZmlsZV9saW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZV9uYW1lLCBsaW5lX251bSkuc3RyaXAoKQorICAgICAgICBmb3JtYXQgPSAiJXM6JXM6ICVzOiAlc1xuICAlc1xuIgorICAgICAgICBleHBlY3QgPSBmb3JtYXQgJSAoZmlsZV9uYW1lLCBsaW5lX251bSwgY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgc2VsZi5tb2R1bGUuZm9ybWF0d2FybmluZyhtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnksIGZpbGVfbmFtZSwgbGluZV9udW0pKQorICAgICAgICAjIFRlc3QgdGhlICdsaW5lJyBhcmd1bWVudC4KKyAgICAgICAgZmlsZV9saW5lICs9ICIgZm9yIHRoZSB3aW4hIgorICAgICAgICBleHBlY3QgPSBmb3JtYXQgJSAoZmlsZV9uYW1lLCBsaW5lX251bSwgY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgc2VsZi5tb2R1bGUuZm9ybWF0d2FybmluZyhtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnksIGZpbGVfbmFtZSwgbGluZV9udW0sIGZpbGVfbGluZSkpCisKKyAgICBkZWYgdGVzdF9zaG93d2FybmluZyhzZWxmKToKKyAgICAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5zcGxpdGV4dCh3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fKVswXSArICcucHknCisgICAgICAgIGxpbmVfbnVtID0gMworICAgICAgICBleHBlY3RlZF9maWxlX2xpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlX25hbWUsIGxpbmVfbnVtKS5zdHJpcCgpCisgICAgICAgIG1lc3NhZ2UgPSAnbXNnJworICAgICAgICBjYXRlZ29yeSA9IFdhcm5pbmcKKyAgICAgICAgZmlsZV9vYmplY3QgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGV4cGVjdCA9IHNlbGYubW9kdWxlLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW0pCisgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlX25hbWUsIGxpbmVfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX29iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX29iamVjdC5nZXR2YWx1ZSgpLCBleHBlY3QpCisgICAgICAgICMgVGVzdCAnbGluZScgYXJndW1lbnQuCisgICAgICAgIGV4cGVjdGVkX2ZpbGVfbGluZSArPSAiZm9yIHRoZSB3aW4hIgorICAgICAgICBleHBlY3QgPSBzZWxmLm1vZHVsZS5mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtLCBleHBlY3RlZF9maWxlX2xpbmUpCisgICAgICAgIGZpbGVfb2JqZWN0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzZWxmLm1vZHVsZS5zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZV9uYW1lLCBsaW5lX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9vYmplY3QsIGV4cGVjdGVkX2ZpbGVfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGZpbGVfb2JqZWN0LmdldHZhbHVlKCkpCisKK2NsYXNzIENXYXJuaW5nc0Rpc3BsYXlUZXN0cyhCYXNlVGVzdCwgV2FybmluZ3NEaXNwbGF5VGVzdHMpOgorICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKKworY2xhc3MgUHlXYXJuaW5nc0Rpc3BsYXlUZXN0cyhCYXNlVGVzdCwgV2FybmluZ3NEaXNwbGF5VGVzdHMpOgorICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCisKKworY2xhc3MgQ2F0Y2hXYXJuaW5nVGVzdHMoQmFzZVRlc3QpOgorCisgICAgIiIiVGVzdCBjYXRjaF93YXJuaW5ncygpLiIiIgorCisgICAgZGVmIHRlc3RfY2F0Y2hfd2FybmluZ3NfcmVzdG9yZShzZWxmKToKKyAgICAgICAgd21vZCA9IHNlbGYubW9kdWxlCisgICAgICAgIG9yaWdfZmlsdGVycyA9IHdtb2QuZmlsdGVycworICAgICAgICBvcmlnX3Nob3d3YXJuaW5nID0gd21vZC5zaG93d2FybmluZworICAgICAgICAjIEVuc3VyZSBib3RoIHNob3d3YXJuaW5nIGFuZCBmaWx0ZXJzIGFyZSByZXN0b3JlZCB3aGVuIHJlY29yZGluZworICAgICAgICB3aXRoIHdtb2QuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXdtb2QsIHJlY29yZD1UcnVlKToKKyAgICAgICAgICAgIHdtb2QuZmlsdGVycyA9IHdtb2Quc2hvd3dhcm5pbmcgPSBvYmplY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5maWx0ZXJzIGlzIG9yaWdfZmlsdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2Quc2hvd3dhcm5pbmcgaXMgb3JpZ19zaG93d2FybmluZykKKyAgICAgICAgIyBTYW1lIHRlc3QsIGJ1dCB3aXRoIHJlY29yZGluZyBkaXNhYmxlZAorICAgICAgICB3aXRoIHdtb2QuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXdtb2QsIHJlY29yZD1GYWxzZSk6CisgICAgICAgICAgICB3bW9kLmZpbHRlcnMgPSB3bW9kLnNob3d3YXJuaW5nID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2QuZmlsdGVycyBpcyBvcmlnX2ZpbHRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCisKKyAgICBkZWYgdGVzdF9jYXRjaF93YXJuaW5nc19yZWNvcmRpbmcoc2VsZik6CisgICAgICAgIHdtb2QgPSBzZWxmLm1vZHVsZQorICAgICAgICAjIEVuc3VyZSB3YXJuaW5ncyBhcmUgcmVjb3JkZWQgd2hlbiByZXF1ZXN0ZWQKKyAgICAgICAgd2l0aCB3bW9kLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT13bW9kLCByZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodywgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh3KSBpcyBsaXN0KQorICAgICAgICAgICAgd21vZC5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCisgICAgICAgICAgICB3bW9kLndhcm4oImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwgImZvbyIpCisgICAgICAgICAgICB3bW9kLndhcm4oImJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwgImJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3WzBdLm1lc3NhZ2UpLCAiZm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbMV0ubWVzc2FnZSksICJiYXIiKQorICAgICAgICAgICAgZGVsIHdbOl0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodywgW10pCisgICAgICAgICMgRW5zdXJlIHdhcm5pbmdzIGFyZSBub3QgcmVjb3JkZWQgd2hlbiBub3QgcmVxdWVzdGVkCisgICAgICAgIG9yaWdfc2hvd3dhcm5pbmcgPSB3bW9kLnNob3d3YXJuaW5nCisgICAgICAgIHdpdGggd21vZC5jYXRjaF93YXJuaW5ncyhtb2R1bGU9d21vZCwgcmVjb3JkPUZhbHNlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHcgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCisKKyAgICBkZWYgdGVzdF9jYXRjaF93YXJuaW5nc19yZWVudHJ5X2d1YXJkKHNlbGYpOgorICAgICAgICB3bW9kID0gc2VsZi5tb2R1bGUKKyAgICAgICAgIyBFbnN1cmUgY2F0Y2hfd2FybmluZ3MgaXMgcHJvdGVjdGVkIGFnYWluc3QgaW5jb3JyZWN0IHVzYWdlCisgICAgICAgIHggPSB3bW9kLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT13bW9kLCByZWNvcmQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB4Ll9fZXhpdF9fKQorICAgICAgICB3aXRoIHg6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHguX19lbnRlcl9fKQorICAgICAgICAjIFNhbWUgdGVzdCwgYnV0IHdpdGggcmVjb3JkaW5nIGRpc2FibGVkCisgICAgICAgIHggPSB3bW9kLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT13bW9kLCByZWNvcmQ9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgeC5fX2V4aXRfXykKKyAgICAgICAgd2l0aCB4OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB4Ll9fZW50ZXJfXykKKworICAgIGRlZiB0ZXN0X2NhdGNoX3dhcm5pbmdzX2RlZmF1bHRzKHNlbGYpOgorICAgICAgICB3bW9kID0gc2VsZi5tb2R1bGUKKyAgICAgICAgb3JpZ19maWx0ZXJzID0gd21vZC5maWx0ZXJzCisgICAgICAgIG9yaWdfc2hvd3dhcm5pbmcgPSB3bW9kLnNob3d3YXJuaW5nCisgICAgICAgICMgRW5zdXJlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIG5vdCB0byByZWNvcmQgd2FybmluZ3MKKyAgICAgICAgd2l0aCB3bW9kLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT13bW9kKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHcgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5maWx0ZXJzIGlzIG5vdCBvcmlnX2ZpbHRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLmZpbHRlcnMgaXMgb3JpZ19maWx0ZXJzKQorICAgICAgICBpZiB3bW9kIGlzIHN5cy5tb2R1bGVzWyd3YXJuaW5ncyddOgorICAgICAgICAgICAgIyBFbnN1cmUgdGhlIGRlZmF1bHQgbW9kdWxlIGlzIHRoaXMgb25lCisgICAgICAgICAgICB3aXRoIHdtb2QuY2F0Y2hfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3IGlzIE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2Quc2hvd3dhcm5pbmcgaXMgb3JpZ19zaG93d2FybmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5maWx0ZXJzIGlzIG5vdCBvcmlnX2ZpbHRlcnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5maWx0ZXJzIGlzIG9yaWdfZmlsdGVycykKKworICAgIGRlZiB0ZXN0X2NoZWNrX3dhcm5pbmdzKHNlbGYpOgorICAgICAgICAjIEV4cGxpY2l0IHRlc3RzIGZvciB0aGUgdGVzdF9zdXBwb3J0IGNvbnZlbmllbmNlIHdyYXBwZXIKKyAgICAgICAgd21vZCA9IHNlbGYubW9kdWxlCisgICAgICAgIGlmIHdtb2QgaXMgbm90IHN5cy5tb2R1bGVzWyd3YXJuaW5ncyddOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKHF1aWV0PUZhbHNlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Lndhcm5pbmdzLCBbXSkKKyAgICAgICAgICAgIHdtb2Quc2ltcGxlZmlsdGVyKCJhbHdheXMiKQorICAgICAgICAgICAgd21vZC53YXJuKCJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIody5tZXNzYWdlKSwgImZvbyIpCisgICAgICAgICAgICB3bW9kLndhcm4oImJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Lm1lc3NhZ2UpLCAiYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHcud2FybmluZ3NbMF0ubWVzc2FnZSksICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIody53YXJuaW5nc1sxXS5tZXNzYWdlKSwgImJhciIpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCisKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgICMgZGVmYXVsdHMgdG8gcXVpZXQ9VHJ1ZSB3aXRob3V0IGFyZ3VtZW50CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnZm9vJywgVXNlcldhcm5pbmcpKToKKyAgICAgICAgICAgIHdtb2Qud2FybigiZm9vIikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgICAgICAjIGRlZmF1bHRzIHRvIHF1aWV0PUZhbHNlIHdpdGggYXJndW1lbnQKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCdmb28nLCBSdW50aW1lV2FybmluZykpOgorICAgICAgICAgICAgICAgIHdtb2Qud2FybigiZm9vIikKKworCitjbGFzcyBDQ2F0Y2hXYXJuaW5nVGVzdHMoQ2F0Y2hXYXJuaW5nVGVzdHMpOgorICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKKworY2xhc3MgUHlDYXRjaFdhcm5pbmdUZXN0cyhDYXRjaFdhcm5pbmdUZXN0cyk6CisgICAgbW9kdWxlID0gcHlfd2FybmluZ3MKKworCitjbGFzcyBFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMoQmFzZVRlc3QpOgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3dhcm5pbmcoc2VsZik6CisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiUFlUSE9OV0FSTklOR1MiXSA9ICJpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZyIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN0cihzeXMud2Fybm9wdGlvbnMpKSJdLAorICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5jb21tdW5pY2F0ZSgpWzBdLCAiWydpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZyddIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgMCkKKworICAgIGRlZiB0ZXN0X2NvbW1hX3NlcGFyYXRlZF93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJQWVRIT05XQVJOSU5HUyJdID0gKCJpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZywiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWdub3JlOjpVbmljb2RlV2FybmluZyIpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzdHIoc3lzLndhcm5vcHRpb25zKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29tbXVuaWNhdGUoKVswXSwKKyAgICAgICAgICAgICAgICAiWydpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZycsICdpZ25vcmU6OlVuaWNvZGVXYXJuaW5nJ10iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAwKQorCisgICAgZGVmIHRlc3RfZW52dmFyX2FuZF9jb21tYW5kX2xpbmUoc2VsZik6CisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiUFlUSE9OV0FSTklOR1MiXSA9ICJpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZyIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLVciICJpZ25vcmU6OlVuaWNvZGVXYXJuaW5nIiwKKyAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzdHIoc3lzLndhcm5vcHRpb25zKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29tbXVuaWNhdGUoKVswXSwKKyAgICAgICAgICAgICAgICAiWydpZ25vcmU6OlVuaWNvZGVXYXJuaW5nJywgJ2lnbm9yZTo6RGVwcmVjYXRpb25XYXJuaW5nJ10iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAwKQorCitjbGFzcyBDRW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzKEVudmlyb25tZW50VmFyaWFibGVUZXN0cyk6CisgICAgbW9kdWxlID0gY193YXJuaW5ncworCitjbGFzcyBQeUVudmlyb25tZW50VmFyaWFibGVUZXN0cyhFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMpOgorICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHB5X3dhcm5pbmdzLm9uY2VyZWdpc3RyeS5jbGVhcigpCisgICAgY193YXJuaW5ncy5vbmNlcmVnaXN0cnkuY2xlYXIoKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ0ZpbHRlclRlc3RzLCBQeUZpbHRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV2FyblRlc3RzLCBQeVdhcm5UZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dDbWRMaW5lVGVzdHMsIFB5V0NtZExpbmVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1dhcm5pbmdzVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXYXJuaW5nc0Rpc3BsYXlUZXN0cywgUHlXYXJuaW5nc0Rpc3BsYXlUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhdGNoV2FybmluZ1Rlc3RzLCBQeUNhdGNoV2FybmluZ1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUVudmlyb25tZW50VmFyaWFibGVUZXN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3dhdmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmNWZhZQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3dhdmUucHkKQEAgLTAsMCArMSw0NSBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHdhdmUKK2ltcG9ydCB1bml0dGVzdAorCituY2hhbm5lbHMgPSAyCitzYW1wd2lkdGggPSAyCitmcmFtZXJhdGUgPSA4MDAwCituZnJhbWVzID0gMTAwCisKK2NsYXNzIFRlc3RXYXZlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mID0gTm9uZQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2l0KHNlbGYpOgorICAgICAgICBzZWxmLmYgPSB3YXZlLm9wZW4oVEVTVEZOLCAnd2InKQorICAgICAgICBzZWxmLmYuc2V0bmNoYW5uZWxzKG5jaGFubmVscykKKyAgICAgICAgc2VsZi5mLnNldHNhbXB3aWR0aChzYW1wd2lkdGgpCisgICAgICAgIHNlbGYuZi5zZXRmcmFtZXJhdGUoZnJhbWVyYXRlKQorICAgICAgICBzZWxmLmYuc2V0bmZyYW1lcyhuZnJhbWVzKQorICAgICAgICBvdXRwdXQgPSAnXDAnICogbmZyYW1lcyAqIG5jaGFubmVscyAqIHNhbXB3aWR0aAorICAgICAgICBzZWxmLmYud3JpdGVmcmFtZXMob3V0cHV0KQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuZiA9IHdhdmUub3BlbihURVNURk4sICdyYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmNoYW5uZWxzLCBzZWxmLmYuZ2V0bmNoYW5uZWxzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcHdpZHRoLCBzZWxmLmYuZ2V0c2FtcHdpZHRoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJhbWVyYXRlLCBzZWxmLmYuZ2V0ZnJhbWVyYXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmZyYW1lcywgc2VsZi5mLmdldG5mcmFtZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYucmVhZGZyYW1lcyhuZnJhbWVzKSwgb3V0cHV0KQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RXYXZlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDg2Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQpAQCAtMCwwICsxLDEzOTUgQEAKK2ltcG9ydCBnYworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgVXNlckxpc3QKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgb3BlcmF0b3IKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBVc2VkIGluIFJlZmVyZW5jZXNUZXN0Q2FzZS50ZXN0X3JlZl9jcmVhdGVkX2R1cmluZ19kZWwoKSAuCityZWZfZnJvbV9kZWwgPSBOb25lCisKK2NsYXNzIEM6CisgICAgZGVmIG1ldGhvZChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIENhbGxhYmxlOgorICAgIGJhciA9IE5vbmUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB4KToKKyAgICAgICAgc2VsZi5iYXIgPSB4CisKKworZGVmIGNyZWF0ZV9mdW5jdGlvbigpOgorICAgIGRlZiBmKCk6IHBhc3MKKyAgICByZXR1cm4gZgorCitkZWYgY3JlYXRlX2JvdW5kX21ldGhvZCgpOgorICAgIHJldHVybiBDKCkubWV0aG9kCisKK2RlZiBjcmVhdGVfdW5ib3VuZF9tZXRob2QoKToKKyAgICByZXR1cm4gQy5tZXRob2QKKworCitjbGFzcyBPYmplY3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYuYXJnID0gYXJnCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxPYmplY3QgJXI+IiAlIHNlbGYuYXJnCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIE9iamVjdCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hcmcgPT0gb3RoZXIuYXJnCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBPYmplY3QpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXJnICE9IG90aGVyLmFyZworICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuYXJnKQorCitjbGFzcyBSZWZDeWNsZToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY3ljbGUgPSBzZWxmCisKKworY2xhc3MgVGVzdEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNiY2FsbGVkID0gMAorCisgICAgZGVmIGNhbGxiYWNrKHNlbGYsIHJlZik6CisgICAgICAgIHNlbGYuY2JjYWxsZWQgKz0gMQorCisKK2NsYXNzIFJlZmVyZW5jZXNUZXN0Q2FzZShUZXN0QmFzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpY19yZWYoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfYmFzaWNfcmVmKEMpCisgICAgICAgIHNlbGYuY2hlY2tfYmFzaWNfcmVmKGNyZWF0ZV9mdW5jdGlvbikKKyAgICAgICAgc2VsZi5jaGVja19iYXNpY19yZWYoY3JlYXRlX2JvdW5kX21ldGhvZCkKKyAgICAgICAgc2VsZi5jaGVja19iYXNpY19yZWYoY3JlYXRlX3VuYm91bmRfbWV0aG9kKQorCisgICAgICAgICMgSnVzdCBtYWtlIHN1cmUgdGhlIHRwX3JlcHIgaGFuZGxlciBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgIyBMaXZlIHJlZmVyZW5jZToKKyAgICAgICAgbyA9IEMoKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG8pCisgICAgICAgIHJlcHIod3IpCisgICAgICAgICMgRGVhZCByZWZlcmVuY2U6CisgICAgICAgIGRlbCBvCisgICAgICAgIHJlcHIod3IpCisKKyAgICBkZWYgdGVzdF9iYXNpY19jYWxsYmFjayhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19iYXNpY19jYWxsYmFjayhDKQorICAgICAgICBzZWxmLmNoZWNrX2Jhc2ljX2NhbGxiYWNrKGNyZWF0ZV9mdW5jdGlvbikKKyAgICAgICAgc2VsZi5jaGVja19iYXNpY19jYWxsYmFjayhjcmVhdGVfYm91bmRfbWV0aG9kKQorICAgICAgICBzZWxmLmNoZWNrX2Jhc2ljX2NhbGxiYWNrKGNyZWF0ZV91bmJvdW5kX21ldGhvZCkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgbyA9IEMoKQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKKyAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCisgICAgICAgIGRlbCBvCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWYxKCkgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCByZWZlcmVuY2UgdG8gYmUgaW52YWxpZGF0ZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmMigpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgcmVmZXJlbmNlIHRvIGJlIGludmFsaWRhdGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2JjYWxsZWQgPT0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJjYWxsYmFjayBub3QgY2FsbGVkIHRoZSByaWdodCBudW1iZXIgb2YgdGltZXMiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfc2VsZnJlZl9jYWxsYmFja3Moc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGFsbCByZWZlcmVuY2VzIGFyZSBpbnZhbGlkYXRlZCBiZWZvcmUgY2FsbGJhY2tzIGFyZSBjYWxsZWQKKyAgICAgICAgIworICAgICAgICAjIFdoYXQncyBpbXBvcnRhbnQgaGVyZSBpcyB0aGF0IHdlJ3JlIHVzaW5nIHRoZSBmaXJzdAorICAgICAgICAjIHJlZmVyZW5jZSBpbiB0aGUgY2FsbGJhY2sgaW52b2tlZCBvbiB0aGUgc2Vjb25kIHJlZmVyZW5jZQorICAgICAgICAjICh0aGUgbW9zdCByZWNlbnRseSBjcmVhdGVkIHJlZiBpcyBjbGVhbmVkIHVwIGZpcnN0KS4gIFRoaXMKKyAgICAgICAgIyB0ZXN0cyB0aGF0IGFsbCByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3QgYXJlIGludmFsaWRhdGVkCisgICAgICAgICMgYmVmb3JlIGFueSBvZiB0aGUgY2FsbGJhY2tzIGFyZSBpbnZva2VkLCBzbyB0aGF0IHdlIG9ubHkKKyAgICAgICAgIyBoYXZlIG9uZSBpbnZvY2F0aW9uIG9mIF93ZWFrcmVmLmM6Y2xlYW51cF9oZWxwZXIoKSBhY3RpdmUKKyAgICAgICAgIyBmb3IgYSBwYXJ0aWN1bGFyIG9iamVjdCBhdCBhIHRpbWUuCisgICAgICAgICMKKyAgICAgICAgZGVmIGNhbGxiYWNrKG9iamVjdCwgc2VsZj1zZWxmKToKKyAgICAgICAgICAgIHNlbGYucmVmKCkKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLnJlZiA9IHdlYWtyZWYucmVmKGMsIGNhbGxiYWNrKQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYoYywgY2FsbGJhY2spCisgICAgICAgIGRlbCBjCisKKyAgICBkZWYgdGVzdF9wcm94eV9yZWYoc2VsZik6CisgICAgICAgIG8gPSBDKCkKKyAgICAgICAgby5iYXIgPSAxCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnByb3h5KG8sIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHJlZjIgPSB3ZWFrcmVmLnByb3h5KG8sIHNlbGYuY2FsbGJhY2spCisgICAgICAgIGRlbCBvCisKKyAgICAgICAgZGVmIGNoZWNrKHByb3h5KToKKyAgICAgICAgICAgIHByb3h5LmJhcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHdlYWtyZWYuUmVmZXJlbmNlRXJyb3IsIGNoZWNrLCByZWYxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh3ZWFrcmVmLlJlZmVyZW5jZUVycm9yLCBjaGVjaywgcmVmMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMod2Vha3JlZi5SZWZlcmVuY2VFcnJvciwgYm9vbCwgd2Vha3JlZi5wcm94eShDKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jYmNhbGxlZCA9PSAyKQorCisgICAgZGVmIGNoZWNrX2Jhc2ljX3JlZihzZWxmLCBmYWN0b3J5KToKKyAgICAgICAgbyA9IGZhY3RvcnkoKQorICAgICAgICByZWYgPSB3ZWFrcmVmLnJlZihvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmKCkgaXMgbm90IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAid2VhayByZWZlcmVuY2UgdG8gbGl2ZSBvYmplY3Qgc2hvdWxkIGJlIGxpdmUiKQorICAgICAgICBvMiA9IHJlZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvIGlzIG8yLAorICAgICAgICAgICAgICAgICAgICAgIjxyZWY+KCkgc2hvdWxkIHJldHVybiBvcmlnaW5hbCBvYmplY3QgaWYgbGl2ZSIpCisKKyAgICBkZWYgY2hlY2tfYmFzaWNfY2FsbGJhY2soc2VsZiwgZmFjdG9yeSk6CisgICAgICAgIHNlbGYuY2JjYWxsZWQgPSAwCisgICAgICAgIG8gPSBmYWN0b3J5KCkKKyAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKKyAgICAgICAgZGVsIG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2JjYWxsZWQgPT0gMSwKKyAgICAgICAgICAgICAgICAgICAgICJjYWxsYmFjayBkaWQgbm90IHByb3Blcmx5IHNldCAnY2JjYWxsZWQnIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZigpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAicmVmMiBzaG91bGQgYmUgZGVhZCBhZnRlciBkZWxldGluZyBvYmplY3QgcmVmZXJlbmNlIikKKworICAgIGRlZiB0ZXN0X3JlZl9yZXVzZShzZWxmKToKKyAgICAgICAgbyA9IEMoKQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobykKKyAgICAgICAgIyBjcmVhdGUgYSBwcm94eSB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSdzIGFuIGludGVydmVuaW5nIGNyZWF0aW9uCisgICAgICAgICMgYmV0d2VlbiB0aGVzZSB0d287IGl0IHNob3VsZCBtYWtlIG5vIGRpZmZlcmVuY2UKKyAgICAgICAgcHJveHkgPSB3ZWFrcmVmLnByb3h5KG8pCisgICAgICAgIHJlZjIgPSB3ZWFrcmVmLnJlZihvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmMSBpcyByZWYyLAorICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSBvYmplY3Qgdy9vdXQgY2FsbGJhY2sgc2hvdWxkIGJlIHJlLXVzZWQiKQorCisgICAgICAgIG8gPSBDKCkKKyAgICAgICAgcHJveHkgPSB3ZWFrcmVmLnByb3h5KG8pCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZihvKQorICAgICAgICByZWYyID0gd2Vha3JlZi5yZWYobykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZjEgaXMgcmVmMiwKKyAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2Ugb2JqZWN0IHcvb3V0IGNhbGxiYWNrIHNob3VsZCBiZSByZS11c2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDIsCisgICAgICAgICAgICAgICAgICAgICAid3Jvbmcgd2VhayByZWYgY291bnQgZm9yIG9iamVjdCIpCisgICAgICAgIGRlbCBwcm94eQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMSwKKyAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB3ZWFrIHJlZiBjb3VudCBmb3Igb2JqZWN0IGFmdGVyIGRlbGV0aW5nIHByb3h5IikKKworICAgIGRlZiB0ZXN0X3Byb3h5X3JldXNlKHNlbGYpOgorICAgICAgICBvID0gQygpCisgICAgICAgIHByb3h5MSA9IHdlYWtyZWYucHJveHkobykKKyAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYobykKKyAgICAgICAgcHJveHkyID0gd2Vha3JlZi5wcm94eShvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJveHkxIGlzIHByb3h5MiwKKyAgICAgICAgICAgICAgICAgICAgICJwcm94eSBvYmplY3Qgdy9vdXQgY2FsbGJhY2sgc2hvdWxkIGhhdmUgYmVlbiByZS11c2VkIikKKworICAgIGRlZiB0ZXN0X2Jhc2ljX3Byb3h5KHNlbGYpOgorICAgICAgICBvID0gQygpCisgICAgICAgIHNlbGYuY2hlY2tfcHJveHkobywgd2Vha3JlZi5wcm94eShvKSkKKworICAgICAgICBMID0gVXNlckxpc3QuVXNlckxpc3QoKQorICAgICAgICBwID0gd2Vha3JlZi5wcm94eShMKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAsICJwcm94eSBmb3IgZW1wdHkgVXNlckxpc3Qgc2hvdWxkIGJlIGZhbHNlIikKKyAgICAgICAgcC5hcHBlbmQoMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEwpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCwgInByb3h5IGZvciBub24tZW1wdHkgVXNlckxpc3Qgc2hvdWxkIGJlIHRydWUiKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBwWzpdID0gWzIsIDNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEwpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigzLCBwLCAicHJveHkgZGlkbid0IHN1cHBvcnQgX19jb250YWluc19fKCkgcHJvcGVybHkiKQorICAgICAgICBwWzFdID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExbMV0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsxXSwgNSkKKyAgICAgICAgTDIgPSBVc2VyTGlzdC5Vc2VyTGlzdChMKQorICAgICAgICBwMiA9IHdlYWtyZWYucHJveHkoTDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgcDIpCisgICAgICAgICMjIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihMMiksIHJlcHIocDIpKQorICAgICAgICBMMyA9IFVzZXJMaXN0LlVzZXJMaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgcDMgPSB3ZWFrcmVmLnByb3h5KEwzKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwzWzpdLCBwM1s6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTDNbNTpdLCBwM1s1Ol0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwzWzo1XSwgcDNbOjVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMM1syOjVdLCBwM1syOjVdKQorCisgICAgZGVmIHRlc3RfcHJveHlfdW5pY29kZShzZWxmKToKKyAgICAgICAgIyBTZWUgYnVnIDUwMzcKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciCisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUidW5pY29kZSIKKyAgICAgICAgaW5zdGFuY2UgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX191bmljb2RlX18iLCBkaXIod2Vha3JlZi5wcm94eShpbnN0YW5jZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUod2Vha3JlZi5wcm94eShpbnN0YW5jZSkpLCB1InVuaWNvZGUiKQorCisgICAgZGVmIHRlc3RfcHJveHlfaW5kZXgoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAxMAorICAgICAgICBvID0gQygpCisgICAgICAgIHAgPSB3ZWFrcmVmLnByb3h5KG8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaW5kZXgocCksIDEwKQorCisgICAgZGVmIHRlc3RfcHJveHlfZGl2KHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICBkZWYgX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDIxCisgICAgICAgIG8gPSBDKCkKKyAgICAgICAgcCA9IHdlYWtyZWYucHJveHkobykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8vIDUsIDQyKQorICAgICAgICBwIC8vPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgMjEpCisKKyAgICAjIFRoZSBQeVdlYWtyZWZfKiBDIEFQSSBpcyBkb2N1bWVudGVkIGFzIGFsbG93aW5nIGVpdGhlciBOVUxMIG9yCisgICAgIyBOb25lIGFzIHRoZSB2YWx1ZSBmb3IgdGhlIGNhbGxiYWNrLCB3aGVyZSBlaXRoZXIgbWVhbnMgIm5vCisgICAgIyBjYWxsYmFjayIuICBUaGUgIm5vIGNhbGxiYWNrIiByZWYgYW5kIHByb3h5IG9iamVjdHMgYXJlIHN1cHBvc2VkCisgICAgIyB0byBiZSBzaGFyZWQgc28gbG9uZyBhcyB0aGV5IGV4aXN0IGJ5IGFsbCBjYWxsZXJzIHNvIGxvbmcgYXMKKyAgICAjIHRoZXkgYXJlIGFjdGl2ZS4gIEluIFB5dGhvbiAyLjMuMyBhbmQgZWFybGllciwgdGhpcyBndWFyYW50ZWUKKyAgICAjIHdhcyBub3QgaG9ub3JlZCwgYW5kIHdhcyBicm9rZW4gaW4gZGlmZmVyZW50IHdheXMgZm9yCisgICAgIyBQeVdlYWtyZWZfTmV3UmVmKCkgYW5kIFB5V2Vha3JlZl9OZXdQcm94eSgpLiAgKFR3byB0ZXN0cy4pCisKKyAgICBkZWYgdGVzdF9zaGFyZWRfcmVmX3dpdGhvdXRfY2FsbGJhY2soc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2hhcmVkX3dpdGhvdXRfY2FsbGJhY2sod2Vha3JlZi5yZWYpCisKKyAgICBkZWYgdGVzdF9zaGFyZWRfcHJveHlfd2l0aG91dF9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zaGFyZWRfd2l0aG91dF9jYWxsYmFjayh3ZWFrcmVmLnByb3h5KQorCisgICAgZGVmIGNoZWNrX3NoYXJlZF93aXRob3V0X2NhbGxiYWNrKHNlbGYsIG1ha2VyZWYpOgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIHAxID0gbWFrZXJlZihvLCBOb25lKQorICAgICAgICBwMiA9IG1ha2VyZWYobywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAxIGlzIHAyLCAiYm90aCBjYWxsYmFja3Mgd2VyZSBOb25lIGluIHRoZSBDIEFQSSIpCisgICAgICAgIGRlbCBwMSwgcDIKKyAgICAgICAgcDEgPSBtYWtlcmVmKG8pCisgICAgICAgIHAyID0gbWFrZXJlZihvLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocDEgaXMgcDIsICJjYWxsYmFja3Mgd2VyZSBOVUxMLCBOb25lIGluIHRoZSBDIEFQSSIpCisgICAgICAgIGRlbCBwMSwgcDIKKyAgICAgICAgcDEgPSBtYWtlcmVmKG8pCisgICAgICAgIHAyID0gbWFrZXJlZihvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocDEgaXMgcDIsICJib3RoIGNhbGxiYWNrcyB3ZXJlIE5VTEwgaW4gdGhlIEMgQVBJIikKKyAgICAgICAgZGVsIHAxLCBwMgorICAgICAgICBwMSA9IG1ha2VyZWYobywgTm9uZSkKKyAgICAgICAgcDIgPSBtYWtlcmVmKG8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwMSBpcyBwMiwgImNhbGxiYWNrcyB3ZXJlIE5vbmUsIE5VTEwgaW4gdGhlIEMgQVBJIikKKworICAgIGRlZiB0ZXN0X2NhbGxhYmxlX3Byb3h5KHNlbGYpOgorICAgICAgICBvID0gQ2FsbGFibGUoKQorICAgICAgICByZWYxID0gd2Vha3JlZi5wcm94eShvKQorCisgICAgICAgIHNlbGYuY2hlY2tfcHJveHkobywgcmVmMSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShyZWYxKSBpcyB3ZWFrcmVmLkNhbGxhYmxlUHJveHlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgInByb3h5IGlzIG5vdCBvZiBjYWxsYWJsZSB0eXBlIikKKyAgICAgICAgcmVmMSgndHdpbmtpZXMhJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8uYmFyID09ICd0d2lua2llcyEnLAorICAgICAgICAgICAgICAgICAgICAgImNhbGwgdGhyb3VnaCBwcm94eSBub3QgcGFzc2VkIHRocm91Z2ggdG8gb3JpZ2luYWwiKQorICAgICAgICByZWYxKHg9J1NwbGF0LicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvLmJhciA9PSAnU3BsYXQuJywKKyAgICAgICAgICAgICAgICAgICAgICJjYWxsIHRocm91Z2ggcHJveHkgbm90IHBhc3NlZCB0aHJvdWdoIHRvIG9yaWdpbmFsIikKKworICAgICAgICAjIGV4cGVjdCBkdWUgdG8gdG9vIGZldyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVmMSkKKworICAgICAgICAjIGV4cGVjdCBkdWUgdG8gdG9vIG1hbnkgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZjEsIDEsIDIsIDMpCisKKyAgICBkZWYgY2hlY2tfcHJveHkoc2VsZiwgbywgcHJveHkpOgorICAgICAgICBvLmZvbyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3h5LmZvbyA9PSAxLAorICAgICAgICAgICAgICAgICAgICAgInByb3h5IGRvZXMgbm90IHJlZmxlY3QgYXR0cmlidXRlIGFkZGl0aW9uIikKKyAgICAgICAgby5mb28gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm94eS5mb28gPT0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJwcm94eSBkb2VzIG5vdCByZWZsZWN0IGF0dHJpYnV0ZSBtb2RpZmljYXRpb24iKQorICAgICAgICBkZWwgby5mb28KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKHByb3h5LCAnZm9vJyksCisgICAgICAgICAgICAgICAgICAgICAicHJveHkgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgcmVtb3ZhbCIpCisKKyAgICAgICAgcHJveHkuZm9vID0gMQorICAgICAgICBzZWxmLmFzc2VydFRydWUoby5mb28gPT0gMSwKKyAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgYWRkaXRpb24gdmlhIHByb3h5IikKKyAgICAgICAgcHJveHkuZm9vID0gMgorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBvLmZvbyA9PSAyLAorICAgICAgICAgICAgIm9iamVjdCBkb2VzIG5vdCByZWZsZWN0IGF0dHJpYnV0ZSBtb2RpZmljYXRpb24gdmlhIHByb3h5IikKKyAgICAgICAgZGVsIHByb3h5LmZvbworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobywgJ2ZvbycpLAorICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBkb2VzIG5vdCByZWZsZWN0IGF0dHJpYnV0ZSByZW1vdmFsIHZpYSBwcm94eSIpCisKKyAgICBkZWYgdGVzdF9wcm94eV9kZWxldGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IGNsZWFyaW5nIG9mIFNGIGJ1ZyAjNzYyODkxCisgICAgICAgIGNsYXNzIEZvbzoKKyAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBhY2Nlc3Nvcik6CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBhY2Nlc3NvcgorICAgICAgICBnID0gRm9vKCkKKyAgICAgICAgZiA9IHdlYWtyZWYucHJveHkoZykKKyAgICAgICAgZGVsIGZbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCwgMCkKKworICAgIGRlZiB0ZXN0X3Byb3h5X2Jvb2woc2VsZik6CisgICAgICAgICMgVGVzdCBjbGVhcmluZyBvZiBTRiBidWcgIzExNzA3NjYKKyAgICAgICAgY2xhc3MgTGlzdChsaXN0KTogcGFzcworICAgICAgICBseXN0ID0gTGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9vbCh3ZWFrcmVmLnByb3h5KGx5c3QpKSwgYm9vbChseXN0KSkKKworICAgIGRlZiB0ZXN0X2dldHdlYWtyZWZjb3VudChzZWxmKToKKyAgICAgICAgbyA9IEMoKQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobykKKyAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAyLAorICAgICAgICAgICAgICAgICAgICAgImdvdCB3cm9uZyBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2Ugb2JqZWN0cyIpCisKKyAgICAgICAgcHJveHkxID0gd2Vha3JlZi5wcm94eShvKQorICAgICAgICBwcm94eTIgPSB3ZWFrcmVmLnByb3h5KG8sIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSA0LAorICAgICAgICAgICAgICAgICAgICAgImdvdCB3cm9uZyBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2Ugb2JqZWN0cyIpCisKKyAgICAgICAgZGVsIHJlZjEsIHJlZjIsIHByb3h5MSwgcHJveHkyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgIndlYWsgcmVmZXJlbmNlIG9iamVjdHMgbm90IHVubGlua2VkIGZyb20iCisgICAgICAgICAgICAgICAgICAgICAiIHJlZmVyZW50IHdoZW4gZGlzY2FyZGVkLiIpCisKKyAgICAgICAgIyBhc3N1bWVzIGludHMgZG8gbm90IHN1cHBvcnQgd2Vha3JlZnMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KDEpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAiZ290IHdyb25nIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZSBvYmplY3RzIGZvciBpbnQiKQorCisgICAgZGVmIHRlc3RfZ2V0d2Vha3JlZnMoc2VsZik6CisgICAgICAgIG8gPSBDKCkKKyAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHJlZjIgPSB3ZWFrcmVmLnJlZihvLCBzZWxmLmNhbGxiYWNrKQorICAgICAgICBkZWwgcmVmMQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmcyhvKSA9PSBbcmVmMl0sCisgICAgICAgICAgICAgICAgICAgICAibGlzdCBvZiByZWZzIGRvZXMgbm90IG1hdGNoIikKKworICAgICAgICBvID0gQygpCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZihvLCBzZWxmLmNhbGxiYWNrKQorICAgICAgICByZWYyID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKKyAgICAgICAgZGVsIHJlZjIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZnMobykgPT0gW3JlZjFdLAorICAgICAgICAgICAgICAgICAgICAgImxpc3Qgb2YgcmVmcyBkb2VzIG5vdCBtYXRjaCIpCisKKyAgICAgICAgZGVsIHJlZjEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZnMobykgPT0gW10sCisgICAgICAgICAgICAgICAgICAgICAibGlzdCBvZiByZWZzIG5vdCBjbGVhcmVkIikKKworICAgICAgICAjIGFzc3VtZXMgaW50cyBkbyBub3Qgc3VwcG9ydCB3ZWFrcmVmcworICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmcygxKSA9PSBbXSwKKyAgICAgICAgICAgICAgICAgICAgICJsaXN0IG9mIHJlZnMgZG9lcyBub3QgbWF0Y2ggZm9yIGludCIpCisKKyAgICBkZWYgdGVzdF9uZXdzdHlsZV9udW1iZXJfb3BzKHNlbGYpOgorICAgICAgICBjbGFzcyBGKGZsb2F0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZiA9IEYoMi4wKQorICAgICAgICBwID0gd2Vha3JlZi5wcm94eShmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCArIDEuMCA9PSAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgxLjAgKyBwID09IDMuMCkgICMgdGhpcyB1c2VkIHRvIFNFR1YKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc19wcm90ZWN0ZWQoc2VsZik6CisgICAgICAgICMgQ2FsbGJhY2tzIHByb3RlY3RlZCBmcm9tIGFscmVhZHktc2V0IGV4Y2VwdGlvbnM/CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBTRiBidWcgIzQ3ODUzNC4KKyAgICAgICAgY2xhc3MgQm9ndXNFcnJvcihFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkYXRhID0ge30KKyAgICAgICAgZGVmIHJlbW92ZShrKToKKyAgICAgICAgICAgIGRlbCBkYXRhW2tdCisgICAgICAgIGRlZiBlbmNhcHN1bGF0ZSgpOgorICAgICAgICAgICAgZiA9IGxhbWJkYSA6ICgpCisgICAgICAgICAgICBkYXRhW3dlYWtyZWYucmVmKGYsIHJlbW92ZSldID0gTm9uZQorICAgICAgICAgICAgcmFpc2UgQm9ndXNFcnJvcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbmNhcHN1bGF0ZSgpCisgICAgICAgIGV4Y2VwdCBCb2d1c0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleGNlcHRpb24gbm90IHByb3Blcmx5IHJlc3RvcmVkIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW5jYXBzdWxhdGUoKQorICAgICAgICBleGNlcHQgQm9ndXNFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCBwcm9wZXJseSByZXN0b3JlZCIpCisKKyAgICBkZWYgdGVzdF9zZl9idWdfODQwODI5KHNlbGYpOgorICAgICAgICAjICJ3ZWFrcmVmIGNhbGxiYWNrcyBhbmQgZ2MgY29ycnVwdCBtZW1vcnkiCisgICAgICAgICMgc3VidHlwZV9kZWFsbG9jIGVycm9uZW91c2x5IGV4cG9zZWQgYSBuZXctc3R5bGUgaW5zdGFuY2UKKyAgICAgICAgIyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGdldHRpbmcgZGVhbGxvY2F0ZWQgdG8gZ2MsCisgICAgICAgICMgY2F1c2luZyBkb3VibGUtZGVhbGxvY2F0aW9uIGlmIHRoZSBpbnN0YW5jZSBoYWQgYSB3ZWFrcmVmCisgICAgICAgICMgY2FsbGJhY2sgdGhhdCB0cmlnZ2VyZWQgZ2MuCisgICAgICAgICMgSWYgdGhlIGJ1ZyBleGlzdHMsIHRoZXJlIHByb2JhYmx5IHdvbid0IGJlIGFuIG9idmlvdXMgc3ltcHRvbQorICAgICAgICAjIGluIGEgcmVsZWFzZSBidWlsZC4gIEluIGEgZGVidWcgYnVpbGQsIGEgc2VnZmF1bHQgd2lsbCBvY2N1cgorICAgICAgICAjIHdoZW4gdGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgImxpc3QKKyAgICAgICAgIyBvZiBhbGwgb2JqZWN0cyIgb2NjdXJzLgorCisgICAgICAgIGltcG9ydCBnYworCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjID0gQygpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYywgbGFtYmRhIGlnbm9yZTogZ2MuY29sbGVjdCgpKQorICAgICAgICBkZWwgYworCisgICAgICAgICMgVGhlcmUgZW5kZXRoIHRoZSBmaXJzdCBwYXJ0LiAgSXQgZ2V0cyB3b3JzZS4KKyAgICAgICAgZGVsIHdyCisKKyAgICAgICAgYzEgPSBDKCkKKyAgICAgICAgYzEuaSA9IEMoKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMxLmksIGxhbWJkYSBpZ25vcmU6IGdjLmNvbGxlY3QoKSkKKworICAgICAgICBjMiA9IEMoKQorICAgICAgICBjMi5jMSA9IGMxCisgICAgICAgIGRlbCBjMSAgIyBzdGlsbCBhbGl2ZSBiZWNhdXNlIGMyIHBvaW50cyB0byBpdAorCisgICAgICAgICMgTm93IHdoZW4gc3VidHlwZV9kZWFsbG9jIGdldHMgY2FsbGVkIG9uIGMyLCBpdCdzIG5vdCBlbm91Z2gganVzdAorICAgICAgICAjIHRoYXQgYzIgaXMgaW1tdW5lIGZyb20gZ2Mgd2hpbGUgdGhlIHdlYWtyZWYgY2FsbGJhY2tzIGFzc29jaWF0ZWQKKyAgICAgICAgIyB3aXRoIGMyIGV4ZWN1dGUgKHRoZXJlIGFyZSBub25lIGluIHRoaXMgMm5kIGhhbGYgb2YgdGhlIHRlc3QsIGJ0dykuCisgICAgICAgICMgc3VidHlwZV9kZWFsbG9jIGdvZXMgb24gdG8gY2FsbCB0aGUgYmFzZSBjbGFzc2VzJyBkZWFsbG9jcyB0b28sCisgICAgICAgICMgc28gYW55IGdjIHRyaWdnZXJlZCBieSB3ZWFrcmVmIGNhbGxiYWNrcyBhc3NvY2lhdGVkIHdpdGggYW55dGhpbmcKKyAgICAgICAgIyB0b3JuIGRvd24gYnkgYSBiYXNlIGNsYXNzIGRlYWxsb2MgY2FuIGFsc28gdHJpZ2dlciBkb3VibGUKKyAgICAgICAgIyBkZWFsbG9jYXRpb24gb2YgYzIuCisgICAgICAgIGRlbCBjMgorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfaW5fY3ljbGVfMShzZWxmKToKKyAgICAgICAgaW1wb3J0IGdjCisKKyAgICAgICAgY2xhc3MgSihvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIElJKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgYWNhbGxiYWNrKHNlbGYsIGlnbm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5KCisKKyAgICAgICAgSSA9IElJKCkKKyAgICAgICAgSS5KID0gSgorICAgICAgICBJLndyID0gd2Vha3JlZi5yZWYoSiwgSS5hY2FsbGJhY2spCisKKyAgICAgICAgIyBOb3cgSiBhbmQgSUkgYXJlIGVhY2ggaW4gYSBzZWxmLWN5Y2xlIChhcyBhbGwgbmV3LXN0eWxlIGNsYXNzCisgICAgICAgICMgb2JqZWN0cyBhcmUsIHNpbmNlIHRoZWlyIF9fbXJvX18gcG9pbnRzIGJhY2sgdG8gdGhlbSkuICBJIGhvbGRzCisgICAgICAgICMgYm90aCBhIHdlYWsgcmVmZXJlbmNlIChJLndyKSBhbmQgYSBzdHJvbmcgcmVmZXJlbmNlIChJLkopIHRvIGNsYXNzCisgICAgICAgICMgSi4gIEkgaXMgYWxzbyBpbiBhIGN5Y2xlIChJLndyIHBvaW50cyB0byBhIHdlYWtyZWYgdGhhdCByZWZlcmVuY2VzCisgICAgICAgICMgSS5hY2FsbGJhY2spLiAgV2hlbiB3ZSBkZWwgdGhlc2UgdGhyZWUsIHRoZXkgYWxsIGJlY29tZSB0cmFzaCwgYnV0CisgICAgICAgICMgdGhlIGN5Y2xlcyBwcmV2ZW50IGFueSBvZiB0aGVtIGZyb20gZ2V0dGluZyBjbGVhbmVkIHVwIGltbWVkaWF0ZWx5LgorICAgICAgICAjIEluc3RlYWQgdGhleSBoYXZlIHRvIHdhaXQgZm9yIGN5Y2xpYyBnYyB0byBkZWR1Y2UgdGhhdCB0aGV5J3JlCisgICAgICAgICMgdHJhc2guCisgICAgICAgICMKKyAgICAgICAgIyBnYyB1c2VkIHRvIGNhbGwgdHBfY2xlYXIgb24gYWxsIG9mIHRoZW0sIGFuZCB0aGUgb3JkZXIgaW4gd2hpY2gKKyAgICAgICAgIyBpdCBkb2VzIHRoYXQgaXMgcHJldHR5IGFjY2lkZW50YWwuICBUaGUgZXhhY3Qgb3JkZXIgaW4gd2hpY2ggd2UKKyAgICAgICAgIyBidWlsdCB1cCB0aGVzZSB0aGluZ3MgbWFuYWdlcyB0byBwcm92b2tlIGdjIGludG8gcnVubmluZyB0cF9jbGVhcgorICAgICAgICAjIGluIGp1c3QgdGhlIHJpZ2h0IG9yZGVyIChJIGxhc3QpLiAgQ2FsbGluZyB0cF9jbGVhciBvbiBJSSBsZWF2ZXMKKyAgICAgICAgIyBiZWhpbmQgYW4gaW5zYW5lIGNsYXNzIG9iamVjdCAoaXRzIF9fbXJvX18gYmVjb21lcyBOVUxMKS4gIENhbGxpbmcKKyAgICAgICAgIyB0cF9jbGVhciBvbiBKIGJyZWFrcyBpdHMgc2VsZi1jeWNsZSwgYnV0IEogZG9lc24ndCBnZXQgZGVsZXRlZAorICAgICAgICAjIGp1c3QgdGhlbiBiZWNhdXNlIG9mIHRoZSBzdHJvbmcgcmVmZXJlbmNlIGZyb20gSS5KLiAgQ2FsbGluZworICAgICAgICAjIHRwX2NsZWFyIG9uIEkgc3RhcnRzIHRvIGNsZWFyIEkncyBfX2RpY3RfXywgYW5kIGp1c3QgaGFwcGVucyB0bworICAgICAgICAjIGNsZWFyIEkuSiBmaXJzdCAtLSBJLndyIGlzIHN0aWxsIGludGFjdC4gIFRoYXQgcmVtb3ZlcyB0aGUgbGFzdAorICAgICAgICAjIHJlZmVyZW5jZSB0byBKLCB3aGljaCB0cmlnZ2VycyB0aGUgd2Vha3JlZiBjYWxsYmFjay4gIFRoZSBjYWxsYmFjaworICAgICAgICAjIHRyaWVzIHRvIGRvICJzZWxmLkoiLCBhbmQgaW5zdGFuY2VzIG9mIG5ldy1zdHlsZSBjbGFzc2VzIGxvb2sgdXAKKyAgICAgICAgIyBhdHRyaWJ1dGVzICgiSiIpIGluIHRoZSBjbGFzcyBkaWN0IGZpcnN0LiAgVGhlIGNsYXNzIChJSSkgd2FudHMgdG8KKyAgICAgICAgIyBzZWFyY2ggSUkuX19tcm9fXywgYnV0IHRoYXQncyBOVUxMLiAgIFRoZSByZXN1bHQgd2FzIGEgc2VnZmF1bHQgaW4KKyAgICAgICAgIyBhIHJlbGVhc2UgYnVpbGQsIGFuZCBhbiBhc3NlcnQgZmFpbHVyZSBpbiBhIGRlYnVnIGJ1aWxkLgorICAgICAgICBkZWwgSSwgSiwgSUkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19pbl9jeWNsZV8yKHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2MKKworICAgICAgICAjIFRoaXMgaXMganVzdCBsaWtlIHRlc3RfY2FsbGJhY2tfaW5fY3ljbGVfMSwgZXhjZXB0IHRoYXQgSUkgaXMgYW4KKyAgICAgICAgIyBvbGQtc3R5bGUgY2xhc3MuICBUaGUgc3ltcHRvbSBpcyBkaWZmZXJlbnQgdGhlbjogIGFuIGluc3RhbmNlIG9mIGFuCisgICAgICAgICMgb2xkLXN0eWxlIGNsYXNzIGxvb2tzIGluIGl0cyBvd24gX19kaWN0X18gZmlyc3QuICAnSicgaGFwcGVucyB0bworICAgICAgICAjIGdldCBjbGVhcmVkIGZyb20gSS5fX2RpY3RfXyBiZWZvcmUgJ3dyJywgYW5kICdKJyB3YXMgbmV2ZXIgaW4gSUkncworICAgICAgICAjIF9fZGljdF9fLCBzbyB0aGUgYXR0cmlidXRlIGlzbid0IGZvdW5kLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdAorICAgICAgICAjIHRoZSBvbGQtc3R5bGUgSUkgZG9lc24ndCBoYXZlIGEgTlVMTCBfX21yb19fIChpdCBkb2Vzbid0IGhhdmUgYW55CisgICAgICAgICMgX19tcm9fXyksIHNvIG5vIHNlZ2ZhdWx0IG9jY3Vycy4gIEluc3RlYWQgaXQgZ290OgorICAgICAgICAjICAgIHRlc3RfY2FsbGJhY2tfaW5fY3ljbGVfMiAoX19tYWluX18uUmVmZXJlbmNlc1Rlc3RDYXNlKSAuLi4KKyAgICAgICAgIyAgICBFeGNlcHRpb24gZXhjZXB0aW9ucy5BdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgIyAgICJJSSBpbnN0YW5jZSBoYXMgbm8gYXR0cmlidXRlICdKJyIgaW4gPGJvdW5kIG1ldGhvZCBJSS5hY2FsbGJhY2sKKyAgICAgICAgIyAgICAgICBvZiA8Py5JSSBpbnN0YW5jZSBhdCAweDAwQjlCNEI4Pj4gaWdub3JlZAorCisgICAgICAgIGNsYXNzIEoob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBJSToKKyAgICAgICAgICAgIGRlZiBhY2FsbGJhY2soc2VsZiwgaWdub3JlKToKKyAgICAgICAgICAgICAgICBzZWxmLkoKKworICAgICAgICBJID0gSUkoKQorICAgICAgICBJLkogPSBKCisgICAgICAgIEkud3IgPSB3ZWFrcmVmLnJlZihKLCBJLmFjYWxsYmFjaykKKworICAgICAgICBkZWwgSSwgSiwgSUkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19pbl9jeWNsZV8zKHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2MKKworICAgICAgICAjIFRoaXMgb25lIGJyb2tlIHRoZSBmaXJzdCBwYXRjaCB0aGF0IGZpeGVkIHRoZSBsYXN0IHR3by4gIEluIHRoaXMKKyAgICAgICAgIyBjYXNlLCB0aGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGUgY2FsbGJhY2sgYXJlbid0IGFsc28gcmVhY2hhYmxlCisgICAgICAgICMgZnJvbSB0aGUgb2JqZWN0IChjMSkgKnRyaWdnZXJpbmcqIHRoZSBjYWxsYmFjazogIHlvdSBjYW4gZ2V0IHRvCisgICAgICAgICMgYzEgZnJvbSBjMiwgYnV0IG5vdCB2aWNlLXZlcnNhLiAgVGhlIHJlc3VsdCB3YXMgdGhhdCBjMidzIF9fZGljdF9fCisgICAgICAgICMgZ290IHRwX2NsZWFyJ2VkIGJ5IHRoZSB0aW1lIHRoZSBjMi5jYiBjYWxsYmFjayBnb3QgaW52b2tlZC4KKworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIGNiKHNlbGYsIGlnbm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5tZQorICAgICAgICAgICAgICAgIHNlbGYuYzEKKyAgICAgICAgICAgICAgICBzZWxmLndyCisKKyAgICAgICAgYzEsIGMyID0gQygpLCBDKCkKKworICAgICAgICBjMi5tZSA9IGMyCisgICAgICAgIGMyLmMxID0gYzEKKyAgICAgICAgYzIud3IgPSB3ZWFrcmVmLnJlZihjMSwgYzIuY2IpCisKKyAgICAgICAgZGVsIGMxLCBjMgorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2luX2N5Y2xlXzQoc2VsZik6CisgICAgICAgIGltcG9ydCBnYworCisgICAgICAgICMgTGlrZSB0ZXN0X2NhbGxiYWNrX2luX2N5Y2xlXzMsIGV4Y2VwdCBjMiBhbmQgYzEgaGF2ZSBkaWZmZXJlbnQKKyAgICAgICAgIyBjbGFzc2VzLiAgYzIncyBjbGFzcyAoQykgaXNuJ3QgcmVhY2hhYmxlIGZyb20gYzEgdGhlbiwgc28gcHJvdGVjdGluZworICAgICAgICAjIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhlIGR5aW5nIG9iamVjdCAoYzEpIGlzbid0IGVub3VnaCB0byBzdG9wCisgICAgICAgICMgYzIncyBjbGFzcyAoQykgZnJvbSBnZXR0aW5nIHRwX2NsZWFyJ2VkIGJlZm9yZSBjMi5jYiBpcyBpbnZva2VkLgorICAgICAgICAjIFRoZSByZXN1bHQgd2FzIGEgc2VnZmF1bHQgKEMuX19tcm9fXyB3YXMgTlVMTCB3aGVuIHRoZSBjYWxsYmFjaworICAgICAgICAjIHRyaWVkIHRvIGxvb2sgdXAgc2VsZi5tZSkuCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGNiKHNlbGYsIGlnbm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5tZQorICAgICAgICAgICAgICAgIHNlbGYuYzEKKyAgICAgICAgICAgICAgICBzZWxmLndyCisKKyAgICAgICAgY2xhc3MgRDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjMSwgYzIgPSBEKCksIEMoKQorCisgICAgICAgIGMyLm1lID0gYzIKKyAgICAgICAgYzIuYzEgPSBjMQorICAgICAgICBjMi53ciA9IHdlYWtyZWYucmVmKGMxLCBjMi5jYikKKworICAgICAgICBkZWwgYzEsIGMyLCBDLCBECisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfaW5fY3ljbGVfcmVzdXJyZWN0aW9uKHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2MKKworICAgICAgICAjIERvIHNvbWV0aGluZyBuYXN0eSBpbiBhIHdlYWtyZWYgY2FsbGJhY2s6ICByZXN1cnJlY3Qgb2JqZWN0cworICAgICAgICAjIGZyb20gZGVhZCBjeWNsZXMuICBGb3IgdGhpcyB0byBiZSBhdHRlbXB0ZWQsIHRoZSB3ZWFrcmVmIGFuZAorICAgICAgICAjIGl0cyBjYWxsYmFjayBtdXN0IGFsc28gYmUgcGFydCBvZiB0aGUgY3ljbGljIHRyYXNoIChlbHNlIHRoZQorICAgICAgICAjIG9iamVjdHMgcmVhY2hhYmxlIHZpYSB0aGUgY2FsbGJhY2sgY291bGRuJ3QgYmUgaW4gY3ljbGljIHRyYXNoCisgICAgICAgICMgdG8gYmVnaW4gd2l0aCAtLSB0aGUgY2FsbGJhY2sgd291bGQgYWN0IGxpa2UgYW4gZXh0ZXJuYWwgcm9vdCkuCisgICAgICAgICMgQnV0IGdjIGNsZWFycyB0cmFzaCB3ZWFrcmVmcyB3aXRoIGNhbGxiYWNrcyBlYXJseSBub3csIHdoaWNoCisgICAgICAgICMgZGlzYWJsZXMgdGhlIGNhbGxiYWNrcywgc28gdGhlIGNhbGxiYWNrcyBzaG91bGRuJ3QgZ2V0IGNhbGxlZAorICAgICAgICAjIGF0IGFsbCAoYW5kIHNvIG5vdGhpbmcgYWN0dWFsbHkgZ2V0cyByZXN1cnJlY3RlZCkuCisKKyAgICAgICAgYWxpc3QgPSBbXQorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXR0cmlidXRlID0gdmFsdWUKKworICAgICAgICAgICAgZGVmIGFjYWxsYmFjayhzZWxmLCBpZ25vcmUpOgorICAgICAgICAgICAgICAgIGFsaXN0LmFwcGVuZChzZWxmLmMpCisKKyAgICAgICAgYzEsIGMyID0gQygxKSwgQygyKQorICAgICAgICBjMS5jID0gYzIKKyAgICAgICAgYzIuYyA9IGMxCisgICAgICAgIGMxLndyID0gd2Vha3JlZi5yZWYoYzIsIGMxLmFjYWxsYmFjaykKKyAgICAgICAgYzIud3IgPSB3ZWFrcmVmLnJlZihjMSwgYzIuYWNhbGxiYWNrKQorCisgICAgICAgIGRlZiBDX3dlbnRfYXdheShpZ25vcmUpOgorICAgICAgICAgICAgYWxpc3QuYXBwZW5kKCJDIHdlbnQgYXdheSIpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoQywgQ193ZW50X2F3YXkpCisKKyAgICAgICAgZGVsIGMxLCBjMiwgQyAgICMgbWFrZSB0aGVtIGFsbCB0cmFzaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaXN0LCBbXSkgICMgZGVsIGlzbid0IGVub3VnaCB0byByZWNsYWltIGFueXRoaW5nCisKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICMgYzEud3IgYW5kIGMyLndyIHdlcmUgcGFydCBvZiB0aGUgY3ljbGljIHRyYXNoLCBzbyBzaG91bGQgaGF2ZQorICAgICAgICAjIGJlZW4gY2xlYXJlZCB3aXRob3V0IHRoZWlyIGNhbGxiYWNrcyBleGVjdXRpbmcuICBPVE9ILCB0aGUgd2Vha3JlZgorICAgICAgICAjIHRvIEMgaXMgYm91bmQgdG8gYSBmdW5jdGlvbiBsb2NhbCAod3IpLCBhbmQgd2Fzbid0IHRyYXNoLCBzbyB0aGF0CisgICAgICAgICMgY2FsbGJhY2sgc2hvdWxkIGhhdmUgYmVlbiBpbnZva2VkIHdoZW4gQyB3ZW50IGF3YXkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpc3QsIFsiQyB3ZW50IGF3YXkiXSkKKyAgICAgICAgIyBUaGUgcmVtYWluaW5nIHdlYWtyZWYgc2hvdWxkIGJlIGRlYWQgbm93IChpdHMgY2FsbGJhY2sgcmFuKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cigpLCBOb25lKQorCisgICAgICAgIGRlbCBhbGlzdFs6XQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlzdCwgW10pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3Nfb25fY2FsbGJhY2soc2VsZik6CisgICAgICAgIGltcG9ydCBnYworCisgICAgICAgICMgU2V0IHVwIHdlYWtyZWYgY2FsbGJhY2tzICpvbiogd2Vha3JlZiBjYWxsYmFja3MuCisgICAgICAgIGFsaXN0ID0gW10KKyAgICAgICAgZGVmIHNhZmVfY2FsbGJhY2soaWdub3JlKToKKyAgICAgICAgICAgIGFsaXN0LmFwcGVuZCgic2FmZV9jYWxsYmFjayBjYWxsZWQiKQorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBjYihzZWxmLCBpZ25vcmUpOgorICAgICAgICAgICAgICAgIGFsaXN0LmFwcGVuZCgiY2IgY2FsbGVkIikKKworICAgICAgICBjLCBkID0gQygpLCBDKCkKKyAgICAgICAgYy5vdGhlciA9IGQKKyAgICAgICAgZC5vdGhlciA9IGMKKyAgICAgICAgY2FsbGJhY2sgPSBjLmNiCisgICAgICAgIGMud3IgPSB3ZWFrcmVmLnJlZihkLCBjYWxsYmFjaykgICAgICMgdGhpcyB3b24ndCB0cmlnZ2VyCisgICAgICAgIGQud3IgPSB3ZWFrcmVmLnJlZihjYWxsYmFjaywgZC5jYikgICMgZGl0dG8KKyAgICAgICAgZXh0ZXJuYWxfd3IgPSB3ZWFrcmVmLnJlZihjYWxsYmFjaywgc2FmZV9jYWxsYmFjaykgICMgYnV0IHRoaXMgd2lsbAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXh0ZXJuYWxfd3IoKSBpcyBjYWxsYmFjaykKKworICAgICAgICAjIFRoZSB3ZWFrcmVmcyBhdHRhY2hlZCB0byBjIGFuZCBkIHNob3VsZCBnZXQgY2xlYXJlZCwgc28gdGhhdAorICAgICAgICAjIEMuY2IgaXMgbmV2ZXIgY2FsbGVkLiAgQnV0IGV4dGVybmFsX3dyIGlzbid0IHBhcnQgb2YgdGhlIGN5Y2xpYworICAgICAgICAjIHRyYXNoLCBhbmQgbm8gY3ljbGljIHRyYXNoIGlzIHJlYWNoYWJsZSBmcm9tIGl0LCBzbyBzYWZlX2NhbGxiYWNrCisgICAgICAgICMgc2hvdWxkIGdldCBpbnZva2VkIHdoZW4gdGhlIGJvdW5kIG1ldGhvZCBvYmplY3QgY2FsbGJhY2sgKGMuY2IpCisgICAgICAgICMgLS0gd2hpY2ggaXMgaXRzZWxmIGEgY2FsbGJhY2ssIGFuZCBhbHNvIHBhcnQgb2YgdGhlIGN5Y2xpYyB0cmFzaCAtLQorICAgICAgICAjIGdldHMgcmVjbGFpbWVkIGF0IHRoZSBlbmQgb2YgZ2MuCisKKyAgICAgICAgZGVsIGNhbGxiYWNrLCBjLCBkLCBDCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpc3QsIFtdKSAgIyBkZWwgaXNuJ3QgZW5vdWdoIHRvIGNsZWFuIHVwIGN5Y2xlcworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlzdCwgWyJzYWZlX2NhbGxiYWNrIGNhbGxlZCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dGVybmFsX3dyKCksIE5vbmUpCisKKyAgICAgICAgZGVsIGFsaXN0WzpdCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaXN0LCBbXSkKKworICAgIGRlZiB0ZXN0X2djX2R1cmluZ19yZWZfY3JlYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZ2NfZHVyaW5nX2NyZWF0aW9uKHdlYWtyZWYucmVmKQorCisgICAgZGVmIHRlc3RfZ2NfZHVyaW5nX3Byb3h5X2NyZWF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2djX2R1cmluZ19jcmVhdGlvbih3ZWFrcmVmLnByb3h5KQorCisgICAgZGVmIGNoZWNrX2djX2R1cmluZ19jcmVhdGlvbihzZWxmLCBtYWtlcmVmKToKKyAgICAgICAgdGhyZXNob2xkcyA9IGdjLmdldF90aHJlc2hvbGQoKQorICAgICAgICBnYy5zZXRfdGhyZXNob2xkKDEsIDEsIDEpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVmZXJlbmNlZCA9IEEoKQorCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgYS5hID0gYQorICAgICAgICBhLndyID0gbWFrZXJlZihyZWZlcmVuY2VkKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgbm93IG1ha2Ugc3VyZSB0aGUgb2JqZWN0IGFuZCB0aGUgcmVmIGdldCBsYWJlbGVkIGFzCisgICAgICAgICAgICAjIGN5Y2xpYyB0cmFzaDoKKyAgICAgICAgICAgIGEgPSBBKCkKKyAgICAgICAgICAgIHdlYWtyZWYucmVmKHJlZmVyZW5jZWQsIGNhbGxiYWNrKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBnYy5zZXRfdGhyZXNob2xkKCp0aHJlc2hvbGRzKQorCisgICAgZGVmIHRlc3RfcmVmX2NyZWF0ZWRfZHVyaW5nX2RlbChzZWxmKToKKyAgICAgICAgIyBCdWcgIzEzNzc4NTgKKyAgICAgICAgIyBBIHdlYWtyZWYgY3JlYXRlZCBpbiBhbiBvYmplY3QncyBfX2RlbF9fKCkgd291bGQgY3Jhc2ggdGhlCisgICAgICAgICMgaW50ZXJwcmV0ZXIgd2hlbiB0aGUgd2Vha3JlZiB3YXMgY2xlYW5lZCB1cCBzaW5jZSBpdCB3b3VsZCByZWZlciB0bworICAgICAgICAjIG5vbi1leGlzdGVudCBtZW1vcnkuICBUaGlzIHRlc3Qgc2hvdWxkIG5vdCBzZWdmYXVsdCB0aGUgaW50ZXJwcmV0ZXIuCisgICAgICAgIGNsYXNzIFRhcmdldChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgZ2xvYmFsIHJlZl9mcm9tX2RlbAorICAgICAgICAgICAgICAgIHJlZl9mcm9tX2RlbCA9IHdlYWtyZWYucmVmKHNlbGYpCisKKyAgICAgICAgdyA9IFRhcmdldCgpCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICAjIElzc3VlIDM2MzQKKyAgICAgICAgIyA8d2Vha3JlZiB0byBjbGFzcz4uX19pbml0X18oKSBkb2Vzbid0IGNoZWNrIGVycm9ycyBjb3JyZWN0bHkKKyAgICAgICAgciA9IHdlYWtyZWYucmVmKEV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByLl9faW5pdF9fLCAwLCAwLCAwLCAwLCAwKQorICAgICAgICAjIE5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgcmFpc2VkIGhlcmUKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9jbGFzc2VzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYm90aCBvbGQtc3R5bGUgY2xhc3NlcyBhbmQgbmV3LXN0eWxlIGNsYXNzZXMKKyAgICAgICAgIyBhcmUgd2Vha3JlZmFibGUuCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbCA9IFtdCisgICAgICAgIHdlYWtyZWYucmVmKGludCkKKyAgICAgICAgYSA9IHdlYWtyZWYucmVmKEEsIGwuYXBwZW5kKQorICAgICAgICBBID0gTm9uZQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgW2FdKQorICAgICAgICBiID0gd2Vha3JlZi5yZWYoQiwgbC5hcHBlbmQpCisgICAgICAgIEIgPSBOb25lCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBbYSwgYl0pCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgIyBBbGl2ZSB3ZWFrcmVmcyBkZWZlciBlcXVhbGl0eSB0ZXN0aW5nIHRvIHRoZWlyIHVuZGVybHlpbmcgb2JqZWN0LgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgeiA9IE9iamVjdCgyKQorICAgICAgICBhID0gd2Vha3JlZi5yZWYoeCkKKyAgICAgICAgYiA9IHdlYWtyZWYucmVmKHkpCisgICAgICAgIGMgPSB3ZWFrcmVmLnJlZih6KQorICAgICAgICBkID0gd2Vha3JlZi5yZWYoeCkKKyAgICAgICAgIyBOb3RlIGhvdyB3ZSBkaXJlY3RseSB0ZXN0IHRoZSBvcGVyYXRvcnMgaGVyZSwgdG8gc3RyZXNzIGJvdGgKKyAgICAgICAgIyBfX2VxX18gYW5kIF9fbmVfXy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gYikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhICE9IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSA9PSBjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSAhPSBjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEgIT0gZCkKKyAgICAgICAgZGVsIHgsIHksIHoKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGZvciByIGluIGEsIGIsIGM6CisgICAgICAgICAgICAjIFNhbml0eSBjaGVjaworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisgICAgICAgICMgRGVhZCB3ZWFrcmVmcyBjb21wYXJlIGJ5IGlkZW50aXR5OiB3aGV0aGVyIGBhYCBhbmQgYGRgIGFyZSB0aGUKKyAgICAgICAgIyBzYW1lIHdlYWtyZWYgb2JqZWN0IGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgc2luY2UgdGhleSBwb2ludGVkCisgICAgICAgICMgdG8gdGhlIHNhbWUgb3JpZ2luYWwgb2JqZWN0IGFuZCBkaWRuJ3QgaGF2ZSBhIGNhbGxiYWNrLgorICAgICAgICAjIChzZWUgaXNzdWUgIzE2NDUzKS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhID09IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICE9IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSA9PSBjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSAhPSBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgPT0gZCwgYSBpcyBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgIT0gZCwgYSBpcyBub3QgZCkKKworICAgIGRlZiB0ZXN0X2hhc2hpbmcoc2VsZik6CisgICAgICAgICMgQWxpdmUgd2Vha3JlZnMgaGFzaCB0aGUgc2FtZSBhcyB0aGUgdW5kZXJseWluZyBvYmplY3QKKyAgICAgICAgeCA9IE9iamVjdCg0MikKKyAgICAgICAgeSA9IE9iamVjdCg0MikKKyAgICAgICAgYSA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgIGIgPSB3ZWFrcmVmLnJlZih5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goNDIpKQorICAgICAgICBkZWwgeCwgeQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgIyBEZWFkIHdlYWtyZWZzOgorICAgICAgICAjIC0gcmV0YWluIHRoZWlyIGhhc2ggaXMgdGhleSB3ZXJlIGhhc2hlZCB3aGVuIGFsaXZlOworICAgICAgICAjIC0gb3RoZXJ3aXNlLCBjYW5ub3QgYmUgaGFzaGVkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goNDIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGIpCisKKyAgICBkZWYgdGVzdF90cmFzaGNhbl8xNjYwMihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTY2MDI6IHdoZW4gYSB3ZWFrcmVmJ3MgdGFyZ2V0IHdhcyBwYXJ0IG9mIGEgbG9uZworICAgICAgICAjIGRlYWxsb2NhdGlvbiBjaGFpbiwgdGhlIHRyYXNoY2FuIG1lY2hhbmlzbSBjb3VsZCBkZWxheSBjbGVhcmluZworICAgICAgICAjIG9mIHRoZSB3ZWFrcmVmIGFuZCBtYWtlIHRoZSB0YXJnZXQgb2JqZWN0IHZpc2libGUgZnJvbSBvdXRzaWRlCisgICAgICAgICMgY29kZSBldmVuIHRob3VnaCBpdHMgcmVmY291bnQgaGFkIGRyb3BwZWQgdG8gMC4gIEEgY3Jhc2ggZW5zdWVkLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50KToKKyAgICAgICAgICAgICAgICBpZiBub3QgcGFyZW50OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICB3c2VsZiA9IHdlYWtyZWYucmVmKHNlbGYpCisgICAgICAgICAgICAgICAgZGVmIGNiKHdwYXJlbnQpOgorICAgICAgICAgICAgICAgICAgICBvID0gd3NlbGYoKQorICAgICAgICAgICAgICAgIHNlbGYud3BhcmVudCA9IHdlYWtyZWYucmVmKHBhcmVudCwgY2IpCisKKyAgICAgICAgZCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICByb290ID0gYyA9IEMoTm9uZSkKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIGRbY10gPSBjID0gQyhjKQorICAgICAgICBkZWwgcm9vdAorICAgICAgICBnYy5jb2xsZWN0KCkKKworCitjbGFzcyBTdWJjbGFzc2FibGVXZWFrcmVmVGVzdENhc2UoVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfcmVmcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTXlSZWYod2Vha3JlZi5yZWYpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iLCBjYWxsYmFjaz1Ob25lLCB2YWx1ZT00Mik6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICAgICAgc3VwZXIoTXlSZWYsIHNlbGYpLl9faW5pdF9fKG9iLCBjYWxsYmFjaykKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoTXlSZWYsIHNlbGYpLl9fY2FsbF9fKCkKKyAgICAgICAgbyA9IE9iamVjdCgiZm9vIikKKyAgICAgICAgbXIgPSBNeVJlZihvLCB2YWx1ZT0yNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1yKCkgaXMgbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtci52YWx1ZSwgMjQpCisgICAgICAgIGRlbCBvCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtcigpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19yZWZzX2RvbnRfcmVwbGFjZV9zdGFuZGFyZF9yZWZzKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVJlZih3ZWFrcmVmLnJlZik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG8gPSBPYmplY3QoNDIpCisgICAgICAgIHIxID0gTXlSZWYobykKKyAgICAgICAgcjIgPSB3ZWFrcmVmLnJlZihvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgaXMgbm90IHIyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdlYWtyZWYuZ2V0d2Vha3JlZnMobyksIFtyMiwgcjFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pLCAyKQorICAgICAgICByMyA9IE15UmVmKG8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobyksIDMpCisgICAgICAgIHJlZnMgPSB3ZWFrcmVmLmdldHdlYWtyZWZzKG8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlZnMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjIgaXMgcmVmc1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyMSwgcmVmc1sxOl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocjMsIHJlZnNbMTpdKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfcmVmc19kb250X2NvbmZsYXRlX2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTXlSZWYod2Vha3JlZi5yZWYpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvID0gT2JqZWN0KDQyKQorICAgICAgICByMSA9IE15UmVmKG8sIGlkKQorICAgICAgICByMiA9IE15UmVmKG8sIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxIGlzIG5vdCByMikKKyAgICAgICAgcmVmcyA9IHdlYWtyZWYuZ2V0d2Vha3JlZnMobykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyMSwgcmVmcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyMiwgcmVmcykKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlZnNfd2l0aF9zbG90cyhzZWxmKToKKyAgICAgICAgY2xhc3MgTXlSZWYod2Vha3JlZi5yZWYpOgorICAgICAgICAgICAgX19zbG90c19fID0gInNsb3QxIiwgInNsb3QyIgorICAgICAgICAgICAgZGVmIF9fbmV3X18odHlwZSwgb2IsIGNhbGxiYWNrLCBzbG90MSwgc2xvdDIpOgorICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrcmVmLnJlZi5fX25ld19fKHR5cGUsIG9iLCBjYWxsYmFjaykKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYiwgY2FsbGJhY2ssIHNsb3QxLCBzbG90Mik6CisgICAgICAgICAgICAgICAgc2VsZi5zbG90MSA9IHNsb3QxCisgICAgICAgICAgICAgICAgc2VsZi5zbG90MiA9IHNsb3QyCisgICAgICAgICAgICBkZWYgbWV0aChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zbG90MSArIHNlbGYuc2xvdDIKKyAgICAgICAgbyA9IE9iamVjdCg0MikKKyAgICAgICAgciA9IE15UmVmKG8sIE5vbmUsICJhYmMiLCAiZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnNsb3QxLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnNsb3QyLCAiZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLm1ldGgoKSwgImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihyLCAiX19kaWN0X18iKSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlZnNfd2l0aF9jeWNsZShzZWxmKToKKyAgICAgICAgIyBCdWcgIzMxMTAKKyAgICAgICAgIyBBbiBpbnN0YW5jZSBvZiBhIHdlYWtyZWYgc3ViY2xhc3MgY2FuIGhhdmUgYXR0cmlidXRlcy4KKyAgICAgICAgIyBJZiBzdWNoIGEgd2Vha3JlZiBob2xkcyB0aGUgb25seSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QsCisgICAgICAgICMgZGVsZXRpbmcgdGhlIHdlYWtyZWYgd2lsbCBkZWxldGUgdGhlIG9iamVjdC4gSW4gdGhpcyBjYXNlLAorICAgICAgICAjIHRoZSBjYWxsYmFjayBtdXN0IG5vdCBiZSBjYWxsZWQsIGJlY2F1c2UgdGhlIHJlZiBvYmplY3QgaXMKKyAgICAgICAgIyBiZWluZyBkZWxldGVkLgorICAgICAgICBjbGFzcyBNeVJlZih3ZWFrcmVmLnJlZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBVc2UgYSBsb2NhbCBjYWxsYmFjaywgZm9yICJyZWdydGVzdCAtUjo6IgorICAgICAgICAjIHRvIGRldGVjdCByZWZjb3VudGluZyBwcm9ibGVtcworICAgICAgICBkZWYgY2FsbGJhY2sodyk6CisgICAgICAgICAgICBzZWxmLmNiY2FsbGVkICs9IDEKKworICAgICAgICBvID0gQygpCisgICAgICAgIHIxID0gTXlSZWYobywgY2FsbGJhY2spCisgICAgICAgIHIxLm8gPSBvCisgICAgICAgIGRlbCBvCisKKyAgICAgICAgZGVsIHIxICMgVXNlZCB0byBjcmFzaCBoZXJlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNiY2FsbGVkLCAwKQorCisgICAgICAgICMgU2FtZSB0ZXN0LCB3aXRoIHR3byB3ZWFrcmVmcyB0byB0aGUgc2FtZSBvYmplY3QKKyAgICAgICAgIyAoc2luY2UgY29kZSBwYXRocyBhcmUgZGlmZmVyZW50KQorICAgICAgICBvID0gQygpCisgICAgICAgIHIxID0gTXlSZWYobywgY2FsbGJhY2spCisgICAgICAgIHIyID0gTXlSZWYobywgY2FsbGJhY2spCisgICAgICAgIHIxLnIgPSByMgorICAgICAgICByMi5vID0gbworICAgICAgICBkZWwgbworICAgICAgICBkZWwgcjIKKworICAgICAgICBkZWwgcjEgIyBVc2VkIHRvIGNyYXNoIGhlcmUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2JjYWxsZWQsIDApCisKKworY2xhc3MgTWFwcGluZ1Rlc3RDYXNlKFRlc3RCYXNlKToKKworICAgIENPVU5UID0gMTAKKworICAgIGRlZiBjaGVja19sZW5fY3ljbGVzKHNlbGYsIGRpY3RfdHlwZSwgY29ucyk6CisgICAgICAgIE4gPSAyMAorICAgICAgICBpdGVtcyA9IFtSZWZDeWNsZSgpIGZvciBpIGluIHJhbmdlKE4pXQorICAgICAgICBkY3QgPSBkaWN0X3R5cGUoY29ucyhvKSBmb3IgbyBpbiBpdGVtcykKKyAgICAgICAgIyBLZWVwIGFuIGl0ZXJhdG9yIGFsaXZlCisgICAgICAgIGl0ID0gZGN0Lml0ZXJpdGVtcygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWwgaXRlbXMKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIG4xID0gbGVuKGRjdCkKKyAgICAgICAgZGVsIGl0CisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBuMiA9IGxlbihkY3QpCisgICAgICAgICMgb25lIGl0ZW0gbWF5IGJlIGtlcHQgYWxpdmUgaW5zaWRlIHRoZSBpdGVyYXRvcgorICAgICAgICBzZWxmLmFzc2VydEluKG4xLCAoMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjIsIDApCisKKyAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2xlbl9jeWNsZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbGVuX2N5Y2xlcyh3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5LCBsYW1iZGEgazogKGssIDEpKQorCisgICAgZGVmIHRlc3Rfd2Vha192YWx1ZWRfbGVuX2N5Y2xlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19sZW5fY3ljbGVzKHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSwgbGFtYmRhIGs6ICgxLCBrKSkKKworICAgIGRlZiBjaGVja19sZW5fcmFjZShzZWxmLCBkaWN0X3R5cGUsIGNvbnMpOgorICAgICAgICAjIEV4dGVuZGVkIHNhbml0eSBjaGVja3MgZm9yIGxlbigpIGluIHRoZSBmYWNlIG9mIGN5Y2xpYyBjb2xsZWN0aW9uCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChnYy5zZXRfdGhyZXNob2xkLCAqZ2MuZ2V0X3RocmVzaG9sZCgpKQorICAgICAgICBmb3IgdGggaW4gcmFuZ2UoMSwgMTAwKToKKyAgICAgICAgICAgIE4gPSAyMAorICAgICAgICAgICAgZ2MuY29sbGVjdCgwKQorICAgICAgICAgICAgZ2Muc2V0X3RocmVzaG9sZCh0aCwgdGgsIHRoKQorICAgICAgICAgICAgaXRlbXMgPSBbUmVmQ3ljbGUoKSBmb3IgaSBpbiByYW5nZShOKV0KKyAgICAgICAgICAgIGRjdCA9IGRpY3RfdHlwZShjb25zKG8pIGZvciBvIGluIGl0ZW1zKQorICAgICAgICAgICAgZGVsIGl0ZW1zCisgICAgICAgICAgICAjIEFsbCBpdGVtcyB3aWxsIGJlIGNvbGxlY3RlZCBhdCBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBwYXNzCisgICAgICAgICAgICBpdCA9IGRjdC5pdGVyaXRlbXMoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBuMSA9IGxlbihkY3QpCisgICAgICAgICAgICBkZWwgaXQKKyAgICAgICAgICAgIG4yID0gbGVuKGRjdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG4xLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobjEsIE4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuMiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG4yLCBuMSkKKworICAgIGRlZiB0ZXN0X3dlYWtfa2V5ZWRfbGVuX3JhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbGVuX3JhY2Uod2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSwgbGFtYmRhIGs6IChrLCAxKSkKKworICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2xlbl9yYWNlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2xlbl9yYWNlKHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSwgbGFtYmRhIGs6ICgxLCBrKSkKKworICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVzKHNlbGYpOgorICAgICAgICAjCisgICAgICAgICMgIFRoaXMgZXhlcmNpc2VzIGQuY29weSgpLCBkLml0ZW1zKCksIGRbXSwgZGVsIGRbXSwgbGVuKGQpLgorICAgICAgICAjCisgICAgICAgIGRpY3QsIG9iamVjdHMgPSBzZWxmLm1ha2Vfd2Vha192YWx1ZWRfZGljdCgpCisgICAgICAgIGZvciBvIGluIG9iamVjdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byAlciEiICUgbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvIGlzIGRpY3Rbby5hcmddLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBvYmplY3QgcmV0dXJuZWQgYnkgd2VhayBkaWN0ISIpCisgICAgICAgIGl0ZW1zMSA9IGRpY3QuaXRlbXMoKQorICAgICAgICBpdGVtczIgPSBkaWN0LmNvcHkoKS5pdGVtcygpCisgICAgICAgIGl0ZW1zMS5zb3J0KCkKKyAgICAgICAgaXRlbXMyLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXRlbXMxID09IGl0ZW1zMiwKKyAgICAgICAgICAgICAgICAgICAgICJjbG9uaW5nIG9mIHdlYWstdmFsdWVkIGRpY3Rpb25hcnkgZGlkIG5vdCB3b3JrISIpCisgICAgICAgIGRlbCBpdGVtczEsIGl0ZW1zMgorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRpY3QpID09IHNlbGYuQ09VTlQpCisgICAgICAgIGRlbCBvYmplY3RzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gKHNlbGYuQ09VTlQgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgICJkZWxldGluZyBvYmplY3QgZGlkIG5vdCBjYXVzZSBkaWN0aW9uYXJ5IHVwZGF0ZSIpCisgICAgICAgIGRlbCBvYmplY3RzLCBvCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICJkZWxldGluZyB0aGUgdmFsdWVzIGRpZCBub3QgY2xlYXIgdGhlIGRpY3Rpb25hcnkiKQorICAgICAgICAjIHJlZ3Jlc3Npb24gb24gU0YgYnVnICM0NDcxNTI6CisgICAgICAgIGRpY3QgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZGljdC5fX2dldGl0ZW1fXywgMSkKKyAgICAgICAgZGljdFsyXSA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZGljdC5fX2dldGl0ZW1fXywgMikKKworICAgIGRlZiB0ZXN0X3dlYWtfa2V5cyhzZWxmKToKKyAgICAgICAgIworICAgICAgICAjICBUaGlzIGV4ZXJjaXNlcyBkLmNvcHkoKSwgZC5pdGVtcygpLCBkW10gPSB2LCBkW10sIGRlbCBkW10sCisgICAgICAgICMgIGxlbihkKSwgaW4gZC4KKyAgICAgICAgIworICAgICAgICBkaWN0LCBvYmplY3RzID0gc2VsZi5tYWtlX3dlYWtfa2V5ZWRfZGljdCgpCisgICAgICAgIGZvciBvIGluIG9iamVjdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byAlciEiICUgbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvLmFyZyBpcyBkaWN0W29dLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBvYmplY3QgcmV0dXJuZWQgYnkgd2VhayBkaWN0ISIpCisgICAgICAgIGl0ZW1zMSA9IGRpY3QuaXRlbXMoKQorICAgICAgICBpdGVtczIgPSBkaWN0LmNvcHkoKS5pdGVtcygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoaXRlbXMxKSA9PSBzZXQoaXRlbXMyKSwKKyAgICAgICAgICAgICAgICAgICAgICJjbG9uaW5nIG9mIHdlYWsta2V5ZWQgZGljdGlvbmFyeSBkaWQgbm90IHdvcmshIikKKyAgICAgICAgZGVsIGl0ZW1zMSwgaXRlbXMyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gc2VsZi5DT1VOVCkKKyAgICAgICAgZGVsIG9iamVjdHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkaWN0KSA9PSAoc2VsZi5DT1VOVCAtIDEpLAorICAgICAgICAgICAgICAgICAgICAgImRlbGV0aW5nIG9iamVjdCBkaWQgbm90IGNhdXNlIGRpY3Rpb25hcnkgdXBkYXRlIikKKyAgICAgICAgZGVsIG9iamVjdHMsIG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkaWN0KSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgImRlbGV0aW5nIHRoZSBrZXlzIGRpZCBub3QgY2xlYXIgdGhlIGRpY3Rpb25hcnkiKQorICAgICAgICBvID0gT2JqZWN0KDQyKQorICAgICAgICBkaWN0W29dID0gIldoYXQgaXMgdGhlIG1lYW5pbmcgb2YgdGhlIHVuaXZlcnNlPyIKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDM0LCBkaWN0KQorCisgICAgZGVmIHRlc3Rfd2Vha19rZXllZF9pdGVycyhzZWxmKToKKyAgICAgICAgZGljdCwgb2JqZWN0cyA9IHNlbGYubWFrZV93ZWFrX2tleWVkX2RpY3QoKQorICAgICAgICBzZWxmLmNoZWNrX2l0ZXJzKGRpY3QpCisKKyAgICAgICAgIyBUZXN0IGtleXJlZnMoKQorICAgICAgICByZWZzID0gZGljdC5rZXlyZWZzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVmcyksIGxlbihvYmplY3RzKSkKKyAgICAgICAgb2JqZWN0czIgPSBsaXN0KG9iamVjdHMpCisgICAgICAgIGZvciB3ciBpbiByZWZzOgorICAgICAgICAgICAgb2IgPSB3cigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9iLCBkaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYi5hcmcsIGRpY3Rbb2JdKQorICAgICAgICAgICAgb2JqZWN0czIucmVtb3ZlKG9iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvYmplY3RzMiksIDApCisKKyAgICAgICAgIyBUZXN0IGl0ZXJrZXlyZWZzKCkKKyAgICAgICAgb2JqZWN0czIgPSBsaXN0KG9iamVjdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoZGljdC5pdGVya2V5cmVmcygpKSksIGxlbihvYmplY3RzKSkKKyAgICAgICAgZm9yIHdyIGluIGRpY3QuaXRlcmtleXJlZnMoKToKKyAgICAgICAgICAgIG9iID0gd3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvYiwgZGljdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2IuYXJnLCBkaWN0W29iXSkKKyAgICAgICAgICAgIG9iamVjdHMyLnJlbW92ZShvYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2JqZWN0czIpLCAwKQorCisgICAgZGVmIHRlc3Rfd2Vha192YWx1ZWRfaXRlcnMoc2VsZik6CisgICAgICAgIGRpY3QsIG9iamVjdHMgPSBzZWxmLm1ha2Vfd2Vha192YWx1ZWRfZGljdCgpCisgICAgICAgIHNlbGYuY2hlY2tfaXRlcnMoZGljdCkKKworICAgICAgICAjIFRlc3QgdmFsdWVyZWZzKCkKKyAgICAgICAgcmVmcyA9IGRpY3QudmFsdWVyZWZzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVmcyksIGxlbihvYmplY3RzKSkKKyAgICAgICAgb2JqZWN0czIgPSBsaXN0KG9iamVjdHMpCisgICAgICAgIGZvciB3ciBpbiByZWZzOgorICAgICAgICAgICAgb2IgPSB3cigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iLCBkaWN0W29iLmFyZ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iLmFyZywgZGljdFtvYi5hcmddLmFyZykKKyAgICAgICAgICAgIG9iamVjdHMyLnJlbW92ZShvYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2JqZWN0czIpLCAwKQorCisgICAgICAgICMgVGVzdCBpdGVydmFsdWVyZWZzKCkKKyAgICAgICAgb2JqZWN0czIgPSBsaXN0KG9iamVjdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoZGljdC5pdGVydmFsdWVyZWZzKCkpKSwgbGVuKG9iamVjdHMpKQorICAgICAgICBmb3Igd3IgaW4gZGljdC5pdGVydmFsdWVyZWZzKCk6CisgICAgICAgICAgICBvYiA9IHdyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2IsIGRpY3Rbb2IuYXJnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2IuYXJnLCBkaWN0W29iLmFyZ10uYXJnKQorICAgICAgICAgICAgb2JqZWN0czIucmVtb3ZlKG9iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvYmplY3RzMiksIDApCisKKyAgICBkZWYgY2hlY2tfaXRlcnMoc2VsZiwgZGljdCk6CisgICAgICAgICMgaXRlbSBpdGVyYXRvcjoKKyAgICAgICAgaXRlbXMgPSBkaWN0Lml0ZW1zKCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gZGljdC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGl0ZW1zLnJlbW92ZShpdGVtKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGl0ZW1zKSA9PSAwLCAiaXRlcml0ZW1zKCkgZGlkIG5vdCB0b3VjaCBhbGwgaXRlbXMiKQorCisgICAgICAgICMga2V5IGl0ZXJhdG9yLCB2aWEgX19pdGVyX18oKToKKyAgICAgICAga2V5cyA9IGRpY3Qua2V5cygpCisgICAgICAgIGZvciBrIGluIGRpY3Q6CisgICAgICAgICAgICBrZXlzLnJlbW92ZShrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGtleXMpID09IDAsICJfX2l0ZXJfXygpIGRpZCBub3QgdG91Y2ggYWxsIGtleXMiKQorCisgICAgICAgICMga2V5IGl0ZXJhdG9yLCB2aWEgaXRlcmtleXMoKToKKyAgICAgICAga2V5cyA9IGRpY3Qua2V5cygpCisgICAgICAgIGZvciBrIGluIGRpY3QuaXRlcmtleXMoKToKKyAgICAgICAgICAgIGtleXMucmVtb3ZlKGspCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oa2V5cykgPT0gMCwgIml0ZXJrZXlzKCkgZGlkIG5vdCB0b3VjaCBhbGwga2V5cyIpCisKKyAgICAgICAgIyB2YWx1ZSBpdGVyYXRvcjoKKyAgICAgICAgdmFsdWVzID0gZGljdC52YWx1ZXMoKQorICAgICAgICBmb3IgdiBpbiBkaWN0Lml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgIHZhbHVlcy5yZW1vdmUodikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih2YWx1ZXMpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAiaXRlcnZhbHVlcygpIGRpZCBub3QgdG91Y2ggYWxsIHZhbHVlcyIpCisKKyAgICBkZWYgdGVzdF9tYWtlX3dlYWtfa2V5ZWRfZGljdF9mcm9tX2RpY3Qoc2VsZik6CisgICAgICAgIG8gPSBPYmplY3QoMykKKyAgICAgICAgZGljdCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoe286MzY0fSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpY3Rbb10gPT0gMzY0KQorCisgICAgZGVmIHRlc3RfbWFrZV93ZWFrX2tleWVkX2RpY3RfZnJvbV93ZWFrX2tleWVkX2RpY3Qoc2VsZik6CisgICAgICAgIG8gPSBPYmplY3QoMykKKyAgICAgICAgZGljdCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoe286MzY0fSkKKyAgICAgICAgZGljdDIgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWN0W29dID09IDM2NCkKKworICAgIGRlZiBtYWtlX3dlYWtfa2V5ZWRfZGljdChzZWxmKToKKyAgICAgICAgZGljdCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICBvYmplY3RzID0gbWFwKE9iamVjdCwgcmFuZ2Uoc2VsZi5DT1VOVCkpCisgICAgICAgIGZvciBvIGluIG9iamVjdHM6CisgICAgICAgICAgICBkaWN0W29dID0gby5hcmcKKyAgICAgICAgcmV0dXJuIGRpY3QsIG9iamVjdHMKKworICAgIGRlZiBtYWtlX3dlYWtfdmFsdWVkX2RpY3Qoc2VsZik6CisgICAgICAgIGRpY3QgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkoKQorICAgICAgICBvYmplY3RzID0gbWFwKE9iamVjdCwgcmFuZ2Uoc2VsZi5DT1VOVCkpCisgICAgICAgIGZvciBvIGluIG9iamVjdHM6CisgICAgICAgICAgICBkaWN0W28uYXJnXSA9IG8KKyAgICAgICAgcmV0dXJuIGRpY3QsIG9iamVjdHMKKworICAgIGRlZiBjaGVja19wb3BpdGVtKHNlbGYsIGtsYXNzLCBrZXkxLCB2YWx1ZTEsIGtleTIsIHZhbHVlMik6CisgICAgICAgIHdlYWtkaWN0ID0ga2xhc3MoKQorICAgICAgICB3ZWFrZGljdFtrZXkxXSA9IHZhbHVlMQorICAgICAgICB3ZWFrZGljdFtrZXkyXSA9IHZhbHVlMgorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHdlYWtkaWN0KSA9PSAyKQorICAgICAgICBrLCB2ID0gd2Vha2RpY3QucG9waXRlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4od2Vha2RpY3QpID09IDEpCisgICAgICAgIGlmIGsgaXMga2V5MToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGlzIHZhbHVlMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGlzIHZhbHVlMikKKyAgICAgICAgaywgdiA9IHdlYWtkaWN0LnBvcGl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHdlYWtkaWN0KSA9PSAwKQorICAgICAgICBpZiBrIGlzIGtleTE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB2YWx1ZTEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB2YWx1ZTIpCisKKyAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlZF9kaWN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcG9waXRlbSh3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5MSIsIEMoKSwgImtleTIiLCBDKCkpCisKKyAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2RpY3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wb3BpdGVtKHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDKCksICJ2YWx1ZSAxIiwgQygpLCAidmFsdWUgMiIpCisKKyAgICBkZWYgY2hlY2tfc2V0ZGVmYXVsdChzZWxmLCBrbGFzcywga2V5LCB2YWx1ZTEsIHZhbHVlMik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZTEgaXMgbm90IHZhbHVlMiwKKyAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHRlc3QiCisgICAgICAgICAgICAgICAgICAgICAiIC0tIHZhbHVlIHBhcmFtZXRlcnMgbXVzdCBiZSBkaXN0aW5jdCBvYmplY3RzIikKKyAgICAgICAgd2Vha2RpY3QgPSBrbGFzcygpCisgICAgICAgIG8gPSB3ZWFrZGljdC5zZXRkZWZhdWx0KGtleSwgdmFsdWUxKQorICAgICAgICBzZWxmLmFzc2VydElzKG8sIHZhbHVlMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIHdlYWtkaWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKHdlYWtkaWN0LmdldChrZXkpLCB2YWx1ZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2Vha2RpY3Rba2V5XSwgdmFsdWUxKQorCisgICAgICAgIG8gPSB3ZWFrZGljdC5zZXRkZWZhdWx0KGtleSwgdmFsdWUyKQorICAgICAgICBzZWxmLmFzc2VydElzKG8sIHZhbHVlMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIHdlYWtkaWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKHdlYWtkaWN0LmdldChrZXkpLCB2YWx1ZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2Vha2RpY3Rba2V5XSwgdmFsdWUxKQorCisgICAgZGVmIHRlc3Rfd2Vha192YWx1ZWRfZGljdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3NldGRlZmF1bHQod2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleSIsIEMoKSwgQygpKQorCisgICAgZGVmIHRlc3Rfd2Vha19rZXllZF9kaWN0X3NldGRlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2V0ZGVmYXVsdCh3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQygpLCAidmFsdWUgMSIsICJ2YWx1ZSAyIikKKworICAgIGRlZiBjaGVja191cGRhdGUoc2VsZiwga2xhc3MsIGRpY3QpOgorICAgICAgICAjCisgICAgICAgICMgIFRoaXMgZXhlcmNpc2VzIGQudXBkYXRlKCksIGxlbihkKSwgZC5rZXlzKCksIGluIGQsCisgICAgICAgICMgIGQuZ2V0KCksIGRbXS4KKyAgICAgICAgIworICAgICAgICB3ZWFrZGljdCA9IGtsYXNzKCkKKyAgICAgICAgd2Vha2RpY3QudXBkYXRlKGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdlYWtkaWN0KSwgbGVuKGRpY3QpKQorICAgICAgICBmb3IgayBpbiB3ZWFrZGljdC5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIGRpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIm15c3RlcmlvdXMgbmV3IGtleSBhcHBlYXJlZCBpbiB3ZWFrIGRpY3QiKQorICAgICAgICAgICAgdiA9IGRpY3QuZ2V0KGspCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHYsIHdlYWtkaWN0W2tdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh2LCB3ZWFrZGljdC5nZXQoaykpCisgICAgICAgIGZvciBrIGluIGRpY3Qua2V5cygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCB3ZWFrZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAib3JpZ2luYWwga2V5IGRpc2FwcGVhcmVkIGluIHdlYWsgZGljdCIpCisgICAgICAgICAgICB2ID0gZGljdFtrXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh2LCB3ZWFrZGljdFtrXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModiwgd2Vha2RpY3QuZ2V0KGspKQorCisgICAgZGVmIHRlc3Rfd2Vha192YWx1ZWRfZGljdF91cGRhdGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdXBkYXRlKHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgezE6IEMoKSwgJ2EnOiBDKCksIEMoKTogQygpfSkKKworICAgIGRlZiB0ZXN0X3dlYWtfa2V5ZWRfZGljdF91cGRhdGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdXBkYXRlKHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHtDKCk6IDEsIEMoKTogMiwgQygpOiAzfSkKKworICAgIGRlZiB0ZXN0X3dlYWtfa2V5ZWRfZGVsaXRlbShzZWxmKToKKyAgICAgICAgZCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICBvMSA9IE9iamVjdCgnMScpCisgICAgICAgIG8yID0gT2JqZWN0KCcyJykKKyAgICAgICAgZFtvMV0gPSAnc29tZXRoaW5nJworICAgICAgICBkW28yXSA9ICdzb21ldGhpbmcnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZCkgPT0gMikKKyAgICAgICAgZGVsIGRbbzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZCkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQua2V5cygpID09IFtvMl0pCisKKyAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlZF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBkID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgbzEgPSBPYmplY3QoJzEnKQorICAgICAgICBvMiA9IE9iamVjdCgnMicpCisgICAgICAgIGRbJ3NvbWV0aGluZyddID0gbzEKKyAgICAgICAgZFsnc29tZXRoaW5nIGVsc2UnXSA9IG8yCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZCkgPT0gMikKKyAgICAgICAgZGVsIGRbJ3NvbWV0aGluZyddCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZCkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuaXRlbXMoKSA9PSBbKCdzb21ldGhpbmcgZWxzZScsIG8yKV0pCisKKyAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2JhZF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBkID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCisgICAgICAgIG8gPSBPYmplY3QoJzEnKQorICAgICAgICAjIEFuIGF0dGVtcHQgdG8gZGVsZXRlIGFuIG9iamVjdCB0aGF0IGlzbid0IHRoZXJlIHNob3VsZCByYWlzZQorICAgICAgICAjIEtleUVycm9yLiAgSXQgZGlkbid0IGJlZm9yZSAyLjMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLl9fZGVsaXRlbV9fLCBvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5fX2dldGl0ZW1fXywgbykKKworICAgICAgICAjIElmIGEga2V5IGlzbid0IG9mIGEgd2Vha2x5IHJlZmVyZW5jYWJsZSB0eXBlLCBfX2dldGl0ZW1fXyBhbmQKKyAgICAgICAgIyBfX3NldGl0ZW1fXyByYWlzZSBUeXBlRXJyb3IuICBfX2RlbGl0ZW1fXyBzaG91bGQgdG9vLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuX19kZWxpdGVtX18sICAxMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLl9fZ2V0aXRlbV9fLCAgMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5fX3NldGl0ZW1fXywgIDEzLCAxMykKKworICAgIGRlZiB0ZXN0X3dlYWtfa2V5ZWRfY2FzY2FkaW5nX2RlbGV0ZXMoc2VsZik6CisgICAgICAgICMgU0YgYnVnIDc0Mjg2MC4gIEZvciBzb21lIHJlYXNvbiwgYmVmb3JlIDIuMyBfX2RlbGl0ZW1fXyBpdGVyYXRlZAorICAgICAgICAjIG92ZXIgdGhlIGtleXMgdmlhIHNlbGYuZGF0YS5pdGVya2V5cygpLiAgSWYgdGhpbmdzIHZhbmlzaGVkIGZyb20KKyAgICAgICAgIyB0aGUgZGljdCBkdXJpbmcgdGhpcyAob3IgZ290IGFkZGVkKSwgdGhhdCBjYXVzZWQgYSBSdW50aW1lRXJyb3IuCisKKyAgICAgICAgZCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICBtdXRhdGUgPSBGYWxzZQorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gaQorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYudmFsdWUpCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBtdXRhdGU6CisgICAgICAgICAgICAgICAgICAgICMgU2lkZSBlZmZlY3QgdGhhdCBtdXRhdGVzIHRoZSBkaWN0LCBieSByZW1vdmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBsYXN0IHN0cm9uZyByZWZlcmVuY2UgdG8gYSBrZXkuCisgICAgICAgICAgICAgICAgICAgIGRlbCBvYmpzWy0xXQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisKKyAgICAgICAgb2JqcyA9IFtDKGkpIGZvciBpIGluIHJhbmdlKDQpXQorICAgICAgICBmb3IgbyBpbiBvYmpzOgorICAgICAgICAgICAgZFtvXSA9IG8udmFsdWUKKyAgICAgICAgZGVsIG8gICAjIG5vdyB0aGUgb25seSBzdHJvbmcgcmVmZXJlbmNlcyB0byBrZXlzIGFyZSBpbiBvYmpzCisgICAgICAgICMgRmluZCB0aGUgb3JkZXIgaW4gd2hpY2ggaXRlcmtleXMgc2VlcyB0aGUga2V5cy4KKyAgICAgICAgb2JqcyA9IGQua2V5cygpCisgICAgICAgICMgUmV2ZXJzZSBpdCwgc28gdGhhdCB0aGUgaXRlcmF0aW9uIGltcGxlbWVudGF0aW9uIG9mIF9fZGVsaXRlbV9fCisgICAgICAgICMgaGFzIHRvIGtlZXAgbG9vcGluZyB0byBmaW5kIHRoZSBmaXJzdCBvYmplY3Qgd2UgZGVsZXRlLgorICAgICAgICBvYmpzLnJldmVyc2UoKQorCisgICAgICAgICMgVHVybiBvbiBtdXRhdGlvbiBpbiBDLl9fZXFfXy4gIFRoZSBmaXJzdCB0aW1lIHRocnUgdGhlIGxvb3AsCisgICAgICAgICMgdW5kZXIgdGhlIGl0ZXJrZXlzKCkgYnVzaW5lc3MgdGhlIGZpcnN0IGNvbXBhcmlzb24gd2lsbCBkZWxldGUKKyAgICAgICAgIyB0aGUgbGFzdCBpdGVtIGl0ZXJrZXlzKCkgd291bGQgc2VlLCBhbmQgdGhhdCBjYXVzZXMgYQorICAgICAgICAjICAgICBSdW50aW1lRXJyb3I6IGRpY3Rpb25hcnkgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24KKyAgICAgICAgIyB3aGVuIHRoZSBpdGVya2V5cygpIGxvb3AgZ29lcyBhcm91bmQgdG8gdHJ5IGNvbXBhcmluZyB0aGUgbmV4dAorICAgICAgICAjIGtleS4gIEFmdGVyIHRoaXMgd2FzIGZpeGVkLCBpdCBqdXN0IGRlbGV0ZXMgdGhlIGxhc3Qgb2JqZWN0ICpvdXIqCisgICAgICAgICMgImZvciBvIGluIG9iaiIgbG9vcCB3b3VsZCBoYXZlIGdvdHRlbiB0by4KKyAgICAgICAgbXV0YXRlID0gVHJ1ZQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIG8gaW4gb2JqczoKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgIGRlbCBkW29dCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCAyKQorCitmcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKKworY2xhc3MgV2Vha1ZhbHVlRGljdGlvbmFyeVRlc3RDYXNlKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKyAgICAiIiJDaGVjayB0aGF0IFdlYWtWYWx1ZURpY3Rpb25hcnkgY29uZm9ybXMgdG8gdGhlIG1hcHBpbmcgcHJvdG9jb2wiIiIKKyAgICBfX3JlZiA9IHsia2V5MSI6T2JqZWN0KDEpLCAia2V5MiI6T2JqZWN0KDIpLCAia2V5MyI6T2JqZWN0KDMpfQorICAgIHR5cGUydGVzdCA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeQorICAgIGRlZiBfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3JlZi5jb3B5KCkKKworY2xhc3MgV2Vha0tleURpY3Rpb25hcnlUZXN0Q2FzZShtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgIiIiQ2hlY2sgdGhhdCBXZWFrS2V5RGljdGlvbmFyeSBjb25mb3JtcyB0byB0aGUgbWFwcGluZyBwcm90b2NvbCIiIgorICAgIF9fcmVmID0ge09iamVjdCgia2V5MSIpOjEsIE9iamVjdCgia2V5MiIpOjIsIE9iamVjdCgia2V5MyIpOjN9CisgICAgdHlwZTJ0ZXN0ID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeQorICAgIGRlZiBfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3JlZi5jb3B5KCkKKworbGlicmVmdGVzdCA9ICIiIiBEb2N0ZXN0IGZvciBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2U6IHdlYWtyZWYucnN0CisKKz4+PiBpbXBvcnQgd2Vha3JlZgorPj4+IGNsYXNzIERpY3QoZGljdCk6CisuLi4gICAgIHBhc3MKKy4uLgorPj4+IG9iaiA9IERpY3QocmVkPTEsIGdyZWVuPTIsIGJsdWU9MykgICAjIHRoaXMgb2JqZWN0IGlzIHdlYWsgcmVmZXJlbmNhYmxlCis+Pj4gciA9IHdlYWtyZWYucmVmKG9iaikKKz4+PiBwcmludCByKCkgaXMgb2JqCitUcnVlCisKKz4+PiBpbXBvcnQgd2Vha3JlZgorPj4+IGNsYXNzIE9iamVjdDoKKy4uLiAgICAgcGFzcworLi4uCis+Pj4gbyA9IE9iamVjdCgpCis+Pj4gciA9IHdlYWtyZWYucmVmKG8pCis+Pj4gbzIgPSByKCkKKz4+PiBvIGlzIG8yCitUcnVlCis+Pj4gZGVsIG8sIG8yCis+Pj4gcHJpbnQgcigpCitOb25lCisKKz4+PiBpbXBvcnQgd2Vha3JlZgorPj4+IGNsYXNzIEV4dGVuZGVkUmVmKHdlYWtyZWYucmVmKToKKy4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iLCBjYWxsYmFjaz1Ob25lLCAqKmFubm90YXRpb25zKToKKy4uLiAgICAgICAgIHN1cGVyKEV4dGVuZGVkUmVmLCBzZWxmKS5fX2luaXRfXyhvYiwgY2FsbGJhY2spCisuLi4gICAgICAgICBzZWxmLl9fY291bnRlciA9IDAKKy4uLiAgICAgICAgIGZvciBrLCB2IGluIGFubm90YXRpb25zLml0ZXJpdGVtcygpOgorLi4uICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgdikKKy4uLiAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorLi4uICAgICAgICAgJycnUmV0dXJuIGEgcGFpciBjb250YWluaW5nIHRoZSByZWZlcmVudCBhbmQgdGhlIG51bWJlciBvZgorLi4uICAgICAgICAgdGltZXMgdGhlIHJlZmVyZW5jZSBoYXMgYmVlbiBjYWxsZWQuCisuLi4gICAgICAgICAnJycKKy4uLiAgICAgICAgIG9iID0gc3VwZXIoRXh0ZW5kZWRSZWYsIHNlbGYpLl9fY2FsbF9fKCkKKy4uLiAgICAgICAgIGlmIG9iIGlzIG5vdCBOb25lOgorLi4uICAgICAgICAgICAgIHNlbGYuX19jb3VudGVyICs9IDEKKy4uLiAgICAgICAgICAgICBvYiA9IChvYiwgc2VsZi5fX2NvdW50ZXIpCisuLi4gICAgICAgICByZXR1cm4gb2IKKy4uLgorPj4+IGNsYXNzIEE6ICAgIyBub3QgaW4gZG9jcyBmcm9tIGhlcmUsIGp1c3QgdGVzdGluZyB0aGUgRXh0ZW5kZWRSZWYKKy4uLiAgICAgcGFzcworLi4uCis+Pj4gYSA9IEEoKQorPj4+IHIgPSBFeHRlbmRlZFJlZihhLCBmb289MSwgYmFyPSJiYXoiKQorPj4+IHIuZm9vCisxCis+Pj4gci5iYXIKKydiYXonCis+Pj4gcigpWzFdCisxCis+Pj4gcigpWzFdCisyCis+Pj4gcigpWzBdIGlzIGEKK1RydWUKKworCis+Pj4gaW1wb3J0IHdlYWtyZWYKKz4+PiBfaWQyb2JqX2RpY3QgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkoKQorPj4+IGRlZiByZW1lbWJlcihvYmopOgorLi4uICAgICBvaWQgPSBpZChvYmopCisuLi4gICAgIF9pZDJvYmpfZGljdFtvaWRdID0gb2JqCisuLi4gICAgIHJldHVybiBvaWQKKy4uLgorPj4+IGRlZiBpZDJvYmoob2lkKToKKy4uLiAgICAgcmV0dXJuIF9pZDJvYmpfZGljdFtvaWRdCisuLi4KKz4+PiBhID0gQSgpICAgICAgICAgICAgICMgZnJvbSBoZXJlLCBqdXN0IHRlc3RpbmcKKz4+PiBhX2lkID0gcmVtZW1iZXIoYSkKKz4+PiBpZDJvYmooYV9pZCkgaXMgYQorVHJ1ZQorPj4+IGRlbCBhCis+Pj4gdHJ5OgorLi4uICAgICBpZDJvYmooYV9pZCkKKy4uLiBleGNlcHQgS2V5RXJyb3I6CisuLi4gICAgIHByaW50ICdPSycKKy4uLiBlbHNlOgorLi4uICAgICBwcmludCAnV2Vha1ZhbHVlRGljdGlvbmFyeSBlcnJvcicKK09LCisKKyIiIgorCitfX3Rlc3RfXyA9IHsnbGlicmVmdGVzdCcgOiBsaWJyZWZ0ZXN0fQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgUmVmZXJlbmNlc1Rlc3RDYXNlLAorICAgICAgICBNYXBwaW5nVGVzdENhc2UsCisgICAgICAgIFdlYWtWYWx1ZURpY3Rpb25hcnlUZXN0Q2FzZSwKKyAgICAgICAgV2Vha0tleURpY3Rpb25hcnlUZXN0Q2FzZSwKKyAgICAgICAgU3ViY2xhc3NhYmxlV2Vha3JlZlRlc3RDYXNlLAorICAgICAgICApCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHN5cy5tb2R1bGVzW19fbmFtZV9fXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93ZWFrc2V0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2Vha3NldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWUwOTFlCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2Vha3NldC5weQpAQCAtMCwwICsxLDQ1MCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eSwgcmVmLCBXZWFrU2V0CitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBjb3B5CitpbXBvcnQgc3RyaW5nCitpbXBvcnQgb3MKK2Zyb20gcmFuZG9tIGltcG9ydCByYW5kcmFuZ2UsIHNodWZmbGUKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZ2MKK2ltcG9ydCBjb250ZXh0bGliCisKKworY2xhc3MgRm9vOgorICAgIHBhc3MKKworY2xhc3MgU29tZUNsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHR5cGUob3RoZXIpICE9IHR5cGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIG90aGVyLnZhbHVlID09IHNlbGYudmFsdWUKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgoU29tZUNsYXNzLCBzZWxmLnZhbHVlKSkKKworY2xhc3MgUmVmQ3ljbGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY3ljbGUgPSBzZWxmCisKK2NsYXNzIFRlc3RXZWFrU2V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBuZWVkIHRvIGtlZXAgcmVmZXJlbmNlcyB0byB0aGVtCisgICAgICAgIHNlbGYuaXRlbXMgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluICgnYScsICdiJywgJ2MnKV0KKyAgICAgICAgc2VsZi5pdGVtczIgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluICgneCcsICd5JywgJ3onKV0KKyAgICAgICAgc2VsZi5sZXR0ZXJzID0gW1NvbWVDbGFzcyhjKSBmb3IgYyBpbiBzdHJpbmcuYXNjaWlfbGV0dGVyc10KKyAgICAgICAgc2VsZi5hYl9pdGVtcyA9IFtTb21lQ2xhc3MoYykgZm9yIGMgaW4gJ2FiJ10KKyAgICAgICAgc2VsZi5hYmNkZV9pdGVtcyA9IFtTb21lQ2xhc3MoYykgZm9yIGMgaW4gJ2FiY2RlJ10KKyAgICAgICAgc2VsZi5kZWZfaXRlbXMgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluICdkZWYnXQorICAgICAgICBzZWxmLmFiX3dlYWtzZXQgPSBXZWFrU2V0KHNlbGYuYWJfaXRlbXMpCisgICAgICAgIHNlbGYuYWJjZGVfd2Vha3NldCA9IFdlYWtTZXQoc2VsZi5hYmNkZV9pdGVtcykKKyAgICAgICAgc2VsZi5kZWZfd2Vha3NldCA9IFdlYWtTZXQoc2VsZi5kZWZfaXRlbXMpCisgICAgICAgIHNlbGYucyA9IFdlYWtTZXQoc2VsZi5pdGVtcykKKyAgICAgICAgc2VsZi5kID0gZGljdC5mcm9ta2V5cyhzZWxmLml0ZW1zKQorICAgICAgICBzZWxmLm9iaiA9IFNvbWVDbGFzcygnRicpCisgICAgICAgIHNlbGYuZnMgPSBXZWFrU2V0KFtzZWxmLm9ial0pCisKKyAgICBkZWYgdGVzdF9tZXRob2RzKHNlbGYpOgorICAgICAgICB3ZWFrc2V0bWV0aG9kcyA9IGRpcihXZWFrU2V0KQorICAgICAgICBmb3IgbWV0aG9kIGluIGRpcihzZXQpOgorICAgICAgICAgICAgaWYgbWV0aG9kID09ICd0ZXN0X2NfYXBpJyBvciBtZXRob2Quc3RhcnRzd2l0aCgnXycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1ldGhvZCwgd2Vha3NldG1ldGhvZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIldlYWtTZXQgbWlzc2luZyBtZXRob2QgIiArIG1ldGhvZCkKKworICAgIGRlZiB0ZXN0X25ld19vcl9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFdlYWtTZXQsIFtdLCAyKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnMpLCBsZW4oc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5mcyksIDEpCisgICAgICAgIGRlbCBzZWxmLm9iagorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmZzKSwgMCkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gc2VsZi5zLCBjIGluIHNlbGYuZCkKKyAgICAgICAgIyAxIGlzIG5vdCB3ZWFrcmVmJ2FibGUsIGJ1dCB0aGF0IFR5cGVFcnJvciBpcyBjYXVnaHQgYnkgX19jb250YWluc19fCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYub2JqLCBzZWxmLmZzKQorICAgICAgICBkZWwgc2VsZi5vYmoKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihTb21lQ2xhc3MoJ0YnKSwgc2VsZi5mcykKKworICAgIGRlZiB0ZXN0X3VuaW9uKHNlbGYpOgorICAgICAgICB1ID0gc2VsZi5zLnVuaW9uKHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gdSwgYyBpbiBzZWxmLmQgb3IgYyBpbiBzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIFdlYWtTZXQoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh1KSwgV2Vha1NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMudW5pb24sIFtbXV0pCisgICAgICAgIGZvciBDIGluIHNldCwgZnJvemVuc2V0LCBkaWN0LmZyb21rZXlzLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgIHggPSBXZWFrU2V0KHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMikKKyAgICAgICAgICAgIGMgPSBDKHNlbGYuaXRlbXMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMudW5pb24oYyksIHgpCisgICAgICAgICAgICBkZWwgYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih1KSwgbGVuKHNlbGYuaXRlbXMpICsgbGVuKHNlbGYuaXRlbXMyKSkKKyAgICAgICAgc2VsZi5pdGVtczIucG9wKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHUpLCBsZW4oc2VsZi5pdGVtcykgKyBsZW4oc2VsZi5pdGVtczIpKQorCisgICAgZGVmIHRlc3Rfb3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMudW5pb24oc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIHwgc2V0KHNlbGYuaXRlbXMyKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgfCBmcm96ZW5zZXQoc2VsZi5pdGVtczIpLCBpKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uKHNlbGYpOgorICAgICAgICBzID0gV2Vha1NldChzZWxmLmxldHRlcnMpCisgICAgICAgIGkgPSBzLmludGVyc2VjdGlvbihzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIGksIGMgaW4gc2VsZi5pdGVtczIgYW5kIGMgaW4gc2VsZi5sZXR0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIFdlYWtTZXQoc2VsZi5sZXR0ZXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGkpLCBXZWFrU2V0KQorICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICB4ID0gV2Vha1NldChbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5pbnRlcnNlY3Rpb24oQyhzZWxmLml0ZW1zKSksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGkpLCBsZW4oc2VsZi5pdGVtczIpKQorICAgICAgICBzZWxmLml0ZW1zMi5wb3AoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaSksIGxlbihzZWxmLml0ZW1zMikpCisKKyAgICBkZWYgdGVzdF9pc2Rpc2pvaW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zLmlzZGlzam9pbnQoV2Vha1NldChzZWxmLml0ZW1zMikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYucy5pc2Rpc2pvaW50KFdlYWtTZXQoc2VsZi5sZXR0ZXJzKSkpCisKKyAgICBkZWYgdGVzdF9hbmQoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuaW50ZXJzZWN0aW9uKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyAmIHNldChzZWxmLml0ZW1zMiksIGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zICYgZnJvemVuc2V0KHNlbGYuaXRlbXMyKSwgaSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuZGlmZmVyZW5jZShzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIGksIGMgaW4gc2VsZi5kIGFuZCBjIG5vdCBpbiBzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIFdlYWtTZXQoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpKSwgV2Vha1NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlmZmVyZW5jZSwgW1tdXSkKKworICAgIGRlZiB0ZXN0X3N1YihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5kaWZmZXJlbmNlKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyAtIHNldChzZWxmLml0ZW1zMiksIGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIC0gZnJvemVuc2V0KHNlbGYuaXRlbXMyKSwgaSkKKworICAgIGRlZiB0ZXN0X3N5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gaSwgKGMgaW4gc2VsZi5kKSBeIChjIGluIHNlbGYuaXRlbXMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIFdlYWtTZXQoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpKSwgV2Vha1NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2UsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGkpLCBsZW4oc2VsZi5pdGVtcykgKyBsZW4oc2VsZi5pdGVtczIpKQorICAgICAgICBzZWxmLml0ZW1zMi5wb3AoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaSksIGxlbihzZWxmLml0ZW1zKSArIGxlbihzZWxmLml0ZW1zMikpCisKKyAgICBkZWYgdGVzdF94b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIF4gc2V0KHNlbGYuaXRlbXMyKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgXiBmcm96ZW5zZXQoc2VsZi5pdGVtczIpLCBpKQorCisgICAgZGVmIHRlc3Rfc3ViX2FuZF9zdXBlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYWJfd2Vha3NldCA8PSBzZWxmLmFiY2RlX3dlYWtzZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmFiY2RlX3dlYWtzZXQgPD0gc2VsZi5hYmNkZV93ZWFrc2V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5hYmNkZV93ZWFrc2V0ID49IHNlbGYuYWJfd2Vha3NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmFiY2RlX3dlYWtzZXQgPD0gc2VsZi5kZWZfd2Vha3NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmFiY2RlX3dlYWtzZXQgPj0gc2VsZi5kZWZfd2Vha3NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldCgnYScpLmlzc3Vic2V0KCdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldCgnYWJjJykuaXNzdXBlcnNldCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNldCgnYScpLmlzc3Vic2V0KCdjYnMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXQoJ2NicycpLmlzc3VwZXJzZXQoJ2EnKSkKKworICAgIGRlZiB0ZXN0X2x0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5hYl93ZWFrc2V0IDwgc2VsZi5hYmNkZV93ZWFrc2V0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuYWJjZGVfd2Vha3NldCA8IHNlbGYuZGVmX3dlYWtzZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5hYl93ZWFrc2V0IDwgc2VsZi5hYl93ZWFrc2V0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFdlYWtTZXQoKSA8IFdlYWtTZXQoKSkKKworICAgIGRlZiB0ZXN0X2d0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5hYmNkZV93ZWFrc2V0ID4gc2VsZi5hYl93ZWFrc2V0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuYWJjZGVfd2Vha3NldCA+IHNlbGYuZGVmX3dlYWtzZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5hYl93ZWFrc2V0ID4gc2VsZi5hYl93ZWFrc2V0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFdlYWtTZXQoKSA+IFdlYWtTZXQoKSkKKworICAgIGRlZiB0ZXN0X2djKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIG5lc3Qgb2YgY3ljbGVzIHRvIGV4ZXJjaXNlIG92ZXJhbGwgcmVmIGNvdW50IGNoZWNrCisgICAgICAgIHMgPSBXZWFrU2V0KEZvbygpIGZvciBpIGluIHJhbmdlKDEwMDApKQorICAgICAgICBmb3IgZWxlbSBpbiBzOgorICAgICAgICAgICAgZWxlbS5jeWNsZSA9IHMKKyAgICAgICAgICAgIGVsZW0uc3ViID0gZWxlbQorICAgICAgICAgICAgZWxlbS5zZXQgPSBXZWFrU2V0KFtlbGVtXSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3dpdGhfY3VzdG9tX2hhc2goc2VsZik6CisgICAgICAgICMgQnVnICMxMjU3NzMxCisgICAgICAgIGNsYXNzIEgoV2Vha1NldCk6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChpZChzZWxmKSAmIDB4N2ZmZmZmZmYpCisgICAgICAgIHM9SCgpCisgICAgICAgIGY9c2V0KCkKKyAgICAgICAgZi5hZGQocykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzLCBmKQorICAgICAgICBmLnJlbW92ZShzKQorICAgICAgICBmLmFkZChzKQorICAgICAgICBmLmRpc2NhcmQocykKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHMgPSBXZWFrU2V0KCkKKyAgICAgICAgcy5fX2luaXRfXyhzZWxmLml0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNlbGYucykKKyAgICAgICAgcy5fX2luaXRfXyhzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBXZWFrU2V0KHNlbGYuaXRlbXMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzLl9faW5pdF9fLCBzLCAyKTsKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzLl9faW5pdF9fLCAxKTsKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2lkZW50aXR5KHNlbGYpOgorICAgICAgICBzID0gV2Vha1NldChzZWxmLml0ZW1zKQorICAgICAgICB0ID0gV2Vha1NldChzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMpLCBpZCh0KSkKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYucy5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBXZWFrU2V0KFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zKSwgMCkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIGR1cCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzZWxmLnMpLCBpZChkdXApKQorCisgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICB4ID0gU29tZUNsYXNzKCdRJykKKyAgICAgICAgc2VsZi5zLmFkZCh4KQorICAgICAgICBzZWxmLmFzc2VydEluKHgsIHNlbGYucykKKyAgICAgICAgZHVwID0gc2VsZi5zLmNvcHkoKQorICAgICAgICBzZWxmLnMuYWRkKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBkdXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmFkZCwgW10pCisgICAgICAgIHNlbGYuZnMuYWRkKEZvbygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYuZnMpID09IDEpCisgICAgICAgIHNlbGYuZnMuYWRkKHNlbGYub2JqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYuZnMpID09IDEpCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgIHggPSBTb21lQ2xhc3MoJ2EnKQorICAgICAgICBzZWxmLnMucmVtb3ZlKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oeCwgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5zLnJlbW92ZSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMucmVtb3ZlLCBbXSkKKworICAgIGRlZiB0ZXN0X2Rpc2NhcmQoc2VsZik6CisgICAgICAgIGEsIHEgPSBTb21lQ2xhc3MoJ2EnKSwgU29tZUNsYXNzKCdRJykKKyAgICAgICAgc2VsZi5zLmRpc2NhcmQoYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihhLCBzZWxmLnMpCisgICAgICAgIHNlbGYucy5kaXNjYXJkKHEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmRpc2NhcmQsIFtdKQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5zKSk6CisgICAgICAgICAgICBlbGVtID0gc2VsZi5zLnBvcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYucy5wb3ApCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIHJldHZhbCA9IHNlbGYucy51cGRhdGUoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy51cGRhdGUsIFtbXV0pCisKKyAgICBkZWYgdGVzdF91cGRhdGVfc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnMudXBkYXRlKHNldChzZWxmLml0ZW1zMikpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9pb3Ioc2VsZik6CisgICAgICAgIHNlbGYucyB8PSBzZXQoc2VsZi5pdGVtczIpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fdXBkYXRlKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBzZWxmLnMuaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLml0ZW1zMiBhbmQgYyBpbiBzZWxmLml0ZW1zOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuaW50ZXJzZWN0aW9uX3VwZGF0ZSwgW1tdXSkKKworICAgIGRlZiB0ZXN0X2lhbmQoc2VsZik6CisgICAgICAgIHNlbGYucyAmPSBzZXQoc2VsZi5pdGVtczIpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLml0ZW1zMiBhbmQgYyBpbiBzZWxmLml0ZW1zOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5pdGVtcyBhbmQgYyBub3QgaW4gc2VsZi5pdGVtczI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5kaWZmZXJlbmNlX3VwZGF0ZSwgW1tdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLCBbW11dKQorCisgICAgZGVmIHRlc3RfaXN1YihzZWxmKToKKyAgICAgICAgc2VsZi5zIC09IHNldChzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICBpZiBjIGluIHNlbGYuaXRlbXMgYW5kIGMgbm90IGluIHNlbGYuaXRlbXMyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dmFsID0gc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgaWYgKGMgaW4gc2VsZi5pdGVtcykgXiAoYyBpbiBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCisKKyAgICBkZWYgdGVzdF9peG9yKHNlbGYpOgorICAgICAgICBzZWxmLnMgXj0gc2V0KHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIChjIGluIHNlbGYuaXRlbXMpIF4gKGMgaW4gc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X2lucGxhY2Vfb25fc2VsZihzZWxmKToKKyAgICAgICAgdCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgdCB8PSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc2VsZi5zKQorICAgICAgICB0ICY9IHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBzZWxmLnMpCisgICAgICAgIHQgLT0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIFdlYWtTZXQoKSkKKyAgICAgICAgdCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgdCBePSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgV2Vha1NldCgpKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgICMgaXNzdWUgNTk2NAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zID09IHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucyA9PSBXZWFrU2V0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucyA9PSBzZXQoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zID09IGxpc3Qoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zID09IHR1cGxlKHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucyA9PSAxKQorCisgICAgZGVmIHRlc3Rfd2Vha19kZXN0cm95X3doaWxlX2l0ZXJhdGluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzEwNTogaXRlcmF0b3JzIHNob3VsZG4ndCBjcmFzaCB3aGVuIGEga2V5IGlzIGltcGxpY2l0bHkgcmVtb3ZlZAorICAgICAgICAjIENyZWF0ZSBuZXcgaXRlbXMgdG8gYmUgc3VyZSBuby1vbmUgZWxzZSBob2xkcyBhIHJlZmVyZW5jZQorICAgICAgICBpdGVtcyA9IFtTb21lQ2xhc3MoYykgZm9yIGMgaW4gKCdhJywgJ2InLCAnYycpXQorICAgICAgICBzID0gV2Vha1NldChpdGVtcykKKyAgICAgICAgaXQgPSBpdGVyKHMpCisgICAgICAgIG5leHQoaXQpICAgICAgICAgICAgICMgVHJpZ2dlciBpbnRlcm5hbCBpdGVyYXRpb24KKyAgICAgICAgIyBEZXN0cm95IGFuIGl0ZW0KKyAgICAgICAgZGVsIGl0ZW1zWy0xXQorICAgICAgICBnYy5jb2xsZWN0KCkgICAgIyBqdXN0IGluIGNhc2UKKyAgICAgICAgIyBXZSBoYXZlIHJlbW92ZWQgZWl0aGVyIHRoZSBmaXJzdCBjb25zdW1lZCBpdGVtcywgb3IgYW5vdGhlciBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihsZW4obGlzdChpdCkpLCBbbGVuKGl0ZW1zKSwgbGVuKGl0ZW1zKSAtIDFdKQorICAgICAgICBkZWwgaXQKKyAgICAgICAgIyBUaGUgcmVtb3ZhbCBoYXMgYmVlbiBjb21taXR0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIGxlbihpdGVtcykpCisKKyAgICBkZWYgdGVzdF93ZWFrX2Rlc3Ryb3lfYW5kX211dGF0ZV93aGlsZV9pdGVyYXRpbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzcxMDU6IGl0ZXJhdG9ycyBzaG91bGRuJ3QgY3Jhc2ggd2hlbiBhIGtleSBpcyBpbXBsaWNpdGx5IHJlbW92ZWQKKyAgICAgICAgaXRlbXMgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluIHN0cmluZy5hc2NpaV9sZXR0ZXJzXQorICAgICAgICBzID0gV2Vha1NldChpdGVtcykKKyAgICAgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIHRlc3Rjb250ZXh0KCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXQgPSBpdGVyKHMpCisgICAgICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgICAgICAjIFNjaGVkdWxlIGFuIGl0ZW0gZm9yIHJlbW92YWwgYW5kIHJlY3JlYXRlIGl0CisgICAgICAgICAgICAgICAgdSA9IFNvbWVDbGFzcyhzdHIoaXRlbXMucG9wKCkpKQorICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKSAgICAgICMganVzdCBpbiBjYXNlCisgICAgICAgICAgICAgICAgeWllbGQgdQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpdCA9IE5vbmUgICAgICAgICAgICMgc2hvdWxkIGNvbW1pdCBhbGwgcmVtb3ZhbHMKKworICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCkgYXMgdToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSwgcykKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5yZW1vdmUsIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSwgcykKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CisgICAgICAgICAgICBzLmFkZCh1KQorICAgICAgICBzZWxmLmFzc2VydEluKHUsIHMpCisgICAgICAgIHQgPSBzLmNvcHkoKQorICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCkgYXMgdToKKyAgICAgICAgICAgIHMudXBkYXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBsZW4odCkpCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKSBhcyB1OgorICAgICAgICAgICAgcy5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCAwKQorCisgICAgZGVmIHRlc3RfbGVuX2N5Y2xlcyhzZWxmKToKKyAgICAgICAgTiA9IDIwCisgICAgICAgIGl0ZW1zID0gW1JlZkN5Y2xlKCkgZm9yIGkgaW4gcmFuZ2UoTildCisgICAgICAgIHMgPSBXZWFrU2V0KGl0ZW1zKQorICAgICAgICBkZWwgaXRlbXMKKyAgICAgICAgaXQgPSBpdGVyKHMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgbjEgPSBsZW4ocykKKyAgICAgICAgZGVsIGl0CisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBuMiA9IGxlbihzKQorICAgICAgICAjIG9uZSBpdGVtIG1heSBiZSBrZXB0IGFsaXZlIGluc2lkZSB0aGUgaXRlcmF0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRJbihuMSwgKDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4yLCAwKQorCisgICAgZGVmIHRlc3RfbGVuX3JhY2Uoc2VsZik6CisgICAgICAgICMgRXh0ZW5kZWQgc2FuaXR5IGNoZWNrcyBmb3IgbGVuKCkgaW4gdGhlIGZhY2Ugb2YgY3ljbGljIGNvbGxlY3Rpb24KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGdjLnNldF90aHJlc2hvbGQsICpnYy5nZXRfdGhyZXNob2xkKCkpCisgICAgICAgIGZvciB0aCBpbiByYW5nZSgxLCAxMDApOgorICAgICAgICAgICAgTiA9IDIwCisgICAgICAgICAgICBnYy5jb2xsZWN0KDApCisgICAgICAgICAgICBnYy5zZXRfdGhyZXNob2xkKHRoLCB0aCwgdGgpCisgICAgICAgICAgICBpdGVtcyA9IFtSZWZDeWNsZSgpIGZvciBpIGluIHJhbmdlKE4pXQorICAgICAgICAgICAgcyA9IFdlYWtTZXQoaXRlbXMpCisgICAgICAgICAgICBkZWwgaXRlbXMKKyAgICAgICAgICAgICMgQWxsIGl0ZW1zIHdpbGwgYmUgY29sbGVjdGVkIGF0IG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhc3MKKyAgICAgICAgICAgIGl0ID0gaXRlcihzKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBuMSA9IGxlbihzKQorICAgICAgICAgICAgZGVsIGl0CisgICAgICAgICAgICBuMiA9IGxlbihzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobjEsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChuMSwgTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG4yLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobjIsIG4xKQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RXZWFrU2V0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93aGljaGRiLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2hpY2hkYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjdlMzIzCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2hpY2hkYi5weQpAQCAtMCwwICsxLDY4IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJUZXN0IHNjcmlwdCBmb3IgdGhlIHdoaWNoZGIgbW9kdWxlCisgICBiYXNlZCBvbiB0ZXN0X2FueWRibS5weQorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3aGljaGRiCitpbXBvcnQgZ2xvYgorCitfZm5hbWUgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5URVNURk4KKworIyBTaWxlbmNlIFB5M2sgd2FybmluZworYW55ZGJtID0gdGVzdC50ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnYW55ZGJtJywgZGVwcmVjYXRlZD1UcnVlKQorCitkZWYgX2RlbGV0ZV9maWxlcygpOgorICAgICMgd2UgZG9uJ3Qga25vdyB0aGUgcHJlY2lzZSBuYW1lIHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlIHVzZXMKKyAgICAjIHNvIHdlIHVzZSBnbG9iIHRvIGxvY2F0ZSBhbGwgbmFtZXMKKyAgICBmb3IgZiBpbiBnbG9iLmdsb2IoX2ZuYW1lICsgIioiKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKGYpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworCitjbGFzcyBXaGljaERCVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgQWN0dWFsIHRlc3QgbWV0aG9kcyBhcmUgYWRkZWQgdG8gbmFtZXNwYWNlCisgICAgIyBhZnRlciBjbGFzcyBkZWZpbml0aW9uLgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBfZGVsZXRlX2ZpbGVzKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgX2RlbGV0ZV9maWxlcygpCisKK2ZvciBuYW1lIGluIGFueWRibS5fbmFtZXM6CisgICAgIyB3ZSBkZWZpbmUgYSBuZXcgdGVzdCBtZXRob2QgZm9yIGVhY2gKKyAgICAjIGNhbmRpZGF0ZSBkYXRhYmFzZSBtb2R1bGUuCisgICAgdHJ5OgorICAgICAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgIG1vZCA9IHRlc3QudGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUobmFtZSwgZGVwcmVjYXRlZD1UcnVlKQorICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdDoKKyAgICAgICAgY29udGludWUKKworICAgIGRlZiB0ZXN0X3doaWNoZGJfbmFtZShzZWxmLCBuYW1lPW5hbWUsIG1vZD1tb2QpOgorICAgICAgICAjIENoZWNrIHdoZXRoZXIgd2hpY2hkYiBjb3JyZWN0bHkgZ3Vlc3NlcyBtb2R1bGUgbmFtZQorICAgICAgICAjIGZvciBkYXRhYmFzZXMgb3BlbmVkIHdpdGggbW9kdWxlIG1vZC4KKyAgICAgICAgIyBUcnkgd2l0aCBlbXB0eSBmaWxlcyBmaXJzdAorICAgICAgICBmID0gbW9kLm9wZW4oX2ZuYW1lLCAnYycpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIHdoaWNoZGIud2hpY2hkYihfZm5hbWUpKQorICAgICAgICAjIE5vdyBhZGQgYSBrZXkKKyAgICAgICAgZiA9IG1vZC5vcGVuKF9mbmFtZSwgJ3cnKQorICAgICAgICBmWyIxIl0gPSAiMSIKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgd2hpY2hkYi53aGljaGRiKF9mbmFtZSkpCisgICAgc2V0YXR0cihXaGljaERCVGVzdENhc2UsInRlc3Rfd2hpY2hkYl8lcyIgJSBuYW1lLCB0ZXN0X3doaWNoZGJfbmFtZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRyeToKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFdoaWNoREJUZXN0Q2FzZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBfZGVsZXRlX2ZpbGVzKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNWQwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkKQEAgLTAsMCArMSw0NTkgQEAKKyMgVGVzdCB0aGUgd2luZG93cyBzcGVjaWZpYyB3aW4zMnJlZyBtb2R1bGUuCisjIE9ubHkgd2luMzJyZWcgZnVuY3Rpb25zIG5vdCBoaXQgaGVyZTogRmx1c2hLZXksIExvYWRLZXkgYW5kIFNhdmVLZXkKKworaW1wb3J0IG9zLCBzeXMsIGVycm5vCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgidGhyZWFkaW5nIikKK2Zyb20gcGxhdGZvcm0gaW1wb3J0IG1hY2hpbmUKKworIyBEbyB0aGlzIGZpcnN0IHNvIHRlc3Qgd2lsbCBiZSBza2lwcGVkIGlmIG1vZHVsZSBkb2Vzbid0IGV4aXN0Cit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3dpbnJlZycpCisjIE5vdyBpbXBvcnQgZXZlcnl0aGluZworZnJvbSBfd2lucmVnIGltcG9ydCAqCisKK3RyeToKKyAgICBSRU1PVEVfTkFNRSA9IHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCItLXJlbW90ZSIpKzFdCitleGNlcHQgKEluZGV4RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgIFJFTU9URV9OQU1FID0gTm9uZQorCisjIHR1cGxlIG9mIChtYWpvciwgbWlub3IpCitXSU5fVkVSID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKClbOjJdCisjIFNvbWUgdGVzdHMgc2hvdWxkIG9ubHkgcnVuIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIHdoZXJlIFdPVzY0IHdpbGwgYmUuCitXSU42NF9NQUNISU5FID0gVHJ1ZSBpZiBtYWNoaW5lKCkgPT0gIkFNRDY0IiBlbHNlIEZhbHNlCisKKyMgU3RhcnRpbmcgd2l0aCBXaW5kb3dzIDcgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDggUjIsIFdPVzY0IG5vIGxvbmdlciB1c2VzCisjIHJlZ2lzdHJ5IHJlZmxlY3Rpb24gYW5kIGZvcm1lcmx5IHJlZmxlY3RlZCBrZXlzIGFyZSBzaGFyZWQgaW5zdGVhZC4KKyMgV2luZG93cyA3IGFuZCBXaW5kb3dzIFNlcnZlciAyMDA4IFIyIGFyZSB2ZXJzaW9uIDYuMS4gRHVlIHRvIHRoaXMsIHNvbWUKKyMgdGVzdHMgYXJlIG9ubHkgdmFsaWQgdXAgdW50aWwgNi4xCitIQVNfUkVGTEVDVElPTiA9IFRydWUgaWYgV0lOX1ZFUiA8ICg2LCAxKSBlbHNlIEZhbHNlCisKKyMgVXNlIGEgcGVyLXByb2Nlc3Mga2V5IHRvIHByZXZlbnQgY29uY3VycmVudCB0ZXN0IHJ1bnMgKGJ1aWxkYm90ISkgZnJvbQorIyBzdG9tcGluZyBvbiBlYWNoIG90aGVyLgordGVzdF9rZXlfYmFzZSA9ICJQeXRob24gVGVzdCBLZXkgWyVkXSAtIERlbGV0ZSBNZSIgJSAob3MuZ2V0cGlkKCksKQordGVzdF9rZXlfbmFtZSA9ICJTT0ZUV0FSRVxcIiArIHRlc3Rfa2V5X2Jhc2UKKyMgT24gT1MnZXMgdGhhdCBzdXBwb3J0IHJlZmxlY3Rpb24gd2Ugc2hvdWxkIHRlc3Qgd2l0aCBhIHJlZmxlY3RlZCBrZXkKK3Rlc3RfcmVmbGVjdF9rZXlfbmFtZSA9ICJTT0ZUV0FSRVxcQ2xhc3Nlc1xcIiArIHRlc3Rfa2V5X2Jhc2UKKwordGVzdF9kYXRhID0gWworICAgICgiSW50IFZhbHVlIiwgICAgIDQ1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX0RXT1JEKSwKKyAgICAoIlN0cmluZyBWYWwiLCAgICAiQSBzdHJpbmcgdmFsdWUiLCAgICAgICAgICAgICAgICAgICAgICAgIFJFR19TWiksCisgICAgKCJTdHJpbmdFeHBhbmQiLCAgIlRoZSBwYXRoIGlzICVwYXRoJSIsICAgICAgICAgICAgICAgICAgICBSRUdfRVhQQU5EX1NaKSwKKyAgICAoIk11bHRpLXN0cmluZyIsICBbIkxvdHMiLCAib2YiLCAic3RyaW5nIiwgInZhbHVlcyJdLCAgICAgIFJFR19NVUxUSV9TWiksCisgICAgKCJSYXcgRGF0YSIsICAgICAgKCJiaW5hcnkiK2NocigwKSsiZGF0YSIpLCAgICAgICAgICAgICAgICBSRUdfQklOQVJZKSwKKyAgICAoIkJpZyBTdHJpbmciLCAgICAieCIqKDIqKjE0LTEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19TWiksCisgICAgKCJCaWcgQmluYXJ5IiwgICAgIngiKigyKioxNCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfQklOQVJZKSwKK10KKworaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICB0ZXN0X2RhdGEgKz0gWworICAgICAgICAodW5pY29kZSgiVW5pY29kZSBWYWwiKSwgIHVuaWNvZGUoIkEgVW5pY29kZSB2YWx1ZSIpLCBSRUdfU1osKSwKKyAgICAgICAgKCJVbmljb2RlRXhwYW5kIiwgdW5pY29kZSgiVGhlIHBhdGggaXMgJXBhdGglIiksIFJFR19FWFBBTkRfU1opLAorICAgICAgICAoIk11bHRpLXVuaWNvZGUiLCBbdW5pY29kZSgiTG90cyIpLCB1bmljb2RlKCJvZiIpLCB1bmljb2RlKCJ1bmljb2RlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlKCJ2YWx1ZXMiKV0sIFJFR19NVUxUSV9TWiksCisgICAgICAgICgiTXVsdGktbWl4ZWQiLCAgIFt1bmljb2RlKCJVbmljb2RlIiksIHVuaWNvZGUoImFuZCIpLCAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZXMiXSwgUkVHX01VTFRJX1NaKSwKKyAgICBdCisKK2NsYXNzIEJhc2VXaW5yZWdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHRlc3Qga2V5IGlzIGFic2VudCB3aGVuIHRoZSB0ZXN0CisgICAgICAgICMgc3RhcnRzLgorICAgICAgICBzZWxmLmRlbGV0ZV90cmVlKEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCisgICAgZGVmIGRlbGV0ZV90cmVlKHNlbGYsIHJvb3QsIHN1YmtleSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhrZXkgPSBPcGVuS2V5KHJvb3QsIHN1YmtleSwgS0VZX0FMTF9BQ0NFU1MpCisgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAjIHN1YmtleSBkb2VzIG5vdCBleGlzdAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Vic3Via2V5ID0gRW51bUtleShoa2V5LCAwKQorICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIG5vIG1vcmUgc3Via2V5cworICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLmRlbGV0ZV90cmVlKGhrZXksIHN1YnN1YmtleSkKKyAgICAgICAgQ2xvc2VLZXkoaGtleSkKKyAgICAgICAgRGVsZXRlS2V5KHJvb3QsIHN1YmtleSkKKworICAgIGRlZiBfd3JpdGVfdGVzdF9kYXRhKHNlbGYsIHJvb3Rfa2V5LCBDcmVhdGVLZXk9Q3JlYXRlS2V5KToKKyAgICAgICAgIyBTZXQgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMga2V5LgorICAgICAgICBTZXRWYWx1ZShyb290X2tleSwgdGVzdF9rZXlfbmFtZSwgUkVHX1NaLCAiRGVmYXVsdCB2YWx1ZSIpCisgICAgICAgIGtleSA9IENyZWF0ZUtleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgIyBDcmVhdGUgYSBzdWIta2V5CisgICAgICAgIHN1Yl9rZXkgPSBDcmVhdGVLZXkoa2V5LCAic3ViX2tleSIpCisgICAgICAgICMgR2l2ZSB0aGUgc3ViLWtleSBzb21lIG5hbWVkIHZhbHVlcworCisgICAgICAgIGZvciB2YWx1ZV9uYW1lLCB2YWx1ZV9kYXRhLCB2YWx1ZV90eXBlIGluIHRlc3RfZGF0YToKKyAgICAgICAgICAgIFNldFZhbHVlRXgoc3ViX2tleSwgdmFsdWVfbmFtZSwgMCwgdmFsdWVfdHlwZSwgdmFsdWVfZGF0YSkKKworICAgICAgICAjIENoZWNrIHdlIHdyb3RlIGFzIG1hbnkgaXRlbXMgYXMgd2UgdGhvdWdodC4KKyAgICAgICAgbmtleXMsIG52YWx1ZXMsIHNpbmNlX21vZCA9IFF1ZXJ5SW5mb0tleShrZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmtleXMsIDEsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHN1YiBrZXlzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudmFsdWVzLCAxLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiB2YWx1ZXMiKQorICAgICAgICBua2V5cywgbnZhbHVlcywgc2luY2VfbW9kID0gUXVlcnlJbmZvS2V5KHN1Yl9rZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmtleXMsIDAsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHN1YiBrZXlzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudmFsdWVzLCBsZW4odGVzdF9kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdCB0aGUgY29ycmVjdCBudW1iZXIgb2YgdmFsdWVzIikKKyAgICAgICAgIyBDbG9zZSB0aGlzIGtleSB0aGlzIHdheS4uLgorICAgICAgICAjIChidXQgYmVmb3JlIHdlIGRvLCBjb3B5IHRoZSBrZXkgYXMgYW4gaW50ZWdlciAtIHRoaXMgYWxsb3dzCisgICAgICAgICMgdXMgdG8gdGVzdCB0aGF0IHRoZSBrZXkgcmVhbGx5IGdldHMgY2xvc2VkKS4KKyAgICAgICAgaW50X3N1Yl9rZXkgPSBpbnQoc3ViX2tleSkKKyAgICAgICAgQ2xvc2VLZXkoc3ViX2tleSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgUXVlcnlJbmZvS2V5KGludF9zdWJfa2V5KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJJdCBhcHBlYXJzIHRoZSBDbG9zZUtleSgpIGZ1bmN0aW9uIGRvZXMgIgorICAgICAgICAgICAgICAgICAgICAgICJub3QgY2xvc2UgdGhlIGFjdHVhbCBrZXkhIikKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgLi4uIGFuZCBjbG9zZSB0aGF0IGtleSB0aGF0IHdheSA6LSkKKyAgICAgICAgaW50X2tleSA9IGludChrZXkpCisgICAgICAgIGtleS5DbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFF1ZXJ5SW5mb0tleShpbnRfa2V5KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJJdCBhcHBlYXJzIHRoZSBrZXkuQ2xvc2UoKSBmdW5jdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IGNsb3NlIHRoZSBhY3R1YWwga2V5ISIpCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF9yZWFkX3Rlc3RfZGF0YShzZWxmLCByb290X2tleSwgT3BlbktleT1PcGVuS2V5KToKKyAgICAgICAgIyBDaGVjayB3ZSBjYW4gZ2V0IGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMga2V5LgorICAgICAgICB2YWwgPSBRdWVyeVZhbHVlKHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgIkRlZmF1bHQgdmFsdWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdpc3RyeSBkaWRuJ3QgZ2l2ZSBiYWNrIHRoZSBjb3JyZWN0IHZhbHVlIikKKworICAgICAgICBrZXkgPSBPcGVuS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQorICAgICAgICAjIFJlYWQgdGhlIHN1Yi1rZXlzCisgICAgICAgIHdpdGggT3BlbktleShrZXksICJzdWJfa2V5IikgYXMgc3ViX2tleToKKyAgICAgICAgICAgICMgQ2hlY2sgSSBjYW4gZW51bWVyYXRlIG92ZXIgdGhlIHZhbHVlcy4KKyAgICAgICAgICAgIGluZGV4ID0gMAorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBFbnVtVmFsdWUoc3ViX2tleSwgaW5kZXgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihkYXRhLCB0ZXN0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHJlYWQgYmFjayB0aGUgY29ycmVjdCB0ZXN0IGRhdGEiKQorICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4LCBsZW4odGVzdF9kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRpZG4ndCByZWFkIHRoZSBjb3JyZWN0IG51bWJlciBvZiBpdGVtcyIpCisgICAgICAgICAgICAjIENoZWNrIEkgY2FuIGRpcmVjdGx5IGFjY2VzcyBlYWNoIGl0ZW0KKyAgICAgICAgICAgIGZvciB2YWx1ZV9uYW1lLCB2YWx1ZV9kYXRhLCB2YWx1ZV90eXBlIGluIHRlc3RfZGF0YToKKyAgICAgICAgICAgICAgICByZWFkX3ZhbCwgcmVhZF90eXAgPSBRdWVyeVZhbHVlRXgoc3ViX2tleSwgdmFsdWVfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfdmFsLCB2YWx1ZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBkaXJlY3RseSByZWFkIHRoZSB2YWx1ZSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3R5cCwgdmFsdWVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZGlyZWN0bHkgcmVhZCB0aGUgdmFsdWUiKQorICAgICAgICBzdWJfa2V5LkNsb3NlKCkKKyAgICAgICAgIyBFbnVtZXJhdGUgb3VyIG1haW4ga2V5LgorICAgICAgICByZWFkX3ZhbCA9IEVudW1LZXkoa2V5LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfdmFsLCAic3ViX2tleSIsICJSZWFkIHN1YmtleSB2YWx1ZSB3cm9uZyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEVudW1LZXkoa2V5LCAxKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJXYXMgYWJsZSB0byBnZXQgYSBzZWNvbmQga2V5IHdoZW4gSSBvbmx5IGhhdmUgb25lISIpCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGtleS5DbG9zZSgpCisKKyAgICBkZWYgX2RlbGV0ZV90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXkpOgorICAgICAgICBrZXkgPSBPcGVuS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lLCAwLCBLRVlfQUxMX0FDQ0VTUykKKyAgICAgICAgc3ViX2tleSA9IE9wZW5LZXkoa2V5LCAic3ViX2tleSIsIDAsIEtFWV9BTExfQUNDRVNTKQorICAgICAgICAjIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZGVsZXRlIHRoZSB2YWx1ZXMgYmVmb3JlIGRlbGV0aW5nCisgICAgICAgICMgdGhlIGtleSAoYWx0aG91Z2ggc3Via2V5cyBtdXN0IG5vdCBleGlzdCkuICBXZSBkZWxldGUgdGhlbQorICAgICAgICAjIG1hbnVhbGx5IGp1c3QgdG8gcHJvdmUgd2UgY2FuIDotKQorICAgICAgICBmb3IgdmFsdWVfbmFtZSwgdmFsdWVfZGF0YSwgdmFsdWVfdHlwZSBpbiB0ZXN0X2RhdGE6CisgICAgICAgICAgICBEZWxldGVWYWx1ZShzdWJfa2V5LCB2YWx1ZV9uYW1lKQorCisgICAgICAgIG5rZXlzLCBudmFsdWVzLCBzaW5jZV9tb2QgPSBRdWVyeUluZm9LZXkoc3ViX2tleSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChua2V5cywgMCwgInN1YmtleSBub3QgZW1wdHkgYmVmb3JlIGRlbGV0ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnZhbHVlcywgMCwgInN1YmtleSBub3QgZW1wdHkgYmVmb3JlIGRlbGV0ZSIpCisgICAgICAgIHN1Yl9rZXkuQ2xvc2UoKQorICAgICAgICBEZWxldGVLZXkoa2V5LCAic3ViX2tleSIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBTaG91bGRudCBiZSBhYmxlIHRvIGRlbGV0ZSBpdCB0d2ljZSEKKyAgICAgICAgICAgIERlbGV0ZUtleShrZXksICJzdWJfa2V5IikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGVsZXRpbmcgdGhlIGtleSB0d2ljZSBzdWNjZWVkZWQiKQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAga2V5LkNsb3NlKCkKKyAgICAgICAgRGVsZXRlS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQorICAgICAgICAjIE9wZW5pbmcgc2hvdWxkIG5vdyBmYWlsIQorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBPcGVuS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJDb3VsZCBvcGVuIHRoZSBub24tZXhpc3RlbnQga2V5IikKKyAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjogIyBVc2UgdGhpcyBlcnJvciBuYW1lIHRoaXMgdGltZQorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF90ZXN0X2FsbChzZWxmLCByb290X2tleSk6CisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3RfZGF0YShyb290X2tleSkKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0X2RhdGEocm9vdF9rZXkpCisgICAgICAgIHNlbGYuX2RlbGV0ZV90ZXN0X2RhdGEocm9vdF9rZXkpCisKK2NsYXNzIExvY2FsV2lucmVnVGVzdHMoQmFzZVdpbnJlZ1Rlc3RzKToKKworICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X3dvcmtzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FsbChIS0VZX0NVUlJFTlRfVVNFUikKKworICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X3dvcmtzX2V4dGVuZGVkX2Z1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBTdWJzdGl0dXRlIHRoZSByZWd1bGFyIENyZWF0ZUtleSBhbmQgT3BlbktleSBjYWxscyB3aXRoIHRoZWlyCisgICAgICAgICMgZXh0ZW5kZWQgY291bnRlcnBhcnRzLgorICAgICAgICAjIE5vdGU6IERlbGV0ZUtleUV4IGlzIG5vdCB1c2VkIGhlcmUgYmVjYXVzZSBpdCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQKKyAgICAgICAgY2tlID0gbGFtYmRhIGtleSwgc3ViX2tleTogQ3JlYXRlS2V5RXgoa2V5LCBzdWJfa2V5LCAwLCBLRVlfQUxMX0FDQ0VTUykKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdF9kYXRhKEhLRVlfQ1VSUkVOVF9VU0VSLCBja2UpCisKKyAgICAgICAgb2tlID0gbGFtYmRhIGtleSwgc3ViX2tleTogT3BlbktleUV4KGtleSwgc3ViX2tleSwgMCwgS0VZX1JFQUQpCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdF9kYXRhKEhLRVlfQ1VSUkVOVF9VU0VSLCBva2UpCisKKyAgICAgICAgc2VsZi5fZGVsZXRlX3Rlc3RfZGF0YShIS0VZX0NVUlJFTlRfVVNFUikKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3RfcmVnaXN0cnlfdG9fbG9jYWxfbWFjaGluZV93b3JrcyhzZWxmKToKKyAgICAgICAgIyBwZXJmb3JtIG1pbmltYWwgQ29ubmVjdFJlZ2lzdHJ5IHRlc3Qgd2hpY2gganVzdCBpbnZva2VzIGl0CisgICAgICAgIGggPSBDb25uZWN0UmVnaXN0cnkoTm9uZSwgSEtFWV9MT0NBTF9NQUNISU5FKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGguaGFuZGxlLCAwKQorICAgICAgICBoLkNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhhbmRsZSwgMCkKKworICAgIGRlZiB0ZXN0X2luZXhpc3RhbnRfcmVtb3RlX3JlZ2lzdHJ5KHNlbGYpOgorICAgICAgICBjb25uZWN0ID0gbGFtYmRhOiBDb25uZWN0UmVnaXN0cnkoImFiY2RlZmdoaWprbCIsIEhLRVlfQ1VSUkVOVF9VU0VSKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIGNvbm5lY3QpCisKKyAgICBkZWYgdGVzdF9leHBhbmRfZW52aXJvbm1lbnRfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgciA9IEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyh1IiV3aW5kaXIlXFx0ZXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHIpLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIG9zLmVudmlyb25bIndpbmRpciJdICsgIlxcdGVzdCIpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGhhbmRsZSBpcyBjbG9zZWQgaWYgYW4gZXhjZXB0aW9uIG9jY3VycworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENvbm5lY3RSZWdpc3RyeShOb25lLCBIS0VZX0xPQ0FMX01BQ0hJTkUpIGFzIGg6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoLmhhbmRsZSwgMCkKKyAgICAgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IKKyAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCisKKyAgICBkZWYgdGVzdF9jaGFuZ2luZ192YWx1ZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZTI4MTA6IEEgcmFjZSBjb25kaXRpb24gaW4gMi42IGFuZCAzLjEgbWF5IGNhdXNlCisgICAgICAgICMgRW51bVZhbHVlIG9yIFF1ZXJ5VmFsdWUgdG8gcmFpc2UgIldpbmRvd3NFcnJvcjogTW9yZSBkYXRhIGlzCisgICAgICAgICMgYXZhaWxhYmxlIgorICAgICAgICBkb25lID0gRmFsc2UKKworICAgICAgICBjbGFzcyBWZXJ5QWN0aXZlVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIENyZWF0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkgYXMga2V5OgorICAgICAgICAgICAgICAgICAgICB1c2Vfc2hvcnQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGxvbmdfc3RyaW5nID0gJ3gnKjIwMDAKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgbm90IGRvbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzID0gJ3gnIGlmIHVzZV9zaG9ydCBlbHNlIGxvbmdfc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB1c2Vfc2hvcnQgPSBub3QgdXNlX3Nob3J0CisgICAgICAgICAgICAgICAgICAgICAgICBTZXRWYWx1ZShrZXksICdjaGFuZ2luZ192YWx1ZScsIFJFR19TWiwgcykKKworICAgICAgICB0aHJlYWQgPSBWZXJ5QWN0aXZlVGhyZWFkKCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2tleV9uYW1lKydcXGNoYW5naW5nX3ZhbHVlJykgYXMga2V5OgorICAgICAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgICAgICAgICBudW1fc3Via2V5cywgbnVtX3ZhbHVlcywgdCA9IFF1ZXJ5SW5mb0tleShrZXkpCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV92YWx1ZXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IEVudW1WYWx1ZShrZXksIGkpCisgICAgICAgICAgICAgICAgICAgICAgICBRdWVyeVZhbHVlKGtleSwgbmFtZVswXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRvbmUgPSBUcnVlCisgICAgICAgICAgICB0aHJlYWQuam9pbigpCisgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUsIDAsIEtFWV9BTExfQUNDRVNTKSBhcyBrZXk6CisgICAgICAgICAgICAgICAgRGVsZXRlS2V5KGtleSwgJ2NoYW5naW5nX3ZhbHVlJykKKyAgICAgICAgICAgIERlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKworICAgIGRlZiB0ZXN0X2xvbmdfa2V5KHNlbGYpOgorICAgICAgICAjIElzc3VlMjgxMCwgaW4gMi42IGFuZCAzLjEgd2hlbiB0aGUga2V5IG5hbWUgd2FzIGV4YWN0bHkgMjU2CisgICAgICAgICMgY2hhcmFjdGVycywgRW51bUtleSByYWlzZWQgIldpbmRvd3NFcnJvcjogTW9yZSBkYXRhIGlzCisgICAgICAgICMgYXZhaWxhYmxlIgorICAgICAgICBuYW1lID0gJ3gnKjI1NgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENyZWF0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkgYXMga2V5OgorICAgICAgICAgICAgICAgIFNldFZhbHVlKGtleSwgbmFtZSwgUkVHX1NaLCAneCcpCisgICAgICAgICAgICAgICAgbnVtX3N1YmtleXMsIG51bV92YWx1ZXMsIHQgPSBRdWVyeUluZm9LZXkoa2V5KQorICAgICAgICAgICAgICAgIEVudW1LZXkoa2V5LCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lLCAwLCBLRVlfQUxMX0FDQ0VTUykgYXMga2V5OgorICAgICAgICAgICAgICAgIERlbGV0ZUtleShrZXksIG5hbWUpCisgICAgICAgICAgICBEZWxldGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpCisKKyAgICBkZWYgdGVzdF9keW5hbWljX2tleShzZWxmKToKKyAgICAgICAgIyBJc3N1ZTI4MTAsIHdoZW4gdGhlIHZhbHVlIGlzIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCwgdGhlc2UKKyAgICAgICAgIyByYWlzZSAiV2luZG93c0Vycm9yOiBNb3JlIGRhdGEgaXMgYXZhaWxhYmxlIiBpbiAyLjYgYW5kIDMuMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBFbnVtVmFsdWUoSEtFWV9QRVJGT1JNQU5DRV9EQVRBLCAwKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRVBFUk0sIGVycm5vLkVBQ0NFUyk6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiYWNjZXNzIGRlbmllZCB0byByZWdpc3RyeSBrZXkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihhcmUgeW91IHJ1bm5pbmcgaW4gYSBub24taW50ZXJhY3RpdmUgc2Vzc2lvbj8pIikKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIFF1ZXJ5VmFsdWVFeChIS0VZX1BFUkZPUk1BTkNFX0RBVEEsIE5vbmUpCisKKyAgICAjIFJlZmxlY3Rpb24gcmVxdWlyZXMgWFAgeDY0L1Zpc3RhIGF0IGEgbWluaW11bS4gWFAgZG9lc24ndCBoYXZlIHRoaXMgc3R1ZmYKKyAgICAjIG9yIERlbGV0ZUtleUV4IHNvIG1ha2Ugc3VyZSB0aGVpciB1c2UgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhXSU5fVkVSIDwgKDUsIDIpLCAiUmVxdWlyZXMgV2luZG93cyBYUCIpCisgICAgZGVmIHRlc3RfcmVmbGVjdGlvbl91bnN1cHBvcnRlZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpIGFzIGNrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY2suaGFuZGxlLCAwKQorCisgICAgICAgICAgICBrZXkgPSBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuaGFuZGxlLCAwKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIERpc2FibGVSZWZsZWN0aW9uS2V5KGtleSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgRW5hYmxlUmVmbGVjdGlvbktleShrZXkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIFF1ZXJ5UmVmbGVjdGlvbktleShrZXkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIERlbGV0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCisgICAgZGVmIHRlc3Rfc2V0dmFsdWVleF92YWx1ZV9yYW5nZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBJc3N1ZSAjMTQ0MjAsIGFjY2VwdCBwcm9wZXIgcmFuZ2VzIGZvciBTZXRWYWx1ZUV4LgorICAgICAgICAjIFB5MlJlZywgd2hpY2ggZ2V0cyBjYWxsZWQgYnkgU2V0VmFsdWVFeCwgd2FzIHVzaW5nIFB5TG9uZ19Bc0xvbmcsCisgICAgICAgICMgdGh1cyByYWlzaW5nIE92ZXJmbG93RXJyb3IuIFRoZSBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcworICAgICAgICAjIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyB0byBtYXRjaCBEV09SRCdzIHNpemUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQ3JlYXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKSBhcyBjazoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNrLmhhbmRsZSwgMCkKKyAgICAgICAgICAgICAgICBTZXRWYWx1ZUV4KGNrLCAidGVzdF9uYW1lIiwgTm9uZSwgUkVHX0RXT1JELCAweDgwMDAwMDAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCisgICAgZGVmIHRlc3RfcXVlcnl2YWx1ZWV4X3JldHVybl92YWx1ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBJc3N1ZSAjMTY3NTksIHJldHVybiB1bnNpZ25lZCBpbnQgZnJvbSBRdWVyeVZhbHVlRXguCisgICAgICAgICMgUmVnMlB5LCB3aGljaCBnZXRzIGNhbGxlZCBieSBRdWVyeVZhbHVlRXgsIHdhcyByZXR1cm5pbmcgYSB2YWx1ZQorICAgICAgICAjIGdlbmVyYXRlZCBieSBQeUxvbmdfRnJvbUxvbmcuIFRoZSBpbXBsbWVudGF0aW9uIG5vdyB1c2VzCisgICAgICAgICMgUHlMb25nX0Zyb21VbnNpZ25lZExvbmcgdG8gbWF0Y2ggRFdPUkQncyBzaXplLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENyZWF0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkgYXMgY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjay5oYW5kbGUsIDApCisgICAgICAgICAgICAgICAgdGVzdF92YWwgPSAweDgwMDAwMDAwCisgICAgICAgICAgICAgICAgU2V0VmFsdWVFeChjaywgInRlc3RfbmFtZSIsIE5vbmUsIFJFR19EV09SRCwgdGVzdF92YWwpCisgICAgICAgICAgICAgICAgcmV0X3ZhbCwgcmV0X3R5cGUgPSBRdWVyeVZhbHVlRXgoY2ssICJ0ZXN0X25hbWUiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0X3R5cGUsIFJFR19EV09SRCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldF92YWwsIHRlc3RfdmFsKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoUkVNT1RFX05BTUUsICJTa2lwcGluZyByZW1vdGUgcmVnaXN0cnkgdGVzdHMiKQorY2xhc3MgUmVtb3RlV2lucmVnVGVzdHMoQmFzZVdpbnJlZ1Rlc3RzKToKKworICAgIGRlZiB0ZXN0X3JlbW90ZV9yZWdpc3RyeV93b3JrcyhzZWxmKToKKyAgICAgICAgcmVtb3RlX2tleSA9IENvbm5lY3RSZWdpc3RyeShSRU1PVEVfTkFNRSwgSEtFWV9DVVJSRU5UX1VTRVIpCisgICAgICAgIHNlbGYuX3Rlc3RfYWxsKHJlbW90ZV9rZXkpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoV0lONjRfTUFDSElORSwgIng2NCBzcGVjaWZpYyByZWdpc3RyeSB0ZXN0cyIpCitjbGFzcyBXaW42NFdpbnJlZ1Rlc3RzKEJhc2VXaW5yZWdUZXN0cyk6CisKKyAgICBkZWYgdGVzdF9yZWZsZWN0aW9uX2Z1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2UgY2FuIGNhbGwgdGhlIHF1ZXJ5LCBlbmFibGUsIGFuZCBkaXNhYmxlIGZ1bmN0aW9ucworICAgICAgICAjIG9uIGEga2V5IHdoaWNoIGlzbid0IG9uIHRoZSByZWZsZWN0aW9uIGxpc3Qgd2l0aCBubyBjb25zZXF1ZW5jZXMuCisgICAgICAgIHdpdGggT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZSIpIGFzIGtleToKKyAgICAgICAgICAgICMgSEtMTVxTb2Z0d2FyZSBpcyByZWRpcmVjdGVkIGJ1dCBub3QgcmVmbGVjdGVkIGluIGFsbCBPU2VzCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoUXVlcnlSZWZsZWN0aW9uS2V5KGtleSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIEVuYWJsZVJlZmxlY3Rpb25LZXkoa2V5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgRGlzYWJsZVJlZmxlY3Rpb25LZXkoa2V5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShRdWVyeVJlZmxlY3Rpb25LZXkoa2V5KSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19SRUZMRUNUSU9OLCAiT1MgZG9lc24ndCBzdXBwb3J0IHJlZmxlY3Rpb24iKQorICAgIGRlZiB0ZXN0X3JlZmxlY3Rpb24oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbiBjcmVhdGUsIG9wZW4sIGFuZCBkZWxldGUga2V5cyBpbiB0aGUgMzItYml0CisgICAgICAgICMgYXJlYS4gQmVjYXVzZSB3ZSBhcmUgZG9pbmcgdGhpcyBpbiBhIGtleSB3aGljaCBnZXRzIHJlZmxlY3RlZCwKKyAgICAgICAgIyB0ZXN0IHRoZSBkaWZmZXJlbmNlcyBvZiAzMiBhbmQgNjQtYml0IGtleXMgYmVmb3JlIGFuZCBhZnRlciB0aGUKKyAgICAgICAgIyByZWZsZWN0aW9uIG9jY3VycyAoaWUuIHdoZW4gdGhlIGNyZWF0ZWQga2V5IGlzIGNsb3NlZCkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQ3JlYXRlS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MgfCBLRVlfV09XNjRfMzJLRVkpIGFzIGNyZWF0ZWRfa2V5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlZF9rZXkuaGFuZGxlLCAwKQorCisgICAgICAgICAgICAgICAgIyBUaGUga2V5IHNob3VsZCBub3cgYmUgYXZhaWxhYmxlIGluIHRoZSAzMi1iaXQgYXJlYQorICAgICAgICAgICAgICAgIHdpdGggT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUyB8IEtFWV9XT1c2NF8zMktFWSkgYXMga2V5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5oYW5kbGUsIDApCisKKyAgICAgICAgICAgICAgICAjIFdyaXRlIGEgdmFsdWUgdG8gd2hhdCBjdXJyZW50bHkgaXMgb25seSBpbiB0aGUgMzItYml0IGFyZWEKKyAgICAgICAgICAgICAgICBTZXRWYWx1ZUV4KGNyZWF0ZWRfa2V5LCAiIiwgMCwgUkVHX1NaLCAiMzJLRVkiKQorCisgICAgICAgICAgICAgICAgIyBUaGUga2V5IGlzIG5vdCByZWZsZWN0ZWQgdW50aWwgY3JlYXRlZF9rZXkgaXMgY2xvc2VkLgorICAgICAgICAgICAgICAgICMgVGhlIDY0LWJpdCB2ZXJzaW9uIG9mIHRoZSBrZXkgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGUgeWV0LgorICAgICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKworICAgICAgICAgICAgIyBOb3cgZXhwbGljaXRseSBvcGVuIHRoZSA2NC1iaXQgdmVyc2lvbiBvZiB0aGUga2V5CisgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUyB8IEtFWV9XT1c2NF82NEtFWSkgYXMga2V5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmhhbmRsZSwgMCkKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgdmFsdWUgd2Ugc2V0IGlzIHRoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMzJLRVkiLCBRdWVyeVZhbHVlKGtleSwgIiIpKQorICAgICAgICAgICAgICAgICMgU2V0IGEgbmV3IHZhbHVlLCB3aGljaCB3aWxsIGdldCByZWZsZWN0ZWQgdG8gMzItYml0CisgICAgICAgICAgICAgICAgU2V0VmFsdWVFeChrZXksICIiLCAwLCBSRUdfU1osICI2NEtFWSIpCisKKyAgICAgICAgICAgICMgUmVmbGVjdGlvbiB1c2VzIGEgImxhc3Qtd3JpdGVyIHdpbnMgcG9saWN5LCBzbyB0aGUgdmFsdWUgd2Ugc2V0CisgICAgICAgICAgICAjIG9uIHRoZSA2NC1iaXQga2V5IHNob3VsZCBiZSB0aGUgc2FtZSBvbiAzMi1iaXQKKyAgICAgICAgICAgIHdpdGggT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzMyS0VZKSBhcyBrZXk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiNjRLRVkiLCBRdWVyeVZhbHVlKGtleSwgIiIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9XT1c2NF8zMktFWSwgMCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19SRUZMRUNUSU9OLCAiT1MgZG9lc24ndCBzdXBwb3J0IHJlZmxlY3Rpb24iKQorICAgIGRlZiB0ZXN0X2Rpc2FibGVfcmVmbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBNYWtlIHVzZSBvZiBhIGtleSB3aGljaCBnZXRzIHJlZGlyZWN0ZWQgYW5kIHJlZmxlY3RlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENyZWF0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9BTExfQUNDRVNTIHwgS0VZX1dPVzY0XzMyS0VZKSBhcyBjcmVhdGVkX2tleToKKyAgICAgICAgICAgICAgICAjIFF1ZXJ5UmVmbGVjdGlvbktleSByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBrZXkgaXMgZGlzYWJsZWQKKyAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IFF1ZXJ5UmVmbGVjdGlvbktleShjcmVhdGVkX2tleSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZGlzYWJsZWQpLCBib29sKQorICAgICAgICAgICAgICAgICMgSEtDVVxTb2Z0d2FyZVxDbGFzc2VzIGlzIHJlZmxlY3RlZCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkaXNhYmxlZCkKKworICAgICAgICAgICAgICAgIERpc2FibGVSZWZsZWN0aW9uS2V5KGNyZWF0ZWRfa2V5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShRdWVyeVJlZmxlY3Rpb25LZXkoY3JlYXRlZF9rZXkpKQorCisgICAgICAgICAgICAjIFRoZSBrZXkgaXMgbm93IGNsb3NlZCBhbmQgd291bGQgbm9ybWFsbHkgYmUgcmVmbGVjdGVkIHRvIHRoZQorICAgICAgICAgICAgIyA2NC1iaXQgYXJlYSwgYnV0IGxldCdzIG1ha2Ugc3VyZSB0aGF0IGRpZG4ndCBoYXBwZW4uCisgICAgICAgICAgICBvcGVuX2ZhaWwgPSBsYW1iZGE6IE9wZW5LZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzY0S0VZKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcGVuX2ZhaWwpCisKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSAzMi1iaXQga2V5IGlzIGFjdHVhbGx5IHRoZXJlCisgICAgICAgICAgICB3aXRoIE9wZW5LZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfMzJLRVkpIGFzIGtleToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5oYW5kbGUsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBEZWxldGVLZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1dPVzY0XzMyS0VZLCAwKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX251bWJlcnMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yKSBhcyBjdHg6CisgICAgICAgICAgICBRdWVyeVZhbHVlKEhLRVlfQ0xBU1NFU19ST09ULCAnc29tZV92YWx1ZV90aGF0X2RvZXNfbm90X2V4aXN0JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5leGNlcHRpb24uZXJybm8sIDIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KExvY2FsV2lucmVnVGVzdHMsIFJlbW90ZVdpbnJlZ1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luNjRXaW5yZWdUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpZiBub3QgUkVNT1RFX05BTUU6CisgICAgICAgIHByaW50ICJSZW1vdGUgcmVnaXN0cnkgY2FsbHMgY2FuIGJlIHRlc3RlZCB1c2luZyIsCisgICAgICAgIHByaW50ICIndGVzdF93aW5yZWcucHkgLS1yZW1vdGUgXFxcXG1hY2hpbmVfbmFtZSciCisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkZWNkOAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CkBAIC0wLDAgKzEsMjU2IEBACisjIFJpZGljdWxvdXNseSBzaW1wbGUgdGVzdCBvZiB0aGUgd2luc291bmQgbW9kdWxlIGZvciBXaW5kb3dzLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ2F1ZGlvJykKK2ltcG9ydCB0aW1lCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKK3dpbnNvdW5kID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3dpbnNvdW5kJykKK2N0eXBlcyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjdHlwZXMnKQoraW1wb3J0IF93aW5yZWcKKworZGVmIGhhc19zb3VuZChzb3VuZCk6CisgICAgIiIiRmluZCBvdXQgaWYgYSBwYXJ0aWN1bGFyIGV2ZW50IGlzIGNvbmZpZ3VyZWQgd2l0aCBhIGRlZmF1bHQgc291bmQiIiIKKyAgICB0cnk6CisgICAgICAgICMgQXNrIHRoZSBtaXhlciBBUEkgZm9yIHRoZSBudW1iZXIgb2YgZGV2aWNlcyBpdCBrbm93cyBhYm91dC4KKyAgICAgICAgIyBXaGVuIHRoZXJlIGFyZSBubyBkZXZpY2VzLCBQbGF5U291bmQgd2lsbCBmYWlsLgorICAgICAgICBpZiBjdHlwZXMud2luZGxsLndpbm1tLm1peGVyR2V0TnVtRGV2cygpIGlzIDA6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBrZXkgPSBfd2lucmVnLk9wZW5LZXlFeChfd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSLAorICAgICAgICAgICAgICAgICJBcHBFdmVudHNcU2NoZW1lc1xBcHBzXC5EZWZhdWx0XHswfVwuRGVmYXVsdCIuZm9ybWF0KHNvdW5kKSkKKyAgICAgICAgdmFsdWUgPSBfd2lucmVnLkVudW1WYWx1ZShrZXksIDApWzFdCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCB1IiI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIEJlZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEFzIHdpdGggUGxheVNvdW5kVGVzdCwgaW5jb3Jwb3JhdGUgdGhlIF9oYXZlX3NvdW5kY2FyZCgpIGNoZWNrCisgICAgIyBpbnRvIG91ciB0ZXN0IG1ldGhvZHMuICBJZiB0aGVyZSdzIG5vIGF1ZGlvIGRldmljZSBwcmVzZW50LAorICAgICMgd2luc291bmQuQmVlcCByZXR1cm5zIDAgYW5kIEdldExhc3RFcnJvcigpIHJldHVybnMgMTI3LCB3aGljaAorICAgICMgaXM6IEVSUk9SX1BST0NfTk9UX0ZPVU5EICgiVGhlIHNwZWNpZmllZCBwcm9jZWR1cmUgY291bGQgbm90CisgICAgIyBiZSBmb3VuZCIpLiAgKEZXSVcsIHZpcnR1YWwvSHlwZXItViBzeXN0ZW1zIGZhbGwgdW5kZXIgdGhpcworICAgICMgc2NlbmFyaW8gYXMgdGhleSBoYXZlIG5vIHNvdW5kIGRldmljZXMgd2hhdHNvZXZlciAgKG5vdCBldmVuCisgICAgIyBhIGxlZ2FjeSBCZWVwIGRldmljZSkuKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdpbnNvdW5kLkJlZXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHdpbnNvdW5kLkJlZXAsIDM2LCA3NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgd2luc291bmQuQmVlcCwgMzI3NjgsIDc1KQorCisgICAgZGVmIHRlc3RfZXh0cmVtZXMoc2VsZik6CisgICAgICAgIHNlbGYuX2JlZXAoMzcsIDc1KQorICAgICAgICBzZWxmLl9iZWVwKDMyNzY3LCA3NSkKKworICAgIGRlZiB0ZXN0X2luY3JlYXNpbmdmcmVxdWVuY3koc2VsZik6CisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDAsIDIwMDAsIDEwMCk6CisgICAgICAgICAgICBzZWxmLl9iZWVwKGksIDc1KQorCisgICAgZGVmIF9iZWVwKHNlbGYsICphcmdzKToKKyAgICAgICAgIyB0aGVzZSB0ZXN0cyB1c2VkIHRvIHVzZSBfaGF2ZV9zb3VuZGNhcmQoKSwgYnV0IGl0J3MgcXVpdGUKKyAgICAgICAgIyBwb3NzaWJsZSB0byBoYXZlIGEgc291bmRjYXJkLCBhbmQgeWV0IGhhdmUgdGhlIGJlZXAgZHJpdmVyCisgICAgICAgICMgZGlzYWJsZWQuIFNvIGJhc2ljYWxseSwgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyB3aGV0aGVyCisgICAgICAgICMgYSBiZWVwIHNob3VsZCBiZSBwcm9kdWNlZCBvciBub3QsIHNvIGN1cnJlbnRseSBpZiB0aGVzZQorICAgICAgICAjIHRlc3RzIGZhaWwgd2UncmUgaWdub3JpbmcgdGhlbQorICAgICAgICAjCisgICAgICAgICMgWFhYIHRoZSByaWdodCBmaXggZm9yIHRoaXMgaXMgdG8gZGVmaW5lIHNvbWV0aGluZyBsaWtlCisgICAgICAgICMgX2hhdmVfZW5hYmxlZF9iZWVwX2RyaXZlcigpIGFuZCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZQorICAgICAgICAjIHRyeS9leGNlcHQgYmVsb3cKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2luc291bmQuQmVlcCgqYXJncykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworY2xhc3MgTWVzc2FnZUJlZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGltZS5zbGVlcCgwLjUpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdpbnNvdW5kLk1lc3NhZ2VCZWVwLCAiYmFkIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aW5zb3VuZC5NZXNzYWdlQmVlcCwgNDIsIDQyKQorICAgICAgICB3aW5zb3VuZC5NZXNzYWdlQmVlcCgpCisKKyAgICBkZWYgdGVzdF9vayhzZWxmKToKKyAgICAgICAgd2luc291bmQuTWVzc2FnZUJlZXAod2luc291bmQuTUJfT0spCisKKyAgICBkZWYgdGVzdF9hc3RlcmlzayhzZWxmKToKKyAgICAgICAgd2luc291bmQuTWVzc2FnZUJlZXAod2luc291bmQuTUJfSUNPTkFTVEVSSVNLKQorCisgICAgZGVmIHRlc3RfZXhjbGFtYXRpb24oc2VsZik6CisgICAgICAgIHdpbnNvdW5kLk1lc3NhZ2VCZWVwKHdpbnNvdW5kLk1CX0lDT05FWENMQU1BVElPTikKKworICAgIGRlZiB0ZXN0X2hhbmQoc2VsZik6CisgICAgICAgIHdpbnNvdW5kLk1lc3NhZ2VCZWVwKHdpbnNvdW5kLk1CX0lDT05IQU5EKQorCisgICAgZGVmIHRlc3RfcXVlc3Rpb24oc2VsZik6CisgICAgICAgIHdpbnNvdW5kLk1lc3NhZ2VCZWVwKHdpbnNvdW5kLk1CX0lDT05RVUVTVElPTikKKworCitjbGFzcyBQbGF5U291bmRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aW5zb3VuZC5QbGF5U291bmQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2luc291bmQuUGxheVNvdW5kLCAiYmFkIiwgImJhZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kLAorICAgICAgICAgICAgIm5vbmUiLCB3aW5zb3VuZC5TTkRfQVNZTkMgfCB3aW5zb3VuZC5TTkRfTUVNT1JZCisgICAgICAgICkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc19zb3VuZCgiU3lzdGVtQXN0ZXJpc2siKSwgIk5vIGRlZmF1bHQgU3lzdGVtQXN0ZXJpc2siKQorICAgIGRlZiB0ZXN0X2FsaWFzX2FzdGVyaXNrKHNlbGYpOgorICAgICAgICBpZiBfaGF2ZV9zb3VuZGNhcmQoKToKKyAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCgnU3lzdGVtQXN0ZXJpc2snLCB3aW5zb3VuZC5TTkRfQUxJQVMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kLAorICAgICAgICAgICAgICAgICdTeXN0ZW1Bc3RlcmlzaycsIHdpbnNvdW5kLlNORF9BTElBUworICAgICAgICAgICAgKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzX3NvdW5kKCJTeXN0ZW1FeGNsYW1hdGlvbiIpLCAiTm8gZGVmYXVsdCBTeXN0ZW1FeGNsYW1hdGlvbiIpCisgICAgZGVmIHRlc3RfYWxpYXNfZXhjbGFtYXRpb24oc2VsZik6CisgICAgICAgIGlmIF9oYXZlX3NvdW5kY2FyZCgpOgorICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKCdTeXN0ZW1FeGNsYW1hdGlvbicsIHdpbnNvdW5kLlNORF9BTElBUykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQsCisgICAgICAgICAgICAgICAgJ1N5c3RlbUV4Y2xhbWF0aW9uJywgd2luc291bmQuU05EX0FMSUFTCisgICAgICAgICAgICApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNfc291bmQoIlN5c3RlbUV4aXQiKSwgIk5vIGRlZmF1bHQgU3lzdGVtRXhpdCIpCisgICAgZGVmIHRlc3RfYWxpYXNfZXhpdChzZWxmKToKKyAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CisgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoJ1N5c3RlbUV4aXQnLCB3aW5zb3VuZC5TTkRfQUxJQVMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kLAorICAgICAgICAgICAgICAgICdTeXN0ZW1FeGl0Jywgd2luc291bmQuU05EX0FMSUFTCisgICAgICAgICAgICApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNfc291bmQoIlN5c3RlbUhhbmQiKSwgIk5vIGRlZmF1bHQgU3lzdGVtSGFuZCIpCisgICAgZGVmIHRlc3RfYWxpYXNfaGFuZChzZWxmKToKKyAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CisgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoJ1N5c3RlbUhhbmQnLCB3aW5zb3VuZC5TTkRfQUxJQVMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kLAorICAgICAgICAgICAgICAgICdTeXN0ZW1IYW5kJywgd2luc291bmQuU05EX0FMSUFTCisgICAgICAgICAgICApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNfc291bmQoIlN5c3RlbVF1ZXN0aW9uIiksICJObyBkZWZhdWx0IFN5c3RlbVF1ZXN0aW9uIikKKyAgICBkZWYgdGVzdF9hbGlhc19xdWVzdGlvbihzZWxmKToKKyAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CisgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoJ1N5c3RlbVF1ZXN0aW9uJywgd2luc291bmQuU05EX0FMSUFTKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCwKKyAgICAgICAgICAgICAgICAnU3lzdGVtUXVlc3Rpb24nLCB3aW5zb3VuZC5TTkRfQUxJQVMKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2FsaWFzX2ZhbGxiYWNrKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCBjYW4ndCBiZSBleHBlY3RlZCB0byB3b3JrIG9uIGFsbCBzeXN0ZW1zLiAgVGhlIE1TCisgICAgICAgICMgUGxheVNvdW5kKCkgZG9jcyBzYXk6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgSWYgaXQgY2Fubm90IGZpbmQgdGhlIHNwZWNpZmllZCBzb3VuZCwgUGxheVNvdW5kIHVzZXMgdGhlCisgICAgICAgICMgICAgIGRlZmF1bHQgc3lzdGVtIGV2ZW50IHNvdW5kIGVudHJ5IGluc3RlYWQuICBJZiB0aGUgZnVuY3Rpb24KKyAgICAgICAgIyAgICAgY2FuIGZpbmQgbmVpdGhlciB0aGUgc3lzdGVtIGRlZmF1bHQgZW50cnkgbm9yIHRoZSBkZWZhdWx0CisgICAgICAgICMgICAgIHNvdW5kLCBpdCBtYWtlcyBubyBzb3VuZCBhbmQgcmV0dXJucyBGQUxTRS4KKyAgICAgICAgIworICAgICAgICAjIEl0J3Mga25vd24gdG8gcmV0dXJuIEZBTFNFIG9uIHNvbWUgcmVhbCBzeXN0ZW1zLgorCisgICAgICAgICMgd2luc291bmQuUGxheVNvdW5kKCchIiQlJi8oIysqJywgd2luc291bmQuU05EX0FMSUFTKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiB0ZXN0X2FsaWFzX25vZmFsbGJhY2soc2VsZik6CisgICAgICAgIGlmIF9oYXZlX3NvdW5kY2FyZCgpOgorICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYXNzZXJ0aW5nIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgIyB3aWxsIGdldCByYWlzZWQ6ICB5b3UgY2Fubm90IGNvbnZlcnQgdGhpcyB0bworICAgICAgICAgICAgIyBzZWxmLmFzc2VydFJhaXNlcyguLi4pIGZvcm0uICBUaGUgYXR0ZW1wdCBtYXkgb3IgbWF5IG5vdAorICAgICAgICAgICAgIyByYWlzZSBSdW50aW1lRXJyb3IsIGJ1dCBpdCBzaG91bGRuJ3QgcmFpc2UgYW55dGhpbmcgb3RoZXIKKyAgICAgICAgICAgICMgdGhhbiBSdW50aW1lRXJyb3IsIGFuZCB0aGF0J3MgYWxsIHdlJ3JlIHRyeWluZyB0byB0ZXN0CisgICAgICAgICAgICAjIGhlcmUuICBUaGUgTVMgZG9jcyBhcmVuJ3QgY2xlYXIgYWJvdXQgd2hldGhlciB0aGUgU0RLCisgICAgICAgICAgICAjIFBsYXlTb3VuZCgpIHdpdGggU05EX0FMSUFTIGFuZCBTTkRfTk9ERUZBVUxUIHdpbGwgcmV0dXJuCisgICAgICAgICAgICAjIFRydWUgb3IgRmFsc2Ugd2hlbiB0aGUgYWxpYXMgaXMgdW5rbm93bi4gIE9uIFRpbSdzIFdpblhQCisgICAgICAgICAgICAjIGJveCB0b2RheSwgaXQgcmV0dXJucyBUcnVlIChubyBleGNlcHRpb24gaXMgcmFpc2VkKS4gIFdoYXQKKyAgICAgICAgICAgICMgd2UnZCByZWFsbHkgbGlrZSB0byB0ZXN0IGlzIHRoYXQgbm8gc291bmQgaXMgcGxheWVkLCBidXQKKyAgICAgICAgICAgICMgdGhhdCByZXF1aXJlcyBmaXJzdCB3aXJpbmcgYW4gZWFyZHJ1bSBjbGFzcyBpbnRvIHVuaXR0ZXN0CisgICAgICAgICAgICAjIDx3aW5rPi4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoCisgICAgICAgICAgICAgICAgICAgICchIiQlJi8oIysqJywKKyAgICAgICAgICAgICAgICAgICAgd2luc291bmQuU05EX0FMSUFTIHwgd2luc291bmQuU05EX05PREVGQVVMVAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCwKKyAgICAgICAgICAgICAgICAnISIkJSYvKCMrKicsIHdpbnNvdW5kLlNORF9BTElBUyB8IHdpbnNvdW5kLlNORF9OT0RFRkFVTFQKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3N0b3Bhc3luYyhzZWxmKToKKyAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CisgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoCisgICAgICAgICAgICAgICAgJ1N5c3RlbVF1ZXN0aW9uJywKKyAgICAgICAgICAgICAgICB3aW5zb3VuZC5TTkRfQUxJQVMgfCB3aW5zb3VuZC5TTkRfQVNZTkMgfCB3aW5zb3VuZC5TTkRfTE9PUAorICAgICAgICAgICAgKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKAorICAgICAgICAgICAgICAgICAgICAnU3lzdGVtUXVlc3Rpb24nLAorICAgICAgICAgICAgICAgICAgICB3aW5zb3VuZC5TTkRfQUxJQVMgfCB3aW5zb3VuZC5TTkRfTk9TVE9QCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOiAjIHRoZSBmaXJzdCBzb3VuZCBtaWdodCBhbHJlYWR5IGJlIGZpbmlzaGVkCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKE5vbmUsIHdpbnNvdW5kLlNORF9QVVJHRSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSXNzdWUgODM2NzogUGxheVNvdW5kKE5vbmUsIHdpbnNvdW5kLlNORF9QVVJHRSkKKyAgICAgICAgICAgICMgZG9lcyBub3QgcmFpc2Ugb24gc3lzdGVtcyB3aXRob3V0IGEgc291bmQgY2FyZC4KKyAgICAgICAgICAgIHBhc3MKKworCitkZWYgX2dldF9jc2NyaXB0X3BhdGgoKToKKyAgICAiIiJSZXR1cm4gdGhlIGZ1bGwgcGF0aCB0byBjc2NyaXB0LmV4ZSBvciBOb25lLiIiIgorICAgIGZvciBkaXIgaW4gb3MuZW52aXJvbi5nZXQoIlBBVEgiLCAiIikuc3BsaXQob3MucGF0aHNlcCk6CisgICAgICAgIGNzY3JpcHRfcGF0aCA9IG9zLnBhdGguam9pbihkaXIsICJjc2NyaXB0LmV4ZSIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNzY3JpcHRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gY3NjcmlwdF9wYXRoCisKK19faGF2ZV9zb3VuZGNhcmRfY2FjaGUgPSBOb25lCitkZWYgX2hhdmVfc291bmRjYXJkKCk6CisgICAgIiIiUmV0dXJuIFRydWUgaWZmIHRoaXMgY29tcHV0ZXIgaGFzIGEgc291bmRjYXJkLiIiIgorICAgIGdsb2JhbCBfX2hhdmVfc291bmRjYXJkX2NhY2hlCisgICAgaWYgX19oYXZlX3NvdW5kY2FyZF9jYWNoZSBpcyBOb25lOgorICAgICAgICBjc2NyaXB0X3BhdGggPSBfZ2V0X2NzY3JpcHRfcGF0aCgpCisgICAgICAgIGlmIGNzY3JpcHRfcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgIyBDb3VsZCBub3QgZmluZCBjc2NyaXB0LmV4ZSB0byBydW4gb3VyIFZCU2NyaXB0IGhlbHBlci4gRGVmYXVsdAorICAgICAgICAgICAgIyB0byBUcnVlOiBtb3N0IGNvbXB1dGVycyB0aGVzZSBkYXlzICpkbyogaGF2ZSBhIHNvdW5kY2FyZC4KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgY2hlY2tfc2NyaXB0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hlY2tfc291bmRjYXJkLnZicyIpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtjc2NyaXB0X3BhdGgsIGNoZWNrX3NjcmlwdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIF9faGF2ZV9zb3VuZGNhcmRfY2FjaGUgPSBub3QgcC53YWl0KCkKKyAgICByZXR1cm4gX19oYXZlX3NvdW5kY2FyZF9jYWNoZQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJlZXBUZXN0LCBNZXNzYWdlQmVlcFRlc3QsIFBsYXlTb3VuZFRlc3QpCisKK2lmIF9fbmFtZV9fPT0iX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93aXRoLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2l0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTY0NTE4Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rfd2l0aC5weQpAQCAtMCwwICsxLDc1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIlVuaXQgdGVzdHMgZm9yIHRoZSB3aXRoIHN0YXRlbWVudCBzcGVjaWZpZWQgaW4gUEVQIDM0My4iIiIKKworCitfX2F1dGhvcl9fID0gIk1pa2UgQmxhbmQiCitfX2VtYWlsX18gPSAibWJsYW5kIGF0IGFjbSBkb3Qgb3JnIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IEdlbmVyYXRvckNvbnRleHRNYW5hZ2VyLCBjb250ZXh0bWFuYWdlcgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKKworY2xhc3MgTW9ja0NvbnRleHRNYW5hZ2VyKEdlbmVyYXRvckNvbnRleHRNYW5hZ2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuKToKKyAgICAgICAgR2VuZXJhdG9yQ29udGV4dE1hbmFnZXIuX19pbml0X18oc2VsZiwgZ2VuKQorICAgICAgICBzZWxmLmVudGVyX2NhbGxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuZXhpdF9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmV4aXRfYXJncyA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuZW50ZXJfY2FsbGVkID0gVHJ1ZQorICAgICAgICByZXR1cm4gR2VuZXJhdG9yQ29udGV4dE1hbmFnZXIuX19lbnRlcl9fKHNlbGYpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNlbGYuZXhpdF9jYWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYuZXhpdF9hcmdzID0gKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spCisgICAgICAgIHJldHVybiBHZW5lcmF0b3JDb250ZXh0TWFuYWdlci5fX2V4aXRfXyhzZWxmLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHRyYWNlYmFjaykKKworCitkZWYgbW9ja19jb250ZXh0bWFuYWdlcihmdW5jKToKKyAgICBkZWYgaGVscGVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gTW9ja0NvbnRleHRNYW5hZ2VyKGZ1bmMoKmFyZ3MsICoqa3dkcykpCisgICAgcmV0dXJuIGhlbHBlcgorCisKK2NsYXNzIE1vY2tSZXNvdXJjZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi55aWVsZGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5zdG9wcGVkID0gRmFsc2UKKworCitAbW9ja19jb250ZXh0bWFuYWdlcgorZGVmIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCk6CisgICAgbW9jayA9IE1vY2tSZXNvdXJjZSgpCisgICAgdHJ5OgorICAgICAgICBtb2NrLnlpZWxkZWQgPSBUcnVlCisgICAgICAgIHlpZWxkIG1vY2sKKyAgICBmaW5hbGx5OgorICAgICAgICBtb2NrLnN0b3BwZWQgPSBUcnVlCisKKworY2xhc3MgTmVzdGVkKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKm1hbmFnZXJzKToKKyAgICAgICAgc2VsZi5tYW5hZ2VycyA9IG1hbmFnZXJzCisgICAgICAgIHNlbGYuZW50ZXJlZCA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZW50ZXJlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ29udGV4dCBpcyBub3QgcmVlbnRyYW50IikKKyAgICAgICAgc2VsZi5lbnRlcmVkID0gZGVxdWUoKQorICAgICAgICB2YXJzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1nciBpbiBzZWxmLm1hbmFnZXJzOgorICAgICAgICAgICAgICAgIHZhcnMuYXBwZW5kKG1nci5fX2VudGVyX18oKSkKKyAgICAgICAgICAgICAgICBzZWxmLmVudGVyZWQuYXBwZW5kbGVmdChtZ3IpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9fZXhpdF9fKCpzeXMuZXhjX2luZm8oKSk6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIHZhcnMKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgorICAgICAgICAjIEJlaGF2ZSBsaWtlIG5lc3RlZCB3aXRoIHN0YXRlbWVudHMKKyAgICAgICAgIyBmaXJzdCBpbiwgbGFzdCBvdXQKKyAgICAgICAgIyBOZXcgZXhjZXB0aW9ucyBvdmVycmlkZSBvbGQgb25lcworICAgICAgICBleCA9IGV4Y19pbmZvCisgICAgICAgIGZvciBtZ3IgaW4gc2VsZi5lbnRlcmVkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG1nci5fX2V4aXRfXygqZXgpOgorICAgICAgICAgICAgICAgICAgICBleCA9IChOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGV4ID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgc2VsZi5lbnRlcmVkID0gTm9uZQorICAgICAgICBpZiBleCBpcyBub3QgZXhjX2luZm86CisgICAgICAgICAgICByYWlzZSBleFswXSwgZXhbMV0sIGV4WzJdCisKKworY2xhc3MgTW9ja05lc3RlZChOZXN0ZWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbWFuYWdlcnMpOgorICAgICAgICBOZXN0ZWQuX19pbml0X18oc2VsZiwgKm1hbmFnZXJzKQorICAgICAgICBzZWxmLmVudGVyX2NhbGxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuZXhpdF9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmV4aXRfYXJncyA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuZW50ZXJfY2FsbGVkID0gVHJ1ZQorICAgICAgICByZXR1cm4gTmVzdGVkLl9fZW50ZXJfXyhzZWxmKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CisgICAgICAgIHNlbGYuZXhpdF9jYWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYuZXhpdF9hcmdzID0gZXhjX2luZm8KKyAgICAgICAgcmV0dXJuIE5lc3RlZC5fX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pCisKKworY2xhc3MgRmFpbHVyZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdE5hbWVFcnJvcihzZWxmKToKKyAgICAgICAgZGVmIGZvb05vdERlY2xhcmVkKCk6CisgICAgICAgICAgICB3aXRoIGZvbzogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IsIGZvb05vdERlY2xhcmVkKQorCisgICAgZGVmIHRlc3RFbnRlckF0dHJpYnV0ZUVycm9yKHNlbGYpOgorICAgICAgICBjbGFzcyBMYWNrc0VudGVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBmb29MYWNrc0VudGVyKCk6CisgICAgICAgICAgICBmb28gPSBMYWNrc0VudGVyKCkKKyAgICAgICAgICAgIHdpdGggZm9vOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmb29MYWNrc0VudGVyKQorCisgICAgZGVmIHRlc3RFeGl0QXR0cmlidXRlRXJyb3Ioc2VsZik6CisgICAgICAgIGNsYXNzIExhY2tzRXhpdChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIGZvb0xhY2tzRXhpdCgpOgorICAgICAgICAgICAgZm9vID0gTGFja3NFeGl0KCkKKyAgICAgICAgICAgIHdpdGggZm9vOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmb29MYWNrc0V4aXQpCisKKyAgICBkZWYgYXNzZXJ0UmFpc2VzU3ludGF4RXJyb3Ioc2VsZiwgY29kZXN0cik6CisgICAgICAgIGRlZiBzaG91bGRSYWlzZVN5bnRheEVycm9yKHMpOgorICAgICAgICAgICAgY29tcGlsZShzLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBzaG91bGRSYWlzZVN5bnRheEVycm9yLCBjb2Rlc3RyKQorCisgICAgZGVmIHRlc3RBc3NpZ25tZW50VG9Ob25lRXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzU3ludGF4RXJyb3IoJ3dpdGggbW9jayBhcyBOb25lOlxuICBwYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNTeW50YXhFcnJvcigKKyAgICAgICAgICAgICd3aXRoIG1vY2sgYXMgKE5vbmUpOlxuJworICAgICAgICAgICAgJyAgcGFzcycpCisKKyAgICBkZWYgdGVzdEFzc2lnbm1lbnRUb0VtcHR5VHVwbGVFcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNTeW50YXhFcnJvcigKKyAgICAgICAgICAgICd3aXRoIG1vY2sgYXMgKCk6XG4nCisgICAgICAgICAgICAnICBwYXNzJykKKworICAgIGRlZiB0ZXN0QXNzaWdubWVudFRvVHVwbGVPbmx5Q29udGFpbmluZ05vbmVFcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNTeW50YXhFcnJvcignd2l0aCBtb2NrIGFzIE5vbmUsOlxuICBwYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNTeW50YXhFcnJvcigKKyAgICAgICAgICAgICd3aXRoIG1vY2sgYXMgKE5vbmUsKTpcbicKKyAgICAgICAgICAgICcgIHBhc3MnKQorCisgICAgZGVmIHRlc3RBc3NpZ25tZW50VG9UdXBsZUNvbnRhaW5pbmdOb25lRXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzU3ludGF4RXJyb3IoCisgICAgICAgICAgICAnd2l0aCBtb2NrIGFzIChmb28sIE5vbmUsIGJhcik6XG4nCisgICAgICAgICAgICAnICBwYXNzJykKKworICAgIGRlZiB0ZXN0RW50ZXJUaHJvd3Moc2VsZik6CisgICAgICAgIGNsYXNzIEVudGVyVGhyb3dzKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiRW50ZXIgdGhyZXciKQorICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICBjdCA9IEVudGVyVGhyb3dzKCkKKyAgICAgICAgICAgIHNlbGYuZm9vID0gTm9uZQorICAgICAgICAgICAgd2l0aCBjdCBhcyBzZWxmLmZvbzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2hvdWxkVGhyb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mb28sIE5vbmUpCisKKyAgICBkZWYgdGVzdEV4aXRUaHJvd3Moc2VsZik6CisgICAgICAgIGNsYXNzIEV4aXRUaHJvd3Mob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcig0MikKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICB3aXRoIEV4aXRUaHJvd3MoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2hvdWxkVGhyb3cpCisKK2NsYXNzIENvbnRleHRtYW5hZ2VyQXNzZXJ0aW9uTWl4aW4ob2JqZWN0KToKKyAgICBURVNUX0VYQ0VQVElPTiA9IFJ1bnRpbWVFcnJvcigidGVzdCBleGNlcHRpb24iKQorCisgICAgZGVmIGFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKHNlbGYsIG1vY2tfbWFuYWdlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX21hbmFnZXIuZW50ZXJfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1vY2tfbWFuYWdlci5leGl0X2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrX21hbmFnZXIuZXhpdF9hcmdzLCBOb25lKQorCisgICAgZGVmIGFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzKHNlbGYsIG1vY2tfbWFuYWdlciwgZXhpdF9hcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfbWFuYWdlci5lbnRlcl9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX21hbmFnZXIuZXhpdF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19tYW5hZ2VyLmV4aXRfYXJncywgZXhpdF9hcmdzKQorCisgICAgZGVmIGFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihzZWxmLCBtb2NrX21hbmFnZXIpOgorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfbWFuYWdlciwKKyAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lKSkKKworICAgIGRlZiBhc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKHNlbGYsIG1vY2tfZ2VuZXJhdG9yKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZ2VuZXJhdG9yLnlpZWxkZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9ja19nZW5lcmF0b3Iuc3RvcHBlZCkKKworICAgIGRlZiBhc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzTm9FcnJvcihzZWxmLCBtb2NrX2dlbmVyYXRvcik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX2dlbmVyYXRvci55aWVsZGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19nZW5lcmF0b3Iuc3RvcHBlZCkKKworICAgIGRlZiByYWlzZVRlc3RFeGNlcHRpb24oc2VsZik6CisgICAgICAgIHJhaXNlIHNlbGYuVEVTVF9FWENFUFRJT04KKworICAgIGRlZiBhc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLCBtb2NrX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y190eXBlPU5vbmUpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19tYW5hZ2VyLmVudGVyX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfbWFuYWdlci5leGl0X2NhbGxlZCkKKyAgICAgICAgaWYgZXhjX3R5cGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19tYW5hZ2VyLmV4aXRfYXJnc1sxXSwgc2VsZi5URVNUX0VYQ0VQVElPTikKKyAgICAgICAgICAgIGV4Y190eXBlID0gdHlwZShzZWxmLlRFU1RfRVhDRVBUSU9OKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfbWFuYWdlci5leGl0X2FyZ3NbMF0sIGV4Y190eXBlKQorICAgICAgICAjIFRlc3QgdGhlIF9fZXhpdF9fIGFyZ3VtZW50cy4gSXNzdWUgIzc4NTMKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vY2tfbWFuYWdlci5leGl0X2FyZ3NbMV0sIGV4Y190eXBlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vY2tfbWFuYWdlci5leGl0X2FyZ3NbMl0sIE5vbmUpCisKKyAgICBkZWYgYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLCBtb2NrX2dlbmVyYXRvcik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX2dlbmVyYXRvci55aWVsZGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19nZW5lcmF0b3Iuc3RvcHBlZCkKKworCitjbGFzcyBOb25leGNlcHRpb25hbFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBDb250ZXh0bWFuYWdlckFzc2VydGlvbk1peGluKToKKyAgICBkZWYgdGVzdElubGluZUdlbmVyYXRvclN5bnRheChzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RVbmJvdW5kR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBtb2NrID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICB3aXRoIG1vY2s6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2spCisKKyAgICBkZWYgdGVzdElubGluZUdlbmVyYXRvckJvdW5kU3ludGF4KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkgYXMgZm9vOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKGZvbykKKyAgICAgICAgIyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2UnbGwgdHJ5IHRvIGtlZXAgdGhlIGJvdW5kIG5hbWVzIGZyb20gbGVha2luZworICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNOb0Vycm9yKGZvbykKKworICAgIGRlZiB0ZXN0SW5saW5lR2VuZXJhdG9yQm91bmRUb0V4aXN0aW5nVmFyaWFibGUoc2VsZik6CisgICAgICAgIGZvbyA9IE5vbmUKKyAgICAgICAgd2l0aCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpIGFzIGZvbzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhmb28pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c05vRXJyb3IoZm9vKQorCisgICAgZGVmIHRlc3RJbmxpbmVHZW5lcmF0b3JCb3VuZFRvRG90dGVkVmFyaWFibGUoc2VsZik6CisgICAgICAgIHdpdGggbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKSBhcyBzZWxmLmZvbzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhzZWxmLmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzTm9FcnJvcihzZWxmLmZvbykKKworICAgIGRlZiB0ZXN0Qm91bmRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIG1vY2sgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIHdpdGggbW9jayBhcyBmb286CisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMoZm9vKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNOb0Vycm9yKGZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c05vRXJyb3IobW9jaykKKworICAgIGRlZiB0ZXN0TmVzdGVkU2luZ2xlU3RhdGVtZW50cyhzZWxmKToKKyAgICAgICAgbW9ja19hID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICB3aXRoIG1vY2tfYSBhcyBmb286CisgICAgICAgICAgICBtb2NrX2IgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgICAgICB3aXRoIG1vY2tfYiBhcyBiYXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX2EpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX2IpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKGZvbykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMoYmFyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c05vRXJyb3IobW9ja19iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzTm9FcnJvcihiYXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhmb28pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2tfYSkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzTm9FcnJvcihmb28pCisKKworY2xhc3MgTmVzdGVkTm9uZXhjZXB0aW9uYWxUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICBDb250ZXh0bWFuYWdlckFzc2VydGlvbk1peGluKToKKyAgICBkZWYgdGVzdFNpbmdsZUFyZ0lubGluZUdlbmVyYXRvclN5bnRheChzZWxmKToKKyAgICAgICAgd2l0aCBOZXN0ZWQobW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdFNpbmdsZUFyZ0JvdW5kVG9Ob25UdXBsZShzZWxmKToKKyAgICAgICAgbSA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgIyBUaGlzIHdpbGwgYmluZCBhbGwgdGhlIGFyZ3VtZW50cyB0byBuZXN0ZWQoKSBpbnRvIGEgc2luZ2xlIGxpc3QKKyAgICAgICAgIyBhc3NpZ25lZCB0byBmb28uCisgICAgICAgIHdpdGggTmVzdGVkKG0pIGFzIGZvbzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobSkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c05vRXJyb3IobSkKKworICAgIGRlZiB0ZXN0U2luZ2xlQXJnQm91bmRUb1NpbmdsZUVsZW1lbnRQYXJlbnRoZXNpemVkTGlzdChzZWxmKToKKyAgICAgICAgbSA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgIyBUaGlzIHdpbGwgYmluZCBhbGwgdGhlIGFyZ3VtZW50cyB0byBuZXN0ZWQoKSBpbnRvIGEgc2luZ2xlIGxpc3QKKyAgICAgICAgIyBhc3NpZ25lZCB0byBmb28uCisgICAgICAgIHdpdGggTmVzdGVkKG0pIGFzIChmb28pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtKQorCisgICAgZGVmIHRlc3RTaW5nbGVBcmdCb3VuZFRvTXVsdGlwbGVFbGVtZW50VHVwbGVFcnJvcihzZWxmKToKKyAgICAgICAgZGVmIHNob3VsZFRocm93VmFsdWVFcnJvcigpOgorICAgICAgICAgICAgd2l0aCBOZXN0ZWQobW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKSkgYXMgKGZvbywgYmFyKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNob3VsZFRocm93VmFsdWVFcnJvcikKKworICAgIGRlZiB0ZXN0U2luZ2xlQXJnVW5ib3VuZChzZWxmKToKKyAgICAgICAgbW9ja19jb250ZXh0bWFuYWdlciA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgbW9ja19uZXN0ZWQgPSBNb2NrTmVzdGVkKG1vY2tfY29udGV4dG1hbmFnZXIpCisgICAgICAgIHdpdGggbW9ja19uZXN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfY29udGV4dG1hbmFnZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfbmVzdGVkKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtb2NrX2NvbnRleHRtYW5hZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtb2NrX25lc3RlZCkKKworICAgIGRlZiB0ZXN0TXVsdGlwbGVBcmdVbmJvdW5kKHNlbGYpOgorICAgICAgICBtID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBuID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBvID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBtb2NrX25lc3RlZCA9IE1vY2tOZXN0ZWQobSwgbiwgbykKKyAgICAgICAgd2l0aCBtb2NrX25lc3RlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19uZXN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG8pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2tfbmVzdGVkKQorCisgICAgZGVmIHRlc3RNdWx0aXBsZUFyZ0JvdW5kKHNlbGYpOgorICAgICAgICBtb2NrX25lc3RlZCA9IE1vY2tOZXN0ZWQobW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKSwKKyAgICAgICAgICAgIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCksIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkpCisgICAgICAgIHdpdGggbW9ja19uZXN0ZWQgYXMgKG0sIG4sIG8pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKG0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMobikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX25lc3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzTm9FcnJvcihtKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNOb0Vycm9yKG4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c05vRXJyb3IobykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c05vRXJyb3IobW9ja19uZXN0ZWQpCisKKworY2xhc3MgRXhjZXB0aW9uYWxUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgQ29udGV4dG1hbmFnZXJBc3NlcnRpb25NaXhpbik6CisgICAgZGVmIHRlc3RTaW5nbGVSZXNvdXJjZShzZWxmKToKKyAgICAgICAgY20gPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgd2l0aCBjbSBhcyBzZWxmLnJlc291cmNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMoY20pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKHNlbGYucmVzb3VyY2UpCisgICAgICAgICAgICAgICAgc2VsZi5yYWlzZVRlc3RFeGNlcHRpb24oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNob3VsZFRocm93KQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKGNtKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNXaXRoRXJyb3Ioc2VsZi5yZXNvdXJjZSkKKworICAgIGRlZiB0ZXN0RXhjZXB0aW9uTm9ybWFsaXplZChzZWxmKToKKyAgICAgICAgY20gPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgd2l0aCBjbSBhcyBzZWxmLnJlc291cmNlOgorICAgICAgICAgICAgICAgICMgTm90ZSB0aGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IDEgLy8gMCBwcm9kdWNlcyBhbiBleGNlcHRpb24KKyAgICAgICAgICAgICAgICAjIHRoYXQgaXMgbm90IG5vcm1hbGl6ZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzaG91bGRUaHJvdykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihjbSwgWmVyb0RpdmlzaW9uRXJyb3IpCisKKyAgICBkZWYgdGVzdE5lc3RlZFNpbmdsZVN0YXRlbWVudHMoc2VsZik6CisgICAgICAgIG1vY2tfYSA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgbW9ja19iID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBkZWYgc2hvdWxkVGhyb3coKToKKyAgICAgICAgICAgIHdpdGggbW9ja19hIGFzIHNlbGYuZm9vOgorICAgICAgICAgICAgICAgIHdpdGggbW9ja19iIGFzIHNlbGYuYmFyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfYSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX2IpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhzZWxmLmZvbykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKHNlbGYuYmFyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJhaXNlVGVzdEV4Y2VwdGlvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2hvdWxkVGhyb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNXaXRoRXJyb3IobW9ja19hKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKG1vY2tfYikKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYuZm9vKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNXaXRoRXJyb3Ioc2VsZi5iYXIpCisKKyAgICBkZWYgdGVzdE11bHRpcGxlUmVzb3VyY2VzSW5TaW5nbGVTdGF0ZW1lbnQoc2VsZik6CisgICAgICAgIGNtX2EgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIGNtX2IgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIG1vY2tfbmVzdGVkID0gTW9ja05lc3RlZChjbV9hLCBjbV9iKQorICAgICAgICBkZWYgc2hvdWxkVGhyb3coKToKKyAgICAgICAgICAgIHdpdGggbW9ja19uZXN0ZWQgYXMgKHNlbGYucmVzb3VyY2VfYSwgc2VsZi5yZXNvdXJjZV9iKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKGNtX2EpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhjbV9iKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19uZXN0ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKHNlbGYucmVzb3VyY2VfYSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMoc2VsZi5yZXNvdXJjZV9iKQorICAgICAgICAgICAgICAgIHNlbGYucmFpc2VUZXN0RXhjZXB0aW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzaG91bGRUaHJvdykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihjbV9hKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKGNtX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNXaXRoRXJyb3IobW9ja19uZXN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLnJlc291cmNlX2EpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLnJlc291cmNlX2IpCisKKyAgICBkZWYgdGVzdE5lc3RlZEV4Y2VwdGlvbkJlZm9yZUlubmVyU3RhdGVtZW50KHNlbGYpOgorICAgICAgICBtb2NrX2EgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIG1vY2tfYiA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgc2VsZi5iYXIgPSBOb25lCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgd2l0aCBtb2NrX2EgYXMgc2VsZi5mb286CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX2EpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKHNlbGYuZm9vKQorICAgICAgICAgICAgICAgIHNlbGYucmFpc2VUZXN0RXhjZXB0aW9uKCkKKyAgICAgICAgICAgICAgICB3aXRoIG1vY2tfYiBhcyBzZWxmLmJhcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNob3VsZFRocm93KQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKG1vY2tfYSkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYuZm9vKQorCisgICAgICAgICMgVGhlIGlubmVyIHN0YXRlbWVudCBzdHVmZiBzaG91bGQgbmV2ZXIgaGF2ZSBiZWVuIHRvdWNoZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmJhciwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2NrX2IuZW50ZXJfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1vY2tfYi5leGl0X2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrX2IuZXhpdF9hcmdzLCBOb25lKQorCisgICAgZGVmIHRlc3ROZXN0ZWRFeGNlcHRpb25BZnRlcklubmVyU3RhdGVtZW50KHNlbGYpOgorICAgICAgICBtb2NrX2EgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIG1vY2tfYiA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICB3aXRoIG1vY2tfYSBhcyBzZWxmLmZvbzoKKyAgICAgICAgICAgICAgICB3aXRoIG1vY2tfYiBhcyBzZWxmLmJhcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX2EpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19iKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMoc2VsZi5mb28pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhzZWxmLmJhcikKKyAgICAgICAgICAgICAgICBzZWxmLnJhaXNlVGVzdEV4Y2VwdGlvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2hvdWxkVGhyb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNXaXRoRXJyb3IobW9ja19hKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtb2NrX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzTm9FcnJvcihzZWxmLmJhcikKKworICAgIGRlZiB0ZXN0UmFpc2VkU3RvcEl0ZXJhdGlvbjEoc2VsZik6CisgICAgICAgICMgRnJvbSBidWcgMTQ2MjQ4NQorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGNtKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgd2l0aCBjbSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oImZyb20gd2l0aCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgc2hvdWxkVGhyb3cpCisKKyAgICBkZWYgdGVzdFJhaXNlZFN0b3BJdGVyYXRpb24yKHNlbGYpOgorICAgICAgICAjIEZyb20gYnVnIDE0NjI0ODUKKyAgICAgICAgY2xhc3MgY20ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgc2hvdWxkVGhyb3coKToKKyAgICAgICAgICAgIHdpdGggY20oKToKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCJmcm9tIHdpdGgiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHNob3VsZFRocm93KQorCisgICAgZGVmIHRlc3RSYWlzZWRTdG9wSXRlcmF0aW9uMyhzZWxmKToKKyAgICAgICAgIyBBbm90aGVyIHZhcmlhbnQgd2hlcmUgdGhlIGV4Y2VwdGlvbiBoYXNuJ3QgYmVlbiBpbnN0YW50aWF0ZWQKKyAgICAgICAgIyBGcm9tIGJ1ZyAxNzA1MTcwCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgY20oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICB3aXRoIGNtKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgaXRlcihbXSkubmV4dCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgc2hvdWxkVGhyb3cpCisKKyAgICBkZWYgdGVzdFJhaXNlZEdlbmVyYXRvckV4aXQxKHNlbGYpOgorICAgICAgICAjIEZyb20gYnVnIDE0NjI0ODUKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiBjbSgpOgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBkZWYgc2hvdWxkVGhyb3coKToKKyAgICAgICAgICAgIHdpdGggY20oKToKKyAgICAgICAgICAgICAgICByYWlzZSBHZW5lcmF0b3JFeGl0KCJmcm9tIHdpdGgiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEdlbmVyYXRvckV4aXQsIHNob3VsZFRocm93KQorCisgICAgZGVmIHRlc3RSYWlzZWRHZW5lcmF0b3JFeGl0MihzZWxmKToKKyAgICAgICAgIyBGcm9tIGJ1ZyAxNDYyNDg1CisgICAgICAgIGNsYXNzIGNtIChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgd2l0aCBjbSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIEdlbmVyYXRvckV4aXQoImZyb20gd2l0aCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoR2VuZXJhdG9yRXhpdCwgc2hvdWxkVGhyb3cpCisKKyAgICBkZWYgdGVzdEVycm9yc0luQm9vbChzZWxmKToKKyAgICAgICAgIyBpc3N1ZTQ1ODk6IF9fZXhpdF9fIHJldHVybiBjb2RlIG1heSByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgIyB3aGVuIGxvb2tpbmcgYXQgaXRzIHRydXRoIHZhbHVlLgorCisgICAgICAgIGNsYXNzIGNtKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYm9vbF9jb252ZXJzaW9uKToKKyAgICAgICAgICAgICAgICBjbGFzcyBCb29sOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9vbF9jb252ZXJzaW9uKCkKKyAgICAgICAgICAgICAgICBzZWxmLmV4aXRfcmVzdWx0ID0gQm9vbCgpCisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhpdF9yZXN1bHQKKworICAgICAgICBkZWYgdHJ1ZUFzQm9vbCgpOgorICAgICAgICAgICAgd2l0aCBjbShsYW1iZGE6IFRydWUpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIE5PVCBzZWUgdGhpcyIpCisgICAgICAgIHRydWVBc0Jvb2woKQorCisgICAgICAgIGRlZiBmYWxzZUFzQm9vbCgpOgorICAgICAgICAgICAgd2l0aCBjbShsYW1iZGE6IEZhbHNlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCByYWlzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBmYWxzZUFzQm9vbCkKKworICAgICAgICBkZWYgZmFpbEFzQm9vbCgpOgorICAgICAgICAgICAgd2l0aCBjbShsYW1iZGE6IDEgLy8gMCk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgTk9UIHNlZSB0aGlzIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGZhaWxBc0Jvb2wpCisKKworY2xhc3MgTm9uTG9jYWxGbG93Q29udHJvbFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0V2l0aEJyZWFrKHNlbGYpOgorICAgICAgICBjb3VudGVyID0gMAorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgY291bnRlciArPSAxCisgICAgICAgICAgICB3aXRoIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgY291bnRlciArPSAxMAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBjb3VudGVyICs9IDEwMCAjIE5vdCByZWFjaGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRlciwgMTEpCisKKyAgICBkZWYgdGVzdFdpdGhDb250aW51ZShzZWxmKToKKyAgICAgICAgY291bnRlciA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGNvdW50ZXIgKz0gMQorICAgICAgICAgICAgaWYgY291bnRlciA+IDI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHdpdGggbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgICAgICBjb3VudGVyICs9IDEwCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvdW50ZXIgKz0gMTAwICMgTm90IHJlYWNoZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudGVyLCAxMikKKworICAgIGRlZiB0ZXN0V2l0aFJldHVybihzZWxmKToKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgY291bnRlciA9IDAKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgY291bnRlciArPSAxCisgICAgICAgICAgICAgICAgd2l0aCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgICAgICAgICBjb3VudGVyICs9IDEwCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGVyCisgICAgICAgICAgICAgICAgY291bnRlciArPSAxMDAgIyBOb3QgcmVhY2hlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCAxMSkKKworICAgIGRlZiB0ZXN0V2l0aFlpZWxkKHNlbGYpOgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aXRoIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgeWllbGQgMTIKKyAgICAgICAgICAgICAgICB5aWVsZCAxMworICAgICAgICB4ID0gbGlzdChnZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBbMTIsIDEzXSkKKworICAgIGRlZiB0ZXN0V2l0aFJhaXNlKHNlbGYpOgorICAgICAgICBjb3VudGVyID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb3VudGVyICs9IDEKKyAgICAgICAgICAgIHdpdGggbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgICAgICBjb3VudGVyICs9IDEwCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBjb3VudGVyICs9IDEwMCAjIE5vdCByZWFjaGVkCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50ZXIsIDExKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgUnVudGltZUVycm9yIikKKworCitjbGFzcyBBc3NpZ25tZW50VGFyZ2V0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RTaW5nbGVDb21wbGV4VGFyZ2V0KHNlbGYpOgorICAgICAgICB0YXJnZXRzID0gezE6IFswLCAxLCAyXX0KKyAgICAgICAgd2l0aCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpIGFzIHRhcmdldHNbMV1bMF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmdldHMua2V5cygpLCBbMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmdldHNbMV1bMF0uX19jbGFzc19fLCBNb2NrUmVzb3VyY2UpCisgICAgICAgIHdpdGggbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKSBhcyB0YXJnZXRzLnZhbHVlcygpWzBdWzFdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRzLmtleXMoKSwgWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRzWzFdWzFdLl9fY2xhc3NfXywgTW9ja1Jlc291cmNlKQorICAgICAgICB3aXRoIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkgYXMgdGFyZ2V0c1syXToKKyAgICAgICAgICAgIGtleXMgPSB0YXJnZXRzLmtleXMoKQorICAgICAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgWzEsIDJdKQorICAgICAgICBjbGFzcyBDOiBwYXNzCisgICAgICAgIGJsYWggPSBDKCkKKyAgICAgICAgd2l0aCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpIGFzIGJsYWguZm9vOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKGJsYWgsICJmb28iKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0TXVsdGlwbGVDb21wbGV4VGFyZ2V0cyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6IHJldHVybiAxLCAyLCAzCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOiBwYXNzCisgICAgICAgIHRhcmdldHMgPSB7MTogWzAsIDEsIDJdfQorICAgICAgICB3aXRoIEMoKSBhcyAodGFyZ2V0c1sxXVswXSwgdGFyZ2V0c1sxXVsxXSwgdGFyZ2V0c1sxXVsyXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmdldHMsIHsxOiBbMSwgMiwgM119KQorICAgICAgICB3aXRoIEMoKSBhcyAodGFyZ2V0cy52YWx1ZXMoKVswXVsyXSwgdGFyZ2V0cy52YWx1ZXMoKVswXVsxXSwgdGFyZ2V0cy52YWx1ZXMoKVswXVswXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmdldHMsIHsxOiBbMywgMiwgMV19KQorICAgICAgICB3aXRoIEMoKSBhcyAodGFyZ2V0c1sxXSwgdGFyZ2V0c1syXSwgdGFyZ2V0c1szXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmdldHMsIHsxOiAxLCAyOiAyLCAzOiAzfSkKKyAgICAgICAgY2xhc3MgQjogcGFzcworICAgICAgICBibGFoID0gQigpCisgICAgICAgIHdpdGggQygpIGFzIChibGFoLm9uZSwgYmxhaC50d28sIGJsYWgudGhyZWUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibGFoLm9uZSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmxhaC50d28sIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJsYWgudGhyZWUsIDMpCisKKworY2xhc3MgRXhpdFN3YWxsb3dzRXhjZXB0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RFeGl0VHJ1ZVN3YWxsb3dzRXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBjbGFzcyBBZnJpY2FuU3dhbGxvdzoKKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6IHJldHVybiBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQWZyaWNhblN3YWxsb3coKToKKyAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJaZXJvRGl2aXNpb25FcnJvciBzaG91bGQgaGF2ZSBiZWVuIHN3YWxsb3dlZCIpCisKKyAgICBkZWYgdGVzdEV4aXRGYWxzZURvZXNudFN3YWxsb3dFeGNlcHRpb24oc2VsZik6CisgICAgICAgIGNsYXNzIEV1cm9wZWFuU3dhbGxvdzoKKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6IHJldHVybiBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIEV1cm9wZWFuU3dhbGxvdygpOgorICAgICAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlplcm9EaXZpc2lvbkVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKKworCitjbGFzcyBOZXN0ZWRXaXRoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIER1bW15KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT1Ob25lLCBnb2JibGU9RmFsc2UpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYKKyAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgc2VsZi5nb2JibGUgPSBnb2JibGUKKyAgICAgICAgICAgIHNlbGYuZW50ZXJfY2FsbGVkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuZXhpdF9jYWxsZWQgPSBGYWxzZQorCisgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICBzZWxmLmVudGVyX2NhbGxlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKyAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CisgICAgICAgICAgICBzZWxmLmV4aXRfY2FsbGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5leGNfaW5mbyA9IGV4Y19pbmZvCisgICAgICAgICAgICBpZiBzZWxmLmdvYmJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgY2xhc3MgSW5pdFJhaXNlcyhvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6IHJhaXNlIFJ1bnRpbWVFcnJvcigpCisKKyAgICBjbGFzcyBFbnRlclJhaXNlcyhvYmplY3QpOgorICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOiByYWlzZSBSdW50aW1lRXJyb3IoKQorICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKTogcGFzcworCisgICAgY2xhc3MgRXhpdFJhaXNlcyhvYmplY3QpOgorICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOiBwYXNzCisgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOiByYWlzZSBSdW50aW1lRXJyb3IoKQorCisgICAgZGVmIHRlc3ROb0V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5EdW1teSgpIGFzIGEsIHNlbGYuRHVtbXkoKSBhcyBiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZW50ZXJfY2FsbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZW50ZXJfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5leGl0X2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZXhpdF9jYWxsZWQpCisKKyAgICBkZWYgdGVzdEV4Y2VwdGlvbkluRXhwckxpc3Qoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5EdW1teSgpIGFzIGEsIHNlbGYuSW5pdFJhaXNlcygpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5lbnRlcl9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmV4aXRfY2FsbGVkKQorCisgICAgZGVmIHRlc3RFeGNlcHRpb25JbkVudGVyKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuRHVtbXkoKSBhcyBhLCBzZWxmLkVudGVyUmFpc2VzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdib2R5IG9mIGJhZCB3aXRoIGV4ZWN1dGVkJykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnUnVudGltZUVycm9yIG5vdCByZXJhaXNlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmVudGVyX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZXhpdF9jYWxsZWQpCisKKyAgICBkZWYgdGVzdEV4Y2VwdGlvbkluRXhpdChzZWxmKToKKyAgICAgICAgYm9keV9leGVjdXRlZCA9IEZhbHNlCisgICAgICAgIHdpdGggc2VsZi5EdW1teShnb2JibGU9VHJ1ZSkgYXMgYSwgc2VsZi5FeGl0UmFpc2VzKCk6CisgICAgICAgICAgICBib2R5X2V4ZWN1dGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5lbnRlcl9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmV4aXRfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9keV9leGVjdXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLmV4Y19pbmZvWzBdLCBOb25lKQorCisgICAgZGVmIHRlc3RFbnRlclJldHVybnNUdXBsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLkR1bW15KHZhbHVlPSgxLDIpKSBhcyAoYTEsIGEyKSwgXAorICAgICAgICAgICAgIHNlbGYuRHVtbXkodmFsdWU9KDEwLCAyMCkpIGFzIChiMSwgYjIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgYTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCBiMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjAsIGIyKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEZhaWx1cmVUZXN0Q2FzZSwgTm9uZXhjZXB0aW9uYWxUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgTmVzdGVkTm9uZXhjZXB0aW9uYWxUZXN0Q2FzZSwgRXhjZXB0aW9uYWxUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgTm9uTG9jYWxGbG93Q29udHJvbFRlc3RDYXNlLAorICAgICAgICAgICAgICAgICBBc3NpZ25tZW50VGFyZ2V0VGVzdENhc2UsCisgICAgICAgICAgICAgICAgIEV4aXRTd2FsbG93c0V4Y2VwdGlvblRlc3RDYXNlLAorICAgICAgICAgICAgICAgICBOZXN0ZWRXaXRoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3dzZ2lyZWYucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDRjODYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5CkBAIC0wLDAgKzEsNTYwIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMgICAgIyBCYWNrd2FyZCBjb21wYXQgZm9yIDIuMQorZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKK2Zyb20gd3NnaXJlZi51dGlsIGltcG9ydCBzZXR1cF90ZXN0aW5nX2RlZmF1bHRzCitmcm9tIHdzZ2lyZWYuaGVhZGVycyBpbXBvcnQgSGVhZGVycworZnJvbSB3c2dpcmVmLmhhbmRsZXJzIGltcG9ydCBCYXNlSGFuZGxlciwgQmFzZUNHSUhhbmRsZXIKK2Zyb20gd3NnaXJlZiBpbXBvcnQgdXRpbAorZnJvbSB3c2dpcmVmLnZhbGlkYXRlIGltcG9ydCB2YWxpZGF0b3IKK2Zyb20gd3NnaXJlZi5zaW1wbGVfc2VydmVyIGltcG9ydCBXU0dJU2VydmVyLCBXU0dJUmVxdWVzdEhhbmRsZXIsIGRlbW9fYXBwCitmcm9tIHdzZ2lyZWYuc2ltcGxlX3NlcnZlciBpbXBvcnQgbWFrZV9zZXJ2ZXIKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIFNvY2tldFNlcnZlciBpbXBvcnQgQmFzZVNlcnZlcgoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgTW9ja1NlcnZlcihXU0dJU2VydmVyKToKKyAgICAiIiJOb24tc29ja2V0IEhUVFAgc2VydmVyIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyX2FkZHJlc3MsIFJlcXVlc3RIYW5kbGVyQ2xhc3MpOgorICAgICAgICBCYXNlU2VydmVyLl9faW5pdF9fKHNlbGYsIHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzKQorICAgICAgICBzZWxmLnNlcnZlcl9iaW5kKCkKKworICAgIGRlZiBzZXJ2ZXJfYmluZChzZWxmKToKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuc2VydmVyX2FkZHJlc3MKKyAgICAgICAgc2VsZi5zZXJ2ZXJfbmFtZSA9IGhvc3QKKyAgICAgICAgc2VsZi5zZXJ2ZXJfcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5zZXR1cF9lbnZpcm9uKCkKKworCitjbGFzcyBNb2NrSGFuZGxlcihXU0dJUmVxdWVzdEhhbmRsZXIpOgorICAgICIiIk5vbi1zb2NrZXQgSFRUUCBoYW5kbGVyIiIiCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBzZWxmLnJlcXVlc3QKKyAgICAgICAgc2VsZi5yZmlsZSwgc2VsZi53ZmlsZSA9IHNlbGYuY29ubmVjdGlvbgorCisgICAgZGVmIGZpbmlzaChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2RlZiBoZWxsb19hcHAoZW52aXJvbixzdGFydF9yZXNwb25zZSk6CisgICAgc3RhcnRfcmVzcG9uc2UoIjIwMCBPSyIsIFsKKyAgICAgICAgKCdDb250ZW50LVR5cGUnLCd0ZXh0L3BsYWluJyksCisgICAgICAgICgnRGF0ZScsJ01vbiwgMDUgSnVuIDIwMDYgMTg6NDk6NTQgR01UJykKKyAgICBdKQorICAgIHJldHVybiBbIkhlbGxvLCB3b3JsZCEiXQorCitkZWYgcnVuX2Ftb2NrKGFwcD1oZWxsb19hcHAsIGRhdGE9IkdFVCAvIEhUVFAvMS4wXG5cbiIpOgorICAgIHNlcnZlciA9IG1ha2Vfc2VydmVyKCIiLCA4MCwgYXBwLCBNb2NrU2VydmVyLCBNb2NrSGFuZGxlcikKKyAgICBpbnAsIG91dCwgZXJyLCBvbGRlcnIgPSBTdHJpbmdJTyhkYXRhKSwgU3RyaW5nSU8oKSwgU3RyaW5nSU8oKSwgc3lzLnN0ZGVycgorICAgIHN5cy5zdGRlcnIgPSBlcnIKKworICAgIHRyeToKKyAgICAgICAgc2VydmVyLmZpbmlzaF9yZXF1ZXN0KChpbnAsb3V0KSwgKCIxMjcuMC4wLjEiLDg4ODgpKQorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRlcnIgPSBvbGRlcnIKKworICAgIHJldHVybiBvdXQuZ2V0dmFsdWUoKSwgZXJyLmdldHZhbHVlKCkKKworCitkZWYgY29tcGFyZV9nZW5lcmljX2l0ZXIobWFrZV9pdCxtYXRjaCk6CisgICAgIiIiVXRpbGl0eSB0byBjb21wYXJlIGEgZ2VuZXJpYyAyLjEvMi4yKyBpdGVyYXRvciB3aXRoIGFuIGl0ZXJhYmxlCisKKyAgICBJZiBydW5uaW5nIHVuZGVyIFB5dGhvbiAyLjIrLCB0aGlzIHRlc3RzIHRoZSBpdGVyYXRvciB1c2luZyBpdGVyKCkvbmV4dCgpLAorICAgIGFzIHdlbGwgYXMgX19nZXRpdGVtX18uICAnbWFrZV9pdCcgbXVzdCBiZSBhIGZ1bmN0aW9uIHJldHVybmluZyBhIGZyZXNoCisgICAgaXRlcmF0b3IgdG8gYmUgdGVzdGVkIChzaW5jZSB0aGlzIG1heSB0ZXN0IHRoZSBpdGVyYXRvciB0d2ljZSkuIiIiCisKKyAgICBpdCA9IG1ha2VfaXQoKQorICAgIG4gPSAwCisgICAgZm9yIGl0ZW0gaW4gbWF0Y2g6CisgICAgICAgIGlmIG5vdCBpdFtuXT09aXRlbTogcmFpc2UgQXNzZXJ0aW9uRXJyb3IKKyAgICAgICAgbis9MQorICAgIHRyeToKKyAgICAgICAgaXRbbl0KKyAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJUb28gbWFueSBpdGVtcyBmcm9tIF9fZ2V0aXRlbV9fIixpdCkKKworICAgIHRyeToKKyAgICAgICAgaXRlciwgU3RvcEl0ZXJhdGlvbgorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICAjIE9ubHkgdGVzdCBpdGVyIG1vZGUgdW5kZXIgMi4yKworICAgICAgICBpdCA9IG1ha2VfaXQoKQorICAgICAgICBpZiBub3QgaXRlcihpdCkgaXMgaXQ6IHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgICAgIGZvciBpdGVtIGluIG1hdGNoOgorICAgICAgICAgICAgaWYgbm90IGl0Lm5leHQoKT09aXRlbTogcmFpc2UgQXNzZXJ0aW9uRXJyb3IKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaXQubmV4dCgpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRvbyBtYW55IGl0ZW1zIGZyb20gLm5leHQoKSIsaXQpCisKKworY2xhc3MgSW50ZWdyYXRpb25UZXN0cyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfaGVsbG8oc2VsZiwgb3V0LCBoYXNfbGVuZ3RoPVRydWUpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwKKyAgICAgICAgICAgICJIVFRQLzEuMCAyMDAgT0tcclxuIgorICAgICAgICAgICAgIlNlcnZlcjogV1NHSVNlcnZlci8wLjEgUHl0aG9uLyIrc3lzLnZlcnNpb24uc3BsaXQoKVswXSsiXHJcbiIKKyAgICAgICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cclxuIgorICAgICAgICAgICAgIkRhdGU6IE1vbiwgMDUgSnVuIDIwMDYgMTg6NDk6NTQgR01UXHJcbiIgKworICAgICAgICAgICAgKGhhc19sZW5ndGggYW5kICAiQ29udGVudC1MZW5ndGg6IDEzXHJcbiIgb3IgIiIpICsKKyAgICAgICAgICAgICJcclxuIgorICAgICAgICAgICAgIkhlbGxvLCB3b3JsZCEiCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3BsYWluX2hlbGxvKHNlbGYpOgorICAgICAgICBvdXQsIGVyciA9IHJ1bl9hbW9jaygpCisgICAgICAgIHNlbGYuY2hlY2tfaGVsbG8ob3V0KQorCisgICAgZGVmIHRlc3RfdmFsaWRhdGVkX2hlbGxvKHNlbGYpOgorICAgICAgICBvdXQsIGVyciA9IHJ1bl9hbW9jayh2YWxpZGF0b3IoaGVsbG9fYXBwKSkKKyAgICAgICAgIyB0aGUgbWlkZGxld2FyZSBkb2Vzbid0IHN1cHBvcnQgbGVuKCksIHNvIGNvbnRlbnQtbGVuZ3RoIGlzbid0IHRoZXJlCisgICAgICAgIHNlbGYuY2hlY2tfaGVsbG8ob3V0LCBoYXNfbGVuZ3RoPUZhbHNlKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3ZhbGlkYXRpb25fZXJyb3Ioc2VsZik6CisgICAgICAgIGRlZiBiYWRfYXBwKGVudmlyb24sc3RhcnRfcmVzcG9uc2UpOgorICAgICAgICAgICAgc3RhcnRfcmVzcG9uc2UoIjIwMCBPSyIsICgnQ29udGVudC1UeXBlJywndGV4dC9wbGFpbicpKQorICAgICAgICAgICAgcmV0dXJuIFsiSGVsbG8sIHdvcmxkISJdCisgICAgICAgIG91dCwgZXJyID0gcnVuX2Ftb2NrKHZhbGlkYXRvcihiYWRfYXBwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbmRzd2l0aCgKKyAgICAgICAgICAgICJBIHNlcnZlciBlcnJvciBvY2N1cnJlZC4gIFBsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLiIKKyAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGVyci5zcGxpdGxpbmVzKClbLTJdLAorICAgICAgICAgICAgIkFzc2VydGlvbkVycm9yOiBIZWFkZXJzICgoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJykpIG11c3QiCisgICAgICAgICAgICAiIGJlIG9mIHR5cGUgbGlzdDogPHR5cGUgJ3R1cGxlJz4iCisgICAgICAgICkKKworCitjbGFzcyBVdGlsaXR5VGVzdHMoVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrU2hpZnQoc2VsZixzbl9pbixwaV9pbixwYXJ0LHNuX291dCxwaV9vdXQpOgorICAgICAgICBlbnYgPSB7J1NDUklQVF9OQU1FJzpzbl9pbiwnUEFUSF9JTkZPJzpwaV9pbn0KKyAgICAgICAgdXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzKGVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlsLnNoaWZ0X3BhdGhfaW5mbyhlbnYpLHBhcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52WydQQVRIX0lORk8nXSxwaV9vdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52WydTQ1JJUFRfTkFNRSddLHNuX291dCkKKyAgICAgICAgcmV0dXJuIGVudgorCisgICAgZGVmIGNoZWNrRGVmYXVsdChzZWxmLCBrZXksIHZhbHVlLCBhbHQ9Tm9uZSk6CisgICAgICAgICMgQ2hlY2sgZGVmYXVsdGluZyB3aGVuIGVtcHR5CisgICAgICAgIGVudiA9IHt9CisgICAgICAgIHV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0cyhlbnYpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIFN0cmluZ0lPKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnZba2V5XSwgU3RyaW5nSU8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudltrZXldLCB2YWx1ZSkKKworICAgICAgICAjIENoZWNrIGV4aXN0aW5nIHZhbHVlCisgICAgICAgIGVudiA9IHtrZXk6YWx0fQorICAgICAgICB1dGlsLnNldHVwX3Rlc3RpbmdfZGVmYXVsdHMoZW52KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZW52W2tleV0gaXMgYWx0KQorCisgICAgZGVmIGNoZWNrQ3Jvc3NEZWZhdWx0KHNlbGYsa2V5LHZhbHVlLCoqa3cpOgorICAgICAgICB1dGlsLnNldHVwX3Rlc3RpbmdfZGVmYXVsdHMoa3cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3dba2V5XSx2YWx1ZSkKKworICAgIGRlZiBjaGVja0FwcFVSSShzZWxmLHVyaSwqKmt3KToKKyAgICAgICAgdXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzKGt3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHV0aWwuYXBwbGljYXRpb25fdXJpKGt3KSx1cmkpCisKKyAgICBkZWYgY2hlY2tSZXFVUkkoc2VsZix1cmkscXVlcnk9MSwqKmt3KToKKyAgICAgICAgdXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzKGt3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHV0aWwucmVxdWVzdF91cmkoa3cscXVlcnkpLHVyaSkKKworICAgIGRlZiBjaGVja0ZXKHNlbGYsdGV4dCxzaXplLG1hdGNoKToKKworICAgICAgICBkZWYgbWFrZV9pdCh0ZXh0PXRleHQsc2l6ZT1zaXplKToKKyAgICAgICAgICAgIHJldHVybiB1dGlsLkZpbGVXcmFwcGVyKFN0cmluZ0lPKHRleHQpLHNpemUpCisKKyAgICAgICAgY29tcGFyZV9nZW5lcmljX2l0ZXIobWFrZV9pdCxtYXRjaCkKKworICAgICAgICBpdCA9IG1ha2VfaXQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGl0LmZpbGVsaWtlLmNsb3NlZCkKKworICAgICAgICBmb3IgaXRlbSBpbiBpdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGl0LmZpbGVsaWtlLmNsb3NlZCkKKworICAgICAgICBpdC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpdC5maWxlbGlrZS5jbG9zZWQpCisKKyAgICBkZWYgdGVzdFNpbXBsZVNoaWZ0cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja1NoaWZ0KCcnLCcvJywgJycsICcvJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnJywnL3gnLCAneCcsICcveCcsICcnKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy8nLCcnLCBOb25lLCAnLycsICcnKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy9hJywnL3gveScsICd4JywgJy9hL3gnLCAnL3knKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy9hJywnL3gvJywgICd4JywgJy9hL3gnLCAnLycpCisKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZWRTaGlmdHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnL2EvYicsICcvLi4veScsICcuLicsICcvYScsICcveScpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnJywgJy8uLi95JywgJy4uJywgJycsICcveScpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnL2EvYicsICcvL3knLCAneScsICcvYS9iL3knLCAnJykKKyAgICAgICAgc2VsZi5jaGVja1NoaWZ0KCcvYS9iJywgJy8veS8nLCAneScsICcvYS9iL3knLCAnLycpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnL2EvYicsICcvLi95JywgJ3knLCAnL2EvYi95JywgJycpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnL2EvYicsICcvLi95LycsICd5JywgJy9hL2IveScsICcvJykKKyAgICAgICAgc2VsZi5jaGVja1NoaWZ0KCcvYS9iJywgJy8vLy4vLi4vL3kvLi8vJywgJy4uJywgJy9hJywgJy95LycpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnL2EvYicsICcvLy8nLCAnJywgJy9hL2IvJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnL2EvYicsICcvLi8vJywgJycsICcvYS9iLycsICcnKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy9hL2InLCAnL3gvLycsICd4JywgJy9hL2IveCcsICcvJykKKyAgICAgICAgc2VsZi5jaGVja1NoaWZ0KCcvYS9iJywgJy8uJywgTm9uZSwgJy9hL2InLCAnJykKKworICAgIGRlZiB0ZXN0RGVmYXVsdHMoc2VsZik6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIFsKKyAgICAgICAgICAgICgnU0VSVkVSX05BTUUnLCcxMjcuMC4wLjEnKSwKKyAgICAgICAgICAgICgnU0VSVkVSX1BPUlQnLCAnODAnKSwKKyAgICAgICAgICAgICgnU0VSVkVSX1BST1RPQ09MJywnSFRUUC8xLjAnKSwKKyAgICAgICAgICAgICgnSFRUUF9IT1NUJywnMTI3LjAuMC4xJyksCisgICAgICAgICAgICAoJ1JFUVVFU1RfTUVUSE9EJywnR0VUJyksCisgICAgICAgICAgICAoJ1NDUklQVF9OQU1FJywnJyksCisgICAgICAgICAgICAoJ1BBVEhfSU5GTycsJy8nKSwKKyAgICAgICAgICAgICgnd3NnaS52ZXJzaW9uJywgKDEsMCkpLAorICAgICAgICAgICAgKCd3c2dpLnJ1bl9vbmNlJywgMCksCisgICAgICAgICAgICAoJ3dzZ2kubXVsdGl0aHJlYWQnLCAwKSwKKyAgICAgICAgICAgICgnd3NnaS5tdWx0aXByb2Nlc3MnLCAwKSwKKyAgICAgICAgICAgICgnd3NnaS5pbnB1dCcsIFN0cmluZ0lPKCIiKSksCisgICAgICAgICAgICAoJ3dzZ2kuZXJyb3JzJywgU3RyaW5nSU8oKSksCisgICAgICAgICAgICAoJ3dzZ2kudXJsX3NjaGVtZScsJ2h0dHAnKSwKKyAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tEZWZhdWx0KGtleSx2YWx1ZSkKKworICAgIGRlZiB0ZXN0Q3Jvc3NEZWZhdWx0cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja0Nyb3NzRGVmYXVsdCgnSFRUUF9IT1NUJywiZm9vLmJhciIsU0VSVkVSX05BTUU9ImZvby5iYXIiKQorICAgICAgICBzZWxmLmNoZWNrQ3Jvc3NEZWZhdWx0KCd3c2dpLnVybF9zY2hlbWUnLCJodHRwcyIsSFRUUFM9Im9uIikKKyAgICAgICAgc2VsZi5jaGVja0Nyb3NzRGVmYXVsdCgnd3NnaS51cmxfc2NoZW1lJywiaHR0cHMiLEhUVFBTPSIxIikKKyAgICAgICAgc2VsZi5jaGVja0Nyb3NzRGVmYXVsdCgnd3NnaS51cmxfc2NoZW1lJywiaHR0cHMiLEhUVFBTPSJ5ZXMiKQorICAgICAgICBzZWxmLmNoZWNrQ3Jvc3NEZWZhdWx0KCd3c2dpLnVybF9zY2hlbWUnLCJodHRwIixIVFRQUz0iZm9vIikKKyAgICAgICAgc2VsZi5jaGVja0Nyb3NzRGVmYXVsdCgnU0VSVkVSX1BPUlQnLCI4MCIsSFRUUFM9ImZvbyIpCisgICAgICAgIHNlbGYuY2hlY2tDcm9zc0RlZmF1bHQoJ1NFUlZFUl9QT1JUJywiNDQzIixIVFRQUz0ib24iKQorCisgICAgZGVmIHRlc3RHdWVzc1NjaGVtZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlsLmd1ZXNzX3NjaGVtZSh7fSksICJodHRwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlsLmd1ZXNzX3NjaGVtZSh7J0hUVFBTJzoiZm9vIn0pLCAiaHR0cCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbC5ndWVzc19zY2hlbWUoeydIVFRQUyc6Im9uIn0pLCAiaHR0cHMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHV0aWwuZ3Vlc3Nfc2NoZW1lKHsnSFRUUFMnOiJ5ZXMifSksICJodHRwcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbC5ndWVzc19zY2hlbWUoeydIVFRQUyc6IjEifSksICJodHRwcyIpCisKKyAgICBkZWYgdGVzdEFwcFVSSXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tBcHBVUkkoImh0dHA6Ly8xMjcuMC4wLjEvIikKKyAgICAgICAgc2VsZi5jaGVja0FwcFVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtIiwgU0NSSVBUX05BTUU9Ii9zcGFtIikKKyAgICAgICAgc2VsZi5jaGVja0FwcFVSSSgiaHR0cDovL3NwYW0uZXhhbXBsZS5jb206MjA3MS8iLAorICAgICAgICAgICAgSFRUUF9IT1NUPSJzcGFtLmV4YW1wbGUuY29tOjIwNzEiLCBTRVJWRVJfUE9SVD0iMjA3MSIpCisgICAgICAgIHNlbGYuY2hlY2tBcHBVUkkoImh0dHA6Ly9zcGFtLmV4YW1wbGUuY29tLyIsCisgICAgICAgICAgICBTRVJWRVJfTkFNRT0ic3BhbS5leGFtcGxlLmNvbSIpCisgICAgICAgIHNlbGYuY2hlY2tBcHBVUkkoImh0dHA6Ly8xMjcuMC4wLjEvIiwKKyAgICAgICAgICAgIEhUVFBfSE9TVD0iMTI3LjAuMC4xIiwgU0VSVkVSX05BTUU9InNwYW0uZXhhbXBsZS5jb20iKQorICAgICAgICBzZWxmLmNoZWNrQXBwVVJJKCJodHRwczovLzEyNy4wLjAuMS8iLCBIVFRQUz0ib24iKQorICAgICAgICBzZWxmLmNoZWNrQXBwVVJJKCJodHRwOi8vMTI3LjAuMC4xOjgwMDAvIiwgU0VSVkVSX1BPUlQ9IjgwMDAiLAorICAgICAgICAgICAgSFRUUF9IT1NUPU5vbmUpCisKKyAgICBkZWYgdGVzdFJlcVVSSXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tSZXFVUkkoImh0dHA6Ly8xMjcuMC4wLjEvIikKKyAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtIiwgU0NSSVBUX05BTUU9Ii9zcGFtIikKKyAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtIiwKKyAgICAgICAgICAgIFNDUklQVF9OQU1FPSIvc3BhbW1pdHkiLCBQQVRIX0lORk89Ii9zcGFtIikKKyAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtO2hhbSIsCisgICAgICAgICAgICBTQ1JJUFRfTkFNRT0iL3NwYW1taXR5IiwgUEFUSF9JTkZPPSIvc3BhbTtoYW0iKQorICAgICAgICBzZWxmLmNoZWNrUmVxVVJJKCJodHRwOi8vMTI3LjAuMC4xL3NwYW1taXR5L3NwYW07Y29va2llPTEyMzQsNTY3OCIsCisgICAgICAgICAgICBTQ1JJUFRfTkFNRT0iL3NwYW1taXR5IiwgUEFUSF9JTkZPPSIvc3BhbTtjb29raWU9MTIzNCw1Njc4IikKKyAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtP3NheT1uaSIsCisgICAgICAgICAgICBTQ1JJUFRfTkFNRT0iL3NwYW1taXR5IiwgUEFUSF9JTkZPPSIvc3BhbSIsUVVFUllfU1RSSU5HPSJzYXk9bmkiKQorICAgICAgICBzZWxmLmNoZWNrUmVxVVJJKCJodHRwOi8vMTI3LjAuMC4xL3NwYW1taXR5L3NwYW0iLCAwLAorICAgICAgICAgICAgU0NSSVBUX05BTUU9Ii9zcGFtbWl0eSIsIFBBVEhfSU5GTz0iL3NwYW0iLFFVRVJZX1NUUklORz0ic2F5PW5pIikKKworICAgIGRlZiB0ZXN0RmlsZVdyYXBwZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tGVygieHl6Iio1MCwgMTIwLCBbInh5eiIqNDAsInh5eiIqMTBdKQorCisgICAgZGVmIHRlc3RIb3BCeUhvcChzZWxmKToKKyAgICAgICAgZm9yIGhvcCBpbiAoCisgICAgICAgICAgICAiQ29ubmVjdGlvbiBLZWVwLUFsaXZlIFByb3h5LUF1dGhlbnRpY2F0ZSBQcm94eS1BdXRob3JpemF0aW9uICIKKyAgICAgICAgICAgICJURSBUcmFpbGVycyBUcmFuc2Zlci1FbmNvZGluZyBVcGdyYWRlIgorICAgICAgICApLnNwbGl0KCk6CisgICAgICAgICAgICBmb3IgYWx0IGluIGhvcCwgaG9wLnRpdGxlKCksIGhvcC51cHBlcigpLCBob3AubG93ZXIoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodXRpbC5pc19ob3BfYnlfaG9wKGFsdCkpCisKKyAgICAgICAgIyBOb3QgY29tcHJlaGVuc2l2ZSwganVzdCBhIGZldyByYW5kb20gaGVhZGVyIG5hbWVzCisgICAgICAgIGZvciBob3AgaW4gKAorICAgICAgICAgICAgIkFjY2VwdCBDYWNoZS1Db250cm9sIERhdGUgUHJhZ21hIFRyYWlsZXIgVmlhIFdhcm5pbmciCisgICAgICAgICkuc3BsaXQoKToKKyAgICAgICAgICAgIGZvciBhbHQgaW4gaG9wLCBob3AudGl0bGUoKSwgaG9wLnVwcGVyKCksIGhvcC5sb3dlcigpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXRpbC5pc19ob3BfYnlfaG9wKGFsdCkpCisKK2NsYXNzIEhlYWRlclRlc3RzKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0TWFwcGluZ0ludGVyZmFjZShzZWxmKToKKyAgICAgICAgdGVzdCA9IFsoJ3gnLCd5JyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEhlYWRlcnMoW10pKSwwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihIZWFkZXJzKHRlc3RbOl0pKSwxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEhlYWRlcnModGVzdFs6XSkua2V5cygpLCBbJ3gnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIZWFkZXJzKHRlc3RbOl0pLnZhbHVlcygpLCBbJ3knXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIZWFkZXJzKHRlc3RbOl0pLml0ZW1zKCksIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoSGVhZGVycyh0ZXN0KS5pdGVtcygpIGlzIHRlc3QpICAjIG11c3QgYmUgY29weSEKKworICAgICAgICBoPUhlYWRlcnMoW10pCisgICAgICAgIGRlbCBoWydmb28nXSAgICMgc2hvdWxkIG5vdCByYWlzZSBhbiBlcnJvcgorCisgICAgICAgIGhbJ0ZvbyddID0gJ2JhcicKKyAgICAgICAgZm9yIG0gaW4gaC5oYXNfa2V5LCBoLl9fY29udGFpbnNfXywgaC5nZXQsIGguZ2V0X2FsbCwgaC5fX2dldGl0ZW1fXzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtKCdmb28nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtKCdGb28nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtKCdGT08nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobSgnYmFyJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoWydmb28nXSwnYmFyJykKKyAgICAgICAgaFsnZm9vJ10gPSAnYmF6JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhbJ0ZPTyddLCdiYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZ2V0X2FsbCgnZm9vJyksWydiYXonXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZ2V0KCJmb28iLCJ3aGVlIiksICJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZ2V0KCJ6b28iLCJ3aGVlIiksICJ3aGVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnNldGRlZmF1bHQoImZvbyIsIndoZWUiKSwgImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zZXRkZWZhdWx0KCJ6b28iLCJ3aGVlIiksICJ3aGVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoWyJmb28iXSwiYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoWyJ6b28iXSwid2hlZSIpCisKKyAgICBkZWYgdGVzdFJlcXVpcmVMaXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEhlYWRlcnMsICJmb28iKQorCisKKyAgICBkZWYgdGVzdEV4dHJhcyhzZWxmKToKKyAgICAgICAgaCA9IEhlYWRlcnMoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGgpLCdcclxuJykKKworICAgICAgICBoLmFkZF9oZWFkZXIoJ2ZvbycsJ2JhcicsYmF6PSJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoWydmb28nXSwgJ2JhcjsgYmF6PSJzcGFtIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGgpLCdmb286IGJhcjsgYmF6PSJzcGFtIlxyXG5cclxuJykKKworICAgICAgICBoLmFkZF9oZWFkZXIoJ0ZvbycsJ2JhcicsY2hlZXNlPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5nZXRfYWxsKCdmb28nKSwKKyAgICAgICAgICAgIFsnYmFyOyBiYXo9InNwYW0iJywgJ2JhcjsgY2hlZXNlJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaCksCisgICAgICAgICAgICAnZm9vOiBiYXI7IGJhej0ic3BhbSJcclxuJworICAgICAgICAgICAgJ0ZvbzogYmFyOyBjaGVlc2VcclxuJworICAgICAgICAgICAgJ1xyXG4nCisgICAgICAgICkKKworCitjbGFzcyBFcnJvckhhbmRsZXIoQmFzZUNHSUhhbmRsZXIpOgorICAgICIiIlNpbXBsZSBoYW5kbGVyIHN1YmNsYXNzIGZvciB0ZXN0aW5nIEJhc2VIYW5kbGVyIiIiCisKKyAgICAjIEJhc2VIYW5kbGVyIHJlY29yZHMgdGhlIE9TIGVudmlyb25tZW50IGF0IGltcG9ydCB0aW1lLCBidXQgZW52dmFycworICAgICMgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQgbGF0ZXIgYnkgb3RoZXIgdGVzdHMsIHdoaWNoIHRyaXBzIHVwCisgICAgIyBIYW5kbGVyVGVzdHMudGVzdEVudmlyb24oKS4KKyAgICBvc19lbnZpcm9uID0gZGljdChvcy5lbnZpcm9uLml0ZW1zKCkpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwqKmt3KToKKyAgICAgICAgc2V0dXBfdGVzdGluZ19kZWZhdWx0cyhrdykKKyAgICAgICAgQmFzZUNHSUhhbmRsZXIuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBTdHJpbmdJTygnJyksIFN0cmluZ0lPKCksIFN0cmluZ0lPKCksIGt3LAorICAgICAgICAgICAgbXVsdGl0aHJlYWQ9VHJ1ZSwgbXVsdGlwcm9jZXNzPVRydWUKKyAgICAgICAgKQorCitjbGFzcyBUZXN0SGFuZGxlcihFcnJvckhhbmRsZXIpOgorICAgICIiIlNpbXBsZSBoYW5kbGVyIHN1YmNsYXNzIGZvciB0ZXN0aW5nIEJhc2VIYW5kbGVyLCB3L2Vycm9yIHBhc3N0aHJ1IiIiCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZSAgICMgZm9yIHRlc3RpbmcsIHdlIHdhbnQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcKKworCitjbGFzcyBIYW5kbGVyVGVzdHMoVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrRW52aXJvbkF0dHJzKHNlbGYsIGhhbmRsZXIpOgorICAgICAgICBlbnYgPSBoYW5kbGVyLmVudmlyb24KKyAgICAgICAgZm9yIGF0dHIgaW4gWworICAgICAgICAgICAgJ3ZlcnNpb24nLCdtdWx0aXRocmVhZCcsJ211bHRpcHJvY2VzcycsJ3J1bl9vbmNlJywnZmlsZV93cmFwcGVyJworICAgICAgICBdOgorICAgICAgICAgICAgaWYgYXR0cj09J2ZpbGVfd3JhcHBlcicgYW5kIGhhbmRsZXIud3NnaV9maWxlX3dyYXBwZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKGhhbmRsZXIsJ3dzZ2lfJythdHRyKSxlbnZbJ3dzZ2kuJythdHRyXSkKKworICAgIGRlZiBjaGVja09TRW52aXJvbihzZWxmLGhhbmRsZXIpOgorICAgICAgICBlbXB0eSA9IHt9OyBzZXR1cF90ZXN0aW5nX2RlZmF1bHRzKGVtcHR5KQorICAgICAgICBlbnYgPSBoYW5kbGVyLmVudmlyb24KKyAgICAgICAgZnJvbSBvcyBpbXBvcnQgZW52aXJvbgorICAgICAgICBmb3Igayx2IGluIGVudmlyb24uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGsgbm90IGluIGVtcHR5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52W2tdLHYpCisgICAgICAgIGZvciBrLHYgaW4gZW1wdHkuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgZW52KQorCisgICAgZGVmIHRlc3RFbnZpcm9uKHNlbGYpOgorICAgICAgICBoID0gVGVzdEhhbmRsZXIoWD0iWSIpCisgICAgICAgIGguc2V0dXBfZW52aXJvbigpCisgICAgICAgIHNlbGYuY2hlY2tFbnZpcm9uQXR0cnMoaCkKKyAgICAgICAgc2VsZi5jaGVja09TRW52aXJvbihoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZW52aXJvblsiWCJdLCJZIikKKworICAgIGRlZiB0ZXN0Q0dJRW52aXJvbihzZWxmKToKKyAgICAgICAgaCA9IEJhc2VDR0lIYW5kbGVyKE5vbmUsTm9uZSxOb25lLHt9KQorICAgICAgICBoLnNldHVwX2Vudmlyb24oKQorICAgICAgICBmb3Iga2V5IGluICd3c2dpLnVybF9zY2hlbWUnLCAnd3NnaS5pbnB1dCcsICd3c2dpLmVycm9ycyc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgaC5lbnZpcm9uKQorCisgICAgZGVmIHRlc3RTY2hlbWUoc2VsZik6CisgICAgICAgIGg9VGVzdEhhbmRsZXIoSFRUUFM9Im9uIik7IGguc2V0dXBfZW52aXJvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5lbnZpcm9uWyd3c2dpLnVybF9zY2hlbWUnXSwnaHR0cHMnKQorICAgICAgICBoPVRlc3RIYW5kbGVyKCk7IGguc2V0dXBfZW52aXJvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5lbnZpcm9uWyd3c2dpLnVybF9zY2hlbWUnXSwnaHR0cCcpCisKKyAgICBkZWYgdGVzdEFic3RyYWN0TWV0aG9kcyhzZWxmKToKKyAgICAgICAgaCA9IEJhc2VIYW5kbGVyKCkKKyAgICAgICAgZm9yIG5hbWUgaW4gWworICAgICAgICAgICAgJ19mbHVzaCcsJ2dldF9zdGRpbicsJ2dldF9zdGRlcnInLCdhZGRfY2dpX3ZhcnMnCisgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBnZXRhdHRyKGgsbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGguX3dyaXRlLCAidGVzdCIpCisKKyAgICBkZWYgdGVzdENvbnRlbnRMZW5ndGgoc2VsZik6CisgICAgICAgICMgRGVtbyBvbmUgcmVhc29uIGl0ZXJhdGlvbiBpcyBiZXR0ZXIgdGhhbiB3cml0ZSgpLi4uICA7KQorCisgICAgICAgIGRlZiB0cml2aWFsX2FwcDEoZSxzKToKKyAgICAgICAgICAgIHMoJzIwMCBPSycsW10pCisgICAgICAgICAgICByZXR1cm4gW2VbJ3dzZ2kudXJsX3NjaGVtZSddXQorCisgICAgICAgIGRlZiB0cml2aWFsX2FwcDIoZSxzKToKKyAgICAgICAgICAgIHMoJzIwMCBPSycsW10pKGVbJ3dzZ2kudXJsX3NjaGVtZSddKQorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgZGVmIHRyaXZpYWxfYXBwNChlLHMpOgorICAgICAgICAgICAgIyBTaW11bGF0ZSBhIHJlc3BvbnNlIHRvIGEgSEVBRCByZXF1ZXN0CisgICAgICAgICAgICBzKCcyMDAgT0snLFsoJ0NvbnRlbnQtTGVuZ3RoJywgJzEyMzQ1JyldKQorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgaCA9IFRlc3RIYW5kbGVyKCkKKyAgICAgICAgaC5ydW4odHJpdmlhbF9hcHAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICAiU3RhdHVzOiAyMDAgT0tcclxuIgorICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiA0XHJcbiIKKyAgICAgICAgICAgICJcclxuIgorICAgICAgICAgICAgImh0dHAiKQorCisgICAgICAgIGggPSBUZXN0SGFuZGxlcigpCisgICAgICAgIGgucnVuKHRyaXZpYWxfYXBwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgIlN0YXR1czogMjAwIE9LXHJcbiIKKyAgICAgICAgICAgICJcclxuIgorICAgICAgICAgICAgImh0dHAiKQorCisKKyAgICAgICAgaCA9IFRlc3RIYW5kbGVyKCkKKyAgICAgICAgaC5ydW4odHJpdmlhbF9hcHA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICBiJ1N0YXR1czogMjAwIE9LXHJcbicKKyAgICAgICAgICAgIGInQ29udGVudC1MZW5ndGg6IDEyMzQ1XHJcbicKKyAgICAgICAgICAgIGInXHJcbicpCisKKyAgICBkZWYgdGVzdEJhc2ljRXJyb3JPdXRwdXQoc2VsZik6CisKKyAgICAgICAgZGVmIG5vbl9lcnJvcl9hcHAoZSxzKToKKyAgICAgICAgICAgIHMoJzIwMCBPSycsW10pCisgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAgICBkZWYgZXJyb3JfYXBwKGUscyk6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVGhpcyBzaG91bGQgYmUgY2F1Z2h0IGJ5IGhhbmRsZXIiKQorCisgICAgICAgIGggPSBFcnJvckhhbmRsZXIoKQorICAgICAgICBoLnJ1bihub25fZXJyb3JfYXBwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICAiU3RhdHVzOiAyMDAgT0tcclxuIgorICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAwXHJcbiIKKyAgICAgICAgICAgICJcclxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnN0ZGVyci5nZXR2YWx1ZSgpLCIiKQorCisgICAgICAgIGggPSBFcnJvckhhbmRsZXIoKQorICAgICAgICBoLnJ1bihlcnJvcl9hcHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICJTdGF0dXM6ICVzXHJcbiIKKyAgICAgICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cclxuIgorICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAlZFxyXG4iCisgICAgICAgICAgICAiXHJcbiVzIiAlIChoLmVycm9yX3N0YXR1cyxsZW4oaC5lcnJvcl9ib2R5KSxoLmVycm9yX2JvZHkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5zdGRlcnIuZ2V0dmFsdWUoKS5maW5kKCJBc3NlcnRpb25FcnJvciIpLCAtMSkKKworICAgIGRlZiB0ZXN0RXJyb3JBZnRlck91dHB1dChzZWxmKToKKyAgICAgICAgTVNHID0gIlNvbWUgb3V0cHV0IGhhcyBiZWVuIHNlbnQiCisgICAgICAgIGRlZiBlcnJvcl9hcHAoZSxzKToKKyAgICAgICAgICAgIHMoIjIwMCBPSyIsW10pKE1TRykKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJUaGlzIHNob3VsZCBiZSBjYXVnaHQgYnkgaGFuZGxlciIpCisKKyAgICAgICAgaCA9IEVycm9ySGFuZGxlcigpCisgICAgICAgIGgucnVuKGVycm9yX2FwcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgIlN0YXR1czogMjAwIE9LXHJcbiIKKyAgICAgICAgICAgICJcclxuIitNU0cpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5zdGRlcnIuZ2V0dmFsdWUoKS5maW5kKCJBc3NlcnRpb25FcnJvciIpLCAtMSkKKworICAgIGRlZiB0ZXN0SGVhZGVyRm9ybWF0cyhzZWxmKToKKworICAgICAgICBkZWYgbm9uX2Vycm9yX2FwcChlLHMpOgorICAgICAgICAgICAgcygnMjAwIE9LJyxbXSkKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgIHN0ZHBhdCA9ICgKKyAgICAgICAgICAgIHIiSFRUUC8lcyAyMDAgT0tcclxuIgorICAgICAgICAgICAgciJEYXRlOiBcd3szfSwgWyAwMTIzXVxkIFx3ezN9IFxkezR9IFxkXGQ6XGRcZDpcZFxkIEdNVFxyXG4iCisgICAgICAgICAgICByIiVzIiByIkNvbnRlbnQtTGVuZ3RoOiAwXHJcbiIgciJcclxuIgorICAgICAgICApCisgICAgICAgIHNob3J0cGF0ID0gKAorICAgICAgICAgICAgIlN0YXR1czogMjAwIE9LXHJcbiIgIkNvbnRlbnQtTGVuZ3RoOiAwXHJcbiIgIlxyXG4iCisgICAgICAgICkKKworICAgICAgICBmb3Igc3N3IGluICJGb29CYXIvMS4wIiwgTm9uZToKKyAgICAgICAgICAgIHN3ID0gc3N3IGFuZCAiU2VydmVyOiAlc1xyXG4iICUgc3N3IG9yICIiCisKKyAgICAgICAgICAgIGZvciB2ZXJzaW9uIGluICIxLjAiLCAiMS4xIjoKKyAgICAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gIkhUVFAvMC45IiwgIkhUVFAvMS4wIiwgIkhUVFAvMS4xIjoKKworICAgICAgICAgICAgICAgICAgICBoID0gVGVzdEhhbmRsZXIoU0VSVkVSX1BST1RPQ09MPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBoLm9yaWdpbl9zZXJ2ZXIgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBoLmh0dHBfdmVyc2lvbiA9IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgaC5zZXJ2ZXJfc29mdHdhcmUgPSBzc3cKKyAgICAgICAgICAgICAgICAgICAgaC5ydW4obm9uX2Vycm9yX2FwcCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaG9ydHBhdCxoLnN0ZG91dC5nZXR2YWx1ZSgpKQorCisgICAgICAgICAgICAgICAgICAgIGggPSBUZXN0SGFuZGxlcihTRVJWRVJfUFJPVE9DT0w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGgub3JpZ2luX3NlcnZlciA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaC5odHRwX3ZlcnNpb24gPSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGguc2VydmVyX3NvZnR3YXJlID0gc3N3CisgICAgICAgICAgICAgICAgICAgIGgucnVuKG5vbl9lcnJvcl9hcHApCisgICAgICAgICAgICAgICAgICAgIGlmIHByb3RvPT0iSFRUUC8wLjkiOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnN0ZG91dC5nZXR2YWx1ZSgpLCIiKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLm1hdGNoKHN0ZHBhdCUodmVyc2lvbixzdyksIGguc3Rkb3V0LmdldHZhbHVlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGRwYXQlKHZlcnNpb24sc3cpLCBoLnN0ZG91dC5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RDbG9zZU9uRXJyb3Ioc2VsZik6CisgICAgICAgIHNpZGVfZWZmZWN0cyA9IHsnY2xvc2VfY2FsbGVkJzogRmFsc2V9CisgICAgICAgIE1TRyA9IGIiU29tZSBvdXRwdXQgaGFzIGJlZW4gc2VudCIKKyAgICAgICAgZGVmIGVycm9yX2FwcChlLHMpOgorICAgICAgICAgICAgcygiMjAwIE9LIixbXSkoTVNHKQorICAgICAgICAgICAgY2xhc3MgQ3Jhc2h5SXRlcmFibGUob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBiJ2JsYWgnCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVGhpcyBzaG91bGQgYmUgY2F1Z2h0IGJ5IGhhbmRsZXIiKQorCisgICAgICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBzaWRlX2VmZmVjdHNbJ2Nsb3NlX2NhbGxlZCddID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIENyYXNoeUl0ZXJhYmxlKCkKKworICAgICAgICBoID0gRXJyb3JIYW5kbGVyKCkKKyAgICAgICAgaC5ydW4oZXJyb3JfYXBwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZGVfZWZmZWN0c1snY2xvc2VfY2FsbGVkJ10sIFRydWUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmE4ODg1Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CkBAIC0wLDAgKzEsNTggQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHhkcmxpYgorCitjbGFzcyBYRFJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3hkcihzZWxmKToKKyAgICAgICAgcCA9IHhkcmxpYi5QYWNrZXIoKQorCisgICAgICAgIHMgPSAnaGVsbG8gd29ybGQnCisgICAgICAgIGEgPSBbJ3doYXQnLCAnaXMnLCAnaGFwbmluJywgJ2RvY3RvciddCisKKyAgICAgICAgcC5wYWNrX2ludCg0MikKKyAgICAgICAgcC5wYWNrX2ludCgtMTcpCisgICAgICAgIHAucGFja191aW50KDkpCisgICAgICAgIHAucGFja19ib29sKFRydWUpCisgICAgICAgIHAucGFja19ib29sKEZhbHNlKQorICAgICAgICBwLnBhY2tfdWh5cGVyKDQ1TCkKKyAgICAgICAgcC5wYWNrX2Zsb2F0KDEuOSkKKyAgICAgICAgcC5wYWNrX2RvdWJsZSgxLjkpCisgICAgICAgIHAucGFja19zdHJpbmcocykKKyAgICAgICAgcC5wYWNrX2xpc3QocmFuZ2UoNSksIHAucGFja191aW50KQorICAgICAgICBwLnBhY2tfYXJyYXkoYSwgcC5wYWNrX3N0cmluZykKKworICAgICAgICAjIG5vdyB2ZXJpZnkKKyAgICAgICAgZGF0YSA9IHAuZ2V0X2J1ZmZlcigpCisgICAgICAgIHVwID0geGRybGliLlVucGFja2VyKGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC5nZXRfcG9zaXRpb24oKSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwLnVucGFja19pbnQoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAudW5wYWNrX2ludCgpLCAtMTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAudW5wYWNrX3VpbnQoKSwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVwLnVucGFja19ib29sKCkgaXMgVHJ1ZSkKKworICAgICAgICAjIHJlbWVtYmVyIHBvc2l0aW9uCisgICAgICAgIHBvcyA9IHVwLmdldF9wb3NpdGlvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cC51bnBhY2tfYm9vbCgpIGlzIEZhbHNlKQorCisgICAgICAgICMgcmV3aW5kIGFuZCB1bnBhY2sgYWdhaW4KKyAgICAgICAgdXAuc2V0X3Bvc2l0aW9uKHBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVwLnVucGFja19ib29sKCkgaXMgRmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC51bnBhY2tfdWh5cGVyKCksIDQ1TCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCh1cC51bnBhY2tfZmxvYXQoKSwgMS45KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHVwLnVucGFja19kb3VibGUoKSwgMS45KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwLnVucGFja19zdHJpbmcoKSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC51bnBhY2tfbGlzdCh1cC51bnBhY2tfdWludCksIHJhbmdlKDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwLnVucGFja19hcnJheSh1cC51bnBhY2tfc3RyaW5nKSwgYSkKKyAgICAgICAgdXAuZG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCB1cC51bnBhY2tfdWludCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoWERSVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMTYxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKQEAgLTAsMCArMSwxOTA3IEBACisjIHhtbC5ldHJlZSB0ZXN0LiAgVGhpcyBmaWxlIGNvbnRhaW5zIGVub3VnaCB0ZXN0cyB0byBtYWtlIHN1cmUgdGhhdAorIyBhbGwgaW5jbHVkZWQgY29tcG9uZW50cyB3b3JrIGFzIHRoZXkgc2hvdWxkLgorIyBMYXJnZSBwYXJ0cyBhcmUgZXh0cmFjdGVkIGZyb20gdGhlIHVwc3RyZWFtIHRlc3Qgc3VpdGUuCisKKyMgSU1QT1JUQU5UOiB0aGUgc2FtZSBkb2N0ZXN0cyBhcmUgcnVuIGZyb20gInRlc3RfeG1sX2V0cmVlX2MiIGluCisjIG9yZGVyIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBDIGltcGxlbWVudGF0aW9uIGFuZCB0aGUKKyMgUHl0aG9uIGltcGxlbWVudGF0aW9uLgorIworIyBGb3IgdGhpcyBwdXJwb3NlLCB0aGUgbW9kdWxlLWxldmVsICJFVCIgc3ltYm9sIGlzIHRlbXBvcmFyaWx5CisjIG1vbmtleS1wYXRjaGVkIHdoZW4gcnVubmluZyB0aGUgInRlc3RfeG1sX2V0cmVlX2MiIHRlc3Qgc3VpdGUuCisjIERvbid0IHJlLWltcG9ydCAieG1sLmV0cmVlLkVsZW1lbnRUcmVlIiBtb2R1bGUgaW4gdGhlIGRvY3N0cmluZywKKyMgZXhjZXB0IGlmIHRoZSB0ZXN0IGlzIHNwZWNpZmljIHRvIHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBjZ2kKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZpbmRmaWxlCisKK2Zyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAorCitTSU1QTEVfWE1MRklMRSA9IGZpbmRmaWxlKCJzaW1wbGUueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCitTSU1QTEVfTlNfWE1MRklMRSA9IGZpbmRmaWxlKCJzaW1wbGUtbnMueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCisKK1NBTVBMRV9YTUwgPSAiIiJcCis8Ym9keT4KKyAgPHRhZyBjbGFzcz0nYSc+dGV4dDwvdGFnPgorICA8dGFnIGNsYXNzPSdiJyAvPgorICA8c2VjdGlvbj4KKyAgICA8dGFnIGNsYXNzPSdiJyBpZD0naW5uZXInPnN1YnRleHQ8L3RhZz4KKyAgPC9zZWN0aW9uPgorPC9ib2R5PgorIiIiCisKK1NBTVBMRV9TRUNUSU9OID0gIiIiXAorPHNlY3Rpb24+CisgIDx0YWcgY2xhc3M9J2InIGlkPSdpbm5lcic+c3VidGV4dDwvdGFnPgorICA8bmV4dHRhZyAvPgorICA8bmV4dHNlY3Rpb24+CisgICAgPHRhZyAvPgorICA8L25leHRzZWN0aW9uPgorPC9zZWN0aW9uPgorIiIiCisKK1NBTVBMRV9YTUxfTlMgPSAiIiIKKzxib2R5IHhtbG5zPSJodHRwOi8vZWZmYm90Lm9yZy9ucyI+CisgIDx0YWc+dGV4dDwvdGFnPgorICA8dGFnIC8+CisgIDxzZWN0aW9uPgorICAgIDx0YWc+c3VidGV4dDwvdGFnPgorICA8L3NlY3Rpb24+Cis8L2JvZHk+CisiIiIKKworCitkZWYgc2FuaXR5KCk6CisgICAgIiIiCisgICAgSW1wb3J0IHNhbml0eS4KKworICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRJbmNsdWRlCisgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50UGF0aAorICAgICIiIgorCitkZWYgY2hlY2tfbWV0aG9kKG1ldGhvZCk6CisgICAgaWYgbm90IGhhc2F0dHIobWV0aG9kLCAnX19jYWxsX18nKToKKyAgICAgICAgcHJpbnQgbWV0aG9kLCAibm90IGNhbGxhYmxlIgorCitkZWYgc2VyaWFsaXplKGVsZW0sIHRvX3N0cmluZz1UcnVlLCAqKm9wdGlvbnMpOgorICAgIGltcG9ydCBTdHJpbmdJTworICAgIGZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW0pCisgICAgdHJlZS53cml0ZShmaWxlLCAqKm9wdGlvbnMpCisgICAgaWYgdG9fc3RyaW5nOgorICAgICAgICByZXR1cm4gZmlsZS5nZXR2YWx1ZSgpCisgICAgZWxzZToKKyAgICAgICAgZmlsZS5zZWVrKDApCisgICAgICAgIHJldHVybiBmaWxlCisKK2RlZiBzdW1tYXJpemUoZWxlbSk6CisgICAgaWYgZWxlbS50YWcgPT0gRVQuQ29tbWVudDoKKyAgICAgICAgcmV0dXJuICI8Q29tbWVudD4iCisgICAgcmV0dXJuIGVsZW0udGFnCisKK2RlZiBzdW1tYXJpemVfbGlzdChzZXEpOgorICAgIHJldHVybiBbc3VtbWFyaXplKGVsZW0pIGZvciBlbGVtIGluIHNlcV0KKworZGVmIG5vcm1hbGl6ZV9jcmxmKHRyZWUpOgorICAgIGZvciBlbGVtIGluIHRyZWUuaXRlcigpOgorICAgICAgICBpZiBlbGVtLnRleHQ6CisgICAgICAgICAgICBlbGVtLnRleHQgPSBlbGVtLnRleHQucmVwbGFjZSgiXHJcbiIsICJcbiIpCisgICAgICAgIGlmIGVsZW0udGFpbDoKKyAgICAgICAgICAgIGVsZW0udGFpbCA9IGVsZW0udGFpbC5yZXBsYWNlKCJcclxuIiwgIlxuIikKKworZGVmIGNoZWNrX3N0cmluZyhzdHJpbmcpOgorICAgIGxlbihzdHJpbmcpCisgICAgZm9yIGNoYXIgaW4gc3RyaW5nOgorICAgICAgICBpZiBsZW4oY2hhcikgIT0gMToKKyAgICAgICAgICAgIHByaW50ICJleHBlY3RlZCBvbmUtY2hhcmFjdGVyIHN0cmluZywgZ290ICVyIiAlIGNoYXIKKyAgICBuZXdfc3RyaW5nID0gc3RyaW5nICsgIiIKKyAgICBuZXdfc3RyaW5nID0gc3RyaW5nICsgIiAiCisgICAgc3RyaW5nWzowXQorCitkZWYgY2hlY2tfbWFwcGluZyhtYXBwaW5nKToKKyAgICBsZW4obWFwcGluZykKKyAgICBrZXlzID0gbWFwcGluZy5rZXlzKCkKKyAgICBpdGVtcyA9IG1hcHBpbmcuaXRlbXMoKQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgaXRlbSA9IG1hcHBpbmdba2V5XQorICAgIG1hcHBpbmdbImtleSJdID0gInZhbHVlIgorICAgIGlmIG1hcHBpbmdbImtleSJdICE9ICJ2YWx1ZSI6CisgICAgICAgIHByaW50ICJleHBlY3RlZCB2YWx1ZSBzdHJpbmcsIGdvdCAlciIgJSBtYXBwaW5nWyJrZXkiXQorCitkZWYgY2hlY2tfZWxlbWVudChlbGVtZW50KToKKyAgICBpZiBub3QgRVQuaXNlbGVtZW50KGVsZW1lbnQpOgorICAgICAgICBwcmludCAibm90IGFuIGVsZW1lbnQiCisgICAgaWYgbm90IGhhc2F0dHIoZWxlbWVudCwgInRhZyIpOgorICAgICAgICBwcmludCAibm8gdGFnIG1lbWJlciIKKyAgICBpZiBub3QgaGFzYXR0cihlbGVtZW50LCAiYXR0cmliIik6CisgICAgICAgIHByaW50ICJubyBhdHRyaWIgbWVtYmVyIgorICAgIGlmIG5vdCBoYXNhdHRyKGVsZW1lbnQsICJ0ZXh0Iik6CisgICAgICAgIHByaW50ICJubyB0ZXh0IG1lbWJlciIKKyAgICBpZiBub3QgaGFzYXR0cihlbGVtZW50LCAidGFpbCIpOgorICAgICAgICBwcmludCAibm8gdGFpbCBtZW1iZXIiCisKKyAgICBjaGVja19zdHJpbmcoZWxlbWVudC50YWcpCisgICAgY2hlY2tfbWFwcGluZyhlbGVtZW50LmF0dHJpYikKKyAgICBpZiBlbGVtZW50LnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgIGNoZWNrX3N0cmluZyhlbGVtZW50LnRleHQpCisgICAgaWYgZWxlbWVudC50YWlsIGlzIG5vdCBOb25lOgorICAgICAgICBjaGVja19zdHJpbmcoZWxlbWVudC50YWlsKQorICAgIGZvciBlbGVtIGluIGVsZW1lbnQ6CisgICAgICAgIGNoZWNrX2VsZW1lbnQoZWxlbSkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBlbGVtZW50IHRyZWUgdGVzdHMKKworZGVmIGludGVyZmFjZSgpOgorICAgIHIiIiIKKyAgICBUZXN0IGVsZW1lbnQgdHJlZSBpbnRlcmZhY2UuCisKKyAgICA+Pj4gZWxlbWVudCA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGNoZWNrX2VsZW1lbnQoZWxlbWVudCkKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpCisgICAgPj4+IGNoZWNrX2VsZW1lbnQodHJlZS5nZXRyb290KCkpCisKKyAgICA+Pj4gZWxlbWVudCA9IEVULkVsZW1lbnQoInRceGU0ZyIsIGtleT0idmFsdWUiKQorICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkKKyAgICA+Pj4gcmVwcihlbGVtZW50KSAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgIjxFbGVtZW50ICd0XFx4ZTRnJyBhdCAweC4uLj4iCisgICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciLCBrZXk9InZhbHVlIikKKworICAgIE1ha2Ugc3VyZSBhbGwgc3RhbmRhcmQgZWxlbWVudCBtZXRob2RzIGV4aXN0LgorCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmFwcGVuZCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZXh0ZW5kKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pbnNlcnQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnJlbW92ZSkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0Y2hpbGRyZW4pCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXJmaW5kKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5maW5kYWxsKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5maW5kdGV4dCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuY2xlYXIpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmdldCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuc2V0KQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5rZXlzKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVtcykKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcikKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcnRleHQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmdldGl0ZXJhdG9yKQorCisgICAgVGhlc2UgbWV0aG9kcyByZXR1cm4gYW4gaXRlcmFibGUuIFNlZSBidWcgNjQ3Mi4KKworICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyKCJ0YWciKS5uZXh0KQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCgidGFnIikubmV4dCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcmZpbmQoIioiKS5uZXh0KQorICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyKCJ0YWciKS5uZXh0KQorICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyZmluZCgidGFnIikubmV4dCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKHRyZWUuaXRlcmZpbmQoIioiKS5uZXh0KQorCisgICAgVGhlc2UgYWxpYXNlcyBhcmUgcHJvdmlkZWQ6CisKKyAgICA+Pj4gYXNzZXJ0IEVULlhNTCA9PSBFVC5mcm9tc3RyaW5nCisgICAgPj4+IGFzc2VydCBFVC5QSSA9PSBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KKyAgICA+Pj4gYXNzZXJ0IEVULlhNTFBhcnNlciA9PSBFVC5YTUxUcmVlQnVpbGRlcgorICAgICIiIgorCitkZWYgc2ltcGxlb3BzKCk6CisgICAgIiIiCisgICAgQmFzaWMgbWV0aG9kIHNhbml0eSBjaGVja3MuCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGJvZHk+PHRhZy8+PC9ib2R5PiIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8Ym9keT48dGFnIC8+PC9ib2R5PicKKyAgICA+Pj4gZSA9IEVULkVsZW1lbnQoInRhZzIiKQorICAgID4+PiBlbGVtLmFwcGVuZChlKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZyAvPjx0YWcyIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzxib2R5Pjx0YWcgLz48L2JvZHk+JworICAgID4+PiBlbGVtLmluc2VydCgwLCBlKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZzIgLz48dGFnIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKKyAgICA+Pj4gZWxlbS5leHRlbmQoW2VdKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZyAvPjx0YWcyIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKKworICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDEKKyAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKKyAgICA+Pj4gc3ViZWxlbWVudCA9IEVULkVsZW1lbnQoInN1YnRhZyIpCisgICAgPj4+IGVsZW1lbnQuYXBwZW5kKHN1YmVsZW1lbnQpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDIKKyAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PC90YWc+JworICAgID4+PiBlbGVtZW50Lmluc2VydCgwLCBzdWJlbGVtZW50KQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyAzCisgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjxzdWJ0YWcgLz48L3RhZz4nCisgICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDQKKyAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PC90YWc+JworICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA1CisgICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCisgICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFZhbHVlRXJyb3I6IGxpc3QucmVtb3ZlKHgpOiB4IG5vdCBpbiBsaXN0CisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDYKKyAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKKyAgICA+Pj4gZWxlbWVudFswOjBdID0gW3N1YmVsZW1lbnQsIHN1YmVsZW1lbnQsIHN1YmVsZW1lbnRdCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50WzFdKQorICAgICc8c3VidGFnIC8+JworICAgID4+PiBlbGVtZW50WzE6OV0gPT0gW2VsZW1lbnRbMV0sIGVsZW1lbnRbMl1dCisgICAgVHJ1ZQorICAgID4+PiBlbGVtZW50Wzo5OjJdID09IFtlbGVtZW50WzBdLCBlbGVtZW50WzJdXQorICAgIFRydWUKKyAgICA+Pj4gZGVsIGVsZW1lbnRbMToyXQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkKKyAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PHN1YnRhZyAvPjwvdGFnPicKKyAgICAiIiIKKworZGVmIGNkYXRhKCk6CisgICAgIiIiCisgICAgVGVzdCBDREFUQSBoYW5kbGluZyAoZXRjKS4KKworICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPmhlbGxvPC90YWc+IikpCisgICAgJzx0YWc+aGVsbG88L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShFVC5YTUwoIjx0YWc+JiMxMDQ7JiMxMDE7JiMxMDg7JiMxMDg7JiMxMTE7PC90YWc+IikpCisgICAgJzx0YWc+aGVsbG88L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShFVC5YTUwoIjx0YWc+PCFbQ0RBVEFbaGVsbG9dXT48L3RhZz4iKSkKKyAgICAnPHRhZz5oZWxsbzwvdGFnPicKKyAgICAiIiIKKworIyBPbmx5IHdpdGggUHl0aG9uIGltcGxlbWVudGF0aW9uCitkZWYgc2ltcGxlZmluZCgpOgorICAgICIiIgorICAgIFRlc3QgZmluZCBtZXRob2RzIHVzaW5nIHRoZSBlbGVtZW50cGF0aCBmYWxsYmFjay4KKworICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKKworICAgID4+PiBDdXJyZW50RWxlbWVudFBhdGggPSBFbGVtZW50VHJlZS5FbGVtZW50UGF0aAorICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50UGF0aCA9IEVsZW1lbnRUcmVlLl9TaW1wbGVFbGVtZW50UGF0aCgpCisgICAgPj4+IGVsZW0gPSBFbGVtZW50VHJlZS5YTUwoU0FNUExFX1hNTCkKKyAgICA+Pj4gZWxlbS5maW5kKCJ0YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJ0YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0YWciKQorICAgICd0ZXh0JworICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQorICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciLCAiZGVmYXVsdCIpCisgICAgJ2RlZmF1bHQnCisgICAgPj4+IEVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQorICAgICd0ZXh0JworICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRhZyIpKQorICAgIFsndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJywgJ3RhZyddCisKKyAgICBQYXRoIHN5bnRheCBkb2Vzbid0IHdvcmsgaW4gdGhpcyBjYXNlLgorCisgICAgPj4+IGVsZW0uZmluZCgic2VjdGlvbi90YWciKQorICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJzZWN0aW9uL3RhZyIpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi90YWciKSkKKyAgICBbXQorCisgICAgPj4+IEVsZW1lbnRUcmVlLkVsZW1lbnRQYXRoID0gQ3VycmVudEVsZW1lbnRQYXRoCisgICAgIiIiCisKK2RlZiBmaW5kKCk6CisgICAgIiIiCisgICAgVGVzdCBmaW5kIG1ldGhvZHMgKGluY2x1ZGluZyB4cGF0aCBzeW50YXgpLgorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKKyAgICA+Pj4gZWxlbS5maW5kKCJ0YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJ0YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gZWxlbS5maW5kKCIuL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoIi4vdGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgiL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IGVsZW1bMl0gPSBFVC5YTUwoU0FNUExFX1NFQ1RJT04pCisgICAgPj4+IGVsZW0uZmluZCgic2VjdGlvbi9uZXh0dGFnIikudGFnCisgICAgJ25leHR0YWcnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidG9nIikKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidG9nL2ZvbyIpCisgICAgPj4+IGVsZW0uZmluZHRleHQoInRhZyIpCisgICAgJ3RleHQnCisgICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vbmV4dHRhZyIpCisgICAgJycKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi9uZXh0dGFnIiwgImRlZmF1bHQiKQorICAgICcnCisgICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIpCisgICAgPj4+IGVsZW0uZmluZHRleHQoInRvZyIsICJkZWZhdWx0IikKKyAgICAnZGVmYXVsdCcKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInRhZyIpCisgICAgJ3RleHQnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0b2cvZm9vIikKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInRvZy9mb28iLCAiZGVmYXVsdCIpCisgICAgJ2RlZmF1bHQnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCIuL3RhZyIpCisgICAgJ3RleHQnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCIvdGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi90YWciKQorICAgICdzdWJ0ZXh0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgic2VjdGlvbi90YWciKQorICAgICdzdWJ0ZXh0JworICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4iKSkKKyAgICBbJ2JvZHknXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRhZyIpKQorICAgIFsndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidG9nIikpCisgICAgW10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0b2cvZm9vIikpCisgICAgW10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqIikpCisgICAgWyd0YWcnLCAndGFnJywgJ3NlY3Rpb24nXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uL3RhZyIpKQorICAgIFsndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy90YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vKiIpKQorICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLyoiKSkKKyAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8uLy8qIikpCisgICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovKiIpKQorICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLyoiKSkKKyAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi90YWciKSkKKyAgICBbJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8uL3RhZyIpKQorICAgIFsndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJywgJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vLi90YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAY2xhc3NdIikpCisgICAgWyd0YWcnLCAndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BjbGFzcz0nYSddIikpCisgICAgWyd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAY2xhc3M9J2InXSIpKQorICAgIFsndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BpZF0iKSkKKyAgICBbJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vc2VjdGlvblt0YWddIikpCisgICAgWydzZWN0aW9uJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy9zZWN0aW9uW2VsZW1lbnRdIikpCisgICAgW10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLi90YWciKSkKKyAgICBbXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLi4vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZGFsbCgiLi90YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorCisgICAgRm9sbG93aW5nIGV4YW1wbGUgaXMgaW52YWxpZCBpbiAxLjIuCisgICAgQSBsZWFkaW5nICcqJyBpcyBhc3N1bWVkIGluIDEuMy4KKworICAgID4+PiBlbGVtLmZpbmRhbGwoInNlY3Rpb24vLyIpID09IGVsZW0uZmluZGFsbCgic2VjdGlvbi8vKiIpCisgICAgVHJ1ZQorCisgICAgRVQncyBQYXRoIG1vZHVsZSBoYW5kbGVzIHRoaXMgY2FzZSBpbmNvcnJlY3RseTsgdGhpcyBnaXZlcworICAgIGEgd2FybmluZyBpbiAxLjMsIGFuZCB0aGUgYmVoYXZpb3VyIHdpbGwgYmUgbW9kaWZpZWQgaW4gMS40LgorCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmRhbGwoIi90YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTF9OUykKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKKyAgICBbXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIntodHRwOi8vZWZmYm90Lm9yZy9uc310YWciKSkKKyAgICBbJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8ve2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyIpKQorICAgIFsne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZycsICd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnXQorICAgICIiIgorCitkZWYgZmlsZV9pbml0KCk6CisgICAgIiIiCisgICAgPj4+IGltcG9ydCBTdHJpbmdJTworCisgICAgPj4+IHN0cmluZ2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhTQU1QTEVfWE1MKQorICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZmlsZT1zdHJpbmdmaWxlKQorICAgID4+PiB0cmVlLmZpbmQoInRhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IHRyZWUuZmluZCgic2VjdGlvbi90YWciKS50YWcKKyAgICAndGFnJworCisgICAgPj4+IHRyZWUgPSBFVC5FbGVtZW50VHJlZShmaWxlPVNJTVBMRV9YTUxGSUxFKQorICAgID4+PiB0cmVlLmZpbmQoImVsZW1lbnQiKS50YWcKKyAgICAnZWxlbWVudCcKKyAgICA+Pj4gdHJlZS5maW5kKCJlbGVtZW50Ly4uL2VtcHR5LWVsZW1lbnQiKS50YWcKKyAgICAnZW1wdHktZWxlbWVudCcKKyAgICAiIiIKKworZGVmIGJhZF9maW5kKCk6CisgICAgIiIiCisgICAgQ2hlY2sgYmFkIG9yIHVuc3VwcG9ydGVkIHBhdGggZXhwcmVzc2lvbnMuCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiBlbGVtLmZpbmRhbGwoIi90YWciKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBTeW50YXhFcnJvcjogY2Fubm90IHVzZSBhYnNvbHV0ZSBwYXRoIG9uIGVsZW1lbnQKKyAgICAiIiIKKworZGVmIHBhdGhfY2FjaGUoKToKKyAgICAiIiIKKyAgICBDaGVjayB0aGF0IHRoZSBwYXRoIGNhY2hlIGJlaGF2ZXMgc2FuZWx5LgorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMTApOiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCcuLycrc3RyKGkpKQorICAgID4+PiBjYWNoZV9sZW5fMTAgPSBsZW4oRVQuRWxlbWVudFBhdGguX2NhY2hlKQorICAgID4+PiBmb3IgaSBpbiByYW5nZSgxMCk6IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoJy4vJytzdHIoaSkpCisgICAgPj4+IGxlbihFVC5FbGVtZW50UGF0aC5fY2FjaGUpID09IGNhY2hlX2xlbl8xMAorICAgIFRydWUKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMjApOiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCcuLycrc3RyKGkpKQorICAgID4+PiBsZW4oRVQuRWxlbWVudFBhdGguX2NhY2hlKSA+IGNhY2hlX2xlbl8xMAorICAgIFRydWUKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoNjAwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKKyAgICA+Pj4gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkgPCA1MDAKKyAgICBUcnVlCisgICAgIiIiCisKK2RlZiBjb3B5KCk6CisgICAgIiIiCisgICAgVGVzdCBjb3B5IGhhbmRsaW5nIChldGMpLgorCisgICAgPj4+IGltcG9ydCBjb3B5CisgICAgPj4+IGUxID0gRVQuWE1MKCI8dGFnPmhlbGxvPGZvby8+PC90YWc+IikKKyAgICA+Pj4gZTIgPSBjb3B5LmNvcHkoZTEpCisgICAgPj4+IGUzID0gY29weS5kZWVwY29weShlMSkKKyAgICA+Pj4gZTEuZmluZCgiZm9vIikudGFnID0gImJhciIKKyAgICA+Pj4gc2VyaWFsaXplKGUxKQorICAgICc8dGFnPmhlbGxvPGJhciAvPjwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGUyKQorICAgICc8dGFnPmhlbGxvPGJhciAvPjwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGUzKQorICAgICc8dGFnPmhlbGxvPGZvbyAvPjwvdGFnPicKKworICAgICIiIgorCitkZWYgYXR0cmliKCk6CisgICAgIiIiCisgICAgVGVzdCBhdHRyaWJ1dGUgaGFuZGxpbmcuCisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDEuMQorICAgID4+PiBlbGVtLmdldCgia2V5IiwgImRlZmF1bHQiKSAjIDEuMgorICAgICdkZWZhdWx0JworICAgID4+PiBlbGVtLnNldCgia2V5IiwgInZhbHVlIikKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgMS4zCisgICAgJ3ZhbHVlJworCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciLCBrZXk9InZhbHVlIikKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgMi4xCisgICAgJ3ZhbHVlJworICAgID4+PiBlbGVtLmF0dHJpYiAjIDIuMgorICAgIHsna2V5JzogJ3ZhbHVlJ30KKworICAgID4+PiBhdHRyaWIgPSB7ImtleSI6ICJ2YWx1ZSJ9CisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciLCBhdHRyaWIpCisgICAgPj4+IGF0dHJpYi5jbGVhcigpICMgY2hlY2sgZm9yIGFsaWFzaW5nIGlzc3VlcworICAgID4+PiBlbGVtLmdldCgia2V5IikgIyAzLjEKKyAgICAndmFsdWUnCisgICAgPj4+IGVsZW0uYXR0cmliICMgMy4yCisgICAgeydrZXknOiAndmFsdWUnfQorCisgICAgPj4+IGF0dHJpYiA9IHsia2V5IjogInZhbHVlIn0KKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsICoqYXR0cmliKQorICAgID4+PiBhdHRyaWIuY2xlYXIoKSAjIGNoZWNrIGZvciBhbGlhc2luZyBpc3N1ZXMKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgNC4xCisgICAgJ3ZhbHVlJworICAgID4+PiBlbGVtLmF0dHJpYiAjIDQuMgorICAgIHsna2V5JzogJ3ZhbHVlJ30KKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwgeyJrZXkiOiAib3RoZXIifSwga2V5PSJ2YWx1ZSIpCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDUuMQorICAgICd2YWx1ZScKKyAgICA+Pj4gZWxlbS5hdHRyaWIgIyA1LjIKKyAgICB7J2tleSc6ICd2YWx1ZSd9CisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoJ3Rlc3QnKQorICAgID4+PiBlbGVtLnRleHQgPSAiYWEiCisgICAgPj4+IGVsZW0uc2V0KCd0ZXN0YScsICd0ZXN0dmFsJykKKyAgICA+Pj4gZWxlbS5zZXQoJ3Rlc3RiJywgJ3Rlc3QyJykKKyAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKKyAgICAnPHRlc3QgdGVzdGE9InRlc3R2YWwiIHRlc3RiPSJ0ZXN0MiI+YWE8L3Rlc3Q+JworICAgID4+PiBzb3J0ZWQoZWxlbS5rZXlzKCkpCisgICAgWyd0ZXN0YScsICd0ZXN0YiddCisgICAgPj4+IHNvcnRlZChlbGVtLml0ZW1zKCkpCisgICAgWygndGVzdGEnLCAndGVzdHZhbCcpLCAoJ3Rlc3RiJywgJ3Rlc3QyJyldCisgICAgPj4+IGVsZW0uYXR0cmliWyd0ZXN0YiddCisgICAgJ3Rlc3QyJworICAgID4+PiBlbGVtLmF0dHJpYlsndGVzdGInXSA9ICd0ZXN0MScKKyAgICA+Pj4gZWxlbS5hdHRyaWJbJ3Rlc3RjJ10gPSAndGVzdDInCisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCisgICAgJzx0ZXN0IHRlc3RhPSJ0ZXN0dmFsIiB0ZXN0Yj0idGVzdDEiIHRlc3RjPSJ0ZXN0MiI+YWE8L3Rlc3Q+JworICAgICIiIgorCitkZWYgbWFrZWVsZW1lbnQoKToKKyAgICAiIiIKKyAgICBUZXN0IG1ha2VlbGVtZW50IGhhbmRsaW5nLgorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQorICAgID4+PiBhdHRyaWIgPSB7ImtleSI6ICJ2YWx1ZSJ9CisgICAgPj4+IHN1YmVsZW0gPSBlbGVtLm1ha2VlbGVtZW50KCJzdWJ0YWciLCBhdHRyaWIpCisgICAgPj4+IGlmIHN1YmVsZW0uYXR0cmliIGlzIGF0dHJpYjoKKyAgICAuLi4gICAgIHByaW50ICJhdHRyaWIgYWxpYXNpbmciCisgICAgPj4+IGVsZW0uYXBwZW5kKHN1YmVsZW0pCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCisKKyAgICA+Pj4gZWxlbS5jbGVhcigpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnIC8+JworICAgID4+PiBlbGVtLmFwcGVuZChzdWJlbGVtKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PC90YWc+JworICAgID4+PiBlbGVtLmV4dGVuZChbc3ViZWxlbSwgc3ViZWxlbV0pCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48c3VidGFnIGtleT0idmFsdWUiIC8+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKyAgICA+Pj4gZWxlbVs6XSA9IFtzdWJlbGVtXQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PC90YWc+JworICAgID4+PiBlbGVtWzpdID0gdHVwbGUoW3N1YmVsZW1dKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PC90YWc+JworCisgICAgIiIiCisKK2RlZiBwYXJzZWZpbGUoKToKKyAgICAiIiIKKyAgICBUZXN0IHBhcnNpbmcgZnJvbSBmaWxlLgorCisgICAgPj4+IHRyZWUgPSBFVC5wYXJzZShTSU1QTEVfWE1MRklMRSkKKyAgICA+Pj4gbm9ybWFsaXplX2NybGYodHJlZSkKKyAgICA+Pj4gdHJlZS53cml0ZShzeXMuc3Rkb3V0KQorICAgIDxyb290PgorICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CisgICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L3Jvb3Q+CisgICAgPj4+IHRyZWUgPSBFVC5wYXJzZShTSU1QTEVfTlNfWE1MRklMRSkKKyAgICA+Pj4gbm9ybWFsaXplX2NybGYodHJlZSkKKyAgICA+Pj4gdHJlZS53cml0ZShzeXMuc3Rkb3V0KQorICAgIDxuczA6cm9vdCB4bWxuczpuczA9Im5hbWVzcGFjZSI+CisgICAgICAgPG5zMDplbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L25zMDplbGVtZW50PgorICAgICAgIDxuczA6ZWxlbWVudD50ZXh0PC9uczA6ZWxlbWVudD50YWlsCisgICAgICAgPG5zMDplbXB0eS1lbGVtZW50IC8+CisgICAgPC9uczA6cm9vdD4KKworICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUpIGFzIGY6CisgICAgLi4uICAgICBkYXRhID0gZi5yZWFkKCkKKworICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoKQorICAgID4+PiBwYXJzZXIudmVyc2lvbiAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAnRXhwYXQgLi4uJworICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQorICAgID4+PiBwcmludCBzZXJpYWxpemUocGFyc2VyLmNsb3NlKCkpCisgICAgPHJvb3Q+CisgICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KKyAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgICAgICA8ZW1wdHktZWxlbWVudCAvPgorICAgIDwvcm9vdD4KKworICAgID4+PiBwYXJzZXIgPSBFVC5YTUxUcmVlQnVpbGRlcigpICMgMS4yIGNvbXBhdGliaWxpdHkKKyAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKHBhcnNlci5jbG9zZSgpKQorICAgIDxyb290PgorICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CisgICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L3Jvb3Q+CisKKyAgICA+Pj4gdGFyZ2V0ID0gRVQuVHJlZUJ1aWxkZXIoKQorICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PXRhcmdldCkKKyAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKHBhcnNlci5jbG9zZSgpKQorICAgIDxyb290PgorICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CisgICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L3Jvb3Q+CisgICAgIiIiCisKK2RlZiBwYXJzZWxpdGVyYWwoKToKKyAgICAiIiIKKyAgICA+Pj4gZWxlbWVudCA9IEVULlhNTCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3lzLnN0ZG91dCkKKyAgICA8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4KKyAgICA+Pj4gZWxlbWVudCA9IEVULmZyb21zdHJpbmcoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN5cy5zdGRvdXQpCisgICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CisgICAgPj4+IHNlcXVlbmNlID0gWyI8aHRtbD48Ym9keT4iLCAidGV4dDwvYm8iLCAiZHk+PC9odG1sPiJdCisgICAgPj4+IGVsZW1lbnQgPSBFVC5mcm9tc3RyaW5nbGlzdChzZXF1ZW5jZSkKKyAgICA+Pj4gcHJpbnQgRVQudG9zdHJpbmcoZWxlbWVudCkKKyAgICA8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4KKyAgICA+Pj4gcHJpbnQgIiIuam9pbihFVC50b3N0cmluZ2xpc3QoZWxlbWVudCkpCisgICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW1lbnQsICJhc2NpaSIpCisgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2FzY2lpJz8+XFxuPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IgorICAgID4+PiBfLCBpZHMgPSBFVC5YTUxJRCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKKyAgICA+Pj4gbGVuKGlkcykKKyAgICAwCisgICAgPj4+IF8sIGlkcyA9IEVULlhNTElEKCI8aHRtbD48Ym9keSBpZD0nYm9keSc+dGV4dDwvYm9keT48L2h0bWw+IikKKyAgICA+Pj4gbGVuKGlkcykKKyAgICAxCisgICAgPj4+IGlkc1siYm9keSJdLnRhZworICAgICdib2R5JworICAgICIiIgorCitkZWYgaXRlcnBhcnNlKCk6CisgICAgIiIiCisgICAgVGVzdCBpdGVycGFyc2UgaW50ZXJmYWNlLgorCisgICAgPj4+IGl0ZXJwYXJzZSA9IEVULml0ZXJwYXJzZQorCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX1hNTEZJTEUpCisgICAgPj4+IGFjdGlvbiwgZWxlbSA9IG5leHQoY29udGV4dCkKKyAgICA+Pj4gcHJpbnQgYWN0aW9uLCBlbGVtLnRhZworICAgIGVuZCBlbGVtZW50CisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisgICAgZW5kIGVsZW1lbnQKKyAgICBlbmQgZW1wdHktZWxlbWVudAorICAgIGVuZCByb290CisgICAgPj4+IGNvbnRleHQucm9vdC50YWcKKyAgICAncm9vdCcKKworICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9OU19YTUxGSUxFKQorICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CisgICAgLi4uICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZworICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfXJvb3QKKworICAgID4+PiBldmVudHMgPSAoKQorICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFLCBldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisKKyAgICA+Pj4gZXZlbnRzID0gKCkKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSwgZXZlbnRzPWV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKworICAgID4+PiBldmVudHMgPSAoInN0YXJ0IiwgImVuZCIpCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX1hNTEZJTEUsIGV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICBzdGFydCByb290CisgICAgc3RhcnQgZWxlbWVudAorICAgIGVuZCBlbGVtZW50CisgICAgc3RhcnQgZWxlbWVudAorICAgIGVuZCBlbGVtZW50CisgICAgc3RhcnQgZW1wdHktZWxlbWVudAorICAgIGVuZCBlbXB0eS1lbGVtZW50CisgICAgZW5kIHJvb3QKKworICAgID4+PiBldmVudHMgPSAoInN0YXJ0IiwgImVuZCIsICJzdGFydC1ucyIsICJlbmQtbnMiKQorICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9OU19YTUxGSUxFLCBldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBpZiBhY3Rpb24gaW4gKCJzdGFydCIsICJlbmQiKToKKyAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICAuLi4gICBlbHNlOgorICAgIC4uLiAgICAgcHJpbnQgYWN0aW9uLCBlbGVtCisgICAgc3RhcnQtbnMgKCcnLCAnbmFtZXNwYWNlJykKKyAgICBzdGFydCB7bmFtZXNwYWNlfXJvb3QKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1yb290CisgICAgZW5kLW5zIE5vbmUKKworICAgID4+PiBldmVudHMgPSAoInN0YXJ0IiwgImVuZCIsICJib2d1cyIpCisgICAgPj4+IHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSwgInJiIikgYXMgZjoKKyAgICAuLi4gICAgIGl0ZXJwYXJzZShmLCBldmVudHMpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFZhbHVlRXJyb3I6IHVua25vd24gZXZlbnQgJ2JvZ3VzJworCisgICAgPj4+IGltcG9ydCBTdHJpbmdJTworCisgICAgPj4+IHNvdXJjZSA9IFN0cmluZ0lPLlN0cmluZ0lPKAorICAgIC4uLiAgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz5cXG4iCisgICAgLi4uICAgICAiPGJvZHkgeG1sbnM9J2h0dHA6Ly8mIzIzMztmZmJvdC5vcmcvbnMnXFxuIgorICAgIC4uLiAgICAgIiAgICAgIHhtbG5zOmNsXFx4ZTk9J2h0dHA6Ly9lZmZib3Qub3JnL25zJz50ZXh0PC9ib2R5PlxcbiIpCisgICAgPj4+IGV2ZW50cyA9ICgic3RhcnQtbnMiLCkKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShzb3VyY2UsIGV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgICAgcHJpbnQgYWN0aW9uLCBlbGVtCisgICAgc3RhcnQtbnMgKCcnLCB1J2h0dHA6Ly9cXHhlOWZmYm90Lm9yZy9ucycpCisgICAgc3RhcnQtbnMgKHUnY2xcXHhlOScsICdodHRwOi8vZWZmYm90Lm9yZy9ucycpCisKKyAgICA+Pj4gc291cmNlID0gU3RyaW5nSU8uU3RyaW5nSU8oIjxkb2N1bWVudCAvPmp1bmsiKQorICAgID4+PiB0cnk6CisgICAgLi4uICAgZm9yIGFjdGlvbiwgZWxlbSBpbiBpdGVycGFyc2Uoc291cmNlKToKKyAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICAuLi4gZXhjZXB0IEVULlBhcnNlRXJyb3IsIHY6CisgICAgLi4uICAgcHJpbnQgdgorICAgIGVuZCBkb2N1bWVudAorICAgIGp1bmsgYWZ0ZXIgZG9jdW1lbnQgZWxlbWVudDogbGluZSAxLCBjb2x1bW4gMTIKKyAgICAiIiIKKworZGVmIHdyaXRlZmlsZSgpOgorICAgICIiIgorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gZWxlbS50ZXh0ID0gInRleHQiCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPnRleHQ8L3RhZz4nCisgICAgPj4+IEVULlN1YkVsZW1lbnQoZWxlbSwgInN1YnRhZyIpLnRleHQgPSAic3VidGV4dCIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+dGV4dDxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPjwvdGFnPicKKworICAgIFRlc3QgdGFnIHN1cHByZXNzaW9uCisgICAgPj4+IGVsZW0udGFnID0gTm9uZQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAndGV4dDxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPicKKyAgICA+Pj4gZWxlbS5pbnNlcnQoMCwgRVQuQ29tbWVudCgiY29tbWVudCIpKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgICAgICMgYXNzdW1lcyAxLjMKKyAgICAndGV4dDwhLS1jb21tZW50LS0+PHN1YnRhZz5zdWJ0ZXh0PC9zdWJ0YWc+JworICAgID4+PiBlbGVtWzBdID0gRVQuUEkoImtleSIsICJ2YWx1ZSIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICd0ZXh0PD9rZXkgdmFsdWU/PjxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPicKKyAgICAiIiIKKworZGVmIGN1c3RvbV9idWlsZGVyKCk6CisgICAgIiIiCisgICAgVGVzdCBwYXJzZXIgdy4gY3VzdG9tIGJ1aWxkZXIuCisKKyAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFKSBhcyBmOgorICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgPj4+IGNsYXNzIEJ1aWxkZXI6CisgICAgLi4uICAgICBkZWYgc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWIpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJzdGFydCIsIHRhZworICAgIC4uLiAgICAgZGVmIGVuZChzZWxmLCB0YWcpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJlbmQiLCB0YWcKKyAgICAuLi4gICAgIGRlZiBkYXRhKHNlbGYsIHRleHQpOgorICAgIC4uLiAgICAgICAgIHBhc3MKKyAgICA+Pj4gYnVpbGRlciA9IEJ1aWxkZXIoKQorICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PWJ1aWxkZXIpCisgICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCisgICAgc3RhcnQgcm9vdAorICAgIHN0YXJ0IGVsZW1lbnQKKyAgICBlbmQgZWxlbWVudAorICAgIHN0YXJ0IGVsZW1lbnQKKyAgICBlbmQgZWxlbWVudAorICAgIHN0YXJ0IGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgZW1wdHktZWxlbWVudAorICAgIGVuZCByb290CisKKyAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9OU19YTUxGSUxFKSBhcyBmOgorICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgPj4+IGNsYXNzIEJ1aWxkZXI6CisgICAgLi4uICAgICBkZWYgc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWIpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJzdGFydCIsIHRhZworICAgIC4uLiAgICAgZGVmIGVuZChzZWxmLCB0YWcpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJlbmQiLCB0YWcKKyAgICAuLi4gICAgIGRlZiBkYXRhKHNlbGYsIHRleHQpOgorICAgIC4uLiAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgIGRlZiBwaShzZWxmLCB0YXJnZXQsIGRhdGEpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJwaSIsIHRhcmdldCwgcmVwcihkYXRhKQorICAgIC4uLiAgICAgZGVmIGNvbW1lbnQoc2VsZiwgZGF0YSk6CisgICAgLi4uICAgICAgICAgcHJpbnQgImNvbW1lbnQiLCByZXByKGRhdGEpCisgICAgPj4+IGJ1aWxkZXIgPSBCdWlsZGVyKCkKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD1idWlsZGVyKQorICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQorICAgIHBpIHBpICdkYXRhJworICAgIGNvbW1lbnQgJyBjb21tZW50ICcKKyAgICBzdGFydCB7bmFtZXNwYWNlfXJvb3QKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1yb290CisKKyAgICAiIiIKKworZGVmIGdldGNoaWxkcmVuKCk6CisgICAgIiIiCisgICAgVGVzdCBFbGVtZW50LmdldGNoaWxkcmVuKCkKKworICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUsICJyIikgYXMgZjoKKyAgICAuLi4gICAgIHRyZWUgPSBFVC5wYXJzZShmKQorICAgID4+PiBmb3IgZWxlbSBpbiB0cmVlLmdldHJvb3QoKS5pdGVyKCk6CisgICAgLi4uICAgICBzdW1tYXJpemVfbGlzdChlbGVtLmdldGNoaWxkcmVuKCkpCisgICAgWydlbGVtZW50JywgJ2VsZW1lbnQnLCAnZW1wdHktZWxlbWVudCddCisgICAgW10KKyAgICBbXQorICAgIFtdCisgICAgPj4+IGZvciBlbGVtIGluIHRyZWUuZ2V0aXRlcmF0b3IoKToKKyAgICAuLi4gICAgIHN1bW1hcml6ZV9saXN0KGVsZW0uZ2V0Y2hpbGRyZW4oKSkKKyAgICBbJ2VsZW1lbnQnLCAnZWxlbWVudCcsICdlbXB0eS1lbGVtZW50J10KKyAgICBbXQorICAgIFtdCisgICAgW10KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGxlbihlbGVtLmdldGNoaWxkcmVuKCkpCisgICAgMworICAgID4+PiBsZW4oZWxlbVsyXS5nZXRjaGlsZHJlbigpKQorICAgIDEKKyAgICA+Pj4gZWxlbVs6XSA9PSBlbGVtLmdldGNoaWxkcmVuKCkKKyAgICBUcnVlCisgICAgPj4+IGNoaWxkMSA9IGVsZW1bMF0KKyAgICA+Pj4gY2hpbGQyID0gZWxlbVsyXQorICAgID4+PiBkZWwgZWxlbVsxOjJdCisgICAgPj4+IGxlbihlbGVtLmdldGNoaWxkcmVuKCkpCisgICAgMgorICAgID4+PiBjaGlsZDEgPT0gZWxlbVswXQorICAgIFRydWUKKyAgICA+Pj4gY2hpbGQyID09IGVsZW1bMV0KKyAgICBUcnVlCisgICAgPj4+IGVsZW1bMDoyXSA9IFtjaGlsZDIsIGNoaWxkMV0KKyAgICA+Pj4gY2hpbGQyID09IGVsZW1bMF0KKyAgICBUcnVlCisgICAgPj4+IGNoaWxkMSA9PSBlbGVtWzFdCisgICAgVHJ1ZQorICAgID4+PiBjaGlsZDEgPT0gZWxlbVswXQorICAgIEZhbHNlCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBlbGVtLmdldGNoaWxkcmVuKCkKKyAgICBbXQorICAgICIiIgorCitkZWYgd3JpdGVzdHJpbmcoKToKKyAgICAiIiIKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKKyAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKKyAgICAnPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+JworICAgID4+PiBlbGVtID0gRVQuZnJvbXN0cmluZygiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKKyAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKKyAgICAnPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+JworICAgICIiIgorCitkZWYgY2hlY2tfZW5jb2RpbmcoZW5jb2RpbmcpOgorICAgICIiIgorICAgID4+PiBjaGVja19lbmNvZGluZygiYXNjaWkiKQorICAgID4+PiBjaGVja19lbmNvZGluZygidXMtYXNjaWkiKQorICAgID4+PiBjaGVja19lbmNvZGluZygiaXNvLTg4NTktMSIpCisgICAgPj4+IGNoZWNrX2VuY29kaW5nKCJpc28tODg1OS0xNSIpCisgICAgPj4+IGNoZWNrX2VuY29kaW5nKCJjcDQzNyIpCisgICAgPj4+IGNoZWNrX2VuY29kaW5nKCJtYWMtcm9tYW4iKQorICAgICIiIgorICAgIEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz48eG1sIC8+IiAlIGVuY29kaW5nKQorCitkZWYgZW5jb2RpbmcoKToKKyAgICByIiIiCisgICAgVGVzdCBlbmNvZGluZyBpc3N1ZXMuCisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGVsZW0udGV4dCA9IHUiYWJjIgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz5hYmM8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKQorICAgICc8dGFnPmFiYzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpCisgICAgJzx0YWc+YWJjPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+XG48dGFnPmFiYzwvdGFnPiIKKworICAgID4+PiBlbGVtLnRleHQgPSAiPCZcIlwnPiIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+Jmx0OyZhbXA7IlwnJmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgJzx0YWc+Jmx0OyZhbXA7IlwnJmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpICMgY2RhdGEgY2hhcmFjdGVycworICAgICc8dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCisgICAgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCisKKyAgICA+Pj4gZWxlbS5hdHRyaWJbImtleSJdID0gIjwmXCJcJz4iCisgICAgPj4+IGVsZW0udGV4dCA9IE5vbmUKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWcga2V5PSImbHQ7JmFtcDsmcXVvdDtcJyZndDsiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAnPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgICc8dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKKyAgICAnPD94bWwgdmVyc2lvbj1cJzEuMFwnIGVuY29kaW5nPVwnaXNvLTg4NTktMVwnPz5cbjx0YWcga2V5PSImbHQ7JmFtcDsmcXVvdDtcJyZndDsiIC8+JworCisgICAgPj4+IGVsZW0udGV4dCA9IHUnXHhlNVx4ZjZceGY2PD4nCisgICAgPj4+IGVsZW0uYXR0cmliLmNsZWFyKCkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+JiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKQorICAgICc8dGFnPlx4YzNceGE1XHhjM1x4YjZceGMzXHhiNiZsdDsmZ3Q7PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InVzLWFzY2lpIikKKyAgICAnPHRhZz4mIzIyOTsmIzI0NjsmIzI0NjsmbHQ7Jmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKKyAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/PlxuPHRhZz5ceGU1XHhmNlx4ZjYmbHQ7Jmd0OzwvdGFnPiIKKworICAgID4+PiBlbGVtLmF0dHJpYlsia2V5Il0gPSB1J1x4ZTVceGY2XHhmNjw+JworICAgID4+PiBlbGVtLnRleHQgPSBOb25lCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnIGtleT0iJiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDsiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAnPHRhZyBrZXk9Ilx4YzNceGE1XHhjM1x4YjZceGMzXHhiNiZsdDsmZ3Q7IiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpCisgICAgJzx0YWcga2V5PSImIzIyOTsmIzI0NjsmIzI0NjsmbHQ7Jmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCisgICAgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnIGtleT0iXHhlNVx4ZjZceGY2Jmx0OyZndDsiIC8+JworICAgICIiIgorCitkZWYgbWV0aG9kcygpOgorICAgIHIiIiIKKyAgICBUZXN0IHNlcmlhbGl6YXRpb24gbWV0aG9kcy4KKworICAgID4+PiBlID0gRVQuWE1MKCI8aHRtbD48bGluay8+PHNjcmlwdD4xICZsdDsgMjwvc2NyaXB0PjwvaHRtbD4iKQorICAgID4+PiBlLnRhaWwgPSAiXG4iCisgICAgPj4+IHNlcmlhbGl6ZShlKQorICAgICc8aHRtbD48bGluayAvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+XG4nCisgICAgPj4+IHNlcmlhbGl6ZShlLCBtZXRob2Q9Tm9uZSkKKyAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPSJ4bWwiKQorICAgICc8aHRtbD48bGluayAvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+XG4nCisgICAgPj4+IHNlcmlhbGl6ZShlLCBtZXRob2Q9Imh0bWwiKQorICAgICc8aHRtbD48bGluaz48c2NyaXB0PjEgPCAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPSJ0ZXh0IikKKyAgICAnMSA8IDJcbicKKyAgICAiIiIKKworZGVmIGl0ZXJhdG9ycygpOgorICAgICIiIgorICAgIFRlc3QgaXRlcmF0b3JzLgorCisgICAgPj4+IGUgPSBFVC5YTUwoIjxodG1sPjxib2R5PnRoaXMgaXMgYSA8aT5wYXJhZ3JhcGg8L2k+LjwvYm9keT4uLjwvaHRtbD4iKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlLml0ZXIoKSkKKyAgICBbJ2h0bWwnLCAnYm9keScsICdpJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZS5maW5kKCJib2R5IikuaXRlcigpKQorICAgIFsnYm9keScsICdpJ10KKyAgICA+Pj4gc3VtbWFyaXplKG5leHQoZS5pdGVyKCkpKQorICAgICdodG1sJworICAgID4+PiAiIi5qb2luKGUuaXRlcnRleHQoKSkKKyAgICAndGhpcyBpcyBhIHBhcmFncmFwaC4uLicKKyAgICA+Pj4gIiIuam9pbihlLmZpbmQoImJvZHkiKS5pdGVydGV4dCgpKQorICAgICd0aGlzIGlzIGEgcGFyYWdyYXBoLicKKyAgICA+Pj4gbmV4dChlLml0ZXJ0ZXh0KCkpCisgICAgJ3RoaXMgaXMgYSAnCisKKyAgICBNZXRob2QgaXRlcnBhcnNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuIFNlZSBidWcgNjQ3Mi4KKworICAgID4+PiBzb3VyY2VmaWxlID0gc2VyaWFsaXplKGUsIHRvX3N0cmluZz1GYWxzZSkKKyAgICA+Pj4gbmV4dChFVC5pdGVycGFyc2Uoc291cmNlZmlsZSkpICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICgnZW5kJywgPEVsZW1lbnQgJ2knIGF0IDB4Li4uPikKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoTm9uZSkKKyAgICA+Pj4gdHJlZS5pdGVyKCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgQXR0cmlidXRlRXJyb3I6ICdOb25lVHlwZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2l0ZXInCisgICAgIiIiCisKK0VOVElUWV9YTUwgPSAiIiJcCis8IURPQ1RZUEUgcG9pbnRzIFsKKzwhRU5USVRZICUgdXNlci1lbnRpdGllcyBTWVNURU0gJ3VzZXItZW50aXRpZXMueG1sJz4KKyV1c2VyLWVudGl0aWVzOworXT4KKzxkb2N1bWVudD4mZW50aXR5OzwvZG9jdW1lbnQ+CisiIiIKKworZGVmIGVudGl0eSgpOgorICAgICIiIgorICAgIFRlc3QgZW50aXR5IGhhbmRsaW5nLgorCisgICAgMSkgZ29vZCBlbnRpdGllcworCisgICAgPj4+IGUgPSBFVC5YTUwoIjxkb2N1bWVudCB0aXRsZT0nJiN4ODIzMDsnPnRlc3Q8L2RvY3VtZW50PiIpCisgICAgPj4+IHNlcmlhbGl6ZShlKQorICAgICc8ZG9jdW1lbnQgdGl0bGU9IiYjMzMzMjg7Ij50ZXN0PC9kb2N1bWVudD4nCisKKyAgICAyKSBiYWQgZW50aXRpZXMKKworICAgID4+PiBFVC5YTUwoIjxkb2N1bWVudD4mZW50aXR5OzwvZG9jdW1lbnQ+IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgUGFyc2VFcnJvcjogdW5kZWZpbmVkIGVudGl0eTogbGluZSAxLCBjb2x1bW4gMTAKKworICAgID4+PiBFVC5YTUwoRU5USVRZX1hNTCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgUGFyc2VFcnJvcjogdW5kZWZpbmVkIGVudGl0eSAmZW50aXR5OzogbGluZSA1LCBjb2x1bW4gMTAKKworICAgIDMpIGN1c3RvbSBlbnRpdHkKKworICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuZW50aXR5WyJlbnRpdHkiXSA9ICJ0ZXh0IgorICAgID4+PiBwYXJzZXIuZmVlZChFTlRJVFlfWE1MKQorICAgID4+PiByb290ID0gcGFyc2VyLmNsb3NlKCkKKyAgICA+Pj4gc2VyaWFsaXplKHJvb3QpCisgICAgJzxkb2N1bWVudD50ZXh0PC9kb2N1bWVudD4nCisgICAgIiIiCisKK2RlZiBlcnJvcih4bWwpOgorICAgICIiIgorCisgICAgVGVzdCBlcnJvciBoYW5kbGluZy4KKworICAgID4+PiBpc3N1YmNsYXNzKEVULlBhcnNlRXJyb3IsIFN5bnRheEVycm9yKQorICAgIFRydWUKKyAgICA+Pj4gZXJyb3IoImZvbyIpLnBvc2l0aW9uCisgICAgKDEsIDApCisgICAgPj4+IGVycm9yKCI8dGFnPiZmb287PC90YWc+IikucG9zaXRpb24KKyAgICAoMSwgNSkKKyAgICA+Pj4gZXJyb3IoImZvb2JhcjwiKS5wb3NpdGlvbgorICAgICgxLCA2KQorCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBFVC5YTUwoeG1sKQorICAgIGV4Y2VwdCBFVC5QYXJzZUVycm9yOgorICAgICAgICByZXR1cm4gc3lzLmV4Y192YWx1ZQorCitkZWYgbmFtZXNwYWNlKCk6CisgICAgIiIiCisgICAgVGVzdCBuYW1lc3BhY2UgaXNzdWVzLgorCisgICAgMSkgeG1sIG5hbWVzcGFjZQorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjx0YWcgeG1sOmxhbmc9J2VuJyAvPiIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuMQorICAgICc8dGFnIHhtbDpsYW5nPSJlbiIgLz4nCisKKyAgICAyKSBvdGhlciAid2VsbC1rbm93biIgbmFtZXNwYWNlcworCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIycgLz4iKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjEKKyAgICAnPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIiAvPicKKworICAgID4+PiBlbGVtID0gRVQuWE1MKCI8aHRtbDpodG1sIHhtbG5zOmh0bWw9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnIC8+IikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4yCisgICAgJzxodG1sOmh0bWwgeG1sbnM6aHRtbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgLz4nCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0naHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZScgLz4iKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjMKKyAgICAnPG5zMDpFbnZlbG9wZSB4bWxuczpuczA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUiIC8+JworCisgICAgMykgdW5rbm93biBuYW1lc3BhY2VzCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTF9OUykKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGVsZW0pCisgICAgPG5zMDpib2R5IHhtbG5zOm5zMD0iaHR0cDovL2VmZmJvdC5vcmcvbnMiPgorICAgICAgPG5zMDp0YWc+dGV4dDwvbnMwOnRhZz4KKyAgICAgIDxuczA6dGFnIC8+CisgICAgICA8bnMwOnNlY3Rpb24+CisgICAgICAgIDxuczA6dGFnPnN1YnRleHQ8L25zMDp0YWc+CisgICAgICA8L25zMDpzZWN0aW9uPgorICAgIDwvbnMwOmJvZHk+CisgICAgIiIiCisKK2RlZiBxbmFtZSgpOgorICAgICIiIgorICAgIFRlc3QgUU5hbWUgaGFuZGxpbmcuCisKKyAgICAxKSBkZWNvcmF0ZWQgdGFncworCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ7dXJpfXRhZyIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuMQorICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgLz4nCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KEVULlFOYW1lKCJ7dXJpfXRhZyIpKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjIKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudChFVC5RTmFtZSgidXJpIiwgInRhZyIpKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjMKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudChFVC5RTmFtZSgidXJpIiwgInRhZyIpKQorICAgID4+PiBzdWJlbGVtID0gRVQuU3ViRWxlbWVudChlbGVtLCBFVC5RTmFtZSgidXJpIiwgInRhZzEiKSkKKyAgICA+Pj4gc3ViZWxlbSA9IEVULlN1YkVsZW1lbnQoZWxlbSwgRVQuUU5hbWUoInVyaSIsICJ0YWcyIikpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuNAorICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSI+PG5zMDp0YWcxIC8+PG5zMDp0YWcyIC8+PC9uczA6dGFnPicKKworICAgIDIpIGRlY29yYXRlZCBhdHRyaWJ1dGVzCisKKyAgICA+Pj4gZWxlbS5jbGVhcigpCisgICAgPj4+IGVsZW0uYXR0cmliWyJ7dXJpfWtleSJdID0gInZhbHVlIgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjEKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9InZhbHVlIiAvPicKKworICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gZWxlbS5hdHRyaWJbRVQuUU5hbWUoInt1cml9a2V5IildID0gInZhbHVlIgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjIKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9InZhbHVlIiAvPicKKworICAgIDMpIGRlY29yYXRlZCB2YWx1ZXMgYXJlIG5vdCBjb252ZXJ0ZWQgYnkgZGVmYXVsdCwgYnV0IHRoZQorICAgICAgIFFOYW1lIHdyYXBwZXIgY2FuIGJlIHVzZWQgZm9yIHZhbHVlcworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9ICJ7dXJpfXZhbHVlIgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAzLjEKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9Int1cml9dmFsdWUiIC8+JworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9IEVULlFOYW1lKCJ7dXJpfXZhbHVlIikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMy4yCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJuczA6dmFsdWUiIC8+JworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBzdWJlbGVtID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gc3ViZWxlbS5hdHRyaWJbInt1cmkxfWtleSJdID0gRVQuUU5hbWUoInt1cmkyfXZhbHVlIikKKyAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKKyAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMy4zCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiB4bWxuczpuczE9InVyaTEiIHhtbG5zOm5zMj0idXJpMiI+PHRhZyBuczE6a2V5PSJuczI6dmFsdWUiIC8+PHRhZyBuczE6a2V5PSJuczI6dmFsdWUiIC8+PC9uczA6dGFnPicKKworICAgIDQpIERpcmVjdCBRTmFtZSB0ZXN0cworCisgICAgPj4+IHN0cihFVC5RTmFtZSgnbnMnLCAndGFnJykpCisgICAgJ3tuc310YWcnCisgICAgPj4+IHN0cihFVC5RTmFtZSgne25zfXRhZycpKQorICAgICd7bnN9dGFnJworICAgID4+PiBxMSA9IEVULlFOYW1lKCducycsICd0YWcnKQorICAgID4+PiBxMiA9IEVULlFOYW1lKCducycsICd0YWcnKQorICAgID4+PiBxMSA9PSBxMgorICAgIFRydWUKKyAgICA+Pj4gcTIgPSBFVC5RTmFtZSgnbnMnLCAnb3RoZXItdGFnJykKKyAgICA+Pj4gcTEgPT0gcTIKKyAgICBGYWxzZQorICAgID4+PiBxMSA9PSAnbnM6dGFnJworICAgIEZhbHNlCisgICAgPj4+IHExID09ICd7bnN9dGFnJworICAgIFRydWUKKyAgICAiIiIKKworZGVmIGRvY3R5cGVfcHVibGljKCk6CisgICAgIiIiCisgICAgVGVzdCBQVUJMSUMgZG9jdHlwZS4KKworICAgID4+PiBlbGVtID0gRVQuWE1MKCc8IURPQ1RZUEUgaHRtbCBQVUJMSUMnCisgICAgLi4uICAgJyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iJworICAgIC4uLiAgICcgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPicKKyAgICAuLi4gICAnPGh0bWw+dGV4dDwvaHRtbD4nKQorCisgICAgIiIiCisKK2RlZiB4cGF0aF90b2tlbml6ZXIocCk6CisgICAgIiIiCisgICAgVGVzdCB0aGUgWFBhdGggdG9rZW5pemVyLgorCisgICAgPj4+ICMgdGVzdHMgZnJvbSB0aGUgeG1sIHNwZWNpZmljYXRpb24KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIqIikKKyAgICBbJyonXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoInRleHQoKSIpCisgICAgWyd0ZXh0JywgJygpJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJAbmFtZSIpCisgICAgWydAJywgJ25hbWUnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIkAqIikKKyAgICBbJ0AnLCAnKiddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigicGFyYVsxXSIpCisgICAgWydwYXJhJywgJ1snLCAnMScsICddJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJwYXJhW2xhc3QoKV0iKQorICAgIFsncGFyYScsICdbJywgJ2xhc3QnLCAnKCknLCAnXSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiKi9wYXJhIikKKyAgICBbJyonLCAnLycsICdwYXJhJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIvZG9jL2NoYXB0ZXJbNV0vc2VjdGlvblsyXSIpCisgICAgWycvJywgJ2RvYycsICcvJywgJ2NoYXB0ZXInLCAnWycsICc1JywgJ10nLCAnLycsICdzZWN0aW9uJywgJ1snLCAnMicsICddJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJjaGFwdGVyLy9wYXJhIikKKyAgICBbJ2NoYXB0ZXInLCAnLy8nLCAncGFyYSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLy9wYXJhIikKKyAgICBbJy8vJywgJ3BhcmEnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi8vb2xpc3QvaXRlbSIpCisgICAgWycvLycsICdvbGlzdCcsICcvJywgJ2l0ZW0nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4iKQorICAgIFsnLiddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi8vcGFyYSIpCisgICAgWycuJywgJy8vJywgJ3BhcmEnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4uIikKKyAgICBbJy4uJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuLi9AbGFuZyIpCisgICAgWycuLicsICcvJywgJ0AnLCAnbGFuZyddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiY2hhcHRlclt0aXRsZV0iKQorICAgIFsnY2hhcHRlcicsICdbJywgJ3RpdGxlJywgJ10nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoImVtcGxveWVlW0BzZWNyZXRhcnkgYW5kIEBhc3Npc3RhbnRdIikKKyAgICBbJ2VtcGxveWVlJywgJ1snLCAnQCcsICdzZWNyZXRhcnknLCAnJywgJ2FuZCcsICcnLCAnQCcsICdhc3Npc3RhbnQnLCAnXSddCisKKyAgICA+Pj4gIyBhZGRpdGlvbmFsIHRlc3RzCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigie2h0dHA6Ly9zcGFtfWVnZyIpCisgICAgWyd7aHR0cDovL3NwYW19ZWdnJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuL3NwYW0uZWdnIikKKyAgICBbJy4nLCAnLycsICdzcGFtLmVnZyddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi8ve2h0dHA6Ly9zcGFtfWVnZyIpCisgICAgWycuJywgJy8vJywgJ3todHRwOi8vc3BhbX1lZ2cnXQorICAgICIiIgorICAgIGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50UGF0aAorICAgIG91dCA9IFtdCisgICAgZm9yIG9wLCB0YWcgaW4gRWxlbWVudFBhdGgueHBhdGhfdG9rZW5pemVyKHApOgorICAgICAgICBvdXQuYXBwZW5kKG9wIG9yIHRhZykKKyAgICByZXR1cm4gb3V0CisKK2RlZiBwcm9jZXNzaW5naW5zdHJ1Y3Rpb24oKToKKyAgICAiIiIKKyAgICBUZXN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBkaXJlY3RseQorCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlByb2Nlc3NpbmdJbnN0cnVjdGlvbigndGVzdCcsICdpbnN0cnVjdGlvbicpKQorICAgICc8P3Rlc3QgaW5zdHJ1Y3Rpb24/PicKKyAgICA+Pj4gRVQudG9zdHJpbmcoRVQuUEkoJ3Rlc3QnLCAnaW5zdHJ1Y3Rpb24nKSkKKyAgICAnPD90ZXN0IGluc3RydWN0aW9uPz4nCisKKyAgICBJc3N1ZSAjMjc0NgorCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgJzx0ZXN0aW5nJj4nKSkKKyAgICAnPD90ZXN0IDx0ZXN0aW5nJj4/PicKKyAgICA+Pj4gRVQudG9zdHJpbmcoRVQuUEkoJ3Rlc3QnLCB1Jzx0ZXN0aW5nJj5ceGUzJyksICdsYXRpbjEnKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdsYXRpbjEnPz5cXG48P3Rlc3QgPHRlc3RpbmcmPlxceGUzPz4iCisgICAgIiIiCisKKyMKKyMgeGluY2x1ZGUgdGVzdHMgKHNhbXBsZXMgZnJvbSBhcHBlbmRpeCBDIG9mIHRoZSB4aW5jbHVkZSBzcGVjaWZpY2F0aW9uKQorCitYSU5DTFVERSA9IHt9CisKK1hJTkNMVURFWyJDMS54bWwiXSA9ICIiIlwKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgPHA+MTIwIE16IGlzIGFkZXF1YXRlIGZvciBhbiBhdmVyYWdlIGhvbWUgdXNlci48L3A+CisgIDx4aTppbmNsdWRlIGhyZWY9ImRpc2NsYWltZXIueG1sIi8+Cis8L2RvY3VtZW50PgorIiIiCisKK1hJTkNMVURFWyJkaXNjbGFpbWVyLnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZGlzY2xhaW1lcj4KKyAgPHA+VGhlIG9waW5pb25zIHJlcHJlc2VudGVkIGhlcmVpbiByZXByZXNlbnQgdGhvc2Ugb2YgdGhlIGluZGl2aWR1YWwKKyAgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgb2ZmaWNpYWwgcG9saWN5IGVuZG9yc2VkIGJ5IHRoaXMKKyAgb3JnYW5pemF0aW9uLjwvcD4KKzwvZGlzY2xhaW1lcj4KKyIiIgorCitYSU5DTFVERVsiQzIueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDxwPlRoaXMgZG9jdW1lbnQgaGFzIGJlZW4gYWNjZXNzZWQKKyAgPHhpOmluY2x1ZGUgaHJlZj0iY291bnQudHh0IiBwYXJzZT0idGV4dCIvPiB0aW1lcy48L3A+Cis8L2RvY3VtZW50PgorIiIiCisKK1hJTkNMVURFWyJjb3VudC50eHQiXSA9ICIzMjQzODciCisKK1hJTkNMVURFWyJDMmIueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDxwPlRoaXMgZG9jdW1lbnQgaGFzIGJlZW4gPGVtPmFjY2Vzc2VkPC9lbT4KKyAgPHhpOmluY2x1ZGUgaHJlZj0iY291bnQudHh0IiBwYXJzZT0idGV4dCIvPiB0aW1lcy48L3A+Cis8L2RvY3VtZW50PgorIiIiCisKK1hJTkNMVURFWyJDMy54bWwiXSA9ICIiIlwKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgPHA+VGhlIGZvbGxvd2luZyBpcyB0aGUgc291cmNlIG9mIHRoZSAiZGF0YS54bWwiIHJlc291cmNlOjwvcD4KKyAgPGV4YW1wbGU+PHhpOmluY2x1ZGUgaHJlZj0iZGF0YS54bWwiIHBhcnNlPSJ0ZXh0Ii8+PC9leGFtcGxlPgorPC9kb2N1bWVudD4KKyIiIgorCitYSU5DTFVERVsiZGF0YS54bWwiXSA9ICIiIlwKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPGRhdGE+CisgIDxpdGVtPjwhW0NEQVRBW0Jyb29rcyAmIFNoaWVsZHNdXT48L2l0ZW0+Cis8L2RhdGE+CisiIiIKKworWElOQ0xVREVbIkM1LnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZGl2IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgPHhpOmluY2x1ZGUgaHJlZj0iZXhhbXBsZS50eHQiIHBhcnNlPSJ0ZXh0Ij4KKyAgICA8eGk6ZmFsbGJhY2s+CisgICAgICA8eGk6aW5jbHVkZSBocmVmPSJmYWxsYmFjay1leGFtcGxlLnR4dCIgcGFyc2U9InRleHQiPgorICAgICAgICA8eGk6ZmFsbGJhY2s+PGEgaHJlZj0ibWFpbHRvOmJvYkBleGFtcGxlLm9yZyI+UmVwb3J0IGVycm9yPC9hPjwveGk6ZmFsbGJhY2s+CisgICAgICA8L3hpOmluY2x1ZGU+CisgICAgPC94aTpmYWxsYmFjaz4KKyAgPC94aTppbmNsdWRlPgorPC9kaXY+CisiIiIKKworWElOQ0xVREVbImRlZmF1bHQueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDxwPkV4YW1wbGUuPC9wPgorICA8eGk6aW5jbHVkZSBocmVmPSJ7fSIvPgorPC9kb2N1bWVudD4KKyIiIi5mb3JtYXQoY2dpLmVzY2FwZShTSU1QTEVfWE1MRklMRSwgVHJ1ZSkpCisKK2RlZiB4aW5jbHVkZV9sb2FkZXIoaHJlZiwgcGFyc2U9InhtbCIsIGVuY29kaW5nPU5vbmUpOgorICAgIHRyeToKKyAgICAgICAgZGF0YSA9IFhJTkNMVURFW2hyZWZdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByYWlzZSBJT0Vycm9yKCJyZXNvdXJjZSBub3QgZm91bmQiKQorICAgIGlmIHBhcnNlID09ICJ4bWwiOgorICAgICAgICBmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgWE1MCisgICAgICAgIHJldHVybiBYTUwoZGF0YSkKKyAgICByZXR1cm4gZGF0YQorCitkZWYgeGluY2x1ZGUoKToKKyAgICByIiIiCisgICAgQmFzaWMgaW5jbHVzaW9uIGV4YW1wbGUgKFhJbmNsdWRlIEMuMSkKKworICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRJbmNsdWRlCisKKyAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkMxLnhtbCIpCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIHhpbmNsdWRlX2xvYWRlcikKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMxCisgICAgPGRvY3VtZW50PgorICAgICAgPHA+MTIwIE16IGlzIGFkZXF1YXRlIGZvciBhbiBhdmVyYWdlIGhvbWUgdXNlci48L3A+CisgICAgICA8ZGlzY2xhaW1lcj4KKyAgICAgIDxwPlRoZSBvcGluaW9ucyByZXByZXNlbnRlZCBoZXJlaW4gcmVwcmVzZW50IHRob3NlIG9mIHRoZSBpbmRpdmlkdWFsCisgICAgICBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyBvZmZpY2lhbCBwb2xpY3kgZW5kb3JzZWQgYnkgdGhpcworICAgICAgb3JnYW5pemF0aW9uLjwvcD4KKyAgICA8L2Rpc2NsYWltZXI+CisgICAgPC9kb2N1bWVudD4KKworICAgIFRleHR1YWwgaW5jbHVzaW9uIGV4YW1wbGUgKFhJbmNsdWRlIEMuMikKKworICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzIueG1sIikKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgeGluY2x1ZGVfbG9hZGVyKQorICAgID4+PiBwcmludCBzZXJpYWxpemUoZG9jdW1lbnQpICMgQzIKKyAgICA8ZG9jdW1lbnQ+CisgICAgICA8cD5UaGlzIGRvY3VtZW50IGhhcyBiZWVuIGFjY2Vzc2VkCisgICAgICAzMjQzODcgdGltZXMuPC9wPgorICAgIDwvZG9jdW1lbnQ+CisKKyAgICBUZXh0dWFsIGluY2x1c2lvbiBhZnRlciBzaWJsaW5nIGVsZW1lbnQgKGJhc2VkIG9uIG1vZGlmaWVkIFhJbmNsdWRlIEMuMikKKworICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzJiLnhtbCIpCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIHhpbmNsdWRlX2xvYWRlcikKKyAgICA+Pj4gcHJpbnQoc2VyaWFsaXplKGRvY3VtZW50KSkgIyBDMmIKKyAgICA8ZG9jdW1lbnQ+CisgICAgICA8cD5UaGlzIGRvY3VtZW50IGhhcyBiZWVuIDxlbT5hY2Nlc3NlZDwvZW0+CisgICAgICAzMjQzODcgdGltZXMuPC9wPgorICAgIDwvZG9jdW1lbnQ+CisKKyAgICBUZXh0dWFsIGluY2x1c2lvbiBvZiBYTUwgZXhhbXBsZSAoWEluY2x1ZGUgQy4zKQorCisgICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJDMy54bWwiKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShkb2N1bWVudCkgIyBDMworICAgIDxkb2N1bWVudD4KKyAgICAgIDxwPlRoZSBmb2xsb3dpbmcgaXMgdGhlIHNvdXJjZSBvZiB0aGUgImRhdGEueG1sIiByZXNvdXJjZTo8L3A+CisgICAgICA8ZXhhbXBsZT4mbHQ7P3htbCB2ZXJzaW9uPScxLjAnPyZndDsKKyAgICAmbHQ7ZGF0YSZndDsKKyAgICAgICZsdDtpdGVtJmd0OyZsdDshW0NEQVRBW0Jyb29rcyAmYW1wOyBTaGllbGRzXV0mZ3Q7Jmx0Oy9pdGVtJmd0OworICAgICZsdDsvZGF0YSZndDsKKyAgICA8L2V4YW1wbGU+CisgICAgPC9kb2N1bWVudD4KKworICAgIEZhbGxiYWNrIGV4YW1wbGUgKFhJbmNsdWRlIEMuNSkKKyAgICBOb3RlISBGYWxsYmFjayBzdXBwb3J0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQKKworICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzUueG1sIikKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgeGluY2x1ZGVfbG9hZGVyKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBJT0Vycm9yOiByZXNvdXJjZSBub3QgZm91bmQKKyAgICA+Pj4gIyBwcmludCBzZXJpYWxpemUoZG9jdW1lbnQpICMgQzUKKyAgICAiIiIKKworZGVmIHhpbmNsdWRlX2RlZmF1bHQoKToKKyAgICAiIiIKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRJbmNsdWRlCisKKyAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoImRlZmF1bHQueG1sIikKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCkKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIGRlZmF1bHQKKyAgICA8ZG9jdW1lbnQ+CisgICAgICA8cD5FeGFtcGxlLjwvcD4KKyAgICAgIDxyb290PgorICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CisgICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L3Jvb3Q+CisgICAgPC9kb2N1bWVudD4KKyAgICAiIiIKKworIworIyBiYWRseSBmb3JtYXR0ZWQgeGk6aW5jbHVkZSB0YWdzCisKK1hJTkNMVURFX0JBRCA9IHt9CisKK1hJTkNMVURFX0JBRFsiQjEueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDxwPjEyMCBNeiBpcyBhZGVxdWF0ZSBmb3IgYW4gYXZlcmFnZSBob21lIHVzZXIuPC9wPgorICA8eGk6aW5jbHVkZSBocmVmPSJkaXNjbGFpbWVyLnhtbCIgcGFyc2U9IkJBRF9UWVBFIi8+Cis8L2RvY3VtZW50PgorIiIiCisKK1hJTkNMVURFX0JBRFsiQjIueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkaXYgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICAgIDx4aTpmYWxsYmFjaz48L3hpOmZhbGxiYWNrPgorPC9kaXY+CisiIiIKKworZGVmIHhpbmNsdWRlX2ZhaWx1cmVzKCk6CisgICAgciIiIgorICAgIFRlc3QgZmFpbHVyZSB0byBsb2NhdGUgaW5jbHVkZWQgWE1MIGZpbGUuCisKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRJbmNsdWRlCisKKyAgICA+Pj4gZGVmIG5vbmVfbG9hZGVyKGhyZWYsIHBhcnNlciwgZW5jb2Rpbmc9Tm9uZSk6CisgICAgLi4uICAgICByZXR1cm4gTm9uZQorCisgICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFWyJDMS54bWwiXSkKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBGYXRhbEluY2x1ZGVFcnJvcjogY2Fubm90IGxvYWQgJ2Rpc2NsYWltZXIueG1sJyBhcyAneG1sJworCisgICAgVGVzdCBmYWlsdXJlIHRvIGxvY2F0ZSBpbmNsdWRlZCB0ZXh0IGZpbGUuCisKKyAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVbIkMyLnhtbCJdKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCBsb2FkZXI9bm9uZV9sb2FkZXIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIEZhdGFsSW5jbHVkZUVycm9yOiBjYW5ub3QgbG9hZCAnY291bnQudHh0JyBhcyAndGV4dCcKKworICAgIFRlc3QgYmFkIHBhcnNlIHR5cGUuCisKKyAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVfQkFEWyJCMS54bWwiXSkKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBGYXRhbEluY2x1ZGVFcnJvcjogdW5rbm93biBwYXJzZSB0eXBlIGluIHhpOmluY2x1ZGUgdGFnICgnQkFEX1RZUEUnKQorCisgICAgVGVzdCB4aTpmYWxsYmFjayBvdXRzaWRlIHhpOmluY2x1ZGUuCisKKyAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVfQkFEWyJCMi54bWwiXSkKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBGYXRhbEluY2x1ZGVFcnJvcjogeGk6ZmFsbGJhY2sgdGFnIG11c3QgYmUgY2hpbGQgb2YgeGk6aW5jbHVkZSAoJ3todHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlfWZhbGxiYWNrJykKKyAgICAiIiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyByZXBvcnRlZCBidWdzCisKK2RlZiBidWdfeG1sdG9vbGtpdDIxKCk6CisgICAgIiIiCisKKyAgICBtYXJzaGFsbGVyIGdpdmVzIG9ic2N1cmUgZXJyb3JzIGZvciBub24tc3RyaW5nIHZhbHVlcworCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KDEyMykKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGFnCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0udGV4dCA9IDEyMworICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyB0ZXh0CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0udGFpbCA9IDEyMworICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyB0YWlsCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0uc2V0KDEyMywgIjEyMyIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIGF0dHJpYnV0ZSBrZXkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVHlwZUVycm9yOiBjYW5ub3Qgc2VyaWFsaXplIDEyMyAodHlwZSBpbnQpCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJlbGVtIikKKyAgICA+Pj4gZWxlbS5zZXQoIjEyMyIsIDEyMykKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgYXR0cmlidXRlIHZhbHVlCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDI1KCk6CisgICAgIiIiCisKKyAgICB0eXBvIGluIEVsZW1lbnRUcmVlLmZpbmR0ZXh0CisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbSkKKyAgICA+Pj4gdHJlZS5maW5kdGV4dCgidGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gdHJlZS5maW5kdGV4dCgic2VjdGlvbi90YWciKQorICAgICdzdWJ0ZXh0JworCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDI4KCk6CisgICAgIiIiCisKKyAgICAuLy90YWcgY2F1c2VzIGV4Y2VwdGlvbnMKKworICAgID4+PiB0cmVlID0gRVQuWE1MKCI8ZG9jPjx0YWJsZT48dGJvZHkvPjwvdGFibGU+PC9kb2M+IikKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QodHJlZS5maW5kYWxsKCIuLy90aGVhZCIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KHRyZWUuZmluZGFsbCgiLi8vdGJvZHkiKSkKKyAgICBbJ3Rib2R5J10KKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXRYMSgpOgorICAgICIiIgorCisgICAgZHVtcCgpIGRvZXNuJ3QgZmx1c2ggdGhlIG91dHB1dCBidWZmZXIKKworICAgID4+PiB0cmVlID0gRVQuWE1MKCI8ZG9jPjx0YWJsZT48dGJvZHkvPjwvdGFibGU+PC9kb2M+IikKKyAgICA+Pj4gRVQuZHVtcCh0cmVlKTsgc3lzLnN0ZG91dC53cml0ZSgidGFpbCIpCisgICAgPGRvYz48dGFibGU+PHRib2R5IC8+PC90YWJsZT48L2RvYz4KKyAgICB0YWlsCisKKyAgICAiIiIKKworZGVmIGJ1Z194bWx0b29sa2l0MzkoKToKKyAgICAiIiIKKworICAgIG5vbi1hc2NpaSBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMgZG9lc24ndCB3b3JrCisKKyAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjx0XHhlNGcgLz4iKQorICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQorICAgICc8dFxceGMzXFx4YTRnIC8+JworCisgICAgPj4+IHRyZWUgPSBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz48dGFnIFx4ZTR0dHI9J3YmIzIyODtsdWUnIC8+IikKKyAgICA+Pj4gdHJlZS5hdHRyaWIKKyAgICB7dSdcXHhlNHR0cic6IHUndlxceGU0bHVlJ30KKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICAnPHRhZyBcXHhjM1xceGE0dHRyPSJ2XFx4YzNcXHhhNGx1ZSIgLz4nCisKKyAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjx0XHhlNGc+dGV4dDwvdFx4ZTRnPiIpCisgICAgPj4+IEVULnRvc3RyaW5nKHRyZWUsICJ1dGYtOCIpCisgICAgJzx0XFx4YzNcXHhhNGc+dGV4dDwvdFxceGMzXFx4YTRnPicKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudCh1InRcdTAwZTRnIikKKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICAnPHRcXHhjM1xceGE0ZyAvPicKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gdHJlZS5zZXQodSJcdTAwZTR0dHIiLCB1InZcdTAwZTRsdWUiKQorICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQorICAgICc8dGFnIFxceGMzXFx4YTR0dHI9InZcXHhjM1xceGE0bHVlIiAvPicKKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXQ1NCgpOgorICAgICIiIgorCisgICAgcHJvYmxlbXMgaGFuZGxpbmcgaW50ZXJuYWxseSBkZWZpbmVkIGVudGl0aWVzCisKKyAgICA+Pj4gZSA9IEVULlhNTCgiPCFET0NUWVBFIGRvYyBbPCFFTlRJVFkgbGRvdHMgJyYjeDgyMzA7Jz5dPjxkb2M+Jmxkb3RzOzwvZG9jPiIpCisgICAgPj4+IHNlcmlhbGl6ZShlKQorICAgICc8ZG9jPiYjMzMzMjg7PC9kb2M+JworCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDU1KCk6CisgICAgIiIiCisKKyAgICBtYWtlIHN1cmUgd2UncmUgcmVwb3J0aW5nIHRoZSBmaXJzdCBlcnJvciwgbm90IHRoZSBsYXN0CisKKyAgICA+Pj4gZSA9IEVULlhNTCgiPCFET0NUWVBFIGRvYyBTWVNURU0gJ2RvYy5kdGQnPjxkb2M+Jmxkb3RzOyZuZG90czsmcmRvdHM7PC9kb2M+IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgUGFyc2VFcnJvcjogdW5kZWZpbmVkIGVudGl0eSAmbGRvdHM7OiBsaW5lIDEsIGNvbHVtbiAzNgorCisgICAgIiIiCisKK2NsYXNzIEV4Y2VwdGlvbkZpbGU6CisgICAgZGVmIHJlYWQoc2VsZiwgeCk6CisgICAgICAgIHJhaXNlIElPRXJyb3IKKworZGVmIHhtbHRvb2xraXQ2MCgpOgorICAgICIiIgorCisgICAgSGFuZGxlIGNyYXNoIGluIHN0cmVhbSBzb3VyY2UuCisgICAgPj4+IHRyZWUgPSBFVC5wYXJzZShFeGNlcHRpb25GaWxlKCkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIElPRXJyb3IKKworICAgICIiIgorCitYTUxUT09MS0lUNjJfRE9DID0gIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwYXRlbnQtYXBwbGljYXRpb24tcHVibGljYXRpb24gU1lTVEVNICJwYXAtdjE1LTIwMDEtMDEtMzEuZHRkIiBbXT4KKzxwYXRlbnQtYXBwbGljYXRpb24tcHVibGljYXRpb24+Cis8c3ViZG9jLWFic3RyYWN0PgorPHBhcmFncmFwaCBpZD0iQS0wMDAxIiBsdmw9IjAiPkEgbmV3IGN1bHRpdmFyIG9mIEJlZ29uaWEgcGxhbnQgbmFtZWQgJmxzcXVvO0JDVDk4MDFCRUcmcnNxdW87LjwvcGFyYWdyYXBoPgorPC9zdWJkb2MtYWJzdHJhY3Q+Cis8L3BhdGVudC1hcHBsaWNhdGlvbi1wdWJsaWNhdGlvbj4iIiIKKworCitkZWYgeG1sdG9vbGtpdDYyKCk6CisgICAgIiIiCisKKyAgICBEb24ndCBjcmFzaCB3aGVuIHVzaW5nIGN1c3RvbSBlbnRpdGllcy4KKworICAgID4+PiB4bWx0b29sa2l0NjIoKQorICAgIHUnQSBuZXcgY3VsdGl2YXIgb2YgQmVnb25pYSBwbGFudCBuYW1lZCBcdTIwMThCQ1Q5ODAxQkVHXHUyMDE5LicKKworICAgICIiIgorICAgIEVOVElUSUVTID0ge3UncnNxdW8nOiB1J1x1MjAxOScsIHUnbHNxdW8nOiB1J1x1MjAxOCd9CisgICAgcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKQorICAgIHBhcnNlci5lbnRpdHkudXBkYXRlKEVOVElUSUVTKQorICAgIHBhcnNlci5mZWVkKFhNTFRPT0xLSVQ2Ml9ET0MpCisgICAgdCA9IHBhcnNlci5jbG9zZSgpCisgICAgcmV0dXJuIHQuZmluZCgnLi8vcGFyYWdyYXBoJykudGV4dAorCitkZWYgeG1sdG9vbGtpdDYzKCk6CisgICAgIiIiCisKKyAgICBDaGVjayByZWZlcmVuY2UgbGVhay4KKyAgICA+Pj4geG1sdG9vbGtpdDYzKCkKKyAgICA+Pj4gY291bnQgPSBzeXMuZ2V0cmVmY291bnQoTm9uZSkKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgLi4uICAgICB4bWx0b29sa2l0NjMoKQorICAgID4+PiBzeXMuZ2V0cmVmY291bnQoTm9uZSkgLSBjb3VudAorICAgIDAKKworICAgICIiIgorICAgIHRyZWUgPSBFVC5UcmVlQnVpbGRlcigpCisgICAgdHJlZS5zdGFydCgidGFnIiwge30pCisgICAgdHJlZS5kYXRhKCJ0ZXh0IikKKyAgICB0cmVlLmVuZCgidGFnIikKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2RlZiBidWdfMjAwNzA4X25ld2xpbmUoKToKKyAgICByIiIiCisKKyAgICBQcmVzZXJ2ZSBuZXdsaW5lcyBpbiBhdHRyaWJ1dGVzLgorCisgICAgPj4+IGUgPSBFVC5FbGVtZW50KCdTb21lVGFnJywgdGV4dD0iZGVmIF9mKCk6XG4gIHJldHVybiAzXG4iKQorICAgID4+PiBFVC50b3N0cmluZyhlKQorICAgICc8U29tZVRhZyB0ZXh0PSJkZWYgX2YoKTomIzEwOyAgcmV0dXJuIDMmIzEwOyIgLz4nCisgICAgPj4+IEVULlhNTChFVC50b3N0cmluZyhlKSkuZ2V0KCJ0ZXh0IikKKyAgICAnZGVmIF9mKCk6XG4gIHJldHVybiAzXG4nCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlhNTChFVC50b3N0cmluZyhlKSkpCisgICAgJzxTb21lVGFnIHRleHQ9ImRlZiBfZigpOiYjMTA7ICByZXR1cm4gMyYjMTA7IiAvPicKKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOF9jbG9zZSgpOgorICAgICIiIgorCisgICAgVGVzdCBkZWZhdWx0IGJ1aWxkZXIuCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcigpICMgZGVmYXVsdAorICAgID4+PiBwYXJzZXIuZmVlZCgiPGVsZW1lbnQ+c29tZSB0ZXh0PC9lbGVtZW50PiIpCisgICAgPj4+IHN1bW1hcml6ZShwYXJzZXIuY2xvc2UoKSkKKyAgICAnZWxlbWVudCcKKworICAgIFRlc3QgY3VzdG9tIGJ1aWxkZXIuCisgICAgPj4+IGNsYXNzIEVjaG9UYXJnZXQ6CisgICAgLi4uICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgLi4uICAgICAgICAgcmV0dXJuIEVULkVsZW1lbnQoImVsZW1lbnQiKSAjIHNpbXVsYXRlIHJvb3QKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKEVjaG9UYXJnZXQoKSkKKyAgICA+Pj4gcGFyc2VyLmZlZWQoIjxlbGVtZW50PnNvbWUgdGV4dDwvZWxlbWVudD4iKQorICAgID4+PiBzdW1tYXJpemUocGFyc2VyLmNsb3NlKCkpCisgICAgJ2VsZW1lbnQnCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfZGVmYXVsdF9uYW1lc3BhY2UoKToKKyAgICAiIiIKKworICAgID4+PiBlID0gRVQuRWxlbWVudCgie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gc2VyaWFsaXplKGUsIGRlZmF1bHRfbmFtZXNwYWNlPSJkZWZhdWx0IikgIyAxCisgICAgJzxlbGVtIHhtbG5zPSJkZWZhdWx0Ij48ZWxlbSAvPjwvZWxlbT4nCisKKyAgICA+Pj4gZSA9IEVULkVsZW1lbnQoIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7bm90LWRlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHNlcmlhbGl6ZShlLCBkZWZhdWx0X25hbWVzcGFjZT0iZGVmYXVsdCIpICMgMgorICAgICc8ZWxlbSB4bWxucz0iZGVmYXVsdCIgeG1sbnM6bnMxPSJub3QtZGVmYXVsdCI+PGVsZW0gLz48bnMxOmVsZW0gLz48L2VsZW0+JworCisgICAgPj4+IGUgPSBFVC5FbGVtZW50KCJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAiZWxlbSIpICMgdW5wcmVmaXhlZCBuYW1lCisgICAgPj4+IHNlcmlhbGl6ZShlLCBkZWZhdWx0X25hbWVzcGFjZT0iZGVmYXVsdCIpICMgMworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiBjYW5ub3QgdXNlIG5vbi1xdWFsaWZpZWQgbmFtZXMgd2l0aCBkZWZhdWx0X25hbWVzcGFjZSBvcHRpb24KKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOV9yZWdpc3Rlcl9uYW1lc3BhY2UoKToKKyAgICAiIiIKKworICAgID4+PiBFVC50b3N0cmluZyhFVC5FbGVtZW50KCJ7aHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0L310aXRsZSIpKQorICAgICc8bnMwOnRpdGxlIHhtbG5zOm5zMD0iaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIgLz4nCisgICAgPj4+IEVULnJlZ2lzdGVyX25hbWVzcGFjZSgiZm9vIiwgImh0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC8iKQorICAgID4+PiBFVC50b3N0cmluZyhFVC5FbGVtZW50KCJ7aHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0L310aXRsZSIpKQorICAgICc8Zm9vOnRpdGxlIHhtbG5zOmZvbz0iaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIgLz4nCisKKyAgICBBbmQgdGhlIER1YmxpbiBDb3JlIG5hbWVzcGFjZSBpcyBpbiB0aGUgZGVmYXVsdCBsaXN0OgorCisgICAgPj4+IEVULnRvc3RyaW5nKEVULkVsZW1lbnQoIntodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL310aXRsZSIpKQorICAgICc8ZGM6dGl0bGUgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiAvPicKKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOV9lbGVtZW50X2NvbW1lbnQoKToKKyAgICAiIiIKKworICAgIE5vdCBzdXJlIGlmIHRoaXMgY2FuIGJlIGZpeGVkLCByZWFsbHkgKHNpbmNlIHRoZSBzZXJpYWxpemVyIG5lZWRzCisgICAgRVQuQ29tbWVudCwgbm90IGNFVC5jb21tZW50KS4KKworICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCisgICAgPj4+IGEuYXBwZW5kKEVULkNvbW1lbnQoJ2ZvbycpKQorICAgID4+PiBhWzBdLnRhZyA9PSBFVC5Db21tZW50CisgICAgVHJ1ZQorCisgICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKKyAgICA+Pj4gYS5hcHBlbmQoRVQuUEkoJ2ZvbycpKQorICAgID4+PiBhWzBdLnRhZyA9PSBFVC5QSQorICAgIFRydWUKKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOV9lbGVtZW50X2luc2VydCgpOgorICAgICIiIgorCisgICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKKyAgICA+Pj4gYiA9IEVULlN1YkVsZW1lbnQoYSwgJ2InKQorICAgID4+PiBjID0gRVQuU3ViRWxlbWVudChhLCAnYycpCisgICAgPj4+IGQgPSBFVC5FbGVtZW50KCdkJykKKyAgICA+Pj4gYS5pbnNlcnQoMCwgZCkKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoYSkKKyAgICBbJ2QnLCAnYicsICdjJ10KKyAgICA+Pj4gYS5pbnNlcnQoLTEsIGQpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGEpCisgICAgWydkJywgJ2InLCAnZCcsICdjJ10KKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOV9pdGVyX2NvbW1lbnQoKToKKyAgICAiIiIKKworICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCisgICAgPj4+IGIgPSBFVC5TdWJFbGVtZW50KGEsICdiJykKKyAgICA+Pj4gY29tbWVudF9iID0gRVQuQ29tbWVudCgiVEVTVC1iIikKKyAgICA+Pj4gYi5hcHBlbmQoY29tbWVudF9iKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChhLml0ZXIoRVQuQ29tbWVudCkpCisgICAgWyc8Q29tbWVudD4nXQorCisgICAgIiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcmVwb3J0ZWQgb24gYnVncy5weXRob24ub3JnCisKK2RlZiBidWdfMTUzNDYzMCgpOgorICAgICIiIgorCisgICAgPj4+IGJvYiA9IEVULlRyZWVCdWlsZGVyKCkKKyAgICA+Pj4gZSA9IGJvYi5kYXRhKCJkYXRhIikKKyAgICA+Pj4gZSA9IGJvYi5zdGFydCgidGFnIiwge30pCisgICAgPj4+IGUgPSBib2IuZW5kKCJ0YWciKQorICAgID4+PiBlID0gYm9iLmNsb3NlKCkKKyAgICA+Pj4gc2VyaWFsaXplKGUpCisgICAgJzx0YWcgLz4nCisKKyAgICAiIiIKKworZGVmIGNoZWNrX2lzc3VlNjIzMygpOgorICAgICIiIgorCisgICAgPj4+IGUgPSBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04Jz8+PGJvZHk+dFxceGMzXFx4YTNnPC9ib2R5PiIpCisgICAgPj4+IEVULnRvc3RyaW5nKGUsICdhc2NpaScpCisgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2FzY2lpJz8+XFxuPGJvZHk+dCYjMjI3O2c8L2JvZHk+IgorICAgID4+PiBlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+PGJvZHk+dFxceGUzZzwvYm9keT4iKQorICAgID4+PiBFVC50b3N0cmluZyhlLCAnYXNjaWknKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/Plxcbjxib2R5PnQmIzIyNztnPC9ib2R5PiIKKworICAgICIiIgorCitkZWYgY2hlY2tfaXNzdWUzMTUxKCk6CisgICAgIiIiCisKKyAgICA+Pj4gZSA9IEVULlhNTCgnPHByZWZpeDpsb2NhbG5hbWUgeG1sbnM6cHJlZml4PSIke3N0dWZmfSIvPicpCisgICAgPj4+IGUudGFnCisgICAgJ3ske3N0dWZmfX1sb2NhbG5hbWUnCisgICAgPj4+IHQgPSBFVC5FbGVtZW50VHJlZShlKQorICAgID4+PiBFVC50b3N0cmluZyhlKQorICAgICc8bnMwOmxvY2FsbmFtZSB4bWxuczpuczA9IiR7c3R1ZmZ9IiAvPicKKworICAgICIiIgorCitkZWYgY2hlY2tfaXNzdWU2NTY1KCk6CisgICAgIiIiCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGJvZHk+PHRhZy8+PC9ib2R5PiIpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0pCisgICAgWyd0YWcnXQorICAgID4+PiBuZXdlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGVsZW1bOl0gPSBuZXdlbGVtWzpdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0pCisgICAgWyd0YWcnLCAndGFnJywgJ3NlY3Rpb24nXQorCisgICAgIiIiCisKK2RlZiBjaGVja19odG1sX2VtcHR5X2VsZW1zX3NlcmlhbGl6YXRpb24oc2VsZik6CisgICAgIyBpc3N1ZSAxNTk3MAorICAgICMgZnJvbSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAxL2luZGV4L2VsZW1lbnRzLmh0bWwKKyAgICAiIiIKKworICAgID4+PiBlbXB0eV9lbGVtcyA9IFsnQVJFQScsICdCQVNFJywgJ0JBU0VGT05UJywgJ0JSJywgJ0NPTCcsICdGUkFNRScsICdIUicsCisgICAgLi4uICAgICAgICAgICAgICAgICdJTUcnLCAnSU5QVVQnLCAnSVNJTkRFWCcsICdMSU5LJywgJ01FVEEnLCAnUEFSQU0nXQorICAgID4+PiBlbGVtcyA9ICcnLmpvaW4oJzwlcyAvPicgJSBlbGVtIGZvciBlbGVtIGluIGVtcHR5X2VsZW1zKQorICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCc8aHRtbD4lczwvaHRtbD4nICUgZWxlbXMpLCBtZXRob2Q9J2h0bWwnKQorICAgICc8aHRtbD48QVJFQT48QkFTRT48QkFTRUZPTlQ+PEJSPjxDT0w+PEZSQU1FPjxIUj48SU1HPjxJTlBVVD48SVNJTkRFWD48TElOSz48TUVUQT48UEFSQU0+PC9odG1sPicKKyAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgnPGh0bWw+JXM8L2h0bWw+JyAlIGVsZW1zLmxvd2VyKCkpLCBtZXRob2Q9J2h0bWwnKQorICAgICc8aHRtbD48YXJlYT48YmFzZT48YmFzZWZvbnQ+PGJyPjxjb2w+PGZyYW1lPjxocj48aW1nPjxpbnB1dD48aXNpbmRleD48bGluaz48bWV0YT48cGFyYW0+PC9odG1sPicKKyAgICA+Pj4gZWxlbXMgPSAnJy5qb2luKCc8JXM+PC8lcz4nICUgKGVsZW0sIGVsZW0pIGZvciBlbGVtIGluIGVtcHR5X2VsZW1zKQorICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCc8aHRtbD4lczwvaHRtbD4nICUgZWxlbXMpLCBtZXRob2Q9J2h0bWwnKQorICAgICc8aHRtbD48QVJFQT48QkFTRT48QkFTRUZPTlQ+PEJSPjxDT0w+PEZSQU1FPjxIUj48SU1HPjxJTlBVVD48SVNJTkRFWD48TElOSz48TUVUQT48UEFSQU0+PC9odG1sPicKKyAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgnPGh0bWw+JXM8L2h0bWw+JyAlIGVsZW1zLmxvd2VyKCkpLCBtZXRob2Q9J2h0bWwnKQorICAgICc8aHRtbD48YXJlYT48YmFzZT48YmFzZWZvbnQ+PGJyPjxjb2w+PGZyYW1lPjxocj48aW1nPjxpbnB1dD48aXNpbmRleD48bGluaz48bWV0YT48cGFyYW0+PC9odG1sPicKKworICAgICIiIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworY2xhc3MgQ2xlYW5Db250ZXh0KG9iamVjdCk6CisgICAgIiIiUHJvdmlkZSBkZWZhdWx0IG5hbWVzcGFjZSBtYXBwaW5nIGFuZCBwYXRoIGNhY2hlLiIiIgorICAgIGNoZWNrd2FybmluZ3MgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcXVpZXQ9RmFsc2UpOgorICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMjoKKyAgICAgICAgICAgICMgdW5kZXIgLU9PLCBkb2N0ZXN0cyBjYW5ub3QgYmUgcnVuIGFuZCB0aGVyZWZvcmUgbm90IGFsbCB3YXJuaW5ncworICAgICAgICAgICAgIyB3aWxsIGJlIGVtaXR0ZWQKKyAgICAgICAgICAgIHF1aWV0ID0gVHJ1ZQorICAgICAgICBkZXByZWNhdGlvbnMgPSAoCisgICAgICAgICAgICAjIFNlYXJjaCBiZWhhdmlvdXIgaXMgYnJva2VuIGlmIHNlYXJjaCBwYXRoIHN0YXJ0cyB3aXRoICIvIi4KKyAgICAgICAgICAgICgiVGhpcyBzZWFyY2ggaXMgYnJva2VuIGluIDEuMyBhbmQgZWFybGllciwgYW5kIHdpbGwgYmUgZml4ZWQgIgorICAgICAgICAgICAgICJpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAgSWYgeW91IHJlbHkgb24gdGhlIGN1cnJlbnQgYmVoYXZpb3VyLCAiCisgICAgICAgICAgICAgImNoYW5nZSBpdCB0byAnLisnIiwgRnV0dXJlV2FybmluZyksCisgICAgICAgICAgICAjIEVsZW1lbnQuZ2V0Y2hpbGRyZW4oKSBhbmQgRWxlbWVudC5nZXRpdGVyYXRvcigpIGFyZSBkZXByZWNhdGVkLgorICAgICAgICAgICAgKCJUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgorICAgICAgICAgICAgICJVc2UgLisgaW5zdGVhZC4iLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCJUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgorICAgICAgICAgICAgICJVc2UgLisgaW5zdGVhZC4iLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICMgWE1MUGFyc2VyLmRvY3R5cGUoKSBpcyBkZXByZWNhdGVkLgorICAgICAgICAgICAgKCJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4gIERlZmluZSBkb2N0eXBlLi4gIgorICAgICAgICAgICAgICJtZXRob2Qgb24gdGhlIFRyZWVCdWlsZGVyIHRhcmdldC4iLCBEZXByZWNhdGlvbldhcm5pbmcpKQorICAgICAgICBzZWxmLmNoZWNrd2FybmluZ3MgPSB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKmRlcHJlY2F0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0PXF1aWV0KQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlCisgICAgICAgIHNlbGYuX25zbWFwID0gRWxlbWVudFRyZWUuX25hbWVzcGFjZV9tYXAKKyAgICAgICAgc2VsZi5fcGF0aF9jYWNoZSA9IEVsZW1lbnRUcmVlLkVsZW1lbnRQYXRoLl9jYWNoZQorICAgICAgICAjIENvcHkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG1hcHBpbmcKKyAgICAgICAgRWxlbWVudFRyZWUuX25hbWVzcGFjZV9tYXAgPSBzZWxmLl9uc21hcC5jb3B5KCkKKyAgICAgICAgIyBDb3B5IHRoZSBwYXRoIGNhY2hlIChzaG91bGQgYmUgZW1wdHkpCisgICAgICAgIEVsZW1lbnRUcmVlLkVsZW1lbnRQYXRoLl9jYWNoZSA9IHNlbGYuX3BhdGhfY2FjaGUuY29weSgpCisgICAgICAgIHNlbGYuY2hlY2t3YXJuaW5ncy5fX2VudGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlCisgICAgICAgICMgUmVzdG9yZSBtYXBwaW5nIGFuZCBwYXRoIGNhY2hlCisgICAgICAgIEVsZW1lbnRUcmVlLl9uYW1lc3BhY2VfbWFwID0gc2VsZi5fbnNtYXAKKyAgICAgICAgRWxlbWVudFRyZWUuRWxlbWVudFBhdGguX2NhY2hlID0gc2VsZi5fcGF0aF9jYWNoZQorICAgICAgICBzZWxmLmNoZWNrd2FybmluZ3MuX19leGl0X18oKmFyZ3MpCisKKworZGVmIHRlc3RfbWFpbihtb2R1bGVfbmFtZT0neG1sLmV0cmVlLkVsZW1lbnRUcmVlJyk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3htbF9ldHJlZQorCisgICAgdXNlX3B5X21vZHVsZSA9IChtb2R1bGVfbmFtZSA9PSAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKKworICAgICMgVGhlIHNhbWUgZG9jdGVzdHMgYXJlIHVzZWQgZm9yIGJvdGggdGhlIFB5dGhvbiBhbmQgdGhlIEMgaW1wbGVtZW50YXRpb25zCisgICAgYXNzZXJ0IHRlc3RfeG1sX2V0cmVlLkVULl9fbmFtZV9fID09IG1vZHVsZV9uYW1lCisKKyAgICAjIFhYWCB0aGUgQyBtb2R1bGUgc2hvdWxkIGdpdmUgdGhlIHNhbWUgd2FybmluZ3MgYXMgdGhlIFB5dGhvbiBtb2R1bGUKKyAgICB3aXRoIENsZWFuQ29udGV4dChxdWlldD1ub3QgdXNlX3B5X21vZHVsZSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3htbF9ldHJlZSwgdmVyYm9zaXR5PVRydWUpCisKKyAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoZSB0ZXN0cworICAgIGFzc2VydCB0ZXN0X3htbF9ldHJlZS5FVC5fX25hbWVfXyA9PSBtb2R1bGVfbmFtZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NGE0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQpAQCAtMCwwICsxLDU1IEBACisjIHhtbC5ldHJlZSB0ZXN0IGZvciBjRWxlbWVudFRyZWUKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHByZWNpc2lvbmJpZ21lbXRlc3QsIF8yRworaW1wb3J0IHVuaXR0ZXN0CisKK2NFVCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd4bWwuZXRyZWUuY0VsZW1lbnRUcmVlJykKKworCisjIGNFbGVtZW50VHJlZSBzcGVjaWZpYyB0ZXN0cworCitkZWYgc2FuaXR5KCk6CisgICAgIiIiCisgICAgSW1wb3J0IHNhbml0eS4KKworICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgY0VsZW1lbnRUcmVlCisgICAgIiIiCisKKworY2xhc3MgTWlzY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIElzc3VlICM4NjUxLgorICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzJHICsgMTAwLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9sZW5ndGhfb3ZlcmZsb3coc2VsZiwgc2l6ZSk6CisgICAgICAgIGlmIHNpemUgPCBfMkcgKyAxMDA6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJub3QgZW5vdWdoIGZyZWUgbWVtb3J5LCBuZWVkIGF0IGxlYXN0IDIgR0IiKQorICAgICAgICBkYXRhID0gYid4JyAqIHNpemUKKyAgICAgICAgcGFyc2VyID0gY0VULlhNTFBhcnNlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBhcnNlci5mZWVkLCBkYXRhKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGF0YSA9IE5vbmUKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3htbF9ldHJlZSwgdGVzdF94bWxfZXRyZWVfYworCisgICAgIyBSdW4gdGhlIHRlc3RzIHNwZWNpZmljIHRvIHRoZSBDIGltcGxlbWVudGF0aW9uCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfeG1sX2V0cmVlX2MsIHZlcmJvc2l0eT1UcnVlKQorCisgICAgIyBBc3NpZ24gdGhlIEMgaW1wbGVtZW50YXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIGRvY3Rlc3RzCisgICAgIyBQYXRjaCB0aGUgX19uYW1lX18sIHRvIHByZXZlbnQgY29uZnVzaW9uIHdpdGggdGhlIHB1cmUgUHl0aG9uIHRlc3QKKyAgICBweUVUID0gdGVzdF94bWxfZXRyZWUuRVQKKyAgICBweV9fbmFtZV9fID0gdGVzdF94bWxfZXRyZWUuX19uYW1lX18KKyAgICB0ZXN0X3htbF9ldHJlZS5FVCA9IGNFVAorICAgIGlmIF9fbmFtZV9fICE9ICdfX21haW5fXyc6CisgICAgICAgIHRlc3RfeG1sX2V0cmVlLl9fbmFtZV9fID0gX19uYW1lX18KKyAgICB0cnk6CisgICAgICAgICMgUnVuIHRoZSBzYW1lIHRlc3Qgc3VpdGUgYXMgeG1sLmV0cmVlLkVsZW1lbnRUcmVlCisgICAgICAgIHRlc3RfeG1sX2V0cmVlLnRlc3RfbWFpbihtb2R1bGVfbmFtZT0neG1sLmV0cmVlLmNFbGVtZW50VHJlZScpCisgICAgZmluYWxseToKKyAgICAgICAgdGVzdF94bWxfZXRyZWUuRVQgPSBweUVUCisgICAgICAgIHRlc3RfeG1sX2V0cmVlLl9fbmFtZV9fID0gcHlfX25hbWVfXworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF94bWxsaWIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF94bWxsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY2OTc4YQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3htbGxpYi5weQpAQCAtMCwwICsxLDQ4IEBACisnJydUZXN0IG1vZHVsZSB0byB0aGVzdCB0aGUgeG1sbGliIG1vZHVsZS4KKyAgIFNqb2VyZCBNdWxsZW5kZXIKKycnJworCit0ZXN0ZG9jID0gIiIiXAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9J3llcycgPz4KKzwhLS0gY29tbWVudHMgYXJlbid0IGFsbG93ZWQgYmVmb3JlIHRoZSA8P3htbD8+IHRhZywKKyAgICAgYnV0IHRoZXkgYXJlIGFsbG93ZWQgYmVmb3JlIHRoZSA8IURPQ1RZUEU+IHRhZyAtLT4KKzw/cHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgYXJlIGFsbG93ZWQgaW4gdGhlIHNhbWUgcGxhY2VzIGFzIGNvbW1lbnRzID8+Cis8IURPQ1RZUEUgZ3JlZXRpbmcgWworICA8IUVMRU1FTlQgZ3JlZXRpbmcgKCNQQ0RBVEEpPgorXT4KKzxncmVldGluZz5IZWxsbywgd29ybGQhPC9ncmVldGluZz4KKyIiIgorCituc2RvYyA9ICI8Zm9vIHhtbG5zPSdVUkknIGF0dHI9J3ZhbCcvPiIKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorIyBTaWxlbmNlIFB5M2sgd2FybmluZworeG1sbGliID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3htbGxpYicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworY2xhc3MgWE1MUGFyc2VyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSB4bWxsaWIuWE1MUGFyc2VyKCkKKyAgICAgICAgZm9yIGMgaW4gdGVzdGRvYzoKKyAgICAgICAgICAgIHBhcnNlci5mZWVkKGMpCisgICAgICAgIHBhcnNlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X25hbWVzcGFjZShzZWxmKToKKyAgICAgICAgY2xhc3MgSCh4bWxsaWIuWE1MUGFyc2VyKToKKyAgICAgICAgICAgIGRlZiB1bmtub3duX3N0YXJ0dGFnKHNlbGYsIG5hbWUsIGF0dHIpOgorICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5hdHRyID0gbmFtZSwgYXR0cgorICAgICAgICBoPUgoKQorICAgICAgICBoLmZlZWQobnNkb2MpCisgICAgICAgIGguY2xvc2UoKQorICAgICAgICAjIFRoZSBkZWZhdWx0IG5hbWVzcGFjZSBhcHBsaWVzIHRvIGVsZW1lbnRzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiVVJJIGZvbyIpCisgICAgICAgICMgYnV0IG5vdCB0byBhdHRyaWJ1dGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5hdHRyLCB7J2F0dHInOid2YWwnfSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChYTUxQYXJzZXJUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjVmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTAsMCArMSwxMDI3IEBACitpbXBvcnQgYmFzZTY0CitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB4bWxycGNsaWIKK2ltcG9ydCBTaW1wbGVYTUxSUENTZXJ2ZXIKK2ltcG9ydCBtaW1ldG9vbHMKK2ltcG9ydCBodHRwbGliCitpbXBvcnQgc29ja2V0CitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBvcworaW1wb3J0IHJlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKwordHJ5OgorICAgIHVuaWNvZGUKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgaGF2ZV91bmljb2RlID0gRmFsc2UKK2Vsc2U6CisgICAgaGF2ZV91bmljb2RlID0gVHJ1ZQorCithbGlzdCA9IFt7J2FzdHJpbmcnOiAnZm9vQGJhci5iYXouc3BhbScsCisgICAgICAgICAgJ2FmbG9hdCc6IDcyODMuNDMsCisgICAgICAgICAgJ2FuaW50JzogMioqMjAsCisgICAgICAgICAgJ2FzaG9ydGxvbmcnOiAyTCwKKyAgICAgICAgICAnYW5vdGhlcmxpc3QnOiBbJy56eXguNDEnXSwKKyAgICAgICAgICAnYWJhc2U2NCc6IHhtbHJwY2xpYi5CaW5hcnkoIm15IGRvZyBoYXMgZmxlYXMiKSwKKyAgICAgICAgICAnYm9vbGVhbic6IHhtbHJwY2xpYi5GYWxzZSwKKyAgICAgICAgICAndW5pY29kZSc6IHUnXHU0MDAwXHU2MDAwXHU4MDAwJywKKyAgICAgICAgICB1J3VrZXlcdTQwMDAnOiAncmVndWxhciB2YWx1ZScsCisgICAgICAgICAgJ2RhdGV0aW1lMSc6IHhtbHJwY2xpYi5EYXRlVGltZSgnMjAwNTAyMTBUMTE6NDE6MjMnKSwKKyAgICAgICAgICAnZGF0ZXRpbWUyJzogeG1scnBjbGliLkRhdGVUaW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgKDIwMDUsIDAyLCAxMCwgMTEsIDQxLCAyMywgMCwgMSwgLTEpKSwKKyAgICAgICAgICAnZGF0ZXRpbWUzJzogeG1scnBjbGliLkRhdGVUaW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwNSwgMDIsIDEwLCAxMSwgNDEsIDIzKSksCisgICAgICAgICAgfV0KKworY2xhc3MgWE1MUlBDVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZHVtcF9sb2FkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHhtbHJwY2xpYi5sb2Fkcyh4bWxycGNsaWIuZHVtcHMoKGFsaXN0LCkpKVswXVswXSkKKworICAgIGRlZiB0ZXN0X2R1bXBfYmFyZV9kYXRldGltZShzZWxmKToKKyAgICAgICAgIyBUaGlzIGNoZWNrcyB0aGF0IGFuIHVud3JhcHBlZCBkYXRldGltZS5kYXRlIG9iamVjdCBjYW4gYmUgaGFuZGxlZAorICAgICAgICAjIGJ5IHRoZSBtYXJzaGFsbGluZyBjb2RlLiAgVGhpcyBjYW4ndCBiZSBkb25lIHZpYSB0ZXN0X2R1bXBfbG9hZCgpCisgICAgICAgICMgc2luY2Ugd2l0aCB1c2VfZGF0ZXRpbWUgc2V0IHRvIDEgdGhlIHVubWFyc2hhbGxlciB3b3VsZCBjcmVhdGUKKyAgICAgICAgIyBkYXRldGltZSBvYmplY3RzIGZvciB0aGUgJ2RhdGV0aW1lWzEyM10nIGtleXMgYXMgd2VsbAorICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDUsIDAyLCAxMCwgMTEsIDQxLCAyMykKKyAgICAgICAgcyA9IHhtbHJwY2xpYi5kdW1wcygoZHQsKSkKKyAgICAgICAgKG5ld2R0LCksIG0gPSB4bWxycGNsaWIubG9hZHMocywgdXNlX2RhdGV0aW1lPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3ZHQsIGR0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIE5vbmUpCisKKyAgICAgICAgKG5ld2R0LCksIG0gPSB4bWxycGNsaWIubG9hZHMocywgdXNlX2RhdGV0aW1lPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3ZHQsIHhtbHJwY2xpYi5EYXRlVGltZSgnMjAwNTAyMTBUMTE6NDE6MjMnKSkKKworICAgIGRlZiB0ZXN0X2RhdGV0aW1lX2JlZm9yZV8xOTAwKHNlbGYpOgorICAgICAgICAjIHNhbWUgYXMgYmVmb3JlIGJ1dCB3aXRoIGEgZGF0ZSBiZWZvcmUgMTkwMAorICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lKDEsIDAyLCAxMCwgMTEsIDQxLCAyMykKKyAgICAgICAgcyA9IHhtbHJwY2xpYi5kdW1wcygoZHQsKSkKKyAgICAgICAgKG5ld2R0LCksIG0gPSB4bWxycGNsaWIubG9hZHMocywgdXNlX2RhdGV0aW1lPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3ZHQsIGR0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIE5vbmUpCisKKyAgICAgICAgKG5ld2R0LCksIG0gPSB4bWxycGNsaWIubG9hZHMocywgdXNlX2RhdGV0aW1lPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3ZHQsIHhtbHJwY2xpYi5EYXRlVGltZSgnMDAwMTAyMTBUMTE6NDE6MjMnKSkKKworICAgIGRlZiB0ZXN0X2NtcF9kYXRldGltZV9EYXRlVGltZShzZWxmKToKKyAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKKyAgICAgICAgZHQgPSB4bWxycGNsaWIuRGF0ZVRpbWUobm93LnRpbWV0dXBsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQgPT0gbm93KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm93ID09IGR0KQorICAgICAgICB0aGVuID0gbm93ICsgZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9NCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRoZW4gPj0gZHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdCA8IHRoZW4pCisKKyAgICBkZWYgdGVzdF9idWdfMTE2NDkxMiAoc2VsZik6CisgICAgICAgIGQgPSB4bWxycGNsaWIuRGF0ZVRpbWUoKQorICAgICAgICAoKG5ld19kLCksIGR1bW15KSA9IHhtbHJwY2xpYi5sb2Fkcyh4bWxycGNsaWIuZHVtcHMoKGQsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcmVzcG9uc2U9VHJ1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShuZXdfZC52YWx1ZSwgc3RyKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgb3V0cHV0IG9mIGR1bXBzKCkgaXMgc3RpbGwgYW4gOC1iaXQgc3RyaW5nCisgICAgICAgIHMgPSB4bWxycGNsaWIuZHVtcHMoKG5ld19kLCksIG1ldGhvZHJlc3BvbnNlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCBzdHIpCisKKyAgICBkZWYgdGVzdF9uZXdzdHlsZV9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVChvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0ID0gVCgpCisgICAgICAgIHQueCA9IDEwMAorICAgICAgICB0LnkgPSAiSGVsbG8iCisgICAgICAgICgodDIsKSwgZHVtbXkpID0geG1scnBjbGliLmxvYWRzKHhtbHJwY2xpYi5kdW1wcygodCwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdC5fX2RpY3RfXykKKworICAgIGRlZiB0ZXN0X2R1bXBfYmlnX2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHhtbHJwY2xpYi5kdW1wcywgKDJMKio5OSwpKQorCisgICAgZGVmIHRlc3RfZHVtcF9iYWRfZGljdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4bWxycGNsaWIuZHVtcHMsICh7KDEsMiwzKTogMX0sKSkKKworICAgIGRlZiB0ZXN0X2R1bXBfcmVjdXJzaXZlX3NlcShzZWxmKToKKyAgICAgICAgbCA9IFsxLDIsM10KKyAgICAgICAgdCA9IFszLDQsNSxsXQorICAgICAgICBsLmFwcGVuZCh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHhtbHJwY2xpYi5kdW1wcywgKGwsKSkKKworICAgIGRlZiB0ZXN0X2R1bXBfcmVjdXJzaXZlX2RpY3Qoc2VsZik6CisgICAgICAgIGQgPSB7JzEnOjEsICcyJzoxfQorICAgICAgICB0ID0geyczJzozLCAnZCc6ZH0KKyAgICAgICAgZFsndCddID0gdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHhtbHJwY2xpYi5kdW1wcywgKGQsKSkKKworICAgIGRlZiB0ZXN0X2R1bXBfYmlnX2ludChzZWxmKToKKyAgICAgICAgaWYgc3lzLm1heGludCA+IDJMKiozMS0xOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgeG1scnBjbGliLmR1bXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCgyTCoqMzQpLCkpCisKKyAgICAgICAgeG1scnBjbGliLmR1bXBzKCh4bWxycGNsaWIuTUFYSU5ULCB4bWxycGNsaWIuTUlOSU5UKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgeG1scnBjbGliLmR1bXBzLCAoeG1scnBjbGliLk1BWElOVCsxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHhtbHJwY2xpYi5kdW1wcywgKHhtbHJwY2xpYi5NSU5JTlQtMSwpKQorCisgICAgICAgIGRlZiBkdW1teV93cml0ZShzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtID0geG1scnBjbGliLk1hcnNoYWxsZXIoKQorICAgICAgICBtLmR1bXBfaW50KHhtbHJwY2xpYi5NQVhJTlQsIGR1bW15X3dyaXRlKQorICAgICAgICBtLmR1bXBfaW50KHhtbHJwY2xpYi5NSU5JTlQsIGR1bW15X3dyaXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBtLmR1bXBfaW50LCB4bWxycGNsaWIuTUFYSU5UKzEsIGR1bW15X3dyaXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBtLmR1bXBfaW50LCB4bWxycGNsaWIuTUlOSU5ULTEsIGR1bW15X3dyaXRlKQorCisKKyAgICBkZWYgdGVzdF9kdW1wX25vbmUoc2VsZik6CisgICAgICAgIHZhbHVlID0gYWxpc3QgKyBbTm9uZV0KKyAgICAgICAgYXJnMSA9IChhbGlzdCArIFtOb25lXSwpCisgICAgICAgIHN0cmcgPSB4bWxycGNsaWIuZHVtcHMoYXJnMSwgYWxsb3dfbm9uZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHhtbHJwY2xpYi5sb2FkcyhzdHJnKVswXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4bWxycGNsaWIuZHVtcHMsIChhcmcxLCkpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2VuY29kaW5nX2lzc3VlcyhzZWxmKToKKyAgICAgICAgIyBTRiBidWcgIzExMTU5ODk6IHdyb25nIGRlY29kaW5nIGluICdfc3RyaW5naWZ5JworICAgICAgICB1dGY4ID0gIiIiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/PgorICAgICAgICAgICAgICAgICAgPHBhcmFtcz4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmFtPjx2YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmFiYyBceDk1PC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgPC92YWx1ZT48L3BhcmFtPgorICAgICAgICAgICAgICAgICAgICA8cGFyYW0+PHZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgIDxzdHJ1Y3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5kZWYgXHg5NjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPjxzdHJpbmc+Z2hpIFx4OTc8L3N0cmluZz48L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L21lbWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvc3RydWN0PgorICAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+PC9wYXJhbT4KKyAgICAgICAgICAgICAgICAgIDwvcGFyYW1zPgorICAgICAgICAgICAgICAgICAgIiIiCisKKyAgICAgICAgIyBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nKCkgbm9ybWFsbHkgZG9lc24ndCBleGlzdCBhZnRlciBzaXRlLnB5IGlzCisgICAgICAgICMgbG9hZGVkLiAgSW1wb3J0IGEgdGVtcG9yYXJ5IGZyZXNoIGNvcHkgdG8gZ2V0IGFjY2VzcyB0byBpdAorICAgICAgICAjIGJ1dCB0aGVuIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGNvcHkgdG8gYXZvaWQgbWVzc2luZyB3aXRoCisgICAgICAgICMgb3RoZXIgcG90ZW50aWFsbHkgbW9kaWZpZWQgc3lzIG1vZHVsZSBhdHRyaWJ1dGVzCisgICAgICAgIG9sZF9lbmNvZGluZyA9IHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5DbGVhbkltcG9ydCgnc3lzJyk6CisgICAgICAgICAgICBpbXBvcnQgc3lzIGFzIHRlbXBfc3lzCisgICAgICAgICAgICB0ZW1wX3N5cy5zZXRkZWZhdWx0ZW5jb2RpbmcoImlzby04ODU5LTEiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChzLCBkKSwgbSA9IHhtbHJwY2xpYi5sb2Fkcyh1dGY4KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0ZW1wX3N5cy5zZXRkZWZhdWx0ZW5jb2Rpbmcob2xkX2VuY29kaW5nKQorCisgICAgICAgIGl0ZW1zID0gZC5pdGVtcygpCisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgdSJhYmMgXHg5NSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocywgdW5pY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIFsodSJkZWYgXHg5NiIsIHUiZ2hpIFx4OTciKV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbXNbMF1bMF0sIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbXNbMF1bMV0sIHVuaWNvZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJhYmMgXHhjMlx4OTUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtcywgWygiZGVmIFx4YzJceDk2IiwgImdoaSBceGMyXHg5NyIpXSkKKworCitjbGFzcyBIZWxwZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZXNjYXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhtbHJwY2xpYi5lc2NhcGUoImEmYiIpLCAiYSZhbXA7YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeG1scnBjbGliLmVzY2FwZSgiYTxiIiksICJhJmx0O2IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhtbHJwY2xpYi5lc2NhcGUoImE+YiIpLCAiYSZndDtiIikKKworY2xhc3MgRmF1bHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZiA9IHhtbHJwY2xpYi5GYXVsdCg0MiwgJ1Rlc3QgRmF1bHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZiksICI8RmF1bHQgNDI6ICdUZXN0IEZhdWx0Jz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZiksIHN0cihmKSkKKworICAgIGRlZiB0ZXN0X2R1bXBfZmF1bHQoc2VsZik6CisgICAgICAgIGYgPSB4bWxycGNsaWIuRmF1bHQoNDIsICdUZXN0IEZhdWx0JykKKyAgICAgICAgcyA9IHhtbHJwY2xpYi5kdW1wcygoZiwpKQorICAgICAgICAobmV3ZiwpLCBtID0geG1scnBjbGliLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3ZiwgeydmYXVsdENvZGUnOiA0MiwgJ2ZhdWx0U3RyaW5nJzogJ1Rlc3QgRmF1bHQnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBOb25lKQorCisgICAgICAgIHMgPSB4bWxycGNsaWIuTWFyc2hhbGxlcigpLmR1bXBzKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbHJwY2xpYi5GYXVsdCwgeG1scnBjbGliLmxvYWRzLCBzKQorCisKK2NsYXNzIERhdGVUaW1lVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHQgPSB4bWxycGNsaWIuRGF0ZVRpbWUoKQorCisgICAgZGVmIHRlc3RfdGltZShzZWxmKToKKyAgICAgICAgZCA9IDExODEzOTk5MzAuMDM2OTUyCisgICAgICAgIHQgPSB4bWxycGNsaWIuRGF0ZVRpbWUoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksIHRpbWUuc3RyZnRpbWUoIiVZJW0lZFQlSDolTTolUyIsIHRpbWUubG9jYWx0aW1lKGQpKSkKKworICAgIGRlZiB0ZXN0X3RpbWVfdHVwbGUoc2VsZik6CisgICAgICAgIGQgPSAoMjAwNyw2LDksMTAsMzgsNTAsNSwxNjAsMCkKKyAgICAgICAgdCA9IHhtbHJwY2xpYi5EYXRlVGltZShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0KSwgJzIwMDcwNjA5VDEwOjM4OjUwJykKKworICAgIGRlZiB0ZXN0X3RpbWVfc3RydWN0KHNlbGYpOgorICAgICAgICBkID0gdGltZS5sb2NhbHRpbWUoMTE4MTM5OTkzMC4wMzY5NTIpCisgICAgICAgIHQgPSB4bWxycGNsaWIuRGF0ZVRpbWUoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksICB0aW1lLnN0cmZ0aW1lKCIlWSVtJWRUJUg6JU06JVMiLCBkKSkKKworICAgIGRlZiB0ZXN0X2RhdGV0aW1lX2RhdGV0aW1lKHNlbGYpOgorICAgICAgICBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwNywxLDIsMyw0LDUpCisgICAgICAgIHQgPSB4bWxycGNsaWIuRGF0ZVRpbWUoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksICcyMDA3MDEwMlQwMzowNDowNScpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwNywxLDIsMyw0LDUpCisgICAgICAgIHQgPSB4bWxycGNsaWIuRGF0ZVRpbWUoZCkKKyAgICAgICAgdmFsID0iPERhdGVUaW1lICcyMDA3MDEwMlQwMzowNDowNScgYXQgJXg+IiAlIGlkKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwgdmFsKQorCisgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgorICAgICAgICBkID0gJyAyMDA3MDkwOFQwNzoxMToxMyAgJworICAgICAgICB0MSA9IHhtbHJwY2xpYi5EYXRlVGltZSgpCisgICAgICAgIHQxLmRlY29kZShkKQorICAgICAgICB0cmVmID0geG1scnBjbGliLkRhdGVUaW1lKGRhdGV0aW1lLmRhdGV0aW1lKDIwMDcsOSw4LDcsMTEsMTMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0cmVmKQorCisgICAgICAgIHQyID0geG1scnBjbGliLl9kYXRldGltZShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0cmVmKQorCitjbGFzcyBCaW5hcnlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKKyAgICAgICAgdCA9IHhtbHJwY2xpYi5CaW5hcnkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0KSwgJycpCisKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6CisgICAgICAgIGQgPSAnXHgwMVx4MDJceDAzYWJjMTIzXHhmZlx4ZmUnCisgICAgICAgIHQgPSB4bWxycGNsaWIuQmluYXJ5KGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQpLCBkKQorCisgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgorICAgICAgICBkID0gJ1x4MDFceDAyXHgwM2FiYzEyM1x4ZmZceGZlJworICAgICAgICBkZSA9IGJhc2U2NC5lbmNvZGVzdHJpbmcoZCkKKyAgICAgICAgdDEgPSB4bWxycGNsaWIuQmluYXJ5KCkKKyAgICAgICAgdDEuZGVjb2RlKGRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MSksIGQpCisKKyAgICAgICAgdDIgPSB4bWxycGNsaWIuX2JpbmFyeShkZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDIpLCBkKQorCisKK0FERFIgPSBQT1JUID0gVVJMID0gTm9uZQorCisjIFRoZSBldnQgaXMgc2V0IHR3aWNlLiAgRmlyc3Qgd2hlbiB0aGUgc2VydmVyIGlzIHJlYWR5IHRvIHNlcnZlLgorIyBTZWNvbmQgd2hlbiB0aGUgc2VydmVyIGhhcyBiZWVuIHNodXRkb3duLiAgVGhlIHVzZXIgbXVzdCBjbGVhcgorIyB0aGUgZXZlbnQgYWZ0ZXIgaXQgaGFzIGJlZW4gc2V0IHRoZSBmaXJzdCB0aW1lIHRvIGNhdGNoIHRoZSBzZWNvbmQgc2V0LgorZGVmIGh0dHBfc2VydmVyKGV2dCwgbnVtcmVxdWVzdHMsIHJlcXVlc3RIYW5kbGVyPU5vbmUpOgorICAgIGNsYXNzIFRlc3RJbnN0YW5jZUNsYXNzOgorICAgICAgICBkZWYgZGl2KHNlbGYsIHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIHggLy8geQorCisgICAgICAgIGRlZiBfbWV0aG9kSGVscChzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Rpdic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nCisKKyAgICBkZWYgbXlfZnVuY3Rpb24oKToKKyAgICAgICAgJycnVGhpcyBpcyBteSBmdW5jdGlvbicnJworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgY2xhc3MgTXlYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlcik6CisgICAgICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgICAgICMgRW5zdXJlIHRoZSBzb2NrZXQgaXMgYWx3YXlzIG5vbi1ibG9ja2luZy4gIE9uIExpbnV4LCBzb2NrZXQKKyAgICAgICAgICAgICMgYXR0cmlidXRlcyBhcmUgbm90IGluaGVyaXRlZCBsaWtlIHRoZXkgYXJlIG9uICpCU0QgYW5kIFdpbmRvd3MuCisgICAgICAgICAgICBzLCBwb3J0ID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKKyAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBzLCBwb3J0CisKKyAgICBpZiBub3QgcmVxdWVzdEhhbmRsZXI6CisgICAgICAgIHJlcXVlc3RIYW5kbGVyID0gU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCisgICAgc2VydiA9IE15WE1MUlBDU2VydmVyKCgibG9jYWxob3N0IiwgMCksIHJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dSZXF1ZXN0cz1GYWxzZSwgYmluZF9hbmRfYWN0aXZhdGU9RmFsc2UpCisgICAgdHJ5OgorICAgICAgICBzZXJ2LnNvY2tldC5zZXR0aW1lb3V0KDMpCisgICAgICAgIHNlcnYuc2VydmVyX2JpbmQoKQorICAgICAgICBnbG9iYWwgQUREUiwgUE9SVCwgVVJMCisgICAgICAgIEFERFIsIFBPUlQgPSBzZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpCisgICAgICAgICNjb25uZWN0IHRvIElQIGFkZHJlc3MgZGlyZWN0bHkuICBUaGlzIGF2b2lkcyBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKQorICAgICAgICAjdHJ5aW5nIHRvIGNvbm5lY3QgdG8gImxvY2FsaG9zdCIgdXNpbmcgYWxsIGFkZHJlc3MgZmFtaWxpZXMsIHdoaWNoCisgICAgICAgICNjYXVzZXMgc2xvd2Rvd24gZS5nLiBvbiB2aXN0YSB3aGljaCBzdXBwb3J0cyBBRl9JTkVUNi4gIFRoZSBzZXJ2ZXIgbGlzdGVucworICAgICAgICAjb24gQUZfSU5FVCBvbmx5LgorICAgICAgICBVUkwgPSAiaHR0cDovLyVzOiVkIiUoQUREUiwgUE9SVCkKKyAgICAgICAgc2Vydi5zZXJ2ZXJfYWN0aXZhdGUoKQorICAgICAgICBzZXJ2LnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zKCkKKyAgICAgICAgc2Vydi5yZWdpc3Rlcl9tdWx0aWNhbGxfZnVuY3Rpb25zKCkKKyAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihwb3cpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgseTogeCt5LCAnYWRkJykKKyAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihteV9mdW5jdGlvbikKKyAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnN0YW5jZShUZXN0SW5zdGFuY2VDbGFzcygpKQorICAgICAgICBldnQuc2V0KCkKKworICAgICAgICAjIGhhbmRsZSB1cCB0byAnbnVtcmVxdWVzdHMnIHJlcXVlc3RzCisgICAgICAgIHdoaWxlIG51bXJlcXVlc3RzID4gMDoKKyAgICAgICAgICAgIHNlcnYuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICAgICAgbnVtcmVxdWVzdHMgLT0gMQorCisgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgc2Vydi5zb2NrZXQuY2xvc2UoKQorICAgICAgICBQT1JUID0gTm9uZQorICAgICAgICBldnQuc2V0KCkKKworZGVmIGh0dHBfbXVsdGlfc2VydmVyKGV2dCwgbnVtcmVxdWVzdHMsIHJlcXVlc3RIYW5kbGVyPU5vbmUpOgorICAgIGNsYXNzIFRlc3RJbnN0YW5jZUNsYXNzOgorICAgICAgICBkZWYgZGl2KHNlbGYsIHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIHggLy8geQorCisgICAgICAgIGRlZiBfbWV0aG9kSGVscChzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Rpdic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nCisKKyAgICBkZWYgbXlfZnVuY3Rpb24oKToKKyAgICAgICAgJycnVGhpcyBpcyBteSBmdW5jdGlvbicnJworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgY2xhc3MgTXlYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyLk11bHRpUGF0aFhNTFJQQ1NlcnZlcik6CisgICAgICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgICAgICMgRW5zdXJlIHRoZSBzb2NrZXQgaXMgYWx3YXlzIG5vbi1ibG9ja2luZy4gIE9uIExpbnV4LCBzb2NrZXQKKyAgICAgICAgICAgICMgYXR0cmlidXRlcyBhcmUgbm90IGluaGVyaXRlZCBsaWtlIHRoZXkgYXJlIG9uICpCU0QgYW5kIFdpbmRvd3MuCisgICAgICAgICAgICBzLCBwb3J0ID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKKyAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBzLCBwb3J0CisKKyAgICBpZiBub3QgcmVxdWVzdEhhbmRsZXI6CisgICAgICAgIHJlcXVlc3RIYW5kbGVyID0gU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCisgICAgY2xhc3MgTXlSZXF1ZXN0SGFuZGxlcihyZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIHJwY19wYXRocyA9IFtdCisKKyAgICBzZXJ2ID0gTXlYTUxSUENTZXJ2ZXIoKCJsb2NhbGhvc3QiLCAwKSwgTXlSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nUmVxdWVzdHM9RmFsc2UsIGJpbmRfYW5kX2FjdGl2YXRlPUZhbHNlKQorICAgIHNlcnYuc29ja2V0LnNldHRpbWVvdXQoMykKKyAgICBzZXJ2LnNlcnZlcl9iaW5kKCkKKyAgICB0cnk6CisgICAgICAgIGdsb2JhbCBBRERSLCBQT1JULCBVUkwKKyAgICAgICAgQUREUiwgUE9SVCA9IHNlcnYuc29ja2V0LmdldHNvY2tuYW1lKCkKKyAgICAgICAgI2Nvbm5lY3QgdG8gSVAgYWRkcmVzcyBkaXJlY3RseS4gIFRoaXMgYXZvaWRzIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigpCisgICAgICAgICN0cnlpbmcgdG8gY29ubmVjdCB0byAibG9jYWxob3N0IiB1c2luZyBhbGwgYWRkcmVzcyBmYW1pbGllcywgd2hpY2gKKyAgICAgICAgI2NhdXNlcyBzbG93ZG93biBlLmcuIG9uIHZpc3RhIHdoaWNoIHN1cHBvcnRzIEFGX0lORVQ2LiAgVGhlIHNlcnZlciBsaXN0ZW5zCisgICAgICAgICNvbiBBRl9JTkVUIG9ubHkuCisgICAgICAgIFVSTCA9ICJodHRwOi8vJXM6JWQiJShBRERSLCBQT1JUKQorICAgICAgICBzZXJ2LnNlcnZlcl9hY3RpdmF0ZSgpCisgICAgICAgIHBhdGhzID0gWyIvZm9vIiwgIi9mb28vYmFyIl0KKyAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CisgICAgICAgICAgICBkID0gc2Vydi5hZGRfZGlzcGF0Y2hlcihwYXRoLCBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDRGlzcGF0Y2hlcigpKQorICAgICAgICAgICAgZC5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9ucygpCisgICAgICAgICAgICBkLnJlZ2lzdGVyX211bHRpY2FsbF9mdW5jdGlvbnMoKQorICAgICAgICBzZXJ2LmdldF9kaXNwYXRjaGVyKHBhdGhzWzBdKS5yZWdpc3Rlcl9mdW5jdGlvbihwb3cpCisgICAgICAgIHNlcnYuZ2V0X2Rpc3BhdGNoZXIocGF0aHNbMV0pLnJlZ2lzdGVyX2Z1bmN0aW9uKGxhbWJkYSB4LHk6IHgreSwgJ2FkZCcpCisgICAgICAgIGV2dC5zZXQoKQorCisgICAgICAgICMgaGFuZGxlIHVwIHRvICdudW1yZXF1ZXN0cycgcmVxdWVzdHMKKyAgICAgICAgd2hpbGUgbnVtcmVxdWVzdHMgPiAwOgorICAgICAgICAgICAgc2Vydi5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgICAgICBudW1yZXF1ZXN0cyAtPSAxCisKKyAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBzZXJ2LnNvY2tldC5jbG9zZSgpCisgICAgICAgIFBPUlQgPSBOb25lCisgICAgICAgIGV2dC5zZXQoKQorCisjIFRoaXMgZnVuY3Rpb24gcHJldmVudHMgZXJyb3JzIGxpa2U6CisjICAgIDxQcm90b2NvbEVycm9yIGZvciBsb2NhbGhvc3Q6NTc1MjcvUlBDMjogNTAwIEludGVybmFsIFNlcnZlciBFcnJvcj4KK2RlZiBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgJycnUmV0dXJucyBUcnVlIGlmIHRoZSBnaXZlbiBQcm90b2NvbEVycm9yIGlzIHRoZSBwcm9kdWN0IG9mIGEgc2VydmVyLXNpZGUKKyAgICAgICBleGNlcHRpb24gY2F1c2VkIGJ5IHRoZSAndGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnIHJlc3BvbnNlIHNvbWV0aW1lcworICAgICAgIGdpdmVuIGJ5IG9wZXJhdGlvbnMgb24gbm9uLWJsb2NraW5nIHNvY2tldHMuJycnCisKKyAgICAjIHNvbWV0aW1lcyB3ZSBnZXQgYSAtMSBlcnJvciBjb2RlIGFuZC9vciBlbXB0eSBoZWFkZXJzCisgICAgdHJ5OgorICAgICAgICBpZiBlLmVycmNvZGUgPT0gLTEgb3IgZS5oZWFkZXJzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNfbWVzcyA9IGUuaGVhZGVycy5nZXQoJ1gtZXhjZXB0aW9uJykKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICMgSWdub3JlIHNvY2tldC5lcnJvcnMgaGVyZS4KKyAgICAgICAgZXhjX21lc3MgPSBzdHIoZSkKKworICAgIGlmIGV4Y19tZXNzIGFuZCAndGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnIGluIGV4Y19tZXNzLmxvd2VyKCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIEJhc2VTZXJ2ZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcmVxdWVzdEhhbmRsZXIgPSBOb25lCisgICAgcmVxdWVzdF9jb3VudCA9IDEKKyAgICB0aHJlYWRGdW5jID0gc3RhdGljbWV0aG9kKGh0dHBfc2VydmVyKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIGVuYWJsZSB0cmFjZWJhY2sgcmVwb3J0aW5nCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IFRydWUKKworICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgICMgc3RhcnQgc2VydmVyIHRocmVhZCB0byBoYW5kbGUgcmVxdWVzdHMKKyAgICAgICAgc2Vydl9hcmdzID0gKHNlbGYuZXZ0LCBzZWxmLnJlcXVlc3RfY291bnQsIHNlbGYucmVxdWVzdEhhbmRsZXIpCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYudGhyZWFkRnVuYywgYXJncz1zZXJ2X2FyZ3MpLnN0YXJ0KCkKKworICAgICAgICAjIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdG8gYmUgcmVhZHkKKyAgICAgICAgc2VsZi5ldnQud2FpdCgxMCkKKyAgICAgICAgc2VsZi5ldnQuY2xlYXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIHdhaXQgb24gdGhlIHNlcnZlciB0aHJlYWQgdG8gdGVybWluYXRlCisgICAgICAgIHNlbGYuZXZ0LndhaXQoMTApCisKKyAgICAgICAgIyBkaXNhYmxlIHRyYWNlYmFjayByZXBvcnRpbmcKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gRmFsc2UKKworIyBOT1RFOiBUaGUgdGVzdHMgaW4gU2ltcGxlU2VydmVyVGVzdENhc2Ugd2lsbCBpZ25vcmUgZmFpbHVyZXMgY2F1c2VkIGJ5CisjICJ0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSIgZXhjZXB0aW9ucyByYWlzZWQgaW4gU2ltcGxlWE1MUlBDU2VydmVyLiAgVGhpcworIyBjb25kaXRpb24gb2NjdXJzIGluZnJlcXVlbnRseSBvbiBzb21lIHBsYXRmb3JtcywgZnJlcXVlbnRseSBvbiBvdGhlcnMsIGFuZAorIyBpcyBhcHBhcmVudGx5IGNhdXNlZCBieSB1c2luZyBTaW1wbGVYTUxSUENTZXJ2ZXIgd2l0aCBhIG5vbi1ibG9ja2luZyBzb2NrZXQKKyMgSWYgdGhlIHNlcnZlciBjbGFzcyBpcyB1cGRhdGVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSB0byBoYW5kbGUgdGhpcworIyBzaXR1YXRpb24gbW9yZSBncmFjZWZ1bGx5LCB0aGVzZSB0ZXN0cyBzaG91bGQgYmUgbW9kaWZpZWQgYXBwcm9wcmlhdGVseS4KKworY2xhc3MgU2ltcGxlU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zaW1wbGUxKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCisgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBnZXRhdHRyKGUsICJoZWFkZXJzIiwgIiIpKSkKKworICAgIGRlZiB0ZXN0X25vbmFzY2lpKHNlbGYpOgorICAgICAgICBzdGFydF9zdHJpbmcgPSAnUFxOe0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQ0lSQ1VNRkxFWH10JworICAgICAgICBlbmRfc3RyaW5nID0gJ2hcTntMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEhPUk59bicKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoc3RhcnRfc3RyaW5nLCBlbmRfc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc3RyaW5nICsgZW5kX3N0cmluZykKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgdW5hdmFpbGFibGUgZXJyb3JzLgorICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2hvc3Qoc2VsZik6CisgICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSh1Imh0dHA6Ly8lczolZC9SUEMyIiUoQUREUiwgUE9SVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyLmFkZCgiYSIsIHUiXHhlOSIpLCB1ImFceGU5IikKKworICAgICMgW2NoXSBUaGUgdGVzdCA0MDQgaXMgY2F1c2luZyBsb3RzIG9mIGZhbHNlIGFsYXJtcy4KKyAgICBkZWYgWFhYdGVzdF80MDQoc2VsZik6CisgICAgICAgICMgc2VuZCBQT1NUIHdpdGggaHR0cGxpYiwgaXQgc2hvdWxkIHJldHVybiA0MDQgaGVhZGVyIGFuZAorICAgICAgICAjICdOb3QgRm91bmQnIG1lc3NhZ2UuCisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKEFERFIsIFBPUlQpCisgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvdGhpcy1pcy1ub3QtdmFsaWQnKQorICAgICAgICByZXNwb25zZSA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICBjb25uLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1cywgNDA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnJlYXNvbiwgJ05vdCBGb3VuZCcpCisKKyAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uMShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICAgICBtZXRoID0gcC5zeXN0ZW0ubGlzdE1ldGhvZHMoKQorICAgICAgICAgICAgZXhwZWN0ZWRfbWV0aG9kcyA9IHNldChbJ3BvdycsICdkaXYnLCAnbXlfZnVuY3Rpb24nLCAnYWRkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW0ubGlzdE1ldGhvZHMnLCAnc3lzdGVtLm1ldGhvZEhlbHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUnLCAnc3lzdGVtLm11bHRpY2FsbCddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobWV0aCksIGV4cGVjdGVkX21ldGhvZHMpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycworICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCisKKyAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uMihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB0ZXN0IF9tZXRob2RIZWxwKCkKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAgICAgZGl2aGVscCA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ2RpdicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdmhlbHAsICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nKQorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpLCBlOgorICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKKyAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfaW50cm9zcGVjdGlvbjMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgdGVzdCBuYXRpdmUgZG9jCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIG15ZnVuY3Rpb24gPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdteV9mdW5jdGlvbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15ZnVuY3Rpb24sICdUaGlzIGlzIG15IGZ1bmN0aW9uJykKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCisgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBnZXRhdHRyKGUsICJoZWFkZXJzIiwgIiIpKSkKKworICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb240KHNlbGYpOgorICAgICAgICAjIHRoZSBTaW1wbGVYTUxSUENTZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHNpZ25hdHVyZXMsIGJ1dAorICAgICAgICAjIGF0IGxlYXN0IGNoZWNrIHRoYXQgd2UgY2FuIHRyeSBtYWtpbmcgdGhlIGNhbGwKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICAgICBkaXZzaWcgPSBwLnN5c3RlbS5tZXRob2RTaWduYXR1cmUoJ2RpdicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdnNpZywgJ3NpZ25hdHVyZXMgbm90IHN1cHBvcnRlZCcpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycworICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCisKKyAgICBkZWYgdGVzdF9tdWx0aWNhbGwoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAgICAgbXVsdGljYWxsID0geG1scnBjbGliLk11bHRpQ2FsbChwKQorICAgICAgICAgICAgbXVsdGljYWxsLmFkZCgyLDMpCisgICAgICAgICAgICBtdWx0aWNhbGwucG93KDYsOCkKKyAgICAgICAgICAgIG11bHRpY2FsbC5kaXYoMTI3LDQyKQorICAgICAgICAgICAgYWRkX3Jlc3VsdCwgcG93X3Jlc3VsdCwgZGl2X3Jlc3VsdCA9IG11bHRpY2FsbCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZF9yZXN1bHQsIDIrMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93X3Jlc3VsdCwgNioqOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2X3Jlc3VsdCwgMTI3Ly80MikKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCisgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBnZXRhdHRyKGUsICJoZWFkZXJzIiwgIiIpKSkKKworICAgIGRlZiB0ZXN0X25vbl9leGlzdGluZ19tdWx0aWNhbGwoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAgICAgbXVsdGljYWxsID0geG1scnBjbGliLk11bHRpQ2FsbChwKQorICAgICAgICAgICAgbXVsdGljYWxsLnRoaXNfaXNfbm90X2V4aXN0cygpCisgICAgICAgICAgICByZXN1bHQgPSBtdWx0aWNhbGwoKQorCisgICAgICAgICAgICAjIHJlc3VsdC5yZXN1bHRzIGNvbnRhaW5zOworICAgICAgICAgICAgIyBbeydmYXVsdENvZGUnOiAxLCAnZmF1bHRTdHJpbmcnOiAnPHR5cGUgXCdleGNlcHRpb25zLkV4Y2VwdGlvblwnPjonCisgICAgICAgICAgICAjICAgJ21ldGhvZCAidGhpc19pc19ub3RfZXhpc3RzIiBpcyBub3Qgc3VwcG9ydGVkJz59XQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5yZXN1bHRzWzBdWydmYXVsdENvZGUnXSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnJlc3VsdHNbMF1bJ2ZhdWx0U3RyaW5nJ10sCisgICAgICAgICAgICAgICAgJzx0eXBlIFwnZXhjZXB0aW9ucy5FeGNlcHRpb25cJz46bWV0aG9kICJ0aGlzX2lzX25vdF9leGlzdHMiICcKKyAgICAgICAgICAgICAgICAnaXMgbm90IHN1cHBvcnRlZCcpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycworICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCisKKyAgICBkZWYgdGVzdF9kb3R0ZWRfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICAjIFJhaXNlcyBhbiBBdHRyaWJ1dGVFcnJvciBiZWNhdXNlIHByaXZhdGUgbWV0aG9kcyBhcmUgbm90IGFsbG93ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIucmVzb2x2ZV9kb3R0ZWRfYXR0cmlidXRlLCBzdHIsICdfX2FkZCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFNpbXBsZVhNTFJQQ1NlcnZlci5yZXNvbHZlX2RvdHRlZF9hdHRyaWJ1dGUoc3RyLCAndGl0bGUnKSkKKyAgICAgICAgIyBHZXQgdGhlIHRlc3QgdG8gcnVuIGZhc3RlciBieSBzZW5kaW5nIGEgcmVxdWVzdCB3aXRoIHRlc3Rfc2ltcGxlMS4KKyAgICAgICAgIyBUaGlzIGF2b2lkcyB3YWl0aW5nIGZvciB0aGUgc29ja2V0IHRpbWVvdXQuCisgICAgICAgIHNlbGYudGVzdF9zaW1wbGUxKCkKKworICAgIGRlZiB0ZXN0X3BhcnRpYWxfcG9zdChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGEgcGFydGlhbCBQT1NUIGRvZXNuJ3QgbWFrZSB0aGUgc2VydmVyIGxvb3A6IGlzc3VlICMxNDAwMS4KKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oQUREUiwgUE9SVCkKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy9SUEMyIEhUVFAvMS4wXHJcbkNvbnRlbnQtTGVuZ3RoOiAxMDBcclxuXHJcbmJ5ZScpCisgICAgICAgIGNvbm4uY2xvc2UoKQorCitjbGFzcyBNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgorICAgIHRocmVhZEZ1bmMgPSBzdGF0aWNtZXRob2QoaHR0cF9tdWx0aV9zZXJ2ZXIpCisgICAgcmVxdWVzdF9jb3VudCA9IDIKKyAgICBkZWYgdGVzdF9wYXRoMShzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwrIi9mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbHJwY2xpYi5GYXVsdCwgcC5hZGQsIDYsIDgpCisgICAgZGVmIHRlc3RfcGF0aDIoc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKyIvZm9vL2JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoNiw4KSwgNis4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWxycGNsaWIuRmF1bHQsIHAucG93LCA2LCA4KQorCisjQSB0ZXN0IGNhc2UgdGhhdCB2ZXJpZmllcyB0aGF0IGEgc2VydmVyIHVzaW5nIHRoZSBIVFRQLzEuMSBrZWVwLWFsaXZlIG1lY2hhbmlzbQorI2RvZXMgaW5kZWVkIHNlcnZlIHN1YnNlcXVlbnQgcmVxdWVzdHMgb24gdGhlIHNhbWUgY29ubmVjdGlvbgorY2xhc3MgQmFzZUtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlKEJhc2VTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgI2EgcmVxdWVzdCBoYW5kbGVyIHRoYXQgc3VwcG9ydHMga2VlcC1hbGl2ZSBhbmQgbG9ncyByZXF1ZXN0cyBpbnRvIGEKKyAgICAjY2xhc3MgdmFyaWFibGUKKyAgICBjbGFzcyBSZXF1ZXN0SGFuZGxlcihTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBwYXJlbnRDbGFzcyA9IFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorICAgICAgICBwcm90b2NvbF92ZXJzaW9uID0gJ0hUVFAvMS4xJworICAgICAgICBteVJlcXVlc3RzID0gW10KKyAgICAgICAgZGVmIGhhbmRsZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYubXlSZXF1ZXN0cy5hcHBlbmQoW10pCisgICAgICAgICAgICBzZWxmLnJlcWlkeCA9IGxlbihzZWxmLm15UmVxdWVzdHMpLTEKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudENsYXNzLmhhbmRsZShzZWxmKQorICAgICAgICBkZWYgaGFuZGxlX29uZV9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5wYXJlbnRDbGFzcy5oYW5kbGVfb25lX3JlcXVlc3Qoc2VsZikKKyAgICAgICAgICAgIHNlbGYubXlSZXF1ZXN0c1tzZWxmLnJlcWlkeF0uYXBwZW5kKHNlbGYucmF3X3JlcXVlc3RsaW5lKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgcmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlcgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgI2NsZWFyIHJlcXVlc3QgbG9nCisgICAgICAgIHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0cyA9IFtdCisgICAgICAgIHJldHVybiBCYXNlU2VydmVyVGVzdENhc2Uuc2V0VXAoc2VsZikKKworI0EgdGVzdCBjYXNlIHRoYXQgdmVyaWZpZXMgdGhhdCBhIHNlcnZlciB1c2luZyB0aGUgSFRUUC8xLjEga2VlcC1hbGl2ZSBtZWNoYW5pc20KKyNkb2VzIGluZGVlZCBzZXJ2ZSBzdWJzZXF1ZW50IHJlcXVlc3RzIG9uIHRoZSBzYW1lIGNvbm5lY3Rpb24KK2NsYXNzIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMShCYXNlS2VlcGFsaXZlU2VydmVyVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICNkbyB0aHJlZSByZXF1ZXN0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKworICAgICAgICAjdGhleSBzaG91bGQgaGF2ZSBhbGwgYmVlbiBoYW5kbGVkIGJ5IGEgc2luZ2xlIHJlcXVlc3QgaGFuZGxlcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHMpLCAxKQorCisgICAgICAgICNjaGVjayB0aGF0IHdlIGRpZCBhdCBsZWFzdCB0d28gKHRoZSB0aGlyZCBtYXkgYmUgcGVuZGluZyBhcHBlbmQKKyAgICAgICAgI2R1ZSB0byB0aHJlYWQgc2NoZWR1bGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0c1stMV0pLCAyKQorCisjdGVzdCBzcGVjaWFsIGF0dHJpYnV0ZSBhY2Nlc3Mgb24gdGhlIHNlcnZlcnByb3h5LCB0aHJvdWdoIHRoZSBfX2NhbGxfXworI2Z1bmN0aW9uLgorY2xhc3MgS2VlcGFsaXZlU2VydmVyVGVzdENhc2UyKEJhc2VLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgI2FzayBmb3IgdHdvIGtlZXBhbGl2ZSByZXF1ZXN0cyB0byBiZSBoYW5kbGVkLgorICAgIHJlcXVlc3RfY291bnQ9MgorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAjZG8gc29tZSByZXF1ZXN0cyB3aXRoIGNsb3NlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBwKCJjbG9zZSIpKCkgI3RoaXMgc2hvdWxkIHRyaWdnZXIgYSBuZXcga2VlcC1hbGl2ZSByZXF1ZXN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisKKyAgICAgICAgI3RoZXkgc2hvdWxkIGhhdmUgYWxsIGJlZW4gdHdvIHJlcXVlc3QgaGFuZGxlcnMsIGVhY2ggaGF2aW5nIGxvZ2dlZCBhdCBsZWFzdAorICAgICAgICAjdHdvIGNvbXBsZXRlIHJlcXVlc3RzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0cyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHNbLTFdKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0c1stMl0pLCAyKQorCisgICAgZGVmIHRlc3RfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgI2RvIHNvbWUgcmVxdWVzdHMgd2l0aCBjbG9zZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBwKCJ0cmFuc3BvcnQiKS5jbG9zZSgpICNzYW1lIGFzIGFib3ZlLCByZWFsbHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzKSwgMikKKworI0EgdGVzdCBjYXNlIHRoYXQgdmVyaWZpZXMgdGhhdCBnemlwIGVuY29kaW5nIHdvcmtzIGluIGJvdGggZGlyZWN0aW9ucworIyhmb3IgYSByZXF1ZXN0IGFuZCB0aGUgcmVzcG9uc2UpCitjbGFzcyBHemlwU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKKyAgICAjYSByZXF1ZXN0IGhhbmRsZXIgdGhhdCBzdXBwb3J0cyBrZWVwLWFsaXZlIGFuZCBsb2dzIHJlcXVlc3RzIGludG8gYQorICAgICNjbGFzcyB2YXJpYWJsZQorICAgIGNsYXNzIFJlcXVlc3RIYW5kbGVyKFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIHBhcmVudENsYXNzID0gU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCisgICAgICAgIHByb3RvY29sX3ZlcnNpb24gPSAnSFRUUC8xLjEnCisKKyAgICAgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgICAgICAjc3RvcmUgY29udGVudCBvZiBsYXN0IHJlcXVlc3QgaW4gY2xhc3MKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLmNvbnRlbnRfbGVuZ3RoID0gaW50KHNlbGYuaGVhZGVyc1siY29udGVudC1sZW5ndGgiXSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudENsYXNzLmRvX1BPU1Qoc2VsZikKKyAgICByZXF1ZXN0SGFuZGxlciA9IFJlcXVlc3RIYW5kbGVyCisKKyAgICBjbGFzcyBUcmFuc3BvcnQoeG1scnBjbGliLlRyYW5zcG9ydCk6CisgICAgICAgICNjdXN0b20gdHJhbnNwb3J0LCBzdG9yZXMgdGhlIHJlc3BvbnNlIGxlbmd0aCBmb3Igb3VyIHBlcnVzYWwKKyAgICAgICAgZmFrZV9nemlwID0gRmFsc2UKKyAgICAgICAgZGVmIHBhcnNlX3Jlc3BvbnNlKHNlbGYsIHJlc3BvbnNlKToKKyAgICAgICAgICAgIHNlbGYucmVzcG9uc2VfbGVuZ3RoPWludChyZXNwb25zZS5nZXRoZWFkZXIoImNvbnRlbnQtbGVuZ3RoIiwgMCkpCisgICAgICAgICAgICByZXR1cm4geG1scnBjbGliLlRyYW5zcG9ydC5wYXJzZV9yZXNwb25zZShzZWxmLCByZXNwb25zZSkKKworICAgICAgICBkZWYgc2VuZF9jb250ZW50KHNlbGYsIGNvbm5lY3Rpb24sIGJvZHkpOgorICAgICAgICAgICAgaWYgc2VsZi5mYWtlX2d6aXA6CisgICAgICAgICAgICAgICAgI2FkZCBhIGxvbmUgZ3ppcCBoZWFkZXIgdG8gaW5kdWNlIGRlY29kZSBlcnJvciByZW1vdGVseQorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKCJDb250ZW50LUVuY29kaW5nIiwgImd6aXAiKQorICAgICAgICAgICAgcmV0dXJuIHhtbHJwY2xpYi5UcmFuc3BvcnQuc2VuZF9jb250ZW50KHNlbGYsIGNvbm5lY3Rpb24sIGJvZHkpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEJhc2VTZXJ2ZXJUZXN0Q2FzZS5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlc3RfZ3ppcF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi5UcmFuc3BvcnQoKQorICAgICAgICB0LmVuY29kZV90aHJlc2hvbGQgPSBOb25lCisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMLCB0cmFuc3BvcnQ9dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBhID0gc2VsZi5SZXF1ZXN0SGFuZGxlci5jb250ZW50X2xlbmd0aAorICAgICAgICB0LmVuY29kZV90aHJlc2hvbGQgPSAwICN0dXJuIG9uIHJlcXVlc3QgZW5jb2RpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBiID0gc2VsZi5SZXF1ZXN0SGFuZGxlci5jb250ZW50X2xlbmd0aAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYT5iKQorCisgICAgZGVmIHRlc3RfYmFkX2d6aXBfcmVxdWVzdChzZWxmKToKKyAgICAgICAgdCA9IHNlbGYuVHJhbnNwb3J0KCkKKyAgICAgICAgdC5lbmNvZGVfdGhyZXNob2xkID0gTm9uZQorICAgICAgICB0LmZha2VfZ3ppcCA9IFRydWUKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwsIHRyYW5zcG9ydD10KQorICAgICAgICBjbSA9IHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLmNvbXBpbGUociJcYjQwMFxiIikpCisgICAgICAgIHdpdGggY206CisgICAgICAgICAgICBwLnBvdyg2LCA4KQorCisgICAgZGVmIHRlc3RfZ3NpcF9yZXNwb25zZShzZWxmKToKKyAgICAgICAgdCA9IHNlbGYuVHJhbnNwb3J0KCkKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwsIHRyYW5zcG9ydD10KQorICAgICAgICBvbGQgPSBzZWxmLnJlcXVlc3RIYW5kbGVyLmVuY29kZV90aHJlc2hvbGQKKyAgICAgICAgc2VsZi5yZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkID0gTm9uZSAjbm8gZW5jb2RpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBhID0gdC5yZXNwb25zZV9sZW5ndGgKKyAgICAgICAgc2VsZi5yZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkID0gMCAjYWx3YXlzIGVuY29kZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIGIgPSB0LnJlc3BvbnNlX2xlbmd0aAorICAgICAgICBzZWxmLnJlcXVlc3RIYW5kbGVyLmVuY29kZV90aHJlc2hvbGQgPSBvbGQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGE+YikKKworI1Rlc3Qgc3BlY2lhbCBhdHRyaWJ1dGVzIG9mIHRoZSBTZXJ2ZXJQcm94eSBvYmplY3QKK2NsYXNzIFNlcnZlclByb3h5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2Uuc2V0VXAoc2VsZikKKyAgICAgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICAgICAgc2VsZi51cmwgPSBVUkwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2l0aG91dCB0aHJlYWRpbmcsIGh0dHBfc2VydmVyKCkgYW5kIGh0dHBfbXVsdGlfc2VydmVyKCkgd2lsbCBub3QKKyAgICAgICAgICAgICMgYmUgZXhlY3V0ZWQgYW5kIFVSTCBpcyBzdGlsbCBlcXVhbCB0byBOb25lLiAnaHR0cDovLycgaXMgYSBqdXN0CisgICAgICAgICAgICAjIGVub3VnaCB0byBjaG9vc2UgdGhlIHNjaGVtZSAoSFRUUCkKKyAgICAgICAgICAgIHNlbGYudXJsID0gJ2h0dHA6Ly8nCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShzZWxmLnVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdjbG9zZScpKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHQgPSB4bWxycGNsaWIuVHJhbnNwb3J0KCkKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShzZWxmLnVybCwgdHJhbnNwb3J0PXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgndHJhbnNwb3J0JyksIHQpCisKKyMgVGhpcyBpcyBhIGNvbnRyaXZlZCB3YXkgdG8gbWFrZSBhIGZhaWx1cmUgb2NjdXIgb24gdGhlIHNlcnZlciBzaWRlCisjIGluIG9yZGVyIHRvIHRlc3QgdGhlIF9zZW5kX3RyYWNlYmFja19oZWFkZXIgZmxhZyBvbiB0aGUgc2VydmVyCitjbGFzcyBGYWlsaW5nTWVzc2FnZUNsYXNzKG1pbWV0b29scy5NZXNzYWdlKToKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgaWYga2V5ID09ICdjb250ZW50LWxlbmd0aCc6CisgICAgICAgICAgICByZXR1cm4gJ0kgYW0gYnJva2VuJworICAgICAgICByZXR1cm4gbWltZXRvb2xzLk1lc3NhZ2UuX19nZXRpdGVtX18oc2VsZiwga2V5KQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBGYWlsaW5nU2VydmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAjIHN0YXJ0IHNlcnZlciB0aHJlYWQgdG8gaGFuZGxlIHJlcXVlc3RzCisgICAgICAgIHNlcnZfYXJncyA9IChzZWxmLmV2dCwgMSkKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aHR0cF9zZXJ2ZXIsIGFyZ3M9c2Vydl9hcmdzKS5zdGFydCgpCisKKyAgICAgICAgIyB3YWl0IGZvciB0aGUgc2VydmVyIHRvIGJlIHJlYWR5CisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBzZWxmLmV2dC5jbGVhcigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgd2FpdCBvbiB0aGUgc2VydmVyIHRocmVhZCB0byB0ZXJtaW5hdGUKKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgICMgcmVzZXQgZmxhZworICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLl9zZW5kX3RyYWNlYmFja19oZWFkZXIgPSBGYWxzZQorICAgICAgICAjIHJlc2V0IG1lc3NhZ2UgY2xhc3MKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLk1lc3NhZ2VDbGFzcyA9IG1pbWV0b29scy5NZXNzYWdlCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IGZsYWcgaXMgZmFsc2UgYnkgZGVmYXVsdAorICAgICAgICBmbGFndmFsID0gU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZ3ZhbCwgRmFsc2UpCisKKyAgICAgICAgIyBlbmFibGUgdHJhY2ViYWNrIHJlcG9ydGluZworICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLl9zZW5kX3RyYWNlYmFja19oZWFkZXIgPSBUcnVlCisKKyAgICAgICAgIyB0ZXN0IGEgY2FsbCB0aGF0IHNob3VsZG4ndCBmYWlsIGp1c3QgYXMgYSBzbW9rZSB0ZXN0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpLCBlOgorICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKKyAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQorCisgICAgZGVmIHRlc3RfZmFpbF9ub19pbmZvKHNlbGYpOgorICAgICAgICAjIHVzZSB0aGUgYnJva2VuIG1lc3NhZ2UgY2xhc3MKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLk1lc3NhZ2VDbGFzcyA9IEZhaWxpbmdNZXNzYWdlQ2xhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIHAucG93KDYsOCkKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCisgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpIGFuZCBoYXNhdHRyKGUsICJoZWFkZXJzIik6CisgICAgICAgICAgICAgICAgIyBUaGUgdHdvIHNlcnZlci1zaWRlIGVycm9yIGhlYWRlcnMgc2hvdWxkbid0IGJlIHNlbnQgYmFjayBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5oZWFkZXJzLmdldCgiWC1leGNlcHRpb24iKSBpcyBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmhlYWRlcnMuZ2V0KCJYLXRyYWNlYmFjayIpIGlzIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1Byb3RvY29sRXJyb3Igbm90IHJhaXNlZCcpCisKKyAgICBkZWYgdGVzdF9mYWlsX3dpdGhfaW5mbyhzZWxmKToKKyAgICAgICAgIyB1c2UgdGhlIGJyb2tlbiBtZXNzYWdlIGNsYXNzCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5NZXNzYWdlQ2xhc3MgPSBGYWlsaW5nTWVzc2FnZUNsYXNzCisKKyAgICAgICAgIyBDaGVjayB0aGF0IGVycm9ycyBpbiB0aGUgc2VydmVyIHNlbmQgYmFjayBleGNlcHRpb24vdHJhY2ViYWNrCisgICAgICAgICMgaW5mbyB3aGVuIGZsYWcgaXMgc2V0CisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IFRydWUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIHAucG93KDYsOCkKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCisgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpIGFuZCBoYXNhdHRyKGUsICJoZWFkZXJzIik6CisgICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgZ2V0IGVycm9yIGluZm8gaW4gdGhlIHJlc3BvbnNlCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZXJyID0gImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlIDEwOiAnSSBhbSBicm9rZW4nIgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5oZWFkZXJzLmdldCgieC1leGNlcHRpb24iKSwgZXhwZWN0ZWRfZXJyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmhlYWRlcnMuZ2V0KCJ4LXRyYWNlYmFjayIpIGlzIG5vdCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdQcm90b2NvbEVycm9yIG5vdCByYWlzZWQnKQorCitjbGFzcyBDR0lIYW5kbGVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jZ2kgPSBTaW1wbGVYTUxSUENTZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNnaSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2NnaV9nZXQoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnZbJ1JFUVVFU1RfTUVUSE9EJ10gPSAnR0VUJworICAgICAgICAgICAgIyBpZiB0aGUgbWV0aG9kIGlzIEdFVCBhbmQgbm8gcmVxdWVzdF90ZXh0IGlzIGdpdmVuLCBpdCBydW5zIGhhbmRsZV9nZXQKKyAgICAgICAgICAgICMgZ2V0IHN5c291dCBvdXRwdXQKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIGRhdGFfb3V0OgorICAgICAgICAgICAgICAgIHNlbGYuY2dpLmhhbmRsZV9yZXF1ZXN0KCkKKworICAgICAgICAgICAgIyBwYXJzZSBTdGF0dXMgaGVhZGVyCisgICAgICAgICAgICBkYXRhX291dC5zZWVrKDApCisgICAgICAgICAgICBoYW5kbGUgPSBkYXRhX291dC5yZWFkKCkKKyAgICAgICAgICAgIHN0YXR1cyA9IGhhbmRsZS5zcGxpdCgpWzFdCisgICAgICAgICAgICBtZXNzYWdlID0gJyAnLmpvaW4oaGFuZGxlLnNwbGl0KClbMjo0XSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsICc0MDAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCAnQmFkIFJlcXVlc3QnKQorCisKKyAgICBkZWYgdGVzdF9jZ2lfeG1scnBjX3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIiPD94bWwgdmVyc2lvbj0nMS4wJz8+CisgICAgICAgIDxtZXRob2RDYWxsPgorICAgICAgICAgICAgPG1ldGhvZE5hbWU+dGVzdF9tZXRob2Q8L21ldGhvZE5hbWU+CisgICAgICAgICAgICA8cGFyYW1zPgorICAgICAgICAgICAgICAgIDxwYXJhbT4KKyAgICAgICAgICAgICAgICAgICAgPHZhbHVlPjxzdHJpbmc+Zm9vPC9zdHJpbmc+PC92YWx1ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmFtPgorICAgICAgICAgICAgICAgIDxwYXJhbT4KKyAgICAgICAgICAgICAgICAgICAgPHZhbHVlPjxzdHJpbmc+YmFyPC9zdHJpbmc+PC92YWx1ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmFtPgorICAgICAgICAgICAgPC9wYXJhbXM+CisgICAgICAgIDwvbWV0aG9kQ2FsbD4KKyAgICAgICAgIiIiCisKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudiwgXAorICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBkYXRhX291dCwgXAorICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9zdGRpbigpIGFzIGRhdGFfaW46CisgICAgICAgICAgICBkYXRhX2luLndyaXRlKGRhdGEpCisgICAgICAgICAgICBkYXRhX2luLnNlZWsoMCkKKyAgICAgICAgICAgIGVudlsnQ09OVEVOVF9MRU5HVEgnXSA9IHN0cihsZW4oZGF0YSkpCisgICAgICAgICAgICBzZWxmLmNnaS5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgIGRhdGFfb3V0LnNlZWsoMCkKKworICAgICAgICAjIHdpbGwgcmVzcG9uZCBleGNlcHRpb24sIGlmIHNvLCBvdXIgZ29hbCBpcyBhY2hpZXZlZCA7KQorICAgICAgICBoYW5kbGUgPSBkYXRhX291dC5yZWFkKCkKKworICAgICAgICAjIHN0YXJ0IHdpdGggNDR0aCBjaGFyIHNvIGFzIG5vdCB0byBnZXQgaHR0cCBoZWFkZXIsIHdlIGp1c3QgbmVlZCBvbmx5IHhtbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWxycGNsaWIuRmF1bHQsIHhtbHJwY2xpYi5sb2FkcywgaGFuZGxlWzQ0Ol0pCisKKyAgICAgICAgIyBBbHNvIHRlc3QgdGhlIGNvbnRlbnQtbGVuZ3RoIHJldHVybmVkICBieSBoYW5kbGVfcmVxdWVzdAorICAgICAgICAjIFVzaW5nIHRoZSBzYW1lIHRlc3QgbWV0aG9kIGlub3JkZXIgdG8gYXZvaWQgYWxsIHRoZSBkYXRhcGFzc2luZworICAgICAgICAjIGJvaWxlcnBsYXRlIGNvZGUuCisgICAgICAgICMgVGVzdCBmb3IgYnVnOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTA0MAorCisgICAgICAgIGNvbnRlbnQgPSBoYW5kbGVbaGFuZGxlLmZpbmQoIjw/eG1sIik6XQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBpbnQocmUuc2VhcmNoKCdDb250ZW50LUxlbmd0aDogKFxkKyknLCBoYW5kbGUpLmdyb3VwKDEpKSwKKyAgICAgICAgICAgIGxlbihjb250ZW50KSkKKworCitjbGFzcyBGYWtlU29ja2V0OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmRhdGEgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisKKyAgICBkZWYgc2VuZChzZWxmLCBidWYpOgorICAgICAgICBzZWxmLmRhdGEud3JpdGUoYnVmKQorICAgICAgICByZXR1cm4gbGVuKGJ1ZikKKworICAgIGRlZiBzZW5kYWxsKHNlbGYsIGJ1Zik6CisgICAgICAgIHNlbGYuZGF0YS53cml0ZShidWYpCisKKyAgICBkZWYgZ2V0dmFsdWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGEuZ2V0dmFsdWUoKQorCisgICAgZGVmIG1ha2VmaWxlKHNlbGYsIHg9J3InLCB5PS0xKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKworY2xhc3MgRmFrZVRyYW5zcG9ydCh4bWxycGNsaWIuVHJhbnNwb3J0KToKKyAgICAiIiJBIFRyYW5zcG9ydCBpbnN0YW5jZSB0aGF0IHJlY29yZHMgaW5zdGVhZCBvZiBzZW5kaW5nIGEgcmVxdWVzdC4KKworICAgIFRoaXMgY2xhc3MgcmVwbGFjZXMgdGhlIGFjdHVhbCBzb2NrZXQgdXNlZCBieSBodHRwbGliIHdpdGggYQorICAgIEZha2VTb2NrZXQgb2JqZWN0IHRoYXQgcmVjb3JkcyB0aGUgcmVxdWVzdC4gIEl0IGRvZXNuJ3QgcHJvdmlkZSBhCisgICAgcmVzcG9uc2UuCisgICAgIiIiCisKKyAgICBkZWYgbWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpOgorICAgICAgICBjb25uID0geG1scnBjbGliLlRyYW5zcG9ydC5tYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCkKKyAgICAgICAgY29ubi5zb2NrID0gc2VsZi5mYWtlX3NvY2tldCA9IEZha2VTb2NrZXQoKQorICAgICAgICByZXR1cm4gY29ubgorCitjbGFzcyBUcmFuc3BvcnRTdWJjbGFzc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBpc3N1ZV9yZXF1ZXN0KHNlbGYsIHRyYW5zcG9ydF9jbGFzcyk6CisgICAgICAgICIiIlJldHVybiBhbiBIVFRQIHJlcXVlc3QgbWFkZSB2aWEgdHJhbnNwb3J0X2NsYXNzLiIiIgorICAgICAgICB0cmFuc3BvcnQgPSB0cmFuc3BvcnRfY2xhc3MoKQorICAgICAgICBwcm94eSA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovL2V4YW1wbGUuY29tLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydD10cmFuc3BvcnQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb3h5LnBvdyg2LCA4KQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydC5mYWtlX3NvY2tldC5nZXR2YWx1ZSgpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgdGVzdF9jdXN0b21fdXNlcl9hZ2VudChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdFRyYW5zcG9ydChGYWtlVHJhbnNwb3J0KToKKworICAgICAgICAgICAgZGVmIHNlbmRfdXNlcl9hZ2VudChzZWxmLCBjb25uKToKKyAgICAgICAgICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0LnNlbmRfdXNlcl9hZ2VudChzZWxmLCBjb25uKQorICAgICAgICAgICAgICAgIGNvbm4ucHV0aGVhZGVyKCJYLVRlc3QiLCAidGVzdF9jdXN0b21fdXNlcl9hZ2VudCIpCisKKyAgICAgICAgcmVxID0gc2VsZi5pc3N1ZV9yZXF1ZXN0KFRlc3RUcmFuc3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlgtVGVzdDogdGVzdF9jdXN0b21fdXNlcl9hZ2VudFxyXG4iLCByZXEpCisKKyAgICBkZWYgdGVzdF9zZW5kX2hvc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RUcmFuc3BvcnQoRmFrZVRyYW5zcG9ydCk6CisKKyAgICAgICAgICAgIGRlZiBzZW5kX2hvc3Qoc2VsZiwgY29ubiwgaG9zdCk6CisgICAgICAgICAgICAgICAgeG1scnBjbGliLlRyYW5zcG9ydC5zZW5kX2hvc3Qoc2VsZiwgY29ubiwgaG9zdCkKKyAgICAgICAgICAgICAgICBjb25uLnB1dGhlYWRlcigiWC1UZXN0IiwgInRlc3Rfc2VuZF9ob3N0IikKKworICAgICAgICByZXEgPSBzZWxmLmlzc3VlX3JlcXVlc3QoVGVzdFRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiWC1UZXN0OiB0ZXN0X3NlbmRfaG9zdFxyXG4iLCByZXEpCisKKyAgICBkZWYgdGVzdF9zZW5kX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RUcmFuc3BvcnQoRmFrZVRyYW5zcG9ydCk6CisKKyAgICAgICAgICAgIGRlZiBzZW5kX3JlcXVlc3Qoc2VsZiwgY29ubiwgdXJsLCBib2R5KToKKyAgICAgICAgICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0LnNlbmRfcmVxdWVzdChzZWxmLCBjb25uLCB1cmwsIGJvZHkpCisgICAgICAgICAgICAgICAgY29ubi5wdXRoZWFkZXIoIlgtVGVzdCIsICJ0ZXN0X3NlbmRfcmVxdWVzdCIpCisKKyAgICAgICAgcmVxID0gc2VsZi5pc3N1ZV9yZXF1ZXN0KFRlc3RUcmFuc3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlgtVGVzdDogdGVzdF9zZW5kX3JlcXVlc3RcclxuIiwgcmVxKQorCisgICAgZGVmIHRlc3Rfc2VuZF9jb250ZW50KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0VHJhbnNwb3J0KEZha2VUcmFuc3BvcnQpOgorCisgICAgICAgICAgICBkZWYgc2VuZF9jb250ZW50KHNlbGYsIGNvbm4sIGJvZHkpOgorICAgICAgICAgICAgICAgIGNvbm4ucHV0aGVhZGVyKCJYLVRlc3QiLCAidGVzdF9zZW5kX2NvbnRlbnQiKQorICAgICAgICAgICAgICAgIHhtbHJwY2xpYi5UcmFuc3BvcnQuc2VuZF9jb250ZW50KHNlbGYsIGNvbm4sIGJvZHkpCisKKyAgICAgICAgcmVxID0gc2VsZi5pc3N1ZV9yZXF1ZXN0KFRlc3RUcmFuc3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlgtVGVzdDogdGVzdF9zZW5kX2NvbnRlbnRcclxuIiwgcmVxKQorCitAdGVzdF9zdXBwb3J0LnJlYXBfdGhyZWFkcworZGVmIHRlc3RfbWFpbigpOgorICAgIHhtbHJwY190ZXN0cyA9IFtYTUxSUENUZXN0Q2FzZSwgSGVscGVyVGVzdENhc2UsIERhdGVUaW1lVGVzdENhc2UsCisgICAgICAgICBCaW5hcnlUZXN0Q2FzZSwgRmF1bHRUZXN0Q2FzZSwgVHJhbnNwb3J0U3ViY2xhc3NUZXN0Q2FzZV0KKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNpbXBsZVNlcnZlclRlc3RDYXNlKQorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoS2VlcGFsaXZlU2VydmVyVGVzdENhc2UxKQorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoS2VlcGFsaXZlU2VydmVyVGVzdENhc2UyKQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IGd6aXAKKyAgICAgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChHemlwU2VydmVyVGVzdENhc2UpCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzICNnemlwIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZAorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoTXVsdGlQYXRoU2VydmVyVGVzdENhc2UpCisgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChTZXJ2ZXJQcm94eVRlc3RDYXNlKQorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoRmFpbGluZ1NlcnZlclRlc3RDYXNlKQorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoQ0dJSGFuZGxlclRlc3RDYXNlKQorCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqeG1scnBjX3Rlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF94cGlja2xlLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfeHBpY2tsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzNhMzNmCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfeHBpY2tsZS5weQpAQCAtMCwwICsxLDI2NCBAQAorIyB0ZXN0X3BpY2tsZSBkdW1wcyBhbmQgbG9hZHMgcGlja2xlcyB2aWEgcGlja2xlLnB5LgorIyB0ZXN0X2NwaWNrbGUgZG9lcyB0aGUgc2FtZSwgYnV0IHZpYSB0aGUgY1BpY2tsZSBtb2R1bGUuCisjIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIG90aGVyIHR3byBjYXNlcywgbWFraW5nIHBpY2tsZXMgd2l0aCBvbmUgbW9kdWxlIGFuZAorIyBsb2FkaW5nIHRoZW0gdmlhIHRoZSBvdGhlci4gSXQgYWxzbyB0ZXN0cyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCisjIHByZXZpb3VzIHZlcnNpb24gb2YgUHl0aG9uIGJ5IGJvdW5jaW5nIHBpY2tsZWQgb2JqZWN0cyB0aHJvdWdoIFB5dGhvbiAyLjQKKyMgYW5kIFB5dGhvbiAyLjUgcnVubmluZyB0aGlzIGZpbGUuCisKK2ltcG9ydCBjUGlja2xlCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBNb3N0IGRpc3Ryby1zdXBwbGllZCBQeXRob25zIGRvbid0IGluY2x1ZGUgdGhlIHRlc3RzCisjIG9yIHRlc3Qgc3VwcG9ydCBmaWxlcywgYW5kIHNvbWUgZG9uJ3QgaW5jbHVkZSBhIHdheSB0byBnZXQgdGhlc2UgYmFjayBldmVuIGlmCisjIHlvdSdyZSB3aWxsIHRvIGluc3RhbGwgZXh0cmEgcGFja2FnZXMgKGxpa2UgVWJ1bnR1KS4gRG9pbmcgdGhpbmdzIGxpa2UgdGhpcworIyAicHJvdmlkZXMiIGEgcGlja2xldGVzdGVyIG1vZHVsZSBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgUHl0aG9uIHRoYXQgbWF5IGJlCisjIGluc3RhbGxlZCB3aXRob3V0IGl0LiBOb3RlIHRoYXQgb25lIG90aGVyIGRlc2lnbiBmb3IgdGhpcyBpbnZvbHZlcyBtZXNzaW5nCisjIHdpdGggc3lzLnBhdGgsIHdoaWNoIGlzIGxlc3MgcHJlY2lzZS4KK21vZF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGV0ZXN0ZXIucHkiKSkKK3BpY2tsZXRlc3RlciA9IHR5cGVzLk1vZHVsZVR5cGUoInRlc3QucGlja2xldGVzdGVyIikKK2V4ZWMgY29tcGlsZShvcGVuKG1vZF9wYXRoKS5yZWFkKCksIG1vZF9wYXRoLCAnZXhlYycpIGluIHBpY2tsZXRlc3Rlci5fX2RpY3RfXworQWJzdHJhY3RQaWNrbGVUZXN0cyA9IHBpY2tsZXRlc3Rlci5BYnN0cmFjdFBpY2tsZVRlc3RzCitpZiBwaWNrbGV0ZXN0ZXIuX19uYW1lX18gaW4gc3lzLm1vZHVsZXM6CisgICAgcmFpc2UgUnVudGltZUVycm9yKCJEaWQgbm90IGV4cGVjdCB0byBmaW5kIHRlc3QucGlja2xldGVzdGVyIGxvYWRlZCIpCitzeXMubW9kdWxlc1twaWNrbGV0ZXN0ZXIuX19uYW1lX19dID0gcGlja2xldGVzdGVyCisKKworY2xhc3MgRHVtcENQaWNrbGVfTG9hZFBpY2tsZShBYnN0cmFjdFBpY2tsZVRlc3RzKToKKworICAgIGVycm9yID0gS2V5RXJyb3IKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9RmFsc2UpOgorICAgICAgICAjIElnbm9yZSBmYXN0CisgICAgICAgIHJldHVybiBjUGlja2xlLmR1bXBzKGFyZywgcHJvdG8pCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmKToKKyAgICAgICAgIyBJZ25vcmUgZmFzdAorICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGJ1ZikKKworY2xhc3MgRHVtcFBpY2tsZV9Mb2FkQ1BpY2tsZShBYnN0cmFjdFBpY2tsZVRlc3RzKToKKworICAgIGVycm9yID0gY1BpY2tsZS5CYWRQaWNrbGVHZXQKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9RmFsc2UpOgorICAgICAgICAjIElnbm9yZSBmYXN0CisgICAgICAgIHJldHVybiBwaWNrbGUuZHVtcHMoYXJnLCBwcm90bykKKworICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgICAgICAjIElnbm9yZSBmYXN0CisgICAgICAgIHJldHVybiBjUGlja2xlLmxvYWRzKGJ1ZikKKworZGVmIGhhdmVfcHl0aG9uX3ZlcnNpb24obmFtZSk6CisgICAgIiIiQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbmFtZSBpcyBhIHZhbGlkIFB5dGhvbiBiaW5hcnkgYW5kIGhhcworICAgIHRlc3QudGVzdF9zdXBwb3J0LgorCisgICAgVGhpcyByZXNwZWN0cyB5b3VyIFBBVEguCisKKyAgICBBcmdzOgorICAgICAgICBuYW1lOiBzaG9ydCBzdHJpbmcgbmFtZSBvZiBhIFB5dGhvbiBiaW5hcnkgc3VjaCBhcyAicHl0aG9uMi40Ii4KKworICAgIFJldHVybnM6CisgICAgICAgIFRydWUgaWYgdGhlIG5hbWUgaXMgdmFsaWQsIEZhbHNlIG90aGVyd2lzZS4KKyAgICAiIiIKKyAgICByZXR1cm4gb3Muc3lzdGVtKG5hbWUgKyAiIC1jICdpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQnIikgPT0gMAorCisKK2NsYXNzIEFic3RyYWN0Q29tcGF0VGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cyk6CisKKyAgICBtb2R1bGUgPSBOb25lCisgICAgcHl0aG9uID0gTm9uZQorICAgIGVycm9yID0gTm9uZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5weXRob24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZXJyb3IpCisKKyAgICBkZWYgc2VuZF90b193b3JrZXIoc2VsZiwgcHl0aG9uLCBvYmosIHByb3RvKToKKyAgICAgICAgIiIiQm91bmNlIGEgcGlja2xlZCBvYmplY3QgdGhyb3VnaCBhbm90aGVyIHZlcnNpb24gb2YgUHl0aG9uLgorCisgICAgICAgIFRoaXMgd2lsbCBwaWNrbGUgdGhlIG9iamVjdCwgc2VuZCBpdCB0byBhIGNoaWxkIHByb2Nlc3Mgd2hlcmUgaXQgd2lsbCBiZQorICAgICAgICB1bnBpY2tsZWQsIHRoZW4gcmVwaWNrbGVkIGFuZCBzZW50IGJhY2sgdG8gdGhlIHBhcmVudCBwcm9jZXNzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBweXRob246IHRoZSBuYW1lIG9mIHRoZSBQeXRob24gYmluYXJ5IHRvIHN0YXJ0LgorICAgICAgICAgICAgb2JqOiBvYmplY3QgdG8gcGlja2xlLgorICAgICAgICAgICAgcHJvdG86IHBpY2tsZSBwcm90b2NvbCBudW1iZXIgdG8gdXNlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUaGUgcGlja2xlZCBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGNoaWxkIHByb2Nlc3MuCisgICAgICAgICIiIgorICAgICAgICAjIFByZXZlbnQgdGhlIHN1YnByb2Nlc3MgZnJvbSBwaWNraW5nIHVwIGludmFsaWQgLnB5YyBmaWxlcy4KKyAgICAgICAgdGFyZ2V0ID0gX19maWxlX18KKyAgICAgICAgaWYgdGFyZ2V0Wy0xXSBpbiAoImMiLCAibyIpOgorICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0WzotMV0KKworICAgICAgICBkYXRhID0gc2VsZi5tb2R1bGUuZHVtcHMoKHByb3RvLCBvYmopLCBwcm90bykKKyAgICAgICAgd29ya2VyID0gc3VicHJvY2Vzcy5Qb3BlbihbcHl0aG9uLCB0YXJnZXQsICJ3b3JrZXIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHdvcmtlci5jb21tdW5pY2F0ZShkYXRhKQorICAgICAgICBpZiB3b3JrZXIucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHN0ZGVycikKKyAgICAgICAgcmV0dXJuIHN0ZG91dAorCisgICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCwgZmFzdD1GYWxzZSk6CisgICAgICAgIHJldHVybiBzZWxmLnNlbmRfdG9fd29ya2VyKHNlbGYucHl0aG9uLCBhcmcsIHByb3RvKQorCisgICAgZGVmIGxvYWRzKHNlbGYsIGlucHV0KToKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlLmxvYWRzKGlucHV0KQorCisgICAgIyBUaGVzZSB0ZXN0cyBhcmUgZGlzYWJsZWQgYmVjYXVzZSB0aGV5IHJlcXVpcmUgc29tZSBzcGVjaWFsIHNldHVwCisgICAgIyBvbiB0aGUgd29ya2VyIHRoYXQncyBoYXJkIHRvIGtlZXAgaW4gc3luYy4KKyAgICBkZWYgdGVzdF9nbG9iYWxfZXh0MShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZ2xvYmFsX2V4dDIoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2dsb2JhbF9leHQ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAjIFRoaXMgaXMgYSBjdXQtZG93biB2ZXJzaW9uIG9mIHBpY2tsZXRlc3RlcidzIHRlc3RfZmxvYXQuIEJhY2t3YXJkcworICAgICMgY29tcGF0aWJpbGl0eSBmb3IgdGhlIHZhbHVlcyBpbiBmb3JfYmluX3Byb3RvcyB3YXMgZXhwbGljaXRseSBicm9rZW4gaW4KKyAgICAjIHI2ODkwMyB0byBmaXggYSBidWcuCisgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CisgICAgICAgIGZvcl9iaW5fcHJvdG9zID0gWzQuOTRlLTMyNCwgMWUtMzEwXQorICAgICAgICBuZWdfZm9yX2Jpbl9wcm90b3MgPSBbLXggZm9yIHggaW4gZm9yX2Jpbl9wcm90b3NdCisgICAgICAgIHRlc3RfdmFsdWVzID0gWzAuMCwgN2UtMzA4LCA2LjYyNmUtMzQsIDAuMSwgMC41LAorICAgICAgICAgICAgICAgICAgICAgICAzLjE0LCAyNjMuNDQ1ODIwNjIzNzQwNTMsIDYuMDIyZTIzLCAxZTMwXQorICAgICAgICB0ZXN0X3Byb3RvMF92YWx1ZXMgPSB0ZXN0X3ZhbHVlcyArIFsteCBmb3IgeCBpbiB0ZXN0X3ZhbHVlc10KKyAgICAgICAgdGVzdF92YWx1ZXMgPSB0ZXN0X3Byb3RvMF92YWx1ZXMgKyBmb3JfYmluX3Byb3RvcyArIG5lZ19mb3JfYmluX3Byb3RvcworCisgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0X3Byb3RvMF92YWx1ZXM6CisgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKHZhbHVlLCAwKQorICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBnb3QpCisKKyAgICAgICAgZm9yIHByb3RvIGluIHBpY2tsZXRlc3Rlci5wcm90b2NvbHNbMTpdOgorICAgICAgICAgICAgZm9yIHZhbHVlIGluIHRlc3RfdmFsdWVzOgorICAgICAgICAgICAgICAgIHBpY2tsZSA9IHNlbGYuZHVtcHModmFsdWUsIHByb3RvKQorICAgICAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocGlja2xlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIGdvdCkKKworICAgICMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2FzIGV4cGxpY2l0bHkgYnJva2VuIGluIHI2NzkzNCB0byBmaXggYSBidWcuCisgICAgZGVmIHRlc3RfdW5pY29kZV9oaWdoX3BsYW5lKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAjIFRoaXMgdGVzdHMgYSBmaXggdGhhdCdzIGluIDIuNyBvbmx5CisgICAgZGVmIHRlc3RfZHluYW1pY19jbGFzcyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgIyBUaGlzIGlzIGEgY3V0LWRvd24gdmVyc2lvbiBvZiBwaWNrbGV0ZXN0ZXIncyB0ZXN0X3VuaWNvZGUuIEJhY2t3YXJkcworICAgICAgICAjIGNvbXBhdGliaWxpdHkgd2FzIGV4cGxpY2l0bHkgYnJva2VuIGluIHI2NzkzNCB0byBmaXggYSBidWcuCisgICAgICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgICAgICBlbmRjYXNlcyA9IFt1JycsIHUnPFxcdT4nLCB1JzxcXFx1MTIzND4nLCB1Jzxcbj4nLCB1JzxcXD4nXQorICAgICAgICAgICAgZm9yIHByb3RvIGluIHBpY2tsZXRlc3Rlci5wcm90b2NvbHM6CisgICAgICAgICAgICAgICAgZm9yIHUgaW4gZW5kY2FzZXM6CisgICAgICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHUsIHByb3RvKQorICAgICAgICAgICAgICAgICAgICB1MiA9IHNlbGYubG9hZHMocCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MiwgdSkKKworCitkZWYgcnVuX2NvbXBhdF90ZXN0KHB5dGhvbl9uYW1lKToKKyAgICByZXR1cm4gKHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJ4cGlja2xlIikgYW5kCisgICAgICAgICAgICBoYXZlX3B5dGhvbl92ZXJzaW9uKHB5dGhvbl9uYW1lKSkKKworCisjIFRlc3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi40LgoraWYgbm90IHJ1bl9jb21wYXRfdGVzdCgicHl0aG9uMi40Iik6CisgICAgY2xhc3MgQ1BpY2tsZVB5dGhvbjI0Q29tcGF0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcGFzcworZWxzZToKKyAgICBjbGFzcyBDUGlja2xlUHl0aG9uMjRDb21wYXQoQWJzdHJhY3RDb21wYXRUZXN0cyk6CisKKyAgICAgICAgbW9kdWxlID0gY1BpY2tsZQorICAgICAgICBweXRob24gPSAicHl0aG9uMi40IgorICAgICAgICBlcnJvciA9IGNQaWNrbGUuQmFkUGlja2xlR2V0CisKKyAgICAgICAgIyBEaXNhYmxlIHRoZXNlIHRlc3RzIGZvciBQeXRob24gMi40LiBNYWtpbmcgdGhlbSBwYXNzIHdvdWxkIHJlcXVpcmUKKyAgICAgICAgIyBub250cml2aWFsbHkgbW9ua2V5cGF0Y2hpbmcgdGhlIHBpY2tsZXRlc3RlciBtb2R1bGUgaW4gdGhlIHdvcmtlci4KKyAgICAgICAgZGVmIHRlc3RfcmVkdWNlX2NhbGxzX2Jhc2Uoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIHRlc3RfcmVkdWNlX2V4X2NhbGxzX2Jhc2Uoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKK2NsYXNzIFBpY2tsZVB5dGhvbjI0Q29tcGF0KENQaWNrbGVQeXRob24yNENvbXBhdCk6CisKKyAgICBtb2R1bGUgPSBwaWNrbGUKKyAgICBlcnJvciA9IEtleUVycm9yCisKKworIyBUZXN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNS4KK2lmIG5vdCBydW5fY29tcGF0X3Rlc3QoInB5dGhvbjIuNSIpOgorICAgIGNsYXNzIENQaWNrbGVQeXRob24yNUNvbXBhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKK2Vsc2U6CisgICAgY2xhc3MgQ1BpY2tsZVB5dGhvbjI1Q29tcGF0KEFic3RyYWN0Q29tcGF0VGVzdHMpOgorCisgICAgICAgIG1vZHVsZSA9IGNQaWNrbGUKKyAgICAgICAgcHl0aG9uID0gInB5dGhvbjIuNSIKKyAgICAgICAgZXJyb3IgPSBjUGlja2xlLkJhZFBpY2tsZUdldAorCitjbGFzcyBQaWNrbGVQeXRob24yNUNvbXBhdChDUGlja2xlUHl0aG9uMjVDb21wYXQpOgorCisgICAgbW9kdWxlID0gcGlja2xlCisgICAgZXJyb3IgPSBLZXlFcnJvcgorCisKKyMgVGVzdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjYuCitpZiBub3QgcnVuX2NvbXBhdF90ZXN0KCJweXRob24yLjYiKToKKyAgICBjbGFzcyBDUGlja2xlUHl0aG9uMjZDb21wYXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIENQaWNrbGVQeXRob24yNkNvbXBhdChBYnN0cmFjdENvbXBhdFRlc3RzKToKKworICAgICAgICBtb2R1bGUgPSBjUGlja2xlCisgICAgICAgIHB5dGhvbiA9ICJweXRob24yLjYiCisgICAgICAgIGVycm9yID0gY1BpY2tsZS5CYWRQaWNrbGVHZXQKKworY2xhc3MgUGlja2xlUHl0aG9uMjZDb21wYXQoQ1BpY2tsZVB5dGhvbjI2Q29tcGF0KToKKworICAgIG1vZHVsZSA9IHBpY2tsZQorICAgIGVycm9yID0gS2V5RXJyb3IKKworCitkZWYgd29ya2VyX21haW4oaW5fc3RyZWFtLCBvdXRfc3RyZWFtKToKKyAgICBtZXNzYWdlID0gY1BpY2tsZS5sb2FkKGluX3N0cmVhbSkKKyAgICBwcm90b2NvbCwgb2JqID0gbWVzc2FnZQorICAgIGNQaWNrbGUuZHVtcChvYmosIG91dF9zdHJlYW0sIHByb3RvY29sKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBpZiBub3QgdGVzdF9zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoInhwaWNrbGUiKToKKyAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAidGVzdF94cGlja2xlIC0tIHNraXBwaW5nIGJhY2t3YXJkcyBjb21wYXQgdGVzdHMuIgorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJVc2UgJ3JlZ3J0ZXN0LnB5IC11IHhwaWNrbGUnIHRvIHJ1biB0aGVtLiIKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBEdW1wQ1BpY2tsZV9Mb2FkUGlja2xlLAorICAgICAgICBEdW1wUGlja2xlX0xvYWRDUGlja2xlLAorICAgICAgICBDUGlja2xlUHl0aG9uMjRDb21wYXQsCisgICAgICAgIENQaWNrbGVQeXRob24yNUNvbXBhdCwKKyAgICAgICAgQ1BpY2tsZVB5dGhvbjI2Q29tcGF0LAorICAgICAgICBQaWNrbGVQeXRob24yNENvbXBhdCwKKyAgICAgICAgUGlja2xlUHl0aG9uMjVDb21wYXQsCisgICAgICAgIFBpY2tsZVB5dGhvbjI2Q29tcGF0LAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpZiAid29ya2VyIiBpbiBzeXMuYXJndjoKKyAgICAgICAgd29ya2VyX21haW4oc3lzLnN0ZGluLCBzeXMuc3Rkb3V0KQorICAgIGVsc2U6CisgICAgICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF94cmFuZ2UucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF94cmFuZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjMGU0MQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3hyYW5nZS5weQpAQCAtMCwwICsxLDIxOCBAQAorIyBQeXRob24gdGVzdCBzZXQgLS0gYnVpbHQtaW4gZnVuY3Rpb25zCisKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCwgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBpdGVydG9vbHMKKworaW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAidW5pdHRlc3QiKQorCisjIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9ucyAoMyBhcmdzIG9ubHkpLCBmb3IgY29tcGFyaXNvbgorZGVmIHB5cmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApOgorICAgIGlmIChzdGFydCAtIHN0b3ApIC8vIHN0ZXAgPCAwOgorICAgICAgICAjIHJlcGxhY2Ugc3RvcCB3aXRoIG5leHQgZWxlbWVudCBpbiB0aGUgc2VxdWVuY2Ugb2YgaW50ZWdlcnMKKyAgICAgICAgIyB0aGF0IGFyZSBjb25ncnVlbnQgdG8gc3RhcnQgbW9kdWxvIHN0ZXAuCisgICAgICAgIHN0b3AgKz0gKHN0YXJ0IC0gc3RvcCkgJSBzdGVwCisgICAgICAgIHdoaWxlIHN0YXJ0ICE9IHN0b3A6CisgICAgICAgICAgICB5aWVsZCBzdGFydAorICAgICAgICAgICAgc3RhcnQgKz0gc3RlcAorCitkZWYgcHlyYW5nZV9yZXZlcnNlZChzdGFydCwgc3RvcCwgc3RlcCk6CisgICAgc3RvcCArPSAoc3RhcnQgLSBzdG9wKSAlIHN0ZXAKKyAgICByZXR1cm4gcHlyYW5nZShzdG9wIC0gc3RlcCwgc3RhcnQgLSBzdGVwLCAtc3RlcCkKKworCitjbGFzcyBYcmFuZ2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0X2l0ZXJhdG9yc19lcXVhbChzZWxmLCB4cywgeXMsIHRlc3RfaWQsIGxpbWl0PU5vbmUpOgorICAgICAgICAjIGNoZWNrIHRoYXQgYW4gaXRlcmF0b3IgeHMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmVzdWx0cyB5cywKKyAgICAgICAgIyB1cCB0byBhIGdpdmVuIGxpbWl0LgorICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHhzID0gaXRlcnRvb2xzLmlzbGljZSh4cywgbGltaXQpCisgICAgICAgICAgICB5cyA9IGl0ZXJ0b29scy5pc2xpY2UoeXMsIGxpbWl0KQorICAgICAgICBzZW50aW5lbCA9IG9iamVjdCgpCisgICAgICAgIHBhaXJzID0gaXRlcnRvb2xzLml6aXBfbG9uZ2VzdCh4cywgeXMsIGZpbGx2YWx1ZT1zZW50aW5lbCkKKyAgICAgICAgZm9yIGksICh4LCB5KSBpbiBlbnVtZXJhdGUocGFpcnMpOgorICAgICAgICAgICAgaWYgeCA9PSB5OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIHggPT0gc2VudGluZWw6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd7fTogaXRlcmF0b3IgZW5kZWQgdW5leHBlY3RlZGx5ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F0IHBvc2l0aW9uIHt9OyBleHBlY3RlZCB7fScuZm9ybWF0KHRlc3RfaWQsIGksIHkpKQorICAgICAgICAgICAgZWxpZiB5ID09IHNlbnRpbmVsOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne306IHVuZXhwZWN0ZWQgZXhjZXNzIGVsZW1lbnQge30gYXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb24ge30nLmZvcm1hdCh0ZXN0X2lkLCB4LCBpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd7fTogd3JvbmcgZWxlbWVudCBhdCBwb3NpdGlvbiB7fTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZCB7fSwgZ290IHt9Jy5mb3JtYXQodGVzdF9pZCwgaSwgeSwgeCkpCisKKyAgICBkZWYgYXNzZXJ0X3hyYW5nZXNfZXF1aXZhbGVudChzZWxmLCB4LCB5KToKKyAgICAgICAgIyBDaGVjayB0aGF0IHR3byB4cmFuZ2Ugb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgaW4gdGhlIHNlbnNlIG9mIHRoZQorICAgICAgICAjIGFzc29jaWF0ZWQgc2VxdWVuY2VzIGJlaW5nIHRoZSBzYW1lLiAgV2Ugd2FudCB0byB1c2UgdGhpcyBmb3IgbGFyZ2UKKyAgICAgICAgIyB4cmFuZ2Ugb2JqZWN0cywgc28gaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRvIGxpc3RzIGFuZCBjb21wYXJpbmcKKyAgICAgICAgIyBkaXJlY3RseSB3ZSBkbyBhIG51bWJlciBvZiBpbmRpcmVjdCBjaGVja3MuCisgICAgICAgIGlmIGxlbih4KSAhPSBsZW4oeSk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9IGFuZCB7fSBoYXZlIGRpZmZlcmVudCAnCisgICAgICAgICAgICAgICAgICAgICAgJ2xlbmd0aHM6IHt9IGFuZCB7fSAnLmZvcm1hdCh4LCB5LCBsZW4oeCksIGxlbih5KSkpCisgICAgICAgIGlmIGxlbih4KSA+PSAxOgorICAgICAgICAgICAgaWYgeFswXSAhPSB5WzBdOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne30gYW5kIHt9IGhhdmUgZGlmZmVyZW50IGluaXRpYWwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxlbWVudHM6IHt9IGFuZCB7fSAnLmZvcm1hdCh4LCB5LCB4WzBdLCB5WzBdKSkKKyAgICAgICAgICAgIGlmIHhbLTFdICE9IHlbLTFdOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne30gYW5kIHt9IGhhdmUgZGlmZmVyZW50IGZpbmFsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnRzOiB7fSBhbmQge30gJy5mb3JtYXQoeCwgeSwgeFstMV0sIHlbLTFdKSkKKyAgICAgICAgaWYgbGVuKHgpID49IDI6CisgICAgICAgICAgICB4X3N0ZXAgPSB4WzFdIC0geFswXQorICAgICAgICAgICAgeV9zdGVwID0geVsxXSAtIHlbMF0KKyAgICAgICAgICAgIGlmIHhfc3RlcCAhPSB5X3N0ZXA6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd7fSBhbmQge30gaGF2ZSBkaWZmZXJlbnQgc3RlcDogJworICAgICAgICAgICAgICAgICAgICAgICAgICAne30gYW5kIHt9ICcuZm9ybWF0KHgsIHksIHhfc3RlcCwgeV9zdGVwKSkKKworICAgIGRlZiB0ZXN0X3hyYW5nZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhyYW5nZSgzKSksIFswLCAxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhyYW5nZSgxLCA1KSksIFsxLCAyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhyYW5nZSgwKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeHJhbmdlKC0zKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeHJhbmdlKDEsIDEwLCAzKSksIFsxLCA0LCA3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhyYW5nZSg1LCAtNSwgLTMpKSwgWzUsIDIsIC0xLCAtNF0pCisKKyAgICAgICAgYSA9IDEwCisgICAgICAgIGIgPSAxMDAKKyAgICAgICAgYyA9IDUwCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhyYW5nZShhLCBhKzIpKSwgW2EsIGErMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4cmFuZ2UoYSsyLCBhLCAtMUwpKSwgW2ErMiwgYSsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhyYW5nZShhKzQsIGEsIC0yKSksIFthKzQsIGErMl0pCisKKyAgICAgICAgc2VxID0gbGlzdCh4cmFuZ2UoYSwgYiwgYykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VxKSwgMikKKworICAgICAgICBzZXEgPSBsaXN0KHhyYW5nZShiLCBhLCAtYykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGEsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VxKSwgMikKKworICAgICAgICBzZXEgPSBsaXN0KHhyYW5nZSgtYSwgLWIsIC1jKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigtYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC1iLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4cmFuZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeHJhbmdlLCAxLCAyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB4cmFuZ2UsIDEsIDIsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgeHJhbmdlLCAxMCoqMTAwLCAxMCoqMTAxLCAxMCoqMTAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeHJhbmdlLCAwLCAic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeHJhbmdlLCAwLCA0MiwgInNwYW0iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHhyYW5nZSgwLCBzeXMubWF4aW50LCBzeXMubWF4aW50LTEpKSwgMikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB4cmFuZ2UsIC1zeXMubWF4aW50LCBzeXMubWF4aW50KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB4cmFuZ2UsIDAsIDIqc3lzLm1heGludCkKKworICAgICAgICByID0geHJhbmdlKC1zeXMubWF4aW50LCBzeXMubWF4aW50LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyKSwgc3lzLm1heGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgeHJhbmdlLCAtc3lzLm1heGludC0xLCBzeXMubWF4aW50LCAyKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIHRlc3RjYXNlcyA9IFsoMTMsKSwgKDAsIDExKSwgKC0yMiwgMTApLCAoMjAsIDMsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICgxMywgMjEsIDMpLCAoLTIsIDIsIDIpXQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciB0IGluIHRlc3RjYXNlczoKKyAgICAgICAgICAgICAgICByID0geHJhbmdlKCp0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHIsIHByb3RvKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChyKSkKKworICAgICAgICBNID0gbWluKHN5cy5tYXhpbnQsIHN5cy5tYXhzaXplKQorICAgICAgICBsYXJnZV90ZXN0Y2FzZXMgPSB0ZXN0Y2FzZXMgKyBbCisgICAgICAgICAgICAoMCwgTSwgMSksCisgICAgICAgICAgICAoTSwgMCwgLTEpLAorICAgICAgICAgICAgKDAsIE0sIE0gLSAxKSwKKyAgICAgICAgICAgIChNIC8vIDIsIE0sIDEpLAorICAgICAgICAgICAgKDAsIC1NLCAtMSksCisgICAgICAgICAgICAoMCwgLU0sIDEgLSBNKSwKKyAgICAgICAgICAgICgtTSwgTSwgMiksCisgICAgICAgICAgICAoLU0sIE0sIDEwMjQpLAorICAgICAgICAgICAgKC1NLCBNLCAxMDU4NSksCisgICAgICAgICAgICAoTSwgLU0sIC0yKSwKKyAgICAgICAgICAgIChNLCAtTSwgLTEwMjQpLAorICAgICAgICAgICAgKE0sIC1NLCAtMTA1ODUpLAorICAgICAgICAgICAgXQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciB0IGluIGxhcmdlX3Rlc3RjYXNlczoKKyAgICAgICAgICAgICAgICByID0geHJhbmdlKCp0KQorICAgICAgICAgICAgICAgIHJfb3V0ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhyLCBwcm90bykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfeHJhbmdlc19lcXVpdmFsZW50KHJfb3V0LCByKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlcHIgb2YgYW4geHJhbmdlIGlzIGEgdmFsaWQgcmVwcmVzZW50YXRpb24KKyAgICAgICAgIyBvZiB0aGF0IHhyYW5nZS4KKworICAgICAgICAjIFZhbGlkIHhyYW5nZXMgaGF2ZSBhdCBtb3N0IG1pbihzeXMubWF4aW50LCBzeXMubWF4c2l6ZSkgZWxlbWVudHMuCisgICAgICAgIE0gPSBtaW4oc3lzLm1heGludCwgc3lzLm1heHNpemUpCisKKyAgICAgICAgdGVzdGNhc2VzID0gWworICAgICAgICAgICAgKDEzLCksCisgICAgICAgICAgICAoMCwgMTEpLAorICAgICAgICAgICAgKC0yMiwgMTApLAorICAgICAgICAgICAgKDIwLCAzLCAtMSksCisgICAgICAgICAgICAoMTMsIDIxLCAzKSwKKyAgICAgICAgICAgICgtMiwgMiwgMiksCisgICAgICAgICAgICAoMCwgTSwgMSksCisgICAgICAgICAgICAoTSwgMCwgLTEpLAorICAgICAgICAgICAgKDAsIE0sIE0gLSAxKSwKKyAgICAgICAgICAgIChNIC8vIDIsIE0sIDEpLAorICAgICAgICAgICAgKDAsIC1NLCAtMSksCisgICAgICAgICAgICAoMCwgLU0sIDEgLSBNKSwKKyAgICAgICAgICAgICgtTSwgTSwgMiksCisgICAgICAgICAgICAoLU0sIE0sIDEwMjQpLAorICAgICAgICAgICAgKC1NLCBNLCAxMDU4NSksCisgICAgICAgICAgICAoTSwgLU0sIC0yKSwKKyAgICAgICAgICAgIChNLCAtTSwgLTEwMjQpLAorICAgICAgICAgICAgKE0sIC1NLCAtMTA1ODUpLAorICAgICAgICAgICAgXQorICAgICAgICBmb3IgdCBpbiB0ZXN0Y2FzZXM6CisgICAgICAgICAgICByID0geHJhbmdlKCp0KQorICAgICAgICAgICAgcl9vdXQgPSBldmFsKHJlcHIocikpCisgICAgICAgICAgICBzZWxmLmFzc2VydF94cmFuZ2VzX2VxdWl2YWxlbnQociwgcl9vdXQpCisKKyAgICBkZWYgdGVzdF9yYW5nZV9pdGVyYXRvcnMoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlIDcyOTgKKyAgICAgICAgbGltaXRzID0gW2Jhc2UgKyBqaWdnbGUKKyAgICAgICAgICAgICAgICAgIGZvciBNIGluICgyKiozMiwgMioqNjQpCisgICAgICAgICAgICAgICAgICBmb3IgYmFzZSBpbiAoLU0sIC1NLy8yLCAwLCBNLy8yLCBNKQorICAgICAgICAgICAgICAgICAgZm9yIGppZ2dsZSBpbiAoLTIsIC0xLCAwLCAxLCAyKV0KKyAgICAgICAgdGVzdF9yYW5nZXMgPSBbKHN0YXJ0LCBlbmQsIHN0ZXApCisgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdGFydCBpbiBsaW1pdHMKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVuZCBpbiBsaW1pdHMKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN0ZXAgaW4gKC0yKio2MywgLTIqKjMxLCAtMiwgLTEsIDEsIDIpXQorCisgICAgICAgIGZvciBzdGFydCwgZW5kLCBzdGVwIGluIHRlc3RfcmFuZ2VzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGl0ZXIxID0geHJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGl0ZXIyID0gcHlyYW5nZShzdGFydCwgZW5kLCBzdGVwKQorICAgICAgICAgICAgICAgIHRlc3RfaWQgPSAieHJhbmdlKHt9LCB7fSwge30pIi5mb3JtYXQoc3RhcnQsIGVuZCwgc3RlcCkKKyAgICAgICAgICAgICAgICAjIGNoZWNrIGZpcnN0IDEwMCBlbnRyaWVzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXRlcmF0b3JzX2VxdWFsKGl0ZXIxLCBpdGVyMiwgdGVzdF9pZCwgbGltaXQ9MTAwKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXRlcjEgPSByZXZlcnNlZCh4cmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCkpCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGl0ZXIyID0gcHlyYW5nZV9yZXZlcnNlZChzdGFydCwgZW5kLCBzdGVwKQorICAgICAgICAgICAgICAgIHRlc3RfaWQgPSAicmV2ZXJzZWQoeHJhbmdlKHt9LCB7fSwge30pKSIuZm9ybWF0KHN0YXJ0LCBlbmQsIHN0ZXApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXRlcmF0b3JzX2VxdWFsKGl0ZXIxLCBpdGVyMiwgdGVzdF9pZCwgbGltaXQ9MTAwKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoWHJhbmdlVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzYTI4YgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKQEAgLTAsMCArMSwxNTM4IEBACisjIFdlIGNhbiB0ZXN0IHBhcnQgb2YgdGhlIG1vZHVsZSB3aXRob3V0IHpsaWIuCit0cnk6CisgICAgaW1wb3J0IHpsaWIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB6bGliID0gTm9uZQorCitpbXBvcnQgb3MKK2ltcG9ydCBpbworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB6aXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdGVtcGZpbGUgaW1wb3J0IFRlbXBvcmFyeUZpbGUKK2Zyb20gcmFuZG9tIGltcG9ydCByYW5kaW50LCByYW5kb20KK2Zyb20gdW5pdHRlc3QgaW1wb3J0IHNraXBVbmxlc3MKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBURVNURk5fVU5JQ09ERSwgVEVTVEZOX0VOQ09ESU5HLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fdW5pdHRlc3QsIGZpbmRmaWxlLCB1bmxpbmsKK3RyeToKKyAgICBURVNURk5fVU5JQ09ERS5lbmNvZGUoVEVTVEZOX0VOQ09ESU5HKQorZXhjZXB0IChVbmljb2RlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgIyBFaXRoZXIgdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nIGlzIE5vbmUsIG9yIHRoZSBmaWxlIG5hbWUKKyAgICAjIGNhbm5vdCBiZSBlbmNvZGVkIGluIHRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZy4KKyAgICBURVNURk5fVU5JQ09ERSA9IE5vbmUKKworVEVTVEZOMiA9IFRFU1RGTiArICIyIgorVEVTVEZORElSID0gVEVTVEZOICsgImQiCitGSVhFRFRFU1RfU0laRSA9IDEwMDAKKworU01BTExfVEVTVF9EQVRBID0gWygnX3ppcHRlc3QxJywgJzFxMnczZTRyNXQnKSwKKyAgICAgICAgICAgICAgICAgICAoJ3ppcHRlc3QyZGlyL196aXB0ZXN0MicsICdxYXdzZWRyZnRnJyksCisgICAgICAgICAgICAgICAgICAgKCd6aXB0ZXN0MmRpci96aXB0ZXN0M2Rpci9femlwdGVzdDMnLCAnYXpzeGRjZnZnYicpLAorICAgICAgICAgICAgICAgICAgICgnemlwdGVzdDJkaXIvemlwdGVzdDNkaXIvemlwdGVzdDRkaXIvX3ppcHRlc3QzJywgJzZ5N3U4aTlvMHAnKV0KKworCitjbGFzcyBUZXN0c1dpdGhTb3VyY2VGaWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubGluZV9nZW4gPSBbIlppcGZpbGUgdGVzdCBsaW5lICVkLiByYW5kb20gZmxvYXQ6ICVmIiAlIChpLCByYW5kb20oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoRklYRURURVNUX1NJWkUpXQorICAgICAgICBzZWxmLmRhdGEgPSAnXG4nLmpvaW4oc2VsZi5saW5lX2dlbikgKyAnXG4nCisKKyAgICAgICAgIyBNYWtlIGEgc291cmNlIGZpbGUgd2l0aCBzb21lIGxpbmVzCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQorCisgICAgZGVmIG1ha2VfdGVzdF9hcmNoaXZlKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiYW5vdGhlci5uYW1lIikKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgemlwX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJhbm90aGVyLm5hbWUiKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJzdHJmaWxlIiksIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgIyBQcmludCB0aGUgWklQIGRpcmVjdG9yeQorICAgICAgICAgICAgZnAgPSBTdHJpbmdJTygpCisgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGZwCisgICAgICAgICAgICAgICAgemlwZnAucHJpbnRkaXIoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CisKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGZwLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGxpbmVzID0gZGlyZWN0b3J5LnNwbGl0bGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA0KSAjIE51bWJlciBvZiBmaWxlcyArIGhlYWRlcgorCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdGaWxlIE5hbWUnLCBsaW5lc1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ01vZGlmaWVkJywgbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdTaXplJywgbGluZXNbMF0pCisKKyAgICAgICAgICAgIGZuLCBkYXRlLCB0aW1lXywgc2l6ZSA9IGxpbmVzWzFdLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm4sICdhbm90aGVyLm5hbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuc3RycHRpbWUoZGF0ZSwgJyVZLSVtLSVkJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS5zdHJwdGltZSh0aW1lXywgJyVIOiVNOiVTJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIHN0cihsZW4oc2VsZi5kYXRhKSkpCisKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIG5hbWVsaXN0CisgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5hbWVzKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oVEVTVEZOLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImFub3RoZXIubmFtZSIsIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RyZmlsZSIsIG5hbWVzKQorCisgICAgICAgICAgICAjIENoZWNrIGluZm9saXN0CisgICAgICAgICAgICBpbmZvcyA9IHppcGZwLmluZm9saXN0KCkKKyAgICAgICAgICAgIG5hbWVzID0gW2kuZmlsZW5hbWUgZm9yIGkgaW4gaW5mb3NdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJhbm90aGVyLm5hbWUiLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmZpbGUiLCBuYW1lcykKKyAgICAgICAgICAgIGZvciBpIGluIGluZm9zOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQorCisgICAgICAgICAgICAjIGNoZWNrIGdldGluZm8KKyAgICAgICAgICAgIGZvciBubSBpbiAoVEVTVEZOLCAiYW5vdGhlci5uYW1lIiwgInN0cmZpbGUiKToKKyAgICAgICAgICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbyhubSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uZmlsZW5hbWUsIG5tKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQorCisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGVzdHppcCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgemlwZnAudGVzdHppcCgpCisKKyAgICBkZWYgdGVzdF9zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgemlwX29wZW5fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGRhdGExID0gW10KKyAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4pIGFzIHppcG9wZW4xOgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQoMjU2KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKKworICAgICAgICAgICAgemlwZGF0YTIgPSBbXQorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKCJhbm90aGVyLm5hbWUiKSBhcyB6aXBvcGVuMjoKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMi5yZWFkKDI1NikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHppcGRhdGEyLmFwcGVuZChyZWFkX2RhdGEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbih6aXBkYXRhMSksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbih6aXBkYXRhMiksIHNlbGYuZGF0YSkKKworICAgIGRlZiB0ZXN0X29wZW5fc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF9vcGVuX3ZpYV96aXBfaW5mbyhzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJuYW1lIiwgImZvbyIpCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigibmFtZSIsICJiYXIiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBpbmZvcyA9IHppcGZwLmluZm9saXN0KCkKKyAgICAgICAgICAgIGRhdGEgPSAiIgorICAgICAgICAgICAgZm9yIGluZm8gaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGluZm8pIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhID09ICJmb29iYXIiIG9yIGRhdGEgPT0gImJhcmZvbyIpCisgICAgICAgICAgICBkYXRhID0gIiIKKyAgICAgICAgICAgIGZvciBpbmZvIGluIGluZm9zOgorICAgICAgICAgICAgICAgIGRhdGEgKz0gemlwZnAucmVhZChpbmZvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEgPT0gImZvb2JhciIgb3IgZGF0YSA9PSAiYmFyZm9vIikKKworICAgIGRlZiB6aXBfcmFuZG9tX29wZW5fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGRhdGExID0gW10KKyAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4pIGFzIHppcG9wZW4xOgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQocmFuZGludCgxLCAxMDI0KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbih6aXBkYXRhMSksIHNlbGYuZGF0YSkKKworICAgIGRlZiB0ZXN0X3JhbmRvbV9vcGVuX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yYW5kb21fb3Blbl90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIGRlZiB0ZXN0X3VuaXZlcmFsX3JlYWRhaGVhZHMoc2VsZik6CisgICAgICAgIGYgPSBTdHJpbmdJTygpCisKKyAgICAgICAgZGF0YSA9ICdhXHJcbicgKiAxNiAqIDEwMjQKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgJ3cnLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoVEVTVEZOLCBkYXRhKQorCisgICAgICAgIGRhdGEyID0gJycKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgJ3InKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4sICdyVScpIGFzIHppcG9wZW46CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gemlwb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YTIgKz0gbGluZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGF0YTIucmVwbGFjZSgnXG4nLCAnXHJcbicpKQorCisgICAgZGVmIHppcF9yZWFkbGluZV9yZWFkX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4pIGFzIHppcG9wZW46CisgICAgICAgICAgICAgICAgZGF0YSA9ICcnCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcmVhZCA9IHppcG9wZW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gcmVhZAorCisgICAgICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWQoMTAwKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gcmVhZAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5kYXRhKQorCisgICAgZGVmIHppcF9yZWFkbGluZV90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oVEVTVEZOKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZV9nZW46CisgICAgICAgICAgICAgICAgICAgIGxpbmVkYXRhID0gemlwb3Blbi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyAnXG4nKQorCisgICAgZGVmIHppcF9yZWFkbGluZXNfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKFRFU1RGTikgYXMgem86CisgICAgICAgICAgICAgICAgemlwbGluZXMgPSB6by5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArICdcbicpCisKKyAgICBkZWYgemlwX2l0ZXJsaW5lc190ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwZnAub3BlbihURVNURk4pKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfcmVhZF9zdG9yZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzc2MTA6IGNhbGxzIHRvIHJlYWRsaW5lKCkgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyB0byByZWFkKCkuCisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmVhZGxpbmVfcmVhZF90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZV90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmVhZGxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgZGVmIHRlc3RfaXRlcmxpbmVzX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9pdGVybGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9vcGVuX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yYW5kb21fb3Blbl9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yYW5kb21fb3Blbl90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzc2MTA6IGNhbGxzIHRvIHJlYWRsaW5lKCkgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyB0byByZWFkKCkuCisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmVhZGxpbmVfcmVhZF90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2l0ZXJsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9pdGVybGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9sb3dfY29tcHJlc3Npb24oc2VsZik6CisgICAgICAgICIiIkNoZWNrIGZvciBjYXNlcyB3aGVyZSBjb21wcmVzc2VkIGRhdGEgaXMgbGFyZ2VyIHRoYW4gb3JpZ2luYWwuIiIiCisgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJzdHJmaWxlIiwgJzEyJykKKworICAgICAgICAjIEdldCBhbiBvcGVuIG9iamVjdCBmb3Igc3RyZmlsZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHdpdGggemlwZnAub3Blbigic3RyZmlsZSIpIGFzIG9wZW5vYmo6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVub2JqLnJlYWQoMSksICcxJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW5vYmoucmVhZCgxKSwgJzInKQorCisgICAgZGVmIHRlc3RfYWJzb2x1dGVfYXJjbmFtZXMoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgIi9hYnNvbHV0ZSIpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCisKKyAgICBkZWYgdGVzdF9hcHBlbmRfdG9femlwX2ZpbGUoc2VsZik6CisgICAgICAgICIiIlRlc3QgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nIHppcGZpbGUuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJhIiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJzdHJmaWxlIiwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbVEVTVEZOLCAic3RyZmlsZSJdKQorCisgICAgZGVmIHRlc3RfYXBwZW5kX3RvX25vbl96aXBfZmlsZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBhcHBlbmRpbmcgdG8gYW4gZXhpc3RpbmcgZmlsZSB0aGF0IGlzIG5vdCBhIHppcGZpbGUuIiIiCisgICAgICAgICMgTk9URTogdGhpcyB0ZXN0IGZhaWxzIGlmIGxlbihkKSA8IDIyIGJlY2F1c2Ugb2YgdGhlIGZpcnN0CisgICAgICAgICMgbGluZSAiZnBpbi5zZWVrKC0yMiwgMikiIGluIF9FbmRSZWNEYXRhCisgICAgICAgIGRhdGEgPSAnSSBhbSBub3QgYSBaaXBGaWxlIScqMTAKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgImEiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCisKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICdyYicpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsobGVuKGRhdGEpKQorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLm5hbWVsaXN0KCksIFtURVNURk5dKQorCisgICAgZGVmIHRlc3RfaWdub3Jlc19uZXdsaW5lX2F0X2VuZChzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCisgICAgICAgIHdpdGggb3BlbihURVNURk4yLCAnYScpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJcclxuXDAwXDAwXDAwIikKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh6aXBmcCwgemlwZmlsZS5aaXBGaWxlKQorCisgICAgZGVmIHRlc3RfaWdub3Jlc19zdHVmZl9hcHBlbmRlZF9wYXN0X2NvbW1lbnRzKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC5jb21tZW50ID0gYiJ0aGlzIGlzIGEgY29tbWVudCIKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMiwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiYWJjZGVmXHJcbiIpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoemlwZnAsIHppcGZpbGUuWmlwRmlsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAuY29tbWVudCwgYiJ0aGlzIGlzIGEgY29tbWVudCIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9kZWZhdWx0X25hbWUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgY2FsbGluZyBaaXBGaWxlLndyaXRlIHdpdGhvdXQgYXJjbmFtZSBzcGVjaWZpZWQKKyAgICAgICAgcHJvZHVjZXMgdGhlIGV4cGVjdGVkIHJlc3VsdC4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZChURVNURk4pLCBvcGVuKFRFU1RGTikucmVhZCgpKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3Blcl9maWxlX2NvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGZpbGVzIHdpdGhpbiBhIFppcCBhcmNoaXZlIGNhbiBoYXZlIGRpZmZlcmVudAorICAgICAgICBjb21wcmVzc2lvbiBvcHRpb25zLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAnc3RvcmVtZScsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgJ2RlZmxhdGVtZScsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgICAgICAgICAgc2luZm8gPSB6aXBmcC5nZXRpbmZvKCdzdG9yZW1lJykKKyAgICAgICAgICAgIGRpbmZvID0gemlwZnAuZ2V0aW5mbygnZGVmbGF0ZW1lJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaW5mby5jb21wcmVzc190eXBlLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3JlYWRvbmx5KHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRyeWluZyB0byBjYWxsIHdyaXRlKCkgb24gYSByZWFkb25seSBaaXBGaWxlIG9iamVjdAorICAgICAgICByYWlzZXMgYSBSdW50aW1lRXJyb3IuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJzb21lZmlsZS50eHQiLCAiYm9ndXMiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZnAud3JpdGUsIFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3Qoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZwYXRoLCBmZGF0YSkKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgd3JpdHRlbmZpbGUgPSB6aXBmcC5leHRyYWN0KGZwYXRoKQorCisgICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgaXQgd2FzIHdyaXR0ZW4gdG8gdGhlIHJpZ2h0IHBsYWNlCisgICAgICAgICAgICAgICAgY29ycmVjdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoKQorICAgICAgICAgICAgICAgIGNvcnJlY3RmaWxlID0gb3MucGF0aC5ub3JtcGF0aChjb3JyZWN0ZmlsZSkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdHRlbmZpbGUsIGNvcnJlY3RmaWxlKQorCisgICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgY29ycmVjdCBkYXRhIGlzIGluIGNvcnJlY3QgZmlsZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRhdGEsIG9wZW4od3JpdHRlbmZpbGUsICJyYiIpLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUod3JpdHRlbmZpbGUpCisKKyAgICAgICAgIyByZW1vdmUgdGhlIHRlc3QgZmlsZSBzdWJkaXJlY3RvcmllcworICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2FsbChzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoZnBhdGgsIGZkYXRhKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC5leHRyYWN0YWxsKCkKKyAgICAgICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgorICAgICAgICAgICAgICAgIG91dGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZGF0YSwgb3BlbihvdXRmaWxlLCAicmIiKS5yZWFkKCkpCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG91dGZpbGUpCisKKyAgICAgICAgIyByZW1vdmUgdGhlIHRlc3QgZmlsZSBzdWJkaXJlY3RvcmllcworICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCisKKyAgICBkZWYgY2hlY2tfZmlsZShzZWxmLCBmaWxlbmFtZSwgY29udGVudCk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSkpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGNvbnRlbnQpCisKKyAgICBAc2tpcFVubGVzcyhURVNURk5fVU5JQ09ERSwgIk5vIFVuaWNvZGUgZmlsZXN5c3RlbSBzZW1hbnRpY3Mgb24gdGhpcyBwbGF0Zm9ybS4iKQorICAgIGRlZiB0ZXN0X2V4dHJhY3RfdW5pY29kZV9maWxlbmFtZXMoc2VsZik6CisgICAgICAgIGZuYW1lcyA9IFt1J2Zvby50eHQnLCBvcy5wYXRoLmJhc2VuYW1lKFRFU1RGTl9VTklDT0RFKV0KKyAgICAgICAgY29udGVudCA9ICdUZXN0IGZvciB1bmljb2RlIGZpbGVuYW1lJworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZm5hbWUgaW4gZm5hbWVzOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZuYW1lLCBjb250ZW50KQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZm5hbWUgaW4gZm5hbWVzOgorICAgICAgICAgICAgICAgIHdyaXR0ZW5maWxlID0gemlwZnAuZXh0cmFjdChmbmFtZSkKKworICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIGl0IHdhcyB3cml0dGVuIHRvIHRoZSByaWdodCBwbGFjZQorICAgICAgICAgICAgICAgIGNvcnJlY3RmaWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmbmFtZSkKKyAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoY29ycmVjdGZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0dGVuZmlsZSwgY29ycmVjdGZpbGUpCisKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUod3JpdHRlbmZpbGUsIGNvbnRlbnQpCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHdyaXR0ZW5maWxlKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9oYWNrZXJzX2FyY25hbWVzKHNlbGYpOgorICAgICAgICBoYWNrbmFtZXMgPSBbCisgICAgICAgICAgICAoJy4uL2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKCdmb28vLi4vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICgnZm9vLy4uLy4uL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAoJ2Zvby9iYXIvLi4nLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKCcuLy4uL2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKCcvZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAoJy9mb28vLi4vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICgnL2Zvby8uLi8uLi9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICBdCisgICAgICAgIGlmIG9zLnBhdGguc2VwID09ICdcXCc6CisgICAgICAgICAgICBoYWNrbmFtZXMuZXh0ZW5kKFsKKyAgICAgICAgICAgICAgICAocicuLlxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocicuLlwvZm9vXC9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJ2Zvby9cLi5cL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInZm9vXC8uLi9cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocidDOmZvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJ0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJ0M6Ly9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocidDOlxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocicvL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocidcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocicvLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInXFxcY29ua3lcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJy8vY29ua3kvL21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocidcXGNvbmt5XFxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInLy8/L0M6L2Zvby9iYXInLCAnXy9DXy9mb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInXFw/XEM6XGZvb1xiYXInLCAnXy9DXy9mb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInQzovLi4vQzovZm9vL2JhcicsICdDXy9mb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInYTpiXGM8ZD5lfGYiZz9oKmknLCAnYi9jX2RfZV9mX2dfaF9pJyksCisgICAgICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28vYmEuLnInKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIGVsc2U6ICAjIFVuaXgKKyAgICAgICAgICAgIGhhY2tuYW1lcy5leHRlbmQoWworICAgICAgICAgICAgICAgICgnLy9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAoJy4uLy4uL2Zvby4uLy4uL2JhLi5yJywgJ2Zvby4uL2JhLi5yJyksCisgICAgICAgICAgICAgICAgKHInZm9vLy4uXGJhcicsIHInZm9vLy4uXGJhcicpLAorICAgICAgICAgICAgXSkKKworICAgICAgICBmb3IgYXJjbmFtZSwgZml4ZWRuYW1lIGluIGhhY2tuYW1lczoKKyAgICAgICAgICAgIGNvbnRlbnQgPSBiJ2Zvb2JhcicgKyBhcmNuYW1lLmVuY29kZSgpCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAndycsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICAgICAgemluZm8gPSB6aXBmaWxlLlppcEluZm8oKQorICAgICAgICAgICAgICAgICMgcHJlc2VydmUgYmFja3NsYXNoZXMKKyAgICAgICAgICAgICAgICB6aW5mby5maWxlbmFtZSA9IGFyY25hbWUKKyAgICAgICAgICAgICAgICB6aW5mby5leHRlcm5hbF9hdHRyID0gMG82MDAgPDwgMTYKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cih6aW5mbywgY29udGVudCkKKworICAgICAgICAgICAgYXJjbmFtZSA9IGFyY25hbWUucmVwbGFjZShvcy5zZXAsICIvIikKKyAgICAgICAgICAgIHRhcmdldHBhdGggPSBvcy5wYXRoLmpvaW4oJ3RhcmdldCcsICdzdWJkaXInLCAnc3Vic3ViJykKKyAgICAgICAgICAgIGNvcnJlY3RmaWxlID0gb3MucGF0aC5qb2luKHRhcmdldHBhdGgsICpmaXhlZG5hbWUuc3BsaXQoJy8nKSkKKworICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICB3cml0dGVuZmlsZSA9IHppcGZwLmV4dHJhY3QoYXJjbmFtZSwgdGFyZ2V0cGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW5maWxlLCBjb3JyZWN0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iZXh0cmFjdCAlciIgJSBhcmNuYW1lKQorICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgndGFyZ2V0JykKKworICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICB6aXBmcC5leHRyYWN0YWxsKHRhcmdldHBhdGgpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoY29ycmVjdGZpbGUsIGNvbnRlbnQpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKCd0YXJnZXQnKQorCisgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgKmZpeGVkbmFtZS5zcGxpdCgnLycpKQorCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAncicpIGFzIHppcGZwOgorICAgICAgICAgICAgICAgIHdyaXR0ZW5maWxlID0gemlwZnAuZXh0cmFjdChhcmNuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdHRlbmZpbGUsIGNvcnJlY3RmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHRyYWN0ICVyIiAlIGFyY25hbWUpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoY29ycmVjdGZpbGUsIGNvbnRlbnQpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGZpeGVkbmFtZS5zcGxpdCgnLycpWzBdKQorCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAncicpIGFzIHppcGZwOgorICAgICAgICAgICAgICAgIHppcGZwLmV4dHJhY3RhbGwoKQorICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmaXhlZG5hbWUuc3BsaXQoJy8nKVswXSkKKworICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTjIpCisKKyAgICBkZWYgdGVzdF93cml0ZXN0cl9jb21wcmVzc2lvbihzZWxmKToKKyAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciKQorICAgICAgICB6aXBmcC53cml0ZXN0cigiYS50eHQiLCAiaGVsbG8gd29ybGQiLCBjb21wcmVzc190eXBlPXppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgaWYgemxpYjoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJiLnR4dCIsICJoZWxsbyB3b3JsZCIsIGNvbXByZXNzX3R5cGU9emlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICAgICAgaW5mbyA9IHppcGZwLmdldGluZm8oJ2EudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgICAgICBpZiB6bGliOgorICAgICAgICAgICAgaW5mbyA9IHppcGZwLmdldGluZm8oJ2IudHh0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5jb21wcmVzc190eXBlLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworCisgICAgZGVmIHppcF90ZXN0X3dyaXRlc3RyX3Blcm1pc3Npb25zKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3cml0ZXN0ciBjcmVhdGVzIGZpbGVzIHdpdGggbW9kZSAwNjAwLAorICAgICAgICAjIHdoZW4gaXQgaXMgcGFzc2VkIGEgbmFtZSByYXRoZXIgdGhhbiBhIFppcEluZm8gaW5zdGFuY2UuCisKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppbmZvID0gemlwZnAuZ2V0aW5mbygnc3RyZmlsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppbmZvLmV4dGVybmFsX2F0dHIsIDA2MDAgPDwgMTYpCisKKyAgICBkZWYgdGVzdF93cml0ZXN0cl9wZXJtaXNzaW9ucyhzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF90ZXN0X3dyaXRlc3RyX3Blcm1pc3Npb25zKGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSB6aXBmaWxlIGlzIGNsb3NlZCBhZnRlciB0aGUgJ3dpdGgnIGJsb2NrLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoZnBhdGgsIGZkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcC5mcCBpcyBub3QgTm9uZSwgJ3ppcGZwIGlzIG5vdCBvcGVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZwLmZwIGlzIE5vbmUsICd6aXBmcCBpcyBub3QgY2xvc2VkJykKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZwLmZwIGlzIG5vdCBOb25lLCAnemlwZnAgaXMgbm90IG9wZW4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZnAuZnAgaXMgTm9uZSwgJ3ppcGZwIGlzIG5vdCBjbG9zZWQnKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSB6aXBmaWxlIGlzIGNsb3NlZCBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIHRoZQorICAgICAgICAnd2l0aCcgYmxvY2suIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cihmcGF0aCwgZmRhdGEpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDI6CisgICAgICAgICAgICAgICAgcmFpc2UgemlwZmlsZS5CYWRaaXBmaWxlKCkKKyAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcDIuZnAgaXMgTm9uZSwgJ3ppcGZwIGlzIG5vdCBjbG9zZWQnKQorCisgICAgZGVmIHRlc3RfYWRkX2ZpbGVfYmVmb3JlXzE5ODAoc2VsZik6CisgICAgICAgICMgU2V0IGF0aW1lIGFuZCBtdGltZSB0byAxOTcwLTAxLTAxCisgICAgICAgIG9zLnV0aW1lKFRFU1RGTiwgKDAsIDApKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgemlwZnAud3JpdGUsIFRFU1RGTikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKKworY2xhc3MgVGVzdFppcDY0SW5TbWFsbEZpbGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZXNlIHRlc3RzIHRlc3QgdGhlIFpJUDY0IGZ1bmN0aW9uYWxpdHkgd2l0aG91dCB1c2luZyBsYXJnZSBmaWxlcywKKyAgICAjIHNlZSB0ZXN0X3ppcGZpbGU2NCBmb3IgcHJvcGVyIHRlc3RzLgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9saW1pdCA9IHppcGZpbGUuWklQNjRfTElNSVQKKyAgICAgICAgemlwZmlsZS5aSVA2NF9MSU1JVCA9IDUKKworICAgICAgICBsaW5lX2dlbiA9ICgiVGVzdCBvZiB6aXBmaWxlIGxpbmUgJWQuIiAlIGkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgRklYRURURVNUX1NJWkUpKQorICAgICAgICBzZWxmLmRhdGEgPSAnXG4nLmpvaW4obGluZV9nZW4pCisKKyAgICAgICAgIyBNYWtlIGEgc291cmNlIGZpbGUgd2l0aCBzb21lIGxpbmVzCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQorCisgICAgZGVmIGxhcmdlX2ZpbGVfZXhjZXB0aW9uX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGUsIFRFU1RGTiwgImFub3RoZXIubmFtZSIpCisKKyAgICBkZWYgbGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdDIoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIsICJhbm90aGVyLm5hbWUiLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgdGVzdF9sYXJnZV9maWxlX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLmxhcmdlX2ZpbGVfZXhjZXB0aW9uX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi5sYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0MihmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgemlwX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbiwgYWxsb3daaXA2ND1UcnVlKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgImFub3RoZXIubmFtZSIpCisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJzdHJmaWxlIiwgc2VsZi5kYXRhKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJhbm90aGVyLm5hbWUiKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJzdHJmaWxlIiksIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgIyBQcmludCB0aGUgWklQIGRpcmVjdG9yeQorICAgICAgICAgICAgZnAgPSBTdHJpbmdJTygpCisgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGZwCisgICAgICAgICAgICAgICAgemlwZnAucHJpbnRkaXIoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CisKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGZwLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGxpbmVzID0gZGlyZWN0b3J5LnNwbGl0bGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA0KSAjIE51bWJlciBvZiBmaWxlcyArIGhlYWRlcgorCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdGaWxlIE5hbWUnLCBsaW5lc1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ01vZGlmaWVkJywgbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdTaXplJywgbGluZXNbMF0pCisKKyAgICAgICAgICAgIGZuLCBkYXRlLCB0aW1lXywgc2l6ZSA9IGxpbmVzWzFdLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm4sICdhbm90aGVyLm5hbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuc3RycHRpbWUoZGF0ZSwgJyVZLSVtLSVkJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS5zdHJwdGltZSh0aW1lXywgJyVIOiVNOiVTJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIHN0cihsZW4oc2VsZi5kYXRhKSkpCisKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIG5hbWVsaXN0CisgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5hbWVzKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oVEVTVEZOLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImFub3RoZXIubmFtZSIsIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RyZmlsZSIsIG5hbWVzKQorCisgICAgICAgICAgICAjIENoZWNrIGluZm9saXN0CisgICAgICAgICAgICBpbmZvcyA9IHppcGZwLmluZm9saXN0KCkKKyAgICAgICAgICAgIG5hbWVzID0gW2kuZmlsZW5hbWUgZm9yIGkgaW4gaW5mb3NdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJhbm90aGVyLm5hbWUiLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmZpbGUiLCBuYW1lcykKKyAgICAgICAgICAgIGZvciBpIGluIGluZm9zOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQorCisgICAgICAgICAgICAjIGNoZWNrIGdldGluZm8KKyAgICAgICAgICAgIGZvciBubSBpbiAoVEVTVEZOLCAiYW5vdGhlci5uYW1lIiwgInN0cmZpbGUiKToKKyAgICAgICAgICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbyhubSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uZmlsZW5hbWUsIG5tKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQorCisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGVzdHppcCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgemlwZnAudGVzdHppcCgpCisKKyAgICBkZWYgdGVzdF9zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiB0ZXN0X2Fic29sdXRlX2FyY25hbWVzKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1UcnVlKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgIi9hYnNvbHV0ZSIpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHppcGZpbGUuWklQNjRfTElNSVQgPSBzZWxmLl9saW1pdAorICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICB1bmxpbmsoVEVTVEZOMikKKworCitjbGFzcyBQeVppcEZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfd3JpdGVfcHlmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuUHlaaXBGaWxlKFRlbXBvcmFyeUZpbGUoKSwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZuID0gX19maWxlX18KKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHljJykgb3IgZm4uZW5kc3dpdGgoJy5weW8nKToKKyAgICAgICAgICAgICAgICBmbiA9IGZuWzotMV0KKworICAgICAgICAgICAgemlwZnAud3JpdGVweShmbikKKworICAgICAgICAgICAgYm4gPSBvcy5wYXRoLmJhc2VuYW1lKGZuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihibiwgemlwZnAubmFtZWxpc3QoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibiArICdvJyBpbiB6aXBmcC5uYW1lbGlzdCgpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm4gKyAnYycgaW4gemlwZnAubmFtZWxpc3QoKSkKKworICAgICAgICB3aXRoIHppcGZpbGUuUHlaaXBGaWxlKFRlbXBvcmFyeUZpbGUoKSwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZuID0gX19maWxlX18KKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCgnLnB5YycsICcucHlvJykpOgorICAgICAgICAgICAgICAgIGZuID0gZm5bOi0xXQorCisgICAgICAgICAgICB6aXBmcC53cml0ZXB5KGZuLCAidGVzdHBhY2thZ2UiKQorCisgICAgICAgICAgICBibiA9ICIlcy8lcyIgJSAoInRlc3RwYWNrYWdlIiwgb3MucGF0aC5iYXNlbmFtZShmbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGJuLCB6aXBmcC5uYW1lbGlzdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJuICsgJ28nIGluIHppcGZwLm5hbWVsaXN0KCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibiArICdjJyBpbiB6aXBmcC5uYW1lbGlzdCgpKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcHl0aG9uX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGltcG9ydCBlbWFpbAorICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKGVtYWlsLl9fZmlsZV9fKQorCisgICAgICAgIHdpdGggemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyKQorCisgICAgICAgICAgICAjIENoZWNrIGZvciBhIGNvdXBsZSBvZiBtb2R1bGVzIGF0IGRpZmZlcmVudCBsZXZlbHMgb2YgdGhlCisgICAgICAgICAgICAjIGhpZXJhcmNoeQorICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2VtYWlsL19faW5pdF9fLnB5bycgaW4gbmFtZXMgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwvX19pbml0X18ucHljJyBpbiBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZW1haWwvbWltZS90ZXh0LnB5bycgaW4gbmFtZXMgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwvbWltZS90ZXh0LnB5YycgaW4gbmFtZXMpCisKKyAgICBkZWYgdGVzdF93cml0ZV9weXRob25fZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICBvcy5ta2RpcihURVNURk4yKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QxLnB5IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoInByaW50KDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MiAqIDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi50eHQiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgiYmxhIGJsYSBibGFcbiIpCisKKyAgICAgICAgICAgIHppcGZwICA9IHppcGZpbGUuUHlaaXBGaWxlKFRlbXBvcmFyeUZpbGUoKSwgInciKQorICAgICAgICAgICAgemlwZnAud3JpdGVweShURVNURk4yKQorCisgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbW9kMS5weWMnIGluIG5hbWVzIG9yICdtb2QxLnB5bycgaW4gbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ21vZDIucHljJyBpbiBuYW1lcyBvciAnbW9kMi5weW8nIGluIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbW9kMi50eHQnLCBuYW1lcykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9uX3B5ZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICBvcGVuKFRFU1RGTiwgJ3cnKS53cml0ZSgnbW9zdCBkZWZpbml0ZWx5IG5vdCBhIHB5dGhvbiBmaWxlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZnAud3JpdGVweSwgVEVTVEZOKQorICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKworCitjbGFzcyBPdGhlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB6aXBzX3dpdGhfYmFkX2NyYyA9IHsKKyAgICAgICAgemlwZmlsZS5aSVBfU1RPUkVEOiAoCisgICAgICAgICAgICBiJ1BLXDAwM1wwMDRcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6cicKKyAgICAgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCisgICAgICAgICAgICBiJ2lsZWhlbGxvLEF3b3JsZFAnCisgICAgICAgICAgICBiJ0tcMDAxXDAwMlwwMjRcMDAzXDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OicKKyAgICAgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKKyAgICAgICAgICAgIGInXDBcMFwwXDBcMFwwXDBcMjAwXDAwMVwwXDBcMFwwMDBhZmknCisgICAgICAgICAgICBiJ2xlUEtcMDA1XDAwNlwwXDBcMFwwXDAwMVwwXDAwMVwwMDAzXDAwMCcKKyAgICAgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJyksCisgICAgICAgIHppcGZpbGUuWklQX0RFRkxBVEVEOiAoCisgICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBufVx4MGM9RkEnCisgICAgICAgICAgICBiJ0tFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCisgICAgICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCisgICAgICAgICAgICBiJz1ceDEzXHgwMFBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDA4XHgwMG4nCisgICAgICAgICAgICBiJ31ceDBjPUZBS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDUnCisgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCisgICAgICAgICAgICBiJ1x4MDBhZmlsZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAnCisgICAgICAgICAgICBiJ1x4MDFceDAwM1x4MDBceDAwXHgwMDNceDAwXHgwMFx4MDBceDAwXHgwMCcpLAorICAgIH0KKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmlsZW5hbWVzKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICJ3IikgYXMgemY6CisgICAgICAgICAgICB6Zi53cml0ZXN0cih1ImZvby50eHQiLCAiVGVzdCBmb3IgdW5pY29kZSBmaWxlbmFtZSIpCisgICAgICAgICAgICB6Zi53cml0ZXN0cih1Ilx4ZjYudHh0IiwgIlRlc3QgZm9yIHVuaWNvZGUgZmlsZW5hbWUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHpmLmluZm9saXN0KClbMF0uZmlsZW5hbWUsIHVuaWNvZGUpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAiciIpIGFzIHpmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6Zi5maWxlbGlzdFswXS5maWxlbmFtZSwgImZvby50eHQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6Zi5maWxlbGlzdFsxXS5maWxlbmFtZSwgdSJceGY2LnR4dCIpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfbm9uX2V4aXN0ZW50X2ZpbGVfZm9yX2FwcGVuZChzZWxmKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICAgICAgZmlsZW5hbWUgPSAndGVzdGZpbGUudHh0JworICAgICAgICBjb250ZW50ID0gJ2hlbGxvLCB3b3JsZC4gdGhpcyBpcyBzb21lIGNvbnRlbnQuJworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ2EnKSBhcyB6ZjoKKyAgICAgICAgICAgICAgICB6Zi53cml0ZXN0cihmaWxlbmFtZSwgY29udGVudCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0NvdWxkIG5vdCBhcHBlbmQgZGF0YSB0byBhIG5vbi1leGlzdGVudCB6aXAgZmlsZS4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhURVNURk4pKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ3InKSBhcyB6ZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemYucmVhZChmaWxlbmFtZSksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9lcnJvbmVvdXNfZmlsZShzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIFppcEZpbGUgY29uc3RydWN0b3IgY2xvc2VzIHRoZSBmaWxlIG9iamVjdAorICAgICAgICAjIGl0IG9wZW5zIGlmIHRoZXJlJ3MgYW4gZXJyb3IgaW4gdGhlIGZpbGUuICBJZiBpdCBkb2Vzbid0LCB0aGUKKyAgICAgICAgIyB0cmFjZWJhY2sgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIFppcEZpbGUgb2JqZWN0IGFuZCwgaW5kaXJlY3RseSwKKyAgICAgICAgIyB0aGUgZmlsZSBvYmplY3QuCisgICAgICAgICMgT24gV2luZG93cywgdGhpcyBjYXVzZXMgdGhlIG9zLnVubGluaygpIGNhbGwgdG8gZmFpbCBiZWNhdXNlIHRoZQorICAgICAgICAjIHVuZGVybHlpbmcgZmlsZSBpcyBzdGlsbCBvcGVuLiAgVGhpcyBpcyBTRiBidWcgIzQxMjIxNC4KKyAgICAgICAgIworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoInRoaXMgaXMgbm90IGEgbGVnYWwgemlwIGZpbGVcbiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHpmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTikKKyAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2lzX3ppcF9lcnJvbmVvdXNfZmlsZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBpc196aXBmaWxlKCkgY29ycmVjdGx5IGlkZW50aWZpZXMgbm9uLXppcCBmaWxlcy4iIiIKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlbmFtZQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoInRoaXMgaXMgbm90IGEgbGVnYWwgemlwIGZpbGVcbiIpCisgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2hrKQorICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGUgb2JqZWN0CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjaGspCisgICAgICAgICMgLSBwYXNzaW5nIGEgZmlsZS1saWtlIG9iamVjdAorICAgICAgICBmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZnAud3JpdGUoInRoaXMgaXMgbm90IGEgbGVnYWwgemlwIGZpbGVcbiIpCisgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjaGspCisgICAgICAgIGZwLnNlZWsoMCwgMCkKKyAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNoaykKKworICAgIGRlZiB0ZXN0X2RhbWFnZWRfemlwZmlsZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB6aXBmaWxlcyB3aXRoIG1pc3NpbmcgYnl0ZXMgYXQgdGhlIGVuZCByYWlzZSBCYWRaaXBGaWxlLiIiIgorICAgICAgICAjIC0gQ3JlYXRlIGEgdmFsaWQgemlwIGZpbGUKKyAgICAgICAgZnAgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZnAsIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsIGIiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisgICAgICAgIHppcGZpbGVkYXRhID0gZnAuZ2V0dmFsdWUoKQorCisgICAgICAgICMgLSBOb3cgY3JlYXRlIGNvcGllcyBvZiBpdCBtaXNzaW5nIHRoZSBsYXN0IE4gYnl0ZXMgYW5kIG1ha2Ugc3VyZQorICAgICAgICAjICAgYSBCYWRaaXBGaWxlIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiB3ZSB0cnkgdG8gb3BlbiBpdAorICAgICAgICBmb3IgTiBpbiByYW5nZShsZW4oemlwZmlsZWRhdGEpKToKKyAgICAgICAgICAgIGZwID0gaW8uQnl0ZXNJTyh6aXBmaWxlZGF0YVs6Tl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGZpbGUuWmlwRmlsZSwgZnApCisKKyAgICBkZWYgdGVzdF9pc196aXBfdmFsaWRfZmlsZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBpc196aXBmaWxlKCkgY29ycmVjdGx5IGlkZW50aWZpZXMgemlwIGZpbGVzLiIiIgorICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGVuYW1lCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hrKQorICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGUgb2JqZWN0CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKKyAgICAgICAgICAgIGZwLnNlZWsoMCwgMCkKKyAgICAgICAgICAgIHppcF9jb250ZW50cyA9IGZwLnJlYWQoKQorICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGUtbGlrZSBvYmplY3QKKyAgICAgICAgZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGZwLndyaXRlKHppcF9jb250ZW50cykKKyAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hrKQorICAgICAgICBmcC5zZWVrKDAsIDApCisgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKKworICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19JT0Vycm9yKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIGEgcGFydGlhbGx5LWNvbnN0cnVjdGVkCisgICAgICAgICMgWmlwRmlsZSBpbnN0YW5jZSBpcyBmaW5hbGl6ZWQ7IHRoaXMgdGVzdHMgZm9yIHJlZ3Jlc3Npb24gb24gU0YgdHJhY2tlcgorICAgICAgICAjIGJ1ZyAjNDAzODcxLgorCisgICAgICAgICMgVGhlIGJ1ZyB3ZSdyZSB0ZXN0aW5nIGZvciBjYXVzZWQgYW4gQXR0cmlidXRlRXJyb3IgdG8gYmUgcmFpc2VkCisgICAgICAgICMgd2hlbiBhIFppcEZpbGUgaW5zdGFuY2Ugd2FzIGNyZWF0ZWQgZm9yIGEgZmlsZSB0aGF0IGRpZCBub3QKKyAgICAgICAgIyBleGlzdDsgdGhlIC5mcCBtZW1iZXIgd2FzIG5vdCBpbml0aWFsaXplZCBidXQgd2FzIG5lZWRlZCBieSB0aGUKKyAgICAgICAgIyBfX2RlbF9fKCkgbWV0aG9kLiAgU2luY2UgdGhlIEF0dHJpYnV0ZUVycm9yIGlzIGluIHRoZSBfX2RlbF9fKCksCisgICAgICAgICMgaXQgaXMgaWdub3JlZCwgYnV0IHRoZSB1c2VyIHNob3VsZCBiZSBzdWZmaWNpZW50bHkgYW5ub3llZCBieQorICAgICAgICAjIHRoZSBtZXNzYWdlIG9uIHRoZSBvdXRwdXQgdGhhdCByZWdyZXNzaW9uIHdpbGwgYmUgbm90aWNlZAorICAgICAgICAjIHF1aWNrbHkuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZmlsZV9yYWlzZXNfQmFkWmlwRmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOKQorCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZSgic2hvcnQgZmlsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwZmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCisKKyAgICBkZWYgdGVzdF9jbG9zZWRfemlwX3JhaXNlc19SdW50aW1lRXJyb3Ioc2VsZik6CisgICAgICAgICIiIlZlcmlmeSB0aGF0IHRlc3R6aXAoKSBkb2Vzbid0IHN3YWxsb3cgaW5hcHByb3ByaWF0ZSBleGNlcHRpb25zLiIiIgorICAgICAgICBkYXRhID0gU3RyaW5nSU8oKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShkYXRhLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisKKyAgICAgICAgIyBUaGlzIGlzIGNvcnJlY3Q7IGNhbGxpbmcgLnJlYWQgb24gYSBjbG9zZWQgWmlwRmlsZSBzaG91bGQgcmFpc2UKKyAgICAgICAgIyBhIFJ1bnRpbWVFcnJvciwgYW5kIHNvIHNob3VsZCBjYWxsaW5nIC50ZXN0emlwLiAgQW4gZWFybGllcgorICAgICAgICAjIHZlcnNpb24gb2YgLnRlc3R6aXAgd291bGQgc3dhbGxvdyB0aGlzIGV4Y2VwdGlvbiAoYW5kIGFueSBvdGhlcikKKyAgICAgICAgIyBhbmQgcmVwb3J0IHRoYXQgdGhlIGZpcnN0IGZpbGUgaW4gdGhlIGFyY2hpdmUgd2FzIGNvcnJ1cHQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi5yZWFkLCAiZm9vLnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi5vcGVuLCAiZm9vLnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi50ZXN0emlwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYud3JpdGVzdHIsICJib2d1cy50eHQiLCAiYm9ndXMiKQorICAgICAgICBvcGVuKFRFU1RGTiwgJ3cnKS53cml0ZSgnemlwZmlsZSB0ZXN0IGRhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYud3JpdGUsIFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2JhZF9jb25zdHJ1Y3Rvcl9tb2RlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGJhZCBtb2RlcyBwYXNzZWQgdG8gWmlwRmlsZSBjb25zdHJ1Y3RvciBhcmUgY2F1Z2h0LiIiIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOLCAicSIpCisKKyAgICBkZWYgdGVzdF9iYWRfb3Blbl9tb2RlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGJhZCBtb2RlcyBwYXNzZWQgdG8gWmlwRmlsZS5vcGVuIGFyZSBjYXVnaHQuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICMgcmVhZCB0aGUgZGF0YSB0byBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgdGhlcmUKKyAgICAgICAgICAgIHppcGYucmVhZCgiZm9vLnR4dCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYub3BlbiwgImZvby50eHQiLCAicSIpCisKKyAgICBkZWYgdGVzdF9yZWFkMChzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBjYWxsaW5nIHJlYWQoMCkgb24gYSBaaXBFeHRGaWxlIG9iamVjdCByZXR1cm5zIGFuIGVtcHR5CisgICAgICAgIHN0cmluZyBhbmQgZG9lc24ndCBhZHZhbmNlIGZpbGUgcG9pbnRlci4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisgICAgICAgICAgICAjIHJlYWQgdGhlIGRhdGEgdG8gbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHRoZXJlCisgICAgICAgICAgICB3aXRoIHppcGYub3BlbigiZm9vLnR4dCIpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKEZJWEVEVEVTVF9TSVpFKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMCksICcnKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorCisgICAgZGVmIHRlc3Rfb3Blbl9ub25fZXhpc3RlbnRfaXRlbShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBhdHRlbXB0aW5nIHRvIGNhbGwgb3BlbigpIGZvciBhbiBpdGVtIHRoYXQgZG9lc24ndAorICAgICAgICBleGlzdCBpbiB0aGUgYXJjaGl2ZSByYWlzZXMgYSBSdW50aW1lRXJyb3IuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgemlwZi5vcGVuLCAiZm9vLnR4dCIsICJyIikKKworICAgIGRlZiB0ZXN0X2JhZF9jb21wcmVzc2lvbl9tb2RlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGJhZCBjb21wcmVzc2lvbiBtZXRob2RzIHBhc3NlZCB0byBaaXBGaWxlLm9wZW4gYXJlCisgICAgICAgIGNhdWdodC4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTiwgInciLCAtMSkKKworICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX2NvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICAjIGRhdGEgaXMgZGVjbGFyZWQgYXMgc2hydW5rLCBidXQgYWN0dWFsbHkgZGVmbGF0ZWQKKyAgICAgICAgZGF0YSA9IChiJ1BLXHgwM1x4MDQuXHgwMFx4MDBceDAwXHgwMVx4MDBceGU0Q1x4YTFAXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDBceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDB4XHgwM1x4MDBQS1x4MDEnCisgICAgICAgIGInXHgwMi5ceDAzLlx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMCcKKyAgICAgICAgYicvXHgwMFx4MDBceDAwIVx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyhkYXRhKSwgJ3InKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgemlwZi5vcGVuLCAneCcpCisKKyAgICBkZWYgdGVzdF9udWxsX2J5dGVfaW5fZmlsZW5hbWUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYSBmaWxlbmFtZSBjb250YWluaW5nIGEgbnVsbCBieXRlIGlzIHByb3Blcmx5CisgICAgICAgIHRlcm1pbmF0ZWQuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0XHgwMHFxcSIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5uYW1lbGlzdCgpLCBbJ2Zvby50eHQnXSkKKworICAgIGRlZiB0ZXN0X3N0cnVjdF9zaXplcyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBaSVAgaW50ZXJuYWwgc3RydWN0dXJlIHNpemVzIGFyZSBjYWxjdWxhdGVkIGNvcnJlY3RseS4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmaWxlLnNpemVFbmRDZW50RGlyLCAyMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmaWxlLnNpemVDZW50cmFsRGlyLCA0NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmaWxlLnNpemVFbmRDZW50RGlyNjQsIDU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZpbGUuc2l6ZUVuZENlbnREaXI2NExvY2F0b3IsIDIwKQorCisgICAgZGVmIHRlc3RfY29tbWVudHMoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgY29tbWVudHMgb24gdGhlIGFyY2hpdmUgYXJlIGhhbmRsZWQgcHJvcGVybHkuIiIiCisKKyAgICAgICAgIyBjaGVjayBkZWZhdWx0IGNvbW1lbnQgaXMgZW1wdHkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCAnJykKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCAnJykKKworICAgICAgICAjIGNoZWNrIGEgc2ltcGxlIHNob3J0IGNvbW1lbnQKKyAgICAgICAgY29tbWVudCA9ICdCcmF2ZWx5IHRha2luZyB0byBoaXMgZmVldCwgaGUgYmVhdCBhIHZlcnkgYnJhdmUgcmV0cmVhdC4nCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsIGNvbW1lbnQpCisKKyAgICAgICAgIyBjaGVjayBhIGNvbW1lbnQgb2YgbWF4IGxlbmd0aAorICAgICAgICBjb21tZW50MiA9ICcnLmpvaW4oWyclZCcgJSAoaSoqMyAlIDEwKSBmb3IgaSBpbiB4cmFuZ2UoKDEgPDwgMTYpLTEpXSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYuY29tbWVudCA9IGNvbW1lbnQyCisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYuY29tbWVudCwgY29tbWVudDIpCisKKyAgICAgICAgIyBjaGVjayBhIGNvbW1lbnQgdGhhdCBpcyB0b28gbG9uZyBpcyB0cnVuY2F0ZWQKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYuY29tbWVudCA9IGNvbW1lbnQyICsgJ29vcHMnCisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsIGNvbW1lbnQyKQorCisgICAgZGVmIHRlc3RfY2hhbmdlX2NvbW1lbnRfaW5fZW1wdHlfYXJjaGl2ZShzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAiYSIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoemlwZi5maWxlbGlzdCkKKyAgICAgICAgICAgIHppcGYuY29tbWVudCA9IGIidGhpcyBpcyBhIGNvbW1lbnQiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsIGIidGhpcyBpcyBhIGNvbW1lbnQiKQorCisgICAgZGVmIHRlc3RfY2hhbmdlX2NvbW1lbnRfaW5fbm9uZW1wdHlfYXJjaGl2ZShzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgImEiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZi5maWxlbGlzdCkKKyAgICAgICAgICAgIHppcGYuY29tbWVudCA9IGIidGhpcyBpcyBhIGNvbW1lbnQiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsIGIidGhpcyBpcyBhIGNvbW1lbnQiKQorCisgICAgZGVmIGNoZWNrX3Rlc3R6aXBfd2l0aF9iYWRfY3JjKHNlbGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgIiIiVGVzdHMgdGhhdCBmaWxlcyB3aXRoIGJhZCBDUkNzIHJldHVybiB0aGVpciBuYW1lIGZyb20gdGVzdHppcC4iIiIKKyAgICAgICAgemlwZGF0YSA9IHNlbGYuemlwc193aXRoX2JhZF9jcmNbY29tcHJlc3Npb25dCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyh6aXBkYXRhKSwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICAjIHRlc3R6aXAgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgY29ycnVwdCBmaWxlLCBvciBOb25lCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhZmlsZScsIHppcGYudGVzdHppcCgpKQorCisgICAgZGVmIHRlc3RfdGVzdHppcF93aXRoX2JhZF9jcmNfc3RvcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Rlc3R6aXBfd2l0aF9iYWRfY3JjKHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF90ZXN0emlwX3dpdGhfYmFkX2NyY19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190ZXN0emlwX3dpdGhfYmFkX2NyYyh6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiBjaGVja19yZWFkX3dpdGhfYmFkX2NyYyhzZWxmLCBjb21wcmVzc2lvbik6CisgICAgICAgICIiIlRlc3RzIHRoYXQgZmlsZXMgd2l0aCBiYWQgQ1JDcyByYWlzZSBhIEJhZFppcGZpbGUgZXhjZXB0aW9uIHdoZW4gcmVhZC4iIiIKKyAgICAgICAgemlwZGF0YSA9IHNlbGYuemlwc193aXRoX2JhZF9jcmNbY29tcHJlc3Npb25dCisKKyAgICAgICAgIyBVc2luZyBaaXBGaWxlLnJlYWQoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKHppcGRhdGEpLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwZmlsZSwgemlwZi5yZWFkLCAnYWZpbGUnKQorCisgICAgICAgICMgVXNpbmcgWmlwRXh0RmlsZS5yZWFkKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyh6aXBkYXRhKSwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB3aXRoIHppcGYub3BlbignYWZpbGUnLCAncicpIGFzIGNvcnJ1cHRfZmlsZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIGNvcnJ1cHRfZmlsZS5yZWFkKQorCisgICAgICAgICMgU2FtZSB3aXRoIHNtYWxsIHJlYWRzIChpbiBvcmRlciB0byBleGVyY2lzZSB0aGUgYnVmZmVyaW5nIGxvZ2ljKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKHppcGRhdGEpLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdhZmlsZScsICdyJykgYXMgY29ycnVwdF9maWxlOgorICAgICAgICAgICAgICAgIGNvcnJ1cHRfZmlsZS5NSU5fUkVBRF9TSVpFID0gMgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgY29ycnVwdF9maWxlLnJlYWQoMik6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9yZWFkX3dpdGhfYmFkX2NyY19zdG9yZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVhZF93aXRoX2JhZF9jcmMoemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRfd2l0aF9iYWRfY3JjX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlYWRfd2l0aF9iYWRfY3JjKHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgZGVmIGNoZWNrX3JlYWRfcmV0dXJuX3NpemUoc2VsZiwgY29tcHJlc3Npb24pOgorICAgICAgICAjIElzc3VlICM5ODM3OiBaaXBFeHRGaWxlLnJlYWQoKSBzaG91bGRuJ3QgcmV0dXJuIG1vcmUgYnl0ZXMKKyAgICAgICAgIyB0aGFuIHJlcXVlc3RlZC4KKyAgICAgICAgZm9yIHRlc3Rfc2l6ZSBpbiAoMSwgNDA5NSwgNDA5NiwgNDA5NywgMTYzODQpOgorICAgICAgICAgICAgZmlsZV9zaXplID0gdGVzdF9zaXplICsgMQorICAgICAgICAgICAganVuayA9IGInJy5qb2luKHN0cnVjdC5wYWNrKCdCJywgcmFuZGludCgwLCAyNTUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKGZpbGVfc2l6ZSkpCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKCksICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGY6CisgICAgICAgICAgICAgICAgemlwZi53cml0ZXN0cignZm9vJywganVuaykKKyAgICAgICAgICAgICAgICB3aXRoIHppcGYub3BlbignZm9vJywgJ3InKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZCh0ZXN0X3NpemUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIHRlc3Rfc2l6ZSkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmV0dXJuX3NpemVfc3RvcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlYWRfcmV0dXJuX3NpemUoemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRfcmV0dXJuX3NpemVfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVhZF9yZXR1cm5fc2l6ZSh6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3ppcGZpbGUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBjcmVhdGluZyBhIGZpbGUgaW4gJ3cnIG9yICdhJyBtb2RlIGFuZCBjbG9zaW5nIHdpdGhvdXQKKyAgICAgICAgIyBhZGRpbmcgYW55IGZpbGVzIHRvIHRoZSBhcmNoaXZlcyBjcmVhdGVzIGEgdmFsaWQgZW1wdHkgWklQIGZpbGUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQorICAgICAgICBleGNlcHQgemlwZmlsZS5CYWRaaXBmaWxlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJVbmFibGUgdG8gY3JlYXRlIGVtcHR5IFpJUCBmaWxlIGluICd3JyBtb2RlIikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9ImEiKSBhcyB6aXBmOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVW5hYmxlIHRvIGNyZWF0ZSBlbXB0eSBaSVAgZmlsZSBpbiAnYScgbW9kZSIpCisKKyAgICBkZWYgdGVzdF9vcGVuX2VtcHR5X2ZpbGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTcxMDcwMzogQ2hlY2sgdGhhdCBvcGVuaW5nIGEgZmlsZSB3aXRoIGxlc3MgdGhhbiAyMiBieXRlcworICAgICAgICAjIHJhaXNlcyBhIEJhZFppcGZpbGUgZXhjZXB0aW9uIChyYXRoZXIgdGhhbiB0aGUgcHJldmlvdXNseSB1bmhlbHBmdWwKKyAgICAgICAgIyBJT0Vycm9yKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwZmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICdyJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV96aXBpbmZvX2JlZm9yZV8xOTgwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBmaWxlLlppcEluZm8sICdzZXZlbnRpZXMnLCAoMTk3OSwgMSwgMSwgMCwgMCwgMCkpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4yKQorCisKK2NsYXNzIERlY3J5cHRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQ2hlY2sgdGhhdCBaSVAgZGVjcnlwdGlvbiB3b3Jrcy4gU2luY2UgdGhlIGxpYnJhcnkgZG9lcyBub3QKKyAgICBzdXBwb3J0IGVuY3J5cHRpb24gYXQgdGhlIG1vbWVudCwgd2UgdXNlIGEgcHJlLWdlbmVyYXRlZCBlbmNyeXB0ZWQKKyAgICBaSVAgZmlsZS4iIiIKKworICAgIGRhdGEgPSAoCisgICAgJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDBceDFhXHgwMCcKKyAgICAnXHgwMFx4MDBceDA4XHgwMFx4MDBceDAwdGVzdC50eHRceGZhXHgxMFx4YTBnbHl8XHhmYS1ceGM1XHhjMD1ceGY5eScKKyAgICAnXHgxOFx4ZTBceGE4clx4YjNafUxnXHhiY1x4YWVceGY5fFx4OWJceDE5XHhlNFx4OGJceGJhXHhiYilceDhjXHhiMFx4ZGJsJworICAgICdQS1x4MDFceDAyXHgxNFx4MDBceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDAnCisgICAgJ1x4MWFceDAwXHgwMFx4MDBceDA4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwIFx4MDBceGI2XHg4MScKKyAgICAnXHgwMFx4MDBceDAwXHgwMHRlc3QudHh0UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwNlx4MDAnCisgICAgJ1x4MDBceDAwTFx4MDBceDAwXHgwMFx4MDBceDAwJyApCisgICAgZGF0YTIgPSAoCisgICAgJ1BLXHgwM1x4MDRceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDInCisgICAgJ1x4MDBceDAwXHgwNFx4MDBceDE1XHgwMHplcm9VVFx0XHgwMFx4MDNceGQ2XHg4Ylx4OTJHXHhkYVx4OGJceDkyR1V4XHgwNCcKKyAgICAnXHgwMFx4ZThceDAzXHhlOFx4MDNceGM3PE1ceGI1YVx4Y2VYXHhhM1kmXHg4YntvRVx4ZDdceDlkXHg4Y1x4OThceDAyXHhjMCcKKyAgICAnUEtceDA3XHgwOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFBLXHgwMVx4MDJceDE3XHgwMycKKyAgICAnXHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCisgICAgJ1x4MDRceDAwXHJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceGE0XHg4MVx4MDBceDAwXHgwMFx4MDB6ZScKKyAgICAncm9VVFx4MDVceDAwXHgwM1x4ZDZceDhiXHg5MkdVeFx4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxJworICAgICdceDAwXHgwMVx4MDA/XHgwMFx4MDBceDAwW1x4MDBceDAwXHgwMFx4MDBceDAwJyApCisKKyAgICBwbGFpbiA9ICd6aXBmaWxlLnB5IGVuY3J5cHRpb24gdGVzdCcKKyAgICBwbGFpbjIgPSAnXHgwMCcqNTEyCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQorICAgICAgICBzZWxmLnppcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIikKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhMikKKyAgICAgICAgc2VsZi56aXAyID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi56aXAuY2xvc2UoKQorICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgICAgICBzZWxmLnppcDIuY2xvc2UoKQorICAgICAgICBvcy51bmxpbmsoVEVTVEZOMikKKworICAgIGRlZiB0ZXN0X25vX3Bhc3N3b3JkKHNlbGYpOgorICAgICAgICAjIFJlYWRpbmcgdGhlIGVuY3J5cHRlZCBmaWxlIHdpdGhvdXQgcGFzc3dvcmQKKyAgICAgICAgIyBtdXN0IGdlbmVyYXRlIGEgUnVuVGltZSBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLnppcC5yZWFkLCAidGVzdC50eHQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYuemlwMi5yZWFkLCAiemVybyIpCisKKyAgICBkZWYgdGVzdF9iYWRfcGFzc3dvcmQoc2VsZik6CisgICAgICAgIHNlbGYuemlwLnNldHBhc3N3b3JkKCJwZXJsIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLnppcC5yZWFkLCAidGVzdC50eHQiKQorICAgICAgICBzZWxmLnppcDIuc2V0cGFzc3dvcmQoInBlcmwiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYuemlwMi5yZWFkLCAiemVybyIpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfZ29vZF9wYXNzd29yZChzZWxmKToKKyAgICAgICAgc2VsZi56aXAuc2V0cGFzc3dvcmQoInB5dGhvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi56aXAucmVhZCgidGVzdC50eHQiKSwgc2VsZi5wbGFpbikKKyAgICAgICAgc2VsZi56aXAyLnNldHBhc3N3b3JkKCIxMjM0NSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi56aXAyLnJlYWQoInplcm8iKSwgc2VsZi5wbGFpbjIpCisKKworY2xhc3MgVGVzdHNXaXRoUmFuZG9tQmluYXJ5RmlsZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZGF0YWNvdW50ID0gcmFuZGludCgxNiwgNjQpKjEwMjQgKyByYW5kaW50KDEsIDEwMjQpCisgICAgICAgIHNlbGYuZGF0YSA9ICcnLmpvaW4oc3RydWN0LnBhY2soJzxmJywgcmFuZG9tKCkqcmFuZGludCgtMTAwMCwgMTAwMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGRhdGFjb3VudCkpCisKKyAgICAgICAgIyBNYWtlIGEgc291cmNlIGZpbGUgd2l0aCBzb21lIGxpbmVzCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICB1bmxpbmsoVEVTVEZOMikKKworICAgIGRlZiBtYWtlX3Rlc3RfYXJjaGl2ZShzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgImFub3RoZXIubmFtZSIpCisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKKworICAgIGRlZiB6aXBfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHRlc3RkYXRhID0gemlwZnAucmVhZChURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0ZGF0YSksIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJhbm90aGVyLm5hbWUiKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIHRlc3Rfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiB6aXBfb3Blbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZGF0YTEgPSBbXQorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKFRFU1RGTikgYXMgemlwb3BlbjE6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZCgyNTYpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQorCisgICAgICAgICAgICB6aXBkYXRhMiA9IFtdCisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oImFub3RoZXIubmFtZSIpIGFzIHppcG9wZW4yOgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4yLnJlYWQoMjU2KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgemlwZGF0YTIuYXBwZW5kKHJlYWRfZGF0YSkKKworICAgICAgICAgICAgdGVzdGRhdGExID0gJycuam9pbih6aXBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhMSksIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YTEsIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgdGVzdGRhdGEyID0gJycuam9pbih6aXBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhMiksIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YTIsIHNlbGYuZGF0YSkKKworICAgIGRlZiB0ZXN0X29wZW5fc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3Rfb3Blbl9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiB6aXBfcmFuZG9tX29wZW5fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGRhdGExID0gW10KKyAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4pIGFzIHppcG9wZW4xOgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQocmFuZGludCgxLCAxMDI0KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCisKKyAgICAgICAgICAgIHRlc3RkYXRhID0gJycuam9pbih6aXBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhKSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgdGVzdF9yYW5kb21fb3Blbl9zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmFuZG9tX29wZW5fZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yYW5kb21fb3Blbl90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisKK0Bza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKK2NsYXNzIFRlc3RzV2l0aE11bHRpcGxlT3BlbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ29uZXMnLCAnMScqRklYRURURVNUX1NJWkUpCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigndHdvcycsICcyJypGSVhFRFRFU1RfU0laRSkKKworICAgIGRlZiB0ZXN0X3NhbWVfZmlsZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCAod2hlbiB0aGUgWmlwRmlsZSBpcyBpbiBjb250cm9sIG9mIGNyZWF0aW5nIGZpbGUgb2JqZWN0cykKKyAgICAgICAgIyBtdWx0aXBsZSBvcGVuKCkgY2FsbHMgY2FuIGJlIG1hZGUgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIuCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgem9wZW4xID0gemlwZi5vcGVuKCdvbmVzJykKKyAgICAgICAgICAgIHpvcGVuMiA9IHppcGYub3Blbignb25lcycpCisgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgZGF0YTIpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbnRfZmlsZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCAod2hlbiB0aGUgWmlwRmlsZSBpcyBpbiBjb250cm9sIG9mIGNyZWF0aW5nIGZpbGUgb2JqZWN0cykKKyAgICAgICAgIyBtdWx0aXBsZSBvcGVuKCkgY2FsbHMgY2FuIGJlIG1hZGUgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIuCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjEsIHppcGYub3BlbigndHdvcycpIGFzIHpvcGVuMjoKKyAgICAgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgJzEnKkZJWEVEVEVTVF9TSVpFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgJzInKkZJWEVEVEVTVF9TSVpFKQorCisgICAgZGVmIHRlc3RfaW50ZXJsZWF2ZWQoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCisgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdvbmVzJykgYXMgem9wZW4xLCB6aXBmLm9wZW4oJ3R3b3MnKSBhcyB6b3BlbjI6CisgICAgICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsICcxJypGSVhFRFRFU1RfU0laRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsICcyJypGSVhFRFRFU1RfU0laRSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKKworY2xhc3MgVGVzdFdpdGhEaXJlY3RvcnkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3MubWtkaXIoVEVTVEZOMikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfZGlyKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmaW5kZmlsZSgiemlwZGlyLnppcCIpKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi5leHRyYWN0YWxsKFRFU1RGTjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihURVNURk4yLCAiYSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKFRFU1RGTjIsICJhIiwgImIiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oVEVTVEZOMiwgImEiLCAiYiIsICJjIikpKQorCisgICAgZGVmIHRlc3RfYnVnXzYwNTAoc2VsZik6CisgICAgICAgICMgRXh0cmFjdGlvbiBzaG91bGQgc3VjY2VlZCBpZiBkaXJlY3RvcmllcyBhbHJlYWR5IGV4aXN0CisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihURVNURk4yLCAiYSIpKQorICAgICAgICBzZWxmLnRlc3RfZXh0cmFjdF9kaXIoKQorCisgICAgZGVmIHRlc3Rfc3RvcmVfZGlyKHNlbGYpOgorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIngiKSkKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJ3IikKKyAgICAgICAgemlwZi53cml0ZShvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIngiKSwgIngiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZi5maWxlbGlzdFswXS5maWxlbmFtZS5lbmRzd2l0aCgieC8iKSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKworCitjbGFzcyBVbml2ZXJzYWxOZXdsaW5lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5saW5lX2dlbiA9IFsiVGVzdCBvZiB6aXBmaWxlIGxpbmUgJWQuIiAlIGkKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoRklYRURURVNUX1NJWkUpXQorICAgICAgICBzZWxmLnNlcHMgPSAoJ1xyJywgJ1xyXG4nLCAnXG4nKQorICAgICAgICBzZWxmLmFyY2RhdGEsIHNlbGYuYXJjZmlsZXMgPSB7fSwge30KKyAgICAgICAgZm9yIG4sIHMgaW4gZW51bWVyYXRlKHNlbGYuc2Vwcyk6CisgICAgICAgICAgICBzZWxmLmFyY2RhdGFbc10gPSBzLmpvaW4oc2VsZi5saW5lX2dlbikgKyBzCisgICAgICAgICAgICBzZWxmLmFyY2ZpbGVzW3NdID0gJyVzLSVkJyAlIChURVNURk4sIG4pCisgICAgICAgICAgICBvcGVuKHNlbGYuYXJjZmlsZXNbc10sICJ3YiIpLndyaXRlKHNlbGYuYXJjZGF0YVtzXSkKKworICAgIGRlZiBtYWtlX3Rlc3RfYXJjaGl2ZShzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmbiBpbiBzZWxmLmFyY2ZpbGVzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlKGZuLCBmbikKKworICAgIGRlZiByZWFkX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICB6aXBkYXRhID0gZnAucmVhZCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyY2RhdGFbc2VwXSwgemlwZGF0YSkKKworICAgIGRlZiByZWFkbGluZV9yZWFkX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQorICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIHppcG9wZW46CisgICAgICAgICAgICAgICAgZGF0YSA9ICcnCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcmVhZCA9IHppcG9wZW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gcmVhZAorCisgICAgICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWQoNSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWQKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzZWxmLmFyY2RhdGFbJ1xuJ10pCisKKyAgICAgICAgemlwZnAuY2xvc2UoKQorCisgICAgZGVmIHJlYWRsaW5lX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIHppcG9wZW46CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZV9nZW46CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lZGF0YSA9IHppcG9wZW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lZGF0YSwgbGluZSArICdcbicpCisKKyAgICBkZWYgcmVhZGxpbmVzX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICB6aXBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKKworICAgIGRlZiBpdGVybGluZXNfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBmcC5vcGVuKGZuLCAiclUiKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArICdcbicpCisKKyAgICBkZWYgdGVzdF9yZWFkX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnJlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9yZWFkX3N0b3JlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzYxMDogY2FsbHMgdG8gcmVhZGxpbmUoKSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIHRvIHJlYWQoKS4KKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnJlYWRsaW5lX3JlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkbGluZV90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkbGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF9pdGVybGluZXNfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuaXRlcmxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfcmVhZF9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzYxMDogY2FsbHMgdG8gcmVhZGxpbmUoKSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIHRvIHJlYWQoKS4KKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnJlYWRsaW5lX3JlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnJlYWRsaW5lX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfaXRlcmxpbmVzX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuaXRlcmxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0c1dpdGhTb3VyY2VGaWxlLCBUZXN0WmlwNjRJblNtYWxsRmlsZXMsIE90aGVyVGVzdHMsCisgICAgICAgICAgICAgICAgIFB5WmlwRmlsZVRlc3RzLCBEZWNyeXB0aW9uVGVzdHMsIFRlc3RzV2l0aE11bHRpcGxlT3BlbnMsCisgICAgICAgICAgICAgICAgIFRlc3RXaXRoRGlyZWN0b3J5LCBVbml2ZXJzYWxOZXdsaW5lVGVzdHMsCisgICAgICAgICAgICAgICAgIFRlc3RzV2l0aFJhbmRvbUJpbmFyeUZpbGVzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZmM2RjYQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3ppcGZpbGU2NC5weQpAQCAtMCwwICsxLDEyNCBAQAorIyBUZXN0cyBvZiB0aGUgZnVsbCBaSVA2NCBmdW5jdGlvbmFsaXR5IG9mIHppcGZpbGUKKyMgVGhlIHRlc3Rfc3VwcG9ydC5yZXF1aXJlcyBjYWxsIGlzIHRoZSBvbmx5IHJlYXNvbiBmb3Iga2VlcGluZyB0aGlzIHNlcGFyYXRlCisjIGZyb20gdGVzdF96aXBmaWxlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIFhYWChubm9yd2l0eik6IGRpc2FibGUgdGhpcyB0ZXN0IGJ5IGxvb2tpbmcgZm9yIGV4dHJhIGxhcmdmaWxlIHJlc291cmNlCisjIHdoaWNoIGRvZXNuJ3QgZXhpc3QuICBUaGlzIHRlc3QgdGFrZXMgb3ZlciAzMCBtaW51dGVzIHRvIHJ1biBpbiBnZW5lcmFsCisjIGFuZCByZXF1aXJlcyBtb3JlIGRpc2sgc3BhY2UgdGhhbiBtb3N0IG9mIHRoZSBidWlsZGJvdHMuCit0ZXN0X3N1cHBvcnQucmVxdWlyZXMoCisgICAgICAgICdleHRyYWxhcmdlZmlsZScsCisgICAgICAgICd0ZXN0IHJlcXVpcmVzIGxvYWRzIG9mIGRpc2stc3BhY2UgYnl0ZXMgYW5kIGEgbG9uZyB0aW1lIHRvIHJ1bicKKyAgICApCisKKyMgV2UgY2FuIHRlc3QgcGFydCBvZiB0aGUgbW9kdWxlIHdpdGhvdXQgemxpYi4KK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKK2ltcG9ydCB6aXBmaWxlLCBvcywgdW5pdHRlc3QKK2ltcG9ydCB0aW1lCitpbXBvcnQgc3lzCisKK2Zyb20gdGVtcGZpbGUgaW1wb3J0IFRlbXBvcmFyeUZpbGUKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKKworVEVTVEZOMiA9IFRFU1RGTiArICIyIgorCisjIEhvdyBtdWNoIHRpbWUgaW4gc2Vjb25kcyBjYW4gcGFzcyBiZWZvcmUgd2UgcHJpbnQgYSAnU3RpbGwgd29ya2luZycgbWVzc2FnZS4KK19QUklOVF9XT1JLSU5HX01TR19JTlRFUlZBTCA9IDUgKiA2MAorCitjbGFzcyBUZXN0c1dpdGhTb3VyY2VGaWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIHRlc3QgZGF0YS4KKyAgICAgICAgIyB4cmFuZ2UoKSBpcyBpbXBvcnRhbnQgaGVyZSAtLSBkb24ndCB3YW50IHRvIGNyZWF0ZSBpbW1vcnRhbCBzcGFjZQorICAgICAgICAjIGZvciBhIG1pbGxpb24gaW50cy4KKyAgICAgICAgbGluZV9nZW4gPSAoIlRlc3Qgb2YgemlwZmlsZSBsaW5lICVkLiIgJSBpIGZvciBpIGluIHhyYW5nZSgxMDAwMDAwKSkKKyAgICAgICAgc2VsZi5kYXRhID0gJ1xuJy5qb2luKGxpbmVfZ2VuKQorCisgICAgICAgICMgQW5kIHdyaXRlIGl0IHRvIGEgZmlsZS4KKyAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgIndiIikKKyAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQorICAgICAgICBmcC5jbG9zZSgpCisKKyAgICBkZWYgemlwVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZS4KKyAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbiwgYWxsb3daaXA2ND1UcnVlKQorCisgICAgICAgICMgSXQgd2lsbCBjb250YWluIGVub3VnaCBjb3BpZXMgb2Ygc2VsZi5kYXRhIHRvIHJlYWNoIGFib3V0IDZHQiBvZgorICAgICAgICAjIHJhdyBkYXRhIHRvIHN0b3JlLgorICAgICAgICBmaWxlY291bnQgPSA2KjEwMjQqKjMgLy8gbGVuKHNlbGYuZGF0YSkKKworICAgICAgICBuZXh0X3RpbWUgPSB0aW1lLnRpbWUoKSArIF9QUklOVF9XT1JLSU5HX01TR19JTlRFUlZBTAorICAgICAgICBmb3IgbnVtIGluIHJhbmdlKGZpbGVjb3VudCk6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigidGVzdGZuJWQiICUgbnVtLCBzZWxmLmRhdGEpCisgICAgICAgICAgICAjIFByaW50IHN0aWxsIHdvcmtpbmcgbWVzc2FnZSBzaW5jZSB0aGlzIHRlc3QgY2FuIGJlIHJlYWxseSBzbG93CisgICAgICAgICAgICBpZiBuZXh0X3RpbWUgPD0gdGltZS50aW1lKCk6CisgICAgICAgICAgICAgICAgbmV4dF90aW1lID0gdGltZS50aW1lKCkgKyBfUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwKKyAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5fX3N0ZG91dF9fLCAoCisgICAgICAgICAgICAgICAgICAgJyAgemlwVGVzdCBzdGlsbCB3cml0aW5nICVkIG9mICVkLCBiZSBwYXRpZW50Li4uJyAlCisgICAgICAgICAgICAgICAgICAgKG51bSwgZmlsZWNvdW50KSkKKyAgICAgICAgICAgICAgICBzeXMuX19zdGRvdXRfXy5mbHVzaCgpCisgICAgICAgIHppcGZwLmNsb3NlKCkKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCisgICAgICAgIGZvciBudW0gaW4gcmFuZ2UoZmlsZWNvdW50KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgidGVzdGZuJWQiICUgbnVtKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgIyBQcmludCBzdGlsbCB3b3JraW5nIG1lc3NhZ2Ugc2luY2UgdGhpcyB0ZXN0IGNhbiBiZSByZWFsbHkgc2xvdworICAgICAgICAgICAgaWYgbmV4dF90aW1lIDw9IHRpbWUudGltZSgpOgorICAgICAgICAgICAgICAgIG5leHRfdGltZSA9IHRpbWUudGltZSgpICsgX1BSSU5UX1dPUktJTkdfTVNHX0lOVEVSVkFMCisgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuX19zdGRvdXRfXywgKAorICAgICAgICAgICAgICAgICAgICcgIHppcFRlc3Qgc3RpbGwgcmVhZGluZyAlZCBvZiAlZCwgYmUgcGF0aWVudC4uLicgJQorICAgICAgICAgICAgICAgICAgIChudW0sIGZpbGVjb3VudCkpCisgICAgICAgICAgICAgICAgc3lzLl9fc3Rkb3V0X18uZmx1c2goKQorICAgICAgICB6aXBmcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFN0b3JlZChzZWxmKToKKyAgICAgICAgIyBUcnkgdGhlIHRlbXAgZmlsZSBmaXJzdC4gIElmIHdlIGRvIFRFU1RGTjIgZmlyc3QsIHRoZW4gaXQgaG9ncworICAgICAgICAjIGdpZ2FieXRlcyBvZiBkaXNrIHNwYWNlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRlc3QuCisgICAgICAgIGZvciBmIGluIFRlbXBvcmFyeUZpbGUoKSwgVEVTVEZOMjoKKyAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBpZiB6bGliOgorICAgICAgICBkZWYgdGVzdERlZmxhdGVkKHNlbGYpOgorICAgICAgICAgICAgIyBUcnkgdGhlIHRlbXAgZmlsZSBmaXJzdC4gIElmIHdlIGRvIFRFU1RGTjIgZmlyc3QsIHRoZW4gaXQgaG9ncworICAgICAgICAgICAgIyBnaWdhYnl0ZXMgb2YgZGlzayBzcGFjZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0ZXN0LgorICAgICAgICAgICAgZm9yIGYgaW4gVGVtcG9yYXJ5RmlsZSgpLCBURVNURk4yOgorICAgICAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIGZuYW1lIGluIFRFU1RGTiwgVEVTVEZOMjoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuYW1lKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCisKKworY2xhc3MgT3RoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RNb3JlVGhhbjY0a0ZpbGVzKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBtb3JlIHRoYW4gNjRrIGZpbGVzIGNhbiBiZSBhZGRlZCB0byBhbiBhcmNoaXZlLAorICAgICAgICAjIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgYXJjaGl2ZSBjYW4gYmUgcmVhZCBwcm9wZXJseSBieSBaaXBGaWxlCisgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKKyAgICAgICAgemlwZi5kZWJ1ZyA9IDEwMAorICAgICAgICBudW1maWxlcyA9ICgxIDw8IDE2KSAqIDMvMgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtZmlsZXMpOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vJTA4ZCIgJSBpLCAiJWQiICUgKGkqKjMgJSA1NykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICB6aXBmLmNsb3NlKCkKKworICAgICAgICB6aXBmMiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmMi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1maWxlcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYyLnJlYWQoImZvbyUwOGQiICUgaSksICIlZCIgJSAoaSoqMyAlIDU3KSkKKyAgICAgICAgemlwZi5jbG9zZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoVEVTVEZOKQorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKFRFU1RGTjIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdHNXaXRoU291cmNlRmlsZSwgT3RoZXJUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NjczOGEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKQEAgLTAsMCArMSw0NzIgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBpbXAKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X2ltcG9ydGhvb2tzIGltcG9ydCBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSwgdGVzdF9zcmMsIHRlc3RfY28KKworIyBzb21lIHRlc3RzIGNhbiBiZSByYW4gZXZlbiB3aXRob3V0IHpsaWIKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKK2Zyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZSwgWmlwSW5mbywgWklQX1NUT1JFRCwgWklQX0RFRkxBVEVECisKK2ltcG9ydCB6aXBpbXBvcnQKK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCBkb2N0ZXN0CitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IFN0cmluZ0lPCitmcm9tIHRyYWNlYmFjayBpbXBvcnQgZXh0cmFjdF90YiwgZXh0cmFjdF9zdGFjaywgcHJpbnRfdGIKK3JhaXNlX3NyYyA9ICdkZWYgZG9fcmFpc2UoKTogcmFpc2UgVHlwZUVycm9yXG4nCisKK2RlZiBtYWtlX3B5YyhjbywgbXRpbWUpOgorICAgIGRhdGEgPSBtYXJzaGFsLmR1bXBzKGNvKQorICAgIGlmIHR5cGUobXRpbWUpIGlzIHR5cGUoMC4wKToKKyAgICAgICAgIyBNYWMgbXRpbWVzIG5lZWQgYSBiaXQgb2Ygc3BlY2lhbCBjYXNpbmcKKyAgICAgICAgaWYgbXRpbWUgPCAweDdmZmZmZmZmOgorICAgICAgICAgICAgbXRpbWUgPSBpbnQobXRpbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtdGltZSA9IGludCgtMHgxMDAwMDAwMDBMICsgbG9uZyhtdGltZSkpCisgICAgcHljID0gaW1wLmdldF9tYWdpYygpICsgc3RydWN0LnBhY2soIjxpIiwgaW50KG10aW1lKSkgKyBkYXRhCisgICAgcmV0dXJuIHB5YworCitkZWYgbW9kdWxlX3BhdGhfdG9fZG90dGVkX25hbWUocGF0aCk6CisgICAgcmV0dXJuIHBhdGgucmVwbGFjZShvcy5zZXAsICcuJykKKworTk9XID0gdGltZS50aW1lKCkKK3Rlc3RfcHljID0gbWFrZV9weWModGVzdF9jbywgTk9XKQorCisKK2lmIF9fZGVidWdfXzoKKyAgICBweWNfZXh0ID0gIi5weWMiCitlbHNlOgorICAgIHB5Y19leHQgPSAiLnB5byIKKworCitURVNUTU9EID0gInppcHRlc3Rtb2R1bGUiCitURVNUUEFDSyA9ICJ6aXB0ZXN0cGFja2FnZSIKK1RFU1RQQUNLMiA9ICJ6aXB0ZXN0cGFja2FnZTIiCitURU1QX1pJUCA9IG9zLnBhdGguYWJzcGF0aCgianVuazk1MTQyIiArIG9zLmV4dHNlcCArICJ6aXAiKQorCisKK2NsYXNzIFVuY29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKKworICAgIGNvbXByZXNzaW9uID0gWklQX1NUT1JFRAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFdlJ3JlIHJldXNpbmcgdGhlIHppcCBhcmNoaXZlIHBhdGgsIHNvIHdlIG11c3QgY2xlYXIgdGhlCisgICAgICAgICMgY2FjaGVkIGRpcmVjdG9yeSBpbmZvIGFuZCBsaW5lY2FjaGUKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICB6aXBpbXBvcnQuX3ppcF9kaXJlY3RvcnlfY2FjaGUuY2xlYXIoKQorICAgICAgICBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZS5zZXRVcChzZWxmKQorCisgICAgZGVmIGRvVGVzdChzZWxmLCBleHBlY3RlZF9leHQsIGZpbGVzLCAqbW9kdWxlcywgKiprdyk6CisgICAgICAgIHogPSBaaXBGaWxlKFRFTVBfWklQLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBuYW1lLCAobXRpbWUsIGRhdGEpIGluIGZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgemluZm8gPSBaaXBJbmZvKG5hbWUsIHRpbWUubG9jYWx0aW1lKG10aW1lKSkKKyAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgorICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCisgICAgICAgICAgICB6LmNsb3NlKCkKKworICAgICAgICAgICAgc3R1ZmYgPSBrdy5nZXQoInN0dWZmIiwgTm9uZSkKKyAgICAgICAgICAgIGlmIHN0dWZmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgUHJlcGVuZCAnc3R1ZmYnIHRvIHRoZSBzdGFydCBvZiB0aGUgemlwZmlsZQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFTVBfWklQLCAicmIiKQorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVNUF9aSVAsICJ3YiIpCisgICAgICAgICAgICAgICAgZi53cml0ZShzdHVmZikKKyAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBURU1QX1pJUCkKKworICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXygiLiIuam9pbihtb2R1bGVzKSwgZ2xvYmFscygpLCBsb2NhbHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJfX2R1bW15X18iXSkKKworICAgICAgICAgICAgY2FsbCA9IGt3LmdldCgnY2FsbCcpCisgICAgICAgICAgICBpZiBjYWxsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNhbGwobW9kKQorCisgICAgICAgICAgICBpZiBleHBlY3RlZF9leHQ6CisgICAgICAgICAgICAgICAgZmlsZSA9IG1vZC5nZXRfZmlsZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlLCBvcy5wYXRoLmpvaW4oVEVNUF9aSVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbW9kdWxlcykgKyBleHBlY3RlZF9leHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB6LmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShURU1QX1pJUCkKKworICAgIGRlZiB0ZXN0QUZha2VabGliKHNlbGYpOgorICAgICAgICAjCisgICAgICAgICMgVGhpcyBjb3VsZCBjYXVzZSBhIHN0YWNrIG92ZXJmbG93IGJlZm9yZTogaW1wb3J0aW5nIHpsaWIucHkKKyAgICAgICAgIyBmcm9tIGEgY29tcHJlc3NlZCBhcmNoaXZlIHdvdWxkIGNhdXNlIHpsaWIgdG8gYmUgaW1wb3J0ZWQKKyAgICAgICAgIyB3aGljaCB3b3VsZCBmaW5kIHpsaWIucHkgaW4gdGhlIGFyY2hpdmUsIHdoaWNoIHdvdWxkLi4uIGV0Yy4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgdGVzdCAqbXVzdCogYmUgZXhlY3V0ZWQgZmlyc3Q6IGl0IG11c3QgYmUgdGhlIGZpcnN0IG9uZQorICAgICAgICAjIHRvIHRyaWdnZXIgemlwaW1wb3J0IHRvIGltcG9ydCB6bGliICh6aXBpbXBvcnQgY2FjaGVzIHRoZQorICAgICAgICAjIHpsaWIuZGVjb21wcmVzcyBmdW5jdGlvbiBvYmplY3QsIGFmdGVyIHdoaWNoIHRoZSBwcm9ibGVtIGJlaW5nCisgICAgICAgICMgdGVzdGVkIGhlcmUgd291bGRuJ3QgYmUgYSBwcm9ibGVtIGFueW1vcmUuLi4KKyAgICAgICAgIyAoSGVuY2UgdGhlICdBJyBpbiB0aGUgdGVzdCBtZXRob2QgbmFtZTogdG8gbWFrZSBpdCB0aGUgZmlyc3QKKyAgICAgICAgIyBpdGVtIGluIGEgbGlzdCBzb3J0ZWQgYnkgbmFtZSwgbGlrZSB1bml0dGVzdC5tYWtlU3VpdGUoKSBkb2VzLikKKyAgICAgICAgIworICAgICAgICAjIFRoaXMgdGVzdCBmYWlscyBvbiBwbGF0Zm9ybXMgb24gd2hpY2ggdGhlIHpsaWIgbW9kdWxlIGlzCisgICAgICAgICMgc3RhdGljYWxseSBsaW5rZWQsIGJ1dCB0aGUgcHJvYmxlbSBpdCB0ZXN0cyBmb3IgY2FuJ3QKKyAgICAgICAgIyBvY2N1ciBpbiB0aGF0IGNhc2UgKGJ1aWx0aW4gbW9kdWxlcyBhcmUgYWx3YXlzIGZvdW5kIGZpcnN0KSwKKyAgICAgICAgIyBzbyB3ZSdsbCBzaW1wbHkgc2tpcCBpdCB0aGVuLiBCdWcgIzc2NTQ1Ni4KKyAgICAgICAgIworICAgICAgICBpZiAiemxpYiIgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmICJ6bGliIiBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1siemxpYiJdCisgICAgICAgIGZpbGVzID0geyJ6bGliLnB5IjogKE5PVywgdGVzdF9zcmMpfQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRvVGVzdCgiLnB5IiwgZmlsZXMsICJ6bGliIikKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgaWYgc2VsZi5jb21wcmVzc2lvbiAhPSBaSVBfREVGTEFURUQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0ZXN0IHRvIG5vdCByYWlzZSBJbXBvcnRFcnJvciIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmNvbXByZXNzaW9uICE9IFpJUF9TVE9SRUQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0ZXN0IHRvIHJhaXNlIEltcG9ydEVycm9yIikKKworICAgIGRlZiB0ZXN0UHkoc2VsZik6CisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyAiLnB5IjogKE5PVywgdGVzdF9zcmMpfQorICAgICAgICBzZWxmLmRvVGVzdCgiLnB5IiwgZmlsZXMsIFRFU1RNT0QpCisKKyAgICBkZWYgdGVzdFB5YyhzZWxmKToKKyAgICAgICAgZmlsZXMgPSB7VEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKX0KKyAgICAgICAgc2VsZi5kb1Rlc3QocHljX2V4dCwgZmlsZXMsIFRFU1RNT0QpCisKKyAgICBkZWYgdGVzdEJvdGgoc2VsZik6CisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyAiLnB5IjogKE5PVywgdGVzdF9zcmMpLAorICAgICAgICAgICAgICAgICBURVNUTU9EICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpfQorICAgICAgICBzZWxmLmRvVGVzdChweWNfZXh0LCBmaWxlcywgVEVTVE1PRCkKKworICAgIGRlZiB0ZXN0RW1wdHlQeShzZWxmKToKKyAgICAgICAgZmlsZXMgPSB7VEVTVE1PRCArICIucHkiOiAoTk9XLCAiIil9CisgICAgICAgIHNlbGYuZG9UZXN0KE5vbmUsIGZpbGVzLCBURVNUTU9EKQorCisgICAgZGVmIHRlc3RCYWRNYWdpYyhzZWxmKToKKyAgICAgICAgIyBtYWtlIHB5YyBtYWdpYyB3b3JkIGludmFsaWQsIGZvcmNpbmcgbG9hZGluZyBmcm9tIC5weQorICAgICAgICBtMCA9IG9yZCh0ZXN0X3B5Y1swXSkKKyAgICAgICAgbTAgXj0gMHgwNCAgIyBmbGlwIGFuIGFyYml0cmFyeSBiaXQKKyAgICAgICAgYmFkbWFnaWNfcHljID0gY2hyKG0wKSArIHRlc3RfcHljWzE6XQorICAgICAgICBmaWxlcyA9IHtURVNUTU9EICsgIi5weSI6IChOT1csIHRlc3Rfc3JjKSwKKyAgICAgICAgICAgICAgICAgVEVTVE1PRCArIHB5Y19leHQ6IChOT1csIGJhZG1hZ2ljX3B5Yyl9CisgICAgICAgIHNlbGYuZG9UZXN0KCIucHkiLCBmaWxlcywgVEVTVE1PRCkKKworICAgIGRlZiB0ZXN0QmFkTWFnaWMyKHNlbGYpOgorICAgICAgICAjIG1ha2UgcHljIG1hZ2ljIHdvcmQgaW52YWxpZCwgY2F1c2luZyBhbiBJbXBvcnRFcnJvcgorICAgICAgICBtMCA9IG9yZCh0ZXN0X3B5Y1swXSkKKyAgICAgICAgbTAgXj0gMHgwNCAgIyBmbGlwIGFuIGFyYml0cmFyeSBiaXQKKyAgICAgICAgYmFkbWFnaWNfcHljID0gY2hyKG0wKSArIHRlc3RfcHljWzE6XQorICAgICAgICBmaWxlcyA9IHtURVNUTU9EICsgcHljX2V4dDogKE5PVywgYmFkbWFnaWNfcHljKX0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kb1Rlc3QoIi5weSIsIGZpbGVzLCBURVNUTU9EKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIEltcG9ydEVycm9yOyBpbXBvcnQgZnJvbSBiYWQgcHljIikKKworICAgIGRlZiB0ZXN0QmFkTVRpbWUoc2VsZik6CisgICAgICAgIHQzID0gb3JkKHRlc3RfcHljWzddKQorICAgICAgICB0MyBePSAweDAyICAjIGZsaXAgdGhlIHNlY29uZCBiaXQgLS0gbm90IHRoZSBmaXJzdCBhcyB0aGF0IG9uZQorICAgICAgICAgICAgICAgICAgICAjIGlzbid0IHN0b3JlZCBpbiB0aGUgLnB5J3MgbXRpbWUgaW4gdGhlIHppcCBhcmNoaXZlLgorICAgICAgICBiYWR0aW1lX3B5YyA9IHRlc3RfcHljWzo3XSArIGNocih0MykgKyB0ZXN0X3B5Y1s4Ol0KKyAgICAgICAgZmlsZXMgPSB7VEVTVE1PRCArICIucHkiOiAoTk9XLCB0ZXN0X3NyYyksCisgICAgICAgICAgICAgICAgIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCBiYWR0aW1lX3B5Yyl9CisgICAgICAgIHNlbGYuZG9UZXN0KCIucHkiLCBmaWxlcywgVEVTVE1PRCkKKworICAgIGRlZiB0ZXN0UGFja2FnZShzZWxmKToKKyAgICAgICAgcGFja2RpciA9IFRFU1RQQUNLICsgb3Muc2VwCisgICAgICAgIGZpbGVzID0ge3BhY2tkaXIgKyAiX19pbml0X18iICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpLAorICAgICAgICAgICAgICAgICBwYWNrZGlyICsgVEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKX0KKyAgICAgICAgc2VsZi5kb1Rlc3QocHljX2V4dCwgZmlsZXMsIFRFU1RQQUNLLCBURVNUTU9EKQorCisgICAgZGVmIHRlc3REZWVwUGFja2FnZShzZWxmKToKKyAgICAgICAgcGFja2RpciA9IFRFU1RQQUNLICsgb3Muc2VwCisgICAgICAgIHBhY2tkaXIyID0gcGFja2RpciArIFRFU1RQQUNLMiArIG9zLnNlcAorICAgICAgICBmaWxlcyA9IHtwYWNrZGlyICsgIl9faW5pdF9fIiArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKSwKKyAgICAgICAgICAgICAgICAgcGFja2RpcjIgKyAiX19pbml0X18iICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpLAorICAgICAgICAgICAgICAgICBwYWNrZGlyMiArIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5Yyl9CisgICAgICAgIHNlbGYuZG9UZXN0KHB5Y19leHQsIGZpbGVzLCBURVNUUEFDSywgVEVTVFBBQ0syLCBURVNUTU9EKQorCisgICAgZGVmIHRlc3RaaXBJbXBvcnRlck1ldGhvZHMoc2VsZik6CisgICAgICAgIHBhY2tkaXIgPSBURVNUUEFDSyArIG9zLnNlcAorICAgICAgICBwYWNrZGlyMiA9IHBhY2tkaXIgKyBURVNUUEFDSzIgKyBvcy5zZXAKKyAgICAgICAgZmlsZXMgPSB7cGFja2RpciArICJfX2luaXRfXyIgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5YyksCisgICAgICAgICAgICAgICAgIHBhY2tkaXIyICsgIl9faW5pdF9fIiArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKSwKKyAgICAgICAgICAgICAgICAgcGFja2RpcjIgKyBURVNUTU9EICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpfQorCisgICAgICAgIHogPSBaaXBGaWxlKFRFTVBfWklQLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBuYW1lLCAobXRpbWUsIGRhdGEpIGluIGZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgemluZm8gPSBaaXBJbmZvKG5hbWUsIHRpbWUubG9jYWx0aW1lKG10aW1lKSkKKyAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgorICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCisgICAgICAgICAgICB6LmNsb3NlKCkKKworICAgICAgICAgICAgemkgPSB6aXBpbXBvcnQuemlwaW1wb3J0ZXIoVEVNUF9aSVApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmFyY2hpdmUsIFRFTVBfWklQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKFRFU1RQQUNLKSwgVHJ1ZSkKKyAgICAgICAgICAgIG1vZCA9IHppLmxvYWRfbW9kdWxlKFRFU1RQQUNLKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUoVEVTVFBBQ0spLCBtb2QuX19maWxlX18pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShwYWNrZGlyICsgJ19faW5pdF9fJyksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKHBhY2tkaXIgKyBURVNUUEFDSzIpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKHBhY2tkaXIyICsgVEVTVE1PRCksIEZhbHNlKQorCisgICAgICAgICAgICBtb2RfcGF0aCA9IHBhY2tkaXIyICsgVEVTVE1PRAorICAgICAgICAgICAgbW9kX25hbWUgPSBtb2R1bGVfcGF0aF90b19kb3R0ZWRfbmFtZShtb2RfcGF0aCkKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2RfbmFtZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShURVNUUEFDSyksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9zb3VyY2UobW9kX3BhdGgpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUobW9kX3BhdGgpLCBtb2QuX19maWxlX18pCisgICAgICAgICAgICAjIFRvIHBhc3MgaW4gdGhlIG1vZHVsZSBuYW1lIGluc3RlYWQgb2YgdGhlIHBhdGgsIHdlIG11c3QgdXNlIHRoZSByaWdodCBpbXBvcnRlcgorICAgICAgICAgICAgbG9hZGVyID0gbW9kLl9fbG9hZGVyX18KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldF9zb3VyY2UobW9kX25hbWUpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0X2ZpbGVuYW1lKG1vZF9uYW1lKSwgbW9kLl9fZmlsZV9fKQorCisgICAgICAgICAgICAjIHRlc3QgcHJlZml4IGFuZCBhcmNoaXZlcGF0aCBtZW1iZXJzCisgICAgICAgICAgICB6aTIgPSB6aXBpbXBvcnQuemlwaW1wb3J0ZXIoVEVNUF9aSVAgKyBvcy5zZXAgKyBURVNUUEFDSykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkyLmFyY2hpdmUsIFRFTVBfWklQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aTIucHJlZml4LCBURVNUUEFDSyArIG9zLnNlcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHouY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKFRFTVBfWklQKQorCisgICAgZGVmIHRlc3RaaXBJbXBvcnRlck1ldGhvZHNJblN1YkRpcmVjdG9yeShzZWxmKToKKyAgICAgICAgcGFja2RpciA9IFRFU1RQQUNLICsgb3Muc2VwCisgICAgICAgIHBhY2tkaXIyID0gcGFja2RpciArIFRFU1RQQUNLMiArIG9zLnNlcAorICAgICAgICBmaWxlcyA9IHtwYWNrZGlyMiArICJfX2luaXRfXyIgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5YyksCisgICAgICAgICAgICAgICAgIHBhY2tkaXIyICsgVEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKX0KKworICAgICAgICB6ID0gWmlwRmlsZShURU1QX1pJUCwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCisgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6LndyaXRlc3RyKHppbmZvLCBkYXRhKQorICAgICAgICAgICAgei5jbG9zZSgpCisKKyAgICAgICAgICAgIHppID0gemlwaW1wb3J0LnppcGltcG9ydGVyKFRFTVBfWklQICsgb3Muc2VwICsgcGFja2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuYXJjaGl2ZSwgVEVNUF9aSVApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLnByZWZpeCwgcGFja2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShURVNUUEFDSzIpLCBUcnVlKQorICAgICAgICAgICAgbW9kID0gemkubG9hZF9tb2R1bGUoVEVTVFBBQ0syKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUoVEVTVFBBQ0syKSwgbW9kLl9fZmlsZV9fKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmlzX3BhY2thZ2UoVEVTVFBBQ0syICsgb3Muc2VwICsgJ19faW5pdF9fJyksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKFRFU1RQQUNLMiArIG9zLnNlcCArIFRFU1RNT0QpLCBGYWxzZSkKKworICAgICAgICAgICAgbW9kX3BhdGggPSBURVNUUEFDSzIgKyBvcy5zZXAgKyBURVNUTU9ECisgICAgICAgICAgICBtb2RfbmFtZSA9IG1vZHVsZV9wYXRoX3RvX2RvdHRlZF9uYW1lKG1vZF9wYXRoKQorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RfbmFtZSkKKyAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW21vZF9uYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfc291cmNlKFRFU1RQQUNLMiksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9zb3VyY2UobW9kX3BhdGgpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUobW9kX3BhdGgpLCBtb2QuX19maWxlX18pCisgICAgICAgICAgICAjIFRvIHBhc3MgaW4gdGhlIG1vZHVsZSBuYW1lIGluc3RlYWQgb2YgdGhlIHBhdGgsIHdlIG11c3QgdXNlIHRoZSByaWdodCBpbXBvcnRlcgorICAgICAgICAgICAgbG9hZGVyID0gbW9kLl9fbG9hZGVyX18KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldF9zb3VyY2UobW9kX25hbWUpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0X2ZpbGVuYW1lKG1vZF9uYW1lKSwgbW9kLl9fZmlsZV9fKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgei5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUoVEVNUF9aSVApCisKKyAgICBkZWYgdGVzdEdldERhdGEoc2VsZik6CisgICAgICAgIHogPSBaaXBGaWxlKFRFTVBfWklQLCAidyIpCisgICAgICAgIHouY29tcHJlc3Npb24gPSBzZWxmLmNvbXByZXNzaW9uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSAidGVzdGRhdGEuZGF0IgorICAgICAgICAgICAgZGF0YSA9ICIiLmpvaW4oW2Nocih4KSBmb3IgeCBpbiByYW5nZSgyNTYpXSkgKiA1MDAKKyAgICAgICAgICAgIHoud3JpdGVzdHIobmFtZSwgZGF0YSkKKyAgICAgICAgICAgIHouY2xvc2UoKQorICAgICAgICAgICAgemkgPSB6aXBpbXBvcnQuemlwaW1wb3J0ZXIoVEVNUF9aSVApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHppLmdldF9kYXRhKG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignemlwaW1wb3J0ZXIgb2JqZWN0JywgcmVwcih6aSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB6LmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShURU1QX1pJUCkKKworICAgIGRlZiB0ZXN0SW1wb3J0ZXJBdHRyKHNlbGYpOgorICAgICAgICBzcmMgPSAiIiJpZiAxOiAgIyBpbmRlbnQgaGFjaworICAgICAgICBkZWYgZ2V0X2ZpbGUoKToKKyAgICAgICAgICAgIHJldHVybiBfX2ZpbGVfXworICAgICAgICBpZiBfX2xvYWRlcl9fLmdldF9kYXRhKCJzb21lLmRhdGEiKSAhPSAic29tZSBkYXRhIjoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yLCAiYmFkIGRhdGEiXG4iIiIKKyAgICAgICAgcHljID0gbWFrZV9weWMoY29tcGlsZShzcmMsICI8Pz8/PiIsICJleGVjIiksIE5PVykKKyAgICAgICAgZmlsZXMgPSB7VEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHB5YyksCisgICAgICAgICAgICAgICAgICJzb21lLmRhdGEiOiAoTk9XLCAic29tZSBkYXRhIil9CisgICAgICAgIHNlbGYuZG9UZXN0KHB5Y19leHQsIGZpbGVzLCBURVNUTU9EKQorCisgICAgZGVmIHRlc3RJbXBvcnRfV2l0aFN0dWZmKHNlbGYpOgorICAgICAgICAjIHRyeSBpbXBvcnRpbmcgZnJvbSBhIHppcGZpbGUgd2hpY2ggY29udGFpbnMgYWRkaXRpb25hbAorICAgICAgICAjIHN0dWZmIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUKKyAgICAgICAgZmlsZXMgPSB7VEVTVE1PRCArICIucHkiOiAoTk9XLCB0ZXN0X3NyYyl9CisgICAgICAgIHNlbGYuZG9UZXN0KCIucHkiLCBmaWxlcywgVEVTVE1PRCwKKyAgICAgICAgICAgICAgICAgICAgc3R1ZmY9IlNvbWUgU3R1ZmYiKjMxKQorCisgICAgZGVmIGFzc2VydE1vZHVsZVNvdXJjZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlKG1vZHVsZSksIHRlc3Rfc3JjKQorCisgICAgZGVmIHRlc3RHZXRTb3VyY2Uoc2VsZik6CisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyAiLnB5IjogKE5PVywgdGVzdF9zcmMpfQorICAgICAgICBzZWxmLmRvVGVzdCgiLnB5IiwgZmlsZXMsIFRFU1RNT0QsIGNhbGw9c2VsZi5hc3NlcnRNb2R1bGVTb3VyY2UpCisKKyAgICBkZWYgdGVzdEdldENvbXBpbGVkU291cmNlKHNlbGYpOgorICAgICAgICBweWMgPSBtYWtlX3B5Yyhjb21waWxlKHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpLCBOT1cpCisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyAiLnB5IjogKE5PVywgdGVzdF9zcmMpLAorICAgICAgICAgICAgICAgICBURVNUTU9EICsgcHljX2V4dDogKE5PVywgcHljKX0KKyAgICAgICAgc2VsZi5kb1Rlc3QocHljX2V4dCwgZmlsZXMsIFRFU1RNT0QsIGNhbGw9c2VsZi5hc3NlcnRNb2R1bGVTb3VyY2UpCisKKyAgICBkZWYgcnVuRG9jdGVzdChzZWxmLCBjYWxsYmFjayk6CisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyAiLnB5IjogKE5PVywgdGVzdF9zcmMpLAorICAgICAgICAgICAgICAgICAieHl6LnR4dCI6IChOT1csICI+Pj4gbG9nLmFwcGVuZChUcnVlKVxuIil9CisgICAgICAgIHNlbGYuZG9UZXN0KCIucHkiLCBmaWxlcywgVEVTVE1PRCwgY2FsbD1jYWxsYmFjaykKKworICAgIGRlZiBkb0RvY3Rlc3RGaWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIGxvZyA9IFtdCisgICAgICAgIG9sZF9tYXN0ZXIsIGRvY3Rlc3QubWFzdGVyID0gZG9jdGVzdC5tYXN0ZXIsIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZG9jdGVzdC50ZXN0ZmlsZSgKKyAgICAgICAgICAgICAgICAneHl6LnR4dCcsIHBhY2thZ2U9bW9kdWxlLCBtb2R1bGVfcmVsYXRpdmU9VHJ1ZSwKKyAgICAgICAgICAgICAgICBnbG9icz1sb2NhbHMoKQorICAgICAgICAgICAgKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZG9jdGVzdC5tYXN0ZXIgPSBvbGRfbWFzdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLFtUcnVlXSkKKworICAgIGRlZiB0ZXN0RG9jdGVzdEZpbGUoc2VsZik6CisgICAgICAgIHNlbGYucnVuRG9jdGVzdChzZWxmLmRvRG9jdGVzdEZpbGUpCisKKyAgICBkZWYgZG9Eb2N0ZXN0U3VpdGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgbG9nID0gW10KKyAgICAgICAgZG9jdGVzdC5Eb2NGaWxlVGVzdCgKKyAgICAgICAgICAgICd4eXoudHh0JywgcGFja2FnZT1tb2R1bGUsIG1vZHVsZV9yZWxhdGl2ZT1UcnVlLAorICAgICAgICAgICAgZ2xvYnM9bG9jYWxzKCkKKyAgICAgICAgKS5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZyxbVHJ1ZV0pCisKKyAgICBkZWYgdGVzdERvY3Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5Eb2N0ZXN0KHNlbGYuZG9Eb2N0ZXN0U3VpdGUpCisKKyAgICBkZWYgZG9UcmFjZWJhY2soc2VsZiwgbW9kdWxlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlLmRvX3JhaXNlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9uZXh0CisKKyAgICAgICAgICAgIGYsbG5vLG4sbGluZSA9IGV4dHJhY3RfdGIodGIsIDEpWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIHJhaXNlX3NyYy5zdHJpcCgpKQorCisgICAgICAgICAgICBmLGxubyxuLGxpbmUgPSBleHRyYWN0X3N0YWNrKHRiLnRiX2ZyYW1lLCAxKVswXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCByYWlzZV9zcmMuc3RyaXAoKSkKKworICAgICAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHByaW50X3RiKHRiLCAxLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZ2V0dmFsdWUoKS5lbmRzd2l0aChyYWlzZV9zcmMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRoaXMgb3VnaHQgdG8gYmUgaW1wb3NzaWJsZSIpCisKKyAgICBkZWYgdGVzdFRyYWNlYmFjayhzZWxmKToKKyAgICAgICAgZmlsZXMgPSB7VEVTVE1PRCArICIucHkiOiAoTk9XLCByYWlzZV9zcmMpfQorICAgICAgICBzZWxmLmRvVGVzdChOb25lLCBmaWxlcywgVEVTVE1PRCwgY2FsbD1zZWxmLmRvVHJhY2ViYWNrKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKK2NsYXNzIENvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZShVbmNvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZSk6CisgICAgY29tcHJlc3Npb24gPSBaSVBfREVGTEFURUQKKworCitjbGFzcyBCYWRGaWxlWmlwSW1wb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRaaXBGYWlsdXJlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwaW1wb3J0LlppcEltcG9ydEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBpbXBvcnQuemlwaW1wb3J0ZXIsIGZpbGVuYW1lKQorCisgICAgZGVmIHRlc3ROb0ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0WmlwRmFpbHVyZSgnQWRmamRrRkpLREZKamRrbGZqcycpCisKKyAgICBkZWYgdGVzdEVtcHR5RmlsZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0WmlwRmFpbHVyZSgnJykKKworICAgIGRlZiB0ZXN0QmFkQXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6aXBpbXBvcnQuemlwaW1wb3J0ZXIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgemlwaW1wb3J0LnppcGltcG9ydGVyLCBURVNUTU9ELCBrd2Q9Tm9uZSkKKworICAgIGRlZiB0ZXN0RmlsZW5hbWVUb29Mb25nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFppcEZhaWx1cmUoJ0EnICogMzMwMDApCisKKyAgICBkZWYgdGVzdEVtcHR5RmlsZShzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhURVNUTU9EKQorICAgICAgICBvcGVuKFRFU1RNT0QsICd3KycpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRaaXBGYWlsdXJlKFRFU1RNT0QpCisKKyAgICBkZWYgdGVzdEZpbGVVbnJlYWRhYmxlKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKFRFU1RNT0QpCisgICAgICAgIGZkID0gb3Mub3BlbihURVNUTU9ELCBvcy5PX0NSRUFULCAwMDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRaaXBGYWlsdXJlKFRFU1RNT0QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIElmIHdlIGxlYXZlICJ0aGUgcmVhZC1vbmx5IGJpdCIgc2V0IG9uIFdpbmRvd3MsIG5vdGhpbmcgY2FuCisgICAgICAgICAgICAjIGRlbGV0ZSBURVNUTU9ELCBhbmQgbGF0ZXIgdGVzdHMgc3VmZmVyIGJvZ3VzIGZhaWx1cmVzLgorICAgICAgICAgICAgb3MuY2htb2QoVEVTVE1PRCwgMDY2NikKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoVEVTVE1PRCkKKworICAgIGRlZiB0ZXN0Tm90WmlwRmlsZShzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhURVNUTU9EKQorICAgICAgICBmcCA9IG9wZW4oVEVTVE1PRCwgJ3crJykKKyAgICAgICAgZnAud3JpdGUoJ2EnICogMjIpCisgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRaaXBGYWlsdXJlKFRFU1RNT0QpCisKKyAgICAjIFhYWDogZGlzYWJsZWQgdW50aWwgdGhpcyB3b3JrcyBvbiBCaWctZW5kaWFuIG1hY2hpbmVzCisgICAgZGVmIF90ZXN0Qm9ndXNaaXBGaWxlKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKFRFU1RNT0QpCisgICAgICAgIGZwID0gb3BlbihURVNUTU9ELCAndysnKQorICAgICAgICBmcC53cml0ZShzdHJ1Y3QucGFjaygnPUknLCAweDA2MDU0QjUwKSkKKyAgICAgICAgZnAud3JpdGUoJ2EnICogMTgpCisgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgeiA9IHppcGltcG9ydC56aXBpbXBvcnRlcihURVNUTU9EKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgei5maW5kX21vZHVsZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgei5sb2FkX21vZHVsZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgei5pc19wYWNrYWdlLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6LmdldF9jb2RlLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6LmdldF9kYXRhLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6LmdldF9zb3VyY2UsIE5vbmUpCisKKyAgICAgICAgICAgIGVycm9yID0gemlwaW1wb3J0LlppcEltcG9ydEVycm9yCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHouZmluZF9tb2R1bGUoJ2FiYycpLCBOb25lKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5sb2FkX21vZHVsZSwgJ2FiYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5nZXRfY29kZSwgJ2FiYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB6LmdldF9kYXRhLCAnYWJjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmdldF9zb3VyY2UsICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHouaXNfcGFja2FnZSwgJ2FiYycpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB6aXBpbXBvcnQuX3ppcF9kaXJlY3RvcnlfY2FjaGUuY2xlYXIoKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0cnk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICAgIFVuY29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlLAorICAgICAgICAgICAgICBDb21wcmVzc2VkWmlwSW1wb3J0VGVzdENhc2UsCisgICAgICAgICAgICAgIEJhZEZpbGVaaXBJbXBvcnRUZXN0Q2FzZSwKKyAgICAgICAgICAgICkKKyAgICBmaW5hbGx5OgorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKFRFU1RNT0QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2MTdhYgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CkBAIC0wLDAgKzEsMjUwIEBACisjIFRoaXMgdGVzdCBtb2R1bGUgY292ZXJzIHN1cHBvcnQgaW4gdmFyaW91cyBwYXJ0cyBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeQorIyBmb3Igd29ya2luZyB3aXRoIG1vZHVsZXMgbG9jYXRlZCBpbnNpZGUgemlwZmlsZXMKKyMgVGhlIHRlc3RzIGFyZSBjZW50cmFsaXNlZCBpbiB0aGlzIGZhc2hpb24gdG8gbWFrZSBpdCBlYXN5IHRvIGRyb3AgdGhlbQorIyBpZiBhIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCB6aXBpbXBvcnQKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworaW1wb3J0IHRleHR3cmFwCitpbXBvcnQgemlwZmlsZQoraW1wb3J0IHppcGltcG9ydAoraW1wb3J0IGRvY3Rlc3QKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgcGRiCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAoc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbiwgcnVuX3B5dGhvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kaXIsIG1ha2Vfc2NyaXB0LCBtYWtlX3ppcF9zY3JpcHQpCisKK3ZlcmJvc2UgPSB0ZXN0LnRlc3Rfc3VwcG9ydC52ZXJib3NlCisKKyMgTGlicmFyeSBtb2R1bGVzIGNvdmVyZWQgYnkgdGhpcyB0ZXN0IHNldAorIyAgcGRiIChJc3N1ZSA0MjAxKQorIyAgaW5zcGVjdCAoSXNzdWUgNDIyMykKKyMgIGRvY3Rlc3QgKElzc3VlIDQxOTcpCisKKyMgT3RoZXIgdGVzdCBtb2R1bGVzIHdpdGggemlwaW1wb3J0IHJlbGF0ZWQgdGVzdHMKKyMgIHRlc3RfemlwaW1wb3J0IChvZiBjb3Vyc2UhKQorIyAgdGVzdF9jbWRfbGluZV9zY3JpcHQgKGNvdmVycyB0aGUgemlwaW1wb3J0IHN1cHBvcnQgaW4gcnVucHkpCisKKyMgUmV0cmlldmUgc29tZSBoZWxwZXJzIGZyb20gb3RoZXIgdGVzdCBjYXNlcworZnJvbSB0ZXN0IGltcG9ydCAodGVzdF9kb2N0ZXN0LCBzYW1wbGVfZG9jdGVzdCwgc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jdGVzdHMsCisgICAgICAgICAgICAgICAgICBzYW1wbGVfZG9jdGVzdF9ub19kb2NzdHJpbmdzKQorZnJvbSB0ZXN0LnRlc3RfaW1wb3J0aG9va3MgaW1wb3J0IEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlCisKKworZGVmIF9ydW5fb2JqZWN0X2RvY3Rlc3Qob2JqLCBtb2R1bGUpOgorICAgICMgRGlyZWN0IGRvY3Rlc3Qgb3V0cHV0IChub3JtYWxseSBqdXN0IGVycm9ycykgdG8gcmVhbCBzdGRvdXQ7IGRvY3Rlc3QKKyAgICAjIG91dHB1dCBzaG91bGRuJ3QgYmUgY29tcGFyZWQgYnkgcmVncnRlc3QuCisgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgc3lzLnN0ZG91dCA9IHRlc3QudGVzdF9zdXBwb3J0LmdldF9vcmlnaW5hbF9zdGRvdXQoKQorICAgIHRyeToKKyAgICAgICAgZmluZGVyID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKHZlcmJvc2U9dmVyYm9zZSwgcmVjdXJzZT1GYWxzZSkKKyAgICAgICAgcnVubmVyID0gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9dmVyYm9zZSkKKyAgICAgICAgIyBVc2UgdGhlIG9iamVjdCdzIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGlmIGl0IGhhcyBvbmUKKyAgICAgICAgIyBPdGhlcndpc2UsIHVzZSB0aGUgbW9kdWxlJ3MgbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gIiVzLiVzIiAlIChvYmouX19tb2R1bGVfXywgb2JqLl9fbmFtZV9fKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCisgICAgICAgIGZvciBleGFtcGxlIGluIGZpbmRlci5maW5kKG9iaiwgbmFtZSwgbW9kdWxlKToKKyAgICAgICAgICAgIHJ1bm5lci5ydW4oZXhhbXBsZSkKKyAgICAgICAgZiwgdCA9IHJ1bm5lci5mYWlsdXJlcywgcnVubmVyLnRyaWVzCisgICAgICAgIGlmIGY6CisgICAgICAgICAgICByYWlzZSB0ZXN0LnRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkKCIlZCBvZiAlZCBkb2N0ZXN0cyBmYWlsZWQiICUgKGYsIHQpKQorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdkb2N0ZXN0ICglcykgLi4uICVkIHRlc3RzIHdpdGggemVybyBmYWlsdXJlcycgJSAobW9kdWxlLl9fbmFtZV9fLCB0KQorICAgIHJldHVybiBmLCB0CisKKworCitjbGFzcyBaaXBTdXBwb3J0VGVzdHMoSW1wb3J0SG9va3NCYXNlVGVzdENhc2UpOgorICAgICMgV2UgdXNlIHRoZSBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSB0byByZXN0b3JlCisgICAgIyB0aGUgc3RhdGUgb2YgdGhlIGltcG9ydCByZWxhdGVkIGluZm9ybWF0aW9uCisgICAgIyBpbiB0aGUgc3lzIG1vZHVsZSBhZnRlciBlYWNoIHRlc3QKKyAgICAjIFdlIGFsc28gY2xlYXIgdGhlIGxpbmVjYWNoZSBhbmQgemlwaW1wb3J0IGNhY2hlCisgICAgIyBqdXN0IHRvIGF2b2lkIGFueSBib2d1cyBlcnJvcnMgZHVlIHRvIG5hbWUgcmV1c2UgaW4gdGhlIHRlc3RzCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBsaW5lY2FjaGUuY2xlYXJjYWNoZSgpCisgICAgICAgIHppcGltcG9ydC5femlwX2RpcmVjdG9yeV9jYWNoZS5jbGVhcigpCisgICAgICAgIEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlLnNldFVwKHNlbGYpCisKKworICAgIGRlZiB0ZXN0X2luc3BlY3RfZ2V0c291cmNlX2lzc3VlNDIyMyhzZWxmKToKKyAgICAgICAgdGVzdF9zcmMgPSAiZGVmIGZvbygpOiBwYXNzXG4iCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkOgorICAgICAgICAgICAgaW5pdF9uYW1lID0gbWFrZV9zY3JpcHQoZCwgJ19faW5pdF9fJywgdGVzdF9zcmMpCisgICAgICAgICAgICBuYW1lX2luX3ppcCA9IG9zLnBhdGguam9pbignemlwX3BrZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGluaXRfbmFtZSkpCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgJ3Rlc3RfemlwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfbmFtZSwgbmFtZV9pbl96aXApCisgICAgICAgICAgICBvcy5yZW1vdmUoaW5pdF9uYW1lKQorICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHppcF9uYW1lKQorICAgICAgICAgICAgaW1wb3J0IHppcF9wa2cKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2UoemlwX3BrZy5mb28pLCB0ZXN0X3NyYykKKworICAgIGRlZiB0ZXN0X2RvY3Rlc3RfaXNzdWU0MTk3KHNlbGYpOgorICAgICAgICAjIFRvIGF2b2lkIGhhdmluZyB0byBrZWVwIHR3byBjb3BpZXMgb2YgdGhlIGRvY3Rlc3QgbW9kdWxlJ3MKKyAgICAgICAgIyB1bml0IHRlc3RzIGluIHN5bmMsIHRoaXMgdGVzdCB3b3JrcyBieSB0YWtpbmcgdGhlIHNvdXJjZSBvZgorICAgICAgICAjIHRlc3RfZG9jdGVzdCBpdHNlbGYsIHJld3JpdGluZyBpdCBhIGJpdCB0byBjb3BlIHdpdGggYSBuZXcKKyAgICAgICAgIyBsb2NhdGlvbiwgYW5kIHRoZW4gdGhyb3dpbmcgaXQgaW4gYSB6aXAgZmlsZSB0byBtYWtlIHN1cmUKKyAgICAgICAgIyBldmVyeXRoaW5nIHN0aWxsIHdvcmtzIGNvcnJlY3RseQorICAgICAgICB0ZXN0X3NyYyA9IGluc3BlY3QuZ2V0c291cmNlKHRlc3RfZG9jdGVzdCkKKyAgICAgICAgdGVzdF9zcmMgPSB0ZXN0X3NyYy5yZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHRlc3QgaW1wb3J0IHRlc3RfZG9jdGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCB0ZXN0X3ppcHBlZF9kb2N0ZXN0IGFzIHRlc3RfZG9jdGVzdCIpCisgICAgICAgIHRlc3Rfc3JjID0gdGVzdF9zcmMucmVwbGFjZSgidGVzdC50ZXN0X2RvY3Rlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RfemlwcGVkX2RvY3Rlc3QiKQorICAgICAgICB0ZXN0X3NyYyA9IHRlc3Rfc3JjLnJlcGxhY2UoInRlc3Quc2FtcGxlX2RvY3Rlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhbXBsZV96aXBwZWRfZG9jdGVzdCIpCisgICAgICAgICMgVGhlIHNhbXBsZSBkb2N0ZXN0IGZpbGVzIHJld3JpdHRlbiB0byBpbmNsdWRlIGluIHRoZSB6aXBwZWQgdmVyc2lvbi4KKyAgICAgICAgc2FtcGxlX3NvdXJjZXMgPSB7fQorICAgICAgICBmb3IgbW9kIGluIFtzYW1wbGVfZG9jdGVzdCwgc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jdGVzdHMsCisgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9kb2N0ZXN0X25vX2RvY3N0cmluZ3NdOgorICAgICAgICAgICAgc3JjID0gaW5zcGVjdC5nZXRzb3VyY2UobW9kKQorICAgICAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoInRlc3QudGVzdF9kb2N0ZXN0IiwgInRlc3RfemlwcGVkX2RvY3Rlc3QiKQorICAgICAgICAgICAgIyBSZXdyaXRlIHRoZSBtb2R1bGUgbmFtZSBzbyB0aGF0LCBmb3IgZXhhbXBsZSwKKyAgICAgICAgICAgICMgInRlc3Quc2FtcGxlX2RvY3Rlc3QiIGJlY29tZXMgInNhbXBsZV96aXBwZWRfZG9jdGVzdCIuCisgICAgICAgICAgICBtb2RfbmFtZSA9IG1vZC5fX25hbWVfXy5zcGxpdCgiLiIpWy0xXQorICAgICAgICAgICAgbW9kX25hbWUgPSBtb2RfbmFtZS5yZXBsYWNlKCJzYW1wbGVfIiwgInNhbXBsZV96aXBwZWRfIikKKyAgICAgICAgICAgIHNhbXBsZV9zb3VyY2VzW21vZF9uYW1lXSA9IHNyYworCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBtYWtlX3NjcmlwdChkLCAndGVzdF96aXBwZWRfZG9jdGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3JjKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KGQsICd0ZXN0X3ppcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHogPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICdhJykKKyAgICAgICAgICAgIGZvciBtb2RfbmFtZSwgc3JjIGluIHNhbXBsZV9zb3VyY2VzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgei53cml0ZXN0cihtb2RfbmFtZSArICIucHkiLCBzcmMpCisgICAgICAgICAgICB6LmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICdyJykKKyAgICAgICAgICAgICAgICBwcmludCAnQ29udGVudHMgb2YgJXI6JyAlIHppcF9uYW1lCisgICAgICAgICAgICAgICAgemlwX2ZpbGUucHJpbnRkaXIoKQorICAgICAgICAgICAgICAgIHppcF9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCB6aXBfbmFtZSkKKyAgICAgICAgICAgIGltcG9ydCB0ZXN0X3ppcHBlZF9kb2N0ZXN0CisgICAgICAgICAgICAjIFNvbWUgb2YgdGhlIGRvYyB0ZXN0cyBkZXBlbmQgb24gdGhlIGNvbG9jYXRlZCB0ZXh0IGZpbGVzCisgICAgICAgICAgICAjIHdoaWNoIGFyZW4ndCBhdmFpbGFibGUgdG8gdGhlIHppcHBlZCB2ZXJzaW9uICh0aGUgZG9jdGVzdAorICAgICAgICAgICAgIyBtb2R1bGUgY3VycmVudGx5IHJlcXVpcmVzIHJlYWwgZmlsZW5hbWVzIGZvciBub24tZW1iZWRkZWQKKyAgICAgICAgICAgICMgdGVzdHMpLiBTbyB3ZSdyZSBmb3JjZWQgdG8gYmUgc2VsZWN0aXZlIGFib3V0IHdoaWNoIHRlc3RzCisgICAgICAgICAgICAjIHRvIHJ1bi4KKyAgICAgICAgICAgICMgZG9jdGVzdCBjb3VsZCByZWFsbHkgdXNlIHNvbWUgQVBJcyB3aGljaCB0YWtlIGEgdGV4dAorICAgICAgICAgICAgIyBzdHJpbmcgb3IgYSBmaWxlIG9iamVjdCBpbnN0ZWFkIG9mIGEgZmlsZW5hbWUuLi4KKyAgICAgICAgICAgIGtub3duX2dvb2RfdGVzdHMgPSBbCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZUNsYXNzLk5lc3RlZENsYXNzLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3MuX19pbml0X18sCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5fX2luaXRfXywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZUNsYXNzLmFfY2xhc3NtZXRob2QsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5hX3Byb3BlcnR5LAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuYV9zdGF0aWNtZXRob2QsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5kb3VibGUsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5nZXQsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVOZXdTdHlsZUNsYXNzLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlTmV3U3R5bGVDbGFzcy5fX2luaXRfXywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZU5ld1N0eWxlQ2xhc3MuZG91YmxlLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlTmV3U3R5bGVDbGFzcy5nZXQsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5vbGRfdGVzdDEsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5vbGRfdGVzdDIsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5vbGRfdGVzdDMsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5vbGRfdGVzdDQsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5zYW1wbGVfZnVuYywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdCwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFBhcnNlciwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFJ1bm5lci5iYXNpY3MsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIuZXhjZXB0aW9ucywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFJ1bm5lci5vcHRpb25fZGlyZWN0aXZlcywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFJ1bm5lci5vcHRpb25mbGFncywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFJ1bm5lci52ZXJib3NlX2ZsYWcsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0V4YW1wbGUsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X2RlYnVnLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9wZGJfc2V0X3RyYWNlLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9wZGJfc2V0X3RyYWNlX25lc3RlZCwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfdGVzdHNvdXJjZSwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfdHJhaWxpbmdfc3BhY2VfaW5fdGVzdCwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFN1aXRlLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9Eb2NUZXN0RmluZGVyLAorICAgICAgICAgICAgXQorICAgICAgICAgICAgIyBUaGVzZSByZW1haW5pbmcgdGVzdHMgYXJlIHRoZSBvbmVzIHdoaWNoIG5lZWQgYWNjZXNzCisgICAgICAgICAgICAjIHRvIHRoZSBkYXRhIGZpbGVzLCBzbyB3ZSBkb24ndCBydW4gdGhlbQorICAgICAgICAgICAgZmFpbF9kdWVfdG9fbWlzc2luZ19kYXRhX2ZpbGVzID0gWworICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9Eb2NGaWxlU3VpdGUsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X3Rlc3RmaWxlLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF91bml0dGVzdF9yZXBvcnRmbGFncywKKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgICMgTmVlZGVkIGZvciB0ZXN0X0RvY1Rlc3RQYXJzZXIgYW5kIHRlc3RfZGVidWcKKyAgICAgICAgICAgIGRlcHJlY2F0aW9ucyA9IFtdCisgICAgICAgICAgICBpZiBfX2RlYnVnX186CisgICAgICAgICAgICAgICAgIyBJZ25vcmUgYWxsIHdhcm5pbmdzIGFib3V0IHRoZSB1c2Ugb2YgY2xhc3MgVGVzdGVyIGluIHRoaXMgbW9kdWxlLgorICAgICAgICAgICAgICAgIGRlcHJlY2F0aW9ucy5hcHBlbmQoKCJjbGFzcyBUZXN0ZXIgaXMgZGVwcmVjYXRlZCIsIERlcHJlY2F0aW9uV2FybmluZykpCisgICAgICAgICAgICBpZiBzeXMucHkza3dhcm5pbmc6CisgICAgICAgICAgICAgICAgZGVwcmVjYXRpb25zICs9IFsKKyAgICAgICAgICAgICAgICAgICAgKCJiYWNrcXVvdGUgbm90IHN1cHBvcnRlZCIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICAgICAgICAgICAgICAoImV4ZWNmaWxlLi4gbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZyldCisgICAgICAgICAgICB3aXRoIHRlc3QudGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCpkZXByZWNhdGlvbnMpOgorICAgICAgICAgICAgICAgIGZvciBvYmogaW4ga25vd25fZ29vZF90ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgX3J1bl9vYmplY3RfZG9jdGVzdChvYmosIHRlc3RfemlwcGVkX2RvY3Rlc3QpCisKKyAgICBkZWYgdGVzdF9kb2N0ZXN0X21haW5faXNzdWU0MTk3KHNlbGYpOgorICAgICAgICB0ZXN0X3NyYyA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgICAgIGNsYXNzIFRlc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAiPj4+ICdsaW5lIDInIgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBkb2N0ZXN0CisgICAgICAgICAgICAgICAgICAgIGRvY3Rlc3QudGVzdG1vZCgpCisgICAgICAgICAgICAgICAgICAgICIiIikKKyAgICAgICAgcGF0dGVybiA9ICdGaWxlICIlcyIsIGxpbmUgMiwgaW4gJXMnCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBtYWtlX3NjcmlwdChkLCAnc2NyaXB0JywgdGVzdF9zcmMpCisgICAgICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBydW5fcHl0aG9uKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBwYXR0ZXJuICUgKHNjcmlwdF9uYW1lLCAiX19tYWluX18uVGVzdCIpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJFeHBlY3RlZCBsaW5lIiwgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICBwcmludCAiR290IHN0ZG91dDoiCisgICAgICAgICAgICAgICAgcHJpbnQgZGF0YQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgZGF0YSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChkLCAidGVzdF96aXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsICdfX21haW5fXy5weScpCisgICAgICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBydW5fcHl0aG9uKHppcF9uYW1lKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBwYXR0ZXJuICUgKHJ1bl9uYW1lLCAiX19tYWluX18uVGVzdCIpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJFeHBlY3RlZCBsaW5lIiwgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICBwcmludCAiR290IHN0ZG91dDoiCisgICAgICAgICAgICAgICAgcHJpbnQgZGF0YQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgZGF0YSkKKworICAgIGRlZiB0ZXN0X3BkYl9pc3N1ZTQyMDEoc2VsZik6CisgICAgICAgIHRlc3Rfc3JjID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICBpbXBvcnQgcGRiCisgICAgICAgICAgICAgICAgICAgIHBkYi5ydW5jYWxsKGYpCisgICAgICAgICAgICAgICAgICAgICIiIikKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIGQ6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IG1ha2Vfc2NyaXB0KGQsICdzY3JpcHQnLCB0ZXN0X3NyYykKKyAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oc2NyaXB0X25hbWUpCisgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdsXG4nKQorICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNjcmlwdF9uYW1lLCBkYXRhKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KGQsICJ0ZXN0X3ppcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgJ19fbWFpbl9fLnB5JykKKyAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oemlwX25hbWUpCisgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdsXG4nKQorICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHJ1bl9uYW1lLCBkYXRhKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoWmlwU3VwcG9ydFRlc3RzKQorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdF96bGliLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfemxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2RmZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RfemxpYi5weQpAQCAtMCwwICsxLDYwOSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgdW5saW5rLCByZXF1aXJlcworaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgcmFuZG9tCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBwcmVjaXNpb25iaWdtZW10ZXN0LCBfMUcsIF80RworaW1wb3J0IHN5cworCit0cnk6CisgICAgaW1wb3J0IG1tYXAKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBtbWFwID0gTm9uZQorCit6bGliID0gaW1wb3J0X21vZHVsZSgnemxpYicpCisKKworY2xhc3MgQ2hlY2tzdW1UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBjaGVja3N1bSB0ZXN0IGNhc2VzCisgICAgZGVmIHRlc3RfY3JjMzJzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKCIiKSwgemxpYi5jcmMzMigiIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6bGliLmNyYzMyKCJhYmMiLCAweGZmZmZmZmZmKSkKKworICAgIGRlZiB0ZXN0X2NyYzMyZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5jcmMzMigiIiwgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5jcmMzMigiIiwgMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5jcmMzMigiIiwgNDMyKSwgNDMyKQorCisgICAgZGVmIHRlc3RfYWRsZXIzMnN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuYWRsZXIzMigiIiksIHpsaWIuYWRsZXIzMigiIiwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6bGliLmFkbGVyMzIoImFiYyIsIDB4ZmZmZmZmZmYpKQorCisgICAgZGVmIHRlc3RfYWRsZXIzMmVtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuYWRsZXIzMigiIiwgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5hZGxlcjMyKCIiLCAxKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmFkbGVyMzIoIiIsIDQzMiksIDQzMikKKworICAgIGRlZiBhc3NlcnRFcXVhbDMyKHNlbGYsIHNlZW4sIGV4cGVjdGVkKToKKyAgICAgICAgIyAzMi1iaXQgdmFsdWVzIG1hc2tlZCAtLSBjaGVja3N1bXMgb24gMzItIHZzIDY0LSBiaXQgbWFjaGluZXMKKyAgICAgICAgIyBUaGlzIGlzIGltcG9ydGFudCBpZiBiaXQgMzEgKDB4MDgwMDAwMDBMKSBpcyBzZXQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VlbiAmIDB4MEZGRkZGRkZGTCwgZXhwZWN0ZWQgJiAweDBGRkZGRkZGRkwpCisKKyAgICBkZWYgdGVzdF9wZW5ndWlucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbDMyKHpsaWIuY3JjMzIoInBlbmd1aW4iLCAwKSwgMHgwZTVjMWExMjBMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsMzIoemxpYi5jcmMzMigicGVuZ3VpbiIsIDEpLCAweDQzYjZhYTk0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsMzIoemxpYi5hZGxlcjMyKCJwZW5ndWluIiwgMCksIDB4MGJjZjAyZjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwzMih6bGliLmFkbGVyMzIoInBlbmd1aW4iLCAxKSwgMHgwYmQ2MDJmNykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoInBlbmd1aW4iKSwgemxpYi5jcmMzMigicGVuZ3VpbiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuYWRsZXIzMigicGVuZ3VpbiIpLHpsaWIuYWRsZXIzMigicGVuZ3VpbiIsMSkpCisKKyAgICBkZWYgdGVzdF9hYmNkZWZnaGlqa2xtbm9wKHNlbGYpOgorICAgICAgICAiIiJ0ZXN0IGlzc3VlMTIwMiBjb21wbGlhbmNlOiBzaWduZWQgY3JjMzIsIGFkbGVyMzIgaW4gMi54IiIiCisgICAgICAgIGZvbyA9ICdhYmNkZWZnaGlqa2xtbm9wJworICAgICAgICAjIGV4cGxpY2l0bHkgdGVzdCBzaWduZWQgYmVoYXZpb3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKGZvbyksIC0xODA4MDg4OTQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoJ3NwYW0nKSwgMTEzODQyNTY2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmFkbGVyMzIoZm9vK2ZvbyksIC03MjE0MTY5NDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5hZGxlcjMyKCdzcGFtJyksIDcyMjg2NjQyKQorCisgICAgZGVmIHRlc3Rfc2FtZV9hc19iaW5hc2NpaV9jcmMzMihzZWxmKToKKyAgICAgICAgZm9vID0gJ2FiY2RlZmdoaWprbG1ub3AnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuY3JjMzIoZm9vKSwgemxpYi5jcmMzMihmb28pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmNyYzMyKCdzcGFtJyksIHpsaWIuY3JjMzIoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2NyY19pdl9pbnB1dChzZWxmKToKKyAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgY3JjIHN0YXRlIHNob3VsZCBiZQorICAgICAgICAjIC0yKiozMSB0aHJvdWdoIDIqKjMyLTEgdG8gYWxsb3cgaW5wdXRzIGFydGlmaWNhbGx5IGNvbnN0cmFpbmVkCisgICAgICAgICMgdG8gYSBzaWduZWQgMzItYml0IGludGVnZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5jcmMzMignaGFtJywgLTEpLCB6bGliLmNyYzMyKCdoYW0nLCAweGZmZmZmZmZmTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5jcmMzMignc3BhbScsIC0zMTQxNTkzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB6bGliLmNyYzMyKCdzcGFtJywgIDB4ZmZkMDEwMjdMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKCdzcGFtJywgLSgyKiozMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWIuY3JjMzIoJ3NwYW0nLCAgKDIqKjMxKSkpCisKKworY2xhc3MgRXhjZXB0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgbWFrZSBzdXJlIHdlIGdlbmVyYXRlIHNvbWUgZXhwZWN0ZWQgZXJyb3JzCisgICAgZGVmIHRlc3RfYmFkbGV2ZWwoc2VsZik6CisgICAgICAgICMgc3BlY2lmeWluZyBjb21wcmVzc2lvbiBsZXZlbCBvdXQgb2YgcmFuZ2UgY2F1c2VzIGFuIGVycm9yCisgICAgICAgICMgKGJ1dCAtMSBpcyBaX0RFRkFVTFRfQ09NUFJFU1NJT04gYW5kIGFwcGFyZW50bHkgdGhlIHpsaWIKKyAgICAgICAgIyBhY2NlcHRzIDAgdG9vKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6bGliLmVycm9yLCB6bGliLmNvbXByZXNzLCAnRVJST1InLCAxMCkKKworICAgIGRlZiB0ZXN0X2JhZGNvbXByZXNzb2JqKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSBmYWlsdXJlIG9uIGJ1aWxkaW5nIGNvbXByZXNzIG9iamVjdCB3aXRoIGJhZCBwYXJhbXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgemxpYi5jb21wcmVzc29iaiwgMSwgemxpYi5ERUZMQVRFRCwgMCkKKyAgICAgICAgIyBzcGVjaWZ5aW5nIHRvdGFsIGJpdHMgdG9vIGxhcmdlIGNhdXNlcyBhbiBlcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHpsaWIuY29tcHJlc3NvYmosIDEsIHpsaWIuREVGTEFURUQsIHpsaWIuTUFYX1dCSVRTICsgMSkKKworICAgIGRlZiB0ZXN0X2JhZGRlY29tcHJlc3NvYmooc2VsZik6CisgICAgICAgICMgdmVyaWZ5IGZhaWx1cmUgb24gYnVpbGRpbmcgZGVjb21wcmVzcyBvYmplY3Qgd2l0aCBiYWQgcGFyYW1zCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHpsaWIuZGVjb21wcmVzc29iaiwgLTEpCisKKyAgICBkZWYgdGVzdF9kZWNvbXByZXNzb2JqX2JhZGZsdXNoKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSBmYWlsdXJlIG9uIGNhbGxpbmcgZGVjb21wcmVzc29iai5mbHVzaCB3aXRoIGJhZCBwYXJhbXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgemxpYi5kZWNvbXByZXNzb2JqKCkuZmx1c2gsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoLCAtMSkKKworCitjbGFzcyBCYXNlQ29tcHJlc3NUZXN0Q2FzZShvYmplY3QpOgorICAgIGRlZiBjaGVja19iaWdfY29tcHJlc3NfYnVmZmVyKHNlbGYsIHNpemUsIGNvbXByZXNzX2Z1bmMpOgorICAgICAgICBfMU0gPSAxMDI0ICogMTAyNAorICAgICAgICBmbXQgPSAiJSUwJWR4IiAlICgyICogXzFNKQorICAgICAgICAjIEdlbmVyYXRlIDEwTUIgd29ydGggb2YgcmFuZG9tLCBhbmQgZXhwYW5kIGl0IGJ5IHJlcGVhdGluZyBpdC4KKyAgICAgICAgIyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHpsaWIncyBtZW1vcnkgaXMgbm90IGJpZyBlbm91Z2ggdG8gZXhwbG9pdAorICAgICAgICAjIHN1Y2ggc3ByZWFkIG91dCByZWR1bmRhbmN5LgorICAgICAgICBkYXRhID0gJycuam9pbihbYmluYXNjaWkuYTJiX2hleChmbXQgJSByYW5kb20uZ2V0cmFuZGJpdHMoOCAqIF8xTSkpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCldKQorICAgICAgICBkYXRhID0gZGF0YSAqIChzaXplIC8vIGxlbihkYXRhKSArIDEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbXByZXNzX2Z1bmMoZGF0YSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgUmVsZWFzZSBtZW1vcnkKKyAgICAgICAgICAgIGRhdGEgPSBOb25lCisKKyAgICBkZWYgY2hlY2tfYmlnX2RlY29tcHJlc3NfYnVmZmVyKHNlbGYsIHNpemUsIGRlY29tcHJlc3NfZnVuYyk6CisgICAgICAgIGRhdGEgPSAneCcgKiBzaXplCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbXByZXNzZWQgPSB6bGliLmNvbXByZXNzKGRhdGEsIDEpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIFJlbGVhc2UgbWVtb3J5CisgICAgICAgICAgICBkYXRhID0gTm9uZQorICAgICAgICBkYXRhID0gZGVjb21wcmVzc19mdW5jKGNvbXByZXNzZWQpCisgICAgICAgICMgU2FuaXR5IGNoZWNrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRhdGEpLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGF0YS5zdHJpcCgneCcpKSwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRhdGEgPSBOb25lCisKKworY2xhc3MgQ29tcHJlc3NUZXN0Q2FzZShCYXNlQ29tcHJlc3NUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBjb21wcmVzc2lvbiBpbiBvbmUgZ28gKHdob2xlIG1lc3NhZ2UgY29tcHJlc3Npb24pCisgICAgZGVmIHRlc3Rfc3BlZWNoKHNlbGYpOgorICAgICAgICB4ID0gemxpYi5jb21wcmVzcyhIQU1MRVRfU0NFTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKHgpLCBIQU1MRVRfU0NFTkUpCisKKyAgICBkZWYgdGVzdF9zcGVlY2gxMjgoc2VsZik6CisgICAgICAgICMgY29tcHJlc3MgbW9yZSBkYXRhCisgICAgICAgIGRhdGEgPSBIQU1MRVRfU0NFTkUgKiAxMjgKKyAgICAgICAgeCA9IHpsaWIuY29tcHJlc3MoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmRlY29tcHJlc3MoeCksIGRhdGEpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3N0cmVhbShzZWxmKToKKyAgICAgICAgIyBBbiB1c2VmdWwgZXJyb3IgbWVzc2FnZSBpcyBnaXZlbgorICAgICAgICB4ID0gemxpYi5jb21wcmVzcyhIQU1MRVRfU0NFTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKHpsaWIuZXJyb3IsCisgICAgICAgICAgICAiRXJyb3IgLTUgd2hpbGUgZGVjb21wcmVzc2luZyBkYXRhOiBpbmNvbXBsZXRlIG9yIHRydW5jYXRlZCBzdHJlYW0iLAorICAgICAgICAgICAgemxpYi5kZWNvbXByZXNzLCB4WzotMV0pCisKKyAgICAjIE1lbW9yeSB1c2Ugb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdGFrZXMgaW50byBhY2NvdW50IG92ZXJhbGxvY2F0aW9uCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8xRyArIDEwMjQgKiAxMDI0LCBtZW11c2U9MykKKyAgICBkZWYgdGVzdF9iaWdfY29tcHJlc3NfYnVmZmVyKHNlbGYsIHNpemUpOgorICAgICAgICBjb21wcmVzcyA9IGxhbWJkYSBzOiB6bGliLmNvbXByZXNzKHMsIDEpCisgICAgICAgIHNlbGYuY2hlY2tfYmlnX2NvbXByZXNzX2J1ZmZlcihzaXplLCBjb21wcmVzcykKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzFHICsgMTAyNCAqIDEwMjQsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2JpZ19kZWNvbXByZXNzX2J1ZmZlcihzZWxmLCBzaXplKToKKyAgICAgICAgc2VsZi5jaGVja19iaWdfZGVjb21wcmVzc19idWZmZXIoc2l6ZSwgemxpYi5kZWNvbXByZXNzKQorCisKK2NsYXNzIENvbXByZXNzT2JqZWN0VGVzdENhc2UoQmFzZUNvbXByZXNzVGVzdENhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgY29tcHJlc3Npb24gb2JqZWN0CisgICAgZGVmIHRlc3RfcGFpcihzZWxmKToKKyAgICAgICAgIyBzdHJhaWdodGZvcndhcmQgY29tcHJlc3MvZGVjb21wcmVzcyBvYmplY3RzCisgICAgICAgIGRhdGEgPSBIQU1MRVRfU0NFTkUgKiAxMjgKKyAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKCkKKyAgICAgICAgeDEgPSBjby5jb21wcmVzcyhkYXRhKQorICAgICAgICB4MiA9IGNvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemxpYi5lcnJvciwgY28uZmx1c2gpICMgc2Vjb25kIGZsdXNoIHNob3VsZCBub3Qgd29yaworICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICB5MSA9IGRjby5kZWNvbXByZXNzKHgxICsgeDIpCisgICAgICAgIHkyID0gZGNvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB5MSArIHkyKQorCisgICAgZGVmIHRlc3RfY29tcHJlc3NvcHRpb25zKHNlbGYpOgorICAgICAgICAjIHNwZWNpZnkgbG90cyBvZiBvcHRpb25zIHRvIGNvbXByZXNzb2JqKCkKKyAgICAgICAgbGV2ZWwgPSAyCisgICAgICAgIG1ldGhvZCA9IHpsaWIuREVGTEFURUQKKyAgICAgICAgd2JpdHMgPSAtMTIKKyAgICAgICAgbWVtbGV2ZWwgPSA5CisgICAgICAgIHN0cmF0ZWd5ID0gemxpYi5aX0ZJTFRFUkVECisgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaihsZXZlbCwgbWV0aG9kLCB3Yml0cywgbWVtbGV2ZWwsIHN0cmF0ZWd5KQorICAgICAgICB4MSA9IGNvLmNvbXByZXNzKEhBTUxFVF9TQ0VORSkKKyAgICAgICAgeDIgPSBjby5mbHVzaCgpCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaih3Yml0cykKKyAgICAgICAgeTEgPSBkY28uZGVjb21wcmVzcyh4MSArIHgyKQorICAgICAgICB5MiA9IGRjby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSEFNTEVUX1NDRU5FLCB5MSArIHkyKQorCisgICAgZGVmIHRlc3RfY29tcHJlc3NpbmNyZW1lbnRhbChzZWxmKToKKyAgICAgICAgIyBjb21wcmVzcyBvYmplY3QgaW4gc3RlcHMsIGRlY29tcHJlc3Mgb2JqZWN0IGFzIG9uZS1zaG90CisgICAgICAgIGRhdGEgPSBIQU1MRVRfU0NFTkUgKiAxMjgKKyAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKCkKKyAgICAgICAgYnVmcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgMjU2KToKKyAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGNvLmNvbXByZXNzKGRhdGFbaTppKzI1Nl0pKQorICAgICAgICBidWZzLmFwcGVuZChjby5mbHVzaCgpKQorICAgICAgICBjb21idWYgPSAnJy5qb2luKGJ1ZnMpCisKKyAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgeTEgPSBkY28uZGVjb21wcmVzcygnJy5qb2luKGJ1ZnMpKQorICAgICAgICB5MiA9IGRjby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgeTEgKyB5MikKKworICAgIGRlZiB0ZXN0X2RlY29tcGluYyhzZWxmLCBmbHVzaD1GYWxzZSwgc291cmNlPU5vbmUsIGN4PTI1NiwgZGN4PTY0KToKKyAgICAgICAgIyBjb21wcmVzcyBvYmplY3QgaW4gc3RlcHMsIGRlY29tcHJlc3Mgb2JqZWN0IGluIHN0ZXBzCisgICAgICAgIHNvdXJjZSA9IHNvdXJjZSBvciBIQU1MRVRfU0NFTkUKKyAgICAgICAgZGF0YSA9IHNvdXJjZSAqIDEyOAorICAgICAgICBjbyA9IHpsaWIuY29tcHJlc3NvYmooKQorICAgICAgICBidWZzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCBjeCk6CisgICAgICAgICAgICBidWZzLmFwcGVuZChjby5jb21wcmVzcyhkYXRhW2k6aStjeF0pKQorICAgICAgICBidWZzLmFwcGVuZChjby5mbHVzaCgpKQorICAgICAgICBjb21idWYgPSAnJy5qb2luKGJ1ZnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB6bGliLmRlY29tcHJlc3MoY29tYnVmKSkKKworICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICBidWZzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGNvbWJ1ZiksIGRjeCk6CisgICAgICAgICAgICBidWZzLmFwcGVuZChkY28uZGVjb21wcmVzcyhjb21idWZbaTppK2RjeF0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgZGNvLnVuY29uc3VtZWRfdGFpbCwgIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihBKSB1Y3Qgc2hvdWxkIGJlICcnOiBub3QgJWQgbG9uZyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGRjby51bmNvbnN1bWVkX3RhaWwpKQorICAgICAgICBpZiBmbHVzaDoKKyAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGRjby5mbHVzaCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBjaHVuayA9IGRjby5kZWNvbXByZXNzKCcnKQorICAgICAgICAgICAgICAgIGlmIGNodW5rOgorICAgICAgICAgICAgICAgICAgICBidWZzLmFwcGVuZChjaHVuaykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBkY28udW5jb25zdW1lZF90YWlsLCAjIyMjIyMjIworICAgICAgICAgICAgICAgICAgICAgICAgICIoQikgdWN0IHNob3VsZCBiZSAnJzogbm90ICVkIGxvbmciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihkY28udW5jb25zdW1lZF90YWlsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnJy5qb2luKGJ1ZnMpKQorICAgICAgICAjIEZhaWx1cmUgbWVhbnM6ICJkZWNvbXByZXNzb2JqIHdpdGggaW5pdCBvcHRpb25zIGZhaWxlZCIKKworICAgIGRlZiB0ZXN0X2RlY29tcGluY2ZsdXNoKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfZGVjb21waW5jKGZsdXNoPVRydWUpCisKKyAgICBkZWYgdGVzdF9kZWNvbXBpbWF4KHNlbGYsIHNvdXJjZT1Ob25lLCBjeD0yNTYsIGRjeD02NCk6CisgICAgICAgICMgY29tcHJlc3MgaW4gc3RlcHMsIGRlY29tcHJlc3MgaW4gbGVuZ3RoLXJlc3RyaWN0ZWQgc3RlcHMKKyAgICAgICAgc291cmNlID0gc291cmNlIG9yIEhBTUxFVF9TQ0VORQorICAgICAgICAjIENoZWNrIGEgZGVjb21wcmVzc2lvbiBvYmplY3Qgd2l0aCBtYXhfbGVuZ3RoIHNwZWNpZmllZAorICAgICAgICBkYXRhID0gc291cmNlICogMTI4CisgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaigpCisgICAgICAgIGJ1ZnMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YSksIGN4KToKKyAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGNvLmNvbXByZXNzKGRhdGFbaTppK2N4XSkpCisgICAgICAgIGJ1ZnMuYXBwZW5kKGNvLmZsdXNoKCkpCisgICAgICAgIGNvbWJ1ZiA9ICcnLmpvaW4oYnVmcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB6bGliLmRlY29tcHJlc3MoY29tYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcHJlc3NlZCBkYXRhIGZhaWx1cmUnKQorCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgIGJ1ZnMgPSBbXQorICAgICAgICBjYiA9IGNvbWJ1ZgorICAgICAgICB3aGlsZSBjYjoKKyAgICAgICAgICAgICNtYXhfbGVuZ3RoID0gMSArIGxlbihjYikvLzEwCisgICAgICAgICAgICBjaHVuayA9IGRjby5kZWNvbXByZXNzKGNiLCBkY3gpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxlbihjaHVuaykgPiBkY3gsCisgICAgICAgICAgICAgICAgICAgICdjaHVuayB0b28gYmlnICglZD4lZCknICUgKGxlbihjaHVuayksIGRjeCkpCisgICAgICAgICAgICBidWZzLmFwcGVuZChjaHVuaykKKyAgICAgICAgICAgIGNiID0gZGNvLnVuY29uc3VtZWRfdGFpbAorICAgICAgICBidWZzLmFwcGVuZChkY28uZmx1c2goKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnJy5qb2luKGJ1ZnMpLCAnV3JvbmcgZGF0YSByZXRyaWV2ZWQnKQorCisgICAgZGVmIHRlc3RfZGVjb21wcmVzc21heGxlbihzZWxmLCBmbHVzaD1GYWxzZSk6CisgICAgICAgICMgQ2hlY2sgYSBkZWNvbXByZXNzaW9uIG9iamVjdCB3aXRoIG1heF9sZW5ndGggc3BlY2lmaWVkCisgICAgICAgIGRhdGEgPSBIQU1MRVRfU0NFTkUgKiAxMjgKKyAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKCkKKyAgICAgICAgYnVmcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgMjU2KToKKyAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGNvLmNvbXByZXNzKGRhdGFbaTppKzI1Nl0pKQorICAgICAgICBidWZzLmFwcGVuZChjby5mbHVzaCgpKQorICAgICAgICBjb21idWYgPSAnJy5qb2luKGJ1ZnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgemxpYi5kZWNvbXByZXNzKGNvbWJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWQgZGF0YSBmYWlsdXJlJykKKworICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICBidWZzID0gW10KKyAgICAgICAgY2IgPSBjb21idWYKKyAgICAgICAgd2hpbGUgY2I6CisgICAgICAgICAgICBtYXhfbGVuZ3RoID0gMSArIGxlbihjYikvLzEwCisgICAgICAgICAgICBjaHVuayA9IGRjby5kZWNvbXByZXNzKGNiLCBtYXhfbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oY2h1bmspID4gbWF4X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdjaHVuayB0b28gYmlnICglZD4lZCknICUgKGxlbihjaHVuayksbWF4X2xlbmd0aCkpCisgICAgICAgICAgICBidWZzLmFwcGVuZChjaHVuaykKKyAgICAgICAgICAgIGNiID0gZGNvLnVuY29uc3VtZWRfdGFpbAorICAgICAgICBpZiBmbHVzaDoKKyAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGRjby5mbHVzaCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2hpbGUgY2h1bms6CisgICAgICAgICAgICAgICAgY2h1bmsgPSBkY28uZGVjb21wcmVzcygnJywgbWF4X2xlbmd0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxlbihjaHVuaykgPiBtYXhfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaHVuayB0b28gYmlnICglZD4lZCknICUgKGxlbihjaHVuayksbWF4X2xlbmd0aCkpCisgICAgICAgICAgICAgICAgYnVmcy5hcHBlbmQoY2h1bmspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbihidWZzKSwgJ1dyb25nIGRhdGEgcmV0cmlldmVkJykKKworICAgIGRlZiB0ZXN0X2RlY29tcHJlc3NtYXhsZW5mbHVzaChzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2RlY29tcHJlc3NtYXhsZW4oZmx1c2g9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X21heGxlbm1pc2Moc2VsZik6CisgICAgICAgICMgTWlzYyB0ZXN0cyBvZiBtYXhfbGVuZ3RoCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRjby5kZWNvbXByZXNzLCAiIiwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIGRjby51bmNvbnN1bWVkX3RhaWwpCisKKyAgICBkZWYgdGVzdF9jbGVhcl91bmNvbnN1bWVkX3RhaWwoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEyMDUwOiBjYWxsaW5nIGRlY29tcHJlc3MoKSB3aXRob3V0IHByb3ZpZGluZyBtYXhfbGVuZ3RoCisgICAgICAgICMgc2hvdWxkIGNsZWFyIHRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLgorICAgICAgICBjZGF0YSA9ICJ4XHg5Y0tMSlx4MDZceDAwXHgwMk1ceDAxIiAgICAgIyAiYWJjIgorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICBkZGF0YSA9IGRjby5kZWNvbXByZXNzKGNkYXRhLCAxKQorICAgICAgICBkZGF0YSArPSBkY28uZGVjb21wcmVzcyhkY28udW5jb25zdW1lZF90YWlsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjby51bmNvbnN1bWVkX3RhaWwsICIiKQorCisgICAgZGVmIHRlc3RfZmx1c2hlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZsdXNoKCkgd2l0aCB0aGUgdmFyaW91cyBvcHRpb25zLCB1c2luZyBhbGwgdGhlCisgICAgICAgICMgZGlmZmVyZW50IGxldmVscyBpbiBvcmRlciB0byBwcm92aWRlIG1vcmUgdmFyaWF0aW9ucy4KKyAgICAgICAgc3luY19vcHQgPSBbJ1pfTk9fRkxVU0gnLCAnWl9TWU5DX0ZMVVNIJywgJ1pfRlVMTF9GTFVTSCddCisgICAgICAgIHN5bmNfb3B0ID0gW2dldGF0dHIoemxpYiwgb3B0KSBmb3Igb3B0IGluIHN5bmNfb3B0CisgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoemxpYiwgb3B0KV0KKyAgICAgICAgZGF0YSA9IEhBTUxFVF9TQ0VORSAqIDgKKworICAgICAgICBmb3Igc3luYyBpbiBzeW5jX29wdDoKKyAgICAgICAgICAgIGZvciBsZXZlbCBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgb2JqID0gemxpYi5jb21wcmVzc29iaiggbGV2ZWwgKQorICAgICAgICAgICAgICAgIGEgPSBvYmouY29tcHJlc3MoIGRhdGFbOjMwMDBdICkKKyAgICAgICAgICAgICAgICBiID0gb2JqLmZsdXNoKCBzeW5jICkKKyAgICAgICAgICAgICAgICBjID0gb2JqLmNvbXByZXNzKCBkYXRhWzMwMDA6XSApCisgICAgICAgICAgICAgICAgZCA9IG9iai5mbHVzaCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmRlY29tcHJlc3MoJycuam9pbihbYSxiLGMsZF0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsICgiRGVjb21wcmVzcyBmYWlsZWQ6IGZsdXNoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kZT0laSwgbGV2ZWw9JWkiKSAlIChzeW5jLCBsZXZlbCkpCisgICAgICAgICAgICAgICAgZGVsIG9iagorCisgICAgZGVmIHRlc3Rfb2RkX2ZsdXNoKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIG9kZCBmbHVzaGluZyBidWdzIG5vdGVkIGluIDIuMCwgYW5kIGhvcGVmdWxseSBmaXhlZCBpbiAyLjEKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorCisgICAgICAgIGlmIGhhc2F0dHIoemxpYiwgJ1pfU1lOQ19GTFVTSCcpOgorICAgICAgICAgICAgIyBUZXN0aW5nIG9uIDE3SyBvZiAicmFuZG9tIiBkYXRhCisKKyAgICAgICAgICAgICMgQ3JlYXRlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBvYmplY3RzCisgICAgICAgICAgICBjbyA9IHpsaWIuY29tcHJlc3NvYmooemxpYi5aX0JFU1RfQ09NUFJFU1NJT04pCisgICAgICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorCisgICAgICAgICAgICAjIFRyeSAxN0sgb2YgZGF0YQorICAgICAgICAgICAgIyBnZW5lcmF0ZSByYW5kb20gZGF0YSBzdHJlYW0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIEluIDIuMyBhbmQgbGF0ZXIsIFdpY2htYW5uSGlsbCBpcyB0aGUgUk5HIG9mIHRoZSBidWcgcmVwb3J0CisgICAgICAgICAgICAgICAgZ2VuID0gcmFuZG9tLldpY2htYW5uSGlsbCgpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIDIuMiBjYWxsZWQgaXQgUmFuZG9tCisgICAgICAgICAgICAgICAgICAgIGdlbiA9IHJhbmRvbS5SYW5kb20oKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBvdGhlcnMgbWlnaHQgc2ltcGx5IGhhdmUgYSBzaW5nbGUgUk5HCisgICAgICAgICAgICAgICAgICAgIGdlbiA9IHJhbmRvbQorICAgICAgICAgICAgZ2VuLnNlZWQoMSkKKyAgICAgICAgICAgIGRhdGEgPSBnZW5ibG9jaygxLCAxNyAqIDEwMjQsIGdlbmVyYXRvcj1nZW4pCisKKyAgICAgICAgICAgICMgY29tcHJlc3MsIHN5bmMtZmx1c2gsIGFuZCBkZWNvbXByZXNzCisgICAgICAgICAgICBmaXJzdCA9IGNvLmNvbXByZXNzKGRhdGEpCisgICAgICAgICAgICBzZWNvbmQgPSBjby5mbHVzaCh6bGliLlpfU1lOQ19GTFVTSCkKKyAgICAgICAgICAgIGV4cGFuZGVkID0gZGNvLmRlY29tcHJlc3MoZmlyc3QgKyBzZWNvbmQpCisKKyAgICAgICAgICAgICMgaWYgZGVjb21wcmVzc2VkIGRhdGEgaXMgZGlmZmVyZW50IGZyb20gdGhlIGlucHV0IGRhdGEsIGNob2tlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmRlZCwgZGF0YSwgIjE3SyByYW5kb20gc291cmNlIGRvZXNuJ3QgbWF0Y2giKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZmx1c2goc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcgLmZsdXNoKCkgb24gdW51c2VkIG9iamVjdHMgd29ya3MuCisgICAgICAgICMgKEJ1ZyAjMTA4MzExMCAtLSBjYWxsaW5nIC5mbHVzaCgpIG9uIGRlY29tcHJlc3Mgb2JqZWN0cworICAgICAgICAjIGNhdXNlZCBhIGNvcmUgZHVtcC4pCisKKyAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9CRVNUX0NPTVBSRVNTSU9OKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY28uZmx1c2goKSkgICMgUmV0dXJucyBhIHpsaWIgaGVhZGVyCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLmZsdXNoKCksICIiKSAjIFJldHVybnMgbm90aGluZworCisgICAgZGVmIHRlc3RfZGVjb21wcmVzc19pbmNvbXBsZXRlX3N0cmVhbShzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzICdmb28nLCBkZWZsYXRlZAorICAgICAgICB4ID0gJ3hceDljS1x4Y2JceGNmXHgwN1x4MDBceDAyXHg4Mlx4MDFFJworICAgICAgICAjIEZvciB0aGUgcmVjb3JkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKHgpLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemxpYi5lcnJvciwgemxpYi5kZWNvbXByZXNzLCB4WzotNV0pCisgICAgICAgICMgT21pdHRpbmcgdGhlIHN0cmVhbSBlbmQgd29ya3Mgd2l0aCBkZWNvbXByZXNzb3Igb2JqZWN0cworICAgICAgICAjIChzZWUgaXNzdWUgIzg2NzIpLgorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICB5ID0gZGNvLmRlY29tcHJlc3MoeFs6LTVdKQorICAgICAgICB5ICs9IGRjby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9mbHVzaF93aXRoX2ZyZWVkX2lucHV0KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNjQxMTogZGVjb21wcmVzc29yIGFjY2Vzc2VzIGlucHV0IHRvIGxhc3QgZGVjb21wcmVzcygpIGNhbGwKKyAgICAgICAgIyBpbiBmbHVzaCgpLCBldmVuIGlmIHRoaXMgb2JqZWN0IGhhcyBiZWVuIGZyZWVkIGluIHRoZSBtZWFud2hpbGUuCisgICAgICAgIGlucHV0MSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKyAgICAgICAgaW5wdXQyID0gJ1FXRVJUWVVJT1BBU0RGR0hKS0xaWENWQk5NJworICAgICAgICBkYXRhID0gemxpYi5jb21wcmVzcyhpbnB1dDEpCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgIGRjby5kZWNvbXByZXNzKGRhdGEsIDEpCisgICAgICAgIGRlbCBkYXRhCisgICAgICAgIGRhdGEgPSB6bGliLmNvbXByZXNzKGlucHV0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY28uZmx1c2goKSwgaW5wdXQxWzE6XSkKKworICAgIGlmIGhhc2F0dHIoemxpYi5jb21wcmVzc29iaigpLCAiY29weSIpOgorICAgICAgICBkZWYgdGVzdF9jb21wcmVzc2NvcHkoc2VsZik6CisgICAgICAgICAgICAjIFRlc3QgY29weWluZyBhIGNvbXByZXNzaW9uIG9iamVjdAorICAgICAgICAgICAgZGF0YTAgPSBIQU1MRVRfU0NFTkUKKyAgICAgICAgICAgIGRhdGExID0gSEFNTEVUX1NDRU5FLnN3YXBjYXNlKCkKKyAgICAgICAgICAgIGMwID0gemxpYi5jb21wcmVzc29iaih6bGliLlpfQkVTVF9DT01QUkVTU0lPTikKKyAgICAgICAgICAgIGJ1ZnMwID0gW10KKyAgICAgICAgICAgIGJ1ZnMwLmFwcGVuZChjMC5jb21wcmVzcyhkYXRhMCkpCisKKyAgICAgICAgICAgIGMxID0gYzAuY29weSgpCisgICAgICAgICAgICBidWZzMSA9IGJ1ZnMwWzpdCisKKyAgICAgICAgICAgIGJ1ZnMwLmFwcGVuZChjMC5jb21wcmVzcyhkYXRhMCkpCisgICAgICAgICAgICBidWZzMC5hcHBlbmQoYzAuZmx1c2goKSkKKyAgICAgICAgICAgIHMwID0gJycuam9pbihidWZzMCkKKworICAgICAgICAgICAgYnVmczEuYXBwZW5kKGMxLmNvbXByZXNzKGRhdGExKSkKKyAgICAgICAgICAgIGJ1ZnMxLmFwcGVuZChjMS5mbHVzaCgpKQorICAgICAgICAgICAgczEgPSAnJy5qb2luKGJ1ZnMxKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuZGVjb21wcmVzcyhzMCksZGF0YTArZGF0YTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuZGVjb21wcmVzcyhzMSksZGF0YTArZGF0YTEpCisKKyAgICAgICAgZGVmIHRlc3RfYmFkY29tcHJlc3Njb3B5KHNlbGYpOgorICAgICAgICAgICAgIyBUZXN0IGNvcHlpbmcgYSBjb21wcmVzc2lvbiBvYmplY3QgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlCisgICAgICAgICAgICBjID0gemxpYi5jb21wcmVzc29iaigpCisgICAgICAgICAgICBjLmNvbXByZXNzKEhBTUxFVF9TQ0VORSkKKyAgICAgICAgICAgIGMuZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYy5jb3B5KQorCisgICAgZGVmIHRlc3RfZGVjb21wcmVzc191bnVzZWRfZGF0YShzZWxmKToKKyAgICAgICAgIyBSZXBlYXRlZCBjYWxscyB0byBkZWNvbXByZXNzKCkgYWZ0ZXIgRU9GIHNob3VsZCBhY2N1bXVsYXRlIGRhdGEgaW4KKyAgICAgICAgIyBkY28udW51c2VkX2RhdGEsIGluc3RlYWQgb2YganVzdCBzdG9yaW5nIHRoZSBhcmcgdG8gdGhlIGxhc3QgY2FsbC4KKyAgICAgICAgc291cmNlID0gYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKyAgICAgICAgcmVtYWluZGVyID0gYicwMTIzNDU2Nzg5JworICAgICAgICB5ID0gemxpYi5jb21wcmVzcyhzb3VyY2UpCisgICAgICAgIHggPSB5ICsgcmVtYWluZGVyCisgICAgICAgIGZvciBtYXhsZW4gaW4gMCwgMTAwMDoKKyAgICAgICAgICAgIGZvciBzdGVwIGluIDEsIDIsIGxlbih5KSwgbGVuKHgpOgorICAgICAgICAgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgICAgICAgICAgZGF0YSA9IGInJworICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbih4KSwgc3RlcCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGkgPCBsZW4oeSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjby51bnVzZWRfZGF0YSwgYicnKQorICAgICAgICAgICAgICAgICAgICBpZiBtYXhsZW4gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gZGNvLmRlY29tcHJlc3MoeFtpIDogaSArIHN0ZXBdKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY28udW5jb25zdW1lZF90YWlsLCBiJycpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGRjby5kZWNvbXByZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY28udW5jb25zdW1lZF90YWlsICsgeFtpIDogaSArIHN0ZXBdLCBtYXhsZW4pCisgICAgICAgICAgICAgICAgZGF0YSArPSBkY28uZmx1c2goKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc291cmNlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLnVuY29uc3VtZWRfdGFpbCwgYicnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLnVudXNlZF9kYXRhLCByZW1haW5kZXIpCisKKyAgICBpZiBoYXNhdHRyKHpsaWIuZGVjb21wcmVzc29iaigpLCAiY29weSIpOgorICAgICAgICBkZWYgdGVzdF9kZWNvbXByZXNzY29weShzZWxmKToKKyAgICAgICAgICAgICMgVGVzdCBjb3B5aW5nIGEgZGVjb21wcmVzc2lvbiBvYmplY3QKKyAgICAgICAgICAgIGRhdGEgPSBIQU1MRVRfU0NFTkUKKyAgICAgICAgICAgIGNvbXAgPSB6bGliLmNvbXByZXNzKGRhdGEpCisKKyAgICAgICAgICAgIGQwID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgICAgIGJ1ZnMwID0gW10KKyAgICAgICAgICAgIGJ1ZnMwLmFwcGVuZChkMC5kZWNvbXByZXNzKGNvbXBbOjMyXSkpCisKKyAgICAgICAgICAgIGQxID0gZDAuY29weSgpCisgICAgICAgICAgICBidWZzMSA9IGJ1ZnMwWzpdCisKKyAgICAgICAgICAgIGJ1ZnMwLmFwcGVuZChkMC5kZWNvbXByZXNzKGNvbXBbMzI6XSkpCisgICAgICAgICAgICBzMCA9ICcnLmpvaW4oYnVmczApCisKKyAgICAgICAgICAgIGJ1ZnMxLmFwcGVuZChkMS5kZWNvbXByZXNzKGNvbXBbMzI6XSkpCisgICAgICAgICAgICBzMSA9ICcnLmpvaW4oYnVmczEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczAsczEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMwLGRhdGEpCisKKyAgICAgICAgZGVmIHRlc3RfYmFkZGVjb21wcmVzc2NvcHkoc2VsZik6CisgICAgICAgICAgICAjIFRlc3QgY29weWluZyBhIGNvbXByZXNzaW9uIG9iamVjdCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUKKyAgICAgICAgICAgIGRhdGEgPSB6bGliLmNvbXByZXNzKEhBTUxFVF9TQ0VORSkKKyAgICAgICAgICAgIGQgPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICAgICAgZC5kZWNvbXByZXNzKGRhdGEpCisgICAgICAgICAgICBkLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGQuY29weSkKKworICAgICMgTWVtb3J5IHVzZSBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0YWtlcyBpbnRvIGFjY291bnQgb3ZlcmFsbG9jYXRpb24KKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzFHICsgMTAyNCAqIDEwMjQsIG1lbXVzZT0zKQorICAgIGRlZiB0ZXN0X2JpZ19jb21wcmVzc19idWZmZXIoc2VsZiwgc2l6ZSk6CisgICAgICAgIGMgPSB6bGliLmNvbXByZXNzb2JqKDEpCisgICAgICAgIGNvbXByZXNzID0gbGFtYmRhIHM6IGMuY29tcHJlc3MocykgKyBjLmZsdXNoKCkKKyAgICAgICAgc2VsZi5jaGVja19iaWdfY29tcHJlc3NfYnVmZmVyKHNpemUsIGNvbXByZXNzKQorCisgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fMUcgKyAxMDI0ICogMTAyNCwgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfYmlnX2RlY29tcHJlc3NfYnVmZmVyKHNlbGYsIHNpemUpOgorICAgICAgICBkID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgZGVjb21wcmVzcyA9IGxhbWJkYSBzOiBkLmRlY29tcHJlc3MocykgKyBkLmZsdXNoKCkKKyAgICAgICAgc2VsZi5jaGVja19iaWdfZGVjb21wcmVzc19idWZmZXIoc2l6ZSwgZGVjb21wcmVzcykKKworCitkZWYgZ2VuYmxvY2soc2VlZCwgbGVuZ3RoLCBzdGVwPTEwMjQsIGdlbmVyYXRvcj1yYW5kb20pOgorICAgICIiImxlbmd0aC1ieXRlIHN0cmVhbSBvZiByYW5kb20gZGF0YSBmcm9tIGEgc2VlZCAoaW4gc3RlcC1ieXRlIGJsb2NrcykuIiIiCisgICAgaWYgc2VlZCBpcyBub3QgTm9uZToKKyAgICAgICAgZ2VuZXJhdG9yLnNlZWQoc2VlZCkKKyAgICByYW5kaW50ID0gZ2VuZXJhdG9yLnJhbmRpbnQKKyAgICBpZiBsZW5ndGggPCBzdGVwIG9yIHN0ZXAgPCAyOgorICAgICAgICBzdGVwID0gbGVuZ3RoCisgICAgYmxvY2tzID0gW10KKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW5ndGgsIHN0ZXApOgorICAgICAgICBibG9ja3MuYXBwZW5kKCcnLmpvaW4oW2NocihyYW5kaW50KDAsMjU1KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZShzdGVwKV0pKQorICAgIHJldHVybiAnJy5qb2luKGJsb2NrcylbOmxlbmd0aF0KKworCisKK2RlZiBjaG9vc2VfbGluZXMoc291cmNlLCBudW1iZXIsIHNlZWQ9Tm9uZSwgZ2VuZXJhdG9yPXJhbmRvbSk6CisgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBudW1iZXIgbGluZXMgcmFuZG9tbHkgY2hvc2VuIGZyb20gdGhlIHNvdXJjZSIiIgorICAgIGlmIHNlZWQgaXMgbm90IE5vbmU6CisgICAgICAgIGdlbmVyYXRvci5zZWVkKHNlZWQpCisgICAgc291cmNlcyA9IHNvdXJjZS5zcGxpdCgnXG4nKQorICAgIHJldHVybiBbZ2VuZXJhdG9yLmNob2ljZShzb3VyY2VzKSBmb3IgbiBpbiByYW5nZShudW1iZXIpXQorCisKKworSEFNTEVUX1NDRU5FID0gIiIiCitMQUVSVEVTCisKKyAgICAgICBPLCBmZWFyIG1lIG5vdC4KKyAgICAgICBJIHN0YXkgdG9vIGxvbmc6IGJ1dCBoZXJlIG15IGZhdGhlciBjb21lcy4KKworICAgICAgIEVudGVyIFBPTE9OSVVTCisKKyAgICAgICBBIGRvdWJsZSBibGVzc2luZyBpcyBhIGRvdWJsZSBncmFjZSwKKyAgICAgICBPY2Nhc2lvbiBzbWlsZXMgdXBvbiBhIHNlY29uZCBsZWF2ZS4KKworTE9SRCBQT0xPTklVUworCisgICAgICAgWWV0IGhlcmUsIExhZXJ0ZXMhIGFib2FyZCwgYWJvYXJkLCBmb3Igc2hhbWUhCisgICAgICAgVGhlIHdpbmQgc2l0cyBpbiB0aGUgc2hvdWxkZXIgb2YgeW91ciBzYWlsLAorICAgICAgIEFuZCB5b3UgYXJlIHN0YXknZCBmb3IuIFRoZXJlOyBteSBibGVzc2luZyB3aXRoIHRoZWUhCisgICAgICAgQW5kIHRoZXNlIGZldyBwcmVjZXB0cyBpbiB0aHkgbWVtb3J5CisgICAgICAgU2VlIHRob3UgY2hhcmFjdGVyLiBHaXZlIHRoeSB0aG91Z2h0cyBubyB0b25ndWUsCisgICAgICAgTm9yIGFueSB1bnByb3BvcnRpb25lZCB0aG91Z2h0IGhpcyBhY3QuCisgICAgICAgQmUgdGhvdSBmYW1pbGlhciwgYnV0IGJ5IG5vIG1lYW5zIHZ1bGdhci4KKyAgICAgICBUaG9zZSBmcmllbmRzIHRob3UgaGFzdCwgYW5kIHRoZWlyIGFkb3B0aW9uIHRyaWVkLAorICAgICAgIEdyYXBwbGUgdGhlbSB0byB0aHkgc291bCB3aXRoIGhvb3BzIG9mIHN0ZWVsOworICAgICAgIEJ1dCBkbyBub3QgZHVsbCB0aHkgcGFsbSB3aXRoIGVudGVydGFpbm1lbnQKKyAgICAgICBPZiBlYWNoIG5ldy1oYXRjaCdkLCB1bmZsZWRnZWQgY29tcmFkZS4gQmV3YXJlCisgICAgICAgT2YgZW50cmFuY2UgdG8gYSBxdWFycmVsLCBidXQgYmVpbmcgaW4sCisgICAgICAgQmVhcid0IHRoYXQgdGhlIG9wcG9zZWQgbWF5IGJld2FyZSBvZiB0aGVlLgorICAgICAgIEdpdmUgZXZlcnkgbWFuIHRoeSBlYXIsIGJ1dCBmZXcgdGh5IHZvaWNlOworICAgICAgIFRha2UgZWFjaCBtYW4ncyBjZW5zdXJlLCBidXQgcmVzZXJ2ZSB0aHkganVkZ21lbnQuCisgICAgICAgQ29zdGx5IHRoeSBoYWJpdCBhcyB0aHkgcHVyc2UgY2FuIGJ1eSwKKyAgICAgICBCdXQgbm90IGV4cHJlc3MnZCBpbiBmYW5jeTsgcmljaCwgbm90IGdhdWR5OworICAgICAgIEZvciB0aGUgYXBwYXJlbCBvZnQgcHJvY2xhaW1zIHRoZSBtYW4sCisgICAgICAgQW5kIHRoZXkgaW4gRnJhbmNlIG9mIHRoZSBiZXN0IHJhbmsgYW5kIHN0YXRpb24KKyAgICAgICBBcmUgb2YgYSBtb3N0IHNlbGVjdCBhbmQgZ2VuZXJvdXMgY2hpZWYgaW4gdGhhdC4KKyAgICAgICBOZWl0aGVyIGEgYm9ycm93ZXIgbm9yIGEgbGVuZGVyIGJlOworICAgICAgIEZvciBsb2FuIG9mdCBsb3NlcyBib3RoIGl0c2VsZiBhbmQgZnJpZW5kLAorICAgICAgIEFuZCBib3Jyb3dpbmcgZHVsbHMgdGhlIGVkZ2Ugb2YgaHVzYmFuZHJ5LgorICAgICAgIFRoaXMgYWJvdmUgYWxsOiB0byB0aGluZSBvd25zZWxmIGJlIHRydWUsCisgICAgICAgQW5kIGl0IG11c3QgZm9sbG93LCBhcyB0aGUgbmlnaHQgdGhlIGRheSwKKyAgICAgICBUaG91IGNhbnN0IG5vdCB0aGVuIGJlIGZhbHNlIHRvIGFueSBtYW4uCisgICAgICAgRmFyZXdlbGw6IG15IGJsZXNzaW5nIHNlYXNvbiB0aGlzIGluIHRoZWUhCisKK0xBRVJURVMKKworICAgICAgIE1vc3QgaHVtYmx5IGRvIEkgdGFrZSBteSBsZWF2ZSwgbXkgbG9yZC4KKworTE9SRCBQT0xPTklVUworCisgICAgICAgVGhlIHRpbWUgaW52aXRlcyB5b3U7IGdvOyB5b3VyIHNlcnZhbnRzIHRlbmQuCisKK0xBRVJURVMKKworICAgICAgIEZhcmV3ZWxsLCBPcGhlbGlhOyBhbmQgcmVtZW1iZXIgd2VsbAorICAgICAgIFdoYXQgSSBoYXZlIHNhaWQgdG8geW91LgorCitPUEhFTElBCisKKyAgICAgICAnVGlzIGluIG15IG1lbW9yeSBsb2NrJ2QsCisgICAgICAgQW5kIHlvdSB5b3Vyc2VsZiBzaGFsbCBrZWVwIHRoZSBrZXkgb2YgaXQuCisKK0xBRVJURVMKKworICAgICAgIEZhcmV3ZWxsLgorIiIiCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdCgKKyAgICAgICAgQ2hlY2tzdW1UZXN0Q2FzZSwKKyAgICAgICAgRXhjZXB0aW9uVGVzdENhc2UsCisgICAgICAgIENvbXByZXNzVGVzdENhc2UsCisgICAgICAgIENvbXByZXNzT2JqZWN0VGVzdENhc2UKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0YWxsLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RhbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1Y2YwMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0YWxsLnB5CkBAIC0wLDAgKzEsMTAgQEAKKyMgQmFja3dhcmQgY29tcGF0aWJpbGl0eSAtLSB5b3Ugc2hvdWxkIHVzZSByZWdydGVzdCBpbnN0ZWFkIG9mIHRoaXMgbW9kdWxlLgorZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybnB5M2sKK3dhcm5weTNrKCJ0aGUgdGVzdC50ZXN0YWxsIG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjAiLAorICAgICAgICAgICAgc3RhY2tsZXZlbD0yKQorZGVsIHdhcm5weTNrCisKKworaW1wb3J0IHN5cywgcmVncnRlc3QKK3N5cy5hcmd2WzE6XSA9IFsiLXZ2Il0KK3JlZ3J0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3Rjb2RlYy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0Y29kZWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRhNzU0ZAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0Y29kZWMucHkKQEAgLTAsMCArMSw0OCBAQAorIiIiIFRlc3QgQ29kZWNzICh1c2VkIGJ5IHRlc3RfY2hhcm1hcGNvZGVjKQorCitXcml0dGVuIGJ5IE1hcmMtQW5kcmUgTGVtYnVyZyAobWFsQGxlbWJ1cmcuY29tKS4KKworKGMpIENvcHlyaWdodCAyMDAwIEd1aWRvIHZhbiBSb3NzdW0uCisKKyIiIiMiCitpbXBvcnQgY29kZWNzCisKKyMjIyBDb2RlYyBBUElzCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisKKyAgICBkZWYgZW5jb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKworICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ19tYXApCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKworICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LGVycm9ycyxkZWNvZGluZ19tYXApCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYyxjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBwYXNzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBwYXNzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKworICAgIHJldHVybiAoQ29kZWMoKS5lbmNvZGUsQ29kZWMoKS5kZWNvZGUsU3RyZWFtUmVhZGVyLFN0cmVhbVdyaXRlcikKKworIyMjIERlY29kaW5nIE1hcAorCitkZWNvZGluZ19tYXAgPSBjb2RlY3MubWFrZV9pZGVudGl0eV9kaWN0KHJhbmdlKDI1NikpCitkZWNvZGluZ19tYXAudXBkYXRlKHsKKyAgICAgICAgMHg3ODogdSJhYmMiLCAjIDEtbiBkZWNvZGluZyBtYXBwaW5nCisgICAgICAgICJhYmMiOiAweDAwNzgsIyAxLW4gZW5jb2RpbmcgbWFwcGluZworICAgICAgICAweDAxOiBOb25lLCAgICMgZGVjb2RpbmcgbWFwcGluZyB0byA8dW5kZWZpbmVkPgorICAgICAgICAweDc5OiB1IiIsICAgICMgZGVjb2RpbmcgbWFwcGluZyB0byA8cmVtb3ZlIGNoYXJhY3Rlcj4KK30pCisKKyMjIyBFbmNvZGluZyBNYXAKKworZW5jb2RpbmdfbWFwID0ge30KK2ZvciBrLHYgaW4gZGVjb2RpbmdfbWFwLml0ZW1zKCk6CisgICAgZW5jb2RpbmdfbWFwW3ZdID0gawpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RpbWcudXVlIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RpbWcudXVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjcxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdGltZy51dWUKQEAgLTAsMCArMSwxMTcwIEBACitiZWdpbiA3NTUgdGVzdC5yYXdpbWcKK01fX19ZXi9cQSRRM18qMUxDX1FMNCcvXDslQVNfJVEoNl9RUDcmP1xCJkFXXydBPDdfUVQ1Ji9cNyRBM18KK00mMTA4X1E4NCVPXDclMT9fJFEgNl9RPDMnL1w6JFFfXycxPDtfUiQ6Jk9cNSRRN18nIUQ4X1NIVy1PXFwKK00uQ1dfMTQxKl9URSkzL10vM1UrXycxREFfUiw8KU9cQiciM18yNDksX1Q9JDJPXSQwRDdfLjM8Wl9UMSIKK00xP10uMyRfXzQ0XTJfUUQyJy9cOyUhW18qMjRNX1UxNjZfXTU1VVNfNTU9PF9VUT44X108N0YvXyUxJDkKK01fUUg2J09cQigyQ182NUE+X1U1ODc/XTg3JVtfNjVNPl9RQDUmX1xAJyIzXyVRODxfVSUzND9dPDZFN18KK001VTkvX1UtMTRfXDolQV9fJ0FIQl9UQSYyL1xdL0NDXzI0SSRfUkRHKk9cQidCO18pIixJX1VJOzcvXTsKK002NTtfN0VBNl9YJVw/L14hP0dXXzdFXUBfVSE0NU9dNDVVU180VTU6X1UpNDZfXS40JT9fMlRVNF9UOSgKK00zX10jMTRTXzEkRS9fVEEpNC9dKDFUW18xRD0uX1RJLzU/XSkyRSdfMiQ9Ll9ULSUzL10pMlUrXzIkRTAKK01fVDknM09dIzEkT18wRDEsX1QhIjJPXSMxNFNfMURFLl9UNSgzP10kMVRTXzAkLShfVDEnMy9dITBUQ18KK00wVCkoX1NcXjEvXSMwRENfMDQtKF9TRFwwP1xbMCQ3XzAjXSVfU1kgMT9cWi8kJ18uQ1EhX1NIXDA/XFsKK00uU1tfL1NVIF9RNDMlT1xFKFI7XyVRNDhfUzBSLT9cNyUxQ18pUjRIX1EwMiU/XDIkIS9fJSEoNV9RLDEKK00lL1w1JFE7X14+W1VfU1hUL09cRiciT18nUURBX1FENCYvXDYkMTdfJTEgNF9RPDIlT1w6JTFHXyYhLDcKK01fUTQwJS9cOCRRP18lUTAzX1E8MyU/XDolMU9fJzE8P19RTDQnT1xMKVJXXygxVD9fUVA3Jl9cNSRRO18KK00nQVA/X1FUOydPXDwmQVdfMDNdIl9URScyT1w6JUFbXydBSENfUVQ4Jy9cOCUhO18nIUA6X1FcOyc/XEAKK00mUV9fKEFUQV9SMD8oX1xIKFI/XyYxLDtfUUA0Jy9cPSdSM18yVF0xX1RVLzRPXTA0JS9fNDUlNF9VMTQKK001X1w3JFFPXyYxND1fUlxNLC9dSTo2O181NTk3X1UlMzQ/XTE0JF9fJyE8PV9SLDwqL1w4JTFPXzYlQTUKK01fVUE4NT9dOzYlL181JSEyX1FMNygvXDsmQidfNiU5OF9VTTo0X107NjUzXykyKEFfUiQ9KT9cPCYxX18KK003VVVAX1Q9JTFfXE0qUldfKEIgQl9SQEcpT10yNFRXXz43WVhfWSYxQ09dTzpGU181VT06X1UpNDVfXTEKK000VTtfNCUpN19UWS81T10pNCU7XzIkXTVfVDEoNC9dJTFFJ18xREEwX1Q9KTQvXSYyJF9fMSQ5LV9UJSMKK00yT10kMURXXzA0LSpfVCEiMj9dIDBER18wNC0qX1QxJjM/XSEwVEtfL0QlJl9UKSUyT10hMSRHXzEkPSwKK01fVCUjMk9dITBUS18vM10mX1QhIjI/XSAwRD9fL0QhJV9TXSExT1xeMCQ3Xy4zTSBfU1RfMS9cXC9EL18KK00uQ1EhX1NUWy9PXFctMz9fLEMgUl9TIE4sL1xNKjJPXylCKERfUTgyJS9cNyRRN18lMSA0X1EoLSQ/XDcKK00kQTtfJTEgNF9RODElP19fXT9LXytSNE5fVDxeMl9cQSciK18mQTQ5X1E4MSU/XDUkITNfJiEsN19RODEKK00lP1w2JDE3XyUxIDRfUUAzJV9cNyQxR18lUSg4X1BUKCMvXVY8RzNfMjQxKl9RRDUlX1w6JiEvXyYhNDQKK01fUSgwJF9cNSRRO18lMSw2X1EsMSUvXDMkMTNfIzBMLl9RRDUnP1w9JjIrXycxQDxfUUA0JU9cMyNRJ18KK00lISAyX1E8MiVPXDYkMTdfJjEwOF9RUDcmX1w0JCFDXyVRLDtfUVg7KD9cPSZRW18oMVxBX1MkTyw/XF8KK00vM19fMyRJLF9RPDMmX1w5JTFXXykyLEZfVSUxM09dMTRVJ18zVSksX1UpMjNfXD0mIVNfKFFQRl9RSDcKK00nP105NjU7XzU1NTJfVTkzM09dODUlO18mUTxAX1FEOCdfXTg1VTtfNjVJNF9VQTk0T1xFKFI3XychTEEKK01fUUw6KC9dPDZWJ183NVFCX1YlQDlPXDclQVNfKSIwR19VPTg2P10wNCRXXzVVJS9fVVk2NS9dNjRFI18KK00+R1VXX1YhQzc/XTc2NT9fNUU9OF9UUTE1T10rM1U/XzJFITpfVD0qNU9dLjQlQ18yRFEzX1Q9KTQvXScKK00yNSNfMTQ9Ll9UOSgzX10nMjUjXzEkOS1fU1kgMV9dIDBER18uU1UkX1QtJTMvXSAwVENfMDQxKV9USS0KK000T1xeMDQ7Xy9UJShfU10hMi9cXjAkP18wRDErX1NZIDE/XF4wJDdfL1QlJl9TWSAxP1xaLkNXXyxDKFUKK01fUlRNLC9cRylSS18qUkRLX1JARiovXEoqIktfKFIkQ19SNEEoX1xJKTI/XyhBWEBfUlhKKy9cOSUhQ18KK00lIFwzX1FAMyVfXDMjQStfJiEsN19fS1FcP1xAJVFbXyZRMDxfUUw2Jk9cOCRRP18lMSA0X1E0MCUvXDUKK00kITNfJTEgNF9RNDAlL1w0I1EvXyVRKDZfUTwzJT9cNyRBO18kUFgyX1FAMyY/XDwlMV9fJiEsN19RNDIKK00kP1w0JCErXyQwXDJfUSgwJF9cMyQxM18kUSQ0X1EsMSUvXDQkQTdfJUEoOl9RUDgoP1w7JUFLXychQDoKK01fUVw7Jz9cOyVRR18lUSg2X1E0MCUvXDUkITNfJSBcM19RLC8lX1w3JFFPXydBRD9fUVw5Jz9cPSYxT18KK00oUiA/X1I8RChfXEEnQVdfJUEoOl9RQDQnL1xAJ0InXzJUTShfVFUvMy9dLjRES18zRF0oX1FQOCZPXD4KK00lUidfJlFAPl9VOTY0X106NkU/XzclRTRfVUU1NV9cOCUhV18mQURAX1YhPzk/XT03RV9fODYpQ19TVFwKK00wX1w2JVFbXyZRVEJfViVCOj9dQjhGT184NiVMX1E8NygvXEIoUktfM0UhNV9VLTU2T103NEVDXylRXEMKK01fUjREKF9dOzZVQ183NVk4X1ZNSjo/XjVEWTdfQSgiIl9VRTY1P104NiVPXzRVNTpfVSEyNj9dLjQlP18KK00yVFU0X1RFKzRPXSszNTNfMVRFMF9UKSQyX10kMURXXzEkOS1fVC0lMy9dITBUS18wNC0qX1NZITFPXSAKK00wVENfMCQtKF9UJSQyP1xcL0Q3Xy8zXSZfU1RfMU9cXjAkP18vM10kX1NQXjBfXF0vVDNfLiNIX19TKFAKK00sX1xKKiJLXypSREtfUkBGKi9cSClCQ18qMjxJX1I8RSlfXEQoQjNfKVIsRV9SQEQpT1xJKTI/XyoyNEcKK01fUjRAKS9cOCRRP18lUSg2X1FAMyVfXDQjUS9fXl8rUl9SODsoL1w7JEFHXyVRLDVfUUAzJV9cNSQhM18KK00lMSA0X1E0MCUvXDUkITNfJTEgNF9RMC8kX1w3JEE7XyVRLDVfUTwzJT9cNSQhM18mISQ7X1MwSi4/XDoKK00kUU9fJTEgNF9RMC8lP1wxI1ErXyRBIDNfUSQvJE9cLyMxI18jMFQwX1EgMCRfXD8nIitfJlE8P19RODEKK00lP1w1JDEvXyRQXDFfUTAwJE9cMiMxJ18kUFgyX1EoLSQ/XDMjQStfJDEgN19RPDMmX1w4JEFLXyYxJDUKK01fUUQ0JU9cTSoiQ18xNCRfX1NUWi4/XDYkQUtfJiEwPV9SREYrL10yNDUjXzM1JS9fVSUzNC9dMjRUV18KK00pUjBDX1IgPCk/XD0nIitfNlVVO19WLUI4P109NlVDXzlWLUVfUUQ1J09cOiYiJ182RUlDX1YpQzpPXUgKK006NyNfMTQ1MF9RNDYnP1w6JyInXzdVXUhfVjFEO19dQjhGV18kQSg9X1FMOykvXUE4RkdfN0YhSF9WJT8KK006L1w/JlIvXychWENfU1kgL09cWi4jS18nQVA/X1JARSpfXTo1NSNfOCVNNl9XOVI8L11EODYjXzVFQTsKK01fVT05Ny9dOjcmJ180NS04X1RRMTVfXSozRTtfMTRFMV9UQSo0P10lMVRbXzE0OS1fVC0lMy9dJTFUW18KK00wRDUqX1NQXzEvXF0wJDdfMDQxKV9TVSAxP1xeMCQ/Xy8jWSVfU1BeMT9cWC5DX18uQ0RfX1JQSyw/XEkKK00qIltfK0JQTl9SSEgqT1xKKiJLXylSNEdfUkRHKj9cRShSN18qIjhIX1I0Qyk/XEYoQjNfKVIsRV9SKD4KK00oL1xFKDIvXylCJEVfUiw+KE9cVyxDO18pIVxDX1E4MSU/X1xcLy9fJ0EwN19TJEkrL1xMKVJHXychPDsKK01fUTAvJF9cNSQhM18lIFwzX1E0MCUvXDUkITNfJSBcM19RPDIlT1wzI1FDXyVRKDhfUUAzJV9cOCQxR18KK00kUFAzX1E8MSU/XDUkITNfJDEkNF9RKDAkX1wyJCEvXyQwXDJfUSQvJE9cMCQhL18jMFwyX1E0MyVPXEAKK00mUV9fJTEsNl9RKDAkX1wxI1ErXyQwXDJfUSQvJE9cMCNBJ18kMFwyX1EgLiQ/XDEkQS9fJiE8Pl9RQDQKK00nL1xBJzFfXyQwXDFfVEkmMS9dNTQkS18oUihBX1EsMSZPXDUkUVNfKzJQUl9VLTQ1P10tNCU3XzVFRT4KK01fVVk9OF9cUCszL18nIUBAX1E8OCdfXT44VkdfOEYlSF9WKUE5X11DOEZHXyYhOD9fUTw0KC9dPjdWO18KK004JiVIX1YhQTovXTQ1RU9fJlFIQV9RQDcnT11FOSZLXzk2MUpfVV0+OS9cOSVSI18nIUhDX1RVLTQvXFEKK00sUyNfKVI8Sl9RTDooP1w5JiFbXzA0IF9fUlRLK09cQCciM18pUjBKX1QgXS4vXSIvRCNfKDFYRF9RXD8KK00oT11EOTVfX0BILV1fWTo1RS9dRzk2Q181NUU7X1U1ODc/XS40JT9fMkRJM19UQSczT10mMVRbXzE0PS4KK01fVCUmMy9cXjBUQ18wJDUqX1NZIzIvXF0wRD9fL0QhI19TWF4wP1xULSM/XytSXFJfUlBKKz9cSyoyU18KK00qQkBLX1JISCpfXEsqMk9fKiI4SF9SREcqP1xIKUJDXyoyPEpfUjhEKV9cRShSO18pMixGX1I4RClPXEQKK00oQjNfKSIoRF9SMEIpL1xEKEIzXykiKERfUihAKE9cRikiO18kQFgwX19fVl4/XEAmIU9fJ0FEO19RRDUKK00lX1w5JSFDXyVRKDZfUVA3Jl9cOSUhQ18lQSQ1X1E4MSU/XDUkITNfJiEsN19RPDElP1xAJlFPXyVRMDMKK01fUTw0Jk9cPigiN18nQiBDX1JATCtPXDsnUidfJDEkNF9RJDElL1wwJCEvXyQhIDNfUSgwJF9cMyNBK18KK00mQTA4X1chSDsvXDckQTtfJEEgM19RJC8kT1wxI1ErXyQwXDJfUSAuJD9cMSNRK18kIFgxX1FEOScvXS8KK00yVS9fLVMoWF9SLEAmX1xdLlMvXzVVISRfVUkwMD9dPjVUT18mQTQ7X1FANCcvXFgtQ0dfLyNMWl9TWSEKK00wT10xNFVDXzQ1KTlfUlBNLS9cPyZSL18lUUA/X1YlRjsvXUg5VltfOzZRUl9WXU49P1w2JSFXXyZRQEQKK01fVVU7OS9dRjlGR185VkFJX1VNOjgvXDglQV9fJkFEQF9WLUM5T11IOkZDXzk2OUdfUTg1Jy9cNCRRS18KK001RT04X1VdQTdPXTY1RUdfJUE0PF9RRDgnT10gL1NbXylSNEhfUUg2J09cQidSN185Vi1BX1YlPDgvXDwKK00mIiNfKDIgRl9UPSUxX1w+JyFbXyoiOEhfVVk8N09dWj03I19KOiY9X1c9Uj0vXTs2JVtfNSU1PF9UWS4KK001X10kMURbXy80LStfU0BbMC9cWS8kJ18rUyhXX1JETCw/XEsqMlNfK1JITl9SVEgrL1xNKiJTXypSREwKK01fUkBIKl9cRilCR18pQjhJX1I4Rio/XEUpMkNfKiJAS19SPEcqT1xHKVJLXykiMEdfUjBEKV9cRSkyQ18KK00qIjhIX1I8RSlfXEUoUjdfKTIsRV9SNEMpP1xFKFI3XyoiOEhfUihAKE9cTSoyT19eLyNTX1JERClPXD0KK00mMU9fJlFEO19XUVc+X1w2JDE3XyZBNDlfUUQ0Ji9cOCRRP18mISw3X1FcOidPXEYoMjdfMlQ1I19ZIisKK01BP14rQjgzXydRXEJfVilHOy9dMjYlS18yRFkwX1M8Vy5PXEsrMyNfKiJITV9SMEYqP1w6JyFfXyUxNDgKK01fUTA0JV9cOSUhQ18kUFQxX1EoMCRfXDMkMTNfJDBcMl9RJC8kT1wwI0EnXyQwXDJfUSQvJE9cMCNBJ18KK00kMFg0X1NYWDAvXD0lUU9fKVIsO19USSUuP10+NEQvXzslRSdfVzVANS9cSSgyN18sQlRTX1QxIDBPXSIKK00wI1dfNTUhKl9VJSwxT10nMEQrXy5DNFlfUVw7KF9cNyYhX180VUE+X1UtMjY/XS8zRTNfNVU5PV9RQDYKK00nX1xbLiQzXyxSXFhfVU05Nl9dOzclO182JTk5X1FINyhfXDkmIV9fNlVRPV9VXUM2X11AOEYjXyYhPD0KK01fUUg5J19dPzg1X184Jik/X1VZPjg/XDglUVtfJVE4PF9UNSQwX1xWLSM/XyYhMDxfUVQ6KC9dSzlGO18KK007NkFOX1FENSdPXDwmUitfO1ZRUl9RVDooL1xDKDIzXzVVNTdfUjhAKS9cTCkiQ180RFUtX1VNNjVPXiAKK00+V09fQTgiIl9UMSAwT1xULEMzXykiMEdfUVw+KS9cOyZCI18kQSQ3X1IoQik/XEgpQkdfKlJETF9TKFAKK00sX1xSLSM/Xy1TRFxfU0RbL09cWi8jX18uM00gX1NAWi9fXFYuI1dfLTM8XF9TKFQtX1xMK0MnXyoiSE0KK01fUjxJKy9cSioiS18qIjhIX1JARiovXEgpQkNfKVI0R19SPEUpX1xGKSI7XyoiOEhfUUQ1JV9fXF0vP18KK00pUihEX1FENyY/XDYlUUNfREkiM19RXDonT1w4JFE/XyYhLDdfUTwyJU9cNCRBN18lMSw2X1FENCYvXSQKK00vI0NfRVkmJ19ZRjhEP18hUSw3X00rRl5fWl5TTT9eVk0rP19QO0ZdX1Y1Qzk/XUc6Rk9fNzYhQV9TLFYKK00tX1xEKjJHXygyOEZfUiBDKS9cQykiN18oQiBCX1FUOydPXDglQUdfJUEwN19RIC4kP1wzI0ErXyRQWDIKK01fUSgtJD9cQicyJ18vU0RdX1JQRikvXT41VE9fOlYlNl9VVS8wL11cOSU3Xz9GMTlfUlQ+KE9cSChSR18KK00tUyxVX1NYWy1PXUU2RF9fODU9KV9VPSwxP1xcLUMzXyZBOD5fUTw4J19cXC9UM18vM1EiX1FYOyg/XDwKK00mUidfI1BUNl9SOEIqX1xNKEI/XykyKD1fVUk8NF9dMzQ1M18mUUBEX1FEOShPXTk3JVdfNVVRNl9VSTwKK002P1w5JjFTXyYxQD5fVVlCOC9dTzw2X185JjFHX1FANydPXDwmUidfL1QkX19SREkrL1w5JTFXXycxREEKK01fU1xdL19cPSZCI18mMTQ+X1E8Nic/XFEsIztfJlFAPl9RUDonP11KOjZDXyhBXEtfUiA9Kj9dMDJUX18KK00zJDkkX1JIQidPXEgoIVNfM1RJJV9WQUU4L14pQTg/XzYlOTlfVEUnMk9cNSUhS18yNFExX1Q5KTNPXFwKK00vVDNfMCQtKF9TWSExT10iMTRLXzE0QS1fVCEjMi9dITEkR18vVCEnX1NIWzBPXFwvNDNfLjNNIF9TTF0KK00wL1xdL1QrXytTJFRfUkxMKz9cTCpCU18qMjxJX1JERyo/XEgpQkNfKiI4SF9SQEYqL1w9JlFXXyVBKDQKK01fXztSXC9cXy5DS18rMkxNX1I8RypPXjpGKU9fJiEsN19RQDMlX1w5JSFDXychQDpfUTQzJT9cOicxW18KK00mITg5X1FcOyY/XjpFOF9fRjkyLl9dOzlWT18vVF03X1QtIzNfXFcoUk9fK09cI184RTk3X1Q9IjBPXV8KK01AN19fOEVdPl9VLTM0L10iMENfXyxTLFBfUlhOKl9cWC5TN18tIzhTX1JMTSpfXEMoUjtfJyFEOF9RODMKK00kT1wxIyEjXyUxIDZfUiA5Jj9dJTBTU181RS0oX1ZVQzU/XiA8Ri9fPFY1Nl9WWTwzT11PNlRXXzc0WS8KK01fVU03N19cSCpTI18xNChdX1Y9OzRPXUY2NFNfNlUhJV9USSYxL1xDJ1I/XyZBQDtfVTU1NE9cPicxU18KK00mQTQ1X1FENicvXDglUVtfJ1FEPV9UQE4oP10qLiJLXzRFLSxfVDklMl9cQCZSP18lUURBX1VZRzs/XUIKK005VlNfOiY9Rl9RVDooL1w7JlI7XzBEMSxfU0BaLz9cTSsjL18mITg/X1E4NSZfXFwwM1dfIzBcMl9RMDEKK00nP1w4JUFfXyQxRD1fVDUnMy9cOCUxT18lITg7X1RRLjMvXDomIU9fKFIgRl9WOUQ5T1xMKiMnXydRTEMKK01fVkFGOi9dPTZGI18oUiBGX1Q5JDFfXEEnUitfKSIoRV9VISoyL10lL1NXXzFEMSdfUTQ1J09dQjkmR18KK000JF01X1RRKzQ/XSkyJFtfMjRNMF9UOSgzP1xfMDQ7XzAkKSdfVFUsNE9cVS0jS18sIlxVX1JUTCxPXEsKK00qQyNfKlJIUF9SSEkrX1xJKiJbXylSPEpfUkRKKl9cSSpCT18qMkhLX1JMSSsvXEkpUktfKkJAS19RTDkKK00nL1w5JTE/X1xfN1JfU1BeLy9cQSdSJ19DWEouX1RdLTQvXDYlIT9fJVE0OF9RNDMlT1xDJlFfXyYxMDgKK01fUVRAKD9cNiYhO18mUVw9X1kiMUJfXkJGWTdfVTxfLV9dOytST181Ujw3X1RcSyRfXFcnT19ePkRJL18KK00lIFwxX1FEOiZfXDslUUdfJiEsM19RRDQlL1w+JjFHXyVBJDFfUjRGKC9cUi0yX18wJCxdX1QpJS9fXFIKK00sQl9fK0JYS19SJEAnX1wxI1EnXyghTDtfVDEiLl9dJDAzO183JSkkX1dJSzdPXTMxIz9fMEMsRl9VLSIKK00tP106MlRPXydBRD9fUixFKi9dMjM0P187Nik3X1Y1ODJfXUs3RSdfOTVRNV9VKS00P10uMlRLXzpGQUMKK01fUTQxJF9cNiRBM18mQTw9X1E4MyY/XEonQV9fNiNUTF9UVFgpT11IN1VDXztGSUxfUVg3KD9cQCdSO18KK000VU0/X1YlRTlfXilCKD9fJSEkN19RPDMnL14iQCgvXz9YJV5fVi1DOU9cOCVBX18lISw5X1RZLDFfXDYKK00kUStfJjE0Pl9RQDcnT1w4KCIzXzUlOTtfUSwwJU9cQChCP182NUk7X1EsMiYvXEgpUltfOSYxR19TMFAKK00uP1w/JlIvXzlWNUdfViU+OS9cMyQhO181VTU4X1FYPCdfXEMoMjNfOTYtRl9RUDsoP1w2JUFfXzFUSTUKK01fUiA8J09dRDdVX19AR1VdX1VVODYvXS4zJF9fMkRJLV9UXS80T10mMURHXzAkKSdfVCkkMj9cXjAkN18KK00vM10kX1NZIDE/XFkuVCNfL0QhJV9TVF8xL1xdLzQjXy9TXSJfU1heMD9cXy9UK18vQ1khX1NQXC9fXFMKK00sUztfKCIgQ19RSDYmL19cXk8/XypSQEdfUUA2Ji9cOyYxU18rMlRQX1FAOCZfXDYlQUdfJSEwN19RWD0KK00pL1w0JUFPXyUxQDlfUkRGKD9cPidSI19DWFotX1laOEQvXzNTTEdfVFxPKV9dNytRX18zUkwzX1JcNl0KK01fWi43Ri9cOCRBO18mMUQ8X1FAMyVfXDwmIUtfJkE4OF9RUDgmT1w3JFE3XyQxKDNfUVQ+J19cOycxS18KK00pIjxBX1FQQCYvXSAwU1dfKTI8RF9RNDclP1w+JkFDXzI0PSBfVTkzMi9dSTdVJ18+Jjk8X1VBKC9PXSUKK00uIldfNEQ8XF9WKTM0X1w6JEE7XyYhSDhfVylMOS9dRTZVJ187NiEzX1ZJOjJPXVM5RU9fNTUhK19WRUcKK004L106NiUnXyRQWDBfUTQwJS9cNSRBQ18nUUg8X1Q0Viw/XTsvQlNfMkMgPV9ZOiY/P14mP1dfXykhVEQKK01fUkRGKy9dQjomS18/J14gX1hGKkJfXDclIUtfJlE4PF9XTVc9P11PPDZDXzhGMUFfUUg5KC9cNyVBU18KK00xNCBbX1RdKTFfXDslMVdfJTE8PF9RSEIpT1xZLlQjXyYxODxfUTA2Jl9dJzI0U18jUSA3X1FQPCk/XTAKK000RT9fLUMkXV9RXDsoX11BN1YnXzYlNTtfUSwwJU9dODVFR18nQVA/X1FcPSgvXFsuRCNfJiE8PV9RMDEKK00lX1w2JFFHXyYxMDhfUSgsJC9cSikiQ18yRDEoX1UpMDRPXVQ8RzNfNyVJPF9VQTY2L10rMzUrXzFUSS8KK01fVDkpM09dIjE0S18vVCknX1NMXjBfXFguVCNfLFM4W19SWFAtP1xOKzMvXytCVFNfUlhNLF9cSyszI18KK00qUlRQX1JYUCxfXEsrMyNfKCFYQF9fX1RdP1xPKVJLXyYxRDxfV01eP19eM0UpN18lUTw6X1FUPSgvXUkKK005Nj9fOzZRUl9RKDUmT1xGKVJDXychMDBfUlBIKk9eMEJYT19GKTIsX1xbLVFPXzRUPSNfVDxTLF9dOzAKK01TT18qUCtTX0lJSj1fUVg3J09cOyYhW18lMSg4X1E0NiVfXDMlITdfJUE8OF9RIDEkT1wuIzEvXychTEEKK01fUUA5Jk9cPighW18qIlRHX1NRIS5fXEssIlNfKlMgTF9SXEsqP10hLyM7XzVVJSdfVkE+NC9dQjQkO18KK000JCBWX1Q0WitfXT00VENfN1UpLV9RNDAkT1wwJCEvXztGRUNfVlFCNi9dWztGJ18+Nk08X1gxVzpPXUMKK003JTtfOCVRNF9XJUw5T1w+JUFHXyUxIDZfUSgwJF9cQCYxR181JCRZX1YlIys/XTQtUjdfRCdVVV9YXicKK01BP1xLKSJPXzglXUVfVSE0NU9dMDRVM18zJFUuX1A8JiMvXEMoMjNfMTQkX19VKTYzP1xGKiI3XydBVEMKK01fUUA3Jz9dLTFEI182JSEuX1FMNicvXDclQVNfKiMgVF9VOTg3P1w7JiFbXyUhODtfVDEmMj9cNCVBT18KK00nMVRIX1QxJjJfXE0qUzNfJ1FQQl9UWSwzT10vMyUrXyUhJDdfVUE2Nj9cPichX18lQTA3X1EkLCQvXDoKK00lQUNfJiEsNV9SJDomT1w7JUFTXyRQXDdfUUw3J19cPSYyJ18nIUg9X1IgPig/XD8nMiNfNEUhM19WXVEKK009L101NjVPXzM1JTNfVEkuNC9dIzIkV18vVDEpX1NZIzIvXF8xJEdfMCQlKF9ULSIyP10iMDRDXzBEJSgKK01fU1RfMS9cXTA0L18uQ1kgX1M4Wi8vXDUkUTdfXk8rVV9TME8tP1xEKFJHXztWSUpfWToyRC9cPiYxV18KK00rMkBMX1oiNUUvXis/V09fJzE8O19RSDknX1w9JlFXXycxWD9fWTYwRC9ePkU4W19TXEslX107L1NfXzgKK01TXF9fVSxLJl9dQyxRX149RSkzXyZBNDdfUVQ5Jl9cNSRRN18lUTQ3X1FANiYvXDomIUtfJFEkM19RLDEKK00kX1w7JjFPXychSDxfUVA6Jy9cRysiO18uM1hcX1JITytfXEYrIkNfLTMwTV9SXEopL10rMTNXXzZVLSkKK01fV11TOk9dLTAzQ18xM0xRX1RVJS5fXVA4VTtfKDFENV9SXEsrP10vMSNXXzxGNThfV1VQOF9dXTxGP18KK01BR01QX1chSDdPXUU4RT9fPEchSF9TOFItL1w8JjFfXyZRRDtfUlRIKE9cWiohW184RChMX1RATydPXl4KK01LWktfOjYlP19TJE0rX11DOVZHXzg2UU1fVUU/OD9dNDZFU18tU1RfX1NNITBfXEwsQzNfM1UtNV9RJDMKK00lT1wtIzEjXyghWEFfU1BZLS9eLUIoQ18oMUxDX1IsQClPXFEtQ09fN0YhRV9RODMmP1w5JlIjXzJETSwKK01fUiA9KF9cPCYiI18pQjBHX1IkPyhPXDwmQVdfMiQ5KV9USSgyX1w0JDE/XzQ0WTRfUVw8KE9cMCMxL18KK00lQSQ1X1FAMyVfXDQjUS9fJlE4Ol9RRDYnL1w1JEFDXyVBLDlfUVg7KD9cOiVRV18lISQ3X1FMOCdPXDsKK00mIVtfKTIsRV9SNEMpP10nMTQ/Xz03LVVfVV0/OE9dLjQlN18yRFExX1QtJTJPXSEwVENfL0QhJV9TUF4KK00wX1xbLzQrXywzLFZfUyRTLU9cVC1DR18rUyRUX1FENyZPX1hcLy9fMVQpKF9STEosL1w/JkFLXztWPUUKK01fUjA/KF9cQChCN18oIiA9X1IkPiY/XDUkUTtfJkFEP19RXDcmT1xOKyJbX0M4QihfWVo1Q09fL1JMN18KK01UTE8rX10/LlNPXzxUTFtfVUxLJV9aIjdFX1xEJ1InXycxRDtfUTg0JU9cNyUxP18mMTw5X1FIOCZPXDMKK00kMS9fJEEgMl9RSDgmT1w8JkFTXyZBQDpfUjxMKU9cVy8jS18qQlxPX1I0SylfXE8sMltfKiI4Q19TUFkKK00tL10kL1NHXzFTXF1fUUwyJE9cQychU18nQUQ5X1MsSikvXSQvI0NfNERVLV9WQT82P11GNkUnXzw2OTsKK01fV0lNOC9eJT1WQ18+NyVHX1Y5QzYvXUw6ViNfLTMsUF9SID4oP1xCKCIrXyoiMEJfUlQ+Ji9dJipRS18KK00uIiQ1X10zJlBfXjRDKEtfJ0FIOF9VVT83L11BOyY/XzZGITxfVV1FOD9dSTtWT183Ni0/X1NVIy9fXSoKK00zVF9fJDEsNl9QXC8kT1w2JSE/Xy1TME9fVFEnMV9cQCZCK18mITQ7X1MwWS9PXTw3Ri9fNjU5PF9TIFIKK00tX10wNDUrXyRAXDVfUiA8KS9cNyUxQ18lQTA3X1FMOScvXDYlIT9fKCFYQV9RNDImL1xEKDI/XyUhJDcKK01fUVg7KD9cOiUxR18mQTQ5X1E4MSU/XDQjUS9fJVEwOl9RODMmP1w4JTFPXyUxKDhfUTgzJj9cNCQxP18KK00lQSw5X1FENicvXDQkIUNfKCFQRF9RNDEmP1xDJ1I/Xy0zOFdfVS01NF9dRTlWN18yRFEqX1RJLDNfXSQKK00xREdfMDQtJl9TWSAwX10iMSQ/Xy9UJSRfU0xdMC9cXjAkL18uM0RcX19PU11PXEcoQkNfKDIgRl9YWikKK01CP11VO1ZXXypCNElfUUA2Jj9eXU1bN19POzZRX1FQNyZfXDglUVdfJjE0N19RNDMlP14yQzhXX0dJNi4KK01fXEslUC9fNlNcX19XPTM0X11TMlNPXzJRTCdfSCk+N19RXDonL1w3JFE3XyUxLDVfUTg0JU9cOSVRR18KK00nIUg8X1EsMSRfXDMkMS9fJkFAOl9RTDkmX1w7JjFPXykiRENfUzRaLi9cTixTL18pQlBIX1MwVStfXEwKK00qMjNfMlQ5IF9URSMuX11DNjU3XzY1JS1fVEklMC9cWS1DJ18sIlBOX1IwQik/XDglQUdfJiE4OV9RTDcKK00mP1w/JlFHXysiND9fWCFWOy9dRzZVU184RVE6X1ZFRjg/XSAvM1NfJ0FIPF9RRDcmP1xULEJfXylRUDsKK01fVEhTKV9cWSkxV19SS1ZcX1gtWT0/XEAmMUdfKyJITF9TLFouT10oMlRTXyoySEtfViVCOF9dXT9HX18KK00kMSgzX1suVU4vXDsnMiNfJUE4OV9RUDonP1xJKUInX087QlhfViE6OE9cOyYhW18sQzxcX1NAWi9fXD8KK00nIitfKiJIT19UISEwT1w3JSFLXylSLEtfUSwxJS9cLCJAV18sQyBTX1E4NCVfXDIkIS9fJ1FQQl9RQDUKK00mX1wzJCE7XyQwWDRfUUAzJV9cOSUhQ18lQSQ1X1E0MCUvXDIjUTdfJkE8PV9RLDAlT1wyI1E3XyYxODwKK01fUSQuJS9cOiVRV18kUSA2X1E4MiZPXDckUU9fJTEkOV9RODImT1w/JzIjXysiSE1fUlRLK09dMjQlL18KK00yNEkrX1Q1KDI/XSQxVENfMFQ5J19TXSExL1xeMCQvXzA0LSZfVCkkMV9dIDBEN19fX0NbX1IoPyk/XDUKK00lQVdfJ1FQO19TUFYtL1xAJlFfXyhRVEFfUlg/J19cRyVRM18oQUg+X1EsNSZPXDElITdfMCQlIl9YQiYKK01AX147RThXX1FcKl1fXTsvU19fPVUtM19WXSctX10nJVA/Xj5FWT9fJyE8OV9RODIlL1w0JEEzXyQgWDAKK01fUTQzJT9cPSZRV18kUSQzX1E8NSVfXDklUUdfLCJYUF9RSDgmT1xFKkI7XyxDPFVfUyxYLi9cRCpCO18KK00vI0BQX1JARCcvXU87Jj9fOEVRNF9XXVU8P11MOFVTXzs2QTxfVyFKOC9dVTpGL188Rjk9X1ctRjZfXUoKK003JS9fNERZLF9VKS40L109NiUvXzs2MT1fVkk+OD9dJS5DX18nUUg6X1JYSisvXDslMUdfJVEsNV9SMEMKK00oT1w/JkFTXy0iND9fUjw5JU9dNzRFM18+Vy1RX1I0PSgvXEUpIktfKUJITF9SIEAoX1xIKUJHXyYxODwKK01fVkFHOz9cQCdSN19HKVpBX1E8OScvXDomQVdfJzFMPl9SLD4mP18kUDwjXzomPU1fUixAKU9cNyZBX18KK00lUUQ+X1EoLyU/XDglUVdfKlJQTV9RVDsnT1xAJyIzXyRRJDRfUTg0JV9cVSxTO18jMEwuX1E4NCVfXFEKK00rQzNfLiMwXF9RSDYnT1w7JVFfXyVRKDZfUUg1Jj9cNiQxN18lMSA0X1E4MyY/XDclIUtfJSEkN19RODMKK00mP1wxI0EzXyQwWDRfUTgzJj9cNSRBQ18lQSw5X1FMOScvXDklUUtfJjE8OV9RJC0lP1wzI1E/Xy4jMFwKK01fUkxIK09cRyoyU188RzlUX1UpNDRPXSozNFtfMSRBKl9UMSYyP10jMTRDXzFEOSlfVDkoMl9fX1xPL18KK00qQjRJX1IgQio/XSIvRCNfMFNMWV9TNE8sX1w3JSFLX0RYTi5fWUoyRC9cSikyR18lUUQ+X1FQOicvXEkKK00pQjdfQ1haJ19ZNjVDL18kUEtXX1VMWyxfXTcqUj9fOlNcW19TPCshX1omPUZfXEcpIi9fJUEoNF9RPDIKK00lT1wzJDEzXyVRNDdfUTg0JU9cNSRRN18lMSw1X1FANiYvXEMoMi9fJlFEO19SMEgpT1xZL0NTXytTMFIKK01fUjBJKV9cWy5TQ18mUixNX1M5JjgvXSMzVktfLTNJM19TIFozT1xdM1VXXysjUSxfUjxML09cSyxEI18KK00uRDEvX1VZQjpPXUg5VjtfO0Y9T19YIVk8X14kPkZfXzxWMT5fWV43RT9dLzM0X18yND0kX1FcOyc/XDwKK00mIUtfKFI0SF9TWSo0X1w2KzMrXzNWKU5fWFpITT9cPCkyN18pMiBAX1NQXzAvXSgzNE9fNUU5M19UVSwKK00yX10sMzRbX0xLMldfUUA7KC9eVEtbL18nQVA+X1FcQihfXD4mQVNfKDFcPF9bRlVMX104NFU/XyVBNDwKK01fUSgvJT9cMiQhL18kIFgxX1E4NCVfXD8nMiNfJTEsNl9RNDMlT1w0JEE3XyRRJDRfUSQvJE9cMyQxM18KK00kQSAzX1M8Uy5fXFIrQz9fJzFEQl9RSDYnX1wyI1E3XyVRNDhfUTw1Ji9cNyUxQ18jUFQwX1IgPig/XDcKK00lMUNfJCBYMV9RSDgmX1w0JEE3XyUhKDVfUTAyJT9cMyRBR18kUSg4X1EwNCVfXDMlITdfJSE0PF9RIC4KK00lX10xM1UrXydRUDtfVllPPC9dRjkmJ19BOCFaX1UxMzRPXSw0JStfMTRFK19UQSgyX10qMiRPXzFUNSgKK01fX19QWy9cWy0jM18qMkhLX1RVJzE/XFUrMk9fLUMgVF9RSDcnP105NDUzXzhVTTlfUjxCKU9cOycyK18KK00pQjBGX1M4UyxPXi9DSD9fRilCL19cMyJPP185VDxfX1VcUytfXUsvU09fJU5LR19KSjpEX1RdLDJfXDUKK00kMS9fJUEkNV9RLDElL1w3JTE/XyVBMDZfUTQzJT9cNSRRN18lQTA2X1FYPCdPXDomIUtfKEI4RF9TQF0KK00uX1xQLTMvXyhSQEZfUzRZLV9cNydSR18iUTxSX1BQMy1fXCgkUytfKlNRSl9RWFk9T1xJMldXXylVIiEKK01fU1lMR09cTDZIU18sRU4sX1Q1SEQvXS45SFdfMyUxPl9ZPi1AT11XOlYrXy4jKFBfU10gMD9dKDIkN18KK006RllFX1ZJTjlPXVVAWDtfLlVVUV9XVk9RL15AUV4jXz4qKlJfVzYkQS9eJD5XT18wU10hX1FMQygvXE0KK00sUl9fMFRBJl9XNVo+T15YUCwrXyUxXENfW1ZbT09cPCZBU18mQVQ+X1FYOicvXDUmIStfTVpGRl9ZTiAKK01BT1w0I1E3XyQxJDRfUTAyJT9cNCRBN18kIFgxX1EwMiU/XDMkMTNfJFEkNF9RJC8kT1wyJCEvXyUxLDYKK01fUSwxJS9cNCRBN18nQUxBX1EsLyVfXDEjMTdfJCBQNF9RJC8kT1w6JiFPXyYxPDpfUUA2Jj9cMiQhL18KK00nMUw+X1EwMiU/XDomIU9fJEBcNV9RKC8lP1w1JEFDXyUxKDhfUSwyJi9cMSRRQ18kUTQ6X1E8OSdPXDEKK00kQUdfJFEoOF9TKFAsT1w/JzFLX0g5UjxfWF4kQF9dSDclP185RVU9X1YhPDdPXT42RVNfMkQ5KF9VJS0KK00zX10yNCUvX19fM1RfUlBHKj9cPigiN18oMVg9X1JYRikvXSwxREtfKFIgRl9SOD4oP1xKKEIjXycxQDwKK01fUUA6J19cPCZBU189Ry1SX1guIj5fXjhGKF9fTytKVV9dQzBTT18+VF0rX1Y8Wy1fXDZaTj9eSklKM18KK00xVDEjX1E4MiUvXDckQTtfJVE0OF9RSDgmT1w3JTE/XyYhODhfUTw1JV9cNyUxP18mUUQ7X1FUOyc/XD8KK00oUidfLDM4VF9TLFgtT1w9KEIjXy4jOFFfUjBCJ19cPyciK18lQSw/X1EwMSovXFAtVTdfJ1MlNV9SIFYKK003L1xPNSc/Xy5WSi1fUlU6QE9cPjE2X18rJTVZX1JZKDtfXVxAWEdfR0kiIV9WUUA1X10lMDNfXytDJFIKK01fUkhPKl9dPzhVS19AN11aX1VVRjs/XTk/KS9fO1laVl9ZXyFWX14jSTtHX0g6OktfUyxMKy9cVC0zO18KK001NUk4X1daID8/XUw6VktfKjJQTV9aIkRJT10+OFZDX1BMIyNfUSwxJF9cMCRRM18nQUg8X1IsQSZPXlgKK01LWkdfQldRXF9RPDElP1w2JSE/XyUhKDVfUTAyJT9cMyQxM18kUSQ0X1EsMSUvXDIkIS9fJEEgM19RLDEKK00lL1wyJCEvXyRRJDRfUUg4Jl9dKTFUS18lMSw2X1EgLiQ/XDIkIS9fJEEgM19SID4oP1xCKCIvXyhSJEQKK01fUTw1Ji9dJDBEN18lISg1X1EgLiQ/XDQkIUNfJEBYNl9RSDYnT1xHKFJPXywyWFRfU0BTLj9dLjIlI18KK004NUlEX1EkLiZfXDQkMVdfJyFAQF9UKF0wP15NSipLX0xKSkhfV01POk9dTDk2N19CWCoiX1chRzlfXUwKK005NjdfNyU9N19ULF4wT19fXj9LXylSOE1fUkhPLl9cVS0jS18qIihAX1U9MTU/XD4mUidfRUkmM19bMkwKK01KT1xeLjNXXyNBIDVfUUg4Jk9cPiZRS19AJ1lXX1k2M0JfXlxOSzdfVV0nL19dTzBTX183UyxPX1BLPlYKK01fWlZJSV9cRCgyI18mQTg4X1E0MCUvXDMkMTNfJjE8OV9RPDUlX1w4JUFDXyVRNDdfUTw1JV9cOyYxT18KK00nUVQ/X1FcQyg/XE8tUzNfLiNUW19RUEEnX1xULiNLXydSJEZfUUg9J09cMSVBU18lUUhMX1E8QihfXSMKK002JStfPjheN19ZOlFPL11cRiojXzdHQiNfVC03OT9dKDk3J18sRD1EX1dFWz4/XjZBJztfPCY1Ol9UTScKK00xP10iMTQ7XywzOFJfWFovQi9dWj1XO18nIURGX1QlOjw/XiFMLCtfRjw3OV9YUldSP15KTjtHXy4jNFQKK01fU0ReL09dRDo2P19TPEcnX1heKkJPXDwmIUtfQ0haMV9WJUM6L15GSSo/XyRRLDZfUyBTLS9cRShCJ18KK01ESDohX1YxPzY/XDsnMUtfJlE8OV9RRDQmL1w9JlFbXyUxLDZfUSgwJF9cMiQhL18kQSAzX1EkLyRPXDEKK00jUStfJEEgM19RKDAkX1wtIlBbXyZRRDxfVSEvNT9dKDFUV18lISg1X1EoMCRfXC8jMSNfJCBYMV9RSDgKK00mX1w3JTFDXyQwXDJfUEAmIj9cMiQhL18mQTQ5X1Q5IjJPXF8vNDtfLkNJJV9RJC8mL1xSKjMjXzAjNFoKK01fWEVeQF9dODFVJ186NVVMX1YxOjpfXVc7R09fO1ZBT19aLj5IL149RVk3XzJEPSJfVTUzNT9fNlJMT18KK002VS0xX1RJIzBfXDolMTdfJyE4Ol9fX1hcX10hLzQ7XzRVQUpfUTAyJT9cRCkiJ187VjFJX1E8NCZPXDMKK00lITdfKiFUPF9RODAlL1w3JUFTXyZBODhfWF4qQk9dXz4nK19HOT4vX1pWS0lPXzJULFdfVi0jLF9dPysKK01RX15NSiovX0paRkZfUUQ2JT9cOyVRR18mQTQ5X1EsMSUvXDclMUNfJDBcMl9RMDIlP1w1JEFDXyVBMDcKK01fUTg0JU9cWS4jP18pIixCX1JEWC0vXFUuMz9fJjFUO19SXFQsL1xFKEJDXycxXDxfUTA6KE9cNyZTT18KK00nIVhBX1VNOTVPXitGKVdfQjouRl9YNjlHP11FOzZfXzYmKT9fVT1POy9cRTBHK18+J1VbX1hNVTxfXU8KK005NUtfM1RFJ19SMEUpT1xDKTIrX0c5Mi1fVVVMPD9cPytEN18kIk0jX1dWRU5PXjtSXj9fSDxTRF9bUyAKK01QT10wMVQ/XyoyPElfViFEOE9fLlIsO19GOTI0X1FMOSZfXltOW1tfMkRRMV9bQldPT1w5JlFbXzgmLUQKK01fUUA0JE9cQScxT18pQiRBX1FENCVPXDQjUTdfJiE4OV9SKEAoX1w9JlFbXyRBIDNfUSQvJE9cMiQhL18KK00lQTA3X1EsMSUvXDEjUSdfJDBcMV9QVCsjT1w8JjFfXyxTTStfUSgyJ19cNSNRL18kQSw0X1EgMCRfXDgKK00lQUdfKSIoRV9RPDUmL1w4JUFDXyVRNDdfUUA0JU9cOiUxP18nITw9X1BULyVPXCcjIStfIiA8Ll9RLC4KK00kT1w8JkE/XydRTDNfV1lJOV9dXThHK18yIlkpX1UsXTVfXSItQ19fQzgqIV9VOTE0P1xZLlNbXysyXFQKK01fXFsiUF9cTixTJ18zJFUuX1FUOCcvXDclIUtfX18zUV9TRFQuT1w3JVIzXylCJEVfUkRLKi9dXTxHP18KK00mQTw9X1hKK0MvXlJJWjtfPCZJTl9RLDImL1w6JUFDXyVRKDJfVz1QOk9eO0U4V19OKzpRX1tWXU5PXyEKK01PS0dfSjomPV9ZUjpFP148Rkk/XykyKEFfUiA8J09cPCVRT18kUSQ0X1FIOCZfXDMkMTNfJVE0OF9RPDQKK00mT1w3JTFDXyghWEBfUUQ4JV9cPydBV18qQ0RVX1M8Wy4/XDgnIUtfK0M4Ul9SPEIpT1xHKUFfXykiRFUKK01fUVBGMl9cNCZSJ18vU0xZX1gyKUNPXjdLKltfQDk6OF9XQiZBP11FOzZHXzc3MU9fUjEhPD9dWT9HU18KK01FN11dX1c9TThPXSgwRCNfKjJIS19SLEUoT14/RChPXyYyLEdfUzk/PE9dO0M6Q185OS5PX1VWMUxPXTAKK00/OU9fSksiWl9VXTU2L1xMKkJTXyUhQDZfXSMqUi9eQEZZT18nQVA+X1siUExfXSIxJEdfTEsiU19RSDoKK00nP11TPTdDXyUxKDhfUVhCKS9cRSoyT18lITA3X1EsLiRPXDYlIT9fJkFAO19RPDUmL1wyJCEvXyUxLDYKK01fUSwxJS9cMCNBJ18kMFwyX1EkLyQ/XDEjUSdfI1BUMF9RTDgnT1w/KUNTXyUhOEVfUVQ4Jk9cRSgiM18KK00kQSAzX1FENyZPXEwqQldfJzFMPl9RPDUlX1w1JFE3XzM0RStfUkREKU9cOiRBO18lQSg0X1EoMSQvXEEKK00nUitfJDE4PF9RQD4oL1xMKjJDXydRLDZfVjE6Oz9cOyRCS19DKCI1X1glVj8/XSUvI1NfKDFYPV9TUSAKK00vT1xQLEMjX1NcMyNfUyBVLF9dJzIkR18oIUw/X1FIOCZfX19cXytfKiIgQ19SMEEpX1xBJyFTXy9UJF4KK01fVzFJO09cMCMxL18pMjhHX1M0Sio/XEcoMjdfJSEsOV9RTDcmP107NUU7XzlWITpfWiI6RE9eRUhZW18KK01AKDYhX1lSPUVfXjJEKE9fPUdFU19XQVg9P1w3JSEvXyYhMDZfUTwyJU9cMSNRK18lQTA3X1EwMiU/XDcKK00lMUNfJTEoOF9RODQlX1xDKDIvXyZRSDlfUVA7Jk9cRy1DK18uI1BaX1FAPCZPXE8uU0NfKTIoQV9TOFAKK00pT1xGKyNTXydCPTBfUTQ7KF9cQidBU181JU07X1UxRzlfXVRCSEdfPlhaKF9WIUo4P105PCZPXytETVsKK01fVz1cPk9eOUBYJ189Nk1AX1c5UDtPXEoqUlNfLCMoT19YXi5AX11KOEYjXyMiPFJfVyZIUC9eI0w8V18KK004STpXX1dGQlAvXlNMW1NfO0YpQ19SMEIpL1xOLEMjX1NcRydfWV46Rk9cTCpCU19JSjpJX1JITCw/XlEKK01LOk9fJlFAN19WKUM6T1xHKSMnXy8jRSVfUiRCKj9cNCRRR18kMSQ0X1EsMSUvXDYlIT9fJEEgM19RLDEKK00lL1w6JiFPXyVRNDhfUSQvJE9cMSNRK18kQSAyX1EoMCRPXDAjQSdfJyFEP19RUEMwP1wqIzFfXyQgTCsKK01fUkBDKT9cOCUxT18mMTw6X1IwQik/XEAnQidfJzFMPV9SKEAoT11KOUZDXylCJENfUSwvJ19cOCYiL18KK00lMUA9X1FIRSwvXD4pQ0tfLjNVJV9SPEInP1xVK1I/XzsmTUpfUFAtI09eREhJX18tMyBLX1IkPCcvXDYKK00mITtfL0QsX19UUSoxP18lTjs3XzFUUSpfUlhPLC9cOSUhQ18mITg5X19HTVtPXEcnUitfJUEkNV9RWDsKK00mT1w9JzFLX0ZIWjFfUkBFKl9cSCoyS18sMkRHX1JIRSlfXDUkQUNfKEIgQl9XWVk+P107NUUjX0hZSjMKK01fWTIyQz9dTj02W19EOTowX1dJXT1fXU49NltfPEctTV9RMDEkL1w5JSFDXyYxMDhfUTg0JV9cOCVBR18KK00mITg5X1FENyZPXDklUUtfJUEwN19SID4oL1w3JUE3XyZRSDlfUjxTLC9cVC4zP18lQUg4X1NAXjAvXEEKK00nUVNfJ0E8MV9UOS43T1xEKzVTXyZBTEZfUiA+Jl9cRi0jL19BSU49X1cuKUJfXUE9VzdfNlYxPV9VWVUKK008L1xOM1dLXz4nUV5fWVInQE9dRzZEV19CSCleX1FcQCg/XE8sMl9fQVhaIl9aRjVDP10wNiYrXzkpMkkKK01fV0ZIUC9eO1M+Q182V1IzX1tSV08/XiI9Rz9fJ1IgQV9TTF4vX18vUjw/X0oqJkFfUyRPLD9cTytTK18KK00qQkRPX1VRODVPXD0mQUdfMFQpKF9QRCglP1w9JUIrXyghSEJfUUQ2Jy9cMCRRM18lMTQ4X1EwMiU/XDEKK00jUStfJUEwN19RXD0oL1w2JSE/XyQwXDJfUSQvJE9cMiQhL18kQSAyX1EoMCRfXDUkQUNfJzItI19RJDYKK00sL1wxI1ErXyVRJDVfUkRFK09cRykiS18sIlRTX1JYTCtfXFErUydfKUIwRl9RWDonL10iLzNfXyhCNF4KK01fVEkxOV9cNCdCU18oUy0tX1RJNj0/XCsjIVdfKDFENV9WJTwyT10jL0NHXyYhLDVfWio9R19cSikiU18KK00mQTQ7X1E0NyU/XSkzJDtfNCRdKF9aUkJHT1w5JzFPXyYhRDpfUkBGKj9cUCtDI19fX0tZX1JMQylfXDIKK00kMT9fJyFUPl9XRVc9L15GRVlDXyUxLDVfUkRNK19eW007L19HKT45X1FAMyY/XD0mUVtfJVEoMl9UNSkKK00wP15IRzk7X0E4LV5fVjVPOU9eJUM4L187JzFKX1Y9Tzk/XUk7NjdfJVE0N19RSDcnP1w6JiFPXyYhODgKK01fUUw5Jl9cPichW18nIUg8X1FANiYvXDomIUtfJkFAOl9RQDYmL1w3JiFHXyoiXE9fUyhbLl9cNCYxR18KK00tMyBcX1IoRic/XEAlQV9fJzJEUF9SJFY7L1w2JSIzXyhBXD5fUiRNLS9eKkkqP19ASVZEX1VVVD4/XSYKK000RF9fNDZJT19SVTU/L11UPjhPX0Q4IVJfVy1ANU9ePkRIV18oMihDX1FcOyc/XjJCSDtfSVlWMl9ZRkoKK01NX11WSEtTX0YsMzhfWkctWE9cSi5UQ19CKC4jX1lWOERfXD4nQidfMlRJMF9cNyBQT15OSUpHXy5DQFoKK01fU0BbLy9dKzNEX18vRC0jX1FIPSdPXiI/SCNfJiFEOl9RRDknL1w8JyFfXyRRLDZfUTA0JV9cNiVBR18KK00lQTg5X1FIOic/XF0vNCNfJ1FcQl9RRDknL1w/J1IrXyNAWDFfUTAuJU9cNCNRL18kMFwyX1EoMCY/XDgKK00oQ1dfKEJJNl9RODwtT1w4JiInXzUkUUdfVCBeMV9cSylSX18mUUhBX1guIT9PXTIzVFtfJkE4OF9SPEIKK00pT1wtJEIzXyciLFFfUyhVMC9dRzs4L189SCZAX1FcRC1PXD0lQTtfLiJURl9SLD8nP1w9JUE7X0s6PkUKK01fUkxIK09cPyZSL18lISg0X1YpQzc/XDsmUUNfLFMkTF9RTDglX1w1JFE7XyoyVEtfUUA2Ji9fX14vP18KK00wU0xfX1FcPikvXDUlQT9fKTI0Ql9bJkVJT1w7JjFPXyYxTD5fUUQzJD9cNiQxL18nITw9X1FMOScvXjIKK01DOFdfMTRFIV9aKjdEL11fPzdDXzcmNT5fVjlNOT9dQDlVX184NkFAX1YxSDgvXDglQUNfJjE4PF9RODQKK00lX1w2JSE7XyZBQDpfUVQ7Jz9cNiUhO18lMSw1X1EoMCRPXDklUUdfJVE0N19RPDgmP1xGKzJXXy0jVF0KK01fUTA5Jj9cUywjU18oMkA+X1FIMCY/XCkkQUdfJlJFQV9RTDcpX1xHKDFfXyYhSD1fUzErMk9eJUg6M18KK005J0FcX1RVNjVPXTI6NkNfLFVBV19XJVI/P143QCZXX0E3PU5fWkJAR09cQSdSK18nUVQ/X1hWKkE/XkgKK01IOTdfRDoqT19SNS86P15TU14zX008SzxfUSw9KV9eKkE3X19AWCFbX1FYQikvXTk2ViNfT1tOXV9bVlkKK01OX1xMLDMnXy0kIF9fUzBdLz9dLDYlP18pIjxIX1kyLENfXDkkMTNfJUEwN19RSDonP1wwJCEvXyYhQDsKK01fUTQ1Ji9cPidCJ18nQVhBX1QtIzFPXEoqQldfKCIgQ19SSEorP1wyJEE3XyUgWDZfUTAvJF9cLiMgX18KK00kUSQ6X1E0QS8vXDopNTNfJyI9Kl9TKFUzT11CNSdLX0AnWidfUFQwJT9cNSRBW18kIFQsX1UhLTMvXDkKK00lMT9fKCFMP19ULSIyL102NSU7XzhVUTxfWjpCSk9dTjtXO18lQTA3X1FEMiRPXFEpMidfJ1FIOl9RTDQKK00lL15JSFonXyUhJDdfUSwvJV9cLyMwX184Ri09X1lOO0YvXF0vM0tfJzFMPV9RTDknL1xNK0JDXyZBODgKK01fX19YXV9dLDEkQ18pMjBKX1FYPygvXE8tIyNfT1s6Vl9RRDcmP1xEKSI/X0xaTklfW0pVTV9cOyVBU18KK00kMFwyX1FYOSY/XD8oUU9fSDk6L19YIV4+P1xULyNDXy4zXFtfUlRTK19cVS5TP183NiE6X1FANiYvXDQKK00kMT9fJSEoNV9RLDEkX1w1JFE3XyUxLDVfUTQzJT9cMyQxL18lISg0X1FENyY/XDklUUdfJUE8OF9SJEgKK00qL1xRLkNLXyRBPDdfUlRNLi9cQypSJ18oUURCX1FcRSs/XD8rNjdfLUM1Jl9TPFgsT1xfMDNbXyxTQFIKK01fWUZFSS9eOUk6R187RzVVX1RdRThfXFM2N0dfPSdSMF9YQiA/T14mQDgnX0sqOkpfUUw2Jy9cPichW18KK01DOFooX1lWOEMvXSg2NjtfMVZWKF9aXy9ZP11UQ0ovXzElMT5fWDIkQD9eOUZJM18pUlRPX1MgVS5PXlAKK01LSyNfUFtfIV9WMUk6P108OiY/Xz0nTVtfWDIpQj9eMUNZJ19KKiJDX1FAMyU/XDUkUTtfJkFIPV9RIDAKK00kX1w3JVFLXyNAWDFfUTg2Jj9cPScyI18nQVhBX1FcPyhPXDkmMVNfJjFEPF9QXC8kT1wzIzE3XyRQWDIKK01fUSAuJD9cNCRBT18lMVhWX1FEQzQvXDspNEtfJSFEV19WNS8/L11ePjg3XyQhQDpfUUg6KV9cPSYxT18KK001NSkxX1JARClPXFAqUl9fKVIsRV9SKDgmX1xSKTJLXz43IVdfVCRWLT9dQDVFR18kMFg0X1EwMCRPXDYKK00kQTNfJjEoMl9ZNi9DP1w1JEFDXyUhIDhfUTw1JV9dPTdFQ19HSVo7X1MkUixfXDwnIV9fJzFMPV9UTSoKK00wX14nQSgvX19fN1JfVCBaL09cOyciL18mIUQ6X1dBWj1fXlxNOzdfJkFAOl9RNDMlT1xGJ1FfXyZBODgKK01fUTgzJj9cPSciK19CWDomX1JISykvXj1FKFdfQFglXF9SXFctL1xIKzJPXyYxXDtfUlRTK19dMzY1J18KK00mITg4X1EwMSVfXDQkQTdfJTEsNV9RMDIlL1wzJDEvXyUhKDRfUTQzJT9cNCRBM18mMTw5X1FENyY/XDcKK00mIUdfKEI8R19SUFUtP1w7KCIjXy0zPF9fUTg+Jk9cPSUxR18mMVxHX1IwVjtPXDknUl9fKUJIQl9SVFAKK00qT1xWKzI7Xy5TOFZfVlVQPD9dJjNUX18sJSVDX1FNMEFPXDsuVy9fLiRdWl9VUUg9X15aTEs7XyhBVEMKK01fUiA8J09eLUNYO19ISV40X1UtQDpfXSs7KC9fMVZOIF9SJSI2L1xBLUQrXyoyTElfWV5BR09fI1FMP18KK01BKEYuX1wvJFE/Xl9PK09fNkVVPl9bWyNQX1xeMDQrX1M8RytfViU5Ny9eN0NZK18mMTw5X1I0RSovXDkKK00mMVNfJFEsNl9RPDcmT1wwJCEvXydBWEFfUixDKU9cSCoiT18mMUQ8X1FMOydPXDUlMUNfJCEgM19RLC4KK00lL1wzI0ErXyRBIDNfUUw6KD9cNScjI18mQiUrX1E4PTA/XDsnI09fOURdWV9XLVA/P1xKLTM7XydSIEsKK01fV1VaPj9dJzEkL18mITA2X1JUSCsvXScwRENfMTNNJF9ULFQvX14kPyg7Xzg1LTRfWiY5Rz9cNCRBT18KK00kUTQ4X1EsMSRfXDwlUT9fRVkmL19QVCsjT1w1JEFDXyYhPDZfVjVGOC9dSzo2O18tMzhXX1FIPCg/XDQKK00kQTNfNSUpKl9bVlpOP19fXU8jXzU0XTNfUzRaMU9cSCkyT18pIiA+X1smTks/XDklMT9fJkE0OV9WJTYKK001P11DNjU3XyZRPDVfUVQ8Jl9cSichV18qIkRCX1k2NEI/XidCKCtfKTJQTF9RXEYpT1w+KUIvXypDKE4KK01fVEk2Mz9cOCYxS18lQSQ3X1EsMSUvXDYlIT9fJUEwN19RODQlX1wzJDEzXyUhKDRfUTAyJS9cNiUhO18KK00mMTw5X1E8NSVfXD8oQi9fKVMsUl9QTDIkT1xNLTMrXyNRJEBfUUw4JF9cNygyU18mMyFFX1FYQSxfXEEKK00nUUNfKyJIRV9TUFoqX1xHKEFXXzJEPFxfWCooQS9cQzBGM18rJT4lX1FRIEJfXE0zSTtfMjY9XV9cIk4KK01MT1w6J1IzXyhRRDxfWSIwQD9ePkcpN19DKFozX1lGREpfXjdIWytfMVVBRV9TSSYyT14uQUgrX0oqNkQKK01fXVc1Vi9eM0YpQ19KOkpLX1wmX08vXlpOO0NfVi0vN19bSlZNL18pUEwrXzxWWU5fWDYiQD9cTytCV18KK00mIUg9X1FIPCdfXDIkQTdfJiE4OV9QVC4jX104NlVTXzQ1MTVfUihFKU9cQCdCJ18pIihFX1FUOydPXDMKK00kMTNfJUEgNF9RMC8kX1wxI1ErXyUhMDdfUVRGL09cPChVJ18lIVUiX1FQQC8vXE4nQ0tfODY5Ul9VRT4KK003T11LOzZLX0U5Li5fVSUtMl9cNyRBO18rIkBQX1FYPShfXFIqUytfLkMkWF9XWVk/X100MlRPX0o6IkAKK01fUVA3Jj9cOCVBR18kUSg4X1FENCVPXkVHWVdfJiEsN19RNDMlT1w6JjFDX0A4JVhfWUY2RD9cXC4jO18KK00pQihEX1FEOCVfXTMzNC9fUCtWXF9fX1RcL11dPUc7XyYxSEFfUSAuJD9eKEEoK19KSj5GX1FYOicvXD0KK00mIVNfPSZFSF9WWUY5L1w6JTE3XycxTD1fUlxHKk9cNyghR18tQ1RTX1NJIi9PXEYrMldfKFI4R19RRD0KK00mX1xJK0JLXzFFISdfUUw8Jz9cOSUhS18lMSw2X1FANiY/XDglQUdfJiE4OV9RMDIlP1w2JSE7XyUxLDUKK01fUTg0JU9cOSVRR18lMSw1X1FYQShPXEMrUltfJCE8N19STFMsL1w0JUI3XyZRQDNfUTA+Kj9cOSw2Q18KK00rUy0oX1RBJjBfXEQpIidfKzJMQ19TSFAsX1xZLFJPXy9TVFpfUjEgOE9cTDVYN18nRDoxX1JJK0RfXSQKK003Vz9fTVo2SV9RLDomT1xCJVFTX0M5IV5fWi5ARS9dWDwmW19QOzZYX10rK1U/XDwnQjtfLiNMXF9bNkgKK01IX15JSSozX1Y8XzJfV1YiQE9eO0dJX19STDcgX1tKVExPXzxUTTdfUitaWl9cWyZRL11ePjdHX0I4OiUKK01fUVw+Jz9cNyYxU18lMTw6X1EkMSUvXDclMUNfJSE0Nl9QWC8kL1xfMCQnXydBXEBfUjxFKi9cRShSO18KK00oIVhBX1EwMiU/XDYkITNfJSBcM19QXC0kL1wvI1ErXyciNF1fUUxBND9cMydEI18lQUxUX1JcQC4/XUkKK007R0tfOSZFSV9WQUo5X14pQVgrXzREWSxfUjA/KF9cXC4kI18xRDUrX1EkKiQ/XFosM0NfQyg+LV9WLToKK002T15CRjlHXydRSDxfUTg0JV9cMyRBQ18nITw5X1pKREhPXFQrUy9fJkFAO19SPEYpP11fP1c7Xz83SVUKK01fU1xWLC9cSylCJ18nUUg0X1U5LDA/XytQPDNfX18zUV9aJjZFP1w6JVE7XydBSDxfUzxULF9eVkxbK18KK00lQSg0X1FcOidPXD4mMV9fJTEoOF9RPDkoL1w0JkIrXz1XIVdfUVBEKC9eKkNYR18+N1lcX1M1ITAvXFkKK00wRCtfLjQtIF9TTSYwP10iM0Q3XyRBLDRfUUQ0Jk9cNSRRO18lMSw2X1E4NCVfXDclMUNfJSEoNV9RODQKK00lT1w3JTE/XyVBMDZfUUQ3Jj9cOCVBQ18nMiBBX1IoTis/XEApUj9fKyMwUV9RLDUpL1w8JjEzXyJRNEAKK01fUUhSOl9cOSdTN18wI1xeX1QhIjAvXEssIktfJ1FQQl9TOFQrP1xXLjM7XydTOTlfUkU3QS9cOjFJI18KK00qVEoyX1NFMjtfXlFHWidfJUFYOl9SODsoL14qQldbX0k5XjdfVkE6Nl9fSlY9R19aLUM8X1NEVC1PXVkKK00+NztfVTxHJF9aNj5HT184UyxfX0M5KjJfV1IjQF9fKFFLX19PO0JTX14jN1VfXypQO09fT1s+VV9YSiUKK01BP11RO0ZXXytCVExfUUg8J19cNiYhT18lITA3X1FANiY/XC8jMF9fJFEkM19RLDEkX1xEKEIzXydBUD8KK01fUVA6Jz9cOSVRS18lISg1X1E0LyRfXDQjUS9fJCBYMV9RLDMlT1w4J1JPXydSNSVfUSQ3LD9cOiVSV18KK002JEVCX1YxST0/XUQ6NkdfNUVBNV9YNiM/T10xMzRPXyZBNDlfVSkuNU9dXz9IM18/V0FfX1ghVz9PXlYKK01MOz9fQTdRXF9aOj1HP1w8JVFHXychSD1fUVA7KD9cPCVRR19LOj5FX1g6IUE/XFsuM1NfK1JYTV9YOiYKK00/P149Rkk3XzI0NF1fUUg4JF9cOiYhN18tIlRHX1taWE8vX19eT0tfTysmUF9SPEIoT1xEKCIrXykhXD8KK01fWFYqQj9cLyJQV18lMSA0X1sqSEkvXldKWj9fJ1E8NV9RUDkmL1w/JTFDXygiMEJfWTo2RF9dPzhGL18KK00tJCkhX1NBJjE/XFoyNDdfL0RVKF9ULS8xT1wxJSE3XyZRODxfUSwxJS9cOCVBR18mMTw6X1E8NSYvXDQKK00kQTdfJjE8OV9RODQlT1w8JkFTXyUxLDVfUUA2Ji9cPCgyJ18pQyhRX1IoSSo/XEUrIlNfJjFUTF9RXDsKK00mP1wuJTInXygzTVRfUUg/Li9cRylCN18qUlRKX1MwWy0vXFUuI0dfK1MsS19TJFYsL1w8LDUvXypVOiQKK01fUTkkQ09cTjM5N18uJSVUX1pOOEYvXDooQV9fJ0EwN19XUVs9L15CRkk7XzglMTdfXjc3Vi9fS1ctV18KK00rQkhIX1wjIU5fXlBKOi9fSiomQV9dUy1UP14mQlhPXzg2SUpfXTc0Uz9eXU5LN19XXUc3X1xPJE9PXlwKK01NWytfQzhCKl9WIT03L1xTLEMnXyZBUD9fUTg4Jz9cNCUhP18mITg5X1EoMCRfXDIkIS9fJFEkNF9SOEQKK00pT1w+J0InXyZBSD1fUTA0JV9cMSQxM18lIFwzX1EwLyRfXDMkMTNfJEEoNV9RPDomX1w6JzJbXyMxJEAKK01fUUAxKE9cRSZCV18pUlRVX1M4Wy4/XTQ1RS9fNTUpLV9VMTAzT1w5JSFDXzQ0WTRfUlhLLD9cQicyL18KK00rQjRMX1ZZSTtfXS0xJDNfS0o2RV9RQDMlP1w1JFE7XyNAVDRfUTAvJF9eTElaP18/J0FaX1NAVi4vXFAKK00sIldfRUk6LV9aJjxFT10sMkQvXydBWDtfUixBKF9cSChSL19NWzZYX19fUVs/XkpHSidfKDFYRF9RSDoKK00nP14lQCgjX01LJlFfUSguJC9cOCVBR18nMTg2X1JMRCkvXDklMT9fJTE8Ol9WQUI5T1w1JyFTX0ZJVj4KK01fU0hdL09cTi9TX18sNCkiX1MxJjEvXFozJENfMkUtLF9RMDUlT1w2JFFHXychODpfUUQ3Jk9cPichX18KK00lMSw2X1EsMSUvXDYlIT9fJSEoNV9RUDonP1w6JiFPXyUxNDhfUUg+KC9cQitTI18mQihEX1IoSitPXDMKK00nMj9fKEFYQF9RSD0qP1xBLkc3XykiOSFfUkhFKC9dMTQ0O18uU0xOX1VBOTMvXFEtIkNfJ0IgPV9RQE8KK00zL1w/MkczXyIzOV1fUkkrRS9cQi9WX19RKl5LX1EwOCgvXEYoMU9fPScxUV9aQkNHP10pL1NPX1pNTzsKK01fXys8Vz9cQighV19HWT41X107J1FfXllOOztfVlxfMF9ZQjlGT102NyVbX1NcQyhfW0pSTC9fOlRNI18KK01QS0pYX1tOU0tfXkVGWjNfNERVLV9SKEAnP1w+JzIzXyUhODtfUTw1Ji9cPCYhS18kIFQzX1EsMCVPXDMKK00kMTNfKlJES19STEsrT1w5JlIjXyUhODtfUSQzJi9cRCkyO18tMzhXX1NYXzAvXSszJFdfKiI4SV9RODgKK00mX1xMLDMnXzlGQUZfVSE0NE9cXC9DT181VSktX1ZRQDZfXV88VlNfPEZJSF9RWDknP10wMkRbXygxUEIKK01fUSAqJE9cTClCW187JjlOX1VRMzRfXk1JKjNfJkE0N19RPDUmL1wvI1FLXyRBJD5fUig/Kl9cNiNRR18KK00lMTA6X1E8OCY/XkJHOVdfSUlaPF9USSgwP10mMSNXXzNERSNfVSksMS9dXz1XL19fXyNMX1smRUovXD4KK00mUidfJlFMPl9SNEAoL11VPCcjXyYxNDdfUSQvJE9eSkhaL19MSk5LX1E8MyU/XDMlMUNfJ0FIPF9SJEkKK00pT15RS0pXX1A7UlxfVz1cQD9dKTQ1N18wVE0tX1QpKzJfXSozVEdfJVE0N19RLDAlT1wyJCEvXyZBQDsKK01fUTAyJT9cNSRRO18kUSQ0X1EwNCVfXDIkQTdfJjFEPF9RSDonP1w4JiFPXyZRXEFfUiBNK09cQipCU18KK00oUkRLX1FIRSsvXEMpMi9fKTI4UV9SOSI+X1w/KSNbXylSLEFfUzRWLC9dJzEzV181RTkrX1RVLzFPXEEKK00oUidfJTJRKV9SISs9P1wpLUdXXylEPjBfUVBZOj9eUUcpQ18lMURBX1I4QSZfXTM0VSNfRyk+MV9UIFYKK00sT19OV11fX1tdRzpfUyBOKl9fOVQ8X19XXSMwX1dNWT1PXztTPFtfR1lWP19UNSkyX18zVCxfX0s6TkgKK01fXTczVC9eXE5LP19IWVo5X1pGP0ovXFQrUl9fJyFIN19TNFgvP1w+KFIvXyVBSDhfU0BaLV9cUytTJ18KK00mQTg4X1chTTsvXSYxJCdfKiI8Rl9TMFYtL15CSSorXyhSNENfVV1BN09dKjMkR18wNC0gX1NdIS9PXTkKK002VUNfM0RZK19WJTw1X145QzhDX01aNkFfXEJUTC9fMU4rL19UOzZOX1xWVElfXTQwU1dfKFFIQV9VNS8KK001X11YPEdLXz4nJVtfV1lXQD9eTklbJ19KKV4/X1peRklPXDolMT9fJVE0OF9RPDkoL1w0JTIjXyhSKFMKK01fUUg3K09cOiVSV18kUSBCX1FENSk/XDQjIUtfJCBQNF9TMFEsL1xfL0MvXzJUQFxfU0BWK19fX1xeX18KK01NWk5OX1E0MiYvXDclUUtfPTchUF9TVFguL1w2JEEzXyYhODlfUjg/J19cOyUhM18mUTw5X1E0NyZPXSoKK00yNENfLSNQWF9cLltOP19KVl1PX1gtJzJfXiswVS9fOVIsQ19UXC8gX1leOkUvXD8mUVdfJTEoOF9RLDMKK00lT1w4JUFHXyRRJDRfUUQ3Jk9cNSRRO18kISAzX1EgMiU/XDkmUVtfJVFEPF9RNDUmL1w5JzFfXygiVE4KK01fUixLKz9cSCpSU18nMkhPX1I0SylfXEwrQztfKSQlV19SNEsxP1xDJ1InXykiOERfU1xdLU9dMTQ0Q18KK003NVk3X1FAOSZPXC4pJDNfJjQxTl9QOFM+T1xIMjkrXydDTUtfW05GSE9cQCkiU18pMiA6X1RNKzIvXkEKK01HKTtfLkMgTF9eNzZVT19QVk1PXy1DMFFfXUMwU09fPlNcX19GSTo0X11bL1QvXkVIOi9fMkRRL19dIykKK01SP15MSUozX1UsWyxfXCJaTi9fJE8rQ19POy5cX1MoTSs/XFIsIldfMiQ5KF9ZTjtGL144RUknXy8zTFQKK01fWkZFSF9cUytSV19LWlJHX1QgXi1fXjxGSTdfLjNIVF9XNVY8L1xHKiIrXzE0RSFfUzhaLE9dJDIkI18KK00wRDheX1Q5LDEvXTQ0JENfUks+T19cSlJKP18pTDpDX1BaRkBfW1JBRU9fNU4qU19PWlJCX1QsVyxfXD4KK00mMVdfMVQpKF9RPDMlP1w/JlFXXykyJENfVCheMC9cXy1TN19IWUo6X1FMNiYvXDclMUNfJSEkN19RPDMKK00nL1wtIyFHXyUhKEVfUVQ5LF9cPCYjK18mUUBPX1E0MiovXD8mQzNfKUIsUF9TMFIrP1xULEJPXzQlNTMKK01fX19WXE9fIU0rL18nUVhEX1EoNCVfXD0mMT9fKSFcP19SJD0nX1w1JFE7Xy0iREhfVCxYLV9cPyZBU18KK00mQUg9X1QxJjEvXFAuIzNfUFtGVV9fJzxWT19HVl0/X1g9NzFfXVcwUl9fOVM8O19HST4xX1IsQCdfXDYKK00mIVdfJVFMPV9RXEIoX1w9JzIjXygiIENfUihCKT9cRSoyT18pMkxNX1I4TCtPXEosIytfKyMgUl9TKFgKK00uT1xFLEMvXylDJFJfUkhPKz9cPypDJ18pMyBJX1I0RytPXEQvVzdfKjMlK19SMEIpL1xHKiJHXzFUPSQKK01fVTE1M19dMjU0X18pQkBLX1BcRDAvXDgwVl9fIUMpXF9SOSdDX1xDL0ZXX04qPkdfUyBPLT9cSylCJ18KK00sUyROX1oiO0U/XFQrIkNfWl1TPV9eXzlWT1xMKjJDX1VMVy1fXU8sUy9dWzxWX19VXDsmX1siS0pfXSoKK00yRFdfVl0vMV9bSk9LT18qT1tbX1E7QldfXDpcTi9fKU9cQ18rIkBKX1wiXE5PXVo9JytfTDpSR19TVFgKK00sT14qQDdLXzNEUSVfVjU+Ni9eLEFHW18xJCRWX1omQEY/XE4rUkNfSkpGQl9SUEspL10+OCU/XzAkMFsKK01fVC0nL09dITEzU182JV0zX1o2PkRPXylLWjtfUTpKP19cSlJKP18qTEpHX1FbIkRfXEpTSV9cWytST18KK00vQ0hcX1FcPSgvXE0qQkdfMiRFI19USSsxP10yNFRXXzRFLS1fVFEoMU9dKzFEO18mMTQ3X1E0NSYvXDcKK00kQTNfJUBYOF9RODAnT1w3JTFbXyVBLEpfUTQxKl9cNyUyX18mQUxUX1IkOi8vXD4mIlNfJzFQO19SNEQKK00oX14oQFg/X19fK1JfXFZcTU9cQCdSO18lQUxBX1QtIS9PXEUpIi9fJUEwNl9RSDgmX14sP1dbX0ZIUi0KK01fUiQ3Jk9cQCZSJ18uQ1xfX1M0Vy0/Xl9OSzdfXC4nPF9eVz9XL19DVT0rX1ZMSydfXicxU09eUkpaN18KK00vVCRfX1JcWi5fXE4uQ0dfKzNEWF9SVFkuL1xOLkNHXytTTFpfUlRYLj9cTi4zS18tI10gX1MoXS9PXE4KK00uU1NfK1NQXV9SOFMtL1xAKzJbXycyWERfUiRFLS9cOypCR18sI0BaX1I0XT0vXEgsVFNfJ1IgQV9SREYKK00pP1xJKjI7XzJEVSdfU0heLU9cVi1TQ18lUiRQX1FcWzlfXDAvKCNfJ0QhX19SSF05X14/RlovXzBTQFcKK01fUjxFKi9cSylCI19HWVY2X1MsTio/X0tXLVdfW11DOV9STEYqT18vUVxPX1ksWy9fW1JPSk9fKU9bT18KK01NWyZPX1RZKzJPXztUTFNfTSpSSF9cRyBQL182UVwrX1QsIl1fXFclUj9cSCoiT19SPCZfX10vJVBPXyEKK01PO09fLjNUVV9aJjhEP1xLLEI7X00qUkJfVCxdLF9eLkM4K19IKVo3X1VVOzUvXkxJWidfMENMVV9VXT8KK001T10pMyQjXzgmLTdfVTU4My9dKTMkI19QWz5OX10yWUxPXkxFSFtfT1o6P19eJyhQX186UDwjX1RbVl8KK01fUUw0JS9cPychT183VVU6X1I4RCdfXFsvU1dfKyJcUF9TTF4vX1xXLkNPXy4zVFtfVVlAN09dPzgmJ18KK00yVE0uX1EwMCYvXDQjUU9fI1EwMF9RRDcqT1w2JDJXXyVRLE1fUTQ0LD9cMyRDP18uMzUrX1MsUi4/XSQKK00xRDNfMFQ1I19dJyhSL19fXF8/X1NLUllfUVw8Kj9cPCdST18zJEUoX1FQOyZPXDklUUdfJjE8Ol9RUDYKK00nT1xAJkIrXychPD1fUUA2Jj9dJzMkU18vM1xdX1teWk0/X0xXPUNfXC1XN19dIl1NX19IVV0nX1gtJysKK01fWk5KSF9cWTAkI18rU0xfX1JAUCxPXEwtMzdfKjM0VF9SQFQsX1xHLFMrXykiXFBfUixOK19cQytCX18KK00oQlROX1I4USxPXEstQz9fKkM0Vl9SPFIsX1xMLUJXXy00NTlfUSA+KV9cPygyM18rNEFeX1JIVDNfXEMKK00oUjtfKyJASl9SXE0pT104NVRTXzhWKTdfVVE4NU9cLSVCP18jIjkxX1EkWj8vXD4xKCtfKVNFP19bKk0KK01MX1xLKUJDXydBVENfUjA/Jj9ePEcpL18sMlxIX15bQlc/X1FWXVNfLjM8Wl9cSyRSL18/UyxTX046UkcKK01fXCZXTF9fIE5LQ180RF0uX11LMVJfXlxNKyNfTksuU19cUyNPP182Uiw3X1NMOypfUjRFKi9fLFEsK18KK01WTFMpX1VNMzQ/XFkuIydfUDtWVV9SKEcmX14gPzcrXy4zUFBfWz5cTC9dPTYlK19JOVo4X1lCL0I/XVkKK007NkNfMSQwW19VKTUyP10qMzQnXzE0QFxfViVBNU9fJk4qX19bXS8sX14jJ1AvX0VSS19fXC0/MF9dKyMKK01QX1xAJUFfXyUxIDZfUUA0JU9cRShCJ18rUlRKX1E4MyRPXFUsMy9fMFNdIV9RSDYmL1xGKDInXzYlLTMKK01fVzVQPE9eK0E4R18kQVQ4X1FANC5fXEwnVUtfJyFJIV9RQDksT1wzJCJXXyYxOFpfUjxFMU9cUiwkI18KK00pQjRLX1I8RypPXEgqMktfVixLK19fW09cL18mTSsjXy9DUSVfUjBILC9cOCVBL18mITw2X1E0MyU/XDUKK00kUTtfSElWP19aXkdKT1w5JSFDXyVBODlfUjRKKk9cVS1TN19NOyJLX11TLVIvX0BUPSdfQ1g6Jl9WSUUKK005P109NyVPXzI0XStfUkxWLV9cTi5DX18rQzhaX1JIUyxfXEotQzdfKUMoUV9SKE4rP1xGLDMrXyhCVE4KK01fUihNK09cQytCX18lQVhAX1FMQyk/XD0pMj9fKCJASl9SXFEqL1xEMCVPXyMhPE9fUiQ9J19cQC5XJ18KK00pIlUrX1FIOSdfXEMnQitfJ1FMOV9TRFcsL10qMiQjXzMkPSdfUTQ5K09cPCs1J18nMz1DX1JFIDpPXD8KK00qNDNfNkUxOF9SQEUqX1w/KCI/XydBSDxfUjBCKS9cSClCL19ZTVM4X15fPFcvXSMwVDtfOlY5Sl9dQykKK01SP15fTEpXX01aVklfXDJeTy9dMTNEV19UXEskX1tWU0tfXkhJOjNfUkw2X19bJkVIP18kTywjXysyVFAKK01fWz5PSz9fPlQsV18sUkBHX1omPEVPXTQ1JE9fOkZJP19cIlZLL1xWLlJfX0c6KjZfVCRfLi9eW05LL18KK00wM1xYX1paSUhfXTQ1JE9fLlNYUl9VOTkzP10yNTRHXzNEVSJfXT8nT09fVFU8X19aTF8oX106X05PXkkKK01FWS9fMiNcX19RLDAlT1w1JEFDXyYxMDhfUTwzJT9cUCsyU18lQSwyX1FUOSZfXEcoUjdfJiEwNl9RUDkKK00mL1xNKiJDXzNERStfWU41Rj9cLyJTX19JWissX1s6U09fXk5IXUNfJSEkXF9SID4vX1xJKUQvXzhGLU4KK01fU0hbLy9cRilCR18pIixKX1JQTCtfXzJSTENfX18rTV9YMVI6L1w2JSE/XyUhODtfVVk9NU9dKTFUM18KK00nIUA6X1FQNyZfXEIlMTNfJzEkLF9RTDYlT1w0JSE/XyRRQDhfUkRNKl9eS0lKO19XXSMrX1sqS0pfXFAKK00tIztfKkMoVF9STFguP1xKLUMvXytTUF1fUkhWLl9cSyxTP18qMyhSX1JEVS0vXEQsIl9fKSMgT19SSFIKK00tL1xKLEMzXygiQEpfUUBDKS9cOihCM18oIjhIX1JATiwvXEYrIltfKyJQQ19RUFs3P1wnJFJbXycxNDgKK01fUVRXPC9cRyxVK18pUjRIX1FYOSdfXEQnUi9fJ1FQO19SMEMoT1xIKUJHXyhRUENfUVQ7KS9cQyhSU18KK00oUiA/X1FQPSovXEgoUj9fKUI0S19SUEgsL1xTKyMvXytCRE1fUzxVLi9fNVMsU19aLTszX1haL0QvXjkKK01FKUNfVSw3JV9cPlhMX15OSSojX1FLWlxfVVk5Nj9fLFBLW19EKEooX1Q9KDI/XydRPCNfLEJISF9cUyQKK01SL1xEKSI/X04rIkxfXUMqUV9fLlA8I19BJ1VXX1IoRCZfXypRS1tfMiNQVV9aUkxIX15MSyovXywiXEgKK01fWk5MST9cVy5TL19EKSopX1NcXy0vXSQxM0NfPDclRF9WOUc2T14xQlgvX1YsNl9fXVsiT19eSUQ4W18KK00pUUA4X1JEPSgvXDIjMF9fJDBcLF9STEsnL1xSLTFfXywzMD1fUlxTJz9cTiwiV18sQyxUX1MkUixfXFEKK00sQy9fKkJESF9RNDMlP1w4JUFDXzNEUS9fUTQ4Ll9eQUcrO185RiU8X1o+Qk5PXDwmU19fKFIoX19VTTsKK007T1xTLiMrXy4zVFVfUiA/KT9cSyojM185NjFKX1xDIlAvX1RaTzNfNVQ5Jl9SNEEqP1w7JzI3XycxUDsKK01fUUQ3Jk9cOyYhW18mUTxAX1FQOCg/XDslUV9fJjE4PF9RRDcmT1xAJ0InXyZRSDlfUUg4JT9cUioiT18KK01WTFsqX1RFMjRPXFUvNCdfLTNUX19TJFwvP1xPLVNHXypDKFRfUjxPLD9cPylSR18mUixFX1FEQShfXDkKK00oMi9fKCIwRl9RUD4oP1w3JzFfXyYyJENfUUhFKU9cPioyS18oMlBNX1IkTCs/XE4tMkdfLVRFRV9RJDkKK00qP1w6JjFDXyhCUS5fUkxUMT9cQChCI18nQUhDX1FcQSlPXEIpMjtfKFI4R19SQE0rP1xQLTMvXyxDNFYKK01fUzBTLj9cXC4kJ18vQzhZX1VBMzNPXiY/R0tfTSpCS19cJlxPT15GRlkzXzFUMSpfXjM9Vz9fUlZdO18KK00+NzFUX11LMlU/XzlSLENfVCtOWV9YKVo9T18kTitHXylCJENfXCshUC9dMDNFJ18tIzhbX1teXU9fXT8KK003NV9fTysmWF9STEcqP15bTEpTX1dMWytfViU5NV9cVi0yW19SPDZdX1Y9RjdfXF8uQzNfUFtKVF9TRFcKK00sL15OSElXXzsmOT5fU0haK19dVD0mP186Nj04X1ghWzo/XVc7VU9fPSchQV9SWEkpL1xAJlFPXyRQWDIKK01fUSQwJU9cMyUhN18mITQ7X1FAMiVPXDckQFNfLVMkQV9TTFcoP1xULSInXy1DMExfUTw2JT9cRChCM18KK00pIihEX1IkPyg/XDclMUNfJEEgM19RLDMlT1w/KDIzXyFASFBfUzxOOF9eVEhdR18xM0FLX1UlLDkvXDwKK00mMjdfL0QlJl9RTEAnT1xNLDJfX0c5VkZfV01ZQj9cSipTK19RK15aX18jRltfXSIrQjtfLVJMRF9TMEsKK00pP1xcKzI/XzEzOFBfU0BLKC9dJC4iR18zQ1RQX1U1Ii1PXTkyI0NfOlVNKF9XOTwzT14jOVRTX0BWWTEKK01fWDVcPT9fQVNcU19STDsoX1M8WS9PXEMqMk9fKFJMTV9SUFItL1xHKzJfXykyTE1fUihIKk9cOigiK18KK00oUkRLX1BcNSVfXEMpMkNfI1EkNF9RTEEoX1w5KDIvXyZSLEVfUVxHKj9cQipCU18pMlRPX1JEXStPXUgKK007V09fKVIsU19RVEYrP1xAKjQnXykzLSpfUThBLE9cXS4jW18wU1xdX1chTDpPXkZHSVNfUltaXV9dNyoKK01SP19GVV0nX1s9Py9fXlszVE9fTVYtO19aPTssX11HKU9fXEcpIi9fKiJMUF9aIjdEL104NFU3X1ktTzsKK01fXlM0VD9dWj03N19UPEcsX11DJ1FfXzlRTDtfKFIgP19bXlpPL10uM0UnX0BYJVxfWUo2RS9eO0Y5T18KK01SXD8lX1c5Vzw/XyFOK0NfKkI4SF9bSlFKX19AVCxXX0wqQkZfXCcgTj9dSDklU18vIzxRX1pKSEg/XTMKK00zRENfLUMwTV9cIltNP1xSK0I7X1A7WlNfV0lXOl9dWz42S18/V0VJX1dRVjlPXFwuQy9fLSNEVV9QXDUKK00kP1xAKSIrXyZRUD1fUihAKE9cSClCQ18pUjhFX1JARig/XFctMyNfJzFINV9SMEAnT10qMVQ7XyRBIDMKK01fUSgwJF9cNyUxQ18kQSAzX1E4NCVfXDUkUTtfJDEkNF9RQDonP1xdMENbXyhSPFZfVVE+PF9ePUQ4U18KK007Ji09X1RJJTE/XjFFKTdfLFNQXF9UOSsyP14xRDlLXydBUExfUkBJLC9eMENYQ19fXl9CX1tSMjpPXlkKK01DVidfSzhFPF9aWiM1P15XQlVfX00oRTlfWzIrNV9eV0JVR19PKFk7X1s+KjUvXldCVS9fTzhFN19aRiAKK001T14xPjVbX1YsSltfXjMxUl9cTCsyW18kUTQ6X1EoNiYvXDYmQVNfJFE0OF9SQEorP1wwJEE3XylSREwKK01fUUQ7J09cRioiT18lITg5X1I0RypPXDEkUTtfJlIkQ19RSEIpL1w/KTI/XygyPElfUixJKl9cSStTJ18KK00rI0xaX1IgQio/XEArRD9fLkRFTF9SRFk5P10zN1gzX1NMQzZfXV8tUj9fSVQsT19cLTMxX183OVVPX1UKK01WPTtfXE07OV9fMzZVL19LVSxfX1hdTz9fWFYvR09fL1FcT18zQ1BYX1MoUS1fXDcoQkdfR0lCLl9XNUsKK005X19FVj1TX1wtQzVfV1VYPi9fKlBMN19WPEMoX11bKlFPXipBN19fU1w/I19XPVU8T18qUUtbXz9HPVEKK01fWFoqQi9fKE9bQ187Vl1GX1teV0xfXEMoIV9fTlsmTV9dWy5SX11fPVc3XzNUWSdfU0hWK09fIU5LM18KK00/N01UX1MkUCo/XlNLSkNfMzRRJV9XQVY7T14hPjZfXz1XKUZfV1laOl9dWz0mO187Jjk8X1FcPSdfXTAKK00zJEtfNFRNJ19SJDsmP1xAJlFPXytCRE1fU1BcLj9dMDRUV18tIzxYX1FcQyg/XDsnMitfJEBYNl9RUDgKK00mT1w7JjFTXyYxODxfUUg3Jz9cNiRRR18mITg5X1FANiY/XDYlQUdfJiFIPV9VISQ2P10lL0RDXzglWTkKK01fW0ZHTD9cTihSQ19HSU46X1leQEg/XEMpQj9fKiJQSl9YRilET1xHKTM3XylSQE9fUzBYLU9fX1wuL18KK01TKVVNX1xKOjlfXytHJjdfUFkxOl9cOjQ2X18iRCU/X1A4XThfXCIzNV9fIENVU19QOFE2X1taMDRfXkkKK00/NE9fMUJcOF9WJUM4P18sUTw3X1c9Jy1fUVhHKV9cMCUxS18nMVxEX1FQQChPXDgmQVdfKVJETF9RMDgKK00mT1xHKlJXXyYxVD9fUkRLK09cNSVRS18qIkhPX1EoNCY/XD0oIjdfJ0IoRF9SLEgqL1xMLDMnXyxDQFoKK01fUkxQLT9cXTBUT19IOipNX1JAXTZPXT05SF9fVjxTP19fIzlWT19VVTxPX1wtRzpfXyM6Vi9fUVY9O18KK01bTVM4X15fQFZfX01YPUNfWF1DN19VVUVBP1xeNDk/Xys0UVxfW1cjVF9dMDEkP18zRFE1X1FUSCtfXj8KK01GOF9fP0c1T19eNzlXL19MVF0rXzREXS5fVChdL19fOFI8R19ZTScsX1lKL0EvXytQOz9fKkJAQV9bXlkKK01LX14uQTdbXz1XKUxfXDpeTS9dPjdFJ19AJ0lSX1IoQCZfXlFKSjNfWCxbK19YMVk+L15ISFlXX007JkkKK01fUyhQKi9cVi0yW19PO1JVX1oyP0ZPXEMpIVdfRjk2LV9XJUU3L11VO0YrXzpWOTpfV0VUOi9cQCcxQ18KK00nMVxCX1FENyUvXF4vMztfLCMsTV9UVTMzX11HOTY/XzhGKT9fVDkrMT9cSStCW18oQkRJX1JITSxPXDgKK00lUVtfJlFEO19ZSjJFP15ARilPX0hZTj5fWlpGSj9eU0pKS19OWypSX1tSVU0/XyRPW19fUSxaXV9VTUAKK002T104NjYjX0pbLk9fUkxNLC9eNkRJS18sMlBQX1M4Ui0vXVc9Nz9fQjhGNF9SMEIsT1w9J0I3XyszLFUKK01fX19UW09fNEZWJ19TKVlRX1taJTBfXyJEVVdfT1khNl9cMjU2X18gRDU/X09ZJTdfW14sNV9fIUQ1K18KK01ERlElX1JUOyM/XTw0VS9fOCYhN19dKydQL189U0xfXypTJFNfUlRSLi9cXjAkN18pMkRLX1I4SCpfXE0KK00sUzdfKEJITF9SMEwrT1w2JyFbXysjIFJfUTA2Jj9cSSpTI18lISw5X1MwUy4/XEEnUitfJiFYQF9SLEsKK00rP1xGK0MrXypTIFZfU0BULU9fNFI8W19YLF83X15HN1UvX01WPSdfXD1LNV9fJzlVT19TVk1HX14tUzkKK01fXy83VF9fQVI8O19eLi8/X1ouOUU/XFYsVCNfKTUyLl9RWFNAP1xLNFhLX1A8Ky1fVT0wNV9cRyYiL18KK009J0FaX1leN0M/XidAR1dfVz0vNl9dWylTT1w5JzFfX0Y5PjlfXFsgUD9fOFFcP185RUU0X1xfKVA/XEgKK00pUjtfMTQoXV9YKVs9P1xeLyM3XzZVSTNfVCRcLV9cMyQwU18jIEgnX1pKQkgvXy5QXCtfUStSWF9VIS4KK00xX10gMSNPXzZFMSxfWzpKST9dKjBTV18rIlRGX1s+UEkvXiI+JktfRThOIF9ZMik/T11BNjRfXytSVEoKK01fU0BbMC9dQThWO184RjU/X1UtNDM/XFIsMktfMyRJI19SWEwqP1xSLSMrXyhSSEpfUUQ9J19cOycyI18KK00lUUQ8X1FcQSkvXE0rUytfRVhWKV9aJjRDX15DRUknX0ZYWilfWTYsQU9eMUIoK19DKC1dX1hSIz8/XiQKK00/Nz9fKkI4SF9WJUE6T15WTEtPXyxCWFZfWForRD9cNiUhP18kIFgwX1g1X0BfXVo9OCdfKkJEWl9SREkKK00sT10sNDU7X19fJ0tfXDYsNE9fIERGN19TWTk0X1wqMzc/XylGNitfUilBQV9cNjU3T18qRVU7X1IpRUkKK01fViElKC9cRiZBN18oQVBAX1IkPyovXS8zVFNfU1wuXF9ePzZVT1xPLFM3XyVRREBfUVQ8KE9cQylSR18KK00mUVRAX1IsSSpfXFAuI0tfKiJcT19RQD0nP1xLK0JfXyYhRDpfU0xcLU9dJjI0L18qMyBQX1FEQylfXDwKK00oUl9fKFI4UV9TOFMuP18xUixDX1otOzJfXlc6VS9fVlddS19eLV86X18rPFUvX1NXLT9fXV1POF9fOzcKK01VX19MVS0nX1FLJk9fUjQ5Jy9cTyozJ185RkFPX1EgNCo/XEE1WSdfKSNOKF9SLSxCL15dTzxTXzdVQT8KK01fVkE3OV9cPyhCP19ISUowX1kiK0FPXz1UXTtfVjxHLV9TSSEwP18lUEwnX1dMTytfXEZdT09cWi1TO18KK00nIVQ+X1FYOyg/XEcoQjtfKSIgQl9RUDonL1w5JkFPXyghVENfUUA4Jl9cNyUxQ188Nj1KX1hOI0FPXj4KK01GOUdfPSchTl9aTkhIX18uTytDXytCQEBfUlxSKT9fJ086W19HWF1cX1lOLj8/XjFCKCdfNzVRO19UWTEKK001T1xZMDRPXy0zXSpfU0ReMS9cSSwyW18rUzxTX1NZIy9fXFwvQ09fKFIoQV9SWFMsX1xHK1MnXyoyWFMKK01fUVRBKF9cQSlSR18nUjxJX1JMWC4/XUI5Jj9fPEchU19WVUs7T11IOUZHXzgmMUZfVUE+OC9dNDZFU18KK000JTk4X1UlMjRfXS8zRTdfOUY5VV9aXklNX11YPSdXX0IoNitfWDokQV9eSUlaR19CSDIoX1ddWkFPXEUKK00pIzdfLiNBIV9WUU48P19fXS5bX1VZWURfXFpAPF9fNkc1T19TOVVKX1xKOTkvXyxGVjtfUzlRR19bOi8KK003T11AL1NfXycxIENfUVxBJ19dNjQkQ186RjFIX1NdIC4/XzNRXCNfWV0vNV9TQFovP1w9JyIvXyYxODwKK01fUlRRLF9cVi4jT18pUlRPX1JEUSxfXE0sQytfJSFANl9TNFctP10lMSQvXytCXFBfUTA0JV9cOycyI18KK00qQlBPX1UtLjUvXy9RLEdfWl1DOF9fMz1WL19XVy03X11dVzJfXzs8VF9fWVc9S19cLT8yX15fOFRfX0oKK01VPSdfSUkyMV9XRVE9L1xTK0MzXysyXFdfVllUP09dTTtXK18nQiBPX1FBLEE/XEEvKEdfKSRSKl9bWl8KK01ST11cPVc/XyhRLEFfUSAzJi9eOkRIQ19BWCldX10jJlI/Xz9SPE9fRllWO19cRyVQX180USwnX1Y8SyUKK01fU0xTLU9cNSVRW18mIUA7X1I0QylPXD4nQidfKDIsRl9SRE0rX1xIKkMnXzNFJTZfUTQ2JV9eMUI4P18KK01UXCMgX10iXU8/XkRGKTNfMyQsXV9ULSQvP10zNVRbX0JIMVxfWVIrQT9dSThWJ182RUk9X1NRJDNPXFcKK00xJTdfLVQ9O19TJSI2P1xaMjVTXyxTUSNfUkhQLE9cQSlSR18tQ0hcX1E4OCZfXEcpUktfLENAWl9TLF8KK00wX1xLLENDXytDSF5fUlBXLi9cOSgyL18qIlBOX11LMlU/XztUTStfWD1DOF9dWzVVP19IVj1LX1ldNzcKK01fXkM2Vi9fR1U9P19dLi9DX10zKVNPXVg8V19fTCpWWV9XSVY/T14gPzgvX0xbJlRfWlZLSz9eIj8oI18KK01BJ14rX1I8Ri1fXEUpMltfOyZJTF9fX1JaP18/SiZbX1EpRU1fXVZGOU9fJ0ZWR19TSUlIX1wuMDZfXl8KK01ERkdfMCFcV19TJEIwP1wtJSEzXycxTD1fWUYpQC9eLUA3U18zRE0gX107KVEvX1FWXVNfLSM8WF9SID8KK00pP1w6JVFXXysjIFJfUSw1Jk9cQSkyP18nIixDX1MgVSw/XSQyNC9fLEMoT19RSDglP1xIKVJbXyZRPD8KK01fVllFOy9fPVNNK19dLVs8X19HP1cvX1hXLUNfX14jPF9fQzxWL19YV003X11dXzZfXyc4Vj9fUVVdM18KK007RUk2X1MkSChPXE0pUV9fKyJASl9SVEQnT1xKKDFLXy0zIEtfUkBCJk9cPCcyQ18nNFIiX1JBJkQvXEYKK00zOENfTzwrKF9ZOjRDP1xEJjIjXyYhSD9fWF4pP19eJ0EnX19SXCsiX11XJFE/XlxNOzdfUiwrIF9dJyQKK01PX185UStfXzY0UStfUkBMK09cQilSP18nUihDX1E8OiZfXD8pIjNfK1M4Vl9RLDgnP1wzJjFPXyUxRDcKK01fUzxSKy9fLlA7U19QO0ZVX1NEWyxPXVtBJz9fQ1hWKF9SWEAnP1w8JSErXyMxUDxfUl0gM09cVTE1N18KK00tVE1BX1MpJzhfXE4wVV9fLDQ5Pl9TJSI2P1xULyQ7XyVBQDtfUTA2Jz9cWi1TV18mMTg8X1E8OSdPXE8KK00tU09fJzJETV9SJEosP1xDLDMzXyhTIFFfUyBSLT9cSykyR19ZXS8vX18rO1VPX09WTTdfXV4rPV9fP0IKK01XT19aWT4nX10+IztfXz9CVz9fXVhNT19TW0ZaX1ZBQjpPXklKWyNfRDhWNV9XWVtAP15YTTtPX0laNkgKK01fVlVHOl9dWj1YL18oUjBVX1JASSwvXEkpUkdfX183S19dRkU7L18tSUdTX1ZKMUFfXEpBOC9fJUU1W18KK01POTFDX1FcLSAvXEAmI0tfLCJJJl9SSEksL1xcLyNHXzNUSSVfU0RUK09cXS0zJ19VLDMhX15XOVU/XFYKK00uU0dfKFJATV9SMEQpX1xNLEMrXyVBSDhfUyRTLD9cXy9DV18rMyhSX1IoRiovXEcqMlNfJzFAPl9WUUYKK005L18kTVsrX1tNOzNfXyc3VS9fVlc9Q19cXVs5X18nPlYvX1hXXUtfW01PM19fRzxWL19CVF0vXzRESS4KK01fUVQ7KS9cTC1UQ18nIihMX1ZNQjZfXEArJEdfKjIwRF9SPEkpT1xTLzUrXylSPFRfUUBNMU9cXTopU18KK00sVUI5X1JVK0BfXyRRTTdfR0laO19RVDUmL1w5JVFLX0BINVlfWD4lQE9fKU9bT19VTEMlX1tST00vXUoKK004Ji9fVDw3IV9cUl1OL11NOVY3XylCQEtfUihHKz9cVi4zW18pQkhMX1RJLjQvXFsvVCdfMVRRLF9TTF4KK00vX1xAKDIrXydRVD9fXTsqUz9fJk8rX18mQTg4X1FYOicvXFEtQ09fKkIwSF9ROD4oT1xOL1RXXywzXTgKK01fU0UjMz9cXTQmK18sJDFAX1I4UzFPXDElUV9fLkQ9OF9SWFkxL1w9JkFHXypTIFxfUlBMK19dQTg2M18KK00rIzBeX1M9ITE/XEArIk9fKyM0W19SMFEtT1xLLVNPXylCUE5fUlRLKz9fR1YtL19bXUs1X18rPVY/X1UKK01XXVdfXi4nQl9fO0BXT19WWD1XX14uJzxfX19HWC9fRlU9N188RyVYX1pWT00vXjlFKUtfPDZRUl9bIksKK01MP15ISFpHX0BHVV9fVUk8OS9cPylDM18sIyRYX1hOLEM/X11cLk9fWDpNUV9cWkM8X189SFVbX1ZKPUsKK01fWlYlOl9cSCZRO18mISw3X1EgKSU/XDgkUUdfLUMsTl9TRFQrX1xRKjI/XyZRPDVfUyBLKU9fK087S18KK01bPU84X1NEXi9PXDwoMj9fKCFcRV9TJFcrX10nMlQrXyxTME5fUVA5Ji9cSSkyP18pUiBAX1hVXz8vXzgKK01QW1tfW01DL19fPz1VL19bV10/X1xdVzRfX0M+VT9fVFdNN19cTis4X183QlYvX0FTXE9fViw3K19TUSQKK001L1xNMDU3Xy5UNTpfUj0hOy9cNygiW19HWS4kX1IgUTU/XTs3NjNfJVFYRF9RTFM2T1xDLCRHXyRCUS0KK01fUj02Qz9cTDY5R18sNFYmX1taXlM/Xk5MKldfMCNAW19RRDQmL14hQSdDX0AnWVtfXDpcTi9fNVFMJ18KK01OSlpRX1glWT8/XyZPO1dfUjtWXl9UMSAwT1wvJTE/XyYhSEFfUixHKj9cMyVRR18lIUA6X1FAPCdPXDEKK00lITdfJ0FcQF9TJE8sP1xZLTM/Xy1DJFdfU0BZMC9cVy40I18nIUxCX1I4TytfXEIoMj9fJzJIV19SVF4KK001T1xRL0UnXykySE9fUVhILV9dJTNWM19FSTY7X1paSUkvXVc/SEtfLCNJKF9bKk1LP1xZL1RHXzA0KSMKK01fXSctU19cUC0jU18tM1UhX1FMRCkvXEwsU0dfKCJUUl9TJF0wP1w4J0IjXyUxODdfXV8wUl9fUlc9Q18KK01dPU84X19HPFZfX1dWXVdfXU1XPl9fIzlWT19PVk1DX1tdRzdfWUouRD9eJEFIV19KKk5QX1oiO0dfXUYKK004NjdfSyo+S19aOkFJP11TO0cjXyQxKD1fUiBGLU9cTitDP19IOVY/X19TUFpfXz1JVldfUkohUl9cOjcKK003P15ORCdLXy4yKFNfUVg3LT9cSykkK18qIiRTX1FQNyc/XD8mQUtfKCFEOV9RSDMmT1w9JiFTXyoyNEMKK01fXFsiTz9fU1ctP18vU1RaX1NEVy4/XUE2RUtfLUNAVV9RUDwmP1xHKTIrXytSSEpfWUIsQT9eRkVIV18KK01UW1ZUX15fM1JfX0VTXDtfXC1DL19eVzFSP19MVUxXX1xNOzNfXispUi9eUkgpV19OKjpDX1Q4Wi1PXzYKK01TTUNfLSQ9OV9TMS43L1xbL0RHXy4lOiJfUVw/KE9eUUZHV18pM01CX1QtJTMvXFovU19fJyMlNF9ROEAKK00tL1xALERbXyVTQU1fUj0sQz9cTDAnS19OW0cpX1gqKkFPXEQoIitfJiEsN19XPVo7T11WPScnX006TkcKK01fXT8nT09eXkw7I184JU0/X1UpLTNfXlBKSltfQihKL19SJEYqX1w8J1IzXyYxVD9fUlRRLF9cUi1DQ18KK00pUkxNX1I0RilfXD4nIVtfJ1FMPV9ZRjRFT1xYLVNXXzFETTFfUlxULk9cNyRRT18oIjBCX1IkPikvXEEKK00rQ09fLCQhMF9TRFswX15JSEorX0gqKlFfVFU3OU9dWz5XW19ZTiM+X1kqOUlfXFYvVFdfUFtCV19TQF0KK00wX1xZL0NTX1MsQyZfUzxZMD9cWi9UM18mQiRBX1MgVS5fXDMmQiNfJ0IsSF9SUEorP1xJKDIzX1ldLy8KK01fXlc4VF9fS1Y9N19cTjNBX19LRFcvX1ZXPTtfXD1TN19dWyxSL19JVV1HXzI0LStfV1IlQy9eOEZaI18KK01JOi5FX1RJJjIvXkRIKitfSElaQF9XRVM9X1xHKVMzXyhSQFpfUlBMLV9eTUk6Q19fXytJX11GQzpPXyAKK01FVldfPzVQWF9RVDslT1wxI0FPXyUhJD5fUUQxKT9cVCtEK18kIFQ5X1E4NCVfXDgkUUdfJSBUNV9RKC8KK00lP1xLKiI/X1E7TldfXyM2Uz9eS0hJT186VjVDX1IsOSU/XEUoIjNfJjEwOl9RLC4kL1w8JVE/XyRAVC0KK01fUig9J19cPyYhX18oUVBEX1JIPydPXFQpIidfLiIsQV9SWDwmP1xHJjFLXyhBVD9fUVRCKC9dVT43P18KK00wVDUjX107MVRfXTo6V09fJkI4Sl9RODkpL1xGM0g7XyZBXEtfVylCNE9cPS0lW188Vy1cX1U5NTNPXEIKK00sJD9fNyYpTF9SRFAxT1wrJ1RTXyhDUVtfUkBaPS9eWE08P183Ni0/X1M8WC4/XDQkQTdfPSc5TV9VKTAKK00zP11HN1VPX1Q8KlxfW0pPS09dKjIkS19CKDYkX1hCI0FfXSozJSdfKyMkVl9SVFAtP1xFKjJPXyoyTE4KK01fUiRDKU9cMyVBP18mUVQ7X1FcPSdfXD8mUVdfQlgyJF9TLFMtT1xRLSNHXypSXFFfUUAzJV9cNCRAX18KK00oIUw/X1FQRiwvXEArIy9fTzs+W19eQztWT11cPzhbXy8kUTZfVyVYP09fP1ZNW18tU1UtX1M4XTJfXycKK01OWz9fMDQ5LF9TRF8uX184VE0jXyxDLFpfUyhVLk9cSytTJ18qUlRUX1JISixfXDsnMitfTysyWF9YMVgKK00+X19DU0xHX0Q3VVVfU1hVK19dJjEjX19cTic0X1leJz4vXkxGSFNfQFc9Tl9dXzBVL10hMCQ/Xzc2OU0KK01fVCEjMi9eO0Y5T18mMTQ3X1lKNkYvXkdIWjdfPCZNT19SKEIsP1xFKiNLXytSXFhfWlpGSk9fX1tNO18KK01RWU1TX1NYPiEvXDwlMTdfJjEwOF9RNDAlL1w3JEE7XyVBJDVfUSwxJS9cNiUhP18lMSw2X1E0MyVPXDQKK00kQTNfJSEsOV9RRDQmL15eTEpbX1otNy1fVkk9Ni9cRSchU18yRCBcX1RJJTE/XDklMT9fJUEoNF9RSDYKK00mL10xMlRfXy0yXFNfUjhAKS9cWSxTP18lQSQ1X1E8MiVPXDklIUNfJkE0OV9RTDknL1w1JjFPXy5EMSEKK01fVSU2NC9cUi1UL19bLU8uX1M1IzYvXEcoUidfJCE4Rl9TMTpDP1w7JlJLXzRUIFhfUVRJMU9cOSciW18KK00mQUg9X1E0PSw/XDspMyNfJzIgWV9RIDwuP1xDLVYzXygjVVdfWlZRUU9eMkM4X18rMlxUX1E4OSZPXVAKK008Rl9fLSM0T19UQSYvX18rTltDX0taNkhfUkRLKj9dIC5TN19OWy5PX1hGJEEvXV0/R19fKjJUT19RTD8KK00oP1w+JlInXylSKERfVEEjLz9cOSZBM18kMSQ0X1JERypPXiY/R1NfK1JUUF9RLDYmX1wwJFEzXypCWEwKK01fVj1GOT9cUCwzK18nMiBFX1NEXjEvXFUsUztfKzJQS19UISM1P1xRMDRLX0BJIi9fXVc5Vl9cUC0kR18KK00tRCEvX1teV0xfXFUuRCNfLyQkX19cVylRX1xPLDNDXy1DPF5fU1heMV9cRypDN18pMjRSX1FEQiovXicKK01ASDNfTTpaVV9dWzNSL14mPDY3XzRVKSdfUlRMKT9fP1QsT19DR0VNX1pGOEIvXUg5JVNfVEwrJl9TXSEKK00yL1xWLkQrXzBUKShfWUI2Ri9cQidCI19FOSYzX1k+M0U/XUo6Jk9fKTI0UF9SJEMsT1xULSM/X0s6Qk4KK01fX19NWC9cTCdQW18nUVBCX1FUOigvXEEnQVdfJ0FEPV9RRDQmL1w5JSFDXyVBMDdfUiA+KD9cTyszI18KK00tUzRYX1NEWzAvXF8wJD9fNUUlN19cOllNL19OVl0vX0JHUVlfVDRWLk9cSSVRR18lQFwvX1EsLyQ/XDgKK00lITtfNyVBOl9WTUU6P109NVVPXzIkKSZfVU01Nj9dNTQlM18lMSA0X1FYOSc/XDIjMSdfQzg+JV9aVkUKK01IX15dTisvX04rIkxfWjZESl9fIkw6M180RilcX1IsQCdfXDMmMi9fMUVOK19RRDsoX10+NFRDXyRRQFEKK01fUUg8Kl9cMiRBN18lQVRLX1JIUy5PXDUlUlNfI0E0SV9RIDsvP1xDMDdHX0haRl9fWEoiQU9cSSgyT18KK00lMSw2X1Y5RTkvXEIoQV9fLFMwTl9YWiU/X15CRylLXyVRNDdfUkhHKE9eKEAnU19DKDYlX1FcOicvXDkKK00lUUtfJUEwNl9RMDQlX1w4JTEzXywyOD9fVjU9Nj9dODRVP18tIyhVX1hCID9PXTU0NF9fQCgpX19YOigKK01BP1xXLyNDXyYhTEBfVi1DOU9dTjo2R19MKlJOX1tWWk4/XVc9VltfLlNZI19TQSMxL11cQig3X1ctQzoKK01fU0RdNE9cUS5US19PSzpSX1MsWC9PXF4wVCdfU1xPKV9TKFQuX10iMFRLXy1TPSBfUlRQLl9cRSojL18KK00oUlRRX1tSU0xfXlZKWyNfWC0vJl9YQU44L10yMjNPXzhFQS1fXyc8VV9eLz5GW19HKF1eX1ZFQzZfXzQKK01RLENfLiNJIV9TQFwxL1xeLzQvX0QoWjBfUiA8J09dPjZFU18tIyBSX1ZVSztPXEYpQydfKDIsUl9TLFMKK00tT15PSksjX14tP0hfUUA6Ji9cNiRBT18mIFg3X1EwMiUvXDUkITNfJFBYMl9RQDMlX1xZLVNLXy9TVSAKK01fVEkoMl9dJTBUO18wJCkpX1QtJTM/XScwRENfVCteWV9eVzdTX14kPTc7XyghQDxfUVA3Jj9cNyRRN18KK00mITA2X1JcSys/XSwyJEtfNlU1OV9UUSYyT1w0I0ErXyhRVEFfUyRMLC9dIC5TX18mQTQ5X1EwLyRfXloKK01LWkNfUTsmSV9aIilBL14gOyZDXzpWLUZfW0JGRi9cUzFGM18mIUQ6X1EoNycvXEMpRSNfJTFAPV9VUTgKK00yP1w6JiJPXycxVEhfUUg4Jk9cNiYiI18oUlBSX1E4Nik/XDQlQVtfJiFQUV9SKFo6X140RVpDX0kpTjsKK01fVCxeME9cPCVBS18wM1EgX1FIOCZPXDsnMUtfMkRBIF9aJj5GP1w6JUFDXysiTEpfVCEgLz9cUitSW18KK00kUFwxX1FINSY/XD4mUUtfKiJQSl9WRUk5T11CNERHX01aSkVfXCpaT09cRSgiM185VV09X1leN0RfX0IKK01XTVNfPDctUV9UTS80P1xWLiNXXzdVSTVfVik2ND9dLzM1I182JSk2X1RVLTBPXSsyREdfJjFQPV9XNV4KK00/T189Vj1PXy8kITVfUkhUMF9eX01bL18xJEUvX1NAXS5fXy9SXEdfKjJMUl9TVF4xP10gMCRHXypSWFkKK01fUjhMLS9cOSkiN19QOzpVX1wqUk1PX0NVLFtfPTVVNF9VISYuX107NDQvX1pdMy9fV11MOC9eK0BHJ18KK005RiE4X10zIlFPXSEwVEtfLkNZJl9UNSQyT11ePydbXyhRXEFfUVw7Jz9cQidCI186Nj1KX1FAOChfXDUKK00lUjtfMyRRL19bKk1MP19ZVi8/XyVBJDVfUiQxJT9cPSNRQ18lISg1X1E0MCUvXDgkUT9fJVEoOF9QWCkKK00jP1xVLCMzXzFEMSdfVSEtNF9dJjFVK181RUVEX1RRJzM/XyZNOl9fWV0rLl9YUV8/T1w7JjFPXyUxQDkKK01fUTQzJT9cOCUhO18mQTg4X1E4MiUvXDEiUF9fI0BALF9SIDonT1w7JTFHXyUgXDNfUiA7J19cNCNRL18KK00nQUQ9X1NcXixfXl1NKjtfUCsqSV9bUlZLT18nT1tPX0pJTi5fVEE7Pj9dMzQlO18mQVw/X1JMRjJPXDwKK00nQidfNiU5J19RWDgpT1w/JzI7XyYxPDpfUTA0Jz9cRSsjK18kUThCX1BQLSUvXDomQj9fIyFJIV9UOSYKK000P18gTjsvXylCQEZfUVg5Jz9cNiQxN18lQTg5X1EoNSVPXEUpQV9fNUUtLl9SLD8oP1xBKFInXykiREUKK01fU10kME9cPyhSJ180VSUzX1ZZTDo/XipCOENfJzFcPV9YTVg7T18oTSsjX1VMPytfUiw9KD9dOjUlK18KK01QW1ZbX14rOlc/XiE/SDNfKiJIUV9SIDsoP11ROTYnXz9HLUxfU0hcMD9cNyRBQ182JTkuX1MwUSwvXFoKK00uI09fOzclU19dRzZVP1xaL1UnXywzTSlfXCpaTU9dIDE0T18uM1hcX1xDI1BfXEcqUldfL0QhI19UOScKK00zT1xIKlM7XyxDOF5fUTxCKF9fI047N19RSzJWX10/LlIvXTIwU1dfMENYVl9VISgvT19MVS0nXzwmJTQKK01fVzlSNz9dQTZVL19VPC8nX1Q1KDM/XFkvNDdfLUMsWV9WXU08L1xFKDIvXydBSDxfUiA8J09dVTxXO18KK01AJ14sX1JQTS9PXFEsU0NfTCpOT19eVztaP1xCJiIrXyNRIDdfUSAyJV9cOiUxP18mMTA2X1E0MCRPXDkKK00lITtfKCFIOF9TKE4rL10qMTRHXy5TPF9fVE0oNS9dKTI1O18uMzReX1tGTEpfXUs3NVtfMlQsX19WXUoKK005L10/NlVHXyVRKDZfVDUgMS9eQ0dKK18mMTA4X1I0PyhfXSkwVD9fQSdaIl9WXUk7P11HODY3XzlWJUUKK01fWCFaP09cPiYhU18rUkhEX1pGP0U/Xi9AN0NfOlYtOV9XJUA2T14yQzhDXzAlLUVfUiQ5KV9cOSYxU18KK00oUiRUX1IgQSovXUY4NU9fJUEoOl9RXD8qT1w2JUInXydBWElfUjxKLU9cTSwjU18lITBBX1EwMygvXDcKK00mMltfJ1IkSV9YPiRAX1w2JiFXXyYxQD5fUjxFKi9cUCtDJ18nMUw+X1FYPScvXE0rIk9fLSMsUl9UKSEKK00wL1xOKzJTXypSVEpfV0FdPV9eQEdJP19DSEImX14jNVZPXDsnIVdfOzVRL19dVyhQX19NVT1LXywyRE0KK01fVCRcLy9eVU1bN19YTUM7X1g6JEFfXFIuQ1tfJzFMRF9WSUQ6L11IOTYjXzQ1OTBfVkVHOE9dJDAzU18KK004VV09X1I0Qig/XilCOFNfWF1XO19TUSAzX1xcMUUzX01bKk1fVCUmMy9cXTAkJ19IKVpBX1MgWi1fXSAKK00xRCtfMjRBLl9TOFkxL1xJKkM3XyhCSExfXDJZTi9fJE07R19WPFcoX1RVJC8/XSEuUy9fNEQ9IF9eMzMKK01UX108NERDXzlWMTNfVT0qMT9fNVAsO18xJD0sX1gmJEI/XVY8Nz9fNiUpOl9VNTA1L1w9JkFHXycxQD4KK01fVl1KO09dUTs3V18qIkUiX1JQTi1PXUk7JldfWE1DQV9SQEMpX1w+KCFbXyxTJExfUzxTLD9dIS8zT18KK00zVEklX1U1MDJPXSYwM09fMDNYWV9UOSQwP1xcLkNTXypCRFBfUyhTL09cWC1DX18sQkxLX103KFFfXkgKK01HWUdfPUchSF9WRUQ3X1w9JiFLXyghTD9fUSgtJD9dUDpWX18nMTw7X1QkWy9fXDslMUdfNjUtN19RODAKK00lL1xFJ1IvXzo2LUdfUVQ3Jl9cPSdBQ185Ni08X1kiKUBfXjtGSS9fQzdNWF9aOjxGL1xfNCVbXyUxLEMKK01fUUQ7J09cQCdDJ18mMURCX1I0QygvXE0qUzNfKzJUWF9STEstT1xFKTMjXygiJExfUjhHLE9cNCUhX18KK00kUSA8X1FANyovXDwnMkNfNlVVQF9SLEIqL1xEKEFfXy1DLE5fVDkjL09dIi9TS18vQ1BZX1FYPiZfXF8KK00vU1NfMFQtIF9SMEIpL1w/KDFfXy9UMSBfVj1EN19fLVIsL19aTU9AX1I8RypPXF0tMk9fVVw7IF9fLzsKK01YL1xHJ1IvXy0iXE9fW0JVTS9fQVU9Q19FWT46X1RNNTY/XDYmIV9fKVJASV9WVUw5P10rM1Q/XzhGLTwKK01fUkhLKT9dPzkmI180NUU2X1hKLkQvX0FWXUdfL1QtMl9TUSY1L15aTTsjXzA0OSxfVCEjMS9fK1I8U18KK00uJCUhX1QlJjFPXSoyNSNfLDMwX19SQEosT1xEKyJbX1BbQldfW1pPTF9fL1FMO18wU1xdX1NMWS1PXS4KK00yJDtfVi0jM19UPScxL10wNFRXXzI0OSVfXS8iUk9dMTUlR19NS0ZeX1ZFRDpPXkRHSjtfKUIkRV9WSUcKK005T15BRyorXzw2UVBfVz1TQF9cTCs0O18rQyBYX1YlQDdfX0dWTUdfL0NAVl9TOFUtL1xZLVNHXy8zXScKK01fUVhBKy9cOyZCI18oUVxBX1MoSypfXFUsIytfLlM8WV9TTFouP1xTLFM7XysyVFZfUzxZMD9cSioiT18KK006RVU8X1VJLzIvXVY7RjNfQUddWV9RWDkmX1w4JFE/XycxQDxfUVQ4Jy9cOyUxR183JTk6X1FYOCcvXDoKK00lIUNfJ0FAPF9SPEEpP1xGKCIzXyhBUEBfUTQuI09ePkQ5I18sUjBEX1IwOSYvXEcmMUtfM0Q9IV9TQSMKK00zT1w6JFIzXyUhNDZfUTw0KV9cSSsjP18sMyxWX1IwRCtfXD0nMkNfKDIkTF9RUDwpX1w0JUFbXyQhIDkKK01fUSwxJk9cMyNRQ18lQSxAX1E8Oik/XEgrMy9fLyNIXV9TXF0uT1xdLlM7Xy8zTFZfU1xdLi9cUStTJ18KK00nQVA/X1FIOCZfXDwmQVdfJyFIPV9RPDcmT1w4JlFTX0JYPiVfXSMoUS9fSVVdT18qMjhMX1M0UytPXzQKK01RXCtfW10/PF9SWEYqT1xRKyJTX01LJlFfXkc5Vz9eOEYpT182JjlJX1lSREtPXDMlQU9fM0RZK19XTV0KK00+T103NiVHXypSVFBfUkRTLV9cWDFUU19AWEItX11PNVRfXSAxJS9fLjQtMV9YTiZAP1xeMFRHXzFERSoKK01fXE8pUy9cUS4jW18wRDUqX1NYXTEvXEkrIz9fLTM8X19SQFAsT18hTUs3X09KXlNfXS8xU09dIzBUI18KK00wND0jX1VJOjVfXyxSTD9fM1UlLl9VQT02P107NzVLX1QrXyVfVEktNE9eVE1bU186RjVLX1lSNkdPXEYKK00oMjdfSUouQl9ZVjhHT11KOTZHXz03JiFfUkRKMF9cUi0jU19CODIoX11DMFdPXDMlQj9fLjQ9PF9RJD4KK00uX10hMyY3XyoiXSVfUUw9Ky9cPCciP18oMUhCX1JURis/XFAqUydfLFMkVF9TME8sX1xfMDQ7Xy1DQSAKK01fU0hYLl9fOFI8R19TK1ZXX1dFTjhfXVk7NkNfJkE0N19WITs3X10xMyUjXyVRKDZfUig8KC9cRSdSL18KK00zREEsX1VJNDYvXiA+R1tfLCJITl9RODAlL1xXLDM3XyYxPDlfUVA4Jk9cQicxX18nUVQ/X1EwMCRPXE4KK00qMi9fLzQ1L19RMComP1wzJDEzXyRRIEJfUiREK19cQCgyQ18nIVBFX1E8NygvXDwnIjdfJkFIQ19SKEIKK00qX1w7JlIzXyVBMD1fUTwzJy9cNSRBW18lITBBX1E0OSg/XSgyNEtfMjRNKV9SSE0rT1w8J1IjXyZBVD4KK01fUUA6J19cOCVRW18mQTg+X1FYPylPXEYpMk9fLiNIXV9RUEEoP1xaLlNTX08rRlRfXj81Vj9cRigiQ18KK00rQyhQX1wqVkw/X1VXPiNfKkIoRl9SXEoqT15TSypTX1YsTypfWio9SD9dNzpWX19GWipOX1k+OUg/XEcKK00pQlNfJ0FUQ19SKEYrT11FOUZXX0w7OyJfVDk9Oj9eIkJZJ19WXTczX1QtJjRPXFoxJStfTFpaSV9ULSUKK00zL1xbL0NfX09LUl9fUyRWLy9cWy80N18wI1knX1I8SyxfXE4sI0NfKTJUT19YJVk9X15bS1srX1csSyYKK01fXVsrUT9fPlM8P19XPEchX14rKVBPXzBOWztfViwzIF9dJlpNP18/UjxPXzRVOTtfWjZISz9dNzRFQ18KK01CSDouX1I0QCkvXkJHWVtfRlk6Ol9WNUA5L11QO0dbXylSQSFfUyxVLz9dTjxXR19ZXTNEX1IsPSpfXFAKK00uRENfJlIgUl9SJEYuL1w4JlJTXyUxNEBfUUw2Jy9cOSUxP18nIUA6X1I8Qyk/XFUsMy9fMFNQXF9TOFEKK00tX1xRLCM/XytCQExfVjU9Nl9dUDo2L18zJEReX1RZKzFPXEInMV9fJjEsN19RPDElP1w0I0ErXyYhKDYKK01fUiw9KD9cOSRRP18lQSA0X1FcNCY/XDcjUS9fJVEkNV9RSDUmP1w2JDEvXykhXEFfUjA/KD9cRCdSJ18KK00kQSAyX1FQNyRPXCwkMVdfI1EsQl9RKC4lX1w4JFFfXyVBJD1fUVA3KF9cPCZCL18lUTg9X1E4NScvXDkKK00mIV9fJzFURl9RTDspT1w7JlI7XyUxNEBfUSgwJj9cMyQxS18lQTQ7X1JQTStPXE4sIy9fJjFMPl9SLEUKK00qL1xGKiJPXygiQEpfUkhOLC9cTSszI18qUlxRX1JESipfXE8rUytfJ0IoRF9ULSgzP10lMkRDX1QrXyUKK01fUlxGKz9cSCoyS19LSio9X183PVgvXEkoMjdfKyI8SV9bUlBMX18yVDxLX0xaKk1fVElHPE9dUkFIS18KK00yNVFEX1ZZV0E/XTI0RV9fNSVRTF9TWSo0P11YREo3XzNGQVZfV0ogQE9fO1RcX186Jj1UX1MgWzFPXkAKK01HSTtfMCNdJl9TTSEwX15eTktTXysiXFRfU0RbME9dKzI1K18qUlhZX1I0SCxfXEMrUy9fQDdRXF9cPlwKK01QP15HRFhPX086LjZfWyI2Qi9fIUopP19SKyY/X1xWUkg/XyFJOT9fUjsqRl9dTydQX106NyVfX0tLIlgKK01fVUE1Nl9dVTw3R18pUihGX1lOOUVPXi9CWFdfNzVBOl9WTUs+T1xJKyQ3Xy0jMF1fVkE9OE9fTVY+L18KK00oQUBBX1FUPChfXD0nIi9fKjIsS19RQDImT1w4JFE/XydRVD9fUjBAKE9cPiZBU18nIUA6X1FINiYvXD4KK00lUT9fKTIgRl9TVFwwX1xGKCIzX0hZRjxfWzJOSy9eKUFIJ18rIkRIX1FYOCcvXDQjQStfS1pGTV9RTDUKK00mP11QOkZbXyoiKEZfVU01Nj9cVywzN19GOFozX1YxPDgvXiI/KCNfJFBYMl9RNDAkT1xGKDIvXylSKEQKK01fUVw6Jy9cLiNBJ18lQSg0X1EoPixfXEgtNStfJEEkPl9RKC8mX1w0JDFXXyVRMEBfUUw4KS9cPiZSP18KK00nUVBIX1FINyhfXEAnQj9fJ1FURl9RSDgoP1wyJCFHXyQxIDdfUSgxJi9cMyRBQ18lISw5X1IkQylPXD4KK00oIi9fLkNQX19TSFwvX1w0JkFTXy1TRFxfVSErM19eNEI4W186VjFLX1gpXUBfXSIwJC9fOFYlQ19aNkMKK01IL19JVk1PXypSNElfUlhOKl9fLVA7U19cTUs9X1I4PihPXEkpIjtfTCoiSF9cIyBPP15aSjtHXyxUUT0KK01fVjlVPl9dT0EpI187SDo5X1VFWEJPXVJEKjtfO1kiPF9WKi1HX1xILyRLX0BIMidfXUMwUy9dLjM1S18KK00uNDEvX1VRPjU/XFouVCtfLFM8WV9XKVM9L1xQLFNDXy8jWSVfVCRfMi9cUi00I18qUlBXX1IwTixPXlsKK01MSytfUzwjJV9cIkxJL15XRzkjX0xZRitfXC5KRj9fJEpJN19TOl46X1wuRERPXylMKV9fWCxHJF9XMVUKK009T15JSksnXzdVST5fVjlCOk9cRSgiM19FOS4wX1hSKEJPXUU4JitfPTc2JF9SVFAyP1xQLCNHX0taQkgKK01fXkc8WV9cOyQxS18pQVxGX1IgOydfXEInMi9fKSFcRV9SPEQqT1xNKkMjXyYhLDdfUVQ5Jl9cNyRRN18KK00lMSQzX1E8MCQvXDwlUVdfLzNRI19SMD4oT10iLENLXywyIEZfUiQ1JU9cRiZSI18nISw6X1FUNyZfXS0KK00xVE9fJkEwOF9RPDElP1w8JUFLXypCMEhfUVA2Jk9cPiRRQ18lIFAwX1FQNiZPXDckQTtfJUEkM19RVDgKK00mT1xHKEIzXydRSDxfUUw5Jy9cPiZBQ18kQUhKX1E4PSw/XDclUitfJlFMRl9RTDspT1w7JlI7XychSEMKK01fUVQ7KS9cPiciN18qMjxQX1JYSyw/XFArMy9fJVEwOl9RLDAlT1wzJFE7XyRBKDVfUTQ0Jl9cNCRBT18KK00oQjBJX1NZIDBfXEorIl9fKkJQT19SWE4sP100NUVHXzBUNShfUTwvJF9cNyRRT18tIyxaX1MkTCwvXSsKK00xRDtfSjoqPF9eTzhWL1xKKUJDXysySEVfXEZdTU9fS1RdO18rMjRJX1MoTStfXlNJKkdfPygpWl9bTlEKK01OX10gNSYrX0RYQi9fW1pdUk9dIjVWR18xVyokX1Q9XUFfXlRPXDtfOCVBTF9SWSMzX11OPjdLX1dNOzIKK01fVEUoNT9cTS4kL18rIzBKX1RVLjU/XFsvNCNfK1MoU19SPEwsP1xZLlQrXzJEQTFfUyhVMC9cSysjP18KK00mUixHX1lSMEQ/XyxPPCtfUFpeR19bWkRFX15dSFk3X09aOjVfXDpORl9fJUpZQ19RKjo2X1wyTUgvXz8KK01RTCdfPDchT19bLlNNT10xMyRbXzY1LTtfUjhBKT9eMENIT19CKDImX1Y5QThfXUY5RzdfKlJZJ19TKFIKK00uX15ISCovX1k9T0xfUzBMLU9cTSlSX18nQUxBX1JITCw/XEMpMlNfKDFcSF9SWEktP1w/JkIjXydBSDwKK01fUUAzJT9cOiVBQ18pQiRDX1I0QylPXSEwJDtfKVIsRV9RQDMmP1w3JTFDXyVBPDhfUTA2Jl9cMCJQX18KK00mQTA4X1FEMyVfXDkkUT9fJEBQMF9RSDQmL1wzIzEnXyZRNDlfUUwzJV9cMSIwV18kMEwvX1EkLCQvXDYKK00kMS9fJyE8OV9SLD4oL1xDJ0IjXycxQDpfUiw8JU9cPCdCL18qIixJX1FYOihPXD0nMjtfJzFURl9RUD0KK00qL1xMKlMrXyxDJFdfUiA/KT9cOCVRV18mQTw9X1FINyc/XDklQVNfJVEwOl9RPDcmT1w9JyIrXylCNEwKK01fUVQ6KU9cNyVBU183RVlBX1MgUCxfXSwzJF9fK0JITF9RVEAoP1xaMEQzXyYxTD5fUTQ3J19cPCciN18KK00kUTg3X1YtPzc/XyRPOz9fWk1LN19SSEYqL1xHKDFfX0xKOj9fXi8rU09cUCoiU18sIlBOX1wuV0xfXU4KK009VyNfTls2WV9TXTI3L14wRDkrX1BMMylfUzxdMz9cWTA1N18+SCYnX10zLFJPXUg6Jz9fLyQ5NV9TUSIKK00xL11UOyZDXzMkTThfUlhZMS9cMSZRK18oQjBJX1NAWi8/XDUmQUtfKUJMUF9TRFwwP10pMiRfXyxDOF4KK01fUzBVMC9cQCkyS19KWipCX1w6V08vXkxGWTdfSkkyK19aQjNBX14/QldXX0VYQVtfWT4lPl9dWzomI18KK01CR1FTX14/MlM/XUM4ViNfSlpOTl9USSUxP10oMTRPXyghTD9fWClfP09dSTk2P185JV1DX1VVPTsvXEMKK00pU1dfLyNVJF9ZNjBFT19EVD4/XyoyOExfUyBWMC9cVixTX18oUixMX1EsNCdfXDMlIV9fLlNRJ19STEQKK00rL1xOKyJbXy9TMFNfVUkyNU9dOTY1U18tIzxYX1JUUixPXEYpMjNfKEFUP19SNEAoT1xCJzFfXykyIEIKK01fUlBEKV9cRCchX18qMiREX1JMQylPXEkpIjtfKFFYQF9SQEMpP1xGKDIvXylCJEFfUiQ8Jy9cRCdRX18KK00pIVw/X1FINSU/XEInMVdfKVIoQl9SMD8nX1xCJkFbXyhRUDxfUiQ/KE9cOCgzK18kITxJX1FYPilfXEwKK00qMl9fKCIgSV9RWDspX1w2JDFXXyVRKD5fUTwyJ09cNiUhV18mMTxAX1FUOykvXD8nMjtfJkFIQ19RPDcKK00oL1w8JyI3XyxTLFxfVT00Nk9cSioiT18kIFgxX1FIOCZfXUA4JVdfPidJV19TUF8wL1w1JVFLXydCIEUKK01fVC0gMU9cOSlCP182NU0+X1w2UkxPX1JVPSdfLVI8T19SLEMpT14pQlgrX1JbPllfUzRKK19cUStTJ18KK01TTCpZX1ZdVUE/XyxQPCNfLlRBOV9ZIi5EP18qUTw3Xy0jWS1fUlxbMk9dWT9HW19WXTsxX1ZVTz9PXFIKK00wRTdfKzNMWl9VMTIyX10yNDVbXyxDUSpfUUQ9J19cNSYxT18sQzhYX1NIXjAvXFovVDdfLzNdIl9UUS4KK000P1xQLSNTXykyTFVfUiREKj9dSzomP19OWyJVX10vKFFfXy1QW19fVSxLJl9dUzJTT19FVj03X1otSzcKK01fXjc3VS9fSlctR19dTis+X1VRPjcvXUw7RydfKSIkQF9TTFkuX1w/JzIjXzFEMSdfUUg4Jl9dOzZGJ18KK00nQVxQX1IwRy4vXFQuI0tfQEgiIl9eJzNbX1xLKzM3XzIlJT9fUlhQL19cOicyQ18pQkhZX1FUQSwvXDAKK00lIi9fNVUhOl9WRUs7T15eTCsnX1ErRyBfVjVFO09dLjQlQ18xREUuX1JIRSlfXEUnQVtfKDFIOl9SLDwKK00nL1xDJyFTXyoiJEFfUiQ6Jk9cSShCK18rQjxHX1MkSipPXEYnUV9fKkIsQ19SVEYpT1xKKTI3XylSKEIKK01fUlRIKi9cSylCO18tIlxPX1JERCkvXEUoIiNfKDFQPF9RXEEnX10sL1NbXy8jNF9fVC1HQy9dNDsoV18KK00jMTBIX1E8NCgvXDclMVtfJiE0QV9RLDAnL1w4JTInXycxSEZfUUg3KS9cPyciR18mMThDX1IgPSpPXFQKK00sQ09fKjJAT19UQSczT1w/J0I3XydBUD9fUSwxJS9cLyMxI18iUEQsX1E8MiYvXSIuI09fJ0EwMF9RQDoKK00lX1w2JVEjXy1DNE5fUiRYLF9dLTdWL18vVCUoX10/KFBfXFIpUltfJyFcRF9TQSIuL11FNjVLXy0yXFMKK01fU0BULU9fKk9LN18pMkxbX1xfJFBfXFYwVTNfRjk+Ol9cVyhSL10gMkVHXy40NTRfVklTPF9dUzwmT18KK00/N14uX1MlIDRfXFQwI19fMVQ0Xl9VOTU4T1xCKyNLXy9EKSRfU0RdL19cXzBUN18vNCUjX1NRITFfXFcKK00uM1NfL0QhI19TIFQvL1xHKzM/XygyMElfUjRHKT9eQkcqI19ZTScvX19PQlc/X1hXXUtfXk4nPF9fV0YKK01YP19aWF1bX14uJzxfX0dCVz9fVFYtS187Nk1NX1I4Rio/XFgtMyNfRFkqMV9SNEMpP1xCKCIrXygxXEEKK01fVS0yNj9cTitUI18pIjxYX1M4Wi8vXS8zNF9fWE0nSV9TMFMuT101NyZDXyghXExfUVA7KE9cQigiR18KK00oMVxIX1IkPyovXFIrQz9fJlFYQ19dIyFRP185Ui0rXzclTUxfVFEvOC9cXy9UQ18qUixGX1JMQCdfXEwKK00pIitfKjIkP19STEMoP1xMKUIzXytSREdfUkRDKD9cRighW18pIVA6X1JURShfXE4pQjNfKzI0Q19SXEgKK00qL1xUK1JfXyhRWD5fUlRIKi9cVSwjI18nQUQ5X1JUSCovXEQnUV9fKSIoRF9YTV4+P10lLVNDXylDMTUKK01fUSg+Ll9cOCYyS18lQSw/X1E4NShPXD4nMktfJkFIRV9RWD4qP1w4JiIvXyUhLDpfUyhRLi9cPydCN18KK00oIVxGX1FYPCdfXD4nIV9fJyFIPV9SPEUqL1xJKVJLXyRRJDRfUiQ/KE9cRikiP18nIUxBX1YpNjRPXyMKK01MSlNfOFZFS19RWFkuT1wqKSI/XydEPSxfVjIlRD9dOj84S19IWlpJX1M4USxfXE0qIltfTUtKUl9cUloKK01PL10nLyQnXyoyPElfXEpeTT9dJDJFS19VPEspX1NBJTVPXitCOFNfUiwvI19UKSw2X1xXMFUrXypDOFUKK01fVFEqMT9eI0E5M18pIlkiX1I4Uiw/XSEvU0NfM1RZO19RTEUsX1xQLSM7XypCWFBfUlxTLT9cRypSV18KK00qMlhUX1JcUS0vXEsrMyNfKzMkWV9SSFAuT1xBKSJHXykiQEZfUzRVLi9fKE5LT19RSzJWX1wmT0w/Xl0KK01KWldfSzleQF9aJjVFT15BRTk7X0Y4Vi5fWS1YP09dKjE0R18tQzBWX1UtLjIvXU47Rk9fJkFEOF9SOEUKK00pL11CODYjXzYlPT5fUkBJLk9cRClTQ18tI0BaX1RBJjIvX0FTXi9fLDJQUF9SKEMqT1xSK0M7XykyIEIKK01fUTAvJF9cPiYxV18sMlBQX1QsXzFfXEgqQl9fUytfJF9dRyhUT104NUZHXzFERTtfVC0jM09cSSgyN18KK00qQVw+X1MwSSovXE4oUitfKlIgP19TIEgpL1xMKVIrXy0iXEpfUkBDJ09cUipCO18sQjxGX1JcRChfXE4KK00oUitfKjIoQl9SSEUpP1w8JVE/XyVRKDJfUVQ4Jk9cPSYhS18nMUA4X1JMRilPXD0lQVdfQTdJU19XOUkKK003L10nLiQvXyxCRFpfUjQ+Ki9cPiZCL18mQURGX1FEOik/XDgmIidfKjJEUl9TJFEuT1xLKyJXXyhSKEEKK01fUiQ/KD9cPycxX18nUVRAX1FQOic/XDclMUNfLTMwWl9RPDQmT1w1JTFDXydSIEFfUlxJKz9cQykiN18KK000VEkkX1g1VjwvXU09J0tfNVkmR19UQihJX1xQPChfXy5GOihfUkhQMU9dUDZFT18tUihHX1IwQSlfXlYKK01LWkdfVCtGWl9WJTQ2P1xPKzJfX1M8JlhfVklLPU9fOlQ9J18wNE06X1UhLjQ/XyBPTCNfMUUhP19TWSoKK002P1w3KFIrXzFEMSFfWDIiRE9cRCszW18rIzRVX1I0Qic/XSsyRT9fKyM1I19TRFwwP1xaL0QjXzE0RSsKK01fUyxZLl9cVy8kJ18sMyxWX1EkMyVPXFEtQ1NfKSI8Ul9SLEYqX1w7KCIjXywjLFRfWy5OS09fNVNMW18KK01WPF8yX10/MFQvX0BULTNfWS0rNl9cJlBNT15SSFo/X1tdNzhfXVszVi9dSzlGQ189Jl1JX1JQTipfXEcKK00pQjdfQDddWl9WTUk5L10mMTRPXyoyTFpfUUg9K09cUS0zP18xNDknX11bMVhfXEgoIktfKCFMP19SJD0KK00pP1xCJzIvXyZRODpfUVw6J09cSChSP18mUUA+X1FENSVfXkVHSVtfVkxfNl9ULSMzT1xcLyRPXzAjSSgKK01fUyRKLD9cRygiI18oUVA8X1JMRCkvXEYnUV9fKyIsQ19TNEwrL1xYK1JfXywiPEdfUyhLKl9cSykiM18KK00pUiBAX1JMRCkvXEsoUj9fJTEgNF9RNDUmL1w7JTFHXychNDxfUVA3Jl9cQCYhT18qUihCX1IsQShfXVIKK007Nj9fMVNUT19aJjNEL18yUT0jXzhFTUdfUUQ6KT9cPigyU18sUyhYX1I0QylPXEAnQidfJ0FQP19SLEAKK00nX1xBJ0FXXygxUEBfUiQ8KE9cRidSO18nQUQ9X1FQOyhPXE8sU09fRkkmOF9ZUkFIP1xWM1RbXzE1XUgKK01fU0hXMS9eM0BYT19OOkpOX1YlOjg/X0RXPj9fP0gmMl9UJSk3P1xOKkMrX0ZZOjpfXF8gTk9cVysjJ18KK00qUkBOX1s6SUkvXl1LSl9fPzcpWV9SQEMoX18lTjsjX0ZZJi1fXEMnU09dLDNFN18lQTA2X1deIUIvXSMKK00zNU9fLkQ5NV9RVEwqL10sM0UvX0NYSjxfUkBSMU9cPyhSN18yRE0sX1FYQCovXEgqU1NfLlNVJF9TMFgKK00uT10iMiRLXy5UJSNfUlhRLU9cTiwzO18qMlBRX1JITSxPXEYqUydfKiJMUF9TMFYuP1xEKTI7X1BLQk0KK01fWz5DRl9fQFI8M19CV0VPX1oiLUE/XltKWkNfOFVNOV9VLSswP19GVS0jX1hMVytfWTorQk9cVS5DS18KK00sU0BdX1IkPic/XjBCSCtfPldFUV9SOEYqP1xFKiMzXypSWF9fVS0yNi9eJUE4K19WLE89X1JYRiwvXFEKK00rIyNfJ1FMQ19RTDcnX1xCJ1I3XycxSEBfUyBNLF9cUSwzS18lUTA6X1M8UCwvX0NVLUdfLlNBJF9TXF8KK00zT1xeLiQ7XyxSUFNfUjg/J19cRygiI18rMjhGX1I4PydfXFYrQydfLEJITV9TOE4sP1xCJkFXXydBPDcKK01fUkhDKF9cSShCK18qMihCX1I0QCkvXD4mUidfJyFEP19RVDooL1xIKFJHXypSOEpfUkxDKU9cTSkiM18KK00pIixCX1Y9RTgvXUY4NU9fKiFUPF9bKkdLT11TOzc3XylCPE5fUVQ8KF9cQicyJ18oIUw/X1FYOSc/XEEKK00nIiNfKFFYRF9SKD0oX1w/JkIjXyZBMDxfUjQ/KF9cQSciI18pQjRMX1JMTy1fXkJGOUdfSVpGTF9XUjkKK01JP108QVlfXzAjTTVfVkUzOi9eT0dKR186JVlBX11TL1NPXi1DSTdfLlRNNV9TPSIwX14uQ1kjX1U8OyAKK01fU1hTLi9cRykiS19GKS4uX1leNERfXjZCSFdfJ0FEO19cOlpMX1xaLCJTX09bWyVfVCUjMk9dPjclW18KK00tIzhdX1NRJzRPXFwyVSdfJ1JEP19UNSgwT141RSlPXyoyXFlfVVE/OS9cOygiN18rQzkgX1FAQiwvXF0KK00xRFNfLSNIXF9UISIxP1w5JVFLXyVRRD5fUlRQLT9cSSsjJ18rQyRWX1IkRisvXEIpMktfK0MgU19TRFoKK00uX15eTSpHX0s5RjFfXisrUU9eLD5HI19GKEFeX1wiVEs/XV88VlNfSik2KV9ePzdVL18uT0wrXzEzSF8KK01fUlxSLV9dITFEO18wVCRcX1hWLUAvXUU5VVtfKkJESF9SVE0uL11XPSg7XzFDXSdfW05RTS9fQVUuO18KK00sQkhUX1I0QCkvXDYkQUtfJjFAP19RXD4pP1w9JyIvXyghXEZfUVg+Kl9cRyoiX185NVk+X11fMFQ/XFcKK00tM1tfLCMgX19UMF4zL10iLlQrXysyOEZfUjQ+J09cRSdBW18oQUw7X1MgSitPXDklIUNfJTEgNF9RPDIKK00lT1w6JEE3XyhBTDtfUkxEKS9cSykiM18tQyRRX1I0PSgvXV48RzdfODVFPF9SMD8oX1xBJyIjXypSLEYKK01fUlxGKU9cRylCN183NiU/X1dSID9PXjpEWS9fK1I0SF9RXDsnP1w5JkFPXydRSDxfUiA6J09cQiciI18KK00nUUQ9X1IsPSg/XDgkUT9fJyE8O19RVDomP100NERfX0NYSixfVF0qM09cPydCN18vNCUpX1U9PDYvXyAKK01QTDdfVF0nQV9bUldSP1xDJyJXXzI0LTFfXTcuVi9fSlc9U19aTTs4X1o+PEo/XSowRTtfLyIsVF9XPU4KK009P18jTSpbXzJUISVfUiQ+KS9dTDpWS18sIkxGX1lOLkM/XEkoUj9fTipWRl9SQD4mT11JOiZfXzEkOS0KK01fUUw/KV9cVzAkW18xRF1AX1NdIjNPXDAjMUtfIjAgMl9SKDcrT1wuIVFHXyoyMFBfUUw7KS9cUS0kI18KK00qIlxdX1IwRis/XDkmMVNfMjRFLF9RMDQlX1w7JzIrXyoyUFFfUlxSLV9cTiwzO18pIkRPX1IsRipfXEYKK00qIk9fLzNYX19bWlRKP15TR1k/X1lMXypfWS4hPV9eLj5XL19QOypNX1ZFPzZfXT40REdfW01fOl9eMzMKK01UX183UixHXzE0ISRfU0RaLl9cQygxW184NV06X1JMUCtPXEkrMk9fMVRFMV9TMFQxX1xUK1NPX1RMOy8KK01fXTMkVi9dJS9EO18oUiBGX1IkPyovXFctVCtfLjNJJV9VLTQ3X1xGKUJfXyoiQFNfUVw/Ki9dKDAkL18KK01XTF8vX1QsXzIvXSMwVStfLyNFJl9UIFswP1xEJyFfXyoyIEBfUyhJKj9cUypCS18mMSw3X1FINSZfXD4KK00mMV9fJzFAPF9RTDMlT1xAJjFHXykxWD5fUkBBKD9cUCoiM19EOEIiX10/KFBfXUo3RUtfKVIoRF9SJDsKK00nX1xIKCIvXywyQEhfUjBCJ19dPjhWL184RjlIX1hKJUE/XTAyJDtfKCFUPF9RXD0nX1xDJyFTXykxVEEKK01fUiQ7J19cRigiM18qQihFX1RdKTFfXjFDSEdfRyk+MV9bMlBKL1xWLDMnXywiTE9fV11eQT9cVC4kI18KK005JjlEX1tOVk5PXzxVTVtfVS0zMV9bVyNPX15LTDsvX1UtJzdfXlM7Vl9fUlctM19OOzZXX1NdMDVPXDUKK00pIjNfPVdBWV9bSk1KL109NFU7XydBUD9fUVQ8Jl9eMEJIQ18xM0RVX1IsPihPXkVGOTNfQEdFWV9SXFEKK00uP1xSLSNTXyszNSVfU0klNU9cKCNSL18pMVRYX1ZJREdPXTEzSSNfLiNBUV9RQDsyT1w6JEJXXytSRF8KK01fUTAxKS9cNyVSK18mISw3X1FMOCdPXEEoMjNfSipCS19STE4sX1xMK0MvXy1DRF5fUlBOLT9cQyoiW18KK00nQiRGX1I0RypPXFMsMy9fUCs6TF9bKj9FX18+UUwvX0RYJVdfWDVUO09eTUZZX187JklMX1gpWz0/X0QKK01VXTtfWFxbLF9bIj9HX15bTEsrXylSNEhfUlxKK09cVCwzI18oIjhIX1VdRjlPXEwtI1tfLEM9KV9TIFAKK00uX18zUl03X1U8R0JfVD0rMz9cRyxTU18lIVhNX1MgUC8/XD4nUktfJkFMRl9SMD0pX1w4JDFDXyYxLDsKK01fUlhHK19fRFU9R18xVCEqX1NUXTMvXFYtRC9fM1RJMF9SSD4pX1xJJyInXysyLD9fUlxDKS9cOiUhQ18KK00oQVBAX1IoPSdfXEooQjdfKVIgQF9SREIoT1xLKSIzXyoyKEJfUzBKKU9dRTlGI19YLS8yX1glTzw/XEUKK00nMiNfKTFUQF9SUEUpP1xKKSIrXypSPEVfVV0/OE9dOTdGL18nITw5X1xCXE4vXEUnQVtfKFIgRl9SKDwKK00oL1w1I0BbXyYxMDhfVkFDOV9cSCdBS19LWiI6X1wmX01fXyROKy9fUCsqT19TNFQsX1xDJ1InXyZRPD8KK01fUzxaMT9dLTQkS19SPC8nX14zN1hPX0ZVXUNfOTVdNV9WQUA3L19DVS1DX1xNXz9fXy89Vl9fJU8sL18KK00vJCUtX1I0RCpfXF4tQzNfNjUtMV9WUUc5X1xBJzFfXzw2PUNfUkxAJ19cRSdSL18nQVREX1kuJ0IvXFEKK00sIz9fMDRRPV9TRF0zL1xcMiRXXyFATEdfVjlDRi9cWS1GO18mISBMX1FMLCdPXD4kIUdfJ1E4PV9RTDkKK00sX103NVgjXzRFKVlfUFwvJ09cRSgiI18rQzBcX1QtITBfXztUTStfKkJEUF9SWE0tL1xWLiQjXypSWFkKK01fUjhKLE9cQSkiR18qUkRMX1NIVS1fXl9MKktfVUwuXV9eVzhVT14+QlgvX0E4IVRfXUMgU19dIDNFP18KK00rQVRDX1c5VkE/XzZRXD9fLiMgU19WXUw8T1xVLSNPXy0zIFJfW05TS19eMEVZI18wNDElX1VJPTovXFMKK00uJEtfK1JMVF9aMj1KP18mUD1HXyxDNFpfUVBAKi9cMyRBX18mUTw5X1EsMyVPXDYlUVtfJyE8Q19RUDcKK00nP1wyI0E7XypCMExfXSMkUV9dMzMlO18wJCEvX1QlITNPXTAyVSdfKyIoRV9STD8oT10sMDQjXy1SUEsKK01fVUEtMy9eN0NYV18tIlRNX1IwPyg/XEYnUV9fKlIwRF9STEQpL1xIKDInXyxCQERfWEYqQS9fQVUtL18KK01CV0VbX1IsOydPXEUnMiNfKlIwRF9SVEcpP1xNKjI/XzgmIUNfVS04Nz9cRyhCM19GWSYtX1IwPSc/XDoKK00lUVdfKFFYQl9ZQixBX15GRllLXzVVITBfUlBAJy9eXkxKW19AOC4hX1peRUovXzpTXTNfLEMgUl9SNEEKK00oX1w/JlIvXy1DRSRfU1hfLj9fKU9bT19YTS80X14vNlQ/XTEzVD9fLyNAVl9cUyFRT19HVi1TX109Xz0KK01fXFMjUk9cWC80R18mUUhBX1MoSiovXFcsMl9fMENUXV9RRDUlX1xBJkFLXykxWD5fUiA8J09cQCcyL18KK00+RylQX1NQXjE/XSc1Vj9fLlQ1M19TRSIwT1w7JUMrXzo1OiRfUTQsJz9cMyUhT18kQFg2X1E4MCYvXDQKK00kMVtfJVE4PV9QSCYlT1xRKlQnXyYxND5fUjQ8Jy9cXzBUT18yND0pX107MVQ/XEAnUjdfK0JUU19TJFMKK00uT1xOLENLXywjNFtfUjRIKz9cUCtDJ18oMVA+X1hNWzxPXyFLOjdfWj0zMF9ZQiU+X11ROzY3X1JbOywKK01fUTxJLV9cRidCQ18nUjRVX1w+X08/XE0qIktfMSNdJV9SVEksP1xYLDMnX0dZNitfWDYkPz9eLUJIR18KK005RjlPX1JITS9PXSUwNEdfUStXJ19dSyNYL1xFJyIvXyYhJDhfUiQwJk9cQSZCJ18mUUxEX1IoSCwvXE0KK00sI09fKTIwSl9SWE0tL101NDVHX1VMUy9fVChbMT9cWy5US180VS1AX1UtLjUvXFAqIjtfKDE0OF9SUEAKK00oP10uMTNfX09bLkxfXVMvUk9dJi9DU18qIihGX1IsOydPXEkoQitfKTFYPl9SREIoT1xTKjI3X0I4SiQKK01fXVsxVC9eQENJI18qIiBDX1I8PyhPXEgoMidfKyI4RF9TIEwqT10/N1YrXzc2KUdfUjRAKE9eUEhJR18KK005NUEzX1o6PkcvXkZHKUNfUFs+UF9ZWjZFL1xIKFI3XypCKEVfVT0oMi9eNERIX19XTSs1X14rM1YvXE8KK00rQldfKSIgQl9SKD4pT1xXLkQ3Xy80ISFfW1JUTE9fOlJcT19YTVs8X1U1OjUvXFUsUzdfOCVFQF9aLjgKK01HP19NVV1DX1NMNyxfU1EhMz9cPCZSK184RUk4X1U1LzM/XDolMTdfKFFcQV9SJD8oP1w8JkFTXydRVD8KK01fUVw9J19dODM0U18yJEUwX1Q5MzkvXSEyJTtfKVFUUF9TVEsrP15LREgnXz1FSTdfVUhdLy9eOD02W18KK01BNiU3X1gxQjdfXEsmIStfRUglX19aPjFEX1w0IUAvXy1SREZfVCkkMy9dKTJET19VPSsxX1FQPig/XEwKK00rMltfL1QpJ19TIFUuX1xMLDM/XykiPExfUVA6Jz9cPCVRR19CJzlMX1wmS0hPX0pVLFNfRTghVF9XPU8KK005P181Tz0rXyYiSFhfUlBFK19cQywjV19JKiI+X1JQSCpPXFwtU1dfK1JAUl9UIFgtT15ARSg3X0BHRVMKK01fWEVdP09dPzZWL18pQkRVX1NMWjAvXlxNW1dfUytTOF9SREosP1w0J1I7XyZRVERfUihCKz9cRSpDO18KK00vJDEuX1EsOigvXEUpIktfKlJIUF9TRFYvL1w/JiFDXy8zRSJfU0xbMk9dKjJFR180VSE2X1JMQyg/XFgKK00rIldfKkFYQV9STEQnT143QlgrX1YsUyVfVUUuMz9cSilCQ18oIUw9X1JIQyhfXEooUi9fKiIkQV9TIEYKK00oT14pQkgzX1dNJzBfWjIyRS9cSCgiL18pUVxCX1JIQyhfXEspMi9fK1JER19WVU47X11AOTZLXylCJEMKK01fWjIxQT9fIEs6N19RW05UX1w2WUwvXyhOWztfSkouQ19SQEUqX1xFKFI7XzFDQFVfWz5QSk9fP1QtI18KK01aTU88X1MwUSwvXEQoIitfJ0FIQl9TPFoxP10mM0UrXzlFWUFfXS8nUk9dWz43T18+R1VeX1c1Wz8/XUgKK005Nk9fS0ouSF9fL0FXT184Uz0zXzI0WTpfUUQ6KD9cSChCI18pQVw/X1I4QSg/XEEnMV9fJyFQP19SID4KK00oP1xBJ1InXydBTDpfVDhXLV9dIS5UL18xVF0/X1U5OzlfXSwzRTdfIzAsLF9STDQnX1xSKDI/XyUwSDcKK01fUiQ0J19cRyVRX18mMFQ2X1IkOihPXDgiUUNfKUFAR19SIDooT142QkhPXzEkKStfVD0oMj9fMVQsX18KK00rIlhRX1RRLjMvXDknIVdfKCI0Sl9TUSExX1xJK0MvXzIkLSdfXVs2Vj9eKT4mT19QOk5CX15HM1JfXjgKK01BJztfP1cxSV9dPltTX1w8K0NDXysiNExfUjhRLy9eMUQoX18qMjhFX1M4UC0vXEkoUk9fMVNcW19ZTisKK00+X14xQUdfX0Q4LiRfVEUkMk9cQikzI18oUixGX1paTEtPXz1TTjtfKVJMU19TTSk2L1xHKlMvXy1DOFMKK01fVCkgLz9cXy5TR18mUSwxX1JQTSlfXE0sUl9fNjYlPV9dNzJUP1xYLjQjXyszIFxfU0hXMS9dSTkmQ18KK00rIihFX1JYRClfXEYnUV9fKUIoQF9TVFwtP183Ulw/XzslTTtfUjg/J19cQSdBV18pUiBAX1JcRilPXE0KK00oMitfLTJAR19YWi5CX18+VD0jX0xaKkJfUkREKS9cRCdRX18qIixDX1JIRSk/XFgsIltfOTY9RV9WKUkKK006P1xCJzInX0Y4UiFfXC5STE9eIz8nO186Nj1CX143NlZPXk1IOitfKjI4RV9SNEAoL1xYLFJXX087Mk4KK01fXTMoUS9fRFctS18uIzRUX1IwQChPXEAnIjNfLEM1IF9TWSUxP18iTFsvX1MrXl5fXl9EWF9dUTpHO18KK00xVS08X1VZPThfXllKWlNfWj1LNF9eNzBVP10lMTUrXyYhSEFfUjA/KD9cRihCM18oUVxBX1IgPCdPXEAKK00nIVtfKDFUP19SKD4oL1w+JkFTXy0yPEhfVE0mMy9dNTgmT180NU1FX1Q9LTc/XEgqIz9fOCVVT19XKU4KK01FL1xDKENHXyQhID9fUFQtJk9cKiIxO18mUURaX1JQRzQ/XFktJTtfJ1IkSF9aPkVIT105NTVbXzBENSYKK01fXTszVE9cSyszI18uI0hYX1M0Vy0vXFItM0tfLCMkXF9SQFAtL18mTktPX1ldQz1fWTVfPU9fKUwqT18KK01ZPFMrX1laJj1fXVs8Nj9fVVwjM19SIFMvX1xBJlIvXytTNF9fVilGOi9cRSlSN18sMlBOX1IkQClfXS4KK00xRDNfQidFTF9YQV09T14xQEgvXzJUMStfUixFKy9cVS0zQ19IOVI8X1wzI1QvXD4nIUdfKFFMP19RPDsKK00mP1w/KTE/Xy9ELFdfU0UiLT9cTS5CV18oUlg7X1IpIis/XUlDWCNfUUw3JF9URSQyT10gL0Q/Xy0yXFcKK01fVCBZLj9cTihCL18pMUw+X1JMRCkvXEUoMV9fKCIwPF9cQyNPT14jPCcjXyxCMEVfUjA9Jz9cRygiI18KK00sUkhKX1JUQShPXFAoUitfQVg+JF9dSy1TL15fS0pbXyoyMERfUjA/J19cTSoiQ18sIkxLX1M4TisvXUUKK005VjdfN1Y5Rl9SLD4oT11WOyYnXzpFVTxfWFIqQF9eLENYR19ZXUM8X1siREk/XE8rIk9fKUIkQV9STEoKK00oX15NSUojX1IrSldfXk9AV19cUStCV18oUVxBX1FMNydfXFAsU1tfLyQtI19bXk5LT15fTCsjX1xON0QKK01fVllIPU9dKTVGJ181RT0+X1sqRko/X0FVPFtfWV0rN19TXF8zL1xAKEJHXykyIEJfUiw/KD9cQydSJ18KK00oIVA+X1IgPCdPXEEnMV9fKEFYQF9RWDonL1xLKFInXzI0TS5fVDkyNl9dOjk2U18xJF06X1NFIzNPXEoKK00sM19fLEMlLl9TIEc4X1xUKkZfXy9TOVxfVU0xRk9cOCU0R185NV4rX1QkXTc/XFkwNE9fRTkyM19VQTQKK003P10sM1UjX1Y9OzVfUyBSLV9cUCwzK18yNE0pX1MgUi4/XFEsQ1dfKVJcU19cLldOL19EVT1LXz9HJUwKK01fXCJLSj9fPFI8R19BRylOX1c9TjlfXzRPPSNfJSI8U19SND8pX1xXMCRbXy4zXSdfUiRDKU9cUCsjM18KK00oMjBPX1RRKDJPXVg6RidfPUZNRF9ZKiFAP10mLzQzXyhSMEtfU1hcL19eVkpaS19PXDMqX1NZKC1fXFYKK00wQy9fK1QgUF9UUUM0L1xZNSQvXyMiRDdfU1k/Mz9cUzNDV18vJUkqX1lCTUg/XzlUPFdfMlQ9L19TMFUKK00wL1xNKkM7XzBTWSBfUjg9Jz9cRSZRW18pUiBAX1I8Qyg/XS4zVENfVDw/I19ZUilCP1xGJzFXXyhBVD0KK01fUjxAKC9cTChSL18rQihDX1MoRSkvXVs+V0NfVVxLKV9cQldNX1xIKFIvXykyIEBfUjxCKE9cSSkiM18KK00rQjhEX1NUXy8/XT05JjNfJ1FIPl9XTVA5P11INjVHX0xKTkVfWU45RS9fRFU9R19NWk5MX1MsUCtfXEcKK00oQitfKDIoO19aWklIX15NR1lTX1k9QzdfUyxOK09cRSgyL18pIiBIX1NEXDFfXFkvQ1tfUCpWTV9aPjYKK01FT19OV11fXzhVVUtfU0EpNU9dIzFUX19KWiJFX14nNFNfX0ZUPTtfLzNVKl9SIEIqP1xIKFI3XylCKEQKK01fUjRBKF9cQidCI18oQVhAX1IoPigvXEInQiNfKEFYQF9SLDslX10xNCRfXy8kNSxfWEIqRD9eK0I4T18KK00yNF0xX1NNJzMvXSAyJStfPidJX19UOSczT1xIK0NDXyciNFNfVFE1NT9dWT5HT19RXCcpX1NEXjJPXisKK01COE9fM1RNNF9UKSUxT18pUUw3XytTIFdfUkRJKy9eOEY5S18vI1kmX1M8WDBfXE8tU09fT0sqU19eKzMKK01WL11XPEZTX1I7WldfXV8yUz9eOUNYT19GSTYvX11bJ1ZPXFUyJTNfKUIgSF9TSSIzL1xOLFNDXzomRUoKK01fVChdMD9cVS0jT180RFEqX1s2SUhPXT02JUNfRCgyJ19TSFUuX1xBKiJbXzBUNShfWkZESS9fJlIsX18KK00rRDRSX1RRTzVfXVVDV0tfKiNcTF9SIEwqX1xRLkMvXy1UMFlfUkBULz9cXzBFM19STCslX14/OFRPXFsKK00uVDNfLyQhL19UTSk2P10mMERLXytCMEdfUlRDKU9cRydBW18sIkhIX1YtPDVPXz5ULFdfSjlCOF9SOEMKK00oT1xBJ0FXXylSIEBfUlhFKT9cTihCL18sMjBDX1QxJS9fXzdSLENfUytOW19SQEMoX1xFKCIjXykhXD8KK01fUjhBKD9cTilSP18qUkRLX1NIXy9fXD8mQVtfO1VdNl9XXU87L14xQigrX0kpXjpfXkM5Vk9eWktKX18KK00rMkhJX1IsPidPXEQpMVtfS1pGQV9ZLidAX19CVT0zXy9DRFlfUiw/KD9cQygiO18xJD0yX1QxKDJPXlwKK01LKkdfRFgqIl9ePzhWL14jPzhPXy1UQTZfVV1COz9ePEUpQ19WTFspX147NFVPXFYtVCtfK0MgV19SQEQKK00pT1xHKFI3XyhBWEBfUiw/KD9cQidCI18oQVhAX1IkPSdfXEMnUidfKiFUPF9UPSMxP10xNCU7X1ArRyAKK01fXks5WF9dPTVGP18vNCk0X1QpKTZfXV09SCNfTTpGUl9ePz1bL100NEY3Xzg2JVBfWFIiQl9fQFRdQ18KK00vI10kX1haMENPXTAzRT9fMEQ1Jl9cWytST1xIKjMjXypSSFBfWEYoQ09cUy0jX18rQyBYX1JYVi5PXyQKK01OK0dfWU07Ol9dJyFOL18zTjpTX1VbPk9fXFJQSy9eOUM4O19WPDM3X1IsUTAvXEUoMkdfKUJMUV9XQVgKK009P149RikrX0QoTitfWCFbPl9eKEA3T185ViE6X1VRPTkvXjVEKTNfKiJITV9TPSMxX1xbMSQzXzlGTUsKK01fXVs7U19cTSpCR18sIlhXX1NAXi5PXV8/SE9fOUQuKl9aLVtLX10lKyRPX0pISl1fV004Ri9fM1BMU18KK01bLUswX1RJJjNfXF4vRE9fNFUpP19TVFwwX1xLKFInXytSLERfUyBEKT9cXi0jI188Rjk/X10/KFBfXkwKK01HOVdfKlIsRl9SIDsnP1xHJ1IrXyxSSEpfUlxEKF9cUSkyI19COD4gX11XK1IvXzJQPCdfKUIkQV9SMD8KK00nX1xIKFIvXypSOEZfUkBDKV9cSSkiQ18pQiRFX1FcOidPXVM4ViNfQyghW19XSVc8T15HSDlfX1g9LzAKK01fXEpfT09cTysiT18pMiBCX1JQSClPXyRNSj9fPTZVSV9ePz5XT1xaLTM3XylSLEVfUjBCKT9dMjU2I18KK00xJD0zX1tKS0k/XVU5VjNfWj1PPF9ZNilET10gMkVDXzclXUpfWi47R09eP0YpQ19aLU82X1QtIzNPXE4KK00sM1NfKkI4SF9SOEIpL1xDJ1InXykiIEJfUig+KC9cQidCI18oIVA+X1IoPigvXDckIUNfKjJYVF9cSyUKK01SX15cTStDX1ctLzNfVSU1OS9cQSozL18wJD0zX1ZRTj0/XjdDSFtfVyxXMl9UWTE3P11MO0c3Xz1WVVAKK01fXVcuVF9dJDFVK19BSE4rX1YlPzovXF4wNCtfUUwnIV9SPEYrP1xLKkMnX0RZJjpfUzxYMF9cVy5DX18KK00pQlBWX1tCS0pPXy1OO09fTVoqNl9cMkhGT15bR0krX1A6NjdfWU4qPk9fNFItP18rQlkhX1IkQypfXFkKK00tMz9fQzdRVl9dSyNNX10hLTM7XylSLEVfViE+Nj9eJEE3X19CKEIrX1kyL0RfXVA8NytfMkUtM19VNToKK002T14nQjhTX1orTz9fWEEuSC9eRjktJ19RWVMyX1VRKDQ/XFUmMy9fMVMgW19TNE4qL14pPzdHX0ZIRjQKK01fXTMoUS9fTVZNM180VF03X1M8VzEvXTQ0ViNfNlVJQV9SSEIoL1xLJ1IjXytSLERfU1RTK19eIz1XI18KK01VLDcgX1wyVU0/XEsoUjtfKCFMPV9SREEpL1xUKlJPXywyOEVfU1BQKl9eKkIoJ19XLEsnX10zI1BfXE4KK00qMkdfKUIkQV9SLD4nT1xKKTI3XylSKEZfUUg1Jj9cQSciI18nITw7X1UxJDA/XjZCSDdfOFYhO19aRkMKK01IP187UzxLX1U8SylfUyROKz9cSChSN18rMkRHX1w2V0ovXT41RStfWS1PO19TUFctX1xHKFI3XycxTD4KK01fVCEjM09cWy9ES19MKiY7X1VdMTNPX0RVTT9fSzomSl9UKS02L10zNVVfXzdFPTdfWCVaPk9fRFVdK18KK00zVF06X1JUUC5fXEQoIitfKTIkQ19SLD8oP1xEKCIrXyhBWEBfUiw/KD9cRihCM18oMVQ/X1JMQyg/XFMKK00sMlNfNzRZLl9aQj5GT183U1xXXzNVLUJfUkxTLz9dIDFVL183JVlFX1heJkFPX0ZVXVNfMjRROF9VKTQKK002X11DNjVTX1ZMTzBfU0hdMi9dXkBYL184NV1IX1RFLDM/Xz5WPUdfK1JYVV9SXE4tP140RElPXy8jVSgKK01fU1UgMT9cTi0jW19NSkZIX1wiTEtPXkpEOEtfSEhBXV9aSjRDL15ZR1kzX0NHXVJfXEsjU19cUCxTW18KK00oUjhHX1hVX0AvXjNAN1dfV0xPJV9USFwvP1w8JUFbXygxXEJfVVE+Nl9dSztWV189JyVQX1ddXj8/XVcKK00/J0tfOVZNSV9VVUA4P19GUT07XztEQUlfXVJVVi9fW1hNV181NEEtX1JEQisvXEkpQytfLTM1IF9XSVMKK005X141QzdXX1JbXlpfXjMwUy9dJzEkS18sUy0gX1NAVzEvXTY1NVNfKjIkP19TKEYpX1xTKVJDXy0iSEYKK01fWSYlP09fOVJMN19ROzpWX1JMQylPXEInMV9fKTFUQF9SWEUpP1xLKCFfXy1CSEVfWCogPj9fMlArV18KK01UTCchX1JERCkvXEUoIiNfKUIkQV9SKD0nP1w8JVFPXyVBJDVfUTwyJU9cOyVBS18xMzRSX1o+O0VPXS4KK00yVDtfSUoiPl9dVy9TL183UyxPXywiVExfUjhBKF9cUitCU19RKzpHX1U1LTI/X0JWPUdfLkM0VV9SOEIKK00pL1w6JiFPXyhSOFFfVCklND9eRkVZJ180RDEhX14nM1UvXldLKy9fLyRBMV9VOTs4P145RFknX0QoRikKK01fXkc8VV9dJjFFJ18uI00mX1I8Qyk/XEcoUjdfKTIkQ19SOEIpL1xNKjJPX0tKSkxfUiw/KD9cSCkiO18KK007NiE1X1gtWzpfXj5BV09fPCYtOF9dSzJUL10zNVY7XyszNF9fVDUsNi9dOjcmL18/NzFUX15HOldfXSUKK00yJTNfM1UlOF9WITY2P18+U10zXzEkPTJfWFozRF9dVDxHT18xNEEpX1xHJFEvXFQsU0tfKyJMUl9ZSjgKK01IP1xTLSNfXy4jTSBfUjBKLS9eS0dJV19LSUo8X1hZXT1fXVA5JVdfMENMVV9ZKiQ+X11bOiYjX1JbXygKK01fVCRfMD9cWCxSW185RU06X1NYXC4/XEorIktfLUMwVl9SID0oX1xWLVNDXz0nQVZfVklNPE9eOUVJN18KK006JjlDX1chVTw/XTQ1RS9fNSU1L19eQztVT107NDQ/X1ktPzJfXisuVV9dPjRFL18tIyRFX1JQSClPXSQKK00uVCtfPkZZRV9YWiU9X18pTytPX1c8RyVfVCRfMD9cUSwzW18xJDExX1RBJzNPXFAqQkNfKkFYP19TLEcKK00qL1xXK0JDX0YoViZfXUMpUS9fM1BMK18qQihFX1IsPigvXEYnQidfKzIwRF9SWEYpL1xWKzI/XztGRUMKK01fXUsoUT9fL09LW18qUjhGX1I0QCgvXEQnUV9fKiIsQ19RMC8kX1w0JCErXyVBJDVfUUAzJV9cUClCK18KK01MSjZAX1QtIS5PXlpMKlNfVFw/I19dUzFUL1xUK1JfXylSKERfU0BULE9eX0xaM18yM1xbX143OVZPXSIKK00vM19fKUIoRF9SIDsnX1xDKUMnXzBELS5fWkI8RV9cVCoiM19XTScwX1w6WU9PXFwyJSdfNUVVQ19ZNjAKK01CX147RSkzX1pdWzlfVSEwNl9cXTAkT18pQiRDX1I8Qyk/XEkpMj9fNUUpNF9WPUI5L10zM1UnXyhRWEIKK01fUkxHKj9cSilCM18xVD0kX1Y9ODcvXiRAOD9fVi0jM19VQUA6T10tNUVXXzIkXTtfVTU6OC9dVDpWT18KK01ZTUc+X1QtJjRPXTQ2VidfMUNZIV9dTy9UT10gMUUjXzwnLVRfVkVIO19dJzJET19HSUo8X1MwVi5fXE0KK00rIytfSUoqS19TOFkxL1xPLEM/XytDMF5fWV4yRD9eUUdaJ186VV06X1VRNzQ/XUg6Ni9fO0ZJQl9XVUsKK005X18jTEtDX1VMUyhfXSZfTy9dVjg1X19KSiZBX1IwQyo/XF8tU09fKUIwQV9YTi5CL11HOyZLXzQ1NT0KK01fVyVQO19dXj8nP181VUU2X1UhMTJfXTM0NEdfWF0vKl9WPTg0X19BVE0rX1k9IytfVlFAOD9cUSpDJ18KK00uMyxbX1NQWDA/XitAR09fP0c1Tl9bWlJLP19AUywzXzM0OS1fU0xdMy9dKTJVS18uQzhfX1MgSCpfXEwKK00pMjdfK1JIRV9SXEopL14vQlgvX1M8JlpfXSsgTz9cTikyN18pIVw/X1JEQihPXEooUi9fKiIkQV9SPEQKK00nX11ENlU3X1BLLk5fXFMgTl9cTSkyL18pQVw/X1IwPSc/XEooUi9fKFFEQ19SLDwnL1xAJjInXyoiJEsKK01fUVxEKC9eXUlKJ18+V01QX1wiS0lfXyZQO1NfVl0vMV9TME0rP1xEJ1InXy8zNFNfWkpERS9dNTI0N18KK01ZXUM5X1RJJDIvXEkoUj9fKEFQQF9SID4pX1xNK1MzX0IoNiRfVCBaLE9fQlUtJ19SO0MgX1RNNDhPXSQKK00yNTdfRTheLV9aLjxHL19GVS0jXzclNUFfU0hbMU9cTSlST18sIkhOX1pKRUlfXFstQztfQVdNXF9ZTjIKK01GP1xBJzI3XyhBUEBfUiw9Jl9cSysyS18tUlhOX1IgOydfXzBRPEtfNVYlRV9UTTc3T10pNCVTXzRVTT8KK01fVlVIOi9fPlRdQ18wJC0vX1NdKzUvXFQsQzNfUzw7Jl9TUSEzP10qMVQ7XzgmJUJfVC0oMz9dMDJUX18KK00rMyRTX1JUTSwvXkpJKlNfMDQ1LV9TTSAxP1xJLDNPXzZFKTBfXSMkUT9eKkM4W18/V14iX1lePUlPXTYKK003Ni9fK0M8Xl9TTF0wT1xOKVI/XywyQEhfWzJHSE9cSikyP18oIiBJX1RRJzI/XidBJ0dfSToyOV9WPUwKK006L11MPSdDXzhXOV5fWDooQz9eIkBHX18xVDUiX1VJNTQvXzhSK1tfPDYpPF9dVy9TL19GVExLXz1WSUkKK01fUzRNLD9cXy4jX18wU1UlX1Y9QDZPXU45VidfSyoqPl9dWytRP11NOUZbXzBUMTVfVTk3Oi9dJzBEW18KK00rMjRIX1JURilPXEspQidfLUMkS19WUUg4L18pTzs7X1UsKl9fUkxCKE9cRCdRX18pQVw/X1JURilPXEoKK00oUi9fKzI8RV9USSIvT1xKKCFTX1JbXltfUkxCKE9cRCcxV18oQUw7X1JMRCkvXEUlUV9fKFFMN19SKDsKK00oT1xOKUJHXygiJDpfXFpSS09dUzxGP19QWkZGX1tCU0tPXz1VPS9fLUJcT19SLD4oL1xfLVM3X0U4XV8KK01fVyFEOC9fOlJcU185NV1DX1JEQylfXEMnMidfKCFYR19TVF8xL10lMEQnX006XkdfXUMqUV9fMVAsQ18KK00wNEk4X1UxOTk/XjBCSENfSClGOV9eLzFTP11XPCdTXzFEPTJfUkBDKT9cSikyP19LKjZFX1kyLEJPXisKK00/R1dfRykmNl9SNEApT1xKKEI3Xz9XMVNfVUk8Nk9fJE87V19NSy5SX1tSTk1PXS01NV9fMERROl9URS4KK004L10nM0UzXzw2UUxfXis3Vy9dLDNVT18uNDUuX1gyIkEvXzpUXS9fLjNZKl9TVF4vX103NjVTXy8zXSYKK01fUkBHKz9cNCYhS18pIjBHX1tOVU8/XSIxRFtfMDQ5K19TJFkwX14xQjg/X1ddLzRfVT1JPV9cVzM2L18KK00pU1E1X1MhJTc/XSg3JyNfJVIkT19RVD8oT1xGKTIzXzQkNSpfUyBHK09cPyZBW19JOV43X1siRUdPXi4KK01BWCdfOzZdTV9WWVY+T102OihTXzIlJUJfVSE6Ml9dLDMkR180VFkuX10/KE5fXVo7Ji9fVjxXJl9eNzIKK01SL14gPEZfXypCJEFfVCRZLz9dKTBER186Ri09X1Y9Qjc/XS8xVDdfVFwyX19WJTw4L1xZLyQ/XzhWOVIKK01fVC0gMU9cTilSP18qUjBEX1JYSSkvXEgoUVdfPFZdR19bVlFKT182USwnXypSKEJfUiQ8Jy9cQychU18KK00qQixDX1JMRCkvXFMqQktfKDFQPF9SMD8nX18sUCwnXysyMERfUjQ+J09cRygiI18qIiRBX1JAPScvXEIKK00oMUtfJUE4Q19SREUrP1w8JzE/X1JKVklfVy1QOT9fLEwqV19MKkJEX11fN1U/XFYrUl9fKSFcQV9TIEgKK00pT11YPEYrX0EnQVRfXVsvVC9dTDlGS18qIihGX1I4QCkvXD0mUjNfL0QhJV9TUFkuL15VS1o/X1g9LzAKK01fXTckUy9dLDU2L18xJEU1X1gxXj8vXipAWC9fVUwzIF9YSiNDX10nMiUvXysiQEpfUlxIKi9eT0kqL18KK01KWVY6X1g9Vz0vXkJFST9fK1JETV9STEMoP15KREk3XzQ0RSxfXE5fUC9eX0wrI19OKj5NX1VBQTlfXSsKK001ViNfL1Q5NF9UPS80X10yMzRXX1ctJzZfVS02OE9dIzNVQ19BKCokX10zLVM/XF0wRFtfJzIsRV9SXFEKK00tT10vM1VDXylCPE5fU0kgME9cSCoiT19PS0MgX1RJLjVPXFItU1NfLDNFI19XVVU8X185UzxbXy0kLTAKK01fUjxbM19dITUmU18sM102X1YlQjxfXEMnIjtfK0I0RV9SQEEoP11ANiVTXyxCSE5fXEsiT09eQkVZI18KK01CSEIjX1RdMzQ/XF0wRCtfPFdNXV9TSSs2P11BOCY7XzY1UTBfVSEuMV9dQzZVJ19UTDpXX1ZFPTUvXzcKK01SLCtfWExfJV9YNVc9L1xMKFIvXyxSTE5fVDRfMF9dSDhVW18sMlRLX1I0PidPXzZSPDNfQUguIl9VSUAKK004T14vRVlPXzhGLURfUkxGKU9cTilSP18rMjRBX1JMRig/XUE3NTdfSFk+MF9dMyJPX1xJKCIjXyhBVD0KK01fUjA9Jz9cSykiM18rUkBIX1JYRSk/XEInQVNfM1RVKF9cTyBPX1xNKSIzXyhRUDxfUkxEKS9cTSlCO18KK00oMTQ+X1U1ODhfXEApJSdfLVMhP19RWDwnX18nSlo/XzxGSUBfXD5NSk9eNENYS19XLScwX1NATytfXEQKK00nUidfKkIoQF9VVTYyL11WOkY3X1ZcUy1fWDVdQC9cSChCO18oIUg+X1FEOShPXF4vVDtfLjNAV19bNk8KK01JX18zUUwnX1YsPy1fVC0tNi9dJTJVN18/RzlUX1VFNDUvXyhOOzNfQjguK19UXTI3P1xFKFI3XysiPEcKK01fWkY9Rj9eU0kpX19GSE4mX1pOPUdPXEQnIV9fKzI4Rl9TJEYqX10iMjRHX0dKKkBfWlZLSU9dQjZFQ18KK00zJUE3X1Q1MTVPXSEyJTNfMyUxOF9UKF8vT19FVj1TXzFERTVfVCksNU9dSzo2T19STC8jX1NAXTI/XEoKK00sMz9fJDEoOV9UQSg0P10pMlUrXzA0PSlfUkhKKz9eV0w7R18vJCEoX1JQUS1PXFAtQ1tfPlc1U19dSy4KK01TX1xDKTJLXyciJEdfVS02OE9cSSkjI18oQVRBX1IoQCc/XEQoQVdfKEI8RV9VSTk2L11NOTYvX1c9JywKK01fWypISS9dLDRVL18sQ1hdX1hGMEQvXT44NjtfPDdBTF9ZKig/T14yQUgnXz9HLUxfWlpCRF9fLFFbT18KK003JSUqX1o6MkNPX0FSPCNfRjhCKF9TJEkrL1xYLTNPXzEjVSVfUjhBKD9cQCdRW18rQlBOX1teVkwvXigKK01AWC9fLyQpJF9WOVI9T11PPDdDXytSSEpfUyRGKT9cSyghX18pIiA+X1VNOTRPXSIuMy9fVCwqX19TIEgKK00pT1xCJlFPXykxWD5fUyBJKj9cSCgyJ18qQixDX1JcSSg/XjBCN09fUjtWWF9STEQpL1xCJzFXXyoiLEMKK01fUkREKS9cSyhCR182Jik/X1IgSTYvXFwvJj9fJyFYPF9bVkhIX11CNERHX01aSkVfVzFROy9fPVMsU18KK00vQzRVX1IsQShfXEgoIi9fL0NAVl9TTFQrT11HNlVTX0UoTitfUkxEKS9cPiYxX18mQUhDX1NRIDIvXFwKK00uQ1NfSVlONl9cPllML187UjxXXzIlITpfVEUwN09dLzFUT18oQiRHX1UhJS9PXiE+V19fMEQpL19RVDsKK00nT1xHJzIjX0lJQjVfXSclT09eSkZJP19NSj5HX1MkSCovXEcoUjdfLUNQXl9UUTA0T104NSU7X0lJWjwKK01fUzRaLU9cQipST18yJSU4X1Q5Lzc/XTA0NVNfQVhGLF9eLzRWL10yNCYjXy1UJStfVV1AOD9eXk5bS18KK00tQ0UlX1JASy1fXF8wNEdfMURBL19UNSgzP10oM0UjXyoyRExfWlZJTD9dKTI1K18sM0BeX1MkVS1fXSsKK00yNDtfUlwrIl9SNEAoT1xCJkFXX046VlBfUkBDKT9cQCcyL18nIUxBX1E4NiY/XEUqIkdfTFpSRl9dQysKK01RT19CVU0rX05bPlVfVCknMV9dUD1HK180RUE0X1NEXjBfX0NVXS9fW11TNF9eUzlUP19TWC1DX15ePz8KK01fXDJbTT9dJS5TP18+RlFJX10yXk0/XjpCSD9fKzI4Rl9TXF0wL1xWK1M7XychVD5fU1BbLk9eNEQoW18KK01MOjZAX1chSDsvXEcpUzNfMERBOF9WOUQ9L1xFJzIjXytCLEJfUlRCKD9cRSgxX18pMiw+X1IgOCUvXy8KK01QTCdfKzI4Rl9RXDgmL1xCJlFPXyoyKEJfUlxIKi9cTSlCO18sIkhCX1kuLD9PXyxQK09fKlIwRF9SKD0KK00nP1xFKCIjXysyQEhfUkxCKE9dPzklW183RjVTX1VJOjk/XDsmMTNfUEpWSF9UPFksL15GRzk/Xzg1XToKK01fXVstUz9dJC5TT18oQiBCX1FYOSc/XE4qUktfLEJYTF9XPU88T15CRjlHXysyOEZfUiQ8KE9cPidCP18KK00wND0xX1Q9JzJPXjtEOFdfTTpGQl9dSyhST10yNkYzXzEkUUBfUVw+Kl9cNiZSI180VFEmX1Y1PzlfXEkKK00pIyNfKkIoRl9TQEkrP15MRVk3X1Y8QyJfWT4lQE9dWTpGS18qUihCX1I8Qyk/XE8sQz9fM0UlNl9TPFcKK00uT14mQDgvXychXEBfUFw1JV9dKzQ1R18wJD0zX1Q9KDRfXilCWFtfVlxTMF9UNSM0X1xXMDRPXyhCLEQKK01fU0BVLS9cTCtTT18vNCEsX1QpJDMvXSwzRTdfMlRZM19UKSgyT1xFKTJDX0w6VlVfVCUhMk9cTyxTT18KK00tQ0ReX1RFKzI/XjBCWFdfKDFUP19SXEgqL1xYK1JfXzBDVF1fVEEmMi9dSjk2N19EOEYnX1pGPUY/X0sKK01XLTtfVTxDI19VSTAzL11TOzZPXzomPUZfVF00NE9cXjFEL18zRSkwX1w+Uks/X1hXPTtfXj1bN19fW0MKK01XL19dWS1XX1ArKlNfUkxDKU9cQSZRR19LOUowX1o+OERfXFAqQkNfMDQgX19TOFEsX10lMlRXXzEkQSYKK01fWSYoQE9eOkMoR19DSC4oX1JQSi5PXSQxNVNfPDZVXV9STEMpT1xNKEInXywiNERfUVg6Ji9cPichP18KK00mQTAyX1xCX09fXEcoQjNfKEFUPV9SJDomT1xHKCIjXypSMERfUlhHKV9cTSlRX19BWCFSX1xfI09PXEgKK00oMidfKCFMO19SOEEoP1xGKDInXylCMEFfVVFAN09dRzsmS185Ji1CX1IoPicvXl1KKi9fLVJUQ19ZVjgKK01ET1xdLlM7X1dMVy1fViU4Ni9cQygyL18qIixFX1M4UytPXiA+VzdfMyQxIF9aSkJIL1xKKFIvXyghTEEKK01fUUQ5KE9cXTElI18vM1klX1heJ0E/XTkzNEdfWCxbMl9UMSw1T10gMiVDXytCRE9fVEkmMi9eIT4nK18KK00oMiRMX1M0Ui9PXEgoUjdfLDI8Sl9aJjFDT18gTDpPX0opOjNfWzZGSU9cTChSL18pQihEX1M8WTAvXS4KK000JT9fJiFIP19UWS40P1w+KCI3XzAkLShfVFEwNi9cWzA0T18zRSE4X1ZJTDtfXzRRPEdfLlNFKV9SRFMKK00vP10nMiRHXztWUUtfUjRILS9cUy1EK18vRCEoX1VRPjk/XSszRS9fLSNIXF9RUDwnX14+RkorXzFEOS8KK01fUlBPLl9cTiwjP18sMzBVX1RNKjQvXktJKjNfVlxbLV9eRzhWL19LV01XX1hNMzFfW15NSj9eNUEnW18KK009VjE8X14/MlM/X01WXT9fVFxPJ19dOytST18zU1xXXy9UKSNfVl1RO19fSlZdO19ePVs3X19fRFc/X18KK01ZPVtfX143Pl9fX0dYL15CRDk/XyhRTD9fUUQ0JS9eLD5WW19JKTIrX1I0QCgvXF4uU0tfMSNcX19TPSEKK00xP10kMjQ3X0NILVxfWF4hP09eSUgqI18vU1EoX1NZIDU/XTg0RiNfK0I8R19SVEEoT1xNKEInXypCNEAKK01fUVA6JT9dRzhFV19SW18gX1JIRSlfXEEnIVtfJ1FAOF9SPEAoL1xSKlJPXysiNEVfUlBIKC9eIT8nI18KK01RW05WX1JEQihPXEEnIVNfKFFYPl9SWEkqP1xIKiI3XzgmKUVfVjVLOV9dRDkmP18oQVQ9X1wqTklPXF8KK00tIldfQFgpW19RTDwlT186UlxTXzxGOUdfUkRFKV9cUCoiM180REkgX1dJUThfXTozVENfS1oyQ19TJEwKK00rL1w8JVFXXysiSFNfU0UjMz9cSSpDJ18/VzlWX1I4QCdPXzZSPFtfMkRVOF9UNSg0X14nPydPXzdFQTYKK01fUkBAJ09dLDNVS18uQ1EkX1FYOicvXEspQkNfRzkqMV9bKkdIL15cSko7X086Wk5fUlBDKF9cRihCM18KK00tMzhdX1U5ODgvXEAoQkdfJyFYQ19YUi1FL10qMyUvXzAkJShfVjlHPE9dJjI1M187RyFTX1peQ0kvXSUKK00wVS9fKiMgWl9WQUo7P1xaLiNPXykyQFRfUjhJLT9dIDBES181RUE/X1QtJTJPXFcvM19fKzJUUF9WRUUKK007P1xfMCQ/XywjJFxfUzRXL09dJjJEU18rUyRWX1dZUjtPXkBCWEdfVDtGVl9XNUI3L184Uk0rXzYkWTgKK01fUkBBKl9cQCZSJ19aPTMyX14nL1JfXSUvQ0NfM0Q5Il9UVS0yT11dPydPX1csXy5fX0M5VF9fX1o+J18KK01fXjs/X19fR1gvX19ZTV9fXz4zPV9ZUiRDP1xKJkIrXzAzTFlfV1VMN09dWzpWJ18pIVxDX1QkWS1fXSIKK00uQ0NfK1NAXl9TKFUtT14rQEdPXz42UUdfW1pUTC9cVi0zU18zVSlEX1RRKDYvXEsoUjtfKlIkRF9SXEMKK00pL1xMKDFLXypCMDxfV0FQOU9fMlFcI18sQkBLX1IgOidPXEEmMVNfK1I4Rl9SWEMoT1xOKTI3XylSLEEKK01fVk1KN19eWEtaR18qIiRBX1IkPCdPXEMnQVtfKyJARl9SUEMoX11COFYzXzhGTUtfViVEOT9cQCdBT18KK01OSkY7X1I0PSZfXVc+J0dfJiE8Nl9cMl1PP140QUg/XyoiID5fUjg+Jk9dOzQ0P185NVEuX1YpPjVPXlkKK01LKk9fKlJISV9SOD8pT1w5JTFbXy4kJShfUjxGKz9cUCpCW18pQkBGX1dNUzw/XF8uVDNfLTNNK19VMTUKK003L10vNDUzXzE0TTNfVFEyNy9cWi40I18nQUA8X1JMQylPXlFJWi9fSilWNl9bQkRHL15XSVozXysyKEcKK01fUjQ/KF9cUCtTN18zRF02X1IwRitPXUw7V0tfNzVZSV9VOT85P101NDVHXy1TNSVfVCEqNj9cVy8jU18KK00rMkxGX1NdIDJfXEcrU19fK1M5JF9TJFYwT1w8J0JXXyZBVEhfVDEmM09cXC9EL18tMzRYX1NQXzEvXEUKK00pIktfKkI8TV9TXSExT1xULiQjXy1DQF9fU0BaL19cRilCR19IKTonX1w2TUpPX0dULC9fSFktX19dLycKK01SL1xeLVNfXykxXEdfUkRCKE9fS1RdO19VPC8lX1QsXzA/XUg6RldfNFVVQV9bNlFLX19YWD1TX18uN0AKK01fX19HV09fX1k9U19fXjs9X19fRFc/X19aLidfTVlWQF9TJD8oP10pLzNHXz1GJTVfV11NOF9cQicyJ18KK00tQlhMX1NcVy0/XEQpQldfKSIoRF9XVVk8P11NODVTX0sqIjxfUyhOLU9dNjZWV18yNEU4X1MkTCtPXEgKK00nQidfLCIwRV9TLEgoP1xOKiIjXzs2NTtfXEZeTV9cUyoyU18oIUg+X1IkOScvXFApUj9fK1IwQ19SXEYKK00pT1xBJzFPXzdVWTNfWFolP19cRygiI18oUVhAX1FcOiZPXEopQjNfKzIwRF9VRTo2X106OFYvXzo2UU0KK01fUVg9KF9eUUk5W18nUTw6X1M8Vy5PXSMwI09fTzs2U19aLjdGL1xKKEI3XyoyLEFfVTUsMT9dLjFTT18KK007Nk1EX1w6WU4vXE4rMlNfKCFEQF9SREUrT10wMyVTXytCWFdfUTQ9Jj9dJC9TR187JiE8X1NAUy4/XSkKK000JVtfMTRZPF9UJSYzL10iMiUrXy9ENTFfVCEkMy9cPSZRV18pMVg+X1siREdfXjxDKC9fTSoiOF9bLkMKK01IL1xJJ0IvXykhWEJfUzhVLl9dNTVVW18qUyRZX1VZRjwvXT84Jk9fNzY5TF9VRTU3P1xPKzNXXy4kKSwKK01fU0RdLl9eSEo6L18pIkxRX1FYSC8/XEYrNCdfJzIoTl9RVEIpX1xQLUNDXy4zUSFfUUQ7J09cOiZBV18KK00tU0hfX1JISStfXEInUjdfLkNRIV9STE8tX1xSLSNPXytTJFZfUzxXLk9ePERYK19RSlZIX15DMFA/XkQKK01EV1NfUyteXl9TTFQuX1xBJ1JDXylCJEdfXjcwUy9fL1A7W182RVE/X1NEXS9fXiA+N0dfXD4jOl9fT0IKK01VP19fWS1HX19eN0FfX19DV19fX1k9W19fXjc8X19XRFc/XkZEOFdfK0IoPl9TXFgsT11ENDQ3Xz1GOTwKK01fUUg1Jj9dIC4jO18sIkBGX1JERSs/XEUoUjdfOiZBP19VTTIzL15YSko/XywiSFJfVFkxOF9dJjIlP18KK00sIkxNX1JMQSkvXFQqIkdfLCI0Pl9SQEImT14tQTdPX1FLTlRfUlhEKV9cPyYxV18nUTw6X1JQQyhfXE0KK00oQidfKyIsQ19SOEIoL1xaLjJbXzdVOTBfUjg/J19cPyZBU18qIixDX1IgPCZPXE0pIjNfNFUxNV9VWUcKK005X11COTY7XyghVENfWko5RF9cWCpSS182RTEyX1clSzhfXlRKSjtfSVlOPF9SOEApL1xGKFIrXzY1KSwKK01fVCxdLF9dVj0mX19SW1pdX1JESClfXEEmQidfKCFQRV9TRF4yT10gMEQ3X0BIIVhfWUIuQk9cQCcyL18KK002RVFEX1RBLzZfXS01VjdfMDQ1LV9ULSY0T10sNUYzXzM1NT9fUiBBKE9cTyoyP19KOVY2X1oqLEBfXkwKK01FSFtfSFkuMF9SRD4oX1xEJ0IrXypCUFFfVEUwNU9dKzUlT18yVTU/X1UhMTcvXTw5Nk9fTVsuW19UJF8KK00zX1xJK1NHX0VZLjtfUig/KT9cSy00I18pQlheX1FIPis/XEEoIjtfQTgiIF9UWTI0L1xVLkNDXyYxTD4KK01fU0RYL09dITEkR18nQVRDX1M0Ui4vXEEoUkNfKiJQVF9SNEcrT1xcL0QvXy9DWSFfWUYvPl9fIUlJX18KK01ZLE5aX1lGJjtPXzNQW0tfRUhCKV9TLE0sP1xHKEIzX1ldKyZfXDpdTV9dLzVVT184Nj1JX14nLFQ/X1YKK01XTU9fX04/O19fX0hXX19bV01XX1BaNkdfX1NAVy9fX1ldW19fXjs/X1suREdPXEYnQUtfLjMwTl9VPSoKK00vP11ROFVLXyYhKDZfUyhJKj9cRicxV18qIiRJX1FUOSZfXSszJDdfNDRBIV9cQlZMX1xIJ0I/Xzg2MVUKK01fVDUoNS9cWCxTL18pUVRAX1MsRypPXFMqIidfKlI0PV9WWUU3T15fTSpXXyxCRElfUiQ8J09cPyVRS18KK00qUihCX1MkRik/XEooMidfKVIkP19SSEgoL1xfLiMrXyghQDtfUiA7Jz9cRyhCK18pMiQ/X1JIQyhfXS8KK000JSdfNzY5Rl9WJUQ5P1xDJ0IrX0lZMipfVlk9NV9dPDQkP188Jjk7X1pKPkY/XlNJOjtfKVIoRl9SMEAKK00oT10pMSNfXyxCVEdfVy1RO09fK1ArX18rIkRIX1IsPSg/XEEnMjdfKFJcVl9TSFwuT11KNzVDXyhRWEAKK01fVDEpNT9dIzJFO18wNEUzX1QtLTYvXS80RVdfMlUhPF9UTTU5L10sNVYrXygyMEVfUlRIKF9eR0VYW18KK01OSjY5X1o2L0FfXSQtQy9fKVFUQF9SOEApL1xOK0MnXy8kLSlfVD0wNV9dQzlWX19ISipLX1UxPTkvXE4KK00qUydfLTMxIV9TNFoxT1w6JiJDXy4zPSdfUkhSME9cPCgiQ18oIiBDX1hSKEFPXUc2VTtfQkhaJl9YOisKK01BX11cPydfXy1TRF5fVFkxNU9cOycyK18qQjxNX1M4WC8/XD8oUk9fKzMoWF9TLFUuT1xfL1QrX0FXSUcKK01fW1pDRi9fNk5aS19AVyE4X1w2TUkvXkFESFdfLDJISl9SSEMoX19JUzxfX1FbSydfUzBZNE9cXy9VM18KK000JDE9X1VFMzlfXUA3JlNfOlY9V19XTUY8T14uPUdPX18uKz9fX19IVz9fX1pOJ19IWSoyX1JAPCc/XFgKK00sIltfMiNYVF9WOTo1P1w7JEErXypSLEZfUiw9KD9cSykyR18oQVhAX1NYWy1PXSMtUyNfUks2U19SWEYKK00qT10tM0VHXzlWMVBfUyRJKT9cTyhSM18qQVBEX1JMQicvXEUnQUNfOyYtPF9bLkhIP1xWKzJXXydRSDwKK01fUVA0JV9cTSkiM18rMihBX1JURCkvXEUnQVtfKDFYOV9STEooX1w2JEEzXydBRD1fUkRBKS9cRicxV18KK00qIjBCX1NdIS9fXUA6NkdfOFY9SV9SID4oP15AQzgnXzglISZfU0RNKU9dPzU0T19EKDFfX1s2SElfXEYKK00nQidfKUFQP19TNFAsT1xOKyJbXzg1VT9fXD5eT09cTikyN18oUVhAX1IkPyhPXDsnMitfLUM8Xl9UVTEKK002P1xeMSRbXytDKFpfVEUvNj9dIjI1N18xNFk8X1QhKjU/XSY0JU9fL0RBM19URTM3T1xBKFJDXyoyJD0KK01fWkI4Q09eWEk5T186RUk3X1g1WD1fXEImUU9fKSIoRF9SQEMoX1xULjNfXzBEQTJfWyJHSV9eRUgqI18KK00yNFk6X1RVKzM/XFguRCtfKDJMWl9TQSM1L1xILDQrXycxVEhfUkREKi9eQUc5T182JS0nX1o+PEQ/XikKK01CN1tfNzVNOF9dPzFWP1xZLyQnXzJUWTNfUiRDKi9cTStTM18rMlxUX1JITi1PXEssIztfLiNNIF9TXSEKK00xL11LN1UjX0s5QiZfW0pCRF9dQzREM19MWVI9X1JcQylPXEAoMitfKUIkQ19eUzBUX15bS0svXzlXKVkKK01fVD0oM19fRlYuI19aPUdBX15LOlhPX0ZVTVtfWU1HRF9dUyxVL19aWT4nX19eQztfX19GVl9eQ0UpN18KK00oUUQ8X1JcSCovXSAtUyNfOCU5Ml9RSDEkP1xGJ0InXyghSD5fUjA+KE9cPiZBU18rMkxIX1IsOyVfXyIKK01MWldfLjM0U19UKSczL11MPCcrXy1CWExfUlhCKF9cUSkyQ18sUkhEX1IwPSVfXFEqIidfRFhCIV9TRFAKK00sL1xBJyFbXydRPDpfUkhBKD9cUCkyM18rUjhGX1I0PidPXDglIStfJyFIN19RNDAlL1w7JUFLXylBWEEKK01fUkA/J19cSilCM18xND0lX1YtTDsvXUA5JjtfKCFcRV9YSVg7T10wMENHXypRXDtfVDRbLD9dVTo2M18KK01OSlZMX1JEQSkvXEYmUitfK1JAT19RUD4oP1wvJEEvXzQ0TSlfUkRAKC9cQSchW18oIVhBX1FMPShPXEkKK00qQydfLyQhKF9UOSw1T1xNLDNHXzZGIUpfU10mNE9dKTRGI18zNT1CX1QtLTYvXSIzJT9fNDVNRl9SJEMKK00qL1xKKEIjX0kpOi1fVEhcLF9eKT9HV18mIFwvX1IwPyg/XEEnIiNfNCQ9J19UKSQyP10lMlUvXzlVXT0KK01fVylNOz9cXTBEW18rUlRPX1NdITI/XSU0RjdfKyM5JV9SQEgsP10xMiRDX00rIk5fVjE7NS9eXUspX18KK01IWF4nX1U9ODQ/XUg7NkdfT1tXIF9TKFQuP10vNDU7XygyLEhfUyBSLV9cSyszK18oMixLX1JUTy1PXFoKK00vJCdfLUM4WV9WMTs1L14jPFZHXz9GWUVfV1FROk9cTigiJ18pMVRAX1IsQShfXEgoUjdfXC07M19cNlgKK01NX103NzVfXyxCVE1fX0c9Vj9fX1g9T19fXic7X19fQlcvX19ZTV9fX147Ql9fX0pYX19fWj4jX19eNz4KK01fWiIxRT9cQiZBW18qMjBGX1MoSyk/XTczNEdfJyEsM19SND0oL1w+JiFTXydBODpfUUw3Jj9cRCkyO18KK00nQUQ7X1tWUEpfXFErUlNfNjYlRV9YKidDL1xYLCMvXy0iQElfUlxEKF9cUSoiK18nQTgyX1QoWSxPXTMKK00yJCdfKlIoQl9SKD0nX1w+JUFHXypCJEFfUkg/J09cSyhSJ18pMVg+X1EwLyQ/XDckQTtfJTEgNl9RMC8KK00kX1xFJzIjXypSKEJfUkxHKT9cSisiS185VyFQX1ZFTTtfXD8nQjdfPyZRQ19VSS4xX1xRKUI3XzEjTFQKK01fVVEwMl9fIk07M18rIjBHX1I4PSkvXEMnMidfKjI8RF9XUVU7X11OOSYjXygxQDhfUVQ4Jk9cOCVBR18KK00nIVhDX1E4NydPXSAxJFNfNDU9QV9SKEYrT10sNEVTXy9UOTJfVD0wN09cXTFVK18xNF06X1QxLjY/XSkKK000VVtfKVI0Tl9SRD0nT104MyQ3X0EnTVVfUVg5Jj9cRyhSN18oUVhCX1IkPChPXVA4NidfQ0hGLV9UJSYKK00zL109NiUvX0hZXj1fU1EhMz9cTysyX18uQ1EkX1Q1LjcvXEoqUytfOCVJOF9aQj1HL107NUUjX1ArLkgKK01fWjYyQU9eL0BXS18wREkmX1UtOzVfXVA8RyNfLUM8Xl9UWS81T1xIKkJfXy5DUSFfUlBOLF9cPigiQ18KK00oIiRIX1NMWjAvXEQoQjdfJ0FIOF9UKFotT10wMTQzXygxVD9fUjRBKF9cQidCI18oUVxBX1I4QikvX0kKK01VLSNfSFlWO19WUVQ9T10yMzRfX109Xz1fX0tBWC9fW1hOJ19fTjdEX19fSVhPX19aPitfX15LQl9fX0sKK01ZT19fWl47X0U4Qi1fUiQ4J19cQSciI18qQjRAX1RJIjAvXDUjQFtfKSFQP19RVDcmX1xAJiFPXydBTDoKK01fUkBEKU9dMzMkU19NKj5GX1MoUCxPXUE6JltfMkRdNV9SXEcqX1xTKiI/XytCMEBfUlxFKD9cOyUxL18KK00rQkBAX1NcVys/XDskUSdfKjIwRl9RWDkmX1xLKEIrXywyOEVfUkRAKC9cSCgiL18lQSA0X1FQNidPXDMKK00jQTNfJSBcM19SJDwnT1xFJ0FbXypCNEVfU0BaLi9dSTxHK184Vj1JX1FMOig/XU44RUdfODU1MF9TIEcKK00pX1xbLVJfXy1SWEdfXD5ZTU9cUSoyU18pMiBCX1NMViw/XitAR09fOjVFL19RVDEjP1xJKCIjXypCNEcKK01fUzBSLT9cNyYxW18pIjRMX1RFLTU/XTY3JjtfMSRJNF9UXTQ4L1xaMDRXXzBETTlfVS06OU9dIzM1Q18KK00xRSU8X1RZNzk/XEInQj9fKyIoRV9XNUs5X1w7JUEnXylCKERfUiA+KD9cQSciI18nMTg9X1lKLUMvX0AKK01WLU9fL0QlJl9WITs1T144RSkrXy0zTSNfUyBQLF9dKzNVP18mQVxFX1hOKUFPXlFJWi9fOFVJOl9aSkQKK01HL146QldbX0lZQitfVjVFNy9cXDJER18qUzxUX1RdNDQvXSAwRD9fNEU1Ol9RTD0oT1xaLjNfXypCUFEKK01fUixEKl9cRylTI18wVCUkX1JMRyo/XEUoMi9fLjMoUl9cJllPL1xKKiJPXydBWEFfUiRAJ19cSChSL18KK00qMjBEX1tKS0pfXVM8Jl9fNzY1SV9SXEkrP19WWC1DX18+LzhfX19IVz9fX1peI19eXjM/X19fS1lfX18KK01aTjtfX15XR19fV0pZL14tPyg7XyghPD5fUVQ7J09cPyZBU18uMzBWX1E8MyU/XDwmIUtfJ0FIPF9SLD8KK00nP11TO0ZHX00qTkVfVSEjL09dMjJEQ18qMjxJX1QxLDNPXSMyJFdfLCJMTV9SSEMoX1xGJ1FfXyoyKEIKK01fUUAyJU9cQyghT18pMjQ4X1E4MiQvXEMnQitfJ0FIPF9STEQpL1xMKSIrXylSKERfUjxCKU9cNiQxN18KK00lMSA0X1EwMCRPXDwmIUtfKSIgQl9SMEAoT1xKKEI3XysyTE1fVkFRPD9dPTkmM18nQUxBX1U5LzBfXVIKK005JidfKEFUQV9TQF4uT1xDJ0FDX1ErPlJfUlxHKk9cQyghX18/NzVTX1IsNiU/XEUnMU9fKEFUQV9SMDwKK00nX1xIKDInXygxVEVfUUA4KD9cQSgyS18xVEEzX1RZMTc/XS00Vi9fMURZPl9UNS03P1xaMEUrXzZVXU4KK01fVF05OV9dJzVGL18zVUFGX1I8Ris/XEQnUi9fKCFMP19SMD8oX1xGKSI7XydBSDxfUUw3Jj9cNyRBM18KK01OSzpUX11bMVVPXSUxJEtfNkUpLl9ZPjFDX1xZLjNTXztXIVdfVSEwNj9dRTomR18/V11cX1ghWD0vXlwKK01KWjdfR1kyLV9ZPixBP11ENyVDXzFUVSlfUz0iMF9cSi0zO18tI0xbX1guKUE/XSkzVSdfKTIwSl9TKE8KK00tP1xBKFJDXylSVE9fUixEK19cWi8jR19ZLidAX1JMSCtPXEEnIVtfSUlOOl9SJDknL1w/JyIrXytCTEoKK01fWi5BRj9ePEY5M19VTEcoX1tGTUo/X0FVXS9fXi47Q19fT0JWX19fWV1bX19ePz5fX19IV19fX1pOK18KK01fXk9DX19bSlhPX19aXi9fX05PQ19XVUw9T1w+JTFTXyYhODlfUUAzJT9cTSoiS18mITA2X1FINiYvXDwKK00mIUtfNjUhKl9TQE8qP1xUK0JTXzAzUF5fVDUgME9cQigiL18wNEUtX1U5Ozg/XEgoUjdfKlIwRF9SOD8KK00nX1xMKTI3XyVBIDRfUUg3JU9cPCZBN18lMSQzX1E4MiUvXDslUUdfKUFcP19SWEYpL1xGJ1FfXykyIEIKK01fUTgxJF9cOyVBQ18pMiBAX1JERCkvXEYoMidfKUIkQV9SPD8oT1xGKSI7XzlXIVBfVi1KOk9cPiZSJ18KK00zRDxbX1ZdQTdPXDslQUtfMCQ1JV9RTDomP11HOEVTXylCMD9fUVg/KC9cNyRBO18oQUg+X1IkPyhPXEEKK00nQjNfKDFEPF9SKDsmX1w7JVFfXygiKEpfU0RbMF9cXzE0X18yRSU9X1QpKzY/XFowVSdfMURdPV9VOT8KK007P1xfMyVHXzIlNUJfVEU0N19dLTVWJ18tUzhcX1JAQylfXEAmUV9fKCFMP19YJVk/L1xJKDIzXychPDkKK01fUUw3Jj9ePkYpO19LSV5EX1QtJTJPXTc0RFdfRDhKKl9UQSIxT19DVT1XX1k9S0FfWSYvRi9dPDUlP18KK01PKlJDX1tSSUc/XV0+VzNfMjRRJl9TXSQwT1xZMVQ7XytDPFdfU0UiME9eLkU5N18rQzRVX1M8XS9fXFkKK00uI1tfJiE0O19TJFMuL1xVLlNXXypCTFZfVSEuMl9fPFU9N18pMjhNX1E4NyYvXFcsIyNfKVIkRV9RQDMKK00lX1w+KCFXXzlWSURfV0VWPD9fQFQsP19TS0JPX19TRFZfX1hXTTdfXy4rOV9fX0ZXP19fWV1bX19eQz8KK01fX19KWE9fX1peL19fTktCX19bSlhPX19aXi9fO0VVR19SJDgnX1wzJDEzXyYxMDZfUiA7Jz9cNSQxL18KK00mQTg4X1FINiYvXEQnIUtfKiFcP19ULF4vT1xdLyNPXzBTVSFfUVg7KD9dKTQlO18zRSk6X1M4UC0vXEkKK00oQitfKlIwRF9SSEMoX1w2JEEzXyUxLDVfUSwxJF9cNCRBM18kQFgwX1IgPCdPXEMnIVNfLSJQSl9SOD8KK00nX1xJKEIrXykhVD1fUkBBKD9cSShSJ18qMixBX1JEQyg/XEwpQjNfKkIoRV9SWEwrT11COlZPXzk2UUwKK01fUiA9KF9cWy0iQ19BR0FVX1FAMyVfXDclUTNfN1VVOF9VSTg0P1xDJyFTXyZBQDtfUig9KD9cQyZRX18KK00oIUw/X1IoPShfXEAmIU9fKjIoQl9SNEEqP1xEKUJbXytDMFxfU00jMz9cXDFFJ18wRFE3X1RJNDdfXSQKK00zRUdfMVUlPF9TWSg1T10hMiUzXzdFWUdfWSYzRi9dIS9UK18oQVRBX1JERCovXEUoIjNfM1QtJl9SQDkKK00nP1w+JUFHXydBSDxfXVM0VE9fUFdeN18wVDUqX1Y1QzdPXiJAKCtfOCVJPl9eQzZWT19JVz1bX1YtKzoKK01fXltAWD9eXUtKJ19CSClYX1RVLzM/XFgwNCdfLiQ9J19SXFkvP10lMkRLX0I5Ji5fUyBZLj9dITMkV18KK00vVD0rX1IsQiovXj9HKitfLFM0Wl9SUFQtT1xRLENXXzc1RTdfXjs4Vj9dKjA0Q19GKSowX1lGNENfXi8KK01DSFdfQzhOKF9WMUk5X109OSYzXzlGNT5fXlc9VF9fVlctJ19fXV81X19bQ1YvX19ZTVdfX147PV9fX0UKK01XL19fWi1fX19eT0NfX1NIWC9fWllNW19fTktCX19fSlhPXToyNS9fKDFAP19RTDknL1w9JiFLXyYhLDUKK01fUTQxJF9cNiRBM18lQSg0X1FUNic/XEUnUi9fLyM8V19UNSIvP1w8JSFDXyZBOD5fVFUzNl9dKDJVO18KK00vU0RdX1I8QCgvXEImUU9fKiIkQV9RNDIkP1wzJDEzXyYhODlfUSgwJE9cMyNRJ18nMUQ7X1I0PidPXFIKK00qQkNfKjIkP19TIEgpT1xKKEIjXysiMEJfUkBAJy9cTylSL18rQjhCX1JIQidPXEooUi9fKFIkQ19VSUMKK004X11DOkZLXykyKEhfUyBJJz9eOEJIP18tMyBUX1c1UDpPXSUwQz9fKFFMN19RUC0kT1xCJkFXXygxTDkKK01fUjw8Jl9cQScxT18nUUg+X1IsOydPXEUnQVtfKTIkSV9TMFYvT1xULkQrXzBUTTVfU1UnNE9cVS9UR18KK00wJEk0X1RdOThfXFgwRFNfLDNNKV9TWF4zP15LSDpPX0kpWkJfU0xWLk9cRigyN18oMVBAX1FQNyZfXTIKK00wVD9fLEIsR19SKDgmX1wvIzBfX0o5Wj1fXi8yVi9dOzc2K183JUk1X1clVj1PXUE3JiNfWS0rNF9eLzkKK01VP19IWC4zX05KVkhfWEFePC9dLDQ0T18uQ1xfX1NdJzI/XEErUytfNDU5PF9YQixCT1xWLyNDXzBUTS0KK01fU0kmMk9cWjBEO18nUVhEX11DNVZfXFYuI1dfK0M4WF9SXFAuX109NjU/X1o9PzlfVVUrMz9fQFQ8T18KK01HSTIpX1VdQDY/XT03JTdfNiVVPV9VOUI4P11PO0Y/X1stXzRfXz8/VU9fXVc9N19eXV83X19TQlY/X18KKz5ZTVdfX04zO19fX0dXT19fWk4rX15ePz9fX1tKWE9fXVo+J19fXkNBCisgCitlbmQKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0aW1nci51dWUgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdGltZ3IudXVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTk0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdGltZ3IudXVlCkBAIC0wLDAgKzEsMTE3MCBAQAorYmVnaW4gNzU1IHRlc3QucmF3aW1nLnJldgorTV9VSSk0X1xBJiFfXyZRRDxfUVQ4Jk9cOCRRN18lMSQzX1E4MiUvXDYkQTNfJzE4PV9SND8oX1xcLVM/XworTTE0KF1fUVA0Ji9cOiVBW18zNS07X1RBKzVPXF8uM1dfKVIgQF9SKDsmX1xIKDInXyUxKDFfUSwxJS9cOAorTSVBR18kQSAyX1EsLyQ/XD0mMU9fKTFYPl9TKEoqL1xJKDFfXywiQEZfUkhCKC9cTCkiK18qIiA8X1JcRworTShfXE4pQitfKkIoPl9SSEMoX1xDKDIvXzZGLUNfVi1KOk9cRShCQ18sIkQ9X1lCKkFfXFUsIzNfPTchSgorTV9UNSItX1xDJlE/XycgVDJfUig6Jz9cQSZRR18pUVA7X1IkPSZfXD8mQVtfKFFMPl9SND4nT1xFKDJHXworTS0jOF5fUzBaME9dIzJVN18vND0yX1M0XzI/XSAyRTNfM1VFQ19TQSIzL1xRLlRHXy9DWS1fWk5BSl9eRAorTUdKK18uUzhaX1I4QSk/XEEnIiNfJyE8O19VKSMxX1xSKFI/XyhBQDtfUFwtI19eSUdJV19YXSs4X1VNPQorTThPXTw2RTdfPDc5Vl9WJTw4L19EVE0zX1hdRzVfXkNAWS9eWks6Q19CJ1lQX1RRMTJfXFovU19fL1Q9KQorTV9SJE8sT10xNUVTX0IoUipfUzhcLi9dIzJUV18uRDkqX1NJIjFPXD8nQjNfVi03O19TOFgvP1xOLUNDXworTStTIFtfVVU5NV9fSVVdR183NE0tX14jMVJfXj5FKEdfN1YhOV9VVTw1P104NzVXXzVGKUFfVl1OOV9fTAorTVddM19dXV82X19XPVU/X1tXXT9fXy4rOV9fX0ZXP19eWS1PX19ePz5fX19KWE9fW1ldX19fTktCX19XSQorTVg/X19aLidfO0VVR19SJDgnX1wzJDEzXyYxMDZfUiA7Jz9cNSQxL18mQTg4X1FINiYvXEQnIUtfKiFcPworTV9ULF4vT1xdLyNPXzBTVSFfUVg7KD9dKTQlO18zRSk6X1M4UC0vXEkoQitfKlIwRF9SSEMoX1w2JEEzXworTSUxLDVfUSwxJF9cNCRBM18kQFgwX1IgPCdPXEMnIVNfLSJQSl9SOD8nX1xJKEIrXykhVD1fUkBBKD9cSQorTShSJ18qMixBX1JEQyg/XEwpQjNfKkIoRV9SWEwrT11COlZPXzk2UUxfUiA9KF9cWy0iQ19BR0FVX1FAMworTSVfXDclUTNfN1VVOF9VSTg0P1xDJyFTXyZBQDtfUig9KD9cQyZRX18oIUw/X1IoPShfXEAmIU9fKjIoQgorTV9SNEEqP1xEKUJbXytDMFxfU00jMz9cXDFFJ18wRFE3X1RJNDdfXSQzRUdfMVUlPF9TWSg1T10hMiUzXworTTdFWUdfWSYzRi9dIS9UK18oQVRBX1JERCovXEUoIjNfM1QtJl9SQDknP1w+JUFHXydBSDxfXVM0VE9fUAorTVdeN18wVDUqX1Y1QzdPXiJAKCtfOCVJPl9eQzZWT19JVz1bX1YtKzpfXltAWD9eXUtKJ19CSClYX1RVLworTTM/XFgwNCdfLiQ9J19SXFkvP10lMkRLX0I5Ji5fUyBZLj9dITMkV18vVD0rX1IsQiovXj9HKitfLFM0WgorTV9SUFQtT1xRLENXXzc1RTdfXjs4Vj9dKjA0Q19GKSowX1lGNENfXi9DSFdfQzhOKF9WMUk5X109OSYzXworTTlGNT5fXlc9VF9fVlctJ19fXV81X19bQ1YvX19ZTVdfX147PV9fX0VXL19fWi1fX19eT0NfX1NIWC9fWgorTVlNW19fTktCX19fSlhPXV07JztfJ0E0PF9RQDYmP1w4JFE3XysyQEpfUUA0JU9cOiVBQ18nIUA6X1VFMAorTTJPXFgrUkdfLSJYTF9UJFwvT10lMCQrXyhCIENfVCUpMz9dNjZWJ18qIixFX1JMRCkvXEYnUV9fKyI0RQorTV9RODAlL1w6JVE7XychSDVfUTQxJF9cNiRBM18mUTw5X1I4PydfXE4pQjNfKUFcP19SNEAoT1w2JDEvXworTSZRODhfUjRAKC9cSSkiM18pQiRBX1I4QSg/XEcnUitfKUIwRl9WPVA8L11DOkZLXydBTEFfVFknLl9dTworTTg1W18mUTg6X1QhJTE/XDsmQUdfOVYpPF9SOEQnX1w+J1IjXyVRKDZfUig6J09cQSdSK18oMVhEX1IkOQorTScvXEImUU9fJlE8P19SIEIqT1xZLlQvXy9UNS9fVEkxNz9dIjJVR18uRC0xX1Q5Lzc/XTY3VldfL1RROQorTV9UQTU4T10pNSVfXzM1PUFfUzxWLy9cSChSP18oIUw/X1IgOydfXiE+N1NfKjIkRF9RUDcmP1w7JVFHXworTUdJQjZfWlo/SS9dIzE0S181VSktX1kmKkJPXSgwRDtfWF03PV9eNzpYP14xQ1lDXzclMTdfW1JMSF9eXAorTUo5V18/N01UX1RFLDFPXF8xJCtfLjQ9Jl9SWFctX1xZMEQrX0NJNjVfUlhVLT9cVy8zX18uM0BeX1FANQorTSZfXFEsU0NfLTNMXV9SSEstT10wM0RPX1ctNzVfUjRGKz9cNiVRQ18tUyBQX1I8QSk/XDgkUT9fJ0IgPQorTV9WPUo5L11ZPUcnX1gtIydfXFpYS19fXFktT19eLVs1X19TQlY/X19ZTVdfX14/Pl9fX0hXX19fWk4rXworTV9eT0NfX1tKWE9fXlpOK19fXk9DX1hVXEFPXEAlUVtfJzFMPl9RXDonL1xZLSM7XyVRLDVfUVA4Jk9cPgorTSZBU18oUVw9X1ctTjo/XlRKWjdfNCQsXl9VKSoyL1xJKVJHXzEkUS5fVC0oMz9cUCpSV18qQixDX1I4PworTSdfXEkoQitfJiEoNl9SLEAmX1xFKTFDXyVBKDBfUiw+KE9cPiZBU18qUjBEX1JQRChPXEcoQjNfKVIoRgorTV9RODElP1w1JCEzXyUhIDJfUVA4Jk9cRCgiK18pIiBCX1JIQik/XE0qUldfOiclUV9VVUQ5L1w+JlInXworTTVEXSNfVylEOD9cQicyJ18uI1haX1IsPiYvXyRNWytfK1I8Sl9SLEAnX11dPTcvXyhRODVfUjQ9Jl9cQgorTScyJ18pIVA/X1JAQSg/XEEnMjdfJiFAQV9SJEEqT10nMiUvXzNFJT1fVFUzOF9dJjNFW18xNFU9X1NJIgorTTRPXTs3VltfM1VFR19UPTY4X10vNiY7XylSOE1fUjA/KF9cQCZRX18pIVxDX1I4RClPXD4mQVNfJlE8OQorTV9RPDIlL15aTUszX1dNJzZfVDUkMk9dOjREW19FWSYvX1NEWS8vXU88Jz9fNCUhOV9WNUg6P11fP1dTXworTUAnQVRfW1JLST9eP0UoV19FWFIlX1YxPDYvXSczNEdfLVQpI19SSFUtT1xULlNPX0BYRiVfVEUvND9cRQorTSkiS18sQlxVX1IkQyovXEcrMl9fKFIwT19TSFwuP19EWD4jXypSQE5fUiQ8J09eRkZZS18oMUQ8X1FcPAorTShPXE4qUktfSFomOV9ZUjlFL182UjxDX046VklfXic3VF9fWFlOL19eXis7X19fR1dPX19ZXVtfX15DPworTV9fX0pYT19fWl4vX19OS0JfX19LWF9fXlpeL19FOEItX1IkOCdfXEEnIiNfKkI0QF9USSIwL1w1I0BbXworTSkhUD9fUVQ3Jl9cQCYhT18nQUw6X1JARClPXTMzJFNfTSo+Rl9TKFAsT11BOiZbXzJEXTVfUlxHKl9cUworTSoiP18rQjBAX1JcRSg/XDslMS9fK0JAQF9TXFcrP1w7JFEnXyoyMEZfUVg5Jl9cSyhCK18sMjhFX1JEQAorTSgvXEgoIi9fJUEgNF9RUDYnT1wzI0EzXyUgXDNfUiQ8J09cRSdBW18qQjRFX1NAWi4vXUk8RytfOFY9SQorTV9RTDooP11OOEVHXzg1NTBfUyBHKV9cWy1SX18tUlhHX1w+WU1PXFEqMlNfKTIgQl9TTFYsP14rQEdPXworTTo1RS9fUVQxIz9cSSgiI18qQjRHX1MwUi0/XDcmMVtfKSI0TF9URS01P102NyY7XzEkSTRfVF00OC9cWgorTTA0V18wRE05X1UtOjlPXSMzNUNfMUUlPF9UWTc5P1xCJ0I/XysiKEVfVzVLOV9cOyVBJ18pQihEX1IgPgorTSg/XEEnIiNfJzE4PV9ZSi1DL19AVi1PXy9EJSZfViE7NU9eOEUpK18tM00jX1MgUCxfXSszVT9fJkFcRQorTV9YTilBT15RSVovXzhVSTpfWkpERy9eOkJXW19JWUIrX1Y1RTcvXFwyREdfKlM8VF9UXTQ0L10gMEQ/XworTTRFNTpfUUw9KE9cWi4zX18qQlBRX1IsRCpfXEcpUyNfMFQlJF9STEcqP1xFKDIvXy4zKFJfXCZZTy9cSgorTSoiT18nQVhBX1IkQCdfXEgoUi9fKjIwRF9bSktKX11TPCZfXzc2NUlfUlxJKz9fVlgtQ19fPi84X19fSAorTVc/X19aXiNfXl4zP19fX0tZX19fWk47X19eV0dfX1dKWS9eQEQ5N18oQUg+X1JERClPXFIqUjdfNVRVKQorTV9RUDMkX1xFJzIjXydBQDxfUVg2Jk9cOyVRR18pIjRGX1FYOSZfXl1MKk9fLDJcTF9VRUE5P14iQVhTXworTS4jIFNfUzBIKj9cTykiL18sMkBCX1FYNiRPXSIuMytfNFRBIV9STEIoT1xCJzFfXydBODlfUkhBKD9cSgorTSdRW18qUixBX1I0PidPXDQjUSdfJVEoNl9RNDAlT1w0I1EvXykxVEBfUkxCKE9cSylSN18qQlBKX1Y9UAorTTwvXUk7Nl9fJ1FYRV9XUUw4X106M0Q/XywyOEVfVDBbLS9dPDQkT19QSzZUX1JQRClfXEYnMjNfKFFUQQorTV9SREcpL11cPTZfXztGMUBfUiQ4Ji9cPSYhS18mITg5X1FQPihfXDYlUVtfMCQxLF9VJTc4P1xCKUJbXworTTMlKTxfU10mNE9dJzQlW18vND0yX1Q1LzZPXSQzRUdfMjUtPl9SPEUrT1xJJzFbXzYkUSVfWDFbPT9cPgorTSYxR18pUixFX1IsPihPXEEnIitfPCYlQV9YWilDP10hMURTXzc1QTNfWi4/Rz9cXDA0V18rUlRPX1NIXAorTTEvXSUzRVNfKkJMUl9WITo2L15IRzlTXzZVOTBfXCJTSi9eRURIO19DWC1aX1QpKjFPXTM2VT9fPCcpUAorTV9TOFcvT10uM1U7XyoiSE9fU0hcMD9cTCtDL18nQiBIX1IgQSovXFsuRCNfKSIoRV9RWDomL10iLkM7XworTTQkNSRfUiQ9J19cRSgyL18oQVhAX1IsPyg/XEYoQjNfWj0zMF9aLj1GX11MPSc7XzREVS9fXzc/Vz9fWgorTVg+I19eXitBX19bRVkvX19aPitfX15HQl9fX0pYT19fWl47X19eT0ZfWi40RT9cQyYxU18rUkBIX1QgVworTSwvXUA1RStfJkEkMV9SOD4oP1xAJkFbXykhWEJfUVg6Jy9cTSpSQ18oUUw3X1wqU0s/XFktMy9fMEQ9LAorTV9WUVA8T1xWK0JTXytCKENfUyRFKi9cUypCM18pIVQ3X1MkSCg/XjNCKCdfLjMgUF9SJDwnT1w/JVFLXworTSpCJEFfUyBFKS9cTylCO18pMVg+X1FANCRPXDwmQT9fJTEgNF9RTDYmT1xGJ0InXyohXD9fUkhGKS9dJQorTTFUN184VlFMX1YhRDlPXEAnUjdfQkdBTl9VISIuP1xLJ1FPXzEzTFFfVzVJOS9eWks6U18qMiREX1I4OworTShPXE8qIl9fJyFYQV9QXDIkX10xMlRHXyoyIEBfUiQ8J09cQCdCJ18mUVRCX1JESiw/XFwwJENfMURRNgorTV9SVFEuP106OCZLXy9UOTJfVEUyOC9dLTVWK18wVFU4X1QpLDVfXTE2VjtfKDIsSF9SSEIoL15ERUhXXworTTJDUFNfWEVePz9cOCNQX18pIVxBX1IkPCgvXTAxVD9fMEQxKV9UNSs0X11HN1VXXzxGVU1fU1UiM09cTworTSsyX18vVCUpX1Q1Mjk/XEwtRDdfKiJAUV9VJSgyL15UTCpbXzklTTRfW1ZMR19eQ0NYP181VUExX1ZBTQorTTo/Xl9PPCNfLEMwWV9UXTE1T1xBKFJDXywjKFdfUkxNLE9cQShST18rMlxWX1NIXDA/XFYtQ0dfOSVNNAorTV9YLVM6P11eO0Y3Xz8nJUpfUlhAKD9cRScyI18oUiRDX1JAQyk/X1BVTS9fUTtCV19VPT03X1xSKzJXXworTV49VzlfX19BVl9fX1g9T19fXis8X19fRldfX19ZTitfX15LQ19fX0lYL19fWT1bX0hZKjJfUkA8Jz9cWAorTSwiW18yI1hUX1Y5OjU/XDskQStfKlIsRl9SLD0oP1xLKTJHXyhBWEBfU1hbLU9dIy1TI19SSzZTX1JYRgorTSpPXS0zRUdfOVYxUF9TJEkpP1xPKFIzXypBUERfUkxCJy9cRSdBQ187Ji08X1suSEg/XFYrMldfJ1FIPAorTV9RUDQlX1xNKSIzXysyKEFfUlREKS9cRSdBW18oMVg5X1JMSihfXDYkQTNfJ0FEPV9SREEpL1xGJzFXXworTSoiMEJfU10hL19dQDo2R184Vj1JX1IgPig/XkBDOCdfOCUhJl9TRE0pT10/NTRPX0QoMV9fWzZISV9cRgorTSdCJ18pQVA/X1M0UCxPXE4rIltfODVVP19cPl5PT1xOKTI3XyhRWEBfUiQ/KE9cOycyK18tQzxeX1RVMQorTTY/XF4xJFtfK0MoWl9URS82P10iMjU3XzE0WTxfVCEqNT9dJjQlT18vREEzX1RFMzdPXEEoUkNfKjIkPQorTV9aQjhDT15YSTlPXzpFSTdfWDVYPV9cQiZRT18pIihEX1JAQyhfXFQuM19fMERBMl9bIkdJX15FSCojXworTTI0WTpfVFUrMz9cWC5EK18oMkxaX1NBIzUvXEgsNCtfJzFUSF9SREQqL15BRzlPXzYlLSdfWj48RD9eKQorTUI3W183NU04X10/MVY/XFkvJCdfMlRZM19SJEMqL1xNK1MzXysyXFRfUkhOLU9cSywjO18uI00gX1NdIQorTTEvXUs3VSNfSzlCJl9bSkJEX11DNEQzX0xZUj1fUlxDKU9cQCgyK18pQiRDX15TMFRfXltLSy9fOVcpWQorTV9UPSgzX19GVi4jX1o9R0FfXks6WE9fRlVNW19ZTUdEX11TLFUvX1pZPidfX15DO19fX0ZWX15TSSlbXworTSlBWDpfU0RUK09dNzJDV188Ni06X1FAMiVPXFIqMkdfKUFUPV9SQEEqP1w9JjFPXzJUUSVfVSUoMD9fKAorTU1LL18qIVhHX1YlRD0/XSUyJTNfLiMsU19SPD0oL1xTKVJLXyxSQEFfUkxFJz9dTjk1W19PWzJNX1MoSQorTSo/XEEnIVtfJ1E8Ol9STEIoT1xRKUI3XypCJEFfUjxBJ19cSioiI18vU0BSX1IgOCZfXEAmUVdfKVIoQgorTV9SNEEnX1xKKFIvXzNVITFfVVVGOU9dQTkmN18oUVhCX1o+NEJPXU43NT9fNyUhJ19XIUY2X15KR0lHXworTUxaNkZfUjxCKU9cRCgiK18yNDBfX1MoTSlfXVM8NltfUlwiX19SUEkqL1xDJzInXygxVEVfUixPLU9cWgorTS8jS186RVU4X1IsPigvXSQyNTdfMFRJNl9UJSk0X10jMzVDXzNVKT1fVE0wNy9dKzU2M18zJT1CX1IkRAorTSk/XE0qIi9fSVk+Ll9bSkVGP15FQ1g/XzEjOFNfUjw9KC9cRigiM18rQlhRX1NRIzI/XSc0JT9fOFY9TworTV9aKkJKX100NzYzXytCTFFfUzRUMD9cVS5EO18mQUBIX1NEVzFfXEosRCtfJyIgSF9SIEAoX14sQig7XworTTlVTTZfWEouQU9eJkJYP18/J1FfX1M8WS9PXS40NTtfJlFUQl9SSEcrP1xWLiNXXydSLEtfUlRSLi9cUworTS0zS18vU10iX1g9WjlfXl5IWUNfVUtOSl9YLVA2L18lSzozX0g5Ki1fUyRKKk9cSihSL19aPFcvX1w+WgorTVFfXFQuNStfL1NdNF9VISQ3P105NFY/XzglUUxfVk1HPV9dWzlHK19DRzlbX19TQldfX19aLVdfX15LQQorTV9aOjFDP1xOKEFbXy9TQFJfVjExMT9dVjlFU18mQTQ5X1QgWC1PXFAqIjtfKjI0TV9SNEMpP11IOiVfXworTTZVKSxfW0JKSV9cUCpDK18zRSVDX1Q5KDVfXFAqUldfKlIkRF9TMEgqP1xQKTFbXyoiKDpfWFYlPl9fJgorTU5bM18rQjBHX1FcOSc/XD8lUUtfKyIsQ19SVEIoP1xMKFIvXylCKEBfU0hZK09dPzVFI18pQVw/X1FcOgorTScvXEgoUi9fKCFQOl9SVEQpL10zNSU3XzdGPUdfVilFOU9cQCcyL19KSUYzX1NASypPXTo1JStfPDZNQworTV9bMkpJT15HRllTXylCIERfUjhDKE9dOTREU18wU1RTX1c5VDtfXytPS1dfKjJAR19SJDooP1xAJyI3XworTS4zWSpfVCEiMT9eIkAnQ19GKFoqX1IgPShfXTo3JjNfMiRdO19UVTc5P10hMTRXXzBUOTJfVFE2OS9dLQorTTU1X18oIiRCX1JcSSlfXklHOTtfSEhSI19aUjZDT15DRFkjXyoxWENfUjA+KE9cSisjJ18yNSE2X1RNNAorTTZfXSs1NV9fNCUlPF9VUUU6X15XTFtPXzAzXS9fUkRPLj9eN0RZT18oQVxFX1JMVTAvXEYrQ1tfJkFYTQorTV9SJEApT14lQCgjXzNFKTBfUzRaLi9cOSZRW18uM0BeX1QlJDI/XD4nMi9fLTMoWF9SJEMqL1xIKyMzXworTSkyPE5fU1BeMF9cXi9EJ19GOF1bX1wmRkdfX0RSW0tfRjg5Tl9dLyNOT142QihHXyxSVFFfUjxCKS9fRworTVRMO19RS1ZXX1RdNzZfXUE5VkdfWDxTMV9fOz5WX19eWV1PX19eQz9fX08+Vz9fI0k6P19fLiM8X19fRworTVdPX19ZTV9fTVlWQF9TJD8oP10pLzNHXz1GJTVfV11NOF9cQicyJ18tQlhMX1NcVy0/XEQpQldfKSIoRAorTV9XVVk8P11NODVTX0sqIjxfUyhOLU9dNjZWV18yNEU4X1MkTCtPXEgnQidfLCIwRV9TLEgoP1xOKiIjXworTTs2NTtfXEZeTV9cUyoyU18oIUg+X1IkOScvXFApUj9fK1IwQ19SXEYpT1xBJzFPXzdVWTNfWFolP19cRworTSgiI18oUVhAX1FcOiZPXEopQjNfKzIwRF9VRTo2X106OFYvXzo2UU1fUVg9KF9eUUk5W18nUTw6X1M8VworTS5PXSMwI09fTzs2U19aLjdGL1xKKEI3XyoyLEFfVTUsMT9dLjFTT187Nk1EX1w6WU4vXE4rMlNfKCFEQAorTV9SREUrT10wMyVTXytCWFdfUTQ9Jj9dJC9TR187JiE8X1NAUy4/XSk0JVtfMTRZPF9UJSYzL10iMiUrXworTS9ENTFfVCEkMy9cPSZRV18pMVg+X1siREdfXjxDKC9fTSoiOF9bLkNIL1xJJ0IvXykhWEJfUzhVLl9dNQorTTVVW18qUyRZX1VZRjwvXT84Jk9fNzY5TF9VRTU3P1xPKzNXXy4kKSxfU0RdLl9eSEo6L18pIkxRX1FYSAorTS8/XEYrNCdfJzIoTl9RVEIpX1xQLUNDXy4zUSFfUUQ7J09cOiZBV18tU0hfX1JISStfXEInUjdfLkNRIQorTV9STE8tX1xSLSNPXytTJFZfUzxXLk9ePERYK19RSlZIX15DMFA/XkREV1NfUyteXl9TTFQuX1xBJ1JDXworTSlCJEdfXjcwUy9fL1A7W182RVE/X1NEXS9fXiA+N0dfXD4jOl9fT0JVP19fWS1HX19eN0FfX19DV19fXworTVk9W19fXjc8X19XRFc/XjxBKFdfKkFIQl9UJFsuP11dOyVbXz5WTUFfUjA/KF9dIS4zP18wQ0hYX1JcWAorTS9PXFItMztfQlgpW19XRUw5X15eTSsjXy1DNFxfVF0yOS9dLDIlQ18qUixGX1JMQSkvXE8oUjNfKyIkOgorTV9SSEQnL11YPCY7X1RMPyBfUyhIKl9cQCZBW18oMUQ8X1JcRilPXE4oUitfK0I0RV9SPEMoP11LOkVfXworTU4qXklfUkBBKD9cQSchW18oUVg+X1JQSClPXEwoUi9fOEYtRF9WKUs6X11BOSY3XyghWDtfW0pJRl9cRQorTScxT189V0FZX1FANyVPXyRPO1dfRSg6J19SQEAnT1xGJ0FLXzZVJSdfVjU8M09dQjdFO19OOlJLX1JMSgorTSo/XEYnUjtfJjE0Pl9TQSEyL1xHKUJXXywiSE5fUjhIKU9dWzxXJ18vU00kX1M0WzJfXTQ1NVNfM1UlNAorTV9UNSs0X10sNEVTXy5DRSBfUVg4Jy9cSyhSO19MOj5DX1pCPUVPXlhJKVNfTVo+RF9SVEIpX1xFJ1IvXworTSwiXFVfVFkvNU9cRClCW187Jl1aX1VVPjo/XTY3VjdfNTUlOV9TPFUxP10gMkVHXy1TUFxfUlRLKU9cXworTTAkT18pUlxfX1JcVjEvXFEtRCtfJyFYTV9RSD0qL10kMURbXy8jWSNfUzRVLi9cXC9UM18pMjBKX1JIRworTSs/XF8wNDtfLSNBIF9TOFgvX1xYLkNfXylCOElfWiI2QV9fJUs6S19ZXSMjX1ouMz9fXzNRXENfL0M8XworTV9SND8pX1xJKEIrX1pdLzZfXTcjUT9dIy9UJ186JklNX1UtPTg/XlVMOl9fXi4nPF9fU0VYL19fWV1bXworTV9eNzxfX19GVz9fX1ktV19fXkNBX1oqMUVfXEMmUV9fJjEwNF9YUVs7T15ERShPXykyIEBfU1hbLk9dJAorTS9TX18tVCUlX1QxKTE/Xi5AV1NfQ1glXl9aRkBIL1xfLyRDXy9EITVfVUEyOC9cTilSP18rMiRCX1JUQgorTSg/XEopMiNfJyFINV9WPUI3P18rT1wjXypCNEdfUiQ8J09cPyYhQ18pUiBAX1MoSypfXEwpMjdfKyJAQAorTV9YJVw8L18nTls7XyoyKEJfUiQ8Jy9cQydBW18rQkRJX1JASCk/XUA4RjdfOTZNR19WMUQ5X1xCJzFXXworTVBKWkZfU1xUKz9eI0BHT18mUVA2X11LK1MvXVI5Rj9fKjI0R19TIEgpL10yMkQjXz5HJUNfVUkvMi9eTworTUkqL18sMlBMX1FQNyc/XEwqQy9fLjQtLV9SREosP11fPUc7XylCID5fXTspU09dKjM1Q18xNEEzX1g9XAorTT5fXT42JTtfKiIgPl9UUS82T1xaLyQzXydBSDxfUkxGKi9ePURJJ19MSj5AX1tSSklPXl1LSltfKyIsQworTV9SOEIpL1xVLUNXXzVFQUBfUiBCKj9cPCdCL19DKFY0X1RJLDRfXSAwNENfOUY9Ul9UOSk1L11OPCcvXworTUtaLkRfVDUjNF9cSCwjS186JklNX1NIWC5fXEUqIzNfKUJEVV9UISIyT102NiVfXzBUNSpfUzxdL19cTQorTSszI186NjVNX1NdIDFfXFAsM1NfLTM8Xl9UOSozL1xPLDM7Xz9HKU5fWiIrQj9fMU47O189Nik8X11DKgorTVRPXTgzRUNfKiIkS19SIDsoP19JVS0rX1g8XytfVDReLi9dLjFEK18zNFUqX1dVXD5fXzxTXFtfXi1HMworTV9fX0lYP19fWU1fX19eP0BfX19GV19fXVktV19QKypTX1JMQylPXEEmUUdfSzlKMF9aPjhEX1xQKkJDXworTTA0IF9fUzhRLF9dJTJUV18xJEEmX1kmKEBPXjpDKEdfQ0guKF9SUEouT10kMTVTXzw2VV1fUkxDKU9cTQorTShCJ18sIjREX1FYOiYvXD4nIT9fJkEwMl9cQl9PX1xHKEIzXyhBVD1fUiQ6Jk9cRygiI18qUjBEX1JYRworTSlfXE0pUV9fQVghUl9cXyNPT1xIKDInXyghTDtfUjhBKD9cRigyJ18pQjBBX1VRQDdPXUc7JktfOSYtQgorTV9SKD4nL15dSiovXy1SVENfWVY4RE9cXS5TO19XTFctX1YlODYvXEMoMi9fKiIsRV9TOFMrT14gPlc3XworTTMkMSBfWkpCSC9cSihSL18oIUxBX1FEOShPXF0xJSNfLzNZJV9YXidBP105MzRHX1gsWzJfVDEsNU9dIAorTTIlQ18rQkRPX1RJJjIvXiE+JytfKDIkTF9TNFIvT1xIKFI3XywyPEpfWiYxQ09fIEw6T19KKTozX1s2RgorTUlPXEwoUi9fKUIoRF9TPFkwL10uNCU/XyYhSD9fVFkuND9cPigiN18wJC0oX1RRMDYvXFswNE9fM0UhOAorTV9WSUw7X180UTxHXy5TRSlfUkRTLz9dJzIkR187VlFLX1I0SC0vXFMtRCtfL0QhKF9VUT45P10rM0UvXworTS0jSFxfUVA8J19ePkZKK18xRDkvX1JQTy5fXE4sIz9fLDMwVV9UTSo0L15LSSozX1ZcWy1fXkc4Vi9fSworTVdNV19YTTMxX1teTUo/XjVBJ1tfPVYxPF9ePzJTP19NVl0/X1RcTydfXTsrUk9fM1NcV18vVCkjX1ZdUQorTTtfX0pWXTtfXj1bN19fX0RXP19fWT1bX19eNz5fX19HWC9fJE5bN18xM0xXX1dJTDo/XzRPSzdfRkhKJworTV9SVEYpT1xfLzQjXy1CXFZfUVA9J09cXC5TS19FKSIuX1smRUgvXVA6JlNfKVI8VF9UKSg2L11GOSczXworTSkxVEBfUlhDKE9cTShCJ18pMiQ/X1I0QydPXEAmITNfU1wrIV9SVEYpT1w/JiFDXyhBTDtfUkRCKE9cTworTSoiQ18rMjhGX1MgSihPXjNDJ1tfUywiW19STEQpL1xCJzFXXykyIEBfUlRIKi9cSyhCK183VjE+X1VZRQorTTxfXTo2RjdfJlFENF9cKk1KL10nLjMjX0lJVjdfViU/Nk9fPlM8V18xI0xbX1IoQChPXD4mMVdfK0JMSgorTV9TKE4rL11XO1crX0hJRjlfUlRGKU9cQSciK18nQVhHX1QlJzQ/XScxVEtfRlkmLV9bNklIT186UixLXworTTRFSURfVDEsOC9cPydCT18lQUxAX1UtLDFPXUU3Vj9fKjIwUF9SSEIpT1xYKjJXX0spPjVfXUcoUE9eNworTUE4K18+NklKX1JMQihPXEcoUjdfK1MoV19UWTE1T1xXLVNLX0FIJiNfUVA/KC9cLyUxP18yVSU5X1QhJworTTRfXScyJS9fQjhOLl9dTyxUL10lMFUvXy1UJStfUihDKS9cWC0zM18rIlxbX1NVIDMvXSIxJFNfMyRZNQorTV9UTS40X10iMiRLXykyNEhfWyZNTT9dITA0S18rUyxbX1M4WS9PXSkyVEdfRChOLV9SJD0nX1xPKiJDXworTS4iXE9fVChdLz9dKDFEQ186RjVFX1kmKUFfXklHOUdfWl1TNl9dNyhQX106NCRTXzxWVUtfVkFHOU9dLworTTUlK18vRDkjX1RZMjQvXydMSldfXi1XNl9fRz5VX19eWF1TX18+Mz1fXFMnTl9dPDQ0S19JSSouX14nKQorTVAvXjlCKENfLDJETF9TQFUuX10kLzQ3XylCJEFfUiA/J09cTisiW19PWzpQX1hCI0BfXFwwRDNfOUcpVgorTV9WXVE+L1xPKkJLXywyOEVfUkxAJ19cRCghW182VUUyX1QoWSxfXzBQS19fLCJARl9SKDsmX1xFJ0FbXworTSwiRElfUkBBKD9cSihSL18rUkRBX1kiKT5fXylPO0NfKlIwRF9SKD0nP1xIKFIvXyoyMERfUkxCKj9dOAorTThFX18oIkU4X1NQXDlfXDwnQVNfTzpCQ19WKTIyP15XSko3Xz0nJUxfXVcsUy9cXi0zN18oUiRDX1JAQAorTShfXF4uIztfLlMwTl9WPTs3L140QlhPXypSMERfUVg5J19cOiZCL18vJCEoX1NQWi8vXkdGWTtfUVtGUAorTV9dTylTP10oNCVLXzI1IT5fVF0nMl9cQigyP180JDReX1glWz9fXSIwRF9fJzFMPl9SPD0oL15GRik3XworTVQ8Nl5fWko6RV9eVklaP18sMkBIX1I8Qyk/XFYvI1tfMyUhMl9VQTQ1T15GR0lTXy0zSFZfUihLKl9dKAorTTQ1Q18xRF09X1UhMTcvXidCOFNfWF0zOF9VKTA4L1xXMDRPXzdWIUFfW1pbTk9cVi40N18qIkxXX1NdIQorTTI/XSYyJF9fMTRBLV9UQS40L1xJKjJTX0s6RlFfVEUpNE9cUS4jW18sMzRXX1RNKTFPXytQTCtfKTIgQgorTV9SKDonP15ZSzsjXyoiLEVfUiA9KF9cPCZSJ18lQTg5X1I0SCo/XlNLKjtfVixPJl9eKzZUT15bTVs3XworTTBEPSdfVyFWPE9dMjYlM18uM1kjX14vN1RfX09XLTNfWy1HMV9fL0BWL19bWV1fX1RMOldfVkU9NS9fNworTVIsK19YTF8lX1g1Vz0vXEwoUi9fLFJMTl9UNF8wX11IOFVbXywyVEtfUjQ+J09fNlI8M19BSC4iX1VJQAorTThPXi9FWU9fOEYtRF9STEYpT1xOKVI/XysyNEFfUkxGKD9dQTc1N19IWT4wX10zIk9fXEkoIiNfKEFUPQorTV9SMD0nP1xLKSIzXytSQEhfUlhFKT9cQidBU18zVFUoX1xPIE9fXE0pIjNfKFFQPF9STEQpL1xNKUI7XworTSgxND5fVTU4OF9cQCklJ18tUyE/X1FYPCdfXydKWj9fPEZJQF9cPk1KT140Q1hLX1ctJzBfU0BPK19cRAorTSdSJ18qQihAX1VVNjIvXVY6RjdfVlxTLV9YNV1AL1xIKEI7XyghSD5fUUQ5KE9cXi9UO18uM0BXX1s2TworTUlfXzNRTCdfViw/LV9ULS02L10lMlU3Xz9HOVRfVUU0NS9fKE47M19COC4rX1RdMjc/XEUoUjdfKyI8RworTV9aRj1GP15TSSlfX0ZITiZfWk49R09cRCchX18rMjhGX1MkRipfXSIyNEdfR0oqQF9aVktJT11CNkVDXworTTMlQTdfVDUxNU9dITIlM18zJTE4X1QoXy9PX0VWPVNfMURFNV9UKSw1T11LOjZPX1JMLyNfU0BdMj9cSgorTSwzP18kMSg5X1RBKDQ/XSkyVStfMDQ9KV9SSEorP15XTDtHXy8kIShfUlBRLU9cUC1DW18+VzVTX11LLgorTVNfXEMpMktfJyIkR19VLTY4T1xJKSMjXyhBVEFfUihAJz9cRChBV18oQjxFX1VJOTYvXU05Ni9fVz0nLAorTV9bKkhJL10sNFUvXyxDWF1fWEYwRC9dPjg2O188N0FMX1kqKD9PXjJBSCdfP0ctTF9aWkJEX183UitPXworTT5GUUNfXUctUU9fRVRMQ19AJylPX1JIQSg/XSEuM1dfMjQpKV9WSUM3P11HOEVXXzNUPSVfXS8kT19dQQorTTcmI18uM1EnX1YtRjxPXSMwJDtfK0I8R19STEQpL1xOKjIzXyoiLD1fVy1POV9eXUw6S19VTDMhX1JMQgorTShPXEEnIVNfKFFQPF9SSEMoX1xLKSIzXyxSSEpfUiQ8Jy9cRCdRX19TLCMhX1JURCkvXEUnQVtfKVIgQAorTV9SQEEoP1xIJzFTXyhCJDpfUTg2KF9cSSkyV18nIVQ3X1xKTUo/XVM8JjdfUysiTV9bIkhJL18/VV03XworTS1CXE9fUjA/KD9cUCoiO18+JylCX1gxWD0vXz5TXSNfOyY5Sl9SQEIpT1xGKCIzXycxTERfU1kgMT9cXAorTS4zQ19NOl5HX14nM1QvXzVRLFNfMyU1Q19UMSk1P14kP0dTX0JILiNfXTskUC9eKkBYX18xVEEzX1JQSAorTSpPXE8qIkNfS1oyQ19aTj1GT14nPVczX0hJOjdfUlxJKz9cSyhSJ19KSSo1X1UlKTMvXytPXCNfT1siUAorTV9bQkdLP104ODY/XzJVPUBfU10mNS9dJzNVL180RFUtX11TMVVPXTM1RitfMFRdOF9YMiJBL180UzxXXworTS80KS5fUVRDKT9cTywzO18zVF04X1I4RytPXFowJCtfKiJAS19bWlhQL10qM0U7XyxDPFxfUyRZMF9dXQorTT03L19WPFcuX1MxIzQvXEcuVF9fMDUxTF9TJF81T11BOEcvXyhRUEZfUlhFKT9cSCgyJ184JUE8X1MoSgorTStPXypQS1tfSEk+MF9YSihAX10vNFUnXy80KSJfVy1bPz9cWjJVR184NiFGX1VFPDQvXTAzRD9fOFVNMQorTV9dQyhPT11ROEVTX1c8XyxfXjsyUk9dVzpGR18tMlRRX1NcWC9fXSMvNDdfOVYhOl9WWUc4P15MSElbXworTVdMTyVfVlVGO09dIzElN181RT1IX1Q9IjNPXE0pMkNfKzI4Rl9STEYoP1xWLDJPXzsmQUBfXEZdTU9fNAorTVBLX18qUihCX1IwPydfXEYnUV9fKzI4Rl9SSEMoX1xNKVI3XzJEKF5fUkhAJy9fK09bT18qUihCX1IwPQorTSc/XEImUU9fKlIwRF9SNDcnX1xDJlE/XyhBTEJfUlhGKj9cQCgxS19TSypOX1ctUjlfXyNKOjtfTisuTgorTV9dVzVUX1xWK1JfXyhRWEBfU1xXLT9eNUNXX188JjFAX11LK1MvXUU3Vi9fKjIsR19SLD0oP1xAJ0I/XworTS8zXSRfVDUiMD9eVUtaP19WLEsnX10nIFIvXSEyRUNfNSVFRV9ZIipCL15ARjlHX1hdJy1fVz1QPy9dJgorTTFVK18qIixFX1JIRSlfXkxJOjdfRShSKl9YTV4/P148RDk7XykyIEZfUkhCKT9dXz0nL182RVE6X1wyXQorTU8/XlZMWytfTypaVl9UVTU3X10iMyVLXzI0WUBfVD0uNS9dUTsmU19YTT88X1RRLzZfXFkxNFtfQSgqJAorTV9dSzNUX1xZL0RLXy8zWF9fVT05Ny9cXS9UO18qIjxNX1EwOCZPXEQpIj9fTls2XV9UKSYzT10hMURPXworTSwzRSNfWSYpQV9fP1RdM181VkVXX1M9LThfXEcvJTdfLCQ1PV9UQTw8L1w3KDJfXycxXEJfUjhFKS9dMAorTTE0S18sIjxOX1FcOidPXkVHWT9fTCo2Pl9YWidAP11NO1ZXXztHOVpfVTlIQy9dKDQ2K180JUkrX1RRLAorTTI/XTMzRFtfWF0vKl9WPTg0X19BVE0rX1k9IytfVlFAOD9cUSpDJ18uMyxbX1NQWDA/XitAR09fP0c1TgorTV9bWlJLP19AUywzXzM0OS1fU0xdMy9dKTJVS18uQzhfX1MgSCpfXEwpMjdfK1JIRV9SXEopL14vQlgvXworTVM8JlpfXSsgTz9cTikyN18pIVw/X1JEQihPXEooUi9fKiIkQV9SPEQnX11ENlU3X1BLLk5fXFMgTl9cTQorTSkyL18pQVw/X1IwPSc/XEooUi9fKFFEQ19SLDwnL1xAJjInXyoiJEtfUVxEKC9eXUlKJ18+V01QX1wiSworTUlfXyZQO1NfVl0vMV9TME0rP1xEJ1InXy8zNFNfWkpERS9dNTI0N19ZXUM5X1RJJDIvXEkoUj9fKEFQQAorTV9SID4pX1xNK1MzX0IoNiRfVCBaLE9fQlUtJ19SO0MgX1RNNDhPXSQyNTdfRTheLV9aLjxHL19GVS0jXworTTclNUFfU0hbMU9cTSlST18sIkhOX1pKRUlfXFstQztfQVdNXF9ZTjJGP1xBJzI3XyhBUEBfUiw9Jl9cSworTSsyS18tUlhOX1IgOydfXzBRPEtfNVYlRV9UTTc3T10pNCVTXzRVTT9fVlVIOi9fPlRdQ18wJC0vX1NdKworTTUvXFQsQzNfUzw7Jl9TUSEzP10qMVQ7XzgmJUJfVC0oMz9dMDJUX18rMyRTX1JUTSwvXkpJKlNfMDQ1LQorTV9TTSAxP1xJLDNPXzZFKTBfXSMkUT9eKkM4W18/V14iX1lePUlPXTY3Ni9fK0M8Xl9TTF0wT1xOKVI/XworTSwyQEhfWzJHSE9cSikyP18oIiBJX1RRJzI/XidBJ0dfSToyOV9WPUw6L11MPSdDXzhXOV5fWDooQz9eIgorTUBHX18xVDUiX1VJNTQvX0hWXTtfNlUlJ19eMzdUT19CU00/XzdFKTNfUzBRKT9cTCoiO18xI00iX1dJTgorTTk/Xi5BNz9fUjtSW19dVylRP10hL1QnXywzJF5fVDEkND9dKDFUW18sIkhIX1JIPidfXFMpUkNfLVJYSAorTV9ZQi1BT184UjwzX1RcKyJfUkhCKT9cQydCI18pQVhBX1JURCkvXE4pQjNfLUJUR19WWUk4X186Uiw3XworTVNbWl5fUkxGKU9cRSgiI18pIVw/X1JAQyhfXDQjUS9fJSEgMl9RODElP1w4JFE/XywiOEJfWypFSC9dIworTTAzS19OSyJMX10vJ1BfXzxUPSNfLSJcT19SPEIpL1xYLSMrX09bLkRfVERfLl9fRVY9S18wQ1RfX1I4QgorTSkvXEAmUV9fKFI4UV9UKSMzT15IRyk/Xy0iQERfXVsxVC9fJk47W18vJEExX1U5PThfXjVEKE9fRlkyNAorTV9eTz5WP10wNCVPXy80IStfUjhBKF9cRyhSN18qMjRHX1U5MjUvXUc4RjNfNFRdMV9SLD4oT1xLKVJHXworTSpCOERfVD0nMS9dRzYlU19BKCYnX11DMFRfXTg4JktfMzU5PV9UQS82X101NkYjXz0mTUtfXjs5V09dIworTTFFK181JU1BX1Q4XjA/XztTXStfMCQ5MF9XIVM9L11JOiZfXzFUSStfWVo6Ry9cVC1DT18rMlBSX1o6QgorTUpfXFYuNDNfK1MoV19SWFQvT14/REknX0w5XkFfVk0/Nk9dPDVVJ186JkVDX1ZZSjhPXV06Vj9fUFsqWAorTV9dOyxSL18xT1tTXz1GJT9fWkpBSD9cRChSR18vUzxbX1I4RCg/XitDSENfOVZRSl9VJTU3P11RPCZfXworTT9HUVdfVT05NU9dMDQ0T180VSUpX147JVVPXU4yJkdfVys3OF9fT0JXP101MiRXXyoyKExfUkRGLE9cVQorTS00I18+Ry1HX1k2LT8/XytPW0tfWS0jLF9UPSQyT1xTLFQjXy4jPSRfVTk1Ny9cSSgxX18sQjhHX1MsRworTSovXFQqQjtfRDg1Xl9dRypRP18lTUs7XypSLEZfUig9J19cRScyI18rQjRFX1JMQCdfXFYqQjdfQEghWQorTV9dKyBPP18yUDwnXyoyMERfUjRAKC9cRigyJ18oQVQ9X1FQNyZfXDYkMTdfJVEoNl9RTDYmT10lLTMrXworTUlZTjZfVFkrMU9eRkgpW19XPF8sX10/LFJfXFArMlNfKUIkQ19TKE4rL18kTUo/XzU0VSlfXis5Vj9cWgorTS0zN18pQihEX1FIOCZfXEMpQydfMEQ1MV9aOjdEP10yMSQnX1g9LzRfWz5MTF9cXDIlJ181RU1BX1lGMworTUQ/XjBCOEdfWj1TN19UOSY0P1xYLlQ7XylSLEVfUjxDKT9cRSgyL18pQihEX1JUSSpfXk5KSlNfKFFcQQorTV9SQEQpT11NOCU3X0BXTUtfWVonPl9dUDhVQ19WTSswX1UtNzlPXE0tM19fMTRROF9VSTw4X11dPSczXworTVo9Sz9fVDUoNS9dLzQ1Q184JTk5X11bL1UvXSQxVStfQ0kuM19XMVI+X10lMiRHX1I8MyRfUzBTLk9cTAorTSpTK19GSUJBX1MsVC9fXFguVCNfKSJIVF9aTj5HP15ORklTX0NHVVdfVyFENz9dIi5TN19ESDFbX1dNSAorTTgvXytPXENfMDNdIV9TQFMrT11GNlVLXy9DUFlfUkhMKk9cVi0jO18oIVRDX1M4Vy4vXVQ+JztfOkZVUgorTV9ZRjZFP11IOUYvXzwnNVFfVTE2NF9dNDU0X19aK08/X1hBLkgvXkY5LSdfUVlTMl9VUSg0P1xVJjMvXworTTFTIFtfUzROKi9eKT83R19GSEY0X10zKFEvX01WTTNfNFRdN19TPFcxL100NFYjXzZVSUFfUkhCKC9cSworTSdSI18rUixEX1NUUytfXiM9VyNfVSw3IF9cMlVNP1xLKFI7XyghTD1fUkRBKS9cVCpST18sMjhFX1NQUAorTSpfXipCKCdfVyxLJ19dMyNQX1xOKjJHXylCJEFfUiw+J09cSikyN18pUihGX1FINSY/XEEnIiNfJyE8OworTV9VMSQwP142Qkg3XzhWITtfWkZDSD9fO1M8S19VPEspX1MkTis/XEgoUjdfKzJER19cNldKL10+NUUrXworTVktTztfU1BXLV9cRyhSN18nMUw+X1QhIzNPXFsvREtfTComO19VXTEzT19EVU0/X0s6JkpfVCktNi9dMworTTVVX183RT03X1glWj5PX0RVXStfM1RdOl9SVFAuX1xEKCIrXykyJENfUiw/KD9cRCgiK18oQVhAX1IsPworTSg/XEYoQjNfKDFUP19STEMoP1xTLDJTXzc0WS5fWkI+Rk9fN1NcV18zVS1CX1JMUy8/XSAxVS9fNyVZRQorTV9YXiZBT19GVV1TXzI0UThfVSk0Nl9dQzY1U19WTE8wX1NIXTIvXV5AWC9fODVdSF9URSwzP18+Vj1HXworTStSWFVfUlxOLT9eNERJT18vI1UoX1NVIDE/XE4tI1tfTUpGSF9cIkxLT15KRDhLX0hIQV1fWko0Qy9eWQorTUdZM19DR11SX1xLI1NfXFAsU1tfKFI4R19YVV9AL14zQDdXX1dMTyVfVEhcLz9cPCVBW18oMVxCX1VRPgorTTZfXUs7VldfPSclUF9XXV4/P11XPydLXzlWTUlfVVVAOD9fPlZcX18rMkhJX1MgTi1fXFgvQ0tfP1daKworTV9WOSNCT15DPlpfXzEyUStfWkoqTz9dWzYpQ19UXCssX15TOlQvXSoxRF9fL0NZK19VLTI3X1xdLyQvXworTSpSLEFfUlxDKS9cUCkiN18vQzBQX1cpRjdfXzdSLC9fSylWPV9STEMpT1xAJlFXXylRXEJfUyxKKk9cTworTSkiL18sMjRAX1hGJ0AvXz1SXENfVEwnIV9SOEEoP1xEJ1FfXyoiLENfUkxGKU9cSChSP18qMjBIX1I4QQorTSk/XD8mQVtfPFYtQF9YUiA+X11aPVcrX0laJj9fXiczVC9fKk9bW18rUlBLX1I0QChPXEwqIjtfUSs6RworTV9XNU06P19HV01bXy5DNFVfUjxDKT9cRChCN180RTVAX1QxJzRfXlpKWjdfPTY9RF9eRztXL141QjkrXworTTAkSThfVVE/Ok9eQ0ZZW19HWUI4X15DO1VPXSMwVFtfK0MkXF9SSEYqL1xGKEIzXyhRXEFfUjBAKE9cQgorTSdCI18oQVhAX1IgPCdPXEInQiNfJVEgOF9SRE4tL18qUTxPX08rMlhfXVMzVF9dMTU2M18oMkRTX1QhJworTTRfXUw7RzdfRVhaLl9dUy1UT10uNDVXXzsmWVVfVz1NPC9fPVNNL18xJD0yX1g6K0JfXUE3VkNfL0QlIgorTV9cOyFQP1xHKUJXXypSSFFfWS4xRk9cVy4kL18tU0hfX1I4TC1PXlhKWktfUztGW19bPkJFT18kSilLXworTU5ZWjJfXCZFRV9eO0JHS19VLEM3X1JYTjA/XEEoUk9fLjM0V19YVVw9T186UFs/XzAzNFZfUjxDKT9dQAorTTdFR19BKDVfX1hCKEJfXjRDWS9fPCclUl9USTM0X101NkVLX0FYRixfXDsoU19cTjEzK18zJl03X1c2LworTT5PXEgvUlNfKCJQS19TJFosX1xXMSNHXyojMF1fU10iNS9fKlBMN19ZXUMyX1NMWzEvXFwwJF9fMlRFOQorTV9UOSIyT1xOKSI/XysyLEZfUjw+J09cUCpCQ184VVE2X11bMFM/XklGKUNfKUIsQl9SJD4nP1xHKCIjXworTStCNEVfUlhCKF9cUSkiL18xJDRfX10/KFIvXyxOW09fKiIsQ19SNEAoL1xEJ1FfXylCJEFfUlhHKV9cSworTSoyT18uQ1xfX1FcOidPXU83VTtfP1ZdTF9ZJihAT15ER1lLX1otRzpfW0pOS19cTSpCR18oUVg+X1IwRQorTSdPXk9KOidfRFg+I19eKzVVL1xeLjNHXyhRXEFfUixAKU9dJDFVK18xJEEqX1tSTEo/XjNASCtfWV1DOAorTV9YLV1CX1xXMiU7XzdWKU1fWVI0Ri9fOlNMR19ZTTM2X1M4VzBPXE4sIz9fKiIwRl9SPEMpP1xCJ0IjXworTShRXEFfUig+KC9cQidCI18oMVQ/X1IsPyg/XEgnMVNfMVQtJV9VJTA1T18gTjwjX1pNR0NfVVU2OV9cXQorTTBFM18wREU7X1dVVkAvXlVKOytfWV1XTF9VMTI5P11BODcjX0MoKitfXiMzVi9cXC9UM19DSSIuX1UhLgorTTVfXSIxNDtfU0xPKl9SQEksL1xLKkMjX0I4Qi5fUyxUL19cTiwjQ18rQzhaX1wyWE4/X0ZVTUtfVDwmWAorTV9dLllLL183TVpfX1MrIkxfWUYtQU9fOVEtP18oUyUgX1I0QSo/XEYqUydfPidBVV9ZVjhET14wQlhPXworTUAnTVtfWEIhPl9dRzglS183JVVEX1k2MEUvXEgqQldfLVQtJ19TTSQxL11GOlZPX09cMypfU1koLV9cVgorTTBDL18rVCBQX1RRQzQvXFk1JC9fIyJEN19TWT8zP1xTM0NXXy8lSSpfWUJNSD9fOVQ8V18yVD0vX1MwVQorTTAvXE0qQztfMFNZIF9SOD0nP1xFJlFbXylSIEBfUjxDKD9dLjNUQ19UPD8jX1lSKUI/XEYnMVdfKEFUPQorTV9SPEAoL1xMKFIvXytCKENfUyhFKS9dWz5XQ19VXEspX1xCV01fXEgoUi9fKTIgQF9SPEIoT1xJKSIzXworTStCOERfU1RfLz9dPTkmM18nUUg+X1dNUDk/XUg2NUdfTEpORV9ZTjlFL19EVT1HX01aTkxfUyxQK19cRworTShCK18oMig7X1paSUhfXk1HWVNfWT1DN19TLE4rT1xFKDIvXykiIEhfU0RcMV9cWS9DW19QKlZNX1o+NgorTUVPX05XXV9fOFVVS19TQSk1T10jMVRfX0paIkVfXic0U19fRlQ9O18vM1UqX1IgQio/XEgoUjdfKUIoRAorTV9SNEEoX1xCJ0IjXyhBWEBfUig+KC9cQidCI18oQVhAX1IsOyVfXTE0JF9fLyQ1LF9YQipEP14rQjhPXworTTI0XTFfU00nMy9dIDIlK18+J0lfX1Q5JzNPXEgrQ0NfJyI0U19UUTU1P11ZPkdPX1FcJylfU0ReMk9eKworTUI4T18zVE00X1QpJTFPXylRTDdfK1MgV19SREkrL144RjlLXy8jWSZfUzxYMF9cTy1TT19PSypTX14rMworTVYvXVc8RlNfUjtaV19dXzJTP145Q1hPX0ZJNi9fXVsnVk9cVTIlM18pQiBIX1NJIjMvXE4sU0NfOiZFSgorTV9UKF0wP1xVLSNPXzREUSpfWzZJSE9dPTYlQ19EKDInX1NIVS5fXEEqIltfMFQ1KF9aRkRJL18kUF0jXworTSdBUDlfUiw7J19cNyZRR18nUjQ3X1NZIy1fXFkwQzdfKzNITV9SLE4mX1xCMEJXXzo4XiBfXDslUS9dKQorTTEkS18wI1knX1M0Ty1fXSAuM0dfK0IoQ19SNDsnT1xLKSIzXykyJD9fUiBEJy9fKFBbW19AVyFQX1MoRAorTSk/XEQnMVdfKVIgQF9TLEoqT1xNKDIrXywiLEJfWD4nQS9fOlM8U19PWlpOX1JERCkvXEQnUV9fKzJASAorTV9TIEsqX1xWK0JTXzk2PUVfVV1GOU9cQydCK189RlFBX1ZJPTcvXixCSC9fQyheKV9ePzhXL15QSSo3XworTStSUEtfUjhBKD9cSypCL19LOjpAX1xCWk1fX0tYLV9fLDJYTV9SLD8oP1w7JVFfXywjLF5fU1EjMF9eXworTUtKW19PWyJQX18rRVkvXU46JztfMjU5QV9VOTc3T15SSUpHX1g9Ny5fXj8yVV9cXy9UU18oIihJX1I0QAorTShPXEMnUidfKFFcQV9SIDwnT1xAJyFbXygxVD9fUig+KC9cPiZBU18qUixBX1RFKzNPXSY0RU9fNkY1TAorTV9UMS82T1xZMFRbXypDJF9fUyhRM09cUClWL18tIklPX1NcVj8vXTs0OUtfJiE1KV9WNT9CX10hLzVXXworTS40JStfWTY0RF9dODUlV18zJF0wX11HNlU/XFAsQz9fLCMkUl9URSsyP1xQLENHXywzKF1fUjxPLF9fIworTU1bQ19ZLTc6X1dZUTsvXyBKWkdfVyxHKV9YOVI7T11XO0Y/X1UrVzBfUTBHLF9cRSdSP18tVCEuX1NEXworTTFfXEEoUjtfLCJQVF9SJEQrX10sMiRLXz4mSUFfVzlLOS9eMkA4J18xQ1UkX1IsRCpfXF4vI19fTUpOSgorTV9dVy5ZT1xHKlMvXy5URThfUjxLLF9cVi1DL18wRCBdX1NcWy4/XDskUSdfKyJUR19SVFMrX105ODVXXworTVU9KzFfU0BZMC9cTSwjU18uQz0kX1ZFRDovXEwoQjdfK0IwR19SOD8nX1xGKEIjXy8zUFVfXT8rUV9dTAorTTZVT18pQVw/X1IkPic/XEcoIiNfK1I4Rl9SVEEoT1xVKiI/X0NIWitfXVsxVC9eU0hKK18qMjBEX1IwPworTSdfXEgoUi9fKkI0RV9TQFArT11FOVY3XzhGRUlfUig9KD9eOUMoJ19QWypSX1gtXD1PXUk5VitfWT07OgorTV9aVkFIT1xJKUI3XykyIEBfU0BTKz9eXU0qW19VLEMkX14zPFZPXFgtMzNfKSIgQl9SIDwpL1xSLTQjXworTS9ENSVfXCpTTF9fLE9bW19bXjNDX1clSj1PXSc0VVNfN0VVQ19bRktLL19JVk0zX1k9IzVfVDUlNE9cOAorTSZCJ18pIVxBX1I4QikvXEMnUidfKCFQPl9SIDwnT1xBJzFfXyhBWEBfUVg6Jy9cVSlSQ18yVDksX1U1QAorTTpfXTE2VjdfMVRVPV9SQEgtX11ANzZfXzxGWjRfUixCLj9cMCQhX18jMFQ6X1BIKSVPXDsmM0tfKyI9MQorTV9TRFQ1T1w/KDJDX0laNkJfVUU1N09dIjE0O19VTS8yX1JMTSwvXFguQ0NfLTM8VF9TKFUuT1xQLDNTXworTSojIFRfXDpaTl9fR1YtV19FN11WX1xGUEpfX0VTLE9fR0g5V19XTVE5X183UC0vXygjLF9fUiQ7KF9cTworTS0zX184RjlIX1I0Ryk/XFErIltfKDIgR19UWSYxL14oPjZTX0InVVZfWSYiQF9dKzEkT18oUjRMX1M0VQorTS4vXkFHKVNfUytTOF9SREosP1w0J1I7XyZRVERfUihCKz9cRSpDO18vJDEuX1EsOigvXEUpIktfKlJIUAorTV9TRFYvL1w/JiFDXy8zRSJfU0xbMk9dKjJFR180VSE2X1JMQyg/XFgrIldfKkFYQV9STEQnT143QlgrXworTVYsUyVfVUUuMz9cSilCQ18oIUw9X1JIQyhfXEooUi9fKiIkQV9TIEYoT14pQkgzX1dNJzBfWjIyRS9cSAorTSgiL18pUVxCX1JIQyhfXEspMi9fK1JER19WVU47X11AOTZLXylCJENfWjIxQT9fIEs6N19RW05UX1w2WQorTUwvXyhOWztfSkouQ19SQEUqX1xFKFI7XzFDQFVfWz5QSk9fP1QtI19aTU88X1MwUSwvXEQoIitfJ0FIQgorTV9TPFoxP10mM0UrXzlFWUFfXS8nUk9dWz43T18+R1VeX1c1Wz8/XUg5Nk9fS0ouSF9fL0FXT184Uz0zXworTTI0WTpfUUQ6KD9cSChCI18pQVw/X1I4QSg/XEEnMV9fJyFQP19SID4oP1xBJ1InXydBTDpfVDhXLV9dIQorTS5UL18xVF0/X1U5OzlfXSwzRTdfIzAsLF9STDQnX1xSKDI/XyUwSDdfUiQ0J19cRyVRX18mMFQ2X1IkOgorTShPXDgiUUNfKUFAR19SIDooT142QkhPXzEkKStfVD0oMj9fMVQsX18rIlhRX1RRLjMvXDknIVdfKCI0SgorTV9TUSExX1xJK0MvXzIkLSdfXVs2Vj9eKT4mT19QOk5CX15HM1JfXjhBJztfP1cxSV9dPltTX1w8K0NDXworTSsiNExfUjhRLy9eMUQoX18qMjhFX1M4UC0vXEkoUk9fMVNcW19ZTis+X14xQUdfX0Q4LiRfVEUkMk9cQgorTSkzI18oUixGX1paTEtPXzpQXiNfKTFQQ19RQDEmL1xBJCFLXygxSEFfUUw7KS9cQiojI18rMyBbX1I0RAorTSpPXE4rMzNfNTUlOV9dOyxTX10iLlQ3Xy5TTSpfVS0zOC9dMzNFM18sIkBGX1IkNSYvXEwoIidfM0Q0XworTV9bXlNLL188U1xLXzFDWFxfUkBCKU9cQyZRW18qMihCX1I0PidPXEkoQitfLFJERV9YRipBL18+VD0jXworTUgoWjBfUkBAKF9cRydSK18qIiRBX1JQRikvXFArIktfN1VdQl9VVUI5X1xFKCIrX0wqKjlfVjU4NF9eRgorTUdJU19JSVI4X1wuV0wvXj5FSTNfKiIsRV9SSEIpP103MiRDX0UpKi9fXVsyVT9fQlRdQ18rUlhNX1IwQAorTShPXEInQjtfLVNJJV9TVSAwP15cTSsrX1ZMTytfXis+Vy9dNTZFM18tMyxVX1YhOTgvXkNGKVdfWz0/OAorTV9cWyVTL1xcMDRXXychTEJfVik6Ni9dNTNUV18mQTQ1X1IsPyg/XEEnUidfJyFIPF9RXD0nX1w/JzFfXworTTYkVSxfVEEpNC9dJjRWM18wNEE2X1I8PSwvXF0qUldfSlkqIV9XOTo1X106LzNTX0YnNU5fWDVBNV9eJAorTThFX18qUUAyX1k6IT9fXkdEOS9fJSA4I19TPEkpT10iMSRTXzI0SStfXTcyVD9cPCdCJ18rIlROX1NdIgorTTFfXFAtM09fKyMkV19SMEcrL1w8JkFXXychPDlfWEFWOy9fIUpaK19aTTMsX1k2ID0vXVc7VjdfVTtXMgorTV9RQEouL1xMKTJfXyhTIF1fWjJAR09cTCoiS18vIzxdX1JcSCxPXSAuIztfSCkyJV9YKVk8X14pPzdbXworTTdVTUNfUjhJLT9cWy5EI19PKz5dX1w7IVY/XFItM0tfJyIgSF9RLDInX1w7JVFHXyRRLDZfUTg3J09cPAorTSVSL18nITw9X1EoLiVPXEopIlNfVCwzJ19VLSw1T10gMCRfXzA0JS5fVSErND9cTChCN18qUVxCX1RRIQorTTAvXFcrIk9fNiRVLF9ZPi9DP1xUKzJXXykhXEFfUjg/J19cSykiM18qUjBEX1JAQSg/XFIqIjNfQjhKJAorTV9eJzRUX14rPjdPXyhRTD5fUjQ9KC9cSykiM18rMjxFX1JUSSlfXUA4Ji9fNFVBPV9SPEIpL147RDhXXworTSkhVD1fUUg3Jz9cQydCK19GKFInX1o6O0ZPXTc0JSNfKyIgPF9bWlJLT14hQFgnX0taNkhfXUsvVS9cUgorTSwjK18pMiRDX1FcOyhfXFYuNDNfL0NcWV9cRl9OX19CVF0zX1hdOzFfVSUvMV9cXC4jO19TLCcmX14/OAorTVcvX1VXXVdfUywvKl9TQF0yP1w7JkInXyxCSEhfUzxRK19dIi8zV18mMTQ3X1IkOiZPXEUnQVtfKCFQPgorTV9SID0oX11aPEcjXy8jWSVfVD03OV9cWzE1L18uNCkiX1FMNixPXUk1SDNfJTBQPV9RLDQmX1wyI0E7XworTSVBIDhfUTAxJ09cNyVBV18iQDg2X1MkSzA/XDklMVtfKTFQPF9TXSMyX10pMVRHX1VNJzFfUiA/KT9cTgorTSszL18sMyxaX1JYUi5PXFAtM09fKTJATV9TIE4sP1xBJyFbX0JXTVJfXCZNST9fSVUtI19GKDVbX1clTQorTTk/XytNTFNfJVJEV19SOD4qL1w/KTM3X1FbXl1fUlRIKk9dJC9UN18rMkRRX1NAUSw/Xj9FOE9fQTgxXQorTV9YVipCP11GOUZfXypCVF5fVDUhMj9fJE88P19VPEdCX1Q9KzM/XEcsU1NfJSFYTV9TIFAvP1w+J1JLXworTSZBTEZfUjA9KV9cOCQxQ18mMSw7X1JYRytfX0RVPUdfMVQhKl9TVF0zL1xWLUQvXzNUSTBfUkg+KV9cSQorTSciJ18rMiw/X1JcQykvXDolIUNfKEFQQF9SKD0nX1xKKEI3XylSIEBfUkRCKE9cSykiM18qMihCX1MwSgorTSlPXUU5RiNfWC0vMl9YJU88P1xFJzIjXykxVEBfUlBFKT9cSikiK18qUjxFX1VdPzhPXTk3Ri9fJyE8OQorTV9cQlxOL1xFJ0FbXyhSIEZfUig8KC9cNSNAW18mMTA4X1ZBQzlfXEgnQUtfS1oiOl9cJl9NX18kTisvXworTVArKk9fUzRULF9cQydSJ18mUTw/X1M8WjE/XS00JEtfUjwvJ19eMzdYT19GVV1DXzk1XTVfVkFANy9fQworTVUtQ19cTV8/X18vPVZfXyVPLC9fLyQlLV9SNEQqX1xeLUMzXzY1LTFfVlFHOV9cQScxX188Nj1DX1JMQAorTSdfXEUnUi9fJ0FURF9ZLidCL1xRLCM/XzA0UT1fU0RdMy9cXDIkV18hQExHX1Y5Q0YvXFktRjtfJiEgTAorTV9RTCwnT1w+JCFHXydROD1fUUw5LF9dNzVYI180RSlZX1BcLydPXEUoIiNfK0MwXF9ULSEwX187VE0rXworTSpCRFBfUlhNLS9cVi4kI18qUlhZX1I4SixPXEEpIkdfKlJETF9TSFUtX15fTCpLX1VMLl1fXlc4VU9ePgorTUJYL19BOCFUX11DIFNfXSAzRT9fK0FUQ19XOVZBP182UVw/Xy4jIFNfVl1MPE9cVS0jT18tMyBSX1tOUworTUtfXjBFWSNfMDQxJV9VST06L1xTLiRLXytSTFRfWjI9Sj9fNFEtQ18xM1kmX1IsQClPXEEnUkNfLVM9IgorTV9TRFoxP10zNSVfXylCOE9fUkBILF9cPydSQ18yJCEjX11bL1NfXSMvVENfMFQtMl9TUFkxT10gLlQnXworTSkhUD9fUkRAKC9cUioyR18sUkhKX1FEMyVfXDolMU9fJ0FEP19RVDgnL1w7JFE7XyghRDlfUjQ+J09cSAorTSgyJ18sIkBEX1kmKEBPXzdSLC9fOkVZOl9SPEIpL1xBJlFfXyoiIENfUyRIKi9cRChBX183Ri1DX1YpRgorTTovXipBODdfNCRBJl9SID0nL1w/JzFfXyhRUDxfUjQ9KD9cQSZRX18pQiBEX1JIQik/XS8yND9fRDhaKQorTV9ZUjdEP15UTCpDXy1DJFFfUyBLK19dXz9IN18tI0EgX1YxRjkvXltNS0tfVy07Pl9dMzRUP15dUFtfXworTUpbJlNfXTMxVV9fTFZdT19cTVM0X1tGVU1fXF80JTtfJTIwRF9XPVg+P15aSzpDXzc1LTZfUVg8J19cPQorTSchT19EKEooX1Q0WS0/XEMnQitfSTlGNF9YKVk+P1xPLDNHXyxDMFxfUlRVMT9cWjE1O18iIFxDX1I0PQorTS4vXUo5KVtfNDRaMF9TQFg8P1w4JlRLXyZBKE1fUlxJL19cNCQyM18lUTxCX1FAMyVfXDsmIVtfKDIkRAorTV9aQkhKX1xLK0MvXysiWFNfUzhZL09cTCtDN18oUkBOX1FYQSlPXEUpUktfLFMkU19cIlZLL15SR1k/XworTVdMOyNfWS4hPV9eJT0mW19LOU4/X1ZRSjsvXiI+VzdfWS0/Nl9eLy5TL15QR1lfX05bKlJfUjxFKi9cTworTSpCW18tIyRQX1IgRiovXT85RjtfKyMwXl9TKFcyP1xQLCNPX1RcTzVfXic0WU9cUipDM18pMiBEX1E4MgorTSZPXDkmIV9fJ1FYRV9RVDwoX1xAJ1I7XydBWEtfUjxIK19dRTdFW19XXSMxX1M8VS9PXFAsI19fMSNZLAorTV9UKFswT1xNKUI7XykxWD5fUjQ+J09cQiZRT18sIkhOX1FENCYvXDUkITNfJVEoNl9RSDIlP1xCJlFPXworTSpSMERfUkxEKS9cViwzJ18pMVRAX1dZUj0/XUE2NVNfKSFcQ19SJDwoL1xLKFI7XytSOEZfUjxGKT9dPQorTTg1X18/KCFeX1lKM0RfXE8pMkNfJ1FMPV9RRDomX1w/JkFTXyghSD5fUig8KC9cPyYxV18oUVRBX1FAMworTSVfXDwlUU9fJzFIOV9VMTIzX14vQkhTXzNUSS5fUVw+KT9cXTA0R181VVE4X1wjIlE/XzNUPidfTys/KQorTV9SLDwrP10pMFUnX1U8WzhfXks9Vy9fSlVNQ19JWVJJX1RJIjVPXFwoUzNfPVZZVV9cLlRLT10rMCQ3XworTSgxWERfVlFLOk9cUCpSO19GWFotX1JEQylfXlhLOjtfKiFYOl9WRUg7X10kMURXXyZRXEdfUz0gM09dJgorTTNWI18vVCkuX1EgLSZPXCkgIStfKEE8Tl9QWCcmP1xJKSMjXyZRTERfUyRUMC9cSCtTV18pIjhNX1FEOQorTScvXSkyNFNfJSEwN19RTD0oT1xJKyMnXytTKFdfUlhRLU9cRCoyX18oUjhLX1I4SCpfXF0vQ19fT0sySQorTV9bLj9FX19GU1xLX0RYJVdfWFlbPF9fIUxKV186NV07X1VZMjI/X05XXUtfWS0vM19dPyhSP10lMCQzXworTS4zSFtfUixBJ09dQTdVS18qUyBOX1JETSpfXScyNSdfLSMxJ19TME8uX18yUUxfX1YsTz1fUlhGLC9cUQorTSsjI18nUUxDX1FMNydfXEInUjdfJzFIQF9TIE0sX1xRLDNLXyVRMDpfUzxQLC9fQ1UtR18uU0EkX1NcXworTTNPXF4uJDtfLFJQU19SOD8nX1xHKCIjXysyOEZfUjg/J19cVitDJ18sQkhNX1M4Tiw/XEImQVdfJ0E8NworTV9SSEMoX1xJKEIrXyoyKEJfUjRAKS9cPiZSJ18nIUQ/X1FUOigvXEgoUkdfKlI4Sl9STEMpT1xNKSIzXworTSkiLEJfVj1FOC9dRjg1T18qIVQ8X1sqR0tPXVM7NzdfKUI8Tl9RVDwoX1xCJzInXyghTD9fUVg5Jz9cQQorTSciI18oUVhEX1IoPShfXD8mQiNfJkEwPF9SND8oX1xBJyIjXylCNExfUkxPLV9eQkY5R19JWkZMX1dSOQorTUk/XTxBWV9fMCNNNV9WRTM6L15PR0pHXzolWUFfXVMvU09eLUNJN18uVE01X1M9IjBfXi5DWSNfVTw7IAorTV9TWFMuL1xHKSJLX0YpLi5fWV40RF9eNkJIV18nQUQ7X1w6WkxfXFosIlNfT1tbJV9UJSMyT10+NyVbXworTS0jOF1fU1EnNE9cXDJVJ18nUkQ/X1Q1KDBPXjVFKU9fKjJcWV9VUT85L1w7KCI3XytDOSBfUUBCLC9cXQorTTFEU18tI0hcX1QhIjE/XDklUUtfJVFEPl9SVFAtP1xJKyMnXytDJFZfUiRGKy9cQikyS18rQyBTX1NEWgorTS5fXl5NKkdfSzlGMV9eKytRT14sPkcjX0YoQV5fXCJUSz9dXzxWU19KKTYpX14/N1UvXy5PTCtfMTNIXworTV9SXFItX10hMUQ7XzBUJFxfWFYtQC9dRTlVW18qQkRIX1JUTS4vXVc9KDtfMUNdJ19bTlFNL18+VD4vXworTSoiIEpfUiA7J19cQScyN18oQVRDX1FMNiZPXD8mQVtfKiIsR19RTDgnT1w5JTE/X0k5Wj5fXUsvVU9dIworTTBUW18vI1ErX1QgWjIvXFEqQydfKVIgQF9SLDwnL1xLKSIzXylBXD9fUlBDKF9cVSsiU18uIlxPX1MgRworTSlfXFIqUk9fKlIwRF9SPEAoL1xLKSIzXypSLEdfUTQwJS9cNSUxQ18mUTQ5X1FQNScvXDwlUU9fKCFAOworTV9STEIoT1xDKDIvXzxGVUdfVDxdK19eQURZI19UTDcwX1YpOzlfXDkmQjdfJ0IkTF9TLFIuL1xFKFI7XworTSghWEFfUVg8J19cQyghX18oMVg9X1IkPCgvXEEnIitfKUFcRl9RWDknP1w8JlIrXytTLFtfWUoxRi9ePAorTUg6J18tRF0uX1Q1PzovXFotVDNfRFguK19bRkpLT11BNkYnX1ktV0dfV1ohRE9dITI1V18rQkhSX1lONgorTUZPXy9QK0tfLVJQUV9STEgrT15WSjozX086Wk9fV1VSPj9cSChSL19RO0ZQX1lOMUM/XyhRXFtfMyRZNQorTV9RODQlT11fQDhDXzBUVTtfU0kmNT9cPSsiQ18zJFkzX1heKkcvXEgsRDtfJ1IsRV9USSszL1w+KCJDXworTSoiTFxfU0xdMS9cVC4jS18wREEqX1NNITBfXE4sMztfK0MkVl9SREwsP1xKKzMrXylCTFFfUkBLLC9cVAorTS1DR18pIjRGX1wqWEs/XldIWU9fWCxHJF9YTVk7X15AQzg3X05aTkhfVi07Nj9dMzJUJ19ZTTMwX14rLQorTVJfXjZCWEtfLTNIWl9TLFgvP1xBJ0FXX0QoSiJfV01ZPD9cRilCR18pMkBUX1JMTi9fXTM0RUNfQTg2IgorTV9eJy9YX1xRKyMjXyhCLEpfUyhOLU9cRSgiK18lIFwzX1FYOSc/XFErIyNfMFNdJ19SQEorX18sT1wzXworTVY8QzJfVUE2Oj9dJjI1T18wVC0uX1JEQSk/XEonUVtfLSJESF9SWEMoT1xLKCFfXywiQERfUlBHKE9cVAorTStSS18qIiw+X1MoSilPXFIpUjtfK1IwQ19SWEMoT1xJKEIrXypCNEVfUVA3JV9cNyRBK18nMUA6X1FUOAorTSZPXD0mIUNfKlI4Rl9RVDYnP14lPkcvXz1GRTxfVDxYMF9cUiozS18pMVhIX1FYOihfXDomMjtfJjFIRQorTV9RQDgoP1xJKjMrXywzJFpfUkxMKz9cQyhCJ18oMVxBX1FcPSdfXD8nMiNfJyFIPV9RPDUmL1xVLSNLXworTSVRMDpfUTQ1Ji9cPygiJ18rUkRNX1IsRCk/XTMyRDNfQTc5UF9WVVQ+T103RDo/XzIoQkdfUyFQQ19cWgorTTlIQ18qQyEmX1chOjZfXFcoQj9fKSIkR19bOk9KP18wTjtLXzg1MTlfUlxNK19fLVA7Q186Rk1WX11LMQorTVQ/XSEyVUtfNCRZMV9cIl5QL10mNCVfXy9ESTlfUTxDKE9dJjEkJ19BKCoyX1IwTS9PXEwtMzdfKTIoPQorTV9UTSo1X1xMLTQvXy4zUSFfU0heMC9dJTI0T18sU0RbX1M8XDA/XFEsUztfJDEsNl9TJFYvL1xEKVMrXworTShSOEtfUUxAKC9cUCxTM19MWlpOX103LlNPXzlTXStfVV0jMF9eIzBVL19EVE07X1A7IlZfWypDSV9fTworTVU9Q19XTS84X1ZNRjovXVQ7VkdfKyJYS19SPEYpP14hP1dLXzpWRURfVDklMl9cSSpTS18mQVROX1MkVQorTS1fXSUxRD9fWE0nSV9TMFMuT101NyZDXyghXExfUVA7KE9cQigiR18oMVxIX1IkPyovXFIrQz9fJlFYQworTV9dIyFRP185Ui0rXzclTUxfVFEvOC9cXy9UQ18qUixGX1JMQCdfXEwpIitfKjIkP19STEMoP1xMKUIzXworTStSREdfUkRDKD9cRighW18pIVA6X1JURShfXE4pQjNfKzI0Q19SXEgqL1xUK1JfXyhRWD5fUlRIKi9cVQorTSwjI18nQUQ5X1JUSCovXEQnUV9fKSIoRF9YTV4+P10lLVNDXylDMTVfUSg+Ll9cOCYyS18lQSw/X1E4NQorTShPXD4nMktfJkFIRV9RWD4qP1w4JiIvXyUhLDpfUyhRLi9cPydCN18oIVxGX1FYPCdfXD4nIV9fJyFIPQorTV9SPEUqL1xJKVJLXyRRJDRfUiQ/KE9cRikiP18nIUxBX1YpNjRPXyNMSlNfOFZFS19RWFkuT1wqKSI/XworTSdEPSxfVjIlRD9dOj84S19IWlpJX1M4USxfXE0qIltfTUtKUl9cUlpPL10nLyQnXyoyPElfXEpeTT9dJAorTTJFS19VPEspX1NBJTVPXitCOFNfUiwvI19UKSw2X1xXMFUrXypDOFVfVFEqMT9eI0E5M18pIlkiX1I4UgorTSw/XSEvU0NfM1RZO19RTEUsX1xQLSM7XypCWFBfUlxTLT9cRypSV18qMlhUX1JcUS0vXEsrMyNfKzMkWQorTV9SSFAuT1xBKSJHXykiQEZfUzRVLi9fKE5LT19RSzJWX1wmT0w/Xl1KWldfSzleQF9aJjVFT15BRTk7XworTUY4Vi5fWS1YP09dKjE0R18tQzBWX1UtLjIvXU47Rk9fJkFEOF9SOEUpL11CODYjXzYlPT5fUkBJLk9cRAorTSlTQ18tI0BaX1RBJjIvX0FUXl9fKlJUVV9UQTE3X1xOLCNfXyZBVEhfUjhKLj9cPSgzI18kITBDX1U9MAorTTZPXUk6VltfT0siUV9cMllQL11FOTZbXzNFIThfVDkpM09cSikyP18pMVg+X1IkOiZPXEMnIVNfKFFQPAorTV9SQEEoP1xBJkFLXyoyKEJfUlhHKV9cUSpCS18pQVw/X1JIQyhfXE0pQjtfKkI0RV9SPEIoT1xNKiJDXworTSpSOEZfUzBPK19cSSkiM18pMiBAX1IkPCcvXD8oMV9fMyNcXl9TUFUvX10jOVhTXzUmUi1fUFQ0Ki9cNworTSUiI18lUTQ+X1FANSg/XDMkIVNfJiE0QV9RVDopT1w6JVIzXydRUElfUUQ2KF9cQCcyS18tIyhbX1JESAorTStfXSgxVFtfJ1FYRV9RWDwnX1wzJDEzXyNQVDBfUEwpIy9cNyRBQ18wQ0BbX1FYNCQvXDgmQT9fJUE8MAorTV9TOFUrT1xBLiMvXzM1XUNfU10hMi9fN1IsL18sQjxOX1FQPykvXFgwQ0NfOTVFOl9TNE8sX1xYLSM7XworTVJLWlVfUjRLLl9fL1EsL18tRC00X1lGN0ZPXy1SLENfMCRJOV9TRSU1L11KPFcvXzxXIUtfV1VfQ09cUQorTTAlL18tJCBfX1Q9JS9PXTY1NitfKEJQWl9TWSIxL1xZLzNfXy9ULSVfU1UhMF9cXDA0P18tU0RcX1NZIAorTTBfXFAtI1NfKVJUV19SJEQqP1xFKVI3X0hJUkBfXjsxU19fW1hNV19eLV86X19LQVcvX11ZTidfXk4vPgorTV9fQ0FXL19ZWE1XX10tQzpfVlVLOz9cRilCR18uIzRQX1kuMkQ/XEUoUjdfKEIgQl9SJD8oP10zNEVHXworTStCXSBfUjBHLi9cVi5DU18zVFUvX14zMVlfXEkpQlNfLCM5IF9TOFMvX1xDKFJTXyRRMD9fUSw0J19cWworTS8kP18qUjBMX1JYTCtPXF8tIy9fNkUpNl9VRTk3L1xULVNDXyszKFJfUjhFKS9cQicxX18pMiBCX1IoPQorTSdfXEUoIitfKyIwR19SMDwnX1xJKDIzXypSLEZfUkREKU9cQydCI18qIixFX1I4QShfXEYoMidfKDFQPAorTV9SMD8nX1xEJ1FfXyZBNDVfUig9Jz9cRyhCK18pIVw/X1IoOidPXEMnIVNfKDFcQl9RQEEsT1wwJVJHXworTSdBWEdfUlBJK19cQCgiR18nQUxHX1E4MSc/XDckQVtfJVEoPl9RODQnP1w5JVIjXycxTERfUVw9KU9cOgorTSZCL18lUTxAX1FQPCk/XFMsU1NfNVUxOl9SSEgqX1wwI0EnXyZBQDtfViFANz9dWD5HP18vI10gX1E0NworTSZPXD4oIjdfMFQhJl9RREYpX105NlVbX1E7KlJfXys1VD9cVylSX18oUixGX1hGK0BPXytNW0dfLTJITworTV9TJE8sP18uUEtHXztXNiVfXFMhUC9cWzIlR19EKFoxX1xLJVE/XFQvRFdfK1NNKl9XRV4/T187VU0nXworTTs2XV5fUykiNT9cTS5TS181JSkrX1UpMTdPXFIvJEtfJjFUP19RNDkmX1xSLUNDXy5DWSBfU0hfMT9cXQorTS9UK18zJFkxX1MgVC8vXEUqUzdfKDIwSV9WTUg5X15bTCs3X1RcQydfXFcjT19fNFJMO19XLSsuX143OQorTVU/X0hWTT9fWT0/NF9eSzxWP19WWE1bXzclWTxfVlFOPD9cRCgyI18uU0RbX1FcPSgvXSYxJD9fJkFAOworTV9VTTo4P1w+J1MjXykiPFhfUzBYLk9eIkAoK19ZPU9MX1MwTC1PXE0pUl9fJ0FMQV9SSEwsP1xDKTJTXworTSgxXEhfUlhJLT9cPyZCI18nQUg8X1FAMyU/XDolQUNfKUIkQ19SNEMpT10hMCQ7XylSLEVfUUAzJj9cNworTSUxQ18lQTw4X1EwNiZfXDAiUF9fJkEwOF9RRDMlX1w5JFE/XyRAUDBfUUg0Ji9cMyMxJ18mUTQ5X1FMMworTSVfXDEiMFdfJDBML19RJCwkL1w2JDEvXychPDlfUiw+KC9cQydCI18nMUA6X1IsPCVPXDwnQi9fKiIsSQorTV9RWDooT1w9JzI7XycxVEZfUVA9Ki9cTCpTK18sQyRXX1IgPyk/XDglUVdfJkE8PV9RSDcnP1w5JUFTXworTSVRMDpfUTw3Jk9cPSciK18pQjRMX1FUOilPXDclQVNfN0VZQV9TIFAsX10sMyRfXytCSExfUVRAKD9cWgorTTBEM18mMUw+X1E0NydfXDwnIjdfJFE4N19WLT83P18kTzs/X1pNSzdfUkhGKi9cRygxX19MSjo/X14vKworTVNPXFAqIlNfLCJQTl9cLldMX11OPVcjX05bNllfU10yNy9eMEQ5K19QTDMpX1M8XTM/XFkwNTdfPkgmJworTV9dMyxST11IOic/Xy8kOTVfU1EiMS9dVDsmQ18zJE04X1JYWTEvXDEmUStfKEIwSV9TQFovP1w1JkFLXworTSlCTFBfU0RcMD9dKTIkX18sQzheX1MwVTAvXEApMktfSloqQl9cOldPL15MRlk3X0pJMitfWkIzQV9ePworTUJXV19FWEFbX1k+JT5fXVs6JiNfQkdRU19ePzJTP11DOFYjX0paTk5fVEklMT9dKDE0T18oIUw/X1gpXworTT9PXUk5Nj9fOSVdQ19VVT07L1xDKVNXXy8jVSRfWTYwRU9fSVcuP18mUSQ6X1I4PylPXEAmUV9fKEFUQworTV9SMD8pP1xHKSJLXysySFBfUUAzJV9cPSYxT18lUSw1X1E0MSRfXDckISNfJyE8PV9TVFwwX1xEJ0IrXworTTBDKFpfUyRAKU9cQSUxO18pQUxAX1FQMyZPXD0lUU9fMzQ9K19RSDQmL1w3JDE3XychODpfUkhEKi9cPAorTSVBS18nQSw4X1EwLCQvXDwlQUtfJVEoNl9RODEkX1w9JiFLXylSKERfUVw6Jy9cOyYxU18nQUg4X1EoOgorTSpPXDYnMydfJVE8Ql9RTDspT1w7JlI7XyZRTEZfUVA6KF9cPSZSM18nQVBFX1JERywvXE4qUydfLCJUUworTV9RPDQmT1wzJCE7XyRRLDZfUSgyJT9cNSUhT18lISg7X1IoRCo/XF4wJC9fKkJQT19SSEwrX1xOK0MnXworTTUlOTlfVC0lMi9cNyNRL18lUSw7X1MwUy5PXFErIyNfMlQ5Jl9aRkJHL19LVi1DXypCOEhfUlRKKT9fKQorTU87O19aXS82X1JURSo/XFIrMl9fTFoySV9XUiI+T15bTDtPXzAlMUJfWS4oQ19eXk88S18wRT1JX1Q9UgorTUEvXSc/OD9fTStfJl9WITg7L1xOMFRfXztHRVpfXVs2VE9dKTIlN18rM0EjX1JQVCpPXS0zRTdfLlNVIAorTV9SXFIsX1xHKyMnXy4zTSJfVEkoND9cUi00I18qUlBXX1FMQylfXjxEKSdfUytXIl9cLk9JX15eSSk/XworTU86LjVfW15GRT9fJktJT19ROk44X1wyRkVPXyRLOiNfV1w7IV9XJVA7X15TTFs7XzQ0US5fVUUzNl9cRgorTSgyN19EKForX1hCJEFPXUY4Ni9fOUY5VV9STE4xX1xSLENPX0oqIkNfXlc5WF9cQiYiJ18nMVBDX1FUPAorTShfXEkoUk9fJiEoOl9RQDMlX1w/JzFfXykiIEJfUVg6Jy9cPCYhS18mQTg4X1FYNyVfXEUoIjtfLzNRIworTV9SOEApL15DRjlTX00qWkxfWEYmQD9cTCoyQ18nQUA8X1EwLiRPXk9KOldfJlE0OV9XIUo7T1xIKEI7XworTTZVNTlfUzxRLT9eOUNJL185JVFAX1gpXEAvXDMjQStfJTEgMl9SOEEoX1xHKEIzXydRSDxfUFguJD9cNgorTSRBM18kQVhTX1JAVTRPXDIkMVtfJEBcO19RMDEnP1w3JSIjXyZRQERfUVg7KV9cPyciQ18mQTxDX1IgPgorTSlfXD8nMjtfJkFAQV9RKDAmP1wxJCE/XyRBJDhfUSwyJi9cNCRRR18oMixGX1FYQChfXFovI19fLkNQXworTV9RMDonL1xXLjNTXzQkTS9fWTIpQ09dSzkmT19AR1YjX1QpIDBfXUM4Ni9fSTouQF9eRzpWX1xLKTJHXworTStCWEtfXFchTy9fUlZNV18pQVhCX1JERClPXlBIKkNfUCwiXV9bSklOP1xTMyVXXzlHNVtfVl4kRC9dTgorTUFJR182N0IqX1cqMElPXU9EKVNfOEhWP19SQFwyT14iQSg/X1YtIyxfVFktNk9cWTEkX183JVk1X1NIWworTTBPXFMtU0dfPEctVF9TIFMuL1xcL0Q3XzAzXShfUyhVMC9cSysjP18pIlhSX1tOUkxPXy1QLDdfUCpSRAorTV9bPj1EL15TRjhPX1BaSjlfXDJKRT9fLUtZS19QWjIyX1xGUEdfX0BSPDNfPSc1Vl9aRkpMP10/NkVbXworTTlGKUpfUjRAKS9eNURZI19DKEIqX1Y1QDhPXVU9ODNfKzMhKV9TIFAuP15PSipDX1ldM0RfUiw9Kl9cUAorTS5EQ18mUiBSX1IkRi4vXDgmUlNfJTE0QF9RTDYnL1w5JTE/XychQDpfUjxDKT9cVSwzL18wU1BcX1M4UQorTS1fXFEsIz9fK0JATF9WNT02X11QOjYvXzMkRF5fVFkrMU9cQicxX18mMSw3X1E8MSU/XDQjQStfJiEoNgorTV9SLD0oP1w5JFE/XyVBIDRfUVw0Jj9cNyNRL18lUSQ1X1FINSY/XDYkMS9fKSFcQV9SMD8oP1xEJ1InXworTSRBIDJfUVA3JE9cLCQxV18jUSxCX1EoLiVfXDgkUV9fJUEkPV9RUDcoX1w8JkIvXyVROD1fUTg1Jy9cOQorTSYhX18nMVRGX1FMOylPXDsmUjtfJTE0QF9RKDAmP1wzJDFLXyVBNDtfUlBNK09cTiwjL18mMUw+X1IsRQorTSovXEYqIk9fKCJASl9SSE4sL1xNKzMjXypSXFFfUkRKKl9cTytTK18nQihEX1QtKDM/XSUyRENfVCtfJQorTV9SXEYrP1xIKjJLX0tKKj1fXzc9WC9cSSgyN18rIjxJX1tSUExfXzJUPEtfTFoqTV9USUc8T11SQUhLXworTTI1UURfVllXQT9dMjRFX181JVFMX1NZKjQ/XVhESjdfM0ZBVl9XSiBAT187VFxfXzomPVRfUyBbMU9eQAorTUdJO18wI10mX1NNITBfXl5OS1NfKyJcVF9TRFswT10rMjUrXypSWFlfUjRILF9cQytTL19AN1FcX1w+XAorTVA/XkdEWE9fTzouNl9bIjZCL18hSik/X1IrJj9fXFZSSD9fIUk5P19SOypGX11PJ1BfXTo3JV9fS0siWAorTV9VQTU2X11VPDdHXylSKEZfWU45RU9eL0JYV183NUE6X1ZNSz5PXEkrJDdfLSMwXV9WQT04T184VC1bXworTSRROEdfU0UnNy9cMSdDT18wNFFFX1JATzE/XDsnMlNfJyFQR19SJDooT1xNKUJXXywiTFFfUyxRLS9cVAorTStTL18vVCUmX1M4WDAvXFouI09fVixHKV9cUl1NX11ZO0YvXz42VUhfUUg1JV9dQDZVX180NFEwX1E8MgorTSVPXEInIiNfKTFcQ19UWSgzL106NSVDX0AnSV5fUyBKK09cNiQhM18tUyRVX1FENyY/XDwmIUtfKEFUPworTV9RXD0nX1w0JCErXytCRENfU1UlM19cNCJBR18kUSQ0X1EsMChPXEEpIl9fKCIkSF9RUDwpP1w3JVIjXworTSchUEVfUUg6KF9cQihCT18mUUxEX1E4NCc/XDckUVNfJTEoPl9RMDQoP1w1JjInXzIkRSpfVEUrMj9cSgorTSsyW18nIVxAX1FIPSdPXDgmQV9fJiE8Pl9RSDYnT1w+J1I7XylCNEtfU0BaLz9cPCgyJ18uQ0xcX1tSWQorTU0vX0dVPUdfKUIgSF9SWFIsL18iTUsnX109V0BfUkhCKU9cTypCS19MWlJMX11DK1JPXkJHOidfNVZNTworTV9ZTkJLT143RjonXylSOExfUVg9KF9cQilCW185NjlNX1smVlBPXSY3NkdfQEhOMV9dTzVUX10jMUUrXworTS5EMTJfWy5OSj9dIzE0U18uU1hfX1taXE9fXFEtQ1NfLlNVJV9UIF4xX1xHKlMvXytDIFhfUjRNK19eIQorTT43P19OWl5SX11TKlFPXz5SXDdfV0xXJ19dVylQP19CUjwrX1QrTlZfXUMkUC9fMU5LN19XXEcrX1UtNgorTTZfXkVKKldfNVUpOF9YSiZDT1xFKCIzX0hJXj5fWU42Rk9dRTgmM188JlleX1I8SDA/XFMtM1dfO0ctWQorTV9ePzpWP1xeLiM7Xy1DNFRfU0RXLj9cXS9UP18nQiRMX1FMOigvXEMnUidfLEJMS19TNFAsT1xbLVNHXworTS5TSFlfUyxTLU9cTSszO18tU0UhX1JISCpfXUo3NVNfNkRdKF9XOU45L14mP1dHXydBRDtfUUAzJV9cPQorTSYhU18nMUA8X1FMNSY/XTw1RUtfJ0FAPF9RSDQmL1w+JiFTXylSJEVfUjhAKS9cQiciI18lMFguX1laMQorTUQvXFMpIjNfKSFEOF9SPDkmT10uMVQnXy4kLS5fUUgzKS9cNCUxO18lUTBHX1JETC1fXFEsUztfKSIwTworTV9RVD0qL1xBKDJTXychUEdfUTA2J09cMCQhR18kUSQ6X1EsLyYvXDYkUiNfJVFIRV9SQE0sX1xcLkNXXworTS9TVFpfU1RbLU9cXS5TO18vU1RYX1MkTyw/XD4nIV9fJkFAO19RUDonP1w8JkFXXyVRPDpfUUA7Jy9eKworTUFYN19ULEMkX15HN1ZfXEkpQlNfLTMsTl9dMydQT19PVV1TXytCOEpfUyRMKy9eVkw7J19aPUc9X1lCOAorTUZfXTg5RkdfRyoyTl9RLDYmX10uM0RPXz5XVVpfVT04Nj9cSyszI18qMyxXX1NBJzMvXiNCKFdfVl03MworTV9UISQ0X1xZMFUnX0JYOiFfU1kjMj9dJjI0S19SXEcsX1MkWC9PXSIxNEtfL0NVJF9SREwtX1xVLVNfXworTSojIFJfXCZWTT9eXktbL19UXScuX1QtIzAvXSExVC9fNkVJN19cUypRX10vNDRbXzYlVTlfVU09Nk9fMAorTU9cN18yRFUyX1syV08vXUo5Nk9fRyk6Pl9SOEEpP15GSForX0c5Qj5fVklFOj9dVTw4J18qMkkjX1MoVAorTS8vXilBKENfWE1DQV9SQEMpX1w+KCFbXyxTJExfUzxTLD9dIS8zT18zVEklX1U1MDJPXSYwM09fMDNYWQorTV9UOSQwP1xcLkNTXypCRFBfUyhTL09cWC1DX18sQkxLX103KFFfXkhHWUdfPUchSF9WRUQ3X1w9JiFLXworTSghTD9fUSgtJD9dUDpWX18nMTw7X1QkWy9fXDslMUdfNjUtN19RODAlL1xFJ1IvXzo2LUdfUVQ3Jl9cPQorTSdBQ185Ni08X1kiKUBfXjtGSS9fQzdNWF9aOjxGL1xfNCVbXyUxLENfUUQ7J09cQCdDJ18mMURCX1I0QworTSgvXE0qUzNfKzJUWF9STEstT1xFKTMjXygiJExfUjhHLE9cNCUhX18kUSA8X1FANyovXDwnMkNfNlVVQAorTV9SLEIqL1xEKEFfXy1DLE5fVDkjL09dIi9TS18vQ1BZX1FYPiZfXF8vU1NfMFQtIF9SMEIpL1w/KDFfXworTS9UMSBfVj1EN19fLVIsL19aTU9AX1I8RypPXF0tMk9fVVw7IF9fLztYL1xHJ1IvXy0iXE9fW0JVTS9fQQorTVU9Q19FWT46X1RNNTY/XDYmIV9fKVJASV9WVUw5P10rM1Q/XzhGLTxfUkhLKT9dPzkmI180NUU2X1hKLgorTUQvX0FWXUdfL1QtMl9TUSY1L15aTTsjXzA0OSxfVCEjMS9fK1I8U18uJCUhX1QlJjFPXSoyNSNfLDMwXworTV9SQEosT1xEKyJbX1BbQldfW1pPTF9fL1FMO18wU1xdX1NMWS1PXS4yJDtfVi0jM19UPScxL10wNFRXXworTTI0OSVfXS8iUk9dMTUlR19NS0ZeX1ZFRDpPXkRHSjtfKUIkRV9WSUc5T15BRyorXzw2UVBfVz1TQF9cTAorTSs0O18rQyBYX1YlQDdfX01WXkdfKEFAQl9QXDAlX1wwJEE/XyZBNDdfUUQ0JU9cNSQhK18mMTA2X1IgOgorTSYvXFIrQlNfMkQ1KV9TTFcvX10rMiUzXzI0RTZfU0RVL09eWUsqT186VVU+X1RNIy9fXU86RjNfN1VNOQorTV9RPDIlT10lMCQzX0hZWkJfUUQ0Ji9cRSdSL18yNC0nX1gxXkBPXU86NldfOVYlRV9WPUE5P14gPkdbXworTSdBQDxfUlxKKS9eSUdZN19DWCVYX1ZNQzY/XVE4JUtfREhWKF9UITM5P1xBJjI/XyYxRDxfUixBLS9cQAorTSgyQ185RiU7X1E4MiZPXD8nUktfJUE4QV9RWD4qP1xHKkM7XyszIFxfUTA0KD9cNCRSI18lUUROX1FcQQorTSo/XidBKC9fJUFAPV9RRDgnT1xHKTJDXywiWFFfUVQ7J09cPicxU18rMlBLX1MwUyxPXSIwNCNfK0JUTAorTV9STE0qT11YPzc/X0gpWjdfWFooQU9fQFU9S18mUVA9X1ZVPDNfXz1SLC9fWz03Ol9TJEkrP10hLyNTXworTU07PlVfXis4Vl9eJkEoP18sQ0heX1FUOykvXUo5JkNfOiY1QF9VJTY0L11JOVYrXzEkJFxfVi0/Nz9cRQorTShCJ19COEYsX14vPVZfXFwwJF9fLyQ5NF9bPlJLP10hMURTXy80ISFfWiI+SD9cUC5DP18wJDkiX1RFKAorTTNPXFYuNDNfKjJIVV9SKEorL18kTjtDX1ErNllfXUctUi9dLTEjV18wM0xTX1UpJzAvX0RUXS9fNyUpKAorTV9WPUQ0X103MkQ3X1U8IyZfVDEnMy9eIUEoR189RyVXX1VBMjZPXTU0JTNfJzFIOV9RVDgnT11POkZbXworTTw2VV1fUkBJME9cTCtDO186NlFNX19HOF1fXDYkMTdfKDEkNV9RVC8mL1w0JEE3XyUxIDRfUUAzJV9cNworTSRBQ18jQEQtX1M0UC0vXSYxJD9fNCRVM19UOSc0T102NjYzXzMkPS1fXDpVS19fR1RMW19DJ11eX1FMOQorTSZfXDUmIUdfJTEsNV9RQDQlT1w6JUFDXyVBKDRfUSQrI19cLiIgU18oIUg+X1FMNSY/XDQjUS9fKCFMPworTV9RMC8kX1w+JjFXXy9TWFNfW1ZUSU9fIExKR19PKzpOX1w+X05fXkpGWFtfMiVNWV9VLTA1T1w6J1FfXworTSpSOSpfUVA+KD9dODVEP18nQUBGX1FcPSlPXDklUUtfJSEwPV9SNEwsT1wzJUIrXyMgVDRfUUg6KV9cLAorTSZEJ18xRDkxX1wiWUxfXEYqIjtfJ0FEPV9RODElP1w2JUFHXyRBNDZfUjRGJ19dNjRUW18oUVxBX1IkQworTSg/XEQqMjdfL1QxIl9RXEMoP10zNDUvXztGUUlfWEopQi9cPSdRV19CV0FOX1xCVEwvXzZRXE9fKFFUQQorTV9VSTQ0T18jTztPX1hNSz1fWCVeQS9cSCpDJ18oIUxBX1clRTg/XV48VlNfLkNRIV9RPDImL104NURbXworTS0jJFBfU0hYLl9dTTw3L19WPTs1X1NIXzQ/XFEuVEdfUEtKVl9UISUyX1xZL0NTX1IsLyNfUjxLKz9cXgorTTAkL18xRD0uX1JASy1PXFItQ1tfJVIoQ19cLllNP18mTSs7X1VcWyhfVSkjLz9dIi9DO180JEBeX15TNAorTVQ/XVA4NTNfPUcpPV9WJTs0X181UFw/XzE0QS1fU0RdMT9cVixTR187VlVQX1I0QShfXD4mQVNfKCFQPgorTV9XNVM9T14gP1hTXysiVF5fUyRTLi9eUEpaX19eLT9IX1FAOiYvXDYkQU9fJiBYN19RMDIlL1w1JCEzXworTSRQWDJfUUAzJV9cWS1TS18vU1UgX1RJKDJfXSUwVDtfMCQpKV9ULSUzP10nMERDX1QrXllfXlc3U19eJAorTT03O18oIUA8X1FQNyY/XDckUTdfJiEwNl9SXEsrP10sMiRLXzZVNTlfVFEmMk9cNCNBK18oUVRBX1MkTAorTSwvXSAuU19fJkE0OV9RMC8kX15aS1pDX1E7JklfWiIpQS9eIDsmQ186Vi1GX1tCRkYvXFMxRjNfJiFEOgorTV9RKDcnL1xDKUUjXyUxQD1fVVE4Mj9cOiYiT18nMVRIX1FIOCZPXDYmIiNfKFJQUl9RODYpP1w0JUFbXworTSYhUFFfUihaOl9eNEVaQ19JKU47X1QsXjBPXDwlQUtfMDNRIF9RSDgmT1w7JzFLXzJEQSBfWiY+Rj9cOgorTSVBQ18rIkxKX1QhIC8/XFIrUltfJFBcMV9RSDUmP1w+JlFLXyoiUEpfVkVJOU9dQjRER19NWkpFX1wqWgorTU9PXEUoIjNfOVVdPV9ZXjdEX19CV01TXzw3LVFfVE0vND9cVi4jV183VUk1X1YpNjQ/XS8zNSNfNiUpNgorTV9UVS0wT10rMkRHXyYxUD1fVzVeP09fPVY9T18vJCE1X1JIVDBfXl9NWy9fMSRFL19TQF0uX18vUlxHXworTSoyTFJfU1ReMT9dIDAkR18qUlhZX1I4TC0vXDkpIjdfUDs6VV9cKlJNT19DVSxbXz01VTRfVSEmLl9dOworTTQ0L19aXTMvX1ddTDgvXitARydfOUYhOF9dMyJRT10hMFRLXy5DWSZfVDUkMk9dXj8nW18oUVxBX1FcOworTSc/XEInQiNfOjY9Sl9RQDgoX1w1JVI7XzMkUS9fWypNTD9fX1s+I18rIVwuX1FcPChPXD0mQiNfKDFYPQorTV9RWDknP1w5JSFDXyYxMDhfUTg0JV9cQCdCJ18rUlRQX1M8VS4vXFkuVCNfL1QhJ19VOTE1X18mTjszXworTVtNTzNfWElcPj9dJS1DS18qMTw5X1E4LyNfXDMjUSdfJiEwNl9VUTg2T11LOTZHXzc1PTtfVEEiMU9dOworTTU1R181NSE0X1E0MCUvXD4mMVdfJEBUMV9YVidBP15NSTovX087QlNfW0JQSy9eRUkqT19QSyZEX1UpQgorTT8vXEMoIV9fJFFEQ19UOTtCX1w5JlIvXzdFLShfUSw4LD9cOiciT18kQSg1X1E4PSpfXEosU0tfJTE8TAorTV9QWDUqP1wwJlNXXyhUJVlfWi5JT19eKkBIO18qMiRLX1E0MyVPXUY5NjNfKEIoP19TLFQrT14uQTdfXworTUhJUjpfUTw1JV9cSilSK19CKCFcX1hSJUE/XD8mQVNfJjE8Ol9RODQlT1w0JSE/XyYhNDRfUyRGJ19dRQorTTc1R182JS03X1MwUi0/XihAJ1tfNTUlL19YIiI/X14mQig3Xy1TUFhfUUA7KC9dQzhWO187RkVJX1siTAorTUtPXl1OS0dfPVc9Tl9TTF4wX1xYMFQzXz8oQiVfXVM4Vk9cWS81K18sM00qX1taVkxPXFMuI1tfL0QtIQorTV9cXytSP1xSLSNPXzBELSpfUzxXMC9cTSwjT18pMkBTX1IsTSw/XlxMWy9fTUpOUF9eIzNRT14oO0YjXworTTRERFtfVik4Mz9fUVctP19DV0lOX1lSLz9PXUk4VU9fVSwzKF9TQFowP1xYLyQzXy9DVSNfWSIuRC9cQAorTSchW183RUk8X1MwUCxPXU06VltfKUI4UV9SJEMsT1xTLFM7X0taSlBfX19OVU9fJ0ZXL18vQVgkX1FQNQorTSU/XDklIUNfJTEgNF9RPDIlT1w2JDE3XyRRJDRfUTg0JV9cNSRRO18lMSw2X1EwMiUvXDQkUUdfJjEwOAorTV9bWlJLT19IVTxXXzpFVThfUjQ8Jy9dKjAjU18yRDUlX1FENSVfXDYkQTNfJkE4OF9VJSszX1xVK1MvXworTSlCIERfU0RTLV9cNiQxN18lUSg2X1FENCYvXDolMUdfJlFEPF9RNDkmX1xaMSQnXzQ1OTBfUyhXMF9fTAorTVZcW18tNC04X1I8Qyg/XDAlQjtfLSVKLV9RTDsqT10zMCNDXycyRSZfUUQ8K09cOiZBV18lMVRRX1FMRQorTSwvXD0oI0dfJCFQWV9SLFc5L1xALzc/X0s7JyZfWSotQ19cTStTM18lQUQ6X1chUjtfXFQtMl9fMiQ4XworTV9cTltOL15PSTpDXyoyTElfVCBbLT9eW0xaX19CODIkX1dVXj9fXEkrMl9fJlFcQV9RWDsoP1xHKEIzXworTTIkLF1fUUQ6JS9cMSQxM18qMjxKX1g5Xj8vXE8rMyNfJFE4O19RIDMlL1xKK0JTXzlWOUVfUyBRLE9cPQorTSgiN18uM1kkX1M0Uy1PXE0rIk9fMCQtNV9TJSEyT14iRChfX1c9RztfUyBUMj9cVjAkX19PWz5TX1M0WgorTTAvXFwwM19fUzxHJ19SXFEuL1xWLVNbXy9DWSdfUjxKLT9cRSkzK18mMihIX1g+IkEvXlVLSzdfV00vKAorTV9YOVE5P10zNEQ/XysyUEVfXV8wUl9eLj42V19KOUIoX1ZBRDcvXzJQTDtfL1QlKF9TOFowT10jMERDXworTUYpOjhfUig+KC9eNUQ5L19FWS41X1ZJSDpfXEUpMyNfKDIsUl9TMFQtX15NSipbX19fK0lfXUZDOk9fIAorTUVWV18/NVBYX1FUOyVPXDEjQU9fJSEkPl9RRDEpP1xUK0QrXyQgVDlfUTg0JV9cOCRRR18lIFQ1X1EoLworTSU/XEsqIj9fUTtOV19fIzZTP15LSElPXzpWNUNfUiw5JT9cRSgiM18mMTA6X1EsLiQvXDwlUT9fJEBULQorTV9SKD0nX1w/JiFfXyhRUERfUkg/J09cVCkiJ18uIixBX1JYPCY/XEcmMUtfKEFUP19RVEIoL11VPjc/XworTTBUNSNfXTsxVF9dOjpXT18mQjhKX1E4OSkvXEYzSDtfJkFcS19XKUI0T1w9LSVbXzxXLVxfVTk1M09cQgorTSwkP183JilMX1JEUDFPXCsnVFNfKENRW19SQFo9L15YTTw/Xzc2LT9fUzxYLj9cNCRBN189JzlNX1UpMAorTTM/XUc3VU9fVDwqXF9bSk9LT10qMiRLX0IoNiRfWEIjQV9dKjMlJ18rIyRWX1JUUC0/XEUqMk9fKjJMTgorTV9SJEMpT1wzJUE/XyZRVDtfUVw9J19cPyZRV19CWDIkX1MsUy1PXFEtI0dfKlJcUV9RQDMlX1w0JEBfXworTSghTD9fUVBGLC9cQCsjL19POz5bX15DO1ZPXVw/OFtfLyRRNl9XJVg/T18/Vk1bXy1TVS1fUzhdMl9fJworTU5bP18wNDksX1NEXy5fXzhUTSNfLEMsWl9TKFUuT1xLK1MnXypSVFRfUkhKLF9cOycyK19PKzJYX1gxWAorTT5fX0NTTEdfRDdVVV9TWFUrX10mMSNfX1xOJzRfWV4nPi9eTEZIU19AVz1OX11fMFUvXSEwJD9fNzY5TQorTV9UISMyL147RjlPXyYxNDdfWUo2Ri9eR0haN188Jk1PX1IoQiw/XEUqI0tfK1JcWF9aWkZKT19cXC5PXworTVc6PU1fXEpAPE9fJkVVV19LSSFaX1NEQixfXD4lUzdfKlIxIl9SQEEsX1w8JVFXXydRSDpfUiA5Jj9cOgorTSRRS18nMUA8X1JERShfXy5QS1dfXF1TN19TXF0uT1xZLVNHXzg1STpfUzhYLT9cPCchR18pUjRCX1JcSgorTSpPXjhDKDdfSUk6LV9dLl1NL19PVFxPX1k8XyZfXyM4U19fTVQ8R19bLTstX18rNlRfX0JSPENfTEoiPQorTV9bQkZIX10mLkM7X1VMWzhfUzEnNj9cVDNFU18uU1kpX1NBNkBPXD8nUitfTDlJXV9SNFs4T10jMTRTXworTS5DXF9fUVBRNS9cNigjM18oIykuX1E8WDs/XEczKFdfKyQhWl9bTllSP14iQkg7XykiIEJfUUAzJV9dVworTT5GW189RzFRX1s2S0lfXzdRW1tfT0smUF9WITs3X10yMzRfX0wqSk5fWEIqQ19cQSlCT18nIVxEX1FEPQorTSdfXE0sMy9fLEM4WF9SPEsrP1xFKUI/XydBUD5fUVw7Jz9eOUUpO18uIzxdX1Q5KzQ/XE8tI0tfJVEsOworTV9SIEQoT1xBJ0IzXygyWFtfUyEgNC9cWS5UL19KOipCX1oiQkw/XS01VjtfPldNXl9eO0BXT14yRjo/XworTS1DXS1fXC5YTV9cWC80L18uM1hcX1xTKFFPXFcuNCdfLkNdJF9RSEEoP1xQLTNPXyRRSEBfUVhDKi9cTAorTSpCV18qMiREX14/M1NfX01WLS9fWl1HNV9fK0RYP19aWS1TX11NVzZfXyc8VV9fPlMsQ19aPT85X1RFIworTTJfXVxBOFNfRilOQF9aNkNJP10qMURDX0kqIkJfWio+SC9dWTxXP18pUjxUX1IsSC5PXEwrIz9fSzo2SAorTV9fV1BaX19BSlcnX1NKLVNfXVZDN09fOklWT19LODVLX1JAOyVPXDgkUT9fJCBENV9RQDMmP1xWLFJbXworTS4zME9fUyRJKV9cOyVRN18sIkxGX1xOXU5PX01WXUNfLjNYXl9RUEEpX1xAJ1I3XywzPE9fVD0rME9cUworTS0iW18nIUQ4X1JERSlfXEcoIiNfQzddXF9dQyNPT19OVixfX11dVzRfX08/VV9fU1c9M19eLVs1X18zPgorTVU/X1JYTUNfXT4rOF9eJy9SX184UTxPXy8kMTRfUlUhNT9cWzE1S18pVCVMX1E8QCtPXj9EWDNfKCMlNQorTV9VTT05L1w3J0IzXyZTLTpfUixQMj9cMiskV18pVTotX1JROUY/XFEzODtfT0tbLV9aWlBLP10gLiNPXworTSYxMDhfWCYkPi9eID9HT19RS1JYX103JlA/XlpLSydfQDdFXV9cOl1PP18pTztbXzEkISJfUFw1JV9cOAorTSZCJ18oUjxJX1EsNyY/XDQmIUtfJiFQPl9RJDQlP1w+J1IjXywyXFFfU0RVLV9cViwzP18uI0UgX1M8WQorTTAvXDwmUitfKUJcT19SKEEpX1w9KkM/XyszWTZfUyReND9cRSpCX18nQkBXX1Q1LzkvXjZFOU9fS0pGRAorTV9XPV5CT1xQLkRDX0xKVk1fU0RfMj9dITBEL19UPFcvX1MgVC8vXFUvNCdfJlIwRF9SUFMuP1xAKzMrXworTSwzVSFfUUA+KC9cNSVBP19XXSMrX18rPVYvX1VWXUNfXj1TO19fPztXP19WVz1bX1wtRzpfXl86Vi9fTworTVY9P19GSFoxX1gyJkM/XkhKWyNfSClOP19WOUE5P15MSVpPX0lKJkVfVy1OPC9cMSRBV18oIjhWX1JYTgorTS1fXkFHOV9fX183S19dRkU7L18tSUdTX1ZKMUFfXEpBOC9fJUU1W19POTFDX1FcLSAvXEAmI0tfLCJJJgorTV9SSEksL1xcLyNHXzNUSSVfU0RUK09cXS0zJ19VLDMhX15XOVU/XFYuU0dfKFJATV9SMEQpX1xNLEMrXworTSVBSDhfUyRTLD9cXy9DV18rMyhSX1IoRiovXEcqMlNfJzFAPl9WUUY5L18kTVsrX1tNOzNfXyc3VS9fVgorTVc9Q19cXVs5X18nPlYvX1hXXUtfW01PM19fRzxWL19CVF0vXzRESS5fUVQ7KS9cTC1UQ18nIihMX1ZNQgorTTZfXEArJEdfKjIwRF9SPEkpT1xTLzUrXylSPFRfUUBNMU9cXTopU18sVUI5X1JVK0BfXyRRTTdfR0laOworTV9RVDUmL1w5JVFLX0BINVlfWD4lQE9fKU9bT19VTEMlX1tST00vXUo4Ji9fVDw3IV9cUl1OL11NOVY3XworTSlCQEtfUihHKz9cVi4zW18pQkhMX1RJLjQvXFsvVCdfMVRRLF9TTF4vX1xAKDIrXydRVD9fXTsqUz9fJgorTU8rX18mQTg4X1FYOicvXFEtQ09fKkIwSF9ROD4oT1xOL1RXXywzXThfU0UjMz9cXTQmK18sJDFAX1I4UworTTFPXDElUV9fLkQ9OF9SWFkxL1w9JkFHXypTIFxfUlBMK19dQTg2M18rIzBeX1M9ITE/XEArIk9fKyM0WworTV9SMFEtT1xLLVNPXylCUE5fUlRLKz9fR1YtL19bXUs1X18rPVY/X1VXXVdfXi4nQl9fO0BXT19WWD1XXworTV4uJzxfX19HWC9fRlU9N188RyVYX1pWT00vXjlFKUtfPDZRUl9bIktMP15ISFpHX0BHVV9fVUk8OS9cPworTSlDM18sIyRYX1hOLEM/X19cTkdfV1pBTl9cMjk7P189SUY7X1FZTUlfXFo6Oi9fI0QlT19PWSlJX1QgPworTS1fXFEoRCdfIzEwNF9RVDsnP145QjgjX0M4JVxfVFkrMC9fNlI8M19cPU88X1MwVy4vXEAnUjdfJkE8PQorTV9SUFAsT1wzJTFLXygyNEdfUVBDKF9cUC0zJ18xJEUjX1MoUitfXDomITdfKiI8Tl9RTDcnX11OOTZTXworTVc8WzJfXzM+Vy9fWVddU19eLVM4X19fQFcvX1hXLUNfXi1bNV9fPz9VT19RVi1HX1w9PzRfVlk6NU9cUQorTSoiK18rMjw/X1JQSCpPXE0pIVtfKkIkOl9TNFAqX1xIKEFLXychVEhfUVUsQE9cSDFJI18pRFYoX1tXIgorTVIvXjZFKFdfKSFEQF9RQDonX14vQjdfX0FYMV9fXE8iUE9fPVEsN19PKzZVX1xDIlAvXzFRK19fVjwyXworTV9VRSwyX1xIKyJbXyhCPEdfUVxCKF9cNyZBT18nUjBEX1JcVi1PXDMmIVdfJFFEO19RNDklX1xXLEJTXworTVNMJlxfXCZZTT9cWS5TK18+WDFXX1heLUIvXE4oIVdfJyEwMl9QVDwnL1xPMCRbXy00NTVfUz0rOD9cUgorTTFWL18rRC0/X1MlJjdPXFEwRUdfLSNRJl9RODgmX1w0JUFXXy5DPF1fUUQ2Jy9cNyYxW18rUzxbX1FUSQorTSs/XEEqQydfKFMkVF9SLFAsP1xQLEM3XypSNElfXj8zU19fUlZdO19bXUs1X18/Qlc/X1dYTVtfXk43QQorTV9fN0BWX19XWE1XX18+KztfXF5ZTk9dSDhGS19KOk5QX1kmLUU/XV4+WCdfTis2W19aPkVKL11NOVZPXworTT5HPiNfUixELT9cSCozI18qMjxJX19fVFtPXzdHRjNfU0ohU19dOj02X18tRzZLX1JJRURfXFI7OU9fLQorTUcmP19NSF0+X1YgXy9fXD0kIi9fJ1IkP19VOTAyL11KOSZDXy9UIFlfXS8nUC9fR1RdN18uI0hdX1FUPAorTShfXDklQVNfKzMkU19TOFguX1xHKzJfXyozJFNfUlRSLE9cNCYhO18tMzxVX1Q1JDBfXE4rUyNfJSEwNworTV9RTD0oL1xKKyJfXzRUWTRfXF8kUj9fS1YtQ19dLVc4X18/PFU/X1dXPStfXU1TM19fRz1WT19QVV0rXworTVtdQzNfXks1VD9eRkUpJ18+NyVUX1MsTi0vXE0rUz9fO0cxXl9WVU88T1w+KCJfXyYkUiVfUiRcQj9cRAorTTMoS19PS18qX1dRVz1fXEMkUidfJCEsOF9ZSjJCL14nQEdXX1QsOylfXV8pUl9eO0c5T19SPDcjX10zJAorTVA/XzlSTDdfLlMsVl9RNDcnT1w4JiFPXykyLEZfUVg+KD9cQShSO18qMlRPX1JASiw/XS40NTtfJTE4NworTV9ZJilBX18zUCwjX1QrVl1fWjI4RS9dLDBTV18wVDBdX1UtNzNPXipBJ1NfRyhOJV9WRUM4P106NkVXXworTS8kMS5fUz0kNT9cVzFVT18sNCk5X1NJKTcvXFMvJC9fKkMgUl9SJEcqP1xWLkNTXyVBQDtfUjxHKk9cUgorTS4jS18sU10jX1JMUi4vXE4uQ1tfKyM8WF9RREEoX1xIKyJbX1ZNKzVfXU8yVE9fQVYtQ19XTTc1X15DOQorTVZPX0dVPT9fWi07OF9ePzVVX19UWF4vX1UsRy5fV0FTP19eUEs7R18+RzleX1ghXUBfXlNMOzNfSzpOTQorTV9YKVxAL14kP1hPXylSOFdfUjRFK09dTDpGU19fXydLX1w2LDRPXyBERjdfU1k5NF9cKjM3P18pRjYrXworTVIpQUFfXDY1N09fKkVVO19SKUVJX1YhJSgvXEYmQTdfKEFQQF9SJD8qL10vM1RTX1NcLlxfXj82VU9cTworTSxTN18lUURAX1FUPChPXEMpUkdfJlFUQF9SLEkqX1xQLiNLXyoiXE9fUUA9Jz9cSytCX18mIUQ6X1NMXAorTS1PXSYyNC9fKjMgUF9RREMpX1w8KFJfXyhSOFFfUzhTLj9fMVIsQ19aLTsyX15XOlUvX1ZXXUtfXi1fOgorTV9fKzxVL19TVy0/X11dTzhfXzs3VV9fTFUtJ19RSyZPX1I0OScvXE8qMydfOUZBT19RIDQqP1xBNVknXworTSkjTihfUi0sQi9eXU88U183VUE/X1ZBNzlfXD8oQj9fSElKMF9ZIitBT189VF07X1Y8Ry1fU0khMD9fJQorTVBMJ19XTE8rX1xGXU9PXFotUztfJyFUPl9RWDsoP1xHKEI7XykiIEJfUVA6Jy9cOSZBT18oIVRDX1FAOAorTSZfXDclMUNfPDY9Sl9YTiNBT14+RjlHXz0nIU5fWk5ISF9fLk8rQ18rQkBAX1JcUik/XydPOltfR1hdXAorTV9ZTi4/P14xQignXzc1UTtfVFkxNU9cWTA0T18tM10qX1NEXjEvXEksMltfK1M8U19TWSMvX1xcL0NPXworTShSKEFfUlhTLF9cRytTJ18qMlhTX1FUQShfXEEpUkdfJ1I8SV9STFguP11COSY/XzxHIVNfVlVLO09dSAorTTlGR184JjFGX1VBPjgvXTQ2RVNfNCU5OF9VJTI0X10vM0U3XzlGOVVfWl5JTV9dWD0nV19CKDYrX1g6JAorTUFfXklJWkdfQkgyKF9XXVpBT1xFKSM3Xy4jQSFfVlFOPD9fX10uW19VKU1BX1xSPjw/Xl5BNC9fUEktPQorTV9bXjA1T18kRTVPX1ApJTdfW14xNV9eX0MlP19QOSUyX1kpTDE/XE0mUFdfNyUtM19WIUA1X18yUVwjXworTVc8Wy9fUkxRLF9cTSxDQ18vRCElX1I0SSpfXEYqIk9fKzMsVV9SKEorL1xEKyJbXyVBUD5fUlBQLE9cNAorTSVBR18qMkxQX1EwMyY/XFQsU0dfKDFcQl9RQD4oL1xDKlJXXylCWFJfUkxQLU9cWC0jO19VLEcuX14jLworTVVfX0lVXTNfWz1HMV9fJzpVP19RVj07X1xdSzlfX0M8Vj9fU1VdL19YPEcmX19DQ1dfXkNGOTdfLUMtIAorTV9SNTRDT1w+LFgnXypVLipfXCciUz9dNzQlP18pUUBDX1cxWD5PXj9FWFdfQVgpXV9dVzNVT18+UjxbXworTSYxVD9fWUY3Rj9fLlAsJ19WLD8nX1Y5OTUvXy9SPCdfKiI8Rl9UNSIvP14iPlc3Xy9DUFVfVU06NF9dIQorTS8jP18kUSQsX1BQKiFfXkpISiNfU0wvIl9cMlxOL10wM0Q/XzAkMFtfVUk0My9eVkpKN18yRCxdX1JQTQorTSlPXldMKjNfQEdBSl9ZNitAL140QjdbXzg1RS9fUlxNKk9cWC5UI184Ni1GX1YpRTdfXTM1JFdfLEMkSgorTV9UUSowX1xOKyJHXyxDMFJfUixKKk9cOScxX18mUVRAX1E8OScvXD8oMjNfKzJcUl9ZPi1CP15BRShfXworTUhZOjFfWU4uQj9eNUMoO19EOEIiX1hSIz8/XixAV1dfQSdVV19SSEYqL11BODZLX01LKltfUyhOLU9eLgorTUJZJ18lQTA3X1EgLiQvXiU/WC9fPkc2IV9SSEkuT1xJKjMrXzMlJTZfX19QWF9fLEc2V19SSUlHX1xOPAorTTk/XyNFJUtfUUkxO19cKjA1X18hQ1VDX1ApLTdfXCIvNy9fIUMlO19PSSEzX1pFXTJfXSYrUUNfODYtQQorTV9cUyVRP189VDxXXydCPEdfUSA1Jk9cPSdSM18nIiBCX1FAOic/XEcqMlNfJSFAOl9SPEsrP1w5JzFfXworTSoyTE5fUTQ3Jk9cSCpCX18kQTA5X1FUQCk/XD4oQjNfKFJASF9SUFEsP1xSLiNLXypTIFVfU1UjMl9eQQorTUhKV18qI1U6X1VVRkNfXzlTLV9fXC1HOl9fNzVSX19QVj1LX1wtSzhfXyc5VU9fTlctQ19bXiM7X15XQQorTVYvX0NWLT9fNzY2JV9TWTFFX1xNMydTX088LzNfVSEkMV9dLjMlN18nMkBPX1leOUNfXV49Nl9fWT1HPAorTV9eUzNUT10yM1RbXzBDVF9fXUMpUj9fRlQ8U19GSF4kX1xPIU1fXEoqIidfT1tGT19YWiU/T11XPEZTXworTVFLWlRfVVk+ND9eID5HK18oQiA7X1smSkkvX0BTTE9fQSdFWF9aQkNHP15VTDpHXyxDIEhfUzhVK09eXQorTU8rN19JKV46X1IsRCc/XjlFOFdfPDY1PF9XNU44T11LOUVLXz43MUhfUiA9Ji9cPSdSK18mMTw0X1NYXQorTS1PXFAsUldfMzUtL19WPUU5X11COEVfXzFETSVfUkROK09cQioyR18qQlRSX1FANydPXDsmMU9fRkkqNQorTV9aIjhGX15DRllbX0tKOklfWy5KSk9eW0xLK19PKzZVX1wyX09fXyRTS1dfNlYhOl9VQTk4L15LTFpfXworTSpSVFBfWToyRk9cUSsjI18tQyhUX1c9VT1fXilCOTNfKSIoUl9RVD4pP1xNLFM3X19eX0JfW1IyOk9eWQorTUNWJ19LOEU8X1paIzU/XldCVV9fTShFOV9bMis1X15XQlVHX08oWTtfWz4qNS9eV0JVL19POEU3X1pGIAorTTVPXjE+NVtfVixKW19eMzFSX1xMKzJbXyRRNDpfUSg2Ji9cNiZBU18kUTQ4X1JASis/XDAkQTdfKVJETAorTV9RRDsnT1xGKiJPXyUhODlfUjRHKk9cMSRRO18mUiRDX1FIQikvXD8pMj9fKDI8SV9SLEkqX1xJK1MnXworTSsjTFpfUiBCKj9cQCtEP18uREVMX1JEWTk/XTM3WDNfU0xDNl9dXy1SP19JVCxPX1wtMzFfXzc5VU9fVQorTVY9O19cTTs5X18zNlUvX0tVLF9fWF1PP19YVi9HT18vUVxPXzNDUFhfUyhRLV9cNyhCR19HSUIuX1c1SworTTlfX0VWPVNfXC1DNV9XVVg+L18qUEw3X1Y8QyhfXVsqUU9eKkE3X19TXD8jX1c9VTxPXypRS1tfP0c9UQorTV9YWipCL18oT1tDXztWXUZfW15XTF9cQyghX19OWyZNX11bLlJfXV89VzdfM1RZJ19TSFYrT18hTkszXworTT83TVRfUyRQKj9eU0tKQ18zNFElX1dBVjtPXiE+Nl9fPVcpRl9XWVo6X11bPSY7XzsmOTxfUVw9J19dMAorTTMkS180VE0nX1IkOyY/XEAmUU9fK0JETV9TUFwuP10wNFRXXy0jPFhfUVxDKD9cOycyK18kQFg2X1FQOAorTSZPXDsmMVNfJjE4PF9RSDcnP1w2JFFHXyYhODlfUUA2Jj9cNiVBR18mIUg9X1UhJDY/XSUvRENfOCVZOQorTV9bRkdMP1xOKFJDX0dJTjpfWV5ASD9cQylCP18qIlBKX1hGKURPXEcpMzdfKVJAT19TMFgtT19QWU5fXworTTBCWEZfUzxLKS9cVCpSN18vIlRHX1Q0ViwvXFgqUiNfMSNASV9UWF0sL101MEM7XzY0QFhfVk07Mi9dVgorTTckW19AVj0sX1gtTjQ/XiU/JzdfWDxfLF9cSyZSL1xXLjNbXyhSREtfUixLKz9cTCxDM18pUlRPX1I0SworTSs/XEIqIktfJkIgQl9SLEkqX1wvJTE/XyhSNEhfUFwxJS9cOygyL18mMiRDX1FMQyk/XD8pUkdfKEJITAorTV9SNE0rX1xJLzJbXzomXVtfUjxDLF9cPSlCV18oIkUhX1I0UzJPXDYoMytfLzNAXl9ULF8vP11QOyZLXworTUlJWjxfXE5eTz9fNVJMR19ZTT8xX15XN1NfX05UXStfWz1DNl9eRzZTL185UjtfXylSMENfUkBLLC9eQAorTUVZI182JS01X14zO1ZfX0xVLSdfPkc1VV9dJylTL184UVw/X1Y8OyZfUixAJ19eX05LU18zRFkxX1guIQorTT8vXjpFSTNfRllGO19cTydRP11WPVcnX1A7QlhfUkhGKi9eWkw6T19YLSMtX1siSElPXyFQK0dfOiYxPAorTV9TUFcsP15KSionXzRUWShfUzhUKz9fIE5bN18sQlhGX1wmXkxfXVo9Vk9fPldFSl9XXVk6P11cPUY7XworTS8jSFNfUzBZLT9cLyUxJ18oIjBCX1FMPCc/XEIoIitfKiI4SF9SPEYpP1xIKUInXy1TNFBfUVQ6JT9cRAorTSghW18yRD0mX1EoMCRfXDIkIS9fJVE0OF9RKDAkX1w2JSE/XyUxLDZfUSQxJS9cOCZBV18vNCheX1IsRworTS1PXTw3Ry9fRzkmLF9WUUM3P10qMTQ3X0Q5MjVfUyxcLy9dJjJUR19EOSY6X1FYPCsvXEgqMyNfRCheKAorTV9fM0pdL103MUQ7XykyJElfUUw9KT9cPSchT18mMTw6X1FMOCdPXDslUiNfJyFAQV9RTDcnX1w5JUFTXworTSYxPDpfUiA+KD9cOyZBR18mQUA1X1MoSCpfXzpTTEtfMjUpMl9TNF0wP1xVLzNfXywzUF1fUlxXLj9cSgorTSxDM18pUlxRX1FcRyo/XDsoUjdfJjIkQ19RREEoX1xAKSI7XychWEFfUTw9J19cOSgyL18mQjRGX1FYSQorTSpPXEErIldfKDJQTV9SWFUqP1xXMjY3XyQxRElfUUg5Ji9cQiskW18qUzElX1IgQigvXD4mQi9fJ1IkRgorTV9SKEUpT1xDKUI/XyoiVE1fUyBVLF9cUi0zO18tIyxZX1NQWDA/XF4tQ0dfNiUtLl9YOV4+T15USipPXworTVA7Ul5fWjo7RS9dJzEkS19ZLVc9X18rO1VPXVk9JzNfVk0rNV9dRyhSL18wTltHX0BHSVZfXDJYTj9cRgorTSgyL19QTCcgX1UhLjQ/XFQtQ09fT1tWX19VXT03X15cTDtDXypSPElfW05SSy9fPlNMT184NUU3X1M4VQorTStPXylRO1dfOVY5P19TXFotL18jTkszXy4zPFBfWlpCRz9dTDlFW18uQ0hPX1cxVDlfXUk5VUNfQCdNSQorTV9XPU82X11UPCYnXytCRERfUiA7Jl9cMyNBK18kMSA2X1EsNCU/XDglMU9fJiEoNl9RPDIjL1xXLDInXworTS5TPEFfUzBUKD9cVi0iU18lUTg1X1IwQikvXEQoQjNfKDFcQV9RPDUmL1wyJCEvXyRRLDZfUVxBKS9cJgorTSJDI18tUllDX1syQ1Y/XSUuJk9fNDRRRF9RUDkpP1xeMDQ7XyZSID5fUlRRK19ePUc6O18+V0YpX1JISworTSxPXyRPW0tfX18rTV9YMVI6L1w2JSE/XyUhODtfVVk9NU9dKTFUM18nIUA6X1FQNyZfXEIlMTNfJzEkLAorTV9RTDYlT1w0JSE/XyRRQDhfUkRNKl9eS0lKO19XXSMrX1sqS0pfXFAtIztfKkMoVF9STFguP1xKLUMvXworTStTUF1fUkhWLl9cSyxTP18qMyhSX1JEVS0vXEQsIl9fKSMgT19SSFItL1xKLEMzXygiQEpfUUBDKS9cOgorTShCM18oIjhIX1JATiwvXEYrIltfKyJQQ19RUFs3P1wnJFJbXycxNDhfUVRXPC9cRyxVK18pUjRIX1FYOQorTSdfXEQnUi9fJ1FQO19SMEMoT1xIKUJHXyhRUENfUVQ7KS9cQyhSU18oUiA/X1FQPSovXEgoUj9fKUI0SworTV9SUEgsL1xTKyMvXytCRE1fUzxVLi9fNVMsU19aLTszX1haL0QvXjlFKUNfVSw3JV9cPlhMX15OSSojXworTVFLWlxfVVk5Nj9fLFBLW19EKEooX1Q9KDI/XydRPCNfLEJISF9cUyRSL1xEKSI/X04rIkxfXUMqUV9fLgorTVA8I19BJ1VXX1IoRCZfXypRS1tfMiNQVV9aUkxIX15MSyovXywiXEhfWk5MST9cVy5TL19EKSopX1NcXworTS0vXSQxM0NfPDclRF9WOUc2T14xQlgvX1YsNl9fXVsiT19eSUQ4W18pUUA4X1JEPSgvXDIjMF9fJDBcLAorTV9STEsnL1xSLTFfXywzMD1fUlxTJz9cTiwiV18sQyxUX1MkUixfXFEsQy9fKkJESF9RNDMlP1w4JUFDXworTTNEUS9fUTQ4Ll9eQUcrO185RiU8X1o+Qk5PXDwmU19fKFIoX19VTTs7T1xTLiMrXy4zVFVfUiA/KT9cSworTSojM185NjFKX1xDIlAvX15bXyNfUUsyUF9TWFwxP1xEKiMjXyYhODNfUUA3JU9cNSRRN18lMSw2X1oqPQorTUdfXk9JWktfJjEwOF9RODYmP1xFKkJLXy0zPFVfWzZQSl9fPFM8Q19YLScxX1heJkFPXUo5NjdfNzVROworTV9URS8yX1xLLUM/XytDSF9fUlhWLk9cSixTL18qQzhVX1I4Uiw/XEIrQldfKUMkUl9SKE0rT1xCKzJbXworTShSWE9fUTg+KC9cOyhSN18nMjRHX1IgSCpPXE8sMkNfKSQhO19QUDcrX1xBJzFfXygjTVFfUjBNMl9cOgorTSYxX18oUVhCX1FcOyY/XFktUyNfMkRBIF9UUScxX1w1JjJbXyciVTFfUVRXOF9cSTAmS18nUkUkX1VJNAorTTYvXEgpMk9fJ1IgR19RWDonL1xEKEIzXyoiOENfXjs8Vi9fT1ctU18wVC0mX1ZNRjpPXzhSPEdfT1sqTQorTV9bPk1KP18kT0tTXzQ0WS1fXS8qUS9eXUxaX19KKjZEX1xLJU9fXlFJOidfUStTIF9SVE0sL15XS1pXXworTVdNIy1fUyxIKV9eQUcpO181JTErX1ZJSjdfXyBNSlNfLUNMT19ZVkJFT10hL1NDX05bSlNfVCRfLi9eTgorTUo6L181JTErX1NMXixPXTY2NFdfNEU1KV9UWS0wT183UVtbX10tNy9fXksvUi9fNk9bS19KOT4zX1RAXworTS9fXDMkITtfJTEoOF9RRDQmL1w3JFE3XywiVExfUTgzJE9cPSYxT18pUixFX1FANCVPXDwmMUNfKzJASAorTV9UWSkyX147RTlHXyNQTF9fWj5CUy9eVkxbX19LSi84X1EwMS8vXEAnQ19fKjI5I19WKUM7T1xaLlNTXworTSlCOElfUjBDKk9cTCsiX19UTEsoX19fU11fXy5PK0dfJ1FQSV9RUD8qX10sMjRDXychTDpfUUQ3Jj9cOQorTSVRS18nITg+X1IgOihPXDwlUVdfJiE4OV9UPSwzL1xdL1NXX09bSlVfXlM9Vi9fUFc9P19UK1ZXX15DNworTVQ/X0BUPE9fSlpKQ19TRSAwL1xPLlNfXyojIFJfUlBVLT9cSS0zM18qIzBTX1I8UyxPXEQrUyNfKFJYTworTV9SLE4rX1xCKzJbXylDJFJfUkxWLV9cSi0zO18pUyhTX1JQVis/XFUxNUdfJCFYR19RXEEpL1xNMidbXworTSpDMS9fUixDKU9cTCoiS18rUlRGX1VBNzMvXUM4RT9fNyVBNl9QVDYpX1wsKUUnXyQzSVxfUVkkQE9cRworTS41X19MSlZTX1JMRiovXD4nMi9fKSFcOV9ZUjxEX1xRK1JDX1tOKz1fXyc7Vy9cWS1TS19STDMoX11fLAorTVMvXllLKj9fUDs+U19cIlpOL10yM1RbX1ZNJytfW1JUTC9eWkxbL19TLC5dX107KFE/Xy5RTEtfKTI0SAorTV9cUyRQT186UyxHXzZVLTFfU0RYLD9fIU87N18oQjw7X1ghXTxPXFkvIyNfTVtSUF9VVTg0T15FR0lDXworTUYoXilfV0VNOi9dJDEjT180RTUpX1RJLTA/XSUyI1NfODYlNl9cOlhLX19PVFxTX1gsPyBfXjcqT19fUAorTVVdI19UTC8jX1IgNidfXDUkITtfJiEwNl9SNEIoP1xPKzJLXyVBLDJfUzRRLF9dIy9UJ18mQTg4X1I4QQorTSg/XTg0VS9fPTchUl9YTiVCP1wyJzFDXyYhMFtfUlA/Nk9cPCZEJ18mIURSX1EsMCs/XDklQ0tfKVI1JgorTV9TKFAwL1xGKTJPXylSPEpfUkBJKk9fOFJMT19fXytSX1xWXE1PXEAnUjtfJUFMQV9ULSEvT1xFKSIvXworTSVBMDZfUUg4Jl9eLD9XW19GSFItX1IkNyZPXEAmUidfLkNcX19TNFctP15fTks3X1wuJzxfXlc/Vy9fQworTVU9K19WTEsnX14nMVNPXlJKWjdfL1QkX19SXFouX1xOLkNHXyszRFhfUlRZLi9cTi5DR18rU0xaX1JUWAorTS4/XE4uM0tfLSNdIF9TKF0vT1xOLlNTXytTUF1fUjhTLS9cQCsyW18nMlhEX1IkRS0vXDsqQkdfLCNAWgorTV9SNF09L1xILFRTXydSIEFfUkRGKT9cSSoyO18yRFUnX1NIXi1PXFYtU0NfJVIkUF9RXFs5X1wwLygjXworTSdEIV9fUkhdOV9eP0ZaL18wU0BXX1I8RSovXEspQiNfR1lWNl9TLE4qP19LVy1XX1tdQzlfUkxGKk9fLworTVFcT19ZLFsvX1tST0pPXylPW09fTVsmT19UWSsyT187VExTX00qUkhfXEcgUC9fNlFcK19ULCJdX1xXJQorTVI/XEgqIk9fUjwmX19dLyVQT18hTztPXy4zVFVfWiY4RD9cSyxCO19NKlJCX1QsXSxfXi5DOCtfSClaNworTV9VVTs1L15MSVonXzBDTFVfVV0/NU9dKTMkI184Ji03X1U1ODMvXSkzJCNfUFs+Tl9dMllMT15MRUhbXworTU9aOj9fXicoUF9fOlA8I19UW1ZfX1FMNCUvXD8nIU9fN1VVOl9SOEQnX1xbL1NXXysiXFBfU0xeL19cVworTS5DT18uM1RbX1VZQDdPXT84JidfMlRNLl9RMDAmL1w0I1FPXyNRMDBfUUQ3Kk9cNiQyV18lUSxNX1E0NAorTSw/XDMkQz9fLjM1K19TLFIuP10kMUQzXzBUNSNfXScoUi9fX11PK19QOzJTX1FcPikvXDIlIT9fJzFENworTV9SMD8nX1xBJzFfXyUxLDZfUzBJKi9dIy4jP18nUUg8X1FIOic/XSQxRDNfLCNAVF9cLllNP19RVy1LXworTVldTzdfXic1VD9fPVQsT19WPFcmX1laN0Q/XEMoIV9fJUFAPV9RPDsnP1w/KEIvXycxVEBfUiBAKF9cQgorTShCN18pMkRLX1I0Sys/XEYrIltfKkMgUl9SUFAsT1xSLiNLXykzKFNfUjhRLE9cSitSV18nUkhRX1I0UAorTSo/XEUpUltfKSNdVV9SRFEyX1xEKEIzXylSQElfVD0nMS9dNDU0X180RTUvX1I4SCpfXC8pJCNfJiQtTworTV9QOFI/L1xGMVhfXyhTWU1fW0JHSV9cUCtTN18qUjhBX1MsUStPXkBGWTdfLSJQSF9eTzxXP19PVj1LXworTSsiREhfXTstUz9fO1MsU18+Vy1PX10/JlFPXlBKWk9fMkRJLV9dTzNUP15aS1pbX1JLXl5fXDZYTV9fJgorTU8rQ19SO18oX1JQSCpPXyBPK0tfPkcxUl9bJkxJX1xdLiMrX0JIJVpfVFksMT9dRTdFQ19DKDleX1QxIQorTS1PXkFIKUdfK0JcSF9aSklIT1xMKlIzXzdGITdfVCEkLl9dIzFTW18wNDRcX1VBPzRfXkVHSStfUjpeRgorTV9cNkpHX18qTEpHX1JLKklfXD5QSS9fKkxaP18uUlxLX1NYWi8vXD8nMiNfKzJISV9UQSkwX10qMlQ3XworTTRFLS1fVSkzMz9dLDIkO18yVDkmX1FENSVfXDUlMUNfJVEoNF9ROC4mL1w2JCFbXyVRND5fUTgzKk9cNQorTSQyT18lUTRPX1FIOy0vXEEmQ1NfJ0FATF9RVDwmX1xFKSIvX0IoLidfX19TW19eV0paW18lMSg4X1E8NworTSZPXVU8JyNfLzNAWF9RODIlL1w4JUFHXylBXD9fUUw0JS9cOyVRR18lMTw6X1RJKTIvXFQvI0NfUFtOWQorTV9eSztWX19AVD0rX1hNIzRfXUcoUi9fM1BcI19HWUo0X1FcOyc/XDUkQUNfJFEsNl9RQDYmP1wzJDEzXworTSYxPDpfUTQzJU9cMCQhL18kISg1X1FEOydPXDcmMVNfJTE0OF9RRD0nX1xAKzJbXyhSTE1fUkBLKy9cPQorTSpCX18pMkxHX1JQTi1PXEQwNz9fKTJNJV9SLD8oP1xEKUIzXy9TVFZfVSUxMi9dPTdFP18mIUQ6X1BYRAorTTEvXDkxJltfIUMtWl9SQSlET1w+LlZPX05aOkJfUiBEKy9cRSghS18yVE0oX1omPEVPXFosIlNfWT07NgorTV9fIzpWX1xWLSMnX1YtIy5fXVsvU19eOkVJM19XTF8wX1o2QUhfXSozJF9fVCxHKV9aUkZJL180U0xTXworTVArSlhfXDJcTi9eXUxbU18sQlRNX1MoUCs/XSgxRENfRllOOF9ZQjZEP1xdLlMzX0o6NkNfUyxPKz9eTworTUsqP18wI1hXX1lSOkU/XFkuQzNfPTc5UF9SPEgoT10lMjQnXy1DSFJfVDEoMC9dIjFDW18xRFEkX1UxMAorTTIvXypNWl9fUksqSV9cRlFKL18jSjojX08qJjZfXTZYSy9eX0sqK18wUzxTX1FYOSc/XScwRENfJVEsNQorTV9RXDsnP1xFKDIvXzBDWSBfU1xXLT9eQ0ZJS18mUTg4X1E8NSYvXDQkMT9fJVEsPF9QVCwmP1w0JEI3XworTScxRFNfUVA4LE9cOyYiX18lMShIX1FcOi0vXEYoUyNfLSMoTV9TMFIqX10wNTUvX19fI0xfWyZFSi9cPgorTSZSJ18mUUw+X1I0QCgvXVU8JyNfJjE0N19RJC8kT15KSFovX0xKTktfUTwzJT9cMyUxQ18nQUg8X1IkSQorTSlPXlFLSldfUDtSXF9XPVxAP10pNDU3XzBUTS1fVCkrMl9dKjNUR18lUTQ3X1EsMCVPXDIkIS9fJkFAOworTV9RMDIlP1w1JFE7XyRRJDRfUTA0JV9cMiRBN18mMUQ8X1FIOic/XDgmIU9fJlFcQV9SIE0rT1xCKkJTXworTShSREtfUUhFKy9cQykyL18pMjhRX1I5Ij5fXD8pI1tfKVIsQV9TNFYsL10nMTNXXzVFOStfVFUvMU9cQQorTShSJ18lMlEpX1IhKz0/XCktR1dfKUQ+MF9RUFk6P15RRylDXyUxREFfUjhBJl9dMzRVI19HKT4xX1QgVgorTSxPX05XXV9fW11HOl9TIE4qX185VDxfX1ddIzBfV01ZPU9fO1M8W19HWVY/X1Q1KTJfXzNULF9fSzpOSAorTV9dNzNUL15cTks/X0hZWjlfWkY/Si9cVCtSX18nIUg3X1M0WC8/XD4oUi9fJUFIOF9TQFotX1xTK1MnXworTSZBODhfVyFNOy9dJjEkJ18qIjxGX1MwVi0vXkJJKitfKFI0Q19VXUE3T10qMyRHXzA0LSBfU10hL09dOQorTTZVQ18zRFkrX1YlPDVfXjlDOENfTVo2QV9cQlRML18xTisvX1Q7Nk5fXFZUSV9dNDBTV18oUUhBX1U1LworTTVfXVg8R0tfPiclW19XWVdAP15OSVsnX0opXj9fWl5GSU9cOiUxP18lUTQ4X1E8OSgvXDQlMiNfKFIoUworTV9RSDcrT1w6JVJXXyRRIEJfUUQ1KT9cNCMhS18kIFA0X1MwUSwvXF8vQy9fMlRAXF9TQFYrX19fXD5XXworTUpJWkFfUiQ+KS9cOiZBV19BOCIgX1s6UUw/XDIjQSNfJiE4OV9RVDYlT1xLKSIzXyYxNDdfUTQ3Jk9dSAorTThGO18lMVA8X1lKPUdPXFovM1tfK0NcX19TJSIwT1xUMUQzXy5EUShfVEkzMy9cNCUxO18lQSw5X1FQNgorTSZPXDklUUtfJ0FQP19RNDMlT1wzJDEzXyVBMDdfUTAyJT9cPCZBV18mQUA7X1E0NSYvXDonQiNfKEJcUAorTV9RSEIpL1xCKkJbXyRRVEdfUig+KC9cOicyR18oM0lVX1IwRjA/XEopMiNfNDUlJl9TTFsrT104NjRTXworTSwzMEhfUVhAJz9cOCtUU18nVElUX1BEVj8/XEoyWTNfKENdT19cMk9KX1w0JiIjXylCJDtfVzFUPD9eSAorTUhZV18yM1xbX15LO1ZfX1JXLVdfKEIgPV9ZXjdFP182UVw/X047RlZfXU8vVC9eOEY5S181RVE+X1xfKAorTVIvXlpMSyNfVk0rMF9cKlpOL15bTFpfX0k5TkRfVSktMz9cQighV18nQVREX1EwNiZfXDclMUNfJyFAOgorTV9RIC0kX1wzJCE7XyRRJDRfUkxJKl9cSypSW18mMUxAX1EwNiZfXDEkUUNfKSI0Rl9TNFYtX1xeL1QjXworTTJUUS1fUkBGKj9cNiYhT18rIyRRX1Y5SDlPXTA1JStfLyNYW19VPTIzP11MOCVPXz9XLUxfVylKOi9cPgorTSYxV180JEkuX1IkPChPXDAiQStfKyI4Tl9WUUY7T108NFUvX0s6MkRfUUg1JV9cNyUxQ18jUFw6X1EoMQorTSdPXEInUk9fJUBcOV9RNDQmT1w3JiFHX0hJVj1fWjo+Ry9dKjIkJ18xRDBdX1RZKTBfXTIzJDNfP1c9UworTV9fX1peT15cTDsjXylSKEJfUjBAKE9cRCdRX19DOEopX1BcKyM/XDUkITNfTEpCRF9bPktJX1w/JVE3XworTSchRDhfUVw1Ji9cQCkiK19FSTozX1VdQjhfXFQwRCdfLiQ5JV9TSSkxP1xeMzRDXzBUXSZfUSQ0JT9cOworTSVBU18kUSQ0X1FANiY/XDklUUtfJVE0OF9RMDIlP1w5JVFHXyVBMDZfUVA6Jy9cNSRRN18mITg4X1FQQQorTSg/XEYsQydfKEJESV9SNEwrL1w5JzJTXydRTDlfUFg1KD9cQS5XM18mQVxYX1I8Rik/XEsrMktfLSNMVAorTV9TNFguP1xPLFJPXywzOFBfUVBRNF9cSzVIM18lRDIuX1JZLUU/XFg0NzNfSllCOF9RSEInX1w+JSE/XworTT8nTVRfWio6RU9dQDUlP19ZPT84X15PPFc/XE4qQkNfUCwmW19bIklIX15ISDonX1csVzFfWDorQl9dQQorTTpGS19VPTMtX1tWWk0/Xz9WPT9fUlwyXl9bUldMT14tQihLXzglVTxfUyxSLD9cOichX18lQUA9X1EwNAorTSVfXDglQUdfJEEgM19RKDAkX1wzJDEzXylCMEZfUVg+KD9cOiZBV18lITA3X1EkMSUvXDQjUS9fJSBcMworTV9RLDElL1wyJEE3XyVRSDtfUUg9K09cLSQyI18mISRCX1I0Ois/XEcrMzdfLUNMWV9VMTY0X101NERXXworTTUlIS5fUUQ0Ji9dMTNFM18rQkxRX1IoPShfXE4pMlNfO0ZFT19UVSQxL15OSTo3XyYhLDVfUTQzJU9cLgorTSMxM18lIFwzX1pSR0lfXVw+J0tfLiM4WF9TIFArP142RUhXX0g5UjZfVFEqMF9cPidBT18oUiRDX1JAQworTShfXldNO0NfX18zUV9aJjZFP1w6JVE7XydBSDxfUzxULF9eVkxbK18lQSg0X1FcOidPXD4mMV9fJTEoOAorTV9RPDkoL1w0JkIrXz1XIVdfUVBEKC9eKkNYR18+N1lcX1M1ITAvXFkwRCtfLjQtIF9TTSYwP10iM0Q3XworTSRBLDRfUUQ0Jk9cNSRRO18lMSw2X1E4NCVfXDclMUNfJSEoNV9RODQlT1w3JTE/XyVBMDZfUUQ3Jj9cOAorTSVBQ18nMiBBX1IoTis/XEApUj9fKyMwUV9RLDUpL1w8JjEzXyJRNEBfUUhSOl9cOSdTN18wI1xeX1QhIgorTTAvXEssIktfJ1FQQl9TOFQrP1xXLjM7XydTOTlfUkU3QS9cOjFJI18qVEoyX1NFMjtfXlFHWidfJUFYOgorTV9SODsoL14qQldbX0k5XjdfVkE6Nl9fSlY9R19aLUM8X1NEVC1PXVk+NztfVTxHJF9aNj5HT184UyxfXworTUM5KjJfV1IjQF9fKFFLX19PO0JTX14jN1VfXypQO09fT1s+VV9YSiVBP11RO0ZXXytCVExfUUg8J19cNgorTSYhT18lITA3X1FANiY/XC8jMF9fJFEkM19RLDEkX1xEKEIzXydBUD9fUVA6Jz9cOSVRS18lISg1X1E0LworTSRfXDQjUS9fJCBYMV9RLDMlT1w4J1JPXydSNSVfUSQ3LD9cOiVSV182JEVCX1YxST0/XUQ6NkdfNUVBNQorTV9YNiM/T10xMzRPXyZBNDlfVSkuNU9dXz9IM18/V0FfX1ghVz9PXlZMOz9fQTdRXF9aOj1HP1w8JVFHXworTSchSD1fUVA7KD9cPCVRR19LOj5FX1g6IUE/XFsuM1NfK1JYTV9YOiY/P149Rkk3XzI0NF1fUUg4JF9cOgorTSYhN18tIlRHX1taWE8vX19dLyNfPzc5Vl9RRDooP1wwI0EnX0IoMiJfWkpHSU9cPiZBU18nMUA8X1cxSQorTTovXU45RjNfJkE0NV9RVDsnP1xPKVJLXyVSIDlfUzhdLF9cWjBDW18pQlRNX1IsRilfXDknMU9fKjJYSgorTV9UOTAxX1w7JyFXXyYxMDpfUTQzJU9cOCVBR18mITg5X1FANiY/XDQkQTdfJUEwNl9RNDMlP1w2JSE7XworTSYxPDlfUTQzJT9cPigyK18oUlxOX1EgNyVfXEssUyNfJSE4RV9RTDgkX1w0J0JHXyYzJUhfUlxTMi9dKAorTTFEL18pIjBBX1JUSyhfXFosIy9fLjMsS19TXF0uT1xEMCYrXyslPiVfUVkmRD9cSjJZL18xJV1XX1s+RQorTUo/XDMmQUtfKEE8PF9YVjA/T15DSCkzXz4nIU5fXCZVTi9fMlJdN18nIVhGX1NAWy8vXlVKKi9fSjoyRAorTV9dRy9UT11dQEgrX0ZZWj9fXEslUC9eWk0rK19XLSs1X1xCXk5PXy5RTDNfP0dFWV9YRiZBP1w/J0FXXworTSVRRDxfUTQ3Jk9cMSQxM18lUTQ4X1EwNSVPXC4jUSNfL1QhIV9RWD8oL1xHKTJDXykyLEZfUiA+KD9cNAorTSRBN18lQSA0X1EwLyRfXC8jMSNfI1BcMl9RUEUvP1w7KDUnXyRRWSBfUTg7LS9cTygjR186NllaX1YxSQorTTo/XUg6Rj9fQjg+Il9VKS4zL1xEJ1IvXy8jQSBfVDklMl9cMSJBJ18uQyRYX1hSJ0M/XUM2RUtfSElGOQorTV9RXDonL1w2JSE/XyRRKDhfUVA3Jj9eSkkqK18tIlxTX1FIOCZfXEcpQjdfP1ddVl9XVVo9P1xfLUMjXworTSpSOEFfUVw6JS9dNjMkJ19SXCckX19fVlwvXTUzVS9fLTNJJl9SQEUqX1xEKCFbX0w6Wk1fUUQ1JV9cOgorTSUxR184NTk1X1YtOTU/XDslUTdfJzFQO19SSDwnP1xIKjIrX0U5MilfWD4oQE9cRSsiU18nUjhGX1FYRgorTShfXEosQltfMkU5LV9RQDkmT1w2JDE/XyRRJDRfUTg0JV9cNiUhP18lQTA3X1EsMSUvXDQkQTNfJSEoNAorTV9RODQlT1w5JVFHXyVRNDdfUVxCKF9cRyxTK18iUSgyX1JUVSxPXC8kMiNfJlFAM19RPEErL1w5LCY3XworTSdCJFNfUiQ/Ji9cTCpCN18vI0hLX1I8Qic/XSoxU1NfQEhCJF9SLSI5L1xMNVg3XyckIitfUlUuRU9dKQorTTlXV19QKlpSX1FIPykvXEMmMVNfRCkiIV9ZWjxFP14sQ0kvX0Y6MktfWT5DTE9dJzYmN18uRDkqX1haJgorTUBPXkhJOjNfVz03OF9ZLjhGL15JSkpPX1A7XlxfW0pZTi9fOFRdP19OSzpUX1xHIlBPXVM7RltfQTgqIQorTV9SXE4rP1w4JkFXXyZBUD9fUSgyJT9cOCVBR18jMFgvX1VBOzcvXTE1JTdfKEI0Rl9SID4oP1xEKEI3XworTScxTD5fUSwxJS9cNiQhM18lIFwzX1EkLyRPXDQlIT9fJzI4Xl9RUEM0P1w0JzQrXyciIFxfUlg+Lk9dQQorTTlHK182NVk+X1ZNTTpPXjVEWFtfNDRVK19RPDIlT1xMKiMjXydBVENfUyhLLE9cWiwzQ18/R0VfX1UxKworTTJfXklIKiNfJyE8OV9RQDYmP1wzJEFDXyYxMDZfWjY/Rz9cOCRRP18lMSw2X1FIOSYvXiFAN0NfRjk6MQorTV9TUFgtT1xGKEIzXyYxQDdfVS0tMF9fIE87U19fXzdSX1QgWi9PXDsnIi9fJiFEOl9XQVo9X15cTTs3XworTSZBQDpfUTQzJU9cRidRX18mQTg4X1E4MyY/XD0nIitfQlg6Jl9SSEspL149RShXX0BYJVxfUlxXLS9cSAorTSsyT18mMVw7X1JUUytfXTM2NSdfJiE4OF9RMDElX1w0JEE3XyUxLDVfUTAyJS9cMyQxL18lISg0X1E0MworTSU/XDQkQTNfJjE8OV9RRDcmP1w3JiFHXyhCPEdfUlBVLT9cOygiI18tMzxfX1E4PiZPXD0lMUdfJjFcRworTV9SMFY7T1w5J1JfXylCSEJfUlRQKk9cVisyO18uUzhWX1ZVUDw/XSYzVF9fLCUlQ19RTTBBT1w7LlcvXworTS4kXVpfVVFIPV9eWkxLO18oQVRDX1IgPCdPXi1DWDtfSEleNF9VLUA6X10rOygvXzFWTiBfUiUiNi9cQQorTS1EK18qMkxJX1leQUdPXyNRTD9fQShGLl9cLyRRP15fTytPXzZFVT5fW1sjUF9cXjA0K19TPEcrX1YlOQorTTcvXjdDWStfJjE8OV9SNEUqL1w5JjFTXyRRLDZfUTw3Jk9cMCQhL18nQVhBX1IsQylPXEgqIk9fJjFEPAorTV9RTDsnT1w1JTFDXyQhIDNfUSwuJS9cMyNBK18kQSAzX1FMOig/XDUnIyNfJkIlK19ROD0wP1w7JyNPXworTTlEXVlfVy1QPz9cSi0zO18nUiBLX1dVWj4/XScxJC9fJiEwNl9SVEgrL10nMERDXzEzTSRfVCxUL19eJAorTT8oO184NS00X1omOUc/XDQkQU9fJFE0OF9RLDEkX1w8JVE/X0VZJi9fUFQrI09cNSRBQ18mITw2X1Y1RgorTTgvXUs6NjtfLTM4V19RSDwoP1w0JEEzXzUlKSpfW1ZaTj9fX14vP18zJDEoX1I0RCpPXD4nUiNfK1MwUAorTV9bXlZNT1w5JVFHXykiMEdfWy5LSj9eWk07P18mUTg8X1EkLyRPXD4mMUdfJ1IsO19aJjZDX14gP0dHXworTS0jUFhfU0RfLl9cTSxSX18tM0xXX1VVQDZPXDglQUNfJSEkN19RMDIlP1wzJDEvXyUxLDVfUTQzJT9cNQorTSRRN18kUSQzX1EwMiUvXDklUUdfJjE8OV9RODcmL1xBKiJDXywzSFpfUSg3JV9cTSszQ18oUkxBX1IsOQorTShPXD8pMldfJ1JVRV9TOFUxT1xXLiMrXy9UJF5fUyxYLE9eOUk6M19GOjZJX1ZZVT0/XS85Ni9fLFVFWQorTV9XMVxEL14oQCdbX0FIJiFfWlJGSk9cOyVBU18nQVA+X1hWLkIvXj1GKFNfMiVFRl9UPU1CL15PU143XworTT0oWkNfVDE0N09eJEEoJ19GOUo0X1I8TStfXFAtM0tfTCpaUF9cLl9QP11EOjZHXzcmQUdfVzFbPl9eJAorTUI4R19EOF4xX1pCQEhfXDgkUTdfJTEsNl9RSDonP1wwJCEvXyVRPDpfUFguJD9cNiVBR18nMVRAX1FYPgorTSg/XD8nUitfJjFEPF9RRDknL1wvI1ErXyRQVDVfUSwuJE9cMCNBJ18lISg7X1E0Pi1PXDkoVSNfJlI1KgorTV9RMDktX11FM1dTXz9HRiVfUSA4Jk9cOiZCP18nMUQ7X1U1MjQ/XEgpIjtfLCJMT19SPEMpP1xCJiFPXworTSxCNEpfV0VQPV9dIS1DN184JTk5X1EkLiUvXDQkIStfJUEoNF9RRDIkT141Q1hXXyUxKDhfUTAwJi9cNworTSUxP183NVk4X1laPkZfXFEsQy9fJyFQP19RVDsnP10rMkQvX0FYMiNfX19YXV9dIy5TX18nUVhEX1E0NgorTSVfXEUpMitfTDo2Rl9RTDkmX1w5JlFbXyYxLDFfUTgxJF9cPCVRV18mUUQ8X1kqLUM/XSUyNCdfSEk+MAorTV9XXV0+L108OTVbXzlGVUVfViFHN19dQTomI185JkFAX1FANiYvXDklQVNfJUEwN19RODQlT1w6JiFLXworTScxTD1fUTg0JU9cNSRRN18kQSAyX1FENyY/XDclMT9fJVFAOV9SOE0rP1xULzNXXyUhRDlfUyxQLy9cQQorTSohW18mQSA5X1BEMiY/XDsqNidfJlE8R19SPEEnX1w4JkFXXy0kTSpfWDZBSS9dRD4nU18zNTk2X1UpSQorTTovXFM2Jz9fPDcpXV9ZPiA7P14lPVZbX0oqIj5fUiQ/KE9cPycxX19DOEolX1pCQUU/XjFISl9fKTRdSQorTV9bLy9ZL15VUk1TXyRRVEdfWEolP19eI0AnT18nQihEX1VFOzgvXl9OW1dfTztGW19SUFEsP1xUMCNfXworTS0jVF1fVFE4NV9cRClSQ19FKFIvX1FEMSUvXDYlIT9fJkFIPV9RIDAkX1w4JiFPXyUxNDhfUVg+KD9cPgorTSdCJ18wVC0mX1JISis/XEAoIi9fKkJITV9RKDIlP1w0I0E7XyUgXDNfUFgsI19cMyQxS18lMiRcX1FIRQorTTUvXDwpVEtfLEM1Ll9WKTQ+T14gP0g/XyMxIDVfUTQyJ09cMCMwU180JFUsX1FENSVfXEAmUV9fMFQpKAorTV9VOTQ1T11DNyVTX0lKKkpfVllPPU9cNiUhP18mMSgyX1MkRSg/XD8mQUtfJlEwNF9aRkNIP1w0JDE/XworTSRQXDdfUFwtI19dQjhVV19GWU44X1NUXS5PXD0mUVdfJlFEPF9SVE4qL1w6JUFDX19fS1lfUkxDKV9cMgorTSQxP18nIVQ+X1dFVz0vXkZFWUNfJTEsNV9SRE0rX15bTTsvX0cpPjlfUUAzJj9cPSZRW18lUSgyX1Q1KQorTTA/XkhHOTtfQTgtXl9WNU85T14lQzgvXzsnMUpfVj1POT9dSTs2N18lUTQ3X1FINyc/XDomIU9fJiE4OAorTV9RTDkmX1w+JyFbXychSDxfUUA2Ji9cOiYhS18mQUA6X1FANiYvXDcmIUdfKiJcT19TKFsuX1w0JjFHXworTS0zIFxfUihGJz9cQCVBX18nMkRQX1IkVjsvXDYlIjNfKEFcPl9SJE0tL14qSSo/X0BJVkRfVVVUPj9dJgorTTREX180NklPX1JVNT8vXVQ+OE9fRDghUl9XLUA1T14+REhXXygyKENfUVw7Jz9eMkJIO19JWVYyX1lGSgorTU1fXVZIS1NfRiwzOF9aRy1YT1xKLlRDX0IoLiNfWVY4RF9cPidCJ18yVEkwX1w3IFBPXk5JSkdfLkNAWgorTV9TQFsvL10rM0RfXy9ELSNfUUg9J09eIj9II18mIUQ6X1FEOScvXDwnIV9fJFEsNl9RMDQlX1w2JUFHXworTSVBODlfUUg6Jz9cXS80I18nUVxCX1FEOScvXD8nUitfI0BYMV9RMC4lT1w0I1EvXyQwXDJfUSgwJj9cOAorTShDV18oQkk2X1E4PC1PXDgmIidfNSRRR19UIF4xX1xLKVJfXyZRSEFfWC4hP09dMjNUW18mQTg4X1I8QgorTSlPXC0kQjNfJyIsUV9TKFUwL11HOzgvXz1IJkBfUVxELU9cPSVBO18uIlRGX1IsPyc/XD0lQTtfSzo+RQorTV9STEgrT1w/JlIvXyUhKDRfVilDNz9cOyZRQ18sUyRMX1FMOCVfXDUkUTtfKjJUS19RQDYmL19ZWz5bXworTSlRXEJfUTgxJT9cPiZRS18nMVQ6X1lKLkQ/XEgpMk9fKiJESl9TJEkpX1xKKTI/XyUxKDhfUihAKE9dXgorTT43R182VTkwX1ouOkRfXjRESFdfO0c1Tl9ZJjZEL11aPzc/XztHNU5fVylTOz9cNCQxI18mMTA4X1FENAorTSYvXDYlIT9fJiE4OV9RQDYmP1w5JVFLXyYxPDpfUTg0JV9cQCdCI18lUTg1X1FMOiY/XEcsUyNfLSNEVworTV9RODomL1xYL0QjXygxXDxfUVg3JD9dJjNFW18pIlU8X1FIOylPXEAnQU9fKUMwU19YOjtHP11TQjhPXworTTg3PVVfVU1ENz9dPj03I18rRF1aX1dBXD9PXjxBWCtfOVVJLV9YSiI/T1w/KCInXytTJE9fWD4uQE9eSQorTUU4V180JUFCX1YyNEo/XVlKLCNfRlxXSF9VTVxEX15cTVtXX0BHOVdfUVxAKD9cWy9DX19TXEcnX1pCQQorTUg/XFErUydfK1JcUl9SSEkrX108NiU7XycxSDlfVC0iMi9cKSIhN18nMThCX1IgOihPXDklQVNfJCEsNAorTV9RNDUmL1w0JEE3XyQwXDJfUTg0JV9cPycyI18lQTA3X1EkLyRPXDEjUStfJEEgM19RKDAkT1wyJCEvXworTSUxKDhfUVRDMF9cMSVDI18kMFwyX1E8MSU/XEkpMltfKVIwSl9TIE0sX1xOKyJfXywyXFFfUjhEKU9cPgorTSZBU18wQ1RfX1IoRS9PXSo0Nj9fJSFYTF9SLFMzP10qNUc3XyJQUD1fUiQ5JT9dQTckS18wU1hZX1FAMworTSU/XkJHOV9fKkIwTF9RSDUmX1w1JVE3XzI0USZfVSEvMi9eTEhJW18mMVQ7X1FAOSZPXEgpQkdfLCJYUAorTV9fX1NcT1xIKCIvXykiJEdfUiQ8Jy9cXzAzW189JkVOX1EgLSRfXEUpQj9fLTJISV9SPEEpP1w0JFFHXworTSZRPDlfVU02NU9dRzglS19IKUoyX1o2Q0dPXiBBOCdfRylWN19ZKjBCX11WPjcvXz4nQVVfUTw0JF9cOAorTSUhO18lUSg2X1EkLyRPXDYlIT9fJSEoNV9RPDUmL1w1JEFDXyVBMDdfUixBKF9cOyZBR18nIUw6X1I8VgorTSxPXFgvI0tfJiFQOl9SXFsuL1xFKEInXy1DIEZfUjhMLy9cPilVI18lMUxDX1IoPicvXTQ2VU9fNSY9RworTV9XMipCP11bQ0hDXzgmSUFfVUVQOl9cTjJXT189V1FaX1lGI0A/XVU6ViNfPUchTl9SSEsrL1xQLEJfXworTUNYWiNfVklCOC9cLClTK188OkMgX1guUVM/XUJFSz9fPjorIF9bLlNPL11OOEYvXykiKERfUlhSLC9fLworTVI8P19HWUo6X1JQSisvXkZJSkdfKkJQUV9bJk1KX1w7JiE/XzhGLUpfUjxELD9cXC40N18oMihJX1EwMworTSY/XDEkMTNfJFEkNF9RODQlX1wyJCEvXyRRJDRfUUg4Jl9cNyUxQ18kMFwyX1EkLyRPXDIkIStfJEEgMgorTV9RIC4kP1w8JjFfXyciLSFfUEgtJ19cMCJQT18qIixFX1FANSZfXDklUUtfKSIoRV9SID4oP1w9JlFXXworTShCIEJfVklGOi9cRigyL18kUFw/X1FAOChfXDUmIVdfJkI0UF9RWEYuT1xZLzQ3XylSKD1fUzRPKV9dTAorTTpWS18jIFQuX1oyQkdfXFUsIk9fKDFQPF9RODglT1xeMFNfXzMkSSVfXDZZTT9dJzMkS18rQlxQX1FENAorTSYvXDglQUdfX18zUV9TRFQuT1w3JVIzXylCJEVfUkRLKi9dXTxHP18mQTw9X1hKK0MvXlJJWjtfPCZJTgorTV9RLDImL1w6JUFDXyVRKDJfVz1QOk9eO0U4V19OKzpRX1tWXU5PXyFPS0dfSjomPV9ZUjpFP148Rkk/XworTSkyKEFfUiA8J09cPCVRT18kUSQ0X1FIOCZfXDMkMTNfJVE0OF9RPDQmT1w3JTFDXyghWEBfUUQ4JV9cPworTSdBV18qQ0RVX1M8Wy4/XDgnIUtfK0M4Ul9SPEIpT1xHKUFfXykiRFVfUVBGMl9cNCZSJ18vU0xZX1gyKQorTUNPXjdLKltfQDk6OF9XQiZBP11FOzZHXzc3MU9fUjEhPD9dWT9HU19FN11dX1c9TThPXSgwRCNfKjJISworTV9SLEUoT14/RChPXyYyLEdfUzk/PE9dO0M6Q185OS5PX1VWMUxPXTA/OU9fSksiWl9VXTU2L1xMKkJTXworTSUhQDZfXSMqUi9eQEZZT18nQVA+X1siUExfXSIxJEdfTEsiU19RSDonP11TPTdDXyUxKDhfUVhCKS9cRQorTSoyT18lITA3X1EsLiRPXDYlIT9fJkFAO19RPDUmL1wyJCEvXyUxLDZfUSwxJS9cMCNBJ18kMFwyX1EkLworTSQ/XDEjUSdfI1BUMF9RTDgnT1w/KUNTXyUhOEVfUVQ4Jk9cRSgiM18kQSAzX1FENyZPXEwqQldfJzFMPgorTV9RPDUlX1w1JFE3XzM0RStfUkREKU9cOiRBO18lQSg0X1EoMSQvXEEnUitfJDE4PF9RQD4oL1xMKjJDXworTSdRLDZfVjE6Oz9cOyRCS19DKCI1X1glVj8/XSUvI1NfKDFYPV9TUSAvT1xQLEMjX1NcMyNfUyBVLF9dJworTTIkR18oIUw/X1FIOCZfX19eLy9fMDNVJl9VLTg6T1w0JEE3XykiMEFfVl1EOj9cNyUhS18kUTA1X1JAPQorTScvXDYkITNfJVE4PF9RSDYmL14vQkhLXz9XQVJfWVY3Q19eTUpaO19UTSMtX11DMFMvXzdSXD9fSzpCQworTV9aTklJT1w5JUE3XyZRPDlfUUg1Jj9cMyQxM18lUTQ4X1EkLyRPXDQkQTdfJTEoOF9RODQlX1w2JSE7XworTS4zQFdfUjBDKE9cSS4jM18tM0RXX1FEPSZfXE8tIyNfKTIoSF9RVD8nL1w0JkIrXyVRTFtfUVA+KD9dOworTTY1O19CWUI9X1hGQ0lPXiVGOVdfOTZVT19VQUI3X103O1ZTXyk0KVJfV0FdPl9eKz03L187VjU6X1RdKQorTTFfXEQpMjtfKFI0Ql9ZVjRDP109OycnXydSWSVfUSBLMF9dXUk7S19GXE9HX1onLFkvXlxQLCtfNCQ9JworTV9SREcqP11AOSYrX1NMQyZfWUY0RS9cOyYxT19OW05eX1RJLDQ/XlhNW1tfJjFMPl9WIUM5L1w4JSErXworTSgxVDtfUjhBKD9cOSUhO18lIFw1X1FANiY/XEIoIi9fJzFMPl9RKDAkX1wxI1ErXyRBIDNfUTg0JV9cMworTSQxM18kMFwxX1EkLyQ/XC0iUFtfJyFEP19TLFsyX1wyJEFfXyUwXDNfUSgzJS9cMCQhL18mITg5X1IwQgorTSk/XDclMUNfJiE4OF9RPDUlX1w4JSE7XyZBNDdfUVA3Jz9cLSNRO18hUFAyX1BAJyNPXDMjQStfJyFINworTV9RXDskX11eOjY/Xz82KVJfVEBOMj9dMy81P18wQzhfX1hWIkA/XTY0NSdfLjNMXl9SVE8tL18uUEwvXworTStDLFFfVFEtM09cPSYhU18lUTA6X19fWV5PXEcpQldfKkJcW19TNFQuT1xIKEIjXzVVJTVfUVg7KD9eNgorTUQ5L19NKlJKX1NYWS8/XC4kITdfJkFAOl9RWDsmT14gP0c/X0U5LitfW1JaTT9fN1Q8X19WXSMvX10/LAorTVJfXyJNWztfSzpGR19SMEEoL1w6JUFDXyUxIDRfUSwxJS9cOSVRR18lUTQ3X1FANiYvXDclMT9fJVE0NworTV9RTDkmX1w/JzFfXydSLEFfUlxXLS9cWC8zT18nIiQ/X1MwWC5PXD8oMjtfJkFUPl9RJDYnL1w3JkJTXworTSVSKENfVC04NE9dWUNZP19FSyZcX1dSOEgvXT4+KC9fMFU9RV9UQUU8P1xSMVYzXz43TVlfWTokPU9dUAorTTk1S18yVD0lX1QpJTFPXFEtQytfQ0heKF9XSVc9T1w8JjI7XzA1SVFfWCZQUE9eOVE9R19DKz8pX1pKWQorTU4/XFgtMzNfLjNYXl9WMUk5X18tUjw/X0NYSipfUVA4Jk9eLkNJJ184Ni1IX1o6RElfXDMkUTtfLCMsVAorTV9SNEIoP14yQUgnXzklXTlfUUw9Jk9cOyVRR18mMTA4X1FUOydPXDUkUTtfJEEgM19RKDAkX1wyJCEvXworTSQwXDJfUSQvJE9cMiQhL18kQSAzX1BUKyNPXDsmMVNfNCRdNV9UQSczP1w0JEE3XyRBIDNfUFwtJC9cMAorTSNBJ18mQUA7X1E8NSYvXDEjUStfIiA4KV9RKDAkX1w6JTFHXzFEKSpfU1xdMU9cWi5EN18kMFw4X1MoSQorTSwvXSAtM0tfQjdaI19VQSc0P11JNzZTXzklSUtfVz1OPl9dTzomX19IWVpAX1lWN0U/XSoxVCtfNTUtNQorTV9dOypSX107NFUnXzJELSNfUUg1JT9cPCVBS19fXzNUX1JQRyo/XD4oIjdfKDFYPV9SWEYpL10sMURLXworTShSIEZfUjg+KD9cSihCI18nMUA8X1FAOidfXDwmQVNfPUctUl9YLiI+X144RihfX08rSlVfXUMwU09fPgorTVRdK19WPFstX1w2Wk4/XkpJSjNfMVQxI19RODIlL1w3JEE7XyVRNDhfUUg4Jk9cNyUxP18mITg4X1E8NQorTSVfXDclMT9fJlFEO19RVDsnP1w/KFInXywzOFRfUyxYLU9cPShCI18uIzhRX1IwQidfXD8nIitfJUEsPworTV9RMDEqL1xQLVU3XydTJTVfUiBWNy9cTzUnP18uVkotX1JVOkBPXD4xNl9fKyU1WV9SWSg7X11cQFhHXworTUdJIiFfVlFANV9dJTAzX18rQyRSX1JITypfXT84VUtfQDddWl9VVUY7P105PykvXztZWlZfWV8hVl9eIworTUk7R19IOjpLX1MsTCsvXFQtMztfNTVJOF9XWiA/P11MOlZLXyoyUE1fWiJESU9dPjhWQ19QTCMjX1EsMQorTSRfXDAkUTNfJ0FIPF9SLEEmT15YS1pHX0JXUVxfUTwxJT9cNiUhP18lISg1X1EwMiU/XDMkMTNfJFEkNAorTV9RLDElL1wyJCEvXyRBIDNfUSwxJS9cMiQhL18kUSQ0X1FIOCZfXSkxVEtfJTEsNl9RIC4kP1wyJCEvXworTSRBIDNfUiA+KD9cQigiL18oUiREX1E8NSYvXSQwRDdfJSEoNV9RIC4kP1w0JCFDXyRAWDZfUUg2J09cRworTShST18sMlhUX1NAUy4/XS4yJSNfODVJRF9RJC4mX1w0JDFXXychQEBfVChdMD9eTUoqS19MSkpIX1dNTworTTpPXUw5NjdfQlgqIl9XIUc5X11MOTY3XzclPTdfVCxeME9fX1wuU18uUzBUX1JESipfXS0xVDdfLTJUSworTV9TOFAtL1w6JVFXXzY1JTRfVi07Nj9cRyhCO18mUVRCX1I4RClPXFYsUytfQ1haJ19ZQjhDX18kUEtXXworTVY9Jy9fXT8sUl9fOlNcW19RO0pZX1pKRkkvXS8zJE9fJTEkM19RODElP1wzJDEzXyVRNDdfUTg0JU9cNQorTSRRN18lMSw1X1E4NCVPXD4nIVtfJkFAOl9SKEYpL1xYLzNPXywjNFNfUixIKU9cVS4zP18lUVxJX1BMNworTSxPXCwkUz9fIiEsUl9STFw6T1w+Ljc7Xyo0TV1fUj0wQD9cXjspW18rJUosX1MpO0MvXSU6KSNfM0Y6LQorTV9UUTQ3T143QzgrXz1WTUJfU0BSLC9cXzAkJ18yJEElX1ZJTjk/XUo7RjtfPTguJl9TTT08P11dS1wzXworTUgsP0BfV0JCTE9dVUEoM19BJ01bX1QsXzA/XDsoUiNfKzMsT19ULSgxT11VPkdLX04sIyJfUTQ/KF9eXQorTU5bW18nIUg8X1FIPSdPXD4mQVNfJTFAMl9bPklJT147QCg7XyUgXDVfUSQxJS9cNCRBN18lISg1X1EgLgorTSQ/XDQkQTdfJFEkNF9RLDElL1wxI1ErXyRBIDNfUTQzJU9cMyQxM18lISg1X1FYOyg/XDMjUT9fJDBUNQorTV9RICwlL1wxI1ErXyZBQDtfUUQ3Jk9cOCVBR18kQSAzX1FUOydPXDQkQTdfJkFAO19RKC8lP1wyI1E3XworTSUxKDhfUTQyJi9cMyRBQ18kMSw4X1EsNSZPXDcmMVtfJDEoOV9RLDImL1xSLCMrXydRVDpfWiY8Ry9eLworTUEoL186JVE3X1Y5PTc/XUA3JVtfN0VJPF9USSYyL10xMzRfXzRFITNfX19SXF9cSikyR18oIihJX1QoXgorTTAvXSMuU0dfLTJcU19RPDQmT14zQlhbX0ZJKjBfUkhFKj9cNyYxW18nIUg8X1JERik/Xi9DSD9fRTk2LAorTV9cMyJPP182U0xTX1U8SylfXUsvU09fLVBMJ19IOVY7X1I8RChfXDYkQTNfJVEoNl9RLDElL1w3JTE/XworTSVBMDZfUTQzJT9cNSRRN18mITg4X1IsQShfXDsmMU9fKSJARl9TRF4vL1xPLSMrXykiREdfU0xbLi9cOworTShSV18tRDlAX1QtLzpPXFUuRS9fLCNJLl9TVS83P1xMLyRTXylSUF5fUkxSMC9cWjEkX183RilKX1ZBRworTTlPXU45Vl9fQCdFU19YMVo7X11TOSVbX0dZPjVfVF0tM19dKTFUM18nUUw9X1FQOCZPXEMpMkNfL0RJMworTV9ROE0sT10vOEZbX0NKQlVfUVBFKT9cRSgiI18vI10gX1RBLTJfXTY1RS9fMzRRK19UUS0zT15STSs/XworTSYhTEBfWzJPTF9cPichW18nUihDX1FYOicvXEEnUVNfTjs2U19VQTM1X1w2JTFTXyRAXDVfUSgwJF9cMAorTSNBJ18lQTA3X1FcPSgvXDUkUTtfJTEsNl9RMDIlP1wzJDEzXyQwXDJfUSwxJS9cMiQhL18tUyxbX1MoTgorTS1fXD0mMitfJkE4P19RKC8lP1w3JTFDXyVRNDhfUTw1Ji9cLyMxI18oIVhBX1E8NSYvXDAjQSdfJkFAOworTV9RMDIlP1w0JEE3XyUhKDVfUSwyJj9cMyRBQ18lITA3X1EsNCU/XDQlMVNfJCBYN19VJS80T1w/JyFPXworTTtGXVBfVjlEOD9eJUAnS181JS0yX1RRMDRPXSUyNE9fMiRBK19USSgyX10nMTRDX19fQ1tfUig/KT9cNQorTSVBV18nUVA7X1NQVi0vXEAmUV9fKFFUQV9SWD8nX1xHJVEzXyhBSD5fUSw1Jk9cMSUhN18wJCUiX1hCJgorTUBfXjtFOFdfUVwqXV9dOy9TX189VS0zX1ZdJy1fXSclUD9ePkVZP18nITw5X1E4MiUvXDQkQTNfJCBYMAorTV9RNDMlP1w9JlFXXyRRJDNfUTw1JV9cOSVRR18sIlhQX1FIOCZPXEUqQjtfLEM8VV9TLFguL1xEKkI7XworTS8jQFBfUkBEJy9dTzsmP184RVE0X1ddVTw/XUw4VVNfOzZBPF9XIUo4L11VOkYvXzxGOT1fVy1GNl9dSgorTTclL180RFksX1UpLjQvXT02JS9fOzYxPV9WST44P10lLkNfXydRSDpfUlhKKy9cOyUxR18lUSw1X1IwQworTShPXD8mQVNfLSI0P19SPDklT103NEUzXz5XLVFfUjQ9KC9cRSkiS18pQkhMX1IgQChfXEgpQkdfJjE4PAorTV9WQUc7P1xAJ1I3X0cpWkFfUTw5Jy9cOiZBV18nMUw+X1IsPiY/XyRQPCNfOiY9TV9SLEApT1w3JkFfXworTSVRRD5fUSgvJT9cOCVRV18qUlBNX1FUOydPXEAnIjNfJFEkNF9RODQlX1xVLFM7XyMwTC5fUTg0JV9cUQorTStDM18uIzBcX1FINidPXDslUV9fJVEoNl9RSDUmP1w2JDE3XyUxIDRfUTgzJj9cNyUhS18lISQ3X1E4MworTSY/XDEjQTNfJDBYNF9RODMmP1w1JEFDXyVBLDlfUUw5Jy9cOSVRS18mMTw5X1EkLSU/XDMjUT9fLiMwXAorTV9STEgrT1xHKjJTXzxHOVRfVSk0NE9dKjM0W18xJEEqX1QxJjI/XSMxNENfMUQ5KV9UOSgyX19bXF87XworTSlSKEhfUiRAKU9eLkI4R189Nl1NX1JIRSo/XDglQUdfTzs+VV9bVlVMP1w8JVFPXyYhPD1fUUQ1JV9cNQorTSRRN19ESFYtX1laNUNPXypRPCNfVUxfL19dVzRVL188VExbX1RMOyFfWiI3RV9cPyZBU18lUSw1X1E0MworTSU/XDYlITtfJjE8OV9RUDonL1wzJDEvXyRRJDNfUUg4Jk9cOyYxT18mUUQ7X1IwSShfXFUuQ0NfK0MsUworTV9SOEwqL1xULTJfXysiRERfVE0mMC9dKTBTT184VUU1X1VFMTM/XSoxNCNfLjM4UV9TIEwrT1xEKEI3XworTSYhODlfUUA2Jj9cOyVRR18nUUw5X1JQRSdfXiA9RlNfOVVNPF9WKTw2T11JOUYnXzAjVFxfUVg6Jy9cOQorTSVRR18tIyhPX1I8PCZfXSosUj9fLjI0PV9cSl1PL14jPjc3XyghRDlfUlBKKy9cUy5DS18yJE0sX1JESgorTSpfXUE4Ri9fPzdZX19RJDIkX15TTTtDXyZRVEBfUTg2Jj9cPCZBV18qMjhBX1tWWE4vXUA2RitfJlFAPgorTV9TKFcvL1xYLkNfXydRUEJfUkBKK19dIDA0K18lUTA6X1I8QypfXDMkMTNfIyBILV9TKFAsX1w2JSE/XworTSRBIDNfUVw8KE9cOCUxT18kUSA2X1EkLiUvXDgkUT9fJjEwOF9RODElP1w1JCEzXyRAXDVfUUg3Jz9cMworTSQhO18kQFw1X1FENicvXDEjQTNfJkE8PV9RLDAlT1w2JEFLXyVRLDtfUTQxJj9cNiRBS18nUVRAX1JQSgorTSs/XE0qUltfNEUhM19URSoyX10lMiRHXzEkPShfVC0mMV9cXzA0M18vRCEjX1QlIzFPXSIxJD9fMCQpJQorTV9fQ1BcX10nMERDXypSSFBfUVw6Jk9dTzlWN18pIVxDX1IgQik/XEAoIVdfKDFYOV9RNDMlT1w6JjFfXworTSdRPDpfUlhMK09eLUIoQ19HSTYuX1xfKlE/XzJSXE9fVVxbLl9dUzJTT182Ukw3X0gpPjdfUjA/KD9cPQorTSYxT18lQTA2X1E8NSVfXDklUUdfJkFAOl9RLDEkX1wyJCErXyZBQDpfUVA6Jy9cOiYhS18pUlBGX1M8XAorTS5PXEorUl9fKTJMR19SXFErT1xIKUIvXy8jRFRfVDBfLj9dJy9TV18mUSgyX1IsPCcvXD4mMUdfLFJIRAorTV9UMFwuL10yMzRXXzolXTlfVjk6ND9dUTlFT18+RlVAX1g1VzovXVk8Nj9fOUYtOF9WUUs4L1xVLFMjXworTSghWEFfUihAKE9cSCkiK18rMVg4X1Q4SyZPXFgoMTdfVSw7I19ZMixCT1w+JkFDXzc1XTxfViVMOV9dOgorTTglU183VjVBX1ZFTzpfXT04VV9fLzQsX19USS8zX1wxJFE7XyNQXDJfUTg0JV9cVy0iX18zJD0nX1IgOgorTShPXDglMU9fLSNEXl9VUT44X105NUVTXywjKFdfVSExNE9cMiNRN18oIVBEX1E8NSYvXDYlIT9fJlFEPAorTV9RODQlX1xAJ0InXyUxKDhfUjBBKV9cNCQxP18nQUxBX1FINSY/XDolMUdfJUEkNV9RMC8kX1w3JSFLXworTSVBLDlfUUA1Jl9cNSRBQ18lQSw5X1EwMSVfXDYkUUdfJjE4PF9RMDAmL1xAJyIzXyUxJDlfUiw/KV9cVQorTS1DP180VTUzX1Y1Rzk/XSozJEtfMkRRL19UMSYyP10hMFQ7Xy9EISNfVCkkMV9cXzA0M18uU1UgX1NZIAorTTBfXFkuM1NfXk8rVV9TME8tP1xEKFJHXztWSUpfWToyRC9cPiYxV18rMkBMX1oiNUUvXis/V09fJzE8OworTV9RSDknX1w9JlFXXycxWD9fWTYwRC9ePkU4W19TXEslX107L1NfXzhTXF9fVSxLJl9dQyxRX149RSkzXworTSZBNDdfUVQ5Jl9cNSRRN18lUTQ3X1FANiYvXDomIUtfJFEkM19RLDEkX1w7JjFPXychSDxfUVA6Jy9cRworTSsiO18uM1hcX1JITytfXEYrIkNfLTMwTV9SXEopL10rMTNXXzZVLSlfV11TOk9dLTAzQ18xM0xRX1RVJQorTS5fXVA4VTtfKDFENV9SXEsrP10vMSNXXzxGNThfV1VQOF9dXTxGP19BR01QX1chSDdPXUU4RT9fPEchSAorTV9TOFItL1w8JjFfXyZRRDtfUlRIKE9cWiohW184RChMX1RATydPXl5LWktfOjYlP19TJE0rX11DOVZHXworTTg2UU1fVUU/OD9dNDZFU18tU1RfX1NNITBfXEwsQzNfM1UtNV9RJDMlT1wtIzEjXyghWEFfU1BZLS9eLQorTUIoQ18oMUxDX1IsQClPXFEtQ09fN0YhRV9RODMmP1w5JlIjXzJETSxfUiA9KF9cPCYiI18pQjBHX1IkPworTShPXDwmQVdfMiQ5KV9USSgyX1w0JDE/XzQ0WTRfUVw8KE9cMCMxL18lQSQ1X1FAMyVfXDQjUS9fJlE4OgorTV9RRDYnL1w1JEFDXyVBLDlfUVg7KD9cOiVRV18lISQ3X1FMOCdPXDsmIVtfKTIsRV9SNEMpP10nMTQ/XworTT03LVVfVV0/OE9dLjQlN18yRFExX1QtJTJPXSEwVENfL0QhJV9TUF4wX1xbLzQrXywzLFZfUyRTLU9cVAorTS1DR18rUyRUX1FENyZPX19dLzdfK1I8Sl9RRDknL11bP0dfX0RZMjVfUTw3Jk9cPScyI186NjVHX1ZVTAorTTxPXDIlMUtfKUI8SF9RUDQkL1xMKiJLX0QoTitfWUI0Qy9fLlM8O19VLScwX10nLFMvXzZULFtfUkwiXAorTV9aOjpHP1w+JVFbXyZRQD5fUTQyJi9cNSVBP18kUTA1X1E4NyYvXDAkMStfI0BUM19RUDsoP1w4JjFLXworTSdCID5fUkBNKV9cXDAzT18qUyBMX1JMUCsvXE8qUkdfMDNQVl9VPTExX11IN0UjXzhFISZfVSEgLU9dJQorTS5CX183NS0oX1VdMjM/XDUkIStfJCEgM19WWUk4X11MOEVDXz5WWUFfV0VLNy9eJD1WS184VVE2X1YhPAorTTUvXVE7JjtfJ0E4OV9RNDAlT1wyJCEvXyghRDlfVTEhLj9dQTBSV181IzxFX1khXT0/Xi9BWDdfKlIwSworTV9WIT85P10wNSU7XzQlLTRfVFEtM09cJyFAU18oUiREX1Q1IS9fXTI1RFdfKUJARV9RWD0oX1w4JVFXXworTTM0OSBfVUEwM09cOyVBU18lUTg8X1JAUC0vXTY2JVdfJlFAPl9RMDYmX10kMURHXyUhODtfUVQ9Ki9dJAorTTFET18rMkxUX1FcPChPXS4zJFtfM1RRMl9RMDElX104NUVHXydBUD9fUTg0JV9cMSMhI18mQTg4X1FAMworTSU/XEEmQUtfJlE4PF9RLC8lX1w7JVFfXycxREFfUVA6Jz9cQCdCJ18nUVRAX1UpMDRfXU88NzNfNTVFOworTV9UVTE0X10qM0UjXzBUQS1fU10kMj9cXjBUQ18vVDEpX1QhITIvXSMwREdfMEQlKF9UKSEyL1xdL1QzXworTS80JSNfU0heMC9cVi5DU18lMSw1X19TWl1fXEsqIj9fJiE4OF9RTDknL1xNKzMjXyYhQDtfUTg2Jj9cNAorTSUhP18nQVREX1EwNiZfXDUmIUdfKjI4QV9RWD8oL14vQ0hXX0dJQjBfXS8uUj9fM1JcR19VPE8nX10vKgorTVEvXytRO1dfSFk+OF9RQDIlT1w5JjFTXyYhLDdfUVA4Jk9cOiVBQ18nIUA6X1E8MyU/XDEkQS9fJzFYPworTV9RTD0mT1xEKVInXyciIDhfVCEjLz9cRSlSM18lMTw1X1FYOiYvXSkxVCNfNUUtKF9WRT80P11YOUVTXworTTYkQF5fVDRYKz9dMjFTU184RS0zX1FIMiVPXDgmQUNfPEZRRF9WNTs0P11NOCUvXzpFSSpfVy1GNl9dNQorTTQkT186Nj1AX1VJODQ/XDMjQSNfJTEgNF9RNDImL1w/JkFTXzEzOFFfVUxeKy9dKiwhV19FSDldX1g5XworTT9fXEQnMjNfKjI4TF9WKUg6T11cP1gjX0I4SitfUTw0Jk9cOyVBU18+Vz1VX1ZdUTovXUI5JidfJkFEQAorTV9RPDYnL10lMCNPXzNURSdfUUw1Jz9cNSVRU18mQihGX1NEWzAvXDklQVNfJSE4O19UPSkzL1wvJCE/XworTSchUEVfVSEyNV9cViwzV18nUUxDX1YlPzg/XTg1NU9fJFEgNl9VQTY2P1w+JyFfXydRVEBfU0xaMC9cOAorTSVRV18lISQ3X1E4MyY/XDklIUNfJEBQMF9SSEQqL10qMSRDXzRFITJfVzFSPS9dPDZFU182JTk4X1RNLQorTTRPXScyRF9fMURFLl9UKSUyT1xfMEQ/Xy5TWSNfU0BbMC9cUy1DT18rQyBVX1JYTSxfXE4rMy9fK0JUUworTV9STE0sL1xLKzMjXytDIFNfUkxNLC9cQCdCI19cXzdSX1NQXi8vXEEnUidfQ1hKLl9UXS00L1w2JSE/XworTSVRNDhfUTQzJU9cQyZRX18mMTA4X1FUQCg/XDYmITtfJlFcPV9ZIjFCX15CRlk3X1U8Xy1fXTsrUk9fNQorTVI8N19UXEskX1xXJ09fXj5ESS9fJSBcMV9RRDomX1w7JVFHXyYhLDNfUUQ0JS9cPiYxR18lQSQxX1I0RgorTSgvXFItMl9fMCQsXV9UKSUvX1xSLEJfXytCWEtfUiRAJ19cMSNRJ18oIUw7X1QxIi5fXSQwMztfNyUpJAorTV9XSUs3T10zMSM/XzBDLEZfVS0iLT9dOjJUT18nQUQ/X1IsRSovXTIzND9fOzYpN19WNTgyX11LN0UnXworTTk1UTVfVSktND9dLjJUS186RkFDX1E0MSRfXDYkQTNfJkE8PV9RODMmP1xKJ0FfXzYjVExfVFRYKU9dSAorTTdVQ187RklMX1FYNyg/XEAnUjtfNFVNP19WJUU5X14pQig/XyUhJDdfUTwzJy9eIkAoL18/WCVeX1YtQworTTlPXDglQV9fJSEsOV9UWSwxX1w2JFErXyYxND5fUUA3J09cOCgiM181JTk7X1EsMCVPXEAoQj9fNjVJOworTV9RLDImL1xIKVJbXzkmMUdfUzBQLj9cPyZSL185VjVHX1YlPjkvXDMkITtfNVU1OF9RWDwnX1xDKDIzXworTTk2LUZfUVA7KD9cNiVBX18xVEk1X1IgPCdPXUQ3VV9fQEdVXV9VVTg2L10uMyRfXzJESS1fVF0vNE9dJgorTTFER18wJCknX1QpJDI/XF4wJDdfLzNdJF9TWSAxP1xZLlQjXy9EISVfU1RfMS9cXS80I18vU10iX1NYXgorTTA/XF8vVCtfL0NZIV9TUFwvX1xTLFM7XygiIENfUUg2Ji9fVlxPI18vU0haX1JUSys/XEcpUktfRklCOworTV9RQDMlX1w4JFE/XyYxMDhfUVA4Jk9cNSRRN18mQVQ+X1FANiY/XD8mUUdfRkk2L19ZRjRDT182Vj1LXworTVNdLzVfXSMwVF9fLVIsS19SW18gX1YpNjVfXScwRCtfP1glX19WKT83T10zNFUjXzBEKF9fUyxTLC9cTgorTStCT18uI0xVX1MwVixfXEsrMk9fKFIsRl9RUDkmL1w2JFErXyQwUDBfUTQwJU9cQCYxR18xNCxcX1U5MworTTIvXU04VTdfQCcpQ19XLUU1T11ONyRbXztVTS1fVVUuM19dOzVVX18qIkxQX1Q1Ii8/XUc2VStfOUVFLAorTV9VTTAxP10qMUQzXyhRXEdfUUg4Jl9dNTU1K18nQVQ8X1FINSU/XDklQVNfJiE8Pl9RXDknP10oK0InXworTTJDQEpfVSkzMy9dJjE0T18oIUxHX1E8OSg/XT45VldfOEY9TF9WQUc5T1w9JkIjXyZRTEZfVCkkMy9cWAorTS5DV18rMlBTX1FANidfXDYlMU9fLyQkXV9QVC8kT1w0JDFXXyYhOD9fUSQ5Jz9dJTFUU18mITQ7X1EwNgorTSZfXSwzRFNfJkFAO19SLEApT11GOSY7XysiQFFfUVw7KF9dSDlGQ183NUlAX1IsQClPXSYxJD9fKDFcQgorTV9SMEIpP10wMkRDXzEzXF1fVDkkMV9cNSUxW184RjFJX1UhLzU/XSwyVSdfMjRBLl9URSs0L10mMiRXXworTS9UJSZfVCEiMV9dLTMlK18tMzBaX1MgTy0/XE0rIytfKlJIUF9STEosL1xKKjJfXyoyQE5fUjxHKk9cSQorTSpCT18qMkhLX1JESipfXEsqMlNfKjI8Sl9SSEgqX1w7JjFTXyYxNDdfX1NUXV9cRyhCM18mMTw5X1E4NworTSYvXjJEKS9fJ1FIPl9RQDMlX1w4JFE/XyVRKDZfUTAyJT9cNSRRO18mMTA4X1QwXC4vXjdEOD9fRjlCMQorTV9cJyRRP15UTjtbX0tbLlVfWzpUTV9fIU47V185Ni1FX1Y9SjpfXT04JidfLFM4V19SMEkqP1xBKUI7XworTSgiLERfUixEKT9cQigiK18nMUw+X1FANiY/XDYlIT9fJCBYMV9RLC4kT1wzI0ErXyRAVDFfUig9KD9cXworTS4zV18rIjhEX1VZNzJfXUs4NTtfNzRdIF9XUUQ1P11eOSVHXysxWEJfUkBDKj9cVyxTN18vQ0xWX1Y1OgorTTNfXUE1VEdfNVRRJV9TUFYtL1w6JUFbXyVRQD9fU1BfMS9cXS8kK18nQUxBX1FQOyg/XC8jMTtfKUIoSworTV9SVEIpX1xFKEFXXzZFUTNfVS0xNS9cOyYiM18mMURCX1VFPDc/XTc3JTtfNkVROV9RRDknL1w5JiFbXworTTdGKUBfVl1RO19dRDkmP18mITw+X1FQOyg/XF8wM19fKjJETF9RRDUnP1w9JjInXy9TVF9fUVQ6KC9cOQorTSUxW18lUTg9X1MkUC1PXDsmIVtfJyFIPV9WSUk6L1xCJ1JPXyghVElfVSErM19dLDFEM18qQig+X1JAQAorTScvXS8yRDdfOiY1QF9YRiVBX104NUVHXzI0PSpfUTQ0Jk9dKTMlJ18xREUuX1NQXzEvXSAwVENfL0QlJgorTV9UKSUyT10lMiRXXzAkLShfVCUkMj9cXzAkP18uQ00iX1NQXTEvXFkuVCNfLlNVIF9TVF8wT1xPLDMzXworTSpSUE1fUlBKKy9cSSlSR18qMjxJX1JARiovXEgpQkNfKiI4SF9RVDsnP1w2JEEzX14vI1NfUkREKU9cPQorTSYxT18mUUQ7X1dRVz5fXDYkMTdfJkE0OV9RRDQmL1w4JFE/XyYhLDdfUVw6J09cRigyN18yVDUjX1kiKworTUE/XitCODNfJ1FcQl9WKUc7L10yNiVLXzJEWTBfUzxXLk9cSyszI18qIkhNX1IwRio/XDonIV9fJTE0OAorTV9RMDQlX1w5JSFDXyRQVDFfUSgwJF9cMyQxM18kMFwyX1EkLyRPXDAjQSdfJDBcMl9RJC8kT1wwI0EnXworTSQwWDRfU1hYMC9cPSVRT18pUiw7X1RJJS4/XT40RC9fOyVFJ19XNUA1L1xJKDI3XyxCVFNfVDEgME9dIgorTTAjV181NSEqX1UlLDFPXScwRCtfLkM0WV9RXDsoX1w3JiFfXzRVQT5fVS0yNj9dLzNFM181VTk9X1FANgorTSdfXFsuJDNfLFJcWF9VTTk2X107NyU7XzYlOTlfUUg3KF9cOSYhX182VVE9X1VdQzZfXUA4RiNfJiE8PQorTV9RSDknX10/ODVfXzgmKT9fVVk+OD9cOCVRW18lUTg8X1Q1JDBfXFYtIz9fJiEwPF9RVDooL11LOUY7XworTTs2QU5fUUQ1J09cPCZSK187VlFSX1FUOigvXEMoMjNfNVU1N19SOEApL1xMKSJDXzREVS1fVU02NU9eIAorTT5XT19BOCIiX1QxIDBPXFQsQzNfKSIwR19RXD4pL1w7JkIjXyRBJDdfUihCKT9cSClCR18qUkRMX1MoUAorTSxfXFItIz9fLVNEXF9TRFsvT1xaLyNfXy4zTSBfU0BaL19cVi4jV18tMzxcX1MoVC1fXEwrQydfKiJITQorTV9SPEkrL1xKKiJLXyoiOEhfUkBGKi9cSClCQ18pUjRHX1I8RSlfXEYpIjtfKiI4SF9RRDUlX19fXU9HXworTSghQDtfUVg5Jl9cOSUxP18mMTA4X1E8MiVPXDwlUU9fJjEwOF9RODElP1w2JDE3XyUxIDRfUUAzJV9cNworTSQxN18oIUw7X1E8NCRfXDclIUtfJ0IgRV9RWEAoX1xIKyJbXyZRXEFfUSQxJS9cMSQxM18kISAzX1EgMAorTSRfXDIkIS9fJFBYMl9RSDQmL11QOiZTXyVRKDZfUSgwJF9cMSNRK18kMFwyX1EkLyRPXDAjQSdfJDBcMgorTV9RIC4kP1w5JjFTXzNUTTNfUzxSLi9cQyghT18vM0xTX1U9MDEvXTo0JCdfN0U9K19RSDUmX1w4JSFTXworTS4jOFlfU1BbLk9cXjA0K180NS04X1UlMjY/XEwrMzNfJ1FMQ19RPDgnX11BOUZTXzomPU5fVlVMPE9dTworTTtHN18lQTA9X1FMOCkvXT02VjNfOUY5SV9WPUg6P107NkYjXyYhOD9fUUg5KC9dQzhWO186JklIX1Y1RgorTTlfXDYlMVNfJSEsOl9VOTc2L10/ODVbXzVFOTlfUTg1Jy9cOSYhW18wI1xeX1I8RSovXDolQVtfKEFcRQorTV9WPUM4P11BNyYjXychQEBfUiRAKU9dJzE0P18nQVA+X1JARiovXT43JVtfPkc1UF9aRkFHP11XPEczXworTTZVQT5fVTE1Ny9dLjNFP18xJDkuX1NVIzJfXFguVCNfLjNRIV9SXFItX1xJKyMnXypSRExfUlxKK09cTQorTSoiU18rMkBMX1JMSSsvXEgqIk9fKUI4SV9SOEYqP1xGKUJHXykyNEhfUkBIKl9cRylSS18pUjxKX1IwRAorTSlfXEQpIj9fKTI0SF9SQEYqL1xHKTI/XykyLEVfUjRDKT9cRShSN18pMixFX1JARiovXEIoIitfKzJESworTV9fU1BcX1w+JSE/XywyRExfUlBHKj9cPCVRT18lIFwzX1E0MCUvXDQjUS9fJTEgNF9RNDAlL1w0I1EvXworTSVRKDZfUSwvJi9cNyRBQ18mISw3X1FAMSY/XDMjIS9fJVEkNV9RNDAlL1wxJDEzXyRBIDNfUSgwJF9cMQorTSNRK18kMFwyX1EgMCRfXC0jUStfJTEsNl9SIDsnX1w1JFE7XyRBIDNfUSQvJE9cMSNRK18kMFwyX1EgLgorTSQ/XDEjUStfJCBYMV9RJDIkX1w4JVFbXyYhMDxfUiQ9J19cMSNRJ18yRDkkX1U1MDJPXEMoQidfJFEkOgorTV9RNDMnL1xNKyMrXzRVMTVfVFUwNT9dNjY1W183RVVDX1MgTSxfXDwmIiNfJVFAP19VWUM6P11CODZDXworTThGJUdfVi1COj9cOCVBX18lUTBAX1VZPzlPXUA4NkNfOCYlSF9VMTY2X1w7JkInXyYhPD5fVjVEOk9dRQorTTkmS183VVlEX1FENygvXDwmQi9fMzRVMF9TJFMsL1xHKVJLXyZRSEFfUUQ4J09dITAjX18rMkxOX1IgPAorTSkvXEcpIktfMCNUWF9UKF4wL1xBJ0IzXydRXEJfVjFFN19eIkBXV19FSTY0X1Y9RTovXTU2NU9fNTVBPQorTV9UWTA1X10qMkUvXzIkPS5fVDknM09dJTFUW18wNDksX1NZIzIvXSAxNEtfL0QtKF9TVSIxX1xeMCQvXworTS9DWSFfUzBULV9cTytTK18rIkhNX1JMSSsvXEoqIk9fKkJAS19STEkqX1xIKUJDXyoyPElfUkBGKi9cSQorTSlSS18pQjBHX1I0QylPXEUoUjtfKUIwRl9SMEIpL1xEKEIzXykiKERfUjBCKS9cRChCM18oQiBCX1I4RAorTSlPXDIjQSNfXl8rUl9SODsoL1w7JEFHXyVRLDVfUUAzJV9cNSQhM18lMSA0X1E0MCUvXDUkITNfJTEgNAorTV9RMC8kX1w3JEE7XyVRLDVfUTwzJT9cNSQhM18mISQ7X1MwSi4/XDokUU9fJTEgNF9RMC8lP1wxI1ErXworTSRBIDNfUSQvJE9cLyMxI18jMFQwX1EgMCRfXD8nIitfJlE8P19RODElP1w1JDEvXyRQXDFfUTAwJE9cMgorTSMxJ18kUFgyX1EoLSQ/XDMjQStfJDEgN19RPDMmX1w4JEFLXyYxJDVfUUQ0JU9cTSoiQ18xNCRfX1NUWgorTS4/XDYkQUtfJiEwPV9SREYrL10yNDUjXzM1JS9fVSUzNC9dMjRUV18pUjBDX1IgPCk/XD0nIitfNlVVOworTV9WLUI4P109NlVDXzlWLUVfUUQ1J09cOiYiJ182RUlDX1YpQzpPXUg6NyNfMTQ1MF9RNDYnP1w6JyInXworTTdVXUhfVjFEO19dQjhGV18kQSg9X1FMOykvXUE4RkdfN0YhSF9WJT86L1w/JlIvXychWENfU1kgL09cWgorTS4jS18nQVA/X1JARSpfXTo1NSNfOCVNNl9XOVI8L11EODYjXzVFQTtfVT05Ny9dOjcmJ180NS04X1RRMQorTTVfXSozRTtfMTRFMV9UQSo0P10lMVRbXzE0OS1fVC0lMy9dJTFUW18wRDUqX1NQXzEvXF0wJDdfMDQxKQorTV9TVSAxP1xeMCQ/Xy8jWSVfU1BeMT9cWC5DX18uQ0RfX1JQSyw/XEkqIltfK0JQTl9SSEgqT1xKKiJLXworTSlSNEdfUkRHKj9cRShSN18qIjhIX1I0Qyk/XEYoQjNfKVIsRV9SKD4oL1xFKDIvXylCJEVfUiw+KE9cVworTSxDO18pIVxDX1E4MSU/X1pcPydfKCE8Pl9RTDQnL1w7JUFLXyYhLDdfUTQwJS9cNSQhM18lMSA0X1E0MAorTSUvXDUkITNfJSBcM19RPDIlT1w3JFE3XyVRKDZfUSwuJE9cOCRRR18nITQ/X1FAMyVfXDUkQSdfJSEgMgorTV9RJC8kT1wyJCEvXyRRJDRfUSwxJS9cMyQxM18lISg1X1E4MiZPXDwmIidfJlE4Ol9RUDgmT1w/JlFXXworTSZRPDlfUTwyJU9cNSQhM18lMSA0X1EwLyRfXDMjUT9fJVEsO19RWDknX1w/JjFXXycxRDtfUixAJ19cRworTSkiL18oMVg9X1E4MiZPXDglIVNfKCFYQV9UTSsyL10tM1RTXzNFKSpfVFkvMi9cPCYhS18nQTxBX1FMOAorTSdPXTY1RS9fNkVJN19VUTk1L105NTU/XyYhMD1fUUg5KC9dQDdWN183NVk/X1YlQjhfXF0vJC9fJUE8PgorTV9RTD0oT11BOEZHXzhGKUtfViVBOy9cNyVSI18oQixKX1RZMDU/XTM1NUtfNVUpOF9SPD8oX1xFKSIvXworTTZVTThfVVU+Ni9dSzpGR19FOS41X1gyIEBPXTk1RTdfNiVBO19VLTU2T10wNEVHXzNFITdfVE0tNS9dKQorTTJVK18yVFU0X1Q9KTQvXSIxJE9fMSQ5LV9UMSYzP10jMTRTXzA0LSpfVCUjMk9cXjA0O18wJC0oX1QhIworTTIvXSExJEdfLyNZJV9TVF8xT1xdL1Q7Xy9EISdfU1RfMS9cXC9EL18vM10kX1NAWi9fXFIsIy9fKkJASgorTV9STEkqX1xIKUJDXyoiOEhfUkRHKj9cRykyP18pIihEX1I8Qyk/XEgpIjtfKjI0R19SREUpX1xFKCIzXworTSYhLDdfUTwyJU9cOCRRP18lIFwzX19fVV5PXE8pMltfMVNZK19SJDwoT1w6JTFHXyVBJDVfUTQwJS9cOAorTSRRP18lQSQ1X1E4MSU/XDUkITNfJiEsN19RPDEmP1w3JEFDXyMwQCxfVzlSPS9dKTEkS18mMTQ3X1FIOAorTSRfXDglMTNfJEEgM19RNDMlT1w1JFE7XyRRJDRfUSwxJS9cLSJQW18mMTQ9X1FUOShPXD0mIVNfJiEwNgorTV9RLC8kP1w0JCErXyVRKDZfUTgxJT9cOSUhQ18nITw7X1EwMCYvXDckUU9fJ0FMQV9RVDsnT1xBJ1InXworTSwyXFFfU1xdL19dLDJEU18lUSw7X1FENSc/XEUoUjtfNDUlLl9VJTM0P10vNERTXzRFKS9fUVQ4Jy9cQworTSciO18mQTw9X1VFOTVPXTU1NStfNUUtLl9VQTQ1T1w7JVIjXyYxQD9fVUE3NU9dOTZFM182JUUyX1I0QworTSk/XDwmUidfJlFIQF9VUTs4P109NyYrXzg2IUZfUTw2Jy9cRCkiP181VUE5X1UhMDM/XTc0NF9fN0U5NAorTV9VOTI0L11aPzc/XzgmLT1fVT05NV9dNjVVQ18zJSU2X1RNLzVfXSo0JUtfMVRJNl9UWTA2L10qMyUvXworTTFURTBfVD0pNC9dJTFUW18xREEvX1Q9KTQvXSQxRFdfL0QhJ19UISIyP1xbLzQzXzBUNSxfVCEjMi9dIQorTTEkR18yRFUyX1NZITFPXF8wNENfL1QlKF9TWSAxX10iMSRPXy9EISVfU1kgMT9cXzA0O18vRCElX1NIWgorTS8/XFIsQzdfKzJUUF9SPEcqT1xLKjJPXyoiOEhfUkhIKk9cQygyL18pMiRDX1JERSlfXEInQiNfK0JITAorTV9RRDQmL1w0I1EvXyYhLDdfUSwuJE9cOCRRP19ePltVX1NYVC9PXEYnIk9fJ1FEQV9RRDQmL1w2JDE3XworTSUxIDRfUTwyJU9cOiUxR18mISw3X1E0MCUvXDgkUT9fJVEwM19RPDMlP1w6JTFPXycxPD9fUUw0J09cTAorTSlSV18oMVQ/X1FQNyZfXDUkUTtfJ0FQP19RVDsnT1w8JkFXXzAzXSJfVEUnMk9cOiVBW18nQUhDX1FUOAorTScvXDglITtfJyFAOl9RXDsnP1xAJlFfXyhBVEFfUjA/KF9cSChSP18mMSw7X1FANCcvXD0nUjNfMlRdMQorTV9UVS80T10wNCUvXzQ1JTRfVTE0NV9cNyRRT18mMTQ9X1JcTSwvXUk6NjtfNTU5N19VJTM0P10xNCRfXworTSchPD1fUiw8Ki9cOCUxT182JUE1X1VBODU/XTs2JS9fNSUhMl9RTDcoL1w7JkInXzYlOThfVU06NF9dOworTTY1M18pMihBX1IkPSk/XDwmMV9fN1VVQF9UPSUxX1xNKlJXXyhCIEJfUkBHKU9dMjRUV18+N1lYX1kmMQorTUNPXU86RlNfNVU9Ol9VKTQ1X10xNFU7XzQlKTdfVFkvNU9dKTQlO18yJF01X1QxKDQvXSUxRSdfMURBMAorTV9UPSk0L10mMiRfXzEkOS1fVCUjMk9dJDFEV18wNC0qX1QhIjI/XSAwREdfMDQtKl9UMSYzP10hMFRLXworTS9EJSZfVCklMk9dITEkR18xJD0sX1QlIzJPXSEwVEtfLzNdJl9UISIyP10gMEQ/Xy9EISVfU10hMU9cXgorTTAkN18uM00gX1NUXzEvXFwvRC9fLkNRIV9TVFsvT1xXLTM/XyxDIFJfUyBOLC9cTSoyT18pQihEX1E4MgorTSUvXDckUTdfJTEgNF9RKC0kP1w3JEE7XyUxIDRfUTgxJT9fX14/Q18oMSw0X1JEOyhfXDslIVNfJlE4PAorTV9RPDIlT1w8JVFHXyhBSD1fUVg3JV9cPSUxQ18lUSg0X1FENCYvXDYlITtfJVE0N19RLDAlT1w3JFFTXworTSZBLD9fUVQ3Jl9cQSZBS18lMSw1X1FQOSYvXFotUztfLyNIXV9UNSQyT10pMjRTXzNUXTJfUVQ5KD9cQworTSciO18oQVBEX1RFJjMvXScxJEtfMSQpJV9TRFcuT10kMEQ3XzNEUS9fVSUvNE9cOSRBU18mUTA+X1JERQorTSs/XTQ1RU9fNTU9PF9VNTc3L108N0YvXzclWUNfUTQxJj9cOiVBW18oQiRIX1VFODdPXTU2JVdfNiVRPgorTV9VRTs3T1w4JTFPXyghUERfUTw2Jy9dMTRVJ183JUk1X1U9NjNfXTM0NS9fJkE4P19RWDooT10oMURDXworTS8zWFhfVEUqMS9cSSlSS18oQVhGX1IwQyo/XTo2VVNfNlVFNl9VWTg1T14hPydTX0A3WV1fVVk/OC9dMAorTTUlO181JT08X1UtNTZPXTI1JU9fM0UhN19UTS01L10mMiRfXzBUNSxfVDEpM19dKDI1I18yJD0uX1Q5JworTTNPXSozVTdfMjRJMV9UQSczT10jMTRTXzI0TTJfVEEpNC9dJjFUW18wVDErX1QpJDMvXSAwREtfMFQ1LAorTV9UOSkzT10lMiRXXzEkPSxfVCEjMi9dJDFUU18wNC0oX1QtIjIvXF8vRDNfMFQpKF9UJSMyL1xZLyQnXworTS5UISVfVCBfMT9cXjAkN18uQ1EhX1NIXDA/XFovJCdfLlNMXl9TXF0wL1w1JFE7XykyLEZfUTw1Ji9cVAorPixDN18lUTQ4X1I8RSovXDQkQTdfJEEgM19RMDIlP1wzJDEzXyUxLDYKKyAKK2VuZApkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RyZ2IudXVlIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3RyZ2IudXVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ODhlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGVzdHJnYi51dWUKQEAgLTAsMCArMSw5NzEgQEAKK2JlZ2luIDY0NCB0ZXN0LnJnYgorTSA9SCEgMCAjICdUIDowICMgICAgICAgICAvXCAgICAgM0ZFRT03PUUoJS1QOjY1Rzk2UVM9JylBODcwIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgTzggICAtNkAgICNNVCAgISFAICAgMVcwICAkVUggICEzNgorTSAgIDY1QCAgJV1EICAhRTkgICA6VyAgICclXCAgIVc/ICAgPzhAICAoLjQgICIpSCAgIENaQCAgKTZMIAorTSAiO0ogICBIOyAgICo+XCAgIk1SICAgTF0wICArR0AgICJfWiAgIFE/MCAgLFAgICAjMiMgICBWIUAgIAorTS1YRCAgI0QrICAgWkNAICAvISAgICNWMyAgIF8lQCAgMClEICAkKDwgICEjR1AgIDEyKCAgJDpFICAhKAorTSogICAyOkwgICRMTiAgISxMMCAgM0MsICAkXlYgICExLjAgIDRLUCAgJTBfICAhNVBAICA1VDQgICVDKAorTSAgIToyUCAgNlxYICAlVTEgICE+VSAgIDglPCAgJic6ICAhQzcwICA5LiAgICY5QyAgIUdZQCAgOjZEIAorTSAmS0wgICFMO1AgIDs/KCAgJl1VICAhUF4gICA8R0wgICcvXiAgIVVAMCAgPVAwICAnQicgICFaIkAgIAorTT5YVCAgJ1QwICAhXkRQICBAITggICgmOSAgIiMnICAgQSlEICAoODwgICInR1AgIEIyKCAgKEpDICAiLAorTSkgICBDOjwgIChcSiAgIjBLMCAgREMgICApLlMgICI1LUAgIEVLNCAgKUBVICAiOUxQICBGUyggIClSUworTSAgIj4tICAgR1ssICAqJE4gICJCSVAgIEkiQCAgKjZFICAiRylAICBKKiggICBROCAgIC1WUCAgI1VYIAorTSAhIz8gICAyNyAgICRdQCAgITU2ICAgNlVQICAmJUQgICFHOiAgIDs3MCAgJy4gICAhWUAgICA/WFAgIAorTSg2OCAgIitIICAgRDpQICApPkggICI9SiAgIEhbMCAgKkcgICAiT1MgICBNPUAgICtPQCAgIyFbICAgUQorTV9AICAsWCQgICM0JCAgIFZBUCAgLiBEICAjRiwgICBbI1AgIC8pJCAgI1g0ICAgX0VQICAwMUggICQqPQorTSAgISQoICAgMTosICAkPEYgICEoSjAgIDJCUCAgJE5PICAhLSwwICAzSzAgICUgVyAgITFOQCAgNFNUIAorTSAlMyAgICE2MFAgIDVcOCAgJUUpICAhOlMgICA3JFwgICVXMiAgIT81MCAgOC1AICAmKTsgICFDV0AgIAorTTk2JCAgJjtEICAhSDlQICA6PkggICZNTSAgIUxcICAgO0csICAmX1YgICFRPjAgIDxPUCAgJzFfICAhVgorTSBAICA9WDQgICdEKCAgIVpCUCAgPyBYICAnVjEgICFfJSAgIEApPCAgKCg6ICAiI0ZQICBBMUggICg6PQorTSAgIigoICAgQjosICAoTEQgICIsSTAgIENCQCAgKF5LICAiMStAICBESyQgICkwVCAgIjVNUCAgRVM4IAorTSApQlYgICI6LSAgIEZbLCAgKVRUICAiPkxQICBIIzAgIComTCAgIkMqICAgSSo8ICAqOEYgICJHSSAgIAorTUoyJCAgIFM5ICAgLjcgICAjXVwgICElPiAgIDJWUCAgJSU8ICAhNzYgICA3NiAgICYtRCAgIUk7ICAgOworTVdAICAnNVwgICFbQSAgIEA5ICAgKD48ICAiLUkgICBEWyAgIClGRCAgIj9LICAgSTtAICAqTyQgICJRVAorTSAgIE1dUCAgK1dEICAjI1wgICBSP1AgIC0gKCAgIzYlICAgVyIgICAuKEggICNILSAgIFtEICAgLzEoIAorTSAjWjUgICEgJiAgIDA5TCAgJCw+ICAhJEgwICAxQjAgICQ+RyAgISkqQCAgMkpUICAkUFAgICEtTEAgIAorTTNTNCAgJSJYICAhMi5QICA0W1ggICU1ISAgITZRICAgNiQ8ICAlRyogICE7MzAgIDctICAgJVkzICAhPworTVVAICA4NUQgICYrPCAgIUQ3UCAgOT4oICAmPUUgICFIWiAgIDpGTCAgJk9OICAhTTwwICA7TzAgICchVworTSAgIVFeQCAgPFdUICAnNCAgICFWQFAgID4gOCAgJ0YpICAhWyMgICA/KFwgICdYMiAgIV9FMCAgQDFAIAorTSAoKjsgICIkJkAgIEE5TCAgKDw+ICAiKEgwICBCQjAgIChOQyAgIi0pQCAgQ0pEICApIEwgICIxS1AgIAorTURTKCAgKTJVICAiNi4gICBFWzwgIClEVyAgIjpNMCAgRyMwICApVlUgICI/LSAgIEgrNCAgKihLICAiQworTUowICBJMjggICo6RyAgIkgoUCAgSjooICAgIiAgICAgQDAgICAoJCAgICFfICAgID9QICAgJ1ggICAiIAorTSAgICBAMCAgICggICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiICAgICBAMCAgICdcIAorTSAgIiAgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCAgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgIAorTSAoICAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIAorTUAwICAgKCQgICAiISAgICBAICAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiIQorTSAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkIAorTSAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgIAorTSAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICA/UCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIAorTUAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiIQorTSAgICA/UCAgICgkICAgIV4gICAgQDAgICAnXCAgICIhICAgID9AICAgJ1wgICAiISAgICBAMCAgICgkIAorTSAgIV8gICAgP1AgICAnXCAgICIgICAgIEAwICAgKCAgICAiISAgICBAMCAgICdcICAgIiEgICAgQDAgIAorTSAoJCAgICIhICAgIEAwICAgJ1wgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIAorTUAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiIQorTSAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkIAorTSAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgIAorTSAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIAorTUAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgID9QICAgKCQgICAiIQorTSAgICBAMCAgICgkICAgIV8gICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkIAorTSAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAhXyAgICBAMCAgICdcICAgIiEgICAgP1AgIAorTSAoJCAgICIhICAgIEAwICAgKCQgICAhXyAgICA/UCAgICdcICAgIiAgICAgQDAgICAoICAgICIhICAgIAorTUAwICAgKCAgICAiISAgICBAMCAgICgkICAgIiEgICAgP1AgICAoJCAgICIhICAgIEAwICAgKCQgICAiIQorTSAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAICAgICgkIAorTSAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgIAorTSAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIAorTUAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiIQorTSAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkIAorTSAgIiEgICAgP1AgICAoJCAgICIhICAgIEAwICAgJ1wgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgIAorTSAoJCAgICIhICAgID8wICAgJ1ggICAhXCAgICA/MCAgICdcICAgIV8gICAgP1AgICAnRCAgICFcICAgIAorTT9QICAgJ1wgICAhXyAgICA/UCAgICgnSl4hMEMnIVA2JjFUNyYhMDglQTw2JyFcOyZBNDgtQ1UqMyUoQQorTSlCMSwyRDRaMTRdMichWE02VVE8OFYsOSdCQT43NVk+JlIwPDQ1NS80UVxCMiNBJCpCOEk3JTk2PydVQAorTTVFUTo2VT00M1RRLzQkWS41NSUuMyUpMDNETSwyRFEuMzRRKDMkQSgxJEEoMDAtJSBUJisvRCA2KUFAVQorTSYiQDUkUTQhJSAkNiAuV1kkUUw0JUEoNyZBPDUkQTA0JTEgMyRRPDokUURXLkQxKTNRRDwnJDkkMEM9IgorTTMkXDIlIjU2NVU9PjdBJDYoNUE4NyVMNSchOTM2RTkxJUFJJi9ESEcnQi07NjVBXD9FXTQ1VTU0NCRVKAorTTE0RSkxVD0vMkQ9JTJURScxJDEiMTRFKDFULScwVCheMEQsXDAjXSAgU1IrLlNUMyhRNFIlMjQyJCEoIQorTSQwJDMgLldfKDJEOyZRPDwoQVg9JVFENiVRLDcmQVRBJTFQWi8kNSkzUVRDKERFJzEjRSQzRSQ5JlJFNAorTTU1NTw3ITQ6KEVFNTYlRDgoIT0xNyU9MyZBWSgvNERJKEIxOjZVWiFANVkwNSUtMjNETSYwVDEoMiQ5KgorTTI0QSMyNEEmMFQpIDBUOSUxJCEkMDQsXzBUJFkuVCBeIFNKKy5TXDUpMTxUJVI8NCRBMCEkUCQ1IC9PVQorTS9CTEEmITQ0JUFENyUhPDMlMUw/J0JUPyZROD8nQVUiMkFYQychODonMVxBKFI8OyciMTE0RS00NVFMPQorTSwmOTc0NFw9KiFNNTU1LTIoIiU4NFUwQSkxXUAxUlRCKURVWENGUTo1VTk3NUU5NTQlJTA0JF0tMkRVKgorTTI0RSozNEkmMkRFLDJESSYyND0lMUQ1IDEkLSEvQzxSLCJMRCUhNDQkMTghJSAkNSArO04tIVA5JSEkMAorTSRBNDMkISw0JFE0NyUiPD0lUSw8JlFIXzFRODomITA4JlFMPSdSLDMlIV0vM1UhMTUhLDUrNkU2NFUgNworTSchNCM2LCkwJVFJNjZFREInMUU9MTJMQClVLV5ENkk3NSUtMjNVIS8yJDkoMjRBJjBUOSMwRCkjMUQtIQorTTE0MScwVCxfMEQpIDA0IFsvU1hcLlM0UCtCREIkQSwwIzEoISQgJDEgL09ZL0I4PyYxODUlUUg4JTFANworTSVRSD0mUlBBJyE0PicxUSEyMUg+JzFAPCdSIEIpIkA5JiFVKzM1ITE1ITw5K1ZFNTQ1JDwoUUE4NiVNNAorTSZRTTg2VUxFKDFRPzFSVEIqJSlZRDZdNzRFJTAzREUoMSQ1JjFUOSQwNDEhMCQhITEkJF4wRCUkMDQkXQorTTAkIF4vU1hZLzNQWi8zPFIsIlRGJUE8NSRBPCElMCQ2IC9PWitETEImMTQ0JVE0NSUhPDkmIFFUMkE8MworTSUhLDYlQTA0I0FUQichODEkQTg1JiFMOCZSJD4oMyRfMyFMPSlEWTEzJFw8KUFVNjREWTYoIV02NSUoRQorTSgyIUE4Rjg8KVVFLTNVMTA9VVU3NiU5NzZFOTg0VSEwM0RdMDM0PSkxJFEoMjUpJjIkQScyVDUlMUQ0XQorTS0zIEoqUkBKKFIsRygiUDgkUTwhJEAkNyAuL1UpM1g8JTEkMCRRJDEkISwxJEBBUjEhNDglMSAzJFEkMQorTSJRNDkmITAvJCEoMSUhPDAkUUw7J1JcXTJBLDUoVSUzNEUoOCchPTk1NS00JVFBNzZFREMmUUk7NyYgNgorTSklQTA0NTkyPzYtOTVVJS80JEkwMyRFKTFUQSkxRCEiLzQ1IzEkVCMwOTUgMSQhIDA0IFosQlRHKjI4SAorTSgyJEUnQkg0I1EsISNAJDMgL09fK1Q8QSZBODUmITg2JTFANyVQVVYyMUQ6JiEoNSUxLDMjMUQ9JzFAMworTSUhPDYmMVA0JVFYPSgzJF8zITw5KTUlMTNVKD0oUUk5NTU5OCZRRTg2NUBFJyFNPDc2JDcpJT0wNVVZNgorTT5GITc1RFErMkQ9LjJEPScxNDknMSNZIC5ULSAwNEheL1NcXjBDWF4vU1haLEJURypSQEooUjRJKEJYOQorTSUhQCEkUCQ4ICg3USdBUDolUDQ0QyEsNiUxODImMVw3JDEoMiRQLDRYQTQ6KDFIOicxRDYlITAzJVFMPworTScxTD8oUVQ6JyIlKDMkSSgmQiQ+NFU9NDVRVEA5NV1DMFFYQjo2TUwoIkk1NkVAQyhVQTg6OTYiNTVNOgorTTY1PTQ0RTEwMlRVLTMkSSoxREEoMjQ1JjFEPSQwVDBfLFJISyoiQEkpUjBFKUI8RykhPDYgMTwhJFAiJQorTVwxPDQlQSwlJChQLyRBLDIjQSw1JFEoMCNRICMkOFQyJEFANiYhTDckQSAwI1BcMyBRRzIoIjA+JEEwPgorTTJUXTIzUUA3JiU5OjY1NDQmNV0+OENQNyc2KUI4MTxDNCU1MidSMTs3RkozQCU5ODU1KTAzNE0tMjQxJgorTTFENSMwVCUjMFQwXi9TXSAvU1hfLkMgSCoyOEYpUjRCKFIwRSkyIDMkQCQzIDBcIEE/SEAmUUw4ITE2IQorTSUgLDdCISw4JyFANSUhJDIgUS9CJSE4PCZRUD8mUTw1JTEwMyVRWD8nMixHKDE4OCgkTS0zRFg8J0FNNgorTTZFUTkmIUlANzYkXSVBTUE4RiQ3KERZMzVSPEU2VVVLRTgxOTYlLTAzRE0pMlQ9IjEkMSMwNCReMCQhIQorTS8jVF0vQ1RcLzNAUipCTEgqIkRHKSI8SCoyREUmITwhJiAkNCAoN1IoIUQ1JVA0NFwxLDYlMTQ0JlNEOworTSUhNDIkUSgwJCEsQidRNDMkMSgxJEEkMiVRTDolMThIL1NEOicyUTAzVSEtKFI0QjZWJTg5MVhBOFZJUAorTTQhVEE6Jl1NJzIxSTomQEMoU1haJ1JNMDVHIUA2VVFBNiU9NjQ1JS4zNFEuMkQxJTI0NScxNDRfL1MkTgorTStCSEopUkRFKiI0RCkyIEMpMihWIDIsISUwIiVcQUwyJFEsJSQvJC8kQSwzJCEkSiRRIC8jUSAvIzBUMAorTSchPDEkMFwwIzBYLSNBIDMkQSQ0KiQkWiRBMEY0NSUzNFIwPCclVUI2Viw1JiVJQzo0NDYnJV1EOEEoOworTThGIT8mUVkgLiFQRTU1TVI4NUE5NyUtMTNERSoxVDklMVQ0XzAkMSAwI1heLkNESyoiUEgqIjRHKFI4QworTShCLD4oMiQ+LEAkPyAxJCBBP0xGJlE8OCExNiElICw3WzE0OC0hSDUlISQyJDBcLSQhXDslQTQzJSEoMworTSRBLDElUUA5JjJVJS8xODgqNSktNDUoRyghVTs4VVVHJjFJOjhGQSUlMUk/OSYoMiZWJT44MVw8L0NIPgorTSolSUA9RjE2NVVJMTMkSSUyJDUlMFQ1Ii8jVSEvM1hcLyNAWisiRE4qQkhHKjI0SCkyOEcoQjRGKFM8IQorTSkgJDYgKVtTJVJQSSZRLDQkUTA0JFE4OCYhPDkkUTQ0JSEsMyRBKDMkQTg/JUEsIyRLTDEkQSQzJ0FQPworTSQ0MSooMUg8LEU1NTdGLFMoIV1JOiY9SSdSIUY6JkE7KDFZSjpGMEAoVSBQKkIkPi9SWEQqQ0EgKSIpPworTT85MUg2VVU3NFAtLkJUUSgyREEnMFQkVyxCVEwgUk4lKiJESCpCPCMpQDREQDIoISlAJDAgKVtQJSJERworTSVQXDAjUSAwI1EoLyRBLDEjISQwJDEgMCNQXDAjUSw7JFEgIyNbTC4jUFgyJVEwPSNUOTAoQSQzKyUxMAorTTY1VE0mIUFDODYlQiVBMT84NiU2JkE9RDklWDcmRFRTKVFIODAiTDwpI1ReJ0FdRUBZNUU2NUEwMkAtJworTUVEOSMxNC0iMCNYVCtSSEkqIkBJKUI8RilSMEMoUjAlKEgkQCAyMCEjQCI+XyFYUSshUDQlMTA1JTEwNworTSRRPDgmISw3JTEkMiRBJDEkIFQ1KCE0MiBRJzQkISQwJDFAOCgxJSo1MiwzJTJVMzM1OT4sIVA3N0YpQgorTThRQDc3RiFANSFMODk2NT8mMVEtLDI8OyY0JE0oIj0gMEIkPzkoKjY5VTU1M0RJKDFENSEvRCBeLzNYXgorTS0iXEwqUkhKKlJASSoiREYpMjRGITIyIShAJEYgMSggRU9EOyZRPDglQUw4JTE0NCVRNDskUUhFKFJYQQorTSUhMCMkWDQyJiZQNiRQLDJRMSQyJDFRMy4hTFMxJCUrJlFQWS5EKTg2MzBDJ1ZRTjxHND0pJjFJOjYgPworTSgmOUg5UVA6NiVZOSchWF4qIVhFODYgQClEPD4qJVlQRzcxPjclPS4yVCEhLVMkTCtALExAMkwjKjhESAorTSpSSEopUjxIKiI8JCk4JEggMighKlAiNl1BQDklMTAyJVEwMSQxIDMkMUw0JSIgQCshXDEkMCwwQTBYNAorTTohKDAgUF8pI0BcLiY0TFIoI00wNCU8NSUjOFswNS0yKzFMODlGPUw7QTA4NlY5SDZBODk4VklGJTEtNworTTg1ODUmI1xFJUFdQzchQEAxMVBGNyc2QTxFQTUzRDkjLlNQUisiREoqIkBJKiAsRkIyNEgpUjxEKSI0RgorTSkwMENAMjghKCAkSSApW18oIVg5JjE8PCYxODYlMUA3KCE8NydBWEgmUSQxJCEgMiRRSVAlUSgjJDxEMAorTSQxIDkzUzxDLzU9OjdBSDguI1BeNDUkTCdRPUE6JlVPJUFNPTlGPTsmIUlDOiY0NiUlOT81QTg5MCI8OgorTShGPUEnIiUnJ0JBPj5KRVc2VTEuMSNUWC4yXEkqUlxNKzJMSCBSOikpMkBHKVIwRCkyQEchIjYhKiAkQgorTSAyVCBdPyxGJlFNWyUxRDglUTw+KTQuJUEiKUw2RSBaLCJUSSdRQDcmISQzJSEoMiQxKDIkMTEgJlFMWQorTTBUPTQpMy0iLzRJJjBDREMnVVk5NSVUPzEjQTs1RURDJ1VVOzghVD83VV1BJ0FRIy1RUEA5Rlg+KEcoQAorTSklPEQqJFU2PlgpIi0iPEQoITxFKjJQUy1TUF4vVCBfLzNQVywyVEwqQCxIQFI8RylAJEggMTwgXT8gRAorTSYxRVckMTQ0JFEsOig0NitCMV1HNiRYVysySEYnITQ0JSBUMCQwXC8jQFwvI0BYWCVSLSU0RUVAKDJVIAorTTAlISwwQzQ7JiVBMjNFODYuIl05NyU4NyYlUUM4QTw5ODYpPiVROSQtITA6OUZANSZWUDooNTRAKSRVNgorTT5YISAsQjA+JkEkQilCRFAtI0RbLyNMWi4jPFQrQkhJKiAsRkBSNEUpICRGIDE0IF0/QEknMU1cJUFIOQorTSYhQD8pRE4wQlFdQjRESFcqUkBEJkE0NCYxLDIkUSQxJCEkMSQhJF4nMj0qN0ZRVSozKSQwRTUxMVNIPworTSVVLTMzVTw4LlMtOzZVQDomNU0/OCFAOjdWIT4mIT0lLUFAPTpWVDknJlw9KFU8RislKTtAKDUkLSIwPworTSZRKEIqIkxSLEM8WS5DRFgtQzRSKyJARypALEhAUjxHKUAkSCAxRCBeLzxEJjFCMydBPDclQTQ2JiNCJworTUQ8Nl5NOz5dOTZNQS1SREYpIjRCJ0FENyQxKDIkMiRdKSRNNjAlNTkoQkRVLURdKTEzMD4nVDEiKDIkNgorTSpSPD00VTBEKEVVNjYxUD44Jl1HJ0IkXyshVEEvUiA+JzM4Pic2QEsqNF0kJ0FRJTgoPTkyQUkxM0QxKAorTTFESS0yJEUnMEQxIDAkKFQrMlBJKjAsSCAxVCElICJAXSIoNyVZIDokUSwyJEEsNC8pJjhRK0ZTTStFQworTTpGIFYqMjhDKSIgOyVBMCMjSUAtJzNERjVWJS85JjA+KFMsWzZFPSwtQTg4L1NQOyZQVCMoSDE8NDFAOQorTSBVUlMmMUFCPDYwNyZUJEklMURdJkE0NiwhQDo6MVw9MlQ4QigkSUVBNTknJSRRKS9ULSExNEEjMSQgWworTS8zTF0vUyRMKkI8RyBSOCEmUCQyIC9DXClRRDZEQVw4JiE8NCUxRSRFWUchTSpeVlA2NUc3MyxEKDIgQworTShBVDglQSAzJFEoQi9SUT46VVVcP0JUSC1TWUU4NTxcJkE8XC8xWDwjUjhNKTVJMyZRRTk1VUg5JjVZTworTTkhQDwvUkQ5JzNcPSYxPFEmUVFKKEIhMDMiSEgzVkIpNiRENTI0OFwwI1kiMTQhIS9TSFwuM0xdK1JMTAorTSoyRCMqICQ9IDE4IF0/IForMko7JVE8OCZBND4mMUYvQ01LNVRcSyA1VClfN0UgXywiTFUsUkxGJiEoMAorTSVBRFwyJTVDNURZLTNVXFAvNSksMTQwRyZVKDwlMVA+JzIkSjMkTEcoNlVMOUIgRjMjVFMnUUxdJEFUPworTSc0UDsmVFA7KUY4UShWQUApRDxCKTRAXTFRWUk1NSUuNCRVJjFVKFotMyhQLCJcTipALEtAUlBKKlAkPAorTSAxPCBQTyhaKlI+OCRRLDQmISw9JUFONUUtRzNULEJfNUQqITdVLSIsUlhbLUJUQyYxLCwkIUUjNFYtUgorTTk1UTszRTxLMEVNOTQkOD8mJTQ9JTE4NyYyWFg0VDQ7JjAtR0whSDsxI0hMJUE1ISNRJDYmNDw1JURYOAorTSgmMEgmVjk6KCQwPyhESF8xITVEM1RNKDJUQSEwRFBUK1JQSipCREgpUCxKQFJERyogJDkgMTQgXT84XworTSsyPjomIUA5JyE0OiYhXjpGPTsvVCxXKzhEPV84RS0iLFJYWC0iTEMnITgxJTIhJTVGViA8VllPNzVMSAorTTE2PUY2VEhDJkU0PiZBRDgnVEEqNEQ4QCVVWUI6IVQ7MENATSYhOFwjMTA4JDQ0OCUkUDooVjhMJ1ZBPQorTShUOEEpJSElMUE1QjQkUSkyNDhfMCRUVSwiVEsqUkhJKVAsSUBSTEkqQCQ7IDFEIF5fKFwoOFkwJVFANgorTSdRQEElQVYrRTxXKlE8Ml9EUSQ7JjEsNCYxJEArU1RfK1JMPyQxTFstRDE+LVI4VTJRXEgxVT0rNDU1MQorTTJGLDMlIVQ5J1JQRjYmUEEpRV1HQVE8PEBXWUYnUUUnJEFYPiklTDYpVUw4K0Y8WShWPUQlRUA/KSY4QQorTSdVND43V1U4M1RVMjI0PSkxNDElMCQ1JDAkKSEwRCRfLUAkQyAxQCBeXzReJ1hJLSUhNDMmUTBAJiFeMQorTUZcXytSPEsnREBcOiVRLDQmMSRGLTQtJSxCWEAjUU0iMDUpSzEjLSIyUURFMzYpODdFUS0yVkAxJEE8MworTSdDVFg3Vkg3J1VNRUIhJDNAKCVDJUEtLCRRNDcoJTgwKEVIMilWMFAmVjU+JCU0PCg2LDslREg8N1dVOAorTTMkSS8xRCkkMCNdIC5UIF8vM1xeL1NYXCxQJEAgMTggXl8sXCg4XS8lQTw1KFFEPSVBTjBITTc2VT0vLQorTUdBMDkmUUA5J0E4RSxEISIsQlhBJDIhJDElUVo0VCkzNkFYQzRGVUU6VjUyM0ZINSVBSDYqRUEtOiZYPgorTSglLUFCMTA3QEddQyYhMS4lQUQ4JiUwMyglRDMqJjBUJ1Y9QSRVPD4oVjQ8JUQ8QDkoKT0zREkvMUQhIgorTS9DVF4uM1hdLzNcXi9TWFwsUCRAIDFIIF0/PEcmIVBQJlFENykhTDkoMiItRCxHKVFcMl1GITg8JVFIOAorTSZBNDMnUUhBJiNURCUxQSAyJSU8L0JUXDRRODg5JSUzMkVNKzglJDAlIUA8LDJQPT83XEQrJkogQlFIPAorTT02QUEoIVBbMVFUPClEIDwmVFA3KTU8XShWJTslRUQ/KCQgPSVRRDgkIkEoNEcxPDYlKS8zREknMFQgWworTS0wLFNAUyBQLFAkUCAyICBdP0hIJUFETSYhODQnMTg4KUFeLkYsWytSXEslRVEoOSRRQDYmISwyJ0FURworTSgkLEclUUknNFVdRjIjQSc0USg6OyVNQDZGOTA5VUAuJCEoOi1DWFBBR1w9KUZBX0JBMDY9VyVEJjE5IAorTTIxNDcoQ0w2JUREMCclKFEmVV01JCU4PCczSDckMSw0IyIxJDQnKTo1RFUqMjQ1Ii9DTFYsIDRNQDMgIQorTSswJD4gLzNcKlFAOysxQDYlIVg0JTJEPkNZWzNUXTczUlosOCYxQDwmQVA3JDFUOykhUSApMTQ+MjU5SQorTT4lQSU0Rig6JicpRTs2SVM1NkU6JFE0NSdUNTsySTomKSJFQj8oRDcmV01POEFINzE0XDslMUhZJjExJworTSNRUTAtQV1BNiEtOCdBXFsmITA2JjEoSjJFKVQ3JUErMVQ5Ii9TTFgsUDBOQFJMSytAJEsgMiAgXl80SgorTScnXjUmQiFHPEFISCQiSitDLDswUyxaXEcxWD4mITw1JiEoMygxSD4pU0xMKyJEVjFVISYtQl0oMzEoMworTThVQUE3Jkk2NSY4OSVBLDkuMlRFPTg0Szk1OTQzQFBEL1RURShRVSAzQVA8LSVUPiZURDsqJExUKERZMgorTSVVRD8lUSA4JTFIPCVRXEEnMiRANFcxOzRVIS0yNEEpMiRFKDIkMSMwICRcIDE0IF5fMEcmN1o0JVFVRQorTTshNEclIkIrRSxXMVMtIyBGQTw4JEE4NCVRJC0mUURAKzQkUCwiTFw0NVkwMCNJMzRBIDA6NilOOlc9PAorTTcmUDYkISA5MDQsVz84PEQ3VTEzMzA4QTA1OEgnMT0mNCE4NiwlQDglRDg2JzQ4SyckUSwkNTg8JSBQNgorTSRRSDYjUTw5JkFYPTQnJTk0NFkoMSQtJDA0KSEwM10hL0AkWiAxLCBeX1xPJjdOMyVRVUk7MShGJyJSMAorTUYsWzRUPTsqSUFYOyUxNDMlQSAuJyFAPiojUEsqUl0hNVZBQjQkNT03UTQwO0ZRWz44MUM4JyQ+JTEoQAorTTUmJTREKFxLOCUhMDMgPEMxNShGJ0FBLTYhTDcqJTg7JSQwNCc0ME0nVFkvJSVAPiVBJDomIiQ7JFFMPQorTSciID80Rl01MzRJIy9TWF8wJC0iMENUXS5AJFYgMTQgXl80VSo2SjAnMlI0PlFMPycxXjBDTDcvU1w7JworTUUhPDslMTw4JkEsMyZRUDwpQ1BPKiJURC80RUouIyRbNUE0TS81QUM5VyE+NVZAVCdRTEInQlA+SkVcTworTTo2VUE3I10jLSU0NiQiJFRCIixGLlY0OSgkUEMoIjxCJzRFKyVVMEIkUTQ3JFFIPCYhREEnMTw+J0I0RQorTTFXNUI1NSUqMiQ1IzBDOFYuMCRUIDFIIF5fKE8oVkoyJjJCNT9RPDkmUVowRTxLL1NcSyxFITQ5JFE0NgorTSYhJDEmMUg6KyNYTysjMEoxNS1TMDNNJThRREsxJjVQPEdNSDhHIFImMURIKiQoT0tWJE05VlE/NkNVIQorTSxFLDMjMVhZQiFMQC1GIDMmVEw9JiIwPyZEOSgkNFg8IzEkMyNRODYkQSw7JVEkOCYiLEMxNy0/NCRRJQorTTBUIF4vMyxTLUAkUSAxPCBeX0hUKSZeNidCVkBCUVQ6JzFWNUdMXzZWLTM4RzFIPSUxPDgmQSwzJlFQPAorTSlTREopQzRPMlVNXzM0NS08IiRPM1cpXT84OVA5NyhWJyFMTS5GKShPRkRROFYlOTUjPFsrJFwxIzIgXAorTUMyJEMsNVg2JjRIQCciOEEnJEEqJSUkPyQhODglIUw5JTE4PiZBMDsmUjRFMVc1PzNESSMwM1hcLlMkUQorTS0gJE8gMUQgXl8tKCwhSUUoUjQ9JjE4PyZCWihDTDcrU0xbJUVSJDslQTw5JkEsMiZBUDopQ0hPKVJYQworTS0jRF0kQVA5KSNBLTY1JTs4JkFHNiYgUCgyKEImIUg1UFhIODcmPTw4Nk0/L1RcNiRBPE8xUig7L0YtPAorTS1VKDUpIUA3JyE8QSYiPDcoMUQ5JTEsOiYxTDgmMTw5JyFARCYyPFc0VjUqM1RFJjBUPSQwICUjIDNQIAorTV5fISIqQUlHJ1IoQCdBLDklUlIoRTxLK1NNKypFUVw5JSE0NyYhJDAmIUg4KyNQTypTJEYuM1xfJEFQOQorTSpDUS03VUlGOzc9UThWTFMnQiBEJ0JMQVFIUDo3VlFAOTZdQzBUXDMjUTBUMVFINS41WTYsRSQvJyE0NAorTSYxMD4kQiQxJlE0NSQwXDQkUTQyJFEkMyVBIDwkMVxWNTY9LDMkOSMwJDEhLzAlICAzRCBeX0EnKlFdTworTSkiIEAoMTQ6J1JaLUdMXzJVXVM2SCIwPSVBPDkmQSwyJkFQOilTPEopMlxILyQxJyZSLD4sVDEyOiY5UQorTT5INVk5RlBVKCIoSCs0OFhVKTA+NzYlOjdWRT0vNEgxI1E4VzMiIDgtJVE5LCUgMighPDYmUThAJTIwNAorTSdBSDolQTA3JUFANSVBMDYmMTBAJTIsVTRWNSoyRDEhL0QoXy5QJF4gM0QgS084SClIRU0qMUZVTDFMPQorTSVRNi1DTCMvVSxbIUVRUDUlMTg5JyEsMyZBTDsoU0BTKiJcRDAjTTUzNCBRK0I0JCY8RD87JVE6ODNQPAorTSYyXDspUVZcPTFETC5EUEs4V1wzTiIgOScyJlg4QVhcL1IoTzBBSEslIFRTJVEsQiZRODQlUUA1JSE0PQorTSVBNDwlIVQ2JkFMOSZCIE0rRS0rMjRBJzEkLSYgNDwhMTAjW1xSKEBCNlxFJUs+VSVRPDUkWFY1UTxfNAorTVRMOjcmQSwzJSE8OiQxJDgmMURJLkMsTC0yRSYwVUUxMTM4TChBODYlUUxFPUVNPDlDVDolUyg8LFI2XQorTT4xREouRExKOEdYMk0xVDYmQjpYNkFAVy5BUEowMTBDJDBIUCUhIDwlMSAuJFEwMSQgXDckIFw2I0E8MAorTSRBLDEkQVRKKlUhKjIkPSYwNCEjIDQwITBAI1teUjxBQ0c0SiYrVl0nIUA5JTkqPlJNOz1XLSpAJ1E8NQorTSVBRDwkUSw6JlFMRC0yWEYtIlErMjYtOTJDRFApIUA4JlFcTEAmPUI6NCA+JjMwRzJDRypAUiBMLFRASQorTTg3VDFMUUw2JyJGXTghTFIuIVxIMCE8RyRQUFIlQSg/JiEsMSYhRDYlMSg6JFEoOSQxSDMlQTw1JUFcTAorTSs1KSkxNDEjL1NZISA0KCEwICNbXlI0PSZTMD8oMVw0J0FINTBILi1PPF80UzwmNyYxMDQkITQ9JFE8OQorTSwhSEYtM0BGLCFRRzUnJTw3JiFDNzVNMzMlITM3NiRfJkJQOSUyKDwnUTk0PDIgSisiLEknJlRFSDFQPQorTSdBRyA7Mjg/J0E0PSsxWEQlITxWI0E8VC8hWD8lQUQ1JSFEOiVRRDQlIUQ4JjFQOiYxNDcvIlhMPSUpLgorTTJERSggNEQhMlAjW14hXDYnIzg7JzFcNyZBNDQwODo1UExfNFQ8NjclUSgyI0EsOyQxNDcrQUBKLVNASgorTS4iMUw3JzVDOiZJSjlGOTwzRFk4OSVYWiZCSDUkUiw6KTFFMjxRVEQqQiBGJUY8P0dBRDomUVshOVIgOgorTSYwXDcrIUw8JDEwUyJRME4tITg3JEE0MSQhLDQkMSwuI0EsMiRRRDclUFQvLSJAST1FMS0yJDklIDQ4IQorTTIgI1tfUig1J1NQQChSWEcoQSwxMChCO1FdOz1WXSY+JyE4NCQhND0kUTw5LCFIRSxDLEQvIkFPOEddTAorTTs3IVU8Ry1KNEUpPTs2SSUnUlg7JVIwPy0iPTc+UjRFKUIgSCY2QEBHITw6JzIvJDoiLDclUSg4KlFUQAorTSRROFUjMThRLiFIOyVRSDYlMTg3JSE4MSQxODUlQUw5JjEkMy4iTEc8RSkqMSQxIyBEOCBYPyxJKjQgWQorTSxRSi5EIkQ+JyI2J0MrVyxSPFshRlIsNCVBMDclQTQ1JiIsOylDUFIpU0BNOCZJMzNFVSwvRCEvOkY5TworTTxWXT5FNF0kJzFISDRTKU5NMjRAMCRNMzJUWlcoKyw+KFFQPExVPDwlMSwxJVIgNiVBNDQkQTAzLlM8QgorTSdRNCMmKDQwKDFAMSZQLDVDMUQ4JVE0PCVVKDs8JiVaNEUoIzJQJSggLidSKTIoXi5SXDRCWShFJjFIRgorTUNJNyJTTEsvUElURCRBKDElMTAzJFE4QSYyQF4tIkRbKFQ5Ly5DSS8vIlBSMSYpRzlXRVo5KT0tMVFMOAorTSk0SE04SkBFKCNdLTVEUS1NIU5PJyIoOidbNTMlMFwwI0EwPSRRLDIkMFwxJCMsTiYxOC8gUTYlIzFYNQorTSNBQCUkSFQ0JSE0LjNRUU85KCEzNCRFKCA0QCExMCNBX1JIQDBELFUlWS46KkE8PCo4XjVRLTs1VkxWQQorTSlRODckUTw2JTE0OChRTEQuMlxELlFMVjBTNFAvMlBHKlNJPjomWiBBJy4/M1REPyciLF4lRF4uJyI0XAorTTIlOS0zKyg4TSFYPydCJlk2ITgyJEEgNidRNDUlISwxJFEoVyxBVDokQCw3QTBcQCVRIDogUTIvJFEsNAorTSRRMDA0MV1OOUg1NDMkNSggNEghMVAjSlsjMEsxMkxUJzUxOSlCKEYsSD4vTzxfK1NLRkQyUSw1JSE8NgorTSUxNDYnQUhELlMsRi1SRFItUylKPUdWIUdIUixEKFU+QEYoUDA0NUU5SDlRUS4iUkEnTSEoIl0mPkwoQworTU9BUD4nISpGQUE0NCUxNDElMTA0JEEsNiUhNEElUTQ0JEFMOiYxLD4lMUw1JTAwOEMxSD4mMUBSJklSIworTTVVVT43JEAhM1AlMyApO1AtIkknKzMgNzQ1TEInMjBTQ0lDIlQ8Uy9OSjksIFEnMSUxMDMkUTA8JiI4XQorTS0yQFknUTwzJFNQWTJVIUw2RU1IOUUyLTpTKSAyJllOQFVWT1FaKiQ+U1xDLFRBWlAhXlsmQVQ6JipGIAorTSNRJDIkQFgyJDEkLyQhLDEkQUwvIzBQLyYhPDYkIUwyJiBcLyBRKi4kUTQ5JEEoUCc5UiQ3JVU8NkQ4IQorTTMwJTAgL09fLlJFLS0zODo2NixHJlI4VkNZQyRWPT86UTpJLyUxODMlUTg1JTE4PiZCKFgsIixVJVBMLAorTSIiTD4qMjxeKyMpJTNEUjc9U0BfMiZJSj0zTV1IJ0FVQSQsOys0LVVOITZdJyFIPiU7PjslISQ0JSEgNAorTSRRLDEkQTQzJSFYMyQxIDEmQUQ4JEFUNCZBKDIlMTQzJDEsNyQxLFInWiYvOiY5QDdESCE0MCUyIC0vVAorTSoyND0pJEhGKDIgPCdRUVI+WF5VU00rLU46MSMlITg4JkE8OCVRPDsnMiRULUIgUSdSKD8qJTU1Nyc+LQorTUBGXVk7WEYhNVNcUipVSVo7OS5WVltGSysjOTg/NkhNSUZDIyRRMDwmSkVcJTE8NSUwLDRJMSwzJSEsNAorTSZUSDYkMSwzKDIsRCYkNDUkMUA2J0JMVC41IUQmUVRAMDpKSDpGNiI5VjQhNVAlIiAtL1QpUiA+KUQ4QAorTSdCKDgmQUlTQElCWlQtLy5OSjkkJEEoNSYhNDYlMTQ5JlIsVi4iKFYoQVAzJDM8US1FMUo2RDU1MiguMAorTTgkJFErVi1fOUdSPlA6NkYrIzU6QCZMTEkmLyAkMSw6KDpdXCQxMDIkQCwxSTEgMCQxIDEmJDwzI0EgMAorTSdCIEElNCgyI0EgLiVCLE4sVEE6I0EkOC86Qko7VjYiOVY0ITVQJF4gLS9fKyFYQStEUEMpQkg9JiFRVgorTUBZQlxWLVs5UTpJJyVBPDcmQTw4JVE8OycxXFEsUVRYKSFcNiUjID8oIlxbKzFYTCtHUj47JDROKkVeIQorTTc1RU9HWC5BLFMxNT9GUElIJVsiJFEgPihbQislUTg0JSAsM0kxKDIkUSgzJkRENSQhKDIoIihDJVQwNAorTSQhMDImQjxRLiRZQSQxMDwwSlZSPlZSKzwmUCE3ICUjIC0vWiszTFooJTRBRFpIXSUxSDo9WE5VU1xfKworTU1KPEAmITA0JjE8OCVRPDsnUiRULlFcWilBWDwrIi0yRVtSQEBWNVE5J0VWNkQ1JixIQVYpRyciVjxGWQorTS0jWUdRWEg6RDZCRyVDMEFANUQ6JjFAPiVALDNJMSgyJFEsLiclNS0lMSwwJDFMOCRARDMmNEkmMTFAUAorTS5ILTE7Jk1bO1oiNTBFNys0NCwhJTAkOiAtL1kpQlxUKEUkO0Q6UFkkIUA7P0kuWlQ9IyxNWkRBJUEgMQorTSVRNDYlMTQ5JzIsVy8yJFgoMVQ2JkIpOENbJjg+JT1FMVdOJDk0PSUtSF1XJjVKUFE7PlktM1lJUjhIOAorTUNGLkQkUyxCQUVcPSVRMDskUCwwSTBcLyQhICsmNF0nJEEgLSNBQDUjUDgwJTQoXS5AXEktN1knNzVJTgorTTopWjcxVS8qNFQsISUwJDYgLS9fKVJIVSolPD5FSzBeI0FIPkApNlxVXU83UEpURCZBNDMmMTw4JVE8OworTSdRXE8uIVBUJ1FIMSVRPSM+OTlcN0QtKCxHRjY8JE0iLDhZWickJiFGOFJKLiNFRFM4XDxDRiZGJFMgRQorTURGMDsmUUQ9JTAsMkkxJDEkQSgtJlUhKCUhKC8kIUg3JDBAMiZEOF8uQSRSMChFODo2MVc7Wi49MkU3NgorTTZUSCEmQCQ8IC9PUzFGSDUoNkQ6JTFQNCchQio8SF5GUzxTJ0haODUmMUQ0JiEoNSYhPDYtUihULVFMUAorTSohUEIuUiU2Rzo6PTtVXUw8R01TNkQ8RihIVVExNC5aWV4zIjFSRUJRSTA7T0UmXidGMDImUiQ2JTFEQworTSdBLDIkUTw0JDEkLidUTD8kUTAzJjI0OCYhPDYlUVQ2JEBYMiVRLUc8REU3L1glMS9DMyMsNFghJyAkOgorTSAvT1gvNUAyKSYwNCUhVDAlQToqPik+S1QtIytKKkQ2JVE0MSUwXDIkQTA0LiIsWC4xVFQoQVw6JlFZOQorTUYqLjk7NilPMEdVVTk0REUpOTFMK0JORVJcUyAxUj1EUikwOU5UUlcmViw0JzIkNCNROEAmUSAvJCEwMQorTSNQXCsmM0wyI1EsMCVCKDUlQTQ0JTE8LyMgPC4mQU1JOEJYXS1IKTEuUl8iLFRUISYgJDQgL09fMDUsNAorTSkmXDckUkA2JVFKLz9ZVk1UTUM3SzpMOSZRSDMlUSQ0JTE4Ni4yMEktMURPKTFUNCVRUTtCWEYlOTVBNworTSk3Qis7VFxEKFlVPSdRIV1GWiZcNCJFQFNJRDtOVEpYJjYgOCgyODklIUBCJzEoMSRBODMkMSQtJyMsMgorTSUxKDAmIjA3JiE8OCZBUC0hUEAzJyFdXj80QTMwSFU2LjJXLitEUCEnMCQ3IC9PUS5CMEUqJzw9Qyo5TgorTSYhQDI6SFZRTktGPUU5PEEnQUw0JlEwOCZBQEAlUVRVLjFIUilBXFUyUiRZQ0paOEE2RU88N1FdOEQgSworTShITEc8SkJPTElOWjYiUDZSKUw+TFRGUyc3QDgpIkw3JEE8OyYhLDYlISQyJDEkMCdDUEUmQjAzJkJUPgorTSVRNSspQTg0JCIoPCgiQDY7Mko1PzNQPS9DIyMsVEQhJ1AkOyAtP1QtITxBKlcoN0JaPUokQTgyPCk2VgorTU87WkFGSUhCJyE8MSYhJDUlITQ+JiFYWS5RUFYoQjhJKUFMW0I6UjZBRlVUMDdZXzs0KEopOSBDN1hWMworTUQ3VlA1Mkg4UklMPEwkMlAmRzQyKEJENCNBMDglMSAzJDBYIyNaJC0mIjg2JiIgMCVSSDslMS0pKSEoMgorTSQxXDYnQkQzNkEqID1DUD4wIyskLTRAISZQJDggKU9fLjE8Rio3VDpCSylQJFFINz1ZTlhPPCZJRylQRQorTSghUDMmQSwjJVtEQCYxXEotUUBOKVI8RCchMF9BKT4hPiY1PSknRjU9VEBJKFlcOS1FTUU3NSJKN1JQNAorTVQqID5MJCpSJkcsNSdCNDQkUTg6JVEoNSRRICMkOiQvJlFcNCcyNDImMlA9JVE1LSoxSDYkQiQxJiJQPworTTkhTixANDRBLyMjLywkPCEoICQ6IC07UihSPDwvRlgzKVJERSYxRTY2SSo+QDk+KzxXNDMlQTgyJVE0OAorTSYhPEMmMUhSLkFIWCgyOFw0Iiw8NlY+KUImJUs+V0ohOCZYTCtYLUAsTCMtTVwiXDhSMFBRWUhMSjMmSworTSVWSFExMkQ5JSEwNyRRMDsmIDAySDEkPzAxXCspMUw6KTIkPShGQEMnUiw9LCNJJScyPUojSVxLJyE4XworTTE7NSosICQ4IDFEIF5fLEAoMVEhOjBURipCJDMlVTlARkouJUc5IVk+ITA0JEBcNCRBNDIlIiQ6JlM4XAorTScjTEIsIlBHJlFZOzlYSi46RyErPygtSzwiTFJDRihHSismNkhLLUIoQyspRkJKRisqVDg4UjBZKEEsMQorTSQxMDAkMUA1I1BcMCQgWDkoUFQrKFE0NyhBWDsoJjhBI1FAOCkyOF0oQl1LIzooUCchQSMyS0UsK1AkNAorTSAxOCBeX1xIKSIkXz0hIEUtMjw0JlVNR0gqNiBHKSlWPiE8OCVRJDYlITw1JUIsOyciPFgmIlxFLUI4PgorTSUyKTQ1JzFbOCVETj1ZRVU9QkhQQ1ZILDw4LUI+Oy1OKSJbL0dSUkYqSyQ7OEI8XCgxMDEkUTgyJFFINworTSQxJDIkQSA8JyBIMCohQDkpIiA9KEZIRiRRQDUmQVhZKVM1TCMqMFUoMTheMyw1JytAJDkgMUAgXl5YQgorTSUxSDpEMkxKKVI8OChHRTBEWFVORCc9TjsxIDgmITw5JjFIOiVSIDUmMyBXJiQgPCQ1WTwpQUxTRzhNVQorTTc3IVo/SCktP0IkT0BIVUJKPCNIRFtVVygzXydIMyRSK1U4OTIhNEIoQVA0JiE0MiVSIDckQSgzJEEsOAorTTBTIDIlMlhKLFJcUSlBUF8vRjxMMzc0PSU0SFklOVxMJlE1JjIpWDsmQCRJIDMgIEVOVD8kMUw9Q0I0SQorTSoyNDIoJ0U2RkkpVUVHVVU8USQjJStcNiVBPDclIVg2JkMsWSZDWD8lVFhNJlFYVEZYRVc5JzUvPyg9OgorTUBCIFFDSTU4RSpDLT8rPVYoI1spSDJcTyo1QDowQEA2JkE4MyUxKC8lIVQ0I1BcIyQqIDIoUTgvJDI0RAorTSsyUE8pIUhdKTUkPixVOCwmNVBeJFlURCUxPSwzWig9JjAkRiAyWCBWL0RHJUFYPUZCQEgsMkg1KEdZOworTUhZMU5EN0lOPEEwOSYxODgmIUQ5JUIgNyZSPFQlQ0BBJ0Q4RCZCIEZBRy1BNlVYTj4pUUdCQVxPQVpFMAorTTknRjs2W1IiJ1NPL0ojJE8qRVA9MFBEPSghRDAlMTAxJUFcNiQxJCMkSiA1JzEkMSVSREcsIlhRKUFZIgorTShESDQoVEgrKDYlIyYqKEomQTUpNCpQOSYgJEggMyAgXl9ERyVRWVRGITRPTFlEOSdBKSFFR1lGQFZJRQorTTkxPD0mUUA7J0FQOCZBSDgmMlxbJjNQPSdTIUwpIVhUSVoxWTNWXVxCVyk2QzIsPUFJKldPLUNCMiguMworTSg1IyJKM0hcM1QsPkAhSDwnUTg3JjFEPTAiKDwoQSQ2JFEoOS81OFYoNj0nK1IlXjNBQEYpIyUgQFogVgorTSVCOD0lSjROKFExPSYiUDclQCRLIDFAIF5fSEMkMVVXRVEsTU05PDMmUSkpRzgtT0M3MU87MTQ3JiE4OQorTSchSDYmIUA2JiJcWyYzIEYlQkRWJSFcTUkpVVQ0Rkk1PjghQERCKDtCSVZKSEwzLS5YLjgnREsgSUNAWworTTNELD0/QUQ5JyEsNCVBODovMVw5J1BYLiNQXDAoQkg8JiRQXilRSiEzUThCJEIsVTs4JEQlQlQ/JUo8SAorTSZRKUMmUyQ4JFAkTSAxOCBeX1xLJEFRWUlBNElOWVA4JzE9JUooNUVBNlFHOjE8OiZBQDsnQVA4JkFIOAorTSVSQFIlIzRCKCFUQSVCKEFCSCk9MUUkTT0pJVNHQiQ/REo+OT1JQkkqSEI9J0RPJUtDSFgyU1g6QEFAOQorTSchLDQlQTg6LzFcOSdQWDQlISQyJiIoNiYlMSAqUU4jNEFIRyMxUFI5Vzg/JzNAQyc6VEsnUTFCJlMsOworTSUwJEkgMUAgXl88XykhPEJJQUw+JDEsPScoVSFEJ0E+OTVdQDghQDwlUTg6JzE4NSRBRDcmMlRdJjNQPgorTSYxRUEpUVw9MkoxXDVGQVc/NlVOR0IoP0E5Nk86PjM8KVddWykmIl1OUyRfLzU8SENRMDcnMSw7JiIkQQorTTFCVEMrMTQ2JFBcOi8lMSozR0onJTFYLDMhPD8yJTk8Skc4NyRCJDolKiQ3JVBdPUYjSD0nICRIIDFAIAorTV5fQFsnQThFSTFEOyRRJDcmOFUpRVdVRTs2PUg6ITg2JSEwOCZRMDMkITw1JiJUXSYzIEgkIShJJVIkOgorTTJaJVg1RkU4PEghV0ghXD1CSiZCM1xfKic4NiAoRU5bTjMlIC81QEdDISQ0JkEgOCUxWD4wUkhAKkEoLgorTSNQUDEoMjRHLTUxXiQhKC0zMTQ7MEUxPEhGXDQkQjQ6JSosMSNQVUNGU1Q7JjAkTiAxOCBeX10jJ1E0RQorTUwxTDkmMTg8JlkpJUhHXTw5RiFBOSFAOSVBODonMTg1JEFENyVSOFQlIyxBJkBEOyZSPDgtKDVEMzUoUworTTw5PiVKIiQ/QzpCMSk7LlUkWEojJ0VGX08yUFQtJFBERSFENiZBIDglMVg+MFJIQCpBKDQlIFgzJTFIPAorTSxGKiAjMTQwNCFEQDBVOUNJRlg2JjMkPyZaRDQkUF1CRlNUPSZQJE0gMUggRj89KCpCIFBNQURHSjs8PAorTSRBRDtDV0RYLlJcVzZBQDclMSwjJT1cMyUhRDkmIkBaJVNAQShCVUUxQyheLEoyST02LVlEJ1ohSkFQPgorTUIoUUZCLjZDN0gmNCtTSlBQNkVHPlhGMUhRNDYnMSw6JDFEQCgyKDwnISg1JEEkOy1FISotV1IlJkI8OworTTQyOE8pMUxKPVM1OSUhKDQkSFQ4JiE9OEZTLD8nMCUjIDgsIEY/QSQpIVxUTUE8REpbNDYjUURDRUdYXAorTS9TLFs4ITgxJEEkIyRYKDEkQCw3VkJAWiVSVEsmMjRNLTNBIS4qNkU9NjU5PygiIUlBODxDSUE5OzxeLgorTTUoMjorMzZOT1ZFSD5YRi9IISwzJkEgNyNBOD0nQVw5JjBcLSNAWDInQixFJjRdWSYhSDk0QjBLKFFARQorTTwjOTYjQSAyJEhcMiQhNT5HQyg8JlAlKiA4MCBGP10sKTFYT09RRERMW0g7JDFYP0g4IFQuMlRVNzFANAorTSUhLCMlPVwzJSFEOSVCJFEkQlRDKFFcPy1DPF8sWUY5O0RcUz0oQiZLIUw+QzlVKDFaXVQxKDI5KVMiUAorTVBWMTw9KDIxSiFANSZBIDcjQTg9J0FcOSYwXDMkUSA0JTFEOyUmNV4kIUg9NTJAUClSKFI+NCVAJDEwNgorTSY5NDUlIT09R0MkPCcwJSsgODwgR08oXihRSVdNMUg2J1FAOShIOERDN1BUKlFMTzQxQDclMTQ0JFEwNQorTSUgLDlWQjxVKCNcOiYyPU4rUihKKUM5UTNWLiY8V0lXTUIsPkFJMUtAWCE4MEJGPlFYWyVOVVsjMExNPAorTURBREgnITg6JFIkRipRUD4mISw0JEEsQSwkTSEuV0VdLUJNWTBROEwyJDBfQUUyPSZRQDMlWFwuJiE5QAorTTlDPEElICUqIDtEIF5fNFonIUVaTTFAMydRODMnKDhLRSgkVysxXFM2MTgxJEEsMiQxKDMkQTw3JiI8VQorTSgjPD4lMVxWJ1JIUCszOVAzVSUwLlRdSExBVDxDWV1AOyZNIi1CTkFRSEckTyVXIzA8RTlDUTxFJjEsNworTSQhWEMqIUQ7JTEgLiNBIDonIiQ9JyRdUC0yIVoxITBIMENMVD8lLjkkQTQxJVkkKyRBPUY6Mzg8JEAlMgorTSA7SCBeX10gJlFBWE8hSDUpQUg2JzhMSkc4LE8qIURNNFFANCUhNDQkUTA1JSFEOSVSKEwmUzQ2JzFERAorTSYyOE0tQ01NMUMgOyZTQTxOQihAQzopMzJUPEEoMkY/UFgzI09VSl4vTFVBRVFERSYxLDckIVhDKiFEOworTSUxIDMkUSg7JTFINiZWOVMqQV1dMVFATTFUNSNBJiZBJSEsMycpPC0lMUFFOlM0OiUgJTQgO1QgRi8hMworTTFCTD5LMTw5NTU0NSZRVEJCOChMKUIsTjMxSDclICw3IFEzPSVBRDcoUygyLEIgMysmNFMmIjRLJzNSJAorTTkoNitFR1ZSKSFSIUU5LktMRjUqQEozOEYqTlxOLT5UUEZaISsxVD8lMUQvNyU0RigyND4lITAzJEE8XgorTTQ0KFwuRyk+OkhZKyVDIEMsQ0FfMlogOSYxQDZHMTw2JidCMS1CMDcgNCwhTyAiOF1EXFopMiJOJTE1NgorTTYxPDwnIkY0QiJQRilDKTYmMSQxIFEzQCQxKDIlITw1KEMsMi0xJDgoMyBBJ1JIWihEPigwRT0gM0Y+TgorTSdRRjBHKFpESFVBJkFKNzVGKkpfTj0uVlBGWiIrQUg8JEE4LjZVMEUnQig7JDEgLyNRMEYoUVRAJ0Y5PgorTTs5LS0kQkA9KlMlWTJaIDclQSg0R1EsMyY4JjYuIig4IDRUIU8wIjhfVTRVKiIyUSYxSUE4UUw9KkJCNQorTUFSND8nQkkqJiE4MyBRO0AkUTA0JUFENydSPCsrMFw7JVFEPigyUFwpVEoiKFJQPCs0RyAmQi4wR0hSOQorTUVUPFpDSkM9RFpHIU5NQlpSNy4lK1FAOiRBQC02JSRCKCIwPSRRODQkMTA9JyEwPCtGJTk6WTUxJVJQPgorTSxDSV41KkQ8JiEsOUkxQDUmSCY5LyI4OSA1LCFQICI4XCc4QSQ4KkYnIVFIOSE0PSpBRFMvQlRHJlJJJworTScxSDYgUUdAJTE4NSVBRDUoQlg3LCI0Myo2QSgwUiRDLFJMWjhINjFEVz5JJkFRXkUmWlhVMjhcSFozMgorTUBJXyBMTTZaUSdGJScxUDolIUA2JCQkQCoiOEElMTAzJCEoXTQ0IFQuN0lJOVgpLChUISskM0ItNklEPAorTSVRQDlIQyw7KTc5VSwiJDQgNCQhUSAiOF0nODojSDJHJkFBSTlBNDspUiBdMEJURicyWTAnITAzIFE7QAorTSRBMDMlITwzKDJcNyxRODgnQyRTMUIwSywjLF0wJT0mMlVeRSZBPjBIJyJVUlFYW0oqMy9ASVslTS0qXgorTVFHRiYnQUQ3JDE0NSNUID8pMiw+JEEgLyMwXEUoMVg7KCZZSTpIPS4nU0ElIkMmJzZJRDolISg3SSJcOAorTSlHXVotQjg6IDRQIVAwIjhfV1Q5JChCSidBVVQ7QUg9K1E8Vi5COEMmMkUmJlFENSBRQ0AlITg1JUFENQorTSdCLDAqUTA7JSFETzIiME0uQ0RfKSJQPipEMlckUiotSFdDIVRBUFhNOkc5PzlPKk5NUyhTR1opJ1E8NQorTSQxPDQjQ1w+KVI0QCUhODQjUFw8JlEsNitWRUQ6KEUyKSNRJiQzSiw4Wig/JUEsPEpDMDopV11dL1JMPworTSA1OCFSUCNbXDk0NicjLlIlIVg/JiIgQj1SIik/JCEiMCQlJSUhSDYlQTw4JTE4NyVBRDgoMlRHLDIwNAorTSgmTFUvRCBKKEJUVjY4MjBERl5BJkIhXkVVTzlXIzlWUSlbL0RILl9MXT5bTTg1TSshXDslUUQvJFEsRAorTSdRVDolMSwzJDE4SzEzJE04RzVJNTdZKyY1OiQ/V1pXPylUOScyJDlJODRcKzdWNS8xLDUgMjwhTyAjWworTV0pODcmQzJTJEFIOSRBRDo8IjIvP0QlIjBUOS4kUTAzJFEwNSRBMDUlITw2KCJYRy0hNDklMyg/L1QoUAorTScjMFktRT0mMkUqPydBTitHVUs5ViMxWVI5WyxESC8mTi0/IU1YNU4rMVA4JSE4LSQxJEInIUg3JEBcLworTSNBLD8pMTw3MjZFSTYoLS0lNFlePic+UT8pVDcmQUw3SVgkWStIOjoxMUA4IDJUIU4gI05fWiQ6J0M+VgorTSVBXD4lMTw0PVFSKj4zNFkuM00iJEFENSUxODclITg3JUFEOCcyKEArISw8IlFIOTAkIEsnUzhXJ1JEOgorTSpTRlElQjoqSTZDSlojRVlVOjc4QzdTKE8+IypPWElRK0FINiUhQC8kUSxEJ0FQOSUhNDQkISw4J1EkOgorTTYmMUQ1SDUxJkUpXz9YIlZBOjgkJyhGTUFDTE9BSVUpJkFIIS0gJl4gL09aTCIoQidYRC0lKjJHJTFAOAorTShJLUMwNDUlMiQ4NSchMDkmQUA1JjE4PCUxQEEsMkRMKyFEQT0jQEUqQzBZKlMhM0EoWjU9KUA/JVcyNgorTTVdQz0qK05DSD0mKzpMVlVVW1pSQkVQUSdRVDcmMSwzJSI4QScxPDQkUSw0JTFMTigiKE0tM0UzMzRYOAorTTUjJEMrJl0kSTE0NiUhLkc+Q0BNQzk5IyZSLCEoUCZYIC9PWkwyKEAnWEgrJCpCSyVRRDUpKTlCMEQ5KQorTTM0XDQlQSQ2JVE0MiVRMDokUThBLEJETCcxTDUuUVxGKzNMWCxTOFE1RDEtNDlAQiUnTjo1LT88KkwmSQorTUg8Vis6TTJaVjwyV0IlVFInIUA0JUEgMCQyMD4mQTAxI1BcMSRBSD0kMSQ6KzNNNjRFIDQzQkw9KTZFJAorTUkxLDMjMF5HPiM4UEVJUSonQiQhKFAmVSAvT19PIjxEKShULyU7KlcnUVA/KCk5Py0jQFovRCwxJlEsOAorTSYxPDQmMTg8JTFAPClCKEUmMVwuKDFIRypTMFUrUyQ8KlE4Ti4qTDonR1JCOC43SytMIlBKLVImOD02XQorTVdcTlxDNiBTJkE4NCYhKDIkUjg+JkEwMSUhMDMkQTw6IzFARSlTOTQ1NTA5NDJYQitGWS1LQUA1I0EyTAorTT8jQFBFSiUsJ0IsISogJlcgL09NSDIwPUArJDAmMThEJVFJRicpWF4vVCkkMiRQNiYxSDonUTg0JVE0PQorTSZRQEAsIjBOKVIgST00JEAxQlksKiFVLD0nVjQ7WkxAJlcmPS5dTz0nOTcnTU0iOjdMQlBUK0JPSSRUPQorTSkhTDgmQSw2JSJMTighTDgpQz0gMzJEOyw2OTIuVFU7OyZAPTNCKDIrRlkzSSE8OCZBWEsmMUg5RzlRIQorTS80LCExICVTIC9PUUdBWDpAKyQuJUE4RCUxPUInKVRdL1QpJjMlLDUkUTg3JyEsMSUhKDomITQ+K1IoSgorTScxWD0uQjhFNDNNOS0iIE8yQzkrL1pcOCg3MkMvXU88KCk/J048Xjk3LEJSVEtKU0ZUVEAnMTg1JiBUMAorTSQyREsmUTgzKTM4XzMiODgsNkE0L0UpQDxWSDkyQVAqKUY5M0khNDUjUSQ/I1EwOEc5WSgxJEQhMyAlVworTSAvT19KQiQ6QTs4MiYhVEsmMTVIJTlIWitDJFQuREg0JUFQOSdBNDMlQTA8JkE0OihBSEIkUig6KDIwSgorTTQzTTgsMVg4J1BESihMMDQpRzJIMj5LUihJXzZOPU44NUxeWlZMKltJNShCJ0EwNychIDMkUkxLJjEwMQorTSkjNF4yUkA2KyY5MC8lPUw/Vyg+NCIkMCsmUTxLMUg3I1EoQiVBNDdISjkqMURYITRAJV8gL09MSiIkPgorTSgnIDckSi5LJTFAPClKVlxANTUtMlRENyVBLDslMTg0JVE0PCcxTEErQlBLKyIsUT5TWEEsI1UrMUIlKQorTT03VjA6OUBBJlUiMSxNXzoqXF8wPUxaPzJcXkhUKz45SiJcNy8yLDgtUyQ4OyQkRi0qKEM3REUgL0VBKworTTVYQkFMKy5OSVNUQTVXSVtAOyY/SUE8OCgiIFMrQlRCKTFINCwjLCEvICRPIC9PUEkxTDsoJyA1I1ouSworTSRRNDoqOlpcPyUlKzJUXDUkISA4JEEsMSUhKDkmQUA/KzJISSkyNEYwQjBDLUQ1NjNSLEwyUzknLjlQOQorTSg1LjctTV85K00nMD48Vj0yPSJLVFtKPkdSXDouIiw6LkJcNjs0MEctSjBFODRRIzA1TS43KFZFTStCVQorTU0kLDozVylRPVo+P0lBNDUmMTRCJVE8MCUwUCwsM1ghMiAkViAvT19MMVg7KTc0OSQ6SlIlUSw+KDsnIQorTT1URSMwREg3JFEoOiUhNDMlISg5JkFAOygiKEMmQixFKUFcRy00PTYzMiQ1KCBERicrJDUpRS48MC5bTworTSwtRz8+XU4/MT0uTVU7UkNKMzA8LTFYNi4jLDo8JDhILSooQzdUSSEvVUUuODlGV1ItJzFTNTBDNTdBWAorTT9KWkhLUUg3JVEwQyZBSDMmMTAwLSNcITJQJFggL09PS0FAOjwjQDQmMVw0JjFJKC4rRztUTTMoUCkwPQorTSYhODklIUg2JFE0PichQD8rQlRMK1I8Vj1UNEEpIzkoNVFJJDtHSjI6WihMJkRCNistOzssPFsvRS0iQworTTNcRkRTK0JYTyJUTTIpQjEtKixNSVM+NS0nIEIwMykgL0QxKEtaRkhIKTpMSEMsPTIhND0oVCBVRkFAOAorTSVRUDkpMyxSK1JAVCwiVCEqUCUzIC9PU0pRKDc8I0AyJUFcNCVRPSkvK087VD0jKFBZSDskQSw2JDE8MworTSQhKDsmMTQ9KzJMSypCTE4wMkw/KUNVMTdBREQxIy0pLlo4RCgkTjwsLTs6LS0jL0VMXkEzLEZGU0tKXAorTUxSVFAxSU42Llo0T0sjWjouRzhIMjNJKDFEUTBNWypRSjomWEsjPDkwQSw7KDNYV0ZBODUkMSwsJEFEOAorTSYhKDooUyghLEAlNSAvT19NUTQ3PTNUNiYiODsmUTUqLSwvSlguKzlUWVw/JTEsOCRRRDUkISA5JVE0OQorTSgiLEgnMjRMKSI0QykjXTE3MUAuJjA4SCdLTEApNE5BLk43UC1NQz5GTVpFMk0iTFUsIyRPMyhSMilOOAorTS86RFNLVCI8Ljc0RzEzOSQwRDk0UkxLKVBbUzVPVCw+MVE8Pyk0KF9IUUw3JSE8LSUhVDwmUTQ/KUMwIQorTS0gJTAgL09STFIwNyVRXD8lQkBXJyFVJC0rNzpVXScrUUkkPycxVEMoIixFKlJUTixDKFosUyhNLDJETgorTT00TEQqNDEvM1JNIDtXUi87OjxVKDJaNSotVzoqLFcsO1w6SzM9Jk5PSz5YUiJKWjxKPFI+RDU4P0M6OQorTSoqKEQ1U0xeLyUuMklJXklKOjJHKlNQQCo0LSUzNFUmMUE8OCUhQD4nQkhLK1MwXCshTCEoUCYnIC9PVgorTU0hWDQmMVw9JFJEWCZBSSYuK0c8Vl03MFM5PEAmIUxCJzIgQioyTEwsIyBYLEMkTypDIEcvUyRCKiQ9NQorTTUyQEQwUyknL0o8TylDJjsrLVM5KjxXLDxcOksyTS5PT1tCXE9SQlw9KlBYQDRRPkFEJkArWkRLOCQxJworTTE1Xj5LWkpSTEsiUytTSD0qREUrNFUtKDFBNDUkQFgwJTEsMSUxTDomIVAhKSAmIyAvT19QMVwyJzIwQQorTSUzMSMnUUkkLCwvUVleJz1WOVhDJUE8PycyIEIpMjRGKkJQUikyOEonUjRFKSJERClUPTQ0QjgvJiA4RgorTShbQFAqUy5ALS5PTystOzs+XT5QMk1OWlJMNyZSMlMgPkskXUJEWUVDJDJBK0pITDdEISMwNUJFUjw3KgorTVJMPyouU1g/KzRBKjRFKSwyUUQ1JVE4NiVRODUlUUhBJ0FUISkwJiggL09STUI4QS9CLDYmV1otJkIkXworTS07NzxXLSsnU0o0Xy5TRFguI0RaLjNJIC9DUF0tIlhELSJEWj0kUEEpMjknLUNAUDlYIV85WixXKiIiNgorTSo9VzkqTE8vSktOTzJMUkhQLCpdUjJOX1BLTFVEMjpCLFgqNzUqJFU1RCE3MyQiTkxIWj9QXCJfJSFNOgorTSdTVFAvU0xbN0YlLiYhTDAqQlRNLDM9Ky40MCEwUCcoIC9PUk8hXDswMjA0JideLCVRTF8tW0tBV103KgorTVQ6TSEuQ0hZLjNIWy4jRF8vM0xcLFJUTikySFgvMyxAKUJFLS9DPEEuU1EgLzlMWCkyOj0rTVM4KUw/LgorTUtbXlEyXSpMUCw/IFEyQyFRO1RdRiMqTC84Vj42WjxbN1RRQzYkUldOOTpGUiwmXSUhUT0pI1xPL0NIXQorTTgmISskIFw0JVEkMyUhKFUsRDghMTAnKCAvT19TMiA2MFI0NiZIUjooMiBaLTtfUFs+LzpYOyhfK1JYTQorTSsyWE8rMlhULEJYTylCID0oMUxQKTJAPyoyRSouQzg3J1EgPipJXSMpUk4/LF5PTypcX0RPLEZXM01OVAorTVI9OzBTMkMpVFwkWUgyTlQwWFpANzpRIjdURUA1NEcjVSpSX1g9SzMmUV0/KUNMTC5TPFk3RV0rJSEwLworTSYxODclMSxZLFQwITBQJzEgL09XTjJESzIhSDkmQVhCJzFFLC87NzhVWz8xUlotIC9TKFUtIyxSLCJcTworTStDKFctQyxNNjI8RD9EXEYqQjksNVU4RzQ3UiI3WyxIKFFGMyotVzwuTEMsSVsuWDNMTlBMW1clUkJDIgorTVI1JFFNMU1SLCshMkYoRUguVEUhLyU6T1MsIl9ULCw/JUE4QSpBKFMwMUBBNFcqKSYjTTowMyhNLkQ5IAorTSpSSCEqQCcrIC9PU08hUD8yMUw3JVE4OiVROSwvW0s9VztXN1Q6SSAuUyBVLTMwUytSWE4rMyRWLTMoVgorTTExWEEyIzBDKiJVNzhFQDYpQ0kkLjpURicxXjwrXis7LVwzLEsrPlozXSZUTFwvKFFCNyRTJSxYTzI9XQorTS8rUThHSF1NMSU1LTImJlhUXD8qVVwsNiQhMEIrMSxRL1E4QTRXIiUnMTA/JkFEMCVCNFApMjwhKjAnKgorTSAvT19TQVw8MyFQOSYxUEAnIUEnLztfTFwtI0hYKkxZK1JATCoyQEcpIixDKEI4SypCPEwtMSA/KzJIQworTSsiXTg4VVAtIyEkPilbKEsnQjI8LD5bUS48Sz9OPCcgNE1KXE5MUzZTQjcsVkVMWVAyKiAuOz09STlBWQorTTElKSoxNicmW14jRVwtKEAlMUBFK1E4VTBRSEY2JzYrJEFATCchQDMmMjxSKUI8ISogJzggL09QTCQ0UAorTSRRODUlSV5KJiFESi06TyhUODlFNlRMVy9TSFMtMyRNLEJYTitSIEUpUkhINlJcPzw0TD8oQURQMCQ8TgorTTQ2LUoxJUBLKVFQRChdQzwxRkspSzpGXDM8Mk9JK15BUCMiTVMyPjYyVV5MK1k4WExTQkMyUyktMjQqXgorTVNcQlpEU1w2JiFANSshKDspMTg4KiROOS9cUl9WI1BfMFZYXCoySCErUCcoIC9PT00jUEglQTwzJFlWRworTSUhOEotWyMtVDg5RTckXFYuQzhTLUMoTiwyVE0rQVhDKTJAUTAhPD0uUlQ5J0FMVzIkPDkrMz0gKjUwRQorTSghSEIpTVM8MFY7KUxKVl4zTEpTSTw2RU8iVk9UIkI8NSZKVi5aKF9OQ15JNSNZOTU0VydVPF5fRVNcMAorTSRBMDMrMSw5KFEwOSokRjUiWipTSFEkPilGLFspQiwhKyAnKiAvT15RQ1hEJiFANSU6Kk8mMThFLTs3PAorTVgoXUo3NERLK0JYSipCOEIpQihCKFE4OycyIE8pIFBBKCIwOihRXFkyRFA1JyFUSSdVSEgnUVhEKi47TworTTBWTzhPWz8kND0uXUosSlFRIlZXV0MuQTUmSyAtSVUhTlQmTjUjTTY0RFs3XS5LNko0QDMlMUQ3LCE4PQorTSlRQDwrNFo7I1o+VktBMEAqNihaKUIwISsgJzIgL09NOiE8OzVEMDomUTAsJUE8OCpaOytKUzhULjMsXQorTS5TPFItIlxPLSMwSikiMEgsIlhDNzJYODwlKEgnUiw7KEJEQykiUD8qIjxLLCMsTS4sUzNEKUMlTFoiXAorTTY7WigyPCBIUiI+TFFcIVcmW1hVSFosSEkzLiktI0FENkguX09YWDgoIFwsJyFcPScyVFQsUyxIJTFBLworTS5bOTxOQ1xfO0MoVSkzMCE6QCcgIC9PUjxBMDY3NDw4JVE0MSVBMDgrOjswSlMwUi4jOFwtQyxSLTMgUAorTSxDKEgoUihGK0JQTC5RLDUtUyxFJjFcPChSODwmUixAJzIsRSoiUEktPFM2Q1kzJU4qMl42PCoqMiw0SgorTVEiMlBSTCVdKSw4XEsqUE9LI04yL1Q1UTlYTyVQSSQ4JzBULypTNFQsUyBTLEMoSSRROSwmKVFBSEFMQgorTTZTQF0nUkAhOSAnIiAvT19BITg0N0REPCciKD0mUTAzKjpPP0xDIEoqUkhPKkJMSSoyMEQqQkhAJiFIQAorTSoiOEwnIDw9JzI8RydCMD8pIkBDJzIsQyciQEYrIyxOLV03SENJRzRRWlsmN0xSMDFcPFJTIjJYVixaJAorTShMSShLKlBQSlM+MC9UMVE5SSc4V0pERyoxKDEqUyhRK1JYUiwzJEolMUEuJTolRklRUEM2UyxZKCJMIQorTTkwJyggLjNUMUJERSZRSD4oIiQ/JyFIQSYxNEtSRSkhL1NUWS0jJEkpMixDKUIkPyhSOEorMlRJOTJEOAorTTNENEAoUjhGKVJUUy1DRSEuNFlaSltaNDJNVzY9LTcoTjc6WShcITEuW10/TiJGTFJVPE5PNVxUTSMiPQorTTdCXUc2JkU7ODIwOyRBODUmUTgsIFImNCshNEQpIiQ4JFE4RCwmLzk6VjBFMUFYT0lIRCEsQCZaIC9PSgorTTFCJD0nITw4JVFANyVBPD4mQUBIU0UoXS8zUFcsQlxHKFIkQSkhWD0oMjRJKyJQVTIxRDkrIzBCJkIkRQorTSlCVFUtMyxYLUUtXkorUjsxLVc7PS0rKE5XSlgoPCUuLUtVPUwyPlJTRURVUTY4Wk5DPkI5Q0lUOVdNTworTTwiRDsjQSA0JTEoMiwzPFQtIThCKEFcNSQhLEEiQlpDLiRQOTAyIFFHN0QhKlAmXyAvT1Q1UjQ7JzFEOworTSZRUDsmMURAJlFIUlZERFUtMyRPKkI8PyZRRDkoIVA3JjFIPigyJE4tUSQ6KEJMQCdBXEIoUkBQLEMwXAorTS9FQiZNLCZGMV4zUj49SzlUKCskKUwpMC0rXT9PIk5bV0YkVlI2PF9QU0ZOOyNJVDo4IVc9IlhAJFEkMworTSYhQDctU0xULUE8RCkiJDckQSw/IUM+VDE1JDwvQUxNRzdMISpAJyQgL09PKUIwRSlTIEAqMyBWLiRBLgorTTMlJVVTLEBeKlJUVCtSVEooQkw3KiEwQyhSNEkrIlxOPlMsTTA0SFIvQ1VKRytXKVQ8XzJVTFJfKFMiMAorTTU9TzE9PFMnUUFeXDQ3UjRGXDVRTiJCS1M6Olk3IyZBMiJWVSlLLUs6RkVGLFM0MShBVEIqIjRBLCE0PgorTTFBLDMmISw3JUEwPS9DOVNDJVUlRTNRKUZCUCEsICYoIC4nRitCTEsrMzhLLiNVIjIlTTw5VllcU1w4WQorTSoyTFIrMkxIKCJENSkxJEEoMixHKkJUXTtSLEYqMyxBLiNdTEdLWypVXT8zVi07KSkiTjc0XU80PTxHJworTVFCIlozSCY2Rjw9V04iOlFUKkMgOSM+SDNDMlsrS1lXPjdFVi5DRDUpIVBAIFI6Ny0xSEAxUSAwJTEgNAorTSRRJDowQj0+RDYtJUUjUStEMVAhKjAmLyAvT1AwQzxULyQ0WDEkWTU2Nk1WQFguJVg8SFcoUixMKVI0QgorTSZCLC8oUFw7JjFMPyhCNEk6Ijw9KCI0Ni80LVBJTE81WU5XTls+RzkpUkJANi4zTD5NJzhWMi5fM0guOgorTUZcTVZQMkpaWCsjITojUko0UzsgLEwlWj5XXVwvIzAvKCFMQioiPEgtUVREMkEoMiVRKDYlMSQ4LzItPAorTUc2USpEMy0mRDFYISogJjAgLk9COkYlPDU1XTk1VUU7NSUtNzVFWltSUlg6JiFQOCsxNEwnQkw5KkE4QworTSkiPEkqUyRaKjQ9TDk4MzZSPE8xVU07OVUsXz9HTExYLVJGLjldUzU+LDcoUUdfIzxLWVFCK0FGTFFeTQorTVJXNScrSzFUKjpBJTtGXUY6Vjk8J1RJJyYxTE0uNFRYKDIoNiZBUDwnMDA5QyFVOTIlRlEqKUpBKVJKMgorTS0wJE8gMzggWy5eMkNYRiNCWEYrQlhaKkJYRiA+PEsxKzE0NiZBNEokQkQ7KiE4RyRSJEIpMjxJK1NMQgorTStERFk3XEMtVC0zOVY9OzZVLU4vUVNQUShJQUtWPUFYUExDKkE8PVVRRz4qT1ZeVygrJy49VFhWTkdMUAorTUtEUVY+NylaPSY4PTMkTDsmUkRcNFM8QycwWDgmMTg3JFAsNkMhSSQvRVpHKFlOQClCUikpMCRIIDNAIAorTV5fXlxOOlZOTVsyVE1bUldNW1ZJRD1DRCshLDIlQSxIJCI8OSlBMEUkMUw6J1IkQyoyUEAoI0hJNFxbPworTVo/I1VdPytUWl4uLVNUWFIlWVlVWT8hXVJNRz5CTF1XUkdaLlImXl8oW08+P1RcWlA3VFFMVFVYQDc9XgorTT5WUD80JSxBKCJYXDQjMD8mUSg8JlFEOiVBQDglQUEwMTYiWStJWj8oUkIpKVAkRyAzMCBeXi1NOVY1OgorTTZVPTg1VVE2NFRMODg8Ny0pUUhEKEFUTCZCVD8rQUhPJjI0RCojJFotNE5NNkhfP1ZMTzpWLTs4Vl1DNworTUE5PVxUVD01K1hdT1ctKS4vXEcsQSs8QUtXWUxNJSVSJlozKz4pVkkqIlpVRkFWLTcmKTo6IUBCJSM4TQorTTNWPT8xMlhJLEFYO0U5Tj5KOkpSTTteXTZGIk8sKUhQLSc+NCxAJEUgMzQgXl8iPUZJUjRFKSIvRFheLAorTUQnVE84XDcxKVE0PyghSEkmIkw9KlE8SiUiIEIqIyRYLCQuQi82OyxWPTc5Vk1HPFguJzg5NSUsUFQxLAorTSopRVVWPS0vLzxHMUNcJEhOODVST0VZWigqSy4+Oi5RLCM2XEdSMjU5NllGPSFUPyVTVFM0VjVCMlJYSQorTSsxPDlESUI7SUpKUk07Xy44JUZTKzkoTCxHNikoQCQ+IDMsIF5fXyxSTE8jUUwrIVAsIyFPSkUmODxTPQorTSdBID0nIUBHJSI8OSoxNEgkQVQ+KFJQUipTVkEqJVc5XC83UFwvJ05bXldDNzNYTU81IS4nOV1eWT5RMgorTTBNQ0ZGTExKT1hZV1FFWiAoSydAQSpCVSxDOl1JIi45PDc1Sz4yID0mM1hQMzY9QjFCREIqQUA7RkoiQworTUtLLltPLDMkNlVCSypZOFEtRz4pKSAkPSAyVCBBXllBPDQtPTVFTCM1XyUyMTBVMzVcIy8sU0ElKlJMVQorTSsiWD4sQURQJjNEQigiVFItQzsuVV0zMVU9OzlWPS8mV1k1IENIJipTNTxDPkhVXVVMWD9GPCcnNSwkRgorTS83NFU0UzwsIVojIk4kPFszKjRdKUoxSkAnWS8qRCFGN1RUSjBSRFIqQVxAJyIwUkI4XjFCODoiPzdVVworTSomSlstSSQ3JCguIS5AJFIgNTggXl8yO0dINjNEKTYxRDhSMTshTTM4LD8uLDMpICoyQFMqQlA8LCE4SworTSRTLD8nQkxOLCMzKVNdPzlWTUc6Vy0/KVhZRFM1Iy0zUEUgOD4pPiJUXEQ9RVwjJzY8REcwR0xcNkNQMQorTSJKKyNPJFkkNSpJIys7IVhCWEU5KzNNQzk1MFEyQlBUKkFUPSYyJE9DOTI2Q0hSKEBYLV0pRiZSK0hMNAorTSNHXVUqMCRJIDUkIF5fXzRTK1siT1wzIE9bXyFEQlU8OC0rPSpSVF4pMjhNKEIwNishMEklIzBBJiIsRgorTSpTQzRYLkdNXD8nU14vL0FeKixWKTFYS1A1PEc9KV4nVz1YOUY8Wzg5TFxIMTgoXjZUJDMjKksuUSUhIAorTTZLOSorKz4iRTkxQStTQUE4RSxSMyJYUihRRDslUVxNRVomQ0ZZNjFDKFIkKkYmVixIWDYkKDVaKkAkSQorTSA0UCBeXk0yOTUxPThGJT41RkRAJTIgSDMrUzYtMiBCKjIgSy5CXD0rUUhWMFMgRytTJFlSLSs0Vk1LNAorTVVdQzdUOlw8LDZcSUQ4QihTJV1HKVkiJlVMVSFQPE5eLUFYQSlCKDwmUiw7JiZKJkY2WkNOIiBFS0dRXQorTUA1TTYyVEkkK0MsXy5SJFMsMyxDKjJEWTlXLU46NjlANyVBMzU3Nlc/OE4nSjhCJi0wJSEgNyQgXl8mLAorTURJOjNGOUI1RVlFJSZBUD8zXC82LFFEPClRVEkuIlw9K0FEXDIzIEMoUjhTUi07OlddXzxXLU83VSskOQorTSo2QDQ1U00sTzVBNyhJSitUXEUhUExOXS1RVDsoQiA6JkFUOCU2PiNGNyJITyJAUk84Xi5CJVExMDNcXgorTSwzPSMvQihTK1JYQSlSPFg5JyFLOUYxPjZFOTIzRjpJPSg2JElYMVopICRYIDZYIF5fXyVQLF8iUjxDJQorTVJMQUApQihBM1xfRytRPD0oUUxDLCJAOCpRQFsxQkQ5JyIsVlQ+Q01dT0NSXF8/VlssOEUrVjgwKDIwQworTU81XUgnWiowVz1EWlE9WykuQVA+KVIwPCYyIDglVyYrR0cyS1NCWE9RWV47RDVVLi4zNFkqMlxeLyIsTgorTSlSRD0oMVxLOEcpTTomITg1JSExM1Y6Tz4oQiZKOElfKTAkWCA2UCBeXllEPFVNSjkmOUc3Q1xDJ1RBSAorTS48IzUvMiw8LFNMTyxTKDYtNCxQJVIgTzUsRzhWLTcyVF1LMlRdJjE9IzBXP0coT0E4RipSRzxBJihBXQorTVI8TjtQXCclLUFYOylCJEYrUyU2JVg/IE85MF0vNFlcQTYlPTNFNTs2NVEjLEJEXCZSSFowU0BeLiIsTgorTVU9KzhVPUs3Vi0/Q1NHXlk/SC5USzgiKy1QJE4gNlAgXl8yPkgpVj1GOU48Q1NcMCg1IUQwLD8zLkFQNgorTSwzQE0sMyg4LVQwTyUhVEwzTDM4Vz1TPVctVzdWLTY0PDJYTz0mXEAzI1EsT1c8MyRZKiJRTEY9UTwzKgorTSxRPDgoUVhDKzJJMSVIRyBPOUEjMSU+JEJWLToxJDEnMEREXCwiPFomIjxYL1MoWi1SJExUTSs4VT1HNQorTVVNN0NSNy5NPUdWUUpXUV8pQCRFIDZIIF5fXzdTTTstUkxTLU1GID0nVTlKL10vRy4hVDkrMzhHKjJUNAorTS00NE4lIUxKNFxfS10vP1ddT0dQW15KRj4zLE07RlQ+JiIkRE9HUEMkKUonVC1eO1I9MzkuUTQ4KTFYQQorTSoyQS4lOSczVCoxLDBVLipHJkU6LyM8VywzSFMqQiRWJUI8UixSTE4rIURIVk1PQVdOQ0daLj9UVSdCUAorTT5IIlNLOCokKVAkRSA2UCBeXkVOOzY5STolTUktVCQ0JzghXDAsMzwuIjQ9LEFIRyhTJSMrUTROJ1ZTMgorTVctUzhXLUM1VU1HNDVCKD8qQVg6KlFISEBJIihSKFRAJ1ddX1BMNlVQK15fMlJYRyhRTEQtQVQ7JVJSXAorTU0zKVdCIVQyJyRZNTg2LT83RUUmJlFUXSchWFsrMyRULDM0SVNdOzVXPVtBVl1XO05GSlBFOCZbSiZOIworTS0wJFAgMkQgXl8qSEY6OjtGSSIyJ1IoNCZYRiEyXEc7LVFcNywhNEUoUzUpLEFARyVWNy5XTV88WC1TPgorTVddQzc2QkBHKiIwQSwiKD0zJDktUEkwOSZIRiRQTDJVUEwzJDMiUEcoQUhELUFAOSYzKyFOM04kQzIgNAorTSckISUyVD0jMUQoXCYhOFclQURXKjJIUSwjKEVUXU86WE4rRVguK0JONipLQzdOVUk2PVcpICRJIDI8IAorTV5fXz9RLVcnU0wuXzAjJC0nOUYtM007US0iIDorISxBJyMhJCxBSEgmVls9XS9HWF9fQ1hdXydRO0MkTQorTSsiVEotMkA8JzJARk85OEQmKF4nUl1WXFItJzk2MkBCJ1E8PytRLDMlMz8uUDNFW0NSWDwjMlxVLVMoTgorTSwzJFQlQTBaJjE8TycyJEMoUyBLWV8rT11fP1pdPz9dU1ZCSUQ3WlhJVlVaKFAkSCAyRCBeXk1MPyYlQAorTTdGLCAuRDhQLjQ0Tiw8JzUuMlRHLEFAUS8zKEgrIVlETE0vNFYtRzhWTS84VFRYRDIiUTsyMjBGNEMxJgorTUcpRiNVOUw4JkdGIk5cNlQ4XCZYOTJMTS9CUTAwNFBfKEFfLU9RQDwuUkBCMzVBLThGISYnVUEkJjNQTworTTkjWSUqU0xWLlJYTVRdNzlXPis+Vz1TQFU3QlRGRypRSjddRC0gJFggOFQgXl82RUlKMkFFOTAtJiJISQorTS8kSFQtPDM5LlJARCxBSFMvQyhGKjFBRk1dOzdXPVs+V11PPFRUSDstUilCKyIwSS8yPE06JUErUUlYNQorTSVYNiVPXEJPOCw2XTlSQEcuMkkuL1RQXigxVypPITg6LUIwPi9TXSM0JDBTJVQ8WSZDIEw4MzEhKyM0UQorTS1SUEtWLUs9V14nQFg+J0dVNyZPRSZSS0hXVTwpQCRRIDhQIF5fXzlTPUsqUTtUPygjIEovJFxZLz0zTQorTS1CLEQrMThRL1JUQilRVUxRLltRXU8vUV4uW1lYRSg9KyFRSygiREcsUjw4LzMsTVEpWD0mOConUj06XAorTTpNJyw7MjhCLUI5Ki5UPFsoIV82UUFIPiwySDYrQyRZLzMgRiQzSE4nMkxMODJQVygiUEQqUjhNWV5fUgorTV0/Q1ZdT0NfWUcqTUY3JlBKKCk6J1AkUCA4TCBeXk1RPFVZSzpRODclMUROK1I8NSlLSzgvQjxFK1QoTgorTSYiPEA/K1svVS0/NFU9NzhWLE8rNSU1OjsiWiQ1NjBENkRFLUM5RiZTOlRbJidBW04sJlE/O1ZeMEE8QQorTSoxRDonQTRALDM8VzAkIEIrUjxXNUUkTy1WMjtJKEkoSzRFI1NTUSEpI0RSMDIgN1JdQzhWXVc+Vk1DNworTUQ4VlBHVjZLSTcgPS1AJFcgOVwgXl8iS0haLkdBMUwzIjEsUy0iRDcqW1c7L0IkPy1UTFQmMjRAP1wvOAorTVc9Xz1XTVtCWExfJTEkJSUwMiIzLDVUPixTIEw1RUUtT0sgWCUoMV5PLDpOPjtWXTAhNDopUTw4JyEwPworTStTNFEuM0Q7K1IkSi9DWEoqJF41SjdYWkszXSJTMzBdKSMsTS8xWDZULVc7Vy1PPVY9SzlDSDpLRlYmRworTUg2WDIpQCROIDlUIF5fV0FTTVc6SzJAOCQhQFYuMyQ7LCxPTS4xUEAsNDxTJyJER0M9Q05dX09TXi8zUgorTV0+JzgvIlRbKVE+PyglTDcmUiwyKVJQUU9KWSAmOCYgUU02WkA8OykxIFw4KFEsNCYhJD4sM0RWLiM8PAorTSlCKD0rMyRFJ0Q2NktHPFBMQ0UhVDMgVSZSUEAsMUA1V18rVV4/P1ZcLl9PRkgySEgmOkxJRywxKCAkTgorTSA6JCBeXk1NPEVVWixTNSIsUVQ6JjFIPChbVzcuQ0U6LTFEQipINi1NLE8mU1xHLVRcQj1IUzs4NjVRKQorTUBCKV04RFBfNSMxLjs4VVpSODhCJVZZUUlbWlA3VF5OQ1JMRCdTLFgrMjw+Jzk4XTQzSDsoQjBbNCQuQgorTUw2OV5XSj0tTVQsXFFEJSQoM0xAKiJURFNdLzVYPVM2VVxDOTJYUkBJNEJCSCc8VC5AJFcgOkAgXl8iRworTUgpPjAoQTxEKDE8OiYxLDgpPCs8LzM9Oi4hUEUqSFI2Tz0vL1YtJzZVTEZASUNLLjFUWF41QV46LlQ0XworTSwyIFIuJFEgTjhIQCRXSVRKXD5RNlRWSkJCOD8nMyRWKlI4PCZZMFcyUzAzKSFYTjAjTkJIRT1bWClEXworTU4jVF5SI0RfKDM0OihSSEFUXUM5WS4zPVcsUzcwWDY7SFQ6QEdHLEcqICRMIDo0IF5fUz1STDpOLjFYSworTSohUD8oIUg9KjxbUy9TRUEtQVBHK1lCRlReX0VcLldMXE4qUk4kOzYtIzBbLiFeUSk0LFonIThAJVI8TAorTU5YKEQmJz1WTT0+XjglKlBCIiQ8JjJUUilSND4nWURYMUJcNygiJEEsI0ZJSCRVW1lJKFZQU0BZUyM8WgorTSZDIDMnQlBJWV5XS1xPS1ZcPVtJMjdSOEk0SkRIR0RHKFAkTCA6VCBeXkVKOzNANiZRWEUwQUQ3JjE0NQorTSlbPy1GViw1KSFIMCVQVD8nUjA+KDIkOSZBXEA9VC8zPlJIREFCTTI3R1EuMVZRJjMnTVRRVVxZJTZVLQorTTZbUk4ySDInNDM4VSpSWEYlUUw/JzgwVi4zJDcjUVxQLFtPOkNFOV5XRFUrTVRQW1QjSFosMzBTKEtBWworTVI3NE8vXTFYQyZbNDFWVShGUT44STZcUS5AJFggOkggXl8qQ0VVUDsjQSQxK0BUNCRQVC8qK082SEY0OQorTSghMC4lUFQ9JiFQPykiLDwmMVRCPjQ3MTpSODkzQV1CLSctNSwmKFAnU1BaTTYsWCRHOTA3XCpPMig2IworTTMjJFAqMkxDJUFUPSZYMFMtIlwzJEFMRisrPzs/NFFYVkNUXU5UOF9UQyxVK1JUSic7MVhTR1RVMS4mJworTUZHPzAwJjkjRjE2NkhWTEIqICRPIDo4IF5fXzlQJ1Q9JDEwOS0hIDYmITAyKlw3UEpWTEMpMUQzJyEoQgorTSdSLEotI0BOKVIoPT00LzY2QUg2KUFJUic3LTYoRVBJIlIoSE4lVFclJzEyOV0mWjJIQigyQlBNKTJEQQorTSRRTD8nWExTLDJMOCUiIDwoK1dIPyNRUVdTPFZRVCRZViMoUipSTEomW1IkWFkkXjFPKj9LKC8/MDVVIAorTUZRRjpJVyBCKTAkTyA6WCBeXTlTISE0OCUhODUlITw2JUEwOSYqWy02IVBcMTE8NCYkXFMpIzw1JUFAOQorTSchTSE0JC8uNiIkRkMySFgxQlg9LDMgWS42MVdRSFxUJkZcTy9bQkgqMzZPQSdcTygyJEQvMTA0KkdQUAorTSZRMEw5MyhFMSM4SzU0Si9WVEUvTFQgX1FTQF4xUzRSKigyVVImNScpPE1NQiVTJjIkKShGIiIzRTZMUAorTSxAJFcgOlggXl5aOydBNDQkISgxJDEwMyRRKDMlKys1NzFRIDExNDIlRExPKCMsMSRBMDUmMUUkNUM/OworTTBSLDY2QU0gKjFQOicyNEAnIzxdTDhUTyY3KFUxS05FKlNOU0EnWE0nUUxCMFFIMSlXWE0lQSxOOUMkQAorTS9DLEwwVCYwVjMxIE1TSSFSMyRXL0JIRShIKk5UVyUyKy0hWUYmMyIwM0kiRUFaMURWQEUoUCRUIDpAIAorTV5fXycvQVA5JTE8NiRRODUlMTA0JjtbSDpCNSoyQUQ2JkUkVSlDRDYlUUQ6JlE0WjQzK0wtMjwwLSFNMworTScxRDolMUw9JCIsQEs5KE0lRyBUMixOTyo0IltCN1RJJlFYRzIhRDEqODhPJFEgSjlTID0uMzRNMCMmIgorTVczIFZPUzRcUzJcVi9CPEUmOD5VV0g5Mys9Xi5KNkMyL1M5I0YiKjVFVkhFKDAkVCA6VCBeXiAuKEIgPQorTScxQDglUiRQLiQhJzVbMzM+M0g5I1EkNjZGRTsxRUU0JSFUMUE6LlNLKk5EPyFcQ0JSLSgsMkw1KlNITAorTSozVVlPWDhLJUYwPytHXjolUilcQTFQOiVBPDQnVUU3LTdZLz9YNFgoJjlJS0tFTjBUMiVWRSkqTENZIQorTVIzTSowI0xTLDsuUFFGIFszPT1OP0VPKDA0MSNEIVk8LEZYUSxAJFYgOyAgQU5UPychSD4mMCw0XEFYTQorTS0zTSA0O0c7PyM4NyNQXDQ2JjU3MEU1MCQhRC1BWjZYTCoyUThCIDk2UU0zJiFQMiczLDclMU0hSjgoQQorTSRWNEItKDY8JTI+IEExSDclITA1KUVVMyxIITFASEBcJlYtSUsrSVcvRC4oViNUW01DQSNSUzEjLVMgSAorTSs7LktUVlkpNi1RWkNWLyQuQ1BdQ0FROiwmTEYoUCRTIDpIIF5fXEwnUVRBJ0FEOSVCIE8tU0RfNUw7TgorTUJENEklQSw4NyZNPTIlTTUlMVgyQzpWXU4qNyI0QiwzMUFFPiRRSDIlQkg1I0EgQ0hYSEklNjhCLFhaQgorTSVSSihDIVw5JUEwOCw2NTgtKEE1QCg4VyYmLU5MK1VXLlNBXFcjRFFPQyxeU1MpIi1SVEUoW1JWWChBMgorTThPJi9HJkc0LiNAXkQiIT4tJlRGKDAkUyA6XCBeXkA4JlE8NCUhKDcuRCErMURFLTIrRy89QVA5JTE4TQorTTJFRSokQiRQL1FEM0oqRiQ6Jjo4OSFIPDQhVSkqUkA6KCMoRSdDJUtKKU0iJkQgOiZEIjkmIkhdK0EkOQorTSZCSUYyOjZeKSVWM1cnJTEvNTUxNCU5IjIxVV5WVTUjTFRcW1IzKSUyM0RUKTs2VlNFMFswXF1APDVDJgorTTJEOSo/QiQ9KCZIQylAJS8gOyQgXl08OiRAWDIkIFgzLVNVKDBUKSUwS183PTFANyRRMEsyJTUmI0FUTAorTS5RNC9LWyYpOyYuRjFBRDcpQUE4JiFUOCYiUDYlQVBaRVlMXiVDUDgnNEI+JUJNICtQXDUmUlFJNEpKWgorTSglXjdXRy0vLiVJNjM1KS0yQVFeVjQgVE1URF1SUkxeMCJYTCkrOlJVJVUmND0xTEBGIyIwU1kkPyFcOworTSdGPDglUCUsIDpUIF5fQDglQUA0JTEsOC4zXSoxNCEjMV0jTUEiIDwlUUBPMyVNLCUiLFEwIUg0Tkw2QAorTUAmTlgsUUAyKFE1PCZBVDolQiw2JSFAQkUqMSMnJCQ6JlRKQSZCUSAsQSw6J0JBSThLPyIpNj4/WEclKworTS1FXUIzVUEtMlFFVVczUEpPVDBYU1JEXTAiTEYmPCciWFc1MDZeTV9CVjs0MDNJJT9CLD8oRkQ4JTAlLAorTSA7KCBeXzw1JTFANSUhPDgjMzEnNFUpRDM6Xy4/QUw5JTE4OCUgXCwnQUQzJ1EsPSxaOklLS04uPjU4PworTTJCJScpQjg6JzMoQiUiPSE0OyxGJzE0OSVBXS4oMiRFMEIlMzo4QD07SyMrKDUqW1c4MFEoNiVMMDFBLgorTSwjTVNVNSUpTURMXFBSVSMzQzheKFs2VlIjVFYvTSU0NzUvJzM0NFk8Iiw8J0c6LC9AJFggOlwgXl1AMQorTSQwXDIkISwyIjMhJDM0PTkxWzcyP1FEOCRRMDYkQEwoJkE0LyZQXDkvSzJSTUteOzZVID8pQVk2JiFUNworTSUiUDYjMUg6MUtESCYxJDYlMjkzJ1IsSTEiLTE7KEQ/PiszJyc1Ml1WR1hKJlY1Uy8hKTYsM0FRVUNcWworTU5ENF5QUk0gMVJMVihLRlRTRCxeMi0xQTxFTyMyI1RTOzIkOicnLV8rMCRTIDpMIF5fRDYoMVQ0JTFANworTSNDNSY0JDk2Myw7R0MhTDUlMUA6JUEkLighTDQoITA+L1tXIE8sPkoyJSw6KlFROCdBXDklIjQzIyFILAorTTFMIEYnQTg2JEI1NihSJEQvUV0zO0hIPUJcQzYoVUsjWEgkSCgnJV4uQT04LSNJTVYzSFFQRCBZUiI8XgorTTFCQFIlXC8mVVUpIjQuUVA9Ric1MTNEVjtSND4oJzYgKyAkUSA7ICBATkRCIFE/ViVBKDYmIlEpL1UxNgorTS9KTT4vVjE5JUQyQiYiLSdARlVFOTdYPCkpNVg2NUooOTI8PC0iQTsmQkhBKjM4XCgyIE4qOCw9J0JAUQorTSdBUEssRCBMKkc+N0FNSD0zXC86KzNSVVZYPF4pJkFANCYoXDcyJixWVF00SzRRIUgzPSIzRDBVKytCWQorTVIjVFMwLS0oNFQ3JjMoRVc2RTA5J0ZZXTBAJFYgNlQgXl1MOCQhKDUlISA0JkJZJS1UQSktOlE9MFZJOworTSREIj4lIV0jP0ZFQTg3SDgqSV4hOFYiLTRRRDkoMiVBJEFcNidCSFAlISw5KDgwOCYiNE4mUVRMLFQkTQorTSs3Vj5CLTQ8NyxDNSozUldWKDBaJlYxRTVGPSE3UiopVzQhJkxEOSBHQ0kmMiNESipLRlVTNDBbMV0tMgorTTkkSyAxWDFRNEUgOiYmSU0qMCROIDZQIF5eVEIjUSA6JjE0OSgjKSouVE0pLjtFSzJWXT8lVDZDJjI1KQorTUEmXUc5WCA+K1pGLzpXJjIwIiQ5KFIhRiVBXDYnQjxNJSEwNydYPDYmMjxQJzFYTS0kKE4qV0JAQ04gOworTTs9V00sNCZVWEg4Uic2SUg0NkUkOFI2KVhTUFxNVCRdSCMhIDIzOEkoTDMkVjRVITROMTw5VT81MSglVgorTTYlND0nNl1RKiAkTCA2RCBeXiRHJ0JQUS5UNSouU0UhLyMgXi9STydGNkE/JkFcMTtRTF8mNTw0KFY8OworTSYlUiNEV0I4N0IsPiwyKEAtI0BWLCJQUidRUEgqJiBIJ1JYXi5DRDsvJCBEJ1QhP1BeIEoqXCNAKFJeVAorTVYpSTknUkVFMVVQRTglOjBWNSk0TCRRJFMkJSY0I1xSK0s+U1FDVFYxTS0kMzQ3KjY7WUpJQjVGSEciIworTTFAJFggNVwgXl1AQygjJFMvNEkwMDNZJC5CRFMtQk8oR1chRCYhTC06UTxbJTUsMCdWLDcnRi4pRkdOPAorTTQhLDsnQURDKlJUSykyJEclISA3JzVUQihDLSMvU1A+L1QsQig0MURSLUxHLTw7OydSXlVVOT01JiJBTAorTTNWLEs5JUYuVlQtJk00OSNSNCUmMjMwSisrQk9RQ1xZMi0hJzRUOyI1K0VER0IlR0cmUVMrMCRQIDYgIAorTV5eKEgnQyxXMDRdNTFEJSYvIkhSLiMrNUonOUknMiAyPCFVISZVRDYpNkQ9JzY2MEZYVkYvUTQ5KCFERQorTSsyVEspMiBGJSEsOCclTEMpIzkmMENYPi9ULEQnU11HUz5IRy89P1MpUzJYWDk9KyVCPU0yVihKN1UmKgorTVgzXFxORCUgUlNBITJDJEgpLC5eU1QsWzNNQSc0JEczNDs5SUkiOUpINyVXKyAkTiA2JCBeXURWLSNFJworTSsiIEEqUyhZLjM4VjAyTTwyJjFZJlE8PCchRTonIUA8KTIwQCNJIEQmIUkhM0IwNilTPFYrUkBMKVFYOQorTSZBQEApMyxdLkM4Vi4jJD8mUVQ9JkFSJVEtTEwrTCs8KkJSUVc5TUlLQU0rPkVEUC1UUi1UVS0xQDRFKgorTVMjWSoxIzxfLEs2U1NEISM1XD0uNjVLJTRLUUtHQjZCR0ZGITBQJFwgOEAgXl1IWC0zPF8oMUg/KlMgVworTS5DLE0uMkE9M1ZZXyYxLDgmITU2JiEwOCgyIDwjSSREJjFFJzBRLDUlIlBTKSFUQSchODAkMFwzJkJUWgorTS8zTFsvMlw8JiFIOiVRTidSLTxGLFw/NylCUlFWOUFGSSE5Lj81QE0sVD4oVTQxI0FELSlSM0ElLzJQVworTSwrOk9UNC0nNkxJMTc1Vl8zOz1FRUImQ0YmNVEqQCRUIDgwIF5ePF4tQ0RdJ0FMQyxDNFsuUyxNLVJJSgorTTZHOiYnQUA9JzFNPCdBSD4pUjhCJTlYUykiPS4uIUg0JVJEUSkhVEEnITAwJFEsNiVSQFwvU1RdL1MkPgorTSZBUDwlUUIrVC5ESS09M08rQyZWWjlBOEchLS4+VTxLKjNCI1ZUIFlCU1kmUlMlIi9CRFUqLCZeVFQtIQorTTZMUS82JU8wMksxSkciOkZHNklVKjAkUiA4RCBeXVhHNyNNRTEyUEcoQlRRLSMtJjAjTylNVi1IJVVdMAorTSVCIEMzJUFeK0EwVSYxSD8nUShDM1FENChCXEgpMiBFKFJMRCcxUD4oMiUqMjJYQCdBXD4nQjhLLzIkXAorTU0tREgsKydAKUJKTFJKJU9LSiRMKFJZTVBGRjFUVSkySjRQX09TUSUxUyxYK1c+UlFMNydQPCpWUCs3KworTTZaVThDQjI+RkYxXjAwJF0gN0QgXl0gNjFRWSwrUVQ8JkI4SywyXSEuI0MpTzZZTSU1TSwkQVA/MiUxWgorTSpBIFElUUA9JzEgSTEwSDEkIjBBJyE8PCZCKDslISwyJSFFKTJSVD8nMUg3JUFcRS5CJFtOPTRALEs7PQorTShCSkxSWVVLSElERicyOUZNRVYrVTQ5JEtENF5PIzhdL0JMUCs3Rk9STE8tUjxGW1ErSyk1SkEyQUIiPworTUVGIU4qICRVIDcsIF5dQDMuMSUhKiFMPCgyVFAsUzBfLUNLOFMnRVkmRiExJVIoRTNFSiAsIThXJjFQQgorTSdRME4vMTAzJFIkQCchPDwmQig7JUE8NSUhNSgyMkg8JkFAOCZBWEYuIVBaTy48RitMK1UqQl5TViopNworTUZZPEcnQilFTDQ6IlZULFpMVCxbT0MkWzAiPE4pOCZbVy1bPlc+KzBWLSc/NFo1N0JCNkJGVjVQKVAkUworTSA2WCBIPjBLMiMoWCsiIDwlUUhFLFNQVy1SUTs4U1kmJ1E8NSRBOEElUTA5JFE0OSRQLEFDISgyJzIoNworTSdRVEMoUVQ8J1AsRlIiIDkmQUxOLFFYSCpSSFAsIyRLLEIxLTIsNE0qSVdAKTJGU1JKVVJCRjIlN1ZRMQorTUk3OiJTVzEmRUQ5I08jMSI0Q0RTLFdTIUJZOihFWV5BRVo7IzdbQTs+Mjo2QzVJWjEwJF0gNiggSD0wPQorTS5CIEYmUTQ2JTFAQywzUFEsIkE9OjRFKycxLDEjQSg9JFEgNCNRJDUkMCw/VVEgNyQxLC4kUSQ3JkE4NQorTSYhVDsmUTQwJDE0TSwhTEUqIkBOKzJcSitSKSgyS1xGKjorPSgyPlBUOilHQUVRVzRFUSpERkIgVFY8WworTUdDXSFOQlxbMjJYSCtXUlxEWi42SismUkk7Kyc3KyE1PDIqOUJVQUsrICRUIDVUIEg+PEMsIUxBJiE0OworTSYxUEctNCxWLDJZRTwkUS4oQUQ3JSFAQyYxOD8lUTw6JUAsRFVRKDwjIFwyJiE4PCchPDYmMVQ7JlE0MgorTSRROEwrQURDKUIgSisyTEkrUVkjMT0gTyoqW1UqMlJcVEstKjxERU40RTBePiRZWlZWQFBIJCBbT0JQWQorTTJSTEUoWCcnSVtWUFA8Qy1QPEc7NkpZOD0yPjtDVVVLKjAkVCA2QCBeXixBKFIsSyZBPD8oQVA6JiE8RgorTTBSMjxLKCRIJyEqTSY2WEY2MzYzOCggMiRCLEQnISQ0LFUoPiZRVEApIjxIKFI8RigxRDcmIUA5KUIsXworTS9RUFwzWFlLQFQtQ0gtTEkqW1M9KEI6SE87RT0+WSI5Qko6PEdUSidTJUkvNTQoWT0jQSUyJCBXLEsrJQorTUkpIitGOTY6RElfJD1LJT46QjIwQkYqJDIwJFkgOkAgXl1EOCchUEMkQSw9KCFIOCVBPEAvIiI5S0g4SQorTSYgWkklNkhCNTMmLjcnUC4kIiRCJkBYMidDNDEjUSQ0JiFMPCVRWD0mISAwJDEoMyhSIFwvIUhZMlhFRAorTT80IUFIXUhFK0wnOidCMkBQKkUsPTgyJj4pIjBDM1IkVCRVJDdDTFc8UyxeL1M0TCtLKyBLKVY5SkpKTworTUkrIyk9Okk6OEIiM0ImIVUsICRQIDpAIF5eVEInMVRJJiFAPykhWDwmQVhFLzI6Q00oREwnQTJPJlcgSAorTTZTPjk5KCgzJTI4RydQWDYkQkAyJEEwNyZRWD8mQiA/JkEoMSRBLDQoMVhaLkEwVzQpMUtARClDST5ESworTStMV1IpQkZQUCtIUzlGXU42NylPOEJCIlYkWFk3I0hTPEMgXDAzKEspK08tUCs+U1BcMy1QXEdAPSpFPworTTlCNjVDJjVVKzAkUCA6XCBKPjw6KUFcQykySFAlUUw1JFEgPTBSKFopQThAJkFNKyYhNDoqIUg4JCFINgorTSRRSEQnIVA4KkMkQiBSOy8oUjBFLCMkUyZBODYlMUw7KjQsTytTJTkyISw7LkMhJkctQEgpOzs2KjJeSQorTT5LTUJDXElJQSg/JjskXVpURTUjKkU1ICxTJSI0NCBXKVknIklZPjVFOU44RUojITtbOS42UjYrQUYtVQorTTFQJFsgOiwgSj1QMSdRTD0nUjBKJFFEMyQxIDcvIVhSKCE0OyRRPSclISQ2KSE4MyMhODIkMUBCJkFEOgorTSZBVDcgUU8vJkFMPClSTE0lISAzJEEwMikkIEwrIlk2MTBcMyxSUSZITUBGKktXMykyVkRASyU0QitVNworTTxHVl82JC1ZVURAWC0kWF0sQlBbMiM0TChZIl1LWjJDSUpaS0lKVyY8Ky0sNFImLkEmJUYrQCRSIDogIAorTUo+RDspQiBCKSI8TSYhVDclMTw8LzIxIiwyJEYnIVUtJkE8PCpBUD4lIVA3JUFURydRTD4kQTg3IFFPLworTSchVD4qMlhQJVEsMyRBNDQoQ1hKKkJZNDBRPDctIyUrSj5MSis8R0srMypTPytNIERbWSIxVD5UOCJZTgorTVdERE0rJFRbK1I8WTJDKEsmWVMsUFtaXU9cOyVRLDM/PDstMTYyOjBCJjlGKlAkUiA6QCBLXlBWK1IkUQorTSsiQFUoIVA1JiIsRjFCNDkmIUA7I1FANyVRIDgkMUQ3IzBcMCRRREAoIUg2KFJEQilCOEgsQzxFIFFXKQorTSchSDooQlBGJyYkUzNSUEExIVg/KTE9PU1dPEgnWV8uKyJaUzwrRTxETEUtNTg/Kj1VNSQ6JUEkJEJEXQorTSZDISEzU1kgKkoqXEU4Tic/N01bOCcvLTgqWSUyUV1eOVYtTC8wJSQgOTggSj1MTClRTEwpMVxJJkFIMworTSVCJEMwIiwzJTE8NiJRMDMkUFA0IzE0MyIwTCwkMTw+J0FAPCdCLDogUVYjKlMkPyBRPyklQTA3JyI0OgorTSVFWFAzIkhAMEFMNychOT9PPUhGKDo7KyoiUlc9WzUyRDwwXTA4Jyw6JDkiOyRMWSZSMFomQkxcMiM4VQorTSk6KldGWTIzQlhCJTonUzI4Wk0lMTFNXzk1XT0pUCRdIDkgIEc+NFQrMVhKKFIkTidRWDgmQjhFMDI8OAorTSVRODQkIUg5JjEoOiRRTDsgUSc7JUFQQyhRVEMnIkA+JzFUPCsjKEAmIUg6JjE8NycyOD0lVVhQMyJYPQorTS5BRDUnIS1DUS5ISilbK0MsIyMjO0tMX0QsKFcuN0s0OiNQXD0kUE4kMihYJTI4WTIzKFQoKk8mSypKSAorTUdZPjc+WEtHOFpNKjIiIiI6NjE9KFAkXCA5NCBeXjxMMCNcTCdRXScrIlhTNUVQWCxCMD8oQVxCKVFcRAorTSlCOEApMixBJyFcPyUxVEInUVg8KEMoSSlSXEkpUVQ+J0FUQCkiOEMoIjRcNkJMMSZVVVcwIUhFMUI9PgorTUxNJE8pSCpZK1MmWUE8ITlEPDUtMkdbMT9FNFoyVVkqJ1FMWDAkNSI0M1BVKjY+VVFbXyZTTTc3VS1HPgorTTcnJEAuUiEnJlYkUC4gJFogOCggXl0kRi1DLEMlITBcKSJQVDRFRFcsQjQ9KCFUQCkhUEEoUjA+KFIkQQorTSchXD8lMVRCJ1FIPCdSJDcnQkRAJlEkMiRBMDcmUVQ6JVFQUzUiQC4mJiFaL1E8QDAiOTtMTTRHKFhOVworTSpCXyI9PCUoQ0w0Xi5XWzY7VChbNEUkXCcxRFYvQ1xfM0MwSykmQlBSLC8qVE1HOlVdU0I3RlhBLjFVJAorTSYlSD8pUCRYIDggIF5eMEksIzhDJFEsWypSWF82RURUKzI4QikyKEUrIjBJKlJEQyoiOEYoMjBEJkIoRworTSkiKEMoMUAwJ0JQQCdBODclUTg5JzFcOiVRUFM1UkgwJkYhWC8hND4wUUU5UT8oVyhYRystMycuO1xQWworTUQsSFQrV0c7OzMoTTUlKFImMTRSLkNIXTMjIEUoNk5bVFxXNFcuN0hZPktWNyZQRC5RXSYmRUw+KSAkVAorTSA4KCBeXlxVN1NcSC4zIEM2RlpRUCZZODNCPD4mQVA8KDFIQilSSD8oUjhFKEJARitSMEAnIVxeL1hSLQorTSoiID4oMVBBKUIwSShSSFsrVFhFJ1EwMCMhQFskITwwK0MtQzIsLE4pI0E6LFM6VS5cLTRGTEE5NSctSworTUNFLF8vRihaMSNdJTBUPFwwU1BXKjI2QFNdVzpXLic+Vy1XOjsyRFBEMjRCKDVFIC4gJFwgNFwgXl0sTQorTTQzID0qQiQ0NCZOUE42NTAyMjQ+JkFQPCgxSEIpUkg/KFI4RShCQEYrUjBAJyIkXy02PUwlITA1JTEgNQorTSZBPDwlQVRSKiQ8PichJC0iMShYJSFINy0zQT8wPEBHJ1QpOStTMl4qXDEjRVxBKjE3LVA/VCEgMTU0TAorTTBDVSMwNCRZMCMwTSkiPjxUPis/WD47Q1g+Kzg6UjhVREIsQCdVKE8pUCRaIDRUIF5eJEsyIlg6KUFUMAorTTVWRl5RJjUuMUJIRSgyLEMqIiRJK0MkRipCVEopUlRLLSJERSgxXSwvJC00IzE8NyYhLDgnMUg/JjIgVAorTSo0QD8nQSwvIlE9IidBQDYtQiUtL108UicjQUUtM0MqKTxcVkY8VSAuNklTPzMkVDFVOEIvQ0RfLzNQVworTS9DIEcoMjZCWU9PWF5PV1peL0dUOzI4WERSNEIoNSxOKSAkViA0XCBeXkRaOiJQQioyQEgtUi8lVEZRQAorTTIiOD8oQVxBKSI8QSdBSEMpIixIK1FYSCwhREgnUjFZLiU0WypBXEIqQjRJKFFIWCkyOD8nUVRIKkEwQgorTSlSJTJLJkxaKVRSMUJKRFMrSypcMDJGVTZMRTZDLC07NEM1JUUkKFEuJUxTLUMgVSszMFQsI0RaKjI4WAorTU5bOlFLOiI2RUhZXjIzOSg6UUBEOCVYWi4gJFogNEAgXl0kUzchXDsoIVw/K0FbIVIlTS8vUixAKSIkQworTSlCREMoIVBFKUI0SCtRWEgsIURIJ1IpXi1TMD4mMSw1JzFIPiYhLFEnQVw8JyFIRSlRJD8pIU02TEZEWQorTSkkPiU/OlhRKitKWi8iPl4yTEklQjwtLDBTOSpBMlhSL1RYRS0iWFMqUlhRKzMkUCkiQFVOSzJPSlleNQorTUU4VVgxMzEuO0FERTg1PEkpUCRYIDQ4IF5eKFQ1MiA8KEIkQSxBTzBWNVEsL1JMSysiREsrIlxJKUIwTQorTStCVE8tIixNLTFYTSkiMisxMjgyJiE4NidBSD4mITBSJ1IgPidBUEcqMSxBKUFRQlBWLD4iQVlENkosVgorTSs7OywxUkcqMS00WEJcQSItUkksQFIwRjA0XDssIkhPKVJETypSVEooMjBVUiw7IU86VkFIOUYzMkM5MworTTtBSEY4RUBIKSAkVCA0QCBeXixQKkM4QiRRVFAxUl8kVEZFOzNCND4qIig/KSIoSidCOEYoUihCKTE8MgorTSZBSDgpQVVTNyQsWioiLEYpMiRSLkJUQSgxXEAnMUBaJkFAQSsyNSQ8J0pHSVheKDFFTEcpWkZaNjJeWAorTT1NJTo0PCE/NjIpIURDWFUnNT0jMDQhKy5UJFYlQ1BSKlIgVEtMWzJULTM2TUo/OFYmQUkqUjVaOSRMWgorTStAJFcgNDwgSCxcTChSWEAjUURML1JKX1IlOSkwUiQ/KjIsQCoiPE8oUkhHKSIsQikxPDIgUUM4KUE5WgorTTozQEknQUg5JkFASSwyUEInUVQ9JkE0VCUhNEAqMjEqPUcyMUInIUYsJUhCKDpeWTUiVyE6XSUrM0tZMAorTTJCLSRAQlRVKERIVS8jWSkuM1BTJFM4RylCIFNLTFsvVC0jMkwqLzVUVjlPK0I5Xzo0NEsnMCRVIDQ4IAorTUguJFEoQyhFJSFYUTBSQyxWNUEmMFJESi0iWEssIlBUKiMoUitSWEkqQVA3IFFXOCpRViU9RDxSKTFYOgorTSYxQEksMkxDKDFcPychPFUlUTQ/K1ItM0E2VTcyIyBaKkcgVykrOzA4Ml8tOk1JITQsISYvQT0mQSIwTAorTSk0TEwuM0klLFM8USQzJEQoUUxQTF03OVVeI0RQOytPV0ZNVCsiPiE6VDhJJkAkUSA0NCBeXixKJ1I0QworTSZBWEcnQT4+VURZKzIjJEAnIjA/KFJQTylSTEQoIjBHJSFAOSchTDsoQi1HK1kjMDlSNEwuIjhBJ1FcPQorTSgiKEYnMihbRiolLjokMitLRidHREVUUkZLSFErSjJPPjIuUEM8WTUlSEE7NTJBM0ckOEUzIkBcMSNJKgorTTBTOFYsMyhRLCNERks5TyQ7WDZINjQnMFJYSFovMVYiPDJEVC9QJTggOCggR00kQCZRVD0lQUhDJiE2PgorTVNULFwuQkhAJyIwPyhSUE8pUkxEKCIwQyQgLDVWQTw4KEIlTS85LyU2UUhBLEIsPiciID4nIVA/JjFMUworTUQ6JS83Uz4jSkVLPUA0REpFTCBMKipGTjxCLllEPD0uJSglLTFCUS5CQyhDMlIgSy8zQSgwMyRRKyJUSworTSpTOEVOKi8pPjhWSzZUTzRTOExaLiFaKj4yOEgrQCUyIDg0IEw9WEgoIiRCJlFcSCZRRkVWRCxcMCMkRworTShSTEYrIzRYLCMoSylSTEslMTQ7JyFQQCpSLVIxWicyOEFEPixSNEAnQiwjKDw8RidBUE9GSVBWMTNKMworTU42J0Q/RCRORlxcVypbOl0/MkMlRlxBLCVHXSMuQVUsQ1JAPzJBWEguUzEiLlJYTioySEYqIzBEUEs/QAorTUJaIls4VS9GWEk4VSxSJjA+UjhFKlAlMyA4NCBeXVRQLCIsPykyIFMuQUhQVjQxLjFDLD8oIjg/LDJUUQorTScxPEMoQihEKDFcQCoySEYpIilANlFSTj0yWEMoMVw9KCIwQyghUEMoIlBXRjpSRUdVNUhKNicuRTU1IworTUQsIFgqSFozQzFOUyssNSo3Q1UyNDFdIkZTRUQpNCBQMyNRJSZBWFUsMzhMKkMsW0o5JyY8J1pNOyhHNAorTVBDXFcxQ1IgN0JAWEFAJScgOzAgXlxMRishTDcnUUhNLDEwUFUjQF8uIlA/KCI4PytCSE4mQTxDKEIoQAorTSZRRDooUjhDKSItRTgxVkc7Mjw8JzFMOSchWD0mQTA/JyI0T0Y6RjlBU00zR0VbL0NETSJDXDhTKSkuNAorTUJBRlosK1kjNyM5JzJSRShFIl0/KCM4QjFDSSIlUURQKyMkRikzIFpNKUcrPkhCVDxZNzdPQ0hSMUQmLQorTTlSRE09ICRfIDskIF5dQE4sMVw7KEFUUCwxPFdYU0xfL0MsRilSVEYtQyhWKEFYSioyREUnQVA9KiJMSworTSsyMUc5QkJSPFI4PShCID4oMixCJ1FIRSgyOEtISj1cNyQhSUtWQzxDM0xXQ000XilZQj9FQVsmLktdIQorTTdDMFwvIV0lRTJFPCZSWDgvMzEgJjE8TSoyWEEoQlhZT0pXQkMpQyA/WkNHU0Q0TzA0Li05MkhNPVAlJgorTSA7TCBeXjhUKSFIPykyLEYqUl0+VDNYXzMkKEYnQVg7K0FANCVBNDspIjBRKCc1PChSIEYpQjU/P0ksSAorTScxTDwnQiA9KDE8OyY0XiwzQjUpNiw3QVIyVTFWLVM4SjU4VD06WSUpJkhGQzI+RiZGXS0pVFlAM0FIMgorTStBRFApJCBdKzFRLCVSKFEtUzhPKlJMX0o5Pyo9Vy5NNlRHOlRcRSQuUVk6K0JNMTFQJFsgPFwgSk0wSgorTSghKDgnQVA/J0JBPlQjNFAvQ0xGJ0FYOypBMDAkQSg7KSIwUSc3KTknUVBDKUI5QUApLEUmUCw6U0FQOQorTScxLDcmRSoqMkFZITcsKzFNUVEjU01XNkckKEM7SzEgJ0ZMS0NCLk0nRkEmJ1QhLzBAVCAlUDxEJlMwTworTSlBRSklIVRMLEMkSSlCQF5NKV8vQDdOUjdVKz9UXEEgLkIlPywiVSktICRPIDw4IF5eJFIpMTg5J1FUQAorTSdCPUVXUzxQMSQoTSkyNEIsIUQ1JVFIQipSTFYpN1lBKSIkSytSPT0/KUhPJ1FEPygiKD8oUUA8JzUyLworTTNRXF01XCMzTyItKVU+S0pJVEhcPVwtKyg2UFBGUkZYKiZFJCZTPSYvUSApKEBYSSZTJEgpIUUpJSFMSQorTStSWEQoUjhdT0svRkRYWyE6NVtOWS09JS4yLUEqUkUnLSAkVCA9KCBeXUEmKUJBIjE1XE8sUkEjU1RBMgorTTFEJD8oIkRKJVFMPychODknQiREQEwtOikhXEMqIV1DOig1JichXDwoMVxEKTQ+KUQ6QFErWDUgOStLPgorTVQ7XlNVXU80TVU4RD46QTYnUU4oLTIqND4zRFwxNThDLilaMDw0SE0vUjBCJVFYREpTLFMvQzROKUJIUworTUspPyM9Vlo/Oyc3NlMpXlIqIlhQKiY4XjIwJFsgPTQgXlwwXighXFcuRTBGKiFdIFNTXSMuM0w8KCJESgorTSRRNDkmISw5J0IkSEIsQT4oQUxAKiIpQzlINSgnMVQ8JzFMQChERi5FWyBRKldYWDlLOzZVLC5RVD1PPAorTU01IEQ+KlUzJyFSKi4xWjk+MyRULTQ0Lyc2MS4uIUwyKjEkNyRRQEFKIlhOLjJYSCgyPFFNSV8mQDcyOworTTpHTzdTSV5SKTJIUSlGOFQtUCRQIDxMIF5dMSUoUiRXLjUsRiohXShXRC0jLyQgRCozKFMmMUg+JzFMQAorTSkyQFBEPT1KKVIkSCwyMT44SEkwKCFcQykyJEYqRF4xRyswViwnXFQ5K088VStWS1UuU1JOM1w1PVtJPQorTSdBVjAxMi5FQEJcUiszSCgpNkkxLiFAOitRMDcmIUxBSiJMTC1CUEMnQjRTUCsrPkRYNk07KCtEWFsiWworTSlSXFQoJVxMLEAkUCA9LCBeXiktLyJUXSpCOEcmIUxPVjRJLDBVIEcoMVxEJiIgPykyIEIpIihGOC0pUQorTSgiIEUoQjVCOFFGWCdCOEAjQUFHJklKV0xaXFMoMV0lMkw/QlYlNTxWLV87UFRUSy0lJUcnViw/KFIyKAorTS1VVSwzMj44OUJQPiYxVFNAJ0Q+KCNRI1RDIFQwI0RSKjJQV0pLVzZAVzMvNVIuJVFTLVIuUypPRCQ1SAorTTJAJFQgOkQgXlxFKyxRWFAnUUw9JDEsR1U0IF0tREg+JyIsQyUhUD0oQiBCKSIoSjlNLU8nMVRFKSI9PworTTdBPlwnQiA8I0ExQydKIl9OKyhUJ1E8WjQsLzdVVV1AVS1fPU8kJEQtRS1HJzY8QCdRVicsJFBdMiBNQworTS1BICwkITg5NVUoLygjMSFUQkRNLiJYSikiRFVMLC84QlgjIDNBVVZRUyFMLSMiU0VUMT0uICRLIDlUIAorTV5dNScpUTBQJ0FIRCYhRE5ZJDxdLURcSioyVE8mQihCKkI8SSpSRFQ5PiIhKTI0TCpCTT82MVMoKTIsQgorTSUxRUgqKl8hUSwgVShRTFczPEdEWUY1SFhfK1NRM1BFL0VFTCg3JEspMVozLDQkWS8gOUYuMUA7J0FcOworTTVVKC8pMlkjVlJITi1CTEYoMkxaT107TUdINzgwIllWVUNBTy0zNltEJCU6LFAkTyA6MCBeXURaKiFcOQorTSVBWEMnMThMUVU5LzNFJEUoRCBLMyhUTSgxXEQpIiREQS0tWydCIEQpMj1DNzIyLScxVEJBWUkwJypaIQorTUotMFIoUi0kLjtPNFQ0PFZRTVM9UkREQSoiXF0lUUg+J0ItUDE2PTMwQyokJzFMNiYhWD0lRCQ+JyRNKQorTVQyNFMuQ0hbKzMkPjxKNzA+VjcsLVJAVU8ySSUsMyYrPzhFTy9AJSkgPDwgQUwkVSghKDckUCw3XEBYRAorTVEkUSAwNExCJ1QkTDM4XE0nUVxEKSIkSEJNMVkmUVREKVJFQDYiKjEnMTw+QylNMCgrKiNJPFxQKDFMWQorTS9bXzNVRFxYUD1DP1BTVDoqQyRdJTFIPichVVIvRT0lMEE5NiMhMC4kISQ2IUJMNSckLSdUMVxNLFMoVQorTSoiWDw+Wlc0QTZWVioxWEVPUkBfKjMmNUEoSUYrMCUhIDtUIF5cOFInISw7JFE4PCchKEpUJS0gMDUgTAorTSpUUFc2KTxUKSI4SypSQFJCPiYrKFI0SysyVUA0Uj47KSFIQ0YqOTcrK1ohS11IUikxXFYvTEdCWFUkXAorTVMuP1VTI0A7LEM9IiYyJEUoIiFaLyQ8Wy4xTUklMSwyJUEwNyJDJDkpM10pVUIgTiwyWFApMyBBQlwnSQorTUYnJyslUjg/UVJVJCszQj9BOFVGKkAlJSA8MCBeXiBDJiFIQSkjIFsqQzE5U1Q1KjglMEYmIiRfSyxIXAorTSlBWEInQihFQS0iMChSKEEpIklCOVIqOTRZUjhMKTBFKTRCL1U9QE0oQjklMDsrK1clMFU4KVc4UyRUQgorTTYkVDUoMiQ8J1FdLDQmMTYsIlYhNVNRTjVVXDI/WSwjKURRK1QyJE4xU0xXKyFUOTsqKyw9JjcyLiJcXQorTUdCSF0sQzolPFdZQy0wJSAgO1QgXlwsPCQxIDomUkBQKSJVMVMjTFs0VFhIJTIhJUxcXF4oQUxCJ0IoSQorTUJNJi4oIVxBKUJRPzhCIkI2KVo8TVk4QyhEQjJUTSxOKCFYWjArMytXRUhTNjlDN1E0JDs2RFw1J1FcOgorTScxVS0yNS0oJzJOMjZDVVU4Nig4QDkkJio0MSpUQVhNMEM0USlRSDc9Sk80QCZeXSpCNFBIIkBXKiNCNAorTT43VTsqMCRaIDs8IF5dSEUmIiRBJlIoTSkyWTVVRChbNFUsUCgyUS5PXVEmKiIsSSkyRFNCPVpAKiI8SAorTSsjIT83MjZQOTo6RlBZWEgqRT40V04oTykiKFcvO1M6WEU0VTgqL01TQ1A8OEU0OihSJDwnUV04MiQ5IQorTSlTVks9RUo4QTgwS0VKPDQtVCkpVTFQTC9TIEwpIVA8QiwnSkU3PzUmIlBDSSJQXCtUIkBASEU/KUAkWworTSA7UCBeXUBRKUIwTS1EWEAqQyBcJiQpKjY1OEErMiQ+QEw1LSohVEMoUiRCQS0iNChSKEMoUj1POkIuJQorTUk7MlBNSixLKUM2SlQtUFAoQiklNEYnKj5XWV06WkM+VSVIQSghXEEnUVxBKDFIVzBVXUc1MFA/KVE8PworTSdROEImIjxCQlRNKVNTJSwnMkknLFQ/OTpaKys9RkcvLiJQXENSNFQqU01bP1gxKiwgJEYgOlggXltQSgorTSdRVEIqRDA6KSJIViYjRFsyRSBDKyFYREJcUS4pQUxDKFIkRkJNJjIoIVxDKTJFTjkyJjFLO05ZTlosRQorTShTQlBULUxRKCFIWjNFWyc+N1VbOTovQVM0WDooQVxBJzFQPidRTFcuVF07M0AsNCgwSDQlUFQ6IlFAOgorTUJEKShUIlkuJyI1IStELzY+Kk8zQScyWytCNFFEIjhQKFNeK0FILSQpMCRDIDpQIF5cUEklIUxCKTNQMworTSkyTFknU1RbMkUsSy4iSEtFXUE5KkIgSipCQFBCPVpEKiI8SipSXU04IjpEUCw/JVIqSEgpNDpXV15IVAorTSkhWFcxRjszPldJVToqW1NWJEQ5KiI4RigxUEAoMVkmMDQ9NjMgVEssQTRBKVFEQSYiOEBFRDEnVDJRLAorTSYyIFwqNEM+QjwnSUYnXzcnIlBGRDJEVio0PjtEOSUpKEAkQyA6WCBeXjhTNiMsUy8zRDEpUl09VDQgXAorTTEmQEUpUVxALTw9OydRVEApQihHQl0iQikhXEMpMllFOjImIUxHOUJWSihFKCJWTlEtSFQoQjEgMTsuXgorTVhXOTw4WlM0VTUoQSgyMEEnQVg/KCFQSDMmTUU3Mz1PRSNEPyZBOFo0NThISEVZJlRDIFgtI0hcLStPPQorTT1KTys9Vj8zL1IsXzoiNE4pVDFMPUgtKysgJFggOVAgXlxYSzIyTFYwI0wzKzMtQVRDRFAtVjBCKSFcQgorTS8sTTsnUVhAKUIkSENNJkIpIVxDKTMhRzoxVixMR1FHVUokRigjLlRSLVBVKCFQVTE7Ll9ZJkkzNzpPOgorTVQkNDonUig/JyFQPSdBSEcxRiE7MzJBPTtCKDAjMEQ5KVMwQUk1NSVUUlRaLVM0USwrSzg/WyMsQUcnIAorTSxRTFU5QjxMKCQ5WT84KSQpMCRVIDlQIF5dVEcuUjxWMENcOysiVTlVM0BNLkZETCtCOEYvPT1MKUIkRworTStSVFVDTVpTKjIwSCpDQUU4Qio5UFgtSVk6VEkpM0JdVS4wWCkiIFIvTCssW1clJzdLR0lZNDQ4KSI4QworTSgiIEEoQVhVMlU1MTFSQUA8QiwwIzBIOysjRD9JVUUiVUJMWC0zKFAqLDtHRTxHRUdHTzcoIiRPOEI0UQorTSg0WihCKSUrKFAkVSA6JCBeXSA5J1FENy1TNE0mUlYgUSRJJy1TREMnQjA/JytZUCkxVEAqQihCQSxSTgorTSkhXEgqUlFFOUIpQTcoLilXKjRLKDIuQE1dXE0oMVxeMFpaUFknOUE3SkcuVVRQSShCJEEnQVg/KCFQQQorTTNFTUw2RFhfM0YtTz8pSSlCVVUrRFVVMFUzPFIyM0RdLFtDOjsqRyk7Rj8wLFI9LjFSOFQrVElBOSglJAorTSpQJF8gOkggXlwsPCZRTEUwVChaK0QqL1E0MF4rU0RCJlIwQSksLVApIVRAKkIkQ0FcVk4pIVxIKlJZRworTTlBWUw3OEovViowTCgySkZOTiBOJ1E8UzBaWlBZNkE2NVo7NVRDXEIoIVw/JyFQPSdBSEMyVSlFM1QsUQorTSwyPEotRSQ1N1NVIUUlMS9VQyhRMlMoUitbPzU8Ok8pPEZaXSlRXSAvUixMKSRBSjpYJF0pICRcIDpMIAorTV5cMD4oUTw/L0NETShSKUlRREUgLTQgTikyTEUoLEIjLEIwRyxSVFBBXUpfKjIwTSwjOUU3Ui1WOkhSLAorTVlbIE8pQk5NUi5MUShRTFAvK15fXEZZKTVLK0FZU1xAKTIsQygiIEEoQVhLMjQ5OjEjREosQyBUL1VMOAorTTk0JFlFNUEsVjMgUDIzIFEpXC9EP0wjPEFHPzQlIjRXLjIkUCg0UVg9SSkmKFAkXiA7OCBRXEhXLFMhMAorTTBRPS0vNEpBUzRdIC1EID0nQiBBMiwuKScxVEAoUixEPixGVyhSIEIpIjBdOSFZRTY6NjRWOlBPKEFOQworTUctPE4oUkEnL0pWNldWTTYzWjcvVURISSkyMEMhMiJPJVRdLEQ4TTEzJSlfM0NAUzU3TykySE00MUw0VworTSspSSYwU05TViZSV1M4Ti9WRTBIMyNBSjAzTSpIRUInLlJYITIgJkQgLD8kMiQpIDhVMEk3VFk6Sz0lJworTS0ySF4nMUxAKFRfJ0IxVD0oIixCKTdPKk1SLEAoQjBGL1YwOjwlRktGPTZLLCIoQko5XzgrQiRALyNaTQorTUVNXT0yND5AVS0kXShCLEIoMDQ+S1FNMDE4SikzVD0oPkQ8Tik1NVpQM1opMlQ3JiwiRjkvQ0BXTE0tUgorTU9NKi9FPD0oKCQoUzozVFQzKkU4QSM0SCA0NCFJICMnT1NYVitUUFkjI1hTLylDOTJTME0wUjhFKVI9LgorTVQ5UEYoQjxMK0MpW1VcQEgpMjxJK0NVPSdXTUhMSU9ETVMsRyg6Wk1ZMyxFKSNEWVAqP044U0EjSl4nRgorTS8yIEgpQjQlKEpcQzQzUihCVERbMCdBJiohUSw+PDxZQlRdIlIyXElGI1BXK1tbQj1cRz9GOUs+LTI4WgorTStGQSItNSpVNzkgWigwJSMgOkQgXlxcUjVXSEwqUyxZLzUzJVREMS82NEhHKUFYSDVMVjgoQVRAKTIsQworTS9cQlsoUiA/KDI8Sy9RWTY7KCo6VkpcSSdBWkFAXTBZKDI5MjJKRiJWKE02OzlDKVVEKFcpQjRAKDIgQAorTSdSJDwxNTsgWFY9NDZYIlJbJjVQQl1BJENFPSZSQyBQQ0NcWC5LRzpOKlJPSyg7NzAiRFE9OSorPldNOgorTTkpME0xUCUkIDZMIF5cQSU7WFxfKyNJJC0kKyJWI00gMjQoRChRWEo3LSI4KFFYQCkyKEQxPEJbKFIgPworTSgyPEkvUUk/O1hCP1Y6WEonQjZJQV00WSdSIScyKlIiVidVKDhJMy5VIzxQKSIsPidRWD4nMVw9MFUiWQorTVY1OSIyNzpJVzUpQUBNLF9EJFklUlJESkIjMFAtS0M2UDtGV0woVyQsMiRLPilCKz5YJUA3OSBKMFAlJAorTSA2TCBeXDhOMyc0SCgjJFcqI18qWVNMXDJUOE4rMjxQOF1aSSlCJEcrQlhRMS0/LCoiNEQpQlhLLkFdTworTT9ZJkRaK0hNKFIyT0ReKF4oUi0kMStSM1lYLFc3WVM6WUM4TioiPEIoUihCKDIsSDFVJyBaRVRdMEdWVQorTVlVMUFDLiBcQ0UhIlNCQEtCMyxOK0wzRlQ9LzdTKUc5KFI0Rj4pVjBAKEFHNyk0SC1QJFsgNjggXlxcSQorTS1TSitCSl0rTzlDLFQkXSs3VCxBKSI0UDdcLj0pQVRCKkIsQEAsQyEoMVxDKUI8SCkxWUA+Vyo/VCtYSworTShCOkc6PVhVKTI1QDRaNURXKSk4OklaOFVEWFwqIjBBKEIgQCdCIDgtLE5YVFYwUzRXNi5URVVVPC0tMgorTUJWQSJQMlRRRkQsXy1KSltFSUoyRVdLNzAyTFc9SzxWKTVFX0JZLVI0UCU6IDhQIF5dTEorQ1leMFdMTAorTUJFQyJWRDheNENQQyhSMFQ5TEI9KFFMPypCMEVBXE8hKDFcQylCLEQoMUlDQCc+QVRbXEwoIkJWOz1YVQorTShSKTUxWk1HVlhFKjdZTjhWVCxRKUIoPyghWD4nIVgwK0w2VFRVNEkxVlouUzUlTjs8WSdCVV0hUDI4SgorTUQzQForKk5ZSEpCPkk4SygrQixVPywsVShVWiVCKF1RNFAlOiA4RCBeXVhNLCNBXzlKLSVKR08zWyRIXgorTTRTVEsrUyBePE0+TCpSIEcsUlxRQj1XMilCMEgqUkBJKUFdU0MnSkdYPEhPKTJTJD0+PFopUjEyMStJVQorTVo5NSA3Ki4/WiQsTipCOEMpIihCKCIoNyo8SlxXJSRBMCZSN1ckWUw9XVUkQUYkXlFCPEtEUzxXKUtDLQorTU1cMltQOU80K0IkWUM9SSEpViIkQikxUDJAJTUgODwgXl1eQFQ9KTEsU0xIPjkzJFUlPSQ4JiRAKCIwTworTTwsIlUpQVREKlI0S0A8PyMqMiQ+KTI4OSghTSFBNU5BUkxETSkyPkg0TUxXKTFZLjJJTS5VWkk4N1U9WgorTVRFSFsoQixBKEIgQSkhXEErJFo6UzYoXTRWNiZXJUE7Ny0hKEBWQS1WMzRVRlRBJS9KQk5CR1YsRScrLworTS9CPiA/PDRdJ0IpOzs3IV0+QCVJIDYkIF5bTS45KVEoJjMgTj84RyhWRFxXNFVIQidSLFM9XDZVKFFMQQorTSpSOFBCLEsjKjIkPikyKDUnIT0kQkYiQ1M8SE4oUkZXNU1MVyhRTSMvSiUxVUolLTVVPVpVVFxQKCIkPworTSghWD8oQVRDLDRaPlNVLFMxVVomVVRRNDY8TF1AVV0sVjJYTkRDVSAtKkZMRDhCNEdXXyMsUjlfQDxMXAorTSVBXT47VyVePyAlSyA2ICBeXkIoSUw9PC00PFVCOUs0WzUsVzUlTEoqUlxdQF0zJCpSIEktIyRcQk1TNAorTStCOEMqQjw6KDFRNEVGLklWXTRRKiJXJTdOMFwpUVUgLlshP1kqVSI0VVohWSRcTSkiNEMpIihDKUIkSworTSxVVkhVVFxLMCVSL1lERTI4XUhaP0YlKVdCXE9FI1BdK0s7IEpKKkpOOFsqLCIuLURdWSonIiU8OlcxXworTT1QJUcgNVQgXl05SVYtVS0rIykgOVdWWlMkSSAxJVA/KVJARj9MNlYpQVxAKTFcRT47VyEpIiBBJzFMNQorTSVBSFJFRDo+UyxMTChSUkcyPURVKSFMUTQ5JSFVKy0xODkmKVVVJSYpMjRDKSJOTCgyOTU6V004VCY4XworTTYmLVRXVTE4Nj0xMkRXTSlRI0hSSDNdIC0pVjw9VVRVPlYjKDAyWTouMkhWKFNBVjxJNUM8MCUzIDRcIAorTV5cNShNPikoKEI4VTxYVl9UJDBTLVU0QSlCPEpBPEpWKFFUPSkyIEpALCMhKSIgQScxPDEkQThVRlROQAorTVNcUE0oMlpWMz1EVShBQEYxOT0kVFpRKDZZLilXJDhbKFIsQShCRkonUjFAPlg9Q1RFPFUzJVFUVkRBMQorTTVMXSdEVykoUSMsS0YjMFsqSVo6PzYwW0EmQl8vUy07LyJQVCczPVg7OTlGPTAlNiA1NCBeXjlOVy9NNQorTSoyRFU+STcrWSQ8Uy4lOEksQyxURD1HJSpSKEUrQkxWQE0rMioyNEYoQVA2JVFNJUlUWkZXPTxQKUMrJAorTTU+KFopQUhDMEo5Mlg7PFw1SUYwWjQ4WClSPEUpQlZOKFJBTUBZWVBWRSxNMTVJXVo0NS84LVkkQ0cxJQorTVIzMExGQyxYKSpOTkNHISJER08rMDNBRi9CSFYoIzlUOklFSDwgKTQgL082MV0rNzRSNEYwRjVXTlw1IQorTS9FJS4qIVxIKig7JFBCNEAoMjBEKVYvJU9COEAnUiwzJEE0NyhKIFpLLC8wK1IwUkkjTzovUjA/LDRaNworTSktIl40Ni4rRS1FOzJSLEUpVTFENDIoSSkkMTxBXS1KNzVNQDpdWTI4NCcyNCcxTzJZUFssSk0kLVNaMQorTUg1STE4VilHTixCXDdaJEkuUiYoOkVVTz1VOCEyUCUpIC9POzQ9Py40QyRILlZaJU8sRF8sNDEnKkFYRworTStIVylQQig+J0IwRis2RyhPQjhAJ1IsLyQhJDMpSjUhTCw/MStSKFRMU185LzIoOylELjwqLSZZMiVWMAorTUUtWTAwIiRDKTUpQjNRWEcpRD04QD0hQDVEXTo6XUUmNlNbLzFHLUgySUhWKyooWSxDMjJHVV03OjZJSworTUxMUl84OiRDLVIyLjslNVA/JUQiNDAjW1olT0RYRVhUKyQxWkNMRz0wMyUkMiMgSixTPjhWLSxKKFI4TQorTStDOU5WTFxLKTIwSCUhMDYmIyJSMFtLM1cjMEcuK10pWTQoRigiLSJKIzM+UUNRNkU5T0s0I1RGKVJFNgorTTlVLEMqUkknOVgzODYkVSg1NzNGMFUxJlZUIVA6ND4+LSJWRi1CXE5HWyVLNyZBTj88LzZUNzpKKSNcRgorTUJWPTE8N1k3IDUgITRQI1tSRS8yUlYkUS5UJVs7SlckMzRROi9STEUpMjIjTktURSdSKEMoMV01S0tMQworTSdRVEMoUVBBKlIiQTwqPlxUMlRBLFkxJVY0QEcoIjxUQSMrMVAmKTVDOVMwODQ4SytKPFY/KURFKCFMSgorTStBXyo5NVk8N1ZDODNVMFRRRFUmOERVLyxTIkwzNDRbNCw2LkBKOUMvRChHKiooRyo0RVlGNkFYP0hVXworTSA0KCE0ICNbVFVDMlQmIEosU0IiPTsrLDFDVSstQkBFKkJKK1A8IEUnUihDKDIxO0xcIEUnUVRDJjFQOQorTSgyMkY+Wk8hVFJUPy06MSlWJDBDJyFYT0EzSzROJTEpQ1lTNDUzTEcqSjRWPlkoPSchVE0rQU8lODU9MAorTTZWQzMwVExSUUQlJzg0QSssMlZEMTQgUTRMMi0/WVU9LVNURyoqPEUoJD4kSSZRVD1IQiIgNDQhNTAjWworTVhWP0FZNlBRLjNSKz9LW0AzM00pLkMgTCtSXi9TPShOKSJESioiPURQTFBNKUIwSihSLEAqIV5dPlwjJgorTVZTMEQvOkk1WVRISShCIE1CJCNCUjRNJEU6L0Y3I0hNLCpIW0FZTEEoQixLLVIjMDVUTSk0Vlc+MCNcVAorTVMzUSo4JC0wKzJWSjAzTEk2TSIqP1ldNitDTE4sOzBKKCRSJ0k2PUw4WDoiIDQ8ITZAI1tPRVMsUkZEUQorTS9UNTo4OVslO0U1SDNCQEYoMk1ATUtcQidRXEYoUjReJytMQicxTEQnUTxCKjFKTjlaOk5UUlxALTddQAorTVMmLEcoMj0kMDo/J1IlQUVCKUctPyUoRSlaNio/OThGKTctOk87KlY3VUlANSZTPDZUWiRUVEhfNyQ4TQorTSZCPl0zRE0jQV0xVzhVNT08IlxCKSRITidJPj5ANlVaQyYpKyA0RCEzQCNbUiYrL1RGSE0uI1VAOVorKworTTlEMTcwQjRGKUMlSE88KEInUVxGKFI9IigrXEInMUxEJVFMOylCJlI8SkZTVTJcPi1YXURSVVxDJzFYXworTTBKXypQJEk5QklHMTwkPEMpOjYsP0kkQChHMTxPOy5ONTRRLjNGUzczVDYiVFNYXjYzXEcmIjJVMUQ4WQorTUI9LUkzM1ElNyIkPyk0NEcmSV5FQVZdVjolJTogNFAhM0AjW1YnJz1ZRzxVL1QtRztKUz47NC02MVJUTQorTSpTOUxSPTBLKSI4TSpCVSoqTExLKSIoSykyLEIrQiMuPFwuWFczOEMvWTVQVkY0SShSIF0xOzc4VDQlNAorTUQqI0M9VDhIKkpSNEJZUEUqR106USs6XDM0KSkxVydCMyNGJFZDRF01U1RIJSIyWzBEJFFEPV03LVI8UAorTTIhPD0pRSBQJ1o2UENGVU41REEwIDRQITRQI1tOVi8mUiZcQS80RT03NDZfOCQ9UjFCPEQpIVVHSkwkQgorTSchUEMpIkg8J1wkRCdCIEEnIUhDKzE+STk6VkRVMlxBKUYpVFQmSEYpIjElLio/MFMmLTU/KC8gQ1UsSgorTSoqLjo9KTxNKDk1LFArIk05ViE0NFRXNjhFQiRTNFhFLUVATjBCTyA1Q1EjPFxZMDNWUTY8UjhFKDVQTgorTU9JIiM0NCldNjY5MCA0PCE0MCNbUiZTLVRHKEEuNClDOEQ/JDcjUUYwIjxEKjItT0w8MEInIVBDKSJIPAorTSdcIEQnQiBBJzIkNikxVk08KyJIVVJcPyonKVhTVjhCKCFNIC46XzNRJTUpP0gvJEBUQEgqKjI9PVk4SQorTShZKSlPWyJHODU9JjNUVzE1RF4iUzQoQyw0XEcwIkJYM0M8WT08VSMuVTBfOEFQRSg1QEpQST4oNFQpWworTTJWITwgNFghNlAjW1VXSzlZOCBKMDRFSjlUXzM4M0VDMFJYSytCQVNPPThLKDIsSipTLEEpLFBNKTI8SAorTSoiKDYqMVMqPFxSUFdTOEQsJ0IkV0ZQSClBVF4vKzdBVTRRJEEoSzZCRDxMK1peS0FaKE8qWkkxUlteWAorTTYkTF8xVSs8NFQuJFUjVD0rVFxGLkJCXjJDKFE/PURUKVQkUTgyLE4qJiBSUkoqKjNTVVMuRiU5IDUgIQorTThQI1tNVTMiUTcwQytELT4qUVskQEYqOzkiOEcoMiU1RCtcQCcxVEQqIjQ8MitcRCciMEYnRi0xN1FeRworTTgqSipUIlxBKCRBRVM4IEYnQikmLVo/IVM1QTU9JTJUQlVURSlZRj9BSVg/KUJNKUgqOTg1VTk0NiNbPAorTTU1OUtQVERXJjUlMjIyVlkyIzhePFxcSilWKFAoMVQ9KTVBQ1MqMTMvOSFGOydaISA2UCFEUCNbUUVXKAorTVNXPEMqU11DKzFbKUBWIjc4UjhHKTI5PUVcKEAnMVREKiI0PjM8IEQnIjBGJTVARCwhUks6SlYvVDJcPworTShFOUpTJ1RCJkFEXy4qXyZRVFUrPUUyWUBVKEMpWVZEQllUPClCOSlISk06NiUlKDUjXzkyNFFJUFNUUQorTSREQSsxUkpRMCMkVj08WEUoNThEJzIgQilVRUVUOkEzL0khQT4oQiYgNywhSEAjW1RGRzdYSDRMLFQ1SAorTSwyNzZBRUovOEJMTisyTUFIXTBJKEIwSytSWEIzXExNKFJMTSg1NEAtUVsnPEw+NFcjQEQqRVVWVlg0SAorTSghRF4uOzczViQtJT9FRyhCNFxFKypGU0ZKTEQrMyUiR0pVQjMkNSEzJCtFMUQpS1JDQEokNEEpMDJKVworTS8iUFA+XUhDJyUsSShCKEQoRUlNVzspLCxIRT48OSoyIDdYIUtAI1tOVEouUChATC5UNEEnQlpQQFQxVgorTT4iSEUnUVkyLFtcRiZRWEkoMixBPltARCcyLEQqNV04OVFSQzI6NUxTIzRDKFM4TjcoTEQnUi0oLyk6UAorTVM1ST4yUjxeP1RcPigpNl5FWjxIKTNZMjVJUFYqVUE9NyhTODgkTUFORDRXMjRdLTQiUlE0Q1hXMUwoQgorTSc7IEUoUiQ5Kjo7JlRLNSc8RTEjVF0zMSA9QCFXUCNbUVUmMlI4QEktM1RBJ1JSVkBUKVI8MkhGKCIhOQorTS48KEgmUVhJKDIsSUI7VEQnMixEKEYoSS8hWkg0SklRUyM0QSgjQFQ2WExEJjFJIC5JTllSNSEwMVIlJQorTT5UKDsnOUMlRko8SChTUTA1KVhaKlUlLzQ4RzQ0JCVATlNESzA0QSgzQkZJMjNAVTI8KEAmSlRDJzFMNgorTSoqUytVSz0nPUVAXlVdUzkgPiAhWVAjW1MlUkZYOURRLiQwRigiWl9CI1FGO1JcUSpSMTswTSBQKEI0UAorTSoiSE9ELERLKEJASSpVQEAvIVJdOEs9VFczWEMqI1hbOVkwSydBSFwvKj8nVlRBKTNSKTBANCg9KVo7MQorTUpLOFEpUzksNio4VShEQSY0KD9DNEM9P09DOEgvVDklMiJGTTIzJFEyXExFKEtESCghUDYpOy84WEtNIgorTTwlKFlYXl9MID8sIV5QI1tNMz1JTTg8RjAjOD4uSFpAOyMxOD0iIEIoMVw+JSwkRiYhTEIqIjhCP0tMRAorTScyIEgoRVlTOTEySCwpPTpTM0xCJzJITDxJREYoQj0xMkhWQlJGMUAqUiEmOVMgRis5NyJARkhCKTM9NgorTS5ILEAlVUUzNFhbMDRUTEQtI00sMyU1MzJCQlUyQ0xeMjhUPyoiXF0yJjYnRj07IzMmTUY0RC0wSz07NworTSA9UCFXMCNbTlNNTE9ISEYvMlw9LlkiRToiPSg5IVRDKEIkQyYsKEYmIUxCKiI4SkMsIEQnMiBIKEYxRQorTTZBRk0uOVU/UzNMQCYyTE47WURGJyFZJzFZJklSJUksJ0FNLDdSMEIqOT8oQTZIQihTKTEtWCQ/JTUlJworTTIoTywwVCRDLTJdIDEkWS4yIjZNMDMsWTJYTD0qIlxdMUY2KUc9Uyg0JlVHNSQ5MkxNVz4gPiwhWSAjWworTVEkNVpVKUhNL1M4PC8pMlE8Ij0iOUI0TisyNEUoLFxNJ1IoSStSVFBEXFBLKEI0TSpVXT42QU8iMVo5QQorTVdEMEInQlhSPVooTSgxWSExWU5VVkUpJCdROTM5MkRKLipTOUVXREspUl0uLVg4PCNUTSAxWEc7MTM8QgorTS4iUF0wRFErMEI2UTAyXFYyOSBBK1NBIjImSjFKPk81NkctSDNTWS5RX0NZID9YIV8wIkJMUjg5RCksSAorTS9TLS0xSCopQiNJPD8yOEEpIUA3JEtcRCcxSEApIjw/PEtYQSZQLEFVRVlKOEFSQyhZKFZTNUBDKTJZVQorTTAqIEMoMikwMTg1KVRFOTgrVEFSKyNYRSpIWktEWjhDKSQhNydVJEUyJUErNiZfKTIzVSk6UzEiMiY1MworTS8hXkIzU0xXLTUiRFM9Qz1UOkVeNyxXN1FcSy0wVl82VV1XPiA9WCFYICNbTEIsO0ZJQEowIyUrMihCLAorTUBSSSU7MixCKTFIPCUrXEInMUhAKSI8R0AsLEEmUiRBKSYhTDhRWkgrOUBbUzVAQShTLVsxKihDJlFFJAorTS9IPS1TRFEoKjQ5WCgzKEMpWSZRRUo4QyhDRTAmRFhAMFUhITQmUyUuMy0oOyJAVjAlWS4uQVI6MUJcUAorTS0kSkRTTUM+VSpWJDktKztSXE8vMEcnO1dOM0UgPjQhWVAiQlAiTEFLOjxQMDM5JTEpJjpDQlEkPDJMTQorTSwhWD4mTEBHKEIkRypSWE1BXFxIKCAsRlUlUUc5IipdLVlUXVdGJEMqIzogMypISighRF0vOF05WCQxIAorTStESiEoMzRILDonIEorNEwpQz0uJiRYPjAkUFszRks0LlJFJztSNFMvRVErLSFSPjFCUE4sNE5LVl5HSworTVhLXjU9Xj9NVF07My9WX0peMDNfIC9ONydRMU5CUiBaL1Q1JT8nWkAyJTVAKVIoQSghNT1QIjw+JiIgSworTSkyIVBNQig8J0JERTk2PUcnOjhNPlE7LDlSPEQwJi0oSFJQPSxUVFE9QVsuNiUtWzVBWToxIVBIRDoiRgorTUtCLEQvNiBJKFkxMzInKTQ8WjEzLkZUWy0jNSo3VEhfLCZVJy8jWSwtRlopTUVTMjYiTEFUTExYMERJWworTVNNL0FXXiAhV1AnPSAvTjEmUTFbRSIgWy9UJSlAWCZALyQhMilSJEIpMUlCT1I0PCYiIEspMkFcTlIoPAorTSdCREg4Rk1EJzpYVEBBUys5QjRIMkclL0kiUDcqRCxKPUIjKTM0QVw2IiEvLyFIRkRKPkpLQixCLUVAQgorTSdIVSwwNj0pPCotIywmSFgqIkUiNiQ0XSs2NSAsMz0qLDcqK042KyozQiQ7VSxcXjFEVVxTXUdJWU48IQorTVlAJ0QgL0JCKFFGLEkiNF4xIz0kQ0heSS9TWTgrQlRNKkFRR1JSSEEnUjxSKyJSIVFSREEoUlhIOCY1RAorTShMKF9AUU86PEJEUDRHSTpLUyQ8KyNEST9SOzYyRDYnN0JBLC5BWEtHOypcTzJQRi01OEAnKFEqMCY5JgorTTtKXSUqJkBaKTI5IDVELFcrNkRfLCM1JitXWkBUNzc4NiJAQFo+JSUzRFVdVy9AJF9QJ10gL04tKENFPgorTTgyLFcuI1hWPlY+UC8mMTgpQjBEJkFRRlAiTD4nIjhCKTIlP0oyJD4nQjhDOSZNRSZZTDs+MTpdQVFYOgorTTFUWTZKUkRGJ0RATStCOVExJE08NSUtPDAhUEZIWTo8SSI8Qy01OE4+RkVFNjQ1OS8iOSsvVDEiKzJBLgorTTBTQSQqQlUmMCNcXyo4PkpQV18oL1I8QlVMNSE7NiZPVy4jPlctVCFXMCdBIC9OJCZDTUw6UVxZLkNAVQorTUBGUlQtNSkoKFIkQygyMVBRUkA6JjI4QykyLUpLUiQ8J0JAQzhWTUQnSkQ9PiE+XUFCID40NVE+SyJIPworTSU0JEYqQkFTLlNNNTQ0TTIuMUBDSVlWRElSKD8rVFxGO1VZPzQzNSovIk0gK1M4VidBVSYvQzRfKSI9IQorTS4jQFopSTpNVCkvJy1RXEJUXCxfOkVWUVg+N0dZPjghWSAnSCAvQjwqRCVdPlIxITBCXFJCV0ZeLURdLAorTSpSTE8rIklYVEMoQCgyXE4rQj1LTiJAQShSUEw4RilBKCtIRT1RQyRFIkBGNlY1Qk4yTEYmM0BHLCI5WworTS9TNTQzVDUsLkFYS0w6QlhNUlRFLCRYRDslVTY1Mz0gLVJUXylSXFEnIUkkLyM0XCkySF8tIzhYKUojJQorTVlaLzMvQjRJWl01IzolLlVeL1AlX1AjW0giJFk1NixBKyM0TSknJTxHIzlNNiJYQSkyJEA2WzxMJ0FQRworTShSODs0V1xAKCFIRCklTUM7Mi4+JkNIW0xZQEUoNDRbOStATCgiWTwtUURZNyNFPjckUTI0NFA9J0leIworTUYqIEMoQ00+LjchSzslVF0zI05DLDNVIStCPFgwMVg9L1JcRTAzPFstQ0oiSiwlXE9DTEgpXFJeN1NdWQorTVZNNzlYPV8+ID1QIVcwI1tHMVxdODZUPStDPEYoR0VBSCJZOzIyUD4pIkBIOTtYSSZBREcpIjg9N0g0QAorTSdBSEYpJUlDOyFWRSVTPSBNOTxCKFRRJzpbRE0mMjUsK0FUXzgjLTAzRDkoMTQwOydKMixIKiw+J0M1NworTSw2OUA5RTRNMENWSSpSQE0oQihWLyFMOi5CRD8vIlxULDM+M0s9IjNPUzA/KD0jITcjVVlYLitEWT4vRQorTSA+NCFZICNXTVMlKT1HXEItQ1xEKSdVTUsjKTYyMyRILCMsTjs8RFMoIiRQK1JcQTdYWEcoUVxKKzVFOgorTToxWlEnUz0jTzosSio1NS47PDhOKCJFMCtBNSQ7I0EpMTQlIi9EID0pOyI8TSssSSkjOTUqVVk/NzVETworTS4jRkgpIVhGJzFUUC4xRDotUkhCLkJMUitTPjxRTkJEUyNMQSlONy82Q0YgXD9MJV9QJ10gL04tJ0MpJQorTTchRFYpQlRFN1RSRyxGLTcrMjBJJ0FJW00iPD0mQixBKFIgTjQhXDwoUUhENTY9RihZLEo0Ri5GRyIwQgorTTMjLU9PMjxBKTRJJT4oSEM5JU1FMzUpRDdSKEdFSC4uRCIsQiw1OTs3VVFLTlRcWUZSNSAvQlRGQCUgWAorTSdDWSkoU0BILSJZIzA3Tj9ORlpaQjMkRFFLPTs6PSc7Vl1fPUldUCFXQCc/IC9OMShDQTE5QTRYKiI0QworTTolKkoqRSUoKlIkSCkyKiVOUjA5JVIsQihSKFk1QVw6KFFQRDUmPUUnOURLNSZOSkZSIEM0Q1VUT0JAOgorTScjWSJAKFg9NyRdNzE0OTY1MiRJRzhSNkRRWD4rJSE0NTUlRUxTXE9EUVxVK0FYQEAlKFomU0EkJzMoQworTSsiPF4vSF5GUlg7I0IiVEJUS1U3OVxTPlleQz5JPiAhWVAnRiAvTkYrQ11EPUFJICwiREU6JU5YLCRZJgorTSwiTFQsIkItUUJYPydSUE0rIjhaN1I4PyoiIE00VVlCKCpIWDZHJlRJUjhGNjQtVlJSREEoI0UgQElAQAorTTZEQS0wNC0sMzIgT0o6KkxIUkREKkRFKzJVITxNVCRJRVIoSylBSEFBNFhVJjNFISdDNEEqIjRcL0lHIQorTVkpRzNFQyxHWVw5Lzg+J1ZfT19bUF9QIl9QI1tHQUhOLzVINioxVEkmVDUhTFI9VTUjLEAqQiQ9N0pUSQorTSdBSEIpMiQ/KCMoOycyKD8oVSVGOTIqKjVUPTtGOjhGKENcRztLXEgoMjRWLkVAQDU1OTM2JVU8OSYoRQorTShYWjlBUyxAKSMlKTVWXks5IyUhMUJBJzBCQENBRTomQVdcXjVCKE0vMkxYLkQpR0YqSThJKFRKKFxfJworTTRFMT05VlFXPEdPPyA9VCFYMCNbSSFYVDJGLDIqMVRBJjRRKE1BWUQyIyw9KVJARTk7MEknITxCKUIkQQorTSojQDgmUihBKFUhRjkhWjQ3NSFGR0o0QigkME08PCBJJzFUTy8lVD4yNEkpMzUpMDU1PEQqKT5FQ1M4PQorTSgiWSM0Jj5CNzJMVC5BQFcsQiBAQiVOLkJXUFk0MVRHLiIsUi0zXVpIW01QSzkoSihcVlouM10kNFVRRworTTlHO0IgPkAhWkAjW0xSOFk1VyQ4LEI4SCc0TTFSIkFBMTNARyxTLEs7S1xSKDFcSywySEcqQ1xAKCI8RQorTSpEXT04Mi5HO0VRUEpLLEcpJERSPFxMTChSJEMuRkhDMSQtITBUXSsyVFBBKzo+Wkk0MEcpQlhcMVYuQgorTTUiWFUtMUhZKkFQQEMmPipBR1BXM0FMSi1BXE0sU14nT006I1E6JFEqTkcnLSNdMDY2IUs+WFtcIE9cIAorTV5ZKD0rQzE1JEI4QSoyIFYsKyxKNjcgRSkiMDwmJVJBKzFQNykiJEQnQURDJSFURCcyKF86NkRBQDQ4RgorTTJXXkcoMVxSK0VeXikyIEIoQ1k5M0NJOTU1UTU2VS0+KiFWLkZVPVcmUjBDL1UqR0glSS0wQ0k0MEJASAorTUZUPjE/RUM5MDUsSC0jMFYtRCEkNCg6MzEpVEYoQi8zTFdFL1guJ0JXTjM0WDArOyAvTjInIyBeNkEoQworTScyND4uUz5VKURZRCoyLDwoQVlDSiJUOiUiMEIpIVg+KkEoOSgxVEQwNkVHJ0hVMCs1NiRKIVg8LCJRPQorTU9CND4nUVRXNDQwUjNURS4yRSEoNFIsQUYqNTo+IUxCKFNFKElaIS4yU0hLMFMkPSkpVTNHKEU7VDNRLgorTShSXE8rQyBbMDVeOEhFKjwoUiRBVCpZUjItQzlWTTs5Uy40IVogJ0YgKUpDKiNBKDlBTEsoUkxCL0QvKgorTStEVUcsMlxKKlI1TExTOD8nICxNV0I0QSpROD4qMjhIL1YhQygqIUAuNV4wTTI4Ri0yWUFRUlhDKDFMVgorTTMzWE4yNCklMCQ4XjIyJElKK0FKQTIoRCojMSJMKjUpMzNAQS4iQD0qOiU4SVhFPVVTRSsoMlRNKkJMWAorTS9WTk1ORi5TK1IgRlsrTUcxXjtJWk47RlcvSCJfUCNbRTFQSCwlKDEoMVhCJyJAN0szLSw8QlBDKiIwNworTSg4JFAnQUhBKSI4PiRBPDQmQiQ/KSQ1TDlCNU4uMUxROSpQRChCXEEkVERAJ0IkQiw0QTYuNkkyOCYpOAorTTVWOEgoKFRTPzBcQSgkPSk0VVVNM0JdKTk0NFEyKlk0R1g9MTo8IFk1QkBXLEJMVjAzRTQ6NjVKKDIgQworTSk9Llc3Ulc5Vl1PPFdeK0MgPiAhV0AjW0UhREgtVTgxJ0FIPiZCTDtMUzUnPCJYQikySD0qKEBQJyE8QQorTSkyOD4lIUgwJUFYPylEPUw5IV1YMEFcWzo6VEEmUkA+JERMQCchWD0qRCEsLDYhJjRFPS0zJUxDKEk4XAorTT9AXD8nJD0kMlVdTTBCVSE0QzhIMishO0soXTg7O1RUNDIsUisyLE8vIzk7PFZZUSghVEEoXTpYNzJXPQorTVg+J0JZTjtKID5EIVkwI1VIUixPMCYgOilCIEQnQlRDUENFIjsjOE4sMyxELDksWSgxXEosIlxFJiFQNQorTSZSOEgqRDVDOCIiKjQiTSU9O0hJKUJcPCNVJEkoMiA7KjNRJis1SF8yNFUjMEUkQSpKMSpCMUBEKDUhIgorTTE2PVIvMlxfMTJQSDQ7MURPOi03OitcUjNSJFAqUiRNLkM5REBXWVwrQjRDKi8jJTVTK1kiL1wgXik0PgorTSlCNSkkUiA8JkFERiZaTEw5OFBTKjIsQiRDKSEoQVw5KDFYQSdBJDYlQSxAKEI0SjwmXEU4VDxFLSROVAorTSlSMEEpJl1AJiFIOShRWSw4Mlk8NEVZMjZFRT4rQVklPTFERShCKUFDNFEzRzRUTzElUFI2KVEwSig5WgorTTFFPVAvRThPMDMsSCokIEUmIzkkJ1IsQCgyMzBGVzkvVz4jQVkgL0IgTjggXlkkOikiTS0kUVQ4JUE8RQorTSY7IE84ODxQKiIwSCVDRSgoQVQ2KDFcQydAXDIkIFw9KEI8TDwmVD47JFhGLlUiVSkhVD0pVzVEJiFANgorTSdBPSQ1UjkyMUUhJzNUWTMpMVUsPlFEQydBUUFCNDk4R1QkTS8kWEs2SVU2TFkqIzJFTVItVFxKLyJYQAorTSgzSEImQ0klJzIkPidSKzRHNzEtV14nQlk+R0laQCtLIC9CQChCRFI1UVBFJ0FYOykhWl0sNUYiLiMwTworTSwxWSI0UkxCJ0JISipSNDQlUTQ0KTJMSypGPUknV1E6LDQxPFBCUEYoUkVcO0IkPSYhUDYwJSRCMyNdJworTS80NSQyMjxJNigwPilSLEE8KFkhNzosXCtTSSUqRiJINlwiRUNUKTM8IzkuKiNITCdCIFspIVkiNCIkRQorTShCLEZaOi1MNE83Wl5fWCVfUCNbQzFcQCgkIC4nUUw7JkI5LElDKU41MkxHKCIkMygiVDEpQUxCKTIgQworTSUhWDQkUVg+KTNBUjoyJTk0IjxPKVs4TChDJVszUFRAKVM0PislNUY1JiEtNjY5ODcmNEcpNjwxKSIkQAorTSc4UzsxRToyMFMtNyk4OkM2SVFeQlVRKS0lISc2QihfLDJMUDEiREMsS1BLKDFcQykqTU86Mlc4Vi1XQAorTVdeP0YgPjwhWSAjW0IhQDwpNCguJyE8OCZSMSxJUyFIM1I8SCkiNDUqIzwzKSFEQilCIEAkITguI1FQPgorTSkzSVI5UUlCNTI8VytLREkoIzoiNjEkQCkzKDkpNFU8MkUxITJVSS00NTw+KEZMNihBWDwlSFc4MDVONAorTS5TIS8nWEZHNkoyK0YmNSotVTEiNTFUWSsiMEcwMjxBLEtESCdCIEMpKk1QOTJHQFheQ0tZLk9KID5UIQorTVpAI1lFMiRBKkRINSkhVEAnQkEzTSMpQTJCXFMrQlw7K0NcOyoxWEssMkRIJUFQMyUiJEUqQ0FJOFFNTgorTTgzIFstXDxRKTNOKzoxVEkqQzA3KSRFNjEkXFowRS0jMURYQisnNDspQiBBJzlLQC9GIjgtMyErJkhOUQorTThaSjpJVjRcKlRdIDRBTFoqQixHMFJMRS48JEonQiRIKjtJUzcyX1ZfP19fXlAvXyA/VCBeWDg+J0FQVgorTSUxSDwnNkZFL0RASTNEVE0oUVxCJUFMOCQiKDwpIihEKUE0NCRBSEIoQjRNPDYwQTBWJEEuQUJSKkFdUworTSUxTEEnUiRFKDJJMzc2LT43NSlOOVYtRisyLD8oUjg8JjEyVFVESS5DU1FXNjZFXD0qNi1BNUEpMFM4WworTUE1JEotMkBPK1NHQCtBWjonIihKRjkzKEo9L0NWXVs+V14rQ1hAK0MgL01cJVFMOi0hLDgmQV1OSlQtKgorTSlUUSgqUiw/KEEoQCkxKD4mQjBEKEIoMSQhIDgoIiBCKlclRCZUXUQnM1g+TVI8QD0xOD0nMVBBJzFAQQorTTIlJTMzRFUiN1VFNjYiOD8mUVxEJkE8Mk1NJSQ0SSRZPCUhSD9XQktFKFE8MzQoVS5YRS8pIlxDKzIwXAorTVgyQDxGUUQ8KlomOVI6VzdZTitHWV5DSlpeSCJaUCNVQzIgPSdTRDcnIVhDPFsxMDRCRSQwUyBKKUJEOAorTShSNDYoUVhLKyI8RyVBNDQnIjBEKkJVSDcxWTY8QihYKFwwTyhXVEMpMihEKiIkOCg0PS4zNDklLkVNLworTTFUXEcpIiBEKUFYOyVbSz4xNUo3LjZdMDk3XiBPKV43OSQ8VypDMiMyMjRSKDI8Qy5OMEsoOjhBJ1JaQworTUctOllYP0NbIT9eIV9AJ18gP1ggXlc4PCYxNEolQUA6MkJETC9EKEMzNiRFKSFcRSUhODUkUTA5J1IwPworTShBLDgoIjBBKDIoRjwmSEEuVVg6MTFFPCdSIDYnQihEJyFMPypELS83NUUxNzZVOThFXUEvIjw/J1dQRAorTSYxRjZJJEktQkQ7PVg5QTdIWVVUMUQpJi1UKjUtM1xeJlNAXS1ETzUrMUBQKTE8PTknJydLXU81Vj1XPgorTVdeK0NYQCdCID4sIF5WUDUlQSxIJSE4ODQiXE4vJCBAMjVMQykhXEUkITw6JDEoNydSOD8oISQ2KCIwQQorTSgxXEQ8Jkg7MVYkNjExSUIpIVwyJkFcPiYxTDcoQ00lNDRNIzNVXSw1NTE3LUIsOyZXREElUT44R1Q1MgorTUJEKzVWSF00SypFWzMkMSctVCo1LTNUWCUzLFsqVFs1KUE8UCgxLEA6RzswTi4zPlhOO0daLktLWkAnSgorTSA+TCBMV1Q+JiFATSYhSDw2M0BUMDQ0QjA1OEgqUjhMJUFIPCUxODspQlhGKTE4OykyREYpQjxGOVYsPgorTTNGXDswIU1HKUFYNyhALEFPUig7KCNEXzJEKFoxRThfMiRFLS1SQEAoKCRJJyFOPktELTdENENDWTklPAorTU8rUV0yM1xZK0NGLitDPFkmIyRVKkUjPCkxOFcpUUA+OVdHQFNPU1hfIDdfQD9YIV9AJ18gKV1HJ1EwNgorTScxLDgmIUg/L0NNISg1OTotIihEKFEwNSRRMDAnQVBKJ1IoPSEiJzgpIjROOlZQQyonNDclJUExJyFMQQorTSdRXEMmUihJK0NRLTQ1PT82NVE2NSY+ODBCJEgpJDg9JjFTMlk0ST5ARVs6V01LQUg3QS0wNDxdMkhYWQorTTM0TEhIQ0hWLzU/OTIpIi9DOEFHOSVbM1Q9NzhXPVc8V14vQFdAK0IgKiE9JiEkNCZRJDYlQVA/L0NQXQorTSZVITIsIihEKFEoMyQxKC4nIVBMJ1IoPSgwLENWIjhCKyZNTCczMVgkUT09NiFQOCcxTDsnMUBCKDI4VAorTTBUOSw1JFkxMiRBPkRTXD0pIiEjJjE4OlUtXSU4WCE6VU1XMlgqWiIzVCUnLjRKMS40UScoSVBVLSMpOQorTVYkJjJFKForOjYxRVc9Uz9YXjtGWT5DS1ouOCJaQCJAO0IkMyYyIDUmQUhEKiQsXTBRWSkzQzhJKlJINgorTSUxLDQkQiBDLSI4SSkiQCMqPSRMKkJZQjkyIFtBQUA3N1VIQyZCKEMoIihAKjI0RCtDTFwwREkkMVNZIQorTTdJJSEoQkRFM1JAPidNU1AwVjYiOC5DSVYuWl1CRFRYLiJdJUIzISEvUi4/LFJQUTc+OSpGKUYvQzYxPQorTTlOV1ZfX1glX1grXF5AJ14gP1wgTSUsPychSDUkUTA0JzIsVy8xQD42VThdKCFMQSQxMDkkQSQ7J0JAPworTSlCIEInIixCJ0IsQzhWSEgnODxUOkM8NyRBVDkmUUwjJ0wwSS9EKTU0REU0OFRRKTM6TkIuQjRAJlQ8RworTSZQXj1WJik1PUYjNFU+Mkg8JExfMjMpPEJDQS0yRDhEVlNUWC5VPzkzPE4pNjU1PTg2PzRVTTc3Vj1XOworTVdOKz9YQCtBIC9NKSYhRDgkUSQyJEE4Py1UKDQlRS0rLjIgOygxKDElQSAvJjFYSigyQEIpIiBHKUIoQworTSg2LUooQkYqLCchIiZQVDomUVA9JkFMPigzOFoyVDxfMkVFIi5TWkFHQzhBJyE9IyhRQC1HTSk9Nkc5PAorTVRNR0BLN1kxL1Q8TzVIUFwyVDkiJ000WC1DITlVVE8xRSYhPDc2KU5XXV89V14rRlkuP0pZXkghWjAnSAorTSAvTTooMUw9JiE0NiVBVEUvJDQ8JkRVKC9SPEIqITQzJiEoMycyNFIqMyBKKyJATytCSEooVUlDKTMiOAorTS03NSUoUVBCKDI8QSdSLEUpMzBUMFNUVTAkXFgsM1pLSSNMRigxUTIsQigvSj4tOzcnJUFZLi9ITkhBLAorSC5DXEE0OEBWMFNIWiddQFYrQl09WjVXQEdFXT02JTlPWy8/XV5fU19fT19fXl9YIV8wJ18gICAgCisgCitlbmQKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0dGFyLnRhciBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90ZXN0dGFyLnRhcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDAxODJhCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3Rlc3R0YXIudGFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiODBkMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CkBAIC0wLDAgKzEsMjUgQEAKKyMgSGVscGVyIHNjcmlwdCBmb3IgdGVzdF90ZW1wZmlsZS5weS4gIGFyZ3ZbMl0gaXMgdGhlIG51bWJlciBvZiBhIGZpbGUKKyMgZGVzY3JpcHRvciB3aGljaCBzaG91bGQgX25vdF8gYmUgb3Blbi4gIENoZWNrIHRoaXMgYnkgYXR0ZW1wdGluZyB0bworIyB3cml0ZSB0byBpdCAtLSBpZiB3ZSBzdWNjZWVkLCBzb21ldGhpbmcgaXMgd3JvbmcuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworCit2ZXJib3NlID0gKHN5cy5hcmd2WzFdID09ICd2JykKK3RyeToKKyAgICBmZCA9IGludChzeXMuYXJndlsyXSkKKworICAgIHRyeToKKyAgICAgICAgb3Mud3JpdGUoZmQsICJibGF0IikKKyAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICMgU3VjY2VzcyAtLSBjb3VsZCBub3Qgd3JpdGUgdG8gZmQuCisgICAgICAgIHN5cy5leGl0KDApCisgICAgZWxzZToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImZkICVkIGlzIG9wZW4gaW4gY2hpbGQiICUgZmQpCisgICAgICAgIHN5cy5leGl0KDEpCisKK2V4Y2VwdCBTdGFuZGFyZEVycm9yOgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHJhaXNlCisgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90aHJlYWRlZF9pbXBvcnRfaGFuZ2Vycy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90aHJlYWRlZF9pbXBvcnRfaGFuZ2Vycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzUwODc0Ci0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3RocmVhZGVkX2ltcG9ydF9oYW5nZXJzLnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMgVGhpcyBpcyBhIGhlbHBlciBtb2R1bGUgZm9yIHRlc3RfdGhyZWFkZWRfaW1wb3J0LiAgVGhlIHRlc3QgaW1wb3J0cyB0aGlzCisjIG1vZHVsZSwgYW5kIHRoaXMgbW9kdWxlIHRyaWVzIHRvIHJ1biB2YXJpb3VzIFB5dGhvbiBsaWJyYXJ5IGZ1bmN0aW9ucyBpbgorIyB0aGVpciBvd24gdGhyZWFkLCBhcyBhIHNpZGUgZWZmZWN0IG9mIGJlaW5nIGltcG9ydGVkLiAgSWYgdGhlIHNwYXduZWQKKyMgdGhyZWFkIGRvZXNuJ3QgY29tcGxldGUgaW4gVElNRU9VVCBzZWNvbmRzLCBhbiAiYXBwZWFyZWQgdG8gaGFuZyIgbWVzc2FnZQorIyBpcyBhcHBlbmRlZCB0byB0aGUgbW9kdWxlLWdsb2JhbCBgZXJyb3JzYCBsaXN0LiAgVGhhdCBsaXN0IHJlbWFpbnMgZW1wdHkKKyMgaWYgKGFuZCBvbmx5IGlmKSBhbGwgZnVuY3Rpb25zIHRlc3RlZCBjb21wbGV0ZS4KKworVElNRU9VVCA9IDEwCisKK2ltcG9ydCB0aHJlYWRpbmcKKworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgb3MucGF0aAorCitlcnJvcnMgPSBbXQorCisjIFRoaXMgY2xhc3MgbWVyZWx5IHJ1bnMgYSBmdW5jdGlvbiBpbiBpdHMgb3duIHRocmVhZCBULiAgVGhlIHRocmVhZCBpbXBvcnRpbmcKKyMgdGhpcyBtb2R1bGUgaG9sZHMgdGhlIGltcG9ydCBsb2NrLCBzbyBpZiB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IFQgdHJpZXMKKyMgdG8gZG8gaXRzIG93biBpbXBvcnRzIGl0IHdpbGwgYmxvY2sgd2FpdGluZyBmb3IgdGhpcyBtb2R1bGUncyBpbXBvcnQKKyMgdG8gY29tcGxldGUuCitjbGFzcyBXb3JrZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmN0aW9uLCBhcmdzKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KKyAgICAgICAgc2VsZi5hcmdzID0gYXJncworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jdGlvbigqc2VsZi5hcmdzKQorCitmb3IgbmFtZSwgZnVuYywgYXJncyBpbiBbCisgICAgICAgICMgQnVnIDE0NzM3NjogIFRlbXBvcmFyeUZpbGUgaHVuZyBvbiBXaW5kb3dzLCBzdGFydGluZyBpbiBQeXRob24gMi40LgorICAgICAgICAoInRlbXBmaWxlLlRlbXBvcmFyeUZpbGUiLCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlLCAoKSksCisKKyAgICAgICAgIyBUaGUgcmVhbCBjYXVzZSBmb3IgYnVnIDE0NzM3NjogIG50cGF0aC5hYnNwYXRoKCkgY2F1c2VkIHRoZSBoYW5nLgorICAgICAgICAoIm9zLnBhdGguYWJzcGF0aCIsIG9zLnBhdGguYWJzcGF0aCwgKCcuJywpKSwKKyAgICAgICAgXToKKworICAgIHQgPSBXb3JrZXIoZnVuYywgYXJncykKKyAgICB0LnN0YXJ0KCkKKyAgICB0LmpvaW4oVElNRU9VVCkKKyAgICBpZiB0LmlzX2FsaXZlKCk6CisgICAgICAgIGVycm9ycy5hcHBlbmQoIiVzIGFwcGVhcmVkIHRvIGhhbmciICUgbmFtZSkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90aW1lX2hhc2hsaWIucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGltZV9oYXNobGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjcwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdGltZV9oYXNobGliLnB5CkBAIC0wLDAgKzEsODcgQEAKKyMgSXQncyBpbnRlbmRlZCB0aGF0IHRoaXMgc2NyaXB0IGJlIHJ1biBieSBoYW5kLiAgSXQgcnVucyBzcGVlZCB0ZXN0cyBvbgorIyBoYXNobGliIGZ1bmN0aW9uczsgaXQgZG9lcyBub3QgdGVzdCBmb3IgY29ycmVjdG5lc3MuCisKK2ltcG9ydCBzeXMsIHRpbWUKK2ltcG9ydCBoYXNobGliCisKKworZGVmIGNyZWF0b3JGdW5jKCk6CisgICAgcmFpc2UgUnVudGltZUVycm9yLCAiZWVrLCBjcmVhdG9yRnVuYyBub3Qgb3ZlcnJpZGRlbiIKKworZGVmIHRlc3Rfc2NhbGVkX21zZyhzY2FsZSwgbmFtZSk6CisgICAgaXRlcmF0aW9ucyA9IDEwNjIwMS9zY2FsZSAqIDIwCisgICAgbG9uZ1N0ciA9ICdaJypzY2FsZQorCisgICAgbG9jYWxDRiA9IGNyZWF0b3JGdW5jCisgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgIGZvciBmIGluIHhyYW5nZShpdGVyYXRpb25zKToKKyAgICAgICAgeCA9IGxvY2FsQ0YobG9uZ1N0cikuZGlnZXN0KCkKKyAgICBlbmQgPSB0aW1lLnRpbWUoKQorCisgICAgcHJpbnQgKCclMi4yZicgJSAoZW5kLXN0YXJ0KSksICJzZWNvbmRzIiwgaXRlcmF0aW9ucywgIngiLCBsZW4obG9uZ1N0ciksICJieXRlcyIsIG5hbWUKKworZGVmIHRlc3RfY3JlYXRlKCk6CisgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgIGZvciBmIGluIHhyYW5nZSgyMDAwMCk6CisgICAgICAgIGQgPSBjcmVhdG9yRnVuYygpCisgICAgZW5kID0gdGltZS50aW1lKCkKKworICAgIHByaW50ICgnJTIuMmYnICUgKGVuZC1zdGFydCkpLCAic2Vjb25kcyIsICdbMjAwMDAgY3JlYXRpb25zXScKKworZGVmIHRlc3RfemVybygpOgorICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICBmb3IgZiBpbiB4cmFuZ2UoMjAwMDApOgorICAgICAgICB4ID0gY3JlYXRvckZ1bmMoKS5kaWdlc3QoKQorICAgIGVuZCA9IHRpbWUudGltZSgpCisKKyAgICBwcmludCAoJyUyLjJmJyAlIChlbmQtc3RhcnQpKSwgInNlY29uZHMiLCAnWzIwMDAwICIiIGRpZ2VzdHNdJworCisKKworaE5hbWUgPSBzeXMuYXJndlsxXQorCisjCisjIHNldHVwIG91ciBjcmVhdG9yRnVuYyB0byB0ZXN0IHRoZSByZXF1ZXN0ZWQgaGFzaAorIworaWYgaE5hbWUgaW4gKCdfbWQ1JywgJ19zaGEnKToKKyAgICBleGVjICdpbXBvcnQgJytoTmFtZQorICAgIGV4ZWMgJ2NyZWF0b3JGdW5jID0gJytoTmFtZSsnLm5ldycKKyAgICBwcmludCAidGVzdGluZyBzcGVlZCBvZiBvbGQiLCBoTmFtZSwgImxlZ2FjeSBpbnRlcmZhY2UiCitlbGlmIGhOYW1lID09ICdfaGFzaGxpYicgYW5kIGxlbihzeXMuYXJndikgPiAzOgorICAgIGltcG9ydCBfaGFzaGxpYgorICAgIGV4ZWMgJ2NyZWF0b3JGdW5jID0gX2hhc2hsaWIuJXMnICUgc3lzLmFyZ3ZbMl0KKyAgICBwcmludCAidGVzdGluZyBzcGVlZCBvZiBfaGFzaGxpYi4lcyIgJSBzeXMuYXJndlsyXSwgZ2V0YXR0cihfaGFzaGxpYiwgc3lzLmFyZ3ZbMl0pCitlbGlmIGhOYW1lID09ICdfaGFzaGxpYicgYW5kIGxlbihzeXMuYXJndikgPT0gMzoKKyAgICBpbXBvcnQgX2hhc2hsaWIKKyAgICBleGVjICdjcmVhdG9yRnVuYyA9IGxhbWJkYSB4PV9oYXNobGliLm5ldyA6IHgoJXIpJyAlIHN5cy5hcmd2WzJdCisgICAgcHJpbnQgInRlc3Rpbmcgc3BlZWQgb2YgX2hhc2hsaWIubmV3KCVyKSIgJSBzeXMuYXJndlsyXQorZWxpZiBoYXNhdHRyKGhhc2hsaWIsIGhOYW1lKSBhbmQgY2FsbGFibGUoZ2V0YXR0cihoYXNobGliLCBoTmFtZSkpOgorICAgIGNyZWF0b3JGdW5jID0gZ2V0YXR0cihoYXNobGliLCBoTmFtZSkKKyAgICBwcmludCAidGVzdGluZyBzcGVlZCBvZiBoYXNobGliLiIraE5hbWUsIGdldGF0dHIoaGFzaGxpYiwgaE5hbWUpCitlbHNlOgorICAgIGV4ZWMgImNyZWF0b3JGdW5jID0gbGFtYmRhIHg9aGFzaGxpYi5uZXcgOiB4KCVyKSIgJSBoTmFtZQorICAgIHByaW50ICJ0ZXN0aW5nIHNwZWVkIG9mIGhhc2hsaWIubmV3KCVyKSIgJSBoTmFtZQorCit0cnk6CisgICAgdGVzdF9jcmVhdGUoKQorZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgcHJpbnQKKyAgICBwcmludCAicGFzcyBhcmd1bWVudChzKSBuYW1pbmcgdGhlIGhhc2ggdG8gcnVuIGEgc3BlZWQgdGVzdCBvbjoiCisgICAgcHJpbnQgIiAnX21kNScgYW5kICdfc2hhJyB0ZXN0IHRoZSBsZWdhY3kgYnVpbHRpbiBtZDUgYW5kIHNoYSIKKyAgICBwcmludCAiICdfaGFzaGxpYicgJ29wZW5zc2xfaE5hbWUnICdmYXN0JyB0ZXN0cyB0aGUgYnVpbHRpbiBfaGFzaGxpYiIKKyAgICBwcmludCAiICdfaGFzaGxpYicgJ2hOYW1lJyB0ZXN0cyBidWlsdGluIF9oYXNobGliLm5ldyhzaGFGT08pIgorICAgIHByaW50ICIgJ2hOYW1lJyB0ZXN0cyB0aGUgaGFzaGxpYi5oTmFtZSgpIGltcGxlbWVudGF0aW9uIGlmIGl0IGV4aXN0cyIKKyAgICBwcmludCAiICAgICAgICAgb3RoZXJ3aXNlIGl0IHVzZXMgaGFzaGxpYi5uZXcoaE5hbWUpLiIKKyAgICBwcmludAorICAgIHJhaXNlCisKK3Rlc3RfemVybygpCit0ZXN0X3NjYWxlZF9tc2coc2NhbGU9MTA2MjAxLCBuYW1lPSdbaHVnZSBkYXRhXScpCit0ZXN0X3NjYWxlZF9tc2coc2NhbGU9MTA2MjAsIG5hbWU9J1tsYXJnZSBkYXRhXScpCit0ZXN0X3NjYWxlZF9tc2coc2NhbGU9MTA2MiwgbmFtZT0nW21lZGl1bSBkYXRhXScpCit0ZXN0X3NjYWxlZF9tc2coc2NhbGU9NDI0LCBuYW1lPSdbNCpzbWFsbCBkYXRhXScpCit0ZXN0X3NjYWxlZF9tc2coc2NhbGU9MzM2LCBuYW1lPSdbMypzbWFsbCBkYXRhXScpCit0ZXN0X3NjYWxlZF9tc2coc2NhbGU9MjEyLCBuYW1lPSdbMipzbWFsbCBkYXRhXScpCit0ZXN0X3NjYWxlZF9tc2coc2NhbGU9MTA2LCBuYW1lPSdbc21hbGwgZGF0YV0nKQordGVzdF9zY2FsZWRfbXNnKHNjYWxlPWNyZWF0b3JGdW5jKCkuZGlnZXN0X3NpemUsIG5hbWU9J1tkaWdlc3Rfc2l6ZSBkYXRhXScpCit0ZXN0X3NjYWxlZF9tc2coc2NhbGU9MTAsIG5hbWU9J1t0aW55IGRhdGFdJykKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90b2tlbml6ZV90ZXN0cy50eHQgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdG9rZW5pemVfdGVzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjNiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdG9rZW5pemVfdGVzdHMudHh0CkBAIC0wLDAgKzEsMTc4IEBACisjIFRlc3RzIGZvciB0aGUgJ3Rva2VuaXplJyBtb2R1bGUuCisjIExhcmdlIGJpdHMgc3RvbGVuIGZyb20gdGVzdF9ncmFtbWFyLnB5LiAKKworIyBDb21tZW50cworIiMiCisjJworIyIKKyNcCisgICAgICAgIworICAgICMgYWJjCisnJycjCisjJycnCisKK3ggPSAxICAjCisKKyMgQmFsYW5jaW5nIGNvbnRpbnVhdGlvbgorCithID0gKDMsIDQsCisgIDUsIDYpCit5ID0gWzMsIDQsCisgIDVdCit6ID0geydhJzo1LAorICAnYic6Nn0KK3ggPSAobGVuKGB5YCkgKyA1KnggLSBhWworICAgMyBdCisgICAtIHggKyBsZW4oeworICAgfQorICAgICkKKyAgKQorCisjIEJhY2tzbGFzaCBtZWFucyBsaW5lIGNvbnRpbnVhdGlvbjoKK3ggPSAxIFwKKysgMQorCisjIEJhY2tzbGFzaCBkb2VzIG5vdCBtZWFucyBjb250aW51YXRpb24gaW4gY29tbWVudHMgOlwKK3ggPSAwCisKKyMgT3JkaW5hcnkgaW50ZWdlcnMKKzB4ZmYgPD4gMjU1CiswMzc3IDw+IDI1NQorMjE0NzQ4MzY0NyAgICE9IDAxNzc3Nzc3Nzc3NworLTIxNDc0ODM2NDctMSAhPSAwMjAwMDAwMDAwMDAKKzAzNzc3Nzc3Nzc3NyAhPSAtMQorMHhmZmZmZmZmZiAhPSAtMQorCisjIExvbmcgaW50ZWdlcnMKK3ggPSAwTAoreCA9IDBsCit4ID0gMHhmZmZmZmZmZmZmZmZmZmZmTAoreCA9IDB4ZmZmZmZmZmZmZmZmZmZmZmwKK3ggPSAwNzc3Nzc3Nzc3Nzc3Nzc3NzdMCit4ID0gMDc3Nzc3Nzc3Nzc3Nzc3Nzc3bAoreCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MEwKK3ggPSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTBsCisKKyMgRmxvYXRpbmctcG9pbnQgbnVtYmVycworeCA9IDMuMTQKK3ggPSAzMTQuCit4ID0gMC4zMTQKKyMgWFhYIHggPSAwMDAuMzE0Cit4ID0gLjMxNAoreCA9IDNlMTQKK3ggPSAzRTE0Cit4ID0gM2UtMTQKK3ggPSAzZSsxNAoreCA9IDMuZTE0Cit4ID0gLjNlMTQKK3ggPSAzLjFlNAorCisjIFN0cmluZyBsaXRlcmFscworeCA9ICcnOyB5ID0gIiI7Cit4ID0gJ1wnJzsgeSA9ICInIjsKK3ggPSAnIic7IHkgPSAiXCIiOworeCA9ICJkb2Vzbid0IFwic2hyaW5rXCIgZG9lcyBpdCIKK3kgPSAnZG9lc25cJ3QgInNocmluayIgZG9lcyBpdCcKK3ggPSAiZG9lcyBcInNocmlua1wiIGRvZXNuJ3QgaXQiCit5ID0gJ2RvZXMgInNocmluayIgZG9lc25cJ3QgaXQnCit4ID0gIiIiCitUaGUgInF1aWNrIgorYnJvd24gZm94CitqdW1wcyBvdmVyCit0aGUgJ2xhenknIGRvZy4KKyIiIgoreSA9ICdcblRoZSAicXVpY2siXG5icm93biBmb3hcbmp1bXBzIG92ZXJcbnRoZSBcJ2xhenlcJyBkb2cuXG4nCit5ID0gJycnCitUaGUgInF1aWNrIgorYnJvd24gZm94CitqdW1wcyBvdmVyCit0aGUgJ2xhenknIGRvZy4KKycnJzsKK3kgPSAiXG5cCitUaGUgXCJxdWlja1wiXG5cCiticm93biBmb3hcblwKK2p1bXBzIG92ZXJcblwKK3RoZSAnbGF6eScgZG9nLlxuXAorIjsKK3kgPSAnXG5cCitUaGUgXCJxdWlja1wiXG5cCiticm93biBmb3hcblwKK2p1bXBzIG92ZXJcblwKK3RoZSBcJ2xhenlcJyBkb2cuXG5cCisnOworeCA9IHInXFwnICsgUidcXCcKK3ggPSByJ1wnJyArICcnCit5ID0gcicnJworZm9vIGJhciBcXAorYmF6JycnICsgUicnJworZm9vJycnCit5ID0gciIiImZvbworYmFyIFxcIGJhegorIiIiICsgUicnJ3NwYW0KKycnJworeCA9IHUnYWJjJyArIFUnQUJDJworeSA9IHUiYWJjIiArIFUiQUJDIgoreCA9IHVyJ2FiYycgKyBVcidBQkMnICsgdVInQUJDJyArIFVSJ0FCQycKK3kgPSB1ciJhYmMiICsgVXIiQUJDIiArIHVSIkFCQyIgKyBVUiJBQkMiCit4ID0gdXInXFwnICsgVVInXFwnCit4ID0gdXInXCcnICsgJycKK3kgPSB1cicnJworZm9vIGJhciBcXAorYmF6JycnICsgVVInJycKK2ZvbycnJworeSA9IFVyIiIiZm9vCitiYXIgXFwgYmF6CisiIiIgKyB1UicnJ3NwYW0KKycnJworCisjIEluZGVudGF0aW9uCitpZiAxOgorICAgIHggPSAyCitpZiAxOgorICAgICAgICB4ID0gMgoraWYgMToKKyAgICB3aGlsZSAwOgorICAgICBpZiAwOgorICAgICAgICAgICB4ID0gMgorICAgICB4ID0gMgoraWYgMDoKKyAgaWYgMjoKKyAgIHdoaWxlIDA6CisgICAgICAgIGlmIDE6CisgICAgICAgICAgeCA9IDIKKworIyBPcGVyYXRvcnMKKworZGVmIGQyMihhLCBiLCBjPTEsIGQ9Mik6IHBhc3MKK2RlZiBkMDF2KGE9MSwgKnJlc3R0LCAqKnJlc3RkKTogcGFzcworCisoeCwgeSkgPD4gKHsnYSc6MX0sIHsnYic6Mn0pCisKKyMgY29tcGFyaXNvbgoraWYgMSA8IDEgPiAxID09IDEgPj0gMSA8PSAxIDw+IDEgIT0gMSBpbiAxIG5vdCBpbiAxIGlzIDEgaXMgbm90IDE6IHBhc3MKKworIyBiaW5hcnkKK3ggPSAxICYgMQoreCA9IDEgXiAxCit4ID0gMSB8IDEKKworIyBzaGlmdAoreCA9IDEgPDwgMSA+PiAxCisKKyMgYWRkaXRpdmUKK3ggPSAxIC0gMSArIDEgLSAxICsgMQorCisjIG11bHRpcGxpY2F0aXZlCit4ID0gMSAvIDEgKiAxICUgMQorCisjIHVuYXJ5Cit4ID0gfjEgXiAxICYgMSB8IDEgJiAxIF4gLTEKK3ggPSAtMSoxLzEgKyAxKjEgLSAtLS0xKjEKKworIyBzZWxlY3RvcgoraW1wb3J0IHN5cywgdGltZQoreCA9IHN5cy5tb2R1bGVzWyd0aW1lJ10udGltZSgpCisKK0BzdGF0aWNtZXRob2QKK2RlZiBmb28oKTogcGFzcworCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvdHJhY2VkbW9kdWxlcy9fX2luaXRfXy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90cmFjZWRtb2R1bGVzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZmE0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdHJhY2VkbW9kdWxlcy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQgQEAKKyIiIlRoaXMgcGFja2FnZSBjb250YWlucyBtb2R1bGVzIHRoYXQgaGVscCB0ZXN0aW5nIHRoZSB0cmFjZS5weSBtb2R1bGUuIE5vdGUKK3RoYXQgdGhlIGV4YWN0IGxvY2F0aW9uIG9mIGZ1bmN0aW9ucyBpbiB0aGVzZSBtb2R1bGVzIGlzIGltcG9ydGFudCwgYXMgdHJhY2UucHkKK3Rha2VzIHRoZSByZWFsIGxpbmUgbnVtYmVycyBpbnRvIGFjY291bnQuCisiIiIKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC90cmFjZWRtb2R1bGVzL3Rlc3Rtb2QucHkgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdHJhY2VkbW9kdWxlcy90ZXN0bW9kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Mjc3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvdHJhY2VkbW9kdWxlcy90ZXN0bW9kLnB5CkBAIC0wLDAgKzEsOSBAQAorZGVmIGZ1bmMoeCk6CisgICAgYiA9IHggKyAxCisgICAgcmV0dXJuIGIgKyAyCisKK2RlZiBmdW5jMigpOgorICAgICIiIlRlc3QgZnVuY3Rpb24gZm9yIGlzc3VlIDk5MzYgIiIiCisgICAgcmV0dXJuICgxLAorICAgICAgICAgICAgMiwKKyAgICAgICAgICAgIDMpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3Qvd2FybmluZ190ZXN0cy5weSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC93YXJuaW5nX3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNTE5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvd2FybmluZ190ZXN0cy5weQpAQCAtMCwwICsxLDkgQEAKKyMgSGVscGVyIG1vZHVsZSBmb3IgdGVzdGluZyB0aGUgc2tpcG1vZHVsZXMgYXJndW1lbnQgb2Ygd2FybmluZ3Mud2FybigpCisKK2ltcG9ydCB3YXJuaW5ncworCitkZWYgb3V0ZXIobWVzc2FnZSwgc3RhY2tsZXZlbD0xKToKKyAgICBpbm5lcihtZXNzYWdlLCBzdGFja2xldmVsKQorCitkZWYgaW5uZXIobWVzc2FnZSwgc3RhY2tsZXZlbD0xKToKKyAgICB3YXJuaW5ncy53YXJuKG1lc3NhZ2UsIHN0YWNrbGV2ZWw9c3RhY2tsZXZlbCkKZGlmZiAtLWdpdCBhL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC93aW5fY29uc29sZV9oYW5kbGVyLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3dpbl9jb25zb2xlX2hhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmY2VlMgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC93aW5fY29uc29sZV9oYW5kbGVyLnB5CkBAIC0wLDAgKzEsNDkgQEAKKyIiIlNjcmlwdCB1c2VkIHRvIHRlc3Qgb3Mua2lsbCBvbiBXaW5kb3dzLCBmb3IgaXNzdWUgIzEyMjAyMTIKKworVGhpcyBzY3JpcHQgaXMgc3RhcnRlZCBhcyBhIHN1YnByb2Nlc3MgaW4gdGVzdF9vcyBhbmQgaXMgdXNlZCB0byB0ZXN0IHRoZQorQ1RSTF9DX0VWRU5UIGFuZCBDVFJMX0JSRUFLX0VWRU5UIHNpZ25hbHMsIHdoaWNoIHJlcXVpcmVzIGEgY3VzdG9tIGhhbmRsZXIKK3RvIGJlIHdyaXR0ZW4gaW50byB0aGUga2lsbCB0YXJnZXQuCisKK1NlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2ODUwNDklMjh2PVZTLjg1JTI5LmFzcHggZm9yIGEKK3NpbWlsYXIgZXhhbXBsZSBpbiBDLgorIiIiCisKK2Zyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcywgV0lORlVOQ1RZUEUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBjdHlwZXMKK2ltcG9ydCBtbWFwCitpbXBvcnQgc3lzCisKKyMgRnVuY3Rpb24gcHJvdG90eXBlIGZvciB0aGUgaGFuZGxlciBmdW5jdGlvbi4gUmV0dXJucyBCT09MLCB0YWtlcyBhIERXT1JELgorSGFuZGxlclJvdXRpbmUgPSBXSU5GVU5DVFlQRSh3aW50eXBlcy5CT09MLCB3aW50eXBlcy5EV09SRCkKKworZGVmIF9jdHJsX2hhbmRsZXIoc2lnKToKKyAgICAiIiJIYW5kbGUgYSBzaWcgZXZlbnQgYW5kIHJldHVybiAwIHRvIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyIiIgorICAgIGlmIHNpZyA9PSBzaWduYWwuQ1RSTF9DX0VWRU5UOgorICAgICAgICBwYXNzCisgICAgZWxpZiBzaWcgPT0gc2lnbmFsLkNUUkxfQlJFQUtfRVZFTlQ6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiVU5LTk9XTiBFVkVOVCIpCisgICAgcmV0dXJuIDAKKworY3RybF9oYW5kbGVyID0gSGFuZGxlclJvdXRpbmUoX2N0cmxfaGFuZGxlcikKKworCitTZXRDb25zb2xlQ3RybEhhbmRsZXIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyLlNldENvbnNvbGVDdHJsSGFuZGxlcgorU2V0Q29uc29sZUN0cmxIYW5kbGVyLmFyZ3R5cGVzID0gKEhhbmRsZXJSb3V0aW5lLCB3aW50eXBlcy5CT09MKQorU2V0Q29uc29sZUN0cmxIYW5kbGVyLnJlc3R5cGUgPSB3aW50eXBlcy5CT09MCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgIyBBZGQgb3VyIGNvbnNvbGUgY29udHJvbCBoYW5kbGluZyBmdW5jdGlvbiB3aXRoIHZhbHVlIDEKKyAgICBpZiBub3QgU2V0Q29uc29sZUN0cmxIYW5kbGVyKGN0cmxfaGFuZGxlciwgMSk6CisgICAgICAgIHByaW50KCJVbmFibGUgdG8gYWRkIFNldENvbnNvbGVDdHJsSGFuZGxlciIpCisgICAgICAgIGV4aXQoLTEpCisKKyAgICAjIEF3YWtlbiBtYWlsIHByb2Nlc3MKKyAgICBtID0gbW1hcC5tbWFwKC0xLCAxLCBzeXMuYXJndlsxXSkKKyAgICBtWzBdID0gJzEnCisKKyAgICAjIERvIG5vdGhpbmcgYnV0IHdhaXQgZm9yIHRoZSBzaWduYWwKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3Qvd3JvbmdjZXJ0LnBlbSBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC93cm9uZ2NlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOTJmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3Qvd3JvbmdjZXJ0LnBlbQpAQCAtMCwwICsxLDMyIEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlDWEFJQkFBS0JnUUM4OVpOeGpUZ1dncTdaMWcwdEo2NXcrazdsTkFqNUlnakxiMTU1VWtVcnowWHNIRG5ICitGbGJzVlVnMlh0azYrYm8yVUVZSXpON2NJbTVJbXBteVcvMnowSjFJRFZEbHZSMnhKNjU5eHJFMHY1YzJjQjZUCitmOWxuTlR3cFNvZUsyNE5kN0p3cTRqOXZrOTVmTHJkcXNCcTAvS1Zsc0NYZWl4Uy9DYXFxZHVYZnZ3SURBUUFCCitBb0dBUUZrbzR1eUNnemZ4cjRFemI0TXA1cE4zTnBxbnk1K0pleTNyOEVqU0FYOU9nbitDTllnb0JjZHRGZ2JxCisxeWlmLzBzSzdvaEdCSlU5RlVDQXdycU5CSTlaSEI2cmN5N2R4K2dVTE9tUkJHY2tsbjFvNVMxK3NtVmRtT3NXCis3elVWTEJWQnlLdU5XcVRZRmx6ZlZkNnM0aWlYdEFFMmlIbjNHQ3lZZGxJQ3dyRUNRUURoTVFWeEhkM0VGYnpnCitTRm1KQlRBUmxaMkdLQTNjMWcvaDkvWGJrRVBROS9Sd0kzdm5qSjJSYVNuamxmb0xsOFRPY2YwdU9HYk9FeUZlCisxOVJ2Q0xYakFrRUExcytVRTV6aUYrWVZrVzNXb2xEQ1Eya1E1V0c5K2NjZk5lYmZoNmI2N0I3TG41aUcwU2JnCitreTljanNPM2piTUpRdGx6QVFuSDE4NTBvUkQ1R2k1MWRRSkFJYkhDRExEWlU5T2sxVEkrSTJCaFZ1QTZGNjY2CitsRVo3VGVaYUpTWXEzNE9hVVlVZHJ3RzlPZHF3WjlzeTlMVWF2NEVTenUybGhFUWNoQ0pyS01uMjNRSkFSZXFzCitaTEhVZVRqZlhrVms3ZEhoV1BXU2xVWjZBaG1JbEEvQVE3UGF5ZzIvOHdNL0prWkVKRVB2R1Z5a21zOWlQVXJ2CitmckFEUnIraEFHZTQzSWV3blFKQkFKV0tabGxQZ0t1RUJQd29FbGRITlM4blJ1NjFEN0h6eEV6UTJ4bmZqK05rCisyZmdmMU1BenpUUnNpa2ZHRU5oVnNWV2VxT2NpaldiNmc1Z3N5Q21sUnBjPQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ3NEQ0NBaG1nQXdJQkFnSUpBT3FZT1lGSmZFRW9NQTBHQ1NxR1NJYjNEUUVCQlFVQU1FVXhDekFKQmdOVgorQkFZVEFrRlZNUk13RVFZRFZRUUlFd3BUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLRXhoSmJuUmxjbTVsZENCWAorYVdSbmFYUnpJRkIwZVNCTWRHUXdIaGNOTURnd05qSTJNVGd4TlRVeVdoY05NRGt3TmpJMk1UZ3hOVFV5V2pCRgorTVFzd0NRWURWUVFHRXdKQlZURVRNQkVHQTFVRUNCTUtVMjl0WlMxVGRHRjBaVEVoTUI4R0ExVUVDaE1ZU1c1MAorWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQgorZ1FDODlaTnhqVGdXZ3E3WjFnMHRKNjV3K2s3bE5BajVJZ2pMYjE1NVVrVXJ6MFhzSERuSEZsYnNWVWcyWHRrNgorK2JvMlVFWUl6TjdjSW01SW1wbXlXLzJ6MEoxSURWRGx2UjJ4SjY1OXhyRTB2NWMyY0I2VGY5bG5OVHdwU29lSworMjROZDdKd3E0ajl2azk1ZkxyZHFzQnEwL0tWbHNDWGVpeFMvQ2FxcWR1WGZ2d0lEQVFBQm80R25NSUdrTUIwRworQTFVZERnUVdCQlRjdE10STNFTzlPakxJMHg5Wm8yaWZrd0lpTmpCMUJnTlZIU01FYmpCc2dCVGN0TXRJM0VPOQorT2pMSTB4OVpvMmlma3dJaU5xRkpwRWN3UlRFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ1RDbE52YldVdAorVTNSaGRHVXhJVEFmQmdOVkJBb1RHRWx1ZEdWeWJtVjBJRmRwWkdkcGRITWdVSFI1SUV4MFpJSUpBT3FZT1lGSgorZkVFb01Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnWUVBUXdhN2p5YS9EZmhhRG43RQordXNQa3BnSVg4V0NMMkIxU3FuUlRYRVpmQlBQVnEvY1VtRkd5RVZSVkFUeVNSdU13aThQWGJWY09oWFh1b2NBKworNDNXK2lJc0Q5cFhhcENaaGhPZXJDcTE4VEMxZFdLOTh2TFVzb0s4UE1qQjZlNUgvTzhicW9qdjBFZUMrZnlDdworZVNIajVqcEM4aVpLakNIQm4rbUFpNGNRNTE0PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS1ucy54bWwgYi9QeXRob24tMi43LjUvTGliL3Rlc3QveG1sdGVzdGRhdGEvc2ltcGxlLW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWYzNGIyCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS1ucy54bWwKQEAgLTAsMCArMSw3IEBACis8P3BpIGRhdGE/PgorPCEtLSBjb21tZW50IC0tPgorPHJvb3QgeG1sbnM9J25hbWVzcGFjZSc+CisgICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50PgorICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICA8ZW1wdHktZWxlbWVudC8+Cis8L3Jvb3Q+CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QveG1sdGVzdGRhdGEvc2ltcGxlLnhtbCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGMyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QveG1sdGVzdGRhdGEvc2ltcGxlLnhtbApAQCAtMCwwICsxLDYgQEAKKzwhLS0gY29tbWVudCAtLT4KKzxyb290PgorICAgPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudD4KKyAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgPGVtcHR5LWVsZW1lbnQvPgorPC9yb290PgpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZjkyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwKQEAgLTAsMCArMSwxMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPEhUTUwgeG1sbnM6cHA9Imh0dHA6Ly93d3cuaXNvZ2VuLmNvbS9wYXVsL3Bvc3QtcHJvY2Vzc29yIj4KKzxUSVRMRT5JbnRyb2R1Y3Rpb24gdG8gWFNMPC9USVRMRT4KKzxIMT5JbnRyb2R1Y3Rpb24gdG8gWFNMPC9IMT4KKwkKKworCQorCQk8SFIvPgorCQk8SDI+T3ZlcnZpZXcKKzwvSDI+CisJCTxVTD4KKwkJCisJPExJPjEuSW50cm88L0xJPgorCisJPExJPjIuSGlzdG9yeTwvTEk+CisKKwk8TEk+My5YU0wgQmFzaWNzPC9MST4KKworCTxMST5MdW5jaDwvTEk+CisKKwk8TEk+NC5BbiBYTUwgRGF0YSBNb2RlbDwvTEk+CisKKwk8TEk+NS5YU0wgUGF0dGVybnM8L0xJPgorCisJPExJPjYuWFNMIFRlbXBsYXRlczwvTEk+CisKKwk8TEk+Ny5YU0wgRm9ybWF0dGluZyBNb2RlbAorPC9MST4KKworCQk8L1VMPgorCQorCisKKwkKKworCQorCQk8SFIvPgorCQk8SDI+SW50cm88L0gyPgorCQk8VUw+CisJCQorCTxMST5XaG8gYW0gST88L0xJPgorCisJPExJPldobyBhcmUgeW91PzwvTEk+CisKKwk8TEk+V2h5IGFyZSB3ZSBoZXJlPworPC9MST4KKworCQk8L1VMPgorCQorCisKKwkKKworCQorCQk8SFIvPgorCQk8SDI+SGlzdG9yeTogWE1MIGFuZCBTR01MPC9IMj4KKwkJPFVMPgorCQkKKwk8TEk+WE1MIGlzIGEgc3Vic2V0IG9mIFNHTUwuPC9MST4KKworCTxMST5TR01MIGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiBhYnN0cmFjdCBjb250ZW50IGZyb20gZm9ybWF0dGluZy48L0xJPgorCisJPExJPkFsc28gb25lIG9mIFhNTCdzIHByaW1hcnkgdmlydHVlcyAoaW4gdGhlIGRvYyBwdWJsaXNoaW5nIGRvbWFpbikuCis8L0xJPgorCisJCTwvVUw+CisJCisKKworCQorCisJCisJCTxIUi8+CisJCTxIMj5IaXN0b3J5OiBXaGF0IGFyZSBzdHlsZXNoZWV0cz88L0gyPgorCQk8VUw+CisJCQorCTxMST5TdHlsZXNoZWV0cyBzcGVjaWZ5IHRoZSBmb3JtYXR0aW5nIG9mIFNHTUwvWE1MIGRvY3VtZW50cy48L0xJPgorCisJPExJPlN0eWxlc2hlZXRzIHB1dCB0aGUgJnF1b3Q7c3R5bGUmcXVvdDsgYmFjayBpbnRvIGRvY3VtZW50cy48L0xJPgorCisJPExJPk5ldyBZb3JrIFRpbWVzIGNvbnRlbnQrTllUIFN0eWxlc2hlZXQgPSBOWVQgcGFwZXIKKzwvTEk+CisKKwkJPC9VTD4KKwkKKworCisJCisKKwkKKwkJPEhSLz4KKwkJPEgyPkhpc3Rvcnk6IEZPU0k8L0gyPgorCQk8VUw+CisJCQorCTxMST5GT1NJOiAmcXVvdDtGb3JtYXR0ZWQgT3V0cHV0IFNwZWNpZmljYXRpb24gSW5zdGFuY2UmcXVvdDsKKzxVTD4KKwk8TEk+TUlMLVNURC0yODAwMQorCTwvTEk+CisKKwk8TEk+Rk9TSSdzIGFyZSBTR01MIGRvY3VtZW50cworCTwvTEk+CisKKwk8TEk+QSBzdHlsZXNoZWV0IGZvciBhbm90aGVyIGRvY3VtZW50CisJPC9MST4KKzwvVUw+PC9MST4KKworCTxMST5PYnNvbGV0ZSBidXQgaW1wbGVtZW50ZWQuLi4KKzwvTEk+CisKKwkJPC9VTD4KKwkKKworCisJCis8L0hUTUw+CmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwub3V0IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGFiMWFiCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sLm91dApAQCAtMCwwICsxLDExNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PgorPEhUTUwgeG1sbnM6cHA9Imh0dHA6Ly93d3cuaXNvZ2VuLmNvbS9wYXVsL3Bvc3QtcHJvY2Vzc29yIj4KKzxUSVRMRT5JbnRyb2R1Y3Rpb24gdG8gWFNMPC9USVRMRT4KKzxIMT5JbnRyb2R1Y3Rpb24gdG8gWFNMPC9IMT4KKwkKKworCQorCQk8SFI+PC9IUj4KKwkJPEgyPk92ZXJ2aWV3Cis8L0gyPgorCQk8VUw+CisJCQorCTxMST4xLkludHJvPC9MST4KKworCTxMST4yLkhpc3Rvcnk8L0xJPgorCisJPExJPjMuWFNMIEJhc2ljczwvTEk+CisKKwk8TEk+THVuY2g8L0xJPgorCisJPExJPjQuQW4gWE1MIERhdGEgTW9kZWw8L0xJPgorCisJPExJPjUuWFNMIFBhdHRlcm5zPC9MST4KKworCTxMST42LlhTTCBUZW1wbGF0ZXM8L0xJPgorCisJPExJPjcuWFNMIEZvcm1hdHRpbmcgTW9kZWwKKzwvTEk+CisKKwkJPC9VTD4KKwkKKworCisJCisKKwkKKwkJPEhSPjwvSFI+CisJCTxIMj5JbnRybzwvSDI+CisJCTxVTD4KKwkJCisJPExJPldobyBhbSBJPzwvTEk+CisKKwk8TEk+V2hvIGFyZSB5b3U/PC9MST4KKworCTxMST5XaHkgYXJlIHdlIGhlcmU/Cis8L0xJPgorCisJCTwvVUw+CisJCisKKworCQorCisJCisJCTxIUj48L0hSPgorCQk8SDI+SGlzdG9yeTogWE1MIGFuZCBTR01MPC9IMj4KKwkJPFVMPgorCQkKKwk8TEk+WE1MIGlzIGEgc3Vic2V0IG9mIFNHTUwuPC9MST4KKworCTxMST5TR01MIGFsbG93cyB0aGUgc2VwYXJhdGlvbiBvZiBhYnN0cmFjdCBjb250ZW50IGZyb20gZm9ybWF0dGluZy48L0xJPgorCisJPExJPkFsc28gb25lIG9mIFhNTCdzIHByaW1hcnkgdmlydHVlcyAoaW4gdGhlIGRvYyBwdWJsaXNoaW5nIGRvbWFpbikuCis8L0xJPgorCisJCTwvVUw+CisJCisKKworCQorCisJCisJCTxIUj48L0hSPgorCQk8SDI+SGlzdG9yeTogV2hhdCBhcmUgc3R5bGVzaGVldHM/PC9IMj4KKwkJPFVMPgorCQkKKwk8TEk+U3R5bGVzaGVldHMgc3BlY2lmeSB0aGUgZm9ybWF0dGluZyBvZiBTR01ML1hNTCBkb2N1bWVudHMuPC9MST4KKworCTxMST5TdHlsZXNoZWV0cyBwdXQgdGhlICJzdHlsZSIgYmFjayBpbnRvIGRvY3VtZW50cy48L0xJPgorCisJPExJPk5ldyBZb3JrIFRpbWVzIGNvbnRlbnQrTllUIFN0eWxlc2hlZXQgPSBOWVQgcGFwZXIKKzwvTEk+CisKKwkJPC9VTD4KKwkKKworCisJCisKKwkKKwkJPEhSPjwvSFI+CisJCTxIMj5IaXN0b3J5OiBGT1NJPC9IMj4KKwkJPFVMPgorCQkKKwk8TEk+Rk9TSTogIkZvcm1hdHRlZCBPdXRwdXQgU3BlY2lmaWNhdGlvbiBJbnN0YW5jZSIKKzxVTD4KKwk8TEk+TUlMLVNURC0yODAwMQorCTwvTEk+CisKKwk8TEk+Rk9TSSdzIGFyZSBTR01MIGRvY3VtZW50cworCTwvTEk+CisKKwk8TEk+QSBzdHlsZXNoZWV0IGZvciBhbm90aGVyIGRvY3VtZW50CisJPC9MST4KKzwvVUw+PC9MST4KKworCTxMST5PYnNvbGV0ZSBidXQgaW1wbGVtZW50ZWQuLi4KKzwvTEk+CisKKwkJPC9VTD4KKwkKKworCisJCis8L0hUTUw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3htbHRlc3RzLnB5IGIvUHl0aG9uLTIuNy41L0xpYi90ZXN0L3htbHRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDM3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QveG1sdGVzdHMucHkKQEAgLTAsMCArMSwyMSBAQAorIyBDb252ZW5pZW5jZSB0ZXN0IG1vZHVsZSB0byBydW4gYWxsIG9mIHRoZSBYTUwtcmVsYXRlZCB0ZXN0cyBpbiB0aGUKKyMgc3RhbmRhcmQgbGlicmFyeS4KKworaW1wb3J0IHN5cworaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CisKK3Rlc3QudGVzdF9zdXBwb3J0LnZlcmJvc2UgPSAwCisKK2RlZiBydW50ZXN0KG5hbWUpOgorICAgIF9faW1wb3J0X18obmFtZSkKKyAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgIGlmIGhhc2F0dHIobW9kdWxlLCAidGVzdF9tYWluIik6CisgICAgICAgIG1vZHVsZS50ZXN0X21haW4oKQorCitydW50ZXN0KCJ0ZXN0LnRlc3RfbWluaWRvbSIpCitydW50ZXN0KCJ0ZXN0LnRlc3RfcHlleHBhdCIpCitydW50ZXN0KCJ0ZXN0LnRlc3Rfc2F4IikKK3J1bnRlc3QoInRlc3QudGVzdF94bWxfZXRyZWUiKQorcnVudGVzdCgidGVzdC50ZXN0X3htbF9ldHJlZV9jIikKK3J1bnRlc3QoInRlc3QudGVzdF94bWxsaWIiKQorcnVudGVzdCgidGVzdC50ZXN0X3htbHJwYyIpCmRpZmYgLS1naXQgYS9QeXRob24tMi43LjUvTGliL3Rlc3QvemlwZGlyLnppcCBiL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC96aXBkaXIuemlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjFkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24tMi43LjUvTGliL3Rlc3QvemlwZGlyLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCg==